Firenet

Changes On Branch NEWNET
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch NEWNET Excluding Merge-Ins

This is equivalent to a diff from 95ac0a9b8b to 7cb2f511ec

2016-01-06
14:21
Started JavaPlanner Leaf check-in: 7cb2f511ec user: jim tags: NEWNET
2016-01-03
11:01
QueFinder added & odetojoy show check-in: 9778542a31 user: jim tags: NEWNET
2010-04-04
18:47
Create new branch named "NEWNET" check-in: ddce19d277 user: jim tags: NEWNET
2010-03-31
10:38
Add app under work Closed-Leaf check-in: 95ac0a9b8b user: jim tags: LUA
2010-03-14
20:44
Add BS/DEL to Diag input check-in: bcb53526dd user: jim tags: LUA

Added Arduino/Tests/testrun.txt.































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
 :0200F0;12
 :0200F1;13 
 :0200F2;14 
 :0200F3;15 
 :0200F4;16 
 :0200F5;17 

 :0200AD;27

 :0200AA;24 
 
  :0200R;76
 
 
  :0200M;71 
 :0200T;78  
 :0200T2000;72
  :0200T3000;73
  
  State: [8]
** PACKET REC LEN: 2 DATA F0
FIRE Action F0
RESPONSE [:0002RF;46]
FFFFFF93
FIRE EARLY STOP [0]
FIRED NOW FIRE_TIME [1 116273 117090]
FIRE DONE
:0002RF;46

Real firing 

** PACKET REC LEN: 2 DATA F0
FIRE Action F0
RESPONSE [:0002RF;46]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28E]
FIRED NOW FIRE_TIME [0 21367 21367]
FIRE DONE
:0002RF;46

2nd PASS

** PACKET REC LEN: 2 DATA F0
FIRE Action F0
RESPONSE [:0002RF;46]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[0]
FIRE EARLY STOP [0]
FIRED NOW FIRE_TIME [1 111446 111803]
FIRE DONE
:0002RF;46

2000 Firing time

** PACKET REC LEN: 2 DATA F0
FIRE Action F0
RESPONSE [:0002RF;46]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[290]
ADAPT A/D[290]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[290]
ADAPT A/D[290]
ADAPT A/D[290]
ADAPT A/D[290]
ADAPT A/D[28F]
ADAPT A/D[28E]
ADAPT A/D[28E]
ADAPT A/D[28E]
FIRED NOW FIRE_TIME [0 28021 28021]
FIRE DONE
:0002RF;46

-- ARM/FIRE/DISARM sequence + Read of fire data
-- Using 100 ms sense & 3000 ms max time

:0002RA;41
:0002RF;46
:0002RR312 ;40		->  312 ms firing time
:0002RA;41

tate: [8]
** PACKET REC LEN: 1 DATA R
Get Data Action R
FIRE TIMES
CHANNEL [0] TIME [3000] PSN [6] BUF[3000]
CHANNEL [1] TIME [3000] PSN [11] BUF[3000]
CHANNEL [2] TIME [3000] PSN [16] BUF[3000]
CHANNEL [3] TIME [3000] PSN [21] BUF[3000]
CHANNEL [4] TIME [3000] PSN [26] BUF[3000]
CHANNEL [5] TIME [3000] PSN [31] BUF[3000]
Result [RR3000 3000 3000 3000 3000 3000]
RESPONSE [:0002RR3000 3000 3000 3000 3000 3000;88]
:0002RR3000 3000 3000 3000 3000 3000;88

Added Arduino/apps/HeadEnd/HeadEnd.ino.























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
//-----------------------------------------------------------------------------
/*
  HeadEnd FIRENET Module
  
  This module will attach via USB to the control computer and send/receive
  packets to the firenet network.
  
  FNET -> Serial port
  Serial port -> FNET
  
  The FNET data is transferred byte by byte to the serial port
  
  The Serial port data is gathered into a packet:
  	:  Start character
  	<body characters>
  	;  End of body
  	x  Ckcsum 1
  	x  Cksumm2
  	
  	Then the XMIT enable is set high and the data transmitted in one
  	batch.
  	XMIT is disabled after transmission.
  
  30-Dec-2011 Initial version [7e720cf520] Inventory problem
   1-Jan-2012 [55fd308482] Use LED on board
   6-Jan-2012 Invert LED state
   7-Jan-2012 Make lamp pulse longer & pulse on received data
   8-Apr-2012 Minor edits
*/
//-----------------------------------------------------------------------------
#include <SoftwareSerial.h>
#include "debug.h"

// States during run
#define STATE_IDLE	0
#define STATE_HDR	1
#define STATE_BODY	2
#define STATE_CS1	4
#define STATE_CS2	5

// Pins used

#define PIN_XMIT	13
#define PIN_TX		12
#define PIN_RX		11
#define PIN_LED		9

// Constants
#define HDR_CHR		':'
#define TRLR_CHR	';'

// Set up second serial port 
SoftwareSerial fnet( PIN_RX,PIN_TX,false );

int state;
long lamp;					// Time lamp was turned off
#define LAMP_TIME	100		// 100 ms lamp time

#define BUFFER_SIZE	64
char buffer[BUFFER_SIZE];
int bufpsn;

//****** DEBUGGING CODE *********
#ifdef DEBUG_ON
void print_state(int state)
{
	switch(state)
	{
		case STATE_IDLE:	DEBUG_PRINTLN("IDLE STATE");
							break;

		case STATE_HDR:		DEBUG_PRINTLN("HDR STATE");
							break;

		case STATE_BODY:	DEBUG_PRINTLN("BODY STATE");
							break;

		case STATE_CS1:		DEBUG_PRINTLN("CS1 STATE");
							break;

		case STATE_CS2:		DEBUG_PRINTLN("CS2 STATE");
							break;
	}
}
#endif

// -----------------------------------------------------------
/*
	void setup()
		INPUT:	NONE
		OUTPUT:	NONE
		
		Set up xmit control line and serial ports
		Set state to idle
*/
// -----------------------------------------------------------
		
void setup()
{
  // Set up pins
  pinMode(PIN_XMIT,OUTPUT);
  digitalWrite(PIN_XMIT,0);
  pinMode(PIN_LED,OUTPUT);
  digitalWrite(PIN_LED,0);
  
  // Set up serial ports
  Serial.begin(38400); 
  fnet.begin( 9600 );
  
  // Set up state
  
  state = STATE_IDLE;
  lamp = 0;
  
  DEBUG_PRINT("\r\nHEAD END Test PGM V[ ");
  DEBUG_PRINT(__DATE__);
  DEBUG_PRINT(" ");
  DEBUG_PRINT(__TIME__);
  DEBUG_PRINTLN("]");
}

// -----------------------------------------------------------
/*
	void loop()
		INPUT:	NONE
		OUTPUT:	NONE
		
		Read serial inputs:
			FNET	->	Serial output immediately
			Serial  Read and form packet
					Then send to FNET
*/
// -----------------------------------------------------------

void loop()
{
	int ch;
	int i;
	long val;
	
	// Main action:
	// (1) Data received from FNET -> Serial
	
	if( fnet.available() )
	{
		ch = fnet.read();
		Serial.write( ch );
		digitalWrite(PIN_LED,1);
		lamp = millis();
	}
	
	// (2) Data received from Serial
	//	Form packet then send
	
	if( Serial.available() )
	{
		ch = Serial.read();
		
		DEBUG_PRINT("CHARACTER READ [");
		DEBUG_PRINT_HEX(ch);
		DEBUG_PRINTLN("]");
		
		// Is it a header character ?
		
		if( ch == HDR_CHR )
		{
			state = STATE_HDR;
		}
		
#if DEBUG_ON
	print_state(state);
#endif
		// (3) Action depends on state
		
		switch( state )
		{
		
			case STATE_IDLE:	bufpsn = 0;
								break;	// Drop characters
			
			case STATE_HDR:	// Begin buffer store
							bufpsn = 0;
							buffer[bufpsn++] = ch;
							state = STATE_BODY;
							break;
							
			case STATE_BODY:	// Store the body
								// & Look for trlr chr
							buffer[bufpsn++] = ch;
							if( ch == TRLR_CHR )
								state = STATE_CS1;
							break;
							
			case STATE_CS1:	// Store first cksum
							buffer[bufpsn++] = ch;
							state = STATE_CS2;	// Advance to last state
							break;
							
			case STATE_CS2:	// Store second cksum
							buffer[bufpsn++] = ch;
							
							// Send it out, enable xmit,send & disable
							// and then go to idle
							
							digitalWrite(PIN_XMIT,1);
							digitalWrite(PIN_LED,1);
							lamp = millis();

							for( i=0; i<bufpsn; i++ )
							{
								fnet.write(buffer[i]);
							}
							digitalWrite(PIN_XMIT,0);
							state = STATE_IDLE;
							bufpsn = 0;
							break;
		}
		
		// Add checking here for bad packets
		// just ignore them and drop the
		// message
		
		if( bufpsn >= BUFFER_SIZE )
		{
			// Bad input, go to idle
			state = STATE_IDLE;
		}
	}
	
	// See if the lamp has been on long enough
	val = millis() - lamp;
	if( val > LAMP_TIME )
		digitalWrite(PIN_LED,0);
}

Added Arduino/apps/HeadEnd/debug.h.

































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//**********************************************************************
/*
  DEBUG TOOLS
  
  26-May-2010 Initial Verson
   3-Jan-2011 Change to be all MACROS
  17-Jan-2011 [f38bf44b59] Add network control to debug print
*/
//**********************************************************************/

#ifndef DEBUG_F
#define DEBUG_F	1

//#define DEBUG_ON		1		// Enables debug print

#ifdef DEBUG_ON
	#define DEBUG_PRINTLN(x)	Serial.println(x);
								
	#define DEBUG_PRINT(x)		Serial.print(x);
								
	#define DEBUG_PRINT_DEC(x)	Serial.print(x,DEC);
								
	#define DEBUG_PRINT_HEX(x)	Serial.print(x,HEX);
#else
	#define DEBUG_PRINTLN(x)
	#define DEBUG_PRINT(x)
	#define DEBUG_PRINT_DEC(x)
	#define DEBUG_PRINT_HEX(x)

#endif

#endif

Added Arduino/apps/newnet/debug.h.



















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//**********************************************************************
/*
  DEBUG TOOLS
  
  26-May-2010 Initial Verson
   3-Jan-2011 Change to be all MACROS
  17-Jan-2011 [f38bf44b59] Add network control to debug print
*/
//**********************************************************************/

#ifndef DEBUG_F
#define DEBUG_F	1

//#define DEBUG_ON		1		// Enables debug print
//#define FAKE_NETWORK	1		// Enables line editing input

#ifdef DEBUG_ON
	#define DEBUG_PRINTLN(x)	digitalWrite(TX_CNTL,1);\
								Serial.println(x);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT(x)		digitalWrite(TX_CNTL,1);\
								Serial.print(x);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT_DEC(x)	digitalWrite(TX_CNTL,1);\
								Serial.print(x,DEC);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT_HEX(x)	digitalWrite(TX_CNTL,1);\
								Serial.print(x,HEX);\
								digitalWrite(TX_CNTL,0)
#else
	#define DEBUG_PRINTLN(x)
	#define DEBUG_PRINT(x)
	#define DEBUG_PRINT_DEC(x)
	#define DEBUG_PRINT_HEX(x)

#endif

#endif

Added Arduino/apps/newnet/eerom.h.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//**********************************************************************
/*
  EEROM Definitions
  
 	16-Oct-2011	[1ac05cf7a5] Initial version
*/
//**********************************************************************/

#ifndef EEROM_H

// To cause an update to the EEROM data
// Increment this EROMVER
// This will cause EEROM to go to the new 
// defaults

#define EROMVER			(unsigned int)0x0

#define EROMVER_BASE	(unsigned int)0xA55A
#define ROMVER			EROMVER_BASE + EROMVER

 //******************************************
 // EEPROM DATA, 0 based ADDRESSES
 //	0-1		VERSION ID
 //	2-3		Unit ADDRESS value + compliment
 // 4-7		Firing time (4 bytes + compliment)
 // 8-9		Test mode + compliment
 //	10-11	Backoff time + compliment

// ROM VERSION DATA
#define ROMVER_LCNH		0
#define ROMVER_LCNL		1

 // ADDRESS DATA
#define ADDR_LCN    	2
#define CADDR_LCN   	3

// Firing time data
#define FIRE_TIME_MSB	4
#define FIRE_TIME_LSB	5
#define FIRE_TIME_CMSB	6
#define FIRE_TIME_CLSB	7

// Test mode data
#define TEST_MODE_LCN		8
#define CTEST_MODE_LCN		9

// Backoff time data
#define BACKOFF_TIME_LCN	10
#define BACKOFF_TIME_LCNC	11

#endif EERPOM_H

Added Arduino/apps/newnet/newnet.h.































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//**********************************************************************
/*
  NETWORK DEFS
  
  26-May-2010 Initial Verson
  
	22-Jan-2011 [f2fa5910e4] Add delay for XMIT Enable/Disable
	23-Jan-2011 [0022f592fb] Add code to check status of firing stations
	 5-Feb-2011 [1da8774a51] Fix typo on Analog channel for firing channel 5
	18-Apr-2011 Add test mode to simulate actual firing [900924d040]
	30-Apr-2011 [e3d9606749] Change backoff time to 25 ms
				Also put backoff value in to EEPROM
	 1-May-2011	[092caa26e8] Add a RESET command
    14-May-2011	[c2029557fb] Check for device presense on arm
  	16-Jul-2011 [9e81c1a523] Add adaptive firing action & read out of
  				adaptive results
  	16-Oct-2011 [230cd6fbad] Incorrect use of presence flag in FIRE_LIST
  				structure add an A/D value to store and A/D value and
  				separate from use of presence bit in structure
  	13-Nov-2011 [fd8800dae4] Add PGM command to store firing events
  				Modify sizes of things so we don't run out of RAM
*/
//**********************************************************************/

#ifndef NEWNET_H
#define NEWNET_H	1

 //***
 // LOCAL CONSTANTS
 //***
#define DEF_ADDR	 	1
#define ADDR_MIN	 	1
#define ADDR_MAX    	32


//******************************************

#define FIRE0    2  // Fire Channel 0
#define FIRE0_AD 0

#define FIRE1    3  // Fire Channel 1
#define FIRE1_AD 1
 
#define FIRE2    4  // Fire Channel 2
#define FIRE2_AD 2

#define FIRE3    5  // Fire Channel 3
#define FIRE3_AD 3

#define FIRE4    6  // Fire Channel 4
#define FIRE4_AD 4

#define FIRE5    7  // Fire Channel 5
#define FIRE5_AD 5

 
typedef struct {
                char fire;  	// Fire control channel
                char ad;    	// Fire control A/D channel
                int ch_ad;		// Current A/D value
                char pres;  	// If present (i.e. < 0x80)
                char fired; 	// If if channel fired
                int fire_time;	// Firing time (adaptive result)
} FIRE_LIST;


#define RELAY    8  // Other controls
#define LED      9

#define TX_CNTL  13

#define DEVICE_PRESENT		0x80	// Above this device connected
#define FIRE_CHANNELS		6
#define DEF_FIRE_TIME		3000	// # ms to fire channel
#define  FIRE_CHECK_TIME	100		// Check fired every 100 ms
#define  FIRE_CHECK_WAIT	1		// Wait 1 ms for before pres measure

#define MSG_HDR		':'
#define MSG_TRLR	';'
#define DATA_SEP	','
#define PHY_DATA_SIZE	32		// Max size of data xfered
#define CKSUM_MODULO	100		// For address calc
#define BCAST_ADDRESS	0		// Broadcast address
#define MIN_ADDRESS		1
#define MAX_ADDRESS		32
#define DEF_TXEN_DLY		20				// TX enable disable delay time
#define RESP_BACKOFF	25+DEF_TXEN_DLY		// ms/address

#define BLINK_TIME	200			// 200 ms blink

#define PARENT_ADDRESS	MAX_ADDRESS

// Packet commands

// Operational commands
#define ARM_CMD			'A'
#define FIRE_CMD		'F'
#define DLY_CMD			'D'
#define STATUS_CMD		'S'
#define SYNC_CMD		'Z'
#define VER_CMD			'V'
#define CH_CMD			'C'
#define PGM_CMD			'P'
	
	
// Setup commands	
#define SET_AD_CMD		'W'
#define SET_FT_CMD		'T'
#define SET_TM_CMD		'M'
#define BKOFF_CMD		'B'
#define RESET_CMD		'X'

// Readout commands
#define GET_DATA_CMD	'R'

typedef enum {
				NO_PACKET,
				TO_PACKET_A,	// Getting TO address (first byte)
				TO_PACKET_B,	// Getting TO address (second byte)
				FROM_PACKET_A,	// Getting FROM address (first byte)
				FROM_PACKET_B,	// Getting FROM address (second byte)
				DATA_PACKET,	// Getting packet data
				CKSUM_PACKET_A,	// Getting packet cksum (first byte)
				CKSUM_PACKET_B,	// Getting packet cksum (second byte)
				RCVED_PACKET,	// Packet ready to use
			} PACKET_STATE;
			

typedef struct {
					// Received packet
					PACKET_STATE state;		// State of current received packet
					unsigned char to;
					unsigned char from;
					unsigned char len;
					char data[PHY_DATA_SIZE];	// Packet data
					short cksum;				// Accmulated cksum
					short pcksum;				// Packet checksum
										
					// Chunk handler 
					
					//unsigned char chunk_len;	// Length of current chunk
					//unsigned char chunk_end;	// End of current chunk
					//unsigned chunk_ptr;	// Psn in current chunk
				} PACKET;
				
typedef struct {
					char ch;			// Fire on this channel
					long ft;			// At this time
				} EVENT_QUEUE;
				
typedef struct {
					// Node State
					
					long now;					// Current offset time
					long time_offset;			// Offset time for Z action
					char armed;

					// Blink Data
					
					char in_blink;				// 1 if in blink
					long next_blink;			// Next blink time
					
					// Delay Data
					
					char in_delay;				// 1 if in a delay mode
					char delay_channel;
					long delay_time;			// Delay time (if any)
					
					// Fire Data
					
					char in_fire;				// 1 if in fire, 
					char fire_channel;			// Channel to fire
					long fire_time;				// End of fire time
					long adaptive_time;			// Used for adaptive firing time
					
					// Response data
					
					char in_resp;				// 1 If response in process
					long resp_time;				// Send response now
					char response[32];			// Response data buffer
					
					// Event programming
					
					char in_event;				// TRUE when in an event
					int event_count;			// # Events stored
					int event_next;				// Next event to be run
					unsigned char control;		// Source of PGM events
				} NODE_STATE;
#endif

void handle_packet( char data, PACKET *pkt );

Added Arduino/apps/newnet/newnet.pde.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
//**********************************************************************
/*
  Firenet NewNet Program
  
  This program takes serial input of the form of network commands
  and executes them
  
  At the prompt you can input a command of the for:
  
  : <to><from><Data>;<cksum>
  	:		- Header
  	<to>	- To address in the range 1-31 or 0 for broadcast
  	<from>	- SB 32
  	<Data>	- See firenet document
  	;		- End of data marker
  	<cksum>	- Two digit field, ignored here
 
	16-May-2010 Built skeleton program
	16-May-2010 Add in EEPROM address lcn
	25-May-2010 Make simulation correct, add in cksum for simulated msg
	28-May-2010 Add generate packets
	 1-Jun-2010 Add presence detector
	 1-Jun-2010 Add blink & fire stuff
	 2-Jan-2011 Change to accept regular messages
	16-Jan-2011 [e4208b8f56] Add response messages
	17-Jan-2011 Add enable TX code on response
	20-Jan-2011 Add Version command
	22-Jan-2011 [f2fa5910e4] Add delay for XMIT Enable/Disable
	23-Jan-2011 Shorten response in STATUS don't send NUL
	23-Jan-2011 [0022f592fb] Add code to check status of firing stations
	27-Jan-2011 Remove :'s in version_action() time value
	30-Jan-2011 Finish adding channel command [4fd91ac4c2]
	27-Feb-2011 Change channel to fired only if AD says so
	18-Apr-2011 Add test mode to simulate actual firing [900924d040]
	30-Apr-2011 [e3d9606749] Change backoff time to 25 ms
				Also put backoff value in to EEPROM
	 1-May-2011 [092caa26e8] Add a RESET command
	14-May-2011 [c2029557fb] Check for device presense on arm
	16-Jul-2011 [9e81c1a523] Add adaptive firing action & read out of
				adaptive results
	15-Oct-2011 [7cc38ceff4] Make ARM reset fired bits
  	16-Oct-2011 [230cd6fbad] Incorrect use of presence flag in FIRE_LIST
  				structure add an A/D value to store and A/D value and
  				separate from use of presence bit in structure
  	16-Oct-2011 [1ac05cf7a5] Add code to automatically update EEPROM when
  				it changes.
  	12-Nov-2011 [a1b444e30a] Problem with Delay fire command, fixed
  				with fix to msg parsing and uniform fire code.
  	13-Nov-2011 [fd8800dae4] Add PGM command to store firing events
  				NOTE: Had to decrease RAM footprint to get code working
  	20-Nov-2011  [b910156f8c] Change to stagger PGM return messages after fire
  	10-Dec-2011 [b654411cbe] Arduino 1.0 changes
  	29-Dec-2011 [7bcdf98e54] Fix bad return of V message extend ON time of
  				network output
*/
//**********************************************************************/

#include <avr/io.h>
#include <avr/wdt.h>
#include "EEPROM.h"
#include "debug.h"
#include "newnet.h"
#include "eerom.h"

#if 0
	#pragma mark -
	#pragma mark Global Data
#endif

// MODULE GLOBAL VARIABLES

FIRE_LIST fire[FIRE_CHANNELS];
EVENT_QUEUE events[FIRE_CHANNELS];
int board_address;            	// Board address value
PACKET p;						// Received packet
NODE_STATE state;
int fire_time;
bool test_mode;
int backoff_time;
#define STATIC_BUF_SZ	40
char buf[STATIC_BUF_SZ];		// General buffer for use in routines
					// Clear or don't expect constant data when using

#if 0
	#pragma mark -
	#pragma mark Arudino Routines
#endif

void setup();
void loop();

#if 0
	#pragma mark -
	#pragma mark Support routines
#endif

// **** Message Handling ****
static int check_net(void);
static void handle_net( char data, PACKET *pkt );
static int gen_packet(unsigned char to, int len, char *data,char *buf );
void set_response( unsigned char to );


// ***** TESTING CODE ***
static int get_message(int len,char *buffer);
static int get_input( char *prompt,int len,char *buffer );
char *state_name( int state );

// ***** Firing Channel code *****
//static void check_fire(FIRE_LIST *fl);
static void check_device(FIRE_LIST *fl);
void fire_op( int ch );
void next_event(void);
int store_in_queue( char ch,long ft );
void print_queue(void);

#if 0
	#pragma mark -
	#pragma mark Handler Routines
#endif

static void arm_action( PACKET *pkt );
static void fire_action( PACKET *pkt );
static void delay_action( PACKET *pkt );
static void pgm_action( PACKET *pkt );
static void status_action( PACKET *pkt );
static void sync_action( PACKET *pkt );
static void version_action( PACKET *pkt );
static void channel_action( PACKET *pkt );

static void address_action(PACKET *pkt );
static void fire_time_action(PACKET *pkt );
static void test_mode_action(PACKET *pkt );
static void backoff_time_action( PACKET *pkt );
static void reset_action( PACKET *pkt );

static void getdata_action( PACKET *pkt );

// EEPROM  functions

static void check_eerom();
static int get_address();
static int set_address( int addr );
static int get_fire_time();
static int set_fire_time( int addr );
static bool get_test_mode();
static void set_test_mode( bool addr );
static int get_backoff_time();
static int set_backoff_time( int bt );

#if 0
	#pragma mark -
	#pragma mark RESET Routines
#endif

// Reset operations

//void wdt_init(void) __attribute__((naked))__attribute__((section(".init3")));
//void reset_board();

void(* reset_board) (void) = 0; //declare reset function @ address 0


#if 0
	#pragma mark -
	#pragma mark Main Routines
#endif

/***********************************************************************
*
*  void setup()		- Startup routine - CALL ONCE
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*
*  16-May-2010  Add in ADDRESS setup
*
**********************************************************************/

void setup() 
{
    int i;
    unsigned char addr,caddr;
    
    // Needed to support RESET
    
    MCUSR=0;
    wdt_disable();
    
  // open the serial port at 9600 bps:
  
  Serial.begin(9600);
  DEBUG_PRINT("\r\nNEWNET Test PGM V[ ");
  DEBUG_PRINT(__DATE__);
  DEBUG_PRINT(" ");
  DEBUG_PRINT(__TIME__);
  DEBUG_PRINTLN("]");
  
  // Check EEPROM
  
  check_eeprom();
  
  // Build the channel list
  
  fire[0].fire = FIRE0;
  fire[0].ad   = FIRE0_AD;
  fire[1].fire = FIRE1;
  fire[1].ad   = FIRE1_AD;
  fire[2].fire = FIRE2;
  fire[2].ad   = FIRE2_AD;
  fire[3].fire = FIRE3;
  fire[3].ad   = FIRE3_AD;
  fire[4].fire = FIRE4;
  fire[4].ad   = FIRE4_AD;
  fire[5].fire = FIRE5;
  fire[5].ad   = FIRE5_AD;
  
  // Get board address, fire time & test mode
  
  board_address = get_address();
  fire_time = get_fire_time();
  test_mode = get_test_mode();
  backoff_time = get_backoff_time();
  //backoff_time = RESP_BACKOFF;
  
  DEBUG_PRINTLN("-------------------------------------------------------------------");
  DEBUG_PRINT("SETTINGS ADDR [");
  DEBUG_PRINT_DEC(board_address);
  DEBUG_PRINT("] FIRE Time [");
  DEBUG_PRINT_DEC(fire_time);
  DEBUG_PRINT("] TEST Mode [");
  DEBUG_PRINT_DEC(test_mode);
  DEBUG_PRINT("] Backoff Time [");
  DEBUG_PRINT_DEC(backoff_time);
  DEBUG_PRINTLN("]");
  DEBUG_PRINTLN("-------------------------------------------------------------------");

  // Set the channel directions & Read A/D & event queue
  
  state.in_event = 0;
  state.event_count = 0;
  state.event_next = 0;
  
  for( i=0; i<FIRE_CHANNELS; i++ )
  {
	digitalWrite(fire[i].fire,0);
	pinMode(fire[i].fire,OUTPUT);
	
	// Set for nothing connected an non-fired
	
	fire[i].pres = 0;
	fire[i].fired = 0;          // Not fired yet
	fire[i].ch_ad = 0;			// [230cd6fbad] no A/D value yet
	
  }

  
  digitalWrite(RELAY,0);
  pinMode(RELAY,OUTPUT);
  digitalWrite(LED,0);
  pinMode(LED,OUTPUT);
  digitalWrite(TX_CNTL,0);
  pinMode(TX_CNTL,OUTPUT);
    
  // Set up globals
  
  memset(&p,'\0',sizeof(PACKET));
  memset(&state,'\0',sizeof(NODE_STATE));
  p.state = NO_PACKET;
  
}

/***********************************************************************
*
*  void loop()		- Main action routine - CALL continuously
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*
**********************************************************************/

void loop()
{
    int i,n;
    int buf_psn = 0;
    long now;
    char val;
    int len;
    char ch;
    int fired = 0;

#if 0
	#pragma mark -
	#pragma mark LOOP PKT PROCESS
#endif

	if( Serial.available() > 0 )
	{
#ifdef FAKE_NETWORK
		// ************** TESTING CODE FOR MANUAL ENTERING OF PACKETS
		if( len = get_message(40,buf) )
		{
			Serial.print(" MSG: [");
			Serial.print(buf);
			Serial.println("]");
            Serial.println("");
            check_net();      // Tidy up
            
			// Reset after handling packet
			
			buf_psn = 0;
			p.state = NO_PACKET;
		 }
		 
		 // Process received data
		 // Normally this would be 1 character at a time
		 // but in this case we have a buffer (buf) which
		 // is filled with characters up to a NUL
		 
		 while( buf_psn <= len )
		 {
		 	handle_net( buf[buf_psn++], &p );
		 }
		 // *******************************************************
#else
		// ********************************* STD CHARACTER HANDLER
		while( Serial.available() > 0 )
		{
			ch = Serial.read();
			handle_net(ch,&p );
			
			if( p.state == RCVED_PACKET )
				break;
		}
		// *******************************************************
#endif
		 // If packet found then handle
		 
		 if( p.state == RCVED_PACKET )
		 {
		 	DEBUG_PRINT("** PACKET REC LEN: ");
		 	DEBUG_PRINT_DEC(p.len);
		 	DEBUG_PRINT(" DATA ");
		 	//DEBUG_PRINTLN(p.data);
		 				
			// Switch on packet type and handle
			
			switch( p.data[0] )
			{
				case ARM_CMD:	arm_action( &p );
								break;			

				case FIRE_CMD:	fire_action( &p );
								break;
								
				case DLY_CMD:	delay_action( &p );
								break;
								
				case PGM_CMD:	pgm_action( &p );
								break;
								
				case STATUS_CMD:status_action( &p );
								break;
								
				case SYNC_CMD:	sync_action( &p );
								break;
								
				case VER_CMD:	version_action( &p );
								break;
								
				case CH_CMD:	channel_action( &p );
								break;

				case SET_AD_CMD:address_action( &p );
								break;	
								
				case SET_FT_CMD:fire_time_action( &p );
								break;
								
				case SET_TM_CMD:test_mode_action( &p );
								break;
								
				case BKOFF_CMD:	backoff_time_action( &p );
								break;
								
				case RESET_CMD:	reset_action( &p );
								break;
								
				case GET_DATA_CMD:	getdata_action( &p );
								break;
			}
			
			// Finished with packet
			
			p.state = NO_PACKET;
		 }
	}
	
#if 0
	#pragma mark -
	#pragma mark LOOP MSG RESPONSE
#endif
	
	// Handle message responses after firing
	
	if( state.in_resp && !state.in_fire)
	{
		if( state.now >= state.resp_time )
		{
			digitalWrite(TX_CNTL,1);		// Enable TX
			delay(1);			// Delay to enable XMIT
			
			Serial.println(state.response);	// Send the response
			state.in_resp = 0;				// Clear response
			
			len = strlen(state.response);
			if( len > 15 )
			{
				// Add extra delay [7bcdf98e54]
				delay(DEF_TXEN_DLY);			// Hold enable while XMIT
			}
			delay(DEF_TXEN_DLY);			// Hold enable while XMIT
			digitalWrite(TX_CNTL,0);
		}
	}

#if 0
	#pragma mark -
	#pragma mark LOOP BLINK
#endif
	
	// Process state
	// Get current time in ms and check for what to do
	
	now = millis();							// Handle blink
	state.now = now - state.time_offset;	// Node time, corrected for sync offset
	if( state.in_blink )
	{
		if( now >= state.next_blink )
		{
			state.next_blink += BLINK_TIME;
			val = digitalRead( LED );
			val = val ^ 0x1;
			digitalWrite(LED,val);
			
		}
	}

#if 0
	#pragma mark -
	#pragma mark LOOP FIRE DELAY
#endif
	
	if( state.in_delay )					// Handle delay
	{
		if( state.now >= state.delay_time )
		{
		
			DEBUG_PRINT("DELAY HIT NOW [");
			DEBUG_PRINT_DEC(state.now);
			DEBUG_PRINT("] DT [");
			DEBUG_PRINT_DEC(state.delay_time);
			DEBUG_PRINT("] OFFSET [");
			DEBUG_PRINT_DEC(state.time_offset);
			DEBUG_PRINTLN("]");
			
			// Exit delay and go to fire
			
			state.in_delay = 0;
			// [a1b444e30a] Added to better support Delay fires
            fire_op( state.delay_channel );
            //-------------------------------------------------
            DEBUG_PRINT("DELAY FIRE [");
            DEBUG_PRINT_DEC( state.fire_channel);
            DEBUG_PRINTLN("]");
                        
		}
	}

#if 0
	#pragma mark -
	#pragma mark LOOP FIRE
#endif
	
	if( state.in_fire )					// Terminate FIRE actions
	{
		// [9e81c1a523] Adaptive - See if it's fired already		
		// Read out the A/D on that channel & set fired status
		// fake it on test mode (show as fired)
		
		if( test_mode )
		{
		
			fire[state.fire_channel].pres = 0;		// Assume fired
			fire[state.fire_channel].ch_ad = DEVICE_PRESENT + 0x10;
		}
		else
		{
			// Time to check
			
			n = (int) state.now - state.adaptive_time;
			if( n > FIRE_CHECK_TIME )
			{
				digitalWrite( fire[state.fire_channel].fire,0);		// Disable fire
				delay( FIRE_CHECK_WAIT);							// Wait
				fire[state.fire_channel].ch_ad = 					// Measure presence
						analogRead( fire[state.fire_channel].ad );
				
				DEBUG_PRINT("ADAPT A/D[");
				DEBUG_PRINT_HEX(fire[state.fire_channel].ch_ad);
				DEBUG_PRINTLN("]");
				
				state.adaptive_time = state.now;					// Reset time
				digitalWrite( fire[state.fire_channel].fire,1);		// Enable fire
			}
		}
		
		// Now check for fired status, save the current time
		// for later analysis
		
		fire[state.fire_channel].fire_time = state.now;	// Save fire time
		if( fire[state.fire_channel].ch_ad < DEVICE_PRESENT )
		{
			fired = 1;									// Mark as fired
			fire[state.fire_channel].fired = 1;			// Mark as fired
			fire[state.fire_channel].pres = 0;			// Nothing connected
			DEBUG_PRINT("FIRE EARLY STOP [");
			DEBUG_PRINT_HEX(fire[state.fire_channel].pres);
			DEBUG_PRINTLN("]");
		}
		else
		{
			fired = 0;									// Mark as not fired
			fire[state.fire_channel].pres = 1;			// Item as connected
		}
		
		// If fired tidy up

		if( (fired == 1) || (state.now >= state.fire_time) )
		{
			state.in_fire = 0;
			digitalWrite( fire[state.fire_channel].fire,0);
			
			DEBUG_PRINT("FIRED NOW FIRE_DATA [");
			DEBUG_PRINT_DEC( fired );
			DEBUG_PRINT(" ");
			DEBUG_PRINT(state.now);
			DEBUG_PRINT(" ");
			DEBUG_PRINT(state.fire_time);
			DEBUG_PRINT("] FIRE_TIME [");
			
			// Compute firing time MAX time - (now - firetime)
			
			fire[state.fire_channel].fire_time = fire_time - (state.now - state.fire_time);
			DEBUG_PRINT_DEC( fire[state.fire_channel].fire_time );
			DEBUG_PRINTLN("]");
			DEBUG_PRINTLN("FIRE DONE");	
			
			// Handle next event if set
			
			if( state.in_event )
			{
				// Send off a response
				
				buf[0] = 'R';
				buf[1] = 'P';
				buf[2] = state.fire_channel + 0x30;
				buf[3] = '\0';
				gen_packet( state.control,3,buf,&(state.response[0]));
				set_response(BCAST_ADDRESS);		// Send BCAST to stagger return
				DEBUG_PRINT("EVENT RESP [");
				DEBUG_PRINT(state.response);
				DEBUG_PRINTLN("]");
				
				// Move to next
				next_event();
			}
		}
	}
}

#if 0
	#pragma mark -
	#pragma mark Handler Routines
#endif

/***********************************************************************
*
*  void arm_action( PACKET *pkt )	- Turn on/off ARM relay
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Arm relay changed state
*
**********************************************************************/

static void arm_action( PACKET *pkt )
{
	char success = 0;
	
	DEBUG_PRINT("ARM Action ");
	DEBUG_PRINTLN(pkt->data);

	if( pkt->data[1] == 'A' )
	{
		// On arm action, flip on ARM relay
		// Start blinking
		
		DEBUG_PRINTLN("ARMED");
		digitalWrite(RELAY,1);
		state.in_blink = 1;
		state.next_blink = state.now;
		state.armed = 1;
		success = 1;
		
		// Check the devices
		
		delay( 100 );			// Wait 100 ms before check
		check_device( fire );
	}
	
	if( pkt->data[1] == 'D' )
	{
		// On Disarm, turn off blink, LED and relay
		
		DEBUG_PRINTLN("DISARMED");
		digitalWrite( RELAY,0);
		digitalWrite( LED,0);
		state.in_blink = 0;
		state.armed = 0;
		success = 1;
	}
		
	// Set response on success
	
	if( success )
	{
		gen_packet( pkt->from,2,"RA",&(state.response[0]));
		set_response(pkt->to);
		
		DEBUG_PRINT("RESPONSE [");
		DEBUG_PRINT(state.response);
		DEBUG_PRINTLN("]");
	}
}

/***********************************************************************
*
*  void fire_action( PACKET *pkt )	- Fire squib
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Fire channel
*
**********************************************************************/

static void fire_action( PACKET *pkt )
{
    int ch;
    
	DEBUG_PRINT("FIRE Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Must be armed to fire
	
	if( state.armed )
	{
        // If FIRE, check if not fired yet and then
        // if not fire it
        
        ch = pkt->data[1] & 0xf;
        if( ch >= 0 && ch < FIRE_CHANNELS )
        {
            if( fire[ch].fired == 0 )
            {
                fire_op( ch );
                
				 // Set response on success
				gen_packet( pkt->from,2,"RF",&(state.response[0]));
				set_response(pkt->to);
				DEBUG_PRINT("RESPONSE [");
				DEBUG_PRINT(state.response);
				DEBUG_PRINTLN("]");
            }
        }
	}
	else
	{
		DEBUG_PRINTLN("** NOT ARMED **");
	}
}

/***********************************************************************
*
*  void delay_action( PACKET *pkt )	- Delay Fire squib
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Fire channel after delay
*
*	12-Nov-2011 [[a1b444e30a] Allow up to max in packet for delay time
*
**********************************************************************/

static void delay_action( PACKET *pkt )
{
        int i;
        char ch;
        
	DEBUG_PRINT("Delay FIRE Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// (0) Must be armed to work
	
	if( state.armed )
	{

		// (1) Make sure we are not in a delay now, if so just bail
		
		if( state.in_delay == 0 )
		{
			state.delay_channel = 0xf & pkt->data[1];  // Channel
			state.delay_time = 0;
			
			// (2) Form up delay time
			// Allow up to max in packet
			
			for( i=0; i<pkt->len; i++ )
			{
			   ch = pkt->data[2+i];
			   if( ch == '\0')
				 break;
				 
			   // Otherwise add it in
			   
			   state.delay_time = (0xf & ch ) + (10 * state.delay_time);
			}
			
			DEBUG_PRINT("Delay CH ");
			DEBUG_PRINT_DEC( state.delay_channel);
			DEBUG_PRINT(" Delay: ");
			DEBUG_PRINT_DEC(state.delay_time);
			DEBUG_PRINTLN(" ");
			
			// (3) Start delay action
			
			state.in_delay = 1;
	
			// Set response on success
			gen_packet( pkt->from,2,"RD",&(state.response[0]));
			set_response(pkt->to);
			DEBUG_PRINT("RESPONSE [");
			DEBUG_PRINT(state.response);
			DEBUG_PRINTLN("]");
		}
	}
	else
	{
		DEBUG_PRINTLN("** NOT ARMED **");
	}
}

/***********************************************************************
*
*  void pgm_action( PACKET *pkt )	- Store events in queue
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Event stored in queue 
*
*	12-Nov-2011 [[a1b444e30a] Allow up to max in packet for delay time
*
**********************************************************************/

static void pgm_action( PACKET *pkt )
{
	int i;
	char ch;
	char data;
	long ft;
        
	DEBUG_PRINT("PGM EVENT Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// (1) Make sure we are not in a event handling now, if so just bail
	
	if( state.in_event == 0 )
	{
		ch = 0xf & pkt->data[1];  // Channel
		ft = 0;
		
		// (2) Form up delay time
		// Allow up to max in packet
		
		for( i=0; i<pkt->len; i++ )
		{
		   data = pkt->data[2+i];
		   if( data == '\0')
			 break;
			 
		   // Otherwise add it in
		   
		   ft = (0xf & data ) + (10 * ft);
		}
		
		DEBUG_PRINT("Event CH ");
		DEBUG_PRINT_DEC( ch );
		DEBUG_PRINT(" FT: ");
		DEBUG_PRINT_DEC(ft);
		DEBUG_PRINTLN(" ");
		
		// (3) Store in queue if possible
		
		if( store_in_queue( ch,ft ) == 0 )
		{
			gen_packet( pkt->from,2,"RP",&(state.response[0]));
			// Save control address
			state.control = pkt->from;	// store controller
			set_response(pkt->to);
			DEBUG_PRINT("RESPONSE [");
			DEBUG_PRINT(state.response);
			DEBUG_PRINTLN("]");
			
			
			
			
		}
		else
		{
			DEBUG_PRINT("QUEUE FULL");
		}
	}

}

/***********************************************************************
*
*  void status_action( PACKET *pkt )	- Return Status
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Return status
*
*  	16-Jan-2011 [e4208b8f56] Change response format
*	23-Jan-2011	Shorten response don't send NUL
*
**********************************************************************/

static void status_action( PACKET *pkt )
{
    int n,i;
    char data[8];
    
	DEBUG_PRINT("Status Action ");
	DEBUG_PRINTLN(pkt->data);

        // (1) Fill data buffer with STATUS information
        // SR[A/D][Fired][Unfired]
        
        data[0] = 'R';
        data[1] = 'S';
        if( state.armed == 1 )
          data[2] = 'A';
        else
          data[2] = 'D';
          
        // Build the fired bits with 5 on the left and 0 on the right
        
        check_device(fire);			// Get current status
        
        n = 1;
        data[3] = 0x40;
        data[4] = 0x40;
        
        for( i=0; i<FIRE_CHANNELS; i++ )
        {
          if( fire[i].fired )        // Or in fired bit
            data[3] = data[3] | n;
            
          if( fire[i].pres )
            data[4] = data[4] | n;    // Presence bit
            
          n = n << 1;              // Shift to next bit
        }
           
       data[5] = '\0'; 
            

        n = gen_packet( pkt->from,5,data,&(state.response[0]));
        DEBUG_PRINT("Status Packet [");
        DEBUG_PRINT(state.response);
        DEBUG_PRINT(" ] Size ");
        DEBUG_PRINT_DEC(n);
        DEBUG_PRINT(" DATA [");
        DEBUG_PRINT_HEX(data[3]);
        DEBUG_PRINT(" ");
        DEBUG_PRINT_HEX(data[4]);
        DEBUG_PRINTLN("]");
        
        // Set up for response

		set_response( pkt->to );
}

/***********************************************************************
*
*  void sync_action( PACKET *pkt )	- Sync board clock
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Board clock set to 0
*
**********************************************************************/

static void sync_action( PACKET *pkt )
{
	DEBUG_PRINT("Sync Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Set the current time offset in ms
	
	state.time_offset = millis();
	
	// Correct state times
	
	state.next_blink 	-= state.time_offset;
	state.delay_time 	-= state.time_offset;
	state.fire_time 	-= state.time_offset;
	state.now 			= 0;
	
	DEBUG_PRINT("Time Offset [");
	DEBUG_PRINT_DEC(state.time_offset);
	DEBUG_PRINTLN("]");
	
	// If ZP is sent the start event processing
	
	if( pkt->data[1] == 'P' )
	{
		state.in_event = 1;
		next_event();
		gen_packet( pkt->from,2,"RZP",&(state.response[0]));
	}
	else
		gen_packet( pkt->from,2,"RZ",&(state.response[0]));
	
	// Set response on success
	
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
	set_response(pkt->to);
}

/***********************************************************************
*
*  void version_action( PACKET *pkt )	- Return Board version
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Return version string
*
*	27-Jan-2011	Remove :'s in time string
*
**********************************************************************/

static void version_action( PACKET *pkt )
{
	char *buffer;
	int n;
	int i;
	
	DEBUG_PRINT("Version Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Fill the buffer with	__DATE__ and __TIME__
	
	buffer = (char *)&buf[0];
	for( i=0; i< STATIC_BUF_SZ; i++ )
		buffer[i] = '\0';
		
	if( test_mode )
	{
		strcat(buffer,"RVX");
	}
	else
	{
		strcat(buffer,"RV");
	}
	strcat(buffer,__DATE__);
	strcat(buffer," ");
	strcat(buffer,__TIME__);
	n = strlen(buffer);
	
	// Remove :'s in the time string
	
	for( i=0; i<n; i++ )
	{
		switch(buffer[i] )
		{
			case ':':	buffer[i] = '-';
						break;
						
			default:	break;
		}
	}
	
	// Set response on success
	gen_packet( pkt->from,n,buffer,&(state.response[0]));
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
	set_response(pkt->to);

}

/***********************************************************************
*
*  void channel_action( PACKET *pkt )	- Return Firing channel data
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Return RC<fired status><Channel A/D value>
*
*	27-Jan-2011	Remove :'s in time string
*
**********************************************************************/

static void channel_action( PACKET *pkt )
{
	int ch;
	int ad;
	char *buffer;
	int psn;
	int val;
	char *bufp;
	
	// Build response
	
	buffer = (char *)&buf[0];
	
	buffer[0] = 'R';
	buffer[1] = 'C';

	
	//  Input data is C<channel #> extract that and get data
	// if not fire it
	
	ch = pkt->data[1] & 0xf;
	if( ch >= 0 && ch < FIRE_CHANNELS )
	{
		
		if( fire[ch].fired == 1 )
			buffer[2] = 1;		// Fired
		else
			buffer[2] = '0';	//Unfired
			
		// Get A/D value
		
		ad = analogRead( fire[ch].ad );
		
		// A/D value ranges from 0 to 1023
		
		bufp = (char *)&(buffer[3]);
		psn = 3 + num_to_string(ad,4,bufp);	// Convert A/D to 4 char string
	}
	else
	{
		// Failure packet
		
		buffer[2] = '0';
		buffer[3] = '0';
		psn = 4;
	}
		
	// Send
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
	set_response(pkt->to);
}

/***********************************************************************
*
*  void address_action( PACKET *pkt )	- Change board address
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change board address
*
**********************************************************************/

static void address_action( PACKET *pkt )
{
    int address = 0;
    char *buffer;
    int psn;
	char *bufp;
        
	DEBUG_PRINT("Address Action ");
	DEBUG_PRINTLN(pkt->data);
	
	buffer = (char *)&buf[0];
	
	// If length of packet == 1 then just return current address
	
	if( pkt->len > 1 )
	{
		// Get the address as the second and third bytes
		
		address = 0xf & pkt->data[1];
		if( pkt->data[2] != '\0' )
		{
			address = (pkt->data[2] & 0xf) + 10 * address;
		}
		
		if( address >= MIN_ADDRESS && address < MAX_ADDRESS )
		{
			set_address( address );
		}
	}
	
	buffer[0] = 'R';
	buffer[1] = 'W';
	bufp = (char *)&buffer[2];
	psn = 2 + num_to_string(board_address,2,bufp);
	
	// In all cases return current address
		
	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");

}


/***********************************************************************
*
*  void fire_time_action( PACKET *pkt )	- Change board firing time
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change board firing time
*
**********************************************************************/

static void fire_time_action( PACKET *pkt )
{
   	int ft = 0;
   	int i;
    char *buffer;
    int psn;
    char *bufp;
        
	DEBUG_PRINT("Fire Time Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];

	// Only set address if length of packet > 1 
	
	if( pkt->len > 1 )
	{
		// Get the Firing time as the 2nd through 6th bytes
		
		for( i=1; i<5; i++ )
		{
			ft = (0xf & pkt->data[i]) + (10 * ft);
	
		}
		
		set_fire_time( ft );
		fire_time = get_fire_time();
	}

	// Build the return value, put the current time
	// in the return
	
	buffer[0] = 'R';
	buffer[1] = 'T';
	
	bufp = (char *)&(buffer[2]);
	psn = 2 + num_to_string(fire_time,5,bufp);
	
	DEBUG_PRINT("Set Fire Time to [");
	DEBUG_PRINT_DEC(ft);
	DEBUG_PRINT("] EEPROM [");
	DEBUG_PRINT_DEC(i);
	DEBUG_PRINTLN("]");
	
	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
}

/***********************************************************************
*
*  void test_mode_action( PACKET *pkt )	- Change test mode
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change test mode
*			Data = 0	=> test mode off
*				== 1	=> test mode on
*
**********************************************************************/

static void test_mode_action( PACKET *pkt )
{
   	bool tmode = false;
   	bool tmode_value;
    char *buffer;
    int psn;
    char *bufp;

        
	DEBUG_PRINT("Test Mode Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];
	
	// Only set if packet lenght > 1 )
	
	if( pkt->len > 1 )
	{

		// Get Test mode as the data value
		
		if( pkt->data[1] == '1' )
			tmode = true;
		
		
		set_test_mode( tmode );
		tmode_value = get_test_mode();
	}
	
	// Show current value
	
	buffer[0] = 'R';
	buffer[1] = 'M';
	
	bufp = (char *)&(buffer[2]);
	psn = 2 + num_to_string(test_mode,1,bufp);
	
	DEBUG_PRINT("Set Test Mode to [");
	DEBUG_PRINT_DEC(tmode);
	DEBUG_PRINT("] EEPROM [");
	DEBUG_PRINT_DEC(tmode_value);
	DEBUG_PRINTLN("]");

	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
}

/***********************************************************************
*
*  void backoff_time_action( PACKET *pkt )	- Change board msg backoff time
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change board return backoff time
*
**********************************************************************/

static void backoff_time_action( PACKET *pkt )
{
   	int bt = 0;
   	int i;
    char *buffer;
    int psn;
    char *bufp;

        
	DEBUG_PRINT("Backoff Time Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];
	
	// Only set if packet length > 1
	
	if( pkt->len > 1 )
	{
		// Get the address as the 2nd through length
		
		for( i=1; i<pkt->len; i++ )
		{
			bt = (0xf & pkt->data[i]) + (10 * bt);
	
		}
		
		set_backoff_time( bt );
		i = get_backoff_time();
	}
	else
		bt = backoff_time;
	
	// Return result
	
	buffer[0] = 'R';
	buffer[1] = 'B';
	bufp = (char *)&(buffer[2]);
	psn = 2 + num_to_string(backoff_time,-1,bufp);
	
	DEBUG_PRINT("Set Backoff Time to [");
	DEBUG_PRINT_DEC(bt);
	DEBUG_PRINT("] EEPROM [");
	DEBUG_PRINT_DEC(i);
	DEBUG_PRINTLN("]");

	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
}

/***********************************************************************
*
*  void reset_action( PACKET *pkt )	- Reset board
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Reset board, DOES NOT RETURN
*
**********************************************************************/

static void reset_action( PACKET *pkt )
{
        
	DEBUG_PRINT("RESET Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Turn off relay and LED then wait a bit
	
	 digitalWrite(LED,1);
	 digitalWrite(RELAY,0);
	 delay(1000);
	 
	 // Now reset board
	
	reset_board();
}

/***********************************************************************
*
*  void getdata_action( PACKET *pkt )	- Get data from board
*
*	INPUT:  pkt	- Input packet
*					Data contains type of data to return
*					(Ignored for now)
*
*	OUTPUT:	Returns response with data
*
**********************************************************************/

static void getdata_action( PACKET *pkt )
{
   	int bt = 0;
   	int i,n;
    char *buffer;
    int psn;
    char *buft;

        
	DEBUG_PRINT("Get Data Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];
	
	// Ignore input data in packet (for now)
	
	// Return result
	
	buffer[0] = 'R';
	buffer[1] = GET_DATA_CMD;
	
	// Now fill buffer with the 6 firing times for this run
	
	psn = 2;						// Start buffer psn
	DEBUG_PRINTLN("FIRE TIMES");
	for( i=0; i<FIRE_CHANNELS; i++ )
	{
		DEBUG_PRINT("CHANNEL [");
		DEBUG_PRINT_DEC(i);
		DEBUG_PRINT("] TIME [");
		DEBUG_PRINT_DEC(fire[i].fire_time);
		DEBUG_PRINT("] PSN [");
		// Store each firng time into buffer
		buft = (char *)&(buffer[psn]);

		psn += num_to_string(fire[i].fire_time,
								1,
								buft);
		if( psn >= 31 )			// Buffer FULL
		{
			buffer[31] = '\0';
			DEBUG_PRINT_DEC(psn);
			DEBUG_PRINT("] BUF[");
			DEBUG_PRINT(buf);
			DEBUG_PRINTLN("]");
			break;
		}	
		DEBUG_PRINT_DEC(psn);
		DEBUG_PRINT("] BUF[");
		DEBUG_PRINT(buf);
		DEBUG_PRINTLN("]");
		buffer[psn++] = ' ';		// Overwrite NUL
	}
	
	buffer[psn] = '\0';				// Terminate buffer
	DEBUG_PRINT("Result [");
	DEBUG_PRINT(buffer);
	DEBUG_PRINTLN("]");

	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");

}

#if 0
	#pragma mark -
	#pragma mark Support Routines
#endif

/***********************************************************************
*
*  void check_device(FIRE_LIST *fl)	- Check for presence of devices on
*									  firing channels
*	INPUT:  fl	- Firing list of devices
*
*	OUTPUT:	NONE
*
**********************************************************************/

static void check_device(FIRE_LIST *fl)
{
	int i;
	int adval;
	
	DEBUG_PRINTLN("CHECK DEVICE Action ");
	DEBUG_PRINTLN("D A/D P F");
	
	// Scan the channels for device present
	
	for( i=0; i<FIRE_CHANNELS; i++ )
	{	
		// If in test mode fake device connected
		if( test_mode == 1 )
		{
			adval = DEVICE_PRESENT + 0x10;	// FAKE the A/D value
		}
		else
		{
			adval = analogRead( fire[i].ad );
		}
		fire[i].ch_ad = adval;		// [230cd6fbad] Save into FIRE_LIST structure
		
		// Set device presence based on A/D value
		// [7cc38ceff4] Update FIRE status
		
		if( adval < DEVICE_PRESENT )
		{
			fire[i].pres = 0;			// Nothing connected
			fire[i].fired = 1;			// Mark as fired
		}
		else
		{
			fire[i].pres = 1;			// Item connected
			fire[i].fired = 0;			// Mark as NOT fired
		}
			
		DEBUG_PRINT_DEC(i);
		DEBUG_PRINT(" ");
		DEBUG_PRINT_HEX(fire[i].ch_ad);
		DEBUG_PRINT(" ");
		DEBUG_PRINT_DEC(fire[i].pres );
		DEBUG_PRINT(" ");
		DEBUG_PRINT_DEC(fire[i].fired );
		DEBUG_PRINTLN("");
	}
}

/***********************************************************************
*
*  void fire_op( int ch )	- Fire operation
*
*	INPUT:  ch	- Channel to be fired
*
*	OUTPUT:	NONE	- Fire state set up
*
*	12-Nov-2011 [a1b444e30a] Added to better support Delay fires
*
**********************************************************************/

void fire_op( int ch )
{
	state.fire_channel = ch;
	state.fire_time = state.now + fire_time;
	state.adaptive_time = state.now;		// Get adaptive firing time
	state.in_fire = 1;
	digitalWrite(fire[ch].fire,1);    // FIRE !!!
}

/***********************************************************************
*
*  void next_event()	- Set up for next event
*
*	INPUT:  NONE	- Use state
*
*	OUTPUT:	Delay firing started and set for next event or terminate
*			event handling
*
**********************************************************************/

void next_event(void)
{
	// Set up for next event 
	if( state.event_next < state.event_count )
	{
		state.in_delay = 1;
		state.delay_time = events[state.event_next].ft;
		state.delay_channel = events[state.event_next].ch;
		DEBUG_PRINT("Entering NEXT event CH [");
		DEBUG_PRINT_DEC(state.delay_channel);
		DEBUG_PRINT("] TIME [");
		DEBUG_PRINT_DEC(state.delay_time);
		DEBUG_PRINT(" NOW [");
		DEBUG_PRINT_DEC(state.now);
		DEBUG_PRINT("] EVENT [");
		DEBUG_PRINT_DEC(state.event_next);
		DEBUG_PRINTLN("]");
		state.event_next++;
	}
	else
	{
		DEBUG_PRINTLN("** END OF EVENTS **");
		state.in_event = 0;
	}
}

/***********************************************************************
*
* 	int store_in_queue( char ch, long ft )	- Store data in firing queue
*
*	INPUT:  ch		- Firing channel
*			long	- Firing time (ms)
*
*	OUTPUT:	0 If inserted, <> 0 if not
*
*	Called in init() and if EERROM version out of date then update
*	eeprom to current values
*
**********************************************************************/

int store_in_queue( char ch, long ft )
{
	int rtnval = -1;	// Set for failure
	int i;
	int qpsn;
	
	DEBUG_PRINT("STORE IN QUEUE CH[");
	DEBUG_PRINT_DEC(ch);
	DEBUG_PRINT("] FT [");
	DEBUG_PRINT_DEC(ft);
	DEBUG_PRINTLN("]");
	
	print_queue();
	
	// (1) Is there room ?
	
	if( state.event_count < FIRE_CHANNELS )
	{
		// (2) Event count 0  special case just inserted it
		
		if( state.event_count == 0 )
		{
			events[state.event_count].ch = ch;
			events[state.event_count].ft = ft;
			state.event_count++;
			rtnval = 0;				// SUCCESS
		}
		else
		{
			// (3) Determine where it fits in queue
			
			for( i=0; i<state.event_count; i++ )
			{
				if( ft <= events[i].ft )
					break;
			}
			
			qpsn = i;
			
			// (4) Two cases
			//	(a) Beyond end of queue, just stick it in
			//	(b) Inside queue, move up queue and stick it in
			
			if( qpsn >= state.event_count )
			{
				// Case (a) stick in new MT slot at end
				
				events[state.event_count].ch = ch;
				events[state.event_count].ft = ft;
				state.event_count++;
				rtnval = 0;				// SUCCESS
				
				DEBUG_PRINTLN("- INSERT AT END -");
				print_queue();
			}
			else
			{
				// Case (b) Move all the items above qpsn up one into MT slot
				// and insert new at qpsn
				
				for( i=state.event_count-1; i>=qpsn; i--)
				{
					events[i+1].ch = events[i].ch;
					events[i+1].ft = events[i].ft;
				}
				events[qpsn].ch = ch;
				events[qpsn].ft = ft;
				
				state.event_count++;
				rtnval = 0;
				
				DEBUG_PRINT("- INSERT AT [");
				DEBUG_PRINT_DEC(qpsn);
				DEBUG_PRINTLN("] -");
				print_queue();
			}
		}
	}
	
	return rtnval;
		
}

/***********************************************************************
*
* 	void print_queue(void)
*
*	INPUT:  NONE
*
*	OUTPUT:	NONE
*
*	Print out current event queue
*
**********************************************************************/

void print_queue(void)
{

#if DEBUG_ON
	int i;

	if( state.event_count == 0 )
	{
		DEBUG_PRINTLN("EVENT QUEUE MT");
	}
	else
	{
		DEBUG_PRINTLN("- EVENT QUEUE - ");
		for( i=0; i<state.event_count; i++ )
		{
			DEBUG_PRINT("Event[");
			DEBUG_PRINT_DEC(i);
			DEBUG_PRINT("] CH[");
			DEBUG_PRINT_DEC(events[i].ch);
			DEBUG_PRINT("] FT [");
			DEBUG_PRINT_DEC(events[i].ft);
			DEBUG_PRINTLN("]");
		}
		DEBUG_PRINTLN("----------------");
	}
#endif
}

#if 0
	#pragma mark -
	#pragma mark EEPROM Support Routines
#endif

/***********************************************************************
*
* 	void check_eeprom()
*
*	INPUT:  NONE
*
*	OUTPUT:	NONE
*
*	Called in init() and if EERROM version out of date then update
*	eeprom to current values
*
**********************************************************************/

static void check_eeprom()
{
	unsigned char verh,verl;
	unsigned int ver;
	
	// Read the eeprom version
	// from EERPROM
	
	verh = EEPROM.read( ROMVER_LCNH );
	verl = EEPROM.read( ROMVER_LCNL );
	ver = (unsigned int)(0xff & verh );
	ver = (ver<<8) + (unsigned int)(0xff & verl);
	
	DEBUG_PRINT("EEPROM VERSION ");
	DEBUG_PRINT_HEX( ver );
	
	// Do we need an update ?
	
	if( ver != ROMVER )
	{
		DEBUG_PRINTLN(" MISMATCH - UPDATE EEPROM");
		
		// Update 	ROM VERSION
		//			FIRE TIME
		//			BACKOFF TIME
		
		ver = ROMVER;
		DEBUG_PRINT("NEW VERSION [");
		DEBUG_PRINT_HEX( ver );
		
		
		verh = 0xff & (ver >> 8);
		verl = 0xff & ver;
		DEBUG_PRINT(" ");
		DEBUG_PRINT_HEX( verh );
		DEBUG_PRINT(" ");
		DEBUG_PRINT_HEX( verl );
		DEBUG_PRINTLN("]");
		
		EEPROM.write(ROMVER_LCNH,verh);
		EEPROM.write(ROMVER_LCNL,verl);
		
		set_fire_time(DEF_FIRE_TIME);
		set_backoff_time( RESP_BACKOFF );
		
		DEBUG_PRINTLN("-- EEROM UPDATED --");	
	}
	else
	{
		DEBUG_PRINTLN(" MATCH USE EEPROM");
	}
}

/***********************************************************************
*
*  int get_test_mode()	- Get test mode value
*
*	INPUT:  NONE
*
*	OUTPUT:	TRUE if in test mode, FALSE if not
*
**********************************************************************/

static bool get_test_mode()
{
	unsigned char tmode,ctmode;
	bool rtnval = false;
	
	// (1) Read tmode and the compliment value
	// from EERPROM
	
	tmode = EEPROM.read( TEST_MODE_LCN );
	ctmode = EEPROM.read( CTEST_MODE_LCN );
	ctmode = 0xff & ~ctmode;
	
	// (2) Is this correct 
	
	if( ctmode == tmode )
	{
		// Yes, return state of tmode
		
		if( tmode > 0 )
			rtnval = true;
	}
	
	
	DEBUG_PRINT("Test Mode [");
	DEBUG_PRINT_DEC(rtnval);
	DEBUG_PRINTLN("]");
	
	return( rtnval );
}
		
/***********************************************************************
*
*  int set_test_mode(bool mode)	- set Test mode
*
*	INPUT:  tmode	- TRUE or FALSE	
*
*	OUTPUT:	NONE
*
**********************************************************************/

		
static void set_test_mode( bool mode )
{
	unsigned char tmode,ctmode;
	
	// (1) Build the tmode and compliment
	
	if( mode )
	{
		tmode = 0xff;
		ctmode = 0;
	}
	else
	{
		tmode = 0;
		ctmode = 0xff;
	}
	
	// (2) Now write them to eerom
	
	EEPROM.write(TEST_MODE_LCN,tmode);
	EEPROM.write(CTEST_MODE_LCN,ctmode);
}

 
/***********************************************************************
*
*  int get_address()	- Get board address
*
*	INPUT:  NONE
*
*	OUTPUT:	Board address, if none set to default address
*
**********************************************************************/

static int get_address()
{
	unsigned char addr,caddr;
	int address;
	
	// (1) Read the address and the compliment value
	// from EERPROM
	
	addr = EEPROM.read( ADDR_LCN );
	caddr = EEPROM.read( CADDR_LCN );
	caddr = 0xff & ~caddr;
	
	// (2) Is this correct 
	
	if( caddr == addr &&
		addr >= ADDR_MIN &&
		addr <= ADDR_MAX)
	{
		address = 0xff & addr;
	}
	else
	{
		// (3) Failure, set to default address
		
		address = set_address( DEF_ADDR );
	}
	
	DEBUG_PRINT("Board Address [");
	DEBUG_PRINT_DEC(address);
	DEBUG_PRINTLN("]");
	
	return( address );
}
		
/***********************************************************************
*
*  int set_address(int address)	- set board address
*
*	INPUT:  address
*
*	OUTPUT:	Board address
*
**********************************************************************/

		
static int set_address( int address )
{
	unsigned char addr,caddr;
	
	// (1) Build the address and compliment
	
	addr = 0x3f & address;
	caddr = 0xff & ~addr;
	
	// (2) Now write them to eerom
	
	EEPROM.write(ADDR_LCN,addr);
	EEPROM.write(CADDR_LCN,caddr);
	
	return( address );
}

/***********************************************************************
*
*  int get_fire_time()	- Get board firing time (in ms)
*
*	INPUT:  NONE
*
*	OUTPUT:	Returns firing time (if none returns default)
*
**********************************************************************/

static int get_fire_time()
{
	unsigned int ft,cft;
	unsigned val;
	
	// (1) Read the address and the compliment value
	// from EERPROM
	
	val = EEPROM.read( FIRE_TIME_MSB );
	ft = val << 8;
	val = 0xff & EEPROM.read( FIRE_TIME_LSB );
	ft = ft | val;
	
	val = EEPROM.read( FIRE_TIME_CMSB );
	cft = val << 8;
	val = 0xff & EEPROM.read( FIRE_TIME_CLSB );
	cft = cft | val;
	cft = ~cft;
	
	// (2) Is this correct 
	
	if( ft != cft )
	{
		// (3) Failure, set to default time
		
		DEBUG_PRINTLN("** DEFAULT FIRE TIME **");
		ft = set_fire_time( DEF_FIRE_TIME );
	}
	
	DEBUG_PRINT("FIRE TIME [");
	DEBUG_PRINT_DEC(ft);
	DEBUG_PRINTLN("]");
	
	return( ft );
}

/***********************************************************************
*
*  int set_fire_time(int firet)	- set board firing time
*
*	INPUT:  ft	- Firing time in ms
*
*	OUTPUT:	Board firing time
*
**********************************************************************/

		
static int set_fire_time( int firet )
{
	unsigned int ft,cft;
	unsigned char part;
	
	// (1) Build the address and compliment
	
	ft = firet;
	cft = ~firet;
	
	// (2) Now write them to eerom
	
	part = ft >> 8;
	EEPROM.write(FIRE_TIME_MSB,part);
	part = 0xff & ft;
	EEPROM.write(FIRE_TIME_LSB,part);

	part = cft >> 8;
	EEPROM.write(FIRE_TIME_CMSB,part);
	part = 0xff & cft;
	EEPROM.write(FIRE_TIME_CLSB,part);
	
	// (3) Read value from EEPROM
	
	ft = get_fire_time();
	
	return( ft );
}

/***********************************************************************
*
*  int get_backoff_time()	- Get board backoff time (in ms)
*
*	INPUT:  NONE
*
*	OUTPUT:	Returns backoff time (if none returns default)
*
**********************************************************************/

static int get_backoff_time()
{
	unsigned int bt,cbt;
	unsigned val;
	
	// (1) Read the address and the compliment value
	// from EERPROM
	
	bt = EEPROM.read( BACKOFF_TIME_LCN );	
	cbt = EEPROM.read( BACKOFF_TIME_LCNC );
	cbt = 0xff & ~cbt;
	
	// (2) Is this correct 
	
	if( bt != cbt )
	{
		// (3) Failure, set to default time
		
		DEBUG_PRINTLN("** DEFAULT BACKOFF TIME **");
		bt = set_backoff_time( RESP_BACKOFF );
	}
	
	DEBUG_PRINT("BACKOFF TIME [");
	DEBUG_PRINT_DEC(bt);
	DEBUG_PRINTLN("]");
	
	return( bt );
}

/***********************************************************************
*
*  int set_backoff_time(int firet)	- set board backoff time
*
*	INPUT:  bt	- Backoff time in ms (0-255)
*
*	OUTPUT:	Board backoff time
*
**********************************************************************/

		
static int set_backoff_time( int backt )
{
	unsigned int bt,cbt;
	unsigned char part;
	
	// (1) Build the address and compliment
	
	bt = backt;
	cbt = 0xff & ~backt;
	
	// (2) Now write them to eerom
	
	EEPROM.write(BACKOFF_TIME_LCN,bt);
	EEPROM.write(BACKOFF_TIME_LCNC,cbt);
	
	// (3) Read value from EEPROM
	
	bt = get_backoff_time();
	
	return( bt );
}

#if 0
	#pragma mark -
	#pragma mark PACKET HANDLER
#endif

/***********************************************************************
*
*  void handle_net( char data, PACKET *pkt )
*
*	INPUT: 	data	- Packet character
*			pkt		- Packet data structure
*
*	OUTPUT:		NONE
*
**********************************************************************/

static void handle_net( char data, PACKET *pkt )
{
	
	DEBUG_PRINT("State: [");
	DEBUG_PRINT(state_name(pkt->state));
	DEBUG_PRINTLN("]");
	
	// (1) Switch depending on state
	
	switch( pkt->state )
	{
		case NO_PACKET:		if( data == MSG_HDR )
							{
								pkt->len = 0;
								memset(pkt->data,'\0',PHY_DATA_SIZE);
								pkt->state = TO_PACKET_A;
							}
							break;
							
		case TO_PACKET_A:	pkt->to = 10 * (data & 0xf);
							pkt->cksum = data;
							if( pkt->to > MAX_ADDRESS )
								pkt->state = NO_PACKET;
							else
								pkt->state = TO_PACKET_B;
							break;
							
		case TO_PACKET_B:	pkt->to = pkt->to + (data & 0xf);
							if( pkt->to > MAX_ADDRESS )
							{
								pkt->state = NO_PACKET;
							}
							else
							{
								if( pkt->to != BCAST_ADDRESS &&
									pkt->to != board_address )
								{
									pkt->state = NO_PACKET;
								}
								else
								{
									pkt->state = FROM_PACKET_A;
									pkt->cksum += data;
								}
							}
							break;
							
		case FROM_PACKET_A:	pkt->from = 10 * (data & 0xf);
							pkt->cksum += data;
							pkt->state = FROM_PACKET_B;
							break;
							
		case FROM_PACKET_B:	pkt->from = pkt->from + (data & 0xf);
							pkt->cksum += data;
							pkt->state = DATA_PACKET;
							break;
							
		case DATA_PACKET:	if( data == MSG_TRLR )
							{
								pkt->state = CKSUM_PACKET_A;
							}
							else
							{
								pkt->cksum += data;
								pkt->data[pkt->len++] = data;
							}
							break;
							
		case CKSUM_PACKET_A:	pkt->pcksum = 10 * (data & 0xf);
								pkt->state = CKSUM_PACKET_B;
								break;
								
		case CKSUM_PACKET_B:	pkt->pcksum = pkt->pcksum + (data & 0xf);
								// Now compare modulo 100 cksums
								pkt->pcksum = pkt->pcksum % 100;
								pkt->cksum = pkt->cksum % 100;
								
								// Show packet state
								if( pkt->cksum == pkt->pcksum )
								{
									pkt->state = RCVED_PACKET;
								}
								else
								{
									pkt->state = NO_PACKET;		// FAILURE
									DEBUG_PRINTLN("");
									DEBUG_PRINT("** CKSUM FAIL CK[");
									DEBUG_PRINT_DEC(pkt->pcksum);
									DEBUG_PRINT("] SB[");
									DEBUG_PRINT_DEC(pkt->cksum);
									DEBUG_PRINTLN("}");
								}
									
		case RCVED_PACKET:		// Do nothing here...
								break;
	}
	
}


/***********************************************************************
*
*  int gen_packet(unsigned char to,int len,char *data,char *buf)
*
*	INPUT: 	to		- TO address of packet
*			len		- Length of data
*			data	- Data to be sent
*			buf		- Put packet here
*
*	OUTPUT: # Bytes in generated packet
*
**********************************************************************/

static int gen_packet(unsigned char to, int len, char *data,char *buf )
{
	unsigned char part;
	int psn = 0;
	int cksum;
	int i;
	
	// (1) Put in header character
	
	buf[psn++] = MSG_HDR;
	
	// (2) Put in TO
	
	part = 0x30 + (to/10);
	buf[psn++] = part;
	cksum = part;
	part = 0x30 + (to%10);
	buf[psn++] = part;
	cksum = cksum + part;
	
	// (3) Put in from
	
	part = 0x30 + (board_address/10);
	buf[psn++] = part;
	cksum = cksum + part;
	part = 0x30 + (board_address%10);
	buf[psn++] = part;
	cksum = cksum + part;
	
	// (4) Put in data
	
	for( i=0; i<len; i++)
	{
		buf[psn++] = data[i];
		cksum = cksum + data[i];
	}
	
	// (5) Put in end marker
	
	buf[psn++] = MSG_TRLR;
	
	// (6) Put in checksum
	
	cksum = cksum % CKSUM_MODULO;
	part = 0x30 + (cksum/10);
	buf[psn++] = part;
	part = 0x30 + (cksum%10);
	buf[psn++] = part;
	buf[psn] = '\0';			// Put in END MARKER
	
	return( psn );
}
	
/***********************************************************************
*
*  void set_response( unsigned char to )	- Setup for a response
*
*	INPUT:  to	- Address of original packet
*
*	OUTPUT:	NONE
*			Mark response ready
*			Calculate time to send response, if BCAST hold off time
*
**********************************************************************/

void set_response( unsigned char to )
{
	int wait = 0;
	
	// We are in a response
	
	state.in_resp = 1;		// Do a response
	
	// If broadcast then backoff otherwise just send NOW
	
	if( to == BCAST_ADDRESS )
	{
		wait = (board_address-1) * backoff_time;
		
		DEBUG_PRINT("RESP WAIT [");
		DEBUG_PRINT(wait);
		DEBUG_PRINTLN("]");

		state.resp_time = state.now + wait;
		
		DEBUG_PRINT("NOW RESP TIME [");
		DEBUG_PRINT(state.now);
		DEBUG_PRINT(" ");
		DEBUG_PRINT(state.resp_time);
		DEBUG_PRINTLN("]");
	}
	else
	{
		state.resp_time = state.now;
	}
}

#if 0
	#pragma mark -
	#pragma mark TEST NETWORK ROUTINES
#endif

/***********************************************************************
*
*  int check_net()
*
*	INPUT: 	NONE
*
*	OUTPUT: 1-	NETWORK DATA detected
*
**********************************************************************/

static int check_net()
{
	int ch;
	int rtnval = 0;
	
	// (1) Check for data, if any, eat it
	
	while( Serial.available() > 0 )
	{
		ch = Serial.read();
		rtnval = 1;
	}
	
	return( rtnval );
}

/***********************************************************************
*
*  int get_message(int len,char *buffer)
*
*	INPUT: 	len	- Length of buffer to use	
*            buffer	- Return data here
*
*	OUTPUT:		1 = MSG received
*
**********************************************************************/

static int get_message(int len,char *buffer)
{
	int rtn;
	int i;
	int val;
	
	// (1) Get the message
	
	rtn = get_input("NEWNET MSG: ",len,buffer);
	if( rtn > 0 )
	{
		Serial.print("MESSAGE [");
		for( i=0; i<rtn; i++ )
		{
			val = 0xff & buffer[i];
			Serial.print(val,HEX);
		}
		Serial.print(" ");
		Serial.print(buffer);
		Serial.print("]");
		Serial.print(" LEN: ");
		Serial.println(rtn,DEC);
	}
	
	return( rtn );
}

#define CR	0x0D
#define LF	0x0A
#define BS	0x08
#define DEL	0x7f
#define SP	0x20
#define BEL	0x07

/***********************************************************************
*
*  int get_input( int len,char *buffer )
*
*	INPUT:  len    - # Characters in buffer	
*                buffer	- Return data here
*
*	OUTPUT:	# characters in return buffer
*
**********************************************************************/

static int get_input(char *prompt,int len, char *buffer )
{
	int psn = 0;
	int ch;
	int flag = 1;
	int rtnval = 0;
        int i;

	// (1) Clear buffer & serial input
	
	for( i=0;i<len; i++ )
	  buffer[i] = '\0';
	 
	while( Serial.available() > 0)
	{
		ch = Serial.read();
	}

	// (2) Output prompt
        
	Serial.write(prompt);
	
	// (3) Loop forever getting input
	// Exit on buffer full
	
	while( flag )
	{
		if( Serial.available() > 0)
		{
			ch = Serial.read();
	
			
			switch( 0xff & ch )
			{
				// We have a line.....
				case  CR:
				case  LF:	// Terminate buffer
							flag = 0;
							rtnval = 1;
							buffer[psn] = '\0';
							Serial.write("\r\n");
							break;
				
				
				case '0':	// NUMBER, just put into buffer
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':	buffer[psn] = 0xff & ch;
							psn = psn + 1;
							break;
							
				case BS:	// Handle BS & DEL characters
				case DEL:
							if( psn > 0 )
							{
								// We have data so BS over it and then
								// remove from buffer
								
								Serial.write(BS);
								Serial.write(SP);
								Serial.write(BS);
								
								psn = psn - 1;
							}
							else
							{
								// At start of buffer just send BEL
								
								Serial.write(BEL);
							}
							break;
							
				default:	// Just put all the letters in
							buffer[psn] = ch;
							psn = psn + 1;
							break;
			}
			// Echo input character
			Serial.write(ch);
			
			// Check here for buffer overrun 
			// bail if so
			if( psn >= len )
				flag = 0;
		}
	}
	
	rtnval = psn;
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark STRING Routines
#endif

/***********************************************************************
*
*  int num_to_string( int val,int min_size,char *buffer)	- Convert 16 bit integer to 
*											  base 10 value
*	INPUT:  val		- Value to convert (- or +)
*			min_size- Minimum size of returned value (i.e. lz here if < min size)
*			buffer	- String returned here (NUL terminated, LZ suppressed)
*
*	OUTPUT:	# Bytes in result (not counting NUL)
*
**********************************************************************/

int num_to_string( int val,int min_size,char *buffer)
{
	bool lz = false;
	int buf_psn = 0;
	int digit;
	int part, divisor;
	
	// Is number negative, make positive
	
	if( val < 0 )
	{
		val = -1 * val;
		buffer[buf_psn++] = '-';	// Negative sign...
	}
		
	// If min_size < 5 then then set to search value
	
	if( min_size <= 5 && min_size > 0)
		min_size = 5 - min_size;
	else
		min_size = 6;		// No min size
		
	// Now convert max value = 0x7FFF -> 32767

	divisor = 10000;
	for( digit = 0; digit<5; digit++)
	{
		// Disable zero suppression when at min size
		// if set
		
		if( digit >= min_size )
			lz = true;				// Remove zero suppression when at min size

		part = val/divisor;
		if( lz || part > 0 )
		{
			buffer[buf_psn++] = 0x30 + part;
			lz = true;				// No more LZ suppress
		}
		val = val - part*divisor;
		divisor = divisor/10;
	}
	
	// Put in trailing NULL and return size
	
	buffer[buf_psn] = '\0';
	return buf_psn;
}
		

#if 0
	#pragma mark -
	#pragma DEBUG SUPPORT
#endif


/***********************************************************************
*
*  char *state_name( int state )	- Return state name
*
*	INPUT:  state	State #
*
*	OUTPUT:	String with state name
*
**********************************************************************/

char *state_name( int state )
{
	char *rtnval = "UNKNOWN";

#if DEBUG_ON

	switch( state )
	{
		case NO_PACKET:		rtnval = "NO_PACKET";
							break;
						
		case TO_PACKET_A:	rtnval = "TO_PACKET_A";
							break;

		case TO_PACKET_B:	rtnval = "TO_PACKET_B";
							break;
							
		case FROM_PACKET_A:	rtnval = "FROM_PACKET_A";
							break;
							
		case FROM_PACKET_B:	rtnval = "FROM_PACKET_B";
							break;
							
		case DATA_PACKET:	rtnval = "DATA_PACKET";
							break;
							
		case CKSUM_PACKET_A:	rtnval = "CKSUM_PACKET_A";
							break;
							
		case CKSUM_PACKET_B:	rtnval = "CKSUM_PACKET_B";
							break;
	
		case RCVED_PACKET:	rtnval = "RCVED_PACKET";
							break;
	}
#endif
	
	return rtnval;
}

Changes to Arduino/diag/diagpgm/diagpgm.pde.

14
15
16
17
18
19
20


21
22
23
24
25
26
27
  L1  - LED ON
  L0  - LED OFF
  T1  - TX control ON
  T0  - TX control OFF
 
  11-Mar-2010 Got Input to work
  14-Mar-2010 Add BS use


*/
//**********************************************************************/

#if 0
	#pragma mark -
	#pragma mark Data
#endif







>
>







14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  L1  - LED ON
  L0  - LED OFF
  T1  - TX control ON
  T0  - TX control OFF
 
  11-Mar-2010 Got Input to work
  14-Mar-2010 Add BS use
   5-Feb-2011 [1da8774a51] Fix firing channel typos
             All channels work and fire
*/
//**********************************************************************/

#if 0
	#pragma mark -
	#pragma mark Data
#endif
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#define FIRE3    5  // Fire Channel 3
#define FIRE3_AD 3

#define FIRE4    6  // Fire Channel 4
#define FIRE4_AD 4

#define FIRE5    7  // Fire Channel 5
#define FIRE5_AD 4

#define RELAY    8  // Other controls
#define LED      9
#define TX_CNTL  13

#define FIRE_CHANNELS	6
#define FIRE_TIME		1000	// # ms to fire channel







|







44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#define FIRE3    5  // Fire Channel 3
#define FIRE3_AD 3

#define FIRE4    6  // Fire Channel 4
#define FIRE4_AD 4

#define FIRE5    7  // Fire Channel 5
#define FIRE5_AD 5	// [1da8774a51] Should be 5 not 4

#define RELAY    8  // Other controls
#define LED      9
#define TX_CNTL  13

#define FIRE_CHANNELS	6
#define FIRE_TIME		1000	// # ms to fire channel
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
  fire[5].fire = FIRE5;
  fire[5].ad   = FIRE5_AD;
  
  // Set the channel directions
  
  for( i=0; i<FIRE_CHANNELS; i++ )
  {
      digitalWrite(fire[0].fire,0);
      pinMode(fire[0].fire,OUTPUT);
  }
  
  digitalWrite(RELAY,0);
  pinMode(RELAY,OUTPUT);
  digitalWrite(LED,0);
  pinMode(LED,OUTPUT);
  digitalWrite(TX_CNTL,0);







|
|







134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  fire[5].fire = FIRE5;
  fire[5].ad   = FIRE5_AD;
  
  // Set the channel directions
  
  for( i=0; i<FIRE_CHANNELS; i++ )
  {
      digitalWrite(fire[i].fire,0);		// [1da8774a51] use i not 0 as index
      pinMode(fire[i].fire,OUTPUT);
  }
  
  digitalWrite(RELAY,0);
  pinMode(RELAY,OUTPUT);
  digitalWrite(LED,0);
  pinMode(LED,OUTPUT);
  digitalWrite(TX_CNTL,0);

Added Arduino/diag/fireDiag/Firediag/Firediag.ino.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
//**********************************************************************
/*
  Firenet FireDiag program
  
  This program is used to to test the firing circuit
  It can:
  	(a) Enable/Disable ARM relay
  	(b) Fire a channel
  	(c) Set firing parameters 
  
  28-Oct-2012	Initial version
   1-Nov-2012   Change firing loop to only check for firing when
   				a/d is set [83c43c7cd5]
*/
//**********************************************************************/

#include "EEPROM.h"
#include "debug.h"
#include "newnet.h"
#include "eerom.h"

#if 0
	#pragma mark -
	#pragma mark Global Data
#endif

// MODULE GLOBAL VARIABLES

FIRE_LIST fire[FIRE_CHANNELS];
EVENT_QUEUE events[FIRE_CHANNELS];
int board_address;            	// Board address value
PACKET p;						// Received packet
NODE_STATE state;
int fire_time;
bool test_mode;
int backoff_time;
#define STATIC_BUF_SZ	40
char buf[STATIC_BUF_SZ];		// General buffer for use in routines
					// Clear or don't expect constant data when using

#if 0
	#pragma mark -
	#pragma mark Arudino Routines
#endif

void setup();
void loop();

#if 0
	#pragma mark -
	#pragma mark Support routines
#endif

// **** Message Handling ****
static int check_net(void);
static void handle_net( char data, PACKET *pkt );
static int gen_packet(unsigned char to, int len, char *data,char *buf );
void set_response( unsigned char to );


// ***** TESTING CODE ***
static int get_message(int len,char *buffer);
static int get_input( char *prompt,int len,char *buffer );
char *state_name( int state );

// ***** Firing Channel code *****
//static void check_fire(FIRE_LIST *fl);
static void check_device(FIRE_LIST *fl);
void fire_op( int ch );
void next_event(void);
int store_in_queue( char ch,long ft );
void print_queue(void);

#if 0
	#pragma mark -
	#pragma mark Handler Routines
#endif

static void arm_action( PACKET *pkt );
static void fire_action( PACKET *pkt );
static void delay_action( PACKET *pkt );
static void pgm_action( PACKET *pkt );
static void status_action( PACKET *pkt );
static void sync_action( PACKET *pkt );
static void version_action( PACKET *pkt );
static void channel_action( PACKET *pkt );

static void address_action(PACKET *pkt );
static void fire_time_action(PACKET *pkt );
static void test_mode_action(PACKET *pkt );
static void backoff_time_action( PACKET *pkt );

static void getdata_action( PACKET *pkt );

// EEPROM  functions

//static void check_eerom();
static int get_address();
static int set_address( int addr );
static int get_fire_time();
static int set_fire_time( int addr );
static bool get_test_mode();
static void set_test_mode( bool addr );
static int get_backoff_time();
static int set_backoff_time( int bt );

#if 0
	#pragma mark -
	#pragma mark Main Routines
#endif

/***********************************************************************
*
*  void setup()		- Startup routine - CALL ONCE
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*
*  16-May-2010  Add in ADDRESS setup
*
**********************************************************************/

void setup() 
{
    int i;
    //unsigned char addr,caddr;
    
  // Open the serial port at 38400 bps:
  
  Serial.begin(38400);
  DEBUG_PRINT("\r\nFiring Test PGM V[ ");
  DEBUG_PRINT(__DATE__);
  DEBUG_PRINT(" ");
  DEBUG_PRINT(__TIME__);
  DEBUG_PRINTLN("]");
  //DEBUG_PRINTLN("-- USE FIRNET PACKET --");
  
  // Check EEPROM
  
  check_eeprom();
  
  // Build the channel list
  
  fire[0].fire = FIRE0;
  fire[0].ad   = FIRE0_AD;
  fire[1].fire = FIRE1;
  fire[1].ad   = FIRE1_AD;
  fire[2].fire = FIRE2;
  fire[2].ad   = FIRE2_AD;
  fire[3].fire = FIRE3;
  fire[3].ad   = FIRE3_AD;
  fire[4].fire = FIRE4;
  fire[4].ad   = FIRE4_AD;
  fire[5].fire = FIRE5;
  fire[5].ad   = FIRE5_AD;
  
  // Get board address, fire time & test mode
  
  board_address = get_address();
  fire_time = get_fire_time();
  test_mode = get_test_mode();
  backoff_time = get_backoff_time();
  //backoff_time = RESP_BACKOFF;
  
  DEBUG_PRINTLN("-------------------------------------------------------------------");
  DEBUG_PRINT("SETTINGS ADDR [");
  DEBUG_PRINT_DEC(board_address);
  DEBUG_PRINT("] FIRE Time [");
  DEBUG_PRINT_DEC(fire_time);
  DEBUG_PRINT("] TEST Mode [");
  DEBUG_PRINT_DEC(test_mode);
  DEBUG_PRINT("] Backoff Time [");
  DEBUG_PRINT_DEC(backoff_time);
  DEBUG_PRINTLN("]");
  DEBUG_PRINTLN("-------------------------------------------------------------------");

  // Set the channel directions & Read A/D & event queue
  
  state.in_event = 0;
  state.event_count = 0;
  state.event_next = 0;
  
  for( i=0; i<FIRE_CHANNELS; i++ )
  {
	digitalWrite(fire[i].fire,0);
	pinMode(fire[i].fire,OUTPUT);
	
	// Set for nothing connected an non-fired
	
	fire[i].pres = 0;
	fire[i].fired = 0;          // Not fired yet
	fire[i].ch_ad = 0;			// [230cd6fbad] no A/D value yet
	
  }

  digitalWrite(RELAY,0);
  pinMode(RELAY,OUTPUT);
  digitalWrite(LED,0);
  pinMode(LED,OUTPUT);
  digitalWrite(TX_CNTL,0);
  pinMode(TX_CNTL,OUTPUT);
    
  // Set up globals
  
  memset(&p,'\0',sizeof(PACKET));
  memset(&state,'\0',sizeof(NODE_STATE));
  p.state = NO_PACKET;
  
}

/***********************************************************************
*
*  void loop()		- Main action routine - CALL continuously
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*
**********************************************************************/

void loop()
{
    int n;
    int buf_psn = 0;
    long now;
    char val;
    int len;
    //char ch;
    int fired = 0;
    bool fire_check = false;	// [83c43c7cd5]

#if 0
	#pragma mark -
	#pragma mark LOOP PKT PROCESS
#endif

	if( Serial.available() > 0 )
	{
#ifdef FAKE_NETWORK
		// ************** TESTING CODE FOR MANUAL ENTERING OF PACKETS
		if( len = get_message(40,buf) )
		{
			Serial.print(" MSG: [");
			Serial.print(buf);
			Serial.println("]");
            Serial.println("");
            check_net();      // Tidy up
            
			// Reset after handling packet
			
			buf_psn = 0;
			p.state = NO_PACKET;
		 }
		 
		 // Process received data
		 // Normally this would be 1 character at a time
		 // but in this case we have a buffer (buf) which
		 // is filled with characters up to a NUL
		 
		 while( buf_psn <= len )
		 {
		 	handle_net( buf[buf_psn++], &p );
		 }
		 // *******************************************************
#else
		// ********************************* STD CHARACTER HANDLER
		while( Serial.available() > 0 )
		{
			ch = Serial.read();
			handle_net(ch,&p );
			
			if( p.state == RCVED_PACKET )
				break;
		}
		// *******************************************************
#endif
		 // If packet found then handle
		 
		 if( p.state == RCVED_PACKET )
		 {
		 	DEBUG_PRINT("** PACKET REC LEN: ");
		 	DEBUG_PRINT_DEC(p.len);
		 	DEBUG_PRINT(" DATA ");
		 	//DEBUG_PRINTLN(p.data);
		 				
			// Switch on packet type and handle
			
			switch( p.data[0] )
			{
				case ARM_CMD:	arm_action( &p );
								break;			

				case FIRE_CMD:	fire_action( &p );
								break;
								
				case DLY_CMD:	delay_action( &p );
								break;
								
				case PGM_CMD:	pgm_action( &p );
								break;
								
				case STATUS_CMD:status_action( &p );
								break;
								
				case SYNC_CMD:	sync_action( &p );
								break;
								
				case VER_CMD:	version_action( &p );
								break;
								
				case CH_CMD:	channel_action( &p );
								break;

				case SET_AD_CMD:address_action( &p );
								break;	
								
				case SET_FT_CMD:fire_time_action( &p );
								break;
								
				case SET_TM_CMD:test_mode_action( &p );
								break;
								
				case BKOFF_CMD:	backoff_time_action( &p );
								break;
								
				case GET_DATA_CMD:	getdata_action( &p );
								break;
								
				default:	Serial.println("** Unknown Command **");
							break;
			}
			
			// Finished with packet
			
			p.state = NO_PACKET;
		 }
	}
	
#if 0
	#pragma mark -
	#pragma mark LOOP MSG RESPONSE
#endif
	
	// Handle message responses after firing
	
	if( state.in_resp && !state.in_fire)
	{
		if( state.now >= state.resp_time )
		{
			digitalWrite(TX_CNTL,1);		// Enable TX
			delay(1);			// Delay to enable XMIT
			
			Serial.println(state.response);	// Send the response
			state.in_resp = 0;				// Clear response
			
			len = strlen(state.response);
			if( len > 15 )
			{
				// Add extra delay [7bcdf98e54]
				delay(DEF_TXEN_DLY);			// Hold enable while XMIT
			}
			delay(DEF_TXEN_DLY);			// Hold enable while XMIT
			digitalWrite(TX_CNTL,0);
		}
	}

#if 0
	#pragma mark -
	#pragma mark LOOP BLINK
#endif
	
	// Process state
	// Get current time in ms and check for what to do
	
	now = millis();							// Handle blink
	state.now = now - state.time_offset;	// Node time, corrected for sync offset
	if( state.in_blink )
	{
		if( now >= state.next_blink )
		{
			state.next_blink += BLINK_TIME;
			val = digitalRead( LED );
			val = val ^ 0x1;
			digitalWrite(LED,val);
		}
	}

#if 0
	#pragma mark -
	#pragma mark LOOP FIRE DELAY
#endif
	
	if( state.in_delay )					// Handle delay
	{
		if( state.now >= state.delay_time )
		{
		
			DEBUG_PRINT("DELAY HIT NOW [");
			DEBUG_PRINT_DEC(state.now);
			DEBUG_PRINT("] DT [");
			DEBUG_PRINT_DEC(state.delay_time);
			DEBUG_PRINT("] OFFSET [");
			DEBUG_PRINT_DEC(state.time_offset);
			DEBUG_PRINTLN("]");
			
			// Exit delay and go to fire
			
			state.in_delay = 0;
			// [a1b444e30a] Added to better support Delay fires
			fire_op( state.delay_channel );
			//-------------------------------------------------
			DEBUG_PRINT("DELAY FIRE [");
			DEBUG_PRINT_DEC( state.fire_channel);
			DEBUG_PRINTLN("]");
		}
	}

#if 0
	#pragma mark -
	#pragma mark LOOP FIRE
#endif
	
	if( state.in_fire )					// Check for firing done
	{
		// [9e81c1a523] Adaptive - See if it's fired already		
		// Read out the A/D on that channel & set fired status
		// fake it on test mode (show as fired)
		
		if( test_mode )
		{
		
			fire[state.fire_channel].pres = 0;		// Assume fired
			fire[state.fire_channel].ch_ad = DEVICE_PRESENT + 0x10;
			fire_check = true;		// [83c43c7cd5]
		}
		else
		{
			// Time to check
			
			n = (int) state.now - state.adaptive_time;
			if( n > FIRE_CHECK_TIME )
			{
				digitalWrite( fire[state.fire_channel].fire,0);		// Disable fire
				delay( FIRE_CHECK_WAIT);							// Wait
				fire[state.fire_channel].ch_ad = 					// Measure presence
				analogRead( fire[state.fire_channel].ad );
				
				DEBUG_PRINT("ADAPT A/D[");
				DEBUG_PRINT_HEX(fire[state.fire_channel].ch_ad);
				DEBUG_PRINTLN("]");
				
				state.adaptive_time = state.now;					// Reset time
				digitalWrite( fire[state.fire_channel].fire,1);		// Enable fire
				fire_check = true;		// [83c43c7cd5]
			}
		}
		
		// Now check for fired status, save the current time
		// for later analysis
		
		fire[state.fire_channel].fire_time = state.now;	// Save fire time
		if( fire_check )		// [83c43c7cd5]
		{
			if( fire[state.fire_channel].ch_ad < DEVICE_PRESENT )
			{
				fired = 1;									// Mark as fired
				fire[state.fire_channel].fired = 1;			// Mark as fired
				fire[state.fire_channel].pres = 0;			// Nothing connected
				DEBUG_PRINT("FIRE EARLY STOP [");
				DEBUG_PRINT_HEX(fire[state.fire_channel].pres);
				DEBUG_PRINTLN("]");
			}
			else
			{
				fired = 0;									// Mark as not fired
				fire[state.fire_channel].pres = 1;			// Item as connected
			}
			fire_check = false;
		}
		
		// If fired tidy up

		if( (fired == 1) || (state.now >= state.fire_time) )
		{
			state.in_fire = 0;
			digitalWrite( fire[state.fire_channel].fire,0);
			
			DEBUG_PRINT("FIRED NOW FIRE_DATA [");
			DEBUG_PRINT_DEC( fired );
			DEBUG_PRINT(" ");
			DEBUG_PRINT(state.now);
			DEBUG_PRINT(" ");
			DEBUG_PRINT(state.fire_time);
			DEBUG_PRINT("] FIRE_TIME [");
			
			// Compute firing time MAX time - (now - firetime)
			
			fire[state.fire_channel].fire_time = fire_time - (state.now - state.fire_time);
			DEBUG_PRINT_DEC( fire[state.fire_channel].fire_time );
			DEBUG_PRINTLN("]");
			DEBUG_PRINTLN("FIRE DONE");	
			
			// Handle next event if set
			
			if( state.in_event )
			{
				// Send off a response
				
				buf[0] = 'R';
				buf[1] = 'P';
				buf[2] = state.fire_channel + 0x30;
				buf[3] = '\0';
				gen_packet( state.control,3,buf,&(state.response[0]));
				set_response(BCAST_ADDRESS);		// Send BCAST to stagger return
				DEBUG_PRINT("EVENT RESP [");
				DEBUG_PRINT(state.response);
				DEBUG_PRINTLN("]");
				
				// Move to next
				next_event();
			}
		}
	}
}

#if 0
	#pragma mark -
	#pragma mark Handler Routines
#endif

/***********************************************************************
*
*  void arm_action( PACKET *pkt )	- Turn on/off ARM relay
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Arm relay changed state
*
**********************************************************************/

static void arm_action( PACKET *pkt )
{
	char success = 0;
	
	DEBUG_PRINT("ARM Action ");
	DEBUG_PRINTLN(pkt->data);

	if( pkt->data[1] == 'A' )
	{
		// On arm action, flip on ARM relay
		// Start blinking
		
		DEBUG_PRINTLN("ARMED");
		digitalWrite(RELAY,1);
		state.in_blink = 1;
		state.next_blink = state.now;
		state.armed = 1;
		success = 1;
		
		// Check the devices
		
		delay( 100 );			// Wait 100 ms before check
		check_device( fire );
	}
	
	if( pkt->data[1] == 'D' )
	{
		// On Disarm, turn off blink, LED and relay
		
		DEBUG_PRINTLN("DISARMED");
		digitalWrite( RELAY,0);
		digitalWrite( LED,0);
		state.in_blink = 0;
		state.armed = 0;
		success = 1;
	}
		
	// Set response on success
	
	if( success )
	{
		gen_packet( pkt->from,2,"RA",&(state.response[0]));
		set_response(pkt->to);
		
		DEBUG_PRINT("RESPONSE [");
		DEBUG_PRINT(state.response);
		DEBUG_PRINTLN("]");
	}
}

/***********************************************************************
*
*  void fire_action( PACKET *pkt )	- Fire squib
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Fire channel
*
**********************************************************************/

static void fire_action( PACKET *pkt )
{
    int ch;
    
	DEBUG_PRINT("FIRE Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Must be armed to fire
	
	if( state.armed )
	{
        // If FIRE, check if not fired yet and then
        // if not fire it
        
        ch = pkt->data[1] & 0xf;
        if( ch >= 0 && ch < FIRE_CHANNELS )
        {
            if( fire[ch].fired == 0 )
            {
                fire_op( ch );
                
				 // Set response on success
				gen_packet( pkt->from,2,"RF",&(state.response[0]));
				set_response(pkt->to);
				DEBUG_PRINT("RESPONSE [");
				DEBUG_PRINT(state.response);
				DEBUG_PRINTLN("]");
            }
        }
	}
	else
	{
		DEBUG_PRINTLN("** NOT ARMED **");
	}
}

/***********************************************************************
*
*  void delay_action( PACKET *pkt )	- Delay Fire squib
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Fire channel after delay
*
*	12-Nov-2011 [[a1b444e30a] Allow up to max in packet for delay time
*
**********************************************************************/

static void delay_action( PACKET *pkt )
{
        int i;
        char ch;
        
	DEBUG_PRINT("Delay FIRE Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// (0) Must be armed to work
	
	if( state.armed )
	{

		// (1) Make sure we are not in a delay now, if so just bail
		
		if( state.in_delay == 0 )
		{
			state.delay_channel = 0xf & pkt->data[1];  // Channel
			state.delay_time = 0;
			
			// (2) Form up delay time
			// Allow up to max in packet
			
			for( i=0; i<pkt->len; i++ )
			{
			   ch = pkt->data[2+i];
			   if( ch == '\0')
				 break;
				 
			   // Otherwise add it in
			   
			   state.delay_time = (0xf & ch ) + (10 * state.delay_time);
			}
			
			DEBUG_PRINT("Delay CH ");
			DEBUG_PRINT_DEC( state.delay_channel);
			DEBUG_PRINT(" Delay: ");
			DEBUG_PRINT_DEC(state.delay_time);
			DEBUG_PRINTLN(" ");
			
			// (3) Start delay action
			
			state.in_delay = 1;
	
			// Set response on success
			gen_packet( pkt->from,2,"RD",&(state.response[0]));
			set_response(pkt->to);
			DEBUG_PRINT("RESPONSE [");
			DEBUG_PRINT(state.response);
			DEBUG_PRINTLN("]");
		}
	}
	else
	{
		DEBUG_PRINTLN("** NOT ARMED **");
	}
}

/***********************************************************************
*
*  void pgm_action( PACKET *pkt )	- Store events in queue
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Event stored in queue 
*
*	12-Nov-2011 [[a1b444e30a] Allow up to max in packet for delay time
*
**********************************************************************/

static void pgm_action( PACKET *pkt )
{
	int i;
	char ch;
	char data;
	long ft;
        
	DEBUG_PRINT("PGM EVENT Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// (1) Make sure we are not in a event handling now, if so just bail
	
	if( state.in_event == 0 )
	{
		ch = 0xf & pkt->data[1];  // Channel
		ft = 0;
		
		// (2) Form up delay time
		// Allow up to max in packet
		
		for( i=0; i<pkt->len; i++ )
		{
		   data = pkt->data[2+i];
		   if( data == '\0')
			 break;
			 
		   // Otherwise add it in
		   
		   ft = (0xf & data ) + (10 * ft);
		}
		
		DEBUG_PRINT("Event CH ");
		DEBUG_PRINT_DEC( ch );
		DEBUG_PRINT(" FT: ");
		DEBUG_PRINT_DEC(ft);
		DEBUG_PRINTLN(" ");
		
		// (3) Store in queue if possible
		
		if( store_in_queue( ch,ft ) == 0 )
		{
			gen_packet( pkt->from,2,"RP",&(state.response[0]));
			// Save control address
			state.control = pkt->from;	// store controller
			set_response(pkt->to);
			DEBUG_PRINT("RESPONSE [");
			DEBUG_PRINT(state.response);
			DEBUG_PRINTLN("]");
			
			
			
			
		}
		else
		{
			DEBUG_PRINT("QUEUE FULL");
		}
	}

}

/***********************************************************************
*
*  void status_action( PACKET *pkt )	- Return Status
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Return status
*
*  	16-Jan-2011 [e4208b8f56] Change response format
*	23-Jan-2011	Shorten response don't send NUL
*
**********************************************************************/

static void status_action( PACKET *pkt )
{
    int n,i;
    char data[8];
    
	DEBUG_PRINT("Status Action ");
	DEBUG_PRINTLN(pkt->data);

        // (1) Fill data buffer with STATUS information
        // SR[A/D][Fired][Unfired]
        
        data[0] = 'R';
        data[1] = 'S';
        if( state.armed == 1 )
          data[2] = 'A';
        else
          data[2] = 'D';
          
        // Build the fired bits with 5 on the left and 0 on the right
        
        check_device(fire);			// Get current status
        
        n = 1;
        data[3] = 0x40;
        data[4] = 0x40;
        
        for( i=0; i<FIRE_CHANNELS; i++ )
        {
          if( fire[i].fired )        // Or in fired bit
            data[3] = data[3] | n;
            
          if( fire[i].pres )
            data[4] = data[4] | n;    // Presence bit
            
          n = n << 1;              // Shift to next bit
        }
           
       data[5] = '\0'; 
            

        n = gen_packet( pkt->from,5,data,&(state.response[0]));
        DEBUG_PRINT("Status Packet [");
        DEBUG_PRINT(state.response);
        DEBUG_PRINT(" ] Size ");
        DEBUG_PRINT_DEC(n);
        DEBUG_PRINT(" DATA [");
        DEBUG_PRINT_HEX(data[3]);
        DEBUG_PRINT(" ");
        DEBUG_PRINT_HEX(data[4]);
        DEBUG_PRINTLN("]");
        
        // Set up for response

		set_response( pkt->to );
}

/***********************************************************************
*
*  void sync_action( PACKET *pkt )	- Sync board clock
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Board clock set to 0
*
**********************************************************************/

static void sync_action( PACKET *pkt )
{
	DEBUG_PRINT("Sync Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Set the current time offset in ms
	
	state.time_offset = millis();
	
	// Correct state times
	
	state.next_blink 	-= state.time_offset;
	state.delay_time 	-= state.time_offset;
	state.fire_time 	-= state.time_offset;
	state.now 			= 0;
	
	DEBUG_PRINT("Time Offset [");
	DEBUG_PRINT_DEC(state.time_offset);
	DEBUG_PRINTLN("]");
	
	// If ZP is sent the start event processing
	
	if( pkt->data[1] == 'P' )
	{
		state.in_event = 1;
		next_event();
		gen_packet( pkt->from,2,"RZP",&(state.response[0]));
	}
	else
		gen_packet( pkt->from,2,"RZ",&(state.response[0]));
	
	// Set response on success
	
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
	set_response(pkt->to);
}

/***********************************************************************
*
*  void version_action( PACKET *pkt )	- Return Board version
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Return version string
*
*	27-Jan-2011	Remove :'s in time string
*
**********************************************************************/

static void version_action( PACKET *pkt )
{
	char *buffer;
	int n;
	int i;
	
	DEBUG_PRINT("Version Action ");
	DEBUG_PRINTLN(pkt->data);
	
	// Fill the buffer with	__DATE__ and __TIME__
	
	buffer = (char *)&buf[0];
	for( i=0; i< STATIC_BUF_SZ; i++ )
		buffer[i] = '\0';
		
	if( test_mode )
	{
		strcat(buffer,"RVX");
	}
	else
	{
		strcat(buffer,"RV");
	}
	strcat(buffer,__DATE__);
	strcat(buffer," ");
	strcat(buffer,__TIME__);
	n = strlen(buffer);
	
	// Remove :'s in the time string
	
	for( i=0; i<n; i++ )
	{
		switch(buffer[i] )
		{
			case ':':	buffer[i] = '-';
						break;
						
			default:	break;
		}
	}
	
	// Set response on success
	gen_packet( pkt->from,n,buffer,&(state.response[0]));
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
	set_response(pkt->to);

}

/***********************************************************************
*
*  void channel_action( PACKET *pkt )	- Return Firing channel data
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Return RC<fired status><Channel A/D value>
*
*	27-Jan-2011	Remove :'s in time string
*
**********************************************************************/

static void channel_action( PACKET *pkt )
{
	int ch;
	int ad;
	char *buffer;
	int psn;
	//int val;
	char *bufp;
	
	// Build response
	
	buffer = (char *)&buf[0];
	
	buffer[0] = 'R';
	buffer[1] = 'C';

	
	//  Input data is C<channel #> extract that and get data
	// if not fire it
	
	ch = pkt->data[1] & 0xf;
	if( ch >= 0 && ch < FIRE_CHANNELS )
	{
		
		if( fire[ch].fired == 1 )
			buffer[2] = 1;		// Fired
		else
			buffer[2] = '0';	//Unfired
			
		// Get A/D value
		
		ad = analogRead( fire[ch].ad );
		
		// A/D value ranges from 0 to 1023
		
		bufp = (char *)&(buffer[3]);
		psn = 3 + num_to_string(ad,4,bufp);	// Convert A/D to 4 char string
	}
	else
	{
		// Failure packet
		
		buffer[2] = '0';
		buffer[3] = '0';
		psn = 4;
	}
		
	// Send
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
	set_response(pkt->to);
}

/***********************************************************************
*
*  void address_action( PACKET *pkt )	- Change board address
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change board address
*
**********************************************************************/

static void address_action( PACKET *pkt )
{
    int address = 0;
    char *buffer;
    int psn;
	char *bufp;
        
	DEBUG_PRINT("Address Action ");
	DEBUG_PRINTLN(pkt->data);
	
	buffer = (char *)&buf[0];
	
	// If length of packet == 1 then just return current address
	
	if( pkt->len > 1 )
	{
		// Get the address as the second and third bytes
		
		address = 0xf & pkt->data[1];
		if( pkt->data[2] != '\0' )
		{
			address = (pkt->data[2] & 0xf) + 10 * address;
		}
		
		if( address >= MIN_ADDRESS && address < MAX_ADDRESS )
		{
			set_address( address );
		}
	}
	
	buffer[0] = 'R';
	buffer[1] = 'W';
	bufp = (char *)&buffer[2];
	psn = 2 + num_to_string(board_address,2,bufp);
	
	// In all cases return current address
		
	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");

}


/***********************************************************************
*
*  void fire_time_action( PACKET *pkt )	- Change board firing time
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change board firing time
*
**********************************************************************/

static void fire_time_action( PACKET *pkt )
{
   	int ft = 0;
   	int i;
    char *buffer;
    int psn;
    char *bufp;
        
	DEBUG_PRINT("Fire Time Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];

	// Only set address if length of packet > 1 
	
	if( pkt->len > 1 )
	{
		// Get the Firing time as the 2nd through 6th bytes
		
		for( i=1; i<5; i++ )
		{
			ft = (0xf & pkt->data[i]) + (10 * ft);
	
		}
		
		set_fire_time( ft );
		fire_time = get_fire_time();
	}

	// Build the return value, put the current time
	// in the return
	
	buffer[0] = 'R';
	buffer[1] = 'T';
	
	bufp = (char *)&(buffer[2]);
	psn = 2 + num_to_string(fire_time,5,bufp);
	
	DEBUG_PRINT("Set Fire Time to [");
	DEBUG_PRINT_DEC(ft);
	DEBUG_PRINT("] EEPROM [");
	DEBUG_PRINT_DEC(i);
	DEBUG_PRINTLN("]");
	
	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
}

/***********************************************************************
*
*  void test_mode_action( PACKET *pkt )	- Change test mode
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change test mode
*			Data = 0	=> test mode off
*				== 1	=> test mode on
*
**********************************************************************/

static void test_mode_action( PACKET *pkt )
{
   	bool tmode = false;
   	bool tmode_value = 0;
    char *buffer;
    int psn;
    char *bufp;

        
	DEBUG_PRINT("Test Mode Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];
	
	// Only set if packet lenght > 1 )
	
	if( pkt->len > 1 )
	{

		// Get Test mode as the data value
		
		if( pkt->data[1] == '1' )
			tmode = true;
		
		
		set_test_mode( tmode );
		tmode_value = get_test_mode();
	}
	
	// Show current value
	
	buffer[0] = 'R';
	buffer[1] = 'M';
	
	bufp = (char *)&(buffer[2]);
	psn = 2 + num_to_string(test_mode,1,bufp);
	
	DEBUG_PRINT("Set Test Mode to [");
	DEBUG_PRINT_DEC(tmode);
	DEBUG_PRINT("] EEPROM [");
	DEBUG_PRINT_DEC(tmode_value);
	DEBUG_PRINTLN("]");

	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
}

/***********************************************************************
*
*  void backoff_time_action( PACKET *pkt )	- Change board msg backoff time
*
*	INPUT:  pkt	- Input packet
*
*	OUTPUT:	Change board return backoff time
*
**********************************************************************/

static void backoff_time_action( PACKET *pkt )
{
   	int bt = 0;
   	int i = 0;
    char *buffer;
    int psn;
    char *bufp;

        
	DEBUG_PRINT("Backoff Time Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];
	
	// Only set if packet length > 1
	
	if( pkt->len > 1 )
	{
		// Get the address as the 2nd through length
		
		for( i=1; i<pkt->len; i++ )
		{
			bt = (0xf & pkt->data[i]) + (10 * bt);
	
		}
		
		set_backoff_time( bt );
		i = get_backoff_time();
	}
	else
		bt = backoff_time;
	
	// Return result
	
	buffer[0] = 'R';
	buffer[1] = 'B';
	bufp = (char *)&(buffer[2]);
	psn = 2 + num_to_string(backoff_time,-1,bufp);
	
	DEBUG_PRINT("Set Backoff Time to [");
	DEBUG_PRINT_DEC(bt);
	DEBUG_PRINT("] EEPROM [");
	DEBUG_PRINT_DEC(i);
	DEBUG_PRINTLN("]");

	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");
}

/***********************************************************************
*
*  void getdata_action( PACKET *pkt )	- Get data from board
*
*	INPUT:  pkt	- Input packet
*					Data contains type of data to return
*					(Ignored for now)
*
*	OUTPUT:	Returns response with data
*
**********************************************************************/

static void getdata_action( PACKET *pkt )
{
   	//int bt = 0;
   	int i;
    char *buffer;
    int psn;
    char *buft;

        
	DEBUG_PRINT("Get Data Action ");
	DEBUG_PRINTLN(pkt->data);
	buffer = (char *)&buf[0];
	
	// Ignore input data in packet (for now)
	
	// Return result
	
	buffer[0] = 'R';
	buffer[1] = GET_DATA_CMD;
	
	// Now fill buffer with the 6 firing times for this run
	
	psn = 2;						// Start buffer psn
	DEBUG_PRINTLN("FIRE TIMES");
	for( i=0; i<FIRE_CHANNELS; i++ )
	{
		DEBUG_PRINT("CHANNEL [");
		DEBUG_PRINT_DEC(i);
		DEBUG_PRINT("] TIME [");
		DEBUG_PRINT_DEC(fire[i].fire_time);
		DEBUG_PRINT("] PSN [");
		// Store each firng time into buffer
		buft = (char *)&(buffer[psn]);

		psn += num_to_string(fire[i].fire_time,
								1,
								buft);
		if( psn >= 31 )			// Buffer FULL
		{
			buffer[31] = '\0';
			DEBUG_PRINT_DEC(psn);
			DEBUG_PRINT("] BUF[");
			DEBUG_PRINT(buf);
			DEBUG_PRINTLN("]");
			break;
		}	
		DEBUG_PRINT_DEC(psn);
		DEBUG_PRINT("] BUF[");
		DEBUG_PRINT(buf);
		DEBUG_PRINTLN("]");
		buffer[psn++] = ' ';		// Overwrite NUL
	}
	
	buffer[psn] = '\0';				// Terminate buffer
	DEBUG_PRINT("Result [");
	DEBUG_PRINT(buffer);
	DEBUG_PRINTLN("]");

	// Set response on success
	gen_packet( pkt->from,psn,buffer,&(state.response[0]));
	set_response(pkt->to);
	DEBUG_PRINT("RESPONSE [");
	DEBUG_PRINT(state.response);
	DEBUG_PRINTLN("]");

}

#if 0
	#pragma mark -
	#pragma mark Support Routines
#endif

/***********************************************************************
*
*  void check_device(FIRE_LIST *fl)	- Check for presence of devices on
*									  firing channels
*	INPUT:  fl	- Firing list of devices
*
*	OUTPUT:	NONE
*
**********************************************************************/

static void check_device(FIRE_LIST *fl)
{
	int i;
	int adval;
	
	DEBUG_PRINTLN("CHECK DEVICE Action ");
	DEBUG_PRINTLN("D A/D P F");
	
	// Scan the channels for device present
	
	for( i=0; i<FIRE_CHANNELS; i++ )
	{	
		// If in test mode fake device connected
		if( test_mode == 1 )
		{
			adval = DEVICE_PRESENT + 0x10;	// FAKE the A/D value
		}
		else
		{
			adval = analogRead( fire[i].ad );
		}
		fire[i].ch_ad = adval;		// [230cd6fbad] Save into FIRE_LIST structure
		
		// Set device presence based on A/D value
		// [7cc38ceff4] Update FIRE status
		
		if( adval < DEVICE_PRESENT )
		{
			fire[i].pres = 0;			// Nothing connected
			fire[i].fired = 1;			// Mark as fired
		}
		else
		{
			fire[i].pres = 1;			// Item connected
			fire[i].fired = 0;			// Mark as NOT fired
		}
			
		DEBUG_PRINT_DEC(i);
		DEBUG_PRINT(" ");
		DEBUG_PRINT_HEX(fire[i].ch_ad);
		DEBUG_PRINT(" ");
		DEBUG_PRINT_DEC(fire[i].pres );
		DEBUG_PRINT(" ");
		DEBUG_PRINT_DEC(fire[i].fired );
		DEBUG_PRINTLN("");
	}
}

/***********************************************************************
*
*  void fire_op( int ch )	- Fire operation
*
*	INPUT:  ch	- Channel to be fired
*
*	OUTPUT:	NONE	- Fire state set up
*
*	12-Nov-2011 [a1b444e30a] Added to better support Delay fires
*
**********************************************************************/

void fire_op( int ch )
{
	state.fire_channel = ch;
	state.fire_time = state.now + fire_time;
	state.adaptive_time = state.now;		// Get adaptive firing time
	state.in_fire = 1;
	digitalWrite(fire[ch].fire,1);    // FIRE !!!
}

/***********************************************************************
*
*  void next_event()	- Set up for next event
*
*	INPUT:  NONE	- Use state
*
*	OUTPUT:	Delay firing started and set for next event or terminate
*			event handling
*
**********************************************************************/

void next_event(void)
{
	// Set up for next event 
	if( state.event_next < state.event_count )
	{
		state.in_delay = 1;
		state.delay_time = events[state.event_next].ft;
		state.delay_channel = events[state.event_next].ch;
		DEBUG_PRINT("Entering NEXT event CH [");
		DEBUG_PRINT_DEC(state.delay_channel);
		DEBUG_PRINT("] TIME [");
		DEBUG_PRINT_DEC(state.delay_time);
		DEBUG_PRINT(" NOW [");
		DEBUG_PRINT_DEC(state.now);
		DEBUG_PRINT("] EVENT [");
		DEBUG_PRINT_DEC(state.event_next);
		DEBUG_PRINTLN("]");
		state.event_next++;
	}
	else
	{
		DEBUG_PRINTLN("** END OF EVENTS **");
		state.in_event = 0;
	}
}

/***********************************************************************
*
* 	int store_in_queue( char ch, long ft )	- Store data in firing queue
*
*	INPUT:  ch		- Firing channel
*			long	- Firing time (ms)
*
*	OUTPUT:	0 If inserted, <> 0 if not
*
*	Called in init() and if EERROM version out of date then update
*	eeprom to current values
*
**********************************************************************/

int store_in_queue( char ch, long ft )
{
	int rtnval = -1;	// Set for failure
	int i;
	int qpsn;
	
	DEBUG_PRINT("STORE IN QUEUE CH[");
	DEBUG_PRINT_DEC(ch);
	DEBUG_PRINT("] FT [");
	DEBUG_PRINT_DEC(ft);
	DEBUG_PRINTLN("]");
	
	print_queue();
	
	// (1) Is there room ?
	
	if( state.event_count < FIRE_CHANNELS )
	{
		// (2) Event count 0  special case just inserted it
		
		if( state.event_count == 0 )
		{
			events[state.event_count].ch = ch;
			events[state.event_count].ft = ft;
			state.event_count++;
			rtnval = 0;				// SUCCESS
		}
		else
		{
			// (3) Determine where it fits in queue
			
			for( i=0; i<state.event_count; i++ )
			{
				if( ft <= events[i].ft )
					break;
			}
			
			qpsn = i;
			
			// (4) Two cases
			//	(a) Beyond end of queue, just stick it in
			//	(b) Inside queue, move up queue and stick it in
			
			if( qpsn >= state.event_count )
			{
				// Case (a) stick in new MT slot at end
				
				events[state.event_count].ch = ch;
				events[state.event_count].ft = ft;
				state.event_count++;
				rtnval = 0;				// SUCCESS
				
				DEBUG_PRINTLN("- INSERT AT END -");
				print_queue();
			}
			else
			{
				// Case (b) Move all the items above qpsn up one into MT slot
				// and insert new at qpsn
				
				for( i=state.event_count-1; i>=qpsn; i--)
				{
					events[i+1].ch = events[i].ch;
					events[i+1].ft = events[i].ft;
				}
				events[qpsn].ch = ch;
				events[qpsn].ft = ft;
				
				state.event_count++;
				rtnval = 0;
				
				DEBUG_PRINT("- INSERT AT [");
				DEBUG_PRINT_DEC(qpsn);
				DEBUG_PRINTLN("] -");
				print_queue();
			}
		}
	}
	
	return rtnval;
		
}

/***********************************************************************
*
* 	void print_queue(void)
*
*	INPUT:  NONE
*
*	OUTPUT:	NONE
*
*	Print out current event queue
*
**********************************************************************/

void print_queue(void)
{

#if DEBUG_ON
	int i;

	if( state.event_count == 0 )
	{
		DEBUG_PRINTLN("EVENT QUEUE MT");
	}
	else
	{
		DEBUG_PRINTLN("- EVENT QUEUE - ");
		for( i=0; i<state.event_count; i++ )
		{
			DEBUG_PRINT("Event[");
			DEBUG_PRINT_DEC(i);
			DEBUG_PRINT("] CH[");
			DEBUG_PRINT_DEC(events[i].ch);
			DEBUG_PRINT("] FT [");
			DEBUG_PRINT_DEC(events[i].ft);
			DEBUG_PRINTLN("]");
		}
		DEBUG_PRINTLN("----------------");
	}
#endif
}

#if 0
	#pragma mark -
	#pragma mark EEPROM Support Routines
#endif

/***********************************************************************
*
* 	void check_eeprom()
*
*	INPUT:  NONE
*
*	OUTPUT:	NONE
*
*	Called in init() and if EERROM version out of date then update
*	eeprom to current values
*
**********************************************************************/

static void check_eeprom()
{
	unsigned char verh,verl;
	unsigned int ver;
	
	// Read the eeprom version
	// from EERPROM
	
	verh = EEPROM.read( ROMVER_LCNH );
	verl = EEPROM.read( ROMVER_LCNL );
	ver = (unsigned int)(0xff & verh );
	ver = (ver<<8) + (unsigned int)(0xff & verl);
	
	DEBUG_PRINT("EEPROM VERSION ");
	DEBUG_PRINT_HEX( ver );
	
	// Do we need an update ?
	
	if( ver != ROMVER )
	{
		DEBUG_PRINTLN(" MISMATCH - UPDATE EEPROM");
		
		// Update 	ROM VERSION
		//			FIRE TIME
		//			BACKOFF TIME
		
		ver = ROMVER;
		DEBUG_PRINT("NEW VERSION [");
		DEBUG_PRINT_HEX( ver );
		
		
		verh = 0xff & (ver >> 8);
		verl = 0xff & ver;
		DEBUG_PRINT(" ");
		DEBUG_PRINT_HEX( verh );
		DEBUG_PRINT(" ");
		DEBUG_PRINT_HEX( verl );
		DEBUG_PRINTLN("]");
		
		EEPROM.write(ROMVER_LCNH,verh);
		EEPROM.write(ROMVER_LCNL,verl);
		
		set_fire_time(DEF_FIRE_TIME);
		set_backoff_time( RESP_BACKOFF );
		
		DEBUG_PRINTLN("-- EEROM UPDATED --");	
	}
	else
	{
		DEBUG_PRINTLN(" MATCH USE EEPROM");
	}
}

/***********************************************************************
*
*  int get_test_mode()	- Get test mode value
*
*	INPUT:  NONE
*
*	OUTPUT:	TRUE if in test mode, FALSE if not
*
**********************************************************************/

static bool get_test_mode()
{
	unsigned char tmode,ctmode;
	bool rtnval = false;
	
	// (1) Read tmode and the compliment value
	// from EERPROM
	
	tmode = EEPROM.read( TEST_MODE_LCN );
	ctmode = EEPROM.read( CTEST_MODE_LCN );
	ctmode = 0xff & ~ctmode;
	
	// (2) Is this correct 
	
	if( ctmode == tmode )
	{
		// Yes, return state of tmode
		
		if( tmode > 0 )
			rtnval = true;
	}
	
	
	DEBUG_PRINT("Test Mode [");
	DEBUG_PRINT_DEC(rtnval);
	DEBUG_PRINTLN("]");
	
	return( rtnval );
}
		
/***********************************************************************
*
*  int set_test_mode(bool mode)	- set Test mode
*
*	INPUT:  tmode	- TRUE or FALSE	
*
*	OUTPUT:	NONE
*
**********************************************************************/

		
static void set_test_mode( bool mode )
{
	unsigned char tmode,ctmode;
	
	// (1) Build the tmode and compliment
	
	if( mode )
	{
		tmode = 0xff;
		ctmode = 0;
	}
	else
	{
		tmode = 0;
		ctmode = 0xff;
	}
	
	// (2) Now write them to eerom
	
	EEPROM.write(TEST_MODE_LCN,tmode);
	EEPROM.write(CTEST_MODE_LCN,ctmode);
}

 
/***********************************************************************
*
*  int get_address()	- Get board address
*
*	INPUT:  NONE
*
*	OUTPUT:	Board address, if none set to default address
*
**********************************************************************/

static int get_address()
{
	unsigned char addr,caddr;
	int address;
	
	// (1) Read the address and the compliment value
	// from EERPROM
	
	addr = EEPROM.read( ADDR_LCN );
	caddr = EEPROM.read( CADDR_LCN );
	caddr = 0xff & ~caddr;
	
	// (2) Is this correct 
	
	if( caddr == addr &&
		addr >= ADDR_MIN &&
		addr <= ADDR_MAX)
	{
		address = 0xff & addr;
	}
	else
	{
		// (3) Failure, set to default address
		
		address = set_address( DEF_ADDR );
	}
	
	DEBUG_PRINT("Board Address [");
	DEBUG_PRINT_DEC(address);
	DEBUG_PRINTLN("]");
	
	return( address );
}
		
/***********************************************************************
*
*  int set_address(int address)	- set board address
*
*	INPUT:  address
*
*	OUTPUT:	Board address
*
**********************************************************************/

		
static int set_address( int address )
{
	unsigned char addr,caddr;
	
	// (1) Build the address and compliment
	
	addr = 0x3f & address;
	caddr = 0xff & ~addr;
	
	// (2) Now write them to eerom
	
	EEPROM.write(ADDR_LCN,addr);
	EEPROM.write(CADDR_LCN,caddr);
	
	return( address );
}

/***********************************************************************
*
*  int get_fire_time()	- Get board firing time (in ms)
*
*	INPUT:  NONE
*
*	OUTPUT:	Returns firing time (if none returns default)
*
**********************************************************************/

static int get_fire_time()
{
	unsigned int ft,cft;
	unsigned val;
	
	// (1) Read the address and the compliment value
	// from EERPROM
	
	val = EEPROM.read( FIRE_TIME_MSB );
	ft = val << 8;
	val = 0xff & EEPROM.read( FIRE_TIME_LSB );
	ft = ft | val;
	
	val = EEPROM.read( FIRE_TIME_CMSB );
	cft = val << 8;
	val = 0xff & EEPROM.read( FIRE_TIME_CLSB );
	cft = cft | val;
	cft = ~cft;
	
	// (2) Is this correct 
	
	if( ft != cft )
	{
		// (3) Failure, set to default time
		
		DEBUG_PRINTLN("** DEFAULT FIRE TIME **");
		ft = set_fire_time( DEF_FIRE_TIME );
	}
	
	DEBUG_PRINT("FIRE TIME [");
	DEBUG_PRINT_DEC(ft);
	DEBUG_PRINTLN("]");
	
	return( ft );
}

/***********************************************************************
*
*  int set_fire_time(int firet)	- set board firing time
*
*	INPUT:  ft	- Firing time in ms
*
*	OUTPUT:	Board firing time
*
**********************************************************************/

		
static int set_fire_time( int firet )
{
	unsigned int ft,cft;
	unsigned char part;
	
	// (1) Build the address and compliment
	
	ft = firet;
	cft = ~firet;
	
	// (2) Now write them to eerom
	
	part = ft >> 8;
	EEPROM.write(FIRE_TIME_MSB,part);
	part = 0xff & ft;
	EEPROM.write(FIRE_TIME_LSB,part);

	part = cft >> 8;
	EEPROM.write(FIRE_TIME_CMSB,part);
	part = 0xff & cft;
	EEPROM.write(FIRE_TIME_CLSB,part);
	
	// (3) Read value from EEPROM
	
	ft = get_fire_time();
	
	return( ft );
}

/***********************************************************************
*
*  int get_backoff_time()	- Get board backoff time (in ms)
*
*	INPUT:  NONE
*
*	OUTPUT:	Returns backoff time (if none returns default)
*
**********************************************************************/

static int get_backoff_time()
{
	unsigned int bt,cbt;
	//unsigned val;
	
	// (1) Read the address and the compliment value
	// from EERPROM
	
	bt = EEPROM.read( BACKOFF_TIME_LCN );	
	cbt = EEPROM.read( BACKOFF_TIME_LCNC );
	cbt = 0xff & ~cbt;
	
	// (2) Is this correct 
	
	if( bt != cbt )
	{
		// (3) Failure, set to default time
		
		DEBUG_PRINTLN("** DEFAULT BACKOFF TIME **");
		bt = set_backoff_time( RESP_BACKOFF );
	}
	
	DEBUG_PRINT("BACKOFF TIME [");
	DEBUG_PRINT_DEC(bt);
	DEBUG_PRINTLN("]");
	
	return( bt );
}

/***********************************************************************
*
*  int set_backoff_time(int firet)	- set board backoff time
*
*	INPUT:  bt	- Backoff time in ms (0-255)
*
*	OUTPUT:	Board backoff time
*
**********************************************************************/

		
static int set_backoff_time( int backt )
{
	unsigned int bt,cbt;
	//unsigned char part;
	
	// (1) Build the address and compliment
	
	bt = backt;
	cbt = 0xff & ~backt;
	
	// (2) Now write them to eerom
	
	EEPROM.write(BACKOFF_TIME_LCN,bt);
	EEPROM.write(BACKOFF_TIME_LCNC,cbt);
	
	// (3) Read value from EEPROM
	
	bt = get_backoff_time();
	
	return( bt );
}

#if 0
	#pragma mark -
	#pragma mark PACKET HANDLER
#endif

/***********************************************************************
*
*  void handle_net( char data, PACKET *pkt )
*
*	INPUT: 	data	- Packet character
*			pkt		- Packet data structure
*
*	OUTPUT:		NONE
*
**********************************************************************/

static void handle_net( char data, PACKET *pkt )
{
	
//	DEBUG_PRINT("State: [");
//	DEBUG_PRINT(state_name(pkt->state));
//	DEBUG_PRINTLN("]");

	if( pkt->state == NO_PACKET )
	{
		pkt->len = 0;
		memset(pkt->data,'\0',PHY_DATA_SIZE);
		pkt->state = DATA_PACKET;
	}
	
	// (1) Switch depending on state
	
	switch( pkt->state )
	{
		case NO_PACKET:		if( data == MSG_HDR )
							{
								pkt->len = 0;
								memset(pkt->data,'\0',PHY_DATA_SIZE);
								pkt->state = TO_PACKET_A;
							}
							break;
							
		case TO_PACKET_A:	pkt->to = 10 * (data & 0xf);
							pkt->cksum = data;
							if( pkt->to > MAX_ADDRESS )
								pkt->state = NO_PACKET;
							else
								pkt->state = TO_PACKET_B;
							break;
							
		case TO_PACKET_B:	pkt->to = pkt->to + (data & 0xf);
							if( pkt->to > MAX_ADDRESS )
							{
								pkt->state = NO_PACKET;
							}
							else
							{
								if( pkt->to != BCAST_ADDRESS &&
									pkt->to != board_address )
								{
									pkt->state = NO_PACKET;
								}
								else
								{
									pkt->state = FROM_PACKET_A;
									pkt->cksum += data;
								}
							}
							break;
							
		case FROM_PACKET_A:	pkt->from = 10 * (data & 0xf);
							pkt->cksum += data;
							pkt->state = FROM_PACKET_B;
							break;
							
		case FROM_PACKET_B:	pkt->from = pkt->from + (data & 0xf);
							pkt->cksum += data;
							pkt->state = DATA_PACKET;
							break;
							
		case DATA_PACKET:	if( data == MSG_TRLR )
							{
								pkt->state = RCVED_PACKET;
								pkt->to = 1;
								pkt->from = 30;
							}
							else
							{
								pkt->cksum += data;
								pkt->data[pkt->len++] = data;
							}
							break;
							
		case CKSUM_PACKET_A:	pkt->pcksum = 10 * (data & 0xf);
								pkt->state = CKSUM_PACKET_B;
								break;
								
		case CKSUM_PACKET_B:	pkt->pcksum = pkt->pcksum + (data & 0xf);
								// Now compare modulo 100 cksums
								pkt->pcksum = pkt->pcksum % 100;
								pkt->cksum = pkt->cksum % 100;
								
								// Show packet state
								if( pkt->cksum == pkt->pcksum )
								{
									pkt->state = RCVED_PACKET;
								}
								else
								{
									pkt->state = NO_PACKET;		// FAILURE
									DEBUG_PRINTLN("");
									DEBUG_PRINT("** CKSUM FAIL CK[");
									DEBUG_PRINT_DEC(pkt->pcksum);
									DEBUG_PRINT("] SB[");
									DEBUG_PRINT_DEC(pkt->cksum);
									DEBUG_PRINTLN("}");
								}
									
		case RCVED_PACKET:		// Do nothing here...
								break;
	}
	
}


/***********************************************************************
*
*  int gen_packet(unsigned char to,int len,char *data,char *buf)
*
*	INPUT: 	to		- TO address of packet
*			len		- Length of data
*			data	- Data to be sent
*			buf		- Put packet here
*
*	OUTPUT: # Bytes in generated packet
*
**********************************************************************/

static int gen_packet(unsigned char to, int len, char *data,char *buf )
{
	unsigned char part;
	int psn = 0;
	int cksum;
	int i;
	
	// (1) Put in header character
	
	buf[psn++] = MSG_HDR;
	
	// (2) Put in TO
	
	part = 0x30 + (to/10);
	buf[psn++] = part;
	cksum = part;
	part = 0x30 + (to%10);
	buf[psn++] = part;
	cksum = cksum + part;
	
	// (3) Put in from
	
	part = 0x30 + (board_address/10);
	buf[psn++] = part;
	cksum = cksum + part;
	part = 0x30 + (board_address%10);
	buf[psn++] = part;
	cksum = cksum + part;
	
	// (4) Put in data
	
	for( i=0; i<len; i++)
	{
		buf[psn++] = data[i];
		cksum = cksum + data[i];
	}
	
	// (5) Put in end marker
	
	buf[psn++] = MSG_TRLR;
	
	// (6) Put in checksum
	
	cksum = cksum % CKSUM_MODULO;
	part = 0x30 + (cksum/10);
	buf[psn++] = part;
	part = 0x30 + (cksum%10);
	buf[psn++] = part;
	buf[psn] = '\0';			// Put in END MARKER
	
	return( psn );
}
	
/***********************************************************************
*
*  void set_response( unsigned char to )	- Setup for a response
*
*	INPUT:  to	- Address of original packet
*
*	OUTPUT:	NONE
*			Mark response ready
*			Calculate time to send response, if BCAST hold off time
*
**********************************************************************/

void set_response( unsigned char to )
{
	int wait = 0;
	
	// We are in a response
	
	state.in_resp = 1;		// Do a response
	
	// If broadcast then backoff otherwise just send NOW
	
	if( to == BCAST_ADDRESS )
	{
		wait = (board_address-1) * backoff_time;
		
		DEBUG_PRINT("RESP WAIT [");
		DEBUG_PRINT(wait);
		DEBUG_PRINTLN("]");

		state.resp_time = state.now + wait;
		
		DEBUG_PRINT("NOW RESP TIME [");
		DEBUG_PRINT(state.now);
		DEBUG_PRINT(" ");
		DEBUG_PRINT(state.resp_time);
		DEBUG_PRINTLN("]");
	}
	else
	{
		state.resp_time = state.now;
	}
}

#if 0
	#pragma mark -
	#pragma mark TEST NETWORK ROUTINES
#endif

/***********************************************************************
*
*  int check_net()
*
*	INPUT: 	NONE
*
*	OUTPUT: 1-	NETWORK DATA detected
*
**********************************************************************/

static int check_net()
{
	int ch;
	int rtnval = 0;
	
	// (1) Check for data, if any, eat it
	
	while( Serial.available() > 0 )
	{
		ch = Serial.read();
		rtnval = 1;
	}
	
	return( rtnval );
}

/***********************************************************************
*
*  int get_message(int len,char *buffer)
*
*	INPUT: 	len	- Length of buffer to use	
*            buffer	- Return data here
*
*	OUTPUT:		1 = MSG received
*
**********************************************************************/

static int get_message(int len,char *buffer)
{
	int rtn;
	int i;
	int val;
	
	// (1) Get the message
	
	rtn = get_input("NEWNET MSG: ",len,buffer);
	if( rtn > 0 )
	{
		Serial.print("MESSAGE [");
		for( i=0; i<rtn; i++ )
		{
			val = 0xff & buffer[i];
			Serial.print(val,HEX);
		}
		Serial.print(" ");
		Serial.print(buffer);
		Serial.print("]");
		Serial.print(" LEN: ");
		Serial.println(rtn,DEC);
	}
	
	return( rtn );
}

#define CR	0x0D
#define LF	0x0A
#define BS	0x08
#define DEL	0x7f
//#define SP	0x20
#define BEL	0x07

/***********************************************************************
*
*  int get_input( int len,char *buffer )
*
*	INPUT:  len    - # Characters in buffer	
*                buffer	- Return data here
*
*	OUTPUT:	# characters in return buffer
*
**********************************************************************/

static int get_input(char *prompt,int len, char *buffer )
{
	int psn = 0;
	int ch;
	int flag = 1;
	int rtnval = 0;
        int i;

	// (1) Clear buffer & serial input
	
	for( i=0;i<len; i++ )
	  buffer[i] = '\0';
	 
	while( Serial.available() > 0)
	{
		ch = Serial.read();
	}

	// (2) Output prompt
        
	Serial.write(prompt);
	
	// (3) Loop forever getting input
	// Exit on buffer full
	
	while( flag )
	{
		if( Serial.available() > 0)
		{
			ch = Serial.read();
	
			
			switch( 0xff & ch )
			{
				// We have a line.....
				case  CR:
				case  LF:	// Terminate buffer
							flag = 0;
							rtnval = 1;
							buffer[psn++] = ';';
							buffer[psn] = '\0';
							Serial.write("\r\n");
							break;
				
				
				case '0':	// NUMBER, just put into buffer
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':	buffer[psn] = 0xff & ch;
							psn = psn + 1;
							break;
							
				case BS:	// Handle BS & DEL characters
				case DEL:
							if( psn > 0 )
							{
								// We have data so BS over it and then
								// remove from buffer
								
								Serial.write(BS);
								Serial.write(SP);
								Serial.write(BS);
								
								psn = psn - 1;
							}
							else
							{
								// At start of buffer just send BEL
								
								Serial.write(BEL);
							}
							break;
							
				case ';':	// Put ; in with no change
							buffer[psn] = ch & 0xDF;  // UPPER CASE
							psn = psn + 1;
							break;
							
				default:	// Just put all the letters in
							buffer[psn] = ch & 0xDF;  // UPPER CASE
							psn = psn + 1;
							break;
			}
			// Echo input character
			Serial.write(ch);
			
			// Check here for buffer overrun 
			// bail if so
			if( psn >= len )
				flag = 0;
		}
	}
	
	rtnval = psn;
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark STRING Routines
#endif

/***********************************************************************
*
*  int num_to_string( int val,int min_size,char *buffer)	- Convert 16 bit integer to 
*											  base 10 value
*	INPUT:  val		- Value to convert (- or +)
*			min_size- Minimum size of returned value (i.e. lz here if < min size)
*			buffer	- String returned here (NUL terminated, LZ suppressed)
*
*	OUTPUT:	# Bytes in result (not counting NUL)
*
**********************************************************************/

int num_to_string( int val,int min_size,char *buffer)
{
	bool lz = false;
	int buf_psn = 0;
	int digit;
	int part, divisor;
	
	// Is number negative, make positive
	
	if( val < 0 )
	{
		val = -1 * val;
		buffer[buf_psn++] = '-';	// Negative sign...
	}
		
	// If min_size < 5 then then set to search value
	
	if( min_size <= 5 && min_size > 0)
		min_size = 5 - min_size;
	else
		min_size = 6;		// No min size
		
	// Now convert max value = 0x7FFF -> 32767

	divisor = 10000;
	for( digit = 0; digit<5; digit++)
	{
		// Disable zero suppression when at min size
		// if set
		
		if( digit >= min_size )
			lz = true;				// Remove zero suppression when at min size

		part = val/divisor;
		if( lz || part > 0 )
		{
			buffer[buf_psn++] = 0x30 + part;
			lz = true;				// No more LZ suppress
		}
		val = val - part*divisor;
		divisor = divisor/10;
	}
	
	// Put in trailing NULL and return size
	
	buffer[buf_psn] = '\0';
	return buf_psn;
}
		

#if 0
	#pragma mark -
	#pragma DEBUG SUPPORT
#endif


/***********************************************************************
*
*  char *state_name( int state )	- Return state name
*
*	INPUT:  state	State #
*
*	OUTPUT:	String with state name
*
**********************************************************************/

char *state_name( int state )
{
	char *rtnval = "UNKNOWN";

#if DEBUG_ON

	switch( state )
	{
		case NO_PACKET:		rtnval = "NO_PACKET";
							break;
						
		case TO_PACKET_A:	rtnval = "TO_PACKET_A";
							break;

		case TO_PACKET_B:	rtnval = "TO_PACKET_B";
							break;
							
		case FROM_PACKET_A:	rtnval = "FROM_PACKET_A";
							break;
							
		case FROM_PACKET_B:	rtnval = "FROM_PACKET_B";
							break;
							
		case DATA_PACKET:	rtnval = "DATA_PACKET";
							break;
							
		case CKSUM_PACKET_A:	rtnval = "CKSUM_PACKET_A";
							break;
							
		case CKSUM_PACKET_B:	rtnval = "CKSUM_PACKET_B";
							break;
	
		case RCVED_PACKET:	rtnval = "RCVED_PACKET";
							break;
	}
#endif
	
	return rtnval;
}

Added Arduino/diag/fireDiag/Firediag/debug.h.



















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//**********************************************************************
/*
  DEBUG TOOLS
  
  26-May-2010 Initial Verson
   3-Jan-2011 Change to be all MACROS
  17-Jan-2011 [f38bf44b59] Add network control to debug print
*/
//**********************************************************************/

#ifndef DEBUG_F
#define DEBUG_F	1

#define DEBUG_ON		1		// Enables debug print
#define FAKE_NETWORK	1		// Enables line editing input

#ifdef DEBUG_ON
	#define DEBUG_PRINTLN(x)	digitalWrite(TX_CNTL,1);\
								Serial.println(x);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT(x)		digitalWrite(TX_CNTL,1);\
								Serial.print(x);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT_DEC(x)	digitalWrite(TX_CNTL,1);\
								Serial.print(x,DEC);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT_HEX(x)	digitalWrite(TX_CNTL,1);\
								Serial.print(x,HEX);\
								digitalWrite(TX_CNTL,0)
#else
	#define DEBUG_PRINTLN(x)
	#define DEBUG_PRINT(x)
	#define DEBUG_PRINT_DEC(x)
	#define DEBUG_PRINT_HEX(x)

#endif

#endif

Added Arduino/diag/fireDiag/Firediag/eerom.h.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//**********************************************************************
/*
  EEROM Definitions
  
 	16-Oct-2011	[1ac05cf7a5] Initial version
*/
//**********************************************************************/

#ifndef EEROM_H

// To cause an update to the EEROM data
// Increment this EROMVER
// This will cause EEROM to go to the new 
// defaults

#define EROMVER			(unsigned int)0x0

#define EROMVER_BASE	(unsigned int)0xA55A
#define ROMVER			EROMVER_BASE + EROMVER

 //******************************************
 // EEPROM DATA, 0 based ADDRESSES
 //	0-1		VERSION ID
 //	2-3		Unit ADDRESS value + compliment
 // 4-7		Firing time (4 bytes + compliment)
 // 8-9		Test mode + compliment
 //	10-11	Backoff time + compliment

// ROM VERSION DATA
#define ROMVER_LCNH		0
#define ROMVER_LCNL		1

 // ADDRESS DATA
#define ADDR_LCN    	2
#define CADDR_LCN   	3

// Firing time data
#define FIRE_TIME_MSB	4
#define FIRE_TIME_LSB	5
#define FIRE_TIME_CMSB	6
#define FIRE_TIME_CLSB	7

// Test mode data
#define TEST_MODE_LCN		8
#define CTEST_MODE_LCN		9

// Backoff time data
#define BACKOFF_TIME_LCN	10
#define BACKOFF_TIME_LCNC	11

#endif

Added Arduino/diag/fireDiag/Firediag/newnet.h.































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//**********************************************************************
/*
  NETWORK DEFS
  
  26-May-2010 Initial Verson
  
	22-Jan-2011 [f2fa5910e4] Add delay for XMIT Enable/Disable
	23-Jan-2011 [0022f592fb] Add code to check status of firing stations
	 5-Feb-2011 [1da8774a51] Fix typo on Analog channel for firing channel 5
	18-Apr-2011 Add test mode to simulate actual firing [900924d040]
	30-Apr-2011 [e3d9606749] Change backoff time to 25 ms
				Also put backoff value in to EEPROM
	 1-May-2011	[092caa26e8] Add a RESET command
    14-May-2011	[c2029557fb] Check for device presense on arm
  	16-Jul-2011 [9e81c1a523] Add adaptive firing action & read out of
  				adaptive results
  	16-Oct-2011 [230cd6fbad] Incorrect use of presence flag in FIRE_LIST
  				structure add an A/D value to store and A/D value and
  				separate from use of presence bit in structure
  	13-Nov-2011 [fd8800dae4] Add PGM command to store firing events
  				Modify sizes of things so we don't run out of RAM
*/
//**********************************************************************/

#ifndef NEWNET_H
#define NEWNET_H	1

 //***
 // LOCAL CONSTANTS
 //***
#define DEF_ADDR	 	1
#define ADDR_MIN	 	1
#define ADDR_MAX    	32


//******************************************

#define FIRE0    2  // Fire Channel 0
#define FIRE0_AD 0

#define FIRE1    3  // Fire Channel 1
#define FIRE1_AD 1
 
#define FIRE2    4  // Fire Channel 2
#define FIRE2_AD 2

#define FIRE3    5  // Fire Channel 3
#define FIRE3_AD 3

#define FIRE4    6  // Fire Channel 4
#define FIRE4_AD 4

#define FIRE5    7  // Fire Channel 5
#define FIRE5_AD 5

 
typedef struct {
                char fire;  	// Fire control channel
                char ad;    	// Fire control A/D channel
                int ch_ad;		// Current A/D value
                char pres;  	// If present (i.e. < 0x80)
                char fired; 	// If if channel fired
                int fire_time;	// Firing time (adaptive result)
} FIRE_LIST;


#define RELAY    8  // Other controls
#define LED      9

#define TX_CNTL  13

#define DEVICE_PRESENT		0x80	// Above this device connected
#define FIRE_CHANNELS		6
#define DEF_FIRE_TIME		3000	// # ms to fire channel
#define  FIRE_CHECK_TIME	300		// Check fired every 100 ms
#define  FIRE_CHECK_WAIT	1		// Wait 1 ms for before pres measure

#define MSG_HDR		':'
#define MSG_TRLR	';'
#define DATA_SEP	','
#define PHY_DATA_SIZE	32		// Max size of data xfered
#define CKSUM_MODULO	100		// For address calc
#define BCAST_ADDRESS	0		// Broadcast address
#define MIN_ADDRESS		1
#define MAX_ADDRESS		32
#define DEF_TXEN_DLY		20				// TX enable disable delay time
#define RESP_BACKOFF	25+DEF_TXEN_DLY		// ms/address

#define BLINK_TIME	200			// 200 ms blink

#define PARENT_ADDRESS	MAX_ADDRESS

// Packet commands

// Operational commands
#define ARM_CMD			'A'
#define FIRE_CMD		'F'
#define DLY_CMD			'D'
#define STATUS_CMD		'S'
#define SYNC_CMD		'Z'
#define VER_CMD			'V'
#define CH_CMD			'C'
#define PGM_CMD			'P'
	
	
// Setup commands	
#define SET_AD_CMD		'W'
#define SET_FT_CMD		'T'
#define SET_TM_CMD		'M'
#define BKOFF_CMD		'B'
#define RESET_CMD		'X'

// Readout commands
#define GET_DATA_CMD	'R'

typedef enum {
				NO_PACKET,
				TO_PACKET_A,	// Getting TO address (first byte)
				TO_PACKET_B,	// Getting TO address (second byte)
				FROM_PACKET_A,	// Getting FROM address (first byte)
				FROM_PACKET_B,	// Getting FROM address (second byte)
				DATA_PACKET,	// Getting packet data
				CKSUM_PACKET_A,	// Getting packet cksum (first byte)
				CKSUM_PACKET_B,	// Getting packet cksum (second byte)
				RCVED_PACKET,	// Packet ready to use
			} PACKET_STATE;
			

typedef struct {
					// Received packet
					PACKET_STATE state;		// State of current received packet
					unsigned char to;
					unsigned char from;
					unsigned char len;
					char data[PHY_DATA_SIZE];	// Packet data
					short cksum;				// Accmulated cksum
					short pcksum;				// Packet checksum
										
					// Chunk handler 
					
					//unsigned char chunk_len;	// Length of current chunk
					//unsigned char chunk_end;	// End of current chunk
					//unsigned chunk_ptr;	// Psn in current chunk
				} PACKET;
				
typedef struct {
					char ch;			// Fire on this channel
					long ft;			// At this time
				} EVENT_QUEUE;
				
typedef struct {
					// Node State
					
					long now;					// Current offset time
					long time_offset;			// Offset time for Z action
					char armed;

					// Blink Data
					
					char in_blink;				// 1 if in blink
					long next_blink;			// Next blink time
					
					// Delay Data
					
					char in_delay;				// 1 if in a delay mode
					char delay_channel;
					long delay_time;			// Delay time (if any)
					
					// Fire Data
					
					char in_fire;				// 1 if in fire, 
					char fire_channel;			// Channel to fire
					long fire_time;				// End of fire time
					long adaptive_time;			// Used for adaptive firing time
					
					// Response data
					
					char in_resp;				// 1 If response in process
					long resp_time;				// Send response now
					char response[32];			// Response data buffer
					
					// Event programming
					
					char in_event;				// TRUE when in an event
					int event_count;			// # Events stored
					int event_next;				// Next event to be run
					unsigned char control;		// Source of PGM events
				} NODE_STATE;
#endif

void handle_packet( char data, PACKET *pkt );

Added Arduino/diag/fireDiag/debug.h.



















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//**********************************************************************
/*
  DEBUG TOOLS
  
  26-May-2010 Initial Verson
   3-Jan-2011 Change to be all MACROS
  17-Jan-2011 [f38bf44b59] Add network control to debug print
*/
//**********************************************************************/

#ifndef DEBUG_F
#define DEBUG_F	1

#define DEBUG_ON		1		// Enables debug print
#define FAKE_NETWORK	1		// Enables line editing input

#ifdef DEBUG_ON
	#define DEBUG_PRINTLN(x)	digitalWrite(TX_CNTL,1);\
								Serial.println(x);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT(x)		digitalWrite(TX_CNTL,1);\
								Serial.print(x);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT_DEC(x)	digitalWrite(TX_CNTL,1);\
								Serial.print(x,DEC);\
								digitalWrite(TX_CNTL,0)
								
	#define DEBUG_PRINT_HEX(x)	digitalWrite(TX_CNTL,1);\
								Serial.print(x,HEX);\
								digitalWrite(TX_CNTL,0)
#else
	#define DEBUG_PRINTLN(x)
	#define DEBUG_PRINT(x)
	#define DEBUG_PRINT_DEC(x)
	#define DEBUG_PRINT_HEX(x)

#endif

#endif

Added Arduino/diag/fireDiag/eerom.h.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//**********************************************************************
/*
  EEROM Definitions
  
 	16-Oct-2011	[1ac05cf7a5] Initial version
*/
//**********************************************************************/

#ifndef EEROM_H

// To cause an update to the EEROM data
// Increment this EROMVER
// This will cause EEROM to go to the new 
// defaults

#define EROMVER			(unsigned int)0x0

#define EROMVER_BASE	(unsigned int)0xA55A
#define ROMVER			EROMVER_BASE + EROMVER

 //******************************************
 // EEPROM DATA, 0 based ADDRESSES
 //	0-1		VERSION ID
 //	2-3		Unit ADDRESS value + compliment
 // 4-7		Firing time (4 bytes + compliment)
 // 8-9		Test mode + compliment
 //	10-11	Backoff time + compliment

// ROM VERSION DATA
#define ROMVER_LCNH		0
#define ROMVER_LCNL		1

 // ADDRESS DATA
#define ADDR_LCN    	2
#define CADDR_LCN   	3

// Firing time data
#define FIRE_TIME_MSB	4
#define FIRE_TIME_LSB	5
#define FIRE_TIME_CMSB	6
#define FIRE_TIME_CLSB	7

// Test mode data
#define TEST_MODE_LCN		8
#define CTEST_MODE_LCN		9

// Backoff time data
#define BACKOFF_TIME_LCN	10
#define BACKOFF_TIME_LCNC	11

#endif

Added Arduino/diag/fireDiag/newnet.h.































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
//**********************************************************************
/*
  NETWORK DEFS
  
  26-May-2010 Initial Verson
  
	22-Jan-2011 [f2fa5910e4] Add delay for XMIT Enable/Disable
	23-Jan-2011 [0022f592fb] Add code to check status of firing stations
	 5-Feb-2011 [1da8774a51] Fix typo on Analog channel for firing channel 5
	18-Apr-2011 Add test mode to simulate actual firing [900924d040]
	30-Apr-2011 [e3d9606749] Change backoff time to 25 ms
				Also put backoff value in to EEPROM
	 1-May-2011	[092caa26e8] Add a RESET command
    14-May-2011	[c2029557fb] Check for device presense on arm
  	16-Jul-2011 [9e81c1a523] Add adaptive firing action & read out of
  				adaptive results
  	16-Oct-2011 [230cd6fbad] Incorrect use of presence flag in FIRE_LIST
  				structure add an A/D value to store and A/D value and
  				separate from use of presence bit in structure
  	13-Nov-2011 [fd8800dae4] Add PGM command to store firing events
  				Modify sizes of things so we don't run out of RAM
*/
//**********************************************************************/

#ifndef NEWNET_H
#define NEWNET_H	1

 //***
 // LOCAL CONSTANTS
 //***
#define DEF_ADDR	 	1
#define ADDR_MIN	 	1
#define ADDR_MAX    	32


//******************************************

#define FIRE0    2  // Fire Channel 0
#define FIRE0_AD 0

#define FIRE1    3  // Fire Channel 1
#define FIRE1_AD 1
 
#define FIRE2    4  // Fire Channel 2
#define FIRE2_AD 2

#define FIRE3    5  // Fire Channel 3
#define FIRE3_AD 3

#define FIRE4    6  // Fire Channel 4
#define FIRE4_AD 4

#define FIRE5    7  // Fire Channel 5
#define FIRE5_AD 5

 
typedef struct {
                char fire;  	// Fire control channel
                char ad;    	// Fire control A/D channel
                int ch_ad;		// Current A/D value
                char pres;  	// If present (i.e. < 0x80)
                char fired; 	// If if channel fired
                int fire_time;	// Firing time (adaptive result)
} FIRE_LIST;


#define RELAY    8  // Other controls
#define LED      9

#define TX_CNTL  13

#define DEVICE_PRESENT		0x80	// Above this device connected
#define FIRE_CHANNELS		6
#define DEF_FIRE_TIME		3000	// # ms to fire channel
#define  FIRE_CHECK_TIME	300		// Check fired every 100 ms
#define  FIRE_CHECK_WAIT	1		// Wait 1 ms for before pres measure

#define MSG_HDR		':'
#define MSG_TRLR	';'
#define DATA_SEP	','
#define PHY_DATA_SIZE	32		// Max size of data xfered
#define CKSUM_MODULO	100		// For address calc
#define BCAST_ADDRESS	0		// Broadcast address
#define MIN_ADDRESS		1
#define MAX_ADDRESS		32
#define DEF_TXEN_DLY		20				// TX enable disable delay time
#define RESP_BACKOFF	25+DEF_TXEN_DLY		// ms/address

#define BLINK_TIME	200			// 200 ms blink

#define PARENT_ADDRESS	MAX_ADDRESS

// Packet commands

// Operational commands
#define ARM_CMD			'A'
#define FIRE_CMD		'F'
#define DLY_CMD			'D'
#define STATUS_CMD		'S'
#define SYNC_CMD		'Z'
#define VER_CMD			'V'
#define CH_CMD			'C'
#define PGM_CMD			'P'
	
	
// Setup commands	
#define SET_AD_CMD		'W'
#define SET_FT_CMD		'T'
#define SET_TM_CMD		'M'
#define BKOFF_CMD		'B'
#define RESET_CMD		'X'

// Readout commands
#define GET_DATA_CMD	'R'

typedef enum {
				NO_PACKET,
				TO_PACKET_A,	// Getting TO address (first byte)
				TO_PACKET_B,	// Getting TO address (second byte)
				FROM_PACKET_A,	// Getting FROM address (first byte)
				FROM_PACKET_B,	// Getting FROM address (second byte)
				DATA_PACKET,	// Getting packet data
				CKSUM_PACKET_A,	// Getting packet cksum (first byte)
				CKSUM_PACKET_B,	// Getting packet cksum (second byte)
				RCVED_PACKET,	// Packet ready to use
			} PACKET_STATE;
			

typedef struct {
					// Received packet
					PACKET_STATE state;		// State of current received packet
					unsigned char to;
					unsigned char from;
					unsigned char len;
					char data[PHY_DATA_SIZE];	// Packet data
					short cksum;				// Accmulated cksum
					short pcksum;				// Packet checksum
										
					// Chunk handler 
					
					//unsigned char chunk_len;	// Length of current chunk
					//unsigned char chunk_end;	// End of current chunk
					//unsigned chunk_ptr;	// Psn in current chunk
				} PACKET;
				
typedef struct {
					char ch;			// Fire on this channel
					long ft;			// At this time
				} EVENT_QUEUE;
				
typedef struct {
					// Node State
					
					long now;					// Current offset time
					long time_offset;			// Offset time for Z action
					char armed;

					// Blink Data
					
					char in_blink;				// 1 if in blink
					long next_blink;			// Next blink time
					
					// Delay Data
					
					char in_delay;				// 1 if in a delay mode
					char delay_channel;
					long delay_time;			// Delay time (if any)
					
					// Fire Data
					
					char in_fire;				// 1 if in fire, 
					char fire_channel;			// Channel to fire
					long fire_time;				// End of fire time
					long adaptive_time;			// Used for adaptive firing time
					
					// Response data
					
					char in_resp;				// 1 If response in process
					long resp_time;				// Send response now
					char response[32];			// Response data buffer
					
					// Event programming
					
					char in_event;				// TRUE when in an event
					int event_count;			// # Events stored
					int event_next;				// Next event to be run
					unsigned char control;		// Source of PGM events
				} NODE_STATE;
#endif

void handle_packet( char data, PACKET *pkt );

Added Costs/8boards.numbers/Contents/PkgInfo.



>
1
????????

Added Costs/8boards.numbers/QuickLook/Thumbnail.jpg.

cannot compute difference between binary files

Added Costs/8boards.numbers/document-thumbnail.tiff.

cannot compute difference between binary files

Added Costs/8boards.numbers/index.xml.gz.

cannot compute difference between binary files

Added Docs/Images/AutoUnArmed.png.

cannot compute difference between binary files

Added Docs/Images/Auto_Armed.png.

cannot compute difference between binary files

Added Docs/Images/Auto_Running.png.

cannot compute difference between binary files

Added Docs/Images/Auto_Start.png.

cannot compute difference between binary files

Added Docs/Images/Firenet_board.png.

cannot compute difference between binary files

Added Docs/Images/FiringChannels.eps.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
%!PS-Adobe-3.0 EPSF-3.0
%%HiResBoundingBox: 0.000000 0.000000 398.000000 418.000000
%APL_DSC_Encoding: UTF8
%APLProducer: (Version 10.6.7 (Build 10J869) Quartz PS Context)
%%Title: (Unknown)
%%Creator: (Unknown)
%%CreationDate: (Unknown)
%%For: (Unknown)
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 0 0 398 418
%%EndComments
%%BeginProlog
%%BeginFile: cg-pdf.ps
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
%%Copyright: All Rights Reserved.
currentpacking true setpacking
/cg_md 141 dict def
cg_md begin
/L3? languagelevel 3 ge def
/bd{bind def}bind def
/ld{load def}bd
/xs{exch store}bd
/xd{exch def}bd
/cmmtx matrix def
mark
/sc/setcolor
/scs/setcolorspace
/dr/defineresource
/fr/findresource
/T/true
/F/false
/d/setdash
/w/setlinewidth
/J/setlinecap
/j/setlinejoin
/M/setmiterlimit
/i/setflat
/rc/rectclip
/rf/rectfill
/rs/rectstroke
/f/fill
/f*/eofill
/sf/selectfont
/s/show
/xS/xshow
/yS/yshow
/xyS/xyshow
/S/stroke
/m/moveto
/l/lineto
/c/curveto
/h/closepath
/n/newpath
/q/gsave
/Q/grestore
counttomark 2 idiv
{ld}repeat pop
/SC{	
    /ColorSpace fr scs
}bd
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
/cgmtx matrix def
/sdmtx{cgmtx currentmatrix pop}bd
/CM {cgmtx setmatrix}bd		
/cm {cmmtx astore CM concat}bd	
/W{clip newpath}bd
/W*{eoclip newpath}bd
statusdict begin product end dup (HP) anchorsearch{
    pop pop pop	
    true
}{
    pop	
   (hp) anchorsearch{
	pop pop true
    }{
	pop false
    }ifelse
}ifelse
{	
    { 
	{ 
	    pop pop 
	    (0)dup 0 4 -1 roll put
	    F charpath
	}cshow
    }
}{
    {F charpath}
}ifelse
/cply exch bd
/cps {cply stroke}bd
/pgsave 0 def
/bp{/pgsave save store}bd
/ep{pgsave restore showpage}def		
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
/scrdict 10 dict def
/scrmtx matrix def
/patarray 0 def
/createpat{patarray 3 1 roll put}bd
/makepat{
scrmtx astore pop
gsave
initgraphics
CM 
patarray exch get
scrmtx
makepattern
grestore
setpattern
}bd
/cg_BeginEPSF{
    userdict save/cg_b4_Inc_state exch put
    userdict/cg_endepsf/cg_EndEPSF load put
    count userdict/cg_op_count 3 -1 roll put 
    countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
    3 sub{end}repeat
    /showpage {} def
    0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
    10 setmiterlimit [] 0 setdash newpath
    false setstrokeadjust false setoverprint	
}bd
/cg_EndEPSF{
  countdictstack 3 sub { end } repeat
  cg_dict_array 3 1 index length 3 sub getinterval
  {begin}forall
  count userdict/cg_op_count get sub{pop}repeat
  userdict/cg_b4_Inc_state get restore
  F setpacking
}bd
/cg_biproc{currentfile/RunLengthDecode filter}bd
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
/ImageDataSource 0 def
L3?{
    /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
    /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
}{
    /ImageBandMask 0 def
    /ImageBandData 0 def
    /cg_mibiproc{
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
    /cg_miaiproc{	
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
	    dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
}ifelse
/imsave 0 def
/BI{save/imsave xd mark}bd
/EI{imsave restore}bd
/ID{
counttomark 2 idiv
dup 2 add	
dict begin
{def} repeat
pop		
/ImageType 1 def
/ImageMatrix[Width 0 0 Height neg 0 Height]def
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
L3?{
    dup/MaskedImage known
    { 
	pop
	<<
	    /ImageType 3
	    /InterleaveType 2
	    /DataDict currentdict
	    /MaskDict
	    <<  /ImageType 1
		/Width Width
		/Height Height
		/ImageMatrix ImageMatrix
		/BitsPerComponent 1
		/Decode [0 1]
		currentdict/Interpolate known
		{/Interpolate Interpolate}if
	    >>
	>>
    }if
}if
exch
{imagemask}{image}ifelse	
end	
}bd
/cguidfix{statusdict begin mark version end
{cvr}stopped{cleartomark 0}{exch pop}ifelse
2012 lt{dup findfont dup length dict begin
{1 index/FID ne 2 index/UniqueID ne and
{def} {pop pop} ifelse}forall
currentdict end definefont pop
}{pop}ifelse
}bd
/t_array 0 def
/t_i 0 def
/t_c 1 string def
/x_proc{ 
    exch t_array t_i get add exch moveto
    /t_i t_i 1 add store
}bd
/y_proc{ 
    t_array t_i get add moveto
    /t_i t_i 1 add store
}bd
/xy_proc{
        
	t_array t_i 2 copy 1 add get 3 1 roll get 
	4 -1 roll add 3 1 roll add moveto
	/t_i t_i 2 add store
}bd
/sop 0 def		
/cp_proc/x_proc ld 	
/base_charpath		
{
    /t_array xs
    /t_i 0 def
    { 
	t_c 0 3 -1 roll put
        currentpoint
	t_c cply sop
        cp_proc
    }forall
    /t_array 0 def
}bd
/sop/stroke ld		
/nop{}def
/xsp/base_charpath ld
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
/refnt{ 
findfont dup length dict copy dup
/Encoding 4 -1 roll put 
definefont pop
}bd
/renmfont{ 
findfont dup length dict copy definefont pop
}bd
L3? dup dup{save exch}if
/Range 0 def
/DataSource 0 def
/val 0 def
/nRange 0 def
/mulRange 0 def
/d0 0 def
/r0 0 def
/di 0 def
/ri 0 def
/a0 0 def
/a1 0 def
/r1 0 def
/r2 0 def
/dx 0 def
/Nsteps 0 def
/sh3tp 0 def
/ymax 0 def
/ymin 0 def
/xmax 0 def
/xmin 0 def
/setupFunEval 
{
    begin
	/nRange Range length 2 idiv store
	/mulRange   
		    
	[ 
	    0 1 nRange 1 sub
	    { 
		    2 mul/nDim2 xd		
		    Range nDim2 get		
		    Range nDim2 1 add get	
		    1 index sub			
						
		    255 div			
		    exch			
	    }for
	]store
    end
}bd
/FunEval 
{
    begin
	
	nRange mul /val xd	
				
	0 1 nRange 1 sub
	{
	    dup 2 mul/nDim2 xd 
	    val	
	    add DataSource exch get 
	    mulRange nDim2 get mul 	
	    mulRange nDim2 1 add get 
	    add 
	}for	
    end
}bd
/max 
{
	2 copy lt
	{exch pop}{pop}ifelse
}bd
/sh2
{	
	/Coords load aload pop 	
	3 index 3 index translate	
					
	3 -1 roll sub	
	3 1 roll exch 	
	sub				
	2 copy
	dup mul exch dup mul add sqrt	
	dup
	scale  
	atan	
	
	rotate		
	
	/Function load setupFunEval	
	
	
	clippath {pathbbox}stopped {0 0 0 0}if newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	currentdict/Extend known
	{
		/Extend load 0 get
		{	
			0/Function load FunEval sc	
			xmin ymin xmin abs ymax ymin sub rectfill
		}if
	}if
	
	/Nsteps/Function load/Size get 0 get 1 sub store
	/dx 1 Nsteps div store
	gsave
		/di ymax ymin sub store
		/Function load
		
		0 1 Nsteps
		{
			1 index FunEval sc
			0 ymin dx di rectfill
			dx 0 translate
		}for
		pop	
	grestore	
	currentdict/Extend known
	{
		/Extend load 1 get
		{	
			Nsteps/Function load FunEval sc	
			1 ymin xmax 1 sub abs ymax ymin sub rectfill
		}if
	}if
}bd
/shp	
{	
	4 copy
	
	dup 0 gt{
		0 exch a1 a0 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a0 a1 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
	
	dup 0 gt{
		0 exch a0 a1 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a1 a0 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
}bd
/calcmaxs
{	
	
	xmin dup mul ymin dup mul add sqrt		
	xmax dup mul ymin dup mul add sqrt		
	xmin dup mul ymax dup mul add sqrt		
	xmax dup mul ymax dup mul add sqrt		
	max max max								
}bd
/sh3
{	
	/Coords load aload pop 	
	5 index 5 index translate	
	3 -1 roll 6 -1 roll sub		
	3 -1 roll 5 -1 roll sub		
	2 copy dup mul exch dup mul add sqrt
	/dx xs						
	2 copy 0 ne exch 0 ne or
	{
		
		exch atan rotate	
	}{
		pop pop
	}ifelse
	
	/r2 xs
	/r1 xs
	/Function load 
	dup/Size get 0 get 1 sub	
	/Nsteps xs		
	setupFunEval		
	
	
	
	
	
	dx r2 add r1 lt{
		
		0 
	}{
		dx r1 add r2 le
		{ 
			1
		}{ 
			r1 r2 eq
			{	
				2
			}{ 
				3
			}ifelse		
		}ifelse
	}ifelse
	/sh3tp xs		
	clippath {pathbbox}stopped {0 0 0 0}if 
	newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	
	dx dup mul r2 r1 sub dup mul sub dup 0 gt
	{
		sqrt r2 r1 sub atan
		/a0 exch 180 exch sub store 
		/a1 a0 neg store 
	}{
		pop
		/a0 0 store
		/a1 360 store		
	}ifelse		
	currentdict/Extend known
	{
		/Extend load 0 get r1 0 gt and	
		{	
			0/Function load FunEval sc	
			
			
			
			
			{ 
				{	
					dx 0 r1 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				}
				{	
					r1 0 gt{0 0 r1 0 360 arc fill}if
				}
				{	
					
					
				
					
					0 r1 xmin abs r1 add neg r1 shp
				}
				{	
					
				
					r2 r1 gt{	
						
						0 r1
						r1 neg r2 r1 sub div dx mul	
						0	
						shp	
					}{	
						
						
						
						0 r1 calcmaxs	
						dup
						
						r2 add dx mul dx r1 r2 sub sub div
						neg				
						exch 1 index	
						abs exch sub
						shp
					}ifelse
				} 
			}sh3tp get exec	
		}if
	}if
	
	/d0 0 store
	/r0 r1 store
	/di dx Nsteps div store
	/ri r2 r1 sub Nsteps div store 
	/Function load 
	0 1 Nsteps
	{	
		1 index FunEval sc
		d0 di add r0 ri add d0 r0 shp
		{
		
		d0 0 r0 a1 a0 arc
		d0 di add 0 r0 ri add a0 a1 arcn
		fill
		
		
		d0 0 r0 a0 a1 arc
		d0 di add 0 r0 ri add a1 a0 arcn
		fill
		}pop
		
		
		/d0 d0 di add store
		/r0 r0 ri add store
	}for
	pop	
	
	currentdict/Extend known
	{
		/Extend load 1 get r2 0 gt and	
		{	
			Nsteps/Function load FunEval sc	
			
			
			
			
			{ 
				{
					dx 0 r2 0 360 arc fill
				} 
				{
					dx 0 r2 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				} 
				{	
					
					
					xmax abs r1 add r1 dx r1 shp
				}	
				{	
			
					r2 r1 gt{
						
						
						
						calcmaxs dup	
						
						r1 add dx mul dx r2 r1 sub sub div	
						exch 1 index	
						exch sub
						dx r2
						shp
					}{	
						
						r1 neg r2 r1 sub div dx mul	
						0		
						dx 		
						r2		
						shp
					}ifelse
				}
			}			
			sh3tp get exec	
		}if
	}if
}bd
/sh		
{	
	begin
		/ShadingType load dup dup 2 eq exch 3 eq or
		{	
			gsave
				newpath
				/ColorSpace load scs
				currentdict/BBox known
				{
					/BBox load aload pop	
					2 index sub				
					3 index					
					3 -1 roll exch sub 
					exch rectclip
				}if
				2 eq
				{sh2}{sh3}ifelse
			grestore
		}{
			
			pop 
			(DEBUG: shading type unimplemented\n)print flush
		}ifelse
	end
}bd
{restore}if not dup{save exch}if
	L3?{	
		/sh/shfill ld
		/csq/clipsave ld
		/csQ/cliprestore ld
	}if
{restore}if
end
setpacking
%%EndFile
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 0 0 398 418
%%BeginPageSetup
cg_md begin
bp
sdmtx
%RBIBeginFontSubset: LucidaGrande
%!FontType1-1.0: LucidaGrande 1.0000.6.0040
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 14 dict begin/FontName /LucidaGrande def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /C put
 dup 34 /one put
 dup 35 /two put
 dup 36 /three put
 dup 37 /four put
 dup 38 /five put
 dup 39 /six put
 dup 40 /N put
 dup 41 /e put
 dup 42 /w put
 dup 43 /space put
 dup 44 /B put
 dup 45 /o put
 dup 46 /x put
 dup 47 /s put
 dup 48 /O put
 dup 49 /l put
 dup 50 /d put
 dup 51 /parenleft put
 dup 52 /numbersign put
 dup 53 /parenright put
 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -2186 1 index div -1509 2 index div 3361 3 index div 2381 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C000006B66670676D000000000000075400000D33676C79660000000000001488000016A8686561640000000000002B3000000036686865610000000000002B6800000024686D74780000000000002B8C000000586C6F63610000000000002BE40000002E6D6178700000000000002C1400000020707265700000000000002C3400000CAF062B0019000005C80025000005C800250000000000000000000000000000043E001800000000FFDB00000000FFE800000000FFDB0000FE75FFE8000000000000FED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000080000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5006F000CFF3BFF91FFF400BF00680014FF41FF98FFEC00000000000000000000000000000000000000000082FF7E00DF00D200C900B400AD009B00DE00D200C500BE00B900AB00E300D200C600B900AD00950062000000A4009D0085000000AA00A10094007200AD00A100940085000000C5000000000000000000000000000000000000012800000000000000000000000000F700F700970141004A00F7000000000000000000000000000000000094009400940000000000000000000000000000000000000000000000000000000000000000000000000000000000E6FF1A00000000000000000000000000000000000000DEFF22007C007C027502E400750075009A009400AC00A0000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A0001900000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B00000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B0000006F0073000000000000000000B9008C010A007E00C50031004F009A004200000000000000000000000000000000000000000000012800F700A00063009400820082009700C600B300B3007C007B009100000000000000000000000006440000000004A00019000000000800043E0018000004000000000000000534000000000000FFE70000FF780000000000C500940000FED80000000000E100760063003C002D001E000FFF1FFF3BFF48FF65FF79FF9DFFBD00DE00B900AD00A600DE00D200C500BF00B900A900910197007C0062005C005602CC01ED0197007C006F00620056004A011D010D009E00940035000000000000000000000000000005C8002500000503
 00000000000008000000000000000400000000000000047B000000000000FFDB00000000FFE70000000000000000FF3B00000000000000000192011700F700C800C300B800AD00A6009C0092008A0080007B00740068005A0050001E003A00000192011700F700E500D200C500B900AD008A0080007B00740068005E0054004A000000000141003E00DE00DE00000000000000000000000005D500190000056600000000000008000000000000000400000000000000043E001800C503C200DE00000000FFE70000000000000000FE00000000000000000000CD00C500AD00A100940088007C0075006F0063003100F700C600B900A0006300C500B300A10088007C0075006F00630056003100F700C600B900C600940082006F0063003E003200190000FF3AFF7EFF9DFFCE0057006F02B3012801830088008800000000000000000000000000000000000000AC008800C501ED006201BC001800DE013E000000000000000000000000000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190000000000000000000000000000007C00AC00C500960000000000000000000000000085005D006500000000000000000000000000000000000000000000000000000000080000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000005ED01B0009400D200B600AC007B007B007C00000000000000000000000000000000000000B904A000C50063007A005100410087014100DE01280068009D0064007500D2012000DE00D100B40000000000000000000000000000000000000000006100AC00D0006F006F036603660000000000000000000000000000000000000000000000000000004A004A004A000000000000000000000000000000000000000005ED00000000000008000104005C000004000000000000000000000000000000FFDB000000000000000000000000000000000000000000000000003E050300D8011200AD009300D800F700AD00B700790067050300D800920000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190082006E002A002A002A002A000040405249483C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C0118B0184358456AB0194360B00C2344231020B00C4EF04D2FB000121B21231120332F592D2C0118B0184358B0052BB000134BB0145058B100403859B0062B1B21231120332F592D2C0118B01843584EB0032510F221B000124D1B2045B00425B00425234A6164B028
 5258212310D61BB0032510F221B0001259592D2CB01A435821211BB00225B0022549B00325B003254A612064B01050582121211BB00325B0032549B0005058B0005058B8FFE238211BB0003821591BB0005258B01E38211BB0003821595959592D2C0118B0184358B0052BB000134BB0145058B90000FFC03859B0062B1B21231120332F592D2C4E018A10B10C194344B00014B1000CE2B00015B90000FFF03800B0003CB0282BB0022510B0003C2D2C0118B0002FB00114F2B00113B001154DB000122D2C0118B0184358B0052BB00013B90000FFE038B0062B1B21231120332F592D2C0118B018435845646A23456469B01943646060B00C2344231020B00CF02FB000121B2121208A208A525811331B212159592D2C014BB0C85158B10B0A432343650A592D2C004BB0C8515800B10A0B4323430B592D2C00B00C2370B1010C3E01B00C2370B1020C453AB10200080D2D2CB0122BB0022545B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C60B0022523442121212D2CB000B0122B2121212D2CB000B0132B2121212D2C014BB0C85158B00643B00743650A592D2C2069B04061B0008B20B12CC08A8CB8100062602B0C642364615C58B00361592D2CB1000325456854B01C4B505A58B0032545B0032545606820B004252344B0042523441BB00325204568208A2344B00325456860B003252344592D2CB00325204568208A2344B003254564686560B00425B0016023442D2CB00943588721C01BB01243588745B0112BB00D2344B00D7AE41B038A45186920B00D23448A8A8720B0A05158B0112BB00D2344B00D7AE41B21B00D7AE4595959182D2C208A4523456860442D2C456A422D2C01182F2D2C0118B0184358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB0194360B00C2344218A10B00CF6211B21212121592D2C01B0184358B0022545B002254564606AB00325456A6120B00425456A208A8B65B0042523448CB00325234421211B20456A4420456A44592D2C012045B00055B018435A584568234569B0408B6120B080626A208A236120B003258B65B0042523448CB00325234421211B2121B0192B592D2C018A8A45642345646164422D2CB00425B00425B0192BB0184358B00425B00425B00325B01B2B01B0022543B04054B0022543B000545A58B003252045B040614459B0022543B00054B0022543B040545A58B004252045B04060445959212121212D2CB0032520B0072587052E23208AB00425B00725B0142B1021C4212D2CC02D2C4B525845441B2121592D2CB00243583DED181BED592D2C4B505845441B2121592D2C01184B52588A2FED1B212121592D2C4B53234B515A58B003254568B003254568B003256054582121211BB00225456860B003252344
 2121591B212121592D2CB00243583DCD181BCD592D2C462346608A8A462320468A608A61B8FF8062232010238AB10C0C8A70456020B0005058B00161B8FFBA8B1BB0468C59B0106068013A2D2C2045B0032546524BB013515B58B0022546206861B00325B003253F2321381B2111592D2C2045B00325465058B0022546206861B00325B003253F2321381B2111592D2C004BB0C8515800B00743B006430B592D2C8A10EC2D2CB00C4358211B2046B0005258B8FFF0381BB0103859592D2C20B0005558B8100063B003254564B00325456461B0005358B0021BB04061B00359254569535845441B2121591B21B0022545B00225456164B028515845441B212159592D2C21210C6423648BB84000622D2C21B08051580C6423648BB82000621BB200402F2B59B002602D2C21B0C051580C6423648BB81555621BB200802F2B59B002602D2C0C6423648BB84000626023212D2C184B5358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB00C2344218A10B00CF6211B218A11231220392F592D2CB00225B002254964B0C05458B8FFF838B008381B2121592D2CB0134358031B02592D2CB0134358021B03592D2CB00A2B2310203CB0172B2D2CB00225B8FFF038B0282B8A102320D023B0102BB0054358C01B3C59201011B00012012D2C4B53234B515A58381B2121592D2C01B0022510D023C901B00113B0001410B0013CB001162D2C01B00013B001B0032549B0031738B001132D2C4B53234B515A5820458A60441B2121592D2C184B5358B00425B004254964B00325B00325496468B0408B6120B080626AB00225B00225618CB00C234421B004251023B00CF61BB00425B0042511122320392F59CC21212D2C0118B0184358B0052546234564611B21B00425B004254A59B00E23442310B00EEC2310B00EEC2D2CB01B435820B0016045B000515820B0016020452068B0005558B0206044211B212121591B20B0016020452068B0005558B8FFE06044B01C4B50582045B02060441B21591B21212159591B21592D2C4B53234B515A58381B2121592D2C4B5458381B2121592D2C4B52587D1B7A592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B00326
 5358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592DB8005D2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8005E2C2020456944B001602DB8005F2CB8005E2A212DB800602C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800612C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800622C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800632C2020456944B001602020457D691844B001602DB800642CB800632A2DB800652C4B20B003265358B0801BB040598A8A20B003265358B0022621B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B80003265358B0032545B8014050582321B8014023211BB003254523212321591B2159442DB800662C4B535845441B2121592DB800672C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800682C2020456944B001602DB800692CB800682A212DB8006A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8006B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8006C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8006D2C2020456944B001602020457D691844B001602DB8006E2CB8006D2A2DB8006F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800702C4B535845441B2121592DB800712C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800722C2020456944B001602DB800732CB800722A212DB800742C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800752C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800762C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800772C2020456944B001602020457D6918
 44B001602DB800782CB800772A2DB800792C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8007A2C4B535845441B2121592D0000020100000005000500000300070014B706020400060204002FCDD4CD002FCDD4CD3130211121112521112101000400FC400380FC800500FB004004800000000002000F0000050005C8001B001F00F04098E80401E81D01E71201B71F010C1E1D19180D180F121316170E1707171717026717A7170248189818B818F818040D1818E1170E1417170E0B1F1C1A1B0A1B080504010009009800F80002981B01071B171B271B03471B671BA71B030A1B1BE10009140000090C0F121E0406E2070D09031316191D0403E240021800170E1410090000100002090006020F105F10020D0321106A02200267022B2B015F5E5D1810C6D65E5DC410C4D6C4002F33D61A4DED17393F33D6ED173931308705102B7D10C4015D715D5D1087C4C4C4C41087C4C4C4C48718102B7D10C4015D5D711087C4C4C4C41087C4C4C4C4015D5D5D5D3313213721132137211333032113330321072103210721032313210313211321CB6FFED519013157FEBC190149707F6F01076F806F012B18FECE57014419FEB76F806FFEF96F8E010757FEF801BC7C01597B01BCFE4401BCFE447BFEA77CFE4401BCFE44023801590001007BFED80250062B000D00C54094040D140D440D540D04420252020204021402020409140944095409044206520602040614060209650901590889089908C908D9080508100C0F48690D01160D260D560DC60DD60DF60D060600360086009600D600050C890C01890A01C70C01060201B80201A50B018802C802020606010F036F069F06AF060300098009A009031106009C0120089C070008000B8504400E0466022B011A18104DEDC432003FED3FED3130015F5E5D5D5F5E5D5D5D5D5D5D5D5D005E5D5D5D2B5D5D015E5D5D5D5D5D5D05152602111012371506021110120250D8FDFDD8937D7DA0889301F9011E011D01F99388A0FE90FEEFFEEEFE900001004AFED8021F062B000D0065B800532BBA0004000B00562BB8000410410500DA000B00EA000B00025D411B0009000B0019000B0029000B0039000B0049000B0059000B0069000B0079000B0089000B0099000B00A9000B00B9000B00C9000B000D5DB8000FDC00B800072FB800012F303117153612111002271516121110024AD8FDFDD8937D7DA0889301F9011E011D01F99388A0FE90FEEFFEEEFE9000000101340000044A05ED00090058403089049904B904C9040404100B114803040152049B050614050605060707019B00
 08A8078B0401A8200201000210020202B8FFC0B613184802020B0A1112392F2B5D71ED32FDED002FED323FDD3130872B2B10C4002B712135211105352511211501340128FED801EE01289404904A987BFAA79400000100AA0000042205ED001900DD409E370F010A121A1202FA1201F80D01F71001C810018A13BA13DA13EA1304270A01F80A010A081316487807013B084B08020820171A4808132813022C08010C151C150236024602020A02010816181602D816E816020A0501CA05FA05028605014710015710010C9B0F0B1F0B020B0B099B11060E070117990018068A111789400B000F111F11020F11CF11DF11EF11040D031B11D5020F000119031A007B022B015F5E5D2B015F5E5D711810C41A4DED10EDC4002FED323F3939FDD65E5DED3130015D715D5D715D717171715D005D2B5D5D2B5D715D5D5D5D5D717133353625373635342623220735363332161514060F0106072115AA56010671DA95829AD1C5C2D0FC7FAD4CED250283ADC9ED65C5C27C8E77AE5DE0B985CE9341C9B7AD0000000100D0FFDB042F05ED001E0115401E250C01761201391E491E591E03071B01E717010910391002E910F9100202B8FFF8401A171B48A818B818026A0E7A0E8A0E0345055505650503B9190119B8FFD0400A0C114804151415020915B8FFE040811215486A07011C0E2C0E5C0E6C0E040C041C042C04030C075C076C0703380D480D02F80D011C08151848A91401031F064F065F06030F06CF06020B0618089C0B40141D0B9C3030129B110F9B1407009B30010101039B1D192F187F188F18030D8B1640151848161109068A09111618044F1A011A000010000260007000900003002F5D71D45D1739ED2F2F2F2BED5D003FFDD65DED3FFDD6ED2B001A18104DED393130015F5E5D715F5D2B5D715D5D5D005D2B5E5D2B5D5D5D5D2B5D715D7171715D37351633323635102123353720113421220735363320111005041114042322D0D47A8DB1FE4B4E45019AFEF294B2AFA501C6FECB0166FEECF1890BB854A583013885010121E353AC3BFEA9FEFB6F53FECBD1EE0000000200690000048205C8000A000D007F40542A0DFA0D020D1812164807036703028703E703020803014A0B01070B270B370B03070B370B02A604010D0B01520B8E03041403030409060C9A9001010101000406000C8C04018C08060009500902090F100301032F5D10D65D32CDED32ED002F3F12392F5DED393931308705102B042B10C4015D5D7171005D5D712B5D21112135013311331523110121110303FD66029AB9C6C6FD6E01E601A3950390FC7CA1FE5D02440292000100F9FFDB041C05C8001600E54039030501670501370247025702032908690802171001B710013813019713010E078E07020B09141914020806180602B514C51402791489140213B8FFE8
 40560C0F482611361102061116112611030C0A089B0F0F030E990B06009B01400D114801039B15190E8D0B0C0C0B01068A12405012010F121F126F12030F128F12CF12DF12EF12050D031812D50200017001800103120301B8FFC0B31D224801B8FFC0B60C10481701D4022B012B2B5F5E5D2B015F5E5D71711A18104DED1239392F2FED003FFDD62BED3FED12392FFDC63130015E5D712B5D5D71005D5E5D5D715D717171715D1735163332363510212207112115211120001514042122F9938592A7FE35343902EDFDC0011D0140FEDDFEFE7006B03BAC97014D0702D0ACFE7AFEFAE8D8F5000000020089FFDB047C05EE0014002000EC403909121912291203F72001EB17FB1702F10A015A076A0702480901380948095809980904CA1C01361CB61C02260101270D770D870D0304030103B8FFE0401B0C0F480A141A145A146A140409690C015700010407140794070304B8FFE8404D0C0F48060616062606038C1D01161D01090A010C0008189B300240020202020E08109B0F11010D11139B0E071E9B081910400E114810100B158B051B008A0B40000501110322057C02210B7B022B2B015F5E5D1A18104DFDC510ED12392F2B003FED3FFDD65E5DED1112392F5DED12393130015E5D5D5D5D2B5D5D5D005E5D2B5D5D5D5D5D5D715D5D5D5D7101363332121514002322001110002132171526232001342623220615141633323601608DD6C2F7FEEBD5F5FEEC013D012084C6D185FE86025697867DB4AB8D7F9702FFB7FEFFC9E7FED6018A015E018101AA38AC50FC66A8C0A876BAE1B70000000300BF0000044505C8000C0016001E00FD4032E60801491401E91401091C391C491C591C04491C591CA91CF91C046D1C7D1C8D1C03351A451A027D138D13021330010D4811B8FFD0402C0E11483906019906010C0A9C0AAC0A03B604C6040203041304230403090C1C4C1C020C104C10020D9703010AB8FFF840511A1D480C0B011103400B500B020F131F1302140507169317400100179330301E9201030D92003A074A078A0703070D1B7E05127D090F091F09029F0901170D7E00400F094F0902090320096F021F006B022B2B015F5E5D1A18104DED325D7110EDD4ED12395D002FED3FED2B001A18104DED393130015F5E5D5D5F5E5D2B5D5E5D5D005E5D5D5D5D712B2B5D5D5D5D715D715D3311213216151005041114062327333237363534262B013533323635342123BF0180DEEDFED0016BF0E2E42BE74482ECB13B43A8B9FEAE5205C8A89EFEF3726FFEDEB4BE9D1D379584AF859083DA00000000010068FFDB051705ED001500DB4039E71001091501E91501050C01090C01E90C01D70701280A380A02780A880A02250F01050F450FA50FC50FE50F05390D01090D490DC90D030908B8FFF040450D11480605460556056605047804
 E804024604014A025A026A0203B7010109010109014901C90103270D01B80401B505E5050208920F091F092F09030A090B920604149113B8FFC0401B090C48131191001309130F13010F030E7D034017136F0216036C022B2B011A18104DED5F5E5D10C6003FFDD62BED3FFDD65E5DED3130015D5D71005D715D5D5D5D5D2B5E5D715D715D715D5D71715D715D052000111000213205152423220011100033323715060339FEA7FE88017F015CC7010BFED0A5F1FEF8011AF4D2F0DB25019501730172019841C569FEBAFED7FEE5FEB981B47100000100BF0000052A05C80009006E401E460301031F03010002300202102007010F070107080D1048000201120602B8FFF840240C0F480301520807087F0203140203020300070208038006088000400B066E020A006B022B2B011A18104DED10ED113939002F3F3130872B872BC4012B5F5E5D2B5D5D005E5D5D5F5D33113301113311230111BFCE02E9B4CDFD1605C8FB890477FA380477FB89000000020068FFDB05D005ED000B0017010840C6240C012B12018602F60202F60A01C90A01180401F80401270401C70401190801F90801260801C6080136160106164616E616033A14010A144A14EA14034910E91002460EE60E02170B470B02C70B01290B01190B590B690B790BD90B05480701C807011607011607560766077607D60705480501C805011605011605560566057605D605051701012901011901590169017901D901050C0D010317010313010C110109032F0F012015010008011A06129206040C9200130F7D09157D034019096F0218036C022B2B011A18104DED10ED003FED3FED3130015F5E5D5D5D5F5E5D5D5D5D005D71715D715D715D715D715D715D715D5D5D715D715D715D715D715D715D5D5D71710520001110002120001110002532121110022322021110120313FECCFE890179013B013A017AFE86FEC0E3F8F9DCDDF8F62501AB015F016101A7FE5AFEA0FE99FE5B9D0147012A01210146FEB9FEDDFEDEFEB4000002006FFFE70444062B000E001700FD4079390201051601E51601F91301D90F01D40F010A071A07028A07DA0702BB0BCB0B02A40BB40B02CA10FA1002B510C51002BB01019201B201026617010A173A17020B6B048B049B040304200D1048090801B908E908F90803160826083608B608040414010B12010B12AB12BB12EB12040C8C0AAC0A02A60A010AB8FFF0403E0C0F48930801037F16016F027F02FF02030F051F052F057F05DF05050D050C000F0B11970910001701159503160F0B00850E13840640190E6802180666022B2B011A18104DED10ED3232003FED32322F3FED32323F3130015F5E5D5D5D5F5D002B5D5D5E5D715D5D5D712B5D5E5D715D5D5D5D5D5D5D715D5D5D5D71712135062322023510123332171133110326232011103332
 37037E78F2C4E1FFD0C17FC6C69989FEE5FCA49DCCE5011EF8010F014A940269F9D5033B87FE4FFE83B300000002006FFFE703E604570011001600EA405737100101101B1F482404340402C404E40402050335034503550304A503F5030259036903023A0601CA06EA06025506F50602450701450755076507031316231602D316F316023A1601120E220E320EB20EC20EE20E060EB8FFD0400A1A1E480509850902090DB8FFE040441A1F480C14012C145C14EC14FC140403740A012F0A01400450046004030F04010E0512970D0D02159708100097110F970216120D1385110B0D850540180B6902170566022B2B011A18104DED10C6ED1139003FFDD6ED3FED11392FED3130015F5E5D5D5D5D5F5D712B005E5D2B5D5D5D715D715D5D715D5D715D712B71250623220035340033321211072112213237012110232203E1C68DF0FED1010BD0C5D701FD532B01507BB3FD6001DFE2E3233C013FFEF7013CFEE8FEFE3DFE7D4201D5012F00000100C50000018A062B0003001B400D010000038500400405008530302B011A18104DED002F3F313033113311C5C5062BF9D5000002006FFFE7047B0456000B001300D040981A0E2A0E021813281302070C01270701170527050218012801021801280102280B880B0208109810020C0D0A1D0A020D0A1D0A2D0A03020812080202081208220803020412042204030D5502010D021D02020E0A0B010A07010505010501010C0D010313010311010C0F011603100A200A0210082008021F042F04020012011706109706100C9700160E84091284034015096902140366022B2B011A18104DED10ED003FED3FED3130015F5E5D5D5D5D5F5E5D5D5D5D5D5D5D5D005E5D5D5E5D5D715D715E5D5D5D715D5D5D71710522001110003332001110002720111021201110026EE9FEEA0117EFEF0117FEE8F20139FECBFECC190135010301060131FECFFEFCFEF6FED09401A601A1FE5DFE5C00000001009DFFE7037704560020010140867C0B8C0B02660401281701E61B01F81B01371957199719034A0A011A0A6A0A7A0A8A0AFA0A054C0C5C0C7C0C032C0C7C0C8C0C030A201A2002331C01031C131C231C631C931C05050F150F0209590401A80C01A90EC90ED90E0320281D2048C90B01B620019920010C0CBC0C020A13970014101420140312141697080D181E04001010029703B8FFC040350B1148030597001618860D14400F144814140D0208851E404F1E011E401A2248000240029002A002B002051403221E6802210265022B2B015F5E5D2B5D1A18104DED1239392F2B2FED003FFDD62BED3F121739FDD65E5DED3130015E5D5D5D5D2B5D5D00715E5D5D715D5D715D715D5D5D71715D052227351633323635342F012635343633321F011526232215141F011E0115140601E587C1C18F55709D73FFC9
 AF5B8629A561BE905FA186E2193FB5605C456542316AC78EA31908A4318A593D284497718FB800000001000C0000061C043E000C018C404A7A0B8A0B02340BF40B02F506010B061B063B06031403010B031B033B0303080101F80101E60101E807012808019808E8080207080177088708F70803280501170501D705E705F7050305B8FFF840DA0C104838045804F8040337020127029702A702C70204170A01090A190A390A590A890AD90AE90AF90A08060C160C360C560C04090019003900E900F90005A8090107092709021709370947095709B709C709E7090707090809880607140606070A050605870B0A140B0B0A040C0B0C880304140303040002030287010014010002040507080B06010F0C0A0903060500130C003F0301100301030120090A1F062F06020640242A4806401E214806074008012008400870088008A008C008065008C00802080504200B700B800BA00B04500B010B0B02700101012F5D3333192F5D713333C45D71723218CD2B2B7132321A1910CD5D71323200183F17333F173387052B877DC48718102B877DC48718102B877DC48718102B877DC43130015D715D5D5D5D715D715D2B5D71715D715D715D5D5D71005D715D5D5D5D210133130133130133012303010143FEC9C1EE0101C5E10111A9FE9EC6E6FEFC043EFCB70349FCB70349FBC20349FCB70000000100580000048B043E000B00FB408FB907E907027A04EA0402B703019506B50602950501B7010178019801026A09BA0902B608016A08AA08026704A704B70403670B010607160746077607A607D607060A0707080A0A090B060B04040301010200050501520B060B880005140000050A0A0B010100020902070706040405030803015209020987080314080803020F00090308020B050006080200081000B8FFF0401200080116030D0869020000010A030C0066022B015F5E5D2B015F5E5D38381810C610C611393911123939002F3F31308705104D2B872BC48708C008C0108708C008C0870518102B872BC48708C008C0108708C008C0015E5D5D5D5D5D5D5D5D5D5D5D005D5D33090133090133090123090158019DFE6FEA013D011FC0FE880199EAFEB9FEC40231020DFE5E01A2FDD9FDE901AEFE5200000000010000000601060F596BAF5F0F3CF5011B080000000000B47FC3BC00000000C005BDE3F776FA1B0D21094D0000000900010000000000000001000007BCFE5000000D1EF776F7430D210001000000000000000000000000000000160600010002880000050F000F029A007B029A004A050F0134050F00AA050F00D0050F0069050F00F9050F0089049A00BF0589006805E900BF063700680509006F0475006F025000C504EA006F0414009D062A000C04E8005800000020002000D4015401A401E6027E033A0396043004DE058E0626
 0674072A07D20872088C091E09D00AB60B5400000001000000160077000F004F0007000100100030007B000005E00D3300030001B800712BB800672BB8005D2BB800532B410E00000246001002460002007F02440001023F023C0001002B023E023CB2012BEFBB023D0001023D023CB2141F00BD023C0010023C000201870188B21A1F40B80189B310163900410E0188001001880002018301850002002B018401850002002B01860185B2022B80BB017F000100DF017C406601DFE016171CD4D516171C7B7C161B0F7B1F7B2F7B037B7C19D1D216171C767716171C6D7016171C6C6F16171C6B6E161B5F6E7F6B026B6E7F721A747514151C676A14151C666914151C6568141B8F65A065D06503656885711A1973167A4319217943192102B90352034AB2022B10BD034600500346000200400339B20B0E39B9FFC00338B20E0E39B9FFC00338B3090C3950410B032D0001033003310003002B02F402F30008002B02E3B2BE022BB802DCB3BE641F40B802DBB3313A3940B802DBB2232739B9FFC002DBB2141439B9FFC002D9B2333939B9FFC002D9B22A2E39B9FFC002D9B2212339B9FFC002D9B2171939B9FFC002D9B20E1139B9FFC002D0B2111139B902800278B2022B10412B02740050027400020010025D0050025D0002000B024C001B024C006B024C0003000B024B001B024B0002023A02040016001F023802040012001F023202310002002B023002310002002B022F0231001E001F022E0231B21E1F20B80231B2121639B901F701E3B2032B0A412001F4000101EF01EE0002002B01ED01EE0002002B01EC01EE0002002B01EB01EE0002002B01E801E70003002B01E601E70004002B01E501E70002002BFFCA01E3B30B1139B9411D01E70001007601E7008601E70002019401920002002B019301920002002B019201900006002B019101900007002B018F01900002002B018E0190B2022BBFBF01900001007001900080019000020157B292042BB80153B291042BB8014FB297042BB80136B37F032B40B80139B21218394109012401250003002B011001110003002B0104403BFC022B10F850F80240E61A1A399A9B032B9C9B042B9B970A2B9392042B9192062B9297042B9597042B9897022B9697032BA097019F97AF97BF9703BC034803490004002B0349B285022BB9FFC00343B31011391FBE0344000100E00344000103350334B2032B20411203330030033300400333005003330004033303140003002B033203140003002B032F0314B2032B2FBF03140001000002F3002002F3000202F0B2BD062BB802E2B2BF082BB9FFC002E1B2172839B9FFC002E1B20E1139B802E0B2870A2BB802DFB3BF042B40B802D7B323253940B802D7B2151639B9FFC002D2B2101139410D02C602C50006002B02C202C00006002B02C102C00006
 002B028CB285022BBC027602770004002B0277B285022BB9FFC00271B31011391FBE0272000100E00272000100400260B2151639B9FFC00260B20A0B39B9FFC0025FB2171839B9FFC0025EB2242939B9FFC0025AB31011391F4114025B000100E0025B0001000F024A0001001602490026024900020009022D0019022D0002FFC0022BB2111539B9FFC00229B30D113920B80223B2121639BD022202200002002B02210220B2042BC9411402200001021E02200003002B021F02200002002B01F601CF0003002B01E001B50020002101DF01B5B2262120B801DFB21E2139411A01DD01DC0002002B01DB01DC0002002B01DA01DC0002002B01D901DC0002002B01D801D70003002B01D701D60002002B01D601D4B2022BB0BF01D6000101D501D40002002B01D301D4B2022B69410B01D2000100B901D2000101D201D40002002B01D101D4B2022B20B801D0B2090C39B9FFCA01CFB30B11392BBF01A300A401A300B401A30003FFE001A6B2131539410D018D018C0003002B018B018C0003002B018A018C0002002B0156B286022BB80155B280032BB80154B286052BB80152B287052BB80151B288052BB80150B288032BB8014EB285032BB8014CB285022BB80138B287022BB80131B2BF032BB80122B285022BB8010E400B85022BFAFB042BFB85022BB8FFC0400AF51011391FF601E0F601B8FFC04009B1151C3940E51A1A39B8FFC0402EAF0D0F3900B40140B450B460B470B480B4C0B4D0B4E0B4F0B409B4AF641FE8E7042B898A072B8A8B062B8C8B062BB8FFC0B78E3032398E8D032BB8FFC040148D1E23398D8B022B8B85082B8281042B8180032BB8FFC0B3804A4D39B8FFC0B3803F4339B8FFC0B380343939B8FFC0B380282E39B8FFC0400C801D2339807E022B7F7E062BB8FFC0400C7D4549397D7E062B7E85082BB8FFC04020881E23398887022B8785082B8685062B83840A2B8485062B7085808502BF8501410A03530354000E03500351000E034E034F000E034EB203641F4155034C034D000F031B031C031D000C030F03100311000C030C030D030E000C0327030D0329000D0321031C0323000D031E03100320000D0327003C0321003C031E003C031B003C030F003C030C003C02AD02AE02AF000C02A102A202A3000C029E029F02A0000C02B9029F02BB000D02B302AE02B5000D02B002A202B2000D02B9003C02B3003C02B0003C02AD003C02A1003C029E003C02810282000E027E027F000E027C027D000E027CB203641F4175027A027B000F021002110212000C020D020E020F000C020102020203000C01FE01FF0200000C000B0211009B02110002000F021000500210009F021000BF021000DF02100005001F020D003F020D007F020D0003001F01FE0001021901FF021B000D0213020E0215000D0219003C0213003C02
 10003C020D003C0206003C0201003C01FE003C01BD01BE01BF000C01B101B201B3000C01AE01AF01B0000C01C901AF01CB000D01C301BE01C5000D01C001B201C2000D01C9003C01C3003C01C0003C01BD003C01B1003C01AE003C016D016E016F000C016101620163000C015E015F0160000C01610166B2171F1F41420166003F0166007F016600030179015F017B000D0173016E0175000D017001620172000D0179003C0173003C0170003C016D003C0166003C0161003C015E003C012C012D000F01260127000F01280129000E012A012B000E01180119000F01120113000F01140115000E01160117000E01050106000E01020103000E01000101000E010040A803641FFEFF0F1B37151836151535151234150F33150C3215093115063015032F15002E1526270E28270F2A2B0E2C2B0F22230E24230F1E1F0E201F0F0F10110C090A0B0C0607080C0304050C0001020C000340131A230003131F06031C1F1F0F3F0F7F0F032003011F034F03BF03FF03041B011D0D18071A0D1510170D1204140D901B012C3C2A3C283C263C243C223C203C1E3C1B3C183C153C123C0F3C093C063C033C003C503301B0124B004B5442B013014B004B5342B0332B4BB8032052B0322B4BB009505B58B101018E59B0332BB00288B8010054B00488B8020054B012435A5B58B80119B101018E851BB900010100B04B60858D59B1020042B00188B0235358B00188B0405158B02088B810005458B1020142595959B0374B5058B1020042592B1DB0644B5358B0801D59B0324B5358B0901D59004BB03A51B01B23422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B7374732B2B2B2B2B2B2B2B2B2B2B2B2B2BB1282645B02A4561B02C4560442B2B2B2B2B2B2B2B2B2B2B2B002B2B2BB8010045B0FE4561B8010223442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2BB8027C45B8027A4561B8027E23442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB8034E45B8034C4561B8035023442B2B7473012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73742B2B2B0173742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B74752B2B732B2B2B2B2B2B2B2B2B2B2B2B2B752B2B2B2B2B73737473742B2B2B2B2B73742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73732B2B2B732B73742B2B2B0073742B2B2B2B2B2B2B2B2B2B00732B2B2B2B2B2B2B2B73742B2B2B2B2B2B73742B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B732B0143581B592B2BB018B0234B53422B2B732B2B2B2B2B732B2B2B2B2B2B732B2B2B01B8017C20456A44B8017D2045
 6A44B8017E20456A44B8017F20456A44B8018020456A44B8018120456A44B8018220456A44B8018320456A44B8018420456A44B8018520456A44B8018620456A44B8018720456A44B8018820456A44B8018920456A4473732B2B2B732B2BB8023B20456A44B8023C20456A44B8023D20456A44B8023E20456A44B8023F20456A44B8024020456A44B8024120456A44B8024220456A44B8024320456A44B8024420456A44B8024520456A44B8024620456A44B8024720456A44732B732B2B7373B109322B4BB05052424BB008524BB008505BB01A23424BB0C8524BB036505BB00C234200
 00>] def
 /CharStrings 22 dict dup begin
 /.notdef 0 def
/space 1 def
/numbersign 2 def
/parenleft 3 def
/parenright 4 def
/one 5 def
/two 6 def
/three 7 def
/four 8 def
/five 9 def
/six 10 def
/B 11 def
/C 12 def
/N 13 def
/O 14 def
/d 15 def
/e 16 def
/l 17 def
/o 18 def
/s 19 def
/w 20 def
/x 21 def
 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-2186 -1509 3361 2381}def
 /UniqueID 4093103 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C92608F4984E4A5769B1336AE461E05CD208550769783E471D7C20DE95AF8A53A6D2A584B1F0B72EBEEFCE0D6604DA481FF8754E42B9FE7D86959959E67CA71EBACF2EE41851959E19C2DE356C7CC411AC6ED14170C40445D0B66687F2477026A486551682ACA365E18D7AF4BF86A3759898F0219785110B46AD447B7F1A5EDFCD5CA9B55BF64EC9BAF7C6315F3A522CA295CFDFF82C73A1205760CB2712D0864A092471CD4EE4445B4AD02EB3A21602B62547229C369DBDCF134B90969B035B031AB6CFA82EDDFE8E96E6C516C0A6985CF84221A1C55DE6B6B4CADEFC9A7AAB91424F11F826189B4BDEC732767AFC6D73C304DD5BA60DE55E39484E4B55926F34A1581A80515D520B5F76760D998A2F885772DCBB04DE7C51B30A07962F553BD33FD86977994D5345A40F9033C051DAD7731478B4A9AEB4BC016BA54EA30667642E2CF6D6411E0552C99F687C0651D78EABE11F9E65C44069E517BCE9CC1B5AF8E94F2177E885F91A0B5D34054D0FFFAAEC5FDBC9211304C457CBCE75EB3059EF88C285D04762DB71CFCDC0C2C0A13BB7B69DCD42B71ECAFE301F40AE0441BB50ED4BEFDC1817B2E58FC13CBC2DBF1535EDD4D5B6E722F66E5FCB3662C8201262653BB509164C36985E03B952FF1AE18811F5F3F08E38303389ADF66F5713975C0D8840E5BB4D2B3D05EA02CE680EF5076A1EA3E39E81F20AFA35DDEF32ED8B6B22B6F017F6B7AF8851C61C7E46A312291AB13FCDD1717598661BB9B9F794AFA3D
 0B0BE246A89F8B0EE5C35628CB6E4A436FE9C5503854DDC4C13CF95BB74747DAF62A16884FCCEA083F564B3B45509D357B3802AA2D0AEEAE20CF577129D3376671FC405F347666994829B1B65885C87B9BFC92860213076F6CDBAEB800C94BED993AA2AC28F61E8744A72AD65A9115554386D7A1F9CBE00AEE3A8DCE10221C696AC09E1148F24CC6DEDFFE11D23D97E64FD4E868CBC1DE124811F05B73375214A45FFF6F12C80C80ADA58B350CB87750DAB1D49D109F8237AC961ECFDF0020BB60BDB7591053CAF93E1A6A22934AB6CD8A2335DE3A4E24A7232981E712557BAB434978D722B338ABB8864BAEE545F5B759FE093D39C9B88B703B853C1BC55B8D1F1103BB945C366CBD95E7FD206EDDD10909672D74AD44E2C7B7823809113B1F5509DF4A6FED8B59F0F4E64FA8ED1A76649AC18B23FB9380A028CFB8C6D105D64C2BE71A7B5775197ED2D8ACECC250A6B939FD3C1FB790C70C468D4CD17D0F28E2714A6CF2FD64AD83EA59449B8627B67E1500ABF790016EF848E45FA5C48FE8EB2259CBCE28F412B204AA91DCD356EEB6F49259B9CBEC3081F26DE20A0277CF7775955FD5CEBFB1AE08D59E86BEA5E1AB6DBA4247D72C1696EE8DB264E05FB5A623A39E1E066DC1DDC11E4BC73B3D7881C516DF01DA90251268CC16E597CB7F30100F8EFCA4D7D95A932471D857F78BDCAA6601E19A50933BA0B72C7A080CB9F8CE793D8F345A8C533567AC6CDB11AA0298FFAD5081836220FA0601C9F50C3F22144249C8E8B6E20AC38343B676FFBCAA61473291E480C2CBEC3BA439B8FF9A6B408C3FC1EE3EA5A67CD458DF0667976B89CC2AE644B8A8593BB9C050956C1E9DAB424B796EA181BFAB91AF5FF2436C26FCDBD9F344C85166654CD9EE7D5792C9E63FFCA7FD7FB31C11C12084A7E518D47EDCB08DA0016FEF2F9D24E82EEE405295890F1290F0C9FEC4B1A0D8AF2006396A1115FF6951390753AA09B75C7876C3EF5D6BD88F127B1D66FEF198F0C2AD301CB13E883CEBC41E12C5E3A6431124AABA21CA56FEC94954904166A20D0FC5CC0939D28A5D21F1F91736FE2D748A292B9DB83CBB05EB08A8B824068BE562E84D366616815FA6CFFEAC112E4503E3C6F8624A5A3BFDDA0CFD3CA4D7027B07E0758734ABE6139EE465A6FBD5B0C646DFCECE1965D943F0AF6BB977D9862A49DF29ABC32182F67B373E09212CCDE06F01C723F6AF01755B3D5290DDA4C3DB31CF6144AEA88FB257E8D3F48C45C1B3FA12A7AE1638B274BE24D280F566EA4843BD38910927DCDB61B589E09E77E533E08637375D16C94C3E8F3978D714D19227BBB95FB197C934C1A3251C61096FD3F24A46759735BFCE12B4EA18CD1C7A252F44F68F3266F920115AD4812AD8D04A3342BD2DE50E33F67311C1391F18A364BC93045F743A34150FF14C13F6B68E547F84
 01A2287099E733DF86AAC2881B95FC35DFBE8BD3F481FB1FE36F08BA14E2D156BDE47C69CF1EC2BD81F0771FA1EE9CAB27D4BF48AD3878C0001F684F0AB7019D005040F2BEAEDCF73F592C10B111722B48669DFCFB9596BD1E334BBE4CF0675E7FB30A8228655EEBD4E075727D8C3AE004C016B8E941208566417B41250DEF2D889224AFC91C31F1E36F1AFF57653E85C52E9965B45BDBCF316E4F802337BEDC7DFB84C056609C0C67A47EA741A9AF30FCB05E4E35935CD17684189F33D81CE5DE59632523BB8F83AD005CA2E207C180B4E9AE6305110EBB485E5B2283A21E68D3E9D37E9DD1D27D59EC749834F56964BD6FA4544A28222E53132AFC884C435AA39318336B064DC7DCA0DF35BEEE05A4E99572C796D8973EBB889D647D2C70DD7CE1F4854B632116C244E2E1CB993E2D35EE167C01A9732C9C866B350A9659E98D700C2262068CECD85688B515423555B87A40DEA1EEAF5CF59242893EA190394BFCBDB3F2EC890619662E767CC63FE5A01C0B9D4C9E742FC647BF35E976A414473F525372D559AF11FBEA78D2CF80E2F44072AD828B5E37DD2C6B69237F75FA0CB69BBB0DC8383DC6878D72179826057F6CAE315360CAD101673E268D8DED26E6C2EB51BC0AAAF5D39A18E77E5C51AC8F17727FEBCE73F19D4777CA6C7CFEEEFDB87BCDF565F86242BF50609E41BE500AB5BA66E3C26EAC6E7B6F34E8F8D695245E690A36653F10151C660618035A7A1A778F7AD106E6C3DDB012CC065E4CD2B0ED170AC82935767F9F8C3AA5A862CC017310895197F3EF9C0DC9A74C6992327AF9673C81942C88B6F95BBB01F2F48F7E8DAA9E110423F603723A8B0260A1D3590038E9C167DAF18A559FBAD5C046A331130A6DDA9DDCCF56B2FF3B52908BEAE63BE70F751A382790FEEE4E52404A1E1442C1F759826D6AF71A61F48F324E3707F624FD81FBFB13E3292AB715C63D9C1C6A1885AAC971FE9FA262804D83DCCF659019A8BB6950F286CD6869603B12D5172273FAC8E6C60A6F69BAFB804F3EEECCEBCD8EF35AE7BDF89C48A275234104AE1CE1258CD945CAB973C25CDFE242536592B06AF4406DC1FAA7AA98EA37C1CEE4A6DEBE405080FF10A975F383C24F2F5D9C5E6C78438059F168E12D48212E6154681F9E0D3FBE9AF8890384FADF4AFA01F2A0E3792F54285691A18FA632514A04835183761E2A6B1244C4DF254DC45FBE1857A98A1AA47DAF2067AECE29C44A39F31B8CBEBA2FB99F4C50DACCE5657F784658049D3CA6893CAD1A71CB5247021EADC158A3A11B64A68418CE257C0ADCE9DC45DC3FFDBF8B4811BF9C6A6CFAB75C56A703064676D4127E900379F721B25905C3A295EE59215405F4F6427758E0532D15496548D89464802EBE437452B04CD0B650DFBF06705346AA73C683457B41CF132E76DA9C940A654A8C317597E5
 2D7613279F916461C7CE3D24DDC184FEF5DA22D19E5E47538511B93AA3664C7C3F038F9A5C069841ED2392286C1766FBE20ECC037A2370B32E4853707BA2C24FD7CBCE1ACA7916317AD1D6BF5C653F942B253726B6C011AA1B99281596339A8070FF22A0E0ECA97BE415662F0D909ABDAD51E632D4E7310F9B79590378E5A850451199A3C1071FEDFC20253AE93BC5969DBD2DCDF9A17808ADD97260C5F84EC67A685031EA8C894886967FAF3B484A0771CE1351D095466B713C2B61DD24A06F8AD1F9922702C179EB677956E0E9800804B95ABE08D9F48CFABA01B3F2FBCFFB0972955EAE1CDFA30951EC06E682C38AAD2696E45323B567E367
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End
 %RBIEndFontSubset
/LucidaGrande cguidfix
/F1.1/LucidaGrande renmfont
[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeA { { 1.8008  exp } bind  exec} bind 
def 
/MatrixA [ 0.9642 1.0000 0.8249 ] def 
/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def 
/DecodeLMN [ { 0.9857  mul} bind { 1.0000  mul} bind { 1.3202  mul} bind ] def 
end ] /Cs1 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ 
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 
] def 
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs2 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ { 1.8008  exp } bind { 1.8008  exp } bind { 1.8008  exp } bind ] def 
/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs3 exch/ColorSpace dr pop
%%EndPageSetup
/Cs1 SC
1 sc
q
0 0 398 418 rc
0 418 m
398 418 l
398 0 l
0 0 l
h
f
/Cs2 SC
52 0 0 52 204 340 cm
BI
/Width 156
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcDhOf)>^Lrdk*Qs+13gs6Ta7r;ci^rdk*fs+14's7QBUrUTmKqtL$^r9XCQ
rdk+)s+14-s8N#^rUp*]qptTEqYL*do).kQqu20HhuA9-kl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE
kl656o`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s7cPEs7cQmrpTgbr:p0g
qYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcGKEJcG]Kqu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rp^!Zr:9jYp%87Vq"O[\rqZ?crqlTjp&4R_Jc>`MLB%/Mo)8RcqtpBhqt^6dqtL*`
qt9s\qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp/Hs,$dT
rpTgbr;6BjqY9j\pAX^]oD\=Xnc&%Tn+c;=lgO*1lhp)DmJcSOnG_tTo)A7Xo_A.Tq"speqtp<^rVleQ
s,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,kQ0o2ros=Frp0RMrpBLK
rp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu2QSQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XM
rp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$f
qtp<drV6AWs-<WTrVl`lqu6Heq#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhZ2U4
i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U#Rs-WicrqQHkr;6BjqYU*`p\sg^
oD\7Vn,DbSmJcJOlMg&Ikl0`Djo4??ir7p9hu;R2htu7,h##jpgA]k$g]?3crn[J/ro!e5ro*k9roF(?
roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*hS,])[rr2ThrquQfrqQBbqt9s\qsj[Srp]pT
rp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2ro3q;
roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)YD^q#13iqtp9drqQBbrq??`rq$-[rp]pT
rpB^Nrp'LIroa:CroO.=ro!e5qq_8,rn7;'rn%/#rmh"tpsT&drm1Sjp!<Warm1JgrR1Vlrm^qtrmq)#
rn.5'qqV2,rnm_6ro3q=roX4CrosFIrp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6fT)Y_gq#:'eqtpBh
rqZQgrqHEcrq69_rpg!WrpTjSrp9XMrosFGroa:@ro3h5rndY0rn@A)rn.5#rm^qqrmC_lps8rbqp#,a
n&tUPrltDe!RB!fci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[a
p\sseq>:$fqtU-brhodrs82fmrVl`lqu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,
f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W`W!gQ_sbJA_u%CO`;mpU`r=*Zb5TT`c2Q#fd/MAjdJhVof)F;#
g&Bh,hYZ71j8S-=kPj`FlMg2MmecMQo)A7[p&=[ap\t!cqYpBhr;QZfriQ4#s8N#mrV69eq>U0gpAXaa
o`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8
^&,SA^];7L_Z%IP`W!mVaSs<\b5TWac2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Y
o`"O_pA=Xaq=sj^rVQSrs02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$
eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[rkABHrkSNLrkn`R
rl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<hqu$Hlq#7MtZiBq%
qu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`P
qnN-Crk&0?rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\q
fDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/us0Mb)rqQHequ6Ejq#:$e
p&=U_o)A.Xmf)VQlMg#HkPjQAir7j7h>Z.-g&BM#e,IbocMl#dao9<Z`;[UP_#D%H]Df>>[f3]6Zi790
YPtd*Y5>="X6HY`X8AsuXT>Q+rilC*riuI/rjDa7rj_s>rk8<Hrk\TPrl4rZrlb;drmC_orm^r#rnIG.
rnm_7roF(ArosFIrpB^Rrp]pXrq$-^rqHEerqZ?dq#1*h[f<]6rr2fnrquZjrqcWhrqHEcrq-3\qsXON
rp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRh
rhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2
iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZlrjMj;s8N#prVl`lqu6Hkq>U0gpAXaao`"C[nG_nU
li-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkcT`1S_
T)5)XSGSfNRf8fRSGo)YScGA`T:c+Urh9=drhTOkri,mtriZ7(rilC/rjVm<rkABHrk\TQrlP/arm1Sk
rmUkurn@A.rnm_7roF(BrosFJrpTjUrpg![rq69arqQKgrqcWkqu$Hlqu4/+\c;I'q"t'drqQKerq69_
rpp'XrpKdProsFFroO.<rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_
rgj%YrgNhSrg<JHqj$r@rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:O
a8X<^cMl2ieGe%ug&Bh,hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-#s1JC2rqQHhqu6Hkq#:$e
pAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^
SGnrUR/WENPl?mGP5^R*O8G%<OoU[HPEZ!1rg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHK
rl>#\rltGgrmUktrn@A,ro!e7roF(Arp0RNqsXOTrq-3`rqHEeqtg<hq#1*h^]21Nrr2]krqucmrqcWi
rqQKdrq69_rpg!WrpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_
rg`tVrg*PJrfd>Crf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[
T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*g
qYpBkr;6Hirke]Ps8N#mrVl`oqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[
_>_4K]`,A=Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>MuJV5M>i8,L%p;hJbXlsK`Hl*LAm&/MZ/P5
NrG+=OoCXFQi<EPSc58\U&LthWW'!uYl;$/[f3r=^AbtJa8X6\c2Q)heGe%ug]$(/i;Vj;kPj`Fm/HGP
nG`"XoD\F^p\sseq>U9jr;6Hirke]Ps8N#prVl`oqu6Hkq>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*
df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfSPQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3h
IJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJm
g&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZlrke]Ss8N#prVl`oqu6Hkq>U-fpAX^`o)A.X
n,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),
K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+QkrdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOk
riH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu4\:
aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'rmUknrlb;]rkn`Mrk&0>riuI*ri?$p
rhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[qf2(Drc.gUrH&'^FT-F^GQ)jdH2`3j
IK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lH
m/HGPnG`%Yp&=[aq#:*dqu6NjrVlf;s3(HArqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0
g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qS
DuOY:D>S5MDZFbSE;jkVF8g:\GlE!fHiAKnJ,Y#uLAm#.MuJe:P5^aGSGo,ZT`1hfWW'("ZMq?4]DfSE
_u@^UcMl2idf.r!h#?41iVqs<kl0oImJcVSnc&.Zp&=^bq>U6iqu6NjrVQT;s3(HArqlZnr;QTmqYp9h
p\smco`"F\n,DbSli-,IjSn0<hu;@/f)F+sd/M5fa8WpS^AbbDZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4
KDpH$J,XfoH2`!dF8g4WDuOVQD#S5LCAqrEBDuN3Ac$*=BDuTFC&r'arbMLLrb_ONrc.pYrc\9crd4Wo
rdk'$re^W5rf@&Arg3VRrh'1brhf[trilC.rk&0Drk\TSrlb;frmLesrn@A/ro3q<roj@HrpKdSrpp'\
rq??crqQKhrql]mrr)`nbQ#ccq#13hrqcWirqHEcrq69]rp]pUrp9XKroX4>rnm_2rn%/!rm:YgrlG)V
rkJHDrjMg1riH*urhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^OrbDFHrb2:Crakt;raY2%
raYh9!+c1BAc?<@B`;`FCAr&KDZ4VSErL1[G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;
^]).Ma8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Yp&=[ap\t!fqYpBerQG5as7lQlqu6Hkq>U-fpAX^`
nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9h
FoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[
rcnEhrdXp!re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjU
rq-3_rqHEfrqcWkq#/D9cN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(qrlkA_rkeZK
rk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+r`oG,r`\Ph
r`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.
]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQTAs3^lGrqlZnr;QTmq>U0g
p\sjboD\7Yn,D\QlMflDir7j7g]#e'df.Pkao96X_#CtF\,NW2XT#0tT`1M]Rf8KLO8b+;LAli)J,Xfo
GQ)^`E;jbSD#S,IB)Z??@fBd7?iF@1>lIt)=oMOZ=8c5%=BPQ*r`fA,ra#M1raGe8rac"?rb2:Irbh^S
rcJ-`rd4Wore(3)rf$i;rf[8Lrgj%]ri#gtrilC2rk&0Frl"fXrm(Mkrn%/(rnm_7roF(Drp9XQrp]pY
rq69brqQKgrql]mqu-NndJqVorr2fnrqucmrqZQgrqHEarpg!Vrp9XLroj@@ro!e4rn.5"rm1Sfrl>#S
rk8<?rj)O+ri#gjrgs+WrfmDDrf$i4rdk&urd=]grcA'Wrbh^Nrb2:@raPb3ra#M.r`];(r`K/$r`8nr
r`&,\r`&bp!*0,$<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`
W;`t!ZMqB5^&GkI`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jr;6HlrmCbqs8N#prVl`o
qu6Hkp\smcp&=L\nG_nUlMfuGjo43;h#?"+e,I_nc2P]]_Z%:K[f3T3Y5Y<tUAgeaQN!*IO8b"8K`6N$
IK"KjFoH@ZDZ4JOBDuKA@K'[6?N+4/=oMP&=8l5!<;ohq;Ys>I;#X;l;Z'Gl;uTbq<W6)!=T2J&>lJ%.
@/aU6AH$6@D#S>OE;k"ZH2`6kJGt9%M>iS8PQ$mITDkVbVZ*atZMq<3^AbtJ`W"-]d/MMng&Bh,i;Vj;
kl0lHn,DhUnc&4\pAXgcqYpBkr;QZlrm^tts8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)
dJhGjb5T9W^AbbDZi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"
<W5qr;Z9Pm;#=&]:A@QS:B"#h;#F/h;>sJm;uTer<rQ2"=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=ot
K`6r0O8b@BRf8oXUAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)hu;[8k5OTDm/HGPnc&1[p&=^bq>U6iqu6Qk
rm^tts8N#prVl]nqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR]`,D>Yl:^&VZ*7fS,S`Q
OT(4<M#Mr(IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:A[cY9__9O9`@`d:Adla:]!uf
;uTbq=8l>$=oM_+?iFI4A,^-?CAr/NErL1[HiAKnJGtB(MuJh;QN!BQT`1hfX8]@&\,O#=_#DCRbPolf
ec+8$h>Z@3jSn?Ali-;NnG`"Xp&=^bq>U6iqu6Qkrm^tts82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7
gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts
;Z9Mi:]!lc9`@ZT8af4C8H;B\9)D<]:&[rc;#XAl;uTer=T2M'?2e41@fBp;C&VrJE;jtYH2`6kJc:E'
N;eq<Q2[6OT`1hfXT#L([f3o<_>_IRbl6#hec+;%hu;X7jSnECm/-;OoD\F^p\t!fqYU3irRCkss8Mur
r;QTmq>U0gp\sjboD\7YmJcDMkl0WAiVq^5fDa;!ci2)d`;[ON\,N`5YPtI!U]-nbQN!'HNrFh5KDpB"
GlDjbEW0eRC&VcE@K'X5?2e"+=8l5!;uT\l:]=)f9__6K8FK(@8Gl$R9)_N`:&@`c;>sMn<W6)!=oM_+
?iFL5BDuWED#SGRFoHXbJ,Y*"L]3>5P5^dHTDkVbVuEn!Zi7H5^])1Nb5T`de,ItuhYuI4j8S9AlMg2M
nG`%Yp&=^bq#:*gqu6NmrRCl!s8N#srVl`oqu6Ejq#:$eo`"C[n,DYPl2KlFiVqa6h#>k'df.Pk`r<gR
^&GG=Z2Um)U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk:]=,g9`%KX8c)$/
7KGtJr^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1
rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`ngAfe)rr2oqrquclrqQKdrq69]
rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5
r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6
rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']
rqHEerqcWkrr)`ngAfn,rr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"
rhTOarg3VIrf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*_-/
r'^NQqaUQTqag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFMrc8!^rd=]sreLK3rf[8Jrgj%ari,n"
rjMg<rkSNQrlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq??crqcWkqu-NngAfn,rr2oqrqucmrqcWgrq??`
rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2
r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?rbMLO
rcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_rqHEgrql]m
rr)iqgAg"/rr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rRrjr*:ric=!rhBC`rfmDD
rf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfSmmGntrBp0Dr^?`SqaUQT
r^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`rhob!rj;[9rk\TRrlb;g
rmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`nh>c=2rr2fnrql]krqZQdrq-3[rpKdOrosFCro*k5
rn.5"rm1Scrl"fNrj_s5riQ0prh'1Zrf[8?re^W*rdFckrc8!UrbMLDraGe5r`];&r`&knr_NMgr_*5_
r^m)Zr^QcRr^?*?h*V'-n3d1CqaLKRr^ZrZr_!/_r_EGgr_WSnr`B)&ra5Y6rac"DrbqdVrd"Kkrdk'*
rf6u@rgWnZrhKIprj)O5rkJHNrlP/crm^r"rndY5roF(Crp0ROrpg!Zrq69drqcWkrr)`nh>c=2rr2fn
rqcWirqQKcrq$-YrpKdOroj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQ
rb2:>ra5Y1r`K/"r_i_lr_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##
ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pY
rq69crqZQirr)`nh>c=2rr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[e
rgEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<EbsM+jogAUEr^HfU
r^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'rjr*Crkn`Yrm1Sm
rn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2q#13grqQKerq$-ZrpTjProsFEro!e2rn7;!rm(Mc
rkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"KbrbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B
bsM+jnjECEqaLKRr^ZrZr_*5ar_NMkr`&l!r`];-raGe<rbMLOrcJ-brdXp#reg];rg*PRrhTOnric=1
rk8<JrlY5crmLf!rn[S3roX4Drp0RPrpg!ZrqHEfrqcEgh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:
rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]
r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[
rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$Hlh>c=2rr)iorql]jrqQKdrpp'X
rpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6r`T5%r`&kn
r_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wp
re192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoh>c=2rr)io
rql]jrqHEbrpg!VrpB^KroO.=rn[S+rm^qmrlP/Xrk8<?riuI%rhKIarfmDCrepc-rdOimrc8!UrbDFC
ra>_2r`K/"r_i_lr_<Abr^m)[r^ZrVr^?3B`'WiXnjECEr^HfVr^d#[r_*5br_WSlr`9##ra#M3rac"C
rbh^Urd+Qmrdt--rfI,Drgs+ari,n%rjVm?rl"fXrm(Mmrn7;,ro3q>roj@KrpTjVrq69brqZQjrquco
h>c=2rr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]h
rc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSkr`&ku
r`oG0raPk@rbVRQrce?hrdb!)rf6uArg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjVrq69b
rqQKirqucoh>cF5rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTObrgEbI
repc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^$BIj?i`2qaC<Nr^ZrZ
r_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/ro="?
rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHB
rj)O*rhBC_rg3VFreg]/rdFcjrcA'Urb;@Cra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KL
j?iN,r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fY
rm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-
rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9I
h*Tp_rBfI0pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@
rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oprql]krqHEbrpp'Wrp9XLroF(;
rndY*rmUkmrlG)VrkAB=ric=$rh07ZrfmD@reCE&rd+Qdrc%jPrau.=ra,S-r`B(sr_WShr_*5_r^d#X
r^HfSpd=(.r^#.$!'pWO6/t<,6iKLQ7K,dU8H)3[9E%]c;#XAl=8lD&?N+F5BDu]GE;k"ZHN&HoLAm/2
Pl@0OT`1tjYPtp.^Ac"KaSsNbe,IqthYuL5jSnHDm/HJQo)A=]p\t$gqu6Njro=%:s8N#sr;QTmqYp6g
p&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,W;`FgRJrELMuJG0JGsloFoH@ZCAqiE@K'R3=oMM%
;Z9Jk:&[fb8cD6Z7K,^J6fp`46.S:%5X><7k!J`.r^?`Sr^ZrZr_*5br_WSlr`B)&ra#M3ral(Drc%jZ
rd+QoreCE1rfd>Lrh'1griZ7,rk8<Jrl4r`rmUktrn[S3ro="Brp9XQrpp']rqHEgrql]mqu5XUi;`fU
rqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:A
ra>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(B
rbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XU
i;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!V
rb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"
r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??f
rql]mqu5XUi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+
rdOihrc.pSrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=C7qa&Ilp-AUCksG87r^?`Sr^QlWr^m)_
r_EGhr`/r"r`oG1rac"@rb_XSrcS3hrdt-*rfI,Frg`tari?%'rk&0Frl"f\rmC_prnIG0ro3q@rp'LN
rp]pZrq??erql]mqu5XUi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`
rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_
r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LN
rp]pZrq??erql]mqu5XUj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5sm
rgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZ
r_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@H
rpKdTrq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4
ri5smrgNhOrf@&6rdk&srcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQ
r^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5
roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1SerkeZJ
rji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7
qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;ermUl$
rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$
rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4
a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y7rau.Hrc.pZrd=]rreLK6rg!JPrhKImrilC4rkABK
rlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6
rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlT
qa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4
rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@
rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#X
r^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&
rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZrq??erql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@
rnm_1rm^qorlkA[rkJHDrilC&rh]Ubrg*PFreUQ+rdOiirc8!Urau.>ra5Y/r`B)!r_WShr_3;_r^d#X
r^?WNk!Jr2bs:tfr^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9irdt-*rfI,Grgj%b
ri?%&rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjP
roj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_
r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+
rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWg
rq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$
r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnEl
re19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XUi;`fUrqucm
rqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3
r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+
@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBk
r;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wm/H;LjSn-;hYu+*e,I\maSs*V^AbM=YPtR$T`1DZPl?X@LAl`&
HN&'dE;jYPB)Z9=?N+.-=8l+s;#X5h9E%Q_8H)*X7K,^M6fUN46.\@%5lj8;j$NN.r^?`Sr^QlXr^m)^
r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;rp'LL
rpTjWrq69brqcWkrquZmj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(
rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_rBfI0pd>$LqaUQV
r_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=
rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_.rm^qorlY5ZrkSNC
rj)O*rhKIarg3VGreg].rdOilrcA'Urb2:Ara>_1r`T5"r_i_kr_<Aar^llSr^?WNh*V!)k!8o3rBfI0
r^6QNpdY6Sr_*5br_NMkr`&l"r`oG1rac"Brb_XUrcnEkre19.rfI,Grgj%`riQ1*rj_sCrl+lZrm:Yp
rn7;.ro="?rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(r
rlb;\rk\TErj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(
r^#d6r^$BIj?i`2qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.
rji$Erl4r\rmC_qrn@A/ro="?rp0ROrp]pZrq69brqcWkrr)`nj8[s8rr)iorql]irq??arpg!VrpB^K
roO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Ab
r^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSkr`&kur`oG0raPk@rbVRQrce?hrdb!)rf6uA
rg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjVrq69brqQKirqucoh>c=2rr)iorql]irqHEc
rpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.rdOilrc.pTrbMLCra>_2r`K/"
r_remr_EGdr^d#YqaUQRr^?NK^-_*Opd>$Kr^H]Rr^ZrYr_3;dr_WSmr`9##ra#M2raYqCrbh^Trd"Kl
re(3.rfI,Ergj%`ri5t%rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrq??crqQKirqucoh>c=2rr)io
rql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRF
raPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6
ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQj
rqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*
rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSl
r`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV
rq$-`rqZQiqu$Hlh>c=2rr2oqrquclrqQKerq-3\rpTjProj@Dro!e2rn7:urm(Mcrk\TIrjVm2ri5sn
rg`tSrfR2;re:?$rd"Kbrc%jOrau.=ra,S.r`K.ur_`Yjr_3;ar_!&Xr^QZNpd<(go0W4>pdG!Kr^Zr[
r_*5ar_NMjr_reur`];-raPk=rbDFOrcS3crdXp#reg];rg*PRrhTOnrilC2rk/6HrlY5brmC_urn[S3
roX4Drp0RPrpp'\rqHEfrqcWlrr)iqh>c=2rr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;Y
rkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<E
bsM+jogAUEr^HfUr^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'
rjr*Crkn`Yrm1Smrn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3d
rdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nh>c=2
rr2fnrqcWirqQKdrq-3[rpTjProsFCro!e3rn%/!rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]i
rc.pTrbDFCraGe5r`T5%r`/qpr_NMfr_*5_r^coVr^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Af
r_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(C
rp9XQrpg![rq??drqZQirr)`nh>c=2rr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rR
rjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfS
mmGntrBp0Dr^?`SqaUQTr^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`
rhob!rj;[9rk\TRrlb;grmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`nh>c4/rr2oqrqucmrqcWg
rq??`rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?
ra>_2r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?
rbMLOrcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_rqHEg
rql]mrr)iqgAfe)rr2oprql]krqQKdrq-3\rpTjRroj@Cro3q6rn@A&rm:YgrlG)Srk&0;ric=#rhKI`
rg3VIrepc1rdk&rrcnE`rbh^Mrb)4>ra5Y0r`K/#r`&kor_NMfqb-o\r^coVr^QcRmmQV3oL/UFr^H]R
r^ZiVqb$i\r_<Afr_`Yor`9##r`oG0raPk>rbDFMrcA'_rd=]rreCE1rf[8Jrgj%`ri,n#rjDa;rkSNS
rlb;frmq)&rndY6roX4DrpB^Srpp'\rq??drqcWkrquZmgAfe)rr2oqrquclrqQKdrq69]rp]pUrosFF
roF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"r
r_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XR
rc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWk
rr)`ngAfe)rr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\
rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&kor_WSir_EGdqb-]Uqa]4,!CfQX8,,[T9D_E[
:B")h;>sPo<rQ;%>lJ+0@fC!=C&W&MErL4\I/\WpKDpf.O8b=ASGo/[U].CpZ2V01^&GnJ`r=9_dJh\q
h#?10iVr$>l2L#Jn,DnWo`"Uaq#:*gqu6NmrVQTJs4@;MrqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9
h>Z%*eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r
;>X/d:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5
rf[8Hrgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="Arp'LNrpTjWrq-3arqZQiqu$Hlqu5=LeGoFE
rquclrqQKerq69^qsaUOrosFCro3q7rn@A&rmC_hrl>#Srk&0<riuI(rhf[frgNhOrfI,<reLK(rdFcj
rcJ-YrbVRJrac";ra5Y1r`];'r`/qsr_i_lqbR)`r_3;`nk&:@ogo-Ur(?i[r_<Afqb[8ir_rerr`K/'
ra#M1raPk;rb;@Jrc%jYrd"Kkrdk''rf$i<rg!JOrh07friH+(rjMg<rk\TRrlkAhrmh#%rnm_7roF(C
rp9OOrq$-^rqHEfrqcNirr(@HeGoOIqu-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#R
rk/6>rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>b
oh>-RnkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07f
ri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu5+FeGoOIqu-Nlrql]k
rqHEcrq-3ZrpKdQrosFEro3q6rn@A'rmC_jrlY5WrkABCrj2U-ri5smrh'1Zrfd>Brepc0rdt,urcnEb
rc.pTrbDFFrac";ra5Y1r`];(r`9"ur`&kpqbd>hqbR2dk"Y_Jr_EMjr)!AiqbmDmr`/qur`T5)ra#M1
raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4E
rpB^Rrp]pZrq69brqcWkrqucoqu5+FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUkn
rltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!
r`&kqr_iVjh,+)J!)i_mr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>I
rh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu5+FdJs4F
qu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<
reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc*Vs!EN8#=8l>$=oMV(
>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmgIf=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"
hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*gqu6NjrVlfDs3CZDrqlZnr;QQlq>U0go`"F\nG_kTli-/Jjo4<>
hu;C0fDa7uci2)d`W![P]Df;=Yl:a'W;`LiSc5&VPQ$[CN;eS2K)U9!HN&-fFoH@ZD>n>MBDuNBAc?-;
@/aO4?2e+.>Q.h*=o2>#=6Wcb=8Q)"=TMZ.r`];*r`oG.ra5Y4raGe;rau.BrbMLNrc%jZrcnEgrdXp"
reCE2rf@&BrgEbVrh9=iriH+'rjVm=rkSNPrlY5drmUkurnIG0ro3q=rosFJrpKdTrq$-]rqQKgrqcNi
rr)`ndJqMlrr2fnrquclrqZQgrq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)UrkABDrj2U.riQ0q
rh9=_rg*PIrf@&;reLK)rdauqrd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*kun!hr`f>+!F/n/
?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_
d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fr;QZlrmCbhs7lQlqu6Hkq>U-fpAX^`nG_nUmf)MN
kPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9hFoHC[E;jeT
D#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[rcnEhrdXp!
re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjUrq-3_rqHEf
rqcWkq#/D9bQ%S@qu-Nlrql]krqQKdrq69^rpg!Vrp0RJroa:?rnm_1rmq(trm1SfrlG)VrkABCrjMg1
riH*trhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^PrbDFGqe,n?rakk7raPY2qdT>1rac(A
!G5s@BDuWECAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^
ci2Dmf)FJ(hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQT;s3(HArqlZnr;QTmqYp9hp\smco`"F\
n,DbSli-,IjSn0<hu;@/f)F+sd/M5fa8WmR^&GYCZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4KDpH$J,Xfo
H2`!dF8g4WDuOVQD#S5LCAqrEBDuN3Ac$*=BDuTFC&r'arbMLLrb_ONrc.pYrc\9crd4Wordk'$re^W5
rf@&Arg3VRrh'1brhf[trilC.rk&0Drk\TSrlb;frmLesrn@A/ro3q<roj@HrpKdSrpp'\rq??crqQKh
rql]mrr)`nbQ#ccrr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHE
rjMg3riZ7#rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbhdUr,DXT
rcA'\rcnEfrd4WnrdXoureCE.repc:rf[8Grg`tZrh07fri,n"rj)O4rk&0Erkn`Urm(MirmLf!rnRM1
ro*k<roj@IrpB^Srpg!Zrq69brqZQirql]mqu-EkbQ#ccq#:0hrquclrqZQgrq??`rq$-ZrpTjRrosFF
roO.;rndY0rmq(trm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=repc1re19&rdausrd=]k
rcnEcrcS3^rc?n8rc8']!H`G_FoHR`GlE$gI/\ToJGt0"K`6`*MuJb9OT(LDQi<KRTDkVbVZ*[rYPtj,
\Gj,>^])1NaSsE_ci2Dmf)FJ(hYuI4jo4HBl2L)Ln,DkVoD\F^pAXjdq>U6fr;QZirlb>\s8N#prVl`o
qu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]
Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+QkrdFcrrdXp!re19,reg]7
rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_
rqHEfrqcWkqu$Hlqu4\:_Z0W7qu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Ma
rl+lQrkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdOou
r.+d!re:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*Crk\TQrlG)arm:Ymrn7;+rnm_5
roF(Arp0RNqsXOTrq-3arqQKgrqcWkrqucoqu4J4_Z0W7qu-NlrqlThrqZQgrq69_rpp'XrpKdQrosFF
roF(:rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\NrfmDFrfI,>rf$i6reUQ.
re:?)on*0oqgeZson*0r!/1H-L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R([/RN5]DfPD
_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQT2s2+g8rqQHkr;QTm
qYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?[JmE0Y5YO%VuELk
T`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])M?&P8Mi7Rnrf6u=rfI,Crg!JKrgNhV
rh'1_rhTOkriH+%rilC0rj_s?rkJHLrl+l\rm(Mirm^qurn7;.ro*k9roa:Frp0RPrp]pWrq-3_rq??d
rqZQirql]mqu-Ek_Z.:Krr2]kqtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[
rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rfR8F!L&`HPl@!JQi<EP
SGo)YT`1YaV#I7jX8]7#Yl:s-[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\
pAXgcq"speqtU-erkJKGs82fmrVl`oqu6Hkq>U0gp\sjbo`"F\nG_kTmJcALkl0`Dir7j7h>Z+,fDa7u
d/M;hbPoN\_u@IN^AbbD\Gil7ZMq',Xo>@"W;`XmU\g_`T)P8ZRf8`SR/WHOQM?a?Pl$aFQN!6MQiNNT
R@4&Crg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\rltGhrmUktrn7;,ro!e8roX4CrosFL
rpKdTrpp'\rq69brqQKgrqcWkrqucop&;`+\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@B
ro3q7rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kT
pmV2OqjdYVrgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'
hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQT)s0Mb)rqlZnr;6BjqYp9hp\smco`"FY
n,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrba8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jq
VYd4hV!k)UV#I4iV?!LpVl0Nnri?%#riZ7(riuI.rjDa8rjr*CrkJHKrl"fUrlP/brm1Sjrmh#"rn7;,
rnm_6roO.Broj@IrpBUOrpp'\rq??crqQBerqlTjrr)`n[f<]6qu6Tnqu$HjrqcWirqQKerq69_rq$-Y
rpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>rjMg6rj2U0qlp(&riPsr
ri5amql9FlriH1'!NrU&Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2ir8$<
kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirjMj5s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"V
mf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2ZMUohYl:p,
Z2h33Za9Y<rjMg8rji$?rk83Drk\TOrl4rYrlb;erm:Ylrmh#"rn.5+rnm_5ro=">roX4Erp0ROrpTjV
rpp'\rq69arqQKgrqcWkqu$Hlp&;E"YlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0
rnIG)rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH
_#D1L_u@UR`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZi
rilF,s7QBjrVQNlqu6Hhq>U0gp&=U_oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMl
cMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)
rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hlp&;2qWrMtqqu-NlqtpBhqt^6c
rq??arq$-[qsaUQrpB^Mroj@EroF(<qr%J1rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>
rknWOrl"lWr5S`XrlY5`rltGfrm:YjrmC_ormq)#rn7;,rndP1ro="=roa:Frp'LMrpK[Qrpp'[rq69a
rqHEfqtg<hqu$Hlp&;)nVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1
rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8
j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6Ais/5nirqlZnr;6BjqYU*fp\smcp&"@[
nc&%Wn,DbSm/H;Ll2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqrdehGkd-8mUd/22jdK.eErmUbo
rmh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeVuN@g
rr2ThrquQfrqQBbqt9s\qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4W
rm_#"r7:l"rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)Y2X
rr2]krquZjrqcNfq"Od[qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)
h#?.,hu;R5hu;U6ir8$<jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frgWqTs7QBdr;6Bj
qYU*fq"XO]oD\=XnG_nUmf)SPli-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">
rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^S,\cRq#:'erquZjrqcNfqtL*`rq-*Zqsj[Srp]pUrpKdP
rp0RKroj7BroX+>roF(=p#>H!p#5u3!TW5>jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!c
qYpBhr:p6crg!MBs8N#grVl`oqtp6eq=s^]p&=U_o)A1Yn,DhUn,)PPmJcJLli-2Hl1O9/kOds=kii$1
qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?crql]mp&4deN;nk:p&=jerquHdrqcNfrqQKerq?6^rq-3]
rpp'YrpTjUrpTaPrpBULqs3)'rp'RNq<\+Jq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hlo)=UJ
LB%/Mo)8RcqtpBhqt^6dqtL*`qt9s\qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^
p\Xabq>:$fqtp<arUp/Hs+14Ks82fdrVl`lqtU$bq>U0ap\XX\o_\7Zo)%t5nG_qXo)/(XoC_bTp%\:Y
q#:*aqYpBhr:U$]rdk(Ls+14Ks760drV6<cqu6Hbq>U0dp\smWp&"CDoCqkXo^qhLqtC$`qtU'aqtg*b
q#(-im/DS9!<7WMo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s7cPEs60LX
rpTg\r;6B^qUG<@qX+.YqtU*XrV6ACs60K6s60LFrq63Lqr[bOqsaLRr9"!0s60K6s4RGFrosCPr9!nN
r:^'TrUTr=s4mX*s2=s(rm^lHrp'K6s2=qgs2=rOrp'K6s2=qgs+13$s/l<Ps+13$s/l<Ps+13$s/l<P
s+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<O
~> %APLeod
EI
120 0 0 52 68 340 cm
BI
/Width 360
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$
JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?ql
JcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcDhOf)>^Lrdk*%
s+13$s2b5irdk+4s2k:ls2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;o=s+14's7QBUrUTmKqtL$^
r9XCQrdk*Rs+13$s7QEbrosCPr9!nCr9XCQrfmH)s+14-s8N#^rUp*]qptTEqYL*do).kQqu20HZi>UV
JcGWIrr20\p&+L[eGB(>o).kQqu2r^ao?qlkl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE]`3Q_K`D&N
qu6'_q#($do(pl3m/$_Yq#'UZq#6rdao?qlo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`
qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*^rUp/ns2k:ls7cQm
rpTgbr:p0gqYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcEpnJcCr6rr2Kerr)io
q"t'eqt^$^qtKdWqt9s\h=LO9rq5jUrqH3_rqZHfq"ssdo)8ReYQ)`EJcG]Kqu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rp^!Zr:9jYp%87Vq"O[\rqZ?crqlTjp&4R_JcF7"JcD/<qu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rpfmVrq#gTrq6'\qtU0dq"k!equ$-cp&;K$ao@+qqu60brquZjrqcNfrqQBbrq?6^
rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.Wo`"O\pAXg`q#:*dqYpBhr:U$]rdk+*s+13E
s82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\LmdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xab
q>:$fqtp<arUp0+s2k:ts8N#drVl`lqu6Heq"XR^o_\7Zo)%tVnGD\LmI0B0l1F<>lhKlHn,)VRnb_nV
oDA1TpA"F[qYpBhr:9gcrdk+*s+13Hs8N#drVl`lqu6Hkq"sj]pAX^]oD\=Xnc&%Tn+c;=lgO*,lhKlH
n,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrk\WVs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQ
m/-,JlMKi=kjR^,kQ0o2ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkr
o)8RcrqlThqt^6cqtL!\rq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjV
rposYrq6'\rqZ?crql]mp&4de`;dsZQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LH
qrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<d
rV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"VnG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!
ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!cqYpBhr:p6crltJbs-<WTrVl`lqu6He
q#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhZ2U4i;;O5j87p:jo4HBkl0iGlhg&J
mf)\SnG)SRo`"O_pA"F[qYpBhr:U#>s69Q7s0;UprVl`lqu6Heq#:!dp&=U_o)&"WnG_nUmf)SMli-/J
kl0cBjo4?<j8S';i:Z!ihYZ4-i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U$5
s2k;.s8N#mrVl`lqu6Hhq=s^`o_\7ZnGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekq
g\9J(gt_nbqqqD2rnm_6ro3q<roO.Aroj@Grp'LLrpB^QrpTaRrq$$Zq"Od`qtg<hqu$6fqu20Hn,It=
[/^.)q#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2qq_/)qqLSnrnI,$
rn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*he,RPiT)\fhp&4mf
q"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq!7q)!
rn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu20Ho)F:@])Vd/
p&4mfq"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq
qptc!rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-Ekf)NklT)\Ta
rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/rnRM+rn.5%rmq)!rm^_kqp>>g
rm:>arm:Yjqp>;ir6kSormh#!rn%/%rn72(rn[S2ro*k9roO.Aroa:Frp'LKrpB^Rrp]pXrq$-]qtC$`
qtU0drqlTjq#,dDo)F:@])VR(rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/
rnRM+rn.5%rmq)!rm^_kqp>>grm:>arm:Yjqp>,drm^qtrmq)#rn.5'qqV2,rnm_6ro3q=roX4CrosFI
rp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6ff)NklVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdP
rp0RJroj@Ero=";qr%J1rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._p
ec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3
rqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMf
ci25ec2PrUbPTN_c25f`ci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[
p&=[ap\sseq>:$fqtU-brnmats/Q+rrqlZnr;6BjqYU*fp\smcp&=R^o)%qUmf)VQlMg#HkPjQAiqq[5
hYu@1g&BY'f)F.tdf.Sld/M>ic2Pocb5TN^`r!aS`;@I@_Z%IM`;[^U`r*jUao9H^bPocccMl2ici2>k
e,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp/@s+13is82fmrVl`l
qu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W
`W!gQ_sbJA_u%CO`V[[Sao9H^bPocccMl2ici2>ke,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"X
oD\F^pAXgcq>:$fqtp<jrUp0Os2k;@s8N#mrV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7
hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8^&,SA^];7L_Z%IP`W!mVaSs<\b5TWa
c2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Yo`"O_pA=Xaq=sj^rVQSFs+13is8N#m
rV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y
`;[[R_Z%CK_#(n8^&,SA_#)"J_u@XS`r='Yao9H^bl5ldd/MGle,Insf`'S'g]$(/hu;U6jo4EAkPjcG
li-;Nn,DkVo)A:\p&=[^q#:*aqtU-eroO1%s02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZB
iqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[
rkABHrkSNLrkn`Rrl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<h
qu$Hlq#5sHJcEsoq#:0hrquZjrqcWhqtL*^rposUrpTjSrp0RKroj@Bro3h5rn[S.rn.5$rm^qorm1Sh
rlb;`rlG)Xrl"fRrk\TLrkJHHrk8<Dqn)j=qmlL3rjhp;rk&0Brk8<FrkJHJrk\TOrl"fTrlG)\rlb;d
rm1Sjrm^qurn.5)rn[J0ro="=roj@Grp0ILqsaUVrq-3aqtU'brqlTjrr)Wkkl8d)ZiBq%qu-NlqtpBh
rqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?
rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2
i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/Is+13rs82fmrVl`lqu6Hkq>U0gpAXaa
o`"F\nc&"Vmf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2
ZMUohYl:p,ZMq30[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2i;Vd9jo4EAl2L#J
mf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp0Xs2k;Is8N#mrV69hq>U0gp\sjbo`"F\nG_kTmJcDMkl0cE
jSn0<hu;I2gA]e)eGdqrdJhGjbPoW_`r<pU_>_7L^&GYC\Gir9[JmN3ZMq',Yl:g&XT#9bWrB'rX8o@'
Xf_T,ric=+rj2U3rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjU
rpp'[rq69brqQKgq"sjbqu2KQJcF'rrr2]kq"t'drqQKerq69_rpp'XrpKdQrp'LHroa:Aro3q7rn[S-
rn7;#rmUkorm(MdrlP/Zrl"fPrkSNHrk&0>rjMg6rj2U0ric=*riZ."ri>:`ri>ptriQ1(ric=+rj2U3
rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjUrpp'[rq69brqQKg
q"sjbqu6$`aoA^Irr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mb
rl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+
ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBh
r;QZlreg`,s3L`ErqlZnr;6BjqYp9hp\smco`"FYn,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrb
a8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jqVYd4hV!k)UV#I4iVZ*LmWW&stXo>L&YPtg+ZMq92
\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZl
rpKg.s1/1/rqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X
_>_7L^Ab_C\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc52\T)kRVrh07arhKIg
rhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@Grp0RPrp]pWrq-3_
rq??drqZQirqlTjrr)`nNW4S0ec5XJqu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7rndY.
rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2OqjdYV
rgs+]rh07arhKIgrhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@G
rp0RPrp]pWrq-3_rq??drqZQirqlTjrr)`nnc-`2\c;I'q"t'drqQKerq69_rpp'XrpKdProsFFroO.<
rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_rgj%YrgNhSrg<JHqj$r@
rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,
hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU,Ls+14#s7lQfqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlF
jo46<hu;I2g&BV&eGdhocMl&ea8X$V_#D(I]DfA?[JmK2YPtU%WrAsrV#I+fT`1S_Sc5/YRf8`SR/!!E
Q2$UCQ2$[ER/WNQRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,
hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-[s2k;Rs8N#mrVQKkqYp9hp\smco`"FYn,D\Qli-)H
jo46<i;VR3gA]\&e,I\mc2Piaa8WpS^](qG\c0&:ZMq*-Xo>C#VZ*CjU&L_aT)P8ZRJrTQQN!-JPQ$aE
OQMW$OT(CCP6$l2rfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&
rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu2fZJcFC&rr2]kqtpBhrqQKerq??`rposTrp9XM
roa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDG
rf[8Bk)]D$rf[8ErfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&
rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu6?iaoB6Xrr2]krqucmrqcWirqQKdrq69_rpg!W
rpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>C
rf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)
[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*gqYpBkr;6Hirg*S8
s5*eTrqQHkr;QTmqYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?
[JmE0Y5YO%VuELkT`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])MZ/P5N;ek:O8b7?
PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhU
nc&1[p&=[aq#:*gqYpBkr;6HirqcZ:s2+g8rqQHkr;QTmq>U0gp\sjbo`"F\nG_kTm/H8KkPjTBi;VR3
g]#e'e,I_nc2Piaa8WpS^](nF[f3W4Yl:a'WW&gpU&L\`Sc5&VQi<9LOoCIANrFt9MZ/J3LAQ]"KC=Bd
KDpQ)LAZf*M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LSb5TZbd/MPof)FG'
hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQS[s+14,s8N#mrVl`oqu6Ejq#:$ep&=U_o)A.X
mf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[_>_4K]`,A=Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>
MuJV5M>i8,L%p;hJbXlsL&6W(M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LS
b5TZbd/MPof)FG'hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQTjs2k;Xs8N#prVl`oqu6Hk
q>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfS
PQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3hIJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^
V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZl
rg*S8s5*eTrqlZnr;QTmqYp<iq#:$eo`"FYn,D\Qli-)HjSn*:hu;C0g&BG!d/M>iaSs0X_>_1J]Df>>
Z2Us+Xo>3sU]-qcT)P5YR/W<KOoCF@NW+k8M>i8/K`6W'JGXikIf"QgI/\QhIf=ioJGt3#L&Qi+M>iG4
NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnW
o`"Uaq#:*gqYpBkr;QZlrqcZ:s2G$;rqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%
df.Vmbl5]__Z%=L^&GJ>Zi70-XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFM
FSL"XGQ<!iH$TC8rd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoasric=-rjMg>rkSNMrlG)^
rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTjrr)`nSH"0?iW&oVqu-Nlrql]krqZQf
rq??`rpp'XrpTjProsFFro3q8rnm_.rmq(srm:YgrlG)UrkJHGrjMg4ric=&ri#glrh07]rgNhNrf[8A
rf-o7reUQ,rdt-!rdausrd=]krd"KfpiZ%IpiZR\rd"Khrd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhW
rh07drhoasric=-rjMg>rkSNMrlG)^rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTj
rr)`n!<:1@aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'rmUknrlb;]rkn`Mrk&0>
riuI*ri?$prhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[qf2(Drc.gUrH&'^FT-F^
GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/
i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVleds+142s8N#prVl`lqu6Hkq#:!do`"I]nG_kTm/H;L
kPjTBi;VR3g]#e'e,I_nbPoQ]_u@FM]Df>>Z2Up*X8\spU]-nbSGnoTPl?dDNW+k8L]3#,K)U<"If=`o
H2`'fGPcO^FT-=XEURlGEVjeRFT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$
Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVlcrs2k;as8N#m
rVl`oqu6Hkq#:$ep&=U_nc&%WmJcGNkl0]CiVqa6g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^
SGnfQP5^OAMuJS4LAlc'JGt#sHiA?jGlDgaErL(XE;OSQDWYg5DZ4PSE;X\SEW1%YFT-OaH2`0iIf=ir
Jc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tW
oD\F^p\t!fqYpBkr;6Hirh'4As6'F]rqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!
d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qSDuOY:
D>S5MDu4MQEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`
d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6HkrW3#tbQ#ccrr2fnrqucmrqcWhrqHEc
rq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#SrkABDrj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$
rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4E!,;OLCAr#JD#S;KDuObUF8g@^GlE'hJ,Y#u
KDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJa8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`
p\sseqYpBkr;QZlrh'4As6'F]rqlZnr;QTmqYp9hp\smco`"F\n,DbSli-,IjSn0<hu;@/f)F+sd/M5f
a8WpS^AbbDZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4KDpH$J,XfoH2`!dF8g4WDuOVQD#S5LCAqrEBDuN3
Ac$*=BDuWECAr#JD#S;KDuObUF8g@^GlE'hJ,Y#uKDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJ
a8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`p\sseqYpBkr;QZnrW3#tbQ#ccq#13hrqcWirqHEc
rq69]rp]pUrp9XKroX4>rnm_2rn%/!rm:YgrlG)VrkJHDrjMg1riH*urhBC`rgWnPrf[8Are^W0re(3#
rdFclrc\9_rc8!Wrbh^OrbDFHrb2:Crakt;raY2%raYh9!+c1BAc?<@B`;`FCAr&KDZ4VSErL1[G5cge
I/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;^]).Ma8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Y
p&=[ap\t!fqYpBerLa+@s6'FWrVl]nqYp<ip\smcp&=O]nG_nUm/H8Kk5OB>hu;I2fDa;!d/M8gaSs*V
^](hD[f3N1XT#3uUAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4JOCAqrHB`;WCAc$$;A*IJ%
A,Bg9Ac?<@B`;`FCAr&KDZ4VSErL1[G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;^]).M
a8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Yp&=[ap\t!fqYpBgr;llqbQ#ccq#13hrqcWirqHEcrq-3Z
rpTjSrp'LGroF(:rn[S-rm^qprm(Marl"fNrk&0<riuI)rhoairh'1Yrg3VGrf-o8re19%rdXoorcnEb
rc.pVrbqdPrbDFHrb)4AraYq:raGe5ra>D+pg3`&ra>_4!+>n:@K'a8A,^'=BDuWEC]8/LDuO_TEW1+[
GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32]DfSE`;[jWcMl5jeGe2$h#?72jSnBBlMg5Nn,DhU
o`"O_p\t!fqYpBerLa+@s6'FWrVl]nqYp<ip\smco`"@Zn,DbSlMfuGjSn*:h>Z.-eGdkpcMkoa`;[ON
]Df8<Z2Um)VuEFiTDk;YQi<*GNW+k8K`6Q%J,XfoGlDjbEW0qVDuOSPCAqrHBDuKAA,]s:@K'X5@.dn%
?MIn,@/aO4@K'a8A,^'=BDuWEC]8/LDuO_TEW1+[GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32
]DfSE`;[jWcMl5jeGe2$h#?72jSnBBlMg5Nn,DhUo`"O_p\t!fqYpBgr;llqbQ#lfrr2fnrquclrqZQg
rq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)UrkABDrj2U.riQ0qrh9=_rg*PIrf@&;reLK)rdauq
rd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*kun!hr`f>+!F/n/?2e4.@/aX7A,^'=B`;cGD>nJQ
EW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_T
o)A7[p&=acq>U6fr;QZlrh]XGs6BX`rqlZnr;QQlq>U0gp&=U_o)A.XmJcGNk5OH@iVq^5gA]\&d/M8g
aSs'U^AbbDZi73.Xo>-qU&LY_QN!*IO8b+;L]2o)JGsrqH2_maErL"VD>n;LB`;TBAH$';@/F=.?2e+.
>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(
Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fquHZrrVcWmdJqVorr2fnrqucm
rqZQgrqHEbrq$-YrpTjQrp'LDro3q7rnIG'rmLekrlP/XrkSNFrjVm2riH*trh07]rgNhLrf@&;reCE)
rdXoorce?`rc%jSrbVRIrau.?raPk7ra5Y1r`oG,qcWo#h,jPW!E`J'=oMY)>lJ%.?iFL5@fBp;B)ZKC
D#S>OE;jtYGQ)sgJ,Y*"LAm/2O8b=ARf8lWT`1nhXT#I'\,O#=_#D:Oao9Tbdf.ktg]$+0ir8$<lMg/L
n,DhUoD\F^p\sseq>U9jr;6Hlrh]XGs6]jcrqlZnr;QTmq>U0gp\sjboD\7Yn,D\QlMflDir7j7g]#e'
df.Pkao96X_#CtF\,NW2XT#0tT`1M]Rf8KLO8b+;LAli)J,XfoGQ)^`E;jbSD#S,IB)Z??@fBd7?iF@1
>lIt)=oMOZ=8Q,!=oMY)>lJ%.?iFL5@fBp;B)ZKCD#S>OE;jtYGQ)sgJ,Y*"LAm/2O8b=ARf8lWT`1nh
XT#I'\,O#=_#D:Oao9Tbdf.ktg]$+0ir8$<lMg/Ln,DhUoD\F^p\sseq>U9jquH]nrVlfDs3^lGrqlZn
r;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/WPl?dDN;eY4
Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;TYq<WQ6%r`B)$r`T5(r`oG.
qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4
ro3q@rp'LLrpTjWrq-3arqQKgrql]mqu-NnV>l,HmJm1bqu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8
rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.
r`oG+r`T5&r`B)"qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3
rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKgrql]m!<)io
rr1=FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUknrltG]rkeZKrjMg3riZ6trhBCa
rg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!r`&kqr_iVjh,+)J!)i_mr_req
r`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]
rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu3PoJcG6>rr2fnrqucmrqcWgrq??arpg!W
rpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaurrcnEbrc%jSrbVRH
ral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_`Pjr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZ
rd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??c
rqcWk!;llqr;QZlrm^tts8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)dJhGjb5T9W^AbbD
Zi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"<W5qr;Z9Pm;#=&]
:A@QS:B"#h;#F/h;>sJm;uTer<rQ2"=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=otK`6r0O8b@BRf8oX
UAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)hu;[8k5OTDm/HGPnc&1[p&=^bq>U6iqu6Qkri#jJs7$'frqlZn
qu6Hkq>U-fpAX^`nc&"Vm/H5Jk5OE?hu;C0f`':tcMkuc_Z%:K]Df/9YPtR$UAgb`Rf8NMOT(4<K`6Q%
If=TkFoHC[DZ4GNB`;QA@K'X5>Q.h*=oMM%<rQ+u;uT\o;>sDh:\@KX:%D'Y:]!uf;>sJm;uTer<rQ2"
=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=otK`6r0O8b@BRf8oXUAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)
hu;[8k5OTDm/HGPnc&1[p&=^bq>U3jqZ6Tkrr)`neGn%urr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:
rn[S,rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&
r`B(ur_iViqbR2dqb?`Wpe10Or_3Afr(d,bqb[8jr`&kur`K/&ra#M1ra>_8rb)4FrbqdVrcJ-drdOis
reUQ3rfI,FrgWn[rhf[qrilC2rk&0Frl>#]rm:Yprn7;,ro!e:roa:HrpB^Srpp']rqHEfrqcWkrr)`n
W;hGKnGiLequ-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQ
rfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$WqbI#aqb[8j
r`&kur`K/&ra#M1ra>_8rb)4FrbqdVrcJ-drdOisreUQ3rfI,FrgWn[rhf[qrilC2rk&0Frl>#]rm:Yp
rn7;,ro!e:roa:HrpB^Srpp']rqHEfrqZWl!W2cnrVQTDs4%)GrVl`oqYp9hp\sjboDA%Vm/H8KjSn0<
hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB@fBa6?2e%,=T2>"
<;oep;#=&c:&[ic9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fs
LAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq>U6fr;QYns+14>
s82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(
IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W9`@cc:]!uf;Z9Vo<W6,"
>5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<
l2L&HnG`%Yp&=^bq#L6lqYL*err(@HeGoOHrqucmrqZQgrqHEbrq$-YrpB^Mroj@Aro*k5rn%/!rm1Sd
rl"fNrjVm5ric=!rhKIbrg*PHrf6u5re(3"rcnEbrc.pRrb;@EraGe5ra#M+r`B)!r_reoqbR2cr_3)Z
mmun;oLSmNpe(NZr_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRRrcS3brdXp"reLK5rf[8Hrh'1brhob!
rj2U5rkJHNrlY5drmUkurndY4ro="Arp'LMrp]pYrq69brqQKgrql]mrr&eqJcG6>rr)iorql]jrqQKe
rq69^rp]pSrp'LHro=":rndY+rm^qnrlY5YrkJHArj2U-rhoajrh'1Urf[8@reLK*rdXolrcS3[rbVRJ
rb)4=ra5Y1r`T5%r`/qrr_iVhr_<Acpe(!Gmmlh;pe(NZr_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRR
rcS3brdXp"reLK5rf[8Hrh'1brhob!rj2U5rkJHNrlY5drmUkurndY4ro="Arp'LMrp]pYrq69brqHKh
!VuQjqu6NmrRCl!s8N#srVl`oqu6Ejq#:$eo`"C[n,DYPl2KlFiVqa6h#>k'df.Pk`r<gR^&GG=Z2Um)
U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk:]=,g9`%KX8c)$/7KGtJr^Z`T
r_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1rk8<Jrl4r_
rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`nY5a(QoDeghrr)iorql]jrqQKerq-3[rpTjP
rosFFro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tNrf6u9re(3#rd=]frc8!Vrb;@DraPk6r`oG+
r`9"tr_`Ykr_NMgr_32^pdt?Qe40F-pdtHXqb6l^r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"
repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'rndY5roa:Frp0RPrpp'\rqHEe!;QZkq>U9jr;QZl
rn@D(s8N#srVl`oqYp9hpAXaao)A.Xn,DSNkPjQAi;VO2f`':tcMkuc_Z%7J\c/i4X8]$rT`1G[Q2ZjD
M>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#;Z9Pj:]=&e9D_<[8GbpV7efFI7.3M<7/]RP7JfRR8,GjV
8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZb
dJheth#?72jSn<@l2L/Nnc&+Yp&=^bq#:-hqu6QkriZ9Ps7?9irr2lqr;QQlq#:!dp&=O]nG_nUl2KlF
jSn*:h#>t*dJhGjb5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3fE;j_RCAqcC@K'X5>5hY'<rQ"r
;>X/g9`@]^8cD9X8,c!Q7JK:>6hj(E7JfRR8,GjV8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[
HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZbdJheth#?72jSn<@l2L/Nnc&+Yp&=[cp]:0brqcWk
rr)`ngAfn,rr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"rhTOarg3VI
rf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*_-/r'^NQqaUQT
qag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFMrc8!^rd=]sreLK3rf[8Jrgj%ari,n"rjMg<rkSNQ
rlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq??crqcWkqu-NnY5a(QpAb-kqu-NlrqcWgrq??arpg!VrpB^K
roO.=rnm_/rmq(qrlb;\rkSNFrjMg/ri,mmrgj%Trf[8>reLK)rd=]hrc8!UrbDFFraGe5r`oG)r`9"t
r_WSir_EGdr_*5_r^coVr^QcRpdEq*pdG*MqaUQTqag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFM
rc8!^rd=]sreLK3rf[8Jrgj%ari,n"rjMg<rkSNQrlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq6?d!Vc?f
qYpBhrVlfMs4[MPrr2lqr;QTmqYp6gpAX^`nG_kTm/H2IjSn*:h>Z(+eGdenao96X^Ab\BZi7'*VZ*7f
Rf8QNO8at7KDpB"GlDgaDuOPOBDuE?@/aI2>5hS%;u9Dj:B!rd9)D3W8,c!T7K,^%6i9=K7/fXP7fGpW
8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gn
g&Bh,i;Vg:kPjiImf)_To`"O_p\t$gqu6NmrVlf!s+14Ds8N#srVl`oqu6Hkp\smco`"@Zmf)SPkPjQA
i;VR3f`'D"ci2&c`;[LM\c/r7XT#*rT`1DZPl?aCM#N&+J,X]lFT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h
9`@Z]8c)$W7f,XR7*@sp7/fXP7fGpW8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7
Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,i;Vg:kPjiImf)_To`"L`pAt$_rqcWkrqucorr1XOh>dKR
qu-NkrqcWirq??`rpp'XrpB^MroO.>rnm_/rmq(rrlb;\rk\TFrjDa/rhoairgs+RrfI,<re(3#rd=]d
rc.pTrau.>ra>_1r`T5$r_i_mr_NMfr_!/]r^d#YqaUQRr^?3Bh*V'-o0`LFr^H]Rr^ZrYr^m)^r_<Af
r_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDRrhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=
rp'LLrp]pXrq69arqZQirql]nqu3l#JcGQGrr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_g
rl4rRrjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiT
r^HfSmmGntmmI(Br^H]Rr^ZrYr^m)^r_<Afr_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDR
rhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=rp'LLrp]pXrq-9b!VZ6dq>U6iqu6Qkrn[V1s8N#prVl]n
qYp<ip&=U_nc%tUli-/JjSn-;hYu1,eGdenao96X^](bBZMq!*U]-nbS,STMNW+e6Jc:)sH2_j`DZ4GN
AH$$:?iF7.=8l1u;#X8i:B!oc9)_E]8,c!T7K,^A6et*-6h!JB7/KFP7fGpW8cD?]9E%]c:]=2i<;otu
>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bU
oD\F^q>U6iqu6QkriuKSs7u]orqlZnqu6Hkq>U'do`"C[mf)POl2KcCiVq^5f`'D"ci2&c`;[ON\Gif5
Xo>*pTDk>ZP5^I?M>i)*IK"NkErKtUC]7lD@K'X5>5hV&<;o_n:]=,g9E%Q_8cD6Z7f,XR7-m:s6L7)=
7/KFP7fGpW8cD?]9E%]c:]=2i<;otu>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B
`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bUo)SFap%A=[rqcWkrr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3d
rdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nZ2]CT
q>^Hnqu-NjrqZQgrq69^rp]pTrp0RIro="9rnRM(rmLekrl>#UrkAB>rilC&rh07\rg<\Hrepc1rdXon
rcS3ZrbVRIraGe5ra#M*r`/qqr_WShr_3;`r^m)[r^QcRr^?<Eb<kkhqaCEPqaUQUr^m)]r_3;cr_WSl
r`9##ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LN
rp]pY!;-Bcp&=acq>U6irVQTMs5!_SrqlZnqYp9hp\sgao)A+Wm/H8KkPjH>hYu7.e,I\mbPoEY^](hD
Yl:^&VZ*4eRJrELNW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr:]=,g9`@Z`8H)-Y7f,XR7.N^i6M<b=
6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4PQ%!LTDk_eXT#I'])KGC
_u@jYci2DmgA]q-iVr$>l2L&Kn,DnWo`"Uaq>U6irVQT!s+14Gs8N#prVlZmq#:$eo`"F\n,D\Ql2KlF
iVq^5gA]S#ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(HiA3fEW0hSB`;QA@/aF1=oMG#;uTSl:B!rd
9)_B\8,c!T7K,^G6c)1_6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4
PQ%!LTDk_eXT#I'])KGC_u@jYci2DmgA]q-iVr$>l2L&Kn,DkXoE"UVrqHEfrqcWmqu5FOh>d9KrqcWh
rqHE`rpg!Vrp0RJroX4<rnRM+rmLekrlY5Wrk8<?ric=#rhTO`rg3VHreg]/rdXomrcJ-XrbMLFraGe4
r`fA(r`&kor_NMer_!/]r^ZrWqaLKPmmG>dp-S=;r^?WPr^QlWr^m)^r_3;er_i_pr`K/'ra,S4rau.F
rbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjVrq$-`rqZQiq#.Jt
JcGQGq#13grqQKerq$-ZrpTjProsFEro!e2rn7;!rm(McrkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"Kb
rbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B_F!f\r^?WPr^QlWr^m)^r_3;er_i_pr`K/'
ra,S4rau.FrbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjV!:p6_
oD\L`q>U6crS@M0s82cor;QQlq#:$eoD\:Zn,DVOkPjQAi;VO2fDa.rbl5]__#CtF[Jm?.W;`LiRf8QN
O8aq6KDp?!G5cO]DuOGLAH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V7K,^G6cVOb6M3_C7/fXP7fH!Y9)_K_
:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYrg]$.1jSnBB
lMg8Onc&.Zp\t!fqYU3irNZBRs7u]lrVl`oqYp9hp\sd`nc&"VlMfuGjSn*:h#>q)d/M8gaSs!S]Df5;
Y5YC!U&LM[Pl?aCL]2r*If=NiErL"VB`;QA?iF=0=oMM%;Z9Ml:B!oc9)_E]7f,XR7.N^U6M3_C7/fXP
7fH!Y9)_K_:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYr
g]$.1jSnBBlMg8OnGr.]oCMtUrqZQiqu$Hlh>c=2rr)iorql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"p
rlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfS
njC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(
rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoZ2]CTq>^HmrqucmrqZQgrq??^rp]pT
roj@Cro3q6rn@A%rm:Yfrl+lOrj_s5ri?$prh'1Vrf[8@re19#rd4Wcrc%jQral(<ra5Y-r`B(ur_WSh
r_3;_r^d#Yr^QlUr^?<EYX8"Mr^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192
rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@LrpTpY!V5g\pAXgcq>U9jr;QZNs5!_SrVl`o
qu6Ejp\sjbnc&"VmJc>Kjo49=h>Z(+eGdbmao96X^&GM?Z2Ua%U]-kaPl?aCMuJ>-If=ZmErKtUCAqcC
@/aI2=T2>";Z9Ml:&[fb8cD9[8,bsV7.3L]6L@,16iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#?2e:3AH$?C
DZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?`;[mXcMl>mg&Bh,ir8*>kl0uKn,DkVp&=^bq>U9jr;QZ"
s+14Gs8Murr;QTmq>U-fp&=L\n,D_Rkl0]Cir7d5f`'D"cMkrb`;[IL\,NZ3WW&[lT)OuRO8b(:K)U5u
HN%saDZ4DMAH$!9?2dt*<W5nq;#X2g9E%N^8H)-Y7K,^D6a/oJ6iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#
?2e:3AH$?CDZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?`;[mXcMl>mg&Bh,ir8*>kl0uKmf;kYnaZVO
rqHEfrql]mrr([Qh>dKQrqucmrqQKdrq69\rpTjRroj@Cro*k3rn.5!rltG`rkn`JrjDa/rhoairg`tO
rf6u7rdauqrce?\rbVRJraPk6r`oG(r`/qpr_WSgr_*5]r^ZrWr^HfSog?G[l9b/2r^?`Sr^QlWr^d#]
r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUkurnRM3roO.C
rpB^Rrpg!\rqHEerql]mrr',%JcGQGrr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<
ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EHVaC&Dr^?`S
r^QlWr^d#]r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUku
rnRM3roO.CrpB^R!:^*[nc&4\p\ssequ6NmrS@M3s8N#srVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8gA]\&
dJh>g`r<gR\c/r7YPt?sT)P/WOT(1;LAl`&HN&$cDuOMNBDu<<?2e%,<W5qr;#X5h9E%N[8,c!W7.iq*
6N0:85lO(G6KCK16i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<RJriXV#IRs
[/RW8_>_IRbPoogec+;%hu;[8k5O]Gmf)_To`"O_p\t$gqu6QkrjVoYs8;orrr2lqr;QQlp\smco`"@Z
mJcGNk5OE?hu;@/f)F(rbPoN\_>_"EZi70-V#HtbRJr<IMuJJ1JGsloFT-4XCAqlF@/aI2>5hP$;uTVm
:B!oc8c)$W7fGgK6f:<160UZ66/=m)6i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&
N;eq<RJriXV#IRs[/RW8_>_IRbPoogec+;%hu;[8k5O]GmJu_WnF6GLrq69brqcWkrr)`nj8\';rr2oq
rquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHBrj)O*rhBC_rg3VFreg]/rdFcjrcA'Urb;@C
ra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KLj?iN,r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1
ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWk
rr)`n\,V$Zr;Zcqrr)iorqcWgrq??_rp]pSrp0RFro3q7rn7;$rm:Yerl+lOrj_s5riQ0orgj%Trf@&9
re:?"rcnE`rb_XKral(:r`oG*r`/qrr_NMgr_*5^r^ZrWr^HBFj$NW/k!8o3i'R*(r^HfUr^ZrZr_*5c
r_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RN
!:U$YnG`%Yp&=^bqYpBkrVQTSs5<qVrr2lqr;QQlp\smcoD\7YmJcGNjo49=hu;:-e,I\maSs*V^](\@
Z2Uj(T`1G[QMupDM>i/,I/\?hErKnSB`;N@?iF:/=T2;!;>sAj9`@Z`8cD3V7JK7+6JXp*6K(9+6iKOO
7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-
ir8'=li-;NnG`%Yp&=^bqYpBkrVQT's+14Js8N#srVl`oqYp6gpAX[_nG_hSli-#Fir7j7f`'A!ci2#b
_u@FM[f3Q2XT"mlS,S`QNrFn7KDp8tGQ)X^D#S,IA,]j7>Q.b(<;obo:]=&e9)_E]7f,XL6et)b5i"d%
6iKOO7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gn
f`'e-ir8'=li-8On,`%Jrq$-^rqHEgrql]nqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(t
rm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NK
j$N`2f0B=%!C9$36MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[
WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]
n,D\QlMflDiVq^5f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml
:B!oc9)_B\7fGjU7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^d
JGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu5XUi;`fU
rqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`rk\TIrj2U,ri#ggrgEbLrepc0rdauorcS3ZrbDFE
raGe3r`T5%r_i_kr_<Abr^m)Zr^HfSog@k.qa&du!C/pL60:N,6iKLQ7K,gV8cDB^:&[ug;Z9bs>5hh,
@K'j;CAr2OFoH^dJGt<&MuJq>RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L&Kn,DnWp&=^bqYpBk
r;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,W;`FgRJrELMuJG0
JGsloFoH@ZCAqiE@K'R3=oMM%;Z9Jk:&[fb8cD6Z7K,^J6fp`46.A1!60:N,6iKLQ7K,gV8cDB^:&[ug
;Z9bs>5hh,@K'j;CAr2OFoH^dJGt<&MuJq>RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L#LmfDnG
rpp']rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoae
rg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZ
r_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="B
rp9XQrpg![rqHEgrql]mqu4))JcGZJrr2oprql]krqHEbrpg!Vrp0RJro="9rnRM(rmLekrl+lQrk/6:
riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"rr_NMfr_!/\r^ZrVr^?NKj$LpSi'R<.r^?`S
r^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1
ro="Brp0XR!UoLVnc&1[p\t$gqu6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhoc2P]]
_#CtFZ2Uj(VZ*.cQi<-HM#N&+J,XWjErL"VBDuH@@/aF1=T2>";#X5h9`@W_8H)*X7K,^M6g6r:6-V[j
5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5McXT#L(]DfVF
`W"-]dJhYph#?41ir80@li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7
h#>h&d/M;h`W![P]Df)7XT#*rSc4uTOoC19KDpB"G5cO]DuODKAH$!9>lIk)<W5ho:B!rd8cD9[7fGjU
7/0.66N09i5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5Mc
XT#L(]DfVF`W"-]dJhYph#?41ir80@lN$ASn*g8Grq-3`rqcWkrquZmj8\';rr2oprqcWirq??_rp]pT
rp0RIro3q6rnIG%rm:Yhrl"fNrk&07riH*qrg`tRrfI,8re(3!rcS3[rb_XIrac"9r`oG)r`/qor_EGd
r^m)[r^QlUr^?NKlpCS8bs:tfr^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiu
reUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZm\,V$Zr;Zcqrqucl
rqZQerq$-YrpKdOroj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+rdOihrc.pSrb)4@ra>_1
r`K/"r_WShr_3;_r^d#Xr^HfSpd=C7qa&(ar^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4I
rc.p[rdOiureUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@H!:BmUmf)_To`"R`q>U9jr;6KR
s5<qVrr2ipqYp<ipAX[_nG_kTli-,Iir7g6g]#_%d/M8g_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[
D>n/H@fBa6>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_U5k@8'6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7
B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0lHmf)_To`"R`q>U9jr;6K&
s+14Js8N#sr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/eGdhobl5NZ^](hDYl:[%V#Hn`QMusEM#N&+If=Kh
EW0hSB)Z9=?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7
B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0iImK)bDrp]pZrq??erql]m
qu5XUj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&s
rcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%
ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQj
rqucorr0D,Jc>cNs8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdmS,S]P
O8aq6Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:B")h
<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@l2^5QmdC)D
rq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4ri5sm
rgNhOrf@&6rdk&srcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZ
r_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5roj@H
rpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5g]#\$ci2,e_u@CL
\c/i4WrAdmRf8TOO8aq6Jc:)sFoHC[D>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_G5itE46i0:N
7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFoHggK)UQ)O8bCCRf9)]WrB7%\c0>B_u@jYci2Dmg]$(/
iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5
g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ
6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%\c0>B
_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RI
ro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[
r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKIm
rilC4rkABKrlb;ermUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^
nG_kTli-,IiVq^5g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm
:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCC
Rf9)]WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWi
rq??_rp]pTrp0RIro3q6rnIG$rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%
r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y7rau.Hrc.pZrd=]r
reLK6rg!JPrhKImrilC4rkABKrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr0D,Jc>cNs8N#s
rVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_Z%7J\c/i4WrAdmS,S]PO8aq6Jc:&rFT-7YD>n/H
@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-A,^*>D>nPS
FT-[eJc:H(O8bFDS,T2^WrB7%\c0>B_Z%aXci2Dmg]$+0ir80@l2^5QmdC)Drq-3`rqZQjrqucorr1sX
j8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[
rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7
rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrquco
rr0D,Jc>cNs8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdmS,S]PO8aq6
Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:B")h<;oqt
>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@l2^5QmdC)Drq-3`
rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PE
reUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Ag
r`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZ
rq??erql]mqu4))JcGZJrr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%rm:Ygrkn`Mrjr*5ri5snrg`tR
rf@&7re(3!rcS3[rb_XHraPk6r`];&r`&knr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Ag
r`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rosLO!UfCT
nG`(ZpAXmequ6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhobl5Q[^](hDYl:^&V>d%b
QN!!FM#N&+If=NiErKtUB)Z<>?iF:/=8l5!;#X5h9`@W_8H)*X7/K@66Mj'n5k[JB60:N56i0:N7fGpW
8cDE_:B")h<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41ir80@
li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7h#>h&d/M8g`;[ON])Jr5
X8\spSc4rSOT((8KDp?!G5cO]DZ48IA,]j7>Q._'<W5ho:B!rd8cD9[7fGgQ6fp`46,Gnd60:N56i0:N
7fGpW8cDE_:B")h<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41
ir80@lN$ASn*g8Grq-3`rqcWkrquZmj8\';rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Yhrl+lP
rk&07riH*rrgj%TrfR29re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8bs;(i
r^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[rriuI7rkSNP
rltGirm^r&rnm_7roj@IrpTjVrq-3`rqcWkrquZm\,V$Zr;ZcqrqucmrqcWfrq-3[rpTjProj@@rnm_1
rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfS
pd=:4r^"Lgr^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[r
riuI7rkSNPrltGirm^r&rnm_7roj@I!:KsWn,DkVo`"R`qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbnc&"V
li-/Jj8S!9h#>n(df.Pk`W!^Q]`,8:Y5Y?uT)P,VP5^@<K`6K#GlDd`DuOGLAH$!9>lIn*<rQ"r:]=)f
9)_B\8,bsV7/0.06I8!q5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#MZ/e<
R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L&Kn,DkVo`"UaqYpBkr;6K&s+14Js8N#sr;QTmqYp6g
p&=L\n,DYPl2K`Bi;VO2f)F+scMkf^_>_+HZi7-,VuE:eR/W9JMZ/;.J,X]lF8g+WB`;QA@/aF1=oMJ$
;Z9Jk:&[ca8H)-Y7K,^M6fUMV5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#
MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L#LmfDnGrpg![rqHEgrql]mqu5XUi;`fUrqucm
rqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3
r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+
@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBk
r;6K&s+14Js8N#sr;QTmqYp6gp&=L\n,D\QlMflDi;VR3f)F+scMki__>_.I[/R6-W;`FgRJrELMuJG0
J,X`mFT-4XCAqiE@K'R3=oMJ$;Z9Ml:B!lb8cD9[7fGjU7/K@36Mj'u5lO(-6N0@O7/fXS7fGsX8cD?]
:B")h;Z9_r=oM_+@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg,M
mfDnGrpg![rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`Lrj;[.
ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$N`2f0B=%!C9$3
6MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XU
ci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,D\QlMflDiVq^5
f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml:B!oc9)_B\7fGjU
7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[
WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu5XUi;`fUrr)iorqcWgrq??_
rp]pSrp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7re(2trce?^rbVRIraYq7r`fA(r`&ko
r_NMer_!/]r^QcRpd<k(h*Cp*iBm<,r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6
rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.FrpB^Srq$-^rqHEgrql]nqu4))JcGZJrr2oqrqucl
rqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/
r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_h*Um(r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]t
reUQ6rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.Frp9^T!V#UXoD\F^p\t$gqu6Qkro=%:s8N#s
rVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8g&BM#d/M2e`W![P\Gif5Xo>*pT)P)UOT(.:K`6H"H2_maD>n5J
AH$!9>lIn*<;oep:]=)f9)_EW7fGgQ6et*+60:H362a./6N0@L7/07N8cDB^:&[rf;Z9Yp=oM\*@/a^9
C&VuKF8gF`If>$"MZ/_:Qi<QTU].CpZMqB5_#D=Pb5Tceec+8$hu;[8k5O]Gmf)_To`"O_p\t$gqu6Qk
rjVoYs8;orrr2lqr;QQlp\smco`"@ZmJcGNk5OE?hu;=.eGdhob5TBZ_#CkCZMq!*U]-kaQi<*GMZ/;.
If=WlF8g%UB`;QA@/aF1=oMD";Z9Jk:&[ca8bbdS7/K@-6Mj(25lO(*6N0@L7/07N8cDB^:&[rf;Z9Yp
=oM\*@/a^9C&VuKF8gF`If>$"MZ/_:Qi<QTU].CpZMqB5_#D=Pb5Tceec+8$hu;[8k5O]GmJu_WnF6GL
rq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTOb
rgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^$BIj?i`2qaC<N
r^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/
ro="?rp0ROrp]pZrq69brqcWkrr)`n\,V$Zr;Zcqrr)iorqcWgrq??`rp]pSrp0RGro="8rn@A&rmC_g
rl4rRrji$7ric<srgs+WrfI,;reCE&rd+QcrbqdNrb)4<ra#M,r`/qrr_WShr_*5^qa^WTr^?EHi'RE/
ks556h*V!+qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$E
rl4r\rmC_qrn@A/ro="?rp0RO!:U$YnG`(Zp&=^bqYpBkrVQTSs5!_SrVl`oqu6BipAXaanc&"VmJc>K
jo46<h#>t*e,IVkaSs*V]`,><YPtI!UAg\^PQ$UAM>i&)I/\?hE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb
8H)-Y7fGjU7.ip]6L$o16iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!hJGtE)NrG7A
SGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKn,DkVp&=^bq#:0ir;QZ"s+14Gs8Murr;QTmq#:!d
p&=L\n,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrqGQ)R\D#S/J@fBa6>lIh(
<W5kp;#X2g9E%K]8,c!W7K,^J6`39D6iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!h
JGtE)NrG7ASGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKmf;kYnaZVOrqHEerql]mrr([Qh>dKQ
rqucmrqQKerq??^rp]pTroj@Cro*k4rn.5"rm(Mbrl"fLrjMg1ri5smrgj%RrfI,;re(3!rd"K_rbh^N
raYq8ra#M*r`/qrr_WShr_3;^r^ZiTr^HfSpd;b^l9b85r^?`SqaUQTr^d#^r_EGhr_resr`K/*ra>_8
rbMLNrc.p_rdOj!repc;rg!JRrhKImrilC2rk8<LrlP/brm^r#rn[S4roO.CrpKdTrpp'^rqHEerql]m
rr',%JcGQGrr)iorql]irqHEcrpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.
rdOilrc.pTrbMLCra>_2r`K/"r_remr_EGdr^d#YqaUQRr^?NKVaC/Gr^?`SqaUQTr^d#^r_EGhr_res
r`K/*ra>_8rbMLNrc.p_rdOj!repc;rg!JRrhKImrilC2rk8<LrlP/brm^r#rn[S4roO.CrpKdT!:g0]
o)A@^p\ssequ6NmrS@M0s8Murr;QTmq>U0gpAXX^nG_kTkl0]Cir7g6gA]Y%d/M5f`W!XO\Gif5X8\sp
TDk2VP5^L@K`6K#HiA*cE;j\QAc?0<?iF4-=8l1u;#X5h9`@W_8H)-Y7fGjU7.N^`6L@,46iKLQ7K,dU
8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4Ob5Tceec+8$
hYuO6k5OTDmf)_To)A@^p\t!fqu6NmrNZBRs7u]orVl`oqu6Ejq#:!do)A.Xmf)GLjo49=hYu7.ec*qp
bPoK[^](bBZMpp(V>d+dQi<0INrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[8,c!W7K,^G
6a/oM6iKLQ7K,dU8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6
^])4Ob5Tceec+8$hYuO6k5OTDmf)\UncA=Prq??crqZQjrqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LG
roF(:rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGc
r_!/]r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&C
rgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$HlZ2]CTq>^?jrquclrqQKe
rq$-ZrpTjOroa:Aro!e2rn%.rrlkA_rkSNFrjDa.ri#girgNhNrf@&6re(3!rc\9]rbqdLrac"8r`oG*
r`B(sr_WShr_*5_r^m)YqaLKPnjBrSogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9i
rdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV!:p6_oD\L`q>U6fr;QZNs5!_S
rr2lqr;QQlq#:$eo`"F\n,DYPkl0`Di;VO2g&BCucMkuc_>_.I\,NW2WrAgnSGnlSOoC7;L&QT$H2_pb
E;jVOB)Z9=?N+1.=T27u;>sAj9`@]a9)D-X7efCH6cVOb6MNqC7/KIQ8,c-[9E%Wa:]=5j;uTnu>5hk-
@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTDli-APo)A:\p\t!f
qYpElrVlf$s+14Gs8N#srVl`oqYp9hp\sgao)A+Wli-,Ik5O<<h#?"+dJhGjb5T6V^&GM?Yl:[%V#Hn`
Qi<-HMZ/>/J,X`mFT-7YCAqiE@fB^5>Q.b(;uTYn:]=&e9E%Q\8,c!Q7/0-[6MNqC7/KIQ8,c-[9E%Wa
:]=5j;uTnu>5hk-@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTD
li-APnc8:_o^r.WrqZQirqucorr1aRh>dKRqu-NjrqQKerq-3\rpTjQrosFFro*k5rn@A#rm1Serkn`M
rjr*5ri?$qrh'1Xrfd>@reLK(rd4Wfrc.pSrb2:Ara>_1r`T5#r_relr_EGdr_!/\r^ZrWqaLKPnjCYg
p-SF>qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(rf-o@rgEbXrhf[rrilC5
rkABLrlb;ermUl#rn[S4roa:Frp9XQrpp'\rqHEfrqcWmqu3l#JcGQGrr2fnrqcWhrqHEarpp'Wrp9XK
roa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMg
r_3;`r^d#Yr^QcRr^?<E_F!o_qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(
rf-o@rgEbXrhf[rrilC5rkABLrlb;ermUl#rn[S4roa:Frp9XQrpg']!VH$`p\t!fqYpHjrn[V1s8N#p
rVlZmq>U0gp&=R^nG_kTli-,Ij8S!9h#>n(df.Pka8X!U^AbP>Yl:^&T`1J\R/W3HMuJJ1J,XcnFoH@Z
D#S,I@K'X5?2dt*<W5nq;#X5h9`@Z`8cD9[7f,XR7.N^l6Ms1C6i0:N7JfRR8H)3[9)_N`:&[ug;Z9_r
=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UTcMl8kf)FJ(hu;[8kl0lHmf)_T
oD\F^q#:*gqYpHjriuKSs7u]orqlZnqYp<iq#9scoD\7Ymf)POkl0WAi;VO2f)F+scMkl`_u@CL[JmE0
X8\dkSGnoTOT(1;LAl]%HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml:B!rd9)_E]8H)*U7K,^G6d%gh6i0:N
7JfRR8H)3[9)_N`:&[ug;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UT
cMl8kf)FJ(hu;[8kl0lHmf)_To)SFap%A=ZrqZQirr)`nh>c=2rr2fnrqcWirqQKdrq-3[rpTjProsFC
ro!e3rn%/!rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]irc.pTrbDFCraGe5r`T5%r`/qpr_NMf
r_*5_r^coVr^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Afr_`Ypr`B)%ra5Y6rac"Crb_XSrcnEi
rdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(Crp9XQrpg![rq??drqZQirr)`nZ2]CT
q>^Hnqu-NjrqZQgrq??`rpg!Vrp0RJroF(:rn[S*rm^qnrlY5ZrkJHBrj2U,rhTOcrgWnMrf-o6rdauq
rcnE^rbh^Mrac":ra5Y-r`B)!r_`Yjr_<Abr_!/\qa^WTqaLKPpd<4kpd=pHr^H]Rr^ZrYr^m)^r_<Af
r_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(C
rp9XQrpg![!;6HepAXjdq>U6irVQTMs5!_SrqlZnqu6Hkq>U*eo`"F\nG_hSlMfoEj8Rs8gA]\&dJh>g
`r<gR])K,:YPtI!UAgb`Pl?dDN;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*<rQ"r;>sAj:&[ca8cD9[8,GdT
7K,^D6et*-6h<\E7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LD
T)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMRo)A=]pAXmeqYpBkrVQT!s+14Gs8N#prVl]n
qYp<ipAX^`o)A.XmJcDMjo4<>hu;@/f)F(rbPoN\_>_%F[JmB/VuEFiT)OuROT(4<KDpE#I/\3dEW0kT
B)Z<>@/aF1=oMJ$;Z9Pm:]=)f9)_E]8H)-V7fGjU7.3M!6LR;@7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r
=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMR
o)A:^p&Xm\rqZQirql]nqu5FOgAh0Orr)iorql]krqHEcrq-3ZrpKdProa:Aro!e3rn.5"rm1Scrl"fM
rji$7riH*rrh07ZrfmDCreUQ+rdXolrcJ-XrbMLGraYq8ra#M,r`9"sqb[8er_3;`qapZTr^QcRr^>+#
r'U?Lr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdXrcnElre19,rf@&CrgNhZrhf[rrj2U6
rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq69brqcWkrqucorr0)#JcGHDrr2oqrqucmrqcWgrq??`
rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2
r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPb<u.pr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdX
rcnElre19,rf@&CrgNhZrhf[rrj2U6rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq-9c!Vc?fqYpBk
r;QZorn@D(s8N#sr;QTmqYp9hpAX^`o)A+WmJc>Kjo49=hYu7.f)F%qbl5]__#CtF[JmB/WW&[lSc4uT
P5^C=LAlc'I/\BiF8g(VCAqlF@fBa6>lIk)<rQ(t;>sAj:&@T_9)_BY8,c!T7INY56hEeE7/fXP7fGpT
8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!hJc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^
d/MVqgA]t.ir8*>kl0uKnG`"Xo`"R`q#:-hqu6NjriZ9Ps7?9irr2ipqu6Hkq#:!do`"F\n,D_Rkl0]C
ir7g6gA]\&d/M8gaSs!S]Df5;YPtO#U]-h`Qi<0IMuJJ1Jc:&rGlDd`DZ4DMBDuB>?iF=0=T2A#<;obo
:]=)c9E%Q_8GbpV7f,XC7.3M37/fXP7fGpT8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!h
Jc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^d/MVqgA]t.ir8*>kl0uKnG`"Xo`"Oap]:0brqcWkrquZm
gAfe)rr2oqrquclrqQKdrq69]rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8
re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]X
r_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGi
rn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWkrr)`nY5a(QoDeghrr)iorqcWhrq??arpp'XrpTjNroa:A
ro!e2rn.4trm(McrkeZJrji$4ri?$rrh07[rg!JDre^W-rdauprc\9[rb_XLrac":ra5Y.r`K/#r_i_m
qbR2br_*,[r^coVr^QZOpdFR<pdFmGqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9e
rdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rq?Ef!VlHhqYpBk
rVQTJs4@;Mrr2lqr;QTmq>U0gp\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\
P5^L@MuJA.JGsrqFoHF\DuOJMB)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*U8(L-17RmAIpdtHXqb6l^
r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'
rndY5roa:Frp0RPrpp'\rqHEerqZQjrqucoqu3buJcG?Arr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>
rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&ko
r_WSir_EGdqb-]Uqa].*r^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&A
rg`t[rhKIpriuI1rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqHKh!VuQjqu6NmrVQTJs4@;M
rqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9h>Z%*eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*
J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r;>X/d:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"
r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5rf[8Hrgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="A
rp'LNrpTjWrq-3arqZQiqu$Hlqu3buJcG?Arr2fnrquclrqQKerq-3\rpTjSrp0RIro="9rn[S*rm^qn
rlP/XrkJHCrj;[.ri#gkrgs+Trf[8@reLK*rdXolrcS3[rb_XKrau.<ra5Y0r`K/$r`9"rr_`Pgqb?iY
r^m)[f15g2r^llXr_<AeqbR2gr_i_rr`B)$r`oG/raGe<rb;@Krc.p[rcnElre(3*rf6u@rg*PTrhBCj
ric=.rji$Crl"fXrm1Smrn%/*ro!e9roj@HrpKdSrpp'\rqHEf!;Z`mqYU3irVQTJs4%)GrVl`oqYp9h
p\sjboDA%Vm/H8KjSn0<hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\Q
C&VZB@fBa6?2e%,=T2>"<;oep;#=&c:&[ic9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6
AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Y
p&=^bq>U6fr;QYns+14>s82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(
VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W
9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG
`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq#L6lqYL*err(@HeGoOIqu-NkrqcWirqHEbrpp'XrpB^N
roa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3
ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![
rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi
rql]nqu3PoJcG6>rr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^rkSNGrjVm2ri?$q
rh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2dqb?`Wpe10Or_<8b
qbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNR
rlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi!;cfoqu6Qkrm^tts8N#prVl`oqu6Hkp\smco`"@Z
mf)VQl2KiEir7g6gA]_'dJhGjb5T9W^Ab_CZi70-WrAdmTDk>ZPQ$XBMuJG0K)U5uGlDjbEW0kTCAqlF
AH$';?iF@1>5h\(<rQ+u<;oem;>sDh:]=,O:&@]b:B45h;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZF
DZ4YTFoHXbIf=otL&R#0O8b@BS,T&ZU].:mY5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Z
p&=^bqYpBkr;QZlri#jJs7$'frqlZnr;QTmqYp6gpAX^`nG_kTmJcALk5OB>hYu7.fDa1scMkuc_Z%:K
])K&8YPtR$U]-nbS,SWNO8b(:L&Q]'If=TkFoHC[DZ4DMBDuH@@fBa6?2e%,=oMJ$<W5ts;Ys>j;#=&f
:?G:J:B"&d;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZFDZ4YTFoHXbIf=otL&R#0O8b@BS,T&ZU].:m
Y5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Zp&=^bqYp?lquQ`nrr)`neGn%urr2fnrqucm
rqcWgrq??arpg!WrpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaur
rcnEbrc%jSrbVRHral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_WYnr)3Mmr`&ksr`B)$r`T5*ra#M2
raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&Brg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.C
rp'LOrp]pWrq69arqHEgrql]mrr)`nW;hGKnGiLequ-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+
rmUknrltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&
r`B)!r`&kqr_iVjh,+)JqbmDlr`&ksr`B)$r`T5*ra#M2raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&B
rg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.Crp'LOrp]pWrq69arqHEgrqc]n!W;lprVQTD
s3^lGrqlZnr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/W
Pl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;TYq<WQ6%r`B)$
r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAf
rm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKgrql]mqu-NnV>l,HmJm1bqu-Nlrql]jrqQKerq-3[rpTjQ
rp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<reUQ)rdXoprc\9^rbqdRrbMLH
raYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9g
rdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKg
rql]m!<)iorr1=FcN!nCqu-NlrqcWirqQKbrpp'XrpKdOrosFDro="8rnIG(rmUkmrlY5ZrkSNFrjVm2
riH*trh9=^rgEbLrfI,<reCE(rdXonrce?arc%jRrbMLGrau.@raGe6ra5Y1r`oG,r`];(qcNi!kuRdb
qcEi$!EiS)>5hb*>lJ%.?iFI4@K'j;B)ZHBC]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'
\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#Jmf)_ToD\C]q#:*gqYU3irVQSjs+148s8N#prVl`oqYp<i
q#9pbo)A.Xmf)POl2KfDj8Rs8g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0tU&LV^RJrELOT(4<LAlf(J,Xcn
GQ)aaE;j_RC]7uGB)ZB@@K'[6?iF@1>lIt,>5h\%=T2Cd<rQ1t=T2J&>5hb*>lJ%.?iFI4@K'j;B)ZHB
C]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#J
mf)_ToD\C]q#:*gqYU0jr;llqqu5"CcN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(q
rlkA_rkeZKrk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+
r`oG,r`\Phr`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_
V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQSjs+148s8N#p
rVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XB
N;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BB
CAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@
li->OnG`"XoD\F^q#:*gqYU0jr;llqqu5"CbQ%A9rql]krqZQfrq??`rp]pUrpKdNroa:Aro!e3rn@A$
rmC_jrlG)WrkJHErjMg2riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jTrbVRKrb;@Eral(=
raPk8ra5Y4oj@K#pg=#.ra,Y6!F]F9@fBm:Ac??AC&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UG
S,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtU,^s+145
s7lQlqu6Hkq>U-fpAX^`nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQ
OT(7=MuJD/Jc:/uHiA9hFoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?iFL5@fBm:Ac??A
C&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UGS,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,
i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtg6lrVaq>bQ%S@qu-Nlrql]krqQKdrq69^rpg!Vrp0RJroa:?
rnm_1rmq(trm1SfrlG)VrkABCrjMg1riH*trhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^P
rbDFGqe,n?rakk7raPY2qdT>1rac(A!G5s@BDuWECAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aG
S,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^ci2Dmf)FJ(hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQSd
s+145s8N#prVl`oqu6Hkq#:!dp&=R^nc&"Vli-/JkPjK?hu;F1f)F.tci2/faSs*V^Ab_C[f3N1XT#0t
UAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4MPCAqoDBDuNBAb]d7@eaC/@eaI4Ac?<=BDuWE
CAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^ci2Dmf)FJ(
hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVc]rrr1+@bQ%S@qu-Nlrql]krqQKerq??`rpp'WrpKdO
roj@Bro3q7rn@A&rmLemrlb;]rkSNHrk&09riuI*rhf[irh'1Zrg*PHrf@&:re^W,rdk&urd4Wirc\9^
rc7mSrb_XNrbMLJrb;7BratV1qe#h?rb2@I!GZBKC]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=A
Qi<KRTDkVbVZ*atYl;!.]DfPD_#DCRbPolfdf.hsgA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6Nm
rVQSds+145s8N#prVl`oqu6Hkq#:$epAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]_#D%H]Df/9
Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHBC&VlH
C]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=AQi<KRTDkVbVZ*atYl;!.]DfPD_#DCRbPolfdf.hs
gA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6NmrVc]rrr1+@bQ%S@q#13irql]krqQKerq69_rpg!W
rpB^Nroj@Cro*k6rnIG*rmLemrm(M`rl"fNrk&0<rj)O+ri5sprh07^rg`tQrf[8Arepc4reCE'rdaus
rd4WjrcnEarc8!Xrc%aQrbgk8qelCO!-%jTrc.pYrcJ-ard"KirdOirrdk''reUQ3rf@&Arg!JQrgs+^
rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RNrp]pWrq$-^rqHEfrqcWkrquZlqu35f
JcFp5rr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHErjMg3riZ7#
rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbq[Qrc.pYrcJ-ard"Ki
rdOirrdk''reUQ3rf@&Arg!JQrgs+^rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RN
rp]pWrq$-^rqHEfrqcWkrquZlrVcisrlb>bs7lTjrVl`oqYp<iq#:!do`"I]nc&"VmJcALkPjTBi;VU4
h#>n(e,I\mbl5]_`;[ON]Df>>ZMq',XT#*rU]-nbS,ScRPl?dDNW+k8LAll*K)U<"If=`oHN&0gG5cX`
FT-@;EW1"ZF9-K*rcS3`rcnEgrd=]ordb!"re19*repc9rfI,Drg3VRrh'1brhf[rric=,rj_s>rkJHN
rlG)_rm1Smrmq)(rndY4roO.BrosFLrpTjVrq$-^rq??drqZQiqu$Hlq#6ocJcFp5q#:0hrquclrqZQg
rq??`rq$-ZrpTjRrosFFroO.;rndY0rmq(trm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=
repc1re19&rdausrd=]krcnEcrcS3^rc?n8rcA'\rcS3`rcnEgrd=]ordb!"re19*repc9rfI,Drg3VR
rh'1brhf[rric=,rj_s>rkJHNrlG)_rm1Smrmq)(rndY4roO.BrosFLrpTjVrq$-^rq??drqZQiqu$Hl
qYgNprlb>\s8N#prVl`oqu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG
[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+Qk
rdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9
roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu3,cJcF^/rr2fnrqucmrqcWirqHEcrq-3\rp]pUrp0RJ
roa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-riH*trhTOdrgj%WrfmDFrf@&<reg]2re19&rdXot
rdOiord+Qhrcn3\mr\>IrcnEfrd+QkrdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4
rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu-TqaoB6Xrr2fn
rqucmrqcWirqQKerq-3\qsXONrp0RHroF(:rnm_0rn7;!rm:YirlG)Xrk\TJrk&0>riuI+riQ0srhKIc
rgs+Yrg<\KrfR2@rf-o8re^W/re19'rdalqpjW*gpjE'hpjW3l!.autre(3(reCE/repc8rf@&@rfd>K
rgNhXrh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:HrpBUOrpp'\rqHEerqZQi
rql]mrr)`nQN)O9hZ*TSqu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQ
rkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdXfqre(3(
reCE/repc8rf@&@rfd>KrgNhXrh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:H
rpBUOrpp'\rqHEerqZQirql]mrr)`nqZ"\;_Z0W7qu-NlrqlThrqZQgrq69_rpp'XrpKdQrosFFroF(:
rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\NrfmDFrfI,>rf$i6reUQ.re:?)
on*0oqgeZson*0r!/1H-L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R([/RN5]DfPD_>_LS
b5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQS[s+14,s8N#prVl`oqtp6h
q>U0gp&=U_o)A.Xmf)VQl2KlFjSn*:hYu=0f)F.td/M;hao9?[_>_1J]Df8<Zi73.Xo>=!VZ*=hTDkD\
R/WENPl?jFOT(:>N;e_6M#N/.L&QbuK)U>uJGt,mK)UH&L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\b
VZ*RoXo>R([/RN5]DfPD_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6Nm
rVQTjs2k;Xs8N#mrVl`oqu6Hkq>U0gpAXaao`"C[nG_nUli-/JkPjK?i;VX5g&BV&eGdhocMl&e`W!dS
^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[Rf8WPPl?mGOT(=?NrG":MuJV/M#N2/LAQ](LAlu'M#N83MZJ`o
rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?
rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu2o]JcFU,rr2]krqucmrqcWirqQKdrq69_rpg!WrpTjP
rosFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>Crf@&=
rf$i7regK,reLK-qh>$(reL9)reg]5rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6F
rkeZRrlkAerm:Yormq)%rnm_6ro3q?rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu6HlaoB$Rrr2]k
qtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$q
rhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rfR8F!L&`HPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-
[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgcq"speqtU-erfdA5s4IAN
rqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[_>_4K^&GSA[f3T3Yl:d(
X8]!qV#I(eT`1P^SGnrUR/WENPl?mGP5^R*O8G%<P5^[EPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-
[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgcq"speqtU-erqHH7s1JC/
rqlZnr;QTmqYp<iq#:$ep&=U_o)A.Xmf)VQl2KoGk5OB>hu;I2g&BV&e,I_nc2Poc`r<mT_#D(I]Df>>
[/RB1YPt['WrAsrV>d7eT`1P^SGnuVRJrTQQi<<GQ2$U@Q2[*KQi<?PR/r_DrgNhVrgiqZrhKIhri#gr
riQ1'rj)O1rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pXrq-3_rqHEerqZQi
rql]mrr)NhPQ-46f`1jJqu-Nlrql]krqZQgrqHEbrq-3\rp]pTrpB^Lroj@Dro3q7rn[S,rn%.urm:Yh
rlb;\rkn`NrkABDrj_s7rj)O,riQ1"ri#gmrhK@`rgs+ZrgNhSrg<\Org*>EpltZ@rg*PMrg<\QrgNhV
rgiqZrhKIhri#grriQ1'rj)O1rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pX
rq-3_rqHEerqZQirql]mrr)Nhp]&A8\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7
rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2O
qjdYVrgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'hYuF3
ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQSRs+14#s8N#prVl`lqu6Hkq>U0gpAXaao`"C[
nG_nUli-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkc
T`1S_T)5)XSGSfNRf8fRSGo)YT)PA]T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&g
dJhVofDaM'hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQTas2k;Is8N#prVl`lqu6Hk
q#:$epAX^`o)%nTm/H>Mkl0`Djo46<hu;I2g&BV&ec*qpci25hao9?[`;[UP_#D(I])K2<[JmK2Yl:j*
Y5YO%X8]*tW;`[kV>d:ZU\gkdV>d=lVZE]nri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mh
rm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu2KQJcF'rrr2fnrquZjrqcWh
rqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(
riH+"ri,mqrhfRhrhT"XqkX4frhf[mri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mhrm:Yp
rn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu6$`aoA^Iqu6Tnqu$HjrqcWirqQKe
rq69_rq$-YrpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>rjMg6rj2U0
qlp(&riPsrri5amql9FlriH1'!NrU&Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*
h>Z=2ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZireg`,s3L`Brr2lnr;QTmqYp<iq#:$e
p&=U_oD\7Ymf)VQlMg#HkPjQAir7j7h>Z.-g&BP$e,I_ncMl&eb5TE[`;[UP^](nF]Df>>[f3]6Zi79-
Yl:g)Xn\srWq`RjWq`XoXo>L#Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2
ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirpKg.s0Mb&rqlZnr;6BjqYp<iq#:!dp&=U_
o)A1Yn,DbSli-/Jk5OH@j8S!9hYu@1f`'J$ec*tqd/MAjbPoW_`r<mT_Y_+I]`,PB\c0,<[f3Z5Zi79-
Z0&:iZ2V$/ZN7D=rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJ
rpKdSrpg!Yrq-3_rq??drqZQirqlTjrr)NhMZ88-ci<nAqu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdO
rosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?rj_s9rj;[2rj)F+k-4iirj)O0
rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJrpKdSrpg!Yrq-3_
rq??drqZQirqlTjrr)Nhmf1E/YlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0rnIG)
rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH_#D1L
_u@UR`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZire1<&
s31N<rqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X
`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfJB^&GbF^])%J_>_@O`;[aTaSs<\bPofdci2;jeGe%u
f`'Y)h>?.0j8S-=kl0iGlhg,InG`%Yo`"U^q"speqtp<jrV6BUs2k;Fs7QBjrVQNlqu6Hhq>U0gp&=U_
oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMlcMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5
^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjU
rpg!Zrq-3_qtU0drqcWkqu$Hlp&9XEJcEsop&=shqu$HjrqcNfrqQKcrq-3]rpg!WrpTjRrp9XLroj@D
roF(<ro!e4rnIG+rn7;$rm^qprm:YirlkAarlP/\rl4rVrl"fQrk\KIrkI^3rkJ?Grk\TNrl"fTrl4rY
rlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hl
p&=1TaoAC@qu6KkrquZjrqcNfrqHEcrq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLel
rm:YirltGcrlY5^rl4iSrl"]On&#(Aqo&KQ!64rVrlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6
roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTjrr)NhJcC<$`rGr8qu-NlqtpBhqt^6crq??arq$-[
qsaUQrpB^Mroj@EroF(<qr%J1rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>rknWOrl+cS
rlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTj
rr)Nhjo<I&VuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1rnRM,rn7;'
rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iG
li-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3rqQHhqu6Hkq>U0gp\smcp&=U_nc&%W
n,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMfci25ec2PrUbPTN_c25f`ci2;jdJhSn
e,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[ap\sseq>:$fqtU-brnmats/5ni
rqlZnr;6BjqYU*fp\smcp&"@[nc&%Wn,DbSm/H;Ll2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqr
dehGkd-8mUd/22jdK.eErmUbormh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^
rq??crqZHfrqlTjrr)EeJcGWIJcEXfp&=jerquZjrqcNfrqHEcrq60[rpg!WrpTjSrp9XLrosFEroO.?
ro3q8rnm_2rnRM-rn7;'rn%%trm^qrrmL\krm9oUrm:PirmLepqpbVqrn%/%rn7;*rnRM/rnm_6ro3q<
roO.ArosFJrp9OMrp]pWrpp'[rq69arqHEfqtg<hqu$Hlo)@PHao@t4rr2ThrquQfrqQBbqt9s\qsj[S
rp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2
ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkJcG<@JcE=]rr2ThrquQfrqQBbqt9s\
qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrmgnsrn.5'rn@8)rndY3
qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu51Hao@b.rr2]krquZjrqcNfq"Od[
qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)h#?.,hu;R5hu;U6ir8$<
jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frdk+<s+13Ws8N#mrVl`lqu6Hhq=s^`o_\7Z
nGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekqg\'A$h>?+/i;VX5iVqj9jSn9?k5OTD
l2KuIm/HDOmf)\PnG`%Vo_A1[q>:$fqtp<drVQTCs2k;.s7QBdr;6BjqYU*fq"XO]oD\=XnG_nUmf)SP
li-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0d
qtg<hq#'^^JcG3=JcE+Wp&=aaqtpBhqt^6dq"=XXrposUrpTjSrp9XMrp':BroX4AroEt:ro3q9ro!J,
n(mZoro!e7qr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^e,RPiQ2gXYq#13iqtpBh
qt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,K
m/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<drV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"V
nG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]
p\t!cqYpBhr:p6crltJbs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,
kQ0o2ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkro)8RcrqlThqt^6c
qtL!\rq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?c
rql]mp&4de`;dsZN;rSMqu-Nlp&"abqt^6drqHEcqt9s\rq$-[rpg!Vrp]pUqsOINqs=4Gh<P"*!:9OJ
rpBLKrp]pUrpg!Yrq$-]qt9s^rqH<brqZHfqtp9grr)EeJcF[.JcD\Kp&=jerquHdrqcWirqZQgrqHEc
qt9s\rq$-[rpg!Vrp]pUqsOINqs=4Gh<P"*q!A"Iq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hl
o)?T-ao@+qqu60brquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.W
o`"O\pAXg`q#:*dqYpBhr:U$]rdk+*s+13Es82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\L
mdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp0+s2k:ls8Duprpp$er;6BdqYU*fq"XU\
p&"CYoD\=Xn_N^6nGr.Xo)A7Ro`"OYp\Xabq=sgcqtp<arUp/@s4%("s-`oarpp$er;6BdqYU*fq"XU\
p&"CYoD\=Xn_N^6nb_nVoC_bTp%\:Yq#:*aqYpBhr:U$]rj`!Ms+14Ks760drV6<cqu6Hbq>U0dp\smW
p&"CDoCqkXo^qhLqtC$`qtU'aqtg*bq#(-im/DS9eGk+"RK)jWqu-Nlqu$6drqc<`rqQBbrq>pUqt0%B
p%7qMqtC$`qtU'aqtg*bq#(-im/FNpao?qlo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`
qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*^rUp/ns2k:ls60LX
rpTg\r;6B^qUG<@qX+.YqtU*XrV6ACs1JA_s+LFOrql]`rV6<fqssU5q<[tWqtU*XrV6Abs2k:ls60LF
rq63Lqr[bOqsaLRr9"!0s1JA_s+LFOrosFTr8[\:qW[nJr9"!Os2k:ls4RGFrosCPr9!nNr:^'TrUTr=
s02NSs+14Cs7QBUrUTmKqs=7IrUTrPs2k:ls2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;o=s+13g
s1\Ktrdk*:s+13$s5<pTrdk+Is2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$
s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$
s2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$s+13$s+13$s+13ls+13$s+13$
s+13$s+13$s2k:k
~> %APLeod
EI
52 0 0 52 0 340 cm
BI
/Width 156
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcDhOf)>^Lrdk*Qs+13gs6Ta7r;ci^rdk*fs+14's7QBUrUTmKqtL$^r9XCQ
rdk+)s+14-s8N#^rUp*]qptTEqYL*do).kQqu20HhuA9-kl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE
kl656o`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s7cPEs7cQmrpTgbr:p0g
qYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcGKEJcG]Kqu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rp^!Zr:9jYp%87Vq"O[\rqZ?crqlTjp&4R_Jc>`MLB%/Mo)8RcqtpBhqt^6dqtL*`
qt9s\qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp/Hs,$dT
rpTgbr;6BjqY9j\pAX^]oD\=Xnc&%Tn+c;=lgO*1lhp)DmJcSOnG_tTo)A7Xo_A.Tq"speqtp<^rVleQ
s,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,kQ0o2ros=Frp0RMrpBLK
rp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu2QSQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XM
rp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$f
qtp<drV6AWs-<WTrVl`lqu6Heq#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhZ2U4
i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U#Rs-WicrqQHkr;6BjqYU*`p\sg^
oD\7Vn,DbSmJcJOlMg&Ikl0`Djo4??ir7p9hu;R2htu7,h##jpgA]k$g]?3crn[J/ro!e5ro*k9roF(?
roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*hS,])[rr2ThrquQfrqQBbqt9s\qsj[Srp]pT
rp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2ro3q;
roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)YD^q#13iqtp9drqQBbrq??`rq$-[rp]pT
rpB^Nrp'LIroa:CroO.=ro!e5qq_8,rn7;'rn%/#rmh"tpsT&drm1Sjp!<Warm1JgrR1Vlrm^qtrmq)#
rn.5'qqV2,rnm_6ro3q=roX4CrosFIrp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6fT)Y_gq#:'eqtpBh
rqZQgrqHEcrq69_rpg!WrpTjSrp9XMrosFGroa:@ro3h5rndY0rn@A)rn.5#rm^qqrmC_lps8rbqp#,a
n&tUPrltDe!RB!fci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[a
p\sseq>:$fqtU-brhodrs82fmrVl`lqu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,
f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W`W!gQ_sbJA_u%CO`;mpU`r=*Zb5TT`c2Q#fd/MAjdJhVof)F;#
g&Bh,hYZ71j8S-=kPj`FlMg2MmecMQo)A7[p&=[ap\t!cqYpBhr;QZfriQ4#s8N#mrV69eq>U0gpAXaa
o`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8
^&,SA^];7L_Z%IP`W!mVaSs<\b5TWac2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Y
o`"O_pA=Xaq=sj^rVQSrs02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$
eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[rkABHrkSNLrkn`R
rl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<hqu$Hlq#7MtZiBq%
qu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`P
qnN-Crk&0?rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\q
fDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/us0Mb)rqQHequ6Ejq#:$e
p&=U_o)A.Xmf)VQlMg#HkPjQAir7j7h>Z.-g&BM#e,IbocMl#dao9<Z`;[UP_#D%H]Df>>[f3]6Zi790
YPtd*Y5>="X6HY`X8AsuXT>Q+rilC*riuI/rjDa7rj_s>rk8<Hrk\TPrl4rZrlb;drmC_orm^r#rnIG.
rnm_7roF(ArosFIrpB^Rrp]pXrq$-^rqHEerqZ?dq#1*h[f<]6rr2fnrquZjrqcWhrqHEcrq-3\qsXON
rp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRh
rhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2
iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZlrjMj;s8N#prVl`lqu6Hkq>U0gpAXaao`"C[nG_nU
li-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkcT`1S_
T)5)XSGSfNRf8fRSGo)YScGA`T:c+Urh9=drhTOkri,mtriZ7(rilC/rjVm<rkABHrk\TQrlP/arm1Sk
rmUkurn@A.rnm_7roF(BrosFJrpTjUrpg![rq69arqQKgrqcWkqu$Hlqu4/+\c;I'q"t'drqQKerq69_
rpp'XrpKdProsFFroO.<rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_
rgj%YrgNhSrg<JHqj$r@rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:O
a8X<^cMl2ieGe%ug&Bh,hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-#s1JC2rqQHhqu6Hkq#:$e
pAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^
SGnrUR/WENPl?mGP5^R*O8G%<OoU[HPEZ!1rg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHK
rl>#\rltGgrmUktrn@A,ro!e7roF(Arp0RNqsXOTrq-3`rqHEeqtg<hq#1*h^]21Nrr2]krqucmrqcWi
rqQKdrq69_rpg!WrpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_
rg`tVrg*PJrfd>Crf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[
T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*g
qYpBkr;6Hirke]Ps8N#mrVl`oqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[
_>_4K]`,A=Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>MuJV5M>i8,L%p;hJbXlsK`Hl*LAm&/MZ/P5
NrG+=OoCXFQi<EPSc58\U&LthWW'!uYl;$/[f3r=^AbtJa8X6\c2Q)heGe%ug]$(/i;Vj;kPj`Fm/HGP
nG`"XoD\F^p\sseq>U9jr;6Hirke]Ps8N#prVl`oqu6Hkq>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*
df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfSPQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3h
IJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJm
g&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZlrke]Ss8N#prVl`oqu6Hkq>U-fpAX^`o)A.X
n,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),
K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+QkrdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOk
riH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu4\:
aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'rmUknrlb;]rkn`Mrk&0>riuI*ri?$p
rhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[qf2(Drc.gUrH&'^FT-F^GQ)jdH2`3j
IK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lH
m/HGPnG`%Yp&=[aq#:*dqu6NjrVlf;s3(HArqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0
g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qS
DuOY:D>S5MDZFbSE;jkVF8g:\GlE!fHiAKnJ,Y#uLAm#.MuJe:P5^aGSGo,ZT`1hfWW'("ZMq?4]DfSE
_u@^UcMl2idf.r!h#?41iVqs<kl0oImJcVSnc&.Zp&=^bq>U6iqu6NjrVQT;s3(HArqlZnr;QTmqYp9h
p\smco`"F\n,DbSli-,IjSn0<hu;@/f)F+sd/M5fa8WpS^AbbDZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4
KDpH$J,XfoH2`!dF8g4WDuOVQD#S5LCAqrEBDuN3Ac$*=BDuTFC&r'arbMLLrb_ONrc.pYrc\9crd4Wo
rdk'$re^W5rf@&Arg3VRrh'1brhf[trilC.rk&0Drk\TSrlb;frmLesrn@A/ro3q<roj@HrpKdSrpp'\
rq??crqQKhrql]mrr)`nbQ#ccq#13hrqcWirqHEcrq69]rp]pUrp9XKroX4>rnm_2rn%/!rm:YgrlG)V
rkJHDrjMg1riH*urhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^OrbDFHrb2:Crakt;raY2%
raYh9!+c1BAc?<@B`;`FCAr&KDZ4VSErL1[G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;
^]).Ma8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Yp&=[ap\t!fqYpBerQG5as7lQlqu6Hkq>U-fpAX^`
nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9h
FoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[
rcnEhrdXp!re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjU
rq-3_rqHEfrqcWkq#/D9cN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(qrlkA_rkeZK
rk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+r`oG,r`\Ph
r`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.
]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQTAs3^lGrqlZnr;QTmq>U0g
p\sjboD\7Yn,D\QlMflDir7j7g]#e'df.Pkao96X_#CtF\,NW2XT#0tT`1M]Rf8KLO8b+;LAli)J,Xfo
GQ)^`E;jbSD#S,IB)Z??@fBd7?iF@1>lIt)=oMOZ=8c5%=BPQ*r`fA,ra#M1raGe8rac"?rb2:Irbh^S
rcJ-`rd4Wore(3)rf$i;rf[8Lrgj%]ri#gtrilC2rk&0Frl"fXrm(Mkrn%/(rnm_7roF(Drp9XQrp]pY
rq69brqQKgrql]mqu-NndJqVorr2fnrqucmrqZQgrqHEarpg!Vrp9XLroj@@ro!e4rn.5"rm1Sfrl>#S
rk8<?rj)O+ri#gjrgs+WrfmDDrf$i4rdk&urd=]grcA'Wrbh^Nrb2:@raPb3ra#M.r`];(r`K/$r`8nr
r`&,\r`&bp!*0,$<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`
W;`t!ZMqB5^&GkI`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jr;6HlrmCbqs8N#prVl`o
qu6Hkp\smcp&=L\nG_nUlMfuGjo43;h#?"+e,I_nc2P]]_Z%:K[f3T3Y5Y<tUAgeaQN!*IO8b"8K`6N$
IK"KjFoH@ZDZ4JOBDuKA@K'[6?N+4/=oMP&=8l5!<;ohq;Ys>I;#X;l;Z'Gl;uTbq<W6)!=T2J&>lJ%.
@/aU6AH$6@D#S>OE;k"ZH2`6kJGt9%M>iS8PQ$mITDkVbVZ*atZMq<3^AbtJ`W"-]d/MMng&Bh,i;Vj;
kl0lHn,DhUnc&4\pAXgcqYpBkr;QZlrm^tts8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)
dJhGjb5T9W^AbbDZi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"
<W5qr;Z9Pm;#=&]:A@QS:B"#h;#F/h;>sJm;uTer<rQ2"=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=ot
K`6r0O8b@BRf8oXUAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)hu;[8k5OTDm/HGPnc&1[p&=^bq>U6iqu6Qk
rm^tts8N#prVl]nqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR]`,D>Yl:^&VZ*7fS,S`Q
OT(4<M#Mr(IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:A[cY9__9O9`@`d:Adla:]!uf
;uTbq=8l>$=oM_+?iFI4A,^-?CAr/NErL1[HiAKnJGtB(MuJh;QN!BQT`1hfX8]@&\,O#=_#DCRbPolf
ec+8$h>Z@3jSn?Ali-;NnG`"Xp&=^bq>U6iqu6Qkrm^tts82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7
gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts
;Z9Mi:]!lc9`@ZT8af4C8H;B\9)D<]:&[rc;#XAl;uTer=T2M'?2e41@fBp;C&VrJE;jtYH2`6kJc:E'
N;eq<Q2[6OT`1hfXT#L([f3o<_>_IRbl6#hec+;%hu;X7jSnECm/-;OoD\F^p\t!fqYU3irRCkss8Mur
r;QTmq>U0gp\sjboD\7YmJcDMkl0WAiVq^5fDa;!ci2)d`;[ON\,N`5YPtI!U]-nbQN!'HNrFh5KDpB"
GlDjbEW0eRC&VcE@K'X5?2e"+=8l5!;uT\l:]=)f9__6K8FK(@8Gl$R9)_N`:&@`c;>sMn<W6)!=oM_+
?iFL5BDuWED#SGRFoHXbJ,Y*"L]3>5P5^dHTDkVbVuEn!Zi7H5^])1Nb5T`de,ItuhYuI4j8S9AlMg2M
nG`%Yp&=^bq#:*gqu6NmrRCl!s8N#srVl`oqu6Ejq#:$eo`"C[n,DYPl2KlFiVqa6h#>k'df.Pk`r<gR
^&GG=Z2Um)U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk:]=,g9`%KX8c)$/
7KGtJr^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1
rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`ngAfe)rr2oqrquclrqQKdrq69]
rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5
r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6
rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']
rqHEerqcWkrr)`ngAfn,rr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"
rhTOarg3VIrf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*_-/
r'^NQqaUQTqag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFMrc8!^rd=]sreLK3rf[8Jrgj%ari,n"
rjMg<rkSNQrlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq??crqcWkqu-NngAfn,rr2oqrqucmrqcWgrq??`
rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2
r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?rbMLO
rcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_rqHEgrql]m
rr)iqgAg"/rr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rRrjr*:ric=!rhBC`rfmDD
rf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfSmmGntrBp0Dr^?`SqaUQT
r^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`rhob!rj;[9rk\TRrlb;g
rmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`nh>c=2rr2fnrql]krqZQdrq-3[rpKdOrosFCro*k5
rn.5"rm1Scrl"fNrj_s5riQ0prh'1Zrf[8?re^W*rdFckrc8!UrbMLDraGe5r`];&r`&knr_NMgr_*5_
r^m)Zr^QcRr^?*?h*V'-n3d1CqaLKRr^ZrZr_!/_r_EGgr_WSnr`B)&ra5Y6rac"DrbqdVrd"Kkrdk'*
rf6u@rgWnZrhKIprj)O5rkJHNrlP/crm^r"rndY5roF(Crp0ROrpg!Zrq69drqcWkrr)`nh>c=2rr2fn
rqcWirqQKcrq$-YrpKdOroj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQ
rb2:>ra5Y1r`K/"r_i_lr_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##
ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pY
rq69crqZQirr)`nh>c=2rr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[e
rgEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<EbsM+jogAUEr^HfU
r^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'rjr*Crkn`Yrm1Sm
rn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2q#13grqQKerq$-ZrpTjProsFEro!e2rn7;!rm(Mc
rkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"KbrbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B
bsM+jnjECEqaLKRr^ZrZr_*5ar_NMkr`&l!r`];-raGe<rbMLOrcJ-brdXp#reg];rg*PRrhTOnric=1
rk8<JrlY5crmLf!rn[S3roX4Drp0RPrpg!ZrqHEfrqcEgh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:
rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]
r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[
rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$Hlh>c=2rr)iorql]jrqQKdrpp'X
rpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6r`T5%r`&kn
r_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wp
re192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoh>c=2rr)io
rql]jrqHEbrpg!VrpB^KroO.=rn[S+rm^qmrlP/Xrk8<?riuI%rhKIarfmDCrepc-rdOimrc8!UrbDFC
ra>_2r`K/"r_i_lr_<Abr^m)[r^ZrVr^?3B`'WiXnjECEr^HfVr^d#[r_*5br_WSlr`9##ra#M3rac"C
rbh^Urd+Qmrdt--rfI,Drgs+ari,n%rjVm?rl"fXrm(Mmrn7;,ro3q>roj@KrpTjVrq69brqZQjrquco
h>c=2rr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]h
rc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSkr`&ku
r`oG0raPk@rbVRQrce?hrdb!)rf6uArg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjVrq69b
rqQKirqucoh>cF5rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTObrgEbI
repc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^$BIj?i`2qaC<Nr^ZrZ
r_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/ro="?
rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHB
rj)O*rhBC_rg3VFreg]/rdFcjrcA'Urb;@Cra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KL
j?iN,r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fY
rm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-
rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9I
h*Tp_rBfI0pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@
rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oprql]krqHEbrpp'Wrp9XLroF(;
rndY*rmUkmrlG)VrkAB=ric=$rh07ZrfmD@reCE&rd+Qdrc%jPrau.=ra,S-r`B(sr_WShr_*5_r^d#X
r^HfSpd=(.r^#.$!'pWO6/t<,6iKLQ7K,dU8H)3[9E%]c;#XAl=8lD&?N+F5BDu]GE;k"ZHN&HoLAm/2
Pl@0OT`1tjYPtp.^Ac"KaSsNbe,IqthYuL5jSnHDm/HJQo)A=]p\t$gqu6Njro=%:s8N#sr;QTmqYp6g
p&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,W;`FgRJrELMuJG0JGsloFoH@ZCAqiE@K'R3=oMM%
;Z9Jk:&[fb8cD6Z7K,^J6fp`46.S:%5X><7k!J`.r^?`Sr^ZrZr_*5br_WSlr`B)&ra#M3ral(Drc%jZ
rd+QoreCE1rfd>Lrh'1griZ7,rk8<Jrl4r`rmUktrn[S3ro="Brp9XQrpp']rqHEgrql]mqu5XUi;`fU
rqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:A
ra>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(B
rbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XU
i;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!V
rb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"
r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??f
rql]mqu5XUi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+
rdOihrc.pSrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=C7qa&Ilp-AUCksG87r^?`Sr^QlWr^m)_
r_EGhr`/r"r`oG1rac"@rb_XSrcS3hrdt-*rfI,Frg`tari?%'rk&0Frl"f\rmC_prnIG0ro3q@rp'LN
rp]pZrq??erql]mqu5XUi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`
rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_
r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LN
rp]pZrq??erql]mqu5XUj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5sm
rgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZ
r_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@H
rpKdTrq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4
ri5smrgNhOrf@&6rdk&srcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQ
r^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5
roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1SerkeZJ
rji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7
qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;ermUl$
rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$
rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4
a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y7rau.Hrc.pZrd=]rreLK6rg!JPrhKImrilC4rkABK
rlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6
rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlT
qa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4
rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@
rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#X
r^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&
rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZrq??erql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@
rnm_1rm^qorlkA[rkJHDrilC&rh]Ubrg*PFreUQ+rdOiirc8!Urau.>ra5Y/r`B)!r_WShr_3;_r^d#X
r^?WNk!Jr2bs:tfr^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9irdt-*rfI,Grgj%b
ri?%&rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjP
roj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_
r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+
rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWg
rq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$
r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnEl
re19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XUi;`fUrqucm
rqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3
r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+
@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBk
r;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wm/H;LjSn-;hYu+*e,I\maSs*V^AbM=YPtR$T`1DZPl?X@LAl`&
HN&'dE;jYPB)Z9=?N+.-=8l+s;#X5h9E%Q_8H)*X7K,^M6fUN46.\@%5lj8;j$NN.r^?`Sr^QlXr^m)^
r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;rp'LL
rpTjWrq69brqcWkrquZmj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(
rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_rBfI0pd>$LqaUQV
r_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=
rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_.rm^qorlY5ZrkSNC
rj)O*rhKIarg3VGreg].rdOilrcA'Urb2:Ara>_1r`T5"r_i_kr_<Aar^llSr^?WNh*V!)k!8o3rBfI0
r^6QNpdY6Sr_*5br_NMkr`&l"r`oG1rac"Brb_XUrcnEkre19.rfI,Grgj%`riQ1*rj_sCrl+lZrm:Yp
rn7;.ro="?rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(r
rlb;\rk\TErj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(
r^#d6r^$BIj?i`2qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.
rji$Erl4r\rmC_qrn@A/ro="?rp0ROrp]pZrq69brqcWkrr)`nj8[s8rr)iorql]irq??arpg!VrpB^K
roO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Ab
r^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSkr`&kur`oG0raPk@rbVRQrce?hrdb!)rf6uA
rg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjVrq69brqQKirqucoh>c=2rr)iorql]irqHEc
rpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.rdOilrc.pTrbMLCra>_2r`K/"
r_remr_EGdr^d#YqaUQRr^?NK^-_*Opd>$Kr^H]Rr^ZrYr_3;dr_WSmr`9##ra#M2raYqCrbh^Trd"Kl
re(3.rfI,Ergj%`ri5t%rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrq??crqQKirqucoh>c=2rr)io
rql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRF
raPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6
ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQj
rqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*
rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSl
r`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV
rq$-`rqZQiqu$Hlh>c=2rr2oqrquclrqQKerq-3\rpTjProj@Dro!e2rn7:urm(Mcrk\TIrjVm2ri5sn
rg`tSrfR2;re:?$rd"Kbrc%jOrau.=ra,S.r`K.ur_`Yjr_3;ar_!&Xr^QZNpd<(go0W4>pdG!Kr^Zr[
r_*5ar_NMjr_reur`];-raPk=rbDFOrcS3crdXp#reg];rg*PRrhTOnrilC2rk/6HrlY5brmC_urn[S3
roX4Drp0RPrpp'\rqHEfrqcWlrr)iqh>c=2rr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;Y
rkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<E
bsM+jogAUEr^HfUr^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'
rjr*Crkn`Yrm1Smrn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3d
rdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nh>c=2
rr2fnrqcWirqQKdrq-3[rpTjProsFCro!e3rn%/!rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]i
rc.pTrbDFCraGe5r`T5%r`/qpr_NMfr_*5_r^coVr^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Af
r_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(C
rp9XQrpg![rq??drqZQirr)`nh>c=2rr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rR
rjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfS
mmGntrBp0Dr^?`SqaUQTr^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`
rhob!rj;[9rk\TRrlb;grmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`nh>c4/rr2oqrqucmrqcWg
rq??`rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?
ra>_2r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?
rbMLOrcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_rqHEg
rql]mrr)iqgAfe)rr2oprql]krqQKdrq-3\rpTjRroj@Cro3q6rn@A&rm:YgrlG)Srk&0;ric=#rhKI`
rg3VIrepc1rdk&rrcnE`rbh^Mrb)4>ra5Y0r`K/#r`&kor_NMfqb-o\r^coVr^QcRmmQV3oL/UFr^H]R
r^ZiVqb$i\r_<Afr_`Yor`9##r`oG0raPk>rbDFMrcA'_rd=]rreCE1rf[8Jrgj%`ri,n#rjDa;rkSNS
rlb;frmq)&rndY6roX4DrpB^Srpp'\rq??drqcWkrquZmgAfe)rr2oqrquclrqQKdrq69]rp]pUrosFF
roF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"r
r_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XR
rc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWk
rr)`ngAfe)rr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\
rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&kor_WSir_EGdqb-]Uqa]4,!CfQX8,,[T9D_E[
:B")h;>sPo<rQ;%>lJ+0@fC!=C&W&MErL4\I/\WpKDpf.O8b=ASGo/[U].CpZ2V01^&GnJ`r=9_dJh\q
h#?10iVr$>l2L#Jn,DnWo`"Uaq#:*gqu6NmrVQTJs4@;MrqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9
h>Z%*eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r
;>X/d:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5
rf[8Hrgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="Arp'LNrpTjWrq-3arqZQiqu$Hlqu5=LeGoFE
rquclrqQKerq69^qsaUOrosFCro3q7rn@A&rmC_hrl>#Srk&0<riuI(rhf[frgNhOrfI,<reLK(rdFcj
rcJ-YrbVRJrac";ra5Y1r`];'r`/qsr_i_lqbR)`r_3;`nk&:@ogo-Ur(?i[r_<Afqb[8ir_rerr`K/'
ra#M1raPk;rb;@Jrc%jYrd"Kkrdk''rf$i<rg!JOrh07friH+(rjMg<rk\TRrlkAhrmh#%rnm_7roF(C
rp9OOrq$-^rqHEfrqcNirr(@HeGoOIqu-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#R
rk/6>rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>b
oh>-RnkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07f
ri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu5+FeGoOIqu-Nlrql]k
rqHEcrq-3ZrpKdQrosFEro3q6rn@A'rmC_jrlY5WrkABCrj2U-ri5smrh'1Zrfd>Brepc0rdt,urcnEb
rc.pTrbDFFrac";ra5Y1r`];(r`9"ur`&kpqbd>hqbR2dk"Y_Jr_EMjr)!AiqbmDmr`/qur`T5)ra#M1
raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4E
rpB^Rrp]pZrq69brqcWkrqucoqu5+FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUkn
rltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!
r`&kqr_iVjh,+)J!)i_mr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>I
rh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu5+FdJs4F
qu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<
reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc*Vs!EN8#=8l>$=oMV(
>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmgIf=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"
hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*gqu6NjrVlfDs3CZDrqlZnr;QQlq>U0go`"F\nG_kTli-/Jjo4<>
hu;C0fDa7uci2)d`W![P]Df;=Yl:a'W;`LiSc5&VPQ$[CN;eS2K)U9!HN&-fFoH@ZD>n>MBDuNBAc?-;
@/aO4?2e+.>Q.h*=o2>#=6Wcb=8Q)"=TMZ.r`];*r`oG.ra5Y4raGe;rau.BrbMLNrc%jZrcnEgrdXp"
reCE2rf@&BrgEbVrh9=iriH+'rjVm=rkSNPrlY5drmUkurnIG0ro3q=rosFJrpKdTrq$-]rqQKgrqcNi
rr)`ndJqMlrr2fnrquclrqZQgrq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)UrkABDrj2U.riQ0q
rh9=_rg*PIrf@&;reLK)rdauqrd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*kun!hr`f>+!F/n/
?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_
d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fr;QZlrmCbhs7lQlqu6Hkq>U-fpAX^`nG_nUmf)MN
kPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9hFoHC[E;jeT
D#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[rcnEhrdXp!
re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjUrq-3_rqHEf
rqcWkq#/D9bQ%S@qu-Nlrql]krqQKdrq69^rpg!Vrp0RJroa:?rnm_1rmq(trm1SfrlG)VrkABCrjMg1
riH*trhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^PrbDFGqe,n?rakk7raPY2qdT>1rac(A
!G5s@BDuWECAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^
ci2Dmf)FJ(hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQT;s3(HArqlZnr;QTmqYp9hp\smco`"F\
n,DbSli-,IjSn0<hu;@/f)F+sd/M5fa8WmR^&GYCZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4KDpH$J,Xfo
H2`!dF8g4WDuOVQD#S5LCAqrEBDuN3Ac$*=BDuTFC&r'arbMLLrb_ONrc.pYrc\9crd4Wordk'$re^W5
rf@&Arg3VRrh'1brhf[trilC.rk&0Drk\TSrlb;frmLesrn@A/ro3q<roj@HrpKdSrpp'\rq??crqQKh
rql]mrr)`nbQ#ccrr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHE
rjMg3riZ7#rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbhdUr,DXT
rcA'\rcnEfrd4WnrdXoureCE.repc:rf[8Grg`tZrh07fri,n"rj)O4rk&0Erkn`Urm(MirmLf!rnRM1
ro*k<roj@IrpB^Srpg!Zrq69brqZQirql]mqu-EkbQ#ccq#:0hrquclrqZQgrq??`rq$-ZrpTjRrosFF
roO.;rndY0rmq(trm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=repc1re19&rdausrd=]k
rcnEcrcS3^rc?n8rc8']!H`G_FoHR`GlE$gI/\ToJGt0"K`6`*MuJb9OT(LDQi<KRTDkVbVZ*[rYPtj,
\Gj,>^])1NaSsE_ci2Dmf)FJ(hYuI4jo4HBl2L)Ln,DkVoD\F^pAXjdq>U6fr;QZirlb>\s8N#prVl`o
qu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]
Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+QkrdFcrrdXp!re19,reg]7
rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_
rqHEfrqcWkqu$Hlqu4\:_Z0W7qu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Ma
rl+lQrkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdOou
r.+d!re:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*Crk\TQrlG)arm:Ymrn7;+rnm_5
roF(Arp0RNqsXOTrq-3arqQKgrqcWkrqucoqu4J4_Z0W7qu-NlrqlThrqZQgrq69_rpp'XrpKdQrosFF
roF(:rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\NrfmDFrfI,>rf$i6reUQ.
re:?)on*0oqgeZson*0r!/1H-L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R([/RN5]DfPD
_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQT2s2+g8rqQHkr;QTm
qYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?[JmE0Y5YO%VuELk
T`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])M?&P8Mi7Rnrf6u=rfI,Crg!JKrgNhV
rh'1_rhTOkriH+%rilC0rj_s?rkJHLrl+l\rm(Mirm^qurn7;.ro*k9roa:Frp0RPrp]pWrq-3_rq??d
rqZQirql]mqu-Ek_Z.:Krr2]kqtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[
rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rfR8F!L&`HPl@!JQi<EP
SGo)YT`1YaV#I7jX8]7#Yl:s-[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\
pAXgcq"speqtU-erkJKGs82fmrVl`oqu6Hkq>U0gp\sjbo`"F\nG_kTmJcALkl0`Dir7j7h>Z+,fDa7u
d/M;hbPoN\_u@IN^AbbD\Gil7ZMq',Xo>@"W;`XmU\g_`T)P8ZRf8`SR/WHOQM?a?Pl$aFQN!6MQiNNT
R@4&Crg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\rltGhrmUktrn7;,ro!e8roX4CrosFL
rpKdTrpp'\rq69brqQKgrqcWkrqucop&;`+\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@B
ro3q7rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kT
pmV2OqjdYVrgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'
hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQT)s0Mb)rqlZnr;6BjqYp9hp\smco`"FY
n,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrba8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jq
VYd4hV!k)UV#I4iV?!LpVl0Nnri?%#riZ7(riuI.rjDa8rjr*CrkJHKrl"fUrlP/brm1Sjrmh#"rn7;,
rnm_6roO.Broj@IrpBUOrpp'\rq??crqQBerqlTjrr)`n[f<]6qu6Tnqu$HjrqcWirqQKerq69_rq$-Y
rpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>rjMg6rj2U0qlp(&riPsr
ri5amql9FlriH1'!NrU&Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2ir8$<
kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirjMj5s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"V
mf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2ZMUohYl:p,
Z2h33Za9Y<rjMg8rji$?rk83Drk\TOrl4rYrlb;erm:Ylrmh#"rn.5+rnm_5ro=">roX4Erp0ROrpTjV
rpp'\rq69arqQKgrqcWkqu$Hlp&;E"YlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0
rnIG)rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH
_#D1L_u@UR`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZi
rilF,s7QBjrVQNlqu6Hhq>U0gp&=U_oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMl
cMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)
rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hlp&;2qWrMtqqu-NlqtpBhqt^6c
rq??arq$-[qsaUQrpB^Mroj@EroF(<qr%J1rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>
rknWOrl"lWr5S`XrlY5`rltGfrm:YjrmC_ormq)#rn7;,rndP1ro="=roa:Frp'LMrpK[Qrpp'[rq69a
rqHEfqtg<hqu$Hlp&;)nVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1
rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8
j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6Ais/5nirqlZnr;6BjqYU*fp\smcp&"@[
nc&%Wn,DbSm/H;Ll2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqrdehGkd-8mUd/22jdK.eErmUbo
rmh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeVuN@g
rr2ThrquQfrqQBbqt9s\qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4W
rm_#"r7:l"rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)Y2X
rr2]krquZjrqcNfq"Od[qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)
h#?.,hu;R5hu;U6ir8$<jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frgWqTs7QBdr;6Bj
qYU*fq"XO]oD\=XnG_nUmf)SPli-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">
rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^S,\cRq#:'erquZjrqcNfqtL*`rq-*Zqsj[Srp]pUrpKdP
rp0RKroj7BroX+>roF(=p#>H!p#5u3!TW5>jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!c
qYpBhr:p6crg!MBs8N#grVl`oqtp6eq=s^]p&=U_o)A1Yn,DhUn,)PPmJcJLli-2Hl1O9/kOds=kii$1
qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?crql]mp&4deN;nk:p&=jerquHdrqcNfrqQKerq?6^rq-3]
rpp'YrpTjUrpTaPrpBULqs3)'rp'RNq<\+Jq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hlo)=UJ
LB%/Mo)8RcqtpBhqt^6dqtL*`qt9s\qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^
p\Xabq>:$fqtp<arUp/Hs+14Ks82fdrVl`lqtU$bq>U0ap\XX\o_\7Zo)%t5nG_qXo)/(XoC_bTp%\:Y
q#:*aqYpBhr:U$]rdk(Ls+14Ks760drV6<cqu6Hbq>U0dp\smWp&"CDoCqkXo^qhLqtC$`qtU'aqtg*b
q#(-im/DS9!<7WMo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s7cPEs60LX
rpTg\r;6B^qUG<@qX+.YqtU*XrV6ACs60K6s60LFrq63Lqr[bOqsaLRr9"!0s60K6s4RGFrosCPr9!nN
r:^'TrUTr=s4mX*s2=s(rm^lHrp'K6s2=qgs2=rOrp'K6s2=qgs+13$s/l<Ps+13$s/l<Ps+13$s/l<P
s+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<O
~> %APLeod
EI
52 0 0 16 0 324 cm
BI
/Width 156
/Height 48
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
J,
~> %APLeod
EI
188 0 0 52 68 272 cm
BI
/Width 564
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcFj3JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcFj3JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcFj3JcDhOf)>^Lrdk*%s+13$s2b5irdk+4s+13$s+142s4%%ks+143
s+13gs6Ta7r;ci^rdk*:s+13$s5<qDrm^o2rdk+Is+13$s+14Js6Ta7rTX=>s+143s+14's7QBUrUTmK
qtL$^r9XCQrdk*Rs+13$s7QEbrosCPr9!nCr9XCQrfmG6s+134s7QBUrUTmKqs=7IrUTs_s+143s+14-
s8N#^rUp*]qptTEqYL*do).kQqu20HZi>UVJcGWIrr20\p&+L[eGB(>o).kQqu2r^JcC<$QiI'al2C;Q
p&!88qtos^m/?h\qu;6Ijo9o3kl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE]`3Q_K`D&Nqu6'_q#($d
o(pl3m/$_Yq#'UZq#6rdJcC<$T`=fdn,<%Zqtos\eG8J-rqlKgn,<._rr.KKkl656o`+gfo)8@]qtp9e
p%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%O
p\Xa_q=XU`qtU*^rUp/ns+13$s/c7trpp$_r;6BgqXs[`q""1Vp?)&@p@\1Wq"sm[qYpBer;6HirUp/@
s7cPEs7cQmrpTgbr:p0gqYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcEpnJcCr6
rr2Kerr)ioq"t'eqt^$^qtKdWqt9s\h=LO9rq5jUrqH3_rqZHfq"ssdo)8ReYQ'1RJcDqRrr2BbrquQg
rqcNfq"Xa\p%J:Urq,%<qt0m\o(N(Wq"Xjaqtg*bqu$$`rr.KKp]#gErVucoo)8Rcqtp0bqt^6dq"O[Y
qt0dWrposVh=1F6!:p'Yrq#gTrq6'\qtU0dq"k!equ$-cp&9OBeGk+"RK*0`o)8Rcqtp0bqt^6dq"O[Y
qt0dWrposVh=1F6qssaXp%87Vq"O[\rqZ?crqlTjp&4R_\Gq-[JcE.Xqu60brquZjq"jm`rqQ9_qt9jY
qt'gXqsiM3rpfmVrq#gTrq6'\qtU0dq"k!erqucnp&4R_Jc>`MLB%/Mo)8RcqtpBhqt^6dqtL*`qt9s\
qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp/@s5!^+s.]Pj
rpp$er;6BjqYU*fq"sgbpA=O^o_\7Tnb_hTn,DhRn+c>>mJ-,Hn,DhUn,)VLnc&.Wo`"O\pAXg`q#:*d
qYpBhr:U$]rk\Vcs+13as82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\LmdKQ<mecJPnG_nR
nG)PQoDA1Zp&"I^p\Xabq>U6iqYpBhr:U$]re^Z3s8N#drVl`lqu6Heq"XR^o_\7Zo)%tVnGD\LmI0B0
l1F<>lhKlHn,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrdk+*s+13Hs8N#drVl`lqu6Hkq"sj]pAX^]oD\=X
nc&%Tn+c;=lgO*,lhKlHn,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrk\Vcs+13ds8N#drVl`lqu6Heq"XR^
o_\7Zo)%tVnGD\LmI0B0l0ms5mJcSOnG_tTo)A7Xo_A.Wq#:'cqYpBhr:9gcre^Z6s8N#grVl`oqtp6e
q=s^]p&=U_o)A1Yn,DhUn,)PPmJcJLli-2Hl1O9/kOds=kii$1qs+1Hrp9XOq!S.NrpTjVrposYrq6'\
rqZ?crql]mp&4deJcF[.JcD\Krr2Kerqucmqtg3crqH<aqt9s\rpp'YrpTjUrpTaPrpB^Oqs47Hqs!e;
n)s9*ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu4P6JcC<$`;fi9o)8RcrqlThqt^$]
qt9s\rpp'YrpTjUrpTaPrpB^Oqs47Hqs!e;n)s9*ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\qtL*arqZ?c
rql]mp&4deN;o1Cq#:'erquZjrqcNfqtL*`rq-*Zqsj[Srp]pUrpKdPrp0RKroj7BroX+>roF(=p#>H!
p#5u3!TW5>jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!cqYpBhr:p6crdk+6s+13Ts7lTg
rVl`lqu6Hhq>9pcpAX^]oDA(Wn,DhUn,DbSm/H>MlMg#EkPjW@jo4??j7VF#iUu40j8S-=jnn3>kPOKB
lMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<drV6B:s+13$s3:T=rqQHkr;6BjqYU*cp\smco_\7W
nc&"VnG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Z
o`"L[pAXgcq>:$fqtp<drV6AWs-<WTrVl`lqu6Heq#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:
ir7m/hr`emhZ2U4i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U#>s69Q7s0;Up
rVl`lqu6Heq#:!dp&=U_o)&"WnG_nUmf)SMli-/Jkl0cBjo4?<j8S';i:Z!ihYZ4-i;;O5j87p:jo4HB
kl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U$5s+13$s3:T7rVl`lqu6Heq#:!dp&=UYo)A.Xn,DbS
m/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhtu@/ir8!8jSn9?kPj]El2L#Gm/HGPn,DhRo)A4Zo`"O_pA"F[
qYpBhr:U#Rs-WicrqQHkr;6BjqYU*`p\sg^oD\7Vn,DbSmJcJOlMg&Ikl0`Djo4??ir7p9hu;R2htu7,
h##jpgA]k$g]?3crn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*h
JcG3=JcE+Wrr2]krquZjrqcNfq"Od[qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'
n(Rcqp"]Q&qqqD2rnm_6ro3q<roO.Aroj@Grp'LLrpB^QrpTaRrq$$Zq"Od`qtg<hqu$6fqu5(EJcC<$
d/X+Eq#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2qq_/)qqLSnrnI,$
rn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSrp]pVrq$$Zq"Od`qtg<hqu$6fqu3)bT)\fhp&4mf
q"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq!7q)!
rn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu20Ho)F:@])Vd/
p&4mfq"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq
qptc!rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-Ekf)L=$JcF=$
rr2ThrquQfrqQBbqt9s\qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4W
rmgnsrn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu32eT)\Ta
rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/rnRM+rn.5%rmq)!rm^_kqp>>g
rm:>arm:Yjqp>;ir6kSormh#!rn%/%rn72(rn[S2ro*k9roO.Aroa:Frp'LKrpB^Rrp]pXrq$-]qtC$`
qtU0drqlTjq#,dDo)F:@])VR(rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/
rnRM+rn.5%rmq)!rm^_kqp>>grm:>arm:Yjqp>,drm^qtrmq)#rn.5'qqV2,rnm_6ro3q=roX4CrosFI
rp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6ff)L=$JcF=$q#13iqtp9drqQBbrq??`rq$-[rp]pTrpB^N
rp'LIroa:CroO.=ro!e5qq_8,rn7;'rn%/#rmh"tpsT&drm1Sjp!<Warm1JgpsT/krmh#!rn%/%rn72(
rn[S2ro*k9roO.Aroa:Frp'LKrpB^Rrp]pXrq$-]qtC$`qtU0drqlTjq#-faVuQPkq#1*erqcWirqQKe
rq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&a
rQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*d
qYpBerV6ACs82hIs24m3rqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0
gA]e)f`'G#eGdnqdJhMfci25ec2PrUbPTN_c25f`ci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]E
l2L#JmJcPQn,DhUnc&1[p&=[ap\sseq>:$fqtU-brnma,s+14-s7lTgrVQKkqYp<iq#:$epAXaao`"C[
nG_nUmf)SPli-/Jkl0cEj8S'8i;VU4h#?%,g&BY'ec+(tdf.Ynd.krdcMPlcbjWaPbl5lacMPred/MGl
df._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6Ais/Q+r
rqlZnr;6BjqYU*fp\smcp&=R^o)%qUmf)VQlMg#HkPjQAiqq[5hYu@1g&BY'f)F.tdf.Sld/M>ic2Poc
b5TN^`r!aS`;@I@_Z%IM`;[^U`r*jUao9H^bPocccMl2ici2>ke,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuI
mJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp/@s+13is82fmrVl`lqu6Hhq>U-fpAXaaoD\=XnG_kTmJcDM
kl0cEjSn09i;VU4h>Z+,f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W`W!gQ_sbJA_u%CO`V[[Sao9H^bPocc
cMl2ici2>ke,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp0Os+13$
s5O(UrqlZnr;6BjqYU*fp\smcp&=R^o)%qUmf)VQlMg#HkPjQAiqq[5hYu@1g&BY'f)F.tdf.Sld/M>i
c2Pocb5TN^`r!aS`;@I@_Z%IM`;[aQ`r=*Zb5TT`c2Q#fd/MAjdJhVof)F;#g&Bh,hYZ71j8S-=kPj`F
lMg2MmecMQo)A7[p&=[ap\t!cqYpBhr;QZfriQ4#s8N#mrV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuG
k5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8^&,SA^];7L_Z%IP`W!mV
aSs<\b5TWac2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Yo`"O_pA=Xaq=sj^rVQSF
s+13is8N#mrV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&e
b5TN^aSs3Y`;[[R_Z%CK_#(n8^&,SA_#)"J_u@XS`r='Yao9H^bl5ldd/MGle,Insf`'S'g]$(/hu;U6
jo4EAkPjcGli-;Nn,DkVo)A:\p&=[^q#:*aqtU-eroO02s+140s8N#mrV69eq>U0gpAXaao`"F\nc&"V
mJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8^&,SA_#)"J
_u@XS`r='Yao9H^bl5ldd/MGle,Insf`'S'g]$(/hu;U6jo4EAkPjcGli-;Nn,DkVo)A:\p&=[^q#:*a
qtU-eriQ4)s7lTjrVl`lqu6Hkq"sgbo`"FYnG_nUmf)POlMg#HjSn09i;VR3g]#k)f)F1ud/MAjcMl#d
b5TK]`W!gT_u@LO_#D+J^AbhF]_f>?])0&5\Gj&9])K>@]E#VG]tOEZrkJHJrk\TOrl"fTrlG)\rlb;d
rm1Sjrm^qurn.5)rn[J0ro="=roj@Grp0ILqsaUVrq-3aqtU'brqlTjrr)WkK`?W'bl@J;qu-NlqtpBh
rqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0rnIG)rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABF
rk/-?rjr!;ppg=6qmud=rk/6DrkABHrkSNLrkn`Rrl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(B
rosFJqsO@Nrq$-]rqH<bqtg<hqu$Hlq#9LWJcC<$kl:GWqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LH
roF(<qr%J0rnIG)rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk/6D
rkABHrkSNLrkn`Rrl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<h
qu$Hlq#7MtZiBq%qu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_l
rm1SerlP/Zrkn`PqnN-Crk&0?rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[T
aSsB^ci2;jdJh\qfDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/Is+13r
s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"Vmf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z
_u@OM^](nF]DfA?\Gir9[/RE2ZMUohYl:p,ZMq30[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\q
fDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp0Xs+13$s6K^^rqlZnr;6Bj
qYp<iq#:!dp&=U_o)A1Yn,DbSli-/Jk5OH@j8S!9hYu@1f`'J$ec*tqd/MAjbPoW_`r<mT_Y_+I]`,PB
\c0,<[f3Z5Zi79-Z0&:iZ2V'.Zi7?2[f3c8\c05?^&,SD_>_@O`r='YbPoied/MGlec+2"f`'_+hu;R5
j8S0>k5OWEli->On,DkVo)A:\p&=[aq#:*gqYpBhr;QZfrjMj5s8N#mrV69hq>U0gp\sjbo`"F\nG_kT
mJcDMkl0cEjSn0<hu;I2gA]e)eGdqrdJhGjbPoW_`r<pU_>_7L^&GYC\Gir9[JmN3ZMq',Yl:g&XT#9b
WrB'rX8o@'Xf_T,ric=+rj2U3rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:F
rp'LMrpTjUrpp'[rq69brqQKgq"sjbqu2KQJcF'rrr2]kq"t'drqQKerq69_rpp'XrpKdQrp'LHroa:A
ro3q7rn[S-rn7;#rmUkorm(MdrlP/Zrl"fPrkSNHrk&0>rjMg6rj2U0ric=*riZ."ri>:`ri>ptriQ1(
ric=+rj2U3rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjUrpp'[
rq69brqQKgq"sjbqu6$`JcC<$li6t`q#1!brqZQgrqHEbrq-3\rp]pTrpB^Mroj@EroF(<rnm_2rn@A)
rm^qrrmC_jrlb;_rl4rUrk\TLrk8<Crj_s9rjDa3rj)O,rilC)qlKdtl)O``qlKe!rilC*riuI/rjDa7
rj_s>rk8<Hrk\TPrl4rZrlb;drmC_orm^r#rnIG.rnm_7roF(ArosFIrpB^Rrp]pXrq$-^rqHEerqZ?d
q#1*h[f<]6rr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#V
rk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+ZMq92
\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZl
reg`,s3L`ErqlZnr;6BjqYp9hp\smco`"FYn,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrba8X$V
_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jqVYd4hV!k)UV#I4iVZ*LmWW&stXo>L&YPtg+ZMq92\Gj)=
^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZlrpKf;
s+149s8N#prVl`lqu6Hkq#:$epAX^`o)%nTm/H>Mkl0`Djo46<hu;I2g&BV&ec*qpci25hao9?[`;[UP
_#D(I])K2<[JmK2Yl:j*Y5YO%X8]*tW;`[kV>d:ZU\gkdV>d@kVuE[pX8]7#Y5YX(Z2V'.[Jm]8])KGC
^])(K`;[dUao9Tbci2;jec+2"g&Bh,hu;U6jo4HBkl0oImJHAOo)A:\pAXgcq"speqtp<jrVQT&s1/1/
rqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X_>_7L^Ab_C
\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc52\T)kRVrh07arhKIgrhoapri?%$
ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@Grp0RPrp]pWrq-3_rq??drqZQi
rqlTjrr)`nNW4S0ec5XJqu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7rndY.rn%.urmLel
rltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2OqjdYVrgs+]rh07a
rhKIgrhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@Grp0RPrp]pW
rq-3_rq??drqZQirqlTjrr)`nnc+1?JcG9?rr2fnrquZjrqcWirqQKdrq69_rpg!WrpTjPrp'LHroF(<
rnm_3rn@A'rmUkprm1SgrlG)Xrk\TLrkABCrjVm6rilC*riZ7$ri,mprhTOfrh9=arh'1]qjm_Vqj[AL
rgWeTrgj%[rh'1_rh9=drhTOkri,mtriZ7(rilC/rjVm<rkABHrk\TQrlP/arm1SkrmUkurn@A.rnm_7
roF(BrosFJrpTjUrpg![rq69arqQKgrqcWkqu$Hlqu4/+\c;I'q"t'drqQKerq69_rpp'XrpKdProsFF
roO.<rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_rgj%YrgNhSrg<JH
qj$r@rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%u
g&Bh,hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU,Ls+14#s7lQfqu6Ejq#:$ep&=U_o)A.Xmf)SP
l2KlFjo46<hu;I2g&BV&eGdhocMl&ea8X$V_#D(I]DfA?[JmK2YPtU%WrAsrV#I+fT`1S_Sc5/YRf8`S
R/!!EQ2$UCQ2$[ER/WNQRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%u
g&Bh,hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-[s+13$s7--arV69hq>U0gp\sjbo`"F\nG_kT
m/H8KkPjTBiVqa6h>Z+,fDa;!d/M>ibl5Z^`;[RO^AbbD\c0#9ZMq',X8]-uW;`UlUAghbTDkD\SGnuV
RJrTKQMZsBPl?sCQN!9NRJrZSSGo)YTDkM_U].(gW;`dqX8]=%ZMq92\c05?^AbqI`;[gVbl5oed/MPo
f)FA%h>Z=2iVqs<kPj`Fm/HGPnG`"XoD\F^p\sseq=sj^rOMs@s8N#mrVQKkqYp9hp\smco`"FYn,D\Q
li-)Hjo46<i;VR3gA]\&e,I\mc2Piaa8WpS^](qG\c0&:ZMq*-Xo>C#VZ*CjU&L_aT)P8ZRJrTQQN!-J
PQ$aEOQMW$OT(CCP6$l2rfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Sm
rmq)&rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu2fZJcFC&rr2]kqtpBhrqQKerq??`rposT
rp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\N
rfmDGrf[8Bk)]D$rf[8ErfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Sm
rmq)&rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu6?iJcC<$o`+piq#1*erqcWhrqHEcrq-3\
qsXONrp0RHroO.<ro!e3rn@A&rmUkmrltGarl>#SrkJHGrji$:rj)O-riQ1#rhf[jrh9=args+ZrgEbQ
rg*PJrfd>ErfH9'qiLf?rfd>Grg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHKrl>#\rltGg
rmUktrn@A,ro!e7roF(Arp0RNqsXOTrq-3`rqHEeqtg<hq#1*h^]21Nrr2]krqucmrqcWirqQKdrq69_
rpg!WrpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJ
rfd>Crf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[T`1bdVuEds
Y5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*gqYpBkr;6Hi
rg*S8s5*eTrqQHkr;QTmqYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM
]`,G?[JmE0Y5YO%VuELkT`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])MZ/P5N;ek:
O8b7?PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#J
n,DhUnc&1[p&=[aq#:*gqYpBkr;6HirqcYGs+14Hs8N#mrVl`oqu6Hkq>U0gpAXaao`"C[nG_nUli-/J
kPjK?i;VX5g&BV&eGdhocMl&e`W!dS^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[Rf8WPPl?mGOT(=?NrG":
MuJV/M#N2/LAQ](LAlu'M#N;2MuJ\7NrG+=OT(ICQ2[*KRf8iVTDkM_V#I:kXT#C%Yl;'0\Gj/?^])+L
`W"*\cMl2ieGe%ug&Bn.iVqj9kPj`Fli-APnG_tWo`"O_pAXjdq>U6iqu6NjrVQT2s2+g8rqQHkr;QTm
q>U0gp\sjbo`"F\nG_kTm/H8KkPjTBi;VR3g]#e'e,I_nc2Piaa8WpS^](nF[f3W4Yl:a'WW&gpU&L\`
Sc5&VQi<9LOoCIANrFt9MZ/J3LAQ]"KC=BdKDpQ)LAZf*M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[p
XT#I'[/RN5]`,YE_>_LSb5TZbd/MPof)FG'hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQS[
s+14,s8N#mrVl`oqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[_>_4K]`,A=
Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>MuJV5M>i8,L%p;hJbXlsL&6W(M>iD3MuJb9O8b:@Q2[-L
RJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LSb5TZbd/MPof)FG'hYuI4jo4HBl2L&Kmf)_To)A7[p&=^b
q#:*gqu6NjrVQTjs+13$s8)cprqQHkr;QTmq>U0gp\sjbo`"F\nG_kTm/H8KkPjTBi;VR3g]#e'e,I_n
c2Piaa8WpS^](nF[f3W4Yl:a'WW&gpU&L\`Sc5&VQi<9LOoCIANrFt9MZ/J3LAQ]"KC=BdKDpT%LAm&/
MZ/P5NrG+=OoCXFQi<EPSc58\U&LthWW'!uYl;$/[f3r=^AbtJa8X6\c2Q)heGe%ug]$(/i;Vj;kPj`F
m/HGPnG`"XoD\F^p\sseq>U9jr;6Hirke]Ps8N#prVl`oqu6Hkq>U0gp\sgao)%nTm/H>MkPjQAi;VX5
g]#n*df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfSPQ$^DO8b.<MuJS4LAll*KDpDuJ,"Ki
IJA3hIJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKa
d/MJmg&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZlrg*S8s5*eTrqlZnr;QTmqYp<iq#:$e
o`"FYn,D\Qli-)HjSn*:hu;C0g&BG!d/M>iaSs0X_>_1J]Df>>Z2Us+Xo>3sU]-qcT)P5YR/W<KOoCF@
NW+k8M>i8/K`6W'JGXikIf"QgI/\QhIf=ioJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'
Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZlrqcYGs+14H
s8N#prVl`oqu6Hkq>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*df.VmcMkoa`W!^Q^AbbD\Gic4YPt['
VZ*@iT`1P^S,SfSPQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3hIJA9jJ,=cqKDpT(LAm&/MuJ_8O8b:@
PQ$sKRf8oXT`1bdVZ*^sYPtg+\Gj)=^AbtJ`W!sXcMl2idf.r!h#?41i;Vg:kPjfHmJHAOo)A:\p\sse
q>U6iqu6NmrVQT2s2G$;rqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%df.Vmbl5]_
_Z%=L^&GJ>Zi70-XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFMFSL"XGQ<!i
H$TC8rd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoasric=-rjMg>rkSNMrlG)^rm:Ymrmq)%
rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTjrr)`nSH"0?iW&oVqu-Nlrql]krqZQfrq??`rpp'X
rpTjProsFFro3q8rnm_.rmq(srm:YgrlG)UrkJHGrjMg4ric=&ri#glrh07]rgNhNrf[8Arf-o7reUQ,
rdt-!rdausrd=]krd"KfpiZ%IpiZR\rd"Khrd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoas
ric=-rjMg>rkSNMrlG)^rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTjrr)`n!<7WM
JcG]Krr2fnrqucmrqcWirqHEcrq-3\rp]pUrp0RJroa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-
riH*trhTOdrgj%WrfmDFrf@&<reg]2re19&rdXotrdOiord+Qhrcn3\mr\>IrcnEfrd+QkrdFcrrdXp!
re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RP
rpg!Yrq-3_rqHEfrqcWkqu$Hlqu4\:aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'
rmUknrlb;]rkn`Mrk&0>riuI*ri?$prhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[
qf2(Drc.gUrH&'^FT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE
_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVleds+142s8N#prVl`lqu6Hk
q#:!do`"I]nG_kTm/H;LkPjTBi;VR3g]#e'e,I_nbPoQ]_u@FM]Df>>Z2Up*X8\spU]-nbSGnoTPl?dD
NW+k8L]3#,K)U<"If=`oH2`'fGPcO^FT-=XEURlGEVjeRFT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=
Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*d
qu6NjrVlcrs+13$rrE)urqlZnr;6BjqYp9hpAX^`oD\7Ymf)SPlMfuGjo43;h>Z1.f)F.td/M5fa8X!U
^](kE\Gic4Y5YL$V>d7hTDkA[R/W?LOT(7=MuJM2L&Q]'JGt#sI/\EjGlDpaFoHL^Er0kFE;jkSEr0tX
FoHUaGlE!fI/\QnJGt0"L&Ql,MuJ_8OT(LDR/WWTTDkSaV>dOpY5Y^*\Gj,>^]).Ma8X9]d/MPof)FG'
hYuI4jo4KClMg/Lmf)_ToD\F^pAXjdq>:'gr;6HlrlG,_s8N#mrVl`oqu6Hkq#:$ep&=U_nc&%WmJcGN
kl0]CiVqa6g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^SGnfQP5^OAMuJS4LAlc'JGt#sHiA?j
GlDgaErL(XE;OSQDWYg5DZ4PSE;X\SEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*Ro
Y5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6Hirh'4As6'F]
rqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7f
T)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qSDuOY:D>S5MDu4MQEW1%YFT-OaH2`0iIf=ir
Jc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tW
oD\F^p\t!fqYpBkr;6HkrW3#tJcCH(!WN&urqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0
g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qS
DuOY:D>S5MDu4MQEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).M
a8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6Hirlb>bs8N#prVl`oqu6Hkq#:$e
pAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]_>_1J]Df/9Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,
Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHBB`MlKC23``rbVRNqeuIRrcA'^rcnEhrdXou
re(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABJrl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`
rqHEerqcWkrqucoqu35fJcFp5rr2fnrqucmrqcWhrqHEcrq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yf
rl>#SrkABDrj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?
mq)B.rb)4ErbDFJrbVRNqeuIRrcA'^rcnEhrdXoure(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABJ
rl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEerqcWkrqucorVcisrdk*'rrN,u!<2lorqucm
rqcWhrqHEcrq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#SrkABDrj2U/riZ6trhKIbrgWnQrf[8A
repc4re(3$rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4ErbDFJrbVRNqeuIRrcA'^rcnEh
rdXoure(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABJrl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjW
rq-3`rqHEerqcWkrqucoqu4e=bQ%A9rql]krqZQfrq??arpp'XrpTjQrosFEro3q7rn[S*rm^qorlkA_
rkn`Mrjr*;rilC'ri,mkrgs+Yrg!JGrf@&8reLK*rdaurrd+QercJ-[rc%jSrbVRKrb;@Frau.@qdf\9
l!jX%qd]\<!G,jAB)ZKCC&VlHD#S>OE;jnWFT-I_HN&<kJGt3#LAm&/O8b=AQ2[9PTDkSaWW'%!Yl;*1
])KJD_u@^Ubl5ugeGe)!h>Z@3ir8*>l2L&Kn,DkVo)A=]pAXgcq>U6iqtU,^s+145s7lQlqu6Hkq>U-f
pAXaao)A.Xn,D\Ql2KiEir7j7h>Z%*eGdhobl5]__u@FM])K/;Yl:a'WW&XkT)P5YQ2ZsGO8b"8L]2r*
JGsurHN&*eFT-=[E;jbSD#S2KC&VfFB)ZB=AH$*'@fBm7AH$0>B)ZKCC&VlHD#S>OE;jnWFT-I_HN&<k
JGt3#LAm&/O8b=AQ2[9PTDkSaWW'%!Yl;*1])KJD_u@^Ubl5ugeGe)!h>Z@3ir8*>l2L&Kn,DkVo)A=]
pAXgcq>U6iqtg6lrV_<IL&V2PrVHKlqu6Hkq>U-fpAXaao)A.Xn,D\Ql2KiEir7j7h>Z%*eGdhobl5]_
_u@FM])K/;Yl:a'WW&XkT)P5YQ2ZsGO8b"8L]2r*JGsurHN&*eFT-=[E;jbSD#S2KC&VfFB)ZB=AH$*'
@fBm7AH$0>B)ZKCC&VlHD#S>OE;jnWFT-I_HN&<kJGt3#LAm&/O8b=AQ2[9PTDkSaWW'%!Yl;*1])KJD
_u@^Ubl5ugeGe)!h>Z@3ir8*>l2L&Kn,DkVo)A=]pAXgcq>U6iqtU-5s3(H;rVl]nqYp<ip\smco`"@Z
n,DbSlMfuGjSn*:h>Z.-eGdkpcMkoa`;[ON]Df8<Z2Um)VuEFiTDk;YQi<*GNW+k8K`6Q%J,XfoGlDjb
EW0qVDuOSPCAqrHBDuKAA,]s:@K'X5@.dn%?MIn,@/aL5@0'eFraPk:ral(Arb;@IrbVRPrc%jVrcS3b
rd4Wordt-&repc9rfI,GrgWnZrhBCjriQ1)rjMg<rkJHNrlG)armC_prn@A,ro!e:roj@HrpKdSrp]pZ
rq69brqZQirqlKhTDsKBkPt>Urql]krqZQfrq??`rp]pUrpKdNroa:Aro!e3rn@A$rmC_jrlG)WrkJHE
rjMg2riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jTrbVRKrb;@Eral(=raPk8ra5Y4oj@K#
pg=#.ra5Y5raPk:ral(Arb;@IrbVRPrc%jVrcS3brd4Wordt-&repc9rfI,GrgWnZrhBCjriQ1)rjMg<
rkJHNrlG)armC_prn@A,ro!e:roj@HrpKdSrp]pZrq69brqZQirqlQj!WDtJs+UIRrVcTkrql]krqZQf
rq??`rp]pUrpKdNroa:Aro!e3rn@A$rmC_jrlG)WrkJHErjMg2riQ0trhBCargNhQrfI,=repc/rdk&u
rd4WhrcS3[rc%jTrbVRKrb;@Eral(=raPk8ra5Y4oj@K#pg=#.ra5Y5raPk:ral(Arb;@IrbVRPrc%jV
rcS3brd4Wordt-&repc9rfI,GrgWnZrhBCjriQ1)rjMg<rkJHNrlG)armC_prn@A,ro!e:roj@HrpKdS
rp]pZrq69brqZQirqlKhbQ#lfrr2fnrquclrqZQgrq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)U
rkABDrj2U.riQ0qrh9=_rg*PIrf@&;reLK)rdauqrd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*
kun!hr`f>+!F/n/?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(
Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fr;QZlrh]XGs6BX`rqlZnr;QQl
q>U0gp&=U_o)A.XmJcGNk5OH@iVq^5gA]\&d/M8gaSs'U^AbbDZi73.Xo>-qU&LY_QN!*IO8b+;L]2o)
JGsrqH2_maErL"VD>n;LB`;TBAH$';@/F=.?2e+.>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cGD>nJQ
EW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_T
o)A7[p&=acq>U6fquHZrrVcWmJcCc1rr)rsrVc]or;QQlq>U0gp&=U_o)A.XmJcGNk5OH@iVq^5gA]\&
d/M8gaSs'U^AbbDZi73.Xo>-qU&LY_QN!*IO8b+;L]2o)JGsrqH2_maErL"VD>n;LB`;TBAH$';@/F=.
?2e+.>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&Lke
Xo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fr;QZlrmCbns8N#prVl`o
qu6Ejq#:$ep&=R^nG_nUm/H;LjSn0<hu;C0f)F+scMkrb`;[RO]Df;=Yl:a'W;`IhSc5)WP5^OAN;eS2
KDpB"HiA6gFT-7YDZ4JOB`;WCAH$';@/aO4?2e+.>PhS&=P['W=92N+r`T5)r`oG.ra5Y5raPk;rau.C
rbVROrc%jYrce?grdXp"reCE2rf@&ArgNhWrh07hriH+'rjVm=rkSNOrlP/brmLetrnIG0ro3q<rp'LL
rpTjUrq$-^rqHEerqZQjrquZlrr/boJcG-;rr2fnrqucmrqZQgrqHEbrq$-YrpTjQrp'LDro3q7rnIG'
rmLekrlP/XrkSNFrjVm2riH*trh07]rgNhLrf@&;reCE)rdXoorce?`rc%jSrbVRIrau.?raPk7ra5Y1
r`oG,qcWo#h,jJUr`T5)r`oG.ra5Y5raPk;rau.CrbVROrc%jYrce?grdXp"reCE2rf@&ArgNhWrh07h
riH+'rjVm=rkSNOrlP/brmLetrnIG0ro3q<rp'LLrpTjUrq$-^rqHEerqZQjrqlcpr;HWoJcCl4rr2io
!<)oprql]jrqQKerq69^rp]pUrp9XLroF(<rnm_0rmq(srm(Mbrl"fOrk&0=rilC'ri#ghrgj%Wrf[8A
rf$i2re(3"rd4WgrcJ-Yrbh^Orb2:Crac";ra>_4ra#M.r`f8&r`IuXqcNi#r`fA,ra#M1raGe8rac"?
rb2:Irbh^SrcJ-`rd4Wore(3)rf$i;rf[8Lrgj%]ri#gtrilC2rk&0Frl"fXrm(Mkrn%/(rnm_7roF(D
rp9XQrp]pYrq69brqQKgrql]mqu-NndJqVorr2fnrqucmrqZQgrqHEarpg!Vrp9XLroj@@ro!e4rn.5"
rm1Sfrl>#Srk8<?rj)O+ri#gjrgs+WrfmDDrf$i4rdk&urd=]grcA'Wrbh^Nrb2:@raPb3ra#M.r`];(
r`K/$r`8nrr`&,\r`&bp!*0,$<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;
Pl@*MT)PJ`W;`t!ZMqB5^&GkI`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jr;6Hlrh]XG
s6]jcrqlZnr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/W
Pl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;T\p<rQ2"=T2J&
>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`W;`t!ZMqB5^&GkI`r=3]ci2Gn
f`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jquH]nrVleIs,m?\rqu]prVl`oqu6Ejq#:$eo`"C[n,D\Q
lMg#Hir7m8hYu1,eGdenbl5Z^_>_.I\,N]4Y5YC!UAgb`RJrHMOT(4<M#Mu)J,XipG5cR^DuOYRC]8#H
A,]s7?iF@1>lIq+=oMP&=8l7t<W5t^;uTbn<W6%u=8l>$=oMV(>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmg
If=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*g
qu6NjrVlfDs4%)JrqlZnr;QTmqYp6gpAXaanc&%Wn,DVOkPjTBi;VO2g&BJ"d/M;h`W!aR^AbS?ZMq$+
VZ*=hTDk/UPQ$XBM>i2-JGsurGlDjbE;jbSD#S)HAc?-;@/aL3>lIn*=T2D$<W5ts;uT\l;;G(J;#jMl
;Z9Vo<;ons=8l>$=oM\*?2e72@K'g:BDu`HDZ4VSFoH[cIK"crL&Qr.O8b@BQN!NUU]..iY5Ya+[f4#?
_>_FQc2Q)he,J&"h>Z@3jo4KClMg8OnG_tWp&=[ap\t$gqu6NmrVQSms+14>s8N#prVl`oqu6Hkp\smc
p&=L\nG_nUlMfuGjo43;h#?"+e,I_nc2P]]_Z%:K[f3T3Y5Y<tUAgeaQN!*IO8b"8K`6N$IK"KjFoH@Z
DZ4JOBDuKA@K'[6?N+4/=oMP&=8l5!<;ohq;Ys>I;#X>h;Z9Vo<;ons=8l>$=oM\*?2e72@K'g:BDu`H
DZ4VSFoH[cIK"crL&Qr.O8b@BQN!NUU]..iY5Ya+[f4#?_>_FQc2Q)he,J&"h>Z@3jo4KClMg8OnG_tW
p&=[ap\t$gqZ-Npr;?Qmqu20HQiI'aqu$QnquHZoqu6Hkp\smcp&=L\nG_nUlMfuGjo43;h#?"+e,I_n
c2P]]_Z%:K[f3T3Y5Y<tUAgeaQN!*IO8b"8K`6N$IK"KjFoH@ZDZ4JOBDuKA@K'[6?N+4/=oMP&=8l5!
<;ohq;Ys>I;#X>h;Z9Vo<;ons=8l>$=oM\*?2e72@K'g:BDu`HDZ4VSFoH[cIK"crL&Qr.O8b@BQN!NU
U]..iY5Ya+[f4#?_>_FQc2Q)he,J&"h>Z@3jo4KClMg8OnG_tWp&=[ap\t$gqu6NmrVQTDs4%)JrqlZn
qu6Hkq>U-fpAX^`nc&"Vm/H5Jk5OE?hu;C0f`':tcMkuc_Z%:K]Df/9YPtR$UAgb`Rf8NMOT(4<K`6Q%
If=TkFoHC[DZ4GNB`;QA@K'X5>Q.h*=oMM%<rQ+u;uT\o;>sDh:\@KX:%D'Y:B45h;#X>k;Z9Vo<W6%u
=8lA%>5hb*?iFO6AH$9ACAr,MEW1+[GlE0kJc:?%N;en;PQ%$MT)PJ`WrB1#Zi7T9^])+Lb5TZbdJhet
g]$+0j8S3?kl0rJmf)bUo`"O_p\t!fqYpBkrVQSms+14>s8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`D
j8Rs8g]#k)dJhGjb5T9W^AbbDZi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/
>5h\(=8l8"<W5qr;Z9Pm;#=&]:A@QS:B"&d;#X>k;Z9Vo<W6%u=8lA%>5hb*?iFO6AH$9ACAr,MEW1+[
GlE0kJc:?%N;en;PQ%$MT)PJ`WrB1#Zi7T9^])+Lb5TZbdJhetg]$+0j8S3?kl0rJmf)bUo`"O_p\t!f
q>gBnqtpBkqu20HQiI'aqu$QmqZ-NmqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)dJhGjb5T9W^AbbD
Zi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"<W5qr;Z9Pm;#=&]
:A@QS:B"&d;#X>k;Z9Vo<W6%u=8lA%>5hb*?iFO6AH$9ACAr,MEW1+[GlE0kJc:?%N;en;PQ%$MT)PJ`
WrB1#Zi7T9^])+Lb5TZbdJhetg]$+0j8S3?kl0rJmf)bUo`"O_p\t!fqYpBkrVQTDs4%)JrqlZnqu6Hk
q>U-fp&=O]nG_hSli-)HjSn*:h>Z+,ec*qpbl5Z^_#D"G\,NW2X8]!qT`1G[QN!!FN;eY4JGsurHiA-d
EW0nUCAqiEA,]m8?N+70=oMP&=8l1u;Ys;f:]=,d:%_3T9CbdU9`Rrd:A[ia;#XDm<;otu=T2J&?2e41
@/a[8BDuZFDuOeVFT-XdIf=lsM#N>3OT(RFS,T)[VZ*XqYl;-2]DfVFa8X9]d/MSpg&Bh,i;Vg:kPjfH
mJcVSo)A=]p\t!fqYpBkrVQSms+14>s8N#prVl]nqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8g
a8WmR]`,D>Yl:^&VZ*7fS,S`QOT(4<M#Mr(IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f
:A[cY9__9O9`@c`:A[ia;#XDm<;otu=T2J&?2e41@/a[8BDuZFDuOeVFT-XdIf=lsM#N>3OT(RFS,T)[
VZ*XqYl;-2]DfVFa8X9]d/MSpg&Bh,i;Vg:kPjfHmJcVSo)A=]p\t!fq>gBnqtpBkqu20HQiI'aqu$Qm
qZ-NmqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR]`,D>Yl:^&VZ*7fS,S`QOT(4<M#Mr(
IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:A[cY9__9O9`@c`:A[ia;#XDm<;otu=T2J&
?2e41@/a[8BDuZFDuOeVFT-XdIf=lsM#N>3OT(RFS,T)[VZ*XqYl;-2]DfVFa8X9]d/MSpg&Bh,i;Vg:
kPjfHmJcVSo)A=]p\t!fqYpBkrVQTDs4%)GrVl`oqYp9hp\sjboDA%Vm/H8KjSn0<hu;@/f)F(rbl5Z^
_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB@fBa6?2e%,=T2>"<;oep;#=&c:&[ic
9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZ
VZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq>U6fr;QYns+14>s82cor;QQlq#:$e
p&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/J
AH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<B
D#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^b
q#L6lqYL*err%EJQiHs]rqlfnq>gBkq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(
VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W
9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG
`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq>U6fr;QZEs4%)JrVl`oqu6Ejq#:$ep&=R^nG_hSlMg#H
j8S$:hYu.+eGdenb5T?Y^](_AZi70-VuEIjTDk/UP5^L@L]2r*J,X]lFoHC[D#S/JBDu?=?iF@1=oMM%
<W5qr;Ys8h:&[i]9(,=>8+]@M8GGgV9`@c`:]=5j;uTer=8lA%?2e41@K'p=C&VrJEW1+[GlE3lKDpZ*
NrG4@QN!NUU].1jYPtm-\,O/A`;[pYci2DmfDaY+i;Vd9kl0lHmJcVSoD\F^p\sseq>U9jr;QYns+14>
s8Murr;QTmq>U0gp\sjboD\7YmJcDMkl0WAiVq^5fDa;!ci2)d`;[ON\,N`5YPtI!U]-nbQN!'HNrFh5
KDpB"GlDjbEW0eRC&VcE@K'X5?2e"+=8l5!;uT\l:]=)f9__6K8FK(;8GGgV9`@c`:]=5j;uTer=8lA%
?2e41@K'p=C&VrJEW1+[GlE3lKDpZ*NrG4@QN!NUU].1jYPtm-\,O/A`;[pYci2DmfDaY+i;Vd9kl0lH
mJcVSoD\F^p\spfq#U<erql]mrr%EJQiI'`rqucm!VuNkq>U0gp\sjboD\7YmJcDMkl0WAiVq^5fDa;!
ci2)d`;[ON\,N`5YPtI!U]-nbQN!'HNrFh5KDpB"GlDjbEW0eRC&VcE@K'X5?2e"+=8l5!;uT\l:]=)f
9__6K8FK(;8GGgV9`@c`:]=5j;uTer=8lA%?2e41@K'p=C&VrJEW1+[GlE3lKDpZ*NrG4@QN!NUU].1j
YPtm-\,O/A`;[pYci2DmfDaY+i;Vd9kl0lHmJcVSoD\F^p\sseq>U9jr;QZEs4@;Mrr2lqr;QTmq>U0g
p\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\P5^L@MuJA.JGsrqFoHF\DuOJM
B)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*U8(L-17RmAIpdtHXqb6l^r_WSkr`&ktr`];+ra5Y6rau.D
rbqdVrcS3frdXp"repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'rndY5roa:Frp0RPrpp'\rqHEe
rqZQjrqucoqu3buJcG?Arr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>rnm_1rmh"rrm(M_rk\TIrjDa1
riQ0prh07\rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&kor_WSir_EGdqb-]Uqa].*r^Z`T
r_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1rk8<Jrl4r_
rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqHKh!VuQjqu6NmrVQSFs.KDkrr2lqr;QQoq=t$drqQKerq-3[
rpTjProsFFro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tNrf6u9re(3#rd=]frc8!Vrb;@DraPk6
r`oG+r`9"tr_`Ykr_NMgr_32^pdt?Qe40F-pdtHXqb6l^r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3f
rdXp"repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'rndY5roa:Frp0RPrpp'\rqHEerqZQjrquco
qu5=LfDkjLrr)iorqcWhrq??arpp'XrpTjNroa:Aro!e2rn.4trm(McrkeZJrji$4ri?$rrh07[rg!JD
re^W-rdauprc\9[rb_XLrac":ra5Y.r`K/#r_i_mqbR2br_*,[r^coVr^QZOpdFR<pdG'Lr'gKPr^ZiV
r^m)^r_<8cr_`Ymr`9##r`];.raPk;rbDFLrc%j[rd+Qore19.rf@&DrgWn[rhoasrilC4rkABKrlY5b
rmC_trnRM2roF(@rosFNrpg!Yrq69brqQKhrql]nqu3buJcG?Arr2oqrquclrqQKdrq69]rp]pUrosFF
roF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"r
r_`Pgr_3;aqapcXqa^WTpdOsGmmHk<pdP'Lr^ZiVr^m)^r_<8cr_`Ymr`9##r`];.raPk;rbDFLrc%j[
rd+Qore19.rf@&DrgWn[rhoasrilC4rkABKrlY5brmC_trnRM2roF(@rosFNrpg!Yrq69b!;HTiq#:-h
qu6Qkrdk*Bs8N#srVl`oq>pBd!;QQerq69]rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoag
rgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<pdP'L
r^ZiVr^m)^r_<8cr_`Ymr`9##r`];.raPk;rbDFLrc%j[rd+Qore19.rf@&DrgWn[rhoasrilC4rkABK
rlY5brmC_trnRM2roF(@rosFNrpg!Yrq69brqQKhrql]nqu5=LgAh0Oqu-NlrqcWgrq??arpg!VrpB^K
roO.=rnm_/rmq(qrlb;\rkSNFrjMg/ri,mmrgj%Trf[8>reLK)rd=]hrc8!UrbDFFraGe5r`oG)r`9"t
r_WSir_EGdr_*5_r^coVr^QcRpdEq*rC$QOr^H]Rr^ZiVr_!/_r_3;dr_NMir`&ktr`K/)ra,S4rb)4F
rbh^Urce?hrdt-)rf$i>rg<\UrhTOmriZ7/rk&0Frl4r]rm:Yqrn@A/ro3q>roj@KrpTjVrq69arqHEg
rqlTkrr0)#JcGHDrr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"rhTOa
rg3VIrf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*^s*r^H]R
r^ZiVr_!/_r_3;dr_NMir`&ktr`K/)ra,S4rb)4Frbh^Urce?hrdt-)rf$i>rg<\UrhTOmriZ7/rk&0F
rl4r]rm:Yqrn@A/ro3q>roj@KrpTjVrq69a!;?Ngp\t$gqtp?krdk*Es8N#prVl`oq>p?b!;HKdrq69\
rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"rhTOarg3VIrf$i3rdt,srce?^rbh^Mrb)4=ra5Y0
r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*^s*r^H]Rr^ZiVr_!/_r_3;dr_NMir`&ktr`K/)ra,S4
rb)4Frbh^Urce?hrdt-)rf$i>rg<\UrhTOmriZ7/rk&0Frl4r]rm:Yqrn@A/ro3q>roj@KrpTjVrq69a
rqHEgrqlTkrr1XOgAh0Orr)iorql]krqHEcrq-3ZrpKdProa:Aro!e3rn.5"rm1Scrl"fMrji$7riH*r
rh07ZrfmDCreUQ+rdXolrcJ-XrbMLGraYq8ra#M,r`9"sqb[8er_3;`qapZTr^QcRr^>+#r'U?Lr^H]R
r^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdXrcnElre19,rf@&CrgNhZrhf[rrj2U6rkABMrlY5d
rm^r#rn[S3roF(Arp9XPrp]pZrq69brqcWkrqucorr0)#JcGHDrr2oqrqucmrqcWgrq??`rp]pTrp9XI
roF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2r`];%r_r\j
r_EGdr_!&Zqa^WTqaLKPb<u.pr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdXrcnElre19,
rf@&CrgNhZrhf[rrj2U6rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq-9c!Vc?fqYpBkr;QZordk*E
s8N#srVl`oqu6Emp\+[^rq??`rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7
re(3"rcnEarbqdOrb)4?ra>_2r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPb<u.pr^H]Rr^ZrZqb$i]r_<8d
r`&ktr`];+ra>_8rb)4GrbqdXrcnElre19,rf@&CrgNhZrhf[rrj2U6rkABMrlY5drm^r#rn[S3roF(A
rp9XPrp]pZrq69brqcWkrqucorr1XOh>dKRqu-NkrqcWirq??`rpp'XrpB^MroO.>rnm_/rmq(rrlb;\
rk\TFrjDa/rhoairgs+RrfI,<re(3#rd=]drc.pTrau.>ra>_1r`T5$r_i_mr_NMfr_!/]r^d#YqaUQR
r^?3Bh*V'-o0`LFr^H]Rr^ZrYr^m)^r_<Afr_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDR
rhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=rp'LLrp]pXrq69arqZQirql]nqu3l#JcGQGrr2fnrql]k
rqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rRrjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^I
raYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfSmmGntmmI(Br^H]Rr^ZrYr^m)^r_<Afr_`Ymr`9##
r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDRrhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=rp'LLrp]pX
rq-9b!VZ6dq>U6iqu6Qkrdk*Ks8N#prVl]nqYp9kp@\L[rq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rR
rjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfS
mmGntmmI(Br^H]Rr^ZrYr^m)^r_<Afr_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDRrhBCi
ric=.rjr*Frl4r\rmC_qrn@A/ro3q=rp'LLrp]pXrq69arqZQirql]nqu5FOh>dKRqu-NkrqcWirq69_
rpg!Urp0RJroF(;rndY,rm^qnrlP/XrkJHBrj)O*rhKIbrgWnMrf-o6rdk&srd"K`rbh^Nrac":ra5Y.
r`B(ur_WSir_EGcr_!/]r^ZrWqaLKPlpKSqrBp'Ar^?WPr^QlWr^m)]r_*5cr_NMir`&kur`];.raPk;
rbMLOrc8!`rdFcsre^W7rf[8Mrh'1briQ1*rj_sBrl"fXrm1Snrn.5,ro*k;rosFJrpKdUrq$-^rqZQi
rql]nqu3l#JcGQGrr2fnrql]krqZQdrq-3[rpKdOrosFCro*k5rn.5"rm1Scrl"fNrj_s5riQ0prh'1Z
rf[8?re^W*rdFckrc8!UrbMLDraGe5r`];&r`&knr_NMgr_*5_r^m)Zr^QcRr^?*?h*UHqr^?WPr^QlW
r^m)]r_*5cr_NMir`&kur`];.raPk;rbMLOrc8!`rdFcsre^W7rf[8Mrh'1briQ1*rj_sBrl"fXrm1Sn
rn.5,ro*k;rosFJrpKdUrpp-_!VQ-bq>U6iqu6Qkrdk*Ks8N#prVl]nqYp9kp%8=Xrq-3[rpKdOrosFC
ro*k5rn.5"rm1Scrl"fNrj_s5riQ0prh'1Zrf[8?re^W*rdFckrc8!UrbMLDraGe5r`];&r`&knr_NMg
r_*5_r^m)Zr^QcRr^?*?h*UHqr^?WPr^QlWr^m)]r_*5cr_NMir`&kur`];.raPk;rbMLOrc8!`rdFcs
re^W7rf[8Mrh'1briQ1*rj_sBrl"fXrm1Snrn.5,ro*k;rosFJrpKdUrq$-^rqZQirql]nqu5FOh>dKR
qu-NjrqZQgrq69^rp]pTrp0RIro="9rnRM(rmLekrl>#UrkAB>rilC&rh07\rg<\Hrepc1rdXonrcS3Z
rbVRIraGe5ra#M*r`/qqr_WShr_3;`r^m)[r^QcRr^?<EcpIXsogAUEr^H]Rr^d#[r_!/`r_<Agr_i_r
r`K/*ra5Y5rb2:Hrc%jZrd+QnreCE1rfI,Hrgj%]ri?%&rjDa>rkeZTrm(Mkrmq)(rnm_8roj@HrpKdT
rq$-^rqQKgrqcWmqu3l#JcGQGrr2fnrqcWirqQKcrq$-YrpKdOroj@Aro!e2rmq(srm(M`rkn`LrjDa0
ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_lr_EGdr_!/]r^d#XqaLKPnjCSeogAUE
r^H]Rr^d#[r_!/`r_<Agr_i_rr`K/*ra5Y5rb2:Hrc%jZrd+QnreCE1rfI,Hrgj%]ri?%&rjDa>rkeZT
rm(Mkrmq)(rnm_8roj@HrpKdTrpp-_!VQ-bq#:*gqYpHjrdk*Ks8N#prVlZmq>U-ip%8=Xrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCSeogAUEr^H]Rr^d#[r_!/`r_<Agr_i_rr`K/*ra5Y5rb2:Hrc%jZrd+Qn
reCE1rfI,Hrgj%]ri?%&rjDa>rkeZTrm(Mkrmq)(rnm_8roj@HrpKdTrq$-^rqQKgrqcWmqu5FOh>dKR
qu-NjrqQKerq-3\rpTjQrosFFro*k5rn@A#rm1Serkn`Mrjr*5ri?$qrh'1Xrfd>@reLK(rd4Wfrc.pS
rb2:Ara>_1r`T5#r_relr_EGdr_!/\r^ZrWqaLKPnjCYgp-SF>qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#
ra#M2rac"Arb_XSrc\9frdk'(rf-o@rgEbXrhf[rrilC5rkABLrlb;ermUl#rn[S4roa:Frp9XQrpp'\
rqHEfrqcWmqu3l#JcGQGrr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[e
rgEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<E_F!o_qaCEPr^QlW
r^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(rf-o@rgEbXrhf[rrilC5rkABLrlb;ermUl#
rn[S4roa:Frp9XQrpg']!VH$`p\t!fqYpHjrdk*Ks8N#prVlZmq#:!go^i.Urpp'Wrp9XKroa:>rndY.
rmUkmrlb;YrkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Y
r^QcRr^?<E_F!o_qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(rf-o@rgEbX
rhf[rrilC5rkABLrlb;ermUl#rn[S4roa:Frp9XQrpp'\rqHEfrqcWmqu5FOh>d9KrqcWhrqHE`rpg!V
rp0RJroX4<rnRM+rmLekrlY5Wrk8<?ric=#rhTO`rg3VHreg]/rdXomrcJ-XrbMLFraGe4r`fA(r`&ko
r_NMer_!/]r^ZrWqaLKPmmG>dp-S=;r^?WPr^QlWr^m)^r_3;er_i_pr`K/'ra,S4rau.FrbqdXrd"Km
re19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjVrq$-`rqZQiq#.JtJcGQGq#13g
rqQKerq$-ZrpTjProsFEro!e2rn7;!rm(McrkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"KbrbqdOrau.<
ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B_F!f\r^?WPr^QlWr^m)^r_3;er_i_pr`K/'ra,S4rau.F
rbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjV!:p6_oD\L`q>U6c
rIP!Js7lQlqYp9hpAsmW!;$3[rpTjProsFEro!e2rn7;!rm(McrkeZJrjVm1ri,mmrg`tSrfR2;re:?$
rd"KbrbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B_F!f\r^?WPr^QlWr^m)^r_3;er_i_p
r`K/'ra,S4rau.FrbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjV
rq$-`rqZQiq#0%Kh>dBNrquclrqQKerq$-ZrpTjOroa:Aro!e2rn%.rrlkA_rkSNFrjDa.ri#girgNhN
rf@&6re(3!rc\9]rbqdLrac"8r`oG*r`B(sr_WShr_*5_r^m)YqaLKPnjCGao0W+;qaCEPqaUQVr_!/_
r_EGhr_i_sr`T5*ra5Y8rb2:LrcA'^rdOiureLK6rfmDNrh9=hriZ7.rjr*ErlG)_rm:YrrnIG1roF(B
rp'LOrpg!ZrqHEfrqcNirr',%JcGQGqu-NlrqcWhrqHE`rpg!Vrp'LGroF(:rnRM)rm:YgrlG)Srk&0;
riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]r^QcRr^?<E\O,sVqaCEP
qaUQVr_!/_r_EGhr_i_sr`T5*ra5Y8rb2:LrcA'^rdOiureLK6rfmDNrh9=hriZ7.rjr*ErlG)_rm:Yr
rnIG1roF(Brp'LOrp^![!V>p^p\t!fqYU3irIP!Js82cor;QQlq#:!goCDtRrpg!Vrp'LGroF(:rnRM)
rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]r^QcR
r^?<E\O,sVqaCEPqaUQVr_!/_r_EGhr_i_sr`T5*ra5Y8rb2:LrcA'^rdOiureLK6rfmDNrh9=hriZ7.
rjr*ErlG)_rm:YrrnIG1roF(Brp'LOrpg!ZrqHEfrqcNirr([Qh>dKQrqucmrqZQgrq??^rp]pTroj@C
ro3q6rn@A%rm:Yfrl+lOrj_s5ri?$prh'1Vrf[8@re19#rd4Wcrc%jQral(<ra5Y-r`B(ur_WShr_3;_
r^d#Yr^QlUr^?<E`'WiXogA^Hr^HfUr^ZrYr^m)_r_EGhr`&ktr`T5-raPk<rbVRPrcA'crdb!$rf6u@
rg3VVrh]Uprj)O6rkJHOrlY5ermh#$rndY6roX4DrpKdTrpp'^rqHEfrql]mrr',%JcGQGrr)iorql]j
rqQKdrpp'XrpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6
r`T5%r`&knr_EGdr^m)[r^ZrWr^HfSnjBWJogA^Hr^HfUr^ZrYr^m)_r_EGhr`&ktr`T5-raPk<rbVRP
rcA'crdb!$rf6u@rg3VVrh]Uprj)O6rkJHOrlY5ermh#$rndY6roX4DrpKdT!:g0]o)A@^p\t!fqu6Nm
rIP!Js8Murr;QTmq>U0gp&XaT!:p-YrpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2
rdXoorcA'XrbVRFraPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfSnjBWJogA^Hr^HfUr^ZrYr^m)_r_EGh
r`&ktr`T5-raPk<rbVRPrcA'crdb!$rf6u@rg3VVrh]Uprj)O6rkJHOrlY5ermh#$rndY6roX4DrpKdT
rpp'^rqHEfrql]mrr([Qh>dKQrqucmrqZQfrq69\rpTjRroj@Cro3q5rn.5"rm(Mbrl"fLrjVm3ri,ml
rgs+Rrf@&:rdt,urd+Qarbh^Mrac"9ra#M*r`/qqr_WSgr_*5^r^d#Yr^HfSmmG#[m6^A2r^?`Sr^ZrY
r^m)^r_<Agr_i_rr`K/*raGe:rbDFMrc8!ardOiurepc;rfmDRrhKIlriuI3rk8<LrlP/brm^r#rn[S5
roX4DrpB^Rrpg!\rqHEfrql]mrr',%JcGQGrr)iorql]jrqHEbrpg!VrpB^KroO.=rn[S+rm^qmrlP/X
rk8<?riuI%rhKIarfmDCrepc-rdOimrc8!UrbDFCra>_2r`K/"r_i_lr_<Abr^m)[r^ZrVr^?3BYX7nJ
r^?`Sr^ZrYr^m)^r_<Agr_i_rr`K/*raGe:rbDFMrc8!ardOiurepc;rfmDRrhKIlriuI3rk8<LrlP/b
rm^r#rn[S5roX4DrpB^R!:^*[nc&4\p\t!fqu6NmrIP!Js8Murr;QTmq>U-fo`=UQ!:g'WrpB^KroO.=
rn[S+rm^qmrlP/Xrk8<?riuI%rhKIarfmDCrepc-rdOimrc8!UrbDFCra>_2r`K/"r_i_lr_<Abr^m)[
r^ZrVr^?3BYX7nJr^?`Sr^ZrYr^m)^r_<Agr_i_rr`K/*raGe:rbDFMrc8!ardOiurepc;rfmDRrhKIl
riuI3rk8<LrlP/brm^r#rn[S5roX4DrpB^Rrpg!\rqHEfrql]mrr([Qh>dKQrqucmrqQKdrq69\rpTjR
roj@Cro*k3rn.5!rltG`rkn`JrjDa/rhoairg`tOrf6u7rdauqrce?\rbVRJraPk6r`oG(r`/qpr_WSg
r_*5]r^ZrWr^HfSog?G[l9b/2r^?`Sr^QlWr^d#]r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7
rfd>Orh9=hric=/rk/6JrlG)`rmUkurnRM3roO.CrpB^Rrpg!\rqHEerql]mrr',%JcGQGrr)iorql]i
rq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0
r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EHVaC&Dr^?`Sr^QlWr^d#]r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\
rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUkurnRM3roO.CrpB^R!:^*[nc&4\p\ssequ6NmrIP!J
s8Murr;QTmq#:!do`=UQ!:g'WrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]h
rc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EHVaC&Dr^?`Sr^QlWr^d#]r_<Agr_`Yor`B)(
ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUkurnRM3roO.CrpB^Rrpg!\rqHEe
rql]mrr([Qi;`fUrr)iorqcWgrq??`rp]pSrp0RGro="8rn@A&rmC_grl4rRrji$7ric<srgs+WrfI,;
reCE&rd+QcrbqdNrb)4<ra#M,r`/qrr_WShr_*5^qa^WTr^?EHi'RE/ks556qEj70qa:6KqaUQTr^m)^
r_EGhr_rerr`];,ra>_<rbMLOrcJ-crdb!&rf$i<rgEbXrhTOsrj;[8rk\TRrlb;grmh#%rnm_8roX4G
rpKdTrq-3_rqHEgrql]nqu4))JcGZJrr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TE
rj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^#@,
qa:6KqaUQTr^m)^r_EGhr_rerr`];,ra>_<rbMLOrcJ-crdb!&rf$i<rgEbXrhTOsrj;[8rk\TRrlb;g
rmh#%rnm_8roX4GrpBdU!V#UXo`"O_p\t$gqu6Qkrdk*Ts8N#srVl`oqYp6gpAX[bnF-GIrpB^NroX4?
rnm_/rmq(rrlb;\rk\TErj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luW
r^QlTog@Y(r^#d6r^#@,qa:6KqaUQTr^m)^r_EGhr_rerr`];,ra>_<rbMLOrcJ-crdb!&rf$i<rgEbX
rhTOsrj;[8rk\TRrlb;grmh#%rnm_8roX4GrpKdTrq-3_rqHEgrql]nqu5XUi;`fUrr)iorqcWgrq??_
rp]pSrp0RFro3q7rn7;$rm:Yerl+lOrj_s5riQ0orgj%Trf@&9re:?"rcnE`rb_XKral(:r`oG*r`/qr
r_NMgr_*5^r^ZrWr^HBFj$NW/k!8o3rBfR3ogA^Ir^QlWr^m)^r_EGgr_i_qr`T5*ra>_:rb;@KrcA'`
rdFd"reg]9rg3VTrhBCorj)O5rkJHNrlY5ermh#$rnm_7roO.FrpB^Srq$-^rqHEgrql]nqu4))JcGZJ
rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHBrj)O*rhBC_rg3VFreg]/rdFcjrcA'U
rb;@Cra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^#I/ogA^Ir^QlWr^m)^r_EGgr_i_qr`T5*
ra>_:rb;@KrcA'`rdFd"reg]9rg3VTrhBCorj)O5rkJHNrlY5ermh#$rnm_7roO.Frp9^T!V#UXoD\F^
p\t$gqu6Qkrdk*Ts8N#srVl`oqYp6gpAXXanF-GIrpB^NroO.=rnm_.rmh"prlY5ZrkJHBrj)O*rhBC_
rg3VFreg]/rdFcjrcA'Urb;@Cra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^#I/ogA^Ir^QlW
r^m)^r_EGgr_i_qr`T5*ra>_:rb;@KrcA'`rdFd"reg]9rg3VTrhBCorj)O5rkJHNrlY5ermh#$rnm_7
roO.FrpB^Srq$-^rqHEgrql]nqu5XUi;`fUrr)iorqcWgrq??_rp]pSrp0RFro3q7rn.5!rm1Sbrkn`M
rjMg2riH*lrgWnQrf6u7re(2trce?^rbVRIraYq7r`fA(r`&kor_NMer_!/]r^QcRpd<k(h*Cp*iBm<,
r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6rg*PRrh07lriuI2rkJHNrlG)brm^r"
rnm_7roO.FrpB^Srq$-^rqHEgrql]nqu4))JcGZJrr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-rmUkm
rlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_
h*Um(r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6rg*PRrh07lriuI2rkJHNrlG)b
rm^r"rnm_7roO.Frp9^T!V#UXoD\F^p\t$gqu6Qkrdk*Ts8N#srVl`oqYp6gpAXXanF-GIrpB^NroO.=
rnm_-rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)Y
qaL9Ih*Tp_h*Um(r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6rg*PRrh07lriuI2
rkJHNrlG)brm^r"rnm_7roO.FrpB^Srq$-^rqHEgrql]nqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LD
ro*k5rmq(trm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\
r^QlUr^?NKj$N`2f0B=%!C9$36MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&
N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTm
qYp6gp&=O]n,D\QlMflDiVq^5f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5
>5hV&;Z9Ml:B!oc9)_B\7fGjU7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>
C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]m
qu20HZN'q'rqucmrqcWgrq69]!UoIWn,D\QlMflDiVq^5f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2
JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml:B!oc9)_B\7fGjU7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^
:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/L
n,DnWp&=^bqYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wli-/Jj8S!9h>Z")df.Sl`r<gR^&GA;Y5YC!
TDk8XPQ$L>L&QW%HN&'dE;jVOB)Z6<?2e"+=8l+s:]=)f9E%N^8,bsV7.iq06Mj("5QO,8r^#[5ogA^H
r^HfVr^m)^r_<Agr_i_sr`];,raGe;rbDFOrcS3drdb!&repc>rgEbXri#h!rj2U;rkeZSrm1Smrmq))
ro!e9rosFKrpTjWrq69brqcWkrquZm\,V$Zr;ZcqrqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`
rk\TIrj2U,ri#ggrgEbLrepc0rdauorcS3ZrbDFEraGe3r`T5%r_i_kr_<Abr^m)Zr^HfSog@k.qa&^s
r^#[5ogA^Hr^HfVr^m)^r_<Agr_i_sr`];,raGe;rbDFOrcS3drdb!&repc>rgEbXri#h!rj2U;rkeZS
rm1Smrmq))ro!e9rosFK!:KsWn,DnWp&=^bqYpBkr;6JEs0D\(rr2ipqu6Hkp\sjbncA4J!:TpQrosFB
ro!e3rmq(srm1S`rk\TIrj2U,ri#ggrgEbLrepc0rdauorcS3ZrbDFEraGe3r`T5%r_i_kr_<Abr^m)Z
r^HfSog@k.qa&^sr^#[5ogA^Hr^HfVr^m)^r_<Agr_i_sr`];,raGe;rbDFOrcS3drdb!&repc>rgEbX
ri#h!rj2U;rkeZSrm1Smrmq))ro!e9rosFKrpTjWrq69brqcWkrquZmj8\';rr2oprql]krqHEbrpg!V
rp0RJro="9rnRM(rmLekrl+lQrk/6:riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"rr_NMf
r_!/\r^ZrVr^?NKj$M*Xr'91,qa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:rb2:LrcJ-ardXp#reg]<
rg<\Vrhoatrj2U:rkSNPrm(Mkrmq)(rnm_8rosFKrpTjVrq-3arqcWkrquZm\,V$Zr;ZcqrqucmrqcWg
rq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$
r_i_kr_<Aar^d#Yr^HfSpd=(.b<XuPqa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:rb2:LrcJ-ardXp#
reg]<rg<\Vrhoatrj2U:rkSNPrm(Mkrmq)(rnm_8rosFK!:KsWn,DkVo`"UaqYpBkr;6JEs0D\(rr2ip
qu6Hkp\sjbnH&+I!:TpQrosFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:A
ra>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.b<XuPqa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:rb2:L
rcJ-ardXp#reg]<rg<\Vrhoatrj2U:rkSNPrm(Mkrmq)(rnm_8rosFKrpTjVrq-3arqcWkrquZmj8\';
rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Yhrl+lPrk&07riH*rrgj%TrfR29re(3"rc\9]rbqdK
rac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8bs;(ir^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)
ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[rriuI7rkSNPrltGirm^r&rnm_7roj@IrpTjVrq-3`rqcWk
rquZm\,V$Zr;ZcqrqucmrqcWfrq-3[rpTjProj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+
rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=:4r^"Lgr^#[5qa:?Nr^HfUr^ZrZr_3;d
r_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[rriuI7rkSNPrltGirm^r&rnm_7roj@I!:KsW
n,DkVo`"R`qYpBkr;6JEs0D\(rr2ipqu6HkpAX^`nH&+I!:TpQroj@@rnm_1rm^qorltG]rkSNFriuI(
rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=:4r^"Lgr^#[5qa:?N
r^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[rriuI7rkSNPrltGirm^r&
rnm_7roj@IrpTjVrq-3`rqcWkrquZmj8\';rr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%rm:Yhrl"fN
rk&07riH*qrg`tRrfI,8re(3!rcS3[rb_XIrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKlpCS8bs:tf
r^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiureUQ8rg*PRrh]UpriuI7rkSNO
rltGirm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZm\,V$Zr;ZcqrquclrqZQerq$-YrpKdOroj@@rndY/
rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+rdOihrc.pSrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfS
pd=C7qa&(ar^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiureUQ8rg*PRrh]Up
riuI7rkSNOrltGirm^r%rnm_7roj@H!:BmUmf)_To`"R`q>U9jr;6JEs0D\(rr2ipqYp<ipAX[_n,_tF
!:KjProj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+rdOihrc.pSrb)4@ra>_1r`K/"r_WSh
r_3;_r^d#Xr^HfSpd=C7qa&(ar^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiu
reUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZmj8\';rr2oprqcWi
rq??_rp]pTrp0RIro3q6rnIG%rm:Ygrkn`Mrjr*5ri5snrg`tRrf@&7re(3!rcS3[rb_XHraPk6r`];&
r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSnr`K/'ra5Y7rau.Hrc.p[rdOiu
reUQ7rg!JQrhTOorilC5rkABLrlkAgrm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZm\,V$Zr;Zcqrqucl
rqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.
r`B(ur_WShr_3;_r^d#Xr^?WNk!HUDk!K&7qaCEQr^ZrZr_3;cr_WSnr`K/'ra5Y7rau.Hrc.p[rdOiu
reUQ7rg!JQrhTOorilC5rkABLrlkAgrm^r%rnm_7roj@H!:BmUmf)_To`"R`q>U9jr;6JEs0D\(rr2ip
qYp<ipAX[_n,_tF!:KjProj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=
ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!HUDk!K&7qaCEQr^ZrZr_3;cr_WSnr`K/'ra5Y7rau.Hrc.p[
rdOiureUQ7rg!JQrhTOorilC5rkABLrlkAgrm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZmj8\0>rr2oq
rquclrqZQerq$-YrpKdOroj@@rndY/rmUkmrlb;YrkABBrilC%rhKI^rg!JDreLK(rdFcgrc.pSrau.>
ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_EGhr`&ktr`];.raYq>rb_XS
rcS3grdt-)rf@&DrgWn^ri5t%rji$Brkn`Yrm1SmrnIG0ro3q@rp'LNrp]pZrq??erql]mrr)iq\,V$Z
!WW3!rr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I\mbPoEY^Ab\BYl:[%U]-b^Q2ZjDL]2l(IK"Bg
EW0hSB)Z<>?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@fd;#XGn<rQ;%?iFR7
B)ZZHEW1+[IK"itL]3A6Q2[9PU].:mYl;34^Ac%LbPoiee,J,$hu;X7kl0iImK)bDrp]pZrq??erql]m
rr)iqJcE.Xrr2oqrquclrqZQerq$-Y!Uf@Umf)POkl0T@hYu:/e,I\mbPoEY^Ab\BYl:[%U]-b^Q2ZjD
L]2l(IK"BgEW0hSB)Z<>?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@fd;#XGn
<rQ;%?iFR7B)ZZHEW1+[IK"itL]3A6Q2[9PU].:mYl;34^Ac%LbPoiee,J,$hu;X7kl0lHmf)_To`"R`
q>U9jr;QZoro=%=s8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5g]#\$ci2,e_u@CL\c/i4WrAdmRf8TO
O8aq6Jc:)sFoHC[D>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_U5k@8'6N0@L7/f[T8,c*Z9`@cc
;#XDm<rQ8$?iFO6Ac?QGEW1+[IK"itL]3A6Pl@-NU].:mYl;34^Ac%LbPoiee,J,$hYuL5kl0lHmf)_T
oD\F^q>U9jr;QZorjVoYrrN0"rr2oqrquclrqZQdrq$-YrpKdOroj@?rndY/rmUkmrlb;YrkABBrilC%
rhKI]rg!JDreLK(rdFcgrc.pSral(<ra5Y-r`B(tr_WShr_3;_r^d#Xr^?WNk!HUDk!K&7qaCEQr^ZrZ
r_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5roj@H
!:BmUmf)_ToD\F^q>U9jr;QZordk*Ws8N#srVl`oqYp<ip&=R^n,_tF!:KjProj@?rndY/rmUkmrlb;Y
rkABBrilC%rhKI]rg!JDreLK(rdFcgrc.pSral(<ra5Y-r`B(tr_WShr_3;_r^d#Xr^?WNk!HUDk!K&7
qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$
rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5
g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ
6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%\c0>B
_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr.KK[K$7*rr)iorqcWirq69^rpTsVmJu\S
li-,IiVq^5g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm:B!rd
8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]
WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?lMg5NnG`%Yp&=ddqu6NmrVlfVs5X.Yrr2lqr;QQlq>U'doD\7Y
mf)POkl0Q?hYu:/e,I\mbPoBX^&GSAYl:[%U]-_]Q2ZjDL]2l(I/\6eE;j_RAc?0<?iF4-=8l.t;#X5h
9`@W_8H)*X7/K@66H;@_5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCC
Rf9)]WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?lMg5NnG`%Yp&=ddqu6NmrVlf*s+11Ns8W)trr)iorqcWi
rq69^rp]pTrp0RIro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%
r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-raPk<rb_XSrcJ-erdk'(
rf@&CrgNh]ri5t%rji$BrkeZXrm1SmrnIG/ro*k?rosLO!UfCTnG`%Yp&=ddqu6NmrVleIs0_n+rr2lq
r;QQlq>U'doD\4[md:)Crp0RIro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XG
raPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-raPk<rb_XS
rcJ-erdk'(rf@&CrgNh]ri5t%rji$BrkeZXrm1SmrnIG/ro*k?rp'LNrp]pYrq69drql]mrr)iqj8\0>
rr2oqrquclrqZQerq$-YrpKdOroj@@rndY/rmUkmrlb;Xrk8<ArilC%rhKI^rg!JDreLK(rd=]erc%jR
rau.=ra5Y-r`B(tr_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Agr_resr`T5-raYq>
rb_XSrcJ-erdk'(rf@&DrgWn^ri5t%rji$BrkeZXrm1SmrnIG0ro3q@rp'LNrp]pZrq??erql]mrr)iq
\,V$Z!WW3!rr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I\mbPoBX^&GSAYl:[%U]-b^Q2ZjDL]2l(
I/\6eE;j_RB)Z9=?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc;#XDm<rQ8$
?iFR7B)ZZHEW1(ZI/\]rL]3A6Q2[9PU].:mYl;34^Ac"KbPoiee,J,$hu;X7kl0iImK)bDrp]pZrq??e
rql]mrr)iqJcE.Xrr2oqrquclrqZQerq$-Y!Uf@Umf)POkl0T@hYu:/e,I\mbPoBX^&GSAYl:[%U]-b^
Q2ZjDL]2l(I/\6eE;j_RB)Z9=?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc
;#XDm<rQ8$?iFR7B)ZZHEW1(ZI/\]rL]3A6Q2[9PU].:mYl;34^Ac"KbPoiee,J,$hu;X7kl0lHmf)_T
o`"R`q>U9jr;QZoro=%=s8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdm
S,S]PO8aq6Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_U5k@8'6N0@L7/f[T8,c*Z
9`@fd;#XGn<rQ;%?iFR7B)ZZHEW1+[IK"itL]3A6Q2[9PU].:mYl;34^Ac%LbPoiee,J,$hu;X7kl0lH
mf)_To`"R`q>U9jr;QZorjVoYrrN0"rr2oqrquclrqZQerq$-YrpKdOroj@@rndY/rmUkmrlb;YrkABB
rilC%rhKI^rg!JDreLK(rdFcgrc.pSrau.>ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!HUDk!K&7qaCEQ
r^ZrZr_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7
roj@H!:BmUmf)_To`"R`q>U9jr;QZordk*Ws8N#srVl`oqYp<ipAX[_n,_tF!:KjProj@@rndY/rmUkm
rlb;YrkABBrilC%rhKI^rg!JDreLK(rdFcgrc.pSrau.>ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!HUD
k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;e
rmUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qo
rlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*R
o0DG)r^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Z
rm:YornIG0ro3q@rp'LNrp]pZrq??erql]mqu4))JcGZJrr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%
rm:Ygrkn`Mrjr*5ri5snrg`tRrf@&7re(3!rcS3[rb_XHraPk6r`];&r`&knr_EGdr^m)[r^QlTqa9L4
\No:Dr^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Z
rm:YornIG0ro3q@rosLO!UfCTnG`(ZpAXmequ6Njrdk*Ts8N#sr;QQlq>U*eoD\4[md:)Crp0RIro3q6
rnIG%rm:Ygrkn`Mrjr*5ri5snrg`tRrf@&7re(3!rcS3[rb_XHraPk6r`];&r`&knr_EGdr^m)[r^QlT
qa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*C
rkn`Zrm:YornIG0ro3q@rp'LNrp]pZrq??erql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1
rm^qorlkA[rkJHDrilC&rh]Ubrg*PFreUQ+rdOiirc8!Urau.>ra5Y/r`B)!r_WShr_3;_r^d#Xr^?WN
k!Jr2bs:tfr^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9irdt-*rfI,Grgj%bri?%&
rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]mqu4))JcGZJrr2oprql]krq??`rpg!Vrp0RI
ro3q7rnRM&rm:Ygrl"fNrjr*5ri?$prgj%SrfI,8re(3!rc\9]rbh^IraYq7r`fA'r`/qor_EGdr^m)[
r^QlTqa9L4qa&(ar^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9irdt-*rfI,Grgj%b
ri?%&rjr*Drl"f[rm:YornRM1ro3q@rp'RQ!UoLVnc&1[pAXpfqu6Njrdk*Ts8N#sr;QTmqYp3fo`"@]
n*^8Frp0RIro3q7rnRM&rm:Ygrl"fNrjr*5ri?$prgj%SrfI,8re(3!rc\9]rbh^IraYq7r`fA'r`/qo
r_EGdr^m)[r^QlTqa9L4qa&(ar^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9irdt-*
rfI,Grgj%bri?%&rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWf
rq-3[rpTjProj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"
r_WShr_3;_r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"r`oG1rac"@rbqdW
rc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??frql]mqu4))JcGZJ
rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Yhrl+lPrk&07riH*rrgj%TrfR29re(3"rc\9]rbqdK
rac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8`BaDgk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"r`oG1
rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp'RQ!UoLVnc&1[pAXpf
qu6Njrdk*Ts8N#sr;QTmqYp3fo`"@]n*^8Frp0RIro3q7rnRM&rm:Yhrl+lPrk&07riH*rrgj%TrfR29
re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8`BaDgk!Jr4r^?`Sr^QlWr^m)_
r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RP
rpg![rq??frql]mqu5XUi;`fUrqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoae
rg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZ
r_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="B
rp9XQrpg![rqHEgrql]mqu4))JcGZJrr2oprql]krqHEbrpg!Vrp0RJro="9rnRM(rmLekrl+lQrk/6:
riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"rr_NMfr_!/\r^ZrVr^?NKj$LpSi'R<.r^?`S
r^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1
ro="Brp0XR!UoLVnc&1[p\t$gqu6Njrdk*Ts8N#sr;QTmqYp6gp&=I^n*^8Frp0RJro="9rnRM(rmLek
rl+lQrk/6:riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"rr_NMfr_!/\r^ZrVr^?NKj$LpS
i'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^
rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69\rpTjQrp'LDro!e3rmq(s
rm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3r`T5$r_i_lr_EGbr^m)[r^QlUr^?WN
j$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriX
W;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=L\
n,D\QlMflDi;VR3f)F+scMki__>_.I[/R6-W;`FgRJrELMuJG0J,X`mFT-4XCAqiE@K'R3=oMJ$;Z9Ml
:B!lb8cD9[7fGjU7/K@36Mj'u5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+@K'j;CAr/NFT-Rb
J,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg,MmfDnGrpg![rqHEgrql]mqu20HZN'q'
rqucmrqcWgrq69\!UoIWn,D\QlMflDi;VR3f)F+scMki__>_.I[/R6-W;`FgRJrELMuJG0J,X`mFT-4X
CAqiE@K'R3=oMJ$;Z9Ml:B!lb8cD9[7fGjU7/K@36Mj'u5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r
=oM_+@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"Ua
qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wm/H;LjSn-;hYu+*e,I\maSs*V^AbM=YPtR$T`1DZPl?X@
LAl`&HN&'dE;jYPB)Z9=?N+.-=8l+s;#X5h9E%Q_8H)*X7K,^M6fUN46.\@%5lj8;j$NN.r^?`Sr^QlX
r^m)^r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;
rp'LLrpTjWrq69brqcWkrquZm\,V$Zr;ZcqrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`L
rj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$N`2f0K=$
j$NN.r^?`Sr^QlXr^m)^r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZU
rm1Smrmq)*ro*k;rp'LL!:KsWn,DnWp&=^bqYpBkr;6JEs0D\(rr2ipqu6Hkp\sjbncA4J!:TpRrp'LD
ro*k5rmq(trm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\
r^QlUr^?NKj$N`2f0K=$j$NN.r^?`Sr^QlXr^m)^r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@
rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;rp'LLrpTjWrq69brqcWkrquZmj8\';rr2oqrquclrqHEc
rq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!
r_`Yjr_3;`r^m)YqaL9Ih*Tp_rBfI0pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+
rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69brqcWkrr)`n\,V$Zr;Zcqrr)io
rqcWgrq??_rp]pSrp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7re(2trce?^rbVRIraYq7
r`fA(r`&kor_NMer_!/]r^QcRpd<k(h*Bd_pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?h
re(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=rp0RN!:U$YnG`%Yp&=^bqYpBkrVQSFs0D\(
rr2lqr;QQlp\smco)\@M!:^!Trp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7re(2trce?^
rbVRIraYq7r`fA(r`&kor_NMer_!/]r^QcRpd<k(h*Bd_pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?
rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69brqcWkrr)`n
j8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_.rm^qorlY5ZrkSNCrj)O*rhKIarg3VGreg].rdOil
rcA'Urb2:Ara>_1r`T5"r_i_kr_<Aar^llSr^?WNh*V!)k!8o3rBfI0r^6QNpdY6Sr_*5br_NMkr`&l"
r`oG1rac"Brb_XUrcnEkre19.rfI,Grgj%`riQ1*rj_sCrl+lZrm:Yprn7;.ro="?rp0ROrp]pZrq69b
rqcWkrr)`n\,V$Zr;Zcqrr)iorqcWgrq??`rp]pSrp0RGro="8rn7;#rm:Yerl+lPrj_s5riQ0prgs+U
rfI,:re19"rd"Karb_XJrac"9r`oG*r`&kpr_NMfr_!/]pdY6Nqa91+qa'@0r^#@,r^6QNpdY6Sr_*5b
r_NMkr`&l"r`oG1rac"Brb_XUrcnEkre19.rfI,Grgj%`riQ1*rj_sCrl+lZrm:Yprn7;.ro="?rp0RO
!:U$YnG`(Zp&=^bqYpBkrVQSFs0D\(rr2lqr;QQlp\smcoE"IN!:^!Trp0RGro="8rn7;#rm:Yerl+lP
rj_s5riQ0prgs+UrfI,:re19"rd"Karb_XJrac"9r`oG*r`&kpr_NMfr_!/]pdY6Nqa91+qa'@0r^#@,
r^6QNpdY6Sr_*5br_NMkr`&l"r`oG1rac"Brb_XUrcnEkre19.rfI,Grgj%`riQ1*rj_sCrl+lZrm:Yp
rn7;.ro="?rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(r
rlb;\rk\TErj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(
r^#d6r^$BIj?i`2qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.
rji$Erl4r\rmC_qrn@A/ro="?rp0ROrp]pZrq69brqcWkrr)`n\,V$Zr;Zcqrr)iorqcWgrq??`rp]pS
rp0RGro="8rn@A&rmC_grl4rRrji$7ric<srgs+WrfI,;reCE&rd+QcrbqdNrb)4<ra#M,r`/qrr_WSh
r_*5^qa^WTr^?EHi'RE/ks556h*V!+qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2
rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/ro="?rp0RO!:U$YnG`(Zp&=^bqYpBkrVQSFs0D\(rr2lq
r;QQlp\smcoE"IN!:^!Trp0RGro="8rn@A&rmC_grl4rRrji$7ric<srgs+WrfI,;reCE&rd+QcrbqdN
rb)4<ra#M,r`/qrr_WShr_*5^qa^WTr^?EHi'RE/ks556h*V!+qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2
rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/ro="?rp0ROrp]pZrq69brqcWk
rr)`nj8[s8rr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)
rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSk
r`&kur`oG0raPk@rbVRQrce?hrdb!)rf6uArg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjV
rq69brqQKirqucoZ2]CTq>^HmrqucmrqQKdrq69\rpTjRroj@Cro*k3rn.5!rltG`rkn`JrjDa/rhoai
rg`tOrf6u7rdauqrce?\rbVRJraPk6r`oG(r`/qpr_WSgr_*5]r^ZrWr^HfSog>WDogA^Hr^HfUr^ZrY
r_*5br_WSkr`&kur`oG0raPk@rbVRQrce?hrdb!)rf6uArg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<
roj@KrpKjW!V,^Zp&=^bq#:0ir;QYGs/H%trVl`oqu6BipAX^cnaQVLrpTjRroj@Cro*k3rn.5!rltG`
rkn`JrjDa/rhoairg`tOrf6u7rdauqrce?\rbVRJraPk6r`oG(r`/qpr_WSgr_*5]r^ZrWr^HfSog>WD
ogA^Hr^HfUr^ZrYr_*5br_WSkr`&kur`oG0raPk@rbVRQrce?hrdb!)rf6uArg`t]rhob!rjDa<rkn`V
rltGkrn%/)ro*k<roj@KrpTjVrq69brqQKirqucoh>c=2rr)iorql]irqHEcrpp'XrpKdLroO.<rn[S+
rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.rdOilrc.pTrbMLCra>_2r`K/"r_remr_EGdr^d#YqaUQR
r^?NK^-_*Opd>$Kr^H]Rr^ZrYr_3;dr_WSmr`9##ra#M2raYqCrbh^Trd"Klre(3.rfI,Ergj%`ri5t%
rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrq??crqQKirqucoZ2]CTq>^HmrqucmrqQKerq??^rp]pT
roj@Cro*k4rn.5"rm(Mbrl"fLrjMg1ri5smrgj%RrfI,;re(3!rd"K_rbh^NraYq8ra#M*r`/qrr_WSh
r_3;^r^ZiTr^HfSpd:rGpd>$Kr^H]Rr^ZrYr_3;dr_WSmr`9##ra#M2raYqCrbh^Trd"Klre(3.rfI,E
rgj%`ri5t%rjVm?rl"fXrm(Mmrn7;,ro*k<roj@LrpTpY!V5g\pAXgcq#:0ir;QYGs/H%trVl`oqu6Bi
p\sjeo'ueOrp]pTroj@Cro*k4rn.5"rm(Mbrl"fLrjMg1ri5smrgj%RrfI,;re(3!rd"K_rbh^NraYq8
ra#M*r`/qrr_WShr_3;^r^ZiTr^HfSpd:rGpd>$Kr^H]Rr^ZrYr_3;dr_WSmr`9##ra#M2raYqCrbh^T
rd"Klre(3.rfI,Ergj%`ri5t%rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrq??crqQKirqucoh>c=2
rr)iorql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'X
rbVRFraPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$
ra5Y6ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??c
rqZQjrqucoZ2]CTq>^HmrqucmrqZQgrq??^rp]pTroj@Cro3q6rn@A%rm:Yfrl+lOrj_s5ri?$prh'1V
rf[8@re19#rd4Wcrc%jQral(<ra5Y-r`B(ur_WShr_3;_r^d#Yr^QlUr^?<EYX8"Mr^?`Sr^QlWr^d#[
r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>
roj@LrpTpY!V5g\pAXgcq>U9jr;QYGs/H%trVl`oqu6Ejq#9sfo'ueOrp]pTroj@Cro3q6rn@A%rm:Yf
rl+lOrj_s5ri?$prh'1Vrf[8@re19#rd4Wcrc%jQral(<ra5Y-r`B(ur_WShr_3;_r^d#Yr^QlUr^?<E
YX8"Mr^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(rji$C
rl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:
rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]
r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[
rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$HlZ2]CTq>^?jrquclrqQKerq$-Z
rpTjOroa:Aro!e2rn%.rrlkA_rkSNFrjDa.ri#girgNhNrf@&6re(3!rc\9]rbqdLrac"8r`oG*r`B(s
r_WShr_*5_r^m)YqaLKPnjBrSogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)
rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV!:p6_oD\L`q>U6fr;QYGs/H%qrVl`o
qYp9hpAsmW!;$3[rpTjOroa:Aro!e2rn%.rrlkA_rkSNFrjDa.ri#girgNhNrf@&6re(3!rc\9]rbqdL
rac"8r`oG*r`B(sr_WShr_*5_r^m)YqaLKPnjBrSogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"A
rbqdWrc\9irdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$Hl
h>c=2rr2oqrquclrqQKerq-3\rpTjProj@Dro!e2rn7:urm(Mcrk\TIrjVm2ri5snrg`tSrfR2;re:?$
rd"Kbrc%jOrau.=ra,S.r`K.ur_`Yjr_3;ar_!&Xr^QZNpd<(go0W4>pdG!Kr^Zr[r_*5ar_NMjr_reu
r`];-raPk=rbDFOrcS3crdXp#reg];rg*PRrhTOnrilC2rk/6HrlY5brmC_urn[S3roX4Drp0RPrpp'\
rqHEfrqcWlrr)iqZ2]CTq>^Hnrr)iorqcWhrqHEarpp'Wrp0RIroX4<rnRM+rmC_jrlY5Vrk8<?rilC%
rhTO`rg3VHreg]/rdXomrcJ-YrbDFEraPk5r`fA(r_renr_NMer_*5_qa^WTpdFmE\O-'YpdG!Kr^Zr[
r_*5ar_NMjr_reur`];-raPk=rbDFOrcS3crdXp#reg];rg*PRrhTOnrilC2rk/6HrlY5brmC_urn[S3
roX4Drp0RPrpg']!VH$`p\t!fqYpElrVleIs/H%trr2lqr;QQlq#:!go^i.Urpp'Wrp0RIroX4<rnRM+
rmC_jrlY5Vrk8<?rilC%rhTO`rg3VHreg]/rdXomrcJ-YrbDFEraPk5r`fA(r_renr_NMer_*5_qa^WT
pdFmE\O-'YpdG!Kr^Zr[r_*5ar_NMjr_reur`];-raPk=rbDFOrcS3crdXp#reg];rg*PRrhTOnrilC2
rk/6HrlY5brmC_urn[S3roX4Drp0RPrpp'\rqHEfrqcWlrr)iqh>c=2rr2fnrqcWhrqHEarpp'Wrp9XK
roa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMg
r_3;`r^d#Yr^QcRr^?<EbsM+jogAUEr^HfUr^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4Wq
reLK4rfd>Lrh'1eriH+'rjr*Crkn`Yrm1Smrn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nZ2]CTq>^Hn
qu-NjrqQKerq-3\rpTjQrosFFro*k5rn@A#rm1Serkn`Mrjr*5ri?$qrh'1Xrfd>@reLK(rd4Wfrc.pS
rb2:Ara>_1r`T5#r_relr_EGdr_!/\r^ZrWqaLKPnjC8\ogAUEr^HfUr^ZrYr_!/_r_EGgr_i_qr`T5+
ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'rjr*Crkn`Yrm1Smrn@A-ro*k>rosFKrpTjW!;$<a
o`"Uaq>U6irVQSFs/H%trqlZnqYp9hpAspY!;-9]rpTjQrosFFro*k5rn@A#rm1Serkn`Mrjr*5ri?$q
rh'1Xrfd>@reLK(rd4Wfrc.pSrb2:Ara>_1r`T5#r_relr_EGdr_!/\r^ZrWqaLKPnjC8\ogAUEr^HfU
r^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'rjr*Crkn`Yrm1Sm
rn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdOroj@Aro!e2rmq(s
rm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_lr_EGdr_!/]r^d#X
qaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\U
rh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nZ2]CTq>^Hnqu-NjrqZQg
rq69^rp]pTrp0RIro="9rnRM(rmLekrl>#UrkAB>rilC&rh07\rg<\Hrepc1rdXonrcS3ZrbVRIraGe5
ra#M*r`/qqr_WShr_3;`r^m)[r^QcRr^?<Eb<kkhqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>
rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pY!;-Bcp&=ac
q>U6irVQSFs/H%trqlZnqYp<ip]:'\!;6?_rp]pTrp0RIro="9rnRM(rmLekrl>#UrkAB>rilC&rh07\
rg<\Hrepc1rdXonrcS3ZrbVRIraGe5ra#M*r`/qqr_WShr_3;`r^m)[r^QcRr^?<Eb<kkhqaCEPqaUQU
r^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLes
rnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nh>c=2rr2fnrqcWirqQKdrq-3[rpTjProsFCro!e3rn%/!
rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]irc.pTrbDFCraGe5r`T5%r`/qpr_NMfr_*5_r^coV
r^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Afr_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@
rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(Crp9XQrpg![rq??drqZQirr)`nZ2]CTq>^Hnqu-Nj
rqZQgrq??`rpg!Vrp0RJroF(:rn[S*rm^qnrlY5ZrkJHBrj2U,rhTOcrgWnMrf-o6rdauqrcnE^rbh^M
rac":ra5Y-r`B)!r_`Yjr_<Abr_!/\qa^WTqaLKPpd<4kpd=pHr^H]Rr^ZrYr^m)^r_<Afr_`Ypr`B)%
ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(Crp9XQrpg![
!;6HepAXjdq>U6irVQSFs/H%trqlZnqYp<ip]:*^!;?Earpg!Vrp0RJroF(:rn[S*rm^qnrlY5ZrkJHB
rj2U,rhTOcrgWnMrf-o6rdauqrcnE^rbh^Mrac":ra5Y-r`B)!r_`Yjr_<Abr_!/\qa^WTqaLKPpd<4k
pd=pHr^H]Rr^ZrYr^m)^r_<Afr_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5
rkJHNrlY5drmUkurn[S4roF(Crp9XQrpg![rq??drqZQirr)`nh>c=2rr2fnrql]krqZQerq-3\rp]pS
rp'LEro="8rn@A&rmC_grl4rRrjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"r
r_`Yjr_<Aar^m)[r^ZiTr^HfSmmGntrBp0Dr^?`SqaUQTr^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.I
rc%jXrd=]pre(3/rfI,Drgs+`rhob!rj;[9rk\TRrlb;grmh#%rnm_7roO.Erp9XRrpp']rq??erqcWk
rr)`nZ2]CTq>^Hnqu-NkrqcWirq??`rpp'XrpB^MroO.>rnm_/rmq(rrlb;\rk\TFrjDa/rhoairgs+R
rfI,<re(3#rd=]drc.pTrau.>ra>_1r`T5$r_i_mr_NMfr_!/]r^d#YqaUQRr^?3Bh*UQtr^?`SqaUQT
r^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`rhob!rj;[9rk\TRrlb;g
rmh#%rnm_7roO.Erp9XRrpp']!;6HepAXmeqYpBkrVQSFs/H%trqlZnqu6Hkq#U3_!;?Earpp'XrpB^M
roO.>rnm_/rmq(rrlb;\rk\TFrjDa/rhoairgs+RrfI,<re(3#rd=]drc.pTrau.>ra>_1r`T5$r_i_m
r_NMfr_!/]r^d#YqaUQRr^?3Bh*UQtr^?`SqaUQTr^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jX
rd=]pre(3/rfI,Drgs+`rhob!rj;[9rk\TRrlb;grmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`n
h>c4/rr2oqrqucmrqcWgrq??`rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7
re(3"rcnEarbqdOrb)4?ra>_2r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;c
qb[8kr`9#%r`oG1raYq?rbMLOrcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:
roa:IrpKdTrq-3_rqHEgrql]mrr)iqY5a(QpAb-krr)iorql]krqHEcrq-3ZrpKdProa:Aro!e3rn.5"
rm1Scrl"fMrji$7riH*rrh07ZrfmDCreUQ+rdXolrcJ-XrbMLGraYq8ra#M,r`9"sqb[8er_3;`qapZT
r^QcRr^=psqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?rbMLOrcJ-ardXp#reUQ7rfmDNrh07f
riH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_!;?Ngp\t$gqu6NmrVleIs.fVnrr2lqr;QTm
q>p?b!;HKdrq-3ZrpKdProa:Aro!e3rn.5"rm1Scrl"fMrji$7riH*rrh07ZrfmDCreUQ+rdXolrcJ-X
rbMLGraYq8ra#M,r`9"sqb[8er_3;`qapZTr^QcRr^=psqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1
raYq?rbMLOrcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_
rqHEgrql]mrr)iqgAfe)rr2oprql]krqQKdrq-3\rpTjRroj@Cro3q6rn@A&rm:YgrlG)Srk&0;ric=#
rhKI`rg3VIrepc1rdk&rrcnE`rbh^Mrb)4>ra5Y0r`K/#r`&kor_NMfqb-o\r^coVr^QcRmmQV3oL/UF
r^H]Rr^ZiVqb$i\r_<Afr_`Yor`9##r`oG0raPk>rbDFMrcA'_rd=]rreCE1rf[8Jrgj%`ri,n#rjDa;
rkSNSrlb;frmq)&rndY6roX4DrpB^Srpp'\rq??drqcWkrquZmY5a(QoDeghrqucmrqcWhrq??`rpp'W
rpB^KroO.=rndY.rmq(qrlkA_rkSNFrjDa/ri,mlrgj%Trf[8=reCE'rd=]ircA'VrbDFFraPk6r`oG)
r`9"tr_`Yjr_<8_r_!/\qa^WTqaKsAmmHP3r^H]Rr^ZiVqb$i\r_<Afr_`Yor`9##r`oG0raPk>rbDFM
rcA'_rd=]rreCE1rf[8Jrgj%`ri,n#rjDa;rkSNSrlb;frmq)&rndY6roX4DrpB^Srpp'\rq6?e!VlHh
qYpBkr;6JEs.KDkrr2ipqu6Emq"Ojarq??`rpp'WrpB^KroO.=rndY.rmq(qrlkA_rkSNFrjDa/ri,ml
rgj%Trf[8=reCE'rd=]ircA'VrbDFFraPk6r`oG)r`9"tr_`Yjr_<8_r_!/\qa^WTqaKsAmmHP3r^H]R
r^ZiVqb$i\r_<Afr_`Yor`9##r`oG0raPk>rbDFMrcA'_rd=]rreCE1rf[8Jrgj%`ri,n#rjDa;rkSNS
rlb;frmq)&rndY6roX4DrpB^Srpp'\rq??drqcWkrquZmgAfe)rr2oqrquclrqQKdrq69]rp]pUrosFF
roF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"r
r_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XR
rc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWk
rr)`nY5a(QoDeghrr)iorqcWhrq??arpp'XrpTjNroa:Aro!e2rn.4trm(McrkeZJrji$4ri?$rrh07[
rg!JDre^W-rdauprc\9[rb_XLrac":ra5Y.r`K/#r_i_mqbR2br_*,[r^coVr^QZOpdFR<pdFmGqaUQT
qag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZW
rltGirn.5*ro!e:roX4ErpTjVrpp']rq?Ef!VlHhqYpBkrVQSFs.KDkrr2lqr;QNnq"Ojarq??arpp'X
rpTjNroa:Aro!e2rn.4trm(McrkeZJrji$4ri?$rrh07[rg!JDre^W-rdauprc\9[rb_XLrac":ra5Y.
r`K/#r_i_mqbR2br_*,[r^coVr^QZOpdFR<pdFmGqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"C
rb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rqHEe
rqcWkrr)`ngAfe)rr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>rnm_1rmh"rrm(M_rk\TIrjDa1riQ0p
rh07\rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&kor_WSir_EGdqb-]Uqa]4,!CfQX8,,[T
9D_E[:B")h;>sPo<rQ;%>lJ+0@fC!=C&W&MErL4\I/\WpKDpf.O8b=ASGo/[U].CpZ2V01^&GnJ`r=9_
dJh\qh#?10iVr$>l2L#Jn,DnWo`"Uaq#:*gqu6NmrVQSss+14As8N#srVl`oqu6Ejq#:$eo`"C[n,DYP
l2KlFiVqa6h#>k'df.Pk`r<gR^&GG=Z2Um)U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+
<rQ(t;>sDk:]=,g9`%KX8c)$-7fGpQ8cDB[9`%Ta;#X>k<;oqt>5he+?iFO6B)ZNDDuOeVFoHdfJ,Y*"
MuJe:P5_!NTDkVbXo>U)[Jml=_Z%RScMl5jec+A'hYuL5kPj`Fli-APo)A:\p\spfq#U<erql]mrr)`n
JcDDCrr2oqrqucm!VuNkq>U0gp\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\
P5^L@MuJA.JGsrqFoHF\DuOJMB)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*U8(:$-8,,[T9D_E[:B")h
;>sPo<rQ;%>lJ+0@fC!=C&W&MErL4\I/\WpKDpf.O8b=ASGo/[U].CpZ2V01^&GnJ`r=9_dJh\qh#?10
iVr$>l2L#Jn,DnWo`"Uaq#:*gqu6NmrVQTJs4@;MrqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9h>Z%*
eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r;>X/d
:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5rf[8H
rgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="Arp'LNrpTjWrq-3arqZQiqu$Hlqu3buJcG?Arr2fn
rquclrqQKerq-3\rpTjSrp0RIro="9rn[S*rm^qnrlP/XrkJHCrj;[.ri#gkrgs+Trf[8@reLK*rdXol
rcS3[rb_XKrau.<ra5Y0r`K/$r`9"rr_`Pgqb?iYr^m)[f15g2r^llXr_<AeqbR2gr_i_rr`B)$r`oG/
raGe<rb;@Krc.p[rcnElre(3*rf6u@rg*PTrhBCjric=.rji$Crl"fXrm1Smrn%/*ro!e9roj@HrpKdS
rpp'\rqHEf!;Z`mqYU3irVQSFs.KDkrqlZnquQZj!;c]irqHEarpp'WrpKdOroj@Aro!e3rn%/!rm1Sc
rl"fNrji$8ric="rhKIarg*PHrf6u5re(3"rcnEbrc.pSrb;@DraGe5r`oG)r`B)"r_i_mqbR)`pe1TX
r^bX2r^d#[pe1T\r_E>dr_`Ymr`9#"r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5rf[8Hrgs+`ri#h"
rj;[8rkJHNrlP/crmUkurn[S3ro="Arp'LNrpTjWrq-3arqZQiqu$Hlqu5=LeGoFErquclrqQKerq69^
qsaUOrosFCro3q7rn@A&rmC_hrl>#Srk&0<riuI(rhf[frgNhOrfI,<reLK(rdFcjrcJ-YrbVRJrac";
ra5Y1r`];'r`/qsr_i_lqbR)`r_3;`nk&:@ogo-Ur(?i[r_<Afqb[8ir_rerr`K/'ra#M1raPk;rb;@J
rc%jYrd"Kkrdk''rf$i<rg!JOrh07friH+(rjMg<rk\TRrlkAhrmh#%rnm_7roF(Crp9OOrq$-^rqHEf
rqcNirr&eqJcG6>qu-NlrqcWhrqHEbrq$$Vrp9XKroF(<rnm_/rmq(rrlkA^rk\TGrjMg2riH*rrh07Z
rg!JErf$i3rdk&srcnEarc%jQrb;@BraPk6ra#M,r`K/"r`&kpr_WJfqb@&`r^u`Qmn!+Cqb$`Zr_<Af
qb[8ir_rerr`K/'ra#M1raPk;rb;@Jrc%jYrd"Kkrdk''rf$i<rg!JOrh07friH+(rjMg<rk\TRrlkAh
rmh#%rnm_7roF(Crp9OOrq$-^rqHEf!;Z`mqYU3irIP!8s82coquQZj!;c]irqHEbrq$$Vrp9XKroF(<
rnm_/rmq(rrlkA^rk\TGrjMg2riH*rrh07Zrg!JErf$i3rdk&srcnEarc%jQrb;@BraPk6ra#M,r`K/"
r`&kpr_WJfqb@&`r^u`Qmn!+Cqb$`Zr_<Afqb[8ir_rerr`K/'ra#M1raPk;rb;@Jrc%jYrd"Kkrdk''
rf$i<rg!JOrh07friH+(rjMg<rk\TRrlkAhrmh#%rnm_7roF(Crp9OOrq$-^rqHEfrqcNirr(@HeGoOI
qu-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQrfI,<reUQ(
rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$W!)EGeqbR)cr_reqr`B)$
r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$rn[S3
roF(Arp0RNrp]pXrq69brqZQirql]nqu3PoJcG6>rr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:rn[S,
rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&r`B(u
r_iViqbR2dqb?`Wpe10Or_<8bqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;
rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi!;cfoqu6Qkrdk*9
s8N#pr;lfm!;lclrqZQfrq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PF
rf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2dqb?`Wpe10Or_<8bqbR)cr_req
r`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$
rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu5+FeGoOIqu-Nlrql]krqHEcrq-3ZrpKdQrosFEro3q6
rn@A'rmC_jrlY5WrkABCrj2U-ri5smrh'1Zrfd>Brepc0rdt,urcnEbrc.pTrbDFFrac";ra5Y1r`];(
r`9"ur`&kpqbd>hqbR2dk"Y_Jr_EMjr)!AiqbmDmr`/qur`T5)ra#M1raPk;rb)4Frbh^TrcS3brdOit
re:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4ErpB^Rrp]pZrq69brqcWkrquco
qu3PoJcG6>rr2fnrqucmrqcWgrq??`rp]pTrpB^LroX4>rndY.rn%.srm(McrkeZKrjr*8ric=$rhKIb
rgWnNrf@&:re:?'rdOikrcS3[rbh^Mrb)4@raPk6ra#M,r`T5$r`/qsr_iVjr_WJfr_DTMqbI,dqb[8h
qbmDmr`/qur`T5)ra#M1raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZW
rltGirn%/'rndY6roX4ErpB^Rrp]pZrq69brqcWk!;llqr;QZlrdk*9s8N#pr;lio!;uinrqcWgrq??`
rp]pTrpB^LroX4>rndY.rn%.srm(McrkeZKrjr*8ric=$rhKIbrgWnNrf@&:re:?'rdOikrcS3[rbh^M
rb)4@raPk6ra#M,r`T5$r`/qsr_iVjr_WJfr_DTMqbI,dqb[8hqbmDmr`/qur`T5)ra#M1raPk;rb)4F
rbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4ErpB^Rrp]pZ
rq69brqcWkrqucoqu5+FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUknrltG]rkeZK
rjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!r`&kqr_iVj
h,+)J!)i_mr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>Irh'1brhf[t
rj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu3PoJcG6>rr2fnrqucm
rqcWgrq??arpg!WrpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaur
rcnEbrc%jSrbVRHral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_`Pjr_reqr`/r!r`K/&r`oG.ra>_6
rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@H
rpTjUrpg!\rq??crqcWk!;llqr;QZlrdk*9s8N#pr;lio!;uinrqcWgrq??arpg!WrpTjOroa:Bro!e2
rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaurrcnEbrc%jSrbVRHral(;ra>_3r`oG*
r`K/$r`/qsr_reoqbc0Gr_`Pjr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8
rfd>Irh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu5+F
dJs4Fqu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbM
rfI,<reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc*Vs!EN8#=8l>$
=oMV(>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmgIf=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rf
eGe,"hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*gqu6NjrVlems+14;s8N#prVl`oqu6Ejq#:$eo`"C[n,D\Q
lMg#Hir7m8hYu1,eGdenbl5Z^_>_.I\,N]4Y5YC!UAgb`RJrHMOT(4<M#Mu)J,XipG5cR^DuOYRC]8#H
A,]s7?iF@1>lIq+=oMP&=8l7t<W5t^;uTbn<W6%u=8l>$=oMV(>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmg
If=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*g
qu6KnrVZWnrdk*3s8N#qr;cfqr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?
ZMq$+W;`OjT)P/WPl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\
<;T\p<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`W;`t!ZMqB5
^&GkI`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jr;6HlrmCbks8N#prVl`oqYp<iq#9pb
o)A.Xmf)POl2KfDj8Rs8g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0tU&LV^RJrELOT(4<LAlf(J,XcnGQ)aa
E;j_RC]7uGB)ZB@@K'[6?iF@1>lIt,>5h\%=T2Cd<rQ1t=9)J)=]t`-r`fA,ra#M1ra>_6ral(@rb)4G
rbh^SrcS3brd+Qnre(3)rf$i;rfd>Lrgj%^ri#gtrilC2rk&0Frl+lZrm1Smrn%/(rnm_7roO.Drp0RO
rp]pYrq-3brqZQiqu$Hlqu3GlJcG$8rr2fnrquclrqZQgrq-3\rp]pTrp0RJroO.>rnm_0rn%.urm1Sd
rl+lPrk&0=rilC'ri#girgj%Vrfd>Crf$i2rdt-!rd+QfrcS3Zrb_XMrb)4Bral(;ra>_4ra#M.r`fA*
r`T,#r`A>br`Au!r`T5(r`fA,ra#M1ra>_6ral(@rb)4Grbh^SrcS3brd+Qnre(3)rf$i;rfd>Lrgj%^
ri#gtrilC2rk&0Frl+lZrm1Smrn%/(rnm_7roO.Drp0ROrp]pYrq-3brqZQiqtpHm!WDuordk*0s8Muu
rVc]nrquclrqZQgrq-3\rp]pTrp0RJroO.>rnm_0rn%.urm1Sdrl+lPrk&0=rilC'ri#girgj%Vrfd>C
rf$i2rdt-!rd+QfrcS3Zrb_XMrb)4Bral(;ra>_4ra#M.r`fA*r`T,#r`A>br`Au!r`T5(r`fA,ra#M1
ra>_6ral(@rb)4Grbh^SrcS3brd+Qnre(3)rf$i;rfd>Lrgj%^ri#gtrilC2rk&0Frl+lZrm1Smrn%/(
rnm_7roO.Drp0ROrp]pYrq-3brqZQiqu$Hlqu5"CcN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;
rndY.rmq(qrlkA_rkeZKrk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>
raPk7qd95+r`oG,r`\Phr`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;
PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQSj
s+148s8N#prVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(e
T)P&TPQ$XBN;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71
@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%
hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU0jr;llqqu20HNrT+X!WDuqrVl`oqYp<iq#9sco`"F\nG_hS
li-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3K)U<"I/\EjF8g4ZDuOVQ
CAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)
N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3i
rVQTAs3(H;rVl]nqYp<ip\smco`"@Zn,DbSlMfuGjSn*:h>Z.-eGdkpcMkoa`;[ON]Df8<Z2Um)VuEFi
TDk;YQi<*GNW+k8K`6Q%J,XfoGlDjbEW0qVDuOSPCAqrHBDuKAA,]s:@K'X5@.dn%?MIn,@/aL5@0'eF
raPk:ral(Arb;@IrbVRPrc%jVrcS3brd4Wordt-&repc9rfI,GrgWnZrhBCjriQ1)rjMg<rkJHNrlG)a
rmC_prn@A,ro!e:roj@HrpKdSrp]pZrq69brqZQirqlKhTDsKBkPt>Urql]krqZQfrq??`rp]pUrpKdN
roa:Aro!e3rn@A$rmC_jrlG)WrkJHErjMg2riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jT
rbVRKrb;@Eral(=raPk8ra5Y4oj@K#pg=#.ra5Y5raPk:ral(Arb;@IrbVRPrc%jVrcS3brd4Wordt-&
repc9rfI,GrgWnZrhBCjriQ1)rjMg<rkJHNrlG)armC_prn@A,ro!e:roj@HrpKdSrp]pZrq69brqZQi
rqlQj!WDtJs+UIRrVcTkrql]krqZQfrq??`rp]pUrpKdNroa:Aro!e3rn@A$rmC_jrlG)WrkJHErjMg2
riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jTrbVRKrb;@Eral(=raPk8ra5Y4oj@K#pg=#.
ra5Y5raPk:ral(Arb;@IrbVRPrc%jVrcS3brd4Wordt-&repc9rfI,GrgWnZrhBCjriQ1)rjMg<rkJHN
rlG)armC_prn@A,ro!e:roj@HrpKdSrp]pZrq69brqZQirqlKhbQ#ccrr2fnrqucmrqcWhrq??arq$-Z
rpTjProsFFro3q7rnRM(rmUkmrlkA_rkn`Lrjr*;rilC'ri#gjrgs+Yrg!JGrf@&8reLK*rdaurrd+Qe
rcJ-[rc%jSrb_XLrb21Arau.@pga;4pgO&/pga;7!+l7DB)?6?C&VlHD>nGPE;jnWFoHR`HN&<kJGt3#
LAm&/O8b=AQ2[9PTDkSaW;`jsYl;*1])KGC_u@^Ubl5rfe,Iqth#?41ir8-?l2L#Jn,DkVoD\F^p\sse
qYpBkr;QZlrh'4As6'F]rqlZnr;QTmqYp9hpAXaaoD\:Zn,DYPl2KlFir7j7h#>n(e,I\mbl5]__u@CL
])K/;Yl:a'W;`OjT)P5YQ2ZsGO8b"8L]2r*JGsurHN&*eFT-=[E;jbSD>n;LB_uHAB)ZB:A,]s4@JaO/
A,^'=B)?6?C&VlHD>nGPE;jnWFoHR`HN&<kJGt3#LAm&/O8b=AQ2[9PTDkSaW;`jsYl;*1])KGC_u@^U
bl5rfe,Iqth#?41ir8-?l2L#Jn,DkVoD\F^p\sseqYpBkr;QZnrW3#tJcCH(!WN&urqlZnr;QTmqYp9h
pAXaaoD\:Zn,DYPl2KlFir7j7h#>n(e,I\mbl5]__u@CL])K/;Yl:a'W;`OjT)P5YQ2ZsGO8b"8L]2r*
JGsurHN&*eFT-=[E;jbSD>n;LB_uHAB)ZB:A,]s4@JaO/A,^'=B)?6?C&VlHD>nGPE;jnWFoHR`HN&<k
JGt3#LAm&/O8b=AQ2[9PTDkSaW;`jsYl;*1])KGC_u@^Ubl5rfe,Iqth#?41ir8-?l2L#Jn,DkVoD\F^
p\sseqYpBkr;QZlrlb>bs8N#prVl`oqu6Hkq#:$epAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]
_#D%H]Df/9Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.
B)ZHBB`MlKC23``rbVRNqeuIRrcA'^rcnEhrdXoure(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABI
rl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEerqcWkrqucoqu35fJcFp5rr2fnrqucmrqcWh
rqHEcrq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#Rrk8<Crj2U/riZ6trhKIbrgWnQrf[8Arepc4
re(3$rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4ErbDFJrbVRNqeuIRrcA'^rcnEhrdXou
re(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABIrl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`
rqHEerqcWkrqucorVcisrdk*'rrN,u!<2lorqucmrqcWhrqHEcrq-3\rpTjSrp0RIroF(<rnm_/rmq(s
rm:Yfrl>#Rrk8<Crj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$rdXoord"KdrcA'ZqeuINrbVRLrbDFH
qe,n?mq)B.rb)4ErbDFJrbVRNqeuIRrcA'^rcnEhrdXoure(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9
rkABJrl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEerqcWkrqucoqu4e=bQ%S@q#13irql]k
rqQKerq69_rpg!WrpB^Nroj@Cro*k6rnIG*rmLemrm(M`rl"fNrk&0<rj)O+ri5sprh07^rg`tQrf[8A
repc4reCE'rdausrd4WjrcnEarc8!Xrc%aQrbgk8qelCO!-%jTrc.pYrcJ-ard"KirdOirrdk''reUQ3
rf@&Arg!JQrgs+^rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RNrp]pWrq$-^rqHEf
rqcWkrquZlqu35fJcFp5rr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#V
rkJHErjMg3riZ7#rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbq[Q
rc.pYrcJ-ard"KirdOirrdk''reUQ3rf@&Arg!JQrgs+^rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+
rnm_6roO.Crp0RNrp]pWrq$-^rqHEfrqcWkrquZlrVcisrdk*'rrN,u!<2clrqucmrqcWhrqHEbrq-3[
rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHErjMg3riZ7#rhf[frgs+Zrg!JGrf@&:re^W/rdk'!
rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbq[Qrc.pYrcJ-ard"KirdOirrdk''reUQ3rf@&Arg!JQrgs+^
rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RNrp]pWrq$-^rqHEfrqcWkrquZlqu4e=
bQ%A:qu-NlrqcWirqQKdrq-3]rpg!VrpB^Lroa:Bro!e4rnRM(rmUkmrlkA_rl"fNrk&0>rj)O,riH*r
rhKIbrgWnRrfmDDrf-o8reCE*rdt-"rdOiord+Qgrc\9`rcJ-\h/WF8!-A6`FT-F^G5cacHN&<kIf=ls
K)UH&LAm,1NrG.>Pl@$KS,T&ZU]..iXT#F&ZMqB5]DfSE`;[jWbl5rfe,Iqth#?10i;Vj;kPj`FmJcSR
nc&.Zp&=[aq#:*gqYU3irV6Aas+145s7lTjrVl`oqYp<iq#:!do`"I]nc&"VmJcALkPjTBi;VU4h#>n(
e,I\mbl5]_`;[ON]Df>>ZMq',XT#*rU]-nbS,ScRPl?dDNW+k8LAll*K)U<"If=`oHN&0gG5cX`FT-@;
EW1%YFT-F^G5cacHN&<kIf=lsK)UH&LAm,1NrG.>Pl@$KS,T&ZU]..iXT#F&ZMqB5]DfSE`;[jWbl5rf
e,Iqth#?10i;Vj;kPj`FmJcSRnc&.Zp&=[aq#:*gqYU3irVHKorr.KKL&V2QrqcWkrVl`oqYp<iq#:!d
o`"I]nc&"VmJcALkPjTBi;VU4h#>n(e,I\mbl5]_`;[ON]Df>>ZMq',XT#*rU]-nbS,ScRPl?dDNW+k8
LAll*K)U<"If=`oHN&0gG5cX`FT-@;EW1%YFT-F^G5cacHN&<kIf=lsK)UH&LAm,1NrG.>Pl@$KS,T&Z
U]..iXT#F&ZMqB5]DfSE`;[jWbl5rfe,Iqth#?10i;Vj;kPj`FmJcSRnc&.Zp&=[aq#:*gqYU3irV6B8
s2G$;rqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%df.Vmbl5]__Z%=L^&GJ>Zi70-
XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFMFSL"XGQ<!iH$TC8rd=]nrdaut
rdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoasric=-rjMg>rkSNMrlG)^rm:Ymrmq)%rnm_6ro3q?rosFJ
rpTjVrpp'\rq69brqZQirqlTjrr)`nSH"0?iW&oVqu-Nlrql]krqZQfrq??`rpp'XrpTjProsFFro3q8
rnm_.rmq(srm:YgrlG)UrkJHGrjMg4ric=&ri#glrh07]rgNhNrf[8Arf-o7reUQ,rdt-!rdausrd=]k
rd"KfpiZ%IpiZR\rd"Khrd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoasric=-rjMg>rkSNM
rlG)^rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTjrr)`n!<7WMJcG]Krr2fnrqucm
rqcWirqHEcrq-3\rp]pUrp0RJroa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-riH*trhTOdrgj%W
rfmDFrf@&<reg]2re19&rdXotrdOiord+Qhrcn3\mr\>IrcnEfrd+QkrdFcrrdXp!re19,reg]7rf@&A
rfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEf
rqcWkqu$Hlqu4\:_Z0W7qu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQ
rkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdOour.+d!
re:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*Crk\TQrlG)arm:Ymrn7;+rnm_5roF(A
rp0RNqsXOTrq-3arqQKgrqcWkrqucoqu2o]JcFU,rr2fnrqucmrqcWirqQKerq-3\qsXONrp0RHroF(:
rnm_0rn7;!rm:YirlG)Xrk\TJrk&0>riuI+riQ0srhKIcrgs+Yrg<\KrfR2@rf-o8re^W/re19'rdalq
pjW*gpjE'hpjW3lqgeZure:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*Crk\TQrlG)a
rm:Ymrn7;+rnm_5roF(Arp0RNqsXOTrq-3arqQKgrqcWkrqucoqu6HlJcC<$qZ$Qoqu-Nlrql]krqZQg
rqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQrkABDrj_s4ric='rhf[irh07^rgWnSrfd>D
rf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdXfqre(3(reCE/repc8rf@&@rfd>KrgNhXrh07drhf[s
ric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:HrpBUOrpp'\rqHEerqZQirql]mrr)`n_Z.LQ
rr2fnrqucmqtg<frqQKcrq-3\rp]pTrpB^Lroa:Aro!e4rnRM(rmUknrltGarl>#SrkABDrjMg4rilC(
ri,morhBCargj%Urg*PJrf[8Brf6u:reg]2reCE+re0rrrdjrsrdj`ore(9*!JQ7,LAm#.MZ/S6NrG.>
P5^^FQN!9NSc5;]UAh%hWW'%!Yl;$/[f3o<^AbtJa8X6\c2Q)heGe%uh#?10i;Vg:k5OWEmJcPQnG`"X
o`"O_q#:*dqYpBkr;QZlrg*S8s5*eTrqlZnr;QTjqYp<iq#9sco`"F\nG_kTmJcALkPjQAi;VU4h#>n(
e,I_nc2Piaa8WpS^AbbD[f3W4Yl:d(WW&doUAgeaSc5#UQN!-JP5^RBNrG":MZ/G2LAlo+K_9rrJbsus
Jb=WoK`6])LAm#.MZ/S6NrG.>P5^^FQN!9NSc5;]UAh%hWW'%!Yl;$/[f3o<^AbtJa8X6\c2Q)heGe%u
h#?10i;Vg:k5OWEmJcPQnG`"Xo`"O_q#:*dqYpBkr;QZlrqcYGs+14Hs8N#prVl`oqtp6hq>U0gp&=U_
o)A.Xmf)VQl2KlFjSn*:hYu=0f)F.td/M;hao9?[_>_1J]Df8<Zi73.Xo>=!VZ*=hTDkD\R/WENPl?jF
OT(:>N;e_6M#N/.L&QbuK)U>uJGt,mK)UH&L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R(
[/RN5]DfPD_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQT2s2+g8
rqQHkr;QTmqYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?[JmE0
Y5YO%VuELkT`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])M?&P8Mi7Rnrf6u=rfI,C
rg!JKrgNhVrh'1_rhTOkriH+%rilC0rj_s?rkJHLrl+l\rm(Mirm^qurn7;.ro*k9roa:Frp0RPrp]pW
rq-3_rq??drqZQirql]mqu-EkQN)O9hZ*TSq#13irql]krqZQgrq??arq-3[rp]pUrp0RJroa:?ro!e5
rn7;&rm^qorm(Merl+lSrkJHFrj_s8rilC)riH*srhTOdrh'1[rgNhPrfmDGrfI,?rf6u:repc5pk\p)
reC<(reCE-pk\p,repc7rf6u=rfI,Crg!JKrgNhVrh'1_rhTOkriH+%rilC0rj_s?rkJHLrl+l\rm(Mi
rm^qurn7;.ro*k9roa:Frp0RPrp]pWrq-3_rq??drqZQirql]mqu-EkqYu-HJcGTHrr2]krqucmrqcWi
rqQKdrq69_rpg!WrpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_
rg`tVrg*PJrfd>Crf@&=rf$i7regK,reLK-qh>$(reL9)reg]5rf$i:rf@&?rfd>Hrg*PPrg`t[rh07d
rhoasriZ7)rjDa8rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?rosFJrpTjUrpg![rq69arqQKgrqcWk
rquZlqu4J4]`8!1q#1*erqcWhrqHEcrq-3\qsXONrp0RHroO.<ro!e3rn@A&rmUkmrltGarl>#SrkJHG
rji$:rj)O-riQ1#rhf[jrh9=args+ZrgEbQrg*PJrfd>ErfH9'qiLf?!0[GIPQ$gGQN!6MRJr`USc5;]
U&LkeVZ*XqXo>R(ZMq<3\c0;A^])(Ka8X6\c2Q&ge,IqtgA]n,i;V^7jSn?Ali-;Kn,DnWo`"R`p\ssb
qYpBerVQSXs+14&s8N#mrVQKkqYp9hp\smco`"FYn,D\Qli-)Hjo46<i;VR3gA]\&e,I\mc2Piaa8WpS
^](qG\c0&:ZMq*-Xo>C#VZ*CjU&L_aT)P8ZRJrTQQN!-JPQ$aEOQMW$OT(FBPQ$gGQN!6MRJr`USc5;]
U&LkeVZ*XqXo>R(ZMq<3\c0;A^])(Ka8X6\c2Q&ge,IqtgA]n,i;V^7jSn?Ali-;Kn,DnWo`"R`p\ssb
qYpBerVQTgs+13$s7H?jrqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[
_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^SGnrUR/WENPl?mGP5^R*O8G%<P5^[EPl@!JQi<EPSGo)Y
T`1YaV#I7jX8]7#Yl:s-[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgc
q"speqtU-erkJKGs82fmrVl`oqu6Hkq>U0gp\sjbo`"F\nG_kTmJcALkl0`Dir7j7h>Z+,fDa7ud/M;h
bPoN\_u@IN^AbbD\Gil7ZMq',Xo>@"W;`XmU\g_`T)P8ZRf8`SR/WHOQM?a?Pl$aFQN!6MQiNNTR@4&C
rg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\rltGhrmUktrn7;,ro!e8roX4CrosFLrpKdT
rpp'\rq69brqQKgrqcWkrqucop&:0TJcFC&qu6KkrqucmrqcWirqQKerq69_rpp'XrpKdQrosFGroX4>
rnm_2rn7;&rmUknrltGcrl4rTrkSNIrk&0>rj;[1ric='ri5srrh]Uhqk3q[rg`tVrgEbQrg3VMpm(W=
qj%/Hrg3VOrgEbSrg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\rltGhrmUktrn7;,ro!e8
roX4CrosFLrpKdTrpp'\rq69brqQKgrqcWkrqucop&=^cJcC<$o`+gfqu-Nlrql]krqZQgrqHEbrq-3\
rp]pTrpB^Lroj@Dro3q7rn[S,rn%.urm:Yhrlb;\rkn`NrkABDrj_s7rj)O,riQ1"ri#gmrhK@`rgs+Z
rgNhSrg<\Org*>EpltZ@rg*PMrg<\QrgNhVrgiqZrhKIhri#grriQ1'rj)O1rj_s=rkABIrl"fUrlb;c
rm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pXrq-3_rqHEerqZQirql]mrr)Nh^]1kErr2fnrquZjrqcWi
rqQKdrq69_rpg!WrpTjPrp'LHroF(<rnm_3rn@A'rmUkprm1SgrlG)Xrk\TLrkABCrjVm6rilC*riZ7$
ri,mprhTOfrh9=arh'1]qjm_Vqj[ALrgWeTrgj%[!1s:aTDkM_U&LhdV#I:kWW&stY5YX(Yl;$/\,Nu<
^AbnH_>_FQao9Qaci2>ke,ItugA]t.hu;X7jSnBBl2L#Jn,DhUnc&1[p&=[aq#:*gqYpBhr;QZlrf-r/
s4./KrqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X_>_7L
^Ab_C\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc55[TDkM_U&LhdV#I:kWW&st
Y5YX(Yl;$/\,Nu<^AbnH_>_FQao9Qaci2>ke,ItugA]t.hu;X7jSnBBl2L#Jn,DhUnc&1[p&=[aq#:*g
qYpBhr;QZlrpg#>s+14?s8N#prVl`lqu6Hkq>U0gpAXaao`"C[nG_nUli-2Kkl0ZBir7j7hYu7.fDa7u
df.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkcT`1S_T)5)XSGSfNRf8fRSGo)YT)PA]
T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'hYuF3ir8$<kl0iGli-AP
nG_tWo`"O_pAXjdq>U6iqtp<jrVQT)s0Mb)rqlZnr;6BjqYp9hp\smco`"FYn,D\Qli-,Ik5OKAiVqa6
h>Z+,fDa>"d/MAjcMkrba8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jqVYd4hV!k)UV#I4iV?!Lp
Vl0Nnri?%#riZ7(riuI.rjDa8rjr*CrkJHKrl"fUrlP/brm1Sjrmh#"rn7;,rnm_6roO.Broj@IrpBUO
rpp'\rq??crqQBerqlTjrr)`nMZ88-ci="Dqu-NlqtpBhrqQKerq??`rposTrp9XMroj@DroO.<rnm_2
rn7;&rmh"prm1ShrlP/[rl"fPrkSNIrjr*<rjDa2rilC*riZ7%ri?$tri#gnqka:fn"]cUrh]Ukrhoap
ri?%#riZ7(riuI.rjDa8rjr*CrkJHKrl"fUrlP/brm1Sjrmh#"rn7;,rnm_6roO.Broj@IrpBUOrpp'\
rq??crqQBerqlTjrr)`nmf.k<JcG'9rr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,
rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4frhf[mri,mt
riQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mhrm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`
rqHEeqtg<hqu$Hlqu4&(ZiBq%rr)`lrql]krqZQgrqHEbrq-3]rp]pTrpB^Mroj@EroF(<rnm_2rn@A)
rmh"srm:YirlkAarl4rUrk\TKrk/6Brj_s9rjDa3rj)F*riZ7&poFCopo4.jpoFCr!3Q@*Y5>I&ZMq30
[JmZ7\Gj,>^&GeG_>_CP`r=-[bPofdd/MMnec+8$g]$%.hu;X7jSn?Al2KuImJcSRnG`%Yo`"O_p\sse
q>U6iqtp<jrV6ALs+13rs82fprVQNlqu6Hkq>U0gp\sjbo`"I]nG_kTmJcDMkl0cEjSn0<hu;I2gA]e)
ec+%sd/M>ibl5ca`r<pU_>_4K]`,PB\Gir9[JmN3ZMUm*Y5YQuX8]-oWV`^jX8]7#Y5>I&ZMq30[JmZ7
\Gj,>^&GeG_>_CP`r=-[bPofdd/MMnec+8$g]$%.hu;X7jSn?Al2KuImJcSRnG`%Yo`"O_p\sseq>U6i
qtp<jrV6B[s+13$s6K^^rr2lnr;QTmqYp<iq#:$ep&=U_oD\7Ymf)VQlMg#HkPjQAir7j7h>Z.-g&BP$
e,I_ncMl&eb5TE[`;[UP^](nF]Df>>[f3]6Zi79-Yl:g)Xn\srWq`RjWq`XoXo>L#Yl:s-Zi7B3\,No:
]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBh
r;QZirjMj5s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"Vmf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMl
ci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2ZMUohYl:p,Z2h33Za9Y<rjMg8rji$?rk83Drk\TOrl4rY
rlb;erm:Ylrmh#"rn.5+rnm_5ro=">roX4Erp0ROrpTjVrpp'\rq69arqQKgrqcWkqu$Hlp&9jKJcF'r
qu6KkrquZjrqcWirqQKdrq69_rpp'YrpTjSrp0RJroX4@ro="9rndY1rn.5$rmh"qrm:Yjrlb;_rl4rT
rkeQIrk/6Brji$<rjMg5rj2U0qm#:friuI.rj2U2rjMg8rji$?rk83Drk\TOrl4rYrlb;erm:Ylrmh#"
rn.5+rnm_5ro=">roX4Erp0ROrpTjVrpp'\rq69arqQKgrqcWkqu$Hlp&=CZJcC<$li6k]qu-NlqtpBh
rqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?
rj_s9rj;[2rj)F+k-4iirj)O0rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9
roO.ArosFJrpKdSrpg!Yrq-3_rq??drqZQirqlTjrr)Nh[f<T3q#:0hrquZjrqcWhqtL*^rposUrpTjS
rp0RKroj@Bro3h5rn[S.rn.5$rm^qorm1Shrlb;`rlG)Xrl"fRrk\TLrkJHHrk8<Dqn)j=qmlL3rjhp;
rk&0B!5/EH^&GbF^])%J_>_@O`;[aTaSs<\bPofdci2;jeGe%uf`'Y)h>?.0j8S-=kl0iGlhg,InG`%Y
o`"U^q"speqtp<jrV6AFs+13os7lTjrVl`lqu6Hkq"sgbo`"FYnG_nUmf)POlMg#HjSn09i;VR3g]#k)
f)F1ud/MAjcMl#db5TK]`W!gT_u@LO_#D+J^AbhF]_f>?])0&5\Gj&9])K>@]`,VD^AbnH_#D1L_u@UR
`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZirojB5s+146
s7lTjrVl`lqu6Hkq"sgbo`"FYnG_nUmf)POlMg#HjSn09i;VR3g]#k)f)F1ud/MAjcMl#db5TK]`W!gT
_u@LO_#D+J^AbhF]_f>?])0&5\Gj&9])K>@]`,VD^AbnH_#D1L_u@UR`W!sXao9K_cMl/hd/MPof)F>$
g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZirilF,s7QBjrVQNlqu6Hhq>U0gp&=U_oD\:Z
nG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMlcMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5^AbnE
^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Z
rq-3_qtU0drqcWkqu$Hlp&9XEJcEsop&=shqu$HjrqcNfrqQKcrq-3]rpg!WrpTjRrp9XLroj@DroF(<
ro!e4rnIG+rn7;$rm^qprm:YirlkAarlP/\rl4rVrl"fQrk\KIrkI^3rkJ?Grk\TNrl"fTrl4rYrlP/^
rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hlp&=1T
JcC<$kl:>Trr)`lrql]kqt^6drq69_rq$-Zrp]pUrpB^Orp'LHroX4@ro3q8rndY/rn@A)rmh"trmC_l
rm(MerlY5^rlG)Yrl+lTrkeZNqnW3Gl+[/3qnW3IrkeZQrl+lVrlG)\rlY5arltGhrmC_ormh#$rn@A+
rndY4ro3q<roX4Drp'LKrpB^Rrp]pWrq$-]rq60`rqZQirqlTjrr)NhYlCa'qu6KkrquZjrqcNfrqHEc
rq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLelrm:YirltGcrlY5^rl4iSrl"]On&#(A
qo&KQ!64rVrlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??c
rqZHfrqlTjrr)NhJcC<$`rGr8qu-NlqtpBhqt^6crq??arq$-[qsaUQrpB^Mroj@EroF(<qr%J1rn[S,
rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>rknWOrl+cSrlP/^rlb;crm(Mirm1SkrmUktrn%/&
rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTjrr)Nhjo9o3JcFa0qu6KkrquZjrqcNf
rqHEcrq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLelrm:YirltGcrlY5^rl4iSrl"]O
n&#(Aqo&KQqo8WWrlY5`rltGfrm:YjrmC_ormq)#rn7;,rndP1ro="=roa:Frp'LMrpK[Qrpp'[rq69a
rqHEfqtg<hqu$Hlp&;)nVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1
rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8
j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3rqQHhqu6Hkq>U0gp\smc
p&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMfci25ec2PrUbPTN_c25f`
ci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[ap\sseq>:$fqtU-b
rnma,s+14-s7lTgrVQKkqYp<iq#:$epAXaao`"C[nG_nUmf)SPli-/Jkl0cEj8S'8i;VU4h#?%,g&BY'
ec+(tdf.Ynd.krdcMPlcbjWaPbl5lacMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;N
mf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6Ais/5nirqlZnr;6BjqYU*fp\smcp&"@[nc&%Wn,DbSm/H;L
l2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqrdehGkd-8mUd/22jdK.eErmUbormh#"rn.5'rnIG-
rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeJcGWIJcEXfp&=jerquZj
rqcNfrqHEcrq60[rpg!WrpTjSrp9XLrosFEroO.?ro3q8rnm_2rnRM-rn7;'rn%%trm^qrrmL\krm9oU
rm:PirmLepqpbVqrn%/%rn7;*rnRM/rnm_6ro3q<roO.ArosFJrp9OMrp]pWrpp'[rq69arqHEfqtg<h
qu$Hlo)@PHJcC<$huEBKqu-NlqtpBhqt^6crq??aqt'gWrp]pUrpKdPrp'LIroX4AroF(<ro!e5rn[S/
rnIG*rn.5%qpk\qrmUkpqpGDil-K@UqpGDkrmUbormh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RM
qsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeVuN@grr2ThrquQfrqQBbqt9s\qsj[Srp]pTrp9XKroj@E
roO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2ro3q;roO.Broj@G
rp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkJcG<@JcE=]rr2ThrquQfrqQBbqt9s\qsj[Srp]pTrp9XK
roj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrmgnsrn.5'rn@8)rndY3qr%J5ro=">roa:E
rosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu51HJcC<$f)PaKp&4mfq"k!bqtL!\rq-*XrpTjUrpKdP
rosFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVqqptc!rn7;)qqV2-rnmV2ro3q;roO.B
roj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)Y2Xrr2]krquZjrqcNfq"Od[qt'gVqsXOPrpB^O
rp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)h#?.,hu;R5hu;U6ir8$<jo4EAkl0iGlMg/L
mJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frdk+<s+13Ws8N#mrVl`lqu6Hhq=s^`o_\7ZnGD\Rmf)VQm/H;L
l2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekqg\'A$h>?+/i;VX5iVqj9jSn9?k5OTDl2KuIm/HDOmf)\P
nG`%Vo_A1[q>:$fqtp<drVQTCs+13$s3UfFrqQHkr;6BjqYU*`p\sg^oD\7Vn,DbSmJcJOlMg&Ikl0`D
jo4??ir7p9hu;R2htu7,h##jpgA]k"h#?.,hu;R5hu;U6ir8$<jo4EAkl0iGlMg/LmJcPQn,DhUnG`%V
o_A1[q>:$fqtp<drVQS`s-WiZrqQEgqu6Hhq>U0ap&=R^o)%qUn,DbSm/H>MlM0TBk5OKAjSS!:ir7p9
i:Z!rh=]Y*huVcoro*b6ro="=roO.Apuq_Brp0RMqsO@Nrpp'[q"=OZrqZHfrqlKgo)=4?n,It=[/]gu
q#($drqcNfrqQ9]rq$-[qsaURrpKdPrp0RKpuq_>roO.?qr@\8ro*k7p##5op##c,ro*b6ro="=roO.A
puq_Brp0RMqsO@Nrpp'[q"=OZrqZHfrqlKgo)@,<JcC<$d/We<q#($drqcNfrqQ9]rq$-[qsaURrpKdP
rp0RKpuq_>roO.?qr@\8ro*k7p##5op##c,ro*b6ro="=roO.Apuq_Brp0RMqsO@Nrpp'[q"=OZrqZHf
rqlKgo)>-YQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LHqrdt@qrRh<ro<\2n)<s!
!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<drV6ACs69Q7s0;V!rqQHk
r;6BjqYU*cp\smco_\7Wnc&"VnG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!ir8!;jSn9<k5OQ@kl0lH
li-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!cqYpBhr:p6crltIos+13ps7lTgrVl`lqu6Hhq>9pcpAX^]oDA(W
n,DhUn,DbSm/H>MlMg#EkPjW@jo4??j7VF#iUu40j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoD\C]
o_\@]p\t!cqYpBhr:p6crg!MBs8N#grVl`oqtp6eq=s^]p&=U_o)A1Yn,DhUn,)PPmJcJLli-2Hl1O9/
kOds=kii$1qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?crql]mp&4deJcF[.JcD\Krr2Kerqucmqtg3c
rqH<aqt9s\rpp'YrpTjUrpTaPrpB^Oqs47Hqs!e;n)s9*ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`
q"k!erquHfqu4P6JcC<$`;fi9o)8RcrqlThqt^$]qt9s\rpp'YrpTjUrpTaPrpB^Oqs47Hqs!e;n)s9*
ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\qtL*arqZ?crql]mp&4deN;nk:p&=jerquHdrqcNfrqQKerq?6^
rq-3]rpp'YrpTjUrpTaPrpBULqs3)'rp'RNq<\+Jq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hl
o)=4?i;\B.W;lPiqu-Nlp&"abrqZQhrqQKerq?6^rq-3]rpp'YrpTjUrpTaPrpBULqs3)'rp0@GrpBLK
rp]pUrpg!Yrq$-]qt9s^rqH<brqZHfqtp9grr)Ee`;bDgJcE[gp&=jerquHdrqcNfrqQKerq?6^rq-3]
rpp'YrpTjUrpTaPrpBULqs3)'rp0@GrpBLKrp]pUrpg!Yrq$-]qt9s^rqH<brqZHfqtp9grr)EeN;nY4
qu60brquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.Wo`"O\pAXg`
q#:*dqYpBhr:U$]rdk+*s+13Es82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\LmdKQ<mecJP
nG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp0+s+13$s1\O1rpp$er;6BjqYU*fq"sgbpA=O^o_\7T
nb_hTn,DhRn+c>>mJ-,Hn,DhUn,)VLnc&.Wo`"O\pAXg`q#:*gqYp?jqtp<arUp/Hs+14Ks82fdrVl`l
qtU$bq>U0ap\XX\o_\7Zo)%t5nG_qXo)/(XoC_bTp%\:Yq#:*aqYpBhr:U$]rdk+!s+13<s82fdrVl`l
qtU$bq>U0ap\XX\o_\7Zo)%t5nG_tTo)A7Ro`"OYp\Xabq=sgcqtp<arUp0"s+13$s0_n(rpp$er;6Bd
qYU*fq"XU\p&"CYoD\=Xn_N^6nb_nVoC_bTp%\:Yq#:*aqYpBkr;QWerUp/@rrE(Ms8DugrqlZhr:p0g
qXs[`q"sgbp@@nRo]Gc>oE"UVp%A4UrqH<bqt^-cq"sjarr)3_JcF7"JcD/<o)AObrquZkq"t'ep%eU^
qtL*`o(DnPk4A9<p%A4UrqH<bqt^-cq"sjarr)3_\Gq-[JcE.Xo)AObq#'parqc<`rqQBbrq>pUqt0%B
p%7qMqtC$`qtU'aqtg*bqu$Hkrr)3_Jc>`MJcGBBqu60bq#($dqtg!]rqQ'YqtB1Fp\"X]p@\1Wq"sm[
qYpBer:U$]rdk*ms+133s82fjrVQQgr;6BgqXs[`q""1Vp?)&@p@\1Wq"sm[qYpBer:U$]ric?Qs+13O
s82fdrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*drVQQdrdk+Ds+146s7lT^rV6<fqssU5q#L9Y
qYpBer9sUZrdk*^s+13's8N#prpTg\r;6B^qUG?-qYpBer9sUZrh0:Bs+13Cs7lT^rV6<fqssU5q<[tW
qtU*XrVQTnrdk+5s+146s5s=Rr8[\:qYL*Yqss[Irdk*^s+13's8N#^rq63Lqr[b>qss[Irh0:Bs+13C
s5s=Rr8[\:qW[nJr9=4[rdk+5s+14's7QBUrUTmKqtL$^r9XCQrdk*Rs+13$s7QEbrosCPr9!nCr9XCQ
rfmG6s+134s7QBUrUTmKqs=7IrUTs_s+143s+13gs6Ta7r;ci^rdk*:s+13$s5<qDrm^o2rdk+Is+13$
s+14Js6Ta7rTX=>s+143s+13gs1\Ktrdk*:s+13$s5<pTrdk+Is+13$s+14Js/5kSs+143s+13$s+13$
s+13$s+13$s+13$s+13$s+143s+13$s+13$s+13$s+13$s+13$s+13$s+143s+13$s+13$s+13$s+13$
s+13$s+13$s+143s+13$s+13$s+13$s+13$s+13$s+13$s+143s+13$s+13$s+13$s+13$s+13$s+13$
s+143s+13$s+13$s+13$s+13$s+13$s+13$s+143s+13$s+13$s+13$s+13$s+13$s+13$s+143s+13$
s+13$s+13$s+13$s+13$s+13$s+143s+13$s+13$s+13$s+13$s+13$s+13$s+143s+13$s+13$s+13$
s+13$s+13$s+13$s+143s*t
~> %APLeod
EI
52 0 0 52 0 272 cm
BI
/Width 156
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkPJcC<$JcDkP
JcC<$JcDkPJcC<$JcDkPJcDhOf)>^Lrdk*Qs+13gs6Ta7r;ci^rdk*fs+14's7QBUrUTmKqtL$^r9XCQ
rdk+)s+14-s8N#^rUp*]qptTEqYL*do).kQqu20HhuA9-kl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE
kl656o`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s7cPEs7cQmrpTgbr:p0g
qYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcGKEJcG]Kqu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rp^!Zr:9jYp%87Vq"O[\rqZ?crqlTjp&4R_Jc>`MLB%/Mo)8RcqtpBhqt^6dqtL*`
qt9s\qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp/Hs,$dT
rpTgbr;6BjqY9j\pAX^]oD\=Xnc&%Tn+c;=lgO*1lhp)DmJcSOnG_tTo)A7Xo_A.Tq"speqtp<^rVleQ
s,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,kQ0o2ros=Frp0RMrpBLK
rp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu2QSQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XM
rp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$f
qtp<drV6AWs-<WTrVl`lqu6Heq#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhZ2U4
i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U#Rs-WicrqQHkr;6BjqYU*`p\sg^
oD\7Vn,DbSmJcJOlMg&Ikl0`Djo4??ir7p9hu;R2htu7,h##jpgA]k$g]?3crn[J/ro!e5ro*k9roF(?
roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*hS,])[rr2ThrquQfrqQBbqt9s\qsj[Srp]pT
rp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2ro3q;
roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)YD^q#13iqtp9drqQBbrq??`rq$-[rp]pT
rpB^Nrp'LIroa:CroO.=ro!e5qq_8,rn7;'rn%/#rmh"tpsT&drm1Sjp!<Warm1JgrR1Vlrm^qtrmq)#
rn.5'qqV2,rnm_6ro3q=roX4CrosFIrp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6fT)Y_gq#:'eqtpBh
rqZQgrqHEcrq69_rpg!WrpTjSrp9XMrosFGroa:@ro3h5rndY0rn@A)rn.5#rm^qqrmC_lps8rbqp#,a
n&tUPrltDe!RB!fci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[a
p\sseq>:$fqtU-brhodrs82fmrVl`lqu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,
f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W`W!gQ_sbJA_u%CO`;mpU`r=*Zb5TT`c2Q#fd/MAjdJhVof)F;#
g&Bh,hYZ71j8S-=kPj`FlMg2MmecMQo)A7[p&=[ap\t!cqYpBhr;QZfriQ4#s8N#mrV69eq>U0gpAXaa
o`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8
^&,SA^];7L_Z%IP`W!mVaSs<\b5TWac2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Y
o`"O_pA=Xaq=sj^rVQSrs02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$
eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[rkABHrkSNLrkn`R
rl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<hqu$Hlq#7MtZiBq%
qu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`P
qnN-Crk&0?rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\q
fDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/us0Mb)rqQHequ6Ejq#:$e
p&=U_o)A.Xmf)VQlMg#HkPjQAir7j7h>Z.-g&BM#e,IbocMl#dao9<Z`;[UP_#D%H]Df>>[f3]6Zi790
YPtd*Y5>="X6HY`X8AsuXT>Q+rilC*riuI/rjDa7rj_s>rk8<Hrk\TPrl4rZrlb;drmC_orm^r#rnIG.
rnm_7roF(ArosFIrpB^Rrp]pXrq$-^rqHEerqZ?dq#1*h[f<]6rr2fnrquZjrqcWhrqHEcrq-3\qsXON
rp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRh
rhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2
iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZlrjMj;s8N#prVl`lqu6Hkq>U0gpAXaao`"C[nG_nU
li-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkcT`1S_
T)5)XSGSfNRf8fRSGo)YScGA`T:c+Urh9=drhTOkri,mtriZ7(rilC/rjVm<rkABHrk\TQrlP/arm1Sk
rmUkurn@A.rnm_7roF(BrosFJrpTjUrpg![rq69arqQKgrqcWkqu$Hlqu4/+\c;I'q"t'drqQKerq69_
rpp'XrpKdProsFFroO.<rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_
rgj%YrgNhSrg<JHqj$r@rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:O
a8X<^cMl2ieGe%ug&Bh,hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-#s1JC2rqQHhqu6Hkq#:$e
pAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^
SGnrUR/WENPl?mGP5^R*O8G%<OoU[HPEZ!1rg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHK
rl>#\rltGgrmUktrn@A,ro!e7roF(Arp0RNqsXOTrq-3`rqHEeqtg<hq#1*h^]21Nrr2]krqucmrqcWi
rqQKdrq69_rpg!WrpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_
rg`tVrg*PJrfd>Crf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[
T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*g
qYpBkr;6Hirke]Ps8N#mrVl`oqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[
_>_4K]`,A=Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>MuJV5M>i8,L%p;hJbXlsK`Hl*LAm&/MZ/P5
NrG+=OoCXFQi<EPSc58\U&LthWW'!uYl;$/[f3r=^AbtJa8X6\c2Q)heGe%ug]$(/i;Vj;kPj`Fm/HGP
nG`"XoD\F^p\sseq>U9jr;6Hirke]Ps8N#prVl`oqu6Hkq>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*
df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfSPQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3h
IJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJm
g&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZlrke]Ss8N#prVl`oqu6Hkq>U-fpAX^`o)A.X
n,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),
K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+QkrdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOk
riH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu4\:
aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'rmUknrlb;]rkn`Mrk&0>riuI*ri?$p
rhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[qf2(Drc.gUrH&'^FT-F^GQ)jdH2`3j
IK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lH
m/HGPnG`%Yp&=[aq#:*dqu6NjrVlf;s3(HArqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0
g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qS
DuOY:D>S5MDZFbSE;jkVF8g:\GlE!fHiAKnJ,Y#uLAm#.MuJe:P5^aGSGo,ZT`1hfWW'("ZMq?4]DfSE
_u@^UcMl2idf.r!h#?41iVqs<kl0oImJcVSnc&.Zp&=^bq>U6iqu6NjrVQT;s3(HArqlZnr;QTmqYp9h
p\smco`"F\n,DbSli-,IjSn0<hu;@/f)F+sd/M5fa8WpS^AbbDZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4
KDpH$J,XfoH2`!dF8g4WDuOVQD#S5LCAqrEBDuN3Ac$*=BDuTFC&r'arbMLLrb_ONrc.pYrc\9crd4Wo
rdk'$re^W5rf@&Arg3VRrh'1brhf[trilC.rk&0Drk\TSrlb;frmLesrn@A/ro3q<roj@HrpKdSrpp'\
rq??crqQKhrql]mrr)`nbQ#ccq#13hrqcWirqHEcrq69]rp]pUrp9XKroX4>rnm_2rn%/!rm:YgrlG)V
rkJHDrjMg1riH*urhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^OrbDFHrb2:Crakt;raY2%
raYh9!+c1BAc?<@B`;`FCAr&KDZ4VSErL1[G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;
^]).Ma8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Yp&=[ap\t!fqYpBerQG5as7lQlqu6Hkq>U-fpAX^`
nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9h
FoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[
rcnEhrdXp!re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjU
rq-3_rqHEfrqcWkq#/D9cN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(qrlkA_rkeZK
rk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+r`oG,r`\Ph
r`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.
]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQTAs3^lGrqlZnr;QTmq>U0g
p\sjboD\7Yn,D\QlMflDir7j7g]#e'df.Pkao96X_#CtF\,NW2XT#0tT`1M]Rf8KLO8b+;LAli)J,Xfo
GQ)^`E;jbSD#S,IB)Z??@fBd7?iF@1>lIt)=oMOZ=8c5%=BPQ*r`fA,ra#M1raGe8rac"?rb2:Irbh^S
rcJ-`rd4Wore(3)rf$i;rf[8Lrgj%]ri#gtrilC2rk&0Frl"fXrm(Mkrn%/(rnm_7roF(Drp9XQrp]pY
rq69brqQKgrql]mqu-NndJqVorr2fnrqucmrqZQgrqHEarpg!Vrp9XLroj@@ro!e4rn.5"rm1Sfrl>#S
rk8<?rj)O+ri#gjrgs+WrfmDDrf$i4rdk&urd=]grcA'Wrbh^Nrb2:@raPb3ra#M.r`];(r`K/$r`8nr
r`&,\r`&bp!*0,$<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`
W;`t!ZMqB5^&GkI`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jr;6HlrmCbqs8N#prVl`o
qu6Hkp\smcp&=L\nG_nUlMfuGjo43;h#?"+e,I_nc2P]]_Z%:K[f3T3Y5Y<tUAgeaQN!*IO8b"8K`6N$
IK"KjFoH@ZDZ4JOBDuKA@K'[6?N+4/=oMP&=8l5!<;ohq;Ys>I;#X;l;Z'Gl;uTbq<W6)!=T2J&>lJ%.
@/aU6AH$6@D#S>OE;k"ZH2`6kJGt9%M>iS8PQ$mITDkVbVZ*atZMq<3^AbtJ`W"-]d/MMng&Bh,i;Vj;
kl0lHn,DhUnc&4\pAXgcqYpBkr;QZlrm^tts8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)
dJhGjb5T9W^AbbDZi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"
<W5qr;Z9Pm;#=&]:A@QS:B"#h;#F/h;>sJm;uTer<rQ2"=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=ot
K`6r0O8b@BRf8oXUAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)hu;[8k5OTDm/HGPnc&1[p&=^bq>U6iqu6Qk
rm^tts8N#prVl]nqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR]`,D>Yl:^&VZ*7fS,S`Q
OT(4<M#Mr(IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:A[cY9__9O9`@`d:Adla:]!uf
;uTbq=8l>$=oM_+?iFI4A,^-?CAr/NErL1[HiAKnJGtB(MuJh;QN!BQT`1hfX8]@&\,O#=_#DCRbPolf
ec+8$h>Z@3jSn?Ali-;NnG`"Xp&=^bq>U6iqu6Qkrm^tts82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7
gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts
;Z9Mi:]!lc9`@ZT8af4C8H;B\9)D<]:&[rc;#XAl;uTer=T2M'?2e41@fBp;C&VrJE;jtYH2`6kJc:E'
N;eq<Q2[6OT`1hfXT#L([f3o<_>_IRbl6#hec+;%hu;X7jSnECm/-;OoD\F^p\t!fqYU3irRCkss8Mur
r;QTmq>U0gp\sjboD\7YmJcDMkl0WAiVq^5fDa;!ci2)d`;[ON\,N`5YPtI!U]-nbQN!'HNrFh5KDpB"
GlDjbEW0eRC&VcE@K'X5?2e"+=8l5!;uT\l:]=)f9__6K8FK(@8Gl$R9)_N`:&@`c;>sMn<W6)!=oM_+
?iFL5BDuWED#SGRFoHXbJ,Y*"L]3>5P5^dHTDkVbVuEn!Zi7H5^])1Nb5T`de,ItuhYuI4j8S9AlMg2M
nG`%Yp&=^bq#:*gqu6NmrRCl!s8N#srVl`oqu6Ejq#:$eo`"C[n,DYPl2KlFiVqa6h#>k'df.Pk`r<gR
^&GG=Z2Um)U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk:]=,g9`%KX8c)$/
7KGtJr^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1
rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`ngAfe)rr2oqrquclrqQKdrq69]
rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5
r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6
rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']
rqHEerqcWkrr)`ngAfn,rr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"
rhTOarg3VIrf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*_-/
r'^NQqaUQTqag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFMrc8!^rd=]sreLK3rf[8Jrgj%ari,n"
rjMg<rkSNQrlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq??crqcWkqu-NngAfn,rr2oqrqucmrqcWgrq??`
rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2
r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?rbMLO
rcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_rqHEgrql]m
rr)iqgAg"/rr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rRrjr*:ric=!rhBC`rfmDD
rf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfSmmGntrBp0Dr^?`SqaUQT
r^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`rhob!rj;[9rk\TRrlb;g
rmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`nh>c=2rr2fnrql]krqZQdrq-3[rpKdOrosFCro*k5
rn.5"rm1Scrl"fNrj_s5riQ0prh'1Zrf[8?re^W*rdFckrc8!UrbMLDraGe5r`];&r`&knr_NMgr_*5_
r^m)Zr^QcRr^?*?h*V'-n3d1CqaLKRr^ZrZr_!/_r_EGgr_WSnr`B)&ra5Y6rac"DrbqdVrd"Kkrdk'*
rf6u@rgWnZrhKIprj)O5rkJHNrlP/crm^r"rndY5roF(Crp0ROrpg!Zrq69drqcWkrr)`nh>c=2rr2fn
rqcWirqQKcrq$-YrpKdOroj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQ
rb2:>ra5Y1r`K/"r_i_lr_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##
ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pY
rq69crqZQirr)`nh>c=2rr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[e
rgEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<EbsM+jogAUEr^HfU
r^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'rjr*Crkn`Yrm1Sm
rn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2q#13grqQKerq$-ZrpTjProsFEro!e2rn7;!rm(Mc
rkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"KbrbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B
bsM+jnjECEqaLKRr^ZrZr_*5ar_NMkr`&l!r`];-raGe<rbMLOrcJ-brdXp#reg];rg*PRrhTOnric=1
rk8<JrlY5crmLf!rn[S3roX4Drp0RPrpg!ZrqHEfrqcEgh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:
rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]
r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[
rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$Hlh>c=2rr)iorql]jrqQKdrpp'X
rpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6r`T5%r`&kn
r_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wp
re192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoh>c=2rr)io
rql]jrqHEbrpg!VrpB^KroO.=rn[S+rm^qmrlP/Xrk8<?riuI%rhKIarfmDCrepc-rdOimrc8!UrbDFC
ra>_2r`K/"r_i_lr_<Abr^m)[r^ZrVr^?3B`'WiXnjECEr^HfVr^d#[r_*5br_WSlr`9##ra#M3rac"C
rbh^Urd+Qmrdt--rfI,Drgs+ari,n%rjVm?rl"fXrm(Mmrn7;,ro3q>roj@KrpTjVrq69brqZQjrquco
h>c=2rr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]h
rc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSkr`&ku
r`oG0raPk@rbVRQrce?hrdb!)rf6uArg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjVrq69b
rqQKirqucoh>cF5rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTObrgEbI
repc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^$BIj?i`2qaC<Nr^ZrZ
r_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/ro="?
rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHB
rj)O*rhBC_rg3VFreg]/rdFcjrcA'Urb;@Cra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KL
j?iN,r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fY
rm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-
rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9I
h*Tp_rBfI0pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@
rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oprql]krqHEbrpp'Wrp9XLroF(;
rndY*rmUkmrlG)VrkAB=ric=$rh07ZrfmD@reCE&rd+Qdrc%jPrau.=ra,S-r`B(sr_WShr_*5_r^d#X
r^HfSpd=(.r^#.$!'pWO6/t<,6iKLQ7K,dU8H)3[9E%]c;#XAl=8lD&?N+F5BDu]GE;k"ZHN&HoLAm/2
Pl@0OT`1tjYPtp.^Ac"KaSsNbe,IqthYuL5jSnHDm/HJQo)A=]p\t$gqu6Njro=%:s8N#sr;QTmqYp6g
p&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,W;`FgRJrELMuJG0JGsloFoH@ZCAqiE@K'R3=oMM%
;Z9Jk:&[fb8cD6Z7K,^J6fp`46.S:%5X><7k!J`.r^?`Sr^ZrZr_*5br_WSlr`B)&ra#M3ral(Drc%jZ
rd+QoreCE1rfd>Lrh'1griZ7,rk8<Jrl4r`rmUktrn[S3ro="Brp9XQrpp']rqHEgrql]mqu5XUi;`fU
rqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:A
ra>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(B
rbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XU
i;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!V
rb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"
r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??f
rql]mqu5XUi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+
rdOihrc.pSrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=C7qa&Ilp-AUCksG87r^?`Sr^QlWr^m)_
r_EGhr`/r"r`oG1rac"@rb_XSrcS3hrdt-*rfI,Frg`tari?%'rk&0Frl"f\rmC_prnIG0ro3q@rp'LN
rp]pZrq??erql]mqu5XUi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`
rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_
r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LN
rp]pZrq??erql]mqu5XUj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5sm
rgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZ
r_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@H
rpKdTrq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4
ri5smrgNhOrf@&6rdk&srcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQ
r^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5
roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1SerkeZJ
rji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7
qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;ermUl$
rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$
rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4
a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y7rau.Hrc.pZrd=]rreLK6rg!JPrhKImrilC4rkABK
rlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6
rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlT
qa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4
rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@
rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#X
r^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&
rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZrq??erql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@
rnm_1rm^qorlkA[rkJHDrilC&rh]Ubrg*PFreUQ+rdOiirc8!Urau.>ra5Y/r`B)!r_WShr_3;_r^d#X
r^?WNk!Jr2bs:tfr^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9irdt-*rfI,Grgj%b
ri?%&rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjP
roj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_
r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+
rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??frql]mqu5XUi;`fUrqucmrqcWg
rq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$
r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnEl
re19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEgrql]mqu5XUi;`fUrqucm
rqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3
r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+
@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBk
r;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wm/H;LjSn-;hYu+*e,I\maSs*V^AbM=YPtR$T`1DZPl?X@LAl`&
HN&'dE;jYPB)Z9=?N+.-=8l+s;#X5h9E%Q_8H)*X7K,^M6fUN46.\@%5lj8;j$NN.r^?`Sr^QlXr^m)^
r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;rp'LL
rpTjWrq69brqcWkrquZmj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(
rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_rBfI0pd>$LqaUQV
r_*5ar_NMkr`&l!r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=
rp0RNrp]pYrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_.rm^qorlY5ZrkSNC
rj)O*rhKIarg3VGreg].rdOilrcA'Urb2:Ara>_1r`T5"r_i_kr_<Aar^llSr^?WNh*V!)k!8o3rBfI0
r^6QNpdY6Sr_*5br_NMkr`&l"r`oG1rac"Brb_XUrcnEkre19.rfI,Grgj%`riQ1*rj_sCrl+lZrm:Yp
rn7;.ro="?rp0ROrp]pZrq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(r
rlb;\rk\TErj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(
r^#d6r^$BIj?i`2qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.
rji$Erl4r\rmC_qrn@A/ro="?rp0ROrp]pZrq69brqcWkrr)`nj8[s8rr)iorql]irq??arpg!VrpB^K
roO.<rnRM*rmUkkrlG)Vrk/6<ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Ab
r^d#Yr^QlUr^?EH^-_*OogA^Hr^HfUr^ZrYr_*5br_WSkr`&kur`oG0raPk@rbVRQrce?hrdb!)rf6uA
rg`t]rhob!rjDa<rkn`VrltGkrn%/)ro*k<roj@KrpTjVrq69brqQKirqucoh>c=2rr)iorql]irqHEc
rpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.rdOilrc.pTrbMLCra>_2r`K/"
r_remr_EGdr^d#YqaUQRr^?NK^-_*Opd>$Kr^H]Rr^ZrYr_3;dr_WSmr`9##ra#M2raYqCrbh^Trd"Kl
re(3.rfI,Ergj%`ri5t%rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrq??crqQKirqucoh>c=2rr)io
rql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"prlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRF
raPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfSnjC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6
ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQj
rqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(:rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*
rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGcr_!/]r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSl
r`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV
rq$-`rqZQiqu$Hlh>c=2rr2oqrquclrqQKerq-3\rpTjProj@Dro!e2rn7:urm(Mcrk\TIrjVm2ri5sn
rg`tSrfR2;re:?$rd"Kbrc%jOrau.=ra,S.r`K.ur_`Yjr_3;ar_!&Xr^QZNpd<(go0W4>pdG!Kr^Zr[
r_*5ar_NMjr_reur`];-raPk=rbDFOrcS3crdXp#reg];rg*PRrhTOnrilC2rk/6HrlY5brmC_urn[S3
roX4Drp0RPrpp'\rqHEfrqcWlrr)iqh>c=2rr2fnrqcWhrqHEarpp'Wrp9XKroa:>rndY.rmUkmrlb;Y
rkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMgr_3;`r^d#Yr^QcRr^?<E
bsM+jogAUEr^HfUr^ZrYr_!/_r_EGgr_i_qr`T5+ra>_9rb2:Jrc.p\rd4WqreLK4rfd>Lrh'1eriH+'
rjr*Crkn`Yrm1Smrn@A-ro*k>rosFKrpTjWrq-3arqZQirr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3d
rdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nh>c=2
rr2fnrqcWirqQKdrq-3[rpTjProsFCro!e3rn%/!rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]i
rc.pTrbDFCraGe5r`T5%r`/qpr_NMfr_*5_r^coVr^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Af
r_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(C
rp9XQrpg![rq??drqZQirr)`nh>c=2rr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_grl4rR
rjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiTr^HfS
mmGntrBp0Dr^?`SqaUQTr^d#[r_*5br_NMjr_i_rr`K/)ra>_9rau.Irc%jXrd=]pre(3/rfI,Drgs+`
rhob!rj;[9rk\TRrlb;grmh#%rnm_7roO.Erp9XRrpp']rq??erqcWkrr)`nh>c4/rr2oqrqucmrqcWg
rq??`rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?
ra>_2r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPcpR^uqaCEPqaUQTr^luZr_3;cqb[8kr`9#%r`oG1raYq?
rbMLOrcJ-ardXp#reUQ7rfmDNrh07friH+*rj_sArl"fYrm1Snrn7;,ro!e:roa:IrpKdTrq-3_rqHEg
rql]mrr)iqgAfe)rr2oprql]krqQKdrq-3\rpTjRroj@Cro3q6rn@A&rm:YgrlG)Srk&0;ric=#rhKI`
rg3VIrepc1rdk&rrcnE`rbh^Mrb)4>ra5Y0r`K/#r`&kor_NMfqb-o\r^coVr^QcRmmQV3oL/UFr^H]R
r^ZiVqb$i\r_<Afr_`Yor`9##r`oG0raPk>rbDFMrcA'_rd=]rreCE1rf[8Jrgj%`ri,n#rjDa;rkSNS
rlb;frmq)&rndY6roX4DrpB^Srpp'\rq??drqcWkrquZmgAfe)rr2oqrquclrqQKdrq69]rp]pUrosFF
roF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"r
r_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XR
rc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWk
rr)`ngAfe)rr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\
rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&kor_WSir_EGdqb-]Uqa]4,!CfQX8,,[T9D_E[
:B")h;>sPo<rQ;%>lJ+0@fC!=C&W&MErL4\I/\WpKDpf.O8b=ASGo/[U].CpZ2V01^&GnJ`r=9_dJh\q
h#?10iVr$>l2L#Jn,DnWo`"Uaq#:*gqu6NmrVQTJs4@;MrqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9
h>Z%*eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r
;>X/d:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5
rf[8Hrgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="Arp'LNrpTjWrq-3arqZQiqu$Hlqu5=LeGoFE
rquclrqQKerq69^qsaUOrosFCro3q7rn@A&rmC_hrl>#Srk&0<riuI(rhf[frgNhOrfI,<reLK(rdFcj
rcJ-YrbVRJrac";ra5Y1r`];'r`/qsr_i_lqbR)`r_3;`nk&:@ogo-Ur(?i[r_<Afqb[8ir_rerr`K/'
ra#M1raPk;rb;@Jrc%jYrd"Kkrdk''rf$i<rg!JOrh07friH+(rjMg<rk\TRrlkAhrmh#%rnm_7roF(C
rp9OOrq$-^rqHEfrqcNirr(@HeGoOIqu-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#R
rk/6>rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>b
oh>-RnkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07f
ri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu5+FeGoOIqu-Nlrql]k
rqHEcrq-3ZrpKdQrosFEro3q6rn@A'rmC_jrlY5WrkABCrj2U-ri5smrh'1Zrfd>Brepc0rdt,urcnEb
rc.pTrbDFFrac";ra5Y1r`];(r`9"ur`&kpqbd>hqbR2dk"Y_Jr_EMjr)!AiqbmDmr`/qur`T5)ra#M1
raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4E
rpB^Rrp]pZrq69brqcWkrqucoqu5+FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUkn
rltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!
r`&kqr_iVjh,+)J!)i_mr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>I
rh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu5+FdJs4F
qu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<
reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc*Vs!EN8#=8l>$=oMV(
>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmgIf=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"
hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*gqu6NjrVlfDs3CZDrqlZnr;QQlq>U0go`"F\nG_kTli-/Jjo4<>
hu;C0fDa7uci2)d`W![P]Df;=Yl:a'W;`LiSc5&VPQ$[CN;eS2K)U9!HN&-fFoH@ZD>n>MBDuNBAc?-;
@/aO4?2e+.>Q.h*=o2>#=6Wcb=8Q)"=TMZ.r`];*r`oG.ra5Y4raGe;rau.BrbMLNrc%jZrcnEgrdXp"
reCE2rf@&BrgEbVrh9=iriH+'rjVm=rkSNPrlY5drmUkurnIG0ro3q=rosFJrpKdTrq$-]rqQKgrqcNi
rr)`ndJqMlrr2fnrquclrqZQgrq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)UrkABDrj2U.riQ0q
rh9=_rg*PIrf@&;reLK)rdauqrd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*kun!hr`f>+!F/n/
?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_
d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fr;QZlrmCbhs7lQlqu6Hkq>U-fpAX^`nG_nUmf)MN
kPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9hFoHC[E;jeT
D#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[rcnEhrdXp!
re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjUrq-3_rqHEf
rqcWkq#/D9bQ%S@qu-Nlrql]krqQKdrq69^rpg!Vrp0RJroa:?rnm_1rmq(trm1SfrlG)VrkABCrjMg1
riH*trhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^PrbDFGqe,n?rakk7raPY2qdT>1rac(A
!G5s@BDuWECAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^
ci2Dmf)FJ(hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQT;s3(HArqlZnr;QTmqYp9hp\smco`"F\
n,DbSli-,IjSn0<hu;@/f)F+sd/M5fa8WmR^&GYCZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4KDpH$J,Xfo
H2`!dF8g4WDuOVQD#S5LCAqrEBDuN3Ac$*=BDuTFC&r'arbMLLrb_ONrc.pYrc\9crd4Wordk'$re^W5
rf@&Arg3VRrh'1brhf[trilC.rk&0Drk\TSrlb;frmLesrn@A/ro3q<roj@HrpKdSrpp'\rq??crqQKh
rql]mrr)`nbQ#ccrr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHE
rjMg3riZ7#rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbhdUr,DXT
rcA'\rcnEfrd4WnrdXoureCE.repc:rf[8Grg`tZrh07fri,n"rj)O4rk&0Erkn`Urm(MirmLf!rnRM1
ro*k<roj@IrpB^Srpg!Zrq69brqZQirql]mqu-EkbQ#ccq#:0hrquclrqZQgrq??`rq$-ZrpTjRrosFF
roO.;rndY0rmq(trm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=repc1re19&rdausrd=]k
rcnEcrcS3^rc?n8rc8']!H`G_FoHR`GlE$gI/\ToJGt0"K`6`*MuJb9OT(LDQi<KRTDkVbVZ*[rYPtj,
\Gj,>^])1NaSsE_ci2Dmf)FJ(hYuI4jo4HBl2L)Ln,DkVoD\F^pAXjdq>U6fr;QZirlb>\s8N#prVl`o
qu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]
Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+QkrdFcrrdXp!re19,reg]7
rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_
rqHEfrqcWkqu$Hlqu4\:_Z0W7qu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Ma
rl+lQrkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdOou
r.+d!re:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*Crk\TQrlG)arm:Ymrn7;+rnm_5
roF(Arp0RNqsXOTrq-3arqQKgrqcWkrqucoqu4J4_Z0W7qu-NlrqlThrqZQgrq69_rpp'XrpKdQrosFF
roF(:rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\NrfmDFrfI,>rf$i6reUQ.
re:?)on*0oqgeZson*0r!/1H-L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R([/RN5]DfPD
_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQT2s2+g8rqQHkr;QTm
qYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?[JmE0Y5YO%VuELk
T`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])M?&P8Mi7Rnrf6u=rfI,Crg!JKrgNhV
rh'1_rhTOkriH+%rilC0rj_s?rkJHLrl+l\rm(Mirm^qurn7;.ro*k9roa:Frp0RPrp]pWrq-3_rq??d
rqZQirql]mqu-Ek_Z.:Krr2]kqtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[
rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rfR8F!L&`HPl@!JQi<EP
SGo)YT`1YaV#I7jX8]7#Yl:s-[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\
pAXgcq"speqtU-erkJKGs82fmrVl`oqu6Hkq>U0gp\sjbo`"F\nG_kTmJcALkl0`Dir7j7h>Z+,fDa7u
d/M;hbPoN\_u@IN^AbbD\Gil7ZMq',Xo>@"W;`XmU\g_`T)P8ZRf8`SR/WHOQM?a?Pl$aFQN!6MQiNNT
R@4&Crg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\rltGhrmUktrn7;,ro!e8roX4CrosFL
rpKdTrpp'\rq69brqQKgrqcWkrqucop&;`+\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@B
ro3q7rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kT
pmV2OqjdYVrgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'
hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQT)s0Mb)rqlZnr;6BjqYp9hp\smco`"FY
n,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrba8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jq
VYd4hV!k)UV#I4iV?!LpVl0Nnri?%#riZ7(riuI.rjDa8rjr*CrkJHKrl"fUrlP/brm1Sjrmh#"rn7;,
rnm_6roO.Broj@IrpBUOrpp'\rq??crqQBerqlTjrr)`n[f<]6qu6Tnqu$HjrqcWirqQKerq69_rq$-Y
rpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>rjMg6rj2U0qlp(&riPsr
ri5amql9FlriH1'!NrU&Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2ir8$<
kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirjMj5s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"V
mf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2ZMUohYl:p,
Z2h33Za9Y<rjMg8rji$?rk83Drk\TOrl4rYrlb;erm:Ylrmh#"rn.5+rnm_5ro=">roX4Erp0ROrpTjV
rpp'\rq69arqQKgrqcWkqu$Hlp&;E"YlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0
rnIG)rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH
_#D1L_u@UR`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZi
rilF,s7QBjrVQNlqu6Hhq>U0gp&=U_oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMl
cMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)
rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hlp&;2qWrMtqqu-NlqtpBhqt^6c
rq??arq$-[qsaUQrpB^Mroj@EroF(<qr%J1rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>
rknWOrl"lWr5S`XrlY5`rltGfrm:YjrmC_ormq)#rn7;,rndP1ro="=roa:Frp'LMrpK[Qrpp'[rq69a
rqHEfqtg<hqu$Hlp&;)nVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1
rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8
j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6Ais/5nirqlZnr;6BjqYU*fp\smcp&"@[
nc&%Wn,DbSm/H;Ll2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqrdehGkd-8mUd/22jdK.eErmUbo
rmh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeVuN@g
rr2ThrquQfrqQBbqt9s\qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4W
rm_#"r7:l"rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkT)Y2X
rr2]krquZjrqcNfq"Od[qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)
h#?.,hu;R5hu;U6ir8$<jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frgWqTs7QBdr;6Bj
qYU*fq"XO]oD\=XnG_nUmf)SPli-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">
rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^S,\cRq#:'erquZjrqcNfqtL*`rq-*Zqsj[Srp]pUrpKdP
rp0RKroj7BroX+>roF(=p#>H!p#5u3!TW5>jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!c
qYpBhr:p6crg!MBs8N#grVl`oqtp6eq=s^]p&=U_o)A1Yn,DhUn,)PPmJcJLli-2Hl1O9/kOds=kii$1
qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?crql]mp&4deN;nk:p&=jerquHdrqcNfrqQKerq?6^rq-3]
rpp'YrpTjUrpTaPrpBULqs3)'rp'RNq<\+Jq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hlo)=UJ
LB%/Mo)8RcqtpBhqt^6dqtL*`qt9s\qt'UQqsaURrp]gRq!RV<q!S+L!UoLVnG_nRnG)PQoDA1Zp&"I^
p\Xabq>:$fqtp<arUp/Hs+14Ks82fdrVl`lqtU$bq>U0ap\XX\o_\7Zo)%t5nG_qXo)/(XoC_bTp%\:Y
q#:*aqYpBhr:U$]rdk(Ls+14Ks760drV6<cqu6Hbq>U0dp\smWp&"CDoCqkXo^qhLqtC$`qtU'aqtg*b
q#(-im/DS9!<7WMo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`qtU*^rUp/@s7cPEs60LX
rpTg\r;6B^qUG<@qX+.YqtU*XrV6ACs60K6s60LFrq63Lqr[bOqsaLRr9"!0s60K6s4RGFrosCPr9!nN
r:^'TrUTr=s4mX*s2=s(rm^lHrp'K6s2=qgs2=rOrp'K6s2=qgs+13$s/l<Ps+13$s/l<Ps+13$s/l<P
s+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<Ps+13$s/l<O
~> %APLeod
EI
256 0 0 52 0 100 cm
BI
/Width 768
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcDhOf)>^Lrdk*%s+13$s2b5irdk+4
s+13$s+142s4%%ks+13$s+13$rrE)Krdk*Qs+13gs6Ta7r;ci^rdk*:s+13$s5<qDrm^o2rdk+Is+13$
s+14Js6Ta7rTX=>s+13$s+13;s6T^crVb=Gl2H86`;bDgg&LaEl2C2Nk54oNpAF:Uo)=4?YlB:SJcGEC
p&=4So).YIm/65Ko)=mRJcC<$OoP+Rl2C2Nk54NCm/?MSq#>pFJcC<$XoJ(nl2CGUqY]LQm/65Ko)=4?
h#Ds*huE]Tl2C;Qp&!>:!W)Ziqss[OrVQSFs0M`Vs+14Is8N#^rUp*]qpbK>qss[OrVQS\s+13$s-Ncb
rosCSr:Ts:qYU0\r9XCZrql_Hs+13$s0Mb)rosCSr:^!fqpbK>qss[OrVQSFs53j-s60LXrpTg\r;6B^
qUG<@qX+.YqtU*XrV6ACs1JA_s+LFOrql]`rV6<fqssU5q<[tWqtU*XrV6Abs+13$s.KDerpTg\r;6B^
qUG?-qYpBer9sU]rr2nJs+LE's1JC,rpTg\r;6B^q>pEff(n\/rqlKgn,<%\JcFs6JcGBBqu60bq#($d
qtg!]rqQ'YqtB1Fp\"X]p@\1Wq"sm[qYpBer:U$]rdk*ms+133s82fjrVQQgr;6BgqXs[`q""1Vp?)&@
p@\1Wq"sm[qYpBer:U$]ric?Qs+13Os82fdrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*drVQQd
rdk*5s+13ks82fdrV6<fqtp6_q>U0\pAjsbp?)&@p@\1Wq"sm[qYpBer:U$]rdk+Ds+14Es8N#drVl`i
qu6Hhq=sa^p\"7Wp&=U>oDS:^o^r.Uo(N(Wq"Xjaqtg*bqu$$`rr.KKbQ!.nPQ1X]o)8RdrquQgrqcNf
q"Xa\p%J:Urq,%<qt0m\o(N(Wq"Xjaqtg*bqu$$`rr0,$JcC<$YQ+V$n,<7`q"t'eqt^$^qtKdWqt9s\
h=LO9rq5jUrqH3_rqZHfq"ssdo)8ReJcCr6JcEpnrr2BbrquQgrqcNfq"Xa\p%J=V!;6?`h=LO9rq5jU
rqH3_rqZHfq"ssdo)8ReJcGKEJcG]Kqu60brquZjq"jm`rqQ9_qt9jYqt'gXqsiM3rp^!Zr:9jYp%87V
q"O[\rqZ?crqlTjp&4R_JcF7"JcD/<qu60brquZjq"jm`rqQ9_qt9jYqt'gXqsiM3rpfmVrq#gTrq6'\
qtU0dq"k!equ$-cp&;K$JcC<$[K$.'o)8Rcqtp0bqt^6dq"O[Yqt0dWrposVh=1F6qssaXp%87Vq"O[\
rqZ?crql]mrquHfp&9OBSH"0?dJs+Co)8Rcqtp0bqt^6dq"O[Yqt0dWrpg*[nbr"6nG_tTo)A7Ro`"OY
p\Xabq=sgcqtp<arUp/@rrE(Rs82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\LmdKQ<meuST
n*g8FrpTaRq!n@Tqt0m\qtC$`qtU0dqtg<hqu$-cp&9OBh>`'+UAt,io)8RcqtpBhqt^6dqtL*`qt9s\
qt'UQqsaURrp]gRq!RV<q!S%Jrp]pUqsaCNrq$$Zrq60^rqH<brqZHfrqlTjp&4R__>f)dJcEIaqu60b
rquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjUqsX=Jn*To<qsXORrpTaRq!n@Tqt0m\qtC$`qtU0drqcWj
rqlTjp&4R_JcDSHJcFI(qu60brquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjU!UoLUn+c>>mJ-,Hn,DhU
n,)VLnc&.Wo`"O\pAXg`q#:*dqYpBhr:U$]re^Z3s8N#drVl`lqu6Heq"XR^o_\7Zo)%tVnGD\LmI0B0
l1F<>lhKlHn,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrdk+*s+13Hs8N#drVl`lqu6Hkq"sj]pAX^]oD\=X
nc&%Tn+c;=lgO*,lhKlHn,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrk\Vcs+13ds8N#drVl`lqu6Heq"XR^
o_\7Zo)%tVnGD\LmI0B0l0ms5mJcSOnG_tTo)A7Xo_A.Wq#:'cqYpBhr:9gcrdk*Gs+14+s8N#drVl`l
qu6Heq"XR^o_\7Zo)%tVnGD\LmJQ;BlgO*,lhKlHn,)VRnb_nVoDA1TpA"F[qYpBhr:9gcre^Z6s8N#g
rVl`oqtp6eq=s^]p&=U_o)A1Yn,DhUn,)PPmJcJLli-2Hl1O9/kOds=kii$1qs+1Hrp9XOq!S.NrpTjV
rposYrq6'\rqZ?crql]mp&4deJcF[.JcD\Krr2Kerqucmqtg3crqH<aqt9s\rpp'YrpTjUrpTaPrpB^O
qs47Hqs!e;n)s9*ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu4P6JcC<$`;fi9o)8Rc
rqlThqt^$]qt9s\rpp'YrpTjUrpTaPrpB^Oqs47Hqs!e;n)s9*ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\
qtL*arqZ?crql]mp&4deJcD\KJcF[.rr2Kerqucmqtg3cq"O[Yrq-3\rpg!Vrp]pUqsOINrp9OJrp'FG
!9s1?n)s9*ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu2QSQ2gXYq#13iqtpBhqt^-`
rq??`qt'^TrpTjUrpTjSrp9XMrp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5M
nG_nUnG_tWoDA1WpAXgcq>:$fqtp<drV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"VnG_nU
mf)SPli-2KkkjQBk549>jSn34ipYk!ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!c
qYpBhr:p6crltIos+13ps7lTgrVl`lqu6Hhq>9pcpAX^]oDA(Wn,DhUn,DbSm/H>MlMg#EkPjW@jo4??
j7VF#iUu40j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoD\C]o_\@]p\t!cqYpBhr:p6crdk*Ss+147
s7lTgrVl`lqu6Hhq>9pcpAX^]oDA(Wn,DhUn,DbSm/H>MlMg#EkPjW@jo4<Aj5U."p#>H!p#>u2roF(?
qr[n@qrn%Erp0RMqsOIQrpTjUrpg!Zqt0dZrqHEfqtg<hqu$6fq#6QYQ2gFRrquZjrqcEbrq??arq-!V
rp]pUrpKdPqs47Groj@EqrRh<qr@\8ro!J,k2-!m!9!e5qr7V8qrIb<roa:ErosFJqs==MrpTjUq""FV
rq69aq"Xa_rqlTjp&0IAl2Q>7Z2aCnrquZjrqcEbrq??arq-3\qssaUrpTjSrp9OJrosFGroa1?roEt:
ro3q8p#"ogqqq;/qr7V8qrIb<roa:ErosFJqs==MrpTjUq""FVrq69aq"Xa_rqlTjp&3/8JcC<$c2[A5
rquZjrqcEbrq??arq-!Vrp]pUrpKdPqs47Groj@EqrRh<qr@\8ro!J,k2-!mqr%A2ro<n:roO.Broj@G
rp0IJrpKdSrp]gUrpp'\rq69aq"Xa_rqlTjp&0IAZ2]CTl2U>QrquZjrqcEbrq??arq-!Vrp]pUrpKdP
qs47Groj@EqrRh<qr@\8rnmh7htQ$jhYZ4-i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[
qYpBhr:U#Rs-WicrqQHkr;6BjqYU*`p\sg^oD\7Vn,DbSmJcJOlMg&Ikl0`Djo4??ir7p9hu;R2htu7,
h##jpgA]k$g]?3crn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*h
JcG3=JcE+Wrr2]krquZjrqcNfq"Od[qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'
n(Rcqp"]Q&qqqD2rnm_6ro3q<roO.Aroj@Grp'LLrpB^QrpTaRrq$$Zq"Od`qtg<hqu$6fqu5(EJcC<$
d/X+Eq#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2qq_/)qqLSnrnI,$
rn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSrp]pVrq$$Zq"Od`qtg<hqu$6fqu20H\,V$Zm/R(a
q#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2r7qA/qqV)'n(Rcqp"]Q&
qqqD2rnm_6ro3q<roO.Aroj@Grp'LLrpB^QrpTaRrq$$Zq"Od`qtg<hqu$6fqu3)bT)\fhp&4mfq"k!b
qtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq!7q)!rn.5'
rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu20Ho)F:@])Vd/p&4mf
q"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVqqptc!
rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-Ekf)L=$JcF=$rr2Th
rquQfrqQBbqt9s\qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrmgns
rn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu20H])R?]o)J^g
p&4mfq"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmh,#ec"%teE56W
eGe"qf)F>$g&B_&h#?10htu@2ir8!;jo4HBkl0iGm/HDOnG_nUnG_tTo`"O_p\Xa\qYU3frVQScs.98c
rVl`lqtp3gq"sgbpAX^`oD\=[nG_kTmJcGNlMg&IkPjWCjo49=i;VX2h>Z4/g&BY'fDaA#ec+(ndehDj
ci2;aci2;jchl)fdeqPmeGe"tf)F;#f`'S$h#?./hu;U6ir8'=k5OQCl2KuIli-;Nn,DhUo)A7[o_\@]
p\Xabq>U9gr:p5As762@s187*rVl`lqtp3gq"sgbpAX^`oD\=[nG_kTmJcGNlMg&IkPjWCjo49=i;VX2
h>Z4/g&BY'fDaA#ec+(ndehDjci2;aci2;jchl)adf.bqec+/!fDaG%g&'S(h>Z=2iVqj9jo4EAkPj`F
lMg,KmJcSRnG`"XoD\CZpAXg`q#:*gqtp<drRV""s+14$s7lQlr;6Bgq>U0dp\smco`"I]o)A.Xmf)VQ
li-2Kl2KlFk5OKAir7m8htu7/h#?"+f`'M%f)F5!eG.Jhd/MAjd.P`ad/MAgd.l&geGe"tf)F;#f`'S$
h#?./hu;U6ir8'=k5OQCl2KuIli-;Nn,DhUo)A7[o_\@]p\Xabq>U9gr:p5As185]s763brVl`lqtp3g
q"sgbpAX^`oD\=[nG_kTmJcGNlMg&IkPjWCjo49=i;VX2h>Z4/g&BY'fDaA#ec+(rdf%Vkd/MAjd.P`a
d/MAgd.l&geGe"tf)F;#f`'S$h#?./hu;U6ir8'=k5OQCl2KuIli-;Nn,DhUo)A7[o_\@]p\Xabq>U9g
r:p5^s/5nlrqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#
eGdnqdJhMfci25ec2PrUbPTN_c2GogcHc=5rm:YlrmLeprmh##rn7;)rnRM/qr%J5ro="@roj@Grp0RN
rpKdSrp]pWrq-3_rq??crqQKgqtg<hq#1!eJcGWIJcEXfq#:'eqtpBhrqZQgrqHEcrq69_rpg!WrpTjS
rp9XMrosFGroa:@ro3h5rndY0rn@A)rn.5#rm^qqrmC_lps8rbqp#,an&tUPrlt>cqp58grmC_nrmUks
rn.5'rn@A,rn[J0ro3q;roa:ErosFJrpB^QrpTjUrpg![rq69arqHEerqZHfrqlKhq#91NJcC<$huEKN
q#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1rnRM,rn7;'rmh"trmLenrm:Gd
rm(DcrljiSqoo&aqp,)brm:YlrmLeprmh##rn7;)rnRM/qr%J5ro="@roj@Grp0RNrpKdSrp]pWrq-3_
rq??crqQKgqtg<hq#1!eJcEXfJcGWIq#:'eqtpBhrqZQgrqHEcrq69_rpg!WrpTjSrp9XMrosFGroa:@
ro3h5rndY0rn@A)rn.5#rm^qqrmC_lq9K&erm(DcrljiSqoo&aqp,)brm:YlrmLeprmh##rn7;)rnRM/
qr%J5ro="@roj@Grp0RNrpKdSrp]pWrq-3_rq??crqQKgqtg<hq#1!eVuNdsqu6KkrquZjrqcNfrqHEc
rq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLelrm:YirltGcrlY5^rl4iSrl"]On&#(A
qo&KQ!64rVrlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??c
rqZHfrqlTjrr)NhJcC<$`rGr8qu-NlqtpBhqt^6crq??arq$-[qsaUQrpB^Mroj@EroF(<qr%J1rn[S,
rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>rknWOrl+cSrlP/^rlb;crm(Mirm1SkrmUktrn%/&
rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTjrr)Nhjo9o3JcFa0qu6KkrquZjrqcNf
rqHEcrq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLelrm:YirltGcrlY5^rl4iSrl"]O
n&#(Aqo&KQqo8WWrlY5`rltGfrm:YjrmC_ormq)#rn7;,rndP1ro="=roa:Frp'LMrpK[Qrpp'[rq69a
rqHEfqtg<hqu$Hlp&9OBao?qlrr;lpqu-NlqtpBhqt^6crq??arq$-[qsaUQrpB^Mroj@EroF(<qr%J1
rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Z!QE%V`W!gQ_sbJA_u%CO`V[[Sao9H^bPocccMl2ici2>k
e,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp/ls/Q+urqQHeqtp3g
q#:!dp&=U_o)A1Yn,D_Rli-2KkPjWCjo46<i;VU4g]#q+f`'G#eGdkpd/M>ibl5caao9B\`r<pU_u@OP
_>D%F^[Jl5^\beH_Yh:M_u@XS`r='Yao9H^bl5ldd/MGle,Insf`'S'g]$(/hu;U6jo4EAkPjcGli-;N
n,DkVo)A:\p&=[^q#:*aqtU-erdk*#s2P*<rqQHeqtp3gq#:!dp&=U_o)A1Yn,D_Rli-2KkPjWCjo46<
i;VU4g]#q+f`'G#eGdkpd/M>ibl5caao9B\`r<pU_u@OP_>D%F^[Jl5^\bhD_Z%IP`W!mVaSs<\b5TWa
c2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Yo`"O_pA=Xaq=sj^rVQTUs+13$s5O(X
rqQHeqtp3gq#:!dp&=U_o)A1Yn,D_Rli-2KkPjWCjo46<i;VU4g]#q+f`'G#eGdkpd/M>ibl5caao9B\
`r<pU_u@OP_>D%F^[Jl5^\bhD_Z%IP`W!mVaSs<\b5TWac2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQC
lMg,KmJcSRnc&+Yo`"O_pA=Xaq=sj^rVQSFs2k:ls8N&trqQHeqtp3gq#:!dp&=U_o)A1Yn,D_Rli-2K
kPjWCjo46<i;VU4g]#q+f`'G#eGdkpd/M>ibl5caao9B\`r<pU_u@LR_8-,fqnW*Dn%JV5qnW*Grkn`S
rl4rYrlP/^rlkAdrm:YlrmUksrn.5'rnIG/rnm_6roO.Aroa:Grp0RNrpTjVrpp'\rq69aqtU0dq"sjb
qu3_tYlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0rnIG)rmq(urm:Yjrm(MdrlY5]
rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH_#D1L_u@UR`W!sXao9K_cMl/h
d/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZire1<&s31N<rqlZnr;6BjqYp9e
p\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A
]DfD=\bN]6\biu;]DfJB^&GbF^])%J_>_@O`;[aTaSs<\bPofdci2;jeGe%uf`'Y)h>?.0j8S-=kl0iG
lhg,InG`%Yo`"U^q"speqtp<jrV6BUs+13$s60LXrqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZB
iqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfJB^&GbF
^])%J_>_@O`;[aTaSs<\bPofdci2;jeGe%uf`'Y)h>?.0j8S-=kl0iGlhg,InG`%Yo`"U^q"speqtp<j
rV6ACs31Lrs7lTjrVl`lqu6Hkq"sgbo`"FYnG_nUmf)POlMg#HjSn09i;VR3g]#k)f)F1ud/MAjcMl#d
b5TK]`W!gT_u@LO_#D+J^&bp\!58BEqn)j=qmlL3rjhp;rk&0Brk8<FrkJHJrk\TOrl"fTrlG)\rlb;d
rm1Sjrm^qurn.5)rn[J0ro="=roj@Grp0ILqsaUVrq-3aqtU'brqlTjrr)WkYlD'0qu6KkrquZjrqcWi
rqQKdrq69_rpp'YrpTjSrp0RJroX4@ro="9rndY1rn.5$rmh"qrm:Yjrlb;_rl4rTrkeQIrk/6Brji$<
rjMg5rj2U0qm#:friuI.!4)^4Zi7?2[f3c8\c05?^&,SD_>_@O`r='YbPoied/MGlec+2"f`'_+hu;R5
j8S0>k5OWEli->On,DkVo)A:\p&=[aq#:*gqYpBhr;QZfreg`,s3L`BrqlZnr;6BjqYp<iq#:!dp&=U_
o)A1Yn,DbSli-/Jk5OH@j8S!9hYu@1f`'J$ec*tqd/MAjbPoW_`r<mT_Y_+I]`,PB\c0,<[f3Z5Zi79-
Z0&:iZ2V'.Zi7?2[f3c8\c05?^&,SD_>_@O`r='YbPoied/MGlec+2"f`'_+hu;R5j8S0>k5OWEli->O
n,DkVo)A:\p&=[aq#:*gqYpBhr;QZfrpKf;s+149s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"Vmf)PO
l2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2ZMUohYl:p,ZMq30
[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_
pAXjdq>U6iqtp<jrUp/@s3gq&s82fmrVl`lqu6Hkq>U0gpAXaao`"F\nc&"Vmf)POl2KiEjSn3=i;VU4
h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9ZiRM>!42[1qm#:friuI.rj2U2rjMg8rji$?
rk83Drk\TOrl4rYrlb;erm:Ylrmh#"rn.5+rnm_5ro=">roX4Erp0ROrpTjVrpp'\rq69arqQKgrqcWk
qu$Hlp&;E"ZiC%(q#1!brqZQgrqHEbrq-3\rp]pTrpB^Mroj@EroF(<rnm_2rn@A)rm^qrrmC_jrlb;_
rl4rUrk\TLrk8<Crj_s9rjDa3rj)O,rilC)qlKdtl)O``qlBe"!NiL'Yl:j*Z2V*/[JmZ7\Gj,>^&GhH
_>_CP`r=*ZbPofddJhVoeGe/#g]$%.hu;X7jSn?Al2KuImJcSRnG`"XoD\F^p\sseq=sj^rVQSOs+13r
s8N#mrV69hq>U0gp\sjbo`"F\nG_kTmJcDMkl0cEjSn0<hu;I2gA]e)eGdqrdJhGjbPoW_`r<pU_>_7L
^&GYC\Gir9[JmN3ZMq',Yl:g&XT#9bWrB'rXT#@$Yl:j*Z2V*/[JmZ7\Gj,>^&GhH_>_CP`r=*ZbPofd
dJhVoeGe/#g]$%.hu;X7jSn?Al2KuImJcSRnG`"XoD\F^p\sseq=sj^rVQT^s+13$s6K^arqQHequ6Ej
q#:$ep&=U_o)A.Xmf)VQlMg#HkPjQAir7j7h>Z.-g&BM#e,IbocMl#dao9<Z`;[UP_#D%H]Df>>[f3]6
Zi790YPtd*Y5>="X6HY`X8B!tXo>R(YPtg+Zi7B3\,No:]DfMC_#D1L`;[dUao9K_cMl5je,Ikrg&Bb*
h>Z=2ir8$<kPj`FlMg2Mn,DhUo)A7[p&=^bq#:*aqtU-erdk*ts+gXRrqQHequ6Ejq#:$ep&=U_o)A.X
mf)VQlMg#HkPjQAir7j7h>Z.-g&BM#e,IbocMl#dao9<Z`;[UP_#D%H]Df>>[f3]6Zi790YPta,Y-%c-
qlKdtl)O``qlKe!rilC*riuI/rjDa7rj_s>rk8<Hrk\TPrl4rZrlb;drmC_orm^r#rnIG.rnm_7roF(A
rosFIrpB^Rrp]pXrq$-^rqHEerqZ?dq#1*h[f<]6rr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4A
ro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4f
rh][n!N2jpWW&stXo>L&YPtg+ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]E
li-;Kn,DnWo`"R`p\ssbqYpBhr;QZlreg`,s3L`ErqlZnr;6BjqYp9hp\smco`"FYn,D\Qli-,Ik5OKA
iVqa6h>Z+,fDa>"d/MAjcMkrba8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jqVYd4hV!k)UV#I4i
VZ*LmWW&stXo>L&YPtg+ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;K
n,DnWo`"R`p\ssbqYpBhr;QZlrpKf;s+149s8N#prVl`lqu6Hkq#:$epAX^`o)%nTm/H>Mkl0`Djo46<
hu;I2g&BV&ec*qpci25hao9?[`;[UP_#D(I])K2<[JmK2Yl:j*Y5YO%X8]*tW;`[kV>d:ZU\gkdV>d@k
VuE[pX8]7#Y5YX(Z2V'.[Jm]8])KGC^])(K`;[dUao9Tbci2;jec+2"g&Bh,hu;U6jo4HBkl0oImJHAO
o)A:\pAXgcq"speqtp<jrVQSFs3gq&s8N#prVl`lqu6Hkq#:$epAX^`o)%nTm/H>Mkl0`Djo46<hu;I2
g&BV&ec*qpci25hao9?[`;[UP_#D(I])K2<[JmK2Yl:j*Y5YO%X8](!W2K]prhfRhrhT"XqkX4frhf[m
ri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mhrm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOT
rq-3`rqHEeqtg<hqu$Hlqu4&(\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7rndY.
rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2OqjdYV
rgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'hYuF3ir8$<
kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQSRs+14#s8N#prVl`lqu6Hkq>U0gpAXaao`"C[nG_nU
li-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkcT`1S_
T)5)XSGSfNRf8fRSGo)YT)PA]T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVo
fDaM'hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQTas+13$s7--grqlZnr;6BjqYp<i
q#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X_>_7L^Ab_C\,Nc6Yl:j*Y5YL$
WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc55[TDkM_U&LhdV#I:kWW&stY5YX(Yl;$/\,Nu<^AbnH
_>_FQao9Qaci2>ke,ItugA]t.hu;X7jSnBBl2L#Jn,DhUnc&1[p&=[aq#:*gqYpBhr;QZlrdk+"s,I'X
rqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X_>_7L^Ab_C
\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L\cT:Z+Urgs"Xrg`kTpmV2OqjdYVrgs+]rh07arhKIgrhoapri?%$
ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@Grp0RPrp]pWrq-3_rq??drqZQi
rqlTjrr)`n\c95?q#1!brqZQgrqHEbrq-3\rp]pTrp9XKroa:Bro*k6rn[S,rn%/!rm:YirlkA^rl"fO
rkABDrji$9rj)O,ri?$uri#glrhBCbrh'1\rg`tVrgEbQpm1fBpltcCpm1oH!1<kURJrZSSGo)YTDkM_
U].(gW;`dqX8]=%ZMq92\c05?^AbqI`;[gVbl5oed/MPof)FA%h>Z=2iVqs<kPj`Fm/HGPnG`"XoD\F^
p\sseq=sj^rJgi.s4./ErV69hq>U0gp\sjbo`"F\nG_kTm/H8KkPjTBiVqa6h>Z+,fDa;!d/M>ibl5Z^
`;[RO^AbbD\c0#9ZMq',X8]-uW;`UlUAghbTDkD\SGnuVRJrTKQMZsBPl?sCQN!9NRJrZSSGo)YTDkM_
U].(gW;`dqX8]=%ZMq92\c05?^AbqI`;[gVbl5oed/MPof)FA%h>Z=2iVqs<kPj`Fm/HGPnG`"XoD\F^
p\sseq=sj^rUKo=s+14?s7lQfqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlFjo46<hu;I2g&BV&eGdhocMl&e
a8X$V_#D(I]DfA?[JmK2YPtU%WrAsrV#I+fT`1S_Sc5/YRf8`SR/!!EQ2$UCQ2$[ER/WNQRf8iVSc58\
T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,hu;U6jo4HBl2L&Kmf)_To)A7[
p&=^bq#:*aqtU,@s4../s7lQfqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlFjo46<hu;I2g&BV&eGdhocMl&e
a8X$V_#D(I]DfA?[JmK2YPtU%WrAsrV#I+fT`1S_Sc5/YRK8hE!1EhRpm1fBpltcCpm1oHrgEbSrg`tY
rh'1_rhKIgri#gqri?%%rj)O2rji$?rkABIrl"fVrlkAerm:Yormq)%rn[S2ro*k<roa:Frp9XPrp]pX
rq$-^rqHEerqZ?dq#.c']`8!1q#1*erqcWhrqHEcrq-3\qsXONrp0RHroO.<ro!e3rn@A&rmUkmrltGa
rl>#SrkJHGrji$:rj)O-riQ1#rhf[jrh9=args+ZrgEbQrg*PJrfd>ErfH9'qiLf?!0[GIPQ$gGQN!6M
RJr`USc5;]U&LkeVZ*XqXo>R(ZMq<3\c0;A^])(Ka8X6\c2Q&ge,IqtgA]n,i;V^7jSn?Ali-;Kn,DnW
o`"R`p\ssbqYpBerVQSXs+14&s8N#mrVQKkqYp9hp\smco`"FYn,D\Qli-)Hjo46<i;VR3gA]\&e,I\m
c2Piaa8WpS^](qG\c0&:ZMq*-Xo>C#VZ*CjU&L_aT)P8ZRJrTQQN!-JPQ$aEOQMW$OT(FBPQ$gGQN!6M
RJr`USc5;]U&LkeVZ*XqXo>R(ZMq<3\c0;A^])(Ka8X6\c2Q&ge,IqtgA]n,i;V^7jSn?Ali-;Kn,DnW
o`"R`p\ssbqYpBerVQTgs+13$s7H?jrqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.t
ci22gao9?[_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^SGnrUR/WENPl?mGP5^R*O8G%<P5^[EPl@!J
Qi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAO
o)A:\pAXgcq"speqtU-erdk+(s,d9[rqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.t
ci22gao9?[_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^SGnrUR/WENPQ?u3!0dDFrfH9'qiLf?rfd>G
rg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHKrl>#\rltGgrmUktrn@A,ro!e7roF(Arp0RN
qsXOTrq-3`rqHEeqtg<hq#1*h^]21Nrr2]krqucmrqcWirqQKdrq69_rpg!WrpTjProsFFro3q8rnm_.
rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>Crf@&=rf$i7regK,reLK-
qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oe
d/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*gqYpBkr;6Hirg*S8s5*eTrqQHkr;QTmqYp<i
q#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?[JmE0Y5YO%VuELkT`1S_
SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])MZ/P5N;ek:O8b7?PQ$jHQN!?PSGo/[T`1bd
VuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*gqYpBk
r;6HirqcYGs+14Hs8N#mrVl`oqu6Hkq>U0gpAXaao`"C[nG_nUli-/JkPjK?i;VX5g&BV&eGdhocMl&e
`W!dS^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[Rf8WPPl?mGOT(=?NrG":MuJV/M#N2/LAQ](LAlu'M#N;2
MuJ\7NrG+=OT(ICQ2[*KRf8iVTDkM_V#I:kXT#C%Yl;'0\Gj/?^])+L`W"*\cMl2ieGe%ug&Bn.iVqj9
kPj`Fli-APnG_tWo`"O_pAXjdq>U6iqu6NjrVQSFs5*dAs8N#mrVl`oqu6Hkq>U0gpAXaao`"C[nG_nU
li-/JkPjK?i;VX5g&BV&eGdhocMl&e`W!dS^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[Rf8WPPl?mGOT(=?
NrFt<Mi.RnregK,reLK-qh>$(reL9)reg]5rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8
rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu4J4_Z0W7
q#13irql]jrqQKerq69_rpp'XrpKdProsFFroO.;rn[S.rmq(trm:YhrlP/[rk\TKrk/6=rj2U.riH*u
rhoahrh'1\rgEbPrg!JFrfI,>repc5re^W/qh=ftmt(7dre1?,r.b3-reg]5rf6u=rfR2Frg3VPrgj%\
rh9=hri,murilC/rjMg=rkABJrl>#\rltGhrm^qurnIG/ro!e;roa:Frp9XPrp]pXrq$-^rqHEerqZQj
rquZlqu2o]JcFU,rr2]krqucmrqZQgrqHEbrq-3\rp]pTrp9XKroa:Bro!e3rnIG'rmUknrltGarl>#S
rkJHFrjMg4rilC'ri,mprh9=`rgj%Vrg3VLrfR2Arf6u9reg]3reC<(pk/$dpk/R"qhG*,reg]5rf6u=
rfR2Frg3VPrgj%\rh9=hri,murilC/rjMg=rkABJrl>#\rltGhrm^qurnIG/ro!e;roa:Frp9XPrp]pX
rq$-^rqHEerqZQjrquZlqu6HlJcC<$qZ$Qoq#13irql]jrqQKerq69_rpp'XrpKdProsFFroO.;rn[S.
rmq(trm:YhrlP/[rk\TKrk/6=rj2U.riH*urhoahrh'1\rgEbPrg!JFrfI,>repc5re^W/qh=ftmt(7d
re:6(re^W3repc9rf@&@rg!JLrgEbVrh'1`rhoapriH+'rj;[5rk/6Erk\TSrlY5brm:Yormq)'rndY4
roO.BrosFKrpKdTrpp'[rq69brqQKgrql]mqu-EkJcFU,QN-s`q#13irql]jrqQKerq69_rpp'XrpKdP
rosFFroO.;rn[S.rmq(trm:YhrlP/[rk\TKrk/6=rj2U.riH*urhoahrh'1\rgEbPrg!JFrfI,>repc5
re^W/!JQ7+L%p;hJbXlsL&6W(M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LS
b5TZbd/MPof)FG'hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQT2s2+g8rqlZnr;QTmqYp<i
q#:$eo`"FYn,D\Qli-)HjSn*:hu;C0g&BG!d/M>iaSs0X_>_1J]Df>>Z2Us+Xo>3sU]-qcT)P5YR/W<K
OoCF@NW+k8M>i8/K`6W'JGXikIf"QgI/\QhIf=fsJGarsKDpT(LAm&/MuJ_8O8b:@PQ$sKRf8oXT`1bd
VZ*^sYPtg+\Gj)=^AbtJ`W!sXcMl2idf.r!h#?41i;Vg:kPjfHmJHAOo)A:\p\sseq>U6iqu6NmrVQS[
s+14,s8N#prVl`oqu6Hkq>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*df.VmcMkoa`W!^Q^AbbD\Gic4
YPt['VZ*@iT`1P^S,SfSPQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3hIJA9jJ,=cqKDpT(LAm&/MuJ_8
O8b:@PQ$sKRf8oXT`1bdVZ*^sYPtg+\Gj)=^AbtJ`W!sXcMl2idf.r!h#?41i;Vg:kPjfHmJHAOo)A:\
p\sseq>U6iqu6NmrVQTjs+13$s8)cprqlZnr;QTmqYp<iq#:$eo`"FYn,D\Qli-)HjSn*:hu;C0g&BG!
d/M>iaSs0X_>_1J]Df>>Z2Us+Xo>3sU]-qcT)P5YR/W<KOoCF@NW+k8M>i8/K`6W'JGXikIf"QgI/\Qh
If=ioJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+
hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZlrdk++s-E]arqlZnr;QTmqYp<iq#:$eo`"FYn,D\Q
li-)HjSn*:hu;C0g&BG!d/M>iaSs0X_>_1J]Df>>Z2Us+Xo>3sU]-qcT)P5YR/W<KOoCF@NW+k8M>i8/
K`6W'J,t.LrI=TkqgJ6erdFQjrdXfqre(3(reCE/repc8rf@&@rfd>KrgNhXrh07drhf[sric=+rj_s=
rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:HrpBUOrpp'\rqHEerqZQirql]mrr)`n_Z.UTrr2fnrqucm
rqcWirqHEcrq-3\rp]pUrp0RJroa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-riH*trhTOdrgj%W
rfmDFrf@&<reg]2re19&rdXotrdOiord+Qhrcn3\mr\>IrceEg!I8tiHN&<kIK"crJ,Y'!K`6f,MZ/V7
O8b=APl@-NSc5;]V#I:kXT#F&Zi7E4^&GhH_Z%XUbPolfdf.hsg&Bn.iVqj9kPj`Fli-APnc&+Yo`"O_
p\t!fqYpBhr;QZlrga">s5F"WrqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%df.Vm
bl5]__Z%=L^&GJ>Zi70-XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFMFSL"X
GlE!fHN&<kIK"crJ,Y'!K`6f,MZ/V7O8b=APl@-NSc5;]V#I:kXT#F&Zi7E4^&GhH_Z%XUbPolfdf.hs
g&Bn.iVqj9kPj`Fli-APnc&+Yo`"O_p\t!fqYpBhr;QZlrW)tLs+14Ks8N#prVl`oqu6Hkq>U-fpAX^`
o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7
M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHXbH2`-hI/\QnJGt&tK)UH&M#N;2NW,"<P5^^FRf8lWT`1bd
VuEdsYPtm-[f3u>_#D4MaSsB^d/MJmf)FA%hu;U6ir8-?l2L#Jn,DkVo)A:\p&=^bq>U6iqtp<jrVQSF
s5a3Js8N#prVl`oqu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4
YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\EmH$KC8rcn3\mr\>IrcnEfrd+QkrdFcr
rdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:F
rp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu4\:aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3
rnIG'rmUknrlb;]rkn`Mrk&0>riuI*ri?$prhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^
rcJ-[qf2(Drc.gUrH&'^FT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94
]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVleds+142s8N#prVl`l
qu6Hkq#:!do`"I]nG_kTm/H;LkPjTBi;VR3g]#e'e,I_nbPoQ]_u@FM]Df>>Z2Up*X8\spU]-nbSGnoT
Pl?dDNW+k8L]3#,K)U<"If=`oH2`'fGPcO^FT-=XEURlGEVjeRFT-F^GQ)jdH2`3jIK"crK)UK'L]352
NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[a
q#:*dqu6NjrVlcrs+13$rrE)urqlZnr;6BjqYp9hpAX^`oD\7Ymf)SPlMfuGjo43;h>Z1.f)F.td/M5f
a8X!U^](kE\Gic4Y5YL$V>d7hTDkA[R/W?LOT(7=MuJM2L&Q]'JGt#sI/\EjGlDpaFoHL^Er0kFE;jkS
Er0tXFoHUaGlE!fI/\QnJGt0"L&Ql,MuJ_8OT(LDR/WWTTDkSaV>dOpY5Y^*\Gj,>^]).Ma8X9]d/MPo
f)FG'hYuI4jo4KClMg/Lmf)_ToD\F^pAXjdq>:'gr;6Hlrdk+1s.',grqlZnr;6BjqYp9hpAX^`oD\7Y
mf)SPlMfuGjo43;h>Z1.f)F.td/M5fa8X!U^](kE\Gic4Y5YL$V>d7hTDkA[R/W?LOT(7=MuJM2L&Q]'
JGt#sI/\EjGlDpbFT?R`FT-=XEURlGEVjeRFT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[
UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVlf;
s3(HArqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#
VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qSDuOY:D>S5MDZFbSE;jkVF8g:\GlE!f
HiAKnJ,Y#uLAm#.MuJe:P5^aGSGo,ZT`1hfWW'("ZMq?4]DfSE_u@^UcMl2idf.r!h#?41iVqs<kl0oI
mJcVSnc&.Zp&=^bq>U6iqu6NjrVQSds+145s8N#mrVl`oqu6Hkq#:$ep&=U_nc&%WmJcGNkl0]CiVqa6
g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^SGnfQP5^OAMuJS4LAlc'JGt#sHiA?jGlDgaErL(X
E;OSQDWYg5DZ4SOE;jkVF8g:\GlE!fHiAKnJ,Y#uLAm#.MuJe:P5^aGSGo,ZT`1hfWW'("ZMq?4]DfSE
_u@^UcMl2idf.r!h#?41iVqs<kl0oImJcVSnc&.Zp&=^bq>U6iqu6NjrVc]rrr.KKL&V2QrW)rmrVl`o
qu6Hkq#:$ep&=U_nc&%WmJcGNkl0]CiVqa6g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^SGnfQ
P5^OAMuJS4LAlc'JGt#sHiA?jGlDgaErL(XE;OSQDWYg5DZ4SOE;jkVF8g:\GlE!fHiAKnJ,Y#uLAm#.
MuJe:P5^aGSGo,ZT`1hfWW'("ZMq?4]DfSE_u@^UcMl2idf.r!h#?41iVqs<kl0oImJcVSnc&.Zp&=^b
q>U6iqu6NjrVQSFs6'ESs8N#mrVl`oqu6Hkq#:$ep&=U_nc&%WmJcGNkl0]CiVqa6g]#n*df.VmcMkl`
`;[ON]Df8<ZMq$+WrAmpT`1P^SGnfQP5^OAMuJS4LAlc'JGt#sHiA?jGlDgaErL(XDujlqrGV[Qk&(!5
rbq[Qrc.pYrcJ-ard"KirdOirrdk''reUQ3rf@&Arg!JQrgs+^rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ym
rn7;+rnm_6roO.Crp0RNrp]pWrq$-^rqHEfrqcWkrquZlqu4e=bQ%S@qu-Nlrql]krqQKerq??`rpp'W
rpKdOroj@Bro3q7rn@A&rmLemrlb;]rk\TJrk&09riuI*rhf[irh'1Zrg*PHrf@&:re^W,rdk&urd4Wi
rc\9^rc7mSrb_XNrbMLJrb;7BratV1qe#h?rb2@I!GZBKC]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5
O8b=AQi<KRTDkVbVZ*atYl;!.]DfPD_>_LSbPolfdf.hsgA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-h
qu6NmrVQSds+145s8N#prVl`oqu6Hkq#:$epAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]_>_1J
]Df/9Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHB
C&VlHC]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=AQi<KRTDkVbVZ*atYl;!.]DfPD_>_LSbPolf
df.hsgA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6NmrVc]rrr.KKL&V2QrW)rprVl`oqu6Hkq#:$e
pAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]_>_1J]Df/9Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,
Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHBC&VlHC]8/LD>S8NEW1%YG5cacHiANoJc:<$
M>iJ5O8b=AQi<KRTDkVbVZ*atYl;!.]DfPD_>_LSbPolfdf.hsgA^"/ir8$<kl0lHmf)\So)A:\pAXgc
q#:-hqu6NmrVQSFs6'ESs8N#prVl`oqu6Hkq#:$epAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]
_>_1J]Df/9Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<iG5cR^Er0eSD>nANCB80b!,DLIqe,n?
mq)B.rb)4ErbDFJrbVRNqeuIRrcA'^rcnEhrdXoure(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABJ
rl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEerqcWkrqucoqu4e=bQ%A9rql]krqZQfrq??a
rpp'XrpTjQrosFEro3q7rn[S*rm^qorlkA_rkn`Mrjr*;rilC'ri,mkrgs+Yrg!JGrf@&8reLK*rdaur
rd+QercJ-[rc%jSrbVRKrb;@Frau.@qdf\9l!jX%qd]\<!G,jAB)ZKCC&VlHD#S>OE;jnWFT-I_HN&<k
JGt3#LAm&/O8b=AQ2[9PTDkSaWW'%!Yl;*1])KJD_u@^Ubl5ugeGe)!h>Z@3ir8*>l2L&Kn,DkVo)A=]
pAXgcq>U6iqtU,^s+145s7lQlqu6Hkq>U-fpAXaao)A.Xn,D\Ql2KiEir7j7h>Z%*eGdhobl5]__u@FM
])K/;Yl:a'WW&XkT)P5YQ2ZsGO8b"8L]2r*JGsurHN&*eFT-=[E;jbSD#S2KC&VfFB)ZB=AH$*'@fBm7
AH$0>B)ZKCC&VlHD#S>OE;jnWFT-I_HN&<kJGt3#LAm&/O8b=AQ2[9PTDkSaWW'%!Yl;*1])KJD_u@^U
bl5ugeGe)!h>Z@3ir8*>l2L&Kn,DkVo)A=]pAXgcq>U6iqtg6lrV_<IL&V2PrVHKlqu6Hkq>U-fpAXaa
o)A.Xn,D\Ql2KiEir7j7h>Z%*eGdhobl5]__u@FM])K/;Yl:a'WW&XkT)P5YQ2ZsGO8b"8L]2r*JGsur
HN&*eFT-=[E;jbSD#S2KC&VfFB)ZB=AH$*'@fBm7AH$0>B)ZKCC&VlHD#S>OE;jnWFT-I_HN&<kJGt3#
LAm&/O8b=AQ2[9PTDkSaWW'%!Yl;*1])KJD_u@^Ubl5ugeGe)!h>Z@3ir8*>l2L&Kn,DkVo)A=]pAXgc
q>U6iqtU,@s6'ESs7lQlqu6Hkq>U-fpAXaao)A.Xn,D\Ql2KiEir7j7h>Z%*eGdhobl5]__u@FM])K/;
Yl:a'WW&XkT)P5YQ2ZsGO8b"8L]2r*JGsurHN&*eFT-=[E;jbSD#S2KC&VfFAcZIS!+l%<raY2%raYh9
ral(@rb2:FrbDFKrbh^Src8![rc\9erd=]qre(3)re^W8rf[8GrgWnZrhBCkriQ1(rjMg;rkJHMrl>#^
rm:Yorn%/*ro!e8roX4Erp9XQrpg!Yrq69arqHEfrqcWkq#/D9bQ%A9rql]krqZQfrq??`rp]pUrpKdN
roa:Aro!e3rn@A$rmC_jrlG)WrkJHErjMg2riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jT
rbVRKrb;@Eral(=raPk8ra5Y4oj@K#pg=#.ra,Y6!F]F9@fBm:Ac??AC&VoID#SAPE;jkVFoHXbHiANo
K)UH&MuJb9OT(UGS,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,i;Vg:kl0lHmf)\SnG`(Zp&=^b
q>U6iqtU,^s+145s7lQlqu6Hkq>U-fpAX^`nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2
Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9hFoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4
?iFL5@fBm:Ac??AC&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UGS,T&ZUAh+jXo>U)[f3o<^])1N
aSsKadJhYpgA]n,i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtg6lrV_<IL&V2PrVHKlqu6Hkq>U-fpAX^`
nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9h
FoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?iFL5@fBm:Ac??AC&VoID#SAPE;jkVFoHXb
HiANoK)UH&MuJb9OT(UGS,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,i;Vg:kl0lHmf)\SnG`(Z
p&=^bq>U6iqtU,@s6'ESs7lQlqu6Hkq>U-fpAX^`nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE
[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9hFoHC[E;jeTD#S2KC&VcEAc?3=@KBnG!+Gk6ra>D+
pg3`&ra>_4raGe8raYq=rb)4ErbMLLrbqdTrc.p[rcnEhrdXp!re19/rf6u>rg3VRrh'1ari#guriuI2
rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjUrq-3_rqHEfrqcWkq#/D9cN!nCqu-NlrqcWirqQKc
rq-3\rp]pSrp0RGroF(;rndY.rmq(qrlkA_rkeZKrk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]j
rcA'ZrbqdQrbDFGral(>raPk7qd95+r`oG,r`\Phr`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObU
F8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"X
oD\F^q#:*gqYU3irVQSjs+148s8N#prVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]_
_Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,
>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.
]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU0jr;llqqu20HNrT+X!WDuqrVl`o
qYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3
K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BBCAr)L
DuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->O
nG`"XoD\F^q#:*gqYU3irVQSFs6]i\s8N#prVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%q
bl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i410
?2e+.>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&Lke
Xo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fr;QZlrmCbns8N#prVl`o
qu6Ejq#:$ep&=R^nG_nUm/H;LjSn0<hu;C0f)F+scMkrb`;[RO]Df;=Yl:a'W;`IhSc5)WP5^OAN;eS2
KDpB"HiA6gFT-7YDZ4JOB`;WCAH$';@/aO4?2e+.>PhS&=P['W=92N+r`T5)r`oG.ra5Y5raPk;rau.C
rbVROrc%jYrce?grdXp"reCE2rf@&ArgNhWrh07hriH+'rjVm=rkSNOrlP/brmLetrnIG0ro3q<rp'LL
rpTjUrq$-^rqHEerqZQjrquZlrr/boJcG-;rr2fnrqucmrqZQgrqHEbrq$-YrpTjQrp'LDro3q7rnIG'
rmLekrlP/XrkSNFrjVm2riH*trh07]rgNhLrf@&;reCE)rdXoorce?`rc%jSrbVRIrau.?raPk7ra5Y1
r`oG,qcWo#h,jJUr`T5)r`oG.ra5Y5raPk;rau.CrbVROrc%jYrce?grdXp"reCE2rf@&ArgNhWrh07h
riH+'rjVm=rkSNOrlP/brmLetrnIG0ro3q<rp'LLrpTjUrq$-^rqHEerqZQjrqlcpr;HWoJcCl4rr2io
!<)oprql]jrqQKerq69^rp]pUrp9XLroF(<rnm_0rmq(srm(Mbrl"fOrk&0=rilC'ri#ghrgj%Wrf[8A
rf$i2re(3"rd4WgrcJ-Yrbh^Orb2:Crac";ra>_4ra#M.r`f8&r`IuXqcNi#r`fA,ra#M1raGe8rac"?
rb2:Irbh^SrcJ-`rd4Wore(3)rf$i;rf[8Lrgj%]ri#gtrilC2rk&0Frl"fXrm(Mkrn%/(rnm_7roF(D
rp9XQrp]pYrq69brqQKgrql]mqu-NnJcG-;V>pPoqu-Nlrql]jrqQKerq69^rp]pUrp9XLroF(<rnm_0
rmq(srm(Mbrl"fOrk&0=rilC'ri#ghrgj%Wrf[8Arf$i2re(3"rd4WgrcJ-Yrbh^Orb2:Crac";ra>_4
ra#M.r`f;'!*T;'h,jJUr`T5)r`oG.ra5Y5raPk;rau.CrbVROrc%jYrce?grdXp"reCE2rf@&ArgNhW
rh07hriH+'rjVm=rkSNOrlP/brmLetrnIG0ro3q<rp'LLrpTjUrq$-^rqHEerqZQjrquZlrr1=FdJs4F
qu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<
reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc*Vs!EN8#=8l>$=oMV(
>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmgIf=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"
hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*gqu6NjrVlems+14;s8N#prVl`oqu6Ejq#:$eo`"C[n,D\QlMg#H
ir7m8hYu1,eGdenbl5Z^_>_.I\,N]4Y5YC!UAgb`RJrHMOT(4<M#Mu)J,XipG5cR^DuOYRC]8#HA,]s7
?iF@1>lIq+=oMP&=8l7t<W5t^;uTbn<W6%u=8l>$=oMV(>lJ%+?iFL5A,^0@CAr,MDuOhWG5cmgIf=ot
M#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"hYuI4ir80@lMg/Ln,DnWo`"Uaq#:*gqu6Kn
rVZWnrdk*3s8N#qr;cfqr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+
W;`OjT)P/WPl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;T\p
<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`W;`t!ZMqB5^&GkI
`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jr;6Hlrdk+:s/#bprqlZnr;QTmq>U0gp\sga
nc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/WPl?dDN;eY4Jc:/uI/\<gF8g+W
DZ4GNB`;N@@f'O3?2e+.>5h\(=T2A&<`T3$qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFM
rbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjW
rq-3arqQKgrql]mqu-NndJq_rrr2fnrqucmrqcWgrq??arpg!WrpTjOroa:Bro!e2rn7;"rm:Yhrl+lR
rkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaurrcnEbrc%jSrbVRHral(;ra>_3r`oG*r`K/$r`/qsr_reo
qbc0Gr_WYnr)3Mmr`&ksr`B)$r`T5*ra#M2raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&Brg*PUrhKIi
riZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.Crp'LOrp]pWrq69arqHEgrql]mrr)`nW;hGKnGiLequ-Nl
rql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUknrltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$
rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!r`&kqr_iVjh,+)JqbmDlr`&ksr`B)$r`T5*ra#M2
raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&Brg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.C
rp'LOrp]pWrq69arqHEgrqc]n!W;lprVQSFs-NcbrqlWpr;6Qmrql]krqHEcrq69\rp]pUrp'LGroO.;
rnRM+rmUknrltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/
r`T5&r`B)!r`&kqr_iVjh,+)JqbmDlr`&ksr`B)$r`T5*ra#M2raGe:rb)4Hrbh^SrcS3crdFcrre:?.
rf@&Brg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.Crp'LOrp]pWrq69arqHEgrql]mrr)`n
JcG6>W;lkrqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUknrltG]rkeZKrjMg3riZ6trhBCa
rg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!r`&kqr_`bo;>jAJ;#X>h;Z9Vo
<;ons=8l>$=oM\*?2e72@K'g:BDu`HDZ4VSFoH[cIK"crL&Qr.O8b@BQN!NUU]..iY5Ya+[f4#?_>_FQ
c2Q)he,J&"h>Z@3jo4KClMg8OnG_tWp&=[ap\t$gqu6NmrVQTDs4%)JrqlZnqu6Hkq>U-fpAX^`nc&"V
m/H5Jk5OE?hu;C0f`':tcMkuc_Z%:K]Df/9YPtR$UAgb`Rf8NMOT(4<K`6Q%If=TkFoHC[DZ4GNB`;QA
@K'X5>Q.h*=oMM%<rQ+u;uT\o;>sDh:\@KX:%D'Y:B45h;#X>k;Z9Vo<W6%u=8lA%>5hb*?iFO6AH$9A
CAr,MEW1+[GlE0kJc:?%N;en;PQ%$MT)PJ`WrB1#Zi7T9^])+Lb5TZbdJhetg]$+0j8S3?kl0rJmf)bU
o`"O_p\t!fqYpBkrVQSms+14>s8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)dJhGjb5T9W
^AbbDZi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"<W5qr;Z9Pm
;#=&]:A@QS:B"&d;#X>k;Z9Vo<W6%u=8lA%>5hb*?iFO6AH$9ACAr,MEW1+[GlE0kJc:?%N;en;PQ%$M
T)PJ`WrB1#Zi7T9^])+Lb5TZbdJhetg]$+0j8S3?kl0rJmf)bUo`"O_p\t!fq>gBnqtpBkqu20HQiI'a
qu$QmqZ-NmqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)dJhGjb5T9W^AbbDZi70-WrAalT)P2XPQ$[C
N;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"<W5qr;Z9Pm;#=&]:A@QS:B"&d;#X>k;Z9Vo
<W6%u=8lA%>5hb*?iFO6AH$9ACAr,MEW1+[GlE0kJc:?%N;en;PQ%$MT)PJ`WrB1#Zi7T9^])+Lb5TZb
dJhetg]$+0j8S3?kl0rJmf)bUo`"O_p\t!fqYpBkrVQSFs7$&es8N#prVl]nqYp<ip\smco`"C[n,D\Q
kl0`Dj8Rs8g]#k)dJhGjb5T9W^AbbDZi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:
?iF:/>5h\(=8l8"<W5qr;Z9Pm:]X?frD3)]peC<Sr_NDfr_`Ymr_rerr`9#"r`T5(r`fA/raPk;rb2:G
rbh^TrcS3brdOitre190rf@&BrgNhXrhBClriZ7,rk&0ErkeZWrltGirn.5)rnm_8roX4Drp9XPrpg![
rq69brqZQirql]nqu5+FeGoOIqu-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>
rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>boh>-R
nkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&
rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu3PoJcG6>rr2fnrql]krqZQf
rq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wdrc.pU
rbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2dqb?`Wpe10Or_<8bqbR)cr_reqr`B)$r`T5+ra5Y4raYq?
rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pX
rq69brqZQi!;cfoqu6Qkrdk*9s8N#pr;lfm!;lclrqZQfrq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^
rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2d
qb?`Wpe10Or_<8bqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07f
ri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu20HnGfHerr2fnrql]k
rqZQfrq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wd
rc.pUrbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2d!DQ;e:%_3T9CbdU:&@]_:]!uf;uTbq=8l>$=oM_+
?iFI4A,^-?CAr/NErL1[HiAKnJGtB(MuJh;QN!BQT`1hfX8]@&\,O#=_#DCRbPolfec+8$h>Z@3jSn?A
li-;NnG`"Xp&=^bq>U6iqu6Qkrm^tts82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS
]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT
8af4C8H;B\9)D<]:&[rc;#XAl;uTer=T2M'?2e41@fBp;C&VrJE;jtYH2`6kJc:E'N;eq<Q2[6OT`1hf
XT#L([f3o<_>_IRbl6#hec+;%hu;X7jSnECm/-;OoD\F^p\t!fqYU3irM]aIs7$'crVl`oqYp9hp\sjb
oDA%Vm/H8KjSn0<hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB
@fBa6?2e%,=T2>"<;oep;#=&c:&[ic9(GRB8G,RO9)D<]:&[rc;#XAl;uTer=T2M'?2e41@fBp;C&VrJ
E;jtYH2`6kJc:E'N;eq<Q2[6OT`1hfXT#L([f3o<_>_IRbl6#hec+;%hu;X7jSnECm/-;OoD\F^p\ssg
q>pHhqu$HlJcD):qu-Nl!W)WmqYp9hp\sjboDA%Vm/H8KjSn0<hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*r
T`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB@fBa6?2e%,=T2>"<;oep;#=&c:&[ic9(GRB8G,RO9)D<]
:&[rc;#XAl;uTer=T2M'?2e41@fBp;C&VrJE;jtYH2`6kJc:E'N;eq<Q2[6OT`1hfXT#L([f3o<_>_IR
bl6#hec+;%hu;X7jSnECm/-;OoD\F^p\t!fqYU3irIP"<s/>tprVl`oqYp9hp\sjboDA%Vm/H8KjSn0<
hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB@fBa6?2e%,=T2>"
<;oep;#=&c:&[ic8c_LToL\LBoh#$Qqb6u`r_NDfr_i_or`/r"r`];,ra5Y6rac"BrbVRQrcJ-brdFcs
reCE2rfI,ErgNhZrhf[rriuI2rk&0Grl4r]rmC_qrn@A/ro3q<rosFKqsaUVrq69brqZQiqu$HleGn%u
rr)iorql]jrqQKerq69^rp]pSrp'LHro=":rndY+rm^qnrlY5YrkJHArj2U-rhoajrh'1Urf[8@reLK*
rdXolrcS3[rbVRJrb)4=ra5Y1r`T5%r`/qrr_iVhr_<Acpe(!Gmmm"@r(-TTr_3;cqbR2gr_rerr`B)%
ra#M1raGe=rb;@Jrc.p[rcnElre(3*rf6u@rg*PUrhKIjric=-rjVmArl"fYrm1Smrn%/+ro!e9roj@H
rpB^Srq$-^rqHEerqZQjrqucoW;hGKnGiLdrqucmrqZQgrqHEbrq$-YrpB^Mroj@Aro*k5rn%/!rm1Sd
rl"fNrjVm5ric=!rhKIbrg*PHrf6u5re(3"rcnEbrc.pRrb;@EraGe5ra#M+r`B)!r_reoqbR2cr_3)Z
mmun;mn!4Gr_3;cqbR2gr_rerr`B)%ra#M1raGe=rb;@Jrc.p[rcnElre(3*rf6u@rg*PUrhKIjric=-
rjVmArl"fYrm1Smrn%/+ro!e9roj@HrpB^Srq$-^rqHEe!;QZkq>U9jr;QYGs-NcbrVl`oqZ6Ng!;ZWh
rqHEbrq$-YrpB^Mroj@Aro*k5rn%/!rm1Sdrl"fNrjVm5ric=!rhKIbrg*PHrf6u5re(3"rcnEbrc.pR
rb;@EraGe5ra#M+r`B)!r_reoqbR2cr_3)Zmmun;mn!4Gr_3;cqbR2gr_rerr`B)%ra#M1raGe=rb;@J
rc.p[rcnElre(3*rf6u@rg*PUrhKIjric=-rjVmArl"fYrm1Smrn%/+ro!e9roj@HrpB^Srq$-^rqHEe
rqZQjrqucoJcG6>W;lkqrqucmrqZQgrqHEbrq$-YrpB^Mroj@Aro*k5rn%/!rm1Sdrl"fNrjVm5ric=!
rhKIbrg*PHrf6u5re(3"rcnEbrc.pRrb;@EraGe5ra#M+r`B)!r_reoqbR2cr_3)Zr(-HNmmlh;pe(NZ
r_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRRrcS3brdXp"reLK5rf[8Hrh'1brhob!rj2U5rkJHNrlY5d
rmUkurndY4ro="Arp'LMrp]pYrq69brqQKgrql]mrr(@HfDkjLrr)iorql]jrqQKerq-3[rpTjProsFF
ro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tNrf6u9re(3#rd=]frc8!Vrb;@DraPk6r`oG+r`9"t
r_`Ykr_NMgr_32^pdt?Qej][07fGpQ8cDB[9`%Ta;#X>k<;oqt>5he+?iFO6B)ZNDDuOeVFoHdfJ,Y*"
MuJe:P5_!NTDkVbXo>U)[Jml=_Z%RScMl5jec+A'hYuL5kPj`Fli-APo)A:\p\sseq>U9jr;QZlriZ9P
s7?9irr2lqr;QTmq>U0gp\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\P5^L@
MuJA.JGsrqFoHF\DuOJMB)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*U8(:$-8,,[T9D_E[:B")h;>sPo
<rQ;%>lJ+0@fC!=C&W&MErL4\I/\WpKDpf.O8b=ASGo/[U].CpZ2V01^&GnJ`r=9_dJh\qh#?10iVr$>
l2L#Jn,DnWo`"Uap]1*jq>($erqucoqu20HT`>#jrr)iorqc`lq#L6iq#:$eo`"C[n,DYPl2KlFiVqa6
h#>k'df.Pk`r<gR^&GG=Z2Um)U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk
:]=,g9`%KX8c)$-7fGpQ8cDB[9`%Ta;#X>k<;oqt>5he+?iFO6B)ZNDDuOeVFoHdfJ,Y*"MuJe:P5_!N
TDkVbXo>U)[Jml=_Z%RScMl5jec+A'hYuL5kPj`Fli-APo)A:\p\sseq>U9jr;QZlrdk+Cs/Z2!rr2lq
r;QTmq>U0gp\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\P5^L@MuJA.JGsrq
FoHF\DuOJMB)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*V7fZ'/7fGpQ8cDB[9`%Ta;#X>k<;oqt>5he+
?iFO6B)ZNDDuOeVFoHdfJ,Y*"MuJe:P5_!NTDkVbXo>U)[Jml=_Z%RScMl5jec+A'hYuL5kPj`Fli-AP
o)A:\p\sseq>U9jr;QZlrn@D(s8N#srVl`oqYp9hpAXaao)A.Xn,DSNkPjQAi;VO2f`':tcMkuc_Z%7J
\c/i4X8]$rT`1G[Q2ZjDM>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#;Z9Pj:]=&e9D_<[8GbpV7efFI
7.3M<7/]RP7JfRR8,GjV8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFDS,T)[
VuEdsYl;34^Ac"Kb5TZbdJheth#?72jSn<@l2L/Nnc&+Yp&=^bq#:-hqu6QkriZ9Ps7?9irr2lqr;QQl
q#:!dp&=O]nG_nUl2KlFjSn*:h#>t*dJhGjb5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3fE;j_R
CAqcC@K'X5>5hY'<rQ"r;>X/g9`@]^8cD9X8,c!Q7JK:>6hj(E7JfRR8,GjV8cDB^:&@`c;>sJm<rQ5#
>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZbdJheth#?72jSn<@l2L/N
nc&+Yp&=[cp]:0brqcWkrr)`nJcDDCrr2oqrqucl!VlEiq#:!dp&=O]nG_nUl2KlFjSn*:h#>t*dJhGj
b5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3fE;j_RCAqcC@K'X5>5hY'<rQ"r;>X/g9`@]^8cD9X
8,c!Q7JK:>6hj(E7JfRR8,GjV8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFD
S,T)[VuEdsYl;34^Ac"Kb5TZbdJheth#?72jSn<@l2L/Nnc&+Yp&=^bq#:-hqu6Qkrdk+Cs/Z2!rr2lq
r;QQlq#:!dp&=O]nG_nUl2KlFjSn*:h#>t*dJhGjb5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3f
E;j_RCAqcC@K'X5>5hY'<rQ"r;>X/g9`@]^8cD9X8,c!U7K#[M7.3M<7/04J7fGpT8H)3[9E%Z_:]=5j
;Z9_r=T2M'?iFO6AH$?CD>nMRG5cgeJGt6$MZ/\9Q2[9PT`1kgXT#I'\c0>B_Z%^Wc2Q,if`'\*i;Vg:
k5OWEn,DkVo)A=]p\sseqYpBkrVQTJs4[MPrqlZnr;QQlp\smcp&=L\n,D_Rkl0]Cir7j7gA]\&d/M5f
`r<dQ]Df8<Y5YF"V#HqaQi<0IN;eV3K)U/sGQ)X^DZ4DMBDu?=?iF=0=T2A#<;o_n:]=,g9`@]a9)_BY
8,c!T7JK:,6iBFN7/fXP7fGpT8H)6\9E%Wa:B"&g;#XGn<rQ5#>lJ(/@K'p=CAr,MErL:^I/\`sL]383
P5^jJSc5GaWW'("[f3o<_#D@Qbl5ugf)FD&hu;X7k5OTDmJcSRnc&4\pAXgcqYpBhrVlf!s+14Ds8N#p
rVl`oqYp6gpAXaanc&"VmJc>Kjo49=hu;@/f)F%qbPoN\_#CtF[f3H/WW&^mSc4uTP5^F>L]2o)I/\?h
ErKtUCAqlF@K'X5>lIk)<rQ(t;#X8i:B!rd9E%Q_8GbpV7f,XL7,:6*7/fXP7fGpT8H)6\9E%Wa:B"&g
;#XGn<rQ5#>lJ(/@K'p=CAr,MErL:^I/\`sL]383P5^jJSc5GaWW'("[f3o<_#D@Qbl5ugf)FD&hu;X7
k5OTDmJcSRnc&4\p&Ogfp\4[`rqlTkrr.KKU]:>mqu-NlrqZZipAjsepAXaanc&"VmJc>Kjo49=hu;@/
f)F%qbPoN\_#CtF[f3H/WW&^mSc4uTP5^F>L]2o)I/\?hErKtUCAqlF@K'X5>lIk)<rQ(t;#X8i:B!rd
9E%Q_8GbpV7f,XL7,:6*7/fXP7fGpT8H)6\9E%Wa:B"&g;#XGn<rQ5#>lJ(/@K'p=CAr,MErL:^I/\`s
L]383P5^jJSc5GaWW'("[f3o<_#D@Qbl5ugf)FD&hu;X7k5OTDmJcSRnc&4\pAXgcqYpBhrVleIs7ZJq
s8N#prVl`oqYp6gpAXaanc&"VmJc>Kjo49=hu;@/f)F%qbPoN\_#CtF[f3H/WW&^mSc4uTP5^F>L]2o)
I/\?hErKtUCAqlF@K'X5>lIk)<rQ(t;#X8i:B!rd9E%Q_8GbpV7f,XP7/]O06hj(K7JfRR8,GjV9)_K_
9`@fd:]=2i<;oqt=T2S)?N+C4BDuZFDZ4\UGQ*!hK)UQ)N;f">R/WZUV#I@mY5Ym/]DfVF`r=3]d/MVq
gA^"/ir8*>kl0uKn,DkVp&=[ap\t$gqtp?krn@D+s8N#srVl`oqu6Hkp\smco`"@Zmf)SPkPjQAi;VR3
f`'D"ci2&c`;[LM\c/r7XT#*rT`1DZPl?aCM#N&+J,X]lFT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h9`@Z]
8c)$W7f,XR7*n=!6i0:N7JfRR8,c*W9)_N`:&@cd<;oqt>5he+@/a[8BDu]GDuOkXGlE3lK`6f,O8bCC
Rf8uZVZ*[rZi7K6^Ac(Mb5T`deGe/#h>Z@3jSn?Am/HGPnG`(Zp&=^bqYpBkr;QZoriZ9Ps7ZKlrr2lq
r;QTmqYp6gpAX^`nG_kTm/H2IjSn*:h>Z(+eGdenao96X^Ab\BZi7'*VZ*7fRf8QNO8at7KDpB"GlDga
DuOPOBDuE?@/aI2>5hS%;u9Dj:B!rd9)D3W8,c!T7K,]u6i0:N7JfRR8,c*W9)_N`:&@cd<;oqt>5he+
@/a[8BDu]GDuOkXGlE3lK`6f,O8bCCRf8uZVZ*[rZi7K6^Ac(Mb5T`deGe/#h>Z@3jSn?Am/HGPnG`(Z
o`4^ep\4[`rql]mrr)iqJcDMFrr2oqrqucmrqZZipAjsepAX^`nG_kTm/H2IjSn*:h>Z(+eGdenao96X
^Ab\BZi7'*VZ*7fRf8QNO8at7KDpB"GlDgaDuOPOBDuE?@/aI2>5hS%;u9Dj:B!rd9)D3W8,c!T7K,]u
6i0:N7JfRR8,c*W9)_N`:&@cd<;oqt>5he+@/a[8BDu]GDuOkXGlE3lK`6f,O8bCCRf8uZVZ*[rZi7K6
^Ac(Mb5T`deGe/#h>Z@3jSn?Am/HGPnG`(Zp&=^bqYpBkr;QZordk+Cs/uD$rr2lqr;QTmqYp6gpAX^`
nG_kTm/H2IjSn*:h>Z(+eGdenao96X^Ab\BZi7'*VZ*7fRf8QNO8at7KDpB"GlDgaDuOPOBDuE?@/aI2
>5hS%;u9Dj:B!rd9)D3W8,c!T7K,^Q6dS3t7/fXP7fGpW8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88O
FT-OaJ,Y-#M#NJ7Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,i;Vg:kPjiImf)_To`"O_p\t$gqu6Nm
rVlfMs5!_SrqlZnqu6Hkq>U*eo`"F\nG_hSlMfoEj8Rs8gA]\&dJh>g`r<gR])K,:YPtI!UAgb`Pl?dD
N;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*<rQ"r;>sAj:&[ca8cD9[8,GdT7K,^D6et*-6h<\E7/fXP7fGpW
8H)3[9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoog
ec+;%hu;X7jo4QEm/HMRo)A=]pAXmeqYpBkrVQT!s+14Gs8N#prVl]nqYp<ipAX^`o)A.XmJcDMjo4<>
hu;@/f)F(rbPoN\_>_%F[JmB/VuEFiT)OuROT(4<KDpE#I/\3dEW0kTB)Z<>@/aF1=oMJ$;Z9Pm:]=)f
9)_E]8H)-V7fGjU7.3M!6LR;@7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]IE;jqXI/\Wp
KDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMRo)A:^p&Xm\rqZQirql]nqu20H
WW2tsqu-NkrqcWi!VZ3epAX^`o)A.XmJcDMjo4<>hu;@/f)F(rbPoN\_>_%F[JmB/VuEFiT)OuROT(4<
KDpE#I/\3dEW0kTB)Z<>@/aF1=oMJ$;Z9Pm:]=)f9)_E]8H)-V7fGjU7.3M!6LR;@7/fXP7fGpW8H)3[
9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoogec+;%
hu;X7jo4QEm/HMRo)A=]pAXmeqYpBkrVQSFs7u]"s8N#prVl]nqYp<ipAX^`o)A.XmJcDMjo4<>hu;@/
f)F(rbPoN\_>_%F[JmB/VuEFiT)OuROT(4<KDpE#I/\3dEW0kTB)Z<>@/aF1=oMJ$;Z9Pm:]=)f9)_E]
8H)-V7fGjU7.WeE6et)t6iKLQ7JfRR8,c'Y8cDB^:&[rf;>sJm<rQ5#>lJ.1AH$3?DZ4VSF8gRdJ,Y*"
N;eq<Pl@9RUAh(iYPtp.])KPF`r=0\dJh\qgA^"/ir8'=lMg/LnG`"Xp&=[aq>U6iqu6Qkrn[V1s8N#p
rVl]nqYp<ip&=U_nc%tUli-/JjSn-;hYu1,eGdenao96X^](bBZMq!*U]-nbS,STMNW+e6Jc:)sH2_j`
DZ4GNAH$$:?iF7.=8l1u;#X8i:B!oc9)_E]8,c!T7K,^A6et*-6h!JB7/KFP7fGpW8cD?]9E%]c:]=2i
<;otu>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B`;[mXci2Gnf`'b,iVqp;l2L#J
mf)bUoD\F^q>U6iqu6QkriuKSs7u]orqlZnqu6Hkq>U'do`"C[mf)POl2KcCiVq^5f`'D"ci2&c`;[ON
\Gif5Xo>*pTDk>ZP5^I?M>i)*IK"NkErKtUC]7lD@K'X5>5hV&<;o_n:]=,g9E%Q_8cD6Z7f,XR7-m:s
6L7)=7/KFP7fGpW8cD?]9E%]c:]=2i<;otu>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*
\Gj8B`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bUo)SFap%A=[rqcWkrr)`nJcD_Lrr2fnrql]krqQTfo`4[a
o`"C[mf)POl2KcCiVq^5f`'D"ci2&c`;[ON\Gif5Xo>*pTDk>ZP5^I?M>i)*IK"NkErKtUC]7lD@K'X5
>5hV&<;o_n:]=,g9E%Q_8cD6Z7f,XR7-m:s6L7)=7/KFP7fGpW8cD?]9E%]c:]=2i<;otu>5hn.@fBp;
C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bUoD\F^q>U6i
qu6Qkrdk+Fs0;V'rqlZnqu6Hkq>U'do`"C[mf)POl2KcCiVq^5f`'D"ci2&c`;[ON\Gif5Xo>*pTDk>Z
P5^I?M>i)*IK"NkErKtUC]7lD@K'X5>5hV&<;o_n:]=,g9E%Q_8cD6Z7f,XR7.<SB6et)q6iKLN7K,dU
8,c*Z9)_K_:B"&g;#XGn=8lD&?iFO6AH$BDDuOeVH2`6kJc:N*NrG4@S,T&ZU].CpZMqB5^])1Nao9Wc
eGe,"hYuL5jSnECli->Onc&.Zp&=ddqYpBkrVQTMs5!_SrqlZnqYp<iq#9scoD\7Ymf)POkl0WAi;VO2
f)F+scMkl`_u@CL[JmE0X8\dkSGnoTOT(1;LAl]%HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml:B!rd9)_E]
8H)*U7K,^G6dS0t6M3_C7/fXP7fGsX8cD?]9`@cc;#XAl<rQ5#?2e41@K's>C]8;PFoH^dJ,Y3%MuJh;
R/WZUT`2"kYl;'0^Ac"Ka8XB`df.hsh#?41j8S9AlMg5NnG`%Yp&=acq>U6irVQT!s+14Gs8N#prVlZm
q>U0gp&=R^nG_kTli-,Ij8S!9h#>n(df.Pka8X!U^AbP>Yl:^&T`1J\R/W3HMuJJ1J,XcnFoH@ZD#S,I
@K'X5?2dt*<W5nq;#X5h9`@Z`8cD9[7f,XR7.N^g6M3_C7/fXP7fGsX8cD?]9`@cc;#XAl<rQ5#?2e41
@K's>C]8;PFoH^dJ,Y3%MuJh;R/WZUT`2"kYl;'0^Ac"Ka8XB`df.hsh#?41j8S9AlMg5NnG`"Zo`=aY
rqQKgrqcWmqu20HWW2tsqu-NjrqZQg!VQ*cp&=R^nG_kTli-,Ij8S!9h#>n(df.Pka8X!U^AbP>Yl:^&
T`1J\R/W3HMuJJ1J,XcnFoH@ZD#S,I@K'X5?2dt*<W5nq;#X5h9`@Z`8cD9[7f,XR7.N^g6M3_C7/fXP
7fGsX8cD?]9`@cc;#XAl<rQ5#?2e41@K's>C]8;PFoH^dJ,Y3%MuJh;R/WZUT`2"kYl;'0^Ac"Ka8XB`
df.hsh#?41j8S9AlMg5NnG`%Yp&=acq>U6irVQSFs7u]"s8N#prVlZmq>U0gp&=R^nG_kTli-,Ij8S!9
h#>n(df.Pka8X!U^AbP>Yl:^&T`1J\R/W3HMuJJ1J,XcnFoH@ZD#S,I@K'X5?2dt*<W5nq;#X5h9`@Z`
8cD9[7f,XR7.N_C6I8'l6i0:N7JfRR8H)3[9)_N`:&[ug;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1
OT(XHSc5;]X8]@&[Jmo>_Z%UTcMl8kf)FJ(hu;[8kl0lHmf)_ToD\F^q#:*gqYpHjrn[V1s8N#prVlZm
q#:$eo`"F\n,D\Ql2KlFiVq^5gA]S#ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(HiA3fEW0hSB`;QA
@/aF1=oMG#;uTSl:B!rd9)_B\8,c!T7K,^G6d7sk6M3_C7/fXS7fGpW8H)6\9E%]c:]=8k<W6/#?2e72
AH$9AD>nPSG5cjfJc:H(NW,.@RJriXVZ*[rYl;65^Ac%LbPoiee,J)#h>ZC4kPj`Fm/HJQo)A:\p\t!f
qYpHjriuKSs7u]orqlZnqYp9hp\sgao)A+Wm/H8KkPjH>hYu7.e,I\mbPoEY^](hDYl:^&VZ*4eRJrEL
NW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr:]=,g9`@Z`8H)-Y7f,XR7.N^^6M3_C7/fXS7fGpW8H)6\
9E%]c:]=8k<W6/#?2e72AH$9AD>nPSG5cjfJc:H(NW,.@RJriXVZ*[rYl;65^Ac%LbPoiee,J)#h>ZC4
kPj`Fm/HJQnc8:_o^r.WrqZQirr)`nJcD_Lrr2fnrqcWhrq?HcoDnO_o)A+Wm/H8KkPjH>hYu7.e,I\m
bPoEY^](hDYl:^&VZ*4eRJrELNW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr:]=,g9`@Z`8H)-Y7f,XR
7.N^^6M3_C7/fXS7fGpW8H)6\9E%]c:]=8k<W6/#?2e72AH$9AD>nPSG5cjfJc:H(NW,.@RJriXVZ*[r
Yl;65^Ac%LbPoiee,J)#h>ZC4kPj`Fm/HJQo)A:\p\t!fqYpHjrdk+Fs0;V'rqlZnqYp9hp\sgao)A+W
m/H8KkPjH>hYu7.e,I\mbPoEY^](hDYl:^&VZ*4eRJrELNW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr
:]=,g9`@Z`8H)-Y7f,XR7.N_@6HVXf6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\
HiATqL]3;4PQ%!LTDk_eXT#I'])KGC_u@jYci2DmgA]q-iVr$>l2L&Kn,DnWo`"Uaq>U6irVQTMs5!_M
rVlZmq#:$eoD\:Zn,DYPl2KiEi;VO2g&BG!cMkuc_Z%7J\,NT1WW&^mSGnlSOoC7;L&QT$H2_pbDuOPO
B)Z6<?N+1.=T2;!;>sAj9`@Z`8cD6Z7f,XR7.3Lf6M<b:6iKLN7K,dU8,c*Z9E%Wa:]=8k<;p#!>5hk-
@K'm<C]88OFT-RbJ,Y-#MZ/b;QN!ERV#ICnYPu$1^&GnJb5T]cdf.r!h>Z@3k5OTDli-APnc&.Zp\t!f
qY:#os+14Gs7lQlqYp9hp\sd`nc&"Vli-/Jk5O<<h#?"+df.Pkb5T9W^&GM?YPtO#V#Hn`Qi<-HMZ/>/
J,X`mFT-4XC]7rF@K'U4>Q.b(<;obo:]=&e9)_E]8,c!T7K,^D6c)1\6iKLN7K,dU8,c*Z9E%Wa:]=8k
<;p#!>5hk-@K'm<C]88OFT-RbJ,Y-#MZ/b;QN!ERV#ICnYPu$1^&GnJb5T]cdf.r!h>Z@3k5OTDli-AP
nGr.]oCMtUrqZQiq#,dDWW2blrqcWhrq?Hbo)SC]nc&"Vli-/Jk5O<<h#?"+df.Pkb5T9W^&GM?YPtO#
V#Hn`Qi<-HMZ/>/J,X`mFT-4XC]7rF@K'U4>Q.b(<;obo:]=&e9)_E]8,c!T7K,^D6c)1\6iKLN7K,dU
8,c*Z9E%Wa:]=8k<;p#!>5hk-@K'm<C]88OFT-RbJ,Y-#MZ/b;QN!ERV#ICnYPu$1^&GnJb5T]cdf.r!
h>Z@3k5OTDli-APnc&.Zp\t!fqY:#?s7u]"s7lQlqYp9hp\sd`nc&"Vli-/Jk5O<<h#?"+df.Pkb5T9W
^&GM?YPtO#V#Hn`Qi<-HMZ/>/J,X`mFT-4XC]7rF@K'U4>Q.b(<;obo:]=&e9)_E]8,c!T7K,^D6hs'k
6LmMC7/KFP7fGpW8cDB^9`@ie;Z9Yp=T2M'?N+C4B)ZTFDuOkXH2`<mK`6l.OoC[GSGo>`WrB4$\,O)?
_Z%^WcMl8kg&Bh,i;Vm<kl0oIn,DkVoD\L`q>U6crS@M0s82cor;QQlq#:$eoD\:Zn,DVOkPjQAi;VO2
fDa.rbl5]__#CtF[Jm?.W;`LiRf8QNO8aq6KDp?!G5cO]DuOGLAH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V
7K,^G6cVOb6M3_C7/fXP7fH!Y9)_K_:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&Lth
Y5Yj.])KMEaSsE_d/MYrg]$.1jSnBBlMg8Onc&.Zp\t!fqYU3irNZBRs7u]lrVl`oqYp9hp\sd`nc&"V
lMfuGjSn*:h#>q)d/M8gaSs!S]Df5;Y5YC!U&LM[Pl?aCL]2r*If=NiErL"VB`;QA?iF=0=oMM%;Z9Ml
:B!oc9)_E]7f,XR7.N^U6M3_C7/fXP7fH!Y9)_K_:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6
Pl@-NU&LthY5Yj.])KMEaSsE_d/MYrg]$.1jSnBBlMg8OnGr.]oCMtUrqZQiqu$HlJcD_Lqu-NlrqcWh
rq?Hbo)SC]nc&"VlMfuGjSn*:h#>q)d/M8gaSs!S]Df5;Y5YC!U&LM[Pl?aCL]2r*If=NiErL"VB`;QA
?iF=0=oMM%;Z9Ml:B!oc9)_E]7f,XR7.N^U6M3_C7/fXP7fH!Y9)_K_:B")h;Z9bs=oM\*?iFU8B`;rL
F8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYrg]$.1jSnBBlMg8Onc&.Zp\t!fqYU3irIP"E
s0;V$rVl`oqYp9hp\sd`nc&"VlMfuGjSn*:h#>q)d/M8gaSs!S]Df5;Y5YC!U&LM[Pl?aCL]2r*If=Ni
ErL"VB`;QA?iF=0=oMM%;Z9Ml:B!oc9)_E]7f,XR7.N_:6H;Fc6i0:N7JfRR8cD?]9E%]c;#XAl=8lA%
>lJ+0AH$9ADuOhWG5csiK)UQ)O8bCCRf9#[VuEju[Jmc:_#DFSbl5ugfDaP(i;Vg:kl0lHn,DkVoD\L`
q>U6fr;QZNs5!_SrVl`oqu6Ejq#:!do)A.Xmf)GLjo49=hYu7.ec*qpbPoK[^](bBZMpp(V>d+dQi<0I
NrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[8,c!W7K,^G6c;=Y6M3_F7/fXS7fGpW8H)3[
9`@fd;#XGn<rQ8$?iFO6Ac?NFDuOhWHiAQpK`7#2P5^gITDk\dX8]F(\c0AC`W"$Zd/MSpg&Bk-ir8*>
kl1#LnG`"XpAXgcq>U9jr;QZ"s+14Gs8Murr;QTmq>U0gpAXX^nG_kTkl0]Cir7g6gA]Y%d/M5f`W!XO
\Gif5X8\spTDk2VP5^L@K`6K#HiA*cE;j\QAc?0<?iF4-=8l1u;#X5h9`@W_8H)-Y7fGjU7.N^L6M3_F
7/fXS7fGpW8H)3[9`@fd;#XGn<rQ8$?iFO6Ac?NFDuOhWHiAQpK`7#2P5^gITDk\dX8]F(\c0AC`W"$Z
d/MSpg&Bk-ir8*>kl1#Ln,W"[o()eRrqHEfrql]mrr%EJWW2trrqucmrqZQgrq6B`nc87[nG_kTkl0]C
ir7g6gA]Y%d/M5f`W!XO\Gif5X8\spTDk2VP5^L@K`6K#HiA*cE;j\QAc?0<?iF4-=8l1u;#X5h9`@W_
8H)-Y7fGjU7.N^L6M3_F7/fXS7fGpW8H)3[9`@fd;#XGn<rQ8$?iFO6Ac?NFDuOhWHiAQpK`7#2P5^gI
TDk\dX8]F(\c0AC`W"$Zd/MSpg&Bk-ir8*>kl1#LnG`"XpAXgcq>U9jr;QYGs7u]"s8Murr;QTmq>U0g
pAXX^nG_kTkl0]Cir7g6gA]Y%d/M5f`W!XO\Gif5X8\spTDk2VP5^L@K`6K#HiA*cE;j\QAc?0<?iF4-
=8l1u;#X5h9`@W_8H)-Y7fGjU7.N_76GZ"]6iKLQ7K,dU8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAP
F8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4Ob5Tceec+8$hYuO6k5OTDmf)_To)A@^p\t!fqu6NmrS@M0
s8Murr;QTmq>U-fp&=L\n,D_Rkl0]Cir7d5f`'D"cMkrb`;[IL\,NZ3WW&[lT)OuRO8b(:K)U5uHN%sa
DZ4DMAH$!9?2dt*<W5nq;#X2g9E%N^8H)-Y7K,^D6c;=Y6LmMC7/fXS8,c'Y8cDB^:&[ug;Z9_r=T2V*
@K'g:CAr,MErLCaIf=ruMuJh;Pl@9RU].7lZ2V63^&GtLao9TbeGe/#h>ZF5k5OTDmJcSRnc&4\p\t!f
qu6NmrNZBRs7u]orVl`oqu6Ejp\sjbnc&"VmJc>Kjo49=h>Z(+eGdbmao96X^&GM?Z2Ua%U]-kaPl?aC
MuJ>-If=ZmErKtUCAqcC@/aI2=T2>";Z9Ml:&[fb8cD9[8,bsV7.3LI6LmMC7/fXS8,c'Y8cDB^:&[ug
;Z9_r=T2V*@K'g:CAr,MErLCaIf=ruMuJh;Pl@9RU].7lZ2V63^&GtLao9TbeGe/#h>ZF5k5OTDmJcPS
nH&1Mrq69brqZQjrqucoJcD_Lrr)iorql]jrqHEb!V,[[nc&"VmJc>Kjo49=h>Z(+eGdbmao96X^&GM?
Z2Ua%U]-kaPl?aCMuJ>-If=ZmErKtUCAqcC@/aI2=T2>";Z9Ml:&[fb8cD9[8,bsV7.3LI6LmMC7/fXS
8,c'Y8cDB^:&[ug;Z9_r=T2V*@K'g:CAr,MErLCaIf=ruMuJh;Pl@9RU].7lZ2V63^&GtLao9TbeGe/#
h>ZF5k5OTDmJcSRnc&4\p\t!fqu6NmrIP"Es0;V'rVl`oqu6Ejp\sjbnc&"VmJc>Kjo49=h>Z(+eGdbm
ao96X^&GM?Z2Ua%U]-kaPl?aCMuJ>-If=ZmErKtUCAqcC@/aI2=T2>";Z9Ml:&[fb8cD9[8,bsV7.3M4
6GZ"Z6iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#?2e:3AH$?CDZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?
`;[mXcMl>mg&Bh,ir8*>kl0uKn,DkVp&=^bq>U9jr;QZNs5!_SrVl`oqu6BipAXaanc&"VmJc>Kjo46<
h#>t*e,IVkaSs*V]`,><YPtI!UAg\^PQ$UAM>i&)I/\?hE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb8H)-Y
7fGjU7.ip]6L$o16iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!hJGtE)NrG7ASGo5]
VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKn,DkVp&=^bq#:0ir;QZ"s+14Gs8Murr;QTmq#:!dp&=L\
n,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrqGQ)R\D#S/J@fBa6>lIh(<W5kp
;#X2g9E%K]8,c!W7K,^J6`39D6iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!hJGtE)
NrG7ASGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKmf;kYnaZVOrqHEerql]mrr%EJWW2trrqucm
rqQKdrq-<^nGr+Yn,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrqGQ)R\D#S/J
@fBa6>lIh(<W5kp;#X2g9E%K]8,c!W7K,^J6`39D6iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@
D#SDQGQ*!hJGtE)NrG7ASGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKn,DkVp&=^bq#:0ir;QYG
s7u]"s8Murr;QTmq#:!dp&=L\n,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrq
GQ)R\D#S/J@fBa6>lIh(<W5kp;#X2g9E%K]8,c!W7K,^J6g@"P6M3_F7/fXS7fGpW8H)9]:&[ug;>sPo
=8lJ(?iFO6C&VrJE;k(\I/\ZqM>iP7PQ%*OU&LthYPts/]`,hJaSsH`e,Ituh#?:3jo4KCmJcSRnc&4\
p\ssequ6NmrS@M3s8N#srVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8gA]\&dJh>g`r<gR\c/r7YPt?sT)P/W
OT(1;LAl`&HN&$cDuOMNBDu<<?2e%,<W5qr;#X5h9E%N[8,c!W7.iq*6N0:85lO(G6KCK16i0:K7fGpW
8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<RJriXV#IRs[/RW8_>_IRbPoogec+;%hu;[8
k5O]Gmf)_To`"O_p\t$gqu6QkrjVoYs8;orrr2lqr;QQlp\smco`"@ZmJcGNk5OE?hu;@/f)F(rbPoN\
_>_"EZi70-V#HtbRJr<IMuJJ1JGsloFT-4XCAqlF@/aI2>5hP$;uTVm:B!oc8c)$W7fGgK6f:<160UZ6
6/=m)6i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<RJriXV#IRs[/RW8_>_IR
bPoogec+;%hu;[8k5O]GmJu_WnF6GLrq69brqcWkrr)`nJcE%Urr2oqrquclrqHEcrq$6\n,VtWmJcGN
k5OE?hu;@/f)F(rbPoN\_>_"EZi70-V#HtbRJr<IMuJJ1JGsloFT-4XCAqlF@/aI2>5hP$;uTVm:B!oc
8c)$W7fGgK6f:<160UZ66/=m)6i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<
RJriXV#IRs[/RW8_>_IRbPoogec+;%hu;[8k5O]Gmf)_To`"O_p\t$gqu6Qkrdk(Ms8TJ+rr2oqrqucl
rqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2
r`];$r_remr_EGcr^luWr^QlTog@n/qEk0Iks556h*V!+qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4G
rbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/ro="?rp0ROrp]pZrq69brqcWkrr)`n
j8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHBrj)O*rhBC_rg3VFreg]/rdFcj
rcA'Urb;@Cra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KLj?iN,r^HfUr^ZrZr_*5cr_NMk
r`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RNrp]pY
rq69brqcWkrr)`n\,V$Zr;Zcqrr)iorqcWgrq??_rp]pSrp0RFro3q7rn7;$rm:Yerl+lOrj_s5riQ0o
rgj%Trf@&9re:?"rcnE`rb_XKral(:r`oG*r`/qrr_NMgr_*5^r^ZrWr^HBFj$NW/k!8o3i'R*(r^HfU
r^ZrZr_*5cr_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.
ro3q=rp0RN!:U$YnG`%Yp&=^bqYpBkrVQSFs0D\(rr2lqr;QQlp\smco)\@M!:^!Trp0RFro3q7rn7;$
rm:Yerl+lOrj_s5riQ0orgj%Trf@&9re:?"rcnE`rb_XKral(:r`oG*r`/qrr_NMgr_*5^r^ZrWr^HBF
j$NW/k!8o3i'R*(r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*
rj_sBrl"fYrm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWkrr)`nJc>cNs0Vh*rr2lqr;QQlp\smcoD\7Y
mJcGNjo49=hu;=.ec*qpb5TBZ^](bBZMq!*UAg__Qi<'FMZ/>/IK"KjF8g%UC&V]C@/aF1=oMG#;uTSl
:B!oc8cD6Z7fGjI6g$f76Mj(25lO(-6M3_F7K,dU8,c*Z9E%]c:]=8k<W6/#>lJ.1Ac?ECD>nVUGlE-j
L&Qu/O8bLFSc5A_Xo>X*\Gj8B`;[pYd/MSpg&Bn.ir8'=li-;NnG`%Yp&=^bqYpBkrVQTSs5<qVrr2lq
r;QQlp\smcoD\7YmJcGNjo49=hu;:-e,I\maSs*V^](\@Z2Uj(T`1G[QMupDM>i/,I/\?hErKnSB`;N@
?iF:/=T2;!;>sAj9`@Z`8cD3V7JK7+6JXp*6K(9+6iKOO7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJS
GQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-ir8'=li-;NnG`%Yp&=^bqYpBkrVQT's+14J
s8N#srVl`oqYp6gpAX[_nG_hSli-#Fir7j7f`'A!ci2#b_u@FM[f3Q2XT"mlS,S`QNrFn7KDp8tGQ)X^
D#S,IA,]j7>Q.b(<;obo:]=&e9)_E]7f,XL6et)b5i"d%6iKOO7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?
D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-ir8'=li-8On,`%Jrq$-^rqHEgrql]n
qu20HZN'q'rr)iorqcWgrq??_!V#RYnG_hSli-#Fir7j7f`'A!ci2#b_u@FM[f3Q2XT"mlS,S`QNrFn7
KDp8tGQ)X^D#S,IA,]j7>Q.b(<;obo:]=&e9)_E]7f,XL6et)b5i"d%6iKOO7fH!Y9E%Wa:]=8k<;p#!
>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-ir8'=li-;NnG`%Yp&=^b
qYpBkrVQSFrrN0"[/^.)rr)iorqcWgrq??_rp]pSrp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQ
rf6u7re(2trce?^rbVRIraYq7r`fA(r`&kor_NMer_!/]r^QcRpd=",rBf=*h*Um(r^H]Rr^m)^r_3;e
r_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.FrpB^S
rq$-^rqHEgrql]nqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`Lrj;[.ri5sj
rgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$N`2f0B=%!C9$36MNqI
7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dm
f)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,D\QlMflDiVq^5f)F.t
ci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml:B!oc9)_B\7fGjU7/0.0
6N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$
[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu20HZN'q'rqucmrqcWgrq69]!UoIW
n,D\QlMflDiVq^5f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml
:B!oc9)_B\7fGjU7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^d
JGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6JErrN0"[/^.)
rqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLF
raPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$Ec45la4&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs
>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^b
qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wli-/Jj8S!9h>Z")df.Sl`r<gR^&GA;Y5YC!TDk8XPQ$L>
L&QW%HN&'dE;jVOB)Z6<?2e"+=8l+s:]=)f9E%N^8,bsV7.iq06Mj("5QO,8r^#[5ogA^Hr^HfVr^m)^
r_<Agr_i_sr`];,raGe;rbDFOrcS3drdb!&repc>rgEbXri#h!rj2U;rkeZSrm1Smrmq))ro!e9rosFK
rpTjWrq69brqcWkrquZm\,V$Zr;ZcqrqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`rk\TIrj2U,
ri#ggrgEbLrepc0rdauorcS3ZrbDFEraGe3r`T5%r_i_kr_<Abr^m)Zr^HfSog@k.qa&^sr^#[5ogA^H
r^HfVr^m)^r_<Agr_i_sr`];,raGe;rbDFOrcS3drdb!&repc>rgEbXri#h!rj2U;rkeZSrm1Smrmq))
ro!e9rosFK!:KsWn,DnWp&=^bqYpBkr;6JEs0D\(rr2ipqu6Hkp\sjbncA4J!:TpQrosFBro!e3rmq(s
rm1S`rk\TIrj2U,ri#ggrgEbLrepc0rdauorcS3ZrbDFEraGe3r`T5%r_i_kr_<Abr^m)Zr^HfSog@k.
qa&^sr^#[5ogA^Hr^HfVr^m)^r_<Agr_i_sr`];,raGe;rbDFOrcS3drdb!&repc>rgEbXri#h!rj2U;
rkeZSrm1Smrmq))ro!e9rosFKrpTjWrq69brqcWkrquZmJc>cNs0Vh*rr2ipqu6Hkp\sjbo)A+Wli-/J
j8S!9h>Z")df.Sl`r<gR^&GA;Y5YC!TDk8XPQ$L>L&QW%HN&'dE;jVOB)Z6<?2e"+=8l+s:]=)f9E%N^
8,bsV7.iq06Ms+L6.A1!60:N,6iKLQ7K,gV8cDB^:&[ug;Z9bs>5hh,@K'j;CAr2OFoH^dJGt<&MuJq>
RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L&Kn,DnWp&=^bqYpBkr;6KRs5<qVrr2ipqu6Hkp\sjb
nc&"Vli-/Jj8S!9h#>n(df.Pk`W!^Q]`,8:Y5Y?uT)P,VP5^@<K`6K#GlDd`DuOGLAH$!9>lIn*<rQ"r
:]=)f9)_B\8,bsV7/0.06I8!q5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#
MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L&Kn,DkVo`"UaqYpBkr;6K&s+14Js8N#sr;QTm
qYp6gp&=L\n,DYPl2K`Bi;VO2f)F+scMkf^_>_+HZi7-,VuE:eR/W9JMZ/;.J,X]lF8g+WB`;QA@/aF1
=oMJ$;Z9Jk:&[ca8H)-Y7K,^M6fUMV5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-Oa
J,Y-#MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L#LmfDnGrpg![rqHEgrql]mqu20HZN'q'
rqucmrqcWgrq69\!UoIWn,DYPl2K`Bi;VO2f)F+scMkf^_>_+HZi7-,VuE:eR/W9JMZ/;.J,X]lF8g+W
B`;QA@/aF1=oMJ$;Z9Jk:&[ca8H)-Y7K,^M6fUMV5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:
B`;rLFT-OaJ,Y-#MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L&Kn,DkVo`"UaqYpBkr;6JE
rrN0"[/^.)rqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXol
rcA'Wrb2:Ara>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.r'8Uoi'R<.r^?`Sr^ZrZr_!/ar_WSlr`9##
r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="Brp9XQrpg![rqHEg
rql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+
rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfSpd=:4r^"doq*=pFk!Jr4r^?`Sr^QlWr^m)_
r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1ro3q@rp0RP
rpg![rq??frql]mqu4))JcGZJrr2oprql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Yhrl+lPrk&07riH*r
rgj%TrfR29re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8`BaDgk!Jr4r^?`S
r^QlWr^m)_r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0Frl+l]rmC_prnRM1
ro3q@rp'RQ!UoLVnc&1[pAXpfqu6Njrdk*Ts8N#sr;QTmqYp3fo`"@]n*^8Frp0RIro3q7rnRM&rm:Yh
rl+lPrk&07riH*rrgj%TrfR29re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8
`BaDgk!Jr4r^?`Sr^QlWr^m)_r_EGhr`/r"r`oG1rac"@rbqdWrc\9jre(3+rfR2Hrgj%criH+(rk&0F
rl+l]rmC_prnRM1ro3q@rp0RPrpg![rq??frql]mqu20H!WW2,s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@
hu;F1eGdhoc2P]]_#CtFZ2Uj(VZ*.cQi<-HM#N&+J,XWjErL"VBDuH@@/aF1=T2>";#X5h9`@W_8H)*X
7K,^M6g6r:62<dj5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^H
Sc5McXT#L(]DfVF`W"-]dJhYph#?41ir80@li-APnc&1[pAXpfqu6Njro=%:s8N#sr;QQlq>U*eoD\7Y
mf)POkl0T@hYu:/eGdhoc2PZ\^](kEZ2Uj(V>d"aQN!!FM#N&+If=KhEW0hSBDuH@@/aF1=T2>";#X5h
9`@W_8H)*X7K,^M6gR/:6-V[g5lO(66Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@D>nPSFoHjh
K)UT*OT(RFSGoAaX8]C']DfVF`;\$\dJhYpg]$+0ir80@lMg5NnG`(ZpAXmequ6NjrjVoYs8;orrr2ip
qYp<ipAX[_nG_kTli-,Iir7g6g]#_%d/M;h`;[ON]Df)7XT#'qSGniROT((8KDp?!FoHC[D>n2IAH$!9
>lIk)<W5ho:B!rd8cD9[7fGjU7/0.96Mj'c5lO(66Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@
D>nPSFoHjhK)UT*OT(RFSGoAaX8]C']DfVF`;\$\dJhYpg]$+0ir80@l2^5QmdC)Drq-3`rqZQjrquZm
JcE%Urr2oprqcWirq??_rpTsVmJu\Sli-,Iir7g6g]#_%d/M;h`;[ON]Df)7XT#'qSGniROT((8KDp?!
FoHC[D>n2IAH$!9>lIk)<W5ho:B!rd8cD9[7fGjU7/0.96Mj'c5lO(66Mj.L7/fXS7fGpW8cDE_:B")h
<W6,">lJ.1AH$6@D>nPSFoHjhK)UT*OT(RFSGoAaX8]C']DfVF`;\$\dJhYpg]$+0ir80@lMg5NnG`(Z
pAXmequ6Njrdk(Ms8TJ+rr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%rm:Yhrl"fNrk&07riH*qrg`tR
rfI,8re(3!rcS3[rb_XIrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKlpCS8q*<(fr^#d8qa:?Nr^HfU
r^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiureUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7
roj@HrpKdTrq-3`rqZQjrquZmj8\';rr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%rm:Ygrkn`Mrjr*5
ri5snrg`tRrf@&7re(3!rcS3[rb_XHraPk6r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQ
r^ZrZr_3;cr_WSnr`K/'ra5Y7rau.Hrc.p[rdOiureUQ7rg!JQrhTOorilC5rkABLrlkAgrm^r%rnm_7
roj@HrpKdTrq-3`rqZQjrquZm\,V$Zr;ZcqrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHD
rilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!HUDk!K&7qaCEQ
r^ZrZr_3;cr_WSnr`K/'ra5Y7rau.Hrc.p[rdOiureUQ7rg!JQrhTOorilC5rkABLrlkAgrm^r%rnm_7
roj@H!:BmUmf)_To`"R`q>U9jr;6JEs0D\(rr2ipqYp<ipAX[_n,_tF!:KjProj@@rndY/rm^qorlkAZ
rkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!HUDk!K&7
qaCEQr^ZrZr_3;cr_WSnr`K/'ra5Y7rau.Hrc.p[rdOiureUQ7rg!JQrhTOorilC5rkABLrlkAgrm^r%
rnm_7roj@HrpKdTrq-3`rqZQjrquZmJc>cNs0Vh*rr2ipqYp<ipAX[_nG_kTli-,Iir7g6g]#_%d/M8g
_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[D>n/H@fBa6>5hV&<;o_n:B!rd8cD9[7fGgQ6fp`,5fZ.P
6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ug
eGe5%hu;X7kl0lHmf)_To`"R`q>U9jr;6KRs5X.Yrr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I\m
bPoEY^Ab\BYl:[%U]-b^Q2ZjDL]2l(IK"BgEW0hSB)Z<>?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66H;@_
5itE46i0:N7fGpW8cDE_:B")h<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jY
ci2Dmg]$+0ir80@lMg5NnG`(ZpAXmequ6NmrVlf*s+11Ns8W)trr)iorqcWirq??_rp]pTrp0RIro3q6
rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlT
qa9L4\No:Dr^6QNr^QlWr^m)_r_EGhr`&ktr`];.raYq>rb_XSrcS3grdt-)rf@&DrgWn^ri5t%rji$B
rkn`Yrm1SmrnIG0ro3q@rosLO!UfCTnG`(ZpAXmequ6NmrVleIs0_n+rr2lqr;QQlq>U*eoD\4[md:)C
rp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGd
r^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_EGhr`&ktr`];.raYq>rb_XSrcS3grdt-)rf@&DrgWn^
ri5t%rji$Brkn`Yrm1SmrnIG0ro3q@rp'LNrp]pZrq??erql]mrr)iqJc>cNs0r%-rr2lqr;QQlq>U*e
oD\7Ymf)POkl0T@hYu:/e,I\mbPoEY^Ab\BYl:[%U]-b^Q2ZjDL]2l(IK"BgEW0hSB)Z<>?iF7.=8l1u
;#X5h9`@W_8H)*X7/K@66M!I_5itE46i0:N7fGpW8cDE_:B")h<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)
O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@lMg5NnG`(ZpAXmequ6NmrVlfVs5X.Yrr2lqr;QQl
q>U'doD\7Ymf)POkl0Q?hYu:/e,I\mbPoEY^Ab\BYl:[%U]-_]Q2ZjDL]2l(IK"BgEW0hSAc?0<?iF4-
=8l.t;#X5h9`@W_8H)*X7/K@66H;@_5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFoHgg
K)UQ)O8bCCRf9)]WrB7%\c0>B_u@jYci2Dmg]$(/iVr'?lMg5NnG`%Yp&=ddqu6NmrVlf*s+11Ns8W)t
rr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4ri5smrgNhOrf@&6rdk&srcS3[rb_XG
raPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-raPk<rb_XS
rcS3grdt-)rf@&CrgNh]ri5t%rji$Brkn`Yrm1SmrnIG/ro*k?rosLO!UfCTnG`%Yp&=ddqu6NmrVleI
s0_n+rr2lqr;QQlq>U'doD\4[md:)Crp0RIro*k5rnIG$rm1Serkn`Lrji$4ri5smrgNhOrf@&6rdk&s
rcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-
raPk<rb_XSrcS3grdt-)rf@&CrgNh]ri5t%rji$Brkn`Yrm1SmrnIG/ro*k?rp'LNrp]pYrq69drql]m
rr)iqJc>cNs0r%-rr2lqr;QQlq>U'doD\7Ymf)POkl0Q?hYu:/e,I\mbPoEY^Ab\BYl:[%U]-_]Q2ZjD
L]2l(IK"BgEW0hSAc?0<?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66M!I_5itE46i0:N7fGpW8cDE_:&[ug
;uThs=oMe-@fBs<D>nPSFoHggK)UQ)O8bCCRf9)]WrB7%\c0>B_u@jYci2Dmg]$(/iVr'?lMg5NnG`%Y
p&=ddqu6NmrVlfVs5X.Yrr2lqr;QQlq>U'doD\7Ymf)POkl0Q?hYu:/e,I\mbPoBX^&GSAYl:[%U]-_]
Q2ZjDL]2l(I/\6eE;j_RAc?0<?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66H;@_5itE46i0:N7fGpW8cDE_
:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?lMg5N
nG`%Yp&=ddqu6NmrVlf*s+11Ns8W)trr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1SerkeZJrji$4
ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlW
r^m)_r_<Agr_resr`T5-raPk<rb_XSrcJ-erdk'(rf@&CrgNh]ri5t%rji$BrkeZXrm1SmrnIG/ro*k?
rosLO!UfCTnG`%Yp&=ddqu6NmrVleIs0_n+rr2lqr;QQlq>U'doD\4[md:)Crp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:D
r^6QNr^QlWr^m)_r_<Agr_resr`T5-raPk<rb_XSrcJ-erdk'(rf@&CrgNh]ri5t%rji$BrkeZXrm1Sm
rnIG/ro*k?rp'LNrp]pYrq69drql]mrr)iqJc>cNs0r%-rr2lqr;QQlq>U'doD\7Ymf)POkl0Q?hYu:/
e,I\mbPoBX^&GSAYl:[%U]-_]Q2ZjDL]2l(I/\6eE;j_RAc?0<?iF4-=8l.t;#X5h9`@W_8H)*X7/K@6
6M!I_5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%\c0>B
_Z%aXci2Dmg]$(/iVr'?lMg5NnG`%Yp&=ddqu6NmrVlfVs5X.Yrr2lqr;QQlq>U'doD\7Ymf)POkl0Q?
hYu:/e,I\mbPoBX^&GSAYl:[%U]-_]Q2ZjDL]2l(I/\6eE;j_RAc?0<?iF4-=8l.t;#X5h9`@W_8H)*X
7/K@66H;@_5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%
\c0>B_Z%aXci2Dmg]$(/iVr'?lMg5NnG`%Yp&=ddqu6NmrVlf*s+11Ns8W)trr)iorqcWirq69^rp]pT
rp0RIro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGd
r^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-raPk<rb_XSrcJ-erdk'(rf@&CrgNh]
ri5t%rji$BrkeZXrm1SmrnIG/ro*k?rosLO!UfCTnG`%Yp&=ddqu6NmrVleIs0_n+rr2lqr;QQlq>U'd
oD\4[md:)Crp0RIro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%
r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-raPk<rb_XSrcJ-erdk'(
rf@&CrgNh]ri5t%rji$BrkeZXrm1SmrnIG/ro*k?rp'LNrp]pYrq69drql]mrr)iqJc>cNs0r%-rr2lq
r;QQlq>U'doD\7Ymf)POkl0Q?hYu:/e,I\mbPoBX^&GSAYl:[%U]-_]Q2ZjDL]2l(I/\6eE;j_RAc?0<
?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66M!I_5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPS
FT-[eJc:H(O8bCCRf9)]WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?lMg5NnG`%Yp&=ddqu6NmrVlfVs5X.Y
rr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I\mbPoBX^&GSAYl:[%U]-b^Q2ZjDL]2l(I/\6eE;j_R
B)Z9=?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66H;@_5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-A,^*>
D>nPSFT-[eJc:H(O8bFDS,T2^WrB7%\c0>B_Z%aXci2Dmg]$+0ir80@lMg5NnG`(ZpAXmequ6NmrVlf*
s+11Ns8W)trr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&r
rcJ-Yrb_XHraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Agr_resr`T5-
raYq>rb_XSrcJ-erdk'(rf@&DrgWn^ri5t%rji$BrkeZXrm1SmrnIG0ro3q@rosLO!UfCTnG`(ZpAXme
qu6NmrVleIs0_n+rr2lqr;QQlq>U*eoD\4[md:)Crp0RIro3q6rnIG$rm1SerkeZJrji$4ri5smrgWnP
rf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Ag
r_resr`T5-raYq>rb_XSrcJ-erdk'(rf@&DrgWn^ri5t%rji$BrkeZXrm1SmrnIG0ro3q@rp'LNrp]pZ
rq??erql]mrr)iqJc>cNs0r%-rr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I\mbPoBX^&GSAYl:[%
U]-b^Q2ZjDL]2l(I/\6eE;j_RB)Z9=?iF4-=8l.t;#X5h9`@W_8H)*X7/K@66M!I_5itE46i0:N7fGpW
8cDE_:&[ug;uThs=oMe-A,^*>D>nPSFT-[eJc:H(O8bFDS,T2^WrB7%\c0>B_Z%aXci2Dmg]$+0ir80@
lMg5NnG`(ZpAXmequ6NmrVlfVs5X.Yrr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I\mbPoEY^Ab\B
Yl:[%U]-b^Q2ZjDL]2l(IK"BgEW0hSB)Z<>?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66H;@_5itE46i0:N
7fGpW8cDE_:B")h<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0
ir80@lMg5NnG`(ZpAXmequ6NmrVlf*s+11Ns8W)trr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Se
rkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4\No:D
r^6QNr^QlWr^m)_r_EGhr`&ktr`];.raYq>rb_XSrcS3grdt-)rf@&DrgWn^ri5t%rji$Brkn`Yrm1Sm
rnIG0ro3q@rosLO!UfCTnG`(ZpAXmequ6NmrVleIs0_n+rr2lqr;QQlq>U*eoD\4[md:)Crp0RIro3q6
rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlT
qa9L4\No:Dr^6QNr^QlWr^m)_r_EGhr`&ktr`];.raYq>rb_XSrcS3grdt-)rf@&DrgWn^ri5t%rji$B
rkn`Yrm1SmrnIG0ro3q@rp'LNrp]pZrq??erql]mrr)iqJc>cNs0r%-rr2lqr;QQlq>U*eoD\7Ymf)PO
kl0T@hYu:/e,I\mbPoEY^Ab\BYl:[%U]-b^Q2ZjDL]2l(IK"BgEW0hSB)Z<>?iF7.=8l1u;#X5h9`@W_
8H)*X7/K@66M!I_5itE46i0:N7fGpW8cDE_:B")h<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^
WrB7%\c0>B_u@jYci2Dmg]$+0ir80@lMg5NnG`(ZpAXmequ6NmrVlfVs5<qVrr2ipqYp<ipAX[_nG_kT
li-,Iir7g6g]#_%d/M8g_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[D>n/H@fBa6>5hV&<;o_n:B!rd
8cD9[7fGgQ6fp_U5k@8'6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7B)ZZHEW1+[If=ruM#NJ7Q2[<Q
V#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0lHmf)_To`"R`q>U9jr;6K&s+14Js8N#sr;QQlq>U*eoD\7Y
mf)POkl0T@hYu:/eGdhobl5NZ^](hDYl:[%V#Hn`QMusEM#N&+If=KhEW0hSB)Z9=?iF7.=8l1u;#X5h
9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7B)ZZHEW1+[If=ruM#NJ7Q2[<Q
V#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0iImK)bDrp]pZrq??erql]mqu20HZN'q'rquclrqZQerq$-Y
!Uf@Umf)POkl0T@hYu:/eGdhobl5NZ^](hDYl:[%V#Hn`QMusEM#N&+If=KhEW0hSB)Z9=?iF7.=8l1u
;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7B)ZZHEW1+[If=ruM#NJ7
Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0lHmf)_To`"R`q>U9jr;6JErrN0"[/^.)rquclrqZQe
rq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.=ra5Y.r`B(u
r_WShr_3;_r^d#Xr^?WNk!JZ)a$AcRr^6QNr^QlWr^m)_r_<Agr`&l!r`];.raYq>rb_XSrcS3hrdt-*
rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZrq??erql]mqu5XUi;`fUrqucmrqcWf
rq-3[rpTjProj@@rnm_1rm^qorlkA[rkJHDrilC&rh]Ubrg*PFreUQ+rdOiirc8!Urau.>ra5Y/r`B)!
r_WShr_3;_r^d#Xr^?WNk!Jr2bs:tfr^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^Urc\9i
rdt-*rfI,Grgj%bri?%&rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]mqu4))JcGZJrr2op
rql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Ygrl"fNrjr*5ri?$prgj%SrfI,8re(3!rc\9]rbh^IraYq7
r`fA'r`/qor_EGdr^m)[r^QlTqa9L4qa&(ar^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rbh^U
rc\9irdt-*rfI,Grgj%bri?%&rjr*Drl"f[rm:YornRM1ro3q@rp'RQ!UoLVnc&1[pAXpfqu6Njrdk*T
s8N#sr;QTmqYp3fo`"@]n*^8Frp0RIro3q7rnRM&rm:Ygrl"fNrjr*5ri?$prgj%SrfI,8re(3!rc\9]
rbh^IraYq7r`fA'r`/qor_EGdr^m)[r^QlTqa9L4qa&(ar^#[5r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/
raYq>rbh^Urc\9irdt-*rfI,Grgj%bri?%&rjr*Drl"f[rm:YornRM1ro3q@rp0RPrpg![rq??frql]m
qu20H!WW2,s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhobl5Q[^](hDYl:^&V>d%bQN!!FM#N&+
If=NiErKtUB)Z<>?iF:/=8l5!;#X5h9`@W_8H)*X7/K@66Mj(E5fu@k60:N56i0:N7fGpW8cDE_:B")h
<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41ir80@li-APnc&1[
pAXpfqu6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhoc2P]]_#CtFZ2Uj(VZ*.cQi<-H
M#N&+J,XWjErL"VBDuH@@/aF1=T2>";#X5h9`@W_8H)*X7K,^M6g6r:6-V[j5lO(36Mj.L7/fXS7fGpW
8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5McXT#L(]DfVF`W"-]dJhYph#?41ir80@
li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7h#>h&d/M;h`W![P]Df)7
XT#*rSc4uTOoC19KDpB"G5cO]DuODKAH$!9>lIk)<W5ho:B!rd8cD9[7fGjU7/0.66N09i5lO(36Mj.L
7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5McXT#L(]DfVF`W"-]dJhYp
h#?41ir80@lN$ASn*g8Grq-3`rqcWkrquZmJcE%Urr2oprql]krq??`rp^$Xmf;hUli-,Iir7j7h#>h&
d/M;h`W![P]Df)7XT#*rSc4uTOoC19KDpB"G5cO]DuODKAH$!9>lIk)<W5ho:B!rd8cD9[7fGjU7/0.6
6N09i5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5McXT#L(
]DfVF`W"-]dJhYph#?41ir80@li-APnc&1[pAXpfqu6Njrdk(Ms8TJ+rr2oprql]krq??`rpg!Vrp0RI
ro3q7rnRM&rm:Yhrl+lPrk&07riH*rrgj%TrfR29re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[
r^QlUr^?NKksGA8q*<1ir^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9
rg3VTrhf[rriuI7rkSNPrltGirm^r&rnm_7roj@IrpTjVrq-3`rqcWkrquZmj8\';rr2oprql]krqHEb
rpg!Vrp0RJro="9rnRM(rmLekrl+lQrk/6:riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"r
r_NMfr_!/\r^ZrVr^?NKj$M*Xr'91,qa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:rb2:LrcJ-ardXp#
reg]<rg<\Vrhoatrj2U:rkSNPrm(Mkrmq)(rnm_8rosFKrpTjVrq-3arqcWkrquZm\,V$Zr;Zcqrqucm
rqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'Wrb2:Ara>_1
r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.b<XuPqa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:rb2:LrcJ-a
rdXp#reg]<rg<\Vrhoatrj2U:rkSNPrm(Mkrmq)(rnm_8rosFK!:KsWn,DkVo`"UaqYpBkr;6JEs0D\(
rr2ipqu6Hkp\sjbnH&+I!:TpQrosFBro!e2rmq(srm(M^rk\THrj2U,rhoaerg<\Jreg].rdXolrcA'W
rb2:Ara>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.b<XuPqa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:
rb2:LrcJ-ardXp#reg]<rg<\Vrhoatrj2U:rkSNPrm(Mkrmq)(rnm_8rosFKrpTjVrq-3arqcWkrquZm
Jc>cNs0Vh*rr2ipqu6Hkp\sjbnc&"Vli-/Jj8S!9h#>n(df.Pk`W!^Q]`,8:Y5Y?uT)P,VP5^@<K`6K#
GlDd`DuOGLAH$!9>lIn*<rQ"r:]=)f9)_B\8,bsV7/0.06Ms*q5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r
=T2S)@/aa:B`;rLFT-OaJ,Y-#MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L&Kn,DkVo`"Ua
qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbnc&"Vm/H;LjSn*:h>Z")df.Pk`r<gR^&GD<Y5YC!TDk8XPQ$L>
L&QT$H2_pbDuOMNB)Z6<?2e"+<rQ"r;#X5h9)_E]8H)*X7K,^P6fUN16.S:%5X><7i'RE1r^?`Sr^QlX
r^m)]r_EGhr_i_rr`T5+raGe;rbDFNrcJ-brdXp$repc>rgEbXri#h"rj;[<rkeZSrm(Mkrmq))ro*k;
rp'LLrpTjVrq-3arqcWkrquZm\,V$Zr;ZcqrqucmrqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TI
rj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/e3O"!
i'RE1r^?`Sr^QlXr^m)]r_EGhr_i_rr`T5+raGe;rbDFNrcJ-brdXp$repc>rgEbXri#h"rj;[<rkeZS
rm(Mkrmq))ro*k;rp'LL!:KsWn,DkVo`"UaqYpBkr;6JEs0D\(rr2ipqu6Hkp\sjbnH&+I!:TpRrp'LD
ro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3r`T5$r_i_lr_EGbr^m)[
r^QlUr^?WNj$NW/e3O"!i'RE1r^?`Sr^QlXr^m)]r_EGhr_i_rr`T5+raGe;rbDFNrcJ-brdXp$repc>
rgEbXri#h"rj;[<rkeZSrm(Mkrmq))ro*k;rp'LLrpTjVrq-3arqcWkrquZmJc>cNs0Vh*rr2ipqu6Hk
p\sjbnc&"Vm/H;LjSn*:h>Z")df.Pk`r<gR^&GD<Y5YC!TDk8XPQ$L>L&QT$H2_pbDuOMNB)Z6<?2e"+
<rQ"r;#X5h9)_E]8H)*X7K,^P6fUN25la4#5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+@K'j;
CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBkr;6KR
s5<qVrr2ipqu6Hkp\sjbo)A+Wm/H;LjSn-;hYu+*e,I\maSs*V^AbM=YPtR$T`1DZPl?X@LAl`&HN&'d
E;jYPB)Z9=?N+.-=8l+s;#X5h9E%Q_8H)*X7K,^M6fUN46.\@%5lj8;j$NN.r^?`Sr^QlXr^m)^r_EGh
r_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;rp'LLrpTjW
rq69brqcWkrquZm\,V$Zr;ZcqrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`Lrj;[.ri5sj
rgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$N`2f0K=$j$NN.r^?`S
r^QlXr^m)^r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*
ro*k;rp'LL!:KsWn,DnWp&=^bqYpBkr;6JEs0D\(rr2ipqu6Hkp\sjbncA4J!:TpRrp'LDro*k5rmq(t
rm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NK
j$N`2f0K=$j$NN.r^?`Sr^QlXr^m)^r_EGhr_i_sr`];-raPk>rbMLPrcS3drdb!&rf$i@rgWn[ri5t$
rj;[=rkeZUrm1Smrmq)*ro*k;rp'LLrpTjWrq69brqcWkrquZmJc>cNs0Vh*rr2ipqu6Hkp\sjbo)A+W
m/H;LjSn-;hYu+*e,I\maSs*V^AbM=YPtR$T`1DZPl?X@LAl`&HN&'dE;jYPB)Z9=?N+.-=8l+s;#X5h
9E%Q_8H)*X7K,^M6fUK65sYK:f0K=$j$NN.r^?`Sr^QlXr^m)^r_EGhr_i_sr`];-raPk>rbMLPrcS3d
rdb!&rf$i@rgWn[ri5t$rj;[=rkeZUrm1Smrmq)*ro*k;rp'LLrpTjWrq69brqcWkrquZmj8\';rr2oq
rquclrqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@
ra5Y/r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_rBfI0pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?rbVRS
rce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69brqcWkrr)`n\,V$Z
r;Zcqrr)iorqcWgrq??_rp]pSrp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7re(2trce?^
rbVRIraYq7r`fA(r`&kor_NMer_!/]r^QcRpd<k(h*Bd_pd>$LqaUQVr_*5ar_NMkr`&l!r`fA/raYq?
rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=rp0RN!:U$YnG`%Yp&=^bqYpBk
rVQSFs0D\(rr2lqr;QQlp\smco)\@M!:^!Trp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7
re(2trce?^rbVRIraYq7r`fA(r`&kor_NMer_!/]r^QcRpd<k(h*Bd_pd>$LqaUQVr_*5ar_NMkr`&l!
r`fA/raYq?rbVRSrce?hre(3+rf6uDrg`t\riH+(rjMg@rl"fWrm1Snrn.5-ro3q=rp0RNrp]pYrq69b
rqcWkrr)`nJc>cNs0Vh*rr2lqr;QQlp\smcoD\7YmJcGNjo49=hu;:-e,I\maSs*V^](\@Z2Uj(T`1G[
QMupDM>i/,I/\?hErKnSB`;N@?iF:/=T2;!;>sAj9`@Z`8cD3V7JK7/6N'7,5i"d%6iKOO7fH!Y9E%Wa
:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-ir8'=li-;N
nG`%Yp&=^bqYpBkrVQTSs5<qVrr2lqr;QQlp\smco`"@ZmJcGNk5OE?hu;=.eGdhob5TBZ_#CkCZMq!*
U]-kaQi<*GMZ/;.If=WlF8g%UB`;QA@/aF1=oMD";Z9Jk:&[ca8bbdS7/K@-6Mj(25lO(J6K(916i0:H
7fH!Y9E%Zb:]=8k<;p&">lJ.1AH$<BD>nVUGlE0kK`6l.OT(UGSc5D`Xo>X*\Gj;C`W"$Zd/MSpg&Bn.
j8S3?li->OnG`(Zp&=^bqYpBkrVQT's+14Js8N#srVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8g&BM#d/M2e
`W![P\Gif5Xo>*pT)P)UOT(.:K`6H"H2_maD>n5JAH$!9>lIn*<;oep:]=)f9)_EW7fGgQ6et*+60:H3
6/=m,6i0:H7fH!Y9E%Zb:]=8k<;p&">lJ.1AH$<BD>nVUGlE0kK`6l.OT(UGSc5D`Xo>X*\Gj;C`W"$Z
d/MSpg&Bn.j8S3?li-;Pn,`%Jrq-3_rqHEgrql]nqu20HZN'q'rr)iorqcWgrq??`!V#RYnG_hSli-&G
j8Rs8g&BM#d/M2e`W![P\Gif5Xo>*pT)P)UOT(.:K`6H"H2_maD>n5JAH$!9>lIn*<;oep:]=)f9)_EW
7fGgQ6et*+60:H36/=m,6i0:H7fH!Y9E%Zb:]=8k<;p&">lJ.1AH$<BD>nVUGlE0kK`6l.OT(UGSc5D`
Xo>X*\Gj;C`W"$Zd/MSpg&Bn.j8S3?li->OnG`(Zp&=^bqYpBkrVQSFrrN0"[/^.)rr)iorqcWgrq??`
rp]pSrp0RGro="8rn7;#rm:Yerl+lPrj_s5riQ0prgs+UrfI,:re19"rd"Karb_XJrac"9r`oG*r`&kp
r_NMfr_!/]pdY6Nqa9=/rBgBIk!8o3h*V*.qaC3Kr^m)^r_<Afr_i_pr`T5*ra>_9rb;@KrcA'`rdOj"
reg]:rg3VTrhKIprj)O5rkSNPrlY5ermh#$rnm_8roX4GrpKdTrq-3_rqHEgrql]nqu5XUi;`fUrr)io
rqcWgrq??`rp]pSrp0RGro="8rn@A&rmC_grl4rRrji$7ric<srgs+WrfI,;reCE&rd+QcrbqdNrb)4<
ra#M,r`/qrr_WShr_*5^qa^WTr^?EHi'RE/ks556qEj70qa:6KqaUQTr^m)^r_EGhr_rerr`];,ra>_<
rbMLOrcJ-crdb!&rf$i<rgEbXrhTOsrj;[8rk\TRrlb;grmh#%rnm_8roX4GrpKdTrq-3_rqHEgrql]n
qu4))JcGZJrr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTObrgEbIrepc1
rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^#@,qa:6KqaUQTr^m)^r_EGh
r_rerr`];,ra>_<rbMLOrcJ-crdb!&rf$i<rgEbXrhTOsrj;[8rk\TRrlb;grmh#%rnm_8roX4GrpBdU
!V#UXo`"O_p\t$gqu6Qkrdk*Ts8N#srVl`oqYp6gpAX[bnF-GIrpB^NroX4?rnm_/rmq(rrlb;\rk\TE
rj2U-rhTObrgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^#@,
qa:6KqaUQTr^m)^r_EGhr_rerr`];,ra>_<rbMLOrcJ-crdb!&rf$i<rgEbXrhTOsrj;[8rk\TRrlb;g
rmh#%rnm_8roX4GrpKdTrq-3_rqHEgrql]nqu20H!WW2,s8N#srVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8
gA]\&dJh>g`r<gR\c/r7YPt?sT)P/WOT(1;LAl`&HN&$cDuOMNBDu<<?2e%,<W5qr;#X5h9E%N[8,c!W
7.iq16Ma%J60UZ66/=m)6i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<RJriX
V#IRs[/RW8_>_IRbPoogec+;%hu;[8k5O]Gmf)_To`"O_p\t$gqu6Qkro=%7s8Murr;QTmq#:!dp&=L\
n,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrqGQ)R\D#S/J@fBa6>lIh(<W5kp
;#X2g9E%K]8,c!W7K,^J6bYnP6M3_F7/fXS7fGpW8H)9]:&[ug;>sPo=8lJ(?iFO6C&VrJE;k(\I/\Zq
M>iP7PQ%*OU&LthYPts/]`,hJaSsH`e,Ituh#?:3jo4KCmJcSRnc&4\p\ssequ6NmrNZBRs7u]orVl`o
qu6BipAXaanc&"VmJc>Kjo46<h#>t*e,IVkaSs*V]`,><YPtI!UAg\^PQ$UAM>i&)I/\?hE;j\QC&VT@
?iF=0=8l5!;>sDk:&[fb8H)-Y7fGjU7.ipF6M3_F7/fXS7fGpW8H)9]:&[ug;>sPo=8lJ(?iFO6C&VrJ
E;k(\I/\ZqM>iP7PQ%*OU&LthYPts/]`,hJaSsH`e,Ituh#?:3jo4KCmJcPSnH&1Mrq69brqQKirquco
JcD_Lrr)iorql]irq??a!V,[[nc&"VmJc>Kjo46<h#>t*e,IVkaSs*V]`,><YPtI!UAg\^PQ$UAM>i&)
I/\?hE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb8H)-Y7fGjU7.ipF6M3_F7/fXS7fGpW8H)9]:&[ug;>sPo
=8lJ(?iFO6C&VrJE;k(\I/\ZqM>iP7PQ%*OU&LthYPts/]`,hJaSsH`e,Ituh#?:3jo4KCmJcSRnc&4\
p\ssequ6NmrIP"Es0;V'rVl`oqu6BipAXaanc&"VmJc>Kjo46<h#>t*e,IVkaSs*V]`,><YPtI!UAg\^
PQ$UAM>i&)I/\?hE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb8H)-Y7fGjU7.iq46G>eZ6iKLQ7K,dU8,c'Y
9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!hJGtE)NrG7ASGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<
kl0uKn,DkVp&=^bq#:0ir;QZNs5!_SrVl`oqu6Bip\smco)A.Xmf)GLjo46<h>Z(+eGdbmao96X^&GJ>
Yl:[%U]-h`Q2ZmEMuJA.If=WlEW0kTC]7iC@/aI2=T2>";uTVm:B!rd8H)-V7fGjU7/0-`6L$o46iKLQ
7JfRR8,c'Y9`@fd;#XDm<rQ5#?2e72A,^9CDZ4YTH2`9lKDpf.OT(OESc5D`WrB7%\,O)?`;[mXcMl>m
g&Bh,iVqs<kl1#LnG`"XpAXgcq#:0ir;QZ"s+14Gs8Murr;QTmq#:$epAXX^nG_kTkl0]CiVq[4f`'D"
cMkrb`;[IL[f3N1WrAdmSc4oROT(1;KDp?!H2_g_DZ4GNA,]m8?2dt*<W5qr;#X5h9`@T^8,GdT7K,^M
6`39G6iKLQ7JfRR8,c'Y9`@fd;#XDm<rQ5#?2e72A,^9CDZ4YTH2`9lKDpf.OT(OESc5D`WrB7%\,O)?
`;[mXcMl>mg&Bh,iVqs<kl1#Ln,W"[o()eRrqHEerql]mrr%EJWW2trrqucmrqQKerq6B`nc87[nG_kT
kl0]CiVq[4f`'D"cMkrb`;[IL[f3N1WrAdmSc4oROT(1;KDp?!H2_g_DZ4GNA,]m8?2dt*<W5qr;#X5h
9`@T^8,GdT7K,^M6`39G6iKLQ7JfRR8,c'Y9`@fd;#XDm<rQ5#?2e72A,^9CDZ4YTH2`9lKDpf.OT(OE
Sc5D`WrB7%\,O)?`;[mXcMl>mg&Bh,iVqs<kl1#LnG`"XpAXgcq#:0ir;QYGs7u]"s8Murr;QTmq#:$e
pAXX^nG_kTkl0]CiVq[4f`'D"cMkrb`;[IL[f3N1WrAdmSc4oROT(1;KDp?!H2_g_DZ4GNA,]m8?2dt*
<W5qr;#X5h9`@T^8,GdT7K,^M6g@"P6MNqI7/fXP7fGpW8H)<^:B")h;uThs=T2V*@/a[8C]85NEW17_
If>!!MuJh;Q2[?RU].:mYl;-2^&GtLao9TbeGe/#h>ZC4jo4KCmf)_To)A@^p\ssequ6NmrS@M0s8Mur
r;QTmq>U0gpAXX^nG_kTkl0]Cir7g6gA]Y%d/M5f`W!XO\Gif5X8\spTDk2VP5^L@K`6K#HiA*cE;j\Q
Ac?0<?iF4-=8l1u;#X5h9`@W_8H)-Y7fGjU7.N^`6L@,46iKLQ7K,dU8,c'Y8cDE_:B")h<;oqt=oMe-
@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4Ob5Tceec+8$hYuO6k5OTDmf)_To)A@^p\t!f
qu6NmrNZBRs7u]orVl`oqu6Ejq#:!do)A.Xmf)GLjo49=hYu7.ec*qpbPoK[^](bBZMpp(V>d+dQi<0I
NrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[8,c!W7K,^G6a/oM6iKLQ7K,dU8,c'Y8cDE_
:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4Ob5Tceec+8$hYuO6k5OTD
mf)\UncA=Prq??crqZQjrqucoJcD_Lrr)iorql]jrqQKd!V5d]o)A.Xmf)GLjo49=hYu7.ec*qpbPoK[
^](bBZMpp(V>d+dQi<0INrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[8,c!W7K,^G6a/oM
6iKLQ7K,dU8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4O
b5Tceec+8$hYuO6k5OTDmf)_To)A@^p\t!fqu6NmrIP"Es0;V'rVl`oqu6Ejq#:!do)A.Xmf)GLjo49=
hYu7.ec*qpbPoK[^](bBZMpp(V>d+dQi<0INrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[
8,c!W7K,^G6h!FY6M3_F7/fXS7fGpW8H)3[9`@fd;#XGn<rQ8$?iFO6Ac?NFDuOhWHiAQpK`7#2P5^gI
TDk\dX8]F(\c0AC`W"$Zd/MSpg&Bk-ir8*>kl1#LnG`"XpAXgcq>U9jr;QZNs5!_PrVl`oqYp9hp\sd`
nc&"VlMfuGjSn*:h#>q)d/M8gaSs!S]Df5;Y5YC!U&LM[Pl?aCL]2r*If=NiErL"VB`;QA?iF=0=oMM%
;Z9Ml:B!oc9)_E]7f,XR7.N^c6M!P:6i0:N7JfRR8cD?]9E%]c;#XAl=8lA%>lJ+0AH$9ADuOhWG5csi
K)UQ)O8bCCRf9#[VuEju[Jmc:_#DFSbl5ugfDaP(i;Vg:kl0lHn,DkVoD\L`q>U6fr;QZ"s+14Gs82co
r;QQlq#:$eoD\:Zn,DVOkPjQAi;VO2fDa.rbl5]__#CtF[Jm?.W;`LiRf8QNO8aq6KDp?!G5cO]DuOGL
AH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V7K,^G6b,PV6i0:N7JfRR8cD?]9E%]c;#XAl=8lA%>lJ+0AH$9A
DuOhWG5csiK)UQ)O8bCCRf9#[VuEju[Jmc:_#DFSbl5ugfDaP(i;Vg:kl0lHn,DhWo)\ISrqHEfrqcNi
rr%EJWW2korquclrqQKe!V>m_oD\:Zn,DVOkPjQAi;VO2fDa.rbl5]__#CtF[Jm?.W;`LiRf8QNO8aq6
KDp?!G5cO]DuOGLAH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V7K,^G6b,PV6i0:N7JfRR8cD?]9E%]c;#XAl
=8lA%>lJ+0AH$9ADuOhWG5csiK)UQ)O8bCCRf9#[VuEju[Jmc:_#DFSbl5ugfDaP(i;Vg:kl0lHn,DkV
oD\L`q>U6fr;QYGs7u]"s82cor;QQlq#:$eoD\:Zn,DVOkPjQAi;VO2fDa.rbl5]__#CtF[Jm?.W;`Li
Rf8QNO8aq6KDp?!G5cO]DuOGLAH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V7K,^G6h<Xb6M3_C7/fXP7fH!Y
9)_K_:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYrg]$.1
jSnBBlMg8Onc&.Zp\t!fqYU3irS@M0s8N#srVl`oqYp9hp\sgao)A+Wli-,Ik5O<<h#?"+dJhGjb5T6V
^&GM?Yl:[%V#Hn`Qi<-HMZ/>/J,X`mFT-7YCAqiE@fB^5>Q.b(;uTYn:]=&e9E%Q\8,c!Q7/0-i6M!P=
6hj(H7fGpW9)_K_9`@ie;>sMn=T2M'?N+F5B)ZQEE;k"ZH2`<mK`6l.OoC[GSGo>`WrB7%\,O&>_>_UV
c2Q,ig&Bh,i;Vm<kl0oIn,DnWo`"Uaq>U6ir;QZoriuKSs7u]orr2lqr;QQlq#:$eo`"F\n,DYPkl0`D
i;VO2g&BCucMkuc_>_.I\,NW2WrAgnSGnlSOoC7;L&QT$H2_pbE;jVOB)Z9=?N+1.=T27u;>sAj9`@]a
9)D-X7efCH6b,PY6hj(H7fGpW9)_K_9`@ie;>sMn=T2M'?N+F5B)ZQEE;k"ZH2`<mK`6l.OoC[GSGo>`
WrB7%\,O&>_>_UVc2Q,ig&Bh,i;Vm<kl0oIn,DkXoE"UVrqHEfrqcWlrr)iqJcD_Lrr2oqrquclrqQKe
!VH!ao`"F\n,DYPkl0`Di;VO2g&BCucMkuc_>_.I\,NW2WrAgnSGnlSOoC7;L&QT$H2_pbE;jVOB)Z9=
?N+1.=T27u;>sAj9`@]a9)D-X7efCH6b,PY6hj(H7fGpW9)_K_9`@ie;>sMn=T2M'?N+F5B)ZQEE;k"Z
H2`<mK`6l.OoC[GSGo>`WrB7%\,O&>_>_UVc2Q,ig&Bh,i;Vm<kl0oIn,DnWo`"Uaq>U6ir;QZordk+F
s0;V'rr2lqr;QQlq#:$eo`"F\n,DYPkl0`Di;VO2g&BCucMkuc_>_.I\,NW2WrAgnSGnlSOoC7;L&QT$
H2_pbE;jVOB)Z9=?N+1.=T27u;>sAj9`@]a9)D-X7efCH6h<Xb6MNqC7/KIQ8,c-[9E%Wa:]=5j;uTnu
>5hk-@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTDli-APo)A:\
p\t!fqYpElrVlfPs5!_SrqlZnqYp9hp\sgao)A+Wm/H8KkPjH>hYu7.e,I\mbPoEY^](hDYl:^&VZ*4e
RJrELNW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr:]=,g9`@Z`8H)-Y7f,XR7.N^i6M<b=6i0:N7K,dU
8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4PQ%!LTDk_eXT#I'])KGC_u@jYci2Dm
gA]q-iVr$>l2L&Kn,DnWo`"Uaq>U6irVQT!s+14Gs8N#prVlZmq#:$eo`"F\n,D\Ql2KlFiVq^5gA]S#
ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(HiA3fEW0hSB`;QA@/aF1=oMG#;uTSl:B!rd9)_B\8,c!T
7K,^G6c)1_6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4PQ%!LTDk_e
XT#I'])KGC_u@jYci2DmgA]q-iVr$>l2L&Kn,DkXoE"UVrqHEfrqcWmqu20HWW2tsqu-NjrqQKe!VH!a
o`"F\n,D\Ql2KlFiVq^5gA]S#ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(HiA3fEW0hSB`;QA@/aF1
=oMG#;uTSl:B!rd9)_B\8,c!T7K,^G6c)1_6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJ
EW1.\HiATqL]3;4PQ%!LTDk_eXT#I'])KGC_u@jYci2DmgA]q-iVr$>l2L&Kn,DnWo`"Uaq>U6irVQSF
s7u]"s8N#prVlZmq#:$eo`"F\n,D\Ql2KlFiVq^5gA]S#ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(
HiA3fEW0hSB`;QA@/aF1=oMG#;uTSl:B!rd9)_B\8,c!T7K,^G6hs'k6M3_C7/fXS7fGpW8H)6\9E%]c
:]=8k<W6/#?2e72AH$9AD>nPSG5cjfJc:H(NW,.@RJriXVZ*[rYl;65^Ac%LbPoiee,J)#h>ZC4kPj`F
m/HJQo)A:\p\t!fqYpHjrn[V1s8N#prVlZmq>U0gp&=R^nG_kTli-,Ij8S!9h#>n(df.Pka8X!U^AbP>
Yl:^&T`1J\R/W3HMuJJ1J,XcnFoH@ZD#S,I@K'X5?2dt*<W5nq;#X5h9`@Z`8cD9[7f,XR7.N^l6Ms1C
6i0:N7JfRR8H)3[9)_N`:&[ug;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>
_Z%UTcMl8kf)FJ(hu;[8kl0lHmf)_ToD\F^q#:*gqYpHjriuKSs7u]orqlZnqYp<iq#9scoD\7Ymf)PO
kl0WAi;VO2f)F+scMkl`_u@CL[JmE0X8\dkSGnoTOT(1;LAl]%HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml
:B!rd9)_E]8H)*U7K,^G6d%gh6i0:N7JfRR8H)3[9)_N`:&[ug;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&En
LAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UTcMl8kf)FJ(hu;[8kl0lHmf)_To)SFap%A=ZrqZQirr)`nJcD_L
rr2fnrqcWirqHNeo`4[aoD\7Ymf)POkl0WAi;VO2f)F+scMkl`_u@CL[JmE0X8\dkSGnoTOT(1;LAl]%
HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml:B!rd9)_E]8H)*U7K,^G6d%gh6i0:N7JfRR8H)3[9)_N`:&[ug
;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UTcMl8kf)FJ(hu;[8kl0lH
mf)_ToD\F^q#:*gqYpHjrdk+Fs0;V'rqlZnqYp<iq#9scoD\7Ymf)POkl0WAi;VO2f)F+scMkl`_u@CL
[JmE0X8\dkSGnoTOT(1;LAl]%HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml:B!rd9)_E]8H)*U7K,^G6i99t
6M3_C7/fXP7fGsX8cD?]9`@cc;#XAl<rQ5#?2e41@K's>C]8;PFoH^dJ,Y3%MuJh;R/WZUT`2"kYl;'0
^Ac"Ka8XB`df.hsh#?41j8S9AlMg5NnG`%Yp&=acq>U6irVQTMs5!_SrqlZnqYp<iq#:!do`"C[n,DYP
l2KcCi;VR3fDa;!ci2)d`W!XO\Gii6Y5Y6rTDk>ZP5^I?M>i&)I/\BiEW0kTCAqcC@K'X5=oMM%<W5kp
:]=)f9E%Q_8GbpV7f,XR7/0-r6Ms1F6i0:N7JfRR8,c'Y8cDB^:&[rf;>sSp=8lA%?iFO6AH$?CD>nPS
GlE*iJGtE)NrG4@S,T)[V#IOrZMqB5^])1Nb5T`de,Ituh>ZC4jSnECm/HJQnc&1[pAXjdq>U6irVQT!
s+14Gs8N#prVlZmq>U0gpAX^`nc&"Vli-/JjSn*:h>Z%*eGdenb5TBZ^](bBZi7-,V#I"cS,STMNW+e6
JGsrqGlD^^DZ4DMAH$$:?iF4-=8l5!;>sAj:&[fb9)_BY8,c!T7K,^M6d%gk6i0:N7JfRR8,c'Y8cDB^
:&[rf;>sSp=8lA%?iFO6AH$?CD>nPSGlE*iJGtE)NrG4@S,T)[V#IOrZMqB5^])1Nb5T`de,Ituh>ZC4
jSnECm/HJQnc&.\p&Xm\rqQKgrqcWmqu20HWW2tsqu-NjrqZQg!VZ3epAX^`nc&"Vli-/JjSn*:h>Z%*
eGdenb5TBZ^](bBZi7-,V#I"cS,STMNW+e6JGsrqGlD^^DZ4DMAH$$:?iF4-=8l5!;>sAj:&[fb9)_BY
8,c!T7K,^M6d%gk6i0:N7JfRR8,c'Y8cDB^:&[rf;>sSp=8lA%?iFO6AH$?CD>nPSGlE*iJGtE)NrG4@
S,T)[V#IOrZMqB5^])1Nb5T`de,Ituh>ZC4jSnECm/HJQnc&1[pAXjdq>U6irVQSFs7u]"s8N#prVlZm
q>U0gpAX^`nc&"Vli-/JjSn*:h>Z%*eGdenb5TBZ^](bBZi7-,V#I"cS,STMNW+e6JGsrqGlD^^DZ4DM
AH$$:?iF4-=8l5!;>sAj:&[fb9)_BY8,c!T7K,^M6i99t6MNqF7/fXP7fGpW8H)3[9E%Zb:]=5j<W6)!
=oMe-@fBp;CAr)LEW14^I/\ZqM>iP7P5^sMT`1bdY5Ya+\Gj8B`;[pYci2DmfDaV*iVqp;l2L&Kn,DkV
o`"R`q#:*gqYpHjrn[V1s8N#prVl]nqYp<ipAX^`o)A.XmJcDMjo4<>hu;@/f)F(rbPoN\_>_%F[JmB/
VuEFiT)OuROT(4<KDpE#I/\3dEW0kTB)Z<>@/aF1=oMJ$;Z9Pm:]=)f9)_E]8H)-V7fGjU7.3M!6N':C
6iKLQ7JfRR8,c'Y8cDB^:&[rf;>sJm<rQ5#>lJ.1AH$3?DZ4VSF8gRdJ,Y*"N;eq<Pl@9RUAh(iYPtp.
])KPF`r=0\dJh\qgA^"/ir8'=lMg/LnG`"Xp&=[aq>U6iqu6QkriuKSs7u]orqlZnqu6Hkq>U*eo`"F\
nG_hSlMfoEj8Rs8gA]\&dJh>g`r<gR])K,:YPtI!UAgb`Pl?dDN;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*
<rQ"r;>sAj:&[ca8cD9[8,GdT7K,^D6et)t6iKLQ7JfRR8,c'Y8cDB^:&[rf;>sJm<rQ5#>lJ.1AH$3?
DZ4VSF8gRdJ,Y*"N;eq<Pl@9RUAh(iYPtp.])KPF`r=0\dJh\qgA^"/ir8'=lMg/LnG`"Xo`4[dp@eL]
rqcWkrr)`nJcD_Lrr2fnrql]krqQTgp&Ogco`"F\nG_hSlMfoEj8Rs8gA]\&dJh>g`r<gR])K,:YPtI!
UAgb`Pl?dDN;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*<rQ"r;>sAj:&[ca8cD9[8,GdT7K,^D6et)t6iKLQ
7JfRR8,c'Y8cDB^:&[rf;>sJm<rQ5#>lJ.1AH$3?DZ4VSF8gRdJ,Y*"N;eq<Pl@9RUAh(iYPtp.])KPF
`r=0\dJh\qgA^"/ir8'=lMg/LnG`"Xp&=[aq>U6iqu6Qkrdk+Fs0;V'rqlZnqu6Hkq>U*eo`"F\nG_hS
lMfoEj8Rs8gA]\&dJh>g`r<gR])K,:YPtI!UAgb`Pl?dDN;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*<rQ"r
;>sAj:&[ca8cD9[8,GdT7K,^H6iBC.6LR;@7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]I
E;jqXI/\WpKDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMRo)A=]pAXmeqYpBk
rVQTMs4[MPrr2lqr;QTmqYp6gpAX^`nG_kTm/H2IjSn*:h>Z(+eGdenao96X^Ab\BZi7'*VZ*7fRf8QN
O8at7KDpB"GlDgaDuOPOBDuE?@/aI2>5hS%;u9Dj:B!rd9)D3W8,c!T7K,^%6i9=K7/fXP7fGpW8c)-Z
9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,
i;Vg:kPjiImf)_To`"O_p\t$gqu6NmrVlf!s+14Ds8N#srVl`oqu6Hkp\smco`"@Zmf)SPkPjQAi;VR3
f`'D"ci2&c`;[LM\c/r7XT#*rT`1DZPl?aCM#N&+J,X]lFT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h9`@Z]
8c)$W7f,XR7*@sp7/fXP7fGpW8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7Pl@-N
T`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,i;Vg:kPjiImf)_To`"L`pAt$_rqcWkrqucorr.KKU]:>mrr)io
rql]k!Vc<gp\smco`"@Zmf)SPkPjQAi;VR3f`'D"ci2&c`;[LM\c/r7XT#*rT`1DZPl?aCM#N&+J,X]l
FT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h9`@Z]8c)$W7f,XR7*@sp7/fXP7fGpW8c)-Z9`@c`;#XGn<rQ;%
>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,i;Vg:kPjiImf)_T
o`"O_p\t$gqu6NmrVleIs7ZJqs8N#srVl`oqu6Hkp\smco`"@Zmf)SPkPjQAi;VR3f`'D"ci2&c`;[LM
\c/r7XT#*rT`1DZPl?aCM#N&+J,X]lFT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h9`@Z]8c)$W7f,XR7/TF!
6i0:N7JfRR8,c*W9)_N`:&@cd<;oqt>5he+@/a[8BDu]GDuOkXGlE3lK`6f,O8bCCRf8uZVZ*[rZi7K6
^Ac(Mb5T`deGe/#h>Z@3jSn?Am/HGPnG`(Zp&=^bqYpBkr;QZorn@D(s8N#sr;QTmqYp9hpAX^`o)A+W
mJc>Kjo49=hYu7.f)F%qbl5]__#CtF[JmB/WW&[lSc4uTP5^C=LAlc'I/\BiF8g(VCAqlF@fBa6>lIk)
<rQ(t;>sAj:&@T_9)_BY8,c!T7INY56hEeE7/fXP7fGpT8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZF
DZ4_VGQ*!hJc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^d/MVqgA]t.ir8*>kl0uKnG`"Xo`"R`q#:-h
qu6NjriZ9Ps7?9irr2ipqu6Hkq#:!do`"F\n,D_Rkl0]Cir7g6gA]\&d/M8gaSs!S]Df5;YPtO#U]-h`
Qi<0IMuJJ1Jc:&rGlDd`DZ4DMBDuB>?iF=0=T2A#<;obo:]=)c9E%Q_8GbpV7f,XC7.3M37/fXP7fGpT
8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!hJc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^
d/MVqgA]t.ir8*>kl0uKnG`"Xo`"Oap]:0brqcWkrquZmJcDDCrr2oprql]k!VlEiq#:!do`"F\n,D_R
kl0]Cir7g6gA]\&d/M8gaSs!S]Df5;YPtO#U]-h`Qi<0IMuJJ1Jc:&rGlDd`DZ4DMBDuB>?iF=0=T2A#
<;obo:]=)c9E%Q_8GbpV7f,XC7.3M37/fXP7fGpT8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_V
GQ*!hJc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^d/MVqgA]t.ir8*>kl0uKnG`"Xo`"R`q#:-hqu6Nj
rdk+Cs/Z2!rr2ipqu6Hkq#:!do`"F\n,D_Rkl0]Cir7g6gA]\&d/M8gaSs!S]Df5;YPtO#U]-h`Qi<0I
MuJJ1Jc:&rGlDd`DZ4DMBDuB>?iF=0=T2A#<;obo:]=)c9E%Q_8GbpV7f,XP7.`n96gmGB7JfRR8,GjS
9)_K_:&[rf;>sPo<rQ5#>lJ+0@fC$>CAr,MF8gC_I/\]rLAm,1P5^jJSc5D`WW'+#[Jmf;_#DFSbPolf
f)FD&hYuO6k5OTDmJcVSo)A:\pAXjdqYpBkr;6KIs4@;Mrr2lqr;QQlq#:!dp&=O]nG_nUl2KlFjSn*:
h#>t*dJhGjb5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3fE;j_RCAqcC@K'X5>5hY'<rQ"r;>X/g
9`@]^8cD9X8,c!Q7JK:>6hj(J7JoUO7fGpT8H)3[9E%Z_:]=5j;Z9_r=T2M'?iFO6AH$?CD>nMRG5cge
JGt6$MZ/\9Q2[9PT`1kgXT#I'\c0>B_Z%^Wc2Q,if`'\*i;Vg:k5OWEn,DkVo)A=]p\sseqYpBkrVQSs
s+14As8N#srVl`oqYp9hpAXaao)A.Xn,DSNkPjQAi;VO2f`':tcMkuc_Z%7J\c/i4X8]$rT`1G[Q2ZjD
M>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#;Z9Pj:]=&e9D_<[8GbpV7efFI7.3M<7/04J7fGpT8H)3[
9E%Z_:]=5j;Z9_r=T2M'?iFO6AH$?CD>nMRG5cgeJGt6$MZ/\9Q2[9PT`1kgXT#I'\c0>B_Z%^Wc2Q,i
f`'\*i;Vg:k5OWEn,DkVo)A=]pAjshq"Xjbrql]nqu20HT`>#jrr)iorqZZjp]1*gpAXaao)A.Xn,DSN
kPjQAi;VO2f`':tcMkuc_Z%7J\c/i4X8]$rT`1G[Q2ZjDM>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#
;Z9Pj:]=&e9D_<[8GbpV7efFI7.3M<7/04J7fGpT8H)3[9E%Z_:]=5j;Z9_r=T2M'?iFO6AH$?CD>nMR
G5cgeJGt6$MZ/\9Q2[9PT`1kgXT#I'\c0>B_Z%^Wc2Q,if`'\*i;Vg:k5OWEn,DkVo)A=]p\sseqYpBk
rVQSFs7ZJns8N#srVl`oqYp9hpAXaao)A.Xn,DSNkPjQAi;VO2f`':tcMkuc_Z%7J\c/i4X8]$rT`1G[
Q2ZjDM>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#;Z9Pj:]=&e9D_<[8GbpV7f5^R7JK:>6hj(E7JfRR
8,GjV8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"K
b5TZbdJheth#?72jSn<@l2L/Nnc&+Yp&=^bq#:-hqu6Qkrn@D(s8N#srVl`oqu6Ejq#:$eo`"C[n,DYP
l2KlFiVqa6h#>k'df.Pk`r<gR^&GG=Z2Um)U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+
<rQ(t;>sDk:]=,g9`%KX8c)$/7KGtJr^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]p
re(3.rf@&Arg`t[rhKIpriuI1rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`n
Y5a(QoDeghrr)iorql]jrqQKerq-3[rpTjProsFFro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tN
rf6u9re(3#rd=]frc8!Vrb;@DraPk6r`oG+r`9"tr_`Ykr_NMgr_32^pdt?Qe40F-pdtHXqb6l^r_WSk
r`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'rndY5
roa:Frp0RPrpp'\rqHEe!;QZkq>U9jr;QZlrdk*Bs8N#srVl`oqZ6Ng!;ZWhrqHEarpg!Vrp0RJroa:>
rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&ko
r_WSir_EGdqb-]Uqa].*r^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&A
rg`t[rhKIpriuI1rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`nJcGHDX8i1u
rr)iorql]jrqQKerq-3[rpTjProsFFro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tNrf6u9re(3#
rd=]frc8!Vrb;@DraPk6r`oG+r`9"tr_`Ykr_NMgr_32^pdtBR!(YO.r^Z`Tr_*,^qbI,er_`Yor`9#%
r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJ
rpTjWrq-3arqQKgrql]mrr)`ngAfe)rr2fnrquclrqQKerq-3\rpTjSrp0RIro="9rn[S*rm^qnrlP/X
rkJHCrj;[.ri#gkrgs+Trf[8@reLK*rdXolrcS3[rb_XKrau.<ra5Y0r`K/$r`9"rr_`Pgqb?iYr^m)[
f1,g3!D#c\8bbsX:&[ob:]=5j;Z9_r=8l>$>lJ(/@K'm<C&VuKEW1+[GlE3lKDpZ*NrG4@QN!KTUAh+j
YPtp.\c0AC`;[mXci2DmfDaV*i;Vd9kl0lHmf)\So)A:\p\t!fqYU3irVQSss+14As8N#prVl`oqYp9h
p\sgao)A+Wmf)POkl0WAi;VR3fDa;!ci2&c`;[ON\c/u8YPtL"U]-kaQN!'HNrFh5KDpB"GlDjbEW0hS
C&V`D@K'X5>lIk)=8l8";Z9Pj:]!l]9E%N^8CpB28H)3U9E%Zb:A[id;>sJm<rQ2"=T2S)?N+C4B)ZND
D>nPSFoHXbJ,Y*"L]3>5P5^dHT)PJ`W;a""[/RW8^])1Nao9Wce,Ituh>Z@3j8S9AlMg5Nn,DnWo`"Ua
q#L6lqYL*err)`nJcDDCrr2fnrqlfnq>gBkq#:$eo`"F\n,DbSli-,Ij8S!9h>Z%*eGdenao96X^](eC
[/R9.W;`RkT)P&TP5^L@L]2r*J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r;>X/d:&%B\8cD948,c'Y
8bbsX:&[ob:]=5j;Z9_r=8l>$>lJ(/@K'm<C&VuKEW1+[GlE3lKDpZ*NrG4@QN!KTUAh+jYPtp.\c0AC
`;[mXci2DmfDaV*i;Vd9kl0lHmf)\So)A:\p\t!fqYU3irVQSFs7ZJns8N#prVl`oqYp9hp\sgao)A+W
mf)POkl0WAi;VR3fDa;!ci2&c`;[ON\c/u8YPtL"U]-kaQN!'HNrFh5KDpB"GlDjbEW0hSC&V`D@K'X5
>lIk)=8l8";Z9Pj:]!l]9E%K`84W_Of15g2r^llXr_<AeqbR2gr_i_rr`B)$r`oG/raGe<rb;@Krc.p[
rcnElre(3*rf6u@rg*PTrhBCjric=.rji$Crl"fXrm1Smrn%/*ro!e9roj@HrpKdSrpp'\rqHEfrqcNi
rr)`ngAf\&qu-NlrqcWhrqHEbrq$$Vrp9XKroF(<rnm_/rmq(rrlkA^rk\TGrjMg2riH*rrh07Zrg!JE
rf$i3rdk&srcnEarc%jQrb;@BraPk6ra#M,r`K/"r`&kpr_WJfqb@&`r^u`Qmn!+C!)!/]qb6u`r_NDf
r_i_or`/r"r`];,ra5Y6rac"BrbVRQrcJ-brdFcsreCE2rfI,ErgNhZrhf[rriuI2rk&0Grl4r]rmC_q
rn@A/ro3q<rosFKqsaUVrq69brqZQiqu$HlW;hGKnGiCarquclrqQKerq69^qsaUOrosFCro3q7rn@A&
rmC_hrl>#Srk&0<riuI(rhf[frgNhOrfI,<reLK(rdFcjrcJ-YrbVRJrac";ra5Y1r`];'r`/qsr_i_l
qbR)`r_3;`nk&:@oh#$Qqb6u`r_NDfr_i_or`/r"r`];,ra5Y6rac"BrbVRQrcJ-brdFcsreCE2rfI,E
rgNhZrhf[rriuI2rk&0Grl4r]rmC_qrn@A/ro3q<rosFKqsaUVrq69brqQQj!W)Zir;QYGs-Nc_rVl]q
qYC3grqQKerq69^qsaUOrosFCro3q7rn@A&rmC_hrl>#Srk&0<riuI(rhf[frgNhOrfI,<reLK(rdFcj
rcJ-YrbVRJrac";ra5Y1r`];'r`/qsr_i_lqbR)`r_3;`nk&:@oh#$Qqb6u`r_NDfr_i_or`/r"r`];,
ra5Y6rac"BrbVRQrcJ-brdFcsreCE2rfI,ErgNhZrhf[rriuI2rk&0Grl4r]rmC_qrn@A/ro3q<rosFK
qsaUVrq69brqZQiqu$HlJcG6>W;lbnrquclrqQKerq69^qsaUOrosFCro3q7rn@A&rmC_hrl>#Srk&0<
riuI(rhf[frgNhOrfI,<reLK(rdFcjrcJ-YrbVRJrac";ra5Y1r`];'r`/qsr_i_lqbR)`r_3;`!D,lT
8af4C8c)-W9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[r
Z2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq>U6fr;QZEs4%)JrqlZnqu6Hkq>U-fp&=O]
nG_hSli-)HjSn*:h>Z+,ec*qpbl5Z^_#D"G\,NW2X8]!qT`1G[QN!!FN;eY4JGsurHiA-dEW0nUCAqiE
A,]m8?N+70=oMP&=8l1u;Ys;f:]=,d:%_3T9CbdU9`Rrd:A[ia;#XDm<;otu=T2J&?2e41@/a[8BDuZF
DuOeVFT-XdIf=lsM#N>3OT(RFS,T)[VZ*XqYl;-2]DfVFa8X9]d/MSpg&Bh,i;Vg:kPjfHmJcVSo)A=]
p\t!fqYpBkrVQSms+14>s8N#prVl]nqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR]`,D>
Yl:^&VZ*7fS,S`QOT(4<M#Mr(IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:A[cY9__9O
9`@c`:A[ia;#XDm<;otu=T2J&?2e41@/a[8BDuZFDuOeVFT-XdIf=lsM#N>3OT(RFS,T)[VZ*XqYl;-2
]DfVFa8X9]d/MSpg&Bh,i;Vg:kPjfHmJcVSo)A=]p\t!fq>gBnqtpBkqu20HQiI'aqu$QmqZ-NmqYp<i
p\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR]`,D>Yl:^&VZ*7fS,S`QOT(4<M#Mr(IK"TmFT-:Z
DuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:A[cY9__9O9`@c`:A[ia;#XDm<;otu=T2J&?2e41@/a[8
BDuZFDuOeVFT-XdIf=lsM#N>3OT(RFS,T)[VZ*XqYl;-2]DfVFa8X9]d/MSpg&Bh,i;Vg:kPjfHmJcVS
o)A=]p\t!fqYpBkrVQSFs7$&es8N#prVl]nqYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BP$d/M8ga8WmR
]`,D>Yl:^&VZ*7fS,S`QOT(4<M#Mr(IK"TmFT-:ZDuOMNB)Z<>@/aL3?2e"+=T2D$<;oem;#=&f:'"'`
rCurYpe10Or_<8bqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07f
ri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQirql]nqu5+FeGoOIqu-Nlrql]k
rqHEcrq-3ZrpKdQrosFEro3q6rn@A'rmC_jrlY5WrkABCrj2U-ri5smrh'1Zrfd>Brepc0rdt,urcnEb
rc.pTrbDFFrac";ra5Y1r`];(r`9"ur`&kpqbd>hqbR2dk"Y_Jr_EMjr)!AiqbmDmr`/qur`T5)ra#M1
raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4E
rpB^Rrp]pZrq69brqcWkrqucoqu3PoJcG6>rr2fnrqucmrqcWgrq??`rp]pTrpB^LroX4>rndY.rn%.s
rm(McrkeZKrjr*8ric=$rhKIbrgWnNrf@&:re:?'rdOikrcS3[rbh^Mrb)4@raPk6ra#M,r`T5$r`/qs
r_iVjr_WJfr_DTMqbI,dqb[8hqbmDmr`/qur`T5)ra#M1raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&B
rgWnZrhKImriZ7,rjr*CrkeZWrltGirn%/'rndY6roX4ErpB^Rrp]pZrq69brqcWk!;llqr;QZlrdk*9
s8N#pr;lio!;uinrqcWgrq??`rp]pTrpB^LroX4>rndY.rn%.srm(McrkeZKrjr*8ric=$rhKIbrgWnN
rf@&:re:?'rdOikrcS3[rbh^Mrb)4@raPk6ra#M,r`T5$r`/qsr_iVjr_WJfr_DTMqbI,dqb[8hqbmDm
r`/qur`T5)ra#M1raPk;rb)4Frbh^TrcS3brdOitre:?0rf@&BrgWnZrhKImriZ7,rjr*CrkeZWrltGi
rn%/'rndY6roX4ErpB^Rrp]pZrq69brqcWkrqucoqu20HnGfHerr2fnrqucmrqcWgrq??`rp]pTrpB^L
roX4>rndY.rn%.srm(McrkeZKrjr*8ric=$rhKIbrgWnNrf@&:re:?'rdOikrcS3[rbh^Mrb)4@raPk6
ra#M,r`T5$r`/qsr_iVjr_NVk:]4)g:?G:J:B"&d;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZFDZ4YT
FoHXbIf=otL&R#0O8b@BS,T&ZU].:mY5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Zp&=^b
qYpBkr;QZlrm^tts8N#prVl`oqu6Hkp\smcp&=L\nG_nUlMfuGjo43;h#?"+e,I_nc2P]]_Z%:K[f3T3
Y5Y<tUAgeaQN!*IO8b"8K`6N$IK"KjFoH@ZDZ4JOBDuKA@K'[6?N+4/=oMP&=8l5!<;ohq;Ys>I;#X;l
;Z'Gl;uTbq<W6)!=T2J&>lJ%.@/aU6AH$6@D#S>OE;k"ZH2`6kJGt9%M>iS8PQ$mITDkVbVZ*atZMq<3
^AbtJ`W"-]d/MMng&Bh,i;Vj;kl0lHn,DhUnc&4\pAXgcqYpBkr;QZlri#jJs7$'frqlZnr;QTmqYp6g
pAXaanc&%Wn,DVOkPjTBi;VO2g&BJ"d/M;h`W!aR^AbS?ZMq$+VZ*=hTDk/UPQ$XBM>i2-JGsurGlDjb
E;jbSD#S)HAc?-;@/aL3>lIn*=T2D$<W5ts;uT\l;;G(J;>X8j;uTbq<W6)!=T2J&>lJ%.@/aU6AH$6@
D#S>OE;k"ZH2`6kJGt9%M>iS8PQ$mITDkVbVZ*atZMq<3^AbtJ`W"-]d/MMng&Bh,i;Vj;kl0lHn,DhU
nc&4\pAXgcqYp?lquQ`nrr)`nJcD):rr2fn!W;iqr;QTmqYp6gpAXaanc&%Wn,DVOkPjTBi;VO2g&BJ"
d/M;h`W!aR^AbS?ZMq$+VZ*=hTDk/UPQ$XBM>i2-JGsurGlDjbE;jbSD#S)HAc?-;@/aL3>lIn*=T2D$
<W5ts;uT\l;;G(J;>X8j;uTbq<W6)!=T2J&>lJ%.@/aU6AH$6@D#S>OE;k"ZH2`6kJGt9%M>iS8PQ$mI
TDkVbVZ*atZMq<3^AbtJ`W"-]d/MMng&Bh,i;Vj;kl0lHn,DhUnc&4\pAXgcqYpBkr;QZlrdk+=s/>ts
rqlZnr;QTmqYp6gpAXaanc&%Wn,DVOkPjTBi;VO2g&BJ"d/M;h`W!aR^AbS?ZMq$+VZ*=hTDk/UPQ$XB
M>i2-JGsurGlDjbE;jbSD#S)HAc?-;@/aL3>lIn*=T2D$<W5ts;uTYq;,R9hh,+)JqbmDlr`&ksr`B)$
r`T5*ra#M2raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&Brg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"
rn[S3roO.Crp'LOrp]pWrq69arqHEgrql]mrr)`neGmqrrr2fnrqucmrqZQgrqHEarpg!Vrp9XLroj@@
ro!e4rn.5"rm1Sfrl>#Srk8<?rj)O+ri#gjrgs+WrfmDDrf$i4rdk&urd=]grcA'Wrbh^Nrb2:@raPb3
ra#M.r`];(r`K/$r`8nrr`&,\r`&bp!*0,$<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\To
Jc:K)MuJh;Pl@*MT)PJ`W;`t!ZMqB5^&GkI`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9j
r;6Hlrh]XGs6]jcrqlZnr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+
W;`OjT)P/WPl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;T\p
<rQ2"=T2J&>5he+?2J".@K'd9B`;cGDZ4SRF8g@^I/\ToJc:K)MuJh;Pl@*MT)PJ`W;`t!ZMqB5^&GkI
`r=3]ci2Gnf`'b,i;Va8kl0lHm/HJQo)A:\p\sseq>U9jquH]nrVleIs,m?\rqu]prVl`oqu6Ejq#:$e
o`"C[n,D\QlMg#Hir7m8hYu1,eGdenbl5Z^_>_.I\,N]4Y5YC!UAgb`RJrHMOT(4<M#Mu)J,XipG5cR^
DuOYRC]8#HA,]s7?iF@1>lIq+=oMP&=8l7t<W5t^;uTbn<W6%u=8l>$=oMV(>lJ%+?iFL5A,^0@CAr,M
DuOhWG5cmgIf=otM#N>3OT(LDRJrfWUAh+jY5Ya+\Gj2@_>_IRbl5rfeGe,"hYuI4ir80@lMg/Ln,DnW
o`"Uaq#:*gqu6NjrVleIs6]i_s8N#prVl`oqu6Ejq#:$eo`"C[n,D\QlMg#Hir7m8hYu1,eGdenbl5Z^
_>_.I\,N]4Y5YC!UAgb`RJrHMOT(4<M#Mu)J,XipG5cR^DuOYRC]8#HA,]s7?iF@1>lIq+=oMP&<rl?&
!*8tsr`&,\r`&bpr`9#"r`K/&r`];+ra#D.raGe9rb2:Grbh^RrcA'^rd=]ordk')repc;rfmDMrgs+`
ri#h!rj)O5rk8<Irl4r]rm1Snrn.5,ro!e8roj@Hrp9XQrpp'\rqHEerqZQjrquZlrr1=FcN!nCqu-Nl
rqcWirqQKbrpp'XrpKdOrosFDro="8rnIG(rmUkmrlY5ZrkSNFrjVm2riH*trh9=^rgEbLrfI,<reCE(
rdXonrce?arc%jRrbMLGrau.@raGe6ra5Y1r`oG,r`];(qcNi!kuRdbqcEi$!EiS)>5hb*>lJ%.?iFI4
@K'j;B)ZHBC]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'\,O#=_#D=Pb5T`de,Itug]$+0
ir8'=l2L#Jmf)_ToD\C]q#:*gqYU3irVQSjs+148s8N#prVl`oqYp<iq#9pbo)A.Xmf)POl2KfDj8Rs8
g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0tU&LV^RJrELOT(4<LAlf(J,XcnGQ)aaE;j_RC]7uGB)ZB@@K'[6
?iF@1>lIt,>5h\%=T2Cd<rQ1t=T2J&>5hb*>lJ%.?iFI4@K'j;B)ZHBC]85NE;k"ZGlE$gJ,Y*"LAm/2
O8b@BRJrcVU&M"iXT#I'\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#Jmf)_ToD\C]q#:*gqYU0jr;llq
qu20HNrT+X!WDuqrVl`oqYp<iq#9pbo)A.Xmf)POl2KfDj8Rs8g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0t
U&LV^RJrELOT(4<LAlf(J,XcnGQ)aaE;j_RC]7uGB)ZB@@K'[6?iF@1>lIt,>5h\%=T2Cd<rQ1t=T2J&
>5hb*>lJ%.?iFI4@K'j;B)ZHBC]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'\,O#=_#D=P
b5T`de,Itug]$+0ir8'=l2L#Jmf)_ToD\C]q#:*gqYU3irVQSFs6]i\s8N#prVl`oqYp<iq#9pbo)A.X
mf)POl2KfDj8Rs8g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0tU&LV^RJrELOT(4<LAlf(J,XcnGQ)aaE;j_R
C]7uGB)ZB@@K'[6?iF@1>lIt,=ohc/!*T2$r`A>br`Au!r`T5(r`fA,ra#M1ra>_6ral(@rb)4Grbh^S
rcS3brd+Qnre(3)rf$i;rfd>Lrgj%^ri#gtrilC2rk&0Frl+lZrm1Smrn%/(rnm_7roO.Drp0ROrp]pY
rq-3brqZQiqu$Hlqu5"CcN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(qrlkA_rkeZK
rk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+r`oG,r`\Ph
r`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.
]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQSjs+148s8N#prVl`oqYp<i
q#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3K)U<"
I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BBCAr)LDuObU
F8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"X
oD\F^q#:*gqYU0jr;llqqu20HNrT+X!WDuqrVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%q
bl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..
>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILq
Yl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQSFs6]i\s8N#prVl`o
qYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XBN;eV3
K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i410?2e+.>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cG
D>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]G
mf)_To)A7[p&=acq>U6fr;QZlrmCbhs7lQlqu6Hkq>U-fpAX^`nG_nUmf)MNkPjQAi;VR3gA]V$dJhGj
aSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQOT(7=MuJD/Jc:/uHiA9hFoHC[E;jeTD#S2KC&VcEAc?3=@fBg8
?iFI+?hdt&?iFI4?N=L8@:B.EraYq=rb)4ErbMLLrbqdTrc.p[rcnEhrdXp!re19/rf6u>rg3VRrh'1a
ri#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjUrq-3_rqHEfrqcWkq#-ibJcFp5q#13h
rqcWirqHEcrq-3ZrpTjSrp'LGroF(:rn[S-rm^qprm(Marl"fNrk&0<riuI)rhoairh'1Yrg3VGrf-o8
re19%rdXoorcnEbrc.pVrbqdPrbDFHrb)4AraYq:raGe5ra>D+pg3`&ra>_4raGe8raYq=rb)4ErbMLL
rbqdTrc.p[rcnEhrdXp!re19/rf6u>rg3VRrh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(B
rp'LNrpTjUrq-3_rqHEfrqcWkqY^HnrIP!&rrN)sqYgEjrqcWirqHEcrq-3ZrpTjSrp'LGroF(:rn[S-
rm^qprm(Marl"fNrk&0<riuI)rhoairh'1Yrg3VGrf-o8re19%rdXoorcnEbrc.pVrbqdPrbDFHrb)4A
raYq:raGe5ra>D+pg3`&ra>_4raGe8raYq=rb)4ErbMLLrbqdTrc.p[rcnEhrdXp!re19/rf6u>rg3VR
rh'1ari#guriuI2rk&0Erl"fWrm(Mjrm^r$rnRM2roF(Brp'LNrpTjUrq-3_rqHEfrqcWkq#,dDkPq1S
q#13hrqcWirqHEcrq-3ZrpTjSrp'LGroF(:rn[S-rm^qprm(Marl"fNrk&0<riuI)rhoairh'1Yrg3VG
rf-o8re19%rdXoorcnEbrc.pVrbqdPrbDFHrb)4AraYq:!F]C:@K'X5@.dn%?MIn,@/aO4@K'a8A,^'=
BDuWEC]8/LDuO_TEW1+[GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32]DfSE`;[jWcMl5jeGe2$
h#?72jSnBBlMg5Nn,DhUo`"O_p\t!fqYpBerQG5as8N#prVl`oqu6Hkq#:!dp&=R^nc&"Vli-/JkPjK?
hu;F1f)F.tci2/faSs*V^Ab_C[f3N1XT#0tUAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4MP
CAqoDBDuNBAb]d7@eaC/@eaI4AH6<CAnLpQrb;@Hrb_XPrc%jWrcS3`rd+Qkrdb!#reCE/rf@&Arg!JP
rh'1ari#gsrilC1rjr*Crkn`UrlkAfrmUktrnRM1ro3q?rosFJrpTjVrq$-^rqHEerqcWkrqucoqu35f
JcFp5rr2fnrqucmrqcWhrq??arq$-ZrpTjProsFFro3q7rnRM(rmUkmrlkA_rkn`Lrjr*;rilC'ri#gj
rgs+Yrg!JGrf@&8reLK*rdaurrd+QercJ-[rc%jSrb_XLrb21Arau.@pga;4pgO&/pga;7rau%?rb;@H
rb_XPrc%jWrcS3`rd+Qkrdb!#reCE/rf@&Arg!JPrh'1ari#gsrilC1rjr*Crkn`UrlkAfrmUktrnRM1
ro3q?rosFJrpTjVrq$-^rqHEerqcWkrqucorVcisrdk*'rrN,u!<2lorqucmrqcWhrq??arq$-ZrpTjP
rosFFro3q7rnRM(rmUkmrlkA_rkn`Lrjr*;rilC'ri#gjrgs+Yrg!JGrf@&8reLK*rdaurrd+QercJ-[
rc%jSrb_XLrb21Arau.@pga;4pgO&/pga;7rau%?rb;@Hrb_XPrc%jWrcS3`rd+Qkrdb!#reCE/rf@&A
rg!JPrh'1ari#gsrilC1rjr*Crkn`UrlkAfrmUktrnRM1ro3q?rosFJrpTjVrq$-^rqHEerqcWkrquco
qu20HkPq1Srr2fnrqucmrqcWhrq??arq$-ZrpTjProsFFro3q7rnRM(rmUkmrlkA_rkn`Lrjr*;rilC'
ri#gjrgs+Yrg!JGrf@&8reLK*rdaurrd+QercJ-[rc%jSrb_XLrb21A!G5pDB)ZB:A,]s4@JaO/A,^'=
B)?6?C&VlHD>nGPE;jnWFoHR`HN&<kJGt3#LAm&/O8b=AQ2[9PTDkSaW;`jsYl;*1])KGC_u@^Ubl5rf
e,Iqth#?41ir8-?l2L#Jn,DkVoD\F^p\sseqYpBkr;QZlrlb>bs8N#prVl`oqu6Hkq#:$epAX^`o)A+W
mf)POkl0ZBir7j7gA]\&df.VmbPoQ]_#D%H]Df/9Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<i
G5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHBB`MlKC23``rbVRNqeuIRrcA'^rcnEhrdXoure(3,rf$i;
rf[8IrgWnZrhKIiriZ7)rj2U9rkABJrl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEerqcWk
rqucoqu35fJcFp5rr2fnrqucmrqcWhrqHEcrq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#Rrk8<C
rj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4E
rbDFJrbVRNqeuIRrcA'^rcnEhrdXoure(3,rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABIrl>#]rm:Ym
rmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEerqcWkrqucorVcisrdk*'rrN,u!<2lorqucmrqcWhrqHEc
rq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#Rrk8<Crj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$
rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4ErbDFJrbVRNqeuIRrcA'^rcnEhrdXoure(3,
rf$i;rf[8IrgWnZrhKIiriZ7)rj2U9rkABIrl>#]rm:Ymrmq)&rnm_7roF(Brp'LNrpTjWrq-3`rqHEe
rqcWkrqucoqu20HkPq1Srr2fnrqucmrqcWhrqHEcrq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#R
rk8<Crj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$rdXoord"KdrcA'ZqeuINrbVRL!GZ?LCAqrEBDuN3
Ac$*=BDuWECAr#JD#S;KDuObUF8g@^GlE'hJ,Y#uKDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJ
a8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`p\sseqYpBkr;QZlrlb>bs8N#mrVl`oqu6Hkq#:$e
p&=U_nc&%WmJcGNkl0]CiVqa6g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^SGnfQP5^OAMuJS4
LAlc'JGt#sHiA?jGlDgaErL(XE;OSQDWYg5DZ4PSE;X\SEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=A
Q2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBk
r;6Hirh'4As6'F]rqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!d/M>ia8X$V^](kE
[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qSDuOY:D>S5MDu4MQEW1%Y
FT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6
jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6HkrW3#tJcCH(!WN&urqQHkr;QTmqYp9hp\sjbo`"C[nG_hS
li-,Ijo46<hu;C0g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]n
HN&0gFT-=[EW0qSDuOY:D>S5MDu4MQEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*Ro
Y5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6Hirdk+4s.B>j
rqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7f
T)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0nXDf>Smrbgk8qelCOqf)OSrcA'\rcnEfrd4Wn
rdXoureCE.repc:rf[8Grg`tZrh07fri,n"rj)O4rk&0Erkn`Urm(MirmLf!rnRM1ro*k<roj@IrpB^S
rpg!Zrq69brqZQirql]mqu-EkbQ#ccq#:0hrquclrqZQgrq??`rq$-ZrpTjRrosFFroO.;rndY0rmq(t
rm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=repc1re19&rdausrd=]krcnEcrcS3^rc?n8
rc8']!H`G_FoHR`GlE$gI/\ToJGt0"K`6`*MuJb9OT(LDQi<KRTDkVbVZ*[rYPtj,\Gj,>^])1NaSsE_
ci2Dmf)FJ(hYuI4jo4HBl2L)Ln,DkVoD\F^pAXjdq>U6fr;QZirh'4As6'FWrqlZnr;QQlq>U0gpAX^`
oD\:Zn,D_Rl2KlFjo43;hYu=0f)F.tci2/faSs-W^](kE\Gif5YPtX&VZ*@iTDk>ZQi<6KOT(7=MuJJ1
K`6T&JGt#sI/\HkGlDmcFoHL^F5:j8F8g:\FoHR`GlE$gI/\ToJGt0"K`6`*MuJb9OT(LDQi<KRTDkVb
VZ*[rYPtj,\Gj,>^])1NaSsE_ci2Dmf)FJ(hYuI4jo4HBl2L)Ln,DkVoD\F^pAXjdq>U6fr;QZkrW3#t
JcCH(!WN)prqlZnr;QQlq>U0gpAX^`oD\:Zn,D_Rl2KlFjo43;hYu=0f)F.tci2/faSs-W^](kE\Gif5
YPtX&VZ*@iTDk>ZQi<6KOT(7=MuJJ1K`6T&JGt#sI/\HkGlDmcFoHL^F5:j8F8g:\FoHR`GlE$gI/\To
JGt0"K`6`*MuJb9OT(LDQi<KRTDkVbVZ*[rYPtj,\Gj,>^])1NaSsE_ci2Dmf)FJ(hYuI4jo4HBl2L)L
n,DkVoD\F^pAXjdq>U6fr;QZirdk+4s.B>drqlZnr;QQlq>U0gpAX^`oD\:Zn,D_Rl2KlFjo43;hYu=0
f)F.tci2/faSs-W^](kE\Gif5YPtX&VZ*@iTDk>ZQi<6KOT(7=MuJJ1K`6T&JGt#sI/\HkGlDmcFTHT+
!-J3]h/WF8rcJ-^rc\9crd+QkrdOisrdt-&reCE1rf6u>rfmDKrgWnZrhKIiriH+&rj)O5rk&0Erl"fW
rlkAfrmUktrnRM0ro!e;roa:FrpB^Rrpg!Zrq69arqQKgrqcNirr)WkbQ#Q]rr2fnrqucmrqcWirqHEc
rq-3\rp]pUrp0RJroa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-riH*trhTOdrgj%WrfmDFrf@&<
reg]2re19&rdXotrdOiord+Qhrcn3\mr\>IrceEg!I8tiHN&<kIK"crJ,Y'!K`6f,MZ/V7O8b=APl@-N
Sc5;]V#I:kXT#F&Zi7E4^&GhH_Z%XUbPolfdf.hsg&Bn.iVqj9kPj`Fli-APnc&+Yo`"O_p\t!fqYpBh
r;QZlrga">s5F"WrqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%df.Vmbl5]__Z%=L
^&GJ>Zi70-XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFMFSL"XGlE!fHN&<k
IK"crJ,Y'!K`6f,MZ/V7O8b=APl@-NSc5;]V#I:kXT#F&Zi7E4^&GhH_Z%XUbPolfdf.hsg&Bn.iVqj9
kPj`Fli-APnc&+Yo`"O_p\t!fqYpBhr;QZlrW)tLs+14Ks8N#prVl`oqu6Hkq>U-fpAX^`o)A.Xn,DYP
l2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),K)U9!
JGt#sI/\HkH2`'`FmjGIFoHXbH2`-hI/\QnJGt&tK)UH&M#N;2NW,"<P5^^FRf8lWT`1bdVuEdsYPtm-
[f3u>_#D4MaSsB^d/MJmf)FA%hu;U6ir8-?l2L#Jn,DkVo)A:\p&=^bq>U6iqtp<jrVQSFs5a3Js8N#p
rVl`oqu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG[f3W4YPtX&W;`Ul
T`1M]Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\EmH$KC8rcn3\mr\>IrcnEfrd+QkrdFcrrdXp!re19,
reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Y
rq-3_rqHEfrqcWkqu$Hlqu4\:_Z0W7qu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLem
rm(Marl+lQrkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQj
rdOour.+d!re:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*Crk\TQrlG)arm:Ymrn7;+
rnm_5roF(Arp0RNqsXOTrq-3arqQKgrqcWkrqucoqu2o]JcFU,rr2fnrqucmrqcWirqQKerq-3\qsXON
rp0RHroF(:rnm_0rn7;!rm:YirlG)Xrk\TJrk&0>riuI+riQ0srhKIcrgs+Yrg<\KrfR2@rf-o8re^W/
re19'rdalqpjW*gpjE'hpjW3lqgeZure:?+re^W4rf-o<rfR2Drg<\Rrgs+^rhTOjriQ1'riuI4rjr*C
rk\TQrlG)arm:Ymrn7;+rnm_5roF(Arp0RNqsXOTrq-3arqQKgrqcWkrqucoqu6HlJcC<$qZ$Qoqu-Nl
rql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQrkABDrj_s4ric='rhf[irh07^
rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdXfqre(3(reCE/repc8rf@&@rfd>KrgNhX
rh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:HrpBUOrpp'\rqHEerqZQirql]m
rr)`nJcFU,QN-s`qu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQrkABD
rj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#!IoUtJ,"KiIJA3hIJA9jJ,=cqKDpT(
LAm&/MuJ_8O8b:@PQ$sKRf8oXT`1bdVZ*^sYPtg+\Gj)=^AbtJ`W!sXcMl2idf.r!h#?41i;Vg:kPjfH
mJHAOo)A:\p\sseq>U6iqu6NmrVQT2s2+g8rqlZnr;QTjqYp<iq#9sco`"F\nG_kTmJcALkPjQAi;VU4
h#>n(e,I_nc2Piaa8WpS^AbbD[f3W4Yl:d(WW&doUAgeaSc5#UQN!-JP5^RBNrG":MZ/G2LAlo+K_9rr
JbsusJb=WoKE-],Kn]M\reUQ2rf$i:rfI,BrfmDJrg<\Urh07brhf[oriQ1(rj;[5rk&0Drk\TSrlY5b
rm:Yormq)(rndY4roF(@rosFLrpKdTrpp'\rq69crqZHfrql]mrr)`nQN)O9hZ*TSqu-NlrqlThrqZQg
rq69_rpp'XrpKdQrosFFroF(:rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\N
rfmDFrfI,>rf$i6reUQ.re:?)on*0oqgeZson*0rre:?+reUQ2rf$i:rfI,BrfmDJrg<\Urh07brhf[o
riQ1(rj;[5rk&0Drk\TSrlY5brm:Yormq)(rndY4roF(@rosFLrpKdTrpp'\rq69crqZHfrql]mrr)`n
qYu-HJcGTHrr2fnrqucmqtg<frqQKcrq-3\rp]pTrpB^Lroa:Aro!e4rnRM(rmUknrltGarl>#SrkABD
rjMg4rilC(ri,morhBCargj%Urg*PJrf[8Brf6u:reg]2reCE+re0rrrdjrsrdj`ore19)reCE.reg]6
rf6u>rf[8Frg*PNrgj%]rhBChri,n!rilC/rjMg<rkABJrl>#\rltGhrm^qurnRM0ro!e:roX4ErpB^Q
rp]pXrq-3_rqQKgqtg<hrqucoqu20HhZ&oArr2fnrqucmqtg<frqQKcrq-3\rp]pTrpB^Lroa:Aro!e4
rnRM(rmUknrltGarl>#SrkABDrjMg4rilC(ri,morhBCargj%Urg*PJrf[8Brf6u:reg]2re:H-K`Hi+
K_9rrJbsusJb=WoK`6])LAm#.MZ/S6NrG.>P5^^FQN!9NSc5;]UAh%hWW'%!Yl;$/[f3o<^AbtJa8X6\
c2Q)heGe%uh#?10i;Vg:k5OWEmJcPQnG`"Xo`"O_q#:*dqYpBkr;QZlrke]Ps8N#mrVl`oqu6Hkq>U0g
pAXaao`"C[nG_nUli-/JkPjK?i;VX5g&BV&eGdhocMl&e`W!dS^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[
Rf8WPPl?mGOT(=?NrG":MuJV/M#N2/LAQ](LAlu'M#N83MZJ`orf$i:rf@&?rfd>Hrg*PPrg`t[rh07d
rhoasriZ7)rjDa8rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?rosFJrpTjUrpg![rq69arqQKgrqcWk
rquZlqu2o]JcFU,rr2]krqucmrqcWirqQKdrq69_rpg!WrpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\
rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>Crf@&=rf$i7regK,reLK-qh>$(reL9)reg]5
rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?
rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu6HlJcC<$qZ$Qoq#13irql]krqZQgrq??arq-3[rp]pU
rp0RJroa:?ro!e5rn7;&rm^qorm(Merl+lSrkJHFrj_s8rilC)riH*srhTOdrh'1[rgNhPrfmDGrfI,?
rf6u:repc5pk\p)reC<(reCE-pk\p,repc7rf6u=rfI,Crg!JKrgNhVrh'1_rhTOkriH+%rilC0rj_s?
rkJHLrl+l\rm(Mirm^qurn7;.ro*k9roa:Frp0RPrp]pWrq-3_rq??drqZQirql]mqu-EkJcFU,QN-s`
q#13irql]krqZQgrq??arq-3[rp]pUrp0RJroa:?ro!e5rn7;&rm^qorm(Merl+lSrkJHFrj_s8rilC)
riH*srhTOdrh'1[rgNhPrfmDGrfI,?rf6u:!K2j9MuJV/M#N2/LAQ](LAlu'M#N;2MuJ\7NrG+=OT(IC
Q2[*KRf8iVTDkM_V#I:kXT#C%Yl;'0\Gj/?^])+L`W"*\cMl2ieGe%ug&Bn.iVqj9kPj`Fli-APnG_tW
o`"O_pAXjdq>U6iqu6NjrVQT2s1JC2rqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.t
ci22gao9?[_>_4K^&GSA[f3T3Yl:d(X8]!qV#I(eT`1P^SGnrUR/WENPl?mGP5^R*O8G%<OoU[HPEZ!1
rg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHKrl>#\rltGgrmUktrn@A,ro!e7roF(Arp0RN
qsXOTrq-3`rqHEeqtg<hq#1*hPQ-46f`1sMq#1*erqcWhrqHEcrq-3\qsXONrp0RHroO.<ro!e3rn@A&
rmUkmrltGarl>#SrkJHGrji$:rj)O-riQ1#rhf[jrh9=args+ZrgEbQrg*PJrfd>ErfH9'qiLf?rfd>G
rg*PMrgEbUrgj%]rh9=erhf[qriQ1(rj)O3rji$ArkJHKrl>#\rltGgrmUktrn@A,ro!e7roF(Arp0RN
qsXOTrq-3`rqHEeqtg<hq#1*hp]#gEJcGBBrr2]kqtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-
rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rf[8E
rfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&rnRM2ro*k;roa:H
rpBUOrpp'\rq??crqQBerqlKhqu20Hg]*B8rr2]kqtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-
rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfdGIP5pgGP5^R*O8G%<
P5^[EPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;
kPjfHmJHAOo)A:\pAXgcq"speqtU-erkJKGs82fmrVl`oqu6Hkq>U0gp\sjbo`"F\nG_kTmJcALkl0`D
ir7j7h>Z+,fDa7ud/M;hbPoN\_u@IN^AbbD\Gil7ZMq',Xo>@"W;`XmU\g_`T)P8ZRf8`SR/WHOQM?a?
Pl$aFQN!6MQiNNTR@4&Crg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\rltGhrmUktrn7;,
ro!e8roX4CrosFLrpKdTrpp'\rq69brqQKgrqcWkrqucop&:0TJcFC&qu6KkrqucmrqcWirqQKerq69_
rpp'XrpKdQrosFGroX4>rnm_2rn7;&rmUknrltGcrl4rTrkSNIrk&0>rj;[1ric='ri5srrh]Uhqk3q[
rg`tVrgEbQrg3VMpm(W=qj%/Hrg3VOrgEbSrg`tYqk3q`rh]Umri5t"ric=,rj;[7rjr*CrkSNOrl4r\
rltGhrmUktrn7;,ro!e8roX4CrosFLrpKdTrpp'\rq69brqQKgrqcWkrqucop&=^cJcC<$o`+gfqu-Nl
rql]krqZQgrqHEbrq-3\rp]pTrpB^Lroj@Dro3q7rn[S,rn%.urm:Yhrlb;\rkn`NrkABDrj_s7rj)O,
riQ1"ri#gmrhK@`rgs+ZrgNhSrg<\Org*>EpltZ@rg*PMrg<\QrgNhVrgiqZrhKIhri#grriQ1'rj)O1
rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pXrq-3_rqHEerqZQirql]mrr)Nh
JcFL)OT54Wqu-Nlrql]krqZQgrqHEbrq-3\rp]pTrpB^Lroj@Dro3q7rn[S,rn%.urm:Yhrlb;\rkn`N
rkABDrj_s7rj)O,riQ1"ri#gmrhK@`rgs+ZrgEkUR/iZSR/WHOQM?a?Pl$aFQN!6MR/WNQRf8iVSbo)Z
U].+hW;`grXo>O'ZMq61\Gj)=^AbqI`;[dUbPoccd/MMnf)FA%h>Z@3ir8*>kPj`FmJcPQnG`"Xo`"O_
p\sseq>U6iqu6NmrUp0)s1/1/rqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'
e,Iepci22gaSs0X_>_7L^Ab_C\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc52\
T)kRVrh07arhKIgrhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@G
rp0RPrp]pWrq-3_rq??drqZQirqlTjrr)`nNW4S0ec5XJqu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RK
roj@Bro3q7rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"X
rg`kTpmV2OqjdYVrgs+]rh07arhKIgrhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'
rndY3ro3q<roj@Grp0RPrp]pWrq-3_rq??drqZQirqlTjrr)`nnc+1?JcG9?rr2fnrquZjrqcWirqQKd
rq69_rpg!WrpTjPrp'LHroF(<rnm_3rn@A'rmUkprm1SgrlG)Xrk\TLrkABCrjVm6rilC*riZ7$ri,mp
rhTOfrh9=arh'1]qjm_Vqj[ALrgWeTrgj%[rh'1_rh9=drhTOkri,mtriZ7(rilC/rjVm<rkABHrk\TQ
rlP/arm1SkrmUkurn@A.rnm_7roF(BrosFJrpTjUrpg![rq69arqQKgrqcWkqu$Hlqu20Hec1X/rr2fn
rquZjrqcWirqQKdrq69_rpg!WrpTjPrp'LHroF(<rnm_3rn@A'rmUkprm1SgrlG)Xrk\TLrkABCrjVm6
rilC*riZ7$ri,mprhTOfrh9=a!M>taTDkGZSc5/VS+rHOS,8`TSc55[TDkM_U&LhdV#I:kWW&stY5YX(
Yl;$/\,Nu<^AbnH_>_FQao9Qaci2>ke,ItugA]t.hu;X7jSnBBl2L#Jn,DhUnc&1[p&=[aq#:*gqYpBh
r;QZlrji'8s8N#prVl`lqu6Hkq#:$epAX^`o)%nTm/H>Mkl0`Djo46<hu;I2g&BV&ec*qpci25hao9?[
`;[UP_#D(I])K2<[JmK2Yl:j*Y5YO%X8]*tW;`[kV>d:ZU\gkdV>d=lVZE]nri,mtriQ1&ric=+rj)O2
rj_s=rkABHrk\TPrl4rZrm(Mhrm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hl
qu2KQJcF'rrr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#V
rk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4frhf[mri,mtriQ1&ric=+rj)O2rj_s=
rkABHrk\TPrl4rZrm(Mhrm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu6$`
JcC<$li6t`qu-NlqtpBhrqQKerq??`rposTrp9XMroj@DroO.<rnm_2rn7;&rmh"prm1ShrlP/[rl"fP
rkSNIrjr*<rjDa2rilC*riZ7%ri?$tri#gnqka:fn"]cUrh]Ukrhoapri?%#riZ7(riuI.rjDa8rjr*C
rkJHKrl"fUrlP/brm1Sjrmh#"rn7;,rnm_6roO.Broj@IrpBUOrpp'\rq??crqQBerqlTjrr)`nJcF0u
L]@AQqu-NlqtpBhrqQKerq??`rposTrp9XMroj@DroO.<rnm_2rn7;&rmh"prm1ShrlP/[rl"fPrkSNI
rjr*<rjDa2rilC*riZ7%ri?$t!N;psW;`[kV>d:ZU\gkdV>d@kVuE[pX8]7#Y5YX(Z2V'.[Jm]8])KGC
^])(K`;[dUao9Tbci2;jec+2"g&Bh,hu;U6jo4HBkl0oImJHAOo)A:\pAXgcq"speqtp<jrVQT&s0Mb&
rr2lnr;QTmqYp<iq#:$ep&=U_oD\7Ymf)VQlMg#HkPjQAir7j7h>Z.-g&BP$e,I_ncMl&eb5TE[`;[UP
^](nF]Df>>[f3]6Zi79-Yl:g)Xn\srWq`RjWq`XoXT5L)Y-.Z+rj)O0rjDa7rj_s>rk8<Grk\TPrl4r[
rlb;drm:Ynrmh#$rnIG.rnm_7roF(ArosFIrpB^Rrp]pYrq-3_rqHEerqZQirqlTjrr)WkMZ88-ci<nA
rr)`lrql]krqZQgrqHEbrq-3]rp]pTrpB^Mroj@EroF(<rnm_2rn@A)rmh"srm:YirlkAarl4rUrk\TK
rk/6Brj_s9rjDa3rj)F*riZ7&poFCopo4.jpoFCrriZ.&rj)O0rjDa7rj_s>rk8<Grk\TPrl4r[rlb;d
rm:Ynrmh#$rnIG.rnm_7roF(ArosFIrpB^Rrp]pYrq-3_rqHEerqZQirqlTjrr)Wkmf.k<JcG'9qu6Tn
qu$HjrqcWirqQKerq69_rq$-YrpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHF
rk&0>rjMg6rj2U0qlp(&riPsrri5amql9FlriQ1&qlp(*rj2U3rjVm:rk&0CrkJHKrl"fUrlY5`rm(Mi
rmUksrn7;*rn[S2ro3q<roa:Frp'LMrpTjUrq$-]rq69brqQKgrqcWkqu$Hlq#5jEdf5+&qu6Tnqu$Hj
rqcWirqQKerq69_rq$-YrpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>
rjMg6rj2U0qlg+(XoPX(Xn\srWq`RjWq`XoXo>L#Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2i
e,Insg&Bb*h>Z=2ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirjMj5s82fmrVl`lqu6Hk
q>U0gpAXaao`"F\nc&"Vmf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?
\Gir9[/RE2ZMUohYl:p,Z2h33Za9Y<rjMg8rji$?rk83Drk\TOrl4rYrlb;erm:Ylrmh#"rn.5+rnm_5
ro=">roX4Erp0ROrpTjVrpp'\rq69arqQKgrqcWkqu$Hlp&9jKJcF'rqu6KkrquZjrqcWirqQKdrq69_
rpp'YrpTjSrp0RJroX4@ro="9rndY1rn.5$rmh"qrm:Yjrlb;_rl4rTrkeQIrk/6Brji$<rjMg5rj2U0
qm#:friuI.rj2U2rjMg8rji$?rk83Drk\TOrl4rYrlb;erm:Ylrmh#"rn.5+rnm_5ro=">roX4Erp0RO
rpTjVrpp'\rq69arqQKgrqcWkqu$Hlp&=CZJcC<$li6k]qu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdO
rosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?rj_s9rj;[2rj)F+k-4iirj)O0
rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJrpKdSrpg!Yrq-3_
rq??drqZQirqlTjrr)NhJcF0uL]@8Nqu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4
rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?rj_s9rj2^4ZN.?2ZMUohYl:p,ZMq30[/RN5\,Nr;
]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6i
qtp<jrUp/us02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$eGdhoci25h
bPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[rkABHrkSNLrkn`Rrl+lXrlP/_
rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<hqu$Hlq#5sHJcEsoq#:0hrquZj
rqcWhqtL*^rposUrpTjSrp0RKroj@Bro3h5rn[S.rn.5$rm^qorm1Shrlb;`rlG)Xrl"fRrk\TLrkJHH
rk8<Dqn)j=qmlL3rjhp;rk&0Brk8<FrkJHJrk\TOrl"fTrlG)\rlb;drm1Sjrm^qurn.5)rn[J0ro="=
roj@Grp0ILqsaUVrq-3aqtU'brqlTjrr)Wkkl656JcFs6q#:0hrquZjrqcWhqtL*^rposUrpTjSrp0RK
roj@Bro3h5rn[S.rn.5$rm^qorm1Shrlb;`rlG)Xrl"fRrk\TLrkJHHrk8<Dqn)j=qmlL3rjhp;rk&0B
rk8<FrkJHJrk\TOrl"fTrlG)\rlb;drm1Sjrm^qurn.5)rn[J0ro="=roj@Grp0ILqsaUVrq-3aqtU'b
rqlTjrr)WkJcEsoK`CiHqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0rnIG)rmq(urm:Yj
rm(MdrlY5]rl+lTrkn`OrkSNJrk8EH]`>bF]_f>?])0&5\Gj&9])K>@]`,VD^AbnH_#D1L_u@UR`W!sX
ao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZirilF,s7QBjrVQNl
qu6Hhq>U0gp&=U_oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMlcMl&eb5TN^aSs3Y
`W!gT_Z%CK_#D+5^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@
roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hlp&9XEJcEsop&=shqu$HjrqcNfrqQKcrq-3]rpg!W
rpTjRrp9XLroj@DroF(<ro!e4rnIG+rn7;$rm^qprm:YirlkAarlP/\rl4rVrl"fQrk\KIrkI^3rkJ?G
rk\TNrl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_
qtU0drqcWkqu$Hlp&=1TJcC<$kl:>Trr)`lrql]kqt^6drq69_rq$-Zrp]pUrpB^Orp'LHroX4@ro3q8
rndY/rn@A)rmh"trmC_lrm(MerlY5^rlG)Yrl+lTrkeZNqnW3Gl+[/3qnW3IrkeZQrl+lVrlG)\rlY5a
rltGhrmC_ormh#$rn@A+rndY4ro3q<roX4Drp'LKrpB^Rrp]pWrq$-]rq60`rqZQirqlTjrr)NhJcEso
K`C`Err)`lrql]kqt^6drq69_rq$-Zrp]pUrpB^Orp'LHroX4@ro3q8rndY/rn@A)rmh"trmC_lrm(Me
rlY5^rlG)Yrl+lTrk\]P_#V=K_#D+5^AbnE_#D1L_Z%LQ`W!mVaSs<\b5TWac2Q)hdJhVoec+8$gA]k+
hYuI4ir8$<k5OTDlMg,KmJcSRnG_tWoD\C]p&"O`q>U6iqtp<jrUp/os/Q+rrqlZnr;6BjqYU*fp\smc
p&=R^o)%qUmf)VQlMg#HkPjQAiqq[5hYu@1g&BY'f)F.tdf.Sld/M>ic2Pocb5TN^`r!aS`;@I@_Z%IM
`;[^U`r*jUao9H^bPocccMl2ici2>ke,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgc
q>:$fqtp<jrUp/@s+13is82fmrVl`lqu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,
f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W`W!gQ_sbJA_u%CO`V[[Sao9H^bPocccMl2ici2>ke,IqtfDaJ&
h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp0Os+13$s5O(UrqlZnr;6BjqYU*f
p\smcp&=R^o)%qUmf)VQlMg#HkPjQAiqq[5hYu@1g&BY'f)F.tdf.Sld/M>ic2Pocb5TN^`r!aS`;@I@
_Z%IM`;[aQ`r=*Zb5TT`c2Q#fd/MAjdJhVof)F;#g&Bh,hYZ71j8S-=kPj`FlMg2MmecMQo)A7[p&=[a
p\t!cqYpBhr;QZfrdk*ks+14Ls82fmrVl`lqu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4
h>Z+,f`'J$e,Iepci2;jcMl)fbPoZ`ao99\`Pqeprl"]On&#(Aqo&KQqo8WWrlY5`rltGfrm:YjrmC_o
rmq)#rn7;,rndP1ro="=roa:Frp'LMrpK[Qrpp'[rq69arqHEfqtg<hqu$Hlp&;)nVuQPkq#1*erqcWi
rqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiS
qoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgc
q#:*dqYpBerV6ACs82hIs24m3rqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5
hYu=0gA]e)f`'G#eGdnqdJhMfci25ec2PrUbPTN_c25f`ci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;
kPj]El2L#JmJcPQn,DhUnc&1[p&=[ap\sseq>:$fqtU-brnma,s+14-s7lTgrVQKkqYp<iq#:$epAXaa
o`"C[nG_nUmf)SPli-/Jkl0cEj8S'8i;VU4h#?%,g&BY'ec+(tdf.Ynd.krdcMPlcbjWaPbl5lacMPre
d/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6AC
s24kfs82ikrqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#
eGdnqdJhMgcN);jcMPlcbjWaPbl5lacMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;N
mf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6Ais/5nirqlZnr;6BjqYU*fp\smcp&"@[nc&%Wn,DbSm/H;L
l2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqrdehGkd-8mUd/22jdK.eErmUbormh#"rn.5'rnIG-
rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeJcGWIJcEXfp&=jerquZj
rqcNfrqHEcrq60[rpg!WrpTjSrp9XLrosFEroO.?ro3q8rnm_2rnRM-rn7;'rn%%trm^qrrmL\krm9oU
rm:PirmLepqpbVqrn%/%rn7;*rnRM/rnm_6ro3q<roO.ArosFJrp9OMrp]pWrpp'[rq69arqHEfqtg<h
qu$Hlo)@PHJcC<$huEBKqu-NlqtpBhqt^6crq??aqt'gWrp]pUrpKdPrp'LIroX4AroF(<ro!e5rn[S/
rnIG*rn.5%qpk\qrmUkpqpGDil-K@UqpGDkrmUbormh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RM
qsOIQrpg!Yrq$-^rq??crqZHfrqlTjrr)EeJcEXfJcGWIp&=jerquZjrqcNfrqHEcrq60[rpg!WrpTjS
rp9XLrosFEroO.?ro3q8rnm_2rnRM-rn7;'rn%%trm^qr!RfBrdehGkd-8mUd/25idf._meGe"tfDaG%
g&Bb*h#?./hu;U6ir8$<jo4EAl2L#Jm/-5MnG_tWo)A7[p&=[ap\t!cqYpBhr;QZcrhodfs8N#jrVl`i
qYp9ep\XX_o_\1Xn,DhUmf)SPl2KoGkPjTBjSn09i;VX5hYu@1h#?%,g&BY'f)+"seE56WeGdtuf)4+u
f`'S'gAB\)hYuF0i;Va8j8S0>kPj]El2L&KmJcVSn,DhUnb_tXp&=^_q"X^_r;6Hirdk+?s+13]s8N#j
rVl`iqYp9ep\XX_o_\1Xn,DhUmf)SPl2KoGkPjTBjSn09i;VX5hYu@1h#?%,g&BY'f)+"seE56WeGe"q
f)F>$g&B_&h#?10htu@2ir8!;jo4HBkl0iGm/HDOnG_nUnG_tTo`"O_p\Xa\qYU3frVQTFs+13$s475L
rq66hr:p-fq"sg_p&=U\nc&"VnG_kTm/H8Kkl0cEjo4??iqq[5hu;L3h>Z4/gA]e)f`'J!ec+(\e,.Yo
ebdqsf`'S'gAB\)hYuF0i;Va8j8S0>kPj]El2L&KmJcVSn,DhUnb_tXp&=^_q"X^_r;6Hirdk*\s+14@
s8N#jrVl`iqYp9ep\XX_o_\1Xn,DhUmf)SPl2KoGkPjTBjSn09i;VX5hYu@1h#?%,g&BY'ecF=OrRLns
k0s4Wrmgnsrn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu32e
R/d0bq#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2qq_/)qqLSnrnI2&
!SlK0h>?+/i;VX5iVqj9jSn9?k5OTDl2KuIm/HDOmf)\PnG`%Vo_A1[q>:$fqtp<drVQSFs6ou=s0Vh*
rqQHkr;6BjqYU*`p\sg^oD\7Vn,DbSmJcJOlMg&Ikl0`Djo4??ir7p9hu;R2htu7,h##jpgA]k"h#?.,
hu;R5hu;U6ir8$<jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frmUmus+13ss8N#mrVl`l
qu6Hhq=s^`o_\7ZnGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekqg\'A$h>?+/i;VX5
iVqj9jSn9?k5OTDl2KuIm/HDOmf)\SnG_qVoDA1Tp\t!cqYpBhr:p6frdk*Ys+14:s8N#mrVl`lqu6Hh
q=s^`o_\7ZnGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F0h#Q:.h##jpgA]k"h#?.,hu;R5hu;U6
ir8$<jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frgWqTs7QBdr;6BjqYU*fq"XO]oD\=X
nG_nUmf)SPli-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">rp'LKrp9OMqsaUU
rq#pXqtU0dqtg<hq#'^^JcG3=JcE+Wp&=aaqtpBhqt^6dq"=XXrposUrpTjSrp9XMrp':BroX4AroEt:
ro3q9ro!J,n(mZoro!e7qr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^e,P"!JcF*s
p&=aaqtpBhqt^6dq"=XXrposUrpTjSrp9XMrp':BroX4AroEt:ro3q9ro!J,n(mZoro!e7qr7V8roF(?
roX">rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^JcE4ZJcG*:p&=aaqtpBhqt^6dq"=XXrposUrpTjS
rp9XMrp':BroX4AroEt:ro3q9!T;l9i:Z!rh=]\)i;V^4ir8!;jSn9?k4n0>lMg,Km/-5JnG`"XoD&"U
q#:*dqYpBer:9iVs-<WZrqQHkr;6BjqYU*cp\smco_\7Wnc&"VnG_nUmf)SPli-2KkkjQBk549>jSn34
ipYk!iW/!>j5^."roO%>roa1Brp'LKrp9OMrp]pUrp]pWrq$$ZqtC$`rqZHfrqlTjq#1!eJcG!7JcE"T
q#:'erquZjrqcNfqtL*`rq-*Zqsj[Srp]pUrpKdPrp0RKroj7BroX+>roF(=p#>H!p#>u2roF(?qr[n@
qrn%Erp0RMqsOIQrpTjUrpg!Zqt0dZrqHEfqtg<hqu$6fq#8P<JcC<$c2[S<q#13iqtpBhqt^-`rq??`
qt'^TrpTjUrpTjSrp9XMrp'LHqrdt@qrRh<ro<\2n)<s!ro="=roO%>roa1Brp'LKrp9OMrp]pUrp]pW
rq$-]rq-*]rqHEfqtg<hqu$6fq#5jEZ2]CTl2UPXq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XM
rp'LHqrdt@qrRh<!TW2?j7VF#iUu40j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$f
qtp<drV6AWs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,kQ0o2ros=F
rp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkro)8RcrqlThqt^6cqtL!\rq-3\
rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?crql]mp&4de
`;bDgJcE[grr2Kerqucmqtg3cq"O[Yrq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XO
q!S.NrpTjVrposYrq60_rqHEfq"k!erquHfqu20HW;hGKi;`fUo)8RcrqlThqt^$]qt9s\rpp'YrpTjU
rpTaPrpB^Oqs47Hr944Gp#tl-o'$);qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?crql]mp&4deN;nk:
p&=jerquHdrqcNfrqQKerq?6^rq-3]rpp'YrpTjUrpTaPrpBULqs3)'rp'RNq<\+Jq!S.NrpTjVrpp'[
rq-*\rq??cqtU0dqtg3equ$Hlo)=4?i;\B.W;lPiqu-Nlp&"abrqZQhrqQKerq?6^rq-3]rpp'YrpTjU
rpTaPrpBULqs3)'rp0@GrpBLKrp]pUrpg!Yrq$-]qt9s^rqH<brqZHfqtp9grr)Ee`;bDgJcE[gp&=je
rquHdrqcNfrqQKerq?6^rq-3]rpp'YrpTjUrpTaPrpBULqs3)'rp0@GrpBLKrp]pUrpg!Yrq$-]qt9s^
rqH<brqZHfqtp9grr)EeJcD\KJcF[.p&=jerquHdrqcNfrqQKerq?6^rq-3]rpp'YrpTjUrpTaPrpBUL
!UK(MleUk*lhKiGmJ-,KnG_nUnc&+YoD\CZp&=[ap\Xabq>:$cqtp<jrUTrHs+^RNrpp$er;6BjqYU*f
q"sgbpA=O^o_\7Tnb_hTn,DhRn+c>>mJ-,JmfDnGrp]pUqsaCNrq$$Zrq60^rqH<brqZHfrqlTjp&4R_
JcFR+JcDJEqu60brquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjUqsX=Jn*To<qsXORrpTaRq!n@Tqt0m\
qtC$`qtU0dqtg<hqu$-cp&;f-JcC<$^An*0o)8RcqtpBhqt^6dqtL*`qt9s\qt'UQqsaURrp]gRq!RV<
q!S%Jrp]pUqsaCNrq$$Zrq60^rqH<brqZQirqcWkqu$-cp&9OBV>l,HgAh'Lo)8RcqtpBhqt^6dqtL*`
qt9s\qt'UQqsaURrpTsWn,;_MmdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp/Hs+14K
s82fdrVl`lqtU$bq>U0ap\XX\o_\7Zo)%t5nG_qXo)/(XoC_bTp%\:Yq#:*aqYpBhr:U$]rdk+!s+13<
s82fdrVl`lqtU$bq>U0ap\XX\o_\7Zo)%t5nG_tTo)A7Ro`"OYp\Xabq=sgcqtp<arUp0"s+13$s0_n(
rpp$er;6BdqYU*fq"XU\p&"CYoD\=Xn_N^6nb_nVoC_bTp%\:Yq#:*aqYpBkr;QWerUp/@s.'+?s3^lD
rpp$er;6BdqYU*fq"XU\p&"CYoD\:]naZSJh=1F6qssaXp%87Vq"O[\rqZ?crqlTjp&4R_Jc>`MJcG]K
o)AObq#'parqc<`rqQBbrq>pUqt0%Bp[eLYo_%nSpAXg`q"smaqY9s_r;QZ]rdk+!s+13<s760drVl`l
r:p0gqXs[`q"sgbp@@nRo]Gc<o_%nSpAXg`q"smaqY9s_r;QZ]rj_uZs+13Xs760drV6<cqu6Hbq>U0d
p\smWp&"CDoC_bKp&"I^p\Xa_q>:$`qtp<jr;QZ]rdk*>s+13ts760drV6<cqu6Hbq>U0dp\smXo`4[^
o]Gc<o_%nSpAXg`q"smaqY9s_r;QZ]rdk(Ls+14Bs82fdrV6<fqtp6_q>U0[p\X[Hp%S.\p@e1RqtU'a
p%n[bq#'g`p&9OBbQ!.nOT54Wq#1*gq#($dqtg!]rqQ'YqtB1Fp%J(QqtU'ap%n[bq#'g`p&;/pJcC<$
XT/1so)8@]qtp9ep%eU^o(W%Tk4SE@p%S@Yqt]p]rqlKgqu-Ejp&9OBPQ-46aT)/:o)8@]qtp9ep%eU^
oCi7ZqtB1Fp%J(QqtU'ap%n[bq#'g`p&9OBp]#gEkl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE]`3Q_
K`D&Nqu6'_q#($do(pl3m/$_Yq#'UZq#6rdJcC<$T`=fdn,<%Zqtos\eG8J-rqlKgn,<._rr.KKK`?W'
]`7d+n,<%Zqtos\!VuQBq<[tWqtU*XrV6ACs60K6s60LFrq63Lqr[bOqsaLRr9"!0s1JA_s+LFOrosFT
r8[\:qW[nJr9"!Os+13$s.KDSrq63Lqr[b>qss[Lrr2nJs+LE's1JBorq63VqtL!MqW[nJr9"!0s60K6
s4RGFrosCPr9!nNr:^'TrUTr=s02NSs+14Cs7QBUrUTmKqs=7IrUTrPs+13$s,m?SrosCPr9!nCr9XCQ
rqQMEs+13$s/l=orosCWr;-?Rqs=7IrUTr=s4mX*s2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;nJ
s+13$s8;o`rm^o2ro!g-s+13$s-WiQrW2urf)=k4JcE[gJcE[g^AdEsJcD,;JcC<$i;]_SJcGZJJcC<$
JcGZJVuGWSJcC<$JcD,;lMeNsJcE[gJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
J,
~> %APLeod
EI
120 0 0 52 136 32 cm
BI
/Width 360
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$
JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?ql
JcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcDhOf)>^Lrdk*%
s+13$s2b5irdk+4s2k:ls2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;o=s+14's7QBUrUTmKqtL$^
r9XCQrdk*Rs+13$s7QEbrosCPr9!nCr9XCQrfmH)s+14-s8N#^rUp*]qptTEqYL*do).kQqu20HZi>UV
JcGWIrr20\p&+L[eGB(>o).kQqu2r^ao?qlkl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE]`3Q_K`D&N
qu6'_q#($do(pl3m/$_Yq#'UZq#6rdao?qlo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`
qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*^rUp/ns2k:ls7cQm
rpTgbr:p0gqYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcEpnJcCr6rr2Kerr)io
q"t'eqt^$^qtKdWqt9s\h=LO9rq5jUrqH3_rqZHfq"ssdo)8ReYQ)`EJcG]Kqu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rp^!Zr:9jYp%87Vq"O[\rqZ?crqlTjp&4R_JcF7"JcD/<qu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rpfmVrq#gTrq6'\qtU0dq"k!equ$-cp&;K$ao@+qqu60brquZjrqcNfrqQBbrq?6^
rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.Wo`"O\pAXg`q#:*dqYpBhr:U$]rdk+*s+13E
s82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\LmdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xab
q>:$fqtp<arUp0+s2k:ts8N#drVl`lqu6Heq"XR^o_\7Zo)%tVnGD\LmI0B0l1F<>lhKlHn,)VRnb_nV
oDA1TpA"F[qYpBhr:9gcrdk+*s+13Hs8N#drVl`lqu6Hkq"sj]pAX^]oD\=Xnc&%Tn+c;=lgO*,lhKlH
n,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrk\WVs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQ
m/-,JlMKi=kjR^,kQ0o2ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkr
o)8RcrqlThqt^6cqtL!\rq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjV
rposYrq6'\rqZ?crql]mp&4de`;dsZQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LH
qrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<d
rV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"VnG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!
ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!cqYpBhr:p6crltJbs-<WTrVl`lqu6He
q#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhZ2U4i;;O5j87p:jo4HBkl0iGlhg&J
mf)\SnG)SRo`"O_pA"F[qYpBhr:U#>s69Q7s0;UprVl`lqu6Heq#:!dp&=U_o)&"WnG_nUmf)SMli-/J
kl0cBjo4?<j8S';i:Z!ihYZ4-i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U$5
s2k;.s8N#mrVl`lqu6Hhq=s^`o_\7ZnGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekq
g\9J(gt_nbqqqD2rnm_6ro3q<roO.Aroj@Grp'LLrpB^QrpTaRrq$$Zq"Od`qtg<hqu$6fqu20Hn,It=
[/^.)q#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2qq_/)qqLSnrnI,$
rn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*he,RPiT)\fhp&4mf
q"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq!7q)!
rn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu20Ho)F:@])Vd/
p&4mfq"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq
qptc!rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-Ekf)NklT)\Ta
rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/rnRM+rn.5%rmq)!rm^_kqp>>g
rm:>arm:Yjqp>;ir6kSormh#!rn%/%rn72(rn[S2ro*k9roO.Aroa:Frp'LKrpB^Rrp]pXrq$-]qtC$`
qtU0drqlTjq#,dDo)F:@])VR(rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/
rnRM+rn.5%rmq)!rm^_kqp>>grm:>arm:Yjqp>,drm^qtrmq)#rn.5'qqV2,rnm_6ro3q=roX4CrosFI
rp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6ff)NklVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdP
rp0RJroj@Ero=";qr%J1rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._p
ec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3
rqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMf
ci25ec2PrUbPTN_c25f`ci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[
p&=[ap\sseq>:$fqtU-brnmats/Q+rrqlZnr;6BjqYU*fp\smcp&=R^o)%qUmf)VQlMg#HkPjQAiqq[5
hYu@1g&BY'f)F.tdf.Sld/M>ic2Pocb5TN^`r!aS`;@I@_Z%IM`;[^U`r*jUao9H^bPocccMl2ici2>k
e,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp/@s+13is82fmrVl`l
qu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W
`W!gQ_sbJA_u%CO`V[[Sao9H^bPocccMl2ici2>ke,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"X
oD\F^pAXgcq>:$fqtp<jrUp0Os2k;@s8N#mrV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7
hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8^&,SA^];7L_Z%IP`W!mVaSs<\b5TWa
c2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Yo`"O_pA=Xaq=sj^rVQSFs+13is8N#m
rV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y
`;[[R_Z%CK_#(n8^&,SA_#)"J_u@XS`r='Yao9H^bl5ldd/MGle,Insf`'S'g]$(/hu;U6jo4EAkPjcG
li-;Nn,DkVo)A:\p&=[^q#:*aqtU-eroO1%s02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZB
iqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[
rkABHrkSNLrkn`Rrl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<h
qu$Hlq#5sHJcEsoq#:0hrquZjrqcWhqtL*^rposUrpTjSrp0RKroj@Bro3h5rn[S.rn.5$rm^qorm1Sh
rlb;`rlG)Xrl"fRrk\TLrkJHHrk8<Dqn)j=qmlL3rjhp;rk&0Brk8<FrkJHJrk\TOrl"fTrlG)\rlb;d
rm1Sjrm^qurn.5)rn[J0ro="=roj@Grp0ILqsaUVrq-3aqtU'brqlTjrr)Wkkl8d)ZiBq%qu-NlqtpBh
rqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?
rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2
i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/Is+13rs82fmrVl`lqu6Hkq>U0gpAXaa
o`"F\nc&"Vmf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2
ZMUohYl:p,ZMq30[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2i;Vd9jo4EAl2L#J
mf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp0Xs2k;Is8N#mrV69hq>U0gp\sjbo`"F\nG_kTmJcDMkl0cE
jSn0<hu;I2gA]e)eGdqrdJhGjbPoW_`r<pU_>_7L^&GYC\Gir9[JmN3ZMq',Yl:g&XT#9bWrB'rX8o@'
Xf_T,ric=+rj2U3rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjU
rpp'[rq69brqQKgq"sjbqu2KQJcF'rrr2]kq"t'drqQKerq69_rpp'XrpKdQrp'LHroa:Aro3q7rn[S-
rn7;#rmUkorm(MdrlP/Zrl"fPrkSNHrk&0>rjMg6rj2U0ric=*riZ."ri>:`ri>ptriQ1(ric=+rj2U3
rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjUrpp'[rq69brqQKg
q"sjbqu6$`aoA^Irr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mb
rl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+
ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBh
r;QZlreg`,s3L`ErqlZnr;6BjqYp9hp\smco`"FYn,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrb
a8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jqVYd4hV!k)UV#I4iVZ*LmWW&stXo>L&YPtg+ZMq92
\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZl
rpKg.s1/1/rqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X
_>_7L^Ab_C\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc52\T)kRVrh07arhKIg
rhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@Grp0RPrp]pWrq-3_
rq??drqZQirqlTjrr)`nNW4S0ec5XJqu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7rndY.
rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2OqjdYV
rgs+]rh07arhKIgrhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@G
rp0RPrp]pWrq-3_rq??drqZQirqlTjrr)`nnc-`2\c;I'q"t'drqQKerq69_rpp'XrpKdProsFFroO.<
rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_rgj%YrgNhSrg<JHqj$r@
rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,
hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU,Ls+14#s7lQfqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlF
jo46<hu;I2g&BV&eGdhocMl&ea8X$V_#D(I]DfA?[JmK2YPtU%WrAsrV#I+fT`1S_Sc5/YRf8`SR/!!E
Q2$UCQ2$[ER/WNQRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,
hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-[s2k;Rs8N#mrVQKkqYp9hp\smco`"FYn,D\Qli-)H
jo46<i;VR3gA]\&e,I\mc2Piaa8WpS^](qG\c0&:ZMq*-Xo>C#VZ*CjU&L_aT)P8ZRJrTQQN!-JPQ$aE
OQMW$OT(CCP6$l2rfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&
rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu2fZJcFC&rr2]kqtpBhrqQKerq??`rposTrp9XM
roa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDG
rf[8Bk)]D$rf[8ErfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&
rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu6?iaoB6Xrr2]krqucmrqcWirqQKdrq69_rpg!W
rpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>C
rf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)
[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*gqYpBkr;6Hirg*S8
s5*eTrqQHkr;QTmqYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?
[JmE0Y5YO%VuELkT`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])MZ/P5N;ek:O8b7?
PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhU
nc&1[p&=[aq#:*gqYpBkr;6HirqcZ:s2+g8rqQHkr;QTmq>U0gp\sjbo`"F\nG_kTm/H8KkPjTBi;VR3
g]#e'e,I_nc2Piaa8WpS^](nF[f3W4Yl:a'WW&gpU&L\`Sc5&VQi<9LOoCIANrFt9MZ/J3LAQ]"KC=Bd
KDpQ)LAZf*M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LSb5TZbd/MPof)FG'
hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQS[s+14,s8N#mrVl`oqu6Ejq#:$ep&=U_o)A.X
mf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[_>_4K]`,A=Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>
MuJV5M>i8,L%p;hJbXlsL&6W(M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LS
b5TZbd/MPof)FG'hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQTjs2k;Xs8N#prVl`oqu6Hk
q>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfS
PQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3hIJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^
V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZl
rg*S8s5*eTrqlZnr;QTmqYp<iq#:$eo`"FYn,D\Qli-)HjSn*:hu;C0g&BG!d/M>iaSs0X_>_1J]Df>>
Z2Us+Xo>3sU]-qcT)P5YR/W<KOoCF@NW+k8M>i8/K`6W'JGXikIf"QgI/\QhIf=ioJGt3#L&Qi+M>iG4
NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnW
o`"Uaq#:*gqYpBkr;QZlrqcZ:s2G$;rqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%
df.Vmbl5]__Z%=L^&GJ>Zi70-XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFM
FSL"XGQ<!iH$TC8rd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoasric=-rjMg>rkSNMrlG)^
rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTjrr)`nSH"0?iW&oVqu-Nlrql]krqZQf
rq??`rpp'XrpTjProsFFro3q8rnm_.rmq(srm:YgrlG)UrkJHGrjMg4ric=&ri#glrh07]rgNhNrf[8A
rf-o7reUQ,rdt-!rdausrd=]krd"KfpiZ%IpiZR\rd"Khrd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhW
rh07drhoasric=-rjMg>rkSNMrlG)^rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTj
rr)`n!<:1@aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'rmUknrlb;]rkn`Mrk&0>
riuI*ri?$prhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[qf2(Drc.gUrH&'^FT-F^
GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/
i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVleds+142s8N#prVl`lqu6Hkq#:!do`"I]nG_kTm/H;L
kPjTBi;VR3g]#e'e,I_nbPoQ]_u@FM]Df>>Z2Up*X8\spU]-nbSGnoTPl?dDNW+k8L]3#,K)U<"If=`o
H2`'fGPcO^FT-=XEURlGEVjeRFT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$
Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVlcrs2k;as8N#m
rVl`oqu6Hkq#:$ep&=U_nc&%WmJcGNkl0]CiVqa6g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^
SGnfQP5^OAMuJS4LAlc'JGt#sHiA?jGlDgaErL(XE;OSQDWYg5DZ4PSE;X\SEW1%YFT-OaH2`0iIf=ir
Jc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tW
oD\F^p\t!fqYpBkr;6Hirh'4As6'F]rqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!
d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qSDuOY:
D>S5MDu4MQEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`
d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6HkrW3#tbQ#ccrr2fnrqucmrqcWhrqHEc
rq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#SrkABDrj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$
rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4E!,;OLCAr#JD#S;KDuObUF8g@^GlE'hJ,Y#u
KDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJa8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`
p\sseqYpBkr;QZlrh'4As6'F]rqlZnr;QTmqYp9hp\smco`"F\n,DbSli-,IjSn0<hu;@/f)F+sd/M5f
a8WpS^AbbDZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4KDpH$J,XfoH2`!dF8g4WDuOVQD#S5LCAqrEBDuN3
Ac$*=BDuWECAr#JD#S;KDuObUF8g@^GlE'hJ,Y#uKDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJ
a8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`p\sseqYpBkr;QZnrW3#tbQ#ccq#13hrqcWirqHEc
rq69]rp]pUrp9XKroX4>rnm_2rn%/!rm:YgrlG)VrkJHDrjMg1riH*urhBC`rgWnPrf[8Are^W0re(3#
rdFclrc\9_rc8!Wrbh^OrbDFHrb2:Crakt;raY2%raYh9!+c1BAc?<@B`;`FCAr&KDZ4VSErL1[G5cge
I/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;^]).Ma8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Y
p&=[ap\t!fqYpBerLa+@s6'FWrVl]nqYp<ip\smcp&=O]nG_nUm/H8Kk5OB>hu;I2fDa;!d/M8gaSs*V
^](hD[f3N1XT#3uUAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4JOCAqrHB`;WCAc$$;A*IJ%
A,Bg9Ac?<@B`;`FCAr&KDZ4VSErL1[G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;^]).M
a8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Yp&=[ap\t!fqYpBgr;llqbQ#ccq#13hrqcWirqHEcrq-3Z
rpTjSrp'LGroF(:rn[S-rm^qprm(Marl"fNrk&0<riuI)rhoairh'1Yrg3VGrf-o8re19%rdXoorcnEb
rc.pVrbqdPrbDFHrb)4AraYq:raGe5ra>D+pg3`&ra>_4!+>n:@K'a8A,^'=BDuWEC]8/LDuO_TEW1+[
GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32]DfSE`;[jWcMl5jeGe2$h#?72jSnBBlMg5Nn,DhU
o`"O_p\t!fqYpBerLa+@s6'FWrVl]nqYp<ip\smco`"@Zn,DbSlMfuGjSn*:h>Z.-eGdkpcMkoa`;[ON
]Df8<Z2Um)VuEFiTDk;YQi<*GNW+k8K`6Q%J,XfoGlDjbEW0qVDuOSPCAqrHBDuKAA,]s:@K'X5@.dn%
?MIn,@/aO4@K'a8A,^'=BDuWEC]8/LDuO_TEW1+[GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32
]DfSE`;[jWcMl5jeGe2$h#?72jSnBBlMg5Nn,DhUo`"O_p\t!fqYpBgr;llqbQ#lfrr2fnrquclrqZQg
rq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)UrkABDrj2U.riQ0qrh9=_rg*PIrf@&;reLK)rdauq
rd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*kun!hr`f>+!F/n/?2e4.@/aX7A,^'=B`;cGD>nJQ
EW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_T
o)A7[p&=acq>U6fr;QZlrh]XGs6BX`rqlZnr;QQlq>U0gp&=U_o)A.XmJcGNk5OH@iVq^5gA]\&d/M8g
aSs'U^AbbDZi73.Xo>-qU&LY_QN!*IO8b+;L]2o)JGsrqH2_maErL"VD>n;LB`;TBAH$';@/F=.?2e+.
>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(
Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fquHZrrVcWmdJqVorr2fnrqucm
rqZQgrqHEbrq$-YrpTjQrp'LDro3q7rnIG'rmLekrlP/XrkSNFrjVm2riH*trh07]rgNhLrf@&;reCE)
rdXoorce?`rc%jSrbVRIrau.?raPk7ra5Y1r`oG,qcWo#h,jPW!E`J'=oMY)>lJ%.?iFL5@fBp;B)ZKC
D#S>OE;jtYGQ)sgJ,Y*"LAm/2O8b=ARf8lWT`1nhXT#I'\,O#=_#D:Oao9Tbdf.ktg]$+0ir8$<lMg/L
n,DhUoD\F^p\sseq>U9jr;6Hlrh]XGs6]jcrqlZnr;QTmq>U0gp\sjboD\7Yn,D\QlMflDir7j7g]#e'
df.Pkao96X_#CtF\,NW2XT#0tT`1M]Rf8KLO8b+;LAli)J,XfoGQ)^`E;jbSD#S,IB)Z??@fBd7?iF@1
>lIt)=oMOZ=8Q,!=oMY)>lJ%.?iFL5@fBp;B)ZKCD#S>OE;jtYGQ)sgJ,Y*"LAm/2O8b=ARf8lWT`1nh
XT#I'\,O#=_#D:Oao9Tbdf.ktg]$+0ir8$<lMg/Ln,DhUoD\F^p\sseq>U9jquH]nrVlfDs3^lGrqlZn
r;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/WPl?dDN;eY4
Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;TYq<WQ6%r`B)$r`T5(r`oG.
qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4
ro3q@rp'LLrpTjWrq-3arqQKgrql]mqu-NnV>l,HmJm1bqu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8
rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.
r`oG+r`T5&r`B)"qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3
rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKgrql]m!<)io
rr1=FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUknrltG]rkeZKrjMg3riZ6trhBCa
rg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!r`&kqr_iVjh,+)J!)i_mr_req
r`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]
rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu3PoJcG6>rr2fnrqucmrqcWgrq??arpg!W
rpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaurrcnEbrc%jSrbVRH
ral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_`Pjr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZ
rd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??c
rqcWk!;llqr;QZlrm^tts8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)dJhGjb5T9W^AbbD
Zi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"<W5qr;Z9Pm;#=&]
:A@QS:B"#h;#F/h;>sJm;uTer<rQ2"=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=otK`6r0O8b@BRf8oX
UAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)hu;[8k5OTDm/HGPnc&1[p&=^bq>U6iqu6Qkri#jJs7$'frqlZn
qu6Hkq>U-fpAX^`nc&"Vm/H5Jk5OE?hu;C0f`':tcMkuc_Z%:K]Df/9YPtR$UAgb`Rf8NMOT(4<K`6Q%
If=TkFoHC[DZ4GNB`;QA@K'X5>Q.h*=oMM%<rQ+u;uT\o;>sDh:\@KX:%D'Y:]!uf;>sJm;uTer<rQ2"
=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=otK`6r0O8b@BRf8oXUAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)
hu;[8k5OTDm/HGPnc&1[p&=^bq>U3jqZ6Tkrr)`neGn%urr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:
rn[S,rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&
r`B(ur_iViqbR2dqb?`Wpe10Or_3Afr(d,bqb[8jr`&kur`K/&ra#M1ra>_8rb)4FrbqdVrcJ-drdOis
reUQ3rfI,FrgWn[rhf[qrilC2rk&0Frl>#]rm:Yprn7;,ro!e:roa:HrpB^Srpp']rqHEfrqcWkrr)`n
W;hGKnGiLequ-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQ
rfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$WqbI#aqb[8j
r`&kur`K/&ra#M1ra>_8rb)4FrbqdVrcJ-drdOisreUQ3rfI,FrgWn[rhf[qrilC2rk&0Frl>#]rm:Yp
rn7;,ro!e:roa:HrpB^Srpp']rqHEfrqZWl!W2cnrVQTDs4%)GrVl`oqYp9hp\sjboDA%Vm/H8KjSn0<
hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB@fBa6?2e%,=T2>"
<;oep;#=&c:&[ic9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fs
LAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq>U6fr;QYns+14>
s82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(
IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W9`@cc:]!uf;Z9Vo<W6,"
>5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<
l2L&HnG`%Yp&=^bq#L6lqYL*err(@HeGoOHrqucmrqZQgrqHEbrq$-YrpB^Mroj@Aro*k5rn%/!rm1Sd
rl"fNrjVm5ric=!rhKIbrg*PHrf6u5re(3"rcnEbrc.pRrb;@EraGe5ra#M+r`B)!r_reoqbR2cr_3)Z
mmun;oLSmNpe(NZr_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRRrcS3brdXp"reLK5rf[8Hrh'1brhob!
rj2U5rkJHNrlY5drmUkurndY4ro="Arp'LMrp]pYrq69brqQKgrql]mrr&eqJcG6>rr)iorql]jrqQKe
rq69^rp]pSrp'LHro=":rndY+rm^qnrlY5YrkJHArj2U-rhoajrh'1Urf[8@reLK*rdXolrcS3[rbVRJ
rb)4=ra5Y1r`T5%r`/qrr_iVhr_<Acpe(!Gmmlh;pe(NZr_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRR
rcS3brdXp"reLK5rf[8Hrh'1brhob!rj2U5rkJHNrlY5drmUkurndY4ro="Arp'LMrp]pYrq69brqHKh
!VuQjqu6NmrRCl!s8N#srVl`oqu6Ejq#:$eo`"C[n,DYPl2KlFiVqa6h#>k'df.Pk`r<gR^&GG=Z2Um)
U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk:]=,g9`%KX8c)$/7KGtJr^Z`T
r_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1rk8<Jrl4r_
rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`nY5a(QoDeghrr)iorql]jrqQKerq-3[rpTjP
rosFFro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tNrf6u9re(3#rd=]frc8!Vrb;@DraPk6r`oG+
r`9"tr_`Ykr_NMgr_32^pdt?Qe40F-pdtHXqb6l^r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"
repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'rndY5roa:Frp0RPrpp'\rqHEe!;QZkq>U9jr;QZl
rn@D(s8N#srVl`oqYp9hpAXaao)A.Xn,DSNkPjQAi;VO2f`':tcMkuc_Z%7J\c/i4X8]$rT`1G[Q2ZjD
M>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#;Z9Pj:]=&e9D_<[8GbpV7efFI7.3M<7/]RP7JfRR8,GjV
8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZb
dJheth#?72jSn<@l2L/Nnc&+Yp&=^bq#:-hqu6QkriZ9Ps7?9irr2lqr;QQlq#:!dp&=O]nG_nUl2KlF
jSn*:h#>t*dJhGjb5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3fE;j_RCAqcC@K'X5>5hY'<rQ"r
;>X/g9`@]^8cD9X8,c!Q7JK:>6hj(E7JfRR8,GjV8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[
HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZbdJheth#?72jSn<@l2L/Nnc&+Yp&=[cp]:0brqcWk
rr)`ngAfn,rr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"rhTOarg3VI
rf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*_-/r'^NQqaUQT
qag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFMrc8!^rd=]sreLK3rf[8Jrgj%ari,n"rjMg<rkSNQ
rlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq??crqcWkqu-NnY5a(QpAb-kqu-NlrqcWgrq??arpg!VrpB^K
roO.=rnm_/rmq(qrlb;\rkSNFrjMg/ri,mmrgj%Trf[8>reLK)rd=]hrc8!UrbDFFraGe5r`oG)r`9"t
r_WSir_EGdr_*5_r^coVr^QcRpdEq*pdG*MqaUQTqag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFM
rc8!^rd=]sreLK3rf[8Jrgj%ari,n"rjMg<rkSNQrlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq6?d!Vc?f
qYpBhrVlfMs4[MPrr2lqr;QTmqYp6gpAX^`nG_kTm/H2IjSn*:h>Z(+eGdenao96X^Ab\BZi7'*VZ*7f
Rf8QNO8at7KDpB"GlDgaDuOPOBDuE?@/aI2>5hS%;u9Dj:B!rd9)D3W8,c!T7K,^%6i9=K7/fXP7fGpW
8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gn
g&Bh,i;Vg:kPjiImf)_To`"O_p\t$gqu6NmrVlf!s+14Ds8N#srVl`oqu6Hkp\smco`"@Zmf)SPkPjQA
i;VR3f`'D"ci2&c`;[LM\c/r7XT#*rT`1DZPl?aCM#N&+J,X]lFT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h
9`@Z]8c)$W7f,XR7*@sp7/fXP7fGpW8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7
Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,i;Vg:kPjiImf)_To`"L`pAt$_rqcWkrqucorr1XOh>dKR
qu-NkrqcWirq??`rpp'XrpB^MroO.>rnm_/rmq(rrlb;\rk\TFrjDa/rhoairgs+RrfI,<re(3#rd=]d
rc.pTrau.>ra>_1r`T5$r_i_mr_NMfr_!/]r^d#YqaUQRr^?3Bh*V'-o0`LFr^H]Rr^ZrYr^m)^r_<Af
r_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDRrhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=
rp'LLrp]pXrq69arqZQirql]nqu3l#JcGQGrr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_g
rl4rRrjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiT
r^HfSmmGntmmI(Br^H]Rr^ZrYr^m)^r_<Afr_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDR
rhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=rp'LLrp]pXrq-9b!VZ6dq>U6iqu6Qkrn[V1s8N#prVl]n
qYp<ip&=U_nc%tUli-/JjSn-;hYu1,eGdenao96X^](bBZMq!*U]-nbS,STMNW+e6Jc:)sH2_j`DZ4GN
AH$$:?iF7.=8l1u;#X8i:B!oc9)_E]8,c!T7K,^A6et*-6h!JB7/KFP7fGpW8cD?]9E%]c:]=2i<;otu
>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bU
oD\F^q>U6iqu6QkriuKSs7u]orqlZnqu6Hkq>U'do`"C[mf)POl2KcCiVq^5f`'D"ci2&c`;[ON\Gif5
Xo>*pTDk>ZP5^I?M>i)*IK"NkErKtUC]7lD@K'X5>5hV&<;o_n:]=,g9E%Q_8cD6Z7f,XR7-m:s6L7)=
7/KFP7fGpW8cD?]9E%]c:]=2i<;otu>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B
`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bUo)SFap%A=[rqcWkrr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3d
rdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nZ2]CT
q>^Hnqu-NjrqZQgrq69^rp]pTrp0RIro="9rnRM(rmLekrl>#UrkAB>rilC&rh07\rg<\Hrepc1rdXon
rcS3ZrbVRIraGe5ra#M*r`/qqr_WShr_3;`r^m)[r^QcRr^?<Eb<kkhqaCEPqaUQUr^m)]r_3;cr_WSl
r`9##ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LN
rp]pY!;-Bcp&=acq>U6irVQTMs5!_SrqlZnqYp9hp\sgao)A+Wm/H8KkPjH>hYu7.e,I\mbPoEY^](hD
Yl:^&VZ*4eRJrELNW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr:]=,g9`@Z`8H)-Y7f,XR7.N^i6M<b=
6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4PQ%!LTDk_eXT#I'])KGC
_u@jYci2DmgA]q-iVr$>l2L&Kn,DnWo`"Uaq>U6irVQT!s+14Gs8N#prVlZmq#:$eo`"F\n,D\Ql2KlF
iVq^5gA]S#ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(HiA3fEW0hSB`;QA@/aF1=oMG#;uTSl:B!rd
9)_B\8,c!T7K,^G6c)1_6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4
PQ%!LTDk_eXT#I'])KGC_u@jYci2DmgA]q-iVr$>l2L&Kn,DkXoE"UVrqHEfrqcWmqu5FOh>d9KrqcWh
rqHE`rpg!Vrp0RJroX4<rnRM+rmLekrlY5Wrk8<?ric=#rhTO`rg3VHreg]/rdXomrcJ-XrbMLFraGe4
r`fA(r`&kor_NMer_!/]r^ZrWqaLKPmmG>dp-S=;r^?WPr^QlWr^m)^r_3;er_i_pr`K/'ra,S4rau.F
rbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjVrq$-`rqZQiq#.Jt
JcGQGq#13grqQKerq$-ZrpTjProsFEro!e2rn7;!rm(McrkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"Kb
rbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B_F!f\r^?WPr^QlWr^m)^r_3;er_i_pr`K/'
ra,S4rau.FrbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjV!:p6_
oD\L`q>U6crS@M0s82cor;QQlq#:$eoD\:Zn,DVOkPjQAi;VO2fDa.rbl5]__#CtF[Jm?.W;`LiRf8QN
O8aq6KDp?!G5cO]DuOGLAH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V7K,^G6cVOb6M3_C7/fXP7fH!Y9)_K_
:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYrg]$.1jSnBB
lMg8Onc&.Zp\t!fqYU3irNZBRs7u]lrVl`oqYp9hp\sd`nc&"VlMfuGjSn*:h#>q)d/M8gaSs!S]Df5;
Y5YC!U&LM[Pl?aCL]2r*If=NiErL"VB`;QA?iF=0=oMM%;Z9Ml:B!oc9)_E]7f,XR7.N^U6M3_C7/fXP
7fH!Y9)_K_:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYr
g]$.1jSnBBlMg8OnGr.]oCMtUrqZQiqu$Hlh>c=2rr)iorql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"p
rlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfS
njC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(
rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoZ2]CTq>^HmrqucmrqZQgrq??^rp]pT
roj@Cro3q6rn@A%rm:Yfrl+lOrj_s5ri?$prh'1Vrf[8@re19#rd4Wcrc%jQral(<ra5Y-r`B(ur_WSh
r_3;_r^d#Yr^QlUr^?<EYX8"Mr^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192
rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@LrpTpY!V5g\pAXgcq>U9jr;QZNs5!_SrVl`o
qu6Ejp\sjbnc&"VmJc>Kjo49=h>Z(+eGdbmao96X^&GM?Z2Ua%U]-kaPl?aCMuJ>-If=ZmErKtUCAqcC
@/aI2=T2>";Z9Ml:&[fb8cD9[8,bsV7.3L]6L@,16iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#?2e:3AH$?C
DZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?`;[mXcMl>mg&Bh,ir8*>kl0uKn,DkVp&=^bq>U9jr;QZ"
s+14Gs8Murr;QTmq>U-fp&=L\n,D_Rkl0]Cir7d5f`'D"cMkrb`;[IL\,NZ3WW&[lT)OuRO8b(:K)U5u
HN%saDZ4DMAH$!9?2dt*<W5nq;#X2g9E%N^8H)-Y7K,^D6a/oJ6iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#
?2e:3AH$?CDZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?`;[mXcMl>mg&Bh,ir8*>kl0uKmf;kYnaZVO
rqHEfrql]mrr([Qh>dKQrqucmrqQKdrq69\rpTjRroj@Cro*k3rn.5!rltG`rkn`JrjDa/rhoairg`tO
rf6u7rdauqrce?\rbVRJraPk6r`oG(r`/qpr_WSgr_*5]r^ZrWr^HfSog?G[l9b/2r^?`Sr^QlWr^d#]
r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUkurnRM3roO.C
rpB^Rrpg!\rqHEerql]mrr',%JcGQGrr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<
ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EHVaC&Dr^?`S
r^QlWr^d#]r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUku
rnRM3roO.CrpB^R!:^*[nc&4\p\ssequ6NmrS@M3s8N#srVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8gA]\&
dJh>g`r<gR\c/r7YPt?sT)P/WOT(1;LAl`&HN&$cDuOMNBDu<<?2e%,<W5qr;#X5h9E%N[8,c!W7.iq*
6N0:85lO(G6KCK16i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<RJriXV#IRs
[/RW8_>_IRbPoogec+;%hu;[8k5O]Gmf)_To`"O_p\t$gqu6QkrjVoYs8;orrr2lqr;QQlp\smco`"@Z
mJcGNk5OE?hu;@/f)F(rbPoN\_>_"EZi70-V#HtbRJr<IMuJJ1JGsloFT-4XCAqlF@/aI2>5hP$;uTVm
:B!oc8c)$W7fGgK6f:<160UZ66/=m)6i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&
N;eq<RJriXV#IRs[/RW8_>_IRbPoogec+;%hu;[8k5O]GmJu_WnF6GLrq69brqcWkrr)`nj8\';rr2oq
rquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHBrj)O*rhBC_rg3VFreg]/rdFcjrcA'Urb;@C
ra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KLj?iN,r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1
ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWk
rr)`n\,V$Zr;Zcqrr)iorqcWgrq??_rp]pSrp0RFro3q7rn7;$rm:Yerl+lOrj_s5riQ0orgj%Trf@&9
re:?"rcnE`rb_XKral(:r`oG*r`/qrr_NMgr_*5^r^ZrWr^HBFj$NW/k!8o3i'R*(r^HfUr^ZrZr_*5c
r_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RN
!:U$YnG`%Yp&=^bqYpBkrVQTSs5<qVrr2lqr;QQlp\smcoD\7YmJcGNjo49=hu;:-e,I\maSs*V^](\@
Z2Uj(T`1G[QMupDM>i/,I/\?hErKnSB`;N@?iF:/=T2;!;>sAj9`@Z`8cD3V7JK7+6JXp*6K(9+6iKOO
7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-
ir8'=li-;NnG`%Yp&=^bqYpBkrVQT's+14Js8N#srVl`oqYp6gpAX[_nG_hSli-#Fir7j7f`'A!ci2#b
_u@FM[f3Q2XT"mlS,S`QNrFn7KDp8tGQ)X^D#S,IA,]j7>Q.b(<;obo:]=&e9)_E]7f,XL6et)b5i"d%
6iKOO7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gn
f`'e-ir8'=li-8On,`%Jrq$-^rqHEgrql]nqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(t
rm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NK
j$N`2f0B=%!C9$36MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[
WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]
n,D\QlMflDiVq^5f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml
:B!oc9)_B\7fGjU7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^d
JGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu5XUi;`fU
rqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`rk\TIrj2U,ri#ggrgEbLrepc0rdauorcS3ZrbDFE
raGe3r`T5%r_i_kr_<Abr^m)Zr^HfSog@k.qa&du!C/pL60:N,6iKLQ7K,gV8cDB^:&[ug;Z9bs>5hh,
@K'j;CAr2OFoH^dJGt<&MuJq>RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L&Kn,DnWp&=^bqYpBk
r;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,W;`FgRJrELMuJG0
JGsloFoH@ZCAqiE@K'R3=oMM%;Z9Jk:&[fb8cD6Z7K,^J6fp`46.A1!60:N,6iKLQ7K,gV8cDB^:&[ug
;Z9bs>5hh,@K'j;CAr2OFoH^dJGt<&MuJq>RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L#LmfDnG
rpp']rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoae
rg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZ
r_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="B
rp9XQrpg![rqHEgrql]mqu4))JcGZJrr2oprql]krqHEbrpg!Vrp0RJro="9rnRM(rmLekrl+lQrk/6:
riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"rr_NMfr_!/\r^ZrVr^?NKj$LpSi'R<.r^?`S
r^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1
ro="Brp0XR!UoLVnc&1[p\t$gqu6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhoc2P]]
_#CtFZ2Uj(VZ*.cQi<-HM#N&+J,XWjErL"VBDuH@@/aF1=T2>";#X5h9`@W_8H)*X7K,^M6g6r:6-V[j
5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5McXT#L(]DfVF
`W"-]dJhYph#?41ir80@li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7
h#>h&d/M;h`W![P]Df)7XT#*rSc4uTOoC19KDpB"G5cO]DuODKAH$!9>lIk)<W5ho:B!rd8cD9[7fGjU
7/0.66N09i5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5Mc
XT#L(]DfVF`W"-]dJhYph#?41ir80@lN$ASn*g8Grq-3`rqcWkrquZmj8\';rr2oprqcWirq??_rp]pT
rp0RIro3q6rnIG%rm:Yhrl"fNrk&07riH*qrg`tRrfI,8re(3!rcS3[rb_XIrac"9r`oG)r`/qor_EGd
r^m)[r^QlUr^?NKlpCS8bs:tfr^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiu
reUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZm\,V$Zr;Zcqrqucl
rqZQerq$-YrpKdOroj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+rdOihrc.pSrb)4@ra>_1
r`K/"r_WShr_3;_r^d#Xr^HfSpd=C7qa&(ar^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4I
rc.p[rdOiureUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@H!:BmUmf)_To`"R`q>U9jr;6KR
s5<qVrr2ipqYp<ipAX[_nG_kTli-,Iir7g6g]#_%d/M8g_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[
D>n/H@fBa6>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_U5k@8'6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7
B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0lHmf)_To`"R`q>U9jr;6K&
s+14Js8N#sr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/eGdhobl5NZ^](hDYl:[%V#Hn`QMusEM#N&+If=Kh
EW0hSB)Z9=?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7
B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0iImK)bDrp]pZrq??erql]m
qu5XUj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&s
rcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%
ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQj
rqucorr0D,Jc>cNs8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdmS,S]P
O8aq6Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:B")h
<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@l2^5QmdC)D
rq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4ri5sm
rgNhOrf@&6rdk&srcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZ
r_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5roj@H
rpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5g]#\$ci2,e_u@CL
\c/i4WrAdmRf8TOO8aq6Jc:)sFoHC[D>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_G5itE46i0:N
7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFoHggK)UQ)O8bCCRf9)]WrB7%\c0>B_u@jYci2Dmg]$(/
iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5
g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ
6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%\c0>B
_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RI
ro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[
r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKIm
rilC4rkABKrlb;ermUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^
nG_kTli-,IiVq^5g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm
:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCC
Rf9)]WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWi
rq??_rp]pTrp0RIro3q6rnIG$rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%
r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y7rau.Hrc.pZrd=]r
reLK6rg!JPrhKImrilC4rkABKrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr0D,Jc>cNs8N#s
rVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_Z%7J\c/i4WrAdmS,S]PO8aq6Jc:&rFT-7YD>n/H
@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-A,^*>D>nPS
FT-[eJc:H(O8bFDS,T2^WrB7%\c0>B_Z%aXci2Dmg]$+0ir80@l2^5QmdC)Drq-3`rqZQjrqucorr1sX
j8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[
rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7
rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrquco
rr0D,Jc>cNs8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdmS,S]PO8aq6
Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:B")h<;oqt
>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@l2^5QmdC)Drq-3`
rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PE
reUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Ag
r`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZ
rq??erql]mqu4))JcGZJrr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%rm:Ygrkn`Mrjr*5ri5snrg`tR
rf@&7re(3!rcS3[rb_XHraPk6r`];&r`&knr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Ag
r`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rosLO!UfCT
nG`(ZpAXmequ6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhobl5Q[^](hDYl:^&V>d%b
QN!!FM#N&+If=NiErKtUB)Z<>?iF:/=8l5!;#X5h9`@W_8H)*X7/K@66Mj'n5k[JB60:N56i0:N7fGpW
8cDE_:B")h<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41ir80@
li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7h#>h&d/M8g`;[ON])Jr5
X8\spSc4rSOT((8KDp?!G5cO]DZ48IA,]j7>Q._'<W5ho:B!rd8cD9[7fGgQ6fp`46,Gnd60:N56i0:N
7fGpW8cDE_:B")h<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41
ir80@lN$ASn*g8Grq-3`rqcWkrquZmj8\';rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Yhrl+lP
rk&07riH*rrgj%TrfR29re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8bs;(i
r^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[rriuI7rkSNP
rltGirm^r&rnm_7roj@IrpTjVrq-3`rqcWkrquZm\,V$Zr;ZcqrqucmrqcWfrq-3[rpTjProj@@rnm_1
rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfS
pd=:4r^"Lgr^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[r
riuI7rkSNPrltGirm^r&rnm_7roj@I!:KsWn,DkVo`"R`qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbnc&"V
li-/Jj8S!9h#>n(df.Pk`W!^Q]`,8:Y5Y?uT)P,VP5^@<K`6K#GlDd`DuOGLAH$!9>lIn*<rQ"r:]=)f
9)_B\8,bsV7/0.06I8!q5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#MZ/e<
R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L&Kn,DkVo`"UaqYpBkr;6K&s+14Js8N#sr;QTmqYp6g
p&=L\n,DYPl2K`Bi;VO2f)F+scMkf^_>_+HZi7-,VuE:eR/W9JMZ/;.J,X]lF8g+WB`;QA@/aF1=oMJ$
;Z9Jk:&[ca8H)-Y7K,^M6fUMV5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#
MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L#LmfDnGrpg![rqHEgrql]mqu5XUi;`fUrqucm
rqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3
r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+
@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBk
r;6K&s+14Js8N#sr;QTmqYp6gp&=L\n,D\QlMflDi;VR3f)F+scMki__>_.I[/R6-W;`FgRJrELMuJG0
J,X`mFT-4XCAqiE@K'R3=oMJ$;Z9Ml:B!lb8cD9[7fGjU7/K@36Mj'u5lO(-6N0@O7/fXS7fGsX8cD?]
:B")h;Z9_r=oM_+@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg,M
mfDnGrpg![rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`Lrj;[.
ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$N`2f0B=%!C9$3
6MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XU
ci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,D\QlMflDiVq^5
f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml:B!oc9)_B\7fGjU
7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[
WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu5XUi;`fUrr)iorqcWgrq??_
rp]pSrp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7re(2trce?^rbVRIraYq7r`fA(r`&ko
r_NMer_!/]r^QcRpd<k(h*Cp*iBm<,r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6
rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.FrpB^Srq$-^rqHEgrql]nqu4))JcGZJrr2oqrqucl
rqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/
r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_h*Um(r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]t
reUQ6rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.Frp9^T!V#UXoD\F^p\t$gqu6Qkro=%:s8N#s
rVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8g&BM#d/M2e`W![P\Gif5Xo>*pT)P)UOT(.:K`6H"H2_maD>n5J
AH$!9>lIn*<;oep:]=)f9)_EW7fGgQ6et*+60:H362a./6N0@L7/07N8cDB^:&[rf;Z9Yp=oM\*@/a^9
C&VuKF8gF`If>$"MZ/_:Qi<QTU].CpZMqB5_#D=Pb5Tceec+8$hu;[8k5O]Gmf)_To`"O_p\t$gqu6Qk
rjVoYs8;orrr2lqr;QQlp\smco`"@ZmJcGNk5OE?hu;=.eGdhob5TBZ_#CkCZMq!*U]-kaQi<*GMZ/;.
If=WlF8g%UB`;QA@/aF1=oMD";Z9Jk:&[ca8bbdS7/K@-6Mj(25lO(*6N0@L7/07N8cDB^:&[rf;Z9Yp
=oM\*@/a^9C&VuKF8gF`If>$"MZ/_:Qi<QTU].CpZMqB5_#D=Pb5Tceec+8$hu;[8k5O]GmJu_WnF6GL
rq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTOb
rgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^$BIj?i`2qaC<N
r^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/
ro="?rp0ROrp]pZrq69brqcWkrr)`n\,V$Zr;Zcqrr)iorqcWgrq??`rp]pSrp0RGro="8rn@A&rmC_g
rl4rRrji$7ric<srgs+WrfI,;reCE&rd+QcrbqdNrb)4<ra#M,r`/qrr_WShr_*5^qa^WTr^?EHi'RE/
ks556h*V!+qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$E
rl4r\rmC_qrn@A/ro="?rp0RO!:U$YnG`(Zp&=^bqYpBkrVQTSs5!_SrVl`oqu6BipAXaanc&"VmJc>K
jo46<h#>t*e,IVkaSs*V]`,><YPtI!UAg\^PQ$UAM>i&)I/\?hE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb
8H)-Y7fGjU7.ip]6L$o16iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!hJGtE)NrG7A
SGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKn,DkVp&=^bq#:0ir;QZ"s+14Gs8Murr;QTmq#:!d
p&=L\n,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrqGQ)R\D#S/J@fBa6>lIh(
<W5kp;#X2g9E%K]8,c!W7K,^J6`39D6iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!h
JGtE)NrG7ASGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKmf;kYnaZVOrqHEerql]mrr([Qh>dKQ
rqucmrqQKerq??^rp]pTroj@Cro*k4rn.5"rm(Mbrl"fLrjMg1ri5smrgj%RrfI,;re(3!rd"K_rbh^N
raYq8ra#M*r`/qrr_WShr_3;^r^ZiTr^HfSpd;b^l9b85r^?`SqaUQTr^d#^r_EGhr_resr`K/*ra>_8
rbMLNrc.p_rdOj!repc;rg!JRrhKImrilC2rk8<LrlP/brm^r#rn[S4roO.CrpKdTrpp'^rqHEerql]m
rr',%JcGQGrr)iorql]irqHEcrpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.
rdOilrc.pTrbMLCra>_2r`K/"r_remr_EGdr^d#YqaUQRr^?NKVaC/Gr^?`SqaUQTr^d#^r_EGhr_res
r`K/*ra>_8rbMLNrc.p_rdOj!repc;rg!JRrhKImrilC2rk8<LrlP/brm^r#rn[S4roO.CrpKdT!:g0]
o)A@^p\ssequ6NmrS@M0s8Murr;QTmq>U0gpAXX^nG_kTkl0]Cir7g6gA]Y%d/M5f`W!XO\Gif5X8\sp
TDk2VP5^L@K`6K#HiA*cE;j\QAc?0<?iF4-=8l1u;#X5h9`@W_8H)-Y7fGjU7.N^`6L@,46iKLQ7K,dU
8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4Ob5Tceec+8$
hYuO6k5OTDmf)_To)A@^p\t!fqu6NmrNZBRs7u]orVl`oqu6Ejq#:!do)A.Xmf)GLjo49=hYu7.ec*qp
bPoK[^](bBZMpp(V>d+dQi<0INrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[8,c!W7K,^G
6a/oM6iKLQ7K,dU8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6
^])4Ob5Tceec+8$hYuO6k5OTDmf)\UncA=Prq??crqZQjrqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LG
roF(:rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGc
r_!/]r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&C
rgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$HlZ2]CTq>^?jrquclrqQKe
rq$-ZrpTjOroa:Aro!e2rn%.rrlkA_rkSNFrjDa.ri#girgNhNrf@&6re(3!rc\9]rbqdLrac"8r`oG*
r`B(sr_WShr_*5_r^m)YqaLKPnjBrSogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9i
rdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV!:p6_oD\L`q>U6fr;QZNs5!_S
rr2lqr;QQlq#:$eo`"F\n,DYPkl0`Di;VO2g&BCucMkuc_>_.I\,NW2WrAgnSGnlSOoC7;L&QT$H2_pb
E;jVOB)Z9=?N+1.=T27u;>sAj9`@]a9)D-X7efCH6cVOb6MNqC7/KIQ8,c-[9E%Wa:]=5j;uTnu>5hk-
@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTDli-APo)A:\p\t!f
qYpElrVlf$s+14Gs8N#srVl`oqYp9hp\sgao)A+Wli-,Ik5O<<h#?"+dJhGjb5T6V^&GM?Yl:[%V#Hn`
Qi<-HMZ/>/J,X`mFT-7YCAqiE@fB^5>Q.b(;uTYn:]=&e9E%Q\8,c!Q7/0-[6MNqC7/KIQ8,c-[9E%Wa
:]=5j;uTnu>5hk-@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTD
li-APnc8:_o^r.WrqZQirqucorr1aRh>dKRqu-NjrqQKerq-3\rpTjQrosFFro*k5rn@A#rm1Serkn`M
rjr*5ri?$qrh'1Xrfd>@reLK(rd4Wfrc.pSrb2:Ara>_1r`T5#r_relr_EGdr_!/\r^ZrWqaLKPnjCYg
p-SF>qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(rf-o@rgEbXrhf[rrilC5
rkABLrlb;ermUl#rn[S4roa:Frp9XQrpp'\rqHEfrqcWmqu3l#JcGQGrr2fnrqcWhrqHEarpp'Wrp9XK
roa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMg
r_3;`r^d#Yr^QcRr^?<E_F!o_qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(
rf-o@rgEbXrhf[rrilC5rkABLrlb;ermUl#rn[S4roa:Frp9XQrpg']!VH$`p\t!fqYpHjrn[V1s8N#p
rVlZmq>U0gp&=R^nG_kTli-,Ij8S!9h#>n(df.Pka8X!U^AbP>Yl:^&T`1J\R/W3HMuJJ1J,XcnFoH@Z
D#S,I@K'X5?2dt*<W5nq;#X5h9`@Z`8cD9[7f,XR7.N^l6Ms1C6i0:N7JfRR8H)3[9)_N`:&[ug;Z9_r
=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UTcMl8kf)FJ(hu;[8kl0lHmf)_T
oD\F^q#:*gqYpHjriuKSs7u]orqlZnqYp<iq#9scoD\7Ymf)POkl0WAi;VO2f)F+scMkl`_u@CL[JmE0
X8\dkSGnoTOT(1;LAl]%HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml:B!rd9)_E]8H)*U7K,^G6d%gh6i0:N
7JfRR8H)3[9)_N`:&[ug;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UT
cMl8kf)FJ(hu;[8kl0lHmf)_To)SFap%A=ZrqZQirr)`nh>c=2rr2fnrqcWirqQKdrq-3[rpTjProsFC
ro!e3rn%/!rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]irc.pTrbDFCraGe5r`T5%r`/qpr_NMf
r_*5_r^coVr^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Afr_`Ypr`B)%ra5Y6rac"Crb_XSrcnEi
rdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(Crp9XQrpg![rq??drqZQirr)`nZ2]CT
q>^Hnqu-NjrqZQgrq??`rpg!Vrp0RJroF(:rn[S*rm^qnrlY5ZrkJHBrj2U,rhTOcrgWnMrf-o6rdauq
rcnE^rbh^Mrac":ra5Y-r`B)!r_`Yjr_<Abr_!/\qa^WTqaLKPpd<4kpd=pHr^H]Rr^ZrYr^m)^r_<Af
r_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(C
rp9XQrpg![!;6HepAXjdq>U6irVQTMs5!_SrqlZnqu6Hkq>U*eo`"F\nG_hSlMfoEj8Rs8gA]\&dJh>g
`r<gR])K,:YPtI!UAgb`Pl?dDN;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*<rQ"r;>sAj:&[ca8cD9[8,GdT
7K,^D6et*-6h<\E7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LD
T)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMRo)A=]pAXmeqYpBkrVQT!s+14Gs8N#prVl]n
qYp<ipAX^`o)A.XmJcDMjo4<>hu;@/f)F(rbPoN\_>_%F[JmB/VuEFiT)OuROT(4<KDpE#I/\3dEW0kT
B)Z<>@/aF1=oMJ$;Z9Pm:]=)f9)_E]8H)-V7fGjU7.3M!6LR;@7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r
=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMR
o)A:^p&Xm\rqZQirql]nqu5FOgAh0Orr)iorql]krqHEcrq-3ZrpKdProa:Aro!e3rn.5"rm1Scrl"fM
rji$7riH*rrh07ZrfmDCreUQ+rdXolrcJ-XrbMLGraYq8ra#M,r`9"sqb[8er_3;`qapZTr^QcRr^>+#
r'U?Lr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdXrcnElre19,rf@&CrgNhZrhf[rrj2U6
rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq69brqcWkrqucorr0)#JcGHDrr2oqrqucmrqcWgrq??`
rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2
r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPb<u.pr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdX
rcnElre19,rf@&CrgNhZrhf[rrj2U6rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq-9c!Vc?fqYpBk
r;QZorn@D(s8N#sr;QTmqYp9hpAX^`o)A+WmJc>Kjo49=hYu7.f)F%qbl5]__#CtF[JmB/WW&[lSc4uT
P5^C=LAlc'I/\BiF8g(VCAqlF@fBa6>lIk)<rQ(t;>sAj:&@T_9)_BY8,c!T7INY56hEeE7/fXP7fGpT
8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!hJc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^
d/MVqgA]t.ir8*>kl0uKnG`"Xo`"R`q#:-hqu6NjriZ9Ps7?9irr2ipqu6Hkq#:!do`"F\n,D_Rkl0]C
ir7g6gA]\&d/M8gaSs!S]Df5;YPtO#U]-h`Qi<0IMuJJ1Jc:&rGlDd`DZ4DMBDuB>?iF=0=T2A#<;obo
:]=)c9E%Q_8GbpV7f,XC7.3M37/fXP7fGpT8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!h
Jc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^d/MVqgA]t.ir8*>kl0uKnG`"Xo`"Oap]:0brqcWkrquZm
gAfe)rr2oqrquclrqQKdrq69]rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8
re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]X
r_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGi
rn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWkrr)`nY5a(QoDeghrr)iorqcWhrq??arpp'XrpTjNroa:A
ro!e2rn.4trm(McrkeZJrji$4ri?$rrh07[rg!JDre^W-rdauprc\9[rb_XLrac":ra5Y.r`K/#r_i_m
qbR2br_*,[r^coVr^QZOpdFR<pdFmGqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9e
rdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rq?Ef!VlHhqYpBk
rVQTJs4@;Mrr2lqr;QTmq>U0gp\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\
P5^L@MuJA.JGsrqFoHF\DuOJMB)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*U8(L-17RmAIpdtHXqb6l^
r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'
rndY5roa:Frp0RPrpp'\rqHEerqZQjrqucoqu3buJcG?Arr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>
rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&ko
r_WSir_EGdqb-]Uqa].*r^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&A
rg`t[rhKIpriuI1rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqHKh!VuQjqu6NmrVQTJs4@;M
rqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9h>Z%*eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*
J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r;>X/d:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"
r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5rf[8Hrgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="A
rp'LNrpTjWrq-3arqZQiqu$Hlqu3buJcG?Arr2fnrquclrqQKerq-3\rpTjSrp0RIro="9rn[S*rm^qn
rlP/XrkJHCrj;[.ri#gkrgs+Trf[8@reLK*rdXolrcS3[rb_XKrau.<ra5Y0r`K/$r`9"rr_`Pgqb?iY
r^m)[f15g2r^llXr_<AeqbR2gr_i_rr`B)$r`oG/raGe<rb;@Krc.p[rcnElre(3*rf6u@rg*PTrhBCj
ric=.rji$Crl"fXrm1Smrn%/*ro!e9roj@HrpKdSrpp'\rqHEf!;Z`mqYU3irVQTJs4%)GrVl`oqYp9h
p\sjboDA%Vm/H8KjSn0<hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\Q
C&VZB@fBa6?2e%,=T2>"<;oep;#=&c:&[ic9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6
AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Y
p&=^bq>U6fr;QYns+14>s82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(
VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W
9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG
`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq#L6lqYL*err(@HeGoOIqu-NkrqcWirqHEbrpp'XrpB^N
roa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3
ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![
rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi
rql]nqu3PoJcG6>rr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^rkSNGrjVm2ri?$q
rh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2dqb?`Wpe10Or_<8b
qbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNR
rlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi!;cfoqu6Qkrm^tts8N#prVl`oqu6Hkp\smco`"@Z
mf)VQl2KiEir7g6gA]_'dJhGjb5T9W^Ab_CZi70-WrAdmTDk>ZPQ$XBMuJG0K)U5uGlDjbEW0kTCAqlF
AH$';?iF@1>5h\(<rQ+u<;oem;>sDh:]=,O:&@]b:B45h;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZF
DZ4YTFoHXbIf=otL&R#0O8b@BS,T&ZU].:mY5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Z
p&=^bqYpBkr;QZlri#jJs7$'frqlZnr;QTmqYp6gpAX^`nG_kTmJcALk5OB>hYu7.fDa1scMkuc_Z%:K
])K&8YPtR$U]-nbS,SWNO8b(:L&Q]'If=TkFoHC[DZ4DMBDuH@@fBa6?2e%,=oMJ$<W5ts;Ys>j;#=&f
:?G:J:B"&d;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZFDZ4YTFoHXbIf=otL&R#0O8b@BS,T&ZU].:m
Y5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Zp&=^bqYp?lquQ`nrr)`neGn%urr2fnrqucm
rqcWgrq??arpg!WrpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaur
rcnEbrc%jSrbVRHral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_WYnr)3Mmr`&ksr`B)$r`T5*ra#M2
raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&Brg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.C
rp'LOrp]pWrq69arqHEgrql]mrr)`nW;hGKnGiLequ-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+
rmUknrltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&
r`B)!r`&kqr_iVjh,+)JqbmDlr`&ksr`B)$r`T5*ra#M2raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&B
rg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.Crp'LOrp]pWrq69arqHEgrqc]n!W;lprVQTD
s3^lGrqlZnr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/W
Pl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;TYq<WQ6%r`B)$
r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAf
rm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKgrql]mqu-NnV>l,HmJm1bqu-Nlrql]jrqQKerq-3[rpTjQ
rp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<reUQ)rdXoprc\9^rbqdRrbMLH
raYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9g
rdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKg
rql]m!<)iorr1=FcN!nCqu-NlrqcWirqQKbrpp'XrpKdOrosFDro="8rnIG(rmUkmrlY5ZrkSNFrjVm2
riH*trh9=^rgEbLrfI,<reCE(rdXonrce?arc%jRrbMLGrau.@raGe6ra5Y1r`oG,r`];(qcNi!kuRdb
qcEi$!EiS)>5hb*>lJ%.?iFI4@K'j;B)ZHBC]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'
\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#Jmf)_ToD\C]q#:*gqYU3irVQSjs+148s8N#prVl`oqYp<i
q#9pbo)A.Xmf)POl2KfDj8Rs8g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0tU&LV^RJrELOT(4<LAlf(J,Xcn
GQ)aaE;j_RC]7uGB)ZB@@K'[6?iF@1>lIt,>5h\%=T2Cd<rQ1t=T2J&>5hb*>lJ%.?iFI4@K'j;B)ZHB
C]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#J
mf)_ToD\C]q#:*gqYU0jr;llqqu5"CcN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(q
rlkA_rkeZKrk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+
r`oG,r`\Phr`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_
V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQSjs+148s8N#p
rVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XB
N;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BB
CAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@
li->OnG`"XoD\F^q#:*gqYU0jr;llqqu5"CbQ%A9rql]krqZQfrq??`rp]pUrpKdNroa:Aro!e3rn@A$
rmC_jrlG)WrkJHErjMg2riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jTrbVRKrb;@Eral(=
raPk8ra5Y4oj@K#pg=#.ra,Y6!F]F9@fBm:Ac??AC&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UG
S,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtU,^s+145
s7lQlqu6Hkq>U-fpAX^`nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQ
OT(7=MuJD/Jc:/uHiA9hFoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?iFL5@fBm:Ac??A
C&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UGS,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,
i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtg6lrVaq>bQ%S@qu-Nlrql]krqQKdrq69^rpg!Vrp0RJroa:?
rnm_1rmq(trm1SfrlG)VrkABCrjMg1riH*trhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^P
rbDFGqe,n?rakk7raPY2qdT>1rac(A!G5s@BDuWECAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aG
S,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^ci2Dmf)FJ(hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQSd
s+145s8N#prVl`oqu6Hkq#:!dp&=R^nc&"Vli-/JkPjK?hu;F1f)F.tci2/faSs*V^Ab_C[f3N1XT#0t
UAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4MPCAqoDBDuNBAb]d7@eaC/@eaI4Ac?<=BDuWE
CAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^ci2Dmf)FJ(
hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVc]rrr1+@bQ%S@qu-Nlrql]krqQKerq??`rpp'WrpKdO
roj@Bro3q7rn@A&rmLemrlb;]rkSNHrk&09riuI*rhf[irh'1Zrg*PHrf@&:re^W,rdk&urd4Wirc\9^
rc7mSrb_XNrbMLJrb;7BratV1qe#h?rb2@I!GZBKC]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=A
Qi<KRTDkVbVZ*atYl;!.]DfPD_#DCRbPolfdf.hsgA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6Nm
rVQSds+145s8N#prVl`oqu6Hkq#:$epAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]_#D%H]Df/9
Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHBC&VlH
C]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=AQi<KRTDkVbVZ*atYl;!.]DfPD_>_LSbPolfdf.hs
gA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6NmrVc]rrr1+@bQ%S@q#13irql]krqQKerq69_rpg!W
rpB^Nroj@Cro*k6rnIG*rmLemrm(M`rl"fNrk&0<rj)O+ri5sprh07^rg`tQrf[8Arepc4reCE'rdaus
rd4WjrcnEarc8!Xrc%aQrbgk8qelCO!-%jTrc.pYrcJ-ard"KirdOirrdk''reUQ3rf@&Arg!JQrgs+^
rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RNrp]pWrq$-^rqHEfrqcWkrquZlqu35f
JcFp5rr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHErjMg3riZ7#
rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbq[Qrc.pYrcJ-ard"Ki
rdOirrdk''reUQ3rf@&Arg!JQrgs+^rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RN
rp]pWrq$-^rqHEfrqcWkrquZlrVcisrlb>bs7lTjrVl`oqYp<iq#:!do`"I]nc&"VmJcALkPjTBi;VU4
h#>n(e,I\mbl5]_`;[ON]Df>>ZMq',XT#*rU]-nbS,ScRPl?dDNW+k8LAll*K)U<"If=`oHN&0gG5cX`
FT-@;EW1"ZF9-K*rcS3`rcnEgrd=]ordb!"re19*repc9rfI,Drg3VRrh'1brhf[rric=,rj_s>rkJHN
rlG)_rm1Smrmq)(rndY4roO.BrosFLrpTjVrq$-^rq??drqZQiqu$Hlq#6ocJcFp5q#:0hrquclrqZQg
rq??`rq$-ZrpTjRrosFFroO.;rndY0rmq(trm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=
repc1re19&rdausrd=]krcnEcrcS3^rc?n8rcA'\rcS3`rcnEgrd=]ordb!"re19*repc9rfI,Drg3VR
rh'1brhf[rric=,rj_s>rkJHNrlG)_rm1Smrmq)(rndY4roO.BrosFLrpTjVrq$-^rq??drqZQiqu$Hl
qYgNprlb>\s8N#prVl`oqu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG
[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+Qk
rdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9
roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu3,cJcF^/rr2fnrqucmrqcWirqHEcrq-3\rp]pUrp0RJ
roa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-riH*trhTOdrgj%WrfmDFrf@&<reg]2re19&rdXot
rdOiord+Qhrcn3\mr\>IrcnEfrd+QkrdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4
rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu-TqaoB6Xrr2fn
rqucmrqcWirqQKerq-3\qsXONrp0RHroF(:rnm_0rn7;!rm:YirlG)Xrk\TJrk&0>riuI+riQ0srhKIc
rgs+Yrg<\KrfR2@rf-o8re^W/re19'rdalqpjW*gpjE'hpjW3l!.autre(3(reCE/repc8rf@&@rfd>K
rgNhXrh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:HrpBUOrpp'\rqHEerqZQi
rql]mrr)`nQN)O9hZ*TSqu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQ
rkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdXfqre(3(
reCE/repc8rf@&@rfd>KrgNhXrh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:H
rpBUOrpp'\rqHEerqZQirql]mrr)`nqZ"\;_Z0W7qu-NlrqlThrqZQgrq69_rpp'XrpKdQrosFFroF(:
rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\NrfmDFrfI,>rf$i6reUQ.re:?)
on*0oqgeZson*0r!/1H-L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R([/RN5]DfPD_>_LS
b5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQS[s+14,s8N#prVl`oqtp6h
q>U0gp&=U_o)A.Xmf)VQl2KlFjSn*:hYu=0f)F.td/M;hao9?[_>_1J]Df8<Zi73.Xo>=!VZ*=hTDkD\
R/WENPl?jFOT(:>N;e_6M#N/.L&QbuK)U>uJGt,mK)UH&L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\b
VZ*RoXo>R([/RN5]DfPD_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6Nm
rVQTjs2k;Xs8N#mrVl`oqu6Hkq>U0gpAXaao`"C[nG_nUli-/JkPjK?i;VX5g&BV&eGdhocMl&e`W!dS
^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[Rf8WPPl?mGOT(=?NrG":MuJV/M#N2/LAQ](LAlu'M#N83MZJ`o
rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?
rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu2o]JcFU,rr2]krqucmrqcWirqQKdrq69_rpg!WrpTjP
rosFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>Crf@&=
rf$i7regK,reLK-qh>$(reL9)reg]5rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6F
rkeZRrlkAerm:Yormq)%rnm_6ro3q?rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu6HlaoB$Rrr2]k
qtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$q
rhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rfR8F!L&`HPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-
[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgcq"speqtU-erfdA5s4IAN
rqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[_>_4K^&GSA[f3T3Yl:d(
X8]!qV#I(eT`1P^SGnrUR/WENPl?mGP5^R*O8G%<P5^[EPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-
[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgcq"speqtU-erqHH7s1JC/
rqlZnr;QTmqYp<iq#:$ep&=U_o)A.Xmf)VQl2KoGk5OB>hu;I2g&BV&e,I_nc2Poc`r<mT_#D(I]Df>>
[/RB1YPt['WrAsrV>d7eT`1P^SGnuVRJrTQQi<<GQ2$U@Q2[*KQi<?PR/r_DrgNhVrgiqZrhKIhri#gr
riQ1'rj)O1rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pXrq-3_rqHEerqZQi
rql]mrr)NhPQ-46f`1jJqu-Nlrql]krqZQgrqHEbrq-3\rp]pTrpB^Lroj@Dro3q7rn[S,rn%.urm:Yh
rlb;\rkn`NrkABDrj_s7rj)O,riQ1"ri#gmrhK@`rgs+ZrgNhSrg<\Org*>EpltZ@rg*PMrg<\QrgNhV
rgiqZrhKIhri#grriQ1'rj)O1rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pX
rq-3_rqHEerqZQirql]mrr)Nhp]&A8\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7
rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2O
qjdYVrgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'hYuF3
ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQSRs+14#s8N#prVl`lqu6Hkq>U0gpAXaao`"C[
nG_nUli-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkc
T`1S_T)5)XSGSfNRf8fRSGo)YT)PA]T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&g
dJhVofDaM'hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQTas2k;Is8N#prVl`lqu6Hk
q#:$epAX^`o)%nTm/H>Mkl0`Djo46<hu;I2g&BV&ec*qpci25hao9?[`;[UP_#D(I])K2<[JmK2Yl:j*
Y5YO%X8]*tW;`[kV>d:ZU\gkdV>d=lVZE]nri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mh
rm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu2KQJcF'rrr2fnrquZjrqcWh
rqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(
riH+"ri,mqrhfRhrhT"XqkX4frhf[mri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mhrm:Yp
rn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu6$`aoA^Iqu6Tnqu$HjrqcWirqQKe
rq69_rq$-YrpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>rjMg6rj2U0
qlp(&riPsrri5amql9FlriH1'!NrU&Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*
h>Z=2ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZireg`,s3L`Brr2lnr;QTmqYp<iq#:$e
p&=U_oD\7Ymf)VQlMg#HkPjQAir7j7h>Z.-g&BP$e,I_ncMl&eb5TE[`;[UP^](nF]Df>>[f3]6Zi79-
Yl:g)Xn\srWq`RjWq`XoXo>L#Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2
ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirpKg.s0Mb&rqlZnr;6BjqYp<iq#:!dp&=U_
o)A1Yn,DbSli-/Jk5OH@j8S!9hYu@1f`'J$ec*tqd/MAjbPoW_`r<mT_Y_+I]`,PB\c0,<[f3Z5Zi79-
Z0&:iZ2V$/ZN7D=rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJ
rpKdSrpg!Yrq-3_rq??drqZQirqlTjrr)NhMZ88-ci<nAqu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdO
rosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?rj_s9rj;[2rj)F+k-4iirj)O0
rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJrpKdSrpg!Yrq-3_
rq??drqZQirqlTjrr)Nhmf1E/YlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0rnIG)
rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH_#D1L
_u@UR`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZire1<&
s31N<rqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X
`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfJB^&GbF^])%J_>_@O`;[aTaSs<\bPofdci2;jeGe%u
f`'Y)h>?.0j8S-=kl0iGlhg,InG`%Yo`"U^q"speqtp<jrV6BUs2k;Fs7QBjrVQNlqu6Hhq>U0gp&=U_
oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMlcMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5
^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjU
rpg!Zrq-3_qtU0drqcWkqu$Hlp&9XEJcEsop&=shqu$HjrqcNfrqQKcrq-3]rpg!WrpTjRrp9XLroj@D
roF(<ro!e4rnIG+rn7;$rm^qprm:YirlkAarlP/\rl4rVrl"fQrk\KIrkI^3rkJ?Grk\TNrl"fTrl4rY
rlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hl
p&=1TaoAC@qu6KkrquZjrqcNfrqHEcrq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLel
rm:YirltGcrlY5^rl4iSrl"]On&#(Aqo&KQ!64rVrlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6
roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTjrr)NhJcC<$`rGr8qu-NlqtpBhqt^6crq??arq$-[
qsaUQrpB^Mroj@EroF(<qr%J1rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>rknWOrl+cS
rlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTj
rr)Nhjo<I&VuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1rnRM,rn7;'
rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iG
li-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3rqQHhqu6Hkq>U0gp\smcp&=U_nc&%W
n,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMfci25ec2PrUbPTN_c25f`ci2;jdJhSn
e,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[ap\sseq>:$fqtU-brnmats/5ni
rqlZnr;6BjqYU*fp\smcp&"@[nc&%Wn,DbSm/H;Ll2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqr
dehGkd-8mUd/22jdK.eErmUbormh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^
rq??crqZHfrqlTjrr)EeJcGWIJcEXfp&=jerquZjrqcNfrqHEcrq60[rpg!WrpTjSrp9XLrosFEroO.?
ro3q8rnm_2rnRM-rn7;'rn%%trm^qrrmL\krm9oUrm:PirmLepqpbVqrn%/%rn7;*rnRM/rnm_6ro3q<
roO.ArosFJrp9OMrp]pWrpp'[rq69arqHEfqtg<hqu$Hlo)@PHao@t4rr2ThrquQfrqQBbqt9s\qsj[S
rp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2
ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkJcG<@JcE=]rr2ThrquQfrqQBbqt9s\
qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrmgnsrn.5'rn@8)rndY3
qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu51Hao@b.rr2]krquZjrqcNfq"Od[
qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)h#?.,hu;R5hu;U6ir8$<
jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frdk+<s+13Ws8N#mrVl`lqu6Hhq=s^`o_\7Z
nGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekqg\'A$h>?+/i;VX5iVqj9jSn9?k5OTD
l2KuIm/HDOmf)\PnG`%Vo_A1[q>:$fqtp<drVQTCs2k;.s7QBdr;6BjqYU*fq"XO]oD\=XnG_nUmf)SP
li-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0d
qtg<hq#'^^JcG3=JcE+Wp&=aaqtpBhqt^6dq"=XXrposUrpTjSrp9XMrp':BroX4AroEt:ro3q9ro!J,
n(mZoro!e7qr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^e,RPiQ2gXYq#13iqtpBh
qt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,K
m/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<drV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"V
nG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]
p\t!cqYpBhr:p6crltJbs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,
kQ0o2ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkro)8RcrqlThqt^6c
qtL!\rq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?c
rql]mp&4de`;dsZN;rSMqu-Nlp&"abqt^6drqHEcqt9s\rq$-[rpg!Vrp]pUqsOINqs=4Gh<P"*!:9OJ
rpBLKrp]pUrpg!Yrq$-]qt9s^rqH<brqZHfqtp9grr)EeJcF[.JcD\Kp&=jerquHdrqcWirqZQgrqHEc
qt9s\rq$-[rpg!Vrp]pUqsOINqs=4Gh<P"*q!A"Iq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hl
o)?T-ao@+qqu60brquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.W
o`"O\pAXg`q#:*dqYpBhr:U$]rdk+*s+13Es82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\L
mdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp0+s2k:ls8Duprpp$er;6BdqYU*fq"XU\
p&"CYoD\=Xn_N^6nGr.Xo)A7Ro`"OYp\Xabq=sgcqtp<arUp/@s4%("s-`oarpp$er;6BdqYU*fq"XU\
p&"CYoD\=Xn_N^6nb_nVoC_bTp%\:Yq#:*aqYpBhr:U$]rj`!Ms+14Ks760drV6<cqu6Hbq>U0dp\smW
p&"CDoCqkXo^qhLqtC$`qtU'aqtg*bq#(-im/DS9eGk+"RK)jWqu-Nlqu$6drqc<`rqQBbrq>pUqt0%B
p%7qMqtC$`qtU'aqtg*bq#(-im/FNpao?qlo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`
qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*^rUp/ns2k:ls60LX
rpTg\r;6B^qUG<@qX+.YqtU*XrV6ACs1JA_s+LFOrql]`rV6<fqssU5q<[tWqtU*XrV6Abs2k:ls60LF
rq63Lqr[bOqsaLRr9"!0s1JA_s+LFOrosFTr8[\:qW[nJr9"!Os2k:ls4RGFrosCPr9!nNr:^'TrUTr=
s02NSs+14Cs7QBUrUTmKqs=7IrUTrPs2k:ls2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;o=s+13g
s1\Ktrdk*:s+13$s5<pTrdk+Is2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$
s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$
s2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$s+13$s+13$s+13ls+13$s+13$
s+13$s+13$s2k:k
~> %APLeod
EI
120 0 0 52 0 32 cm
BI
/Width 360
/Height 156
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$
JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?ql
JcC<$JcC<$JcC<$JcEjlJcC<$JcC<$JcC<$JcC<$ao?qlJcC<$JcC<$JcC<$JcEjlJcDhOf)>^Lrdk*%
s+13$s2b5irdk+4s2k:ls2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;o=s+14's7QBUrUTmKqtL$^
r9XCQrdk*Rs+13$s7QEbrosCPr9!nCr9XCQrfmH)s+14-s8N#^rUp*]qptTEqYL*do).kQqu20HZi>UV
JcGWIrr20\p&+L[eGB(>o).kQqu2r^ao?qlkl:GWn,<%Zqtos\eG0+@mJ?hZq#'UZq#5jE]`3Q_K`D&N
qu6'_q#($do(pl3m/$_Yq#'UZq#6rdao?qlo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`
qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*^rUp/ns2k:ls7cQm
rpTgbr:p0gqYU*`q"sgYpA=O^o\K-;oE"UVrq5jUrqH3_rqZHfq"ssdo)8ReJcEpnJcCr6rr2Kerr)io
q"t'eqt^$^qtKdWqt9s\h=LO9rq5jUrqH3_rqZHfq"ssdo)8ReYQ)`EJcG]Kqu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rp^!Zr:9jYp%87Vq"O[\rqZ?crqlTjp&4R_JcF7"JcD/<qu60brquZjq"jm`rqQ9_
qt9jYqt'gXqsiM3rpfmVrq#gTrq6'\qtU0dq"k!equ$-cp&;K$ao@+qqu60brquZjrqcNfrqQBbrq?6^
rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.Wo`"O\pAXg`q#:*dqYpBhr:U$]rdk+*s+13E
s82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\LmdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xab
q>:$fqtp<arUp0+s2k:ts8N#drVl`lqu6Heq"XR^o_\7Zo)%tVnGD\LmI0B0l1F<>lhKlHn,)VRnb_nV
oDA1TpA"F[qYpBhr:9gcrdk+*s+13Hs8N#drVl`lqu6Hkq"sj]pAX^]oD\=Xnc&%Tn+c;=lgO*,lhKlH
n,)VRnb_nVoDA1TpA"F[qYpBhr:9gcrk\WVs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQ
m/-,JlMKi=kjR^,kQ0o2ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkr
o)8RcrqlThqt^6cqtL!\rq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjV
rposYrq6'\rqZ?crql]mp&4de`;dsZQ2gXYq#13iqtpBhqt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LH
qrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,Km/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<d
rV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"VnG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!
ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]p\t!cqYpBhr:p6crltJbs-<WTrVl`lqu6He
q#:!dp&=UYo)A.Xn,DbSm/-,Jl2KoGkPOB?jSS!:ir7m/hr`emhZ2U4i;;O5j87p:jo4HBkl0iGlhg&J
mf)\SnG)SRo`"O_pA"F[qYpBhr:U#>s69Q7s0;UprVl`lqu6Heq#:!dp&=U_o)&"WnG_nUmf)SMli-/J
kl0cBjo4?<j8S';i:Z!ihYZ4-i;;O5j87p:jo4HBkl0iGlhg&Jmf)\SnG)SRo`"O_pA"F[qYpBhr:U$5
s2k;.s8N#mrVl`lqu6Hhq=s^`o_\7ZnGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekq
g\9J(gt_nbqqqD2rnm_6ro3q<roO.Aroj@Grp'LLrpB^QrpTaRrq$$Zq"Od`qtg<hqu$6fqu20Hn,It=
[/^.)q#13iqtpBhqt^$]rq-*Zrp]gRrpKdQrp9XLrosFGroX4AroF(<ro*k6ro!\2qq_/)qqLSnrnI,$
rn[J/ro!e5ro*k9roF(?roX4DrosFIrp9XOrpKdSqsaUVqt0[XrqZHfrqlTjq#1*he,RPiT)\fhp&4mf
q"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq!7q)!
rn.5'rn@8)rndY3qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu20Ho)F:@])Vd/
p&4mfq"k!bqtL!\rq-*XrpTjUrpKdProsFGroa:BroF(<qr%J2rndY1rnRM,rn7;'rmptsrm^)ZqpbVq
qptc!rn7;)qqV2-rnmV2ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-Ekf)NklT)\Ta
rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/rnRM+rn.5%rmq)!rm^_kqp>>g
rm:>arm:Yjqp>;ir6kSormh#!rn%/%rn72(rn[S2ro*k9roO.Aroa:Frp'LKrpB^Rrp]pXrq$-]qtC$`
qtU0drqlTjq#,dDo)F:@])VR(rquZjqt^6dqtL*`rq-3]rpp'XrpKdQrp0RKrosFFroX4Aro3q8rnmV/
rnRM+rn.5%rmq)!rm^_kqp>>grm:>arm:Yjqp>,drm^qtrmq)#rn.5'qqV2,rnm_6ro3q=roX4CrosFI
rp0RNrpTjUrpp'[rq-*]rqH<brqZQjqu$6ff)NklVuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdP
rp0RJroj@Ero=";qr%J1rnRM,rn7;'rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._p
ec+5#g&B_)h#?.,i;Va8j8S6@kl0iGli-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3
rqQHhqu6Hkq>U0gp\smcp&=U_nc&%Wn,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMf
ci25ec2PrUbPTN_c25f`ci2;jdJhSne,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[
p&=[ap\sseq>:$fqtU-brnmats/Q+rrqlZnr;6BjqYU*fp\smcp&=R^o)%qUmf)VQlMg#HkPjQAiqq[5
hYu@1g&BY'f)F.tdf.Sld/M>ic2Pocb5TN^`r!aS`;@I@_Z%IM`;[^U`r*jUao9H^bPocccMl2ici2>k
e,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"XoD\F^pAXgcq>:$fqtp<jrUp/@s+13is82fmrVl`l
qu6Hhq>U-fpAXaaoD\=XnG_kTmJcDMkl0cEjSn09i;VU4h>Z+,f`'J$e,Iepci2;jcMl)fbPoZ`ao9<W
`W!gQ_sbJA_u%CO`V[[Sao9H^bPocccMl2ici2>ke,IqtfDaJ&h>Z:.i;Vd9jSn?Al2KuImJcPNnG`"X
oD\F^pAXgcq>:$fqtp<jrUp0Os2k;@s8N#mrV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7
hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y`;[[R_Z%CK_#(n8^&,SA^];7L_Z%IP`W!mVaSs<\b5TWa
c2Q)hdJhVoec+5#g&Bb*hYuF3iVqs<k5OQClMg,KmJcSRnc&+Yo`"O_pA=Xaq=sj^rVQSFs+13is8N#m
rV69eq>U0gpAXaao`"F\nc&"VmJcGNlMfuGk5OKAiVqd7hYu:/gA]b(ec+(tdJhMlcMl&eb5TN^aSs3Y
`;[[R_Z%CK_#(n8^&,SA_#)"J_u@XS`r='Yao9H^bl5ldd/MGle,Insf`'S'g]$(/hu;U6jo4EAkPjcG
li-;Nn,DkVo)A:\p&=[^q#:*aqtU-eroO1%s02OurqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZB
iqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfGC]`Gg[
rkABHrkSNLrkn`Rrl+lXrlP/_rm(Mhrm:Yormq)$rnIG.qr%J6roF(BrosFJqsO@Nrq$-]rqH<bqtg<h
qu$Hlq#5sHJcEsoq#:0hrquZjrqcWhqtL*^rposUrpTjSrp0RKroj@Bro3h5rn[S.rn.5$rm^qorm1Sh
rlb;`rlG)Xrl"fRrk\TLrkJHHrk8<Dqn)j=qmlL3rjhp;rk&0Brk8<FrkJHJrk\TOrl"fTrlG)\rlb;d
rm1Sjrm^qurn.5)rn[J0ro="=roj@Grp0ILqsaUVrq-3aqtU'brqlTjrr)Wkkl8d)ZiBq%qu-NlqtpBh
rqZQgrq??arq-3\rpg!VrpKdOrosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?
rj_s9rj;[2rj)F+k-4iiriuO1!OK-3[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2
i;Vd9jo4EAl2L#Jmf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp/Is+13rs82fmrVl`lqu6Hkq>U0gpAXaa
o`"F\nc&"Vmf)POl2KiEjSn3=i;VU4h>Z(+f)F5!dJhMlci2,eao9<Z_u@OM^](nF]DfA?\Gir9[/RE2
ZMUohYl:p,ZMq30[/RN5\,Nr;]DfM@^])(K_u@[TaSsB^ci2;jdJh\qfDaG%h>Z=2i;Vd9jo4EAl2L#J
mf)\Snc&+Yo`"O_pAXjdq>U6iqtp<jrUp0Xs2k;Is8N#mrV69hq>U0gp\sjbo`"F\nG_kTmJcDMkl0cE
jSn0<hu;I2gA]e)eGdqrdJhGjbPoW_`r<pU_>_7L^&GYC\Gir9[JmN3ZMq',Yl:g&XT#9bWrB'rX8o@'
Xf_T,ric=+rj2U3rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjU
rpp'[rq69brqQKgq"sjbqu2KQJcF'rrr2]kq"t'drqQKerq69_rpp'XrpKdQrp'LHroa:Aro3q7rn[S-
rn7;#rmUkorm(MdrlP/Zrl"fPrkSNHrk&0>rjMg6rj2U0ric=*riZ."ri>:`ri>ptriQ1(ric=+rj2U3
rjVm:rk&0CrkSNLrl"fUrlP/_rm(MjrmUkrrn7;*rn[S2ro3q<roa:Frp'LMrpTjUrpp'[rq69brqQKg
q"sjbqu6$`aoA^Irr2fnrquZjrqcWhrqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mb
rl>#Vrk\TLrkABCrjVm7rj)O-ric=(riH+"ri,mqrhfRhrhT"XqkX4frh][n!N2jpWW&stXo>L&YPtg+
ZMq92\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBh
r;QZlreg`,s3L`ErqlZnr;6BjqYp9hp\smco`"FYn,D\Qli-,Ik5OKAiVqa6h>Z+,fDa>"d/MAjcMkrb
a8X$V_>_7L^Ab_C\,Nf7ZMq*-YPt^(XT#:"WW&jqVYd4hV!k)UV#I4iVZ*LmWW&stXo>L&YPtg+ZMq92
\Gj)=^AbnH_>_CP`r=*ZcMl/hd/MSpfDaJ&h>Z=2iVqs<kPj]Eli-;Kn,DnWo`"R`p\ssbqYpBhr;QZl
rpKg.s1/1/rqlZnr;6BjqYp<iq#:!dp&=U_nc&%Wn,DYPlMg#HjSn0<hu;L3gA]_'e,Iepci22gaSs0X
_>_7L^Ab_C\,Nc6Yl:j*Y5YL$WW&gpV#I+fU&L_aTDkGZSc5/VS+rHOS,8`TSc52\T)kRVrh07arhKIg
rhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@Grp0RPrp]pWrq-3_
rq??drqZQirqlTjrr)`nNW4S0ec5XJqu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7rndY.
rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2OqjdYV
rgs+]rh07arhKIgrhoapri?%$ric=*rj;[6rjr*CrkJHKrl+lYrltGgrmC_orn%/'rndY3ro3q<roj@G
rp0RPrp]pWrq-3_rq??drqZQirqlTjrr)`nnc-`2\c;I'q"t'drqQKerq69_rpp'XrpKdProsFFroO.<
rnm_2rn7;&rm^qorm(Merl>#VrkSNIrk&0?rjDa2ric=%ri5srrhTOfrh07_rgj%YrgNhSrg<JHqj$r@
rg!8Erg3\R!L]ATRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,
hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU,Ls+14#s7lQfqu6Ejq#:$ep&=U_o)A.Xmf)SPl2KlF
jo46<hu;I2g&BV&eGdhocMl&ea8X$V_#D(I]DfA?[JmK2YPtU%WrAsrV#I+fT`1S_Sc5/YRf8`SR/!!E
Q2$UCQ2$[ER/WNQRf8iVSc58\T`1_cV#I=lWW&stYPtj,[Jm`9]DfPD_#D:Oa8X<^cMl2ieGe%ug&Bh,
hu;U6jo4HBl2L&Kmf)_To)A7[p&=^bq#:*aqtU-[s2k;Rs8N#mrVQKkqYp9hp\smco`"FYn,D\Qli-)H
jo46<i;VR3gA]\&e,I\mc2Piaa8WpS^](qG\c0&:ZMq*-Xo>C#VZ*CjU&L_aT)P8ZRJrTQQN!-JPQ$aE
OQMW$OT(CCP6$l2rfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&
rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu2fZJcFC&rr2]kqtpBhrqQKerq??`rposTrp9XM
roa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$qrhTOerh07^rg`tUrg<\NrfmDG
rf[8Bk)]D$rf[8ErfmDJrg3VPrg`tYrh07arhTOjri?%#rilC-rjMg:rk8<Grk\TSrlY5brm1Smrmq)&
rnRM2ro*k;roa:HrpBUOrpp'\rq??crqQBerqlKhqu6?iaoB6Xrr2]krqucmrqcWirqQKdrq69_rpg!W
rpTjProsFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>C
rf@&=rf$i7regK,reLK-qh>$(reL9)re^]6!K2m8N;ek:O8b7?PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)
[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhUnc&1[p&=[aq#:*gqYpBkr;6Hirg*S8
s5*eTrqQHkr;QTmqYp<iq#:!dp&=U_nc&%Wn,DYPl2KlFir7m8hu;=.fDa;!d/M>ibl5T\_u@FM]`,G?
[JmE0Y5YO%VuELkT`1S_SGnuVQN!-JPQ$[CO8b1=N;eb7MYN#,L]3&*L&Qi+L\Q])MZ/P5N;ek:O8b7?
PQ$jHQN!?PSGo/[T`1bdVuEdsY5Y[)[Jm]8]`,\F_Z%ORbl5oed/MPof)FA%hu;U6ir8-?l2L#Jn,DhU
nc&1[p&=[aq#:*gqYpBkr;6HirqcZ:s2+g8rqQHkr;QTmq>U0gp\sjbo`"F\nG_kTm/H8KkPjTBi;VR3
g]#e'e,I_nc2Piaa8WpS^](nF[f3W4Yl:a'WW&gpU&L\`Sc5&VQi<9LOoCIANrFt9MZ/J3LAQ]"KC=Bd
KDpQ)LAZf*M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LSb5TZbd/MPof)FG'
hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQS[s+14,s8N#mrVl`oqu6Ejq#:$ep&=U_o)A.X
mf)SPl2KlFjo43;h>Z1.f)F.td/M;hao9?[_>_4K]`,A=Zi73.XT#3uVuEChTDkD\RJrQPQ2ZpFOT(:>
MuJV5M>i8,L%p;hJbXlsL&6W(M>iD3MuJb9O8b:@Q2[-LRJrcVTDkP`VuE[pXT#I'[/RN5]`,YE_>_LS
b5TZbd/MPof)FG'hYuI4jo4HBl2L&Kmf)_To)A7[p&=^bq#:*gqu6NjrVQTjs2k;Xs8N#prVl`oqu6Hk
q>U0gp\sgao)%nTm/H>MkPjQAi;VX5g]#n*df.VmcMkoa`W!^Q^AbbD\Gic4YPt['VZ*@iT`1P^S,SfS
PQ$^DO8b.<MuJS4LAll*KDpDuJ,"KiIJA3hIJA9jIfP#sJGt3#L&Qi+M>iG4NW,"<OoCRDR/WQRT)PD^
V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnWo`"Uaq#:*gqYpBkr;QZl
rg*S8s5*eTrqlZnr;QTmqYp<iq#:$eo`"FYn,D\Qli-)HjSn*:hu;C0g&BG!d/M>iaSs0X_>_1J]Df>>
Z2Us+Xo>3sU]-qcT)P5YR/W<KOoCF@NW+k8M>i8/K`6W'JGXikIf"QgI/\QhIf=ioJGt3#L&Qi+M>iG4
NW,"<OoCRDR/WQRT)PD^V#I7jXo>O'Z2V94])KGC_>_FQaSsKad/MJmg&Be+hu;R5jSn?Ali-;Kn,DnW
o`"Uaq#:*gqYpBkr;QZlrqcZ:s2G$;rqlZnr;QTmqYp<ip\smco`"F\nG_nUli-/JkPjK?i;VX5g&BS%
df.Vmbl5]__Z%=L^&GJ>Zi70-XT#0tV#I%dSc5)WPl?jFO8b.<MZ/G2K`6T&J,XutIf=`oHN&3hGkcFM
FSL"XGQ<!iH$TC8rd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhWrh07drhoasric=-rjMg>rkSNMrlG)^
rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTjrr)`nSH"0?iW&oVqu-Nlrql]krqZQf
rq??`rpp'XrpTjProsFFro3q8rnm_.rmq(srm:YgrlG)UrkJHGrjMg4ric=&ri#glrh07]rgNhNrf[8A
rf-o7reUQ,rdt-!rdausrd=]krd"KfpiZ%IpiZR\rd"Khrd=]nrdautrdt-&reUQ2rf-o<rf[8FrgNhW
rh07drhoasric=-rjMg>rkSNMrlG)^rm:Ymrmq)%rnm_6ro3q?rosFJrpTjVrpp'\rq69brqZQirqlTj
rr)`n!<:1@aT)8=qu-NlqtpBhrqQKdrq-3]rp]pTrp9XLroa:Bro!e3rnIG'rmUknrlb;]rkn`Mrk&0>
riuI*ri?$prhKIbrg`tTrfmDDrf-o8reLK,rdt-"rdOiord"Kfrce6^rcJ-[qf2(Drc.gUrH&'^FT-F^
GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$Z2V94]DfSE_u@^UbPolfeGe%ug]$(/
i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVleds+142s8N#prVl`lqu6Hkq#:!do`"I]nG_kTm/H;L
kPjTBi;VR3g]#e'e,I_nbPoQ]_u@FM]Df>>Z2Up*X8\spU]-nbSGnoTPl?dDNW+k8L]3#,K)U<"If=`o
H2`'fGPcO^FT-=XEURlGEVjeRFT-F^GQ)jdH2`3jIK"crK)UK'L]352NW,%=Pl@'LSGo/[UAh"gX8]:$
Z2V94]DfSE_u@^UbPolfeGe%ug]$(/i;Vj;kl0lHm/HGPnG`%Yp&=[aq#:*dqu6NjrVlcrs2k;as8N#m
rVl`oqu6Hkq#:$ep&=U_nc&%WmJcGNkl0]CiVqa6g]#n*df.VmcMkl``;[ON]Df8<ZMq$+WrAmpT`1P^
SGnfQP5^OAMuJS4LAlc'JGt#sHiA?jGlDgaErL(XE;OSQDWYg5DZ4PSE;X\SEW1%YFT-OaH2`0iIf=ir
Jc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`d/MJmg&Be+hu;U6jo4KCli-;NnG_tW
oD\F^p\t!fqYpBkr;6Hirh'4As6'F]rqQHkr;QTmqYp9hp\sjbo`"C[nG_hSli-,Ijo46<hu;C0g&BG!
d/M>ia8X$V^](kE[f3T3Y5YI#VZ*7fT)P8ZQ2ZsGO8b(:M>i8/Jc:3!If=]nHN&0gFT-=[EW0qSDuOY:
D>S5MDu4MQEW1%YFT-OaH2`0iIf=irJc:E'M#N>3O8b=AQ2[<QT)PD^VZ*RoY5Ya+\,O#=^]).Ma8XB`
d/MJmg&Be+hu;U6jo4KCli-;NnG_tWoD\F^p\t!fqYpBkr;6HkrW3#tbQ#ccrr2fnrqucmrqcWhrqHEc
rq-3\rpTjSrp0RIroF(<rnm_/rmq(srm:Yfrl>#SrkABDrj2U/riZ6trhKIbrgWnQrf[8Arepc4re(3$
rdXoord"KdrcA'ZqeuINrbVRLrbDFHqe,n?mq)B.rb)4E!,;OLCAr#JD#S;KDuObUF8g@^GlE'hJ,Y#u
KDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJa8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`
p\sseqYpBkr;QZlrh'4As6'F]rqlZnr;QTmqYp9hp\smco`"F\n,DbSli-,IjSn0<hu;@/f)F+sd/M5f
a8WpS^AbbDZi76/Y5Y<tU]-nbS,S`QP5^OAMuJS4KDpH$J,XfoH2`!dF8g4WDuOVQD#S5LCAqrEBDuN3
Ac$*=BDuWECAr#JD#S;KDuObUF8g@^GlE'hJ,Y#uKDp`,N;en;P5^gIS,T&ZU]..iY5Y[)Zi7T9^AbtJ
a8X9]d/MJmf)FD&hu;X7jSnBBlMg5Nn,DnWo`"R`p\sseqYpBkr;QZnrW3#tbQ#ccq#13hrqcWirqHEc
rq69]rp]pUrp9XKroX4>rnm_2rn%/!rm:YgrlG)VrkJHDrjMg1riH*urhBC`rgWnPrf[8Are^W0re(3#
rdFclrc\9_rc8!Wrbh^OrbDFHrb2:Crakt;raY2%raYh9!+c1BAc?<@B`;`FCAr&KDZ4VSErL1[G5cge
I/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;^]).Ma8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Y
p&=[ap\t!fqYpBerLa+@s6'FWrVl]nqYp<ip\smcp&=O]nG_nUm/H8Kk5OB>hu;I2fDa;!d/M8gaSs*V
^](hD[f3N1XT#3uUAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4JOCAqrHB`;WCAc$$;A*IJ%
A,Bg9Ac?<@B`;`FCAr&KDZ4VSErL1[G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh.kXo>R([f3l;^]).M
a8X<^d/MPofDaV*i;Va8k5OWEm/HJQnc&+Yp&=[ap\t!fqYpBgr;llqbQ#ccq#13hrqcWirqHEcrq-3Z
rpTjSrp'LGroF(:rn[S-rm^qprm(Marl"fNrk&0<riuI)rhoairh'1Yrg3VGrf-o8re19%rdXoorcnEb
rc.pVrbqdPrbDFHrb)4AraYq:raGe5ra>D+pg3`&ra>_4!+>n:@K'a8A,^'=BDuWEC]8/LDuO_TEW1+[
GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32]DfSE`;[jWcMl5jeGe2$h#?72jSnBBlMg5Nn,DhU
o`"O_p\t!fqYpBerLa+@s6'FWrVl]nqYp<ip\smco`"@Zn,DbSlMfuGjSn*:h>Z.-eGdkpcMkoa`;[ON
]Df8<Z2Um)VuEFiTDk;YQi<*GNW+k8K`6Q%J,XfoGlDjbEW0qVDuOSPCAqrHBDuKAA,]s:@K'X5@.dn%
?MIn,@/aO4@K'a8A,^'=BDuWEC]8/LDuO_TEW1+[GlE'hJ,Y'!K`6o/NrG.>Qi<KRTDkSaW;`puZ2V32
]DfSE`;[jWcMl5jeGe2$h#?72jSnBBlMg5Nn,DhUo`"O_p\t!fqYpBgr;llqbQ#lfrr2fnrquclrqZQg
rq69_rpp'XrpB^NroX4@ro*k5rn@A&rm:YgrlG)UrkABDrj2U.riQ0qrh9=_rg*PIrf@&;reLK)rdauq
rd"Karc8!Vrb_XLrb2:Brac";ra>V1qd'2+r`fA*kun!hr`f>+!F/n/?2e4.@/aX7A,^'=B`;cGD>nJQ
EW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_T
o)A7[p&=acq>U6fr;QZlrh]XGs6BX`rqlZnr;QQlq>U0gp&=U_o)A.XmJcGNk5OH@iVq^5gA]\&d/M8g
aSs'U^AbbDZi73.Xo>-qU&LY_QN!*IO8b+;L]2o)JGsrqH2_maErL"VD>n;LB`;TBAH$';@/F=.?2e+.
>Q.gj=oMV(>Ph\)?2e4.@/aX7A,^'=B`;cGD>nJQEW1%YH2`3jJGt0"L]383O8b@BQN!KTU&LkeXo>R(
Zi7T9^])+LaSsE_d/MVqg&Bk-iVqp;k5O]Gmf)_To)A7[p&=acq>U6fquHZrrVcWmdJqVorr2fnrqucm
rqZQgrqHEbrq$-YrpTjQrp'LDro3q7rnIG'rmLekrlP/XrkSNFrjVm2riH*trh07]rgNhLrf@&;reCE)
rdXoorce?`rc%jSrbVRIrau.?raPk7ra5Y1r`oG,qcWo#h,jPW!E`J'=oMY)>lJ%.?iFL5@fBp;B)ZKC
D#S>OE;jtYGQ)sgJ,Y*"LAm/2O8b=ARf8lWT`1nhXT#I'\,O#=_#D:Oao9Tbdf.ktg]$+0ir8$<lMg/L
n,DhUoD\F^p\sseq>U9jr;6Hlrh]XGs6]jcrqlZnr;QTmq>U0gp\sjboD\7Yn,D\QlMflDir7j7g]#e'
df.Pkao96X_#CtF\,NW2XT#0tT`1M]Rf8KLO8b+;LAli)J,XfoGQ)^`E;jbSD#S,IB)Z??@fBd7?iF@1
>lIt)=oMOZ=8Q,!=oMY)>lJ%.?iFL5@fBp;B)ZKCD#S>OE;jtYGQ)sgJ,Y*"LAm/2O8b=ARf8lWT`1nh
XT#I'\,O#=_#D:Oao9Tbdf.ktg]$+0ir8$<lMg/Ln,DhUoD\F^p\sseq>U9jquH]nrVlfDs3^lGrqlZn
r;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/WPl?dDN;eY4
Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;TYq<WQ6%r`B)$r`T5(r`oG.
qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4
ro3q@rp'LLrpTjWrq-3arqQKgrql]mqu-NnV>l,HmJm1bqu-Nlrql]jrqQKerq-3[rpTjQrp'LHro3q8
rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<reUQ)rdXoprc\9^rbqdRrbMLHraYq:qd9>.
r`oG+r`T5&r`B)"qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3
rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKgrql]m!<)io
rr1=FeGoOIqu-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+rmUknrltG]rkeZKrjMg3riZ6trhBCa
rg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&r`B)!r`&kqr_iVjh,+)J!)i_mr_req
r`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZrd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]
rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??crqcWkrqucoqu3PoJcG6>rr2fnrqucmrqcWgrq??arpg!W
rpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaurrcnEbrc%jSrbVRH
ral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_`Pjr_reqr`/r!r`K/&r`oG.ra>_6rac"@rbVROrc%jZ
rd"Kkrdb!%re^W8rfd>Irh'1brhf[trj)O3rkABJrl+l]rm:Ynrn7;,ro!e;roj@HrpTjUrpg!\rq??c
rqcWk!;llqr;QZlrm^tts8N#prVl]nqYp<ip\smco`"C[n,D\Qkl0`Dj8Rs8g]#k)dJhGjb5T9W^AbbD
Zi70-WrAalT)P2XPQ$[CN;eM0Jc:,tGlDjbEW0kTC]8#HAH$$:?iF:/>5h\(=8l8"<W5qr;Z9Pm;#=&]
:A@QS:B"#h;#F/h;>sJm;uTer<rQ2"=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=otK`6r0O8b@BRf8oX
UAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)hu;[8k5OTDm/HGPnc&1[p&=^bq>U6iqu6Qkri#jJs7$'frqlZn
qu6Hkq>U-fpAX^`nc&"Vm/H5Jk5OE?hu;C0f`':tcMkuc_Z%:K]Df/9YPtR$UAgb`Rf8NMOT(4<K`6Q%
If=TkFoHC[DZ4GNB`;QA@K'X5>Q.h*=oMM%<rQ+u;uT\o;>sDh:\@KX:%D'Y:]!uf;>sJm;uTer<rQ2"
=oMV(>Q/"/@fBp;B`;cGDZ4YTFoHXbIf=otK`6r0O8b@BRf8oXUAh1lY5Yd,]DfSE_Z%^Wc2Q,if`'Y)
hu;[8k5OTDm/HGPnc&1[p&=^bq>U3jqZ6Tkrr)`neGn%urr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:
rn[S,rmh"prlkA^rkSNGrjVm2ri?$qrh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&
r`B(ur_iViqbR2dqb?`Wpe10Or_3Afr(d,bqb[8jr`&kur`K/&ra#M1ra>_8rb)4FrbqdVrcJ-drdOis
reUQ3rfI,FrgWn[rhf[qrilC2rk&0Frl>#]rm:Yprn7;,ro!e:roa:HrpB^Srpp']rqHEfrqcWkrr)`n
W;hGKnGiLequ-NkrqcWirqHEbrpp'XrpB^Nroa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQ
rfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$WqbI#aqb[8j
r`&kur`K/&ra#M1ra>_8rb)4FrbqdVrcJ-drdOisreUQ3rfI,FrgWn[rhf[qrilC2rk&0Frl>#]rm:Yp
rn7;,ro!e:roa:HrpB^Srpp']rqHEfrqZWl!W2cnrVQTDs4%)GrVl`oqYp9hp\sjboDA%Vm/H8KjSn0<
hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\QC&VZB@fBa6?2e%,=T2>"
<;oep;#=&c:&[ic9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fs
LAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq>U6fr;QYns+14>
s82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(VZ*7fRf8TOOT(4<L]2l(
IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W9`@cc:]!uf;Z9Vo<W6,"
>5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<
l2L&HnG`%Yp&=^bq#L6lqYL*err(@HeGoOHrqucmrqZQgrqHEbrq$-YrpB^Mroj@Aro*k5rn%/!rm1Sd
rl"fNrjVm5ric=!rhKIbrg*PHrf6u5re(3"rcnEbrc.pRrb;@EraGe5ra#M+r`B)!r_reoqbR2cr_3)Z
mmun;oLSmNpe(NZr_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRRrcS3brdXp"reLK5rf[8Hrh'1brhob!
rj2U5rkJHNrlY5drmUkurndY4ro="Arp'LMrp]pYrq69brqQKgrql]mrr&eqJcG6>rr)iorql]jrqQKe
rq69^rp]pSrp'LHro=":rndY+rm^qnrlY5YrkJHArj2U-rhoajrh'1Urf[8@reLK*rdXolrcS3[rbVRJ
rb)4=ra5Y1r`T5%r`/qrr_iVhr_<Acpe(!Gmmlh;pe(NZr_<8cr_`Ynr`/r!r`T5+ra5Y5rb)4ErbVRR
rcS3brdXp"reLK5rf[8Hrh'1brhob!rj2U5rkJHNrlY5drmUkurndY4ro="Arp'LMrp]pYrq69brqHKh
!VuQjqu6NmrRCl!s8N#srVl`oqu6Ejq#:$eo`"C[n,DYPl2KlFiVqa6h#>k'df.Pk`r<gR^&GG=Z2Um)
U]-qcSGn]NNrFt9KDpE#I/\9fErL"VC&V`D@fBa6>lIq+<rQ(t;>sDk:]=,g9`%KX8c)$/7KGtJr^Z`T
r_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&Arg`t[rhKIpriuI1rk8<Jrl4r_
rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqQKgrql]mrr)`nY5a(QoDeghrr)iorql]jrqQKerq-3[rpTjP
rosFFro*k6rnRM'rmLekrl4rRrk8<=riuI)rhKIcrg`tNrf6u9re(3#rd=]frc8!Vrb;@DraPk6r`oG+
r`9"tr_`Ykr_NMgr_32^pdt?Qe40F-pdtHXqb6l^r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"
repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'rndY5roa:Frp0RPrpp'\rqHEe!;QZkq>U9jr;QZl
rn@D(s8N#srVl`oqYp9hpAXaao)A.Xn,DSNkPjQAi;VO2f`':tcMkuc_Z%7J\c/i4X8]$rT`1G[Q2ZjD
M>i2-JGsopG5cI[D>n;LAH$$:?iF7.=T2A#;Z9Pj:]=&e9D_<[8GbpV7efFI7.3M<7/]RP7JfRR8,GjV
8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZb
dJheth#?72jSn<@l2L/Nnc&+Yp&=^bq#:-hqu6QkriZ9Ps7?9irr2lqr;QQlq#:!dp&=O]nG_nUl2KlF
jSn*:h#>t*dJhGjb5T9W^&GSAYl:^&VuE@gS,S]PO8b"8K`6N$HiA3fE;j_RCAqcC@K'X5>5hY'<rQ"r
;>X/g9`@]^8cD9X8,c!Q7JK:>6hj(E7JfRR8,GjV8cDB^:&@`c;>sJm<rQ5#>5hn.@fBp;CAr)LE;k%[
HN&HoK`6l.O8bFDS,T)[VuEdsYl;34^Ac"Kb5TZbdJheth#?72jSn<@l2L/Nnc&+Yp&=[cp]:0brqcWk
rr)`ngAfn,rr2fnrquclrqHEcrq69\rpTjRroj@Cro3q7rn@A&rm:Yfrl4rQrk&0<riZ7"rhTOarg3VI
rf$i3rdt,srce?^rbh^Mrb)4=ra5Y0r`K/#r`&knr_NMgr_3;ar_!/\qa^WTqaL9Jh*_-/r'^NQqaUQT
qag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFMrc8!^rd=]sreLK3rf[8Jrgj%ari,n"rjMg<rkSNQ
rlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq??crqcWkqu-NnY5a(QpAb-kqu-NlrqcWgrq??arpg!VrpB^K
roO.=rnm_/rmq(qrlb;\rkSNFrjMg/ri,mmrgj%Trf[8>reLK)rd=]hrc8!UrbDFFraGe5r`oG)r`9"t
r_WSir_EGdr_*5_r^coVr^QcRpdEq*pdG*MqaUQTqag]Yr_*5ar_EGgr_WSnr`9##r`oG/raGe=rbDFM
rc8!^rd=]sreLK3rf[8Jrgj%ari,n"rjMg<rkSNQrlkAgrmq)&rnm_7roX4DrpB^Rrpg!\rq6?d!Vc?f
qYpBhrVlfMs4[MPrr2lqr;QTmqYp6gpAX^`nG_kTm/H2IjSn*:h>Z(+eGdenao96X^Ab\BZi7'*VZ*7f
Rf8QNO8at7KDpB"GlDgaDuOPOBDuE?@/aI2>5hS%;u9Dj:B!rd9)D3W8,c!T7K,^%6i9=K7/fXP7fGpW
8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gn
g&Bh,i;Vg:kPjiImf)_To`"O_p\t$gqu6NmrVlf!s+14Ds8N#srVl`oqu6Hkp\smco`"@Zmf)SPkPjQA
i;VR3f`'D"ci2&c`;[LM\c/r7XT#*rT`1DZPl?aCM#N&+J,X]lFT-4XC]7uGA,]m8?2e%,<rQ%p;#X5h
9`@Z]8c)$W7f,XR7*@sp7/fXP7fGpW8c)-Z9`@c`;#XGn<rQ;%>lJ.1A,^-?C]88OFT-OaJ,Y-#M#NJ7
Pl@-NT`1hfXT#R*\Gj5A`;[pYci2Gng&Bh,i;Vg:kPjiImf)_To`"L`pAt$_rqcWkrqucorr1XOh>dKR
qu-NkrqcWirq??`rpp'XrpB^MroO.>rnm_/rmq(rrlb;\rk\TFrjDa/rhoairgs+RrfI,<re(3#rd=]d
rc.pTrau.>ra>_1r`T5$r_i_mr_NMfr_!/]r^d#YqaUQRr^?3Bh*V'-o0`LFr^H]Rr^ZrYr^m)^r_<Af
r_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDRrhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=
rp'LLrp]pXrq69arqZQirql]nqu3l#JcGQGrr2fnrql]krqZQerq-3\rp]pSrp'LEro="8rn@A&rmC_g
rl4rRrjr*:ric=!rhBC`rfmDDrf$i/rdauqrcA'Yrbh^IraYq8r`oG*r`9"rr_`Yjr_<Aar^m)[r^ZiT
r^HfSmmGntmmI(Br^H]Rr^ZrYr^m)^r_<Afr_`Ymr`9##r`oG1rac"?rbh^SrcA'drdXp"rf$i<rfmDR
rhBCiric=.rjr*Frl4r\rmC_qrn@A/ro3q=rp'LLrp]pXrq-9b!VZ6dq>U6iqu6Qkrn[V1s8N#prVl]n
qYp<ip&=U_nc%tUli-/JjSn-;hYu1,eGdenao96X^](bBZMq!*U]-nbS,STMNW+e6Jc:)sH2_j`DZ4GN
AH$$:?iF7.=8l1u;#X8i:B!oc9)_E]8,c!T7K,^A6et*-6h!JB7/KFP7fGpW8cD?]9E%]c:]=2i<;otu
>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bU
oD\F^q>U6iqu6QkriuKSs7u]orqlZnqu6Hkq>U'do`"C[mf)POl2KcCiVq^5f`'D"ci2&c`;[ON\Gif5
Xo>*pTDk>ZP5^I?M>i)*IK"NkErKtUC]7lD@K'X5>5hV&<;o_n:]=,g9E%Q_8cD6Z7f,XR7-m:s6L7)=
7/KFP7fGpW8cD?]9E%]c:]=2i<;otu>5hn.@fBp;C]88OErL@`IK"fsM>iP7P5^sMTDkVbXo>X*\Gj8B
`;[mXci2Gnf`'b,iVqp;l2L#Jmf)bUo)SFap%A=[rqcWkrr)`nh>c=2rr2fnrqcWirqQKcrq$-YrpKdO
roj@Aro!e2rmq(srm(M`rkn`LrjDa0ri?$krg`tTrfI,;reCE%rd+Qdrc%jQrb2:>ra5Y1r`K/"r_i_l
r_EGdr_!/]r^d#XqaLKPnjCbjr'L'DqaCEPqaUQUr^m)]r_3;cr_WSlr`9##ra#M1raGe>rbMLPrcS3d
rdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LNrp]pYrq69crqZQirr)`nZ2]CT
q>^Hnqu-NjrqZQgrq69^rp]pTrp0RIro="9rnRM(rmLekrl>#UrkAB>rilC&rh07\rg<\Hrepc1rdXon
rcS3ZrbVRIraGe5ra#M*r`/qqr_WShr_3;`r^m)[r^QcRr^?<Eb<kkhqaCEPqaUQUr^m)]r_3;cr_WSl
r`9##ra#M1raGe>rbMLPrcS3drdXp%repc;rg<\Urh07krilC0rkABKrl>#`rmLesrnRM1ro="Arp'LN
rp]pY!;-Bcp&=acq>U6irVQTMs5!_SrqlZnqYp9hp\sgao)A+Wm/H8KkPjH>hYu7.e,I\mbPoEY^](hD
Yl:^&VZ*4eRJrELNW+_4Jc:#qG5cL\D>n5JAH$!9>lIn*<W5qr:]=,g9`@Z`8H)-Y7f,XR7.N^i6M<b=
6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4PQ%!LTDk_eXT#I'])KGC
_u@jYci2DmgA]q-iVr$>l2L&Kn,DnWo`"Uaq>U6irVQT!s+14Gs8N#prVlZmq#:$eo`"F\n,D\Ql2KlF
iVq^5gA]S#ci2,e_u@FM])Jr5X8]!qTDk8XPQ$R@L]2l(HiA3fEW0hSB`;QA@/aF1=oMG#;uTSl:B!rd
9)_B\8,c!T7K,^G6c)1_6i0:N7K,dU8,c'Y9)_K_:B"&g;Z9\q=oM_+@/a^9B`;lJEW1.\HiATqL]3;4
PQ%!LTDk_eXT#I'])KGC_u@jYci2DmgA]q-iVr$>l2L&Kn,DkXoE"UVrqHEfrqcWmqu5FOh>d9KrqcWh
rqHE`rpg!Vrp0RJroX4<rnRM+rmLekrlY5Wrk8<?ric=#rhTO`rg3VHreg]/rdXomrcJ-XrbMLFraGe4
r`fA(r`&kor_NMer_!/]r^ZrWqaLKPmmG>dp-S=;r^?WPr^QlWr^m)^r_3;er_i_pr`K/'ra,S4rau.F
rbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjVrq$-`rqZQiq#.Jt
JcGQGq#13grqQKerq$-ZrpTjProsFEro!e2rn7;!rm(McrkeZJrjVm1ri,mmrg`tSrfR2;re:?$rd"Kb
rbqdOrau.<ra,S.r`K/!r_`Yjr_3;`r^m)Zr^QcRr^?3B_F!f\r^?WPr^QlWr^m)^r_3;er_i_pr`K/'
ra,S4rau.FrbqdXrd"Kmre19.rfR2Grg`t`ri5t$rjVm?rkeZWrm(Mkrn7;,ro!e<roj@IrpTjV!:p6_
oD\L`q>U6crS@M0s82cor;QQlq#:$eoD\:Zn,DVOkPjQAi;VO2fDa.rbl5]__#CtF[Jm?.W;`LiRf8QN
O8aq6KDp?!G5cO]DuOGLAH#s8>lIn*=8l+s;#X5h9E%Q_8cD3V7K,^G6cVOb6M3_C7/fXP7fH!Y9)_K_
:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYrg]$.1jSnBB
lMg8Onc&.Zp\t!fqYU3irNZBRs7u]lrVl`oqYp9hp\sd`nc&"VlMfuGjSn*:h#>q)d/M8gaSs!S]Df5;
Y5YC!U&LM[Pl?aCL]2r*If=NiErL"VB`;QA?iF=0=oMM%;Z9Ml:B!oc9)_E]7f,XR7.N^U6M3_C7/fXP
7fH!Y9)_K_:B")h;Z9bs=oM\*?iFU8B`;rLF8g@^If=ruL]3A6Pl@-NU&LthY5Yj.])KMEaSsE_d/MYr
g]$.1jSnBBlMg8OnGr.]oCMtUrqZQiqu$Hlh>c=2rr)iorql]jrqQKdrpp'XrpKdLroO.=rndY.rmh"p
rlb;[rkJHBrj)O(rh]Udrg3VIrf6u2rdXoorcA'XrbVRFraPk6r`T5%r`&knr_EGdr^m)[r^ZrWr^HfS
njC>^m6^J5r^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192rf[8Irh'1dri?%(
rji$Crl+lZrm:Yprn7;-ro3q>roj@Lrp]pXrq??crqZQjrqucoZ2]CTq>^HmrqucmrqZQgrq??^rp]pT
roj@Cro3q6rn@A%rm:Yfrl+lOrj_s5ri?$prh'1Vrf[8@re19#rd4Wcrc%jQral(<ra5Y-r`B(ur_WSh
r_3;_r^d#Yr^QlUr^?<EYX8"Mr^?`Sr^QlWr^d#[r_3;dr_WSnr`9#$ra5Y6ral(FrbqdWrd4Wpre192
rf[8Irh'1dri?%(rji$Crl+lZrm:Yprn7;-ro3q>roj@LrpTpY!V5g\pAXgcq>U9jr;QZNs5!_SrVl`o
qu6Ejp\sjbnc&"VmJc>Kjo49=h>Z(+eGdbmao96X^&GM?Z2Ua%U]-kaPl?aCMuJ>-If=ZmErKtUCAqcC
@/aI2=T2>";Z9Ml:&[fb8cD9[8,bsV7.3L]6L@,16iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#?2e:3AH$?C
DZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?`;[mXcMl>mg&Bh,ir8*>kl0uKn,DkVp&=^bq>U9jr;QZ"
s+14Gs8Murr;QTmq>U-fp&=L\n,D_Rkl0]Cir7d5f`'D"cMkrb`;[IL\,NZ3WW&[lT)OuRO8b(:K)U5u
HN%saDZ4DMAH$!9?2dt*<W5nq;#X2g9E%N^8H)-Y7K,^D6a/oJ6iKLQ7K,gV8H)3[9E%Zb;#XAl<rQ5#
?2e:3AH$?CDZ4\UHN&BmK)U]-OT(LDT)PMaWW'1%\,O)?`;[mXcMl>mg&Bh,ir8*>kl0uKmf;kYnaZVO
rqHEfrql]mrr([Qh>dKQrqucmrqQKdrq69\rpTjRroj@Cro*k3rn.5!rltG`rkn`JrjDa/rhoairg`tO
rf6u7rdauqrce?\rbVRJraPk6r`oG(r`/qpr_WSgr_*5]r^ZrWr^HfSog?G[l9b/2r^?`Sr^QlWr^d#]
r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUkurnRM3roO.C
rpB^Rrpg!\rqHEerql]mrr',%JcGQGrr)iorql]irq??arpg!VrpB^KroO.<rnRM*rmUkkrlG)Vrk/6<
ric=!rhBC^rfd>Are^W)rd=]hrc%jQrb;@@ra5Y0r`B)!r_`Ykr_<Abr^d#Yr^QlUr^?EHVaC&Dr^?`S
r^QlWr^d#]r_<Agr_`Yor`B)(ra5Y6rb;@Jrc%j\rd=]qre^W7rfd>Orh9=hric=/rk/6JrlG)`rmUku
rnRM3roO.CrpB^R!:^*[nc&4\p\ssequ6NmrS@M3s8N#srVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8gA]\&
dJh>g`r<gR\c/r7YPt?sT)P/WOT(1;LAl`&HN&$cDuOMNBDu<<?2e%,<W5qr;#X5h9E%N[8,c!W7.iq*
6N0:85lO(G6KCK16i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&N;eq<RJriXV#IRs
[/RW8_>_IRbPoogec+;%hu;[8k5O]Gmf)_To`"O_p\t$gqu6QkrjVoYs8;orrr2lqr;QQlp\smco`"@Z
mJcGNk5OE?hu;@/f)F(rbPoN\_>_"EZi70-V#HtbRJr<IMuJJ1JGsloFT-4XCAqlF@/aI2>5hP$;uTVm
:B!oc8c)$W7fGgK6f:<160UZ66/=m)6i0:K7fGpW8cDB^:B")h;uTer>5hh,@/ag<C]88OFT-UcJGt<&
N;eq<RJriXV#IRs[/RW8_>_IRbPoogec+;%hu;[8k5O]GmJu_WnF6GLrq69brqcWkrr)`nj8\';rr2oq
rquclrqHEcrq$-YrpB^NroO.=rnm_.rmh"prlY5ZrkJHBrj)O*rhBC_rg3VFreg]/rdFcjrcA'Urb;@C
ra>_1r`T5#r_relr_EGcr^m)Zr^QlUnjDG(qa'@0r^$KLj?iN,r^HfUr^ZrZr_*5cr_NMkr`/r#r`oG1
ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RNrp]pYrq69brqcWk
rr)`n\,V$Zr;Zcqrr)iorqcWgrq??_rp]pSrp0RFro3q7rn7;$rm:Yerl+lOrj_s5riQ0orgj%Trf@&9
re:?"rcnE`rb_XKral(:r`oG*r`/qrr_NMgr_*5^r^ZrWr^HBFj$NW/k!8o3i'R*(r^HfUr^ZrZr_*5c
r_NMkr`/r#r`oG1ral(Crb_XUrcnEjre:?/rf@&Frgj%_riQ1*rj_sBrl"fYrm:Yprn7;.ro3q=rp0RN
!:U$YnG`%Yp&=^bqYpBkrVQTSs5<qVrr2lqr;QQlp\smcoD\7YmJcGNjo49=hu;:-e,I\maSs*V^](\@
Z2Uj(T`1G[QMupDM>i/,I/\?hErKnSB`;N@?iF:/=T2;!;>sAj9`@Z`8cD3V7JK7+6JXp*6K(9+6iKOO
7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gnf`'e-
ir8'=li-;NnG`%Yp&=^bqYpBkrVQT's+14Js8N#srVl`oqYp6gpAX[_nG_hSli-#Fir7j7f`'A!ci2#b
_u@FM[f3Q2XT"mlS,S`QNrFn7KDp8tGQ)X^D#S,IA,]j7>Q.b(<;obo:]=&e9)_E]7f,XL6et)b5i"d%
6iKOO7fH!Y9E%Wa:]=8k<;p#!>Q/"/A,^-?D#SJSGQ*!hKDp]+NrG@DSGo2\XT#L([f4&@`;[jWci2Gn
f`'e-ir8'=li-8On,`%Jrq$-^rqHEgrql]nqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(t
rm1Sbrkn`Lrj;[.ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NK
j$N`2f0B=%!C9$36MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[
WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]
n,D\QlMflDiVq^5f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml
:B!oc9)_B\7fGjU7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^d
JGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu5XUi;`fU
rqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`rk\TIrj2U,ri#ggrgEbLrepc0rdauorcS3ZrbDFE
raGe3r`T5%r_i_kr_<Abr^m)Zr^HfSog@k.qa&du!C/pL60:N,6iKLQ7K,gV8cDB^:&[ug;Z9bs>5hh,
@K'j;CAr2OFoH^dJGt<&MuJq>RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L&Kn,DnWp&=^bqYpBk
r;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,W;`FgRJrELMuJG0
JGsloFoH@ZCAqiE@K'R3=oMM%;Z9Jk:&[fb8cD6Z7K,^J6fp`46.A1!60:N,6iKLQ7K,gV8cDB^:&[ug
;Z9bs>5hh,@K'j;CAr2OFoH^dJGt<&MuJq>RJriXW;`t!Zi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L#LmfDnG
rpp']rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69\rpTjProsFBro!e2rmq(srm(M^rk\THrj2U,rhoae
rg<\Jreg].rdXolrcA'Wrb2:Ara>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=(.cp7Loi'R<.r^?`Sr^ZrZ
r_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1ro="B
rp9XQrpg![rqHEgrql]mqu4))JcGZJrr2oprql]krqHEbrpg!Vrp0RJro="9rnRM(rmLekrl+lQrk/6:
riZ6urgs+Vrf[8<re19#rcnE`rbqdLrac"9r`oG*r`9"rr_NMfr_!/\r^ZrVr^?NKj$LpSi'R<.r^?`S
r^ZrZr_!/ar_WSlr`9##r`oG1ral(BrbqdXrcnElre19.rf[8Jrgs+eriQ1+rk/6Grl+l^rmLesrnRM1
ro="Brp0XR!UoLVnc&1[p\t$gqu6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhoc2P]]
_#CtFZ2Uj(VZ*.cQi<-HM#N&+J,XWjErL"VBDuH@@/aF1=T2>";#X5h9`@W_8H)*X7K,^M6g6r:6-V[j
5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5McXT#L(]DfVF
`W"-]dJhYph#?41ir80@li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7
h#>h&d/M;h`W![P]Df)7XT#*rSc4uTOoC19KDpB"G5cO]DuODKAH$!9>lIk)<W5ho:B!rd8cD9[7fGjU
7/0.66N09i5lO(36Mj.L7/fXS7fGpW8cDE_:B")h<W6,">lJ.1AH$6@DuOhWG5d!jKDp]+OoC^HSc5Mc
XT#L(]DfVF`W"-]dJhYph#?41ir80@lN$ASn*g8Grq-3`rqcWkrquZmj8\';rr2oprqcWirq??_rp]pT
rp0RIro3q6rnIG%rm:Yhrl"fNrk&07riH*qrg`tRrfI,8re(3!rcS3[rb_XIrac"9r`oG)r`/qor_EGd
r^m)[r^QlUr^?NKlpCS8bs:tfr^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4Irc.p[rdOiu
reUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@HrpKdTrq-3`rqZQjrquZm\,V$Zr;Zcqrqucl
rqZQerq$-YrpKdOroj@@rndY/rm^qorltG\rkJHEriuI(rh]Uarg*PFreUQ+rdOihrc.pSrb)4@ra>_1
r`K/"r_WShr_3;_r^d#Xr^HfSpd=C7qa&(ar^#d8qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4I
rc.p[rdOiureUQ8rg*PRrh]UpriuI7rkSNOrltGirm^r%rnm_7roj@H!:BmUmf)_To`"R`q>U9jr;6KR
s5<qVrr2ipqYp<ipAX[_nG_kTli-,Iir7g6g]#_%d/M8g_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[
D>n/H@fBa6>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_U5k@8'6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7
B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0lHmf)_To`"R`q>U9jr;6K&
s+14Js8N#sr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/eGdhobl5NZ^](hDYl:[%V#Hn`QMusEM#N&+If=Kh
EW0hSB)Z9=?iF7.=8l1u;#X5h9`@W_8H)*X7/K@66FfAD6N0@L7/f[T8,c*Z9`@cc;#XGn=T2M'?iFR7
B)ZZHEW1+[If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5ugeGe5%hu;X7kl0iImK)bDrp]pZrq??erql]m
qu5XUj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&s
rcS3[rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%
ra5Y7rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQj
rqucorr0D,Jc>cNs8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdmS,S]P
O8aq6Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:B")h
<;oqt>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@l2^5QmdC)D
rq-3`rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Serkn`Lrji$4ri5sm
rgNhOrf@&6rdk&srcS3[rb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZ
r_3;cr_WSmr`9#$ra5Y6ral(Grc.p[rdFctreLK6rfmDNrhKImrilC4rkABLrlb;ermUl$rndY5roj@H
rpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5g]#\$ci2,e_u@CL
\c/i4WrAdmRf8TOO8aq6Jc:)sFoHC[D>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_G5itE46i0:N
7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFoHggK)UQ)O8bCCRf9)]WrB7%\c0>B_u@jYci2Dmg]$(/
iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RIro*k5rnIG$rm1Se
rkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[r^QlTqa9L4a$B5]
k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKImrilC4rkABKrlb;e
rmUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^nG_kTli-,IiVq^5
g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ
6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCCRf9)]WrB7%\c0>B
_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp0RI
ro*k5rnIG$rm1SerkeZJrji$4ri5smrgNhOrf@&6rdk&rrcJ-Yrb_XGraPk6r`T5%r_remr_EGdr^m)[
r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y6ral(Grc.pZrd=]rreLK6rfmDNrhKIm
rilC4rkABKrlb;ermUl$rndY5roj@HrpKdTrq$-^rqZQjrqucorr0D,Jc>cNs8N#srVl`oqYp<ip&=R^
nG_kTli-,IiVq^5g]#\$ci2,e_Z%7J\c/i4WrAdmRf8TOO8aq6Jc:&rFT-7YD>n,G@fBa6=oMM%;uTVm
:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-@fBs<D>nPSFT-[eJc:H(O8bCC
Rf9)]WrB7%\c0>B_Z%aXci2Dmg]$(/iVr'?l2^5QmdC)Drq$-^rqZQjrqucorr1sXj8],Xrr)iorqcWi
rq??_rp]pTrp0RIro3q6rnIG$rm1SerkeZJrji$4ri5smrgWnPrf@&6rdk&rrcJ-Yrb_XHraPk6r`T5%
r_remr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;cr_WSmr`9#$ra5Y7rau.Hrc.pZrd=]r
reLK6rg!JPrhKImrilC4rkABKrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrqucorr0D,Jc>cNs8N#s
rVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_Z%7J\c/i4WrAdmS,S]PO8aq6Jc:&rFT-7YD>n/H
@fBa6=oMM%;uTVm:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:&[ug;uThs=oMe-A,^*>D>nPS
FT-[eJc:H(O8bFDS,T2^WrB7%\c0>B_Z%aXci2Dmg]$+0ir80@l2^5QmdC)Drq-3`rqZQjrqucorr1sX
j8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm1Serkn`Lrji$4ri5smrgWnPrf@&6rdk&srcS3[
rb_XHraYq7r`];&r`&knr_EGdr^m)[r^QlTqa9L4a$B5]k!K&7qaCEQr^ZrZr_3;dr_WSnr`9#%ra5Y7
rau.Hrc.p[rdFctreLK6rg!JPrhKImrilC4rkABLrlb;ermUl$rnm_7roj@HrpKdTrq-3`rqZQjrquco
rr0D,Jc>cNs8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6g]#\$ci2,e_u@CL\c/i4WrAdmS,S]PO8aq6
Jc:)sFoHC[D>n/HA,]j7>5hV&<;o_n:B!rd8cD9[7fGgQ6fp_G5itE46i0:N7fGpW8cDE_:B")h<;oqt
>5hn.A,^*>D>nPSFoHggK)UQ)O8bFDS,T2^WrB7%\c0>B_u@jYci2Dmg]$+0ir80@l2^5QmdC)Drq-3`
rqZQjrqucorr1sXi;`fUrquclrqZQerq$-YrpKdOroj@@rndY/rm^qorlkAZrkJHDrilC%rhTO`rg*PE
reUQ+rdOihrc.pSrau.=ra5Y.r`B(ur_WShr_3;_r^d#Xr^?WNk!I*Ro0DG)r^6QNr^QlWr^m)_r_<Ag
r`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rp'LNrp]pZ
rq??erql]mqu4))JcGZJrr2oprqcWirq??_rp]pTrp0RIro3q6rnIG%rm:Ygrkn`Mrjr*5ri5snrg`tR
rf@&7re(3!rcS3[rb_XHraPk6r`];&r`&knr_EGdr^m)[r^QlTqa9L4\No:Dr^6QNr^QlWr^m)_r_<Ag
r`&l!r`];.raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm:YornIG0ro3q@rosLO!UfCT
nG`(ZpAXmequ6Njro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1eGdhobl5Q[^](hDYl:^&V>d%b
QN!!FM#N&+If=NiErKtUB)Z<>?iF:/=8l5!;#X5h9`@W_8H)*X7/K@66Mj'n5k[JB60:N56i0:N7fGpW
8cDE_:B")h<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41ir80@
li-APnc&1[pAXpfqu6NjrjVoYs8;orrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7h#>h&d/M8g`;[ON])Jr5
X8\spSc4rSOT((8KDp?!G5cO]DZ48IA,]j7>Q._'<W5ho:B!rd8cD9[7fGgQ6fp`46,Gnd60:N56i0:N
7fGpW8cDE_:B")h<W6,">Q/"/A,^*>DZ4\UG5csiK)UT*OT(UGSc5JbX8]@&])KJD`;\![d/MPoh#?41
ir80@lN$ASn*g8Grq-3`rqcWkrquZmj8\';rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM&rm:Yhrl+lP
rk&07riH*rrgj%TrfR29re(3"rc\9]rbqdKrac"9r`oG)r`/qor_EGdr^m)[r^QlUr^?NKksGA8bs;(i
r^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[rriuI7rkSNP
rltGirm^r&rnm_7roj@IrpTjVrq-3`rqcWkrquZm\,V$Zr;ZcqrqucmrqcWfrq-3[rpTjProj@@rnm_1
rm^qorltG]rkSNFriuI(rhf[crg3VHreUQ+rdXojrc8!Vrb)4@ra>_1r`K/"r_WShr_3;_r^d#Xr^HfS
pd=:4r^"Lgr^#[5qa:?Nr^HfUr^ZrZr_3;dr_WSor`K/)ra>_9rb)4KrcA'^rdXp"reUQ9rg3VTrhf[r
riuI7rkSNPrltGirm^r&rnm_7roj@I!:KsWn,DkVo`"R`qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbnc&"V
li-/Jj8S!9h#>n(df.Pk`W!^Q]`,8:Y5Y?uT)P,VP5^@<K`6K#GlDd`DuOGLAH$!9>lIn*<rQ"r:]=)f
9)_B\8,bsV7/0.06I8!q5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#MZ/e<
R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L&Kn,DkVo`"UaqYpBkr;6K&s+14Js8N#sr;QTmqYp6g
p&=L\n,DYPl2K`Bi;VO2f)F+scMkf^_>_+HZi7-,VuE:eR/W9JMZ/;.J,X]lF8g+WB`;QA@/aF1=oMJ$
;Z9Jk:&[ca8H)-Y7K,^M6fUMV5i>!+6iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:B`;rLFT-OaJ,Y-#
MZ/e<R/W]VVuEgtZi7W:_#D=PcMl8kf)FJ(hu;[8l2L#LmfDnGrpg![rqHEgrql]mqu5XUi;`fUrqucm
rqcWgrq69\rpTjQrp'LDro!e3rmq(srm(M_rk\TIrj;[-ri#ggrgEbLrepc0rdXomrcJ-XrbDFEraGe3
r`T5$r_i_lr_EGbr^m)[r^QlUr^?WNj$NW/ej'7$5lO(-6N0@O7/fXS7fGsX8cD?]:B")h;Z9_r=oM_+
@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg/Ln,DkVo`"UaqYpBk
r;6K&s+14Js8N#sr;QTmqYp6gp&=L\n,D\QlMflDi;VR3f)F+scMki__>_.I[/R6-W;`FgRJrELMuJG0
J,X`mFT-4XCAqiE@K'R3=oMJ$;Z9Ml:B!lb8cD9[7fGjU7/K@36Mj'u5lO(-6N0@O7/fXS7fGsX8cD?]
:B")h;Z9_r=oM_+@K'j;CAr/NFT-RbJ,Y0$MuJq>RJriXW;a""[/Rc<_Z%RScMl8kf)FM)iVqp;lMg,M
mfDnGrpg![rqHEgrql]mqu5XUi;`fUrqucmrqcWgrq69]rpTjQrp'LDro*k5rmq(trm1Sbrkn`Lrj;[.
ri5sjrgNhNrf$i2rdauorcS3ZrbMLFraPk5r`];&r_i_lr_EGcr_!/\r^QlUr^?NKj$N`2f0B=%!C9$3
6MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[WrB4$[/Rf=_Z%XU
ci2Dmf)FP*iVqp;lMg/Ln,DnWp&=^bqYpBkr;6K&s+14Js8N#sr;QTmqYp6gp&=O]n,D\QlMflDiVq^5
f)F.tci2#b_u@CL[/R9.WrA[jRf8QNN;eS2JGsloFoH@ZC]7rF@fB^5>5hV&;Z9Ml:B!oc9)_B\7fGjU
7/0.06N0:&5lO(06MNqI7/fXS7fGsX8cDB^:B")h;Z9bs>5hk-@fC$>C]8;PFoH^dJGt<&N;f(@S,T)[
WrB4$[/Rf=_Z%XUci2Dmf)FP*iVqp;lMg,MmfDnGrpp']rqHEgrql]mqu5XUi;`fUrr)iorqcWgrq??_
rp]pSrp0RFro3q7rn.5!rm1Sbrkn`MrjMg2riH*lrgWnQrf6u7re(2trce?^rbVRIraYq7r`fA(r`&ko
r_NMer_!/]r^QcRpd<k(h*Cp*iBm<,r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]treUQ6
rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.FrpB^Srq$-^rqHEgrql]nqu4))JcGZJrr2oqrqucl
rqHEcrq$-YrpB^NroO.=rnm_-rmUkmrlG)VrkJH@riuI(rh07[rg*PDre^W,rd=]hrc8!Srb2:@ra5Y/
r`K/!r_`Yjr_3;`r^m)YqaL9Ih*Tp_h*Um(r^H]Rr^m)^r_3;er_i_pr`K/(ra5Y7rb)4Hrc8!^rd=]t
reUQ6rg*PRrh07lriuI2rkJHNrlG)brm^r"rnm_7roO.Frp9^T!V#UXoD\F^p\t$gqu6Qkro=%:s8N#s
rVl`oqYp6gpAX^`nG_hSli-&Gj8Rs8g&BM#d/M2e`W![P\Gif5Xo>*pT)P)UOT(.:K`6H"H2_maD>n5J
AH$!9>lIn*<;oep:]=)f9)_EW7fGgQ6et*+60:H362a./6N0@L7/07N8cDB^:&[rf;Z9Yp=oM\*@/a^9
C&VuKF8gF`If>$"MZ/_:Qi<QTU].CpZMqB5_#D=Pb5Tceec+8$hu;[8k5O]Gmf)_To`"O_p\t$gqu6Qk
rjVoYs8;orrr2lqr;QQlp\smco`"@ZmJcGNk5OE?hu;=.eGdhob5TBZ_#CkCZMq!*U]-kaQi<*GMZ/;.
If=WlF8g%UB`;QA@/aF1=oMD";Z9Jk:&[ca8bbdS7/K@-6Mj(25lO(*6N0@L7/07N8cDB^:&[rf;Z9Yp
=oM\*@/a^9C&VuKF8gF`If>$"MZ/_:Qi<QTU].CpZMqB5_#D=Pb5Tceec+8$hu;[8k5O]GmJu_WnF6GL
rq69brqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroX4?rnm_/rmq(rrlb;\rk\TErj2U-rhTOb
rgEbIrepc1rdauorcJ-XrbDFFra>_2r`];$r_remr_EGcr^luWr^QlTog@Y(r^#d6r^$BIj?i`2qaC<N
r^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$Erl4r\rmC_qrn@A/
ro="?rp0ROrp]pZrq69brqcWkrr)`n\,V$Zr;Zcqrr)iorqcWgrq??`rp]pSrp0RGro="8rn@A&rmC_g
rl4rRrji$7ric<srgs+WrfI,;reCE&rd+QcrbqdNrb)4<ra#M,r`/qrr_WShr_*5^qa^WTr^?EHi'RE/
ks556h*V!+qaC<Nr^ZrZr_*5cr_WSmr`/r$ra#M2rb)4GrbqdXrd+QoreCE2rfI,Irh'1cric=.rji$E
rl4r\rmC_qrn@A/ro="?rp0RO!:U$YnG`(Zp&=^bqYpBkrVQTSs5!_SrVl`oqu6BipAXaanc&"VmJc>K
jo46<h#>t*e,IVkaSs*V]`,><YPtI!UAg\^PQ$UAM>i&)I/\?hE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb
8H)-Y7fGjU7.ip]6L$o16iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!hJGtE)NrG7A
SGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKn,DkVp&=^bq#:0ir;QZ"s+14Gs8Murr;QTmq#:!d
p&=L\n,D_Rkl0]CiVqX3f`'A!c2Pf`_u@=J[JmB/VuEFiSGn`ONrFn7JGsrqGQ)R\D#S/J@fBa6>lIh(
<W5kp;#X2g9E%K]8,c!W7K,^J6`39D6iKLQ7K,dU8,c'Y9E%Zb;#X>k<;otu>lJ+0@fC*@D#SDQGQ*!h
JGtE)NrG7ASGo5]VuEn![Jmi<_u@aVc2Q2kfDaS)iVqs<kl0uKmf;kYnaZVOrqHEerql]mrr([Qh>dKQ
rqucmrqQKerq??^rp]pTroj@Cro*k4rn.5"rm(Mbrl"fLrjMg1ri5smrgj%RrfI,;re(3!rd"K_rbh^N
raYq8ra#M*r`/qrr_WShr_3;^r^ZiTr^HfSpd;b^l9b85r^?`SqaUQTr^d#^r_EGhr_resr`K/*ra>_8
rbMLNrc.p_rdOj!repc;rg!JRrhKImrilC2rk8<LrlP/brm^r#rn[S4roO.CrpKdTrpp'^rqHEerql]m
rr',%JcGQGrr)iorql]irqHEcrpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<>rilC%rhKI`rg!JErepc.
rdOilrc.pTrbMLCra>_2r`K/"r_remr_EGdr^d#YqaUQRr^?NKVaC/Gr^?`SqaUQTr^d#^r_EGhr_res
r`K/*ra>_8rbMLNrc.p_rdOj!repc;rg!JRrhKImrilC2rk8<LrlP/brm^r#rn[S4roO.CrpKdT!:g0]
o)A@^p\ssequ6NmrS@M0s8Murr;QTmq>U0gpAXX^nG_kTkl0]Cir7g6gA]Y%d/M5f`W!XO\Gif5X8\sp
TDk2VP5^L@K`6K#HiA*cE;j\QAc?0<?iF4-=8l1u;#X5h9`@W_8H)-Y7fGjU7.N^`6L@,46iKLQ7K,dU
8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6^])4Ob5Tceec+8$
hYuO6k5OTDmf)_To)A@^p\t!fqu6NmrNZBRs7u]orVl`oqu6Ejq#:!do)A.Xmf)GLjo49=hYu7.ec*qp
bPoK[^](bBZMpp(V>d+dQi<0INrF_2J,XfoF8g.XD#S#F@fBa6=oMM%<;o_n:B!rd8cD9[8,c!W7K,^G
6a/oM6iKLQ7K,dU8,c'Y8cDE_:B")h<;oqt=oMe-@fBs<D#SAPF8gOcJGt6$NrG4@Qi<WVV>dOpZMqE6
^])4Ob5Tceec+8$hYuO6k5OTDmf)\UncA=Prq??crqZQjrqucoh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LG
roF(:rnRM)rm:YgrlG)Srk&0;riZ7!rh9=[rfmDCreLK*rdOiirc8!Vrb2:Ara5Y0r`T5%r_i_lr_EGc
r_!/]r^QcRr^?<Ea$TAaogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9irdt-)rf@&C
rgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjVrq$-`rqZQiqu$HlZ2]CTq>^?jrquclrqQKe
rq$-ZrpTjOroa:Aro!e2rn%.rrlkA_rkSNFrjDa.ri#girgNhNrf@&6re(3!rc\9]rbqdLrac"8r`oG*
r`B(sr_WShr_*5_r^m)YqaLKPnjBrSogAUEr^H]Rr^m)]r_*5cr_WSlr`B)%r`oG0rac"ArbqdWrc\9i
rdt-)rf@&CrgNh[rhoaurjDa:rkSNSrlkAgrn%/(ro!e:roj@HrpTjV!:p6_oD\L`q>U6fr;QZNs5!_S
rr2lqr;QQlq#:$eo`"F\n,DYPkl0`Di;VO2g&BCucMkuc_>_.I\,NW2WrAgnSGnlSOoC7;L&QT$H2_pb
E;jVOB)Z9=?N+1.=T27u;>sAj9`@]a9)D-X7efCH6cVOb6MNqC7/KIQ8,c-[9E%Wa:]=5j;uTnu>5hk-
@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTDli-APo)A:\p\t!f
qYpElrVlf$s+14Gs8N#srVl`oqYp9hp\sgao)A+Wli-,Ik5O<<h#?"+dJhGjb5T6V^&GM?Yl:[%V#Hn`
Qi<-HMZ/>/J,X`mFT-7YCAqiE@fB^5>Q.b(;uTYn:]=&e9E%Q\8,c!Q7/0-[6MNqC7/KIQ8,c-[9E%Wa
:]=5j;uTnu>5hk-@fC!=CAr2OFoH[cJ,Y-#MZ/b;QN!ERV#ICnYl;-2]`,bHb5TZbdJhhuh>Z@3k5OTD
li-APnc8:_o^r.WrqZQirqucorr1aRh>dKRqu-NjrqQKerq-3\rpTjQrosFFro*k5rn@A#rm1Serkn`M
rjr*5ri?$qrh'1Xrfd>@reLK(rd4Wfrc.pSrb2:Ara>_1r`T5#r_relr_EGdr_!/\r^ZrWqaLKPnjCYg
p-SF>qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(rf-o@rgEbXrhf[rrilC5
rkABLrlb;ermUl#rn[S4roa:Frp9XQrpp'\rqHEfrqcWmqu3l#JcGQGrr2fnrqcWhrqHEarpp'Wrp9XK
roa:>rndY.rmUkmrlb;YrkJHDrilC&rhf[ergEbLrf-o4rdk&qrc\9\rb_XJrac"9r`oG*r`/qrr_NMg
r_3;`r^d#Yr^QcRr^?<E_F!o_qaCEPr^QlWr^d#\r_*5cr_NMkr`/r#ra#M2rac"Arb_XSrc\9frdk'(
rf-o@rgEbXrhf[rrilC5rkABLrlb;ermUl#rn[S4roa:Frp9XQrpg']!VH$`p\t!fqYpHjrn[V1s8N#p
rVlZmq>U0gp&=R^nG_kTli-,Ij8S!9h#>n(df.Pka8X!U^AbP>Yl:^&T`1J\R/W3HMuJJ1J,XcnFoH@Z
D#S,I@K'X5?2dt*<W5nq;#X5h9`@Z`8cD9[7f,XR7.N^l6Ms1C6i0:N7JfRR8H)3[9)_N`:&[ug;Z9_r
=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UTcMl8kf)FJ(hu;[8kl0lHmf)_T
oD\F^q#:*gqYpHjriuKSs7u]orqlZnqYp<iq#9scoD\7Ymf)POkl0WAi;VO2f)F+scMkl`_u@CL[JmE0
X8\dkSGnoTOT(1;LAl]%HN&'dE;j\QB`;H>?iF@1=T2>";Z9Ml:B!rd9)_E]8H)*U7K,^G6d%gh6i0:N
7JfRR8H)3[9)_N`:&[ug;Z9_r=T2V*?iFL5B`;fHE;k"ZHN&EnLAm,1OT(XHSc5;]X8]@&[Jmo>_Z%UT
cMl8kf)FJ(hu;[8kl0lHmf)_To)SFap%A=ZrqZQirr)`nh>c=2rr2fnrqcWirqQKdrq-3[rpTjProsFC
ro!e3rn%/!rm1Sdrl+lOrj_s6riZ6rrh'1Zrf[8?re^W)rd=]irc.pTrbDFCraGe5r`T5%r`/qpr_NMf
r_*5_r^coVr^QcRr^?NKcpIXspd=pHr^H]Rr^ZrYr^m)^r_<Afr_`Ypr`B)%ra5Y6rac"Crb_XSrcnEi
rdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(Crp9XQrpg![rq??drqZQirr)`nZ2]CT
q>^Hnqu-NjrqZQgrq??`rpg!Vrp0RJroF(:rn[S*rm^qnrlY5ZrkJHBrj2U,rhTOcrgWnMrf-o6rdauq
rcnE^rbh^Mrac":ra5Y-r`B)!r_`Yjr_<Abr_!/\qa^WTqaLKPpd<4kpd=pHr^H]Rr^ZrYr^m)^r_<Af
r_`Ypr`B)%ra5Y6rac"Crb_XSrcnEirdb!)rf6u@rgWn[rhTOrrj)O5rkJHNrlY5drmUkurn[S4roF(C
rp9XQrpg![!;6HepAXjdq>U6irVQTMs5!_SrqlZnqu6Hkq>U*eo`"F\nG_hSlMfoEj8Rs8gA]\&dJh>g
`r<gR])K,:YPtI!UAgb`Pl?dDN;eJ/JGsrqF8g1YDZ48IA,]m8>lIn*<rQ"r;>sAj:&[ca8cD9[8,GdT
7K,^D6et*-6h<\E7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LD
T)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMRo)A=]pAXmeqYpBkrVQT!s+14Gs8N#prVl]n
qYp<ipAX^`o)A.XmJcDMjo4<>hu;@/f)F(rbPoN\_>_%F[JmB/VuEFiT)OuROT(4<KDpE#I/\3dEW0kT
B)Z<>@/aF1=oMJ$;Z9Pm:]=)f9)_E]8H)-V7fGjU7.3M!6LR;@7/fXP7fGpW8H)3[9E%Zb:]=5j;Z9_r
=T2S)@/a^9B)Z]IE;jqXI/\WpKDpi/OT(LDT)PJ`VuEn![/RZ9_>_IRbPoogec+;%hu;X7jo4QEm/HMR
o)A:^p&Xm\rqZQirql]nqu5FOgAh0Orr)iorql]krqHEcrq-3ZrpKdProa:Aro!e3rn.5"rm1Scrl"fM
rji$7riH*rrh07ZrfmDCreUQ+rdXolrcJ-XrbMLGraYq8ra#M,r`9"sqb[8er_3;`qapZTr^QcRr^>+#
r'U?Lr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdXrcnElre19,rf@&CrgNhZrhf[rrj2U6
rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq69brqcWkrqucorr0)#JcGHDrr2oqrqucmrqcWgrq??`
rp]pTrp9XIroF(:rn[S+rm^qnrlP/XrkABBrj2U*rhf[frgNhNrf@&7re(3"rcnEarbqdOrb)4?ra>_2
r`];%r_r\jr_EGdr_!&Zqa^WTqaLKPb<u.pr^H]Rr^ZrZqb$i]r_<8dr`&ktr`];+ra>_8rb)4GrbqdX
rcnElre19,rf@&CrgNhZrhf[rrj2U6rkABMrlY5drm^r#rn[S3roF(Arp9XPrp]pZrq-9c!Vc?fqYpBk
r;QZorn@D(s8N#sr;QTmqYp9hpAX^`o)A+WmJc>Kjo49=hYu7.f)F%qbl5]__#CtF[JmB/WW&[lSc4uT
P5^C=LAlc'I/\BiF8g(VCAqlF@fBa6>lIk)<rQ(t;>sAj:&@T_9)_BY8,c!T7INY56hEeE7/fXP7fGpT
8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!hJc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^
d/MVqgA]t.ir8*>kl0uKnG`"Xo`"R`q#:-hqu6NjriZ9Ps7?9irr2ipqu6Hkq#:!do`"F\n,D_Rkl0]C
ir7g6gA]\&d/M8gaSs!S]Df5;YPtO#U]-h`Qi<0IMuJJ1Jc:&rGlDd`DZ4DMBDuB>?iF=0=T2A#<;obo
:]=)c9E%Q_8GbpV7f,XC7.3M37/fXP7fGpT8Gc$Y9E%Zb:]=5j<;oqt=T2S)?iFO6BDuZFDZ4_VGQ*!h
Jc:E'MuJn=R/WZUU].7lYPts/]DfVFaSsB^d/MVqgA]t.ir8*>kl0uKnG`"Xo`"Oap]:0brqcWkrquZm
gAfe)rr2oqrquclrqQKdrq69]rp]pUrosFFroF(:rnRM*rmC_jrlY5Wrk8<ArilC&rhoagrgWnPrf@&8
re19$rd4Wfrc%jRrbDFCraGe5r`];'r`9"rr_`Pgr_3;aqapcXqa^WTpdOsGmmHk<rC-WQqaUQTqag]X
r_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9erdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGi
rn.5*ro!e:roX4ErpTjVrpp']rqHEerqcWkrr)`nY5a(QoDeghrr)iorqcWhrq??arpp'XrpTjNroa:A
ro!e2rn.4trm(McrkeZJrji$4ri?$rrh07[rg!JDre^W-rdauprc\9[rb_XLrac":ra5Y.r`K/#r_i_m
qbR2br_*,[r^coVr^QZOpdFR<pdFmGqaUQTqag]Xr_*5bqbR2gr_i_rr`K/'ra5Y6rac"Crb_XRrc\9e
rdb!$reg]9rg!JPrh07griH+'rji$BrkeZWrltGirn.5*ro!e:roX4ErpTjVrpp']rq?Ef!VlHhqYpBk
rVQTJs4@;Mrr2lqr;QTmq>U0gp\sganc&"Vli-/JkPjH>hu;F1ec+"rcMki__>_.I[JmH1Xo>*pT`1J\
P5^L@MuJA.JGsrqFoHF\DuOJMB)Z9=?iF=0>5hS%<;obo;#X8i:B!ra9DD*U8(L-17RmAIpdtHXqb6l^
r_WSkr`&ktr`];+ra5Y6rau.DrbqdVrcS3frdXp"repc:rf[8Nrh'1briQ1)rjDa=rkeZSrm(Mjrmh#'
rndY5roa:Frp0RPrpp'\rqHEerqZQjrqucoqu3buJcG?Arr2oqrqucmrqZQgrqHEarpg!Vrp0RJroa:>
rnm_1rmh"rrm(M_rk\TIrjDa1riQ0prh07\rf[8@repc.rdauqrcS3\rbqdMrau.=ra5Y0r`];%r`&ko
r_WSir_EGdqb-]Uqa].*r^Z`Tr_*,^qbI,er_`Yor`9#%r`oG0raPk=rb;@Mrc8!\rd=]pre(3.rf@&A
rg`t[rhKIpriuI1rk8<Jrl4r_rmC_qrnRM0ro*k>rosFJrpTjWrq-3arqHKh!VuQjqu6NmrVQTJs4@;M
rqlZnr;QQlq#:$eo`"F\n,DbSli-,Ij8S!9h>Z%*eGdenao96X^](eC[/R9.W;`RkT)P&TP5^L@L]2r*
J,X]lFoHC[D>n8KB)Z6<?iF=0=T2D$<rQ"r;>X/d:&%B\8cD947fZ'\84`_Ope1T\r_E>dr_`Ymr`9#"
r`K/)ra,S4rau.Drb_XSrcS3brdXp"reLK5rf[8Hrgs+`ri#h"rj;[8rkJHNrlP/crmUkurn[S3ro="A
rp'LNrpTjWrq-3arqZQiqu$Hlqu3buJcG?Arr2fnrquclrqQKerq-3\rpTjSrp0RIro="9rn[S*rm^qn
rlP/XrkJHCrj;[.ri#gkrgs+Trf[8@reLK*rdXolrcS3[rb_XKrau.<ra5Y0r`K/$r`9"rr_`Pgqb?iY
r^m)[f15g2r^llXr_<AeqbR2gr_i_rr`B)$r`oG/raGe<rb;@Krc.p[rcnElre(3*rf6u@rg*PTrhBCj
ric=.rji$Crl"fXrm1Smrn%/*ro!e9roj@HrpKdSrpp'\rqHEf!;Z`mqYU3irVQTJs4%)GrVl`oqYp9h
p\sjboDA%Vm/H8KjSn0<hu;@/f)F(rbl5Z^_>_(G[f3Q2XT#*rT`1DZQ2ZmEN;eV3Jc:)sGlDgaE;j\Q
C&VZB@fBa6?2e%,=T2>"<;oep;#=&c:&[ic9(GRB8G,OS9)M<Y9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6
AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Y
p&=^bq>U6fr;QYns+14>s82cor;QQlq#:$ep&=R[nG_eRl2KcCir7j7gA]\&dJhAha8WpS]Df8<Z2Uj(
VZ*7fRf8TOOT(4<L]2l(IK"KjFT-7YD#S/JAH$';?iF@1>5hY'<W5ts;Z9Mi:]!lc9`@ZT8af4C8c)-W
9`@cc:]!uf;Z9Vo<W6,">5hh,?iFO6AH$<BD#SDQFT-RbIK"fsLAm/2OT(OERf8uZVZ*[rZ2V32]DfYG
`r=3]dJh\qgA^"/ir8$<l2L&HnG`%Yp&=^bq#L6lqYL*err(@HeGoOIqu-NkrqcWirqHEbrpp'XrpB^N
roa:Aro!e3rn7;$rm:Ygrl>#Rrk/6>rilC&rhf[frgWnQrfI,<reUQ(rdFcmrcJ-ZrbqdNrau.>ra>_3
ra#M+r`K/$r`&kpqb[/cr_E>boh>-RnkB$W!)EGeqbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![
rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNRrlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi
rql]nqu3PoJcG6>rr2fnrql]krqZQfrq69]rp]pSrp0RHroF(:rn[S,rmh"prlkA^rkSNGrjVm2ri?$q
rh07[rg*PFrf$i4rdaurrd4Wdrc.pUrbDFEraYq8ra,S0r`T5&r`B(ur_iViqbR2dqb?`Wpe10Or_<8b
qbR)cr_reqr`B)$r`T5+ra5Y4raYq?rbDFNrc8![rd4Wnrdb!(repc;rg*PQrh07fri?%&rjVm=rkSNR
rlb;frmh#$rn[S3roF(Arp0RNrp]pXrq69brqZQi!;cfoqu6Qkrm^tts8N#prVl`oqu6Hkp\smco`"@Z
mf)VQl2KiEir7g6gA]_'dJhGjb5T9W^Ab_CZi70-WrAdmTDk>ZPQ$XBMuJG0K)U5uGlDjbEW0kTCAqlF
AH$';?iF@1>5h\(<rQ+u<;oem;>sDh:]=,O:&@]b:B45h;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZF
DZ4YTFoHXbIf=otL&R#0O8b@BS,T&ZU].:mY5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Z
p&=^bqYpBkr;QZlri#jJs7$'frqlZnr;QTmqYp6gpAX^`nG_kTmJcALk5OB>hYu7.fDa1scMkuc_Z%:K
])K&8YPtR$U]-nbS,SWNO8b(:L&Q]'If=TkFoHC[DZ4DMBDuH@@fBa6?2e%,=oMJ$<W5ts;Ys>j;#=&f
:?G:J:B"&d;#X>h;Z9Yp<W6%u=oMY)?2e41@fBp;BDuZFDZ4YTFoHXbIf=otL&R#0O8b@BS,T&ZU].:m
Y5Yd,])KGC_Z%^Wc2Q,ifDaM'hYuO6k5OWEmJcSRnG`(Zp&=^bqYp?lquQ`nrr)`neGn%urr2fnrqucm
rqcWgrq??arpg!WrpTjOroa:Bro!e2rn7;"rm:Yhrl+lRrkAB?rj)O+rhf[hrh'1Urfd>Bre^W-rdaur
rcnEbrc%jSrbVRHral(;ra>_3r`oG*r`K/$r`/qsr_reoqbc0Gr_WYnr)3Mmr`&ksr`B)$r`T5*ra#M2
raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&Brg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.C
rp'LOrp]pWrq69arqHEgrql]mrr)`nW;hGKnGiLequ-Nlrql]krqHEcrq69\rp]pUrp'LGroO.;rnRM+
rmUknrltG]rkeZKrjMg3riZ6trhBCarg*PIrf@&8re19$rdFcjrcS3Zrbh^Orb)4AraGe6ra,S/r`T5&
r`B)!r`&kqr_iVjh,+)JqbmDlr`&ksr`B)$r`T5*ra#M2raGe:rb)4Hrbh^SrcS3crdFcrre:?.rf@&B
rg*PUrhKIiriZ7+rjMg?rk\TQrltGhrmUl"rn[S3roO.Crp'LOrp]pWrq69arqHEgrqc]n!W;lprVQTD
s3^lGrqlZnr;QTmq>U0gp\sganc&"Vm/H;Lkl0T@i;VU4f`'D"ci2/fa8WpS^&GM?ZMq$+W;`OjT)P/W
Pl?dDN;eY4Jc:/uI/\<gF8g+WDZ4GNB`;N@@f'O3?2e+.>5h\(=T2D$<r5nr<9[?\<;TYq<WQ6%r`B)$
r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9grdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAf
rm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKgrql]mqu-NnV>l,HmJm1bqu-Nlrql]jrqQKerq-3[rpTjQ
rp'LHro3q8rndY,rm^qnrlkA^rk\TIrjVm4riZ7!rhBC`rgEbMrfI,<reUQ)rdXoprc\9^rbqdRrbMLH
raYq:qd9>.r`oG+r`T5&r`B)"qc3Vpku7R\qc3Vrr`B)$r`T5(r`oG.qd9>2raYq@rbDFMrbqdWrc\9g
rdOitreUQ3rfI,DrgEbWrhBCjriZ7+rj_s@rk\TRrlkAfrm^r"rndY4ro3q@rp'LLrpTjWrq-3arqQKg
rql]m!<)iorr1=FcN!nCqu-NlrqcWirqQKbrpp'XrpKdOrosFDro="8rnIG(rmUkmrlY5ZrkSNFrjVm2
riH*trh9=^rgEbLrfI,<reCE(rdXonrce?arc%jRrbMLGrau.@raGe6ra5Y1r`oG,r`];(qcNi!kuRdb
qcEi$!EiS)>5hb*>lJ%.?iFI4@K'j;B)ZHBC]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'
\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#Jmf)_ToD\C]q#:*gqYU3irVQSjs+148s8N#prVl`oqYp<i
q#9pbo)A.Xmf)POl2KfDj8Rs8g]#h(e,I\mb5TBZ_#CtF\,NW2XT#0tU&LV^RJrELOT(4<LAlf(J,Xcn
GQ)aaE;j_RC]7uGB)ZB@@K'[6?iF@1>lIt,>5h\%=T2Cd<rQ1t=T2J&>5hb*>lJ%.?iFI4@K'j;B)ZHB
C]85NE;k"ZGlE$gJ,Y*"LAm/2O8b@BRJrcVU&M"iXT#I'\,O#=_#D=Pb5T`de,Itug]$+0ir8'=l2L#J
mf)_ToD\C]q#:*gqYU0jr;llqqu5"CcN!nCqu-NlrqcWirqQKcrq-3\rp]pSrp0RGroF(;rndY.rmq(q
rlkA_rkeZKrk&09rilC(rhTOergs+Trfd>Brf$i3rdt-"rd=]jrcA'ZrbqdQrbDFGral(>raPk7qd95+
r`oG,r`\Phr`];*rEKA.>lJ%.?i+71@fBm:Ac?BBCAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_
V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@li->OnG`"XoD\F^q#:*gqYU3irVQSjs+148s8N#p
rVl`oqYp<iq#9sco`"F\nG_hSli-&GjSn-;hYu7.f)F%qbl5]__Z%:K]Df/9Yl:d(V#I(eT)P&TPQ$XB
N;eV3K)U<"I/\EjF8g4ZDuOVQCAqoGAc?6>@fBd4?i+..>lIt,>3T2h>5hb'>lJ%.?i+71@fBm:Ac?BB
CAr)LDuObUF8gIaI/\ZqK)UQ)N;en;PQ$mIT)PG_V#ILqYl;!.]DfSE_Z%XUbl5ugf)FA%hYuL5jSn<@
li->OnG`"XoD\F^q#:*gqYU0jr;llqqu5"CbQ%A9rql]krqZQfrq??`rp]pUrpKdNroa:Aro!e3rn@A$
rmC_jrlG)WrkJHErjMg2riQ0trhBCargNhQrfI,=repc/rdk&urd4WhrcS3[rc%jTrbVRKrb;@Eral(=
raPk8ra5Y4oj@K#pg=#.ra,Y6!F]F9@fBm:Ac??AC&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UG
S,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtU,^s+145
s7lQlqu6Hkq>U-fpAX^`nG_nUmf)MNkPjQAi;VR3gA]V$dJhGjaSs-W^](kE[f3Q2Xo>6tUAgeaRf8ZQ
OT(7=MuJD/Jc:/uHiA9hFoHC[E;jeTD#S2KC&VcEAc?3=@fBg8?iFI+?hdt&?iFI4?iFL5@fBm:Ac??A
C&VoID#SAPE;jkVFoHXbHiANoK)UH&MuJb9OT(UGS,T&ZUAh+jXo>U)[f3o<^])1NaSsKadJhYpgA]n,
i;Vg:kl0lHmf)\SnG`(Zp&=^bq>U6iqtg6lrVaq>bQ%S@qu-Nlrql]krqQKdrq69^rpg!Vrp0RJroa:?
rnm_1rmq(trm1SfrlG)VrkABCrjMg1riH*trhBC`rgWnPrf[8Are^W0re(3#rdFclrc\9_rc8!Wrbh^P
rbDFGqe,n?rakk7raPY2qdT>1rac(A!G5s@BDuWECAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aG
S,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^ci2Dmf)FJ(hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQSd
s+145s8N#prVl`oqu6Hkq#:!dp&=R^nc&"Vli-/JkPjK?hu;F1f)F.tci2/faSs*V^Ab_C[f3N1XT#0t
UAgb`S,S]PP5^OAM>i;0KDpE#IK"QlG5cU_ErL%WDZ4MPCAqoDBDuNBAb]d7@eaC/@eaI4Ac?<=BDuWE
CAr)LDZ4VSErL4\G5cgeI/\ZqKDpW)M>iS8P5^aGS,T&ZUAh+jX8]@&[f3l;^Ac%La8X<^ci2Dmf)FJ(
hu;X7kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVc]rrr1+@bQ%S@qu-Nlrql]krqQKerq??`rpp'WrpKdO
roj@Bro3q7rn@A&rmLemrlb;]rkSNHrk&09riuI*rhf[irh'1Zrg*PHrf@&:re^W,rdk&urd4Wirc\9^
rc7mSrb_XNrbMLJrb;7BratV1qe#h?rb2@I!GZBKC]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=A
Qi<KRTDkVbVZ*atYl;!.]DfPD_>_LSbPolfdf.hsgA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6Nm
rVQSds+145s8N#prVl`oqu6Hkq#:$epAX^`o)A+Wmf)POkl0ZBir7j7gA]\&df.VmbPoQ]_#D%H]Df/9
Z2Up*VZ*@iTDk>ZQN!'HO8b(:M>i/,Jc:/uHiA<iG5cR^Er0eSD>nANC]8)JC&;QBB('=.B)ZHBC&VlH
C]8/LD>S8NEW1%YG5cacHiANoJc:<$M>iJ5O8b=AQi<KRTDkVbVZ*atYl;!.]DfPD_#DCRbPolfdf.hs
gA^"/ir8$<kl0lHmf)\So)A:\pAXgcq#:-hqu6NmrVc]rrr1+@bQ%S@q#13irql]krqQKerq69_rpg!W
rpB^Nroj@Cro*k6rnIG*rmLemrm(M`rl"fNrk&0<rj)O+ri5sprh07^rg`tQrf[8Arepc4reCE'rdaus
rd4WjrcnEarc8!Xrc%aQrbgk8qelCO!-%jTrc.pYrcJ-ard"KirdOirrdk''reUQ3rf@&Arg!JQrgs+^
rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RNrp]pWrq$-^rqHEfrqcWkrquZlqu35f
JcFp5rr2]krqucmrqcWhrqHEbrq-3[rp]pSrp0RIroO.<rnm_0rn7;!rm:Yirl>#VrkJHErjMg3riZ7#
rhf[frgs+Zrg!JGrf@&:re^W/rdk'!rdOinrd+QgrcJ-[rc.pVqeuIOk&(!5rbq[Qrc.pYrcJ-ard"Ki
rdOirrdk''reUQ3rf@&Arg!JQrgs+^rhf[oriZ7+rjVm=rkJHMrl>#`rm:Ymrn7;+rnm_6roO.Crp0RN
rp]pWrq$-^rqHEfrqcWkrquZlrVcisrlb>bs7lTjrVl`oqYp<iq#:!do`"I]nc&"VmJcALkPjTBi;VU4
h#>n(e,I\mbl5]_`;[ON]Df>>ZMq',XT#*rU]-nbS,ScRPl?dDNW+k8LAll*K)U<"If=`oHN&0gG5cX`
FT-@;EW1"ZF9-K*rcS3`rcnEgrd=]ordb!"re19*repc9rfI,Drg3VRrh'1brhf[rric=,rj_s>rkJHN
rlG)_rm1Smrmq)(rndY4roO.BrosFLrpTjVrq$-^rq??drqZQiqu$Hlq#6ocJcFp5q#:0hrquclrqZQg
rq??`rq$-ZrpTjRrosFFroO.;rndY0rmq(trm1SfrlG)WrkJHErj_s5ric=&rhf[irh'1Zrg3VKrfI,=
repc1re19&rdausrd=]krcnEcrcS3^rc?n8rcA'\rcS3`rcnEgrd=]ordb!"re19*repc9rfI,Drg3VR
rh'1brhf[rric=,rj_s>rkJHNrlG)_rm1Smrmq)(rndY4roO.BrosFLrpTjVrq$-^rq??drqZQiqu$Hl
qYgNprlb>\s8N#prVl`oqu6Hkq>U-fpAX^`o)A.Xn,DYPl2KlFir7m8hu;=.f)F+sd/M8gaSs'U^](qG
[f3W4YPtX&W;`UlT`1M]Rf8QNP5^OANW+h7M#N),K)U9!JGt#sI/\HkH2`'`FmjGIFoHUcGl`29rd+Qk
rdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4rk8<HrkeZUrlb;frmLesrn7;.ro*k9
roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu3,cJcF^/rr2fnrqucmrqcWirqHEcrq-3\rp]pUrp0RJ
roa:?ro!e5rn7;%rmLemrlkA_rkeZLrk8<>rj2U-riH*trhTOdrgj%WrfmDFrf@&<reg]2re19&rdXot
rdOiord+Qhrcn3\mr\>IrcnEfrd+QkrdFcrrdXp!re19,reg]7rf@&ArfmDNrgj%]rhTOkriH+&rj2U4
rk8<HrkeZUrlb;frmLesrn7;.ro*k9roa:Frp0RPrpg!Yrq-3_rqHEfrqcWkqu$Hlqu-TqaoB6Xrr2fn
rqucmrqcWirqQKerq-3\qsXONrp0RHroF(:rnm_0rn7;!rm:YirlG)Xrk\TJrk&0>riuI+riQ0srhKIc
rgs+Yrg<\KrfR2@rf-o8re^W/re19'rdalqpjW*gpjE'hpjW3l!.autre(3(reCE/repc8rf@&@rfd>K
rgNhXrh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:HrpBUOrpp'\rqHEerqZQi
rql]mrr)`nQN)O9hZ*TSqu-Nlrql]krqZQgrqHEarposTrp9XMroa:Aro!e5rnIG*rmLemrm(Marl+lQ
rkABDrj_s4ric='rhf[irh07^rgWnSrfd>Drf@&<repc4reCE*re(3#qg\BiqgJ6erdFQjrdXfqre(3(
reCE/repc8rf@&@rfd>KrgNhXrh07drhf[sric=+rj_s=rkABJrl+lXrm(MirmLf!rnRM1ro!e:roa:H
rpBUOrpp'\rqHEerqZQirql]mrr)`nqZ"\;_Z0W7qu-NlrqlThrqZQgrq69_rpp'XrpKdQrosFFroF(:
rndY0rmq(trm:YhrlP/[rk\TJrk&0<rj2U.riQ1!rhf[hrh'1\rg<\NrfmDFrfI,>rf$i6reUQ.re:?)
on*0oqgeZson*0r!/1H-L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\bVZ*RoXo>R([/RN5]DfPD_>_LS
b5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6NmrVQS[s+14,s8N#prVl`oqtp6h
q>U0gp&=U_o)A.Xmf)VQl2KlFjSn*:hYu=0f)F.td/M;hao9?[_>_1J]Df8<Zi73.Xo>=!VZ*=hTDkD\
R/WENPl?jFOT(:>N;e_6M#N/.L&QbuK)U>uJGt,mK)UH&L&Qi+M#N;2N;ek:OT(FBPl@!JR/WZUT`1\b
VZ*RoXo>R([/RN5]DfPD_>_LSb5TZbd/MPof)FJ(hYuI4jSn<@l2L)Lmf)_To)A:\p&=acq>:$fqu6Nm
rVQTjs2k;Xs8N#mrVl`oqu6Hkq>U0gpAXaao`"C[nG_nUli-/JkPjK?i;VX5g&BV&eGdhocMl&e`W!dS
^](nF\Gio8Yl:g)XT#-sV#I%dTDkA[Rf8WPPl?mGOT(=?NrG":MuJV/M#N2/LAQ](LAlu'M#N83MZJ`o
rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6FrkeZRrlkAerm:Yormq)%rnm_6ro3q?
rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu2o]JcFU,rr2]krqucmrqcWirqQKdrq69_rpg!WrpTjP
rosFFro3q8rnm_.rn%/!rm:YirlkA\rkn`Mrk/6?rjDa0riZ7%rhoakrh07_rg`tVrg*PJrfd>Crf@&=
rf$i7regK,reLK-qh>$(reL9)reg]5rf$i:rf@&?rfd>Hrg*PPrg`t[rh07drhoasriZ7)rjDa8rk/6F
rkeZRrlkAerm:Yormq)%rnm_6ro3q?rosFJrpTjUrpg![rq69arqQKgrqcWkrquZlqu6HlaoB$Rrr2]k
qtpBhrqQKerq??`rposTrp9XMroa:Bro*k7rn[S-rmq(trm1SgrlP/[rk\TKrk8<ArjMg3rilC(ri?$q
rhTOerh07^rg`tUrg<\NrfmDGrf[8Bk)]D$rfR8F!L&`HPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-
[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgcq"speqtU-erfdA5s4IAN
rqQHhqu6Hkq#:$epAX^`o)%nTm/H>MkPjTBiVqd7h>Z.-f)F.tci22gao9?[_>_4K^&GSA[f3T3Yl:d(
X8]!qV#I(eT`1P^SGnrUR/WENPl?mGP5^R*O8G%<P5^[EPl@!JQi<EPSGo)YT`1YaV#I7jX8]7#Yl:s-
[f3i:^&GeG_>_LSb5TZbci2Dmf)FD&h#?72iVqp;kPjfHmJHAOo)A:\pAXgcq"speqtU-erqHH7s1JC/
rqlZnr;QTmqYp<iq#:$ep&=U_o)A.Xmf)VQl2KoGk5OB>hu;I2g&BV&e,I_nc2Poc`r<mT_#D(I]Df>>
[/RB1YPt['WrAsrV>d7eT`1P^SGnuVRJrTQQi<<GQ2$U@Q2[*KQi<?PR/r_DrgNhVrgiqZrhKIhri#gr
riQ1'rj)O1rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pXrq-3_rqHEerqZQi
rql]mrr)NhPQ-46f`1jJqu-Nlrql]krqZQgrqHEbrq-3\rp]pTrpB^Lroj@Dro3q7rn[S,rn%.urm:Yh
rlb;\rkn`NrkABDrj_s7rj)O,riQ1"ri#gmrhK@`rgs+ZrgNhSrg<\Org*>EpltZ@rg*PMrg<\QrgNhV
rgiqZrhKIhri#grriQ1'rj)O1rj_s=rkABIrl"fUrlb;crm:Ynrmq)%rn[S3ro3q>roa:FrpB^Qrp]pX
rq-3_rqHEerqZQirql]mrr)Nhp]&A8\c;[.qu-NlqtpBhrqZQgrq??arq-3[rp]pUrp0RKroj@Bro3q7
rndY.rn%.urmLelrltG`rl+lQrkSNIrjr*<rj;[/ric=(ri?$trhoakrhBCcrh07_rgs"Xrg`kTpmV2O
qjdYVrgj+^!M?"`T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&gdJhVofDaM'hYuF3
ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQSRs+14#s8N#prVl`lqu6Hkq>U0gpAXaao`"C[
nG_nUli-2Kkl0ZBir7j7hYu7.fDa7udf.Slc2Pf``W!^Q_#D(I])K2<[/R</YPt^(X8]*tVuELkUAgkc
T`1S_T)5)XSGSfNRf8fRSGo)YT)PA]T`1YaU].(gVuE[pX8]:$YPtd*[/RQ6])KGC^])(K`W"!Yc2Q&g
dJhVofDaM'hYuF3ir8$<kl0iGli-APnG_tWo`"O_pAXjdq>U6iqtp<jrVQTas2k;Is8N#prVl`lqu6Hk
q#:$epAX^`o)%nTm/H>Mkl0`Djo46<hu;I2g&BV&ec*qpci25hao9?[`;[UP_#D(I])K2<[JmK2Yl:j*
Y5YO%X8]*tW;`[kV>d:ZU\gkdV>d=lVZE]nri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mh
rm:Yprn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu2KQJcF'rrr2fnrquZjrqcWh
rqHEcrq-3\qsXONrp0RIroX4Aro*k6rn[S,rn%/"rm:Yjrm(Mbrl>#Vrk\TLrkABCrjVm7rj)O-ric=(
riH+"ri,mqrhfRhrhT"XqkX4frhf[mri,mtriQ1&ric=+rj)O2rj_s=rkABHrk\TPrl4rZrm(Mhrm:Yp
rn%/&rn[S2ro*k<roa:Erp0RNqsXOTrq-3`rqHEeqtg<hqu$Hlqu6$`aoA^Iqu6Tnqu$HjrqcWirqQKe
rq69_rq$-YrpKdQrp'LHroa:Aro3q7rn[S-rn7;$rmUknrm(MerlY5[rl"fPrkJHFrk&0>rjMg6rj2U0
qlp(&riPsrri5amql9FlriH1'!NrU&Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*
h>Z=2ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZireg`,s3L`Brr2lnr;QTmqYp<iq#:$e
p&=U_oD\7Ymf)VQlMg#HkPjQAir7j7h>Z.-g&BP$e,I_ncMl&eb5TE[`;[UP^](nF]Df>>[f3]6Zi79-
Yl:g)Xn\srWq`RjWq`XoXo>L#Yl:s-Zi7B3\,No:]DfMC^])(K`;[dUb5TT`cMl2ie,Insg&Bb*h>Z=2
ir8$<kPj`FlMg2Mn,DhUoD\C]p&=^bq#:*gqYpBhr;QZirpKg.s0Mb&rqlZnr;6BjqYp<iq#:!dp&=U_
o)A1Yn,DbSli-/Jk5OH@j8S!9hYu@1f`'J$ec*tqd/MAjbPoW_`r<mT_Y_+I]`,PB\c0,<[f3Z5Zi79-
Z0&:iZ2V$/ZN7D=rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJ
rpKdSrpg!Yrq-3_rq??drqZQirqlTjrr)NhMZ88-ci<nAqu-NlqtpBhrqZQgrq??arq-3\rpg!VrpKdO
rosFEroF(=ro!e4rn[S+rmq)!rmC_lrm1SerlP/Zrkn`PqnN-Crk&0?rj_s9rj;[2rj)F+k-4iirj)O0
rj;[5rjVm;rk&0CqnN-Hrkn`TrlG)^rm1SjrmC_qrn%/%rn[S2ro!e9roO.ArosFJrpKdSrpg!Yrq-3_
rq??drqZQirqlTjrr)Nhmf1E/YlFLtqu-NlqtpBhrqQBbrq-3\qsaURrpKdOrp'LHroF(<qr%J0rnIG)
rmq(urm:Yjrm(MdrlY5]rl+lTrkn`OrkSNJrkABFrk/-?rjr!;ppg=6qmud=rk&6E!PQ2G^AbnH_#D1L
_u@UR`W!sXao9K_cMl/hd/MPof)F>$g]$%+i;Vd9jSnBBl2L#GmecMQoD\C]p\Xa_qYpBhr;QZire1<&
s31N<rqlZnr;6BjqYp9ep\sgao)%qUn,DbSli-2Kkl0ZBiqq[5h>Z1.f`'J$eGdhoci25hbPoZ`aSs0X
`;[[R_>_7L^](tH^&G\A]DfD=\bN]6\biu;]DfJB^&GbF^])%J_>_@O`;[aTaSs<\bPofdci2;jeGe%u
f`'Y)h>?.0j8S-=kl0iGlhg,InG`%Yo`"U^q"speqtp<jrV6BUs2k;Fs7QBjrVQNlqu6Hhq>U0gp&=U_
oD\:ZnG_nUmJcJOlMg#Hk5OH@ir7m8hYu:/gA]e)ec+(tdJhMlcMl&eb5TN^aSs3Y`W!gT_Z%CK_#D+5
^AbnE^];1O_86,frl"fTrl4rYrlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjU
rpg!Zrq-3_qtU0drqcWkqu$Hlp&9XEJcEsop&=shqu$HjrqcNfrqQKcrq-3]rpg!WrpTjRrp9XLroj@D
roF(<ro!e4rnIG+rn7;$rm^qprm:YirlkAarlP/\rl4rVrl"fQrk\KIrkI^3rkJ?Grk\TNrl"fTrl4rY
rlP/^rlkAdrm:YlrmUksrn7;)rnIG/ro!e8roF(@roj@Hrp0RNrpTjUrpg!Zrq-3_qtU0drqcWkqu$Hl
p&=1TaoAC@qu6KkrquZjrqcNfrqHEcrq69^rposUrpKdQrp'LHroa:Aro3h5rndY1rn7;'rmq(trmLel
rm:YirltGcrlY5^rl4iSrl"]On&#(Aqo&KQ!64rVrlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6
roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTjrr)NhJcC<$`rGr8qu-NlqtpBhqt^6crq??arq$-[
qsaUQrpB^Mroj@EroF(<qr%J1rn[S,rn.5$rmUkprm1Sjrm(Mfrlb;`rlP/Zqo/QQqnqm>rknWOrl+cS
rlP/^rlb;crm(Mirm1SkrmUktrn%/&rn[S1qr%J6roF(ArosFIrpB^QqsaUUrq$-^rq??crqZHfrqlTj
rr)Nhjo<I&VuQPkq#1*erqcWirqQKerq??arq-3[rp]pUrpKdPrp0RJroj@Ero=";qr%J1rnRM,rn7;'
rmh"trmLenrm:Gdrm(DcrljiSqoo&arQYGhcMPred/MGldf._pec+5#g&B_)h#?.,i;Va8j8S6@kl0iG
li-;Nmf)\SnG_tWo`"O_pAXgcq#:*dqYpBerV6ACs82hIs24m3rqQHhqu6Hkq>U0gp\smcp&=U_nc&%W
n,DbSm/H>Ml2KoGkPjN@iqq[5hYu=0gA]e)f`'G#eGdnqdJhMfci25ec2PrUbPTN_c25f`ci2;jdJhSn
e,Insf`'S'gA]n,h>?.0ir8!;kPj]El2L#JmJcPQn,DhUnc&1[p&=[ap\sseq>:$fqtU-brnmats/5ni
rqlZnr;6BjqYU*fp\smcp&"@[nc&%Wn,DbSm/H;Ll2KiEjo4??ir7m8hu;I2h#?(-g&BY'fDF+teGdqr
dehGkd-8mUd/22jdK.eErmUbormh#"rn.5'rnIG-rn[S2ro*k9roF(?roX4Erp0RMqsOIQrpg!Yrq$-^
rq??crqZHfrqlTjrr)EeJcGWIJcEXfp&=jerquZjrqcNfrqHEcrq60[rpg!WrpTjSrp9XLrosFEroO.?
ro3q8rnm_2rnRM-rn7;'rn%%trm^qrrmL\krm9oUrm:PirmLepqpbVqrn%/%rn7;*rnRM/rnm_6ro3q<
roO.ArosFJrp9OMrp]pWrpp'[rq69arqHEfqtg<hqu$Hlo)@PHao@t4rr2ThrquQfrqQBbqt9s\qsj[S
rp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrm_#"r7:l"rn7;)qqV2-rnmV2
ro3q;roO.Broj@Grp9XOrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkJcG<@JcE=]rr2ThrquQfrqQBbqt9s\
qsj[Srp]pTrp9XKroj@EroO.?ro3h5rnm_3rn[S/rn@A)rn.5$qpk\qk0s4Wrmgnsrn.5'rn@8)rndY3
qr%J5ro=">roa:ErosFKrpB^SrpTjUrpfmXrq69bqtTs_qu$?iqu51Hao@b.rr2]krquZjrqcNfq"Od[
qt'gVqsXOPrpB^Orp'LIroj@DroO.?ro3q9rnm_5qqq;,qqV)'n(RcqpY5f)h#?.,hu;R5hu;U6ir8$<
jo4EAkl0iGlMg/LmJcPQn,)VRoDA1Tp\t!cqYpBhr:p6frdk+<s+13Ws8N#mrVl`lqu6Hhq=s^`o_\7Z
nGD\Rmf)VQm/H;Ll2KoGk5OKAjSn0<iVqa6i;;F/h>?")g[Ekqg\'A$h>?+/i;VX5iVqj9jSn9?k5OTD
l2KuIm/HDOmf)\PnG`%Vo_A1[q>:$fqtp<drVQTCs2k;.s7QBdr;6BjqYU*fq"XO]oD\=XnG_nUmf)SP
li-2Ekl0`Djo4?<j8S';iVqd.hs]CohZ2R8i8FUnqr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0d
qtg<hq#'^^JcG3=JcE+Wp&=aaqtpBhqt^6dq"=XXrposUrpTjSrp9XMrp':BroX4AroEt:ro3q9ro!J,
n(mZoro!e7qr7V8roF(?roX">rp'LKrp9OMqsaUUrq#pXqtU0dqtg<hq#'^^e,RPiQ2gXYq#13iqtpBh
qt^-`rq??`qt'^TrpTjUrpTjSrp9XMrp'LHqrdt@qrRh<ro<\2n)<s!!94+?j8S-=jnn3>kPOKBlMg,K
m/-5MnG_nUnG_tWoDA1WpAXgcq>:$fqtp<drV6ACs69Q7s0;V!rqQHkr;6BjqYU*cp\smco_\7Wnc&"V
nG_nUmf)SPli-2KkkjQBk549>jSn34ipYk!ir8!;jSn9<k5OQ@kl0lHli-8Jmf)_Tn,DhUnc&.Wo_\@]
p\t!cqYpBhr:p6crltJbs,@!Wrpp$er;QTjqYU*`p\XX_o`"F\nc&"VnG_nRmf)VQm/-,JlMKi=kjR^,
kQ0o2ros=Frp0RMrpBLKrp]pUrpg!Yqt0m\q"Od`q"k!erquHfqu20Hi;\B.W;lkro)8RcrqlThqt^6c
qtL!\rq-3\rpg!Vrp]pUqsOINrp9OJrp'CFp#tl-o'$);qs+1Hrp9XOq!S.NrpTjVrposYrq6'\rqZ?c
rql]mp&4de`;dsZN;rSMqu-Nlp&"abqt^6drqHEcqt9s\rq$-[rpg!Vrp]pUqsOINqs=4Gh<P"*!:9OJ
rpBLKrp]pUrpg!Yrq$-]qt9s^rqH<brqZHfqtp9grr)EeJcF[.JcD\Kp&=jerquHdrqcWirqZQgrqHEc
qt9s\rq$-[rpg!Vrp]pUqsOINqs=4Gh<P"*q!A"Iq!S.NrpTjVrpp'[rq-*\rq??cqtU0dqtg3equ$Hl
o)?T-ao@+qqu60brquZjrqcNfrqQBbrq?6^rq-*Zq!n7NrpTjUqsX=Jn*To<rU0dUn,DhUn,)VLnc&.W
o`"O\pAXg`q#:*dqYpBhr:U$]rdk+*s+13Es82fdrVl`lqu6Hhq>U0dp\sm`p&=U\oD%kQnG_nUnGD\L
mdKQ<mecJPnG_nRnG)PQoDA1Zp&"I^p\Xabq>:$fqtp<arUp0+s2k:ls8Duprpp$er;6BdqYU*fq"XU\
p&"CYoD\=Xn_N^6nGr.Xo)A7Ro`"OYp\Xabq=sgcqtp<arUp/@s4%("s-`oarpp$er;6BdqYU*fq"XU\
p&"CYoD\=Xn_N^6nb_nVoC_bTp%\:Yq#:*aqYpBhr:U$]rj`!Ms+14Ks760drV6<cqu6Hbq>U0dp\smW
p&"CDoCqkXo^qhLqtC$`qtU'aqtg*bq#(-im/DS9eGk+"RK)jWqu-Nlqu$6drqc<`rqQBbrq>pUqt0%B
p%7qMqtC$`qtU'aqtg*bq#(-im/FNpao?qlo`+gfo)8@]qtp9ep%eU^o(W%Tk4SKB!VZ6[p\Xa_q=XU`
qtU*^rUp/@s3(Fns,d9XrqQHhrV6<fqtp6_q>U0[p\X[Hp%A%Op\Xa_q=XU`qtU*^rUp/ns2k:ls60LX
rpTg\r;6B^qUG<@qX+.YqtU*XrV6ACs1JA_s+LFOrql]`rV6<fqssU5q<[tWqtU*XrV6Abs2k:ls60LF
rq63Lqr[bOqsaLRr9"!0s1JA_s+LFOrosFTr8[\:qW[nJr9"!Os2k:ls4RGFrosCPr9!nNr:^'TrUTr=
s02NSs+14Cs7QBUrUTmKqs=7IrUTrPs2k:ls2=s(rm^lHrp'K6s-Wh;s+14.s6Ta7rTX<4s8;o=s+13g
s1\Ktrdk*:s+13$s5<pTrdk+Is2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$
s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$
s2k:ls+13$s+13$s+13$s+13ls+13$s+13$s+13$s+13$s2k:ls+13$s+13$s+13$s+13ls+13$s+13$
s+13$s+13$s2k:k
~> %APLeod
EI
0.60000002 i
/Cs3 SC
0 0 0 sc
CM
36.60659 380.6066 m
42.464478 374.74872 42.464478 365.25128 36.60659 359.3934 c
30.748734 353.53552 21.251266 353.53552 15.39341 359.3934 c
9.5355186 365.25128 9.5355186 374.74872 15.39341 380.6066 c
21.251266 386.46448 30.748734 386.46448 36.60659 380.6066 c
f
1 J
1 j
1 0 0 -1 -53 451 cm
89.60659 70.393402 m
95.464478 76.251282 95.464478 85.748718 89.60659 91.606598 c
83.748734 97.464478 74.251266 97.464478 68.39341 91.606598 c
62.535519 85.748718 62.535519 76.251282 68.39341 70.393402 c
74.251266 64.535522 83.748734 64.535522 89.60659 70.393402 c
S
1 0 0 sc
CM
240.6066 380.6066 m
246.46448 374.74872 246.46448 365.25128 240.6066 359.3934 c
234.74872 353.53552 225.25128 353.53552 219.3934 359.3934 c
213.53552 365.25128 213.53552 374.74872 219.3934 380.6066 c
225.25128 386.46448 234.74872 386.46448 240.6066 380.6066 c
f
0 0 0 sc
1 0 0 -1 -53 451 cm
293.6066 70.393402 m
299.46448 76.251282 299.46448 85.748718 293.6066 91.606598 c
287.74872 97.464478 278.25128 97.464478 272.3934 91.606598 c
266.53552 85.748718 266.53552 76.251282 272.3934 70.393402 c
278.25128 64.535522 287.74872 64.535522 293.6066 70.393402 c
S
CM
104.6066 380.6066 m
110.46448 374.74872 110.46448 365.25128 104.6066 359.3934 c
98.748734 353.53552 89.251266 353.53552 83.393402 359.3934 c
77.535522 365.25128 77.535522 374.74872 83.393402 380.6066 c
89.251266 386.46448 98.748734 386.46448 104.6066 380.6066 c
f
1 0 0 -1 -53 451 cm
157.6066 70.393402 m
163.46448 76.251282 163.46448 85.748718 157.6066 91.606598 c
151.74873 97.464478 142.25127 97.464478 136.3934 91.606598 c
130.53552 85.748718 130.53552 76.251282 136.3934 70.393402 c
142.25127 64.535522 151.74873 64.535522 157.6066 70.393402 c
S
CM
172.6066 380.6066 m
178.46448 374.74872 178.46448 365.25128 172.6066 359.3934 c
166.74873 353.53552 157.25127 353.53552 151.3934 359.3934 c
145.53552 365.25128 145.53552 374.74872 151.3934 380.6066 c
157.25127 386.46448 166.74873 386.46448 172.6066 380.6066 c
f
1 0 0 -1 -53 451 cm
225.6066 70.393402 m
231.46448 76.251282 231.46448 85.748718 225.6066 91.606598 c
219.74873 97.464478 210.25127 97.464478 204.3934 91.606598 c
198.53552 85.748718 198.53552 76.251282 204.3934 70.393402 c
210.25127 64.535522 219.74873 64.535522 225.6066 70.393402 c
S
CM
36.60659 312.6066 m
42.464478 306.74872 42.464478 297.25128 36.60659 291.3934 c
30.748734 285.53552 21.251266 285.53552 15.39341 291.3934 c
9.5355186 297.25128 9.5355186 306.74872 15.39341 312.6066 c
21.251266 318.46448 30.748734 318.46448 36.60659 312.6066 c
f
1 0 0 -1 -53 451 cm
89.60659 138.3934 m
95.464478 144.25128 95.464478 153.74872 89.60659 159.6066 c
83.748734 165.46448 74.251266 165.46448 68.39341 159.6066 c
62.535519 153.74872 62.535519 144.25128 68.39341 138.3934 c
74.251266 132.53552 83.748734 132.53552 89.60659 138.3934 c
S
1 0 0 sc
CM
240.6066 312.6066 m
246.46448 306.74872 246.46448 297.25128 240.6066 291.3934 c
234.74872 285.53552 225.25128 285.53552 219.3934 291.3934 c
213.53552 297.25128 213.53552 306.74872 219.3934 312.6066 c
225.25128 318.46448 234.74872 318.46448 240.6066 312.6066 c
f
0 0 0 sc
1 0 0 -1 -53 451 cm
293.6066 138.3934 m
299.46448 144.25128 299.46448 153.74872 293.6066 159.6066 c
287.74872 165.46448 278.25128 165.46448 272.3934 159.6066 c
266.53552 153.74872 266.53552 144.25128 272.3934 138.3934 c
278.25128 132.53552 287.74872 132.53552 293.6066 138.3934 c
S
CM
104.6066 312.6066 m
110.46448 306.74872 110.46448 297.25128 104.6066 291.3934 c
98.748734 285.53552 89.251266 285.53552 83.393402 291.3934 c
77.535522 297.25128 77.535522 306.74872 83.393402 312.6066 c
89.251266 318.46448 98.748734 318.46448 104.6066 312.6066 c
f
1 0 0 -1 -53 451 cm
157.6066 138.3934 m
163.46448 144.25128 163.46448 153.74872 157.6066 159.6066 c
151.74873 165.46448 142.25127 165.46448 136.3934 159.6066 c
130.53552 153.74872 130.53552 144.25128 136.3934 138.3934 c
142.25127 132.53552 151.74873 132.53552 157.6066 138.3934 c
S
CM
172.6066 312.6066 m
178.46448 306.74872 178.46448 297.25128 172.6066 291.3934 c
166.74873 285.53552 157.25127 285.53552 151.3934 291.3934 c
145.53552 297.25128 145.53552 306.74872 151.3934 312.6066 c
157.25127 318.46448 166.74873 318.46448 172.6066 312.6066 c
f
1 0 0 -1 -53 451 cm
225.6066 138.3934 m
231.46448 144.25128 231.46448 153.74872 225.6066 159.6066 c
219.74873 165.46448 210.25127 165.46448 204.3934 159.6066 c
198.53552 153.74872 198.53552 144.25128 204.3934 138.3934 c
210.25127 132.53552 219.74873 132.53552 225.6066 138.3934 c
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 231.5 409.5 cm
/F1.1[ 12 0 0 -12 0 0]sf
-4.5 4.5 m
(!)s
1 0 0 -1 230 248.5 cm
-4.5 4.5 m
(!)s
1 0 0 -1 162 409.5 cm
-4 4.5 m
(")s
1 0 0 -1 93 409.5 cm
-4 4.5 m
(#)s
1 0 0 -1 26 409.5 cm
-4 4.5 m
($)s
1 0 0 -1 26 248.5 cm
-4 4.5 m
(%)s
1 0 0 -1 94.5 249.25 cm
-4 4.5 m
(&)s
1 0 0 -1 162 249.25 cm
-4 4.5 m
(')s
1 0 0 -1 351 350 cm
-32 4.5 m
(\(\)*+,-.\)/)[ 8.865234 6.685547 9.246094 3.796875 6.902344 7.371094 7.359375 6.685547 0.000000 ] xS
0.60000002 i
/Cs3 SC
0 0 0 sc
CM
36.60659 140.6066 m
42.464478 134.74872 42.464478 125.25128 36.60659 119.3934 c
30.748734 113.53552 21.251266 113.53552 15.39341 119.3934 c
9.5355186 125.25128 9.5355186 134.74872 15.39341 140.6066 c
21.251266 146.46448 30.748734 146.46448 36.60659 140.6066 c
f
1 0 0 -1 -53 451 cm
89.60659 310.3934 m
95.464478 316.25128 95.464478 325.74872 89.60659 331.6066 c
83.748734 337.46448 74.251266 337.46448 68.39341 331.6066 c
62.535519 325.74872 62.535519 316.25128 68.39341 310.3934 c
74.251266 304.53552 83.748734 304.53552 89.60659 310.3934 c
S
1 0 0 sc
CM
240.6066 140.6066 m
246.46448 134.74872 246.46448 125.25128 240.6066 119.3934 c
234.74872 113.53552 225.25128 113.53552 219.3934 119.3934 c
213.53552 125.25128 213.53552 134.74872 219.3934 140.6066 c
225.25128 146.46448 234.74872 146.46448 240.6066 140.6066 c
f
0 0 0 sc
1 0 0 -1 -53 451 cm
293.6066 310.3934 m
299.46448 316.25128 299.46448 325.74872 293.6066 331.6066 c
287.74872 337.46448 278.25128 337.46448 272.3934 331.6066 c
266.53552 325.74872 266.53552 316.25128 272.3934 310.3934 c
278.25128 304.53552 287.74872 304.53552 293.6066 310.3934 c
S
CM
104.6066 140.6066 m
110.46448 134.74872 110.46448 125.25128 104.6066 119.3934 c
98.748734 113.53552 89.251266 113.53552 83.393402 119.3934 c
77.535522 125.25128 77.535522 134.74872 83.393402 140.6066 c
89.251266 146.46448 98.748734 146.46448 104.6066 140.6066 c
f
1 0 0 -1 -53 451 cm
157.6066 310.3934 m
163.46448 316.25128 163.46448 325.74872 157.6066 331.6066 c
151.74873 337.46448 142.25127 337.46448 136.3934 331.6066 c
130.53552 325.74872 130.53552 316.25128 136.3934 310.3934 c
142.25127 304.53552 151.74873 304.53552 157.6066 310.3934 c
S
CM
172.6066 140.6066 m
178.46448 134.74872 178.46448 125.25128 172.6066 119.3934 c
166.74873 113.53552 157.25127 113.53552 151.3934 119.3934 c
145.53552 125.25128 145.53552 134.74872 151.3934 140.6066 c
157.25127 146.46448 166.74873 146.46448 172.6066 140.6066 c
f
1 0 0 -1 -53 451 cm
225.6066 310.3934 m
231.46448 316.25128 231.46448 325.74872 225.6066 331.6066 c
219.74873 337.46448 210.25127 337.46448 204.3934 331.6066 c
198.53552 325.74872 198.53552 316.25128 204.3934 310.3934 c
210.25127 304.53552 219.74873 304.53552 225.6066 310.3934 c
S
CM
36.60659 72.606598 m
42.464478 66.748718 42.464478 57.251282 36.60659 51.393402 c
30.748734 45.535522 21.251266 45.535522 15.39341 51.393402 c
9.5355186 57.251282 9.5355186 66.748718 15.39341 72.606598 c
21.251266 78.464478 30.748734 78.464478 36.60659 72.606598 c
f
1 0 0 -1 -53 451 cm
89.60659 378.3934 m
95.464478 384.25128 95.464478 393.74872 89.60659 399.6066 c
83.748734 405.46448 74.251266 405.46448 68.39341 399.6066 c
62.535519 393.74872 62.535519 384.25128 68.39341 378.3934 c
74.251266 372.53552 83.748734 372.53552 89.60659 378.3934 c
S
1 0 0 sc
CM
240.6066 72.606598 m
246.46448 66.748718 246.46448 57.251282 240.6066 51.393402 c
234.74872 45.535522 225.25128 45.535522 219.3934 51.393402 c
213.53552 57.251282 213.53552 66.748718 219.3934 72.606598 c
225.25128 78.464478 234.74872 78.464478 240.6066 72.606598 c
f
0 0 0 sc
1 0 0 -1 -53 451 cm
293.6066 378.3934 m
299.46448 384.25128 299.46448 393.74872 293.6066 399.6066 c
287.74872 405.46448 278.25128 405.46448 272.3934 399.6066 c
266.53552 393.74872 266.53552 384.25128 272.3934 378.3934 c
278.25128 372.53552 287.74872 372.53552 293.6066 378.3934 c
S
CM
104.6066 72.606598 m
110.46448 66.748718 110.46448 57.251282 104.6066 51.393402 c
98.748734 45.535522 89.251266 45.535522 83.393402 51.393402 c
77.535522 57.251282 77.535522 66.748718 83.393402 72.606598 c
89.251266 78.464478 98.748734 78.464478 104.6066 72.606598 c
f
1 0 0 -1 -53 451 cm
157.6066 378.3934 m
163.46448 384.25128 163.46448 393.74872 157.6066 399.6066 c
151.74873 405.46448 142.25127 405.46448 136.3934 399.6066 c
130.53552 393.74872 130.53552 384.25128 136.3934 378.3934 c
142.25127 372.53552 151.74873 372.53552 157.6066 378.3934 c
S
CM
172.6066 72.606598 m
178.46448 66.748718 178.46448 57.251282 172.6066 51.393402 c
166.74873 45.535522 157.25127 45.535522 151.3934 51.393402 c
145.53552 57.251282 145.53552 66.748718 151.3934 72.606598 c
157.25127 78.464478 166.74873 78.464478 172.6066 72.606598 c
f
1 0 0 -1 -53 451 cm
225.6066 378.3934 m
231.46448 384.25128 231.46448 393.74872 225.6066 399.6066 c
219.74873 405.46448 210.25127 405.46448 204.3934 399.6066 c
198.53552 393.74872 198.53552 384.25128 204.3934 378.3934 c
210.25127 372.53552 219.74873 372.53552 225.6066 378.3934 c
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 231.5 169.5 cm
-4.5 4.5 m
(!)s
1 0 0 -1 230 8.5 cm
-4.5 4.5 m
(!)s
1 0 0 -1 162 169.5 cm
-4 4.5 m
(")s
1 0 0 -1 26 169.5 cm
-4 4.5 m
(#)s
1 0 0 -1 26 8.5 cm
-4 4.5 m
($)s
1 0 0 -1 94 169.5 cm
-4 4.5 m
(%)s
1 0 0 -1 94.5 9.25 cm
-4 4.5 m
(&)s
1 0 0 -1 162 9.25 cm
-4 4.5 m
(')s
1 0 0 -1 355.5 110 cm
-36.5 4.5 m
(012+,-.+34"5)[ 9.322266 3.468750 7.552734 3.796875 6.902344 7.371094 7.359375 3.796875 3.902344 7.587891 7.587891 0.000000 ] xS
ep
end
%%Trailer
%%EOF

Added Docs/Images/FiringChannels.graffle.

cannot compute difference between binary files

Added Docs/Images/IMG_9461.JPG.

cannot compute difference between binary files

Added Docs/Images/Inventory.png.

cannot compute difference between binary files

Added Docs/Images/TEK00003.png.

cannot compute difference between binary files

Added Docs/Images/TEK00011.png.

cannot compute difference between binary files

Added Docs/Images/abort.png.

cannot compute difference between binary files

Added Docs/Images/debug.png.

cannot compute difference between binary files

Added Docs/Images/firenet.epsf.

cannot compute difference between binary files

Added Docs/Images/firenet.png.

cannot compute difference between binary files

Added Docs/Images/index.png.

cannot compute difference between binary files

Added Docs/Images/inventory.png.

cannot compute difference between binary files

Added Docs/Images/login.png.

cannot compute difference between binary files

Added Docs/Images/main.png.

cannot compute difference between binary files

Added Docs/Images/main_arm.png.

cannot compute difference between binary files

Added Docs/Images/man1.png.

cannot compute difference between binary files

Added Docs/Images/man_fire.png.

cannot compute difference between binary files

Added Docs/Images/man_ready.png.

cannot compute difference between binary files

Added Docs/Images/node.eps.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
%!PS-Adobe-3.0 EPSF-3.0
%%HiResBoundingBox: 0.000000 0.000000 413.000000 563.000000
%APL_DSC_Encoding: UTF8
%APLProducer: (Version 10.7.2 (Build 11C74) Quartz PS Context)
%%Title: (Unknown)
%%Creator: (Unknown)
%%CreationDate: (Unknown)
%%For: (Unknown)
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 0 0 413 563
%%EndComments
%%BeginProlog
%%BeginFile: cg-pdf.ps
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
%%Copyright: All Rights Reserved.
currentpacking true setpacking
/cg_md 141 dict def
cg_md begin
/L3? languagelevel 3 ge def
/bd{bind def}bind def
/ld{load def}bd
/xs{exch store}bd
/xd{exch def}bd
/cmmtx matrix def
mark
/sc/setcolor
/scs/setcolorspace
/dr/defineresource
/fr/findresource
/T/true
/F/false
/d/setdash
/w/setlinewidth
/J/setlinecap
/j/setlinejoin
/M/setmiterlimit
/i/setflat
/rc/rectclip
/rf/rectfill
/rs/rectstroke
/f/fill
/f*/eofill
/sf/selectfont
/s/show
/xS/xshow
/yS/yshow
/xyS/xyshow
/S/stroke
/m/moveto
/l/lineto
/c/curveto
/h/closepath
/n/newpath
/q/gsave
/Q/grestore
counttomark 2 idiv
{ld}repeat pop
/SC{	
    /ColorSpace fr scs
}bd
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
/cgmtx matrix def
/sdmtx{cgmtx currentmatrix pop}bd
/CM {cgmtx setmatrix}bd		
/cm {cmmtx astore CM concat}bd	
/W{clip newpath}bd
/W*{eoclip newpath}bd
statusdict begin product end dup (HP) anchorsearch{
    pop pop pop	
    true
}{
    pop	
   (hp) anchorsearch{
	pop pop true
    }{
	pop false
    }ifelse
}ifelse
{	
    { 
	{ 
	    pop pop 
	    (0)dup 0 4 -1 roll put
	    F charpath
	}cshow
    }
}{
    {F charpath}
}ifelse
/cply exch bd
/cps {cply stroke}bd
/pgsave 0 def
/bp{/pgsave save store}bd
/ep{pgsave restore showpage}def		
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
/scrdict 10 dict def
/scrmtx matrix def
/patarray 0 def
/createpat{patarray 3 1 roll put}bd
/makepat{
scrmtx astore pop
gsave
initgraphics
CM 
patarray exch get
scrmtx
makepattern
grestore
setpattern
}bd
/cg_BeginEPSF{
    userdict save/cg_b4_Inc_state exch put
    userdict/cg_endepsf/cg_EndEPSF load put
    count userdict/cg_op_count 3 -1 roll put 
    countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
    3 sub{end}repeat
    /showpage {} def
    0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
    10 setmiterlimit [] 0 setdash newpath
    false setstrokeadjust false setoverprint	
}bd
/cg_EndEPSF{
  countdictstack 3 sub { end } repeat
  cg_dict_array 3 1 index length 3 sub getinterval
  {begin}forall
  count userdict/cg_op_count get sub{pop}repeat
  userdict/cg_b4_Inc_state get restore
  F setpacking
}bd
/cg_biproc{currentfile/RunLengthDecode filter}bd
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
/ImageDataSource 0 def
L3?{
    /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
    /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
}{
    /ImageBandMask 0 def
    /ImageBandData 0 def
    /cg_mibiproc{
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
    /cg_miaiproc{	
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
	    dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
}ifelse
/imsave 0 def
/BI{save/imsave xd mark}bd
/EI{imsave restore}bd
/ID{
counttomark 2 idiv
dup 2 add	
dict begin
{def} repeat
pop		
/ImageType 1 def
/ImageMatrix[Width 0 0 Height neg 0 Height]def
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
L3?{
    dup/MaskedImage known
    { 
	pop
	<<
	    /ImageType 3
	    /InterleaveType 2
	    /DataDict currentdict
	    /MaskDict
	    <<  /ImageType 1
		/Width Width
		/Height Height
		/ImageMatrix ImageMatrix
		/BitsPerComponent 1
		/Decode [0 1]
		currentdict/Interpolate known
		{/Interpolate Interpolate}if
	    >>
	>>
    }if
}if
exch
{imagemask}{image}ifelse	
end	
}bd
/cguidfix{statusdict begin mark version end
{cvr}stopped{cleartomark 0}{exch pop}ifelse
2012 lt{dup findfont dup length dict begin
{1 index/FID ne 2 index/UniqueID ne and
{def} {pop pop} ifelse}forall
currentdict end definefont pop
}{pop}ifelse
}bd
/t_array 0 def
/t_i 0 def
/t_c 1 string def
/x_proc{ 
    exch t_array t_i get add exch moveto
    /t_i t_i 1 add store
}bd
/y_proc{ 
    t_array t_i get add moveto
    /t_i t_i 1 add store
}bd
/xy_proc{
        
	t_array t_i 2 copy 1 add get 3 1 roll get 
	4 -1 roll add 3 1 roll add moveto
	/t_i t_i 2 add store
}bd
/sop 0 def		
/cp_proc/x_proc ld 	
/base_charpath		
{
    /t_array xs
    /t_i 0 def
    { 
	t_c 0 3 -1 roll put
        currentpoint
	t_c cply sop
        cp_proc
    }forall
    /t_array 0 def
}bd
/sop/stroke ld		
/nop{}def
/xsp/base_charpath ld
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
/refnt{ 
findfont dup length dict copy dup
/Encoding 4 -1 roll put 
definefont pop
}bd
/renmfont{ 
findfont dup length dict copy definefont pop
}bd
L3? dup dup{save exch}if
/Range 0 def
/DataSource 0 def
/val 0 def
/nRange 0 def
/mulRange 0 def
/d0 0 def
/r0 0 def
/di 0 def
/ri 0 def
/a0 0 def
/a1 0 def
/r1 0 def
/r2 0 def
/dx 0 def
/Nsteps 0 def
/sh3tp 0 def
/ymax 0 def
/ymin 0 def
/xmax 0 def
/xmin 0 def
/setupFunEval 
{
    begin
	/nRange Range length 2 idiv store
	/mulRange   
		    
	[ 
	    0 1 nRange 1 sub
	    { 
		    2 mul/nDim2 xd		
		    Range nDim2 get		
		    Range nDim2 1 add get	
		    1 index sub			
						
		    255 div			
		    exch			
	    }for
	]store
    end
}bd
/FunEval 
{
    begin
	
	nRange mul /val xd	
				
	0 1 nRange 1 sub
	{
	    dup 2 mul/nDim2 xd 
	    val	
	    add DataSource exch get 
	    mulRange nDim2 get mul 	
	    mulRange nDim2 1 add get 
	    add 
	}for	
    end
}bd
/max 
{
	2 copy lt
	{exch pop}{pop}ifelse
}bd
/sh2
{	
	/Coords load aload pop 	
	3 index 3 index translate	
					
	3 -1 roll sub	
	3 1 roll exch 	
	sub				
	2 copy
	dup mul exch dup mul add sqrt	
	dup
	scale  
	atan	
	
	rotate		
	
	/Function load setupFunEval	
	
	
	clippath {pathbbox}stopped {0 0 0 0}if newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	currentdict/Extend known
	{
		/Extend load 0 get
		{	
			0/Function load FunEval sc	
			xmin ymin xmin abs ymax ymin sub rectfill
		}if
	}if
	
	/Nsteps/Function load/Size get 0 get 1 sub store
	/dx 1 Nsteps div store
	gsave
		/di ymax ymin sub store
		/Function load
		
		0 1 Nsteps
		{
			1 index FunEval sc
			0 ymin dx di rectfill
			dx 0 translate
		}for
		pop	
	grestore	
	currentdict/Extend known
	{
		/Extend load 1 get
		{	
			Nsteps/Function load FunEval sc	
			1 ymin xmax 1 sub abs ymax ymin sub rectfill
		}if
	}if
}bd
/shp	
{	
	4 copy
	
	dup 0 gt{
		0 exch a1 a0 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a0 a1 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
	
	dup 0 gt{
		0 exch a0 a1 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a1 a0 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
}bd
/calcmaxs
{	
	
	xmin dup mul ymin dup mul add sqrt		
	xmax dup mul ymin dup mul add sqrt		
	xmin dup mul ymax dup mul add sqrt		
	xmax dup mul ymax dup mul add sqrt		
	max max max								
}bd
/sh3
{	
	/Coords load aload pop 	
	5 index 5 index translate	
	3 -1 roll 6 -1 roll sub		
	3 -1 roll 5 -1 roll sub		
	2 copy dup mul exch dup mul add sqrt
	/dx xs						
	2 copy 0 ne exch 0 ne or
	{
		
		exch atan rotate	
	}{
		pop pop
	}ifelse
	
	/r2 xs
	/r1 xs
	/Function load 
	dup/Size get 0 get 1 sub	
	/Nsteps xs		
	setupFunEval		
	
	
	
	
	
	dx r2 add r1 lt{
		
		0 
	}{
		dx r1 add r2 le
		{ 
			1
		}{ 
			r1 r2 eq
			{	
				2
			}{ 
				3
			}ifelse		
		}ifelse
	}ifelse
	/sh3tp xs		
	clippath {pathbbox}stopped {0 0 0 0}if 
	newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	
	dx dup mul r2 r1 sub dup mul sub dup 0 gt
	{
		sqrt r2 r1 sub atan
		/a0 exch 180 exch sub store 
		/a1 a0 neg store 
	}{
		pop
		/a0 0 store
		/a1 360 store		
	}ifelse		
	currentdict/Extend known
	{
		/Extend load 0 get r1 0 gt and	
		{	
			0/Function load FunEval sc	
			
			
			
			
			{ 
				{	
					dx 0 r1 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				}
				{	
					r1 0 gt{0 0 r1 0 360 arc fill}if
				}
				{	
					
					
				
					
					0 r1 xmin abs r1 add neg r1 shp
				}
				{	
					
				
					r2 r1 gt{	
						
						0 r1
						r1 neg r2 r1 sub div dx mul	
						0	
						shp	
					}{	
						
						
						
						0 r1 calcmaxs	
						dup
						
						r2 add dx mul dx r1 r2 sub sub div
						neg				
						exch 1 index	
						abs exch sub
						shp
					}ifelse
				} 
			}sh3tp get exec	
		}if
	}if
	
	/d0 0 store
	/r0 r1 store
	/di dx Nsteps div store
	/ri r2 r1 sub Nsteps div store 
	/Function load 
	0 1 Nsteps
	{	
		1 index FunEval sc
		d0 di add r0 ri add d0 r0 shp
		{
		
		d0 0 r0 a1 a0 arc
		d0 di add 0 r0 ri add a0 a1 arcn
		fill
		
		
		d0 0 r0 a0 a1 arc
		d0 di add 0 r0 ri add a1 a0 arcn
		fill
		}pop
		
		
		/d0 d0 di add store
		/r0 r0 ri add store
	}for
	pop	
	
	currentdict/Extend known
	{
		/Extend load 1 get r2 0 gt and	
		{	
			Nsteps/Function load FunEval sc	
			
			
			
			
			{ 
				{
					dx 0 r2 0 360 arc fill
				} 
				{
					dx 0 r2 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				} 
				{	
					
					
					xmax abs r1 add r1 dx r1 shp
				}	
				{	
			
					r2 r1 gt{
						
						
						
						calcmaxs dup	
						
						r1 add dx mul dx r2 r1 sub sub div	
						exch 1 index	
						exch sub
						dx r2
						shp
					}{	
						
						r1 neg r2 r1 sub div dx mul	
						0		
						dx 		
						r2		
						shp
					}ifelse
				}
			}			
			sh3tp get exec	
		}if
	}if
}bd
/sh		
{	
	begin
		/ShadingType load dup dup 2 eq exch 3 eq or
		{	
			gsave
				newpath
				/ColorSpace load scs
				currentdict/BBox known
				{
					/BBox load aload pop	
					2 index sub				
					3 index					
					3 -1 roll exch sub 
					exch rectclip
				}if
				2 eq
				{sh2}{sh3}ifelse
			grestore
		}{
			
			pop 
			(DEBUG: shading type unimplemented\n)print flush
		}ifelse
	end
}bd
{restore}if not dup{save exch}if
	L3?{	
		/sh/shfill ld
		/csq/clipsave ld
		/csQ/cliprestore ld
	}if
{restore}if
end
setpacking
%%EndFile
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 0 0 413 563
%%BeginPageSetup
cg_md begin
bp
sdmtx
%RBIBeginFontSubset: Helvetica
%!FontType1-1.0: Helvetica 1.0000.0.0000
 14 dict begin/FontName /Helvetica def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /N put
 dup 34 /e put
 dup 35 /t put
 dup 36 /w put
 dup 37 /o put
 dup 38 /r put
 dup 39 /k put
 dup 40 /P put
 dup 41 /slash put
 dup 42 /S put
 dup 43 /a put
 dup 44 /u put
 dup 45 /s put
 dup 46 /L put
 dup 47 /E put
 dup 48 /D put
 dup 49 /V put
 dup 50 /one put
 dup 51 /two put
 dup 52 /three put
 dup 53 /four put
 dup 54 /five put
 dup 55 /six put
 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A1D676C79660000000000000E28000015986865616400000000000023C0000000366868656100000000000023F800000024686D7478000000000000241C000000606C6F6361000000000000247C000000326D61787000000000000024B0000000207072657000000000000024D0000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A
 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020
 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158
 B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0401BB000598A8A20B0032653582321B0808A8A1B8A235920B0032653582321B800C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00000000020042000004D005BD00030007003FB800532BB800082FB800092FB8000810B80000D0B800002FB8000910B80003DCB80004DCB8000010B80007DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB30000000100000000026A05BD0003002B4017070117019701030102021C1203030002030A0100020003192F18D4003F3C3F3C05872E2B7D10C4015D0133012301D298FE2E9805BDFA4300000100C4000002D5059200080023B10801B80133400C0404070C04079605000A47091076C418C4D5FD39003F3FF4CD313013353E013733112311C4C39A268EC003F68A1359A6FA6E03F60000000100400000041E059D002200A6404E3604460457056B1D6E1E7A1E84018702082A085A196B197C197C1CB519050022010F041C0E1921071C19040100051F0F0F22130A351305201F7521220C217F0738166F220E270F811F38222447231076C418D4EDF4ED10F5EDE4003F3CFD3C3FED1112392F1217390111123912393911391239005D31304379401C04190C2511260B120E2800091407280119040D100A280108150A2801002B2B1010012B2B2B2B81005D36123F01363736353426232207060723363736213212151407060F01060706072115214A85C1C081
 3452967DB9472604B70342750128F6E37946B5896238641A030EFC29B90112706F4B35536B7D938C4B85BB76D0FEF6A3AC7A47654C3631576AAA000000010031FFD9041A059A003100C4401F490C532D6529632D7529752D069626014B082B0A182B140D03F93114350D20B8012340141135107F0D0D311B3524050735310D1896274411B8014A400F0A382E6F021F2920810327023347321076C418D4EDF4ED10F5EDEDF4ED003FED3FED12392FF4FDE610ED10ED111239011112393130437940362F301926000905261D2522260600032800040308300A28011C231F28001A251828010401072800092F0728001E211B280119261B2801002B2B2B2B012B2B2B103C2B2B2B2B818181005D015D0402353316171633323635342623220607351E013332373635342623220706072334373621321615140706071E01151400230116E5BC0C2846B78EACB5A11225131C26166541729865B4452605B2406E0115DBF0472C46717FFEF2F8270117C88B3F719878947601019F03022038906B7478427AA070C8C3B98452331D1FB180CDFEFE000000000200340000042F059C0002000D005C402209020A080D010202BE12060607020601050708030106070A02750B05EF030C070403B80117B501960D08AC0AB80158B3050F470E1076C418D4F5F43CFDE4003F3FF43CFD3C1139390111123911123939872E2B047D10C50F3130011109011121350133113315231102A5FE3501CEFD8C029098D3D301FB0289FD77FE05015EB0038EFC5F9DFEA200000000010042FFDC041C0580002000BB402B4812881F02390C461357136713043A080C0D07000C0A0F0E0E75121313120E0F201213070013170A17350AB80122401A0D7F0E0E1D123A0F04043520C71D0D1107381A6F0038202247211076C418D4EDF5EDC4003FEDED3FFD12392FE4F4ED1112390111123939123939872E2B7D10C5001239011112393931301843794028181F01090226031E00280001001F20051C0728010918072801011F042800061B04280008190A2801002B2B2B012B2B103C103C2B2B8181005D5D131617163332363534262322060727132115210336373633320415140221222427FD127D4054A09AB7805D852F9C6D02E8FD9F3D322D5069C50112FBFEEDAFFEF310016D9A3B1ECC7C96A44840090303AEFE72261321FEC3CBFECAC5CC00000002004DFFDB0423059E001B002700A94039771A0117082508271958198600870188090747080A212721350E0E1403C707351B052735140D032902811E38116F170A023C0A2431172947281076C418D4FD397C4B52787A2F1810F5EDF4ED003FED3FEDED12392FED11123931304379403425261C200F1600060526200F1E280126152428001C131E2801060003280104031F1021280125162728001D1227280004010728012B2B2B
 2B01103C2B2B2B2B2B81818181015D005D001615232627262322020336373633320415140223220011103712211236353426232206151416330347BDB21023418497B20A3E5E566AB4010CFEEBC9FEDC417D014C818D7EA674AF9F8D059EF98455305AFEE9FEFC5B2D28E6E4C3FED301310169010BBA0164FADDBF826EC79A9B88B90000000200A50000056305BD000D00180067401F871196120232080B1E0F02001E17080831131A1A0D250E19191AD6217689182B2B4EF44DFD4E10F64DED003FFD3FFD3130437940260116112515260607050704070307020705060A10083201011608320109120B320107140032002B2B012B2B2A2B2B815D2532373637363736351002232111032120171611140702290102D06541744A3B1A0FD9F1FE9FC80253012FA795589BFE86FDAFAA15276F598B53470111012EFB980513D7C2FED1EABDFEB20000000200AF000004ED05BD000B000C004E4024071E04040B031E01000209081E0A0B080C020C0C02000669023B091A0E03082500190D0EB8010BB3219589182B2B4EF44DFD3C4E10F64DF4E41112392F003F3F3CFD3C3F3CED12392FFD313013211521112115211121152101AF042FFC93032BFCD5037CFBC2021F05BDB4FE42AAFE0EAF05BD0000000001009C0000044B05BD000500314013000203021E040508031A070102250500190607B80153B321765E182B2B4EF43C4DFD3C4E10E6003F3C4DFD3C3F31301333112115219CC702E8FC5105BDFAF2AF0002009C0000052A05BD0009000A007640143701380602070117012701470158020507010202B8019B4017120606070207080301020806080A030A0A010608020302B8019BB505041A0C0708B8019B400A0900190B0CA0217670182B2B4EF43C4DFD3C4E10F63C4DFD3C11123939392F003F3F3C3F3C12393904872E2B877DC53130005D015D13330111331123011123019CEB02E6BDDFFD0FBE023A05BDFB5A04A6FA4304A5FB5B05BD0000000200AF000004F805BD000A001400614035690C6912790C7A12044814581468147A140407081E1110100A010E0F1E0100020A080206120C0409141431041A160F092500191516B8010BB3219589182B2B4EF44DFD3C4E10F64DFD11121739003F3F3CFD3C1012392F3CFD3C015D31305D132132161514062321112300272623211121323635AF0295C4F0D6DEFE32C70380784273FE74018C86A705BDDDC8ACFFFD9304B93A1FFE0372900000020060FFD504F605E5002F003000FE405E290F27232626360E3521472662267A0E7724096B08180E172502590E680EAA22030A0E3A2224220A03041C1886142F2F2B1C3A1403043A2B0930020A0E081124221F28303011182517490825281A321F25114900252F193132A0216A89182B2B4EF44DEDF4ED4E10F64DEDF4ED12392F121139391211
 3939003F3FED3FED12392F10ED111217392EFD335D7131304379404D282E111F0008022602262D2506251A26032C002B002D2E032C002B00052A082B011D131F2B001B15182B011918012D042B0009270B2B01250B012E042B000729042B001E121C2B0119161C2B01002B2B2B2B10102B2B01103C2B2B2B2B103C2B2B2B2B2B2B818181005D0116171633323736353427262F012627263534243332041523262726232206151417161F01161716151404232027263701011E073463FA705CB24B4CA2C7C3518C0112FBE70143BB0F315BDAB09A5A3BD0CE95518CFE9DEBFEEE9B9B03024D01DA7D4E92203EA0783332252D2C355CB7C6FEDFF5763F7394626C3220302F223B67C4F4D28C8BEE040B00000100340000053605BD0006008F40449001A0010240015401021601017805E6010267046805880403192802251203030400251206060501050203060300020504080817171A0402039E0500019E0619078E5E182B194E10F4184DFD3939FD3939194E456544E618003F3C3F173C123901874D2E2B872E182B4B5279400C01020100030401000102060587087D10C487087D10C43130015D005D717172090233012301011001A601A1DFFDE8D3FDE905BDFB1D04E3FA4305BD00000000030052FFDC04470449000F003B003C00DD40382A30010A100B1B0C1C2733481069096A10073908120C09031B320724091D100C1D3B2B022E293BB73B023B322A2512100705081C2722171CB8018A4023171D1F07271D2E0B021D350B3C073C3C1C1407292AA8241A3E1B291C4A0F2738193D3EBC0197002100B9019600182B2B4EF44DEDF4ED4E10F64DE4FDC412392F003F3FED3FED3FEDED1239111217395D1112392EED2EED01111239111739313043794028363715220001192501360F2100181E1B21001620142101212200370221001A1D1721011521172101002B2B2B01103C2B2B2B2B818181005D015D2416333237363D010E010F0106070615013637363534262322070607233E01333217161511141633323637150E0123222726270E012322263534363713010E724E5F59962168326D62315301B43E150C837A8D3B210AA805F7A3BD767517250C1E112A2C265D2A160937CE7C95BDBA978ACF5A2C49A691151C060E0D1C2F67016C082C182D5C534C2A53C69B484898FD971C220303850C06422340486AB58895A41301E40000030048FFDA041A0449001C00240025010C40799708991AA71F03050E020F0514150E120F1514400C401408291A014B0BB603C701C603C71BD808D909D61FD823E817E8230BC711C712025C080521240F9A161D243906070716211D1C070A1D160B2507971CA71CB71CD71C0425160F251C05190A0C07110E270F1D27051A27242E072719192627D421A65D182B2B4EF44DFDE44E10F64DEDD4FD3912393911
 12393912392F5D003F3FED3FED12392F3CFD3C10ED1112393130437940460023040503050205010504061F26111012101310141004060C25221B24260020001D26011E1D09170726000B150E26010D0E231A2126011E0521260108180A26000D100A2600002B2B2B2B01103C2B2B103C2B2B2B2A2B2A8101715D00715D5D00161716171615211E013332373637330E01070607062322001110003301262726232206070102B4D638361210FCEF0590978D543014B1074F3152794152C8FEEA0118E2011F0B284AAD7CA805012304476B55516C4AA2A3C55D36473B912E501C100123010601020142FE26754682B38A01DC00000000010080000003F805BD000B00A740645902013A08011902010706170657056705790678078705B903C903DA030A05050608080709030284029402A4020302391209090405060504066D12070708080705040305060908050204030A00000403060A07060A061A0D09020A29000B190C0DB22162B9011600182B2B4EF43C4DFD3C3C194E10E618003F3C3C3F3C3F1112173901121739874D2E2B087D10C104872E182B5D057D10C010083C083C3130015D00715D7213331101330901230107112380AD01CEE6FE6601B1E6FEB297AD05BDFCAB01C7FE6FFD62021C8AFE6E00000003003BFFD90421044E000C0018001900904033980896109916A504A808A610A916B808C808D704E50EE9140C3A08061D18070C1D120B190719191502270F1A1B092715191A1BB80109B321725D182B2B4EF44DED4E10F64DED12392F003F3FED3FED31304379402C001704260B1309260000110226010717092600050D0226010A140C260001100C26000816062601030E0626012B2B2B2B012B2B2B2B2B81005D241235342726232206151416331200111002212200351000330702E085304CBAA59696A3D6011EFCFEF7DDFEFC0112E70674010FA6965E94FCB2ABE403DAFEECFEF4FEFDFEAE012BFC010E014005000100890000029204470011004F40262703260D37034704040E0810020E0911090C270805070006110A081A13012E10291100191213B80145B321627E182B2B4EF43C4DFDE44E10E6003F3F4D3FC4FDC411123939011112393130005D1333153E0133321617152E0123220615112389AB15A46B05181D101B108892B4042FB9369B0203BE0302AF72FD980000020042FFD703B6044B002E002F012E408F38099805961299149815982A062824252736214621472447275624572766246726790C790D790E7623742474257426A61EA82C1303000B15052D042E13001A151B171C18152D142E280F0B6908262536250225220D0A042B1318C61C1D1307041D2E9A2B0B2F07090E100207002F212F1A1F18161827173E28260727281A310E1F27103E00272E193031B221A65D182B2B4EF44DEDF4FD394E10F64DFD39
 10F4FD3911123939392F111239113939003F3FEDED3FEDED111217397131304379404C012D022615251A26210E1F21000926072101032C002100052A0721011D121F21001B14182101200F22210021220E0D08270A21012625090A012D04210006290421001E111C210119161C2101002B2B2B2B103C103C2B103C103C2B012B2B2B2B2B2B2B2B2B81005D5D015D13161716333236353427262F01262726353436333217160723262726232206151417161F011617161514062322262701EF082544A864983D27738F894174DBB9F26B4302AA05263E99666945284E77C24269D9DEEFC70701B701505A3057575B4524161D24222A498198BC8E5A683D32474E40462A19131D2F2C45948FD0D9A002F900010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C593000000020080FFE303DE044900170018005E403AB814C81402091308141913191428067703D707070800050E0A00060D0A051D120B180718180B160D2E0A290C0B1A1A01291619191AD2216242182B2B4EF44DED4E10F63C4DFDE41112392F003F3FED3F3F3C391112393130005D015D0111141716333237363511331123370607062322272635112501381A3083BC4425B4AA0223346793E5532D01AF042FFD39523460A85A9D020EFBD19E3D2A5499528902D81A0000010012000005A1042F000C0120407E4704AA09028E09014607490B87038A08850ACA02C403C607C908C60AC90B0B66076A08650A690B76077908760A790B85078A0B0A4607490B0247037700780503572816282B012B043B013B048F018F0406090401030B020305060C050006080A0B03070A0E17171A0705069B080304C40A0209C40B00019B0C190D677E182B194E10F4184DFD3939FD3939FD3939FD3939194E456544E618003F173C3F173C1217395D4B5179400C0529120607060029120C0C0B0587102B87102B4B5279B4090A09080AB8018B401312010102070604050529120606070908090A08B8018B400E120404030B0C00010029120C0C0B01874D2E2B87107DC41805872E182B087D10C505872E182B877D10C405872E182B087D10C53130015D71717100715D1B02331B013301230B012301D7CED1CAD2DBB4FEC9BBDAD3BBFECB042FFCB4034CFCB90347FBD1033DFCC3042F0000010000000000006B8BED625F0F3CF500110800000000005F4D8F0000000000C9C13CF7F865FC270B9108F9000000090001000000000000000100000629FE29
 00000C01F865FCED0B910001000000000000000000000000000000180512004202390000047300C4047300400473003104730034047300420473004D05C700A5055600AF0473009C05C7009C055600AF05560060055600340473005204730048040000800473003B02AA008904000042023900170473008005C70012000000340058007E010A01B602040298032E039003D403FC045204A8057405D2069C076607D6084E0894097409C40A1E0ACC000000010000001800920009006B0007000200100010005D000007E80A1D00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166
 406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500
 00>] def
 /CharStrings 24 dict dup begin
 /.notdef 0 def
/slash 1 def
/one 2 def
/two 3 def
/three 4 def
/four 5 def
/five 6 def
/six 7 def
/D 8 def
/E 9 def
/L 10 def
/N 11 def
/P 12 def
/S 13 def
/V 14 def
/a 15 def
/e 16 def
/k 17 def
/o 18 def
/r 19 def
/s 20 def
/t 21 def
/u 22 def
/w 23 def
 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-1947 -985 2961 2297}def
 /UniqueID 4257378 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C9266A63CD4C2DA03F4BF340963A027151A3FDA461900D733520630E1D847687011288516492D603AB7AAB6F6B3E50DF79393D3D9B37CD832F19B0B110C3906904D966CD3709B23E0976CE48036A0B8943541BDAAB435AF5D2781A114202E5EC2B49D2C1A19C8016509641312B0A390ED74F7E6869257B79516B1D9EB2933A5EB0F6ECAC6AB5FD31EBA6AE81170C4370D8619B380952525FF7209B9B7F0C96DD5C4C4069B9B10015D3B5F76B167C6A243E35621D049F07254767DDDD3C4683DB7D2670CEC5EB0783A5B774A8FDF9614473C79235B5BA83C699794CF1EB598E68379AFA761A6B6E74C5B190689F2B7F3AA2E2343366B4789F08E8F0574E3EA53800552137F23E5F304D123DFAFDC3C5C7142198853887483D221FCB3F31E824159BA216C38A00912DCB8CDD09CA90864E254A028482E668616DE2E3DCF16ACE181AD045AFE28C1D7A26B1EC6E71E95C6E913B9055036F3F431FE14033B13B82972ADFDEAFC15BAD21BD6764E89B9C526C4848C7D8DA339F8C8FC68D273C25A973D641A2B9B51C024AD15E7D2CEAFA2331CB911F218ACD1345D2B81AC1B95E4D69A6324847102DA766D0897595B248C16C3545D27E6D217DADCEF61229969DF503ECE5733DCF7105E93D889691C55C01E0FD0A00365FAEB30A35697182E4C9B87D1B5BC0734DC9F80AFD532B41F8C5422A95BDAB9E53241EF9235D304F7FC436B49F8FD90CD58CB41E61AC40D5F000BA54718477AF026E7116CA28AB03B3B3CE547CC
 72F2083293928940AF9C101788B4A0007E19BAA9307F7596A3D8563B2D0FD65B555936EE82AFC82BFEE8C5F21F4AD2704D615DA1DB9C8CBB6C9018E5BB0E489078D924B7A867CF681232ADAB7EA0C3CE8D1494CD6B86D167C8532271B53B796945F2C5D34038848D0EDC32E959B83B792BEE695D0C5640698C9E174CCFCF83E0CC96FA8DBDF690C17003BA7714E1AB1348B4B3DD2C340566DEBA7B8B60FB742E650F72B239CFE0524CFD2E7FEB69E0D641166459890DBF708F7D27CF194D28362415D7143C15624FB57D9F6A65148391A54CD426CDB788878E8C4D9D503ADDFD6CCBDF64F9F6FDF5DB5798AB63FE565A16369337545751F06E68B535F1B0C76CD95CA1775726B202DDB184CD7EE8ADF057F9A1BFE100B9804CD7150B5727EC6C2671C757D55C00488AA5AF544BD8A6D929B1DE86611440157E5773DCA1C9666556345B6A200E982C8235C3B48F8575B1636ED9B90F5F9527271061FE39C3A28DE6070708B1C887A697E29B4865A93953027CF587200A11093C7F14C1DD9D297C6E1CD1902E3B64CFE8195998F36149818F157BADA32595660B9BCDA9165BD2315B742A5AA1B5FDBBE007601DB0EEE1B5639C398C605F201229892254861DF78BB51C45BF4D5AA1B731D4908455D2EE260AF93808F2024C2CC8192F0155112FA7DA8F2A8689BDF09CAF460436A1D9000135B76D9CD5146B0A27E12EF552B1C94D67215E8AE43E511D2746E2E536B072D21F52B3003AF2BA0172C50E3CD3F64648C8D5E6D1D85D7DCECCF3A08716CB75355F03067D3A756875E0971A07A30137530888ACBD24EAEB2CD9F57A24F542C207FAFCC548E655BFBB1C8BE23DAEDFF56F6E78792B8D909B46BE300887CD6C316D0F81D96DC641B84967B526B3D0B3E1442A20918F60AAB7FF4DBE9F8E08C7E3970D787EF9C9A8D3BBBC93998836B79C6F0C966C712EFF86E48A9F40D5202614635DD320D8C6C3520B866BEDAB32B43E29D1DDC7ABA894F3EA1516AF4B57B660CCB538972AFA6E37438514595BE875C4CBC88436B2426A9384AD8AF1850FC1A18B503ABDAA5FB26E2741D49B5DCDEEA7E66191A83B1F5D7614E68101430AA4D0E0ACA53C9DEB3C781DCFE944245DECBF9CC103B255E132559F5EB78F484E1A0FFE13C1F4187A449ED3A92862AFE566C025B11AB117A4E99D1A496947B4860E9ACA84360F351529690B9228F21AB22FEB77E099C2D24D5EF7A88D45A11F5E2AF841922FC319D7CDA5BBE36E12BF14A702DED5194BA427A36E71D88C86B65345537D7F657EF0B678BE826566B5B2F5A1D9BEAD3144DE26E820E34703A9F95C2004D90B108492B6CD7E632965C5E054BFD0B024BE1C297801E4DE0C75EB9024F6643DA0BE895B6143C780B47D58C3A25B05C7B66419119740487ECD71B32181F2CCF29E8D0EE7998C64CAEF2EBC5EE60EB11E
 F9448331D1DC020A60E96AEBA4DCD391C4F0BEA7848540A2DA500A2EB3C0D97138A534F0A75269DD514E02CBEDAE67AF97FE126E0120389C9C6F93E2AB6FAD6C78C9C5E0C5F07E4B0BD0D7F1AF036F18CDC95C3F18262666D742EE01C3456D6AE9D0E146756AEF8691F7B3993B2221A95D56D5EDD6F7FF089BFDADB46CDEA33B3AB88DDECCFF4C62E4FAE116FB49456AF21BEEEE07FCD4DE933FD44BF2B6FA487C50CBAD199A6F99972C8EEFD8F44ECD68EC77D7AE1B9A8CB574DA2DF7A5954873D75A532456D1C92E48C20484BFD17F3C5FC87B3E9BB9F587C143FC5203060C0DD99421296EC58C7D804923D5C699BCB8AC7415E4A74045A8B5C0C87A698BB17CDE014D7562B23C6D48D0F93345CC3B130A207FF78091B3AB088298B9978C980BABD41525AB26C1CB2371F36FFE690C0B54D6DEE6933BF55A3A9385C5B9ADE99AB47E2E18F4987F726BD1B9EDA8579CB69C0736C2A0AA14C757F5574B532389597C8E2BA1129091F3C4E6A3695FFB513C164C86BAD6CFB4C65997C986FE2C316BEA4DCE62D858F5BFBE7765C2AAC5ECEB577CCE5A5FE829671BB1A0B6566CAA73647661287BE9157B12EE76E5DE2F0F1B5F2F0B26865E76746E476D697F189915755B6A84969594C03C6E95E0D2E5EA28CB1F2F83ECC850B705B33FB9C57D39529AD56612E16A34A9ACBE1454BA84222DDDBD1442F4F4C96D84FC069716BF12F321FE440C39703A3F46BF7697315A28E1F72AF58FC0FFC33EADFC027C34AFFBEACB212253361D2D571EBB158E942429A5342F7D5D70433F298483590734DFC93F1DCFBE6A36CBBCE33BFB8908F1ED8B454EB95FA3712B54753D5A46E253AD5661E18AB74955CA3538C8A5B1B18AE3E3FA181A7A83A097A91010AACACD7C61501CED956EB6ED5AFC92D451C7B5DEA81D4C4A5C672F3B9E3C63ADFF69D3944BFEAA7E46EAF2CF1461B8B10FB0A47E4E91B582E210F4F0B8F7284A9B830E94BE137C6493DF49552B8E87DD078EC915A7E9F99C4CE28835832B5C89A4F4A285312B21622121B720F4A78EDEBFDADAC37C4221D2096EBFE152986D857BA5F6EC691FF3AED37B46EE91E32C2EBE31272BA55596763036A7DC95415085BB021A45F6342F12606449C429C9E211894E6A68E9EF3401EEF988EEF615D0E53B92C08BB274A6CD354B73146782A7E5DAA5FF03EB02F3D1071E7FE3584F65D7412B3C76679E98160A85E1E09284B9E4CD3F7189D364D9DB1A39663ACC805CD1E06EC822A2CBF4A8F8F72720D157C0A6EF9F90E3442BF95C1F94FD166B5FAE038B82FA3003E2B71235640CA30DE625C2BB53C2618E7CD9688E50B29032261D7F0A69FA7704243264CE7E83707F92DE9D7507C23D5A19526BF26A40C9CFE01D8AF1AC2657E149205D257797E1B7332DEEFA06C345B61A035DC54F3F440D6D98BB1DE0DFD7811C
 DCF9E142D6118703ABCF754B45EBF6E5C4EDCD71750D3891BFFCBFB0C5479788548ECF30FE696B1B0C266D0D9CDCDCBC38BEFDA415235AB35DC971DC261E20D1320FF8DA508AC42507DFB19BF549321FC7FE9777DF49DFCE160C7DB3E4C9E31DCA1D387EC0934BC36D2553367BC0444164CCC7784C8D2391AA7F920FA58C804B63D61FBF6DC5BFC8AA0CF4D0A25317C52C790FDE64E05F20DD216C23C7097AD89853C53A9462019226A340A034304835E30DEC1196E05943704D73DE124A91B35A04203CC570662C1935E3F96594401A93FE04F9A299179E29CEF98669AFD5E5D130349D8883B076653468AB34106F55ED5F89607CD97294263042CBCFF738D087B10E50640BDD32E170D49747E0AC66D08611AC53729FB65A0C66F2A973E2C25DEBE66799F18F97D422E2AEF85DF355CD016E923CB250295C3E3F3EAF2D88DB43437ACCE9FE311660E28955D448C1BA3CCE9EB43E74005CEA5700D9E273C05EF1AA30F9EC26FC3E396F3F57C7CA20596DA31E4A52FA44EC31067DC53270FB645CD01C694AF4243E8697EDA91B448F57B9D6011B70A7B4DCED8FA0FAF567A663B344799EB141409BB0B724688B31C3463AF2F5D9C4A91EC2E7133A3D26253F10F3BF96BE487F8C091EE4F7C570B0150EF495EA2402DC83BD1F4248C21E2B1F3DB1273B108C22ADC4DC1305EF280FC5A32F805E83808B6F7CB0F2DF0770CE5C7A07E957B1A78FD443F39EA69A13B2A136DB49FDFE14259273178920D74B014FBA551D62DC9424C8BDCF751F40027E223F6CBE5A6C50D5A0C42B68E55C7B0548A65D9EA05B615DFB06010AB2F169AA0CA49ECC5EA6AB41916D80DEE5C512E3DF20AC8316211C80966718840CADC70A5353A14FCC36117C26E29157A8C5BF658F37D1165F2BE4936F52CB3E37A50FA60A8E75A5FB7C3F7600ACE1EEB2D39CAE019B7D3CF25E96885CB930368157559B8C1C3971DCFEBAC9E6C4E834A8116DE266CFC95C0D3E5F0F06F94F1FEF6D4126C50BD3A8DD7798669DE1E94DF85105BC92D4AC
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End
 %RBIEndFontSubset
/Helvetica cguidfix
/F1.1/Helvetica renmfont
[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeA { { 1.8008  exp } bind  exec} bind 
def 
/MatrixA [ 0.9642 1.0000 0.8249 ] def 
/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def 
/DecodeLMN [ { 0.9857  mul} bind { 1.0000  mul} bind { 1.3202  mul} bind ] def 
end ] /Cs1 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ 
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 
] def 
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs2 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ { 1.8008  exp } bind { 1.8008  exp } bind { 1.8008  exp } bind ] def 
/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs3 exch/ColorSpace dr pop
%%EndPageSetup
/Cs1 SC
1 sc
q
0 0 413 563 rc
0 0 m
413 0 l
413 563 l
0 563 l
h
f
/Cs2 SC
413 0 0 414 0 84 cm
BI
/Width 1239
/Height 1242
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcGZJJcG'9Qi;R8Jc:6"Jc:6"Jc:6"Jc:6"Jc:6"Jc:6"Jc:6"
Jc:6"Jc:6"Jc:6"Jc:6"Jc:6"P5atNJcGZJP5iDuYPj%NJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/u
Jc1/uJc1/uJc1/uJc1/uJc1/uXo6fLmf&:IP5k"MeGZTKJc()sJc()sJc()sJc()sJc()sJc()sJc()s
Jc()sJc()sJc()sJc()sJc()sJc)YJec#IFo)=^MV#U,en,;qWp%t!MJbjroJbjroJbjroJbjroJbjro
JbjroJbjroJbjroJbjroJbjroJbjroJbjroJbkQ+p&"[brVYpYq#6ueXoIbep&+1Rrqb.?]D-sPJbXfk
JbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfk[eSAJrqcQiqYTj]qu,m\XoGO'
q#9sbq#($drqcEcp%[/5]CpgLJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZg
JbFZg[eA>IqtU*bp\F^`qu#p]q#7Dq[f?.%q#1*fqtp0bqt^-aqtKmZqt9OPo(00XJb"B_Jb"B_Jb"B_
Jb"B_Jb"B_Jb"B_Jb"B_Jb"B_Jb"B_Jb"B_Jb"B_Jb"B_Jb$/<n+6,Bq"=X[r:g'^qtU'aq"k!equ$-c
q#7`%^]3d%qu$-arqcEcrqQBbo(E"Sq"+(IVXT0+Jae6[Jae6[Jae6[Jae6[Jae6[Jae6[Jae6[Jae6[
Jae6[Jae6[Jae6[Jae6[V""BRo()\Lqt0gZp\"FXrqQ9arqcWkp&+gfo)?<%^]4*.q#13iqtpBhqt^-a
qtL!]rq69_qt'^Urpf[Np$\dGJaS*WJaS*WJaS*WJaS*WJaS*WJaS*WJaS*WJaS*WJaS*WJaS*WJaS*W
JaS*WJaT?%o'c8@rpg!Y!V>m_oD%tWp@\1Zq#:*dqYpBhr:U$crk/9Ms82fgrVl`lqtp6hq>U0dp\XX_
o_\7Tnb_hQn,)PPmJcJLlhKc?l*BN(k^hrKk^hrKk^hrKk^hrKk^hrKk^hrKk^hrKk^hrKk^hrKk^hrK
k^hrKk^hrKkd0LDl2KuIlh0WDmJH>KmfDqIrUB^SrpojVqtBp]rqQ9brqlTjq#13k^]2CTq#:9kq#($d
rqcNfrqQKerq??aq"+LTrp]pUqsOINrp9OJq!.P9qrdP4\E/;'J`VIEJ`VIEJ`VIEJ`VIEJ`VIEJ`VIE
J`VIEJ`VIEJ`VIEJ`VIEJ`VIEJ`VIEZfUc?qrdY9qs+1Hq<S+JrpKdSqsaLRrq#pXrqHEerqZ?crqlTj
qu-<h`W+$Zrr2]krquZjqtg3bqtL!\rq-*XqsaURrpKdPrp0RKrosFGp#l#/qr@8,\D`"tJ`21=J`21=
J`21=J`21=J`21=J`21=J`21=J`21=J`21=J`21=J`21=J`21=Zf1]=puD/1qr[e=qrmtB!9sLJqsFCN
rpTaRrpp'[rq-*]qtL*bqtg<hrquQiqu4S7cN!e@q#13iqtpBhrqZQgrqH<`rq-*Yrpg!WrpTjSqs47G
roj@EroX4AroF(=qr7V6p#,i,pti41J_bn5J_bn5J_bn5J_bn5J_bn5J_bn5J_bn5J_bn5J_bn5J_bn5
J_bn5J_bn5J_d?^qqh5-p#,i.ro3q;roF"=!9O+@roj@HqsF:Lrp]pWrq$-]rq69bqtU'arqcWkrquQi
rr1"=dJs"@rr)Wiqtg<frqQKerq??arq-3]rpg!WrpTjRrp9XLroj@EroX4AroF(=ro3q9ptu),rnR2$
h:]s'J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_5P+J_8&rh:_e]rnI>*
qq_8.rnm_5ro*k9!TW2?j8S-=k5OQCkl0lHli-8JmJcSRnG_tWoDA4Xp\ssbqYpBkr;6Hfrm(Pks7lTm
rVl`lqu6Hkq=s^`p&"@XnG_nUmJcDMl2KlFk5OKAj8S$:i;;F2hY>k)g&BXsfCd\\eAp$hdt,u!dt,u!
dt,u!dt,u!dt,u!dt,u!dt,u!dt,u!dt,u!dt,u!dt,u!dt,u!e'$5#eFhAkfCdeqgA]k+h#?./hZ;Zn
rS[\7ro="=roa1Brp0RMrpKdSrp]pWqt0m]rqH<bqtg<hq#1*hcMu;lrr2fnrquZjrqcWhqtL*^rq$-[
rpg!WrpTaMroj@EroO.>qr.P4rndY0rnIG)rn%/#rm^hoqpP&^p!:.nJ^/hlJ^/hlJ^/hlJ^/hlJ^/hl
J^/hlJ^/hlJ^/hlJ^/hlJ^/hlJ^/hlJ^/hlJ^1^Lo$@!UrmCVkrmUbprn%/%!SZ6-gA]n,hYuF3i;Va8
j8S0>kPj]ElMg5Nn,DhUnc&+Yo_\@]p\sseq>U6fr:p6irmCbts7lTjrVl`lqYp<iq#:$ep&"@[nc&%W
n,D\Ql2KoGk5OH@j8S!9hu;I2g]#n*f`'M%eGI_odJhMlchl#bbkoTSb2^UpaFVE`aFVE`aFVE`aFVE`
aFVE`aFVE`aFVE`aFVE`aFVE`aFVE`aFVE`aFVE`aFVFaaPb2/b5TT]bl5l^ci2;jdJhVmeH"/!fDaJ&
g]$"-hu;R5ir8'=k5OTDlMg,KmJcSRnG`%Vp&=[ap\sseqYpBhr;6HlrmCbts82fmrVl`oqu6Hkq=s^`
o`"F\nc&"VmJcJOl2KoGk5OE?i;VX5hYu7.g&BV&ec+(tdf.Vmci25hbl5fbb5TN^aS!RM`S/8]_h#^V
_h#^V_h#^V_h#^V_h#^V_h#^V_h#^V_h#^V_h#^V_h#^V_h#^V_h#^V_h#_W_plX%`V[[Sa8X0Wb5TT]
c2Q&gciMPA!7Ceprn%&"rnIG-rnm_5ro3q=roa:Erp0ROrpTjUqt0m\rqH<brqcWkrquZlrr1=FfDkaI
rr)iorql]krqZQgrqHEarq$-[rp]pUrpKdNrosFEqr7V5rndY0rn.5$rm^qprm:YjrltGbrlP/[rl+lT
rknWLqnW3Grk@X1_7Y?3J\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QHJ\6QH
]Y*^HqnDsBqnW3Jrkn`Rrl+lVrlP)^!6k>drm:Ynrmq)#rn@A.rnm_6roO.Aroj@Irp9XQrp]pXrq-*]
rqHEfrqcWkq#1*hfDjS)q#:9krqucmrqcWhrqHEcqt'gWrp]pTrp0RIroa:Aro!e5rnRM+rn.5#rmC_l
rm(DarlG)Yrl"fQrkSNJrkABErk%s:o!nA%_7"p'J[U-<J[U-<J[U-<J[U-<J[U-<J[U-<J[U-<J[U-<
J[U-<J[U-<J[U-<J[U-<]XILBosk"3rjr*@rk/6ErkJHJrk\TNrl"fU!QW4\a8X6Yc2Q&gdf.bqfDaJ&
g]$(/iVqm:k5OTDlMg2Mn,DhUoDA4[pAXjdq>U6fr;QZlrn%2(s8N#mrVQKkq>U0gp\sjbo)A1Yn,D_R
m/H5JkPjTBiVqa6h>Z+,fDa>"dJhGjbl5caa8X'W_u@IN^](qD]Df>>\,Ni8[JmQ1ZhUj!YeI;lYCWm.
YCWm.YCWm.YCWm.YCWm.YCWm.YCWm.YCWm.YCWm.YCWm.YCWm.YCWm.YIUk0YkYO'Zhq00[f3c8\Gj):
]`,YE^]D<h!5e`Rrl>#Zrlb;erm:Ynrn%/%rnIG0ro!e9roa:Erp0ROrpTjUqt0m]rqHEerqcNirr)`n
fDjS)rr2fnrquZirqQKerq69^rpg!WrpKdNrosFEro3q9rndY-rn.5"rm:YjrlkA_rl4rTrkSNJrk8<A
rj_s8qm-+'ric='poF:lri*3%JZ+-uJZ+-uJZ+-uJZ+-uJZ+-uJZ+-uJZ+-uJZ+-uJZ+-uJZ+-uJZ+-u
JZ+-uJZ,]Lri,dpri>ptriZ7(rilC,rj2U2rjMg:!P>rD]DfPD_#D4M`W"!YbPoiedJhVof)FG'h>Z@3
jSn9?kl0oImJcVSo)A7[o`"Uaq#:*gqu6NgrVlfMs4[MPrqlZnr;6?iq#:!do`"F\nG_nUm/H5JkPjQA
i;VU4gA]_'ec*tqc2Plba8X!U_Z%:K])K8>\,N`5ZMq',Xo>F$X8]*tW;`^lV>d:fU].!nTn/ngTn/ng
Tn/ngTn/ngTn/ngTn/ngTn/ngTn/ngTn/ngTn/ngTn/ngTn/ngTn/o>U&1VaV"gecVuEXoWrB+!Y5YX(
ZMq33[C$"Brj_s?rk8<Hrl+lVrlY5drm:Ynrn%/&rn[S4ro="?roj@HrpB^Srpp'\rq??crqQKhrql]m
qu-NngAfn,qu-Nlrql]jrqQKerq-3]rp]pUrpB^Nroa:Bro*k5rnIG(rmLenrm(Marl4rTrkJHGrji$:
rj;[0riZ7%ri,mprhf[jrhBCcrh'(Zrgj%Ym$kh[JXV.YJXV.YJXV.YJXV.YJXV.YJXV.YJXV.YJXV.Y
JXV.YJXV.YJXV.YJXV.YJXX?BnsfNHqjmVUrh'1_rhKIgrhf[mri,muriQ:*Y5kd*Zi7H5\Gj,>_#D4M
`W"!YbPoieec+2"gA^"/iVqp;kPj`Fm/HJQnG`%Vp&=^bq>U9jr;6Hlrn@D1s82fprVl`oqu6Hkq#:$e
p&"=ZnG_eRli-,IjSn0<hu;=.fDa7ud/M>iaSs*V_>_.I\Gir9ZMq',Xo>@"V>d7hU&L_aTDkA[Rf8`S
Qi<9LPk^IAP5(0OOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`LEOF`M+
OSFt5P5^[BPl@$KR/WNQS,SrWSc58\T`1_cVZEcr!3,t!ric=+rj;[8rk/6Grl+lWrlkAfrmC_rrnIG.
ro!e;roX4ErpKdSrpfmXrqHEerqZQjqu-NngAg+2qu6TnrqucmrqcWhrqHEarpp'YrpKdMroj@Dro*k7
rnRM)rmh"prlkAarl+lPrkABBrj;[1riZ7!rhoakrh07_rg`tVrgEbOrfmDGrf[8Brf?i7rf+4BJW,/=
JW,/=JW,/=JW,/=JW,/=JW,/=JW,/=JW,/=JW,/=JW,/=JW,/=JW,/=JW-popl502rf@&?rfR2Drg!JK
rg<\RrgWnYrh0@fUB%(gVZ*XqXo>U)[JmW6]DfVF_u@aVcMl2ieGe/#g]$(/ir8'=kkj`Gn,DnWo`"R`
p\sseqYU3irn@D1s82fprVQKkq>U0gp\sganG_nUmJc>KkPjQAi;VU4g&BP$df.PkaSs3Y_#CtF\c/u8
YPt['WW&^mUAgeaS,SlUQN!-JPQ$^DO8b1=N;JM3M>i>1LTcG`L4P)1L4P)1L4P)1L4P)1L4P)1L4P)1
L4P)1L4P)1L4P)1L4P)1L4P)1L4P)1L8p"-L]3,/M>iG4N;eh9NrG+=P5^aGQN!<OSH5=R!1s1`rhf[n
riH+'rj)O4rk8<Hrl"fXrlkAgrn%/&rnRM2ro3q?rp'LLrpKdUrq$-^rqHEerqcNirr(RNi;`]Rrr)`j
rqQKdrq-3\rp]pTrp0RHroO.<rn[S-rmq(qrm(Mbrkn`Ork/6<rj)O,ri#gnrhBCargj%VrfmDGrfI,>
rf$i5reLK-re10"qgbbtJU`6#JU`6#JU`6#JU`6#JU`6#JU`6#JU`6#JU`6#JU`6#JU`6#JU`6#JU`6#
JUanRomm$mre(*$reLK/repc9rf@&@rg!SOQN3BOS,T&ZU&LnfX8]7#Z2V63])KME`W!pWc2Q/jec+8$
hu;U6jSn?Al2L)LnG`"Xo`"Uaq#:-er;QZlro!h7s82fpr;6?iq#9scoD\=[n,D_Rl2KiEj8Rs8gA]e)
eGdenbl5W]_#D(I\Gif5YPtU%V>d4gTDk8XR/W?LOT(:>MuJP3L]2u(K)U<"If=cpI/A8oH@^BnH@^Bn
H@^BnH@^BnH@^BnH@^BnH@^BnH@^BnH@^BnH@^BnH@^BnH@^BnH@^CBHMDmeIf=irJGt0"KDpW)M#N;2
NW,%@PEQ!1rg3VQrgj%^rhoapriQ1,rjVm>rk\TPrlY5ermLetrnRM0ro="@rosFKrpTjVrq-3`rqHEg
qu$Hlqu5ORi;`]QrquclrqZQfrq-3]rp]pTrp0RHro=";rndY,rmq(rrlb;^rkn`Jrjr*9riZ7$rhoag
rgs+Xrg!JGrf@&9re^W/rdt-#rdXoprd4Wjrcn<aqf_s]Z?1Y>JTQHbJTQHbJTQHbJTQHbJTQHbJTQHb
JTQHbJTQHbJTQHbJTQHbJTQHbJTQHbX`XPbqf_s_rcnEfrd4WmrdOisre19)reUQ4!KE'=NW,+?Qi<EP
Sc5A_V>dInYl;!.\Gj8B_>_LScMl5jec+;%h>Z@3k5OQCli-APnG`%YpAXgcq>U9jr;QZlro!h:s8N#s
rVl`oqu6Ejq#:$boD\7Ym/H;Lk5O?=hu;C0f)F.tci2#b`r<dQ\c0&:Yl:X$VZ*:gSGnuVPl?dDNrFn7
L&Q`(JGsurHiA<iG5cU_Er0kRE:n.ZDLl\VDLl\VDLl\VDLl\VDLl\VDLl\VDLl\VDLl\VDLl\VDLl\V
DLl\VDLl\VDLl]3DY7rFE;jnWF8g:\GQ)jdHiAKnJ,Y#uL&m*d!/UW5rfI,Brg3VUrh9=eriH+%rj2U9
rk8<KrlY5brmLetrn7;.ro=">roj@LrpTjVrq69arqQKhrql]nqu5ORj8],Xrr)iorql]irqHEcrpp'Y
rpKdNrosFDro!e4rn@A$rmLejrl4rTrk/6<rj)O)rh]Ugrgs+Vrg*PGrf$i6re:?%rdOinrcnEdrcJ-Z
rc%jTqec=KnnYaLJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSB[LJSDQ,
rbD+ArbVRNrbh^Rrc.pYrcJ-_rcnEgrdOiu!JH++K`6c+N;ek:PQ%$MSc5A_W;`jsYl;-2])KPFaSsB^
d/MYrg&Bh,ir8'=kl0uKmf)_To`"O_q#:-hqu6Njro!h:s8N#srVl`oqu6Bip\sjbo)A1Ymf)JMkl0ZB
i;VU4f`'=uci2,e_u@IN\c/o6YPtO#UAgeaRf8QNP5^F>M#N/.JGsrqHN&-fF8g4ZDuOVQD#S2KC&Vf7
BDuMTAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"EDAV"F$Ab'L2B`;`F
CAr&KDuO_TEW1.\GQ)pfIfY(M!.b'$reUQ2rf@&ErgEbXrh]UmriZ7.rj_sBrl4rZrm(Mmrn%/)ro!e8
roa:Grp9XQrq$-]rqHEfrql]mqu,IQj8],Xrr)iorqcWhrqHEarpg!Wrp9XJroX4>rn[S-rmq(qrm(Ma
rk\TIrjMg0riH*prh'1[rg!JErf-o4rdk'!rd=]hrcS3\rbqdQrbMLHrb)4@qd]D0Y@)ohJRF%:JRF%:
JRF%:JRF%:JRF%:JRF%:JRF%:JRF%:JRF%:JRF%:JRF%:JRF%:X^Lp4raPb8rau.DrbMLMrbqdUrcJ-`
!I8qjH2`<mKDpT(MuJk<Pl@*MT`1_cWW'1%[/R]:_Z%ORbPoogeGe/#hu;U6jo4NDli-APo)A:\pAXjd
qYpEirS[_9s8N#sr;QTmqYp9hp\sganG_nUm/H5Jk5O?=h#?%,ec*knbPoN\^AbbD[/R0+WW&XkS,SfS
P5^I?MZ/;.J,XlqGlDgaErL"VCAqrHBDuH@A,]p9@/aO.?M.U9>_-.2>_-.2>_-.2>_-.2>_-.2>_-.2
>_-.2>_-.2>_-.2>_-.2>_-.2>_-.2>_-.g>khV"?N+=2@/aU6A,^*>BDuWED>nGPEW1+^GBX%2rd4Wp
re(3+rf@&@rg*PSrh07friZ7+rji$Drkn`Wrm:Ymrn%/*ro!e:rosFJrpKdUrq$-_rqQKhrquZli;_j;
rr2oprql]krqQKerq-3ZrpKdOroa:Arnm_/rn.5!rltGbrl"fLrji$5ri,mnrh'1Wrg!JDreUQ.rdaup
rd"Kcrc%jSrbMLHrau.>ra>_4ra,S/r`f/$oi\n/JQRJ*JQRJ*JQRJ*JQRJ*JQRJ*JQRJ*JQRJ*JQRJ*
JQRJ*JQRJ*JQRJ*JQRJ*JQTQenlb`kr`f8+ra5Y5raYq>rb2:Grbh^T!HW;^F8gC_IK"crL&R#0NrG:B
S,T#YV#IIpYPu$1^AbtJa8XB`dJh_rh#?10j8S9AlMg5NnG`"Xp&=acq>U9grS[_9s8Murr;QTmqYp9h
pAX[_nG_kTlMfrFjSn*:g&BS%dJh;fa8WpS\c0#9YPtEuU]-h`Pl?jFN;eP1K)U5uGQ)aaE;j_RCAqiE
@fBg8?iF=0>Q.e)=T2D$<q98#<.S#"<.S#"<.S#"<.S#"<.S#"<.S#"<.S#"<.S#"<.S#"<.S#"<.S#"
<.S#"<.S#W<:<ia=8l>$>Q.t.?iFL5AH$0>C&VuNDf5VorcA'`rd4WpreLK1rfI,GrgNh[ri,murj2U;
rkSNPrltGhrm^r%rn[S5roa:Frp9XRrpp'\rqHEerqlTki;_j;rr)iorql]krqHEbrpp'WrpB^MroO.=
rndY,rmq(qrlP/ZrkSNDrjDa-rhTOergNhLrf@&8re(3#rd+Qdrc8!Urb2:Drac"9ra5Y0r`T5&r`8en
WD\:FJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sW`&gpqc*Pqr`B)$
r`];*ra,S4raYq>rb;IND#eGPEW11]H2`9lK`6c+NrG=CR/W`WVZ*UpZ2V?6^Ac(MbPofdeGe2$h>ZC4
kPj`Fm/HJQnc&1[p\sseqYU6jro=%=s8Murr;QTmq>U-fp&=O]n,D_Rl2KcCir7d5fDa;!ci2#b`W!XO
[f3T3X8\glSc4uTOT(7=L]2i'IK"HiEW0nUC]7uGAc?*:?N+4,=T2D$<;TPi:omHD:Ou;m:Ou;m:Ou;m
:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:T%"f;#X>k;Z9Vo<W6)!=T2M'?iFL5AH$3B
Bk[Q]rbqdXrc\9frdk'%reg]=rg*PSrh]Umric=1rk&0IrlY5brmUl!rn@A/roO.Brp0RPrpg![rqHEe
rqcNjrr1sXj8],WqtpBgrq??`rpg!Urp9XJro=":rnRM(rmUkkrl4rTrk/6;riuI$rh9=^rg!JCreg]-
rd=]krcJ-XrbVRHraPk8ra,S,r`K/"qbm;fr_NMgnkHVfJP:VgJP:VgJP:VgJP:VgJP:VgJP:VgJP:Vg
JP:VgJP:VgJP:VgJP:VgJP:VgJP<CDnkK!Wr_WSkqc*Prr`];,ra>_:!G5pDB)ZQEE;jqXGlE3lJc:H(
NrG4@RJrr[VZ*at[f3l;_>_OTbPolffDaM'i;Vj;k5O]Gn,DkVo`"Uaq#:-erVlfVs5X.YrVQKkq#:!d
o`"C[mJcGNkl0WAi;VL1ec+"rbl5T\_>_(GZMq$+VuE:eRf8NMN;e\5Jc9upGQ)[_D#S2KAc?*:?N+1.
=T2A#;uTYn;#X5h9^,3^8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc
8qBUC9(GXP9`%Q`:]=5j;uTer=T2M'?N+C7ARtjQrb;@Mrc.p]rd=]pre:?3rf[8Jrh07driH+,rji$D
rl>#\rm:Yrrn7;-ro=">rp'LNrp]pZrqHEerqcNjrr1sXj8],WqtpBfrq??`rpg!Trp'LGro*k6rn@A$
rmC_grl"fPrjr*6riQ0rrgj%VrfR2:re:?$rcnEcrc%jOrb2:Ara5Y1r`T5$r`&kor_WSir_32]kt&NY
JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOb8]JOd7@lq%+Iqb6u`r_NMj
r`&kur`T5*ra,\7@/sa8BDu`HDuOnYHiAKnK`6r0O8bLFT)PJ`X8]L*\,O/A`r=*Zci2Jof`'b,j8S0>
lMg5Nn,DqXp\sseqYU6jro=%=s8Muoqu6Bip&=R^nc%nSlMfrFi;VU4g&BJ"d/M2e_Z%=L\Gic4XT#!o
Rf8ZQOT((8K`6H"G5cR^DuOGLB)Z6<>lIq+=8Pnp;#X2g9E%N^8H),V7Y+$[7Y+$[7Y+$[7Y+$[7Y+$[
7Y+$[7Y+$[7Y+$[7Y+$[7Y+$[7Y+$[7Y+$[7Y+%)7fGpW8H)3[9)_Tb:]=5j<;ons=oMb/@:9.Erac"C
rb_XTrcnEhrdk'*rf-oArgs+`ri,n&rjMg>rl"fVrm(Mnrn.5*ro3q=rosFMrpTjWrqHEerqcNjrr1sX
j8],WqtpBfrq69^rp]pRrp'LFro!e4rn.4urm1Scrk\TIrjVm1ri?$mrgEbNrf6u4re(2trcS3\rb_XH
raYq7r`];(r`/qpr_WSgqb-fWr^WhSJOP,YJOP,YJOP,YJOP,YJOP,YJOP,YJOP,YJOP,YJOP,YJOP,Y
JOP,YJOP,YJOQA'r^QlWr^d#[r_3;cr_WSmr`/r"r`oP2?3"=2A,^0@C]8>QGQ)pfJGtB(MuJq>SGo2\
W;a($[Jmi<_u@[TcMl>mfDaS)iVqp;kl1#Ln,DnWpAXgcqYU3iro=%=s8Murqu6Hkp\sgao)A+Wli-2K
jo43;h>Z%*d/M>iaSs$T^&GJ>Y5YI#T`1>XPl?[AL&QZ&HiA-dErKnSAc?0<?N+(+=8l1u;#X8i9`@W_
8H)-V7eK0T6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.V/6hNkH
7JfRR8,c-[9`@ie;>sMn=8lD)?!RG9raGe=rb;@Mrc\9drdXp%reg]<rgWnYrhob!rj;[;rkn`TrltGk
rmq)(ro*k;roj@KrpKdVrq??crqcNirr1sXj8],WrqcWirqHEarq$-Yrp9XLroO.;rn[S*rm:YirlG)T
rk8<=riH*urh07Wrf[8=re(3#rd"K`rbqdNrac";ra#M*r`9"rr_WShr_*5]r^ZrWr^?*?\3ba5JO4oS
JO4oSJO4oSJO4oSJO4oSJO4oSJO4oSJO4oSJO4oSJO4oSJO4oSJO4oS[R0=JqaLKRr^d#\r_3;er_`Yp
r`K8,>QA%.@/ag<C&W#LFT-L`If>*$MZ/_:RJrcVV>dXsZMqH7_Z%ORbPorhec+>&iVqp;kl0uKmf)bU
pAXgcq>:*hro=%=s8MurqYp<ip\sgao)A+WlMg&IjSn'9h#>n(d/M;ha8WjQ]`,;;X8]$rT)P#SOoC7;
KDpE#GlD^^DZ4ALA,]p9>lIh(<W5nq:]=)f9)_B\8,c!W7/fR$6InGR6%M=Q6%M=Q6%M=Q6%M=Q6%M=Q
6%M=Q6%M=Q6%M=Q6%M=Q6%M=Q6%M=Q6%M=Q6.\EJ6N0@L7/f[T8H)6\9`@ie;>sPo=TM`2!*fG0ral(B
rb_XUrc\9hre:?.rfI,Irgj%ariZ7+rjr*Frl"fZrmLerrn@A1roF(Brp9XOrpg!]rqHEfqu$Hmj8\0>
rr)imrqZQfrq-3\rpTjOrosFCrnm_1rmq(qrltG^rkJHFrj;[*rhoaerfmDEreg],rdOijrc%jRrb)4=
ra5Y/r`B)!r_`Yir_3;_r^d#Yr^H]Od6cDLJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO%gPc9hCqr^?`Tr^d#\r_3;er_`Yor`B2)=o_b*?N+L7BDucIF8g@^I/\fuL]3A6
Qi<NSV#IOrZMqE6_>_CPbPorhec+;%i;Va8kPjfHmJcYTpAXgcq>:*hro=%=s8MurqYp<ip\sd`o)A+W
lMg&IjSn$8g]#e'ci2/f`r<^O])K&8WrAmpSc4lQOoC4:Jc:)sGQ)R\D>n2I@K'X5>Q.\&<;obo:B!rd
8cD6Z7fGgQ6fUMO5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22>
5i>!+6iKLQ7K,gV8H)9]:]=2i;uTi!=]k`-ra,S6ral(Erc8!\rd4WsreCE4rg*PPrhKIpriuI5rk\TP
rlY5frm^r#ro!e8roa:HrpB^Trq69arqZHhrr1sXj8],WrqcWirqHE`rpp'Vrp'LIroF(8rnIG'rm1Sf
rl4rNrji$7ri,mnrg`tOrfI,8rdk&src\9[rb_XIraGe5r`fA&r`&knr_<Abr^m)Zr^QlTqa9^:pd)h`
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO%1>i'R<.r^?`Sr^ZrY
r_*5cr_NMkr`9,'=TDV(?N+I6Ac?KEEW1(ZHiAZsLAm54QN!?PUAh:oZ2V94_>_CPb5TffeGe/#hu;U6
k5O]GmJcYTp&=[aq>:*hro=%=s8MurqYp<ip\sd`o)A(Vl2KlFj8Rp7g]#e'ci2/f`W!RM\c/r7WW&an
SGn`OOT((8Jc:)sG5cI[D>n2I@K'X5>Q.\&<;o_n:&[fb8cD6Z7fGgQ6gR.O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22>5i>!+6iKLQ7K,gV8H)9]:B"&g;Z9_u=]k`-
ra,S6ral(Erc.pZrd4WsreCE3rg*PPrhBCnric=1rkJHMrlY5frm^r#rnm_6roX4FrpB^Trq69arqZHh
rr1sXj8],WrqcWirqHE`rpp'VrosFFro="6rn@A%rm1Sfrl+lMrji$6ri,mnrg`tOrfI,8rdauqrcS3Y
rbVRHra>_3r`];%r`&knr_<Abr^m)Zr^QlTqa9g=\3PU1JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cO[Qs:Jqa:?Nr^HfVr^d#]r_EGgr_i_s!EiP*=oM_+A,^'=CAr5PFT-Uc
K)UN(NW,7CRf9&\XT#F&\,O,@_Z%[Vd/MMng&Bn.iVr!=lMg2Mnc&4\pAXmbr;Q]Us5X.YrVlZmq>U-f
oD\=[mf)JMkPjN@h>Z.-ec*nobl5T\^&GSAZMpj&V>d"aPQ$[CM#Mr(I/\9fDuOSPBDu<<?N+.-<rQ(t
;#X2g9E%N^8,c!W7/K@E6Mj'Y5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_22/5jq&:6iKLQ7K,gV8H)9]:B"&g;Z9_u=]k`-ra#M5ral(Drc.pZrd+QqreCE3rg!JNrhBCn
ric=1rkABKrlP/drmUl"rnm_6roX4FrpB^Trq69arqZHhrr1sXj8],WrqcWirqHE`rpp'VrosFFro="6
rn@A%rm1Sfrl+lMrji$6ri,mnrg`tNrf6u5rdXoprcS3YrbVRHra>_3r`];%r`&knr_<Abr^m)Zr^QlT
qa:$CZ9Wt+JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO[Qs:Jqa:?N
r^HfVr^d#]r_EGgr_i_s!EiP*=oM_+A,^'=CAr5PFT-UcK)UN(NW,4BRJroZXT#F&\,O,@_Z%[Vd/MMn
g&Bn.iVr!=lMg2Mnc&4\pAXmbr;Q]Us5X.YrVlZmq>U-foD\=[mf)JMkPjN@h>Z.-ec*nobl5T\^&GSA
ZMpj&V>d"aP5^L@L]2f&I/\9fDuOSPBDu<<?N+.-<rQ(t;#X2g9E%N^8,c!W7/K@H6E`Y*5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5cm<H6Mj.L7/fXS8,c'Y9E%]c:]=8k
<rlH,!*T;,raYq=rbDFPrcJ-crdt-(rf-oBrgEbZriH+&rjVm@rkeZVrm:Ynrn7;.ro*k=rp'LMrpg!\
rq??equ$Hmj8\0>rr)imrqZQfrq$-[rpKdMroa:@rn[S-rmh"orlkA\rk8<Arj)O&rh]Uarf[8@reLK&
rd=]frbqdPrb)4<ra,S-r`9"tr_WSgr_*5^r^ZrWr^?WNpd2/LJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$>&r^$EJqa:?Nr^HfVr^d#]r_EGgr_i_s!EiP*=oM_+A,^'=
CAr5PFT-UcK)UN(NW,4BRJroZXT#F&\,O,@_Z%[Vd/MMng&Bn.iVr!=lMg2Mnc&4\pAXmbr;Q]Us5X.Y
rVlZmq>U-foD\=[mf)JMkPjN@h>Z.-ec*nobl5T\^&GSAZMpj&V>d"aP5^L@L]2f&I/\9fDuOSPBDu<<
?N+.-<rQ(t;#X2g9E%N^8,c!W7/K@H6E`Y*5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5cR*H6Mj.L7/fXS8,c'Y9E%]c:]=8k<rlH,!*T;,raYq=rbDFPrcJ-crdt-(rf-oB
rgEbZriH+&rjVm@rkeZVrm:Ynrn7;.ro*k=rp'LMrpg!\rq??equ$Hmj8\0>rr)imrqZQfrq$-[rpKdM
roa:@rn[S-rmh"orlkA\rk8<Arj)O&rh]Uarf[8@reLK&rd=]frbqdPrb)4<ra,S-r`9"tr_WSgr_*5^
r^ZrWr^?WNr^*SLJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$5#
qa10Ir^?`Sr^ZrYr_*5cr_NMkr`9,'=TDV(?2e@5Ac?HDEW1(ZHN&NqLAm23Q2[3NU&M.mYPu$1^Ac"K
ao9Zde,J&"hu;U6k5OZFmJcYTp&=[aq>:*hro=%Cs82fprVlZmq>U-foD\=[mf)JMkPjN@h>Z.-ec*no
bl5T\^&GSAZMpj&V>d"aP5^L@L]2f&I/\9fDuOSPBDu<<?N+.-<rQ(t;#X2g9E%N^8,c!W7/K@N6E*5$
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5cR*H62j4M6iKLQ7K,gV
8H)9]:B"&g;Z9_u=]k`-ra#M5ral(Drc.pZrd+QqreCE3rg!JNrh9=mric=1rkABKrlP/drmUl"rnm_6
roX4FrpB^Trq69arqZHhrr1sXl2UY[rr)imrqZQfrq$-[rpKdMroa:@rn[S-rmh"orlkA\rk8<Arj)O&
rh]Uarf[8@reLK&rd=]frbqdPrb)4<ra,S-r`9"tr_WSgr_*5^r^ZrWr^?WNr^*SLJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOr^?`Sr^ZrYr_*5cr_NMkr`9,'
=TDV(?2e@5Ac?HDEW1(ZHN&NqLAm23Q2[3NU&M.mYPu$1^Ac"Kao9Zde,J&"hu;U6k5OZFmJcYTp&=[a
q>:*hrT!qBs82fprVlZmq>U-foD\=[mf)JMkPjN@h>Z.-ec*nobl5T\^&GSAZMpj&V>d"aP5^L@L]2f&
I/\9fDuOSPBDu<<?N+.-<rQ(t;#X2g9E%N^8,c!W7/K@N6E*5$5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@O7/fXS8,c'Y9)_Tb:]=8k<rlH,!*T;,raYq=rbDFP
rcJ-crdt-(rf-oBrgEbZriH+&rjVm@rkeZVrm:Ynrn7;.ro*k=rp'LMrpg!\rq??drql]mrr(mWl2UY[
rquclrqZQfrpp'YrpKdLroX4>rn[S-rmh"orlkA\rk8<Arj)O&rh]Uarf[8@reLK&rd=]frbqdPrau.;
ra,S-r`/qrr_WSgr_*5^r^ZrWr^?NJWBc#"JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6ZQr^HfVr^d#\r_EGgr_i_s!EiP*=oM_+A,^'=CAr5PFT-UcJc:B&N;f+A
RJroZXT#F&[f4#?_Z%[Vd/MMng&Bn.iVr!=lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U-fo)A1Y
mf)GLk5OB>h>Z.-ec*knbPoK[^&GSAZMpj&V>d"aP5^L@L]2f&I/\9fDZ4GNB)Z3;?N+.-<W5nq:]=&e
9E%N^8,bsV6hj!I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6iKLQ7K,gV8H)6\:B"&g;Z9_u=]k`-ra#M4ral(Drc%jXrd+Qpre:?1rg!JNrh9=mric=0rkABK
rlP/drmUl"rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOO$LcNX?_>%JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$_1
a?P;BJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5c6l75K#g<5_21O5_21O5_21O5_21O5_21O5_21O5_22I5aXd*5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO$+uQp8MSJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOcp3s_Rm;NiJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22,5i=lD
52\ZP5_21O5_21O5_21O5_21O5_21O5_21O5_21O5hnW_5JfVB5Gpbt5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO_Ecg>XZkc0
fg(*RJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO&Ndg-;]'j$0b5JO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5f,eN5N"`T4l\`m
5M8;Q5_21O5_21O5_21O5_21O5_21O5_21O5_22d5j:Mk51DaU53tM<5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO%1>ks+W#
YW_>:lp'JpJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOmQg#$mlms=losc#\Nk^2JO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22G
5it<%53tGO4S:l%53tMt5_21O5_21O5_21O5_21O5_21O5_21O5_21O5kdP+5Oq#)4iKPV4m>/s5JKI7
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOc9Uh_mlp2'loa;ir]L0Alob&+ks"Z&kWj\aJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO&rpmm$8)mlg#"j#d6&r]BI/pc[k*nislSJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5h&'c5OUf/4n:`(46&Bm47t`,4mtT$
5Oh!i5_21O5_21O5_21O5_21O5_21O5_21O5_23!5jU`(54q)04RYAl3q>B*4RtZ(53tMT5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO%gPlp(/,nicY.ofM_*juMunofMh/pc\(0lp(,-JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
!'om8ofhq0ofVn/niGnnniHG*ofW"4mlp)&b<UVDJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22P5k7/.557;94S:f/3q><"3:Am&
3q>B-4SV).54Ur15_21O5_21O5_21O5_21O5_21O5_21O5_21O5QF(?5OUf24nq/447tZ*3U\rr3VYZ+
48:r54mtT*5Kc<C5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOh*C<kpce73pcSF8ofDk.of2q0r]'R0r]'m9ni6D)pcA(0q`OO7
nilM,qETTsJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOL-YZ$nNZe4nicb1q`FI3pc8",r\sg9of)k0r\sC-
pc8+1ofN%5of_k0mm#2bJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5i=or5Oq#54nq/:48:l33VYT)2sE6n2u#B-3VYZ448:r5
4nV#-5PdWr5_21O5_21O5_21O5_21O5_21O5_21O5`%c%5PID5557;94Sq583qt`13:]#m2YB$(3;>N/
3r;#64SV)454:_`5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO&-Yniue2pc\:4q`F[9pc842pc%k(ju)fiq`"1-r]0a7pcJ@8
of_k0pcnU?JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO#&Wq*4^?ofi.6ofW+5q`=L4q`+@0oetqioeu\+
of2q2pcA13q`OO7nilh5d6N7JJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22_5jpr154q)94Sq5;3qt`43;YZ02YArf2#&s'2Z#H1
3;Y`23r;#64SV)454q/=5_21O5_21O5_21O5_21O5_21O5_21O5_21]5k@5=5P7554o7A=48V)63Vtf5
2u#<(2<-Og2>B*,2u>T33VYZ448:r54nV#35L_rL5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOk!8B"pceI9pcSF8q`=^:pc/73
pbr",q_\:.r\X:(pbMCrpb_k*pbr+1q`+I5q`=L6q`Oa=ofhn1!C&f"5_D=Q5_21O5_21O5_21O5_21O
5_21O5`\2%5Q*hA557;94Sq5;3rV/73;tl32Z#B/2#]<12"`["1@d6r2#B0*2Z>Z43;Y`53qtf64Sq;7
54:_i5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO&?_ofr+5pc\L:pcJ@6q`4X8q`"C1q_e7-pbVIrpbD=ppbVe(q_e7/q`"L6
q`4O7q`FR8pc\C9oKN@@5Cl(P5_21O5_21O5_21O5_21O5_21O5_21]5kR>B5!J^)pc\L:pcJ@6q`4X8
q`"C1q_e7-pbVIrpbD=ppbVe(q_e7/q`"L6q`4O7q`FR8pc\C9nithnJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5j:Q)5PRG8
4oRS@48V)93Vtf82u>N12>]6-1]&s)1#Ob_1&Ea$1]'$.2>]<22u>T33W;):48:r84nV#55Q!`s5__OT
5_21O5_21O5_21O5_21O5_21O5a"D'563r3qEFR8r]L'>q`=U7q`+R6q_n=/q_\1+q_J%'i%Y$_q_Iq&
q_\:0q_nF4q`+I5r]9p<pcSF:ofhq2h*?NVJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22b5kRA755RM<4Sq5>3r:r:3;YZ62Z#B2
2#B*.1A`g'0_d<`0)I=!0`*U%1A`m)2#]B32Z#H43;Y`53r;#94Sq;755IMA5Cl(S5_21O5_21O5_21O
5_21O5_21O5_21`5kRA>55IJ?4nq/:48q;<3W;#82uY`42?#H01]B0,1&E["0BOna0DdI#1&Ea'1]'$.
2?#N22uYf63Vtl748V/;4nV#35M\SU5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOks5#.pceI9q`OX8r]9p:r]'d6r\jX2r\XL.
r\FI-pb;Ruq_%"_pb)Fsq_8"(q_J.,q_\:0r\jX4r]'d8q`=^<pcSO=nim":r',`tL-U;TJO"cOJO"cO
JO"cOJO"cOJO"cOP!Je,q*"dBpc\L:pcJI9q`4X8q`"L4q_e@0q_S4,r\=1%q_.h!jt6?\q_.h#r\=:*
r\OF.r\a[5q`"L6q`4O7r]Bm;r]Tg9pcmS"JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5jpu/5PRG;4o7A@48V)<3Vtf82u>N4
2?#H01]B0/1&E[(0DdC!/c.*]/,Lmp/c.0t0E*[)1&Ea*1]B612?#N22uYf63W;):48V/84nq5>5P@<m
5`@sZ5_21O5_21O5_21O5_21O5_21O5aXh-5P[JC557;<4T7G>3rV/:3;tl62Z>T52#B*.1B'$*0`Ea&
0)I6t/ESJ[/Gh$r0)I=$0`Eg(1B'*/2#]B32Z#H43;Y`83r;#94SV)754Uqu5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO&Zh
nj!"8pc\L:q`Fd<q`4X8r\sg7q_e@0r\OO/r\=:(r\+7'q^qduq^_Fklm_]Zq^_Xsq^qe"r\+.&r\=C-
q_S4.q_nF4r]'d8r]9p<q`OX:pc\[Bp-4*nN'MqZJO"cOJO"cOJO"cOJO"cOJO"cOQpC4,q`Y$D4o.>=
4Sq5>3r:r:3;tl92Z#B22#]<11B'$*0`Ea)0)I7"/Ggsm.dSVZ.f1aq/Gh$u0)dO$0`Eg+1A`m,2#B31
2uYf63W;):48V/84nq565N>"[5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOmm-P1pceR<pcSO;r]9p:r]'d6r\jX1r\OO/r\=C+
q_.q$r[n+#q^_OnpaPGUq^MClq^_Xsr[n+%q_.q&r\=C-r\OO1q_e@2r\sg9r]0j:q`F[;q`X[;!Br^B
5Cl(Y5_21O5_21O5_21O5_21O5_21O5_21f5kRA:4omf0rB9p<r]C*?q`4X8q`"L4q_\:.r\FI-r\44&
r\"1%r[dpsq^V@ikpZEXq^VInr[e%#r\"($r\4=+r\FI/r\XL0r\ja7r]'m;q`=U9q`Oa=ofi.8j$8/\
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_22k5kRA:557;<4T7G>3rV/=3;tl62Z>T52#]<11B'$-0`Ea)0)dI%/Ggss.fLml./PCY
-MStc./k[p.f1aq/H.7#0)dO'0`Eg+1B'*,2#]B02uYf93Vtl:48V/;4nh,@5!Ja+JO#/ZJO"cOJO"cO
JO"cOJO"cOJO"cOJO#\iofr48r&t!Aq`Oj>q`=^:r]'m9q_nF2r\XU1r\FI-r\4=)r\"1%r[dpsr[Rmr
paH"elmDKTq^DFmr[Rdqr[e%#r\"1'r\4=+r\FI/q_\:0q`"L6r]0j:r]C!>q`XU9pcme(JO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5k7255PRG>4o7A@48V)<3W;#;2uY`42?#H31]B0/1&`m+0)dI"/H.1!.fLmr./PCk-MSnR,l8nb
-Mo1i./k[p.fLst/H.7#0)dO$0`Eg+1]B612>]<22uYf93W;):48qA;4o.>C5!JX(JO#8]JO"cOJO"cO
JO"cOJO"cOJO"cOJO#\iofr48r&k$Cq`Oj>q`=^:r]'m9r\jX2r\XU1r\FI-r\4=(r[n!ur[[str[Igp
q^;@ipa,8Pq^)+dq^;@kr[Igrr[[t!r[n+%r\+.&r\=C.r\XU3q_nF4r]'m;r]9p<r]Ks=pce@8k!4J_
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_22k5kmS=55RM?4Sq5>3r:r:3;tl92Z>T52#]<11B'$-0`Ea)0)dI"/,h$t.K1ap-i57i
-28bP,Prb`-2o7g-iPOn.K1gr/,h+!/cIC%0E*[)1&`s-1]B612?#N52uYf93Vtl:48V/84oISB557?n
5`\0]5_21O5_21O5_21O5_21O5_21O5at%65PRG>4TRZ-rB0s=r]9p:r]'m9r\ja5r\XU1r\FI-r\4=)
r\"1%q^_Xqr[Igpr[7Rir[%=blm)BQq^)4gq^;@kr[Igrr[[t!r[n+%r\+7)r\=C-r\OO1r\a[5r\sg9
r]0j:r]C!>pc\C9pcmn+JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5k7285PmY>4o7A@48V)<3W;#;2uY`72?#H31]B0/1&`m+
0E*R&/H.1!.fLmr./PCk-N5=j,l8h`,4ZoM,5WVa,lT+e-N5Cl./k[p.fLst/H.:$0E*[)1&`s-1]B61
2?#N52uYf93Vtl:48V/;4oISB557?n5`\0]5_21O5_21O5_21O5_21O5_21O5at%65PmY>4TRZ-rB1'@
q`=^:r]'m9r\ja5r\XU1r\FI-r\4=)r[n+#r[[str[Igpq^;@ir[%Ohq]kt^nfdZMq]l(cr[%Fgr[7[n
r[Igrr[[t!r\"1'r\4=+r\FI/r\XU3r\ja7r]'m;q`=^<q`Oa=pceI;k!4J_JO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22q5k7/:
55RM<4T7GA3rV/=3;tl92Z>T52#]<11B'$-0`Ea)0)dF$/,h$t.K1ap-iPIl-2o1e,Q8na+o!2Z+9!D^
+8$cU+o<J_,Q8tf-2o7j-iPOn.K1gr/,h+!/cIC%0`Eg+1B'*/2?#N22uYf93W;):48V/;4TI\D54q-k
5a"B`5_21O5_21O5_21O5_21O5_21O5bUI65PmYA4o@G@4T7GA3rV/=3;tl92Z>T52#]<11B'$-0`Ea)
0)dF$/,h$t.K1ap-iPIl-2o1e,Q8na+o!2Z+9!D^+8$cU+o<J_,Q8tf-2o7j-iPOn.K1gr/,h+!/cIC%
0`Eg+1B'*/2?#N22uYf93W;):48V/;4o7G95NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOpd"L:pce[?pcSO;r]9p:r]'m9
r\ja5r\XU1r\=C+r\+7'r[n+"r[Rmrr[@anr[.UjrZqIfq]c"_q]PPRq]>MSq]Pk]q]c"arZqIhr[.Ul
r[@apr[Rmur[n+%r\+7)r\=C.r\XU3r\ja7r]'m;q`=^<q`Oa=!'^<Eofn!mP!FR`JO"cOJO"cOJO"cO
JO"cOJO"cOTg898pce[?q)eX>r]C*?q`4X8r\sg7r\a[3r\OO.r\4=)r\"1%r[[str[Igpr[7[lr[%Oh
rZh:arZV.]ocO&Pp`KAUrZV._rZhCfr[%Ojr[7[nr[Igrr[e%#r\"1'r\4=+r\OO1r\a[5r\sg9r]0j:
r]C!>q`Xg?ofq\+JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5kmV;5PRGA4o7A=48q;?3W;#;2uY`72?#H31]B0/1&`j*0)dI%
/H.-u.K1ap-iPIl-2o1h,Q8nd+oWV]+8[,G*W$oT+9!D^+oW\_,Q9"g-N5Cl./k[p/,h+!/cIC%0E*[)
1B'*/2#B312uYf93W;):48qA>4TI\A557?n5a"B`5_21O5_21O5_21O5_21O5_21O5bUI95PRGA4o7>B
4$3C&r]:$=r]'m9r\ja5r\XU1r\FI-r\+7'r[n+#r[Rmrr[@anr[.UjrZqIfrZ_=brZM([q]>)Eq]>VV
rZM1`rZ_4ar[%Ojr[7[nr[Igsr[e%#r\"1'r\4=,r\OO1q_nF4r]'m;r]9p<r]L'@pceI;ks0ebJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_22q5kmS=55RM?4T7G>3rV/=3;tl92Z>T52#]901&`m+0E*R&/H.1!.K1ap-iPFk,lT%f,5rb_
+T<J^*r$cQ*<$oV*<$oP*;^cU*r@&Y+T<P],Q8tf-N5Cl./k^q/,h+!/cIC%0`Eg+1B'-02?#N52uYf9
3W;):48qA>4TI\A54q-k5a=Tc5_21O5_21O5_21O5_21O5_21O5bUI<5PRG>4o7>B4$*F(q`=^:r]'m9
r\ja5r\XU0r\=C+r\+7&r[e%!r[Igpr[7[krZqIfrZ_=bq]Pk[rZ:hTq],SSrZ(nVp`0/OrZ:qYrZM1`
q]l(cr[.Ulr[@aqr[[t!r[n+%r\4=+r\FI0r\a[5r\sg9r]0s=q`Fd>q`X^<ofqe.JO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5kmV>5PmY>4o7A@48q;?3Vtf82Z>T52#]<11B'!,0E*U'/H.1!.fLjq-iPIl,lT%f,5rbb+T!8[*r[2W
*;(9J)Z(KK*<$uX*r@&Y+T!A^,Q9"g-N5Cl.K1gr/,h."0)dO'1&`s-1]B612Z#H43;tr;3rV5<4T7JD
55%285Cl(b5_21O5_21O5_21O5_21O5_21O5_21o5kmS@557;<497N*!'C0@r]0j8r\ja5r\XU1r\FI,
r\+7'r[e%!r[Rmqr[7[lrZqIfrZ_=brZM([rZ;%Zq],8Jq\o>Np`08RrZ:qYrZM(^rZhCgr[.Ulr[Igr
r[[t"r\"1'r\=C-r\OO1r\jX4r]'m;r]:$?q`Oj@ofi.8lp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22q5kmS@557;?4Sq5>
3rV/=3;tl92Z>T52#]901&`m+0)dI%/,h$t.K1^o-N5=j,lT"e+oWV`+9!>Y*W@&U)u(?H)>G-I)u^iV
*W$oW+9!D^+oW\b,lT+h-N5Fm.K1gr/H.7#0)dR(1&`s-2#]B32Z>Z73;tr83rV5?4T.DD4[&R(pcj<p
PsBmcJO"cOJO"cOJO"cOJO"cOJO"cOTg8B;q`ad<r]L*?!'C0@r]0s;r\sg7r\a[3r\FI-r\4=(r[n+"
r[Rmrr[7[lr[%OhrZ_=brZM1^rZ:qWrZ(eSp_roFp_s#KrZ(nXq]>_YrZM1`rZ_=er[%Ojr[@apr[Rmu
r[n+%r\4=+r\FI0r\a[5r\sg9r]0j:r]C*Aq`X^<pcn+1JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5kmV>5PmY>4oRSC48q;?
3W;#82uY]62#]<11B'$-0E*U'/H.1!.K1ap-N5=j,lT"e+oWV`+9!>\*W@&U)u^cN)=eXA)>b?L)u^iV
*W@,Z+9!D^+oW_c,lT+h-iPOn.K1js/H.:$0E*^*1B'*/2#]E42uYf93Vtl:48V,?4TR]/pceI;JO#Jc
JO"cOJO"cOJO"cOJO"cOJO"cOJO#nopcnX>pc\U=r]:-A3WM5?3W;#82uY]62#]<11B'$-0E*U'/H.1!
.K1ap-N5=j,lT"e+oWV`+9!>\*W@&U)u^cN)=eXA)>b?L)u^iV*W@,Z+9!D^+oW_c,lT+h-iPOn.K1js
/H.:$0E*^*1B'*/2#]E42uYf93Vtl:48V/>4nq595O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOpd"^@pceR<q`Oj>r]:$=
r]'m9r\ja5r\XU1r\=C+r\+7&r[e$ur[Igor[.UjrZhCdrZV7`rZ;%ZrZ(eSrYkYOp_`cBq\]2Jq\oGQ
q],SUq]Ge[rZ_=drZqIir[7[nr[[t!r[n+&r\4=,r\OO1r\a[5r\sg9r]0s=r]C!>!'U6Cq`ad>JO#Jc
JO"cOJO"cOJO"cOJO"cOJO"cOJO#noq`jj>q`Xg=r]:-A3WM5?3W;#;2uY`72?#H31]B-.0`Ea)/cI=#
.fLmr-iPIl-2o.g,5rbb+T<G]*W@&U)u^cQ)>G'D(],'H)>b?O)uCWS*W$rX+T<Sa,Q8tf-N5Cl./kar
/H.7#0E*[)1B'*/2#]B32Z>Z73;tr;3rV5<4Sq;=557A/5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO&uqq`jj>q`Xp@q`Fd<
r]0s;r\sg7r\a[2r\FI-r\4=(r[e%!r[Igpr[.UjrZqIerZV7`rZD+[rZ(eSrYkbRq\])EobRE@rYYMM
rYkYQrZ(nYrZD+^rZV7brZhCgr[.Umr[Igsr[e%$r\+7*r\OO1r\a[5r\sg9r]0s=q`Fd>!'U6Cq`ad>
JO#JcJO"cOJO"cOJO"cOJO"cOJO"cOJO#noq`jj>q`Xp@q`=g>3WM5?3W;#;2uY`72?#E21B'$-0`E^(
/H.1!.K1ap-N5=j,lT"e+oWV`+9!;[*;^]S)ZCWO)#+p?(AepI)#G3M)Z(KQ*<%#Y+9!D^+oW\b,Q9"g
-N5Fm.K1js/H.:$0E*^*1]B612?#N52uYf93W;):48qA>4o7G<5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOpd"^@q`am?
q`Oj>r]9p:r]'m8r\a[3r\OO/r\=C*r[n+#r[Rmqr[7[lrZqIfrZ_=arZD+\q],SSrYkbRq\];Kp_NW>
p_N`CrYYVPrYkbTrZ(nXrZ;%\rZM1`rZhCfr[.Ulr[Igrr[e%#r\+7)r\FI/r\XU4r\sg9q`4X:r]C*A
!'U6Cq`ad>JO#JcJO"cOJO"cOJO"cOJO"cOJO"cOJO#noq`jsAq`Xg=r]C*?!BE1=3W;#;2Z>T52#]<1
1B'$-0E*R&/H.-u./kUn-N5:i,Q8nd+T<J^*r?rV)u^cT)>b9M(\ed@(&/RA(]G9N)?(QR)u^iV*W@,Z
+9!D^+oW_c,lT.i-iPRo.fM!u/cIF&0`Ej,1]B612Z>Z73;Y`83rV5?4Sq;=557A/5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO&uqq`jsAq`Xg=r]C*?r]0s;r\sg7r\a[3r\OO.r\4=)r[n+#r[Rmqr[7[krZqIerZV7`rZ;%ZrZ(nV
rYkbRrYYMKq\JN5q\K&FrYYVPrYkbTrZ(nXrZ;%]rZV7brZqIhr[7[nr[Rmtr[n+%r\4=,r\OO1r\a[5
r]'d8r]:$?rB(*C4T7M@557?n5a=Tc5_21O5_21O5_21O5_21O5_21O5bUI?5PmYA4o7A@48q8A3B7("
r]'m9r\ja5r\XU1r\=C+r\+7&r[e$ur[@anr[%OhrZ_=brZM1]rZ1tXrYthTrYb\Pq\T,FlkTC5q\T5K
rYb\RrYthVrZ1tZrZM1`rZ_=er[%Okr[@aqr[[t"r\"1(r\FI/r\XU3r\ja8q`4X:r]C!>r]U-Bpcn+1
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5l3hA5PmYA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(/H.1!.K1ap-N5=j,Q8nd
+T<J^*r[2Z)u^cT)>b9M(]G3I(%2k6(&JdG(],'K)?(QR)u^lW*r[8\+T<Sa,Q9"g-N5Fm.K1js/cIC%
0`Eg+1]B612?#N52uYf93W;)=48h8B4?WU+q`ad>JO#JcJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rpcnX>
q`Xg=r]C*?!BE.?3W;#;2uY`72?#H31]B-.0`E^(/H.1!.K1ap-N5=j,Q8nd+T<J^*r[2Z)u^cT)>b9M
(]G3I(%2k6(&JdG(],'K)?(QR)u^lW*r[8\+T<Sa,Q9"g-N5Fm.K1js/cIC%0`Eg+1]B612?#N52uYf9
3W;)=48V/>4o7G<5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOq`sp@q`am?q`Oj>r]:$=r]'m9r\ja5r\XU0r\=C+r\"1$
r[[ssr[7[lrZqIfrZV7`rZ;%ZrZ(nVrYkbRrYYVNrYGAGp_<]@rY5>Fp_<]Bq\K/IrYYVPrYkbTrZ(nX
rZD+^rZV7crZqIir[7[or[Rmur\"1'r\=C-r\XU3r\ja7r]'m;r]:$?rB(*C4T7M@557?n5a=Tc5_21O
5_21O5_21O5_21O5_21O5bp[?5PmYA4o7A@48q8A3B7("r]'m9r\ja5r\XU0r\=C+r\"1$r[[ssr[7[l
rZqIfrZV7`rZ;%ZrZ(nVrYkbRrYYVNrYGAGp_<]@rY5>Fp_<]Bq\K/IrYYVPrYkbTrZ(nXrZD+^rZV7c
rZqIir[7[or[Rmur\"1'r\=C-r\XU3r\ja7r]'m;r]:$?q`Oj@q`ad>lp-+eJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22t5kmS@
55RM?4T7GA3rV/=3;tl92Z>Q41]B0/0`Ea)0)dF$.fLmr-iPFk,lT"e+oWS_*r[2Z*<$oV)>b9M(]G3I
(&J^<'E/^F'DiLC(&f!G(]G<O)ZC]T*<$uX*r[8\+oW_c,lT+h-iPOn.fM!u0)dO'1&`s-1]B922Z>Z7
3;tr;3rV5>497Q,r]U$?q`fWsPsBmcJO"cOJO"cOJO"cOJO"cOJO"cOUd4]>q`am?q`Oj>r]1'?3<2)=
3;tl92Z>Q41]B0/0`Ea)0)dF$.fLmr-iPFk,lT"e+oWS_*r[2Z*<$oV)>b9M(]G3I(&J^<'E/^F'DiLC
(&f!G(]G<O)ZC]T*<$uX*r[8\+oW_c,lT+h-iPOn.fM!u0)dO'1&`s-1]B922Z>Z73;tr;3rV5<4T7M=
55RS25_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO')tpcnX>q`Xp@q`Fd<r]0s;r\sg7r\XU1r\FI,r\+7&r[[str[@amr[%Og
rZ_=arZD+[rZ(nVrYkbRrYYVNrYGAGrY4T1q\8oBrYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@aq
r[e%#r\+7*r\FI/r\XU4r\sg9r]0s=q`=d?!B`LA4o7G?5Cl(b5_21O5_21O5_21O5_21O5_21O5_21r
5kmS@55RMB4Sq5>3WV6$!'1$<r\sg7r\XU1r\FI,r\+7&r[[str[@amr[%OgrZ_=arZD+[rZ(nVrYkbR
rYYVNrYGAGrY4T1q\8oBrYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@aqr[e%#r\+7*r\FI/r\XU4
r\sg9r]0s=q`Fd>q`Xg?q`jF4JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5l3hA5PmYA4oRS@48q;?3W;#;2uY`72#]<11B'!,
0E*R&/,h$t./kRm-2o.g+oWV`+9!;[*<$oV)ZCWR)#b?N(B,'G'_i@:')3.>'`/XE(B,-L)#bEP)ZC]T
*<%#Y+9!D^,5rhd-2o:k./k^q/H.7#0E*[)1B'*/2#]E42uYf93W;):3rhAD4?WL(q`amAJO#JcJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rpcnX>q`Xp@q`Fd<!BE.?3W;#;2uY`72#]<11B'!,0E*R&/,h$t./kRm
-2o.g+oWV`+9!;[*<$oV)ZCWR)#b?N(B,'G'_i@:')3.>'`/XE(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rhd
-2o:k./k^q/H.7#0E*[)1B'*/2#]E42uYf93W;):48qA>4o7G?5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOq`sp@q`am?
r]L'>r]:$=r]'m9r\ja4r\OO/r\4=)r[n+"r[Rmqr[.UjrZhCcrZM1^rZ1tXrYt_PrYYVNrYGJJq\8o@
ne1g5q\9#ErYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@aqr[e%#r\+7)r\FI/r\XU4r\sg9r]0s=
q`=d?!B`LA4o7G?5Cl(b5_21O5_21O5_21O5_21O5_21O5_21r5kmS@55RMB4Sq5>3WV6$!'1$<r\sg7
r\XU1r\FI,r\+7&r[[str[@amr[%OgrZV7`rZD+[rZ(nVq\fAMrYPPLrY>;Eq\/N5q\/i@rY>DJrYPPN
rYb\RrYthVrZ;%\rZM1arZhCgr[7[nr[Rmur[n+&r\4=,r\OO1r\ja7r]'m;r]9p<r]L'@q`amAlp-+e
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_22t5kmS@55RMB4Sq5>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq-N5=j,Q8kc+T<J^
*W@&X)uCNP)#b?N(B,'G'`/R7')N@>'`JjH(AepI)#bHQ)u^iV*r[8\+T<Sa,Q9"g-iPOn.fLst/cIF&
0`Ej,1]B612Z>Z73;tr;3r:u=497Q,q`Xg?q`fWsPsBmcJO"cOJO"cOJO"cOJO"cOJO"cOUd4]>q`am?
r]L'>r]1'?3<2)=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq-N5=j,Q8kc+T<J^*W@&X)uCNP)#b?N(B,'G
'`/R7')N@>'`JjH(AepI)#bHQ)u^iV*r[8\+T<Sa,Q9"g-iPOn.fLst/cIF&0`Ej,1]B612Z>Z73;tr;
3r;#<4Sq;=55RS25_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO')tpcnX>q`Xp@q`Fd<r]0s;r\sg7r\XU1r\FI,r\+7&r[[st
r[@amr[%OgrZV7`rZD+[rZ(nVq\fAMrYPPLrY>;Ep_3<5q\/i@rY>DJrYPPNrYb\RrYthVrZ;%\rZM1a
rZhCgr[7[nr[Rmur[n+&r\4=,r\OO1r\ja7r]'m;r]9p<!'C9E4Sq;=55RQq5a=Tc5_21O5_21O5_21O
5_21O5_21O5bp[?5PmYA4oRS@48q8A3B7("r]'m9r\ja4r\OO/r\4=)r[n+"r[Rmqr[.UjrZhCcrZM1^
rZ1tXrYt_PrYYVNrYGJJq\8f=ob.-8q\9#ErYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@aqr[e%#
r\+7)r\FI/r\XU4r\sg9r]0s=q`Fd>q`Xg?q`jF4JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5l3hA5PmYA4oRS@48q;?3W;#;
2uY`72#]<11B'!,0E*R&/,h$t./kRm-2o.g,5r_a+9!;[*<$oV)ZCWR)#b?N(B,'G'_N.:')3.>'`/XE
(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rhd-2o:k./k^q/H.7#0E*[)1B'*/2#]E42uYf93W;):3rhAD4?WL(
q`amAJO#JcJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rpcnX>q`Xp@q`Fd<!BE.?3W;#;2uY`72#]<11B'!,
0E*R&/,h$t./kRm-2o.g,5r_a+9!;[*<$oV)ZCWR)#b?N(B,'G'_N.:')3.>'`/XE(B,-L)#bEP)ZC]T
*<%#Y+9!D^,5rhd-2o:k./k^q/H.7#0E*[)1B'*/2#]E42uYf93W;):48qA>4o7G?5O:Xd5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOq`sp@q`am?r]L'>r]:$=r]'m9r\ja4r\OO/r\4=)r[n+#r[Rmqr[7[krZqIerZV7_rZ;%ZrYthT
rYb\PrYPPLq\Al?mh>R4q\B)GrYPPNrYb\RrYthVrZ;%\rZM1arZhCgr[7[nr[Rmur[n+&r\=C-r\OO2
r\ja7r]'m;r]9p<!'C9E4Sq;=55RQq5a=Tc5_21O5_21O5_21O5_21O5_21O5bp[?5PmYA4oRS@48q8A
3B7("r]'m9r\ja4r\OO/r\4=)r[n+#r[Rmqr[7[krZqIerZV7_rZ;%ZrYthTrYb\PrYPPLq\Al?mh>R4
q\B)GrYPPNrYb\RrYthVrZ;%\rZM1arZhCgr[7[nr[Rmur[n+&r\=C-r\OO2r\ja7r]'m;r]9p<r]L'@
q`amAlp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_22t5kmS@55RM?4T7GA3rV/=3;tl92Z>Q41]B0/0`Ea)0)dF$.fLmr-iPIl
,lT"e+oWV`*r[2Z*<$oV)ZCWR)#b?N(AejA'_i@:'`/XE(B,-L)#bEP)ZC]T*<$uX*r[8\+oW_c,lT+h
-iPRo.fM!u0)dO'1&`s-1]B922Z>Z73;tr;3rV5>497Q,r]U$?q`fWsPsBmcJO"cOJO"cOJO"cOJO"cO
JO"cOUd4]>q`am?q`Oj>r]1'?3<2)=3;tl92Z>Q41]B0/0`Ea)0)dF$.fLmr-iPIl,lT"e+oWV`*r[2Z
*<$oV)ZCWR)#b?N(AejA'_i@:'`/XE(B,-L)#bEP)ZC]T*<$uX*r[8\+oW_c,lT+h-iPRo.fM!u0)dO'
1&`s-1]B922Z>Z73;tr;3rV5<4T7M=55RS25_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO')tpcnX>q`Xg=r]C*?r]0s;r\sg7
r\a[3r\FI-r\4=(r[e%!r[Igor[.UirZhCcrZM1^rZ1tXrYthTrYb\Pq\T5Iq\AH3q\AuDrYPPNrYb\R
rYthVrZ1t[rZM1`rZhCfr[.Ulr[Igsr[e%$r\+7*r\FI0r\a[5r\sg9r]0s=r]C'@!B`LD4o7G<5Cl(b
5_21O5_21O5_21O5_21O5_21O5_21r5kmS@55RM?4T7GA3WV6$!'1$<r\sg7r\a[3r\FI-r\4=(r[e%!
r[Igor[.UirZhCcrZM1^rZ1tXrYthTrYb\Pq\T5Iq\AH3q\AuDrYPPNrYb\RrYthVrZ1t[rZM1`rZhCf
r[.Ulr[Igsr[e%$r\+7*r\FI0r\a[5r\sg9r]0s=r]C!>r]U-Bpcn+1JO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5l3hA5PmYA
4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(/H.1!.K1ap-N5=j,Q8nd+oWS_*r[2Z*<$oV)ZCWR)#b?K
(AJX>'_iFB(AepI)#bEP)ZC]T*<$uX*r[8\+oW\b,Q9"g-N5Fm.K1js/cIC%0`Eg+1]B612?#N52uYf9
3W;)=48h8B4?WU+q`ad>JO#JcJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rpcnX>q`Xg=r]C*?!BE.?3W;#;
2uY`72?#H31]B-.0`E^(/H.1!.K1ap-N5=j,Q8nd+oWS_*r[2Z*<$oV)ZCWR)#b?K(AJX>'_iFB(AepI
)#bEP)ZC]T*<$uX*r[8\+oW\b,Q9"g-N5Fm.K1js/cIC%0`Eg+1]B612?#N52uYf93W;)=48V/>4o7G<
5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOpd"^@pceR<r]L'>r]9p9r\sg6r\XU1r\=C+r\+7&r[e$ur[@anr[.UirZhCc
rZM1^rZ;%YrYthTq\fAMq\T,FobI6;q\T5KrYbSOrYthVrZ;%\rZM1`rZ_=er[%Okr[Igrr[e%#r\+7)
r\FI/r\XU4r\sg9r]0j:r]C'@!B`LD4o7G<5Cl(b5_21O5_21O5_21O5_21O5_21O5_21o5l3e@55RMB
4Sq2@3][7%q`+R6r\a[3r\OO.r\4=)r[n+#r[Rmqr[7[lrZqIfrZV7`rZD+\rZ(nVrYkYOrYYMKq\Ji>
p_N`CrYYVPq\oGQrZ(nYrZD+^rZV7brZqIhr[7[or[Rmur[n+&r\4=,r\OO1r\ja7r]'m;q`=^<q`Oj@
q`ad>lp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_22q5l3e@55RMB4Sq5>3rV/=3;tl92?#H31]B0/1&`j*0)dF$/,h!s./kRm
,lT%f,5r_a+9!>\*W@&X)u^cQ)?(KM([Mq7(],'K)?(QR)u^iV*W@,Z+9!G_,5rhd-2o7j-iPRo.fM!u
0)dO'1&`s-1]B922Z>Z73;tr;3r;#<49.PB4o7G<5Cl(b5_21O5_21O5_21O5_21O5_21O5_21o5l3e@
55RMB4Sq2@3][7%r]0s;r\sg6r\XU1r\FI-r\+7'r[e%!r[Igpr[.UirZhCdrZM1^rZ;%ZrZ(nVrYkYO
rYYMKlk]I7q\];MrYkbTrZ(nXrZ;%\rZV7brZhCgr[.Ulr[Igrr[e%$r\+7*r\FI/r\a[5r\sg9r]0s=
q`Fd>q`Xg?pcn+1JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5kmVA5PRG>4oRS@48q;?3W;#;2uY`72?#H31B'$-0`E^(/cI:"
.fLjq-iPFk,lT%f+oWV`+9!>\*W@&X)u^cQ)>b9;(],'H)?(QR)u^iV*W@,Z+9!D^,5rhd,lT.i-iPOn
.fLst/cIF&0`Eg+1]B612?#N52uYf93W;):48q>B4o@J?557?n5a=Tc5_21O5_21O5_21O5_21O5_21O
5bUI?5PRG>4oRS@3rqB'!':*>r]'m9r\ja5r\XU0r\=C+r\"1%r[[str[@anr[%OhrZhCcrZM1^rZ;%Z
rZ(nVrYkYOq\\Z9q\]2JrYkbTrZ(nXrZ;%\rZM1arZhCfr[.Ulr[@aqr[[t"r\+7)r\=C.r\XU3r\ja7
r]'m;r]9p<r]L'@q`ad>lp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22q5l3e@55RM?4T7GA3rV/=3;YZ62?#H31]B0/0`Ea)
/cI=#.fLmr./kRm-2o1h,5rbb+T<J^*r[2Z*;^]S)Z(E=)#G3M)Z(KQ*<$uX*r[8\+T<P`,Q8tf-2o:k
./k[p/,h+!/cIF&0`Ej,1]B612?#Q33;tr;3rV5<49.PB4o7G<5Cl(b5_21O5_21O5_21O5_21O5_21O
5_21o5l3e@55RM?4T7DC3][7%r]0s;q`"L3r\XU1r\FI,r\+7&r[e$ur[Igpr[.UjrZqIerZV7`rZD+\
rZ1tXq]#MQq\e`;q\fAOq]#MSrZ1tZrZD+^rZV7crZqIhr[7[nr[Igsr[e%#r\+7)r\FI/r\XU3r\s^6
r]0s=r]C!>q`Xg?pcn+1JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5kmV>5PmY>4oRSC48q;<3W;#;2uY`72#]<11B'$-0E*U'
/cI:".fLjq-iPIl-2o.g,5rbb+T<J^*r[2Z*;^]P)XJ@=)Z(KQ*;^cU*r[;]+oW\b,Q8tf-2o:k./k[p
/,h+!0)dO'1&`s-1]B922Z>Z73;tr83rV5<49.MF4[&R(pcj<pPsBmcJO"cOJO"cOJO"cOJO"cOJO"cO
Tg8B;q`ad<r]L0A!BN7A3r:r:3;tl92Z>Q41]B0/1&`j*0)dI%/,h$t./kUn-N5=j,Q8nd+oWV`+9!>\
*W@&U)uCQ?)>b?L)u^iS*W@,Z+T<P`,5rhd,lT+h-iPOn.K1js/H.:$0E*^*1B'*/2?#N52uYf93Vtl:
48V/>4nq595O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOpd"U=q`ad<r]L'>r]:$=r]'m9r\ja5r\XU1r\FI,r\+7&r[e%!
r[Igpr[.UjrZqIfrZ_=brZM1^rZ:qWrZ(eSll,a?q],SUrZ;%\rZM1`rZ_=drZqIhr[.Umr[Igrr[e%#
r\+7)r\=C.r\XU3r\ja7r]'m;r]9p<r]L-B!BiU@557?n5a=Tc5_21O5_21O5_21O5_21O5_21O5bUI<
5PmY>4oRSA3rhAA3rV/=3;tl92Z>T52#]<11B'!,0E*R&/H.1!.K1ap-N5=j,lT%f,5rbb+T<J^*r?uW
*;^]A)Z(KN*<$uX*r[8\+T<P`,5rhd,lT+h-N5Fm.K1gr/H.7#0E*[)1&a!.2#]B32Z>Z73;tr;3r;#<
4Sq;:557A/5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO&uqofrF>pc\L:r]C*?r]0j8r\sg7r\XU1r\FI-r\4=(r[n+#r[Rdn
r[7[krZqIfrZ_=brZM([rZ:qWq],&Dq],SUq]>_YrZM1`rZ_=drZqIhr[.Ulr[Igrr[[t"r\"1'r\=C-
r\OO2r\ja7r]'m;q`=^<q`Oj@!'^*?pcj<pPsBmcJO"cOJO"cOJO"cOJO"cOJO"cOTg898r]^*?q`Fm@
3rhAA3rV/:3;tl92Z>Q41]B0/1&`m+0)dI%/H.-r./kUn-2o1h,Q8nd+oWV]+9!>Y*W$iF)uCWS*W$oW
+9!D^+oW\b,Q8tf-2o7j-iPRo.fLst/cIC%0E*^*1B'*/2?#N52uYf93Vtl:48V/>4nV#65O:Xd5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOpd"L:q`am?q`Oj>q`=^:r]'m9r\ja5r\XU1r\=C+r\+7&r[e%!r[Igpr[7[lr[%OhrZhCd
rZV7`q]GeYp`8oFq]5PTq]Ge[rZV7brZhCfr[%Ojr[7[nr[Rmtr[e%$r\+7)r\FI/r\XU3r\ja7r]'m;
r]9p<r]L'@!'^3Bofn!mPsBmcJO"cOJO"cOJO"cOJO"cOJO"cOTg898q`am?q`Fm@3rhA>3rV/=3;tl9
2Z>T52#]<11&`m+0E*R&/H.1!.K1ap-iPIl-2o1h,Q8nd+oWV]+9!>V*V(3I*W$oT+9!D^+oW\b,Q8tf
-2o7j-iPOn.fLst/H.:$0E*[)1B'*/2#]B32Z>Z73;tr;3r;#<4Sq;:54q/,5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO&uq
ofr48q`Xp@q`Fd<r]0j8r\sg6r\XU1r\FI-r\4=(r[n+#r[[ssr[@anr[.UjrZqIfrZ_4_rZM([jrXCA
rZM1`q]c"arZqIhr[.Ulr[Igrr[[t!r[n+&r\4=+r\OO1r\a[5r\sg9q`4X:r]C!>q`OpCq*+R<JO#A`
JO"cOJO"cOJO"cOJO"cOJO"cOJO#noofr48q`Xp@!BWCA48q;?3Vtf82uY]62#]<11B'$-0`E^(/cI=#
/,h!s./kUn-N5=j,lT%f,5WP_+T!8C*r@&Y+T<P],5rhd,lT+h-N5Cl.K1gr/,h+!/cIF&0`Eg+1]B61
2?#N52uYf63W;)=48V/;4nq595NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOpd"L:pceR<q`Oa;r]:$=r]'m9r\ja5r\XU1
r\FI-r\+7'r[n+#r[[stq^DFkq^)4erZhCdq]Y_WocO/UrZD"[rZV._rZhCfr[%Fgr[7[or[Rmtr[e%#
r\"1(r\=C-r\OO1r\a[5r\sg9r]0j:r]C!>q`OpCr''m?JO#8]JO"cOJO"cOJO"cOJO"cOJO"cOJO#no
ofr48q`Xj>!'L-?r]:$=r]'m9r\ja5r\XU1r\FI-r\+7'r[n+#r[[stq^DFkq^)4erZhCdq]Y_WocO/U
rZD"[rZV._rZhCfr[%Fgr[7[or[Rmtr[e%#r\"1(r\=C-r\OO1r\a[5r\sg9r]0j:r]C!>q`Xg?pcmn+
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5kmV85PmY>4o7A@48q;<3W;#;2uY`72?#H31]B0/0`Ea)0)dI%/H.0s.K1ap-iPIl
-2o1e,Q8na+n$QK+oW\_,Q8tf-2o7g-iPOn.fLst/H.7#0)dO'0`Eg+1B'-02?#N52uYf93Vtl748qA>
4oISB557?n5`\0]5_21O5_21O5_21O5_21O5_21O5bUI65PmY>4TRZ-rB1'@r]9p:r]'m9r\ja5r\XU1
r\FI,r\+7'r[n+#r[[jpr[@anr[.UjrZq@crZ_4_mi_BKrZ_4arZqIhr[.Lir[@aqr[[t!r[n+%r\+7)
r\=C-r\XU3r\ja7r]'m;q`=U9r]L'@pceI;k!4J_JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22k5kmS=557;?4Sq5>3rV/:3;tl9
2Z>Q41]B0/1&`m+0E*U'/cI=#/,h$t.K1ap-iPIi-2Stb,O?WL,Q8tf-2T%g-iPOn.K1gr/,h+!/cIC%
0E*[&1B'*/2?#N22uYf93W;):48V/;4oISB557?n5`\0]5_21O5_21O5_21O5_21O5_21O5at%65PRG<
4TIYE4Sq5>3rV/:3;tl92Z>Q41]B0/1&`m+0E*U'/cI=#/,h$t.K1ap-iPIi-2Stb,O?WL,Q8tf-2T%g
-iPOn.K1gr/,h+!/cIC%0E*[&1B'*/2?#N22uYf93W;):48V/;4nq595NY4^5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOnj)t7
pceI9q`Oj>q`=^:r]'m9r\ja5r\XU1r\FI-r\4=)r\"1%r[e%!r[Rdor[@anq^2(akp6-Pq^2:ir[@ap
q^VRqr[e%#r\"1'r\4=+q_S4.q_nF4r]'m;q`=^<q`OX:rBC-Cpcj<pO$J7]JO"cOJO"cOJO"cOJO"cO
JO"cORm?a5pceL:!'U3Ar]C!<r]0s;r\sg7r\a[3r\OO/r\=C+r\+7'r[n+#r[[stq^MLmr[7Ripa,/M
q^)+dr[7[nr[I^or[[t!r[n+%r\+7)r\=:+r\XL1r\sg9r]0j:r]C!>pc\C9pcmn+JO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5k7255PRG>4o7A=48q;?3Vtf82uY`72?#H31]B0/1&`m+0E*U'/cI=#/,Lgq.JkOm-i57T-28ha-iPOn
.K1go/,h*s0)dO'0`Eg+1B'*/2#]B32Z>Z73;Y`83r;#<4SV)94omi2ofn!mO$J7]JO"cOJO"cOJO"cO
JO"cOJO"cORm?X2pceU=!'U3Aq`Fd<r]0j8r\sg7r\a[3r\OO/r\=C+r\+7'r[n+#r[[jqr[I^mr[7Ri
kp?*Oq^;@kr[Igrq^_Xsq_%k$r\4=+r\FI/r\XU3r\ja7r]'d8r]9p<r]Ks=pce@8k!4J_JO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_22k5kRA755RM?4Sq5>3rV/:3;tl92Z>T52#]<11A`g*0`Ea)0)dI%/Ggss.f1[l.-;oS./PIm.f1aq
/H.7#0)I=$0`*X)1]B612?#N52u>T63Vtl:48V/;4nh,@5!Ja+JO#/ZJO"cOJO"cOJO"cOJO"cOJO"cO
JO#\iofr+5!BiUE4o7A=48q;?3Vtf82uY`72?#H31]B0,1&`m+0E*U'/cI<u/,h$q.JkOU-i5=h.K1go
/,h+!/cIC"0E*[&1B'*/2#]B32Z>Z43;tr83rV5<4Sq;7557A&5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO&Zhofr48pc\L:
q`Fd<q`4X8r\sg7r\a[3q_S4,r\=C+r\+7'q^q[rq^_Xqj!jaQr[[jsr[n""r\+7)r\=C-q_S4.r\a[5
r\s^6r]0s=pcJ@8q`X[;!Br^B5Cl(Y5_21O5_21O5_21O5_21O5_21O5_21f5kRA:4omf0qE=^<q`Fd<
q`4X8r\sg7r\a[3q_S4,r\=C+r\+7'q^q[rq^_Xqj!jaQr[[jsr[n""r\+7)r\=C-q_S4.r\a[5r\s^6
r]0s=pcJ@8q`XU9pcme(JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5jpu/5PmY;4oRS@48V)<3Vtf82uY`72?#H01]B0/1&`m(
0E*U'/bgmo/*SPY/,Lmp/cIC"0E*[)1&`s*1]B612?#N22uYf93W;):48:r;4n:c:5P@<m5`@sZ5_21O
5_21O5_21O5_21O5_21O5aXh-5PmVF4[&O&r]L'>q`=^:q`+R6r\ja5r\XL.r\FI-r\44&r\"1%pal:m
kplHYq^hUrr\"($r\4=+r\F@,r\XU3r\jX4r]'m;r]9p<pcSO=nil_2j$8/\JO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22h5k7/7
557;<4Sq5;3rV/:3;tl92Z>T22#]<.1B'$*0`Ea&0).$\/Gh$r0)I=!0`Eg+1A`m,2#B002Z>Z43;tr8
3rV5<4SV)455d_A5Cl(V5_21O5_21O5_21O5_21O5_21O5_21f5k7/84odeA4o7A=48V)<3Vtf82uY`7
2>]601]&s,1&E[(0DdBs/`nV]/c.0t0DdI&1&`s*1]B6.2?#N52u>T63Vtl:48V/84nV#35N"eX5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOks5#.nim%9ofW48q`=U7r]'m9r\jX2q_\1+r\F@*q_7n#i%Fm[q_7n%q_J.,r\XL0r\jX4
q`+R8q`=U9q`Oa=ofi4:r',`tL-U;TJO"cOJO"cOJO"cOJO"cOJO"cOP!Je,q*+X=r]Tp:r]C!<q`4X8
r\sg7q_e7-q_S4,q_@t%q_-k[q_.h#q_@t'r\OO1q_e@2q`"C3r]0j:q`F[;q`XU9ofq7tJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5j:Q,5P7584o7A=48V)<3Vtf82u>N42>]6-1]&s)1&*Hb0DI6u1&Ea'1]B6.2?#N22u>T63Vtl:
48qAA48qA;4nq585Q!`s5__OT5_21O5_21O5_21O5_21O5_21O5a"D*5Q!_A557;<4Sq5;3rV/:3;tl6
2Z>T22#B*+1A`g$0]k%`0`*U%1A`m,2#B002Z#H13;tr83rV5?4T7GA4SV)754Uqo5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO&Hbniun5of`17q`F[9q`4O5q`"L4q_e@0q_Rn#i%b!^q_S++q_e7/q`"L6q`4O7r]Bm;pc\:6pHJ[C
5Cl(P5_21O5_21O5_21O5_21O5_21O5_21`5k7,?5!Jg,of`17q`F[9q`4O5q`"L4q_e@0q_Rn#i%b!^
q_S++q_e7/q`"L6q`4O7r]Bm;pc\:6ofq.qJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5it?&5PRG;4nUr748q;<3Vtf52u>N.
2>]6'1[-[i1\`g(2>]<22u>T33Vtl448V/;4n:f/563u5JO"iQJO"cOJO"cOJO"cOJO"cOJO"cOJO#8]
o034>pceI9ofW+5r]9p:q`+I3q_n4,q_[t%kq`#ipb_k*q_nF4q`+I5q`=L6q`Oa=nilV/g-C3SJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_22_5jpr1557;<4Sq5;3r:r43;YZ32Y]0)2#]<12!d$k2#B0-2Z#H.3;tr83r;#64SV)454Li<
5<j]aK0XuQJO"cOJO"cOJO"cOJO"cOJO"cOO$N;$rBKs=pc\L:q`F[9q`4F2q`"C1pbhh'r\OO1lne;k
q_e7/q`":0r]0j:q`FR8pc\:6mm#MkJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5i=ou5PRG84nq/:48V)93VYT/2u>N%2>B$!
2>&m)2u>T33VYZ448V/54n:f05Q*iu5_21O5_21O5_21O5_21O5_21O5_21O5`%c%5PdV>54q)64Sq5;
3r:r43;>H02X`Nu2"ENs2Z#H13;Y`23r;#94S:l.54q.i5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO&-Yniue2nick4pcJ@6
pc8+/pc%"eof)Y*q`4F4q`FI5q`XC3ofr:<JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO#&Wq*4^?ofhq0
q`OX8q`=L4pc/%-h)=pbpc/.2pcA:6ofW+7mlpD/d6N7JJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22Y5jU`.54q)94S:f53qYN.
38-=a3;>N/3qtf34SV)454:`45_21O5_21O5_21O5_21O5_21O5_21O5_21W5l!Y:5P7554o7A748V)3
3VYSf2t]0*3VYZ148:r54nV#-5LD`I5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOh*C<kofi%3pcS42pcA(.h)OscofDt3ofW+7
mlp;,oK[smJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOL-YZ$nNZ\1of`(4ofMq0of:hfni?A(q`FI5q`XC3
nit;_JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5hA9i5Oq#24nUr147tYj3V#6%48:r24n:f-5Oh!i5_21O5_21O5_21O5_21O
5_21O5_21O5_20#5jpr.54q)34S:f/3o)ge3q>B-4S:l.54UqZ5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO%gPks+`&of`(4
r]C*AofLP^ofMh/pc\(0lp(#*JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO!'od5nil_0pcSO;r]Kj8
d5pq^ofW"4mlp)&a?Y;AJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_22M5j:N(54:Z*4OH7i4T7G84RYH%54Ur(5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5lEt45Oq#,4n:__48qAA47t`)4mtT*5Jf[:5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOb<YDYmlp2'
^HD'Mlosl&kWj\aJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO&imlp'r&mleEJnic>'mm"QPJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5g)FQ5OUf&4kDgb4mYAp5Nk@`5_21O5_21O5_21O5_21O5_21O5_21O5_22m5iY)t53tGa4RYH"
53>)E5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO%1>k!/)o_EI$Flp'AmJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOmQfo!
krusIk!&,r[QoC/JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_2255j:Mh53>#a53Y;b5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5ik8q5M\Nc4l&<d5HmD(5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO]Kk:;ZTd;3fg(*RJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO&<^h*850i'4G2JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5dN`-5L_mN5KuHE5_21O5_21O5_21O5_21O5_21O5_21O5_22U
5hA6M52&5s5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO#noUd)RYJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOb!;aePsBmc
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21o5bpWY5_21O5_21O5_21O5_21O5_21O5_21O5_21O5fu?f5F"Kb5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
K0\Q`RQuEhJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$;%k!+D^nN_XjJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_2235cR&@5_21O5i=o-5Cl)q5_21T
5l<jM5Cl)K5_21O5dWeV5G^Vr5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO\j38[T0RrmJO&-YW]u&"q*9KrL-YZ$
Y<RS'dm/ILJO$S-W^!=FJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5gM^45PmXc5I!J)5_22n5fGt_50,sH5_21i
5j(Ah5PmX`5Cl)]5_21O5fl:15PRF`5IWn/5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOhE]dZXZkc0]g.-6KL#N$
h*8,-i'3PnJO$5#h*:g$Z9I22JO&`jJO"cOfKe.TYWgu0_a&c<JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_22W5iY(u
53tMI5_21R5lO"15Ft('5F4Wd5cR*35P%(<53Y:_5k.*j5_22Q5iY)#53Y;L5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO&B`j$2Zi_EHpCk!.'TJO#2[ofqn0k!$XFk!%fiVEf\tZU!Y;l9>/1_EHpCj$/)[!'l*#JO&0Z
j$2Zi_EI$Fj$1sWJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5k%&'5N"`o4jcC\4m"rj5Li#M5aF\%5M\Nl4k)U_
4m"rg5Hd>'5eKAK5N"a'4nLnb4RYGq53"ka5_21O5jCW$5M\Nl4k)U_4m"rg5MJGS5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOn3H>)losYs^HCsJks"GueNe[NQ9ae$mloks_E@9Mk!&,rY<[Y(]KkpMlosf"rB7nXmlfo!
ks("iJO"cOl9O]#mloks_E@9Mk!&,rgH^<TJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_22r5j:N%54:Z*4T7GA4OH7i
4T7G54RYH%53>)d5_21m5jU`1557>14mtMV47#*#4mYAp5I`t05fH"T5OUf)4n_#74NfhQ4RtZ%53>(m
5_21O5k@8-5OUf)4mtMV47#*#4mYAp5NG(\5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"fP!'fa5ks"l*ml^8)b<#2U
r]L0AofVn1mlp)&iBVrZW'K]6mlpM1pc\(.pcHPXniQ;&pc[t-lp&*IJO%LGlp'_upc\11r]C*A!BWC>
430JR47YN,4mYB!5F"Kb5_22u5jU_t557;04SV"Z3q>B$4SV)+53tMs5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
Jj9<#m6C&'of_k.niQD'h)XpbniQM,nicG*niu(uJO$/!lp'r&of_k.niQD'h)XpbniQV/mlg,'nis`O
JO%LGmm$8)nicP+p,i47niGSemlL#$pcS+1mlp2)PsBmcJO',ulp'r&of_k.niQD'h)XpbniQV/mlg,'
niu;&JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21S5lEq:5Oq#24nUr147tZ*3Sc[`3V>H+47t`/4n:f'5O(Lb5c[0:
5P7584o7D84SV#/3qYMh3:Alu3qYT04RtZ.53Y;M5_22J5jU`.54Ul04SV#33rM,43Sc[`3V#6(48:r/
4nV#'5Ft,k5_20$5X=[#ofhq0ofW"2niHG(h)Oj`niHG*pcS+1ofhV)n3DOiJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5`7o%5P@>155RM94SV#23qt`+37KnX3;#<,3qtf04Sq;.54:`*5_22*5jU`(55RMB4SV&648:l33U\rW
2tAs$3VYZ148:r54mtT$5KZ6B5hA9i5OUf24nUr747tZ03<;*!pGi.2r]&Cdni6D)pcA:6r]L0ApcSF:
losc#Ud0JrKg>T$n3?A*q`XU7pcJ73pc7e&e2QqXof;e.pcJ75pc\(0lp(2/JO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21Y5kdM@5OUf24nUr448:l63V>B&2qg1_2t]0*3VYZ.48V/54n:f*5O^ph5d<TF5Oq#24o7A=4SV#5
3r:r13;#5^2YB$%3;>N/3qtf64RtZ.53tMV5_22P5k7/154q)64S:f23r:r53;ki02qKt\2t]0*3VYZ1
48V/24nV#*5GUPq5_VK%5P@>454q)34SV#53r:r13;#5^2YB$%3;>N/3qtf64RtZ.53tN-5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cON^35$r'0a9pc\C7pcJ@6pc8+/pc%k(d5C\Wof)b-pc8+1q`FR8of_k0niu_2JO$S-
niuS,pc\C7pcJ@6pc842of)P%e2?nWpc%t-q`4F4pcJ75pc\(0nitAaJO%pSniu\/pc\:4q`FR6pc842
q)A72pbpMWoeuS(pc/.2pcA13q`OO7nilM,Va,euLd:f$q*4=3pc\C7pcJ@6pc842of)P%e2?nWpc%t-
q`4F4pcJ75pc\(0niuq8JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21b5k7/<54^u54o7A:48V)63W;#;2uYf62u>N+
2>]601]B5k1]B611\EU"2>]<,2u>T33VYZ447t`84mtT'5P[Qq5e95O5Oq#54nq/748V)63W;#52u#<+
2>B#a1[d0q2>]</2u#B03Vtl447t`84n:f'5LVlK5i=ou5Oq#54nq/:48:l33W;#52u>N22>T3*1u0tY
2#&s'2Z#H.3;tr53r;#34Sq;453tM95_21\5kI8A5<n^&pc\C7pcJ@6pc8=5pc%t+pbhh'h)"LVpbhq,
q`":0q`4O7pcJ.2r]Tg9lotM95_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOPX+e(rBBp=pc\C7q`F[9pc842q`"C1
pbhh'mka2`nh^/"pbhh)r\sU3q`4F4q`FI5pc\:6niuq8JO$e3ofqn/pc\C7q`Fd<r]9p:q`+@0q_n=/
oec4qjtcK`q_\(*pbr+1pc/.2q`=L6pcS=7nilV/dm/ILi'?s"nilh3ofW+5q`=U7q`+@0q_n=/!AlY-
2"EHe1@d6r2#&s*2Z#H.3;Y`53qtf34SV)154Uq?5_21\5kR>A54Cc24nq/:48V)93Vtf22u>N12>&fs
1ZgI`1]'$(2>B*/2u#B03Vtl448:r54n:f-564#7JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21e5k7/955[V>4nq/7
48q;<3Vtf52u>N.2>]6*1\ENT1&*O!1]'$+2>]</2u>T33Vtl448V/54nV#05Q!ct5eTGR5P7584nq/:
48V)<3W;&93;YZ32Z#B,2#&m%1=S&R1AE[&2#B0-2Z#H13;Y`53qtf64S:l154Uqh5_22\5kRA4557;9
4Sq5;3r:r73;YZ32Z#B,1]]BgrA4+%f.m%UoeZJ%q_e@2q`":0r]0a7q`FR8of`(6mm"$AJO#>_nim+<
p-/77pcSF8q`=U7q`+I3q_n=/pb_b%pbL>RpbMV#q_\1-q_n=1q`+I5q`=L6q`OO7ofht3!'c$"Jj=lP
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5b1125P./;55RM<4T7G;3r:r73;tl62Z#B22#B*(1A`g!0^g[l0(L[g0`*U%1A`m)
2#B0-2Z#H13;tr83r;#64SV)454Cc:5Cl)<5k7/1557;94T7G>3r:r:3;to72u>N42>]6-1]&s&1%d6k
0DI0j0D.$r1&Ea'1]'$+2?#N22u>T33Vtl748:r54nV#-5MSMT5j:Q)5Oq#84o7A@48qAA48V)93Vtf8
2u#<12?#H-1]&p.0erV]nhBVfq_%Fmoe?.qq_J%)q_\1-r\jX4q`+I5q`=U9q`OX:nilM,[QoC/QU(++
qEF^=pc\C7r]C!<q`4O5q`"C1r\aR0q_S+)pbDFqnh9bjnh9Yiq_@t'q_S++q_e@2q`"C3q`4O7q`FR8
pc\:6p-8C<JO##VJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21k5k7/755dY<4o7A=48V)<3Vtf52u>N12?#H01]&s)1&EZt
0AS8R0DdHu1&Ea'1]'$.2>]<22u>T33Vtl448V/84nV#156*p!5f>q\5P7524oRS=48q;<3Vtf52uY`4
2>]6-1]&s)1&EZt0AS8R0DdHu1&Ea*1]'$+2>]<22u>T33Vtl748V/84n:f-5MSMT5j:Q,5P7554o7A:
48q;<3Vtf52uY`42>]601\`a'0`Ws*0_I*T0).*p0_dC%1A`m)2#B002Z#H13;tr53r;#94SV)154UqH
5_21e5kRA94omi2nict7pcJI9q`4O5q`"L4q_e7-q_S+)q_@t%oe5,Roe61rpbDY$r\OF.q_e7/r\s^6
q`4O7q`F[;pc\13q*4^?JO##VJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21n5k7/455dYB4o7A=48V)93Vtf52u>K02#B*.
1A`g'0`*O#0).$S/GLgl0)I=!0`*U(1A`m)2#]B02Z>Z43;tr53rV594SV)455%5>5Cl)B5k7/7557;9
4Sq5;3rV/:3;YZ62Z#B/2#]<.1A`g'0`*O#0).$V/G1Ui0)I=!0`Eg(1A`m,2#B002Z#H13;tr83r;#6
4SV)454Uqq5_22e5kRA7557;94Sq5;3rV/:3;YZ62Z>T22#B*+1A`g'0EEg[r@e%#patDToe#qkq_.h#
r\=:*q_S4.q_e@2q`"L6q`4O7q`FR8pc\C9mm"?JJO#Yhniun5!'U-@pcSF8q`=^:q`+I3r\jX2q_\:.
q_J%'q_7n#q_%Xqi%4OQpb)Fsq_8"(q_J%)r\XL0r\jX4q`+R8q`=U9pcS=7ofi:<pHO3oMa2hYJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5c-g;5OUf84TIV?4Sq5>3r:r73;tl92Z#B22#B*.1A`g*0`*O#0)dHt/GgsI.f1an/Gh$r
0)dO$0`*U(1B'*,2#]B32Z#H43;Y`53rV564Sq;755@GA5Cl)H5k7/155RM<4Sq5>3r:r:3;YZ62Z>T5
2?#H01]B0,1&`m(0E*U$/bgmo/(?'G/,Lmp/c.1"0DdI&1&Ea*1]B6.2?#N22uYf63Vtl:48:r54nV#3
5Mn_W5k7225Oq#84o7A=48V)93W;#;2u>N42?#H01]&s,1&E[%0E*U%/H@Bt/H.0L.f1ak/H.6r0)dO$
0`Eg(1B'*/2#]B02Z#H43;tr53rV594Sq;454q.N5_21n5k7/14odbD4nq/:48q;<3W;#82uY`42?#H0
1]B0,1&`m(0E*U$/bgmo/(?'G/,Lmp/c.1"0DdI&1&Ea*1]B6.2?#N22uYf63Vtl:48:r54nUu>5<nm,
JO#,YJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21t5k7/7557;>4S_,=48V)93W;#82u>K32#B*.1A`g*0`Ea&0)I6t/Ggsm
.e5%`..Sh^.f1an/H.6u0)I=$0`Eg(1B'*,2#]B32Z#H43;Y`83qtf64SV)455[YD5Cl)H5k7/7557;9
4Sq5;3rV/:3;tl92Z#B22#B*.1B'$*0`Ea&0)dHt/Ggsp.dnh]..Sh^.f1an/H.6u0)dO$0`Eg(1B'*/
2#B002Z#H43;Y`83r;#94SV)1557A"5_22k5k7/7557;94T7G;3rV/:3;tl92Z>T22#]<.1B'$-0`*O#
0)dI#/-%6r/,Lge.JP=[.JPCi/,h*s/cIC"0E*[&1&`s*1]B612>]<22u>T63Vtl748V/84n:f35Ij%1
5bLC55PRG=4TR]/pcSF8q`=^:q`+R6r\jX2r\XL.r\FI-q_8"&q_%k"pal:mq^V%`paG\^paZ.kq^h^u
q_%k$q_8"(q_J.,r\XL0r\jX4r]'d8r]9p<q`OX:o0*.<pcj<pMa2hYJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5c-g;5PRG;
4oIJD4?WL&q`=^:r]'d6q_n=.r\OF,r\=C+q_.guq^h^sq^VIlq^Cn\pa5PZpaH"gq^VInr[e%#q_%k$
r\44(r\FI/r\XL0r\ja7q`+R8q`=^<pcS=7of`C@5PIBn5h83n5P75;4nq/:48q;<3W;#82uY`72?#H3
1]B301A`g*0`Ea)0)I7"/Ggsp.fLml..8PY-LrPZ./PIm.f1aq/Gh$u0)I=$0`Eg(1B'*/2#]B02Z>Z4
3;tr83rV594SV)454q/%5_22k5kRA755RM<4Sq5>3r:r:3;YZ62Z>T52#B*.1B'$-0`*O&0)dI"/H.0t
.fCjr.JP=^-ho%Z-hSnb.K1go/,h*s/cIC%0DdI&1&`s*1]B612?#N22uYf63W;):48:r54nq535JKI7
5bLC85P75;4TIV?4Sq5>3r:r:3;YZ62Z>T52#B*.1A`g*0`Ea)0)I7"/Ggsp.fLml..8PY-LrPZ./PIm
.f1aq/Gh$u0)I=$0`Eg(1B'*/2#]B02Z>Z43;tr83rV594SV)855d\<5Cl(^5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
WBg,@nim%9pcJO<r&am=q`4X8q`"C0r\XU1q_J%&r\+7'r[n!ur[[stq^MCjq^;.cpa,/Mq^)"aq^;7h
r[I^or[[jsr[n+%r\+7)r\=:*r\OO1r\aR2r\sg9q`4X:r]Bm;pc\=7!'^'?JO&!Uofr+5q`X^:r]C!<
q`4X8r\sg7r\aR0r\OO/r\=C+q_.q$r[n+#q^_Xqr[IUjr[7Ifpa,&Jq^)"aq^;7hr[I^or[[t!q^qe"
r\+7)r\=:*r\OO1r\a[5q`"L6r]0j:r]Bm;pc\C9niu>'JO&lnofr+5q`Xg=q`F[9r]0s;q`"L4r\a[3
q_S4,r\=C+r\+.$r[n+#r[[jqr[Ian!%@^lpa5b^kp6$Mpa5kcr[@Xmr[Rdqr[e%#r\"($r\4=+r\FI/
q_\:0r\ja7q`+R8q`=^<q`OX:ofhq2_E`Z;UHnK:ofi79rB1!?r]C!<q`4X8r\sg7r\aR0r\OO/r\=C+
q_.q$r[n+#q^_Xqr[IUjr[7Ifpa,&Jq^)"aq^;7hr[I^or[[t!q^qe"r\+7)r\=:*r\OO1r\a[5q`"L6
r]0j:r]Bm;pc\O=rBBd:JO#GbJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22"5kmS755RM<49.GD4$3F&q`4X8q`"L4r\a[3
r\OF,r\=C+r\+7'r[n!ur[[jqq^D=hq^2(apa#2Npa#V\q^21fr[@Xmr[Rmtq^hUsr\+7)q_@t(r\XU3
r\ja7q`+R8q`=U9q`OX:q*"dBofn!mgd(X!nilq6q`Oa;r]:$=q`+R6q_nF2r\XU1r\FI-r\=C+r\+7'
r[n!ur[[str[I^mq^;7fq^(n\mj%KNpa,ear[7Rkr[I^or[[t!r[n+%q_.q&r\=C-r\OF.r\a[5r\sg9
q`4X:q`F[;pc\C9niu>'JO&lnpcnF8pc\L:r]C!<r]0j8r\sg7q_e@0r\OO/r\=C+q_.q$r[n+#q^_Xq
r[I^m!@K8n-iPIf-1rPP,P<>W-2T%g-i5=k.JkUo/,h+!/cIC%0DdI&1&`s-1]B6.2>]?33;Y`83r;#9
4SV)754UqT5_21q5kmS755RMA497Q,q`Fd<r]0j8r\s^4r\a[3r\OO/q_A((r\+7'r[n!ur[[str[I^m
q^;7fq^(n\mj%KNpa,ear[7Rkr[I^or[[t!r[n+%q_.q&r\=C-r\OF.r\a[5r\sg9q`4X:q`F[;pc\O=
rBBd:JO#GbJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_22(5k7/7557;<4Sq2?3rD&<3W;#;2u>N42?#H31]B0/1&`m+0DdC$
/cI=#/,h$t.K1am-i57i-2St_,PWJO+n[&S,Prbc-2T%g-i5=k.K1gr/,h*s/c.4#0`*X)1]B612?#N2
2uYf93Vtl:48V/84o%8A54q-k5iP'"5PRG;4o7A=48q;<3W;#;2uY`42?#H31]B0/1&`m+0E*U'/cI=#
/,Lgq.K1am-iPIi-2Stb,P<8O+n?iS,Prb`-2T%g-i5=k.K1gr/,h+!/cIC%0E*[)1&`s*1]B612?#N5
2u>T63Vtl:48V/;4nV#35Nk@`5l3h;5PRG;4o7A=48q;?3Vtf82uY`72?#H01]B0/1&`m+0E*U'/cI=#
/,h$q.K1am-iPFn,piL9q]u%`ocirMnfmrUq]u%br[.Lir[@Xmq^_Xsr[n+%r\+7)r\=C-r\OF.q_nF4
r]'d8r]9p<q`Oa=ofi%5_E`Z;WBg#=pceI9q`Fj?r&am=q`4X8r\sg7q_e@0r\OO/r\=C+r\+7'r[n+#
r[[jqr[Igpq^;@iq^)+bq]kbXnfdQJq]kt`q^)+dr[7Rkr[Igrr[[t!r[n+%r\+7)r\=C-q_S4.r\a[5
r\s^6r]0j:r]C!>q`Xj@qEFR:JO#GbJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22(5k7/755RM?4Sq5>3WM2<3W;#;2uY`7
2?#H01]B0/1&`m+0E*U$/H.1!.fLmr./kUk-N5=g,lT%c,5<>S+S?iI+T!>W,5rha,lT+e-N5Cl./k[p
.fLst/H.7#0)dO'0`Eg+1B'*,2#B312uYf63W;)=48:r;4o%;<54q-k5j1K+5PRG;4o7A=48q;<3W;#;
2uY`72?#H31]B0/1&`m+0E*U'/cI<u/,h$t.K1ap-i57i-2Ste,Pr\^+nZuK+7^QO+o!8\,Prbc-2o7j
-iPOk.K1gr/,h+!/cIC%0E*[)1&`s-1]B612?#N22uYf93Vtl:48:r;4n:f05OLdf5l3h>5PRG>4o7A=
48V)<3W;#82uY`72?#H31]B0/1&`m+0E*U'/cI=#/,Lgq./PCk-Mo+g,QT,7r?M1`q]YVTnfREFq]Yh\
q]l(cq^)4gr[7[nr[I^or[[t!r[n"#r\44)r\OO1r\a[5r\s^6r]0j:r]C!>q`XU9nit2\JO$2"ofr48
pc\L:rAt$A48q;<3W;#;2uY`72?#H31]B0/1&`m+0E*U'/cI<u/,h$t.K1ap-i57i-2Ste,Pr\^+nZuK
+7^QO+o!8\,Prbc-2o7j-iPOk.K1gr/,h+!/cIC%0E*[)1&`s-1]B612?#N22uYf93Vtl:48:r;4TR`1
oKMq4JO#YhJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_22(5kRA:557;<4Sq5>3WM/@3B?srr\sg7r\a[3r\OO/r\=C+r\+7'
r[n+#r[[str[Igpr[7[lq^)4eq]l(aq]YVTh&lM:p`]V\q]l(cq^)+er[@apr[Rmtr[e%#r\"1'r\4=+
r\FI/r\XU3r\ja7q`+R8r]9g9q`Oa=!Br^A557?n5j1K+5PRG;4oRS@48V)<3W;#;2u>N42?#H31]B0/
1&`m+0E*U'/cI=#/,h$t.K1ap-iPIi-2o1e,Q8na+o!26+8[2X+o<J\,Q8tf-2o7j-i5=k.K1gr/,h+!
/cIC%0DdL'1B'*/2#]B32Z>Z73;Y`83r;#94SV)754q/.5_22t5kmS=557;<4Sq5;3rV/=3;tl92Z#B2
1]&s,0`*O&/cI=#/,h$q.K1ap-iPIl-2Ste,68u4r?D+^p`SB7p`TGWq]c"aq]u.er[.Ulr[@Xmr[[js
r\"1'r\4=+r\FI/r\XL0q`"L6r]0j:q`F[;q`XU9ofpM_JO$2"ofr48pc\U=q`=d=r&Xg;r]'m9q_nF2
r\XU1r\FI-r\4=)r\"1%r[e%!r[Rmrr[@anr[.LgrZq@crZ_4_p`S94q]PbZq]bn^rZqIhr[.Ulq^DFm
r[Rmtr[e%#r\"1'q_A(*r\OO1r\a[5r\sg9q`4X:q`F[;r&t!Apce@8JO#YhJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22+
5kRA755RM?4Sq5>3rV,>2utuuq`"L4r\a[3r\OO/q_8"&r[n+#r[[str[Igpq^;@iq]u.cq]c"_q]PbX
ocE69ocF)Sq]PYWq]l(cr[%Ojr[7[nq^MLpq^h_!r\+7)r\=C-r\OO1r\a[5q`"L6pcAC9q`O[;!'U*@
pcj<plTk,-ofi79q`Oj>q`=^:r]'d6r\ja5r\XU1r\FI,r\+7'r[n+#r[[str[Igpr[7[lr[%Ohq]l(a
q]YhZq]GJPjrO4<q]G\Xq]Yq_q]l(cr[%Ojr[7[nr[Igrr[[t!r[n+%r\+7)r\=C-r\OO1r\a[5r\sg9
r]0j:q`F[;q`X^<ofqk0JO'3"ofr48pc\L:r]C*?q`4X8q`"L3r\XU1r\FI-r\4=)r\"1%r[e%!r[Rmr
r[@anr[.UjrZq@crZ_7`!$V4^q]GSSjrO+9q]G\Xq]Yq_q]l(cr[%Ojr[7[nr[Igrr[[t!r[n+%r\+7)
r\=:+r\XL1r\sg9r]0j:r]Bm;q`X^<ofpM_JO$;%ofr+5q`Xg=r]C'>!BN:@3W;#82uY`72?#H31]B0/
0`Ea)0)dI%/H.1!.fLmr./kUn-N5=j,l8hc,5WP\+T!8R*p+L<*r@&V+T!>],5WVa,lT+h-N5Cl./k[p
.fLst/H.7#0)dO'0`Eg+1B'*/2#]B32Z>Z73;tr83r;#9497T.rB9p>ofn!mRQuEhJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5dEZM5P75;4o7A@48V)<3W1o<3&pmrr\a[3q_S4+r\4=)r\"1%r[e%!r[Rdnr[7RhrZqIfrZ_=bq]Pk[
p`B;Qp`08PrZ(SMrZ(nVnf7WLq]>VVrZM(]rZ_=drZqIhr[.Ulr[@apr[Rmtr[e%#r\"1'q_A(+r\XU3
r\ja7r]'d8r]9p<r]L!>!'U*@ofn!mmQgP3ofi79q`Oj>q`=^:r]'m9r\ja5r\XU1r\FI-r\4=)r\"1%
r[e%!r[Rmqr[7[lr[%FerZhCdrZV.]rZD"Yp`9,Lmi1^8q]5PTq]Ge[rZV._rZhCfr[%Ojr[7[nr[Igr
r[[t!r\"1'r\4=+r\FI/r\XU3r\ja7r]'d8r]9p<r]Ks=pce@8nN_Xjr]p6Cofi79q`Oj>r]9p:r]'m9
r\ja5r\XU1r\FI-r\4=)q^qdtr[Rmrr[@anr[.UjrZq@cq]YhZ!?WB`+8[,V*VCE@)t+dD*W$oT+9!D^
+oW\_,Q8tf-2o7j-iPOn.JkXp/H.:$0E*[)1&`s-1]B612?#N52uYf93Vtl748qA;4nq565Kc<C5cd6G
5P75;4o7A@48V&=3<;-#r]'m9r\ja5r\XU1r\FI-r\4=)r\"1%r[e%!r[Rmqr[7[lr[%FerZhCdrZV.]
rZD"Yp`9,Lmi1^8q]5PTq]Ge[rZV._rZhCfr[%Ojr[7[nr[Igrr[[t!r\"1'r\4=+r\FI/r\XU3r\ja7
r]'d8r]9p<r]C3E4o.>:54q-k5b1/k5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$M+pcnO;pc\L:r]C!<r]0s;!&jp;2uY`7
2?#H31]B0/1&`m+0)dI%/H.1!.fLmr./kUn-N5=j,lT%f,5rb_+T!8[*r?uT*:FjA)XeXB*;^cR*r[8Y
+T<P`,5rhd,lT+h-N5Cl./k[p.fLsq/cIF&0`Eg+1B'*/2#B312uYf63W;)=48V/<4oIP=557?n5jgo4
5PRG>4o7A=48q;<3W;#;2uY`72?#H31]B0/1&`m+0)dI%/H.1!.fLmr./kUn-N5=j,lT%f,5rbb+T!8X
*r?uT*:FjA)XeXB*;^cU*r@&Y+T!>],5rhd,lT+h-N5Cl./k^q/,h+!/cIC%0E*[)1&`s-2#]B32Z#H4
3;tr83rV5<4SV)7557A45_23"5kmS=55RM?4Sq5>3rV/:3;tl92Z>T51]&s,0`Ea)0)dI%/H.0s.K1^o
-N5=j,lT%c,5rbb+T!5]*Zk8$q]5PRnf.?Bnf.QJrYt_Sq]5YWq]Ge[rZV7brZhCfq^)4hq^DFnr[[t!
r[n+%r\+7*r\FI/r\XU3r\ja7q`+R8q`=^<q`OX:pceI;b<UVDX?cPFpceR<q`Oa;r]:!<!BE1>3;tl9
2Z>T52#]<11B'$-0`E^(/cI=#/,h$t.K1ap-iPIl-2o1h,Q8nd+oWV]+8[,V*W$iF)u(??)uCWP*W@,W
+9!D[+oW\b,Q8tf-2o7j-iPOn.fLst/H.7#0)dO'0`Eg+1B'-02?#N22uYf93Vtl:48_2@4SV)7557?n
5b1/k5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO$_1niun5q`Xg=q`Fd<r]0s;r\jg8r&4O2r\OO/r\=C+r\+7&r[e%!r[Rmr
r[@amr[%OhrZh:aq]Pk[rZ:qWq],JPobus1oc!]Hq],JRrZ;%\rZM(]rZ_=dq^)4hr[@apr[Rmtr[e%$
r\+7)r\=C-r\OO1r\a[5r\sg9r]0j:r]C!>!BiUE4nq595Cl)l5kRA:557;<4T7G>3rV/=3;tl92Z>T5
2#]<11B'$-0E*U'/cI=#/,h$t./kUn-N5=j,lT%f,5rbb+T!8[*r?uT*;^]J)Whq4)Yb9K*<$uU*r[8\
+T<P`,5rhd,lT+h-N5Cl./k[p.fM!u/cIC%0E*[)1&a!.2#]B32Z>Z73;Y`83r;#94Sq;:557A45_MDq
5PRG>4o7A=48V)93;tl92Z>T52#]<11B'!,0E*U'/cI=#/,h$t./kUn-N5=j,lT%f,5rbb+T<J[*rI#Y
*W$iR)u(?6)>+pC)uCWS*W@,W+9!D^+oW\b,Q8tf-2o7j-iPOn.K1js/H.7#0)dO'0`Eg+1]B612?#N5
2uYf63W;):48qA;4nq595Kc<C5dEZJ5PRG;4o7A@48V)<3<2#>3&pmrr\ja5r\XU1r\FI-r\+7'r[n+#
r[[str[@anr[.UjrZqIfrZ_=brZM([rZ:qWq],JPobus1p_roHq],SUq]>_YrZM1`rZ_=drZqIhr[.Ul
r[@apr[Rmur[n+%r\+7)r\=C.r\XU3r\ja7r]'d8r]9p<!B`LC4Sq;:557?n5b1/k5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO$_1ofr+5r]U$=r]C*?r]0s;r\sg7!&Xd72?#H31]B0/1&`m+0)dI%/H.1!.fLjq-iPIl-2o1h,PrY`
+T<J^*r[2W*;^]P)Yb3+)#,!D)Z(KQ*;^cU*r[8\+T<P`,5rhd,lT+h-N5Cl.K1gr/,h+!0)dO'0`Eg+
1B'*,2>]?33;tr;3r;#:49.M@4nq565Cl)r5kRA:55RM?4T7G>3rV/=3;tl92Z>T52#]<11B'$-0E*U'
/cI=#.fLmr./kUn-N5=j,lT%f+o<D]+9!>\*W$iR)u^cK);Q/))>b?I)u^iV*W$oW+9!D^+oW\b,Q8tf
-2o7j-iPRo.fLst/cIC%0E*[)1&`s-2#]B32Z>Z43;tr;3rV5<4SV)754q/75_MDt5P75;4o7A@48V)<
3W;#;2uY`72?#H31]B-.0`Ea&/cI:".fLmr./kRm-2o1h,Q8nd+oWV]+8[)U*!$utr>Y_SoblR&p_irI
p`'2PrZ1tZrZD"[rZV7brZhCfr[%Okr[@apr[[t!r[n+%r\+7)r\FI/r\XU3r\ja7r]'d8r]:$?q`Oa=
pce75d6N7JZ9\(IpceR<q`Oj>q`=^:r\sm:!B2t:2Z>T52#]<11B'$-0E*U'/cI=#.fLmr./kUn-N5=j
,lT%f+o<D]+9!>\*W$iR)u^cK);Q/))>b?I)u^iV*W$oW+9!D^+oW\b,Q8tf-2o7j-iPRo.fLst/cIC%
0E*[)1&`s-2#]B32Z>Z43;tr;3rV2A4?WR)pc\C9ofn!mUHjAqJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5e')P5PRGA4o7A=
48V)<3W;#;2uY]82$#Qlr\XU1r\FI,r\+7'r[n+"r[Rmrr[@amr[%OhrZhCdrZV7`rZD"YrZ1tXq]#DN
q\f&Djqm\-q\f8Lq]#MSq]5PUrZM1`rZ_=drZqIhr[.Umr[Igrr[e%#r\"(%r\=C.r\XU3r\ja7r]'m;
q`=^<r&asApc\C9pcj<pqEX^<pce[?q`Oa;r]9p:r]'m9r\ja5r\XU1r\=C+r\+7&r[e%!r[Rmrr[7[l
r[%OhrZhCdrZV7`rZD+\q]5YUrYt_Qp_i`Ajqm\-q\f8Lq]#MSrZ1tZrZD"[rZV7crZqIhr[.Ulr[@aq
r[[t!r[n+%r\4=+r\FI/r\XU3r\ja7r]'m;r]9p<r]Ks=pce@8pHXBspcnO;q`Xg=q`Fd<r]0j8r\sg7
r\XL.r\=C+r\+7&r[e%!r[Igpr[7RhrZqIfrZ_4^rZD+\rZ1tXq\oPS)Z:TL)>+j/(\ejE)>G-L)uCWS
*W@,Z+9!D[+oW_c,lT+h-N5Cl./k^q/,h+!0)dO'0`Eg+1B'*/2?#N52u>T63W;)=48V/84nq565LD`I
5dEZJ5PRGA4o7A=48q;<3W:u<2ZYirr\ja5r\XU1r\=C+r\+7&r[e%!r[Rmrr[7[lr[%OhrZhCdrZV7`
rZD+\q]5YUrYt_Qp_i`Ajqm\-q\f8Lq]#MSrZ1tZrZD"[rZV7crZqIhr[.Ulr[@aqr[[t!r[n+%r\4=+
r\FI/r\XU3r\ja7r]'m;r]9s=!'C0Bpc\C9ofn!mUHjAqJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5eB;S5PRG>4o7A@48V)<
3W;#82uYZ71]]Eir\OO/r\=C*r\"1%r[[str[Igpr[.UjrZqIfrZ_=brZM1^rZ;%ZrZ(eSrYkYOp_`Z?
ith;(q\];Mq\o>NrZ(nXrZ;%\rZM1`rZ_=drZqIhr[7[nr[Igsq^h_"q_8")r\OO1q_nF4r]'m;r]9p<
!B`IE4SV)7557?n5lEt@5PRG>4o7A@48q;<3W;#;2uY`72?#H31]B0/0`Ea)0)dF$/,h$t./kUn-N5=j
,lT%f+oWV`+8[,Y*W@&X)uCQN)>b9A(ZlM+(],'H)>b?O)uCWS*W@,Z+9!D^+oW\b,Q9"g-N5Cl./k[p
/,h+!/cIF&0`Eg+1B'*/2#]E12uYf93W;)=48V/;4nq565PIEu5kRA:55RM?4T7GA3rV/:3;tl92Z>T5
1]&s,0`Ea)0)dF$/,h$t./kUn-Mo(f,Q8kc+T<J^*r?uW*<$oV)Z1KO)>b9D(ZQ;((],'H)>b?O)u^iS
*W@,Z+9!D[,5rke-2o7j-iPOn.fLst/H.:$0E*[)1&a!.2#]B32Z>Z43;Yc948V/;4nq565LD`I5d`lM
5PRG>4o7A@48q;<3W;#;2ZP`:2E(Olr\XU1r\FI,r\+7'r[e%!r[Rmqr[7[lr[%OhrZhCcrZM1^q]>_W
rZ(nVq\o>Lq\\l?jqdV+q\]2Jq\oGQq],SUrZ;%\rZM1`rZ_=dr[%Ojr[7[nr[Igsr[e%#r\+7)r\=C-
r\OO1r\jX4r]'m;r]1'A3rhA>4Sq;:54q-k5bgSq5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$h4ofr48q`Xp@q`Fd<r]0j8
q_nF1!&FX31]B0/0`Ea)0)dF$/,h$t./kUn-N5=j,lT%f+oWV`+9!>\*W@&U)u^cT)>G'G(\JR%(&/R;
(]G9N)>b?L)u^iV*W$rX+T<Sa,Q8tf-2o7j./k[p.fLst/cIC%0`Eg+1B'*,2?#N52uYf93W;)=3rqH+
rB0s?pceI;JO'0!ofr48r]U-@q`Fd<r]0s;r\sg7r\a[3r\OO/r\4=)r\"1$r[[str[@anr[.UjrZhCd
rZV7`rZD+\rZ1tXrYt_QrYbSMq\Sf=it_5&p_WfErYbSOrYthVrZ1tZrZD+^rZV7brZhCfr[%Okr[@ap
r[[t!r[n+&r\4=+r\OO1r\a[5r\sg9q`4X:r]C!>q`X^<pcnL<LHtMspce[?q`Oj>q`=U6r\sg7r\a[3
r\FI-r\4=)r[n+#r[[ssr[@anr[.UirZhCdrZV7`rZD+\q],SSrYkYOr"oDNq\Sf=it_5&p_WoHq\f8L
rYthVrZ1tZrZD+^rZV7brZhCfr[%Okr[@apr[[t!r[n+&r\4=+r\OO1r\a[5r\sg9r]0j:r]C!>q`X^<
pcm.kJO$V.ofr48r]U-@q`Fd<r]0s;r\sg7!&Xd72?#H31]B0/0`Ea)0)dF$/,h$t./kUn-N5=j,Q8nd
+oWV`+9!>\*W@&X)uCQQ)>b9J(\/@%(%i@;(],'K)>b?O)u^iV*W@,Z+9!D^+oW\b,Q8tf-2o:k./k[p
/,h+!/cIF&0`Eg+1]B612?#N52uYf63<;0%!':*@q`Oa=pceI;JO#tqJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_2245kmS=
55RM?4Sq5;3W;#;2uY`72?#E41BB9fr\FI,r\+7'r[e%!r[Rmqr[7[lrZqIfrZ_4^rZD"XrZ(nVrYkbR
q\]2Hp_M-iq\K&Fq\];Mq\oGQq],SVrZD+^rZV7brZhCgr[.Ulr[@apr[[t"r\"1'r\4=,r\OO1r\a[5
r\sg9r]0s=r&Xm?r]Ks=q`ad>JO'0!pcnO;q`Xg=r]C*?q`4X8r\sg7r\a[3r\FI-r\4=(r[n+#r[Rmr
r[@amr[%OhrZhCdrZM1^rZ;%ZrZ(nVq\oGOq\]2Hp_M-iq\K&Fq\];Mq\oGQrZ(nXrZ;%\rZM1`rZhCf
r[%Ojr[7[nr[Rmtr[n+%r\+7*r\FI/r\XU3r\ja7r]'m;r]9p<r]Ks=q`ad>pHXL!pcnO;r]U-@q`Fd<
r]0j8r\sg6r\XU1r\FI-r\4=(r[n+#r[Rmrr[@amr[%OhrZ_=brZM1^rZ;%ZrZ(nVrYkYOq\T>M(]>0F
(=<lo(AJ^F)#G3M)Z(KQ*<$uX*r[8\+T<P`,Q8tf-2T(h./k^q/H.7#0E*[)1&Ed+2#]E42u>T63W;)=
48V/84o7G<5LD`I5d`lP5PRG>4o7A@48q;<3W;#;2uY]82$#Qlr\XU0r\=C+r\"1%r[e$ur[Igpr[.Uj
rZqIfrZ_=arZD+\rZ1tXrYt_QrYbSMq\T#Cc5$3lq\T,HrYbSOrYthVrZ1tZrZD+^rZV7crZqIhr[.Ul
r[@aqr[[t"r\"1'r\=C-r\OO1r\a[5r\sg9r](!?3WM5<48qA;4o7G<5Cl(p5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
]0Q-UpceR<q`Oj>r]:$=r]'m9r\ja5r\XU1!&=R11B'$-0E*U'/cI:".fLjq-iPIl,lT%f,5rbb+8[,Y
*;^]P)>b9M(],!@("!`m(&JdD(],'K)?(QR)uCWS*r[8\+T<P`,5rha-2o:k./k^q/,h."0)dO'1&`s-
1]B612?#Q33;Y`;4$*F(q`Oa=q`a[;JNs3#pcnO;q`Xp@q`Fd<r]0s;r\sg7r\a[3r\OO.r\4=)r[n+#
r[[ssr[@anr[%OhrZhCcrZM1^rZ;%ZrZ(nVrYkYOrYYMKq\Ji>e.hZmq\K&Fq\];MrYkbTrZ(nXrZ;%\
rZM1`rZ_=er[%Ojr[7[or[Rmur[n+%r\4=+r\FI0r\a[5r\sg9r]0s=q`F[;q`Xg?ofr:<LHtW!pce[?
q`Oj>q`=^:r]'m9r\jX1r\OO.r\4=)r[n+#r[[ssr[@anr[%OhrZhCcrZM1^rZ;%ZrZ(nVrYkbRq\];K
r"f5Hp_D0jq\AlAq\T5Kq\fAOrYthVrZ1tZrZD+^rZ_=drZqIhr[.Umr[Igsr[e%$r\+7)r\FI/r\XU3
r\ja7r]'m;r]9p<r]Ks=q`a[;e3JRM[6XLOpceR<r]L'>r]:$=r]'m9r\ja5!&O^52#]<11&`m+0E*R&
/H.1!.K1ap-iPFk,lT%f+oWV`+9!>\*W@&X)u^cQ)?(KM(],!@("<rm(&JdD(],'K)?(QR)u^iV*W@,Z
+9!D^+oW\b,lT+h-N5Cl.K1gr/H.7#0)dR(1&`s-2#]B32Z>Z73;to=3][7%q`F[;q`Xg?ofn!mVEf\t
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5eB;V5PRGA4o7A@48V)93;tl92Z>T51]B-00`a!`r\+7'r[n+"r[Rmrr[7[lrZqIf
rZV7`rZD+\rZ1tXrYt_Qq\];Kq\K&Dob@B=rY4'"ob@9<rYGAIrYYMMrYkbTrZ(nXrZD"[rZ_=drZqIi
r[7[nr[Rmtr[n+&r\4=+r\OF.r\ja7r]'m;r]1'A48h8<4T7M=557?n5QF(H5PRG>4o7A@48q;?3W;#8
2uY`72#]<11B'!,0E*U'/H.1!.fLjq-iPFk,lT%f+oWV`+9!>\*W@&X)u^cT)>b9M(],!F(%i9j'DN::
(&f!G(]G9N)>b?O)u^lW*r[8\+T<P`,5rhd,lT.i-iPOn.fM!u/cIF&0`Eg+1]B612?#N52uYf93W;)=
48V/;4nq595PdX&5kmS=55RMB4Sq5>3rV/=3;tl62Z>Q41]B0/0`Ea)0)dF$/,h$t./kRm-2o1h,5rbb
+T<J^*r?rV)u^cT)>b9M(]G3J(&\m?'\X6"'`Jd@'`/XB(AepI)#bEP)ZC]T*<$uX*r[8\+T<P`,Q8tf
-2o7j./k[p/,h+!0)dO'1&`s-1]B612?#N52uYf93W;)=48V/;4nq595L_rL5d`lS5PRG>4o7A@48q;?
3W;#82uY`71]T<41Gf"cr\4=)r\"1$r[[str[@anr[%OhrZhCcrZM1^rZ;%ZrZ(nVrYkbRq\];Kq\K&D
ob>mhp_<K<rYGAIrYYVPq\oGQrZ1tZrZD+^rZV7brZhCfr[.Ulr[@aqr[e%#r\+7)r\=C.r\XU3r\ja7
r\sp=3<2)=3rV5<4Sq;:557?n5c-et5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$h4q`jj>q`Xg=r]C*?r]0s;q`"L3r\XU1
r\4C,!AH5,0E*R&/H.1!.K1ap-iPFk,lT%f+oWV`+8[)X*;^ZR)?(KM(]G3I(%i:3'Bp/)'E/^F'DiL=
(&f!G(]G9N)?(QR)uCWS*r[8\+T<Sa,Q8tf-N5Cl./k^q/,h+!0)dO'0`Ej,1]B612Z>Z43;bf;3rV5<
4T7M=557?n5QF(H5PRG>4o7A@48q;?3W;#;2uY`72?#H31]B-.0`Ea)/cI=#/,h!s./kUn-2o.g,5rbb
+T<J^*W@&X)u^cQ)?(KM(]G3I(&/L6'BTr&'D3(7(&f!G(]G9N)?(QR)u^iV*W@,Z+9!D^,5rhd,lT.i
-iPOn.fM!u/cIC%0`Eg+1B'-02?#N52uYf93W;):48qA>4nq595PdX&5l3e@557;?4Sq5;3W;#;2uY`7
2?#H31B'$-0`E^(/cI:".fLmr-iPIl-2o.g,5rbb+9!>\*W@&X)u^cT)?(KM(],!G'`]!D'_2q%'(lq2
'`/XB(B,-I)#G6N)u^iV*W@,Z+T<P`,5rhd-2o7j-iPRo.fM!u/cIC%0`Eg+1]B612?#N52uYf93W;)=
48V/;4nq595L_rL5d`lS5PRG>4o7A@48q;?3W;#;2uY`72?#E41BB9fr\=C+r\+7&r[e%!r[Igpr[7[k
rZhCdrZV7`rZD+[rZ(nVrYkYOrYYMKrYGAGp_<94jq@G&ob@09rYGAIrYYVPrYkbTrZ(nXrZ;%\rZM1a
rZhCfr[.Ulr[@aqr[e%#r\"1(r\=C-r\XU3r\ja7r\sp=3<2)=3r;#<4Sq;:557?n5c-et5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO%%:ofr48q`Xp@q`Fd<r]0s;r\sg7r\XL.r\4C,!AH5,0E*O%/,h$t./kUn-N5:i,Q8nd+T<J^
*r[/V)uCNP)#b?K(B,'D'_N-h')3.5'`JjE(B,-L)#bEP)ZC]T*<$uX*r[8\+T<Sa,Q8tf-N5Cl.K1gr
/,h."0)dR(1&a!.2#]B32Z>Z73;to=3][7%q`Fd>q`Xg?ofn9uofr48q`Xp@r]C*?q`4X8r\sg7r\XU1
r\FI-r\+7'r[e%!r[Rmqr[.UjrZqIerZV7`rZ;%ZrZ(nVrYkbRq\];KrYGAGq\8T7e.VNip_<T?q\K/I
rYYVPrYkbTrZ(nXrZ;%\rZV7brZhCgr[.Ulr[Igsr[e%#r\+7)r\FI/r\XU3r\ja7r]'m;r]:$?q`Oa=
q`ad>qEU$*pcnO;pc\U=r]C*?r]0j8r\ja5r\XU1r\FI-r\+7&r[e$ur[Igpr[.UjrZhCdrZV7`rZ;%Z
rZ(nVrYkbRrYYMKrYGAGr"K,Fob5gfob7*7q\B)Gq\T5KrYb\RrYthVrZ1t[rZM1`rZhCfr[%Okr[@ap
r[[t!r[n+&r\=C-r\OO1r\a[6q`+I6r]C!>r]U$?pcm7nJO$h4ofr48q`Xp@r]C*?q`4X8r\sg7r\XU1
!&=R11B'$-0E*U'/H.1!.fLjq-N5=j,lT"e+oWV`*r[2Z*<$oV)ZCWO)#b?N(AejD'_2pe')3.8'`/XB
(B,-L)#bEP)ZC]T*<$uX*r[8\+oW\b,Q9"g-N5Cl.K1js/H.7#0E*[)1B'*/2#]B32Z>W93&gmtr]0s=
r]C!>q`Xg?pcj<pVEf\tJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f#_Y5PmYA4o7A@48q;?3Vtf52Z>Q41]B0/0E<a,0/*;V
r[e$ur[Igor[.UirZhCdrZM1^rZ;%ZrYt_QrYYMKrYGAGq\8o@lk8Fmlk91/q\8oBrYGJLrYYMMrYkbT
rZ1tZrZD+^rZ_=dr[%Ojr[7[or[Rmur[n+&r\=C-r\OO1r\a[5r]'g9!'1$>r]C*Aq`X^<pcjU#ofr=;
q`Xg=r]C*?r]0s;r\sg7r\a[3r\FI-r\4=(r[n+"r[Rmrr[7[krZqIfrZV7`rZD+[rZ(nVrYkbRrYYMK
rYGAGq\8o@lk8Fmmh5C/q\9#Eq\K/IrYYVPrYkbTrZ(nXrZ;%\rZV7brZqIhr[.Umr[Igrr[e%$r\+7*
r\FI/r\XU4r\sg9r]0j:r]C*Aq`X^<q`jpBNBm8'pceR<q`Oj>r]:$=r]'m9r\ja5r\OO/r\=C*r\"1$
r[[ssr[@anr[%OhrZhCcrZM1^rZ1tXrYthTrYb\PrYPGIrY>2B!>?.F'CQRr&aU/*'DiLC(&JdG(]G9N
)?(QR)u^iS*r[;]+oW_c,lT.i-iPOn.fLst/H.:$0`Eg+1]'$.2Z>Z73;tr;3r;#<4T7M=557@l5_224
5kRA=55RM?4T7GA3rV/=3;tl92Z>T52#]610`a!`r\4=(r[n+"r[Rmrr[7[krZqIfrZV7`rZD+[rZ(nV
rYkbRrYYMKrYGAGq\8o@lk8Fmmh5C/q\9#Eq\K/IrYYVPrYkbTrZ(nXrZ;%\rZV7brZqIhr[.Umr[Igr
r[e%$r\+7*r\FI/r\XU4r\jj;2ukr;3Vtl:48qA>4nq5<5Cl(s5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO_*IZXr]^*?
q`Oj>r]:$=r]'m9r\ja5r\XU0r\=C+!%n:)0)dI%/,h$t./kRm-2o1h,5rbb+T<G]*W@&X)u^cT)?(KM
(\eaE'`/R7'%@Nd')N@;'`JjE(B,-L)#bEP)ZC]T*<$uX+9!D^+oW_c,lT+h-iPOn.fM!u/cIC%0`Eg+
1]B612?#N52uYc;3B7("r]:$?q`Oa=pceR>M*U_ur]^*?r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*r\"1%
r[[ssr[@amr[%OhrZ_=brZM1]rZ1tXrYthTrYb\PrYPPLq\AuBq\/N5e.MHgp_3N=q\B)Gq\T5KrYb\R
rYthWrZ;%\rZV7brZhCgr[.Ulr[Igrr[e%$r\+7)r\FI/r\XU4r\sg9q`4X:r]C!>r]U$?q`jpBNBm8'
q`ad<r]L0Aq`=U6r\sg6r\XU1r\=C+r\+7&r[e%!r[Igor[.UirZhCdrZM1^rZ:qVrYthSrYYMKrYGAG
rY5/A!#,#<e.M?dp_3N=q\B)GrYPGKrYkbTrZ(nXrZ;%\rZV7brZhCgr[.Umr[Igsr[e%$r\+7)r\FI/
r\XU4r\sg9r]0j:r]C!>r]U$?q`iRqJO$h4ofrF>pc\U=q`Fd<r]0s;r\sg7r\a[2r\=I.!AQ>.0E*U'
/cI:".K1ap-N5=j,lT"e+oWV`*r[2Z*<$oV)ZCWR)#b?N(AejD'`/R7'%@Ng')3.;'`/XE(AepI)#bEP
)ZC]T*W@,Z+9!G_,5rhd-2o7j-iPRo.fM!u0)dO'0`Ej,1]B612Z>W93&gmtq`4X:r]C!>r]U$?q`fWs
VEf\tJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5f#_\5PmY>4oRS@48q;?3W;#;2uY`72?#E21B'$-0*!U*/h[,Sr[Rmrr[@am
rZqIfrZV7`rZD+[rZ(nVrYkbRrYYVNq\K/Gq\8o@ob,=Xob.-8q\9#ErYGAIrYYVPq]#MSrZ;%\rZM1a
rZhCfr[7[nr[Igsr[e%$r\+7*r\FI/r\a[5r\sg9!BE.?3W;):48qA>4nq595E%l&5PmYA4o7A@48V)<
3W;#;2uY]62#]<11&`m+0E*R&/H.-u./kUn-2o1h,Q8kc+T<J^*W@&X)u^cT)?(KP(]G3I(&J^B'DN3Z
&bQe6'DiLC(&f!J(]G9K)?(TS*<$uX*r[8\+T<Sa,lT+h-iPOn.K1js/cIC%0`Eg+1B'-02?#N52uYf9
3W;):48qA>4o7G956*s.5kmS@55RM?4T7G>3rV,92uY]62#]<11&`m+0E*O%/,h$t./kUn-2o.g,5rbb
+9!>\*W@&X)u^cQ)#b?N(AejD'`JdD')E6[&bm"9'DiL@(&f!J(]G9N)?(QR)u^iV*W@,Z+T<P`,5rke
-N5Cl./k^q/,h."0E*[)1B'*/2#B3.3;tr;3rV5<4Sq;=54q.o5_2245kmS@55RM?4T7G>3rV/=3;tl9
2?#H31]B*/0EEj]r\+7&r[e$ur[@anr[%OhrZhCcrZM1^rZ1tXrYthTrYb\PrYPPLq\AuBq\/`;`=_bU
q\/i@rY>DJrYPPNq\fAPrZ(nXrZ;%\rZM1arZqIhr[7[nr[Igsr[n+%r\4=+r\FI0r\a[5!B2q;2uYf9
3W;):48qA>4o7G95Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO_*Ic[q`ad<r]L0Ar]:$=r]'m9r\ja5r\XU1r\=C+
r[n1&!A,o&/,h$t./kUn,lT%f,5r_a+9!>\*;^]S)?(KP(],!I(&J^E'Cle/&_@Te&bm"9'DiLC(&f!G
(]G9N)ZC]T*<$uX*r[8\+oW\b,lT+h-iPOn.fLst/H.=%0`Eg+1]B612>]<53&gmtq`=^<q`Oj@pceI;
N'R/&q`am?q`Oj>r]:$=r]'m9r\ja5r\XU0r\=C+r\"1$r[[ssr[7[lrZqIfrZ_=arZ;%ZrZ(nVrYkbR
rYYVNrYGAGq\9#Cne1^0e.DBeob.-8q\9#ErYGJLq\];NrYthVrZ1t[rZM1`rZhCfr[.Ulr[@aqr[e%#
r\+7*r\FI/r\a[5r\sg9r]0s=q`Fd>q`X^<pceaDNBm8'q`am?r]L'>r]:$=r]'m9r\ja4r\OO/r\4=)
r\"1$r[Rmrr[7[lrZqIerZV7`rZ;%ZrZ(nVrYkbRrYYVNrYGJJp_<]@q%EW=ob#deob$j0q\/i@q\K/I
rYYVPrYkbTrZ(nXrZD+^rZV7cr[%Ojr[7[or[Rmur\"1'r\=C-r\XU3r\ja7r]'m;r]9p<r]L'@pceI;
g-C3S]0Q-Uq`am?q`Oj>r]:$=r]'m9r\ja5r\XU0r\4C,!AH5,0)dF$/,h!s-iPIl,lT%f,5r_a*r[2Z
*<$oV)ZCWR)#b?N(AejD'`Jd:')3'g&GQk1')N@>'`JjH(B,-I)#bHQ)u^iV*W@/[+T<P`,Q8tf-N5Cl
./k^q/H.7#0E*^*1B'*/2?#K72`C^qr]'m;r]9p<r]L'@pceI;JO$;%JO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22:5l3e@
55RM?4T7GA3rV/=3;tl92Z>T52#]<11&`m+/c[F'/1gcNr[Igpr[.UirZhCdrZM1^rZ;%YrYthTq\];K
rYGAGrY55Cp_*-0d1Gs_p_*Q>q\8oBrYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Ojr[@aqr[[t!r\+7)
r\=C.r\XU3r\ja7!B<%=3;tr;3rV5<4Sq;=557@$5l3e@55RMB4Sq5>3rV/=3;tl92Z>T52#]900`Ea)
0)dF$/,h!s-iPIl,lT"e+oWV`*r[2Z*<$oV)ZCTN(]G3L(&J^B'DiF2&_%B_&bm"<'DiLC(&JdG(]G9N
)?(QR)u^lW*r[8\+oW\b,Q9"g-iPOn.fM!u/cIF&0`Eg+1]B612?#N23;tr;3rV5?4SV):557>B5`J&+
5PRGA4o7A@48V)<3W;#;2uY`72#]<11B'!,0E*R&/,h$t.K1^o-2o1h,5rbb+9!>\*W@&X)ZCWR)#b?K
(B,'J'_i@=&ciRVoF]I^ne(X0rY,/CrY>DJq\T5KrYb\SrZ(nXrZD+^rZV7crZqIhr[7[or[Rmur\"1'
r\4=,r\OO1r\a[6r]'d8q`Fd>pc\L<pcmItJO$h4q`jj>q`Xp@q`Fd<r]0s;r\sg7r\a[3r\FI,!&"@+
0E*U'/H.1!.K1^o-N5:i,5rbb+T<G]*W@&X)u^cT)#G-K(B,'G'`/R@'(6F^&FpG.')iRA'`JjE(B,-L
)#bEP)ZC]T*W@,Z+9!G_,5rhd-2o:k./k^q/H.7#0E*[)1&a!.2#]?52DtOnq`+R8r]:$?r]Ks=q`ad>
JO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_22:5l3e@55RMB4Sq5>3rV/=3;tl92?#H31]B0/1&`j*/H@=&/1gcMr[@an
r[%OhrZ_=brZD+\rZ1tWrYkbRrYYVNrYGAGq\8o@q\&Q6b7O4Vp_*H;rY5>Hq\K/IrYYVPrYkbUrZ1tZ
rZM1`rZ_=er[%Okr[Igrr[e%$r\+7)r\FI/r\XU4r\jj;2ukr;3W;):48qA>4o7G<5E%l)5PRGA4o7A@
48V)<3W;#;2uY]62#]<11B'!,0E*R&/,h$t./kRm-2o.g,5rbb+9!;[*<$oV)ZCWR)#b?N(B,'G'`/R=
')3'^&FU5+')iRA'`JjH(B,-L)#bEP)ZC]T*<$uX*r[;],5rhd,lT.i-iPRo/,h+!0)dR(1&`s-2#]B3
2Z>Z73;tr;3rV5<4Sq;=557>B5`J&+5PRGA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(/cI:".K1ap
-N5:i,Q8kc+T<J^*W@&X)uCNP)#b?N(B,'G'`/R@')W@<&^(aV&bm"9'E/^C(&f!J(]G9N)?(QR)u^iV
*r[8\+T<Sa,Q8tf-iPOn.K1js/cIC%0`Eg+1]B612?#N52uYf93W;)=48qA;4o7G<5MAAR5eB;Y5PRGA
4o7A@48V)<3W;#;2uY]62#]<11B&s-0**^Zr[n+"r[Rmqr[.UjrZhCdrZV7_rZ1tXrYthTrYb\PrYPPL
rY>;Eq\/`;p^t[\mh,=-rY,/CrY>DJrYPPNrYb\RrYthVrZ1tZrZM1arZhCfr[.Ulr[Igsr[e%$r\4=+
r\FI0r\X^72?5Z72uYf93W;)=48V/;4o7G<5Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO`'F)^pce[?q`Oj>q`=^9
q`"L3r\XU1r\=C+r\+7%!%S(#/,h$t./kRm-2o.g+oWV`*r[2Z*<$oV)>b9M(]G3L(&epE'DN45&],+P
&bm"<'DiLC(&f!J(]G9N)?(QR)u^iV*W@/[+T<Sa,Q9"g-N5Fm.fLst/cIC%0`Ej,1]B612Z>W93&gmt
q`4X:r]C!>r]U-Bpcjg)pcnX>q`Xg=r]C*?r]0s;r\sg7r\a[3r\OO.r\+7'r[e$ur[Igpr[.UirZ_=b
rZM1]rZ1tXrYkbRrYYVNq\K/GrY55Cp_*63_@ZJSp_*H;q\9#ErYGJLrYYVPrYkbTrZ1tZrZD+_rZ_=e
r[%Ojr[@aqr[e%#r\+7)r\FI/r\XU4r\sg9r]0s=r]C!>q`Xg?pceaDO?iS*q`am?r]L'>r]:$=r]'m9
r\ja5r\OO/r\=C*r[n+#r[Rmrr[7[krZqIerZM1^rZ;%YrYthTrYb\PrYPPLq\B)Eq\/`;r"8l>_@ZAP
p_*Q>q\8oBrYGJLrYYMNrZ(nXrZ;%]rZV7crZqIir[7[nr[[t!r\"1'r\=C-r\OO2r\ja7r]'m;r]:$?
q`Oa=q`ad>g-C3S^-MHXq`am?q`Oj>r]:$=r]'m9r\ja5r\XU1r\=C*!%n:)0)dF$.fLmr./kRm,lT"e
+oWV`*r[2Z*<$lU)?(KP(],!I(&epE'DN45&],+S&bm"9'DiLC(&f!J(]G9N)?(QR)u^lW*r[8\+oW\b
,lT+h-N5Fm.fM!u/cIF&0`Ej,1]B332DtOnr\sg9r]0s=r]C!>q`Xg?pcj<pX?_>%JO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5f>q_5PRGA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(/-%1$.kCTJr[7[lrZqIfrZV7`rZ;%ZrZ(nV
rYb\PrYPGIq\9#Cp_*?6\IeEGq\&lAq\9#ErYGAIq\fAPrZ(nXrZD+^rZV7crZqIir[@apr[[t"r\"1(
r\=C-r\XU3r\ad:3;ki93W;)=48V/>4o7G<5EA))5PmYA4o7A@48q;?3W;#;2uY`72?#E21B'$-0E*U'
/H.-u.K1^o-2o1h,5r_a+9!>\*W@&X)ZCWR)#b?N(B,'G'`Jd@')3'O&FpG4')N@>'`JjH(B,-L)#bEP
)ZC]T*<$uX+9!D^+oW_c-2o7j./k^q/,h."0E*[)1&a!.2#]B32uYf93Vtl:48qA>4o7G<56*s15kmS@
55RMB4Sq5;3W;#;2uY`72#]<11B'!,0E*R&/H.-u./kUn-2o.g,5r_a+9!>\*<$oV)Z(BN(]G3L(&J^E
'DN49&HEEU&FpG4')N@A'`/XE(B,-L)#bEP)ZC]T*<%#Y+9!G_,5rke-2o:k./kar/H.7#0E*[)1&a!.
2#]B32uYf93W;)=48V/;4o7G<5MAAR5e]MY5PmYA4o7A@48q;?3W;#;2uY`72?#E21B'$-0*!U*/h[,S
r[Rmrr[7[krZqIerZM1^rZ;%ZrZ(nUrYb\PrYPPLrY>;ErY,&>p^t.Mne(j6q\/i@rY>DJrYPPNrYb\R
rYthVrZ1t[rZM1`rZhCgr[.Umr[Rmtr[n+&r\4=+r\OO1!Au_72?#Q63;tr83rV5?4Sq;=557?n5cd5%
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO%.=pcnO;r]U-@r]C*?r]0s;r\sg7r\XU1r\FI,r\+7'r[\%!!@fSu.K1^o-2o1h
,5rbb+9!;[*<$oV)ZCWR)#b?N(B,'G'`Jd@')3'L&G6Y4')N@>'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!D^
,Q8tf-2o:k.K1gr/H.:$0E*^*1B'*/2?#K72`C^qr]'m;r]:$?q`Oj@q`ad>O$NJ)q`am?q`Oj>r]:$=
r]'m9r\ja4r\OO/r\4=(r[n+"r[Igpr[.UirZhCdrZM1^rZ1tXrYthTrYYVNrYGAGrY55Cq\&Q6]FaWG
q\&c>rY55ErYGJLrYYVPrYkbUrZ1tZrZM1`rZhCgr[.Ulr[Igsr[e%$r\+7*r\OO1r\a[5r\sg9r]0s=
r]C!>r]U-BpceaDO?iS*q`am?r]L'>q`4X8r\ja5r\XU1r\=C+r\"1%r[[ssr[@amrZqIfrZV7`rZ;%Z
rZ(nVrYkbQrYPPLq\B)Eq\/i>p(79:]FaWGq\&c>rY5>Hq\K/IrYYVPrYthVrZ1t[rZM1arZhCgr[.Um
r[Rmtr[e%%r\4=+r\OO1r\a[6q`+R9q`Fd>q`Xg?pcmItJO$q7pcnX>q`Xg=r]C*?r]0s;r\sg7r\XU1
r\FI,r[n1&!A,o&/,h!s./kRm,lT%f,5r_a+9!;[*<$oV)ZCTQ(]G3I(&epE'DiF8&\J\G&c34<'E/^C
(&f!J(]G9N)?(QR*<$uX*r[;]+oW_c-2o7j-iPRo/,h+!0)dO'1&a!.1]]Hk!&aa6r\sg9r]0s=r]C!>
r]U-Bpcj<pX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f>q_5PRGA4oRS@48q;?3W;#;2uY`72#]<11B'!,0E*R&.f_"!
.4P6Er[.UjrZhCcrZM1^rZ1tXrYthSrYYVNq\K/GrY55Cp_*?6ZOlmDq\&c>rY5>HrYGAIrYYVQrYthV
rZ;%\rZM1arZhCfr[7[nr[Rmur[n+&r\=C-r\OO1r\ad92ZPf93;tr;3r;#<4Sq;=55RR*5kmS@55RMB
4T7GA3r:r:3;ti82?#H31B'$-0`E^(/cI:".K1ap-N5:i,Q8kc+9!>\*W@&X)u^`S)#b?N(AejG'`Jd@
')3'C&GQk7')N@A'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rke-2o:k.K1gr/H.:$0E*^*1B'*/2?#N5
2uYf93W;)=48V/>4nq5<56*s15kmS@55RMB4T7GA3rV/=3;tl92Z>T52#]901&`j*0)dF$/,gsr-iPIl
,lT"e+oWS_*r[/Y)u^cT)?(KP(]G3L(&epE'DN48&HNFS[1N*Fp_*Q>q\8oCrYPPNrYb\RrYthWrZ;%\
rZV7brZqIir[7[or[[t!r\"1(r\=C.r\XU3q`"L6q`=^<q`Oj@pceR>g-C3S^-MHXq`am?r]L0Ar]9p:
r]'m8r\a[3r\FI-r\4=(!%e4'/cI:".K1ap-N5:i,Q8kc+9!>\*W@&X)u^`S)#b?N(AejG'`Jd@')3'C
&GQk7')N@A'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rke-2o:k.K1gr/H.:$0E*^*1B''12)P@kr\ja7
r]'m;r]:$?q`Oj@pceR>JO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=5kmS@55RMB4T7G>3rV/=3;YW52#]<11B'!,
0)dI%.f_"!.4P6Er[.UjrZhCcrZM1]rZ(eSrYb\PrYPPLrY>;ErY,&>p^sV>p_!K<q\/rCq\B)GrYPPN
rYkbTrZ(nXrZ;%]rZ_=drZqIir[@aqr[e%#r\+7)r\FI/r\XU3!B2q;2uYf63Vto;4Sq;=55RR*5kmS@
55RMB4T7GA3rV/=3;tl92Z>T52#]901&`j*0)dI%/,h!s./kRm,lT%f+oWS_*r[/Y)u^cT)?(KP(]G3L
(&epE'DN48&[2iA&c34<'E/^F(&JdG)#bEP)ZC]T*<$uX+9!D^,5rke-2o7j.K1gr/H.:$0E*^*1B'*/
2#]E42uYf93W;)=48V/>4nq5<56*s15kmSC55RM?4T7GA3rV/=3;tl92Z>T52#]901&`j*/cI=#/,gsr
-iPFk,lT"e+T<J^*W@&X)u^cT)?(KP(]G3L(&epH'DN48&c<3G&GQk7')iRA'`JjH(B,-L)#bEP)ZC]T
*<$uX+9!G_,5rke-2o:k.K1js/H.:$0`Eg(1]B612Z>Z73;tr;3rV5<4T7M=55RRu5_2275kmS@55RMB
4T7GA3rV/=3;tl92Z>T52#]901&`j*/c[I(/M6rPr[Igpr[.UirZhCcrZD+\rZ(nVrYkbRrYYVNrYGJJ
rY55Cp_*?6YRpRAq\&c>rY5>Hq\K/JrYb\RrYthVrZ1t[rZM1arZqIhr[.Unr[Rmur\"1'r\=C-r\FR3
1]TB32Z>Z73;tr;3rV5<4T7M=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=pcnX>q`Xp@r]C!<r]0s:r\ja5
r\XU1r\=C+r\"1%r[Ims!@]Js-iPFk,lT%f+T<J^*r[/Y)u^cT)?(KP(]G3L(&J^E'DiF8&ZlW>&c34?
'DiLC(&f!J(]G9N)?(QR)u^lW*r[8\+oW\b,lT.i-iPRo/,h."0)dR(1&a!.2#]?52DtOnr]'d8q`Fd>
q`Xg?q`g-,pcnX>q`Xp@r]C*?r]0s;r\sg7r\a[3r\FI-r\+7&r[e$ur[@anr[%OgrZ_=arZD+\rZ(nV
rYkbRrYYVNrYGJJrY55Cq\&Q6YRpRAp_*Q>rY55ErYGJLrYYVPrYthVrZ1t[rZM1`rZhCfr[.Umr[Igt
r[n+%r\4=,r\OO1r\ja7r]'m;r]:$?q`Oa=q`amA!'lW2pcnaAq`Xg=r]C*?r]0s;r\s^3r\OO/r\4=)
r[n+#r[Rmqr[.UjrZhCcrZM1]rZ1tXrYthTrYYVNq\K&CrY,&>p_!E8Z4QdCq\&c>rY5>HrYGAIrYYVP
rYthVrZ1t[rZM1arZhCgr[.Umr[Rmur\"1'r\4=,r\OO1r\ja7r]'m;r]:$?q`Oj@pceR>g-C3S^-MHX
q`am?r]L0Ar]:$=r]'m9r\ja5r\XU0r\=C*r[e+$!A#f$.fLjq-iPFk,Q8nd+T<J^*r[/Y)u^cT)?(KP
(]G3L(&epE'DiF8&[2iA&bm"<'E/^C(&f!J(]G9N)?(TS*<$uX+9!D^+oW_c,lT.i./k[p/H.7#0)dR(
1B''11c,1hr\ja7r]'m;r]:$?q`Oa=q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=5kmS@55m_B4T7GA3rV/=
3;tl92Z>T52#]901&`j*0)dF$.KCmu.4P6Dr[%OgrZ_=arZD+\rZ(nVrYkbQq\T5IrY>DHq\/i>ob";;
p_!B9q\/rCrY>DJrYPPNrYb\RrYthVrZ;%\rZV7brZqIir[7[nr[[t!r\"1(r\=C-r\XU3!B)h92Z>Z7
3;tr;3rV5?4Sq;=55RR*5l3e@55m_E4Sq5>3rV/=3;tl92Z>T51]B0/1&`j*/cI=#.fLjq-iPFk,Q8nd
+T<G]*W@&X)ZCWR)#b?K(B,'J'`Jd@'(lj@&G6Y4')iRA'`JjH(B,-L)#bEP)ZC]T*W@,Z+9!G_,Q8tf
-N5Fm.K1js/cIC%0`Ej,1]B612?#N53;Y`83rV5?4Sq;=55RPE5`e8.5PmYA4oRSC48V)<3W;#;2uY]6
2#]<11&`m+0E*O%/,h$t./kRm,lT"e+oWV`*r[2Z)u^cT)?(KP(],!F'`Jd@')3(:&@)l?&cNF?'E/^C
(&f!J(]G9N)?(TS*<$uX+9!D^+oW_c-2o7j./k^q/,h."0E*[)1B'*/2#]E42uYf93W;)=48V/>4nq5<
5MAAR5e]M\5PRGA4oRS@48q;?3W;#;2uY`72?#E21B'$-0E*O'/-.:Qr[Rmqr[7[krZhCdrZM1]rZ1tX
rYkbRrYYVNq\K/GrY5>Fp_*63YRpI>q\&lAq\9#ErYGJLrYYVPrYkbTrZ1tZrZD+_rZhCfr[.Umr[Igs
r[n+%r\4=,r\FR31]TB32?#N53;Y`83rV5?4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=pcnX>r]U-@
r]C*?r]0s;r\sg7r\a[2r\FI-r\+7'r[e$u!%@pt.K1^o,lT%f,5r_a+9!;[*<$oV)ZCTQ(]G3I(&epE
'E/X>&Z638&bm"<'DiLC(B,-L)#bEP)ZC]T*<$uX+9!G_,5rke-2o:k./kar/H.:$0`Eg+1B'-02$#Tn
!&jg8r]'m;r]:$?r]L'@q`amAO$NS,pce[?r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*r[n+#r[Rmqr[7[j
rZhCdrZM1]rZ1tWrYkbRrYYVNrYGJJq\9#Cq\&Z9WY"h8q\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+_
rZhCfr[.Umr[Igsr[n+%r\4=,r\OO1r\a[5r\s^7r]:$?r]L'@q`amA!'lW2q`jsAq`Xp@r]C!<q`+R6
r\a[3r\OO.r\4=)r[e%!r[Igpr[.UirZ_=brZM1]rZ(nVrYkbRrYYVNrYGJJq\9#Cq\&Z9q%0hCob%'6
rY,/CrY>DJrYPPNrYbSPrZ(nYrZM1`rZhCgr[.Umr[Rmtr[n+&r\4=,r\OO1r\ja7r]'m;r]:$?q`Oj@
pceR>g-C3S^-MQ[pce[?r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*r[e+$!A#f$.fLjq-iPCj,Q8nd+T<G]
*W@#W)ZCWR)#b?N(B,'G'`JdC')3'=&G6Y4')N@A'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!G_,Q8tf-N5Fm
.K1js/cIC%0`Ej,1BB<h!&X[4r\ja7q`4X:r]C*Aq`Xg?q`fWsX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f>q_5PmYD
4o7A@48q;?3W;#;2uY`72?#E21B'$-0E*R&/H.+!-ik_Er[7[jrZhCdrZM1^rZ1tXq\oGNrYPPLq\B)E
rY,/Ap^sD8p_!96rY,/Cq\K/IrYYVQrYthVrZ1t[rZM1arZhCgr[7[nr[[t!r[n+&r\=C-r\XU3!B)h9
2Z>Z73;tr;3rV5?4Sq;=55RR*5l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`Ea)/cI:".K1^o-N5:i
,5rbb+T<G]*W@#W)ZCWR)#b?N(B,'G'`JdC')3'=&G6Y4')N@A'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!G_
,5rhd-2o:k.K1js/cIC%0`Eg+1B'-02?#N52uYf93W;)=48qA>4o7G?56*s15l3eC55RMB4T7G>3r:o9
2uY]62#]<11&`m+0E*O%/,h!s-iPIl,lT"e+oWS_*r[/Y)u^cT)?(KP(]G3L(&epE'DiF;&c!!D&G6Y4
')iRA'`JjH(B,-L)#bEP)ZC]T*<%#Y+T<P`,Q8tf-N5Fm.K1js/cIC%0`Ej,1]B612Z>Z73;tr;3r;#<
4T7M=55RRu5_2275l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`Ea)/H@:%.kCTJr[7[lrZqIerZV7`
rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Ap^sM;ob%'6q\/rCrY>DJrYPPNrYb\RrYthVrZ;%\rZV7brZhCg
r[7[or[[t"r\"1(r\=C-!AlV52#]B32Z>Z73;tr;3rV5?4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=
pcnX>r]U-@r]C*?r]0s;r\sg7r\a[2r\FI-r\+7&r[e$u!%7jr./kUn,lT%f+oWV`*r[2Z)uCQQ)#b?N
(B,'G'`JdC')3'7&Gm(7')iRA'`/[F(]G9N)?(QR*<$uX*r[;]+oW_c-2o:k./k^q/H.7#0E*^*1B'*/
2$#Tn!&jg8r]'m;r]:$?r]L'@q`amAO$NS,q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[e%!r[Igo
r[.UirZ_=brZD+\rZ1tWrYkbRrYYVNrYGJJq\9#Cq\&Z9U_*D8q\&c>rY5>HrYGAIrYYVQrYthVrZ;%\
rZM1arZhCgr[7[nr[Rmur\"1(r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@q`amA!'lW2q`jsAq`Xp@r]C!<
r]'d6r\a[3r\OO.r\4=(r[e%!r[Igor[%OhrZ_=arZD+[rZ(nVrYkbRrYYVNrYGJJrY55Cq\&Z9q%0V=
q[r]<q\/rCrY>DJrYPGKrYkbTrZ(nYrZD+^rZhCfr[%Olr[Igsr[n+%r\4=,r\OO1q_nF5r]0s=q`Fd>
r]U$?q`ie"JO$q7q`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$!%S(#/,h!s-iPIl,lT"e+oWS_
*r[2Z)u^cT)?(KP(]G3L(&J^E'DiF;&Yp!8&c34<'E/^F(&f!G(]G9N)ZC]T*<%#Y+9!D^,5rhd-2o:k
./k^q/H.:$0`Eg+1''3g!&X[4r\ja7r]'m;r]:$?r]L'@q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=5kmS@
55m_B4T7GA3rV/=3;tl92Z>T51]B0/1&`j*/cI=#.KCjt-n,'BrZqIfrZV7_rZ;%ZrYthTrYb\PrYPPL
rY>;ErY,/Ap^s;5p_!B9rY,/CrY>DJrYPPNrYb\RrZ(nXrZ;%]rZV7cr[%Okr[@aqr[e%#r\+7)r\FI/
r&"I3r\sg9r]0s=r]C!>q`XpBq`g-,q`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$r[[ssr[7[l
rZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Ap^s;5p_!K<q\/i@rY>DJrYPPNrYkbTrZ(nYrZD+^
rZ_=dr[%Okr[@aqr[e%$r\+7*r\FI0r\a[5r\sg9r]0s=r]C*Aq`Xg?q`b'GO?i\-q`am?r]L0Aq`=^9
q`"L3r\XU1r\=C+r\"1$r[[ssr[7[krZqIerZM1^rZ1tXrYt_PrYYVNrYGJJrY55Cq\&Z9q%0V=p_!K<
q\/rCq\B)Hq\];NrYthVrZ;%\rZM1arZqIhr[@apr[[t"r\"1(r\=C.r\XU3r\ja8r]0j:r]C*Aq`Xg?
q`ie"JO$q7q`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$!%S(#/,h!s-iPIl,lT"e+oWS_*r[2Z
)u^cT)?(KP(]G3L(&J^E'DiF;&Yp!5&cNF?'DiLC(&f!J(]G9N)ZC]T*<%#Y+9!D^,5rhd-2o:k./k^q
/H.:$0E*^*1''3g!&X[4r\ja7r]'m;r]:$?r]L'@q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=5kmSC55RM?
4T7GA3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".0(as-n,'BrZqIfrZV7_rZ;%ZrYthTrYb\PrYPPLrY>DH
q\/i>p^s;5p_!B9rY,/CrY>DJrYPPNrYb\RrZ(nXrZ;%]rZV7cr[%Ojr[@aqr[e%#r\+7)r\FI/r&"I3
r\sg9r]0s=r]C!>q`XpBq`g-,q`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$r[[ssr[7[lrZqIe
rZV7_rZ1tXrYthTrYb\PrYPPLrY>DHq\/i>q[oM5p_!B9rY,/CrY>DJrYPPNrYkbTrZ(nXrZ;%]rZ_=d
r[%Okr[@aqr[e%#r\+7*r\FI0r\a[5r\sg9r]0s=r]C*Aq`Xg?q`b'GO?i\-q`am?r]L0Aq`=^9q`"L3
r\XU1r\=C*r\"1$r[Rmrr[7[krZqIerZM1^rZ1tXrYt_PrYPPLq\B)Eq\/i>q[rN5X:Y.=rY#)ArY55E
rYPGKrYkbTrZ(nYrZD+^rZ_=er[%Okr[Igsr[n+%r\4=+r\OO1r\a[5r]'m;q`=^<r]L'@q`amAg-C3S
^-MQ[q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[\%"!@o]".K1^o-N5:i,5rbb+9!;[*<$oV)ZCWR
)#b?N(B,'J'`/R@')N97&GQk7')iRA'`JjH(B,-L)#bHQ)u^iV*W@,Z+T<Sa,Q9"g-iPOn.fM!u/cIF&
1&`p/1c,1hr\a[5r\sg9r]0s=r]C*Aq`Xg?q`fWsX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f>q_5Q3kD4o7A@48q;?
3W;#;2uY`72#]<11B'!,0E*R&/,gst-ik_Er[7[jrZhCcrZD+\rZ1tWrYkbRrYYVNrYGJJrY55Cq\&Z9
U_*;5q\&lAq\9#ErYGJLrYYVPrYkbUrZ1tZrZM1`rZhCgr[.Umr[Rmur[n+&r\4=,r\OI0!&aa7r]'m;
r]:$?q`Oa=r]^3DO$NS,q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[e%!r[Igor[.UirZ_=brZD+[
rZ(nVrYkbRrYYVNrYGJJrY55Cq\&c<Tb-u2q\&lAq\9#ErYGJLrYYVQrYthVrZ1tZrZM1arZhCgr[7[n
r[Rmur[n+&r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@q`amA!'lW2q`jsAq`Xp@r]C!<r]'d6r\a[3r\OO.
r\+7'r[e$ur[Igor[%OhrZ_=arZD+[rZ(nVq\fALrYGAGrY55Cq\&c<p(4;:p_!K<q\/rCq\AuErYYVQ
rYthVrZ;%\rZM1arZqIhr[7[or[[t"r\"1(r\=C.r\XU3r\ja8r]0j:r]C*Aq`Xg?q`ie"JO$q7q`jsA
q`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$!%S(#/,h!s-iPIl,lT"e+oWS_*W@&X)u^cT)?(KP(]G3L
(&epE'DiF>&YTd2&c34?'DiLC(&f!J(]G9N)ZC]T*<$uX*r[;],5rhd-2o:k./k^q/H.7#0E*^*1''3g
!&X[4r\ja7r]'m;r]:$?r]L'@q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=5kmSC55RM?4T7GA3rV/=3;tl9
2Z>Q41]B0/0`Ea)/cI:".0(as-n,'BrZqIfrZV7_rZ;%ZrYthTrYb\PrYPPLrY>DHq\/i>p^s;5p_!B9
rY,/CrY>DJrYPPNrYb\RrZ(nXrZ;%]rZV7cr[%Ojr[@aqr[e%#r\+7)r\FI/r\X^72?5Z72uYf93W;)=
48V/;4oRYB5EA),5PmYA4oRS@48q;?3W;#;2uY]62#]<11&`m+0)dF$/,h!s-iPIl,lT"e+oWS_*W@&X
)u^cT)?(KP(]G3L(&epE'DiF>&YTd2&c34?'DiLC(&f!J(]G9N)ZC]T*<$uX*r[;],5rhd-2o:k./k^q
/H.7#0E*^*1B'-02?#N52uYf93W;)=48qA>4o7G?56*s15l3eC55RMB4T7G>3rV,92uY]62#]<11&`j*
0)dF$.fLmr-iPFk,lT"e+T<J^*W@&X)uCNP(]G3I(&epE'DiF>&bZd;&GQk:')N@A'`/XB(]G9N)ZC]T
*<%#Y+9!D^,Q8tf-2o:k.K1js/cIC%0`Eg+1]B6.2Z>]83Vtl:48qA>4o7G?5MAAR5e]M\5PmYA4oRS@
48q;?3W;#;2uY]62#]<11&`m+0)dC%.fh.Nr[Igor[.UirZ_=brZD+[rZ(nVrYkbRrYYVNrYGJJrY55C
q\&c<Tb-u2q\&lAq\9#ErYGJLrYYVQrYthVrZ1tZrZM1arZhCgr[7[nr[Rmur[n+&r\=C-!AlV52#]B3
2Z>Z73;tr;3rV5?4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=pcnX>r]U-@r]C*?r]0s;r\sg7r\XU1
r\FI,r\+7&r[e$t!%7jr./kUn,lT%f+oWS_*r[2Z)u^cT)?(KP(]G3L(&epE'DiF;&Yp!5&c34?'DiLC
(&f!J(]G9N)?(QR*<$uX*r[;]+oW_c-2o7j./k^q/H.7#0E*[)1B'*/2$#Tn!&jg8r]'m;r]:$?q`Oa=
r]^3DO$NS,q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[e%!r[Igor[.UirZ_=brZD+[rZ(nVrYkbR
rYYVNrYGJJrY55Cq\&c<Tb-u2q\&lAq\9#ErYGJLrYYVQrYthVrZ1tZrZM1arZhCgr[7[nr[Rmur\"1'
r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@q`amA!'lW2q`jsAq`Xp@r]C!<r]'d6r\a[3r\OO.r\+7'r[e%!
r[Igor[%OhrZ_=arZD+[rZ(nVq\fALrYGAGrY55Cq\&c<p(4;:p_!K<q\/rCq\B)Hq\];NrYthVrZ;%\
rZM1brZqIhr[7[or[[t"r\"1(r\=C.r\XL1r]'m;q`=^<r]L'@q`amAg-C3S^-MQ[q`am?r]L'>r]:$=
r]'m9r\a[3r\OO.r\4=(r[\%"!@o]".K1^o-N5:i,5rbb+9!;[*<$oV)ZCWR)#b?N(B,'J'`/R@')N97
&GQk7')iRA'`JjH(B,-L)#bHQ)u^iV*W@,Z+T<Sa,Q9"g-iPOn.fM!u0)dO'1&`p/1c,1hr\a[5r\sg9
r]0s=r]C*Aq`Xg?q`fWsX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f>q_5PmYD4o7A@48q;?3W;#;2uY`72?#E21B'$-
0E*R&/H.+!-ik_Er[7[jrZhCcrZM1]rZ1tXrYkbRrYYVNrYGJJq\9#Cq\&Z9V\&M5q\&lAq\9#ErYGJL
rYYVPrYkbUrZ1tZrZM1arZhCgr[7[nr[[t!r[n+&r\4=,r\OO2!B)h92Z>Z73;tr;3rV5<4Sq;@55RR*
5l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`Ea)/cI:".K1^o-N5:i,5rbb+9!>\*W@#W)ZCWR)#b?N
(B,'G'`JdC')3'=&FpG4')N@>'`JjH(]G9N)?(QR)u^iV*r[8\+T<Sa,Q9"g-iPRo/,h."0)dO'1&`s-
2#]B32Z>Z73;tr;3rV5?4Sq;=55RPE5`e8.5PmYA4oRSC48V)<3;YZ62?#H31]B-.0`Ea)/H.1!.K1^o
-2o1h,5r_a+9!;[*<$oS)?(KP(]G3L(&epE'DiF;&c!!D&FpG4')iRA'`/XE(]G9N)?(QR)u^iV*r[8\
+T<Vb,lT+h./k[p/,h."0)dR(1&a!.2#B313;tr83rV5?4Sq;=55RRu5_2275l3eC55RMB4Sq5>3rV/=
3;tl92?#H31]B-.0`Ea)/H@:%.kCTJr[7[lrZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Ap^sM;
ne(j6q\/i@rY>DKrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[Igsr[n+%r\+7*r\=L21]TB32?#N52uYf9
3W;)=48qA>4o7G?5Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO`'F)^q`b!Bq`Oj>r]:$=r]'m9r\ja5r\OO/r\=C*
r[n+#r[Imr!@TAq-iPCj,Q8nd+T<J^*W@&X)u^cT)#b?N(B,'G'`JdC')3':&GQk7')N@>'`/[F(]G9N
)ZC]T*<$uX*r[;],5rhd-2o:k./kar/H.7#0E*^*1B'*/2$#Tn!&jg8r]'m;r]:$?r]L'@q`amAO$NS,
q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=)r[n+#r[Rmpr[.UirZ_=brZM1]rZ1tXrYkbRrYYVNrYGJJ
q\9#Cq\&Z9WY"h8q\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+_rZ_=dr[%Okr[Igsr[n+%r\4=+r\FI0
r\a[5r\sg9r]0s=r]C*Aq`Xg?q`b'GO?i\-q`am?r]L0Aq`=^9q`"L3r\XU1r\=C+r\+7%r[[ssr[7[k
rZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>DHq\/i>p_!<5Z4Q[@rY#)Aq\9#ErYGJLrYYVPrYkbTrZ(nY
rZD+_rZhCfr[.Umr[Igsr[n+%r\4=,r\OO1q_nF5r]0s=q`Fd>r]U$?q`ie"JO$q7q`jsAq`Xp@q`Fd<
r]0s;r\sg6r\XU1r\=C+r\+7&!%\.%/H.-u-iPIl,lT"e+oWV`*r[2Z*<$lU)?(KP(]G3L(&J^E'DiF;
&ZQE8&c34<'E/^F(&f!J(]G9N)?(QR)u^iV*r[8\+oW\b,Q9"g-iPRo/,h."0)dR(1&`p/1c,1hr\a[5
r\sg9r]0s=r]C*Aq`Xg?q`fWsX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f>q_5PmYD4o7A@48q;?3W;#;2uY`72?#E2
1B'$-0E*U'/H.+!-ik_Er[7[jrZhCdrZM1^rZ;%YrYthTrYYVNrYGAGrY5>Fq\&Z9V\&V8q\&c>q\8oC
rYPPNrYkbTrZ(nXrZD+^rZ_=dr[%Okr[@arr[e%$r\4=+r\FI0r\X^72?5Z72uYf93W;)=48qA>4o7G?
5EA),5PRGA4oRS@48q;?3W;#;2uY`72?#E21&`m+0E*R&/H.-u./kRm,lT%f,5r_a*r[2Z*<$lU)?(KP
(]G3L(&J^E'DiF;&ZQE8&c34<'E/^F(&f!J(]G9N)?(QR)u^iV*r[8\+oW\b,lT.i./k[p/,h."0)dR(
1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=55RPE5`e8.5PmYA4oRSC48V)93;tl92?#H31]B-.0`Ea)/H.1!
.K1^o-N5:i,5rbb+9!>\*W@#W)ZCWR)#b?N(B,'J'`/R@')3(7&@)l?&cNF?'DiLC(&f!J(]G9N)>bBP
*<%#Y+T<P`,Q8tf-N5Fm.K1js/cIF&0`Ej,1]B612Z>Z73;tr;3r;#<4T7M=55RRu5_2275l3e@55m_E
4Sq5>3rV/=3;tl92Z>T51]B-.0`Ea)/H@=&/1gcMr[@amrZqIfrZ_=arZ;%ZrZ(nUrYb\PrYPPLrY>;E
rY,/Ap^sM;ob%'6q\/rCrY>DJrYPPNrYb\RrYthVrZ;%\rZV7brZqIir[@apr[[t"r\"1(r\=C-!AlV5
2#]B32Z>Z73;tr;3rV5?4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=pcnX>r]U-@r]C*?r]0s;r\sg7
r\a[3r\FI-r\+7'r[e$u!%@pt.K1^o-2o1h,5r_a+9!>\*<$oV)Z(BN(]+sH'`/RC'(QX:&GQk7')N@A
'`JjH(B,-L)#bEP)ZC]T*W@,Z+9!G_,5rke-N5Cl.K1js/H.:$0`Eg+1]B612$#Tn!&jg8r]'m;q`Fd>
q`Xg?q`g-,q`jj>r]U6Cq`Fd<r]0s;r\sg7r\a[2r\FI-r\+7&r[e$ur[@anr[%OgrZ_=arZ;%ZrZ(nV
rYkbQrYPPLrY>;Eq\/rAne&);ob%'6q\/rCrY>DJrYPPNrYb\RrYthWrZ;%\rZV7crZqIir[@apr[[t"
r\"1(r\FI/r\XU3r\ja7r]0s=r]C!>q`Xg?q`b'GO?i\-q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=)
r[n+"r[Rmqr[.UjrZhCcrZM1]rZ1tXrYkbRrYYVNrYGJJq\9#Cq\&Q6r"-.Fob%09q\/rCrY>;GrYPPN
rYb\SrZ(nXrZD+^rZV7cr[%Ojr[@aqr[[t"r\+7)r\FI/r\XU4r\sg9r]0s=r]C!>r]U$?q`ie"JO$q7
q`jj>r]U6Cq`Fd<r]0s;r\sg7r\a[2r\FI-r\+7&!%\.%/H.-u./kUn-2o.g,5r_a*r[2Z*<$oV)ZCTQ
(]G3L(&J^B'E/X8&[2i>&c34<'E/^F(&f!J(]G9N)?(QR)u^lW*r[8\+oW_c,lT.i./k[p/,h."0)dR(
1B''11c,1hr\a[5r\sg:r]:$?q`Oa=q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=5kmS@55RMB4T7GA3rV/=
3;tl92Z>T52#]<11&`j*0)dF$.KCmu.4P6Dr[%OhrZhCbrZD+\rZ(nVrYkbRrYYVNrYGJJrY5,@rY"l9
YRpI>q\&c>rY5>HrYGJLrYYVPrYkbTrZ1tZrZD+_rZ_=er[.Ulr[Igsr[n+%r\4=+r\OO1r\X^72?5Z7
2u>W448qA>4o7G?5EA),5PRG>4oRSC48q;?3W;#;2uY`72?#H31B'$-0E*R&/H.-u./kUn-2o.g,5r_a
*r[2Z*<$oV)ZCWR(]G6M(B,'J'`/R@'(lj@&G6Y4')iRD'`/XE(B,-L)#bEP)ZC]T*W@,Z+9!G_,Q8tf
-N5Fm.K1js/cIC%0`Ej,1]B612?#N53;tr;3rV5<4Sq;=55RPE5`e8.5PmYA4oRS@48q;?3W;#;2u>K3
1]B0/0`Ea)/cI:".fLjq-N5=j,Q8kc+T<G]*W@&X)u^cT)#b?K(AegC'DiF;&c<3J&FpG4')N@A'`JjE
(B,-L)#bEP)u^iV*W@/[+T<Sa,Q9"g-N5Fm.fM!u0)dO'0`*[*2#]E42uYf93W;)=48V/>4nq5<5MAAR
5e]M\5PRG>4oRSC48q;?3W;#;2uY`72?#H31B'$-0E*O'/-.:Qr[Rmqr[7[krZhCdrZM1]rZ1tXrYthT
rYbSLrYGJJrY55Cq\&Q6YRpI>q\&lArY55ErYGJLrYYVPrYkbTrZ1tZrZD+_rZhCfr[.Umr[Igsr[n+%
r\4=,r\FR31]TB32?#N53;tr;3rV5<4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=pcnX>q`Xp@r]C!<
r]0s;q_nF1r\OO.r\4=(r[n+"!%@pt.K1ap-N5:i,Q8kc+T<G]*;^]S)?(KP(]G3L(&J^B'E/X;&[2i>
&cNF?'DiLC(&f!J(]G9N)?(QR*<$uX*r[;]+oW_c,lT1j./k[p/,h."0)dR(1&a!.2#]?52`C^qr]'m;
r]9p<r]L'@q`amAO$NJ)q`am?r]L0Ar]:$=r]'m9r\ja5r\XU0r\=C*r\"1$r[Rmqr[7[krZhCdrZV7_
rZ;%YrYthTrYb\PrYPPLrY>DHq\/i>ob"D>p_!B9q\/rCq\B)GrYPPNrYb\SrZ(nXrZD+^rZ_=dr[%Ok
r[@aqr[e%$r\+7)r\FI/r\XU4r\sg9r]0s=r]C!>q`Xg?q`b'GO?iS*r]^3Bq`Oj>r]:$=r]'m9r\ja5
r\OO/r\4=)r[n+#r[Rmqr[7[krZhCdrZM1^rZ1tXrYthTrYYVNq\K/GrY55Cq\&Z9r"-7Iob%'6q\/rC
rY>DJrYPPNq\fAPrZ(nXrZD+_rZ_=er[%Okr[Igrr[e%$r\+7)q_S4.r\ja7r]'d9r]C!>r]U$?q`ie"
JO$q7pcnX>q`Xp@r]C*?r]0s;r\sg7r\a[3r\FI-r\+7'!%\.%/H.-u./kUn-2o.g,5rbb+9!>\*<$oV
)ZCWR)#b?N(B,'J'`/R@'(lj@&GQk7')N@A'`/XE(B,-L)#bEP)u^iV*W@/[+T<Sa,Q9"g-iPOn.fM!u
0)dO'0`Ej,1BB<h!&X[5r\sg9r]0s=r]C!>q`Xg?q`fWsX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f>q_5PmYA4oRSC
48V)<3W;#;2uY`72#]<11B'!,0E*R&.f_%".OtEGr[.UjrZhCcrZM1^rZ1tXrYthSrYYMKrYGJJrY55C
q\&Q6[Li*Dq\&lAq\8oBrYPGKrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@aqr[e%#r\+7*r\FI/r\a[5!B2q;
2uYf93W;)=48V/>4nq5<5EA))5PmYA4oRSC48q;<3W:u:2Z>T52#]<11B'!,0)dI%/,h!s./kRm,lT%f
+oWV`+9!;[*<$oV)?(KP(]G3I(&epE'DiF;&[N&A&c34?'DiLC(&f!J(]G9N)?(QR)u^iV*r[8\+T<Sa
,lT+h-iPRo.fM!u0)dO'1&a!.2#]B32Z>Z73;tr;3rV5<4T7M=55RPE5`e8+5Q3kD4o7A@48q;?3W;#;
2uY`72?#H31B'$-0E*U'/H.1!.K1^o-2o1h,5rbb+9!>\*W@#W)ZCWR)#b?N(B,'J'_i@@'(lh;&.l5\
p_!96rY,/CrY>DJrYPPNrYb\RrYthWrZ;%\rZV7brZqIir[7[or[[t!r\+7)r\=C.r\XU3q`"L6q`=^<
r]L'@pceR>g-C3S^-MHXq`am?r]L0Ar]9p:r\sg7r\a[3r\OO/r\4=(!%e4'/cI:".K1ap-N5:i,Q8kc
+T<J^*W@&X)u^`S)#b?N(AejG'`/R@')3'F&G6Y4')iRA'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rke
-2o:k.K1gr/H.:$0E*^*1]B332)P@kr\ja7r]'m;r]:$?q`Oj@pceR>JO$;%JO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22=
5kmS=55m_E4Sq5>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:$.KM"Kr[@amr[%OgrZ_=brZD+[rZ(nVrYkbR
rYYVNrYGJJrY55Cp_*-0^C^&Mq\&c>q\9#ErYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@aqr[e%$
r\+7*r\FI/r\a[5!B2q;2uYf93W;)=48V/>4o7G<5EA))5PmYA4oRS@48q;?3W;#;2Z>T52#]<11B'!,
0)dI%/,h!s./kRm,lT%f,5r_a+9!;[*<$oV)ZCTQ)#b?N(B,'J'`/R@'(6FL&FpG1')N@>'`JjH(B,-L
)#bEP)ZC`U*W@,Z+T<P`,5rke-2o:k.K1gr/cIC%0E*^*1]B612?#N52uYf93W;)=48V/>4o7G<56*s1
5kmS@55RMB4Sq5>3W;#;2uY`72?#H31]B-.0`E^(/H.1!.K1^o-N5:i,Q8kc+T<G]*W@&X)u^cT)#G-K
(&J^B'DiF9&cE<V&FpG1')N@>'`/[F(]G9N)?(TS*<$uX*r[;]+oW_c,lT.i./k[p/,h."0E*[)1&a!.
2#]B02uYf63rV5?4Sq;=557@r5_2275kmS@55RMB4Sq5>3rV/=3;ti82?#H31]B0/0`E[)/HIFTr[[ss
r[@amrZqIfrZ_=arZD+[rZ(nVrYkYNrYPPLrY>DHq\/i>mh*DJne(a3q\/i@rY>DJrYPPNrYb\RrZ(nX
rZ;%]rZV7brZqIhr[7[or[Rn!r\"1'r\=C.r\OX52#oN52Z>Z73;tr;3rV5<4T7M@557?n5cd5%5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO%.=pcnO;r]U-@r]C*?r]0s;r\sg7r\XL.r\4=)r\"1$!%J"!.fLmr-iPIl,lT"e+oWV`
*r[2Z)u^cT)?(KP(],!F'`/R@'(QXL&G6Y4')N@A'`/XE(B,-L)#bEP)u^iV*W@,Z+9!G_,Q8tf-N5Fm
.K1gr/cIC%0`Eg+1]B612?#K72`C^qr]'m;r]:$?q`Oj@q`ad>O$NJ)q`am?q`Oj>r]:$=r]'m9r\ja4
r\OO/r\4=)r\"1$r[Rmrr[7[krZqIerZM1^rZ;%YrYthTrYb\PrYPPLrY>;Eq\/i>ne&_Mne(a3q\/rC
rY>;GrYPPOrYkbTrZ(nXrZ;%]rZV7cr[%Ojr[@aqr[[t"r\+7)r\FI/r\XU3r\sg9r]0j:r]C*Aq`Xg?
pceaDO?iS*q`am?r]L'>q`4X8r\sg6r\XU1r\=C+r\"1%r[[ssr[@anrZqIfrZ_=arZD+\rZ(nVrYkYN
rYPPLrY>;Eq\/i>q%<Q;^C]rJq\&c>rY5>HrYGJLrYYVPrYkbTrZ(nXrZD+^rZ_=dr[%Okr[@aqr[[t"
r\+7*r\FI/r\XU3r\sg9r]0s=q`Fd>q`Xg?pcmItJO$q7pcnX>q`Xg=r]C*?r]0s;r\sg7r\XU1r\FI,
r\"7(!A6#(/H.-u.K1^o-2o1h,5r_a+9!>\*<$oV)ZCWR)#b?N(B,'G'`/R@'(QXO&FpG1')N@A'`JjE
(B,-L)?(QR)u^iV*W@,Z+T<P`,Q9"g-N5Fm.fLst/cIF&0`Ej,1]B332)P@kr\sg9r]0j:r]C*Aq`Xg?
pcj<pX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5f#__5PRG>4oRSC48q;?3W;#82uY]62#]<11&`m+0E*L&.fh.Nr[Rmq
r[.UjrZhCdrZM1^rZ1tXrYthTrYb\PrYPPLrY>DHq\/i>mh*MMob%'6q\/i@rY>DJrYPPNq\fAPrZ(nX
rZD+^rZ_=dr[%Ojr[@aqr[[t"r\"1(r\FI/r\XU4r\jj;2ukr;3Vtl:48qA>4o7G<5E%l)5PRGA4o7A@
48q;?3W;#;2uY`72?#H31]B-.0E*U'/H.-u.K1^o-N5=j,Q8kc+T<G]*W@&X)u^cT)?(HL(B,'J'`/R@
'(QXO&G6Y4')N@>'`JjH(B,-L)#bEP)ZC]T*W@,Z+9!G_,5rke-2o:k.K1gr/,h."0E*[)1B'*/2#]E4
2uYf93W;):48qA>4o7G<56*s.5l3e@55m_B4T7G>3W;#;2uY`72?#E21B'$-0E*U'/H.-u.K1^o-2o1h
,Q8kc+9!>Y*<$oV)?(KP(]G3I(&epE'DiF<&c**Y&FpG4')N@>'`/XB(]G9N)?(QR*<$uX*r[;]+oW_c
,lT.i-iPRo/,h+!0)dO'1&`s-1]B922Z>Z73;tr;3rV5<4Sq;=557@r5_2245l3e@55m_B4T7GA3rV/=
3;tl92Z>T52#]<11&`g+/cdRWr[e$ur[Igor[.UjrZhCcrZM1]rZ1tXrYthTrYb\Oq\K/GrY55Cq\&H3
_@ZAPq\&c>q\9#ErYGJLrYYVPrYkbTrZ1tZrZD+_rZ_=er[%Okr[Igrr[[t"r\+7)r\FI/r\OX62?5Z7
2uYf93W;):48qA>4o7G<5Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO_*Ic[q`am?r]L0Aq`=^:r]'m9r\a[3r\OO.
r\4=)r[e+$!A#f$.fLjq-iPFk,Q8nd+T<J^*r[/Y)u^cT)?(KP(]G3I(&epE'DN4/&^_0Y&c34<'DiL@
(B,-L)#bEP)ZC]T*W@,Z+9!G_,5rke-2o:k./k^q/,h."0E*[)1B'*/2#]E42ZYlt!''s<r]9p<r]L'@
q`ad>N'R/&q`b!Bq`Oj>r]9p:r\sg7r\a[3r\OO.r\4=)r[n+"r[Rmqr[.UjrZhCcrZM1^rZ1tXrYthT
rYb\PrYPPLrY>;Eq\/`;mh+%\mh,=-rY,/CrY>;GrYPPNrYb\RrZ(nXrZ;%]rZV7brZqIir[7[or[[t!
r\"1(r\=C-r\OO1r\ja7r]'m;r]:$?q`Oa=q`ad>!'lN/pcnX>r]U-@r]C*?r]0s;r\sg7r\a[3r\FI-
r\+7'r[e%!r[Igor[.UirZhCcrZM1^rZ1tXrYt_Pq\T5IrY>DHq\/`;r"8Q5d1GaYq\&c>q\9#ErYGAI
rYYVQrYthVrZ;%\rZM1arZhCfr[.Umr[Igsr[e%$r\4=+r\OO1r\a[5r\sg9r]0j;r]Ks=q`ad>g-C3S
]0Q-Uq`b!Bq`Oj>r]9p:r\sg7r\a[3r\OO.r\+=*!A?,*/cI:".fLjq-N5=j,Q8kc+T<J^*W@&X)u^cT
)?(KP(]G3L(&J^B'DN4/&_%B\&bm"<'DiLC(&JdG(]G9N)?(QR*<$uX*r[;]+oW\b,lT.i-iPRo/,h+!
0)dR(1&`s-1]B332DtOnr\sg9r]0s=r]C!>q`Xg?pcj<pX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f#_\5PmYA4oRS@
48q;?3W;#;2uY`72?#E21B'$-0E*O'/-.:Qr[[srr[7[lrZqIfrZV7`rZ;%ZrZ(nVrYkYNrYPPLrY>;E
q\/`;ne'7\ob$s3q\/i@rY>DJrYPPNrYb\RrYthVrZ1t[rZM1`rZhCgr[.Ulr[Igsr[e%$r\+7*r\OF.
r\ja7!B<%=3;tr;3rV5<4Sq;=557@$5kmS@55RMB4T7G>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq
-iPIl,lT"e+oWS_*r[2Z*<$lU)?(KM(]G3L(&epE'DN4/&_%B_&bm"9'E/^C(&f!J(]G9N)?(QR)u^iV
*r[8\+T<Sa,Q9"g-iPOn.K1js/H.:$0`Eg+1]B612?#N52uYf93W;)=48V/;4o7G<56*s.5kmS@55m_B
4T7GA3r:r:3;tl92Z>Q41]B0/0`E^(/cI:".fLjq-N5=j,Q8nd+T<J[*W@#W)ZCWR)#b?K(AegC'DN1@
&J=XId1Gj\p_*H;rY5>Hq\K/IrYYVPq]#MSrZ;%\rZM1brZqIhr[7[nr[Rmur[n+&r\4=,r\OO1r\a[6
r]'d8q`Fd>pc\L<pcmItJO$h4pcnX>q`Xp@r]C!<r]0s;r\sg7r\XU1r\FI,!&"@+0E*R&/,h$t./kUn
-N5:i,5rbb+9!>\*W@&X)ZCWR)#G-K(B,'J'`/R='(6F^&FpG.')N@A'`/XE(B,-L)#bEP)ZC]T*<%#Y
+9!D^,5rhd-2o:k./k[p/,h+!0)dR(1&a!.2#]?52DtOnr\sg9r]0s=r]C!>q`Xg?pcj<pX?_>%JO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5f#_\5PmYA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E[)/HIFTr[[str[@anr[%OhrZ_=a
rZD+\rZ1tXrYthSrYYMKrYGJJq\8o@q\&-*jq-kkp_*H;q\8oBrYPGKrYkbTrZ(nXrZ;%]rZV7brZqIh
r[7[nr[Rmur[n+&r\4=+r\OO1r\a[6r&=[9r]0s=r]C!>q`Xg?pcj^&pcnX>q`Xp@q`Fd<r]0s;r\sg7
r\a[3r\FI-r\4=(r[e%!r[Igpr[7[krZhCdrZM1^rZ;%ZrYthTrYb\PrYPPLq\AuBq\/i>kn3%hmh,=-
p_3W@q\B)GrYPPNrYb\RrYthVrZ1t[rZM1`rZhCfr[.Ulr[@aqr[e%#r\+7*r\FI/r\a[5r\sg9q`4O8
r]Ks=r]^!>!'lN/pcnX>q`Xp@r]C!<r]0s;r\sg7r\XU1r\FI,r\+7'r[e$ur[Igor[.UjrZhCcrZM1]
rZ1tXrYthTrYb\PrYPPLrY>2Bq\/l?!#"W1jq-kkp_*?8rY55ErYGJLrYYVPrYkbTrZ(nXrZD+^rZV7c
r[%Ojr[@apr[Rn!r\"1(r\=C-r\XU3r\ja7r]'d8q`Fd>pc\U?ofq.qJO$h4pcnX>q`Xp@q`Fd<r]0s;
r\sg7r\a[3r\FI-!&+F-0`E^(/H.1!.K1ap-iPFk,Q8nd+T<J^*r[2Z)u^cT)?(KP(]G3I(&J^B'DiF,
&`sYn&bm"6'E/^C(&f!J(]G9N)?(QR)u^iV*W@/[+T<P`,Q8tf-N5Cl./k^q/H.7#0E*^*1B'*/2?#K7
2`C^qr]'d8q`Fd>pc\U?ofn!mX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5f#_\5PRG>4oRS@48V&;3;tl92?#H31]B0/
0`E^*/HIFTr[e$ur[Igor[%OhrZhCcrZM1^rZ1tXrYthTrYb\PrYPPLrY>;Eq\/W8_@cPUq\/i@q\B)G
rYPPNrYb\RrYthVrZ;%\rZM1arZhCfr[.Ulr[@arr[e%#r\+7*r\FI/q_e@3r\sp=3<2):3rV5<4T7M=
557@$5kmS=55m_B4T7GA3rV/=3;tl92Z>T52#]<11&`m+0)dI%/H.-u./kUn-2o.g,5rbb+9!>\*W@&X
)u^cT)?(KP(]G3L(&J^B'D3!T&bm"9'DiLC(&JdG(]G9N)?(QR)u^iV*r[8\+T<Sa,Q8tf-N5Fm.K1js
/cIC%0`Eg+1B'-02?#N52uYf93W;):48qA>4o7G956*s.5kmS=55m_E4Sq5>3rV/=3;tl92Z>T52#]<1
1&`j*0)dF$/,h$t./kRm-2o.g,5rbb+9!>\*W@#T)ZCTN(]+sE'`/RA')`H[&bm"6'DiLC(&f!J(],'K
)?(QR*<$uX*r[;]+oW\b,lT+h-N5Fm.fLst/cIC%0`Ej,1]B612?#N52uYf93W;):48qA>4o7G95MAAR
5eB;V5PRGA4o7A@48q;?3W;#;2uY`72?#H31]B*/0EEj]r\"1%r[e$ur[@anr[%OgrZ_=brZD+\rZ1tX
rYthTrYb\PrYPPLrY>;Eq\/W8_@cPUq\/i@rY>;GrYPPNrYb\RrYthVrZ;%\rZM1arZhCfr[.Umr[Igs
r[n+%r\4=+r\FI0r\a[5!B2q;2uYf93W;):48qA>4o7G95Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO_*Ic[pceR<
r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*!%n:)0)dI%/,h!s./kRm-2o.g,5rbb+9!>\*W@&X)ZCWO)#b?N
(AejD'`/R:'$_*^')3.>'`JjE(B,-L)#G3M)u^iV*W@,Z+9!G_,Q8tf-2o:k./k^q/,h."0)dR(1&a!.
2#]B32Z>Z72uu$"!'1$>r]C!>q`X^<pcj^&pcnO;q`Xp@q`Fd<r]0s;r\sg7r\a[2r\FI-r\+7&r[e%!
r[Igpr[.UirZhCdrZM1^rZ;%YrYthTrYb\PrYPGIrY>;Eq\/N5d1Pp^q\/i@rY>;GrYPPNrYb\RrYthV
rZ1tZrZM1`rZhCfr[%Okr[Igrr[e%#r\"1(r\FI/r\XU3r\ja7r]'m;r]:$?q`Oj@pce@8!'lN/pcnO;
r]U-@r]C!<r]'d6r\a[3r\OO.r\4=)r[n+#r[[srr[7[lrZqIfrZ_=arZD+\rZ(nVrYkbRrYYVNq\K/G
q\8o@!>6%;'%%<^')N@A'`/XE(AepI)#bEP)ZC]T*<$uX+9!D^,5rhd-2o7j-iPRo/,h+!0)dO'0`Ej,
1]B612Z>Z73;tr83rV5<4T7M=54q.o5_2245kmS=55RMB4Sq5>3rV/=3;tl92Z>T51]B-00`a!`r\+7&
r[e%!r[Igpr[.UirZhCdrZM1^rZ;%YrYthTrYb\PrYPGIrY>;Eq\/N5d1Pp^q\/i@rY>;GrYPPNrYb\R
rYthVrZ1tZrZM1`rZhCfr[%Okr[Igrr[e%#r\"1(r\FI/r\XU3r\ad92ZPf93;tr;3rV5<4T7M=54q-k
5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO%%:ofr=;q`Xg=r]C!<r]0s;q_nF1r\OO/r\+=*!A?,*/cI=#.fLmr./kRm
-2o.g,5rbb+9!>\*W@&X)u^cQ)#b?N(AejD'_N.1'&sSp')3.>'_iF?(]G9N)?(QR)u^iV*W@,Z+9!G_
,5rhd-2o7j./k[p.fM!u0)dO'1&`s-1]B922Z>Z73;bc:3Vto;4SV):557@!5kRA=55RMB4Sq5>3rV/=
3;tl92Z>T52#]<11B'!,0)dI%/,h$t.K1^o-N5=j,Q8kc+T<J^*r[2Z)u^cT)?(KM(]G3I(&J^?'CQRr
&apA-'E/^C(&f!G(]G9N)?(QR)u^iV*W@,Z+T<P`,5rke-2o7j./k^q/,h."0)dO'1&a!.2#]B32Z>Z7
3;tr;3r;#<4Sq;:55RS@5`J&(5PRG>4oRS@48q;?3W;#;2uY`72?#H31B'$-0`E^(/H.1!.K1ap-iPFk
,lT%f+oWV`+9!;[*<$oV)ZCWR)#b?K(B,'D'EJj\q@iE4it:hpq\/rCrY,8Fq\B)Gq\T5KrYb\RrYthV
rZ;%\rZM1arZhCfr[.Ulr[@aqr[[t"r\+7)r\=C.r\XU3q`"L6r]0s=q`Fd>q`Xg?pcm7nJO$h4ofr=;
q`Xp@q`Fd<r]0s;r\sg7r\a[3r\FO0!AZG00`E^(/cI:".fLmr-iPIl-2o.g+oWV`+9!>\*W@#W)ZCWR
)#G-K(AejD'_i@1''9ep')3.>'`/XE(AepI)#bEP)ZC]T*<$uX*r[;]+oW\b,lT+h-N5Fm.fLst/cIC%
0E*^*1]B612?#N52ZYlt!''s<r]9p<r]L'@pceR>JO$(tJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22:5k7/=55RM?4T7G>
3rV/=3;tl92Z>Q11]B'.0**^Zr\"1$r[[str[@anr[%OgrZ_=brZM1]rZ1tXrYthTrYb\Pq\T5IrY>)?
q\.-cob73:q\B)Gq\T5KrYb\RrYthVrZ1tZrZM1`rZ_=er[%Ojr[@aqr[[t"r\"1'r\=C-r\XU3r\ja7
r]'m;!BN7A3r;#<4Sq;:557@!5kRA=55RM?4T7GA3r:r:3;tl92Z>Q41]B0/0`Ea)0)dF$.fLmr./kRm
-2o.g,5rbb+9!>\*W@&X)u^cT)?(KP(],!I(&/L?'?Cg]'DN:@(&JdG(],'K)?(QR)u^lW*r[8\+T<Sa
,Q8tf-N5Cl./k^q/,h."0E*[)1&a!.2#]B32Z>Z73;tr;3rV5<4Sq;:55RS@5`J&%5PmYA4o7A@48q;?
3W;#;2uY`72?#H31]B-.0`E^(/cI=#.fLmr./kRm,lT%f+oWV`+8[)X*<$oV)ZCWR)#b?N(AejB'EAjE
'?Cg]'DN:@(&JdG(]G9K)?(TS*<$uX*r[8\+T<Sa,Q8tf-N5Cl./kar/H.7#0E*[)1&a!.2#]B02uYf6
3rV5<4T7M=557@l5_2245kRA=55RM?4T7GA3r:r:3;tl92Z>Q41B9021,Ah_r\+7'r[e$ur[Igpr[.Uj
rZhCdrZV7_rZ;%ZrZ(nVrYkbRrYYVNq\K/Gp_<T=a:e7]p_<]Bq\K/Iq\];MrYkbTrZ1tZrZD+^rZ_=d
rZqIir[7[nr[Rmtr[n+&r\4=+r\OO1r\a[5r\jj;2ukr;3W;)=48V/;4nq5<5Cl(s5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cO]0Q-Uq`am?r]L'>r]:$=r]'d6r\a[3r\OO.!&+F-0`Ea)/cI=#/,h!s./kRm,lT%f,5r_a+9!>\
*W@&X)u^cT)?(KM(]G3F(&J^6'B9_r'DiL@(&JdG(],'K)?(QR)u^iS*r[8\+oW\b,Q9"g-N5Fm.K1gr
/H.:$0E*[)1B'*/2#]E42u>T63<;0%!':*@q`Oa=q`ad>JNs3#q`jj>q`Xp@q`Fd<r]0s;r\sg7r\a[3
r\OO.r\4=)r[n+"r[Rmrr[7[lrZqIfrZ_=arZD+\rZ1tXrYthTrYb\Pq\T5Iq\Al?mh=grmh>R4q\AuD
rYPPNq\fAOrYthVrZ;%\rZM1`rZhCfr[%Okr[@apr[[t!r\"1(r\=C-r\OO1r\ja7r]'m;q`=^<q`Oa=
q`ad>qETp'pcnX>pc\U=q`F[8r]'m9r\ja5r\OO/r\=C*r\"1%r[[str[@anr[%OhrZ_=brZM1^rZ;%Z
rZ(nVrYkbRrYYVNq\K&D!>H7E'_2pt'(lq;'`JdC'`/XE(AepI)#bEP)ZC]T*<$uX*r[8\+T<P`,Q8tf
-2o:k./k^q/,h."0)dR(1&`s-2#]B32Z>Z73;tr;3r;#94T7M=557@l5_22.5l3e@55RMB4Sq5>3rV/=
3;tl92Z>T51]T<41Gf"br\4=)r[n+"r[Rmrr[7[lrZqIfrZ_=arZD+\rZ1tXrYthTrYb\Pq\T5Iq\Al?
mh=grmh>R4q\AuDrYPPNq\fAOrYthVrZ;%\rZM1`rZhCfr[%Okr[@apr[[t!r\"1(r\=C-r\OO1r\ja7
r\sp=3<2):3rV5<4Sq;=557?n5c-et5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$h4pcnX>q`Xg=r]C!<r]0s;r\sg7r\a[3
r\=I.!AQ>.0`E^(/cI=#.fLmr-iPIl-2o.g,5rbb+9!>\*W@&X)uCQN)#b?K(AJX>'\!fk'`/XB(AepI
)#bEM)ZC]Q*W@/X+T<Sa,Q8tf-N5Cl./kar/H.7#0E*[)1&a!.2#]B02uYf93W(o<3rV5?4Sq;:557?n
5QF(H5PRG>4o7A@48q;<3W;#;2uY`72#]<11B'!,0E*U'/H.1!.fLjq-iPIl,lT%f,5r_a+9!>\*W@&X
)u^cT)>b9M(],!C(&/Km'DiL=(&JdD(]G9N)?(QR)u^iV*W@,Z+9!D^+oW\b,lT+h-N5Fm.K1js/cIC%
0E*^*1B'*/2#]B02uYf93W;):48qA>4nq595PdX&5kmS@557;<4T7GA3r:r:3;tl92Z>Q41]B0/0`Ea)
0)dF$/,h$t./kUn-2o1h,Q8nd+T<J^*r?rV)u^cT)>b9M(]G3J(&\m?'\X6"'`JdC'_iFB(AJ^F)#bEP
)ZC]T*<$uX*r[8\+T<P`,Q8tf-2o:k./k^q/,h."0)dO'1&`s-1]B922Z#H43;tr;3rV5<4Sq;:557@l
5_22.5l3e@55RM?4T7GA3r:r:3;tl92Z>N51BB9fr\FI,r\+7'r[e%!r[Rmqr[7[lrZqIfrZ_=arZD+\
rZ1tXrYthTrYbSMrYPGIp_EQ<e._]np_EZAq\T5KrYb\RrYthVrZ1tZrZD+^rZV7brZqIhr[.Umr[Igs
r[n+%r\+7*r\FI/r\XU3q`"L6!BE.?3W;):48qA>4nq595Cl(s5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO]0Q-UpceR<
q`Oj>r]:$=r]'m9r\ja5r\XU1!&=R11B'!,0E*R&/H.-u.K1ap-N5=j,lT"e+oWV`+9!>\*W@&X)u^cT
)>b9M(],!C(%N(<'E/^4'D3(7(&/RD(],'H)ZC]T*<$uX*r[8\+T<P`,Q8tf-2o:k./k[p/,h+!/cIF&
0`Eg+1]B612>]?33;Y`;4$3C&r]L'@q`a[;JNs3#q`jj>pc\U=r]C!<r]0s;r\sg7r\a[3r\OO.r\4=(
r[n+#r[Rmrr[@amrZqIfrZ_=brZM1^q]5YUrYthTrYbSMrYPGIp_E?6jqID%p_EZAq\T5KrYb\Rq]#MS
rZ1tZrZM(]rZhCfr[%Okr[@apr[[t"r\"1'r\=C-r\OO2r\ja7r]'m;q`=^<q`Oa=q`a[;qETp'pcnO;
q`Xg=r]C*?q`4X8r\sg7q_\:.r\4=)r\"1$r[[str[@anr[.UirZhCdq]Pk[rZ1tXrYthTq\fAMq\T/G
!#G>EneCF(rY5>Fob@09q\K/Iq\];MrYkbTq],SVrZD+^rZV7brZhCgr[.Ulr[Igrr[[t"r\"1(r\=C-
r\XU3r\ja7r]'m;r]9p<r]Ks=q`a[;e3JRM[6XURpceI9r]L0Aq`=^:r]'m9r\ja5!&O^52#]<11&`m+
0)dI%/H.-u.K1ap-N5:i,Q8nd+oWV`+8[)X*<$oV)ZCWO)#b?K(AJX8']p)%'_iF?(AepI)#bEP)Z(KQ
*<$uX*r[;Z+oW_c,lT+h-iPOn.K1js/cIC%0E*^*1B'*/2?#N52uYf93<;0%rAsp>q`Oa=q`a[;JO$(t
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_2245kmS=557;?4T7GA3r:r:3;tl92Z>T51B9021,Ah`r\4=(r[n+#r[Rmrr[@am
r[%Ohq]c"^rZD+\rZ1tXrYt_QrYb\Pq\T#CneL1!p_EQ>q\T,Hq\f8MrZ(nXrZ;%\rZM1arZhCfr[%Oj
r[@apr[Rmur[n+&r\4=+r\OO1r\a[5r\sg9r]0j:!BW@C48V/;4o7G<5Cl)u5kmS=55RM?4T7GA3rV/:
3;tl92Z>T51]B0/1&`j*0)dI%/,h$t.K1^o-N5=j,Q8nd+oWV`+9!>\*W@&X)u^cQ)?(KM(],!:($65'
(&/RA(],'K)?(QR)uCWS*W@,Z+9!G_,5rhd,lT.i-iPOn.fLst/H.:$0E*[)1B'*/2#]B32Z>Z73;tr;
3r;#<4SV):557A:5_hW"5PRG>4oRS@48q;?3W;#82uY]62#]<11&`m+0E*R&/H.1!.K1ap-iPFk,lT%f
,5rbb+T<J^*r?rV)u^cT)>b9K(B>9K(@i4#'_N49(AepF)#bEP)ZC]T*;^cU+9!D^+oW\b,Q8tf-N5Cl
./k^q/,h+!0)dO'0`Ej,1]B612Z>Z43;tr;3r;#<4SV):557@i5_22.5kmS=55RM?4T7GA3rV/:3;tl9
2?5T82)Y@hr\FI-r\+7'r[n+"r[Rmrr[7[lr[%OgrZ_=brZM1^rZ;%ZrZ(nVrYkYOrYYMKq\JW8jqRJ'
p_N`Cq\];MrYkbTq],SUrZ;%\rZV7brZhCfr[.Ulr[@aqr[[t!r\"1'r\4=,r\OO1r\a[5r\sg9r](!?
3WM5<48qA;4o7G<5Cl(p5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO]0Q$Rq`ad<r]L'>r]9p:r]'d5r\OU2!AcP21B'$-
0`E^(/cI=#/,h!s./kUn-2o1h,Q8kc+T<J^*r[2W*<$oV)Z(EL)#G-?(?6/)(AepC)#bEM)ZC]T*;^cU
+8[2[,5rhd,lT.i-iPOn.K1gr/H.7#0)dR(1&`s-2#]B32Z>Z73;Y`83rV2A4?WR)q`X^<pcj<prBU$?
q`ad<r]L'>r]:$=r]'m9r\ja5r\XU1r\FI-r\+7'r[n+"r[Rmrr[7[lr[%OhrZhCcrZM1^rZ;%ZrZ(eS
rYkYOq\]2HneU@&obRE@p_`uJq\oGQrZ(nXrZ;%\rZM1`rZ_=drZqIir[7[nr[Igsr[e%#r\+7)r\=C.
r\XU3r\ja7r]'m;q`=^<q`Oa=q`a[;pHXL!ofr=;q`Xg=r]C!<r]0s;r\sg7r\a[3r\OO/r\4=)r\"1$
r[[str[@anr[.UjrZqIerZV7`rZD+\rZ1tXrYt_QrYbVN!#YJIobQR&obRE@q\]2JrYkYQrZ(nXrZ;%\
rZM1`rZ_=er[%Ojr[7[nr[Igsr[e%#r\+7)r\=C.r\XU3q`"L6r]0j:r]C!>q`Xg?ofphhJO$V.ofr=;
pc\U=q`Fd<r]0s;r\sg7!&Xd72?#H31]B0/1&`j*0)dI%/,h$t.K1^o-N5=j,lT%f+oWV`+9!>\*W@&U
)u^cQ)>b9J(\/@((%i@>(\ejH)>b?O)u^iV*W@,Z+9!D^+oW\b,Q8tf-N5Cl./k[p/,h+!/cIF&0`Eg+
1]B612?#N52uYf93W(o<3rV5<4Sq;=54q-k5bgSq5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$h4ofr48q`Xg=r]C!<r]0s;
r\sg7r\X[4!AlY41]B-.0`Ea)/cI=#/,h!s./kUn-N5=j,lT"e+oWV`+9!>\*W@&U)u^cQ)>b9D(YTZ"
(],'E)?(QR)uCWS*W@,Z+9!D^+oW_c,lT+h-N5Cl./k^q/,h+!0)dO'0`Ej,1]B612?#N52uYf93W;):
3rqH+!'L$>q`a[;JO'0!ofr48q`Xg=r]C*?q`4X8r\sg7r\a[2r\FI-r\+7'r[n+#r[[ssr[@anr[.Ui
rZhCdrZV7`rZD+\rZ1tXq]#MQq\f8Jp_VNtp_WfEq\f8LrYthVrZ1kWrZM(]rZhCfr[%Ojr[@apr[Rmt
r[e%$r\+7)r\FI/r\XU3r\ja7r]'m;r]9p<r]Ks=q`a[;pHXL!ofr48q`Xg=r]C*?r]0s;r\sg7r\a[3
r\OO/r\=C*r\"1%r[[str[Igpr[7[lrZqIfrZ_4^rZD"XrZ(nVq\oAM!#bYNp_VNtp_WfEq\f8LrYthV
rZ1tZrZD+^rZV7brZhCfr[%Okr[@apr[Rmur[n+%r\4=+r\FI/r\XU3q`"L6q`=U9r]Ks=r]]m;d6N7J
[6XCLpceR<q`Oj>r]9p:r]'m9!&aj92Z>T51]B0/1&`j*0)dI%/H.1!.K1ap-iPIl,lT%f,5rbb+T<J^
*r[2Z*;^]S)Z(EL)#+p!(AJ^C)#G3J)ZC]T*<$uU*r[;Z+oW_c,lT+h-N5Fm.K1gr/,h+!0)dO'0`Ej,
1]B612?#N52uYf93W;&?4$3C&r]Ks=q`a[;JO#tqJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_2215kRA:55RMB4Sq5;3r:o9
2uYZ71]]Eir\OO/r\=C+r\+7&r[e%!r[Igpr[7[lr[%Ohq]c"^q]G\UrZ(eSrYkPLq\[p$p_`lGq\o>N
rZ(nXq]>_YrZM1arZhCfr[%Ojr[7Rlr[[t!r[n+&r\4=+r\OF.r\ja7r]'d8r]:$?r&asApc\L<ofn!m
qEX^<pceR<r]L'>r]:$=r]'m9r\ja5r\XU1r\FI-r\4=(r[n+#r[Rmrr[@anr[.UjrZhCdrZV7`rZD+\
rZ1kUrYt_Qq\f/Gf,+3!q\f8LrYt_SrZ1tZrZD+^rZV7brZhCfr[%Ojr[@apr[Rmtr[n+%r\+7)r\=C.
r\XU3r\ja7r]'m;q`=^<q`Oa=pce@8pHXBspcnO;pc\U=q`Fd<r]0s;r\sg7r\a[3r\OO/r\4=)r\"1$
r[[str[Igpr[7[krZqIfrZ_=brZM1^rZ;%Zq],SSr#,PRq\f/Gg)'E!q\fAOq]#MSq]5YWrZD+^rZV7b
rZhCfr[.Ulr[@apr[Rmur[n+%r\+7*r\FI/r\XU3r\ja7r]'m;r]9p<q`Oa=q`aR8d6N7JZ9\(IpceR<
r]L'>r]:$=r]'m9!&aj92Z>T52#]<11B'$-0`E^(/cI=#.fLmr./kUn-N5=j,Q8nd+oWV`+9!>\*W$iU
)uCQN)>G'#(\ejE)>b?O)uCWS*W@,Z+9!D^+oW\b,Q8tf-2o7j./k[p.fLst/cIC%0E*[)1&a!.2#]B3
2Z>Z73;tr83WV<(!'C'?q`X^<ofn!mUHjAqJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5e')M5PmYA4o7A=48q;?3W;#;2uPW8
2E(Olr\OO/r\=C+r\+7'r[e%!r[Rmqq^;@hrZqIfrZ_=brZM1^q]>_WrZ(eSoc!TCiu%P/q\o>Nq],SU
q]>_YrZM1`rZ_=drZqIir[7[nr[Igrr[[t"r\"1'r\4=+r\FI/q_e@3q`+R8r]9p<r]C3E4o.>=54q-k
5kdP:5PRG>4o7A=48q;?3W;#;2uY`72?#H31]B0/1&`m+0)dI%/H.1!.fLjq-iPIl-2o1h,Q8nd+oWV`
+9!>Y*W@&U)tb-E)<Me2)>G-I)uCWS*W@,Z+9!D[+oW\b,lT+h-N5Cl./k[p.fLst/cIC%0E*[)1B'*/
2#]B32Z>Z43;tr;3r;#<4SV):557A45_MDq5PmY>4o7A@48V)<3W;#;2uY`72?#H31]&p+0E*U'/cI=#
.fLmr./kUn-N5=j,lT%f,5WM^+9!>Y*W@#Z)]S_pp_roFiu%P/q\o>Nq],JRrZ;%\rZM1`rZ_=drZqIh
r[.Ulr[@apr[[t!r[n+%r\+7)r\FI/r\XU3r\ja7r]'d8q`F[;q`X^<pclqeJO$M+ofr48q`Xg=q`Fd<
r]0s;!&jp;2uY`72?#H31]B0/1&`m+0)dI%/H.1!.fLjq-iPIl-2o1h,Q8nd+oWV`+9!>Y*W@&U)tb-E
)<Me2)>G-I)uCWS*W@,Z+9!D[+oW\b,lT+h-N5Cl./k[p.fLst/cIC%0E*[)1B'*/2#]B32Z>Z43;tr;
3rD&>48qA;4o7G<5Cl(j5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO\3TULpceR<q`Oa;q`4X8r\jg8!B)k82?#H31]B0/
0`Ea)0)dI%/H.1!.K1ap-iPIl-2o1h,Q8nd+oWV`+9!>Y*W$iR)u(?-)>G-I)u(EP*W$oW+9!D^+oW\b
,Q8tf-2o7j-iPOn.fLst/Gh(!0E*^*1B'*/2#]B32Z>Z73;tr83r;#<497T.rB9p>ofn!mpH\C9pceI9
r]L'>r]:$=q`+R6r\ja5r\OO/r\=C+r\+7'r[n+"r[Rmrr[@anr[.LfrZhCdrZV7`rZD+\q]5PRq]#;K
h&5u+q]#DPq]5YWq]Ge[rZV7brZhCfr[%Ojr[7[nr[Rmtr[e%$q_.q'r\FI/r\XU3r\ja7r]'m;q`=^<
q`Oa=pceI;nN_amofr48q`Xg=q`Fd<r]0s;q`"L3r\XU1r\FI-r\4=)r\"1$r[[str[Igpr[7[lrZq@c
rZV7`q]GeYrZ1nV!$(bQp_qs+p_s#Kq],JRrZ;%\q]Pb[rZhCgr[.Ulr[@apr[Rmtr[n+%r\+7)r\=C.
q_\:1r\s^6r]0s=q`Fd>pc\C9pclqeJO$M+ofr48pc\U=q`Fd<r]0p:!B<(<2uY`72?#E21B'$-0`Ea)
0)dI%/,h$t.K1ap-iPIi,lT%f,5rbb+T<J^*r?uT*;^]M)Vl;+)Z(KN*;^cU*r@&Y+T<P`,5rhd,lT+h
-N5Cl./k^q/,h+!0)I=$1&`s-1]B612?#N52uYf93Vtl:3rqH+rB0s?pceI;JO#bkJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_2215k7/7557;?4Sq5>3r:r:2ukl<2`L^oq_\:.r\=C+r\+7'r[n+#r[[ssr[@anr[.UjrZq@cq]Yq]
rZD"YrZ1bRoc)p0q]#;Mq]5PTrZD+^rZV._rZhCfr[%Ojr[@Xmr[[t!r[n+&q_8")r\OO1r\a[5r\sg9
q`4X:q`Fd>r&t!Aq`a[;JO&imniun5q`Xg=q`Fd<r]0s;r\sg7r\a[3q_S4+r\4=)r\"1%r[e$ur[Igp
r[7[lr[%OhrZhCdrZV.]rZD"YrZ1bRoc*$3p`&uJq]5YWq]Ge[rZV7brZhCfr[%Ojr[7[nr[Igrr[[t!
r[n+&r\4=+r\FI/r\XU3r\ja7r]'d8r]9p<r]Ks=q`a[;nN_amniun5q`Xg=r]C!<r]0s;r\sg7r\a[3
r\OO/r\=C+r\+7'r[e%!r[Rmrr[@anq^)4erZhCdrZV7`q]GeY!?E3Z*W$iL)rhk3)uCWM*W@,W+9!D^
+oW\b,Q8tf-2o7j-iPOn.K1gr/,h."0)dO'0`Eg+1B'*/2#]B02uYf93Vtl:48V/84o7G95Kc<C5dEZG
5PRG>4o7A=48q;?3<2#>3&pmrr\ja5r\XL.r\=C+r\+7'r[n+#r[Rmrr[@anr[.UjrZqIfrZ_=bq]Pk[
q]>_Wp`/rGjr4"6p`0/OrZ:qYrZM1`rZ_=drZqIhr[.Ulr[@apr[Rmtr[e%#r\+7)r\=C-r\OO1r\a[5
r\sg9q`4X:q`=g@49.M=4o7G95Cl(j5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOZ9\(Iq`ad<q`Oa;r]:$=rAXg;3;tl9
2Z>T52#]<11B'$-0`*L%/H.1!.fLmr./kUn-N5=j,l8hc,5rbb+T!8X*r$c3*;(?L*r[8Y+T<P`,5WVa
,lT+h-N5Cl./k[p.fLst/cIC%0E*[)1&`s-1]B612?#N52uYf63W;):48qA<4TIY?54q-k5jgo15PmY>
4o7A=48q;?3W;#82uY`72?#H31]B0/1&`j*0)dI%/H.1!.fLmr./kUn-N5=j,lT%c,5rbb+T!8X*r?u3
*;(?L*r[8Y+T<P`,5rhd,l8ne-N5Cl./k[p/,h+!/cIC%0E*[)1&`s-1]''/2Z>Z73;tr83r;#<4Sq;:
54Ur.5_23"5kRA=557;<4Sq5;3W;#;2u>N42#B*.1&`m+0E*U'/cI=#/,h$t./kUk-Mo(f,Q8na+oWSb
+!:G'q]>VTg)Tc+rZ:qYrZM(]rZ_=drZqIhr[.Ulr[@Xmr[[t!r[n+%r\+7)q_J.-r\aR2r\sg9r]0s=
pcJI;q`X^<nit;_JO$;%ofr=;pc\L:q`Fd<!'('?3W;#82uY`72?#H31]B0/1&`j*0)dI%/H.1!.fLmr
./kUn-N5=j,lT%c,5rbb+T!8X*r?u3*;(?L*r[8Y+T<P`,5rhd,l8ne-N5Cl./k[p/,h+!/cIC%0E*[)
1&`s-1]''/2Z>Z73;tr83r;#<497T.rB9p>niq[jSNq`kJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5dEZJ5PRG;4oRS@48V)<
3<2#>3&pmrq_nF2r\OF,r\4=)r\"1%r[e%!q^MLmr[7[lr[%Ohq]kt]q]PbXq]>2Hoc3NCq]>VVq]Pk]
rZ_4arZqIhr[.Ulr[@apr[Rmtr[dq!r\+7)r\=C-r\XL0q`"L6r]0j:r]C!>q`OsD55IJ65Cl)f5kRA:
557;?4Sq5>3r:r:3;tl92Z>T52#]<11B'$-0`Ea)0)dI%/,h$t.K1ap-iPIi-2o1h,Q8na+o<DZ+8[,J
*V^WC*W$oT+9!D[+oW\_,Q8tf-2o7j-iPOn.K1gr/,h+!0)I=$1&`s-1]B612?#N52u>T63W;):48V/;
4nq535Oh!i5lO%A5PRG;4oRS@48q;?3Vtf82uY`72?#H31]B0/1&`m+0E*U'/cI:".fLmr./kUn-N5=g
,lT%f,5rb`+93PZ+9!>M*VCEC*V^]Q+9!D^+o<J_,Prb`-N5Cl./k[p.fM!u/cIC%0E*[)1&`s-1]B61
2?#N52uYf63W;)=48:r;4nq505Kc<C5cd6D5PRG;4oRS@48q8@3W(o:3;tl92Z>T52#]<11B'$-0`Ea)
0)dI%/,h$t.K1ap-iPIi-2o1h,Q8na+o<DZ+8[,J*V^WC*W$oT+9!D[+oW\_,Q8tf-2o7j-iPOn.K1gr
/,h+!0)I=$1&`s-1]B612?#N52u>T63W;):48V,@4[&a,pce75JO#bkJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22+5k7/7
55RM?4Sq5>3rM&>3B@'ur\s^4q_\:.r\=C+r\+7'r[n+#r[[str[Igpq^;7erZq@crZ_4_q]PPRiu\(>
p`TGWrZ_4arZqIhr[.Ulq^DFmr[Rmtr[e%#r\+.&r\FI/r\XL0r\ja7r]'m;q`=U9q`Oa=!Br^D54q-k
5jL]+5PRG>4o7A=48q;?3Vtf82uY`72?#H31]B0/1&`m+0E*U'/cI=#/,h$t.K1ap-iPIl-2Ste,Pr\^
+o<DT+6FX>+8?uU+oW\b,Prbc-2o7j-iPOn.K1gr/,h+!/cIC%0E*[)1&`s-1]B612>]<22uYf93W;):
48V/84nq565OLdf5lO%A5PRG;4o7A@48V)<3W;#82uY`72?#H31]B0/1&`m+0E*U$/H.0s.K1ap-iPIl
-2Ste,Q&_c,5rb_+S?i:*r$iS+S[,Z,5rhd,l8ne-N5Cl./k[p.fLst/H.7#0)dO'0`Eg+1B'*/2#]B3
2Z>Z73;Y`83r;#94Sq;:54UqZ5_22%5k7/755RM?4Sq2?3WV9&r]0j8r\sg7r\a[3r\OO/r\=C+r\+7'
r[n+#r[[str[Igpr[7[lr[%FerZh:aq]YhZocN<;p`K8Rq]Yq_rZh:cr[%Ojr[7[nr[Igrr[[t!r[n+%
r\+7)r\=C-r\OO1r\aR2r\sg9r]0s=q`F[;r&t!Apce@8JO#YhJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22(5k7/7557;?
4Sq5=3WV9&r]0s;q`"C0r\XU1r\FI-r\4=)r\"1%r[e%!r[Rmrr[@Xkr[.LgrZq@cq]b\Viun+?q]bn^
q]u%cr[7Rkr[I^pr[e%#r\"1'r\4=+r\FI/r\XU3r\ja7q`+I5q`F[;pc\O=rBBd:JO&Eaofr48pc\L:
q`Fd<q`4X8r\sg7r\aR0r\OO/r\=C+r\+7'r[n+#r[[str[Igpr[7Rir[%Feq]kt^oc`H?oca2Vq]l(c
r[%Fgr[7[nr[Igrr[[jsr[n+%r\+7)r\=C-r\OO1r\a[5r\s^6r]0s=q`F[;pc\C9niuP-JO')tofr48
pc\U=pcJI9r]0j8r\sg7r\a[3q_S+(q_.q$r[n+"q^VRor[@anq^2:gr$27frZh1^p`\Z?oca;Yp`ob`
r[%Ojq^;@kr[Igrr[[t!q^qe#q_8")r\OF.r\a[5r\s^6r]0s=q`F[;pc\C9nit2\JO$2"ofr48pc\L:
rAt$A48q;<3W;#;2uY`72>]601]B0/1&`m+0E*U'/cI=#/,h$t.K1ap-i57i-2Stb,Pr\X+m'p?+o<J\
,Q8tf-2T%g-iPOn.K1gr/,Lms/cIC%0E*[)1&`s-1]B612?#N52u>T63W;):48V/94TIY?54Uph5ajrh
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO$D(niue2q`Xg=q`=d=!BN:@3Vtf82uY`42>]3/1A`d)0E*U'/cI=#/,h$t.JkOm
-i57i-2Ste,PWJO+oWVT+o!8Y,Prb`-2o7j-i5=k.K1gr/,h+!/cIC%0E*[)1&`s-1]'$.2?#N52uYf6
3W;):48qA;4o%8A54:^e5j1K+5Oq#;4nq/:48q;?3W;#82uY`72?#H31]B0/1&`m+0E*X(0)dI%/H.1!
.fLmr./PCk-Mo+g,l8h],4ZoS+S$]N,5WV^,l8ne-N5Cl./k[m.fLst/H.7#0)dO'0`Eg+1B'*/2#B00
2Z>Z73;Y`83r;#<4SV)754:`(5_22t5kRA455m_?4Sq5;3W;#;2u>N42?#H31]B0/1&`m+0DdC$/Ggsp
.K1am-iPIj,lf7j,l8h],4ZoS+S$]N,5WV^,lT+e-N5Cl./k[p.fLst/H.6u0)dO'0`Eg(1]B612?#N5
2u>T63Vtl748qA;4nq505KH*@5cI$A5Oq#;4nq,>48_2>3rV/=3;YZ62Z>T52#]<11B'$-0`*O&0)dI%
/H.1!.fLmr./PCk-Mo+g,l8h],4ZoS+S$]N,5WV^,l8ne-N5Cl./k[m.fLst/H.7#0)dO'0`Eg+1B'*/
2#B002Z>Z73;Y`83r;#<4SV&?5!Jg,mlu@gRQuEhJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5cI$D5P7584o7A?3rqE)r]9p:
r]'m9q_n=.r\OO/r\=C+r\+.$q^h^sr[Rdor[@Xkr[.Lgq]tVTp`f8Rq]tq_r[.Lir[@Xmr[Rmtr[e%#
r\"($r\4=+r\FI/r\XL0r\ja7r]'m;pcAC9q`OX:q*"dBofn!mgd(X!ofi.6q`Oj>q`=^:q`+R6r\ja5
r\XL.r\FI-r\4=)r\"1%r[dpsr[Rmrq^DFkq^21dq]tVTp`f8Rq]tq_r[.Lir[@apq^VRqr[e%#r\"1'
r\44(r\FI/r\XU3q_nF4r]'m;q`=U9q`Oa=pce75kWj\apd"L:ofi.6q`Oj>q`=^:r]'d6r\ja5r\XU1
q_J%&r\+7'r[n+#r[[jqr[Igpq^2Ck-N,:g-2StY,PWJR,PWP]-2T%g-i5=k.K1go/,h+!/cIC%0E*[)
1&`s*1]B612?#N52u>T63Vtl:48:r84nq535Jf[:5bgU>5P7584oIJD4?WU)q`=^:q`+R6r\ja5r\XL.
r\FI-r\4=)r\"1%r[dpsr[Rmrq^DFkq^21dq]tVTp`f8Rq]tq_r[.Lir[@apq^VRqr[e%#r\"1'r\44(
r\FI/r\XU3q_nF4r]'m;q`=U9q`Oa=r'('Cniq[jPX'dbJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5cI$>5PRG84oRPD48_2>
3r:r:3;YZ62Z>T22#]<11B'$-0`Ea&0)dI%/Ggss.f1[o./PCe-JBdC-Mo1f./PIm.f1aq/H.7#0)I=$
0`Eg+1A`m,2#]B32Z>Z43;Y`83rV5?4T7GA4SV)74oml4pHO3ofg,*mpceI9q`Oa;r]9p:r]'d6r\ja5
r\XU1r\FI.r\=C+r\+7'q^qdur[[jqq^MLmq^;.cg*QVCq^;7hq^MLoq^_Xsr[n+%r\+.&r\=C-r\OO1
q_e@2r\s^6r]0j:r]Bm;pc\C9ofqP'JO&lnofr48of`::q`F[9r]0j8r\s^4q_\:.r\FI-q_8"&r\"1%
q^h^sq^VRo!@TAp./PCe-JBdC-Mo1f./k[m.fLsq/Gh(!0E*[&1&Ed+2#]B02Z>Z43;tr83rV5<4SV)7
54UqQ5_21q5k7/75578@4T%>=48q;<3W;#82uY`72?#H31]&s,1&`m+0E*U$/cI=#/,Lgn.K1am-ho%B
-2T%d-i5=h.K1go/,h+!/cIC%0DdI&1&`s-1]B6.2?#N52u>T63Vtl:48:r54o@MB54q-k5`n<_5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO$2"mm$S2pc\R<!B`LD48V)<3Vtf82u>N42?#H01]&p+0`Ea&0)dI%/Ggsp.fLmo./51G
-M8b`./k[m.fLsq/H.7#0)I=$0`Eg(1B'*/2#]B32Z#H43;Y`83r;#64T7M74oml4pHO3ofg,*mpceI9
pcSO;q`=^:q`+R6r\jX2r\XU1r\FI-q_8"&r\"("r[dpsq^VRoq^D4eh'VnEq^D=jq^VRqq^h^ur\"1'
q_8"(r\F@,r\XU3r\ja7q`+I5r]9p<pcSO=nil_2jZnA^og&(4pceI9pcSO;r]9p:q`+R6r\ja5q_\:.
r\FI-q_8"&r\"1%q^hUpr[Ipt.K(^m./51G-MStc./PIm.f1aq/Gh$u0)dO'0`*U(1B'*,2#B312u>T6
3Vtl748V/;4nV#05JKI75bgU85PRG;4TIV?4T7G>3rV/:3;tl92Z#B22#]<11B'$*0`Ea)0)I7"/Ggsp
.fLmo./51G-MStc./PIj.fLsq/H.7#0)dO$0`Eg+1A`m,2#]B32Z>Z43;Y`83r;#64T7M;55d\<5Cl(^
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOVEj]:pceI9rB1!?q`Fd<q`4O5r\sg7q_e@0r\OF,r\=C+r\+.$r[n!uq^_On
paP#IodTbfq^_Xsq^qe"q_.q&r\=:*r\OF.q_n=1r]'m;pcAC9q`OX:ofi:<pHO3oej/mmofi.6pcSO;
q`=^:q`+R6q_nF2r\XU2r\OO/q_A((r\+.$r[n!uq^_Onq^L5IodTbfr[[jsr[n""r\+.&r\=C-q_S4.
r\aR2r\sg9q`4O7q`F[;q`XL6niu5$JO&ckofr+5pc\C7r]C!<r]0j8r\s^4r\a[3q_S4,r\=:(r\+7'
q^q[r!@o]!/,Lgn.G?3C.JkUo/,Lms/c.1"0E*[&1&`s-1]'$.2?#N22uYf63Vtl748V/;4n:f-5JKI7
5bLC85P75:4TR]/pcSO;q`=^:q`+R6q_nF2q_\:.r\F@*r\4=)q_%k"q^hUpq^VIlg*lVCq^VRqq^h^u
q_%k$q_8"(r\F@,r\XU3q_nF4r]'d8q`=U9q`Oa=o0*.<niq[jO[+I_JO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5bLC85P75:
4TR]/q`Oa;q`=^:q`+R6q_nF2q_\:.q_J.*q_8"&pb)Otpal(gjsopPr[dpuq_%b!r\44(r\F@,r\XL0
r\ja7q`+@2q`Fd>r]C*Aof`(6q*4gBJO%@Cofr+5pc\L:q`F[9r]0j8r\s^4r\aR0r\OO/q_A((q_.h!
q^q[rngiiPodfnjq^q[tr\+.&r\=:*q_S4.q_e@2r\s^6q`4X:q`FR8pc\C9niu"sJO&Qeofr48pc\L:
pcJI9q`4O5r\sg7q_e7-r\OO/q_A((q_.h!!A,o%/c.*l/*8>P/,h*p/c.1"0DdI&1&Ea'1]B612>]<2
2u>T33W;):48V/54nq535Ij%15ajt25P72?4o%8<4Sq5;3rV/:3;tl62Z>T22#]<11A`g*0`*O#0)I6t
/Fk=R.eP=h/Gh$r0)dO$0`Eg(1A`m,2#B002Z>Z43;Y`83r;#64SV)755[Y>5Cl(X5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOTKr'4ofi=;r&sp>q`F[9r]0j8r\s^4r\aR0r\OF,q_A((q_.h!q^qIlj"'dRpauItpb2V#q_A(*
q_S++pbr+1q`+R8q`=U9pcSO=nilb3rBGiub!>M^pceI9pcSF8r]9p:q`+R6r\ja6r\aR0r\OF,r\=:(
q_.h!q^qIlj"'dRq^q[tq_.h#q_A(*r\OF.r\aI/r\sg9q`4O7q`FR8r]Tg9niu"sJO&Qeofr+5pc\C7
q`Fd<q`4X8q`"L4q_e@0q_S+)r\=:(r\+1%r@[t!pak>Rodotlq_%b!r\4+%q_S++r\aR2r\s^6q`4O7
q`F[;q`XU9mm"?JJO#Yhniun5!'U-@pcSF8r]9p:q`+R6q_nF2q_\:.q_J.*q_7n#q_%atodo,Rodotl
q_%b!q_7n%r\FI/q_\:0pbr+1r]'d8q`=U9pcSO=nilt9pHO3oMa2hYJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5bLC25PRG@
4o%8<4Sq5;3r:r73;tl62Z>T22#B*+1B'$'0`*Nr0&S>V0).*s0`*U%1B'*,2#B002Z#H13;Y`83qtf6
4SV)454^u=5Cl)?5k7/454q)94Sq5;3r:r:3;tl92uY`42>]6-1]B0,1&E["0D-sX/bLak0DdI#1&Ea*
1]'$+2?#N22u>T33W;)748V/;4n:f-5MSMT5jUc,5P7554o7A@48:l63W;#82uY`42>]6-1]B0,1&N^*
0_d<o0&nPV0).+!0_dC%1A`m)2#]B02Z#H13;tr83r;#64Sq;454UqH5_21h5k7/64omi2of`17q`F[9
q`4X8q`"L4q_e7-q_S4,q_@t%pb2:mj"9pVpb2Luq_@t'r\OF.q_e@2q`"C3q`4X:pcJ@8q`XL6q*4^?
JO##VJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21k5jpr34omi2of`17q`F[9q`4O5q`"L4q_e7-q_S+)pbDFqi%OjZpbDP!
r\OF.pbi%/r\sU3q`4O7q`FR8of`(6ofr@>JO%+<mm$J/pc\C7q`Fd<q`4X8r]'d6q_n=/q_\1+q_Iq$
oe>;Wpb;Itq_J%)q_\1-q_nF4pc/.2q`=U9pcS=7pce75ej+dOks4]%pce@6r]L0Ar]L'>r]9p:q`+I3
q_n=/q_\1+r%\7-pbDOth(SOWpbDY$q_S++q_e7/r\s^6pc8=7pcJ@8of`(6nis?DJO#Pemm$b7q*+R:
pcSF8r]9p:q`+I3q_n=/q_\1+q_Iq$oe>;Wpb;Itq_J%)q_\1-q_nF4pc/.2q`=U9pcS=7pce:6!'c$"
Jj=lPJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5b11,5PdSA557;<4Sq5;3qt`73;YZ02Z>T/2#B*(1AET[0_I0q1A`m)2#B0-
2Z#H13;Y`53qtf94SV)154Ur95_22<5jU`1557;94Sq5;3r:r:3W;#82u>N12>B$*1]&s&1"n>S1&*O$
1]'$+2>]<22u#B03Vtl448qA;4n:f-5Lr)N5j:Q&5P7584nq/:48V)93Vtf52u>N12>]6+1B96.1AETX
0_I0q1A`m,2#&s*2Z>Z13;Y`83r;#<4T7GA4SV)454:_?5_21e5jU]855@D;4nq/:48V)63W;#82u>N1
2>B$*1]&s&1"n>S1&*O$1]'$+2>]<22u#B03Vtl448qA;4n:f.56*p!5_;7P5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO#Pe
mm$b7q*+R:pcSF8pcAC7pc/.0q_n4,q_[t%d5(SToecY*q_n4.q`+I5q`=L6pcS=7ofhh/r'5fu]g2-Q
nilh3pcSF8q`=U7pc/.0q_n4,q_[t%e2$eTpb_k*q_n4.q`+I5q`=L6q`OX:nilM,ej+dOj$<0"nilh3
q`OX8q`=U7q`+@0r\jO/r%nC1oeXuNpbV\%q_e7/pc&13pc844pcJ@8pc\13mm"$AJO#>_nim+<o02q4
pcSF8q`=U7pc/.0q_n4,q_[t%e2$eTpb_k*q_n4.q`+I5q`=L6q`OX:nilP-!'c$"Jj=lPJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5a4P%563u5pce@6q`Oj>r]L'>q`=U7pc/.0pbqn)nhfJboecG$oeue.of2h/q`=L6q`OF4ofhh/
q*9Kr\j5UHpce@6q`OX8r]C!<q`4O5pc&(.oel:sjtlZepbh_&r\sU3pc844pcJ@8nicb3lp&raJO&-Y
mm$S2nick4pcJ@6pc842pc&(.!Aub/2=`Tj1]B611\EU"2>&m,2u#B03VYZ448:r24nV#*5HR2%5`S,%
5P[P=54q)94S:f53r:r73;>H02YAru2!-Ue2#&s$2Z>Z13;>N23qtf64RtZ153tK75X9lcJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5a4P%5Q!b=557;94Sq583qt`43;>H*2YArc2"EO$2YB$+3;>N23r;#<4T7G>4SV)153tN0
5_2235jU`+557;94T7GA48:l33Vtf22u#<%2<-O^2>]<,2u#B-3Vtl748:r54mtT$5LVlK5i=oo5Oq#5
4o7A:48:l63VYT22uGT12Y&`c2"EO!2Y]6+3;>N23r;#64SV)153Y;65_21\5kI;:5Oq#54nq/:48:l3
3Vtf22u#<%2<-O^2>]<,2u#B-3Vtl748:r54mtT$564#7JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21\5kI;=5Oq#2
4nq/748:l33Vtf82uYf62sE6n2=EHr2u#B-3VYZ148:r24nV#-5O^ph5dWfI5OUf24nq/=4Sq583qt`1
3;>Gp2Y]/r2YB$(3;>N/3qtf34S:l154:_Y5_22S5k7/154q)34Sq583qt`12utrsqD[Xsoel(opc%k*
pc8+1q`FI5pc\13mm!U5JO##VqEOd?mlpM0ofW+5pcA11pc/%-ju2ullo+Mqpc/%/pcA13pcS44ofhh/
p-=0oJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5`7o%5P%,754:Z34S:f23qYN+3;tl938-=a3;#<,3qYT04S:l.54Ur'
5_22*5jU`.54Ul34S:f53q><(37Kn^3:]*)3qYT04SV).54UqV5_22P5jU`.54Ul34S:f53qbT43V>Ac
2uYf92u#B'3VYZ448qAA48V/54n:f*5Ft,k5_VK%5O^o154Ul34S:f53q><(37Kn^3:]*)3qYT04SV).
54Ur-5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOMa7#$o0;\-pc\:4pcJ.0ni=uTni?A(q`Fd>r]C!>nicY0lp'c#
JO$J*lp'r&pc\:4ofMh-ni=uTni?J+pcJ.2nicb3ks**OJO%gPlp'r&pc\:4ofMq0r&OC0c8bJWofDk0
ofVn1ofhV)Sj7ilKg>T$n3?A*pc\:4ofMh-ni=uTni?J+pcJ.2nicb3ks+Z&JO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21P5QF%95OUf/4nUr147>5X3U]$%47t`/4n:f'5Nb:_5c?s75OUf24nUr.47>5[3U]$%47YN/4mtT$
5J]U95gDX`5OUf/4nUr148_/33mftV3qYT-4S:l.53Y;$5_21O5l<n65OUf24nUr.47>5[3U]$%47YN/
4mtT$5OC^e5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOr'9L2ofhh-niZA&d5ph[r]L0Aq`O=1mlp)&iBVrZU-Rs-
pce.0ml^&#e2m%[ofVe.mlou#]0Lp4a?])Vofhh-ofW48r]C3C47kV^3q#0'4RtZ(53Y:s5_21O5k[J-
5PRG24mtN%44H=[47t`,4mtT!5Nb:_5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOr'9C/mlp;*niYqoofD>!r]L0A
ofVn1ks">riBVrZU-Rs-pceI:mlg>+i&g]pju`#oof_P'ks)dFJO%:Aks+W#nicS,!'K:'ofD4sniZJ+
losPrPsBmcJO&ooks+W#mlg>+i&g]pju`#oof_P'ks+>rJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5k@8*5OUf&
4m>*.48qA/46AZo4mYB!5M/5P5aan%5OUf)4m"lh46AZo4mtT!5I*P*5efSN5OUf&4TRZ-kWJ2nr]L0A
kreDtlosYuN'MqZJO&Tfks+W#mlfeqju_]fmlg,'ks+#iJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5jCW!5OUei
4m>)b4mtT!5L2TG5`e8%5PRJ352ABa4P`0h53Y;25_22/5jU`(54^r$4m>)b4mtSs5D)4P5_22]5j:N%
52ABa4P`0h53Y;^5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO&Kck!.cf^HL^Cj$1jTJO#;^niun6h*/\=k!%]f
WBc#"[Qs(Aj?EN+^HL^Ci'2iZJO"cOj?Vroh*/\=k!%]feNe[NJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_22Z5it;e
52ABX53"lI5_21U5l3e75M\NZ4l&<[5G18m5cm<95OCZ)52ABX52\YV5l*`s5_22T5j:Mh52ABX52\ZL
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO%jQf0@#6h*8J9JO"cOr]o("_EQ[<PX'dbUd3d$rBJ%\g-:-RmQc=g
JO%XKf0@,9g-<A<JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5hJ?I5L_mE5Is+25_23"5gDUD51)TZ5_21r5i+`t
5L_mB5Cl)f5_21O5ghpC5L_mE5JTO85_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO`^#\OX$D5$JO&QeP!=XcJO#A`
n3<[4JO&*XJO"cO^d+&IYs<k*JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_22!5gDTR5_21O5gDX?5Cl)_5_21O5kI=e
5Cl)95_21O5b^Nh5Ee?`5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOW'JWmNBi%[JO%LGc9HkFk<OS`JO&imc9HkF
_*EQ:JO#qpc9ILXJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO&0ZW]u&"pcsBqJO&-YW]u&"q*9KrL-YZ$Y<RS'dm/ILJO$S-W^!=FJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5k[I^5PRF`5Dh^W5_22n5fGt_50,sH5_21i5j(Ah5PmX`5Cl)]5_21O5fl:1
5PRF`5IWn/5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOp-@P#b<FWEMEl_XJO&lni'5CKg-:K\JO#\ik<Jf-b<FWE
JO&<^JO"cOa["cKb<FWE[m5L0JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_VK%5MeW/52\Yk5_21R5lO"(5Hm?05F4Wd
5cR**5Q!^N52\YV5k.*j5_22Q5h\H,52\ZC5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cON^35$n3>_mh*'7Oj$0A*
JO#2[ofqn0h*0XXe3;nWVEf\tZU!Y;l9=`%h*'7Oj$/)[!'l*#JO&0Zj$2?`h*'7Oj$1sWJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21\5kI;:5NY/64m"rp5G^Vr5`J&%5PRJ*5-R3453tM25_22,5jU_t4omf0[6<Y9ks'_a
!'l*#JO&0Zlp'VrYW_,4lp&o`JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21e5jU]853G,l4k)UV4mtSp5H[8&5aF\%
5NY/l4k)UV4mtSp5Hd>'5eKAK5NtB'4nLnb4Q\fq53"ka5_21O5jCW$5NY/l4k)UV4mtSp5MJGS5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO#knlp(5.n36V1juh-Tloai%losPr[m5L0T0Va-pce.1pc[b%e3!"Znic>'k!-@@
JO%1>lp'Vrpc\=5pH8F:r]Jmrr]L0Aloar(ks"5oP!FR`JO&fllp'Vrpc[b%e3!"Znic>'k!.olJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21n5jU`055@D24n:_M47><#4mtT$5IWn/5bC=.5PRG;54:Z*4MNuH4RYH%53tMD
5_22>5jpr+54:Z+49.LV47><&4mYB!5E\9_5_22l5jU`(54:Z*4MNuH4RYH%53tMp5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOWBff7mlg_7n3-G,niO]LofM_,nicP-lp&'HJO$/!lp'r&mlg>+niO]LofM_,nicP-lp&*I
JO%LGlp'r&nicP+q)eO:_E.6LofV\+nilD)PsBmcJO',ulp'r&mlg>+niO]LofM_,nicP-lp'YuJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_22%5jU`%4odbD4nUr147YH$3T`<i3V>H(48:r54mtT!5Joa;5c[0:5O:T24nUr1
47YH$3T`<i3V>H(48:r54mtT!5K#g<5g_j`5OUf24nUr148Cr93q#)k3:Alu3qtf94T7G;4SV).53Y;'
5_21O5QO,8lp'i#q`XU7ofM_*mlBMimlC&%niQV/pc\(0ks+Z&JO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22%5k7/.
55.2@4[&I#pcJ.0of:)Qpc8".ofMh/of_b-nit#WJO$8$niuS,pc\U>ofW"2ofDb+a>irTofDb-ofVn1
mlp;,`'Al=d6R7enilV-pcS42pcA=5pGp;Spc8+1niQM,pc\(0mm!C/JO"cO!C/p@5OUf/4nUr447tZ-
3QO2T3V>H+47t`/4mtT*5O^ph5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$M+lp(/,of`79r&jX6pcA11pc.Cppbq@q
of2_,pcA13pcS=7mlp)&aZtDBYs@Y?ofi%3r]L'?ofMq0pc8+/ju<&nkr88ppc8+1pcJ75pc\(0lp&WX
JO%gPmm$A,of`(4pcJ73pc873qDd^upbq@qof2_,ofDk0pcS=7mlp)&Ud0JrKg>T$n3?S0of`(4ofMq0
pc8+/ju<&nkr88ppc8+1pcJ75pc\(0lp(2/JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22.5k7/.557;949.J=48:l6
3VYT/2t])Y2>B*)2u#B-3VYZ148:r54mtT*5KlBD5dWfI5OUf24nq/748:l63VYT/2t])Y2>B*)2u#B-
3VYZ148:r54mtT*5KuHE5h\Ko5OUf54nUr748:l33Vtf32uP].2V0hZ2Y]6+3;Y`23r;#<4T7G>4SV).
54:_65_21V5l*_@5OUf24nq/748:l63VYT/2t])Y2>B*)2u#B-3VYZ148:r54mtT*5P[Qq5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO$V.niue2nick4rB'p=q`=L4q`+@0pbqRujtuNaq_n4.pc/.2pcA:6pcS=7mlp;,bWp_E
Zp=1Hofhq0q`Oj>q`F[9pc842pc%t+mks5amksu#pc%t-q`4F4q`FR8pc\(0nitAaJO%pSofr"2of`17
ofN%3pc842q`"F2rAO+%j#$<apbqn+pc/.2pcA:6pcS=7mlp;,Va,euLd:f$q*4O9nick4pcJ@6pc842
pc%t+mks5amksu#pc%t-q`4F4q`FR8pc\(0niuq8JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_2245k7/1557;94SUu<
3rD&93Vtf22u>N+2>B#X1\`g%2>B*,2u>T33VYZ447t`24nq5-5LMfJ5e95O5Oq#54nq/748V)93Vtf2
2u>N+2>B#X1\`g%2>B*,2u>T33VYZ447t`24nq5-5LVlK5i=ou5P7554nq/:48:l63Vtf52u#</2>oE*
1tjbb2#]<+2#B0*2Z#H.3;Y`53qtf34SV)453tM95_21\5kI8A5<n^&pc\C7pcJ@6q`4O5pc&(.oelM$
e2-kVpbhh)q`"C3q`4F4q`FI5pc\C9lotM95_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO^-M6Rnilq6pcS=5q`4^;
r&Oa9pc&(.q_e7-pbVRug+i@XpbVe(q_e7/q`":0q`4O7q`FR8q`XC3nitYiJO$n6niu\/q`X^:pcJ@6
q`4X8pc&(.q_e7-pbVRug+i@XpbVe(q_e7/q`":0q`4O7q`FR8q`XC3nit\jJO&6\ofqn/q`X^:q`F[9
pc8=5q`":.q_e7-!AcP.1\ENW1&*O$1\`g(2>]</2u>T33VYZ448:r84n:f*5HmD(5`n>&56*n=55RM<
4SV#83r:r:3;>H02Z#B/2#&m"1>4JX1AE[&2#B0-2Z#H.3;Y`53r;#64Sq;154^u=5Cl(O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cO^-M6RpceI9pcS=5q`=[9!BE1>3;YZ32Z#B,2#B*(1@d0^0_I0q1AE[&2#B0-2Z>Z13;Y`5
3r;#64SV)454Uqg5_2265k7/7557;94SV#83rV/=3W;#82u>N12>B$*1\``r1$11_1&*O!1]'$+2>]<2
2u#B03Vtl748:r54nV#05Lr)N5iY-&5P7584nq/:48:l63W;#82u>N12>]6+1B96+1A*B^0_I0q1AE[)
2#&s-2Z#H.3;Y`83r;#34SV)454UqB5_21_5k7,>55@D;4nq/748V)93W;#82u>N12>B$*1\``r1$11_
1&*O!1]'$+2>]<22u#B03Vtl748:r54nV#156*p!5_;7P5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=niu\/pc\L:q`F[9
q`4U7!B<(<2u>N12>]6-1]&s)1%d6q0BOn^0DI6r1&Ea'1]B6.2>]</2u>T63Vtl448V/84nV#-5MJGS
5f5kX5Oq#54o7A=48V)93W;#;3;tl62Z#B/2#B*+1A`g!0_d<`0).*p0_dC"1A`m,2#B0-2Z#H13;tr8
3qtf64SV)454:_k5_22b5k7/4557;<4SV#83r:r73;tl62Z>T22#&m(1''*arA"1'r\+7)pb1kaoe6(o
q_@k$r\OF.q_e@2q`":0r]0j:pcJI;of_t3mm"6GJO#Peniut7q*+R:q`Oa;q`=U7q`+R6q_n=/q_\1+
q_J%'oe?.ojt?E^pb;Itq_J%)r\XL0q_n=1q`+R8q`=L6q`OX:ofi(6qEKNrLd6MVJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5fZ.\5Oq#;4nq/:48V)93Vtf72ZYirr\ja5q_\1+r\F@*pb;\#pb)4kjt-9Zpb)Fsq_7n%q_J.,q_\:0
q_n=1r]'d8q`=U9pcSF:nilV/hEZWW`^')Znim%9pcSF8q`=U7q`+R6r\sg7r\aR0q_S4,q_@k"r\+%!
oe#;Wpau7nq_.h#q_@t'r\OF.r\aR2q`"L6q`4O7q`FR8q`XL6niu"sJO&Qeofqn/r]U$=q`F[9r]0j8
q`"C1r\a[3q_S+)q_@t%!A?,)0DI0p/`nVW/bgsq0DdI&1&*O'1]'$.2>]</2uYf63Vtl:47t`54nV#-
5Ij%15ajt/5PIA>55m_?4Sq5;3r:r73;YZ62Z>T22#B*.1A`g$0`Ea#0(ggY/GLgl0)I=!0`*U%1B'*,
2#]B02Z#H43;Y`53r;#64Sq;455[Y>5Cl(X5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOa$B2[pceI9pcSF8q`=^:q`+R6
rAF[72Z>T22#]<.1A`g'0`*O&0).$k/ESJX/GLgo0)I=$0`*U%1A`m,2#B002Z#H13;tr83r;#64SV)7
54Uqp5_22?5k7/7557;94Sq5;3rV/:3;tl92Z>W62>]601]&s)1&E[%0E*U!/bL[W/,1[j/c.0t0E*[&
1&Ea'1]B6.2?#N22u>T63Vtl748:r54nq535Mn_W5jUc/5PRG;4nUr748q;<3Vtf82u>N42>]601]&s,
1&E[%0**[Xr@[jsodo5Upal:opb)Fsr\44(r\F@,q_\1-r\ja7q`+I5q`=U9q`OX:ofhq2\Nk^2RR$F.
pc\[@q*"L8q`F[9r]0j8r\s^4r\aR0r\OF,q_@t%q_.q$pau.ijt$3Xpau@qq_.q&q_@t'q_S4.q_e@2
q`"C3r]0j:q`FR8pc\C9r'0p?JO#,YJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22F5k7/155RM?4Sq5;3r:r:3;YZ62Z5K6
2)Y@iq_S4,r\=:(r\+.$q^q[rq^_=hjsg'Tpac4mq^qe"q_.q&q_A(*q_S4.r\aR2r\s^6r]0j:q`F[;
pc\:6ofq:uJO%FEniu\/q`Xg=q`F[9q`4X8q`"L4r\a[4r\XL.r\FI-q_8"&q_%atq^hUpod])QpaZ%h
q^hUrr\"($r\44(r\F@,r\XU3q_nF4q`+R8q`=U9q`OX:ofi%5h`u`Xnj)b1ofi.6q`Oa;q`=U7r]'m9
q_nF2r\XL.q_J.*r\44&q_%du!%n(!q^_Fkj!jaQpac4mr[n""r\+.&r\=:*r\OF.r\aR2r\s^6r]0j:
q`F[;pc\:6ofouPJO#knniu\/!'U6Cq`Oa;q`=U7r]'d6r\jX2r\XL.r\FI-q_8"&q_%atq^hUpod])Q
paZ%hq^hUrr\"($r\44(r\F@,r\XU3q_nF4q`+R8q`=U9q`OX:of`C@5PIBn5`7mY5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO%IFofr"2r]U$=q`Fd<q`4X8q`"L4q_e@0!&FX31]B0,1&`m(0E*U'/c.*u/,Lgn.J5+I-ho+e.JkUl
/,h*s/cIC%0DdI&1&`s*1]B612>]<22u>T63Vtl:48:r84n:f05NG(\5g2Ld5Oq#;4nq/:48q;<3W;#8
2uY`42?#H31]B0,1&`m(0E*U'/c.*u/,Lgn.J5+I-ho+e.JkUl/,h*s/cIC%0DdI&1&`s*1]B612>]<2
2u>T63Vtl:48:r84n:f05NP.]5k7255Oq#;4nq/:48q;<3W;#82uY`72>]601]B0/1&E[(0DdC$/c.*u
.fh+Lr@7[npaFrGpaH+jpaZ.kr[e%#q_%k$q_7n&q_S4.r\a[5r\s^6q`4X:r]Bd8q`XU9nislSJO#kn
ofr"2r]L6Dq)nO9r]9p:r]'d6r\jX2r\XU1r\F@*r\44&r\"1%q^h^sq^VIlodJ`GpaH"gq^VInr[dpu
r\"1'q_8"(r\F@,r\XU3q_nF4q`+R8q`=^<pcSF:p-/F=ofn!mO[+I_JO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5g;Re5PRG;
4nq/=48V)93W;#;2uY`42?#H21BB9fr\FI-r\4=)q_%k"q^h^sq^VRopaGnbi$S4Hq^D=jq^VRqq^h^u
r\"1'r\44(r\F@,r\XU3r\ja7q`+R8q`=U9q`OX:ofi%5j?S8]bWthcpceI9pcSO;q`=U7r]'m9r\jX2
r\XU1r\OO/r\=C+r\+.$r[n!ur[[jqr[IUjpa=uHpa>qeq^MClr[[jsr[n+%r\+7)q_A(*q_S4.r\a[5
r\s^6r]0j:q`F[;pc\:6ofqP'JO&ckpcnF8q`XU7r]C*?q`4X8q`"L4q_e@0r\OF,q_8"&r\"("r[dps
r[Ipt.K(^m..ntG-MStf./57g.fLst/Gh$r0E*[)1&Ea*1]'$.2?#N52u>T63Vtl748V/84nV#35JKI7
5bLC85PRG;4TIV?4T7G>3r:r:3;tl92Z#B22#B*.1B'$-0`Ea&0)dI"/H.0s.fLml./51J-MStc./PIj
.fLsq/H.7#0)dO'0`*U(1A`m,2#]B32Z>Z43;tr83r;#94SV)855d\<5Cl(^5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
cp77gofi79q`Oa;q`=^:q`+R6r\ja5q_\:.r\=I.!AQ>.0`*O&0)dI%/H.0s.fLmo./PCh-M8\I,kr\\
-Mo1i./PIm.fLst/Gh$u0)dO'0`Eg(1B'*/2#]B32Z#H43;Y`83r;#94SV)754Ur$5_22H5kRA755RM?
4Sq5;3rV/:3;tl92Z>T22#]<11B'$-0`*O&0)dI%/H.0s.fLmo./PCh-M8\I,kr\\-Mo1i./PIm.fLst
/Gh$u0)dO'0`Eg(1B'*/2#]B32Z#H43;Y`83r;#94SV)754Ur%5_22n5kRA:557;<4Sq5;3rV/=3;YZ6
2Z>T52#B*.1B'$-0`Ea&0)I4!/,h$q.JtRo./kUh-MSnI,kr\_-Mo1f./PIm.fLst/H.6u0)dO'0`Eg+
1A`m,2#]B32Z>Z43;tr83r;#<4SV)454UqT5_21q5kRA755RMA497Q,q`F[9r]0j8r\sg7r\aR0r\OO/
r\=C+q_.q$r[n+#r[[jqr[I^mq^;7fod/`Gpa,\^q^;@kq^MLor[[t!q^qe"r\+7)r\=:*r\OO1r\a[5
q`"L6q`4X:q`F[;pc\O=rBBd:JO#GbJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22O5k7/455RM?4Sq5>3r:r:3;YZ62Z>T5
2#]<11B'$-0E<a,0/*;Wq^qdur[[str[I^mr[7Rir[%=bq]jo@p`oY]q^)4gq^;@kr[Igrq^_Xsr[n+%
r\+7)r\=C-r\OO1q_e@2r\s^6r]0j:r]C!>q`XU9ofqV)JO%aNniue2q`Xg=q`Fd<q`4X8q`"L4r\a[3
r\OO/r\=C+r\+7'q^qdur[[str[I^mr[7Rir[%=bq]jo@p`oY]q^)4gq^;@kr[Igrq^_Xsr[n+%r\+7)
r\=C-r\OO1q_e@2r\s^6r]0j:r]C!>q`XU9ofqY*JO')tniue2q`Xg=q`Fd<q`4X8q`"C0q_S4,r\=C+
r\+7'r[n!ur[[str[Igpq^;@i!@9&j-2St_,MaR=,Q8t`-2o7j-i5=k.K1gr/,Lmp0)dO'0`Eg+1B'*/
2#]B02Z>Z73;Y`83rV594T7M754q.W5_22"5k7/455RM?49.J@48q;<3W;#82uY`72?#H31]B0/1&`m+
0E*U$/cI=#/,h$t.JkOm-i57i-28b_,MaR=,Prb`-2o7g-iPOn.K1go/,h+!/cIC%0E*[)1&`s-1]B6.
2?#N52u>T63Vtl:48V/;4o@M?54q-k5a4Nb5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%dOniun5q`X^:r]C!<r]0s;q`"L4
r\a[3r\OF,r\4:(!A?,*0)dI%/H.1!.fLmr./PCk-Mo+d,l8h],3'jA,5WV^,l8ne-Mo1i./k[m.fLst
/H.7#0)dO'0`Eg+1B'*/2#]B32Z>Z43;tr83r;#94SV)7557A*5_22N5k7/755RM<4T7G>3rV/=3;YZ6
2Z>T52#]<.1B'!,0E*X(0)dI%/H.1!.fLmr./PCk-Mo+d,l8h],3'jA,5WV^,l8ne-Mo1i./k[m.fLst
/H.7#0)dO'0`Eg+1B'*/2#]B32Z>Z43;tr83r;#94SV)7557A+5_22t5k7/755RM<4T7GA3r:r:3;YZ6
2Z>T52#]<11B'$-0`Ea&0)I4!/,h$t.K1ap-i57i,lo8:qBYq_p`e`Ap`fS[q]u.eq^21fr[@apr[Rmt
r[e%#q_%k$r\4=+q_S4.r\a[5r\s^6r]0j:q`F[;pc\C9pclV\JO$2"niun5q`X^:!':3C48V)<3W;#8
2uY`72?#H31]&s,0`*O&0)dI%/H.1!.fLmr./PCk-Mo+d,l8h],3'jA,5WV^,l8ne-Mo1i./k[m.fLst
/H.7#0)dO'0`Eg+1B'*/2#]B32Z>Z43;tr83r;#94S_,?4nq595Cl(a5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOej/mm
pceI9q`Oa;r]9p:r]'m9r\ja5r\XU1r\FI-r\4=)r[n1&!A,o&/H.1!.fLmo./kUn-N5=g,lT%c,5<>V
+Qad@+T!>Z,5WVa,lT+e-N5Cl./k[p.fLst/H.7#0)dO'0`Eg+1B'*/2#]B32Z#H43;Y`83r;#94Sq;7
54q/-5_22N5kRA:557;<4Sq5>3r:r:3;tl92Z>T52#]<11B'$-0`Ea)0)dI%/H.1!.fLmo./kUn-N5=g
,lT%c,5<>V+Qad@+T!>Z,5WVa,lT+e-N5Cl./k[p.fLst/H.7#0)dO'0`Eg+1B'*/2#]B32Z#H43;Y`8
3r;#94Sq;754q/.5_22t5kRA:55RM?4Sq5;3rV/=3;YZ62Z>T52#]<11B'$-0`Ea)0)dI%/H.1!.fLmr
./PCh-2Sqg,9m15q]bn\ocWTCrZM1^q]PYWq]bn^rZqIhr[.Ulq^DFmr[Rmtr[e%#r\"1'r\4=+r\FI/
r\XU3r\ja7q`+R8q`=U9r]Ks=pce75a?Y;AWBg,@pceI9q`Og=!BWCB3r:r:3;tl92Z>T52#]<11B'$-
0`Ea)0)dI%/H.1!.fLmo./kUn-N5=g,lT%c,5<>V+Qad@+T!>Z,5WVa,lT+e-N5Cl./k[p.fLst/H.7#
0)dO'0`Eg+1B'*/2#]B32Z#H43;Y`83r;#94T%>B4nV#35Cl(g5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOfg,3pofi79
q`Oj>q`=^:r]'d6r\ja5r\XU1r\FI-r\4=)r[n+#!%S(#/,h$t.K1ap-i57i-2o1h,Pr\a+o!2W+8?oA
*VCKN+8[2[+o<J_,Prbc-2o7j-iPOn.K1gr/,h+!/cIC%0E*[)1&`s-1]''/2Z>Z73;tr83rV594Sq;:
54q/-5_22Q5kRA755RM?4T7G>3rV/=3;YZ62Z>T52#]<11B'$-0`Ea)/cI=#/,h$t.K1ap-i57i-2o1h
,Pr\a+o!2W+8?oA*VCKN+8[2[+o<J_,Prbc-2o7j-iPOn.K1gr/,h+!/cIC%0E*[)1&`s-1]''/2Z>Z7
3;tr83rV594Sq;:54q/.5_23"5kRA755RM?4T7G>3rV/=3;YZ32>]3/1B'!,0E*U'/cI=#/,h$t.K1ap
-iPIl-2Ste,Q8nb+TN\_+T!8R*pF^?*r@&S+T<P],5rhd,l8nb-iPOk.fLst/H.7#0)dO'0`Eg+1]B61
2>]<22uYf93Vtl:48:r;4nV#35KH*@5cd6D5P75;4o7A@48h2@3]d7#r]'d6r\ja5r\XU1r\FI-r\4=)
r[n+#r[[str[Igpr[7Rir[%OhrZh:arZV%Zq]GSSkoKF<q]G\XrZV._rZh:cr[%Ojr[7[nr[Igrr[[t!
r[n+%r\+7)r\=C-r\OF/r\ja7r]'m;q`=^<pcJR?4oIP=54q-k5ajrh5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%mRpcn=5
r]U-@q`F[9r]0s;r\sg7r\a[3r\OO/r\=C+r\+7'r[n+#!%S(#/,h$t.K1ap-iPIl-2o1h,Pr\a+o<DZ
+8[,J*V^WF*W$oT+8[2X+oW\b,Q8tf-2T%g-iPOn.K1gr/,h+!/cIF&0`Eg+1B'*/2#]B32Z>Z43;tr;
3r;#94Sq;:54q/-5_22Q5kmS755m_B4Sq5;3rV/=3;tl92Z>T52#]<11B'$-0`Ea)0)dI%/H.1!.fLmr
./kUn-N5=j,lT%c,5rb_+T!8X*q(-E*:b-I*r@&V+T!>],5rhd,lT+e-N5Cl./k[p.fLst/H.7#0E*[)
1&`s-1]B612?#N52u>T63W;):48V/;4nq565OLdf5lO%D5P75;4o7A=48q;?3Vtf82uY`72?#H31]B0/
1&`m+0E*U'/H.0s.fLjn-i54h,lT%c,5r_d+<UY,p`KASnf@BCnf@TKq]G\XrZV._rZhCfr[%Ojr[7[n
r[Igrr[[t!q^qe#r\4=+r\FI/r\XU3r\ja7r]'d8r]:$?pcSF:pce@8a?Y;AX?cPFnim%9q`Oa;rAjs?
3rV/=3;tl92Z>T52#]<11B'$-0`Ea)0)dI%/H.1!.fLmr./kUn-N5=j,lT%c,5rb_+T!8X*q(-E*:b-I
*r@&V+T!>],5rhd,lT+e-N5Cl./k[p.fLst/H.7#0E*[)1&`s-1]B612?#N52u>T63W;):48V,@4[&a,
pce@8JO#YhJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_22R5kmS=557;?4Sq5>3r:r:3;tl92Z>T52#]<11B'$-0`Ea)0)dI%
/,h!u.01kHr[@anr[.UjrZqIfrZ_4_rZM([q]>VToc3*5oc3iLq]>_YrZM(]rZ_=drZqIhr[.Ulr[@ap
r[Rmtr[e%#r\"1'r\=C-r\OO1r\a[5r\sg9q`4X:q`Fd>pc\C9ofqq2JO%jQpcnO;pc\U=q`Fd<q`4X8
r\sg7r\a[3r\OO/r\=C+r\+7'r[n+"r[Rmrr[@anr[.UjrZqIfrZ_4_rZM([q]>VToc3*5oc3iLq]>_Y
rZM(]rZ_=drZqIhr[.Ulr[@apr[Rmtr[e%#r\"1'r\=C-r\OO1r\a[5r\sg9q`4X:q`Fd>pc\C9ofqt3
JO'3"pcnO;pc\U=q`Fd<q`4X8r\sg7r\a[3r\OO/q_8"&r[n+#r[[str[Igpr[7[lr[%OhrZhCdrZV.]
r#Yn\rZ:hTq],SSrZ(8DrZ(nVoc3rOp`BDVrZM1`q]c"arZqIhr[.Ulr[@apr[Rmtr[e%$r\+7)r\=C-
r\OO1r\a[5r\sg9r]0j:q`Fd>pc\C9ofpVbJO$;%pcnO;pc\U=q`Fd<rAam=3W;#;2uY`72?#H31]B0/
1&`m+0E*U'/cI:".fLmr./kUn-N5=j,lT%f,5WP_+T!8X*r?uN*9J45*;^cR*r[8\+T!>],5rhd,lT+h
-N5Cl./k[p.fLst/H.7#0)dO'1&`s-1]B612?#N52uYf63W;):48q>C4[&X)pce@8JO#bkJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_22X5kRA:557;<4T7G>3rV/=3;tl92Z>T52#]<11B'$-0`Ea)/cI=#/,h$t.0(as-n,'Ar[%Oh
rZh:arZV7`rZD+\q]5PRp`&Z?p_iN=q]#DPq]5YWrZD"[rZV7brZhCfr[%Ojr[7[nr[Igsr[e%#r\"1'
r\4=,r\OO1r\a[5r\sg9q`4X:r]Bm;r]Tp<pcn75JO&'Wofr48pc\L:r]C!<r]0s;r\sg7r\a[3r\OO/
r\=C+r\+7&r[e%!r[Rmrr[@amr[%OhrZh:arZV7`rZD+\q]5PRp`&Z?p_iN=q]#DPq]5YWrZD"[rZV7b
rZhCfr[%Ojr[7[nr[Igsr[e%#r\"1'r\4=,r\OO1r\a[5r\sg9q`4X:r]Bm;r]Tp<pcn:6KL#2ppceR<
q`Oa;q`=U6r\sg7r\a[3r\OO/r\=C*r\"1%r[e%!r[Rmqr[7[lr[%OhrZhCdrZV.]rZD+\r#GbXq],JP
ll,a=mi)'Bp`08Rq]>_YrZM(]rZ_=drZq@fr[7[or[Rmtr[e%#r\"1'r\=C-r\OO1r\a[5r\sg9q`4X:
r]C!>q`XU9pclqeJO$M+ofr48pc\L:r]C!<r]'s<!B<(<2uY`72?#H31]B0/1&`m+0E*R&/H.1!.fLmr
./kRm-2o1h,Pr\a+oWV`+9!>Y*W$iO)t+^?)=JL@)uCWP*W@,Z+8[2[+oW\b,Q8tf-2o7j-iPOn.K1js
/H.7#0)dO'0`Ej,1]B612?#N52uYf63W;)=48_5>4T7M:557?n5b1/k5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&*Xofr48
pc\U=q`Fd<r]0j8r\sg7r\a[3r\OO/r\4=)r\"1%r[e%!r[Igp!%.dp-iPIl-2o1h,Q8nd+oWV`+9!>Y
*W$iR)u(?-)>G-F)u^iS*W@,W+9!D^+oW\b,Q8tf-2o7j./k[p.fLst/H.7#0E*[)1&`s-1]B612?#N5
2uYf93W;):48V/;4nq595O^ph5i+d!5PRG;4oRS@48q;?3Vtf82uY`72?#H31]B0/0`Ea)0)dI%/H.1!
.K1ap-iPIl-2o1h,Q8nd+oWV`+9!>Y*W$iR)u(?-)>G-F)u^iS*W@,W+9!D^+oW\b,Q8tf-2o7j./k[p
.fLst/H.7#0E*[)1&`s-1]B612?#N52uYf93W;):48V/;4nq595Oh!l5kmS=557;<4T7G>3rV/=3;YZ6
2?#H31]B0/1&`m+0E*U'/H.1!.fLmr./kUn-N5:f,Q8k`+T<J^*r[2X)upuR)u(?-)>G-I)uCWS*W$oW
+8[2X,5rhd-2o7j-iPOn.K1gr/,h+!/cIF&0`Eg+1]'$.2Z>Z43;tr;3r;#94Sq;:557@c5_22+5kRA:
557;?4Sq5>3rV/<2utuur\sg7r\a[3r\OO/r\4=)r\"1%r[e%!r[Igpr[7[lr[%OhrZhCdrZV7`rZD+\
q]5PRq]#;Kh&5u+p`'2Pq]5YWq]Ge[rZV7brZhCfr[%Ojr[@apr[Rmtr[e%#r\+7)r\=C-r\OO1r\a[5
r\sg9r]0s=q`=g@4T.D>4nq595Cl(j5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOha$j!pceR<q`Oj>q`=^:r]'m9r\ja5
r\XU1r\=C+r\+7'r[n+"r[Rmrr[@am!$qXl-2o1h,Q8nd+oWV`+9!>Y*W@&U)uCQK):TN#)>b?L)u^iS
*W@,Z+9!D^+oW\b,Q8tf-2o7j-iPRo.fLst/H.:$0E*[)1&`s-1]B922Z>Z43;tr;3r;#<4SV)754q/6
5_22W5kRA:55RM?4T7G>3rV/=3;tl92Z>T52#]<11&`m+0E*U'/cI:".fLmr./kRm-2o1h,Q8nd+oWV`
+9!>Y*W@&U)uCQK):TN#)>b?L)u^iS*W@,Z+9!D^+oW\b,Q8tf-2o7j-iPRo.fLst/H.:$0E*[)1&`s-
1]B922Z>Z43;tr;3r;#<4SV)754q/75_MDt5PRG;4o7A@48q;<3W;#;2uY`42#]<11&`m+0E*R&/H.1!
.fLmr./kRm-2o1h,Q8nd+oWV`+9!>Y*W@&V)ZUiS)Yb3%)#,!G)Z(KQ*<$uU*r[8\+T<P`,5rhd,lT+h
-iPOn.K1gr/,h+!0)dO'0`*X)2#]B32Z>Z73;Y`83rV5<4Sq;:54Uqc5_22+5kRA:55RM?4T7G>3rV/=
2ukl<2`L^or\a[3r\OO.r\4=)r\"1%r[[str[Igpr[.UjrZqIfrZ_=brZM1^rZ:qWrZ(eSq\o5Ie/8'#
q\o>NrZ(eUrZ;%\rZM1`rZ_=drZqIhr[.Ulr[Igrr[[t!r\"1'r\4=+r\FI/r\a[5r\s^6r]0s=r&Xm?
r]Ks=pce@8JO#tqJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22[5kRA:55RM?4T7G>3rV/=3;tl92Z>T52#]<11B'!,0E*U'
/H.1!.fLmr./kRm,lf1k,UE@6rZ_=brZM1^rZ;%ZrZ(eSrYkYOobdH?mhY@.p_`lGq\oGQq],SUrZ;%\
rZM1`rZ_=er[%Ojr[7[nr[Igsr[e%#r\+7)r\=C-r\OO1r\ja7q`+R8r]:$?q`Oa=pce@8p-=0oiB['#
pceR<q`Oj>q`=^:r]'m9r\ja5r\XU1r\FI,r\+7'r[e%!r[Rmrr[@amr[%OhrZhCdrZV7`rZD+\rZ1tX
q]#MQq\f&Dp_WB7mhba9q\f8LrYt_SrZ1tZrZD+^rZV7brZqIhr[.Ulr[@apr[[t!r[n+&r\4=+r\FI/
r\XU4r\s^6r]0s=r]C!>q`X^<ofr19LHtMspceR<q`Oj>r]9p:r]'m9r\ja5r\XU1r\FI,r\+7'r[e%!
r[Rmqr[7[lr[%OhrZhCcrZM1^rZ:qWrZ(eSrYbeT)>tHM)#b?N)#+p9(@N(:)#,!J)Z(KQ*;^cR+9!D^
,5rhd,lT+h-N5Cl.K1gr/,h+!0)dO'0`Eg+1]B612?#N52u>T33rV5<4T7M:54q.f5_22.5kRA:55RM?
4T7G>3rV/=3;ti:2?>]or\a[3r\OO/r\4=)r\"1$r[[str[Igpr[.UjrZqIfrZ_=brZM1^rZ;%ZrZ(eS
rYkYOobdH?mhY@.p_`lGq\oGQq],SUrZ;%\rZM1`rZ_=er[%Ojr[7[nr[Igsr[e%#r\+7)r\=C-r\OO1
r\ja7q`+R8r]1'A3rhA>4Sq;:54q-k5bgSq5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&3[ofr=;pc\L:r]C*?q`4X8r\sg7
r\a[2r\FI-r\4=)r[n+#r[[ssr[@anr[%Lg!@/ri,5rbb+T<J^*r[2Z*;^]S)Z(EL)"e^!(AJ^C)#G3J
)ZC]T*<$uU*r[8\+oW\b,Q8tf-2o7j./k[p.fM!u/cIC%0`Eg+1B'*/2#]B32Z>Z73;tr;3r;#94T7M=
54q/65_22Z5kRA=557;<4T7GA3r:r:3;tl92Z>T51]B0/1&`m+0E*R&/H.1!.K1ap-iPFk,lT(g,5rbb
+T<J^*r[2Z*;^]S)Z(EL)"e^!(AJ^C)#G3J)ZC]T*<$uU*r[8\+oW\b,Q8tf-2o7j./k[p.fM!u/cIC%
0`Eg+1B'*/2#]B32Z>Z73;tr;3r;#94T7M=54q/75_hVt5PmY>4o7A@48q;?3W;#82uY`72#]<11B'$-
0E*U'/cI:".fLmr./kRm-2o1h,Q8na+T<J[*W@&U)u^cR)#tQO)"e^!(AJ^C)#G3J)ZC]T*<$uX*r[8\
+T<P`,5rhd,lT+h-iPOn.K1gr/H.7#0)dR(1&`s-1]B612?#Q33;tr;3r;#94T7M=54q.f5_22.5kRA=
557;<4T7GA3r:r:3;ti:2?>]or\a[2r\FI-r\4=)r[n+#r[[ssr[@anr[%FerZ_=brZM1^rZ;%ZrZ(eS
rYkYOq\\uBg(sH"q\]2Jq\oGQrZ(nXq]>_YrZV7brZhCfr[%Ojr[@apr[Rmur[n+%r\4=+r\FI/r\XU3
r\ja7r]'m;r]1'A48h8<4T7M=54q-k5bgSq5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&3[ofr=;q`Xg=q`Fd<r]0s;r\sg7
r\a[3r\OO/r\4=)r\"1$r[[str[@anr[.UirZ_Ce!?r`e+oWV`+9!>\*W@&X)uCQQ)>b9J(\ecq(&JdA
(]G9K)?(QR)u^iS*W@,Z+9!D^+oW_c,lT+h-iPOn.K1gr/,h."0E*[)1&`s-1]B922Z>Z73;Y`83r;#<
4Sq;:557A95_22Z5kRA=55RM?4Sq5>3rV/=3;tl92Z>T52#]<11B'!,0E*U'/H.1!.fLjq-iPIl,lT%f
,5rbb+T<J^*r[2Z*<$oS)ZCWO)#G-E(=X)r(AJ^F)#G3M)ZC]T*;^cU*r[8\+T<P`,Q8tf-2o:k./k[p
.fLst/cIF&0`Eg+1B'*/2?#N52uYf63W;):48qA>4nq595PIEu5kRA=55RM?4T7G>3r:o92uY`72?#H3
1B'$-0`E^(/cI=#.fLmr./kRm-2o1h,Q8nd+T<J[*r[/V)u^cQ)>k<O)#b?E(=s;r(AepF)#G3M)ZC]T
*<$uX*r[8\+T!>],Q8tf-2o:k./k[p/,h+!/cIF&0`Eg+1]B612?#N52uYf93Vtl:48V/;4nq595LD`I
5d`lM5PmYA4o7A=48q;?3W;#;2uY]82$#Qlr\XU1r\FI,r\+7'r[e%!r[Rmqr[7[lrZqIfrZ_=brZM1^
rZ;%ZrZ(nVq\oGOq\]2Hp_M?oq\JrCrYYMMrYkbTrZ(eUrZ;%\rZM1`rZhCfr[%Okr[@apr[Rmtr[n+&
r\4=+r\FI/r\a[5r\sg9q`+[<3WM5<48qA>4nq595Cl(p5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOi^!9'pceR<q`Oj>
r]:$=r]'m9r\ja5r\XU1r\FI-r\+7'r[n+"r[Igpr[7[krZqIfrZV=c!?iWc+9!>\*W@&U)u^cT)>b9M
(\ed@("<rm(&JdD(]G9K)?(QR)u^iV*W@,Z+9!D^+oW\b,lT+h-N5Fm.K1gr/H.7#0)dR(1&`s-2#]B3
2Z>Z73;tr;3r;#94T7M=54q/95_22Z5kmS=55RM?4T7GA3rV/=3;tl92Z>T52#]<11B'$-0E*U'/cI:"
.K1ap-iPFk,lT%f,5rbb+9!>\*W@&U)u^cT)>b9M(\ed@("<rm(&JdD(]G9K)?(QR)u^iV*W@,Z+9!D^
+oW\b,lT+h-N5Fm.K1gr/H.7#0)dR(1&`s-2#]B32Z>Z73;tr;3r;#94T7M=54q/:5_hW"5PRGA4o7A=
48q;?3W;#;2uY`72?#H31]B-.0`Ea)/cI=#/,h!s./kUn-2o1h,Q8kc+T<J^*r[2Z*<$oS)ZCWR)#G*M
()HiaobH'mp_EQ>q\T5KrYb\Rq]#MSrZ1kXrZM1arZhCfr[.Ulr[@aqr[[t!r\"1'r\4=,r\OO1r\a[5
r\sg9r]0s=q`Fd>q`X^<ofpqkJO$V.pcnO;q`Xg=r]C*?r]0s;r\sg7r\X[4!AlY41]B0/1&`j*0)dI%
/,h!s./kUn-2o1h,Q8nd+oWS_*r[2Z*;^]S)ZCWO)#b?H(AJWo'_iF?(AepI)#G3M)ZC]T*<$uX*r[8\
+T<P`,5rke-2o7j./k[p.fM!u/cIC%0`Eg+1B'-02?#N52uYf93<;0%!':!=q`Oj@pce@8JO$(tJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_22[5kmS@557;?4Sq5>3rV/=3;tl92Z>T52#]<11&`m+0E*R&/H.-u.K1ap-N5=j,lT"e
+TNVc+<^Y*rZ;%ZrZ(nVrYkbRq\];Kq\Ji>ob?j.lkK40q\K&FrYYVPrYkYQrZ(eVrZD+_rZ_=dr[%Oj
r[7[or[Rmtr[n+%r\+7*r\FI/r\XU3r\sg9q`4X:r]C!>q`X^<pcnR>JO&0ZpcnX>pc\U=q`Fd<r]0s;
r\sg7r\a[3r\OO.r\4=)r[n+#r[Rmrr[@amr[%OhrZ_=brZM1^rZ;%ZrZ(nVrYkbRq\];Kq\Ji>ob?j.
lkK40q\K&FrYYVPrYkYQrZ(eVrZD+_rZ_=dr[%Ojr[7[or[Rmtr[n+%r\+7*r\FI/r\XU3r\sg9q`4X:
r]C!>q`X^<pcnU?LHtW!q`am?q`Oj>q`=^:r]'m9r\jX1r\OO.r\4=)r[n+"r[Rmqr[7[lrZqIfrZ_4^
rZD+[q],JOrYbSMrYPJJ!#G5Bob?j.lkK40rYGAIq\];MrYkbTq],SVrZD+^rZV7brZhCgr[.Ulr[Igr
r[[t"r\"1(r\=C-r\XU3r\ja7r]'d8q`F[;q`X^<pcm7nJO$V.pcnX>pc\U=q`Fd<r]0s;r\sg7r\X[4
!AlY41]B-.0`Ea)/cI=#.fLmr./kRm-2o1h,5rbb+T<J^*r[2Z*<$oV)ZCWO)#b?K(A/F8'^l_%'_iF?
(AepI)#bEP)Z(KQ*;^fV+9!G_,5rhd-2o7j-iPRo.fLst/cIC%0E*^*1B'*/2#]B32uYf73<2)=3rV5<
4Sq;:557?n5c-et5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&3[q`jj>q`Xg=r]C*?r]0s;r\sg7r\a[3r\OO/r\4=)r\"1$
r[[ssr[@anr[%OhrZhCcrZD1_!?WE_*r[2Z*<$oV)ZCWR)#G-K(AJX;'\!fh'`/XB(B,-L)#bEM)ZC]T
*<$uX*r[;]+oW\b,Q8tf-N5Cl./k^q/H.7#0E*[)1&a!.2#]B32Z>Z73;tr;3r;#<4Sq;:557A<5_22Z
5l3e@55RM?4T7GA3rV/=3;tl92Z>T52#]<11B'!,0E*U'/H.1!.K1ap-iPFk,lT%f+oWV`+9!>\*W@&X
)u^cT)?(KM(]G3F(%i9j'D3(:(&JdG(]G9N)>b?O)u^iV*W@,Z+T<P`,5rhd,lT.i-iPOn.fM!u/cIF&
0`Eg+1]B612?#N52uYf93W;):48qA>4nq595PdX&5kmS@557;?4Sq5>3rV/=3;tl92Z>T52#]<11B'!,
0E*U'/H.-u.K1ap-N5=j,Q8nd+oWV`+9!>\*;^]P)?(KM(]G3J(&\mE'`JdF'\!fh'`JjB(B,-L)#bEP
)Z(KQ*W@,Z+9!D^+oW\b,lT+h-N5Fm.K1gr/H.:$0E*[)1B'*/2#]B32Z>Z73;tr;3rV5<4Sq;:557@l
5_22.5l3e@55RM?4T7GA3rV/=3;tl92Z>T51]T<41Gf"cr\4=)r\"1$r[[ssr[@anr[%OhrZhCcrZM1^
rZ;%ZrZ(nVrYkbRrYYMKrYG8Dob>mhob@9<q\K/IrYYVPq\oGQrZ(nXrZ;%]rZV7brZhCfr[.Ulr[@aq
r[e%#r\+7)r\=C.r\XU3r\ja7r\sp=3<2)=3r;#<4Sq;:557?n5c-et5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&Eaofr48
q`Xp@r]C!<r]0s;r\sg7r\XU1r\FI-r\+7'r[n+"r[Rmqr[.UjrZqIerZV7`rZ2%[!?E3[*;^]S)Z(BN
(]G3I(%i:9'@[Zi'DN:=(&JdG(]G9N)?(QR)u^iV*W@,Z+9!G_,5rhd-2o7j-iPRo/,h+!/cIF&0`Ej,
1]B612>]?33;tr;3rV5<4Sq;=557A<5_22`5kRA:55RMB4T7G>3rV/=3;tl92Z>Q41]B0/1&`j*0)dI%
/,h$t./kRm-2o1h,5rbb+T<G]*W@&U)u^cQ)#b?N(Aej>'_i?k')3.8'`/XB(B,-L)#bEP)ZC]T*<$uX
*r[8\+oW\b,Q9"g-N5Cl.K1js/H.7#0E*[)1B'*/2#]B02uYf93W;)=48V/;4o7G<5PdX)5kmS=557;?
4T7GA3r:r:3;ti82?#H31]B0/1&`j*0)dF$/,h!s./kRm-2o.g,5rbb+T<G]*W@&X)uCQQ)#G-K(AejE
'EAjH'E/^C'@[Zf'DiL=(&f!J(]G9K)?(QR)u^iV*W@/[+T<P`,Q8tf-2o:k./k[p/,h+!0)dO'1&`s-
1]B612?#Q33;Yc948V/>4nq595L_rL5eB;S5PRG>4oRSC48V)<3W;#;2uY`72#]921''-cr\=C*r\"1%
r[[str[@amr[%OhrZ_=brZM1]rZ1tXq]#MQq\];KrYGAGob@07e.VNip_<T?q\K/IrYYVPrYkbTrZ(nX
rZ;%\rZV7brZhCgr[.Ulr[Igsr[e%#r\+7)r\FI/r\XU3q_nO82ukr;3W;)=48V/;4o7G<5Cl(s5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOkWnf*pce[?q`Oj>r]9p:r]'m8r\a[3r\OO/r\=C*r\"1$r[Rmrr[@amr[%OgrZ_=b
rZD+\!$)(\*W@&X)u^cT)?(KP(],!F(&J^?'@%6`'DN:@(&JdG(]G9N)?(QR)u^iV*W@,Z+9!D^,5rhd
,lT.i-iPRo.fLst/cIF&0`Eg+1]B612?#N52uYf93W;)=48V/;4o7G<5P[Qq5j(E*5PRGA4o7A@48q;<
3W;#;2Z>T52#]<11B'$-0E*U'/H.-u.K1ap-N5=j,Q8nd+oWS_*r[2Z*<$oV)ZCWR)#b?K(AejD'_i?e
'(lq5'`JjE(B,-L)#bEP)ZC]T*<$uX*r[8\+T<Sa,Q8tf-N5Cl.K1gr/,h."0E*[)1&a!.2#]B32Z>Z7
3;tr;3rV5<4Sq;=557A=5`J&(5PRG>4o7A@48q;?3W;#;2uY`72?#H31]B0/0`E^(/cI=#.fLmr-iPIl
,lT%f+oWV`+9!>\*W@&U)ZCWR)#b?N(AJXB'EAjB'@%6`'DN:@(&JdG(]G9N)?(QR)u^iV*W@,Z+9!D^
,5rhd,lT.i-iPRo/,h+!/cIF&0`Eg+1]B612>]?33;tr;3rV5<4Sq;=557@l5_2245kRA:55m_B4T7GA
3r:r:3;ti82?#H31B9021,Ah`r\+7'r[e$ur[Igpr[.UjrZhCdrZV7_rZ;%ZrZ(nVrYkbRrYYVNq\K&D
q\8f=c4]d`p_<]Bq\K/IrYYVPrYkbTrZ(nXrZ;%\rZM1arZhCfr[.Ulr[Igrr[[t"r\+7)r\=C.r\XU3
r\ja7!B<%=3;tr;3rV5<4Sq;=557?n5c-et5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&Eaofr=;q`Xp@q`Fd<r]0s;r\sg7
r\a[3r\FI-r\4=(r[n+"r[Igpr[7[krZqIerZV7`rZ;%Z!#u"Z*<$oV)ZCWR)#G-K(AejD'`/R:'&=/g
')3.;'`/XE(B,-L)#bEP)ZC]T*<$uX*r[8\+oW\b,Q9"g-N5Fm.K1gr/H.:$0E*^*1B'*/2#]E42uYf6
3W;)=48qA>4nq5<5P[Qq5j(E*5PmYA4oRS@48q;?3W;#;2uY`72?#H31B'$-0`E^(/cI:".K1ap-iPFk
,lT"e+oWV`*r[2Z*<$oV)ZCWR)#G-K(AejD'`/R:'&=/g')3.;'`/XE(B,-L)#bEP)ZC]T*<$uX*r[8\
+oW\b,Q9"g-N5Fm.K1gr/H.:$0E*^*1B'*/2#]E42uYf63W;)=48qA>4nq5<5PdX)5kmS=55RMB4T7G>
3rV/=3;tl62?#E21B'$-0E*U'/H.1!.K1ap-iPCj,Q8nd+T<J^*r[2Z*<$oS)?(KP(],!I(&/ID',1<X
ob-'mmh5C/q\9#Eq\K/IrYYVPrYkbTrZ(nXrZ;%\rZV7brZqIhr[7[nr[Rmtr[e%$r\4=+q_S4.r\ja7
r]'m;r]9p<r]L'@q`ad>e3JRM]0Q$Rq`am?r]L'>r]:$=r]'m9r\ja5r\XU0!&4L/1&`m+0)dI%/,h!s
./kUn-2o1h,5rbb+T<G]*W@&X)u^cT)?(KM(]G3I(&J^B'D3!o&apA-'DiL@(&f!J(]G9N)?(QR)u^iV
*W@,Z+9!G_,5rhd-2o7j./k[p.fM!u0)dO'1&`s-1]B612Z>W93&gmtq`4X:r]C*Aq`X^<q`fWsVEf\t
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5j1K.5PRGA4o7A@48V)<3W;#;2uY]62#]<11B'$-0E*R&/H.-u./kUn-N5:i,Q8kc
+T<J^*W@#Y)Z^lsrYkbRrYYVNrYGAGq\8o@p_(a^mh5U5p_<]BrYGJLrYYVPrYkbTrZ(nXrZ;%\rZM1a
rZqIhr[7[nr[Igsr[n+%r\4=+r\FI0r\a[5q`+R8r]:$?q`Oa=q`a[;!C/o$5j(E-5PRGA4o7A@48V)<
3W;#;2uY]62#]<11B'$-0E*R&/H.-u./kUn-N5:i,Q8kc+T<J^*W@&X)u^cT)?(KP(]G3I(&J^B'DN3`
&apA3'DN:@(&f!J(]G9N)?(QR)u^iV*W@,Z+9!D^,5rke-2o:k./k[p/,h."0)dR(1&`s-2#]B32Z#K5
3W;)=48V/;4o7G956*s.5kmS=55m_B4T7G>3rV,92uY]62#]<11&`m+0E*O%/,h$t./kUn-2o1h,5rbb
+T<G]*W@&X)u^cQ)#b?N(AejD'`JdD')E6a&b6S3'DiL@(&f!J(]G9N)?(QR)u^iV*W@,Z+T<P`,5rke
-N5Cl.K1gr/,h."0E*[)1B'*/2#]E42uYf63W;)=48V/;4o7G95MAAR5eB;V5PRGA4o7A@48V)<3W;#;
2uY]62#]<11&s$00erY\r[n+#r[Rmqr[7[lrZqIfrZV7`rZD+[rZ(nVrYkbRrYYVNrYGAGq\8o@p_(a^
mh5U5p_<]BrYGJLrYYVPrYkbTrZ(nXrZ;%\rZM1arZqIhr[7[nr[Igsr[n+%r\4=+r\FI0r\a[5!B<(;
3;tr;3rV5<4Sq;=54q-k5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&EapcnX>q`Xg=r]C*?r]0s;r\sg7r\a[3r\OO.
r\4=(r[n+#r[Rmqr[7[krZhCdrZV7_rZ;%ZrYtnW!?3!W)ZCWR)#b?N(B,'G'_i@:'(6Fp&FU5+')N@>
'`JjE(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rke-2o7j./k[p/,h."0)dO'1&`s-1]B922Z>Z73;tr;3r;#<
4Sq;=54q,@5X9lck<Sf,q`am?q`Oj>r]:$=r]'m9r\ja5r\XU1r\=C+r\"1%r[e$ur[@anr[%OgrZ_=b
rZD+\rZ1tXrYthTrYb\PrYPPLrY>;Ep_3E8mh+[nmh,=-q\/i@rY>;GrYPPNrYb\RrYthVrZ;%\rZM1a
rZqIhr[.Umr[Igsr[n+%r\+7*r\FI/r\a[5r\sg9r]0s=q`Fd>q`Xg?ofiFANBm8'q`am?r]L'>r]:$=
r]'m9r\ja5r\XU1r\=C*r\"1$r[[str[@amr[%OgrZ_=brZD+\rZ1tWq\oGNq\T,Eq\8o@r"Ar@lk/In
mh,4*rY,&@rY>DJrYPGKrYb\RrZ(nXrZ;%\rZV7brZqIhr[.Umr[Rmtr[n+%r\4=+r\FI0r\a[5q`+R8
r]:$?q`Oa=q`a[;g-C3S]0Q-Uq`am?q`Oj>r]:$=r]'m9r\ja5r\XU1r\4C,!AH5,0)dI%/H.-u./kUn
-2o.g,5rbb+9!>\*W@&X)u^cT)?(KP(]G3L(&J^?'DN4/&`sYn&bm"9'DiLC(&JdG(]G9N)?(QR)u^iV
*r[8\+T<Sa,lT+h-N5Fm.K1js/cIC%0E*^*1B'*/2?#K72`C^qr]'m;r]9p<r]L'@q`a[;JO$;%JO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_22a5kmS@55RMB4Sq5>3rV/=3;tl92Z>T52#]901&`m+0)dF$/,h!s-iPIl,lT%f,5r_a
*r[2Z*<$lW)?C`prYb\PrYPPLq\B)Eq\/`;ne'@_ob$s3q\/i@rY>DJrYPGKrYb\SrZ(nXrZ;%\rZV7c
rZqIhr[7[nr[Rmur[n+&r\4=+r\OO1r\a[6r]'m;r]9p<r]L'@pceI;!C/o$5j(E-5PmYA4oRS@48q;?
3W;#;2uY`72?#H31B'$-0`E^(/H.1!.K1^o-N5:i,Q8nd+T<G]*W@&X)u^cT)?(KP(]G3I(&epE'DN42
&_%Bb&bm"9'DiLC(&f!J(],'K)?(TS*<$uX*r[8\+oW_c,lT+h-iPOn.fM!u/cIF&0`Eg+1]B612?#Q6
3;tr;3r;#<4Sq;:557>B5`J&(5PmYA4oRSC48V)<3W;#;2uY`72#]<11B'!,0E*U'/H.-u.K1^o-2o1h
,5rbb+T<G]*W@&X)u^cQ)#b?N(B,'G'`/R>&c`R8&_@Tb&bm"9'DiLC(&f!J(]G9K)?(TS*<$uX+9!D^
+oW_c,lT.i-iPRo.fM!u0)dO'1&`s-1]B922Z>Z73;tr;3r;#<4Sq;:557@r5_2245kmS@55RMB4Sq5>
3rV/=3;tl92Z>T52#]900`Wm.0JNJYr[e%!r[Igor[.UirZhCdrZM1]rZ1tXrYthTrYb\PrYPPLq\B)E
q\/`;ne'@_ob$s3q\/i@rY>DJrYPGKrYb\SrZ(nXrZ;%\rZV7crZqIhr[7[nr[Rmur[n+&r\4=+r\OO1
r\X^82ZPf93;tr;3r;#<4Sq;:557?n5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&Eaq`jj>r]U-@r]C!<r]0s;r\sg7
r\XU1r\FI,r\+7&r[[str[@amr[%OhrZ_=brZD+\rZ1tWrYbbS!>udS)#b?N(B,'D'`Jd@')3'^&FU5+
')iRA'`JjH(B,-L)#bEP)ZC]T*<$uX*r[;],5rhd,lT.i-iPRo/,h+!0)dR(1&`s-2#]B32Z>Z73;tr;
3rV5<4T7M=557>C5X9lck<So/pce[?q`Oj>q`=^:r]'m9r\ja4r\OO/r\4=)r[n+"r[Rmqr[.UjrZqIe
rZV7_rZ;%ZrYthTrYb\PrYPPLrY>2BrY,&>p^t[\mh,=-rY,/CrY>DJrYPPNrYb\RrYthVrZ1tZrZM1a
rZhCfr[.Ulr[Igsr[e%$r\4=+r\FI0r\a[5r\sg9r]0s=r]C!>r]U$?pceaDNBmA*pce[?q`Oj>r]:$=
r]'m9q_nF1r\OO/r\4=(r[n+"r[Igpr[.UjrZhCdrZM1^rZ1tXrYthTrYb\PrYPPLrY>;Eq\/`;!>,q?
&^(aV&bm"9'E/^C(&f!J(]G9N)?(QR)u^iV*r[8\+T<Sa,Q8tf-iPOn.fLst/cIC%0`Eg+1]B612?#N5
2uYf93W;)=48qA>4nq595MAAR5eB;Y5PRGA4o7A@48V)<3W;#;2uY`72#]<11B&s-0**^Zr[n+"r[Rmq
r[.UjrZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>2BrY,&>p^t[\mh,=-rY,/CrY>DJrYPPNrYb\RrYthV
rZ1tZrZM1arZhCfr[.Ulr[Igsr[e%$r\4=+r\FI0r\X^72?5Z72uYf93W;)=48V/>4nq595Cl)$5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOkWo#0pce[?q`Oj>r]:$=r]'d6r\a[3r\OO.r\4=)r[n+"r[Rmqr[.UjrZhCcrZM1^
rZ1tXrYthT!#YeT)?(KP(]G3L(&J^B'DN48&]G=S&bm"9'E/^C(&f!J(]G9N)?(QR*<$uX*r[;]+oW\b
,lT.i-iPRo/,h+!0)dR(1&`s-2#]B32Z>Z73;tr;3r;#<4Sq;=557>C5X9lck<So/pce[?q`Oj>r]:$=
r]'d6r\a[3r\OO.r\4=)r[n+"r[Rmqr[.UjrZhCcrZM1^rZ1tXrYthTrYb\PrYPPLrY>;Eq\/`;p^tIV
ob$s3q\/rCq\B)GrYPPNrYb\RrZ(nXrZ;%]rZV7brZqIir[7[or[[t!r\"1(r\=C-r\XU3r\ja7r]'m;
r]9p<r]L'@q`ad>!'lN/q`jj>r]U-@r]C*?r]0s;r\sg7r\a[3r\FI-r\4=(r[e%!r[Igor[.UirZhCc
rZM1^rZ1tXrYt_Pq\T5IrY>;ErY,&>r"8l>_@ZAPp_*Q>q\8oBrYPGKrYkbTrZ(nYrZD+^rZ_=drZqIi
r[@apr[[t"r\"1(r\=C.r\XU3r\ja7r]'m;r]:$?q`Oa=q`ad>g-C3S]0Q6Xpce[?q`Oj>r]:$=r]'d6
r\a[3r\OO.r\+=*!A?,*/cI:".fLjq-N5=j,Q8kc+T<J^*W@&X)u^cT)?(KP(]G3L(&J^B'DN48&]G=S
&bm"9'E/^C(&f!J(]G9N)?(QR*<$uX*r[;]+oW\b,lT.i-iPRo/,h+!0)dR(1&`s-2#]?52DtOnr\sg9
r]0s=q`Fd>q`Xg?pcj<pX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5jL]15PmYA4o7A@48q;?3W;#;2uY`72?#E21B'$-
0E*U'/H.-u.K1^o-2o1h,5rbb+T<G]*W@&X)ZCTS(]bHjrYPGIrY>DHq\/i>ne&_Mob%'6q\/i@rY>DJ
rYPPNrYb\RrYthVrZ1t[rZV7brZhCgr[.Umr[Rmtr[n+&r\4=,r\OO1r\ja7r]'m;q`=^<r]L'@q`ad>
!C/o$5jCW05PmYA4o7A@48q;?3W;#;2uY`72?#E21B'$-0E*U'/H.-u.K1^o-2o1h,5rbb+T<G]*W@&X
)ZCWR)#b?K(B,'J'`/R@'(QXO&G6Y4')N@>'`JjH(B,-L)#bEP)ZC]T*<$uX+9!G_,5rhd-2o7j./k^q
/,h."0E*[)1B'*/2#]E42uYf93Vtl:48qA>4o7G<56*s15kmS@55RMB4Sq5>3rV/=3;tl92Z>T51]B0/
1&`j*/cI=#.fLjq-iPFk,lT"e+T<J^*r[/Y)u^cT)?(KP(]G3L(&J^B'DiF<&cE<Y&FpG1')N@A'`/XE
(B,-L)#bEP)ZC]T*W@,Z+9!G_,5rke-N5Cl./kar/H.7#0E*^*1B'*/2?#N52uYf93W;)=48V/;4o7G<
5MAAR5e]MY5PmYA4o7A@48q;?3W;#;2uY`72?#E21B'$-0*!U*/h[,Sr[Rmrr[7[krZqIerZV7`rZ;%Z
rZ(nUrYb\PrYPGIrY>DHq\/i>ne&_Mob%'6q\/i@rY>DJrYPPNrYb\RrYthVrZ1t[rZV7brZhCgr[.Um
r[Rmtr[n+&r\4=,r\OO1!B)h92Z>Z73;tr83rV5?4Sq;=557?n5cd5%5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&NdpcnX>
q`Xg=r]C*?r]0s;r\sg7r\XU1r\FI,r\"1%r[e$ur[@amrZqIfrZ_=arZD+\rZ(nVrYkbQ!#GYP(],!I
(&epE'DiF8&\J\G&c34<'E/^C(&f!J(]G9N)?(QR*<$uX*r[;]+oW_c-2o7j./k^q/,h+!0)dR(1&a!.
2#]B32Z>Z73;tr;3rV5<4T7M@557>C5X9lcl9P,/q`am?q`Oj>r]:$=r]'m9r\ja4r\OO/r\4=(r[n+#
r[Rmqr[.UirZhCdrZM1^rZ;%YrYthTrYYVNq\K/GrY55Cq\&Q6]FaWGq\&c>rY55ErYGJLrYYVPrYkbU
rZ1tZrZM1`rZhCgr[.Umr[Rmtr[e%$r\4=+r\OO1r\a[5r\sg9r]0s=r]C!>r]U-BpceaDO?iS*q`am?
r]L'>r]:$=r]'m8r\a[3r\OO.r\4=(r[n+"r[Igpr[.UirZhCdrZM1^rZ;%YrYthTrYYVNrYGAGrY55C
q\&T7!"ljTne(a3q\/rCrY>;Gq\];MrYthVrZ1t[rZM1arZhCgr[7[nr[Rmtr[e%%r\4=+r\OO1r\a[6
q`+R9q`Fd>q`Xg?pcmItJO$q7pcnX>q`Xg=r]C*?r]0s;r\sg7r\XU1r\FI,r[n1&!A,o&/H.-u./kRm
,lT%f,5r_a+9!>\*<$oV)ZCTQ(],!I(&epE'DiF8&\J\G&c34<'E/^C(&f!J(]G9N)?(QR*<$uX*r[;]
+oW_c-2o7j./k^q/,h+!0)dR(1&a!.1]]Hk!&aa6r\sg9r]0s=r]C!>r]U-Bpcj<pX?_>%JO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5jL]15PmYA4oRSC48V)<3W;#;2uY`72#]<11B'!,0)dI%/,h!s./kRm,lT%f+oWV`+9!;[*<$oV
)?(HQ(BG<grYGAGrY55Cq\&Q6[Li3Gp_*Q>q\9#ErYGJLrYYVPrYkbUrZ1tZrZM1`rZ_=er[%Okr[Igr
r[e%$r\+7*r\OO1r\a[5r\sg9r]0s=r]C!>r]U$?q`b*H5_22c5kmS@55RMB4T7G>3rV/=3;tl92Z>Q4
1]B0/0`E^(/cI:".K1ap-N5:i,Q8kc+T<J^*W@&X)u^`S)#b?N(AejG'`/R@'(ljF&GQk4')iRA'`JjH
(B,-L)#bEP)ZC`U*W@,Z+T<P`,5rke-2o:k.K1gr/H.:$0E*^*1]B612?#N52uYf93W;)=48V/>4nq5<
56*s15kmSC557;?4T7GA3r:r:2uY`72?#H31]B-.0`E^(/H.1!.K1^o-N5:i,5rbb+T<G]*W@&X)ZCWR
)#b?N(AejG'`/RC'(Z\8&[i8G&bm"<'DiLC(&f!J(]G9N)?(TS*<$uX+9!D^+oW_c-2o7j./k^q/,h+!
0E*[)1&a!.2#]B32u>T63r;#<4Sq;:55RRu5_2275kmS@55RMB4T7G>3rV/=3;tl92Z>Q41]B0/0`E[)
/HIFTr[[ssr[@amrZqIfrZV7`rZD+[rZ(nVrYb\PrYPPLq\B)Eq\/i>ob"VDp_!96rY,/CrY>DJrYPPN
rYb\RrZ(nXrZ;%]rZV7brZqIhr[7[or[Rmur\"1'r\=C.r\OX52#oN52Z>Z73;tr;3rV5<4T7M=55RQq
5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO&NdpcnX>q`Xp@r]C*?r]0s;r\sg7r\a[3r\FI-r\4=(r[n+"r[Igpr[.Ui
rZhCcrZD+\rZ1tWrYkbRrYPVO!>cRO(AejG'`Jd@')3'C&GQk7')N@A'`JjH(B,-L)#bEP)ZC]T*<%#Y
+9!D^,5rke-2o:k.K1gr/H.:$0E*^*1B'*/2?#N52uYf93W;)=48V/>4nq5<564#7JO&KcpcnX>q`Xp@
r]C*?r]0s;r\sg7r\a[3r\FI-r\4=(r[n+"r[Igpr[.UirZhCcrZD+\rZ1tWrYkbRrYYVNrYGAGrY5>F
p_*?6YRpRAq\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=er[%Okr[Igrr[e%$r\+7*r\FI/r\a[5
r\sg9r]0s=r]C!>r]U$?q`b'GO?iS*r]^*?r]L0Ar]:$=r]'m9r\ja5r\XU0r\=C*r\"1$r[[srr[7[l
rZqIerZV7_rZ;%YrYthTrYb\PrYPPLrY>DHq\/i>oaq39&@E)E&bm"<'DiLC(&f!J(]G9N)?(QR)u^lW
*r[8\+oW\b,lT.i-iPRo/,h+!0)dR(1&a!.2#]B02uYf63rV5<4T7M=55RRu5_2275kmS@55RMB4T7GA
3rV/=3;tl92Z>T52#]901&`m+/c[I(/M6rPr[Igpr[.UirZhCcrZD+\rZ1tWrYkbRrYYVNrYGAGrY5>F
p_*?6YRpRAq\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=er[%Okr[Igrr[e%$r\+7*r\FI/!Au_7
2?#N52uYf93W;)=48V/>4nq5<5Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOlTk50q`am?r]L0Ar]:$=r]'m9r\ja5
r\XU0r\=C+r\"1$r[Rmqr[7[krZhCdrZM1^rZ;%YrYthTrYb\P!#GYP(]G3L(&J^E'DiF8&[2iA&bm"<
'E/^C(&f!J(]G9N)ZC]T*<$uX+9!D^,5rhd,lT.i./k[p/H.7#0)dR(1B'*/2#]E42uYf93W;)=48V/;
4o7G?564#7JO&KcpcnX>q`Xp@r]C*?r]0s;r\sg7r\a[3r\FI-r\4=(r[e$ur[@anr[%OgrZ_=arZD+\
rZ(nVrYkbRrYYVNrYGJJq\9#Cq\&Q6YRpRAp_*Q>rY55ErYGJLrYYVQrYthVrZ1t[rZM1arZhCfr[.Um
r[Igtr[n+%r\4=,r\OO1r\ja7r]'m;r]:$?q`Oa=q`amA!'lW2pcnaApc\U=r]C*?r]0s;r\sg7r\a[2
r\FI-r\+7&r[e$ur[@amr[%OgrZV7`rZ;%ZrZ(nVrYkbQrYPGIq\8o@q\&Z9r"-.Fq[rT9q\/rCrY>DJ
q\T5LrYkbTrZ(nXrZD+_rZ_=dr[%Ojr[@aqr[e%$r\+7)r\FI/r\XU4r\sg9q`=^<q`Oj@pceR>g-C3S
^-MHXq`am?r]L0Ar]:$=r]'m9r\ja5r\XU0r\=C+r[n1%!A#f$.fLjq-iPFk,Q8nd+T<J^*r[/Y)u^cT
)?(KP(]G3L(&J^E'DiF8&[2iA&bm"<'E/^C(&f!J(]G9N)ZC]T*<$uX+9!D^,5rhd,lT.i./k[p/H.7#
0)dR(1B''11c,1hr\ja7r]'m;r]:$?q`Oa=q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22d5kmS@55m_B4T7GA
3rV/=3;tl92Z>T51]B0/1&`j*/cI=#.fLjq-iPFk,Q8nd+T<J^*r[/Y)u^cT)#Y6O(Dlr`rY55CrY"c6
YRpRAp_*Q>rY55ErYGJLrYYVPrYthVrZ1t[rZM1`rZhCfr[.Umr[Igsr[n+%r\4=,r\OO1r\ja7r]'m;
q`=^<r]L'@q`amA!C/o$5jCW05PmYD4o7A@48q;?3W;#;2uY`72?#E21B'$-0E*R&/H.-u./kUn-2o.g
,5r_a+9!>\*<$oV)ZCTQ(]G6J(&epE'E/X8&[2iA&bm"<'E/^C(&f!J(]G9N)?(TS*<$uX+9!D^+oW_c
,lT.i./k[p/,h."0)dR(1B'*/2#]E42uYf93Vtl:48qA>4o7G?56*s15kmSC55RM?4T7GA3rV/=3;tl9
2?#H31]B-.0`Ea)/cI:".fLjq-N5=j,Q8kc+T<G]*W@&X)u^`S)#b?N(B,'G'`JdC'(lk7&@)lB&c34<
'E/^F(&JdG(]G9N)?(TS*<$uX+9!D^+oW_c-2o7j./k^q/H.:$0E*[)1B'*/2#]E42uYf93W;)=48V/>
4nq5<5MAAR5e]MY5PmYD4o7A@48q;?3W;#;2uY`72?#E21B'$-0E*O'/-.:Qr[Rmqr[7[krZhCdrZM1^
rZ;%YrYthTrYYMKq\B)Eq\/rAne&);p_!96rY,8Fq\B)GrYPPNrYb\SrZ(nXrZD+^rZV7crZqIir[@ap
r[[t"r\"1(r\FI/!AlV52#]E42uYf93Vtl:48qA>4o7G?5Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOlTk>3pce[?
r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*r[n+#r[Rmqr[7[krZhCdrZM1]rZ1tXrYkbRrYYVN!#>SN(B,'G
'`JdC'(QX=&G6Y4')N@A'`JjH(B,-L)#bEP)ZC]T*W@,Z+9!G_,Q8tf-N5Fm.K1js/cIC%0`Ej,1]B61
2?#N53;Y`83rV5?4Sq;=55RPF5X9lcl9P52pce[?r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*r[n+#r[Rmq
r[7[krZhCdrZM1]rZ1tXrYkbRrYYVNrYGJJq\9#Cq\&H3YRpI>q\&c>rY5>HrYGJLrYYVPrYkbTrZ1tZ
rZD+_rZhCfr[.Umr[Igsr[n+%r\4=,r\OO1r\a[5r]'d8r]:$?r]L'@q`amA!'lW2q`jsAq`Xp@r]C!<
r]0s;r\sg6r\XU1r\=C+r\+7%r[[str[@amrZqIerZV7`rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Aob%*5
Z4Q[@rY#)Aq\9#ErYGJLrYYVPrYthVrZ1t[rZM1`rZhCgr[.Umr[Rmtr[n+&r\4=,r\OO1r\ja7r]'m;
r]:$?q`Oj@pceR>g-C3S^-MQ[pce[?r]L'>r]:$=r]'m9r\ja5r\OO/r\=C*r[e+$!A#f$.fLjq-iPFk
,Q8nd+T<G]*W@&X)ZCWR)#b?N(B,'G'`JdC'(QX=&G6Y4')N@A'`JjH(B,-L)#bEP)ZC]T*W@,Z+9!G_
,Q8tf-N5Fm.K1js/cIC%0`Ej,1BB<h!&X[4r\ja8q`4X:r]C*Aq`Xg?q`fWsX?_>%JO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5jL]45PmYA4oRS@48q;?3W;#;2uY]62#]<11&`m+0E*R&/H.-u./kRm,lT"e+oWV`*r[2Z*<$lU)?(KP
(B>3O()Hlaq\9#Cq\&Z9WY"h8q\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+_rZ_=er[.Ulr[Igsr[n+%
r\4=+r\FI0r\a[5r]'d8r]:$?r]L'@q`amA!C/o$5jCW35PmYA4oRS@48q;?3W;#;2uY]62#]<11&`m+
0E*R&/H.-u./kRm,lT"e+oWV`*r[2Z*<$lU)?(KP(]G3L(&J^E'DiF;&ZQE8&c34<'E/^F(&f!J(]G9N
)?(QR)u^iV*r[8\+oW\b,lT.i-iPRo/,h."0)dR(1&`s-2#]B32Z>]53W;)=48qA>4o7G?56*s15l3eC
55RMB4T7G>3r:o92uY]62#]<11&`m+0E*O%/,h!s-iPIl,lT"e+oWS_*r[2Z)u^cT)?(KP(]G3L(&epE
'DiF;&c!!D&G6Y4')iRA'`JjH(B,-L)#bEP)ZC]T*<%#Y+T<P`,Q8tf-N5Fm.K1js/cIF&0`Ej,1]B61
2Z>Z73;tr;3r;#<4T7M=55RRu5_2275l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`Ea)/H@=&/1gcM
r[@amrZqIerZV7`rZ;%ZrZ(nUrYb\PrYPPLrY>;ErY,/Ap^sM;ob%'6q\/rCrY>DJrYPPNrYb\RrYthV
rZ;%\rZV7brZqIir[7[or[[t"r\"1(r\=C-!AlV52#]B32Z>]53W;)=48qA>4o7G?5Cl)$5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOlTk>3q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[n+"r[Igor[.UirZ_=brZD+\rZ1tW
rYkbRrYYVN!#>SN(B,'G'`JdC')3'7&Gm(:')N@A'`JjH(AepI)#bHQ)u^iV*r[8\+T<Sa,Q9"g-iPRo
/,h."0)dO'1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=55RPF5X9lcl9P52q`am?r]L'>r]:$=r]'m9r\a[3
r\OO.r\4=(r[n+"r[Igor[.UirZ_=brZD+\rZ1tWrYkbRrYYVNrYGJJq\9#Cq\&Z9U_*D8q\&c>rY5>H
rYGAIrYYVQrYthVrZ;%\rZM1arZhCgr[7[or[[t"r\"1'r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@q`amA
!'lW2q`jsAq`Xp@r]C!<q`+R6r\a[3r\OO.r\4=(r[e%!r[Igor[.UirZ_=brZD+[rZ(nVq\fAMrYPPL
rY>DHq\/i>p_!<5X:Y7@q\&lAq\9#ErYGJLq\];NrYthVrZ;%\rZM1brZqIir[@apr[[t"r\"1(r\FI/
r\XU4r\sg9r]0s=q`Fd>q`Xg?q`ie"JO$q7q`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1%!%S(#
/,h!s-iPIl,lT"e+oWS_*r[2Z)u^cT)?(KP(]G3L(&J^E'DiF;&Yp!8&c34<'E/^F(&f!G(]G9N)ZC]T
*<%#Y+9!D^,5rhd-2o:k.K1js/cIC%0E*^*1''3g!&X[4r\ja7r]'m;r]:$?r]L'@q`amAJO$;%JO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_22d5l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`E^(/H.1!.K1^o-N5:i,5rbb+9!>\
*W@#W)ZCWR)#b<O(',0drY>;ErY,/Ap^s;5q[r]<q\/rCrY>DJq\T5KrYkbTrZ(nYrZD+^rZ_=dr[%Ok
r[@aqr[e%$r\+7*r\FI0r\a[5r\sg9r]0s=r]C*Aq`Xg?q`b*H5_22c5l3eC55RMB4Sq5>3rV/=3;tl9
2?#H31]B-.0`E^(/H.1!.K1^o-N5:i,5rbb+9!>\*W@#W)ZCWR)#b?N(B,'G'`JdC')3'7&Gm(:')N@A
'`JjH(AepI)#bHQ)u^iV*r[8\+T<Sa,Q9"g-iPOn.fM!u0)dO'1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=
55RPE5`e8.5PmYA4oRSC48V)<3;YZ62?#H31]B-.0`E^(/H.1!.K1^o-2o1h,5r_a+9!;[*<$oS)?(KP
(]G3L(&epE'DiF;&c!!>&Gm(:')N@A'`JjH(B,-I)#bHQ)u^iV*r[8\+T<Vb,lT+h./k[p/,h."0)dR(
1&a!.2#B313;tr;3r;#<4Sq;=55RRu5_2275l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`E^(/-%1$
.kCTJr[7[lrZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Ap^s;5q[r]<q\/rCrY>DJq\T5KrYkbT
rZ(nYrZD+^rZ_=dr[%Okr[@aqr[e%$r\+7*r\=L21]TB32?#N52uYf93W;)=48qA>4o7G?5Cl)$5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOlTk>3q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[e%!r[Igor[.UirZ_=brZD+[
rZ(nVrYkbRrYYVN!#>SN(B,'J'`/R@')N97&Gm(7')iRD'`JjH(AepI)#bHQ)u^iV*W@,Z+T<Sa,Q9"g
-iPOn.fM!u/cIF&1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=55RPF5X9lcl9P52q`am?r]L'>r]:$=r]'m9
r\a[3r\OO.r\4=(r[e%!r[Igor[.UirZ_=brZD+[rZ(nVrYkbRrYYVNrYGJJrY55Cq\&c<Tb.)5p_*Q>
rY5>HrYGAIrYYVQrYthVrZ1tZrZM1arZhCgr[7[nr[Rmur[n+&r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@
q`amA!'lW2q`jsAq`Xp@r]C!<r]'d6r\a[3r\OO.r\+7'r[e$ur[Igor[%OhrZ_=arZD+[rZ(nVq\fAL
rYGAGrY55Cq\&c<p(4;:q[r]<q\/rCrY>DJrYPGKrYkbTrZ(nYrZD+^rZ_=er[%Okr[Igsr[n+%r\4=+
r\OO1q_nF5r]0s=q`Fd>q`Xg?q`ie"JO$q7q`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$!%S(#
/,h!s-iPIl,lT"e+oWS_*W@&X)u^cT)?(KP(]G3L(&epE'DiF>&YTd5&bm"<'E/^F(&f!G(]G9N)ZC]T
*<$uX*r[;],5rhd-2o:k./k^q/H.7#0E*^*1''3g!&X[4r\ja7r]'m;r]:$?r]L'@q`amAJO$;%JO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_22d5l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`E^(/H.1!.K1^o-N5:i,5rbb+9!;[
*<$oV)ZCWR)#b<O(',0drY>DHq\/i>q[oM5p_!B9rY,/CrY>DJrYPPNrYkbTrZ(nXrZ;%]rZ_=dr[%Ok
r[@aqr[e%#r\+7*r\FI0r\a[5r\sg9r]0s=r]C*Aq`Xg?q`b*H5_22c5l3eC55RMB4Sq5>3rV/=3;tl9
2?#H31]B-.0`E^(/H.1!.K1^o-N5:i,5rbb+9!;[*<$oV)ZCWR)#b?N(B,'J'`/R@')N97&GQk7')iRA
'`JjH(B,-L)#bHQ)u^iV*W@,Z+T<Sa,Q9"g-iPOn.fM!u/cIF&1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=
55RPE5`e8.5PmYA4oRSC48V)<3;YZ62?#H31]B-.0E*U'/H.-u.K1^o-2o1h,5r_a+9!;[*<$oS)?(HO
(AejG'`/R@')N:7&?HH<&cNF?'E/^C(&f$H)#bHQ)u^iV*r[8\+T<Sa,lT+h-iPRo/,h."0)dR(1&a!.
2#]B32Z>]83Vtl:48qA>4o7G?5MAAR5e]M\5PmYA4oRS@48q;?3W;#;2uY]62#]<11&`m+0)dC%.fh.N
r[Igor[.UirZ_=brZD+[rZ(nVrYkbRrYYVNrYGJJrY55Cq\&c<Tb-u2q\&lAq\9#ErYGJLrYYVQrYthV
rZ1tZrZM1arZhCgr[7[nr[Rmur[n+&r\=C-!AlV52#]B32Z>Z73;tr;3rV5?4Sq;=55RQq5cd5%5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO&Ndq`jsAq`Xp@q`Fd<r]0s;r\sg6r\XU1r\=C+r\"1$r[[ssr[7[lrZqIerZV7_rZ1tX
rYthTrYb\PrYGPM!>ZIM(&epE'DiF>&YTd2&c34?'DiLC(&f!J(]G9N)ZC]T*<$uX*r[;],5rhd-2o:k
./k^q/H.7#0E*^*1B'-02?#N52uYf93W;)=48qA>4o7G?564#7JO&Kcq`jsAq`Xp@q`Fd<r]0s;r\sg6
r\XU1r\=C+r\"1$r[[ssr[7[lrZqIerZV7_rZ1tXrYthTrYb\PrYPPLrY>DHq\/i>q[oM5p_!B9rY,/C
rY>DJrYPPNrYkbTrZ(nXrZ;%]rZ_=dr[%Okr[@aqr[e%#r\+7*r\FI0r\a[5r\sg9r]0s=r]C*Aq`Xg?
q`b'GO?i\-q`am?r]L0Aq`=^9q`"L3r\XU1r\=C*r\"1$r[Rmrr[7[krZqIerZM1^rZ1tXrYt_PrYPPL
q\B)Eq\/i>q[rN5X:Y.=rY#)ArY55Eq\T5KrYkbTrZ(nYrZD+^rZ_=er[%Okr[Igsr[n+%r\4=+r\OO1
r\a[5r]'m;q`=^<r]L'@q`amAg-C3S^-MQ[q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=(r[\%"!@o]"
.K1^o-N5:i,5rbb+9!;[*<$oV)ZCWR)#b?N(B,'J'`/R@')N97&GQk7')iRA'`JjH(B,-L)#bHQ)u^iV
*W@,Z+T<Sa,Q9"g-iPOn.fM!u/cIF&1&`p/1c,1hr\a[5r\sg9r]0s=r]C*Aq`Xg?q`fWsX?_>%JO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5jL]45PmYA4oRS@48q;?3W;#;2uY]62#]<11&`m+0)dF$/,h!s-iPIl,lT"e+oWS_*W@&X
)u^cT)?(KP(B>3O()HlarY55Cq\&c<Tb-u2q\&lAq\9#ErYGJLrYYVQrYthVrZ1tZrZM1arZhCgr[7[n
r[Rmur\"1'r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@q`amA!C/o$5jCW35PmYA4oRS@48q;?3W;#;2uY]6
2#]<11&`m+0)dF$/,h!s-iPIl,lT"e+oWS_*W@&X)u^cT)?(KP(]G3L(&epE'DiF>&YTd2&c34?'DiLC
(&f!J(]G9N)ZC]T*<$uX*r[;],5rhd-2o:k./k^q/H.:$0E*^*1B'-02?#N52uYf93W;)=48qA>4o7G?
56*s15l3eC55RMB4T7G>3rV,92uY]62#]<11&`j*0)dF$/,h!s-iPFk,lT"e+T<J^*W@&X)uCNP(]G3I
(&epE'DiF>&bZd;&GQk:')N@A'`/XE(],'K)ZC]T*<%#Y+9!D^,Q8tf-2o:k.K1js/cIC%0`Eg+1]B61
2?#N53;tr83rV5?4Sq;=55RRu5_2275l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`E^(/-%1$.kCTJ
r[7[lrZqIerZV7_rZ1tXrYthTrYb\PrYPPLrY>DHq\/i>q[oM5p_!B9rY,/CrY>DJrYPPNrYkbTrZ(nX
rZ;%]rZ_=dr[%Okr[@aqr[e%$r\+7*r\=L21]TB32?#N52uYf93W;)=48qA>4o7G?5Cl)$5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOlTk>3q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=)r[n+"r[Igor[.UirZ_=brZD+[rZ(nV
rYkbRrYYVN!#>SN(B,'J'`/R@')N9=&G6Y1')iRD'`JjH(AepI)?(QR)u^iV*W@,Z+T<Sa,Q9"g-iPOn
/,h."0)dO'1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=55RPF5X9lcl9P52q`am?r]L'>r]:$=r]'m9r\a[3
r\OO.r\4=)r[n+"r[Igor[.UirZ_=brZD+[rZ(nVrYkbRrYYVNrYGJJrY55Cq\&c<V\&M5p_*Q>rY5>H
rYGAIrYb\RrYthVrZ1tZrZM1arZhCgr[7[nr[[t"r\"1'r\=C-r\XU3r\ja7r]'m;r]:$?r]L'@q`amA
!'lW2q`jsAq`Xp@r]C!<r]'d6r\a[3r\OO.r\4=)r[e%!r[Igor[%OhrZ_=arZD+[rZ(nVq\fALrYGAG
rY55Cq\&c<p(4M@ob%'6q\/rCrY>DJrYPPNrYb\RrYthVrZ;%\rZM1brZqIhr[7[or[[t"r\"1(r\=C.
r\XL1r]'m;r]9p<r]L'@q`amAg-C3S^-MQ[q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=)r[e+#!@o]"
.K1^o-N5:i,5rbb+9!;[*<$oV)ZCWR)#b?N(B,'J'`/R@')N9=&G6Y1')iRD'`JjH(AepI)?(QR)u^iV
*W@,Z+T<Sa,Q9"g-iPOn/,h."0)dO'1&`p/1c,1hr\a[5r\sg9r]0s=r]C*Aq`Xg?q`fWsX?_>%JO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5jL]45PmYA4oRS@48q;?3W;#;2uY]62#]<11&`m+0E*R&/,h!s-iPIl,lT"e+oWS_*r[2Z
)u^cT)?(KP(B>3O()Hlaq\9#Cq\&Z9WY"h8q\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Ok
r[Igsr[n+%r\+7*r\FI0r\a[5r\sg9r]0s=r]C*Aq`Xg?q`b*H5_22c5l3eC55RMB4Sq5>3rV/=3;tl9
2?#H31]B-.0`Ea)/cI:".K1^o-N5:i,5rbb+9!>\*W@#W)ZCWR)#b?N(B,'G'`JdC')3'=&G6Y4')N@A
'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rhd-2o:k.K1js/cIC%0E*^*1B'-02?#N52uYf93W;)=48qA>
4o7G?56*s15l3eC55RMB4T7G>3rV,92uY]62#]<11&`m+0E*O%/,h!s-iPFk,lT"e+T<J^*W@&X)uCNP
)#b?N(B,'J'`/R@')3(7&@)l?&c34?'DiLC(&f!J(]G9N)?(QR)u^iV*r[8\+T<Vb,lT+h./k[p/,h."
0)dR(1&a!.2#B313;tr;3r;#<4Sq;=55RRu5_2275l3eC55RMB4Sq5>3rV/=3;tl92?#H31]B-.0`Ea)
/H@:%.kCTJr[7[lrZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Ap^sM;ob%'6q\/rCrY>DJrYPPN
rYb\RrYthVrZ;%\rZM1arZhCgr[7[or[[t"r\"1'r\=C-!AlV52#]B32Z>Z73;tr;3rV5?4Sq;=55RQq
5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO&Ndq`jj>r]U6Cq`Fd<r]0s;r\sg7r\a[2r\=C+r\+7&r[e$tr[@amrZqIf
rZV7_rZ;%ZrYthTrYb\PrYGPM!>ZIM(&J^E'DiF;&ZQE8&c34<'E/^F(&f!J(]G9N)?(QR)u^iV*r[8\
+oW\b,Q9"g-iPRo/,h."0)dR(1&`s-2#]B32Z>Z73;tr;3rV5?4Sq;=55RPF5X9lcl9P52pce[?r]L'>
r]:$=r]'m9r\ja5r\OO.r\4=)r[n+#r[Igpr[.UirZhCcrZD+\rZ1tWrYkbRrYYVNrYGJJq\9#Cq\&Z9
WY"h8q\&c>rY5>HrYGJLrYYVPrYkbTrZ(nYrZD+_rZ_=dr[%Okr[Igsr[n+%r\4=+r\FI0r\a[5r\sg9
r]0s=r]C*Aq`Xg?q`b'GO?i\-q`am?r]L0Aq`=U6r\sg6r\XU1r\=C+r\+7%r[[ssr[7[lrZqIerZV7_
rZ1tXrYt_PrYYVNrYGJJrY55Cq\&Z9q%0hCob%09q\/i@rY>DJrYPPNrYbSPrZ(nYrZM1`rZhCfr[.Um
r[Igsr[n+&r\4=,r\OO1r\ja7r]'m;r]9p<r]L'@q`amAg-C3S^-MQ[pce[?r]L'>r]:$=r]'m9r\ja5
r\OO.r\4=)r[e+$!A#f$.K1ap-N5:i,Q8kc+9!>\*W@#W)ZCWR)#b?N(B,'G'`JdC')3'=&G6Y4')N@A
'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!G_,5rhd-2o:k.K1js/cIC%0`Eg+1''3g!&X[4r\ja7r]'m;r]:$?
r]L'@q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22d5l3e@55m_E4Sq5>3rV/=3;tl92Z>T51]B-.0`Ea)/cI=#
.fLjq-iPFk,Q8nd+T<G]*W@&X)ZCWR)#b<O(',0drY>;ErY,&>ob"D>ob%'6rY,/CrY>DJrYPPNrYb\R
rYthWrZ;%\rZV7crZqIir[@apr[[t"r\"1(r\=C-r\XU3r\ja8q`4O8r]L'@q`amA!C/o$5jCW35PRGA
4oRS@48q;?3W;#;2uY`72?#E21&`m+0E*R&/H.-u./kUn-2o.g,5r_a*r[2Z*<$lU)?(KP(]G3L(&J^E
'DN45&[2i>&c34?'DiLC(&f!J(]G9N)?(QR)u^lW*r[8\+oW_c,lT.i./k[p/,h."0)dR(1&`s-2#]B3
2Z>]53Vto;4Sq;=55RPE5`e8.5PmYA4oRSC48V)<3W;#;2uY]62#]<11&`m+0E*R&/,h!s-iPIl,lT"e
+oWS_*r[2Z)u^cT)?(KP(]G3L(&epE'DN48&c<3G&G6Y7')N@A'`/XE(B,-L)#bEP)u^iV*W@/[+T<P`
,Q8tf-N5Fm.fLst/cIF&0`Ej,1]B612Z>Z73;tr;3r;#<4T7M=55RRu5_2275l3e@55m_E4Sq5>3rV/=
3;tl92Z>T51]B-.0`Ea)/H@=&/1gcMr[@anr[%OgrZ_=arZ;%ZrZ(nUrYb\PrYPPLrY>;ErY,&>ob"D>
ob%'6rY,/CrY>DJrYPPNrYb\RrYthWrZ;%\rZV7crZqIir[@apr[[t"r\"1(r\=C-!AlV52#]B32Z>]5
3Vto;4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&Ndq`jj>r]U6Cq`Fd<r]0s;r\sg7r\a[2r\FI-r\+7&
r[e$ur[@anr[%OgrZ_=arZ;%ZrZ(nVrYkbQrYGPM!>ZIM(&J^B'DiF8&[2i>&c34?'E/^C(&f!J(]G9N
)?(QR)u^lW*r[8\+oW_c,lT.i./k[p/,h."0)dR(1B'*/2#]B32Z>]83W;)=48V/;4o7G?564#7JO&Kc
q`jj>r]U6Cq`Fd<r]0s;r\sg7r\a[2r\FI-r\+7&r[e$ur[@anr[%OgrZ_=arZ;%ZrZ(nVrYkbQrYPPL
rY>;Eq\/i>ob"D>ob%'6rY,8Fq\B)GrYPPNrYb\RrYthWrZ;%\rZV7crZqIir[@apr[[t"r\"1(r\FI/
r\XU3r\ja8r]0s=r]C!>q`Xg?q`b'GO?i\-q`am?r]L'>r]:$=r]'m9r\a[3r\OO.r\4=)r[n+"r[Rmq
r[.UjrZhCcrZM1]rZ1tXrYkbRrYYVNrYGJJq\9#Cp_*?6r"-.Fob%09q\/rCrY>;GrYPPNrYb\SrZ(nX
rZD+^rZV7cr[%Ojr[@aqr[[t#r\+7)r\FI/r\XU4r\sg9r]0s=r]C!>r]U$?q`ie"JO$q7q`jj>r]U6C
q`Fd<r]0s;r\sg7r\a[2r\FI-r\+7&!%\.%/H.-u./kUn-2o.g,5r_a*r[2Z*<$oV)ZCTQ(]G3L(&J^B
'DiF8&[2i>&c34?'E/^C(&f!J(]G9N)?(QR)u^lW*r[8\+oW_c,lT.i./k[p/,h."0)dR(1B''11c,1h
r\a[5r]'m;r]:$?q`Oa=q`amAJO$;%JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22d5kmS@55RMB4T7GA3rV/=3;tl92Z>T5
1]B0/1&`j*0)dF$.fLjq-iPFk,Q8nd+oWS_*r[/Y)u^cT)?(HQ(BG<gq\B)Eq\/i>ob"D>p_!B9q\/rC
q\B)GrYPPNrYb\SrZ(nXrZD+^rZV7cr[%Okr[@apr[[t"r\+7)r\FI/r\XU4r\sg9r]0s=r]C!>q`Xg?
q`b*H5_22c5kmS@55RMB4T7GA3rV/=3;tl92Z>T51]B0/1&`j*0)dF$.fLjq-iPFk,Q8nd+oWS_*r[/Y
)u^cT)?(KP(]+sH'`/R@'(lj@&GQk7')N@A'`/XE(B,-L)#bEP)u^iV*W@/[+T<P`,Q9"g-iPOn.K1js
/cIF&0`Ej,1]B612Z>Z73;tr;3rV5<4Sq;=55RPE5`e8+5Q3kD4o7A@48q;?3W;#;2uY]62#]<11&`m+
0E*R&/H.-u./kRm-2o.g,5r_a+9!;[*<$oV)ZCTQ(]G3I(&epE'DiF;&c<3J&G6Y4')N@A'`JjH(AepI
)#bEP)u^iV*W@/[+T<Sa,lT+h-iPRo.fM!u0)dO'0`*[*2#]E42uYf93W;)=48V/>4nq5<5MAAR5e]MY
5PmYA4oRSC48q;?3W;#;2uY`72?#E21B'$-0E*R(/-.:Qr[Rmqr[7[krZhCdrZV7_rZ;%YrYthTrYb\P
rYPGHrY55Cq\&Q6YRpRAq\&c>rY55ErYGJLrYYVPrYthVrZ1t[rZM1`rZhCgr[7[nr[Igsr[n+&r\4=,
r\FR31]TB32Z>Z73;tr;3rV5<4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&NdpcnX>q`Xp@r]C*?q`4X8
r\ja5r\XU0r\=C+r\"1%r[[ssr[@amrZqIfrZV7_rZ;%ZrYthTrYb\P!#GYP(]G3L(&J^E'DiF8&[2iA
&c34<'E/^F(&f!J(],'K)ZC]T*<$uX+9!D^,5rke-2o:k.K1gr/H.:$0E*^*1B'*/2?#N52uYf93W;)=
48V/;4o7G?564#7JO&KcpcnX>q`Xp@r]C*?q`4X8r\ja5r\XU0r\=C+r\"1%r[[ssr[@amrZqIfrZV7_
rZ;%ZrYthTrYb\PrYPPLrY>;ErY,/Aob"D>p_!B9q\/rCrY>DJrYPGKrYkbTrZ(nXrZD+^rZ_=er[%Ok
r[Igrr[e%$r\+7*r\FI/r\a[5r\sg9r]0s=r]C!>q`Xg?q`b'GO?iS*r]^*?r]L0Ar]:$=r]'m9r\ja5
r\OO/r\=C*r\"1$r[[srr[7[krZhCdrZM1^rZ;%YrYthTq\];KrYGJJrY55Cq\&Q6!>#gM&GQk4')N@A
'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!G_,5rke-2o:k.K1gr/H.:$0`Eg+1]B612>]?33;Yc948V/>4nq5<
5MAAR5e]MY5PmYA4oRSC48q;<3W;#;2Z>T52#]901&`m+/c[I(/M6rPr[Igpr[.UirZhCcrZD+\rZ1tW
rYkbRrYYVNrYGJJq\9#Cq\&Q6YRpRAq\&c>rY5>HrYGJLq\];NrYthVrZ1t[rZM1arZqIhr[7[or[Rmu
r\"1'r\=C-r\FR42#oN52Z>Z73;tr;3rV5<4Sq;=55RQq5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&NdpcnX>q`Xp@
r]C*?q`4X8r\ja5r\XU1r\FI,r\"1%r[[ssr[@amrZqIfrZV7`rZD+[rZ(nVrYb\P!#GYP(]G3I(&epE
'DiF;&[N&D&bm"<'DiLC(&f!J(]G9N)?(QR)u^iV*r[8\+T<Sa,lT+h-iPRo.fM!u0)dO'1&a!.2#]B3
2Z>Z73;tr;3rV5<4T7M=55RPF5X9lcl9P,/q`am?r]L0Ar]9p:r]'m8r\a[3r\OO/r\4=(r[n+"r[Igp
r[.UirZhCcrZM1^rZ1tXrYthSrYYVNrYGAGrY55Cq\&Z9ZOlmDp_*Q>q\9#ErYGJLrYYVPrYkbTrZ(nY
rZD+^rZ_=er[%Okr[Igrr[e%$r\+7*r\OO1r\a[5r\sg9r]0s=r]C!>r]U$?q`b'GO?iS*r]^*?r]L0A
r]:$=r]'m9r\ja5r\XU0r\=C+r\"1$r[[ssr[7[lrZqIerZV7_rZ;%ZrYthTrYb\PrYPPLrY>;Eq\/rA
oaq39&@E)E&bm"<'DiL@(B,-L)#bEP)ZC`U*W@,Z+T<P`,5rke-N5Cl.K1js/H.=%0`Eg+1]B612>]?3
3;Yc948qA>4nq5<5MAAR5e]MY5PmYA4oRSC48q;<3W;#;2Z>T52#]<11B'!,/c[I(/M6rPr[Igpr[.Ui
rZhCcrZM1^rZ1tXrYthSrYYVNrYGAGrY55Cq\&Z9ZOlmDp_*Q>q\9#ErYGJLrYYVPrYkbTrZ(nYrZD+^
rZ_=er[%Okr[Igrr[e%$r\+7*r\OO1!Au_72?#N52uYf93W;)=48V/>4nq5<5Cl)$5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOlTk50q`am?q`Oj>r]:$=r]'m9r\ja4r\OO/r\4=)r[n+"r[Rmrr[7[krZqIerZM1^rZ1tXrYthT
rYY\Q!>l[Q(]G3L(&J^B'E/X5&],+M&c34<'E/^F(&JdG(]G<O)ZC]T*<$uX*r[;]+oW_c-2o7j./k^q
/,h."0E*[)1&a!.2#]B32uYf93Vtl:48qA>4o7G<564#7JO&KcpcnX>q`Xg=r]C*?r]0s;r\sg7r\XU1
r\FI,r\+7&r[[str[Igor[%OhrZ_=arZD+[rZ(nVrYkbRrYYVNrYGJJq\8o@rY"Z3_@Z8Mq\&c>rY5>H
q\K/IrYb\RrYthVrZ1tZrZM1`rZhCgr[.Umr[Rmtr[n+&r\4=+r\OO1r\a[6r]'m;q`=^<r]L'@q`ad>
!'lW2pcnaApc\U=q`F[8r]'m9r\a[3r\OO.r\4=(r[n+"r[Igpr[7[jrZhCdrZM1]rZ1tXrYthTq\];K
q\AuBq\/rAp(@68^C]rJq\&c>rY5>HrYGJLrYYVPrYkbTrZ(nXrZD+^rZ_=dr[%Okr[@aqr[[t"r\+7)
r\=C.r\XU3r\sg9r]0s=q`Fd>q`Xg?pcmItJO$q7pcnX>q`Xg=r]C*?r]0s;r\sg7r\XU1r\FI,r\"7'
!A,o&/,h$t.K1^o-2o1h,5r_a+9!;[*<$oV)ZCWR)#b?N(B,'G'`/RC'(6FL&FpG1')N@A'`JjE(B,-L
)?(QR)u^iV*W@,Z+T<P`,Q9"g-N5Fm.fLst/cIF&0`Eg+1]B332)P@kr\sg9r]0j:r]C*Aq`Xg?pcj<p
X?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5jL]15PmYA4o7A@48q;?3W;#;2uY`72?#E21B'$-0E*U'/H.-u.K1^o-2o1h
,5rbb+T<G]*<$oV)ZCTS(]bHjrYPPLrY>;Eq\/i>ne&_Mob$s3q\/rCrY>DJrYPPNrYb\RrYthVrZ1t[
rZM1`rZhCgr[.Umr[Rmtr[n+&r\4=,r\OO1r\ja7r]'m;q`=^<r]L'@q`ad>!C/o$5jCW05PmYA4o7A@
48q;?3W;#;2uY`72?#E21B'$-0E*U'/H.-u.K1^o-2o1h,5rbb+T<G]*<$oV)ZCWR)#b?N(B,'G'`/R@
'(QXO&G6Y1')N@A'`JjH(B,-L)#bEP)ZC]T*<$uX+9!D^+oW_c-2o7j./k^q/,h."0E*[)1B'*/2#]E4
2uYf93Vtl:48qA>4o7G<56*s15kmS@55RMB4Sq5>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq-iPFk
,Q8nd+T<J^*r[/Y)u^cT)?(KP(]G3L(&J^B'DiF<&c**Y&FpG.')N@A'`JjH(B,-L)#bEP)ZC]T*<%#Y
+9!D^,5rhd-2o:k./k^q/H.7#0E*^*1B'*/2?#N52uYf93W;):48qA>4o7G<5MAAR5e]MY5PmYA4o7A@
48q;?3W;#;2uY`72?#E21B'$-0*!U*/h[,Sr[Rmrr[7[krZqIerZV7`rZ;%YrYthTrYb\PrYPPLrY>;E
q\/i>ne&_Mob$s3q\/rCrY>DJrYPPNrYb\RrYthVrZ1t[rZM1`rZhCgr[.Umr[Rmtr[n+&r\4=,r\OO1
!B)h92Z>Z73;tr83rV5?4Sq;=557?n5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&Eaq`jj>r]U-@r]C*?r]0s;r\sg7
r\a[3r\OO.r\+7'r[e%!r[Rmqr[.UjrZhCcrZM1]rZ1tXrYthT!#YeT)?(HL(B,'G'`Jd@'(ljR&G6Y4
')N@>'`JjH(B,-L)#bEP)ZC`U*W@,Z+9!G_,5rke-N5Cl.K1gr/H.:$0E*[)1B'*/2#]E42uYf93W;):
48qA>4o7G<564#7JO&B`q`jj>r]U-@r]C*?r]0s;r\sg7r\a[3r\OO.r\+7'r[e%!r[Rmqr[.UjrZhCc
rZM1]rZ1tXrYthTrYb\Oq\K/Gq\9#Cp_*63_@ZAPq\&c>q\9#ErYGJLrYYVPrYkbUrZ1tZrZD+_rZ_=e
r[.Ulr[Igrr[e%$r\+7)r\FI/r\XU4r\sg9r]0s=q`Fd>q`Xg?pceaDNBmA*pce[?q`Oj>r]:$=r]'m9
r\ja5r\OO/r\=C*r\"1$r[Rmrr[7[krZqIfrZV7_rZ:qVrYthSrYYVNrYGAGrY55Cp_*K:q@U[Xne(j6
q\/i@q\AuErYYVQrYthVrZ1tZrZM1`rZhCfr[.Ulr[Igsr[e%$r\4=+r\FI0r\a[5r\sg9r]0s=r]C!>
q`Xg?pcmItJO$h4q`jj>r]U-@r]C*?r]0s;r\sg7r\a[3r\OO.r\"7(!A6#(/H.1!.fLjq-N5=j,Q8kc
+T<G]*W@&X)u^cT)?(HL(B,'G'`Jd@'(ljR&G6Y4')N@>'`JjH(B,-L)#bEP)ZC`U*W@,Z+9!G_,5rke
-N5Cl.K1gr/H.:$0E*[)1B'*/1]]Km!&jg8r]'m;r]9p<r]L'@q`ad>JO$;%JO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22a
5kmS@55RMB4T7G>3rV/=3;tl92?#H31]B-.0`Ea)/cI:".fLjq-N5=j,Q8nd+oWS_*r[2Z)u^`U)$(Tm
rYYVNrYGAGrY55Cp_*$-e.D'\q\&c>rY55ErYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@apr[[t!
r\"1(r\=C.r\XU3r\ja7r]'m;r]:$?q`Oa=q`ad>!C/o$5j(E-5PmYA4oRSC48V)<3W;#;2uY]62#]<1
1&`m+0E*R&/,h$t./kRm-2o.g,5rbb+9!>\*W@#W)ZCWR)#b?N(AejG'`/R='(6F^&FU5.')N@A'`/XE
(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rhd-2o:k./k[p/,h+!0)dR(1&a!.2#]B32Z>Z73;tr;3rV5<4Sq;=
557>B5`J&(5PmYD4o7A@48q;<3W;#;2Z>T52#]901&`m+0)dI%/,h$t./kRm-2o.g+oWV`+9!;[*<$oV
)ZCWR)#b?N(B,'G'`/R@')W@6&^_0\&bm"9'E/^C(&f!J(]G9N)>bBP*<%#Y+9!D^,5rke-2o:k./k^q
/,h."0E*[)1B'*/2#]B02uYf93Vto;4SV):557@r5_2245kmS@55RMB4T7G>3rV/=3;tl92?#H31]B-.
0E<a,0/*;Vr[[str[@amr[%OgrZ_=brZD+\rZ1tWrYkbRrYYVNrYGAGrY55Cp_*$-e.D'\q\&c>rY55E
rYGJLrYYVPrYkbTrZ(nYrZD+^rZ_=dr[%Okr[@apr[[t!r\"1(r\=C.r\XU3!B)h92Z>Z73;tr;3rV5<
4Sq;=557?n5cd5%5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO&EapcnX>q`Xp@r]C!<r]0s;r\sg7r\XU1r\FI,r\+7&r[e%!
r[Igor[.UirZ_=brZM1]rZ1tXrYkhU!?)mU)?(KP(]G3L(&J^E'DN4&&`sYh&c349'E/^C(&f!J(]G9N
)?(QR)u^lW*r[8\+oW\b,Q9"g-iPOn.fM!u/cIF&0`Eg+1]B612?#Q33;Yc948V/>4nq59564#7JO&B`
pcnX>q`Xp@r]C!<r]0s;r\sg7r\XU1r\FI,r\+7&r[e%!r[Igor[.UirZ_=brZM1]rZ1tXrYthTrYb\P
rYPPLrY>;ErY,&>jq6_ekn3e*p_3W@q\B)GrYPPNrYb\RrYthWrZ;%\rZV7brZhCgr[7[nr[Rmur[n+&
r\4=+r\OO1r\a[6q`+I6r]C!>r]U$?pceaDNBm8'q`am?r]L0Ar]9p:r]'m9r\ja4r\OO/r\4=(r[n+"
r[Rmqr[7[krZqIerZV7`rZ;%ZrZ(nUrYb\PrYPGIrY>DHq\/`;!>,q0&`sYe&c34<'DiLC(&f!G(]G9N
)?(TS*<$uX+9!D^+oW_c,lT+h-iPRo.fM!u/cIF&0`Ej,1]B612Z>Z73;tr;3r;#<4Sq;:557@r5_224
5kmS@55RMB4T7G>3rV/=3;tl92Z>Q41]B0/0E<a,0/*;Vr[e%!r[Igor[.UirZ_=brZM1]rZ1tXrYthT
rYb\PrYPPLrY>;ErY,&>jq6_ekn3e*p_3W@q\B)GrYPPNrYb\RrYthWrZ;%\rZV7brZhCgr[7[nr[Rmu
r[n+&r\4=+r\OO1r\X^82ZPf63;Yc948V/>4nq595Cl)$5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOkWno-q`am?q`Oj>
r]:$=r]'m9r\ja5r\XU0r\=C+r\"1$r[[ssr[@anr[%OgrZ_=brZD+\rZ1tW!#bkV)ZCWR)#b?N(AejD
'`/R=''p4m&FU5+')3.>'`/XE(B,-L)#bEP)ZC]T*<$uX+9!D^+oW_c,lT.i./k[p.fM!u/cIF&1&`s-
1]B922Z>Z73;tr;3r;#<4Sq;=54q,@5X9lck<Sf,q`am?q`Oj>r]:$=r]'m9r\ja5r\XU0r\=C+r\"1$
r[[ssr[@anr[%OgrZ_=brZD+\rZ1tWrYkbRrYYVNrYGAGq\8o@p_)p*jq-tnp_*?8rY55ErYGJLrYYVP
rYkbTrZ(nXrZD+^rZV7crZqIir[@apr[Rmur[n+&r\=C-r\OO2r\ja7r]'m;r]9p<r]L'@q`a[;!'lN/
pcnX>q`Xp@q`Fd<r]0s;r\sg7r\XU1r\FI,r\+7'r[e%!r[Igor[.UjrZhCdrZM1^rZ;%YrYthTrYb\P
rYPPLq\AuBq\/l?r=\Q2jq-kkp_*?8rY5>Hq\K/IrYYVPrYkbTrZ(nXrZD+^rZ_=dr[%Ojr[@apr[[t"
r\"1(r\=C-r\XU3r\ja7r]'m;r]9p<r]L'@q`a[;g-C3S]0Q-Uq`am?q`Oj>r]:$=r]'m9r\ja5r\XU0
r\4C,!AH5,0)dF$/,h!s./kUn-2o.g,5rbb+9!>\*W@#W)ZCWR)#b?N(AejD'`/R=''p4m&FU5+')3.>
'`/XE(B,-L)#bEP)ZC]T*<$uX+9!D^+oW_c,lT.i./k[p.fM!u/cIF&1&`s-1]B922?>`q!&sm:r]0s=
q`Fd>q`Xg?ofn!mX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5j1K.5PmY>4oRSC48q;?3Vtf82uY`72?#E21B'$-0E*R&
/H.-u./kUn-N5:i,Q8kc+T<J^*W@#Y)Z^lsrYkbRrYYVNq\K/Gq\8o@p_(FUq\&Z;rY55ErYGJLrYYVP
rYkbTrZ(nXrZ;%]rZV7brZqIhr[7[or[Rmtr[n+%r\4=,r\OO1r\a[5r\sg9r]0s=r]C!>r]U$?ofiIB
5_22`5kmS@557;?4T7GA3rV/:3;tl92Z>T51]B0/1&`j*/cI=#.fLjq-iPIl,lT%f+oWV`+9!;[*<$oV
)ZCWR)#b?K(B,'G'`/R='#G7X')3.>'`/XE(B,-L)#bEP)ZC]T*<$uX*r[;]+oW\b,lT+h-iPRo.fLst
/cIC%0`Ej,1]B612?#N52uYf93W;)=48V/>4nq5656*s.5kmS@55RM?4T7GA3rV/=3;YZ62?#H31]B-.
0`Ea)/cI=#.fLjq-iPFk,lT"e+oWV`*r[2Z*<$oV)ZCWR)#b?K(B,'G'`/OE&eb$R`=_kXq\/i@q\AuE
rYYVPrYkbTrZ(nXrZ;%]rZV7cr[%Ojr[7[or[Rmur[n+&r\4=,r\OO1q_nF5r]0j:r]C!>r]U$?ofq.q
JO$h4pcnX>pc\U=r]C*?r]0j8r\sg7r\a[2r\=I.!AQ>.0E*R&/H.-u./kUn-N5:i,Q8kc+T<J^*W@&X
)u^cT)?(KP(],!I(&J^B'DN3W&c349'E/^C(&f!J(]G9N)?(QR)u^iV*W@,Z+T<P`,5rke-2o:k.K1gr
/,h."0)dR(1B'*/2#]B32?>`q!&sm:r]0s=r]C!>r]U$?ofn!mX?_>%JO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5j1K.5PRG>
4oRS@48q;?3W;#;2uY`72?#E21B'$-0E*U'/cI:".K1ap-N5:i,Q8nd+T<J^*r[/[*!%$!rYt_PrYYVN
rYGAGq\8o@ne0Faob.$5rY55ErYGAIrYYVPrYkbTrZ(nXrZD+^rZV7cr[%Ojr[7[or[Rmur\"1'r\4=,
r\OO1r\ja7r]'d8q`Fd>q`X^<ofiIB5_22`5kmS=55RMB4Sq5>3rV/=3;tl92Z>T51]B0/1&`j*0)dI%
/,h!s./kRm,lT%f,5r_a+9!>\*W@&X)uCNP)#b?N(AejD'`/R7'%@Nd')3.>'`/XE(AepI)#bEP)ZC]T
*<$uX+9!D^+oW_c-2o7j-iPRo.fM!u0)dO'0`Ej,1]B612Z>Z73;Y`548qA>4nq5656*s.5kmS=55m_B
4T7G>3r:o92uY]62#]<11B'!,0E*R&/H.1!./kUn-N5:i,Q8nd+T<J^*r[/V)u^`P)#b?N(B,'G'_rCB
'D3!f&b6S0'E/^C(&f!J(],'K)Z(KQ*W@,Z+9!G_,5rhd-2o7j-iPRo/,h+!0)dO'0`*[*2#]E42uYf9
3W;):48qA>4o7G65MAAR5eB;V5PRG>4oRS@48q;?3W;#;2uY`72?#E21&s$00erY\r\"1%r[[ssr[@am
rZqIfrZ_=arZD+\rZ1tXrYt_PrYYVNrYGAGq\8o@ne0Faob.$5rY55ErYGAIrYYVPrYkbTrZ(nXrZD+^
rZV7cr[%Ojr[7[or[Rmur\"1'r\4=,r\OO1r\ja7!B<%=3;Y`548qA>4nq565Cl)$5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOkWnf*q`am?r]L'>r]:$=r]'m9r\ja5r\XU1r\FI,r\"1%r[e$ur[Igor[.UjrZhCcrZM1^rZ2%[
!?E3[*<$oV)ZCWR)#b?N(AejD'_i@1''9ep')N@>'`/XE(B,-I)#bEP)ZC]T*<$uX*r[;]+oW\b,lT+h
-N5Fm.fLst/cIC%0E*^*1]B612?#N52uYf93W;)=48V/;4nq5<5P[Qq5j(E*5PmYA4oRS@48q;?3W;#;
2uY`72?#H31]B0/0`E^(/cI=#.fLmr-iPIl-2o.g+oWV`+9!>\*W@&X)u^cT)?(KP(]G3I(&J^?'CQRr
&apA0'DiL@(&f!J(],'K)?(QR)u^iV*W@,Z+T<P`,5rke-2o7j./k^q/,h."0)dO'1&a!.2#]B32Z>Z7
3;tr;3rV5<4Sq;:55RS@5`J&(5PRG>4oRS@48q;?3W;#;2uY`72?#H31]B-.0`E^(/cI:".fLjq-iPFk
,lT%f+oWV`+9!;[*<$oV)ZCWR)#G-K(AejD'EJj\q@i<1kn3@sq\/`=rY>;GrYPPNq\f8MrZ(nYrZD+^
rZ_=drZqIir[7[nr[Rmur[n+&r\4=+r\OO1r\aR3r]'m;r]:$?q`Oa=q`ad>e3JRM]0Q$Rq`am?r]L'>
r]:$=r]'m9r\ja5r\XU1!&=R11B'!,0)dI%/H.-u.K1^o-N5=j,Q8kc+T<J^*r[2Z*<$oV)ZCWR)#b?N
(AejD'_i@1''9ep')N@>'`/XE(B,-I)#bEP)ZC]T*<$uX*r[;]+oW\b,lT+h-N5Fm.fLst/cIC%0E*^*
1]B612?#N52ZYlt!''s<r]:$?q`Oa=pceR>JO$(tJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22[5l3e@55RMB4Sq5>3rV/=
3;tl92Z>T52#]<11&`m+0E*R&/,h$t./kUn-N5:i,5rbb+T<G_*W[<'rZ1tXrYthTrYb\PrYPGIq\Al?
mh=grmh>R4p_EcDrYPPNq\fAOrYthVrZ1t[rZM1`rZhCfr[%Okr[@apr[[t!r\"1'r\4=,r\OO1r\a[6
r]'d8r]:$?q`Oa=q`ad>q*9KriB[9)pceR<r]L'>r]:$=r]'m9r\ja5r\XU1r\=C+r\+7&r[[str[@an
r[.UirZ_=brZM1^rZ;%ZrZ(nVrYkbRrYYVNq\K&Dp_<01jq@+rq\8f?rYGJLrYYMMrYkbTrZ(nXrZD+^
rZV7crZqIhr[7[nr[Igsr[e%$r\+7)r\FI/r\XU3r\sg9q`4X:r]C!>q`Xg?pcnU?MEpr$q`am?q`Oa;
q`4X8r\sg7r\a[2r\FI-r\+7'r[n+"r[Igpr[.UjrZqIerZV7`rZ:qWrZ(nVrYkYNrYPGIq\9,G'`&O7
'B9_o'DiL=(&JgH)#bEM)ZC]T*<$uX+9!D^+oW_c,lT+h-iPOn.K1js/cIC%0`Eg+1B'*/2#]B32uYf9
3Vtl:48V/;4o7G<5L_rL5d`lS5PRG>4oRS@48q;?3W;#;2uY`72?#E41BB9fr\=C+r\+7&r[[str[@an
r[.UirZ_=brZM1^rZ;%ZrZ(nVrYkbRrYYVNq\K&Dp_<01jq@+rq\8f?rYGJLrYYMMrYkbTrZ(nXrZD+^
rZV7crZqIhr[7[nr[Igsr[e%$r\+7)r\FI/r\XU3r\sg9!BE1=3W;)=48V/;4o7G<5Cl(s5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOi^!B*pceR<r]L'>r]:$=r]'m9r\ja5r\XU1r\=C+r\+7&r[[str[Igor[.UjrZhCdrZV7_
!$2.^*r[2Z*<$oV)Z(EO)#G-K(AejA'_2q"'(lq2'`/XE(AepI)#bEP)ZC]T*<$uX*r[8\+T<Sa,Q8tf
-N5Cl./k^q/,h+!0)dR(1&`s-2#]B32Z>Z73;tr83rV5?4SV):557A<5_22Z5l3e@55RMB4Sq5>3rV/=
3;tl92Z>T52#]<11&`m+0E*R&/,h$t.K1^o-N5=j,Q8nd+oWS_*r[2Z*<$oV)Z(EO)#G-K(AejA'_2q"
'(lq2'`/XE(AepI)#bEP)ZC]T*<$uX*r[8\+T<Sa,Q8tf-N5Cl./k^q/,h+!0)dR(1&`s-2#]B32Z>Z7
3;tr83rV5?4SV):557A=5`.i%5PRG>4oRS@48q;?3W;#;2uY`72?#H31B'$-0`E^(/cI:".fLmr-iPIl
-2o.g,5rbb+9!>\*W@&X)u^cT)?(KM(],!G'`]!D'_2q%'(Q_/'`/XE(B,-I)#bEP)ZC]T*<$uX*r[8\
+oW\b,Q9"g-N5Fm.K1gr/H.7#0)dR(1&a!.2#]B32Z>Z73;tr;3rV5<4Sq;:557@l5_22.5l3e@55RMB
4Sq5>3rV/=3;tl92Z>T51]T<41Gf"br\4=)r[n+"r[Rmrr[7[lr[%OgrZ_=brZD+\rZ1tXrYthTq\fAM
q\T5Iq\Al?ne:-uob7!4q\B)Gq\T5KrYb\RrYthVrZ1tZrZD+^rZ_=drZqIir[7[nr[Rmtr[e%$r\4=+
r\FI0r\a[5r\sg9!BE.?3Vtl:48qA;4o7G<5Cl(s5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOi^!B*pceR<q`Oj>q`=^:
r]'m9r\ja5r\XU0r\=C+r\"1%r[e$ur[@anr[.UirZhCdrZD1_!?WE_*r[2Z*<$oS)ZCWR)#G-K(AJX>
'\=#n'_iF?(B,-I)#bEP)ZC]T*<$uX*r[8\+T<P`,Q8tf-2o:k./k[p/,h."0)dO'1&`s-1]B612?#Q3
3;tr;3rV5<4Sq;:557A<5_22Z5l3e@55RM?4T7G>3rV/=3;tl92Z>T52#]901&`m+0)dI%/H.-u./kUn
-N5:i,Q8nd+T<J^*r[2Z*<$oS)ZCWR)#G-K(AJX>'\=#n'_iF?(B,-I)#bEP)ZC]T*<$uX*r[8\+T<P`
,Q8tf-2o:k./k[p/,h."0)dO'1&`s-1]B612?#Q33;tr;3rV5<4Sq;:557A=5`.i%5PRG>4o7A@48q;<
3W;#;2uY`72#]<11B'!,0E*U'/H.1!.fLjq-iPIl,lT%f,5r_a+9!>\*W@&X)u^cQ)?(KM(]G0N'c$Q[
p_;Eqob@09rYGAIrYYMMrYkbTrZ(nXrZ;%\rZM1arZhCfr[.Ulr[@aqr[[t"r\"1'r\=C-r\OO2r\ja7
r]'d8r]:$?r]Ks=pceI;e3JRM[6XURpceR<q`Oj>q`=^:r]'m9r\ja5!&O^52#]901&`m+0)dI%/H.-u
./kUn-N5:i,Q8nd+T<J^*r[2Z*<$oS)ZCWR)#G-K(AJX>'\=#n'_iF?(B,-I)#bEP)ZC]T*<$uX*r[8\
+T<P`,Q8tf-2o:k./k[p/,h."0)dO'1&`s-1]B612?#Q32uu$"!'1$>r]C!>q`X^<pcj<pVEf\tJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5iP'(5PRG>4oRS@48q;?3Vtf82uY`72?#E21B'$-0E*U'/cI:".fLmr-iPIl-2o.g+oibe
+X-h-rZD+\q],SSrYkYOrYYMKq\Ji>g(a;sp_NiFq\];Mq\oGQrZ(nXrZ;%\rZM1arZhCfr[%Ojr[@ap
r[Rmur\"1'r\4=,r\OO1r\a[5r\sg9r]0s=q`Fd>pc\L<pcnI;JO&0ZpcnO;q`Xp@q`Fd<r]0j8r\sg7
r\a[2r\FI-r\+7'r[n+"r[Rmrr[7[lr[%OgrZ_=brZM1^rZ:qVrYthTq\fAMq\T,FobH0pp_EQ>rYPGK
rYbSOrYthVrZ1tZrZD+^rZ_=drZqIhr[.Umr[Igrr[e%$r\+7)r\FI/r\XU3r\ja7r]'m;r]9p<r]Ks=
q`ad>pHXL!pcnO;q`Xp@r]C!<r]0s;q`"L3r\XU1r\=C+r\+7&r[e%!r[Igpr[7[krZqIfq]Yq\rZ;%Z
q],SSrYkbRrYYGI!#PVMneKjmp_EQ>rYPGKrYb\Rq]#MSrZ1kXrZM1arZhCfr[.Ulr[@aqr[[t!r\"1'
r\4=,r\OO1q_n=2r]0s=q`Fd>pc\L<pcm.kJO$V.pcnO;q`Xp@q`Fd<r]0j8r\sg7!&Xd72?#E21B'$-
0E*U'/cI:".fLmr-iPIl-2o.g,5rbb+T<J^*r?rV)u^cQ)?(KM(],!@("sAs(&/RD(],'K)>b?O)u^iV
*W@,Z+9!D^,5rhd,lT+h-N5Fm.K1gr/H.:$0E*[)1B'*/2#]B32Z>Z73;to=3][7%q`Fd>pc\L<pcj<p
UHjAqJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5iP'%5PmYA4o7A@48V)<3W;#;2uY`72?#E21B'$-0`E^(/cI=#.fLmr./kRm
-2o1h+oibe+X-h-rZD+\rZ1kUrYthTrYbSMq\T#CneL^0lkTC5q\T,HrYbSOrYthVrZ1tZrZD+^rZV7b
rZhCgr[.Ulr[Igrr[[t"r\"1'r\=C-r\OO1r\ja7q`+R8r]:$?q`Oa=pceI;p-=0oiB['#q`am?q`Oj>
q`=^:r]'m9r\ja5r\OO/r\=C+r\"1%r[e$ur[Igpr[.UjrZqIerZV7`rZD+\rZ1kUrYthTrYbSMq\T#C
neL^0lkTC5q\T,HrYbSOrYthVrZ1tZrZD+^rZV7brZhCgr[.Ulr[Igrr[[t"r\"1'r\=C-r\OO1r\ja7
q`+R8r]:$?q`Oa=pceI;pHXL!ofr=;q`Xp@q`F[9q`+R6r\a[3r\OO/r\=C+r\"1%r[e$ur[Igpr[.Uj
rZqIerZV7`rZD+\rZ1tXq]#DMq\T>M(]>0F(@i42'^QS3(AepF)#bEM)ZC]T*<$uX*r[8\+T<P`,Q8tf
-2o:k./k[p/,h+!/cIF&0`Eg(1]B612Z>Z73;Y`83rV5<4Sq;:557@i5_22.5kRA=55RM?4T7G>3rV/=
3;tl92?5T82)Y@hr\FI-r\4=(r[n+#r[Rmrr[@amr[%OhrZ_=brZM1^rZ;%Zq],SSrYkbRq\]2Hp_NE8
neCF*q\K&Fq\];Mq\oGQrZ(nXrZ;%\rZM1`rZ_=dr[%Ojr[7[or[Rmtr[n+%r\+7*r\FI/r\XU4r\s^6
r](!?3WM5?48V/;4nq595Cl(p5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOi^!0$q`ad<r]L'>r]:$=r]'m9r\ja5r\XU1
r\FI-r\+7'r[n+"r[Rmrr[7[lr[%Oh!$_Lh,Q8kc+T<J^*r?uW*<$oV)Z(EL)#+p?(@N",(AJ^C)#G3M
)Z(KQ*<$uX*r[8\+T<P`,5rke-2o7j-iPOn.fLst/H.:$0E*[)1B'*/2#]B32Z>Z73;tr83rV5<4Sq;=
54q/65_22Z5kRA=557;?4Sq5>3rV/=3;tl92Z>T52#]<11B'$-0E*U'/cI:".fLmr-iPIl-2o1h,Q8kc
+T<J^*r?uW*<$oV)Z(EL)#+p?(@N",(AJ^C)#G3M)Z(KQ*<$uX*r[8\+T<P`,5rke-2o7j-iPOn.fLst
/H.:$0E*[)1B'*/2#]B32Z>Z73;tr83rV5<4Sq;=54q/75_hVt5PmYA4o7A@48V)<3W;#;2uY`72?#H3
1]B0/1&`j*0)dI%/,h$t.K1^o-N5=j,lT"e+oWV`+9!>\*W@&U)u^cQ)$(Qkr>>;GobR!2mhY[7q\]2J
rYkbTq],JSrZD+^rZV7brZqIhr[.Umr[Igrr[[t"r\"1'r\=C-r\OO1r\aR3r]'m;r]9p<q`Oa=q`a[;
d6N7J[6XCLq`ad<r]L'>r]:$=r]'m9r\aa6!Aub62#]<11B'$-0E*U'/cI:".fLmr-iPIl-2o1h,Q8kc
+T<J^*r?uW*<$oV)Z(EL)#+p?(@N",(AJ^C)#G3M)Z(KQ*<$uX*r[8\+T<P`,5rke-2o7j-iPOn.fLst
/H.:$0E*[)1B'*/2#]B32Z>Z73;tr93WM5?48V/;4o7G95Cl(p5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOha$j!pceR<
r]L'>r]:$=r]'m9r\ja5r\XU1r\FI,r\+7'r[n+#r[Rmrr[@amrZqOi!@/ri,Q8nd+oWV`+9!>\*W$iU
)uCQN)>G';(\ed7(\ejE)?(QO)u^iV*W@,W+9!D^,5rhd,lT+h-N5Cl.K1gr/,h."0)dO'0`Eg+1]B61
2?#N52uYf93Vtl:48V/;4nq565P@?n5i+d!5PRG>4oRS@48q;?3W;#;2uY`72?#H31]B0/0`Ea)0)dI%
/H.-u.K1ap-N5=j,lT%f,5rbb+T<J^*r[2W*<$oS)Z(EI)"/:9(@N(7)#G3M)Z(KQ*<$uX*r@&Y+T<Sa
,Q8tf-2o7j-iPRo.fLst/cIC%0E*[)1&a!.2#]B32Z>Z73;tr83rV5<4Sq;:54q/75_MDt5PRG>4o7A=
48V&;3;tl92Z>T52#]<11B'!,0E*U'/H.1!.fLjq-iPIl-2o1h,PrY`+T<J^*r[2Z*;^]Q)?:]T)>+j;
(\JR:(]G9N(],'E)?(QR)uCWS*W@,Z+8[2[,5rhd,l8qf./k[p.fM!u/cIC%0E*^*1B'*/2#]B32Z>Z7
3;tr;3r;#94Sq;=54Uqc5_22+5kRA:55RMB4Sq5>3rV/=3;ti:2?>]or\a[3r\OO/r\4=)r\"1%r[e$u
r[Igpr[.UjrZqIfrZ_=brZM1^rZ;%Zq],SSq\o>Lp_`H9p_N<7p_`lGrYkYQrZ(nXrZ:qYrZM1arZhCf
r[%Ojr[7[or[Rmtr[n+%r\+7)r\=C.r\XU3r\ja7r]'m;q`4a>3rhA>4Sq;:54q-k5bgSq5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO&*Xofr48q`Xp@q`Fd<r]0s;q`"L4r\XU1r\FI-r\4=)r[n+#r[[ssr[@anr[%Uk!@9&k,lT%f
,5rbb+T<J^*r[2W*<$oS)Yb3C)!2Y-)#G3J)Z(KQ*;^cU*r[8\+T<P`,5rhd-2o7j-iPOn.K1gr/H.7#
0)dR(1&`s-1]B612?#N52uYf93W;):48V/;4nq565P@?n5i+d!5PRG>4oRS@48q;?3W;#82uY`72#]<1
1B'$-0`Ea)/cI=#/,h!s./kUn-N5=j,lT%f,5rbb+T<J^*r[2W*<$oS)Yb3C)!2Y-)#G3J)Z(KQ*;^cU
*r[8\+T<P`,5rhd-2o7j-iPOn.K1gr/H.7#0)dR(1&`s-1]B612?#N52uYf93W;):48V/;4nq565PIEr
5kRA=557;?4Sq5>3rV/=3;tl62Z>Q41]B0/1&`m+0E*R&/H.1!.K1ap-iPIl-2o1h,5rbb+T<J[*r[2Z
*;^ZU)B/Pmp_i`AlkfX<rYP5Eq\f8Lq]#MSrZ1tZq]Ge[rZV7crZqIhr[.Ulr[@aqr[[t!r\"1'r\4=+
r\FI/r\aR2r\sg9r]0s=r]Bm;r]U$?nitMeJO$M+ofr48q`Xp@q`Fd<r]0s;rAOa92uY`72#]<11B'$-
0`Ea)/cI=#/,h!s./kUn-N5=j,lT%f,5rbb+T<J^*r[2W*<$oS)Yb3C)!2Y-)#G3J)Z(KQ*;^cU*r[8\
+T<P`,5rhd-2o7j-iPOn.K1gr/H.7#0)dR(1&`s-1]B612?#N52uYf93W;);3rhA>4Sq;:54q-k5bgSq
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO&*Xofr48q`Xg=q`Fd<r]0s;r\sg7r\a[3r\OO/r\=C+r\"1%r[e%!r[Rmrr[.[m
!@B/m-2o1h,Q8nd+oWV`+8[,Y*W$iR)u(?H)=JF2)>b?L)uCWP*W@,Z+9!D^+oW\b,Q8tf-2o7j-iPOn
.K1js/H.7#0)dO'1&`s-1]B612?#N52uYf93Vtl:48V/;4nq595O^ph5i+d!5PRG>4o7A=48q;?3W;#;
2uY`72?#H31]B0/1&`m+0)dI%/H.1!.fLmr-iPIl-2o1h,Q8nd+oWV`+8[,Y*W$iR)u(?H)=JF2)>b?L
)uCWP*W@,Z+9!D^+oW\b,Q8tf-2o7j-iPOn.K1js/H.7#0)dO'1&`s-1]B612?#N52uYf93Vtl:48V/;
4nq595Oh!l5kRA=557;<4T7G>3rV/=3;tl92Z>T52#]<11B'$-0`E^(/cI=#/,h$t./kUn-N5=j,lT%f
,5rbb+T<J^*r?uU)upuX)u(?E)=JF2)>b?L)uCWP*W@,Z+9!D^+oW\b,Q8tf-2o7j-iPOn.K1js/H.7#
0E*[)1&`s-1]B6.2Z>Z73;tr;3r;#<4SV)7557@c5_22+5kRA:55RM?4Sq5>3rV/=2ukl<2`L^or\a[3
r\OO/r\=C+r\"1%r[e%!r[Rmrr[7[lr[%OhrZhCdrZV7`rZD"YrZ1kUq]#;Kp_iN;mhu!@q]#DPq]5YW
rZD+^rZV7brZhCfr[%Ojr[7[nr[Igsr[e%#r\"1'r\=C-r\OO1r\a[5r\sg9r]0j:r]:-C4T.D>4nq59
5Cl(j5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOha$`sq`ad<q`Oa;r]:$=r]'m9r\ja5r\XL.r\=C+r\+7'r[e%!r[Rmr
!%7jr./kUn-N5=j,lT%f,5rbb+T!8[*r?uT*;CK/)Yb9K*;^cR*r[8\+T<P`,5WVa,lT+h-N5Fm.K1gr
/,h+!/cIC%0`Eg+1B'*/2#]B32Z>Z73;Y`83r;#<4SV):54q/05_22W5k7/:557;<4Sq5>3rV/=3;tl9
2Z>T52#B*.1&`m+0E*U'/H.1!.fLmr./kUn-N5=j,lT%f,5rbb+T!8[*r?uT*;CK/)Yb9K*;^cR*r[8\
+T<P`,5WVa,lT+h-N5Fm.K1gr/,h+!/cIC%0`Eg+1B'*/2#]B32Z>Z73;Y`83r;#<4SV):54q/15_MDn
5PmY>4oRS@48V)<3W;#;2uY`72?#H31]B0/1&`m+0E*U'/H.1!.f1Xn-i54e,Q8nd+oWV]+9!;^*?G)!
q],AMh&?&-q],JRq]>_YrZM1`rZ_=dq]u.fr[7[nr[Igrr[[t!r[n+&r\4=+r\FI/r\XU3q`"L6r]0j:
r]C!>pc\L<ofpVbJO$M+nj!"8pc\L:q`Fd<r]'s<!B<(<2uY`72?#H01]B-.0`Ea)0)dF$/,h$t.K1ap
-iPIl-2o1h,Q8nd+oWV]+9!>Y*W$iO)r2G-)uCWP*W$oW+9!D^+oW\_,Q8tf-2o7j./k[p.fLst/H.7#
0)dR(1&`s-1]B612?#N52uYf63W;):3rqH+!'L$>q`a[;JO#bkJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22X5jpr455m_B
4Sq5>3r:r:3;tl92Z>T52#]<11B'!,0E*U'/cI=#/,h!u.01kHr[@amr[%Ohq]l(arZV7`q]GeYq]5GO
f,OK)q]5YWq]Ge[q]Yq_rZhCfr[%Ojr[7[nr[Igrr[e%#r\"1'r\4=+r\FI/r\XU3r\ja7r]'m;r]9p<
q`Oa=pce@8n3DOihE^Nopce[?q`Oa;r]9p:r]'m9r\ja5r\XU1r\FI,r\+7'r[n+#r[[str[Igpr[.Uj
rZq@crZ_=brZM([rZ:qWp`.m)p`0/OrZ:qYrZM(]rZ_=drZqIhr[.Ulr[@apr[Rmur[n+%r\+7)r\=C-
r\OO1r\a[5r\sg9r]0s=q`F[;q`X^<ofqt3KL"ujpce[?q`Oa;r]:$=r]'m9r\jX2r\XU1r\FI,r\+7'
r[n+#r[[ssr[@anr[.UjrZqIfq]bn[rZD%Z!$;"Xp`/!,oc3iLrZ:qYrZM1`rZ_4arZqIhq^;@kr[Rmt
r[e%#r\"1'r\=C-r\OO1q_e@3q`+R8r]9p<q`Oa=pce@8b<UVDZ9[kCpce[?q`Oa;r]:!<!BE1>3;tl9
2Z>T52#]<11B'!,0E*U'/cI=#/,h$t.K1ap-N5=j,l8hc,5rbb+T!8[*r?uQ*7l/)*;^cU*r@&Y+T!>]
,5rhd,lT+h-N5Cl./k[p.fM!u/cIC%0E*[)1&`s-1]B612?#N52uYf93W;):48_2@4Sq;:54q-k5b1/k
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO%mRofr48q`Xg=q`Fd<r]0s;q`"L4r\a[3r\OO/r\=C*r\"1%r[e%!!%J"!.fLmr
./kUn-N5=j,lT%c,5rb_+T!8X*r$c9*;(?L*r@&Y+T!>],5rhd,lT+h-N5Cl./k[p.fLst/H.7#0)dO'
0`Eg+1B'*,2?#N52uYf93Vtl:48V/;4nq535O^ph5hJ?p5PRG>4o7A=48q;?3W;#82uY`72?#H31]B0/
1&`j*0)dI%/H.1!.fLmr./kUn-N5=j,lT%c,5rb_+T!8X*r$c9*;(?L*r@&Y+T!>],5rhd,lT+h-N5Cl
./k[p.fLst/H.7#0)dO'0`Eg+1B'*,2?#N52uYf93Vtl:48V/;4nq535Oh!i5lO%A5PRG>4o7A=48q;?
3W;#;2u>N12#]<11&`m+0E*U'/cI=#/,h$t.K1ap-iPIl-2o1h,Q8na+oEG_+T<JX*r$c9*;(?L*r[8Y
+T!>Z,Q8tf-2o7j-iPOn.K1gr/,h+!/c.4#0`Ej,1]B612?#N22uYf93W;):48V/;4nq535Kc<C5cd6D
5PRG>4o7A=48q8@3<;-#r]'d6r\ja5r\XU1r\FI-r\+7'r[n+#r[[str[Igpr[7[lr[%OhrZh:arZV.]
q]G\Vp`8B7oc<oNq]Ge[q]Yq_rZhCfr[%Ojr[7[nr[Igrr[[t!r[n+%r\+7)r\=C-r\OF/r\ja7r]'m;
q`=^<q`FmB4oIP=54Uph5b1/k5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%mRniun5q`Xg=q`Fd<r]0j8r\sg7r\a[3r\OO/
r\=C+r\+7'r[e+$!A#f$/,h$t.K1ap-iPIl-2Ste,Pr\a+o<DW+5J"5+8[2X+o<J_,Q8tf-2o7g-iPOn
.K1gr/,h+!/cIC%0`Eg+1B'*/2#]B02Z>Z73;Y`83r;#<4SV)754q/-5_22Q5k7/755RM?4Sq5>3rV/:
3;tl92Z>T52#]<11B'$-0`Ea)0)dI%/H.1!.fLmr./kUn-N5=g,lT%c,5rb_+S[&7*r$iS+T!>Z,5rhd
,lT+h-Mo1i./k[p.fLst/H.7#0)dR(1&`s-1]B612>]<22uYf63W;):48qA;4nq565OLdf5lO%A5PRG;
4o7A@48V)<3W;#82u>K32#]<11B'$-0`Ea)0)dF!/,h!s./PCk-N5=j,l8hc+ori1r?;%\p`J<5p`KAU
q]Yq_q]l(cr[%Ojr[7Rkr[Rmtr[e%#r\"1'r\4=+r\FI/r\XU3r\ja7r]'[5q`F[;pc\L<nit2\JO$;%
niun5q`Xg=q`=d=!BN:@3Vtf82uY`72?#H31]B0/1&`m+0E*U'/cI=#/,h$t.K1ap-iPIl-2Ste,Pr\a
+o<DW+5J"5+8[2X+o<J_,Q8tf-2o7g-iPOn.K1gr/,h+!/cIC%0`Eg+1B'*/2#]B02Z>Z73;Y`83r;#<
4T%A@4nq565Cl(g5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOfg,*mpceI9r]L'>q`=^:r]'m9q_nF2r\XU1r\F@)r\+7'
!%e4'/cI9t.fLjn-iPIl-2Ste,Pr\^+o<DN+8?oJ+8?uU+oW\_,Q8tc-2o7j-iPOn.K1gr/,h+!/cIC%
0E*[)1&`s-1]B612?#N52uYf63W;):48V/84nq565OC^e5hJ?m5PRG;4oRS@48V)<3W;#;2u>N42?#H3
1]B0,0`Ea)0)dI%/,Lgq./PCk-N5=g,lT%c,5WP\+R^EI*qCEJ+T!>],5WVa,l8ne-N5Cl./k[p.fLst
/H.7#0)dO'0`Eg+1B'*/2#]B32Z>Z73;Y`83r;#94SV)754q/.5_23"5k7/755RM?4Sq5;3r:o92uY`7
2?#H31]&s,0`*O&/cI=#/,h$t.K1am-iPIl-2o1e,68u4r?D+^q]PGOocEcJocX5Wq]c"aq]u.er[.Ul
r[@Xmq^_Xsq_%k$r\=:*r\XL0r\ja7r]'d8r]9p<r]Ks=pce75a?Y;AX?c>@pceI9r]L'>!':$=r]0s;
r\s^4r\a[3r\OO/q_8"&r\"1%r[[jqr[@Xkr[.Ujq]u.cq]bn\q]P>Lp`AuJp`TGWrZ_4arZq@er[.Ul
r[@apr[Rmtr[e%#r\"1'r\4=+r\FI/r\XU3r\ja7r]'d8r]9p<q`Od>rB9p>ofn!mRQuEhJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5h83n5P75;4o7A=48q;<3W;#82uY`72?#H31]B0/1&`m+0*!U*/h[,Tr[e%!r[Rdor[@anr[.Lg
rZq@cp`fJVjrjFBq]bn^q]u.er[.Lir[@apr[Rmtr[e%#r\"1'r\4=+q_J.,r\XU3r\ja7r]'d8r]9p<
q`OX:pce75m6H4feNidlofi79q`Oa;r]9p:r]'d6r\ja5r\XU1r\FI-r\4=)r\"1%r[e%!r[Rdor[@an
r[.LgrZq@cp`fJVjrjFBq]bn^q]u.er[.Lir[@apr[Rmtr[e%#r\"1'r\4=+q_J.,r\XU3r\ja7r]'d8
r]9p<q`OX:pce75mQc=gq`sg=ofi79q`Oa;r]9p:r]'m9q_n=.r\OF+r\4=)r\"1%r[e%!r[Rmrr[@Xk
r[.Ujr$27fq]kt^oc`QBp`]DVq]l(cq^)4gr[7Rkr[Igrr[[t!r[n+%r\+7)r\=C-r\OO1r\aR2r\sg9
r]0j:q`F[;pc\C9nit2\JO$2"ofr+5q`Xg=rAt$A48q;<3W;#82uY`72?#H31]B0/1&`m+0E*U'/cI=#
/,h$q.K1ap-iPIi-2o1e,PWJX+m'pB+o<J\,Prbc-2o7g-iPOn.K1gr/,h+!/cIC%0E*[)1&Ea*1]B61
2?#N52uYf63W;):48V/94TIY?54Uph5ajrh5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%RIpcnO;of`::q`F[9r]0j8r\sg7
r\a[3r\OO/r\=@*!AH5,0E*U'/cI<u/,h$t.K1am-iPIf-2o1_,OZiF,Prb`-2o7g-iPOk.K1gr/,h+!
/c.1"0E*[)1&`s-1]B612>]<22uYf63W;):48V/;4nq535Nb:_5gM^j5PRG84oRS@48V)<3Vtf82uY`7
2?#H31]B0/1&`m+0`Ea)0)dI%/Ggss.fLmr./PCk-MSnd,kWDN,4?cR,l8ne-Mo1i./PIm.fLst/H.6u
0)dO'0`Eg+1B'*/2#]B02Z>Z73;Y`83r;#94Sq;:54Ur%5_22q5kRA:54q)<4Sq5;3rV/=3;YZ32?#H3
1]B0/1&`m(0Dd@#/H.0s.f1Xn-i>:k-MSnd,kWDN,4?cR,l8ne-Mo1i./k[m.fLst/H.7#0)dO$0`Eg+
1B'*/2#]B32Z>Z43;Y`83rV594Sq;:54UqT5_21q5kmS=54q)<49.J@48V)<3Vtf82uY`72?#H31]B0/
1&E[(0E*U'/cI<u/,h$t.K1am-iPIf-2o1_,OZiF,Prb`-2o7g-iPOk.K1gr/,h+!/c.1"0E*[)1&`s-
1]B612>]<22uYf63W;):48V/;4o@MB54Uph5a4Nb5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%RIofr+5q`Xg=q`Fd<q`4X8
r\s^4r\a[3r\OO/r@n=-1&`m+0E*U'/cI=#/,h$q.K1am-i57f-1rPG,PWP]-2T%d-iPOn.JkUo/,h+!
/cIC"0E*[)1&`s-1]'$.2?#N52uYf63Vtl:48V/84nq535Nb:_5gM^g5P75;4o7A=48q;<3W;#;2u>N4
2?#H31]B0/1&`p,0`Ea)0)dI%/H.1!.f1[o./PCh-Mo+^,j$?H,l8nb-Mo1i./k[m.fLst/H.7#0)I=$
0`Eg+1B'*,2#]B32Z>Z73;Y`53rV5<4SV)754Ur%5_22q5k7/7557;<4T7G>3rV/:3;tl92Z#B22#]<1
1B'$-0`Ea&0)dI%/H.1!.f1[o./YFm-i57f-1rPM,Q8tf,PWP]-2T%d-iPOn.K1go/,h+!/cIC%0DdI&
1&`s-1]B6.2?#N52uYf63W;):48V/;4nq505Jf[:5bgU;5P75;4oIJD4?WL&r]9p:r]'m9q_nF2r\XU1
r\F@*r\4=)r\"1%r[e%!r[Rdor[@Xkq^21dod&ZEpa#__q^21fr[@apq^VRqr[e%#r\"($r\4=+r\FI/
q_\:0r\ja7r]'d8q`=^<q`OX:r'('Cniq[jPX'dbJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5gVde5PRG;4o7A=48q;<3W;#8
2uY`72?#H01B9021,Ah`r\44&r\"1%r[dpsr[Rdoq^D=hod8fIpa5kcq^D=jq^VRqr[e%#q_%k$r\4=+
r\F@,r\XL0r\ja7r]'d8q`=^<pcSF:ofi%5j?S8]cTq%cpceI9q`Oa;r]9p:r]'d6r\ja5r\XL.r\FI-
r\44&r\"1%r[dpsr[Rdoq^D=hod8fIpa5kcq^D=jq^VRqr[e%#q_%k$r\4=+r\F@,r\XL0r\ja7r]'d8
q`=^<pcSF:ofi%5jZnA^og&17ofi.6q`Oa;r]9p:r]'m9q_nF2r\XU1q_J.*r\44&q^qduq^_Xqr$_Up
q^D=hpa5,Lod9P`q^D=jr[Rdqr[e%#r\"($r\4=+r\F@,r\XU3q_nF4r]'m;pcAC9q`OX:pce75^Hd?8
UHnB7pceI9!'L0Aq`Fd<q`4X8q`"L4r\a[3q_S4,r\=C+q_.q$r[n+#q^_Xqq^MCjq^;%`jsBdLq^;7h
q^MClr[[t!r[n""r\+7)r\=C-q_S4.q_e@2r\sg9q`4O7r]Bm;q`Xa=rBBm=JO#>_JO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_22F5kRA7557;<4Sq5;3rV/:3;tl62Z>T51]T?01]B0/1&`m(0E*U$/cI<u/,Lgk.JP=U-hSnb.JkUl
/,h*s/cIC%0DdI&1&Ea*1]'$.2?#N22uYf63W;)748qA84nq535NG(\5g2Ld5P7584o7A=48V)<3Vtf8
2u>N42?#H01]B0/1&`m(0E*U$/cI<u/,Lgk.JP=U-hSnb.JkUl/,h*s/cIC%0DdI&1&Ea*1]'$.2?#N2
2uYf63W;)748qA84nq535NP.]5k7255P7584o7A=48V)<3Vtf82uY`42?#H01]&p+0`*O&0)I7"/Gq!u
/,h$n.J5+U-hSn_.JkUl/,h+!/c.1"0DdI&1&`s-1]'$+2?#N52u>T33W;)748qA84nq535JKI75bLC8
5P75:4TR]/q`Oa;q`=^:q`+R6q_nF2r\XL.r\FI-r\44&r\"("r[dpsq^V@ipaGASodK\dq^VInr[dpu
r\"1'q_8"(q_J.,q_\:0r\jX4r]'d8r]9g9r]Kj:q*"dBniq[jO[+I_JO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5g;R_5PRG;
4o7A=48q;<3Vtf82u>N42#oH61c51fq_J.*q_8"&q_%k"q^hUpq^V7fkpZ3Rq^VInq^hUrr\"($r\4=+
r\F@,r\XL0r\jX4r]'d8q`=U9q`Oa=ofhh/j?S8]bWtV]pceI9q`Oa;r]9p:q`+R6q_nF2r\XU1q_J.*
q_8"&q_%k"q^hUpq^V7fkpZ3Rq^VInq^hUrr\"($r\4=+r\F@,r\XL0r\jX4r]'d8q`=U9q`Oa=ofhh/
jZnA^nj)Y.pceI9q`Oj>q`=^:pc/73q_n=.r\OF,r\=:(r\+.$r[n%!!%e+"paYqckpZ<UpaZ.kq^hUr
r\"1'q_8"(r\F@,r\XL0r\jX4r]'d8r]9p<pcSO=nilM,^Hd?8TKqs1pceX>r&sp>q`Fd<q`4O5r\s^4
r\a[3r\OF,r\=:(r\+.$r[n!uq^_OnodT,RodTbfq^_Opq^qe"q_.q&r\=C-q_S4.q_e@2q`"L6q`4O7
q`F[;q`XU9!C&g=5Cl(^5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOa$B;^ofi.6q`Oa;q`=U7r]'d6r\aa6!Aub32#B*.
1A`g*0`*O#0)I6q/GLa[.eP=h/Gh$r0)I=!0`Eg(1B'*,2#]B02Z>Z43;Y`83r;#64SV)754Uqp5_22?
5kRA7557;<4Sq5;3r:r:3;YZ62Z>T22#B*.1A`g*0`*O#0)I6q/GLa[.eP=h/Gh$r0)I=!0`Eg(1B'*,
2#]B02Z>Z43;Y`83r;#64SV)754Uqq5_22e5kRA:557;94Sq5>3qt`73;YZ62Z>T22#B*.1A`g*0`*O$
/c[O'/bL[i/*SPV/,Lmp/c.0t0DdI&1&`s*1]B6.2?#N22u>T63Vtl748V/84nV#05Ij%15ajt25P72?
4o%8<4Sq5;3r:r:3;YZ62Z>T22#B*.1A`g*0`*O#0)I6q/GLa[.eP=h/Gh$r0)I=!0`Eg(1B'*,2#]B0
2Z>Z43;Y`83r;#64SV)755[Y>5Cl(X5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOa$B2[pce73r]L'>q`=L4r]'j8!B2t:
2Z#B/2#]<.1A`g'0`*Nu0%V]M0)I=!0`*U%1A`m,2#B0-2Z>Z43;Y`83qtf64S:l454Uqm5_22?5k7/7
54Ul94Sq5;3qt`73;tl92uY`42>]601]&s)1&E[%0DI0O/bgsq0DdI#1&Ea'1]B6.2>]<22u>T33W;)7
48V/54nq535MSMT5jUc,5PRG54oRS@48V)93Vtf82u>N12>]601]B0)1&N^*0`*O#0%;KJ0)I=!0`*U%
1A`m,2#B0-2Z>Z43;Y`83r;#64S:l454UqH5_21h5k7/74odb;4oRS@48V)63W;#82uY`42>]601]&s)
1&E[%0DI0O/bgsq0DdI#1&Ea'1]B6.2>]<22u>T33W;)748V/54nq5:5PdTq5_q[V5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO%7@niu\/pc\L:q`F[9q`4O5!&sg7r\jX2q_\:.q_J%'pb;Irmk4Aemk4Agq_7n%q_J.,q_\1-q_nF4
q`+I5q`=U9q`OX:ofhh/gH^<T`^')Znilh3q`Oa;q`=U7q`+I3r\jX2q_\:.q_J%'pb;Irmk4Aemk4Ag
q_7n%q_J.,q_\1-q_nF4q`+I5q`=U9q`OX:ofhh/gd$EUlp1,+nilh3q`Oa;q`=U7q`+I3r\jX2r\XL.
q_J%'!AH5(0`*Nl0(gge0(gmp0`*U(1A`m)2#B0-2Z>Z43;Y`53r;#94Sq;454:_E5_21h5k7/655[V>
4o7A=48V)93Vtf52uY`42>]601]&s)1&*Ht0CLOg/ak=e0DdI#1&Ea*1]'$+2>]<22u>T33Vtl748V/8
4nV#45PdTq5_q[V5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO%.=mm$J/pc\C7q`F[9q`+X9r&FR4r\jX2q_\((q_Iq$oe>M]
pb;ItpbM_&q_\1-q_nF4q`+I5q`=L6pcS=7pce75eNe[N_a*ZTofi.6pcSF8q`=U7q`+I3r\jX2q_\((
q_Iq$oe>M]pb;ItpbM_&q_\1-q_nF4q`+I5q`=L6pcS=7pce75ej+dOks4]%pce@6pcSF8q`=^:q`+I3
q_n=/q_\1+r%e4+pbDFqlnA>lr\+%#pbDY$q_S"(r\aI/r\s^6q`4O7pcJ@8pc\:6nis?DJO#Pemm$b7
q*+R:pcSF8q`=U7q`+I3r\jX2q_\((q_Iq$oe>M]pb;ItpbM_&q_\1-q_nF4q`+I5q`=L6pcS=7pce:6
!'c$"Jj=lPJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5e]MS5P7554o7A:48V&=3W(o73;YZ02Z#B/2"`Zt1?L=a1AE[#2#B0-
2Z#H13;>N53qtf64SV)154:_d5_2265k7/454q)94SV#83r:r73;YZ02Z#B/2"`Zt1?L=a1AE[#2#B0-
2Z#H13;>N53qtf64SV)154:_e5_22\5k7/454q)94SV#;3qt`43;YZ32Y]0-1]TB*1\``f1%I*p1\`g+
2>B*,2u>T33Vtl448V/84n:f*5HmD(5`n>&56*n@54q)94SV#83r:r73;YZ02Z#B/2"`Zt1?L=a1AE[#
2#B0-2Z#H13;>N53qtf64SV)154Cc:5Cl(O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO^-M6RmlpM0pcSF8rAjs?3r:r7
3;>H02Y]0,2"EH_1A*Hr2#B0*2Z#H13;Y`23r;#64SV)453tMa5_2265k7/.557;94Sq5>3rV2;3Vtf2
2u>N.2>]6$1ZL7`1\EU%2>B*,2u>T33VYZ448:r54nV#*5Lr)N5iY-#5Oq#54o7A@48qA>48V)93Vtf2
2u>N/2#oN22"EH_1A*Hr2#B0*2Z#H13;Y`23r;#94SV)153tM<5_21_5k7,>54Cc24nq/:48V)93Vtf2
2u>N.2>]6$1ZL7`1\EU%2>B*,2u>T33VYZ448:r54nV#+56*p!5_;7P5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO$h4lp(8/
of`(4qE"^>48V)63Vtf22u#<(2:OJU2>]<,2u#B03VYZ448:r24nV#*5LMfJ5e95I5PRG84nq/:48q>=
3qt`43;>H-2YArW2"`a'2Y]6+3;Y`23r;#64S:l153tM_5_22Y5jpr154q)64SV#83r:r73;#6.2Z5Q/
2:48R2>]<,2u>T03VYZ448:r24nV#*5HR2%5`S,%5P[P=54q)64SV#83qt`43;>H-2YArW2"`a'2Y]6+
3;Y`23r;#64S:l153tK75X9lcJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5d`lJ5OUf24nq,>48Cu53qt`13;>H$2Wcmc
2Y]6+3;>N23qYT34S:l154:_X5_22-5k7/.557;94SV#53qt`13;>H$2Wcmc2Y]6+3;>N23qYT34S:l1
54:_Y5_22S5k7/154q)64SV#83qt`.2utrsrAX1'ju)Tcq`"L6r\s^6pc8+1q`Fd>r]C!>of_t3mm!U5
JO##VqEOd?mlpM0pcS=5pcA11pc/%-ml';cml'r"pc/%/q`=C3q`OO7ofhh/p-=0oJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5d`lA5PRG;4nh&>4?W9uq`=C1pc.q*e2I(\of2_,pcA:6ofW"4nilD)aZtDBZp<k?pceI9pcSO<
ofN%3of;e,of(AYpc%k*pc8+1q`FI5pc\13lp&WXJO%pSlp(/,pc\:4ofN%3of;q0rAaI/f/E:\of2_,
pcA:6ofW"4nilD)Ud0JrLd:f$n3?\3pc\:4ofN%3of;e,of(AYpc%k*pc8+1q`FI5pc\13lp(2/JO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_22+5jU`(5578@4SCo447tZ-3V>Ai2t&a$3V>H+47t`24mtT*5Joa;5d<T@5OUf2
4nUr447tZ-3V>Ai2t&a$3V>H+47t`24mtT*5K#g<5hA9f5Oq#24nUr447tZ43W1u/38cad3;#<)3qtf0
4S:l.54:_-5_21S5lEq:5OUf24nUr447tZ-3V>Ai2t&a$3V>H+47t`24mtT*5O^ph5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO$2"lp(8/pHA=8pcS+/ofBrMofDY*pcS=7mlp)&^d*H9W'K]6pceI9pc\C7niQM*_E%9MniQV/
pc\(0lp&<OJO%LGmm$J/mlgG.niQb1rAqeUniHP-r]L0Aq`OO7nil;&Rm;NiJO',ulp(8/mlgG.niQM*
_E%9MniQV/pc\(0lp'l&JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_22"5jU`(4odbA4mtN+47>5a3V#6%47t`,4mtT$
5JTO85c?s75OUf24mtN+47>5a3V#6%47t`,4mtT$5J]U95gDX]5OUf24mtN,3rhA23ncUb3q>B*4S:l+
53Y;$5_21O5l<n65OUf24mtN+47>5a3V#6%47t`,4mtT$5OC^e5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO#tqks+o+
q*+@4ofV\)e2m%[pcS".mlou#\j1g3U-Rs-pceI:nicY.mlT#[mlU;,mlg,'ks)dFJO%:Alp'r&mlg>+
!BWC544cOa48qAA48:r,4mtT!5F"Kb5_22o5j:N%54Ul04RYA]3q#0*4RYH%53Y;p5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cORR$+%!'^*?krnJte3!+]mlg,'ks)F<JO#Vgks+i)krnJte3!+]mlg,'ks)I=JO$t8lp(&)
krf&04RkPf48qAA47YN#4mtT!5E%jY5_22f5j:N+53Y6!4OcI]4RYH%53Y;g5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cORR$+%!']R0mleNMmlfesks)F<JO#Vgks+;omleNMmlfesks)I=JO$t8ks+Dro0*%8^HCsJks"5o
N'MqZJO&Tfks+;omleNMmlfesks+#iJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21_5k.)75NY/64m"rm5H$hu5`e8%
5PRJ*5-R3453Y;25_22/5jU_t55[RL4m>/m5D)4P5_22]5j:Mq5-R3453Y;^5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOLd:f$n3?&!b<=uOi'3i!JO"uUq`jO6k!$sOk!%]fTKn&nX[),8m6:A1b<=uOi'2cXqETTsJO%sT
ks+;ob<=uOi'5FNJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21V5l*_.5Ft's5G(2l5_hW%5NY2%52\Yu5_22&5i=m#
5--s(5Cl)r5_21O5heQ^5Ft's5KlBD5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO!C/p%5JfV<5Ee?`5_23"5hA6;
52&5c5_21r5i+a(5JKD95Cl)f5_21O5ghpL5JfV<5JTO85_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOm6Hh!KKt)R
JO&QeP!=XcJO#A`n3<[4JO&*XJO"cO^d+&IYs<k*JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_22f5a"?b5_21O5jUb!
5D;@R5a"D%5GLGo5i4hX5_2295a"@:5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO%OHc9HkFk!4J_JO%LGc9HkF
k<OS`JO&imc9HkF_*EQ:JO#qpc9ILXJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22j5cm8%5ik7^5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOnNa3@JO&<^JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21W5l!Xe5Q3jc5Cl)o5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOPsF_$mQ\6Gf0>!TJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21c5j^f.
5H6p*5DDFS5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO#elks,)0lTW0Ki'-9f
P!FR`JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5c6m35P%)253Y5d4QATn52\Yp
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOVa0T5n36e7krm3Pj#ursk!,>#
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22)5jU`%55[S<4mY;\46\lo4n:f!
5GUPq5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$b2ks+W#o0!(:ofV\)c8tMX
niZA(nil;&W^),#JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5e0/H5P75/4o@G=
4T7GA4S:f,3o)ge3qYT-4RtZ+53Y;35_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cO^Hh-MmlpM0ofN7:3rhAA4Sq553q>;e3:&[&3qYT*4S:l.53Y;<5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cO_EdHPofi.6ofVq0!'Bs:of;\)f/N7[of;e.pcJ.2pc\13ks)UA
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22;5k7/.557;94S:c:3]d4#pc8",
ni,Jbof)G$pc8+1q`Fd>r]C!>of_k0mm"6GJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_22A5jpr154q)64SV#83rD#:3VYT,2u>MY2>B*,2uYf92u>T03Vtl747t`/4nV#*5J0745_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO%CDniuS,q`Xg=ofN%3pc/@73;ki62u#<+
2=`U'1]B6"1[d0q2>]<,2u#B03VYZ448V/54nV#*5JKI75_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO%CDofr+5nick4pcJ@6q`4O5!B2t62u>N12>&fp1\*<l1]B611]'$(2>B*/2u#B-
3W;)748:r24nq505JKI75_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO%UJniu\/
q`XU7q`F[9r]0j8pbr432Z5Q22>]6'1\``W1&Ea$1\`g(2>]</2u>T33VYZ448V/54nV#-5K,m=5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO%^Mniu\/pc\U=pcJ@6q`4O5q`"C1!Au_7
2>]6-1\`a&1%d6V0DI6r1&Ea'1]B6+2>]<22u>T03W;):48:r54nV#-5KH*@5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO%^Mofr+5of`17q`F[9q`4X8pc&(.r\X^52#T9.1]&s)1&EZt
0AnJU0DdHu1&Ea*1]'$+2>]<22u>T33W;)448qA54o7G35KH*@5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO%pSniu\/q`Xg=pcJI9q`4O5q`"L4r\aR0r%e=/q_J.*q_7duq_%ath(8=Q
pb)Fsq_7n%r\FI/pb_t-q_nF4q`+I5q`=^<pcS=7ofhh/c9QqGJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5i"]r5Oq#;4nq/:48V)<3Vtf82u>N42>]601]&p.0eiY_q_8"&q_%Xqq^hUp
h(&(Jq^hUrr\"($r\44(r\F@,r\XL0r\jX4r]'d8r]9p<pcS=7ofhq2c9QqGJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5i"]u5P7584nq/:48q;<3Vtf82uY`72>]6-1]B0/0``s^!&4:'
q_%atq^hUppaY)Kq^V@kq^h^uq_%k$q_8"(q_J.,q_\:0q_n4/r]0j:q`F[;of`19nitDbJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22V5kRA755RM?4Sq5;3r:r42uY`72?#H31]&s,
1&`m)0*![)0)dI"/Ggsp.fLmo./kUn.,?9G./PIj.f1aq/H.6u0).."1&`s-1]B6.2?#N52u>T33W;)=
48:r54nq535LD`I5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO&6\ofr"2q`Xg=
q`F[9r]0j8r\sg7r\a[3q_S4,r\=C+r\+.$!A,l'/cI<u/,h$t.JP=j-ho%]-1rPS-28ha-i5=k.JkUo
/,Lms/cIC%0E*[&1&Ed+2#]B02Z>Z73;Y`83rV594SV)754:_f5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOj$<9%pce@6q`Oa;r]:$=q`+R6r\jX2q_S4,r\=:(r\+.#!A#c%/Ggss
.fLmr./51h-MSn[,kWDT,kWJ\-Mo1i./PIm.fLst/H.6u0)dO'0`Eg+1A`m,2#]B32Z>Z43;tr83r;#<
4S:l454Uqi5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOk!8T(ofi79q`Oa;
q`=^:r]'d6r\ja5r\XL.q_@t$r\"1%r[e%!!@fQ!.f1[i-iPIl-28b_,MaR:,Prb`-2o7j-i5=k.K1gr
/,Lms/c.4#0`Eg+1A`p-2?#N22uYf63W;)=48V/54o7G65M&/O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO&?_ofr48pc\U=q`F[9r]0j8r\sg7r\a[3r\OO/r\=C+r\+7'r[n+#r[[st
r[@jr-ib[m-iPIi-2o1e,Pr\^+ke(9+o!8\,Prbc-2o7j-i5=k.K1gr/,h+!/cIC%0E*[)1&`s-1]B61
2>]<22uYf63W;)=48:r84o7G35MAAR5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO&?_ofr=;pc\L:q`Fd<q`4X8r\sg7q_e@/r\FI-r\4=)r\"1%r[e%!r[Rdo!@K8n-iPIl-2Ste,Pr\^
+o!2?+9!D^+8[2X+oW\\,Q8tf-2o7g-iPOn.K1gr/,h+!/cIC%0E*[)1&`s-1]B612?#N52u>T63W;)7
48qA>4nq535MAAR5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO&Qeofr+5q`X^:
r]C*?q`4O4r\ja5r\XU1r\FI-r\4=)q^q[qr[Rdnr[.^n-3,Cl-2o1h,Pr\a+o<DW+8?o>*V^]Q+8[2X
+oW\_,Q8tf-2o7j-i5=k.JkXp/H.:$0E*[)1&`s-1]B612?#N22uYf93W;):48V/84nq595MAAR5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO#Jcm6BAjJO$(tJO"cOJO"cOJO"cOJO"cOJO&Qeofr48q`Xg=q`Fd<r]0j8r\sg7
r\a[3r\OO/r\=:'r\"1$r[[str[Igpr[7[lrZqRj,QK+e,Q8nd+oWV]+8[,S*VCEI)t+dA*W$oT+9!D[
+oW\b,Q8tf-2o7j-iPOn.K1gr/,h+!/cIF#0`Ej,1]B612?#N52uYf63W;):48qA84o7G65N"eX5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO#Jcm6BAjJO$(tJO"cOJO"cOJO"cOJO"cOJO&QepcnF8q`Xg=r]C!<r]0j8r\s^3
r\OO/r\=C+r\+7'r[n+#r[[str[@anr[.UjrZhLh,6/tc,5rbb+T!8X*r[2Q*9/";*<$oS*;CQO*r[8\
+T!>],5rhd,lT+h-N5Cl./k[p.f1dr0)dO'0`Eg+1B'*/2#]B32Z#K23W;)=48V/84o7G65N"eX5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO$>&eN^u:JO$q7JO"cOJO"cOJO"cOJO"cOJO&Zhofr48q`Xg=q`Fd<r]0s;q`"L4
q_\:.r\=C+r\+.#r[[str[Igpr[7[lq]u.c!?r]f,5rbb+T<J[*r[2W*;CKJ)X/.7)Yb9H*;^cU*r[8\
+T!>Z,Q8tf-2o:k./k[p.fLst/Gh(!0`Eg+1A`p-2?#N52uYf93Vtl44Sq;:54q.u5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cO\No(;l9<lbi'2cXb!:MCJO"cOJO"cOJO"cOJO"cOmm-P1pce[?pcSO;r]9p:r\s^4r\aR/
r\=C+r\+7'r[e%!r[Rmrr[@amr[%OhrZhCdrZM:b+93P]+9!>\*W@&R)uCQK);lA,)>b?I)u^iS*W@,Z
+9!D^+oW\b,Q8tf-2o7j-i5@l/,Lpt0E*[)1&`s*2#]B02uYf93W;):48qA;4nq565N>"[5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO$b2ks+,jcp$\YJO%@CJO"cOJO"cOJO"cOJO"cOJO&ZhpcnO;q`Xp@pcJI9r]0s;r\sg7
r\a[3r\OO/r\=:'r[n+#r[[ssr[@anr[.LfrZh:`!?WB`+8[,Y*W$iU)uCQK)>G'J(]G9E(]G9N(\/FB
)>b?L)uCWP*W$rX+T<P`,5rkb-2o:k./k[p.fM!u/cIC"0`Eg+1]B612?#N52uYf63W;)=48V/84o7G9
5N>"[5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO%:Ai'6-`r&s@/h*1'fJO%[LJO"cOJO"cOJO"cOJO"cOJO&lnofr48
q`Xg=q`Fd<r]0j8r\sg6r\XU1r\FI-r\+7'r[n+"r[Rmrr[@XjrZqIfrZ_=brZM1^!?N9^*r[2Z*;^]S
)Z(EI)"JL3(@i:@)#b?K)#G3M)Z(KQ*<$uX*r[8Y+T<Sa,Q8tf-2o:k./k[m/,h*s0E*[)1B'*/2#]B3
2Z#K53W;):48qA;4nq595N>"[5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO%CDks+;ol93f`j$)foJO&!UJO"cOJO"cO
JO"cOJO"cOJO&lnofr48q`Xg=r]C*?r]0j8r\sg7q_\:-r\=C+r\+7&r[e%!r[Igpr[7[krZqIfq]Yq\
q]5bX*;plV)u^cQ)>b9J(\/@%(&/R>(],'K)>b?O)uCWS*W$rX+T!A^,lT+h-N5Fm.K1gr/,h."0)dR(
1&`s-1]'',2uYf93W;)=48V/84o7G<5N>"[5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO%CDmm$&#lok&)i]QZmk!&?#
JO&!UJO"cOJO"cOJO"cOJO"cOJO&lnofr48q`Xp@q`Fd<r]0s;q`"L3r\XU1r\FI,r\+7'r[e%!r[Rmq
r[7[lq]u.brZV7`rZD+\rZ)"Z)upuX)uCQQ)?(KJ(]+un(&JdD(],'K)>b?O)u^iV*W@,Z+9!D^+oW\b
,lT+h-N5Cl./k[p/,h."0)dO$1&a!.2#]B32Z>Z73;tr;3r;#94Sq;=557A&5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOe3N7_mlp2'l9,#-r]C*Ar]B7)mlg#$mlu@gi]r&[JO"cOJO"cOJO"cOJO"cOog&::pceR<q`Oj>
r]9p:r\s^4r\XL.r\=:'r[n!tr[@anr[.Uiq]l(`rZM1^rZ:qV!?2sX)u^cT)>b9J(]G3C("!`m(&/RD
(],'K)?(QR)u^iS*W@/X+T<Sa,Q8tf-N5Cl./k^q/,h+!0)dO'0`Ej,1]B612>]?33;tr;3rV5<4Sq;=
54Ur&5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOg-G!hmlpD-niZn5r]K[3qE+R8ju`5unicG*lp$%dlTg"dJO"cO
JO"cOJO"cOJO"cOog&::pce[?q`Oa;r]:$=r]'m9r\ja5r\OO/r\=C+r\"1%r[e$ur[Igpr[.UjrZhCd
rZV7`q]>_Vq\oPS)?:]Q)#b?K(AJX>'`JdF'\sGq'_iFB(AepI)#G3M)ZC]T*<$uU+9!G_,5rhd,lT.i
-iPOn.fLst/c.4#1&Ed+2?#N52uYf93W;):48qA;4oRY95NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO%pSlp(/,
nicP+niQP+jZ;ilofW"4losl&JO&NdJO"cOJO"cOJO"cOJO"cOJO&lnpcnX>q`Xg=r]C*?r]0j8r\sg7
r\a[2r\FI-r\+7'r[n+"r[Rmrr[7RhrZh:`rZD+\rZ1tXrYthT!>uaT)?(KM(],!I(%i9g'E/^F'DiL=
(&JdD)#bEP)ZC]T*<$uX*r[8\+T!A^,lT+h-N5Fj.fM!u0)dO'0`Ej,1]B6.2Z>]53W;)=48V/;4o7G9
5NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO&$Vmm$A,of_t1ofMq0o/Z+sloOf$q`OF4nilM,JO&WgJO"cOJO"cO
JO"cOJO"cOJO&uqpcnO;q`Xp@q`Fd<r]0s;r\sg7r\a[3r\OO.r\4=)r[n+#r[Rmqr[7[lrZqIfrZ_=a
rZD+\q],SSrYkbR!>lXR)#G-K(AejD'_N-h')3.5'`/XE(B,-L)#bEM)ZC`R*W@/[+T<P`,Q8tf-2o:h
.K1mt/cIC%0`Eg+1B'-02?#N52uYf93W;):48qA>4nq595NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&6\lp(&)
pc\:4r]Bd6of;V'i]-]nofDt3r]L0Aq`Oa=losl&JO&imJO"cOJO"cOJO"cOJO"cOJO&uqpcnX>q`Xg=
r]C!<q`+R6r\ja4r\OO/r\4=)r\"1$r[[ssr[7[lr[%OgrZ_=brZD+\rZ1kTrYkYN!>cOP(],!I(&J^B
'CQRr&aU/*'DiL@(&f!J(]G9K)?(TP*<%#Y+9!D^,5WYb-Mo4j.fM!u/cIF#1&a!.2#]B32u>T63W;)=
48qA>4nq595NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&6\niu\/of`17ofN%3of;\)q)@Uuni6D)pcA13pcS44
nilV/JO&imJO"cOJO"cOJO"cOJO"cOJO&uqpcnX>q`Xg=r]C!<r]'d6r\a[3r\OO.r\4=)r[n!tr[Igo
r[.Uiq]c"^q]>_VrYthTrYb\Pr"f>LrYGAGrY5,@p_)'gne1g5p_<]Bq\K/IrYYVPrYkbTrZ(nXrZD+^
rZV7crZqIhr[7[nr[Rdrr\"1(r\=C.r\XU3r\ja7r]'m;r]:$?q`Oa=q`ad>ks0ebJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5it?#5P7584nq/:48:l33Vtf/2tf/n2YB$(3;Y`23qtf34Sq;154q-k5kI<m5_21O5_21O5_21O
5_21O5kmVA5PRG>4o7A@48q;?3W;#;2uY`72?#H31]B-.0E*U'/Ggpr./kRm-2o.d+oWS\*W@#W)ZCWO
)#b<P()?lcrY>2BrY+r;a:\(Xq\/i@q\AuErYYVPq]#MSrZ;%\rZM1arZhCfq^;@lr[[t!r\"1'r\4=,
r\OO1r\ja7r]'m;q`=L7r]U$?pcn+1JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22e5jpr154q)94SV#83r:r73;>H-
2YAp.1c4MTpbhh)pc&(0q`4F4q`FR8r]T^6ofn!mpHX9pJO"cOJO"cOJO"cOJO"cOpd"^@pceR<r]L'>
q`4X7q_nF1r\OO/r\44%r[[str[Igor[%OhrZ_4^rZ;%ZrZ(nVq\f8IrY>ML'`]!G'`/R='"JVO')N@>
'`JjH(AepI)#G6N*<$uX*r[8\+oW\b,lT+h-N5Fm.fLst/cIF&0`Eg+1]B612?#N52uYf93W;)=48V/;
4o7G<5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&Qeniu\/pc\C7q`F[9q`4O5q`"C1oelG"rA=:*r\XU1oecP'
pbr".q`+I5q`=U9ofW+7nilh5JO&rpJO"cOJO"cOJO"cOJO"cOJO&uqq`jj>r]U-@r]C*?r]0s;r\sg7
r\a[3r\OO/r\4=(r[n+"q^MLlq]u.brZM1^rZ;%YrYthTrYb\PrYPGI!>Q=L(&epE'D3"/&_[fb&c34<
'DN:@(&f!J(]G9N)?(QR)uCZT+8[5\,Q9"g-N5Fm.K1gr/Gh+"1&a!.2#]B32Z>Z73;tr;3rV5<4Sq;=
557A/5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOlp1,+pce@6q`OX8r]9p:q`+I3q_n=/q_[t%r%dIkq_S"(q_e7/
q`"C3r]0j:pcJ@8q`XL6niq[jrBPp!JO"cOJO"cOJO"cOJO"cOpd"gCpceR<r]L'>r]:$=r]'m9r\ja5
r\OO/r\=C*r[n+#r[Rmqr[7[lrZqIfrZV7`rZD+[rZ(nVrYb\PrYPPLq\9,G'`AaC'DiF8&^(aV&bm"9
'E/^C(&f!G)#bEP)ZC`U*W@,W+T<Sa,lT+h-iPRo.fM!r0)dR(1B'*/2#]E42uYf63Vto;4Sq;=557A/
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOmm-G.pce@6q`Oj>q`=L4r]'d6r\jX2q_\1+q_Iq$r%RFjpbDY$pbVn+
r\aR2q`"C3r]0j:q`FR8r]Tg9niq[j!'l*#JO"cOJO"cOJO"cOJO"cOr]p6CpceR<r]L'>r]:$=r]'m9
r\a[3r\OF+r\+7&r[e$ur[@anr[%OgrZ_=arZD+\rZ(nVrYkYNrYPPLrY>DH!>?.F'DN42&^(aP&cNF?
'DiLC(&f!J(]G9N)?(QR)u^iV*W@/[+T<Sa,Q8tf-N5Fm.K1js/cIC%0`Eg+1B'-02?#N53;Y`83rV5?
4Sq;=557A/5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOmm-G.pceI9q`Oa;q`=^:q`+I3r\jX2r\XC+r\F7'p+QJ#
oe6:ur\+%#q_@k$r\OF.r\aR2r\s^6q`4O7r]Bd8q`XU9ofn!m!'l*#JO"cOJO"cOJO"cOJO"cOr]p6C
pceR<r]L0Ar]:$=q`+R6r\a[3r\OO.r\4=)r[e%!r[Igpr[7[krZhCdrZM1]rZ1tXrYthTrYYMKrYGJJ
rY,AH'E&U>')3'U&FU5.')N@A'`/XB(]G9N)?(TS*<$uX+9!D^+oW_c,lT.i./k[p/,h."0)dR(1&`s-
2#]B32Z>]53W;)=48V/>4o7G<5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&Zhofr+5q`Xg=q`F[9r]0j8r\sg7
q_e7-r\OF,q_A((pb2Fqr@[jsoe-+pq_7n%q_J%)r\XU3q_nF4q`+R8q`=U9q`Oa=ofi%5JNs3#JO"cO
JO"cOJO"cOJO"cOJO'3"pcnO;r]U-@r]C*?r]0s;r\sg7r\a[3r\F@)r\"1$r[[ssr[7[lrZqIerZV7_
rZ;%ZrYthTrYb\PrYPPLrY>;E!>?+H'DN48&\/JD&cNF?'E/^C(&f!J(]G9N)?(QR)u^iV*r[8\+T<Sa
,Q9"g-iPOn.fM!u/cIF&1&`s-2#]B32Z>Z73;tr;3r;#<4Sq;@557A/5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
og&(4ofi79q`Oj>q`=U7r]'m9q_nF2r\XL.r\F@*r\44&r\"("p+-1podf\dq^q[tq_.h#r\=C-r\OF.
r\a[5q`"L6r]0j:q`F[;q`XU9niqjoJO"cOJO"cOJO"cOJO"cOJO'3"pcnO;r]U6Cq`Fd<r]0s;r\sg7
r\XU1r\FI,r\+7&r[[str[@amr[%OgrZ_=brZD+[rZ(nVrYkbRrYPGIrY>DHr"B&Dp_*?6\Ie<DrY"u>
rY5>HrYGAIrYYMNrZ(nXrZ;%]rZ_=dr[%Ojr[7[pr[e%#r\+.'r\OO1r\a[6r]'m;r]9p<r]L'@r]^*A
lp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5kRD85PRG;4o7A=48V)<3Vtf82uY`42?#H31]B0,1&`m+0DdC$/bgmm
.f_*j.ekOk/Gh$r0)dO$0`Eg+1B'*/2#B002Z>Z43;tr83rV5<4SV)754Upm5_21O5_21O5_21O5_21O
5_23"5kmS@55RMB4T7G>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq-N5=j,Q8kc+T<J^*W@&X)uCNP
(],!I(&epF'*&^C'(ljF&FpG4')N@>'`JjH(B,-L)#bEP)ZC`U*W@,Z+T<P`,5rke-N5Cl.fLst/H.="
1&a!.2#]B32u>T63Vto;4Sq;=55RS25_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOog&17pceR<pcSF8r]:$=q`+R6
r\ja5r\XL.r\FI-r\4=)r\"("r[dpsq^VCjr@.Cfq^M:iq^_Xsr[n""r\+7)r\=C-q_S4.r\a[5r\s^6
r]0j:r]C!>pc\C9ofn0rJO"cOJO"cOJO"cOJO"cOJO'3"pcnX>q`Xp@r]C!<r]0j7r\a[3r\OO/r\4=)
r[n!sr[7[lr[%OgrZV7`rZ:qVrYkbRrYYVNrYGJJq\9#C!>6%D')3'=&GQk7')iRA'`JjH(B,-L)#bEP
)ZC`R*W@2\+oW\b,lT.i-iPRo/,h+!0)dR(1&a!.2#]B32Z#K53W;)=48qA>4o7G?5O:Xd5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO&uqofr48pc\L:r]C!<r]0s;r\s^4r\a[3r\OO/r\=C+r\+7'r[n!ur[[stq^MCjq^2Ck
-LiGX-i5=k.JkUo/,Lms/cIC%0E*[)1&`s-1]B612?#N22uYf93Vtl:48V/;4nV#65DDFS5_21O5_21O
5_21O5_21O5lO%D5PmYA4oRSC48V)<3;tl92Z>T52#]<11&`j*0)dF$.fLmr-iPFk,lT"e+T<J^*r[/Y
)u^cT)?(KP(]G3L(&epE'*/^Yr=\l;WY"q;q\&c>rY5>Hq\K/Jq\fAPrZ(nXrZD+_rZ_=er[.Ulr[Igs
r[e%$q_8")r\XU3r\ja7r]'m;r]:$?r]L'@q`amAlp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5kmV>5PRG;4o7A=
48q;<3W;#;2uY`72?#H31]B0/1&`m+0E*U$/cI=#/,h$t.JkOj-i#+f-MSn[-Mo1i./PIm.fLst/H.6u
0)dO'0`Eg+1B'*/2#]B32Z>Z73;Y`83r;#94T7M:557?s5_21O5_21O5_21O5_21O5_23"5kmS@55m_B
4T7G>3rV,<2uY`72>]3/1&`j*0)dF$.fLmr-iPFk,lT"e+T<J^*W@&X)u^cQ)#b?N(B,'J'`/OE&eb-U
p^sM;p_!B9q\/rCrY>;GrYYMMrYthVrZ1t[q]Yqar[%Ojr[@Xor\"1'r\4=,r\XU3r\ja7r]'m;r]:$?
r]L'@q`amAlp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5kmV>5PRG;4oRS@48V)<3W;#;2uY`72?#H31]B0/1&`m+
0E*U'/cI=#/,h$q.K1ap-i57f-2]%e,lT%f,lT%],lT+e-N5Ci./k[p.fLst/H.7#0)dO'0`Eg+1B'*/
2#B312uYf93Vtl:48V/;4nq565D_XV5_21O5_21O5_21O5_21O5lO%D5PmYD4o7A@48q;?3W;#;2uY`7
2>]3/1&`j*0)dF$.fLmr-iPFk,lT"e+T<J^*W@&X)u^cT)#b?N(AejG'`/OE&eb-Uq[o_;ob%'6rY,/C
rY>DJrYPPNrYb\SrZ(nXrZD+^rZV7cr[%Ojr[@Xor[n+&r\4=,q_\:1r\sg9r]0s=r]C*Aq`X^<r]fa7
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_22q5kmS@557;<4T7G>3rV/=3;tl92Z>T52#]<11B'$-0`Ea)/cI=#/,h$t
.JkOm-iPIl-2Stb,Q&ba,5WPS,5rha,lT+h-Mo1i./k[p/,h+!/cIC%0E*[)1&`s-1]B612?#N52uYf9
3Vtl:48V/>4nV#65D_XV5_21O5_21O5_21O5_21O5lO%D5PmYD4o7A@48q;?3W;#;2uY`72?#E21B'$-
0E*U'/H.-u.K1^l,lStd+T<J^*W$fT)ZCTQ(]G3I(&epH'DrIC')3':&G6Y4')N@A'`JjH(B,-L)#bEP
)ZC`U*W@,Z+T<P`,Q9"g-N5Fm.fLst/cIF&0`Ej,1]B612Z>Z73;tr;3rV5?4Sq;:55me55_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOpd"U=q`ad<q`Oj>r]9p:r]'m9r\ja5r\XU1r\FI,r\+7'r[n+#r[[jpr[@anr[.Uj
q]u.cq]bq]lQQ-LrZh:cr[%Ojr[7[nr[Igrr[[t!r[n+%r\+7*r\FI/r\XU3r\ja7q`+R8r]9p<q`Oj@
pceI;M*QVWJO"cOJO"cOJO"cOJO"cOr]p6Cq`b!Bq`Oj>r]:$=r]'m9r\ja5r\OO/r\=C*r\"1$r[Rmr
r[7[jrZhCcq]GeXq]#MPrYYVNrYGAGrY5>Fr"8uBp^s;5p_!B9q\/rCrY>DJrYPPNrYb\RrZ(nXrZ;%]
rZV7cr[%Ojr[@aqr[[t"r\+7)r\FI/r\XU3r\sg9r]0s=r]C!>q`Xg?r]fa7JO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_23"5k7/:55RM?4Sq5>3rV/=3;tl92Z>T52#]<11B'$-0E*U'/cI=#/,h$t./kUn-N5=j,l8hc,5WP\
+9<Q+mN;<Kq]Yq_rZhCfr[%Fgr[7[nr[Rmtr[e%#r\"1'r\=C-r\OO1r\aR3r]'m;q`=^<q`Oa=q`a[;
N'MqZJO"cOJO"cOJO"cOJO"cOr]p6Cq`b!Bq`Oj>r]:$=r]'m9r\ja4r\OO/r\4=)r\"1#r[Rmrr[7[j
rZhCcq]GeXq]#MPrYYVNrYGAGq\/l?!##&=U_*;5q\&c>rY5>HrYGJLrYYVPrYkYRrZ;%]rZV7cr[%Oj
r[@aqr[[t"r\+7)r\FI/r\XU3r\sg9r]0s=r]C*Apc\L<r]fa7JO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_23"5kRA:
55m_B4Sq5>3rV/=3;tl92Z>T52#]<11B'$-0E*U'/cI=#.fLmr./kUn-N5=j,lT%f,5rbb+T!8V*WR8P
*V^]T+8[2[+oW\b,Q8tf-2o7j-iPOn.K1js/H.7#0E*[)1&`s-1]B612Z>Z43;tr;3r;#<4Sq;:557@$
5_21O5_21O5_21O5_21O5_23"5kmS@55m_B4T7GA3rV/=3;tl92Z>Q41]B0/0`Ea)0)dC#.fLmr-iPCj
,Q8k`+9!;[)u^cT)?(KP(]G3I(&J[B&c`R>&Yp!5&c34<'E/^F(&f!J(]G9N)?(QO*<%#Y+T<P`,Q9"g
-N5Fm.fLst/cIF&0`Ej,1]B612?#Q63;tr;3rV5<4Sq;=55me55_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOr]p-@
pce[?q`Oj>q`=^:r]'m9r\ja5r\XU1r\=C+r\+7&r[e%!q^MLmr[.UjrZqIfrZ_=bq]Pk[q]>YUr>kPN
q]5PTrZD"[rZV7brZhCfr[%Fhr[@aqr[[t!r\"1'r\4=,r\OO1r\a[5r\sg9r]0s=q`F[;r]Tp<q`g$)
JO"cOJO"cOJO"cOJO"cOJO'3"pcnX>r]U-@r]C*?r]0s;r\sg7r\XU1r\FI,r\+7'r[[str[IgorZqIf
rZV.\rZ1tWrYkbRrYYVNrYGAGq\/l?!##&=U_*;5q\&c>rY5>HrYGJLrYYVPrYkYRrZ;%]rZV7cr[%Oj
r[@aqr[[t"r\+7)r\FI/r\XU4r\sg9r]0s=r]C!>q`Xg?r]fa7JO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_23"5kmS=
55RM?4T7G>3rV/=3;tl92Z>Q41]B0/0`Ea)0)dF$/,h$t./kUn-N5=j,lT%c+oWV`+9!>Y*VgZT*:FjD
*;^cU*r[8\+T<P`,5rhd,lT+h-N5Fm.K1gr/,h."0)dO'1&`s-1]B922Z>Z43;tr;3rV5<4T7M:557@'
5_21O5_21O5_21O5_21O5_23"5kmS@55m_B4T7GA3rV/=3;tl92Z>Q41]B0/0`Ea)0)dF$.fLmr-iPCj
,Q8k`+9!;X)u^`S)#b?N(AejD'DrIC')3'7&GQk7')N@A'`JjH(B,-L)#bEP)Z(NR*r[;]+oW_c-2o7j
./k^q/,h."0E*[)1B'*/2#]E42uYf93W;)=48V/;4o7GB5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO'3"pcnO;
q`Xp@q`Fd<r]0s;r\sg7r\a[3r\OO.r\4=)r[n+#r[Rmrr[@amr[%OhrZhCcrZM1^rZ:qWq],JP!?)mE
)Yb9N*<$uX*r[8\+T<P`,5rhd,lT+h-N5Fm.K1gr/H.7#0)dR(1&`s-2#]B32Z>Z73;tr83rV5?4Sq;:
557@'5_21O5_21O5_21O5_21O5_23"5kmS@55m_B4T7GA3rV/=3;tl92Z>T51]B0/1&`j*0)dF$.fLmr
-iPCj,Q8kc+T<J^*W@&X)u^`S)#b?N(AejG'`JdD&c`R>&Yp!5&c34?'DiLC(&f!J(]G9N)?(QR*<$uX
*r[;]+oW_c-2o7j./k^q/,h."0E*[)1B'*/2#]E42uYf93W;)=48V/;4o7GB5O:Xd5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO'3"pcnX>q`Xg=r]C*?q`4X8r\sg7r\a[3r\FI-r\+7'r[n+"r[Rmrr[7[lr[%OgrZ_=brZM1^
rZ;%Zq],SSq\fJQ)=AC>)ZC]Q*<$uX*r[8\+T<P`,5rhd-2o7j-iPRo.fLst/cIC%0`Eg+1B'*/2?#N5
2uYf93Vtl:48qA;4o7G<5EA'\5_21O5_21O5_21O5_21O5lO%D5PmYD4o7A@48q;?3W;#;2uY`72?#E2
1B'$-0E*U'/H.-u.K1^l,lT"e+T<J^*W@&X)u^cT)#b?N(AejG'`JdD&c`R>&Z635&c34?'DiLC(&f!J
(]G9N)?(QR*<$uX*r[;]+oW_c-2o7j./k^q/,h."0E*[)1B'*/2#]E42uYf93W;)=48qA>4nq5?5O:Xd
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO'3"pcnX>q`Xg=r]C*?r]0s;r\sg7r\a[3r\OO/r\4=)r[n+#r[Rmrr[@am
r[%OgrZ_=brZM1^rZ;%ZrZ(eSrYkYO!>l[A)#G3J)ZC]T*<$uX*r[8\+T<P`,Q8tf-2o:k./k[p/,h+!
/cIF&0`Ej,1]B612>]?33;Yc948V/;4o7G<5EA'\5_21O5_21O5_21O5_21O5lO%D5PmYD4o7A@48q;?
3W;#;2uY`72>]3/1&`j*0)dF$.fLmr-iPFk,lT"e+T<J^*W@&X)u^cT)#b?N(AejG'`/OE&eb-Uq[o_;
p_!B9q\/i@rY>DJrYPPNrYb\SrZ(nXrZD+^rZV7cr[%Ojr[@Xor\"1'r\4=,q_\:1r\sg9r]0s=r]C*A
q`X^<r]fa7JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_23"5l3e@55RMB4Sq5>3rV/=3;tl92Z>T51]B0/1&`m+0)dI%
/,h!s./kUn-2o1h,Q8kc+T<J^*W@&U)u^cT)>b9K([Dn:)#G3M)ZC]T*<$uX*r[8\+T<Sa,Q8tf-2o:k
./k^q/,h+!0)dO'1&a!.2#]B32Z>Z73;tr;3r;#<4Sq;=557@'5_21O5_21O5_21O5_21O5_23"5kmS@
55m_B4T7G>3rV,<2uY`72?#H31]B-.0E*U'/H.-u.K1^o-2o1h,5WM^*r[/Y)u^cT)?(KP(]G3L(&epE
'*/^Yr=\u>V\&V8q\&c>rY5>Hq\K/JrYb\RrYthVrZ1t[rZV7brZqIhr[.Umr[[t!r\"1(r\=C.r\XU3
r\ja7r]'m;r]:$?r]L'@q`amAlp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5lO%G5PRG>4oRS@48q;<3;tl92?#H3
1]B0/1&`j*0)dF$/,h!s./kRm,lT%f,5r_a+9!>\*W@&X)uCQQ)?(KK(B>9B(AJ^F)#G3J)u^iV*W@,Z
+9!G_,5rhd-2o7j./k[p.fM!u0)dO'1&`s-1]B922Z>Z73;tr83rV5<4T7M@557@'5_21O5_21O5_21O
5_21O5_23"5kmS@55m_B4T7G>3rV,<2uY`72?#H31]B-.0`Ea)/Ggpr-iPFk,lT"b+T<G]*<$oV)ZCWR
)#b?N(B,'J'`/OE&eb-Up^sM;p_!B9q\/rCrY>DJrYPPNrYb\RrYt_TrZD+_rZ_=er[.Ulr[Igsr[e%$
r\4=+r\OO1r\a[5r\sg9r]0s=r]C*Aq`Xg?q`jF4JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_23"5l3eC55RM?4T7GA
3rV/=3;tl92Z>T52#]<11&`m+0E*R&/H.-u./kUn-N5:i,Q8kc+T<J^*W@&X)u^cQ)?(KM(]5$K(@i48
(B,-L)#bEM)ZC]T*<%#Y+9!D^+oW\b,lT+h-iPOn.fM!u/cIF&0`Ej,1]B612Z>Z73;Y`83rV5<4T7M@
557@'5_21O5_21O5_21O5_21O5_23"5kmS@55RMB4T7G>3rV/=3;tl92?#H31]B-.0`Ea)/cI:".fLgp
-N5=j,Q8kc+T<G]*W@&X)u^`S)#b?N(B,'G'`8UE'DiF;&[N&>&c34?'DiLC(&f!J(]G9N)?(QR*<$uX
*r[;]+oW\b,lT.i-iPRo/,h+!0)dR(1&a!.2#]B32uYf93W;):48qA>4o7G?5O:Xd5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO&upq`am?q`Oj>r]:$=r]'m9r\ja5r\XU1r\=C+r\"1$r[[ssr[@anr[%OgrZ_=arZD+\rZ1tX
rYkbRq\];Kq\K)E!#>&=q\AuDrYPPNq\fAOrYthWrZ;%\rZM1arZhCgr[.Umr[Igsr[n+%r\4=,r\OO1
r\a[5r\sg9r]0s=r]C!>r]U-Bpcjg)JO"cOJO"cOJO"cOJO"cOJO'3"pcnX>q`Xp@r]C!<r]0s;r\sg7
q_\:-r\4=)r[n+"r[Rmqr[.UjrZhCdrZV7_rZ1tXrYthTrYbSLrYGJJrY58D!#,5Bp^shDob%'6rY,&@
rY>DJrYPPNq\oGRrZ1tZrZM1arZhCfr[7[nr[Rmur[n+&r\4=+r\OO1r\a[6r]'m;r]9p<r]L'@q`amA
lp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5kmS@55RM?4T7GA3rV/=3;tl92Z>Q41]B0/1&`m+0)dF$/,h!s./kRm
-2o.g+oWV`+9!;[*<$oV)ZCWR)#G-K(AegI'GTsLrY>;Gq\T5KrYb\RrYthVrZ;%\rZM1arZhCfr[.Ul
r[Igsr[n+%r\4=+r\FI0r\a[5r\sg9r]0s=r]C!>r]U$?q`g-,JO"cOJO"cOJO"cOJO"cOJO'3"pcnO;
r]U6Cq`Fd<r]0s;r\sg7q_\:-r\4=)r[n+#r[[srr[.UjrZhCdrZV7_q]5YTrYkbRrYYVNrYGJJq\0&E
'*&^@')3'I&G6Y4')iRA'`JjH(AepI)#bHQ)u^iS*r[;],5rhd-2o:k./k^q/H.7#0E*^*1B'*,2?#Q6
3;tr;3r;#<4Sq;=55RS25_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOpcnX>q`Xg=r]C*?r]0s;r\sg7r\XU1r\FI,
r\+7'r[e$ur[Igor[.UirZ_=brZM1]rZ1tXrYthSq\];KrYGAGr"T)Dp_3E:rY>;GrYPPNrYb\RrYthV
rZ1tZrZD+_rZhCfr[%Okr[Igrr[e%$r\+7*r\FI/r\a[5r\sg9r]0s=r]C!>r]U$?q`g-,JO"cOJO"cO
JO"cOJO"cOJO'3"pcnO;q`Xp@r]C*?r]0s;r\sg7r\a[3r\OO.r\4=(r[e%!r[Igor[.Uiq]c"]rZ;%Z
rYt_QrYYMKrYGAF!>?.F'DiF8&\J\J&c34<'E/^C(&f!J(]G9N)>bBP*W@,Z+9!G\,Q9%h-iPOn.f1gs
0`Eg+1B'-02?#N52uYf93W;):48qAA4o7G<5O:Xd5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&upq`am?r]L'>r]:$=
r]'m9r\ja4r\OO/r\4=)r[n+#r[Rmqr[.UjrZhCdrZV7_rZ;%ZrYthTrYb\PrYPPLq\B)ErY#;H'EAj9
'DiLC(&JdG(]G9N)?(QR)u^iV*r[8\+T<Sa,Q9"g-iPOn.fM!u/cIF&1&`s-1]B612Z>Z73;tr;3r;#<
4Sq;=55RR*5_21O5_21O5_21O5_21O5_22q5lO"C55RMB4Sq5>3Vtf82Z>T52#]<11&`m+0E*R&/H.-u
./kUn-2o.g,5r_a+9!>\*<$oV)ZCWR)#b?N(B,'J'EJj\q@i`=ob"qMob%'6rY,/CrY>DJrYPGKrYb\S
rZ(nXrZD+^rZ_=drZqIir[@apr[[t"r\"1(r\FI/r\XU3r\ja8q`4X:r]C!>r]U-Bpcn+1JO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_22q5PmYA4oRS@48q;?3W;#;2uY`72#]<11B'!,0E*R&/,h$t./kRm-2o.g,5r_a+9!;[
*<$oS)?(KP(]G3L(&J^C'E&U;')N@A'`/XE(B,-L)#bEP)ZC]T*<%#Y+9!D^,5rhd-2o:k./k^q/H.7#
0E*^*1B'*/2#]E42uYf93W;):48qA>4o7G?5EA'\5_21O5_21O5_21O5_21O5kmVD5PRG>4oRS@48q;?
3W;#;2uY`72?#E21B'$-0E*R&/H.-u./kUn-2Sqd+T<J^*r[/V)u^`S)#b?N(AegI'GLN]q\/i>ne&qS
ne(a3q\/i@rY>DJrYPPNrYb\RrYthVrZ;%\rZM1aq]u.fr[@apr[[t"r\"1(r\FI/r\XL1r]'d8q`Fd>
q`Xg?pcn+1JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_22q5PmYA4oRS@48q;?3W;#;2uY`72#]<11B'!,0E*R&/,h$t
./kRm-2o.g+oWV`+9!;[*<$oS)?(KP(]G3L(&J^C'*&^:')N@>'`JjH(B,-L)#bEP)ZC]T*<%#Y+9!D^
,5rhd-2o:k./k^q/H.7#0E*[)1B'*/2#]E42uYf93W;):48qA>4o7G?5EA'\5_21O5_21O5_21O5_21O
5kmVA5PRGA4oRS@48q;?3W;#;2uY`72?#E21B'$-0Dd@#/,h!s./kRm,lT%f+oWV`+9!;[*<$oV)Z(BN
(]G3L'`f!_r=o,Bp_*63c4KOYq\&Z;rY5>Hq\K/Jq\fAPrZ(nXrZD+^rZV7cq^)4hr[Igrr[e%$r\+7*
r\FI/r\XU4r\sg9r]0s=q`Fd>q`Xg?pcn+1JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22q5PmYA4oRS@48q;?3W;#;
2uY`72#]<11B'!,0E*R&/,h$t./kRm-2o.g+oWV`+9!;[*<$oS)?(KP(]G3L(&J^C'*&^:')N@>'`JjH
(AepI)#bHQ)u^iV*r[8\+T<Sa,Q9"g-iPOn.fLst/cIF&0`Ej,1]B612Z>Z73;tr;3r;#<4Sq;=55RR*
5_21O5_21O5_21O5_21O5_22q5l3e@55m_B4T7GA3r:r:2u>N42#]<11B'!,0)dI%/,h$t.K1^o-2o1h
,5WM^*r[2Z*<$oS)>b6L(',-b!#>AFrY+r;ne'Remh,F0q\/i@q\AuErYYVPrYkbUrZ1tZrZD+_rZ_=e
r[%Ojr[@aqr[[t"r\+7)r\=C.r\XU3r\ja7r]'m;r]:$?q`Oa=q`ad>lp-+eJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5kmS@55RMB4Sq5>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq-N5=j,Q8kc+T<J^*W@&X)uCNP)#b?N
(B,'G'`8UE'Cle5'E/^C(&f!G(]G9N)ZC]T*<%#Y+9!D^,5rhd-2o:k./k^q/,h."0E*[)1B'*/2#]E4
2uYf93W;):48qA>4o7G?5EA'\5_21O5_21O5_21O5_21O5kmVA5PRG>4oRSC48V)<3W;#82Z>Q41]B0/
0`*L%/H.-u.K1^l-2o.g+oWV`+9!;[*<$oV)ZCWR)#b?N(',-b!#>AFq\/`;mh+[nmh,+'q\/rCq\B)G
rYPGKq\oGRrZ1tZrZM1`rZ_=eq^2:jr[Rmtr[n+&r\4=,r\OO1r\aR3r]'m;r]:$?q`Oa=q`ad>lp-+e
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5kmS@55RMB4Sq5>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI:".fLjq-N5=j,Q8nd
+T<J^*W@&X)uCNP)#b?N(B,'G'`8XC'D3"8'E/^C(&f!J(]G9N)?(QR)u^iV*r[8\+T<Sa,Q9"g-iPOn
.fM!u/cIF&0`Ej,1]B612Z>Z73;tr;3r;#<4Sq;=55RR*5_21O5_21O5_21O5_21O5_22q5kmS@55RM?
4T7GA3rV/=3;tl92Z>T21]B-+0E*R&/,h$t./kRm-2o.g,5rbb+9!>\*W@#T)Z(BN(BG9e!#GGHq\8o@
ob,F[p_*?8rY55ErYGAIrYYVPq]#MTrZ;%\rZM1arZhCgq^;@lr[[t!r\"(%r\OF.r\ja7r]'m;r]:$?
q`Oa=pceI;lp-+eJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5kmS@55RMB4Sq5>3rV/=3;tl92Z>Q41]B0/0`Ea)/cI=#
.fLjq-iPFk,Q8nd+T<J^*W@&X)u^cT)?(KP(]G3I(&epH'*/d]!#4l8q\8oBrYGJLrYYVPrYkbTrZ(nY
rZD+^rZ_=dr[%Okr[@aqr[e%#r\+7*r\FI/r\a[5r\sg9r]0s=q`Fd>q`Xg?q`g-,JO"cOJO"cOJO"cO
JO"cOJO&uqpcnO;r]U-@r]C!<q`+R6r\ja4r\OO/r\4=)r[n+#r[[ssq^;@hrZhCdrZM1^rZ;%Zq]#MQ
q\T>M(B>9K(B,'G'_i@4'&=/j')N@>'`/XE(B,-L)#G3M)Z(NR*r[8\+T<Sa,Q8tf-Mo4j.fM!u/cIF#
1&a!.2#]B32u>T63W;)=48V/;4nq5<5NtFa5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&upq`am?r]L'>r]:$=r]'m9
r\ja4r\OO/r\4=)r\"1$r[Rmqr[7[krZqIerZV7_rZ;%ZrYthTrYbSMrYGAGq%NfCmh>R4rY>DJq\T5K
rYb\SrZ(nXrZ;%\rZV7crZqIhr[7[nr[Rmur\"1'r\=C-r\OO2r\ja7r]'m;r]9p<r]L'@q`amAO$J7]
JO"cOJO"cOJO"cOJO"cOpd"U=pce[?q`Oj>q`=^:r]'m9r\jX1r\F@)r\"1$r[[str[@anr[%FdrZV7`
rZD+[rZ(nVrYkbRrYPYP(B>9K(B,'G'`JdF'`/Qb')3.;'`/XE(AepI)#bEP)ZC]T*<$uX*r@)Z,5WYb
-N5Fm.K1jp/cIF&1&`s-2#]B32Z>Z73;tr;3r;#<4Sq;:557A,5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOpcnX>
q`Xg=r]C*?r]0s;r\sg7r\XU1r\FI,r\+7'r[e%!r[Igor[.UirZ_=brZM1]rZ1tXrYthTrYb\PrYPPL
p_<fD'`Aa@'DiL@(&JdG(]G9N)?(QR)u^iV*W@/[+T<P`,Q8tf-N5Cl.K1gr/H.:$0E*^*1B'*/2?#N5
2uYf93W;)=48V/>4nq5<5EA'\5_21O5_21O5_21O5_21O5kRD;5PmYA4oRS@48q;?3Vtf82uY]62#]<.
1&`j*/cI=#/,h!s./kRj,lT"b+T<G]*W@&X)u^cT)$(Qk!#YSLq\K&Dq\8T7i"GSop_<T?rYGAIrYYVP
rYkbTrZ(nXrZ;%\rZV7brZhCgr[.Umr[Igrr[e%#r\"1(r\FI/r\XU3r\jX5r]0s=q`Fd>q`X^<pcn".
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_22q5PmYA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(/H.1!.K1ap-N5=j
,Q8nd+oWS_*r[2Z*<$lR)?(KP(],!G'`]!A'_iFB(AepI)#G3M)ZC]T*W@,Z+9!D^,5rhd,lT.i./k[p
/,h."0)dR(1&`s-2#]B32Z>Z73;tr;3rV5<4T7M@557@'5_21O5_21O5_21O5_21O5_22n5kmS@557;?
4Sq5>3rV/=3;tl92Z>T52#B'-0`E^(/cI=#.fLmr-iPIl-2o.g,5rbb+8[,Y*;^ZU)B&Soq\];Kq\JrA
p_;<nob@09rYGAIrYYMMrYkbTrZ(nXq]Ge[rZ_=drZqIir[7[nr[Rmtr[n"#r\=:+r\a[5r\sg9r]0j:
r]C!>r]U$?ofq\+JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22q5PmYA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(
/cI:".fLjq-iPFk,Q8nd+oWS_*r[2Z*<$oV)ZCWR)#G-K(Anp8(&JdD(]G9N)?(QR)u^iV*W@,Z+T<P`
,5rke-2o7j./k^q/,h."0)dR(1B'*/2#B312uYf93W;)=48V/>4o7G<5EA'\5_21O5_21O5_21O5_21O
5kRD;5PRG>4o7A@48q;<3W:u:2Z>T52#]<11B'!)0)dF$.fLmr./kRm-2o.g,5rbb+T<J^*r[2Z*<$lX
)B&Soq\f/Fq\K&DneD':rY4f7mhGO3q\K/Iq\];MrYkbTq],SVrZD+^rZV.`r[%Fhr[Igsr[e%#r\+7)
r\=C.r\XU3r\ja7r]'m;r]9p<r]L'@pce@8ks0ebJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5lO%G5PRG>4oRS@48q;<
3;tl92?#H31]B0/1&`j*/cI=#.fLjq-iPIl,lT%f,5r_a+9!>Y*<$oV)ZCWO)#b?L(@Dt5(]G9N)?(QR
)u^iV*W@,Z+9!D^,5rhd,lT.i-iPRo.fM!u0)dO'0`Ej,1]B612Z>Z73;tr83rV5<4T7M@557@'5_21O
5_21O5_21O5_21O5_22n5kmS:55m_B4T7G>3rV/=3;tl92Z>T21]B-.0`Ea)/cI=#/,h!s./kUn-2o1h
,Q8nd+T<J^*r[2Z*!$ut!#teRrYb\Pq\T#Cp_DKsp_EZAq\T#ErYb\RrYthVrZ1tZrZD+^rZV7crZqIh
r[.Ljr[Rmur[n+&q_8"*q_\:1r\sg9r]0j:r]C!>q`Xg?pcme(JO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_23"5l3e@
55RMB4Sq5>3rV/=3;tl92Z>T52#]901&`m+0)dI%/,h!s./kUn-2o1h,Q8kc+T<J[*W@&X)u^cT)>b9K
([`+:)#G3M)ZC]T*<$uX*r[8\+T<P`,5rke-2o:k./k^q/,h+!0E*[)1&a!.2#]B32Z>Z73;tr83rV5?
4Sq;=557@'5_21O5_21O5_21O5_21O5_22n5kmS:55RM?4T7GA3rV/:3;tl92Z#?11B'$-0`E^(/cI=#
.fLmr./kRm-2o1h,PrY`+8[)[*#nquq]#MQq\f8Jq\So@h%ff&p_W]BrYb\RrYt_SrZ1tZrZD+^q]c"b
r[%Ojr[@apr[Rmtr[n+%r\+7*r\FI/q_e@3q`+R8r]:$?q`OX:q`ad>j$8/\JO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5lO%D5PmYA4o7A@48q;?3W;#;2uY`72?#H31]B-.0`E^(/cI=#.fLmr-iPFk,lT%f+oWV`+9!>\*W@&U
)u^cT)>P*L)"JL<)#bEP)ZC]Q*<$uX*r[8\+T<Sa,Q8tf-N5Cl./k^q/,h."0E*[)1&a!.2#]B02uYf6
3r;#<4T7M=557@'5_21O5_21O5_21O5_21O5_22n5kRA:55RM?4T7G>3rV/=3;tl92Z>T52#]<.1&`j'
/cI9t.K1^o-N5=j,Q8nd+oWV`+9!;^*?>,#rZ(eSrYkYOq\])Ee/%fqq\]2Jq\oGQrZ(nXrZ;%\rZM1`
rZ_=drZqIir[7[nr[Igrr[e%#r\"1(r\=C-r\XU3r\ja7r]'m;q`=^<q`Oa=pceI;j$8/\JO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5lO%D5PmY>4oRSC48q;<3W;#;2uY]62#]<11B'$-0E*U'/H.1!.K1ap-N5=j,lT%f+oWV`
+9!>\*W$iU)uCQO)>tHG)#G3J)ZC]Q*<$uX*r[8\+T<P`,Q8tf-2o:k./k[p/,h+!/cIF&0`Ej,1]B61
2?#Q63;tr83rV5<4T7M=557@'5_21O5_21O5_21O5_21O5_22h5kmS=55RMB4Sq5;3r:o92uY`72?#E/
1B'!,0E*U'/H.1!.fLjq-iPIl-2o1h,Q8na+9<Q+!$D1]rZ1tXq]#DNrYbJJf,+)sq\fAOq]#DPq]>_Y
rZM1`rZh:cr[.Ulr[@apr[[t!r[n+&r\4=+q_S4.q_nF5q`4X:q`Fd>pc\L<ofqJ%JO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_23"5kmS@557;?4Sq5;3W;#;2uY`72?#H31B'$-0`Ea)/cI=#.fLmr./kRm-2o1h,Q8na+T<J[
*W$iR)Z^iqmMbj>rZ(nXrZ;%\q]Pk^rZhCfr[%Ojr[@apr[Rmur[n+%r\4=+r\OO1r\a[5r\sg9r]0s=
q`Fd>q`X^<pcjg)JO"cOJO"cOJO"cOJO"cOJO&ZhpcnO;pc\U=q`Fd<q`4X7q_nF1r\OO/r\=C+r\+7&
r[e%!r[Rdnr[.UjrZqIfrZ_=b!?`Kb+T<J^*r[2W*;^]M)Z(E.)"edD)Z(KQ*;^cU*r[8\+T<P`,5rhd
,lT+h-N5Cl.K1gr/,h+!/cIC%0`Eg+1B'*/2#]B02uYf93Vtl:48V/>4nV#65N"eX5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO'3"pcnO;q`Xp@q`Fd<r]0s;r\sg7r\a[3r\OO/r\4=)r\"1$r[[str[@anr[.UirZhCdrZV7`
rZD+\q]5PRr#>SRp_roHq],SUrZ:qYrZM1`rZ_=dr[%Ojr[7[nr[Rmtr[n+%r\+7*r\FI/r\XU3r\ja7
r]'m;r]:$?q`Oa=pceI;O$J7]JO"cOJO"cOJO"cOJO"cOmm-P1pceR<q`Oj>q`=^:r]'m9r\ja5r\XU1
r\FI,r\+7'r[n+#r[[ssr[@anr[.Ujq]l(a!?iTd+oWV`+9!>Y*W$iR)u(??)?(KA)>G-F)u^iS*W@,Z
+8[2[+o<M`-2o7j-iPOn.K1gr/H.7#0)dO$1&a!+2#]E42u>T63W;):48qA>4nV#65N"eX5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO'3"ofr=;q`Xg=r]C!<r]0s;r\sg7q_\:.r\=C+r\+7&r[e%!r[Igpr[7[krZqIfrZ_=b
q]Pk[rZ:hT!?<*I*;^cR*r[8Y+T<P`,Q8tf-2o7j-iPOn.fLst/H.:$0E*[)1&a!.2#]B32Z>Z73;tr8
3rV5?4Sq;7557@'5_21O5_21O5_21O5_21O5_22h5kRA755RMB4Sq5;3rV/=3;tl92Z#?11]B0/1&`j*
0)dI%/H.1!.fLjn-iPFk,lAke,PrYZ+9!>\*V^WL)rMY3)u^iV)uCWS*W$oT+9!D[,5rhd,lT+h-N5Cl
./k[p/,h+!/cIC%0E*[&1B'-02?#N52u>T63W;):48V/;4o7G65N"eX5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO'3"
ofr48q`Xp@q`Fd<r]0j8r\sg6r\XU1r\FI-r\4=(r[n+#r[Rmrr[@anr[.UjrZqIfrZ_4_rZM1^q&]JU
p`9#KrZD"[rZV7brZhCfr[%Ojr[7[nr[Rmtr[e%#r\+7)r\=:+r\XU4r\sg9q`4X:r]C!>q`X^<pcj^&
JO"cOJO"cOJO"cOJO"cOJO&QepcnF8q`Xg=r]C!<r]0j8r\sg7r\a[3r\OO/r\=:'r[n+#r[[str[Igp
r[7[lrZqRj,QK+e,Q8nd+oWV]+8[,V*V(3C)u^iV)u(EG*W@,W+9!D[+oW\b,Q8tf-2o7j-iPOn.K1gr
/,h+!/cIC"0`Eg+1]B612>]</3;tr;3r;#94SV):54Uqr5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOr]p$=q`am?
r]L'>r]:$=q`+R6r\ja5r\XU0r\=C+r\+7'r[n+"r[Rmrr[@anr[.LfrZhCdq]Yq]q]>h[*q:<H+8[2[
+oW\b,Q8tf-2o7j-iPOn.K1gr/,h+!/cIF&0`Eg+1]B612?#N52uYf63W;)=48V/;4nq595E%jY5_21O
5_21O5_21O5_21O5jUc/5PRG>4o7A=48V)<3W;#;2u>N42#B*.1&`m+0E*U'/cI=#/,Ldp-i54k,p`O;
rZqIfrZ_4_q]PbXq]>MQkoB77q]>VVrZM1`q]c"aq]u.eq^;@kq^VRrr[n+%r\+7)r\=C-r\OO1r\a[5
r\sg9q`4X:r]C!>q`XU9niu%tJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_23"5k7/:55RM?4Sq5>3rV/=3;YZ62Z>T5
1]B0/1&`m+0E*U'/H.1!.fLmr./kUn-N5=j,l8hc,5<;^+<]tmq]Yq_q]l(cr[%Ojr[7[nr[Igrr[[t!
r\"1'r\4=+r\FI/r\XU3q`"L6r]0j:r]C!>r]U$?pcjU#JO"cOJO"cOJO"cOJO"cOJO&Qeniun5pc\U=
q`F[9r]0s;q`"L4q_\:.r\=C+r\+.$r[e%!r[Rmrr[@[l!%7XirZq@crZ_4_q]PYUi#_b;rZM1^q]PbZ
rZ_=dq]u%cq^DFmr[Rmtr[e%#r\"1'r\44)q_\:0r\ja7r]'d8r]9p<q`Oa=pce@8g-C3SJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5kmV>5PmY>4o7A@48q;<3Vtf82Z>T52#]<11B'$-0`Ea)0)dI%/H.1!.fLmr./kUn-N5=g
,krSb+sQ=sq]kt`r[%Ojr[7[nr[Igrr[[t!r[n+%r\+7)r\=C-r\OF/r\ja7r]'m;q`=U9r]L'@pceI;
M*QVWJO"cOJO"cOJO"cOJO"cOk!8]+nim%9q`Oa;q`=^:q`+R6q_e@0r\OO/r\=C+r\+7'r[n+#r[[st
r[@jr-ib[m-iPIi-2o1e,Pr\^+n?cT+7C?F+o<J\,Q8tf-2o7g-iPOn.K1gr/,h+!/cIC%0E*[)1&`s*
1]B6.2Z>Z43;tr;3rV5<4SV)754Uql5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOpd"L:q`ad<r]L'>r]9p:r]'m9
r\ja5r\XU1q_A((r\"1%r[e%!r[Rmrq^DFkr[.Lgq]u(ar?M(]p`oY]q^)4gr[7Rkr[Igrr[[t!r[n+&
r\4=+r\FI/r\XU3r\ja7q`+R8r]:$?pcSO=pce@8M*QVWJO"cOJO"cOJO"cOJO"cOk!8T(ofi79q`Oj>
q`=^:q`+R6r\ja5r\XL.r\F@)r\+7'r[n+#r[[st!@]Gt.JkOm-i57i-2Ste,PWJX+n$QH+o!8Y,Prbc
-2T%g-iPOn.K1gr/,h+!/c.1"0`*U%1]B612?#N52uYf63W;):48V/84nq535MAAR5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO&uqofr=;pc\L:r]C!<r]0j8r\s^3r\XU1r\FI-r\4=)r\"(!r[[str[I^mq^;@iq]u7g,k3/T
-2T%g-i5=k.K1gr/,h+!/cIC%0E*[)1&`s-1]B612?#N52u>T63W;):48V/;4nq565D_XV5_21O5_21O
5_21O5_21O5iY-)5P7584oRS=48q;<3W;#82uY`42#]<11B'$-0`*O&0)I1#.k:TMr[Rmrq^D=hr[.Lg
q]t_Wp`f/Opa#__q^2:iq^DFmr[Rmtr[dpur\"1'r\4=+r\FI/q_\:0r\ja7q`+R8q`=^<q`OX:pce75
f0FmPJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5kmV;5P75;4oRS=48q;?3W;#82uY`72?#H31]B0/1&`m+0DdC$/cI=#
/,h$q.JkOh-iGFc-MStc./k[m.fLst/H.7#0)I=$0`Eg+1B'*/2#]B32Z>Z43;tr83rV5<4Sq;7557?s
5_21O5_21O5_21O5_21O5_22\5kRA7557;<4Sq5;3rV/:3;tl92Z>T52#B*.1B'$-0`Ea&/cdOU!%n1$
r[[jqq^MLmq^;.cod08Vmj7r[pa>qer[I^or[[jsr[n+%r\+7)q_A(*r\OO1r\aR2r\s^6r]0s=pcJ@8
r]Tg9pcm.kJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_22q5kRA755RM<4T7GA3r:r:3;tl92Z>T22#]<11B'$-0`Ea)
0)dI"/H.0s.fLmj-ib[d-ho+e.K1go/,h*s/cIC%0E*[)1&`s-1]B6.2?#N52uYf93Vtl748V/;4nq56
5DDFS5_21O5_21O5_21O5_21O5iY-#5P7584o7A@48V)<3Vtf82u>N42?#H01]&p+0`Ea)/cdOU!%n(!
r[[anr[I^mq^9l?q^;7hq^MLoq^_Xsq^qe"r\+.&r\=C-r\OF.r\a[5r\sg9q`4O7r]Bm;q`XU9ofphh
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_22n5kRA:557;<4Sq5>3r:r:3;tl92Z#B22#]<11B'$*0`Ea)0)I7"/Ggsm
.KLtIoI9G_q^_Opq^qe"r\+7)q_A(*r\OO1r\aR2r\sg9q`4X:q`F[;q`XU9ofn0rJO"cOJO"cOJO"cO
JO"cOJO&$Vofr+5q`Xg=pcJI9q`4O5r\sg7q_e.)r\FI-r\+@+0*![&0)dI"/Ggsp.f1[i./kUn..nte
./kUh..o%g.f1aq/Gh$u0)I=$0`*U(1B'*,2#]B32Z#H43;Y`53r;#<4S:l454Uqc5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOog&(4pceI9q`Oa;r]9p:r]'d6r\ja5q_\:.q_J.*r\44&q_%atq()Lsodf\dq^q[tq_.q&
q_A(*r\OF.r\a[5r\s^6r]0j:q`Fd>of`(6ofn'oJO"cOJO"cOJO"cOJO"cOJO%pSpcnF8pc\C7q`F[9
r]0j8r\s^4r\aR0r\OF,!AQ;/1&E[(0DdC!/c.*o/);]J/,Lmp/cIC"0DdI&1&`s*1]'$+2>]?33;>N5
3qtf64SV)754Uq`5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOog%t1pceI9r]L'>q`=U7r]'m9q_nF2q_\:.r\F@*
r\4+#r\!mr!%mampau7nr\+.&q_A(*q_S4.r\aR2r\s^6r]0j:r]C!>pc\C9niqalJO"cOJO"cOJO"cO
JO"cOJO%pSofr"2q`X^:r]Bm9q`4F1r\ja5r\XC+!AZD11A`g*0`*O#0)I6n/GLaj.dnn_/Gh$r0)I=!
0`*U(1B'*,2#]B02Z>Z43;Y`83r;#64Sq;454Uq`5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOmm-P1ofi79pcSF8
r]9p:r]'d6r\jX2r\XL.q_J%'pb;Lsr@dgroe61rq_@t'r\OF.q_e@2r\s^6q`4X:pcJ@8q`XU9ofn!m
!'l*#JO"cOJO"cOJO"cOJO"cOg-G*kofi.6r]Ks;q`=U7q`+R6q_nF2q_S=01]9-,1B'$'0`*Nr0&8,V
0(gmp0`*U(1A`m,2#B002Z#H.3;tr83r;#94S:l454UqZ5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOmm-G.pce@6
q`Oa;r]9g7q`+R6r\jX2q_\1+q_IatrA!t!oeH>!q_S"(r\aI/r\s^6r]0j:q`F[;of`(6ofn!mrBPp!
JO"cOJO"cOJO"cOJO"cOe3N[kofi%3q`Oa;pcA:4r]'d6q_n@0!&aX1q_S+)pbDY"r\+7)h(SOWpbDY$
q_S++q_e7/r\sU3q`4X:q`FI5pc\:6ofpD\JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22h5jpr155RM?4Sq5;3r:r7
3;YZ62Z#B/2#&m%1Ailm1&*O$1]'$+2>]</2u>T63Vtl748V/84n:f05Cl)u5_21O5_21O5_21O5_21O
5_22M5k7/.55RM?4SV#83r:r:3;YZ32?>ZmrAFR2r\OO1q_S+)pbCASoeH4sq_S++q_e@2q`":0q`4O7
r]Bm;pc\13nit)YJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22e5k7/155RM<4Sq5;3r:r73;YZ32Z#B)2#/rh1]'$(
2>]</2u>T33Vtl748:r84nV#-5Cl)u5_21O5_21O5_21O5_21O5_22J5jpr1557;94Sq583r:r73;b]8
2u>N12>B$$1\*<i1%I*s1]B611]'$+2?#N,2u>T63Vtl148V/84nV#*5K,m=5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO&?_niun5of`17pcJI9pc842pc%t+oecb,2"<En2>&m,2u#B33VYZ148qA54nV#35Cl)o5_21O5_21O
5_21O5_21O5_22D5kRA454q)94S:f53r:r82ukr52u>N+2>&fd1]B611\`g%2>&m,2u#B03VYZ448:r5
4n:f*5JKI75_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&?_mm$J/pc\C7q`F[9q`4F2pc%k(r&*dtoeuS(pc/.2q`=L6
q`OX:nilV/JO&rpJO"cOJO"cOJO"cOJO"cOJO%CDniuS,q`XU7q`FR6q)JF8r]'R0q_n"&g,/@Xq_n4.
pc/.2pcAC9r]L0Aq`OO7nilM,^Hd?8JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5it?#5Oq#24o7A:48V)63V>B'2uP].
2Y&g"3;Y`/3r;#64SV)154Uph5kI<m5_21O5_21O5_21O5_21O5fc4Z5Oq#24o7A748Co;3r:r43;#5s
2X`No2YB$%3;Y`23qtf34SV)154:_E5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOj$;rqpce73pcS=5ofDb+p,M%k
pc8".q`Fd>r]C!>of_t3niq[jmQc=gJO"cOJO"cOJO"cOJO"cO_EdZVmlpM0ofVq0!'Bs:pc8",d5UVU
of;e.pcJ.2of_k0nisHGJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22\5j:N(557;94S:f23pes+3VYSu3VYZ.48:r5
4mtT*5Cl)f5_21O5_21O5_21O5_21O5_22;5jU`(557;64T%8@47tZ*3UAa#2s**m3V>H148qAA48:r5
4mtT$5I3V+5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO&$Vlp(/,nicY.ofMP%rAs^6krSK!ofVn1nilM,JO&NdJO"cO
JO"cOJO"cOJO"cOJO$b2niuS,nick4!BW@C48qA847YGU3V#6(47t`/4n:f'5HR2%5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO%pSks+`&nicY.r]C*An2pS1pc@P!pcS".mlp;,JO&<^JO"cOJO"cOJO"cOJO"cOJO$Y/mm$/&
ofW=<4S1c)43fnR48:r,4mtT$5H6u"5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO%pSj$3)unicP+o/kqnml^A.losc#
JO&<^JO"cOJO"cOJO"cOJO"cOJO$Y/lp'Vrr&t!AofW48r]KF,loOJpr]L0AniZS.ks">rW^),#JO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5g_j]5Oq##4nCen4R##t53tLb5iP%[5_21O5_21O5_21O5_21O5cm<<5OUf64mkK(
4T7GA4P`*c4RtZ"53Y;*5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOb<Y2Snil"qcoph]lp$%dfg(*RJO"cOJO"cO
JO"cOJO"cOUd4B5n36\4krmNYjuqrmks(P#JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_22D5i=lh54^qs4l\`g5Cl)Q
5_21O5_21O5_21O5_21O5_21r5jU`,53kDC4m"rg5F=]e5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO%(;i'60abs(/P
JO%[LJO"cOJO"cOJO"cOJO"cOJO#\ik<Ar2g-4=Ui'-'`O$J7]JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5e0/35P%(u
52&5P5fZ-@5_21O5_21O5_21O5_21O5a"D%5P.1?53>(\5QF'#5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO$b2aZmC%
JO%7@JO"cOJO"cOJO"cOJO"cOJO#A`n3?5']KY.9JNs3#JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21u5heNG5Cl)0
5_21O5_21O5_21O5_21O5_21O5QF'15Cl)l5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOM*Ul$mQZ7fPX'dbJO"cO
JO"cOJO"cOJO"cOJO&*Xd6E1Idm/ILJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5`%c%5OLae5a4Nb5_21O5_21O5_21O
5_21O5_22X5g_fI5gquL5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$
[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>
h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV
6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N
8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-
ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@
riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'
=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_
q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4
J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jX
rd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6Tm
rqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZ
X8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GL
k5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]
8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L
6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Sl
rn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Z
rk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGj
r`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVS
o`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQL
NW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(D
rc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BD
qu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLF
ra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+A
RJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Y
mf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e
9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r
5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZU
rm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qm
rlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/a
r_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QE
mJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^m
S,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3
ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirquco
j8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3X
rbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&
N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*e
o)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq
:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?
rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-
rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrY
r_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6
jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5
WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-
r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKi
rqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXop
rcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIa
Jc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQl
q>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,
<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$
rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>
rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QN
r^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nu
hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK
\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u
=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_
rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4
rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2O
F8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fp
r;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;
?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZ
ri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdL
roX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oG
r^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNb
df.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d
`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe
;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^S
rq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnL
rf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<
CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qB
s82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GN
B)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iA
rgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'Y
rpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
Ud4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"K
aSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$
cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\
:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.E
rpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mm
rgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*
@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6Nm
rT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9f
DZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&
rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQe
rpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/
^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5
gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O
6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U
8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6
roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5
ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*
=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=ac
qu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&
I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'a
rdk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[rqucl
rqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`D
ir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y
7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L
7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeu
rnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fK
rji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Aer_i_s
!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Z
p&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>
L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<rbDFO
rcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mWl2UY[
rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^Nrau.;
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3N
U&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^nc%tU
kl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a
8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E
6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABKrlG)b
rmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$rm(Md
rl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\r_<Ae
r_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<lMg2M
nG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%V#Hk_
OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+raPk<
rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]mrr(mW
l2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]frbh^N
rau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1
Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ipAXX^
nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#;Z9Jk
9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/rkABK
rlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5rn@A$
rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCERr^d#\
r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-iVqs<
lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@Z2Ua%
V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,!*T;+
raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69crql]m
rr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&rd=]f
rbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`Bo
L&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<i
pAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3=oMG#
;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=lriZ7/
rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@Dro3q5
rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TOqaCER
r^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Alf`'e-
iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ]`,J@
Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j<rlH,
!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZrq69c
rql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>reLK&
rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqX
H2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ip
qYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF@/aL3
=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JNrh9=l
riZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!Uroj@D
ro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"rr^-TO
qaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XUci2Al
f`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbmbPoHZ
]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa:B"/j
<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LMrp]pZ
rq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_rfR2>
reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HD
E;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\
rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:XC]7rF
@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1rg!JN
rh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^rpg!U
roj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$"r
r^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?_Z%XU
ci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-eGdbm
bPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y9)_Qa
:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<rp'LM
rp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%rhTO_
rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43
Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0ir;QZT
s69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,XipFoH:X
C]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Kore:?1
rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWirq??^
rpg!Uroj@Dro3q5rn@A$rm(Mdrl"fKrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$"rr^-TOqaCERr^d#\r_<Aer_i_s!EiP*=oM\*@fBs<CAr2OF8gIaJc:B&N;f+ARJroZX8]:$[f4#?
_Z%XUci2Alf`'e-iVqs<lMg2MnG`(Zp&=acqu6NmrT!qBs82fpr;QQlq>U*eo)A1Ymf)GLk5OB>h>Z.-
eGdbmbPoHZ]`,J@Z2Ua%V#Hk_OoC@>L]2f&I/\9fDZ4GNB)Z3;?N++,<W5nq:]=&e9E%K]8,bsV6i03I
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21r5lO+L6i0:N8,c'Y
9)_Qa:B"/j<rlH,!*T;+raPk<rbDFOrcA'ardk'&rf$iArgEbZri?%$rjMg?rkeZUrm1Slrn.5-ro*k<
rp'LMrp]pZrq69crql]mrr(mWl2UY[rquclrqZQerpp'YrpKdLroX4>rn[S-rm^qmrlb;Zrk/6@riuI%
rhTO_rfR2>reLK&rd=]frbh^Nrau.;ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6QNr^ZrYr_!/ar_EGjr`9,'=TDV(
>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+lY5Ym/^Ac"KaSsNbdf.nuhu;U6jo4QEmJcVSo`"O_q#:0i
r;QZTs69R\rr2ipqYp<ipAXX^nc%tUkl0`Dir7d5gA]V$cMl#d`;[FK\c/l5WW&^mS,SQLNW+_4J,Xip
FoH:XC]7rF@/aL3=oMG#;Z9Jk9`@]a8H)-Y7K,[O6Dd#!5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5bp[E6N0@L7/f^U8H)6\:&[oe;Z9_u=]k`-r`oG3ral(Drc%jXrd"Ko
re:?1rg!JNrh9=lriZ7/rkABKrlG)brmLeurnm_6roO.ErpB^Srq-3_rqQKirqucoj8\BDqu6TmrqcWi
rq??^rpg!Uroj@Dro3q5rn@A%rm(Mdrl+lLrji$5ri,mmrgWnLrf-o4rdXoprcS3XrbMLFra>_3r`T5#
r_i_kr_3;ar^d#Yr^HfRpd1rFJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO$"rr^-TOr^?`Sr^ZrYr_!/ar_EGjr`9,'=TDV(>lJ43Ac?HDE;jqXH2`BoL&R&1Q2[3NU&M+l
Y5Ym/^Ac"Kao9Wcdf.r!hu;U6jo4QEmJcVSo`"O_q#:0ir;QZTs69R\rr2ipqYp<ip\sd`o)A(Vl2KlF
j8Rm6gA]Y%cMl#d`W!OL\c/l5WW&^mS,STMNrFh5J,XipFoH:XC]7uG@/aL3=oMJ$;uTSl9`@]a8cD6Z
7JK7L6E*5$5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@O
7/fXS8,c'Y9)_Qa:B"/j<rlH,!*T;,raPk<rbDFOrcA'ardt-(rf-oBrgEbZriH+&rjVm@rkeZVrm:Yn
rn7;.ro*k<rp'LMrpg![rq69crql]mrr(mWl2UY[rquclrqZQfrq$-[rpKdMroa:@rn[S-rmh"orlkA\
rk8<Arj)O&rh]Uarf[8@reLK&rd=]frbqdPrb)4<ra,S-r`9"tr_WSgr_*5^r^ZrVpd>$IWBc#"JO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOUd4oGr^6ZQr^HfVr^d#\r_EGg
r_i_s!EiP*=oM_+A,^'=CAr5PFT-UcK)UN(NW,4BRJroZXT#F&\,O,@_Z%[Vd/MMng&Bn.iVr!=lMg2M
nc&1[p&=acqu6NmrT!qBs82fprVlZmq>U-foD\=[mf)JMkPjN@h>Z.-ec*nobl5T\^&GSAZMpj&V>d"a
P5^L@L]2f&I/\9fDuOSPBDu<<?N+.-<rQ(t;#X2g9E%N^8,c!W7/K@N6E*5$5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5bp[E6N0@O7/fXS8,c'Y9E%]c:]=8k<rlH,!*T;,
raYq=rbDFPrcJ-crdt-(rf-oBrgEbZriH+&rjVm@rkeZVrm:Ynrn7;.ro*k=rp'LMrpg!\rq??erql]m
rr(mWj8],WrqcWirqHE`rpp'VrosFFro="6rn@A%rm1Sfrl+lMrji$6ri,mnrg`tNrf6u5rdXoprcS3Y
rbVRHra>_3r`];%r`&knr_<Abr^m)Zr^QlTqa:?LWBc#"JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOX[)YIr^-TOr^?`Sr^ZrYr_*5cr_NMkr`9,'=TDV(?2e@5Ac?HDEW1(Z
HN&NqLAm23Q2[3NU&M.mYPu$1^Ac"Kao9Zde,J&"hu;U6k5OZFmJcYTp&=[aq>U9jr;QZTs5X.YrVlZm
q>U-foD\=[mf)JMkPjN@h>Z.-ec*nobl5T\^&GSAZMpj&V>d"aP5^L@L]2f&I/\9fDuOSPBDu<<?N+.-
<rQ(t;#X2g9E%N^8,c!W7/K@N6E*5$5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5cm<E6N0@O7/fXS8,c'Y9E%]c:]=8k<rlH,!*T;,raYq=rbDFPrcJ-crdt-(rf-oBrgEbZ
riH+&rjVm@rkeZVrm:Ynrn7;.ro*k=rp'LMrpg!\rq??equ$Hmj8\0>rr)imrqZQfrq$-[rpKdMroa:@
rn[S-rmh"orlkA\rk8<Arj)O&rh]Uarf[8@reLK&rd=]frbqdPrb)4<ra,S-r`9"tr_WSgr_*5^r^ZrW
r^?WNog5rLJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$>&pd4jF
r^?`Sr^ZrYr_*5cr_NMkr`9,'=TDV(?2e@5Ac?HDEW1(ZHN&NqLAm23Q2[3NU&M.mYPu$1^Ac"Kao9Zd
e,J&"hu;U6k5OZFmJcYTp&=[aq>:*hro=%=s8MurqYp<ip\sd`o)A(Vl2KlFj8Rm6gA]Y%ci2/f`W!RM
\c/o6WW&anSGn]NNrFh5J,XipFoH=YD#S)H@/aL3>5hS%<;o_n:&[fb8cD6Z7fGgQ6hNdO5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22,5l3kB6Mj.L7/fXS8,c'Y9E%]c
:]=8k<rlH,!*T;,raYq=rbDFPrcJ-crdt-(rf-oBrgEbZriH+&rjVm@rkeZVrm:Ynrn7;.ro*k=rp'LM
rpg!\rq??equ$Hmj8\0>rr)imrqZQfrq$-[rpKdMroa:@rn[S-rmh"orlkA\rk8<Arj)O&rh]Uarf[8@
reLK&rd=]frbqdPrb)4<ra,S-r`9"tr_WSgr_*5^r^ZrWr^?WNog5rLJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO$P,nj<4@r^?`Sr^ZrYr_*5cr_NMkr`9,'=TDV(?2e@5
Ac?HDEW1(ZHN&NqLAm23Q2[3NU&M.mYPu$1^Ac"Kao9Zde,J&"hu;U6k5OZFmJcYTp&=[aq>:*hro=%=
s8MurqYp<ip\sd`o)A(Vl2KlFj8Rm6gA]Y%ci2/f`W!RM\c/o6WW&anSGn]NNrFh5J,XipFoH=YD#S)H
@/aL3>5hS%<;o_n:&[fb8cD6Z7fGgQ6hNdO5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_22,5k78=6iKLQ7K,gV8H)9]:B"&g;Z9_u=]k`-ra#M5ral(Drc.pZrd+QqreCE3
rg!JNrh9=mric=1rkABKrlP/drmUl"rnm_6roX4FrpB^Trq69arqZHhrr1sXj8],WrqcWirqHE`rpp'V
rosFFro="6rn@A%rm1Sfrl+lMrji$6ri,mnrg`tNrf6u5rdXoprcS3YrbVRHra>_3r`];%r`&knr_<Ab
r^m)Zr^QlTqa:$Cpd)MWJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO$P,nj<4@r^?`Sr^ZrYr_*5cr_NMkr`9,'=TDV(?2e@5Ac?HDEW1(ZHN&NqLAm23Q2[3NU&M.mYPu$1
^Ac"Kao9Zde,J&"hu;U6k5OZFmJcYTp&=[aq>:*hro=%=s8MurqYp<ip\sd`o)A(Vl2KlFj8Rm6gA]Y%
ci2/f`W!RM\c/o6WW&anSGn]NO8at7JGsrqFoH=YD#S)H@/aL3>5hS%<;o_n:&[fb8cD6Z7fGgQ6gR.O
5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22,5k78=6iKLQ7K,gV
8H)9]:B"&g;Z9_u=]k`-ra#M5ral(Drc.pZrd+QqreCE3rg!JNrh9=mrilC3rkJHLrlP/drmUl"rnm_6
roX4FrpB^Trq69arqZHhrr1sXj8],WrqcWirqHE`rpp'VrosFFro="6rn@A%rm1Sfrl+lMrji$7ri,mn
rg`tOrfI,8rdk&src\9[rb_XIra>_3r`];%r`&knr_<Abr^m)Zr^QlTqa9^:]0Lp4JO"cOJO"cOJO"cO
JO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO^HgpJqa:?Nr^HfVr^d#]r_EGgr_i_s!EiP*
=oM_+A,^'=C]8>QFT-XdKDpW)NW,7CRf9&\XT#I'\Gj;C_u@gXd/MMng&Bn.iVr!=lMg2Mnc&4\pAXmb
r;Q]Us5X.YrVlZmq>U-foD\=[mf)JMkPjN@hYu:/ec*nobl5T\^&GSAZi7!(VZ*.cPl?gEM>i)*IK"Eh
E;j_RBDu?=?iF:/<rQ(t;>s;h9E%N^8,c!W7/K@<6Mj'b5_21O5_21O5_21O5_21O5_21O5_21O5_21O
5_21O5_21O5_21O5_21O5_21O5_22A5kmY-6Mj.L7/fXS8,c'Y9E%`d;#XDm<rlH,!*T;,raYq=rbMLQ
rcJ-dre(3)rf-oCrgNh]riH+'rj_sCrkn`Xrm:Ynrn7;/ro3q?rp'LMrpg!\rq??equ$Hmj8\0>rr)im
rqZQfrq$-[rpKdMroj@BrndY/rmq(prlkA\rk8<Arj2U(rhf[crfmDEre^W*rdFchrc%jSrb2:?ra5Y/
r`9"tr_`Yhr_*5^r^ZrWr^?WNk!HmLJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cOJO"cO
JO"cOJO"cOJO%:Ah*V!+r^?`Sr^ZrYr_*5dr_WSmr`9,'=TDV(?N+I6Ac?KEEW1(ZHiAZsLAm54QN!?P
U].CpZ2V94_#D7Nb5TffeGe/#i;Va8kPjfHmJcYTp&=[aq>:*hro=%=s8MurqYp<ip\sgao)A+WlMg&I
jSn$8g]#e'd/M;h`r<^O])K&8WrAmpT)OuROoC7;Jc:)sGQ)R\DZ4>K@fBa6>Q.\&<;obo:B!rd8cD6Z
7fGgQ6et)O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_21O5_22A5i"d(
6iKLQ7fGsX9)_N`:]=2i;uTi!=]k`-ra,S7rb)4Hrc8!\rd4WtreLK6rg3VSrhTOqriuI5rk\TPrlb;h
rmh#%ro!e8roa:HrpB^Trq69arqZHhrr1sXj8],WrqcWirqHEarpp'Wrp'LIroO.9rnIG'rm:Yhrl>#P
rjr*8ri5sprh'1SrfR2;rdt,urce?]rbqdMraPk6r`fA'r`/qpr_EGdr^m)[r^ZrVpd<t+b!CSEJO+iQ
JO+iQJO+iQJO+iQJO+iQJO+iQJO+iQJO+iQJO+iQJO+iQJO+iQJO+iQa?eiQogA^Hr^QlXr_!/`r_NMi
r_reu!ErY,>5hn.AH$6@D>nVUG5cmgK`6c+O8bLFSGo>`Y5Ya+\c0GE`;[sZdf.ergA^%0ir8-?li-;N
nc&4\pAXmbr;Q]Us5X.YrVlZmq>U-fo`"I]nG_bQl2KfDhu;F1fDa.rcMkoa_#D"G[/R-*W;`IhQN!$G
MZ/5,J,X]lErL"VC&VWA@K'O2=T2A#;Z9Jk:&[ca8H)-Y7JK6L6@hIS6@hIS6@hIS6@hIS6@hIS6@hIS
6@hIS6@hIS6@hIS6@hIS6@hIS6@hIS6@hJ'6MNqF7/f[T8H)6\9`@ie;>sPo=TMc4!*oM2rau.Crb_XV
rce?ire:?.rfI,Hrg`t`riZ7+rji$Erl"fZrmLerrn@A1roF(Brp9XOrpg!]rqHEfqu$Hmj8\0>rr)im
rqZQfrq-3\rpTjPrp'LEro!e4rn.4trm(Mark\TIrjMg.ri#ggrg3VKrf$i0rdk&prcA'XrbDFDraPk5
r`K/#r_remr_NMer^m)[r^QlUr^<VNJO=uUJO=uUJO=uUJO=uUJO=uUJO=uUJO=uUJO=uUJO=uUJO=uU
JO=uUJO=uUJO?>&qaC<Nr^ZrZr_*5cr_NMjr`/r$!F8t2?2e72BDuWEDuOnYGlE0kLAm)0OoCgKT)PVd
Y5Ya+]Df_I`r=3]e,Insg]$12jSnBBmJcPQo)A@^p\t$dr;Q]Us5X.YrVl]nqYp6go`"I]nG_eRlMfoE
i;VU4g&BG!ci2&c_>_.I\,NQ0WrA^kRJrKNNW+Y2Jc:#qFT-=[D#S&GA,]j7=oMP&<;o_n:]=)f9)_E]
8,Ga&7+O_V6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6\.UU6e=]N7/fXS
8,GjV9E%Wa:]=5j;uThs>6/#8!+#S5rb)4ErbqdZrd+QoreLK1rf[8Mrgs+eric=-rk&0Jrl>#_rm^qu
rnIG3roO.CrpB^Qrpp'^rqHEgqu$Hmj8\0>rr)`krqQKcrq$-Yrp9XLroO.;rndY-rmLelrlP/UrkABA
ric=$rhBC[rg!JDreCE)rd=]frc8!Urb2:Cra>_0r`T5$r_i_mr_E>`qagTSqaT:.ejP'WJOG&WJOG&W
JOG&WJOG&WJOG&WJOG&WJOG&WJOG&WJOG&WJOG&WJOG&WJOG&Wf0n+Wogf!Pr^m)_r_<Agr_rerr`K/+
!FK16?iFR7C&VrJE;k(\HN&KpM>iJ5PQ%*OT`1nhZ2V01]`,kKa8XB`eGe)!h#?=4jo4KCmf)\So)A@^
p\t$dr;Q]Us5X.YrVQKkq#9scoD\:ZmJcDMkPjE=hYu4-eGdkpbPoEY_#CnDZ2Um)V#Hk_Qi<'FM#N,-
If=TkFoH=YC&VcE@fB^5>lIk)<W5nq:]=)f9`@]^8c)&[7tF0]7tF0]7tF0]7tF0]7tF0]7tF0]7tF0]
7tF0]7tF0]7tF0]7tF0]7tF0]7tF1.8,c'Y8cD?]9E%Wa:]=2i;>sVq=8lG'?NFSD!+Gk<rbMLMrcA'b
rdFcurepc9rg*PTrhBClrj2U4rkABNrlG)armh##rn[S6roO.DrpKdSrq$-`rqQKhqu-Nnj8\0>rr)`k
rqQKdrq-3[rpKdOroa:>rnm_/rm^qprlb;Zrk\TFriuI)rhf[brgEbKre^W/rdaunrc\9\rbMLIrac"8
ra#M,r`B)!r_i_lr_NMenk-)VJOk>_JOk>_JOk>_JOk>_JOk>_JOk>_JOk>_JOk>_JOk>_JOk>_JOk>_
JOk>_JOln6r^llWqb6uar_NMjr`&kur`T5*ra>h;@fU$<BDucIE;jtYHiAKnK`6u1OT(UGT)PJ`X8]L*
\,O/A`r=*Zci2Mpg&Bh,jSn<@l2L/NnG`%Yp\sseqYU6jro=%=s8Muoqu6BipAX^`nc%tUm/H5Jj8S!9
g]#b&df.Ji`W!^Q]Df,8YPtL"TDk;YPQ$L>M#Mu)HiA9hErKtUC]7uG@/aL3>Q.b(=8l1u;>sDk:]=)f
9__8a8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBTc8qBU:9)D9Y9`@fd
:]=2i;Z9Vo<rQ5#>5hn.@KC%O!+l.DrbqdUrce?jrdk'(rf6u@rg<\XrhTOprjMg;rkSNRrlY5ern%/&
rndY8roX4FrpTjUrq$-`rqQKhqu-Nnj8\0>rr)`krqZQfrq69]rpTjRroj@Aro*k3rn%/!rm(M`rl"fL
rjDa1ri5skrgj%Srf6u9re:?$rd=]grc%jSrbDFDraPk6qcj&%r`9"tr_`YkohY$O_+fJTJPC\iJPC\i
JPC\iJPC\iJPC\iJPC\iJPC\iJPC\iJPC\iJPC\iJPC\iJPC\i`D,Slnk]6]r_i_rr`B)%ra#M0ra>_<
!GQ6JC&VuKErL4\HN&EnK)UZ,OT(LDSGo;_VZ*du\,O#=_>_RUbl6&if`'V(hu;^9k5O]Gn,DkVo`"Ua
q#:-erVlfVs5X.YrVQKkq>U-fp&=R^n,D_Rl2KcCir7d5f`'G#ci2#b`W!UN[f3W4XT#!oT`1>XOoC@>
L]2i'If=WlF8g1YD#S,IB)Z6<?N+4/>5hY'=8l4s;ts5\:qf_V:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m
:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Ou;m:Vool;#!oe;uTbq<W6,"=oMY)?iFI4A,^-BC2*``rbqdXrce?h
rdt-(rf$i?rg*PTrh]UnrilC4rk8<LrlY5brmUl!rnIG1roX4Crp0RQrpp'\rqHEerqcNjrr1sXj8],W
rqucmrqZQfrq69^rpTjRrosFDro3q6rn.5$rm:Ydrl4rQrji$9riZ6rrh9=[rf[8Are^W+rdXoorc\9^
rbqdMrb2:Bra>_4ra#D(r`K/$r`9"ur`&bnZ;Q6OJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%sJPq%s
JPq%sJPq%sJPq%sJPq%sZVpQsqc*Ppr`9#"r`K&&ra5Y4raPk>rbDOOD#eGPEW11]H2`<mL&Qo-NrG@D
Rf8uZVuE^qZMqK8^Ac+NbPocce,J&"h#?:3kPj`Fm/HMRo)A:\p\sseqYU6jro=%=s8Murr;QTmqYp9h
p\sganG_kTli-&Gj8Rs8g&BV&df.Jiao9-U]Df;=YPtL"V>d+dQi<6KNW+b5L&QT$GlDmcEW0kTD#S/J
B)Z??@/aO4?2e(*>4Pe'=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(=+OG(
=+OGW=7o\p=oMY)>lJ%.?iFI4@fC$>B`;fHDZOit!-/!\rd4Wmrdt-+rf$i=rgEbUrhBCmriZ7.rkABJ
rl>#_rm:YqrnIG.ro3q?rosFLrp]pXrq69brqQKiqu,IQj8]#TrquclrqQKerq-3ZrpKdOroa:Bro!e1
rn.5!rltGbrl"fLrji$6ri5sqrh07Yrg*PFreg]1rdk&rrd+Qdrc%jTrbVRIrb)4@raGe6ra,S0r`o,#
nlik4JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ[P,JQ]Wgpfd>pqcs,,
ra5Y4raYq<rau.DrbMLNrc/$^FT?R`GlE3lJc:B&N;en;Pl@3PTDk\dXo>R(\,O,@_Z%XUci2>kfDaV*
hu;[8kl0lHmJcVSo)A=]q#:*gqtp?Ms5X.Yrr2lqr;QQlq#:$eo`"@Zn,D\Qkl0`DiVqX3gA]V$d/M;h
`r<aP]`,><Xo>=!UAgY]RJrHMNW+h7L&QW%If=TkFoHI]E;j\QC]8#HB)Z??@fBd.?gh=;?%H:4?%H:4
?%H:4?%H:4?%H:4?%H:4?%H:4?%H:4?%H:4?%H:4?%H:4?%H:4?%H:o?1M>!?i+71@K'a8AH$6@B`;cG
DZ4SREW1+^G^'45rd=]qre(3+rf@&@rg3VUrhBCjric=,rji$Erl"fYrm:Ynrn.5-ro*k;rosFJrpKdU
rq$-_rqQKgrqlTki;_j;rr2oqrquclrqQKerq69\rp]pTroj@Dro="7rnIG(rm:YirlP/UrkABAriuI)
rhoagrgs+VrfR2?reg].rdt,urd"KfrcJ-YrbqdQqeH"Arb)4@pg^U=JRX1>JRX1>JRX1>JRX1>JRX1>
JRX1>JRX1>JRX1>JRX1>JRX1>JRX1>JRX1>JRYrpojdu3ral(Arb2:GqeZ7Mrc%jWrce?g!I]@rIK"cr
L]3/0NW,.@QN!ERUAh%hXT#R*[f3u>`;[gVc2Q/jec+;%hu;U6k5OZFm/HJQo)A:\p\t!fqu6NjrS[_9
s8N#srVl`oqu6Ejq#9scnc&%Wmf)JMkl0ZBhu;I2f`'A!d/M2e`;[UP])K&8Yl:[%U]-qcS,S]PP5^I?
M#N/.K)U2tHiA9hFoHI]E;jeTDZ4JLCAV]AB<l-#Aq=QFAq=QFAq=QFAq=QFAq=QFAq=QFAq=QFAq=QF
Aq=QFAq=QFAq=QFAq=QFB!Z+KBD#s8CAr#JD>nJQE;jqXG5c^bHN&BpJUmfPre19-rf$i<rg3VPrh'1e
ri,n"rjMg:rkJHPrlP/brmUktrnRM2ro3q?rp0RNrp]pYrq-3arqZQjrquZli;_j;rr2oqrqucmrqZQg
rq??^rpg!Vrp'LIroX4<rndY.rm^qqrltG_rl"fLrjMg4riZ6urhTOcrg<\NrfI,<reg]0rdautrd=]i
rce?aqfDaUrbqdRrb_XNXD<B&JSTgPJSTgPJSTgPJSTgPJSTgPJSTgPJSTgPJSTgPJSTgPJSTgPJSTgP
JSTgPY\X,Pqec=MrbqdTrc.gWrce?frd=]prdt6*K`Hi+M#NG6OT(OES,SuXU&M"iX8]@&\Gj,>_>_OT
bPolffDaJ&h>ZC4jSnBBmJcPQnc&1[p&=acqYpBkr;6KOs5X.YrqlZnr;QQlq>U-fo`"F\n,D\Qli-,I
j8S$:h#>q)eGdenao9?[_>_%F\,NZ3XT#3uU]-nbSGnlSOoCIAN;eY4LAlf(JGt&tI/\EjGlDmcFSg.J
EP$1@E.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE.MtZE40`YEVjeUF8g=]
G5cacHiAElIf=irJc:?%M#iNm!/pi;rfd>HrgWnZrh9=hriZ7*rjMg>rkSNPrlkAermUl!rn@A/roF(@
rp'LNrpTjWrq69arqQKhrql]nqu5ORi;`]QrquclrqZQfrq69_rpg!Urp9XKroO.=rndY,rmq(srlkAa
rl"fLrjr*:ric=&rhoahrh'1Zrg3VLrfI,<reg]1qh+lurdOiord4Nfqfr!^pia8lJTZNdJTZNdJTZNd
JTZNdJTZNdJTZNdJTZNdJTZNdJTZNdJTZNdJTZNdJTZNdJT\DDpicOYrcnEfrd+QjrdFcqrdb!"re:?+
re^W7!KW9AO8b=AQi<EPT)PMaV>dLoZ2V-0\c0DD_Z%UTcMl5jec+;%h>Z@3k5OQCli-APnG`%YpAXgc
q>U9jr;QZlro!h7s82cor;6?iq#:!do`"C[nG_kTlMfuGjo43;g]#n*ec*qpc2Pc__#D(I\Gii6Yl:^&
VZ*CjT`1G[RJrKNOoCIAN;e\5M#N,*K)U?#JGt&tIJA3bHb4TTH@^BnH@^BnH@^BnH@^BnH@^BnH@^Bn
H@^BnH@^BnH@^BnH@^BnH@^BnH@^BnHG"RsHhDdcIf=irJGt/tK`6c+MZ/S6NrG1BP`u04rg3VSrgs+`
rhoapric=/rj_s@rkn`SrlY5ermUl!rndY3ro3q?rosFKrpTjVrq-3arqQKgrql]mrr)`ni;_a8qu6Tn
qtpBgrqHEbrq$-YrpTjQroj@Dro*k6rn[S+rmLelrlb;[rkeZKrj_s9rilC(ri5sorh07_rg`tTrg*PI
rfI,?rf-o7re^W0qhG*'pk/?n]7GNaJUrB'JUrB'JUrB'JUrB'JUrB'JUrB'JUrB'JUrB'JUrB'JUrB'
JUrB'JUrB'[Xn4*qh+m$re:?+reLK1qi(N8rfI,Brg!JN!LoPYS,T&ZUAh"gWW'+#Z2V-0])KDB_>_LS
ao9WceGe%ug]$+0iVqs<l2L#Jmf)_To)A:\p\sseqYU3irVQTPs5<qSrr2lnqu6Ejq#:!doD\:ZnG_hS
l2KoGjSn*:hYu7.ec+"rc2Pf``r<jS^&GVB[JmE0Y5YI#VZ*CjT`1P^SGnrUQN!-JOoCIAO8b.9MuJV/
M>i==LOk53LOk53LOk53LOk53LOk53LOk53LOk53LOk53LOk53LOk53LOk53LOk53LOk5kL\6JuM>iG1
N;en;OT(CAPQ$pJR/WTSScPIU!2'7crhoapriH+(rj;[7rkABIrl+lZrltGirn%/&rn[S4ro="?rp'LL
rpTjVrq$-^rqHEerqcEggAg+2qu6TnqtpBhrqQKerq-3[rp]pUrp'LIroa:>ro!e3rn.5$rm:YhrlY5[
rkSNIrjr*:rj)O,ri5ssrh]Ugrh9=_qjRMOrg*PJrfd,>rfI,?pl;kDJW55?JW55?JW55?JW55?JW55?
JW55?JW55?JW55?JW55?JW55?JW55?JW55?JW7*tpl>64rfI,Arf[8ErfmDKrg<\Qrg`tYrh9=d!MuUm
V>dInXo>L&Z2V63\c0;A_Z%ORaSsNbdJhYpf`'Y)i;Vd9jo4KCm/HDOnG`%Yo`"R`q#:*gqY:$Cs5<qS
rr2lqr;QTmqYp9hp\smco`"F\n,D_Rm/H8Kk5OE?hu;C0gA]\&d/M>ibPoK[_Z%=L]DfD@[JmH1Yl:d(
WrB!sV>d4gU&L\]T)P8WRerKOQhZlVQ%>3OQ%>3OQ%>3OQ%>3OQ%>3OQ%>3OQ%>3OQ%>3OQ%>3OQ%>3O
Q%>3OQ%>3OQ%>4,Q2?mEQi<BORJr]TSGo)YTDP;\U].(gVuE^tXK2E'ric=,rjDa9rkABHrkeZTrlP/b
rmC_prn7;-rnm_6roa:Erp0ROrpTjWqt9s_rqZQirqlTkrr1XOgAh'KrqucmrqZQgrqHEbrq-3[rpTjR
rp'LGroO.=rndY0rn7;#rmLekrlG)Zrl"fOrkABDrj_s9rj)O-riZ7$ri#gorh]LerhBCbrh&tWYFL06
JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]JXh:]Xdo'Urh'1_rhB:crhf[o
ri?%#ricF/Z2h30[JmZ7\c0;A_>_@O`r=0\c2Q,if)F;#g]$+0iVqp;kPj`Fm/HJQnG`%YpAXgcq"spe
qtp?krn@D+s8N#srVl`oqtp6hq#:!do`"F\nG_nUm/H5JkPjTBi;VU4g]#k)f)F(rcMl&eaSs0X_u@IN
^&GYC\c0#9Zi76/YPt['X8&[nW;`^oV>d:`UU[%LU4K%iU4K%iU4K%iU4K%iU4K%iU4K%iU4K%iU4K%i
U4K%iU4K%iU4K%iU4K%iU9gTnU\gkaV>d@kVuEXoWW&stXT#@$Yl:p,Zi7B6\$l@Hrjr*BrkABKrl4rX
rlb;ermC_prn.5(rndY5ro="@rosFJrpTjUrpp'\rqHEerqZQirql]mqu-NngAfn,rr2fnrquZirqZQg
rqHEarp]pUrpK[Lroj@Bro3q7rnRM,rn%.trmC_krlb;`rl4rSrk\TKrk/6Brjr*<rjMg5qm-+'qlfn"
n#aF-JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZOF(JZQVfm&g/fqlg"'
riuI/rj;[4rjVm:rk&0D!PcAL^])(K`;[aTans?^ci2Dmec+8$hYuF3iVr!=kPjcDmJcSRo)A:\p&=^b
q#:-hqu6NmrVQTGs4@;GrVQKkq>U0gp\sj_o)A.XmJcGNlMfuGjo46<hu;I2g&BV&ec+"rci22gb5TK]
a8X$V_>_7L^AGPA])K5=\,Ni5[JmQ1ZhUi9Z%902Z%902Z%902Z%902Z%902Z%902Z%902Z%902Z%902
Z%902Z%902Z%902Z%90gZ1YF"[.q'.\,No:\c05<^&GeG_?%Tn!6"lVrlG)]rlkAfrmC_prn%/&rnRM1
ro*k;roa:Frp9XPrpTjVqt0m]rqHEerqcWkrqucoqu54IfDkXEqtpBhrqQKerq??`rq$-Zrp]pTrp0RI
roa:Bro!e5rn[S,rn.5$rmUkprm1Sfrlb;_rl>#WrknWLrkSNIrk8<Dqn)j=o"!\gfscOAJ[^3>J[^3>
J[^3>J[^3>J[^3>J[^3>J[^3>J[^3>J[^3>J[^3>J[^3>J[^3>e@4JJossk/rk&0Brk8<GrkSNLrkn`R
rl+lW!Q`=^aSsB^cMl/hd/MPoec+5#h#?./i;Va8j8S6@l2L#Jmf)\SnG`"Xp&=[aq"smdqYU3irVQTG
s4@;Jrr2lqr;6BjqYp<ip\X[`o`"@Zn,DbPli-,Ik5OH@iVqd7hYu:/f`'M%eGdkpd/MAjc2PrdbPoW_
aSs3Y`;@IL_YCtE^pUq.^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N^Oa.N
^TbKM_"bbF_u%CL`W!pWao9K_bl5lgcd)U;rm:YmrmUktrn.5(rn[S2ro!e8roa:Erp'CJrpTjVrq$-]
rqHEerqZQirql]mq#1*hfDjJ&qu6Kkrqucmqtg3brqHEbqssaUrpB^Nrp'LHroa:Aro*k7rndP,rn.5%
rmh"srm:Pgrlk8_prWNVqoATRm)AG3f#*'VJ]!&VJ]!&VJ]!&VJ]!&VJ]!&VJ]!&VJ]!&VJ]!&VJ]!&V
J]!&VJ]!&VJ]!&Vf>I0tj2L]3rlG)\rlY5`rlkAerm1SjrmChrdf@kreGe%ufDaM$h#?41ir8$<jo4KC
lMg/Lmf)\Snc&.Zo`"R`p\sseq>U9jr:U$9s4@;GrqlZnr;6?iq>U0gp\sjbo`"I]nc&%Wn,D_Rl2KoG
kPjTBjSn-;i;VX5h>Z+,f`'M"ec+(qdJM;ici25bbkTBMb/DDQaaqQbaaqQbaaqQbaaqQbaaqQbaaqQb
aaqQbaaqQbaaqQbaaqQbaaqQbaaqQbaiMTjb4s0TbkoZ^chl)ge,.Yof)aOVrRh,(rnRM0rnm_5ro3q>
roa:Erp0RMqsXORrpp'\rq6']rqcWkrquQirr1=FdJs4Fq#13irql]krqZQgrqH<`rq-3ZqsXOOrp9XM
roj@EroX+<ro*k7rnm_2qqM,'rn.5%qpk\qrmUYjpsJc]^<_AVJ^8nnJ^8nnJ^8nnJ^8nnJ^8nnJ^8nn
J^8nnJ^8nnJ^8nnJ^8nnJ^8nnJ^8nn_U%SqrmCMhrmUboqpk\trn.5'rn@;*!8RS1rnm_5ro*b8roa:F
rp0RMrpKdSrp]pYrq-3_rqH<bqtg<hqu$Hlqu4n@cN!S9rqucmqt^-arqHEbq""FRrpTjQqs47Groa:C
roO%:ro!e5rndP-rnIG+qq:l!rn$hol.*r+J^f8#J^f8#J^f8#J^f8#J^f8#J^f8#J^f8#J^f8#J^f8#
J^f8#J^f8#J^f8#J^hcjk10.Urn%&"ptGW#rndY3!T;l9i;V^7j8S-=jo4HBkl0iDm/HGPn,DhUo)&(Y
pAXgcq#:*aqtU-erm(Phs82fjrVl`lqYp<iq"sgbo_\7Znc&%Wn,DbSmJcGHkl0cEk5OH=iqq[5hu;L-
h>Z4,g\BLefuhrufR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fR_\+fZ;_3
g%*krg\]e*h>?(+hu;R5iVqj<jQ$=%roO.Aroa:Erp'LKrp9XQqsaUTrpp'\rq69aq"XjbrqlTjq#1*h
cMtucrr2]krqucmq"jm_rqHEbrq-3]rpg!WrpTjSrpB^Orp0IHqrn%BroX4@qr@8+qr"R5J_u%9J_u%9
J_u%9J_u%9J_u%9J_u%9J_u%9J_u%9J_u%9J_u%9J_u%9J_u%9J`!B_qr%8.qr7V8qrIb=roX=GkQ'iG
l2L#Gm/-5Jn,DhUoDA1ZpAXgcq#:*dqYpBhr:p6irlG,Ys7Q?ir:p0gq>U0gp\=I]o_\4VnG_nUmJcJL
lhK`DkkjQ6jo4?9j0IZqidp*?idp*?idp*?idp*?idp*?idp*?idp*?idp*?idp*?idp*?idp*?idp*?
ij7Y>j7q^1jnn3;kPj]El29lGlhg)Hn,DhRo)A7[o_\@Zp\sseq>U9gr:9g*s2G$8rqQHkr;6BjqYU*c
q#:$epAX^`oD\=Xnb_hTn,DbPmJcJLlMg&7kk4,Kk(2ZGk(2ZGk(2ZGk(2ZGk(2ZGk(2ZGk(2ZGk(2ZG
k(2ZGk(2ZGk(2ZGk(2ZGk(2['k47^+kkjWDlMg,Hm/68OmecJPnG)PQoDA1Wp\Xa\qYpBkr:U$crl+oP
s8N#grVl`iqYU*cq#:$epA":Wnb_hKn+c>GmJH7Ol[eAQl[eAQl[eAQl[eAQl[eAQl[eAQl[eAQl[eAQ
l[eAQl[eAQl[eAQl[eAQl[eB%lhKiDmIfo?mfDqI!:^!Xrpp'[rq-*\rq??cqtTs_rqlTjq#1!e^]1tH
n,<%Yqtg<frqQBbq"F^Zqt'URq!n@Qm-j`;\F"k7JaJ$UJaJ$UJaJ$UJaJ$UJaJ$UJaJ$UJaJ$UJaJ$U
JaJ$UJaJ$UJaJ$UJaJ$UZgIPUp$_SCq!n@Srpp0_o_nFZp&"I^p\=O_q=sjar:U#ss1JC,rqQHer;6Bj
qYU*Zq#:$epA":ToDA+@n[S(>n:C([n:C([n:C([n:C([n:C([n:C([n:C([n:C([n:C([n:C([n:C([
n:C([n?_WKnbD\SoD%tUp&Og`p\"=\q=sgcqtp<^rVlf)s0Mb#rpp$er;6BaqYU*cq""1Sp@@m[oRZXc
oRZXcoRZXcoRZXcoRZXcoRZXcoRZXcoRZXcoRZXcoRZXcoRZXcoRZXcoRZY7o^_\Mp@@qYq"Ojaq"a^]
rqlKgo)8@_Zi@'*n,<%Zq"sj_j7rWJVY5T7JbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZgJbFZg
JbFZgJbFZgJbFZgV"X][l1k2P!;ZEdrqlKgl2@X^WrMknn,<%Zq"sOVo(f0XJbXfkJbXfkJbXfkJbXfk
JbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbXfkJbZ&9p%dnL!;cTiqu#p]o)>ZhS,`0\k5FcHT_j<;
Jbt#qJbt#qJbt#qJbt#qJbt#qJbt#qJbt#qJbt#qJbt#qJbt#qJbt#qJbt#qT)7mPq>Ksao)>$VO8o"S
h>O#EJc()sJc()sJc()sJc()sJc()sJc()sJc()sJc()sJc()sJc()sJc()sJc()sJc)#8kPbAXq#6-M
LB$E8Qi2L6Jc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uJc1/uP5XnLrVhBJ
!<7WMJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?J
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$r;V?JJcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$r;V9
~> %APLeod
EI
48 0 0 48 296 2 cm
BI
/Width 144
/Height 144
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcF-tJcC<$JcF-tJcC<$JcF-tJcC<$JcF-tJcC<$JcF-tJcC<$JcF-tJcC<$JcF-tJcC<$JcF-t
JcC<$JcF-tJcFF'm/GW8m/Ht`JcF-tJcFa0q#9"Gqu#1HrVcisrdk*us+14?s760UrT=%Wqs"%Er;llq
p&9OBhuA9-rVuZln,<.]qtoXSj8&0?q"t$fr;?-aq#5jEmf.k<rVu?bqu$-arqcNf_YF-+q"jsdr;69e
o)8ReJcG9?LB%&Jp&4mfqtos\rqZQgo(Uu6p%S.SrqZNhr;-3cqu$-cq#5jEqYuWVrr2KerquZjq"k!c
rqQ0\rq?6^qt0dWo()JDq""4Oq"4IVrq?<br:g3crqZ?crqlTjp&4[bKE%#4p&4mfp&"aaq"Xj_qtBp[
rq-*ZrpojSqsaURrp]ULrp]pUqsaCNq""FUqt0j\r:^-aqtU'arqcWkqu#p]KE%>=q#:'erquZjq"jm_
qtL!\rq-*Yrpg!Wp$_SAn*T]6qsX4IrpfsZr:Km[qtL*brqZ?cq#'pcq#66PU&Xoeq#13iqtpBhqt^-a
rqHEcrq-*Zq!n@QqsXFMrp9OJrp'CFj66C)rp'CIrpBUNrp]pU!:U$YnG_tWo)A7[o_\=\pAXgcq#:*a
qYU3`rVQSWs.TJ`rVl`iqu6Ejq"sg_pAX^]o)A1YnGD\RmJcJIli-/JkkjQ?k2YRrkPj]El2L#Gm/?;P
mHsoBrpTjUrpp'[qt0m]rqH3_rqZQjqu$$`P5hH[qu69erqucmq"jm_rqHEcrq-3]rpg!WqsXFMrp9OJ
rosFGroa:CroEt:qr6bsro3q;p#Q#5roj@Hrp'RN!UT1PmJH>NnG_nUnG`%Vo`"R`p\sseq>:$fqtp<d
rV6A]s/Q+urqQHkr;6BgqYp<iq#:$epAX^`oD\=[nc&%Wn,DbSmJcGNl2KoGkPjTBjSn3:iqq[2htu:*
h>#duh>Z:1htZ./iVqj9j8S-=joFQFkNDj.rp'LKrp9XQqsaLQrq$$[qtL*bq"k!eq#1!eT)Yhjp&4[_
qt^6drqHEcrq-*YrpTjUrpTjQqs47Groj@EroO%:rnm_5rnmV.rnI5%j4O7_rnI>*rndY3ro!e7ro4">
!T`>@jo4HBkl0iGli-8Mmf)\SnG`"Uo`"R`p\Xa_q>U9gr:U#[s02P#rqQHkr:p-fq"sgbp&=U_oD\7V
n,D_Rm/H>Mkl0cEk5439i;VX5h>Z4/g]#n*f_a:tec+(ee+hGiec+2"f`'S'gAB\)hYuC4huVcoro*b8
roa:ErosFJqsO@Nrpp'\qtC$`rqQKgrqcWkqu$6fqu3DkZiC%(q#1*erqcWirqQKeqtC$]qssXQrpB^N
roj@EroO%;rnm_5rnm_1rn7;'rmq(uqpYGhrm1Sjqp5/bp!*BZrm:Yjqp>5frmUktrn%/%rn@G.!SlK0
hYuF3i;Va5jSn?Akl0lHmJcSRnG_tWoDA1Zp\Xa_qYpBhr:p6irhoe&s7lQlr;6Bjq>U0gp\smco`"I]
o)A.Xn,DbPli-/Jk5OH@j8S!9hu;I/gA]b(fDa>"df.VjchP`]b4s*OaS<mVbPTN_cMl/hd/MJme,Ikr
ec=;&f@U#TqqV),ro3q=roa:Erp'CIqsaUTrq$$\qtL*bqtpBjp&1fg\c;R+qu-NlrqlThrqZQgrqHEb
qt'^RrpKdProsFGroX4>ro*k6rn[S/rn@A(rmq(trmC_lrm1SgrlkAbrlP/\rl=oTrl"9Cpr*'Krl>#[
rlb;bqp,2frm:_p!RoNsec+5#gA]n,hu;R5iVqp;jo4KClMg,KmJcSRnG_tTo`"R`p\ssbqYpBkr:p6f
riQ45s8N#mrVQKkqYp9ep\sjbo`"I]nGD\Oli-,Ik5OH=i;VU4g]#k)f)F.td/MAjcMPfaaSs3Y`;[XN
_#(nG^Abh@]`,P9]`,VD^\bhD_>_@O`r=$Xao0Eabfp(5rmC_ormh##rn@A.rnm_5ro3q=roX4Eqs=4L
rpp'\qtC$`rqQKgrqcNiq#13kYlDB9q#13iqtpBgrqQKerq??`rq$-ZrpTjSrp9XKroj@Cro3q9rnm_/
rn7;%rm^qrrm1Sgrlb;_rl>#Wrkn`OrkSNHqn)j=rj_j7ppU(-ppU12rj_s<rk&'@qnW3Jrl"fV!6>2^
aSs?]cMl/hdf.erf)FA"h#?72ir8$<kPj`Fli-;Nn,DhUo)&(YpAXgcq#:*gqu6NdrNQ==s82fmrVl`o
qtp6eq#:$eo`"C[nG_nUmJcJOlMfuGjnn!8hu;F1f`'J$dJhMlci2/faSs6Z`;[UP_#D+J]`,PB\Gir9
[JmQ1ZMq-.YkYEpYl:s-Zi7?2[JmZ7\Gj):^&GhH_#V@R_o)JnrlP/_qp58hrmh##rn@A.rnm_5ro="@
roj@IrpKdSrp]pYrq-3_rqHEerqZQirql]mq#1*h[f=>Hrr2]kqtpBhrqQBbrq-3]rpp'XrpTjRrosFG
roO.=ro*k5rn7;'rmh"prm1ShrlP/\rl"fOrkJHGrjr*>rjDX/qlg"$ri>prql&t]ql'LpqlKe"ric=*
rj2U2rjVm<!5&?F]`,_G_>_@O`r=-[bl5ugdf.bqfDaP(h>Z@3j8S-=kPjcGm/-;Onc&.Wp&=^bq#:*g
qYU3irVQT&s2G$;rqQHhqu6Ejq#:$epA=IYn,D_RlMg#Hk5OB>i;VU4g]#h(ec*tqcMl&eao99Y_u@FM
]`,MA\,Nc6Zi70-Y5YO%WrAsrVuEOlV#I.aUA1D\U%kAZV#I7jVuEXoX8]:$YPtg+[/dW9[^Q1Grk8<F
rkeZSrl>#\rm1Skrm^r!rn7;,ro!e8roO.Crp'LMrpTjUrposYqtL*brqcWkrquQi[f=>Hrr2fnrquZi
rqZQgrqHEarpg!WrpTjQrp0RIroX4?rnm_1rnIG)rmUkorm(McrlP/WrkSNJrk/6>rjDa1rilC)ri?$s
rhf[irh9=arh'(ZqjdGNopl#Prh'(\rhBCerh]Ulri,n!riZ=,!O8p/[/RT7])KJD_#D4M`r=-[bl5ug
e,Insg&Bk-hu;U6k5OQClMg5Nn,DhUoD\C]pAXgcq#:-hqtp<grVlf,s3(H>rr2lqr;QTmqYp<iq#:$e
p&=U_o)A.Xn,D\Qkl0cEjSn*:hu;F1fDa>"d/M>ibl5]__u@LO^Ab\B\,N]4Yl:g)X8]!qV#-haTDkA[
RJrTQQi<6HPPC:;OT(C>P5^[EQ2[*KR/WQRS,T#YTDkM_U]..kW<&utriQ1'riuI1rjr*BrkSNPrl4r[
rm1SjrmUl!rn@A/ro*k:roX4Erp0INrpp'\rq??crqQBerqlKhqu4A1bQ%A9qtpBhrqQKerq??`rq$-Y
rpTjRrp'LGroO.;rndY0rn7;#rmLekrlG)Zrkn`Mrk8<Arj;[1ric=#ri#gmrh9=argj%Vrg<\Nqigo=
rf@&=pl,31qi(E3qiC`<rf[/Drg3VQrg`t\rh9Cg!MlOjVuE^qXo>U)[JmW6]`,_G_Z%RSb5TZbdJh_r
fDaP(hu;U6jSn?Al2L)Ln,DhUo)&+Zp\sseq>U9drVQT/s3CZDrqQHhqu6Hkq#:$ep&=R^o)A+Wm/H>M
kl0]Cir7j7g]#q+ec*qpcMl#d`W!aR^](hD\c/r7Yl:g)WrAjoUAgeaSGnuVQi!!DO8b1=N;JM3M#N2#
LAlu-M#N81MuJ\7NW,"<OT(FBQ2[*KRf8lYT)kRVrh9=gri#guric=+rjMg<rk8<Irl>#[rm1Skrm^r"
rn[S1ro*k=roa:GrpKdSrp]gWqtL*brqcNirr)`n^]2UZrr2fnrquZirqQKerq69^rp]pUrpKdMroj@C
ro!e4rnIG(rmh"orlkAarkn`NrkABBrj2U/riQ0urhf[frgs+Zrg<\Lrfd>Brf-o8re^W/re19'qgn`r
rdaZkrdautqgeZsrdt-&reLK/reg]8rf@&?rfmJL!LB&NS,T&ZU&LkeWW'!uYl;'0\,O)?_#D4Ma8X?_
ci2AlfDaJ&hu;U6j8S3?lMg/InG`"Xo`"Uaq#:*gqtp<grVlf5s3CZArVl`oqu6Ejq#:$ep&=U_nc&%W
n,D\Qkl0`Dir7j7h>Z+,eGdnqbl5W]`;[LM])K5=ZMq$+XT#-sU]-tdSGnlSQ2ZpFO8b.<MZ/D1L&Q]'
JGt&tIf=`oHiA?gH1cF]HM`'dI/\WpJc:<$K`6c+M#N>3NrY:COcfX-rgEbTrh'1brh]Upric=+rjMg<
rkABLrlG)]rm:Yormq)'rnm_6roF(Crp0RNrpTjUrq$-_rqHEeq"sserr0e7eGoFFrr)iorql]krqZQg
rqHEarq$$UrpB^MroX4?rnm_1rn@A%rm:YirlP/VrkSNGrjDa2riZ7"rhoahrgs+Zrg<\JrfI,=re^W1
re19$rdXorrd4Wjrd"Kerc\9`qfMLPrcJ-^rce6ard+QlrdOirrdt-%re:?/!/gl9MuJe:PQ$jHS,T#Y
T`1eeX8]7#Z2V63\c0AC_u@[Tc2Q,ieGe,"h>Z:1iVr$>kl0oIn,DhUo)&+Zp\t!fqYpBhrVlf5s4%)G
rr2lnqu6Hkq#:$ep&=O]nc&"VlMg&Ijo46<i;VL1ec+%sc2Plba8WmR]`,J@[/R6-XT#0tU&L\`S,S]P
PQ$R@MuJP3K`6K#If=cpH2`'fFoHF\EW0qSDZ4MPDZ4MJD#S>OD>S5JDuO_TF8g:\GQ)pfHiAKnJcLE(
K7j/Yrf$i9rfR2HrgNhXrhKIhri?%%rj)O6rk8<Grl"fZrltGirmq)%rnm_8roF(Arp0RMrp]gWrq??c
rqQKhqu$Hlqu4\:eGo=BqtpBgrqQKerq$-YrpTjProj@Ero*k5rnRM)rmC_krlY5Zrkn`JrjVm6riZ7#
rhoahrg`tVrg!JErf6u7re:?(rdOiord+QfrcS3]rc.pTrb_XNrbD=EmqD]7qeH"Erb_XQrc.pXrcS3`
rd"Kk!.FrtIf=otL&Ql,NW,(>PQ%!LSc5;]V>dOpXo>[+\Gj)=_#D@Qao9TbeGe%uh#?41iVqp;kPj`F
n,DhUo)A:\p\sseqYpBkr;QZlrlG,ks8N#prVl`lqYp9hp\sjbnc&"Vmf)MNk5OH@hu;F1gA]Y%cMl#d
aSs!S^Ab_CZMq',WrAgnUAgY]Qi<6KNrFt9M>i2-J,XlqHiA3fFoHC[DZ4MPD#S2KC&VcEB)ZB7AG]m6
AG]s8BDuTAC]82MDZ4VSFT-IaGl`29rd=]prdk''repc8rf[8JrgNhYrhf[nriQ1-rjVm>rkeZSrlkAf
rmLeurn[S2ro="?roj7Irp]pYrqHEerqcWkrqucoqu4\:fDkjLrr)iorql]krqZQerq$-[qsOIMroa:@
ro!e1rmq(trltGbrlG)Srk&0>riuI'ri#gjrg`tVrg!JDrf-o6rdt-"rd4WhrcS3[qec=Jrb2:Drac"<
raPk7qd08-mp,Wnra5P1raYq<rb)4FrbMLLrbhdU!H<#WFSgFaIf>$"L]352OoCRDRJrcVU&M"iXo>R(
\,O&>^])4Ob5TWadJhetg]$+0j8S-=lMg2Mmf)bUp&=[ap\t$gqu6NjrVlf>s4@;JrVl`oqYp9hp\sj_
nc%qTlMg#Hjo43;hYu4-df.Vmb5TE[_u@=J[f3W4X8]!qV#Hk_Qi<6KO8b"8L]2r*IK"QlGQ)X^E;j\Q
C&VcEAc?3=@fBa3?2Ik*>5h[n=Sl7u>5hb*>l.n-@K'g:Ac??AB`MoLCMWoercA']rd+Qmrdk''reg]7
rfd>KrgWn]ri#grrilC3rk&0Erl4rYrltGkrmq)(ro!e8roa:Hrp9XRqt'g[rqQKgrqlTkrr1+@h>dBO
rr)iorql]jrqHEcrq-3[rp]pSroj@Dro3q3rn@A&rm:Ygrl>#SrkABBriuI*ri#girh'1Wrfd>Breg]/
rdt,srd"Kerc8!TrbMLHral(>raG\0r`T5(r`T5&pf?i`pf@8nr`K/&r`];+ra5Y4raYn>!G?'EC&W&M
E;k"ZGlE'hJc:K)MZ/Y8Q2[-LS,T5_VZ*Xq[/RN5]Df_I`r=*Zd/MMngA]q-i;Vg:lMg,KmecSSp&=ac
q>U9grVlf>s5!_Prr2lqqu6Hkq>U*ep&=O]mf)SPl2K`BiVq[4g&BV&dJh>gaSs'U])K2<ZMpm'VuEFi
Rf8ZQP5^C=M>i2-IK"NkGQ)R\DZ4ALB`;WCA,]g6>khJ$<r5hm;Z9PU:]=2i;>X8g<qohs>lJ+2@0'eF
ral(Brb;@KrcA']rd"Klrdk'(rf-o<rg3VQrgj%criH+'rjVm>rkJHQrlkAfrm^r#rnIG1roO.Brp9XP
rp]pZrq69arqZHhrr(%?h>dBOrquZirqHEcrq-3Zrp9XMroa:?ro!e0rmq(trlb;]rkn`JrjMg4ri?$p
rhBC]rg!JGrf$i1re(2urce?arc.pRrb;@Cra>_4ra#M*r`B)!qc!Jkr_WSiqb@&`j%K/Ar_NMir_req
r`/r!rEB;,>Q.t.@fBp;B`;lJDuOnYH2`3jKDpZ*MZ/_:QN!<OT`1hfWrB='\Gj,>_u@^Ub5TfffDaJ&
h>ZI6jo4NDmJcSRo)A=]pAXjar;QZ<s5!_Prr2imqYp6gp&=R^n,DYPl2KiEi;VO2f`'A!dJh8e`W!^Q
\c/o6YPtL"UAgb`Qi<-HNW+\3K)U9!GlDgaErKqTBDuKA@fB^5>lIh(<rQ+u;Z9Jk:A[cb9`@Z]8cD6Z
8G,LP8H)-V8Gc!X9)D?^:]=5j;Z9\p<WQ6%r`T5-raGe;rb)4Frc.pZrce?hre(3(repc>rg*PQrhKIj
riZ7,rjMg>rl4rXrm(Mnrn%/(rnm_7rosFJrpKdUrq69arqQBfrr)`ndJr&&qu-NkrqQKerq69\rpTjP
rosFFro*k4rn@A%rm(Mdrl"fLrk&09riQ1!rhBC]rg<\Ireg]0rdk&orce?^rbVRJral(;ra5Y/qc3Vp
r_NMgr_3;`r^m)[nj`UIksYM>pdY-Nr^d#]r_3;cr_WYn!E)hp<Voqu?2e@5Ac?BBDZ4VSFT-^fJGt3#
MZ/V7PQ%*OT`1hfYl;!.\Gj;C_Z%[Vci2Alf`'_+hu;d;lMg,Kn,DqXo`"Uaq>U6ir;6K@s5!_Sr;QTm
q>U0gp\sganG_nUlMfrFj8S!9g&BV&df.GhaSs$T])K/;YPtI!V#HtbQ2ZsGN;eM0Jc:#qFT-=[D>n5J
Ac?-;>Q.h*<W5qr;>s>i9`@]a8GbmR7/fRQ6MNk25kmYE6iKLN7K,gV8H)3[9E7fg:/:dcr_reqr`T5*
ra5Y8rb;@Hrc%j[rd"KnreCE/rfI,FrgNh[ri,n!rj)O9rkSNPrlkAfrmh#%rnRM5roj@GrpB^Urq$-_
rqZQiq#&P>i;`fUrqucmrqZQgrqHEarpTjRrosFCro3q6rmq(trm1Sarl"fNrj_s7riH*nrh'1YrfI,=
reLK'rdFcirc.pTrb;@AraGe3r`T5%r_`Yjr_EGcr^m)[qaCENr^-TMq`t$Cj$*H,r]pHKqa19Mr^6ZQ
r^QlY!(m8a9)_Qa;#X>k<W6/#>Q/(1Ac?BBD>nPSFoHdfJc:B&N;f%?QN!KTV#I=lZ2V94]Df_IaSsE_
eGe/#h#?72jo4HBm/HPSoD\F^q#:*ar6bQ&s8N#sr;QTmq>U'doD\:ZmJcJOkl0Q?hu;=.eGdkpb5T<X
_>_"EYl:^&V#HtbRf8HKMZ/D1J,XfoGQ)R\C]8#H@K'U4>Q.\&;>sDk:B!ia8H)-V6iKCN5lNtH4o7A:
46AU!48:r;55mhH62j4M6i]XV77I2Gr_!/`r_WSmr`&l#ra,S3ral(FrbqdYrd=]pre:?0rf6uErgs+`
ri?%)rjVmCrl"fWrm(Morn.5*ro3q>rp'CLrq$-`rqZQiqu"kAi;`fTrql]krqZQdrq$-Yrp'LIroX4;
rnRM)rm:Yhrl>#Rrk/6;riQ0urh07XrfmDAre:?'rd4Wdrc.pQral(=ra#M*r`B(sr_EGdr_!/Zr^HfR
q`t-Eq`Oj>r]9p:h)PBoofE(7q`XgA!'pWO62j:O7fGsX9E%`d;>sPo>5hh,@K'm<C&W&MGQ)meJ,Y9'
MZ/e<RJrfWVuEjuZMqH7_>_CPc2Q/jf)FG'i;Vd9l2L&Kmf)eVp&=[aq>:*;s5<qVrVlZmq>U0go`"I]
n,DSNkPjQAh>Z1.e,I_nbl5T\^AbbDZ2Ua%V>ct`QN!'HM>i,+J,X]lEW0kTB`;K??iF7.<W5qr:B!rd
9)_<Z7/fOM5Q3hF4Sq2=3VYT/2sE7"2t]003W;)=48V/>56*tH5l4"L8cDE_:B"/j<rQ5#?2eC6BDuZF
F8g@^HiA`uM#NJ7QN!<OUAh4mYPu!0^])+Lb5TffeGe2$hu;U6kPj`Fm/HPSp&=[aq>:*hrm^u+s8Mrq
qYp<ip\sd`o)A(Vl2KiEiVqR1f`':tc2Pf`_#CnD[f3B-U]-qcR/W0GMuJD/HiA6gEW0_PBDuB>>lIq+
<W5ho:B!lb8,bsV62j(F4o78=3;tl92Y]0/1tjb_2#&s-2Z>Z73;tr=3rqE)r]U6Fr]pHMr^ZrZr_3;g
r_rf!ra#M2rb)4Grbh^ZrdFcsreUQ:rg!JRrhoaqrilC6rkJHOrltGhrmh#(rndY9roj@Irp]pYrq69c
qtpBkeGnJ,rquZhrq??_rpg!Rroa:Arnm_.rmh"qrl>#Wrk8<?rj)O$rh9=]rfd><re:?#rce?`rb_XH
raYq5r`B)!r_WSer^m)Yr^-TMr]^<Cr]:$=q`"C0r\XU1r\DbRpbVn+r\a[5r\jg:!B<(<3rV5?4oR_G
6N0FQ8cDKa:]=;l=oMY)@K's>C]8>QGlE*iK`6o/OT(XHU&LqgY5Yp0])KSGao9Qae,J,$hYuO6kl0oI
mf)eVo`"U^qu6QDs5<qVr;QNkq#9sco)A+Wl2KfDir7g6fDa7uci1ua_u@:IZMq$+VuE4cR/W3HL&Q]'
HN&'dE;jSNA,]m8=oMD";Z9Di8,c!W6iK@M55RD?3W:u:2?#H-1]B,P0`*U(1A`m,2#]B52uGW63W;,>
4oR_G62jCR9)_N`;#XMp=T2Y+A,^*>DZ4eXH2`?nMZ/V7Q2[BSUAh4m[Jm]8^])=Rb5TigfDaP(i;Vp=
l2L&Knc&1[p\XjerRCl0s82coqu6Bip\sd`nG_hSkl0WAi;VI0ec+"rb5T9W^](bBXo>@"UAgJXPQ$F<
KDpB"G5c@XCAq`B>lIn*<;o\m:&[]_7K,[R5Q3eE3rV);2?#H31A`g*0`E`r0&8,P0(gms0`<^,0erYa
r\sg9r]0j=r^$NPr^Zr\r_`Yor`K/,raPk?rbh^Vrd=]sreLK8rgEbWrhob!rj2U8rkn`VrmC_rrn.5-
roO.Arp0RRrq$-_qtg<ieGn\2qu-NkrqQKerq$-Xrp9XHro3q7rn.4trltG_rkSNFrj2U(rhTO`rfR2>
re18urcnE]rb;@Dra,S+r`/qor_*5^r^6ZMr]^<Dr]'m9r\XL-q_8"&r[t`4pb)P!!&+F-0`Eg+1]B61
2?#W83rV>B62j7N8,c3]:B"2k>5he+A,^9CDuOt[If>!!NW,4BR/Wl[XT#F&\c0GE`W"-]eGe)!h#?C6
jo4QEnG`"Xo_\I`qpbZ.s82coqu6?hpAX[_mf)POk5O<<h>Z(+cMl#d`W!RM\c/l5VZ*@iRJr<IMuJ>-
HN&*eD#S&G@fB[4<rQ%s:B!c_7fG[P55m\D3W:r92?#E/0`*L%/cI<l/(#jA/,1[p/H@C(/h[,Vq_A(,
r\ja8r]C*Dr^$NOr^m)_r_WSqr`];0rb2:HrcA'crdb!*rfR2Hrh07jriZ7/rkSNNrlY5grmq)'ro="=
rosFMrp]pZqt^6geGn\2qu-Nkrq??arpg!Trp0RErnm_1rm^qkrlP/Vrj_s8riZ6prgj%Qrepc1rd=]d
rc.pOra>_1r`9"pr_EGbr^6ZOr]U6@r]'m7r\FI-r\+."r[[jqr[G9(q^MIo!@o]"/Gh(!1&`s-2#]E4
3rV5?5lO1N8,c3];>sPo>5i%2B)Z]IFoH[cKDpo1P5^sMVZ*Up[/RZ9^Ac4QcMl;lgA^"/ir8-?mJcSR
o`"Xbq>U9grn@D7s82coqu69fo`"@Zm/H5Jj8Rm6g]#\$bPoT^^](_AZi7!(T`1G[OoC.8K)U#oE;j\Q
AH#j5=oM=u9`@Z`7K,RO55mVB2Z>T51&`j*/cI<u.fLmr-h8V--1<2Z-ik_Er[Igrr[[t"r\+7)r\OO4
r]0s?r^$NNr^d#_r_WSqra#M3rb;@Prc\9kre^W6rg<\Zrhf\!rjVm=rl+l[rm1SqrndY5roX4IrpTjX
rqQKgrqlTlgAg=8qu-Nkrq69^rpTjProj@?rnRM+rmLegrl4rLrjDa0rhoaergNhJre19#rce?Xrb;@?
r`];&r_WSdr^d#Ur]^<Dr]0s7r\FI+r\"1$r[Rdnr[77__Bee#r?_Ol-Mo4j.fM!u0)dO'1B'012uYl;
5Q3tJ7fH'[:B"8m>Q/"/B)Z]IFT-[eL]383QN!QVV#ILq\,O#=`;[pYcMlGph#?41k5OcIn,DnWp\t!f
qtpBHs5s@Yr;QNkp&=R^n,DPMk5O<<gA]_'ci2#b_u@7HZMq$+U]-_]QMugAJGsrqF8fnQAc?$8<W5nq
9`@N\7/fFM3rV,<2?#?00`E['/,h!s./P@j-2o0i,Q/kg,UE@8r[.Ulr[Igsr[e%%r\=C/r\sg=r]^<L
r^Zr[r_WSrr`oG4rbVRPrd"KqreUQ<rg`t\ri?%)rjVmCrlY5arm^r%rnm_:rp0RNrpg!^rqZQjqu5=L
k5Y>VrqZQdrq$-Xroj@Drnm_-rm^qlrl4rSrjVm1ri?$krg<\KreUQ%rd"K]ral(<r`];"r_NMar^-TM
r]L0=r\a[0r\+7'r[Rmqr[7[kq]u.bV]l!_!?r`e,Q8tf-2o7j.K1gr/H.=%1&a'03;u#=5lO1N8H)?_
<W6,"@K'p=D#SVWJGt6$O8bUITDkbfZ2V32^Ac4Qb5TffgA]t.j8S?Cm/HPSpAXjdqtpBHs5s@Yr;QNk
p&=R^mf)DKjSn'9f)F.tbl5NZ_#ChBYPtU%TDk/UOoC(6HiA6gD#RuE@/a=.;#X2g8,bjS5lNhD2Z>Q4
0`E^(/H.*t-iPIl,l8hc+f?I]+TW`0rZ_4ar[%Olr[Igsr\"1'r\OO4r]0sAr^-TQr_3;hr`9#)rau.E
rcA'hre191rg<\Vrhob!rj2U<rl>#\rmC`!rndY6rp'LKrp]pZrqHEhqu5=Lk5Y>VrqZQcrpp'UroX4A
rnm_+rmUkhrkeZJrjMg-rhoafrfd>Bre(2qrcS3UraGe3r`&kmr_*5Yr]^<Dr]'m5r\=C)r[[ssr[7[k
rZqIerZV7`rZBr;nf?='!$;4`+9!D[+oW_c-2o7j.K1js/cII'2#]E44T7VF6N0OT;#XGn>5i%2BDulL
HiAQpMuK"@S,T5_Y5Ya+]`,nLb5Tcef`'\*iqr!>n,DqXp\t$drn@D7s82`nq>U!bnc%qTjo4<>hYu"'
dJh;f_Z%7J[/R-*VuE4cOoC==Jc9lmErKbO?N+.-;Z9>g8H(pS4oRMA2?#?00E*O%./kUn-2o.g+oWV`
+8[,S*Te@4)r2M1*<@0$rZ:qYrZV7crZqIir[Rmtr\+7*r\XU7r]U6Gr^Hf\r_WSrraGe;rbh^\rdOj&
rfmDLrhKIorilC5rkn`Wrm:YsrnIG2roj@GrpTjXrqHEgqu,7Kk5YGYrql]irq$-ZrpB^Hro="7rmUko
rlP/Vrk8<:ri5sorgWnLrf$i-rcS3Zrb)49r`T4tr_!/[r^$NFr]0s7r\4=(r[[srr[7[irZ_=arZD"Y
p`-LWqA]MU*<$uX*r[8\+T<Sa,Q9"g./k^q0)dR(1]BB54T7SE7/fmZ:]=Gp@/a^9D>neZIK#'%PQ$sK
U].@oYl;65_u@aVci2MpgA^(1kPj`Fn,DqXp\t$drS%;6s8Mrqqu6Bio)A.Xm/H)Fir7a4e,I\ma8WmR
]Df)7VuEIjR/W0GMZ/&'FT-4XAH#g4=8l"p8,bsV55mSA2Z>N3/cI=#.K1[n,lT"e+T<J^*r?rV)r2Fp
)<Mk9)uLZS*<$uX+9!G_,5rke-iPOn/,h4$1&a*13rV;A6iK[V:&\/l?2e:3C]8MVI/\m"OoC[GU&M(k
Y5Ys1_Z%RSc2Q8mgA^(1kl0iGn,DqXp\t$drS%;6s8Mrqqu6BioD\:Zli,uEir7a4e,I\m`r<aP])Jo4
VuEFiQi<!DM>ho%EW0eRA,]X1<W5_l7fGdS4T7;=2?#<//H.-u-iPFk,Q8hb+9!>\*<$oV)VQ(k(ucD6
)&`DlrYthVrZ1t[rZM1ar[%Ojr[Igur\+7-r]'m=r^$NSr_*5hr`oG1rb;@Rrd"KsrfI,Erh07hriH+.
rkn`TrlkAkrn.5.roa:FrpKdVrq??fqu,7Kk5YGYrql]irq$-Zrp0REro3q4rmUkmrl4rPrjr*4rhoai
rg*PBreUQ$rc%jQraGe.r`&kjr^?`Pr]C*<r\XU.r[Rmrr[7[irZ_=`rZ;%ZrZ(eRrYa<)mhan!!#b\P
rYkbTrZ(eWrZV7dr[.Unr[n+&r\OO4r]:$Dr^Zr\r_i`"ra>_=rcJ-bre193rfmDSri#gtrjMgCrl4r]
rm^r#ro!e=rosFMrpp'^rqcNjgAg=8rqucmrqQKarpg!RroF(;rnIG#rm(M^rk8<@riZ6srh07Urf$i2
rd+Q_rbMLAr`B(tr_*5Yr^$NEr\a[1r\"1"r[@alrZ_=brZ;%YrYthTrYbSMe/.lqh&$#,!>l[N)?(QR
*<$uX*r[;],Q8tf./kar/cIL(2Z>`955n"M8cDTd=oM_+B)ZoOGlE<oNW,.@T)P\fXT#X,_#D7NbPoui
fDa_-jo4KCmf)eVp&=darS%;6s8Mrqqu6?hoD\:Zli,rDi;VL1dJhDi`;[FK\,NQ0V>d.eQ2Z[?L&QAs
DZ4AL@/a1*;>s2e6iK=L3rUu81B&m).K1^o,lStd+T<G])u^cT)?(KM(Xs5q("j?'()HlcrYYVPrYkbU
rZ1t[rZ_=dr[7[pr[[t%r\a[6r]U6Kr^Zrar`K/*ral(Lrc\9lrf$i=rg`tbri?%+rkJHMrlY5hrn.5.
roX4ErpKdWrq69dqu,7Kk5YGYrql]hrq$-Zrp0REro*k2rmLejrl+lLrjVm0rhTOdrfmD=re(2rrbh^L
ra>_*r_i_fr^-TKr]:$8r\=C(r[@amrZqIcrZD+[rYthTrYb\Pq\R`sq\7a!r>#DL(B,-L)#bEP)ZC]T
*<%&Z+oW\b-N5In/H.@&2?#Q64oRkK8,c?a=T2S)Ac?ZJG5d'lN;f">SGoGcXT#[-^]).Mb5Tlhf`'h.
k5OWEmf)hWp&=darS%;6s8Mrqqu6?hoD\:Zm/H)FiVqU2e,I\m`r<XM\,NK.U]-nbPl?R>L&QDtD>n5J
?iF();#X&c62j+J3;t]40`EX&./kRm,Q8hb+9!8Z)ZCWR)#b?N(@N!Q'_E+@'c$]`rYPPNrYb\RrYthX
rZV7br[%Olr[Rn$r\XU4r]U6Jr^Ql_r`B)'ral(Jrc\9lrf-o?rgj%driH++rkABLrlb;jrn.5.roO.C
rpKdWrq69dqu,7Kk5YGYrql]hrq$-Zrp0RFro*k1rmUkmrl+lLrj_s1rhKIbrg!J?re18rrbVRIra#M'
r_`Ycr]pHGr\sg3r\4=%r[7[krZ_=`rZ;%Xq\fALrYGAGrY2RMpCmWB'`JjH(B,-L)#bHQ)u^lW+T<P`
,lT4k.fM+#1]B<34T7\H7fH-]=T2S)AH$NHFoHskN;f">Sc5PdXT#[-^Ac"KbPouifDa\,jo4KCmJc_V
p&=darS%;6s8Mrqqu6BioD\7YlMfoEir7^3eGdhoa8WdO\c/f3U]-nbQ2Z[?L&QDtD#S,I?2dk';>s/d
62j%H2uYT30`EU%-N5:i,5rY_*W@&X)?(KP(],!C'XJJI'EJm^rY>DJrYPPNrYb\SrZ1t[rZV7dr[@aq
r\"1+r\a[:r^-TQr_<Anr`fA5rbqdXrdk',rfR2Mrhf[qrjMg@rl"f[rmh##rnm_;rosFLrq$-^rqZHi
gAg=8rqucmrqQKarp]pProF(:rnIG$rm1S`rk/6@rilBurh'1UreUQ+rd+Q^rb;@<r`&knr^d#Sr]^<?
r\FI+r[[sqr[%OerZD+\rYthSrYYVMq\B)Ep_1(Kq\/oBr"T#DrYYVPrYkbUrZD+^rZqIjr[Rn"r\XU4
r]:$Gr^Zr_r`B)(rau.Lrc\9mrf$i=rgj%driH+-rkABLrlb;lrn7;/roa:GrpKdWrq69dqu,7Kk5YGY
rql]irq$-Zrp0RFro*k1rm^qnrl>#Nrj_s3rhKIbrg!J?re:>srbh^Lra,S(r_`Ycr^$NIr\sg3r\4=%
r[.UjrZV7_rZ1tVrYYVNrYGJJq\8o@YS-gH!#5>FrY>DJrYPPOrYkbUrZD+^rZqIjr[Ih!r\OO2r]C*G
r^Ql]r`B)(rau.Lrc\9lrf-o?rg`tcri?%,rkJHNrlb;krn.5.roa:GrpTjYrq69dqu,7Kk5YGYrql]i
rq-3\rp0RGro3q3rmUkmrlG)Prji$4rhTOdrg*P@re:>trbh^Kra,S)r_i_dr^$NIr]'m4r\4=$r[7[k
rZV7^rZ1tWq\];JrY>;Eq\-1Hq@`lC'E/^C(&f$H)ZC`U+9!D^,lT4k.fM("1]B<34T7_I8,c9_=8lJ(
Ac?ZJGQ*6oNrG7ASc5SeXT#^._#D7Nbl6,kfDa_-kl0oIn,DtYp&=darS%;6s8Murr;QKjo`"F\m/H2I
j8Rg4ec+"raSrsR]Df)7VZ*=hQi;sCM#Mc#DuOMN@/a4+;Z9;f6N04K3W:i60`ER$-iPFk,5rY_*W@#T
)#b<M(&epH'CldN&bm";'*/a[rY5>HrYGJLrYb\RrZ1t[rZV7cr[Igrr\"1,r\sg=r^6ZSr_NMrra#M9
rc.p]re(32rfmDPri#gtrjVmCrl"f]rmh#$ro*k?rp0RPrq-3_rqcNjgAg=8rr)iorqQKcrpp'Troa:@
rnRM'rmLefrkSNFrj)O$rhBCZrf$i3rdFcbrbDF?r`B(sr_!/Wr]gBBr\OO.r[[sqr[.UgrZ;%ZrYthS
rYYVMrY>;Ene/\Lp_*Q>!#5>Fq\B)HrYb\RrZ1t[rZV7dr[@aqr\+7-r\sg>r^?`Vr_WSsr`oG9rc8!_
re193rfmDRri,n"rjVmDrl4rarmh#$ro*k?rp0RPrq-3_rqcNjgAg=8rr)iorqQKcrpp'Troj@Brn[S)
rmLefrk\THrj;['rhKI[rf-o4rd=]brbVRCr`K.ur_3;Yr]gBCr\XU0r[e$rr[.UhrZD+\rZ(nTrYYVM
rY>DHrY+i8_@cGRr=]2F'E/^F(&f!J(]G<O)u^lW+T<P`-2o@m/,h7%2?#T755n"M8H)Kc>5hk-B`<)P
HN&TsOT(LDT)PbhYPu'2_u@^Ud/MVqgA^(1kl0oIn,E"ZpAXpcrS%;6s8Murr;QKjp&=O]mJc>Kjo4-9
f)F+sb5T6V^&GD<WrAjoRf8BIM>hu'F8g(V@fBR1<rPkn7K,XQ4T75;1]B!*.K1^o,lSqc+9!8Z)ZCWR
(]+sH'`/R4'%%<^')iRC'EJm^rY>DJrYPPNrYkbTrZ;%^rZ_=gr[Rmur\=C2r]:$Cr^Zr[r_i`#ra>_@
rc\9greLK9rg3VXri?%%rjr*Hrl>#crmq)&ro3q@rp0RQrq69arqcNjgAg=8rr)iorqZQdrpp'Uroj@C
rndY*rmUkirkeZKrjDa*rhf[brfI,;rdXohrbqdHr`fA'r_NM`r^6ZJr\sg5r\+7#r[@alrZV7`rZ1tV
rYb\PrYPPLrY>DHp_2m)kn37pp_3W@!#>DHq\T5LrYthVrZD+`rZhChr[[t"r\FI4r]C*Fr^m)_r_rf&
raPkCrce?ire^W<rg<\YriH+(rjr*IrlG)drn%/(ro="Arp0RQrq69arqcNjgAg=8rr)iorqZQerq$-V
roj@Crnm_,rm^qkrkeZKrjDa+rhf[crf[8?rdk&lrc.pKra#M+r_WSbr^HfMr]'m7r\+7$r[IgmrZ_=b
rZ;%XrYkbRrYPPLq\AuBp_1UZp_3N=!#5ML(&f!J(]G9N)ZC`U*W@2\,Q9"g./kgt0E*d,3W;/?6N0UV
:&\/l?N+I6DZ4n[If>6(Pl@*MV#IOrZMqK8`r=-[df.r!h#?C6l2L&KnG`+[pAXpcrS%;6s8Murr;QNk
pAX[_mf)JMk5O<<f`'G#c2PZ\_#CkCXo>=!TDk)SO8ah3GlDa_C&VK=>5hG!9E%K]5lNeC2uYQ20)dC#
-iPCj,5r_a*W@&X)ZCWR)#b?H(&/L0'CQS)'DN::(&esK(BG<grYYVPrYkbTq]>_\rZqIir[Rn#r\=C1
r]C*Cr^?`Zr_WSsraPk=rc.p`rdb!-rg3VSrhob!rj2U;rl>#\rmLf"rnRM6rp'LNrpg!\rq??gqu,7K
k5YGZrquckrq??`rpTjOroa:=rn7;%rm1S`rkeZFric=%rhBCWrfR28rd4WerbMLAra#M'r_<Aar^-TH
r]0s7r\4='r[@alrZqIdrZD+[rZ(nUrYb\PrYPGIp_CsdobI?>rYGPO!>l[Q)?(QR)u^lW+9!D^,Q9(i
./kgt0`Ej,3;u)?5lO7P:&\&i>Q/14C&W/PIK"itNW,=ET)P\fZ2V32^])=RbPp#jgA]n,jo4TFmf)bU
pAXgcqtp?Gs5s@\rVl`oqYp3fo`"=YlMfuGiVqU2fDa+qa8WsT])Jr5XT#!oQi<0IM>ho%GQ)IYA,]j7
<rPkn9)_6X55mYC2?#?00E*I#-iPFk,5r_a*r[2W)u^`P)#b?K(B,'J(AJX&'_N49(AepI(]YES)&`Dl
rYthVrZ;%^rZ_=er[@apr\"1*r\XU8r]pHMr^d#br`&l%rau.FrcJ-hre192rgEbXri5t'rjMg@rlY5c
rm^r&rn[S8rp0ROrpp'^rqHEhqu,7Kk5YGZrquclrq??`rpTjProsFBrnRM*rm:Ydrl+lMrj;[.rhf[`
rg*P?rdauprc%jLraYq2r_i_kr^ZrSr]^<Ar\OO.r[n+!r[@akrZ_=brZM1\rZ(nVq\oGOq\]2Hc5-9n
q\]2Jr>PbV)u^iS*r[>^,5rhd-iPXq/H.@&2?#Q64T7_I7K,sZ<;otu@/am>D>nbYKDpZ*PQ%-PUAh1l
[f3l;_Z%aXci2MphYuL5kPjiIn,DnWpAXgcqtp?Gs5s@\rVl`oqYp6gp&=FZli-/Jj8Rp7gA]P"bPoN\
^&GG=Yl:R"Sc5&VNrFY0I/\0cC&V`D?2dh&;>s2e7/fOP48q2<2?#<//H.-u./P:h+oWV`+9!8W)u^cN
)=eX)(\ejB)>b?O)uU`W*$"r!rZM1`rZhCgr[.Unr[n+&r\FI4r]:$Cr^QlYr_NMor`];2rb_XSrd+Qt
re^W=rgs+ariQ1.rk&0JrlkAgrn%/,ro3q@rpB^Rrpp'^rqHEhqu,7Kk5YGZrquclrqHEcrpg!Srp'LD
rnm_0rm^qjrl>#PrjMg3ri#ghrgNhJre19#rcS3Wrb2:=r`B(ur_<A]r^6ZKr]0s9r\F@&r[Rmor[%Og
rZV7`rZ;%Zq],JPq\o#Ckns(2q\oGQp`05R!?N<]+T<P`,5rke./k[p/,h4$1&a'03rV;A6iKUT9)_`f
=oM_+B)Z]IF8gUeM#ND5QN!TWVZ*du\,O&>`r=6^dJhethu;X7kl0uKn,DnWp\sseqtp?Gs5s@\rVl`o
qYp6gpAXU]mJcDMk5O9;g]#e'bl5``_Z%(E[Jm3*UAg__Pl?I;KDp5sE;j\QAc>p5=8l+s9)_?[6iK7J
3rV#91B'!,/cI7!.K1[n,lT%f,5WM^+9!>Y*V^W+)u^iS*V^]T+8m>`+X-h/rZqIhr[@aqr[e%%r\OO2
r]'m@r^$NQr_*5cr`9#(raGe@rc8!^rdk'+rfI,KrhTOlrj)O8rkJHRrm1Smrn@A0ro="CrpKdTrq-3a
rqQKiqu,7Kk5YGZrquclrqHEcrpg!Trp'LFro!e2rn%.prlkA[rk/6?riZ6srh07Vrepc1rdFcfrc%jM
ra5Y0r`/qmr_!/Yr]pHHr]:$9r\OO-r[n+#r[Rmpr[.Ujq]l(`q]PYUq]=Z9q]>MSrZM(]rZ_:d!@/ri
-N5Cl./kar0)dO'1B'323W;/?6N0CP8cDNb;Z9hu@K'j;D>n_XHiAZsNrG7ASGoGcXT#X,^Ac"Kao9]e
e,J)#iVqs<m/HJQnc&1[q#:*gqtp?Gs5s@\rVl`oqYp9hp\sa_mf)POkPjH>hYu1,d/M8g`;[IL\c/f3
VZ*=hR/W0GMZ/,)G5cO]CAq`B?iF.+;>s>i7fGdS62j%H2uY`71]B*-0)dF$.K1am-N5=j,lT%f,5<>S
+R(!@+T!>],5WV^,lf7m-78^?r[Igrr\"1(r\=C0r]0s>r]gBNr^Zr]r_`Ypr`fA4rb2:Lrd"Kkre:?4
rfmDRri5t#rjVmDrl"fYrmC_orn@A1roO.GrpTjVrq-3brqZQjqu,7Kk5YGZrqucmrqQKerq$-XrpKdM
ro="9rn.4urm1SarkSNFrj;[*rhf[arf[8?re18trce?\rau.>r`oG'r_rejr^d#Xr^-TIr]:$;r\OO/
r\4=(r[n+"q^MCiq^21drZq7`miqNOpa#hbq^21fr[@aq!%S(#/,h."0)dO'1B'-02Z>c:55mhH7K,jW
9`@rh=T2P(@K's>D#SPUIK"itMZ/n?RJrr[XT#L(\c0JF`W"-]f)F>$h>ZF5jo4ZHn,DkVpAXjdq>U9g
rS%;6s8Murr;QTmq#:$eo`"=Ymf)MNj8S$:gA]Y%dJh;f_Z%=L\,NQ0WrAXiQ2ZpFM#Ml&HN&$cD#S,I
@K'I0=8l.t:&[ca7K,UP5Q3eE3W:u:2#]901&`j*/cI=#/,h$q.JkOj-f$-H-i5=h.fLst/H.4$0**^Z
r\=C.r\XU5r]0s=r]^<Kr^?`Vr_EGir`9#'ra5Y:rbh^Trd"KpreCE5rg<\Urhf[urj2U<rkn`Vrm(Mq
rn@A/roO.CrpB^Trq$-_rqQKgrqlTkgAg=8rr)iorql]irqHEarpTjSrp0REro3q3rmq(trlb;Zrk\TF
rilC&rhKI[rfmD=rdt,urcnE]rbVRFra#M,r`/qor_EG_r^HfRr]gBDr]:$<r\a[3r\=:(r\"1%r[dps
q^UDNq^V@kr[e%#r\"1'r\4C.!AZG01]B<32uYl;48qDB6N0FQ8,c0\;>sMn>5hn.@fC*@E;jtYI/\j!
M>i_<Rf8oXVuEt#[Jmu@`;[mXdJhetgA^%0k5OTDmJcYToD\I_q#:-hr;6HHs5s@\rVl`oqu6Bip\sjb
nG_nUm/H,Gir7d5fDa;!cMki__u@=JZi73.VuE7dR/W3HM#N,-IK"BgEW0bQAH$$:>lIe'<;o_n8cD6Z
7K,UP5lNqD48q5=2Z>T21]&s)0`E`r0(ggk0).*s0`Ej,1]B612?#N72utuur]:$?r]L0Er^6ZQr^Zr\
r_<Ajr`K/(ra5Y9rb2:Lrce?fre(3,rf-oDrh07driZ7/rjr*FrlG)^rmUl!rnIG2roj@HrpKdVrq$-`
rqZQjrquZlgAg=8rr)iorql]jrqQKdrpg!Wrp9XIroO.9rn@A'rm:Yerl>#QrjVm4ri5slrgs+Rrf$i5
re(2srce?\rbDFGraGe2r`];$r_WShr_!/[r^QlSr^$NJr]U-?r]0s;r\sg7q_e@0q_R@iq_S++q_e@3
q`+R9r]:*B!B`LD5Q3qI62j=P8,c*Z9`@og;uTr!?2e41Ac?HDDZ4eXHiANoL]3A6P5^sMV#I=lYl;34
^&H"MbPofdec+A'hu;^9kl0lHn,DnWoD\L`q>U9jr;6HHs5s@\rVl`oqu6Ejq#:!dnc&%Wm/H5Jk5O?=
g]#k)df.GhaSs!S]Df8<Y5Y6rT`1>XOoC@>LAlW#HN&$cDZ4DMAc?'9?2dt*<W5qr:]=#d9)_?X6iK@M
5Q3kG4oRP?3qt]32rcgq2u>T33W;)=48qAA55mbH5QO,8r^-TQr^QlXr_*5br_`Ypr`B)'raPk:rb;@M
rc8!_rdOiure^W;rg*PTrh]Unrj2U8rkABOrm1Slrmq)(ro!e;rosFJrpTaVrqHEfrql]mqu,7Kk5Y>W
rquckrqQKerq$-[rpKdMroj@ArnIG+rmq(qrlkA]rk/6?rj)O&rhf[crg*PIrepc/rdk&qrcS3\rbh^J
ral(;r`oG*r`B(sr_`Yir_*5_r^d#Yr^QlTqa:?Kq`t-Fr]^3Bml^A.q`b!Dr]pHKr^-KLr^HfV!([,]
8H)6\9`@cc;#XGn<W6/#?2e41AH$9AD#SJSG5cgeJ,Y6&MZ/b;R/WWTU&M1nYPu'2^])1NaSsQce,J,$
hu;X7k5O]Gm/HMOp&=^bq>U9jrVQTJs5s@YrVl`oqYp<ip\XR]mf)MNkl0ZBhYu@1g&BG!ci1ua_Z%=L
[f3H/XT#!oSc5&VP5^C=M>i,+HiA<iFT-4XC]8#HA,]p9?2e"+=T2A#;Z9Pm:]=,g:&[fb9)_EZ8,c!W
7JfLJ6hj"@6iKLN7JfUS8Gc$Y9`@ce:B=6er_`Ymr`&kur`fA,ra>_9rb)4Grc%jXrcnEjrdb!&repc:
rg3VUrh9=hrilC/rk/6Jrl4r]rmLeqrnIG2ro="ArpB^QrpfmZrqHEfrql]nqu5=Lk5Y>WrquclrqZQf
rq-3]rp]pQrosFEro!e4rn@A"rm1Scrl"fOrji$6riZ6urh'1[rg*PFrf$i2rdausrd"K_rbqdPrb2:D
raYq7ra#M-r`B)"r_r\kr_WJer_32]r^d#[qag0GognsOqb-o^r_EGgr_`Ym!)ins;uTer=T2J&>Q/%0
@fBs<B`;cGDuOnYG5cjfJc:<$M>iY:Pl@-NU&LkeXT#R*[f3u>`r='Yci2Dmf)FJ(j8S-=kl0uKmf)eV
pAXgcq#:-hqu6Qkrn@D7s7lQlqYp<ip\sjbo`"@Zmf)SPkl0ZBi;VL1f)F5!ci2&c`r<dQ[f3W4Y5Y<t
UAg__QN!-JNrFk6LAl`&I/\HkG5cI[DZ4GNB`;ZDAH$!9?iF@1>lIt,=oMM"<rQ(q;uT\l;<^pS;>sJm
;uTeo<r6"u=oMY+>le5:ra5Y5raYq>rbDFJrbVRSrcJ-brdFcqreCE.repc=rg3VRrh9=iri?%)rjVm>
rl"fXrltGjrn.5(ro!e;roX4FrpTjUrq$-`rqQKgrql]mrr)`ngAg=8qu6TnrqcWirqHEcrq69]rpTjR
rp'LFroF(9rn7;&rmLejrlY5Yrk/6@rj2U*ri5smrgs+Xrg!JFrf-o5re19&rdO`hrcJ-YrbqdOrb2:D
rac"<raPk8ra5Y2ra#M-qc`l"k#hUcpfdQ"qd080raPk:!+Z+@AH$6@CAr#JDuObUF8g@^HN&?lJGt9%
L]383OoCRDRf8rYUAh(iY5Y^*[f4#?_>_LSc2Q)hf)FD&h>ZC4kPj`FmJcSRnG`%Yp\sseqYpBkr;QZl
rn@D7s82fprVQHjq#:$ep&=R^nG_kTlMfrFjSn'9h#?%,eGdenbPoN\^AbeE[JmK2Y5Y?uU&LY_Rf8TO
PQ$UAM#N2/K)U<"IK"QlG5cX`EW0qVDZ4GNC&VfFB)ZB@AH$*<@fBg2?iFC#?2.b'?iFI4@K'a8A,^'=
B)ZHBB`MlKC23`brc%jVrcJ-`rd"Kkrdb!!re:?/rf$i?rg!JMrgs+arhTOnrj2U3rjr*Erkn`Wrm:Yn
rn.5)rndY8roa:FrpKdTrpp'\rqHEerqcWkrqucoqu5=Lk5Y>Xrr)`krqZQgrqHEarp]pUrpKdMroj@B
rndY0rn.4urm:Yerl+lSrkAB?rj2U/ri5srrhKI`rgWnSrfd>Erf-o5reCE*rdautrd=]krcnEdrcS3^
rcA'Yrc%jSphfeAltZE5qeZ.Hrbh^Sqf;[XrcS9c!I&beGlE$gHiAKnK)UH&L&Qu/N;eq<QN!6MS,T#Y
U&LnfXT#@$[/RN5])KPFaSsB^ci2Gnf)FJ(iVqm:k54KDnG_tWoD\F^p\sseqYU3irVQTJs5s@Yrr2ln
qu6Hkq#:$epAX[_o)A+Wli-2Kk5OB>hu;C0fDa>"d/M5fao96X^AbbD[f3T3Yl:^&VuEOlTDkA[Rf8ZQ
PQ$^DNr+_5L]2u+KDpDuIK"WkH2`'cGPH=UF8L"NF8g:YFoHR`GQ)jdH2DsfIK"]rJ,t1Nrdt-'reCE/
repc8rfI,Drg*POrgj%[rhKIiri,n"rj)O2rjr*DrkeZSrlb;ermUl"rnIG0roO.Arp'LMrpKdTrq$-]
rqHEerqZQiq#/_Bk5Y>Xrr)iorql]krqQKerq?6\rpTjRrp0RHroO.>rn[S,rn%.trm1Serl>#TrkSNE
rjVm7rilC&ri,morhBCbrgj%Urg3VJrfI,?rf$i6reUQ.re19'rdt#trdXorrdFZkrd4Edom-F\rd4Ni
rdFZmqgeZtre(3(!/:N/LAm#.MuJ\7O8b=APQ$jHS,SrWT)PJ`V#I:kXT#F&[/RQ6\c0;A_u@URao9Wc
dJh_rg]$%.iVqs<k5OZFn,DhUnb_tXp\sseq>U6crRCl*s8Murr;QTmqYp<iq#:$eo`"I]nc&%Wn,DYP
k5OKAj8Rm6g]#k)df.VmbPoT^a8X$V^&GYC\Gii6Z2Up*XT#7!V>d7hUAgeaS,SlUQi<9LPl?jFOT(=?
NrG":MuJV2M#N1`LAlu-M#3&.MZ/S6NW,";Oo^`/rfd>Irg3VPrgj%[rhBCfrhf[nriQ1&riu@/rk&0D
rkeZSrlP/`rm:Yormq)(rn[S2roO.Crp'CLrp]pYqt9s_rqZQirqlTkrr1FIi;`fUrr)iorql]krqZQf
rq??arq$-YrpTjRrp'LIroO.<rnm_1rn.5$rmLemrltG`rl+lTrkSNGrjr*<rj)O-ric4"rhoalrhK@`
rgs+ZrgNhSrg<\Nrg!JIrfd>EplXTuqiUl@qiq)Fqj7;MrgNnYr13_XrhBChrhoaqqlKe$rj;[5rji$A
rkJHKrl4rXrlP/crmC_prn7;*rnm_7ro="Aqs47Nrpg!Yrq$-`qtU'brqlTkrr1FIi;`fUrr)iorqlTh
rqQKerq??`rpg!WrpTaLroX4Aro="7rn@A(rm^qqrm:Ygrl>#Wrl"fOrkABErj_s:rj;[/riZ7%ri,dn
rh]Uirh9=aqk!SPqjR;Ik*H"5pmCiGqjdYWrh0=d!MZ=fV#.(hWW&psX8]:$ZMq30[/RT7\c0AC_#D1L
`r='Yb5T]cdJhVof`'Y)h>ZC4jo4EAl2L&KmJcVSo)A7[o`"Uaq#:*gqYpBkr;6Hlrm^u+s8N#prVl`l
qYp<iq#:$ep&"@Xn,D_RlMfrFjo4<>hYu=0g]#h(f)F.tdJhGjb5TH\`r<jP_>_1G])K5=[JmK2YPYL%
Xo#-tW;`^oVZ*FeU]."eU$86IU&1S`U\gkdV>dClW;`gqWr]9%ql]q&rj)F0rjhp=rkSNMrkn`RrlG)\
rlkAgrmLeqqq1o'rnm_6roO.Crp'LLrpTjUrposYrq??crqQKhrql]mq#13keGnA)q#1*erqcWhqtL*^
qt'gVrpTjQqs+1Cro=":rnm_0rn@A(rm^qrrmLelrltGcrlG)Yrl"fPrkSEErk&0?qmZI0rj2U/qlp(&
riQ(!qlBUonu;MdpoFCqriQ(#qlp(*rNlU4[/RN2\Gj&<]DfPD_>D.L`r=$XaSsB^cMl/he,Insf)FD&
h#?41iVqp;jo4NAli-APnG_tWoDA7\p\sseq>U6iqu6NmrVQTAs5!_MrVQKkqYU*fq#:!do`"I]nc&%W
n,DYPlMfuGk5OKAiqqR2gA]b(f)F4sdJhGgbl5]_a8X'W`;@CM^AbeE]DfA<\GN`6[JmQ4Zhq'*Z2:co
YPtd$Z2V'+[/791[f3c7\H07Orjr*BqnE'Grkn`Url4rXrlY5arm(MhrmLeqrmq)%rn@A+rnm_5roF(?
roX4FrpKdSrp]pXrq$-]rq??crqQBdrqcNirr)`ndJr&&qu6TnrquZjqtg3brqHEbqt'gUrp]pUrp9OI
roX4Aro="9rnRM-rn@8%rmq(trmLenqp,)^rlY5]rl>#Xrl"fRrkeZNrkJHHrk83An%8A+m(</-rkA9E
rk\TN!5eiT_u@XS`r=$Xao9K\bl5oed/MJjec+2"f`'V(g]$(/i;Va8jo4EAkPjcGli->On,DhUo)&(Y
pAXgcq#:*gqYpBkr:p6frmCc%s82fmrVl`iqu6Hkq"sgbo_\7Znc&%Wmf)SPli-2Hkl0]Cj8S';i;;@0
g]#q+g&BS%eGI_id/2)ebPTEYaSs6Z`r!aS`;@I4_Z%IM`;@OQ`r=$XaSX'ZaoTZ-rlb2bqp>>irmUkt
rn%/%rn@A+rnRM0rnm_6ro="=roX4Erp'LKrpB^Qrp]^SqtBp]rqQKhrql]mq#13kbQ$Duqu6BhrquZj
rqcEbrq??arq-*YrpTjUrpTjQqs"+CroO%;qr.P2rnRM-rn@8$rmptrrmUkpqpG;frm(Dboud0Rj2h,>
pr`TZrlt>crQkSld/MJmdJhSne,Inpf)+/"g]$%.hYuI4iVqj9jSn9?k5OTDlMg,Kmf)\SnG_tWoDA1Z
p\Xa_q>U6iqu6NgrVlf>s4@;MrqQHkr;6BgqYp<iq#:$epAX^]oD\7Vn,)MOm/H;Il2KlFk5OH@j8S';
iVqa3hYZ(,gABS&fDa@uebIYhe+1r[dIkr\e,Ikoec+/!eH"/$f%0iQqqD&(qqV2-ro!e8puDA8qrdtC
qs+1JrpKdSrp]pWrpp'\qt9j\rqQKgqtg<hqu$Hlq#8J:fDkXFqu-Nlq"t'erqQ0\rq6'XqsaUQrpTjS
rp9FFroj@EroNq9ro=";pu(r(rn[J+rn@A+rn@%uqq1Snqq1Sprn@8(qqV2,rS@S3hYuF0i;;O5j8S-:
jo4EAkl0iAlML#Hn,)YSoDA1Wp\Xa\qYpBhr:p6frlG,ks7lTgrVl`lqu6Hhq>9sap\sg^oDA+Xnb_eS
mJcPNmJcGNlMg&CkPjT9j8S$4htZ('h:LHWh>?(+hu2I6i8FUnro<n;qr[n@qrn%Dqs4.HrpKdSqsaUT
rq$$Zrq69aq"Xjaq"k!erquHfqu4\:eGo=Cq#1!cqtpBhqt^-arqHEcqt9jYrq$-[qsaURq!S.Kqs3h<
qrm_9roX+>p#PK"p#Po0roWn:!9aIIkl0iAlMg,Km/-2Cmf)_Tnc&+So`"O\pA=U`q#:*aqYpBhr:9gc
rke]Ys82fgrUTjbqYU*cq"=C\pA=LZoDA+RnGD\RmecDBm/H>GlMg&(kkjW;lMg,DliHJ>rpBUNrpTXO
rpg!Yq"+:Qo(W%Vqt^6fq"ssdq#1!e^]2LWqu69eq#($dq"k!cm.gSSrq?6^rq-*Zq""FSq!dkCrpKIH
h<b%+q!ReC!UoLVnG)PNo(_hOp&"LMq#:*aqYpBhr:9g]rkJKPs7lT^rVl`iqsXCVq=saap\"7Kp&"CS
o@3@(oD%tVp%.kUpA=UTq"X[RqYpBer:9g]rjMj;s7lTgrUp*Hqtp3Oq""..p$DDOp\jmSq#:*FqtU*a
rUTris1/1)rosCSr9sOOqXXHdq"jg[q=XUNqss[RrUTris/Q+crj2RNr9O='rU9`Ts+146s5<n(rTjIV
rdk+)s+146s-ir\rdk+)s+13$s+13ts+13$s+13ts+13$s+13ts+13$s+13ts+13$s+13ts+13$s+13t
s+13$s+13ts+13$s+13ts+13$s+13ts+13$s+13ts+13$s+13ts+13$s+13ts*t
~> %APLeod
EI
3 w
1 J
1 j
0.60000002 i
/Cs3 SC
1 0.81442457 0.19630885 sc
1 0 0 -1 -75 618 cm
391.48828 592 m
391.48828 613.10156 l
S
1 0.81442499 0.196309 sc
398.6543 592 m
398.6543 613.10156 l
S
0 0 0 sc
CM
15.71875 491.02344 m
396.96094 491.02344 l
399.72235 491.02344 401.96094 488.78485 401.96094 486.02344 c
401.96094 104.78125 l
401.96094 102.01984 399.72235 99.78125 396.96094 99.78125 c
15.71875 99.78125 l
12.957329 99.78125 10.71875 102.01984 10.71875 104.78125 c
10.71875 104.78125 10.71875 104.78125 10.71875 104.78125 c
10.718735 486.02344 l
10.718735 488.78485 12.957314 491.02344 15.718735 491.02344 c
15.718735 491.02344 15.718735 491.02344 15.718735 491.02344 c
h
15.71875 491.02344 m
f
1 w
1 0 0 -1 -75 618 cm
90.71875 126.97656 m
471.96094 126.97656 l
474.72235 126.97656 476.96094 129.21515 476.96094 131.97656 c
476.96094 513.21875 l
476.96094 515.98016 474.72235 518.21875 471.96094 518.21875 c
90.71875 518.21875 l
87.957329 518.21875 85.71875 515.98016 85.71875 513.21875 c
85.71875 513.21875 85.71875 513.21875 85.71875 513.21875 c
85.718735 131.97656 l
85.718735 129.21515 87.957314 126.97656 90.718735 126.97656 c
90.718735 126.97656 90.718735 126.97656 90.718735 126.97656 c
h
90.71875 126.97656 m
S
1 1 1 sc
CM
318.73361 450.83908 m
315.73984 453.83282 315.73984 458.68671 318.73361 461.68045 c
321.72739 464.67422 326.58121 464.67422 329.57498 461.68045 c
332.56876 458.68671 332.56876 453.83282 329.57498 450.83908 c
326.58121 447.84531 321.72739 447.84531 318.73361 450.83908 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
393.73361 167.16092 m
390.73984 164.16718 390.73984 159.31329 393.73361 156.31955 c
396.72739 153.32578 401.58121 153.32578 404.57498 156.31955 c
407.56876 159.31329 407.56876 164.16718 404.57498 167.16092 c
401.58121 170.15469 396.72739 170.15469 393.73361 167.16092 c
S
1 1 1 sc
CM
95.733612 450.83908 m
92.739838 453.83282 92.739838 458.68671 95.733612 461.68045 c
98.727371 464.67422 103.58122 464.67422 106.57498 461.68045 c
109.56876 458.68671 109.56876 453.83282 106.57498 450.83908 c
103.58122 447.84531 98.727371 447.84531 95.733612 450.83908 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
170.73361 167.16092 m
167.73984 164.16718 167.73984 159.31329 170.73361 156.31955 c
173.72737 153.32578 178.58122 153.32578 181.57498 156.31955 c
184.56876 159.31329 184.56876 164.16718 181.57498 167.16092 c
178.58122 170.15469 173.72737 170.15469 170.73361 167.16092 c
S
1 0 0 sc
CM
137.73361 144.34689 m
134.73984 147.34067 134.73984 152.19449 137.73361 155.18826 c
140.72737 158.18204 145.58122 158.18204 148.57498 155.18826 c
151.56876 152.19449 151.56876 147.34067 148.57498 144.34689 c
145.58122 141.35312 140.72737 141.35312 137.73361 144.34689 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
212.73361 473.65311 m
209.73984 470.65933 209.73984 465.80551 212.73361 462.81174 c
215.72737 459.81796 220.58122 459.81796 223.57498 462.81174 c
226.56876 465.80551 226.56876 470.65933 223.57498 473.65311 c
220.58122 476.64688 215.72737 476.64688 212.73361 473.65311 c
S
0.60000002 0.40000001 0.2 sc
CM
328.11795 163.68045 m
333.05444 158.74399 333.05444 150.74039 328.11795 145.80392 c
323.18149 140.86743 315.17789 140.86743 310.24142 145.80392 c
305.30493 150.74039 305.30493 158.74399 310.24142 163.68045 c
315.17789 168.61694 323.18149 168.61694 328.11795 163.68045 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
403.11795 454.31955 m
408.05444 459.25601 408.05444 467.25961 403.11795 472.19608 c
398.18149 477.13257 390.17789 477.13257 385.24142 472.19608 c
380.30493 467.25961 380.30493 459.25601 385.24142 454.31955 c
390.17789 449.38306 398.18149 449.38306 403.11795 454.31955 c
S
8 w
0.60000002 0.40000001 0.2 sc
394.17969 476.39844 m
394.17969 584.99609 l
S
0 0 0 sc
CM
328.11795 39.789795 m
333.05444 34.853333 333.05444 26.849792 328.11795 21.91333 c
323.18149 16.976807 315.17789 16.976807 310.24142 21.91333 c
305.30493 26.849792 305.30493 34.853333 310.24142 39.789795 c
315.17789 44.726318 323.18149 44.726318 328.11795 39.789795 c
f
1 w
1 0 0 -1 -75 618 cm
403.11795 578.21021 m
408.05444 583.14667 408.05444 591.15021 403.11795 596.08667 c
398.18149 601.02319 390.17789 601.02319 385.24142 596.08667 c
380.30493 591.15021 380.30493 583.14667 385.24142 578.21021 c
390.17789 573.27368 398.18149 573.27368 403.11795 578.21021 c
S
CM
306.53906 33.542969 m
331.82031 33.542969 l
331.82031 18.210938 l
306.53906 18.210938 l
h
306.53906 33.542969 m
f
1 0 0 -1 -75 618 cm
381.53906 584.45703 m
406.82031 584.45703 l
406.82031 599.78906 l
381.53906 599.78906 l
h
381.53906 584.45703 m
S
0.37170765 0.38130584 0.38556284 sc
CM
130.99295 287.57108 m
135.92944 282.63461 135.92944 274.63101 130.99295 269.69455 c
126.05649 264.75806 118.05289 264.75806 113.11642 269.69455 c
108.17993 274.63101 108.17993 282.63461 113.11642 287.57108 c
118.05289 292.50757 126.05649 292.50757 130.99295 287.57108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
205.99295 330.42892 m
210.92944 335.36539 210.92944 343.36899 205.99295 348.30545 c
201.05649 353.24194 193.05289 353.24194 188.11642 348.30545 c
183.17993 343.36899 183.17993 335.36539 188.11642 330.42892 c
193.05289 325.49243 201.05649 325.49243 205.99295 330.42892 c
S
0.37170765 0.38130584 0.38556284 sc
CM
187.99295 287.57108 m
192.92944 282.63461 192.92944 274.63101 187.99295 269.69455 c
183.05649 264.75806 175.05289 264.75806 170.11642 269.69455 c
165.17993 274.63101 165.17993 282.63461 170.11642 287.57108 c
175.05289 292.50757 183.05649 292.50757 187.99295 287.57108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
262.99295 330.42892 m
267.92944 335.36539 267.92944 343.36899 262.99295 348.30545 c
258.05649 353.24194 250.05289 353.24194 245.11642 348.30545 c
240.17993 343.36899 240.17993 335.36539 245.11642 330.42892 c
250.05289 325.49243 258.05649 325.49243 262.99295 330.42892 c
S
0.37170765 0.38130584 0.38556284 sc
CM
240.57889 287.57108 m
245.51538 282.63461 245.51538 274.63101 240.57889 269.69455 c
235.64243 264.75806 227.63882 264.75806 222.70236 269.69455 c
217.76587 274.63101 217.76587 282.63461 222.70236 287.57108 c
227.63882 292.50757 235.64243 292.50757 240.57889 287.57108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
315.57889 330.42892 m
320.51538 335.36539 320.51538 343.36899 315.57889 348.30545 c
310.64243 353.24194 302.63882 353.24194 297.70236 348.30545 c
292.76587 343.36899 292.76587 335.36539 297.70236 330.42892 c
302.63882 325.49243 310.64243 325.49243 315.57889 330.42892 c
S
0.37170765 0.38130584 0.38556284 sc
CM
240.57889 371.07108 m
245.51538 366.13461 245.51538 358.13101 240.57889 353.19455 c
235.64243 348.25806 227.63882 348.25806 222.70236 353.19455 c
217.76587 358.13101 217.76587 366.13461 222.70236 371.07108 c
227.63882 376.00757 235.64243 376.00757 240.57889 371.07108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
315.57889 246.92892 m
320.51538 251.86539 320.51538 259.86899 315.57889 264.80545 c
310.64243 269.74194 302.63882 269.74194 297.70236 264.80545 c
292.76587 259.86899 292.76587 251.86539 297.70236 246.92892 c
302.63882 241.99243 310.64243 241.99243 315.57889 246.92892 c
S
0.37170765 0.38130584 0.38556284 sc
CM
135.40701 371.07108 m
140.34351 366.13461 140.34351 358.13101 135.40701 353.19455 c
130.47055 348.25806 122.46695 348.25806 117.53049 353.19455 c
112.59399 358.13101 112.59399 366.13461 117.53049 371.07108 c
122.46695 376.00757 130.47055 376.00757 135.40701 371.07108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
210.40701 246.92892 m
215.34351 251.86539 215.34351 259.86899 210.40701 264.80545 c
205.47055 269.74194 197.46695 269.74194 192.53049 264.80545 c
187.59399 259.86899 187.59399 251.86539 192.53049 246.92892 c
197.46695 241.99243 205.47055 241.99243 210.40701 246.92892 c
S
1 0 0 sc
CM
306.65701 371.07108 m
311.59351 366.13461 311.59351 358.13101 306.65701 353.19455 c
301.72055 348.25806 293.71695 348.25806 288.78049 353.19455 c
283.84399 358.13101 283.84399 366.13461 288.78049 371.07108 c
293.71695 376.00757 301.72055 376.00757 306.65701 371.07108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
381.65701 246.92892 m
386.59351 251.86539 386.59351 259.86899 381.65701 264.80545 c
376.72055 269.74194 368.71695 269.74194 363.78049 264.80545 c
358.84399 259.86899 358.84399 251.86539 363.78049 246.92892 c
368.71695 241.99243 376.72055 241.99243 381.65701 246.92892 c
S
1 0 0 sc
CM
306.65701 287.57108 m
311.59351 282.63461 311.59351 274.63101 306.65701 269.69455 c
301.72055 264.75806 293.71695 264.75806 288.78049 269.69455 c
283.84399 274.63101 283.84399 282.63461 288.78049 287.57108 c
293.71695 292.50757 301.72055 292.50757 306.65701 287.57108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
381.65701 330.42892 m
386.59351 335.36539 386.59351 343.36899 381.65701 348.30545 c
376.72055 353.24194 368.71695 353.24194 363.78049 348.30545 c
358.84399 343.36899 358.84399 335.36539 363.78049 330.42892 c
368.71695 325.49243 376.72055 325.49243 381.65701 330.42892 c
S
0.37170765 0.38130584 0.38556284 sc
CM
187.99295 371.07108 m
192.92944 366.13461 192.92944 358.13101 187.99295 353.19455 c
183.05649 348.25806 175.05289 348.25806 170.11642 353.19455 c
165.17993 358.13101 165.17993 366.13461 170.11642 371.07108 c
175.05289 376.00757 183.05649 376.00757 187.99295 371.07108 c
f
0 0 0 sc
1 0 0 -1 -75 618 cm
262.99295 246.92892 m
267.92944 251.86539 267.92944 259.86899 262.99295 264.80545 c
258.05649 269.74194 250.05289 269.74194 245.11642 264.80545 c
240.17993 259.86899 240.17993 251.86539 245.11642 246.92892 c
250.05289 241.99243 258.05649 241.99243 262.99295 246.92892 c
S
316.79688 84 m
363.01428 113.82159 l
S
CM
294.73688 499.8407 m
289.6413 506.69891 l
286.38824 501.65732 l
h
294.73688 499.8407 m
f
0 J
0 j
1 0 0 -1 -75 618 cm
369.73688 118.1593 m
364.6413 111.30109 l
361.38824 116.34268 l
h
369.73688 118.1593 m
S
1 J
1 j
199.65262 112.18939 m
250.35547 84 l
S
CM
117.6606 501.92325 m
126.11038 503.1886 l
123.19485 508.43262 l
h
117.6606 501.92325 m
f
0 J
0 j
1 0 0 -1 -75 618 cm
192.6606 116.07675 m
201.11038 114.8114 l
198.19485 109.56738 l
h
192.6606 116.07675 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 206.33984 554.3125 cm
/F1.1[ 12 0 0 -12 0 0]sf
-22.5 4 m
(!"#$%&')[ 8.666016 6.673828 3.333984 8.666016 6.673828 3.996094 0.000000 ] xS
1 0 0 -1 87 66 cm
-36 -3 m
(\(%$"&\)*#+#,-)[ 8.003906 6.673828 8.666016 6.673828 3.996094 3.333984 8.003906 3.333984 6.673828 3.333984 6.673828 0.000000 ] xS
-36 11 m
(./0)[ 6.673828 8.003906 0.000000 ] xS
1 0 0 -1 379.46094 46.507812 cm
-17.5 4 m
(\(%$"&)[ 8.003906 6.673828 8.666016 6.673828 0.000000 ] xS
/Cs3 SC
1 0 0 sc
1 0 0 -1 297.71875 241 cm
-4.5 4 m
(1)s
1 0 0 -1 231.64062 396.88281 cm
-3.5 4 m
(2)s
1 0 0 -1 300.85938 396.88281 cm
-4.5 4 m
(1)s
1 0 0 -1 183.19531 396.13672 cm
-3.5 4 m
(3)s
1 0 0 -1 126.46875 396.13672 cm
-3.5 4 m
(4)s
1 0 0 -1 119.5 241 cm
-3.5 4 m
(5)s
1 0 0 -1 174.91406 241 cm
-3.5 4 m
(6)s
1 0 0 -1 227.5 241 cm
-3.5 4 m
(7)s
ep
end
%%Trailer
%%EOF

Added Docs/Images/node.graffle.

cannot compute difference between binary files

Added Docs/Images/node_inside.gif.

cannot compute difference between binary files

Added Docs/Images/node_inside.png.

cannot compute difference between binary files

Added Docs/Images/node_outside.gif.

cannot compute difference between binary files

Added Docs/Images/node_outside.png.

cannot compute difference between binary files

Added Docs/Images/nodes.eps.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
%!PS-Adobe-3.0 EPSF-3.0
%%HiResBoundingBox: 0.000000 0.000000 416.000000 517.000000
%APL_DSC_Encoding: UTF8
%APLProducer: (Version 10.6.7 (Build 10J869) Quartz PS Context)
%%Title: (Unknown)
%%Creator: (Unknown)
%%CreationDate: (Unknown)
%%For: (Unknown)
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 0 0 416 517
%%EndComments
%%BeginProlog
%%BeginFile: cg-pdf.ps
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
%%Copyright: All Rights Reserved.
currentpacking true setpacking
/cg_md 141 dict def
cg_md begin
/L3? languagelevel 3 ge def
/bd{bind def}bind def
/ld{load def}bd
/xs{exch store}bd
/xd{exch def}bd
/cmmtx matrix def
mark
/sc/setcolor
/scs/setcolorspace
/dr/defineresource
/fr/findresource
/T/true
/F/false
/d/setdash
/w/setlinewidth
/J/setlinecap
/j/setlinejoin
/M/setmiterlimit
/i/setflat
/rc/rectclip
/rf/rectfill
/rs/rectstroke
/f/fill
/f*/eofill
/sf/selectfont
/s/show
/xS/xshow
/yS/yshow
/xyS/xyshow
/S/stroke
/m/moveto
/l/lineto
/c/curveto
/h/closepath
/n/newpath
/q/gsave
/Q/grestore
counttomark 2 idiv
{ld}repeat pop
/SC{	
    /ColorSpace fr scs
}bd
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
/cgmtx matrix def
/sdmtx{cgmtx currentmatrix pop}bd
/CM {cgmtx setmatrix}bd		
/cm {cmmtx astore CM concat}bd	
/W{clip newpath}bd
/W*{eoclip newpath}bd
statusdict begin product end dup (HP) anchorsearch{
    pop pop pop	
    true
}{
    pop	
   (hp) anchorsearch{
	pop pop true
    }{
	pop false
    }ifelse
}ifelse
{	
    { 
	{ 
	    pop pop 
	    (0)dup 0 4 -1 roll put
	    F charpath
	}cshow
    }
}{
    {F charpath}
}ifelse
/cply exch bd
/cps {cply stroke}bd
/pgsave 0 def
/bp{/pgsave save store}bd
/ep{pgsave restore showpage}def		
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
/scrdict 10 dict def
/scrmtx matrix def
/patarray 0 def
/createpat{patarray 3 1 roll put}bd
/makepat{
scrmtx astore pop
gsave
initgraphics
CM 
patarray exch get
scrmtx
makepattern
grestore
setpattern
}bd
/cg_BeginEPSF{
    userdict save/cg_b4_Inc_state exch put
    userdict/cg_endepsf/cg_EndEPSF load put
    count userdict/cg_op_count 3 -1 roll put 
    countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
    3 sub{end}repeat
    /showpage {} def
    0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
    10 setmiterlimit [] 0 setdash newpath
    false setstrokeadjust false setoverprint	
}bd
/cg_EndEPSF{
  countdictstack 3 sub { end } repeat
  cg_dict_array 3 1 index length 3 sub getinterval
  {begin}forall
  count userdict/cg_op_count get sub{pop}repeat
  userdict/cg_b4_Inc_state get restore
  F setpacking
}bd
/cg_biproc{currentfile/RunLengthDecode filter}bd
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
/ImageDataSource 0 def
L3?{
    /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
    /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
}{
    /ImageBandMask 0 def
    /ImageBandData 0 def
    /cg_mibiproc{
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
    /cg_miaiproc{	
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
	    dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
}ifelse
/imsave 0 def
/BI{save/imsave xd mark}bd
/EI{imsave restore}bd
/ID{
counttomark 2 idiv
dup 2 add	
dict begin
{def} repeat
pop		
/ImageType 1 def
/ImageMatrix[Width 0 0 Height neg 0 Height]def
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
L3?{
    dup/MaskedImage known
    { 
	pop
	<<
	    /ImageType 3
	    /InterleaveType 2
	    /DataDict currentdict
	    /MaskDict
	    <<  /ImageType 1
		/Width Width
		/Height Height
		/ImageMatrix ImageMatrix
		/BitsPerComponent 1
		/Decode [0 1]
		currentdict/Interpolate known
		{/Interpolate Interpolate}if
	    >>
	>>
    }if
}if
exch
{imagemask}{image}ifelse	
end	
}bd
/cguidfix{statusdict begin mark version end
{cvr}stopped{cleartomark 0}{exch pop}ifelse
2012 lt{dup findfont dup length dict begin
{1 index/FID ne 2 index/UniqueID ne and
{def} {pop pop} ifelse}forall
currentdict end definefont pop
}{pop}ifelse
}bd
/t_array 0 def
/t_i 0 def
/t_c 1 string def
/x_proc{ 
    exch t_array t_i get add exch moveto
    /t_i t_i 1 add store
}bd
/y_proc{ 
    t_array t_i get add moveto
    /t_i t_i 1 add store
}bd
/xy_proc{
        
	t_array t_i 2 copy 1 add get 3 1 roll get 
	4 -1 roll add 3 1 roll add moveto
	/t_i t_i 2 add store
}bd
/sop 0 def		
/cp_proc/x_proc ld 	
/base_charpath		
{
    /t_array xs
    /t_i 0 def
    { 
	t_c 0 3 -1 roll put
        currentpoint
	t_c cply sop
        cp_proc
    }forall
    /t_array 0 def
}bd
/sop/stroke ld		
/nop{}def
/xsp/base_charpath ld
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
/refnt{ 
findfont dup length dict copy dup
/Encoding 4 -1 roll put 
definefont pop
}bd
/renmfont{ 
findfont dup length dict copy definefont pop
}bd
L3? dup dup{save exch}if
/Range 0 def
/DataSource 0 def
/val 0 def
/nRange 0 def
/mulRange 0 def
/d0 0 def
/r0 0 def
/di 0 def
/ri 0 def
/a0 0 def
/a1 0 def
/r1 0 def
/r2 0 def
/dx 0 def
/Nsteps 0 def
/sh3tp 0 def
/ymax 0 def
/ymin 0 def
/xmax 0 def
/xmin 0 def
/setupFunEval 
{
    begin
	/nRange Range length 2 idiv store
	/mulRange   
		    
	[ 
	    0 1 nRange 1 sub
	    { 
		    2 mul/nDim2 xd		
		    Range nDim2 get		
		    Range nDim2 1 add get	
		    1 index sub			
						
		    255 div			
		    exch			
	    }for
	]store
    end
}bd
/FunEval 
{
    begin
	
	nRange mul /val xd	
				
	0 1 nRange 1 sub
	{
	    dup 2 mul/nDim2 xd 
	    val	
	    add DataSource exch get 
	    mulRange nDim2 get mul 	
	    mulRange nDim2 1 add get 
	    add 
	}for	
    end
}bd
/max 
{
	2 copy lt
	{exch pop}{pop}ifelse
}bd
/sh2
{	
	/Coords load aload pop 	
	3 index 3 index translate	
					
	3 -1 roll sub	
	3 1 roll exch 	
	sub				
	2 copy
	dup mul exch dup mul add sqrt	
	dup
	scale  
	atan	
	
	rotate		
	
	/Function load setupFunEval	
	
	
	clippath {pathbbox}stopped {0 0 0 0}if newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	currentdict/Extend known
	{
		/Extend load 0 get
		{	
			0/Function load FunEval sc	
			xmin ymin xmin abs ymax ymin sub rectfill
		}if
	}if
	
	/Nsteps/Function load/Size get 0 get 1 sub store
	/dx 1 Nsteps div store
	gsave
		/di ymax ymin sub store
		/Function load
		
		0 1 Nsteps
		{
			1 index FunEval sc
			0 ymin dx di rectfill
			dx 0 translate
		}for
		pop	
	grestore	
	currentdict/Extend known
	{
		/Extend load 1 get
		{	
			Nsteps/Function load FunEval sc	
			1 ymin xmax 1 sub abs ymax ymin sub rectfill
		}if
	}if
}bd
/shp	
{	
	4 copy
	
	dup 0 gt{
		0 exch a1 a0 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a0 a1 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
	
	dup 0 gt{
		0 exch a0 a1 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a1 a0 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
}bd
/calcmaxs
{	
	
	xmin dup mul ymin dup mul add sqrt		
	xmax dup mul ymin dup mul add sqrt		
	xmin dup mul ymax dup mul add sqrt		
	xmax dup mul ymax dup mul add sqrt		
	max max max								
}bd
/sh3
{	
	/Coords load aload pop 	
	5 index 5 index translate	
	3 -1 roll 6 -1 roll sub		
	3 -1 roll 5 -1 roll sub		
	2 copy dup mul exch dup mul add sqrt
	/dx xs						
	2 copy 0 ne exch 0 ne or
	{
		
		exch atan rotate	
	}{
		pop pop
	}ifelse
	
	/r2 xs
	/r1 xs
	/Function load 
	dup/Size get 0 get 1 sub	
	/Nsteps xs		
	setupFunEval		
	
	
	
	
	
	dx r2 add r1 lt{
		
		0 
	}{
		dx r1 add r2 le
		{ 
			1
		}{ 
			r1 r2 eq
			{	
				2
			}{ 
				3
			}ifelse		
		}ifelse
	}ifelse
	/sh3tp xs		
	clippath {pathbbox}stopped {0 0 0 0}if 
	newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	
	dx dup mul r2 r1 sub dup mul sub dup 0 gt
	{
		sqrt r2 r1 sub atan
		/a0 exch 180 exch sub store 
		/a1 a0 neg store 
	}{
		pop
		/a0 0 store
		/a1 360 store		
	}ifelse		
	currentdict/Extend known
	{
		/Extend load 0 get r1 0 gt and	
		{	
			0/Function load FunEval sc	
			
			
			
			
			{ 
				{	
					dx 0 r1 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				}
				{	
					r1 0 gt{0 0 r1 0 360 arc fill}if
				}
				{	
					
					
				
					
					0 r1 xmin abs r1 add neg r1 shp
				}
				{	
					
				
					r2 r1 gt{	
						
						0 r1
						r1 neg r2 r1 sub div dx mul	
						0	
						shp	
					}{	
						
						
						
						0 r1 calcmaxs	
						dup
						
						r2 add dx mul dx r1 r2 sub sub div
						neg				
						exch 1 index	
						abs exch sub
						shp
					}ifelse
				} 
			}sh3tp get exec	
		}if
	}if
	
	/d0 0 store
	/r0 r1 store
	/di dx Nsteps div store
	/ri r2 r1 sub Nsteps div store 
	/Function load 
	0 1 Nsteps
	{	
		1 index FunEval sc
		d0 di add r0 ri add d0 r0 shp
		{
		
		d0 0 r0 a1 a0 arc
		d0 di add 0 r0 ri add a0 a1 arcn
		fill
		
		
		d0 0 r0 a0 a1 arc
		d0 di add 0 r0 ri add a1 a0 arcn
		fill
		}pop
		
		
		/d0 d0 di add store
		/r0 r0 ri add store
	}for
	pop	
	
	currentdict/Extend known
	{
		/Extend load 1 get r2 0 gt and	
		{	
			Nsteps/Function load FunEval sc	
			
			
			
			
			{ 
				{
					dx 0 r2 0 360 arc fill
				} 
				{
					dx 0 r2 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				} 
				{	
					
					
					xmax abs r1 add r1 dx r1 shp
				}	
				{	
			
					r2 r1 gt{
						
						
						
						calcmaxs dup	
						
						r1 add dx mul dx r2 r1 sub sub div	
						exch 1 index	
						exch sub
						dx r2
						shp
					}{	
						
						r1 neg r2 r1 sub div dx mul	
						0		
						dx 		
						r2		
						shp
					}ifelse
				}
			}			
			sh3tp get exec	
		}if
	}if
}bd
/sh		
{	
	begin
		/ShadingType load dup dup 2 eq exch 3 eq or
		{	
			gsave
				newpath
				/ColorSpace load scs
				currentdict/BBox known
				{
					/BBox load aload pop	
					2 index sub				
					3 index					
					3 -1 roll exch sub 
					exch rectclip
				}if
				2 eq
				{sh2}{sh3}ifelse
			grestore
		}{
			
			pop 
			(DEBUG: shading type unimplemented\n)print flush
		}ifelse
	end
}bd
{restore}if not dup{save exch}if
	L3?{	
		/sh/shfill ld
		/csq/clipsave ld
		/csQ/cliprestore ld
	}if
{restore}if
end
setpacking
%%EndFile
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 0 0 416 517
%%BeginPageSetup
cg_md begin
bp
sdmtx
%RBIBeginFontSubset: Helvetica
%!FontType1-1.0: Helvetica 1.0000.0.0000
 14 dict begin/FontName /Helvetica def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /L put
 dup 34 /a put
 dup 35 /p put
 dup 36 /t put
 dup 37 /o put
 dup 38 /N put
 dup 39 /d put
 dup 40 /e put
 dup 41 /space put
 dup 42 /one put
 dup 43 /two put
 dup 44 /three put
 dup 45 /four put
 dup 46 /F put
 dup 47 /i put
 dup 48 /r put
 dup 49 /n put
 dup 50 /g put
 dup 51 /C put
 dup 52 /k put
 dup 53 /s put
 dup 54 /T put
 dup 55 /m put
 dup 56 /B put
 dup 57 /y put
 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A1D676C79660000000000000E28000015CC6865616400000000000023F40000003668686561000000000000242C00000024686D74780000000000002450000000686C6F636100000000000024B8000000366D61787000000000000024F000000020707265700000000000002510000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A
 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020
 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158
 B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0401BB000598A8A20B0032653582321B0808A8A1B8A235920B0032653582321B800C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00000000020042000004D005BD00030007003FB800532BB800082FB800092FB8000810B80000D0B800002FB8000910B80003DCB80004DCB8000010B80007DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB30000000100C4000002D5059200080023B10801B80133400C0404070C04079605000A47091076C418C4D5FD39003F3FF4CD313013353E013733112311C4C39A268EC003F68A1359A6FA6E03F60000000100400000041E059D002200A6404E3604460457056B1D6E1E7A1E84018702082A085A196B197C197C1CB519050022010F041C0E1921071C19040100051F0F0F22130A351305201F7521220C217F0738166F220E270F811F38222447231076C418D4EDF4ED10F5EDE4003F3CFD3C3FED1112392F1217390111123912393911391239005D31304379401C04190C2511260B120E2800091407280119040D100A280108150A2801002B2B1010012B2B2B2B81005D36123F01363736353426232207060723363736213212151407060F01060706072115214A85C1C0813452967DB9472604B70342750128F6E37946B5896238641A030EFC29B90112706F4B35536B7D938C4B85BB76D0FEF6A3AC7A47654C3631576AAA000000010031FFD9041A059A0031
 00C4401F490C532D6529632D7529752D069626014B082B0A182B140D03F93114350D20B8012340141135107F0D0D311B3524050735310D1896274411B8014A400F0A382E6F021F2920810327023347321076C418D4EDF4ED10F5EDEDF4ED003FED3FED12392FF4FDE610ED10ED111239011112393130437940362F301926000905261D2522260600032800040308300A28011C231F28001A251828010401072800092F0728001E211B280119261B2801002B2B2B2B012B2B2B103C2B2B2B2B818181005D015D0402353316171633323635342623220607351E013332373635342623220706072334373621321615140706071E01151400230116E5BC0C2846B78EACB5A11225131C26166541729865B4452605B2406E0115DBF0472C46717FFEF2F8270117C88B3F719878947601019F03022038906B7478427AA070C8C3B98452331D1FB180CDFEFE000000000200340000042F059C0002000D005C402209020A080D010202BE12060607020601050708030106070A02750B05EF030C070403B80117B501960D08AC0AB80158B3050F470E1076C418D4F5F43CFDE4003F3FF43CFD3C1139390111123911123939872E2B047D10C50F3130011109011121350133113315231102A5FE3501CEFD8C029098D3D301FB0289FD77FE05015EB0038EFC5F9DFEA2000000000300970000050405BD000A00150028008240385A0D5A116A026A0D6A117A02772107490D4811021D081F0F041F131E000027081E17020B1E270804311B690F31231A2A091525281619292AB8015FB3217666182B2B4EF43C4DFD3C4E10F64DEDF4ED003FFD3FED12392FFD3901111239313043794012181A0508192506260718042B01051A082B01002B012B2B2B8181015D5D013237363534272623211101323736353427262321110321201716151407060716171615140706290102C47E466E754282FE9D01ADB74E318F4C7DFE75C3027701026D404F294D7138635985FEDEFD93035023378F90321CFE39FD5A6A435FA03A1FFDFB05139A5B778B592F272B3660A98E73AC0002005AFFDA057105E5001D001E00B1403B1B0597019605031F011F0482018705891305530803861D111115063A1D030C3A15091E021E1E190331023B1031111A20093119191F20A1216A66182B2B4EF44DED4E10F64DEDF4ED12392F003F3FED3FED12392F10ED31304379403A001C172513260E251B260B160932000D1410320112110F10071C0932000500033201010204030A180C32000F120C3200081A06320104010632012B2B2B2B01103C103C2B2B103C103C2B2B2B2B2B2B815D015D080117232E0123220011101233323736373306070621202726111037362123041E013411C221C5B2D9FEF5F1EFDC733D1EC21A92AFFED7FF00AEE5ACBA01472805E5FEDABB8EA6FECFFEC5FEFEFEBF
 A95991E89DBD9BCD01AC0145D0E20000000100AF000004AA05BD000900394018071E040409031E0100020908066B011A0B03082500190A0BB80157B32195DC182B2B4EF44DFD3C4E10F64DE4003F3F3CED12392FFD313013211521112115211123AF03FBFCCC02D1FD2FC705BDB4FE42AFFD64000001009C0000044B05BD000500314013000203021E040508031A070102250500190607B80153B321765E182B2B4EF43C4DFD3C4E10E6003F3C4DFD3C3F31301333112115219CC702E8FC5105BDFAF2AF0002009C0000052A05BD0009000A007640143701380602070117012701470158020507010202B8019B4017120606070207080301020806080A030A0A010608020302B8019BB505041A0C0708B8019B400A0900190B0CA0217670182B2B4EF43C4DFD3C4E10F63C4DFD3C11123939392F003F3F3C3F3C12393904872E2B877DC53130005D015D13330111331123011123019CEB02E6BDDFFD0FBE023A05BDFB5A04A6FA4304A5FB5B05BD000000010021000004C905BD00070034401A01061E00070204080917171A00FB0203250504FB0619088C5E182B4E10F44DF43CFD3CF44E456544E6003F3F3C4DFD3C3130011521112311213504C9FE11CAFE1105BDAFFAF2050EAF00000000030052FFDC04470449000F003B003C00DD40382A30010A100B1B0C1C2733481069096A10073908120C09031B320724091D100C1D3B2B022E293BB73B023B322A2512100705081C2722171CB8018A4023171D1F07271D2E0B021D350B3C073C3C1C1407292AA8241A3E1B291C4A0F2738193D3EBC0197002100B9019600182B2B4EF44DEDF4ED4E10F64DE4FDC412392F003F3FED3FED3FEDED1239111217395D1112392EED2EED01111239111739313043794028363715220001192501360F2100181E1B21001620142101212200370221001A1D1721011521172101002B2B2B01103C2B2B2B2B818181005D015D2416333237363D010E010F0106070615013637363534262322070607233E01333217161511141633323637150E0123222726270E012322263534363713010E724E5F59962168326D62315301B43E150C837A8D3B210AA805F7A3BD767517250C1E112A2C265D2A160937CE7C95BDBA978ACF5A2C49A691151C060E0D1C2F67016C082C182D5C534C2A53C69B484898FD971C220303850C06422340486AB58895A41301E40000020038FFDA03ED05C2000B001D00774032370E470E570EA704A91B05250814020F1D1000081D1D07130A021D170B052E132E102911121A1F0B271A191E1F87217242182B2B4EF44DED4E10F63C4DFDE4E4003FED3F3FED3F1139113931304379401A181C090A000101180B2600091C0B260000190226000A1B0826012B2B012B2B818181005D1216333236353426232206150017161711331123350E012322
 0035341233F692A17DA1A67A88A9018A53303DADA23FAC6FB3FEFAEFDE015FE8D7C9CBC3D0CA0237341E4B021DFA3E956358012DFAEA015700030048FFDA041A0449001C00240025010C40799708991AA71F03050E020F0514150E120F1514400C401408291A014B0BB603C701C603C71BD808D909D61FD823E817E8230BC711C712025C080521240F9A161D243906070716211D1C070A1D160B2507971CA71CB71CD71C0425160F251C05190A0C07110E270F1D27051A27242E072719192627D421A65D182B2B4EF44DFDE44E10F64DEDD4FD391239391112393912392F5D003F3FED3FED12392F3CFD3C10ED1112393130437940460023040503050205010504061F26111012101310141004060C25221B24260020001D26011E1D09170726000B150E26010D0E231A2126011E0521260108180A26000D100A2600002B2B2B2B01103C2B2B103C2B2B2B2A2B2A8101715D00715D5D00161716171615211E013332373637330E01070607062322001110003301262726232206070102B4D638361210FCEF0590978D543014B1074F3152794152C8FEEA0118E2011F0B284AAD7CA805012304476B55516C4AA2A3C55D36473B912E501C100123010601020142FE26754682B38A01DC0000000003003DFE3B03E80449001F002D002E00B7404D36144908490958085909880CA91BA81DA927A62BB91B0B4008031622290EC40A221D1F070406291D190A121D0A0F2E072E2E051C032E162E2D29051A300C0E270D3E26271C192F3087217242182B2B4EF44DEDF4ED394E10F64DFDE4F51112392F003F3FED3FED3F3FED10ED1112393931304379402C23281A1E0B1124251026231E262600281A262600110B0E21000F0E0C0D251D222601271B2926000F0C122100002B2B2B01103C103C2B2B2B2B2B818181005D00171617353311140706212226273316171633323736270E0123222411100033002623220706151416333237363501027C5E3335A63C70FEC9ADEC0EB70D273D83CF40260336987DAEFEFB0107BA0144A47FBE4625937CC24F2CFED104423E234387FC32CC76DA9BA548273C9256DD5250F7011D010D012EFEA1C0B25F9AB5BDAF6384022D0000000200840000013B05BD000300070036401C07E50400010006030A0917171A06010229070300190809AA216242182B2B4EF43C4DC4FD3CC44E456544E6003F3F3C3F4DED3130133311231133152384B7B7B7B7042AFBD605BDCC000000010080000003F805BD000B00A740645902013A08011902010706170657056705790678078705B903C903DA030A05050608080709030284029402A4020302391209090405060504066D12070708080705040305060908050204030A00000403060A07060A061A0D09020A29000B190C0DB22162B9011600182B2B4EF43C4DFD3C3C194E10E61800
 3F3C3C3F3C3F1112173901121739874D2E2B087D10C104872E182B5D057D10C010083C083C3130015D00715D7213331101330901230107112380AD01CEE6FE6601B1E6FEB297AD05BDFCAB01C7FE6FFD62021C8AFE6E00000001008400000625044700260085403B0708070E060F1708170E170F2708270E270F4819560B670B0C23250A1A1D23190A02041725211D171D0D060700061B1C2503130A2817171A112914B80101B21A291DB80101400A00012E25292600192728B8010DB3216242182B2B4EF43C4DFDE410F4EDF4FD4E456544E6003F173C3F3F3C4DEDED111217390111123912393130005D13331536373633321716173E01333217161511231134262322061511231134272623220615112384B240345971804E2C243CA265D84E2ABB6B4D6A99B71A297066A7B4042F984F243D3F244656539C548EFD3702E86B508EA6FD9102BB6D324B9ECFFDC80000020084000003ED04490019001A005E4031B706C706020406140627147606740705140C021418101D05070006180B0A1A071A1A000C29091A1C012E18291900191B1CB80106B3216242182B2B4EF43C4DFDE44E10F64DED12392F003F3F3C3F3FED1139390112393130005D015D1333153E01333217161511231134272623220706070E011511230184AB4CAA68E4502CB71D307E40294A382D1BB401A7042F985E529F57A2FD5102A3623C640D1642357169FDCF0449000003003BFFD90421044E000C0018001900904033980896109916A504A808A610A916B808C808D704E50EE9140C3A08061D18070C1D120B190719191502270F1A1B092715191A1BB80109B321725D182B2B4EF44DED4E10F64DED12392F003F3FED3FED31304379402C001704260B1309260000110226010717092600050D0226010A140C260001100C26000816062601030E0626012B2B2B2B012B2B2B2B2B81005D241235342726232206151416331200111002212200351000330702E085304CBAA59696A3D6011EFCFEF7DDFEFC0112E70674010FA6965E94FCB2ABE403DAFEECFEF4FEFDFEAE012BFC010E01400500020076FE5504250449000E00220074402CA908A717022808201C110E061D15070F060E1D1C0B220E0227181A240A2E102E2129220F1923248721BD5D182B2B4EF43C4DFDE4E44E10F64DED003F3FED3F3FED1139123931304379401C161B00051A260426001B022601051602260101190E260003170626012B2B012B2B2B2B8181005D243635342726232207061514171633013315363736333212111007062322272627112302C6A72546BABB45252546BAFE2EAF36405B7BB6FEB7749A7952303BB479D3D2805CB1BB649A7C57A603B18E49283CFEE9FEFDFEA2965F351E49FDDD00000100890000029204470011004F40262703260D37034704040E0810020E0911090C2708
 05070006110A081A13012E10291100191213B80145B321627E182B2B4EF43C4DFDE44E10E6003F3F4D3FC4FDC411123939011112393130005D1333153E0133321617152E0123220615112389AB15A46B05181D101B108892B4042FB9369B0203BE0302AF72FD980000020042FFD703B6044B002E002F012E408F38099805961299149815982A062824252736214621472447275624572766246726790C790D790E7623742474257426A61EA82C1303000B15052D042E13001A151B171C18152D142E280F0B6908262536250225220D0A042B1318C61C1D1307041D2E9A2B0B2F07090E100207002F212F1A1F18161827173E28260727281A310E1F27103E00272E193031B221A65D182B2B4EF44DEDF4FD394E10F64DFD3910F4FD3911123939392F111239113939003F3FEDED3FEDED111217397131304379404C012D022615251A26210E1F21000926072101032C002100052A0721011D121F21001B14182101200F22210021220E0D08270A21012625090A012D04210006290421001E111C210119161C2101002B2B2B2B103C103C2B103C103C2B012B2B2B2B2B2B2B2B2B81005D5D015D13161716333236353427262F01262726353436333217160723262726232206151417161F011617161514062322262701EF082544A864983D27738F894174DBB9F26B4302AA05263E99666945284E77C24269D9DEEFC70701B701505A3057575B4524161D24222A498198BC8E5A683D32474E40462A19131D2F2C45948FD0D9A002F900010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C593000000020015FE4903E804490018001900CA406E8A158818A71803070617063812481258126707770377078C1498009705981597169717A800A8161048004B154717C915044405C605028705A600A601A705A8170524280518151716010006150C0B0F1D080E19071919161B17171A050001AF171518AF0C8F16191A1BD421677E182B2B194EF44DE418FD3939FD3939194E456544E61812392F003F3F4DFD3932192F183F3C3C3C123939014B5279401215150016166D121717180501016D12000018872E2B107DC418872E2B10087DC418015D71313071015D005D013306030207020623222627351E01333236373E0137013301030321C7268362429C809C26291E2F2A10322F10053E0EFE74CC011F01042F67FE91FEECAEFE66B40608A40D062118089424044EFC980382000001000000000000642C0B93
 5F0F3CF500110800000000005F4D8F0000000000C621BCD6F865FC270B9108F9000000090001000000000000000100000629FE2900000C01F865FCED0B9100010000000000000000000000000000001A0512004202390000047300C40473004004730031047300340556009705C7005A04E300AF0473009C05C7009C04E300210473005204730038047300480473003D01C700840400008006AA0084047300840473003B0473007602AA0089040000420239001704000015000000340034005A00E6019201E0026402F40326034E03A403D2049C050805D2067A06A80718079407F0086808DA09200A000A500AE6000000010000001A006F0009006B0007000200100010005D000007E80A1D00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565
 234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500
 00>] def
 /CharStrings 26 dict dup begin
 /.notdef 0 def
/space 1 def
/one 2 def
/two 3 def
/three 4 def
/four 5 def
/B 6 def
/C 7 def
/F 8 def
/L 9 def
/N 10 def
/T 11 def
/a 12 def
/d 13 def
/e 14 def
/g 15 def
/i 16 def
/k 17 def
/m 18 def
/n 19 def
/o 20 def
/p 21 def
/r 22 def
/s 23 def
/t 24 def
/y 25 def
 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-1947 -985 2961 2297}def
 /UniqueID 4265107 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C9264C9384F249EBFD8DD5BFBB9BE844B0E83BCFE532E688793A86D21BD36F43AB56AFBEE013A0B4328FDBE9C264EC8DF8BDC4CC39A63B03A287D9D46922FD363B161B8B0E7F51F855951EB03E85DC701C64F37004253E0E97FE14AFEDDEF60E4B990F7D1AE27A1A3473C06F47F1D0A2BF0FA5AEE5EE69552D10B83B5B163252B839CF292EF00E5467D6F2B2237B6B6F18DDA85FAA7ACFFAD28A401323DC19B0AC62022AE4E2F6B6E585D3CB9322A8DC09AA2CFC58DEF7F2748D30A5A6A348E8EBA9FF24C16FE55429A565D805CCD783CF779DE3C16E8323C251B173AE3FFC53FAFE779AF91C43BB9BE4DED09DC9AE790ADB1143E1D8D4FDF95E420C7AD62460083FBDECC0C704014F870595F6B7F92FCCB4D33405EE210B640FBB2C9A810BB15C9E98F0B17F3A093F4128E11DC1624F860CC79EEBCD0BBB4A349F034E646A473F7B8D0774CC9A2BFB9C9DED9FCAAAD8CB50DCF5CCF572B766FB07FDA1F7CD40A9EC17C633856F06F84997146020156CA046901E8B39F8D6DA3D9277534BECE253788756E3D45DEECDA0E6F0093B2F0660A0C0B3E3D2D693166FAB4AE548EBB0A1B563351B798E14CB4E260FB02AC29697D39ABA5DE36623AA7513846F447817B0E38A27739629DC9E19FCA434C8BCBBC75B70CE3EFA2AE477B166409C180ED2DAB7692B742137325732B942206BDB4A206D508C37EE2F3AD7A5BF1CB4C7B3B0DB7B0A5F60AAF80B0BDCDEAC04424D9A380C971BCDB5EB93C1BEA9EDED2FC8ECD8B
 A80323CE0A2B398D08CA843EFC4E49AC0ED6D86D1DD4EEA7CF322788900BF3D8A3712EF99E843E48E0E5C949CEF786EC76FC07A3972C1E1B06DAB6381B799A84230E10D0B3782112313326C2947D6135D62C560F713E51B3E9D7DD07CDFE8659C301FA02FF00BCA1FF1961E96D02815979219F85EA63565B9720CAEB1CBF912043571919250A964EE473CD1991ED3882E1440C64BFC18E984BCC68581CDD55D37C1FC47CD0C8A18A057F95B2DDB64F2241F9F4D92DCC9A2957442C859304C09712E593FF1389CD3914651B2745F6E28D69E1A1806910F6C2642AEBFA65465B85569B6A514BC3797B4CB97DC61035052AB386B8E06EF7D3198FF19565C9D1455176E89FBFA7CFDFCB321336230F9C328756AE710CE7B602124D2F3B0E981811AFAC33CC68B4BB0CCC42D0F9C456D7FB41B37DDBE267B8B14320BE125F5AD8D102F90DEE3297B41E35B77F83F7D56CBE7C6EC60D48D15ACE41EF5C3B1C789DD54B78CF686A0BDA3ACC48C79FF2C07379D7F626E5D701F4D5F6C3EB39F8E33DB81D25913DB1AF1D16627B762E7D5FD004F241F41D169D7DFD81A083AAF1A7205D1B3E623354590FB3A7638803BEFB933595AD0D36A637BB59F04F7B392AF729DF7E66DFD782A145FCA5953C980D23E7FB2DD9833A4C23C111EE3381CE1F954B7A76BA6788BA8730D920928467107DD2B5C6282B363784B84D44D21D31919EE45163A251FCC471AEC96D6DF95C129032928311236DAB8F38EFBDA5BF5EC6D6678B099007621103FE54FEFF0F2F60D78816751EEEC6F165854048B595AADE5EB4A0BCECB2F3F8B38F7890177B7669B2BD0B06CE3A9C6B1F9241367A4604D68370D95D01AF5839A68362BDB2C396B398917453B7452B4C27ADD72574E3677314B6B3E49E428FFD30FB292C046F420A52F752A4043D8B89FE23BEF53CBACE09C7203FD0617C8E8F1EAD8673CB23592695897DCD2E40DE959C05BB70F7FD01F23234504BF9FFA81226B246148F992E36051D195298721C69DFE0BC52431E5CD19F2ADB9642CB36239E9EA5C903B8C2D861D14F17105A4E1B73D00A157E20DC5429C8ED957F5D957DF036274E6A4D3B50AA74224FFE2F2B24C13795F536F013B8D9B3EF7A5F9A578FCA03B8893F5F248D91C276FE8425F348834B2884332933B5A338303E618606F1878D7AC1041F2BCD3BA5F01F59B94175DB85398C4377C2EA94C5743C88CFE25019A8E863D1BBF9B106B8CB143D0032F478C6B78840CC68B441119F6C05E5B52107648E1C645BBDCEBE0AB7B579E43C89251F40F554B3C9911FCF44214882D3660368D57EE92F41BE4A4833B819CA53A53111C840B229D9A2FA6AAAE07BF5731DA2FA0074063EB33AD99D99920D35318BBE776617461CB5610B9AE1037F84DE15A42B1C3111FF9CE8C10437BC003EAF3BEE29EA1D749886EAAE637F5B
 900FEDFD1A3DFF8D0644B3B1867B5591C7BAC786463703C9882FA7776074BA7030C0E0ADCBBBFAED757DF32294D15219E4368120C7D9C8FC1656455956EBAC1E8F6F82346DF033CB4958FA9AF5401418495B60C96EA8C865C79A0A007E2F0FB6D9701E74781B822D847622D906973FBA1BCE221BABAEEB3D6E249988672D7C4AE698C7785FDE750B9BCCC870B7A1745CB127C8DCFA05D4335FA362C111E9F1E1213C5A434F62664F480F9A05E3E7071E5790A270164345D9BF4463DB27F7280302E4A2C50B78E5BE96C23EAE7254B4D021C575A2CF512F527F84BCE4378464BE122182533C48AC7BDAF9D323745BC1D4A474C8624B92173CD68E04A3F65EBB5ADF805B0D86E7DF0ED91CD36A9ACC8FAF2BBCEDC2BABA1E4801883EBEE44924188FBC903A36580976F61569E9A611F0708C7E72222F0B932719544E30E0729EF743D89570C339B9BF5854E7C33128CE3315C239CE49241851D9375B8BEA21A6B0E314BFBD8B949DC90FE81BBDC228ADA0DC0F28B0A5807E4A2D7F41B961D475D3659C9CB53F57235D1529F685F0259573776ACD50D2048A42DDEC907C88BBB9E7441AED3CC3E5985B5A66881A469EC1822498D90B503B305851C7B0CFFB905E788E143E8DF9DDFDEA04815563BDF252811705B6F962C52DE3914CC2F4307F8FFB4471514626FACBEC828517330ED369E2F2FFC95B08BEF94237F83EAA3017409B5B321B1B89844C4A9742A57B55BDE58909DCC1E9E4AEF38E1EF8F9D4647DCDBF78E24859D67F822597238B882C5B0F8CA5DEEFE6B03F897CCD6D6C86DB742E154D07FC577FA6A7557BA759EA8A689E5B8F30FCD6247F9BB50CD7FC678D9CC61817F25EDB495D4DD8626E12C965FC0B1A5E95CB72010EFCCF9B71A4E87CA714896391D3A55B1BD8664302D270701A08BF9916251FD0203BEF38FDFFE2DA72609C6756F611C551E354CC03A4E45222BC5C60A579DACFF3123F7E32DD55D2F6B50A4BFD384D6B58358490077509C1B33F10ADF465523E27CC3817183DA61BEBB92B8766B1BE6719838CC59709C18032D9B5901320ADA1107702F2672DD03D8224D50B796CFCFDE49BC0916139B1A61C966D884782562490203BB92D99B48ADFDCE9EDD0A1647475A5CFAAFDDB63F792140DD2C11A24CB505BFFE6333B3C3D447BA6B9B4893205070ACB351B81EF66BB6956E03C2470A810E50475BB003CCAE54650546882C5DC9DE7B6FFF4C10360145D5A1110B1DB12003D0682C8A35D8A36A9EC76D1837B7B3EFAA08322B84D838F0084273C503F2886AB4E35F09ECF0EFFDB6D2818AD2DC8330CD6765749DD5A657AC07254E2A23DF2715132DFB1A04BDF945BE8CA8649C2F5F7D82AA41F9FA731E6AF369BD969A5C41FC6D894E7A825908F0C5B41EB3DEEC4AC14937C06931F4D522B83A778ABFE2D0F7693CA049E630A1280
 9A21807A58EB310B03D6EE9843448243280BCB6AF4AB5F9544038FC51D985302227CC7D23C4776405DF254FD471E1B58C2D2B6B24974CBC172E32929E0AD35F198052B3E6F0C0440C7E45C80AE3913DDBA375B7CCD9BFBDF954E140E6BE2DAF2BFDF733B29FBD6E64421E29B766479CB313A78C62EE87AFD7BD52B3E18B7B33347570030778EAA2A697A978DCD9DB5AF40DEB678B6A3A24E9E5C3DE897938E16FC298B71CB42B2239F936470827F21954EAB6816A9C3543E1C6A753E8FBCC13F3CAC69F4E7861B47C5B9B25107CC3D21C9B2A86BBF5244503A5657FDF17A001AC957FD1DAE15CE947EA98B8DCC098B2CD4B23B169156C37629311ED486FD7EE1826CA718EC8D31A8BCAF93037B98A24C7B0B2EC1A7BDA2D95BD4808EAB6DA51F9727A3D13358DF53BAB34CEBEEE2063D0743718D7C997B426648ECDC027D88D3664E5E92EACA1213932D99C2040E38F1E7C02AA2C5D5554A99FBB9120D64D6385CA12C65C433D7A30DDC4D748870072E2F1D14C4CEB1D16D0A19003D5E891E92F999382599B5CC3791631D3C7CA254EFD166824006D37E407241DC3935C9CBF739A1353761B6BBBB7F05AA4184334DD7F0E8A357F76EFD51BE22D769727DCDF3D84150ED4F7DD89EB9DE23417AC3C59C2288DA787B0ABF75A00B53967B61AF42D43AAA4DEC9CB6809E760494D34C7D47FEA8A3691C3975FA5222C4ECE321B6DAF35228C027C86D959ED29CB7E690C8556801E38F778067AAF48D8C3021AE6ABFA7E40AC1994F76FE6B7C2B0452DB95171B30A30CE72F46AEE698CB62480966D56425A223317B96AE9035AA0CFA339DCD8733A069A37E742BF85F971DD4D88D983229B40CBAB2157099CCE8D544FA9C371D5A41D78CC07EFD9FDF45E48500296D154302565BDA43E65DC0A05D5C79BEF1057DD0366A7FDBBE349CA94404E2D224361C52CA490B132D4F033F975DB08A090B56D781DDD89F0FB207333A92E979668ED3E9FAE519E66C5C1150D9A36ABA6FD7A36BE3B5754924AF31CAAF2A75395C1DB46215C6B08C6AD30123F3605A0636680CD3DDAA9E89CD1CFEC50AC56126CE5CF2AEE5175F520DC0FFE3DF9F163FFC76A9983BF0AC1F17D6B8EA130E53DE5ED53DF2F7AE998122135389254739CF79A7DEDD79863A11724809EF61BC40435A042F4CD8F0F3F027AB1B3CC30F7699070017BA07BD85DE3280F5F1BA0E2EB72B57C499493CC1732A230F687984814C992342006B09F5E05885079EA71EECFA10274DCCF62F6F5140964BE33E9C761A978B2F45C3AB9A12D60073655A513DBA97E5935090042BE258D16DB1E37E537DF44DE69DCCD2E61D60BAC6AB2104A81BDCC48E9F907AB25002EE14573F0234D8DC54A4B05738AE5151F88A68383ACA812179A622D8CE7A9B7FC1EE8FD809DC7065B162F2B8BE31390995157F9EE9736EDF
 C0DDE844E8828C28FAD53E2AEEF2413A71401E6A90012C765546B4F7
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End
 %RBIEndFontSubset
/Helvetica cguidfix
/F1.1/Helvetica renmfont
%RBIBeginFontSubset: LucidaGrande
%!FontType1-1.0: LucidaGrande 1.0000.6.0040
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 14 dict begin/FontName /LucidaGrande def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /F put
 dup 34 /i put
 dup 35 /r put
 dup 36 /e put
 dup 37 /n put
 dup 38 /t put
 dup 39 /I put
 dup 40 /f put
 dup 41 /a put
 dup 42 /c put
 dup 43 /U put
 dup 44 /S put
 dup 45 /B put
 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -2186 1 index div -1509 2 index div 3361 3 index div 2381 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C000006B66670676D000000000000075400000D33676C7966000000000000148800000B3C686561640000000000001FC400000036686865610000000000001FFC00000024686D74780000000000002020000000386C6F636100000000000020580000001E6D61787000000000000020780000002070726570000000000000209800000CAF062B0019000005C80025000005C800250000000000000000000000000000043E001800000000FFDB00000000FFE800000000FFDB0000FE75FFE8000000000000FED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000080000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5006F000CFF3BFF91FFF400BF00680014FF41FF98FFEC00000000000000000000000000000000000000000082FF7E00DF00D200C900B400AD009B00DE00D200C500BE00B900AB00E300D200C600B900AD00950062000000A4009D0085000000AA00A10094007200AD00A100940085000000C5000000000000000000000000000000000000012800000000000000000000000000F700F700970141004A00F7000000000000000000000000000000000094009400940000000000000000000000000000000000000000000000000000000000000000000000000000000000E6FF1A00000000000000000000000000000000000000DEFF22007C007C027502E400750075009A009400AC00A0000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A0001900000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B00000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B0000006F0073000000000000000000B9008C010A007E00C50031004F009A004200000000000000000000000000000000000000000000012800F700A00063009400820082009700C600B300B3007C007B009100000000000000000000000006440000000004A00019000000000800043E0018000004000000000000000534000000000000FFE70000FF780000000000C500940000FED80000000000E100760063003C002D001E000FFF1FFF3BFF48FF65FF79FF9DFFBD00DE00B900AD00A600DE00D200C500BF00B900A900910197007C0062005C005602CC01ED0197007C006F00620056004A011D010D009E00940035000000000000000000000000000005C8002500000503
 00000000000008000000000000000400000000000000047B000000000000FFDB00000000FFE70000000000000000FF3B00000000000000000192011700F700C800C300B800AD00A6009C0092008A0080007B00740068005A0050001E003A00000192011700F700E500D200C500B900AD008A0080007B00740068005E0054004A000000000141003E00DE00DE00000000000000000000000005D500190000056600000000000008000000000000000400000000000000043E001800C503C200DE00000000FFE70000000000000000FE00000000000000000000CD00C500AD00A100940088007C0075006F0063003100F700C600B900A0006300C500B300A10088007C0075006F00630056003100F700C600B900C600940082006F0063003E003200190000FF3AFF7EFF9DFFCE0057006F02B3012801830088008800000000000000000000000000000000000000AC008800C501ED006201BC001800DE013E000000000000000000000000000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190000000000000000000000000000007C00AC00C500960000000000000000000000000085005D006500000000000000000000000000000000000000000000000000000000080000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000005ED01B0009400D200B600AC007B007B007C00000000000000000000000000000000000000B904A000C50063007A005100410087014100DE01280068009D0064007500D2012000DE00D100B40000000000000000000000000000000000000000006100AC00D0006F006F036603660000000000000000000000000000000000000000000000000000004A004A004A000000000000000000000000000000000000000005ED00000000000008000104005C000004000000000000000000000000000000FFDB000000000000000000000000000000000000000000000000003E050300D8011200AD009300D800F700AD00B700790067050300D800920000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190082006E002A002A002A002A000040405249483C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C0118B0184358456AB0194360B00C2344231020B00C4EF04D2FB000121B21231120332F592D2C0118B0184358B0052BB000134BB0145058B100403859B0062B1B21231120332F592D2C0118B01843584EB0032510F221B000124D1B2045B00425B00425234A6164B028
 5258212310D61BB0032510F221B0001259592D2CB01A435821211BB00225B0022549B00325B003254A612064B01050582121211BB00325B0032549B0005058B0005058B8FFE238211BB0003821591BB0005258B01E38211BB0003821595959592D2C0118B0184358B0052BB000134BB0145058B90000FFC03859B0062B1B21231120332F592D2C4E018A10B10C194344B00014B1000CE2B00015B90000FFF03800B0003CB0282BB0022510B0003C2D2C0118B0002FB00114F2B00113B001154DB000122D2C0118B0184358B0052BB00013B90000FFE038B0062B1B21231120332F592D2C0118B018435845646A23456469B01943646060B00C2344231020B00CF02FB000121B2121208A208A525811331B212159592D2C014BB0C85158B10B0A432343650A592D2C004BB0C8515800B10A0B4323430B592D2C00B00C2370B1010C3E01B00C2370B1020C453AB10200080D2D2CB0122BB0022545B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C60B0022523442121212D2CB000B0122B2121212D2CB000B0132B2121212D2C014BB0C85158B00643B00743650A592D2C2069B04061B0008B20B12CC08A8CB8100062602B0C642364615C58B00361592D2CB1000325456854B01C4B505A58B0032545B0032545606820B004252344B0042523441BB00325204568208A2344B00325456860B003252344592D2CB00325204568208A2344B003254564686560B00425B0016023442D2CB00943588721C01BB01243588745B0112BB00D2344B00D7AE41B038A45186920B00D23448A8A8720B0A05158B0112BB00D2344B00D7AE41B21B00D7AE4595959182D2C208A4523456860442D2C456A422D2C01182F2D2C0118B0184358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB0194360B00C2344218A10B00CF6211B21212121592D2C01B0184358B0022545B002254564606AB00325456A6120B00425456A208A8B65B0042523448CB00325234421211B20456A4420456A44592D2C012045B00055B018435A584568234569B0408B6120B080626A208A236120B003258B65B0042523448CB00325234421211B2121B0192B592D2C018A8A45642345646164422D2CB00425B00425B0192BB0184358B00425B00425B00325B01B2B01B0022543B04054B0022543B000545A58B003252045B040614459B0022543B00054B0022543B040545A58B004252045B04060445959212121212D2CB0032520B0072587052E23208AB00425B00725B0142B1021C4212D2CC02D2C4B525845441B2121592D2CB00243583DED181BED592D2C4B505845441B2121592D2C01184B52588A2FED1B212121592D2C4B53234B515A58B003254568B003254568B003256054582121211BB00225456860B003252344
 2121591B212121592D2CB00243583DCD181BCD592D2C462346608A8A462320468A608A61B8FF8062232010238AB10C0C8A70456020B0005058B00161B8FFBA8B1BB0468C59B0106068013A2D2C2045B0032546524BB013515B58B0022546206861B00325B003253F2321381B2111592D2C2045B00325465058B0022546206861B00325B003253F2321381B2111592D2C004BB0C8515800B00743B006430B592D2C8A10EC2D2CB00C4358211B2046B0005258B8FFF0381BB0103859592D2C20B0005558B8100063B003254564B00325456461B0005358B0021BB04061B00359254569535845441B2121591B21B0022545B00225456164B028515845441B212159592D2C21210C6423648BB84000622D2C21B08051580C6423648BB82000621BB200402F2B59B002602D2C21B0C051580C6423648BB81555621BB200802F2B59B002602D2C0C6423648BB84000626023212D2C184B5358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB00C2344218A10B00CF6211B218A11231220392F592D2CB00225B002254964B0C05458B8FFF838B008381B2121592D2CB0134358031B02592D2CB0134358021B03592D2CB00A2B2310203CB0172B2D2CB00225B8FFF038B0282B8A102320D023B0102BB0054358C01B3C59201011B00012012D2C4B53234B515A58381B2121592D2C01B0022510D023C901B00113B0001410B0013CB001162D2C01B00013B001B0032549B0031738B001132D2C4B53234B515A5820458A60441B2121592D2C184B5358B00425B004254964B00325B00325496468B0408B6120B080626AB00225B00225618CB00C234421B004251023B00CF61BB00425B0042511122320392F59CC21212D2C0118B0184358B0052546234564611B21B00425B004254A59B00E23442310B00EEC2310B00EEC2D2CB01B435820B0016045B000515820B0016020452068B0005558B0206044211B212121591B20B0016020452068B0005558B8FFE06044B01C4B50582045B02060441B21591B21212159591B21592D2C4B53234B515A58381B2121592D2C4B5458381B2121592D2C4B52587D1B7A592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B00326
 5358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592DB8005D2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8005E2C2020456944B001602DB8005F2CB8005E2A212DB800602C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800612C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800622C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800632C2020456944B001602020457D691844B001602DB800642CB800632A2DB800652C4B20B003265358B0801BB040598A8A20B003265358B0022621B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B80003265358B0032545B8014050582321B8014023211BB003254523212321591B2159442DB800662C4B535845441B2121592DB800672C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800682C2020456944B001602DB800692CB800682A212DB8006A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8006B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8006C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8006D2C2020456944B001602020457D691844B001602DB8006E2CB8006D2A2DB8006F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800702C4B535845441B2121592DB800712C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800722C2020456944B001602DB800732CB800722A212DB800742C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800752C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800762C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800772C2020456944B001602020457D6918
 44B001602DB800782CB800772A2DB800792C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8007A2C4B535845441B2121592D0000020100000005000500000300070014B706020400060204002FCDD4CD002FCDD4CD3130211121112521112101000400FC400380FC800500FB00400480000000000300BF0000044505C8000C0016001E00FD4032E60801491401E91401091C391C491C591C04491C591CA91CF91C046D1C7D1C8D1C03351A451A027D138D13021330010D4811B8FFD0402C0E11483906019906010C0A9C0AAC0A03B604C6040203041304230403090C1C4C1C020C104C10020D9703010AB8FFF840511A1D480C0B011103400B500B020F131F1302140507169317400100179330301E9201030D92003A074A078A0703070D1B7E05127D090F091F09029F0901170D7E00400F094F0902090320096F021F006B022B2B015F5E5D1A18104DED325D7110EDD4ED12395D002FED3FED2B001A18104DED393130015F5E5D5D5F5E5D2B5D5E5D5D005E5D5D5D5D712B2B5D5D5D5D715D715D3311213216151005041114062327333237363534262B013533323635342123BF0180DEEDFED0016BF0E2E42BE74482ECB13B43A8B9FEAE5205C8A89EFEF3726FFEDEB4BE9D1D379584AF859083DA000000000100BF000003FA05C8000900424026089205050004920103000F062F06020F022F02020F0306060205097E00400B026F020A006B022B2B011A18104DED3211392F5F5E5D5D002F3FED12392FED313033112115211121152111BF033BFD970206FDFA05C89DFE109BFD6000000100BE0000019005C80003001B400D010300037E00400405007E30302B011A18104DED002F3F313033113311BED205C8FA380000010064FFDB03E905ED00230138B90013FFF840AF1B1E48F51B01180101F801010916191602D916E91602B604C604027A198A1902151D01851D01571E012A0C5A0C023A0C4A0C6A0C7A0C8A0C05991F01121F221F026B0D011B0D3B0D0228230108230107110109280601591001E81001562201472201D822E822024C0B018C0BEC0B020C0A1C0A4C0A032C0A6C0A7C0A03680E780EF80E03441C01341C441C841CA41CB41CF41C060920192002080F1A2104001214921F152F15021517921204029203B8FFC04033090C4803059200131A7F0F14400C0F4814140F035F087F08025F217F2102087E2140000320035003030A0325216F0224036C022B2B015F5E5D1A18104DED5D5D1239392F2B2FED003FFDD62BED3FFDD65DED11121739313001715D715D5D715D715D715D5D5D71005E5D5D715D715D
 5D5D715D5D715D5D5D715D715D2B05222735163332363534262F012E0135343633321715262322061514161F011E0115140401E195E8FAA17C97638566BD9BF8C0ABBEEA736D8E688A6AC098FEE32541D074826A577A4B3B6CBF7FABDD39C05C74584A724F3C6DC288C1EA00000100B3FFDB04D905C800110083405C280401D71001F60F01490F010A0C019A0CFA0C02090D190D02E90D013B0D4B0D5B0DAB0D0429070113072307B307031303010303130323039303A303B303060B03020D01170409000305920E1309800A017E0040130A6E0212006B022B2B011A18104DED10ED003FED3F333130015F5E5D005F5E5D715D715D5D715D715D5D5D71133311141633323635113311100221200011B3D2A5B4B093B8F9FEF0FEEBFEF805C8FC5ADFCBBFE403ADFC56FED1FEEC011E012B00000000020067FFE704390456001D002700FA4025290D390D490DE90D040906010A212A2102FA2101E80301E90B01D90BE90BF90B03D7070107B8FFF840292124487907890702EB22016B227B228B2203050601AA22017522852202E724011725E72502C4010101B8FFE040492023480C011C015C0103FC0101790301C903D90302190429040202131213221303091F98AF090109090002110F970F0E010B030E0C9711101917971C1626960216001A091E851A150EB8FFC040100B0F480E2385054029156802280566022B2B011A18104DEDC42B10C4ED321139003FED3FFDC63FFDD65F5E5DED111239392F5DED3130015E5D5D5D715D712B7171715D005D5D5D715D2B715D715D5D7171712506232226353424213335342322073536333216151114333237170623220311272206151416333202F5B1A487B2012B01172FC29CB5C7AEB6AD680D190E43518A4342A2C864487B8AA3A981B2BF83BD60A351A4ADFE14A9046D20010E0119027B64476200000001006FFFE703B70456001500CD4069090C290C390C03C90C011C0D010C0D1C0D6C0D9C0DAC0DCC0D0675020185020117020177028702023C014C01022404013404D404E40403E905013405440502140F01040F140F640F940FA40FC40FF40F070BA8010185019501A501C501F50105061001861001089709B8FFC0402C0D1448090B97061014960F131F13020D131196001609130E8303400F132F134F13030E0317136902160366022B2B015F5E5D1A18104DED10C6003FFDD65E5DED3FFDD62BED3130015D715D5D005E5D715D5D5D715D5D715D5D5D715D7105220035100021321715262322061514163332371506026DDCFEDE011F01017F9DA76997B7BC98878FBF190146F80109012823A531E3BDB7E245AA3A000002006FFFE703E604570011001600EA405737100101101B1F482404340402C404E40402050335034503550304A503F5030259036903023A0601CA06EA06025506F50602
 450701450755076507031316231602D316F316023A1601120E220E320EB20EC20EE20E060EB8FFD0400A1A1E480509850902090DB8FFE040441A1F480C14012C145C14EC14FC140403740A012F0A01400450046004030F04010E0512970D0D02159708100097110F970216120D1385110B0D850540180B6902170566022B2B011A18104DED10C6ED1139003FFDD6ED3FED11392FED3130015F5E5D5D5D5D5F5D712B005E5D2B5D5D5D715D715D5D715D5D715D712B71250623220035340033321211072112213237012110232203E1C68DF0FED1010BD0C5D701FD532B01507BB3FD6001DFE2E3233C013FFEF7013CFEE8FEFE3DFE7D4201D5012F00000100500000032D064400140047402D300701140824083408030B970C0E97090112000397060F02A00CB00C020C3014011412060085045003D00302032F5DCDFD3939DD5DC65D002F3FED39393FFDD6ED31305D7101112311233533351021321715262322061D01211501B0C69A9A0162637E85506147010F03AAFC5603AA94820184219C295D7E97940000000200C50000018A05C80003000700254013049E0503010F000704038500400809008530302B011A18104DED3939002F3F3FED31303311331103353315C5C5C5C5043EFBC20503C5C5000000000100C50000043D0456001100784053B90F01A910012D0F3D0F4D0F7D0F8D0F9D0F06770701D707E70702DB0DEB0DFB0D030D201A1D48180E0104061406240603090003100302100310030E950510010F0A000A8509031185004013096802120065022B2B011A18104DED3210ED002F2F3F3FED32325F5E5D31305E5D712B5D5D717171015D331133153633321615112311342623220711C5C59CE28DA8C54752B5A0043ECCE4B397FCF402CC7967EDFD410000000100C50000031D0456000D005B401F470B01490C590C02A90CB90C02070401090C030A079508000A100A022F030AB8FFC040171F23480A950510010F00030D8500400F076A020E0065022B2B011A18104DED32002F3F3FFD2B5F5E5DD6ED11333331305E5D5D71713311331536333217152623220711C5C575DF1E213327BB7E043ECCE405B811DEFD340000010045FFE702AE05160014006C400C9802D80202070201F702010EB8FFD040371519481B012B013B015B01040D0A049709070F139712109700160F125F12020F0C5F0C0209030C120A070D8505044016126902150465022B2B011A1810CD4DED393910C65F5E5D5D003FFDD6ED3FCDED393931305D2B5D7171052226351123353335371521152111143332371506020B96A88888C5011CFEE4B827385B19AC99027E94C513D894FDA6D50D8819000000010000000601060F596BAF5F0F3CF5011B080000000000B47FC3BC00000000C005BDE3F776FA1B0D21094D00000009000100000000000000010000
 07BCFE5000000D1EF776F7430D2100010000000000000000000000000000000E06000100049A00BF044A00BF024E00BE044F0064058B00B3046B00670419006F0475006F02F10050025000C504F700C5034600C502FE00450000002000D00106012001F20256030E039A043A048004A605000546059E000000010000000E0077000F004F0007000100100030007B000005E00D3300030001B800712BB800672BB8005D2BB800532B410E00000246001002460002007F02440001023F023C0001002B023E023CB2012BEFBB023D0001023D023CB2141F00BD023C0010023C000201870188B21A1F40B80189B310163900410E0188001001880002018301850002002B018401850002002B01860185B2022B80BB017F000100DF017C406601DFE016171CD4D516171C7B7C161B0F7B1F7B2F7B037B7C19D1D216171C767716171C6D7016171C6C6F16171C6B6E161B5F6E7F6B026B6E7F721A747514151C676A14151C666914151C6568141B8F65A065D06503656885711A1973167A4319217943192102B90352034AB2022B10BD034600500346000200400339B20B0E39B9FFC00338B20E0E39B9FFC00338B3090C3950410B032D0001033003310003002B02F402F30008002B02E3B2BE022BB802DCB3BE641F40B802DBB3313A3940B802DBB2232739B9FFC002DBB2141439B9FFC002D9B2333939B9FFC002D9B22A2E39B9FFC002D9B2212339B9FFC002D9B2171939B9FFC002D9B20E1139B9FFC002D0B2111139B902800278B2022B10412B02740050027400020010025D0050025D0002000B024C001B024C006B024C0003000B024B001B024B0002023A02040016001F023802040012001F023202310002002B023002310002002B022F0231001E001F022E0231B21E1F20B80231B2121639B901F701E3B2032B0A412001F4000101EF01EE0002002B01ED01EE0002002B01EC01EE0002002B01EB01EE0002002B01E801E70003002B01E601E70004002B01E501E70002002BFFCA01E3B30B1139B9411D01E70001007601E7008601E70002019401920002002B019301920002002B019201900006002B019101900007002B018F01900002002B018E0190B2022BBFBF01900001007001900080019000020157B292042BB80153B291042BB8014FB297042BB80136B37F032B40B80139B21218394109012401250003002B011001110003002B0104403BFC022B10F850F80240E61A1A399A9B032B9C9B042B9B970A2B9392042B9192062B9297042B9597042B9897022B9697032BA097019F97AF97BF9703BC034803490004002B0349B285022BB9FFC00343B31011391FBE0344000100E00344000103350334B2032B20411203330030033300400333005003330004033303140003002B033203140003002B032F0314B2032B2FBF03140001000002F3
 002002F3000202F0B2BD062BB802E2B2BF082BB9FFC002E1B2172839B9FFC002E1B20E1139B802E0B2870A2BB802DFB3BF042B40B802D7B323253940B802D7B2151639B9FFC002D2B2101139410D02C602C50006002B02C202C00006002B02C102C00006002B028CB285022BBC027602770004002B0277B285022BB9FFC00271B31011391FBE0272000100E00272000100400260B2151639B9FFC00260B20A0B39B9FFC0025FB2171839B9FFC0025EB2242939B9FFC0025AB31011391F4114025B000100E0025B0001000F024A0001001602490026024900020009022D0019022D0002FFC0022BB2111539B9FFC00229B30D113920B80223B2121639BD022202200002002B02210220B2042BC9411402200001021E02200003002B021F02200002002B01F601CF0003002B01E001B50020002101DF01B5B2262120B801DFB21E2139411A01DD01DC0002002B01DB01DC0002002B01DA01DC0002002B01D901DC0002002B01D801D70003002B01D701D60002002B01D601D4B2022BB0BF01D6000101D501D40002002B01D301D4B2022B69410B01D2000100B901D2000101D201D40002002B01D101D4B2022B20B801D0B2090C39B9FFCA01CFB30B11392BBF01A300A401A300B401A30003FFE001A6B2131539410D018D018C0003002B018B018C0003002B018A018C0002002B0156B286022BB80155B280032BB80154B286052BB80152B287052BB80151B288052BB80150B288032BB8014EB285032BB8014CB285022BB80138B287022BB80131B2BF032BB80122B285022BB8010E400B85022BFAFB042BFB85022BB8FFC0400AF51011391FF601E0F601B8FFC04009B1151C3940E51A1A39B8FFC0402EAF0D0F3900B40140B450B460B470B480B4C0B4D0B4E0B4F0B409B4AF641FE8E7042B898A072B8A8B062B8C8B062BB8FFC0B78E3032398E8D032BB8FFC040148D1E23398D8B022B8B85082B8281042B8180032BB8FFC0B3804A4D39B8FFC0B3803F4339B8FFC0B380343939B8FFC0B380282E39B8FFC0400C801D2339807E022B7F7E062BB8FFC0400C7D4549397D7E062B7E85082BB8FFC04020881E23398887022B8785082B8685062B83840A2B8485062B7085808502BF8501410A03530354000E03500351000E034E034F000E034EB203641F4155034C034D000F031B031C031D000C030F03100311000C030C030D030E000C0327030D0329000D0321031C0323000D031E03100320000D0327003C0321003C031E003C031B003C030F003C030C003C02AD02AE02AF000C02A102A202A3000C029E029F02A0000C02B9029F02BB000D02B302AE02B5000D02B002A202B2000D02B9003C02B3003C02B0003C02AD003C02A1003C029E003C02810282000E027E027F000E027C027D000E027CB203641F4175027A027B000F021002110212000C02
 0D020E020F000C020102020203000C01FE01FF0200000C000B0211009B02110002000F021000500210009F021000BF021000DF02100005001F020D003F020D007F020D0003001F01FE0001021901FF021B000D0213020E0215000D0219003C0213003C0210003C020D003C0206003C0201003C01FE003C01BD01BE01BF000C01B101B201B3000C01AE01AF01B0000C01C901AF01CB000D01C301BE01C5000D01C001B201C2000D01C9003C01C3003C01C0003C01BD003C01B1003C01AE003C016D016E016F000C016101620163000C015E015F0160000C01610166B2171F1F41420166003F0166007F016600030179015F017B000D0173016E0175000D017001620172000D0179003C0173003C0170003C016D003C0166003C0161003C015E003C012C012D000F01260127000F01280129000E012A012B000E01180119000F01120113000F01140115000E01160117000E01050106000E01020103000E01000101000E010040A803641FFEFF0F1B37151836151535151234150F33150C3215093115063015032F15002E1526270E28270F2A2B0E2C2B0F22230E24230F1E1F0E201F0F0F10110C090A0B0C0607080C0304050C0001020C000340131A230003131F06031C1F1F0F3F0F7F0F032003011F034F03BF03FF03041B011D0D18071A0D1510170D1204140D901B012C3C2A3C283C263C243C223C203C1E3C1B3C183C153C123C0F3C093C063C033C003C503301B0124B004B5442B013014B004B5342B0332B4BB8032052B0322B4BB009505B58B101018E59B0332BB00288B8010054B00488B8020054B012435A5B58B80119B101018E851BB900010100B04B60858D59B1020042B00188B0235358B00188B0405158B02088B810005458B1020142595959B0374B5058B1020042592B1DB0644B5358B0801D59B0324B5358B0901D59004BB03A51B01B23422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B7374732B2B2B2B2B2B2B2B2B2B2B2B2B2BB1282645B02A4561B02C4560442B2B2B2B2B2B2B2B2B2B2B2B002B2B2BB8010045B0FE4561B8010223442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2BB8027C45B8027A4561B8027E23442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB8034E45B8034C4561B8035023442B2B7473012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73742B2B2B0173742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B74752B2B732B2B2B2B2B2B2B2B2B2B2B2B2B752B2B2B2B2B73737473742B2B2B2B2B73742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73732B2B2B732B73742B2B2B0073742B2B2B2B2B2B2B2B2B2B00732B2B2B2B2B
 2B2B2B73742B2B2B2B2B2B73742B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B732B0143581B592B2BB018B0234B53422B2B732B2B2B2B2B732B2B2B2B2B2B732B2B2B01B8017C20456A44B8017D20456A44B8017E20456A44B8017F20456A44B8018020456A44B8018120456A44B8018220456A44B8018320456A44B8018420456A44B8018520456A44B8018620456A44B8018720456A44B8018820456A44B8018920456A4473732B2B2B732B2BB8023B20456A44B8023C20456A44B8023D20456A44B8023E20456A44B8023F20456A44B8024020456A44B8024120456A44B8024220456A44B8024320456A44B8024420456A44B8024520456A44B8024620456A44B8024720456A44732B732B2B7373B109322B4BB05052424BB008524BB008505BB01A23424BB0C8524BB036505BB00C234200
 00>] def
 /CharStrings 14 dict dup begin
 /.notdef 0 def
/B 1 def
/F 2 def
/I 3 def
/S 4 def
/U 5 def
/a 6 def
/c 7 def
/e 8 def
/f 9 def
/i 10 def
/n 11 def
/r 12 def
/t 13 def
 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-2186 -1509 3361 2381}def
 /UniqueID 4093103 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C91B0B7175CE49F0688B3F79EA3DBC898217EC91EE332F98D08B0D78E002610AC5858EAF625BF673983D70210293AF44B5873D9BD4164D0FE0468184D7036711A930D37CFB0EBA4CA4E0BB73C83B1EDE3FF59EB72440E3D0584FC166A541D7DB2970976543E0E10D854AB4D9F0B00FBFF2D5CD862853E80381D10A0D903C20A3CE357147DE0CB523DFF50A9802D3472F7BC218F57ECF14CF94E48F4D4A4721FDBD23788F7BAC1ED041520EB5626C57B31DD87013DD804FF9F97EE8DF03DAB916FC171C4AF9AE8EDBE593D9D6379AEA6B676330251C88AB029B45A211824BBF7EE73352E64E08C74D6F21B54896730EE941B7634F5C12C6871B0EDD88FFAE17C8B33840D61D95845360DAB75DC03FED538DEF1F8FEE8749F1D4023089FB63B51FDD639042C57EB44D88770E7BA085531620629ACC44176427CACC13C93EF59213C4DDD99426B83173BA1C735EE4572F1F727C10870871A2E905204BC487F8D1ACF1E49E6575AC6357A7DF34DECC6B0ED7039C5B01EB737DC0BC4048508FE5D87C3ED38A9AF7310BE18D8C6EF0EDB1BB8F4CF76A60D31B142D8C0817765164B81136DF2CD67E0BB6AE6F7EEE8F30F942B42798951E727A3D0C4507EB52ED7E497EC2D02476CDD9C917486103AA192ED2D6747FB91B4B162C08F49B52DA3C5C515EC4AC0A8ED853D33965316B2546B237D961989CE42A20A46B15B60DE49DA7B719699F378D213CC48048052186929EC73413A8B9143155E9B830DEF35B1068346566D
 573855B4B2EF0ED2D0969F4A75782EBDD33FFB71E7AB8EB5B4AA2D059ED52DD32674DA6478023E21664CEE7B9C346EA30B46FCAFF0B8CABAA46437BD9FB83734DC4821FE4F7DB312170834B586574B68E7ED98CED264BD9133F503FC08C8E4710CDE721583352150EB46A6D1B6274AD76951EEFC576C2AAB85ABD5795859E6CE94A10FB39C1536FFD073283E611DCA4BDCCF4AB981DAF74E6464FF594CB150492886C682301E8320CE44361B40FDF6E6F698DE7AB927EDD2BEC696D187FB42423B2F4A780F6ED9CE903A26E33E31B4E57673218C34C8AA46FB564A91E21D1DE385AB9D7C418E4120F1F195BBF0728D4EB3E22D5536685C283E62A66A43A059E6CFE1BEDB26BF2F2749B37160C23FEB42EB5C6A8C1DE5EE818D03E0BB5D90715FEF683E07762411DE5BB7A67770D10B4C05C7D208551EE83CA525C2ABEBFB43A0120E3C53E77E80ADFBEC413E0047C3B312FD6EAD28A8C55875179DA659C9473E1E3B685C5EDD489FB704229EEC2435B036A47620C6C34B197A70F6E8CB4F42BB00F72EC847B7561C521F0D38FBCE0C8CED452D3DB9030FEEF0CD666A22D24F3B0E0A82FF5685560F620FD551C9AEE7248D2B98D96B1560A5DD930CDD141C2DA49B154BC3E47CE7A600801C30D4CB93BC56168FD2C009D43E27209AA816E78BFBBD0A6B63B2A4801FA884636C48EBFC5A735362A7472413121589CC7E28A2573D4337E6C912B9846A38E3EB25E716A358930D7F71279CF54BED09D164DF73936706D679302DE543FC294DF1D49234FA99C2A7C54F85CE19C43B8DEB6B940C948234309797DE54E02347806033724605394ACEAE2CE9726083D7DED16E2CC7497D7C799C46517E494C70B63AB964574429FAE2BEE2B23FE863F570C58811C4B3483A6184BE85885704C5A3B4F6CD04CEC8781A1BD216234C61E0F4A98FC9EF259EE85E9E4F1A0D11EFC6B6A5FA7CFB39BB1A9CC7E102687A3D8F2581142537DE975D505314CD07B75D392BD411FBF3FFD9E916215E088C0A7B066A966B59F6C4E2C995ED81EBBD25E43EC6F52F515E61C32E195687FF9EBE1B06F68AB5D560FEF14E83A084EEDBE0C08B6A75E89BA402D8991CDD51D19D11DA8414CC2AAAB495A2454A041DCD527A11C82461B68F606CD87101835DC3ABFDE104DDB2EC8EBE3DEC8B84FDAE2C9FF5F9CA5BC55A9703786CABF6BA0970C708DD19E43ED94F056F61FC9722FDC83B21335B488844ABAC72FA9712EABF3E643412D3733C247EB994DF1E2FABDFF5E3CA1DF349AED51A69AE36D4F8012537F67EF2E500C23EA88FDE034157D33D7393850468383DD005C8C08D4E27E5ED937BFD7266400CC6A76085E2997F8793B40FC2B9E6A0A86721127C8365C5EBEC51289A80E9FB65E0919A0A01440767EE291E16FDD02F0434C2516C3D402890057CF2AA7DAC2ADE40421CFDBC
 73CAAF807D7E33FE7417EE434B30D6F688623907259AECC3839C6D7CFD32A4029865A41B7921BBC40E57E8C2216455EDCF052674455157F7B10B675C1F82187212A3E98A5D15385121D525D579BC0E1C428506EB1E4D79194FCA924DA17CF9EDDDB97A5E1C4EA702EFD119AF7619963F31F91C
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End
 %RBIEndFontSubset
/LucidaGrande cguidfix
/F2.1/LucidaGrande renmfont
[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeA { { 1.8008  exp } bind  exec} bind 
def 
/MatrixA [ 0.9642 1.0000 0.8249 ] def 
/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def 
/DecodeLMN [ { 0.9857  mul} bind { 1.0000  mul} bind { 1.3202  mul} bind ] def 
end ] /Cs1 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ 
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 
] def 
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs2 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ { 1.8008  exp } bind { 1.8008  exp } bind { 1.8008  exp } bind ] def 
/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs3 exch/ColorSpace dr pop
%%EndPageSetup
/Cs1 SC
1 sc
q
0 0 416 517 rc
0 517 m
416 517 l
416 0 l
0 0 l
h
f
/Cs2 SC
90 0 0 76 195 441 cm
BI
/Width 270
/Height 228
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$JcC<$JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$JcC<$
JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$JcC<$JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$JcC<$JcC<$fDgg0
Jc>BBJc:6"Jc=*sYlE>TT)\9YJc5<@Jc1/uJc4$qn,C3(fDhuQo)@&8Pl-+1Jc()snGL]4o)@&:fDiD]
q#9a\o)/C^Jbo3=JbjroJbmpno)&=^n,;hVj8[a2\c;-sq#'g^q"jm`JbT9@pjr3kpjr4pq"sm[qXsa_
r9=1?s4@:fs7lTdrVQNfqt9g_q>9sFpRV#/p4;pgpA+F?p\Xa\q==CZqu6N^rV6BYs4@:os7lTdrVQNl
qtU$bq>9sap\X[Zp%%bJo:#6$nq$@_o(MYFoC)>Np&"I[p\Xa_q=sg`qtp<drV6B\s4@:os8N#grVQNi
qtp3dq#:$\p@\(WoD%nFnXArun:C([nFlA?nac8JoD\C]p%\7[p\Xa_q>U6cqu6NarU9d<s3^lArqQHh
r;QTgqYp9_p\sj\o`"I]o)A1PnFc74mXaeWmXafnme-&JnG_nOnGDbQoD\C]p&"I[p\sseq>:$cqu6Nd
rVQTes4@;#s7lTgrVl`oqtp6hq>U0ap\sj_o`"FYnb_hQn,)PPmJH8LlhKc?l(.$hk^hrKkk=68l20cC
li-8MmJH>Kn,DhUn,)YSo)&%Xo_\@Zp\ss_qYU0hr:p6irqQNFs4%)Jrpp$eqtp6hq>U0gp\=I]o`"I]
o)%qUn,DbPm.foAl20]AkP421jalNEjalOejnn3;kPOK<l1OBAm/HDOn,DhUn,)\ToD\C]p&=[ap\ss_
q=sj^rVlfks4@;#s8N#mrVQNfqYU'ep\sj_o`"C[nG_nUnGDVMm/H>Ml2KoDkPOE:jSn37igo%ZiITs=
iVDI-iqqd5jSS*:kPj]El20cFli-8MmJcPQn,)VRoD\C]p&=^_q"smdqYU0hr;6Hfrr2rLs4[MMrqQHk
r;QTmqYp<iq"sg_o`"IZnc&%Wn,DbSlhfrGkl0`Djnn-<j8S'2i;VX5i;;B"h1=C5h1=DUh>?(+ht>q,
iVVX6jSS'9kPj]Eli-8MmJcSRnG_tToD\C]pAXgcq#:*dqYpBkr;6Hirr2rLs4[MMrqQHkqtp6hq>U0g
p\smco`"I]o)A.Un,D\Qli-/Jkl0cEjo4??j8S$:i;VX5i;;@*h"]V&fq$cHfR_\+f_O2!g%a;#g\]e'
h>Z:1htu@/j8S0>k5OQCl20cFm/HJQnG`"UoD\F^p\Xa_q>U9jr:U$fs4@;)s82fprVQNlqtp6hq#:$e
pAX^`oD\=[nG_nUmf)SPlMg#HkPO?>iVqd4htu7/h#?(-gA]e)f_a:qeb.Fkdt,u!dt6'DeFhAkfDaG%
g&'M#g]$"-hYuF0i;;R6k5OQCkl0oImJcPQn,DkVo)A:YpAXgcq#:*gqYpBkr:p6irn%2+s8N#mrVl`o
qu6Hkq"sg_o`"F\nG_nUnG_eRli-,Ik5OKAir7m5htu4.g&BV&f)F5!eGdqrde1u[c_Jd:c@O8lc2l59
p!<Warm1JgrmCVlrm^qurn%/%qqM,+rnm_5ro3q<roX4Dqs47LrpTjUrpp'[rq-3`rqHEerqcNhrquZl
rr1OLh>dKRq#13irql]jrqQKerq??`rq$-Zrp]pUrp9XMrosFEroF(<ro!\0rn@A(rn%/#rm^qrrmLem
qp5&]rlb;`R`U-&J]WJbp<!3Sprr`_rm1JgqpPJnrn%/%rn7;*rnRM1ro*k9roO.CrosFKrpK[Pqt'g[
rqHEerqZHgrquZlrr1OLh>dKRqu-Nlrql]krqZQgrqHEbrq$-Zrp]gQrp0RIroa:Aro*k6rn[S.rn7;&
rm^qrrmC_lrm1Shqoo&^rlP/\rl=oTn&2<FJ]!&VKu<K"qo/HQrlG)]qoeuarm1Sjrm1Jjrmq)$rn7;+
rnm_5ro*k=roj@Hrp9XOrpTjVrpp'\rqH<bqtg<iqu-NnfDj\,rr2fnrql]krqZQfqt9s[rpfmTrp9XL
roa1>ro!e4rn[S+rmh"trmC_lrm1SfrlY5]rl4iRrke?DrkJ->VS%JmJ\6TIotC@=qnN$DrkeQMrl+lW
rlG)_rm1Sjrm1Jjrn%/'rnRM1qr@\<rosFIrpB^Rrp]pYrq-3_rqHEerqZQjrquZlqu5FOh>d9Krql]j
rqQKeqt9sZrp]pUrpB^NrosFEro3q8rndY.rn.5#rmLemrm1SerlY5]rl+lTrkeZMrkJHGrk/-?rji$<
pp[$,J[U-<J[PTf[e7-/\Gj):]DfMC^\bhG_u@URa8X3[b5TWaci2;jeGe,"g&Bh,i;V^7jSn?Akl0rJ
n,DhUnc&1[p&=^bq#:*gqu6NjrVQTMs5X.Vrr2lnr;QQlq>U0gp\XU^nG_nUmf)POkl0cEjSn-;hu;C0
fDaA#dJhJkcMl#da8X*X_u@IN^](tH]`,PB\c0);[f3]6[/RE2ZMUo%Y^s$0Y^s"ZYd"#0pp0n+rjDa6
rj_j;rk8<GqnW3Lrl4rZrlkAerm1Sorn%/'rndP1roX4Drp'LMqsXOUrq-3`rqHEerqcWkrqucoqu5FO
j8]#Urr)`lrqcWhrqHEbrq$-[rp]pSrp0RIroO.?ro!e3rn@A&rmC_krm(Mbrl>#UrkSNJrkABCrj_s8
rj2U0rilC*riZ7&riH+"ri2NfJZ+-uJZ/CCri,dqriH+%qlfn&rj;[6rj_s>rkABIrk\TQrl>#^rm1Sj
rmh#$rnIG0qr@\=rp'LKrpTjUrpg![rqHEerqcNhrr)`nh>cO8qu6TnrqucmrqZQgrqHEbrpp'XrpTjP
rosFEro=":rnm_/rn.5!rm(MfrlG)Xrkn`Nrk/6ArjVm6rj2U.riQ1$ri5srrhoamqkX4dpnFXZJY@Xg
Jt_k3rhKIgrhf[mri#grri?%"ric=+rj)O2rji$>rkABJrkn`Vrlb;crmC_rrn.5+ro!e7roX4Erp'LM
rp]pWrq$-_rqQKgqtpBkqu,@Nj8]#Urr)iorql]jrqQKerq-3[rpTjSrp'LHroO.<rnm_1rn.5$rm:Yh
rlY5Yrk\TKrk&0<rjDa2ric=(ri?$rrhf[iqk<n[rh'1\opi"NJX_4[Jt)P*rgiqXrh'1_rh9=drh]Ul
ri5t!riZ7(rj;[5rjr*CrkSNMrl>#[rm1Smrmq)&rndY4ro="@roj@JrpTjUrpp']rqHEeqtg<jqu,@N
j8]#Urr)inrqcWhrqHEcrpp'XrpTjQroj@Ero3q7rndY,rm^qprm(M`rl+lPrk/6@rj;[0ric=&rhoam
rhBCbrh'1]rgWnTrg3MHrfd5BrfO(>JWPGEJrotoqi^i?rfmDKrgEbSrg`t[qk3qarhf[priQ1'rj)O3
rj_sBrkeZRrlb;drm:Yqrn@A-ro!e:roX4FrpK[Qrq$-]rqHEfrqcWlqu,@Nj8\oQrql]jrqH<_rpg!W
rpTjOroa:Cro!e3rnIG'rmC_krlb;[rkeZJrj_s9rilC(ri5sprhKIdrh'1[rgNhQqj%/CrfI#<qi1K3
WJc=cJW#,<rf$`6rf6u=qiLf@rfmDKrgEbSrgj%]rh9=fri,mtric=-rjDa;rkJHLrlG)`rm1Smrn7;*
rnm_8roO.Drp9XPrp]pYrq-3arqZQirquZlh>cO8qu-Nlrql]jrqH<^rpg!VrpKdMroX4@ro!e1rn7;#
rm:YirlG)UrkJHCrj;[0riZ7"rhoairh'1]rgNhPrg!JGrfI,?rf-o9repc5reUQ/UP=>SJVJ`1!JZ@.
L]3,/M>N20NW,"9OT(LDQN!<OSGo,ZTDk_eW;`mtYPtg+\Gj5A_#D:ObPofddf.ktg&Bk-ir8$<kl0oI
mJcSRoD\C]p\t!fqYpEirS@M6s82cor;QTmq>U-co`"@ZmJcJOkl0ZBiVq^5g&BV&dJhDib5T<X^&GYC
Zi70-Xo>6tUAghbT)P,VQN!'HOT(=?MuJP3L]2u+KDpK%Jc:3!J,XtqIt<*#It<+IJ,=cnJc:?%L]3,/
MuJ_8O8b7?Q2[-LS,T#YT`1eeWrB."Z2V63])KMEa8X6\ci2JofDaS)i;V^7k5OZFm/HJNoD\L`q#:*g
qu6NmrVlfSs5X.VrVl`oqYp9hp\sgao)A.Xm/H;LkPjK?i;VR3f`'J$d/M5faSs$T]Df>>Z2Uj(WW&^m
T`1P^R/WBMP5^OAMuJS4LAll*KDpE#J,XorIK"WnH_Yk;H%C6lGl`29qg8<irdFcprdXftreCE/reg]8
rfR2Crg*PPrgj%^rhoapric=/rj_sBrl+lXrm(Mkrmh#%rndY4roO.Erp0RPrpp'[rqHEerqZQjrquco
rr1jUj8]#TrquclrqQKdrq-3\rp]pRrp'LFro*k6rnIG&rmUkmrlP/ZrkSNCrjDa0ri,mprh07]rgNhN
rfR2@reg]1reCE'rdautrd=]lrd+Qgrc\9`UND'/JTQHb!H`G_FoHR`Gl)dcI/\ToJ,XutK`6`*MZ/Y8
OT(CAQi<EPTDkYcVuEgtZi7E4^&GqK`r=3]df.bqg&Bk-i;Vg:l2KuImf)bUo)A@^p\ssequ6NmrVlfS
s5X.VrVl]nq>U0gpAX[_nc&"VlMg#Hjo46<hu;@/eGdkpbl5T\_u@@K[JmH1X8\spUAgb`Qi<9LOT(7=
MZ/;.Jc:/uIK"NkGQ)aaF8g4WE;ORNDLl\VDLl[+DJoGlqf)FQrcS3arcnEirdXotre(3)reUQ6rf[8F
rgNhYrhBCjriZ7*rji$Drkn`Wrm(Mirn%/(rndY6roX4DrpB^Srpg!\rqHEerql]mrr)iqi;_j;qu-Nk
rqZQgrq69]rp]pTrp'LHroF(:rndY,rmUknrlb;Zrk\TGrj)O,ri,mlrh07Zrg!JGrf6u7reLK(rdFcn
rcnEbrcJ-[rbqdRrb_XNrbJ9DJSKaNJSG4#CAVfGD#S>ODuO_TF8g=]GlE'hIK"`qK`6`*MZ/\9OoC^H
Sc5;]V>dRqYl;-2^AbtJaSsKad/MSpg]$(/ir8*>kl0uKnG_tWp&=^bq#:0ir;QZoro!h:s82coqu6Bi
p\sjbo)A.Xmf)JMkPjN@hYu=0fDa1sci2#b_Z%=L\c/l5Xo>3sT`1M]Qi<-HO8b%9L&Q]'J,XcnGlDga
EVj\RD#S5LCAqoDB;T6kAV"EEAc$->B`;`CCAr)LDuO_TErL7]GlE-jJGt-!L]383O8bCCRf8lWU].=n
Y5Yj.^&GhH`r=3]ci2GngA]q-iVr!=kl0rJnG_tWo`"Uaq#:-hr;QZoro!h:s82coqu6Bip\sgao)A.X
mJcALkPjK?h>Z1.ec*tqcMki__>_1J[Jm?.WrAalSGnrUPQ$R@MZ/;.Jc:/uGlDjbF8g.XD>nANB`;WC
Ac?3:@A@4]@"D^:?iaYCqdKJ5raYq<rb)4FrbMLOrc.pXrce?hrdXoureUQ3rf@&ErgEbXrhoaqrj)O6
rk8<KrlY5brmLeurnIG0roO.Brp0ROrp]pZrqHEerqcWkrqucpi;_j;qu-NkrqQKerq-3\rp]pRroj@E
ro*k4rn@A$rm1Sfrl+lOrk/6;riH*trh07Zrg3VHreg]1rdt,trd+Qdrc8!Wrbh^Mrb2:BraYq:ra>_4
ra,S0VHe[WJR!e3ra#D-ra5Y4raGe;rb)4DrbMLNrc%jYrd+QkrdXp%reUQ6rfmDKrgs+cri,n%rj_s>
rkeZVrlkAhrn%/&rnm_8roX4GrpKdTrq$-`rqQKhrql]mrr1jUj8]#Trql]irqHEarpp'Xrp9XIroX4<
rnRM+rmUkkrlb;ZrkABDrj)O'rhf[frg<\Mrf@&8reCE&rd+Qgrc8!Vrbh^Mrb)4BraGe6ra5Y1r`oG,
r`Z1%JQ[P,Jm&(Vqcj&*ra,S2ra>_9rau.DrbVROrc%j[rcnEkre(3)rf-o?rg!JQrhTOkric=0rjr*F
rlP/`rm:Yrrn7;.ro="?rp0ROrp]pYrqHEerqcWkrqucpi;_j;qu-NjrqQKerq-3[rpTjQroX4Aro!e1
rn.4urlkA`rkeZHrj_s3ri#glrgj%Srf[8=re:?'rdOijrcS3ZrbVRJral(<qdBD-r`];'r`B)"r`,gp
JQ.2"JlM_Lr`9#"r`K&#ra,S2ra>_9rb2:FrbqdVrcS3drdXp!re^W8rf[8Krh9=eriZ7.rji$Crl>#\
rm1Sprn.5,ro="?rp'LMrpTjWrq??drqcWkrqucpi;_j;qu-NjrqQKerq-3[rpTjProX4@ro!e0rn.4t
rlb;^rk\TFrjMg0rhf[irgWnOrfR2:re(3#rd4Werc8!Urb;@EraYq8ra5Y/r`K/$r`8nqr_o[kJPgtq
Jl2DDr`&ksr`B)$r`fA-ra5Y5rau.CrbVRRrcA'`rdOisreLK4rfR2Irh07criH++rjVmArl4rZrm1So
rn.5+ro="?rosFLrpTjWrq??drqcWkrqucpi;_j;qu-NjrqQKerq-3[rpTjProX4@ro!e/rn%.rrlY5[
rkSNDrjMg/rh]UfrgNhLrf6u5rdk&urcnE_rbqdPrb)4Bra>_3ra#M+r`9"ur_renqbX.cJPUhmJPQ;B
:]=2i;>sJm<;oqt=T2P(>lJ+0A,^*>CAr,ME;k"ZI/\WpK`6r0O8bIESc5>^X8]F([f4#?`W!sXci2Gn
fDaV*ir8'=l2L)Ln,DnWpAXjdqYpBkr;Q]Rs5X.VrVlZmq#:$eoD\7Yn,DVOk5OH@hu;=.fDa.rb5TH\
_#CnD[Jm<-V#I"cQi<*GNW+Y2If=]nFoHC[DuOGLAH$$:?iF7.=T2>";uT\l;#X8i9r:U89S#lh9`@cc
:]=2i:]"#g<W6)!=T2V*@/aU6BDu`HDuOeVH2`3jK)UW+N;f%?Sc5>^WW'1%[/R`;`;[gVcMl>mfDaS)
ir8$<kl0uKn,DnWp&=^bqYpBkr;Q]Rs5X.VrVlZmq#:$eoD\7Yn,DVOk5OH@hYu4-f)F%qao9<Z_#ChB
[/R0+UAgb`QMupDMuJD/If=ZmFT-4XD#S&G@K'X5?2e"+=8l1u;>X/d9VY428qBTc8c_OVr_*5ar_EGg
r_WSnr`9#"r`fA.ra>_;rbDFLrc.p^rd4WqreUQ3rf[8Mrh07griuI0rk/6Jrl4r^rmUktrnRM4roF(B
rp9XPrpp']rqHEgrql]mrr1jUj8]#TrqcWhrqHE`rpTjSrp'LEro="7rn.5#rm:Ycrl+lOrjMg4ri?$m
rgs+Srf6u8re(2trd"K`rb_XMral(;ra5Y.r`B)"r_i_lr_NMer_*5_r^itXJOk>_Jk5l4qb$i]r_EGg
r_WSnr`9#%ra#M1raYqArbDFNrcS3crdXp&reg]<rgEbVrhf[urj2U:rkn`TrltGkrmq)(ro*k:roj@J
rpKdUrq69brqcWkrqucpi;_j;qu-NjrqQKerq$-XrpKdMroO.=rndY,rmh"orl>#Vrk8<>rj)O'rh07\
rfd>?re^W*rd+Qfrc.pRrb;@Ara,S0r`K/"r_remr_<Acr_!/\r^W_QJOY2[JOTZ07fGpW8H)3[9E%Zb
:]"&h=8lD&?2e72B)ZNDDuOnYGQ**kL&Qr.OT([ISGoAaY5Ya+]DfYG`W"*\df.erh#?:3j8S9Am/HGP
nc&4\p\t$gqu6Nmro!h:s82coqYp9hp\sd`n,DbSl2KfDir7g6fDa;!ci1ua`;[IL[f3T3WrA[jSGn`O
MuJP3JGsloGQ)U]C]8#H@fB[4>Q._'<;oep;#X/f9E%N^8H)-Y7A`J(7"IaX7/fXS8,GjS9)_Tb;#X>k
<rQ;%>lJ.1B)ZKCDZ4_VG5cphL&Qr.OT([ISGo>`Y5Ya+]DfYG`;[sZdJhYpg]$.1j8S9Am/HGPnc&4\
p\t$gqu6Nmro!h:s82coqYp9hp\sd`n,DbSl2KfDir7d5fDa;!ci1ua`;[IL[f3T3WW&OhS,STMMZ/A0
JGsfmFoH@ZC&VcE@K'R3>5hS%;uTYn:]=#d9)_B\8,c!T7&`P)6\.UV6iKLN7fGpW8H)3[:&[rf;#XJo
>5hb*?iFX9B`;lJF8g@^IK"p!L]3A6Qi<KRV#ILqZ2V?6_>_CPbPoogeGe5%i;Vd9kl0rJmf)bUp&=^b
qYpBkr;Q]Rs5X.VrVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGdena8X$V^&GG=Yl:U#T)P5YOoC7;LAl]%
GQ)^`E;jSNBDu<<>lIn*<W5kp:]=)f9)_B\7f,UQ6`*2$6@hIT6Mj.L7/f[T8,c'Y9`@ie;#XGn=T2J&
?iFR7B)ZWGErL4\I/\ctL]3A6Qi<HQU].CpZ2V<5_>_CPbPoogeGe5%i;Vd9kl0rJmf)bUp&=^bqYpBk
r;Q]Rs5X.VrVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGdena8X$V^&GG=Yl:U#T)P5YOoC7;LAl]%GQ)^`
DuOJMBDu<<>lIn*<W5kp:]=)f9)_B\7f,UQ6i03O6%M=Q6&7i(6MNqI7fGpW8H)<^:]=2i;uTnu=oMb,
A,^*>D#SJSFoHdfKDpW)O8bIERf9)]Xo>U)\c0GE`;[sZdJhYpg]$.1j8S9Am/HGPnc&4\p\t$gqu6Nm
ro!h=s8N#prVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGdena8X$V^&GG=Yl:U#T)P5YOoC7;LAl]%GQ)^`
DuOJMB)Z3;>Q.e)<W5kp:]=&e9)_B\7f,UQ6i03O5_21O5_q]&6MNqI7fGpW8H)<^:]=2i;uTnu=oMb,
A,^*>D#SJSFoHdfKDpW)O8bIERf9)]Xo>U)\Gj>D`;[sZdJhYpg]$.1j8S9Am/HGPnc&4\p\t$gqu6Nm
ro!h=s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`
DZ4>KB)Z3;>Q.b(<;obo:]=)f8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+
@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\c0DD_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QP
s5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1W
B`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5
Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<
s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>K
Ac?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<
C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\
rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB
@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KE
EW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#p
r;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:
>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>Q
FT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWm
qYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/
=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(Z
HiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQl
p\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'
<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-Xd
Jc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6g
pAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!
;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATq
L&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smc
o)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo
:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&
NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^
n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj
9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3
QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+W
mf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e
8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@D
Rf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbS
kl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_
8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?P
U].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GL
jSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z
7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]
Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZB
iVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W
7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].Cp
Z2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;
h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT
6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)
\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4
f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ
6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94
_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")
e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL
5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C
_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.t
cMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!
5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7N
bPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl
`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O
5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jY
dJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki_
_u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P
5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoog
eGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT
]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#
6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYp
gA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=J
Zi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I
6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$
hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:
YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L
7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/
iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-
W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR
8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6
kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"
T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV
8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>
lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`Cf
Rf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y
9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcG
mJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2X
OT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]
:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2M
nG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJ
MZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c
;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVS
o`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:
LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h
;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(Z
pAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0
J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl
<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`
q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%
GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r
=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmb
qu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZk
FT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#
?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'g
rS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`
DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+
@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QP
s5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1W
B`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5
Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<
s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>K
Ac?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<
C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\
rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB
@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KE
EW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#p
r;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:
>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>Q
FT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWm
qYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/
=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(Z
HiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQl
p\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'
<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-Xd
Jc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6g
pAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!
;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATq
L&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smc
o)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo
:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&
NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^
n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj
9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3
QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+W
mf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e
8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@D
Rf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbS
kl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_
8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?P
U].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GL
jSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z
7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]
Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZB
iVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W
7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].Cp
Z2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;
h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT
6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)
\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4
f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ
6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94
_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")
e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL
5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C
_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.t
cMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!
5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7N
bPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl
`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O
5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jY
dJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki_
_u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P
5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoog
eGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT
]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#
6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYp
gA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=J
Zi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I
6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$
hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:
YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L
7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/
iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-
W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR
8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6
kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"
T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV
8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>
lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`Cf
Rf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y
9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcG
mJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2X
OT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]
:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2M
nG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJ
MZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c
;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVS
o`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:
LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h
;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(Z
pAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0
J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl
<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`
q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%
GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r
=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmb
qu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZk
FT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#
?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'g
rS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`
DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+
@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QP
s5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1W
B`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5
Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<
s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>K
Ac?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<
C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\
rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB
@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KE
EW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#p
r;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:
>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>Q
FT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWm
qYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/
=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(Z
HiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQl
p\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'
<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-Xd
Jc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6g
pAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!
;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATq
L&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smc
o)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo
:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&
NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^
n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj
9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3
QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+W
mf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e
8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@D
Rf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbS
kl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_
8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?P
U].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GL
jSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z
7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]
Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZB
iVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W
7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].Cp
Z2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;
h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT
6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)
\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4
f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ
6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94
_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")
e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL
5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C
_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.t
cMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!
5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7N
bPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl
`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O
5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jY
dJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki_
_u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P
5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoog
eGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT
]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#
6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYp
gA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=J
Zi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I
6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$
hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:
YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L
7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/
iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-
W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR
8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6
kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"
T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV
8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>
lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`Cf
Rf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y
9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcG
mJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2X
OT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]
:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2M
nG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJ
MZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c
;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVS
o`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:
LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h
;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(Z
pAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0
J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl
<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`
q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%
GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r
=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmb
qu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZk
FT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#
?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'g
rS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`
DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+
@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QP
s5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1W
B`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5
Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<
s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>K
Ac?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<
C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\
rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB
@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KE
EW1(ZHiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#p
r;QQlp\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:
>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>Q
FT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWm
qYp6gpAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/
=T2;!;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(Z
HiATqL&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQl
p\smco)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'
<;obo:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-Xd
Jc:B&NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6g
pAXX^n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!
;>sAj9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATq
L&R,3QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smc
o)A+Wmf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo
:]=&e8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&
NrG@DRf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^
n,DbSkl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj
9`@W_8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3
QN!?PU].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+W
mf)GLjSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e
8cD6Z7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@D
Rf9)]Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbS
kl0ZBiVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_
8,c!W7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?P
U].CpZ2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GL
jSn-;h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z
7fGgT6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]
Xo>U)\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZB
iVq[4f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W
7/fRQ6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].Cp
Z2V94_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;
h>Z")e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT
6iKEL5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)
\Gj;C_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4
f)F.tcMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;TB@/a@/=T2;!;>sAj9`@W_8,c!W7/fRQ
6Dd#!5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V94
_#D7NbPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#pr;QQlp\smco)A+Wmf)GLjSn-;h>Z")
e,IYl`r<mT]`,8:YPtL"T)P2XOT(.:LAl]%GQ)^`DZ4>KAc?*:>5hY'<;obo:]=&e8cD6Z7fGgT6iKEL
5_21O5_;9#6Mj.L7K,gV8H)9]:B")h;Z9_r=T2Y+@fBs<C]8>QFT-XdJc:B&NrG@DRf9)]Xo>U)\Gj;C
_u@jYdJhYpgA^"/iVr$>lMg2MnG`(ZpAXmbqu6QPs5s@\rqlWmqYp6gpAXX^n,DbSkl0ZBiVq[4f)F.t
cMki__u@=JZi70-W;`CfRf8EJMZ/A0J,XZkFT-1WB`;WC@/aC0=T2;!;>sAj:&[``8,c!W7/fRQ6Dd#!
5_21P5lO+I6iKOR8,c'Y9E%]c;#XAl<rQ5#?N+F5Ac?KEEW1(ZHiATqL&R,3QN!?PU].CpZ2V<5_#D7N
bPoogeGe2$hu;U6kPjcGmJcVSo`"R`q>:'grS[_<s8N#prVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGden
a8X$V^&GG=Yl:U#T)P5YOoC7;LAl]%GQ)^`DuOJMB)Z3;>Q.e)<W5kp:]=&e9)_B\7f,UQ6i03O5_21O
5_q]&6MNqI7fGpW8H)<^:]=2i;uTnu=oMb,A,^*>D#SJSFoHdfKDpW)O8bIERf9)]Xo>U)\Gj>D`;[sZ
dJhYpg]$.1j8S9Am/HGPnc&4\p\t$gqu6Nmro!h=s8N#prVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGden
a8X$V^&GG=Yl:U#T)P5YOoC7;LAl]%GQ)^`DuOJMBDu<<>lIn*<W5kp:]=)f9)_B\7f,UQ6i03O6%M=Q
6&7i(6Mj.L7/f[T8,c'Y9`@ie;#XDm=T2J&?N+I6B)ZWGErL4\I/\ctLAm85QN!?PU].CpZ2V<5_>_CP
bPoogeGe5%i;Vd9kl0rJmf)bUp&=^bqYpBkr;Q]Rs5X.VrVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGden
a8X$V^&GG=Yl:U#T)P5YOoC7;LAl]%GQ)^`E;jSNBDu<<>lIn*<W5kp:]=)f9)_B\7f,UQ6`*2$6@hIT
6Mj.L7/f[T8,c'Y9`@ie;#XGn=T2J&?iFR7B)ZWGErL4\I/\ctL]3A6Qi<HQU].CpZ2V<5_>_CPbPoog
eGe5%i;Vd9kl0rJmf)bUp&=^bqYpBkr;Q]Rs5X.VrVlZmq#:$eoD\4Xmf)JMjo49=h>Z%*eGdena8X$V
^&GJ>ZMpj&TDk>ZP5^@<LAl`&GlDjbE;jSNBDu?=?2e%,<rQ%s;>sAj9E%Q_8H)-Y7f,TQ6\.UU6\7])
7/KIQ8,c'Y8cDH`:]=2i<W62$>Q/"/Ac?BBD>nVUG5cphK`6c+O8bLFS,T5_Xo>U)])KPF`;[sZdJhYp
g]$.1j8S9Am/HGPnc&4\p\t$gqu6Nmro!h:s82coqYp9hp\sd`n,DbSl2KfDir7d5f`'G#ci1ua`;[IL
[f3T3WW&OhS,STMMuJP3JGsloGQ)R\C]8#H@fB[4>Q._';uTYn;#X/f9E%N^8H),S7=dmY7=dl.77I2G
qagTWr_EGir_i_rr`];,ra5Y:rb2:KrcJ-`rdOj"reUQ7rg<\Srh]UrriuI6rk\TQrlkAirmh#'ro*k:
roj@JrpKdUrq69brqcWkrqucpi;_j;qu-NjrqQKerq$-XrpKdMroO.=rndY,rmh"orl>#Vrk8<>rj)O'
rh07\rfd>?re^W*rd+Qfrc.pRrb;@Ara,S0r`K/"r_remr_<Acr_!/\r^W_QJOY2[JOTZ07fGpW8H)3[
9E%Zb:]"&h=8lD&?2e72B)ZNDDuOnYGQ**kL&Qr.OT([ISGoAaY5Ya+]DfYG`W"*\df.erh#?:3j8S9A
m/HGPnc&4\p\t$gqu6Nmro!h:s82coqYp9hp\sd`n,DbSlMfoEj8Rp7f`'G#d/M,c`W!XO[f3W4X8\jm
T)P#SNrFq8KDp8tH2_j`D>n>MAc?-;?iF7.=8l8";Z9Ml:]=&e9E%Q_8Z#%08:a<`8H)3X9)_N`:B"&g
;#XGn<rQ;%?2e41A,^3ACAr/NFoH[cJ,Y6&MZ/e<RJrcVVZ*duZi7W:_u@[Tc2Q2kf)FJ(iVqm:kl0rJ
mf)bUp&=^bqYpBkr;Q]Rs5X.VrVlZmq#:$eoD\4Xmf)MNjo4<>hu;:-f)F%qb5TE[^](_A[/R0+UAgb`
Qi<$EMuJD/If=ZmF8g(VD#S)H@fBd7>lIk)=8l.t;>sDk:A[`a9;Y=48qBTd9)D9\9`@cc:]=2i;Z9_r
=T2P(?N+@3AH$?CD#SDQGQ)pfJc:K)MuJq>S,T&ZVuEq"Zi7W:`;[gVcMl>mfDaS)iVqm:kl0uKn,DkV
p&=^bqYpBkr;Q]Rs5X.VrVlZmq#:$eoD\7Yn,DVOk5OH@hu;=.fDa.rb5TH\_#CnD[Jm<-V#I"cQi<*G
NW+Y2If=]nFoHC[DuOGLAH$$:?iF7.=T2>";uT\l;#X8i9r:U89S#lh9`@cc:]=2i:]"#g<W6)!=T2V*
@/aU6BDu`HDuOeVH2`3jK)UW+N;f%?Sc5>^WW'1%[/R`;`;[gVcMl>mfDaS)ir8$<kl0uKn,DnWp&=^b
qYpBkr;Q]Rs5X.VrVlZmq#:$eo`"C[n,DYPk5OH@i;VF/fDa.rb5TE[_#CnD[f3H/V>d1fRf8KLNrFh5
Jc:/uGlDa_DuOSPBDuNB@/aL3?2e"+<rQ+u;uTYk:o7$>:Ou;m:B=6er_WSkr_i_pr`9##r`fA,ra5Y7
rau.Erbh^SrcS3frdXp#rf$i;rg*PSrh9=lrj)O3rkABNrlG)brm^r!rn[S5roO.DrpB^Rrpp'^rqQKh
rql]mrr1jUj8]#TrqcWhrqHEarpg!Vrp9XHroF(:rn7;&rmC_grlG)Trjr*;rilC!rhBC^rfd>Creg]-
rdauprcS3\rbh^Lrb)4?ra>_4r`oG*r`B)"qc'=gJPq%sJPlMH;Z9Vo<;oqt=8l>$>5hh,?iFL5B)ZKC
D#SGRF8gF`If=lsLAm23OoC^HT`1_cXT#U+\,O/A`W"!Yci2JofDaY+ir8'=lMg2Mn,DnWpAXjdqYpBk
r;Q]Rs5X.VrVlZmq#:$eo`"C[n,D\Qk5OKAi;VL1f`'=ubl5``_Z%1H\Gi`3W;`UlSc4rSP5^C=L&Q]'
If=QjFoH@ZD#S/JAc?09@/aC0>5hY'=8l8"<Mi`H<.S##<;ons<rQ2"=Sl8#?N+=2@/a^9B`;`FDuOeV
FoH^dJ,Y'!M>iS8P5^mKU&LkeY5Yj.\c0ACa8X6\ci2Mpf`'b,j8S3?lMg2Mn,DnWpAXjdqYpBkr;Q]R
s5X.VrVl]nq#:$eo`"F\nG_eRkPjWCi;VO2g&BJ"c2Poc`;[LM]Df,8WrAmpT`1>XQ2ZjDM>i8/JGslo
GlDa_DuOYRCAqlFB)Z6<@/aO4?2e+.>Q.g'=b0_,=b9fU>5MP'?2e10?iFI4AH$3?C&VrJDZ4VSG5cac
If>!!LAm23P5^aGSGo>`VuEn![f3l;_>_RUbl5ugfDaJ&hu;[8k5O]Gmf)_ToD\L`q#:-hqu6Nmro!h:
s82coqu6Bip\sgao)A.XmJcALkPjK?h>Z.-eGdenbl5T\^](nFZi7$)W;`LiRf8ZQOT(1;M#N#*IK"Tm
G5cL\DuOVQC&VcEAc?3=@fBd7?iFC2?)CkX>_-.3>lJ%.?Me+,@K'g:BDuTDD#SAPE;jtYH2`0iJ,Y3%
M#NJ7Pl@$KT)PScWW'.$\c08@_Z%[Vc2Q,if`'Y)hu;a:kPjfHmf)_To`"Uaq#:-hqu6Nmro!h:s82co
qu6Bip\sgao)A.XmJcALkPjK?h>Z1.ec*tqcMki__>_1J[Jm?.WrAalSGnrUPQ$R@MZ/;.Jc:/uGlDjb
F8g.XD>nANB`;WCAc?3:@A@4]@"D^:?iaYCqdKJ5raYq<rb)4FrbMLOrc.pXrce?hrdXoureUQ3rf@&E
rgEbXrhoaqrj)O6rk8<KrlY5brmLeurnIG0roO.Brp0ROrp]pZrqHEerqcWkrqucpi;_j;qu-NkrqQKe
rq69]rp]pTrosFFro="7rnRM)rmC_krlG)UrkJHCriuI)rhf[frgj%TrfR2@reg]/rdt-!rd+QgrcJ-Z
qeuIMrbMLJrb21AVIb<iJRsFEqe,nArb;7Erb_XQrc%jWrc\9crdFcrrdk'(rf$i;rfmDNrgj%`ri?%$
rjDa=rkSNQrlkAfrm^r$rn[S4roX4Drp9XRrpg![rqHEerqcWlrr)iqi;_j;qu-NkrqQKerq??_rpg!V
rosFFroF(:rndY,rmUknrlY5ZrkeZHrj)O,ri,mkrh'1ZrfmDErf-o6reLK(rdFcnrcnEcrcS3[rc%jT
rb_XNrbMLJVJ1TqJSB^MrbD=Grb_XPrbqdTqfDa\rd+QkrdXp#reCE0rf6u?rg<\Urh'1driQ1(rjMg?
rkeZUrm(Mirmh#%rn[S4roX4Drp9XRrpg![rqHEerqcWlrr)iqi;_j;qu-NkrqZQgrq??_rpg!Vrp'LH
roO.<rnm_/rm^qprlkA\rkn`KrjDa1ri?$prhBC`rg3VLrfI,=reg].rdk&urdFckrce?arcA'Zqf)FN
VJ^s&JSp$V!H)fSDu4MNErL4\GQ)jdI/\WpJGt3#LAm#.NrG4@Pl@-NTDkSaW;`t!Z2V<5_#D7Nao9Tb
d/MYrg]$(/ir8*>kl0uKnG_tWp&=^bq#:0ir;QZoro!h:s82cor;QQlq#:!do`"F\nG_eRlMfrFiVqa6
g]#b&e,I\mao9<Z_#CkC[JmE0WW&gpT`1M]Rf8QNOoCF@MZ/D1LAlc'JGt&tI/\KlHN&0gG5cWZFFeOb
FFeN7FEIM)rc\9cqg&0grdOirrdb!$reCE0rf6u>rfR2HrgEbXrhTOkriQ1+rjMg>rkn`TrlkAirm^r#
rndY4roF(Crp'LNrpg!Yrq??crqQKirqucorr1jUj8]#TrqucmrqZQeqt0mWrpB^Nroa:?ro!e3rn%/!
rm:YerlG)Trjr*<riuI(ri,mmrh07^rgEbNrf[8Arf$i6reCE*re(3#rdXorrd=]lTR)08JU2lnq0N$f
rdFcprdXfsreCE.re^W6rf[8Erg3VRrgs+_rhf[oric=0rj_sBrl+lXrm(Mlrmq)'rndY4roX4Erp'LN
rpg!Yrq??crqQKirqucorr1jUj8]#TrqucmrqZQfqt0mWrpB^Oroj@Bro*k5rn7;&rmC_irlY5Xrk8<C
rj2U-riQ0trhBCbrgs+Vrg*PHrfI,?repc3reLK+re(3%rdk'!rdXotVLO/HJU`6#r."Toqgna"reLK/
repc8rf@&?rg!JLrgWnYrh07eri5t"riuI3rjr*Erl>#\rm1Sorn%/)ro!e7roX4Frp9XQqt'g]rqQKg
rql]mrr)iqi;_j;qu-Nlrql]jrqH<^rpg!VrpKdMroX4@ro!e1rn7;#rm:YirlG)UrkJHCrj;[0riZ7"
rhoairh'1]rgNhPrg!JGrfI,?rf-o9repc5reUQ/UP=>SJVJ`1!JZ@.L]3,/M>N20NW,"9OT(LDQN!<O
SGo,ZTDk_eW;`mtYPtg+\Gj5A_#D:ObPofddf.ktg&Bk-ir8$<kl0oImJcSRoD\C]p\t!fqYpEirS@M6
s82fpr;QTmqYp9hpAXaao)A+Wmf)MNkPjWCiVq[4gA]\&dJhJkbPoHZ_>_.I\Gir9Z2Um)WrApqU]-td
TDk>ZRf8]RQ2[$IP5^R?O8Fp3N.Hq=N.HogN/[Xnrf6u=rfI,Arfd>Grg*POrgNhWrh07arh]Unri5t$
rj2U4rk&0Frkn`Vrm(Mirm^r$rnIG0ro3q=rosFKrpKdTrq$-]rqHEfrqcWlqu,@Nj8]#Urr)inrqcWh
rqHEcrpp'XrpTjQroj@Ero3q7rndY,rm^qprm(M`rl+lPrk/6@rj;[0ric=&rhoamrhBCbrh'1]rgWnT
rg3MHrfd5BrfO(>JWPGEJrotoqi^i?rfmDKrgEbSrg`t[qk3qarhf[priQ1'rj)O3rj_sBrkeZRrlb;d
rm:Yqrn@A-ro!e:roX4FrpK[Qrq$-]rqHEfrqcWlqu,@Nj8]#Urr)iorql]jrqQKerq-3[rpTjSrp'LH
roO.<rnm_1rn.5$rm:YhrlY5Yrk\TKrk&0<rjDa2ric=(ri?$rrhf[iqk<n[rh'1\opi"NJX_4[Jt)P*
rgiqXrh'1_rh9=drh]Ulri5t!riZ7(rj;[5rjr*CrkSNMrl>#[rm1Smrmq)&rndY4ro="@roj@JrpTjU
rpp']rqHEeqtg<jqu,@Nj8]#Urr)`lrqcWhrqHEarq$-ZrpTjProsFFro=":rnm_.rn%/!rm:YirlP/Y
rkn`Nrk&0@rj_s8rj2U.riZ7&ri5srqks=frhH$XJY@XgJYDn5qkO.drh]Ulri#gqriH+$ric=+rj)O3
rji$>rkABKrkn`Urlb;drmC_rrn.5*ro!e7roO.CrosFLrpTjUrq-3`rqHEfqtg<jqu5FOj8]#Urr)`l
rqcWhrqHEbrq$-[rp]pSrp0RIroO.?ro!e3rn@A&rmC_krm(Mbrl>#UrkSNJrkABCrj_s8rj2U0rilC*
riZ7&riH+"ri2NfJZ+-uJZ/CCri,dqriH+%qlfn&rj;[6rj_s>rkABIrk\TQrl>#^rm1Sjrmh#$rnIG0
qr@\=rp'LKrpTjUrpg![rqHEerqcNhrr)`nh>cO8qu6Tnqu$HirqZQgrqH<^rp]pUrpKdOroj@EroF(;
rnm_0rn%/#rmC_krm(Mdrl>#Xrkn`NrkJHHrk/6Brji$;rjMg6rj;[2rj)F+UTf<RJZs^0!O/g*Z1tX(
[/RK4[f3f6]DfMC^\bhG`;[dUao9N`cMl/hec+2"gA]t+i;Vm<kl0lHmJHAOoD\C]pAXgcq#:-hqu6Nm
rVQTMs5X.SrqlWjqYp<ip\XU^o)A.Xn,D_RlMg#Hjo4<>iVqa6gA]b(ec+"rd/MAjbl5caa8<gS_Z%@J
^\b\C])0&8\GNb4[Xkl<[Xtsb\+R91])0,=^AbnE_#D7N`;[dUao9H^c2Q&gd/MPofDaG%h#?72iVqp;
kl0iGli->OnG_tWoD\C]pAXgcq#:-hqu6NmrVQTMs5!_SrqlZnqu6Hkq>U-cp&=R^nb_hTm/H;LkPO?>
i;VU4h>Z(+ec+(tdJhMlci2/fb5TK]`r!^R_Y(_D^\,:;]Rd_H]Rmfh^&GbC^\bhG_Y_7M`W!pWaSsE_
ci2;jchl2jfDaM'h#?4.j8S3?l2KuImJcSRnG`%Yo`"O_p\sseq>U9jr;6Hirn[V1s8N#prVl`oqu6Hk
q>U0gp\sjboD\:ZnGDYQli-,IkPjQAiVqa6h>Z1.g&BV&eGdqrdJhMlci25ebl5caao9B\a8<jE`2pk-
_h#^Z_t(bC`V[^TaSs?ZbPofdci2;jchl2jf)F>$g&Be+hu;R5iVr!=kl0lHm/HDOn,DkVo)A:\p\Xa_
qYpEirVlfJs5!_SrqlZnr;QTjqYp9hp\smco`"I]nc&%Wn,D_RlMg#Hk5OE?ir7m8h>Z4/gA]b(fDa>"
eGdqrdJhMlci25ec2PrdbOs$QafNR7aFVEgaS<mJb59B]bl5ldchl)de,InsfDaG%g&Bb*h#?41iVqj9
k5OTDl2L#JmecMNoD\F^p\sseq>:$fr;6Hlrn%2+s8N#mrVl`oqu6Hkq"sg_o`"F\nG_nUnG_eRli-,I
k5OKAir7m5htu4.g&BV&f)F5!eGdqrde1u[c_Jd:c@O8lc2l59p!<Warm1JgrmCVlrm^qurn%/%qqM,+
rnm_5ro3q<roX4Dqs47LrpTjUrpp'[rq-3`rqHEerqcNhrquZlrr1OLgAh'Lrr)`lrqlThrqQKerq??`
rq$-[rp]pUrpKdPrp'LHroa1>ro*k7qqq;,rnRM-rn@A)rn.,"pso&eWRHFIJ^]5"pseuern%/%rn72&
qqM,*rndY3qr%A3roX4Croj@IrpB^QrpTjVrpp'\qtC$`rqQKgrqcWkrquQirr1OLgAh'Lrr)Wirql]k
qtU0brq69_rq$-[rp]pUrpB^Orp0RJroj@EroO.>qr7V5rnm_5qq_/)qqLSmVV$IPJ_5S,n(I]oqqM,*
qq_8.rnmV2qr7V9roX4Croj7ErpB^RqsaLSrq69arqHEeq"k!erqucoq#8nFgAh'Lq#13irql]krqZQg
qtL![rq$$Wrp]pUrpKdOqs"+DroX4AqrIb:ro3V/rnm_5qqddtJ_bn5J_g%Uqqh5-p#,i.qr7V9qrR_<
roj@Irp9XOrpTjUrpfmWrq-3`rqHEerqZHfrql]mqu-Ekrr:UMeGoOIq#1*fq"jm_rqHEbqt0mXrp]pU
rp]gPqs==JrosFGqrdk=puMG7pu7k'J`21=J`6F`pu;22qrIY:qrdtBros=Frp0RMrpB^QrpTaRrq$-]
rq69bqtU'arqcNhrquZlq#:9mfDjA#q#:9kqu$Hjqtg<frqQKerq?6^q"+LTrp]pUrpK[Nrp9XMqs*k<
qrdb:S`PFaJ`VIEq;q;3ro`t<q!.Y@rpKdSrp]pUqsj[Wrq-3_rq??crqQKgq"k!equ$?iq#:9mfDjA#
q#:'erqucmqtg<frqQ9_rq60\rposVqsaLOqsOINqs==Jq!.Y=S`kXgJ`q[Kp?;;9qs+(Erp9XOqsO@M
rp]pUqsj[Vqt'gZqtBp]rqQ9bqtpBjq#13kq#AtGdJs"@q#1*frqlKerqQ0\rq6'Yrq$-[rpf[Np$\%2
JaS*WJaVpnp$_nLrpTXOqsjRTrq-3_qtBp]rqQKgqtg3erquHfqu69gfDj7uo)AXep&+gdrqcEcrqQBb
o(D\Iq""=POmmqkJae6[mI:#Cq"""Irq-!YqtL*bq"apcqtp0drr)Eep&EYDbQ%A:p&4dcrqlKeqt^-a
qtL!]q"=4Mp%+XCJb"B_Jb&O*o(2>Brq60^qtL!_qt^$`qtp9gq#1!en,M#>_Z0E1p&4dcq"sa\qt^-a
i:if9JbFZgJbJp5i:m-Dq"aLWqtpBjn,<%\m/P];_Z0*(rr)Ecp&"X_gA.<7JbXfkJb]'9gA1O?o)&4[
rr)*\m/P];\c;I(n,;hTqtks@q>,[=Jbjroeb\k6qu#p]o)@\LfDhuQo)@&8Pl-+1Jc()snGL]4o)@&:
fDhuQ_Z#euJc1/uJc5*:_Z%s_fDgg0Jc>BBJc:6"Jc=*sYlE>TJcC<$JcC<$JcC<$fDgF%JcC<$JcC<$
JcF@%JcC<$JcC<$JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$JcC<$JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$
JcC<$JcC<$fDgF%JcC<$JcC<$JcF@%JcC<$JcC<$JcC<$fDg@
~> %APLeod
EI
76 0 0 76 0 441 cm
BI
/Width 228
/Height 228
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$
JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcFs6Rf7m;Jc>*:JcFs6JcG]K
m/EIPJc1/umeuDLJc>`MO8neMdJ^BKJc(/u!WDuMrTsNHs.TJcrpTgYr:TrRqLSKoqWReQqss[RrUTr`
s.o\orp9UYr:p0^qYU)Wpjr3kq!RqVq==CWqtU*UrVlels/Q+rrpp$_r;6BaqY9m]ptb\Yp4;q#p@.hE
p\=OYq==C]qtU*^rUp/ls0Mb&rq66er;6BdqYU*fq"XUYpA=ORo^_U]nq$@go(hnUoBc,Kp%\7Up\Xab
q=sgcqt9marUp/us0ht,rq66hr:TsdqYU*cq#:$\pA":WoDA+Cn[7k;n;6Z1nauAEo)A7Uo_%qWp\=O_
q>:$cqtp<arVlf)s1JC/rq66hr;6BgqYU*fq"sgbpA=O^o_\7Zo)%tSnG_nUnFc7LmXaeWmeZAHn,DhU
n,)VRnb_nVoDA1Zp&"I^p\Xabq=XU`qtp<grUp0)s2+g8rpp$er;6BjqYU*`p\XX_o`"I]o(_bSn,DhR
n,DbPmJcJLlhKc?l*]`+k_\O!klBuClMg,Hm/HDLmecJPnG_nUnGDbTo)A7Xo`"OYp\t!cqYpBhr:U$c
rke]Ps76-fr;6BjqYU*fq"XR^o`"I]o)%tVn,DhUmf)VQm.foGlMg&CkkO?9k-a<%jb`*pjoFQ=kP49?
l2KuFlhg&JmJcPQnG_nUnG_tWo)A7[o_A.Wq#:*dqYpBhr:U$*s2G$;rqQHkr;6BjqYU*fq"sg_p&=U\
nc&"VnG_nUmf)SMli-2Kl20]AkOmp5j7VEAiITsKiUc%/ir8!/jSn?;kl0iGlMg,Hm/-5MnG_nUnG_tT
o`"O_p\Xabq>:$fqtp<drVQT8s3(HArq66hr;6BjqYp<iq#:$epAXaao`"F\nb_hTn,DbSli-2Kl2KoG
kPjWCjo4??j8S'8iVVR4hu;R5htu96h1=C:h>H.+hYuI4htu@2iVVX6j8S-=jo4EAkPj]El2KuIlhg,I
nGDeUo`"O_pAXgcq#:*dqYpBhr;6Hirlb>bs8N#mrVl`lqu6Hkq>U0gp\smco`"I]o)A.Un,D\Nli-/J
kl0cEjo4??j8S';iVqa6i;VX5hY>n!gABR2fR_\3f`'S%g@s=rh##t-i;VX5iVqj9j8S-=jo4HBkl0iG
lhg&Jn,)VRo)A7[o`"R`p\sseq>U6fqu6NjrVQT;s3CZArqlZnr;6BjqYp<iq#:$epAXaaoD\=[n,DhU
mf)VQli-2Kkl0`DjSn3=iVqd4hu;L0h#?(-gABS&f`'M%f(IS[eB66ke"P7TeG7Ynec+/!fDF5"g&B_)
g\]e*h>?+/i;V^7j8S0>k5OTDl2L#JmJcPQnG_nUnc&.Zp&=[ap\sseq>U6iqtp<jrUp0;s3CZDrqlZn
r;6BjqYp9ep\sgaoD\=[nc&%Wn,DYPlMg#Hk5OH@j87g7hu;L3h#?(-f`'M%f)F1re,IepdJ2)fci2;a
cb%JRcA^'DcN2D>!7:_kpsB#frmLepqpbVrrn%/%rnIG-rndY3ro!e7ro=">roX4DrosFJrpTjUrpg!Y
rq$-]rqH<bqtg<hqu$Hlqu5"CdJs4Fqu-NlqtpBhrqZHcrq??_rposUrpKdProsFGroX4?ro3q8rnm_2
rnRM+rn.5$rm^qrrmLemqp58erlt>aqoeu]YK;@;L<9A9!6Y;aprr`^rm(Mhqp>>jrmUkrrmq)#rn7;+
rn[S2ro!e8ro="?roa:Frp9XOqsaUUrq$$\rqHEfrqcNhrquZlrr1=FeGoOIq#13irql]krqZQgrqHEc
rq-3\rp]pUrpB^Orp'LGroO.>ro!e5rndY/rn@A(rmh"trmC_lqp58drlkAbrlY5]prEBRqo.:-fu&BY
Xi&c/!QE"X`V[[Pa8X3[b5TT`bl5laci2;jdJhVoec+5#g&Bb*hYuF3i;Vd9jo4HBlMg,KmJcSRnc&+Y
o`"O_p\sseq>U6iqu6NjrVQTDs4%)JrqlZnr;QTmqYp<iq#:$eo`"I]o)A.Xn,DbSlMg#Hk5OB>iVqa6
hYu:/f`'G#e,.MkcMl)fb5TK]a8X'W`;[[O_>D%I^](t3]u7R7]Tp.s]`>bF^AbnB_#D1L_u@UR`W!pW
ao9H^c2Q#cd/MMnec+5#gA]t.hu;U6ir8*>kl0lHmf)\SnG`"XoD\C]p\sseq>U6iqu6NmrVQTDs4%)D
rVl]nqYp<iq#:$epAX[_o)A.Xn,D\Qli-,Ik5OH@i;VU4h>Z+,fDa>"df.VmcMkucao9B\`W!gT_u@LO
_#D(I^&G\D]DfD=\aR#A[XklM[d^a+\,Nr8])K>@]`,VD^AbnH_>_@O`;[aTaSs<\b5T]cd/MJmec+2"
g&Bh,hu;R5jSn<@kl0oImJcSRnG`"XoD\I_p\sseq>U6iqtU->s4@;MrqQHkqu6Hkq>U-fpAXaao)A.X
n,D_Rli-/Jk5OE?i;VX5h#?%,f)F.td/MAjbl5fb`r<pU_u@IN^](tH]`,MA\c0);[f3]6[/73)ZM:]=
Y^s$AYkYL!Z2h30Zhq-/[JmW6\,Nr;]DfJB^AbnH_#D7N`W!mVbPoccci2;jeGe%ugA]n,hu;R5jSn<@
l2L#JmJcSRnc&+Yp&=[ap\t!fqYpBerVQTJs4@;MrqlZnr;QQlq>U0gpAX^`oD\:ZnG_kTlMg#Hk5OB>
i;VU4g&BV&eGdhocMl&ea8X'W_u@IN^AbhF\c0);[JmK2Z2Us+Yl:g)Xn\srWr&d'W.Cn(W;`doWW9'o
X8]7#Y5Y[)YPtg+ZMq92\,Nr;^&GeG_#D7N`W!pWbl5oed/MPof)FA%hYuI4ir8*>kl0lHmf)\Snc&.Z
p&=[aq#:*gqYU3irVQTJs4[MPrqlZnr;QTmq>U0gp\sjbo`"F\nG_kTm/H5Jk5OE?i;VR3g]#e'e,I_n
c2PlbaSs*V_>_4K]DfA?\,N`5ZMq',Xo>C#WrAsrVuERgV#-qXU;<OSTpVP?U&h$a!2K=brhf[mri#gr
ri?%#ric=+rj2U5rji$?rkJHKrkn`VrlY5brm:Yormq)'rn[S3ro="?roj@JrpKdTrpp'[rq69brqQKg
rql]mqu-NngAfn,rr2fnrqucmrqZQgrqHEarposTrp9XMroX4?ro!e4rnIG)rmLemrm(Marl+lRrkSNH
rjr*:rj2U.ric=&ri5sprh]UirhBCcrh'1_rh'1]qjm;J_4-"FR%*H4!M,b]Sbo#XT`1S_U&LecV#I4i
VZ*UpXT#F&Yl;!.[Jmc:]`,_G_Z%RSaSsKad/MJmf`'V(hYuI4jSn<@li-;Kn,DnWo`"Uaq#:*gqu6Nj
rVlfMs5!_SrqlZnr;QTmqYp9hpAXaao)A1Yn,D\QlMg#Hj8S$:hu;=.f)F+sd/M8gaSs'U^](qG\,Nf7
Z2Us+XT#7!V#I+cT`1P^SGnuVR/WHOQ2[$CPQ$a?OhQp.OHP_#Oo(:BPEYs/rfmDIrg3VPrgNhVrgiqZ
rhKIgri5t!ric=+rj;[6rk8<HrkeZUrlb;frmLesrn7;.ro*k:roj@Grp9XQrpg!Yrq69brqQKhrql]m
rr)`nh>c=2rr2fnrql]krqZQfrq??arpg!WrpKdNroj@Dro*k6rnRM)rm^qorlkA_rkn`Mrk&0>rj2U/
riZ7"rhoalrh07^rgj%Vrg<\OrfmDFrfR2AqiC`:qi1B0^5IQ#P)K*orf-i9!07&>qiLf>rfd>Grg3VO
rgEbVrh'1_rh]Ulri,n"rilC.rj_s>rkJHMrl>#^rm:Yorn%/)rndY5roX4Drp'LNrpTjVrq69arqHEf
rqcWkrr)`nh>c=2rr2fnrql]krqZQfrq??`rp]pTrpB^KroX4?ro!e3rn@A$rmC_jrlG)WrkJHFrj_s6
rilC(ri5smrh9=`rg`tUrg3VKrf[/?rf6u;qhtH2reUH,[>'6eM2)"br.k?/qhkB2rf-o;qiLf@rfmDK
rgNhVrh'1`rhKImriH+'rj2U5rk/6Frl"fWrm(Mjrm^r$rnRM2ro="?roj@KrpTjUrq-3_rqHEfrqcWk
rr)`nh>c=2rr2fnrqcWirqQKcrq-3[rp]pSrp0RGro="9rn[S,rmq(qrlkA`rkeZLrk/6;riuI+rhoal
rh9=`rgWnTrfd>Erf@&=repc4reCE+re10"qgbl"JU`E(r.+Wordk'%re:?+re^W4rf6u=rfR2DrgEbU
rh'1`rhTOkric=,rj;[;rkJHLrlP/arm:Yqrn7;,ro!e:roX4GrpB^Srpg!Zrq69crqZQirr)`nh>c=2
q#13grqQKerq69^rp]pTrp9XLroF(<rnm_0rn%.urm(Mcrl4rQrk/6?riuI*ri5snrh9=_rgEbPrfd>C
rf-o8reLK-re19%rdautqgJHkqg8<g[<[=KM0\uE!IK.nHi&3iIK"`qJGt-!K`6])L]352NW,%=PQ$mI
RJrfWU&LkeWrB."Z2V94]DfVF`r=-[cMl;lfDaP(hu;X7jSnHDli->OnG`%Yp&=^bq>U6crS@M0s82co
r;QQlq#:$eo`"F\n,DbSli-,Ij8S$:hYu1,eGdhobl5Z^_Z%7J\Gii6YPtR$VuE@gSc5,XPl?gEO8b(:
M>i8/K)U<"J,XlqI/\KiH2`'fG5HEiFFeOjFT-F\FoZ^_GlE!fHiAElIK"`qJc:9#LAm#.MuJe:P5^^F
S,T#YT`1kgX8]=%Zi7K6^&GnJa8X<^d/MSpf`'b,i;Vd9kl0lHmf)\So)A:\p\t!fqYU3irS@M3s8N#s
rVl`oqu6Ejq#:$eoD\=[n,D\Ql2KiEiVq^5g]#b&df.Sla8X$V^](bB[/R9.W;`UlT`1J\R/W<KOT(4<
M>i2-K)U9!IK"QlH2_scFT-=XEVj_JDnBn<DN&K1Du=SNE;jkVErL.ZFoH[cHiAHmJ,Y'!K`6i-N;eq<
PQ$pJSGo2\V#I=lYPtm-\Gj8B_u@^Uci2Alec+>&hYuL5k5OTDm/HJQnc&.Zp\sseq>U9jr;QZlro=%:
s8N#srVl`oqu6Ejq#:!doD\:Zn,DVOkPjTBi;VR3gA]V$d/M8g`W!^Q^&GG=Z2Um)V>d4gT)P)UPl?aC
MuJM2K`6N$If=`oGlDmcFT-=[E;OPPD>nAKCU.]+C4g7%CMNocrbVRNqelCPrc8![rc\9crd=]ordb!$
reLK2rf@&Brg3VUrh9=friQ1)rjDa=rk\TQrlkAgrm^r$rn[S3roO.Crp'LOrpg!Zrq??crqZQjrquco
qu5XUi;`fUrr)iorql]irq??arpp'XrpKdMroa:@ro!e2rn7:urm(MdrkeZKrjr*6riZ7#rh9=_rgWnN
rfI,=reLK+rdXoqrd+QgrcA'YrbqdRrbVRLrbDFHrb1k8rarlUJRt!Uqe#P7!,):Erb;@HrbMLMrbh^R
rc.pYrcnEgrdFcqre(3*rf-o=rfd>Nrgs+_ri5t"riuI6rkABKrlb;drmC_urnRM2ro="?rosFMrp]pX
rq69brqQKirqucoqu5XUi;`fUrr)iorqcWgrq??`rpg!Vrp9XJroO.<rn[S,rmq(qrlkA_rkSNFrjDa/
ri,mlrh'1XrfmDDrepc2rdk&urd=]grcJ-ZrbqdPrbMLGrau.?raYq:pgLI9JRF+<!F]F8@K'a8A,^$<
Ac??AC]82MDuObUFT-I_I/\ToJc:H(MuJh;Pl@-NTDkVbWW'+#[Jmf;_#DFSbl5ugf)FA%h>ZC4jo4KC
m/HGPnc&1[p&=^bqYpBkrVQTSs5<qVrr2lqr;QQlp\smco`"C[mf)POkPjQAi;VO2f`'A!ci2)d`W!XO
\c/r7XT#-sU&LS]Qi<0IN;eY4KDpB"HiA9hF8g1YDuOMNB`;ZDAH$';@K'[6?i+1#?+sQp>`r@b?2S%-
?N+=2@/aU6A,^$<BDuWECAr/NEW1%YGlE'hJ,Y*"L]383P5^gISGo5]VZ*[rZi7N7^])4Ob5T`de,Itu
h#?72jSn?Ali->Onc&1[p&=^bqYpBkrVQTSs5<qVrr2ipqu6Hkp\smcoD\7YmJcGNk5OB>hu;@/f)F+s
c2Pf`_u@@K[f3N1WrAgnTDk5WPQ$XBM>i5.J,XipGlDgaE;jbSD#S)HAc?3=@/aO4?N+70>khOr>/"-j
=cuqY=ohi3rEK8+ra#M0ra5Y4raYq=rb)4Hrb_XRrcJ-ard=]pre19-rf@&Crg<\WrhTOnrilC2rk8<K
rlG)`rmLetrn@A/ro="?rp0RNrp]pYrq69brqcWkrquZmj8\0>rr2oqrqucmrqcWgrq69]rp]pSrp'LE
ro="8rn7;#rm:Yerl+lPrji$7ric<trh9=^rfd>Crf$i0rdk&trc\9^rbqdQrb;@DraPk7ra5Y0r`];(
qcEbtnl<;$JQ.S-p/M)mqc<\tr`T5)r`oG0raGe8rau.Drb_XQrcA'^rdOitre190rf@&Brgj%^rh]Ut
rj;[8rkSNPrlY5ermh#$rnm_7roO.Erp9XRrpp']rqHEgrql]mrr)iqj8\0>rr2oqrquclrqZQfrq69]
rpTjProsFCro*k5rn%/!rm1Scrl"fNrjVm3riH*orh'1Yrf[8?re^W*rdOinrcJ-Zrbh^Lrau.=ra>_2
r`fA)r`K/$r`/qsnl,Nc]2=,VO&>mSp/Cogr`&ksr`B)$r`T5)ra#M2raPk=rb;@Lrc.pZrd4Wnrdk'*
rf6u@rgNhXrhKIoriuI3rkJHNrlP/crmUkurndY5roF(Crp9XQrpp']rqHEfrql]mrr)iqj8\0>rr2oq
rquclrqZQerq-3[rpTjProsFBro!e3rmq(srm1Sarkn`MrjDa0ri?$krg`tSrfI,;reCE&rd=]irc.pU
rbVRGraYq7ra,S.r`T5%r`9"tqbd>gr_TdoJPUno!DlSm;#X8i;#X>k<;ons=8lA%>Q.t.?iFR7B)ZWG
DZ4YTGlE'hJGt<&MuJh;Qi<NST`2"kYl;'0^]).Ma8XEae,Iqth>Z@3j8S<Bm/HJQnc&1[pAXmequ6Nm
rVlfVs5X.Yrr2lqqu6Hkq>U'doD\7Ymf)POkl0T@hu;F1ec*tqc2P]]_>_+HZi7-,VuE@gRf8QNNrFk6
K)U/sGlDd`DuOMNBDuB>@/aL3=oMM%<W5nq;>sAj;#X8i:@_,k9S#lr9_M0\:&@]b;#X8i;>sJm<W6)!
=oMb,@/aX7BDu]GDuOhWGQ*!hK)UT*NrG:BRf8uZVuEgtZi7W:_#D=Pc2Q,iec+A'hu;X7kl0lHmf)_T
oD\F^q>U6iqu6Qnro=%=s8N#srVl]nqYp<ip&=R^nG_kTlMfuGiVq^5g]#_%d/M8g`;[ON]Df,8XT#'q
T)P/WPQ$L>LAlc'HiA3fEW0hSC&V`D@/aL3>lIh(<rQ(t;#X8i:B!ra9<:a:8qBS79)_K\9`@fd:]=2i
<;ons=8lJ(?N+@3B)ZNDD>nPSG5cjfJc:E'MuJq>R/W]VV>dRqZMqK8_#D:Obl5ugeGe5%hYuL5kPjcG
mf)_ToD\F^q>U6iqu6Qnro=%=s8N#srVl]nqYp9hp&=R^nG_hSl2KlFiVq^5gA]S#ci2,e_u@FM\c/i4
WrAgnSc4rSOT(.:K`6K#GlDgaDuOPOBDuE??iF=0>5hP$;u9Dj:B!rd9'Jp]8:a<p8FT4L8c)-Z9`@c`
;#XDm<W62$>lJ+0A,^-?C]88OFT-OaJ,Y-#MZ/_:Qi<QTV#ICnYl;34^Ac%LbPoiee,J)#h>ZC4kPjcG
mJcVSoD\F^q#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_eRl2KiEi;VO2g&BG!cMkuc_>_.I\,NW2
WW&XkRf8TOO8aq6K)U5uFoHF\DuODKAH$!9>lIn*=8l+s;>sAj:&[ca8cD9[8#\t/7Y+&-7fGpW8H)3[
9E%Zb:]=5j;Z9bs=oM\*@/a^9BDuiKErL4\If=ruL]3A6Pl@-NUAh.kYl;-2]`,bHb5T]cdf.r!h>Z@3
k5OTDm/HMRoD\C]q#:*gqu6Qnro=%=s8N#srVl]nq>U-fo`"F\nG_eRkl0ZBi;VO2g&BCuc2Pia_>_+H
[f3H/W;`LiRJrELNrFb3Jc:&rFT-7YD>n/HA,]j7>Q.b(<rPtq;#X5h9)_E]8H)-Y7eK3X7"Ia_7/9:M
7K,dU8,c'Y8cD?]:B"&g;>sVq=T2P(?iFR7B)ZZHEW1(ZI/\ZqL&R,3PQ%!LU&LthY5Ym/]`,bHao9Qa
dJhhuh#?72jSnBBm/HMRoD\C]p\t!fqu6Qnro=%=s8N#srVl]nq>U-fo`"C[n,DYPkl0ZBi;VO2f`'7s
bl5Z^_#CtF[Jm?.VuE=fQi<-HNW+V1J,XfoF8g.XD#RuE@K'U4=oMM%;uTVm:B!rd8cD9[8,c!W7J0'V
6\.U]6hs.K7/fXS7fGpW8H)3[9`@cc;#XDm<rQ8$?N+C4AH$EEDuOhWHiAQpK`6u1P5^gITDk_eY5Yj.
])KMEa8X<^d/M\sg]$.1jSnBBli-APo)A:\p\t!fqu6Qnro=%=s8N#srVlZmq#:$eo`"F\n,D\Qkl0ZB
i;VL1fDa.rbl5]__#CqE[/R0+VZ*4eQN!!FMuJ>-IK"NkEW0kTCAq`B@/aI2=8l5!;Z9Ml:&[fb8H)-Y
7fGgB6b>[96B"8)6iBCL7/f[T8,c'Y9E%]c;#XAl<;otu?2e72A,^6BD>nPSH2`9lK)U]-OT(RFTDk\d
XT#U+]DfVFaSsE_d/MYrg]$.1jSnBBm/HJQo)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"C[n,DYP
kl0ZBi;VL1f)F%qbPoN\_#CqE[/R0+V>d+dPl?aCMuJ;,IK"NkEW0hSC&VT@?iF=0=8l1u;#X8i9`@Z`
8,c!W7Hm2"6J4YU6*3H26M<e@6iKOR7fGpW9)_N`:]=2i<;otu>lJ+0@fC*@D>nPSH2`6kJc:T,OT(LD
TDk\dXT#U+])KME`r=0\d/MVqg]$.1jSnBBli-APo)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"C[
n,DVOkPjN@hu;@/ec*qpbPoK[^](eCZi7$)V#HtbPQ$XBMZ/2+IK"HiE;j\QB`;H>?N+1.<rQ%s;#X5h
9E%N^8,c!W7JfI"6J4VT5cm<%6Ma%J6iKOR7fGpW8cDB^:B")h<;oqt>Q.t.@K's>C]8;PGQ*!hJc:Q+
NrG7AT)PPbX8]I)\c0AC`W"$Zd/MSpgA^"/j8S6@lMg8Oo)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$e
oD\:Zn,DVOkPjN@hYu7.ec*nob5TBZ^AbYAZMpm'U]-h`PQ$UAM>i&)HiA6gE;jYPBDu?=?N+1.<W5qr
;#X5h9E%N^7fGjU7/K@36H;?B5at%%6Ma%J6iKLQ7K,dU8cDB^:B")h;uTer>Q.t.@K'p=D#SDQGQ*!h
JGtE)NrG7ASc5D`WrB='\Gj5A`W"$Zci2Jog&Bk-j8S6@lMg8Onc&.Zp\t!fqYpHmro=%=s8N#srVlZm
q#:$eoD\:Zn,DSNk5OB>hYu7.ec*noao96X^AbYAZMpm'U]-h`PQ$UAM#Mr(HiA3fE;jYPBDu?=?N+1.
<W5qr;#X5h9E%N^7fGjU7/K@<6MNje5_21i5kmY76Ma%J6iKLQ7K,dU8cDB^:B")h;uTer>Q.t.@K'p=
C]8;PG5cjfJGtB(NrG7ASc5D`WrB='\Gj5A`;[pYci2Jog&Bk-ir8*>l2L/Nnc&.Zp\t!fqYpHmro=%=
s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>hYu7.ec*noao96X^&GM?ZMpj&UAg\^P5^I?L]2i'HiA0eE;jYP
BDu?=?N+1.<W5qr:]=)f9)_E]7fGjU7/K@<6G>^95a"D%6Ma%J6iKLQ7K,dU8cDB^:&[rf;Z9\q>Q.t.
@K'p=C]8;PFoH^dJGt?'NW,+?SGo8^WW'4&\Gj2@`;[pYci2Jog&Bk-ir8*>l2L,MnG`%Yp\t!fqYpHm
ro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2Ua%UAg\^P5^I?L]2f&H2_pb
DuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@B6N09_5_21]5lO(C6Ma%J6iKLQ7K,dU8cDB^:&[rf
;Z9\q>5hh,@/ag<C]88OFT-UcJ,Y6&NW,+?SGo8^WW'1%\,O)?`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Y
p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==
LAl]%H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@E6Mj'\5_21Z5lO(F6Ma%J6iKLQ7K,dU
8cDB^:&[rf;Z9\q>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>
l2L,MnG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$
UAg\^OoC==LAl]%H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@E6FB(05`%c%6Ma%J6iKLQ
7K,dU8cDB^:&[rf;Z9\q>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,
ir8*>l2L,MnG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?
Z2U^$UAg\^OoC==LAl]%H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@K6N09V5_21T5lO%M
6:1N8r^6ZQr^HfUr^m)^r_<Afr_i_qr`];,ra>_<rbMLOrcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fY
rm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],Xrr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qn
rlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrb)4<ra#M,r`/qrr_NMfr_!/]r^QlUr^?WNqa19J
Z9Wt+L-Y`(!CB-L6N0@O7/fXS7fH!Y9E%Zb:]=8k<W62$?2e72BDu]GDuOkXHN&EnLAm/2OoCmMU&M"i
Z2V63^&GtLb5T`deGe/#h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiE
ir7d5f`'D"ci2&c`;[IL\,NZ3W;`OjSGnZMN;eS2J,X`mFT-4XCAqlF@/aI2>5hP$;uTSl:&[ca8cD3Y
7K,^P6i04L6*`b,5__Q'5lj;=qEk0Kr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdXrd+QnreCE2
rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWhrqHE`
rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$r_rel
r_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdXrd+Qn
reCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWh
rqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$
r_relr_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdX
rd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\9Arr2fn
rqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2
r`];$r_relr_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4G
rbqdXrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XTD
rr2fnrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFF
ra>_2r`];$r_relr_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2
rb)4GrbqdXrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`n
k5XTDrr2fnrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm(Mbrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-W
rbDFEra>_2r`];$r_i_kr_3;`r^m)Yr^?NKr^*\OJO"cO!'pEJqa:?Or^QlYr_*5ar_NMkr`/r$r`oG1
rau.Erbh^Wrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlP/brm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`n
k5XTDrr2oqrquclrqQKerpp'XrpKdLroO.<rn[S+rm^qmrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"Kb
rbh^Mral(:ra#M,r`&kor_NMer_!/]r^QlTr^6HIX?_>%JNs3#pd4sIr^HfUr^m)^r_3;er_i_pr`];+
ra>_:rb;@LrcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrqHEfrqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?Jr^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOrBU?J
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOrBU?Jr^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKerpp'XrpKdLroO.<
rn[S+rm^qmrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"Kbrbh^Mral(:ra#M,r`&kor_NMer_!/]r^QlT
r^6HIX?_>%JNs3#pd4sIr^HfUr^m)^r_3;er_i_pr`];+ra>_:rb;@LrcJ-crdXp%rf$i=rg`t]ri#h$
rjVm?rl"fXrm(Mmrn7;,ro*k<roj@Lrp]pXrqHEfrqcWlrr)iqk5XTDrr2oqrquclrqQKerpp'XrpKdL
roO.<rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrau.;ra#M,r`&kpr_NMfr_!/]
r^QlUr^?NJX?_>%JNs3#pd4sJr^HfUr^m)^r_<Afr_i_pr`];,ra>_;rbDFNrcJ-crdXp%rf$i=rg`t]
ri#h$rjVm?rl"fYrm1Snrn7;,ro*k<roj@Lrp]pXrqHEfrqcWlrr)iqk5XTDrr2fnrqcWhrqHE`rpg!U
rosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$r_relr_<Aa
r^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdXrd+QnreCE2
rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XTDrr2fnrqcWhrqHE`
rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$r_rel
r_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdXrd+Qn
reCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XTDrr2fnrqcWh
rqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$
r_relr_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdX
rd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XKArr2oq
rqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2
r`];$r_relr_<Aar^m)Yr^HfSqa:?LX?_>%JNs3#qa19Lr^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4G
rbqdXrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFF
ra>_2r`];$r_relr_<Aar^m)Yr^HfSqa:6Ir^!hTJO"rTr]pQO6Ma%J6iKLQ7K,dU8cDB^:&[rf;Z9\q
>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==LAl]%
H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@K6N09V5_21T5lO%M6:1N8r^6ZQr^HfUr^m)^
r_<Afr_i_qr`];,ra>_<rbMLOrcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fYrm1Snrn7;,ro3q>rosFM
rp]pYrqHEfrqcWmrr1sXj8],Xrr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^
rfR2=reCE%rd"KbrbqdNrb)4<ra#M,r`/qrr_NMfr_!/]r^QlUr^?WNqa19JZ9Wt+L-Y`(!CB-L6N0@O
7/fXS7fH!Y9E%Zb:]=8k<W62$?2e72BDu]GDuOkXHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#
h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL
\,NZ3W;`OjSGnZMN;eS2J,X`mFT-4XCAqlF@/aI2>5hP$;uTSl:&[ca8cD3Y7K,^P6hNdR5_21W5l!bC
6N0@O7/fXS7fH!Y9E%Zb:]=8k<W62$?2e72BDu]GDuOkXHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`d
eGe/#h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c
`;[IL\,NZ3WW&XkSGn]NNW+_4J,X`mFT-4XCAqlF@/aI2>5hP$;uTSl:&[ca8cD3Y7K,^P6hNeC6+]C5
5`@u-62<kD6N0@O7/fXS7fH!Y9E%Zb:]=8k<W62$?2e72BDu]GDuOkXHN&EnL]3;4P5_!NUAh.kZ2V63
^&GtLb5T`deGe/#h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5
f`'D"ci2&c`;[IL\,NZ3WW&XkSGn]NNW+_4J,X`mFT-4XCAqlF@/aI2>5hP$;uTSl:&[ca8cD3Y7K,^P
6h3SC6+]C55`\2062!YA6N0@O7/fXS7fH!Y9E%Zb:]=8k<W62$?2e72BDu]GDuOkXHN&EnL]3;4P5_!N
UAh.kZ2V63^&GtLb5T`deGe/#h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tU
l2KiEir7g6gA]Y%ci2&c`;[IL\,N]4WW&XkSGn]NNW+_4JGsopFoH@ZC]7uG@K'U4>Q.Y%;uTSl:&[ca
8cD3Y7K,^P6gR.R5_21`5k%,:6N0@O7/fXS7fH!Y9E%Zb:]=8k<W65%?N+C4BDu]GE;k"ZHN&HoL]3;4
P5_!NUAh.kZMqB5^&GtLb5T`dec+8$hYuO6k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`
nc%tUlMfuGj8Rp7gA]Y%ci2)d`W!RM\,N]4WW&XkSGn]NNW+b5JGsopFoH@ZC]7uG@K'U4>Q.Y%;uTSl
:&[ca8cD3Y7K,^P6gR/76,u6A5at%661@5;6N0@O7/fXS7fH!Y9E%Zb:]=8k<W65%?N+C4BDu]GE;k"Z
HiAQpM#ND5P5_!NUAh.kZMqB5^&H"Mb5T`dec+8$hYuR7kPjcGmf)_ToD\L`q>U6irVlfVs5X.Yrr2lq
qYp9hp\sd`nc&"VlMfuGj8Rp7gA]Y%ci2)d`W!UN\Gif5WrAdmSc4iPNrFn7JGsopGQ)R\C]7uG@K'U4
>Q.Y%;uTVm:B!oc8cD3Y7K,^P6fUMR5_21i5j(K16N0@O7/fXS7fH!Y9E%]c;#XDm<W65%?N+C4BDu`H
E;k(\I/\ZqM>iP7PQ%-PU].:mZMqB5^Ac+Nb5T`dec+8$hYuR7kPjcGn,DkVoD\L`q>U6irVlfVs5X.Y
rr2lqqYp9hp\sganc&"VlMfuGj8Rs8gA]Y%d/M5f`W!XO\c/r7X8\poT)OrQO8b%9Jc:)sGQ)R\D#S,I
@K'U4>Q.\&;uTVm:B!oc8cD6Z7fGjR6d\6R5_22&5h/3t6N0@O7K,dU8,c*Z9E%]c;#XGn<rQ>&?N+C4
B`;fHE;k(\I/\]rMZ/Y8PQ%0QV#IFoZi7N7^])4Ob5Tceec+;%hu;[8kPjcGn,DnWo`"Uaq>U6irVlfV
s5X.Yrr2lqqYp9hp\sganc&"VlMfuGj8Rs8gA]\&d/M5f`r<aP\c/r7X8\poT)OuRO8b%9K)U2tGlD[]
D#S/J@fBa6>lIe'<;obo:]=&e9)_B\8,c!W7/fR$6J4YU6*3H'6N'7M6iKLQ7fGpW8H)6\9`@ie;>sPo
<rQA'?iFO6C&VuKE;k+]IK"itMZ/\9Pl@9RV#IFoZi7N7^])7Pbl5ugf)FD&hu;[8kPjcGn,DnWo`"Ua
q>U6irVlfVs5X.Yrr2lqqYp9hp\sgao)A+Wm/H5JjSn*:g]#h(d/M8gaSs!S])K)9XT#*rTDk/UOT(1;
K)U2tH2_g_DZ4DMA,]m8?2dq)<W5nq;#X2g9E%K]8,c!W7-m:Q6@hI^6M<eF6i0:N7fGpW8H)9]:B")h
;Z9Yp=8lM)@/a[8CAr)LEW17_If=ruMuJh;QN!NUV>dRq[/R]:_#DFSbl5ugfDaP(i;Vg:kl0rJn,DnW
o`"Uaq>U6irVlfVs5X.Yrr2lqqu6Ejp\sganc&"Vli-,IjSn*:h#>t*d/M8ga8WmR]Df5;Y5Y?uTDk2V
OoC@>K`6K#HiA*cE;j\QAH$$:?N++,=8l.t;#X5h9`@W_8H)-Y7fGjL7(#C56]"2+7/]OQ7K,dU8,c'Y
8cDE_:&[ug;uThs=oMb,@K'g:D#SAPF8gOcJGt6$NW,+?Qi<WVVZ*at[Jmc:_#DCRbl5ugf`'Y)i;Vg:
kl0oIn,DnWo`"Uaq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A+Wm/H8Kk5O<<h#>t*dJhDiao9*T]Df8<
YPtL"U&LGYPQ$UAL&QZ&I/\6eE;j_RAc?0<?iF7.=8l5!;>sAj:&[fb9)_B\8,buW7=dmY7K#[S7fGpW
8H)3[9E%Zb:]=5j<W6,">5hn.@fBs<D>nPSFT-[eJGt9%NrG4@R/WfYW;a""[f3r=_#DITc2Q,if`'\*
i;Vm<kl0rJn,DnWo`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.Xm/H8Kk5O<<h#?"+df.Pkb5T6V
^&GM?Yl:X$UAgV\Q2ZjDL]2o)If=KhErL"VBDuH@@/aF1=oMM%;Z9Pm:]=)f9)_E]8H),Y7Y+$[7f>gU
8,c'Y8cDB^:&[rf;>sJm=8lA%>lJ.1AH$6@DuOeVFoHjhK)UQ)O8bCCRf9&\WW'.$\,O&>_>_UVcMl8k
g&Bh,i;Vm<kl0rJnG`%Yo`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9scoD\7YmJcALkPjH>hYu7.e,I\m
bPoEY^](eCYl:[%V#HqaQN!!FMZ/;.J,X]lFT-4XC]7uGA,]j7>lIq+<W5qo;#X5h9`@ZK8\R`H8<QO5
8c;6X9)_N`:&@cd;uTer>5he+?iFR7BDu]GDuOkXGlE3lK`6l.OT(UGSc5GaWrB7%\c0>B_u@jYci2Dm
gA]q-iVr$>lMg2MnG`%Yp&=acq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9scoD\7YmJcDMkl0T@hYu:/eGdho
bl5Q[^](kEZ2Uj(VZ*1dR/W9JN;eS2JGsloG5cO]D#S,IAc?*:?2e(-=8l5!;uTYn;#X5h9^,3a8qBTt
9(5LP9D_E^:B"&g;>sMn<W6)!>Q.t.@/aa:B`;iIErL7]HN&HoLAm/2P5^jJT)PVdXT#L(]DfVF`;\![
d/MPog]$+0ir80@lMg2MnG`%Yp&=acq>U9jrVlfVs5X.Yrr2lqqu6Hkq>U'doD\7Ymf)POkl0T@hu;F1
ec*tqc2P]]_>_+HZi7-,VuE@gRf8QNNrFk6K)U/sGlDd`DuOMNBDuB>@/aL3=oMM%<W5nq;>sAj;#X8i
:@_,k9S#lr9_M0\:&@]b;#X8i;>sJm<W6)!=oMb,@/aX7BDu]GDuOhWGQ*!hK)UT*NrG:BRf8uZVuEgt
Zi7W:_#D=Pc2Q,iec+A'hu;X7kl0lHmf)_ToD\F^q>U6iqu6Qnro=%=s8N#srVl`oqYp<ipAX^`nc&"V
li-/Jj8S!9h>Z")df.Sla8X!U^](Y?Yl:^&T`1J\Qi<*GMuJJ1JGsrqGlD^^DuOSPB)Z<>?iFC2>Q.e)
=8l8"<;TPl:]=1o:Ou;o:B=9g!)WYjr_WSkr`&ksr`B)%r`fA.ra5Y7rau.Grbh^TrcnEhrdb!&repc;
rg3VSrh07krilC0rkJHMrl>#armUktrn[S3ro="Brp9XQrpg![rq??erql]mrr)iqj8\0>rr2oqrqucm
rqcWfrq-3[rpTjQrp'LDro*k5rn%/!rm1Scrl"fNrj_s5riQ0prh'1YrfR2>re^W+rdOimrcJ-Zrbh^K
rau.?ra>_3r`oG*r`K/#pf+=mJPq%s!)iSkr`9#"r`T5*ra,S3rac"?rb2:Krc.pZrd+Qmrdt-+rf-o>
rgNhXrhKIprj)O5rkJHNrlP/crmUkurndY5roF(Drp9XQrpg![rq??frql]mrr)iqj8\0>rr2oqrqucm
rqcWgrq69]rp]pSrp'LEro="8rn7;#rm:Yerl+lPrji$7ric<trh9=^rfd>Crf$i0rdk&trc\9^rbqdQ
rb;@DraPk7ra5Y0r`];(qcEbtnl<;$JQ.S-p/M)mqc<\tr`T5)r`oG0raGe8rau.Drb_XQrcA'^rdOit
re190rf@&Brgj%^rh]Utrj;[8rkSNPrlY5ermh#$rnm_7roO.Erp9XRrpp']rqHEgrql]mrr)iqj8\';
rr2oprql]krqHEcrq$-YrpB^NroX4>rnm_/rmq(srltG`rkn`KrjMg1ri5snrh'1Wrfd>Bre^W.rdXop
rcnEarc%jSrbVRHral(=ra>_4ra,S0r`o5&oif(4JQ\.=nlc&u>Q%e*>lJ%.?N+=2@/a[8Ac??AD#S;N
E;jtYGlE*iJ,Y-#M>iS8Pl@'LTDkYcWrB7%\,O)?_u@aVc2Q/jfDaM'hu;[8k5O]GmJcVSoD\F^p\t$g
qu6Njro=%:s8N#sr;QTmqYp6gpAX^`nG_kTm/H2IjSn*:h#>t*eGdbmb5TBZ^Ab\BZi7'*VuEChS,S`Q
OoC@>M#N&+J,XfoGlDd`EW0nUCAqoGBDuH@@fBg8@/aO1?LhC9>_-.C>kMD#?N"40?iFI4@K'd9AH$6@
C&VlHDuObUF8gF`HiANoKDp]+NW,(>QN!BQU&LqgXT#R*\Gj5A`W"!YcMl>mf`'\*i;Vg:kPjiImf)_T
o`"O_p\t$gqu6Njro=%:s8N#srVl`oqYp6gpAX^`nc&"Vm/H5Jjo46<h>Z+,f)F%qbl5]__#CtF[JmB/
WW&[lTDk8XPl?dDMuJM2Jc:/uI/\<gFT-:ZDuOSPC]7uGB)Z??A,]s4@Bs9l@"Vhf@:B+CraPk:rac">
rb)4Grb_XQrc.pZrc\9grdOitreLK2rfI,DrgNhYrhKIlric=/rk&0FrlG)_rm:Yqrn7;,ro*k<roj@J
rpKdUrq-3_rqHEgrql]nqu5XUi;`fUrr)iorql]irq??arpp'XrpKdMroa:@ro!e2rn7:urm(MdrkeZK
rjr*6riZ7#rh9=_rgWnNrfI,=reLK+rdXoqrd+QgrcA'YrbqdRrbVRLrbDFHrb1k8rarlUJRt!Uqe#P7
!,):Erb;@HrbMLMrbh^Rrc.pYrcnEgrdFcqre(3*rf-o=rfd>Nrgs+_ri5t"riuI6rkABKrlb;drmC_u
rnRM2ro="?rosFMrp]pXrq69brqQKirqucoqu5XUi;`fUrr)iorql]irqHEcrpp'XrpKdNroa:Bro!e3
rn@A#rm:Yhrl+lQrk/6;rilC'rhTOergs+UrfmDDrf$i4re:?%rdFcmrce?brcJ-Zrc%jTqec=KokXPA
]4lh1O(nT.p1jYDqeZ7KrbqdTrc.pZrcS3ard4Wnrdb!%reUQ4rfI,Drg3VUrh9=eriH+'rj;[;rkSNP
rltGhrmUl#rn[S3roO.Crp'LNrp]pXrq??crqQKirqucoqu5XUi;`fUrr)iorql]jrqQKerq$-[rpTjQ
rosFEro*k5rnIG&rmLelrl>#VrkJHBrj;[.ri#glrh07\rg<\KrfI,<re^W-rdt-!rdFclrd"KcrcJ-[
qf2LPol%H[JSpEaqeuCOqJcFRrc8!ZrcS3crd4WmrdXp!re19-rf$i<rfd>Jrg`t\rhTOlric=-rj_sB
rkn`Urm1Slrmh#&rndY5roX4Drp9XQrpg!ZrqHEerqZQjrqucoqu5XUh>dBNrquclrqQKerq-3\rpTjS
rp0RIro=":rndY,rm^qorlkA^rkeZJrj_s6ric=$rhoagrgj%XrfmDErf@&:re^W/rdt-"rdXoqrd=]l
qg&0crc\0][<-tAM0/`>r,r'`qfr*crd4WlrdFcqrdk'#reCE.repc:rf[8FrgWnYrh07gri?%%rj2U6
rk8<Jrl>#^rm:Yprn.5,ro!e9roj@HrpKdSrpp'\rqHEfrqcNirr([Qh>dKRrr)iorqcWirqQKbrq$-Z
rpTjProsFDro3q7rn@A'rmUkmrlY5ZrkSNGrj_s4riZ7$rhTOerh'1Xrg3VJrfI,=repc3reCE*rdt-#
rdXorrdFcnqg5VpJU2rp!IK.nHi&3iIf=irJc:9#K`6`*M#N>3NW,%=PQ$mIRJriXUAgtfX8]:$Z2V94
]DfVF`W"$Zci2DmfDaM'hu;X7jo4NDm/HJQnc&.Zo`"Xbq>U6ir;QZorn[V1s8N#prVlZmq>U0gp&=U_
nc&%WmJcGNk5OE?i;VR3g&BS%d/M8gao90V^](nF[/R?0YPtI!V>d1fTDk>ZRJrELP5^OANrFt9M>i8/
L&Qc&Jbsu$It<*(J,FinJGt-!K`6])LAm&/MuJb9O8b:@PQ%!LSGo/[U&LkeVuEn!ZMq61]`,\F_Z%[V
c2Q)hf)FA%h>Z@3jSn<@li-;NnG_tWoD\F^q#:*gqYpHjrn[V1s8N#prVl]nqYp<ip\smco`"@Zmf)VQ
kl0`Dj8S!9h>Z.-eGdkpcMkoa`;[ON]`,G?Zi73.Xo>@"U]-tdTDkA[RJrQPPl?jCOT(:>NVeY5MZ/G/
LUDkfL5CZaL\ur.M#3)/MuJ_8Nr+q;PQ$gGQi<HQSGo/[U&LhdWrB+!Yl;!.\,O&>^])1NaSsKadJhYp
gA]n,i;Vd9k5OTDmJcSRnG`(Zp&=^bq>U6iqu6Qkrn[V1s8N#prVl`oqu6Hkq#:!do`"F\nG_kTl2KoG
k5O?=hu;F1f)F.tci2/faSs-W_#D"G\c/r7Z2Up*W;`[nV#I%dT)P8ZRf8]RQN!-JPQ$aEOT(=<Nr+gD
N.HqEN;eh7Nr>";O8b7?P5^[EPl@!JR/WQRSGo,ZT`1bdVZ*OnY5Y[)Zi7N7]`,_G`;[jWbl5rfe,Iqt
h#?10iVr!=kPj`Fmf)_To)A:\pAXjdqYpBkr;QZlrn[V1s8N#prVl`oqu6Hkq#:!dp&=O]nc&"Vm/H;L
kl0WAiVqa6g&BS%df.Vmbl5]__Z%=L^&GM?[JmH1YPtX&WrAgnUALV_T)P8ZRf8]RQi<9LPk^IAP5(0R
OF`LVOSFt8Oo^c1rKI5Frg!JLrgEbSrg`tYqk3q`rhTOnriH+&riuI0rjVm?rkSNMrlG)^rm:Ymrmq)%
rnm_6ro="ArosFKrpTjVrpp']rqHEerqcWkrqucoqu5FOgAh0Oqu-Nlrql]jrqQKerq-3\qsXONrp0RG
ro="9rndY/rn.4urm:YirlG)XrkeZMrk8<BrjDa3rilC*riH+!rhf[krhTOfrh9=`rh07_rgs"XnsmOc
JX`$rm$n*ISH,5XT)PD^TDkP`UAgtfV>d@kWrB+!YPtd*Zi7B3])KAA_#D4M`r='YcMl2idf.nugA]t.
i;Vg:k5O]GmJHAOo)A:\p\sseq>U9jr;6Hlrn@D(s8N#prVl`oqYp<iq#9sco`"C[nG_kTm/H5Jk5OH@
i;VR3gA]\&e,I_nc2Piaa8X!U_>_1J])K5=\,N`5Z2Us+Xo>F$X8]*tW;`^lV>d:fU].!qTn/noU&1Pb
US@gaqkX4frhoaori,mtriH+$ric=+rj2U5rji$>rkABIrkn`UrlY5brm:Yormq)&rn[S3roF(@roj@J
rpB^Srpg!Zrq69crqZQiqu$Hlqu5=LfDkjLqu-NlrqcWirqQKdrq-3]rpg!WrpKdNroj@Dro3q8rndY-
rn%/!rm:YirlkA^rl+lSrkSNIrk8<ArjVm7rj)O.ric=*riZ7&poFCoql.!%JZ+F(ri,gq!35gpriQ1&
rilC*riuI.rjDa7rji$ArkJHJrkn`Srl>#^rm(Mirm^qurn7;-ro!e8roX4Drp'LNrpTjVrq$-^rq??d
rqZQiqu$Hlqu5=LfDkjLq#13hrqcWirqHEcrq69]rp]pUrpB^NrosFEro="9rnm_1rn@A&rmUknrm1Sf
rlb;\rl"fRrkSNJrkABErjr*>rjVm8rjDa4qm6('pp%Q;JZt<App'Y#!4)U1qm?@1rjMg8rji$?rk/6E
rkJHJrkn`Srl4r\rltGgrm:Yormq)&rnRM1ro!e:roX4Erp0RNrpTjVrpp']rq??crqZQirqlKhqu5=L
fDkaIqu-Nlrql]krqQKerq??_rposUrpB^Nroj@DroF(:rndY0rn7;&rmh"qrm:Yirlb;`rlG)Xrl"fQ
rkSNJrkABErk&'=rjh^3o!cQGJ[UiPosab,rODj;qmud=rk/6ErkJHJrkeZPrl+lXrlP/_rm(MhrmC_q
rn%/&rnRM0ro!e:roX4Drp0RNqsaUUrq$-_rqHEerqcWkrqucop&<\FeGoOIqu-Nlrql]krqZQgrqHEa
rq$-[rp]pUrpKdNroj@Dro3q9rnm_3rnIG)rmh"sqp>>frltGbrlG)Zrl+lTrknWLqnW3Grk@X1`4UZ6
Q+ZLt!58BGrkJ6Drk\TOrl"fTrl>#[rlY5brm(DfrmUksrn.5(rndY3ro*k9roX4Drp'LNrpTjUrpp'[
rq-3arqQKgrqcWkrqucoqu5+FeGoOIq#13irql]krqZQgrqHEcrq-3\rp]pUrpB^Orp'LGroO.>ro!e5
rndY/rn@A(rmh"trmC_lqp58drlkAbrlY5]prEBRqo.:-fu&BYXi&c/!QE"X`V[[Pa8X3[b5TT`bl5la
ci2;jdJhVoec+5#g&Bb*hYuF3i;Vd9jo4HBlMg,KmJcSRnc&+Yo`"O_p\sseq>U6iqu6NjrVQTDs4%)D
rqlZnr;QQiq>U0gpAXaaoD\=XnG_kTm/H8Kkl0`DjSn09hu;F1g]#n*f`'M%eGI_odJhMlci25hc25`^
bOs$9ak=adaK<PDan*XTb5TTZbl5ldcMl/hd/MGle,.YofDaG%g&Bb*h>?+/ir8$<k5OQCl2L&KmJHDP
o)A7[p&=^bq#:*dqYU3irV6BAs3CZDrqlZnr;6BjqYp9ep\sgaoD\=[nc&%Wn,DYPlMg#Hk5OH@j87g7
hu;L3h#?(-f`'M%f)F1re,IepdJ2)fci2;acb%JRcA^'DcN2D>!7:_kpsB#frmLepqpbVrrn%/%rnIG-
rndY3ro!e7ro=">roX4DrosFJrpTjUrpg!Yrq$-]rqH<bqtg<hqu$Hlqu5"CcN!e@qu-NlqtpBhrqZQg
rqHEcrq69^rpp'Wrp]pTrpB^Nrp'LHroX4@ro=":ro!\2rndP-rnIG+qq:u$rn%/#p!rEYb0tpjU!r8U
q:5Gormq)#qq1o$rn@A+qqV2,qqqD2ro*k:roO.Aroj@Grp0RNrpKdTrpTjVrq$-^rq??crqQKgrqcWk
qu$Hlp&<A=cN!e@qu-<frqcNfrqQKerq??arq-3]rpg!WrpTjRrp9XLroj@EroX4AroF(=ro3q8qqqD0
rn[S/ptPf%h:^'*J_6RHjOsLbrn@8(qqV2,rndP0ro*k9ro="=roO.Aroa:Erp'LKrpB^Rrp]pWrq$-]
rq69arqHEerqZHfq#(-ip&<A=bQ%S@p&4mfqtpBhrqZQgrqHEcrq69_rpp'YqsaURrpKdOrp'LIroj@E
roX4AroF(=ro3h6qr%J2ro!e5qqeO4J_c(:r8.;,ro!e5qr%J4qr7V8roF(?roX4Croj@Grp'LKqsO@N
qssaYrq69arqHEerqZHfrqlTjqu-EkbQ#Q]rr2]krquZjrqcNfrqQBbqt9s\qsj[Srp]pUrpKdPqs47H
ros=DqrdY5qr@A/\D`"tO5]]i!94"<o&Tf5puq_Arp'LKqs=4Jrp]pUrp]pWqt0m\rqH<brqZHfrqlTj
q#1*haT'6Zqu6Kkq#($drqcNfrqQKdqt9aUrpg!WrpTjSqsFCLqs4%Bp#u;9p#`dGJ`VsSoB$&8ro`k9
q!.kEqs==LqsOIPrp]pWq"+LXqtBp^rqZHfrqlKgrr)NhaT'-Wrr2KerquZjrqcNfq"O[Yrq-3]rpojS
rpTjUqsXOPqsFCLqs4%Bq!#3MJ`qsSq<7nDq!.kEqs==LqsO@Mrp]pUrp]gTrpp'[qt0m\q"Od`qtg<h
qu$-cqu4J4]`7m.p&4mfqtp9eqt^6dqtL*`qt9s\qt'gXqsjRQrpTjUp$\mJJaS*WqX4.Irp]pUqsaUT
qssaXqt0m\qtC$`qtU0dp%n[bqu$?ip&;`+]`7R%rr)`lp&"abq"a^Zo(E"Sq"+1LrpcuWJae6[rUBgV
p%%nLqt0RSq"ORZqtg3eq#(-in,C*%ZiBq%p&4dcqtp0bqt^6dq"ORWqt9OPo(09[Jb"Zgq=FRVm.C;M
q"FLWqtU0dq"k!ep&+^cp&;E"WrMtqo)8@]qtp'_q"a^[h=nYWJbG9#nFuAFq"XX[o(r@_q#'g`p&;)n
WrMGbp&+1Rrqb.?^A*9SP5+PBjn\fMo)&"Ul2IgbU&Xfbn,;qWp%t*PJbjrokkb2Ro).tTo)>HbO8neM
dJ^BKJc(/u!WDuMrTsNHs,[3!ric9OrJ(:Krl"f!s+146s-iq<rdk(:rdk+5s+13$s+13$s+14#s+13$
s+13$s+14#s+13$s+13$s+14#s+13$s+13$s+14#s+13$s+13$s+14#s+13$s+13$s+14#s+13$s+13$
s+14#s+13$s+13$s+14#s+13$s+13$s+14#s*t
~> %APLeod
EI
76 0 0 76 202 334 cm
BI
/Width 228
/Height 228
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$
JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#O8je1oDX=?Jc<pnM>s:Ln,@n:
oDO7=Jc3jln,AgVXoJ(ncMa"*Jc()slho0/o)>Zh]`7d+n,;qWp%s=:q>,[=Jbmaiqtos^n,<%\[f=#?
n,;qWp&"O\rqV-?r:kj<Jb[gkqt^$`o)&=^n,9]p`W,`4o)8I`qtos\rqZ6^j7f,<JbFZgo_.5;qtU'a
p%n@YrquHfq#8&.cN!\=o)8I`rqlKerqZQgp%SIZq"==Po(/4=Jb"B_nacAEo(;_MqtBp]qtU'aq"jmb
rquHfq#8A7cN!e@p&4mfp&"aaq"Xj_p%J:Tqt'URn*ub6Jae6[naQ#;q""FUp%7qNrqH<bqt^-dqu$$`
rr1"=dJs"@q#1*frqlKeqtU'_qt9jYrq$-[qsjRQo'_V,JaS*WkjJ-4p$htNrpp'[q"4RYp%SI\q"jmb
rquQiq#8S=fDkXFq#13irqlKerqZQgqtL!\rq-3]rpp'Yrp]ULrpK[Nqs==Jq!.Y=S`kXgJ`uaiq!%S=
qs47JrpBUNqsXFOqsj[Vrq$-]rq6'\rqQKgqtg<hrquQiq#8\@fDkaIp&4mfrql]kqt^6drqH<`rq-3]
rpp'XqsXFMqs=4Gq!%eAp#l,4S`PFaJ`ZOcpu_J:qrmh>p$;VDrpKdSqsaUUrq$-]q"F^]rqQKgqtg<h
rquHfrr1=FfDkaIq#13irqlThrqQBbqt9s\rpp'YqsaURrpB^Oqs4.Dqrn%BroWn7ro<e5S`,.YJ`67[
pu;22qrIY:qrdtBrosFJqs=4IqsXORrpg!Zrq-3_rqH<bq"k!erquQirr1=FgAh0Oq#13irql]kqt^-a
rqH<^rq$-Zrp]pUrpKdPrp0RJroj@EroO.?qr@S5o&0N)rna!tJ_bn5n_O*!qqq))ro3q;qrIb<roX4D
qs"+GrpB^Rrp]gTqt'gZqtL*brqZQirql]mq#1*hfDjS)rr2]krqucmrqcWirqQKerq??arq$$Xrp]pU
rpB^NrosFGroa:BroF(=qr.G1rnm_2ptYl'qqCr#S_/MGJ_9VIrn7)#rnI>*qq_/,ro!e7ro="=roO.B
roj@Grp0RMrpKdSrp]pXrq$-]rq??crqQKgqtg<hrquZlqu54IgAh0Oqu-Eirql]krqQKerq??`rq$-[
rp]pUrpKdPrp0RJroj@EroF(<ro!S/rn[S/rnIG+qq:l!rn$qqqp_CiJ^]2!!7UVjpso8nrn.5'rn@A+
rnRD,qqqD2ro*k:roF(Aroj@Hrp9XPrpTjUrpp'[rq-3`rqHEeqtg3erqucoqu54Ii;`]Rqu-NlrqlTh
qtU0brq-3]rposUrpKdOroj@EroO.>ro3q8rnm_3rnRM,rn.5$rmh"trmUbmqp=o[T[&,6J^4,;p!<<X
rmLeprm^qtrmq)#rn7;*rnRM0rnm_5ro3q<roX4Drp0RMqsXORrpp'[rq-*^rqQKhrql]mq#13kgAg+2
qu6KkrqucmrqZQgrqHEcrq69^rpg!WrpTjQrp0RKroa:Bro="9rnm_2rnIG+rn.5%rmh"sqpPJjrm1Sh
qoo&_rlUSLJ]WJbn]CdQrlb)\rm(Mhrm:YmrmUkrrmq)#rn.5(rnRM/rnm_7roF(@rosFJrp9XQrp]pW
rq$-]rq??crqQKgrql]mq#13kgAg+2qu6TnrqucmrqcWirqQKerq69_rpp'XrpTjSrp9XMroj@Cro3q7
rn[S/rn@A(rmq(trmC_lrm1JerlkAbrlY5^rlG)Zrl+6BXM]V,J\qK*o#1FErl>#ZrlP/^rlb;brm(Mh
rm:YlrmUkrrn%/&rnIG.rnm_6roF(Aroj@IrpB^QrpTjVrq$-^rqHEerqZQirql]mqu-NngAg+2qu6Tn
rqucmrqcWhrqHEbrq-3]rpg!WrpKdOroj@EroF(;rnm_2rn7;&rm^qqrm:YjrlkAbrlP/[rl4rUrkn`P
qnW*Do"Cp5J\6QHrOhg:rkJ-ArkeZPrl"fUrlG)]rlkAfrm:YlrmUksrn.5*rndY4ro="=roa:Grp9XQ
rp]pWrq$-]rq69brqZQirql]mrr)iqgAg+2q#13irql]jrqQKerq69^rpp'XrpB^Nrp'LGroO.<rndY0
rn7;%rm^qprm1SgrlY5]rl>#Vrkn`OrkJHGrk/$<rji$<qmW6,J[U-<qR61.rj_s<qn)j?rk8<GrkSNM
rkn`SrlG)]rlb;drm:Ymrmh##rn@A-ro!e8roX4Erp0RMrpTjUrpp'\rq69brqQKgrql]mqu,7Kj8],X
qu-Nlrql]krqZQgrqHEarpg!VrpKdPrp0RIroO.=rnm_1rn@A&rmLemrm(MerlY5[rl"fQrkJHHrk8<C
rji$<rjMg6rj;[2qm-4+TWj!OJ[#!Tqm$.+rj2U2rjDa6rjVm;rk&0BrkABHrkSNNrl+lWrlb;crm1Sk
rmh#"rnIG/ro*k;roa:Erp0RNrpTjUrq$-]rqHEerqZQirql]mrr)`ni;_j;rr2fnrqucmrqZQfrq69_
rpp'XrpKdOroj@EroF(;rndY/rn%/"rm:YirlkA_rl+lSrkSNIrk/6@rjMg5rj)O-ric=(riQ1$ri>pr
SZ%+<JZ/4>ri5suriH+$riZ7(rilC-rj2U3rj_s=rk8<GrkSNNrl4rZrltGgrmC_rrn@A-ro!e9roO.C
rp0RNrp]pXrq$-^rqHEerqcWkrqucoqu5ORj8],Xrr)iorql]jrqQKerq69_rpg!VrpB^Mroa:Bro3q7
rn[S,rmh"rrltGarl>#Vrk\TJrk&0>rjMg4rilC*riH+"ri5srrhoamqkX4dpnFXZJY@XgrLs"\qkO.d
rhf[mri#grri?%#rilC.rj;[6rjr*ArkJHLrl+lXrlkAermUkurn@A.ro*k:roX4Erp0ROrp]pXrq69b
rqQKgrql]mrr)`ni;_j;rr2oqrqucmrqZQgrqHEarq$-YrpKdProsFEro="8rnRM,rmq(rrm(Mdrl+lR
rkJHFrjr*:rj2U/riZ7%ri5sprhTOgrh9=aqk*bVqjaFNJX_4[!1WYOrgj%\qk3h[rhKIhrhoarriQ1'
rj)O1rjMg<rkABJrl"fYrltGhrmh##rnRM1ro*k<roj@HrpB^Rrpg![rqHEerqZQjrqucoqu5ORj8],X
rr)iorqcWhrqHEcrq$-[rp]pSrp'LGro=":rndY-rmq(srm(Mdrl+lQrkABCrjDa3rilC(ri5sprhKIe
rh07^rg`tVrg<\Oqiq)Drf[/@VN?@jJWThlrfR)@qih#Drg3VPrgWnXrh'1_rhBCgrhoarriZ7*rj;[8
rk/6Grl"fVrltGirm^r"rn[S2ro3q>roj@IrpKdTrpp']rqHEerqcWkrr)`ni;_j;qu-NlrqcWhrqHEb
rpp'XrpTjProsFEro*k6rnRM*rmh"prlkA_rkn`Krjr*;riuI*ri?$rrh]Ugrh'1\rgWnSrg3VLrf[8B
plGE6rf!V1JW#);!/p`5qi1K6rfI,ArfmDIrg3VQrg`tZrh9=drhf[priQ1(rjDa8rk/6Irl+lZrm(Mj
rmq)&rn[S3roO.Brp'LNrp]pWrq-3_rqHEfrqlKhi;_j;rr)iorql]krqQKerq-3\rp]pTrp'LHroO.<
rndY.rmh"rrm(Mbrl+lOrjr*<rj)O+ri?$rrhKIdrgs+YrgEbNrfd>Drf@&<rf$i7reg]3reI/$JVJ`1
qM,!)reUQ2repc7rf-o<rfI,BrfmDJrgNhWrh'1arhf[oriQ1)rj;[8rkABKrlG)`rm:Yorn7;*rnm_8
roX4ErpB^Rrpg!Zrq-3arqZQjrquZli;_j;rr)iorql]krqQKerq-3[rpTjQrosFEro3q6rnIG(rmLel
rlb;[rkeZIrjMg3riZ7"rhf[grgs+Yrg*PIrfR2@rf$i7reUQ-re(3%qgnWpUORiEJUdEDrdb!!rdt-%
re19+reUQ3rf6u>rf[8Grg<\Urh07brhoasric=-rji$Arkn`WrltGirmq)%rn[S4roF(Brp0RNrp]pY
rq-3arqZQjrquZli;_j;rr)iorql]jrqQKdrq$-YrpKdOroj@Dro*k4rn@A&rmC_jrlP/WrkJHCrj2U-
ri5sorhBC`rgEbOrfd>Brf-o7reLK,re(3#rdXorrdFcnrd1;`JU)flqK`'erd=]nrdOirrdb!#re19*
re^W4rf6u@rg!JMrgj%]rhTOmriH+(rjVm=rk\TSrlb;frmh##rnRM2ro3q?rp'LLrpTjWrq-3arqQKh
rquZli;_j;rr)iorql]jrqHEbrq$-YrpKdOroa:Arnm_1rn@A$rm:Ygrl>#Srk8<>riuI)rhoahrgs+Y
rg!JGrf@&:re^W/rdt-"rdXoprd4WjrcnEdrcOlUJTQHbqK2^Zrc\9crd+Qjrd=]prdb!!re:?,reg]8
rfR2ErgNhWrh07fri,n#rj;[7rkJHOrlP/brmLerrnIG/ro*k=rp'LLrpTjWrq-3`rqQKhrquZli;_j;
rr)iorql]jrqHEbrpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0
re(3#rdFcmrcnEcrcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_
rh]UorilC0rk/6Irl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQe
rq-3[rpKdProsFDro3q6rn7;%rmC_hrlG)Urk/6?rilC%rhf[grgWnRrfd>Arepc2rdt-"rd=]jrce?`
rcA'Yrbh^PrbVRLTPB$mJSP$rrbMLLrb_XPrbqdVrcA']rcnEhrdFcsreCE/rf-o?rg!JNrh'1bri#h!
rj)O7rkSNOrlY5drmUl!rn[S3roF(Brp'LMrp]pXrq69crqZQjrqucoi;_j;rr)iorql]irq??`rpg!U
rp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFckrcS3]rc%jTrb_XM
rbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VSrh07friH+(rj_sA
rkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKcrq$-ZrpB^Nroj@B
ro*k3rn%.urm1Sbrl"fNrjVm4ri?$orh07Zrg!JFrepc0rdt-!rd"KdrcA'XrbqdPrb;@Eral(>raYq9
TO<=YJRJ=^qdKJ6rac"?rb2:Hrb_XRrcA']rcnEkrdk'%reg]7rfd>Krg`t^ri,n"rjDa=rk\TRrltGi
rmh#%rn[S5roX4Erp9XRrpp'\rqHEerql]mrr(dTj8],WrquclrqHEarq$-ZrpB^Mroa:?rnm_0rmh"r
rltG_rkn`KrjMg2ri,mkrgs+Vrfd>BreUQ,rdauprc\9_rc.pTrbVRJrau.?raPk7ra5Y2qd$((JR!b2
rET>-ra,S2ra>_7raYq=rb2:Grb_XRrc8!\rd+Qlrdt-(reg];rg*PPrh07griH++rk&0Erl+l[rm1Sn
rn@A-ro*k=roj@IrpTjWrq-3arqQKirqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLei
rl4rSrk/6<ric=!rh9=^rg*PFrf$i3rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qS
r`];*r`oG.ra5Y4raGe;rb)4Frb_XQrc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!
rnRM2roO.Brp0RPrpp'\rqHEerql]mrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5Y
rkSNDrj)O*rh]UcrgEbLrf$i4re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`br
r`9#"r`K/'r`fA/ra>_7ral(CrbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(
ro!e:roX4GrpKdUrq-3arqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjQrp'LEro*k5rn7;"rm1Scrkn`M
rj_s4riH*prgj%Urf[8<reCE'rd=]ircA'VrbVRIral(<ra5Y0r`];&qc<Snr_o[kJPgtqrDEGjr`&kt
r`B)$r`fA.ra>_8rau.Drb_XTrcS3drdXp"reUQ8rfmDNrh9=griZ7.rjr*Frl>#]rmC_srn@A/ro="?
rp0ROrpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$
rhBC]rg*PEre^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&kt
r`T5*ra,S3ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0RO
rpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp0RJroO.;rnRM)rmC_jrlG)Urk8<>riZ7"rh9=Z
rfmDBreLK*rd=]hrcA'Wrb;@DraPk6ra#M+r`9"tr_i_lqbR)`VG)P7JP?#9r_<Afqb[8ir_rerr`K/'
ra,S4rac"Arbh^TrcS3drdOj#rf$i<rg*PTrhTOprj;[8rkSNQrlY5ermq)%rndY7roX4FrpKdTrq$-_
rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjProsFDrnm_0rn%.srltG_rk\TIrjDa.ri,mirg<\Krf$i2
rdk&qrcS3\rb_XJral(:ra#M-r`K/"r_remr_NMgr_3;aUIp)0JP,c2r_*5ar_EGgr_`Yor`B)%r`oG0
raGe<rbMLOrcJ-crdOj"reg]8rg!JRrhBCmrj)O4rkJHOrlP/crmh#$rn[S6roX4FrpKdTrq$-_rqQKh
rqucoi;_j;rr)inrqZQfrq-3\rpKdOrosFCrnm_0rmq(rrltG^rkSNGrj;[,rhoafrg3VIrepc0rdk&p
rcJ-ZrbVRHraYq7r`fA)r`9"sr_`Yjr_3;ar_!&ZVFZ8/JOo`1r^m)]r_*5ar_NMir_i_qr`B)&ra,S4
ral(Drb_XTrcnEire(3,rf6uCrgj%_ri5t&rjMg?rl"fWrm1Snrn.5+ro3q=rp'LMrpTjXrq??drqcWl
rr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Ygrl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`
rbqdNral(<ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@
rbVRRrc\9erdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mmrn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dT
j8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG&rm:Ygrl+lNrji$7ri?$qrgj%SrfR2:rdt,trce?^rbqdM
rac":r`oG*r`9"sr_WShr_*5^r^d#YqaIAMJOG&WrC$WRr^ZrYr^m)^r_3;er_i_pr`B)&ra#M4rb)4G
rc.p\rd+QoreLK2rfd>Mrh07iriuI2rk/6Jrl>#`rmUkurn[S5roO.DrpB^Rrq$-_rqQKhrqucoi;_j;
rr)inrqZQfrq-3\rpKdNroa:@rn[S-rmh"prlkA\rkABBrj2U(rh]Uarg!JEreUQ*rdFchrc.pTrb2:@
ra5Y/r`B)!r_i_kr_<Aar^d#Yr^QlTUI0T"JO9E)qaCEQr^ZrYr_!/_r_EGir_resr`];,raGe<rb;@M
rcJ-ardXp$reg]<rgEbXri#h$rjMg=rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],W
rql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4
r`];%r`&knr_<Abr^m)Zr^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_
rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]j
rqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%
r`&knr_<Abr^m)Zr^QcQr^6ZOWBl)$K0]N)6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>lJ.1B)ZNDDZ4_V
GQ*'jL&Qu/OoCdJT)PYeYPts/]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZQs69R\rr2lq
qu6Ejp\sgao)A(VlMfuGj8Rm6gA]Y%d/M8g`W!UN\c/o6WrAjoSGncPNrFh5JGsrqFoH@ZD#S)H@K'U4
>5hS%;uTSl9`@]a8cD6Z7f,UQ6iKEO5_21Q5QO2<rBgBKr^?`Tr^d#\r_3;er_`Ypr`T5)ra5Y9rb;@L
rcA'_rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr)iqj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_remr_<Abr^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`fA0ral(B
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qrr_WSgr_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/(ra>_:rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tnrql]jrqHEarpp'Vrp'LGro="6rn@A%
rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%r_relr_3;ar^m)Zr^QcQr^6ZO
WBc#"K0TH(6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>Q/"/Ac?ECDZ4_VGQ*'jL&Qu/OoCdJT)PYeYPts/
]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZoro=%Cs82fprVl]nq>U-fo`"F\mf)MNkPjN@
h>Z.-ec*qpbl5T\^Ab\BZMpm'V>d"aPl?^BL]2i'I/\9fE;j\QBDu?=?N+.-<rQ(t;#X2g9E%N^8,c!T
7/fRQ6E*8%6%_H(6:1W;qa:?Nr^QlXr_!/`r_NMjr`/r#r`oG1rau.Drbh^Vrce?jre:?/rfR2Jrgs+e
ric=/rk/6Jrl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucorr1sXj8],Wrql]jrqHEarpp'Vrp'LG
ro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4r`];%r`&knr_<Abr^m)Z
r^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_rdOj#reg];rgEbWrhob!
rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="6
rn@A%rm:Ygrl+lNrji$7ri5sorg`tQrfI,8rdt,trc\9\rbh^KraYq7r`fA'r`/qqr_NMfr_!/\r^ZrW
r^<MKJO=uU!(6WOr^QlWr^d#\r_*5cr_`Ynr`9#%ra#M3rau.DrbqdXrcnElre:?/rf[8Krh'1griuI2
rk/6Jrl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpKdNroa:@rn[S-
rmq(qrlkA\rkABBrj2U(rh]Uarg!JEre^W+rdFcirc.pTrb;@BraGe2r`T5$r_i_lr_EGcr^m)[r^WVM
JOP,YqF1BRr^d#[r_*5ar_NMjr_retr`];,raPk>rbMLPrc\9erdb!'repc=rgEbXri#h$rjMg=rkn`U
rm(Mmrn.5*ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Yg
rl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`rbqdNral(<ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[
qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@rbVRRrc\9erdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mm
rn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp0RJroF(9rnIG'rmC_irl4rQ
rk/6;riQ0trh'1Vrf[8=re:?&rd+Qcrc.pRrb)4?ra5Y/r`T5$r_renr_NMer_*5_qamYUJOk>_rCHoZ
r_!/_r_3;er_WSlr`/r!r`];-raGe;rbDFLrc8!_rd=]tre^W7rg!JRrhBClriuI2rkABMrlG)brm^r"
rn[S5roO.ErpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpKdOrosFCro!e2rmq(rrltG_rkSNG
rjDa.ri,mirgEbMrf$i2rdk&qrcS3\rb_XKrau.<ra#M,r`B(ur_renr_EGeqb6u^VFlD3JP,l5qb-o^
r_<Agr_`Ynr`9##r`fA/raPk>rbMLNrcA'ardOj"reg]8rg*PSrhBCmrj)O4rkABNrlY5ermh##rndY6
roO.ErpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjProsFDro!e2rn%.srm(MarkeZJrjMg/
ri,mjrgEbMrf6u5re(2trce?_rbqdMrau.=ra5Y1r`T5$r`&kpr_WJfqb<q]JP:VgrCm2br_NDfr_i_o
r`/r"r`];-raGe:rb2:Krc.p[rd+Qmre:?1rfI,Frgs+briH++rji$Drl4r[rm:Yqrn7;-ro="?rp'LN
rp]pYrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$rhBC]
rg*PEre^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&ktr`T5*
ra,S3ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0ROrpg![
rqHEerqcWlrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY,rmUkmrlP/WrkJHBrj)O)rhKI`rgEbJ
repc2rdk&rrcnE`rbh^Orb2:BraPk6r`oG,r`K/$r`9"tr_oRiJPq%sqGR;kr`&ktr`B)%r`oG0ra>_8
rau.Drb_XTrcS3drdXp"re^W8rfd>Nrh9=gric=/rjr*Frl>#]rmC_rrn7;.ro="?rp0ROrpg![rqHEe
rqcWlrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5YrkSNDrj)O*rh]UcrgEbLrf$i4
re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`brr`9#"r`K/'r`fA/ra>_7ral(C
rbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(ro!e:roX4GrpKdUrq-3arqQKh
rqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLeirl4rSrk/6<ric=!rh9=^rg*PFrf$i3
rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qSr`];*r`oG.ra5Y4raGe;rb)4Frb_XQ
rc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!rnRM2roO.Brp0RPrpp'\rqHEerql]m
rr(dTj8],WrqucmrqQKcrq$-ZrpB^Mroa:@ro!e1rmh"rrltG_rkn`KrjMg2ri,mlrh'1Wrf[8@re^W-
rdk&rrcnEbrc%jRrbMLHrau.?raPk7ra5Y2qd$((JR!b2rET>-ra,S2ra>_7raYq=rb)4ErbVRPrc.p\
rd+Qlrdt-)repc;rg*PPrh9=hri?%)rjr*Drl+l[rm1Snrn@A-ro3q>rosFKrp]pXrq-3arqQKirquco
i;_j;rr)iorql]irq69^rpg!Trp0RIroF(;rnRM)rmUkmrlG)WrkJHArj)O(rhTOdrgNhOrfR2<re:?'
rdXomrc\9^rc%jTrbVRJrb)4Arac"<raDI-JRF%:qI'2/raYq<rau.CrbMLMrc%jXrcS3brdOitre19.
rf-o@rg<\TrhBCkriZ7.rk8<Irl4r^rmC_qrn@A-ro3q>rosFKrp]pXrq-3arqQKirqucoi;_j;rr)io
rql]irq??`rpg!Urp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFck
rcS3]rc%jTrb_XMrbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VS
rh07friH+(rj_sArkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKe
rq69]rpTjRroj@Cro3q6rn7;%rmC_grl>#Urk/6?rilC%rhf[frg`tTrf[8?reg]1rdt-"rd=]jrce?a
rc8!WrbqdQrbVRLqeE!BJSB[LrFu7GrbMLLrb_XQrc%jVrcJ-_rcnEhrdFcsreCE/rf$i=rfmDNrgs+`
ri#h!rj)O7rk\TQrlP/crmUl!rn[S3roF(ArosFMrpg!Zrq??crqQKirqucoi;_j;rr)iorql]jrqHEb
rpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0re(3#rdFcmrcnEc
rcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_rh]UorilC0rk/6I
rl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQfrq69^rp]pTrp0RH
roF(9rnRM,rm^qorlkA^rk\TIrjMg2riQ0trh9=_rgWnPrf[8Arepc4reCE(rdautrd=]lrd+Qgrce?a
TQGa,JTUa1rcS3`rcnEgrd4WlrdXotrdk'&reLK1rf6u?rfmDNrgj%]rhf[oric=.rj_sBrl+lYrm(Mk
rmh#&rndY5roX4Frp9XQrpp'\rq??drqcWlqu,IQj8],WrqucmrqcWgrq??`rpg!Vrp9XKroX4=rn[S-
rmh"qrm(Mbrkn`Mrj_s6ric=$rh]Ugrgs+Xrg3VJrf@&<repc2re:?(rdautrdOiord12^JU2lnpNlgc
rd=]ordXotre(3'reCE0rf$i:rf[8GrgEbVrh07dri,muriuI2rjr*Frl>#\rm1Smrn%/)ro!e8roa:G
rpB^Srq$-]rq??erql]mqu,IQj8],WrqucmrqcWhrqHEarpg!Vrp9XKroX4>rndY/rn%.trm1Serl+lR
rk/6=rj)O+ri,morh9=_rgWnQrfd>Drf@&;repc3re:?(rdt#uqgbGkJU`6#pOE0mrdk'#re(3'reLK/
repc9rfI,Brg!JMrgj%]rhBCiriH+&rj2U7rk8<KrlP/armC_rrn7;,ro*k;roj@IrpB^Srq$-]rqHEf
rql]mqu,IQj8],WrqucmrqcWhrqHEarpp'XrpKdNroj@Cro*k5rn@A%rmLekrlP/YrkJHDrjVm4riZ7$
rhoajrh9=_rgWnTrg!JHrfR2@rf-o9repc5re^W0TSA#PJVO#UreLK/reg]5rf$i9rf@&?rf[8Frg*PP
rgj%\rhBChri,n!riuI0rji$BrkeZUrltGhrm^r#rnIG0ro="?rosFLrpTjVrq$-]rqHEfrql]mqu,IQ
j8],XrqucmrqcWhrqHEbrq$-ZrpKdOrosFEro3q7rnIG(rmh"prlkA_rkeZJrjr*;rj)O,ri?$srhf[h
rh'1\rgNhRrg3VKrfd>ErfI,?rf6u;TT"G\JW0Gaqi1T8rf@&?rf[8Erg!JMrgNhUrgs+_rhKIjri5t"
riuI1rj_s?rk\TPrlY5crmC_rrn@A-ro*k<roa:GrpB^Rrpp'\rq??drqcWkrquZmi;_j;rr2oqrqucl
rqQKerq??_rpp'XrpB^Mroa:@ro*k5rn7;%rmLekrlb;[rk\TJrjr*:rj2U.riQ1"rhf[irhBCbrgs+Z
rgNhRrg3MHrfd>EqiRb;JWPGErK.#@qi^i?rfmDKrgEbTrgj%\rh07brh]Ulri?%$riuI0rji$@rkSNO
rl>#_rmC_prn.5+rnm_7roX4Drp0ROrp]pXrq69brqQKhrql]nqu5ORj8],Xrr)iorql]jrqQKerq-3]
rp]pTrp9XKroX4?rnm_1rn@A&rmC_jrlb;[rkeZLrk/6ArjDa3riuI*riH+!rhf[jrhKIdrh0.\qjmVS
URQh(JXZY/opl#Prh'(\qk="arh]Ulri?%#ric=,rj;[5rk&0Drk\TPrlY5brm:Yprn.5*rnm_6roO.C
rp'LMrpTjVrq-3arqQKgrql]mrr)`ni;_j;rr2fnrqucmrqZQfrq-3]rpp'WrpB^Mroj@Dro3q7rn[S+
rmh"rrm(McrlG)Wrk\TJrjr*=rjMg4rilC*riQ1#ri,[jrh]UirhH$XJY@XgoV)8ZrhTOiqksFlri5t!
riZ7)rj2U3rj_s=rk&0ErkeZRrlP/arm:Yorn%/&rndY5ro="@rosFJrpKdUrq$-]rqHEerqcWkrquco
qu5ORj8],Xqu-Nlrql]jrqHEbrq-3\rp]pTrp0RIroa:Aro*k5rnIG(rmh"prm(MerlG)Xrkn`NrkABE
rji$:rj;[1rilC*riZ7&riH+"ql63cJZ+-uoVhbhri?%"riQ1&ric=*rj)O0rjDa8rjr*BrkJHJrkn`T
rlP/arm1Skrmq)&rn[S3ro=">roj@IrpB^Srpp'[rq69brqQKhrql]mrr)`ni;_j;rr2fnrqucmrqcWi
rqQKerq-3[rpTjSrp9XMroj@Cro3q7rnRM,rmq(srm:YirlkAarl4rUrkeZLrkABFrk&0?rj_s9rjDa4
rj2L-rir-#JZs^0qQTk%rj)O0rj;[4rjMg8rji$?rk/6ErkJHJrkn`Srl>#]rltGgrmC_qrn%/(rndY5
roF(Aroj@IrpB^Rrp]pYrq-3arqQKgrqcWkrqucoqu5ORj8\oRrqucmqtg<erqHEarq$-ZrpTjRrp9XK
roX4@ro3q7rn[S,rmq(urmC_krltGcrlG)Zrl"fRrkeZMrkJHHrk/6Brjr*>rj_X1VRD&aJ[YNcqmZI4
qml^;rk&0BrkABHrkSNMrkn`Rrl>#\rlkAerm:Ymrmh##rn@A.ro*k:roO.Crp'LMrpTjUrpp'[rq-3a
rqZHfrql]mq#94Oi;`]Rrr)iorql]krqQKerq69_rq$-Zrp]pTrp0RIroa:Aro*k6rn[S,rn%/!rmLem
rm1Sfrlb;_rl>#Xrl"fRrkeQJqnM^8VS%JmJ\:rootC@>ot^RDrkn`Rrl4rYrlY5arm1SjrmC_ormh##
rnRM0ro!e9roF(Arp'LLrpTjUrpg!Zrq-3_rqHEfrqcWkrqucorr1XOi;`]Rrr)iorql]krqZQgrqHEb
rq-3\rp]pUrpKdPrp0RIroO.=rnm_2rnRM,rn.5$rmUkorm:Yjqp,2brlb;`rlP/\rl>#Wm)6!CJ]!&V
!5nBGqo/QTrlG)\rlY5`rlkAerm1SjrmC_orm^r!rn7;*rn[S2ro*k;roa:Erp0RNrpKdSrpg!Zrq69b
rqQKgrqcWkrquZlrr1XOi;`]Rrr)iorqlKerqQKerq69^rpg!WrpTjRrp9XKroa:Bro3q8rnm_1rnIG*
rn%/"rm^qrrmC_lrm1JerltGdrlauWprTMVJ]NJb!QiI[an<gUbPo`_c2Q#fci2;jdJhVoeGe"tfDaG%
gA]k+h>Z@3ir8!;k5OTDlMg2Mn,DhUnc&.Zo`"R`p\ssbqYpBkr;6Hlrn@D1s82fmrVl`oqtp6eq#:$e
o`"I]o)%qUmf)POkl0cEjo4<>ir7m8hu;L3h#?%,f`'J$ec+(te,.Sjd.5MUc@O8lcMGiZch5Zadf._p
eGe"tf)F;#g&Bb*h#?10hu;R5ir8$<k5OTDli-8Jn,DhUo)A7[o_\C^q#:-hqu6NgrVlfMs4[MPrqlZk
r;QTmqYp9hp\smco`"I]o)A.Xn,DbSm/H>Ml2KoGkPjQAir7m2hu;I2h#?(-gABS#f`'Ltebdjkdt,u!
df@kieG.SkfDaG%g&B_)g]$"*h>?+/i;V^7j8S-=kPj]ElMg/Lmf)\SnG`"XoD\C]pAXgcq"spbqu6Nm
rVQTGs4[MPrqlZkr;QTmqYp9ep\sjbo`"I]o)A1Yn,D_Rm/H>Ml2KoGkPjTBjS7a3i;VX5h>Z4&g[Egm
fR_\+f_sIkg&'P$h##q)hu;R2ir8!;jo4HBkl0iGli-8MmJcSRnG`"XoD\C]p&=^_q#:-hqtU*grVQTG
s4[MPrqQHkr;QTmqYU*cq#:$bo`"I]nc&%Wn,DbSm/H>Ml2KoGkPjTBjSS!7ipu%,hu;K!h1=C5h=9=u
hYZ4'i;Va8j87p:jo4EAkkjWDli-;Nn,DhRnb_qWo_\C^q#:*gqYpBkr:p6frn%2%s82fjrVl`oqtp6h
q"sg_p&=U_o)A1VnG_nUmJcJLlhfrDkl0cEk4Rg7j7qW)iITs=iUl+(iqqd5jSS*:kPj]El2L#Gm/-2I
n,DhUnc&.Zo`"O_p\Xa\qYpBkr:p6irmCbts7lTjrVQNlqu6Hhq>U0gp\smcp&=U\oD\:ZnG_nRmf)VQ
m/H>GlLO0<kP421jalNEjn.[0k54?7kkjZEli-8JmJcPQn,DhUnbD_To`"O_pAXgcq#:*dqYU0hr;QZi
rmCbts7lTgrVl`oqtU$eq>U0dp\XX_o`"I]o)A1YnFc8LmecDKm/H>GlM0V7k^hrKkk+*6l1jQ@li-8M
mJH>Kn,)VOnc&+YoD\C]p%\:\q#:*dqYpBkr:p6crmCbns7lTgrVQNlqtU$bq"sg_p&"C\oD\=Xnb_hH
muHgemXafime-&AnG_tWo)A7Uo`"OVp\ss_qYU0hr:p6crm(Pks7QBgrVQNiqtp6bq>9sdp\"4Yo_%hN
o)A0>n:C([nEBB=nbD\JoD\CTp&"L_q"X[aqYpBbr;QZcrm(Phs7lTarVQNlqtU$eq>U0^p\sm]p%@tJ
o9]$!nq$B%o(DVFo_A+VpA=U]q"sm^qYU0hr:U$`rlG,Ys7lTarVQNiqssU_q=XOCpRV#/p4;r0p>G]B
q"sm[qXsabr:U$`rkJKPs6osarUTmZqu6HDq47;3pjr54ptGQ@qXXOVr;QZ`rkJKGs7lT^rUp*]qgnV>
qLSKoqU#*9qss[RrV6B#s/l=orm(J,r.4csr9O:.rUTrfs/l=<rfmA4rIOq5rPJQ6s,[22rq$,?rdk'n
re^Z+s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#
s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4.."
~> %APLeod
EI
76 0 0 2 202 310 cm
BI
/Width 228
/Height 6
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$
JcC<$JcF:#J,
~> %APLeod
EI
76 0 0 74 202 236 cm
BI
/Width 228
/Height 222
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#O8je1oDX=?Jc<pnM>s:Ln,@n:oDO7=Jc3jl
n,AgVXoJ(ncMa"*Jc()slho0/o)>Zh]`7d+n,;qWp%s=:q>,[=Jbmaiqtos^n,<%\[f=#?n,;qWp&"O\
rqV-?r:kj<Jb[gkqt^$`o)&=^n,9]p`W,`4o)8I`qtos\rqZ6^j7f,<JbFZgo_.5;qtU'ap%n@YrquHf
q#8&.cN!\=o)8I`rqlKerqZQgp%SIZq"==Po(/4=Jb"B_nacAEo(;_MqtBp]qtU'aq"jmbrquHfq#8A7
cN!e@p&4mfp&"aaq"Xj_p%J:Tqt'URn*ub6Jae6[naQ#;q""FUp%7qNrqH<bqt^-dqu$$`rr1"=dJs"@
q#1*frqlKeqtU'_qt9jYrq$-[qsjRQo'_V,JaS*WkjJ-4p$htNrpp'[q"4RYp%SI\q"jmbrquQiq#8S=
fDkXFq#13irqlKerqZQgqtL!\rq-3]rpp'Yrp]ULrpK[Nqs==Jq!.Y=S`kXgJ`uaiq!%S=qs47JrpBUN
qsXFOqsj[Vrq$-]rq6'\rqQKgqtg<hrquQiq#8\@fDkaIp&4mfrql]kqt^6drqH<`rq-3]rpp'XqsXFM
qs=4Gq!%eAp#l,4S`PFaJ`ZOcpu_J:qrmh>p$;VDrpKdSqsaUUrq$-]q"F^]rqQKgqtg<hrquHfrr1=F
fDkaIq#13irqlThrqQBbqt9s\rpp'YqsaURrpB^Oqs4.Dqrn%BroWn7ro<e5S`,.YJ`67[pu;22qrIY:
qrdtBrosFJqs=4IqsXORrpg!Zrq-3_rqH<bq"k!erquQirr1=FgAh0Oq#13irql]kqt^-arqH<^rq$-Z
rp]pUrpKdPrp0RJroj@EroO.?qr@S5o&0N)rna!tJ_bn5n_O*!qqq))ro3q;qrIb<roX4Dqs"+GrpB^R
rp]gTqt'gZqtL*brqZQirql]mq#1*hfDjS)rr2]krqucmrqcWirqQKerq??arq$$Xrp]pUrpB^NrosFG
roa:BroF(=qr.G1rnm_2ptYl'qqCr#S_/MGJ_9VIrn7)#rnI>*qq_/,ro!e7ro="=roO.Broj@Grp0RM
rpKdSrp]pXrq$-]rq??crqQKgqtg<hrquZlqu54IgAh0Oqu-Eirql]krqQKerq??`rq$-[rp]pUrpKdP
rp0RJroj@EroF(<ro!S/rn[S/rnIG+qq:l!rn$qqqp_CiJ^]2!!7UVjpso8nrn.5'rn@A+rnRD,qqqD2
ro*k:roF(Aroj@Hrp9XPrpTjUrpp'[rq-3`rqHEeqtg3erqucoqu54Ii;`]Rqu-NlrqlThqtU0brq-3]
rposUrpKdOroj@EroO.>ro3q8rnm_3rnRM,rn.5$rmh"trmUbmqp=o[T[&,6J^4,;p!<<XrmLeprm^qt
rmq)#rn7;*rnRM0rnm_5ro3q<roX4Drp0RMqsXORrpp'[rq-*^rqQKhrql]mq#13kgAg+2qu6Kkrqucm
rqZQgrqHEcrq69^rpg!WrpTjQrp0RKroa:Bro="9rnm_2rnIG+rn.5%rmh"sqpPJjrm1Shqoo&_rlUSL
J]WJbn]CdQrlb)\rm(Mhrm:YmrmUkrrmq)#rn.5(rnRM/rnm_7roF(@rosFJrp9XQrp]pWrq$-]rq??c
rqQKgrql]mq#13kgAg+2qu6TnrqucmrqcWirqQKerq69_rpp'XrpTjSrp9XMroj@Cro3q7rn[S/rn@A(
rmq(trmC_lrm1JerlkAbrlY5^rlG)Zrl+6BXM]V,J\qK*o#1FErl>#ZrlP/^rlb;brm(Mhrm:YlrmUkr
rn%/&rnIG.rnm_6roF(Aroj@IrpB^QrpTjVrq$-^rqHEerqZQirql]mqu-NngAg+2qu6TnrqucmrqcWh
rqHEbrq-3]rpg!WrpKdOroj@EroF(;rnm_2rn7;&rm^qqrm:YjrlkAbrlP/[rl4rUrkn`PqnW*Do"Cp5
J\6QHrOhg:rkJ-ArkeZPrl"fUrlG)]rlkAfrm:YlrmUksrn.5*rndY4ro="=roa:Grp9XQrp]pWrq$-]
rq69brqZQirql]mrr)iqgAg+2q#13irql]jrqQKerq69^rpp'XrpB^Nrp'LGroO.<rndY0rn7;%rm^qp
rm1SgrlY5]rl>#Vrkn`OrkJHGrk/$<rji$<qmW6,J[U-<qR61.rj_s<qn)j?rk8<GrkSNMrkn`SrlG)]
rlb;drm:Ymrmh##rn@A-ro!e8roX4Erp0RMrpTjUrpp'\rq69brqQKgrql]mqu,7Kj8],Xqu-Nlrql]k
rqZQgrqHEarpg!VrpKdPrp0RIroO.=rnm_1rn@A&rmLemrm(MerlY5[rl"fQrkJHHrk8<Crji$<rjMg6
rj;[2qm-4+TWj!OJ[#!Tqm$.+rj2U2rjDa6rjVm;rk&0BrkABHrkSNNrl+lWrlb;crm1Skrmh#"rnIG/
ro*k;roa:Erp0RNrpTjUrq$-]rqHEerqZQirql]mrr)`ni;_j;rr2fnrqucmrqZQfrq69_rpp'XrpKdO
roj@EroF(;rndY/rn%/"rm:YirlkA_rl+lSrkSNIrk/6@rjMg5rj)O-ric=(riQ1$ri>prSZ%+<JZ/4>
ri5suriH+$riZ7(rilC-rj2U3rj_s=rk8<GrkSNNrl4rZrltGgrmC_rrn@A-ro!e9roO.Crp0RNrp]pX
rq$-^rqHEerqcWkrqucoqu5ORj8],Xrr)iorql]jrqQKerq69_rpg!VrpB^Mroa:Bro3q7rn[S,rmh"r
rltGarl>#Vrk\TJrk&0>rjMg4rilC*riH+"ri5srrhoamqkX4dpnFXZJY@XgrLs"\qkO.drhf[mri#gr
ri?%#rilC.rj;[6rjr*ArkJHLrl+lXrlkAermUkurn@A.ro*k:roX4Erp0ROrp]pXrq69brqQKgrql]m
rr)`ni;_j;rr2oqrqucmrqZQgrqHEarq$-YrpKdProsFEro="8rnRM,rmq(rrm(Mdrl+lRrkJHFrjr*:
rj2U/riZ7%ri5sprhTOgrh9=aqk*bVqjaFNJX_4[!1WYOrgj%\qk3h[rhKIhrhoarriQ1'rj)O1rjMg<
rkABJrl"fYrltGhrmh##rnRM1ro*k<roj@HrpB^Rrpg![rqHEerqZQjrqucoqu5ORj8],Xrr)iorqcWh
rqHEcrq$-[rp]pSrp'LGro=":rndY-rmq(srm(Mdrl+lQrkABCrjDa3rilC(ri5sprhKIerh07^rg`tV
rg<\Oqiq)Drf[/@VN?@jJWThlrfR)@qih#Drg3VPrgWnXrh'1_rhBCgrhoarriZ7*rj;[8rk/6Grl"fV
rltGirm^r"rn[S2ro3q>roj@IrpKdTrpp']rqHEerqcWkrr)`ni;_j;qu-NlrqcWhrqHEbrpp'XrpTjP
rosFEro*k6rnRM*rmh"prlkA_rkn`Krjr*;riuI*ri?$rrh]Ugrh'1\rgWnSrg3VLrf[8BplGE6rf!V1
JW#);!/p`5qi1K6rfI,ArfmDIrg3VQrg`tZrh9=drhf[priQ1(rjDa8rk/6Irl+lZrm(Mjrmq)&rn[S3
roO.Brp'LNrp]pWrq-3_rqHEfrqlKhi;_j;rr)iorql]krqQKerq-3\rp]pTrp'LHroO.<rndY.rmh"r
rm(Mbrl+lOrjr*<rj)O+ri?$rrhKIdrgs+YrgEbNrfd>Drf@&<rf$i7reg]3reI/$JVJ`1qM,!)reUQ2
repc7rf-o<rfI,BrfmDJrgNhWrh'1arhf[oriQ1)rj;[8rkABKrlG)`rm:Yorn7;*rnm_8roX4ErpB^R
rpg!Zrq-3arqZQjrquZli;_j;rr)iorql]krqQKerq-3[rpTjQrosFEro3q6rnIG(rmLelrlb;[rkeZI
rjMg3riZ7"rhf[grgs+Yrg*PIrfR2@rf$i7reUQ-re(3%qgnWpUORiEJUdEDrdb!!rdt-%re19+reUQ3
rf6u>rf[8Grg<\Urh07brhoasric=-rji$Arkn`WrltGirmq)%rn[S4roF(Brp0RNrp]pYrq-3arqZQj
rquZli;_j;rr)iorql]jrqQKdrq$-YrpKdOroj@Dro*k4rn@A&rmC_jrlP/WrkJHCrj2U-ri5sorhBC`
rgEbOrfd>Brf-o7reLK,re(3#rdXorrdFcnrd1;`JU)flqK`'erd=]nrdOirrdb!#re19*re^W4rf6u@
rg!JMrgj%]rhTOmriH+(rjVm=rk\TSrlb;frmh##rnRM2ro3q?rp'LLrpTjWrq-3arqQKhrquZli;_j;
rr)iorql]jrqHEbrq$-YrpKdOroa:Arnm_1rn@A$rm:Ygrl>#Srk8<>riuI)rhoahrgs+Yrg!JGrf@&:
re^W/rdt-"rdXoprd4WjrcnEdrcOlUJTQHbqK2^Zrc\9crd+Qjrd=]prdb!!re:?,reg]8rfR2ErgNhW
rh07fri,n#rj;[7rkJHOrlP/brmLerrnIG/ro*k=rp'LLrpTjWrq-3`rqQKhrquZli;_j;rr)iorql]j
rqHEbrpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0re(3#rdFcm
rcnEcrcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_rh]UorilC0
rk/6Irl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQerq-3[rpKdP
rosFDro3q6rn7;%rmC_hrlG)Urk/6?rilC%rhf[grgWnRrfd>Arepc2rdt-"rd=]jrce?`rcA'Yrbh^P
rbVRLTPB$mJSP$rrbMLLrb_XPrbqdVrcA']rcnEhrdFcsreCE/rf-o?rg!JNrh'1bri#h!rj)O7rkSNO
rlY5drmUl!rn[S3roF(Brp'LMrp]pXrq69crqZQjrqucoi;_j;rr)iorql]irq??`rpg!Urp9XJroO.=
rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFckrcS3]rc%jTrb_XMrbDFHph-I8
JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VSrh07friH+(rj_sArkeZUrm(Mj
rn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKcrq$-ZrpB^Nroj@Bro*k3rn%.u
rm1Sbrl"fNrjVm4ri?$orh07Zrg!JFrepc0rdt-!rd"KdrcA'XrbqdPrb;@Eral(>raYq9TO<=YJRJ=^
qdKJ6rac"?rb2:Hrb_XRrcA']rcnEkrdk'%reg]7rfd>Krg`t^ri,n"rjDa=rk\TRrltGirmh#%rn[S5
roX4Erp9XRrpp'\rqHEerql]mrr(dTj8],WrquclrqHEarq$-ZrpB^Mroa:?rnm_0rmh"rrltG_rkn`K
rjMg2ri,mkrgs+Vrfd>BreUQ,rdauprc\9_rc.pTrbVRJrau.?raPk7ra5Y2qd$((JR!b2rET>-ra,S2
ra>_7raYq=rb2:Grb_XRrc8!\rd+Qlrdt-(reg];rg*PPrh07griH++rk&0Erl+l[rm1Snrn@A-ro*k=
roj@IrpTjWrq-3arqQKirqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLeirl4rSrk/6<
ric=!rh9=^rg*PFrf$i3rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qSr`];*r`oG.
ra5Y4raGe;rb)4Frb_XQrc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!rnRM2roO.B
rp0RPrpp'\rqHEerql]mrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5YrkSNDrj)O*
rh]UcrgEbLrf$i4re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`brr`9#"r`K/'
r`fA/ra>_7ral(CrbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(ro!e:roX4G
rpKdUrq-3arqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjQrp'LEro*k5rn7;"rm1Scrkn`Mrj_s4riH*p
rgj%Urf[8<reCE'rd=]ircA'VrbVRIral(<ra5Y0r`];&qc<Snr_o[kJPgtqrDEGjr`&ktr`B)$r`fA.
ra>_8rau.Drb_XTrcS3drdXp"reUQ8rfmDNrh9=griZ7.rjr*Frl>#]rmC_srn@A/ro="?rp0ROrpg![
rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$rhBC]rg*PE
re^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&ktr`T5*ra,S3
ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0ROrpg![rqHEe
rqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp0RJroO.;rnRM)rmC_jrlG)Urk8<>riZ7"rh9=ZrfmDBreLK*
rd=]hrcA'Wrb;@DraPk6ra#M+r`9"tr_i_lqbR)`VG)P7JP?#9r_<Afqb[8ir_rerr`K/'ra,S4rac"A
rbh^TrcS3drdOj#rf$i<rg*PTrhTOprj;[8rkSNQrlY5ermq)%rndY7roX4FrpKdTrq$-_rqQKhrquco
i;_j;rr)inrqZQfrq-3\rpTjProsFDrnm_0rn%.srltG_rk\TIrjDa.ri,mirg<\Krf$i2rdk&qrcS3\
rb_XJral(:ra#M-r`K/"r_remr_NMgr_3;aUIp)0JP,c2r_*5ar_EGgr_`Yor`B)%r`oG0raGe<rbMLO
rcJ-crdOj"reg]8rg!JRrhBCmrj)O4rkJHOrlP/crmh#$rn[S6roX4FrpKdTrq$-_rqQKhrqucoi;_j;
rr)inrqZQfrq-3\rpKdOrosFCrnm_0rmq(rrltG^rkSNGrj;[,rhoafrg3VIrepc0rdk&prcJ-ZrbVRH
raYq7r`fA)r`9"sr_`Yjr_3;ar_!&ZVFZ8/JOo`1r^m)]r_*5ar_NMir_i_qr`B)&ra,S4ral(Drb_XT
rcnEire(3,rf6uCrgj%_ri5t&rjMg?rl"fWrm1Snrn.5+ro3q=rp'LMrpTjXrq??drqcWlrr(dTj8],W
rql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Ygrl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`rbqdNral(<
ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@rbVRRrc\9e
rdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mmrn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]j
rqHEarpp'Vrp'LGro="7rnIG&rm:Ygrl+lNrji$7ri?$qrgj%SrfR2:rdt,trce?^rbqdMrac":r`oG*
r`9"sr_WShr_*5^r^d#YqaIAMJOG&WrC$WRr^ZrYr^m)^r_3;er_i_pr`B)&ra#M4rb)4Grc.p\rd+Qo
reLK2rfd>Mrh07iriuI2rk/6Jrl>#`rmUkurn[S5roO.DrpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQf
rq-3\rpKdNroa:@rn[S-rmh"prlkA\rkABBrj2U(rh]Uarg!JEreUQ*rdFchrc.pTrb2:@ra5Y/r`B)!
r_i_kr_<Aar^d#Yr^QlTUI0T"JO9E)qaCEQr^ZrYr_!/_r_EGir_resr`];,raGe<rb;@MrcJ-ardXp$
reg]<rgEbXri#h$rjMg=rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEa
rpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4r`];%r`&kn
r_<Abr^m)Zr^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_rdOj#reg];
rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'V
rp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%r`&knr_<Ab
r^m)Zr^QcQr^6ZOWBl)$K0]N)6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>lJ.1B)ZNDDZ4_VGQ*'jL&Qu/
OoCdJT)PYeYPts/]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZQs69R\rr2lqqu6Ejp\sga
o)A(VlMfuGj8Rm6gA]Y%d/M8g`W!UN\c/o6WrAjoSGncPNrFh5JGsrqFoH@ZD#S)H@K'U4>5hS%;uTSl
9`@]a8cD6Z7f,UQ6iKEO5_21Q5QO2<rBgBKr^?`Tr^d#\r_3;er_`Ypr`T5)ra5Y9rb;@LrcA'_rdOj#
reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr)iqj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_remr_<Abr^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`fA0ral(Brb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qrr_WSgr_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/(ra>_:rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tnrql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lN
rji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%r_relr_3;ar^m)Zr^QcQr^6ZOWBc#"K0TH(
6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>Q/"/Ac?ECDZ4_VGQ*'jL&Qu/OoCdJT)PYeYPts/]`,hJa8XB`
e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZoro=%Cs82fprVl]nq>U-fo`"F\mf)MNkPjN@h>Z.-ec*qp
bl5T\^Ab\BZMpm'V>d"aPl?^BL]2i'I/\9fE;j\QBDu?=?N+.-<rQ(t;#X2g9E%N^8,c!T7/fRQ6E*8%
6%_H(6:1W;qa:?Nr^QlXr_!/`r_NMjr`/r#r`oG1rau.Drbh^Vrce?jre:?/rfR2Jrgs+eric=/rk/6J
rl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucorr1sXj8],Wrql]jrqHEarpp'Vrp'LGro="6rn@A%
rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4r`];%r`&knr_<Abr^m)Zr^QcQr^3PL
JO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_rdOj#reg];rgEbWrhob!rjDa<rkn`U
rm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Yg
rl+lNrji$7ri5sorg`tQrfI,8rdt,trc\9\rbh^KraYq7r`fA'r`/qqr_NMfr_!/\r^ZrWr^<MKJO=uU
!(6WOr^QlWr^d#\r_*5cr_`Ynr`9#%ra#M3rau.DrbqdXrcnElre:?/rf[8Krh'1griuI2rk/6Jrl>#`
rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpKdNroa:@rn[S-rmq(qrlkA\
rkABBrj2U(rh]Uarg!JEre^W+rdFcirc.pTrb;@BraGe2r`T5$r_i_lr_EGcr^m)[r^WVMJOP,YqF1BR
r^d#[r_*5ar_NMjr_retr`];,raPk>rbMLPrc\9erdb!'repc=rgEbXri#h$rjMg=rkn`Urm(Mmrn.5*
ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Ygrl+lNrji$7
ri?$qrgj%SrfR2;re(3"rcnE`rbqdNral(<ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[qF:HSr^d#\
r_*5br_WSmr`/r"r`oG/raYq@rbVRRrc\9erdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mmrn.5+ro3q=
rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp0RJroF(9rnIG'rmC_irl4rQrk/6;riQ0t
rh'1Vrf[8=re:?&rd+Qcrc.pRrb)4?ra5Y/r`T5$r_renr_NMer_*5_qamYUJOk>_rCHoZr_!/_r_3;e
r_WSlr`/r!r`];-raGe;rbDFLrc8!_rd=]tre^W7rg!JRrhBClriuI2rkABMrlG)brm^r"rn[S5roO.E
rpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpKdOrosFCro!e2rmq(rrltG_rkSNGrjDa.ri,mi
rgEbMrf$i2rdk&qrcS3\rb_XKrau.<ra#M,r`B(ur_renr_EGeqb6u^VFlD3JP,l5qb-o^r_<Agr_`Yn
r`9##r`fA/raPk>rbMLNrcA'ardOj"reg]8rg*PSrhBCmrj)O4rkABNrlY5ermh##rndY6roO.ErpB^R
rq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjProsFDro!e2rn%.srm(MarkeZJrjMg/ri,mjrgEbM
rf6u5re(2trce?_rbqdMrau.=ra5Y1r`T5$r`&kpr_WJfqb<q]JP:VgrCm2br_NDfr_i_or`/r"r`];-
raGe:rb2:Krc.p[rd+Qmre:?1rfI,Frgs+briH++rji$Drl4r[rm:Yqrn7;-ro="?rp'LNrp]pYrq??d
rqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$rhBC]rg*PEre^W.
rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&ktr`T5*ra,S3ral(A
rbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0ROrpg![rqHEerqcWl
rr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY,rmUkmrlP/WrkJHBrj)O)rhKI`rgEbJrepc2rdk&r
rcnE`rbh^Orb2:BraPk6r`oG,r`K/$r`9"tr_oRiJPq%sqGR;kr`&ktr`B)%r`oG0ra>_8rau.Drb_XT
rcS3drdXp"re^W8rfd>Nrh9=gric=/rjr*Frl>#]rmC_rrn7;.ro="?rp0ROrpg![rqHEerqcWlrr(dT
j8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5YrkSNDrj)O*rh]UcrgEbLrf$i4re(3!rd4We
rc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`brr`9#"r`K/'r`fA/ra>_7ral(CrbVRQrcJ-`
rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(ro!e:roX4GrpKdUrq-3arqQKhrqucoi;_j;
rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLeirl4rSrk/6<ric=!rh9=^rg*PFrf$i3rdk&trd"Kb
rc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qSr`];*r`oG.ra5Y4raGe;rb)4Frb_XQrc8!^rd+Qn
re:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!rnRM2roO.Brp0RPrpp'\rqHEerql]mrr(dTj8],W
rqucmrqQKcrq$-ZrpB^Mroa:@ro!e1rmh"rrltG_rkn`KrjMg2ri,mlrh'1Wrf[8@re^W-rdk&rrcnEb
rc%jRrbMLHrau.?raPk7ra5Y2qd$((JR!b2rET>-ra,S2ra>_7raYq=rb)4ErbVRPrc.p\rd+Qlrdt-)
repc;rg*PPrh9=hri?%)rjr*Drl+l[rm1Snrn@A-ro3q>rosFKrp]pXrq-3arqQKirqucoi;_j;rr)io
rql]irq69^rpg!Trp0RIroF(;rnRM)rmUkmrlG)WrkJHArj)O(rhTOdrgNhOrfR2<re:?'rdXomrc\9^
rc%jTrbVRJrb)4Arac"<raDI-JRF%:qI'2/raYq<rau.CrbMLMrc%jXrcS3brdOitre19.rf-o@rg<\T
rhBCkriZ7.rk8<Irl4r^rmC_qrn@A-ro3q>rosFKrp]pXrq-3arqQKirqucoi;_j;rr)iorql]irq??`
rpg!Urp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFckrcS3]rc%jT
rb_XMrbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VSrh07friH+(
rj_sArkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKerq69]rpTjR
roj@Cro3q6rn7;%rmC_grl>#Urk/6?rilC%rhf[frg`tTrf[8?reg]1rdt-"rd=]jrce?arc8!WrbqdQ
rbVRLqeE!BJSB[LrFu7GrbMLLrb_XQrc%jVrcJ-_rcnEhrdFcsreCE/rf$i=rfmDNrgs+`ri#h!rj)O7
rk\TQrlP/crmUl!rn[S3roF(ArosFMrpg!Zrq??crqQKirqucoi;_j;rr)iorql]jrqHEbrpp'WrpB^L
roX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0re(3#rdFcmrcnEcrcJ-[pi-4N
UMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_rh]UorilC0rk/6Irl+l[rm:Yo
rn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQfrq69^rp]pTrp0RHroF(9rnRM,
rm^qorlkA^rk\TIrjMg2riQ0trh9=_rgWnPrf[8Arepc4reCE(rdautrd=]lrd+Qgrce?aTQGa,JTUa1
rcS3`rcnEgrd4WlrdXotrdk'&reLK1rf6u?rfmDNrgj%]rhf[oric=.rj_sBrl+lYrm(Mkrmh#&rndY5
roX4Frp9XQrpp'\rq??drqcWlqu,IQj8],WrqucmrqcWgrq??`rpg!Vrp9XKroX4=rn[S-rmh"qrm(Mb
rkn`Mrj_s6ric=$rh]Ugrgs+Xrg3VJrf@&<repc2re:?(rdautrdOiord12^JU2lnpNlgcrd=]ordXot
re(3'reCE0rf$i:rf[8GrgEbVrh07dri,muriuI2rjr*Frl>#\rm1Smrn%/)ro!e8roa:GrpB^Srq$-]
rq??erql]mqu,IQj8],WrqucmrqcWhrqHEarpg!Vrp9XKroX4>rndY/rn%.trm1Serl+lRrk/6=rj)O+
ri,morh9=_rgWnQrfd>Drf@&;repc3re:?(rdt#uqgbGkJU`6#pOE0mrdk'#re(3'reLK/repc9rfI,B
rg!JMrgj%]rhBCiriH+&rj2U7rk8<KrlP/armC_rrn7;,ro*k;roj@IrpB^Srq$-]rqHEfrql]mqu,IQ
j8],WrqucmrqcWhrqHEarpp'XrpKdNroj@Cro*k5rn@A%rmLekrlP/YrkJHDrjVm4riZ7$rhoajrh9=_
rgWnTrg!JHrfR2@rf-o9repc5re^W0TSA#PJVO#UreLK/reg]5rf$i9rf@&?rf[8Frg*PPrgj%\rhBCh
ri,n!riuI0rji$BrkeZUrltGhrm^r#rnIG0ro="?rosFLrpTjVrq$-]rqHEfrql]mqu,IQj8],Xrqucm
rqcWhrqHEbrq$-ZrpKdOrosFEro3q7rnIG(rmh"prlkA_rkeZJrjr*;rj)O,ri?$srhf[hrh'1\rgNhR
rg3VKrfd>ErfI,?rf6u;TT"G\JW0Gaqi1T8rf@&?rf[8Erg!JMrgNhUrgs+_rhKIjri5t"riuI1rj_s?
rk\TPrlY5crmC_rrn@A-ro*k<roa:GrpB^Rrpp'\rq??drqcWkrquZmi;_j;rr2oqrquclrqQKerq??_
rpp'XrpB^Mroa:@ro*k5rn7;%rmLekrlb;[rk\TJrjr*:rj2U.riQ1"rhf[irhBCbrgs+ZrgNhRrg3MH
rfd>EqiRb;JWPGErK.#@qi^i?rfmDKrgEbTrgj%\rh07brh]Ulri?%$riuI0rji$@rkSNOrl>#_rmC_p
rn.5+rnm_7roX4Drp0ROrp]pXrq69brqQKhrql]nqu5ORj8],Xrr)iorql]jrqQKerq-3]rp]pTrp9XK
roX4?rnm_1rn@A&rmC_jrlb;[rkeZLrk/6ArjDa3riuI*riH+!rhf[jrhKIdrh0.\qjmVSURQh(JXZY/
opl#Prh'(\qk="arh]Ulri?%#ric=,rj;[5rk&0Drk\TPrlY5brm:Yprn.5*rnm_6roO.Crp'LMrpTjV
rq-3arqQKgrql]mrr)`ni;_j;rr2fnrqucmrqZQfrq-3]rpp'WrpB^Mroj@Dro3q7rn[S+rmh"rrm(Mc
rlG)Wrk\TJrjr*=rjMg4rilC*riQ1#ri,[jrh]UirhH$XJY@XgoV)8ZrhTOiqksFlri5t!riZ7)rj2U3
rj_s=rk&0ErkeZRrlP/arm:Yorn%/&rndY5ro="@rosFJrpKdUrq$-]rqHEerqcWkrqucoqu5ORj8],X
qu-Nlrql]jrqHEbrq-3\rp]pTrp0RIroa:Aro*k5rnIG(rmh"prm(MerlG)Xrkn`NrkABErji$:rj;[1
rilC*riZ7&riH+"ql63cJZ+-uoVhbhri?%"riQ1&ric=*rj)O0rjDa8rjr*BrkJHJrkn`TrlP/arm1Sk
rmq)&rn[S3ro=">roj@IrpB^Srpp'[rq69brqQKhrql]mrr)`ni;_j;rr2fnrqucmrqcWirqQKerq-3[
rpTjSrp9XMroj@Cro3q7rnRM,rmq(srm:YirlkAarl4rUrkeZLrkABFrk&0?rj_s9rjDa4rj2L-rir-#
JZs^0qQTk%rj)O0rj;[4rjMg8rji$?rk/6ErkJHJrkn`Srl>#]rltGgrmC_qrn%/(rndY5roF(Aroj@I
rpB^Rrp]pYrq-3arqQKgrqcWkrqucoqu5ORj8\oRrqucmqtg<erqHEarq$-ZrpTjRrp9XKroX4@ro3q7
rn[S,rmq(urmC_krltGcrlG)Zrl"fRrkeZMrkJHHrk/6Brjr*>rj_X1VRD&aJ[YNcqmZI4qml^;rk&0B
rkABHrkSNMrkn`Rrl>#\rlkAerm:Ymrmh##rn@A.ro*k:roO.Crp'LMrpTjUrpp'[rq-3arqZHfrql]m
q#94Oi;`]Rrr)iorql]krqQKerq69_rq$-Zrp]pTrp0RIroa:Aro*k6rn[S,rn%/!rmLemrm1Sfrlb;_
rl>#Xrl"fRrkeQJqnM^8VS%JmJ\:rootC@>ot^RDrkn`Rrl4rYrlY5arm1SjrmC_ormh##rnRM0ro!e9
roF(Arp'LLrpTjUrpg!Zrq-3_rqHEfrqcWkrqucorr1XOi;`]Rrr)iorql]krqZQgrqHEbrq-3\rp]pU
rpKdPrp0RIroO.=rnm_2rnRM,rn.5$rmUkorm:Yjqp,2brlb;`rlP/\rl>#Wm)6!CJ]!&V!5nBGqo/QT
rlG)\rlY5`rlkAerm1SjrmC_orm^r!rn7;*rn[S2ro*k;roa:Erp0RNrpKdSrpg!Zrq69brqQKgrqcWk
rquZlrr1XOi;`]Rrr)iorqlKerqQKerq69^rpg!WrpTjRrp9XKroa:Bro3q8rnm_1rnIG*rn%/"rm^qr
rmC_lrm1JerltGdrlauWprTMVJ]NJb!QiI[an<gUbPo`_c2Q#fci2;jdJhVoeGe"tfDaG%gA]k+h>Z@3
ir8!;k5OTDlMg2Mn,DhUnc&.Zo`"R`p\ssbqYpBkr;6Hlrn@D1s82fmrVl`oqtp6eq#:$eo`"I]o)%qU
mf)POkl0cEjo4<>ir7m8hu;L3h#?%,f`'J$ec+(te,.Sjd.5MUc@O8lcMGiZch5Zadf._peGe"tf)F;#
g&Bb*h#?10hu;R5ir8$<k5OTDli-8Jn,DhUo)A7[o_\C^q#:-hqu6NgrVlfMs4[MPrqlZkr;QTmqYp9h
p\smco`"I]o)A.Xn,DbSm/H>Ml2KoGkPjQAir7m2hu;I2h#?(-gABS#f`'Ltebdjkdt,u!df@kieG.Sk
fDaG%g&B_)g]$"*h>?+/i;V^7j8S-=kPj]ElMg/Lmf)\SnG`"XoD\C]pAXgcq"spbqu6NmrVQTGs4[MP
rqlZkr;QTmqYp9ep\sjbo`"I]o)A1Yn,D_Rm/H>Ml2KoGkPjTBjS7a3i;VX5h>Z4&g[EgmfR_\+f_sIk
g&'P$h##q)hu;R2ir8!;jo4HBkl0iGli-8MmJcSRnG`"XoD\C]p&=^_q#:-hqtU*grVQTGs4[MPrqQHk
r;QTmqYU*cq#:$bo`"I]nc&%Wn,DbSm/H>Ml2KoGkPjTBjSS!7ipu%,hu;K!h1=C5h=9=uhYZ4'i;Va8
j87p:jo4EAkkjWDli-;Nn,DhRnb_qWo_\C^q#:*gqYpBkr:p6frn%2%s82fjrVl`oqtp6hq"sg_p&=U_
o)A1VnG_nUmJcJLlhfrDkl0cEk4Rg7j7qW)iITs=iUl+(iqqd5jSS*:kPj]El2L#Gm/-2In,DhUnc&.Z
o`"O_p\Xa\qYpBkr:p6irmCbts7lTjrVQNlqu6Hhq>U0gp\smcp&=U\oD\:ZnG_nRmf)VQm/H>GlLO0<
kP421jalNEjn.[0k54?7kkjZEli-8JmJcPQn,DhUnbD_To`"O_pAXgcq#:*dqYU0hr;QZirmCbts7lTg
rVl`oqtU$eq>U0dp\XX_o`"I]o)A1YnFc8LmecDKm/H>GlM0V7k^hrKkk+*6l1jQ@li-8MmJH>Kn,)VO
nc&+YoD\C]p%\:\q#:*dqYpBkr:p6crmCbns7lTgrVQNlqtU$bq"sg_p&"C\oD\=Xnb_hHmuHgemXafi
me-&AnG_tWo)A7Uo`"OVp\ss_qYU0hr:p6crm(Pks7QBgrVQNiqtp6bq>9sdp\"4Yo_%hNo)A0>n:C([
nEBB=nbD\JoD\CTp&"L_q"X[aqYpBbr;QZcrm(Phs7lTarVQNlqtU$eq>U0^p\sm]p%@tJo9]$!nq$B%
o(DVFo_A+VpA=U]q"sm^qYU0hr:U$`rlG,Ys7lTarVQNiqssU_q=XOCpRV#/p4;r0p>G]Bq"sm[qXsab
r:U$`rkJKPs6osarUTmZqu6HDq47;3pjr54ptGQ@qXXOVr;QZ`rkJKGs7lT^rUp*]qgnV>qLSKoqU#*9
qss[RrV6B#s/l=orm(J,r.4csr9O:.rUTrfs/l=<rfmA4rIOq5rPJQ6s,[22rq$,?rdk'nre^Z+s+13$
s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$
s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4.."
~> %APLeod
EI
76 0 0 74 0 236 cm
BI
/Width 228
/Height 222
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$
JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#N;nJ.pATXBJc<gkN;opXp&<88Qi)F4Jc+a0dJ`Y8
XoGX*rr1sVi;Ai:Jbt#qlhfE6l2CMYYlD96q#9a\p&+L[Jbo<@Jbjroc2.>7o).tTq#7i(_Z0E1o)8Rc
q"sa\qt^$^i:io<JbFZgnb2#;q"Xjao(r.Yqu$-cq#8/1_Z0*'rquHdrqcNfp%[nIm.I%DJb4NcnauDF
l1X]CrqZHfqtp9gn,:-'bQ%A:o)8Rcqtp9eqt^6dp%SIZq"=FSqt'LORdkt!Jar0uo()eOq"4@SqtBp]
qtU0dp%n[bqu$-cq#8J:cN!e@p&4mfqtp9erqZQgq"O[Yqt0dWrpoaPq!e:OrpZ0@Ja\0YkjSN?rpTOL
qsjRSrq#gTrq6'\rqQKgq"k!equ$?ip&<A=cN!nCp&4mfqtpBhrqZQgqtKmZrq-3]qssXSrp]^OrpKIH
rp5m8Ja7mQlg+H7p$MbHqsXFOrpfdSrq$-]q"F^]qtU0drqcNhrquHfqu5"CeGo=Cq#13irqlThqt^$]
qt9s\qsj[Srp]pUqsO@Krp9=Dqs*k=T]gsjJ`uXfqs!e=qs4.GrpBCHrp]pUrp]pWqt0m\q"Od`q"k!e
rquQiq#8eCeGoOIp&4mfq"k!bqtL!\rq-3\qsj[TrpTjSrpB^Orp0IGroj7BroX";roEb4T]1O^J`?4Z
qr@S7puVD8roa1BrosFJrp9XOrpKdSrp]pWqssXVrq69bqtTs_qu$?iqu5+FeGo4?rqucmq"ag]rq??`
rq$-[rp]gRrpB^Orp0RKrosFGroa:CqrRh<ro<e5qr.G1S_o"UJ`$+Wp#,i.pu;;5roEt<roX4Croj@G
rp'LKrp9XOrpTaRrpp'[rq-*]rqH3`rql]mp&3D?fDkjLq#13irql]kqt^6drqHEcrq-3]rpp'Wrp]pT
rpB^Nrp'LIroj@DroO%;ro3q9ro!J,rndP.RbWJLJ_]\Krn[J.p##c,ro*b6ro=">roa:ErosFIrp0RN
rpKdTrpTjVrq$-]rq69bqtU0drqcWkrquQiqu5=LfDkjLqu-NlqtpBhrqQKerq??`rq$-[rpg!WrpTjQ
rp'LIroa:CroO.=ro*b4rnm_3rn[S/rnI>'rn.,"qptGjWRQLKJ^jPGqpkAjrn%&"rn7;*rnRM/rndY3
qr%J4ro3q=roX4CrosFJrp9XQrp]pWrpp'[rq-3`rqHEeqtg<hqu$Hlqu5=LgAh0Oqu-NlqtpBhrqZQf
rq??arq$-[rpg!WrpKdPrp'LHroa:BroF(;ro!e4rn[S/rnIG+rn.5%qptbsqpbVop!W`bWR-4CJ^F8?
rmCDermUbormgnsrn%/%rn@A+rnRM/rndY4ro*k:roO.BrosFIrp9XPrp]pWrpp'[rq69arqHEfrqcNh
rquZlrr1XOh>dKRq#13irql]krqZQgrqHEcrq-3\rp]pUrpKdPrp0RIroX4Aro*k7rnm_2rnRM-rn7;'
rmq(urmUkprmC_lps8WYUWnA7J^*r6o$7-Yrm:YlrmLeprm^qurn%/&rnIG-rn[S2ro!e7roO.Broj@I
rpB^QrpTjVrpp'\rq69brqQKgrqcWkrquZlqu5FOh>dKRqu-Nlrql]krqZQgrqHEbrq-3\rp]gRrp0RK
roj@Bro3h4rnRM,rn%/#rm^qqrmC_krm:Yirlt>`rlY5^rlG)Yn&;BHJ]*,X!6"?Frl4rXrlP&[rlb;c
rm(Mirm1SkrmLeqrmh#"rn@A,qqqD4roF(BrosFJrpTaRrpp'[rq69brqQKgrqcWkrqucoqu5FOh>dKR
qu-EhrqcWhrqHEcrq-3\qsaUQrp9XKroj@Dro3q8rndY/rn7;&rm^qqrm:YjrltGdrlY5^rlG)Yqo/HM
rke6BrkJHJYJ5Y'K>.H&^];1L^])%A_>D+K_u@XP`r='Yao9H^bl5ldci2;je,IkrfDaJ&g]$(/i;Va8
k5OQCl2L&KmJHDPoD\C]pAXgcq"spequ6Qkrn[V1s8N#prVQKkqYp6gpAXaaoD\=Xn,D\Qli-)Hjo49=
i;VU4h#>t*ec+%sd/MAjcMl#db5TK]`W!gT_u@LO_"b\D^@f.9]7ISF]D]A4]_fG?^])%J_>_@O`;[aT
aSs<\bPofdci2;je,Iqtf`'\*h>Z@3ir8'=kPjfHmJHAOnc&.Zp&=[ap\Xgdqu6Qkrn[V4s8N#prVl`o
qYU*fp\smco`"C[nG_nUli-2Kkl0ZBir7j7h>Z+,f)F+sd/MAjbl5``a8X$V_Z%=L_#D(I]`,MA\c0,<
[f3]6[/73/ZD4[UZ%91SZ2:j+Zi7?2[JmW6\Gj&<])KAA^&GhH^])+L`;[gVb5TWaci2>kdf.hsg&Bh,
hu;X7jSnBBl2L#Jn,DhUnc&1[p&=^bq>:$cr;QZlro=%:s8N#prVl`oqYp<iq#:!do`"I]nG_kTm/H;L
kl0`Dir7j7h>Z+,f)F+sd/M;hbPoQ]`W!dS_#D(I]`,J@\Giu:[JmQ4ZMq-.Yl:j*Y5YPrXF[I(XRrUn
Xo>L&YPtd*Z2V'.Zi7B3\,No:\c08@^AbqI_u@XSa8X9]c2Q)hdf.hsg&Bh,i;Va8k5OTDlMg/Lmf)_T
oD\F^pAXjdq>U6fr;QZlro=%:s8N#prVl`oqYp9hp\sjbo`"C[nG_hSli-,Ik5OE?i;VR3g]#e'df.Sl
bl5caaSs'U_#D+J]`,J@\,Nc6ZMUm*Y5YR&XT#7!WW&jqVkBo<VLbW:VZ*LmW;`dqX8]4"Xo>L#Yl;!.
[/RQ6])KAA^])(K_Z%XUb5TWaci2Dmf)FG'h>Z@3j8S3?kl0oImJcVSnc&.Zp&=^bq>U6fr;QZlro=%:
s8N#srVl`oqu6Ejq#:$eo`"F\nG_kTli-/Jjo4<>hu;L3gA]\&dJhJkbl5T\_u@FM^&GSA[f3W4Z2Us+
XT#7!W;`XmV#I+cU&1JTSZ/-1S:R4,SGSlVT)5/ZT`1YaUAgqeV>dFmWrB+!YPtg+Zi7E4\c0;A^])+L
`W"*\cMl5jf)FA%hYuF3ir8'=l2L#Jmf)_ToD\C]p\sseq>U9jr;QZlro=%:s8N#srVl`oqu6Ejq#:$e
oD\=[n,D_RlMg#HjSn-;hYu7.fDa7ud/M8gaSs'U^](nF\Gio8Z2V!,Xo>@"VuEOlU]-qcT)P;[SGo#W
Rf8]OQ_TjtQ@Y@rQN!6JR/WQRS,SrWSc58\T`1_cV>dClWrB+!Yl:p,[Jm]8]`,\F_Z%XUbPolfe,Itu
gA]t.iVqp;kl0lHmJcSRnc&.Zp\sseq>U9jr;QZlro=%:s8N#srVl`oqYp9hp\smco)A.Xn,DYPl2KlF
iVqa6h>Z(+eGdhoc2Pf``;[RO]`,J@Zi76/YPtR$VuEOlU&L_aTDkA[Rf8`SQ2[$IPQ$aBOoCH>O+E@C
O8Y.:OT(C>P5^[EPl?sIRJr]TSGo/[T`1YaV>dFmWrB4$Z2V*/\c08@_#D:Oao9Qad/MSpf`'_+hu;U6
kPj`Fli-APnc&+YpAXgcq#:-hqu6Qkro=%=s8N#srVl`oqu6Hkp\smco`"C[nG_kTl2KlFjo43;h>Z.-
eGdkpci2#b`;[ON])K/;ZMq',WrApqU]-tdTDk>ZRJrNOPQ$aBO8b.<N;eb7MZ/I-Lk1A5M"c`)M>iD3
MuJ\7NVee9OoCRDQN!9NS,T&ZU&LhdVuEarYPtj,[f3l;^])1NaSsNbdf.bqgA]q-i;Vj;kPj`Fmf)\S
nc&1[p&=^bqYpBkr;QZoro=%=s8N#srVl`oqu6Hkp\smco`"C[n,D_Rl2KlFj8Rs8g]#k)df.Slbl5T\
_>_.I[f3W4YPtU%VuELkT`1M]Rf8WPPl?gEOT(7=MuJS4M#N2/L&QauK7SZ+KCjfqK`6])L]3,/M>iG4
NW,%=OoCUEQN!?PSc5;]V#I:kX8]=%Zi7E4^&GkI`W"*\ci2Alf`'Y)hu;[8k5OWEmJcSRnc&1[p&=^b
qYpBkr;QZoro=%=s8N#srVl`oqu6Hkp\smcoD\7Ymf)SPkl0]CiVq^5gA]_'d/M;hbPoBX^AbbDZMq',
Xo>6tV#I"cSc5&VQN!$GOT(:>MZ/G2LAli)K)U?#JGXhkIXus!IeS<jJ,=cqJc:9#KDpW)M#N;2NrG+=
OoC[GRJrcVTDkVbVuEgtYl:s-]DfSE_Z%aXcMl2ifDaM'hYuL5jo4KCm/HDOnG`%Yp&=^bqYpBkr;QZo
ro=%=s8N#srVl`oqYp<ipAX^`oD\7YmJcGNk5OE?hu;F1f`'A!d/M5fa8WmR]Df8<Yl:^&VuEChTDkA[
Q2[!HO8b+;M>i;0K)U?#J,XorI/\KlH2`'fG,'22Fb+]0FoHR`GQ)meHiAElIf=irJc:9#L]3/0N;en;
P5^aGSGo,ZU&LthXT#I'[f3o<_#DCRbPolfe,Ituh#?41j8S3?li->OnG`%Yp&=[aq>U9jr;QZoro=%=
s8N#srVl]nqYp<ipAX^`o)A.XmJcDMjo49=hu;@/f)F+sc2Pia`W!XO\c/r7Y5YF"V#I%dSGnoTP5^OA
NW+_4L&Q]'J,XlqI/\BiGQ)dbFT-@\EhdW*EIi-(EW1"XF8g:\G5c^bGlE*iIK"`qK)UK'L]3;4OT(FB
R/WTST`1bdWW'("Zi7N7^])4Oao9Qadf.ktgA^"/ir8'=lMg/LnG`"Xp&=[aq>U6iqu6Qnro=%=s8N#s
rVl]nqYp<ipAX^`nc&"Vli-/Jjo49=hu;=.f)F(rbl5]__u@@K[f3N1X8]!qU&LV^R/W?LOT(7=MZ/8-
Jc:/uHiA?jGlDgaEr0hQDkh0#D1QQuD>S8KE;jqXFT-OaH2`0iJ,Y#uKDpc-N;eq<Pl@*MSc5>^VZ*Xq
Yl;-2^&GqKa8X<^dJh\qg&Bn.ir8'=l2L&Kn,DkVo`"R`q>U6iqu6Qnro=%=s8N#srVl]nqYp9hp&=R^
nG_kTli-,Ij8S!9h>Z%*eGdenao96X_#CnDZi70-VZ*=hTDk2VPl?aCMuJM2KDpE#I/\EjFoHIZE;jbS
D#S5LC%u>?Aq=QFB)6-:BDuWEC]8/LD>S;OF8g=]H2`3jJGt3#L]352O8b@BQi<WVU]..iYPtp.\c0DD
`W"!Yci2DmfDaV*i;Vd9kl0lHmf)_ToD\F^q#:*gqu6Qnro=%=s8N#srVl]nqYp9hp&=R^nG_kTli-,I
j8S!9h>Z")df.Sla8X$V^](_AZ2Uj(V#I%dSGnfQOoC@>L]2u+JGsrqH2`!dErL%WDZ4GNCAqoGB)ZB=
AH$)<@Y&!>@f9d8A,Bg9Ac?<@B`;`FC]85NE;jnWG5cacI/\ZqK`6c+NW,(>Q2[<QT`1bdXT#L(\,O/A
_u@^Uci2Dmf)FM)i;Vd9kl0lHmf)_ToD\F^q#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_hSlMg#H
ir7j7h#>k'df.Pk`r<jS^AbP>Yl:^&U&LY_Rf8KLNrFq8K`6Q%If=TkFoHC[E;j_RC]8#HB)Z??@fBg8
?iFH1?\)R8?i"./@/aO4@K'a8AH$3?B`;fHD>nMREW1+[GlE0kJc:?%MZ/Y8P5^pLSc5>^X8]@&[Jmo>
_Z%RScMl5jec+A'hu;X7kl0lHmJcVSoD\C]q#:*gqu6Qnro=%=s8N#srVl]nq>U-fo`"F\nG_eRl2KiE
iVq^5gA]S#d/M8g`;[RO]`,59XT#-sT`1G[Q2ZmEMuJM2JGsrqH2_maEW0nUCAqoGB)Z9=@JaF2?2e+.
>Q.g*=b0_,=oDM&>5hb*>lJ%+?iFL5@fC!=B`;cGDuObUF8gIaIK"crL]352OT(OES,T)[VuEgtZMqN9
_#D:Obl5rfe,J)#h>ZC4k5OTDm/HMRoD\C]p\t!fqu6Qnro=%=s8N#srVl]nq>U-fo`"F\nG_eRkl0]C
i;VO2g&BJ"ci2,e_u@FM])Ju6XT#'qTDk8XPQ$R@M#N),J,XcnGQ)U]DuOSPBDuKAA,]m8?N+70>Q.h*
=ef&L=+OHI=8lA%>5hb*?2e41@/a[8Ac??AD#S>OEW11]HiANoK`6i-NW,.@RJriXV>dOpZ2V?6^Ac%L
bPoiee,J&"h>Z@3jo4KCm/HMRoD\C]p\t!fqu6Qnro=%=s8N#srVlZmq#:$eo`"C[n,DYPkl0ZBi;VO2
g&BG!cMkuc_Z%7J\Gi`3WrAgnSc4uTP5^C=LAlc'IK"KjFT-7YD>n;LAc?3:?iF=0>5hY'=8l8"<W5ss
;h7ku;uKYo<;ons<rQ2"=T2M'>l.n-@fBs<CAr&KE;jtYH2`6kJc:E'MuJn=R/WZUV#ICnYl;03^Ac"K
b5T]cdf.r!h#?72jSnBBli-APo)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"F\n,D\Qkl0ZBi;VO2
f`'7sbl5]__#CtF[f3K0W;`LiRf8TOO8at7K`6K#H2_pbE;j\QC&V`D@K'[6?N++,=8l5!<;ohq;PR'>
:k;I;;#XAl;uTbq<W6)!=oMb,?iFL5B)ZKCD#SDQFoH[cJ,Y*"M#NJ7Pl@-NU&M"iYPu!0]`,_GaSsE_
d/M\sg]$.1jSnBBm/HJQo)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zn,DYPkl0ZBi;VL1fDa.r
bl5Z^_#CtF[f3H/VuE@gRJrELNrFe4K)U5uG5cR^DuOPOBDuE?@/aI2>Q._'<rQ(q;>X.d:4Z/k:AR`_
:]=2i;>sPo<W6)!>Q.q-@/a[8BDu]GDuOhWG5csiK)UN(NrG7ARJrlYVuEju[f3o<_#DCRbl5ugfDaP(
i;Vg:kl0oIn,DkVoD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc&"VlMfuGjSn'9gA]\&d/M8ga8WmR
]Df5;Xo>3sTDk2VOoC@>L&QZ&I/\9fErKtUB`;QA@/aL3>Q.e)<W5qo;#X8i:8:L69S#n39`%T^;#XDm
<W6/#>Q.t.@/aa:B`;oKEW1+[I/\ZqL&R)2P5^gITDk_eXo>a-])KMEa8X9]d/MVqg]$+0jSnBBlMg8O
nc&.Zp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)MNkPjN@hYu7.f)F%qbPoK[^](eCZi7$)V>d+d
QN!!FMuJA.J,XcnErL"VD#S#FA,]j7>Q.b(<rQ"r;>sAj:&[fb9)D2Z8:a<_8GYmV8cD?]9E%Zb:]=5j
;Z9_r=T2P(?iFO6Ac?NFDuOeVHN&BmKDpf.OT(RFTDk\dX8]I)\c0AC`W"'[d/MVqg&Bk-j8S6@lMg5N
nG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>hYu7.ec*qpb5T?Y^AbYAZMpm'V#Htb
Pl?aCMuJ>-IK"NkEW0kTC]7lD@K'U4=oMM%<;obo;#X5h9E%Q_8cD8X7tF0]8,YsT8H)3[9)_K_:B"&g
;>sPo<rQ8$?N+C4AH$BDDZ4YTH2`9lK)U]-OT(LDT)PMaWrB='\Gj5A`;[pYd/MSpg&Bk-ir8*>l2L,M
nG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>hYu7.ec*noao96X^&GM?ZMpm'U]-h`
PQ$XBMZ//*I/\BiEW0kTCAq`B@/aI2=T2>";Z9Ml:B!rd9)_E]8>AY*7Y+&'7fGsX8cD?]9`@cc;#XAl
<rQ5#?2e72A,^6BD>nPSGlE*iJGtH*NrG7ASc5D`WrB='\Gj2@`;[pYci2Jog&Bk-ir8*>l2L,MnG`%Y
p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?ZMpj&UAg\^P5^I?
M#Mr(HiA3fE;j\QB`;H>?N+1.<rQ(t;>sDk:&[ca8H)-Y7fGfQ6\.UU6iBCL7/f[T8,c'Y9)_N`;#X>k
<;oqt>Q.t.@K's>D#SDQG5cjfJGtB(NW,+?SGo8^WW'4&\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Y
p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?ZMpg%UAg\^OoC==
LAl`&HN&$cE;jYPBDu?=?N+1.<W5qr;#X5h9E%N^8,c!W7AE5$6\.W!6iKOR7fGpW8cDB^:B")h;uTer
>Q.t.@K'p=C]8;PFT-UcJGt<&N;et=SGo5]W;a+%\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==LAl]%
H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K?N6@hIS6Ma%J6iKLQ7K,dU8cDB^:&[rf;Z9\q
>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!f
qYpHmro=%@s8N#prVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==LAl]%
H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@N6EEG'5_20#5l3nI6iKLQ7K,dU8cDB^:&[rf
;Z9\q>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Y
p\t!fqYpHjroX7Cs8N#prVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdbmao96X]`,A=Yl:U#U&LP\OoC==
LAl]%H2_pbDZ4DMB)Z3;>lIn*<W5nq:]=&e9)_E]7fGgQ6iKFO6**>&5_20#5lO(K6Mj.L7K,dU8cDB^
9`@ie;Z9\q=oM\*@/ad;CAr,MFT-UcJ,Y3%N;et=S,T,\W;a%#[f3r=`;[mXcMl>mg&Bh,ir8*>l2L,M
nG`%Yp\t!fqYpHjroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5lEtI62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX62

~> %APLeod
EI
76 0 0 22 0 214 cm
BI
/Width 228
/Height 66
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[J,
~> %APLeod
EI
76 0 0 26 202 188 cm
BI
/Width 228
/Height 78
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$
JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#O8je1oDX=?Jc<pnM>s:Ln,@n:
oDO7=Jc3jln,AgVXoJ(ncMa"*Jc()slho0/o)>Zh]`7d+n,;qWp%s=:q>,[=Jbmaiqtos^n,<%\[f=#?
n,;qWp&"O\rqV-?r:kj<Jb[gkqt^$`o)&=^n,9]p`W,`4o)8I`qtos\rqZ6^j7f,<JbFZgo_.5;qtU'a
p%n@YrquHfq#8&.cN!\=o)8I`rqlKerqZQgp%SIZq"==Po(/4=Jb"B_nacAEo(;_MqtBp]qtU'aq"jmb
rquHfq#8A7cN!e@p&4mfp&"aaq"Xj_p%J:Tqt'URn*ub6Jae6[naQ#;q""FUp%7qNrqH<bqt^-dqu$$`
rr1"=dJs"@q#1*frqlKeqtU'_qt9jYrq$-[qsjRQo'_V,JaS*WkjJ-4p$htNrpp'[q"4RYp%SI\q"jmb
rquQiq#8S=fDkXFq#13irqlKerqZQgqtL!\rq-3]rpp'Yrp]ULrpK[Nqs==Jq!.Y=S`kXgJ`uaiq!%S=
qs47JrpBUNqsXFOqsj[Vrq$-]rq6'\rqQKgqtg<hrquQiq#8\@fDkaIp&4mfrql]kqt^6drqH<`rq-3]
rpp'XqsXFMqs=4Gq!%eAp#l,4S`PFaJ`ZOcpu_J:qrmh>p$;VDrpKdSqsaUUrq$-]q"F^]rqQKgqtg<h
rquHfrr1=FfDkaIq#13irqlThrqQBbqt9s\rpp'YqsaURrpB^Oqs4.Dqrn%BroWn7ro<e5S`,.YJ`67[
pu;22qrIY:qrdtBrosFJqs=4IqsXORrpg!Zrq-3_rqH<bq"k!erquQirr1=FgAh0Oq#13irql]kqt^-a
rqH<^rq$-Zrp]pUrpKdPrp0RJroj@EroO.?qr@S5o&0N)rna!tJ_bn5n_O*!qqq))ro3q;qrIb<roX4D
qs"+GrpB^Rrp]gTqt'gZqtL*brqZQirql]mq#1*hfDjS)rr2]krqucmrqcWirqQKerq??arq$$Xrp]pU
rpB^NrosFGroa:BroF(=qr.G1rnm_2ptYl'qqCr#S_/MGJ_9VIrn7)#rnI>*qq_/,ro!e7ro="=roO.B
roj@Grp0RMrpKdSrp]pXrq$-]rq??crqQKgqtg<hrquZlqu54IgAh0Oqu-Eirql]krqQKerq??`rq$-[
rp]pUrpKdPrp0RJroj@EroF(<ro!S/rn[S/rnIG+qq:l!rn$qqqp_CiJ^]2!!7UVjpso8nrn.5'rn@A+
rnRD,qqqD2ro*k:roF(Aroj@Hrp9XPrpTjUrpp'[rq-3`rqHEeqtg3erqucoqu54Ii;`]Rqu-NlrqlTh
qtU0brq-3]rposUrpKdOroj@EroO.>ro3q8rnm_3rnRM,rn.5$rmh"trmUbmqp=o[T[&,6J^4,;p!<<X
rmLeprm^qtrmq)#rn7;*rnRM0rnm_5ro3q<roX4Drp0RMqsXORrpp'[rq-*^rqQKhrql]mq#13kgAg+2
qu6KkrqucmrqZQgrqHEcrq69^rpg!WrpTjQrp0RKroa:Bro="9rnm_2rnIG+rn.5%rmh"sqpPJjrm1Sh
qoo&_rlUSLJ]WJbn]CdQrlb)\rm(Mhrm:YmrmUkrrmq)#rn.5(rnRM/rnm_7roF(@rosFJrp9XQrp]pW
rq$-]rq??crqQKgrql]mq#13kgAg+2qu6TnrqucmrqcWirqQKerq69_rpp'XrpTjSrp9XMroj@Cro3q7
rn[S/rn@A(rmq(trmC_lrm1JerlkAbrlY5^rlG)Zrl+6BXM]V,J\qK*o#1FErl>#ZrlP/^rlb;brm(Mh
rm:YlrmUkrrn%/&rnIG.rnm_6roF(Aroj@IrpB^QrpTjVrq$-^rqHEerqZQirql]mqu-NngAg+2qu6Tn
rqucmrqcWhrqHEbrq-3]rpg!WrpKdOroj@EroF(;rnm_2rn7;&rm^qqrm:YjrlkAbrlP/[rl4rUrkn`P
qnW*Do"Cp5J\6QHrOhg:rkJ-ArkeZPrl"fUrlG)]rlkAfrm:YlrmUksrn.5*rndY4ro="=roa:Grp9XQ
rp]pWrq$-]rq69brqZQirql]mrr)iqgAg+2q#13irql]jrqQKerq69^rpp'XrpB^Nrp'LGroO.<rndY0
rn7;%rm^qprm1SgrlY5]rl>#Vrkn`OrkJHGrk/$<rji$<qmW6,J[U-<qR61.rj_s<qn)j?rk8<GrkSNM
rkn`SrlG)]rlb;drm:Ymrmh##rn@A-ro!e8roX4Erp0RMrpTjUrpp'\rq69brqQKgrql]mqu,7Kj8],X
qu-Nlrql]krqZQgrqHEarpg!VrpKdPrp0RIroO.=rnm_1rn@A&rmLemrm(MerlY5[rl"fQrkJHHrk8<C
rji$<rjMg6rj;[2qm-4+TWj!OJ[#!Tqm$.+rj2U2rjDa6rjVm;rk&0BrkABHrkSNNrl+lWrlb;crm1Sk
rmh#"rnIG/ro*k;roa:Erp0RNrpTjUrq$-]rqHEerqZQirql]mrr)`ni;_j;rr2fnrqucmrqZQfrq69_
rpp'XrpKdOroj@EroF(;rndY/rn%/"rm:YirlkA_rl+lSrkSNIrk/6@rjMg5rj)O-ric=(riQ1$ri>pr
SZ%+<JZ/4>ri5suriH+$riZ7(rilC-rj2U3rj_s=rk8<GrkSNNrl4rZrltGgrmC_rrn@A-ro!e9roO.C
rp0RNrp]pXrq$-^rqHEerqcWkrqucoqu5ORj8],Xrr)iorql]jrqQKerq69_rpg!VrpB^Mroa:Bro3q7
rn[S,rmh"rrltGarl>#Vrk\TJrk&0>rjMg4rilC*riH+"ri5srrhoamqkX4dpnFXZJY@XgrLs"\qkO.d
rhf[mri#grri?%#rilC.rj;[6rjr*ArkJHLrl+lXrlkAermUkurn@A.ro*k:roX4Erp0ROrp]pXrq69b
rqQKgrql]mrr)`ni;_j;rr2oqrqucmrqZQgrqHEarq$-YrpKdProsFEro="8rnRM,rmq(rrm(Mdrl+lR
rkJHFrjr*:rj2U/riZ7%ri5sprhTOgrh9=aqk*bVqjaFNJX_4[!1WYOrgj%\qk3h[rhKIhrhoarriQ1'
rj)O1rjMg<rkABJrl"fYrltGhrmh##rnRM1ro*k<roj@HrpB^Rrpg![rqHEerqZQjrqucoqu5ORj8],X
rr)iorqcWhrqHEcrq$-[rp]pSrp'LGro=":rndY-rmq(srm(Mdrl+lQrkABCrjDa3rilC(ri5sprhKIe
rh07^rg`tVrg<\Oqiq)Drf[/@VN?@jJWThlrfR)@qih#Drg3VPrgWnXrh'1_rhBCgrhoarriZ7*rj;[8
rk/6Grl"fVrltGirm^r"rn[S2ro3q>roj@IrpKdTrpp']rqHEerqcWkrr)`ni;_j;qu-NlrqcWhrqHEb
rpp'XrpTjProsFEro*k6rnRM*rmh"prlkA_rkn`Krjr*;riuI*ri?$rrh]Ugrh'1\rgWnSrg3VLrf[8B
plGE6rf!V1JW#);!/p`5qi1K6rfI,ArfmDIrg3VQrg`tZrh9=drhf[priQ1(rjDa8rk/6Irl+lZrm(Mj
rmq)&rn[S3roO.Brp'LNrp]pWrq-3_rqHEfrqlKhi;_j;rr)iorql]krqQKerq-3\rp]pTrp'LHroO.<
rndY.rmh"rrm(Mbrl+lOrjr*<rj)O+ri?$rrhKIdrgs+YrgEbNrfd>Drf@&<rf$i7reg]3reI/$JVJ`1
qM,!)reUQ2repc7rf-o<rfI,BrfmDJrgNhWrh'1arhf[oriQ1)rj;[8rkABKrlG)`rm:Yorn7;*rnm_8
roX4ErpB^Rrpg!Zrq-3arqZQjrquZli;_j;rr)iorql]krqQKerq-3[rpTjQrosFEro3q6rnIG(rmLel
rlb;[rkeZIrjMg3riZ7"rhf[grgs+Yrg*PIrfR2@rf$i7reUQ-re(3%qgnWpUORiEJUdEDrdb!!rdt-%
re19+reUQ3rf6u>rf[8Grg<\Urh07brhoasric=-rji$Arkn`WrltGirmq)%rn[S4roF(Brp0RNrp]pY
rq-3arqZQjrquZli;_j;rr)iorql]jrqQKdrq$-YrpKdOroj@Dro*k4rn@A&rmC_jrlP/WrkJHCrj2U-
ri5sorhBC`rgEbOrfd>Brf-o7reLK,re(3#rdXorrdFcnrd1;`JU)flqK`'erd=]nrdOirrdb!#re19*
re^W4rf6u@rg!JMrgj%]rhTOmriH+(rjVm=rk\TSrlb;frmh##rnRM2ro3q?rp'LLrpTjWrq-3arqQKh
rquZli;_j;rr)iorql]jrqHEbrq$-YrpKdOroa:Arnm_1rn@A$rm:Ygrl>#Srk8<>riuI)rhoahrgs+Y
rg!JGrf@&:re^W/rdt-"rdXoprd4WjrcnEdrcOlUJTQHbqK2^Zrc\9crd+Qjrd=]prdb!!re:?,reg]8
rfR2ErgNhWrh07fri,n#rj;[7rkJHOrlP/brmLerrnIG/ro*k=rp'LLrpTjWrq-3`rqQKhrquZli;_j;
rr)iorql]jrqHEbrpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0
re(3#rdFcmrcnEcrcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_
rh]UorilC0rk/6Irl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQe
rq-3[rpKdProsFDro3q6rn7;%rmC_hrlG)Urk/6?rilC%rhf[grgWnRrfd>Arepc2rdt-"rd=]jrce?`
rcA'Yrbh^PrbVRLTPB$mJSP$rrbMLLrb_XPrbqdVrcA']rcnEhrdFcsreCE/rf-o?rg!JNrh'1bri#h!
rj)O7rkSNOrlY5drmUl!rn[S3roF(Brp'LMrp]pXrq69crqZQjrqucoi;_j;rr)iorql]irq??`rpg!U
rp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFckrcS3]rc%jTrb_XM
rbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VSrh07friH+(rj_sA
rkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKcrq$-ZrpB^Nroj@B
ro*k3rn%.urm1Sbrl"fNrjVm4ri?$orh07Zrg!JFrepc0rdt-!rd"KdrcA'XrbqdPrb;@Eral(>raYq9
TO<=YJRJ=^qdKJ6rac"?rb2:Hrb_XRrcA']rcnEkrdk'%reg]7rfd>Krg`t^ri,n"rjDa=rk\TRrltGi
rmh#%rn[S5roX4Erp9XRrpp'\rqHEerql]mrr(dTj8],WrquclrqHEarq$-ZrpB^Mroa:?rnm_0rmh"r
rltG_rkn`KrjMg2ri,mkrgs+Vrfd>BreUQ,rdauprc\9_rc.pTrbVRJrau.?raPk7ra5Y2qd$((JR!b2
rET>-ra,S2ra>_7raYq=rb2:Grb_XRrc8!\rd+Qlrdt-(reg];rg*PPrh07griH++rk&0Erl+l[rm1Sn
rn@A-ro*k=roj@IrpTjWrq-3arqQKirqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLei
rl4rSrk/6<ric=!rh9=^rg*PFrf$i3rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qS
r`];*r`oG.ra5Y4raGe;rb)4Frb_XQrc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!
rnRM2roO.Brp0RPrpp'\rqHEerql]mrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5Y
rkSNDrj)O*rh]UcrgEbLrf$i4re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`br
r`9#"r`K/'r`fA/ra>_7ral(CrbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(
ro!e:roX4GrpKdUrq-3arqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjQrp'LEro*k5rn7;"rm1Scrkn`M
rj_s4riH*prgj%Urf[8<reCE'rd=]ircA'VrbVRIral(<ra5Y0r`];&qc<Snr_o[kJPgtqrDEGjr`&kt
r`B)$r`fA.ra>_8rau.Drb_XTrcS3drdXp"reUQ8rfmDNrh9=griZ7.rjr*Frl>#]rmC_srn@A/ro="?
rp0ROrpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$
rhBC]rg*PEre^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&kt
r`T5*ra,S3ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0RO
rpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp0RJroO.;rnRM)rmC_jrlG)Urk8<>riZ7"rh9=Z
rfmDBreLK*rd=]hrcA'Wrb;@DraPk6ra#M+r`9"tr_i_lqbR)`VG)P7JP?#9r_<Afqb[8ir_rerr`K/'
ra,S4rac"Arbh^TrcS3drdOj#rf$i<rg*PTrhTOprj;[8rkSNQrlY5ermq)%rndY7roX4FrpKdTrq$-_
rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjProsFDrnm_0rn%.srltG_rk\TIrjDa.ri,mirg<\Krf$i2
rdk&qrcS3\rb_XJral(:ra#M-r`K/"r_remr_NMgr_3;aUIp)0JP,c2r_*5ar_EGgr_`Yor`B)%r`oG0
raGe<rbMLOrcJ-crdOj"reg]8rg!JRrhBCmrj)O4rkJHOrlP/crmh#$rn[S6roX4FrpKdTrq$-_rqQKh
rqucoi;_j;rr)inrqZQfrq-3\rpKdOrosFCrnm_0rmq(rrltG^rkSNGrj;[,rhoafrg3VIrepc0rdk&p
rcJ-ZrbVRHraYq7r`fA)r`9"sr_`Yjr_3;ar_!&ZVFZ8/JOo`1r^m)]r_*5ar_NMir_i_qr`B)&ra,S4
ral(Drb_XTrcnEire(3,rf6uCrgj%_ri5t&rjMg?rl"fWrm1Snrn.5+ro3q=rp'LMrpTjXrq??drqcWl
rr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Ygrl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`
rbqdNral(<ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@
rbVRRrc\9erdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mmrn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dT
j8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG&rm:Ygrl+lNrji$7ri?$qrgj%SrfR2:rdt,trce?^rbqdM
rac":r`oG*r`9"sr_WShr_*5^r^d#YqaIAMJOG&WrC$WRr^ZrYr^m)^r_3;er_i_pr`B)&ra#M4rb)4G
rc.p\rd+QoreLK2rfd>Mrh07iriuI2rk/6Jrl>#`rmUkurn[S5roO.DrpB^Rrq$-_rqQKhrqucoi;_j;
rr)inrqZQfrq-3\rpKdNroa:@rn[S-rmh"prlkA\rkABBrj2U(rh]Uarg!JEreUQ*rdFchrc.pTrb2:@
ra5Y/r`B)!r_i_kr_<Aar^d#Yr^QlTUI0T"JO9E)qaCEQr^ZrYr_!/_r_EGir_resr`];,raGe<rb;@M
rcJ-ardXp$reg]<rgEbXri#h$rjMg=rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],W
rql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4
r`];%r`&knr_<Abr^m)Zr^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_
rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]j
rqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%
r`&knr_<Abr^m)Zr^QcQr^6ZOWBl)$K0]N)6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>lJ.1B)ZNDDZ4_V
GQ*'jL&Qu/OoCdJT)PYeYPts/]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZQs69R\rr2lq
qu6Ejp\sgao)A(VlMfuGj8Rm6gA]Y%d/M8g`W!UN\c/o6WrAjoSGncPNrFh5JGsrqFoH@ZD#S)H@K'U4
>5hS%;uTSl9`@]a8cD6Z7f,UQ6iKEO5_21Q5QO2<rBgBKr^?`Tr^d#\r_3;er_`Ypr`T5)ra5Y9rb;@L
rcA'_rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr)iqj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_remr_<Abr^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`fA0ral(B
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXJ,
~> %APLeod
EI
76 0 0 26 0 188 cm
BI
/Width 228
/Height 78
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO'0!
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO'0!r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm1Scrkn`KrjVm3ri#gjrg`tLrepc1rdXomrcJ-XrbDFEra>_2r`];#r_i_k
r_<Aar^d#Xr^HfSr^-KJX?_>%JNs3#r^$EJr^?`Sr^QlXr_!/ar_NMkr`&l#ra#M2rau.ErbqdXrd+Qn
reCE2rfI,Lrh9=iriuI3rk8<KrlP/crmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[qu-Nj
rqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrb)4<ra#M,
r`/qrr_NMfr_!/]r^QlUr^?WNr^*\OJO"cO!'pEJr^6ZQr^HfUr^m)^r_<Afr_i_qr`];,ra>_<rbMLO
rcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmqu5aXj8],X
rr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrb)4<
ra#M,r`/qrr_NMfr_!/]r^QlUr^?WNWBu/&JO93"r^6ZQr^HfUr^m)^r_<Afr_i_qr`];,ra>_<rbMLO
rcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],X
rr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI%rhBC^rf[8?reLK&rd+Qdrc%jQrb2:=
ra#M,r`9"sr_WShr_3;`r^ZrWr^HfSr^3YOJO4oSrBgKNr^?`Sr^QlWr_!/_r_EGhr`&ktr`];,ra>_=
rbMLPrcS3drdXp&rf-o?rg`t^ri,n%rjVm?rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sX
j8],Xrr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?rj)O&rhBC^rf[8?reUQ(rd4Wfrc%jQ
rb2:>ra,S.r`9"tr_`Ykr_<Aar^d#Yr^QlTVF,o%JOBB'qaCEQr^ZrYr_!/`r_WSkr`&ktr`fA.raGe>
rbVRQrc\9frdb!(rf-o?rg`t^ri,n&rj_s@rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sX
j8],Xrr)imrqQKerq$-ZrpKdMroX4>rndY.rmh"orlP/Xrk8<?rj)O'rhKI`rfd>Breg]*rd=]irc.pT
rbDFBra>_2r`K/"r_i_lr_EGdr_!/]r^`eRJOY2[pI>-Qr^m)]r_3;cr_WSlr`9##ra#M2raYqBrb_XS
rcnEirdb!*rf6uArgj%`ri5t'rj_s@rl"fYrm1Sorn7;-ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],X
rr)imrqQKerq$-ZrpKdNroa:@rndY.rmh"orlY5ZrkABBrj2U)rhTObrfmDCreg],rdFckrc8!UrbMLD
raGe4r`T5%r`/qpr_NMfr_*5_r^ikTJOb8]pIG3Sr_!/_r_<Afr_`Ypr`B)%ra,S4rac"DrbqdVrd"Kl
rdt-,rf@&Crgs+bri?%)rj_sArl+lZrm1Sorn7;-ro="@rp'LNrp]pYrqHEfrqcWmrr1sXj8],Xrr)im
rqQKerq$-ZrpKdNroa:@rndY.rmq(qrlb;[rkJHCrj2U)rh]Udrg*PFrepc.rdXonrc8!VrbVRFraYq7
r`fA(r`9"rr_`Yjr_<Abr_!&ZWCVS2JOoW.r^m)]r_*5br_NMjr_i_rr`K/(ra5Y6ral(FrbqdVrd+Qm
re(3.rfI,Frh'1dri?%)rji$Crl+l[rm:Yqrn7;-ro="@rp'LNrp]pYrqHEfrqcWmrr1sXj8],Xrr)im
rqQKerq$-ZrpTjOroa:Arnm_/rmq(qrlkA^rkSNFrjDa-rhf[erg3VHrf-o2rdk&rrcS3\rbh^Krac"9
ra,S.r`T5#r_r\jr_NMgUJ-54JP>f3qbI#br_rerr`T5)ra,S3ral(Brbh^TrcS3frdb!%rf-o?rg3VV
rhf[srjDa:rkSNRrlb;frmq)'rnm_9roj@HrpTjVrq$-`rqZQirr)iqj8\0>rr2oqrqcWhrqHEarpg!V
rp'LGroF(9rnIG)rm:YgrlG)Srk&0;riQ0trh9=Yrfd>BreCE'rdFcircA'Wrb;@EraYq8ra#M-r`B)!
r_reor_`PgVG2V9JPH);r_E>dr_`Ymr_rerr`B)'ra#M2raYq>rb;@MrcA'_rdFctreCE5rfd>Krh9=h
riQ1-rk&0FrlG)_rm:YsrnIG0roF(Brp'LOrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq-3\rpTjQ
roj@Bro!e2rn.4srlkA_rkSNFrjMg0ri#girgNhOrf@&7re19#rd"Kbrc%jQrb;@DraGe6ra,S,r`B)!
r`&kqr_fLfJP^nopJCier_reqr`/r!r`T5,ra5Y5rau.CrbVRQrcS3crdXp"reUQ7rfmDNrh9=iric=0
rk/6GrlG)_rm:YsrnIG1roF(Brp9XQrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq-3[rpTjProj@B
ro!e2rn7;!rm(McrkeZJrj_s3ri5snrgj%Trf[8=reCE'rdFcjrcJ-Yrb_XLral(=qd9>-r`];'r`B)"
r`/qsWDe@HJQ)MGr`&ksr`9#"r`K/'r`o>-raPk<rbDFKrc%jYrd"Kkrdk''repc=rg<\UrhTOnrilC3
rkABKrlY5crmLf!rnRM2roF(Brp0RPrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq-3\rpTjQrosFE
ro!e3rn@A"rm(Mdrkn`Mrk&07riH*qrgs+WrfmDAreUQ,rdXonrce?]rbqdPrb2:Crac"9ra,S/r`];(
qcNi!WE+RNJQD_Mr`Au!r`T5(r`oG/ra>_9rau.CrbVROrc.p]rd4Wore19-rf-oArgEbWrh]UpriuI7
rkJHMrlb;ermLf"rn[S3roX4Drp9XQrpp'\rqHEfrqcWmrr1sXj8],Xrr)inrqZQfrq-3\rp]pRrosFE
ro*k5rn@A#rm:Ygrl"fOrk/69riH*srh07[rg!JErepc2rdauqrd"Karc.pUrbDFGrau.=raG\2ra#M.
r`fA*WEFdTJQ_qSr`];*r`oG.qd9>2raPk=rb2:GrbqdUrcA'ardFcrreLK2rfI,ErgWn[rhoatrj)O9
rkSNOrlkAfrmUl#rn[S4roX4Drp9XRrq$-]rqHEfrql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pSrp'LH
ro3q7rnRM'rmLekrl4rSrkAB>rilC&rh9=_rgNhLrf6u8re19%rdOikrcS3[rc%jRrbMLHrau.?raPk8
ra5Y4VI+m]JRA7\ra>_4raGe8rac"?rb2:Hrb_XRrc.p[rcnEkrdk'%reg]8rf[8Lrgj%^ri?%&rjDa>
rkeZSrm(Mjrmh#'rnm_7roj@HrpB^Srq$-]rqQKgrql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pSrp'LH
ro3q7rnRM(rmLelrl>#UrkJHArj)O*rhTOdrg`tQrfR2>reLK+rdauqrd"Kdrc8!Wrbh^NrbDFGrb)4B
ra_d6JRa7@pLF25ral(Arb2:FrbMLNrc%jWrc\9crd=]qre19+rf-o>rg!JQrh07driQ1*rjVmArkn`U
rm1Smrmq)(rnm_7roj@HrpB^Srq$-]rqQKgrql]nrr1sXj8],Xrr)inrqcWhrq69^rp]pTrp0RIro="9
rn[S*rm^qnrlP/XrkSNDrj2U-rhf[hrh'1VrfmDCrepc2re(3#rd=]jrcS3]qf)OPrbVRLrb;.?WFg]n
JS+ajqe,nBrbMLLrb_OOrcA']rd"Kjrdb!#reLK2rf@&Brg3VVrhKIiric=.rji$Drl+lYrm1Smrn%/*
ro!e9roj@HrpKdTrq$-^rqQKgrql]nrr1sXj8],Xrr)inrqcWirq??`rpg!Vrp0RJroO.=rnm_.rmq(r
rlkA_rkn`KrjMg1ri?$qrh9=^rg<\LrfI,=reg]-rdk&urd4WjrcnEarc7mTqer6HJSfsTpMKeGqf)OU
rcJ-ard"KirdXoure(3-rf$i<rfmDMrgj%^rhf[qrilC2rk8<Krl>#^rmC_qrn7;.ro3q=rosFKrpTjV
rq-3`rqZQirql]nrr1sXj8],Xrr)iorqcWirq??`rpg!Vrp9XLroX4?rnm_0rmq(srm(Mbrl"fMrji$7
riQ0urhTOcrgWnSrf[8Arf-o4re:?'rdaurrd4WircnEcrcJ$YUN(j)JT:F(rc@sYrc\9brd"KirdFcr
rdt-'reLK4rfI,Brg<\Srh'1cri,n!rj2U6rkABMrlP/brmLetrnIG0ro="?rp'LLrpTjVrq-3`rqZQj
rqucorr1sXj8],Xrr)iorqcWirq??`rq$-YrpB^NroX4?rnm_1rn.5!rm:Yfrl>#Rrk&0<rilC&rhoah
rh'1[rg!JHrf@&;re^W0rdt-#rdXorrd=]lrd"KfrcY&ZJTZNdpN?IYrce?erd4WlrdOirrdk'#reLK0
rf$i;rf[8Grg`tZrh9=hriH+'rjMg<rkSNRrlb;frmUkurnRM1ro="?rp0ROrp]pYrq69arqZQjrquco
rr1sXj8],Xrr)iorql]krqHEcrq$-YrpKdProj@Cro*k5rn@A'rm:Yhrlb;XrkABDrj)O,riQ0trhTOc
rgj%Vrg*PGrfI,>reg]2reCE)rdt-#rdalqUOIcCJU[?BrdXfqrdk'#re(3)reUQ2rf6u=rfR2GrgEbV
rh'1brhoatrilC-rk&0ErkeZXrm(Mirn%/'rndY5roO.Crp9XOrp]pYrq69brqcWkrqucorr1sXj8],X
rr)iorql]krqHEcrq-3ZrpKdQroj@Cro3q7rnIG*rmUknrltG^rkeZKrjMg4ric=%rhoajrh07]rgNhP
rfmDErf@&<rf$i4reLB*re:?)UOn&KJV*WJre19)qhG**reUQ4rf-o<rfR2Erg*PPrg`t\rhKIjri?%%
rj2U4rkABKrl4r^rm:Ynrn7;+rnm_7roX4DrpB^Rrp]pZrq69brqcWkrqucorr1sXj8],Xrr)iorql]k
rqHEcrq-3[rp]pTrosFFroO.;rn[S-rm^qprm1Sbrl"fNrjr*;rj)O,ri5sqrhKIdrh'1ZrgEbOrfd>E
qiC`9rf$i7reg]3UPOJWJVa&Vre^W3repc7rf-f9rfR2Drg*PNrgWnZrh9=drhoarric=,rjMg;rkJHN
rlG)brmLeqrn@A-ro!e;roa:FrpKdSrpg![rq69brqcWkrqucorr1sXi;`fUrr)iorqcWhrqHEcrpp'X
rpTjProsFFro*k6rn[S+rm^qorltG`rl"fOrk/6@rj2U/ric=$rhoalrh9=arh'1[rgNhSrg!JIrfd>E
qiUl>VN6:hJWKbjqiLf>qi^rBrfmDIrgEbTrg`t[rh07arh]Umri5t$riuI/rji$@rkSNOrlP/arm:Yp
rn.5+rnm_6roa:Frp0RPrpg!Yrq??crqQKhrql]nqu5XUi;`fUrr)iorqcWhrqHEcrq$-[rpTjRrp'LH
ro=":rnm_/rn%.urm1SerlG)UrkJHGrjVm7rj)O,riH+!rhf[jrhKIcrh'1]rgWnUrgEbQpm:uGWKi%"
JX-2!rg*GJqj@ANrgNhUrgs+]rh07crh]Ukri5t!ric=,rjDa7rk8<HrkeZUrlb;ermUkurn@A/ro*k:
roj@HrpB^Rrpg!Zrq??crqQKhrql]nqu5XUi;`fUrr)iorql]jrqQKerq-3\rp]pTrp0RJroO.>rnm_3
rn@A&rmC_krlkA\rkn`Mrk8<ArjMg4riuI+riH+!ri#gmrhTOfqk<nZopr(PJXh:]qOIGRrgs"Zrh07a
rhBCerh]Umri5t!ric=+rj2U4rji$ArkJHLrl+l\rm(Mjrmq)%rndY3ro3q=rosFJrpKdTrq$-]rqHEe
rqZQjrqucoqu5XUi;`fUqu-NlrqcWhrqHEbrq-3[rp]pSrp0RIroX4?ro!e3rnIG'rmLelrlkAarlG)U
rkSNJrk/6@rjVm6rj)F*riZ7&riH+!ri,mqrhlEdJYn!qoVVVcri#gqri?%"riQ1&qlp(+rj;[6rjr*A
rkJHKrkeZUrlY5arm1Smrmq)'rn[S3ro="?roj@IrpB^Srpg!Zrq69brqZQiqu$Hlqu5XUi;`fUqu-Nl
rqcWirqQKdrq-3]rp]pTrpB^Lroj@Dro3q7rn[S+rmh"rrm:Yhrlb;]rl+lSrkSNIrk/6Arj_s9rj;[2
rj)O.rilC*riZ.#UTB$JJZSUIriQ(#ric=*riuI.rj2U2rjMg9rjr*ArkABIrkn`Srl>#]rltGhrmLes
rn.5+ro!e8roX4CrosFLrpTjUrq$-^rq??drqZQiqu$Hlqu5XUi;`fUqu-NlrqcNfrqHEcrq-3[rp]pU
rp0RKroj@Bro3q7rn[S,rmq(srm:YjrlkA`rl>#VrkeZLrkSNIrk/6Arji$<rjMg6rj;R/rj&<(J['d2
pTaV$rj2U2rjDa6rj_s<rjr*Ark8<HrkJHLrl"fVrlY5arm1SkrmLesrn7;,rnm_7roF(BrosFJrpTjU
rpg![rq69brqZHfqu$Hlqu5XUh>dKRqu-EhrqcWgrq??arq$-[qsXONrp0RHroO.=ro!e4rnRM*rmh"s
rm:Yjrm(MdrlY5]rl+lTrkn`OrkS<DrkA'<VRqDkJ\1lmo"=k6qnN-Grk\TOrl"fTrlG)\rlb;drm1Sj
rmUktrn.5*rn[S3ro3q=roa:HrpBUOrpg!Zrq69arqH<drql]nqu5FOh>dKRqu-Nlrql]krqQKerq??`
rq$-Zrp]pTrpB^Lroj@Dro3q8rndY.rn.5%rm^qqqp>>frlkAarlP/\rl4rVqo&KOrkb,>J\ZiPm_Jh=
rknWOrl+lVrlG)\rlY5arlt>ermUkrrn%/&rn@A.ro!e8roX4CrosFLrpKdTrpg!Zrq-3`rqHEerqcWk
rqucoqu5FOh>dKRqu-Nlrql]krqZQgrqHEbrq-3\rp]gRrp0RKroj@Bro3h4rnRM,rn%/#rm^qqrmC_k
rm:Yirlt>`rlY5^rlG)Yn&;BHJ]*,X!6"?Frl4rXrlP&[rlb;crm(Mirm1SkrmLeqrmh#"rn@A,qqqD4
roF(BrosFJrpTaRrpp'[rq69brqQKgrqcWkrqucoqu5FOh>dKRq#13irql]krqZQgrqHEcrq-3\rp]pU
rpKdPrp0RIroX4Aro*k7rnm_2rnRM-rn7;'rmq(urmUkprmC_lps8WYUWnA7J^*r6o$7-Yrm:YlrmLep
rm^qurn%/&rnIG-rn[S2ro!e7roO.Broj@IrpB^QrpTjVrpp'\rq69brqQKgrqcWkrquZlqu5FOh>d9L
qu-NlrqcNfrqQKdrq69^rposUrpKdQrp'LHroa:Aro=";ro!e5rndY0rn@8&rn.5%qpk\qqpYGjS^E#9
J^O,;p!WigqpbVqrn%/%qq:u'rnRM0rnm_5ro3q;roF(ArosFIrpB^QqsaUUrq$-^rqHEerqZHfqu$Hl
q#9+LfDkjLqu-NlqtpBhrqQKerq??`rq$-[rpg!WrpTjQrp'LIroa:CroO.=ro*b4rnm_3rn[S/rnI>'
rn.,"qptGjWRQLKJ^jPGqpkAjrn%&"rn7;*rnRM/rndY3qr%J4ro3q=roX4CrosFJrp9XQrp]pWrpp'[
rq-3`rqHEeqtg<hqu$Hlqu5=LfDkjLq#13irql]kqt^6drqHEcrq-3]rpp'Wrp]pTrpB^Nrp'LIroj@D
roO%;ro3q9ro!J,rndP.RbWJLJ_]\Krn[J.p##c,ro*b6ro=">roa:ErosFIrp0RNrpKdTrpTjVrq$-]
rq69bqtU0drqcWkrquQiqu5=LfDkaIqu-NlqtpBhqt^6drq??arq-*Zrpg!WrpTjRrp9XMrp'LIroj.>
roEt:pu;20rnm_5S_o"UJ`$"Tro!e5ro!e7pu;;5qrIP7roj@Grp'LKrp9XOrpTjUrpg!Zqt0m\rqHEe
rqZHfrqlTjrr)NhgAf\&rr2ThrquQfrqQBbqt9s\rposVrp]pUrpKdQrp9XMqs"+Dqrdt@puVM9p#D_)
J`;7?n`'H+qrIP6qr[n@qrn%Drp0RMrpB^QrpTjUrpfmVqt0m\rqH<bq"jmcqu-EkeGn%uq#:'erqucm
qtg3cq"O[Yrq-*XrpTjUrpTaPqsFCLp$;M?p$&.5J`q[Kn`]l7p$2G?qs==Lp$VhKrpTjUrpfmXrq6'\
rqZ?crql]mq#1!eeGn%up&=jerquZjq"jm`rqQKdqt9aUrpp'YqsaLOq!S%Ho'Dq5Ja7mQo]tl1rpBLK
rpTXOrpg!Yq"+LXqtBp^rqZ?crqlTjrr)EeeGmhoqu69erquZjqtg<frqQ9_qt9jYqt'gXp$qhHrpTjU
Pja1lJa_gkrp]pUp$hkKqssaXp%87Vq"Od_rqZ?crqlTjqu-3edJqDiq#9j_rquZjqtg3crqQ0\rq?-[
q"4ITp%"RAJan<]md]l=rq#pWq"=OXqtL!_rqZ6`rqlTjp&4[bbQ#ccn,E4_qu$?gq"j[ZrqQ0\k4P28
Jb4Ncme#Z7p%SI\p%eCZrqlBdrr)<bbQ#HZq#9j_rquQgp%nR]q"WeAT_<s1JbJX-j7i?DrqZ-]q"ssd
p&4[b_Z.1Hq#9a\p&+L[Jbo<@Jbjroc2.>7o).tTq#7i(\c:gkm/2G3q>5a?Jc!gkl29]C\c8]0p&<88
Qi)F4Jc+a0dJ`Y8XoF@[Jc>BBJc:6"b5RA"N;nJ.pATXBJc<gkN;nJ/JcC<$JcC<$ec14#JcC<$JcC<$
ec14#JcC<$JcC<$ec14#JcC<$JcC<$ec14#JcC<$JcC<$ec14#JcC<$JcC<$ec14#JcC<$JcC<$ec1.
~> %APLeod
EI
76 0 0 50 202 138 cm
BI
/Width 228
/Height 150
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qrr_WSgr_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/(ra>_:rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tn
rql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4
r`];%r_relr_3;ar^m)Zr^QcQr^6ZOWBc#"K0TH(6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>Q/"/Ac?EC
DZ4_VGQ*'jL&Qu/OoCdJT)PYeYPts/]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZoro=%C
s82fprVl]nq>U-fo`"F\mf)MNkPjN@h>Z.-ec*qpbl5T\^Ab\BZMpm'V>d"aPl?^BL]2i'I/\9fE;j\Q
BDu?=?N+.-<rQ(t;#X2g9E%N^8,c!T7/fRQ6E*8%6%_H(6:1W;qa:?Nr^QlXr_!/`r_NMjr`/r#r`oG1
rau.Drbh^Vrce?jre:?/rfR2Jrgs+eric=/rk/6Jrl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrquco
rr1sXj8],Wrql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[
rb_XIraGe4r`];%r`&knr_<Abr^m)Zr^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;
rb;@MrcA'_rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dT
j8],Wrql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$7ri5sorg`tQrfI,8rdt,trc\9\rbh^K
raYq7r`fA'r`/qqr_NMfr_!/\r^ZrWr^<MKJO=uU!(6WOr^QlWr^d#\r_*5cr_`Ynr`9#%ra#M3rau.D
rbqdXrcnElre:?/rf[8Krh'1griuI2rk/6Jrl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucoi;_j;
rr)inrqZQfrq-3\rpKdNroa:@rn[S-rmq(qrlkA\rkABBrj2U(rh]Uarg!JEre^W+rdFcirc.pTrb;@B
raGe2r`T5$r_i_lr_EGcr^m)[r^WVMJOP,YqF1BRr^d#[r_*5ar_NMjr_retr`];,raPk>rbMLPrc\9e
rdb!'repc=rgEbXri#h$rjMg=rkn`Urm(Mmrn.5*ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]j
rqHEarpp'Vrp'LGro="7rnIG'rm:Ygrl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`rbqdNral(<ra#M+
r`9"sr_WSir_3;ar_!/\r^W_QJOY2[qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@rbVRRrc\9erdk')
rf$i?rgNhZri,n%rjMg=rkn`Urm(Mmrn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEa
rpp'Vrp0RJroF(9rnIG'rmC_irl4rQrk/6;riQ0trh'1Vrf[8=re:?&rd+Qcrc.pRrb)4?ra5Y/r`T5$
r_renr_NMer_*5_qamYUJOk>_rCHoZr_!/_r_3;er_WSlr`/r!r`];-raGe;rbDFLrc8!_rd=]tre^W7
rg!JRrhBClriuI2rkABMrlG)brm^r"rn[S5roO.ErpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\
rpKdOrosFCro!e2rmq(rrltG_rkSNGrjDa.ri,mirgEbMrf$i2rdk&qrcS3\rb_XKrau.<ra#M,r`B(u
r_renr_EGeqb6u^VFlD3JP,l5qb-o^r_<Agr_`Ynr`9##r`fA/raPk>rbMLNrcA'ardOj"reg]8rg*PS
rhBCmrj)O4rkABNrlY5ermh##rndY6roO.ErpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjP
rosFDro!e2rn%.srm(MarkeZJrjMg/ri,mjrgEbMrf6u5re(2trce?_rbqdMrau.=ra5Y1r`T5$r`&kp
r_WJfqb<q]JP:VgrCm2br_NDfr_i_or`/r"r`];-raGe:rb2:Krc.p[rd+Qmre:?1rfI,Frgs+briH++
rji$Drl4r[rm:Yqrn7;-ro="?rp'LNrp]pYrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<
rndY,rmLekrlG)Urk8<?ric=$rhBC]rg*PEre^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_ren
r_T@cJPUhmqG7)er_`Ynr`&ktr`T5*ra,S3ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$C
rl+lZrm:Yqrn7;.ro="?rp0ROrpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY,
rmUkmrlP/WrkJHBrj)O)rhKI`rgEbJrepc2rdk&rrcnE`rbh^Orb2:BraPk6r`oG,r`K/$r`9"tr_oRi
JPq%sqGR;kr`&ktr`B)%r`oG0ra>_8rau.Drb_XTrcS3drdXp"re^W8rfd>Nrh9=gric=/rjr*Frl>#]
rmC_rrn7;.ro="?rp0ROrpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qo
rlY5YrkSNDrj)O*rh]UcrgEbLrf$i4re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"
rD`brr`9#"r`K/'r`fA/ra>_7ral(CrbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAi
rn%/(ro!e:roX4GrpKdUrq-3arqQKhrqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLei
rl4rSrk/6<ric=!rh9=^rg*PFrf$i3rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qS
r`];*r`oG.ra5Y4raGe;rb)4Frb_XQrc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!
rnRM2roO.Brp0RPrpp'\rqHEerql]mrr(dTj8],WrqucmrqQKcrq$-ZrpB^Mroa:@ro!e1rmh"rrltG_
rkn`KrjMg2ri,mlrh'1Wrf[8@re^W-rdk&rrcnEbrc%jRrbMLHrau.?raPk7ra5Y2qd$((JR!b2rET>-
ra,S2ra>_7raYq=rb)4ErbVRPrc.p\rd+Qlrdt-)repc;rg*PPrh9=hri?%)rjr*Drl+l[rm1Snrn@A-
ro3q>rosFKrp]pXrq-3arqQKirqucoi;_j;rr)iorql]irq69^rpg!Trp0RIroF(;rnRM)rmUkmrlG)W
rkJHArj)O(rhTOdrgNhOrfR2<re:?'rdXomrc\9^rc%jTrbVRJrb)4Arac"<raDI-JRF%:qI'2/raYq<
rau.CrbMLMrc%jXrcS3brdOitre19.rf-o@rg<\TrhBCkriZ7.rk8<Irl4r^rmC_qrn@A-ro3q>rosFK
rp]pXrq-3arqQKirqucoi;_j;rr)iorql]irq??`rpg!Urp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.
ri#glrgs+Wrg!JDrepc3re(3"rdFckrcS3]rc%jTrb_XMrbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^R
rc.pZrcnEgrdOiure:?/rf6u?rg3VSrh07friH+(rj_sArkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']
rqHEerql]mrr(dTj8],WrqucmrqQKerq69]rpTjRroj@Cro3q6rn7;%rmC_grl>#Urk/6?rilC%rhf[f
rg`tTrf[8?reg]1rdt-"rd=]jrce?arc8!WrbqdQrbVRLqeE!BJSB[LrFu7GrbMLLrb_XQrc%jVrcJ-_
rcnEhrdFcsreCE/rf$i=rfmDNrgs+`ri#h!rj)O7rk\TQrlP/crmUl!rn[S3roF(ArosFMrpg!Zrq??c
rqQKirqucoi;_j;rr)iorql]jrqHEbrpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIa
rgWnPrfR2?repc0re(3#rdFcmrcnEcrcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.
rf-o=rfmDKrgj%_rh]UorilC0rk/6Irl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dT
j8],WrqucmrqZQfrq69^rp]pTrp0RHroF(9rnRM,rm^qorlkA^rk\TIrjMg2riQ0trh9=_rgWnPrf[8A
repc4reCE(rdautrd=]lrd+Qgrce?aTQGa,JTUa1rcS3`rcnEgrd4WlrdXotrdk'&reLK1rf6u?rfmDN
rgj%]rhf[oric=.rj_sBrl+lYrm(Mkrmh#&rndY5roX4Frp9XQrpp'\rq??drqcWlqu,IQj8],Wrqucm
rqcWgrq??`rpg!Vrp9XKroX4=rn[S-rmh"qrm(Mbrkn`Mrj_s6ric=$rh]Ugrgs+Xrg3VJrf@&<repc2
re:?(rdautrdOiord12^JU2lnpNlgcrd=]ordXotre(3'reCE0rf$i:rf[8GrgEbVrh07dri,muriuI2
rjr*Frl>#\rm1Smrn%/)ro!e8roa:GrpB^Srq$-]rq??erql]mqu,IQj8],WrqucmrqcWhrqHEarpg!V
rp9XKroX4>rndY/rn%.trm1Serl+lRrk/6=rj)O+ri,morh9=_rgWnQrfd>Drf@&;repc3re:?(rdt#u
qgbGkJU`6#pOE0mrdk'#re(3'reLK/repc9rfI,Brg!JMrgj%]rhBCiriH+&rj2U7rk8<KrlP/armC_r
rn7;,ro*k;roj@IrpB^Srq$-]rqHEfrql]mqu,IQj8],WrqucmrqcWhrqHEarpp'XrpKdNroj@Cro*k5
rn@A%rmLekrlP/YrkJHDrjVm4riZ7$rhoajrh9=_rgWnTrg!JHrfR2@rf-o9repc5re^W0TSA#PJVO#U
reLK/reg]5rf$i9rf@&?rf[8Frg*PPrgj%\rhBChri,n!riuI0rji$BrkeZUrltGhrm^r#rnIG0ro="?
rosFLrpTjVrq$-]rqHEfrql]mqu,IQj8],XrqucmrqcWhrqHEbrq$-ZrpKdOrosFEro3q7rnIG(rmh"p
rlkA_rkeZJrjr*;rj)O,ri?$srhf[hrh'1\rgNhRrg3VKrfd>ErfI,?rf6u;TT"G\JW0Gaqi1T8rf@&?
rf[8Erg!JMrgNhUrgs+_rhKIjri5t"riuI1rj_s?rk\TPrlY5crmC_rrn@A-ro*k<roa:GrpB^Rrpp'\
rq??drqcWkrquZmi;_j;rr2oqrquclrqQKerq??_rpp'XrpB^Mroa:@ro*k5rn7;%rmLekrlb;[rk\TJ
rjr*:rj2U.riQ1"rhf[irhBCbrgs+ZrgNhRrg3MHrfd>EqiRb;JWPGErK.#@qi^i?rfmDKrgEbTrgj%\
rh07brh]Ulri?%$riuI0rji$@rkSNOrl>#_rmC_prn.5+rnm_7roX4Drp0ROrp]pXrq69brqQKhrql]n
qu5ORj8],Xrr)iorql]jrqQKerq-3]rp]pTrp9XKroX4?rnm_1rn@A&rmC_jrlb;[rkeZLrk/6ArjDa3
riuI*riH+!rhf[jrhKIdrh0.\qjmVSURQh(JXZY/opl#Prh'(\qk="arh]Ulri?%#ric=,rj;[5rk&0D
rk\TPrlY5brm:Yprn.5*rnm_6roO.Crp'LMrpTjVrq-3arqQKgrql]mrr)`ni;_j;rr2fnrqucmrqZQf
rq-3]rpp'WrpB^Mroj@Dro3q7rn[S+rmh"rrm(McrlG)Wrk\TJrjr*=rjMg4rilC*riQ1#ri,[jrh]Ui
rhH$XJY@XgoV)8ZrhTOiqksFlri5t!riZ7)rj2U3rj_s=rk&0ErkeZRrlP/arm:Yorn%/&rndY5ro="@
rosFJrpKdUrq$-]rqHEerqcWkrqucoqu5ORj8],Xqu-Nlrql]jrqHEbrq-3\rp]pTrp0RIroa:Aro*k5
rnIG(rmh"prm(MerlG)Xrkn`NrkABErji$:rj;[1rilC*riZ7&riH+"ql63cJZ+-uoVhbhri?%"riQ1&
ric=*rj)O0rjDa8rjr*BrkJHJrkn`TrlP/arm1Skrmq)&rn[S3ro=">roj@IrpB^Srpp'[rq69brqQKh
rql]mrr)`ni;_j;rr2fnrqucmrqcWirqQKerq-3[rpTjSrp9XMroj@Cro3q7rnRM,rmq(srm:YirlkAa
rl4rUrkeZLrkABFrk&0?rj_s9rjDa4rj2L-rir-#JZs^0qQTk%rj)O0rj;[4rjMg8rji$?rk/6ErkJHJ
rkn`Srl>#]rltGgrmC_qrn%/(rndY5roF(Aroj@IrpB^Rrp]pYrq-3arqQKgrqcWkrqucoqu5ORj8\oR
rqucmqtg<erqHEarq$-ZrpTjRrp9XKroX4@ro3q7rn[S,rmq(urmC_krltGcrlG)Zrl"fRrkeZMrkJHH
rk/6Brjr*>rj_X1VRD&aJ[YNcqmZI4qml^;rk&0BrkABHrkSNMrkn`Rrl>#\rlkAerm:Ymrmh##rn@A.
ro*k:roO.Crp'LMrpTjUrpp'[rq-3arqZHfrql]mq#94Oi;`]Rrr)iorql]krqQKerq69_rq$-Zrp]pT
rp0RIroa:Aro*k6rn[S,rn%/!rmLemrm1Sfrlb;_rl>#Xrl"fRrkeQJqnM^8VS%JmJ\:rootC@>ot^RD
rkn`Rrl4rYrlY5arm1SjrmC_ormh##rnRM0ro!e9roF(Arp'LLrpTjUrpg!Zrq-3_rqHEfrqcWkrquco
rr1XOi;`]Rrr)iorql]krqZQgrqHEbrq-3\rp]pUrpKdPrp0RIroO.=rnm_2rnRM,rn.5$rmUkorm:Yj
qp,2brlb;`rlP/\rl>#Wm)6!CJ]!&V!5nBGqo/QTrlG)\rlY5`rlkAerm1SjrmC_orm^r!rn7;*rn[S2
ro*k;roa:Erp0RNrpKdSrpg!Zrq69brqQKgrqcWkrquZlrr1XOi;`]Rrr)iorqlKerqQKerq69^rpg!W
rpTjRrp9XKroa:Bro3q8rnm_1rnIG*rn%/"rm^qrrmC_lrm1JerltGdrlauWprTMVJ]NJb!QiI[an<gU
bPo`_c2Q#fci2;jdJhVoeGe"tfDaG%gA]k+h>Z@3ir8!;k5OTDlMg2Mn,DhUnc&.Zo`"R`p\ssbqYpBk
r;6Hlrn@D1s82fmrVl`oqtp6eq#:$eo`"I]o)%qUmf)POkl0cEjo4<>ir7m8hu;L3h#?%,f`'J$ec+(t
e,.Sjd.5MUc@O8lcMGiZch5Zadf._peGe"tf)F;#g&Bb*h#?10hu;R5ir8$<k5OTDli-8Jn,DhUo)A7[
o_\C^q#:-hqu6NgrVlfMs4[MPrqlZkr;QTmqYp9hp\smco`"I]o)A.Xn,DbSm/H>Ml2KoGkPjQAir7m2
hu;I2h#?(-gABS#f`'Ltebdjkdt,u!df@kieG.SkfDaG%g&B_)g]$"*h>?+/i;V^7j8S-=kPj]ElMg/L
mf)\SnG`"XoD\C]pAXgcq"spbqu6NmrVQTGs4[MPrqlZkr;QTmqYp9ep\sjbo`"I]o)A1Yn,D_Rm/H>M
l2KoGkPjTBjS7a3i;VX5h>Z4&g[EgmfR_\+f_sIkg&'P$h##q)hu;R2ir8!;jo4HBkl0iGli-8MmJcSR
nG`"XoD\C]p&=^_q#:-hqtU*grVQTGs4[MPrqQHkr;QTmqYU*cq#:$bo`"I]nc&%Wn,DbSm/H>Ml2KoG
kPjTBjSS!7ipu%,hu;K!h1=C5h=9=uhYZ4'i;Va8j87p:jo4EAkkjWDli-;Nn,DhRnb_qWo_\C^q#:*g
qYpBkr:p6frn%2%s82fjrVl`oqtp6hq"sg_p&=U_o)A1VnG_nUmJcJLlhfrDkl0cEk4Rg7j7qW)iITs=
iUl+(iqqd5jSS*:kPj]El2L#Gm/-2In,DhUnc&.Zo`"O_p\Xa\qYpBkr:p6irmCbts7lTjrVQNlqu6Hh
q>U0gp\smcp&=U\oD\:ZnG_nRmf)VQm/H>GlLO0<kP421jalNEjn.[0k54?7kkjZEli-8JmJcPQn,DhU
nbD_To`"O_pAXgcq#:*dqYU0hr;QZirmCbts7lTgrVl`oqtU$eq>U0dp\XX_o`"I]o)A1YnFc8LmecDK
m/H>GlM0V7k^hrKkk+*6l1jQ@li-8MmJH>Kn,)VOnc&+YoD\C]p%\:\q#:*dqYpBkr:p6crmCbns7lTg
rVQNlqtU$bq"sg_p&"C\oD\=Xnb_hHmuHgemXafime-&AnG_tWo)A7Uo`"OVp\ss_qYU0hr:p6crm(Pk
s7QBgrVQNiqtp6bq>9sdp\"4Yo_%hNo)A0>n:C([nEBB=nbD\JoD\CTp&"L_q"X[aqYpBbr;QZcrm(Ph
s7lTarVQNlqtU$eq>U0^p\sm]p%@tJo9]$!nq$B%o(DVFo_A+VpA=U]q"sm^qYU0hr:U$`rlG,Ys7lTa
rVQNiqssU_q=XOCpRV#/p4;r0p>G]Bq"sm[qXsabr:U$`rkJKPs6osarUTmZqu6HDq47;3pjr54ptGQ@
qXXOVr;QZ`rkJKGs7lT^rUp*]qgnV>qLSKoqU#*9qss[RrV6B#s/l=orm(J,r.4csr9O:.rUTrfs/l=<
rfmA4rIOq5rPJQ6s,[22rq$,?rdk'nre^Z+s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#
s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$
s+13$s4.."
~> %APLeod
EI
76 0 0 116 202 0 cm
BI
/Width 228
/Height 348
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$
JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#O8je1oDX=?Jc<pnM>s:Ln,@n:
oDO7=Jc3jln,AgVXoJ(ncMa"*Jc()slho0/o)>Zh]`7d+n,;qWp%s=:q>,[=Jbmaiqtos^n,<%\[f=#?
n,;qWp&"O\rqV-?r:kj<Jb[gkqt^$`o)&=^n,9]p`W,`4o)8I`qtos\rqZ6^j7f,<JbFZgo_.5;qtU'a
p%n@YrquHfq#8&.cN!\=o)8I`rqlKerqZQgp%SIZq"==Po(/4=Jb"B_nacAEo(;_MqtBp]qtU'aq"jmb
rquHfq#8A7cN!e@p&4mfp&"aaq"Xj_p%J:Tqt'URn*ub6Jae6[naQ#;q""FUp%7qNrqH<bqt^-dqu$$`
rr1"=dJs"@q#1*frqlKeqtU'_qt9jYrq$-[qsjRQo'_V,JaS*WkjJ-4p$htNrpp'[q"4RYp%SI\q"jmb
rquQiq#8S=fDkXFq#13irqlKerqZQgqtL!\rq-3]rpp'Yrp]ULrpK[Nqs==Jq!.Y=S`kXgJ`uaiq!%S=
qs47JrpBUNqsXFOqsj[Vrq$-]rq6'\rqQKgqtg<hrquQiq#8\@fDkaIp&4mfrql]kqt^6drqH<`rq-3]
rpp'XqsXFMqs=4Gq!%eAp#l,4S`PFaJ`ZOcpu_J:qrmh>p$;VDrpKdSqsaUUrq$-]q"F^]rqQKgqtg<h
rquHfrr1=FfDkaIq#13irqlThrqQBbqt9s\rpp'YqsaURrpB^Oqs4.Dqrn%BroWn7ro<e5S`,.YJ`67[
pu;22qrIY:qrdtBrosFJqs=4IqsXORrpg!Zrq-3_rqH<bq"k!erquQirr1=FgAh0Oq#13irql]kqt^-a
rqH<^rq$-Zrp]pUrpKdPrp0RJroj@EroO.?qr@S5o&0N)rna!tJ_bn5n_O*!qqq))ro3q;qrIb<roX4D
qs"+GrpB^Rrp]gTqt'gZqtL*brqZQirql]mq#1*hfDjS)rr2]krqucmrqcWirqQKerq??arq$$Xrp]pU
rpB^NrosFGroa:BroF(=qr.G1rnm_2ptYl'qqCr#S_/MGJ_9VIrn7)#rnI>*qq_/,ro!e7ro="=roO.B
roj@Grp0RMrpKdSrp]pXrq$-]rq??crqQKgqtg<hrquZlqu54IgAh0Oqu-Eirql]krqQKerq??`rq$-[
rp]pUrpKdPrp0RJroj@EroF(<ro!S/rn[S/rnIG+qq:l!rn$qqqp_CiJ^]2!!7UVjpso8nrn.5'rn@A+
rnRD,qqqD2ro*k:roF(Aroj@Hrp9XPrpTjUrpp'[rq-3`rqHEeqtg3erqucoqu54Ii;`]Rqu-NlrqlTh
qtU0brq-3]rposUrpKdOroj@EroO.>ro3q8rnm_3rnRM,rn.5$rmh"trmUbmqp=o[T[&,6J^4,;p!<<X
rmLeprm^qtrmq)#rn7;*rnRM0rnm_5ro3q<roX4Drp0RMqsXORrpp'[rq-*^rqQKhrql]mq#13kgAg+2
qu6KkrqucmrqZQgrqHEcrq69^rpg!WrpTjQrp0RKroa:Bro="9rnm_2rnIG+rn.5%rmh"sqpPJjrm1Sh
qoo&_rlUSLJ]WJbn]CdQrlb)\rm(Mhrm:YmrmUkrrmq)#rn.5(rnRM/rnm_7roF(@rosFJrp9XQrp]pW
rq$-]rq??crqQKgrql]mq#13kgAg+2qu6TnrqucmrqcWirqQKerq69_rpp'XrpTjSrp9XMroj@Cro3q7
rn[S/rn@A(rmq(trmC_lrm1JerlkAbrlY5^rlG)Zrl+6BXM]V,J\qK*o#1FErl>#ZrlP/^rlb;brm(Mh
rm:YlrmUkrrn%/&rnIG.rnm_6roF(Aroj@IrpB^QrpTjVrq$-^rqHEerqZQirql]mqu-NngAg+2qu6Tn
rqucmrqcWhrqHEbrq-3]rpg!WrpKdOroj@EroF(;rnm_2rn7;&rm^qqrm:YjrlkAbrlP/[rl4rUrkn`P
qnW*Do"Cp5J\6QHrOhg:rkJ-ArkeZPrl"fUrlG)]rlkAfrm:YlrmUksrn.5*rndY4ro="=roa:Grp9XQ
rp]pWrq$-]rq69brqZQirql]mrr)iqgAg+2q#13irql]jrqQKerq69^rpp'XrpB^Nrp'LGroO.<rndY0
rn7;%rm^qprm1SgrlY5]rl>#Vrkn`OrkJHGrk/$<rji$<qmW6,J[U-<qR61.rj_s<qn)j?rk8<GrkSNM
rkn`SrlG)]rlb;drm:Ymrmh##rn@A-ro!e8roX4Erp0RMrpTjUrpp'\rq69brqQKgrql]mqu,7Kj8],X
qu-Nlrql]krqZQgrqHEarpg!VrpKdPrp0RIroO.=rnm_1rn@A&rmLemrm(MerlY5[rl"fQrkJHHrk8<C
rji$<rjMg6rj;[2qm-4+TWj!OJ[#!Tqm$.+rj2U2rjDa6rjVm;rk&0BrkABHrkSNNrl+lWrlb;crm1Sk
rmh#"rnIG/ro*k;roa:Erp0RNrpTjUrq$-]rqHEerqZQirql]mrr)`ni;_j;rr2fnrqucmrqZQfrq69_
rpp'XrpKdOroj@EroF(;rndY/rn%/"rm:YirlkA_rl+lSrkSNIrk/6@rjMg5rj)O-ric=(riQ1$ri>pr
SZ%+<JZ/4>ri5suriH+$riZ7(rilC-rj2U3rj_s=rk8<GrkSNNrl4rZrltGgrmC_rrn@A-ro!e9roO.C
rp0RNrp]pXrq$-^rqHEerqcWkrqucoqu5ORj8],Xrr)iorql]jrqQKerq69_rpg!VrpB^Mroa:Bro3q7
rn[S,rmh"rrltGarl>#Vrk\TJrk&0>rjMg4rilC*riH+"ri5srrhoamqkX4dpnFXZJY@XgrLs"\qkO.d
rhf[mri#grri?%#rilC.rj;[6rjr*ArkJHLrl+lXrlkAermUkurn@A.ro*k:roX4Erp0ROrp]pXrq69b
rqQKgrql]mrr)`ni;_j;rr2oqrqucmrqZQgrqHEarq$-YrpKdProsFEro="8rnRM,rmq(rrm(Mdrl+lR
rkJHFrjr*:rj2U/riZ7%ri5sprhTOgrh9=aqk*bVqjaFNJX_4[!1WYOrgj%\qk3h[rhKIhrhoarriQ1'
rj)O1rjMg<rkABJrl"fYrltGhrmh##rnRM1ro*k<roj@HrpB^Rrpg![rqHEerqZQjrqucoqu5ORj8],X
rr)iorqcWhrqHEcrq$-[rp]pSrp'LGro=":rndY-rmq(srm(Mdrl+lQrkABCrjDa3rilC(ri5sprhKIe
rh07^rg`tVrg<\Oqiq)Drf[/@VN?@jJWThlrfR)@qih#Drg3VPrgWnXrh'1_rhBCgrhoarriZ7*rj;[8
rk/6Grl"fVrltGirm^r"rn[S2ro3q>roj@IrpKdTrpp']rqHEerqcWkrr)`ni;_j;qu-NlrqcWhrqHEb
rpp'XrpTjProsFEro*k6rnRM*rmh"prlkA_rkn`Krjr*;riuI*ri?$rrh]Ugrh'1\rgWnSrg3VLrf[8B
plGE6rf!V1JW#);!/p`5qi1K6rfI,ArfmDIrg3VQrg`tZrh9=drhf[priQ1(rjDa8rk/6Irl+lZrm(Mj
rmq)&rn[S3roO.Brp'LNrp]pWrq-3_rqHEfrqlKhi;_j;rr)iorql]krqQKerq-3\rp]pTrp'LHroO.<
rndY.rmh"rrm(Mbrl+lOrjr*<rj)O+ri?$rrhKIdrgs+YrgEbNrfd>Drf@&<rf$i7reg]3reI/$JVJ`1
qM,!)reUQ2repc7rf-o<rfI,BrfmDJrgNhWrh'1arhf[oriQ1)rj;[8rkABKrlG)`rm:Yorn7;*rnm_8
roX4ErpB^Rrpg!Zrq-3arqZQjrquZli;_j;rr)iorql]krqQKerq-3[rpTjQrosFEro3q6rnIG(rmLel
rlb;[rkeZIrjMg3riZ7"rhf[grgs+Yrg*PIrfR2@rf$i7reUQ-re(3%qgnWpUORiEJUdEDrdb!!rdt-%
re19+reUQ3rf6u>rf[8Grg<\Urh07brhoasric=-rji$Arkn`WrltGirmq)%rn[S4roF(Brp0RNrp]pY
rq-3arqZQjrquZli;_j;rr)iorql]jrqQKdrq$-YrpKdOroj@Dro*k4rn@A&rmC_jrlP/WrkJHCrj2U-
ri5sorhBC`rgEbOrfd>Brf-o7reLK,re(3#rdXorrdFcnrd1;`JU)flqK`'erd=]nrdOirrdb!#re19*
re^W4rf6u@rg!JMrgj%]rhTOmriH+(rjVm=rk\TSrlb;frmh##rnRM2ro3q?rp'LLrpTjWrq-3arqQKh
rquZli;_j;rr)iorql]jrqHEbrq$-YrpKdOroa:Arnm_1rn@A$rm:Ygrl>#Srk8<>riuI)rhoahrgs+Y
rg!JGrf@&:re^W/rdt-"rdXoprd4WjrcnEdrcOlUJTQHbqK2^Zrc\9crd+Qjrd=]prdb!!re:?,reg]8
rfR2ErgNhWrh07fri,n#rj;[7rkJHOrlP/brmLerrnIG/ro*k=rp'LLrpTjWrq-3`rqQKhrquZli;_j;
rr)iorql]jrqHEbrpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0
re(3#rdFcmrcnEcrcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_
rh]UorilC0rk/6Irl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQe
rq-3[rpKdProsFDro3q6rn7;%rmC_hrlG)Urk/6?rilC%rhf[grgWnRrfd>Arepc2rdt-"rd=]jrce?`
rcA'Yrbh^PrbVRLTPB$mJSP$rrbMLLrb_XPrbqdVrcA']rcnEhrdFcsreCE/rf-o?rg!JNrh'1bri#h!
rj)O7rkSNOrlY5drmUl!rn[S3roF(Brp'LMrp]pXrq69crqZQjrqucoi;_j;rr)iorql]irq??`rpg!U
rp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFckrcS3]rc%jTrb_XM
rbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VSrh07friH+(rj_sA
rkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKcrq$-ZrpB^Nroj@B
ro*k3rn%.urm1Sbrl"fNrjVm4ri?$orh07Zrg!JFrepc0rdt-!rd"KdrcA'XrbqdPrb;@Eral(>raYq9
TO<=YJRJ=^qdKJ6rac"?rb2:Hrb_XRrcA']rcnEkrdk'%reg]7rfd>Krg`t^ri,n"rjDa=rk\TRrltGi
rmh#%rn[S5roX4Erp9XRrpp'\rqHEerql]mrr(dTj8],WrquclrqHEarq$-ZrpB^Mroa:?rnm_0rmh"r
rltG_rkn`KrjMg2ri,mkrgs+Vrfd>BreUQ,rdauprc\9_rc.pTrbVRJrau.?raPk7ra5Y2qd$((JR!b2
rET>-ra,S2ra>_7raYq=rb2:Grb_XRrc8!\rd+Qlrdt-(reg];rg*PPrh07griH++rk&0Erl+l[rm1Sn
rn@A-ro*k=roj@IrpTjWrq-3arqQKirqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLei
rl4rSrk/6<ric=!rh9=^rg*PFrf$i3rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qS
r`];*r`oG.ra5Y4raGe;rb)4Frb_XQrc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!
rnRM2roO.Brp0RPrpp'\rqHEerql]mrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5Y
rkSNDrj)O*rh]UcrgEbLrf$i4re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`br
r`9#"r`K/'r`fA/ra>_7ral(CrbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(
ro!e:roX4GrpKdUrq-3arqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjQrp'LEro*k5rn7;"rm1Scrkn`M
rj_s4riH*prgj%Urf[8<reCE'rd=]ircA'VrbVRIral(<ra5Y0r`];&qc<Snr_o[kJPgtqrDEGjr`&kt
r`B)$r`fA.ra>_8rau.Drb_XTrcS3drdXp"reUQ8rfmDNrh9=griZ7.rjr*Frl>#]rmC_srn@A/ro="?
rp0ROrpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$
rhBC]rg*PEre^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&kt
r`T5*ra,S3ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0RO
rpg![rqHEerqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp0RJroO.;rnRM)rmC_jrlG)Urk8<>riZ7"rh9=Z
rfmDBreLK*rd=]hrcA'Wrb;@DraPk6ra#M+r`9"tr_i_lqbR)`VG)P7JP?#9r_<Afqb[8ir_rerr`K/'
ra,S4rac"Arbh^TrcS3drdOj#rf$i<rg*PTrhTOprj;[8rkSNQrlY5ermq)%rndY7roX4FrpKdTrq$-_
rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjProsFDrnm_0rn%.srltG_rk\TIrjDa.ri,mirg<\Krf$i2
rdk&qrcS3\rb_XJral(:ra#M-r`K/"r_remr_NMgr_3;aUIp)0JP,c2r_*5ar_EGgr_`Yor`B)%r`oG0
raGe<rbMLOrcJ-crdOj"reg]8rg!JRrhBCmrj)O4rkJHOrlP/crmh#$rn[S6roX4FrpKdTrq$-_rqQKh
rqucoi;_j;rr)inrqZQfrq-3\rpKdOrosFCrnm_0rmq(rrltG^rkSNGrj;[,rhoafrg3VIrepc0rdk&p
rcJ-ZrbVRHraYq7r`fA)r`9"sr_`Yjr_3;ar_!&ZVFZ8/JOo`1r^m)]r_*5ar_NMir_i_qr`B)&ra,S4
ral(Drb_XTrcnEire(3,rf6uCrgj%_ri5t&rjMg?rl"fWrm1Snrn.5+ro3q=rp'LMrpTjXrq??drqcWl
rr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Ygrl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`
rbqdNral(<ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@
rbVRRrc\9erdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mmrn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dT
j8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG&rm:Ygrl+lNrji$7ri?$qrgj%SrfR2:rdt,trce?^rbqdM
rac":r`oG*r`9"sr_WShr_*5^r^d#YqaIAMJOG&WrC$WRr^ZrYr^m)^r_3;er_i_pr`B)&ra#M4rb)4G
rc.p\rd+QoreLK2rfd>Mrh07iriuI2rk/6Jrl>#`rmUkurn[S5roO.DrpB^Rrq$-_rqQKhrqucoi;_j;
rr)inrqZQfrq-3\rpKdNroa:@rn[S-rmh"prlkA\rkABBrj2U(rh]Uarg!JEreUQ*rdFchrc.pTrb2:@
ra5Y/r`B)!r_i_kr_<Aar^d#Yr^QlTUI0T"JO9E)qaCEQr^ZrYr_!/_r_EGir_resr`];,raGe<rb;@M
rcJ-ardXp$reg]<rgEbXri#h$rjMg=rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],W
rql]jrqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4
r`];%r`&knr_<Abr^m)Zr^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_
rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]j
rqHEarpp'Vrp'LGro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%
r`&knr_<Abr^m)Zr^QcQr^6ZOWBl)$K0]N)6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>lJ.1B)ZNDDZ4_V
GQ*'jL&Qu/OoCdJT)PYeYPts/]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZQs69R\rr2lq
qu6Ejp\sgao)A(VlMfuGj8Rm6gA]Y%d/M8g`W!UN\c/o6WrAjoSGncPNrFh5JGsrqFoH@ZD#S)H@K'U4
>5hS%;uTSl9`@]a8cD6Z7f,UQ6iKEO5_21Q5QO2<rBgBKr^?`Tr^d#\r_3;er_`Ypr`T5)ra5Y9rb;@L
rcA'_rdOj#reg];rgEbWrhob!rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr)iqj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_remr_<Abr^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`fA0ral(B
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$
rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./F
JO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0G
rl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-
rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QL
VEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9
rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5
rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfR
qa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,
rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>
rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrV
r^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoau
rj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFE
ro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Y
r^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+e
riZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdM
roX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]
r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbW
rhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!U
rosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;a
r^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,I
rgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-Z
rpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMe
r_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:
rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_
rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_k
r_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/
rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQe
rq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qq
r_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#
reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]j
rq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#
r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?j
re:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucm
rqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,
r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_
rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tm
rql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4
r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XU
rce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[
rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<
ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:J
rcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BD
qu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLF
raGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"A
rb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sX
l2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdO
rau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8
rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucp
j8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3Y
rbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.
rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]m
rr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]f
rbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'
ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69brqcWk
rqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4rdauq
rcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!
r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']rqHEg
rql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?reLK'
rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yo
r`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjWrq69b
rqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnMrf-o4
rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_r_NMj
r`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^Rrpp']
rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_rf[8?
reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZr_3;e
r_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@KrpTjW
rq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5snrgWnM
rf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlWr^m)_
r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(BrpB^R
rpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&rhTO_
rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`Tr^ZrZ
r_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;roj@K
rpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5ri5sn
rgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQr^QlW
r^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3roF(B
rpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABBriuI&
rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TOr^?`T
r^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(ro*k;
roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fMrji$5
ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?Kr^6ZQ
r^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLesrnRM3
roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;ZrkABB
riuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!r^-TO
r^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGjrmq)(
ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Serl"fM
rji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cOrBU?K
r^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^rmLes
rnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qnrlb;Z
rkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qqr_NMer_*5]r^ZrVr^6QLVEf\tJO'0!
r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/'ra5Y8rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TRrltGj
rmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tmrql]jrq??_rpg!UrosFEro3q5rn@A$rm1Se
rl"fMrji$5ri5snrgWnMrf-o4rdauqrcS3YrbMLFraGe4r`T5#r_i_kr_3;ar^d#Yr^HfRqa./FJO"cO
rBU?Kr^6ZQr^QlWr^m)_r_NMjr`&l!r`];.rac"Arb_XUrce?jre:?/rfI,Irgs+eriZ7,rk&0Grl4r^
rmLesrnRM3roF(BrpB^Rrpp']rqHEgrql]mrr1sXl2UY[rqucmrqZQerq$-ZrpKdMroX4>rn[S-rm^qn
rlb;ZrkABBriuI&rhTO_rf[8?reLK'rd=]frbqdOrau.<ra,S,r`/qrr_WSgr_*5]r^ZrVr^6QLVEf\t
JO'0!r^-TOr^?`Tr^ZrZr_3;er_`Yor`K/(ra>_:rb2:JrcA'_rdOj#reg]:rgEbWrhoaurj2U9rk\TR
rltGjrmq)(ro*k;roj@KrpTjWrq69brqcWkrqucpj8\BDqu6Tnrql]jrqHEarpp'Vrp'LGro="6rn@A%
rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3ZrbVRHraGe4r`];%r_relr_3;ar^m)Zr^QcQr^6ZO
WBc#"K0TH(6N'7J6iKLQ7fGsX9)_N`:]=5j<W6/#>Q/"/Ac?ECDZ4_VGQ*'jL&Qu/OoCdJT)PYeYPts/
]`,hJa8XB`e,Ituh#?=4jo4NDmJcSRoD\I_q#:-hr;QZoro=%Cs82fprVl]nq>U-fo`"F\mf)MNkPjN@
h>Z.-ec*qpbl5T\^Ab\BZMpm'V>d"aPl?^BL]2i'I/\9fE;j\QBDu?=?N+.-<rQ(t;#X2g9E%N^8,c!T
7/fRQ6E*8%6%_H(6:1W;qa:?Nr^QlXr_!/`r_NMjr`/r#r`oG1rau.Drbh^Vrce?jre:?/rfR2Jrgs+e
ric=/rk/6Jrl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucorr1sXj8],Wrql]jrqHEarpp'Vrp'LG
ro="6rn@A%rm:Ygrl+lNrji$6ri5sorg`tPrf6u5rdauqrcS3[rb_XIraGe4r`];%r`&knr_<Abr^m)Z
r^QcQr^3PLJO4oSrBgBKr^?`Tr^d#\r_3;er_`Ypr`T5*ra>_;rb;@MrcA'_rdOj#reg];rgEbWrhob!
rjDa<rkn`Urm(Mlrn%/)ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="6
rn@A%rm:Ygrl+lNrji$7ri5sorg`tQrfI,8rdt,trc\9\rbh^KraYq7r`fA'r`/qqr_NMfr_!/\r^ZrW
r^<MKJO=uU!(6WOr^QlWr^d#\r_*5cr_`Ynr`9#%ra#M3rau.DrbqdXrcnElre:?/rf[8Krh'1griuI2
rk/6Jrl>#`rmUkurnRM4roO.DrpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpKdNroa:@rn[S-
rmq(qrlkA\rkABBrj2U(rh]Uarg!JEre^W+rdFcirc.pTrb;@BraGe2r`T5$r_i_lr_EGcr^m)[r^WVM
JOP,YqF1BRr^d#[r_*5ar_NMjr_retr`];,raPk>rbMLPrc\9erdb!'repc=rgEbXri#h$rjMg=rkn`U
rm(Mmrn.5*ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp'LGro="7rnIG'rm:Yg
rl+lNrji$7ri?$qrgj%SrfR2;re(3"rcnE`rbqdNral(<ra#M+r`9"sr_WSir_3;ar_!/\r^W_QJOY2[
qF:HSr^d#\r_*5br_WSmr`/r"r`oG/raYq@rbVRRrc\9erdk')rf$i?rgNhZri,n%rjMg=rkn`Urm(Mm
rn.5+ro3q=rosFLrpTjXrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Vrp0RJroF(9rnIG'rmC_irl4rQ
rk/6;riQ0trh'1Vrf[8=re:?&rd+Qcrc.pRrb)4?ra5Y/r`T5$r_renr_NMer_*5_qamYUJOk>_rCHoZ
r_!/_r_3;er_WSlr`/r!r`];-raGe;rbDFLrc8!_rd=]tre^W7rg!JRrhBClriuI2rkABMrlG)brm^r"
rn[S5roO.ErpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpKdOrosFCro!e2rmq(rrltG_rkSNG
rjDa.ri,mirgEbMrf$i2rdk&qrcS3\rb_XKrau.<ra#M,r`B(ur_renr_EGeqb6u^VFlD3JP,l5qb-o^
r_<Agr_`Ynr`9##r`fA/raPk>rbMLNrcA'ardOj"reg]8rg*PSrhBCmrj)O4rkABNrlY5ermh##rndY6
roO.ErpB^Rrq$-_rqQKhrqucoi;_j;rr)inrqZQfrq-3\rpTjProsFDro!e2rn%.srm(MarkeZJrjMg/
ri,mjrgEbMrf6u5re(2trce?_rbqdMrau.=ra5Y1r`T5$r`&kpr_WJfqb<q]JP:VgrCm2br_NDfr_i_o
r`/r"r`];-raGe:rb2:Krc.p[rd+Qmre:?1rfI,Frgs+briH++rji$Drl4r[rm:Yqrn7;-ro="?rp'LN
rp]pYrq??drqcWlrr(dTj8],Wrql]jrqHEarpp'Wrp9XLroO.<rndY,rmLekrlG)Urk8<?ric=$rhBC]
rg*PEre^W.rdXomrc\9[rb_XLrau.<ra5Y1r`];'r`/qsr_renr_T@cJPUhmqG7)er_`Ynr`&ktr`T5*
ra,S3ral(ArbMLNrc8!_rdOitreLK4rf[8Krh07eriQ1-rji$Crl+lZrm:Yqrn7;.ro="?rp0ROrpg![
rqHEerqcWlrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY,rmUkmrlP/WrkJHBrj)O)rhKI`rgEbJ
repc2rdk&rrcnE`rbh^Orb2:BraPk6r`oG,r`K/$r`9"tr_oRiJPq%sqGR;kr`&ktr`B)%r`oG0ra>_8
rau.Drb_XTrcS3drdXp"re^W8rfd>Nrh9=gric=/rjr*Frl>#]rmC_rrn7;.ro="?rp0ROrpg![rqHEe
rqcWlrr(dTj8],Wrql]jrqHEarq$-YrpB^MroO.<rndY-rm^qorlY5YrkSNDrj)O*rh]UcrgEbLrf$i4
re(3!rd4Werc.pTrbDFErac":ra>_3r`];'r`B)"qc0LmJQ.2"rD`brr`9#"r`K/'r`fA/ra>_7ral(C
rbVRQrcJ-`rdFctre:?/rfR2Grg`t_ri#h#rjVm=rkeZUrlkAirn%/(ro!e:roX4GrpKdUrq-3arqQKh
rqucoi;_j;rr)iorqcWgrq-3]rpg!Trp'LFro*k5rn@A%rmLeirl4rSrk/6<ric=!rh9=^rg*PFrf$i3
rdk&trd"Kbrc.pTrbMLIrau.=ra>_4ra#M.r`f8'VHJIQJQ_qSr`];*r`oG.ra5Y4raGe;rb)4Frb_XQ
rc8!^rd+Qnre:?.rf6uBrg<\Wrh]Uorj)O6rkABMrlY5brmUl!rnRM2roO.Brp0RPrpp'\rqHEerql]m
rr(dTj8],WrqucmrqQKcrq$-ZrpB^Mroa:@ro!e1rmh"rrltG_rkn`KrjMg2ri,mlrh'1Wrf[8@re^W-
rdk&rrcnEbrc%jRrbMLHrau.?raPk7ra5Y2qd$((JR!b2rET>-ra,S2ra>_7raYq=rb)4ErbVRPrc.p\
rd+Qlrdt-)repc;rg*PPrh9=hri?%)rjr*Drl+l[rm1Snrn@A-ro3q>rosFKrp]pXrq-3arqQKirquco
i;_j;rr)iorql]irq69^rpg!Trp0RIroF(;rnRM)rmUkmrlG)WrkJHArj)O(rhTOdrgNhOrfR2<re:?'
rdXomrc\9^rc%jTrbVRJrb)4Arac"<raDI-JRF%:qI'2/raYq<rau.CrbMLMrc%jXrcS3brdOitre19.
rf-o@rg<\TrhBCkriZ7.rk8<Irl4r^rmC_qrn@A-ro3q>rosFKrp]pXrq-3arqQKirqucoi;_j;rr)io
rql]irq??`rpg!Urp9XJroO.=rn[S,rmh"orlP/ZrkSNErjDa.ri#glrgs+Wrg!JDrepc3re(3"rdFck
rcS3]rc%jTrb_XMrbDFHph-I8JRsCDrFPk=rb2:GrbMLLrbh^Rrc.pZrcnEgrdOiure:?/rf6u?rg3VS
rh07friH+(rj_sArkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp']rqHEerql]mrr(dTj8],WrqucmrqQKe
rq69]rpTjRroj@Cro3q6rn7;%rmC_grl>#Urk/6?rilC%rhf[frg`tTrf[8?reg]1rdt-"rd=]jrce?a
rc8!WrbqdQrbVRLqeE!BJSB[LrFu7GrbMLLrb_XQrc%jVrcJ-_rcnEhrdFcsreCE/rf$i=rfmDNrgs+`
ri#h!rj)O7rk\TQrlP/crmUl!rn[S3roF(ArosFMrpg!Zrq??crqQKirqucoi;_j;rr)iorql]jrqHEb
rpp'WrpB^LroX4@ro!e1rn%.trltGbrl"fMrji$6riH*trhKIargWnPrfR2?repc0re(3#rdFcmrcnEc
rcJ-[pi-4NUMbX#JSt=%rbq[Qrc8!ZrcS3ard"KjrdXoure19.rf-o=rfmDKrgj%_rh]UorilC0rk/6I
rl+l[rm:Yorn7;-ro*k<roj@HrpKdUrq$-_rqQKgrql]mrr(dTj8],WrqucmrqZQfrq69^rp]pTrp0RH
roF(9rnRM,rm^qorlkA^rk\TIrjMg2riQ0trh9=_rgWnPrf[8Arepc4reCE(rdautrd=]lrd+Qgrce?a
TQGa,JTUa1rcS3`rcnEgrd4WlrdXotrdk'&reLK1rf6u?rfmDNrgj%]rhf[oric=.rj_sBrl+lYrm(Mk
rmh#&rndY5roX4Frp9XQrpp'\rq??drqcWlqu,IQj8],WrqucmrqcWgrq??`rpg!Vrp9XKroX4=rn[S-
rmh"qrm(Mbrkn`Mrj_s6ric=$rh]Ugrgs+Xrg3VJrf@&<repc2re:?(rdautrdOiord12^JU2lnpNlgc
rd=]ordXotre(3'reCE0rf$i:rf[8GrgEbVrh07dri,muriuI2rjr*Frl>#\rm1Smrn%/)ro!e8roa:G
rpB^Srq$-]rq??erql]mqu,IQj8],WrqucmrqcWhrqHEarpg!Vrp9XKroX4>rndY/rn%.trm1Serl+lR
rk/6=rj)O+ri,morh9=_rgWnQrfd>Drf@&;repc3re:?(rdt#uqgbGkJU`6#pOE0mrdk'#re(3'reLK/
repc9rfI,Brg!JMrgj%]rhBCiriH+&rj2U7rk8<KrlP/armC_rrn7;,ro*k;roj@IrpB^Srq$-]rqHEf
rql]mqu,IQj8],WrqucmrqcWhrqHEarpp'XrpKdNroj@Cro*k5rn@A%rmLekrlP/YrkJHDrjVm4riZ7$
rhoajrh9=_rgWnTrg!JHrfR2@rf-o9repc5re^W0TSA#PJVO#UreLK/reg]5rf$i9rf@&?rf[8Frg*PP
rgj%\rhBChri,n!riuI0rji$BrkeZUrltGhrm^r#rnIG0ro="?rosFLrpTjVrq$-]rqHEfrql]mqu,IQ
j8],XrqucmrqcWhrqHEbrq$-ZrpKdOrosFEro3q7rnIG(rmh"prlkA_rkeZJrjr*;rj)O,ri?$srhf[h
rh'1\rgNhRrg3VKrfd>ErfI,?rf6u;TT"G\JW0Gaqi1T8rf@&?rf[8Erg!JMrgNhUrgs+_rhKIjri5t"
riuI1rj_s?rk\TPrlY5crmC_rrn@A-ro*k<roa:GrpB^Rrpp'\rq??drqcWkrquZmi;_j;rr2oqrqucl
rqQKerq??_rpp'XrpB^Mroa:@ro*k5rn7;%rmLekrlb;[rk\TJrjr*:rj2U.riQ1"rhf[irhBCbrgs+Z
rgNhRrg3MHrfd>EqiRb;JWPGErK.#@qi^i?rfmDKrgEbTrgj%\rh07brh]Ulri?%$riuI0rji$@rkSNO
rl>#_rmC_prn.5+rnm_7roX4Drp0ROrp]pXrq69brqQKhrql]nqu5ORj8],Xrr)iorql]jrqQKerq-3]
rp]pTrp9XKroX4?rnm_1rn@A&rmC_jrlb;[rkeZLrk/6ArjDa3riuI*riH+!rhf[jrhKIdrh0.\qjmVS
URQh(JXZY/opl#Prh'(\qk="arh]Ulri?%#ric=,rj;[5rk&0Drk\TPrlY5brm:Yprn.5*rnm_6roO.C
rp'LMrpTjVrq-3arqQKgrql]mrr)`ni;_j;rr2fnrqucmrqZQfrq-3]rpp'WrpB^Mroj@Dro3q7rn[S+
rmh"rrm(McrlG)Wrk\TJrjr*=rjMg4rilC*riQ1#ri,[jrh]UirhH$XJY@XgoV)8ZrhTOiqksFlri5t!
riZ7)rj2U3rj_s=rk&0ErkeZRrlP/arm:Yorn%/&rndY5ro="@rosFJrpKdUrq$-]rqHEerqcWkrquco
qu5ORj8],Xqu-Nlrql]jrqHEbrq-3\rp]pTrp0RIroa:Aro*k5rnIG(rmh"prm(MerlG)Xrkn`NrkABE
rji$:rj;[1rilC*riZ7&riH+"ql63cJZ+-uoVhbhri?%"riQ1&ric=*rj)O0rjDa8rjr*BrkJHJrkn`T
rlP/arm1Skrmq)&rn[S3ro=">roj@IrpB^Srpp'[rq69brqQKhrql]mrr)`ni;_j;rr2fnrqucmrqcWi
rqQKerq-3[rpTjSrp9XMroj@Cro3q7rnRM,rmq(srm:YirlkAarl4rUrkeZLrkABFrk&0?rj_s9rjDa4
rj2L-rir-#JZs^0qQTk%rj)O0rj;[4rjMg8rji$?rk/6ErkJHJrkn`Srl>#]rltGgrmC_qrn%/(rndY5
roF(Aroj@IrpB^Rrp]pYrq-3arqQKgrqcWkrqucoqu5ORj8\oRrqucmqtg<erqHEarq$-ZrpTjRrp9XK
roX4@ro3q7rn[S,rmq(urmC_krltGcrlG)Zrl"fRrkeZMrkJHHrk/6Brjr*>rj_X1VRD&aJ[YNcqmZI4
qml^;rk&0BrkABHrkSNMrkn`Rrl>#\rlkAerm:Ymrmh##rn@A.ro*k:roO.Crp'LMrpTjUrpp'[rq-3a
rqZHfrql]mq#94Oi;`]Rrr)iorql]krqQKerq69_rq$-Zrp]pTrp0RIroa:Aro*k6rn[S,rn%/!rmLem
rm1Sfrlb;_rl>#Xrl"fRrkeQJqnM^8VS%JmJ\:rootC@>ot^RDrkn`Rrl4rYrlY5arm1SjrmC_ormh##
rnRM0ro!e9roF(Arp'LLrpTjUrpg!Zrq-3_rqHEfrqcWkrqucorr1XOi;`]Rrr)iorql]krqZQgrqHEb
rq-3\rp]pUrpKdPrp0RIroO.=rnm_2rnRM,rn.5$rmUkorm:Yjqp,2brlb;`rlP/\rl>#Wm)6!CJ]!&V
!5nBGqo/QTrlG)\rlY5`rlkAerm1SjrmC_orm^r!rn7;*rn[S2ro*k;roa:Erp0RNrpKdSrpg!Zrq69b
rqQKgrqcWkrquZlrr1XOi;`]Rrr)iorqlKerqQKerq69^rpg!WrpTjRrp9XKroa:Bro3q8rnm_1rnIG*
rn%/"rm^qrrmC_lrm1JerltGdrlauWprTMVJ]NJb!QiI[an<gUbPo`_c2Q#fci2;jdJhVoeGe"tfDaG%
gA]k+h>Z@3ir8!;k5OTDlMg2Mn,DhUnc&.Zo`"R`p\ssbqYpBkr;6Hlrn@D1s82fmrVl`oqtp6eq#:$e
o`"I]o)%qUmf)POkl0cEjo4<>ir7m8hu;L3h#?%,f`'J$ec+(te,.Sjd.5MUc@O8lcMGiZch5Zadf._p
eGe"tf)F;#g&Bb*h#?10hu;R5ir8$<k5OTDli-8Jn,DhUo)A7[o_\C^q#:-hqu6NgrVlfMs4[MPrqlZk
r;QTmqYp9hp\smco`"I]o)A.Xn,DbSm/H>Ml2KoGkPjQAir7m2hu;I2h#?(-gABS#f`'Ltebdjkdt,u!
df@kieG.SkfDaG%g&B_)g]$"*h>?+/i;V^7j8S-=kPj]ElMg/Lmf)\SnG`"XoD\C]pAXgcq"spbqu6Nm
rVQTGs4[MPrqlZkr;QTmqYp9ep\sjbo`"I]o)A1Yn,D_Rm/H>Ml2KoGkPjTBjS7a3i;VX5h>Z4&g[Egm
fR_\+f_sIkg&'P$h##q)hu;R2ir8!;jo4HBkl0iGli-8MmJcSRnG`"XoD\C]p&=^_q#:-hqtU*grVQTG
s4[MPrqQHkr;QTmqYU*cq#:$bo`"I]nc&%Wn,DbSm/H>Ml2KoGkPjTBjSS!7ipu%,hu;K!h1=C5h=9=u
hYZ4'i;Va8j87p:jo4EAkkjWDli-;Nn,DhRnb_qWo_\C^q#:*gqYpBkr:p6frn%2%s82fjrVl`oqtp6h
q"sg_p&=U_o)A1VnG_nUmJcJLlhfrDkl0cEk4Rg7j7qW)iITs=iUl+(iqqd5jSS*:kPj]El2L#Gm/-2I
n,DhUnc&.Zo`"O_p\Xa\qYpBkr:p6irmCbts7lTjrVQNlqu6Hhq>U0gp\smcp&=U\oD\:ZnG_nRmf)VQ
m/H>GlLO0<kP421jalNEjn.[0k54?7kkjZEli-8JmJcPQn,DhUnbD_To`"O_pAXgcq#:*dqYU0hr;QZi
rmCbts7lTgrVl`oqtU$eq>U0dp\XX_o`"I]o)A1YnFc8LmecDKm/H>GlM0V7k^hrKkk+*6l1jQ@li-8M
mJH>Kn,)VOnc&+YoD\C]p%\:\q#:*dqYpBkr:p6crmCbns7lTgrVQNlqtU$bq"sg_p&"C\oD\=Xnb_hH
muHgemXafime-&AnG_tWo)A7Uo`"OVp\ss_qYU0hr:p6crm(Pks7QBgrVQNiqtp6bq>9sdp\"4Yo_%hN
o)A0>n:C([nEBB=nbD\JoD\CTp&"L_q"X[aqYpBbr;QZcrm(Phs7lTarVQNlqtU$eq>U0^p\sm]p%@tJ
o9]$!nq$B%o(DVFo_A+VpA=U]q"sm^qYU0hr:U$`rlG,Ys7lTarVQNiqssU_q=XOCpRV#/p4;r0p>G]B
q"sm[qXsabr:U$`rkJKPs6osarUTmZqu6HDq47;3pjr54ptGQ@qXXOVr;QZ`rkJKGs7lT^rUp*]qgnV>
qLSKoqU#*9qss[RrV6B#s/l=orm(J,r.4csr9O:.rUTrfs/l=<rfmA4rIOq5rPJQ6s,[22rq$,?rdk'n
re^Z+s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#
s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$
s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$
s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#s+13$s+13$s4..#
s+13$s+13$s4..#s+13Zs6or<s5!^+s4..#s+13os6TaRrTX<4s7QDCs4..#s+14,s7QBLrV6<NrUTrC
s+14#s+13$s5*e<rUTm]qs=7CrJ1E(s4..#s+145s7lT^rVQN`qsXCSqt9mUrV6ARs+14#s+13$s6]j`
rq66_r;QTdqY9mTq"X[UqYU0er:9gcrfdA5s4..#s+14;s76-cr;6BgqYp<Wq#:$_pA=UTq"smdqXsab
r:U#Ps+14#s+13$s7ZKfrqQHkr;6BdqYU*cq"=CVpA"=Up@@tWq#:*aqYpBhr:p6crga">s4..#s+14G
s7lTgrVl`oqtp6eq>9sdp\sm`p&"CYoC)8LoC_bTp&"I[p\sseq=sgcqu6NgrV6Ads+14#s+13$s7u]o
rqQHkr;6Bgq>9sdp\=IZo`"IWo)A1JnGDbNo)&%Xo_\@]p\=O_q>U9gr:p6frhBFDs4..#s+11Ns8Vln
qu-Eirql]krqZQgq"Od\rq-3]rpoaOqsX"Ap$_eIrpp'[rq-*\qtL*brqZHfqtpBjrr)WkV>l,Hec14#
K)YiMq>UBlrquZjqtg3brqHEbrq-3]rposVqsaURrpKdPqs3_9rp0IJqsO@Mrp]pWrpp'[rq-*\qtL*b
rqcWkqu$?iq#7>oJcF:#JcC?%!<*#urqQHkr;6Bjq>U0gp\X[`o`"I]o)%qUn,D_Rm/-,Gl20]5kPj]E
l2L#Gm/-2In,DhUo)A7[o`"R`p\sseq=sjdr;6Hiri?'Ms4..#s+p^OrW3#tqu-Eirql]krqQKerq??`
rq$-[rp]gRrpB^Orp0IHqrn%BroNV0qrR_<roj@Hrp0RMrpB^RqsaUUrq$-]rq??crqQBeqtpBjrr)Wk
Y5a(Qec14#MuWSO!;ursrVl`lqu6Hkq>U-cpAX^`o)A1YnG_nUmJcGNl2KoGkPjTBjSn3:io]1uir8!;
jSn9?kPj]El2L#Jm/HGPn,DhUnc&.Zo`"R`p\sseqYpBhr;6Hfrj;]Vs4..#s,6pVrqcQorVc`nqtpBf
rqHEcrq69_rpp'XrpTjSrp9XMrosFGroa:Bro=";qr%J2rn[%uqq_/,ro!e8roF(?roa:ErosFJrpB^R
rp]pXrq$-^rq??crqQ9crquZlqu3u&JcF:#JcCl4q#:0h!;ucmrql]krqQKerq69_rq$-YrpTjSrp9XL
roj@EroF(=ro*k7rnm_2rnRM-rn?horn@A+rnRD,rnm_5ro*k:roX4DrosFJrp9XPrpTjVrq-*\rqHEf
rqcNhrqucoq#7c&JcF:#JcCu7q#:9krqu`l!W2cnqYp<ip\sjbo`"I]nc&%Wn,D\Qli-,Ik5OH@ir7m8
hu;I2gA]b(f)F5!eGdqodeM5hdf._peGe"tf)F;#g&Be+hYuI4ir8!;jo4HBkl0oImf)_Tnc&.Zo`"O_
p\sseqYpBhr;6Hfrk8>_s4..#s-3Q_rqQHkr;HKnqtpBfrqHEcrq-3]rpp'XrpTjQrp'LHroO.>ro*k6
rnRM-rn7;&rmh"sqpPJjrm1/\rm1SjrmLeprm^qurn.5(rnRM1ro!e8roF(@rosFJrp9XQrpg!Zrq-3`
rqHEeq"t'gqu-Ek^&NZ`ec14#RfE0^qu-Eirqc]l!W)Zlq#:$ep&=U_o)A+WmJcJOlMfuGjo49=i;VX5
h#?%,f`'G#e,Ibochl#bbl5f\b59B]bl5oeci2;jdf.bqf)FA%g]$"-hu;U6j8S3?l2L#JmJcSRnG`%Y
o`"O_p\t!fqYU0hr;QZirkSPbs4..#s.02brr2lqr;6BjqYp9jpAt$_rq69_rq$-YrpTjSrp'LHroO.>
ro*k6rn@A(rmq(trmC_krlkAbrlP/Zrl+lTrkn<Drkn`Rrl+lXrlY5arm1SjrmLerrn%/&rndY4ro3q<
roX4ErpB^Rrp]pYrq-3_rqHEerqcWkqu$?iq#8;5JcF:#JcD;@rr2]krquZjrqQKe!;6HepAX^`oD\=[
n,D_Rli-,Ik5OE?i;VU4g]#h(ec+"rci22gb5TK]a8X$V_Z%@M^[Jl8^])%J_>_@O`W!sXb5TT`cMl5j
e,IqtgA]n,hu;X7jSn?AlMg/Lmf)bUoD\C]pAXgcq"Xacr;6Hirl4ths4..#s.fVhrqlZkr;QTmqYp9h
pAjjep%A=Vrpp'Wrp9XMrosFEroF(:rn[S.rn.5"rmC_krlkAarl4rUrkeZLrk8<Drk%X0rk&0Brk8<G
rkSNNrl+lWrlb;drm:Ymrmq)%rnRM1ro*k<roj@Hrp9XQrp]pYrq-3_rqHEfrqcNhrqucoq#8D8JcF:#
JcDMFqu6TnrquZjrqcWirqHEbrq$3^!V>p^nG_nUmf)JMkPjTBiVqa6h>Z(+ec+"rci22gaSs0X_u@IN
^AbeE\c0&:[/RE#Yl;!.[/RK4\Gj)=^&GeG_>_CPa8X3[cMl5je,Iqtg]$(/i;Vg:k5OTDmJcSRnG`%Y
o`"O_p\sseqYpBhr;6HlrlP1ks4..#s.fVhrVl`lqu6Bfp\sgao)S=^o()eKrpB^Nroa:Bro="7rnRM+
rmh"rrm(MdrlP/Xrk\TJrk&0>rjMg4riuI,ric=&nuMbmrilC,rj2U2rjVm<rk8<Hrkn`SrlY5brm1Sm
rn%/'rn[S5roF(@rp'LLrpKdUrq$-]rqH<bq"t'gqu+Y:JcF:#JcDVIrr2fnqu$HjrqcWhrqHEcrq-3\
!:KsWn,D_Rm/H8Kk5OE?hu;F1gA]\&dJhGjbPoN\`;[RO^&GVB[f3W4Z2Us+XT#:"WrApeVZ*RoX8]4"
YPtd*ZMq92\Gj/?^])(K`W"$Zbl5rfeGe)!g]$(/iVqs<kl0lHmJcSRnG`%Yp&=[ap\t!fqYU0hr;QZl
rm1Uqs4..#s/c7trqlZnr;QTjqYp9hp\smco`"F\n,VkWmdC)>roj@Cro*k6rnRM*rmh"prltGbrl+lQ
rkABCrjDa3rilC(ri5sqrhTOgrh9=apn.GVqk="arhf[nri?%$riuI0rji$@rkSNOrl>#^rm1Skrmq)&
rn[S3roF(@rosFLrpTjVrq$-]rq??crqQKhrql]mq#13kdf4muec14#XT.tlrqucmrqZQgrqHEbrq-3\
rp]pU!:0aQm/H8Kk5OE?hu;I2g&BP$df.Mjao9<Z_Z%7J])K/;Z2Up*X8]$rV>d7hT`1S_Sc5/YS+rEN
S,SrWSc58\UAgtfVZ*UpXo>R([Jm]8]`,bH`;[jWbl5oee,ItugA]t.ir8$<kPjcGmJcVSo)A7[p&=^b
q#:*gqu6NdrR1^ss4..#s0)J%rqQHkr;QTmqYp9ep\sgaoD\7Yn,D\Sl2g28roX4@ro!e3rn@A&rmC_j
rlb;[rkeZKrji$:riuI*ri?$qrhBCbrgs+ZrgWnSrg*PKpltcCrg3VOrgWnXrh'1`rh]UmriQ1(rj2U6
rk8<Grkn`WrlkAfrm^r"rnRM1ro*k<rosFJrpKdSrpg![rqH<brqcWkrquQiqu57JJcF:#JcDqRrr2fn
rqucmrqcWirqQKerq-3\rp]pUrp9XL!9O=Ek5OE?iVq[4f`'G#d/M;hb5TBZ_>_.I\,NZ3Y5YL$V>d7h
T`1M]Rf8WPPQ$aEOT(=?NqeV5NrG+=OT(FBQ2[-LS,T#YU&LkeWrB."Yl;*1\c0AC_u@^Ubl5rfdJh_r
g]$(/ir8'=kPjfHmf)_Tnc&.Zo`"Uaq#:*gqYpBkr;QZlrn.7%s4..#s0)J"rVl`oqtp6hq>U0gpAX[_
nc&%WmJcGNklBcFjQ-=!rndY.rmh"rrltGarl4rSrk/6@rj;[.ri?$qrh9=_rgWnRrg!JFrf@&<repZ1
pk\p+repc7rf6u>rf[8HrgNhWrh07eri#gurj)O2rjr*Erl"fWrlkAfrm^r#rnRM2ro=">rp'LLrpKdU
rq$-]rqHEerqZQirql]mq#/kFJcF:#JcDqRqu-NlrqlThrqQKerq69^rp]pUrp9XKroO4?!TN,<hu;I2
f`'A!ci2,e`W!aR^Ab\B[JmB/X8]'sUAgb`S,ScRP5^RBNW+k8M>i8/K_U2sK`6`*L]321N;ek:OoC[G
RJrcVU&LkeWrB1#Z2V63]`,_G`;[pYc2Q,if)FA%hYuL5jSnBBli-8Mn,DnWo`"R`p\sseqYpBkr:p6C
s+14#s+13Xs82fprVl`oqu6Hkq>U0gp\sgaoD\:ZnG_kTl2KiEj8e*=i8FUhrn%.urm1Sfrl4rRrkABA
rj)O+ri?$orh9=^rg<\MrfI,=reg]0re(3%rdautrdOWirdOirrdb!"re:?,repc9rfR2GrgWnYrhBCk
riQ1(rjMg;rkSNPrlG)armLerrn7;-ro*k<roj@HrpTjUrpp'\rqHEerqZQirql]mqu-Nng])j)ec14#
[K$.'rr)iorql]krqZQgrq??`rq$-YrpB^Nroj@Cro*q7!T)]4g&BS%dJhDiao93W^&GVB[JmB/X8]!q
U&LY_R/W?LOoC==M#N,-K)U9!If=`oHN&3bGlE!fHiAElIf=otKDpW)MZ/V7P5^dHRJriXV#I=lXo>[+
\,O&>_Z%ORbPoiee,J#!h>Z@3jSn?Al2L&Kn,DhUoD\F^p\t!fqYpBkr;6HlrnII(s4..#s0_n(rr2lq
r;QTmqYp9hp\sjboD\:Zn,D\QlMfuGir7j9g]?3crn.5"rm1Scrl4rQrk&0=riuI(ri#gjrgj%WrfmDD
rf-o5re19%rdOiord4WhrcS!WqfMg]rcnEhrdFcqrdt-(re^W7rf[8Hrg`t]rhTOnric=-rji$BrkeZU
rm(Mjrmq)&rn[S4roX4Drp0ROrp]pXrq-3`rqQKhrql]mqu-Nng])j)ec14#[K$.'rr)iorql]krqQKe
rq-3\rp]pSrp'LHroF(;rn[Y.!SQ0*eGdhobPoK[_Z%7J[f3T3Y5Y<tUAgb`R/W?LO8b"8LAlc'If=`o
GlDjbF8KqUDu4GODtn;NF8g@^H2`6kJGt3#M#NG6OoC[GSGo2\V#IIpYl;$/]DfSE`;[pYc2Q/jfDaP(
i;Vd9jo4NDm/HGPnc&.Zo`"Uaq>U6iqu6NmrVlfNs+14#s+13Xs7lQlr;QTmq>U0gpAX[_nG_nUm/H8K
k5OE?hu;F3fE'XWrmLekrlY5XrkJHCrj;[/ri5smrh'1Yrg!JFrepc1re(3!rd+QgrcJ-ZrbqdQrbVRL
qeH+GrbVRNrbh^SrcA']rd"Kkrdb!%reg]7rfd>Krg`t]ri#gtrj)O4rk&0GrlG)_rm:Yqrn7;-ro3q=
roj@IrpB^Srq$-]rqHEerqZQjrquZlg])j)ec14#[K$%#rql]krqZQfrq69^rp]pTrp0RIroX4=rn[S-
!7h2%f)F%qc2Pf`_Z%7J\,NZ3Xo>6tU&LV^Qi<-HNrFk6KDpB"HiA6gFoH@ZDZ4JOCAqoABDZBACAr#J
D>nJQEW1.\HN&?lJc:E'M>iS8Q2[3NTDk\dWW'+#[Jm`9^])4Oao9TbeGe,"h#?72ir8-?lMg/Ln,DnW
o`"R`q#:*gqYpEirS.@'s4..#s1&+.rqlZnr;QTmqYp9hpAX^`o)A+WmJcDMk5OH@i;VL1f)X8#e'n<@
rlY5YrkABBrj2U+ri,mkrg`tTrf[8?re^W,rdOinrc\9]rc%jRrb;@Eral(>raY_3raYq<rau.CrbVRO
rc.p[rcnEjrdt-'repc;rfmDNrh07dri?%'rjMg=rkeZRrlb;grmh#$rndY5roO.Drp0ROrpg!Zrq69b
rqQKhrql]mrr)`niW"K/ec14#\GuR-qu-Nlrql]jrqHEbrq-3[rpKdProsFDro3q6rn7;%!7Cnrdf.Ji
aSs'U]`,G?ZMpm'VZ*7fRf8TOO8b"8LAlc'I/\BiF8g.XDZ4ALB)Z??A,]p9@/F=1@/aU6A,^$<Ac?BB
CAr/NErL4\HN&EnKDp]+NrG4@R/W]VUAh+jYl;$/])KME`;[pYd/MPof`'_+i;Vg:kl0lHmJcVSo)A=]
p\sseqYpBkr;QZlro*m.s4..#s1&+.rqlZnr;QTmq>U-fo`"I]nc%tUm/H5Jjo49=h>Z+,eH!nrcd2U4
rl+lOrji$9ric=#rh]Udrg<\Lrf-o5re19"rd"Kdrc%jRrbDFFraYq9ra5P/pg*l*ra5Y4raPk=rb;@J
rbqdVrcnEjrdb!&repc:rg*PSrh9=hriQ1*rj_sArkeZUrm(Mjrn%/(rndY7roX4ErpB^Srpp'\rqHEe
rqcWkrqucoqu5RSJcF:#JcE7[rr2oqrqucmrqZQgrqHEarq$-YrpB^Mroa:@ro*k3rn%.u!7(\lci2#b
`;[ON\,N`5Xo>3sU&LP\Pl?dDMZ/;.JGsopFoHF\DZ4ALB)Z<>@/aO4?2e(->528">5he+?N+@3A,^'=
B`;lJE;jtYHN&?lK)UT*N;f">RJrcVU].:mYPts/^&GkI`r=6^dJh\qgA]q-ir8*>l2L&Kn,DkVo`"Ua
q#:*gqu6NmrVQTQs+14#s+13[s8N#srVl`oqu6Ejq#:$eo`"F\n,D\QlMfuGir7j7g]#b&dK%Mmc-?7.
rkn`KrjMg2ri?$orh07Zrfd>BreUQ*rdOimrcJ-ZrbVRIral(<ra5Y1r`\bmr`];*ra,S4raYq>rbDFL
rc8!_rd=]qreCE0rfR2Irg`t^ri,n"rj;[:rkJHOrlb;erm^r$rn[S4roX4Drp0ROrp]pYrq??drqZQj
rqucoqu5RSJcF:#JcE7[rr2oqrqucmrqZQgrq??`rpp'Wrp9XLroX4=rndY.rmh"r!6bJfbl5W]_Z%4I
[f3Q2WrAalT)P,VP5^I?L]2l(If=TkErKtUCAqiEA,]j7>lIt,=oMP&=85hq=8l>$>5he+?iFL5Ac?EC
D#SDQG5cddJ,Y0$M>iS8Q2[6OT`1nhXT#R*\c0>B`;[pYc2Q2kf`'Y)hu;^9kPjfHmf)_ToD\F^p\t!f
qu6NmrVQTQs+14#s+13[s8N#srVl`oqu6Bip\smco`"F\mf)POl2KfDiVq^5g&BM#ciD5ibKKn'rkSND
rj2U-ri#gjrgj%SrfI,<re:?$rd4Werc.pTrb2:BraPk6r`fA)r`Atspf.5mr`B)$r`];-ra>_8rau.E
rc%jYrce?ire(3*rf6uBrgEbYrhf[priuI3rk&0HrlP/armLetrnIG1roF(@rp'LMrpTjXrq69brqQKi
rqucoqu5RSJcF:#JcE7[rr2oqrqucmrqQKerq??`rpp'Vrp0RJroO.<rndY-rmUkm!6YDdbPoHZ_#CnD
Zi7-,VuEChSc4oRO8b(:L&QT$HiA0eE;j\QBDuH@@fB[4>5hY'=8l5!<;TVn<;ons=8l>$=oM\*?N+I6
B)ZNDDZ4_VGQ*$iKDpZ*NW,.@Qi<WVV>dLoZ2V63]Df\Hao9QadJhbsgA^"/j8S3?lMg2Mn,DqXp&=^b
q#:0ir;QZlro*m.s4..#s1&+.rr2lqr;QQlq#:$epAX[_nc%tUli-/Jjo46<hYu4-e,IYnaoTZ-rl"fO
rji$6riQ0trh07\rg!JDrepc/rdOimrcS3YrbMLGraYq9ra#M,r`K/#r`&Ykqc*Pqr`B)%r`oG/raPk=
rb;@KrcA'_rd=]sreCE3rfd>Jrgs+cri5t%rjVm=rkeZUrlkAhrn%/'rnm_8roX4FrpB^Rrpp']rqHEe
rqcWkrr)`niW"K/ec14#\GuR-rr)iorqcWhrqHEcrq$-ZrpKdOrosFDro*k5rn7;"rm(Se!QrRa`;[RO
\c/o6Xo>6tT`1J\Q2ZjDMuJD/If=ZmFoH=YC]7uGA,]p9?2e%,=T2A#<;9Dh<;oqt=8lA%>lJ(/@fC!=
C&VuKF8gC_I/\`sLAm23PQ$pJT)PScWrB7%\,O#=_Z%XUbl6#hfDaM'hu;[8k5OZFmJcSRo)A=]p\sse
qYpBkrVQTQs+14#s+13[s8N#srVl`oqYp9hp\smcoD\:Zmf)POl2KfDiVq^5g&BM#ciD2hb0'_%rkSND
rj)O+ri#girg`tRrf@&:re19"rd+Qdrc%jRrb2:AraGe4r`fA)r`8Jer`9#"r`];,ra5Y6rau.Drbh^V
rce?hrdt-(rf-oArg<\Vrh]UorilC2rk&0HrlG)_rmLetrn@A/ro="?rp'LMrpTjWrq69brqQKhrql]n
qu5RSJcF:#JcE7[rr2oqrqucmrqQKerq??`rpp'Vrp0RJroO.<rndY-rm^qo!6YDdbPoHZ_#CnDZi70-
W;`OjSc4rSOT(4<L&QT$HiA0eEW0kTB`;TB@fBa6>Q.e)=8Q"m<;ons=8l>$>5hk-@/a[8B)ZQEE;jtY
GQ*$iKDpZ*NrG:BRJrlYVZ*UpZ2V63]Df\Hao9Qadf.ktg]$.1jSn<@lMg2Mn,DqXp&=^bq#:0ir;QZl
ro*m.s4..#s1&+.rr2lqr;QTmq>U0gpAX^`o)A+Wm/H;Lk5O?=hYu7.ec*tsbQ5r3rl4rSrk/6=riuI&
rhBC`rg<\Jrf-o4rdk&trcnE_rbh^Mrau.>ra5Y0r`fA)r`K/$pf@Aqr`K/'r`oG0raGe;rb;@Jrc%j[
rd"Kmre:?.rf@&DrgNhZri#gtrj2U7rkABMrlY5brmUl!rnIG0roF(Arp0ROrp]pYrq69brqZQjrquco
qu5RSJcF:#JcE7[rr2oqrqucmrqZQgrq??`rq$-YrpB^MroX4>rnm_0rmh"r!6kPhc2Pc__u@@K[f3Q2
X8\poT`1AYPQ$XBM>i/,J,X`mFoHC[C]8#HB)Z6<?N+4/>Q.e)=Sl2!=T2J&>Q.n,?2e72@fC$>CAr)L
F8gC_HiATqL]352OoC^HS,T/]WW'("[/R]:^])4ObPoieeGe2$h>ZC4jo4KCm/HJQnc&1[pAXgcq>U9j
r;QZlro*m.s4..#s1&+.rr2lqr;QTmq>U0gp\sgaoD\7YmJcDMkPjN@iVqX3fDa5!cN2A<rlG)WrkJHA
rj2U+rhf[grgWnOrfI,:re19$rd4Werc8!Urb;@DraYq8ra5Y1r`fA*pf[T"r`oG/ra>_8ral(Brb_XR
rcJ-crdFctreUQ4rf[8Krgj%`ri5t$rjDa=rk\TRrltGirmh#%rn[S5roX4Erp9XQrpg![rqHEerqZQj
rqucoqu5RSJcF:#JcE7[rr2fnrqucmrqZQfrq-3]rpg!Urp9XJroO.=rn[S,rm_"p!RK*kao99Y^](eC
[JmB/WW&anTDk5WPl?[AM#N),If=WlG5cI[D>n;LBDuE?@K'X2?MIh*?N+=2@/aX7B)ZNDD#SAPErL=_
IK"crLAm,1O8bIESc5>^VuEgtZMqB5^Ac"KaSsKadJhbsg]$(/j8S3?l2L)LnG`"Xo`"Uaq#:-hqu6Nm
rVQTQs+14#s+13[s8N#prVl`oqu6Hkq#9scoD\=[n,D_Rl2KfDir7g6g&BP&d/hYBrlb;]rkeZIrj_s4
ri?$rrh9=[rg*PFreg]0rdauqrd"Kbrc%jRrbDFFral(<ra>M.qdBD4raYq>rb;@Irbh^UrcS3drdOiu
reUQ6rf[8Jrh'1bri,n#rj2U8rkSNOrlP/crmUl!rn[S3roF(Brp'LNrpg!Zrq-3arqQKhrql]mrr)`n
iW"K/ec14#\GuR-qu-Nlrql]krqQKdrq-3\rpTjRrp'LFroF(:rnIG(!7Ltte,IVkb5T?Y^Ab\BZi7*+
WW&XkSGnoTP5^I?M>i/,If=]nG5cO]E;j_RC&VcEAc?6>A,'L3A,^$<B)ZKCD#S>OEW1+[GlE-jK)UK'
MuJh;Pl@-NT`1bdX8]C'[f3r=_Z%ORbPoogec+8$hYuL5jo4NDli->Onc&.Zp&=^bq#:-hqu6NmrVQTQ
s+14#s+13Xs7lQlqu6Hkq>U-fp&=R^nG_kTli-,Ik5O?=h>Z+.ecF@Qrm:YhrlG)Urk8<?riuI)rhoah
rgj%TrfR2?reUQ+rdXoorce?arc%jSrbVRKrb2(>qe5tDrbMLMrbqdUrc\9erdFcsreCE/rf@&DrgEbX
rh]Unric=/rji$Crl+lYrm(Mmrn.5*ro!e8roa:Grp9XQrpp'\rq??drqZQirquZlg])j)ec14#[K$.'
rr)inqtg<drq??`rpg!Vrp9XKroX4?rndY/!7q8'fDa1scMkrb`;[RO])K)9Yl:[%V#I%dRf8TOOoC:<
LAli)If=ZmGlDjbEW0nUD>nANC\VZDC]8/LDZ4VSFT-I_H2`6kJGt9%MZ/V7PQ$sKSGo8^W;`mtZMqB5
]`,eIa8X9]d/MVqg&Bh,ir8'=kl0oImJcVSoD\C]pAXmbqYpElrVlfNs+14#s+13Xs82fprVl`oqu6Hk
q#:$eo`"F\nG_hSlMg#HjSn-;h>l40g"HASrm:Yfrl+lRrk8<>rj)O+rhf[hrgs+VrfmDCre^W/rdk&t
rd=]ircS3]qf)OQqelCOpi-4Rrc\9drdFcrre(3+rf6u?rg*PRrh07driH+'rj;[:rkJHNrlY5brmLet
rnIG1ro=">rosFKrpKdUrq$-]rqHEfrqcWkrqucorr1[PJcF:#JcE.Xqu6TnrqucmrqcWhrqHEbrq$-Z
rpTjQrp'LGro3q8!8IV1h#>t*eGdenao9<Z_#CtF\,NZ3XT#0tUAg__Rf8QNOT(7=M#N),Jc:,tI/\Kl
GlDj\F8L(YGQ)jdHiAHmJ,Y'!LAm&/NrG4@QN!ERU&LkeWrB4$Zi7N7^Ac"KaSsKadJh_rgA]q-iVr!=
kl0oImf)_To)A:\pAXjdqYpBkr;6HlrnII(s4..#s0_n(rr2lqr;QTmqYp9hp\smco`"I]nG_kTm/H5J
jo46>h#Z?frn7;%rmC_hrlP/XrkABCrjDa/ri?$rrh9=_rgEbMrfR2=re^W/rdt-"rdOinrd"Kfqfi$a
rd"Kird=]prdk'$reLK1rf-o?rg3VQrh'1dri,n!rj2U5rk/6Irl+lZrm1Slrn%/(rndY7roX4ErpB^R
rp]pYrq69brqQKhrql]mqu-Nng])j)ec14#[K$.'rr)iorql]krqZQgrqHEarq$-Zrp]pTrosFEro=(;
!T;o8g]#h(e,I\mbl5W]_>_1J\Gif5Y5YL$V#I(eSc5#UQ2ZmENW+h7LAli)K)U<"J,XolI/\ToJ,Xut
K)UK'L]352NrG1?QN!BQT)PJ`WW'%!Yl;*1])KME`W!sXcMl8kec+8$hYuL5jo4KClMg8OnG`"Xo`"Ua
q#:*gqYpBkr;6HlrnII(s4..#s0)J"rVl`oqtp6hq#:$ep&=R^nG_nUm/H8KjoFBAio9sprn[S+rmUkm
rlb;[rkeZKrji$9ric=%ri#gjrgs+Yrg3VIrfI,=repc4reCE*pk/HsreCE-reg]6rf6u?rg*POrgj%^
rhTOnriZ7*rjVm>rkSNOrlY5brmC_rrn7;-ro*k;roj@Irp9XQrpp'\rq??crqQKhrql]mq#/kFJcF:#
JcDqRrr2fnrqucmrqcWhrqHEcrq-3[rpTjRrp'LH!9F7Cjo46<hYu7.ec+"rcMkrb`r<gR^&GSAZi7-,
X8]$rUAgeaS,ScRQ2ZsGO8b1=N;e_6M>2o+M>iG4N;ek:OoCRDQN!?PSc5>^VZ*RoXo>X*[Jmf;^]).M
aSsH`d/MPog&Be+i;Vg:k5OWEm/HGPnG`%Yo`"R`p\sseqYpBkr;QZlrn.7%s4..#s0)J%rqlZnr;QTm
qYp<iq#:$eo`"F\nG_nUm/H8MjoOW,ro=":rn[S+rmh"prltGbrl+lQrk8<?riuI*ri?$prhKIcrgj%W
rg*PIrf[8Brf@&=pl595rf@&?rf[8Grg3VRrgs+_rhTOnriQ1(rjMg:rkJHMrl>#^rm1Skrmq)'rndY6
roO.Brp0ROrp]pWrq$-]rqHEerqZQirql]mrr)`nf`-O&ec14#YQ+V$q#13irql]krqQBbrq-3]rp]pU
rp9^N!UAtLk5OH@i;VR3gA]\&dJhGjbPoK[_Z%:K\c0&:Z2Up*X8]!qUAghbT)P8ZS,SfSQN!0EPl?sI
Qi<BOS,SuXTDkP`V>dFmXo>R(Zi7K6^&GeG_u@dWbl5rfeGe,"h#?41iVqs<l2L#Jmf)\Snc&1[p\Xab
qYpBkr:p6frn.7%s4..#s0)Itrr2lqr;QTmqYU*fq#:!do`"I]nG_hUlN->;roj@Dro="8rn[S+rmh"r
rm(Mbrl4rRrk8<BrjDa2ric=%rhoalrhBCbrh'1[rgWJIrgWnWrh'1`rhKIiri5t"riuI0rjMg<rkJHL
rl>#^rm1Smrmq)%rndY6roF(Arp'LLrpTjWrq-3_rqHEerqZQirql]mqu-<hf`-O&ec14#XT/1squ-Nl
rqlThrqQKerq??`rpp'X!:BmUmf)MNkl0]CiVqa6h#>t*ec*qpc2Plb`W!^Q^Ab_C[JmN3Yl:d(WrApq
V#I.gU&L_[TDP;YU&LhdVZ*OnX8]:$Z2V-0\c08@_#D:Oa8X<^ci2>kf)FD&h>Z@3jSn<@l2L)Ln,DkV
oD\C]pAXgcq#:-hqu6NgrVlfEs+14#s+13Is8N#prVQNlqu6Hkq#:$epAX^`nc8+Zn*g8Crp9XKroX4?
rnm_1rn@A&rmC_jrlb;\rl"fOrk8<BrjMg4riuI+riH+"ri5sqntuDcri?%"ric=*rj)O2rj_s?rkJHK
rl+lZrlkAfrm^r!rnIG/ro*k<roj@HrpB^Rrp]pYrq69arqHEfrqcNhrqucoqu4qAJcF:#JcDVIq#:0g
rql]krqZQgrq??`rpp-[!V,^ZnG_kTli-,Ik5OB>hu;I2g&BP$df.Slb5TK]`W!^Q^AbbD\Giu:[/R?0
YPt]nXT#C%YPtd*Zi7B3\Gj,>^&GhH`;[dUao9Tbd/MMnfDaM'hYuL5j8S6@lMg/Ln,DhUo)A:\pAXgc
q>U6iqtU*arm1Uqs4..#s.fVkrr2lqr;6BjqYp<ip\sjboDnI`oCMtNrpTjSrosFFroO.<rnm_2rn.5#
rmLelrltG`rl+lSrkSNIrk/6@rjMg5rj2'trj2U2rjDa8rjr*BrkJHKrl"fVrlP/brmC_ormq)'rndY4
roF(@roj@KrpTjUrq$-]rq69brqQKhrqlTjqu-Nnao?qlec14#U]:,gqu-Eirql]krqQKe!;-Bcp&=U_
o)A+Wm/H>Ml2KiEjSn*:h>Z1.f`'D"dJhJkbl5ca`r<pU_Z%=L^&G\D]C3<0]DfJB^&GeG_#D7N`W!pW
bPofdd/MJmf)FA%h#?41iVqs<kl0lHm/HJQnG`%Yo`"O_p\t!fqYU0hr;QZirlP1ks4..#s.fVbrqlWm
qu6Hkq>U-hp&Xm\rq-3]rpg!VrpB^Nroj@Dro="9rndY/rn%/"rmUknrm(MdrlG)Zrl"fQrk\TLrkJ$<
rkJHJrk\TOrl"fVrlY5arm1Slrm^qurn@A,rnm_7roF(Arp'LLrpKdTrpp'\rq??crqZQirqlKgp&<)5
JcF:#JcD;@q#:9krquZjrqcWi!;?Ngp\sjbo`"I]nG_nUmf)MNkl0]Cj8S$:hu;@/f`'J$e,Iboci2/f
bPoW_`r<sV`;[[F_Z%IP`;[aTaSs?]bl5rfd/MJmec+2"g&Bk-i;Va8jSn<@l2L)Ln,DhUoD\C]p&=^b
q#:-hqtp<grV6B3s+14#s+13=s7lTjrVQNlqZ-HnqYL3drqHEbrq-3\rpTjRrp9XLroa:Bro3q8rnm_1
rn@A(rmh"srmC_kqp,)_rlb)Zqoeu_rm(Mhrm:Ymrm^qurn7;*rnRM1ro*k:roX4Erp0RNrpTjUrq$-]
rq69brqZQiqtpBjrr)Wk_#Jucec14#RfDsXqu$Hj!;Z`mqYp<iq#:!do`"I]nc&%Wn,D\Ql2KlFk5OE?
iVqa6h#?(-g&BV&ec+%sdJhMfchPc^ci2;jdJhVoeGe%uf`'V(h#?41i;Va8jo4HBkl0oIm/HJQnG`"X
o`"R`p\t!fqYpBer:U')s+14#s+137s7lTmrVl`nqZ6TkrqcWirqHEbrq-3]rpg!WrpTjQrp0RIroX4@
ro3q8rnm_2rn@A(rmq)!rm^qrqpP8ermLeprm^qtrmq)#rn7;+rndY4ro3q;roO.Broj@IrpKdTrpg!Z
rq-3_rqHEerqcWkqu$?iq#7u,JcF:#JcCl4q#:0h!;ucmrql]krqQKerq69_rq$-YrpTjSrp9XLroj@E
roF(=ro*k7rnm_2rnRM-rn?horn@A+rnRD,rnm_5ro*k:roX4DrosFJrp9XPrpTjVrq-*\rqHEfrqcNh
rqucoq#7c&JcF:#JcCl4o)8Xer;?QkrqcWirqQKdrq69_rq$-YrpTjRrp9XMrosFFroX4@ro=";qr%J2
rn[%uqq_/,ro!e8ro="=roX4DrosFJrp9XOrpTjWrq-3_rq??crqZQirqlKgp&;H#JcF:#JcCZ.q#19l
!WDurr;6BjqYp<ip\X[`o`"F\nc&%Wn,D_Rli-/Jkl0cEjo4??j87iui;Va8j8S-=jo4HBkl0iGli-8M
mf)\SnG_tWoD\C]pAXgcq#:-hqtp<grV6B!s+14#s+13+s8)]qrr2fnqu$HjrqcWhrqHEcrq-3]rpp'X
qsXOOrp9XMqs+(Broa:Bn)XB-qrdtBrp'LKrp9XOrpTaRrpp'[rq-3`rqHEeqtg3erqucoq#7GrJcF:#
JcCQ+qYp<iqu$HjrqcWirqQKeqt9jYrq$-Zrp]pUrpB^Orp0RKqs!8,rosFIrp0RMqsFCOrp]pWqt'gZ
rq69brqQKgrqcWkq#'gaY5a(Qec14#K)YiMq>UBlrquZjqtg3brqHEbrq-3]rposVqsaURrpKdPqs3_9
rp0IJqsO@Mrp]pWrpp'[rq-*\qtL*brqcWkqu$?iq#7>oJcF:#JcC<$!WW2prqlZkr;QTmqYp<iq"XU_
p&=U_oD\=RnGD\Cme-&GnG`"XoD\CZp&"L_q#:*dqYU0hr;QZirh]XGs4..#s+11Ns8VZhqu$?gqtg<f
rqQBbq"=XYqt'^UrpfIHqsj[Vq"+LWqt9s_qtU'arqcWkp&+L^V>l,Hec14#JcGQGq#:'erqucmqtg3c
qtU0brq?6^qt0dWn+-JLp%87VqtBp]rqQKgq"k!erquQiq#7#fJcF:#JcC<$pAapeq#13iqtp0bqt^-a
p%S7Tq"=FUo(W.YrqZ?crqlTjq#1!eSH"0?ec14#JcGHDo)AXep&+^aqtg!]rqPXMqtTaXrqc<bqu$?i
p&:K]JcF:#JcC<$mJm(_p&4R]rqlBbq"aCRq"aLWqtp9go)8RePQ-46ec14#JcFp5q#9a\qu$$^n+u_S
p&+:Wq#6BTJcF:#JcC<$kPsoJqu,dWn,)JLrr)*\OT0n3ec14#JcFU,p&<nJq#'1No)=FEJcF:#JcC<$
bl@&/n,;MMJcGECJcF:#JcC<$bl>QZJcGECJcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$
JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#
JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#JcC<$JcC<$JcF:#J,
~> %APLeod
EI
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
16 510 m
60 510 l
62.761421 510 65 507.76141 65 505 c
65 461 l
65 458.23859 62.761421 456 60 456 c
16 456 l
13.238579 456 11 458.23859 11 461 c
11 461 11 461 11 461 c
11 505 l
11 507.76141 13.238579 510 16 510 c
16 510 16 510 16 510 c
h
16 510 m
f
1 J
1 j
0 0 0 sc
1 0 0 -1 -54 551 cm
70 41 m
114 41 l
116.76142 41 119 43.238586 119 46 c
119 90 l
119 92.761414 116.76142 95 114 95 c
70 95 l
67.238579 95 65 92.761414 65 90 c
65 90 65 90 65 90 c
65 46 l
65 43.238586 67.238579 41 70 41 c
70 41 70 41 70 41 c
h
70 41 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 38 483 cm
/F1.1[ 12 0 0 -12 0 0]sf
-18.351562 4 m
(!"#$%#)[ 6.673828 6.673828 6.673828 3.333984 6.673828 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
212.76001 403 m
266.76001 403 l
266.76001 349 l
212.76001 349 l
h
212.76001 403 m
f
0 0 0 sc
1 0 0 -1 -54 551 cm
266.76001 148 m
320.76001 148 l
320.76001 202 l
266.76001 202 l
h
266.76001 148 m
S
1 1 1 sc
CM
212.76001 305 m
266.76001 305 l
266.76001 251 l
212.76001 251 l
h
212.76001 305 m
f
0 0 0 sc
1 0 0 -1 -54 551 cm
266.76001 246 m
320.76001 246 l
320.76001 300 l
266.76001 300 l
h
266.76001 246 m
S
1 1 1 sc
CM
212.76001 207 m
266.76001 207 l
266.76001 153 l
212.76001 153 l
h
212.76001 207 m
f
0 0 0 sc
1 0 0 -1 -54 551 cm
266.76001 344 m
320.76001 344 l
320.76001 398 l
266.76001 398 l
h
266.76001 344 m
S
1 1 1 sc
CM
212.76001 109 m
266.76001 109 l
266.76001 55 l
212.76001 55 l
h
212.76001 109 m
f
0 0 0 sc
1 0 0 -1 -54 551 cm
266.76001 442 m
320.76001 442 l
320.76001 496 l
266.76001 496 l
h
266.76001 442 m
S
3 w
293.76001 202.5 m
293.76001 245.5 l
S
293.76001 300.5 m
293.76001 343.5 l
S
293.76001 398.5 m
293.76001 441.5 l
S
322 150.5 m
376 150.5 l
S
322 160.5 m
376 160.5 l
S
322 170.5 m
376 170.5 l
S
322 180.5 m
376 180.5 l
S
322 190.5 m
376 190.5 l
S
322 199.5 m
376 199.5 l
S
322 248.5 m
376 248.5 l
S
322 258.5 m
376 258.5 l
S
322 268.5 m
376 268.5 l
S
322 278.5 m
376 278.5 l
S
322 288.5 m
376 288.5 l
S
322 297.5 m
376 297.5 l
S
322 346.5 m
376 346.5 l
S
322 356.5 m
376 356.5 l
S
322 366.5 m
376 366.5 l
S
322 376.5 m
376 376.5 l
S
322 386.5 m
376 386.5 l
S
322 395.5 m
376 395.5 l
S
322 444.5 m
376 444.5 l
S
322 454.5 m
376 454.5 l
S
322 464.5 m
376 464.5 l
S
322 474.5 m
376 474.5 l
S
322 484.5 m
376 484.5 l
S
322 493.5 m
376 493.5 l
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 243.38501 376.5 cm
-19.5 4 m
(&%'\(\)*)[ 8.666016 6.673828 6.673828 6.673828 3.333984 0.000000 ] xS
1 0 0 -1 239.76001 277 cm
-19.5 4 m
(&%'\(\)+)[ 8.666016 6.673828 6.673828 6.673828 3.333984 0.000000 ] xS
1 0 0 -1 239.76001 178.75 cm
-19.5 4 m
(&%'\(\),)[ 8.666016 6.673828 6.673828 6.673828 3.333984 0.000000 ] xS
1 0 0 -1 243.38501 81.5 cm
-19.5 4 m
(&%'\(\)-)[ 8.666016 6.673828 6.673828 6.673828 3.333984 0.000000 ] xS
1 0 0 -1 371.52499 376.5 cm
-29 4 m
(./0/12\)34$5)[ 7.330078 2.666016 3.996094 2.666016 6.673828 6.673828 3.333984 8.666016 6.000000 3.333984 0.000000 ] xS
1 0 0 -1 371.52499 278.5 cm
-29 4 m
(./0/12\)34$5)[ 7.330078 2.666016 3.996094 2.666016 6.673828 6.673828 3.333984 8.666016 6.000000 3.333984 0.000000 ] xS
1 0 0 -1 371.52499 180.5 cm
-29 4 m
(./0/12\)34$5)[ 7.330078 2.666016 3.996094 2.666016 6.673828 6.673828 3.333984 8.666016 6.000000 3.333984 0.000000 ] xS
1 0 0 -1 371.52499 82.5 cm
-29 4 m
(./0/12\)34$5)[ 7.330078 2.666016 3.996094 2.666016 6.673828 6.673828 3.333984 8.666016 6.000000 3.333984 0.000000 ] xS
0.60000002 i
/Cs3 SC
0 0 0 sc
CM
239.76001 33 m
248.76001 24 l
239.76001 15 l
230.76001 24 l
h
239.76001 33 m
f
1 w
1 0 0 -1 -54 551 cm
293.76001 518 m
302.76001 527 l
293.76001 536 l
284.76001 527 l
h
293.76001 518 m
S
3 w
293.76001 496.5 m
293.76001 517.5 l
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 299.625 22 cm
-31.5 4 m
(6)s
-25.5 4 m
(\(07/1"$/%1)[ 6.673828 3.996094 9.996094 2.666016 6.673828 6.673828 3.333984 2.666016 6.673828 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
11 303.5 m
65 303.5 l
65 202.5 l
11 202.5 l
h
11 303.5 m
f
1 w
0 0 0 sc
1 0 0 -1 -54 551 cm
65 247.5 m
119 247.5 l
119 348.5 l
65 348.5 l
h
65 247.5 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 38 253 cm
-19.007812 4 m
(8"$$\(09)[ 8.003906 6.673828 3.333984 3.333984 6.673828 3.996094 0.000000 ] xS
3 w
0.60000002 i
/Cs3 SC
0 0 0 sc
1 0 0 -1 -54 551 cm
266.76001 174.5 m
119.40833 278.63098 l
S
263.13501 274 m
119.49516 294.14407 l
S
263.13501 372.25 m
119.45869 309.91345 l
S
266.76001 469.5 m
119.35686 324.84656 l
S
1 1 1 sc
CM
205.95251 510 m
273.5675 510 l
273.5675 456 l
205.95251 456 l
h
205.95251 510 m
f
1 w
0 0 0 sc
1 0 0 -1 -54 551 cm
259.95251 41 m
327.5675 41 l
327.5675 95 l
259.95251 95 l
h
259.95251 41 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 239.76001 483 cm
/F2.1[ 12 0 0 -12 0 0]sf
-20.05957 -3 m
(!"#$%$&)[ 6.433594 3.468750 4.910156 6.685547 7.447266 6.685547 0.000000 ] xS
-25.429688 12 m
('%&$#\(\)*$)[ 3.457031 7.447266 4.488281 6.685547 4.910156 4.412109 6.626953 6.146484 0.000000 ] xS
0.60000002 i
/Cs3 SC
0 0 0 sc
1 0 0 -1 -54 551 cm
119.50002 68 m
259.95251 68 l
259.95251 67 l
S
3 w
295 95 m
295 149 l
S
1 1 1 sc
CM
215.5 438.5 m
266.5 438.5 l
266.5 423.5 l
215.5 423.5 l
h
215.5 438.5 m
f
/Cs1 SC
0 sc
0 i
1 0 0 -1 241 431 cm
-20.05957 4.5 m
(!"#$%$&)[ 6.433594 3.468750 4.910156 6.685547 7.447266 6.685547 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
124 490.5 m
156 490.5 l
156 475.5 l
124 475.5 l
h
124 490.5 m
f
/Cs1 SC
0 sc
0 i
1 0 0 -1 140 483 cm
-10.839844 4.5 m
(+,-)[ 8.314453 6.462891 0.000000 ] xS
ep
end
%%Trailer
%%EOF

Added Docs/Images/nodes.graffle.

cannot compute difference between binary files

Added Docs/Images/nodes.png.

cannot compute difference between binary files

Changes to Docs/Images/packet.eps.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%!PS-Adobe-3.0 EPSF-3.0
%%HiResBoundingBox: 0.000000 0.000000 472.000000 74.000000
%APL_DSC_Encoding: UTF8
%APLProducer: (Version 10.5.8 (Build 9L30) Quartz PS Context)
%%Title: (Unknown)
%%Creator: (Unknown)
%%CreationDate: (Unknown)
%%For: (Unknown)
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 0 0 472 74
%%EndComments
%%BeginProlog
%%BeginFile: cg-pdf.ps
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
%%Copyright: All Rights Reserved.
currentpacking true setpacking
/cg_md 141 dict def

|









|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%!PS-Adobe-3.0 EPSF-3.0
%%HiResBoundingBox: 0.000000 0.000000 420.000000 74.000000
%APL_DSC_Encoding: UTF8
%APLProducer: (Version 10.5.8 (Build 9L30) Quartz PS Context)
%%Title: (Unknown)
%%Creator: (Unknown)
%%CreationDate: (Unknown)
%%For: (Unknown)
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 0 0 420 74
%%EndComments
%%BeginProlog
%%BeginFile: cg-pdf.ps
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
%%Copyright: All Rights Reserved.
currentpacking true setpacking
/cg_md 141 dict def
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742






743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799

800
801

802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818

819
820
821
822
823
824
825
826
827
828

829
830
831
832
833
834
835
836
837





838
839
840
841
842
843
844
845
846


847
848

849
850
851
852
853
854
855
856
857

858
859

860

861
862
863
864
865
866


867
868
869
870
871
872
873
874
875
876
877
878
879


880
881
882
883
884
885
886
887



888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909


910
911
912
913
914
915
916
917
918

919
920
921
922
923
924
925
926
927

928
929
930
931
932
933

934
935
936
937
938
939
940

941
942
943
944
945
946
947
948
949
950
951
952
953


954
955
956
957
958
959
960
961


962
963
964
965
966
967

968
969
970
971
972
973
974
975
976
977
978
979

980
981
982
983
984
985
986
987
988
989
990
991

992
993
994
995
996
997
998



999
1000

1001
1002
1003
1004
1005
1006
1007
1008
1009
1010




1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027

1028
1029
1030
1031
1032
1033
1034


1035
1036





1037
1038




1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055

1056


1057
1058
1059
1060
1061

1062
1063
1064
1065
1066


1067
1068
1069
1070
1071

1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092


1093

1094




















1095

1096
1097
1098




1099
1100
1101
1102



1103






1104
1105
1106
1107








1108

1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125

1126
1127
1128
1129
1130
1131
1132


1133


1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157



1158
1159
















1160




1161
1162
1163
1164
1165








1166

1167

1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180

1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199






1200
1201



1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229



1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259

1260
1261
1262
1263
1264
1265
1266
1267
1268






1269
1270



1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286



1287
1288

1289
1290
1291
1292
1293

1294
1295
1296
1297
1298
1299
1300









1301








1302









1303
1304



1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332



1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361

1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407












1408




























































1409
1410
1411
1412
1413
1414
1415
1416









1417









1418








1419



1420
1421
1422
1423
1424
1425
1426

















































1427









1428











1429









1430
1431
1432
1433
1434
1435



1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451






1452
1453



1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469



1470
1471

1472
1473
1474
1475
1476

1477
1478
1479
1480
1481
1482
1483









1484








1485









1486
1487



1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515



1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544

1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590












1591




























































1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618


1619
1620
1621
1622

1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647

1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
































1694








































1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709



1710
1711

1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778



1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808

1809
1810
1811
1812
1813
1814
1815
1816
1817






1818
1819



1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835



1836
1837

1838
1839
1840
1841
1842

1843
1844
1845
1846
1847
1848
1849









1850








1851









1852
1853



1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881



1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910

1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956












1957




























































1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984


1985
1986
1987
1988

1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013

2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064



2065
2066
2067
2068
2069
2070
2071

2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098



2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128

2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155



2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185

2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235



2236
2237

2238
2239
2240
2241
2242

2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281





2282
2283
2284
2285
2286
2287
2288

2289
2290
2291
2292


2293
2294



2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308

2309


2310
2311








2312
2313
2314
2315

2316
2317


2318
2319
2320


2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410


2411
2412
2413
2414
2415
2416
2417
2418
2419
2420

2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593

2594
2595
2596
2597
2598
2599
2600


2601
2602
2603
2604
2605


2606
2607

2608
2609


2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655

2656

2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674


2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687

2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699

2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723

2724
2725
2726
2727
2728
2729

2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759


2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905



















2906







2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956


























2957
2958
2959
2960
end
setpacking
%%EndFile
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 0 0 472 74
%%BeginPageSetup
cg_md begin
bp
sdmtx
%RBIBeginFontSubset: LucidaGrande
%!FontType1-1.0: LucidaGrande 1.0000.6.0040
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 14 dict begin/FontName /LucidaGrande def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /colon put
 dup 34 /T put
 dup 35 /Y put
 dup 36 /P put
 dup 37 /E put
 dup 38 /O put
 dup 39 /F put
 dup 40 /R put
 dup 41 /M put
 dup 42 /D put
 dup 43 /A put
 dup 44 /semicolon put
 dup 45 /C put
 dup 46 /K put
 dup 47 /S put
 dup 48 /U put
 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -2186 1 index div -1509 2 index div 3361 3 index div 2381 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C000006B66670676D000000000000075400000D33676C7966000000000000148800000ED06865616400000000000023580000003868686561000000000000239000000024686D747800000000000023B4000000446C6F636100000000000023F8000000246D617870000000000000241C0000002070726570000000000000243C00000CAF062B0019000005C80025000005C800250000000000000000000000000000043E001800000000FFDB00000000FFE800000000FFDB0000FE75FFE8000000000000FED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000080000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5006F000CFF3BFF91FFF400BF00680014FF41FF98FFEC00000000000000000000000000000000000000000082FF7E00DF00D200C900B400AD009B00DE00D200C500BE00B900AB00E300D200C600B900AD00950062000000A4009D0085000000AA00A10094007200AD00A100940085000000C5000000000000000000000000000000000000012800000000000000000000000000F700F700970141004A00F7000000000000000000000000000000000094009400940000000000000000000000000000000000000000000000000000000000000000000000000000000000E6FF1A00000000000000000000000000000000000000DEFF22007C007C027502E400750075009A009400AC00A0000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A0001900000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B00000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B0000006F0073000000000000000000B9008C010A007E00C50031004F009A004200000000000000000000000000000000000000000000012800F700A00063009400820082009700C600B300B3007C007B009100000000000000000000000006440000000004A00019000000000800043E0018000004000000000000000534000000000000FFE70000FF780000000000C500940000FED80000000000E100760063003C002D001E000FFF1FFF3BFF48FF65FF79FF9DFFBD00DE00B900AD00A600DE00D200C500BF00B900A900910197007C0062005C005602CC01ED0197007C006F00620056004A011D010D009E00940035000000000000000000000000000005C8002500000503
 00000000000008000000000000000400000000000000047B000000000000FFDB00000000FFE70000000000000000FF3B00000000000000000192011700F700C800C300B800AD00A6009C0092008A0080007B00740068005A0050001E003A00000192011700F700E500D200C500B900AD008A0080007B00740068005E0054004A000000000141003E00DE00DE00000000000000000000000005D500190000056600000000000008000000000000000400000000000000043E001800C503C200DE00000000FFE70000000000000000FE00000000000000000000CD00C500AD00A100940088007C0075006F0063003100F700C600B900A0006300C500B300A10088007C0075006F00630056003100F700C600B900C600940082006F0063003E003200190000FF3AFF7EFF9DFFCE0057006F02B3012801830088008800000000000000000000000000000000000000AC008800C501ED006201BC001800DE013E000000000000000000000000000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190000000000000000000000000000007C00AC00C500960000000000000000000000000085005D006500000000000000000000000000000000000000000000000000000000080000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000005ED01B0009400D200B600AC007B007B007C00000000000000000000000000000000000000B904A000C50063007A005100410087014100DE01280068009D0064007500D2012000DE00D100B40000000000000000000000000000000000000000006100AC00D0006F006F036603660000000000000000000000000000000000000000000000000000004A004A004A000000000000000000000000000000000000000005ED00000000000008000104005C000004000000000000000000000000000000FFDB000000000000000000000000000000000000000000000000003E050300D8011200AD009300D800F700AD00B700790067050300D800920000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190082006E002A002A002A002A000040405249483C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C0118B0184358456AB0194360B00C2344231020B00C4EF04D2FB000121B21231120332F592D2C0118B0184358B0052BB000134BB0145058B100403859B0062B1B21231120332F592D2C0118B01843584EB0032510F221B000124D1B2045B00425B00425234A6164B028
 5258212310D61BB0032510F221B0001259592D2CB01A435821211BB00225B0022549B00325B003254A612064B01050582121211BB00325B0032549B0005058B0005058B8FFE238211BB0003821591BB0005258B01E38211BB0003821595959592D2C0118B0184358B0052BB000134BB0145058B90000FFC03859B0062B1B21231120332F592D2C4E018A10B10C194344B00014B1000CE2B00015B90000FFF03800B0003CB0282BB0022510B0003C2D2C0118B0002FB00114F2B00113B001154DB000122D2C0118B0184358B0052BB00013B90000FFE038B0062B1B21231120332F592D2C0118B018435845646A23456469B01943646060B00C2344231020B00CF02FB000121B2121208A208A525811331B212159592D2C014BB0C85158B10B0A432343650A592D2C004BB0C8515800B10A0B4323430B592D2C00B00C2370B1010C3E01B00C2370B1020C453AB10200080D2D2CB0122BB0022545B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C60B0022523442121212D2CB000B0122B2121212D2CB000B0132B2121212D2C014BB0C85158B00643B00743650A592D2C2069B04061B0008B20B12CC08A8CB8100062602B0C642364615C58B00361592D2CB1000325456854B01C4B505A58B0032545B0032545606820B004252344B0042523441BB00325204568208A2344B00325456860B003252344592D2CB00325204568208A2344B003254564686560B00425B0016023442D2CB00943588721C01BB01243588745B0112BB00D2344B00D7AE41B038A45186920B00D23448A8A8720B0A05158B0112BB00D2344B00D7AE41B21B00D7AE4595959182D2C208A4523456860442D2C456A422D2C01182F2D2C0118B0184358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB0194360B00C2344218A10B00CF6211B21212121592D2C01B0184358B0022545B002254564606AB00325456A6120B00425456A208A8B65B0042523448CB00325234421211B20456A4420456A44592D2C012045B00055B018435A584568234569B0408B6120B080626A208A236120B003258B65B0042523448CB00325234421211B2121B0192B592D2C018A8A45642345646164422D2CB00425B00425B0192BB0184358B00425B00425B00325B01B2B01B0022543B04054B0022543B000545A58B003252045B040614459B0022543B00054B0022543B040545A58B004252045B04060445959212121212D2CB0032520B0072587052E23208AB00425B00725B0142B1021C4212D2CC02D2C4B525845441B2121592D2CB00243583DED181BED592D2C4B505845441B2121592D2C01184B52588A2FED1B212121592D2C4B53234B515A58B003254568B003254568B003256054582121211BB00225456860B003252344
 2121591B212121592D2CB00243583DCD181BCD592D2C462346608A8A462320468A608A61B8FF8062232010238AB10C0C8A70456020B0005058B00161B8FFBA8B1BB0468C59B0106068013A2D2C2045B0032546524BB013515B58B0022546206861B00325B003253F2321381B2111592D2C2045B00325465058B0022546206861B00325B003253F2321381B2111592D2C004BB0C8515800B00743B006430B592D2C8A10EC2D2CB00C4358211B2046B0005258B8FFF0381BB0103859592D2C20B0005558B8100063B003254564B00325456461B0005358B0021BB04061B00359254569535845441B2121591B21B0022545B00225456164B028515845441B212159592D2C21210C6423648BB84000622D2C21B08051580C6423648BB82000621BB200402F2B59B002602D2C21B0C051580C6423648BB81555621BB200802F2B59B002602D2C0C6423648BB84000626023212D2C184B5358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB00C2344218A10B00CF6211B218A11231220392F592D2CB00225B002254964B0C05458B8FFF838B008381B2121592D2CB0134358031B02592D2CB0134358021B03592D2CB00A2B2310203CB0172B2D2CB00225B8FFF038B0282B8A102320D023B0102BB0054358C01B3C59201011B00012012D2C4B53234B515A58381B2121592D2C01B0022510D023C901B00113B0001410B0013CB001162D2C01B00013B001B0032549B0031738B001132D2C4B53234B515A5820458A60441B2121592D2C184B5358B00425B004254964B00325B00325496468B0408B6120B080626AB00225B00225618CB00C234421B004251023B00CF61BB00425B0042511122320392F59CC21212D2C0118B0184358B0052546234564611B21B00425B004254A59B00E23442310B00EEC2310B00EEC2D2CB01B435820B0016045B000515820B0016020452068B0005558B0206044211B212121591B20B0016020452068B0005558B8FFE06044B01C4B50582045B02060441B21591B21212159591B21592D2C4B53234B515A58381B2121592D2C4B5458381B2121592D2C4B52587D1B7A592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B00326
 5358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592DB8005D2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8005E2C2020456944B001602DB8005F2CB8005E2A212DB800602C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800612C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800622C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800632C2020456944B001602020457D691844B001602DB800642CB800632A2DB800652C4B20B003265358B0801BB040598A8A20B003265358B0022621B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B80003265358B0032545B8014050582321B8014023211BB003254523212321591B2159442DB800662C4B535845441B2121592DB800672C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800682C2020456944B001602DB800692CB800682A212DB8006A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8006B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8006C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8006D2C2020456944B001602020457D691844B001602DB8006E2CB8006D2A2DB8006F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800702C4B535845441B2121592DB800712C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800722C2020456944B001602DB800732CB800722A212DB800742C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800752C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800762C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800772C2020456944B001602020457D6918
 44B001602DB800782CB800772A2DB800792C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8007A2C4B535845441B2121592D0000020100000005000500000300070014B706020400060204002FCDD4CD002FCDD4CD3130211121112521112101000400FC400380FC800500FB00400480000000000200E1000001A6043E000300070057B70004100420040304B8FFC0B31D244804B8FFC04029151948049E050F0F011F012F01030D0301401D24480140151948019E000704038500400809008530302B011A18104DED3939002FED2B2B5F5E5D3FED2B2B5D31303335331503353315E1C5C5C5C5C50378C6C6000000000200E1FEBF01A6043E0009000D00A2400E1402340202F40201C309D3090209B8FFD840141D25480C09010909101D2148000A100A200A030AB8FFC0B31D24480AB8FFC0402C1519480A9E0B0F01B300B20F061F062F06030D06401D24480640151948069E050F041F042F04031903040700B8FFC0401209114800000A0D03078506400E0F068530302B011A18104DED1739C02B10CD5F5E5D002FED2B2B5E5DF6ED3FED2B2B5D3130012B005E5D2B5D5D711335363D01233533151003353315E14747C5C5C5FEBF4A25BB17C5A6FED10488C6C6000200110000056E05C80002000A0096405EA70901990401960501090001080A010602010004030913520301037F0A09140A0A09020506081352060106800708140707080400059270028002020202070109080306030A0307600A900A020A08090A030F013F01CF01FF0104010106072F3333192F5D1733182F5D002F17333F333312392F5DED33328705102B872BC410C0C08718102B872BC410C0C03130015D5D5D5D5D5D010B01010321032301330103ADFCFD02D7A1FD8DA3C3024BD002420236027EFD82FDCA019AFE6605C8FA3800000000010068FFDB051705ED001500DB4039E71001091501E91501050C01090C01E90C01D70701280A380A02780A880A02250F01050F450FA50FC50FE50F05390D01090D490DC90D030908B8FFF040450D11480605460556056605047804E804024604014A025A026A0203B7010109010109014901C90103270D01B80401B505E5050208920F091F092F09030A090B920604149113B8FFC0401B090C48131191001309130F13010F030E7D034017136F0216036C022B2B011A18104DED5F5E5D10C6003FFDD62BED3FFDD65E5DED3130015D5D71005D715D5D5D5D5D2B5E5D715D715D715D5D71715D715D052000111000213205152423220011100033323715060339FEA7FE88017F015CC7010BFED0A5F1FEF8011A
 F4D2F0DB25019501730172019841C569FEBAFED7FEE5FEB981B47100000200BF0000059605C8000A001600AF40523913018913E913023C12010C124C1202860E01020E420E0209070901E709F70902480958096809B809040B09014908B908F908032408013408014206520602250501050515054505C5050404041404020A04B8FFE040290E11480A0F4A0F6A0F030D030F116F11021106169201030B9200107D070B7E004018076F0217006B022B2B011A18104DED10ED002FED3FED3130015F5E5D5F5E5D002B5E5D5D715D5D715D5D5D5D715E5D5D5D715D71331121320417161110002125212037361110272E012B01BF01ECDC010F639DFE7AFE9EFEE3010D012078817F4DD6D7AD05C86275BAFED0FE8FFE6A9D9BA501160105955B43000100BF0000042505C8000B003D4021089205400100059230300492010309920007030B05097E00400D0B70020C006B022B2B011A18104DED3210C4C4002FED3FED2B001A18104DED3130331121152111211521112115BF033BFD970205FDFB029405C89DFE259BFDE89D00000100BF000003FA05C8000900424026089205050004920103000F062F06020F022F02020F0306060205097E00400B026F020A006B022B2B011A18104DED3211392F5F5E5D5D002F3FED12392FED313033112115211121152111BF033BFD970206FDFA05C89DFE109BFD6000000100BF0000051505C8000A00CC408F5D060106280C1048BA06CA06DA06035F09010B093B0902280948097809030B035B039B03BB03FB03056703010404010410171A485C060109063906020C7406940602060152060704030482050614050506081815194806015206050809087F07061407070601030006093005010507071003097F00401F0701CF0701000770079007A007040E030C0770020B006B022B2B015F5E5D5D711A18104DED323810C65D1139002F3F31308705102B87082BC4012B8718102B87082BC4015D5E5D5D2B71005D5D5D5D5D5D2B5D3311331101330901210111BFC50257D3FDBC02ABFEF6FD7905C8FD2802D8FD3EFCFA02EEFD12000100BF0000062605C8000C010B4016C80801A803B80302D70301030F0301023803B8030204B8FFF040A4141748D804010B041B042B044B04042902E90202370201040214022402440204020901460956098609030D0A01390A490A890AA90AB90AC90AE90A0704090809820304140303040A0203027F0B0A140B0B0A000301090308090B04020A0004070A030002030003030B087F060B80004010062006400650069006B006C006070006200630069006B006F006060C0F060113030E066E028F0001000070000209030D006B022B015F5E5D5D2B015F5E5D5E5D711A18104DED10ED1139192F00182F3F12173910CC1117395E5D8705102B877DC48718102B877DC43130015D
 5D5D5D5D5D5D5D5D2B5D005F5D5F5D5D5D33112109012111231101230111BF0123019A01A60104C4FE68CBFE7405C8FB870479FA3804B4FBAF0454FB4900000000020068FFDB05D005ED000B0017010840C6240C012B12018602F60202F60A01C90A01180401F80401270401C70401190801F90801260801C6080136160106164616E616033A14010A144A14EA14034910E91002460EE60E02170B470B02C70B01290B01190B590B690B790BD90B05480701C807011607011607560766077607D60705480501C805011605011605560566057605D605051701012901011901590169017901D901050C0D010317010313010C110109032F0F012015010008011A06129206040C9200130F7D09157D034019096F0218036C022B2B011A18104DED10ED003FED3FED3130015F5E5D5D5D5F5E5D5D5D5D005D71715D715D715D715D715D715D715D5D5D715D715D715D715D715D715D5D5D71710520001110002120001110002532121110022322021110120313FECCFE890179013B013A017AFE86FEC0E3F8F9DCDDF8F62501AB015F016101A7FE5AFEA0FE99FE5B9D0147012A01210146FEB9FEDDFEDEFEB400000200BF0000044805C8000A0013009F403035040195040108112811381103E81101750D850DB50DC50D04420652066206030906190629060310180C0F48D70E010EB8FFC0403F0A0F48150301050375038503F503040944045404020B923F09AF09CF09DF090409090013920103000F7D050B0A7E004000052005020C031505700214006B022B2B015F5E5D1A18104DED3210ED002F3FED11392F5DED3130015D005E5D712B5D2B715D5D5D715D713311212016151400212319013332363534262B01BF0193010CEAFEC0FEE45D55BBCCA0BB8105C8B5CFECFEF4FDB402EBAC9D857200000200BF000004FA05C8000C001300AE40742707013906010606260602E606012E113E114E110311380D1148260F01260F360F020603F6030209450F01160401A707019A07015E126E127E12030918151948070A010A090152097E0807140808070D9207010B0B08001392010300107E050705080D0C7E00400F080112031508700214006B022B2B015F5E5D1A18104DED321139392FED002F3FED1139392F1239ED31308705102B2B10C4015D2B5D5D5D5D5D005E5D5D712B715D715D713311213216151005012101231901332011342123BF01C0D5E3FED501EEFEFEFE5BC444018CFEB48405C8BCB3FED87CFD4B0272FD8E030F0137E500010064FFDB03E905ED00230138B90013FFF840AF1B1E48F51B01180101F801010916191602D916E91602B604C604027A198A1902151D01851D01571E012A0C5A0C023A0C4A0C6A0C7A0C8A0C05991F01121F221F026B0D011B0D3B0D0228230108230107110109280601591001E81001562201472201D8
 22E822024C0B018C0BEC0B020C0A1C0A4C0A032C0A6C0A7C0A03680E780EF80E03441C01341C441C841CA41CB41CF41C060920192002080F1A2104001214921F152F15021517921204029203B8FFC04033090C4803059200131A7F0F14400C0F4814140F035F087F08025F217F2102087E2140000320035003030A0325216F0224036C022B2B015F5E5D1A18104DED5D5D1239392F2B2FED003FFDD62BED3FFDD65DED11121739313001715D715D5D715D715D715D5D5D71005E5D5D715D715D5D5D715D5D715D5D5D715D715D2B05222735163332363534262F012E0135343633321715262322061514161F011E0115140401E195E8FAA17C97638566BD9BF8C0ABBEEA736D8E688A6AC098FEE32541D074826A577A4B3B6CBF7FABDD39C05C74584A724F3C6DC288C1EA0000010012000004FE05C80007004E40350602920303000005100540058005040005800590050305060F021F024F028F02040F028F029F02030A0302067E01400809017E30302B011A18104DEDCD5F5E5D7110CD5D71002F3FED3231302111213521152111021FFDF304ECFDF3052B9D9DFAD50000000100B3FFDB04D905C800110083405C280401D71001F60F01490F010A0C019A0CFA0C02090D190D02E90D013B0D4B0D5B0DAB0D0429070113072307B307031303010303130323039303A303B303060B03020D01170409000305920E1309800A017E0040130A6E0212006B022B2B011A18104DED10ED003FED3F333130015F5E5D005F5E5D715D715D5D715D715D5D5D71133311141633323635113311100221200011B3D2A5B4B093B8F9FEF0FEEBFEF805C8FC5ADFCBBFE403ADFC56FED1FEEC011E012B00000000010011000004E205C8000800BF40875404C404025201C201E20103074817490748141548074812496C077C079C07CC07FC070507280A0E48080401B604C60402A706B70602D805E805F80503A705B705028603C603E603F603040507060780040514040405010304037F02011402010305060107040602030012040105000640068006C006040A0306070302077E0140090A017E30302B011A18104DEDCD3210CD5F5E5D321239003F3F1733313087052B87047DC48718102B87057DC4015D5D5D5D5D71002B5D2B2B2B5D5D21110133090133011101FFFE12F00180019EC3FDEF026A035EFD64029CFCA6FD9200000001000000060106687C3D255F0F3CF5011B080000000000B47FC3BC00000000C005BDE3F776FA1B0D21094D0000000900010000000000000001000007BCFE5000000D1EF776F7430D2100010000000000000000000000000000001106000100028800E1028800E1058500110589006805FE00BF045600BF044A00BF053900BF06E400BF06370068046C00BF050F00BF044F0064050F0012058B00B304FC001100000020005E00C8
 013201CA024C028202B8033803DC0492050405800652068C06F007680001000000110077000F004F0007000100100030007B000005E00D3300030001B800712BB800672BB8005D2BB800532B410E00000246001002460002007F02440001023F023C0001002B023E023CB2012BEFBB023D0001023D023CB2141F00BD023C0010023C000201870188B21A1F40B80189B310163900410E0188001001880002018301850002002B018401850002002B01860185B2022B80BB017F000100DF017C406601DFE016171CD4D516171C7B7C161B0F7B1F7B2F7B037B7C19D1D216171C767716171C6D7016171C6C6F16171C6B6E161B5F6E7F6B026B6E7F721A747514151C676A14151C666914151C6568141B8F65A065D06503656885711A1973167A4319217943192102B90352034AB2022B10BD034600500346000200400339B20B0E39B9FFC00338B20E0E39B9FFC00338B3090C3950410B032D0001033003310003002B02F402F30008002B02E3B2BE022BB802DCB3BE641F40B802DBB3313A3940B802DBB2232739B9FFC002DBB2141439B9FFC002D9B2333939B9FFC002D9B22A2E39B9FFC002D9B2212339B9FFC002D9B2171939B9FFC002D9B20E1139B9FFC002D0B2111139B902800278B2022B10412B02740050027400020010025D0050025D0002000B024C001B024C006B024C0003000B024B001B024B0002023A02040016001F023802040012001F023202310002002B023002310002002B022F0231001E001F022E0231B21E1F20B80231B2121639B901F701E3B2032B0A412001F4000101EF01EE0002002B01ED01EE0002002B01EC01EE0002002B01EB01EE0002002B01E801E70003002B01E601E70004002B01E501E70002002BFFCA01E3B30B1139B9411D01E70001007601E7008601E70002019401920002002B019301920002002B019201900006002B019101900007002B018F01900002002B018E0190B2022BBFBF01900001007001900080019000020157B292042BB80153B291042BB8014FB297042BB80136B37F032B40B80139B21218394109012401250003002B011001110003002B0104403BFC022B10F850F80240E61A1A399A9B032B9C9B042B9B970A2B9392042B9192062B9297042B9597042B9897022B9697032BA097019F97AF97BF9703BC034803490004002B0349B285022BB9FFC00343B31011391FBE0344000100E00344000103350334B2032B20411203330030033300400333005003330004033303140003002B033203140003002B032F0314B2032B2FBF03140001000002F3002002F3000202F0B2BD062BB802E2B2BF082BB9FFC002E1B2172839B9FFC002E1B20E1139B802E0B2870A2BB802DFB3BF042B40B802D7B323253940B802D7B2151639B9FFC002D2B2101139410D02C602C50006002B02C202C00006
 002B02C102C00006002B028CB285022BBC027602770004002B0277B285022BB9FFC00271B31011391FBE0272000100E00272000100400260B2151639B9FFC00260B20A0B39B9FFC0025FB2171839B9FFC0025EB2242939B9FFC0025AB31011391F4114025B000100E0025B0001000F024A0001001602490026024900020009022D0019022D0002FFC0022BB2111539B9FFC00229B30D113920B80223B2121639BD022202200002002B02210220B2042BC9411402200001021E02200003002B021F02200002002B01F601CF0003002B01E001B50020002101DF01B5B2262120B801DFB21E2139411A01DD01DC0002002B01DB01DC0002002B01DA01DC0002002B01D901DC0002002B01D801D70003002B01D701D60002002B01D601D4B2022BB0BF01D6000101D501D40002002B01D301D4B2022B69410B01D2000100B901D2000101D201D40002002B01D101D4B2022B20B801D0B2090C39B9FFCA01CFB30B11392BBF01A300A401A300B401A30003FFE001A6B2131539410D018D018C0003002B018B018C0003002B018A018C0002002B0156B286022BB80155B280032BB80154B286052BB80152B287052BB80151B288052BB80150B288032BB8014EB285032BB8014CB285022BB80138B287022BB80131B2BF032BB80122B285022BB8010E400B85022BFAFB042BFB85022BB8FFC0400AF51011391FF601E0F601B8FFC04009B1151C3940E51A1A39B8FFC0402EAF0D0F3900B40140B450B460B470B480B4C0B4D0B4E0B4F0B409B4AF641FE8E7042B898A072B8A8B062B8C8B062BB8FFC0B78E3032398E8D032BB8FFC040148D1E23398D8B022B8B85082B8281042B8180032BB8FFC0B3804A4D39B8FFC0B3803F4339B8FFC0B380343939B8FFC0B380282E39B8FFC0400C801D2339807E022B7F7E062BB8FFC0400C7D4549397D7E062B7E85082BB8FFC04020881E23398887022B8785082B8685062B83840A2B8485062B7085808502BF8501410A03530354000E03500351000E034E034F000E034EB203641F4155034C034D000F031B031C031D000C030F03100311000C030C030D030E000C0327030D0329000D0321031C0323000D031E03100320000D0327003C0321003C031E003C031B003C030F003C030C003C02AD02AE02AF000C02A102A202A3000C029E029F02A0000C02B9029F02BB000D02B302AE02B5000D02B002A202B2000D02B9003C02B3003C02B0003C02AD003C02A1003C029E003C02810282000E027E027F000E027C027D000E027CB203641F4175027A027B000F021002110212000C020D020E020F000C020102020203000C01FE01FF0200000C000B0211009B02110002000F021000500210009F021000BF021000DF02100005001F020D003F020D007F020D0003001F01FE0001021901FF021B000D0213020E0215000D02
 19003C0213003C0210003C020D003C0206003C0201003C01FE003C01BD01BE01BF000C01B101B201B3000C01AE01AF01B0000C01C901AF01CB000D01C301BE01C5000D01C001B201C2000D01C9003C01C3003C01C0003C01BD003C01B1003C01AE003C016D016E016F000C016101620163000C015E015F0160000C01610166B2171F1F41420166003F0166007F016600030179015F017B000D0173016E0175000D017001620172000D0179003C0173003C0170003C016D003C0166003C0161003C015E003C012C012D000F01260127000F01280129000E012A012B000E01180119000F01120113000F01140115000E01160117000E01050106000E01020103000E01000101000E010040A803641FFEFF0F1B37151836151535151234150F33150C3215093115063015032F15002E1526270E28270F2A2B0E2C2B0F22230E24230F1E1F0E201F0F0F10110C090A0B0C0607080C0304050C0001020C000340131A230003131F06031C1F1F0F3F0F7F0F032003011F034F03BF03FF03041B011D0D18071A0D1510170D1204140D901B012C3C2A3C283C263C243C223C203C1E3C1B3C183C153C123C0F3C093C063C033C003C503301B0124B004B5442B013014B004B5342B0332B4BB8032052B0322B4BB009505B58B101018E59B0332BB00288B8010054B00488B8020054B012435A5B58B80119B101018E851BB900010100B04B60858D59B1020042B00188B0235358B00188B0405158B02088B810005458B1020142595959B0374B5058B1020042592B1DB0644B5358B0801D59B0324B5358B0901D59004BB03A51B01B23422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B7374732B2B2B2B2B2B2B2B2B2B2B2B2B2BB1282645B02A4561B02C4560442B2B2B2B2B2B2B2B2B2B2B2B002B2B2BB8010045B0FE4561B8010223442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2BB8027C45B8027A4561B8027E23442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB8034E45B8034C4561B8035023442B2B7473012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73742B2B2B0173742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B74752B2B732B2B2B2B2B2B2B2B2B2B2B2B2B752B2B2B2B2B73737473742B2B2B2B2B73742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73732B2B2B732B73742B2B2B0073742B2B2B2B2B2B2B2B2B2B00732B2B2B2B2B2B2B2B73742B2B2B2B2B2B73742B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B732B0143581B592B2BB018B0234B53422B2B732B2B2B2B2B732B2B2B2B2B2B732B2B2B01B8017C20
 456A44B8017D20456A44B8017E20456A44B8017F20456A44B8018020456A44B8018120456A44B8018220456A44B8018320456A44B8018420456A44B8018520456A44B8018620456A44B8018720456A44B8018820456A44B8018920456A4473732B2B2B732B2BB8023B20456A44B8023C20456A44B8023D20456A44B8023E20456A44B8023F20456A44B8024020456A44B8024120456A44B8024220456A44B8024320456A44B8024420456A44B8024520456A44B8024620456A44B8024720456A44732B732B2B7373B109322B4BB05052424BB008524BB008505BB01A23424BB0C8524BB036505BB00C234200
 00>] def
 /CharStrings 17 dict dup begin
 /.notdef 0 def
/colon 1 def
/semicolon 2 def
/A 3 def
/C 4 def
/D 5 def
/E 6 def
/F 7 def
/K 8 def
/M 9 def
/O 10 def
/P 11 def
/R 12 def
/S 13 def
/T 14 def
/U 15 def
/Y 16 def
 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-2186 -1509 3361 2381}def
 /UniqueID 4277797 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C91B322782D282AC603D1F5A452D1E7AE90B2FF78B151C731C717F5B5A2ECE57D3BD22888D3650C03C2DCA804C19EB7D69457CEBD24131DB488F3CA3D336BDBD4FB45B9837AB09747478D7E2F00EA5B259005B58BD27C4E5BBCD5FB2B1673D47BFC5B6C447EE0559C6967E1C971A7DF173E7BAB4D63FBEC224781A4CC86C73DB89CF37C3E009A7ECC8580FF7939A7F82E799EF71B242ABB4D59BADDEA6DC3655B4B5B3056FB8FFFFF604F42015172C5ED7A02607E0D9435CC1851C1EF4173C79AAFBAD79A80689B0F85464175B9A61BF2695BCFF76F3E95683E3A6070BD117F95190EC6AE323A776EC3C425F63978A058EAFAEEADEB542C1C33429E173B89AA7D6EE766D5CBAFC23AF1D9CB29F231483238FF1E51FE7B6F20C48D65CDECD5F23E03D992E13AF5358D0A47388E45F9EBEE29E4D0C37A5A818041EC0011CB5F3698A38EEDA6C25AE09E9D934C674FBC2152E17D27A957094204A0811D34CD845CE707F68B0E1A1585776B6DE6CD5B19F327F64B2DB01695C3D4E5F84F3BE9203D2675C29DBF461FA34E67A9C3047BF2E154A1ADF9E5F52AC6222DFF01912BC9A09CD897C512D8B65F525BC845C914870D5386666882A10D32DC344E2B9C88D8A85465AF1C48F47A1598196C168BB5ED71C591263E80DC8961ED6FA05A5FFC1EA5BB909BDE64C03D66E3EF90633BF2040E9473B129CBEF613C927DD3483B8085281E712EE2E30877534F0E226E07B997D551C2CE62D21DBDA7511885FA3F82044178DA
 73F9B0797D89215EE23A9C083E0C9DEA12C5B223605B84568072F386D863A95FCAE1F9932BA033DF56A407A5048FD084BBA0B501BCEF003D7C4FA708627D9F7420B153722704F0E7CF508E6ECE3BB33933264912F15430E5E1CFA547A722EFBFBA15F71F2FBE29B56A16944C7E33D94623CF9DE9803E71503F35CD03C052DF1D0CB9A3E9A150D95EAB490076B6313C086B062891270FB1758BC4DC171F7BF99010280FD64B3C4617CFB061234E736C271CB0F2704210921E580A7E7543FB583F1A93EF683344B3C626B5911C4131502D7C3AF74A00D431C04E915BFE9FEB0829EF39D878A1A707FA74E171BDABD25B7DA750F5EDE7AFC11914B16B3D705B5525F2ED1FD362EFCCC06D15A3F706CBB78541A2AB75D1FB96DD7994C174A2FE64BC7976144FF8D509C6ABF755FA749BB2A4CD4499C6BCDE099073B0E1A2FCC4441C2E6D48D693C696F21A3CB48844EB3D81CBFF1633B84725ABC3FA6658CECFB39DB38B8BBCDFC4D6716C6BE9560F2B1BBC353F9F80B4FECFEFFFC5B2C79AD9D6E06169071ADABD445C3EE16DE87E7A6483DD7B2782BE3AC886EF46A9C90B688E15C68E2F9CE080BEB7D7773D5E7AFD03DBC79908DCEA92248FB5E81BF71AC5FB8A78CD8C85DB153F042781C06419B2E937DCA79E039D034EF4658327750FFE1314627041A3117623A2A47EE44F74EE00CABB85E00C49F759210A9E280D38B5D6CDE8FF6B4CE0495DBE56C9FA12B7B1D26C2C94FBCB81F7A3D10CA0028358A56756FEF5D321AEED3FE40858AB60653BAD9EFDAB6D899BFAAF71FF657C81ADEA76C161BDFAE1C5B9FDCEFA4A8BD0A4A2CEED61D8B2E11AD7125BF2F903D8F2F47CE1BA4E6FCECD226A75565BC8B00F4E874837E40EA58AB5E05C2CC5303D37E7D6413C93C19D4E4AA0AD9A079A0463B7AE6C853FE8EA7C98E997059A02FFC76257DF1DBFDBB7F2BCB1C3B86B494EEB789AC911B75E960C1EC4F91F16CC7B0254B076E83F65EAFD4CD1B85F2D46D5C3FBE76B6122C9D2623CD3D0AE741376BB4AFF2A10D34D16BAB2977DA8F602DAB82326451A0D004A17003FF08A8472A4C56ECE9D3F9BB7E26FC312DA5D31CA2C1F52A8160279880BD0E533AB1A9907A69E3F448ED37735F0ACBEA2DFDE1C9130094DC5EF7E24CDFB43CD78B34C7B25BD8ECD793A4BA31C55CC26F34D170BF46E67D7F23D8ADCCFEA0EF4529126A2608F3F64FBF60B9292853C7301E3110F567D851221801E3B5DA65020D4AD0DB5412B41EE8282DE8D21928F58968C8B36A514048089F36A6151B359C82822C8C499B7D02888CE4978E5E5D0F50B2B866D1E088A5BC38F948DE1A44EDB703F6C8DEC33AAF8679F9EDC3D577E15ADB933C5B220E6EA74044DCAC9BBE0218B68A99FC67410AA41CE7EF36CA54A89CCDBAE493A0515193556E13BE7DCB83061C2152AB8A540E8D5E5
 299D927B8C7A0CCFF052270E31FE9AA97401A6441E27644FFDEC161413C53B0516F0D1786F31C106A9D7D5DB5CC68E4FAF671CCCF53F15BE64A15468024DB17C4FC62D646A5591309155551C406AB7BB9D6D6EC8238F27EB46B9BC800B338D0EDD6EED7B43D23A10080B5C30F271628703E7DAD7B702E46C5F5F04AAC805114FFA9D0D772EFD79FEDB554A91D814F1972B5E495F35E642E1C92E4D5540E401E7BF86AB1F2808182EAB8A4DC002405DDC2162A6D41DB2DD4FF92EC09306B95A135641F9FDE0400339DA4E1ED9923091E8D4A446F9D37C86527E6DC0C925880C763808673F3BC28D1CA06FBC4EBC32992232C796FC8ECDD936C9B0E15ACD160A3B86FC2148D8CEF4F3AF4A0326CD6CBAB0BF010299F5B0F26E64FE1EBABD3304E5F6490DE3A96CAAD33577FA5E8318774780687F64486686945CB104976AFF0B3CF5B2D57B
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End

%RBIEndFontSubset
/LucidaGrande cguidfix
/F1.1/LucidaGrande renmfont






[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeA { { 1.8008  exp } bind  exec} bind 
def 
/MatrixA [ 0.9642 1.0000 0.8249 ] def 
/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def 
/DecodeLMN [ { 0.9857  mul} bind { 1.0000  mul} bind { 1.3202  mul} bind ] def 
end ] /Cs1 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ { 1.8008  exp } bind { 1.8008  exp } bind { 1.8008  exp } bind ] def 
/MatrixABC [ 0.4294 0.2332 0.0202 0.3278 0.6737 0.1105 0.1933 0.0938 0.9580 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs2 exch/ColorSpace dr pop
%%EndPageSetup
/Cs1 SC
1 sc
q
0 0 472 74 rc
0 74 m
472 74 l
472 0 l
0 0 l
h
f
/Cs2 SC
472 0 0 74 0 0 cm
BI
/Width 1416
/Height 222
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/Interpolate true
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcG!7JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcG!7N;nJ.pATXBJc=I(h>`'*b5QtkM#R8NjSsf1
T)O<?[/Sn]o)=4>Jc:6"i;VR4`r:PgJc:6"Jc:6"Jc:6"Jc:E'h>a/IJc:6"ZMr\[Jc><@Jc:6"hYrK6
T)\9YJc5<@Jc1/uh#6(.Jc3aiJc1E'qYoRTJc22=Jc2tSh>[!DJc1/uJc4O*h>YFmJc1/uJc1/uJc1/u
Jc1/uLAfs-T`'H?Jc2nQh>W!(o_j@>Jc4I(n,ApYWrMbkcMa+-Jc()sqY]1Jk5='6Jc+j3Jc)DCh>I?O
kPX07Jc*:\Jc*soh>QL6n,;_RJc(`0Jc,NFh>QL6h>QO7Jc()sJc()sJc()sJc()sV#9'Ik5='6_>Jl^
Jc*mmh>QL6h>NW:Jc()sr;=t@o)>ck\c;I(n,;qWp%s=:r;)!@JbnL)qt^6frqY^Qqt^-crqV-Ae,"Xl
Oo"tNrqcWirVGgUqt^-crqV-AVttu@^&%X%rqcWik5+uNqtg<fqtbm?Jbjrol2(;QrqcWik5+uNqtg<f
ch`4hJbjroJbjroJbjroJbkH(qt^6frqY^Qqt^-crqWPiJbjro]DDF#rqcWik5+uNqtg<fJbo?AJbjro
iVNHKo).tTq#7i(\c;-sq#'^[qtg3cJbT9@pjr3kpuV;Mp\"=\q="+Uq>9sapOW+gpjr4&q#:$\p]1*j
q>'LSqt^-aqtG[:Vtbi<^%hU$p%\O^n+ceUqtU'_qtPa;JbXfkl1k8Pp%\O^n+ceUqtU'_chN(dJbXfk

JbXfkJbXfkJbY<$rqH*\rqZ$Xqt^-aqtI)bJbXfk]D2C"p%\O^n+ceUqtU'_Jb]3=JbXfkkP5&Pp%n@Y
q#'UZ\c9PHq#9j_rquQgp%nR]q"WeAT_<s1KD#??p[7eEpAXgcq#:$VpAXgcpAXgTp?D=&p@S'0p942V

p[@hTp\spfpAt$_n+QbTrq??cn+Q#?JbI1YJbIjlm.]uBrqHEerqGmTrqHEcrqH!Wrq>UNJbGW-L\C*/
n+QbTrqQKen+QbTrq??cn+Q#?nFhG,JbFZgJbFZgJbFZgJbH5>m.]uBrqHEerqGmTrqHEcrqGmTl1`?o
JbFZgg%Oe,n+QbTrqQKen+QbTrq??cn+Q#?T([a/L%bK>kP+cHrqZ-]q"ssdp&4[b_Z.gZq#9j_rquZj
qtg3crqQ0\rq?-[p%7hHRdu%#Jarg3q"+LUqt'URqt&>.rq#pUrq$$Xq"'(-mdbr"XRc/XrposXq""=R
p[[23rq#pUrq$$Xq"'(-_X`9Kf^eh/rposXq""=ReFNV1qssaWrq$$Xq"'(-QL]_"q"+LUqt'URqt&>.
rq#pUrq$$Xq"*eAJb"B_Jb"B_Jb"B_Jb"B_Wq,rVrposXq""=ReFNV1q""FUqssOR`:AKMJb%C_q"+LU
qt'URqt&>.rq#pUrq$$Xq"'mDJb"E`!;#pUo(;_MqtBp]qtU0dp%n[bqu$-cq#8J:bQ%S@o)8Rcq"t'e
rqZ?ap%JCXqt0dWq"!nDRdbmtJa`[/q!n@QqsW\:n*fE.rpTaRq!iq)mdPesXRQ#Trp]gRkjSWBnF,i.
nG_nRnG)O)nA=[GnC[7*nc&%Tn)j-.n*0?@nG_nRnG)O)n<WQsnG)PQnGD\:nF,i.nG_nRnG)P=n:C([
n:C([n:C([n:C([n>c!Qnc&%Tn)j-.n)j-=n,)VLn\jpJn:C)[nG)PQnGD\:nF,i.nG_nRnG)O@n:C(\
n,W"JnbD\SoD%tWp%A%Rq#:*gqYU0er:U$crlb>es82fgrVl`lqtp6hq>U0ap\XX\o`"I]o)%tSnFH%1
mXaeWmeZANmJcPKmJcPQmJ-&CmJH8FmJcJImJ-&ImJcJLmJH>Km=F]kmXaf'mf)VQmeH2Kmf)VKm/$)M
mHsf;q!J(Iq!IkCrpB^OqsF:KqsAt&^[?[@ddI,%rpKRKrpKdQq!@eCqs=+Frp9FIq!A"Irp9OLqsO@K
JaS`iJaWO*rpB^Qq!J(KrpBLIq!ItFq!J(Iq!IkCrpB^OqsF:KqsES7JaS*WJaS*WJaS*WJaS*WV!e6L
rpKRKrpKdQq!@eCqs=+Frp9FIq!A"Irp9OLqsO@K_<umBJaUnQrpB^Qq!J(KrpBLIq!ItFq!J(Iq!IkC
rpB^OqsF:KqsB[:JaS*Wq<mqEp$htNrpp'[q"4RYq"Od_rqZ?crqlTjqu-3edJq_rq#:'erqucmqtg3c
q"O[Yrq-3\qsj[Tp$_nJqsFCLqs4.Ep$&.5J`qaM!U8hKl2KoDl20]Al20]Dl2KoGl2KlCkl0cEkkjQB

k5OQCkkjQBl2KuIl2Ko>l2KoGl20]Al%/'jk^hs$kl0iGkkjWAkkjWAkl0iGkl0iGkPaTFkii$/roj7B
roX4Croj7BrosFIrosFGp$)J>ros=Dqrr[qaQS3=gZ\Y$roj7DqrmqAqrn%Droj@Groa1Broa:Eqrdt@
roa:EqrdtCrp'LIroj@Gq!%eAros=Dqrr[qSEPalrosFGqs""Aqs""ArosFGrosFFqrn%Broj7BroX4C
roj7BrosFIrosFGp$)J>ros=Dqs!V6J`q[KJ`q[KJ`q[KJ`q[KXm#cKroj7DqrmqAqrn%Droj@Groa1B
roa:Eqrdt@roa:EqrdtCrp'LIroj%>roj@GqrmqAb34E?J`teNrosFGqs""Aqs""ArosFGrosFFqrn%B
roj7BroX4Croj7BrosFIrosFGp$)J>ros=Dqrs^9J`qgOrTO@Il1O?@lhg&JmJH>Kn,)VRnb_nSo`"OY
p\t!`qYpBkr:p6crm^tts8N#grVQKkqYU*fq"XR^o`"I]o)A.Un,DbSmJcJIlhK`Dkk4-9k+1UbjbDmp
joFQCjo4?<jnn3;jo4?<jo4??j8S-=jnn-6j8S-=jo4??j87p:jnn-<jo4E;jo4EAjo4CnjmhG`jg+"F
k5OKAjSS'9k549>jSS'<jSn3=j8e9BjlQC#puDA7roO.?ro<n:roO%<roO.ApuVM;roO.AJ`Xl4J`YbM
qr[n>roEt<qr[e;roEt<roF(=roF(?qrIP4roF(?roF(=qrIb<qrIb<roX";roX4AroSdnRH9=fqr[n>

roEt<qr[e;roEt<roF(=roF(?qrIP4roF(?roF(=qrIb<qrIb<roX";roX4AroWV0J`VIEJ`VIEJ`VIE
J`VIEYiYcEroO.?qrR_;qrRh<qrRh<ro="=roO%<puDA7roO.?ro<n:roO%<roO.ApuVM;roO.Aa5qm6
J`Y\Kqr[n>roEt<qr[e;roEt<roF(=roF(?qrIP4roF(?roF(=qrIb<qrIb<roX";roX4AroT^3J`V^L
qW@_<qrdk?q!%S>rp9XOrpKdSqsaUUrq$-]q"FU[rqZHfrqlBequ5+FeGoOIp&4mfq"k!bqtL!\rq-*X
rpTjUrpKdQrp9OJqs"+Dqrdt@puM>4qr41*J`2@Br8I_9ro*k7ro*b6pu253ro*k7qr.P6ro*k6p#,i,
ro*k7qr.P6ro*b6pu253ro*k9ro*k9J`6.XJ`3onqr7V6ro!e7qr7D0ro3q9ro!\4ro*q:!TE#:ht>q,
hu;U6i;;L4ir7p6iqVL3ir7p9ir7p9idp(-iITtEiVVX6iVqd7iVVX0iVqj9iVqd4iVqj9iVqa-i;VX5
iVqd4iVqj9iVVX0iVqj9iVqj9iVqhfiL/Y^iVVX6iVqd7iVVX0iVqj9iVqd4iVqj9iVqa-i;VX5iVqd4
iVqj9iVVX0iVqj9iVqj9iVqj(iITs=iITs=iITs=iITs=iNV;<ir7p9i;V^4iqVL3ir7p9i;;L4ir7p9





ht>q,hu;U6i;;L4ir7p6iqVL3ir7p9ir7p9ilC#/iITtCiVVX6iVqd7iVVX0iVqj9iVqd4iVqj9iVqa-
i;VX5iVqd4iVqj9iVVX0iVqj9iVqj9iVqi+iITsDiVMR3ir8!5jSS*=kPOKBl2L#Gm/HDOmf)_Tn,DhU
nb_tXp&=^_q"X^_r;6Hirm^u"s8N#mrVl`oqu6Hhq>U0gp\smco`"I]o)A1YnG_nUmf)POlMg&Ikl0`D
jo4?<j8S';iV;@1hu;R5hu;K$h1=C7h#Z<dqV;),qqV2*rn@&"qqC2ep"K;tqqD&(qqV2-rn[A)J_ftS
J_dNcptYl*qqV2*rn@&"qqD#'lJ)!cqqM#%rnI>*rndY1ptUGVaPDF'gYMY[rndP-rnIG+p"TAtk1fR_
qqM,(rn@A+qqV2-rn[A)J_cjPLY_a\rndP-rnIG+p"TAtk1fR_qqM#%rnI>*rndY1ptYApJ_bn5J_bn5
J_bn5J_bn5Xkid-rndP-rnIG+p"TAtk1fR_qqM#%rnI>*rndY1ptX$JJ_bn5g"lGYrndP-rnIG+p"TAt
k1fR_qqM#%rnI>*rndY1ptVIsJ_bq6!8dY1ro!e5pu)/1ro3q;qrIb<roa:ErosFIrp0ROrpTjUrpg!Y
rq$-]rq69bqtU0drqcWkrquQiqu5=LfDkjLq#1*erqcWirqQKerq??`rq$-[rpfmSrp9XMrosFGroa:B


roF(=qr.P3ro!e4rn[A)ptGVuT\+hJJ_9MFpt,Mtrn%%uqq(hurn."srn%/%rmpturmq)$rn%/%p"+cI
in/h7S_3_hrn.5%qptYr!7h2%f)F=sf)F;#f`'J!fDaA#f`'M%f_*jIfXBF`fZDe@fDaG%fDF.rfDaA#

f_F%sfDaG%f)+(uf)F>$fDaG%fD*sKfS\=4f_*nlfDaG%fDF.rfDaA#f_F%sfDaG%f)+(uf)F>$fDaFq
fA>/2fR_\+fR_\+fR_\+fR_\Ef_F(tf`'M"f)+(uf)F=sf)F;#f`'J!fDaA#f`'M%f_*k+fR_\+fZ2Y>
fDaG%fDF.rfDaA#f_F%sfDaG%f)+(uf)F>$fDaFqf8S@5fS.uWf`9b%gA'J&h>Z:1i;VX5i;V^7j8S-=
jo4HBkl0iGli-;Kn,DkVo)A7[p&=[ap\sseq>:$fqtU-ern@D(s8N#prVl`lqu6Hkq#:$epAX^`oD\=[
nG_nUmf)SPlMg&IkPjWCjSn-;i;;F2hYu@1h#?(-gABS&f`'M%f(deme>C]GduVuLe,\"te*5BWe,.Pl
df._pde2)gdehGee*PT]e+M4Ae,%OEe%=*"eGdq]eG.Mid/_SqdaJ-DrmLJgrmL\kps\TZqpY5fJ^_on
J^`f2o$mZfl.#LWqpGDkrmUkpp!`ogqpG2fqpb2dqpY5fJ^^@BPLK*PrmU,]ps],frmLeprmLJgrmL\k
ps\TZqpY5fp="TAJ^]2!J^]2!J^]2!J^_0Yo$mZfl.#LWqpGDkrmUkpp!`ogqpG2fm*tp]p!h@;J^]2!
jjWeMrmU,]ps],frmLeprmLJgrmL\kps\TZqpY5fUsjnDOjj!QrRCr!ec+/!fDF5"g&B_)g]$"-h>Z:.

hu;R5iVqp;jo4HBl2L#Jm/HGPn,DhUo)A7[o`"R`p\ssbqYpBhr;QZlrn@D.s8N#mrVl`oqu6Hkq>U0g
p\smco`"F\nc&"VnG_hSli-,Ik5OKAir7p6hu;I2h#?"+f`'J$ec+(te,IepdJM;]c_Jd:cA'XBc2,]a

bl5fYbk90Ychku[b5TT`b59H_ci2,ebkTBVbl5f_bkoY9cLK22cEbagc2PrdbOs*PbPoidblQ)6oud9W

rlY,_rm1Serlk/\prr`\qonr^J^26[J^3,tp!*K[rlauYoum?\qp"fVrlb;`qp#,drlb;bpriHVrlb2_
qos];REg]8p!*K[rlauYoum?\qp"fVrlb;`qp#,drlb;bpriHVrlb2_qp"NRJ^/hlJ^/hlJ^/hlJ^/hl
Yg2pdrlkAbp!!*Prm1Jdoud9WrlY,_rm1Serlk/\prr`\qonr^a3K7]J^3&rp!*K[rlauYoum?\qp"fV
rlb;`qp#,drlb;bpriHVrlb2_qotVUJ^02!pWildchPlddJhSne,Ikrec+/!fDaJ&h#?.,hu;U6ir8'=
kPj]Eli-;NnG_nUnc&+Yo`"O_p\sseq>U6iqu6NjrVQTMs5!_SrqQHkr;QTmq>U0gp\smco`"I]nc&%W
n,D\Qli-2Kk5OH@ir7m8hYu@1gA]e)f`'J$eGdqrdf.Ykci22dbl5fbb*pG'abe.=aSa'Ya8!aQa8X0W


a8X0Za8<sTa8X0Za8![Oa8X0Wa8X0Wa8<sWa8X0Wa8!aTa8<r/anNo.agK7iaSX$QaSX$WaSX$WaSs6W
aSX!Xa8sB'rl=fRqoA]WqoA]WqoATTrl>#ZqoAKQrl=oWJ]Z*WJ]ZlmrlFuWprN?QrlFuWrlG)ZqoJZT
rlG)Zpr<3OrlFuWrlFuWqoJcWrlFuWprNHTqoF?1T?3)7rlFuWprN?QrlFuWrlG)ZqoJZTrlG)Zpr<3O
rlFuWrlFuWqoJcWrlFuWprNHTqoJBNJ]WJbJ]WJbJ]WJbJ]WJbZcW3fqoAKQqoA]WqoA]Wrl=oWqoA]W
rl=fRqoA]WqoA]WqoATTrl>#ZqoAKQrl=oWc,kOYJ]ZfkrlFuWprN?QrlFuWrlG)ZqoJZTrlG)Zpr<3O
rlFuWrlFuWqoJcWrlFuWprNHTqoGJQJ]WMc!6P>bb5TT]bl5laci2>kdf._pec+/!f`'S'gA]q-hYuI4
ir8'=k5OZFli-8Mn,DhUnc&.Zp&=[ap\sseq>U9jr;6Hirn[V1s8N#prVl`oqu6Hkq>U0gp\sjbo`"C[
nG_nUmf)POlMg#HjSn-;hu;I2h#?%,fDa>"e,Ibod/MAjcMl)fbl5c^ao9?[`r<sG`2pk-_ihq4`;[[P
_YV.K_u%CO_u%CI_Z%IP_Y_7M_YCtE_Z%IM_Z%IJ_Z%IP`;@IO`;[[L_Y_7G`.>f+_h#_>_t_1L_tCnG
_u%CO_u%CI_Z%IP_Yq@Q_o)JjpqcjErknWMrknNJrkn`RqnrEOrknNJqnr3IJ]$!TJ]$cjpr*0Lotp^G
qo&KOqo&9Hrkn`PqnrEMpqcjErknWMrknNJrkn`RqnrEOrknNJqnr3IJ]"G(QG`L9rknEGrknWOrknWO
pqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]Orl"fRpqlpGpr**JJ]!&VJ]!&VJ]!&VJ]!&V]YjN_rknEG
rknWOrknWOpqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]Orl"fRpqlpGpr(b$J]!&Vkem26rknEGrknWO


rknWOpqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]Orl"fRpqlpGpr'2MJ]!_in&,4F!QE%W`r=$Xans6[
bl5ldcMl/hd/MGle,InsfDaM'g]$%.hu;X7jSnBBl2L#Gmf)_Tnc&.Zp&=^bq#:*gqYpBkr;QZlrn[V1
s8N#prVQKkqYp6gpAXaaoD\=XnG_hSli-)Hk5OH@i;VU4h>Z(+f)F1udJhMlci2/fb5TN^`r<sV`;[XQ
_>D%F^[f(;]Rd_S]`,VD]_oAA]D0&<\am?2^&,J>]D/u4]D/u:]DfJB]DfM7])K8>]`,PB]`,P?]_fBn
]`#Ko]XYWR^&G\A]D0&<\am?2^&,J>])]G<](io4])K>@]`,PB^%/c6\c08@]DfJB]DK8<]n*iD]Rd`V
]`,VD]_f>9]`,J4])KD?]_f>9](io4])K>@]`,PB^&,D9])K8>]`,PB]`,P?]_fBn]VW9&]`,VD]_f>9
]`,J4])KD?]_f>9](io4])K>@]`,PB^%/c6\c08@]DfJB]DK8<^%o<l]Rd_H]Rd_H]Rd_H]Rd`(]`,VD
]_f>9]`,J4])KD?]_f>9](io4])K>@]`,PB^%/c6\c08@]DfJB]DK8<^!jWF]Rd`T]`,VD]_f>9]`,J4



])KD?]_f>9](io4])K>@]`,PB^%/c6\c08@]DfJB]DK8<]r/Mo]T0Yt]`>eJ^VBQZrk\TNrl"fTrl4rZ
rlb;brm1SjrmC_prmq)$rn[S2ro!e:roO.Brp0RNqsaUUrq$-^rq??cqtg<hrr)`nh>c=2q#13hrqcWi
rqHEcrq69]rpg!VrpB^Nrp'LFro="9rndY/rn7;$rmUknrm1SfrlY5]rl4rUrkeZMrkJHGrk/-?rjr*>
pp[$,J[UEDq6^41ppTk'rjMg6qmQL5rjLssqmQL5qmPt$ppTt*J[Y<]J[VtpppKn*osOe-rjDX3rjVm8
rO(puqmQL5qmPt$ppTt*J[Wb1J[XOGppKn*osOe-rjDX3rjVm8k-b)prjVd5qmH+)ppTt*J[V2ZNOJVi
ppTk'rjMg6qmQL5rjLssqmQL5qmPt$ppTt*o<s4YJ[U-<J[U-<J[U-<J[VnnppKn*osOe-rjDX3rjVm8
k-b)prjVd5n$Vr!ppJATJ[U-<hmW<fppTk'rjMg6qmQL5rjLssqmQL5qmPt$ppTt*TsfN\MmiDi!4`-@
\c02;]DfJB^&GeG_>_=N`;[dUaSs?]bl5rfd/MMnec+8$g]$(/i;Vg:k5OZFli-;Nn,DkVo)A=]pAXgc
q>U6iqtU-Gs5<qVrqlZnr;QQiq>U-fpAX^`nG_nUmf)POlMg#HjSn-;hu;C0g&BS%dJhMlcMl#dao9<Z
_u@LO^](tH]`,PB\c0,<[f3]6[/RE2ZMUo%Y^s$;YktX'YQ:r2qQK[uriuI,qm$.)pp'h&riu@)qlfn$
riuI.qm$%&riu@)riu.#qlg"%pof7QrNLjW\?Pk6ril1$posb&ril:)ril1&ricC-!O8p,YktX$Yl:p,
ZMUp(Yl:p)Yl:p#YktX'Y5#2OYgK\+YiN%cYPtd$YP>@$Z2V!)Z2V!&Z2V!,Z2:d&YPYR'Z2V'+Z2:d)
Z2V!,Yl:p#YktX'Y5#2OYbeRcYktX'YkYEsYl:p,Ykt^)YkYL&Yl:p)YktX$Yl:p,ZMUp(Yl:p)Yl:p#
YktX'Y5#3rY^s$0Y^s$0Y^s$0Y^s$0YdUe5YPtd$YP>@$Z2V!)Z2V!&Z2V!,Z2:d&YPYR'Z2V'+Z2:d)
Z2:d)Z1Y?uYPt^"YLB_,Y^s%<YktX'YkYEsYl:p,Ykt^)YkYL&Yl:p)YktX$Yl:p,ZMUp(Yl:p)Yl:p#
YktX'Y5#2uY^s$:Yl:p)Z2h33Za9Y<rjDa6rjVm;rk&0CrkABHrk\TOrl4rYrlb;drm1Skrmq)$rnIG0
ro3q<roj@Grp0ROrpTjUrq-3_rqHEfqtg3frr)`nj8\';rr2fnrquclrqQKerq69_rpp'XrpB^Nroj@D
roF(:rn[S.rmq(trm1Shrlb;^rkn`PrkJHHrk&0?rjDa4rj)O-ric=(riQ1$ri?$uri)QhJZ+O+rhoam
rhfdqVuWd_Vu*@gW;`dVVuEXoVuE[mW;`[nW;ELlVY-kdW;`^oVYd9BW;WZGW48f*VuERmVuEX]Vu*@g
W;`dmVs:2ZW;`^oWV`XnVZ*OkVuERdVuEXoVuERjVh(eoW.Co.W;`^oVZ*LmW9gGZVYd=kWT0oUW;`^o
WV`XnVZ*OkVuERdVuEXoVuERjVh(eCW0!tWVuERmVuEX]Vu*@gW;`dVVuEXoVuE[mW;`[nW;ELlVY-kd
W;`^oVYd:eW.CmuW.CmuW.CmuW.CmuW4&Z(VuERmVuEX]Vu*@gW;`dVVuEXoVuE[mW;`[nW;ELlVY-kd


W;`^oVYd:?W.CmuW8acTVuERmVuEX]Vu*@gW;`dVVuEXoVuE[mW;`[nW;ELlVY-kdW;`^oVYd9hW.Cn'
W;`dqWW9(#X/l6$riQ1&ric=*rj)O0rjDa9rk&0DrkJHKrkn`VrlY5crm1Smrmq)'rndY4roF(@roj@I
rpKdTrpp'[rq69brqZQiqu$Hlqu5XUi;`fUrr)iorql]jrqQKerq69^rp]pUrp9XLroX4@ro*k6rnIG*
rmUknrltG`rl4rTrkSNHrk&0=rjDa3rilC)riH+!ri,mqrhf[krhTFdqkBs]JYA-urhBCcq4RJTqk="^
n"K`UrhBCeqk<n[qk<e[n"K`Rqk<\Urh9=arh9=aJYE%9JYB]LrhBCcn"BQOrh/_RrhKIe!2BRiU\gb^
T_kGXU[OoUT_kGUT`1YaT`1YaTRifaTn/p#U&LecU$nZOU&L_RU&LhdUAgqbU&1M[U%kDRU&LbbT_kGU
T`1YaT`1YaTRif5Tp)2LUAgkTT_kG^T^STRU]."eU\gb^T_kGXU[OoUT_kGUT`1YaT`1YaT_Y:4Tn/ng
Tn/ngTn/ngTn/oJU&LecU$nZOU&L_RU&LhdUAgqbU&1M[U%kDOU&L_^U%P)XU&L_aU&L_6Tn/ngU#i!I
UAgkTT_kG^T^STRU]."eU\gb^T_kGXU[OoUT_kGUT`1YaT`1YaTVnK7Tol&AUAgnfU]I9erh]Ukri#gq

ri5t!riZ7)rj2U3rjVm=rk8<Hrkn`TrlG)`rm:Ynrn7;+rnm_6roF(@rp'LLrpTjUrq$-^rqHEerqZQj
rqucoqu5XUi;`fUrr)iorql]jrqQKerq-3\rpTjSrp0RJroO.=rnm_1rn7;%rm:Yhrlb;Zrk\TKrk&0>
rjDa2rilC)ri?$trhf[irhBCcrh0.\qjmVSVON.+O.6-=rgW_P!1NeSqjRMPrg<SOqjdPQpmh5NqjdPQ
pmh5NqjdYTrgNhRrgEPMrgWnUrgWnUrgWnUJXcV-JXa9@rg`tWpmV)LqjRMPrg<SOqjdPQqO@SVSGSfQ
SGSfNSGSfQSGo#WRf8]RRJ<6MS,SlUS,SlUS,Sk-S'd^VS*-:?SGo#QRerTORf8`SR/<?LSGSfNSGSfQ
SGSfNSGSfQSGo#WRf8]RRJ<6MS,SlUS,SlUS,Sk-S#)U<S,SrWS+rHLS,8ZRRJrTNRerWPS+rNNS,8`Q
S+rNNS,8`TS,SlUR/WNKRf8fURf8fURf8fURe`G(Rt7&[Rt7&[Rt7&[Rt7'>S,SrWS+rHLS,8ZRRJrTN
RerWPS+rNNS,8`QS+rNNS,8`TS,SlUR/WNKRf8fURf8fURf8fURa[aWRt7'jS,SrWS+rHLS,8ZRRJrTN
RerWPS+rNNS,8`QS+rNNS,8`TS,SlUR/WNKRf8fURf8fURf8fUR\uX+Rus35SGo&ZT)kRVqk3q^rhBCe

rhf[nri?%$rilC-rjDa8rk&0ErkeZQrlb;drm:Yqrn7;+rnm_7roO.Drp0ROrpTjWrq-3arqQKgrql]m
rr)`nj8\';rr2oqrquclrqQKerq??^rpg!Vrp9XKroa:?ro!e4rn.5#rmC_jrlP/YrkSNHrjr*9rj)O,
riH*urhf[hrh9=`rgs+ZrgNhQrg*PJqih#BqiRk>JWPGE!0I2@rfI,Aqi^rCqih#Bqih#Eqiq)Drg*5A
rg*PIqiq)FrfmDGrf[/BrfmDGrf[/@rf;VlmZ<!]XH<FBrfI,Aqi^rCqih#Bqih#Eqih)E!L&`HQM$LA
QN!*FPl?sIPl?mGP5CIBPl?mGP5CC@O+ED0OF`MGOT(=?OT(C>P5^^CPQ$aBPQ$jEPl?mGQM$LAQN!*F
Pl?sIPl?mGP5^[EPQ$gGPQ$aBOoCDmOHtu]OT(=?OT(C>P5^^CPQ$aBPQ$jEPl?mGQM$LAQN!*FPl?sI

Pl?mGP5CIBPl?mGP5CC@O6VgXOF`LEOF`LEOF`LEOF`LnOT(=?OT(C>P5^^CPQ$aBPQ$jEPl?mGQM$LA
QN!*FPl?sIPl?mGP5CIBPl?mGP5CC@O2R-2OF`MEOT(=?OT(C>P5^^CPQ$aBPQ$jEPl?mGQM$LAQN!*F
Pl?sIPl?mGP5CIBPl?mGP5CC@O-l#[OH,G%Oo(=@P5pgJPa)04rg3VQrgWnYrh'1`rhBChri#gtric=,
rj;[9rk8<Hrl+lYrm(Mjrmh##rndY4ro3q?rosFKrpTjVrpp'^rqHEerqcWkrr)`nj8\0>rr2fnrqucl
rqHEcrq69\rp]pUrp'LHroX4<rndY0rmq(trm1Serl4rSrk8<ArjMg1riQ1#rhf[jrh9=`rg`tWrg3VM
rg!JFrfI#<rf6u;rf!_4JW#JFreg]5r/:W7qhkB2rf$`6qi:Z:rf-o;plGE7rfHo9qiLf;plGE7rf-o<
rf-o;qi1T6repZ2rf$`4qhfr_rJQ5b\;U?DrepZ4qhkB2rf$`6qi:Z:rf-o;pl>E8!KN3>OSFn6OT(:8

O8b1=NW,"<NW+t8NW+n9Mu/D2N;JP1MLg]5Mh-fIMuJV5Mu/J1MZ/P5N;JV3NrG+=NW+t5O8b1=OSFn6
OT(:8O8b1=NW,"<NW+t8NW+n9Mu/D2N;JP1MLg\^Mi`krMZ/P2N;JM3MuJ\4NVeb8O8b.<Nqe\7NrG.8
O8G%<Nqe\7NrG%;O8b.<Nr+h8N;eb4MZ/S3Mu/D-Mh-e;Mh-e;Mh-e;Mh-e;MmeQCMZ/P2N;JM3MuJ\4
NVeb8O8b.<Nqe\7NrG.8O8G%<Nqe\7NrG%;O8b.<Nr+h8N;eb4MZ/S3Mu/C\Mh-e;MrKZoMZ/P2N;JM3
MuJ\4NVeb8O8b.<Nqe\7NrG.8O8G%<Nqe\7NrG%;O8b.<Nr+h8N;eb4MZ/S3Mu/C0Mh-eKMu/J4NW+t:
Nrb<&rfI,Arg!JKrg3VRrgj%\rh9=erhf[qriZ7)rjMg:rk8<Jrl>#]rm1Smrmq)(rndY4roX4Drp'LO
rp]pWrq69arqHEgrqlTkrr1sXj8],Xrr)iorql]krqHEcrq-3[rp]pTrosFFroF(:rn[S-rm^qprm(Ma
rkn`Mrji$:riuI*ri5sqrhBCbrgs+Xrg3VLrf[8Brf@&<rf$i7reg]2reI8'JVK5?re:?)re:?+!JcF1
L]3&-L]3&-L\Q]&M=lc*MuJ\.MZ/P5MZ/S6MtMu,M>2o+LAlu'LAlu*L&Qc)Kn5!WL4P)kLAlo+K`6])
LAlu-LAlu-LAlu'M#3&%MZ/M6Muelronra,reg]6repH,re^E+reCE-pkJd'qh>$&re5oXd>!4,kD&ti
re19)reCE-reCE-reCE-pk\g(onra,rf$N-repc5rf$i7onra*reUH-reCE-pkJd'qh>$&re5oXV1t1g
re:?)re:?+reLK-reLK-reL9)qhb!'repc7onra,reg]6repH,re^E+reCE-pkJd'qh>$&re:0&JVJ`1
JVJ`1JVJ`1JVJ`1\VC*;re19)reCE-reCE-reCE-pk\g(onra,rf$N-repc5rf$i7onra*pk\p(reL9'


reLB)re19)dtWF.JVN9@re:?)re:?+reLK-reLK-reL9)qhb!'repc7onra,reg]6repH,re^E+reCE-
pkJd'qh>$&re78)JVK);reLK0re^]6!K2m8N;eh9O8b:@P5^aGR/WQRT)PD^UAh(iWrB1#Z2V01\c0AC
`;[jWcMl5jeGe2$h#?72jSn?Al2L,Mn,DkVo`"O_p\t$gqu6NmrVlfVs5X.Yrr2lqr;QTmqYp6gpAX^`
nG_kTm/H5Jjo46<hYu7.fDa1scMl#d_u@IN]`,8:Z2Up*VuELkT`1P^Rf8WPP5^RBO8b(:MZ/G2K`6W'
K):,uJ,XtqIt<*1J,=]lI0"eG!.OoqqgSNprdXotqh"ftqh"g$re(*$re:?)qh+m$re:6&re(3(re(3%
rdb!!rdsoqrdO`mqgSNmqgO*GrI9BJ]79^,qgJHmrdFZmrdautrdaltrdaltre:?(rIb3)K`6])K_pE$
K`6]&K`6W'L&Q`(K)U<"Jc:8rJGt#pIJ\KmIJ\JEJ'iasJ*2=YIf"QmIf=cmIf=lsJ,XuqK)U;tK)UK'
KDU?$L&Qc&KDpQ'L&6Q&KDpT(KDpK%JGt-!K(slqIf"QjIf=cmIY!!FJ!5BZIf"QmIf=cmIf=lsJ,Xuq


K)U;tK)UK'KDU?$L&Qc&KDpQ'L&6Q&KDpT(KDpK%JGt-!K(slqIf"QjIf=cmIeeJEIt<*#It<*#It<*#
It<*[J,=]lIK"]pIJ\KmJGt&tJGXrtJGXrtL&Q`%K`6])K_pE$K`6]&K`6W'L&Q`(K)U<"Jc:8rJGt#p
IJ\KmIJ\KBIt<*#J)u1WIf"QmIf=cmIf=lsJ,XuqK)U;tK)UK'KDU?$L&Qc&KDpQ'L&6Q&KDpT(KDpK%
JGt-!K(slqIf"QjIf=cmI]%[HIu]$XJGt&tJGt*"JcUITre(3'reUQ1repc:rfR2Crg*POrgs+^rhTOk
riZ7)rj2U:rkJHMrlb;drmC_srn@A.ro*k<roj@JrpKdTrq-3_rqHEgrql]mrr)iqj8\0>rr2oqrqucl
rqZQfrq69]rp]pSrp0RHroF(:rn[S,rmq(qrlkA`rk\TIrji$5riZ7#rhTOergs+Vrg!JGrf@&;reg]0

re19'rdautrdOiprd=]lUNqE9O*UVIqfr3gHMVseH2)a]IK"]mJ,=cqJa\-dJc:3!J,=]iIK"TmHN&9j
H1cL_H2Di;H2W#>H+SA!Gl)d]HN&3bHh`$gIf"WlJ,k-$JV!9?qgn`srdXfopjN-grd+Qjrd"0_rd"Bc
JU,XgJU-F(qfr!`pj2pbpj;dardO`oqgeZsmst:drdautqgSEjrdFcmrd+Qjrd"0_rd"BcJU+);PBm%M
qg%s_rd"9cpjN-jqg\KnrdjNgqgn`srdXfopjN-grd+Qjrd"0_rd"Bcq0@O:JU)flJU)flJU)flJU+eO
qfr!`pj2pbpj;dardO`oqgeZsmst:drdautqgS<grd4Wjrd4Wiom6U_qfpS8JU)flja$`Jqg%s_rd"9c
pjN-jqg\KnrdjNgqgn`srdXfopjN-grd+Qjrd"0_rd"BcVg3i=Mg>;Krd=]n!.FrtIf=irJGt3#L&Qi+
MZ/S6O8b=AQN!9NT)PG_V#ICnXo>U)\c0;A_>_RUc2Q)hf)FA%h>Z@3jSn?Ali-;NnG`"Xp&=^bq>U9j
r;QZoro=%=s8N#srVl`oqYp<ipAX^`o)A.XmJcGNk5OB>hu;C0f`'A!ci2)d`r<dQ]Df5;Yl:^&VuE@g
Sc5,XPl?gEO8b%9M#N/.Jc:3!J,XipHiA?jGlDmcFea&0FH:P=F8g7^F`mG$rce6_piudard4WjqgJHk
qgJ6erdFZkrdFQfrcnEfrcn<`rce?arc\0]rcIpVJTUj4JTSMGpiHFVol^7Xqf_aZrd+Qjrd+Hi!.4fp
I/A?eI/\QkI/\QhHN&0gH2`'cG5c^bFoHR]FoHLXF+JG\FFePsFSKqVFS0eUGPcRYGlE$gHiA?gIK"Wk
IJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]FSKp.FJX)CFSKqVFS0eUGPcRYGlE$gHiA?gIK"WkIJA3h

IJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]FSKqQFFeObFFeObFFeObFFeObFLcMgF8g:SFoHU^G5-=]HN&9j
HM`-iI/A?eI/\QkI/\QhHN&0gH2`'cG5c^bFoHR]FoHLXF455^FFePqFSKqVFS0eUGPcRYGlE$gHiA?g
IK"WkIJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]FSKpTFFeOlFT-F^GQ)geH3&><rd4WlrdXotrdk''
reUQ2rf@&ArfmDOrgs+^rhoarrilC0rjr*Erl4r\rm1Smrn%/(rnm_8roX4GrpB^Srpp']rq??erql]m
rr)iqj8\0>rr2oqrql]krqZQerq-3[rpTjProsFDro="8rn@A&rmC_hrlG)Vrk8<?riuI'rhf[hrgs+W
rg!JErf-o8re19&rdXoqrd+QgrcS3^rc7mTqer?LJSpNdrb_XPq/-(Iqel:Mqf;RTrc\9brc\9bpiud^
qf_s_qfr!^rc\9`rc\0[qf;RQqel(Drbh^PJStF(JSr);rb_XPokjSDqf)FQqfDa[rce?brce<cr-83b
qf_s_qfr!^rc\9`rc\0[qf;RQqel(Drbh^PJSrkQJSsXgrb_XPokjSDqf)FQqfDa[rce?brce-^rce6_
rce6aqfi$_rcS3`qfDXTqf)FMokj\Grb[4(V/DK7rb_XPokjSDqf)FQqfDa[rce?brce-^rce6_rce6a
qfi$_rcS3`qfDXTqf)FMokj\Grb_IKJSp$VJSp$VJSp$VJSp$V\ShC`rbhCGqel:Mqf;RTrc\9brc\9b
piud^qf_s_qfr!^rc\9`rc\0[qf;RQqel(Drbh^Pdr'_SJSsRerb_XPokjSDqf)FQqfDa[rce?brce-^
rce6_rce6aqfi$_rcS3`qfDXTqf)FMokj\Grb\QNJSpKcqeu@N!-/*\ErL.ZFoHXbHN&?lJ,Y'!K`6o/

NrG.>Q2[3NT)PJ`VuEarZ2V63^&GqKa8X<^dJh\qgA^"/ir8'=l2L&Kn,DkVo`"R`q>U6iqu6Qnro=%=
s8N#srVl]nqYp<ip&=R^nG_kTli-/JjSn-;hYu1,eGdhobPoN\_>_(G[JmB/WW&^mT`1DZQN!'HNrFq8
L]2l(J,XipGlDmcFT-=[E;jbSD>nANCSPWqC6*-&B`Vs`!,DLIrbDFJqeZ7Krbh^Rrc%aTrc@jVqfVdW
rcJ-^piQCSrc7mTrbh^PqeZ7IrbDFHrbD+?JSP-uJSMf3okFD?rb;@HrbMCIrb_XPrbqdTqf;[WqK)a[
FSg4XF8g:\Fng(UF8g4WE;jbSD>S/KC]8)JC&Vl?Bn:$HC4U-_C@u<?CAqrHCAr#GD#S;NDZ4SRE;O\T
F80kSFo-7ZFT-FXFSg.YEr0hTDZ4MMD#S5LCAqrHC@u:lC8G[/C@u<?CAqrHCAr#GD#S;NDZ4SRE;O\T
F80kSFo-7ZFT-FXFSg.YEr0hTDZ4MMD#S5LCAqrHC@u<:C4U,NC4U,NC4U,NC4U,NC:S*PC&VlHC&VlH



C\qrID>nGPDuO_QErL.TFSg4XF8g:\Fng(UF8g4WE;jbSD>S/KC]8)JC&Vl?C"$gJC4U-]C@u<?CAqrH
CAr#GD#S;NDZ4SRE;O\TF80kSFo-7ZFT-FXFSg.YEr0hTDZ4MMD#S5LCAqrHC@u;=C4U,XCAr#JD#S8O

D?4Wmrc%jWrcJ-_rcnEirdOitreLK1rf6u@rg*PPrh07eri,n#rjDa;rk\TRrlb;frmh##rndY5roF(C
rp0ROrp]pYrq69drqcWkrr)iqj8\0>rr2oqrql]krqQKcrq$-YrpKdOroj@Aro!e3rn%.urm1Sbrl"fN
rji$7riZ6trhBC`rg3VJrf@&9reCE(rdXoord"Kbrc7mSrbVRLrbDFGqe,n?WF^WlN+N!#ral(@!G?$F
BDuNBBDuTDBDZEBC]8/LDZ4MPDtn;NEW1"OEW1"XEVOMPDZ4MPDZ4JOC]8&IB`;ZDB_uE@BDZ9>Aq=Oi
AV"F&Ac?<@Ac?<@BDuNBBDuTDBDZEBC]8/LDZ4MPDtn8OE<1'!rc7[Orc8!Xpi-4Mrb_XPrbVRLrb;@F
rb)4Dqe#h?qdob=JS!,<JS!nRrau.@rau.Brau.Brb2:Dqe?%FrbVROrb_XQpi-4Prc7[Orc8!Xpi-4M
rb_XPrbVRLrb;@Frb)4Dqe#h?qdob=JRtQeOCeE'ral(@rb)4Brb)4Drb)+BrbMLLrbh^PrbqRNrc.pX
ol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@rb)+>ratk8JRsCDJRsCDJRsCDJRsCD[UoGMral(@rb)4B
rb)4Drb)+BrbMLLrbh^PrbqRNrc.pXol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@rb)+>rasMgJRsCD
iar+$ral(@rb)4Brb)4Drb)+BrbMLLrbh^PrbqRNrc.pXol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@




rb)+>raqs;JRssTrau%?rb;@H!,DUNC]82JDuOeVFT-RbI/\WpK)UQ)MZ/\9PQ$pJT)PJ`VZ*atZi7N7
^])1NaSsNbe,Ituh>Z@3j8S9AlMg5NnG`%Yp&=acq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.XmJcDM
kl0T@hu;F1ec+"rci1r`_Z%=L[JmE0X8\jmT)P2XPQ$XBMuJD/Jc:/uGlDjbF8g.XDZ4JOB`;WCAc?3=
@fBf2@"D^H@/++,@/XL1@JaU4Ac$->CA;TDD#S>LD>S/HD>nGPD>S,GCAqlFB)?0:AG]g4@.dlX@/XJa
@(ThA?he%+@JaU4Ac$->CA;TDC]J>RDJo>gqeZ.Hrbh^PqeQ(Drb)4BqdoY8qdKA0oj<8Xd9qN5k@"'l
pgEu-qdfS8qe,nCphTkFrbhUMqeZ.Hrbh^PqeQ(Drb)4BqdoY8qdKA0oj<8XV-oKppg<f(qdKA4qdoY;
rbD4DrbVROqec4Hqec=Mrb_OJqeH+Crau%=qdfS4qdB)(q-\b]JRF%:JRF%:JRF%:JRH#rpg<f(qdKA4
qdoY;rbD4DrbVROqec4Hqec=Mrb_OJqeH+Crau%=qdfS4qdB)(dpR`7JRISIpg<f(qdKA4qdoY;rbD4D
rbVROqec4Hqec=Mrb_OJqeH+Crau%=qdfS4qdB)(VdP'`MdZNmraPk:!+c1BAc??AB`;iIDZ4VSF8g@^
GlE3lK)UH&MuJe:PQ%$MT)PJ`X8]@&[Jmr?_u@[Tci2Alec+A'hu;X7kl0lHmJcVSoD\C]q#:*gqu6Qn
ro=%=s8N#srVl]nq>U-fo`"F\nG_eRl2KlFiVq^5g]#_%d/M;h`W!^Q^&GD<Y5YF"T`1J\R/W6INW+b5
K)U5uHiA0eF8g.XDZ4GNC&V]CAH$';@/aO4?Me$->_-.@>lIt$>QA%+?2e4.@K'd9@f'^8B)ZHBB_uN@
C\VZ>C]8)JC&VfFBDuN?AH$';A,B^3?iF>^>jbjJ>e=8?>P27u?2e4.@K'd9@f'^8B)ZHBB_uKDC]%uC
CA;TDCAqrHB`;ZDB)?-<@fBm7@JaF2?%H7t>_-/C>lIt#>l.h+?i+:2A,]s7AH$3?BDuTAC&;]@CA;TD
CAqrHB`;ZDB)?-<@fBm7@JaF2?%H7H>a&Fl>P27u?2e4.@K'd9@f'^8B)ZHBB_uN@C\VZ>C]8)JC&VfF
BDuN?AH$';A,B^3?iF?r>_-.2>_-.2>_-.2>_-.2>e+,=>P27u?2e4.@K'd9@f'^8B)ZHBB_uN@C\VZ>
C]8)JC&VfFBDuN?AH$';A,B^3?iF?L>_-.2>if5i>P27u?2e4.@K'd9@f'^8B)ZHBB_uN@C\VZ>C]8)J

C&VfFBDuN?AH$';A,B^3?iF>u>_-.?>lJ%.?N+=2?iXX:@Uf=Hral(CrbMLNrc%jXrcS3erdXp!reUQ4
rfR2Irg`t\ri,n#rj;[<rk\TQrltGirm^r%rndY5roa:Frp9XRrq$-]rqHEfrql]nrr1sXj8],Xrr)in
rqZQfrq-3\rp]pRrosFEro!e3rn@A#rm:Ygrl"fOrk/69riH*rrh07[rg!JDreg]0rdauqrd"K`rc%jS
rbDFGrau.<ra>_4ra#M.r`fA*VHJIQK384Y>5_Y%>Q.t+?iFI1@K'g:Ac$*=B`;`FB`;ZAB`;`FB`;`F
BDZ<<AG]g7@/aO1?Mdt(>528"=FjWR=b0_Z=o2D">Q.t+?iFI1@K'g:Ac$*=BE2`IBkdQ[rb)+Arb;@F
rb;@Eqe#_9qdKJ3ra5P/qcir$pf[SuJQ^B'JQ^`1qc`l$ra,J/ra>V3rac">qe#h@rb;@Frb)+Arb;@F
rb;@Eqe#_9qdKJ3ra5P/qcir$pf[SuJQ\gPLKXLXqcj&+qd9>1qdKJ7rakt=rb2:Frb2:Dqe5tCrb2:F


rb)+?qdfS4ra>_4qd0/(qc`btr`Ju!JQ[P,JQ[P,JQ[P,JQ[P,X]bO)qcj&+qd9>1qdKJ7rakt=rb2:F
rb2:Dqe5tCrb2:Frb)+?qdfS4ra>_4qd0/(qc`btr`IWPJQ[P,fie2Uqcj&+qd9>1qdKJ7rakt=rb2:F





rb2:Dqe5tCrb2:Frb)+?qdfS4ra>_4qd0/(qc`btr`H($JQ\+<qc`u'r`oG.!+,b6?iFI4@K'm<B`;cG
DZ4VSErL@`I/\ZqLAm,1O8bFDRf8uZVZ*^sZMqN9_#D:Obl5rfe,J)#h>Z@3k5OTDm/HMRoD\C]p\t!f




qu6Qnro=%=s8N#srVlZmq#:$eo`"F\n,D\Qkl0]Ci;VO2g&BG!cMkuc_Z%7J\c/i4WrAgnSc4uTP5^C=
LAlf(If=WlFoH@ZD>n;LAc?3:@/aI2>5hY'=8l7t<N/rK<0(#X;ts;m<E0$!r`9#"r`T5&qc`u)ra,S2
ra>_6raYq:pgjA8qdf\;qdf\9raPk:raGe6ra5Y2ra#D)r`K/&r`K/#r`+MKnPk'=]2\c.pf.5mr`9#"
r`T5&qc`u)ra,S2ra>_6raYq:rFGh:rakt;rakt;raYq:raYq9ra>_4ra,S0qc`u$r`T5&r`9"uJQ0Tf
JQ1f3r_rSkr`/qur`B)%r`K&$ra#M0ra5Y4raGe9raPY5rakt;rakt;raYq:raYq9ra>_4ra,S0qc`u$
r`T5&r`9"uJQ/%:P>qN[pf.5mr`9#"r`T5&qc`u)ra,S2ra>_6raYq:pgjA8qdf\;qdf\9raPk:raGe6
ra5Y2ra#D)r`K/&r`K/#r`/>bJQ.2"JQ.2"JQ.2"JQ.2"\Q&Q,pf.5mr`9#"r`T5&qc`u)ra,S2ra>_6
raYq:pgjA8qdf\;qdf\9raPk:raGe6ra5Y2ra#D)r`K/&r`K/#r`.!<JQ.2"j])4Xpf.5mr`9#"r`T5&
qc`u)ra,S2ra>_6raYq:pgjA8qdf\;qdf\9raPk:raGe6ra5Y2ra#D)r`K/&r`K/#r`,FeJQ.Y/r`/qu
r`B)$!*TD,>5he(@/a[8Ac?HDD>nMRFoH[cIf=ruL]352P5^jJSc5GaX8]@&\c0>B_Z%^WcMl8kg&Bh,
i;Vj;kl0rJn,DnWo`"Uaq>U6irVlfVs5X.Yrr2lqqYp9hp\sganc&"Vli-,IjSn*:h#?"+dJhDiao9-U
^&GM?YPtO#U]-b^QN!$GM>i2-JGsopG5cO]DZ4GNB`;N@@K'X5>Q.e)=8l8"<W5ts;uT[o;1VT';>=#i
;cEWnr`&ksr`Au!qcir'ra5P1qdT#(raPk8qdBD0qd'2+r`f8%r`B)!r`&YkqbhuBqGDf@\5E$!qc!Jn
r`/r!qcN`"qd'2.qdBA3!FfO,A,]s:@JaI3?Me%->lIt)=T2D$<W5tm;u9ID;9i$i;<1UL;YsDl<;ons
=8Q+s>Ph_*?i+7.@ddh+@fBg5@/aL0?2e+.>PhP%=8l5!<;9Dh;Lq]>;34ZM;YsDl<;ons=8Q+s>Ph_*
?i+7.@ddh+@fBg5@/aL0?2e+.>PhP%=8l5!<;9Dh;YEt=;1VSq;1VSq;1VSq;1VTQ;>=&d;uTbq<W6(s
=Sl>"?2e4.@/FF%A,]s:@JaI3?Me%->lIt)=T2D$<W5tm;u9J>;1VSq;;tIJ;YsDl<;ons=8Q+s>Ph_*

?i+7.@ddh+@fBg5@/aL0?2e+.>PhP%=8l5!<;9Dh;P[0@;3=`T;Z9Vo<;ons<WH2%=',B(r`fA/raGe9


rb2:Grbh^Urce?grdb!%re^W:rg*PQrhKIlric=1rk/6HrlP/armC_urnRM2roF(Brp0RPrpp'\rqHEf
rqcWmrr1sXj8],Xrr)imrqQKerq-3[rpTjProj@Bro!e2rn.4srlkA^rkSNFrjMg/ri#girgNhNrf@&6
re(3"rcnEarbqdPrb;@Dra>_3ra#M+r`B)!r_reoqbX.cJPV>&r_EGgr_EGg!DlSm;#X>k;Z9Vo<W6%u
<Voqu>Q.h*>lJ%.?i+7(@K'[6@JaI3?iF@1>lIq+>Q.h*=nl"r;uT\o;>X2h:B"&g:4Z4>:Ou<R:]=,g
:]=,g:]=2i;>sJm;uTer<rQ+r=oMY)>5he+?2e40?iaYCojRi-raG\3ra5Y1r`oG+r`fA*r`T"rr_reo

r_`Phr_EGgr_A#?d8,<hk>2(Pr_NMgr_NMir_`Ymr_rerr`9"uqcWo&r`];+ra#M1qdB)*ra>_6qdBD1
ra#M.r`];*r`];(pf7;lr_i_mqb[8er_NMgJPW+<P>D0Qr_NMgr_NMir_`Ymr_rerr`9"uqcWo&r`];+
ra#M1qdB)*ra>_6qdBD1ra#M.r`];*r`];(pf7;lr_i_mqb[8er_NMgq+lQ;JPUhmJPUhmJPUhmJPWgP
r_EGgr_EGgr_WSkr_i_or`/qur`/hur`fA*r`oG.ra5P1ojRi-raG\3ra5Y1r`oG+r`fA*r`T"rr_reo
r_`Phr_EGgr_Cp<JPUhmj\PkNr_NMgr_NMir_`Ymr_rerr`9"uqcWo&r`];+ra#M1qdB)*ra>_6qdBD1


ra#M.r`];*r`];(pf7;lr_i_mqb[8er_NMgVb_k>N_fOKr_i_o!*'&"<W6)!=oM_+?iFI4B)ZKCD#SAP
FT-OaJ,Y*"L]3A6Pl@-NU&LthY5Ym/]DfVFa8X<^d/M\sg]$.1jSnBBli-APo)A:\p\t!fqYpHmro=%=
s8N#srVlZmq#:$eoD\:Zn,DVOkPjQAhu;@/fDa.rbl5]__#CtF[Jm<-VZ*7fQi<0INrFb3Jc:&rFoHF\
DuOGLAc?-;?iF:/=oMG#<;oep;#=&c9rUg;9TMmH9E%W\9`Rob:B"&g;>sMk<;oqt=8lD#>Ph_*?N+@3
?i+1/?iFI1?N+7->Q.h*=8l7t<;oep;>X/g:A@P79_V539Y4!t9E%W[:&@]b:]=5j;u9Pn<rQ2">5MP$

>l\13?=*V=ra5P/ra5Y4qd08-qcj&'r`B)"qc*Pmr_`Pgr_E5_JP=6\JP>6#r_*5apeCW\r_NMjr_r\n
r`9#"r`]2'qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nqr_i_mqbR2dpe?<5T1kGBr_*5apeCW\r_NMj
r_r\nr`9#"r`]2'qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nqr_i_mqbR2dpeC?RJP:VgJP:VgJP:Vg
JP:Vg\P2uqr_3)]qbI,dr_`Ynqc*Pqr`B)&qcir'ra,S3ra5P/ra5Y4qd08-qcj&'r`B)"qc*Pmr_`Pg
r_E5_btN[^JP>0!r_*5apeCW\r_NMjr_r\nr`9#"r`]2'qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nq
r_i_mqbR2dpe@GUJP;(tr_<AfqbR8j!E)hp;uTer=oM\*?iFL5Ac?BBDuOeVFoHdfJGt9%NrG4@Qi<ZW
VuEgt[Jmf;_#DFSbl5ugfDaP(hu;^9kl0lHn,DkVoD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc&"V
lMfuGjSn$8gA]\&d/M5f`r<dQ])K)9XT#*rTDk/UOoC==K`6K#HiA-dE;j_RB)Z<>?iF@1>5hY'<;oem
:]=)f9VY428rlUA8c)*\9M>F[r_*5br_EGhr_`Ynr_i_pr`/r"r`T5(r`o>+ra,8'ra,S0qcs,(r`T5&
r`/qsr_i_or_`Ykr_EGer_*5ar_*5_qal?2rCVW5]1Vrlqb$i]r_*5br_EGhr_`Ynr_i_pr`/r"r`T5(
r`oD-!F9"1?M.V'?N+7->lIq+=oMP&<W5ts;Z9Vo;>sDk:B!ue9E%Wa9E%Q\8V'L]8qBUt9)D3W9)_N`
9E%Zb:B")h;>sMn;Z9Yp<W6,"=oMV(>l.h+?M.V'?N+7->lIq+=oMP&<W5ts;Z9Vo;>sDk:B!ue9E%Wa
9E%Q\8V'L18s;mE8c)-Z9`@]a:&[oe;#X>k;uT\o<;ons=T2J&>5he(?2e1'?2e10?2In+>5h\(=T2>"
<;oep;uTYn;#X5h:&[fb9`@]a9)D3U8qBTc8qBTc8qBTc8qBTc9"@Rk8c)-Z9`@]a:&[oe;#X>k;uT\o
<;ons=T2J&>5he(?2e1'?2e10?2In+>5h\(=T2>"<;oep;uTYn;#X5h:&[fb9`@]a9)D3/8qBTc9'&\B
8c)-Z9`@]a:&[oe;#X>k;uT\o<;ons=T2J&>5he(?2e1'?2e10?2In+>5h\(=T2>"<;oep;uTYn;#X5h
:&[fb9`@]a9)D2X8qBTm9)_N`:&Rig:J^sfr`&l!r`];,ra5Y7rau.Hrc.pZrd4Wpre190rfI,Frh'1d
riH++rjr*Erl4r\rm:Yqrn@A.roF(Brp'LOrpg!ZrqHEfrqcWmrr1sXj8],Xrr)imrqQKerq$-ZrpKdN
roa:@rndY.rmh"prlb;[rkJHCrj2U)rhTOcrg!JErepc.rdXonrc8!VrbVRFraPk6r`];'r`9"rr_WSi
r_3;ar_!&ZWCVS2O%B7?pdbEW8H;?]9D_E^:B"&g;#XAl;uTbk=SQ,"?2.\%?2e(->lIt,=T2D$=T2;!
;uT\o;#X8i:B!ra9D_;38G#H(8@qFl8,,XS8cDB[9`@fd:]=2i;Z9Vo<;9Sl>6.r4ra#;(qd'2*r`oG,


r`K/$r`K/!r_reor_WSir_EGdqb-fXJOmjQJOnrpr^Z`Sr^m)^qb6uar_NMir_i_or`&Yppfm`'pg!]%

r`fA,r`fA(r`B)$r`&kqr_i_lr_NMgr_32^qal?0S4Ji7r^Z`Sr^m)^qb6uar_NMir_i_or`&Yppfm`'




















pg!]%r`fA,r`fA(r`B)$r`&kqr_i_lr_NMgr_32^qap9JJOk>_JOk>_JOk>_JOk>_\Oc]ipdkBUr_*,^

r_EGgr_WSlr_reqpfR;qra#;(qd'2*r`oG,r`K/$r`K/!r_reor_WSir_EGdqb-fXb".(SJOnlnr^Z`S
r^m)^qb6uar_NMir_i_or`&Yppfm`'pg!]%r`fA,r`fA(r`B)$r`&kqr_i_lr_NMgr_32^qamAMJOkel
r^m)]r_*5a!)EVk:]=5j;Z9_r=T2M'?iFO6Ac?NFDuOeVHN&BmKDpf.OT(OETDk\dX8]I)\c0AC`W"$Z




d/MSpg&Bk-j8S6@lMg5NnG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>hYu7.ec*no
ao96X^&GM?ZMpm'U]-h`PQ$XBMZ/2+IK"KjEW0kTCAq`B@/aI2=T2>";uTVm:B!rd9)_E]8>AY*7ZU%9
7JfOT7n3PLr^d#[r_!/_qb@&dqbmDor`/quqcNi$r`o5%r`fA,qc`u$r`9#"r`9"rr_`Ykr_<Acr_*5_
r^m)[qa^WTqaH'*rC2?-]12ZdqaUQTr^d#[r_!/_qb@&dqbmDor`/quqcEi%!Er\+>khM%>Q.n)>5hY'



<rQ2"<rQ"r;>sDk:&[ic9E%Q_8cD9X8,c!T7=dqU7Y+%l7f,XO7fGpW8H)3[9)_K\:&[ud;Z9_r<W6%r






=T2M'>khM%>Q.n)>5hY'<rQ2"<rQ"r;>sDk:&[ic9E%Q_8cD9X8,c!T7=dq)7[$==7JfRR8,c'Y8cD?]
9D_H_;#=/i<rQ+u<r6"u>5he%>5hb*>l._(=T2A#=8l8";Z9Pm;#X2g9`@]a9)_E]8GbpV7f,XM7Y+$[
7Y+$[7Y+$[7Y+$[7_)"c7JfRR8,c'Y8cD?]9D_H_;#=/i<rQ+u<r6"u>5he%>5hb*>l._(=T2A#=8l8"
;Z9Pm;#X2g9`@]a9)_E]8GbpV7f,X'7Y+$[7cd,:7JfRR8,c'Y8cD?]9D_H_;#=/i<rQ+u<r6"u>5he%








>5hb*>l._(=T2A#=8l8";Z9Pm;#X2g9`@]a9)_E]8GbpV7f,WP7Y+$e7fGsX8cD<^9E@g\r_EGhr_res

r`K/*ra>_8rbDFLrc.p^rd=]rreg]8rfd>PrhKImrj)O5rk8<LrlY5drmh#$rndY6roX4ErpKdTrq$-`
rqZQirr)iqj8\0>rr2oqrqcWhrqHE`rpg!UrosFEro3q6rn7;#rm1Scrl"fLrjVm4ri5smrgj%Prf6u7
rdauprce?]rb_XKraPk6r`oG(r`/qqr_WSgr_*5^r^d#YqaIJPJOGPer^6ZQr^H`S!(QrXr^coYr_3;c
qb[8hqc3VrqcNi#r`f&!r`fA)qcN_rr`/qpqb[8dr_32]r^d#YqaUQRJOK6#JOI+<r^6ZQr^H]Rr^ZrY
qb$i]r_<8dr_`Pmr`8nu!*K>*=oMXu>5hb*=o2=u<rQ+u;>X2h:&[i`9)_B\8,GdT7=dkM7"Ibh7/fRQ
7/fXP7fGpW8Gc$Y9`@c`;#X>h<W6%r=T2J&>P22!>Q.e&=Sl.u<W5kp;#X;j:&[i`9)_B\8,GdT7=dk!
7$C%<6iKLQ7JfRR8,c'V9)_N`:&@cd;>XAm<r6"u=oMXu>5hb*=o2=u<rQ+u;>X2h:&[i`9)_B\8,GdT
7Irou7"IaW7"IaW7"IaW7"Ib:7/fRQ7/fXP7fGpW8Gc$Y9`@c`;#X>h<W6%r=T2J&>P22!>Q.e&=Sl.u
<W5km;#X2g9`%H]8H)-V7fGj$7"IaW7--i96iKLQ7JfRR8,c'V9)_N`:&@cd;>XAm<r6"u=oMXu>5hb*
=o2=u<rQ+u;>X2h:&[i`9)_B\8,GdT7A3,#7#j\77K,gV8H)0\9*%[Yr_<Agr_i_qr`B)(ra5Y6rb;@K
rc.p]rd=]qre^W7rfd>PrhKImrj)O5rk8<LrlY5drm^r#rndY6roX4ErpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm4ri,mkrg`tNrf-o4rdauprcS3ZrbVRI
raGe4r`fA&r`&kor_NMer_!/\r^ZrWr^<VNJO>8]r^?ZQ!(HlVr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>e
r`K%ur`/qsr_WSir_EGdr_*5_r^m)Zr^QcRr^?`Qr^)0'rBl-'[6sp]qaLKRr^ZrZr_!/_r_3;dr_NMi
qc*Gnr`9)&l<4*gqc<\rr`&knr_NMgr_3;ar_!/]r^ZrWqaLKPr^6ZOJO@gPJOAB`r^?WPr^QlWr^m)]
r_*5ar_EGgr_WJkqc<\tkun!fqc<\rr`&knr_NMgr_3;ar_!/]r^ZrWqaLKPr^6ZOJO?8$NC3\5qaLKR
r^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qsr_WSir_EGdr_*5_r^m)Zr^QcRr^?`Qr^-EJJO=uU

JO=uUJO=uUJO=uUZU=^[qaLKRr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qsr_WSir_EGdr_*5_
r^m)Zr^QcRr^?`Qr^,($JO=uUha@B2qaLKRr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qsr_WSi
r_EGdr_*5_r^m)Zr^QcRr^?`Qr^*MMJO>PeqaCEQr^ZrY!(m8a9)_N`:]=5j<;oqt>Q.t.@K's>C]8;P
FoH^dJGt?'NW,+?SGo8^WW'4&\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!fqYpHmro=%=s8N#s
rVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==LAl]%H2_pbE;jYPBDu<<
?2e%,<W5qr:]=)f9)_E]7fGjU7/K?N6@hIa6N0:J6Ms1N6iKOR7fGpW8H)3[9D_K`:]=;l<;oqt<W6(a
=T2A#<W6%u<;ohn:]=,g9E%Q_8H)-V7JfH'6M*Tq6G#S`62O"G6iKOR7fGpW8H)3[9D_K`:]=;l<;oqt


<W6&"=R'#f<rQ+u<rQ(t;u9Ai:B!oc9)_B\8,GaP6\.SF6@hJd6N0:J6Mj.L7K,dU8,c'Y8cDB[:B"&g


;uTbq<rQ+u=6Wid<rQ+u<rQ(t;u9Ai:B!oc9)_B\8,GaP6\.Ro6Bab862O"G6iKOR7fGpW8H)3[9D_K`
:]=;l<;oqt<W6(a=T2A#<W6%u<;ohn:]=,g9E%Q_8H)-V7JfIA6@hIS6@hIS6@hIS6@hIS6FfG^62O"G
6iKOR7fGpW8H)3[9D_K`:]=;l<;oqt<W6(a=T2A#<W6%u<;ohn:]=,g9E%Q_8H)-V7JfHp6@hIS6KLQ5
62O"G6iKOR7fGpW8H)3[9D_K`:]=;l<;oqt<W6(a=T2A#<W6%u<;ohn:]=,g9E%Q_8H)-V7JfHD6@hI`
6N0@O7/fXS7K?!\8P/nSr_<Afr_i_qr`];,ra>_<rbMLPrcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fY
rm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],Xrr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qn
rlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrb)4<ra#M,r`/qrr_NMfr_!/]r^QlUr^?WNr^*\P
JO,Gbr^-TMqa13J!(6`Sr^QlWr^d#[r_*,`r_NMlr`&bpr`A>dr`8nrqc!Afr_EGcr_!/\r^ZiSqa:$C
JO'9%JO."9r^-TMqa10Ir^HfUr^ZrYr^m)^qbI,dr_reqqc3Vs!*JMgr`8nrqc!Afr_EGcr_!/\r^ZiS
qa:$CJO.dOJO/Qer^-TMqa10Ir^HfUr^ZrYr^m)^qbI,dr_reqqc3Vskudpcqc3MlqbR2dr_*5_r^d#Y
qaLBLog43qW'Q_8r^-TMqa10Ir^HfUr^ZrYr^m)^qbI,dr_reqqc3Vskudpcqc3MlqbR2dr_*5_r^d#Y
qaLBLog8RBJO+iQJO+iQJO+iQJO+iQ]KuN`r^$EJqa:?Or^QlWr^d#[r_*,`r_NMlr`&bpr`A>dr`8nr
qc!Afr_EGcr_!/\r^ZiSqa:$Cej4jQJO/Kcr^-TMqa10Ir^HfUr^ZrYr^m)^qbI,dr_reqqc3Vskudpc
qc3MlqbR2dr_*5_r^d#YqaLBLog5ZEJO,Mdqa19Lr^?`Sr^HlZ!D,l^9E%Zb:]=8k<W62$?2e72BDu]G
DuOkXHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5s@\
rqlZnqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL\,NZ3W;`OjSGnZMN;eS2J,X`mFT-4XCAqiE
@/aI2>5hP$;Z9Jk9`@Z`8cD3Y7K,^P6iKER5_21`5l3kE6Ms1N6iKOO7fGsX8cDB^:B!ue:]=8k<;T\p
=6Wid<r5nr;uT\l:]=,g9E%N^8H)*U7JfII6N09%5QF'#5e]M\62O"G6iKOO7fGsX8cDB^:B!ue:]=8k
<;T\p<rc@f=T2@u<W5qr;Ys8h:B!oc8cD9[7f,XO6hj"I6%M;N5_22c5l3kE6Mj.L7JfRR8H)3[9E%]c
:&[rf;Z9Ym<W6(a=T2@u<W5qr;Ys8h:B!oc8cD9[7f,XO6hj"I6%M;"5aF\462O"G6iKOO7fGsX8cDB^
:B!ue:]=8k<;T\p=6Wid<r5nr;uT\l:]=,g9E%N^8H)*U7JfII6N0:K5_21O5_21O5_21O5_21O5eKAZ
62O"G6iKOO7fGsX8cDB^:B!ue:]=8k<;T\p=6Wid<r5nr;uT\l:]=,g9E%N^8H)*U7JfII6N0:%5_21O
5j1K162O"G6iKOO7fGsX8cDB^:B!ue:]=8k<;T\p=6Wid<r5nr;uT\l:]=,g9E%N^8H)*U7JfII6N09N
5_21b5l3nI6iKLQ7K,aV8HDCSr_*5ar_NMkr`/r$r`oG1rau.FrbqdXrd+QnreCE2rfR2Mrh9=iriuI3



rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mrau.;r`oG*r`&kpr_NMfr_!/\r^QlT
















r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^H]Sr^m)]r_<Aer_NDhr`&ksqcEYspfIGsr`B)"r`/qsr_reo




r_NDcr_!/]qa^WSr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sqa^WWr_!/ar_EGgqbmDmr`/nu
!EWA"=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca8c)$W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7JfUS8cD?]:&[oe:]"&h<;onp=8Q+p=8l>$=8l8"<W5ts;uT\o:]=)f:&[ca8c)$W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXP8,c*Z9)_Qa:B"&d;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca
8c)$W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7JfUS8cD?]:&[oe:]"&h








<;onp=8Q+p=8l>$=8l8"<W5ts;uT\o:]!lc9)_EZ8,bsV7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K

7/fXP8,c*Z9)_Qa:B"&d;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca8c)$W7K,^S6iKFL62j.K

5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_<Afr_i_pr`T5+ra>_;rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl

rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2
62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU






8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc



9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O
5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR
7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S



r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O
5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p

r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts






=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"



5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7



r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts

=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct
5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M

6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL









62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn








:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z









9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O
5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\



8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O
5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[
84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW



r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts

;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2
62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O
5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR
7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W












7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%




























































rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O









5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca









8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p








=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P



r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7

















































5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W









7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp











<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K









7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]



qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts






=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"



5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7



r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts

=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct
5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M

6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL









62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn








:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z









9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O
5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\



8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O
5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[
84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW



r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts

;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2
62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O
5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR
7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W












7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%




























































rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O
5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]


qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I

5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"
5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn

:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct
5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M
6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL
62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O
5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O
5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[
84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
































6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<








































rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ



r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j

;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2
62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O
5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR
7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S



r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O
5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p

r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts






=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"



5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7



r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts

=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct
5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M

6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL









62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn








:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z









9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O
5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\



8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O
5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[
84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW



r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts

;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2
62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O
5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR
7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W












7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%




























































rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O
5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]


qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I

5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"
5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn

:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct
5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M
6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL
62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O
5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O
5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[
84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW



r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;e

r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#



JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2
62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O
5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR

7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O
5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q



r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"

5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct
5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M
6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL
62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O
5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O
5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[
84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU



r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z

9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S

6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#





JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>2

62j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj


qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE



6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!
5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O

5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq


;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR








7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y

r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU


8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^


:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K4
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O
5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_P
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\7
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"
5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_2255lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO"!5_21O5j1K45Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mrau.;r`oG*r`&kpr_NMfr_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^H]Sr^m)]r_<Ae
r_NDhr`&ksqcEYspfIGsr`B)"r`/qsr_reor_NDcr_!/]qa^WSr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sqa^WWr_!/ar_EGgqbmDmr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca8c)$W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7JfUS8cD?]:&[oe:]"&h<;onp=8Q+p=8l>$=8l8"<W5ts
;uT\o:]=)f:&[ca8c)$W7K,^S6iKFL62j.K5Cl(u5aF\75Q3qF62O%K7/fXP8,c*Z9)_Qa:B"&d;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca8c)$W7K,^S6iKFL62j.K5Q!ct5_21O5_21O5_21O5_225
5lO"I5l3kE6iKLQ7JfUS8cD?]:&[oe:]"&h<;onp=8Q+p=8l>$=8l8"<W5ts;uT\o:]!lc9)_EZ8,bsV
7/fRQ6Mj(J5lO"!5_21O5j1K45Q3qF62O%K7/fXP8,c*Z9)_Qa:B"&d;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;Z9Jh:&[ca8c)$W7K,^S6iKFL62j.K5H6u"5`n>262j4M6iKOR7K>s[84`_Pr_<Afr_i_pr`T5+
ra>_;rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2fnrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXom
rcJ-XrbDFEra>_2r`];$r_i_kr_3;`r^m)Yr^HfSqa:?LX?_>%P!Jn1qa13J!(6`SqaUQUr^m)^r_EGe
r_NMkr`&bpr`A>dr`8nrr_reoqbR2dr_*5^r^d#XqaLBLpd4sGJNs3#JO$q7qa(*Gqa:?OqaUQUr^m)^
r_EGer_NMkr`&bpr`9)%l<+$dqc3Vor_iVhr_EGcr^m)[r^QcRqa:-Fr]u*#e3JRMl9P54qa10Ir^H]R
r^d#[r_*5cr_<Afr_i_pqc3Vskudpcqc3Vor_iVhr_EGcr^m)[r^QcRqa:-Fr]u*#W'HY6qa(*Gqa:?O
qaUQUr^m)^r_EGer_NMkr`&bpr`A>dr`8nrr_reoqbR2dr_*5^r^d#XqaLBLpd4sGr'5fuJO"cOJO"cO
JO"cOJO$k5qa(*Gqa:?OqaUQUr^m)^r_EGer_NMkr`&bpr`A>dr`8nrr_reoqbR2dr_*5^r^d#XqaLBL
pd4sGej+dOJO&Eaqa(*Gqa:?OqaUQUr^m)^r_EGer_NMkr`&bpr`A>dr`8nrr_reoqbR2dr_*5^r^d#X
qaLBLpd4sGW^),#PX,+4r^6ZQr^HfU!(d2_8cDB^9`@ie;Z9\q>5he+@/ad;C]88OFT-UcJ,Y3%N;et=
SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!fqYpHjroX7Cs8N#prVlZmq#:$eoD\:Z
mf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==LAl]%H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f
9)_E]7fGjU7/K@N6EEJ(6&\,,6Ms1N6iKOR7fGpW8H)3[9D_K`:]=;l<;T\p=6Wid<r5no;u9Ai:B!oc
9)_B\8,GaP6hj!!62a*#6+B5X6Mj.L7K,dU8,c'Y8cDB[:B"&g;uTbn<W6&"=R'#f<r5no;u9Ai:B!oc
9)_B\8,GaP6hj!!6.%uL60(?/6Mj.L7K,dU8,c'Y8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g9E%Q_
8H)-V7JfII6@hG!6'+D06Mj.L7K,dU8,c'Y8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g9E%Q_8H)-V
7JfII6MWou6%M=Q6%M=Q6%M=Q6%M>162O"G6iKOR7fGpW8H)3[9D_K`:]=;l<;T\p=6Wid<r5no;u9Ai
:B!oc9)_B\8,GaP6hj!s6%M=Q6/k3-6Mj.L7K,dU8,c'Y8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g
9E%Q_8H)-V7JfII6Dm,#6'O\46N0@O7/fXS7K?!\8P/nSr_<Afr_i_qr`];,ra>_<rbMLOrcJ-crdXp%


rf$i=rg`t]ri#h$rjVm?rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmqu5aXj8],Xrr)imrqQKe
rq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"Kbrc%jPrb)4<ra#M,r`/qr
r_NMfr_!/]r^QlUr^?WNWBu/&O$`h3qa13J!(6`Sr^QlWr^d#[r_*,`r_NMlr`&ktr`/r!kudpcr`/qu
r`&kqqbR2dr_*5_r^d#YqaLBLJO8uqJO6t8r^$EJqa:?Or^QlWr^d#[r_*,`r_NMlr`&ktr`/r!!*JMg
r`9"ur`9"tr_r\ir_EGcr_!/\r^ZiSqa5p$a?kGEk<f/6qa10Ir^HfUr^ZrYr^m)^qbI,dr_reqr`9"u
r`A>dr`9"ur`9"tr_r\ir_EGcr_!/\r^ZiSqa5p$S3iE+r^$EJqa:?Or^QlWr^d#[r_*,`r_NMlr`&kt
r`/r!kudpcr`/qur`&kqqbR2dr_*5_r^d#YqaLBLn3V[mJO4oSJO4oSJO4oSJO6n6r^$EJqa:?Or^QlW
r^d#[r_*,`r_NMlr`&ktr`/r!kudpcr`/qur`&kqqbR2dr_*5_r^d#YqaLBLb!LYGJO8Hbr^$EJqa:?O
r^QlWr^d#[r_*,`r_NMlr`&ktr`/r!kudpcr`/qur`&kqqbR2dr_*5_r^d#YqaLBLSjIupN^E_4r^?`S
r^HlZ!D,l^9E%Zb:]=8k<W62$?2e72BDu]GE;jtYHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#

h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL
\,N]4WW&XkSGn]NNW+_4JGsopFoH@ZD#S,I@K'U4>Q.\&<;obo:]=&e9)_B\8,c!W7&E>&6]"207/TIR
7K,dU8,c*Z9)_K_9`@fd:]=2f<;T_q=6Wle=Sl.u<W5ts;#X8i:B!rd9E%Q_8cD6Z7f,XR7/fRQ6@hN&
6\.V46iKLN7K,dU8,c*Z9)_K_9`@fd:]=2f<;T_q<rcCg=oMP#<rQ+u<;o_n:]=,g9`@]a9)_E]8,c!T
7K,^S6iKE'6d\8P6fCE37/KFP7fGpW8cD?]9E%Wa:B"&g;#=5h<rQ1b=oMP#<rQ+u<;o_n:]=,g9`@]a
9)_E]8,c!T7K,^S6iKE'6`!/06iKLN7K,dU8,c*Z9)_K_9`@fd:]=2f<;T_q=6Wle=Sl.u<W5ts;#X8i
:B!rd9E%Q_8cD6Z7f,XR7/fRQ6MX!"6\.UU6\.UU6\.UU6\.V26iKLN7K,dU8,c*Z9)_K_9`@fd:]=2f
<;T_q=6Wle=Sl.u<W5ts;#X8i:B!rd9E%Q_8cD6Z7f,XR7/fRQ6IS;Q6\.V^6iKLN7K,dU8,c*Z9)_K_
9`@fd:]=2f<;T_q=6Wle=Sl.u<W5ts;#X8i:B!rd9E%Q_8cD6Z7f,XR7/fRQ6Dm2%6]jb57/f[T8,c$Z
8c_OVr_3;er_`Yor`9#&ra,S4rb2:Hrc%jZrd+QoreLK4rf[8NrhBCkrj)O5rk8<LrlY5drm^r#rn[S5
roX4ErpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWhrqHE`rpg!UrosFEro3q5rn7;$rm1Scrl"fLrjVm4
ri,mkrg`tNrf-o6rdauprce?\rbVRJraPk6r`oG(r`/qpr_WSgr_*5^r^d#YUIB`&O%&q6r^H`S!(QrX
r^coYr_*5br_NMir_`Pmr`8nur`T,%pf[T"r`T,#r`8nrr_`Ykr_NMfr_32]r^d#YqaUQRqa?!(rC)9+
]1)Tbr^H]Rr^ZrYqb$i\r_<Afr_WSkqc3VrqcEi$!EiS&>528">5h\%=T2@u<W5kp;#X8i:&[i`9)_B\
8,GdT7JfK(7F=PT7H[,:7/fXP7fGpW8Gc$Y9E%Zb:]=2i;>XAm<r6"u=o2Ct=oMV(=o2>#<r5nr;>sDk
:]=)f9`%H]8H)-V7fGjR7"Ie'7?^1;7/fXP7fGpW8Gc$Y9E%Zb:]=2i;>XAm<r6"u=o2Ct=oMV(=o2>#
<r5nr;>sDk:]=)f9`%H]8H)-V7fGjR7/99&7=dmY7=dmY7=dmY7=dn<7JfLP7JfRR8,c'V9)_K_:&[rf
;#X>h<W6%r=T2J#>528">5h\%=T2@u<W5kp;#X8i:&[i`9)_B\8,GdT7JfL%7=dmY7HHu87/fXP7fGpW
8Gc$Y9E%Zb:]=2i;>XAm<r6"u=o2Ct=oMV(=o2>#<r5nr;>sDk:]=)f9`%H]8H)-V7fGjR7&NJ)7>jV6
8,c'Y8H;Ba92#7Yr_WSkr`&kur`oG0raPk@rb_XRrce?hrdb!)rf6u@rg`t^ri,n&rj_s@rl"fYrm1So
rn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],Xrr)imrqQKerq$-ZrpKdMroX4>rndY.rmh"orlP/X
rk8<?rj)O'rhKI`rfd>Breg]+rdFcjrc.pTrbDFBra>_2r`K/"r_remr_EGdr_!/]r^`eRJOY\iqaLBO
!CoW[8,c'Y8cD?]9D_H_;#=/i<rQ+u<r6"u>5he%>5hb*>l._(=T2A#=8l8";Z9Pm;#X2g9`@]a9)_E]
8GbpV7f,W*7f>f-7_;.e7JfRR8,c'Y8cD?]9D_H_;#=/i<rQ+u<r5u!=ohf1r`o5%r`fA,qc`u$r`9#"
r`9"rr_`Ykr_<Acr_*5_r^m)[qa^WTqaH'*d7/[Vk=5>;qaUQTr^d#[r_!/_qb@&dqbmDor`/quqcNi$
r`o5%r`fA,qc`u$r`9#"r`9"rr_`Ykr_<Acr_*5_r^m)[qa^WTqaH'*V+-Y<qaLBOr^ZrYr^m)]r_*,_
r_WJir`9"ur`8nur`];+pfdZ$r`o>(r`K/#r`B)"r_i_mr_WSgr_3;ar_!/]r^coVr^QcRq*op)JOY2[
JOY2[JOY2[JO[1>qaLBOr^ZrYr^m)]r_*,_r_WJir`9"ur`8nur`];+pfdZ$r`o>(r`K/#r`B)"r_i_m
r_WSgr_3;ar_!/]r^coVr^QcRdmemXJO\`jqaLBOr^ZrYr^m)]r_*,_r_WJir`9"ur`8nur`];+pfdZ$
r`o>(r`K/#r`B)"r_i_mr_WSgr_3;ar_!/]r^coVr^QcRVac5,Mam\:r^m)]!)*De9`@fd;#XDm<rQ5#
?2e72A,^6BD>nPSGlE*iJc:Q+NrG7ASc5D`WrB='\Gj2@`;[pYci2Jog&Bk-ir8*>l2L,MnG`%Yp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)MNkPjN@hYu7.ec*qpbPoK[^](eCZi7$)V#I"cQ2ZmEMuJA.
J,XcnErL"VD#S#F@fBa6>5hY'<rQ"r;#X8i9`@]a9)D2Z8:a<m8H)-S8-):R!(m/_qb6uar_NMir_i_o
r`&Yppfm`'pg!]%r`fA,r`fA(r`B)$r`&kqr_i_lr_NMgr_32^qal?0oLOO(]1DokpdkBUr_*,^r_EGg
r_WSlr_reqpfRAs!F&e-?2.\%?2e(->lIt,=T2D$=T2;!;uT\o;#X8i:B!ra9D_;38B=>Q8EWPC8,,XS
8cDB[9`@fd:]=2i;Z9Vo<;9Sj>Q.q'>l.h+>Q.n,>Q.b(=8l>$<;ohq;Z9Ml:]=,g9`%K[8V'F&8<ZUD
8,,XS8cDB[9`@fd:]=2i;Z9Vo<;9Sj>Q.q'>l.h+>Q.n,>Q.b(=8l>$<;ohq;Z9Ml:]=,g9`%K[8ao9%
8:a<_8:a<_8:a<_8:a=B8H)-S8H)3[9D_E^:B"&g;#XAl;uTbk=SQ,"?2.\%?2e(->lIt,=T2D$=T2;!
;uT\o;#X8i:B!ra9D_<'8:a<_8EEDA8,,XS8cDB[9`@fd:]=2i;Z9Vo<;9Sj>Q.q'>l.h+>Q.n,>Q.b(
=8l>$<;ohq;Z9Ml:]=,g9`%K[8Y/J(8<-7?8cD?]9E%Tb:B=6er_`Ymr`9##r`];.raPk<rbVRPrc8!a
rdOj!repc;rg!JTrh]Uprj2U7rkJHOrlY5ermh#$rndY7roa:GrpKdTrq$-`rqZQirr)iqj8\0>rr2oq
rqcWhrqHE`rpg!Urp'LGro="8rn@A&rm:Yfrl4rPrji$8riH*rrh'1VrfR2=re19#rd4Wcrc%jRrb)4@
ra>_1r`T5%r_reor_WShr_<Acqb*n\JP(tqr^luZr^d,`9)qWa9`%Q`:]=2i;>sMn<W6%u=Sl7u>lJ%%
?N+70?N+7->l.\'=T2A#<W5qr;>sDk:]!lc9`%J69(Y`,9"R^p8c)-Z8cDB^9`%Q`:]=2i;>sMn<W6%u
=Sl7u>QA%1?![,0ra#M0ra#D+qcWo#r`9"ur_renr_WSiqb@&`qb)K4a@_"Uk=Y_Fqb$iZr_*5aqb@&c
r_WSkr_rerr`9##qcWf$ra#2'ra#M0ra#D+qcWo#r`9"ur_renr_WSiqb@&`qb)K4S4\u;r^luZr^m)^
r_32`r_NMir_`Ynr`/qur`K&#qcs,+oj7W'ra,S0qcs#$r`K/#r`/qrr_`Ykr_NDcr_32^n4J7(JP(Jc
JP(JcJP(JcJP*IFr^luZr^m)^r_32`r_NMir_`Ynr`/qur`K&#qcs,+oj7W'ra,S0qcs#$r`K/#r`/qr
r_`Ykr_NDcr_32^b"@4WJP,#rr^luZr^m)^r_32`r_NMir_`Ynr`/qur`K&#qcs,+oj7W'ra,S0qcs#$
r`K/#r`/qrr_`Ykr_NDcr_32^Sk=Q+N_9:Dqb6ua!)N\m;#XAl;uTkt=oM\*@/a^9BDucIE;jqXHiAQp
K`6r0OoC^HTDk\dXT#U+])KJD`r=3]d/MVqgA^"/j8S6@lMg5NnG`%Yp\t!fqYpHmro=%=s8N#srVlZm
q#:$eoD\:Zn,DVOkPjQAhu;@/fDa.rbl5]__#CtF[Jm<-VZ*7fQi<0INrFb3Jc:&rFoHF\DuOGLAc?-;
?iF:/=oMG#<;oep;#=&c9rUg;9TMmH9E%W\9`Rob:B"&g;>sMk<;oqt=8lD#>Ph_*?N+@3?i+1/?iFI1
?N+7->Q.h*=8l7t<;oep;>X/g:A@P79_V539Y4!t9E%W[:&@]b:]=5j;u9Pn<rQ2">5MP$>l\13?=*V=
ra5P/ra5Y4qd08-qcj&'r`B)"qc*Pmr_`Pgr_E5_JP=6\JP>6#r_*5apeCW\r_NMjr_r\nr`9#"r`]2'
qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nqr_i_mqbR2dpe?<5T1kGBr_*5apeCW\r_NMjr_r\nr`9#"
r`]2'qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nqr_i_mqbR2dpeC?RJP:VgJP:VgJP:VgJP:Vg\P2uq
r_3)]qbI,dr_`Ynqc*Pqr`B)&qcir'ra,S3ra5P/ra5Y4qd08-qcj&'r`B)"qc*Pmr_`Pgr_E5_btN[^
JP>0!r_*5apeCW\r_NMjr_r\nr`9#"r`]2'qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nqr_i_mqbR2d
pe@GUJP;(tr_<AfqbR8j!E)hp;uTer=oM\*?iFL5Ac?BBDuOeVFoHdfJGt9%NrG4@Qi<ZWVuEgt[Jmf;
_#DFSbl5ugfDaP(hu;^9kl0lHn,DkVoD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sganc&"Vli-,IjSn*:
h#>t*d/M8ga8WmR]Df8<Y5YC!U&LM[Pl?aCL]2r*J,X]lFT-4XD#S/JB)Z3;?N+70=oMM%<W5qr;Ys:f
:Ou<&:]=,g:]=,g:B=9g!)WYlr_i_or`/qur`/hur`fA*r`oG.ra5P1ojRi-raG\3ra5Y1r`oG+r`fA*
r`T"rr_reor_`Phr_EGgr_A#?rD.u?]2/E$r_NMgr_NMir_`Ymr_rerr`9"uqcWo&r`];+ra#M1rEoY6
@.dt-@/aU3@/aO4?2e+.>5hb*>5h\"<W5qr;Z9Pj;#X5h:]=+?:XMsh:ZkOQ:B"&g:B"&g;#X>k;Z9Vo
<W6%u<Voqu>Q.h*>lJ%.?i+7(@K'[6@JaI3?iF@1>lIq+>Q.h*=nl"r;uT\o;>X2h:B"&g:4Z3;:QnTR
:B"&g:B"&g;#X>k;Z9Vo<W6%u<Voqu>Q.h*>lJ%.?i+7(@K'[6@JaI3?iF@1>lIq+>Q.h*=nl"r;uT\o
;>X2h:B"&g:AI\::Ou;m:Ou;m:Ou;m:Ou<P:]=,g:]=,g:]=2i;>sJm;uTer<rQ+r=oMY)>5he+?2e4.
@.dt-@/aU3@/aO4?2e+.>5hb*>5h\"<W5qr;Z9Pj;#X5h:]=,<:Ou;m:ZYCO:B"&g:B"&g;#X>k;Z9Vo
<W6%u<Voqu>Q.h*>lJ%.?i+7(@K'[6@JaI3?iF@1>lIq+>Q.h*=nl"r;uT\o;>X2h:B"&g:8^m=:QA6J
;#XAl;ZKeu<E9$"r`T5+ra5Y4rau.CrbVRPrcJ-ardXp"reLK6rfmDNrh9=hriZ7/rk&0Frl>#^rm:Ys
rnIG1roF(Brp0RPrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq-3\rpTjQroj@Bro!e2rn.4trltGa
rk\TIrjVm2ri,mkrg`tRrfI,:re:?%rd4Wfrc8!UrbMLHraYq9ra5Y0r`];'r`9"ur`#XjJPqP,qbd5g
!E2ns;uTbq<W6%u=8Q+s>Ph_*?i+71@d.D%@f'R4?Me%*>PhP%=8l8"<W5tp;uT\l;1VXD;Lq`X;Ys>g
;Z9Vo<;ons<rQ1t=Sl>"?2e4.@/aU8A*RS'@f'R4?Me%*>PhP%=8l8"<W5tp;uT\l;1VWm;Lqa/;Ys>g
;Z9Vo<;ons<rQ1t=Sl>"?2e4.@/aX"A,]s7@/aL0?2e(->PhP%=8l8"<W5tp;uT\l;1VWA;Nk#U;>X8j
;uTbq<W6%u=8Q+s>Ph_*?i+71@d.D%@f'R4?Me%*>PhP%=8l8"<W5tp;uT\l;>F+@;Lq_s;Lq_s;Lq_s
;Lq`V;Ys>g;Z9Vo<;ons<rQ1t=Sl>"?2e4.@/aX"A,]s7@/aL0?2Ik'=T2D$<rQ+u<;TVn;Ys>?;Lq_s
;WUgR;>X8j;uTbq<W6%u=8Q+s>Ph_*?i+71@d.D%@f'R4?Me%*>PhP%=8l8"<W5tp;uT\l;5[<C;N"HP
<;ons<WH5&=BPQ+r`oG0raGe9rb2:Grbh^Urce?grdb!%reg]:rg*PRrhBCkrilC2rk/6HrlP/armC_t
rnIG1roF(Brp9XQrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq-3\rpTjQroj@Cro!e2rn7;!rm(Mc
rkeZJrji$4ri5snrgj%Trf[8=reCE(rdOilrcS3Zrb_XLral(=qdBD/r`];'r`B)"qc0UpJQ.\0r_rSk
!EE,"<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:A,]p9@/aO4?N+7->5hY'=oMP&
<rQ*M<:Nq=<4c-/;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@f9j8AH$0;AH$0;AH$*<@fBm:@K'[6
?iFC2?2Ih)=T2J&=T2A#<In,g<.S$3<;ohk<;ons<rQ2"=oMP#>5hh,?N+=2@/aU6A,]s4AH$0;AH$0;
AH$*<@fBm:@K'[6?iFC2?2Ih)=T2J&=T2A#<In,;<0L;\;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9
@eaL5Ac$$;Ac$$;A,]s:A,]p9@/aO4?N+7->5hY'=oMP&<rQ+d<.S#"<.S#"<.S#"<.S#"<4Q!-;ts>k
<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:A,]p9@/aO4?N+7->5hY'=oMP&<rQ+>
<.S#"<97*Y;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:A,]p9@/aO4?N+7-
>5hY'=oMP&<rQ*g<.S#/<;ons<rQ2"=9)M*>$Co1qdBD5ral(Drb_XRrcS3crdOiureLK2rf[8Jrgj%a
ri?%&rji$BrkeZWrm(Mkrn7;,ro!e;roj@JrpTjWrq-3arqZQirr)iqj8\0>rr2oqrql]jrqHEarpp'X
rp9XKroX4<rn[S-rmUknrlkA[rkSNGrj)O)rhf[frgWnPrf@&9reCE&rd=]jrc8!Wrbh^Mrb2:CraGe6
ra5Y1r`oG,r`Z1%JQ[V.!Er\*>5MP'?Me+/@/FC3AH$0;B)ZKCC&VfFBDZBAC&VfFC&VcBB)?-9@K'[6
?i+1,>PhV!=oMNS=oDKS=g)!*>5MP'?Me+/@/FC3AH$0;B)ZHDB`Vp^rb2:Dqe5tCrb2:Frb)+?qdfS4
ra>_4qd0/(qc`btr`F_Sd92$'gKFDWqcj&+qd9>1qdKJ7rakt=rb2:Frb2:Dqe5tCrb2:Frb)+?qdfS4
ra>_4qd0/(qc`btr`F_SV-/RVqc`l$ra,J/ra>V3rac">qe#h@rb;@Frb)+Arb;@Frb;@Eqe#_9qdKJ3
ra5P/qcir$pf[Suq,r8OJQ[P,JQ[P,JQ[P,JQ]*Xqc`l$ra,J/ra>V3rac">qe#h@rb;@Frb)+Arb;@F
rb;@Eqe#_9qdKJ3ra5P/qcir$pf[Sudoh6)JQ^Z/qc`l$ra,J/ra>V3rac">qe#h@rb;@Frb)+Arb;@F
rb;@Eqe#_9qdKJ3ra5P/qcir$pf[SuVceRRO]hQbr`fA,r`oM2!FK45@/aU6B)ZKCCAr,ME;jnWH2`3j
JGt<&MuJe:Q2[6OT`1hfXo>X*]`,_G`;\![ci2DmgA]q-i;Vm<kl0rJnG`%Yo`"Uaq>U9jrVlfVs5X.Y
rr2lqqu6Hkq#9pbo)A.XmJcALkPjK?hYu:/eGdhoc2P]]_>_.IZi7-,WW&UjSc5#UOT(4<M>i,+J,Xip
G5cR^DuOVQCAqoGAc?6>@fBd7?iFC/?)_([>`W.h>Ph\'?2@k+?i+7.@fBp;Ac$->B`;`7CAr#GCAV`B
B`;ZDAc?6;@fBg8@/F=.?%H8N>_-.l>lIt)>kMD%?i+7.@fBp;Ac$->B`;`EC@c3>C\qlDC&;TCBDuKA
AG]j8@K'[3?i+,[>fBs!>j#Ak>Ph[u?2e4.@/FF4AH$0;BDuTDC%#g9C\qlDC&;TCBDuKAAG]j8@K'[3
?i+,[>a\i\>lIt)>kMD%?i+7.@fBp;Ac$->B`;`7CAr#GCAV`BB`;ZDAc?6;@fBg8@/F=.?0tmJ>_-.2
>_-.2>_-.2>_-.j>lIt)>kMD%?i+7.@fBp;Ac$->B`;`7CAr#GCAV`BB`;ZDAc?6;@fBg8@/F=.?,p3$
>_-/A>lIt)>kMD%?i+7.@fBp;Ac$->B`;`7CAr#GCAV`BB`;ZDAc?6;@fBg8@/F=.?(5)M>`N(g?2e10
?iFF5@KBqIraYq=rb2:Grb_XQrcA'^rd=]prdt-+rf-o=rg<\Trh9=jriZ7,rk8<Irl+l]rmC_prnIG0
ro3q?rp'LMrp]pYrq-3brqZQjrr)iqj8\0>rr2oqrql]krqQKbrpp'XrpB^Mroj@@rnm_1rmh"rrm1S`
rkeZLrjDa0ri?$mrgs+Xrfd>Brepc/rdk&urcnEbrcA'Xrbh^Orb2:Cral(=raPk8UL8X\O'q`ir*]J2
qdKA4qdoY;rbD4DrbVROqec4Hqec=Mrb_OJqeH+Crau%=qdfS4qdB)(JRJFaJRH)tpg<f(qdKA4qdoY;
rbD4DrbMRP!H)fPD>S/HD>nGPD>S,GCAqlFB)?0:AG]g4@.dlX@*rA5@-:qm?he%+@JaU4Ac$->CA;TD
D#S>LD>S/HD>nGPD>S,GCAqlFB)?0:AG]g4@.dlX@&77p@/++(@/FC0AG]s8BDuZ@C]8/LDYn;JD#8)K
DZ4MMC\qlGBDuN?Ac$$8@JaI*?hn)\@"D^:@"D^:@"D^:@"D^r@/++(@/FC0AG]s8BDuZ@C]8/LDYn;J
D#8)KDZ4MMC\qlGBDuN?Ac$$8@JaI*?diD6@"D_I@/++(@/FC0AG]s8BDuZ@C]8/LDYn;JD#8)KDZ4MM
C\qlGBDuN?Ac$$8@JaI*?`.:_@#JFl@K'a8@fU'@AS(jRrb2:Irbh^SrcA'^rcnElrdt-&repc:rfd>M
rgs+`ri?%&rjDa?rkn`Trm1Slrmh#'rnm_7roj@HrpB^Srq$-]rqQKgrql]nrr1sXj8],Xrr)inrqcWh
rq69^rp]pTrp0RIro="9rn[S*rmUkmrlG)WrkJHCrj2U,rhf[hrgs+Urfd>Breg]0rdt-!rd4WircJ-[
qeuIMrbMLJrb21Arar-@JRsdOrau.@ral1DB)lTDB)ZHBB`;ZAC&VoID#S>OD>nJKE;jkVEqOGOErL(R
E;jbSD>nGPD#S5LC&VfFBDuTAB)ZH?Ac?:mAbothA[l=NB)ZB@B)ZHBB)ZHBB`;ZAC&VoID#S>OD>nJK
DuakYEH1tuol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@rb)+>rap^mc=MQ<jCS=&ral(@rb)4Brb)4D
rb)+BrbMLLrbh^PrbqRNrc.pXol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@rb)+>rap^mU1KEtrau.@
rau.Brau.Brb2:Dqe?%FrbVROrb_XQpi-4Prc7[Orc8!Xpi-4Mrb_XPrbVRLrb;@Frb)4Dqe#h?qdob=
p18edJRsCDJRsCDJRsCDJRu9$rau.@rau.Brau.Brb2:Dqe?%FrbVROrb_XQpi-4Prc7[Orc8!Xpi-4M
rb_XPrbVRLrb;@Frb)4Dqe#h?qdob=ct.c>JS!hPrau.@rau.Brau.Brb2:Dqe?%FrbVROrb_XQpi-4P
rc7[Orc8!Xpi-4Mrb_XPrbVRLrb;@Frb)4Dqe#h?qdob=Uh,*gO_+N(qe,nBrb;FK!GcKMD>S8NErL1[
H2`3jJ,Y'!L]321O8b@BQi<TUUAh%hY5Yd,\c0AC`;[jWci2DmfDaV*i;Vd9kl0lHmf)_ToD\F^q#:*g
qu6Qnro=%=s8N#srVl]nqYp9hpAX^`nc&"Vli-,IjSn-;hYu1,eGdhob5TE[_Z%1H[JmB/WW&^mTDk>Z
QN!$GNW+e6L]2l(J,XipGlDmcFoHC[E;jeTD>nANC]8(GBn9uNB`Vs`!,DCHrbD4Frbh^Rrc%aTrcA'Z
rcJ-^qfM^VqfMg[rcJ-[rc@sWqf)OPrb_XNrb_XLqeQ1GphB_@JSG'sJSD<%rbD=GrbD4Frbh^Rrc%aT
rcA'ZrcA-_!HiP^FSg.VFT-F^FT-=[F8L"TE;jbSD>nAND>n;IC]8)DC&VdsC!gXGC"mA$CAVfGCA;ZF
DZ4SRE;O\TF8g4ZFT-F[FSg.VFT-F^FT-=[F8L"TE;jbSD>nAND>n;IC]8)DC&VdsBr,O!C&VlEC]8)D
D>nGPDuO_QErL.ZErL1[Fo-:XF8L(YFoHL^ErL.WEr0hTDZ4MPD#S;NCAVfGCA;NBB_c@nBn9uLBn9uL
Bn9uLBn:!#C&VlEC]8)DD>nGPDuO_QErL.ZErL1[Fo-:XF8L(YFoHL^ErL.WEr0hTDZ4MPD#S;NCAVfG
CA;NBB[^[HBn:!OC&VlEC]8)DD>nGPDuO_QErL.ZErL1[Fo-:XF8L(YFoHL^ErL.WEr0hTDZ4MPD#S;N
CAVfGCA;NBBW#QqBp!-,CAr#JD#S8ODZOcprc%jVrcS3arcnEirdOitreLK1rf-o>rg*PQrh'1cri,n#
rjDa;rkeZSrlY5ermh##rndY5roF(Brp0RPrpg![rq??drqZQjrr)iqj8\0>rr2oqrql]krqZQerq-3[
rpTjProsFDro="8rn@A&rmC_hrlG)Vrk8<?riuI'rhf[hrgs+Wrg!JErf-o8re19&rdXoqrd+QgrcS3^
rc7mTqer?LJSpNdrb_XPq/-(Iqel:Mqf;RTrc\9brc\9bpiud^qf_s_qfr!^rc\9`rc\0[qf;RQqel(D
rbh^PJStF(JSr);rb_XPokjSDqf)FQqfDa[rce?brce<cr-83bqf_s_qfr!^rc\9`rc\0[qf;RQqel(D
rbh^PJSrkQJSsXgrb_XPokjSDqf)FQqfDa[rce?brce-^rce6_rce6aqfi$_rcS3`qfDXTqf)FMokj\G
rb[4(V/DK7rb_XPokjSDqf)FQqfDa[rce?brce-^rce6_rce6aqfi$_rcS3`qfDXTqf)FMokj\Grb_IK
JSp$VJSp$VJSp$VJSp$V\ShC`rbhCGqel:Mqf;RTrc\9brc\9bpiud^qf_s_qfr!^rc\9`rc\0[qf;RQ
qel(Drbh^Pdr'_SJSsRerb_XPokjSDqf)FQqfDa[rce?brce-^rce6_rce6aqfi$_rcS3`qfDXTqf)FM
okj\Grb\QNJSpKcqeu@N!-/*\ErL.ZFoHXbHN&?lJ,Y'!K`6o/NrG.>Q2[3NT)PJ`VuEarZ2V63^&GqK
a8X<^dJh\qgA^"/ir8'=l2L&Kn,DkVo`"R`q>U6iqu6Qnro=%=s8N#srVl`oqYp<ipAX^`o)A.XmJcGN
k5OB>hu;C0f`'A!ci2)d`r<dQ]Df5;Yl:^&VuE@gSc5,XPl?gEO8b%9M#N/.Jc:3!J,XipHiA?jGlDmc
Fea&0FH:P=F8g7^F`mG$rce6_piudard4WjqgJHkqgJ6erdFZkrdFQfrcnEfrcn<`rce?arc\0]rcIpV
JTUj4JTSMGpiHFVol^7Xqf_aZrd+Qjrd+Hi!.4fpI/A?eI/\QkI/\QhHN&0gH2`'cG5c^bFoHR]FoHLX
F+JG\FFePsFSKqVFS0eUGPcRYGlE$gHiA?gIK"WkIJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]FSKp.
FJX)CFSKqVFS0eUGPcRYGlE$gHiA?gIK"WkIJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]FSKqQFFeOb
FFeObFFeObFFeObFLcMgF8g:SFoHU^G5-=]HN&9jHM`-iI/A?eI/\QkI/\QhHN&0gH2`'cG5c^bFoHR]
FoHLXF455^FFePqFSKqVFS0eUGPcRYGlE$gHiA?gIK"WkIJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]
FSKpTFFeOlFT-F^GQ)geH3&><rd4WlrdXotrdk''reUQ2rf@&ArfmDOrgs+^rhoarrilC0rjr*Erl4r\
rm1Smrn%/(rnm_8roX4GrpB^Srpp']rq??erql]mrr)iqj8\0>rr2oqrqucmrqcWfrq69_rp]pTrp9XI
roF(:rn[S+rm^qorlkA`rk\TIrj_s4riZ7#rhTOergs+Wrg*PHrf@&;repc1re19'rdautrdOiord1;a
JU3B'qg&0cr-A6dqg/6gqgABkrdOiprdO`oqgeZsqgeQnqgeZsqgeQnrdOWjrd=Tiqg/$_rcn<cJU79@
JU4qSqg&0cpj)a_rd4NirdFcprdFcpqg\Kn!.b0%JbsupJ,=cqJbsupJ,XolIK"WkHi&-aH2`'cH%C:h
H@^D*HM`!eGkcR]HN&9gI/\QnIf=cpIf"WlJGt,sJGXinJGt,sJGXiqIf"QmIK"WkHi&-aH2`'cH%C:<
HBW[PH2`'`H2DpeHi&3iIK"]pIK"]mJ,=cqJbsupJ,=cqJbsupJ,XolIK"WkHi&-aH2`'cH22c;H@^Bn
H@^BnH@^BnH@^CQHM`!eGkcR]HN&9gI/\QnIf=cpIf"WlJGt,sJGXinJGt,sJGXiqIe\?jI/A9fHMDdb
Gl)d8H@^BnHKBJMH2`'`H2DpeHi&3iIK"]pIK"]mJ,=cqJbsupJ,=cqJbsupJ,XolIK"WkHi&-aH2`'c
H)Gt>HAHnHHiABmIK=nHrdXotre(3(reCE1rf-o<rf[8HrgEbWrh9=eri5t"riuI4rk/6HrlP/`rm:Yo
rn7;,ro!e:roa:IrpKdTrq-3_rq??frql]mrr)iqj8\0>rr2oqrqucmrqcWgrq??`rp]pTrp9XJroO.<
rndY.rn%.srm(Mdrkn`Nrk/6:riuI*rhoakrh07^rgNhPrf[8Brf@&:reg]2re19'rdt#urdXotVLO/H
O+7%UqgAKoIK4irIJ\KmJGt&tJGXrtJGXrtL&Q`%K`6])K_pE$K`6]&K`6W'L&Q`(K)U<"Jc:8rJGt#p
IJ\KmIJ\JEJ,OkJJ%L4-If"QmIf=cmIf=lsJ,XuqK)U;tK)UK'KDgH(KS9>Yre10$re19)qh4s$re:?(
rdt-"rdk'#pji?mqgJ?jrdFZmJUc'sJUcj4qgSEjrdOipqgSNprdXotqh"ftqh"g$re(*$re:?)qh+m$
re:6&re(3(re(3%rdb!!rdsoqrdO`mqgSNmqgO*GV14\YqgSEjrdOipqgSNprdXotqh"ftqh"g$re(*$
re:?)qh+m$re:6&re(3(re(3%rdb!!rdsoqrdO`mqgSNmqgS?jJU`6#JU`6#JU`6#JU`6#\UXL*qgJHm
rdFZmrdautrdaltrdaltre:?(qh4s&re10$re19)qh4s$re:?(rdt-"rdk'#pji?mqgJ?jrdFZmdslpu
JUcd2qgSEjrdOipqgSNprdXotqh"ftqh"g$re(*$re:?)qh+m$re:6&re(3(re(3%rdb!!rdsoqrdO`m
qgSNmqgPGmJU`]0rdautrdb!!!.k6'K)UE%K`6f,M>iG4O8b:@P5^dHRJrfWT`1bdVuEjuYl;!.]`,\F

_u@jYcMl5jfDaM'hYuL5jo4KCm/HGPnG`(Zp&=^bqYpBkr;QZoro=%=s8N#srVl`oqu6Hkp\smco`"C[
nG_kTl2KlFjSn*:h>Z.-eGdkpcMkoa_u@FM\c0&:Z2Up*WrApqUAghbT)P2XQi<9LP5^RBO8b.<N;eb7
MZ/G2LSKTTL6%)gL&Qc)L&Qf-LPGkbreCE-reCE-pk\g(onra,rf$N-repc5rf$i7onra*pk\p(reL9'
reLB)re19)JVO,XJVLdkre:?)re:?+reLK-reLK-reL9)qhb!'regc8!K<!1MZ/P5MZ/S6MtMu,M>2o+
LAlu'LAlu*L&Qc)Kn5!+L4P*BLAlo+K`6])LAlu-LAlu-LAlu'M#3&%MZ/P5N:i)-MuJV5N;eb.MZ/J3
M#3#-LAlu'LAlu*L&Qc)Kn4uTL6IAkL&Qc)L&Qi+L]3&-L]3&-L\Q]&M=lc*MuJ\.MZ/P5MZ/S6MtMu,
M>2o+LAlu'LAlu*L&Qc)L&$ISL4P)1L4P)1L4P)1L4P)iLAlo+K`6])LAlu-LAlu-LAlu'M#3&%MZ/P5


N:i)-MuJV5N;eb.MZ/J-M#N/.L\QW'L\lf)K`6\SL4P)1L?40hL&Qc)L&Qi+L]3&-L]3&-L\Q]&M=lc*
MuJ\.MZ/P5MZ/S6MtMu,M>2o+LAlu'LAlu*L&Qc)Kr9ZVL5UfcL]3/0M?&P8Mi7Rnrf-o<rfR2Crg!JM
rgNhXrh07brhoaqriZ7*rjDa9rkJHNrlG)armC_prn@A,ro!e:roa:FrpKdSrpg![rq69brqcWkrquco
rr1sXi;`fUrqucmrqcWhrq??arpp'XrpKdNroj@Dro*k5rnIG'rmUkmrlb;\rk\TIrji$:riuI*ri?$r
rh]Ufrh'1[rgNhRrg*PJrf[8CqiCW6UPsb_N/[Oi!K;s;N;JP1N:i20O8Ft1O8b76O8b73O8b1=O7eM-


N;eb7N;e_0Mh-icN.HqtN;/>1N;JP1N:i20O8Ft3Nrb<&rfHf6rfH]3rf6u=oo8a*repc7regK/JW/!8
JW/ZKpl#-1qht?1oo8s3qi:?1rfHf6rfH]3rf6u=rf-]4pl,31rf$i6pks]^V2ULppl#-1qht?1oo8s3

qi:?1rfHf6rfH]3rf6u=oo8a*repc7regK/q2Bl`JW,/=JW,/=JW,/=JW.$rpl#-1qht?1oo8s3qi:?1
rfHf6rfH]3rf6u=oo8a*repc7regK/du8j:JW/TIpl#-1qht?1oo8s3qi:?1rfHf6rfH]3rf6u=oo8a*


repc7regK/Vi61cMi@Xprf6r<!KW<@OoCOCPl@!JR/WQRSGo/[U&LkeVuEarY5Y^*[f3i:^&GkI`r=0\
ci2Dmf)FG'hYuL5k5OTDlMg5NnG`"Xp&=^bq#:-hqu6Njro=%:s8N#srVl`oqYp9hp\smco)A1Yn,D\Q
l2KlFir7m8hYu1,ec*tqcMkrb`W![P^&GVB[/RB1YPtX&WW&doUAgkcTDkG]SGnuVQi<<MPl$[DP5CB@
OF`LEO8tCAO8b7?Oo(=@Pl$[DP5CIBQ2?gFPQ$m@Pl@!JPP^UDQ2[$IPQ$aBPQ$gGPQ$aBOoCDmORA3]
OK=QCO8b7?Oo(=@Pl$[DP5CIBQ2?dGP6$l2rg*5Arg*PIqiq)FrfmDGrf[/BrfmDGrf[/@rf;Vl_N9>1
fT?)nrfI,Aqi^rCqih#Bqih#Eqiq)Drg*5Arg*PIqiq)FrfmDGrf[8Erfd>Grfd>EqiUl=JWQ1ZKTQ1o
rfI,Aqi^rCqih#Bqih#Eqiq)Drg*5Arg*PIqiq)FrfmDGrf[/BrfmDGrf[/@rf??+JWPGEJWPGEJWPGE
JWPGEWf[4@rfI,Aqi^rCqih#Bqih#Eqiq)Drg*5Arg*PIqiq)FrfmDGrf[/BrfmDGrf[/@rf>!ZJWPGE
er]llrfI,Aqi^rCqih#Bqih#Eqiq)Drg*5Arg*PIqiq)FrfmDGrf[/BrfmDGrf[/@rf<G.JWPnRrfR)@
rf[>H!L/iJQ2[-LRf8fUT)PA]U&LecVZ*OnXT#F&ZMq61])KDB_#D=Pao9TbdJh\qf`'b,i;Va8kPj`F
m/HJQnc&+YpAXgcq#:-hqu6Qkro=%:s8N#srVl`oqu6Ejq#:$eo`"F\n,DbSli-/Jjo49=hu;F1g&BS%
d/M;hbPoHZ_>_4K]Df>>[JmK2Yl:g)X8]*tVZ*@iUAgkcT_kAYSbnqSRt7&iS,SrWS,&KQRerTORf8`S
R/<?LSGSfNSGSfQSGSfNSGSfQSGo#WRf8]RRJ<6MS,SlUS,SlUS,Sk-S,Jh-S%G0hSGo#QRerTORf8`S
R/<?LSGSfPS,o.Mqj[JQqj[ANqj[JQrgWnUrg<\QpmV2OrgNhUrgNhUrgJD-d@5]VkF;I@rgW\Oqj[JO
rgEbQqjRDPqj[ANqj[JQqj[ANqj[JQrgWnUrg<\QpmV2OrgNhUrgNhUrgJD-V43[<rg`tWpmV)LqjRMP
rg<SOqjdPQpmh5NqjdPQpmh5NqjdYTrgNhRrgEPMrgWnUrgWnUrgWnUq3ur)JX_4[JX_4[JX_4[JXa3>
rg`tWpmV)LqjRMPrg<SOqjdPQpmh5NqjdPQpmh5NqjdYTrgNhRrgEPMrgWnUrgWnUrgWnUe!koXJXbbj
rg`tWpmV)LqjRMPrg<SOqjdPQpmh5NqjdPQpmh5NqjdYTrgNhRrgEPMrgWnUrgWnUrgWnUVji7,Odl$6
rga%]!M?"]T`1YaUAgqeVZ*OnX8]:$Yl:s-[Jm]8]DfSE_Z%LQbPofdd/MVqg&Be+hu;X7jo4NDli->O
n,DnWo`"Uaq#:*gqu6NmrVQTSs5<qVrqlZnr;QQlq#:$eo`"I]nc&"Vm/H;LkPjTBiVqa6g]#k)eGdkp
cMkrba8X!U_#D%H])K5=[JmN3Yl:g)Xo>@"W;ELlVZ*FkU].!\Tn/nrU&L_aTDkJaTqV4Srh'1`rh07b
qk="`rhK@brh8nWrhK%Yrh9=cqk="`qk3q\rh9=cqk="^rh'(\JYE%9JYBTIrh07_rh/qXrh'1`rh07b
qk="`rhK@brh0=do:l5ZntQ,WrhB:`rhB:_rh'1`rhB:`rh07_qk/M6d@l,bjIuRGrh'1_oqDAWrh9=a
rhB:`rhBCeqkF(`ntQ,YntQ,WrhB:`rhB:_rh'1`rhB:`rh07_qk/M6V4j!Erh07_rh/qXrh'1`rh07b
qk="`rhK@brh8nWrhK%Yrh9=cqk="`qk3q\rh9=cqk="^rh'(\q4WA5JY@XgJY@XgJY@XgJYBNGrh07_
rh/qXrh'1`rh07bqk="`rhK@brh8nWrhK%Yrh9=cqk="`qk3q\rh9=cqk="^rh'(\e"M>dJYD(srh07_
rh/qXrh'1`rh07bqk="`rhK@brh8nWrhK%Yrh9=cqk="`qk3q\rh9=cqk="^rh'(\VkJ[8LnXgBrhBIi
!MuXlVYd:jWW&psXo>O'Yl;!.[f3f9])KAA_#D7N`r=*ZcMl5jeGe,"g]$+0iVqp;kPjcGm/HJQnc&.Z
o`"Uaq>U6fr;QZlro=%:s8N#prVl`oqYp9hp\sjbo`"F\nG_hSli-,Ik5OH@i;VR3g]#e'e,I\mcMl#d
aSs*V_Z%=L^AbbD\c0#9[/RB1Yl:j*Y5YR&XT#:"WrAujW.Cn+W;`^oVZ*IoW2K]pm&0`Xql'Lnj/;mT
rhoapql'Lkri#^lrhf@dri#gorhfRjJZ/OGJZ-)Wrhoamrhoaom&0`Xql'LnqPWVVri#gori,dnrhf[n
qksFjor%efrhoamqko"DdAVVpjJ`'Urhf[mri#1]qkj7hri+qUri#gori,dnrhf[nqksFjor%efrhoam
qko"DV5TKSrhoamrhoaom&0`Xql'Lnj/;mTrhoapql'Lkri#^lrhf@dri#gorhfRjq5AkCJZ+-uJZ+-u
JZ+-uJZ-#Urhoamrhoaom&0`Xql'Lnj/;mTrhoapql'Lkri#^lrhf@dri#gorhfRje#7hrJZ.S,rhoam
rhoaom&0`Xql'Lnj/;mTrhoapql'Lkri#^lrhf@dri#gorhfRjVl50FLoC<Pri,t!!NW:#XT#@$Y5YX(
Yl:s-Zi7B3\c05?^AbnH_>_@OaSs?]cMl/he,Iqtg]$(/i;Vg:k5OTDli->OnG`"XoD\F^p\t!fqYU3i
rVQTSs5<qVrqlZnr;QQiq>U-fpAX^`nG_nUmf)POlMg#HjSn-;hu;C0g&BS%dJhMlcMl#dao9<Z_u@LO
^](tH]`,PB\c0,<[f3]6[/RE2ZMUo%Y^s$;YktX'YQ:r2qQK[uriuI,qm$.)pp'h&riu@)qlfn$riuI.
qm$%&riu@)riu.#qlg"%pof7QrNLjW\?Pk6ril1$posb&ril:)ril1&ricC-!O8p,YktX$Yl:p,ZMUp(
Yl:p)Yl:p#YktX'Y5#2OYgK\+YiN%cYPtd$YP>@$Z2V!)Z2V!&Z2V!,Z2:d&YPYR'Z2V'+Z2:d)Z2V!,
Yl:p#YktX'Y5#2OYbeRcYktX'YkYEsYl:p,Ykt^)YkYL&Yl:p)YktX$Yl:p,ZMUp(Yl:p)Yl:p#YktX'
Y5#3rY^s$0Y^s$0Y^s$0Y^s$0YdUe5YPtd$YP>@$Z2V!)Z2V!&Z2V!,Z2:d&YPYR'Z2V'+Z2:d)Z2:d)
Z1Y?uYPt^"YLB_,Y^s%<YktX'YkYEsYl:p,Ykt^)YkYL&Yl:p)YktX$Yl:p,ZMUp(Yl:p)Yl:p#YktX'
Y5#2uY^s$:Yl:p)Z2h33Za9Y<rjDa6rjVm;rk&0CrkABHrk\TOrl4rYrlb;drm1Skrmq)$rnIG0ro3q<
roj@Grp0ROrpTjUrq-3_rqHEfqtg3frr)`nj8\';qu6TnrquQfrqHEcrq-3\rp]pUrpB^NrosFDroF(;
rnm_0rn7;$rmUknrm1Sfrlb;]rl4rUrkeZNqnN-Drk/6Aqml^9os^p/J[U3>!O]?6[IUd$[JmW3[JmW6

\,Ni/[JmW6[JmW6[JmW6[JRE3[JmW6[JmW6[JRE*[=PdY[Xklj[emK'[eR90[emK3[f3`9[K3hFosOe-

rjDa6rjDa6rjDX3rjDa6rjDa6rjDX3osK@ZaL6Z.gU@!eo!\>$rjM^3rjMg8rjML-rjMg6rjMg6rjMg6
qmQL3rjMg6rjMg6qmQ1*J[V)WLUR)fo!\>$rjM^3rjMg8rjML-rjMg6rjMg6rjMg6qmQL3rjMg6rjMg6
qmQ1*n@!nVJ[U-<J[U-<J[U-<J[V\hqmH"'ppL+0qmHF3rjVm8osOe-rjDa6rjDa6rjDX3rjDa6rjDa6
rjDX3osMrNJ[U-<fs^dco!\>$rjM^3rjMg8rjML-rjMg6rjMg6rjMg6qmQL3rjMg6rjMg6qmQ1*T!j3Y
NjehoqmZX:!P,c<])KAA^&,SD_>_=N`;[aTa8X9]c2Q&gd/MMnec+8$h#?41iVqm:jo4NDli-;Nn,DkV
o)A:\p&=^\qYpElrV6BPs5!_SrqlZkqu6Hkp\smcp&=R^o)%qUmJcGNkPjWCjSn*:hYu@1f`'J$eGdkp
d/MAjbl5caao9<Z`W!gT_Z%CK_#(n;]rAYq]SsN&^&G\B])]J<]`,J4])KD?]_f>9](io4])K>@]`,PB
^%/c6\c08@]DfJB]DK8<]n*ip]Rd`*]`,VD]_f>9]`,J4])KD?]_f;@](rr4]D/u:]DfJB]DfM7])K8>
]`,PB]`,P?]_fBn][=BC]]?a)^&G\A]D0&<\am?2^&,J>]D/u4]D/u:]DfJB]DfM@](il9\c08@]DfJB
]DK8<]n*hm]TBf*^&G\A]D0&<\am?2^&,J>]D/u4]D/u:]DfJB]DfM7])K8>]`,PB]`,P?]_fD<]Rd_H
]Rd_H]Rd_H]Rd_H]XGKP^&G\A]D0&<\am?2^&,J>]D/u4]D/u:]DfJB]DfM7])K8>]`,PB]`,P?]_fCk
]Rd_H]]-U'^&G\A]D0&<\am?2^&,J>]D/u4]D/u:]DfJB]DfM7])K8>]`,PB]`,P?]_fC?]Rd_U]_/r<
^B)*apqZmFrkeZQrl+lVrlP/_rlkAfrm:Ylrm^qurn.5+rnm_5roF(?roa:HrpBUPrpp'[rq69arqH<d
rql]nqu5FOh>dKRqu-Nlrql]krqZQgrqHEbrq-3[rp]pUrpKdOrp'LHroF(;rnm_2rnRM,rn%/"rmUko
rm:Yjrm(MfrlkAaqoSiXrl4rVn&2<FJ]!Ygpr*0Lr5/<IrknWOrknWOpqm$JrkeQMrkeHHqni?Mqni?M
pqm$Jrl"]Orl"fRpqlpGpr%a$!5jB*^;K`arknEGrknWOrknWOpqm$JrkeWO!Q2hS_YCtE_Z%IM_Z%IJ
_Z%IP`;@IO`;[[L_Y_7G`.>hU_h#_j_t_1L_tCnG_u%CO_u%CI_Z%IP_Y_7M_YCtE_Z%IM_Z%IJ_Z%IP
`;@IO`;[[L_Y_7G`.>h)_j848`;[[I_Z%IM`;[[O`;%4K_u@OM_u@OJ_>D+K_u%=M_t_+J_u@UO_u@UR


_t_+G_t_1J_h#^V_h#^V_h#^V_h#^V_n<n^`;[[I_Z%IM`;[[O`;%4K_u@OM_u@OJ_>D+K_u%=M_t_+J
_u@UO_u@UR_t_+G_t_1$_h#^V_s##5`;[[I_Z%IM`;[[O`;%4K_u@OM_u@OJ_>D+K_u%=M_t_+J_u@UO
_u@UR_t_+G_t_0M_h#^i_sbMD`<!rsrl4rXrlP&[rlkAdrm(Mhrm:YlrmUksrn%/'rnIG.rnm_7roF(B
rosFJqsOIQrpg!Zrq69brqQKgrqcWkrqucoqu5FOh>dKRqu-NlrqlThrqZQgrq??`rq$-Zrp]pUrpB^N
rosFEroF(<ro!e4rnRM,rn.5%rmh"trmUkorm:Yjrm(DcrlkAboud'OXN5t6P0!=<r5\lZqoATTrlP/\
k/Zr1k/[/9qoA]Wo#ZI(!6B`4^<#uhqoJZTqoJcYrlF<D!QW7L`ob>7aSX$WaR[H(aOJ:^aQgk>ans0V
a8<sWao9BDa7%%4a8X-PaSX$WaR[H(aJd1GaS![PaSX$TaSs<\aQCP3`ob>7aSX$WaR[INaFVE`aFVE`
aFVE`aFVE`aLoUeans0Va8<sWao9BDa7%%1a7[ONa8X0Nak"OaaFVFraS![PaSX$TaSs<\aQCP3`ob>7
aSX$WaR[HQaFVEsaS<mOaoTZ-rlb;brlt>crm1SjrmC_orm^qtrn%/&rn@A,rndY4ro3q<roX4Erp0RN
rpTjUrpg!Zrq69arqQKgqtg<hrqucoqu5FOh>dKRq#13irql]krqZQgrqHEcrq-3\rpg!Vrp]pSrp0RI
roX4Aro3q9qqqD/rnRM+rn.5$rmh"trmUkprmCVio$=)VJ^0"qr6>)_rlkAbp!!*Prm1Jdoud9WrlY,_
rm1Serlk/\prr`\qonr^J^3f2J^1RHp!*K[rlauYoum?\rQPAfc1T6YbPoZ]c2Q&gbPo`\bP9<\bPTN\
c%40Zc@O9tcLoH]bl5fYbk90Ychku[b5TT`b59H_ci2,ebkTBVbl5f_bkoY9cC)t8cLoH]bl5fYbk90Y

chku[b5TT`b59H_ci2,ebkTBVbl5f_bkoZPc@O8lc@O8lc@O8lc@O8lcEPUec2PrdbOs*PbPoibc1T6Y
bPoZ]c2Q&gbPo`\bP9<\bPTN\c,\+\c@O9rcLoH]bl5fYbk90Ychku[b5TT`b59H_ci2,ebkTBVbl5f_
bkoYSc@O9!cM,Wccd2C5rmC_nrmUkrrmh#!rn%/&rnRM/qqqD3ro3q=roa:Erp0RNrp]pUrpg!Yrq-3_
rqHEerqZQirql]mqu-Ekh>c+,rr2fnrquZjrqcWhrqHEcrq-3]rpp'XrpTjSrp9XLrosFFroX4@ro*k7
qqqD0rn[S/rnIG+qq:u$rn%/#pso8kVUL+FO43^M!7_"sl.#LWqpGDkrmUkpp!`ogqpG2fm*tp]p!eQA
qU:#E]@6?#rmU,]ps],f!7Cnrdf._pde2)gdehGee*PT]e+M4Ae'?Ene*#3NeGdq]eG.MidJhSne,Ieg
e,IemdJ22feFM,de+M4Ae"Y<Te+2#fe*5BWe,.Pldf._pde2)gdehGee*PT]e+M5adt,u!dt,u!dt,u!
dt,u!e%*rueGdq]eG.MidJhSne,Iege,IemdJ22WeGI_feBlZqdt-!0e+2#fe*5BWe,.Pldf._pde2)g
dehGee*PT]e+M4ddt,u1e+M5heH+4Nrmq)#qq1o$rn@A+rnRM/rndP0ro!e7roF(?roa:Frp0RMrpKdS
rp]pXrq$-]rq??crqQBerqlTjrr)`ngAfe)rr2fnqu$HjrqcWhqtL*_rq-3]rpp'XrpTjRrp9XMrosFG
roa:BroEt9ro*k6ro!e4rn[S/ptPf%n(F\mJ_5q6pt5]#fDsS'fCdeqfDaA#fDaG%f)+(uf)F4af)F;#
f)+(uf)F>$fDa@ufDF4tfDF4qfn%fSfR_\bf_F/!f`'Lqf`'M%f)F;#f`'J!fDaA#eH"1cf)F;#f)+(u

f)F>$fDa@ufDF4tfDF4qfn%f'fR_]9f_F/!f`'Lqf`'M%f)F;#f`'J!fDaA#e`kZafDa@ufDaA#f`'M%
f)+(rf_a:tf_F-NfVR5^f_F/!f`'Lqf`'M%f)F;#f`'J!fDaA#e`kZafDa@ufDaA#f`'M%f)+(rf_a:t
f_F.qfR_\+fR_\+fR_\+fR_\+fXBH-g&BY'fCdeqfDaA#fDaG%f)+(uf)F4af)F;#f)+(uf)F>$fDa@u
fDF4tfDF4qg!eT)fR_]7f_F/!f`'Lqf`'M%f)F;#f`'J!fDaA#e`kZafDa@ufDaA#f`'M%f)+(rf_a:t
f_F-tfR_\8f_!htg"HAYqqM#'rn[S1ro!e5ro*b6ro=">roa:ErosFJrp9XOrpTjVrpp'[rq-3_rqH<b
rqcWkq#(-iqu5=LfDkjLq#13irql]kqt^6drqHEcrq-3]rpp'Yrp]pUrpKdOrp'LIroj@DroO.?qr@\8
ro*Y1rnm_5rnm_3Rb`PNKA?R`h"oh*hYZ+-g]#q"g\]^eg\':tg\]_(g\]e*hYu@+gk";Rh1=Cch>#e)
hYZ+-g]#q"g\]_'gZmPdgABY%gA]k(h#?10h>#cVh8nE'h:pc\h#?1-h#?(-g@a4tg?./_gABY(gA]h*
g\]e*hYu@+gk":Oh1sh]h#?1-h#?(-g@a4tg?./_gABY%gA]k(h#?10h>#dph1=C5h1=C5h1=C5h1=C5
h6#N.h#?1-h#?(-g@a4tg?./_gABY%gA]k(h#?10h>#dJh1=C5h:^WZh#?1-h#?(-g@a4tg?./_gABY%
gA]k(h#?10h>#csh1=C6h#Q=0hYuI4htZ./iVqj9j87p:jo4HBkl0iGlMg,Kmf)\SnG_tWo)A7[o`"O_
p\Xabq>U6iqu6NgrVQTJs4%)Jrq66hr:p-fq"sg_p&=U\nc&"VnG_kTmJcJLlhfrGkkjQBk4n$7j87i,
iITsBiV_[8ir7p9i;V^4iqVL3ir7p9i;;L4ir7p9ht>q,hu;U6i;;L4ir7p6iqVL3ir7p9ir7p9idp(Y
iITsniVVX6iVqd7iVVX0iVqj9iVqd4iVqg:i;qorrnmD,rnm_6ro!\4ro3q9qr7D0ro3q9ro3q9ro/Lf
`SlC,hVn@kro*k7ro*b6pu253ro*k7qr.P6ro*k6p#,i,ro*k7qr.P6ro*b6pu253ro*k9ro*k9J`3$U
MW+Hlro*k7ro*b6pu253ro*k7qr.P6ro*k6p#,i,ro*k7qr.P6ro*b6pu253ro*k9ro*k9mGWWTJ`21=
J`21=J`21=J`3ilqr7V6ro!e7qr7D0ro3q9ro!\4ro3q9rnmD,rnm_6ro!\4ro3q9qr7D0ro3q9ro3q9
ro1uWJ`21=gu8.iro*k7ro*b6pu253ro*k7qr.P6ro*k6p#,i,ro*k7qr.P6ro*b6pu253ro*k9ro*k9
S)JqWLuJ3ir8R_9puM>7roa1BrosFJqs==LrpKdTrpTjUrpfmXrq69bqtTs_qu$?iqu5+FeGo=Cqu-Nl
qtpBhqt^6drq?6^q"+LTrp]pUrpK[Nrp9XMqs+1Fp#u;9qrXI2J`VXJr8n"AqrRV8roO.?qrRh<qrRV6
ro="=qrRh<ro<e7roO%<roO%<qrRV8roO.AJ`ZF`J`X3!qr[e;pu_S;roEt<roEt<qW%\<jSn3=jSS'<
jSn37jSn9<jSn9<jSS'6k5OKAk(2X5jalOMjnn3;jnS!;jo4?<jo4?<jnRp9j8S-:jo4??j7q^7jnn-<
jo4??jSS'6k5OKAk(2W^jbi0sk5498k5OKAjSS'<jSS'6jSn3=jSS'<jSn37jSn9<jSn9<jSS'6k5OKA
k3_8]jalNEjalNEjalNEjalNtjnn3;jnS!;jo4?<jo4?<jnRp9j8S-:jo4??j7q^7jnn-<jnn-9jnS!;

jo4D_jalNEjkStpk5498k5OKAjSS'<jSS'6jSn3=jSS'<jSn37jSn9<jSn9<jSS'6k5OKAk*tI`jbW$p
k5=B@kOn'<l20cFli-8MmJH>Nn,DhUnbD_Tp&"I[q#:*dqYpBhr;QZirm^tts7lTgrVl`oqtp6eq=s^]
p&=U_o)%tVnFc8LmecDNm/-,GlLjD7k^hrMkQ0r4!9sLHqs""Aqs""ArosFGrosFFqrn%Broj7BroX4C
roj7BrosFIrosFGp$)J>ros=Dqrr[qo]UkiYNYuMroj7DqrmqAqrn%Droj@Groa7D!U/bHkPj]BkPjWC
kPj]BkPj`FlMg&Ikk43>kl0iDkkjUqkfDt=khG>#l2KoDl20]Al20]Dl2KoGl2KlCkl0cEkkjQBk5OQC
kkjQBl2KuIl2KoGl1jNBkl0iDkkjUqka^jlkl0iGkkjWAkkjWAkl0iGkl0iGkPOKBkPj]BkPjWCkPj]B

kPj`FlMg&Ikk43>kl0iDkkjW6k^hrKk^hrKk^hrKk^hrKkcO(Jl2KoDl20]Al20]Dl2KoGl2KlCkl0cE
kkjQBk5OQCkkjQBl2KuIl2Ko>l2KoGl20]Al,r4@k^hsNkl0iGkkjWAkkjWAkl0iGkl0iGkPOKBkPj]B
kPjWCkPj]BkPj`FlMg&Ikk43>kl0iDkkjV9k^hrOkl'`Hl07m+rp0IJrpBUNqsXFOrpfmVqt0m\q"Od`
q"k!erquQiq#8eCcN!e@p&4mfqtp9erqZQgq"O[Yqt0mZrposVqsa1FOm[egJaWC&rpB^Qq!J(KrpBLI
q!ItFq!J(Iq!IkCrpB^OqsF:KqsAt&lgB>lVXFHNrpKRKrpKdQq!@kE!U]:Om.fuIm.fuCm/HDOm/-2I
mecC&m_A1@maCP&mJcPKmJcPQmJ-&CmJH8FmJcJImJ-&ImJcJLmJH>Km=F\hmXag*mf)VQmeH2Kmf)VK
m.fuFm.fuIm.fuCm/HDOm/-2ImecD7mXaeWmXaeWmXaeWmXaeWm\K:MmJcPKmJcPQmJ-&CmJH8FmJcJI
mJ-&ImJcJLmJH>KmD84AmXafQmf)VQmeH2Kmf)VKm.fuFm.fuIm.fuCm/HDOm/-2ImecC:mXaeWmeQ;D
n+H2Lnc&+YoD%tWp%\:\q#:*aqYpBhr;6HcrmCbks7QBgrVQNiqu6Hbq>U0gp\smZp%%_Oo)%s>n:C([
nG;YRn,DhRnb)DKn,DhOn+cDIn,)VRn+,uInb_hQmt'uon:C)+nG_nUnGDbKnGD\RnGVhRn+cDIn,)VR
n+,uInb_hQmt'uCn:C)WnG_nUnGDbKnGD\RnG)JInG)JLnG_nLnG_qVnb_hQmt'tln:C*.nG_nUnGDbK
nGD\RnG)JInG)JLnG_nInG_tTnGD\;n:C([n:C([n:C([n:C([n>,RQn,DhRnb)DKn,DhOn+cDIn,)VR
n+,uInb_hQn%nLEn:C)UnG_nUnGDbKnGD\RnG)JInG)JLnG_nInG_tTnGD[>n:C([nG2SQnb)JGoC_eU
pAXg`q"smaqYpBbr;QZcrmCbhs7lTarVl`lqtp6eq>U0^p\sm]p%@tJo:#6$nq$?3o(_hUo)&%Ro)&%.
o)A7Uo)A7Xo(_g-o'Z("nuVEWoD\=XoD%nRoCqh4o)A7Uo)A7Xo(_g-o"ssKo%<O.oD\=XoD%nRo@3@1
oDA+Xo)A7Xo(_g-ns8j"o(_hUo)&%Ro)&%.o)A7Uo)A7Xo(_hAnq$@_nq$@_nq$@_nq$@_nuD9UoD\=X
oD%nRo@3@1oD%nUoDA+Ro>L3Nnq$A_o(_hUo)&%Ro)&%.o)A7Uo)A7Xo(_gDnq$@`nc8:ToCDPKp&"I[
p\Xabq=XU`qtp<arV6B8s2+g2rpp$er:p0^qYU*`pu(n>p4;pip&Xp^me?2DrqHEerqGmTrqHEcrqGmT
l1]c&o_*k0YP.>Wn+QbTrqHKf!Vc?WpAXgcpAXgTp?D=&p;lrYp=o<-p[@hTp\ssep[@hTp\smcp[\%W
p?D=&p71i3p?_PBpAXgcq#:$VpAXgcpAXgTp?D>@p4;pgp4;pgp4;pgp4;pgp9"&Tp[@hTp\ssep[@hT
p\smcp[@h?pWE2\p4;qjp?_PBpAXgcq#:$VpAXgcpAXgTp?D=Cp4;pkpAOaKp\=O_q==CWqtp<arV6B/
s2+g)rqlZer:9aaqUbP9pjr3mp]:3dmeOEgl1oo*o_="4YP@J[kkNU$l1oo*aS:>]g\C.2]_ML$l1oo*
SG7m7m.n3el1siDJbXfkJbXfkJbXfkJbXfkXn_8Y\bPFbb4pP_Jb[pnm.n3el1pqGJbXrorV>=Gqtg!_
o)/Lcn,C3(\c;I(n,;qWp%s=:r;)!@JbnL)qt^6frqY^Qqt^-crqV-Ae,"XlOo"tNrqcWirVGgUqt^-c
rqV-AVttu@^&%X%rqcWik5+uNqtg<fqtbm?Jbjrol2(;QrqcWik5+uNqtg<fch`4hJbjroJbjroJbjro
JbkH(qt^6frqY^Qqt^-crqWPiJbjro]DDF#rqcWik5+uNqtg<fJbo?AJbjroiVNHKo).tTq#7i(WrMbk
cMa+-Jc()sqY]1Jk5='6Jc+j3Jc)DCh>I?OkPX07Jc*:\Jc*soh>QL6n,;_RJc(`0Jc,NFh>QL6h>QO7
Jc()sJc()sJc()sJc()sV#9'Ik5='6_>Jl^Jc*mmh>QL6h>NW:Jc()sr;=t@o)>ckWrL';Pl613Jc5QG
gA^75i;S<+kl$)2WVtQM!<)*Zi;S<+]`!E[ec"5$k5FcJo)=4=OSsb/gA^75i;Vg9Jc1/uJc1/uJc1/u
Jc1/uVu>?Kk5F6;^AWW]Jc4'rgA^75i;So<Jc1/u!WDu3riQ3Zs+11Crdk'"rnRM/s+10lrdk')rqcZU


s+10@rdk'Urn[VFrdk'"rdk(,rn[Uordk'"rdk'"rdk'"rdk'"reCF.s.K@Brdk'Srn[U*rq-2@rdk(*
rf$l.s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s+13$s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s+13$s+13$s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s69Q7s+13$s+13$s+13$s+13$s+13$s+13$s+13$
s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s+13$s69Q6
~> %APLeod
EI
0.60000002 i
1 1 1 sc
CM
11 67 m
63 67 l
63 15 l
11 15 l
h
11 67 m
f
1 J
1 j
0 0 0 sc
1 0 0 -1 -47 130 cm
58 63 m
110 63 l
110 115 l
58 115 l
h
58 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 37 41 cm
/F1.1[ 12 0 0 -12 0 0]sf
-1.8984375 4.5 m
(!)s
0.60000002 i
/Cs2 SC
1 1 1 sc
CM
63 67 m
115 67 l
115 15 l
63 15 l
h
63 67 m
f
0 0 0 sc
1 0 0 -1 -47 130 cm
110 63 m
162 63 l
162 115 l
110 115 l
h
110 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 89 41 cm
-14.100586 4.5 m
("#$%)[ 7.587891 7.476562 6.632812 0.000000 ] xS
0.60000002 i
/Cs2 SC
1 1 1 sc
CM
115 67 m
167 67 l
167 15 l
115 15 l
h
115 67 m
f
0 0 0 sc
1 0 0 -1 -47 130 cm
162 63 m
214 63 l
214 115 l
162 115 l
h
162 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 141 41 cm
-8.4550781 4.5 m
("&)[ 7.587891 0.000000 ] xS
0.60000002 i
/Cs2 SC
1 1 1 sc
CM
167 67 m
219 67 l
219 15 l
167 15 l
h
167 67 m
f
0 0 0 sc
1 0 0 -1 -47 130 cm
214 63 m
266 63 l
266 115 l
214 115 l
h
214 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 193 41 cm
-16.839844 4.5 m
('\(&\))[ 6.433594 7.587891 9.322266 0.000000 ] xS
0.60000002 i
/Cs2 SC
1 1 1 sc
CM
219 67 m
357 67 l
357 15 l
219 15 l
h
219 67 m
f
0 0 0 sc
1 0 0 -1 -47 130 cm
266 63 m
404 63 l
404 115 l
266 115 l
h
266 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 288 41 cm
-16.567383 4.5 m
(*+"+)[ 8.988281 8.279297 7.587891 0.000000 ] xS
0.60000002 i



















/Cs2 SC







1 1 1 sc
CM
357 67 m
409 67 l
409 15 l
357 15 l
h
357 67 m
f
0 0 0 sc
1 0 0 -1 -47 130 cm
404 63 m
456 63 l
456 115 l
404 115 l
h
404 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 383 41 cm
-1.8984375 4.5 m
(,)s
0.60000002 i
/Cs2 SC
1 1 1 sc
CM
409 67 m
461 67 l
461 15 l
409 15 l
h
409 67 m
f
0 0 0 sc
1 0 0 -1 -47 130 cm
456 63 m
508 63 l
508 115 l
456 115 l
h
456 63 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 435 41 cm
-20.625 4.5 m
(-./0\))[ 8.302734 7.833984 6.462891 8.314453 0.000000 ] xS


























ep
end
%%Trailer
%%EOF







|













|
|
|
|
|
|
|
|
|
|
|
|
<
<
<








|





|
|
|
|
|
|
<

|






|
|
|
|
|
|
|
|
<
<
<













|
|
|














>
>
>
>
>
>






<
<
<
<
<
<



<

<
|
<
<
<
<
<
<
|

|










|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
<
|
<
<
>
|
<
>
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
<
<
>
|
|
|
<
|
|
<
<
<
<
>
|
<
|
<
<
<
<
<
<
>
>
>
>
>
|
|
|
|
|
|
<
<
|
>
>
|
|
>
|
|
<
|
|
|
|
<
|
>
|
|
>
|
>
|
<
|
|
<
|
>
>
|
|
|
<
<
|
|
|
|
|
|
|
|
>
>
|
|
|
|
<
<
<
|
>
>
>
|
|
|
<
<
<
<
|
|
|
|
|
|
|
|
|
|
<
<
|
|
|
>
>
|
|
|
<
<
<
|
|
<
>
|
|
|
|
|
|
<
|
<
>
|
|
|
|
|
|
>
|
|
|
|
|
|
|
>
|
<
|
|
|
<
<
<
<
<
<
|
|
>
>
|
|
|
|
<
<
|
|
>
>
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
<
|
<
<
>
|
|
<
|
|
|
|
|
|
|
<
|
>
|
<
<
<
|
|
<
>
>
>
|
|
>
|
<
<
<
<
<
<
<
|
|
>
>
>
>
|




|
<
|
|
|
|
|
|
|
|
|
|
>
|
<
<
<
<
|
|
>
>
|
|
>
>
>
>
>
|
<
>
>
>
>
|
<
<
<
<
<
<
<
<
<
|
<
<
|
|
<
|
>
|
>
>
|
|
<
|
|
>
|
<
<
|
|
>
>
|
|
<
|
|
>
|
|
|
|
|
|
|
|
<
<
<
|
|
|
|
|
<
<
<
<
|
>
>
|
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
|
<
|
>
>
>
>
|
|
<
<
>
>
>
|
>
>
>
>
>
>
|
<
|
|
>
>
>
>
>
>
>
>
|
>
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
<
|
>
|
|
|
|
|
|
|
>
>
|
>
>
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
>
>
>
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
|
|
<
|
|
>
>
>
>
>
>
>
>
|
>
|
>
|
|
|
|
|
|
|
|
|
<
<
<
<
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
|
|
>
>
>
|






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
|
<
<
<
|
<
<
<
<
<
<
<
<
<
|
<
|
<
<
<
<
<
<
<
<
<
<

|
<
>






|
|
|
>
>
>
>
>
>
|
|
>
>
>
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
|
>
>
>
|
<
>
|
|
|
|
<
>
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
|
|
>
>
>
|






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
|
<
<
<
|
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<

<
>
|






|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>






|
|
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
|
>
>
>
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>

<
<
<
|
|
>
>
>
|
|
|
|

|
|






|
|
|
>
>
>
>
>
>
|
|
>
>
>
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
|
>
>
>
|
<
>
|
|
|
|
<
>
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
|
|
>
>
>
|






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
|
<
<
<
|
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<

<
>
|






|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
|
<
<
<
>
|
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<

<
>
|






|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>






|
|
<
<
<
<
<
<
|
>
>
>
|
<
>
|
|
<
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
|
<
<
<
|
<
<
<
<
<
<
<
<
<
|
<
|
<
<
<
<
<
<
<
<
<
<

|
<
>






|
|
|
>
>
>
>
>
>
|
|
>
>
>
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
|
>
>
>
|
<
>
|
|
|
|
<
>
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
|
|
>
>
>
|






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
|
<
<
<
|
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<

<
>
|






|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
|
<
<
<
>
|
|
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<

<
>
|






|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
<
<
|
|
>
>
>
|
|
|
|

|
<
>






|
|
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
|
<
|
<
<
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
<
>
|






<
<
<
|
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
|
>
>
>
|
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
|
|
|
<
>
|






<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
|
>
>
>
|
<
>
|
|
|
|
<
>
|






|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
>
>
>
>
>
|
<
|
<
|
<
|
>
|
|
<
<
>
>
|
<
>
>
>
|
<
<
<
<
<
|
|
|
<
|
|
<
<
>
|
>
>
|
|
>
>
>
>
>
>
>
>
<
<
|
<
>
|
<
>
>
|
<
|
>
>
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
>
>
|
<
<
|
|
|
|
|
|
|
>
|
<
|
|
|
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
|
>
|
<
<
<
<
|
|
>
>
|
|
<
<
<
>
>
|
|
>
|
|
>
>
|
|
|
|
|
<
<
<
<
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
<
|
<
|
|
|
>
|
>
|
<
|
|
<
|
|
|
|
|
|
|
|
|
<
<
|
|
>
>
|
|
|
|
|
|
|
<
<
|
|
<
|
>
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
<
|
|
|
|
|
|
<
<
<
<
<
|
|
|
|
|
|
|
<
|
|
>
|
|
|
<
|
|
>
|
|
|
|
|
|
|
|
<
<
|
|
|
|
|
|
|


|
|
<
|
|
|
|
|
|
<
|
>
>
|
|
|
|
|
|
|
|
<
<
<















|
|
|
|
|

|

|







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
<
<
<
<
<
<










|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







|


|

|

|


|
|
|
|

|


|







|


|

|

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

>
>
>
>
>
>
>










|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







|


|

|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669



670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689

690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705



706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747






748
749
750

751

752






753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773

774
775
776
777
778
779

780


781
782

783
784
785
786
787
788
789
790
791

792
793
794
795
796
797


798
799
800
801

802
803




804
805

806






807
808
809
810
811
812
813
814
815
816
817


818
819
820
821
822
823
824
825

826
827
828
829

830
831
832
833
834
835
836
837

838
839

840
841
842
843
844
845


846
847
848
849
850
851
852
853
854
855
856
857
858
859



860
861
862
863
864
865
866




867
868
869
870
871
872
873
874
875
876


877
878
879
880
881
882
883
884



885
886

887
888
889
890
891
892
893

894

895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911

912
913
914






915
916
917
918
919
920
921
922


923
924
925
926
927
928
929
930
931
932
933
934
935

936
937
938
939
940

941


942
943
944

945
946
947
948
949
950
951

952
953
954



955
956

957
958
959
960
961
962
963







964
965
966
967
968
969
970
971
972
973
974
975

976
977
978
979
980
981
982
983
984
985
986
987




988
989
990
991
992
993
994
995
996
997
998
999

1000
1001
1002
1003
1004









1005


1006
1007

1008
1009
1010
1011
1012
1013
1014

1015
1016
1017
1018


1019
1020
1021
1022
1023
1024

1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035



1036
1037
1038
1039
1040




1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069

1070
1071
1072
1073
1074
1075
1076


1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087

1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101

1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113

1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135












1136


1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165

1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188




1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228






1229











1230
1231
1232
1233
1234



1235









1236

1237










1238
1239

1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269






1270
1271
1272
1273
1274

1275
1276
1277
1278
1279

1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329






1330











1331
1332
1333
1334
1335



1336
1337










1338










1339

1340
1341
1342
1343
1344
1345
1346
1347
1348





































1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551



1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592






1593
1594
1595
1596
1597

1598
1599
1600
1601
1602

1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652






1653











1654
1655
1656
1657
1658



1659
1660










1661










1662

1663
1664
1665
1666
1667
1668
1669
1670
1671





































1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753






1754











1755
1756
1757
1758



1759
1760
1761










1762










1763

1764
1765
1766
1767
1768
1769
1770
1771
1772





































1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854






1855
1856
1857
1858
1859

1860
1861
1862

1863










1864






1865






1866











1867
1868
1869
1870
1871
1872
1873
1874






1875











1876
1877
1878
1879
1880



1881









1882

1883










1884
1885

1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915






1916
1917
1918
1919
1920

1921
1922
1923
1924
1925

1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975






1976











1977
1978
1979
1980
1981



1982
1983










1984










1985

1986
1987
1988
1989
1990
1991
1992
1993
1994





































1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076






2077











2078
2079
2080
2081



2082
2083
2084










2085










2086

2087
2088
2089
2090
2091
2092
2093
2094
2095





































2096



2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107

2108
2109
2110
2111
2112
2113
2114
2115
2116






2117











2118
2119
2120
2121
2122

2123


2124
2125




















2126
2127

2128
2129
2130
2131
2132
2133
2134
2135



2136








2137






2138
2139
2140
2141
2142









2143





2144









2145
2146
2147

2148
2149
2150
2151
2152
2153
2154
2155


























2156











2157



2158
2159
2160
2161
2162

2163
2164
2165
2166
2167

2168
2169
2170
2171
2172
2173
2174
2175
2176














2177















2178
2179
2180
2181
2182
2183
2184

2185

2186

2187
2188
2189
2190


2191
2192
2193

2194
2195
2196
2197





2198
2199
2200

2201
2202


2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216


2217

2218
2219

2220
2221
2222

2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236











2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257










2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277











2278
2279
2280
2281
2282
2283
2284
2285
2286


2287
2288
2289
2290
2291
2292
2293
2294
2295

2296
2297
2298










2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318











2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339










2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352


















2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
















































2367

2368
2369
2370




2371
2372
2373
2374
2375
2376



2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390




2391
2392
2393
2394
2395
2396

2397
2398
2399
2400
2401
2402
2403
2404

2405
2406
2407
2408
2409
2410
2411
2412
2413

2414
2415
2416
2417
2418

2419

2420
2421
2422
2423
2424
2425
2426

2427
2428

2429
2430
2431
2432
2433
2434
2435
2436
2437


2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448


2449
2450

2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467

2468
2469
2470
2471
2472
2473





2474
2475
2476
2477
2478
2479
2480

2481
2482
2483
2484
2485
2486

2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497


2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508

2509
2510
2511
2512
2513
2514

2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525



2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556



















2557







2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568


























2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646


























2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
end
setpacking
%%EndFile
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 0 0 420 74
%%BeginPageSetup
cg_md begin
bp
sdmtx
%RBIBeginFontSubset: LucidaGrande
%!FontType1-1.0: LucidaGrande 1.0000.6.0040
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 14 dict begin/FontName /LucidaGrande def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /colon put
 dup 34 /F put
 dup 35 /R put
 dup 36 /O put
 dup 37 /M put
 dup 38 /D put
 dup 39 /A put
 dup 40 /T put
 dup 41 /semicolon put
 dup 42 /C put
 dup 43 /K put
 dup 44 /S put
 dup 45 /U put



 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -2186 1 index div -1509 2 index div 3361 3 index div 2381 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C000006B66670676D000000000000075400000D33676C7966000000000000148800000C906865616400000000000021180000003868686561000000000000215000000024686D74780000000000002174000000386C6F636100000000000021AC0000001E6D61787000000000000021CC000000207072657000000000000021EC00000CAF062B0019000005C80025000005C800250000000000000000000000000000043E001800000000FFDB00000000FFE800000000FFDB0000FE75FFE8000000000000FED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000080000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5006F000CFF3BFF91FFF400BF00680014FF41FF98FFEC00000000000000000000000000000000000000000082FF7E00DF00D200C900B400AD009B00DE00D200C500BE00B900AB00E300D200C600B900AD00950062000000A4009D0085000000AA00A10094007200AD00A100940085000000C5000000000000000000000000000000000000012800000000000000000000000000F700F700970141004A00F7000000000000000000000000000000000094009400940000000000000000000000000000000000000000000000000000000000000000000000000000000000E6FF1A00000000000000000000000000000000000000DEFF22007C007C027502E400750075009A009400AC00A0000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A0001900000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B00000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B0000006F0073000000000000000000B9008C010A007E00C50031004F009A004200000000000000000000000000000000000000000000012800F700A00063009400820082009700C600B300B3007C007B009100000000000000000000000006440000000004A00019000000000800043E0018000004000000000000000534000000000000FFE70000FF780000000000C500940000FED80000000000E100760063003C002D001E000FFF1FFF3BFF48FF65FF79FF9DFFBD00DE00B900AD00A600DE00D200C500BF00B900A900910197007C0062005C005602CC01ED0197007C006F00620056004A011D010D009E00940035000000000000000000000000000005C8002500000503
 00000000000008000000000000000400000000000000047B000000000000FFDB00000000FFE70000000000000000FF3B00000000000000000192011700F700C800C300B800AD00A6009C0092008A0080007B00740068005A0050001E003A00000192011700F700E500D200C500B900AD008A0080007B00740068005E0054004A000000000141003E00DE00DE00000000000000000000000005D500190000056600000000000008000000000000000400000000000000043E001800C503C200DE00000000FFE70000000000000000FE00000000000000000000CD00C500AD00A100940088007C0075006F0063003100F700C600B900A0006300C500B300A10088007C0075006F00630056003100F700C600B900C600940082006F0063003E003200190000FF3AFF7EFF9DFFCE0057006F02B3012801830088008800000000000000000000000000000000000000AC008800C501ED006201BC001800DE013E000000000000000000000000000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190000000000000000000000000000007C00AC00C500960000000000000000000000000085005D006500000000000000000000000000000000000000000000000000000000080000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000005ED01B0009400D200B600AC007B007B007C00000000000000000000000000000000000000B904A000C50063007A005100410087014100DE01280068009D0064007500D2012000DE00D100B40000000000000000000000000000000000000000006100AC00D0006F006F036603660000000000000000000000000000000000000000000000000000004A004A004A000000000000000000000000000000000000000005ED00000000000008000104005C000004000000000000000000000000000000FFDB000000000000000000000000000000000000000000000000003E050300D8011200AD009300D800F700AD00B700790067050300D800920000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190082006E002A002A002A002A000040405249483C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C0118B0184358456AB0194360B00C2344231020B00C4EF04D2FB000121B21231120332F592D2C0118B0184358B0052BB000134BB0145058B100403859B0062B1B21231120332F592D2C0118B01843584EB0032510F221B000124D1B2045B00425B00425234A6164B028
 5258212310D61BB0032510F221B0001259592D2CB01A435821211BB00225B0022549B00325B003254A612064B01050582121211BB00325B0032549B0005058B0005058B8FFE238211BB0003821591BB0005258B01E38211BB0003821595959592D2C0118B0184358B0052BB000134BB0145058B90000FFC03859B0062B1B21231120332F592D2C4E018A10B10C194344B00014B1000CE2B00015B90000FFF03800B0003CB0282BB0022510B0003C2D2C0118B0002FB00114F2B00113B001154DB000122D2C0118B0184358B0052BB00013B90000FFE038B0062B1B21231120332F592D2C0118B018435845646A23456469B01943646060B00C2344231020B00CF02FB000121B2121208A208A525811331B212159592D2C014BB0C85158B10B0A432343650A592D2C004BB0C8515800B10A0B4323430B592D2C00B00C2370B1010C3E01B00C2370B1020C453AB10200080D2D2CB0122BB0022545B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C60B0022523442121212D2CB000B0122B2121212D2CB000B0132B2121212D2C014BB0C85158B00643B00743650A592D2C2069B04061B0008B20B12CC08A8CB8100062602B0C642364615C58B00361592D2CB1000325456854B01C4B505A58B0032545B0032545606820B004252344B0042523441BB00325204568208A2344B00325456860B003252344592D2CB00325204568208A2344B003254564686560B00425B0016023442D2CB00943588721C01BB01243588745B0112BB00D2344B00D7AE41B038A45186920B00D23448A8A8720B0A05158B0112BB00D2344B00D7AE41B21B00D7AE4595959182D2C208A4523456860442D2C456A422D2C01182F2D2C0118B0184358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB0194360B00C2344218A10B00CF6211B21212121592D2C01B0184358B0022545B002254564606AB00325456A6120B00425456A208A8B65B0042523448CB00325234421211B20456A4420456A44592D2C012045B00055B018435A584568234569B0408B6120B080626A208A236120B003258B65B0042523448CB00325234421211B2121B0192B592D2C018A8A45642345646164422D2CB00425B00425B0192BB0184358B00425B00425B00325B01B2B01B0022543B04054B0022543B000545A58B003252045B040614459B0022543B00054B0022543B040545A58B004252045B04060445959212121212D2CB0032520B0072587052E23208AB00425B00725B0142B1021C4212D2CC02D2C4B525845441B2121592D2CB00243583DED181BED592D2C4B505845441B2121592D2C01184B52588A2FED1B212121592D2C4B53234B515A58B003254568B003254568B003256054582121211BB00225456860B003252344
 2121591B212121592D2CB00243583DCD181BCD592D2C462346608A8A462320468A608A61B8FF8062232010238AB10C0C8A70456020B0005058B00161B8FFBA8B1BB0468C59B0106068013A2D2C2045B0032546524BB013515B58B0022546206861B00325B003253F2321381B2111592D2C2045B00325465058B0022546206861B00325B003253F2321381B2111592D2C004BB0C8515800B00743B006430B592D2C8A10EC2D2CB00C4358211B2046B0005258B8FFF0381BB0103859592D2C20B0005558B8100063B003254564B00325456461B0005358B0021BB04061B00359254569535845441B2121591B21B0022545B00225456164B028515845441B212159592D2C21210C6423648BB84000622D2C21B08051580C6423648BB82000621BB200402F2B59B002602D2C21B0C051580C6423648BB81555621BB200802F2B59B002602D2C0C6423648BB84000626023212D2C184B5358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB00C2344218A10B00CF6211B218A11231220392F592D2CB00225B002254964B0C05458B8FFF838B008381B2121592D2CB0134358031B02592D2CB0134358021B03592D2CB00A2B2310203CB0172B2D2CB00225B8FFF038B0282B8A102320D023B0102BB0054358C01B3C59201011B00012012D2C4B53234B515A58381B2121592D2C01B0022510D023C901B00113B0001410B0013CB001162D2C01B00013B001B0032549B0031738B001132D2C4B53234B515A5820458A60441B2121592D2C184B5358B00425B004254964B00325B00325496468B0408B6120B080626AB00225B00225618CB00C234421B004251023B00CF61BB00425B0042511122320392F59CC21212D2C0118B0184358B0052546234564611B21B00425B004254A59B00E23442310B00EEC2310B00EEC2D2CB01B435820B0016045B000515820B0016020452068B0005558B0206044211B212121591B20B0016020452068B0005558B8FFE06044B01C4B50582045B02060441B21591B21212159591B21592D2C4B53234B515A58381B2121592D2C4B5458381B2121592D2C4B52587D1B7A592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B00326
 5358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592DB8005D2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8005E2C2020456944B001602DB8005F2CB8005E2A212DB800602C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800612C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800622C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800632C2020456944B001602020457D691844B001602DB800642CB800632A2DB800652C4B20B003265358B0801BB040598A8A20B003265358B0022621B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B80003265358B0032545B8014050582321B8014023211BB003254523212321591B2159442DB800662C4B535845441B2121592DB800672C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800682C2020456944B001602DB800692CB800682A212DB8006A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8006B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8006C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8006D2C2020456944B001602020457D691844B001602DB8006E2CB8006D2A2DB8006F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800702C4B535845441B2121592DB800712C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800722C2020456944B001602DB800732CB800722A212DB800742C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800752C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800762C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800772C2020456944B001602020457D6918
 44B001602DB800782CB800772A2DB800792C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8007A2C4B535845441B2121592D0000020100000005000500000300070014B706020400060204002FCDD4CD002FCDD4CD3130211121112521112101000400FC400380FC800500FB00400480000000000200E1000001A6043E000300070057B70004100420040304B8FFC0B31D244804B8FFC04029151948049E050F0F011F012F01030D0301401D24480140151948019E000704038500400809008530302B011A18104DED3939002FED2B2B5F5E5D3FED2B2B5D31303335331503353315E1C5C5C5C5C50378C6C6000000000200E1FEBF01A6043E0009000D00A2400E1402340202F40201C309D3090209B8FFD840141D25480C09010909101D2148000A100A200A030AB8FFC0B31D24480AB8FFC0402C1519480A9E0B0F01B300B20F061F062F06030D06401D24480640151948069E050F041F042F04031903040700B8FFC0401209114800000A0D03078506400E0F068530302B011A18104DED1739C02B10CD5F5E5D002FED2B2B5E5DF6ED3FED2B2B5D3130012B005E5D2B5D5D711335363D01233533151003353315E14747C5C5C5FEBF4A25BB17C5A6FED10488C6C6000200110000056E05C80002000A0096405EA70901990401960501090001080A010602010004030913520301037F0A09140A0A09020506081352060106800708140707080400059270028002020202070109080306030A0307600A900A020A08090A030F013F01CF01FF0104010106072F3333192F5D1733182F5D002F17333F333312392F5DED33328705102B872BC410C0C08718102B872BC410C0C03130015D5D5D5D5D5D010B01010321032301330103ADFCFD02D7A1FD8DA3C3024BD002420236027EFD82FDCA019AFE6605C8FA3800000000010068FFDB051705ED001500DB4039E71001091501E91501050C01090C01E90C01D70701280A380A02780A880A02250F01050F450FA50FC50FE50F05390D01090D490DC90D030908B8FFF040450D11480605460556056605047804E804024604014A025A026A0203B7010109010109014901C90103270D01B80401B505E5050208920F091F092F09030A090B920604149113B8FFC0401B090C48131191001309130F13010F030E7D034017136F0216036C022B2B011A18104DED5F5E5D10C6003FFDD62BED3FFDD65E5DED3130015D5D71005D715D5D5D5D5D2B5E5D715D715D715D5D71715D715D052000111000213205152423220011100033323715060339FEA7FE88017F015CC7010BFED0A5F1FEF8011A
 F4D2F0DB25019501730172019841C569FEBAFED7FEE5FEB981B47100000200BF0000059605C8000A001600AF40523913018913E913023C12010C124C1202860E01020E420E0209070901E709F70902480958096809B809040B09014908B908F908032408013408014206520602250501050515054505C5050404041404020A04B8FFE040290E11480A0F4A0F6A0F030D030F116F11021106169201030B9200107D070B7E004018076F0217006B022B2B011A18104DED10ED002FED3FED3130015F5E5D5F5E5D002B5E5D5D715D5D715D5D5D5D715E5D5D5D715D71331121320417161110002125212037361110272E012B01BF01ECDC010F639DFE7AFE9EFEE3010D012078817F4DD6D7AD05C86275BAFED0FE8FFE6A9D9BA501160105955B43000100BF000003FA05C8000900424026089205050004920103000F062F06020F022F02020F0306060205097E00400B026F020A006B022B2B011A18104DED3211392F5F5E5D5D002F3FED12392FED313033112115211121152111BF033BFD970206FDFA05C89DFE109BFD6000000100BF0000051505C8000A00CC408F5D060106280C1048BA06CA06DA06035F09010B093B0902280948097809030B035B039B03BB03FB03056703010404010410171A485C060109063906020C7406940602060152060704030482050614050506081815194806015206050809087F07061407070601030006093005010507071003097F00401F0701CF0701000770079007A007040E030C0770020B006B022B2B015F5E5D5D711A18104DED323810C65D1139002F3F31308705102B87082BC4012B8718102B87082BC4015D5E5D5D2B71005D5D5D5D5D5D2B5D3311331101330901210111BFC50257D3FDBC02ABFEF6FD7905C8FD2802D8FD3EFCFA02EEFD12000100BF0000062605C8000C010B4016C80801A803B80302D70301030F0301023803B8030204B8FFF040A4141748D804010B041B042B044B04042902E90202370201040214022402440204020901460956098609030D0A01390A490A890AA90AB90AC90AE90A0704090809820304140303040A0203027F0B0A140B0B0A000301090308090B04020A0004070A030002030003030B087F060B80004010062006400650069006B006C006070006200630069006B006F006060C0F060113030E066E028F0001000070000209030D006B022B015F5E5D5D2B015F5E5D5E5D711A18104DED10ED1139192F00182F3F12173910CC1117395E5D8705102B877DC48718102B877DC43130015D5D5D5D5D5D5D5D5D2B5D005F5D5F5D5D5D33112109012111231101230111BF0123019A01A60104C4FE68CBFE7405C8FB870479FA3804B4FBAF0454FB4900000000020068FFDB05D005ED000B0017010840C6240C012B12018602F60202F60A01C90A01180401F80401270401
 C70401190801F90801260801C6080136160106164616E616033A14010A144A14EA14034910E91002460EE60E02170B470B02C70B01290B01190B590B690B790BD90B05480701C807011607011607560766077607D60705480501C805011605011605560566057605D605051701012901011901590169017901D901050C0D010317010313010C110109032F0F012015010008011A06129206040C9200130F7D09157D034019096F0218036C022B2B011A18104DED10ED003FED3FED3130015F5E5D5D5D5F5E5D5D5D5D005D71715D715D715D715D715D715D715D5D5D715D715D715D715D715D715D5D5D71710520001110002120001110002532121110022322021110120313FECCFE890179013B013A017AFE86FEC0E3F8F9DCDDF8F62501AB015F016101A7FE5AFEA0FE99FE5B9D0147012A01210146FEB9FEDDFEDEFEB400000200BF000004FA05C8000C001300AE40742707013906010606260602E606012E113E114E110311380D1148260F01260F360F020603F6030209450F01160401A707019A07015E126E127E12030918151948070A010A090152097E0807140808070D9207010B0B08001392010300107E050705080D0C7E00400F080112031508700214006B022B2B015F5E5D1A18104DED321139392FED002F3FED1139392F1239ED31308705102B2B10C4015D2B5D5D5D5D5D005E5D5D712B715D715D713311213216151005012101231901332011342123BF01C0D5E3FED501EEFEFEFE5BC444018CFEB48405C8BCB3FED87CFD4B0272FD8E030F0137E500010064FFDB03E905ED00230138B90013FFF840AF1B1E48F51B01180101F801010916191602D916E91602B604C604027A198A1902151D01851D01571E012A0C5A0C023A0C4A0C6A0C7A0C8A0C05991F01121F221F026B0D011B0D3B0D0228230108230107110109280601591001E81001562201472201D822E822024C0B018C0BEC0B020C0A1C0A4C0A032C0A6C0A7C0A03680E780EF80E03441C01341C441C841CA41CB41CF41C060920192002080F1A2104001214921F152F15021517921204029203B8FFC04033090C4803059200131A7F0F14400C0F4814140F035F087F08025F217F2102087E2140000320035003030A0325216F0224036C022B2B015F5E5D1A18104DED5D5D1239392F2B2FED003FFDD62BED3FFDD65DED11121739313001715D715D5D715D715D715D5D5D71005E5D5D715D715D5D5D715D5D715D5D5D715D715D2B05222735163332363534262F012E0135343633321715262322061514161F011E0115140401E195E8FAA17C97638566BD9BF8C0ABBEEA736D8E688A6AC098FEE32541D074826A577A4B3B6CBF7FABDD39C05C74584A724F3C6DC288C1EA0000010012000004FE05C80007004E40350602920303000005100540058005040005800590
 050305060F021F024F028F02040F028F029F02030A0302067E01400809017E30302B011A18104DEDCD5F5E5D7110CD5D71002F3FED3231302111213521152111021FFDF304ECFDF3052B9D9DFAD50000000100B3FFDB04D905C800110083405C280401D71001F60F01490F010A0C019A0CFA0C02090D190D02E90D013B0D4B0D5B0DAB0D0429070113072307B307031303010303130323039303A303B303060B03020D01170409000305920E1309800A017E0040130A6E0212006B022B2B011A18104DED10ED003FED3F333130015F5E5D005F5E5D715D715D5D715D715D5D5D71133311141633323635113311100221200011B3D2A5B4B093B8F9FEF0FEEBFEF805C8FC5ADFCBBFE403ADFC56FED1FEEC011E012B0000000001000000060106687C3D255F0F3CF5011B080000000000B47FC3BC00000000C005BDE3F776FA1B0D21094D0000000900010000000000000001000007BCFE5000000D1EF776F7430D2100010000000000000000000000000000000E06000100028800E1028800E1058500110589006805FE00BF044A00BF053900BF06E400BF06370068050F00BF044F0064050F0012058B00B300000020005E00C8013201CA024C0282030203A6045C04D805AA05E40648000000010000000E0077000F004F0007000100100030007B000005E00D3300030001B800712BB800672BB8005D2BB800532B410E00000246001002460002007F02440001023F023C0001002B023E023CB2012BEFBB023D0001023D023CB2141F00BD023C0010023C000201870188B21A1F40B80189B310163900410E0188001001880002018301850002002B018401850002002B01860185B2022B80BB017F000100DF017C406601DFE016171CD4D516171C7B7C161B0F7B1F7B2F7B037B7C19D1D216171C767716171C6D7016171C6C6F16171C6B6E161B5F6E7F6B026B6E7F721A747514151C676A14151C666914151C6568141B8F65A065D06503656885711A1973167A4319217943192102B90352034AB2022B10BD034600500346000200400339B20B0E39B9FFC00338B20E0E39B9FFC00338B3090C3950410B032D0001033003310003002B02F402F30008002B02E3B2BE022BB802DCB3BE641F40B802DBB3313A3940B802DBB2232739B9FFC002DBB2141439B9FFC002D9B2333939B9FFC002D9B22A2E39B9FFC002D9B2212339B9FFC002D9B2171939B9FFC002D9B20E1139B9FFC002D0B2111139B902800278B2022B10412B02740050027400020010025D0050025D0002000B024C001B024C006B024C0003000B024B001B024B0002023A02040016001F023802040012001F023202310002002B023002310002002B022F0231001E001F022E0231B21E1F20B80231B2121639B901F701E3B2032B0A412001F4000101EF01EE0002002B01ED01EE000200
 2B01EC01EE0002002B01EB01EE0002002B01E801E70003002B01E601E70004002B01E501E70002002BFFCA01E3B30B1139B9411D01E70001007601E7008601E70002019401920002002B019301920002002B019201900006002B019101900007002B018F01900002002B018E0190B2022BBFBF01900001007001900080019000020157B292042BB80153B291042BB8014FB297042BB80136B37F032B40B80139B21218394109012401250003002B011001110003002B0104403BFC022B10F850F80240E61A1A399A9B032B9C9B042B9B970A2B9392042B9192062B9297042B9597042B9897022B9697032BA097019F97AF97BF9703BC034803490004002B0349B285022BB9FFC00343B31011391FBE0344000100E00344000103350334B2032B20411203330030033300400333005003330004033303140003002B033203140003002B032F0314B2032B2FBF03140001000002F3002002F3000202F0B2BD062BB802E2B2BF082BB9FFC002E1B2172839B9FFC002E1B20E1139B802E0B2870A2BB802DFB3BF042B40B802D7B323253940B802D7B2151639B9FFC002D2B2101139410D02C602C50006002B02C202C00006002B02C102C00006002B028CB285022BBC027602770004002B0277B285022BB9FFC00271B31011391FBE0272000100E00272000100400260B2151639B9FFC00260B20A0B39B9FFC0025FB2171839B9FFC0025EB2242939B9FFC0025AB31011391F4114025B000100E0025B0001000F024A0001001602490026024900020009022D0019022D0002FFC0022BB2111539B9FFC00229B30D113920B80223B2121639BD022202200002002B02210220B2042BC9411402200001021E02200003002B021F02200002002B01F601CF0003002B01E001B50020002101DF01B5B2262120B801DFB21E2139411A01DD01DC0002002B01DB01DC0002002B01DA01DC0002002B01D901DC0002002B01D801D70003002B01D701D60002002B01D601D4B2022BB0BF01D6000101D501D40002002B01D301D4B2022B69410B01D2000100B901D2000101D201D40002002B01D101D4B2022B20B801D0B2090C39B9FFCA01CFB30B11392BBF01A300A401A300B401A30003FFE001A6B2131539410D018D018C0003002B018B018C0003002B018A018C0002002B0156B286022BB80155B280032BB80154B286052BB80152B287052BB80151B288052BB80150B288032BB8014EB285032BB8014CB285022BB80138B287022BB80131B2BF032BB80122B285022BB8010E400B85022BFAFB042BFB85022BB8FFC0400AF51011391FF601E0F601B8FFC04009B1151C3940E51A1A39B8FFC0402EAF0D0F3900B40140B450B460B470B480B4C0B4D0B4E0B4F0B409B4AF641FE8E7042B898A072B8A8B062B8C8B062BB8FFC0B78E3032398E8D032BB8FFC040148D1E
 23398D8B022B8B85082B8281042B8180032BB8FFC0B3804A4D39B8FFC0B3803F4339B8FFC0B380343939B8FFC0B380282E39B8FFC0400C801D2339807E022B7F7E062BB8FFC0400C7D4549397D7E062B7E85082BB8FFC04020881E23398887022B8785082B8685062B83840A2B8485062B7085808502BF8501410A03530354000E03500351000E034E034F000E034EB203641F4155034C034D000F031B031C031D000C030F03100311000C030C030D030E000C0327030D0329000D0321031C0323000D031E03100320000D0327003C0321003C031E003C031B003C030F003C030C003C02AD02AE02AF000C02A102A202A3000C029E029F02A0000C02B9029F02BB000D02B302AE02B5000D02B002A202B2000D02B9003C02B3003C02B0003C02AD003C02A1003C029E003C02810282000E027E027F000E027C027D000E027CB203641F4175027A027B000F021002110212000C020D020E020F000C020102020203000C01FE01FF0200000C000B0211009B02110002000F021000500210009F021000BF021000DF02100005001F020D003F020D007F020D0003001F01FE0001021901FF021B000D0213020E0215000D0219003C0213003C0210003C020D003C0206003C0201003C01FE003C01BD01BE01BF000C01B101B201B3000C01AE01AF01B0000C01C901AF01CB000D01C301BE01C5000D01C001B201C2000D01C9003C01C3003C01C0003C01BD003C01B1003C01AE003C016D016E016F000C016101620163000C015E015F0160000C01610166B2171F1F41420166003F0166007F016600030179015F017B000D0173016E0175000D017001620172000D0179003C0173003C0170003C016D003C0166003C0161003C015E003C012C012D000F01260127000F01280129000E012A012B000E01180119000F01120113000F01140115000E01160117000E01050106000E01020103000E01000101000E010040A803641FFEFF0F1B37151836151535151234150F33150C3215093115063015032F15002E1526270E28270F2A2B0E2C2B0F22230E24230F1E1F0E201F0F0F10110C090A0B0C0607080C0304050C0001020C000340131A230003131F06031C1F1F0F3F0F7F0F032003011F034F03BF03FF03041B011D0D18071A0D1510170D1204140D901B012C3C2A3C283C263C243C223C203C1E3C1B3C183C153C123C0F3C093C063C033C003C503301B0124B004B5442B013014B004B5342B0332B4BB8032052B0322B4BB009505B58B101018E59B0332BB00288B8010054B00488B8020054B012435A5B58B80119B101018E851BB900010100B04B60858D59B1020042B00188B0235358B00188B0405158B02088B810005458B1020142595959B0374B5058B1020042592B1DB0644B5358B0801D59B0324B5358B0901D59004BB03A51B01B23422B2B2B2B
 2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B7374732B2B2B2B2B2B2B2B2B2B2B2B2B2BB1282645B02A4561B02C4560442B2B2B2B2B2B2B2B2B2B2B2B002B2B2BB8010045B0FE4561B8010223442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2BB8027C45B8027A4561B8027E23442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB8034E45B8034C4561B8035023442B2B7473012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73742B2B2B0173742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B74752B2B732B2B2B2B2B2B2B2B2B2B2B2B2B752B2B2B2B2B73737473742B2B2B2B2B73742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73732B2B2B732B73742B2B2B0073742B2B2B2B2B2B2B2B2B2B00732B2B2B2B2B2B2B2B73742B2B2B2B2B2B73742B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B732B0143581B592B2BB018B0234B53422B2B732B2B2B2B2B732B2B2B2B2B2B732B2B2B01B8017C20456A44B8017D20456A44B8017E20456A44B8017F20456A44B8018020456A44B8018120456A44B8018220456A44B8018320456A44B8018420456A44B8018520456A44B8018620456A44B8018720456A44B8018820456A44B8018920456A4473732B2B2B732B2BB8023B20456A44B8023C20456A44B8023D20456A44B8023E20456A44B8023F20456A44B8024020456A44B8024120456A44B8024220456A44B8024320456A44B8024420456A44B8024520456A44B8024620456A44B8024720456A44732B732B2B7373B109322B4BB05052424BB008524BB008505BB01A23424BB0C8524BB036505BB00C234200

 00>] def
 /CharStrings 14 dict dup begin
 /.notdef 0 def
/colon 1 def
/semicolon 2 def
/A 3 def
/C 4 def
/D 5 def
/F 6 def
/K 7 def
/M 8 def
/O 9 def
/R 10 def
/S 11 def
/T 12 def
/U 13 def



 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-2186 -1509 3361 2381}def
 /UniqueID 4277797 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C91B0B7175CE49F0688B3F79EA3DBC898217EC91EE332F98D08B0D78E002610AC5858EAF625BF673983D70210293AF44B5873D9BD4164D0FE0468184D7036711A930D37CFB0EBA4CA4E0BB73C83B1EDE3FF59EB72440E3D0584FC166A75B6FEC765FB16E5772A73894B196F655E526E66923ED97E5AB3D3B57FD2AF8A2DBC7188A7ACE7F3628D827E1F81E0EF2CABC5263DEECA2F68A1117856E15A52D0DA021A0A41EBD0A47F1144CA15646FDBC35F23AD12226A2046A5E73A5AEF8A6D81D45F23EAD0245884DC0D749B933995A8824604FF0C7E5BD4B9C8664CBA0D51317137A9EE284A18C4409C8A544F1FE3846657160312405DE0D393306208D622AAFC0A2BA50342D62D67770DC1DB22846CE56D3B703F9C984A37E18FA9C2CA343B5F5A7D2C3879FC5A8712C584F8C9FF03915B0A223496777042AF4516D80E3D8677418B854CDCAAC8584DEA4BDB1FBA244B03B56263B216BAC33A58EF88DACA6E519C40B024E37656C746B8FF3775244BC2EC60ADD4B83050CC86660C99F2ADE103CA46FB2DE94C58621A74E1695F3B0EECDEF4397EF1B855195268ABA76794D656656E6D14582BC7DC0F8B44A22C51BD91C0EA3BD09335BC05BE5161033DC578E591195286A7F322023B788414E6BCEFCB4CA590D8F6643D8B72175A94D27DD6D3A1DB0CFCE9DC2434F762EEA4A73D6D50E98830A9CC78267403F6D687DCCA6F0D6D19C5940254B32E5E1D8A8A08ED5F468F72D1283A5BDF123115909AD6C2F253511D
 D005B8E528C5016B146CA8D53F64F845C648B0DD17F71AFE5D36B32C5D7458EF6662E60862D6B50C14E9110102BAE35190A7D4F8F74B4A0C97C77391C0835B3336FC21BF6A2560E992F289F11080409CFC8242D914EBDC5652DDC5E01338D8B3A3CD597E12E2B7A7CF7C80FBA920C4B0643BD84CE1E45AD56A49742ED2243EC81AF2B2C0BD7ECD05F9AF99F7DDE0DECD1B95229E5D25ED6A51E3388BD0EFDD6FC3B775EE5C535C6D3412EA5F4F44DCB862887531FE1B252A7BE6D29154E02D99769CCF856C2803CF1C05DA6F61072DFEFF30C757983509208127F19440BB9B15DBCE8E7AAB4BB682F13B9E4AD6DD33B32D8C3B7079B1174352A47AF472C910F90658FB4BD55DF1C24DC2A59C55FA4429851EF7A0AE576CEB2008D65CA08A3D0B07234DAB2892B5DB198DDBEBBFBE120D5102C27CD0777666B12629EDBCD6CBBE4098A1FB9A1D9725044504A1B65D55CE46C88EE30C7D491C5845CE7DC05508AC1C37E397A3D53696BEE13F1574A4D1C0AC07788B20FC94102B736E6BC976800D494C7978AC7C17677ED2703221940FF4FCAB600BD8AD4BB16964729047AADB927F77F680865C885E0859D90AA8D3A380030BCC9CB195F504554913DE62966C019A66C033835ABA3D03123E0875BCBE725426312B00E23C5A8BBE3406123E135F830E87E8152F0B120C1C4B22590EAC7E9F8FFC8ABF04B38D7946C15BB9B1058F690AB98E357EB36498C1A5704C3A5175B40E9CC3AB5D1190321E9945160F0A8B18DD07FF7CF736FC2391391398566653AB3A70DC7E3279AE2CE7B645DEB552514182A0F9982230388C1D9B126BB34DA54526F7224046D411AD2CDA4322BA42D4752B52DD14A9ABE39A07289139AC597BABB83B6C22402CDA463C9288E9F05281A68C6399D85F5D113C2A72B8299F5D722B32941641C0689E18AB7EE3FF5EA45450657B7E59D4244DFC422D1984D1CC21E6EFC3082E5C5A8FEC7CD91F01BED16BEC7273E7D4CD1E3682DBC5462982EADF2394FAC5E4F00FA2DFA5281FF2941A48F39344C62EDBA1FC196B4D4BE555B8B9A34FFFDEFCF92D97BF5ED7659E9971D885D6D98CFD4DFB3AB5C59B25555E283731483222ADE4D21EE98DF1945B9D33AE2CF24D14488A61425F7A88D43D5105C4B3C14187018A3CA3AF0781263CB7AFF42924BA810EF4F98A0B52B5D0B31219A31CFEC8DCED6301750ABF8E6E8B262133252635C9773C1CD945FC735890D8D6BFA7DE839336FCC01FCDBDA453DFD3C04CED97B8BF4004CF455E0997A4970989CAEABC3B6D0876E5F8DB6E67CC6EB4D88DD69E40C2652F344684B372E53154B7DA3D16789826796D39B0993559DCB363A923D2C652191E352D9E73EB0598DB02264790E68ACE79982D3425F7D2162666F969F72055A58152CD74A83852CDFB0F8A0BB038BDEECB84F8B4239CDFBBABC1BD
 1D86C1CF732B928891BF137F1EA434394B35D0D2999B3766C98AA3155FAA3E9437737213602EB4D16E56E029B8DE246D0A6F50727456ACCB17DC26C103885AD5D616F694D5D879237E
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End

%RBIEndFontSubset
/LucidaGrande cguidfix
/F1.1/LucidaGrande renmfont
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ { 1.8008  exp } bind { 1.8008  exp } bind { 1.8008  exp } bind ] def 
/MatrixABC [ 0.4294 0.2332 0.0202 0.3278 0.6737 0.1105 0.1933 0.0938 0.9580 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs1 exch/ColorSpace dr pop
[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeA { { 1.8008  exp } bind  exec} bind 
def 
/MatrixA [ 0.9642 1.0000 0.8249 ] def 
/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def 
/DecodeLMN [ { 0.9857  mul} bind { 1.0000  mul} bind { 1.3202  mul} bind ] def 






end ] /Cs2 exch/ColorSpace dr pop
%%EndPageSetup
/Cs1 SC

q

0 0 420 74 rc






420 0 0 74 0 0 cm
BI
/Width 1260
/Height 222
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/Interpolate true
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$

JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`N;nJ.pATXBJc=I(h>`'*b5QtkM#R8NjSsf1T)O<?[/Sn]
o)=4>Jc:6"Jc:6"Jc:6"Jc:6"gA]q.bl31mJc:E'h>a/IJc:6"ZMog_T)\9YJc5<@Jc1/uh#6(.Jc3ai
Jc1E'qYoRTJc22=Jc2tSh>[!DJc1/uJc1/uJc1/uJc1/uJc4=$h>YXsJc1/uLAfs-T`'H?Jc2nQn,ApY
WrMbkcMa+-Jc()sqY]1Jk5='6Jc+j3Jc)DCh>I?OkPX07Jc*:\Jc*soh>QL6n,;_RJc(`0Jc()sJc()s
Jc()sJc,<@h>QL6h>Qa=Jc()sV#9'Ik5='6_>Jl^Jc*mmdJ`Y8XoGs3q#9a\p&+L[Jbo<@JbjrojnelM
rqcWik5+uNqtg<fJbmjlJbkN*qt^6frqZNhlMCDRqtg<fJbl;@Jbm(Vqt^6frqY^Qqt^-crqZHfJbjro

JbjroJbjroJbjroJbnF'qt^6frqY^Qqt^-crqY+@JbjroO8AbLrqcWik5+uNqtg<fWVV2BJbleNqtos^


n,<%\\c95?n,<%Zo)&=\qtYg<!VlG@pjr5%q#:$\q#:*Xq"smaq"sf:ps]"hplY@Np\":]q#U<en+ceU
qtU'_JbZ/<JbZqRrqH*\rqZ$Xqt^-aqtL!_JbXfkJbXfkJbXfkJbXfkJb\:#rqH*\rqZ$Xqt^-aqtJY9

JbXfkO8/_Kp%\O^n+ceUqtU'_WVD&>JbZkPrqZ6`p&"O^n,9fs_Z0E1o)8Rcq"sa\qt^$^i:io<JbF`i
!Vc?Vp[@hTp\ssep[@hTp\smcp[@h?pOW&1p4;q@p?_PBpAXgcp]1$hp\4.MrqHEcrqGmTl1]c&aS(2Y
g\1".n+QbTrqQKen+QbTrq??co(N(Vl1]c&SG%O-JbFZgJbFZgJbFZgm.]uBrqHEerqGmTrqHEcrqGmT
l1aoFJbFZgXnM,Un+QbTrqQKen+QbTrq??cn+Q#?b4^D[JbIdjj7i?DrqZ-]q"ssdp&4[b_Z.gZq#9j_
rquZjqtg3crqQ0\rq?-[p%7hHRdu%#Jarg3q"+LUqt'URqt&>.rq#pUrq$$Xq"'(-mdbr"XRc/XrposX
q""=Rp[[23rq#pUrq$$Xq"'(-_X`9Kf^eh/rposXq""=ReFNV1qssaWrq$$Xq"'(-QL]UtJb"B_Jb"B_
Jb"B_rpojUrposXq""=ReFNV1q""FUqssORnFD/$Jb#i3q"+LUqt'URqt&>.rq#pUrq$$Xq")GpJb"B_
f(/M*o(;_MqtBp]qtU0dp%n[bqu$-cq#8J:bQ%S@o)8Rcq"t'erqZ?ap%JCXqt0dWq"!nDRdbmtJa`[/
q!n@QqsW\:n*fE.rpTaRq!iq)mdPesXRQ#Trp]gRkjSWBnF,i.nG_nRnG)O)nA=[GnC[7*nc&%Tn)j-.

n*0?@nG_nRnG)O)n<WQpn:C([n:C([n:C([nG_qPnc&%Tn)j-.n)j-=n,)VLnaQ%!n:C)/nG)PQnGD\:
nF,i.nG_nRnG)Oln:C([nCI*tnbD\SoD%tWp%A%Rq#:*gqYU0er:U$crlb>es82fgrVl`lqtp6hq>U0a
p\XX\o`"I]o)%tSnFH%1mXaeWmeZANmJcPKmJcPQmJ-&CmJH8FmJcJImJ-&ImJcJLmJH>Km=F]kmXaf'
mf)VQmeH2Kmf)VKm/$)MmHsf;q!J(Iq!IkCrpB^OqsF:KqsAt&^[?[@ddI,%rpKRKrpKdQq!@eCqs=+F
rp9FIq!A"Irp9OLqsO@KJaS`iJaS*WJaS*WJaS*WJaW=$rpB^Qq!J(KrpBLIq!ItFq!J(Iq!IkCrpB^O
qsF:KqsEe=JaS*WV!e6LrpKRKrpKdQq!@eCqs=+Frp9FIq!A"Irp9OLqsO@K_<umBJaUeNp$_SCrpg!Y


rq#pWrq6'\rqQKgq"k!equ$?ip&<A=eGo=Cq#13irqlThqt^$]qt9s\rposVrp]ULrpK[Nrp9OJqs*k=
T]gsjKBN@#klBuIkkjWAkkjWAkl0iGkl0iGkPOKBkPj]BkPjWCkPj]BkPj`FlMg&Ikk43>kl0iDkkjUq
kk+(ikca4Ll2KoDl20]Al20]Dl2KoGl2KlEkQ0o2roa:Eqrdt@roa:EqrdtCrp'LIroj%>roj@GqrmqA
J`t2=J`tkProsFGqs""Aqs""ArosFGrosFFqrn%Broj7BroX4Croj7BrosFIrosFGros4Broj@GqrmqA

J`rWfJ`q[KJ`q[KJ`q[KJa!*troj7DqrmqAqrn%Droj@Groa1Broa:Eqrdt@roa:EqrdtCrp'LIroj%>
roj@GqrmqAp?7(kJ`s6"rosFGqs""Aqs""ArosFGrosFFqrn%Broj7BroX4Croj7BrosFIrosFGp$)J>




ros=Dqru8eJ`q[Kg$&=tp$2PBqs==LqsO@MqsaUTqssXVrq6'\rqZ?crql]mq#1!eeGn%urr2KeqtpBh
qt^6dq"F^Zrq$-[rp]gRrpKdQrp9FGq!%eAp#l57S`PFaL?8?q!9X:BroEt<qr[e;roEt<roF(=roF(?

qrIP4roF(?roF(=qrIb<qrIb<roX";roX4AroSdnn`>>`ZK:uGroO.?qrR_;qrRh<qrRh<ro="=!9F7C






jnn-6j8S-=jo4??j87p:jnn-<jo4E;jo4EAjo4Cnji->4jkf+rk5OKAjSS'9k549>jSS'<jSn3=jSn9<
jS7d7jSn9?jSn3:jSn9<jSn9?k4n';k5OKAk(2W^jalNEjalNEjalNEjb2amk5OKAjSS'9k549>jSS'<
jSn3=jSn9<jS7d7jSn9?jSn3:jSn9<jSn9?k4n';k5OKAk4@\cjalNtjnn3>jo4?<jnn3;jo4?<jo4??
j8S-=jnn-6j8S-=jo4??j87p:jnn-<jo4E;jo4EAjo4D_jalNEjkStjk54?=kkOE;li-8MmJcPQn,)VR
o)A7[o_A.Wq#:*dqYpBbrVQTDs4%)Jrq66hr:p-fq"sg_p&=U\nc&"VnG_kTmJcJLlhfrGkkjQBk4n$7
j87i,iITsBiV_[8ir7p9i;V^4iqVL3ir7p9i;;L4ir7p9ht>q,hu;U6i;;L4ir7p6iqVL3ir7p9ir7p9
idp(YiITsniVVX6iVqd7iVVX0iVqj9iVqd4iVqg:i;qorrnmD,rnm_6ro!\4ro3q9qr7D0ro3q9ro3q9
ro/Lf`SlC,hVn@kro*k7ro*b6pu253ro*k7qr.P6ro*k6p#,i,ro*k7qr.P6ro*b6pu253ro*k9ro*k9
J`3$UJ`21=J`21=J`21=K]2gfro*k7ro*b6pu253ro*k7qr.P6ro*k6p#,i,ro*k7qr.P6ro*b6pu253
ro*k9ro*k9oAP8ZJ`3ilqr7V6ro!e7qr7D0ro3q9ro!\4ro3q9rnmD,rnm_6ro!\4ro3q9qr7D0ro3q9
ro3q9ro1uWJ`21=gu7qcro<e7qr[n@qrn%Drp0IJrpB^Qrp]pUrp]pWqt0m\rqH<bq"jmcqu-EkeGn/#


rr2]krqucmrqcNfrqQKerq??`rq$-[rpg!WrpTjSrp0RKrosFGroX4AroEt:ro3q9pu)//ro!e5rna+"
J_bt7!SlK,h#?1-h#?(-g@a4tg?./_gABY%gA]k(h#?10h>#cVh=TNSh65Z0h#?1-h#?(-g@a4tgATdk
g\':tg\]_(g\]e*hYu@+gk";&h1=D:h>#e)hYZ+-g]#q"g\]^eg\':tg]#q+gA]k(h#?10h>#cVh43;P
h1=C5h1=C5h1=C5h>#e)hYZ+-g]#q"g\]^eg\':tg\]_(g\]e*hYu@+h"KQTh1=Cah>#e)hYZ+-g]#q"
g\]^eg\':tg\]_(g\]e*hYu@+greH(h1=D5h>?(.i;VX/i;V^7ir8!8jSn9?kPj]El2KuIli->On,DhU
nc&+YoD\C]p&=^_q#:*gqYpBkr:p6frn@D(s8N#mrVQKkqYp<iq#:$epAX^`oD\=[nb_eSm/H>Ml2KoG
kPjTBjSn3:iVqa6i;VU4h>#e#gABQrfR_\+f^[VhfDaG%fDF.rfDaA#f_F%sfDaG%f)+(uf)F>$fDaFq
f7DT6fR_\Gf_F(tf`'M"f)+&!ecF@Qrn."srn%/%rmpturmq)$rn%/%p"+cI[b-/`ak6C?rn.5%qptYr

rmq)$pt#Grrn.5$qq(hurn.5%rn.5%pt()LMV*L4J_5P+J_5P+J_5P+n(@Eern.5%qptYrrmq)$pt#Gr
rn.5$qq(hurn.5%rn-nqjOf%9J_6IEpt,Mtrn%%uqq(hurn."srn%/%rmpturmq)$rn%/%p"-_+J_5P+
g"?;WptGMurn[S1ro!e5ro!e7ro="=roO.Broj@Grp0RNqsXOSrpp'[rq69arqHEerqZHfrqlKhqu5=L
fDkjLqu-NlqtpBhrqQKerq??`rq$-[rp]pUrpKdPrp'LIroa:CroF(;ro!\2rndY1rnRM-rn@8&rn.5%

rmpkpqp_LlJ^]\/o@*cirmU,]ps],frmLeprmLJgrmL\kps\TZqpY5fJ^aJEJ^_6[o$mZfl.#LWqp>Dl
!RfEqe,Iege,IemdJ22WeGI_fe:H)odt-!2e+2#fe*5BWe,.Pldf._pde2)gdehGee,.YceGI_fe:H)C
dt,u!dt,u!dt,u!duDiIeGdq]eG.MidJhSne,Iege,IemdJ22WeGI_feGRdHdt,uYe+2#fe*5BWe,.Pl
df._pde2)gdehGee*PT]e+M5;dt,u!e)f'OeGIeqf)F:uf`'S'gA]k+h#?./hYZ40i;V^7jSn9?kPj`F
li-8Mmf)\SnG`"XoD\C]pAXgcq"speqtp<jrVQTJs5!_SrqQHkr;QTmqYp<iq#:$epAX^`o)A1Yn,DhU
mJcGNkl0`Djo49=iVVO3h>Z4/g&BY'f)F5!eGdqrdf.Ykd.5MXc@O8qcMYr`c2PrdbOs*PbPoibc1T6Y
bPoZ]c2Q&gbPo`\bP9<\bPTN\c%411c@O9HcLoH]bl5fYbk90Yci))hc->q(rlb;`qp#,drlb;bpriHV
rlb2_qos];`Qj%[hTkf=rlkAbp!!*Prm1Jdoud9WrlY,_rm1Serlk/\prr`\qonr^J^0\/J^/hlJ^/hl

J^/hlK[088rlkAbp!!*Prm1Jdoud9WrlY,_rm1Serlk/\prr`\qonr^o?Mp4J^1LFp!*K[rlauYoum?\
qp"fVrlb;`qp#,drlb;bpriHVrlb2_qp!1,J^/hlhp1o@psB#frmLeprm^qtrmq)#rn7;+rn[J/ro*k9

roO.Broj@IrpB^SrpTjVrpp'\rq69brqQKgrqcWkrquZlqu5FOh>dKRq#13irql]jrqQKerq??`rq$-Z
rp]pUrp9XMrp'LFroF(<ro!e4rn[S-rn7;'rmq(urmUkprmCVhrlt>arlb;`R`U-&M95b<r5SfXprN?Q
rlFuWrlG)ZqoJZTrlG)Zpr<3OrlFuWrlFuWqoJcWrlFuWprNHTqoF?1pW8!.[E8EhqoAKQqoA]WqoA]W
rl=oWqo8]X!Q`@]a8![Oa8X0Wa8X0Wa8<sWa8X0Wa8!aTa8<r/aiheWal1A@aSX$QaSX$WaSX$WaSs6W
aSX$WaSs6T`r!gUaSX$WaSX$TaSs6ZaSX$QaSs6WaFVI*aaqQbaaqQbaaqQbabS";aSX$QaSX$WaSX$W
aSs6WaSX$WaSs6T`r!gUaSX$WaSX$TaSs6ZaSX$QaSs6WaSEr/aaqR?ao9BYa8!aQa8X0Wa8X0Za8<sT


a8X0Za8![Oa8X0Wa8X0Wa8<sWa8X0Wa8!aTa8<s&aaqQbak"T5b5TT]bl5laci2>kdf._pec+/!f`'S'
gA]q-hYuI4ir8'=k5OZFli-8Mn,DhUnc&.Zp&=[ap\sseq>U9jr;6Hirn[V1s8N#prVl`oqu6Hkq>U0g
p\sjbo`"C[nG_nUmf)POlMg#HjSn-;hu;I2h#?%,fDa>"e,Ibod/MAjcMl)fbl5c^ao9?[`r<sG`2pk-
_ihq4`;[[P_YV.K_u%CO_u%CI_Z%IP_Y_7M_YCtE_Z%IM_Z%IJ_Z%IP`;@IO`;[[L_Y_7G`.>f+_h#_>
_t_1L_tCnG_u%CO_u%CI_Z%IP_Yq@Q_o)JjpqcjErknWMrknNJrkn`RqnrEOrknNJqnr3IJ]$!TJ]$cj
pr*0Lotp^Gqo&KOqo&9Hrkn`PqnrEMpqcjErknWMrknNJrkn`RqnrEOrknNJqnr3IJ]"G(J]!&VJ]!&V
J]!&VOMgk3rknEGrknWOrknWOpqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]Orl"fRpqlpGq8<9OJ]!)W
]YjN_rknEGrknWOrknWOpqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]Orl"fRpqlpGpr(b$J]!&Vkell-
rl+lVrl>#[qo\o^rltGfrm1SjrmC_ormh#"rn@A+rn[S2ro3q<roj@Grp0ILrp]pWrq$-^rqHEerqZQi
rql]mrr)`nh>c=2rr2fnqtpBhrqHEcrq69^rposUrpB^Nroa:CroF(:rndY1rn.5$rm^qprm:YjrlkAa
rlP/Zrl+lTrkeZNqnW*Do"D$8J\6rSrk8<Dr4;s@pq6U:o"+h6qn2g<pq$74pq$I:rk/6Brk7m6rji$@
rk&0Brk&'?qn7QnrOd]o\@hgSrk/-?pq6U:o"+h6qn2g<!4r!;pq-=4rk&0Brk&0Co"+h2rk/6Brk/6B
qn2g>J\9CCJ\:'Vrk8<Dqn)X9rjhU2rk83Aqn)X7pq-=4rk&0Brk&0CqmuR6rji$@rk&0Brk&'?qn7Qn
V7_AlJ\6QHJ\6QHJ\6lQrk8<Dqn)X9rjhU2rk83Aqn)X7pq-=4rk&0Brk&0Co"+h2rk/6Brk/6Bqn2g>



!PH'r]Rd`(]`,VD]_f>9]`,J4])KD?]_f>9](io4])K>@]`,PB^%/c6\c08@]DfJB]DK8<^!jWF]Rd`T
]_/u;^\GVD_>_=N`;[aT`r=*ZbPo`bci2;jdJhYpf)F>$h>Z=2i;Vg:jo4HBli-;KnG`"XoD\F^pAXg`
qYpBkrVQTMs5!_MrVl]nqYp<ip\smcp&=O]nc&"VmJcGNlMfrFj8S!9hYu:/g&BP$e,I_nci2/fb5TK]
`r<pU_Z%@M^](qG]_f>?])K88\"gB_[Y_Hg[/dW0[e7'-[f3]3[f3c8[cY!p[f3c5[dUX![eR7][eI4]
[^ER=[J73'[JmW6[JRE3\,Ni7[Hb0s[f3c5[dUX![eR7][`c+1[c+[i[J73'[JmW6[JRE3\,Nhu[JRE3
\,3W2[Ips&[eR7][\(!Z[Xkl<[Xkl<[XklB[eR9*[e7'-[f3]3[f3c8[cY!p[f3c5[dUX![eR9+[Xkl<
[^3F;[J73'[JmW6[JRE3\,Nhu[JRE3\,3W&[J73*[EZ.2[XkmE[eR?2\c02;]DfJB^&GeG_>_=N`;[dU




aSs?]bl5rfd/MMnec+8$g]$(/i;Vg:k5OZFli-;Nn,DkVo)A=]pAXgcq>U6iqtU-Gs5<qVrqlZnr;QQi
q>U-fpAX^`nG_nUmf)POlMg#HjSn-;hu;C0g&BS%dJhMlcMl#dao9<Z_u@LO^](tH]`,PB\c0,<[f3]6
[/RE2ZMUo%Y^s$;YktX'YQ:r2qQK[uriuI,qm$.)pp'h&riu@)qlfn$riuI.qm$%&riu@)riu.#qlg"%
pof7QrNLjW\?Pk6ril1$posb&ril:)ril1&ricC-!O8p,YktX$Yl:p,ZMUp(Yl:p)Yl:p#YktX'Y5#2O
YgK\+YiN%cYPtd$YP>@$Z2V!)Z2V!&Z2V!,Z2:d&YPYR'Z2V'+Z2:d)Z2V!,Yl:p#YktX'Y5#2OYbeRT
Y^s$0Y^s$0Y^s$9YktX'YkYEsYl:p,Ykt^)YkYL&Yl:p)YktX$Yl:p,ZMUp(Yl:p)Yl:p#YktX'Y5#1$
Ycr\_JZuSeqlg"'pojIsriuI,qm$.)pp'h&riu@)qlfn$riuI.qm$%&riu@)riu.#qlg"%poi/NJZs^0
hm!*bqm-4-rj;[4rjMg8rji$?rk8<FrkJHKrkn`TrlG)^rm(MhrmC_rrn.5)rnm_7roF(BrosFJrpKdS
rp]pZrq69brqZHfqu$Hlqu5XUi;`fUqu-NlrqcWhrqHEbrq-3\rp]pSrp0RIroX4@ro!e3rnIG'rmUkm
rm(MdrlG)VrkeZLrkABDrji$9rj;[1rilC*riZ7&riH+"ri5ssTW!F?N2Z`Rrhf[m!N;psW9gGZVYd=k


WT0oUW;`^oWV`XnVZ*OkVuERdVuEXoVuERjVh(fFW.CnWW;`^oVZ*LmW9gGZVYd=kWVWOXVuEXoVuE[m
W;`[nW;ELlVY-kdW;`^oVYd9BW6qPpW8soVVuERmVuEX]Vu*@gW;`dVVuEXoVuE[mW;`[nW;ELlVY-kd
W;`^oVYd9BW26GDW.CmuW.CmuW.Cn)W;`^oVZ*LmW9gGZVYd=kWT0oUW;`^oWV`XnVZ*OkVuERdVuEXo
VuERjVZE`pJZ+-u[]'2'rhf[mri#1]qkj7hri+qUri#gori,dnrhf[nqksFjor%efrhoamqkqoAJZ+-u
go14Ori5suriH+$riZ7(rilC-rj2U3rji$?rkABHrk\TOrlG)]rm(MhrmUktrnIG/ro!e:roX4Drp0RO
rp]pXrq$-^rqHEfrqcNirr)`nj8\';rr2oqrqucmrqZQgrqHEbrq$-YrpTjQrp'LFroF(;rnm_0rn7;"
rm:YhrlG)Yrkn`Nrk8<CrjVm7rj2U.riZ7%ri5ssri#gnrh]UiqkO%_VP/R7O.lQIrh9.\pRqDWrh/_R
rhKIerhK@aqk3h[pnR;Orh0.^oq;;Xrh07arh+h9rLne9]:o4urh8eRqk="^n"K`Urh9Cf!McFeU&1M[



U%kDOU&L_^U%P)XU&L_aU&L^9U!]QbU$&-KUAgkTT_kG^T^STRU]."eU\gb^T_kGXU[k,XU&L_^U%P)X
U&L_aU&L^9Tr"H6Tn/ngTn/ngTn/nsU&LecU$nZOU&L_RU&LhdUAgqbU&1M[U%kDOU&L_^U%P)XU&L_a

U&L\cTqR%2JYBWJrhBCcn"BQOrh/_RrhKIerhK@aqk3h[pnR;Orh0.^oq;;Xrh07arh.`6JY@Xgje;@A
rhKIgrh]Ukri#gqri5t!riZ7)rj2U3rjVm=rk8<Hrkn`TrlG)`rm:Ynrn7;+rnm_6roF(@rp'LLrpTjU
rq$-^rqHEerqZQjrqucoqu5XUi;`fUrr)iorql]jrqQKerq-3\rpTjSrp0RJroO.=rnm_1rn7;%rm:Yh
rlb;Zrk\TKrk&0>rjDa2rilC)ri?$trhf[irhBCcrh0.\qjmVSVON.+O.6-=rgW_P!1NeSqjRMPrg<SO
qjdPQpmh5NqjdPQpmh5NqjdYTrgNhRrgEPMrgWnUrgWnUrgWnUJXcV-JXa9@rg`tWpmV)LqjRMPrg<SO
qjdPQqO@SVSGSfQSGSfNSGSfQSGo#WRf8]RRJ<6MS,SlUS,SlUS,Sk-S'd^VS*-:?SGo#QRerTORf8`S
R/<?LSGSfNSGSfQSGSfNSGSfQSGo#WRf8]RRJ<6MS,SlUS,SlUS,Sk-S#)U*Rt7&[Rt7&[Rt7&gS,SrW

S+rHLS,8ZRRJrTNRerWPS+rNNS,8`QS+rNNS,8`TS,SlUR/WNKRf8fURf8fURf8fURK8nIJX_4[\XWSg

rgW\Oqj[JOrgEbQqjRDPqj[ANqj[JQqj[ANqj[JQrgWnUrg<\QpmV2OrgNhUrgNhUrgM<*JX_4[jdYq5
rgj%\qk3q^rhBCerhf[nri?%$rilC-rjDa8rk&0ErkeZQrlb;drm:Yqrn7;+rnm_7roO.Drp0ROrpTjW
rq-3arqQKgrql]mrr)`nj8\';rr2oqrquclrqQKerq??^rpg!Vrp9XKroa:?ro!e4rn.5#rmC_jrlP/Y
rkSNHrjr*9rj)O,riH*urhf[hrh9=`rgs+ZrgNhQrg*PJqih#BqiRk>JWPGE!0I2@rfI,Aqi^rCqih#B
qih#Eqiq)Drg*5Arg*PIqiq)FrfmDGrf[/BrfmDGrf[/@rf;VlmZ<!]XH<FBrfI,Aqi^rCqih#Bqih#E
qih)E!L&`HQM$LAQN!*FPl?sIPl?mGP5CIBPl?mGP5CC@O+ED0OF`MGOT(=?OT(C>P5^^CPQ$aBPQ$jE
Pl?mGQM$LAQN!*FPl?sIPl?mGP5^[EPQ$gGPQ$aBOoCDmOHtuZOF`LEOF`LEOF`LEOT(@@O8b7?Oo(=@
Pl$[DP5CIBQ2?gFPQ$m@Pl@!JPP^UDQ2[$IPQ$aBPQ$gGPQ$aBOoCF2OF`LEOK+EAO8b7?Oo(=@Pl$[D
P5CIBQ2?gFPQ$m@Pl@!JPP^UDQ2[$IPQ$aBPQ$gGPQ$aBOoCE[OF`LEOQ)B$Oo(=@PQ$gGQ2[-LRf8fU
T)PA]U&LecVZ*OnXT#F&ZMq61])KDB_#D=Pao9TbdJh\qf`'b,i;Va8kPj`Fm/HJQnc&+YpAXgcq#:-h
qu6Qkro=%=s8N#prVl`oqYp6gpAXaanc&%Wn,DVOkl0`Di;VU4h#>n(e,I\mbPoN\_Z%7J\c0&:Yl:d(
X8]!qV#I(eTDkA[S,ScRQN!0KOoCI>O8b1=NW+m6Mh-eFMuJV5Mu8M6N;JM3MuJ\4NVeb8O8b.<Nqe\7
NrG.8O8G%<Nqe\7NrG%;O8b.<Nr+h8N;eb4MZ/S3Mu/B_MuAQbMn"]EMZ/P2N;JM3MuJ\4NVeb8O8b.<
NqeY8NWG0#rfHo9qiLf;plGE7rf-o<rf-o;qi1T6repZ2rf$`4qhfr_d>NR6jGX"prepZ4qhkB2rf$`6
qi:Z:rf-o;plGE7rfHo9qiLf;plGE7rf-o<rf-o;qi1T6repZ2rf$`4qhfr_V2Kn_JW#);JW#);JW#DD
reg]5qi(E0repc7qi1K5rf@&<rf6c7rf6u>plG<6rf6c7rf6u;rf@&<rf6l8rf$i7qhkB3qht?/!K2ke
Mh-epMuJV5Mu/J1MZ/P5N;JV3NrG+=NW+t5O8b1=OSFn6OT(:8O8b1=NW,"<NW+t8NW+n9Mu/D2N;JP1

MURK7Mh-fJMu/J4NW+t8O8b7?OoCXFQN!6MS,SuXTDkP`V#I7jX8]:$Yl;*1\c0;A_Z%UTbPoiee,Iqt
h#?10i;Vm<kl0lHn,DhUnc&4\pAXgcqYpBhrVlfVs5X.Yrr2lqr;QTmqYp6gpAX^`nc&%Wmf)JMkPjQA
i;VR3gA]V$dJhGjaSs*V^](eC[f3Q2Y5YI#VuEFiT`1P^Rf8ZQQ2ZsGOT(=?NW+n9MuJV5M#N1)L4P)?






LAlo+K`6])L&m'b!/LQ.reLK-reL9)qhb!'repc7onra,reg]6repH,re^E+reCE-pkJd'qh>$&re5oX
rJ#lX]8$<=re19)reCE-reCE-reCE-pk\g(onra,!/pr;N:i)-MuJV5N;eb.MZ/J-M#N/.L\QW'L\lf)
K`6[VL=(a,L?F<jL&Qc)L&Qi+L]3&-L]3&-L\Q]&M=lc*MuJ\.MZ/P5MZ/S6MtMu,M>i>.M#N/.L\QW'
L\lf)K`6[VL8BWUL4P)1L4P)1L4P)=LAlo+K`6])LAlu-LAlu-LAlu'M#3&%MZ/P5N:i)-MuJV5N;eb.
MZ/J-M#N/.L\QW'L\lf)K`6Z+L5(86JVL^ire:?)re:?+reLK-reLK-reL9)qhb!'repc7onra,reg]6
repH,re^E+reCE-pkJd'qh>$&re8gUJVJ`1hhM,cre^W3repc7rf-o<rfR2Crg!JMrgNhXrh07brhoaq
riZ7*rjDa9rkJHNrlG)armC_prn@A,ro!e:roa:FrpKdSrpg![rq69brqcWkrqucorr1sXj8],Xrr)io
rql]krqHEcrq-3ZrpKdProj@Cro*k5rn@A'rmC_jrlb;YrkSNGrj2U/riZ6urhTOdrgs+Xrg*PHrfI,?


repc5reUQ,re(3%qgn`rrd^kqJU``1qgSEj!IfItIf=cmIf=lsJ,XuqK)U;tK)UK'KDU?$L&Qc&KDpQ'
L&6Q&KDpT(KDpK%JGt-!K(slqIf"QjIf=cmIY!"IIt<*]J,=]lIK"]pIJ\KmJGt&tJGXrtJGXrtL&Q`'
KE6aZre:?)qh+m$re:6&re(3(re(3%rdb!!rdsoqrdO`mqgSNmqgO*Gd=6^skC<AXqgJHmrdFZmrdaut
rdaltrdaltre:?(qh4s&re10$re19)qh4s$re:?(rdt-"rdk'#pji?mqgJ?jrdFZmJUaMGJU`6#JU`6#
JU`6#NIUhSqgJHmrdFZmrdautrdaltrdaltre:?(qh4s&re10$re19)qh4s$re:?(rdt-"rdk'#pji?m
qgJ?jrdFZm!IoTMIt<*[J,=]lIK"]pIJ\KmJGt&tJGXrtJGXrtL&Q`%K`6])K_pE$K`6]&K`6W'L&Q`(
K)U<"Jc:8rJGt#pIJ\KmIJ\KBIt<*#J)YtWJGt&tJGt-!K)UE%K`6f,M>iG4O8b:@P5^dHRJrfWT`1bd
VuEjuYl;!.]`,\F_u@jYcMl5jfDaM'hYuL5jo4KCm/HGPnG`(Zp&=^bqYpBkr;QZoro=%=s8N#srVl`o
qYp<ip\sjbo)A.XmJcGNkPjQAi;VR3g&BS%d/M8gao9-U^&GSAZ2Up*WrAgnU&LY_R/WBMP5^OAN;e_6
LAll*KDpE#J,XorIK"WnH_Yk;H&m7JGl)aeH@#F6rd"9cpjN-jqg\KnrdjNgqgn`srdXfopjN-grd+Qj
rd"0_rd"BcJU.3>JU+kQqfr!`pj2pbpj;dardO`oqg\Zt!J,gjJGXosJGt&qIe\?jHiA?jHiA<`HN&3e
G_(.fH%C8(H2Dj`H2)^bH2)a]IK"]mJ,=cqJa\-dJc:3!J,=]lIK"ZoHiA?jHiA<`HN&3eG_(.:H%C6l
H%C6lH%C6lH&[+HGl)d]HN&3bHh`$gIf"WlJGt,gJGXosJGt&qIe\?jHiA?jHiA<`HN&3eGQE)8JU)fl

\U"'sqg%s_rd"9cpjN-jqg\KnrdjNgqgn`srdXfopjN-grd+Qjrd"0_rd"Bcds6LiJU--urd4WlrdFcp
rdXotre(3(reCE0rf$i;rf[8Hrg<\Vrh9=eri5t"riuI5rk8<IrlP/arm:Yqrn7;,ro!e:roa:HrpB^S
rpp']rqHEfrql]mrr)iqj8\0>rr2oqrquclrqZQerq-3\rp]pSrp0RGro3q7rnIG)rmUkmrlY5[rkSNF
rjDa0ri?$rrh07]rgWnOrfR2@reg]2reCE'rdautrd=]lrd+Qgrc\9`UND'/O*(/<rcA0`Fn^%XGPcRY
GlE$gHiA?gIK"WkIJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aaG5HF]FSKp.FT$<4FLuYiF8g:SFoHU^G5-=]

HN&9jHM`*jHi\VBqgJ6erdFZkrdFQfrcnEfrcn<`rce?arc\0]rcIpVJTT:]JTU'spiHFVol^7Xqf_aZ


rd+Qjrd+Hird=TkpjE'hqgABkpj2pard"Kfqf_s_rcS3`qfVm[piD".V0%91JTQHbJTQHbJTQlnpiHFV
ol^7Xqf_aZrd+Qjrd+Hird=TkpjE'hqgABkpj2pard"Kfqf_s_rcS3`qfVm[pi?IXFFeObFLcMgF8g:S
FoHU^G5-=]HN&9jHM`-iI/A?eI/\QkI/\QhHN&0gH2`'cG5c^bFoHR]FoHLXF455^FFePkFT-F^GQ)jd

HN&9jI/\WpJGt-!LAm#.MZ/\9P5^^FS,T#YT`1kgX8]@&[Jmc:_#D@QbPoiee,Itug]$+0j8S3?li-;N
nG`"Xp&=[aq>U9jr;QZoro=%=s8N#srVl]nqYp<ipAX^`nc&"Vli-/Jjo4<>hu;@/f)F(rbl5]__u@@K
\,NZ3X8]!qUAgb`RJrKNOT(7=MuJD/K)U9!IK"QlGlDjbFT-=XE;ORNDLl\dDZ4MPDY\/JD>S5JE;O\Q
F8g@^GQ)dbGPHF^GPcR_GPcX^GQ)dbFoHR]F8L"TE;OPGD>nGPD1QU'DLl];DZ4MPDY7lDDYnDMEr0qW
G5c^bG5c^aGl2gcGPcR_GPcX^GQ)dbFoHR]F8L"TE;OPGD>nGPD1QTPDLl]gDZ4MPDY7lDDYnDMEr0qW
G5c^bG5c^\GlDpaG5c^_Gl)^aG5cX`G5H@XEr0hQDY7lGDZ4L(DP_6%DLl\VDLl\VDLl\bDZ4MPDY7lD
DYnDMEr0qWG5c^bG5c^\GlDpaG5c^_Gl)^aG5cX`G5H@XEr0hQDY7lGDZ4JRDJk#CJSr#9rb_XPokjSD

qf)FQqfDa[rce?brce-^rce6_rce6aqfi$_rcS3`qfDXTqf)FMokj\Grb^,%JSp$VibnX3qf)OTrcA']
rcnEgrdFcqrdt-&repc9rfI,ErgEbWrhBCiri?%'rjVm?rkn`UrlkAhrmh#%rnm_7roO.Drp9XQrpg![
rq??erqcWkrr)iqj8\0>rr2oqrql]krqZQdrq$-YrpKdOrosFCro*k5rn.5"rm:Yfrl4rRrk&0;ric=#



rhTOdrgNhPrf[8@reg]1rdk&urd=]irc\9_rc8!Wrbh^PrbVRLUM>?pO)"?%!GZ?LCAqrHCAr#GD#S;N
DZ4SRE;O\TF80kSFo-7ZFT-FXFSg.YEr0hTDZ4MMD#S5LCAqrHC@u:lCAhmuC:e6RC&VlHC&VlHC\qrI

D>nGPDuO_QErL.VF9-K*qfVdWrcJ-^piQCSrc7mTrbh^PqeZ7IrbDFHrbD+?JSNSIJSO@_okFD?rb;@H
rbMCIrb_XPrbqdTqf;[WpiQCUqfDaYrcS!XqfDaWqf)OPrb_OKrbMLJrb;@HokAtlV.tQrJSKaNJSKaN
JSL0ZokFD?rb;@HrbMCIrb_XPrbqdTqf;[WpiQCUqfDaYrcS!XqfDaWqf)OPrb_OKrbMLJrb;@Hok=GA
C4U,NC:S*PC&VlHC&VlHC\qrID>nGPDuO_QErL.TFSg4XF8g:\Fng(UF8g4WE;jbSD>S/KC]8)JC&Vl?
C"$gJC4U-WCAr#JD#S;NDZ4VSErL1[G5cacI/\ToJc:H(MZ/Y8P5^dHRf8uZV>dInYPts/]DfYG`r=0\
d/MSpf`'b,iVqp;l2L#Jmf)_ToD\F^q>U6iqu6Qnro=%=s8N#srVl]nqYp9hp&=R^nG_kTli-,Ij8S!9
h>Z%*e,I\maSs-W^](eCZi7-,VZ*=hT)P)UPQ$XBMZ/A0K)U9!HiA<iFT-=XDuOSPC]8)JB_uHAAuT?m







AW14"B)ZB@AcZOW!,):Crb)4Drb)+BrbMLLrbh^PrbqRNrc.pXol9tOrc.^Prbh^Prbh^OrbMLIrb2:D
rb21@rb)+>rap^mqIP4h\7PYOral(@rb)4Brb)4Drb)+BrbMLLrbh^PrbqRN!-&$ZEW1"OEW1"XEVOMP
DZ4MPDZ4JOC]8&IB`;ZDB_uE@BDZ9>Aq=O=AV"FRAc?<@Ac?<@BDuNBBDuTDBDZEBC]8/LDZ4MPDtn;N
EW1"OEW1"XEVOMPDZ4MPDZ4JOC]8&IB`;ZDB_uE@BDZ9>Aq=NfAV"EDAV"EDAV"EDAVt'uB)ZB@B)ZHB
B)ZHBB`;ZAC&VoID#S>OD>nJKE;jkVEqOGOErL(RE;jbSD>nGPD#S5LC&VfFBDuTAB)ZH?Ac?<>AV"ED
A[Z1LB)ZB@B)ZHBB)ZHBB`;ZAC&VoID#S>OD>nJKE;jkVEqOGOErL(RE;jbSD>nGPD#S5LC&VfFBDuTA
B)ZH?Ac?;gAV"EDA`[M&B)?6?C&VlHC]82JDuOeVFT-RbI/\WpK)UQ)MZ/\9PQ$pJT)PJ`VZ*atZi7N7
^])1NaSsNbe,Ituh>Z@3j8S9AlMg5NnG`%Yp&=acq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.XmJcDM
kl0T@hu;F1ec+"rci1r`_Z%=L[JmE0X8\jmT)P2XPQ$XBMuJD/Jc:/uGlDjbF8g.XDZ4JOB`;WCAc?3=
@fBf2@"D^H@/++,@/XL1@JaU4Ac$->CA;TDD#S>LD>S/HD>nGPD>S,GCAqlFB)?0:AG]g4@.dlX@/XJa
@(ThA?he%+@JaU4Ac$->CA;TDC]J>RDJo>gqeZ.Hrbh^PqeQ(Drb)4BqdoY8qdKA0oj<8Xd9qN5k@"'l
pgEu-qdfS8qe,nCphTkFrbhUMqeZ.Hrbh^PqeQ(Drb)4BqdoY8qdKA0oj<8XV-nj^JRF%:JRF%:JRFIF

pg<f(qdKA4qdoY;rbD4DrbVROqec4Hqec=Mrb_OJqeH+Crau%=qdfS4qdB)(!FT;d@"D^r@/++(@/FC0
AG]s8BDuZ@C]8/LDYn;JD#8)KDZ4MMC\qlGBDuN?Ac$$8@JaI*?diD6@"D_C@/aU6@fBm:Ac??AB`;iI
DZ4VSF8g@^GlE3lK)UH&MuJe:PQ%$MT)PJ`X8]@&[Jmr?_u@[Tci2Alec+A'hu;X7kl0lHmJcVSoD\C]
q#:*gqu6Qnro=%=s8N#srVl]nq>U-fo`"F\nG_eRl2KlFiVq^5g]#_%d/M;h`W!^Q^&GD<Y5YF"T`1J\
R/W6INW+b5K)U5uHiA0eF8g.XDZ4GNC&V]CAH$';@/aO4?Me$->_-.@>lIt$>QA%+?2e4.@K'd9@f'^8
B)ZHBB_uN@C\VZ>C]8)JC&VfFBDuN?AH$';A,B^3?iF>^>jbjJ>e=8?>P27u?2e4.@K'd9@f'^8B)ZHB
B_uKDC]%uCCA;TDCAqrHB`;ZDB)?-<@fBm7@JaF2?%H7t>_-/C>lIt#>l.h+?i+:2A,]s7AH$3?BDuTA
C&;]@CA;TDCAqrHB`;ZDB)?-<@fBm7@JaF2?%H7H>_-.2>_-.2>_-.2>`E"f>P27u?2e4.@K'd9@f'^8
B)ZHBB_uN@C\VZ>C]8)JC&VfFBDuN?AH$';A,B^3?iF@#>_-.2>e+,=>P27u?2e4.@K'd9@f'^8B)ZHB
B_uN@C\VZ>C]8)JC&VfFBDuN?AH$';A,B^3?iF?L>_-.2>iK#f?2e10?iFI4@fBm:Ac?ECC]85NE;jqX
FoHaeJ,Y'!M#NA4OoCaISGo2\WW'+#[/Rc<_>_FQc2Q,ieGe5%hYuL5kPj`Fm/HMRoD\C]p\t!fqu6Qn
ro=%=s8N#srVl]nq>U-fo`"F\nG_eRl2KiEi;VR3gA]S#d/M8g`;[RO]`,59XT#*rT`1G[Q2ZjDMZ/A0




JGsrqH2_j`E;jbSCAqoGB)Z6<@/aO4?2e+.>Q.g'=b0_.=TM]0rEB)&ra,J/ra>V3rac">qe#h@rb;@F
rb)+Arb;@Frb;@Eqe#_9qdKJ3ra5P/qcir$pf[SuJQ_qSJQ]0Zqc`l$ra,J/ra>V3rac">qe#h@!,2IJ
C&VfFBDZBAC&VfFC&VcBB)?-9@K'[6?i+1,>PhV!=oMNS=j^B'=kd*V>5MP'?Me+/@/FC3AH$0;B)ZKC
C&VfFBDZBAC&VfFC&VcBB)?-9@K'[6?i+1,>PhV!=oMNS=f#8P=b0_,=b0_,=b0_,=o2D">Q.t+?iFI1
@K'g:Ac$*=B`;`FB`;ZAB`;`FB`;`FBDZ<<AG]g7@/aO1?Mdt(>528"=92Q-JQ[P,X]bO)qcj&+qd9>1
qdKJ7rakt=rb2:Frb2:Dqe5tCrb2:Frb)+?qdfS4ra>_4qd0/(qc`btr`IWPJQ[P,j]VIar`fA,ra#M1
ra>_6rau.CrbDFMrc%jWrd"Kjrdb!&repc:rg!JOrh07friQ1*rk/6Grl"f[rm1Smrn@A-ro!e<roj@J
rp]pYrq-3arqZQjrr)iqj8\0>rr2oqrqcWhrqHEarpp'Wrp9XJroO.;rnRM+rmLekrlY5Wrk8<ArilC%
rhTOarg3VIrepc1rdt,urd"Kcrc%jRrbDFDraYh5ra#M,r`K/$r`8nrWDnFJO&Z*Wpf%8o<<-%u<rQ2"
=oMP#>5hh,?N+=2@/aU6A,]s4AH$0;AH$0;AH$*<@fBm:@K'[6?iFC2?2Ih)=T2J&=T2A#<In-><.S#\
<;ohk<;ons<rQ2"=oMP#>5hh,?N+=2@/aU6A,]s9AGg!;Ac$$;Ac$$;A,]s:A,]p9@/aO4?N+7->5hY'
=oMP&<rQ*M<5hgf<9I6[;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:A,]p9

@/aO4?N+7->5hY'=oMP&<rQ*M<1-^:<.S#"<.S#"<.S#.<;ohk<;ons<rQ2"=oMP#>5hh,?N+=2@/aU6
A,]s4AH$0;AH$0;AH$*<@fBm:@K'[6?iFC2?2Ih)=T2J&=T2A#<V'1@<.S#Z<;ohk<;ons<rQ2"=oMP#
>5hh,?N+=2@/aU6A,]s4AH$0;AH$0;AH$*<@fBm:@K'[6?iFC2?2Ih)=T2J&=T2A#<QA'i<.S$.<;ons
<rQ2"=T2M'>l.q.A,^'=CAr)LE;k"ZH2`9lK)UQ)MuJn=R/WZUV#IFoYl;34^Ac"Kb5T]cdf.r!h>Z@3
jo4KCm/HJQo)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"C[n,DYPkl0ZBi;VO2g&BCuc2Pia_>_.I









\,NT1WW&[lS,S`QOoC4:K`6N$HiA3fErKtUC]8#HA,]p9?iF:/=oMM%<rQ+u<;ohq;Q3NE;2eBI;?9]p


rDW\pr`/r!qcN`"qd'2.qdB;1mpl?+raG\3ra,J-r`oG,qcNi!r`/qspf%&fJPl8@JPipSpepufr`&ks
r`Au!qcir'ra5P1rF,e:@ddh+@fBg5@/aL0?2e+.>PhP%=8l5!<;9Dh;Lq]j;1VU*;>=&d;uTbq<W6(s

=Sl>"?2e4.@/FF%A,]s:@JaI3?Me%->lIt)=T2D$<W5tm;u9ID;5-p=;1VSq;1VSq;1VT%;>=&d;uTbq
<W6(s=Sl>"?2e4.@/FF%A,]s:@JaI3?Me%->lIt)=T2D$<W5tm;u9Jj;1VSq;79?s;YsDl<;ons=8Q+s
>Ph_*?i+7.@ddh+@fBg5@/aL0?2e+.>PhP%=8l5!<;9Dh;UA9l;1VU+;>sJm;uTbq<W6%u=8lA%>Q/"/
@K'd9B`;cGDZ4\UGQ)sgJGt9%M>iY:QN!BQU].7lYPu$1]`,bHao9QadJhhuh#?72jSnBBli-APo)A:\
p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"C[n,DYPkl0ZBi;VO2f`'7sbl5Z^_#CtF[f3H/W;`LiRf8QN
O8aq6KDpB"GlDgaDuOSPC&V`D@/aL3?2e"+=8l5!;uT\l:o7$>:QJ<N:B"&g:B"#i:f%-gr_`Ymr_rer
r`9"uqcWo&r`];+ra#M1qdB)*ra>_6qdBD1ra#M.r`];*r`];(pf7;lr_i_mqb[8er_NMgJPZ5?JPWmR

r_EGgr_EGgr_WSkr_i_or`/qur`/hur`fA*r`oG.ra5V3!FT=.@K'[6@JaI3?iF@1>lIq+>Q.h*=nl"r
;uT\o;>X2h:B"&g:4Z3g:Ou=):]=,g:]=,g:]=2i;>sJm;uTer<rQ+r=oMY)>5he+?2e4.@.dt-@/aU3
@/aO4?2e+.>5hb*>5h\"<W5qr;Z9Pj;#X5h:]=+?:Sgj<:Ou;m:Ou;m:Ou<$:]=,g:]=,g:]=2i;>sJm
;uTer<rQ+r=oMY)>5he+?2e4.@.dt-@/aU3@/aO4?2e+.>5hb*>5h\"<W5qr;Z9Pj;#X5h:]=)i:JZO;


JPWgPr_EGgr_EGgr_WSkr_i_or`/qur`/hur`fA*r`oG.ra5P1ojRi-raG\3ra5Y1r`oG+r`fA*r`T"r
r_reor_`Phr_EGgr_Cp<JPUhmi_TGJr_i_or`/r!r`T5+ra5Y4rau.CrbVRPrcJ-ardXp"reLK6rfmDN
rh9=hriZ7/rk&0Frl>#^rm:YsrnIG1roF(Brp0RPrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq$-Z
rpTjOroa:Arnm_/rn%.rrlkA_rkSNFrjDa-rhf[frg3VIrf6u3rdk&rrcS3\rbqdLral(;ra5Y/r`T5#
r`&kpr_WJfqb=%`JP;+ur_*5aq+Ui`qbI,dr_`Ynqc*Pqr`B)&qcir'ra,S3ra5P/ra5Y4qd08-qcj&'
r`B)"qc*Pmr_`Pgr_E5_JP>f3JP<[Lr_*5apeCW\r_NMjr_r\nr`9#"r`]2'qcs2.!FB+3@/aO1?N+=2

@/F:0?2Ik*>5hV&<r5kq;Z9Pj:]=,a9n?!]9S#n#9`@]a9__?Z:B"&g;>sMk<;oqt=8lD#>Ph_*?N+@3
?i+1/?iFI1?N+7->Q.h*=8l7t<;oep;>X/g:A@P79V5"09S#lg9S#lg9S#ls9`@]a9__?Z:B"&g;>sMk
<;oqt=8lD#>Ph_*?N+@3?i+1/?iFI1?N+7->Q.h*=8l7t<;oep;>X/g:A@QZ9S#lg9Y!jr9E%W[:&@]b
:]=5j;u9Pn<rQ2">5MP$?2e10@/aO1?N+=2@/F:0?2Ik*>5hV&<r5kq;Z9Pj:]=,a:!H@_9S#ms9`@cc
:]!uf;Z9Vo<W6/#>lJ+0@K'j;B`;rLErL4\I/\ZqL&R,3P5^gIT`1kgXo>a-]DfVFaSsE_d/MYrg]$+0
jSnBBlMg8Onc&.Zp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zn,DVOkPjQAhYu7.f)F%qbPoN\_#CqE
[/R0+VZ*4eQN!$GN;eM0J,XfoFT-7YD>n/HA,]j7?2e%,=T2;!;Ys8h:&[h]8qBTq9)D3W8c_UZ!)3Ab
r_<Aer_WSkr_reor`&ksr`K/&r`];+qd'2-oj.Q'ra#D+r`];(r`K/"r`&kpr_renr_WShr_<Abr_3;a
r_!&ZJP,l5JP*OHqapZWr_3;ar_<Aer_WSkr_reor`&ksr`K/&r`];+rETG0?2e1'?2e10?2In+>5h\(
=T2>"<;oep;uTYn;#X5h:&[fb9`@]a9)D229$p7^9'8hD8c)-Z9`@]a:&[oe;#X>k;uT\o<;ons=T2J&
>5he(?2e1'?2e10?2In+>5h\(=T2>"<;oep;uTYn;#X5h:&[fb9`@]a9)D228u5.28qBTc8qBTc8qBTo



9)D3W9)_N`9E%Zb:B")h;>sMn;Z9Yp<W6,"=oMV(>l.h+?M.V'?N+7->lIq+=oMP&<W5ts;Z9Vo;>sDk
:B!ue9E%Wa9E%Q\8HDFUJP(Jc\Ou`jqb$i]r_*5br_EGhr_`Ynr_i_pr`/r"r`T5(r`o>+ra,8'ra,S0
qcs,(r`T5&r`/qsr_i_or_`Ykr_EGer_*5ar_*5_qao7/JP(Jchb*lAr_<8cr_i_pr`K/'ra#M1raYq>
rb_XSrcJ-drdb!$rf$i<rg*PUrh]Uqrj;[9rkSNQrlb;frmq)&rndY8roj@HrpTjVrq$-`rqZQirr)iq
j8\0>rr2oqrqcWhrqHE`rpg!Urp'LGro="7rn@A%rm:Yfrl+lOrji$7ri?$orh'1TrfI,;re(3"rd+Qa




rbqdPral(<ra5Y.r`K/#r_i_lr_NMer_*5_qambXJOkhmr^Z`S!D,i_8cDB[9`@fd:]=2i;Z9Vo<;9Sj
>Q.q'>l.h+>Q.n,>Q.b(=8l>$<;ohq;Z9Ml:]=,g9`%K[8V'G)8:a=D8H)-S8H)3[9D_E^:B"&g;#XAl
;uTbk=Sc5&>?h)4pg!]%r`fA,r`fA(r`B)$r`&kqr_i_lr_NMgr_32^qal?0a@LkQk=GSBpdkBUr_*,^
r_EGgr_WSlr_reqpfR;qra#;(qd'2*r`oG,r`K/$r`K/!r_reor_WSir_EGdqb-fXJOl;%JOk>_JOk>_
JOk>_NCa%=pdkBUr_*,^r_EGgr_WSlr_reqpfR;qra#;(qd'2*r`oG,r`K/$r`K/!r_reor_WSir_EGd
qb-fXp.0a*JOm=Br^Z`Sr^m)^qb6uar_NMir_i_or`&Yppfm`'pg!]%r`fA,r`fA(r`B)$r`&kqr_i_l
r_NMgr_32^qanq$JOk>_i^j&?r_!/_r_3;er_`Ymr`9##r`];.raPk<rbVRPrc8!ardOj!repc;rg!JT
rh]Uprj2U7rkJHOrlY5ermh#$rndY7roa:GrpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWhrqHE`rpg!U
rosFEro3q6rn@A%rm1Scrl"fLrjVm4ri5smrgj%Prf@&9rdk&srcnE^rbh^MraYq8ra#M*r`/qrr_WSh
r_3;`r^m)[UIKf(O%0"8qaLTV7fZ'Y8H)3[9)_K\:&[ud;Z9_r<W6%r=T2M'>khM%>Q.n)>5hY'<rQ2"
<rQ"r;>sDk:&[ic9E%Q_8cD9X8,c!T7=dr,7Y+%@7f,XO7fGpW8H)3[9)_K\:&[ud;Z9_r<W6%r=9)M*
>$Co1pfdZ$r`o>(r`K/#r`B)"r_i_mr_WSgr_3;ar_!/]r^coVr^QcRJO\$VJO\flqaLBOr^ZrYr^m)]
r_*,_r_WJir`9"ur`8nur`];+pfdZ$r`o>(r`K/#r`B)"r_i_mr_WSgr_3;ar_!/]r^coVr^QcRJOZJ*
JOY2[JOY2[JOY2[NCNe6qaUQTr^d#[r_!/_qb@&dqbmDor`/quqcNi$r`o5%r`fA,qc`u$r`9#"r`9"r
r_`Ykr_<Acr_*5_r^m)[qa^WTqaCNT7Y+$[7_)"c7JfRR8,c'Y8cD?]9D_H_;#=/i<rQ+u<r6"u>5he%
>5hb*>l._(=T2A#=8l8";Z9Pm;#X2g9`@]a9)_E]8GbpV7f,X'7Y+$[7c-]78H)3[9)_N`:B")h;uThs
=T2V*@/a[8CAr)LEW14^I/\]rMZ/Y8PQ%-PU].:mZMqB5^&GtLb5T`dec+8$hYuO6k5OWEmf)_ToD\L`
q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7g6g&BM#ci2&c`;[IL\,N]4WrAdmSc4iPNrFn7
JGsopGQ)U]D>n8K@fBa6>lIh(<W5nq;#X2g9E%N^8H)-V7B&\+7#sb86iKLQ7JoUT7fGpW8Gc$Y9`@c`
;#X>h<W6%r=T2J&>P22!>Q.e&=Sl.u<W5km;#X2g9`%H]8H)-V7fGi-7/'*#7(Ykd6iKLQ7JfRR8,c'V
9)_N`:&@cd;>XAm<r5u!=TMZ.r`f&!r`fA)qcN_rr`/qpqb[8dr_32]r^d#YqaUQRJOI[LJOJZhr^6ZQ
r^H]Rr^ZrYqb$i]r_<8dr_`Pmr`8nur`T5)oih?!r`T,#qc<\rr_`Ykr_WSgr_32]r^d#YqaUQRJOH+u
JOG&WJOG&WJOG&WNC<b5r^?`SqaUQTr^coYr_3;cqb[8hqc3VrqcNi#r`f&!r`fA)qcN_rr`/qpqb[8d
r_32]r^d#YqaUQRq*]d%JOI%:r^6ZQr^H]Rr^ZrYqb$i]r_<8dr_`Pmr`8nur`T5)oih?!r`T,#qc<\r
r_`Phr_<Acqb$iYr^ZiTr^G("JOG&Wi^Ec7r^ZrYr^m)^r_<Agr_i_qr`B)(ra5Y6rb;@Krc.p]rd=]q
re^W7rfd>PrhKImrj)O5rk8<LrlY5drm^r#rndY6roX4ErpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWh
rqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm4ri,mkrg`tNrf-o4rdauprcS3ZrbVRIraGe4r`fA&
r`&kor_NMer_!/\r^ZrWr^<VNJO>8]r^?ZQ!(HlVr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qs
r_WSir_EGdr_*5_r^m)Zr^QcRr^?`Qr^)0'rBl-'[6sp]qaLKRr^ZrZr_!/_r_3;dr_NMiqc*Gnr`9)&

l<4*gqc<\rr`&knr_NMgr_3;ar_!/]r^ZrWqaLKPr^6ZOJO@gPJOAB`r^?WPr^QlWr^m)]r_*5ar_EGg
r_WJkqc<\tkun!fqc<\rr`&knr_NMgr_3;ar_!/]r^ZrWqaLKPr^6ZOJO?8$JO=uUJO=uUJO=uULI;&/
qaLKRr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qsr_WSir_EGdr_*5_r^m)Zr^QcRr^?`Qr^$WQ
6\.UU6aK/Z7/KFP7fGpW8cD?]9E%Wa:B"&g;#=5h<rQ1b=oMP#<rQ+u<;o_n:]=,g9`@]a9)_E]8,c!T
7K,^S6iKF$6\.UU6fg]47/f[T8,c'Y9)_N`:]=5j<;oqt>Q.t.@K's>C]8;PFoH^dJGt?'NW,+?SGo8^
WW'4&\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JM
k5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==LAl]%H2_pbE;jYPBDu<<?2e%,<W5qr:]=)f9)_E]


7fGjU7/K?N6@hIa6N0:J6Ms1N6iKOR7fGpW8H)3[9D_K`:]=;l<;oqt<W6(a=T2A#<W6%u<;ohn:]=,g
9E%Q_8H)-V7JfH'6M*Tq6G#S`62O"G6iKOR7fGpW8H)3[9D_K`:]=;l<;oqt<W6&"=R'#f<rQ+u<rQ(t
;u9Ai:B!oc9)_B\8,GaP6\.SF6@hJd6N0:J6Mj.L7K,dU8,c'Y8cDB[:B"&g;uTbq<rQ+u=6Wid<rQ+u
<rQ(t;u9Ai:B!oc9)_B\8,GaP6\.Ro6@hIS6@hIS6@hIS6B+>262O"G6iKOR7fGpW8H)3[9D_K`:]=;l
<;oqt<W6(a=T2A#<W6%u<;ohn:]=,g9E%Q_8H)-V7JfIG6@hIS6FfG^62O"G6iKOR7fGpW8H)3[9D_K`
:]=;l<;oqt<W6(a=T2A#<W6%u<;ohn:]=,g9E%Q_8H)-V7JfHp6@hIS6K1?26iKLQ7K,dU8cDB^:&[rf
;Z9\q>5hh,@/ag<C]8;PFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Y
p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==
LAl]%H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@N6EEJ(6'=P56N0:J6Ms1N6iKOR7fGpW
8H)3[9D_K`:]=;l<;T\p=6Wid<r5no;u9Ai:B!oc9)_B\8,GaP6hNcs5la3%6,#Ya6N0:J6Mj.L7K,dU
8,c'Y8cDB[:B"&g;uTbn<W6&"=R'#f<r5no;u9Ai:B!oc9)_B\8,GaP6hNcs6.A2O60^c86N0:J6Mj.L

7K,dU8,c'Y8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g9E%Q_8H)-V7JfIF6@hG$6%M=Q6%M=Q6%M=Q
6'+D36N0:J6Mj.L7K,dU8,c'Y8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g9E%Q_8H)-V7JfIG63'?'
6%VD862j4M62O"G6iKOR7fGpW8H)3[9D_K`:]=;l<;T\p=6Wid<r5no;u9Ai:B!oc9)_B\8,GaP6hNds
6%M=Q60LW36N0@O7/fXS7fH!Y9E%Zb:]=8k<W62$?2e72BDu]GDuOkXHN&EnLAm/2OoCmMU&M"iZ2V63
^&GtLb5T`deGe/#h>ZF5k5OWEmf)_ToD\L`q>U6irVlfVs5s@\rqlZnqYp9hp\sd`nc%tUl2KiEir7d5
f`'D"ci2&c`;[IL\,NZ3W;`OjSGnZMN;eS2J,X`mFT-4XCAqiE@/aI2>5hP$;Z9Jk9`@Z`8cD3Y7K,^P
6iKER5_21`5l3kE6Ms1N6iKOO7fGsX8cDB^:B!ue:]=8k<;T\p=6Wid<r5nr;uT\l:]=,g9E%N^8H)*U
7JfII6N09%5QF'#5e]M\62O"G6iKOO7fGsX8cDB^:B!ue:]=8k<;T\p<rc@f=T2@u<W5qr;Ys8h:B!oc
8cD9[7f,XO6hj"I6%M;N5_22c5l3kE6Mj.L7JfRR8H)3[9E%]c:&[rf;Z9Ym<W6(a=T2@u<W5qr;Ys8h
:B!oc8cD9[7f,XO6hj"I6%M;"5_21O5_21O5_21O5`e8.62O"G6iKOO7fGsX8cDB^:B!ue:]=8k<;T\p
=6Wid<r5nr;uT\l:]=,g9E%N^8H)*U7JfII630A<!'u0$Jj?t6qa(*Gqa:?OqaUQUr^m)^r_EGer_NMk
r`&bpr`A>dr`8nrr_reoqbR2dr_*5^r^d#XqaLBLpd4sGej+dOJO&Eaqa19Lr^?`Sr^QlYr_*5ar_NMk
r`/r$r`oG1rau.FrbqdXrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`
rqZQirr)`nk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;

reCE%rd"Kbrbh^Mrau.;r`oG*r`&kpr_NMfr_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^H]S
r^m)]r_<Aer_NDhr`&ksqcEYspfIGsr`B)"r`/qsr_reor_NDcr_!/]qa^WSr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sqa^WWr_!/ar_EGgqbmDmr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca
8c)$W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7JfUS8cD?]:&[oe:]"&h<;onp=8Q+p=8l>$
=8l8"<W5ts;uT\o:]=)f:&[ca8c)$W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K
7/fXP8,c*Z9)_Qa:B"&d;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;Z9Jh:&[ca8c)$W7K,^S6iKFL62j+M
5<f-4JO"fP]KlH\r]p?Hqa:?Nr^H]Sr^m)]r_<Aer_NDhr`&ksqcEYspfIGsr`B)"r`/qsr_reor_NDc
r_!/]qa^WSr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/ar_NMkr`&l"ra#M2rau.Drbh^W
rd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[
rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFD
ra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?H

qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!
!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp












=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^


5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs
r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O
5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlX
r_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.C
rpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1
ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?H
r'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!
5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TO
r^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU

8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc
r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu
!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!
JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?N




r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=i
rilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pT
roj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`
r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"
r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M
5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP
]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
qcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?N
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6
!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc
r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL






62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq











r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1
ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrquco
rr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXom
rcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#



^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca









8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p

=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I










5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"

r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O
5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHO
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZO
qa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O
5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
qcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMj






r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NM
r^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!
rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mb
rkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"
P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\

r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]

qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cO
jZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
ej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qs
r_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW6
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZO
qa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\
r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2
rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWh
rq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"
r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYs
pfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"
Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\
r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M






5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj











qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^



r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$










=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE










6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ

6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qs
r_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e81





































5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMk
r`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^
rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnK
repc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3H
r]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O
5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYs
pfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O
5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2
r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrW
r^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!
5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL
62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dO
JO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6J
rlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4
rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Q
r^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3H
r]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?H
qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs
r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!
5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrW
r^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4
JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^W
rd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[
rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFD
ra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?H
qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!
!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs
r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O
5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlX
r_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.C
rpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1
ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?H
r'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!
5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TO
r^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc
r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu
!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!
JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?N
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=i
rilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pT
roj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`
r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"
r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M
5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP
]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
qcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?N
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6
!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc
r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL



62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1
ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrquco
rr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXom
rcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#
^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"
r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O
5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHO
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZO
qa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O
5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
qcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMj






r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NM
r^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!
rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mb
rkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"
P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\

r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]

qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cO
jZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
ej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qs
r_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW6
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZO
qa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\
r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2
rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWh
rq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"
r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYs
pfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"
Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\
r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M






5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj











qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^



r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$










=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE










6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ

6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qs
r_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e81





































5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMk
r`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^
rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnK
repc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3H
r]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O
5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYs
pfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O
5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2
r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrW
r^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!
5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL
62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dO
JO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6J
rlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4
rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Q
r^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3H
r]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?H
qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs
r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!
5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrW
r^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4






JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^











r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^W
rd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[
rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFD
ra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ym



r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?H
qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"










<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ










7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J

5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF





































62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!
!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs
r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O
5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlX
r_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.C
rpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1
ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?H
r'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!
5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TO
r^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K
5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc
r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu
!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!
JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W
7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?N
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=i
rilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pT
roj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`
r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"
r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M
5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP






]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks

qcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?N
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts

;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU










8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6






!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc






r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L











rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBI
qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K
7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL






62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq











r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1
ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrquco
rr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXom
rcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#



^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca









8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p

=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I










5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"

r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
JNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O
5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHO
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZO
qa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O
5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
qcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBI
qa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u
5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMj






r_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NM
r^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!
rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mb
rkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"
P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\

r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$
<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]

qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cO
jZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`V
rm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+
rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZO
r^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj
qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ks
rDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE
6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S
6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHI
ej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qs
r_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMj
r_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW6
5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp
<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZO
qa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]
qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L
5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld
9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf
;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\
r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlU
r^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2
rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWh
rq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"
r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYs
pfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfU
r^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J
5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z
9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"
Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\
r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-c
rdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oq
rquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:
r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*H
r^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S
6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS
7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M






5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yj











qb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(C
rbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^



r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$










=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE










6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ

6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qs
r_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#
JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc
9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e81





































5Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W
7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$
r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMk
r`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^
rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnK
repc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3H
r]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O
5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYs
pfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I
!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"
<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O
5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn
:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZR
r^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4
roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`J
rjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2
r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrW
r^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!
5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u
<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^
r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$
=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ
7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL
62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$
=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dO
JO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6J
rlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4
rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Q
r^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_p
r`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF
62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp
=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3H
r]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&c
r_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\
8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm
<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?H
qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Q
r^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^
rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yj
r_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs
r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZ
r_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!
5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^
:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrW
r^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%
rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrqucl
rqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*
r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs
qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`S
r^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL
62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW
8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4






JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^











r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^W
rd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[
rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFD
ra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ym



r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?H
qa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU
7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"










<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ










7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J

5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_ren
r_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7
r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\
8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF





































62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S



6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"u
r`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!
!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg
:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp
=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^
5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y
7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGs

r`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;e
r_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pX
rq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\
rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`R
r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts
;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O
5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc






9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hs











qcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlX
r_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.C
rpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1
ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?H
r'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS

r^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu!EWA"=SPts=T2D$


<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z
:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!




















5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq
;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym

r`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!JO"cOjZrf2r^-TO
r^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO#A`
r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p
=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU
8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W7K,^S6iKFL62j.K



5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"








<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^






r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIej+dOJO&<^
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDc









r_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/nu





!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M5jCW65Q3qF62O%K









7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca8H)-Y7fGjU7/fRQ
6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts
=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*Hr^?`Sr^QlW

r^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]et!
JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlT
r^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kq
r_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ym
r`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K5Cl)L5_22c5lO"I
5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj:&[ld9)_B\8,c!W


























7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp











=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP]KlH\r]p?Hqa:?N



r^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJ
r]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=i
rilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pT
roj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`
r^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"

r`/qsr_renr_NDcr_!/\r^ZrWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^HfUr^ZrZr_!&^
r_NMjr_i_pr`/nu!EWA"=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5lO!!5h&&M
5jCW65Q3qF62O%K7/fXS7fGpW8cD?Z:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]=)f:&[ca
8H)-Y7fGjU7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j
;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAg:&[ca8H)-Y7fGjU7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBI

qa(*Hr^?`Sr^QlWr^m)]qb@&cr_`Ymr`&ksqcEYspfIGsr`B)"r`/qsr_renr_NDcr_!/\r^ZrWr^HfS
r^6ZOqa(3Hr]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO#A`r]gBIqa(-I!(6`Rr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVp
r`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Yr^QlUr^?`Qr^-KJr]pHIJNs3#JO$q7r]gBIqa(*Hr^?`Sr^QlW
r^m)]qb@&cr_`Ymr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j.K
5Cl)L5_22c5lO"I5l3kE6iKLQ7K,dU8,c*Z9)D?^:]=5j;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;>sAj
:&[ld9)_B\8,c!W7K,^S6iKFL62j.K5Cl(u5_21O5_21O5_21O5`e815Q3qF62O%K7/fXS7fGpW8cD?Z














:&[rf;>sJm<;onp=8Q+p=8l>$=8l8"<W5ts;uTYn:]!lc9)_B\8,c!W7K,^S6iKFL62j+M5<f-4JO"fP















]KlH\r]p?Hqa:?Nr^HfUr^ZrZr_!&^r_NMjr_i_pr`/hsqcNVpr`K/$r`9"ur`&kqr_`Yjqb@&^r^d#Y
r^QlUr^?`Qr^-KJr]pHIej+dOJO&<^r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFEra>_1
r`T5"r_i_kr_<Aar^d#Xr^?`Qr^-TMWBc#"P!K"2r]p?Hr'LHOr^?`Sqa^WWr_!/ar_EGgqbmDmr`/hs
qcNVpr`K/$r`9"ur`&kqr_i_kqb@&^r^luWr^HfSr^6ZOqa(3Hr]bs!!'l*#^-MZ^r]p?Hqa:?Nr^H]S
r^m)]r_<Aer_NDhr`&ksrDs#$=8Q+p=8l>$=8l8"<W5ts;uT\o:]!lc9)_EZ8,bsV7/fRQ6Mj(J5lO!!

5h&&M5jCW65Q3qF62O%K7/fXP8,c*Z9)_Qa:B"&d;Z9Yp<Vokp=SPts=T2D$<rQ+u<;ohq;Z9Jk:&[ld

9)_EZ8,bsV7/fRQ6Mj(J5lO!!5c?r!5_21O5_21O5_21^5lO"I5l3kE6iKLQ7JfUS8cD?]:&[oe:]"&h

<;onp=8Q+p=8l>$=8l8"<W5ts;uT\o:]!lc9)_EZ8,bsV7/fRQ6Mj(J5QO)6!'c$"Jj?t6r]gBIqa(*H
r^?`Sqa^WWr_!/ar_EGgqbmDmr`/hsqcNVpr`K/$r`9"ur`&kqr_i_kqb@&^r^luWr^HfSr^6ZOqa(3H
r]et!JO"cOjZrf2r^-TOr^HfUr^d#\r_<Afr_i_pr`T5+ra>_;rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2fnrqcWhrqHE`rpg!UrosFE


ro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFEra>_2r`];$r_i_kr_3;`r^m)Y
r^HfSqa:?LX?_>%P!Jn1qa13J!(6`SqaUQUr^m)^r_EGer_NMkr`&bpr`A>dr`8nrr_reoqbR2dr_*5^
r^d#XqaLBLpd4sGJNs3#JO$q7qa(*Gqa:?OqaUQUr^m)^r_EGer_NMkr`&bpr`9)%l<+$dqc3Vor_iVh

r_EGcr^m)[r^QcRqa:-Fr]u*#e3JRMl9P54qa10Ir^H]Rr^d#[r_*5cr_<Afr_i_pqc3Vskudpcqc3Vo
r_iVhr_EGcr^m)[r^QcRqa:-Fr]u*#W'Go!JO"cOJO"cOJO#;^qa(*Gqa:?OqaUQUr^m)^r_EGer_NMk
r`&bpr`A>dr`8nrr_reoqbR2dr_*5^r^d#XqaLBLpd,!I5la3%5_;865l3kE6Mj.L7JfRR8H)3[9E%]c
:&[rf;Z9Ym<W6(a=T2@u<W5qr;Ys8h:B!oc8cD9[7f,XO6hj"I6.S;P5_22a5l3nI6iKLQ7K,dU8cDB^





9`@ie;Z9\q>5he+@/ad;C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>l2L,M
nG`%Yp\t!fqYpHjroX7Cs8N#prVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^
OoC==LAl]%H2_pbDuOMNBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K@N6EEJ(6&\,,6Ms1N6iKOR7fGpW

8H)3[9D_K`:]=;l<;T\p=6Wid<r5no;u9Ai:B!oc9)_B\8,GaP6hj!!62a*#6+B5X6Mj.L7K,dU8,c'Y
8cDB[:B"&g;uTbn<W6&"=R'#f<r5no;u9Ai:B!oc9)_B\8,GaP6hj!!6.%uL60(?/6Mj.L7K,dU8,c'Y


8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g9E%Q_8H)-V7JfII6@hG!6%M=Q6%M=Q6%M=Q6&Iu*6Mj.L
7K,dU8,c'Y8cDB[:B"&g;uTbn<W6(a=T2@u<Vo_l:]=,g9E%Q_8H)-V7JfII630A<JO+iQ[R'dWqa:?O
r^QlWr^d#[r_*,`r_NMlr`&bpr`A>dr`8nrqc!Afr_EGcr_!/\r^ZiSqa:-Fdm8ONJO/Kcqa19Lr^?`S
r^QlYr_*5br_NMkr`/r$ra#M2rb)4GrbqdXrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5
roX4ErpKdTrq$-`rqZQirr)`nk5XKArr2oqrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3
ri#gjrg`tMrf$i2rdXomrcJ-YrbMLGra>_2r`];$r_relr_<Aar^m)Yr^HfSqa7>LJO5Dar^$EJr'LHO
r^HfUr^ZrYr^m)^qbI,dr_reqr`9"ur`A>dr`9"ur`9"tr_r\ir_EGcr_!/\r^ZiSqa5p$oKn*q]0cK_
qa10Ir^HfUr^ZrYr^m)^qbI,dr_reqr`9"ur`9)%l<+$dr`/qur`&kqqbR2dr_*5_r^d#YqaLBLJO7FE
JO8Ndr^$EJqa:?Or^QlWr^d#[r_*,`r_NMlr`&ktr`/r!kudpcr`/qur`&kqqbR2dr_*5_r^d#YqaLBL
JO5knJO4oSJO4oSJO4oSNC*V1qa10Ir^HfUr^ZrYr^m)^qbI,dr_reqr`9"ur`A>dr`9"ur`9"tr_r\i
r_EGcr_!/\r^ZiSqa:'DJO4oS\O-9]qa10Ir^HfUr^ZrYr^m)^qbI,dr_reqr`9"ur`A>dr`9"ur`9"t
r_r\ir_EGcr_!/\r^ZiSqa8LmJO4oSi^3W3r^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4Grc%jYrd+Qn
reCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWh
rqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm4ri,mkrg`tNrf-o4rdauprcS3ZrbVRIraGe4r`fA&


r`&kor_NMer_!/\r^ZrWr^<VNJO>8]r^?ZQ!(HlVr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qs

r_WSir_EGdr_*5_r^m)Zr^QcRr^?`Qr^)0'rBl-'[6sp]qaLKRr^ZrZr_!/_r_3;dr_NMiqc*Gnr`9)&
l<4*gqc<\rr`&knr_NMgr_3;ar_!/]r^ZrWqaLKPr^6ZOJO@gPJOAB`r^?WPr^QlWr^m)]r_*5ar_EGg

r_WJkqc<\tkun!fqc<\rr`&knr_NMgr_3;ar_!/]r^ZrWqaLKPr^6ZOJO?8$JO=uUJO=uUJO=uULI;&/
qaLKRr^ZrZr_!/_r_3;dr_NMiqc*Gnr`A>er`K%ur`/qsr_WSir_EGdr_*5_r^m)Zr^QcRr^?`Qr^$WQ
6\.UU6aK/Z7/KFP7fGpW8cD?]9E%Wa:B"&g;#=5h<rQ1b=oMP#<rQ+u<;o_n:]=,g9`@]a9)_E]8,c!T

7K,^S6iKF$6\.UU6fg]47/f[T8,c'Y9)_N`:]=5j<;oqt>Q.t.@K's>C]8;PFoH^dJGt?'NW,+?SGo8^
WW'4&\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JM
k5OB>h>Z+,ec*noao96X^&GM?ZMpj&UAg\^P5^I?M>i&)HiA6gE;j\QC&VT@?iF=0=8l5!;>sDk:&[fb
8cD9[8#&M(7?9n77/fXQ7K>pW8,c'V9)_K_:&[rf;#X>h<W6%r=T2J#>528">5h\%=T2@u<W5kp;#X8i
:&[i`9)_B\8,GdT7JfK(7K#Z+7Cu"c7/fXP7fGpW8Gc$Y9E%Zb:]=2i;>XAm<r5u!=TMZ.qc`btr`];(
qcNhuqc3Vmr_WSir_<Acqb$iYr^ZiTr^H]PJORsTJOS`jqaCEPqaUQTr^coYr_*5br_NMir_`Pmr`8nu
r`T,%pf[T"r`T,#r`8nrr_`Ykr_NMfr_32]r^d#YqaUQRqa?!(V+#r(JOP,YJOP,YJOPPeqaCEPqaUQT
r^coYr_*5br_NMir_`Pmr`8nur`T,%pf[T"r`T,#r`8nrr_`Ykr_NMfr_32]r^d#YqaUQRqa:HR7=dmY
7Cbka7/fXP7fGpW8Gc$Y9E%Zb:]=2i;>XAm<r6"u=o2Ct=oMV(=o2>#<r5nr;>sDk:]=)f9`%H]8H)-V
7fGjR7+4SU7=dnb7K,gV8H)3[9E%Zb;#X>k<;otu>lJ+0@fC*@D>nMRGQ*!hJGtE)NrG4@SGo8^WW'4&
\Gj2@`;[pYci2Jog&Bh,ir8*>l2L,MnG`%Yp\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>
hYu7.ec*noao96X^&GM?ZMpm'U]-h`PQ$XBMZ/2+IK"KjEW0kTCAq`B@/aI2=T2>";uTVm:B!rd9)_E]
8>AY*7ZU%97JfOT7n3PLr^d#[r_!/_qb@&dqbmDor`/quqcNi$r`o5%r`fA,qc`u$r`9#"r`9"rr_`Yk
r_<Acr_*5_r^m)[qa^WTqaH'*rC2?-]12ZdqaUQTr^d#[r_!/_qb@&dqbmDor`/quqcEi%!Er\+>khM%











>Q.n)>5hY'<rQ2"<rQ"r;>sDk:&[ic9E%Q_8cD9X8,c!T7=dqU7Y+%l7f,XO7fGpW8H)3[9)_K\:&[ud
;Z9_r<W6%r=T2M'>khM%>Q.n)>5hY'<rQ2"<rQ"r;>sDk:&[ic9E%Q_8cD9X8,c!T7=dq)7Y+$[7Y+$[
7Y+$[7ZBn77JfRR8,c'Y8cD?]9D_H_;#=/i<rQ+u<r6"u>5he%>5hb*>l._(=T2A#=8l8";Z9Pm;#X2g
9`@]a9)_E]8GbpV7f,UT7RhquJO[1>qaLBOr^ZrYr^m)]r_*,_r_WJir`9"ur`8nur`];+pfdZ$r`o>(
r`K/#r`B)"r_i_mr_WSgr_3;ar_!/]r^coVr^QcRdmemXJO\Ndr^d#[r_!/`r_EGhr_resr`K/*ra>_8
rbDFLrc.p^rd=]rreg]8rfd>PrhKImrj)O5rk8<LrlY5drmh#$rndY6roX4ErpKdTrq$-`rqZQirr)iq
j8\0>rr2oqrqcWhrqHE`rpg!Urp'LGro="7rn@A%rm:Yfrl+lOrji$7ri?$orh'1TrfI,;re(3"rd+Qa
rbqdPral(<ra5Y.r`K/#r_i_lr_NMer_*5_qambXJOkhmr^Z`S!D,i_8cDB[9`@fd:]=2i;Z9Vo<;9Sj
>Q.q'>l.h+>Q.n,>Q.b(=8l>$<;ohq;Z9Ml:]=,g9`%K[8V'G)8:a=D8H)-S8H)3[9D_E^:B"&g;#XAl
;uTbk=Sc5&>?h)4pg!]%r`fA,r`fA(r`B)$r`&kqr_i_lr_NMgr_32^qal?0a@LkQk=GSBpdkBUr_*,^
r_EGgr_WSlr_reqpfR;qra#;(qd'2*r`oG,r`K/$r`K/!r_reor_WSir_EGdqb-fXJOl;%JOk>_JOk>_
JOk>_NCa%=pdkBUr_*,^r_EGgr_WSlr_reqpfR;qra#;(qd'2*r`oG,r`K/$r`K/!r_reor_WSir_EGd
qb-fXp.0a*JOm=Br^Z`Sr^m)^qb6uar_NMir_i_or`&Yppfm`'pg!]%r`fA,r`fA(r`B)$r`&kqr_i_l
r_NMgr_32^qanq$JOk>_i^j&?r_!/_r_3;er_`Ymr`9##r`];.raPk<rbVRPrc8!ardOj!repc;rg!JT
rh]Uprj2U7rkJHOrlY5ermh#$rndY7roa:GrpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWhrqHE`rpg!U
rp'LGro="8rn@A&rm:Yfrl4rPrji$8riH*rrh'1VrfR2=re19#rd4Wcrc%jRrb)4@ra>_1r`T5%r_reo
r_WShr_<Acqb*n\JP(tqr^luZr^d,`9)qWa9`%Q`:]=2i;>sMn<W6%u=Sl7u>lJ%%?N+70?N+7->l.\'
=T2A#<W5qr;>sDk:]!lc9`%J69(Y`,9"R^p8c)-Z8cDB^9`%Q`:]=2i;>sMn<W6%u=Sl7u>QA%1?![,0
ra#M0ra#D+qcWo#r`9"ur_renr_WSiqb@&`qb)K4a@_"Uk=Y_Fqb$iZr_*5aqb@&cr_WSkr_rerr`9##
qcWf$ra#2'ra#M0ra#D+qcWo#r`9"ur_renr_WSiqb@&`qb)K4S4\?)JP(JcJP(JcJP(nor^luZr^m)^
r_32`r_NMir_`Ynr`/qur`K&#qcs,+oj7W'ra,S0qcs#$r`K/#r`/qrr_`Ykr_NDcr_32^p.Bm.JP*IF










r^luZr^m)^r_32`r_NMir_`Ynr`/qur`K&#qcs,+oj7W'ra,S0qcs#$r`K/#r`/qrr_`Ykr_NDcr_32^
b"@4WJP+oor_*,^r_EGhr_i_or`B)%r`oG1rac"@rb_XRrcA'crdb!$rf$i=rg3VVrh]Uqrj;[9rkJHP
rlkAgrmq)&rnm_8roa:GrpKdTrq$-`rqZQirr)iqj8\0>rr2oqrqcWhrqHE`rpg!Vrp'LGroF(9rn@A'
rm:YgrlG)Srk&0;riQ0srh07Wrf[8@re:?&rd=]frc8!Vrb2:BraGe5r`fA)r`/qsr_i_lqbR)`WD%k:
O%fOGr_3,^!)<>cr_NMjr_r\nr`9#"r`]2'qd'2-ra>_4qd08/ra>V0ra#D*r`];&r`8nqr_i_mqbR2d
pe?<5pIp-3]1i2sr_3)]qbI,dr_`Ynqc*Pqr`B)&qcir'!+#\4?N+@3?i+1/?iFI1?N+7->Q.h*=8l7t
<;oep;>X/g:A@P79Zp+\9]o+K9E%W[:&@]b:]=5j;u9Pn<rQ2">5MP$?2e10@/aO1?N+=2@/F:0?2Ik*
>5hV&<r5kq;Z9Pj:]=,a9n?!19S#lg9S#lg9S#lg9T;aF9E%W[:&@]b:]=5j;u9Pn<rQ2">5MP$?2e10
@/aO1?N+=2@/F:0?2Ik*>5hV&<r5kq;Z9Pj:]=,a:&.J69S#mJ9`@]a9__?Z:B"&g;>sMk<;oqt=8lD#
>Ph_*?N+@3?i+1/?iFI1?N+7->Q.h*=8l7t<;oep;>X/g:A@Q.9S#lg9]AbF:&[rc;#XAl;uTer=oM\*
?iFL5Ac?BBDuOeVFoHdfJGt9%NrG4@Qi<ZWVuEgt[Jmf;_#DFSbl5ugfDaP(hu;^9kl0lHn,DkVoD\L`
q>U6irVlfVs5X.Yrr2lqqYp9hp\sganc&"Vli-,IjSn*:h#>t*d/M8ga8WmR]Df8<Y5YC!U&LM[Pl?aC
L]2r*J,X]lFT-4XD#S/JB)Z3;?N+70=oMM%<W5qr;Ys:f:Ou<&:]=,g:]=,g:B=9g!)WYlr_i_or`/qu
r`/hur`fA*r`oG.ra5P1ojRi-raG\3ra5Y1r`oG+r`fA*r`T"rr_reor_`Phr_EGgr_A#?rD.u?]2/E$
r_NMgr_NMir_`Ymr_rerr`9"uqcWo&r`];+ra#M1rEoY6@.dt-@/aU3@/aO4?2e+.>5hb*>5h\"<W5qr
;Z9Pj;#X5h:]=+?:XMsh:ZkOQ:B"&g:B"&g;#X>k;Z9Vo<W6%u<Voqu>Q.h*>lJ%.?i+7(@K'[6@JaI3
?iF@1>lIq+>Q.h*=nl"r;uT\o;>X2h:B"&g:4Z3;:Ou;m:Ou;m:Ou;m:Q80L:B"&g:B"&g;#X>k;Z9Vo
<W6%u<Voqu>Q.h*>lJ%.?i+7(@K'[6@JaI3?iF@1>lIq+>Q.h*=nl"r;uT\o;>X2h:B"&g:'"-dJPUhm
\PN3"r_NMgr_NMir_`Ymr_rerr`9"uqcWo&r`];+ra#M1qdB)*ra>_6qdBD1ra#M.r`];*r`];(pf7;l
r_i_mqb[8er_NMgdnbNjJPY9$qb[8ir_rerr`B)%ra#M1ra>_;rb2:IrbqdXrcnElre(3*rf@&CrgNh[











rhoaurjMg<rkSNRrlkAgrn.5)ro!e:roj@IrpTjWrq-3arqZQirr)iqj8\0>rr2oqrqcWhrqHEarpp'W
rp9XJroF(:rnRM*rmC_irlP/Urk8<?rilC$rhBC^rg*PFreg]/rdauprc\9]rbh^Nrb2:@raGe5r`oG+
r`K/#r`/qsUJcY@O&GjPqbdGn;ZKbq<;ons<rQ1t=Sl>"?2e4.@/aX"A,]s7@/aL0?2Ik'=T2D$<rQ+u
<;TVn;Ys=B;Z0LE;S,j(;>X8j;uTbq<W6%u=8Q+s>Ph_*?i+71@K9p'A,]s7@/aL0?2Ik'=T2D$<rQ+u
<;TVn;Ys=B;UJBn;WgsT;>X8j;uTbq<W6%u=8Q+s>Ph_*?i+71@d.D%@f'R4?Me%->Q.k(=T2D$<rQ+u
<;TVn;Ys=B;Pd9B;Lq_s;Lq_s;Lq`*;Ys>g;Z9Vo<;ons<rQ1t=Sl>"?2e4.@/aX"A,]s7@/aL0?2Ik'
=T2D$<rQ+u<;TVn;Ys;l;Gr'DJPs$Vqbd5gr_reqr`/qur`Au!qcir'ra5P1raP,%raPb4ra,J-qcir"
r`B)"r`/qsqc!Jlqbbg?JPq%shbsGQr`/qur`K/'r`oG0raGe9rb2:Grbh^Urce?grdb!%reg]:rg*PR
rhBCkrilC2rk/6HrlP/armC_trnIG1roF(Brp9XQrpp'\rqHEfrqcWmrr1sXj8],Xrr)imrqQKerq-3\


rpTjQroj@Cro!e2rn7;!rm(McrkeZJrji$4ri5snrgj%Trf[8=reCE(rdOilrcS3Zrb_XLral(=qdBD/
r`];'r`B)"qc0UpJQ.\0r_rSk!EE,"<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:
A,]p9@/aO4?N+7->5hY'=oMP&<rQ*M<:Nq=<4c-/;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@f9j8
AH$0;AH$0;AH$*<@fBm:@K'[6?iFC2?2Ih)=T2J&=T2A#<In,g<.S$3<;ohk<;ons<rQ2"=oMP#>5hh,
?N+=2@/aU6A,]s4AH$0;AH$0;AH$*<@fBm:@K'[6?iFC2?2Ih)=T2J&=T2A#<In,;<.S#"<.S#"<.S#"
</jlV;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:A,]p9@/aO4?N+7->5hY'
=oMP&<rQ+j<.S#"<4Q!-;ts>k<W6%u=8lA%=Sl;$?2e10?iFI4@K'd9@eaL5Ac$$;Ac$$;A,]s:A,]p9
@/aO4?N+7->5hY'=oMP&<rQ+><.S#"<8pmV<W6%u=8l>$>5he(@/a[8Ac?HDD>nMRFoH[cIf=ruL]352
P5^jJSc5GaX8]@&\c0>B_Z%^WcMl8kg&Bh,i;Vj;kl0rJn,DnWo`"Uaq>U6irVlfVs5X.Yrr2lqqu6Ej

p\sgao)A.Xm/H8Kk5O<<h>Z.-e,I_nbl5Q[_#D"GZMps)VZ*7fS,S]PO8b%9LAl`&I/\EjErL%WDZ4DM
B`;WC@K'[6?iF@1>lIt,>,GGR=bBiX>$Cl.qcj&+qd9>1qdKJ7rakt=rb2:Frb2:Dqe5tCrb2:Frb)+?
qdfS4ra>_4qd0/(qc`btr`F_SrE4\SY?Ca+qcj&+qd9>1qdKJ7rakt=rb):G!GQ9IB`;ZAB`;`FB`;`F










BDZ<<AG]g7@/aO1?Mdt(>528"=FjW&=b0`1=o2D">Q.t+?iFI1@K'g:Ac$*=B`;`FB`;ZAB`;`FB`;`F
BDZ<<AG]g7@/aO1?Mdt(>528"=FjVO=b0_,=b0_,=b0_,=b0`Q>5MP'?Me+/@/FC3AH$0;B)ZKCC&VfF
BDZBAC&VfFC&VcBB)?-9@K'[6?i+1,>PhV!=oMM(=]p;YJQ]*Xqc`l$ra,J/ra>V3rac">qe#h@rb;@F
rb)+Arb;@Frb;@Eqe#_9qdKJ3ra5P/qcir$pf[Sudoh6)JQ_);qc`u'r`oG.ra5Y4raGe<rb2:Grbh^S
rc8!`rd=]qreCE1rf@&DrgNhZrhf[srj)O9rkSNOrlkAfrmUl#rn[S3roX4Drp9XRrq$-]rqHEfrql]n
rr1sXj8],Xrr)inrqcWhrq-3\rp]pSrosFFro3q6rnIG%rm:Yhrl+lQrk8<;riZ7"rh9=^rg<\Hrf$i5
rdt-!rd=]grcA'Wrb_XLrb2:Brac";ra>_4ra,J-WEb!ZO'MZgqcs&)qHa)-qdB;1rac">qe,nArb:h9
rbMCGqe>q@rb)4Arabn8raGe6qd95+JR%_MJR#flr`f8)oj.Q(qdB;1rac">qe,nArb;=Go4n8?qeH"B
qe5tAral(>qdTP5ra>V1qd"bX`E[t!k?S!jqcrf"ra5P1qdTP8rakt>rb2:FmqVi;qeH"Bqe5tAral(>
qdTP5ra>V1qd"bXR9Y;JJR!b2JR!b2JR"1>r`f8)oj.Q(qdB;1rac">qe,nArb:h9rbMCGqe>q@rb)4A
rabn8raGe6qd95+o3?iOJR#`jr`f8)oj.Q(qdB;1rac">qe,nArb:h9rbMCGqe>q@rb)4Arabn8raGe6
qd95+a'=1#JR%2>ra#M0ra5Y4raPk:ral(BrbDFLrbqdWrc\9grdXp!re^W6rfI,Hrg`t]ri,n"rj2U;
rk\TQrltGirm^r%rnm_7roa:GrpB^Srq$-]rqQKgrql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pSrp'LH
ro3q7rnRM'rmLelrl4rSrkJH?rilC&rhBC`rgNhMrf@&:re19%rdXolrcS3]rc%jSrbVRIrau.@raYq:
raDR0JRFOHpg<r,rF#M2qdfS8qe,nCphTkFrbhUMqeZ.Hrbh^PqeQ(Drb)4BqdoY8qdKA0oj<8XrEt1a
]3tD@pgEu-qdfS8qe,nCphTkF!,_gTDYn;JD#8)KDZ4MMC\qlGBDuN?Ac$$8@JaI*?\)V4@"D_K@/++(
@/FC0AG]s8BDuZ@C]8/LDYn;JD#8)KDZ4MMC\qlGBDuN?Ac$$8@JaI*?\)U]@"D^:@"D^:@"D^:@#\Rh
?he%+@JaU4Ac$->CA;TDD#S>LD>S/HD>nGPD>S,GCAqlFB)?0:AG]g4@.dk-?snOnJRH#rpg<f(qdKA4
qdoY;rbD4DrbVROqec4Hqec=Mrb_OJqeH+Crau%=qdfS4qdB)(dpR`7JRIACraGe8raYq=rb)4DrbVRO
rc%jXrc\9crdXp!re19/rf@&BrgNhXrhBCmrilC0rkJHMrl4r`rmLerrnRM1ro3q@rp'LMrp]pYrq-3b











rqZQjrr)iqj8\0>rr2oqrql]krqQKcrq$-YrpKdOroj@Aro!e3rn%.urm1Sbrl"fNrji$7riZ6trhBC`
rg3VJrf@&9reCE(rdXoord"Kbrc7mSrbVRLrbDFGqe,n?WF^WlN+N!#ral(@!G?$FBDuNBBDuTDBDZEB
C]8/LDZ4MPDtn;NEW1"OEW1"XEVOMPDZ4MPDZ4JOC]8&IB`;ZDB_uE@BDZ9>Aq=OiAV"F&Ac?<@Ac?<@
BDuNBBDuTDBDZEBC]8/LDZ4MPDtn8OE<1'!rc7[Orc8!Xpi-4Mrb_XPrbVRLrb;@Frb)4Dqe#h?qdob=
JS!,<JS!nRrau.@rau.Brau.Brb2:Dqe?%FrbVROrb_XQpi-4Prc7[Orc8!Xpi-4Mrb_XPrbVRLrb;@F
rb)4Dqe#h?qdob=JRtQeJRsCDJRsCDJRsCDMIld!ral(@rb)4Brb)4Drb)+BrbMLLrbh^PrbqRNrc.pX
ol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@rb)+>rau(>JRsCD[UoGMral(@rb)4Brb)4Drb)+BrbMLL
rbh^PrbqRNrc.pXol9tOrc.^Prbh^Prbh^OrbMLIrb2:Drb21@rb)+>rasMgJRsCDj^nF'qe,nBrbDFJ
rb_ONrc8![rd"KjrdXp!reLK1rf@&Brg3VUrhBChriZ7,rji$Crl"fWrm1Smrn%/*ro!e9roj@HrpKdT
rq$-^rqQKgrql]nrr1sXj8],Xrr)inrqcWhrq??`rpg!Vrp0RIroF(;rndY,rm^qorlY5[rkeZHrjDa/
ri,mmrh'1Zrg*PGrf-o6reLK(rdXoprcnEcrcS3[rc%jTrb_XNrbMLJVJ1TqK4t@$C&i#GC]8)DD>nGP
DuO_QErL.ZErL1[Fo-:XF8L(YFoHL^ErL.WEr0hTDZ4MPD#S;NCAVfGCA;NBBRsmrBn:!%C&VlEC]8)D
D>nGPDuO_QErL.ZErL.\FTHW-qfM^VqfMg[rcJ-[rc@sWqf)OPrb_XNrb_XLqeQ1GphB_@JSEMGJSEkQ
rbD=GrbD4Frbh^Rrc%aTrcA'ZrcJ-^qfM^VqfMg[rcJ-[rc@sWqf)OPrb_XNrb_XLqeQ1GphB_@JSCrp
JSB[LJSB[LJSB[LJSG*uqeQ1Gphg"JrbqdTqf;[Wrc8![rcS*[qfDXVrcS3^rc8!Zqf;RQrbh^PrbVRN
rbD=GrbD4Brb)=HBn9uLBru+KCAVfGCA;ZFDZ4SRE;O\TF8g4ZFT-F[FSg.VFT-F^FT-=[F8L"TE;jbS
D>nAND>n;IC]8)DC&VepBn9uLC#s(+CAr#JD#S;NDuO_TEW1+[GQ)jdI/\ToJc:H(MZ/V7OoC[GS,T&Z
V#I@mYPts/]Df\H`r=-[d/MSpf`'b,iVqp;kl0oIn,DkVo`"R`q#:*gqu6Qnro=%=s8N#srVl]nqYp<i
pAX^`nc&"Vli-/Jjo4<>hu;@/f)F(rbl5]__u@@K\,NZ3X8]!qUAgb`RJrKNOT(7=MuJD/K)U9!IK"Ql
GlDjbFT-=XE;ORNDLl\dDZ4MPDY\/JD>S5JE;O\QF8g@^GQ)dbGPHF^GPcR_GPcX^GQ)dbFoHR]F8L"T
E;OPGD>nGPD1QU'DLl];DZ4MPDY7lDDYnDMEr0qWG5c^bG5c^aGl2gcGPcR_GPcX^GQ)dbFoHR]F8L"T










E;OPGD>nGPD1QTPDLl]gDZ4MPDY7lDDYnDMEr0qWG5c^bG5c^\GlDpaG5c^_Gl)^aG5cX`G5H@XEr0hQ
DY7lGDZ4L(DP_6%DLl\VDLl\VDLl\bDZ4MPDY7lDDYnDMEr0qWG5c^bG5c^\GlDpaG5c^_Gl)^aG5cX`
G5H@XEr0hQDY7lGDZ4JRDJk#CJSr#9rb_XPokjSDqf)FQqfDa[rce?brce-^rce6_rce6aqfi$_rcS3`
qfDXTqf)FMokj\Grb^,%JSp$VibnX3qf)OTrcA']rcnEgrdFcqrdt-&repc9rfI,ErgEbWrhBCiri?%'
rjVm?rkn`UrlkAhrmh#%rnm_7roO.Drp9XQrpg![rq??erqcWkrr)iqj8\0>rr2oqrquclrqZQerq-3\
rp]pSrp0RGro3q7rnIG)rmUkmrlY5[rkSNFrjDa0ri?$rrh07]rgWnOrfR2@reg]2reCE'rdautrd=]l
rd+Qgrc\9`UND'/O*(/<rcA0`Fn^%XGPcRYGlE$gHiA?gIK"WkIJA3hIJ\EkIJA-fGlE!fGl)[`GQ)aa
G5HF]FSKp.FT$<4FLuYiF8g:SFoHU^G5-=]HN&9jHM`*jHi\VBqgJ6erdFZkrdFQfrcnEfrcn<`rce?a
rc\0]rcIpVJTT:]JTU'spiHFVol^7Xqf_aZrd+Qjrd+Hird=TkpjE'hqgABkpj2pard"Kfqf_s_rcS3`
qfVm[piD".V0%91JTQHbJTQHbJTQlnpiHFVol^7Xqf_aZrd+Qjrd+Hird=TkpjE'hqgABkpj2pard"Kf
qf_s_rcS3`qfVm[pi?IXFFeObFLcMgF8g:SFoHU^G5-=]HN&9jHM`-iI/A?eI/\QkI/\QhHN&0gH2`'c
G5c^bFoHR]FoHLXF455^FFePkFT-F^GQ)jdHN&9jI/\WpJGt-!LAm#.MZ/\9P5^^FS,T#YT`1kgX8]@&
[Jmc:_#D@QbPoiee,Itug]$+0j8S3?li-;NnG`"Xp&=[aq>U9jr;QZoro=%=s8N#srVl`oqu6HkpAXaa


















o`"@Zmf)SPkPjQAi;VR3f`'D"d/M8gao9-U^&GP@Z2Up*WrAgnU&LY_RJrNOP5^OAN;eb7LAll*KDpE#
J,XorI/\JcH@^C'HM`!eGl2jcH2DpeHi&3iIK"]pIK"]mJ,=cqJbsupJ,=cqJbsupJ,XolIK"WkHi&-a
H2`'cH%C;?H@^CSHM`!eGkcR]HN&9gI/\QnIf=cpIf"WlJ,k-$JV!]Kqg\Knrdjrsqg\TopjN-hqg83d
pj)j`qg!a=d<^@ikBd#Nrcn3`qg/6gqgABkrdOiprdO`oqgeZsqgeQnqgeZsqgeQnrdO`mrdFcnqg83d
pj)j`qg!a=V0[]=JU2lnJU2lnJU3<%qg&0cpj)a_rd4NirdFcprdFcpqg\Knrdjrsqg\Knrdjrsqg\To
pjN-hqg83dpj)j`qfr3gH@^BnHF\A!H2`'`H2DpeHi&3iIK"]pIK"]mJ,=cqJbsupJ,=cqJbsupJ,Xol
IK"WkHi&-aH2`'cH..(jH@^CtHN&9jI/\ToJ,XutKDpT(LAm,1NW,"<P5^dHRJrfWU&LkeWrB."Z2V94
]`,bHao9N`d/MPog&Bh,i;Vg:kPjiImf)_To`"O_pAXpfqu6NmrVlfVs5X.Yrr2lqr;QTmqYp6gpAX^`
nG_kTm/H5Jjo46<hYu7.fDa1scMl#d_u@IN]`,8:Z2Up*VuELkT`1P^Rf8WPP5^RBO8b(:MZ/G2K`6W'
K):,uJ,XtqIt<*1J,=]lI0"eG!.OoqqgSNprdXotqh"ftqh"g$re(*$re:?)qh+m$re:6&re(3(re(3%
rdb!!rdsoqrdO`mqgSNmqgO*GrI9BJ]79^,qgJHmrdFZmrdautrdaltrdaltre:?(rIb3)K`6])K_pE$
K`6]&K`6W'L&Q`(K)U<"Jc:8rJGt#pIJ\KmIJ\JEJ'iasJ*2=YIf"QmIf=cmIf=lsJ,XuqK)U;tK)UK'
KDU?$L&Qc&KDpQ'L&6Q&KDpT(KDpK%JGt-!K(slqIf"QjIf=cmIY!!FIt<*#It<*#It<*#IuSsTIf"Qm
If=cmIf=lsJ,XuqK)U;tK)UK'KDU?$L&Qc&KDpQ'L&6Q&KDpT(KDpK%JGt-!K(slqIf"QjIf=cmIK=qJ
















































JU`6#\UXL*qgJHmrdFZmrdautrdaltrdaltre:?(qh4s&re10$re19)qh4s$re:?(rdt-"rdk'#pji?m

qgJ?jrdFZmdslpuJUc[/rdautrdb!!rdt-%re19,re^W4rf@&@rf[8HrgEbWrh07drhoaurilC.rk/6F
rkn`Yrm(Mjrn%/'rndY5roO.Crp9XPrp]pZrq69brqcWkrqucorr1sXj8],Xrr)iorql]krqHEcrq-3[
rp]pTrosFFroF(:rn[S-rm^qprm(Markn`Mrji$:riuI*ri5sqrhBCbrgs+Xrg3VLrf[8Brf@&<rf$i7




reg]2reI8'JVK5?re:?)re:?+!JcF1L]3&-L]3&-L\Q]&M=lc*MuJ\.MZ/P5MZ/S6MtMu,M>2o+LAlu'
LAlu*L&Qc)Kn5!WL4P)kLAlo+K`6])LAlu-LAlu-LAlu'M#3&%MZ/M6Muelronra,reg]6repH,re^E+
reCE-pkJd'qh>$&re5oXd>!4,kD&tire19)reCE-reCE-reCE-pk\g(onra,rf$N-repc5rf$i7onra*
reUH-reCE-pkJd'qh>$&re5oXV1sPUJVJ`1JVJ`1JVK/=re:?)re:?+reLK-reLK-reL9)qhb!'repc7
onra,reg]6repH,re^E+reCE-pkJd'qh>$&re1B-L4P)1L:N'<L&Qc)L&Qi+L]3&-L]3&-L\Q]&M=lc*
MuJ\.MZ/P5MZ/S6MtMu,M>2o+LAlu'LAlu*L&Qc)L!td-L4P*:LAlu-M>iD3MuJ\7NW,"<OoCOCQ2[0M



Rf8oXT`1\bVuE^qY5Y^*[Jm`9^])1NaSsKadJhYpgA]n,i;Vg:kPj`Fmf)\Snc&1[p&=^bqYpBkr;QZo
ro=%:s8N#sr;QTmqYp9hpAXaao)A.Xmf)MNkl0`DiVq^5g]#e'e,I\mbPoN\_>_.I\c0&:Z2Up*X8]$r
V>d1fTDkA[Rf8]RQN!-JP5^U@O8Fp3N.HqHN;/;3N/Raqqht?1oo8s3qi:?1rfHf6rfH]3rf6u=oo8a*
repc7regK/JW0PdJW.*tpl#-1qht?1oo8s3qi:E3!KW<@OS+\6OReJ3NrG+4NVJJ3MuJ\7MYN*\N7!T8
N9#rmMuJ\4Mu/J+NW,"9NqJJ4OS+\6OReJ3NrG+=NVJM.N;eb7N;e_0Mh-h`N.Hq=N.Hq=N.Hq=N/ESh
MuJ\4Mu/J+NW,"9NqJJ4OS+\6OReJ3NrG+4NVJJ3MuJ\7MYN)1N/W=HJW.$rpl#-1qht?1oo8s3qi:?1
rfHf6rfH]3rf6u=oo8a*repc7regK/du8j:JW/KFrf-o;qiC`=rf[8Frg*PNrgNhVrh'1`rhTOkri?%$
riuI2rji$Ark\TRrlb;ermUktrnIG/ro*k=roj@HrpKdTrpp']rqHEerqcWkrquZmj8\';rr2oqrqucl
rqQKerq??^rpg!Vrp9XKroa:?ro!e4rn.5#rmC_jrlP/YrkSNHrjr*9rj)O,riH*urhf[hrh9=`rgs+Z
rgNhQrg*PJqih#BqiRk>JWPGE!0I2@rfI,Aqi^rCqih#Bqih#Eqiq)Drg*5Arg*PIqiq)FrfmDGrf[/B
rfmDGrf[/@rf;VlmZ<!]XH<FBrfI,Aqi^rCqih#Bqih#Eqih)E!L&`HQM$LAQN!*FPl?sIPl?mGP5CIB
Pl?mGP5CC@O+ED0OF`MGOT(=?OT(C>P5^^CPQ$aBPQ$jEPl?mGQM$LAQN!*FPl?sIPl?mGP5^[EPQ$gG
PQ$aBOoCDmOHtuZOF`LEOF`LEOF`LEOT(@@O8b7?Oo(=@Pl$[DP5CIBQ2?gFPQ$m@Pl@!JPP^UDQ2[$I
PQ$aBPQ$gGPQ$aBOoCF2OF`LEOK+EAO8b7?Oo(=@Pl$[DP5CIBQ2?gFPQ$m@Pl@!JPP^UDQ2[$IPQ$aB




PQ$gGPQ$aBOoCE[OF`LEOQ)B$Oo(=@PQ$gGQ2[-LRf8fUT)PA]U&LecVZ*OnXT#F&ZMq61])KDB_#D=P
ao9TbdJh\qf`'b,i;Va8kPj`Fm/HJQnc&+YpAXgcq#:-hqu6Qkro=%:s8N#srVl`oqu6Ejq#:$eo`"F\
n,DbSli-/Jjo49=hu;F1g&BS%d/M;hbPoHZ_>_4K]Df>>[JmK2Yl:g)X8]*tVZ*@iUAgkcT_kAYSbnqS
Rt7&iS,SrWS,&KQRerTORf8`SR/<?LSGSfNSGSfQSGSfNSGSfQSGo#WRf8]RRJ<6MS,SlUS,SlUS,Sk-
S,Jh-S%G0hSGo#QRerTORf8`SR/<?LSGSfPS,o.Mqj[JQqj[ANqj[JQrgWnUrg<\QpmV2OrgNhUrgNhU
rgJD-d@5]VkF;I@rgW\Oqj[JOrgEbQqjRDPqj[ANqj[JQqj[ANqj[JQrgWnUrg<\QpmV2OrgNhUrgNhU

rgJD-V43%*JX_4[JX_4[JX_Xgrg`tWpmV)LqjRMPrg<SOqjdPQpmh5NqjdPQpmh5NqjdYTrgNhRrgEPM
rgWnUrgWnUrgWnU!LoR0Rt7'>S,SrWS+rHLS,8ZRRJrTNRerWPS+rNNS,8`QS+rNNS,8`TS,SlUR/WNK
Rf8fURf8fURf8fURa[aWRt7'jS+W<NSc58YT`1YaUAgqeVZ*OnX8]:$Yl:s-[Jm]8]DfSE_Z%LQbPofd
d/MVqg&Be+hu;X7jo4NDli->On,DnWo`"Uaq#:*gqu6NmrVQTSs5<qVrqlZnr;QQlq#:$eo`"I]nc&"V
m/H;LkPjTBiVqa6g]#k)eGdkpcMkrba8X!U_#D%H])K5=[JmN3Yl:g)Xo>@"W;ELlVZ*FkU].!\Tn/nr
U&L_aTDkJaTqV4Srh'1`rh07bqk="`rhK@brh8nWrhK%Yrh9=cqk="`qk3q\rh9=cqk="^rh'(\JYE%9
JYBTIrh07_rh/qXrh'1`rh07bqk="`rhK@brh0=do:l5ZntQ,WrhB:`rhB:_rh'1`rhB:`rh07_qk/M6
d@l,bjIuRGrh'1_oqDAWrh9=arhB:`rhBCeqkF(`ntQ,YntQ,WrhB:`rhB:_rh'1`rhB:`rh07_qk/M6

V4iI6JY@XgJY@XgJY@sprh07_rh/qXrh'1`rh07bqk="`rhK@brh8nWrhK%Yrh9=cqk="`qk3q\rh9=c
qk="^rh'(\!MQ3<Tn/oGU&L_aTDkMVU&L\`U&L_aUALY`UAgqbUAgkWUAgqYUAgkcUALY`UALV_TDkP`
UALY`T`1S\T[TTcTn/omU&LecU].+hVYd:jWW&psXo>O'Yl;!.[f3f9])KAA_#D7N`r=*ZcMl5jeGe,"
g]$+0iVqp;kPjcGm/HJQnc&.Zo`"Uaq>U6fr;QZlro=%:s8N#prVl`oqYp9hp\sjbo`"F\nG_hSli-,I
k5OH@i;VR3g]#e'e,I\mcMl#daSs*V_Z%=L^AbbD\c0#9[/RB1Yl:j*Y5YR&XT#:"WrAujW.Cn+W;`^o
VZ*IoW2K]pm&0`Xql'Lnj/;mTrhoapql'Lkri#^lrhf@dri#gorhfRjJZ/OGJZ-)Wrhoamrhoaom&0`X
ql'LnqPWVVri#gori,dnrhf[nqksFjor%efrhoamqko"DdAVVpjJ`'Urhf[mri#1]qkj7hri+qUri#go
ri,dnrhf[nqksFjor%efrhoamqko"DV5SsDJZ+-uJZ+-uJZ+I)rhoamrhoaom&0`Xql'Lnj/;mTrhoap
ql'Lkri#^lrhf@dri#gorhfRj!N;rJW.CnUW;`^oVZ*LmW9gGZVYd=kWT0oUW;`^oWV`XnVZ*OkVuERd

VuEXoVuERjVphSqW.Co&W;`dqWrB'uXT#@$Y5YX(Yl:s-Zi7B3\c05?^AbnH_>_@OaSs?]cMl/he,Iqt
g]$(/i;Vg:k5OTDli->OnG`"XoD\F^p\t!fqYU3irVQTSs5<qVrqlZnr;QQiq>U-fpAX^`nG_nUmf)PO
lMg#HjSn-;hu;C0g&BS%dJhMlcMl#dao9<Z_u@LO^](tH]`,PB\c0,<[f3]6[/RE2ZMUo%Y^s$;YktX'
YQ:r2qQK[uriuI,qm$.)pp'h&riu@)qlfn$riuI.qm$%&riu@)riu.#qlg"%pof7QrNLjW\?Pk6ril1$
posb&ril:)ril1&ricC-!O8p,YktX$Yl:p,ZMUp(Yl:p)Yl:p#YktX'Y5#2OYgK\+YiN%cYPtd$YP>@$

Z2V!)Z2V!&Z2V!,Z2:d&YPYR'Z2V'+Z2:d)Z2V!,Yl:p#YktX'Y5#2OYbeRTY^s$0Y^s$0Y^s$9YktX'

YkYEsYl:p,Ykt^)YkYL&Yl:p)YktX$Yl:p,ZMUp(Yl:p)Yl:p#YktX'Y5#1$Ycr\_JZuSeqlg"'pojIs
riuI,qm$.)pp'h&riu@)qlfn$riuI.qm$%&riu@)riu.#qlg"%poi/NJZs^0hm!*bqm-4-rj;[4rjMg8
rji$?rk8<FrkJHKrkn`TrlG)^rm(MhrmC_rrn.5)rnm_7roF(BrosFJrpKdSrp]pZrq69brqZHfqu$Hl
qu5XUi;`]Rrr)ioq"k!arq??`rpp'XrpTjRrp0RJroO.?ro*k6rnIG*rmh"srm:YjrlkAbrl>#Xrl"fQ
rk\KHrk8<Drjr!;rj_X1WO@AdK=1fg[JdN([eR90[emK3[f3c8[e7'-[f3]6[f3]6[f3]3[f3]6[f3]6
[f3]3[e7%Z[e."Z[]d.:[IUd$[JmW3[JmW6[fEi;[^Pk:rjMg6rjMg6rjMg6qmQL3rjMg6rjMg6qmQ1*
J[WY.J[X=AqmH"'ppL+0qmHF3rjVm8osOe-rjDa6rjDa6rjDX3rjDa6rjDa6rjDX3osK@ZS@4!WJ[U-<

J[U-<J[U-<qmH"'ppL+0qmHF3rjVm8osOe-rjDa6rjDa6rjDX3rjDa6rjDa6rjDX3osOM%J[U-<Xg\,7
o!\>$rjM^3rjMg8rjML-rjMg6rjMg6rjMg6qmQL3rjMg6rjMg6qmQ1*b-ll0J[XRHqmZI4rjhp;rk/6D

qnN-HrkeZQrl+lWrlb;crm1SjrmUksrn7;+rnm_6ro=">rosFJrpB^Rrpg!Yrq-3_rqH3arqucoq#9=R
h>dKRqu-EhrqcWgrq??arq$-[qsaUPrp0RHroX4@ro!e4rn[S+rmq(urmC_lrm1SfrlY5^rl4rVrl"fQ
rk\KIqnM^8WP!epN4f/'rk/0@!5&$=rjhU2rk83Aqn)X7pq-=4rk&0Brk&0Co"+h2rk/6Brk/6Bqn2g>
J\:roJ\8M*rk8<Dqn)X9rjhU2rk83Aqmuj>q7?@5pq$I:rk/6Brk7m6rji$@rk&0Brk&'?qn7QndCb%C
jLkK*rk/-?pq6U:o"+h6qn2g<pq$74pq$I:rk/6Brk83?pq$I8rk/6Brk/6Bqn2g>J\7hlJ\6QHJ\6QH
J\6QHMS/r%rk/-?pq6U:o"+h6qn2g<pq$74pq$I:rk/6Brk7m6rji$@rk&0Brk&'?qn3$C]Rd_H]XGKP
^&G\A]D0&<\am?2^&,J>]D/u4]D/u:]DfJB]DfM7])K8>]`,PB]`,P?]_fCk]Rd_H]]-Ts^&GeA_#D1L
_Z%LQ`W!mVao9K_bl5rfd/MGleGe%uf`'_+hu;R5jSn9?kPjfHmJHDPo)A7[p&=[ap\Xgdqu6Qkrn[V1
s8N#prVl`oqu6Hkq>U0gp\sjbo`"C[nG_nUmf)POlMg#HjSn-;hu;I2h#?%,fDa>"e,Ibod/MAjcMl)f


bl5c^ao9?[`r<sG`2pk-_ihq4`;[[P_YV.K_u%CO_u%CI_Z%IP_Y_7M_YCtE_Z%IM_Z%IJ_Z%IP`;@IO
`;[[L_Y_7G`.>f+_h#_>_t_1L_tCnG_u%CO_u%CI_Z%IP_Yq@Q_o)JjpqcjErknWMrknNJrkn`RqnrEO
rknNJqnr3IJ]$!TJ]$cjpr*0Lotp^Gqo&KOqo&9Hrkn`PqnrEMpqcjErknWMrknNJrkn`RqnrEOrknNJ
qnr3IJ]"G(J]!&VJ]!&VJ]!&VOMgk3rknEGrknWOrknWOpqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]O
rl"fRpqlpGq8<9OJ]!)W]YjN_rknEGrknWOrknWOpqm$JrkeQMrkeHHqni?Mqni?Mpqm$Jrl"]Orl"fR
pqlpGpr(b$J]!&Vkell-rl+lVrl>#[qo\o^rltGfrm1SjrmC_ormh#"rn@A+rn[S2ro3q<roj@Grp0IL
rp]pWrq$-^rqHEerqZQirql]mrr)`nh>c=2rr2fnrqucmqtg<frqQKdrq-3]rpg!WrpTjRrp0RJroX4@
ro3q8rndY0rn@A(rn%/"rm^qrrmC_lrm1Shqp#,arlauWprTVYJ]O"qou[-Q!6G&XqoJcYrlF6Bn&FM1
ouR$NrlFZPJ]Ii4J]PRHou[*PqoATTrlP/\kf3_Ea7%%1a7[ONa8X0NaaqO_aFVFtaS![PaSX$TaSs<\
aQCP3`p(PCa7[ONa8X0NaaqO3aFVE`aFVE`aFVE`aH4L9ans0Va8<sWao9BDa7%%1a7[ONa8X0OaT0G6
aF_LGaS![PaSX$TaSs<\aQCP3`ob>7aSX$WaR[I(aFVE`aQU_?an<gUbPo`bc25fcci2;jdJhVoeGe"t


fDaJ&gA]n,hYuI4ir8$<k5OWEli-;Nn,DhUnc&.Zp&=[aq#:*dqYpBkr;QZlrn[V1s8N#mrVl`oqu6Hk
q>U0gp\smco`"F\nc&"VnG_hSli-,Ik5OKAir7p6hu;I2h#?"+f`'J$ec+(te,IepdJM;]c_Jd:cA'XB

c2,]abl5fYbk90Ychku[b5TT`b59H_ci2,ebkTBVbl5f_bkoY9cLK22cEbagc2PrdbOs*PbPoidblQ)6
oud9WrlY,_rm1Serlk/\prr`\qonr^J^26[J^3,tp!*K[rlauYoum?\qp"fVrlb;`qp#,drlb;bpriHV
rlb2_qos];REgB/J^/hlJ^/hlJ^/qop!*K[rlauYoum?\qp"fVrlb;`qp#,drlb;bpriHVrlb2_qp"`X
J^/hlYg2pdrlkAbp!!*Prm1Jdoud9WrlY,_rm1Serlk/\prr`\qonr^a3K7]J^3/up!<E[rmC_nrmUkr
rmh#!rn%/&rnRM/qqqD3ro3q=roa:Erp0RNrp]pUrpg!Yrq-3_rqHEerqZQirql]mqu-Ekh>c+,rr2fn
rquZjrqcWhrqHEcrq-3]rpp'XrpTjSrp9XLrosFFroX4@ro*k7qqqD0rn[S/rnIG+qq:u$rn%/#pso8k
VUL+FO43^M!7_"sl.#LWqpGDkrmUkpp!`ogqpG2fm*tp]p!eQAqU:#E]@6?#rmU,]ps],f!7Cnrdf._p
de2)gdehGee*PT]e+M4Ae'?Ene*#3NeGdq]eG.MidJhSne,Iege,IemdJ22feFM,de+M4Ae"Y<Bdt,u!
dt,u!dt,u-e+2#fe*5BWe,.Pldf._pde2)gdehGee*PT]e+M5gdt,u!e%*rueGdq]eG.MidJhSne,Ieg
e,IemdJ22WeGI_feBlZqdt-!0e+M5fec+/!fDF5"g&B_)g]$"-h>Z:.hu;R5iVqp;jo4HBl2L#Jm/HGP
n,DhUo)A7[o`"R`p\ssbqYpBhr;QZlrn@D(s8N#prVQNlqu6Hkq"sgbp&=U_oD\=[nG_nUmJcJOli-/J
kl0cEjo4?<ir7p9hu;R5hYu@1h"]Y'g@*^ofR_\6f_F,#f[p2Vrn$hqrn%/#rn%/%rmpturmq)!l.5jc
rmpturmq)$rn%/#qq(_tqq(_tpt:5NrRc\R\CgT0rn.5%p"98qrmq)#rn.5$qq(hurm_#"lIPsdrmptu
rmq)$rn%/#qq(_tqq(_tpt:5NdFa$&jOj7\rn.5%p"98qrmq)#rn.5$qq(hurmg8arn%/#qq(hurn.5%
rmptuqq1etqq1\sJ_6gOJ_5P+J_5P+J_5P+MV.^Wrn.5%p"98qrmq)#rn.5$qq(hurmg8arn%/#qq(hu
rn.5%rmptuqq1etqq1\s!SH%UfR_\`f_F/!f`'Lqf`'M%f)F;#f`'J!fDaA#e`kZafDa@ufDaA#f`'M%
f)+(rf_a:tf_F.KfR_\+f](QSg&B_&g\]e*h>Z:1i;VX5iVVX6j8S0>kPj]El2L#Jm/HDOn,DkVo)A7[

o`"O_p\XabqYpBer;QZlrn@D(s8N#mrVl`oqu6Hhq>U0gp\smco`"I]o)A1YnG_nUmf)POlMg&Ikl0`D
jo4?<j8S';iV;@1hu;R5hu;K$h1=C7h#Z<dqV;),qqV2*rn@&"qqC2ep"K;tqqD&(qqV2-rn[A)J_ftS
J_dNcptYl*qqV2*rn@&"qqD#'lJ)!cqqM#%rnI>*rndY1ptUGVaPDF'gYMY[rndP-rnIG+p"TAtk1fR_
qqM,(rn@A+qqV2-rn[A)J_cjPJ_bn5J_bn5J_bn5J_g+VrndP-rnIG+p"TAtk1fR_qqM#%rnI>*rndY1
ptYT!J_bn5Xkid-rndP-rnIG+p"TAtk1fR_qqM#%rnI>*rndY1ptX$JJ_bn5f%p5[ro!e5pu)/1ro3q;
qrIb<roa:ErosFIrp0ROrpTjUrpg!Yrq$-]rq69bqtU0drqcWkrquQiqu5=LeGoOIp&4mfq"k!bqtL!\





rq-*XrpTjUrpKdQrp9OJqs"+Dqrdt@puM>4qr41*J`2@Br8I_9ro*k7ro*b6pu253ro*k7qr.P6ro*k6
p#,i,ro*k7qr.P6ro*b6pu253ro*k9ro*k9J`6.XJ`3onqr7V6ro!e7qr7D0ro3q9ro!\4ro*q:!TE#:
ht>q,hu;U6i;;L4ir7p6iqVL3ir7p9ir7p9idp(-iITtEiVVX6iVqd7iVVX0iVqj9iVqd4iVqj9iVqa-
i;VX5iVqd4iVqj9iVVX0iVqj9iVqj9iVqhfiL/YUiITs=iITs=iITs@iVVX6iVqd7iVVX0iVqj9iVqd4
iVqj9iVqa-i;VX5iVqd4iVqj9iVVX0iVqj9iVqj9iVqj.iITs=iNV;<ir7p9i;V^4iqVL3ir7p9i;;L4
ir7p9ht>q,hu;U6i;;L4ir7p6iqVL3ir7p9ir7p9ilC#/iITtCiUu40j7q^4k5OQ@kl0iGlhg&JmJcPQ
nG_nUnG_tTo`"O_p\Xa\qYU3frVQTDs4%)DrqlZnr;6BjqYU*fq#:!ap%\.Xnc&%Wn,DbPmJcJOlhfuH

l1O9;kPOD4jalNJjo"6@k5498k5OKAjSS'<jSS'6jSn3=jSS'<jSn37jSn9<jSn9<jSS'6k5OKAk(2Xa
jalO!jnn3;jnS!;jo4?<jo4?<jne$=jQ-=#roEt<roF(=puMG9qrIb<qrIY9pu_S;roSdn`T;[4hW=Xs
qrRV8roO.?qrRh<qrRV6ro="=qrRh<ro<e7roO%<roO.?roEt<pu_S;roSdnRH9"]J`VIEJ`VIEJ`VRH
qr[e;pu_S;roEt<roEt<puMG7roEt<roF(=puMG9qrIb<qrIY9pu_S;roWh6J`VIEYiYcEqrRV8roO.?
qrRh<qrRV6ro="=qrRh<ro<e7roO%<roO%<qrRV8roO.Aa5qm6J`Y\Kp#c8:p#uD>qs+1Hrp9XOqsOIP
rp]pWq"+LXqtBp^rqZHfrqlTjrr)WkeGn%uq#:'erqucmqtg3cq"O[Yrq-3\qsj[Tp$_nJqsFCLqs4.E

p$&.5J`qaM!U8hKl2KoDl20]Al20]Dl2KoGl2KlCkl0cEkkjQBk5OQCkkjQBl2KuIl2Ko>l2KoGl20]A
l%/'jk^hs$kl0iGkkjWAkkjWAkl0iGkl0iGkPaTFkii$/roj7BroX4Croj7BrosFIrosFGp$)J>ros=D
qrr[qaQS3=gZ\Y$roj7DqrmqAqrn%Droj@Groa1Broa:Eqrdt@roa:EqrdtCrp'LIroj@Gq!%eAros=D
qrr[qSEPOfJ`q[KJ`q[KJ`q[KrosFGqs""Aqs""ArosFGrosFFqrn%Broj7BroX4Croj7BrosFIrosFG
p$)J>ros=Dqs!h<J`q[KXm#cKroj7DqrmqAqrn%Droj@Groa1Broa:Eqrdt@roa:EqrdtCrp'LIroj%>
roj@GqrmqAb34E?J`teNqs!e=rp0IJrpBUNqsXFOrpfmVqt0m\q"Od`q"k!erquQiq#8eCcN!e@p&4mf
qtp9erqZQgq"O[Yqt0mZrposVqsa1FOm[egJaWC&rpB^Qq!J(KrpBLIq!ItFq!J(Iq!IkCrpB^OqsF:K
qsAt&lgB>lVXFHNrpKRKrpKdQq!@kE!U]:Om.fuIm.fuCm/HDOm/-2ImecC&m_A1@maCP&mJcPKmJcPQ
mJ-&CmJH8FmJcJImJ-&ImJcJLmJH>Km=F\hmXaeWmXaeWmXaeWmXag$mf)VQmeH2Kmf)VKm.fuFm.fuI
m.fuCm/HDOm/-2ImecD=mXaeWm\K:MmJcPKmJcPQmJ-&CmJH8FmJcJImJ-&ImJcJLmJH>KmD84AmXafN
me-&AnG_tWo)A7Uo`"OYp\sseq=sgcqtp<grUp0;s3CZ;rqlZkr;6BjqXs[`q#:$ep@\+LoDA+UnWE<l


n:C**nG_nUnGDbKnGD\RnG)JInG)JLnG_nInG_tTnGD[*nE]Rpn>>^Sn,DhRnb)DKn,DhTn,2YLnG)JL
nG_nInG_tTnGD[*nA"IDnC$h*n,DhRnb)DKn,DhOn+cDIn,)VRn+H2LnG_tTnGD[*n<<?mn:C([n:C([
n:C([nG)MPn,DhRnb)DKn,DhOn+cDIn,)VRn+,uInb_hQn*TUqn:C))nG_nUnGDbKnGD\RnG)JInG)JL
nG_nInG_tTnGD[jn:C([nBLJ%nb)JGoC_eUpAXg`q"smaqYpBbr;QZcrmCbhs7lTarVl`lqtp6eq>U0^
p\sm]p%@tJo:#6$nq$?3o(_hUo)&%Ro)&%.o)A7Uo)A7Xo(_g-o'Z("nuVEWoD\=XoD%nRoCqh4o)A7U
o)A7Xo(_g-o"ssKo%<O.oD\=XoD%nRo@3@1oDA+Xo)A7Xo(_g-ns8itnq$@_nq$@_nq$@_o)A4ToD\=X
oD%nRo@3@1oD%nUoDA+RoC2=%nq$A3o(_hUo)&%Ro)&%.o)A7Uo)A7Xo(_gpnq$@_o%*C)oCDPKp&"I[
p\Xabq=XU`qtp<arV6B8s2+g2rpp$er:p0^qYU*`pu(n>p4;pip&Xp^me?2DrqHEerqGmTrqHEcrqGmT
l1]c&o_*k0YP.>Wn+QbTrqHKf!Vc?WpAXgcpAXgTp?D=&p;lrYp=o<-p[@hTp\ssep[@hTp\smcp[\%W
p?D=&p71i-p4;pgp4;pgp4;pgp?_PBpAXgcq#:$VpAXgcpAXgTp?D>Fp4;pgp9"&Tp[@hTp\ssep[@hT
p\smcp[@h?pWE2\p4;qjp>boBq#:*[qY9sbr:U$`rke]Ps6osarUp*Zqu6HDq4RM6pk/>Bq>'IS\bPFb

Jb\m4JbZGDm.ol?deN)&Jb[=]Jb\!pm.n<hrqPaRJbYc1JbXfkJbXfkJbXfkJb\U-\bPFbp@s46JbZAB
m.n3el1rKsJbXfkg%a:sqtg!_o)/Lcn,C3(\c;I(n,;qWp%s=:r;)!@JbnL)qt^6frqY^Qqt^-crqV-A
e,"XlOo"tNrqcWirVGgUqt^-crqV-AVttu@^&%X%rqcWik5+uNqtg<fqtbm?JbjroJbjroJbjroJbjro
j8/ZKrqcWik5+uNqtg<febXjnJbkH(qt^6frqY^Qqt^-crqWPiJbjro[JKdto).tTq#7i(WrMbkcMa+-
Jc()sqY]1Jk5='6Jc+j3Jc)DCh>I?OkPX07Jc*:\Jc*soh>QL6n,;_RJc(`0Jc()sJc()sJc()sJc,<@
h>QL6h>Qa=Jc()sV#9'Ik5='6_>Jl^Jc*mmdJ`Y8XoGF$`Vu,#Jc1/urVbILk5F6;Jc4g2Jc2SHgAV*N

kPa?<Jc37[Jc4-tgA^75n,DnWJc1]/Jc1/uJc1/uJc1/uJc5KEgA^75i;W$?Jc1/uVu>?Kk5F6;^AWW]
Jc4'r^](A8N;nJ.pATXBJc=I(h>`'*b5QtkM#R8NjSsf1T)O<?[/Sn]o)=4>Jc:6"Jc:6"Jc:6"Jc:6"
gA]q.bl31mJc:E'h>a/IJc:6"ZMog_JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcC<$JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$
JcEF`JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`JcC<$JcC<$
JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcC<$JcEF`J,



~> %APLeod
EI
0.60000002 i
1 1 1 sc
CM
11 67 m
63 67 l
63 15 l
11 15 l
h
11 67 m
f
1 J
1 j
0 0 0 sc
1 0 0 -1 -99 130 cm
110 63 m
162 63 l
162 115 l
110 115 l
h
110 63 m
S
/Cs2 SC
0 sc
0 i
1 0 0 -1 37 41 cm
/F1.1[ 12 0 0 -12 0 0]sf
-1.8984375 4.5 m
(!)s
0.60000002 i



















/Cs1 SC







1 1 1 sc
CM
115 67 m
167 67 l
167 15 l
115 15 l
h
115 67 m
f
0 0 0 sc
1 0 0 -1 -99 130 cm


























214 63 m
266 63 l
266 115 l
214 115 l
h
214 63 m
S
/Cs2 SC
0 sc
0 i
1 0 0 -1 141 41 cm
-16.839844 4.5 m
("#$%)[ 6.433594 7.587891 9.322266 0.000000 ] xS
0.60000002 i
/Cs1 SC
1 1 1 sc
CM
167 67 m
305 67 l
305 15 l
167 15 l
h
167 67 m
f
0 0 0 sc
1 0 0 -1 -99 130 cm
266 63 m
404 63 l
404 115 l
266 115 l
h
266 63 m
S
/Cs2 SC
0 sc
0 i
1 0 0 -1 236 41 cm
-16.567383 4.5 m
(&'\(')[ 8.988281 8.279297 7.587891 0.000000 ] xS
0.60000002 i
/Cs1 SC
1 1 1 sc
CM
305 67 m
357 67 l
357 15 l
305 15 l
h
305 67 m
f
0 0 0 sc
1 0 0 -1 -99 130 cm
404 63 m
456 63 l
456 115 l
404 115 l
h
404 63 m
S
/Cs2 SC
0 sc
0 i
1 0 0 -1 331 41 cm
-1.8984375 4.5 m
(\))s
0.60000002 i
/Cs1 SC
1 1 1 sc
CM
357 67 m
409 67 l
409 15 l
357 15 l
h
357 67 m
f
0 0 0 sc
1 0 0 -1 -99 130 cm


























456 63 m
508 63 l
508 115 l
456 115 l
h
456 63 m
S
/Cs2 SC
0 sc
0 i
1 0 0 -1 383 41 cm
-20.625 4.5 m
(*+,-%)[ 8.302734 7.833984 6.462891 8.314453 0.000000 ] xS
0.60000002 i
/Cs1 SC
1 1 1 sc
CM
63 67 m
115 67 l
115 15 l
63 15 l
h
63 67 m
f
0 0 0 sc
1 0 0 -1 -99 130 cm
162 63 m
214 63 l
214 115 l
162 115 l
h
162 63 m
S
/Cs2 SC
0 sc
0 i
1 0 0 -1 89 41 cm
-8.4550781 4.5 m
(\($)[ 7.587891 0.000000 ] xS
ep
end
%%Trailer
%%EOF

Changes to Docs/Images/packet.graffle.

cannot compute difference between binary files

Added Docs/Images/packet.png.

cannot compute difference between binary files

Added Docs/Images/rest_cmds.eps.

more than 10,000 changes

Added Docs/Images/rest_cmds.graffle.

cannot compute difference between binary files

Added Docs/Images/rest_cmds.png.

cannot compute difference between binary files

Added Docs/Images/rest_cmds_web.png.

cannot compute difference between binary files

Added Docs/Images/run.png.

cannot compute difference between binary files

Added Docs/Images/system 2.png.

cannot compute difference between binary files

Added Docs/Images/system.eps.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
%!PS-Adobe-3.0 EPSF-3.0
%%HiResBoundingBox: 0.000000 0.000000 522.000000 342.000000
%APL_DSC_Encoding: UTF8
%APLProducer: (Version 10.6.5 (Build 10H574) Quartz PS Context)
%%Title: (Unknown)
%%Creator: (Unknown)
%%CreationDate: (Unknown)
%%For: (Unknown)
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%Pages: 1
%%BoundingBox: 0 0 522 342
%%EndComments
%%BeginProlog
%%BeginFile: cg-pdf.ps
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
%%Copyright: All Rights Reserved.
currentpacking true setpacking
/cg_md 141 dict def
cg_md begin
/L3? languagelevel 3 ge def
/bd{bind def}bind def
/ld{load def}bd
/xs{exch store}bd
/xd{exch def}bd
/cmmtx matrix def
mark
/sc/setcolor
/scs/setcolorspace
/dr/defineresource
/fr/findresource
/T/true
/F/false
/d/setdash
/w/setlinewidth
/J/setlinecap
/j/setlinejoin
/M/setmiterlimit
/i/setflat
/rc/rectclip
/rf/rectfill
/rs/rectstroke
/f/fill
/f*/eofill
/sf/selectfont
/s/show
/xS/xshow
/yS/yshow
/xyS/xyshow
/S/stroke
/m/moveto
/l/lineto
/c/curveto
/h/closepath
/n/newpath
/q/gsave
/Q/grestore
counttomark 2 idiv
{ld}repeat pop
/SC{	
    /ColorSpace fr scs
}bd
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
/cgmtx matrix def
/sdmtx{cgmtx currentmatrix pop}bd
/CM {cgmtx setmatrix}bd		
/cm {cmmtx astore CM concat}bd	
/W{clip newpath}bd
/W*{eoclip newpath}bd
statusdict begin product end dup (HP) anchorsearch{
    pop pop pop	
    true
}{
    pop	
   (hp) anchorsearch{
	pop pop true
    }{
	pop false
    }ifelse
}ifelse
{	
    { 
	{ 
	    pop pop 
	    (0)dup 0 4 -1 roll put
	    F charpath
	}cshow
    }
}{
    {F charpath}
}ifelse
/cply exch bd
/cps {cply stroke}bd
/pgsave 0 def
/bp{/pgsave save store}bd
/ep{pgsave restore showpage}def		
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
/scrdict 10 dict def
/scrmtx matrix def
/patarray 0 def
/createpat{patarray 3 1 roll put}bd
/makepat{
scrmtx astore pop
gsave
initgraphics
CM 
patarray exch get
scrmtx
makepattern
grestore
setpattern
}bd
/cg_BeginEPSF{
    userdict save/cg_b4_Inc_state exch put
    userdict/cg_endepsf/cg_EndEPSF load put
    count userdict/cg_op_count 3 -1 roll put 
    countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
    3 sub{end}repeat
    /showpage {} def
    0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
    10 setmiterlimit [] 0 setdash newpath
    false setstrokeadjust false setoverprint	
}bd
/cg_EndEPSF{
  countdictstack 3 sub { end } repeat
  cg_dict_array 3 1 index length 3 sub getinterval
  {begin}forall
  count userdict/cg_op_count get sub{pop}repeat
  userdict/cg_b4_Inc_state get restore
  F setpacking
}bd
/cg_biproc{currentfile/RunLengthDecode filter}bd
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
/ImageDataSource 0 def
L3?{
    /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
    /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
}{
    /ImageBandMask 0 def
    /ImageBandData 0 def
    /cg_mibiproc{
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
    /cg_miaiproc{	
	string/ImageBandMask xs
	string/ImageBandData xs
	/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
	    dup ImageBandMask/readstring cvx
	    /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
    }bd
}ifelse
/imsave 0 def
/BI{save/imsave xd mark}bd
/EI{imsave restore}bd
/ID{
counttomark 2 idiv
dup 2 add	
dict begin
{def} repeat
pop		
/ImageType 1 def
/ImageMatrix[Width 0 0 Height neg 0 Height]def
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
L3?{
    dup/MaskedImage known
    { 
	pop
	<<
	    /ImageType 3
	    /InterleaveType 2
	    /DataDict currentdict
	    /MaskDict
	    <<  /ImageType 1
		/Width Width
		/Height Height
		/ImageMatrix ImageMatrix
		/BitsPerComponent 1
		/Decode [0 1]
		currentdict/Interpolate known
		{/Interpolate Interpolate}if
	    >>
	>>
    }if
}if
exch
{imagemask}{image}ifelse	
end	
}bd
/cguidfix{statusdict begin mark version end
{cvr}stopped{cleartomark 0}{exch pop}ifelse
2012 lt{dup findfont dup length dict begin
{1 index/FID ne 2 index/UniqueID ne and
{def} {pop pop} ifelse}forall
currentdict end definefont pop
}{pop}ifelse
}bd
/t_array 0 def
/t_i 0 def
/t_c 1 string def
/x_proc{ 
    exch t_array t_i get add exch moveto
    /t_i t_i 1 add store
}bd
/y_proc{ 
    t_array t_i get add moveto
    /t_i t_i 1 add store
}bd
/xy_proc{
        
	t_array t_i 2 copy 1 add get 3 1 roll get 
	4 -1 roll add 3 1 roll add moveto
	/t_i t_i 2 add store
}bd
/sop 0 def		
/cp_proc/x_proc ld 	
/base_charpath		
{
    /t_array xs
    /t_i 0 def
    { 
	t_c 0 3 -1 roll put
        currentpoint
	t_c cply sop
        cp_proc
    }forall
    /t_array 0 def
}bd
/sop/stroke ld		
/nop{}def
/xsp/base_charpath ld
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
/refnt{ 
findfont dup length dict copy dup
/Encoding 4 -1 roll put 
definefont pop
}bd
/renmfont{ 
findfont dup length dict copy definefont pop
}bd
L3? dup dup{save exch}if
/Range 0 def
/DataSource 0 def
/val 0 def
/nRange 0 def
/mulRange 0 def
/d0 0 def
/r0 0 def
/di 0 def
/ri 0 def
/a0 0 def
/a1 0 def
/r1 0 def
/r2 0 def
/dx 0 def
/Nsteps 0 def
/sh3tp 0 def
/ymax 0 def
/ymin 0 def
/xmax 0 def
/xmin 0 def
/setupFunEval 
{
    begin
	/nRange Range length 2 idiv store
	/mulRange   
		    
	[ 
	    0 1 nRange 1 sub
	    { 
		    2 mul/nDim2 xd		
		    Range nDim2 get		
		    Range nDim2 1 add get	
		    1 index sub			
						
		    255 div			
		    exch			
	    }for
	]store
    end
}bd
/FunEval 
{
    begin
	
	nRange mul /val xd	
				
	0 1 nRange 1 sub
	{
	    dup 2 mul/nDim2 xd 
	    val	
	    add DataSource exch get 
	    mulRange nDim2 get mul 	
	    mulRange nDim2 1 add get 
	    add 
	}for	
    end
}bd
/max 
{
	2 copy lt
	{exch pop}{pop}ifelse
}bd
/sh2
{	
	/Coords load aload pop 	
	3 index 3 index translate	
					
	3 -1 roll sub	
	3 1 roll exch 	
	sub				
	2 copy
	dup mul exch dup mul add sqrt	
	dup
	scale  
	atan	
	
	rotate		
	
	/Function load setupFunEval	
	
	
	clippath {pathbbox}stopped {0 0 0 0}if newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	currentdict/Extend known
	{
		/Extend load 0 get
		{	
			0/Function load FunEval sc	
			xmin ymin xmin abs ymax ymin sub rectfill
		}if
	}if
	
	/Nsteps/Function load/Size get 0 get 1 sub store
	/dx 1 Nsteps div store
	gsave
		/di ymax ymin sub store
		/Function load
		
		0 1 Nsteps
		{
			1 index FunEval sc
			0 ymin dx di rectfill
			dx 0 translate
		}for
		pop	
	grestore	
	currentdict/Extend known
	{
		/Extend load 1 get
		{	
			Nsteps/Function load FunEval sc	
			1 ymin xmax 1 sub abs ymax ymin sub rectfill
		}if
	}if
}bd
/shp	
{	
	4 copy
	
	dup 0 gt{
		0 exch a1 a0 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a0 a1 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
	
	dup 0 gt{
		0 exch a0 a1 arc
	}{
		pop 0 moveto
	}ifelse
	dup 0 gt{
		0 exch a1 a0 arcn
	}{
		pop 0 lineto
	}ifelse
	
	fill
}bd
/calcmaxs
{	
	
	xmin dup mul ymin dup mul add sqrt		
	xmax dup mul ymin dup mul add sqrt		
	xmin dup mul ymax dup mul add sqrt		
	xmax dup mul ymax dup mul add sqrt		
	max max max								
}bd
/sh3
{	
	/Coords load aload pop 	
	5 index 5 index translate	
	3 -1 roll 6 -1 roll sub		
	3 -1 roll 5 -1 roll sub		
	2 copy dup mul exch dup mul add sqrt
	/dx xs						
	2 copy 0 ne exch 0 ne or
	{
		
		exch atan rotate	
	}{
		pop pop
	}ifelse
	
	/r2 xs
	/r1 xs
	/Function load 
	dup/Size get 0 get 1 sub	
	/Nsteps xs		
	setupFunEval		
	
	
	
	
	
	dx r2 add r1 lt{
		
		0 
	}{
		dx r1 add r2 le
		{ 
			1
		}{ 
			r1 r2 eq
			{	
				2
			}{ 
				3
			}ifelse		
		}ifelse
	}ifelse
	/sh3tp xs		
	clippath {pathbbox}stopped {0 0 0 0}if 
	newpath 	
	/ymax xs
	/xmax xs
	/ymin xs
	/xmin xs
	
	dx dup mul r2 r1 sub dup mul sub dup 0 gt
	{
		sqrt r2 r1 sub atan
		/a0 exch 180 exch sub store 
		/a1 a0 neg store 
	}{
		pop
		/a0 0 store
		/a1 360 store		
	}ifelse		
	currentdict/Extend known
	{
		/Extend load 0 get r1 0 gt and	
		{	
			0/Function load FunEval sc	
			
			
			
			
			{ 
				{	
					dx 0 r1 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				}
				{	
					r1 0 gt{0 0 r1 0 360 arc fill}if
				}
				{	
					
					
				
					
					0 r1 xmin abs r1 add neg r1 shp
				}
				{	
					
				
					r2 r1 gt{	
						
						0 r1
						r1 neg r2 r1 sub div dx mul	
						0	
						shp	
					}{	
						
						
						
						0 r1 calcmaxs	
						dup
						
						r2 add dx mul dx r1 r2 sub sub div
						neg				
						exch 1 index	
						abs exch sub
						shp
					}ifelse
				} 
			}sh3tp get exec	
		}if
	}if
	
	/d0 0 store
	/r0 r1 store
	/di dx Nsteps div store
	/ri r2 r1 sub Nsteps div store 
	/Function load 
	0 1 Nsteps
	{	
		1 index FunEval sc
		d0 di add r0 ri add d0 r0 shp
		{
		
		d0 0 r0 a1 a0 arc
		d0 di add 0 r0 ri add a0 a1 arcn
		fill
		
		
		d0 0 r0 a0 a1 arc
		d0 di add 0 r0 ri add a1 a0 arcn
		fill
		}pop
		
		
		/d0 d0 di add store
		/r0 r0 ri add store
	}for
	pop	
	
	currentdict/Extend known
	{
		/Extend load 1 get r2 0 gt and	
		{	
			Nsteps/Function load FunEval sc	
			
			
			
			
			{ 
				{
					dx 0 r2 0 360 arc fill
				} 
				{
					dx 0 r2 360 0 arcn
					xmin ymin moveto
					xmax ymin lineto
					xmax ymax lineto
					xmin ymax lineto
					xmin ymin lineto
					eofill		
				} 
				{	
					
					
					xmax abs r1 add r1 dx r1 shp
				}	
				{	
			
					r2 r1 gt{
						
						
						
						calcmaxs dup	
						
						r1 add dx mul dx r2 r1 sub sub div	
						exch 1 index	
						exch sub
						dx r2
						shp
					}{	
						
						r1 neg r2 r1 sub div dx mul	
						0		
						dx 		
						r2		
						shp
					}ifelse
				}
			}			
			sh3tp get exec	
		}if
	}if
}bd
/sh		
{	
	begin
		/ShadingType load dup dup 2 eq exch 3 eq or
		{	
			gsave
				newpath
				/ColorSpace load scs
				currentdict/BBox known
				{
					/BBox load aload pop	
					2 index sub				
					3 index					
					3 -1 roll exch sub 
					exch rectclip
				}if
				2 eq
				{sh2}{sh3}ifelse
			grestore
		}{
			
			pop 
			(DEBUG: shading type unimplemented\n)print flush
		}ifelse
	end
}bd
{restore}if not dup{save exch}if
	L3?{	
		/sh/shfill ld
		/csq/clipsave ld
		/csQ/cliprestore ld
	}if
{restore}if
end
setpacking
%%EndFile
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%PageBoundingBox: 0 0 522 342
%%BeginPageSetup
cg_md begin
bp
sdmtx
%RBIBeginFontSubset: LucidaGrande
%!FontType1-1.0: LucidaGrande 1.0000.6.0040
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 14 dict begin/FontName /LucidaGrande def
 /PaintType 0 def
 /Encoding 256 array 0 1 255{1 index exch/.notdef put}for
 dup 33 /I put
 dup 34 /n put
 dup 35 /t put
 dup 36 /e put
 dup 37 /r put
 dup 38 /f put
 dup 39 /a put
 dup 40 /c put
 dup 41 /C put
 dup 42 /o put
 dup 43 /m put
 dup 44 /p put
 dup 45 /u put
 dup 46 /l put
 dup 47 /F put
 dup 48 /R put
 dup 49 /E put
 dup 50 /N put
 dup 51 /T put
 dup 52 /O put
 dup 53 /D put
 dup 54 /period put
 dup 55 /H put
 dup 56 /P put
 dup 57 /slash put
 dup 58 /S put
 readonly def
 42/FontType resourcestatus{pop pop false}{true}ifelse
 %APLsfntBegin
 {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if
 /FontType 42 def
 /FontMatrix matrix def
 /FontBBox[2048 -2186 1 index div -1509 2 index div 3361 3 index div 2381 5 -1 roll div]cvx def
 /sfnts [<
 74727565000900000000000063767420000000000000009C000006B66670676D000000000000075400000D33676C79660000000000001488000015646865616400000000000029EC00000036686865610000000000002A2400000024686D74780000000000002A480000006C6C6F63610000000000002AB4000000386D6178700000000000002AEC00000020707265700000000000002B0C00000CAF062B0019000005C80025000005C800250000000000000000000000000000043E001800000000FFDB00000000FFE800000000FFDB0000FE75FFE8000000000000FED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000080000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5006F000CFF3BFF91FFF400BF00680014FF41FF98FFEC00000000000000000000000000000000000000000082FF7E00DF00D200C900B400AD009B00DE00D200C500BE00B900AB00E300D200C600B900AD00950062000000A4009D0085000000AA00A10094007200AD00A100940085000000C5000000000000000000000000000000000000012800000000000000000000000000F700F700970141004A00F7000000000000000000000000000000000094009400940000000000000000000000000000000000000000000000000000000000000000000000000000000000E6FF1A00000000000000000000000000000000000000DEFF22007C007C027502E400750075009A009400AC00A0000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A0001900000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B00000000000000000000000000000096005800790064039CFFF1062B000F0750000F02AFFFF1007B0000006F0073000000000000000000B9008C010A007E00C50031004F009A004200000000000000000000000000000000000000000000012800F700A00063009400820082009700C600B300B3007C007B009100000000000000000000000006440000000004A00019000000000800043E0018000004000000000000000534000000000000FFE70000FF780000000000C500940000FED80000000000E100760063003C002D001E000FFF1FFF3BFF48FF65FF79FF9DFFBD00DE00B900AD00A600DE00D200C500BF00B900A900910197007C0062005C005602CC01ED0197007C006F00620056004A011D010D009E00940035000000000000000000000000000005C8002500000503
 00000000000008000000000000000400000000000000047B000000000000FFDB00000000FFE70000000000000000FF3B00000000000000000192011700F700C800C300B800AD00A6009C0092008A0080007B00740068005A0050001E003A00000192011700F700E500D200C500B900AD008A0080007B00740068005E0054004A000000000141003E00DE00DE00000000000000000000000005D500190000056600000000000008000000000000000400000000000000043E001800C503C200DE00000000FFE70000000000000000FE00000000000000000000CD00C500AD00A100940088007C0075006F0063003100F700C600B900A0006300C500B300A10088007C0075006F00630056003100F700C600B900C600940082006F0063003E003200190000FF3AFF7EFF9DFFCE0057006F02B3012801830088008800000000000000000000000000000000000000AC008800C501ED006201BC001800DE013E000000000000000000000000000000000000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190000000000000000000000000000007C00AC00C500960000000000000000000000000085005D006500000000000000000000000000000000000000000000000000000000080000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000005ED01B0009400D200B600AC007B007B007C00000000000000000000000000000000000000B904A000C50063007A005100410087014100DE01280068009D0064007500D2012000DE00D100B40000000000000000000000000000000000000000006100AC00D0006F006F036603660000000000000000000000000000000000000000000000000000004A004A004A000000000000000000000000000000000000000005ED00000000000008000104005C000004000000000000000000000000000000FFDB000000000000000000000000000000000000000000000000003E050300D8011200AD009300D800F700AD00B700790067050300D800920000000000000069000000A50073007B00C501ED006201BC0066009D00880064008F0250FFEA05C9001603780016006F04A000190082006E002A002A002A002A000040405249483C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C0118B0184358456AB0194360B00C2344231020B00C4EF04D2FB000121B21231120332F592D2C0118B0184358B0052BB000134BB0145058B100403859B0062B1B21231120332F592D2C0118B01843584EB0032510F221B000124D1B2045B00425B00425234A6164B028
 5258212310D61BB0032510F221B0001259592D2CB01A435821211BB00225B0022549B00325B003254A612064B01050582121211BB00325B0032549B0005058B0005058B8FFE238211BB0003821591BB0005258B01E38211BB0003821595959592D2C0118B0184358B0052BB000134BB0145058B90000FFC03859B0062B1B21231120332F592D2C4E018A10B10C194344B00014B1000CE2B00015B90000FFF03800B0003CB0282BB0022510B0003C2D2C0118B0002FB00114F2B00113B001154DB000122D2C0118B0184358B0052BB00013B90000FFE038B0062B1B21231120332F592D2C0118B018435845646A23456469B01943646060B00C2344231020B00CF02FB000121B2121208A208A525811331B212159592D2C014BB0C85158B10B0A432343650A592D2C004BB0C8515800B10A0B4323430B592D2C00B00C2370B1010C3E01B00C2370B1020C453AB10200080D2D2CB0122BB0022545B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C60B0022523442121212D2CB000B0122B2121212D2CB000B0132B2121212D2C014BB0C85158B00643B00743650A592D2C2069B04061B0008B20B12CC08A8CB8100062602B0C642364615C58B00361592D2CB1000325456854B01C4B505A58B0032545B0032545606820B004252344B0042523441BB00325204568208A2344B00325456860B003252344592D2CB00325204568208A2344B003254564686560B00425B0016023442D2CB00943588721C01BB01243588745B0112BB00D2344B00D7AE41B038A45186920B00D23448A8A8720B0A05158B0112BB00D2344B00D7AE41B21B00D7AE4595959182D2C208A4523456860442D2C456A422D2C01182F2D2C0118B0184358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB0194360B00C2344218A10B00CF6211B21212121592D2C01B0184358B0022545B002254564606AB00325456A6120B00425456A208A8B65B0042523448CB00325234421211B20456A4420456A44592D2C012045B00055B018435A584568234569B0408B6120B080626A208A236120B003258B65B0042523448CB00325234421211B2121B0192B592D2C018A8A45642345646164422D2CB00425B00425B0192BB0184358B00425B00425B00325B01B2B01B0022543B04054B0022543B000545A58B003252045B040614459B0022543B00054B0022543B040545A58B004252045B04060445959212121212D2CB0032520B0072587052E23208AB00425B00725B0142B1021C4212D2CC02D2C4B525845441B2121592D2CB00243583DED181BED592D2C4B505845441B2121592D2C01184B52588A2FED1B212121592D2C4B53234B515A58B003254568B003254568B003256054582121211BB00225456860B003252344
 2121591B212121592D2CB00243583DCD181BCD592D2C462346608A8A462320468A608A61B8FF8062232010238AB10C0C8A70456020B0005058B00161B8FFBA8B1BB0468C59B0106068013A2D2C2045B0032546524BB013515B58B0022546206861B00325B003253F2321381B2111592D2C2045B00325465058B0022546206861B00325B003253F2321381B2111592D2C004BB0C8515800B00743B006430B592D2C8A10EC2D2CB00C4358211B2046B0005258B8FFF0381BB0103859592D2C20B0005558B8100063B003254564B00325456461B0005358B0021BB04061B00359254569535845441B2121591B21B0022545B00225456164B028515845441B212159592D2C21210C6423648BB84000622D2C21B08051580C6423648BB82000621BB200402F2B59B002602D2C21B0C051580C6423648BB81555621BB200802F2B59B002602D2C0C6423648BB84000626023212D2C184B5358B00425B00425496423456469B0408B6120B080626AB00225B00225618CB00C2344218A10B00CF6211B218A11231220392F592D2CB00225B002254964B0C05458B8FFF838B008381B2121592D2CB0134358031B02592D2CB0134358021B03592D2CB00A2B2310203CB0172B2D2CB00225B8FFF038B0282B8A102320D023B0102BB0054358C01B3C59201011B00012012D2C4B53234B515A58381B2121592D2C01B0022510D023C901B00113B0001410B0013CB001162D2C01B00013B001B0032549B0031738B001132D2C4B53234B515A5820458A60441B2121592D2C184B5358B00425B004254964B00325B00325496468B0408B6120B080626AB00225B00225618CB00C234421B004251023B00CF61BB00425B0042511122320392F59CC21212D2C0118B0184358B0052546234564611B21B00425B004254A59B00E23442310B00EEC2310B00EEC2D2CB01B435820B0016045B000515820B0016020452068B0005558B0206044211B212121591B20B0016020452068B0005558B8FFE06044B01C4B50582045B02060441B21591B21212159591B21592D2C4B53234B515A58381B2121592D2C4B5458381B2121592D2C4B52587D1B7A592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B00326
 5358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592DB8005D2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8005E2C2020456944B001602DB8005F2CB8005E2A212DB800602C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800612C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800622C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800632C2020456944B001602020457D691844B001602DB800642CB800632A2DB800652C4B20B003265358B0801BB040598A8A20B003265358B0022621B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B80003265358B0032545B8014050582321B8014023211BB003254523212321591B2159442DB800662C4B535845441B2121592DB800672C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800682C2020456944B001602DB800692CB800682A212DB8006A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8006B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8006C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8006D2C2020456944B001602020457D691844B001602DB8006E2CB8006D2A2DB8006F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800702C4B535845441B2121592DB800712C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800722C2020456944B001602DB800732CB800722A212DB800742C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800752C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800762C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800772C2020456944B001602020457D6918
 44B001602DB800782CB800772A2DB800792C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8007A2C4B535845441B2121592D0000020100000005000500000300070014B706020400060204002FCDD4CD002FCDD4CD3130211121112521112101000400FC400380FC800500FB00400480000000000100C8000001BF00F70003001B400D01B00003AF0040040500AF30302B011A18104DED002FED313033353315C8F7F7F7000000000100C1FED8037105C800030055402B790301160226028602034603560302039F01010F001F00020C0601030203BF000114000100200103021000B8FFF0B705026802040065022B2B01383800183F3F313087054D2B877DC4015F5E5D5D5F5D5D005D13013301C102159BFDEBFED806F0F9100000010068FFDB051705ED001500DB4039E71001091501E91501050C01090C01E90C01D70701280A380A02780A880A02250F01050F450FA50FC50FE50F05390D01090D490DC90D030908B8FFF040450D11480605460556056605047804E804024604014A025A026A0203B7010109010109014901C90103270D01B80401B505E5050208920F091F092F09030A090B920604149113B8FFC0401B090C48131191001309130F13010F030E7D034017136F0216036C022B2B011A18104DED5F5E5D10C6003FFDD62BED3FFDD65E5DED3130015D5D71005D715D5D5D5D5D2B5E5D715D715D715D5D71715D715D052000111000213205152423220011100033323715060339FEA7FE88017F015CC7010BFED0A5F1FEF8011AF4D2F0DB25019501730172019841C569FEBAFED7FEE5FEB981B47100000200BF0000059605C8000A001600AF40523913018913E913023C12010C124C1202860E01020E420E0209070901E709F70902480958096809B809040B09014908B908F908032408013408014206520602250501050515054505C5050404041404020A04B8FFE040290E11480A0F4A0F6A0F030D030F116F11021106169201030B9200107D070B7E004018076F0217006B022B2B011A18104DED10ED002FED3FED3130015F5E5D5F5E5D002B5E5D5D715D5D715D5D5D5D715E5D5D5D715D71331121320417161110002125212037361110272E012B01BF01ECDC010F639DFE7AFE9EFEE3010D012078817F4DD6D7AD05C86275BAFED0FE8FFE6A9D9BA501160105955B43000100BF0000042505C8000B003D4021089205400100059230300492010309920007030B05097E00400D0B70020C006B022B2B011A18104DED3210C4C4002FED3FED2B001A18104DED3130331121152111211521112115BF033BFD97
 0205FDFB029405C89DFE259BFDE89D00000100BF000003FA05C8000900424026089205050004920103000F062F06020F022F02020F0306060205097E00400B026F020A006B022B2B011A18104DED3211392F5F5E5D5D002F3FED12392FED313033112115211121152111BF033BFD970206FDFA05C89DFE109BFD6000000100BF0000052305C8000B003D40210A92034001000392303005030103080004087E07030B7E00400D076E020C006B022B2B011A18104DED3210ED32002F2F3F3F2B001A18104DED3130331133112111331123112111BFD202C0D2D2FD4005C8FD900270FA3802BBFD4500000100BE0000019005C80003001B400D010300037E00400405007E30302B011A18104DED002F3F313033113311BED205C8FA3800000100BF0000052A05C80009006E401E460301031F03010002300202102007010F070107080D1048000201120602B8FFF840240C0F480301520807087F0203140203020300070208038006088000400B066E020A006B022B2B011A18104DED10ED113939002F3F3130872B872BC4012B5F5E5D2B5D5D005E5D5D5F5D33113301113311230111BFCE02E9B4CDFD1605C8FB890477FA380477FB89000000020068FFDB05D005ED000B0017010840C6240C012B12018602F60202F60A01C90A01180401F80401270401C70401190801F90801260801C6080136160106164616E616033A14010A144A14EA14034910E91002460EE60E02170B470B02C70B01290B01190B590B690B790BD90B05480701C807011607011607560766077607D60705480501C805011605011605560566057605D605051701012901011901590169017901D901050C0D010317010313010C110109032F0F012015010008011A06129206040C9200130F7D09157D034019096F0218036C022B2B011A18104DED10ED003FED3FED3130015F5E5D5D5D5F5E5D5D5D5D005D71715D715D715D715D715D715D715D5D5D715D715D715D715D715D715D5D5D71710520001110002120001110002532121110022322021110120313FECCFE890179013B013A017AFE86FEC0E3F8F9DCDDF8F62501AB015F016101A7FE5AFEA0FE99FE5B9D0147012A01210146FEB9FEDDFEDEFEB400000200BF0000044805C8000A0013009F403035040195040108112811381103E81101750D850DB50DC50D04420652066206030906190629060310180C0F48D70E010EB8FFC0403F0A0F48150301050375038503F503040944045404020B923F09AF09CF09DF090409090013920103000F7D050B0A7E004000052005020C031505700214006B022B2B015F5E5D1A18104DED3210ED002F3FED11392F5DED3130015D005E5D712B5D2B715D5D5D715D713311212016151400212319013332363534262B01BF0193010CEAFEC0FEE45D55BBCCA0BB8105C8B5CFECFEF4FD
 B402EBAC9D857200000200BF000004FA05C8000C001300AE40742707013906010606260602E606012E113E114E110311380D1148260F01260F360F020603F6030209450F01160401A707019A07015E126E127E12030918151948070A010A090152097E0807140808070D9207010B0B08001392010300107E050705080D0C7E00400F080112031508700214006B022B2B015F5E5D1A18104DED321139392FED002F3FED1139392F1239ED31308705102B2B10C4015D2B5D5D5D5D5D005E5D5D712B715D715D713311213216151005012101231901332011342123BF01C0D5E3FED501EEFEFEFE5BC444018CFEB48405C8BCB3FED87CFD4B0272FD8E030F0137E500010064FFDB03E905ED00230138B90013FFF840AF1B1E48F51B01180101F801010916191602D916E91602B604C604027A198A1902151D01851D01571E012A0C5A0C023A0C4A0C6A0C7A0C8A0C05991F01121F221F026B0D011B0D3B0D0228230108230107110109280601591001E81001562201472201D822E822024C0B018C0BEC0B020C0A1C0A4C0A032C0A6C0A7C0A03680E780EF80E03441C01341C441C841CA41CB41CF41C060920192002080F1A2104001214921F152F15021517921204029203B8FFC04033090C4803059200131A7F0F14400C0F4814140F035F087F08025F217F2102087E2140000320035003030A0325216F0224036C022B2B015F5E5D1A18104DED5D5D1239392F2B2FED003FFDD62BED3FFDD65DED11121739313001715D715D5D715D715D715D5D5D71005E5D5D715D715D5D5D715D5D715D5D5D715D715D2B05222735163332363534262F012E0135343633321715262322061514161F011E0115140401E195E8FAA17C97638566BD9BF8C0ABBEEA736D8E688A6AC098FEE32541D074826A577A4B3B6CBF7FABDD39C05C74584A724F3C6DC288C1EA0000010012000004FE05C80007004E40350602920303000005100540058005040005800590050305060F021F024F028F02040F028F029F02030A0302067E01400809017E30302B011A18104DEDCD5F5E5D7110CD5D71002F3FED3231302111213521152111021FFDF304ECFDF3052B9D9DFAD5000000020067FFE704390456001D002700FA4025290D390D490DE90D040906010A212A2102FA2101E80301E90B01D90BE90BF90B03D7070107B8FFF840292124487907890702EB22016B227B228B2203050601AA22017522852202E724011725E72502C4010101B8FFE040492023480C011C015C0103FC0101790301C903D90302190429040202131213221303091F98AF090109090002110F970F0E010B030E0C9711101917971C1626960216001A091E851A150EB8FFC040100B0F480E2385054029156802280566022B2B011A18104DEDC42B10C4ED321139003FED3FFDC63FFDD65F5E5DED111239
 392F5DED3130015E5D5D5D715D712B7171715D005D5D5D715D2B715D715D5D7171712506232226353424213335342322073536333216151114333237170623220311272206151416333202F5B1A487B2012B01172FC29CB5C7AEB6AD680D190E43518A4342A2C864487B8AA3A981B2BF83BD60A351A4ADFE14A9046D20010E0119027B64476200000001006FFFE703B70456001500CD4069090C290C390C03C90C011C0D010C0D1C0D6C0D9C0DAC0DCC0D0675020185020117020177028702023C014C01022404013404D404E40403E905013405440502140F01040F140F640F940FA40FC40FF40F070BA8010185019501A501C501F50105061001861001089709B8FFC0402C0D1448090B97061014960F131F13020D131196001609130E8303400F132F134F13030E0317136902160366022B2B015F5E5D1A18104DED10C6003FFDD65E5DED3FFDD62BED3130015D715D5D005E5D715D5D5D715D5D715D5D5D715D7105220035100021321715262322061514163332371506026DDCFEDE011F01017F9DA76997B7BC98878FBF190146F80109012823A531E3BDB7E245AA3A000002006FFFE703E604570011001600EA405737100101101B1F482404340402C404E40402050335034503550304A503F5030259036903023A0601CA06EA06025506F50602450701450755076507031316231602D316F316023A1601120E220E320EB20EC20EE20E060EB8FFD0400A1A1E480509850902090DB8FFE040441A1F480C14012C145C14EC14FC140403740A012F0A01400450046004030F04010E0512970D0D02159708100097110F970216120D1385110B0D850540180B6902170566022B2B011A18104DED10C6ED1139003FFDD6ED3FED11392FED3130015F5E5D5D5D5D5F5D712B005E5D2B5D5D5D715D715D5D715D5D715D712B71250623220035340033321211072112213237012110232203E1C68DF0FED1010BD0C5D701FD532B01507BB3FD6001DFE2E3233C013FFEF7013CFEE8FEFE3DFE7D4201D5012F00000100500000032D064400140047402D300701140824083408030B970C0E97090112000397060F02A00CB00C020C3014011412060085045003D00302032F5DCDFD3939DD5DC65D002F3FED39393FFDD6ED31305D7101112311233533351021321715262322061D01211501B0C69A9A0162637E85506147010F03AAFC5603AA94820184219C295D7E97940000000100C50000018A062B0003001B400D010000038500400405008530302B011A18104DED002F3F313033113311C5C5062BF9D500000100C5000006BF0457001B00E940460404010408011A1001FA10011A1701FA17012A123A12022A193A1902391301A113B113C113E11304391A01A11AB11AC11AE11A0405070175079507A507C507E5070573030103B8FFD8405E1215480606
 014606560602060A01360A460A0226087608021604260476049604B60405F70B01F70601119509101896180711131A05030510010F150E000E850D031B8500400F0D0100000109031500140D653B07148515401C1D15853C302B011A18104DED322B015F5E5D5D1A18104DED3210ED002F33333F3F111733ED3FED3130015D5D005D5D5D715D712B5D5D715D715D7171715D715D715D5D33113315363332173633321615112311342322071123113423220711C5C590E2DA4F8CE0909EC69399A8C69695AA043ECCE4E4E5A998FCEA02F7BAD9FD2802F7BBDAFD2800000100C50000043D0456001100784053B90F01A910012D0F3D0F4D0F7D0F8D0F9D0F06770701D707E70702DB0DEB0DFB0D030D201A1D48180E0104061406240603090003100302100310030E950510010F0A000A8509031185004013096802120065022B2B011A18104DED3210ED002F2F3F3FED32325F5E5D31305E5D712B5D5D717171015D331133153633321615112311342623220711C5C59CE28DA8C54752B5A0043ECCE4B397FCF402CC7967EDFD4100000002006FFFE7047B0456000B001300D040981A0E2A0E021813281302070C01270701170527050218012801021801280102280B880B0208109810020C0D0A1D0A020D0A1D0A2D0A03020812080202081208220803020412042204030D5502010D021D02020E0A0B010A07010505010501010C0D010313010311010C0F011603100A200A0210082008021F042F04020012011706109706100C9700160E84091284034015096902140366022B2B011A18104DED10ED003FED3FED3130015F5E5D5D5D5D5F5E5D5D5D5D5D5D5D5D005E5D5D5E5D5D715D715E5D5D5D715D5D5D71710522001110003332001110002720111021201110026EE9FEEA0117EFEF0117FEE8F20139FECBFECC190135010301060131FECFFEFCFEF6FED09401A601A1FE5DFE5C0000000200C5FE75049A0456000E001700D34098130901580D01240F01040F012810581002F71001B817C817028803011916016916E91602380C480C02B60A012A0A3A0A4A0A03250635064506031212B212022714011D1401270A01970AA70A02F90C01B911C911028A09BA09022509350902250735074507030D0F1D0F2D0F030B0C0D1C0D020C03010F1703159505100D0F11970B16001B1384080F030E850040190869021800650219853F2B2B011A18104DED323210ED003F3FED32323FED32323F5F5E5D5E5D3130015D5D5D5D5D5D71005D715D5D5D5D5D5D715D5D5D715D71715D131133153633321215100223222719011633201110232207C5C579F2C4E1FFD0C180988A011CFCA59DFE7505C9CCE4FEE2F8FEF2FEB594FDFA028E8801B1017EB3000100C50000031D0456000D005B401F470B01490C590C02A90CB90C02070401090C030A07950800
 0A100A022F030AB8FFC040171F23480A950510010F00030D8500400F076A020E0065022B2B011A18104DED32002F3F3FFD2B5F5E5DD6ED11333331305E5D5D71713311331536333217152623220711C5C575DF1E213327BB7E043ECCE405B811DEFD340000010045FFE702AE05160014006C400C9802D80202070201F702010EB8FFD040371519481B012B013B015B01040D0A049709070F139712109700160F125F12020F0C5F0C0209030C120A070D8505044016126902150465022B2B011A1810CD4DED393910C65F5E5D5D003FFDD6ED3FCDED393931305D2B5D7171052226351123353335371521152111143332371506020B96A88888C5011CFEE4B827385B19AC99027E94C513D894FDA6D50D88190000000100B9FFE70431043E0011009C4010B50D017A058A059A0503E20AF20A020AB8FFD0405E1A1D487A0E8A0E02770287029702030A022A023A024A02AA02057A0201DB04EB04020420090D48350D750D850D950D04090D190D02A701010D011D017D018D010409030F070F0E010C950316000E010F85100885074013106802120765022B2B011A18104DED10ED3232002F3FED32323F3331305F5E5D715D712B5D5D71715D2B5D71015D213506232226351133111416333237113311036C9DE08EA8C54753B4A0C5CCE5B398030CFD347A67ED02C0FBC20000010000000601060F596BAF5F0F3CF5011B080000000000B47FC3BC00000000C005BDE3F776FA1B0D21094D0000000900010000000000000001000007BCFE5000000D1EF776F7430D2100010000000000000000000000000000001B06000100028800C8043200C10589006805FE00BF045600BF044A00BF05E100BF024E00BE05E900BF06370068046C00BF050F00BF044F0064050F0012046B00670419006F0475006F02F10050025000C5077800C504F700C504EA006F050900C5034600C502FE004504F700B900000020003A0074010C018E01C401FA0230024A0298034E03C0043C050E05480600068C072C0772078C082A0884091609A809EE0A460AB200010000001B0077000F004F0007000100100030007B000005E00D3300030001B800712BB800672BB8005D2BB800532B410E00000246001002460002007F02440001023F023C0001002B023E023CB2012BEFBB023D0001023D023CB2141F00BD023C0010023C000201870188B21A1F40B80189B310163900410E0188001001880002018301850002002B018401850002002B01860185B2022B80BB017F000100DF017C406601DFE016171CD4D516171C7B7C161B0F7B1F7B2F7B037B7C19D1D216171C767716171C6D7016171C6C6F16171C6B6E161B5F6E7F6B026B6E7F721A747514151C676A14151C666914151C6568141B8F65A065D06503656885711A1973167A4319217943192102B90352034AB2022B10
 BD034600500346000200400339B20B0E39B9FFC00338B20E0E39B9FFC00338B3090C3950410B032D0001033003310003002B02F402F30008002B02E3B2BE022BB802DCB3BE641F40B802DBB3313A3940B802DBB2232739B9FFC002DBB2141439B9FFC002D9B2333939B9FFC002D9B22A2E39B9FFC002D9B2212339B9FFC002D9B2171939B9FFC002D9B20E1139B9FFC002D0B2111139B902800278B2022B10412B02740050027400020010025D0050025D0002000B024C001B024C006B024C0003000B024B001B024B0002023A02040016001F023802040012001F023202310002002B023002310002002B022F0231001E001F022E0231B21E1F20B80231B2121639B901F701E3B2032B0A412001F4000101EF01EE0002002B01ED01EE0002002B01EC01EE0002002B01EB01EE0002002B01E801E70003002B01E601E70004002B01E501E70002002BFFCA01E3B30B1139B9411D01E70001007601E7008601E70002019401920002002B019301920002002B019201900006002B019101900007002B018F01900002002B018E0190B2022BBFBF01900001007001900080019000020157B292042BB80153B291042BB8014FB297042BB80136B37F032B40B80139B21218394109012401250003002B011001110003002B0104403BFC022B10F850F80240E61A1A399A9B032B9C9B042B9B970A2B9392042B9192062B9297042B9597042B9897022B9697032BA097019F97AF97BF9703BC034803490004002B0349B285022BB9FFC00343B31011391FBE0344000100E00344000103350334B2032B20411203330030033300400333005003330004033303140003002B033203140003002B032F0314B2032B2FBF03140001000002F3002002F3000202F0B2BD062BB802E2B2BF082BB9FFC002E1B2172839B9FFC002E1B20E1139B802E0B2870A2BB802DFB3BF042B40B802D7B323253940B802D7B2151639B9FFC002D2B2101139410D02C602C50006002B02C202C00006002B02C102C00006002B028CB285022BBC027602770004002B0277B285022BB9FFC00271B31011391FBE0272000100E00272000100400260B2151639B9FFC00260B20A0B39B9FFC0025FB2171839B9FFC0025EB2242939B9FFC0025AB31011391F4114025B000100E0025B0001000F024A0001001602490026024900020009022D0019022D0002FFC0022BB2111539B9FFC00229B30D113920B80223B2121639BD022202200002002B02210220B2042BC9411402200001021E02200003002B021F02200002002B01F601CF0003002B01E001B50020002101DF01B5B2262120B801DFB21E2139411A01DD01DC0002002B01DB01DC0002002B01DA01DC0002002B01D901DC0002002B01D801D70003002B01D701D60002002B01D601D4B2022BB0BF01D6000101D501D40002002B01D301
 D4B2022B69410B01D2000100B901D2000101D201D40002002B01D101D4B2022B20B801D0B2090C39B9FFCA01CFB30B11392BBF01A300A401A300B401A30003FFE001A6B2131539410D018D018C0003002B018B018C0003002B018A018C0002002B0156B286022BB80155B280032BB80154B286052BB80152B287052BB80151B288052BB80150B288032BB8014EB285032BB8014CB285022BB80138B287022BB80131B2BF032BB80122B285022BB8010E400B85022BFAFB042BFB85022BB8FFC0400AF51011391FF601E0F601B8FFC04009B1151C3940E51A1A39B8FFC0402EAF0D0F3900B40140B450B460B470B480B4C0B4D0B4E0B4F0B409B4AF641FE8E7042B898A072B8A8B062B8C8B062BB8FFC0B78E3032398E8D032BB8FFC040148D1E23398D8B022B8B85082B8281042B8180032BB8FFC0B3804A4D39B8FFC0B3803F4339B8FFC0B380343939B8FFC0B380282E39B8FFC0400C801D2339807E022B7F7E062BB8FFC0400C7D4549397D7E062B7E85082BB8FFC04020881E23398887022B8785082B8685062B83840A2B8485062B7085808502BF8501410A03530354000E03500351000E034E034F000E034EB203641F4155034C034D000F031B031C031D000C030F03100311000C030C030D030E000C0327030D0329000D0321031C0323000D031E03100320000D0327003C0321003C031E003C031B003C030F003C030C003C02AD02AE02AF000C02A102A202A3000C029E029F02A0000C02B9029F02BB000D02B302AE02B5000D02B002A202B2000D02B9003C02B3003C02B0003C02AD003C02A1003C029E003C02810282000E027E027F000E027C027D000E027CB203641F4175027A027B000F021002110212000C020D020E020F000C020102020203000C01FE01FF0200000C000B0211009B02110002000F021000500210009F021000BF021000DF02100005001F020D003F020D007F020D0003001F01FE0001021901FF021B000D0213020E0215000D0219003C0213003C0210003C020D003C0206003C0201003C01FE003C01BD01BE01BF000C01B101B201B3000C01AE01AF01B0000C01C901AF01CB000D01C301BE01C5000D01C001B201C2000D01C9003C01C3003C01C0003C01BD003C01B1003C01AE003C016D016E016F000C016101620163000C015E015F0160000C01610166B2171F1F41420166003F0166007F016600030179015F017B000D0173016E0175000D017001620172000D0179003C0173003C0170003C016D003C0166003C0161003C015E003C012C012D000F01260127000F01280129000E012A012B000E01180119000F01120113000F01140115000E01160117000E01050106000E01020103000E01000101000E010040A803641FFEFF0F1B37151836151535151234150F33150C3215093115063015032F15002E1526
 270E28270F2A2B0E2C2B0F22230E24230F1E1F0E201F0F0F10110C090A0B0C0607080C0304050C0001020C000340131A230003131F06031C1F1F0F3F0F7F0F032003011F034F03BF03FF03041B011D0D18071A0D1510170D1204140D901B012C3C2A3C283C263C243C223C203C1E3C1B3C183C153C123C0F3C093C063C033C003C503301B0124B004B5442B013014B004B5342B0332B4BB8032052B0322B4BB009505B58B101018E59B0332BB00288B8010054B00488B8020054B012435A5B58B80119B101018E851BB900010100B04B60858D59B1020042B00188B0235358B00188B0405158B02088B810005458B1020142595959B0374B5058B1020042592B1DB0644B5358B0801D59B0324B5358B0901D59004BB03A51B01B23422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B7374732B2B2B2B2B2B2B2B2B2B2B2B2B2BB1282645B02A4561B02C4560442B2B2B2B2B2B2B2B2B2B2B2B002B2B2BB8010045B0FE4561B8010223442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2BB8027C45B8027A4561B8027E23442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB8034E45B8034C4561B8035023442B2B7473012B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73742B2B2B0173742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B2B74752B2B732B2B2B2B2B2B2B2B2B2B2B2B2B752B2B2B2B2B73737473742B2B2B2B2B73742B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73732B2B2B732B73742B2B2B0073742B2B2B2B2B2B2B2B2B2B00732B2B2B2B2B2B2B2B73742B2B2B2B2B2B73742B2B2B2B2B2B2B2B732B2B2B2B2B2B2B2B737373732B2B2B2B2B2B2B2B2B2B2B2B2B2B732B2B2B732B0143581B592B2BB018B0234B53422B2B732B2B2B2B2B732B2B2B2B2B2B732B2B2B01B8017C20456A44B8017D20456A44B8017E20456A44B8017F20456A44B8018020456A44B8018120456A44B8018220456A44B8018320456A44B8018420456A44B8018520456A44B8018620456A44B8018720456A44B8018820456A44B8018920456A4473732B2B2B732B2BB8023B20456A44B8023C20456A44B8023D20456A44B8023E20456A44B8023F20456A44B8024020456A44B8024120456A44B8024220456A44B8024320456A44B8024420456A44B8024520456A44B8024620456A44B8024720456A44732B732B2B7373B109322B4BB05052424BB008524BB008505BB01A23424BB0C8524BB036505BB00C234200
 00>] def
 /CharStrings 27 dict dup begin
 /.notdef 0 def
/period 1 def
/slash 2 def
/C 3 def
/D 4 def
/E 5 def
/F 6 def
/H 7 def
/I 8 def
/N 9 def
/O 10 def
/P 11 def
/R 12 def
/S 13 def
/T 14 def
/a 15 def
/c 16 def
/e 17 def
/f 18 def
/l 19 def
/m 20 def
/n 21 def
/o 22 def
/p 23 def
/r 24 def
/t 25 def
/u 26 def
 end readonly def
 currentdict dup/FontName get exch definefont pop end
 %APLsfntEnd
 42/FontType resourcestatus{pop pop true}{false}ifelse
 {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if
 /FontInfo 1 dict dup begin
 /FSType 6 def
 end readonly def
 /FontType 1 def
 /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def
 /FontBBox{-2186 -1509 3361 2381}def
 /UniqueID 4093103 def
 currentdict currentfile eexec
 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C926597C1DAC1BA3798797E796C89ECAEC4435602C69EF8DE4A69515109638DF86B62BEC4457DE83568B76FE7007B6E4EE5AB24044DF701A0E80786FF5A0442608314C4D67449F1C71C7B26BF519E76991C89217E79051286067307808B177A4BAA62855564DA447AB7724154FF7FF8E4D1EE4183A709D09505AC11D22542E2BA5243D3D0A229D6DB5E58F7BD5FBC728EB20993E6D677244DD22B14ABAE8E34337E8CB159F1CEB69E09E91CB2B7B66E2ACF8672FE072C49A296182B3904DB2E9127FAE260C3A6895BE72C7B95E4040BCBD63C4579BD8AC0A2F2D0CC678823C022C926B46678F12AC11BB904FD370111889D82F19439482AD47A6CE8019E6C0FAC465D53FC8A8109BA89ED60AB54F09CBDCE7E5FF25C91E77BE99AD1BC50365CDAEF961AA69FA879705D189385AF3D2A2E15CFE6FEE452D55799B972E1BEDE33EB88A5523FEE5AE152017ED4F91BA8F95366304C4F7B0EEBD3CF44835C68B6A4A08C162BD9BB4E03C8DD674601DFEB4542C49C635E684C134E6635FE889C2F0D474278346D62237488451EFCB8521B342E233620D7939D0D63BFD3DAECFA595340D14A7E96140A9A5FF999B6E3A4657C26E6B1BFB1FB57A5FB6AFA86B83959194A7A784AE43D5C2BE1780A73FA0B1586A8AB8864CC071A8DADB8EAC7DE7F94456255A45CA4726C871CD78286F2DED37326549220B2350D5408AEAA4F798392AB73DB4C560D6C1FAF816186B8B255726F67D47A59CCB00BBE9C9C92F0D7BF03DFC727
 A777C08BEDE4EA39BE33E19B1D524A30A358E98BA5AE5072A4FABD993F0D68F1A65C23B0C92DCC0BD1229FB4E78A549ACEAC9A7B06504B2B1EDA15C80BEC120E44E62B3F4E99515A109FA3BB6A24A2CED9723E660709871209D9C05C26AC52B97FA040ACA3C094C885A9B0C1D3FE8E2249971FC61B9DFF68859C258FB44BC4042C3931DDFAE4E6CAA5081C25CB80199D71EB865BED21A84E7AF0C2A143065D37E325B85B299C05211A59ED7023D16D38CC00B651D316A19FAD21C327972D2D45F7EF03CB18B1CDE736518FEC59F630DC558FF85E2C8BC57A5FE32ACF5B7C2A10F76682C7DF2B1CDBBC71D3400830B826FB2BF647DCAD5C5828AED5CBF80EB2D0705111EF053F1BC7D6CEA9FCEBE66182DF89CFBE8A209E663DAA3E771EEF4970232AFDFB64F37D97F11BD17F7E2C0B72F36C59D346486EA1C37B3381854DCB3E2CA4BAFD69F6D86F59C21331864075E3AC26C9A462984BACBA91A6799E72AA904786585CDCC8089FF74F5532E3CCDB3A01A7276920E229DE53721A13A86E7C52F0CF09F052779F952605916BB82BA5CAE6844074A1834F01B361510184DBD25BD935CE7CD5537830CDCBDD363B47D13A2BBB6C38FDFF768638367DAA5EE0403285FD93D336D5ABD538E62835BF2873D5A73B83B836906687F7ACEE05742C7EBBA247BD14CD8184A8C5C17B8FDDA0FE0E0683185C221D4C8D4EDCE860187D9E87600038EB802C1F8164741D024D594FD74C3CDF0ED4D213ED0C7BBD511DF9A0EC2219F407CFB84F05846871F41A99F69E70BFDF37D1354A05F15CA99A8DA624C0CBC13D8AA9D19C106021F27E6E7AF3C5965ED96BFDF0D6F4E31FD1F8D69E9AB6D33F3E0B6CB6FF7AB9E955FF0B479D7074896BA3A7BC0B859DED2BE8EB7A2D65D8F6A1065173E97520C660F0C18533E34C9D7F314EB15B909C648A694ECCC12666B0AFCD13A42EB87D995C4BAA059668346D08286A1156170F7B5AF68C08ECA3C248B1749C971BB4EE5E38D6561EEF390743EAAAA3E7AFFD19CA946CEFCE32AD14A72E6F3591710881D3B2FFAEF4E455303E4D2AF5A7BF4993714A1CFE27EA9111C2A35B3B72B40B2B28D87E290E854D7AF9FAD4A5C4DFC361057DF489992848AD91D0FC7C4C385F3611F8FDB3E42FBB9E4C5B5F177309FD68903730B00D06FAF53952EC50EAA4986B79208AACC20682937D6ED8CED0796DD804D4E105752AF9F234FA4AE63292DDDEA3202D8AA0DA2DA73BE9E48DC0E622EBC7FBEC50224EF58480E2F6A219946EA812E739B4FDC43EECCEC9635C8338A4B62AD29FC2F5482BC4840DFB537664EDA6FCDC45CAD5E170E204F6A17AD04CA0D278C23F3CF20F309A11BC38E97D78A6551CA1EC6253A3293406965AC23D7D6BEAC9CFC7B51877497E77029A01B65B49520234489C2747C7630BA1E96E6ECD370B6EE38027395D35
 4A927FC17F338E98F9221FF270ECF3BA67C21154AC30FAC9853AB610769BBA1F0864943E23F5CAA72CD289AF38AB03FBB2443F1E3F3851459CE8945CACE501E284003305C2793A7289C308289E06C8DB2F23DE5093D7C1C097A31A1CC8434A8704C335005B48D92CE42ACC379820957554AA0AE1716F8368031CE5FEA1F3B3846C964DDD1D38B7EEE3A6A38612BADACFD42A92C9E7FF9F37313034A81829198943016368B95F2457FF6FDB67315E9057D858F558FDDD2DE471F20EEE2E7C87F16FB4090338AB3BEE40DBFFF0C432BBE3D0C8FFAD8714F2FE13A3E94988C86E585CD9C2F5448FA1779593305FCFB2ABE5C50259E2CFF2C0FFCF99032B48604808BE395B8DE4992335C0DBC262680877DDF1DDEF8A113FAA6BD8F53E810BCA3212BD8FFEA574BD23206AC3E4A9E4EC5374E748354C276E461A824C5D79C556CDDB7DEBD79A8B541AEE9B64626254A8B8670F08B3C49653C519AC9C5724F7B5613C04B54F27EDADA8CFB922C9D576D97D13705CD9F9461154223216DEFC09C419874D11B25D52F5B8D73A0E4940E90ACB8BBB38ECC1982B43ECDD0D27146E6EC965B5F5EB0C0E2A66DAEE3546B6AF48AA8016F9EBE408F635D524A696BF52793F9C34D5666A3FA5AC9C6E4F3E344AB2B2045FB4FF4AC7D7225619B90AE32BC14306EB84AA83E2DA62F4AC3DF23E52AF623292229B171036B2CBF687C8A15BDEB92F8152533F64F67427565B8400C9D7DF4FC7DE4B808B4D215D066AF5E8C9D329BBE18430E9EF193749D782C62AAACDC363A90EFEA95525EB0E874EA02BF23D9D70BEB3655DCE90262F3DA4EE37AD893BA8DD59C9EFE36875EA25E427A22EF22160A7F36225DB949B4C07898A2AFD0314B36F5E96C591D898156EA721BA87D1A68656A8DC58F037789989B9DB996639DB4FCCB68E52F44D922D2E2E6E0DDB73E7CD3A97EEDA92FEC5BF1B6DB4C37AF91E6E1DD525EA1230E9FAFA0E59EADC88CDA5CA6391614E970610B59DE41CD5182EB7165110C5EF516884B5C1B9B81D267B531A515F2DB97309B6D4159749692468B160374F9D306511BB487D9C7B0FC8D3450EA68E26AC33DE50E2B9061621CCB443434CCDFE085FA89A1E2AB491452426DB0829429EF215ECA53E1B67AF0608F112E3E48C728C09AAD35355FCE0687959F180ECD202C83CE894FD49F243DE876731729793B00A8CF16F9C9CA5A72757BA5089052FE6BD7457FE1E6DF87F93E664894146E5B808E5629C11BDBDAC0ADF66B6490AAC8A57FF0930AF584EE2B0A011F223D2A538A7BEE8DB66A3624291D68E828D600FE9380CEE029D2006495F0B1CFE14B666F414E1CDD2C632530E9570DC6685F98695E1D1811153238A6D0D4634393F0858AE5DCC21792D63BAFE6E7937DF99112B01A6C76C463C66442157CCA61D47140EFC1885DA3783A2602156DD71B7
 825718AD4C2450EF228C035220942B64AA8BA43CADAE7FA3CD1D278C045C89840009FE0D64EC4202CCDF66AB5D8E0FF031CC483497E571C37CD98AB2AEBB41B7A8B1D8DCB2DE1329B655B3F27C58BAB31582D3005B387D297949F55CBC0687C04D27F71A52DF7D1C3D4713AF1804420D841E5B087CEC169E4F7F146153CC8245A509444A74472C949F08E49D3C13A1479E93683DDAB0C6DDE4630D3FD8F360934316DD40D02909D61BC7AD3532F11E2AABD8E92334AE32B0F83F41F1AFDA59E0B167AA7991948DF638F9654484465218E5982A7DC3218E2FC274C612BEEBAD45DA0882436B5E7A807DC1B561718A78F05DF7C4127B890206E80ED6ED23069A16162C22C26577871B4DE0280495A064A3CC30AC6AD3447587BCB08AE1F2BD45333FF135F2A2E1DEE319C92B2542DF807A157C6B16F3FCEEA10DCACD1D8BF9CB995EDE6A7745207B740DC721843838F5EBE5D4FC7F20D9DCC82ECE9BB4E80FD5E56F58F0BCFD4FC66D8BC472AE203DB59D649F0F419B7019170726349E9C15E2998D0373A54100298657721BA920BBBE5295D0E4E2B6FF46C57BA1926B81FCBB3725080D5A85B59D9EB95E7B65D04A2A789CE666E7
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 0000000000000000000000000000000000000000000000000000000000000000
 cleartomark end
 %APLT1End
 %RBIEndFontSubset
/LucidaGrande cguidfix
/F1.1/LucidaGrande renmfont
[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeA { { 1.8008  exp } bind  exec} bind 
def 
/MatrixA [ 0.9642 1.0000 0.8249 ] def 
/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def 
/DecodeLMN [ { 0.9857  mul} bind { 1.0000  mul} bind { 1.3202  mul} bind ] def 
end ] /Cs1 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ 
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 

{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse 
 1 index 1 index ge { exch pop } { pop } ifelse < 
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000001010101010101010101010101
0101010101010101010101010101010101010101010101020202020202020202
0202020202020202020202020202020202030303030303030303030303030303
0303030303030304040404040404040404040404040404040404050505050505
0505050505050505050506060606060606060606060606060607070707070707
0707070707070708080808080808080808080808090909090909090909090909
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
1010101010111111111111111112121212121212121313131313131313141414
1414141414151515151515151616161616161616171717171717171818181818
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
2323232323242424242425252525252526262626262727272727282828282829
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
2f2f303030303131313131323232323333333333343434343535353535363636
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
4f50505051515151525252535353535454545555555656565657575758585859
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
>  dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling 
 cvi 3 index exch get 4 -1 roll 3 -1 roll get
 dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind 
] def 
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs2 exch/ColorSpace dr pop
[ /CIEBasedABC 4 dict dup begin 
/WhitePoint [ 0.9505 1.0000 1.0891 ] def 
/DecodeABC [ { 1.8008  exp } bind { 1.8008  exp } bind { 1.8008  exp } bind ] def 
/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def 
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def 
end ] /Cs3 exch/ColorSpace dr pop
%%EndPageSetup
/Cs1 SC
1 sc
q
0 0 522 342 rc
0 342 m
522 342 l
522 0 l
0 0 l
h
f
/Cs2 SC
92 0 0 57 194 285 cm
BI
/Width 276
/Height 171
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$
JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(ns
Jc>BBJc:6"Jc<7[aT'6ZT)\9YJc5<@Jc1/uJc31Yn,D&@`W)t<p&<88Qi)F4Jc()sf_j.qo)@nR`W*LK
q#9a\p&+L[Jbo<@JbjroJbm(Vqtos^n,<%\p&E#2\c;-sq#'^[qtg3cJbT9@pjr3kpjr4Xq#:*^qXsa\
r9sUWs2G#Ts7lTarVl`iqt9g_q=saCpRq52p4;pgp>P`*p\=O_q==CWqtp<arV6Bks2G#]s7lTarVl`l
qtp6eq>U0^p\sm]p%@tJo:#6$nq$@_o%rs1oCDPKp&"I[p\Xabq=XU`qtp<arVlfnrlb>bs8N#grVl`i
qu6Hkq=saXpAXa^o_\7To'c+;n:C([n:C)cnF,oBo)A7Uo`"OVpA"F^q>U6fqtp<arVQT;s3CZArq66h
r;6BgqYp<iq"XU\p&"C\oD\=Xnb_hHmud$hmXaeWma^aun+H2Lnc&+YoD%tWp%\:\q#:*aqYpBhr;6Hc
rmCbqs7lTgrVl`oqtp6eq=s^]p&=U_o)%tVnFc8LmecDNm/-,GlLjD7k^hrKk^hsVkkjW;lMg,Hm/HDL
mecJMnG_tTo)&(Yp%\:\q=sgcqu6NmrVQQgrm^tts8N#grVQKkqYU*fq"XR^o`"I]o)A.Un,DbSmJcJI
lhK`Dkk4-9k+1UbjalNEjlGOrk54?=kkOE;li-8MmJcPQn,)VRo)A7[o_A.Wq#:*dqYpBkrV6?grm^tt
s8N#jrVl`iqYp9ep\XX_o_\1Xn,DhUmf)VQm/-,Gl2KoDkPjW=jSS!7igo%ZiITs=iT/tjir8!5jSS*=
kPOKBl2L#Gm/HDOmf)_Tn,DhUnb_tXp&=^_q"X^br;QWkrVQTDs4@;MrqQHkr;QTmqYU*fq#:$epAX^`
oD\=[nc&%Wn,DbSli-2Kl2KoGk5OKAjSS!:ir7p3i;VX5i;VX5hO<8Oh1=C5h;6ubhYuI4htZ./iVqj9
j87p:jo4HBkl0iGlMg,Kmf)\SnG_tWo)A7[o`"O_p\Xabq>U6iqu6NgrVQTJs4@;MrqQHhqu6Hkq>U0g
p\smco`"I]o)A1Vn,D\Qli-/Jkl0cEjo4??j87g7hu;R5hYu@+h"]V#fq?uKfR_\+f\tK^g%a:rh#?./
hYuI4hu;R5iVqm:jSn9?kPj]El2L#JmJHAOnc&+YoD\F^pAXgcq#:*gqYp?jqtU-ern@D(s8N#prVl`l
qu6Hkq#:$epAX^`oD\=[nG_nUmf)SPlMg&IkPjWCjSn-;i;;F2hYu@1h#?(-gABS&f`'M%f(deme>C]G
dt,u!e*YWWeGIeqf)F:uf`'S'gA]k+h#?./hYZ40i;V^7jSn9?kPj`Fli-8Mmf)\SnG`"XoD\C]pAXgc
q#:-hqYpBhr;QZlrn@D.s8N#mrVl`oqu6Hkq>U0gp\smco`"F\nc&"VnG_hSli-,Ik5OKAir7p6hu;I2
h#?"+f`'J$ec+(te,IepdJM;]c_Jd:c@O8lcKELGchPlddJhSne,Ikrec+/!fDaJ&h#?.,hu;U6ir8'=
kPj]Eli-;NnG_nUnc&+Yo`"O_p\sseq>U6iqu6NjrVQTMs5!_SrqQHkr;QTmq>U0gp\smco`"I]nc&%W
n,D\Qli-2Kk5OH@ir7m8hYu@1gA]e)f`'J$eGdqrdf.Ykci22dbl5fbb*pG'aaqQbakk/=b5TT]bl5la
ci2>kdf._pec+/!f`'S'gA]q-hYuI4ir8'=k5OZFli-8Mn,DhUnc&.Zp&=[ap\sseq>U9jr;6Hirn[V1
s8N#prVl`oqu6Hkq>U0gp\sjbo`"C[nG_nUmf)POlMg#HjSn-;hu;I2h#?%,fDa>"e,Ibod/MAjcMl)f
bl5c^ao9?[`r<sG`2pk-_h#^V_skS4`;[aT`r=$Xans6[bl5ldcMl/hd/MGle,InsfDaM'g]$%.hu;X7
jSnBBl2L#Gmf)_Tnc&.Zp&=^bq#:*gqYpBkr;QZlrn[V1s8N#prVQKkqYp6gpAXaaoD\=XnG_hSli-)H
k5OH@i;VU4h>Z(+f)F1udJhMlci2/fb5TN^`r<sV`;[XQ_>D%F^[f(;]Rd_H]Rd`\]_/u;^\GVD_>_=N
`;[aT`r=*ZbPo`bci2;jdJhYpf)F>$h>Z=2i;Vg:jo4HBli-;KnG`"XoD\F^pAXg`qYpBkrVQTMs5!_M
rVl]nqYp<ip\smcp&=O]nc&"VmJcGNlMfrFj8S!9hYu:/g&BP$e,I_nci2/fb5TK]`r<pU_Z%@M^](qG
]_f>?])K88\"gB_[Xkl<[cb*o\,Nr;])0,=]`,VD^])(K_Z%LQ`r='Yb5TWaci2;je,Insg&Bb*hYuI4
jSn<@lMg,KmJcSRnc&+Yp&=[ap\t!fqYpBerS@M3s8N#prVl`oqYU*fp\smco`"@Zn,DbSli-2Kkl0ZB
iVqa6g]#n*f)F(rd/M>ibPoW_`r<mT_>_4K^AbeE]DfA?\Gir9[JmQ4Zi79-Z(nOSY^s$0Yii7iZ2:j+
Zi7?2[JmW6\,Nr;]DfMC^AbnH_>_@O`r='YbPofdci2>kf)F>$g]$+0ir8$<kl0iGli->On,DhUo`"O_
p\t!cqYU3irVQTSs5<qVrqlZnr;QQlq#:$ep&=U_o)A.XmJcGNkl0`DjSn*:h>Z1.f)F.tci25hbPoT^
_u@OP^](tH]DfA?[JmQ4ZMq*-YPt^(Xo>F$X8]-uWM$2@W.CmuW8soVWW&psX8]4"Xo>L&YPtd*ZMq30
[Jm`9]DfPD^])(K_u@aVb5T]cci2Dmf)FG'hYuI4jSn<@kl0oImf)_To)A7[p&=^bq>U6fr;QZlro=%:
s8N#srVl`oqu6Ejq#:$ep&=R^nG_nUm/H;Lk5OH@iVqa6g]#n*e,I_nc2Pf``r<mT_#D%H]Df;=[JmN3
Yl:g)XT#7!WW&jqVZ*FkV#-qaU8FW8Tn/ngU$\QHUAgqeV#I4iVZ*OnWW&psXT#C%Yl;!.[JmZ7]DfMC
_#D7N`r='Yc2Q)he,J&"h#?41iVqp;k5OZFm/HJQnG`%Yp&=^bq#:*gqu6NmrVQTSs5<qVrr2lqr;QTm
q>U0gp\sgao)A+Wmf)POl2KfDir7j7h#?"+f)F%qc2Poc`;[UP^](kE\Gio8ZMq*-Y5YL$WW&doU]."e
U&L_^TDP2VS>Md,Rt7&[S*c^<SGo)YTDP;\U&LecU]..iW;`jsY5Y[)ZMq92\Gj,>^])+L`;[sZcMl2i
f)FA%h#?41ir8'=l2L#Jmf)\So)A:\p\sseq>U9jr;QZlro=%:s8N#srVl`oqYp9hp\smco)A1Yn,D\Q
l2KlFir7m8hYu1,ec*tqcMkrb`W![P^&GVB[/RB1YPtX&WW&doUAgkcTDkG]SGnuVQi<<MPl$[DP5CB@
OF`LEOF`MYOT(C>P5^[EPl?sIQi<HQS,T#YTDkP`UAh%hW;`mtYPtj,[/RZ9^&GhH`W"!YcMl5jec+5#
hYuI4ir8-?l2L&Kn,DkVo)A@^p\sseqYpBkrVQTSs5X.YrqlZnr;QQlp\smcp&=L\nG_nUlMg#Hk5O<<
hYu=0f)F.tci2,e`r<jS^&GSA[f3N1Xo>C#VZ*CjU&L\`SGo#WQi<<MQ2ZpFOSb+<NrG%;N2DMaMh-e;
MsZH"N;eh9Nr+n:OT(CAQ2[*KQi<KRSc58\U&LkeVZ*XqY5Y[)[f3i:^&GnJa8X9]ci2Dmf)FJ(hYuI4
k5OTDlMg8OnG_tWp&=[ap\t$gqtp?kro=%=s8N#srVl`oqu6Hkp\smco`"C[nG_kTl2KlFjSn*:h>Z.-
eGdkpcMkoa_u@FM\c0&:Z2Up*WrApqUAghbT)P2XQi<9LP5^RBO8b.<N;eb7MZ/G2LSKTTL4P)1L?F<j
L]3/0MZ/P5N;eh9O8b:@P5^aGR/WQRT)PD^UAh(iWrB1#Z2V01\c0AC`;[jWcMl5jeGe2$h#?72jSn?A
l2L,Mn,DkVo`"O_p\t$gqu6NmrVlfVs5X.Yrr2lqr;QTmqYp6gpAX^`nG_kTm/H5Jjo46<hYu7.fDa1s
cMl#d_u@IN]`,8:Z2Up*VuELkT`1P^Rf8WPP5^RBO8b(:MZ/G2K`6W'K):,uJ,XtqIt<*#It<+7J,Xut
J,XutJc:9#KDpQ'M#N81MuJe:OoCOCQN!<OT)PD^V#I:kY5Y[)Zi7W:^]).MbPofddJhbsgA]t.iVqs<
kl0rJmf)_To`"O_p\t$gqu6NmrVlfVs5X.Yrr2lqr;QQlq>U-fp&=O]nG_hSli-)HjSn*:h>Z+,f)F%q
bl5``_>_.I\c/l5Y5YI#V#I(eT)P,VQ2ZsGO8b+;MZ/A0K`6W'JGt&tIf=cpI/\JfH%C6lH%C8(H2`0i
I/\QnIf=irJGt3#L&Qi+MZ/S6O8b=AQN!9NT)PG_V#ICnXo>U)\c0;A_>_RUc2Q)hf)FA%h>Z@3jSn?A
li-;NnG`"Xp&=^bq>U9jr;QZoro=%=s8N#srVl`oqYp<ipAX^`o)A.XmJcGNk5OB>hu;C0f`'A!ci2)d
`r<dQ]Df5;Yl:^&VuE@gSc5,XPl?gEO8b%9M#N/.Jc:3!J,XipHiA?jGlDmcFea&0FFeObFQ[cFFoHUa
GlE$gHiAElJ,XutJc:E'M#N;2O8b=APl@0OT)PD^VuEarYl;'0])KME`r=0\ci2DmfDaP(hu;[8k5O]G
mJcVSo)A=]pAXmequ6NmrVlfVs5X.Yrr2lqqu6Hkq>U*eo`"C[n,DYPl2KfDj8Rs8gA]\&dJhAhaSs*V
^&GM?Z2Ug'VZ*=hT)P/WQ2ZmENW+k8K`6T&J,XlqHN&0gFoHL^Er0hQDl.E'DLl\VDX)-:Du4MQErL.Z
FoHXbHN&?lJ,Y'!K`6o/NrG.>Q2[3NT)PJ`VuEarZ2V63^&GqKa8X<^dJh\qgA^"/ir8'=l2L&Kn,DkV
o`"R`q>U6iqu6Qnro=%=s8N#srVl]nqYp<ip&=R^nG_kTli-/JjSn-;hYu1,eGdhobPoN\_>_(G[JmB/
WW&^mT`1DZQN!'HNrFq8L]2l(J,XipGlDmcFT-=[E;jbSD>nANCSPWqC4U,NC?K@2C]8/LD>nGPE;jnW
FT-I_GlE*iIf=otL]321NrG4@QN!?PT`1eeWW'+#[Jmf;_>_IRbPolfec+5#hYuL5jSnECli->OnG`%Y
p&=ddqYpBkrVlfVs5X.Yrr2lqqu6Hkq#9scoD\7Ymf)POkl0WAi;VR3fDa7uci2#b`;[ON\c/r7Y5Y<t
UAgb`Qi<3JO8b%9LAlf(J,XfoH2_pbEr0eSD#S5LCAqoDBDuMBAV"EDAV"F[Ac?<=BDuWECAr#JD>S8N
ErL1[H2`3jJ,Y'!L]321O8b@BQi<TUUAh%hY5Yd,\c0AC`;[jWci2DmfDaV*i;Vd9kl0lHmf)_ToD\F^
q#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_hSlMg#Hir7j7h#>k'df.Sl`r<jS^](Y?Yl:^&UAgb`
Rf8NMO8b(:K`6Q%J,X]lFoHI]E;jbSD#S,IB)ZB@A,]s:@A@4]@"D^:@-:qs@K'a8A,^'=BDuTDD#S>O
E;jqXG5cacJ,Y'!K`6o/O8b@BRf8oXUAh4mYl;'0^]).M`r=<`df.erh#?41ir80@lMg2MnG`%Yo`"Xb
q>U9jrVlfVs5X.Yrr2lqqu6Ejp\sgao)A.Xm/H8KkPjH>hYu:/eGdhoc2P]]_>_.I[/R6-WW&RiSGnoT
OoC@>M#N#*If=]nFoHI]E;jbSC]8&IAc?6>@fBd7?iFC/?)_([>_-.2>j>Sn?2e10?iFI4@fBm:Ac?EC
C]85NE;jqXFoHaeJ,Y'!M#NA4OoCaISGo2\WW'+#[/Rc<_>_FQc2Q,ieGe5%hYuL5kPj`Fm/HMRoD\C]
p\t!fqu6Qnro=%=s8N#srVl]nq>U-fo`"F\nG_eRl2KiEi;VR3gA]S#d/M8g`;[RO]`,59XT#*rT`1G[
Q2ZjDMZ/A0JGsrqH2_j`E;jbSCAqoGB)Z6<@/aO4?2e+.>Q.g'=b0_,=b0`C=o2D%>Q.n,?2e41@/aU6
B)ZKCCAr,ME;jnWH2`3jJGt<&MuJe:Q2[6OT`1hfXo>X*]`,_G`;\![ci2DmgA]q-i;Vm<kl0rJnG`%Y
o`"Uaq>U9jrVlfVs5X.Yrr2lqqYp9hp\sgao)A+Wm/H5Jjo43;h#?"+df.Pkb5T9W^&GSAYl:[%V#Hqa
Qi<0IMuJJ1K)U5uH2_scE;j_RCAqfDA,B[5?2e%,=T2D$<r5mr<.S#"<.S$6<;ons<rQ2"=T2M'>l.q.
A,^'=CAr)LE;k"ZH2`9lK)UQ)MuJn=R/WZUV#IFoYl;34^Ac"Kb5T]cdf.r!h>Z@3jo4KCm/HJQo)A:\
p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"C[n,DYPkl0ZBi;VO2g&BCuc2Pia_>_.I\,NT1WW&[lS,S`Q
OoC4:K`6N$HiA3fErKtUC]8#HA,]p9?iF:/=oMM%<rQ+u<;ohq;Q3NE;1VSq;=.6[;Z9Vo<;ons<rQ2"
=oMY)?iFL5A,^0@CAr,MErL:^HiAQpL&Qr.OoC[GS,T2^WW'+#\,O&>_>_RUc2Q,ig&Be+i;Vg:kl0oI
n,DnWo`"Uaq>U6irVlfVs5X.Yrr2lqqYp9hp\sganc&"Vli-,IjSn*:h#>t*d/M8ga8WmR]Df8<Y5YC!
U&LM[Pl?aCL]2r*J,X]lFT-4XD#S/JB)Z3;?N+70=oMM%<W5qr;Ys:f:Ou;m:Ou=,:]!uf;Z9Vo<W6)!
=oM_+?iFI4B)ZKCD#SAPFT-OaJ,Y*"L]3A6Pl@-NU&LthY5Ym/]DfVFa8X<^d/M\sg]$.1jSnBBli-AP
o)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zn,DVOkPjQAhu;@/fDa.rbl5]__#CtF[Jm<-VZ*7f
Qi<0INrFb3Jc:&rFoHF\DuOGLAc?-;?iF:/=oMG#<;oep;#=&c9rUg;9S#lg9^5=N:&[rc;#XAl;uTer
=oM\*?iFL5Ac?BBDuOeVFoHdfJGt9%NrG4@Qi<ZWVuEgt[Jmf;_#DFSbl5ugfDaP(hu;^9kl0lHn,DkV
oD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc&"VlMfuGjSn$8gA]\&d/M5f`r<dQ])K)9XT#*rTDk/U
OoC==K`6K#HiA-dE;j_RB)Z<>?iF@1>5hY'<;oem:]=)f9VY428qBTc9'8hG9`@c`:]=8k<;p#!>5hh,
?iFR7B)ZZHEW1(ZHiAQpK`6r0OT(RFTDk\dXT#U+])KME`r=0\d/MVqgA]t.jSnBBlMg8Onc&.Zp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)MNkPjN@hYu7.ec*qpbPoK[^](eCZi7$)V#I"cQ2ZmEMuJA.
J,XcnErL"VD#S#F@fBa6>5hY'<rQ"r;#X8i9`@]a9)D2Z8:a<_8:a=s8H)3[9)_K_9`@ie;>sJm<rQ5#
>5hn.@fBs<D#SAPErLCaIf>!!MuJh;Q2[ETV>dOpZi7N7^])4Ob5Tceec+8$hYuR7kPjcGmf)_ToD\L`
q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7g6gA]Y%ci2&c`;[IL\,N]4WrAdmSc4iPO8b%9
Jc:)sGlD^^DZ4DMA,]m8?2dt*<W5qr;#X5h9`@Z`8cD8U7Y+$[7Y+%l7fGsX8cD?]9`@fd;#XDm<rQ5#
?2e72A,^6BD>nPSGlE*iJc:Q+NrG7ASc5D`WrB='\Gj2@`;[pYci2Jog&Bk-ir8*>l2L,MnG`%Yp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>hYu4-eGdenao96X^&GM?ZMpm'U]-h`PQ$UAM>i&)
HiA6gEW0hSC&VT@?iF=0=8l5!;Z9Ml:&[fb8cD9[8,G`S7"IaW7"Ibk7/fXS8,c'Y8cDB^:&[ug;Z9\q
=8lJ(?iFO6C&VuKEW11]I/\ZqM>iP7PQ%-PU].:mZMqB5^&GtLb5T`deGe/#hYuO6k5OWEmf)_ToD\L`
q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL\,N]4WW&XkSGn]NNW+_4
JGsopFoH@ZD#S,I@K'U4>Q.\&<;obo:]=&e9)_B\8,c!W7&E>&6\.UU6g[8<7/f[T8,c'Y9)_N`:]=5j
<;oqt>Q.t.@K's>C]8;PFoH^dJGt?'NW,+?SGo8^WW'4&\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Y
p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==
LAl]%H2_pbE;jYPBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K?N6@hIS6@hJg6N0@O7/fXS7fH!Y9E%Zb
:]=8k<W62$?2e72BDu]GE;jtYHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#h>ZF5k5OWEmf)_T
oD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL\,NZ3W;`OjSGnZM
N;eS2J,X`mFT-4XCAqlF@/aI2>5hP$;uTSl:&[ca8cD3Y7K,^P6iKER6%M=Q6%M>k62O"J6iKLQ7K,dU
8cDB^:&[rf;Z9\q>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>
l2L,MnG`%Yp\t!fqYpHmro=%@s8N#prVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$
UAg\^OoC==LAl]%H2_pbDuOMNB)Z3;?2e%,<W5nq:]=&e9)_E]7fGjU7/K@N6EEG'5_21O5k%&96N0@O
7/fXS7fH!Y9E%Wa:]=8k<W62$>lJ.1B)ZTFDuOkXHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#
h>ZF5k5OWEmf)_ToD\L`q>U6irVQTVs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMB)Z3;>lIn*<;oep:]=)f9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_Qa:]=8k<;p&"?2e72B)ZNDDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\
OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f
5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aV
cMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+
e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO
6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"i
Yl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kT
kl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`
8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%
N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQl
q#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*
<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp
=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjd
qYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;
LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX
9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KC
mf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1
W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K
6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;l
f`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYl
ao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#
5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<
S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!d
o)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo
:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bW
HN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#s
rVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD
@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*
@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpEl
rVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%
H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O
7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+
iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\
OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f
5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aV
cMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+
e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO
6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"i
Yl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kT
kl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`
8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%
N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQl
q#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*
<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp
=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjd
qYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;
LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX
9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KC
mf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1
W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K
6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;l
f`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYl
ao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#
5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<
S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!d
o)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo
:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bW
HN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#s
rVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD
@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*
@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpEl
rVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%
H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O
7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+
iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\
OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f
5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aV
cMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+
e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO
6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"i
Yl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kT
kl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`
8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%
N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQl
q#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*
<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp
=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjd
qYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;
LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX
9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KC
mf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1
W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K
6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;l
f`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYl
ao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#
5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<
S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!d
o)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo
:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bW
HN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#s
rVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD
@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*
@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpEl
rVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%
H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O
7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+
iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs*t
~> %APLeod
EI
92 0 0 57 0 285 cm
BI
/Width 276
/Height 171
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$
JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(ns
Jc>BBJc:6"Jc<7[aT'6ZT)\9YJc5<@Jc1/uJc31Yn,D&@`W)t<p&<88Qi)F4Jc()sf_j.qo)@nR`W*LK
q#9a\p&+L[Jbo<@JbjroJbm(Vqtos^n,<%\p&E#2\c;-sq#'^[qtg3cJbT9@pjr3kpjr4Xq#:*^qXsa\
r9sUWs2G#Ts7lTarVl`iqt9g_q=saCpRq52p4;pgp>P`*p\=O_q==CWqtp<arV6Bks2G#]s7lTarVl`l
qtp6eq>U0^p\sm]p%@tJo:#6$nq$@_o%rs1oCDPKp&"I[p\Xabq=XU`qtp<arVlfnrlb>bs8N#grVl`i
qu6Hkq=saXpAXa^o_\7To'c+;n:C([n:C)cnF,oBo)A7Uo`"OVpA"F^q>U6fqtp<arVQT;s3CZArq66h
r;6BgqYp<iq"XU\p&"C\oD\=Xnb_hHmud$hmXaeWma^aun+H2Lnc&+YoD%tWp%\:\q#:*aqYpBhr;6Hc
rmCbqs7lTgrVl`oqtp6eq=s^]p&=U_o)%tVnFc8LmecDNm/-,GlLjD7k^hrKk^hsVkkjW;lMg,Hm/HDL
mecJMnG_tTo)&(Yp%\:\q=sgcqu6NmrVQQgrm^tts8N#grVQKkqYU*fq"XR^o`"I]o)A.Un,DbSmJcJI
lhK`Dkk4-9k+1UbjalNEjlGOrk54?=kkOE;li-8MmJcPQn,)VRo)A7[o_A.Wq#:*dqYpBkrV6?grm^tt
s8N#jrVl`iqYp9ep\XX_o_\1Xn,DhUmf)VQm/-,Gl2KoDkPjW=jSS!7igo%ZiITs=iT/tjir8!5jSS*=
kPOKBl2L#Gm/HDOmf)_Tn,DhUnb_tXp&=^_q"X^br;QWkrVQTDs4@;MrqQHkr;QTmqYU*fq#:$epAX^`
oD\=[nc&%Wn,DbSli-2Kl2KoGk5OKAjSS!:ir7p3i;VX5i;VX5hO<8Oh1=C5h;6ubhYuI4htZ./iVqj9
j87p:jo4HBkl0iGlMg,Kmf)\SnG_tWo)A7[o`"O_p\Xabq>U6iqu6NgrVQTJs4@;MrqQHhqu6Hkq>U0g
p\smco`"I]o)A1Vn,D\Qli-/Jkl0cEjo4??j87g7hu;R5hYu@+h"]V#fq?uKfR_\+f\tK^g%a:rh#?./
hYuI4hu;R5iVqm:jSn9?kPj]El2L#JmJHAOnc&+YoD\F^pAXgcq#:*gqYp?jqtU-ern@D(s8N#prVl`l
qu6Hkq#:$epAX^`oD\=[nG_nUmf)SPlMg&IkPjWCjSn-;i;;F2hYu@1h#?(-gABS&f`'M%f(deme>C]G
dt,u!e*YWWeGIeqf)F:uf`'S'gA]k+h#?./hYZ40i;V^7jSn9?kPj`Fli-8Mmf)\SnG`"XoD\C]pAXgc
q#:-hqYpBhr;QZlrn@D.s8N#mrVl`oqu6Hkq>U0gp\smco`"F\nc&"VnG_hSli-,Ik5OKAir7p6hu;I2
h#?"+f`'J$ec+(te,IepdJM;]c_Jd:c@O8lcKELGchPlddJhSne,Ikrec+/!fDaJ&h#?.,hu;U6ir8'=
kPj]Eli-;NnG_nUnc&+Yo`"O_p\sseq>U6iqu6NjrVQTMs5!_SrqQHkr;QTmq>U0gp\smco`"I]nc&%W
n,D\Qli-2Kk5OH@ir7m8hYu@1gA]e)f`'J$eGdqrdf.Ykci22dbl5fbb*pG'aaqQbakk/=b5TT]bl5la
ci2>kdf._pec+/!f`'S'gA]q-hYuI4ir8'=k5OZFli-8Mn,DhUnc&.Zp&=[ap\sseq>U9jr;6Hirn[V1
s8N#prVl`oqu6Hkq>U0gp\sjbo`"C[nG_nUmf)POlMg#HjSn-;hu;I2h#?%,fDa>"e,Ibod/MAjcMl)f
bl5c^ao9?[`r<sG`2pk-_h#^V_skS4`;[aT`r=$Xans6[bl5ldcMl/hd/MGle,InsfDaM'g]$%.hu;X7
jSnBBl2L#Gmf)_Tnc&.Zp&=^bq#:*gqYpBkr;QZlrn[V1s8N#prVQKkqYp6gpAXaaoD\=XnG_hSli-)H
k5OH@i;VU4h>Z(+f)F1udJhMlci2/fb5TN^`r<sV`;[XQ_>D%F^[f(;]Rd_H]Rd`\]_/u;^\GVD_>_=N
`;[aT`r=*ZbPo`bci2;jdJhYpf)F>$h>Z=2i;Vg:jo4HBli-;KnG`"XoD\F^pAXg`qYpBkrVQTMs5!_M
rVl]nqYp<ip\smcp&=O]nc&"VmJcGNlMfrFj8S!9hYu:/g&BP$e,I_nci2/fb5TK]`r<pU_Z%@M^](qG
]_f>?])K88\"gB_[Xkl<[cb*o\,Nr;])0,=]`,VD^])(K_Z%LQ`r='Yb5TWaci2;je,Insg&Bb*hYuI4
jSn<@lMg,KmJcSRnc&+Yp&=[ap\t!fqYpBerS@M3s8N#prVl`oqYU*fp\smco`"@Zn,DbSli-2Kkl0ZB
iVqa6g]#n*f)F(rd/M>ibPoW_`r<mT_>_4K^AbeE]DfA?\Gir9[JmQ4Zi79-Z(nOSY^s$0Yii7iZ2:j+
Zi7?2[JmW6\,Nr;]DfMC^AbnH_>_@O`r='YbPofdci2>kf)F>$g]$+0ir8$<kl0iGli->On,DhUo`"O_
p\t!cqYU3irVQTSs5<qVrqlZnr;QQlq#:$ep&=U_o)A.XmJcGNkl0`DjSn*:h>Z1.f)F.tci25hbPoT^
_u@OP^](tH]DfA?[JmQ4ZMq*-YPt^(Xo>F$X8]-uWM$2@W.CmuW8soVWW&psX8]4"Xo>L&YPtd*ZMq30
[Jm`9]DfPD^])(K_u@aVb5T]cci2Dmf)FG'hYuI4jSn<@kl0oImf)_To)A7[p&=^bq>U6fr;QZlro=%:
s8N#srVl`oqu6Ejq#:$ep&=R^nG_nUm/H;Lk5OH@iVqa6g]#n*e,I_nc2Pf``r<mT_#D%H]Df;=[JmN3
Yl:g)XT#7!WW&jqVZ*FkV#-qaU8FW8Tn/ngU$\QHUAgqeV#I4iVZ*OnWW&psXT#C%Yl;!.[JmZ7]DfMC
_#D7N`r='Yc2Q)he,J&"h#?41iVqp;k5OZFm/HJQnG`%Yp&=^bq#:*gqu6NmrVQTSs5<qVrr2lqr;QTm
q>U0gp\sgao)A+Wmf)POl2KfDir7j7h#?"+f)F%qc2Poc`;[UP^](kE\Gio8ZMq*-Y5YL$WW&doU]."e
U&L_^TDP2VS>Md,Rt7&[S*c^<SGo)YTDP;\U&LecU]..iW;`jsY5Y[)ZMq92\Gj,>^])+L`;[sZcMl2i
f)FA%h#?41ir8'=l2L#Jmf)\So)A:\p\sseq>U9jr;QZlro=%:s8N#srVl`oqYp9hp\smco)A1Yn,D\Q
l2KlFir7m8hYu1,ec*tqcMkrb`W![P^&GVB[/RB1YPtX&WW&doUAgkcTDkG]SGnuVQi<<MPl$[DP5CB@
OF`LEOF`MYOT(C>P5^[EPl?sIQi<HQS,T#YTDkP`UAh%hW;`mtYPtj,[/RZ9^&GhH`W"!YcMl5jec+5#
hYuI4ir8-?l2L&Kn,DkVo)A@^p\sseqYpBkrVQTSs5X.YrqlZnr;QQlp\smcp&=L\nG_nUlMg#Hk5O<<
hYu=0f)F.tci2,e`r<jS^&GSA[f3N1Xo>C#VZ*CjU&L\`SGo#WQi<<MQ2ZpFOSb+<NrG%;N2DMaMh-e;
MsZH"N;eh9Nr+n:OT(CAQ2[*KQi<KRSc58\U&LkeVZ*XqY5Y[)[f3i:^&GnJa8X9]ci2Dmf)FJ(hYuI4
k5OTDlMg8OnG_tWp&=[ap\t$gqtp?kro=%=s8N#srVl`oqu6Hkp\smco`"C[nG_kTl2KlFjSn*:h>Z.-
eGdkpcMkoa_u@FM\c0&:Z2Up*WrApqUAghbT)P2XQi<9LP5^RBO8b.<N;eb7MZ/G2LSKTTL4P)1L?F<j
L]3/0MZ/P5N;eh9O8b:@P5^aGR/WQRT)PD^UAh(iWrB1#Z2V01\c0AC`;[jWcMl5jeGe2$h#?72jSn?A
l2L,Mn,DkVo`"O_p\t$gqu6NmrVlfVs5X.Yrr2lqr;QTmqYp6gpAX^`nG_kTm/H5Jjo46<hYu7.fDa1s
cMl#d_u@IN]`,8:Z2Up*VuELkT`1P^Rf8WPP5^RBO8b(:MZ/G2K`6W'K):,uJ,XtqIt<*#It<+7J,Xut
J,XutJc:9#KDpQ'M#N81MuJe:OoCOCQN!<OT)PD^V#I:kY5Y[)Zi7W:^]).MbPofddJhbsgA]t.iVqs<
kl0rJmf)_To`"O_p\t$gqu6NmrVlfVs5X.Yrr2lqr;QQlq>U-fp&=O]nG_hSli-)HjSn*:h>Z+,f)F%q
bl5``_>_.I\c/l5Y5YI#V#I(eT)P,VQ2ZsGO8b+;MZ/A0K`6W'JGt&tIf=cpI/\JfH%C6lH%C8(H2`0i
I/\QnIf=irJGt3#L&Qi+MZ/S6O8b=AQN!9NT)PG_V#ICnXo>U)\c0;A_>_RUc2Q)hf)FA%h>Z@3jSn?A
li-;NnG`"Xp&=^bq>U9jr;QZoro=%=s8N#srVl`oqYp<ipAX^`o)A.XmJcGNk5OB>hu;C0f`'A!ci2)d
`r<dQ]Df5;Yl:^&VuE@gSc5,XPl?gEO8b%9M#N/.Jc:3!J,XipHiA?jGlDmcFea&0FFeObFQ[cFFoHUa
GlE$gHiAElJ,XutJc:E'M#N;2O8b=APl@0OT)PD^VuEarYl;'0])KME`r=0\ci2DmfDaP(hu;[8k5O]G
mJcVSo)A=]pAXmequ6NmrVlfVs5X.Yrr2lqqu6Hkq>U*eo`"C[n,DYPl2KfDj8Rs8gA]\&dJhAhaSs*V
^&GM?Z2Ug'VZ*=hT)P/WQ2ZmENW+k8K`6T&J,XlqHN&0gFoHL^Er0hQDl.E'DLl\VDX)-:Du4MQErL.Z
FoHXbHN&?lJ,Y'!K`6o/NrG.>Q2[3NT)PJ`VuEarZ2V63^&GqKa8X<^dJh\qgA^"/ir8'=l2L&Kn,DkV
o`"R`q>U6iqu6Qnro=%=s8N#srVl]nqYp<ip&=R^nG_kTli-/JjSn-;hYu1,eGdhobPoN\_>_(G[JmB/
WW&^mT`1DZQN!'HNrFq8L]2l(J,XipGlDmcFT-=[E;jbSD>nANCSPWqC4U,NC?K@2C]8/LD>nGPE;jnW
FT-I_GlE*iIf=otL]321NrG4@QN!?PT`1eeWW'+#[Jmf;_>_IRbPolfec+5#hYuL5jSnECli->OnG`%Y
p&=ddqYpBkrVlfVs5X.Yrr2lqqu6Hkq#9scoD\7Ymf)POkl0WAi;VR3fDa7uci2#b`;[ON\c/r7Y5Y<t
UAgb`Qi<3JO8b%9LAlf(J,XfoH2_pbEr0eSD#S5LCAqoDBDuMBAV"EDAV"F[Ac?<=BDuWECAr#JD>S8N
ErL1[H2`3jJ,Y'!L]321O8b@BQi<TUUAh%hY5Yd,\c0AC`;[jWci2DmfDaV*i;Vd9kl0lHmf)_ToD\F^
q#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_hSlMg#Hir7j7h#>k'df.Sl`r<jS^](Y?Yl:^&UAgb`
Rf8NMO8b(:K`6Q%J,X]lFoHI]E;jbSD#S,IB)ZB@A,]s:@A@4]@"D^:@-:qs@K'a8A,^'=BDuTDD#S>O
E;jqXG5cacJ,Y'!K`6o/O8b@BRf8oXUAh4mYl;'0^]).M`r=<`df.erh#?41ir80@lMg2MnG`%Yo`"Xb
q>U9jrVlfVs5X.Yrr2lqqu6Ejp\sgao)A.Xm/H8KkPjH>hYu:/eGdhoc2P]]_>_.I[/R6-WW&RiSGnoT
OoC@>M#N#*If=]nFoHI]E;jbSC]8&IAc?6>@fBd7?iFC/?)_([>_-.2>j>Sn?2e10?iFI4@fBm:Ac?EC
C]85NE;jqXFoHaeJ,Y'!M#NA4OoCaISGo2\WW'+#[/Rc<_>_FQc2Q,ieGe5%hYuL5kPj`Fm/HMRoD\C]
p\t!fqu6Qnro=%=s8N#srVl]nq>U-fo`"F\nG_eRl2KiEi;VR3gA]S#d/M8g`;[RO]`,59XT#*rT`1G[
Q2ZjDMZ/A0JGsrqH2_j`E;jbSCAqoGB)Z6<@/aO4?2e+.>Q.g'=b0_,=b0`C=o2D%>Q.n,?2e41@/aU6
B)ZKCCAr,ME;jnWH2`3jJGt<&MuJe:Q2[6OT`1hfXo>X*]`,_G`;\![ci2DmgA]q-i;Vm<kl0rJnG`%Y
o`"Uaq>U9jrVlfVs5X.Yrr2lqqYp9hp\sgao)A+Wm/H5Jjo43;h#?"+df.Pkb5T9W^&GSAYl:[%V#Hqa
Qi<0IMuJJ1K)U5uH2_scE;j_RCAqfDA,B[5?2e%,=T2D$<r5mr<.S#"<.S$6<;ons<rQ2"=T2M'>l.q.
A,^'=CAr)LE;k"ZH2`9lK)UQ)MuJn=R/WZUV#IFoYl;34^Ac"Kb5T]cdf.r!h>Z@3jo4KCm/HJQo)A:\
p\t!fqYpHmro=%=s8N#srVlZmq#:$eo`"C[n,DYPkl0ZBi;VO2g&BCuc2Pia_>_.I\,NT1WW&[lS,S`Q
OoC4:K`6N$HiA3fErKtUC]8#HA,]p9?iF:/=oMM%<rQ+u<;ohq;Q3NE;1VSq;=.6[;Z9Vo<;ons<rQ2"
=oMY)?iFL5A,^0@CAr,MErL:^HiAQpL&Qr.OoC[GS,T2^WW'+#\,O&>_>_RUc2Q,ig&Be+i;Vg:kl0oI
n,DnWo`"Uaq>U6irVlfVs5X.Yrr2lqqYp9hp\sganc&"Vli-,IjSn*:h#>t*d/M8ga8WmR]Df8<Y5YC!
U&LM[Pl?aCL]2r*J,X]lFT-4XD#S/JB)Z3;?N+70=oMM%<W5qr;Ys:f:Ou;m:Ou=,:]!uf;Z9Vo<W6)!
=oM_+?iFI4B)ZKCD#SAPFT-OaJ,Y*"L]3A6Pl@-NU&LthY5Ym/]DfVFa8X<^d/M\sg]$.1jSnBBli-AP
o)A:\p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zn,DVOkPjQAhu;@/fDa.rbl5]__#CtF[Jm<-VZ*7f
Qi<0INrFb3Jc:&rFoHF\DuOGLAc?-;?iF:/=oMG#<;oep;#=&c9rUg;9S#lg9^5=N:&[rc;#XAl;uTer
=oM\*?iFL5Ac?BBDuOeVFoHdfJGt9%NrG4@Qi<ZWVuEgt[Jmf;_#DFSbl5ugfDaP(hu;^9kl0lHn,DkV
oD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc&"VlMfuGjSn$8gA]\&d/M5f`r<dQ])K)9XT#*rTDk/U
OoC==K`6K#HiA-dE;j_RB)Z<>?iF@1>5hY'<;oem:]=)f9VY428qBTc9'8hG9`@c`:]=8k<;p#!>5hh,
?iFR7B)ZZHEW1(ZHiAQpK`6r0OT(RFTDk\dXT#U+])KME`r=0\d/MVqgA]t.jSnBBlMg8Onc&.Zp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)MNkPjN@hYu7.ec*qpbPoK[^](eCZi7$)V#I"cQ2ZmEMuJA.
J,XcnErL"VD#S#F@fBa6>5hY'<rQ"r;#X8i9`@]a9)D2Z8:a<_8:a=s8H)3[9)_K_9`@ie;>sJm<rQ5#
>5hn.@fBs<D#SAPErLCaIf>!!MuJh;Q2[ETV>dOpZi7N7^])4Ob5Tceec+8$hYuR7kPjcGmf)_ToD\L`
q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7g6gA]Y%ci2&c`;[IL\,N]4WrAdmSc4iPO8b%9
Jc:)sGlD^^DZ4DMA,]m8?2dt*<W5qr;#X5h9`@Z`8cD8U7Y+$[7Y+%l7fGsX8cD?]9`@fd;#XDm<rQ5#
?2e72A,^6BD>nPSGlE*iJc:Q+NrG7ASc5D`WrB='\Gj2@`;[pYci2Jog&Bk-ir8*>l2L,MnG`%Yp\t!f
qYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>hYu4-eGdenao96X^&GM?ZMpm'U]-h`PQ$UAM>i&)
HiA6gEW0hSC&VT@?iF=0=8l5!;Z9Ml:&[fb8cD9[8,G`S7"IaW7"Ibk7/fXS8,c'Y8cDB^:&[ug;Z9\q
=8lJ(?iFO6C&VuKEW11]I/\ZqM>iP7PQ%-PU].:mZMqB5^&GtLb5T`deGe/#hYuO6k5OWEmf)_ToD\L`
q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL\,N]4WW&XkSGn]NNW+_4
JGsopFoH@ZD#S,I@K'U4>Q.\&<;obo:]=&e9)_B\8,c!W7&E>&6\.UU6g[8<7/f[T8,c'Y9)_N`:]=5j
<;oqt>Q.t.@K's>C]8;PFoH^dJGt?'NW,+?SGo8^WW'4&\Gj2@`;[pYci2Gng&Bh,ir8*>l2L,MnG`%Y
p\t!fqYpHmro=%=s8N#srVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$UAg\^OoC==
LAl]%H2_pbE;jYPBDu<<?2e%,<W5qr:]=)f9)_E]7fGjU7/K?N6@hIS6@hJg6N0@O7/fXS7fH!Y9E%Zb
:]=8k<W62$?2e72BDu]GE;jtYHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#h>ZF5k5OWEmf)_T
oD\L`q>U6irVlfVs5X.Yrr2lqqYp9hp\sd`nc%tUl2KiEir7d5f`'D"ci2&c`;[IL\,NZ3W;`OjSGnZM
N;eS2J,X`mFT-4XCAqlF@/aI2>5hP$;uTSl:&[ca8cD3Y7K,^P6iKER6%M=Q6%M>k62O"J6iKLQ7K,dU
8cDB^:&[rf;Z9\q>5hh,@/ag<C]88OFT-UcJ,Y3%N;et=SGo5]W;a($\,O)?`;[pYci2Gng&Bh,ir8*>
l2L,MnG`%Yp\t!fqYpHmro=%@s8N#prVlZmq#:$eoD\:Zmf)JMk5OB>h>Z(+eGdenao96X^&GM?Z2U^$
UAg\^OoC==LAl]%H2_pbDuOMNB)Z3;?2e%,<W5nq:]=&e9)_E]7fGjU7/K@N6EEG'5_21O5k%&96N0@O
7/fXS7fH!Y9E%Wa:]=8k<W62$>lJ.1B)ZTFDuOkXHN&EnLAm/2OoCmMU&M"iZ2V63^&GtLb5T`deGe/#
h>ZF5k5OWEmf)_ToD\L`q>U6irVQTVs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMB)Z3;>lIn*<;oep:]=)f9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_Qa:]=8k<;p&"?2e72B)ZNDDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\
OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f
5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aV
cMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+
e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO
6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"i
Yl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kT
kl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`
8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%
N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQl
q#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*
<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp
=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjd
qYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;
LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX
9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KC
mf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1
W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K
6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;l
f`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYl
ao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#
5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<
S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!d
o)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo
:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bW
HN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#s
rVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD
@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*
@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpEl
rVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%
H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O
7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+
iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\
OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f
5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aV
cMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+
e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO
6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"i
Yl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kT
kl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`
8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%
N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQl
q#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*
<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp
=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjd
qYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;
LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX
9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KC
mf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1
W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K
6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;l
f`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYl
ao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#
5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<
S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!d
o)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo
:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bW
HN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#s
rVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD
@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*
@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpEl
rVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%
H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O
7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+
iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\
OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR
7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4
jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J
[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f
5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aV
cMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+
e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO
6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"i
Yl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kT
kl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`
8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%
N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQl
q#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*
<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?EC
DZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7C
s8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1W
CAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp
=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjd
qYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;
LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX
9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KC
mf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1
W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K
6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;l
f`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYl
ao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#
5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1
]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]C
iVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X
7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<
S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!d
o)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo
:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bW
HN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#s
rVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD
@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*
@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpEl
rVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%
H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`
:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_T
o)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`Li
S,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O
7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+
iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W
]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O
5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJ
aSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4
f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ
6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\
W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.X
mf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e
9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&En
LAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`o
qYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1
=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:
C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfY
s5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pb
DZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k
<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^
q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNK
MuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU
8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<
kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=
Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i9
62j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKa
e,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!
cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M
5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#
[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GL
jo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\
7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2
OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9h
pAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD"
;>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#L
FT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\
rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DM
Ac?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&"
>lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-h
r;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1
J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\
9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#L
nG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#
U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M
6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!
h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb
_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O
5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=
_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lqr;QQlq#:!do)A.Xmf)GLjo46<
h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:>lIn*<;obo:]=&e9)_B\7fGgT
6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1Ac?ECDZ4bWHN&EnLAm/2OT(aK
U&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZoroX7Cs8N#srVl`oqYp9hpAXX^
nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`mFT-1WCAqfD@/aF1=oMD";>sAj
9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie;Z9Yp=oM\*@/aa:C&W#LFT-Uc
J,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"XpAXjdqYpElrVlfYs5s@\rr2lq
r;QQlq#:!do)A.Xmf)GLjo46<h>Z(+e,IYlao93W]`,A=Yl:U#U&LP\OT(1;LAl]%H2_pbDZ4DMAc?*:
>lIn*<;obo:]=&e9)_B\7fGgT6iKFO6)d,#5_21O5j^i962j4M6iKOR7fGsX9)_N`:]=8k<;p&">lJ.1
Ac?ECDZ4bWHN&EnLAm/2OT(aKU&M"iYl;*1]`,hJaSsKae,J#!h>ZC4jo4KCmf)_To)A@^q#:-hr;QZo
roX7Cs8N#srVl`oqYp9hpAXX^nG_kTkl0]CiVq[4f`'A!cMkrb_u@=J[f3N1W;`LiS,SNKMuJJ1J,X`m
FT-1WCAqfD@/aF1=oMD";>sAj9`@Z`8H)*X7/fRQ6N09M5_21O5_22f5lO(K6N0@O7K,dU8H)6\9`@ie
;Z9Yp=oM\*@/aa:C&W#LFT-UcJ,Y3%N;eq<S,T,\W;a%#[f3r=_u@aVcMl;lf`'_+iVqs<kl1#LnG`"X
pAXjdqYpElrVlfYs*t
~> %APLeod
EI
119 0 0 27 403 258 cm
BI
/Width 357
/Height 81
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
JcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$
JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4mu
JcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muRfDUNJc:6"Jc:6"[f1jXbl?,kJcE%Um/H,F
Jc1/uJc1/u\c(dlJcF^/df4mu`;f<*d/="DrIOm!r.4csr6bGirU9`:s7?9=s+14's7QBUrVQN`qr7I'
qLSKoqLSLLqXsaYr9XCQrepg)s+14*s8N#arUp*cqsXC@pjr3kpjr3kpp9baqYpB_r9XC]repg)s+146
s7QB^rV6<fqt9g\q=saEp\+?4p5J]rp4;qkp=f99q"X[UqYpBer:U$Zrg3Z5s+14?s7lTarVl`lqt9g_
q>U0ap\=IZp%%bCo)\ISJb"HaJb"B_dIQl"m.C;Mq"FLWqtU0do(r@_qu$-cq#6rddf4munc/1Yqu$?g
rqcNfp%\O\qtBp[rq,mTp%%G=!V,]2n:U4]n:C)VnEf]9o)&%Uo`"OYpAXgZq#:*dqYpBbr:U#]s3gpu
s8)cjrqQHkr;6BdqYU*fq"XU_pA=O^o`"I]o)%tPnG_nUnFH&?mXaeWmXaeWm`"Vbn,DhUn+H2Lnc&+Y
oD\C]p&"IXp\Xabq=sgcqtp<drV6Aks3gq"s7lTgrVl`lqtU$eq"XU_pAXaao_\7Zo)%tSnG_nUnG_nU
mecDEm.fl<klL&5J`qaMJ`q[KdHL8fq!.G:rpBUNrp]pUqsaUTqssaXqt0m\rq?6`qtTs_rqlTjq#1!e
ZN&AQKE(N@rquQgqt^6dqtL*`qt9s\rposVrp]gRq!IkBq!%S;o&oo4!9JdnJ`VIEJ`YDCp#br1puqM;
q!7_BrpTaRrpfmVqt0m\qtC$`qtU0dq"ssdp&22rdf5(%rr2]krquZjq"k!bqtL*`rq69_rposVrp]gR
rpK[Nqs47Hqs"+Dqrdt@p#Pf+qVqG4J`2@BJ`21=fAZ;[qr@8.qr[n@qrn%Dqs+1HrpBUNrpTaRrpfmV
rq-3_rq??cqtTs_rqlTjq#1*h\Gt"WO8o+Vp&4mfq"k!bqtL*`rq69_rq$-[rpg!WqsXOOrp9XMqs"+D
roX+>qr@\8qr.>.rnm_5qqq2*rS<%\J_bn5J_eW-ptko*ro!e5p#,i.qr7V8roO%>qrn%Drp0RMrpB^R
qsaUTrpp'[rq-3_rq??cqtTs_qu$?ip&;f-df5L1rr2ThrquZjqt^6dqtL*`rq-3]rpp'Yrp]pUrpB^O
rp0IGroj@DqrR_8ro3q8qqqD0rn[8&n(R`n!SQ.WfRqh-fR_]&f`'Rmg@a8#h>Z:1htu@/ir8!;jnn3;
kl0iGli-8MmJcSRnG_tWo)A7[o_\@]p\Xabq>U9gr:U$frk\W_s-<W`rq66hr;6BjqYp<iq#:$epAXaa
o`"F\nc&"VnG_kTmJcGNlMg&IkPjWCjSn0<iVVR1htu7/h#?%#g&BY'fDa@keH+4Nl-t:5S'ur;J^a):
j4*YMrmq)#qq1f!qqCr&rn[J/qr%A2roF(?roa:Frp'LKrpB^Qrp]pUrpg!Yrq-3_rq??crqQKgqtg<h
qu$?iqu4P6df5^7rr2]krqucmqtg<frqQKerq??arq$-[rpg!WrpTjSrp0RKroj@DroO.?ro3q9qqq;,
rn@A)rn.5$qpkSmrmL\kpsB#drm:Dcp<S<8N6[""J^2upn'D![rm18armCVkrmUksqptc!rn7;)rn[S1
qqqD3ro3q<roO.Aroj@Grp0ROrpTjUrpg!Yrq$-^rq??crqQKgqtg<hrquQiqu4b<df5g:rr2]krqucm
rqcWirqQBbrq??arq-3\rpg!VrpKdPrp0RJroa:Bro=";qr%J1rnRM,rn7;'rmq)!rm^qqrmCVirm1Sh
qp##^qoeu]pW8!.J]WJbJ]Z*Wqo\o]p!!E[qp,)cqpPJnrmh#!rn.5'rn@A,rn[J0ro3q;roO.BrosFJ
rp9XPrpTjVrpp'\rq69arqH<brqZQirqlTjqu-Nnb5]oiT)\fhq#13irql]kqt^-`rq??`rposUrpTjS
rp0RKroj@DroF(<ro!e5rndY0rn@A)rmh"trmUkorm:Yjrm(Dcqoeu]rlP/\prEBRqo/EMe\m$VXi#_-
J]#RIrl+cSqoA]WrlP&[rlb;cqp,2erm:YlrmUkrrmh#$rnIG-rndY3ro!e8roF(@roj@Grp0ILqsaUV
rq-*]rqHEfqtg<hrquZlqu4k?df6$@rr2]kqtpBhrqZQgrqHEbrq-3]rpg!WrpTjRrp0RJroX4@ro="9
rnm_3rnIG*rn%/"rm^qqrm:Yjrm(MerlY5^rl4iSqnrEMot^I>rkA-?mCe(`Q+V[\J\:$Ul+Qu.rkJ$>
qni?Mrl+cSrlP/_rlkAerm1SjrmLeprmh#"rn7;*rndY3ro!e9roO.ArosFJrpB^Rrp]pWrq$-]rq69b
rqQKgqtg<hq#1*he,RkrV#UGnq#13irql]krqZQgrqHEcrq-3]rpp'XrpKdPrp'LHroa:@ro3q8rndY0
rn@A&rmh"trmLemrm(MdrlY5^rl>#WrknWLrkSNJqn;d:rjr!;rj_^3o=':ZO1'VJJ[XLFm'll%rjhp;
pq-O=rkABHrkSEIrkn`Srl>#[rlY5`rm(MirmLeqrmh#!rn@A+rndY4ro3q;roa:Frp'LLrpKdTrpp'[
rq-3`rqHEerqZQirqlTjqu-Nne,RkrVuQbqq#13irql]krqZQgrqHEcrq69]rp]pUrpKdPrp0RIroX4@
ro!e5rndY.rn.5%rmLemrm1ShrlkAarl4rVrl"fPrkSNJqn<!Arji$<rjVm8qmHF1qm5t$!3u.#JZt3>
JZs^0i3;mZo!88$qm?@1qmQL5rj_s<qn2pArkJHJrk\TPrl+lVrlY5arm(MhrmC_nrn%/&rn@A.rnm_5
roF(@roj@IrpB^QrpTjVrpp']rq??crqQKgrqcWkrquZlqu51Hdf6?Irr2]kqtpBhrqQBbrq-3]rpp'X
rpTjSrp'LHroX4>ro*k6rndY/rn.5"rmLelrm(MerlY5Zrl"fQrkSNIrk8<Brj_s9qm6:-ril:'riZ7&
riGmqri5^l!NE&LW.V%"W.CnpW;ERkWq`XoXT#@$Y5YX%Ykta*Zi7E4\Gj)=^&GeG_#D4M_u@XSb5TT`
cMl/hdf.bqf`'V(hYuF3iVqj9k5OTDlMg5Nn,DhUo)A7[o`"U^q"speqtU-ernRP%s/l>#rqQHkr;QTm
qYp<fp\smcoD\=Xn,D\Qli-)Hk5OE?i;VU4h#>t*f)F1ud/M>ibl5]_`r<sV_>_4K^&GVB\Giu:[/RB1
Yl:j*Xo>F$WrB!sW;ELlVYHtaU\^_SU4K#$Tn/ngU#r'2UAgq\V#.%gVuEXoWW&psXT#@$YPtd*Zi7?2
\,Nr;])KDB^])(K`W!pWaSsE_cMl2ieGe%uf`'\*h>Z@3j8S0>kPjfHmJHAOnc&.WpAXgcq>U6iqtp<g
rVlfOs3gqOs8N#mrVl`oqu6Hkq>U0gp\smco`"C[nG_nUm/H;Lkl0]Cj8S!9hYu:/g&BM#df.SlcMl#d
aSs-W_>_4K]`,MA\Gil7ZMUm*Y5YO%W;`^oVYd.fUAghVTD4uUSFE&"S!'7lRt7'kS*?IBSbo#OTDP;Y
UAgqeVZ*LmW;`mtXo#@%Zi7?2\Gj)=]`,\F_Z%LQaSs?]cMl/hdf.bqg&Bb*hYuI4j8S0>kl0lHm/HJQ
nG_tWo`"O_p\sseq>U6iqu6NjrVQTOs3gqRs8N#mrVQKkqYp9ep\sgao)A1YnG_hSli-,Ik5OKAi;VU4
h>Z%*ec+"rd/M;hbPoK[_u@FM^AbbD\Gii6ZMq',Xo>@"W;`UlUAgkcT`1P^SbnoURf8]OQi<9LPkC7>
OoUX9Ob&UTOF`LEOPl5nOo(=7PQ$gGQ2[-IR/<?OS,SuXTDkM_U&LhdV#I=lWrB."YPtg+Zi7K6])KGC
^])+L`W"'[c2Q)hdf.erfDaV*hu;R5jo4HBkl0oImf)_Tnc&.Zo`"U^q"speqtU-eroO1.s0Mb)rqQHk
qu6Hkq>9pcpAX[_o)A+Wmf)SPlMfrFjSn-;hYu:/g&BM#df.SlbPoT^`r<gR^](nF\,Nf7ZMq*-Xo>@"
VZ*CjUAghbT)P8ZRf8]RQi!'IPl?jCOoCI>O8+b6N:W!ZMiWdIMh-fEMslW"NrG+:OT(C>P5CLCQ2[-L
RJrZSSGo)YT`1\bV>d@kWrB+!Yl:s-[JmZ7]`,YE_>_IRaSsB^ci2AleGe/#g]$(/iVqp;k5OZFli->O
n,DkVoDA7\p\t!fqYpBerVQTUs3gqXs7lTjrVl`oqYU*fp\smco`"C[nG_nUli-2Kkl0WAiVqa6g]#n*
f)F%qcMl&e`r<mT_#D(I])K2<ZMq*-Y5YI#VuELkT`1S_T)P5YRJrNOPl?mGOoCIAO8b1:NW+n3MZ/G/
L])sYL4P)1L4P*)LAlu*M"ll)N;eh6NrG.>OoCRDPl@!JR/WTST)PA]T`1bdVuE^qY5Y[)ZMq?4])KGC
_#D:O`r=3]cMl2if)F>$g]$+0iVqm:kl0iGli-APnG_tWo`"O_p\t!cqYU3irV6BUs3gqXs8N#prVl`o
qu6Hkq>U0gp\sgaoD\=[nG_hSli-,Ik5OH@i;VR3gA]Y%e,I\mc2Pf``W![P^&GYC[/RB1YPtX&W;`Xm
U&L\`Sc5&VQi<6KOoCIANrG":MuJV5M#N/.L&Qc)KDpK"JbXcpJ,XruIt<*#It<*#J'icFJGt&kJGt-!
K)UE%K`6])L]3,/MZ/P5N;ek:O8b:@Pl@!JRJrcVTDkP`V>dFmXT#F&ZMq61]DfPD_#D=Pao9Qaci2Al
ec+;%h>Z@3jSn<@kl0oImf)_To)A7[o`"Uaq#:*gqYpBkr;QZlrojC1s1/1)rVQKkqYp9hp\smcoD\=X
n,D\QlMfrFj8S!9hYu7.fDa4tci2/faSs0X_>_.I\c0&:Yl:d(X8\spU]-qcSc5&VQi<3JOoCF@N;e_6
M>i;0LAlo+KDpK"JGt#mIK"WhHiA<kH%C6lH%C6lH.7-:HMDjaI/A?kIf"ZpK)UE%L&Qi+L]3/0MuJ\7
O8b:@PQ$pJRf8lWT`1_cV>dOpY5Y[)[f3i:^&GkI`W!sXbl5rfdf.ktgA]t.i;Vg:k5OZFm/-8Nnc&.Z
pAXgcq"speqtU-Rs3gq[s8N#mrVQKkqYp6gpAXaao)A.Xn,D\QlMg#Hj8S$:hu;@/f)F+sd/M8gao93W
_>_1J\Gil7Yl:d(WW&doT`1P^SGniRPl?gEOT(7=MuJJ1K`6W'Jc:3!J,XorIK"WnHiA?jH2)X`G5$+[
F`i7WK62ZdJTT:]qfVdZpiud`rd+Qjrd=]nrdOirrdb!!re(3(reCE1rf-o=rfR2Erg*PRrgs+^rhf[o
riQ1(rjDa8rkABIrkn`WrlkAgrmLetrn@A/ro*k:roj@Hrp9XQrpg!Yrq69arqH<drqlKhqu6$`df6u[
rr2oqrqucmrqcWirqQKdrq-3]rp]pTrp9XJroX4@ro!e3rn@A$rmLelrlY5[rk\TJrjr*;rilC(ri?$o
rh9=`rgNhPrf[8Brf-o8reCE*rdt-"rdOiord+QhrcnEbrcJ-\rc7mUol0YDr,7.(L2MQ[JSs(Wol'D?
rc.gUrcA'\rcS3brd"Khrd=]ordb!"re19*repc8rfI,Brg3VQrh'1arhTOoriZ7)rjMg:rkABJrl+lZ
rm1Slrm^r$rn[S3roF(@roj@JrpKdTrq$-^rq??drqZQirql]mrr)`nmf1`8^]4<4qu-Nlrql]jrqQKe
rq69_rpg!Vrp9XLroX4?ro!e4rn@A'rmC_krlkA]rkeZLrj_s8riuI)ri#gmrh07]rgNhOrf[8Areg]1
re:?'rdausrd4WjrcnEbrcJ-\qf2LOqel1FqeQ%CJSKaNJSKaNaD1]iph]hFqeuIQrc.pYrcJ-^rcnEf
rd4Wnrdb!"re:?-reg]9rf[8GrgNhWrh07eri,n!riuI1rj_sBrkn`TrlkAermC_srn@A.ro!e:roX4F
rp9XQrpg!Zrq69brqQKgrql]mqu-Nnmf1`8_Z0W7qu-Nlrql]krqZQgrqHEarpp'WrpKdOrosFDro3q7
rn@A'rmUknrlkA_rk\TKrk/6;riuI*ri#glrh'1\rg<\LrfI,=reg]/re()trd=]krc\9_rcA'Xqeu@K
rbV@Eqe?%CoOn)7rap^mM.M6LJS!YKqe#;0qe5tCphK\Brb_XQqf)OUrcS3`rd+Qkqg\Tsre:?/rf$i<
rfmDMrgj%\rhTOlriZ7*rj;[;rkABJrlG)^rm:Yorn.5(rnm_7roO.Drp0ROrpTjWrq-3arqQKgrqcWk
rqucoqu6-cdf7;drr2]krql]krqZQfrq??`rpg!WrpTjOroa:Bro*k5rnIG'rmUkmrlY5[rk\TJrji$7
ric=$rhoagrgj%Wrfd>Drf6u6re:?&rdaurrd+QdrcJ-[rc%jSrb_XMrbDFGrau%=rabn9raPG,rEt1a
JRF%:JRHc2ojR`,raYh9rakt=rb2:FrbMLMrbqdTrc8!ZrcS3drd=]qrdk'&reUQ6rfI,CrgNhWrh07g
ri?%%rj2U6rkABJrl+lZrm1Smrmq)'rndY5roO.Crp'LOrp]pWrq-3_rqHEfrqcWkq#1*hp]&\A`W,r:
q#13hrqcWirq??`rq$-YrpKdProj@Dro="9rnRM+rmUknrltG^rkeZLrj_s7ric=%rhf[hrgj%Vrg!JE
rf$i5re19%rdOimrcnEcrc8!Wrbh^OrbDFGrau.@rabn9raPb5qd8o#rE]##JR"7@JR!b2i*>_Vnm;3#
ra>_6qdTP7rac">rau.CrbDFKrbh^Src8!]rcnEgrdOitre19-rf$i<rg!JNrgj%_rhoarric=.rj_sB
rkn`TrltGhrmUl"rnRM2ro="?roj@JrpKdTrq$-^rq??erqcWkq#1*hp]&\A`W,r:qu-NlrqcWirqQKc
rq-3[rp]pSrp0RHroF(:rn[S,rmh"prltGbrkeZLrk/6;rilC(rh]Ugrh'1Xrg!JErf$i4re(3#rdFcm
rcS3]rc%jTrbVRLrb2:Crac";raGe5ra>_4qd08-r`nnrrEAerJQ\%:JQ[P,i*#MPmp#crra#;*ra>_4
raGe8rac"?rb2:Hrb_XQrc%jXrcS3erdFcrre(3*rf$i<rg!JNrh'1arh]UrriuI0rk/6FrkeZWrlkAg
rmh#$rn[S3roF(Arp0RNrp]pWrq$-^rqQKgrqcNirr)`np]&\AbQ%S@q#13irqcWirqQKerq-3\rpTjR
rp'LHro=":rnm_-rmh"qrltG`rkn`Lrji$8ric=$rhf[frg`tTrfR2?repc/rdk&urd"KdrcA'Xrbh^O
rb)4Brabn7qd9>.r`oG,r`]2$qcEbtmT&s\JQ.S-JQ.2"g/R<:qc<\tpfRMur`fA,ra#D.ra>_6rac">
rb)4Hrbh^SrcA'^rd"Kmrdt-&repc9rfR2Irg`t\rhf[pric=.rji$Brkn`VrltGirmh##rnm_6ro="A
rp'LMrpTjWrq-3arqQKgrqcWkqu-EkqZ#"DbQ%S@q#13irqcWhrqHEcrpp'XrpTjProsFEro*k5rnIG&
rmLelrlG)WrkSNErjMg2ri?$qrh9=^rg<\Krf@&9reCE&rdFclrcS3]rbqdQrbDFGrac";ra>_4ra#M.
r`fA*r`T5%r`8\lr`&;ar)<SmJPh8$JPgtqh,4&Ilr3d\oi:ulr`B)%r`];*r`oG.ra5Y4raYq<rb2:G
rb_XQrc8!\rd+Qlrdb!&reg]9rfd>Krgj%^rhf[qriuI1rjr*Erl+lXrm1Slrmh#&rndY5roX4Drp0RP
rpg!Yrq??crqQKhrqlTkqu6Hldf7Mjrr2fnrqucmrqcWgrq??`rp]pUrpKdNroa:Aro!e2rn7;!rm1Sg
rl+lRrkAB?rj)O,rhoajrh'1Wrfd>Breg]0rdk&trd+Qfrc.pUrb_XJral(=ra>_4ra,S.r`];(r`K/$
r`9"ur`&kpnkoB^r_W>bJPUhmJPUhmaA;e3r_NMiohk]dr_rerr`9#"r`K/&r`];*ra,S2ra>_8rau.C
rb_XQrc.p]rd+Qmrdk''reg]9rfmDLrh'1brhob!rj2U4rkABJrl+l]rm:Ymrn7;+ro!e:roj@HrpKdS
rp]pZrq69brqcWkrqucoqu6Hldf7Vmrr2]krqcNfrq??`rq$-YrpB^Nroa:Bro*k4rn7;%rm:YgrlG)S
rk/6?rilC'ri#ghrg`tUrfR2?repc.rdaurrcS3]rbqdQrb;@EraPk7ra5Y0r`];'r`9"ur`&kpqbd5e
r_NMiqbR2dmS3URJP:elJP:Vgf1bO*qbI#ar_WSiqb[8hqbmDmr`/qur`K/'r`oG0raGe8rb)4Frb_XQ
rc8!\rdFcrre(3.rf6u?rgEbVrh07hriH+'rj_s?rkSNSrlkAgrmq)%rn[S4roF(Arp0ROrp]pYrq69a
rqZHfq#1*h!<:LIcN!nCq#13grqZQgrq69_rpg!Vrp9XLroX4?rnm_0rmq(srm(Mbrl"fMrji$8riZ7"
rhTObrgNhOrf@&9reCE&rd=]ircA'Xrb_XJrau.>ra>_2r`fA)r`K/#r`&kpr_`YkqbR2dqb?iZqb-HO
JP(JcJP(Jc^InJupe:Z]qbI,dqb[8hr_reqr`9#"r`T5)ra#M2raYq>rb2:Jrc%jXrcnEirdb!&reg]9
rg!JNrgs+bri,n"rj;[8rkABMrlP/brmLetrnIG0ro="?rp'LLrpTjVrq$-^rqQKgrqcEgqu-Tqdf7Vm
rr2fnrquclrqQKerq-3\rpTjSrp0RIroF(;rndY,rm^qnrlb;[rkSNFrjMg2ri?$prh07[rg!JErepc1
rdk&srcnEarc%jRrbDFDraYq7ra,S.r`T5$r`&kqr_`YkqbR2dr_<Acqb-]VlUgeAJOk_jJOk>_g.:6q
pe(NYqb6u`r_E>dr_WSkr_rerr`9#$r`fA.ra5Y6ral(DrbVRQrcJ-brdFcsreCE1rfI,FrgWn[rhf[q
riuI2rk&0Frl4r\rm1Snrn.5,ro*k;roj@HrpKdSrpp'\rqHEfrqcNirr)`n!<:LIdJs4Fqu-NlrqcWi
rqQKdrq$-[rpTjQrosFEro!e3rn@A$rmC_jrl+lRrkAB>rj)O+rhTOdrgj%PrfI,=re19%rdOiircA'W
rbVRIrac"9ra,S/r`K/#r`/qqr_`Yjr_WShr_3;ar^urWr^cfSlUHFpJOY2[JO[:Apdb3PqapcZr_*5a
r_<Agr_NMjr_i_qr`B)$r`oG/ra>_9rb)4HrbqdWrc\9irdk'%rf-o=rfd>Prh9=eriZ7*rjDa>rk\TQ
rm(Mjrm^r$rn[S3roX4Drp9XQrpg!Zrq??crqZQirqlTkrr)otdf7_prr2fnrquclrqQKdrq69]rp]pT
rp'LGro="8rnIG)rmLekrlb;YrkJHErj2U-ri5skrgj%VrfI,<reUQ)rdOimrcA'Xrb_XIrac"9ra,S.
r`T5#r`&kqr_WSir_EGdr_*,\r^luXqa^ENmm[1CJOG&WJOG&Wc:%+ipdY6QpdkBUqb$i\r_3;dr_NMi
r_reqr`/r#r`fA.ra>_9rb)4Irc%jXrd+Qlrdk')rf$i<rgEbVrh9=kriZ7,rk&0Erkn`Yrm1Slrn.5)
rnm_8roa:GrpKdTrpp']rqHEerqcWkqu-Nn!<:LIeGoOIqu-Nlrql]krqHEcrq-3ZrpKdQroj@Cro3q6
rn@A%rm:Ygrl>#Rrk/6>rilC&rhf[ergNhOrf6u7re19#rd+Qerc%jRrbDFCraGe5r`fA)r`B(sr_WSi
r_EGer_3;`qapcXqa^ENpdOX>rBl-'JO=uUJO@^MmmQq>pdY6Qqag]Xqb$i]r_<Aer_NMjr_i_sr`T5)
ra5Y6rac"CrbVRQrc\9frdXp#re^W7rg!JOrh'1eri?%&rjVm=rkSNRrlb;frmh#$rndY6roX4DrpB^R
rp]pZrq69brqcWkrqucorVcisrm^tts8N#prVl]nqYp<ipAX^`oD\7YmJcGNjo4<>hu;C0f)F+scMkrb
_u@CL\Gif5XT#*rT`1DZQ2ZjDM#N),J,X`mFoHC[D>n5JAc?*:?2e(-<rQ(t;uTVm:]=,g9E%Q_8cD9[
8,GdQ7K,^16i9<&6A@gX6@hJT6J=g(7/fXM7fGpW8H)3[9)_K_:B"&g;#XDm<W6%u>Q.t.@/aa:C&VuK
EW1+[H2`<mKDp]+O8bCCRf8uZVZ*[rZMqB5^Ac%LaSsKadf.ktg]$+0ir8'=li->OnG`%Yp&=[aq>U6i
qu6QmrW3#teGn%uq#13hrqcWirq69_rpg!Vrp9XLroF(;rndY,rmh"qrlb;[rkSNErjDa/ri#gkrh'1U
rfR2>re:?&rdFcgrc8!Vrb;@DraPk5r`fA)r`&kpr_WSir_<Acr_!/]r^d#Yr^QZOr^>F,r'T1)JO-D(
JO+iQf0[tSqaC<Mr^QlWr^d#[r_!/`r_<Afr_WSmr`&l"r`fA.raPk=rb;@Mrc8!\rdFcsre:?2rf[8H
rh'1bri#h"rj;[9rkSNQrlb;grmh##rndY5roF(Drp9XQrpg!Zrq69drqcWkqY^HnrRCkss82cor;QQl
q>U0gp&=R^nG_kTli-,Ij8S!9h>Z")df.SlaSs*V^](\@Z2Um)U]-qcSGn]NNrFq8Jc:,tHiA'bDuOVQ
B)Z<>?iF=0=oMM%;Z9Ml:]=&e9E%Q_8cD9[8,c!T7K,^A6g-ke6N09%5d3M)5_23"6+K>Q6i0:N7JfRR
8,c'Y8cD?]9E%Wa:]=5j;Z9bs=oM\*?iFR7B)ZZHE;jnWHiAKnJc:Q+NrG4@SGo/[U].CpZMq<3^])1N
aSsNbe,Iqth>Z@3j8S9AlMg5NnG`%Yp&=acq>U6fquHZrrVb7GfDkjLqu-NlrqcWhrqHEarpp'Wrp9XK
roX4<rn[S-rmUknrltG\rkJHErj)O*ri,mirgWnPrf@&8re19#rd"Kcrc%jQrb2:?ra5Y1r`K/"r_rem
r_EGdr_!/]r^cfRr^?*?ha6g!r]u*#PsBmcJO&?_r^"^onjE:BpdY6Rr^m)]r_3;dr_WSmr`9##ra#M2
raPk?rbVRQrcS3drdXp#reg]9rg!JPrh07iriZ7+rk&0Frl"f\rm:Ynrn@A-ro!e<roj@JrpTjWrq-3a
rqZQiqtpHm!WDuorn@D(s8N#srVl`oqu6Ejq#:$eoD\:Zn,DVOkPjQAi;VO2f`'=ucMkuc_>_.I\Gi`3
X8]!qT)P/WPQ$O?L]2o)I/\?hErKtUCAqiE@/aI2>5hS%<;obo:]=&e9E%N^8H)-Y7f,X=6f16"6N09%
5a=Tc5_22_5lO'm6L7)=7JfRR8,c'Y8cDB^:&[rf;>sPo<rQ;%?2e72B)ZNDDZ4\UGQ*!hK)UQ)N;f%?
R/W]VVZ*XqYl;03^&GkIb5T]cdf.nug]$.1jSnBBlMg8Onc&.Zp\sseq>U9jquHZrrVcWmgAfe)rr2oq
rqucmrqQKerq??^rp]pTrosFFro="8rn@A&rm:Ygrl>#Rrk&0;riZ7!rhBC^rg*PFreg]/rdXomrcJ-X
rbMLGraYq7r`fA)r`/qqr_NMfr_3;`r^m)[qaUQRr^?<EejAjmr]u*#PsBmcJO&?_r^"CfogA^Hr^H]R
r^ZrZr_!/_r_<Afr_i_qr`T5*ra5Y7rb)4GrbqdXrd"Kmre19.rfI,Frg`t^ri#h!rjDa:rkSNRrlb;f
rmq)'rnm_8roX4ErpKdTrpp'^rqHEerql]m!;ursrVQTJs4[MPrr2lqr;QTmqYp6gpAX^`nc&"Vm/H2I
jo46<h#>t*e,I\mao96X^&GM?ZMpm'V>d+dQi<0INrF_2JGsurFT-:ZDZ4;JAH#s8>lIn*<rQ"r;#X8i
9E%Q_8c)$W7fGgH6dS0t6@hCV5_21O5hA9E6M3_C7/KIQ8,c*Z9)_K_:]=5j;Z9_r=T2S)?iFR7BDufJ
EW1(ZIK"fsK`7#2P5^gITDkYcWrB='\Gj2@`;[pYci2DmfDaS)iVqp;kPjiImf)bUo`"O_p\t$gqZ-Np
r;?Qmrr1XOgAh0Orr)iorql]krqHEbrq$-YrpB^NroX4?rnm_0rmq(rrltG_rkeZHrjDa0ri#gjrgj%Q
rf@&:rdt,urd+QarbqdPral(<ra,S-r`B(ur_WShr_<Aar^m)[r^ZrWr^H9Ce3a+"r'>m!L-U;TJO%gP
pd*CrmmI(Cr^QlWr^d#[r_!/ar_NMir`&kur`];-raGe;rbVRPrc8!ardOiurepc;rfmDQrhBCjrilC1
rk&0HrlG)`rmC_rrnIG0ro="?rp0ROrp]pYrq69brqcWk!;llqr;QZorn@D+s8N#srVl`oqu6Hkp\sjb
o)A.XmJcGNjo49=hu;=.ec*nobPoK[^](eCZi7-,V#I"cS,SQLNW+b5JGsrqGQ)R\D>n;LA,]m8?2dt*
<W5nq;#X5h9`@W_8H)-Y7fGjU7.N^m6N'0#5_21O5_22G5gD^h6iKLQ7K,dU8,c'Y8cDE_:&[ug;Z9_r
=T2V*@/a[8CAr&KE;k(\HiAQpM#ND5OoCjLT`1bdY5Yd,\c0AC`W"'[ci2Gng&Bn.ir8'=li-;NnG`"X
p&=^bqYp?lquQ`nrr)iqgAg"/rr2fnrql]krqZQerq-3[rpTjProj@Aro!e3rmq(srm1Sarkn`Lrj;[.
ri5skrg`tRrf@&8re(3!rd"KarbqdNrau.;ra#M,r`/qrr_WShr_3;`r^d#Yr^QlUr^?EHg-Yd)nN_Xj
JO"cOJO%(;r^#7)ogA^Hr^HfUr^ZrYr_!/_r_EGhr_rerr`];,ra>_;rbDFNrcA'`rdOj"reg]9rg*PR
rh9=kric=.rkABKrl>#armUktrn[S3ro="Arp0RPrpg![rq??erqZWl!W2cnrVQTMs5!_SrqlZnqu6Hk
q>U'doD\7Ymf)MNkPjK?hu;F1eGdhoc2P]]_>_+HZMq!*VuE@gRf8QNNW+_4Jc:#qG5cL\D>n5JA,]j7
>Q.e)<;oep:]=,g9E%N^8,c!T7K,^J6eXm+61I3k5_21O5_22;5lO('6M3_F7/KFP7fGpW8cDB^:B"&g
;Z9Yp=oM\*?iFR7B`;lJEW1.\HiAWrM#ND5Pl@-NT`1kgXo>X*]`,_G`W"-]dJhYph#?41ir8-?lMg5N
nG`%Yp&=ddq>gBnqtpBkqu5FOh>dKRqu-NjrqZQgrq-3\rpTjRrosFFro!e3rnIG$rm:Ygrkn`Mrji$4
ri?$qrgs+Vrf[8=re:?$rd"KbrbqdOrau.=ra,S.r`K.ur_`Yjr_3;`r^m)YqaLKPog@=tr^$'>JO"cO
JO"cO_Ee)de3a%"qaCEPqaUQVr_*5ar_NMjr_reur`];-raPk>rbMLOrcJ-brdXp$repc=rg<\Vrhf[q
rilC4rkABLrlkAfrmUl$rndY4roa:GrpB^Rrpp'\rqQKg!;Z`mqYpHjrn[V1s8N#srVl`oqYp9hp\sga
o)A+Wm/H5Jjo43;h#?"+dJhDiao9-U]`,A=YPtL"UAgV\Q2ZjDM#N&+J,XTiErL"VBDuH@@/aF1=T2>"
;>sAj:&[ca8H)-Y7fGjU7/0.*6K17]5_21O5_22,5i"d%6iKLQ7K,dU8,c*Z9)_Qa:]=5j<W6,">lJ.1
AH$6@DuOeVFoHmiKDp]+O8bCCRf9&\WW'+#[f3r=_>_RUc2Q,ig&Bh,i;Vj;kl0rJn,DnWo`"Uaq#L6l
qYL3hrr)iqh>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(9rnIG)rm:YgrlG)Srk&0;riQ0trh9=Zrfd>A
reCE'rd=]erc%jQrau.>ra5Y/r`B)!r_WShr_<A`r^d#Yr^HfSog@b+qa'4,JO"cOJO"cOZU"LUi'R*(
r^?`Sr^ZrYr^m)`r_NMir`/r"r`fA/raYq>rbVRQrcJ-erdk''rf6uArgEbZrhoatrjDa;rkSNSrlkAg
rn.5)rnm_9roj@HrpTjVrq$-`rqQQj!W)Zir;QZNs5!_PrVl`oqYp9hp\sd`nc%tUl2KlFj8Rp7gA]Y%
d/M5f`r<aP\c/r7X8\poTDk/UOoC@>K`6K#HiA'bDZ4GNAH$$:?N+(+<rQ%s;#X5h9`@W_8H)*X7K,^J
6fUN46/OqY5_21O5_22)5lO(06M3_F7/fXS7fGpW8cDE_:&[ug;uThs=T2Y+@K'g:C]88OErLFbJGt6$
NW,+?QN!NUV>dOpZi7N7^])7PbPolfec+8$hYuR7k5OWEmf)_ToD\L`q#L6lqYL*err([Qh>dKQrqucm
rqZQgrq??]rpTjRroj@Cro*k4rn.5!rm(Mbrl"fLrjMg1ri#gkrgs+Qrf@&9rdk&srcnE]rbVRJraPk6
r`oG(r`/qpr_NMer_*5]r^ZrWr^?EHj$MEaJO"cOJO"cOW^,K/qa:6Kr^QlWr^d#]r_<Afr_`Yor`B)(
ra5Y6rb;@Krc%j]rd=]rreg]8rfd>QrhBCjrilC2rk8<LrlP/brmUl!rn[S4roO.CrpB^Rrpg!]rq?Eg
!VuQjqu6NmrS@M0s8Murr;QTmq>U-fp&=L\n,D_RkPjQAi;VO2fDa4tc2Pf`_u@:I[JmB/VuEChSGn]N
NW+b5JGsopFoH@ZD#S,I@K'U4>Q.\&;uTVm:B!rd9)_?[7fGjI6g6r76.nMS5_21O5_22#5lO(06M3_F
7K,dU8,c-[9E%]c;#XGn<rQ>&?N+C4B`;fHE;k"ZHiAQpM#ND5P5_!NU&LthYPts/]Df_IaSsH`df.kt
h#?72jSn?AmJcSRnc&4\pAk!iq>($erqucoh>c=2rr)iorql]irq??arpg!Vrp9XIroF(9rnIG'rmLei
rl>#Srjr*9ric<srh'1XrfI,;reCE%rd"KbrbqdNrau.;ra#M,r`/qrr_NMfr_!/]r^ZrWr^HTLj$N`2
ej+dOJO"cOJO$+ur^#R2pd>$Lr^QlWr^m)^r_<Afr_i_qr`];+ra>_;rbMLOrcJ-crdXp%repc;rgEbX
rhTOsrj;[9rk\TRrlkAirn%/(rnm_8roa:IrpKdUrq69b!;HTiq#:0ir;QZNs5<qVrr2lqr;QQlp\smc
o`"@ZmJcGNjo4<>hu;@/ec*qpb5TBZ^](bBZMq!*UAg__Qi<*GMZ/8-I/\?hErKqTB`;N@@/aF1=T2;!
;Z9Jk:&[ca8cD3Y7K,^M6fUN46.S;P5_21O5_21u5lO(06MNqI7/fXS7fH!Y9E%Zb:]=8k<;p#!>Q/%0
A,^0@D>nSTGQ*!hKDp`,OT(UGSc5A_Xo>X*\Gj8B`;[pYd/MSpgA^"/ir8'=li->OnG`(Zo`4^ep\4[`
rql]nqu5XUi;`fUrr)iorqcWgrq??_rp]pSrp0RFro3q7rn.5"rm:Yerl"fNrjMg2riH*mrg`tRrf6u6
rdt,rrc\9]rbVRHraPk5r`fA(r_renr_NMdr_!/]r^QlUr^?NKj$N`2ej+dOJO"cOJO$+ur^#R2pd>$K
r^HfUr^m)]r_*5dr_`Ynr`K/'ra,S5rb)4Hrc8!^rd4WrreUQ6rg*PRrh9=mriuI2rkJHNrlY5ermh##
rnm_7roO.FrpB^Srq$-^!;?Ngp\t$gqu6Qkro=%:s8N#srVl`oqYp6gpAX[_nG_hSlMfoEir7g6fDa7u
ci2#b_u@FM[JmE0WW&RiS,S]PNW+_4Jc9upG5cL\C]7rF@fB^5>Q.b(;Z9Ml:B!oc9)_B\7fGjU7/K@0
6N0:%5_21O5_21O5c6mH6/=m,6iKLQ7K,dU8H)3[9E%]c;#XAl=T2M'?N+F5BDu]GEW1+[HN&KpL]3;4
Q2[6OT`1qiYPts/^])1NaSsNbe,ItuhYuL5jo4QEm/HMRoD\C_pAt$_rqcWkrr)`nj8\';rr2oprql]k
rqHEbrpp'Wrp0RJro="9rn[S)rmLelrl4rRrk8<;riZ6urh07Yrf[8=re:?%rd"KbrbqdMrac"9r`oG*
r`9"rr_NMfr_!/\r^ZrVr^?NKksGA8bs6hFJO"cOJO#elr^#[5qa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)
ra>_:rb;@MrcJ-brdb!&repc=rgEbYrhoatrj2U;rkeZSrm1Smrmq))ro!e9rosFKrpTjWrq-9c!Vc?f
qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wli-/Jj8S!9h>Yt(dJhDi`W!^Q^&G>:XT#*rT)P,VP5^@<
L&QT$GlDd`DuODKAH$!9>lIk)<W5kp:]=)f8cD9[8,bsV7/0.66N09q5_21O5_21O5b:7?60:N26iKLQ
7K,gV8H)3[:&[rf;>sSp=T2S)@/a^9BDuiKF8gF`J,Y-#MZ/e<R/W]VVZ*^sZMqQ:_>_FQc2Q,iec+D(
i;Vd9l2L&Kn,DnWo`4^ep\4[`rql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rmh"qrltG]
rk\THriuI(rhf[crg3VHre^W,rdOiirc8!Urb)4@ra5Y0r`K/"r_`Yjr_3;_r^d#Xr^?EHksGA8bs6hF
JO"cOJO#elr^#[5qa:6Kr^QlWr^m)_r_EGir`/r"r`oG0raYq?rbh^Urc\9ire(3,rfR2Hrgj%criH+(
rk/6Grl+l]rmC_qrnRM1ro3q@rp0RPrpg![!;6HepAXpfqu6Njro=%=s8N#srVl`oqYp<ipAX[_nG_kT
li-,Iir7g6g]#\$d/M8g_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[D>n/HA,]j7>Q._'<W5ho:B!rd
8cD9[7fGgQ6fUN46-VZG5_21O5_21l5lO(06N0@L7/f[T8,c*Z9`@fd;#XJo=T2P(?iFR7B)ZZHEW1+[
If=ruM#NJ7Q2[<QV#IFoYl;65^Ac%Lbl5rfe,J,$hu;X7kl0lHmf)_ToDnRcp@eL]rql]mrr)iqj8\0>
rr2oqrquclrqZQdrq$-YrpKdNroa:>rndY/rmUkmrlb;YrkABArilC%rhTO_rfmDCreCE'rdFcgrc.pS
ral(<ra5Y-r`B(ur_WShr_3;_r^d#Xr^?WNlpCA2bs6hFJO"cOJO#\iqa'I5r^6QNr^QlWr^m)_r_<Ag
r`&kur`T5-raPk<rb_XSrcS3grdt-(rf@&DrgWn_ri5t%rj_sArkn`Yrm1SmrnIG/ro*k>rp'LNrp]pY
!;-Bcp&=ddqu6NmrVlfVs5X.Yrr2lqr;QQlq>U'doD\7Ymf)MNkPjH>hYu7.e,I\mbPoBX^&GP@Yl:[%
U]-_]Pl?aCL&QZ&I/\6eE;j\QAc?0<?N++,=8l.t;#X5h9`@W_8H)*X7/K@<6N09h5_21O5_21O5a=V6
60pr;6i0:N7fGpW8cDE_:&[ug;uThs=oMb,@K'j;D#SDQFT-[eJGt9%O8bCCRf9)]WW'.$\Gj5A_Z%aX
ci2DmgA]q-iVr$>lMg5NnG`"Zo`=aYrqZQjrqucorr1sXJ,
~> %APLeod
EI
92 0 0 27 194 258 cm
BI
/Width 276
/Height 81
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlX
r_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.C
rpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1
ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^W
rd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[
rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFD
ra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TO
r^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cO
JO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6J
rlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4
rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Q
r^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMk
r`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^
rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnK
repc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tf
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2
rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWh
rq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"
r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NM
r^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!
rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mb
rkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"
JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mrau.;r`oG*r`&kpr_NMfr_!/\r^QlT
r^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/ar_NMkr`&l"ra#M2rau.Drbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[qu-NjrqQKerq$-Z
rpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrau.;ra#M,r`/qqr_NMe
r_!/]r^QlUr^?WNr^*\OJO"cOJO&]iqa19Lr^?`Sr^QlYr_*5ar_NMkr`/r$r`oG1rau.FrbqdXrd+Qn
reCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XTDrr2fnrqcWh
rqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$
r_relr_<Aar^m)Yr^HfSqa:?LX?hD'JO+iQn3Qq<r^6ZQr^HfUr^m)^r_<Afr_i_qr`];,ra>_<rbMLO
rcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmqu5aXj8],X
rr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"Kbrc%jPrb)4<
ra#M,r`/qrr_NMfr_!/]r^QlUr^?WNWBu/&JO4oSl9bJ;r^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4G
rc%jYrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm4ri,mkrg`tNrf-o4rdauprcS3ZrbVRI
raGe4r`fA&r`&kor_NMer_!/\r^ZrWr^<VNJO=uUJOAflqaCEQr^ZrYr_!/`r_NMjr`&ktr`fA.raGe>
rbMLPrcS3drdb!'rf-o?rg`t^ri,n&rj_s@rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sX
j8],Xrr)imrqQKerq$-ZrpKdMroX4>rn[S,rmh"orlP/Xrk8<?rj)O&rhBC^rf[8?re^W)rd4Wgrc%jQ
rb;@@ra5Y0r`B)!r_`Ykr_<Abr^m)[r^W_PJOP,YJOS`jr^ZrYr^m)^r_<Agr_`Yor`B)(ra5Y6rb;@K
rc%j\rd=]qre^W7rf[8NrhBCkrj)O5rk8<LrlY5drmh#$rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!UrosFEro3q6rn@A%rm1Scrl"fLrjVm4ri5smrgj%Prf@&9rdk&srcnE^rbh^M
raYq8ra#M*r`/qrr_WShr_3;`r^m)[UIKf(JOY2[k=5GAr^m)]r_3;dr_WSmr`9##ra#M2raYqBrb_XS
rcnEirdk'+rf6uArgj%`ri5t'rj_s@rl"fYrm1Sorn7;-ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],X
rr)imrqQKerq$-ZrpKdNroa:@rndY.rmh"prlb;[rkJHCrj2U)rhTOcrg!JErepc.rdXonrc8!VrbVRF
raPk6r`];'r`9"rr_WSir_3;ar_!&ZWCVS2JOk>_l:CnGr_!/_r_3;er_`Ymr`9##r`];.raPk<rbVRP
rc8!ardOj!repc;rg!JTrh]Uprj2U7rkJHOrlY5ermh#$rndY7roa:GrpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!Urp'LGro="8rn@A&rm:Yfrl4rPrji$8riH*rrh'1VrfR2=re19#rd4Wcrc%jR
rb)4@ra>_1r`T5%r_reor_WShr_<Acqb*n\JP(JcJP,3"r_*,^r_EGhr_i_or`B)%r`oG1rac"@rb_XR
rcA'crdb!$rf$i=rg3VVrh]Uqrj;[9rkJHPrlkAgrmq)&rnm_8roa:GrpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!Vrp'LGroF(9rn@A'rm:YgrlG)Srk&0;riQ0srh07Wrf[8@re:?&rd=]frc8!V
rb2:BraGe5r`fA)r`/qsr_i_lqbR)`WD%k:JP:Vgl:h1Or_NDfr_i_or`/r#r`oG0raGe;rb2:Lrc8!\
rd=]qre:?3rf[8Irh07griQ1-rk&0FrlG)_rm:YrrnIG0roF(Brp'LOrpg!ZrqHEfrqcWmrr1sXj8],X
rr)imrqQKerq-3[rpTjProj@Bro!e2rn.4srlkA^rkSNFrjMg/ri#girgNhNrf@&6re(3"rcnEarbqdP
rb;@Dra>_3ra#M+r`B)!r_reoqbX.cJPUhmJPYQ,qb[8ir_rerr`B)%ra#M1ra>_;rb2:IrbqdXrcnEl
re(3*rf@&CrgNh[rhoaurjMg<rkSNRrlkAgrn.5)ro!e:roj@IrpTjWrq-3arqZQirr)iqj8\0>rr2oq
rqcWhrqHEarpp'Wrp9XJroF(:rnRM*rmC_irlP/Urk8<?rilC$rhBC^rg*PFreg]/rdauprc\9]rbh^N
rb2:@raGe5r`oG+r`K/#r`/qsUJcY@JPq%sk>M:Yr`/qur`K/'r`oG0raGe9rb2:Grbh^Urce?grdb!%
reg]:rg*PRrhBCkrilC2rk/6HrlP/armC_trnIG1roF(Brp9XQrpp'\rqHEfrqcWmrr1sXj8],Xrr)im
rqQKerq-3\rpTjQroj@Cro!e2rn7;!rm(McrkeZJrji$4ri5snrgj%Trf[8=reCE(rdOilrcS3Zrb_XL
ral(=qdBD/r`];'r`B)"qc0UpJQ.2"JQ1o6r`/qur`B)$r`];+qdBD5ral(Drb_XRrcS3crdOiureLK2
rf[8Jrgj%ari?%&rji$BrkeZWrm(Mkrn7;,ro!e;roj@JrpTjWrq-3arqZQirr)iqj8\0>rr2oqrql]j
rqHEarpp'Xrp9XKroX4<rn[S-rmUknrlkA[rkSNGrj)O)rhf[frgWnPrf@&9reCE&rd=]jrc8!Wrbh^M
rb2:CraGe6ra5Y1r`oG,r`Z1%JQ[P,JQ_ACqc`u'r`oG.ra5Y4raGe<rb2:Grbh^Src8!`rd=]qreCE1
rf@&DrgNhZrhf[srj)O9rkSNOrlkAfrmUl#rn[S3roX4Drp9XRrq$-]rqHEfrql]nrr1sXj8],Xrr)in
rqcWhrq-3\rp]pSrosFFro3q6rnIG%rm:Yhrl+lQrk8<;riZ7"rh9=^rg<\Hrf$i5rdt-!rd=]grcA'W
rb_XLrb2:Brac";ra>_4ra,J-WEb!ZJR!b2l<O<ora,S2ra>_7raYq=rb2:Grb_XQrcA'^rd=]prdt-+
rf-o=rg<\Trh9=jriZ7,rk8<Irl+l]rmC_prnIG0ro3q?rp'LMrp]pYrq-3brqZQjrr)iqj8\0>rr2oq
rql]krqQKbrpp'XrpB^Mroj@@rnm_1rmh"rrm1S`rkeZLrjDa0ri?$mrgs+Xrfd>Brepc/rdk&urcnEb
rcA'Xrbh^Orb2:Cral(=raPk8UL8X\JRF%:k@"9traPk:ral(Arb2:Irbh^SrcA'^rcnElrdt-&repc:
rfd>Mrgs+`ri?%&rjDa?rkn`Trm1Slrmh#'rnm_7roj@HrpB^Srq$-]rqQKgrql]nrr1sXj8],Xrr)in
rqcWhrq69^rp]pTrp0RIro="9rn[S*rmUkmrlG)WrkJHCrj2U,rhf[hrgs+Urfd>Breg]0rdt-!rd4Wi
rcJ-[qeuIMrbMLJrb21Arar-@JRsCDJS"4[rau%?rb;@HrbMLMqeuISrcJ-brd=]prdt-)reg]9rfd>J
rgs+`rhf[trj2U7rkJHNrlG)brmUkurn[S3ro="Arp'LNrp]pYrq69crqZQjrr)iqj8\0>rr2oqrql]k
rqQKdrq-3[rpTjProj@Bro*k5rn.5"rm:Yerl4rSrk&0;ric=#rhTOcrgWnQrfR2>re^W0rdk&urd=]i
rc\9`rc.pVrbqdQrbVRLrbA<EJSB[LJSFLcqeH+GrbVRNrbqdTrc.p[rce?drd=]ordk'(reg]7rfR2G
rgWnZrhTOmric=/rk&0Hrl4r[rm:Yprn.5,ro*k;roj@IrpTjVrq-3`rqQKgrql]nrr1sXj8],Xrr)in
rqcWirq??`rpg!Vrp0RJroO.>rnm_/rmq(rrlkA_rkn`KrjVm3ri?$qrhBC`rgEbNrfI,=repc/rdt-!
rdFclrcnEbrcJ-[qf)FNVJ^s&JSp$Vl>HK;qf)OTrcA']rcnEgrdFcqrdt-&repc9rfI,ErgEbWrhBCi
ri?%'rjVm?rkn`UrlkAhrmh#%rnm_7roO.Drp9XQrpg![rq??erqcWkrr)iqj8\0>rr2oqrquclrqZQe
rq-3\rp]pSrp0RGro3q7rnIG)rmUkmrlY5[rkSNFrjDa0ri?$rrh07]rgWnOrfR2@reg]2reCE'rdaut
rd=]lrd+Qgrc\9`UND'/JTQHbkB-]Grce?drd+Qjrd=]prdb!!reCE.reg]9rf[8FrgWnYrh07gri?%&
rjDa:rkSNQrlb;ermUkurnIG0ro="?rp0RNrp]pXrq69arqZQjrqucorr1sXj8],Xrr)iorql]krq??a
rq-3ZrpKdProa:Aro!e3rn.5"rm:YgrlP/Urk8<@riuI*ri5snrh9=_rgEbOrf[8Arf$i7reCE*re(3#
rdXorrd=]lTR)08JU2lnjEgfPrd=]ordXotre(3(reCE1rf-o<rf[8HrgEbWrh9=eri5t"riuI4rk/6H
rlP/`rm:Yorn7;,ro!e:roa:IrpKdTrq-3_rq??frql]mrr)iqj8\0>rr2oqrqucmrqcWgrq??`rp]pT
rp9XJroO.<rndY.rn%.srm(Mdrkn`Nrk/6:riuI*rhoakrh07^rgNhPrf[8Brf@&:reg]2re19'rdt#u
rdXotVLO/HJU`6#l@8e`rdXotrdk'#re(3'reUQ1repc:rfR2Crg*POrgs+^rhTOkriZ7)rj2U:rkJHM
rlb;drmC_srn@A.ro*k<roj@JrpKdTrq-3_rqHEgrql]mrr)iqj8\0>rr2oqrqucmrqcWgrq??`rpg!W
rpKdMroa:Aro!e3rn@A$rmC_jrlG)VrkJHCrjMg2riZ7#rhoairh07^rgNhQrg!JGrfI,?rf-o9repc5
reUQ/UP=>SJVJ`1kD&tkre^W3repc7rf-o<rfR2Crg!JMrgNhXrh07brhoaqriZ7*rjDa9rkJHNrlG)a
rmC_prn@A,ro!e:roa:FrpKdSrpg![rq69brqcWkrqucorr1sXi;`fUrqucmrqcWhrq??arpp'XrpKdN
roj@Dro*k5rnIG'rmUkmrlb;\rk\TIrji$:riuI*ri?$rrh]Ufrh'1[rgNhRrg*PJrf[8CqiCW6UPsb_
JW,/=kD]D"rf6l:rfR2CrfmDJrg<\Rrg`t[rh9=erhoarriZ7*rjMg:rk8<Irl4r\rm1Smrmq)'rndY5
roX4Drp'LNrp]pXrq69brqQKhrql]mqu5XUi;`fUrr)iorqcWhrqHEcrpp'YrpTjQrosFFro3q8rndY,
rmh"qrm(Mbrl+lPrk8<Brj;[1ric=&ri,morhBCcrh'1]rg`tVrg3VMrfm;Drf[/@WK;[mJWPGElB)"-
qi^rBrfmDIrg3VQrgWnYrh'1`rhBChri#gtric=,rj;[9rk8<Hrl+lYrm(Mjrmh##rndY4ro3q?rosFK
rpTjVrpp'^rqHEerqcWkrr)`nj8\';rr2oqrqucmrqZQgrqHEarpp'WrpKdOrosFDro3q7rnRM+rmq(q
rltGcrl"fPrkJHErj_s8rj)O-riZ7$ri,morhKIerh9=aqk*bVqjaOQJX_4[JXc%ropl#Prh'(\rh9=c
rhKIiri#gsriZ7)rj)O2rj_s>rkJHLrl"fZrm(Mirmq)%rnRM1ro3q=rosFJrpKdSrpp'\rqHEerqZQj
rqucoqu5XUi;`fUqu-NlrqcWhrqHEarq$-ZrpTjQrp'LGroO.<rnm_0rn.5"rmC_jrlP/[rkn`Nrk8<B
rj_s8rj2U.riZ7&ri5srqksFjrh]Uhrh?'ZJY@XgJYD.urhBCerh]UkqksFmri5t"ric=*rj2U4rj_s=
rk/6Grkn`TrlP/brmC_prn.5)rnm_6roF(Arp'LLrpTjVrq$-]rqHEfrqcNirr)`nj8\';rr2fnrqucl
rqQKerq69_rpp'XrpB^Nroj@DroF(:rn[S.rmq(trm1Shrlb;^rkn`PrkJHHrk&0?rjDa4rj)O-ric=(
riQ1$ri?$uri)QhJZ+-uJZ.Y.ri,msri?%"riQ1&ric=*rj)O0rjDa9rk&0DrkJHKrkn`VrlY5crm1Sm
rmq)'rndY4roF(@roj@IrpKdTrpp'[rq69brqZQiqu$Hlqu5XUi;`fUqu-NlrqcNfrqHEcrq-3ZrpTjS
rp0RKroj@Bro*k6rnIG*rmq(rrm:Yirlb;_rl4rTrk\TKrkABErk&0?rj_s9rjDa4rj2U0qlup#JZs^0
J["=Ariu@+rj2U2rjDa6rjVm;rk&0CrkABHrk\TOrl4rYrlb;drm1Skrmq)$rnIG0ro3q<roj@Grp0RO
rpTjUrq-3_rqHEfqtg3frr)`nj8\';qu6TnrquQfrqHEcrq-3\rp]pUrpB^NrosFDroF(;rnm_0rn7;$
rmUknrm1Sfrlb;]rl4rUrkeZNqnN-Drk/6Aqml^9os^p/J[U-<J[XjPqmZI4rjhp;rk/6DqnN-HrkeZQ
rl+lWrlb;crm1SjrmUksrn7;+rnm_6ro=">rosFJrpB^Rrpg!Yrq-3_rqH3arqucoq#9=Rh>dKRqu-Eh
rqcWgrq??arq$-[qsaUPrp0RHroX4@ro!e4rn[S+rmq(urmC_lrm1SfrlY5^rl4rVrl"fQrk\KIqnM^8
WP!epJ\6QHlFcf'rkJ6Drk\TNrl"fTrl4rZrlb;brm1SjrmC_prmq)$rn[S2ro!e:roO.Brp0RNqsaUU
rq$-^rq??cqtg<hrr)`nh>c=2rr2fnrqucmrqcWirqQKerq69_rpg!WrpTjSrp0RKroj@Bro*k6rn[S/
rn@A'rmh"srmC_lrm1ShrltGdrlY,[rl>#Xrl+?EXM]V,J]!&VnAF_5rl+lVrl>#[qo\o^rltGfrm1Sj
rmC_ormh#"rn@A+rn[S2ro3q<roj@Grp0ILrp]pWrq$-^rqHEerqZQirql]mrr)`nh>c=2rr2fnrqucm
qtg<frqQKdrq-3]rpg!WrpTjRrp0RJroX4@ro3q8rndY0rn@A(rn%/"rm^qrrmC_lrm1Shqp#,arlauW
prTVYJ]ND`J]R?%prW3Orlb;brlt>crm1SjrmC_orm^qtrn%/&rn@A,rndY4ro3q<roX4Erp0RNrpTjU
rpg!Zrq69arqQKgqtg<hrqucoqu5FOh>dKRq#13irql]krqZQgrqHEcrq-3\rpg!Vrp]pSrp0RIroX4A
ro3q9qqqD/rnRM+rn.5$rmh"trmUkprmCVio$=)VJ^/hlJ^3H(p!<E[rmC_nrmUkrrmh#!rn%/&rnRM/
qqqD3ro3q=roa:Erp0RNrp]pUrpg!Yrq-3_rqHEerqZQirql]mqu-Ekh>c+,rr2fnrquZjrqcWhrqHEc
rq-3]rpp'XrpTjSrp9XLrosFFroX4@ro*k7qqqD0rn[S/rnIG+qq:u$rn%/#pso8kVUL+FJ^]2!mF1aX
qpk\srn%&"rn7;)rnIG-rn[S1qqqD2ro*k;roO.BrosFJrp9XPrpTjUrpp'[rq-3`rqHEerqcWjrqlTj
rr)`ngAfe)rr2fnqu$HjrqcWhqtL*_rq-3]rpp'XrpTjRrp9XMrosFGroa:BroEt9ro*k6ro!e4rn[S/
ptPf%n(F\mJ_5P+J_98?o%F#rqqM#'rn[S1ro!e5ro*b6ro=">roa:ErosFJrp9XOrpTjVrpp'[rq-3_
rqH<brqcWkq#(-iqu5=LfDkjLq#13irql]kqt^6drqHEcrq-3]rpp'Yrp]pUrpKdOrp'LIroj@DroO.?
qr@\8ro*Y1rnm_5rnm_3Rb`PNJ_bn5hVJ(cro!e5pu)/1ro3q;qrIb<roa:ErosFIrp0ROrpTjUrpg!Y
rq$-]rq69bqtU0drqcWkrquQiqu5=LeGoOIp&4mfq"k!bqtL!\rq-*XrpTjUrpKdQrp9OJqs"+Dqrdt@
puM>4qr41*J`21=J`5\Kp#>u2puM>7roa1BrosFJqs==LrpKdTrpTjUrpfmXrq69bqtTs_rqucnqu-Ek
eGn%uq#:0hrquZjrqcNfrqQKdqt9aUrpg!WrpTjSqsFCLrp0IHros+>qrdk=S`PFaJ`VIEjQ6'sro`t<
ros=Frp0RMrpBUNrpTjUrpfdTrq60^qtU0dqtg<hrqucnrr)WkeGn%uq#:'erqucmqtg3cq"O[Yrq-3\
qsj[Tp$_nJqsFCLqs4.Ep$&.5J`q[KJ`u(Vqs!e=rp0IJrpBUNqsXFOrpfmVqt0m\q"Od`q"k!erquco
qu-<heGmhoqu69erquZjqtg<frqQ9_qt9jYrq$-[qsjRQo'__/JaS*WJaV(Vp$_SCrpg!Yrq#pWrq6'\
rqQKgq"k!equ$?ip&<A=cN!S:qu-EiqtpBhp%eU^rqHEcp%@nIqssXSOmmqkJae6[eaWS.p%%eIp%A=X
rqH<bqt^-crqlBdrr)iqp&<A=bQ%A:o)8Rcqtp9eqt^6dp%SIZq"==Po(/=@Jb"B_Jb%[gp%.bHq"=OX
qtL!_rqZ6`rqlTjp&4mhqu4e=_Z0E1o)8Rcq"sa\qt^$^i:io<JbFZgJbJ'rj7i?DrqZ-]q"ssdp&4[b
rr9t;_Z0*(qu-3co)&F_fD2*7JbXfkJb\4!gA1XBp&"=Xrr)<brr9t;\c;I(n,;qWp%s=:r;)!@Jbjro
^&%X'o).tTq#9sd`W)t<p&<88Qi)F4Jc()sf_j.qo)@nR`W)t<`Vu,#Jc1/uJc4@%^]*Kt`W(nsJc>BB
Jc:6"Jc<7[aT'6ZJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$
JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$
JcC<$JcC<$`W(G
~> %APLeod
EI
92 0 0 27 0 258 cm
BI
/Width 276
/Height 81
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-W
rbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_p
r`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??d
rqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;
reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlX
r_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.C
rpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1
ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:
r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Ml
rn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUkl
rlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MK
JO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1
rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@C
ro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#X
r^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<
rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKd
rpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&ko
r_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^W
rd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[
rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFD
ra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*
ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWl
rr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%
rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`
r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdT
rpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#gi
rgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TO
r^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+
ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/W
rk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cO
JO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6J
rlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4
rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Q
r^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\
ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'X
rpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMe
r_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+Qn
reCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)io
rqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1
r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:
rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iq
k5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kb
rbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMk
r`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^
rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnK
repc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfU
r^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<
roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=
rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tf
r^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)a
rmUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!
rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TM
WBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#
rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdL
roO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\
r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2
rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWh
rq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"
r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@L
rcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTD
rr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^M
ral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/`r_NMkr`&l"
r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKh
rqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mbrkn`JrjMg1ri#girgWnKrepc1
rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"JO"cOm6LY:r^-TOr^HfUr^d#\
r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=rkn`Vrm(Mlrn.5+ro*k<roj@L
rp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<rn[S+rmUklrlP/Wrk/6=rilC#
rh9=\rfI,;reCE%rd"Kbrbh^Mral(:r`oG*r`&kor_NMer_!/\r^QlTr^6ZOr^!MKJO"cOJO&Tfr^$NM
r^6ZRr^QlXr_!/`r_NMkr`&l"r`oG1ral(Crbh^Wrd+QnreCE2rfI,Krh9=irilC1rk/6JrlG)armUl!
rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[rr)iorqcWhrq??^rp]pTroj@Cro*k4rn.5!rm(Mb
rkn`JrjMg1ri#girgWnKrepc1rdXomrcJ-WrbDFDra>_1r`T5"r_`Yjr_3;`r^d#Xr^?`Qr^-TMWBc#"
JO"cOm6LY:r^-TOr^HfUr^d#\r_3;er_i_pr`T5*ra>_:rb;@LrcJ-crdXp%rf$i<rgWn\ri#h#rjMg=
rkn`Vrm(Mlrn.5+ro*k<roj@Lrp]pXrq??drqcWlrr)iqk5XTDrr2oqrquclrqQKdrpp'XrpKdLroO.<
rn[S+rmUklrlP/Wrk/6=rilC#rh9=\rfI,;reCE%rd"Kbrbh^Mrau.;r`oG*r`&kpr_NMfr_!/\r^QlT
r^6ZOr^!MKJO"cOJO&Tfr^$NMr^6ZRr^QlXr_!/ar_NMkr`&l"ra#M2rau.Drbh^Wrd+QnreCE2rfI,K
rh9=irilC1rk/6JrlG)armUl!rn[S4roO.CrpKdTrpp'^rqQKhrqucorr2'[k5YG[qu-NjrqQKerq$-Z
rpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"KbrbqdNrau.;ra#M,r`/qqr_NMe
r_!/]r^QlUr^?WNr^*\OJO"cOJO&]iqa19Lr^?`Sr^QlYr_*5ar_NMkr`/r$r`oG1rau.FrbqdXrd+Qn
reCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)`nk5XTDrr2fnrqcWh
rqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm3ri#gjrg`tMrf$i2rdXomrcJ-XrbDFFra>_2r`];$
r_relr_<Aar^m)Yr^HfSqa:?LX?hD'JO+iQn3Qq<r^6ZQr^HfUr^m)^r_<Afr_i_qr`];,ra>_<rbMLO
rcJ-crdXp%rf$i=rg`t]ri#h$rjVm?rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmqu5aXj8],X
rr)imrqQKerq$-ZrpKdMroX4>rn[S+rm^qnrlP/Xrk8<?riuI$rhBC^rfR2=reCE%rd"Kbrc%jPrb)4<
ra#M,r`/qrr_NMfr_!/]r^QlUr^?WNWBu/&JO4oSl9bJ;r^?`Sr^QlYr_*5br_NMkr`/r$ra#M2rb)4G
rc%jYrd+QnreCE2rfR2Mrh9=iriuI3rk8<LrlY5drm^r#rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!UrosFEro3q5rn.5"rm1Scrl"fLrjVm4ri,mkrg`tNrf-o4rdauprcS3ZrbVRI
raGe4r`fA&r`&kor_NMer_!/\r^ZrWr^<VNJO=uUJOAflqaCEQr^ZrYr_!/`r_NMjr`&ktr`fA.raGe>
rbMLPrcS3drdb!'rf-o?rg`t^ri,n&rj_s@rl"fYrm1Snrn7;,ro3q>rosFMrp]pYrqHEfrqcWmrr1sX
j8],Xrr)imrqQKerq$-ZrpKdMroX4>rn[S,rmh"orlP/Xrk8<?rj)O&rhBC^rf[8?re^W)rd4Wgrc%jQ
rb;@@ra5Y0r`B)!r_`Ykr_<Abr^m)[r^W_PJOP,YJOS`jr^ZrYr^m)^r_<Agr_`Yor`B)(ra5Y6rb;@K
rc%j\rd=]qre^W7rf[8NrhBCkrj)O5rk8<LrlY5drmh#$rn[S5roX4ErpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!UrosFEro3q6rn@A%rm1Scrl"fLrjVm4ri5smrgj%Prf@&9rdk&srcnE^rbh^M
raYq8ra#M*r`/qrr_WShr_3;`r^m)[UIKf(JOY2[k=5GAr^m)]r_3;dr_WSmr`9##ra#M2raYqBrb_XS
rcnEirdk'+rf6uArgj%`ri5t'rj_s@rl"fYrm1Sorn7;-ro3q>rosFMrp]pYrqHEfrqcWmrr1sXj8],X
rr)imrqQKerq$-ZrpKdNroa:@rndY.rmh"prlb;[rkJHCrj2U)rhTOcrg!JErepc.rdXonrc8!VrbVRF
raPk6r`];'r`9"rr_WSir_3;ar_!&ZWCVS2JOk>_l:CnGr_!/_r_3;er_`Ymr`9##r`];.raPk<rbVRP
rc8!ardOj!repc;rg!JTrh]Uprj2U7rkJHOrlY5ermh#$rndY7roa:GrpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!Urp'LGro="8rn@A&rm:Yfrl4rPrji$8riH*rrh'1VrfR2=re19#rd4Wcrc%jR
rb)4@ra>_1r`T5%r_reor_WShr_<Acqb*n\JP(JcJP,3"r_*,^r_EGhr_i_or`B)%r`oG1rac"@rb_XR
rcA'crdb!$rf$i=rg3VVrh]Uqrj;[9rkJHPrlkAgrmq)&rnm_8roa:GrpKdTrq$-`rqZQirr)iqj8\0>
rr2oqrqcWhrqHE`rpg!Vrp'LGroF(9rn@A'rm:YgrlG)Srk&0;riQ0srh07Wrf[8@re:?&rd=]frc8!V
rb2:BraGe5r`fA)r`/qsr_i_lqbR)`WD%k:JP:Vgl:h1Or_NDfr_i_or`/r#r`oG0raGe;rb2:Lrc8!\
rd=]qre:?3rf[8Irh07griQ1-rk&0FrlG)_rm:YrrnIG0roF(Brp'LOrpg!ZrqHEfrqcWmrr1sXj8],X
rr)imrqQKerq-3[rpTjProj@Bro!e2rn.4srlkA^rkSNFrjMg/ri#girgNhNrf@&6re(3"rcnEarbqdP
rb;@Dra>_3ra#M+r`B)!r_reoqbX.cJPUhmJPYQ,qb[8ir_rerr`B)%ra#M1ra>_;rb2:IrbqdXrcnEl
re(3*rf@&CrgNh[rhoaurjMg<rkSNRrlkAgrn.5)ro!e:roj@IrpTjWrq-3arqZQirr)iqj8\0>rr2oq
rqcWhrqHEarpp'Wrp9XJroF(:rnRM*rmC_irlP/Urk8<?rilC$rhBC^rg*PFreg]/rdauprc\9]rbh^N
rb2:@raGe5r`oG+r`K/#r`/qsUJcY@JPq%sk>M:Yr`/qur`K/'r`oG0raGe9rb2:Grbh^Urce?grdb!%
reg]:rg*PRrhBCkrilC2rk/6HrlP/armC_trnIG1roF(Brp9XQrpp'\rqHEfrqcWmrr1sXj8],Xrr)im
rqQKerq-3\rpTjQroj@Cro!e2rn7;!rm(McrkeZJrji$4ri5snrgj%Trf[8=reCE(rdOilrcS3Zrb_XL
ral(=qdBD/r`];'r`B)"qc0UpJQ.2"JQ1o6r`/qur`B)$r`];+qdBD5ral(Drb_XRrcS3crdOiureLK2
rf[8Jrgj%ari?%&rji$BrkeZWrm(Mkrn7;,ro!e;roj@JrpTjWrq-3arqZQirr)iqj8\0>rr2oqrql]j
rqHEarpp'Xrp9XKroX4<rn[S-rmUknrlkA[rkSNGrj)O)rhf[frgWnPrf@&9reCE&rd=]jrc8!Wrbh^M
rb2:CraGe6ra5Y1r`oG,r`Z1%JQ[P,JQ_ACqc`u'r`oG.ra5Y4raGe<rb2:Grbh^Src8!`rd=]qreCE1
rf@&DrgNhZrhf[srj)O9rkSNOrlkAfrmUl#rn[S3roX4Drp9XRrq$-]rqHEfrql]nrr1sXj8],Xrr)in
rqcWhrq-3\rp]pSrosFFro3q6rnIG%rm:Yhrl+lQrk8<;riZ7"rh9=^rg<\Hrf$i5rdt-!rd=]grcA'W
rb_XLrb2:Brac";ra>_4ra,J-WEb!ZJR!b2l<O<ora,S2ra>_7raYq=rb2:Grb_XQrcA'^rd=]prdt-+
rf-o=rg<\Trh9=jriZ7,rk8<Irl+l]rmC_prnIG0ro3q?rp'LMrp]pYrq-3brqZQjrr)iqj8\0>rr2oq
rql]krqQKbrpp'XrpB^Mroj@@rnm_1rmh"rrm1S`rkeZLrjDa0ri?$mrgs+Xrfd>Brepc/rdk&urcnEb
rcA'Xrbh^Orb2:Cral(=raPk8UL8X\JRF%:k@"9traPk:ral(Arb2:Irbh^SrcA'^rcnElrdt-&repc:
rfd>Mrgs+`ri?%&rjDa?rkn`Trm1Slrmh#'rnm_7roj@HrpB^Srq$-]rqQKgrql]nrr1sXj8],Xrr)in
rqcWhrq69^rp]pTrp0RIro="9rn[S*rmUkmrlG)WrkJHCrj2U,rhf[hrgs+Urfd>Breg]0rdt-!rd4Wi
rcJ-[qeuIMrbMLJrb21Arar-@JRsCDJS"4[rau%?rb;@HrbMLMqeuISrcJ-brd=]prdt-)reg]9rfd>J
rgs+`rhf[trj2U7rkJHNrlG)brmUkurn[S3ro="Arp'LNrp]pYrq69crqZQjrr)iqj8\0>rr2oqrql]k
rqQKdrq-3[rpTjProj@Bro*k5rn.5"rm:Yerl4rSrk&0;ric=#rhTOcrgWnQrfR2>re^W0rdk&urd=]i
rc\9`rc.pVrbqdQrbVRLrbA<EJSB[LJSFLcqeH+GrbVRNrbqdTrc.p[rce?drd=]ordk'(reg]7rfR2G
rgWnZrhTOmric=/rk&0Hrl4r[rm:Yprn.5,ro*k;roj@IrpTjVrq-3`rqQKgrql]nrr1sXj8],Xrr)in
rqcWirq??`rpg!Vrp0RJroO.>rnm_/rmq(rrlkA_rkn`KrjVm3ri?$qrhBC`rgEbNrfI,=repc/rdt-!
rdFclrcnEbrcJ-[qf)FNVJ^s&JSp$Vl>HK;qf)OTrcA']rcnEgrdFcqrdt-&repc9rfI,ErgEbWrhBCi
ri?%'rjVm?rkn`UrlkAhrmh#%rnm_7roO.Drp9XQrpg![rq??erqcWkrr)iqj8\0>rr2oqrquclrqZQe
rq-3\rp]pSrp0RGro3q7rnIG)rmUkmrlY5[rkSNFrjDa0ri?$rrh07]rgWnOrfR2@reg]2reCE'rdaut
rd=]lrd+Qgrc\9`UND'/JTQHbkB-]Grce?drd+Qjrd=]prdb!!reCE.reg]9rf[8FrgWnYrh07gri?%&
rjDa:rkSNQrlb;ermUkurnIG0ro="?rp0RNrp]pXrq69arqZQjrqucorr1sXj8],Xrr)iorql]krq??a
rq-3ZrpKdProa:Aro!e3rn.5"rm:YgrlP/Urk8<@riuI*ri5snrh9=_rgEbOrf[8Arf$i7reCE*re(3#
rdXorrd=]lTR)08JU2lnjEgfPrd=]ordXotre(3(reCE1rf-o<rf[8HrgEbWrh9=eri5t"riuI4rk/6H
rlP/`rm:Yorn7;,ro!e:roa:IrpKdTrq-3_rq??frql]mrr)iqj8\0>rr2oqrqucmrqcWgrq??`rp]pT
rp9XJroO.<rndY.rn%.srm(Mdrkn`Nrk/6:riuI*rhoakrh07^rgNhPrf[8Brf@&:reg]2re19'rdt#u
rdXotVLO/HJU`6#l@8e`rdXotrdk'#re(3'reUQ1repc:rfR2Crg*POrgs+^rhTOkriZ7)rj2U:rkJHM
rlb;drmC_srn@A.ro*k<roj@JrpKdTrq-3_rqHEgrql]mrr)iqj8\0>rr2oqrqucmrqcWgrq??`rpg!W
rpKdMroa:Aro!e3rn@A$rmC_jrlG)VrkJHCrjMg2riZ7#rhoairh07^rgNhQrg!JGrfI,?rf-o9repc5
reUQ/UP=>SJVJ`1kD&tkre^W3repc7rf-o<rfR2Crg!JMrgNhXrh07brhoaqriZ7*rjDa9rkJHNrlG)a
rmC_prn@A,ro!e:roa:FrpKdSrpg![rq69brqcWkrqucorr1sXi;`fUrqucmrqcWhrq??arpp'XrpKdN
roj@Dro*k5rnIG'rmUkmrlb;\rk\TIrji$:riuI*ri?$rrh]Ufrh'1[rgNhRrg*PJrf[8CqiCW6UPsb_
JW,/=kD]D"rf6l:rfR2CrfmDJrg<\Rrg`t[rh9=erhoarriZ7*rjMg:rk8<Irl4r\rm1Smrmq)'rndY5
roX4Drp'LNrp]pXrq69brqQKhrql]mqu5XUi;`fUrr)iorqcWhrqHEcrpp'YrpTjQrosFFro3q8rndY,
rmh"qrm(Mbrl+lPrk8<Brj;[1ric=&ri,morhBCcrh'1]rg`tVrg3VMrfm;Drf[/@WK;[mJWPGElB)"-
qi^rBrfmDIrg3VQrgWnYrh'1`rhBChri#gtric=,rj;[9rk8<Hrl+lYrm(Mjrmh##rndY4ro3q?rosFK
rpTjVrpp'^rqHEerqcWkrr)`nj8\';rr2oqrqucmrqZQgrqHEarpp'WrpKdOrosFDro3q7rnRM+rmq(q
rltGcrl"fPrkJHErj_s8rj)O-riZ7$ri,morhKIerh9=aqk*bVqjaOQJX_4[JXc%ropl#Prh'(\rh9=c
rhKIiri#gsriZ7)rj)O2rj_s>rkJHLrl"fZrm(Mirmq)%rnRM1ro3q=rosFJrpKdSrpp'\rqHEerqZQj
rqucoqu5XUi;`fUqu-NlrqcWhrqHEarq$-ZrpTjQrp'LGroO.<rnm_0rn.5"rmC_jrlP/[rkn`Nrk8<B
rj_s8rj2U.riZ7&ri5srqksFjrh]Uhrh?'ZJY@XgJYD.urhBCerh]UkqksFmri5t"ric=*rj2U4rj_s=
rk/6Grkn`TrlP/brmC_prn.5)rnm_6roF(Arp'LLrpTjVrq$-]rqHEfrqcNirr)`nj8\';rr2fnrqucl
rqQKerq69_rpp'XrpB^Nroj@DroF(:rn[S.rmq(trm1Shrlb;^rkn`PrkJHHrk&0?rjDa4rj)O-ric=(
riQ1$ri?$uri)QhJZ+-uJZ.Y.ri,msri?%"riQ1&ric=*rj)O0rjDa9rk&0DrkJHKrkn`VrlY5crm1Sm
rmq)'rndY4roF(@roj@IrpKdTrpp'[rq69brqZQiqu$Hlqu5XUi;`fUqu-NlrqcNfrqHEcrq-3ZrpTjS
rp0RKroj@Bro*k6rnIG*rmq(rrm:Yirlb;_rl4rTrk\TKrkABErk&0?rj_s9rjDa4rj2U0qlup#JZs^0
J["=Ariu@+rj2U2rjDa6rjVm;rk&0CrkABHrk\TOrl4rYrlb;drm1Skrmq)$rnIG0ro3q<roj@Grp0RO
rpTjUrq-3_rqHEfqtg3frr)`nj8\';qu6TnrquQfrqHEcrq-3\rp]pUrpB^NrosFDroF(;rnm_0rn7;$
rmUknrm1Sfrlb;]rl4rUrkeZNqnN-Drk/6Aqml^9os^p/J[U-<J[XjPqmZI4rjhp;rk/6DqnN-HrkeZQ
rl+lWrlb;crm1SjrmUksrn7;+rnm_6ro=">rosFJrpB^Rrpg!Yrq-3_rqH3arqucoq#9=Rh>dKRqu-Eh
rqcWgrq??arq$-[qsaUPrp0RHroX4@ro!e4rn[S+rmq(urmC_lrm1SfrlY5^rl4rVrl"fQrk\KIqnM^8
WP!epJ\6QHlFcf'rkJ6Drk\TNrl"fTrl4rZrlb;brm1SjrmC_prmq)$rn[S2ro!e:roO.Brp0RNqsaUU
rq$-^rq??cqtg<hrr)`nh>c=2rr2fnrqucmrqcWirqQKerq69_rpg!WrpTjSrp0RKroj@Bro*k6rn[S/
rn@A'rmh"srmC_lrm1ShrltGdrlY,[rl>#Xrl+?EXM]V,J]!&VnAF_5rl+lVrl>#[qo\o^rltGfrm1Sj
rmC_ormh#"rn@A+rn[S2ro3q<roj@Grp0ILrp]pWrq$-^rqHEerqZQirql]mrr)`nh>c=2rr2fnrqucm
qtg<frqQKdrq-3]rpg!WrpTjRrp0RJroX4@ro3q8rndY0rn@A(rn%/"rm^qrrmC_lrm1Shqp#,arlauW
prTVYJ]ND`J]R?%prW3Orlb;brlt>crm1SjrmC_orm^qtrn%/&rn@A,rndY4ro3q<roX4Erp0RNrpTjU
rpg!Zrq69arqQKgqtg<hrqucoqu5FOh>dKRq#13irql]krqZQgrqHEcrq-3\rpg!Vrp]pSrp0RIroX4A
ro3q9qqqD/rnRM+rn.5$rmh"trmUkprmCVio$=)VJ^/hlJ^3H(p!<E[rmC_nrmUkrrmh#!rn%/&rnRM/
qqqD3ro3q=roa:Erp0RNrp]pUrpg!Yrq-3_rqHEerqZQirql]mqu-Ekh>c+,rr2fnrquZjrqcWhrqHEc
rq-3]rpp'XrpTjSrp9XLrosFFroX4@ro*k7qqqD0rn[S/rnIG+qq:u$rn%/#pso8kVUL+FJ^]2!mF1aX
qpk\srn%&"rn7;)rnIG-rn[S1qqqD2ro*k;roO.BrosFJrp9XPrpTjUrpp'[rq-3`rqHEerqcWjrqlTj
rr)`ngAfe)rr2fnqu$HjrqcWhqtL*_rq-3]rpp'XrpTjRrp9XMrosFGroa:BroEt9ro*k6ro!e4rn[S/
ptPf%n(F\mJ_5P+J_98?o%F#rqqM#'rn[S1ro!e5ro*b6ro=">roa:ErosFJrp9XOrpTjVrpp'[rq-3_
rqH<brqcWkq#(-iqu5=LfDkjLq#13irql]kqt^6drqHEcrq-3]rpp'Yrp]pUrpKdOrp'LIroj@DroO.?
qr@\8ro*Y1rnm_5rnm_3Rb`PNJ_bn5hVJ(cro!e5pu)/1ro3q;qrIb<roa:ErosFIrp0ROrpTjUrpg!Y
rq$-]rq69bqtU0drqcWkrquQiqu5=LeGoOIp&4mfq"k!bqtL!\rq-*XrpTjUrpKdQrp9OJqs"+Dqrdt@
puM>4qr41*J`21=J`5\Kp#>u2puM>7roa1BrosFJqs==LrpKdTrpTjUrpfmXrq69bqtTs_rqucnqu-Ek
eGn%uq#:0hrquZjrqcNfrqQKdqt9aUrpg!WrpTjSqsFCLrp0IHros+>qrdk=S`PFaJ`VIEjQ6'sro`t<
ros=Frp0RMrpBUNrpTjUrpfdTrq60^qtU0dqtg<hrqucnrr)WkeGn%uq#:'erqucmqtg3cq"O[Yrq-3\
qsj[Tp$_nJqsFCLqs4.Ep$&.5J`q[KJ`u(Vqs!e=rp0IJrpBUNqsXFOrpfmVqt0m\q"Od`q"k!erquco
qu-<heGmhoqu69erquZjqtg<frqQ9_qt9jYrq$-[qsjRQo'__/JaS*WJaV(Vp$_SCrpg!Yrq#pWrq6'\
rqQKgq"k!equ$?ip&<A=cN!S:qu-EiqtpBhp%eU^rqHEcp%@nIqssXSOmmqkJae6[eaWS.p%%eIp%A=X
rqH<bqt^-crqlBdrr)iqp&<A=bQ%A:o)8Rcqtp9eqt^6dp%SIZq"==Po(/=@Jb"B_Jb%[gp%.bHq"=OX
qtL!_rqZ6`rqlTjp&4mhqu4e=_Z0E1o)8Rcq"sa\qt^$^i:io<JbFZgJbJ'rj7i?DrqZ-]q"ssdp&4[b
rr9t;_Z0*(qu-3co)&F_fD2*7JbXfkJb\4!gA1XBp&"=Xrr)<brr9t;\c;I(n,;qWp%s=:r;)!@Jbjro
^&%X'o).tTq#9sd`W)t<p&<88Qi)F4Jc()sf_j.qo)@nR`W)t<`Vu,#Jc1/uJc4@%^]*Kt`W(nsJc>BB
Jc:6"Jc<7[aT'6ZJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$
JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$JcC<$JcC<$`W(MhJcC<$JcC<$JcE^hJcC<$
JcC<$JcC<$`W(G
~> %APLeod
EI
119 0 0 202 403 56 cm
BI
/Width 357
/Height 606
/BitsPerComponent 8
/Decode[
0 1
0 1
0 1
]
/DataSource cg_aiproc
ID
j8],Xrr)inrqcWirq69^rp]pSrosFFro!e2rn7;"rm1SerkeZJrjVm1ri#gjrgNhNrf6u2rdXoorcA'W
rbMLDraGe4r`K/"r_i_lr_<Abr^d#Yr^QZMmm=`RJO"cOJO"cOO$N/#pd>$Mr^ZrYr_*5br_WSlr`9##
ra,S4rac"DrbqdWrd4Wpre192rfd>MrhBCkric=1rk8<Jrlb;ermUl"rn[S3roa:GrpB^Srpp-_!VQ-b
q>U6iqu6Qnro=%=s8N#srVl]nqYp<ip&=R^nG_hSl2KlFi;VO2g&BJ"ci2,e_>_.I\,NQ0W;`OjRf8NM
NW+V1J,XfoF8g+WC]7lD@K'U4=T2>";Z9Ml:&[fb8H)-Y7ef@>6G>^95_21O5_21]5jq&76iKRS8,c'Y
9E%Zb;#XAl<rQ5#?N+C4AH$BDDuOhWHiAQpK`6u1PQ%$MUAh+jY5Yp0]`,bHbPoiee,J&"h>Z@3kPjcG
mJcVSo)SFap%A=[rqcWkrr)iqj8\0>rr2oqrql]krqQKcrq$-YrpB^LroO.;rnRM+rmLekrlY5Vrk8<?
riZ7!rh9=Zrf[8?re19#rd4Wbrbh^Nrac":ra,S+r`/qqr_WSgr_*5]r^ZrWpd=L:^-I67JO"cOJO#8]
mm?e:r^QlWr^d#]r_<Agr_i_rr`K/+raGe:rbMLOrc8!brdb!$rf-o@rgEbZrhoaurjVm>rk\TVrm(Mk
rn7;+ro!e;rosFLrp]pY!;-Bcp&=acq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.Xm/H8Kk5O<<h#?"+
dJhGjb5T6V]`,A=Y5Y?uT`1>XP5^I?KDpB"HN%saDZ4DMAH$!9?2dt*<W5kp:]=&e9E%K]7fGjO6gm@U
5_21O5_21O5`\2!6MNqI7K,gV8H)9]:&[rf;>sSp=T2V*@K'g:CAr,MErLCaIf>!!NW,+?R/WcXVuEju
[f3r=_>_UVc2Q,ig&Bh,i;Vm<kl0rJnG`"ZoE"UVrqQKgrql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pR
rosFDro!e2rn7:urltGark\THrjMg/rhoagrg<\Jrf-o0rdXonrc8!UrbDFCra>_2r`K/"r_`Yjr_3;a
r^ZrWr^HTLmm=`RJO"cOJO"cOO$N/#pd>$Lr^QlWr_*5br_NMjr`/r"ra#M3rac"Crbh^Urd+Qmre(30
rf[8Jrh07griZ7/rk/6HrlP/armC_urnRM2roO.Crp9XRrpp-^!VH$`q#:*gqu6Qnro=%=s8N#srVl]n
qYp9ho`"F\nG_eRl2KfDi;VO2g&BCuc2Pia_#CtF[f3H/VuE@gR/W9JNW+S0J,XcnErKtUCAqcC@/aI2
=T2>";>sAj9`@Z`8,c!W7JK7=6G>^95_21O5_21]5jq&76iKOR7fGpW9)_N`:]=5j<W6,"?2e:3AH$?C
DZ4\UHN&BmKDpl0P5^jJT`1kgY5Ym/]`,_Gao9QadJhhuh#?72jo4KCm/HMRo)SC`o^r.XrqZQjrr)iq
j8\0>rr2oqrql]krqQKbrpp'Xrp9XKroO.;rnRM+rmC_irlP/Trk&0<riZ6urh07Xrf[8?re(3"rd+Qa
rbh^Mrac"9ra#M*r`/qpr_NMer_!/[r^QlUpd=L:^-I67JO"cOJO#8]mm?e:r^HfUr^Zr[r_3;er_`Yp
r`K/*raGe:rbDFMrc8!ardOj!rf-o?rg<\XrhoaurjMg=rkSNTrltGirn7;+ro!e;roj@Jrp]pY!;$<a
o`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.Xm/H8Kjo43;h#?"+dJhGjb5T3U]Df8<Y5Y?uT`1>X
P5^I?KDpB"HN%saDZ4DMAH$!9?2dt*<W5kp:]=&e9)_B\7fGjO6gm@U5_21O5_21O5`\2!6MNqI7K,gV
8H)6\9`@ie;>sSp=T2V*@K'g:CAr,MErLCaIf>!!NW,+?R/WcXVuEju[f3r=_#DLUc2Q,ig&Be+i;Vj;
kl0rJnG`"ZoE"UVrqQKgrql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pRrosFEro!e2rn7:urm(Mcrk\TH
rjMg/rhoagrg<\Jrf-o0rdXonrc8!UrbDFCra>_2r`K/"r_`Yjr_3;ar^d#Xr^HTLmm=`RJO"cOJO"cO
O$N/#pd>$Lr^ZrYr_*5br_NMjr`/r"ra#M3rac"Crbh^Urd+Qmre(30rf[8Jrh07griZ7/rk/6HrlY5b
rmC_urn[S3roX4Drp9XRrpp-^!VH$`q#:*gqu6Qnro=%=s8N#srVl]nqYp9hp&=R^nG_hSl2KfDi;VO2
g&BG!cMkuc_>_.I\,NQ0W;`LiRJrBKNW+V1J,XfoErKtUC]7lD@K'U4=T2>";Z9Ml:&[fb8H)-Y7ef@>
6G>^95_21O5_21]5jq&76iKRS8,c'Y9E%Zb;#XAl<rQ5#?N+C4AH$BDDuOeVHiAQpK`6u1PQ%!LU&Lth
Y5Yp0]`,bHb5T]cdf.r!h#?72jo4NDmJcVSo)SFap%A=ZrqZQjrr)iqj8\0>rr2oqrql]krqQKcrq$-Y
rpB^LroX4<rnRM+rmLekrlY5Wrk8<?ric="rh9=Zrfd>Are19#rd4Wbrbh^Nrac":ra,S+r`/qqr_WSg
r_*5]r^ZrWpd=L:^-I67JO"cOJO#8]mm?e:r^QlWr^d#]r_<Agr_i_rr`K/+raGe:rbMLOrc8!brdb!$
rf6uArgEbZri#h"rjVm?rkeZWrm(Mkrn7;,ro!e<rosFLrp]pY!;-Bcp&=acq>U9jrVlfVs5X.Yrr2lq
qu6Hkq>U'doD\7YmJcALkPjE=h#?"+e,I\mbPoBX^&GM?YPtL"UAgV\Pl?^BK`6K#HiA*cDuOPOAH$$:
?N+(+<W5nq;#X2g9E%K]8,c!Q6gm@U5_21O5_21O5`\2!6MNqI7fGpW8H)9]:&[ug;Z9_r=T2Y+@K'g:
C]88OF8gOcJGt6$NrG7ARf9&\WW'+#\,O)?_Z%aXci2Dmg&Bh,i;Vp=lMg2MnG`"Zo`=aYrqZQirql]n
rr1sXj8],Xrr)iorqcWirq69^rp]pTrp'LGro*k5rn@A#rm1SerkeZJrj_s3ri5smrgNhNrf@&4rdk&r
rcJ-YrbVRFraPk5r`T5%r_remr_EGdr^m)[r^QlTqa9^:r^"IfJO"cOJO"cOPsG=7lpC\=qaCEQr^ZrZ
r_3;cr_WSmr`9#$ra,S4ral(Frc%jYrd=]qre:?4rfmDNrhKIlrilC3rkABKrlb;ermUl#rn[S4roa:G
rpKdTrpp-_!VQ-bq>U9jr;QZoro=%=s8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6gA]S#d/M8g_Z%:K
])Jr5WrAdmS,S]PO8aq6Jc:)sFT-7YD#S&G@fB^5>5hV&<;o_n:B!rd8cD9[7fGgQ6gR/46-VZG5_21O
5_21i5l3k36N0@L7/f[T8,c*Z9`@fd;#XGn=8lD&?N+F5B)ZWGE;jtYIK"itL]3A6Q2[9PU].:mYl;65
^Ac"Kbl5rfe,J)#hYuO6kl0lHmf)_ToDnRcp@eL]rql]mrr)iqj8\0>rr2oqrquclrqZQerq$-YrpKdO
roj@@rndY/rmUknrlkAZrkJHDrilC%rhTO`rg*PEreUQ+rdOihrc.pSrau.>ra5Y/r`B)!r_WShr_3;_
r^d#Xr^?WNj$N`2bs6hFJO"cOJO#elr^#R2r^6QNr^QlWr^m)_r_EGhr`/r"r`fA/raYq>rb_XSrcS3h
rdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm1SmrnIG0ro3q@rp'LNrp]pZ!;6HepAXmequ6NmrVlfVs5<qV
rr2ipqu6HkpAX^`nc&"Vli-,Iir7j7h#>k'dJhDi`W!^Q]`,28XT#*rSc4uTOoC4:KDp?!G5cO]DZ4;J
AH#s8>lIk)<W5kp:]=&e8cD9[7fGgK6g6r:6-VZG5_21O5_21l5lO(36Mj.I7/f[T8,c*Z9`@fd;>sSp
=T2S)?iFR7BDufJErL7]If>!!M>iY:Qi<QTVZ*[rZ2VE8_#D=Pc2Q,iec+A'hu;X7kl0oIn,DkVoDnRc
p@eL^rql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rmq(srm(M_rk\THrj)O*rhoaerg<\I
reg].rdXokrcA'Wrb2:Ara>_1r`T5$r_i_kr_3;`r^d#Xr^?EHksGA8bs6hFJO"cOJO#elr^#[5qa:6K
r^QlXr_!/`r_NMkr`9##r`oG1ral(BrbqdWrce?kre19.rfR2Hrgs+eriQ1*rk/6Hrl4r_rmLesrnRM1
ro3q@rp0RPrpg![!;6HepAXpfqu6Njro=%:s8N#sr;QTmqYp6gp&=O]n,DYPl2K`Bi;VR3f)F+sci1r`
_>_.IZi7-,VuE@gRJrBKMuJG0JGsinFT-4XC&VZB@/aF1=oMJ$;Z9Jk:&[ca8H)-Y7K,^M6g6r:6-VZG
5_21O5_21l5lO(36Mj.L7/fXS8,c*Z9)_Qa;#XAl<rQ5#>lJ.1Ac?ECDuOkXH2`?nLAm,1P5^mKT`1kg
Xo>[+^&GnJ`r=<`e,Iqth>Z@3j8S<Bm/HJQo)A:^pAt$_rqcWkrquZmj8\';rr2oqrquclrqHEcrq$-Y
rpB^MroO.=rndY+rmUkmrlG)VrkJH?rilC$rh07[rg!JBreLK(rd+Qerc.pQrau.=ra,S.r`K.tr_WSh
r_*5_r^d#Xr^HfSqa9:.r^#+#JO"cOJO"cOVa15Ih*V*.r^?`Sr^QlXr^m)^r_EGhr_i_tr`];-raPk>
rbMLQrcS3drdk'(rf-oBrgNhZri,n#rjDa?rl"fWrm1Smrn%/+ro*k<rp'LLrp]pYrq-9c!Vc?fqYpBk
rVQTSs5<qVrr2lqr;QQlp\smco`"@ZmJcDMjo49=hYu1,eGdenao96X^](_AYl:^&U&LS]QMupDM#N#*
HiA3fEW0eRB`;N@?iF:/=T27u;>s>i9`@Z`8H)*X7K,^P6f:<16.S;P5_21O5_21u5lO(*6N0@O7/fXS
7fGsX9)_N`:B")h;uTnu>Q/"/A,^-?D#SGRG5cjfK)UT*NrG@DSGo5]X8]C'\,O/A`;[mXci2Gnf`'b,
iVqs<lMg2MnG`(Zo`4^ep\4[`rql]nqu5XUi;`fUrr)iorqcWgrq??`rp]pSrp0RFro="8rn@A%rm:Ye
rl+lOrj_s5riQ0orgj%TrfI,:re(2trce?^rb_XJraYq8r`oG)r`&kpr_NMfr_!/]r^QlUr^?NKj$N`2
ej+dOJO"cOJO$+ur^#R2pd>$Kr^HfUr^m)^r_<Afr_i_pr`K/(ra>_8rb2:Jrc8!^rd=]tre^W9rg3VT
rhBCorj)O5rkJHNrlY5ermh#%rnm_7roO.FrpKdTrq-3_!;?Ngp\t$gqu6Qkro=%7s8Murr;QTmq#:!d
p&=L\n,D\QkPjQAhu;C0f)F+sbl5Z^_>_%F[/R9.V#I"cRJr<IMuJJ1J,X`mFT-4XCAqiE@/aI2>5hP$
;uTSl:&[ca8cD6Z7fGjO6fUN46.S;P5_21O5_21u5lO(06MNqI7K,dU8,c*Z9E%Zb:]=8k<W62$>lJ.1
B)ZTFDuOkXHN&EnLAm,1OT([ITDkYcYPtp.])KPF`r=3]df.ktg]$+0j8S6@m/HGPnc&4\pAjshq"Xjc
rqucoh>c=2rr)iorql]irqHEcrpg!Vrp9XJroO.<rnRM*rmUkkrl>#Trk/6=ric<urh07[rfR2>reUQ(
rd4Wfrc%jQrb2:>ra,S.r`9"tr_`Yir_3;`r^d#Yr^QlTqa9C1qa&n#JO"cOJO"cOW^-PLi'RE1qaCEQ
r^ZrYr_!/_r_EGir`&ktr`fA.raGe>rbMLPrc\9frdb!(rf-o>rgWn[rhf[urjDa<rkeZUrltGkrn%/)
ro*k<roj@JrpKdUrq??c!;HTiq#:0ir;QZNs5!_SrVl`oqu6Ejq#:!dnc&"VmJc>Kjo46<h>Z(+e,IYl
ao96X^&GJ>Yl:U#U]-kaPQ$XBMZ/2+IK"KjE;j\QC&VT@?iF=0=8l5!;>sAj9`@]a8H)-Y7fGgK6fUMd
5_21O5_21O5cR*-6Mj.I7/f[T8,c'Y9E%Zb:]=5j<;otu>lJ+0@fC*@D>nMRGlE*iJc:Q+NrG7AT)PJ`
W;a%#\,O)?`;[mXcMl;lf`'_+iVqs<kl0uKn,DkVpAXddq#U<erql]mrr([Qh>dBNrquclrqQKerq$-Z
rpKdMroa:@rndY.rmh"prlb;\rkJHCrj2U)rhTOcrg*PGrf-o1rdXoorc8!UrbMLDraGe4r`K/#r_rem
r_EGdr^m)[r^QlUr^?EHj$N`2h`u`XJO"cOJO$G)r^#R2ogA^Hr^HfUr^ZrZr_3;cr_WSmr`9##ra,S4
rac"DrbqdVrd4Wpre191rf[8Hrh'1dri?%)rji$Crl4r\rm:Yprn7;-ro="?rosFMrp]pYrqHEf!;Z`m
qYU3irS@M0s8N#srVl`oqYp9hp\sganc%tUlMfuGj8Rs8gA]_'d/M8ga8WmR])K)9XT#*rT`1>XPQ$XB
L&QZ&IK"<eE;j_RAc?0<?iF4-=8l1u;#X5h9`@Z`8GbmU7K,^M6fUN16/k.\5_21O5_22,5lO(-6MNqI
7/fXP7fGsX9)_N`:B")h<;oqt=oMe-@fBs<D>nMRF8gUeJc:B&O8b@BR/WcXVZ*[r[/RZ9_#DCRbl5ug
fDaP(hu;[8kPjcGmf)bUo`"Uaq#L6lqYL3hrr)iqh>c=2rr2oqrquclrqQKerq-3\rpTjQroj@Cro!e2
rn7:urltGark\THrjMg0ri#gjrgNhOrf@&7re(3"rcS3\rbqdKrac"9r`oG)r`/qpr_NMfr_!/\r^ZrW
r^HfSpd<k(i]r&[JO"cOJO$P,h*Um(r^?`Sr^QlWr^m)]r_<Afr_`Ypr`K/)ra>_9rb)4Krc8!\rdXp"
reUQ7rfmDNrhBCkric=0rk/6HrlP/armC_urn[S3roO.Crp9XQrpp'\rqHEf!;Z`mqYpElrVlfPs5!_S
rqlZnqYp<iq#9pbo)A+WmJcALkPjE=h>Z1.e,I_nbl5NZ^](eCYl:^&VZ*1dR/W9JMuJG0J,X`mFT-4X
C]7rF@fB^5>Q.b(;uTYn:]=&e9)_E]7f,XR7.iq!6N0:@5_21O5_21O5f,ec6.A6u6i0:N7JfRR8cDB^
9`@ie;>sMn=T2M'?N+F5BDu]GDuOkXH2`<mL&R#0P5^jJT)PVdX8]@&\c0>B_u@mZci2Dmg]$(/i;Vp=
lMg2Mn,DnWo`"Xbq#L6lqYL3iqu5FOh>dKRqu-NjrqZQgrq69_rpg!Urp0RIro3q7rnRM'rmC_irl+lP
rk&08riQ0urh07ZrfmD@reLK)rd4Wfrc8!Srb2:Ara>_1r`T5"r_i_kr_<Abr_!&Xr^QlTog@=tr^$'>
JO"cOJO"cO_Ee)de3a%"qaC<Nr^Zr[r_*5br_NMkr`&l"r`oG1rac"ArbVRSrce?grdt-)rf$i@rgNhZ
ri#h!rj)O8rkSNPrltGirmh#'rnm_7roj@HrpKdUrq$-^rqQKg!;Z`mqYpHjrn[V1s8N#prVl]nqYp<i
pAX^`nc&"Vli-,Ij8S!9h>Z")df.Sla8X!U^AbM=YPtR$U&LS]QMusEM>i2-If=WlF8g+WCAqiE@/aI2
>5hP$;uTVm:B!rd9)_B\8,c!W7K,^J6eXm+61I3k5_21O5_22;5lO('6M3_F7/fXS7fGpW8H)6\9E%]c
;#XDm<W62$?2e72B)ZQEDuOhWGlE0kK`6l.O8bIESGo5]WrB4$[/Rf=_Z%UTci2Dmf)FM)i;Vd9kl0oI
n,DkVo`"R`q>U3jqZ6Tkrr)`nh>c4/rr2oqrqucmrqcWgrq69]rp]pSrp0RFro3q7rn7;$rm1Serl+lO
rji$7riZ6rrh'1ZrfR2>reUQ(rd=]hrc%jRrbDFBra>_2r`K/"r_i_lr_EGdr^m)[r^ZrWr^HfSnjCek
rBPp!JO"cOJO%LGc9h1kr^?`Sr^QlWr^d#[r_3;cr_WSlr`9##ra#M2raYqBrbVRQrce?grdb!(rf-o>
rgWn[rhTOrrj2U7rkJHOrlb;erm^r#rnm_7roO.FrpB^Srpp']rqHEgrqc]n!W;lprVlfMs4[MPrr2lq
r;QTmqYp6gpAX^`nG_kTm/H/Hj8S!9g]#e'df.Jia8WsT]Df5;YPtI!U&LV^Pl?aCMuJ>-If=ZmErKtU
C]7oE@fBa6=oMM%<W5kp:]=)f9)_E]8H)*U7K,^J6d\7!62X$"5__OT5_22P5kmXj6Mj.I7/fXP7fGsX
8cD?]:&[rf;>sSp=8lA%?iFO6Ac?KEDuOeVHN&BmK)U]-OT(LDSc5A_VuEn![Jmf;_Z%UTbl6&ifDaP(
i;Vg:k5O`Hmf)_To`"O_p\t$gqZ-Npr;?Qmrr1XOgAh0Orr)iorql]krqHEcrq-3[rpTjQroa:Bro*k3
rn.5!rm1Scrl"fLrjVm4ri5sorh'1Vrf[8@re19$rdFcfrc.pTrb)4@ra5Y0r`T5$r_i_lr_NMdr_!/]
qa^WTr^?<EcpIXsJO"rTJO"cOf0IMGogAUEqaUQTr^m)]r_*5dr_`Ymr`9##r`oG0raYq?rbh^TrcJ-f
rdk'%rf6u@rg3VVrhTOnrj)O5rk8<LrlY5drmUkurnRM3roF(Arp9XPrpg![rq69brqcWk!;llqr;QZo
rn@D(s8N#srVl`oqu6Bip\smco)A.Xmf)JMkPjN@hu;@/f)F%qbl5Z^_#CtF[Jm?.W;`OjSGniROT(.:
L&QT$H2_pbDuOPOBDuE??iF:/=oMG#;Z9Jk:&[ic9)_E]8GbmU7K,^G6e4Tn6N09%5a=Tc5_22_5lO'd
6M3_F7/fXP7fGpW8cD?]9E%Zb:]=8k<W6/#>lJ+0A,^-?C]88OFT-RbJ,Y-#MZ/_:QN!ERUAh+jY5Yj.
])KMEa8X9]d/MVqg]$+0j8S3?l2L,MnG`"XpAXgcq#:0iquHZrrVcWmgAfe)rr2fnrquckrqQKdrq$-Z
rpTjOroa:Aro!e2rn7:urm(McrkeZJrj_s3ri?$prgs+Wrfd>?reLK)rd4Wfrc8!Trb;@Dra>_2r`fA'
r`&knr_NMer_*5_r^d#Yr^QcRr^?EHejAjmr]u*#PsBmcJO&?_r^"Cfqa:6Kr^H]Rr^ZrZr_!/_r_<Af
r_WSnr`B)'ra,S3rau.Drb_XTrce?grdt-)rf$i?rg<\Vrh]UprilC3rk8<JrlY5brmC_urnRM2roF(B
rp'LOrpg!Zrq??crqZHh!;ursrVQTJs4@;MrqlZnr;QQlq#:$eo`"F\n,D\Ql2KiEi;VR3gA]S#d/M;h
`;[ON]Df,8Xo>=!T`1G[Q2ZjDM>i2-J,X`mFoH@ZD#S,I@fBa6?2dt*<W5qr;#X5h9`@Z`8cD9U7fGgB
6f16"6N09%5a=Tc5_22_5lO'm6LmM@7/07N8H)3[9)_N`:B")h;uThs=T2V*@/aX7B`;iIE;k"ZHN&En
K`6l.O8bFDS,T)[WW'("ZMqK8_#D:Oc2Q)he,J)#h>Z@3k5OTDm/HJQo)A:\p\t!fqYU0jr;llqqu5=L
eGoFErquclrqZQgrq69^rp]pTrp0RIro="9rn[S)rmLelrlG)VrkJH@riuI)rhKIcrg`tNrf6u8rdk&t
rd4WbrbqdQrau.>ra5Y0r`T5%r_i_lr_NMer_*5_r^m)[r^ZrWqaLKPlpKu'eO'7$JO$G)JO"cOr^"(]
njE:Br^H]Rr^ZrYr^m)]r_*5ar_NMjr_i_sr`T5*ra5Y7rau.Hrc%jWrd4Wnrdk'+rf6u@rg`t[rhKIp
rj)O3rkJHNrlG)brmUktrn[S3ro="Arp'LNrp]pYrq69crqZQiqtpHm!WDuHs4%)Jrr2lqr;QQlq>U0g
pAX^`nc&"Vli-/JjSn-;hu;:-eGdhobPoN\_>_%F[JmB/W;`RkT)P&TOoC@>K`6Q%If=NiF8g+WC&V]C
@fBa6>Q.e)<W5qr;#X5h9`@]a9)_E]8GbpV7f,XO7.iq26IeDR6*3G(6%M>16Mj.C7/fXP7fGpW8H)3[
9)_K_9`@fd;#XDm<W6/#>lJ+0@fC!=C&W&MF8g@^If=otK`6u1P5^dHT)PJ`W;a""[/RZ9_>_IRbPolf
ec+5#hu;X7jSnECm/HJQnc&1[pAXjdq>U6ir;QWprW3#teGn%urr2fnrql]krqZQerq-3]rp]pSrp0RF
ro="8rnIG'rmLekrlP/WrkABArj)O)rhf[frgNhOrf@&7re19#rd"Kcrc.pSrb2:Bra>_2r`fA&r`&kq
r_WSir_EGcr_!/]r^d#YqaUHOr^>O/r'Q$%L-gGXJO7sTg-ba*r^HTOr^ZrYr^m)]r_*5cr_NMir_rer
r`9#&ra,S3ral(Crb_XSrcS3crdXp"reUQ7rfmDNrh07friH+)rj_sArkn`Vrm(Mkrn%/(rnm_7roO.F
rpKdTrq$-^rq??erqcWkrr)fp!WN)Js4%)JrqlZnr;QTmqYp6gpAX^`nG_kTmJc>Kjo49=hYu7.ec*qp
bl5Z^_#D"G\,NW2X8]!qTDk;YQ2ZgCM>i2-J,XcnG5cI[D>n;LAH$$:?iF:/=oMM%;Z9Ml:]=,g:&[ic
9)D3Z8GbpP7efF@7/]K(6\.UU6\.VM6gmG<7JK@O8,GjV8c)-Z9`@cc:B"&g;>sJm=8lA%>Q/"/@fBp;
CAr&KE;k%[HiANoK`6i-NrG=CRf8rYVZ*XqYl;-2]DfVFa8X9]d/MSpg&Bk-ir8*>kl0uKn,DhUo`"O_
p\t$gqu6NmrVc]rrr1FIeGoOIqu-Nlrql]krqQKdrq69]rp]pTrosFFroF(:rnRM*rmLekrlY5WrkABC
rj)O+ri5skrgj%VrfI,<re^W*rdOimrcA'Xrb_XIral(;ra5Y/r`T5$r`&kpr_WShr_<Acqb-fXr^cfS
pdXR<JOP,YJOP,Y]LDTbpdb3Pr^m)^qb6u`r_NMir_i_pr`9#$r`oG0raGe:rb)4Irc%jXrd+Qlrdk'*
rf-o=rgEbVrh9=kriZ7+rjr*CrkeZWrm(Mkrn.5)ro!e:roa:FrpKdTrpp']rqHEerqcWkrqucorVcis
rm^tqs8N#prVl`oqYp<iq#:!doD\=[n,D\Ql2KiEi;VR3gA]V$dJhGj`W!aR^AbP>ZMq$+V#I%dSc4iP
OT(7=K`6Q%If=NiF8g+WD#S,IAH$!9?N+4/=T2A#<W5nq;>sAj;#X5h9`@]a9))!W8GG^@7Y+$[7Y+$[
7_D4c8,GjS8cD?]9E%Wa:&[ug:]=5j;Z9\q=8l>$>lJ(/@/a^9BDu`HDuOhWG5csiJc:?%NW,%=PQ%-P
U&LkeY5Y^*[Jmo>_>_FQcMl5jeGe2$h>Z@3k5OTDm/HJQnc&.ZpAXgcq>U6iqtp?krW)uHs3CZDrqlZn
r;QQlq#:$eo`"F\n,DbSli-,IjSn-;hYu1,eGdenbPoK[_#CtF[f3Q2X8\spT`1G[Q2ZmEMuJJ1Jc:)s
GlDgaE;j_RCAqfDA,]j7?N+1.=oMJ$<;ohq;>sDh:]=,g:&[i`9DD-F8bP`,8;p)j8:a=c8E3;:9)_K\
9`@cc:A[id;#X>k;uTer<rQ8$>Q.t.?iFO6Ac?HDD#SDQFT-RbIK"fsLAm,1OT(RFS,T)[VZ*XqZ2V32
]DfVF`r=0\ci2Gnf`'b,iVqp;kl0lHmf)\So)A:\p\t!fqYU3irVQQos3gqms8N#prVl`oqYp<iq#9sc
o`"C[n,DYPl2KfDj8Rs8g]#h(e,IVkaSs-W^Ab_C[Jm?.WW&^mT)P/WPl?^BMZ/A0JGsrqH2_j`DuOVQ
B`;WCAH$!9?N+4/=T2D$<rQ(t;uT\o;>sDk:]=,d:&%EJ9D2#08rQAn8qBUg9&iS>9`@c`:B"&g;#X>k
;Z9Vo<;oqt=8l>$>lJ(/@/a^9B)ZKCD>nMRErL@`I/\ZqLAm)0NrG:BRJrfWV#I@mY5Yj.\c0>B`;[mX
c2Q2kfDaP(hu;X7jo4NDm/HJQnc&.Zp&=acq>U6fr;QZlrW)uHs3CZDrqQHkqYU*fpAX^`oD\7YmJcGN
kPjTBiVq[4g&BS%d/M8gaSs!S]`,G?Yl:a'W;`IhSGnrUOoCC?MuJA.JGsurFoHI]DuOVQC&VcE@fBd7
?iF=0>5hY'<rQ+u<;oem;>X2h:]=2f:]=,W:&I_:9SQ5l9S#mh9^GLN:A[id;#X8f;#X>h;Z9Yp<W6%u
=T2M'>lJ+0@K'a8BDuZFD>nJQErL4\IK"crKDpf.NrG1?RJrcVT`1nhXT#I'\Gj/?_#DFSbl5ugf)FA%
h>ZC4jSn?Ali->OnG`%Yp&=[aq>:$`rVQQos3gqjs8N#prVl`oqu6Hkp\smco`"@Zn,DbSlMfuGjSn*:
h#?"+df.Slc2P]]_Z%:K[f3T3YPtI!U]-nbR/W<KO8b%9LAlc'If=ZmGQ)U]DuOVQB`;TBA,]m8?iFC2
>Q.h*=oMP&=8l8"<W5ts;Y!]a:]=2b:Ou;m:Ou;m:WQ?2;#X8i;"[]b;Z9Vo<W6%u=8l>$=oMV(>Q.t.
?iFI4A,^*>B`;lJDuObUGQ)pfIf=otLAm)0O8bCCR/W`WU].1jYPtm-[f4#?_>_FQc2Q)hdf.r!h#?72
jSnBBlMg5Nn,DhUo`"O_p\t$gqu6NmrVQTjs3gqjs8N#prVl`oqu6Hkq#:!dp&=R^nc&"Vli-/JkPjH>
hu;F1f)F.tci2&c`;[RO])K/;Z2Ug'VZ*=hSGnoTPQ$UAMZ/D1Jc:,tHiA0eF8g+WD#S/JBDuH@@fBd7
?iF@1>lIq+=o2>#=8l7t<Vobm;tNt=;Lq_s;Lq`b;Z9Vf<;ons<rQ1t=T2J&>5he+?2e41@/a[8AH$6@
C&VrJDuOeVFoHaeIf=otL]321NrG7AQi<NSUAh(iX8]C'[Jmc:_#D=Pao9Wce,Iqth#?10iVr$>l2L#J
n,DkVoD\F^p\sseqYpBkr;QZlrqcZCs3(HArqQHkr;QQlq>U0gp\sgao)A+WmJcDMkl0WAiVqa6f`'G#
dJhDiaSs*V^Ab\B[/R9.WrAmpT`1J\R/W6INrFt9K`6Q%J,X`mG5cR^E;jbSD#S)HB)Z?<@JaF2?2e+.
>Q.h'=Sl2!<piu]<In,.<.S#"<8(=9<Vohr=85ns=oMY)>lJ%+?iFI4@K'g:Ac??AD#S>OE;jqXG5cdd
J,Y'!K`6o/NrG1?R/WWTT`1hfWrB4$[/RW8^Ac%LaSsH`dJh\qf`'e-iVqm:kl0lHmJcSRo)A:\p\sse
q>U6iqtp?hrqcZCs2G$;rqlZnr;QQlq>U0gp&=U_nc&%WmJcGNkPjQAi;VR3g&BP$d/M;hb5T9W^](nF
[/R</Xo>0rUAgeaRJrKNOT(4<M#N&+JGsurHiA0eF8g.XDuOSPC]8#HB)Z??@fBg8?iFI4?i+1/?2e*t
>Q%as>(Kh;=b0_,=l<HO>45\p>lJ%(?N+@3?iFL5@fBp;B)ZKCC]82MDuO_TF8g=]HiAHmJGt3#L]383
OT(OERJriXUAh"gXo>U)[/R`;^])+Lb5TWad/MSpg&Bh,i;Vg:kPjfHmJcVSnc&.Zp&=acq>U6fr;QZl
rqHH@s2G$;rqlZnr;QQlq>U0gpAX^`oD\7Ymf)VQl2KiEir7j7g]#k)e,I_nc2P`^_Z%=L\c0#9Yl:[%
VZ*=hT)P/WPl?dDN;e\5KDpH$J,XcnGQ)aaEW0qVDuOPOCAqrHBDuNBAc?3=@f'U5@/++%?N"1'?%H7>
>_-.2>hWHU?1M>!?iFI1@K'a8A,^'=B)ZHBC&VlHC]88OE;jkVFoHXbHN&EnJc:<$M>iJ5OT(LDRJrfW
UAh%hWrB7%[Jm`9^]).M`r=6^d/MMnf`'Y)hu;X7k5OWEmJcSRnG`%Yp&=[aq#:*gqYU3irVQTgs3gqd
s8N#mrVl]nqYp<ip\smco`"C[nG_nUlMfuGjo46<hYu:/f)F.tci2)d`r<gR^Ab\BZi70-WrApqT`1M]
Rf8NMOoCC?M#N,-Jc:3!IK"QlFoHL^ErL%WDZ4MPC]8)JB`;W@Ac?6;A,]s.@JsSb@"D^:@"D_2@.dt*
@fBm7AH$0;B)ZKCC&VoID>nJQE;jnWF8g=]HN&<kJGt-!L&Qo-NrG.>PQ%$MSc5;]VuEarYPtm-\Gj5A
_>_FQb5T`de,Iqtg]$(/iVqs<kl0lHn,DhUnc&1[p&=^bq>U6iqtU-erqHH@s2+g8rqlZnr;QTmqYp<i
q#:$eo`"F\n,DbSli-/Jjo49=hu;@/fDa;!d/M8gaSs$T^](nF[/R?0Y5YC!V#I"cSc5#UPl?dDNW+h7
L&Q`%J,XipHN&*eFT-@\E;OSND>nAHCAV`EB_5s8BDuLoAVjuLAV"FKAc$*.BDZBAC%uH?D#S;NDu4MQ
F8g=]G5cgeI/AEmK)UK'MZ/S6OT(LDRJrcVTDkYcW;`t!Z2V-0]`,YE_>_OTbPolfeGe,"gA^"/ir8'=
l2L#Jmf)\So)A:\p\sseq>U6iqu6NmrVQTas3gqas7lTmr;QTjqYp<iq#9sco`"C[nG_hSli-)Hjo46<
h>Z.-f`'=ucMl#d`W!aR^](eC[f3Q2Xo>=!VZ*7fSc5)WPl?gENrFq8M#N/.K)U<"If=]nH2`$eFoHL^
F8g1YE;jeTDY7lGD"MN@COp2SBn9uLC"I(fC\qrFD>S5MDuO_TEW1%YFT-F^GQ)meHiAKnJGt0"LAm#.
MZ/Y8OoCUERf8lWT`1hfWW'%!Z2V01\c0AC_Z%ORbPoiedf.nugA]q-iVqp;kPjfHmJcVSnc&.Zp&=ac
q>:$fqu6Ngrpg$:s1JC2rr2lqr;QTmqYp<iq#:!do`"I]nG_kTm/H5Jk5OH@i;VR3gA]V$df.Slb5TE[
_>_1J])K/;Yl:d(X8\poU&L\`Rf8WPP5^RBNW+k8LAll*K)U<"If=`oHN&3hGlDjbFT-@\Er0kLE;+;K
Dh2e\DLl\VDV&e!Dt7lHEVjeUF8g:\FoHXbH2`-hI/\ToJGt0"K`6`*MuJ_8OT(FBQi<HQTDkSaV#IFo
Y5Y[)[f3i:^AbtJ`W"$Zci2AleGe2$h>Z@3jSn<@kl0rJmf)_ToD\F^pAXjdq>U6iqu6NmrVQT^s3gq[
s8N#mrVQKkqYp6gpAXaao)A.Xn,D\QlMg#Hj8S$:hu;@/f)F+sd/M8gao93W_>_1J\Gil7Yl:d(WW&do
T`1P^SGniRPl?gEOT(7=MuJJ1K`6W'Jc:3!J,XorIK"WnHiA?jH2)X`G5$+[F`i7WK62ZdJTT:]qfVdZ
piud`rd+Qjrd=]nrdOirrdb!!re(3(reCE1rf-o=rfR2Erg*PRrgs+^rhf[oriQ1(rjDa8rkABIrkn`W
rlkAgrmLetrn@A/ro*k:roj@Hrp9XQrpg!Yrq69arqH<drqlKhqu6$`df6u[qu6KkrqucmrqcWhrqHEc
rq$-[rp]pTrp0RJroX4@ro*k4rn7;&rmLelrltG_rl"fOrk/6@rjMg1riQ1#rhf[irh'1\rgNhRrfmDF
rf@&<reg]2reCE+re19&rdjrsrdXorpjDscqKd^=JU2lnJU5C`rd4EfrdOirqgeZsrdt-&re:?+reUQ2
rf-o<rf[8Frg<\Rrgj%\rhKIiri?%$rilC1rj_s?rkSNOrl>#_rm:Ymrn%/'rn[S4roF(@rosFJrpKdT
rpp'[rq??crqQKhrql]mrr)Nhmf1`8\c;[.qu-Nlrql]krqZQgrqHEarq$-[rp]pSrp0RIroX4@ro!e3
rn@A%rmUkmrltG`rl+lPrk8<Crj;[1ric=&ri#gmrh9=`rgj%Vrg3VKrfR2Arf6u:repc5reUQ.re:?)
re(3%qgnNmrdXot!.TQLJU`6#JUc'srdautomm$mrdt-%re19)reLK/reg]5rf$i:rf@&@rfmDJrgEbV
rh'1`rh]UmriH+&rj)O1rk&0DrkSNPrlP/arm1Slrmh#%rn[S3roF(@roj@IrpKdTrpp'[rq-3arqQKg
rqcWkrqucoqu5gZdf6lXq#:0hrquclqt^6crq??`rpg!WrpTjPrp'LHro=":rnm_0rn7;%rm:YirlkA]
rkn`NrkABCrjVm4rilC)ri5sqrhTOdrh'1]rgWnTrg*PJrfd>DrfI,?rf6l8rf$W0reUH,rJ#lXJVJ`1
JVMI)reLB,pkns-rf-f8rfI,Arfd>Grg*PNrgWnYrh'1_rhTOkri5t#rilC-rjVm<rkABIrl"fUrlkAe
rm:Yqrn.5)rnm_6ro="ArosFJrpTjUrpg![rq69brqZHfqu$Hlq#9LWdf6lXq#:0hrquQfrqQKdrq69^
rpp'WrpKdOrosFEroF(;rnm_0rn7;#rmC_krlb;_rl4rRrkJHFrj_s8riuI+riH+!rhf[jrhBCbrgs+Z
rgNhSrg<\MrfmDGrf[8CqiLf<qi:E1!KE(iN.[(?N.Hr8N;JV-Nr+q8P5^[EPl?sIR/WNQRf8iVT)PD^
UAgtfVZ*UpXT#F&Z2V01\Gj/?^AbtJ`r='YbPoiedf.bqg&Be+hu;U6jSn<@l2L#Jmf)\Snc&.Zp&=^b
q"X^_r;QZirojC1s0Mb)rqQHhqu6Hkq"sgbo`"F\nc&%WmJcGNkl0`Djo43;hYu@1fDa>"df.Vmc2Poc
`W!dS^](tH]Df>>Zi790YPt['WrAsrV#I+fU&L_aT)P;XS,SlUR/<6LQ2[$@PQ$^FOn4]dOH5KSOF`MO
OS+b5P4b%<Pl?sIQi!0IRf8fUSc58\T`1YaU].(gW;`grXo>O'Z2V*/\Gj)=^AbnH_Z%ORbPoccd/MJm
ec+2"h>Z=2i;Vj;kPj]Eli->OnG_tWoD\C]p\Xa_qYpBerVQTUs3gqOs8N#mrVl`oqu6Hkq>U0gp\smc
o`"C[nG_nUm/H;Lkl0]Cj8S!9hYu:/g&BM#df.SlcMl#daSs-W_>_4K]`,MA\Gil7ZMUm*Y5YO%W;`^o
VYd.fUAghVTD4uUSFE&"S!'7lRt7'kS*?I<Sb8WPT_kJ_U]..iVuEXoXT#@!Yl;!.[/RT7])KAA^])+L
`;[jWb5T]cci2AleGe/#g]$(/i;Vd9jo4KClMg/Ln,DhUnc&1[p&=^bq#:*gqYpBkr;6Hirnmb(s02Ou
rqlZnr;QQiq>U0gpAXaaoD\=[nG_kTm/H;Lkl0`DjSn*:hYu=0g&BV&ec*tqci2/fao9?[`;[RO^](tH
])K5=\,Nc6ZMq*-YPYI$Wr&dpVuERdV>-hbU&^m<Tn/ngTn/oeU&1SZU\1J_VZ*LmWV`^pXo>L&YPtd*
Zi7?2\,Nr;])KGC^])%J`;[dUao9N`cMl5jec+2"g&Be+hYuI4jSn<@kl0lHli->OnG`"XoD\F^p\sse
q>:$cr;QZirnmb(s/Q+urqQHhqu6Hkq"sgbo`"I]o)A.Xn,DbSlMg#Hk5OB>iVqa6hYu:/f`'D"df.Sl
cMl&eb5TBZ`;[XQ_#D(I^&GVB\Gir6Zi790YktX'Y5YR&XSAjqWqWInWMtHIK;a@"JZ-tpql0ImpoFCq
riQ1&ric4'qm-4-rjMg9rjr*BrkJHJrkeZPrl+lZrlb;drm1Slrm^r"rn@A.rnm_6ro3q>roj@HrpKdS
rp]pXrq$-]rqH<bqtg<hq#1*hh#Gh&VuQbqq#13irql]krqZQgrqHEcrq69]rp]pUrpKdPrp0RIroX4@
ro!e5rndY.rn.5%rmLemrm1ShrlkAarl4rVrl"fPrkSNJqn<!Arji$<rjVm8qmHF1qm5t$!3u.#JZt3>
JZs^0i3;mZo!88$qm?@1qmQL5rj_s<qn2pArkJHJrk\TPrl+lVrlY5arm(MhrmC_nrn%/&rn@A.rnm_5
roF(@roj@IrpB^QrpTjVrpp']rq??crqQKgrqcWkrquZlqu51Hdf66Fq#:0hrquclqt^6drqHEcrq-3\
qsaUQrpB^Mroj@EroF(<rnm_3rnRM,rn%/"rmUkorm:Yirlb;`rlP/Zrl+lTrkeZNqnN$Ark/6Bqmu[8
osb"2mC.YTQ*u7PJ[XUIo!e2"rjhg8rk&0Brk8<FqnN-HrkeZQrl+lVrlP/^rlb;drm1SkrmUksrn%/'
rnIG/rnm_7roF(ArosFIrpB^QqsaUVrq-3`rqHEerqZHfqu$Hlq#8kEdf6$@rr2]kqtpBhrqZQgrqHEb
rq-3]rpg!WrpTjRrp0RJroX4@ro="9rnm_3rnIG*rn%/"rm^qqrm:Yjrm(MerlY5^rl4iSqnrEMot^I>
rkA-?mCe(`Q+V[\J\:$Ul+Qu.rkJ$>qni?Mrl+cSrlP/_rlkAerm1SjrmLeprmh#"rn7;*rndY3ro!e9
roO.ArosFJrpB^Rrp]pWrq$-]rq69brqQKgqtg<hq#1*he,RkrT)\fhq#13irql]kqt^-`rq??`rposU
rpTjSrp0RKroj@DroF(<ro!e5rndY0rn@A)rmh"trmUkorm:Yjrm(Dcqoeu]rlP/\prEBRqo/EMe\m$V
Xi#_-J]#RIrl+cSqoA]WrlP&[rlb;cqp,2erm:YlrmUkrrmh#$rnIG-rndY3ro!e8roF(@roj@Grp0IL
qsaUVrq-*]rqHEfqtg<hrquZlqu4k?df5p=q#:0hrquZjrqcWirqQKerq69_rq$-Zrp]pUrpB^Orp'LH
roa:CroF(<qr%J1rnRD(rn.+urm^qqrmCVirm1Shqp##^qoeWSq9%F5J]P(:J]ND`rlF$>l,s"Kp!!E[
qp,)cqpPAkrmgnurn7;+rn[J0ro="=roX4Croj@Hrp0RNrpTjUrpg!Zrq-3_rqHEerqZHfrqlTjrr)Wk
c2Z5lR/d0bq#13irqlThrqZQgrqHEcrq69^rpp'Yrp]pUrpKdOrp'LHroX4AroF(<ro*b3qq_8*rn7;'
rmptsqpYPmqpG2crm1SjpWrQZJ^05"J^/hlg<T05rm:Yjp!E]cqpPJmrmgnsrn.5'rn@A-rndP0ro*k9
roF(?roX4DrosFJrpKdSrp]pWrpp'[rq69arqHEerqZHfrql]mq#1*hb5]oiQ2gj_p&4mfqtpBhrqZQg
rqHEcrq69_rpp'YrpTjUrpKdQrp0RKrosFFroX4@ro3q9qr%A/qq_8,rn@%urn.5%rmpVi!S,`be:H)<
dt,u!e*kcGeFM/hf)F:uf_aA!gAB\)h>?+,i;;O5jSn9?kPj`FlMg,KmJcPQnG_nUnc&+Yo`"O_pAXgc
q#:*dqYpBhr;6Hirl"ibs-<WWrr2lnr;6BjqYU*fp\sm`p&=U_oD\:ZnG_nRmJcJOlMg&Ikl0`Ajnn*;
ir7m5htZ%,h"BG$g@X(Zfn%eIfR_\+f^.8Eg&'M#g\]e$h>Z=/i;;O5j8S0;k5OTDl2KuFm/HDOn,DhU
nc&.Zo_\=\pAXgcq>:$fqtU*grUp0.s3gq.s82fgrVl`iqYp9ep\smcp&=U_oD\=[nc&%Tn,D_Rm/H>J
l2KoGk549;j8S'8iV;@1hu;R2htZ(,h1=C5h1=C5h9OjOhYZ40i;VX,i;V^4ir8!;jnn3;kl0iGli-8M
mJcSOnG_tWo)A7[o`"O_pAXg`q"X^_r;6Hcrk\W_s+^RQrqQHkr;6BdqYp9ep\smcp&=U_o)%tVnGD\R
mecDKli-2Hl2KoDkPjW:jRqR0ir%eeiJ-<BiITt>iUZ"*j7;:.k5OQ@kl0iDlMg,KmJH>Nn,)VRnb_nV
o`"O_pAXg`q"X^bqtp<drVQT(s3gq%s7QBdr;6BjqY9mcp\sm`p&=U\oD\=[nc&%Tn,DbSmJH8LlhfuH
l14'8kOdp7k(2WKjalNEjk&V_k5OQ4kl0iDlMg,Hm/HDOmf)\PnG_tWo)&%Xo_\=\pAXg]q>:$fqtU*[
rj`!Vs+C@HrqQHkr;6BdqYp9bp\smcp&=U\oD\=Xnb_hTn,DhUn,DbPmIfi@lLa<Al03c_KBRmMJ`tMF
p$)8:o'HACqsOIQrpTaRrpfmVrq$$Zrq69aqtL!_q"k!equ$6fq#7T!df4muqZ$?iq#13iqtp0bqt^6d
q"Od]qt9s\rq$-[qsjINrpTjUo'c5=JaS*WJaS*W`U<<crp]pUp$htNrpp'[rq-3_qtBgZqtU0dq"k!e
qu$6fq#78mdf4muqZ$$`q#'parqc3]q"ORVq"4@Qp%&"Mo^IG$Jae6[JagYJrpfRMq"+:Qq"=FVp%eL]
q"sjan,B<ddf4munc/C`o)8Rcqtp'_qt^6dq"ORWqt9OPmdgJNo7?Ibnq$@_o$R%!oBc,Kp%\7Up\Xab
q==C]qtp<arV6Abs3gpus60LUrpp$_r;6BaqY9m]pu;&ApOW$sp4;pgp=f5op\=OYq==C]qtU*^rUTrS
s3gpus60LFrq63Uqu6HFq=aW8pl,!!pjr4opsJp7qXXOSr9"!Fs3gpus4RGFrosCYr:9aEqLSKoqLSKo
qQp%kqt9mRrUTrGs3gpus2=s+rm:TErV_<FKD^;uJc*pndJ`P5JcG?Adf4mu`;dUO!<%KIJc1/uJc4*s
]`*K^oDd8=JcD2=kl-/4Jc:6"Jc<+WJcEsodf4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$
df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$
JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0u
JcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$
JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcD2=kl-/4Jc:6"Jc<+WJcEso
df4muZN':jjo'c/Jc1/uJc3.Xl2H86iW%@+JcE[gn,C]4!WDtJr.Four.4dnr6bK3rdk+@s3gpus4RGF
rosCYr:9aEqLSKoqLSKoqQp%kqt9mRrUTrGs3gpus4mYRrp9UVr;6B[qVq:$pjr3kpjr4Hq!\(Yqss[O
rVleSs3gpus60LUrpp$_r;6BaqY9m]pu;&ApOW$sp4;pgp=f5op\=OYq==C]qtU*^rUTrSs3gpus7--a
rpp$er;6BaqYU*fq"XUYpA=ORo^;;OoCIP(KCXTaJb%4Zo(25?rq6'[q"O[\rqZ-]rqlTjp&4[bT`<I?
JcG9?o)8I`qtpBhqt]p[rqH<`qt9s\p%.kIlgY#GnU^1^n:C([nBpalnac8JoDA1Zp%\7[p\"=\q>:$f
qt9m[rLj2=s+14Hs7lTgrVl`lqtU$bq>U0ap\sm`p&=U_oD\=XnbDVQn,DhIn+?%!mXaeWmXafFmdfiG
nG_nLnG_tWo)A7[o`"O\pA"CZq#:*aqYpBhr:p6cri,qGs+C@HrqQHkr;6BdqYp9bp\smcp&=U\oD\=X
nb_hTn,DhUn,DbPmIfi@lLa<Al03c_KBRmMJ`tMFp$)8:o'HACqsOIQrpTaRrpfmVrq$$Zrq69aqtL!_
q"k!equ$6fq#7T!df4t"o)8Rcq"ssarqQBbrq?6^rq-3\qsj[TqsX=Iq!7_>puq;3qrRn?J`VIEJ`VIE
eE-Acp#l,6q!%S>q!J(LqsaUTqssXVrq60^rqH<brqZ?dqu$-cZN&AQLB%8Pq#13iqtp0brqQBbrq??a
rq-3\qsj[TqsXOPqsF:Hrp'CFroj7BroWn7p#Go.r8N:dL>d^BJ`55>o&BQ,o&T]1roa1Bros=Frp0RN
qsOIPqsaUTqssaYrq69arqH<bq"k!equ$6fqu4,*df5C.qu69erquQfrqQBbrq??arq-3]rpp'Yrp]gR
rpB^Orp0IGroj@DqrR_8ro3h6pu)//ro!\2ptku*J_bn5J_bn5cJA9PqqqD2rnmD,ro*b6ro=">qr[e>
rosFJrp9XOrpTaRrpg!Yrq$-]rq69arqH<bq"jmcqu-3e_>hs`P5kO\p&4mfqtp9drqQBbrq??`rq$-[
rpg!WrpTjRrp9XMqs"+DroX+>qr@\8ro!\2rndY1p"]#irRh5)fn%e.fR_\+f[8@Ng$dYfh#?./hYuF0
i;;O5j8S0;k54BAl2L#Jm/HDOn,DhUnc&+YoD\CZpAXg`q#:*gqtp<arVlf4s3gq4s8N#jrVl`lqu6Hk
q>U0gp\smcp&=U_o)A1Yn,DhUmf)VQli-2Kl2KlFk5OH@ir7p6i;;F/h>Z4/g@a.uf`'M%f(%8ke^`p6
J^^+;J^]2!n'g=Ho%!`jrn%&"qq:l#qqV2,qqq;/qr7V9roO.BrosFIrp0RNrpKdTrpTjVrpp'\rq69a
rqHEerqZHfrqlTjqu-Ek`;e9cR/d0bq#13irqlThrqZQgrqHEcrq69^rpp'Yrp]pUrpKdOrp'LHroX4A
roF(<ro*b3qq_8*rn7;'rmptsqpYPmqpG2crm1SjpWrQZJ^05"J^/hlg<T05rm:Yjp!E]cqpPJmrmgns
rn.5'rn@A-rndP0ro*k9roF(?roX4DrosFJrpKdSrp]pWrpp'[rq69arqHEerqZHfrql]mq#1*hb5]oi
S,`Keq#13irql]krqZQgqtL*`rq69_rpp'YrpTjSrp9XMrosFFroO.>ro3h5rndY0rn@A)rn.5$rmh"t
rmLenqp>>grm(Dcqonr\rlXuWJ]WJbJ]WJbbK9Y(rlauYrlt>cqp>5grm^qtrmq)$rn7;)rnRM/qr%J5
ro=">roa:Frp0RMrpKdSrpg!Yrq-3_rq??cqtU0drqcWkqu$?irr1(?df5p=rr2]krqucmrqcNfqtL*`
rq-3\qsaURrpKdOrp'LHroX4@ro3q8rnm_3rnRM,rn7;$rm^qrrmC_lrm1Shqp##]rlY5^rlFlTrl4iS
qS^q&J]"V-J]!&VaMe(sqo8NRrlG)\qo\o]rlt>crm1SjrmC_orm^qtrn7;*rnRM0rnm_5ro3q<roX4D
rosFJqsO@Nrq$-]qtC$`rqZHfrql]mqu-Ekc2Z5lU&Y,kq#1*erqcWirqQKerq69_rq$-Zrp]pUrpB^N
rosFEroF(=ro!e5rndY/rn7;&rmh"trmLemrm1ShrlkAarlP/Zqo/HMrke?DqnN-EpV#t-J\78\J\6QH
j1OWiqnE'Eo"b.>rkn`Sqo8WWrlb;brm(Mhrm:YmrmUksrn%/&rnIG/rnm_5ro=">roX4Erp0RNrpTjU
rpg!Zrq-3_rqHEerqZHfrqlKhqu5(Edf6-Crr2]krqucmrqcWirqQKerq??`rq$-[rp]pTrp9XLroj@E
ro=";ro!e4rnRM,rmq)!rm^qqrm:Yirlb;`rlP/[rl+lSqn`9IrkJ?Dpq-O:qml^9pUBb'J[UWJJ[U-<
i3r!]qmcX9qmuR7rk8<FrkJHJqn`9Lrl+lWrlP/^rlb;drm:Ymrm^qtrmq)&rnIG/ro!e8ro="@rosFI
rp9XPrp]pXrq$-]rq??crqQKgrqcWkqu$?irr1CHdf66Frr2]krqucmrqcWirqQKerq??arpp'XrpTjS
rp9XMroj@DroF(:rnm_3rn@A(rn%.trm:Yjrm(MerlY5[rl+lTrk\TLrkJ?Drk/6@rj_s:rjM^3rj;R/
os+S&o<EkNO0F2>J["(:os+(nrj2L/rjDX3rjVm:rjhp=rk8<GrkSNLrl"fTrl4r[rlkAerm1SkrmLet
rn7;)rndY3ro!e:roX4Drp0RNrpKdSrpg!Yrq69arqHEerqZQirql]mqu-Ekf)O1uWrN(tq#1*erqcWh
qtL*^rq$-[rp]pUrpKdNroj@Dro3q9rnm_3rnIG)rm^qqrm1ShrlkAarl+lTrkeZMrkABFrjr*=rjM^1
rj)O-qlg"%riQ1$poFCopSe1mWI_"#W.CmuW6qR@WV`^jX8]4"Xo>L&YPYR$ZMq30[f3f9])KDB^])%J
_Z%IP`W"$ZbPofdci2AleGe,"gA]t.hu;U6ir8*>kl0lHmf)\SnG`"XoD\C]p\Xa_qYpBerVQTLs3gqL
s8N#mrVl`oqu6Hkq>9pcpAX[_o)%nTm/H>MkPjWCj8S!9hYu=0f`'J$eGdhocMl&eaSs3Y`W!^Q^](qG
])K5=\,Nc6ZMq*-YPt['XT#7!WW&jnVuERgV#-q`U@=n.Tou+#Tn/p"U#r*KU\1G[VZ*LmW;`dqWrB+!
Xo>O'Yl;!.[/RQ6\c02>^&GeG_>_FQa8X0Zbl5oed/MPof)F>$h#?./i;Vd9jo4HBli-;Kn,DkVoDA7\
p\t!fqYpBhr;6HlrnRP%s02P&rqQHkr;QTmqYp<iq#:$epAX^`nc&%Wn,D\QlMg#Hjo4<>i;VU4g]#n*
eGdnqci25hbPoT^`;[UP^](nF])K5=[/RB.Yl:g)XT#0tVuERjU]."eT^n`MSc,)JS:R/mRt7&[S*$4)
SGo)VT(S`QT_kJ_U]..iVuEXoXT#@!Yl;!.[/RT7])KAA^])+L`;[jWb5T]cci2AleGe/#g]$(/i;Vd9
jo4KClMg/Ln,DhUnc&1[p&=^bq#:*gqYpBkr;6Hirnmb(s0Mb)rqQHhqu6Hkq"sgbo`"F\nc&%WmJcGN
kl0`Djo43;hYu@1fDa>"df.Vmc2Poc`W!dS^](tH]Df>>Zi790YPt['WrAsrV#I+fU&L_aT)P;XS,SlU
R/<6LQ2[$@PQ$^FOn4]dOH5KSOF`MOOS+b5P4b%<Pl?sIQi!0IRf8fUSc58\T`1YaU].(gW;`grXo>O'
Z2V*/\Gj)=^AbnH_Z%ORbPoccd/MJmec+2"h>Z=2i;Vj;kPj]Eli->OnG_tWoD\C]p\Xa_qYpBerVQTU
s3gqRs8N#mrVl]nqYp<fp\smcoD\=[n,DbSm/H;Lk5OH@iVq^5g]#n*eGdnqci2,eaSs3Y_>_4K]`,D>
[JmK2Yl:d(WrAmpV#I+fT`1P^SGnuVR/WHLQ2[$IP5CC@OSb+6Nr=q.N.HnJMh-e;Mr9N^N;/G4O8G%<
Oo(==Pl?sIQi<EPRf8iVSc5;]UAh"gVZ*UpXT#I'ZMq92\,O&>^AbtJ`r='YbPoiedf.bqg&Bb*hYuL5
jSn<@lMg,Kmf)\Snc&.WpAXgcq>U6iqtU-eroO1.s1/1)rqlZnr;QQiq>U-fpAX^`nc&%Wn,DYPlMg#H
j8S$:hu;C0g&BS%d/M>ibl5W]_u@IN^Ab_C\,N]4Yl:g)WrApqV#I%dTDkG]S,SiTQN!-JPQ$^DOT(=?
Nr+h8N;/;0M#2u+L4P)1L4P)1L<bPQL\lo&MYiA3NVeb8OT(CAPQ$gGQN!9NS,T#YTDkM_V#I:kWrB1#
Yl:s-\,Nu<^AbqI`;[dUbl5oed/MVqf`'Y)hu;U6j8S9Al2L#Jn,DhUnc&1[p&=^bq>:$cr;QZirojC1
s1/1/rqlZnr;QTmqYp<iq#:$eo`"I]o)A.XmJcGNkl0`DjSn*:h>Z.-ec+%sci22gaSs0X_#D%H]Df2:
ZMq',XT#0tV>d1fTDkD\RJrQPPl?gEOT(:>N;eb7MZ/G2LAlo+K`6W'K):,oJGt&tJ,k(MIt<*#It<*s
J,XutJ+\?kJc:9#KDpQ'L&Ql,M#N;2MuJ\7NrG+=OoCUEQN!<OSc58\U&LnfW;`mtYPtj,[/R]:^AbqI
`W"!Yc2Q&gdf.ergA]q-i;Vg:k5OTDli->OnG`"XoD\C]p\sseq>U6iqu6NmrVQTXs3gqXs7lQiqu6Hk
q#:$epAX[_o)%nTm/H;Lk5OE?i;VU4gA]_'df.Slbl5]_`W!^Q^&GSA[f3N1Xo>C#V>d7hT`1M]RJrQP
PQ$^DO8b+;MZ/J3L]3&-L&Q`(K):)tIe\?jI/&'fH2r5AH%C6lH%C7jH2Dp_Hi&3fIK"]mJGt0"KDpT(
LAlu-M>iG4N;en;OoCRDQi<HQSc5;]U].+hX8]:$Yl;*1\c0;A_>_FQaSsE_ci2AlfDaM'hYuI4jSn<@
lMg/In,DkVoD\I_p\ssbqYpBerTO:0s1JC2rqQHhqu6Hkp\smcp&=O]nG_nUm/H;Lkl0WAiVqa6gA]\&
df.Vmbl5``_u@LO^AbYA[/R</Xo>=!VZ*7fT)P8ZQN!-JOoCIANW+k8LAll*KDpH$JGt&tIf=cpI/\Kl
HN&3bGlDm\FTHW-JTQNdJTQHbd<,8.qf_aZrd"Khrd4WlrdFcprdXotrdk'$re:?+repc8rfI,ArfmDJ
rg`tZrh07fri,n!rilC0rj_sArkSNNrlP/`rm:Ymrn%/'rnm_6ro="Arp'LLrpTjVrpp']rq??cqtg<h
q#1*hmf1`8]`8!1rr)iorql]krqZQgrq??`rq$-YrpKdProj@DroF(:rn[S-rm^qqrm1Sdrl4rRrkABC
rjMg1riQ1#rhTOerh'1Yrg*PHrfI,=repc1re19&rdausrd=]krd"KfrcS3^rcA'Zqf2:JpM]tJJSp3[
JSp$Vf5C8"no4SJqf;[WrcJ-^rcnEfrd+QkrdOisrdt-&reCE1rf-o=rf[8IrgNhYrhBCfri?%$rilC1
rji$Brk\TQrlY5drmLeqrn@A-ro!e:roX4Drp9XPrp]pYrq69arqQKgrqcWkrqucoqu6$`df7)^rr2fn
rqucmrqZQgrqHEbrq-3[rpTjQrp'LFro="9rndY.rn%.srm1Sfrl4rSrkJHBrjDa1riQ0urh]Uergj%W
rg!JGrf@&9reLK,rdt-"rdOinrd+QgrcS3^rc@sVqeu@Lph]hCqJ(RrJSKaNJSN8@rbM:Fqel:Lrc%jV
rcA'\rcS3brd"KirdOisrdt-'reUQ2rf@&Arg!JOrgj%]rh]UnriQ1)rjDa8rkJHMrl4r]rm(Mjrn%/'
rndY4roF(@rp'LLrpTjVrq$-^rqHEerqZQjrquZlrr2?cdf72arr2fnrqucmrqcWirqQKerq-3\rpTjS
rp0RJroO.=rnm_/rn%.urm:YgrlG)TrkJHFrj;[0riZ7!rhTOcrgj%UrfmDDrf-o7re:?(qg\Tmrd+Qe
rcJ-\rc%aQqec=KphK\?rb1q:r+H"@JRs[LJRsCDh.?Iqmq;N2rb;.BqeZ7Krbq[QrcA']rc\9erd=Tm
rdt-'reg]6rfI,DrgEbVrh'1cri#h!riuI0rk/6Erk\TTrlb;frm^r"rn@A/ro3q=rosFJrpKdSrpp'\
rqHEerqZQirql]mrr)`nnc.&;`W,r:q#13hrqcWirqHEcrq-3[rp]pUrp'LGroO.<rndY/rmq(trm1Sd
rl4rRrkABBrj2U-ri5sqrh07]rgNhMrfR2?reUQ-rdk'!rdFclrcS3^rc8!Wrbh^PrbMLJrb2:Cqdob;
qd]V7nmVK)JRF%:JRF%:c=$<RqdTP7qdf\;qe#h@rb;@Irb_XQrc%jWrcA']rd+Qkrdb!!re:?-rf6u>
rfd>Mrgj%]rhoarric=-rj_sArk\TQrlY5drmUktrnIG/ro*k<roj@HrpTjUrpg![rq69brqZQirqlKh
qu6?idf7;drr2]krql]krqZQerq-3]rp]pTrp9XJroX4?ro!e2rn7;"rm:Yhrl4rSrkJHBrj;[.ri?$q
rhBC_rgEbNrfI,<re^W-rdk&trd+Qgrc\9]rc%jSrbVRKrb2:Cral(>qd]V7qdKA/nm;9#o3HoPO'I6@
JR%,<mp5Kjqd9>1raG\5raYq<ral(@rb2:GrbVROrc%jWrc\9crd+Qmrdk'%re^W5rfI,ErgEbVrhBCi
ri?%%rj;[7rkJHMrl4r^rm:Ynrn7;+ro!e9roX4Drp9XPrp]pYrq69arqZQirqlKhqu6?idf7;drr2fn
rquclrqZQgrq69_rpg!WrpB^Nroa:Aro!e3rn7;$rm:YhrlY5WrkJHFrj;[/riQ0rrhBCargEbNrfI,<
reUQ+rdaurrd4WercA'XrbqdPrbMLHrau.?raPk8ra5Y4ra5P/ra#M.mp#`oo3-]JO'.$:JQ^o6moo0a
r`oG.pg3r-ra5Y5raPk;rau.CrbMLMrbqdTrcA']rd4Wmrdb!#reLK3rfI,ErgEbXrhBCgriQ1)rj;[;
rkJHLrlY5arm:Yprn7;,ro!e:roa:HrpB^Srpg!Zrq69crqZQiqu$Hlqu6?idf7Mjrr2]krquclrqZQg
rqHEarpp'WrpB^Mroj@Aro*k6rn.5#rmC_irlG)VrkABBrj;[.ri5sprh07\rg<\Irf6u9re19%rdXom
rc\9^rc%jSrbVRHrau.?qdKA/ra#M.r`fA*qcN_sr`8Gep/QZCN)Y@-JQ1?&kuIU]r`Aksr`T5)r`oG.
qd9>1raGe:ral(ArbVROrc%jXrc\9drdXp!re19/rf6u?rg<\Trh07fri5t$rj;[8rkABLrlG)`rmC_q
rn.5-ro*k:roj@HrpB^Rrpp'\rqHEerqZQirqlTkqu6Hldf7Mjrr2]krquclrqQKerq??^rp]pUrp0RJ
roX4=rndY/rmh"rrm1Sbrl"fOrjr*;riuI'rhf[grgj%Urfd>Breg]0rdaurrd+QdrcA'Wrb_XLrb2:A
raPk7ra5Y1r`oG,r`];(r`B)"oi:ujmSj$^r_e;EM,Ah$JPk6#qblcZqc*5gr`9#"r`T5(r`fA,ra#M1
ra>_8rac"ArbDFLrbqdVrcS3drdFcrreCE0rf@&Brg<\Urh9=gri?%'rjDa:rkSNPrlG)brmLerrnIG/
ro*k=roj@IrpTjVrpp'^rqHEerqcWkqu-EkqZ#"DbQ%S@qu-Nlrql]krqHEcrq-3ZrpTjSrp'LGroF(:
rnRM+rmLelrltG]rkeZKrjMg3ric=!rhKIbrg<\Krf@&9reCE'rdOimrce?]rbqdQrb2:BraYq8ra5Y2
r`fA*r`T5&r`B)"r`/qsr_i;ar_NMipJ6?9JPUhmJPX?_r_WSir_W8br_i_or`/qur`B)$r`T5(r`fA.
ra5Y4raYq>rb2:JrbqdUrce?frdOitreCE0rf@&Crg<\WrhKIjric=-rjMg?rk\TQrltGhrmLf!rnRM2
roF(Brp'LNrpTjUrq-3_rqHEgrql]mrr)`nqZ#"DcN!nCq#13gqt^6brq-3]rp]pSrp0RHroO.<rn[S,
rmq(qrlkA_rkSNGrj_s3riH*trh07\rgEbJrf6u9re(3#rdFcgrcA'Wrb_XKrb)4>ra>_4r`oG+r`K/#
r`/qsr_iVjqb[8fr_WJfr_DlUr(V`9L.m.lJP=ZhlqR@PqbR2fr_NDfr_`Pjr`&ksr`9##r`];+ra5Y5
raPk>rbDFLrbqdVrcS3grdb!#repc9rfR2Jrgj%]ri#gtrilC3rk/6GrlG)_rm:Yqrn7;,ro*k;roa:H
rpKdTrq$-^rq??eqtg*dqu-Tqdf7Vmrr2]krqcWirqQKcrq-3[rpTjQrp'LFro="8rnIG'rmLekrlP/X
rkABBrj;[-ri,mmrgs+Xrg!JDreg]0rdauqrcnE`rc%jRrb2:CraYq8ra#M-r`T5&r`9"tr_i_mr_WJf
r_E>bpe:QXnOe@)JP(JcJP*[Lr_*#[r_<8br_NDfr_`Ynr`&ktr`B)%r`fA-ra>_8rau.Crb_XRrcA'`
rd=]qreCE0rf@&DrgEbWrhTOmriZ7-rji$Brl"fXrm(Mkrn%/(rnm_8roX4Frp9XQrpg!Zrq69crqZQi
q#1*h!<:LIcN!nCqu-NlrqcWhrqHEarpp'WrpKdOroj@Bro*k5rn.5"rm1Serl+lPrk&0<riuI'rh]Ue
rgWnPrfI,;reCE'rdFcjrcJ-Yrb_XLral(=ra5Y2r`fA)r`9"tr_renr_WJfr_EGer_32^pe'jDp.9g+
N(ALjJOnKcj%9#<r_*,^r_<AeqbR2fr_`Ynr`/qur`T5)ra,S2raPk<rbDFKrc%jYrd"Kkrdk''repc;
rg*PQrh07fri?%'rjMg<rkSNQrlb;erm^r"rndY5roF(Brp'LNrpTjWrq-3arqZQiqu$Hlqu-Tqdf7_p
rr2fnrquclrqZQgrq??_rpp'Wrp9XKroX4<rn[S-rm^qprm(M^rkeZKrjDa2riZ6rrh07]rfd>Crf-o1
rdk&trc\9^rbqdPrb2:Ara>_3r`oG)r`9"ur_i_mr_NMir_EGdr_*5_pdtHUpdaX>JOY2[JOY2[]LMZd
qagTUr_!/_r_3;cr_WSir_`Ymr`/r!r`K/)ra,S3rac"@rbVRPrcA'^rdOitre191rfI,Crgj%^rhTOr
riuI1rkABJrl+l^rmC_prn@A-ro!e<roj@JrpTjVrq$-_rqHEfrqcWkqu-Nn!<:LIdJs4Fqu-NlrqcWh
rq??arpp'XrpKdNroa:@rnm_0rn.4urm(Mdrkn`Mrk&09ric=$rh9=^rgEbIrf$i4rdk&trd+Qbrc%jR
rb)4@ra>_3r`fA)r`/qsr_remr_NMgr_3;aqb$iZqagTSpdX^@rBu3)JOG&WJOIdOmm["@r^Z`Sr^luZ
r_*5ar_EGgr_WSmr`&ksr`T5)ra,S3rac"@rb_XRrcA'brdFcsreUQ4rfI,Irgj%^ri5t#rj2U9rkJHM
rlb;ermLeurnIG0ro="@rp'LNrp]pXrq69brqQKhrqlTkrr)otdf7hsrr2fnrqucmrqcWgrq??`rp]pT
rpB^KroO.=rndY.rmh"prlkA^rkSNGrjVm2ri?$qrh'1Yrg!JCre^W-rdXonrc\9[rb_XLrac":ra5Y/
r`T5%r_i_lr_NMgr_<Acr_!&Zr^coVpdY$ImmR+AJO=uUJO=uUc9q%gpdOsIr^ZiVr^luZr_3;cr_EGg
r_`Ymr`B)%r`fA/raPk;rbDFKrc%j[rd4Wore19-rf6uCrgNhYrhf[qrilC2rk&0Frl>#]rm:Yprn7;-
ro3q>roj@KrpTjUrq-3_rqHEgrql]mrr)fp!WN)Js4%)JrqlZnqu6Hkq>U*eo`"I]nG_hSli-#Fj8Rs8
g]#e'df.Pkao93W^AbYAZMps)VZ*7fRf8TOO8at7K`6K#H2_scEW0hSB`;TB@/aI2>Q.\&<;ohq;#X8i
:B!oc9)_E]8H)-V7f,XR7,10-6\.RY6@hIS6J"QX6i0:N7JK@O8,c'Y8cD?]9E%]c:]=2i;uTer<rQ>&
?N+@3Ac?ECD>nPSFoH[cJ,Y*"M#NJ7Pl@-NT`1hfXT#O)\Gj5A_u@aVcMl8kfDaP(hu;X7jo4TFmf)_T
oD\F^pAXmeqYpBkrVc]rrr1FIeGo=Brql]krqZQdrq-3[rpTjQrp'LDro*k5rn.5#rmC_grl+lPrjr*:
ric="rhKIbrg*PGrf-o2rdk&srcS3\rbqdMrau.=ra,S.r`T5"r_i_lr_NMfr_3;`r^m)[r^ZrWpdP0M
fgG[)g-U?VX[.M(JO.mSe3j+$qaLKRr^ZrYr^m)]r_3;cr_NMir_reqr`T5)ra,S5rau.DrbqdVrcS3g
rdk'&rf-o?rg*PUrhKIkric=.rjr*Erl4r\rmC_qrn.5,ro*k;rp'LLrpTjVrq$-^rqZQirqlQj!WDuH
s4%)GrVl`oqYp<iq#9scoD\7Ymf)POkl0WAi;VR3f)F+sci2#b_u@FM[f3Q2Xo>*pT`1J\P5^L@MZ/2+
If=]nErL"VD>n/HA,]j7>lIn*=8l+s;#X8i9`@]a9)_E]8H)-Y7f,XR7-m;)6IeF%6%M;*5_21O5lO'[
6LmM@7/fXP7fGpW8H)3[9)_K_9`@ie;>sJm=8lA%>lJ+0A,^*>D>nMRErLFbIf=otMZ/Y8P5_!NTDkVb
Xo>X*[f4&@`;[jWci2Dmf)FM)i;Vd9kl0lHmf)_ToD\F^q#:*gqYU0jr;llqeGn/#rr2fnrquclrqQKe
rq-3\rpTjQrosFEro!e3rn@A#rm:Yhrl"fNrk&08riQ1!rh07[rg!JDre^W-rdXomrcS3ZrbVRIraPk6
ra#M*r`/qrr_WShr_3;`r^m)[pdY6NlpKYsn3[+?JO#JcJO"cOk!8o3b<kbeqaC3Kr^d#[r_!/`r_EGh
r_resr`K/*ra>_7rb2:Irc%jZrd+Qnre19.rf@&DrgWn[ri,n"rj)O8rkSNOrltGhrmUl#rn[S3roX4D
rp9XQrpp'\rqHEfrqcNi!;ursrVQTJs4@;Mrr2lqr;QTmq>U0gp\sd`nc&"VlMfuGjSn*:h#>t*df.Pk
b5T6V^&GP@Yl:^&VZ*1dRJrELN;eV3K)U/sGQ)X^DZ4DMB)Z3;?2e%,<rQ(t;>sAj9`@]a8cD9[8,c!T
7Hm1s6L[>@6%M:d5_21O5it?26-DU]6iKOO7fGpW8H)3[9E%Zb:]=5j<;oqt>5hh,@/ad;C&W#LErL:^
I/\`sL]383PQ$sKT)PVdX8]@&\Gj2@_>_UVcMl8kf`'Y)i;Vg:kl0lHn,DkVoD\L`q#:*gqu6Knr;llq
qu5=LfDkjLrr)iorql]irqHEcrpp'XrpKdMroa:@rnm_/rmq(qrlkA^rkSNFrjDa.ri#gjrg`tRrfI,:
re:?$rd"KbrbqdOrb)4?ra5Y/r`T5#r_i_kr_<Acr_!/]r^coUr^HfSnjCtpn3[+?JO#JcJO"cOk!8o3
_F!o_r^?`SqaUQTr^m)]r_*5br_NMkr`/r#r`oG0raYq?rbMLOrcJ-brdXp#reg]:rg*PRrhBCjriZ7.
rjr*Erl>#]rm:YqrnIG0ro="?rosFMrp]pXrq??crqQKirqlcp!WDuorn@D+s8N#srVl`oqu6Hkp\smc
o`"C[n,D\QkPjTBiVqX3f`'A!ci2&c`;[IL\,N]4WrAjoTDk2VP5^L@K`6N$IK"?fEW0kTBDuH@?iF=0
=oMJ$;Z9Ml:]=#d9)_EZ8,c!W7.N^l6Ms0$5__OT5_22P5g)Le6i0:K7fGpW8cD?]9E%`d;>sJm<rQ5#
>lJ+0A,^-?DZ4YTFT-^fJc:?%NrG4@Qi<WVV#ICnZMqB5^&GtLb5T`de,Ituh#?:3jSn?Am/HGPnc&1[
p&=^bqYp?lquQ`nrr)iqgAfn,rr2oqrqucmrqcWgrq69^rp]pSrp0RGro="8rnIG'rmC_irl>#Trk&0;
rilC#rhBC_rfmDCrepc-rdOimrc8!VrbVRFraPk5r`];&r`&knr_EGer_!/]r^d#Yr^QlUmmGSkrB^?I
JO"rTJO"cOf0K*se3`Ukr^HfUr^ZrYr^m)]r_<Afr_WSnr`B)&ra,S4ral(FrbqdVrd+Qmrdt--rfI,D
rgj%_ri#h#rjMg<rkeZUrltGirmq)'rnm_8roX4GrpKdTrq$-^rqHEgrqc]n!W;lprVlfMs4[MPrr2lq
r;QTmqYp6gp&=O]nG_hSli-#Fir7j7g&BP$ci2,e`W!XO\c/r7Y5Y6rTDk>ZOoC@>M#Mr(I/\?hE;j_R
CAq`B@/aI2=T2>";Z9Ml:B!rd8cD9[8,c!W7K,^G6d\7!5_21O5_21O5gDX?6M3_F7/fXS7fGpW8H)3[
9`@cc;#XAl<rQ5#?2e72A,^6BD#SDQGQ)sgJGtB(NW,(>S,T)[V#IOrZi7N7^])4ObPoieeGe/#hu;X7
jo4TFmJcVSo)A=]p\t$gqZ-Npr;?Qmrr1XOh>dKRqu-NkrqcWirq??`rpg!Vrp0RIro="9rn[S)rmLel
rl>#UrkAB=ric=$rh9=]rg*PEre^W,rdOilrcA'WrbDFEra>_2r`];$r_remr_EGdr_!/\r^ZrWr^HfS
og@G"r^$'>JO"cOJO"cO_Ee)dg-YI"r^?`Sr^QlWr^d#\r_*5cr_WSmr`/r$ra#M2rau.ErbqdWrcnEk
re19.rf@&Erg`t]ri5t$rj;[=rkeZTrm1Smrmq))ro!e9roj@IrpTjVrq-3`rqZQi!;cfoqu6Qkrn[V1
s8N#prVl]nqYp<ip&=R^nG_kTlMfuGir7j7h#>h&d/M;h`W!^Q]`,59Xo>6tT`1DZPl?[AL]2l(HiA3f
EW0hSB`;N@?iF:/=oMD";Z9Jk:B!oc8cD6Z7f,XR7.iq$6N0:@5_21O5_21O5f,ec6/"Zu6iKLN7K,dU
8,c*Z9E%]c:]=8k<;p&">lJ+0A,^0@D>nPSG5cjfK)UT*NW,1ARf8uZVuEgtZMqN9_#D=Pc2Q,ieGe8&
hu;X7kPjcGmf)_ToD\F^q>U3jqZ6Tkrr)`nh>c=2rr2fnrqcWirqQKbrpp'WrpB^Lroa:=rn[S.rmUkn
rlkAZrkJHCrilC&rhf[drg<\Jrepc0rdXomrcJ-XrbMLFraPk5r`fA(r_renr_NMer_!/]r^QcRr^?EH
f0]I&nN_XjJO"cOJO%(;r^#%#qa:6Kr^H]Rr^m)^r_3;er_`Ynr`K/'ra,S5rb)4GrbqdXrd"Kmre:?0
rf[8Jrgs+dri?%&rji$Brkn`Zrm1SmrnIG/ro!e=rp'LMrpTjWrq-3brqQQj!W)ZlrVQTMs5!_Srr2lq
r;QQlq#:$eo`"F\n,D\Qkl0]Ci;VO2g&BCuc2Pia_>_+H[f3K0W;`OjRf8TOO8at7KDpB"FoHF\DuODK
AH$!9>lIk)<W5kp:]=)f9)_B\8,c!W7K,^M6et)g5_21O5_21O5dN`36MNqI7/fXS7fGpW8cD?]:&[rf
;>sSp=T2S)@/a^9BDuiKErL4\J,Y*"M#NJ7Pl@-NUAh.kYPu!0]`,bHao9QadJhhuh>Z@3jo4KCm/HJQ
o)A:\p\ssgq>pHhrqucorr1aRh>dBNrquclrqQKerq$-ZrpTjOroa:Arnm_0rn.4srlkA_rkSNFrjDa-
rhoahrgEbLrf6u4rdk&rrcJ-YrbVRGraYq7r`fA'r`/qor_EGer^m)[r^ZrVr^?EHj$NW/i]r&[JO"cO
JO$P,r^#I/ogA^Hr^HfVr^d#[r_<Afr_WSor`K/(ra5Y7rau.Grc%jYrd=]rreCE4rfd>Lrh9=hriQ1-
rk&0FrlG)_rm:YsrnIG0roF(Brp'LOrpg!ZrqHEf!;Z`mqYU3irS@M0s82cor;QQlq#:$eoD\:Zmf)JM
kPjN@hYu7.ec*qpbPoN\^](eCZi7$)V#I"cQN!$GNW+V1J,XfoErKtUC]7lD@K'U4=T2A#;uTVm:B!rd
8cD9[7fGjU7.iq-6N0:.5_21O5_21O5d3NQ6/t<)6iKLQ7K,dU8,c*Z9`@cc;#XDm<rQ5#?N+C4AH$BD
DuOeVHiAQpK`6u1P5^dHTDk\dX8]I)\c0AC`r=0\d/MSpg&Bk-j8S3?l2L,MnG`%Yp\ssgq>pHhqu$Hl
h>c=2rr)iorql]jrqQKdrpg!VrpB^KroO.<rn[S+rmUklrlP/Xrk8<>rilC#rhKIarfd>Breg]+rdFcj
rc%jQrb;@@ra5Y0r`B)!r_`Yjr_3;ar^d#Yr^QlTog@b+fg(*RJO"cOJO$5#i'R<.qaCEQr^ZrYr_*5b
r_NMjr`&kur`oG0raPk@rb_XRrcnEirdk'+rf6uArgs+`ri#h#rjVm?rl"fXrm(Mlrn.5+ro*k<roj@K
rpTjVrq??c!;QZkq>U9jr;QZNs5!_SrVl`oqu6Ejp\sjbnc&"VmJc;JjSn*:h#>q)df.MjaSs*V]Df5;
YPtI!U&LS]P5^I?M#Mr(HiA0eE;j\QB`;H>?N+1.<rQ%s;#X5h9`@Z`8,c!W7Iih16Mj(%5_21O5_21O
5cR*K6/t<)6iKOR7fGpW9)_K_:B")h<;oqt>Q.t.@K's>C]8;PFoHaeJGtB(NW,+?SGo5]VuEn![Jmf;
_u@aVc2Q/jfDaS)i;Vg:kPjlJn,DkVp&=[cq#U<erql]mrr([Qh>dKQrqucmrqQKdrq69\rpTjQroa:A
rnm_0rmq(srlkA^rk\TFrj;[.rhTOcrgEbIrepc1rdXomrcJ-XrbDFEra>_2r`];$r_relr_<Aar^m)Z
r^QlUpd=(.r^#+#JO"cOJO"cOVa15Ij$NN.r^HfUr^ZrZr_*5br_NMkr`/r$r`oG1rau.FrbqdXrd+Qn
reCE1rfI,Irh'1cric=.rjr*Frl4r]rmLetrnIG0ro="@rp9XPrpg!\rq?Ef!VlHhqu6NmrS@M3s8N#s
rVl`oqYp6gpAX^`nG_hSli-#Fj8Rs8gA]Y%d/M2e`W!XO\Gif5Xo>'oSc4uTOT(.:KDp8tGQ)X^D>n5J
A,]m8>lIk)<;oep:]=)f9)_E]7fGjU7/0.06N0:%5_21O5_21O5c6mH6/t<,6iKLQ7K,dU8cDB^:&[rf
;Z9Yp=T2P(@/a[8B`;lJErL:^I/\ctM>iV9Qi<QTUAh:oZMqB5^])1Nb5Tceec+;%hu;X7jo4TFmf)_T
o`"L`pAt$_rqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-YrpB^NroO.=rnm_-rm^qorlY5YrkJH@riuI(
rh9=]rg*PDreUQ*rd4Wfrc8!Srb)4>ra,S.r`K.ur_`Yjr_*5_r^m)Yr^HfSpd=(.r^#+#JO"cOJO"cO
Va15Ij$NN.r^?`Sr^QlYr_!/_r_NMjr_reur`];-raPk>rbVRSrce?grdt-*rf6uDrg`t]riH+(rjMg@
rl"fYrm:Yprn.5-ro3q=rp0RNrp]pYrq-9c!Vc?fqYpBkrVQTSs5<qVrr2lqr;QQlp\smcoD\7YmJcDM
jo49=hYu.+e,I\maSs*V^](Y?Yl:X$T`1G[Q2ZdBL]2l(HN&*eEW0bQB)Z9=?N+1.=T24t;#X5h9E%Q_
8H)*X7K,^P6f:<16.S;P5_21O5_21u5lO(*6N0@O7/fXS7fGsX8cDB^:B")h;Z9et>5hk-@fC$>C]8>Q
FoH^dJc:H(NW,4BRf8uZWW'+#[Jmr?`;[jWci2DmfDaY+iVqs<lMg/LnG`%Yo`4^ep\4[`rql]nqu5XU
i;`fUrqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`rk\TIrj2U,rhoagrgEbKrepc0rdaunrcJ-X
rb;@Bra>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=:4r^"doJO"cOJO"cOSj<9@k!Jr4r^?`Sr^ZrZr_!/a
r_WSlr`9##r`oG1ral(CrbqdXrd"KnreCE1rf[8Krh07griQ1+rk8<Jrl4r`rmUktrn[S3ro="Brp9XQ
rpp']!;?Ngp\t$gqu6Njro=%:s8N#sr;QTmqYp6gp&=O]n,DYPl2K`Bi;VR3ec*tqc2P]]_>_.IZMps)
VZ*1dR/W9JMZ/>/J,X]lF8g+WBDuH@@/aF1=T2>";>sAj:&[``8H)-Y7K,^M6g6r:6-VZG5_21O5_21l
5lO(36Mj.L7/fXS8,c'Y8cDH`:]=5j<W6,">lJ.1AH$6@DuOhWGlE3lK`6l.P5^jJT)PVdXo>X*^&GkI
`W"-]dJh\qh>Z@3j8S<Bm/HJQo)A:^pAt$_rqcWkrquZmj8\';rr2oprql]krq??`rpg!Vrp0RIro3q7
rnRM'rmC_irl+lQrk/68riH*rrgj%TrfR2:re(3!rc\9]rbh^Jrac"8r`oG)r`/qpr_NMer^m)[r^QlT
og@t1r^"doJO"cOJO"cOSj<9@k!Jr4qaCEQr^ZrZr_3;dr_`Ypr`K/)ra5Y7rb)4Jrc8!]rdOj!re^W:
rg3VTrhf[rriuI8rkSNPrltGirmh#'rnm_7roj@IrpTjVrq$3a!VZ6dqYpBkr;6KRs5X.Yrr2lqr;QQl
q>U*eoD\7Ymf)POkl0T@hYu:/e,I_nbl5NZ^](hDYl:[%V#Hn`QMusEM#N&+If=KhEW0hSB)Z<>?iF:/
=8l5!;#X5h9`@W_8H)*X7/K@36N09q5_21O5_21O5b:7?6/t<26i0:N7fGpW8cDE_:B")h<W6,">Q/"/
A,^*>D>nPSFoHjhK)UT*O8bFDSGo>`X8]@&])KGC_u@mZci2Dmg]$+0ir80@lMg5NnG`%[p&Xm\rqZQj
rqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp'LGro*k5rnIG$rm1Serkn`Lrj_s3ri5snrgWnOrf@&5
rdk&srcS3[rb_XGraPk6r`T5%r`&knr_EGdr^m)[r^QlTqa9^:og-hfJO"cOJO"cORm?j:ksGA:qaCEQ
r^ZrZr_3;cr_WSnr`B)%ra5Y6ral(Grc.p[rdFctreCE5rg!JPrhTOnrilC3rkABLrlb;ermUl$rndY5
roa:GrpKdTrpp-_!VQ-bq>U9jr;QZoro=%=s8N#srVl`oqYp<ip&=R^nG_kTlMfuGiVq^5gA]S#ci2,e
_Z%7J\Gi`3WrAdmRf8QNO8ak4Jc:&rFT-7YD#S#F@fB^5=oMM%;uTVm:B!rd8cD9[7fGgQ6gR/=6,Z$>
5_21O5_21c5lO(96N0@L7/f[T8,c*Z9`@cc;#XDm<rQ8$?N+C4Ac?NFE;jtYI/\ZqL&R/4Pl@-NU].7l
Yl;03^Ac"KbPoiee,J)#h>ZC4kPjcGmf)_To)SFap%A=[rql]mrr)iqj8\0>rr2oqrql]krqZQdrq$-Y
rpB^Lroa:=rnRM+rmUkmrlb;Xrk8<?ric="rhBC\rfmDBre19#rd4WcrbqdOrac":ra,S+r`/qqr_WSg
r_*5]r^ZrWpd=L:^-I67JO"cOJO#8]mm?e:r^QlWr^d#]r_<Agr_i_rr`K/+raGe:rbMLOrcA'crdb!$
rf6uArgNh\ri,n#rjVm?rkeZXrm1Smrn7;,ro!e=rp'LMrp]pY!;-Bcp&=ddqYpBkrVlfVs5X.Yrr2lq
qu6Hkq>U'doD\7YmJcALkPjE=h#?"+e,I\mbPo?W^&GM?Y5YC!UAgV\PQ$R@K`6K#HiA*cDuOPOAH$$:
?N+(+<W5nq;#X2g9E%K]8,c!Q6gm@U5_21O5_21O5`\2!6MNqI7fGpW8H)9]:&[ug;Z9_r=T2Y+@K'g:
C]88OF8gOcJGt6$NW,.@Rf9&\W;`t!\,O&>_>_XWci2Dmg&Bh,i;Vp=lMg2MnG`"Zo`=aYrqZQirql]n
rr1sXj8],Xrr)inrqcWhrq69^rp]pSrosFDro!e2rn7;!rm(Mcrk\TIrjVm0ri#girgEbKrf-o1rdXoo
rc8!UrbMLDraGe4r`K/"r_i_lr_<Abr^d#Yr^QZMmm=`RJO"cOJO"cOO$N/#pd>$Mr^ZrYr_*5br_WSl
r`9##ra,S4rac"DrbqdVrd4Wpre191rfd>Lrh9=hriZ70rk/6HrlY5crmLf!rnRM2roO.DrpB^Srpp-_
!VQ-bq#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_eRl2KiEi;VO2g&BCucMkuc_>_+H[f3H/VuE@g
R/W9JNW+S0J,XcnErKtUCAqcC@/aI2=T2>";>sAj9`@]a8H)*X7JK7=6G>^95_21O5_21]5jq&76iKOR
8,c'Y9E%Zb:]=5j<W6,"?2e:3AH$?CDZ4\UHN&BmKDpl0P5^jJT`1kgY5Ym/]`,bHb5TZbdJhhuh>Z@3
k5OTDm/HMRo)SC`o^r.XrqZQjrr)iqj8\0>rr2oqrql]krqQKbrpp'Xrp9XKroO.;rnRM+rmC_irlP/U
rk/6=riZ6urh07Xrf[8?re(3"rd+Qarbh^Mrac"9ra#M*r`/qpr_NMer_*5\r^QlUpd=L:^-I67JO"cO
JO#8]mm?e:r^HfUr^Zr\r_<Afr_`Ypr`K/*raGe:rbDFMrc8!ardOj!rf-o?rg<\XrhoaurjMg=rk\TU
rltGirn7;+ro!e;roj@Jrp]pY!;$<ao`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.Xm/H8Kjo43;
h#?"+dJhDiao9*T]Df8<Y5Y?uT`1>XP5^I?KDpB"HN%saDZ4DMAH$!9?2dt*<W5kp:]=&e9)_?[7fGjO
6gm@U5_21O5_21O5`\2!6MNqI7K,dU8,c-[9`@ie;>sSp=T2V*@K'g:CAr,MErLCaIf>!!NW,+?R/WcX
VuEju[f3r=_#DITc2Q,ig&Be+i;Vj;kl0rJnG`"ZoE"UVrqQKgrql]nrr1sXj8],Xrr)inrqcWhrq-3\
rp]pRrosFDro!e2rn7:urltGarkSNFrjMg/rhoagrg<\Jrf-o0rdXonrc8!UrbDFCra>_2r`K/"r_`Yj
r_3;`r^ZrWr^HTLmm=`RJO"cOJO"cOO$N/#pd>$Lr^QlWr_!/`r_NMjr`/r"ra#M3rac"Crbh^Urd+Qm
re(30rf[8Jrh07griZ7/rk/6GrlP/armC_urnRM2roO.Crp9XRrpp-^!VH$`q#:*gqu6Qnro=%=s8N#s
rVl]nqYp9ho`"F\nG_eRl2KfDi;VO2g&BCucMkuc_#CtF[f3H/VuE@gR/W9JNW+S0J,XcnErKtUCAqcC
@/aI2=T2>";>sAj9`@Z`8H)*X7JK7=6G>^95_21O5_21]5jq&76iKOR8,c'Y9)_N`:]=5j<W6,"?2e:3
AH$?CDZ4\UHN&BmKDpl0P5^jJT`1kgY5Ym/]`,_Gb5TZbdJhhuh#?72jo4KCm/HMRo)SC`o^r.XrqZQj
rr)iqj8\0>rr2oqrql]krqQKbrpp'Xrp9XKroX4<rnRM+rmC_jrlY5Vrk/6=riZ6urh07Xrf[8?re(3"
rd+Qarbh^Mrac"9ra#M*r`/qpr_NMer_*5]r^QlUpd=L:^-I67JO"cOJO#8]mm?e:r^HfVr^d#]r_<Af
r_`Ypr`K/*raGe:rbDFMrc8!ardOj!rf-o?rg<\XrhoaurjMg=rk\TVrltGirn7;,ro!e<roj@Jrp]pY
!;$<ao`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9scoD\7YmJcALjo43;h#?"+df.Pkb5T6V^&GM?Y5YC!
U&LJZP5^I?K`6K#HiA'bDZ4GNAH$$:?N+(+<W5nq;#X2g9E%K]8,c!Q6gm@U5_21O5_21O5`\2!6MNqI
7fGpW8H)9]:&[ug;Z9_r=T2Y+@K'g:C]88OErLFbJGt6$NW,.@RJroZVuEju\,O&>_>_UVcMl8kg&Be+
i;Vj;l2L)LnG`"Zo`=aYrqQKgrql]nrr1sXj8],Xrr)inrqcWhrq69^rp]pSrosFEro!e2rn7;!rm(Mc
rkeZJrjVm1ri#girgEbLrf6u2rdXoorc8!UrbMLDraGe4r`K/"r_i_lr_<Abr^d#Yr^QZMmm=`RJO"cO
JO"cOO$N/#pd>$Mr^ZrYr_*5br_WSlr`9##ra,S4rac"DrbqdVrd4Wpre192rfd>Lrh9=iric=1rk8<J
rlY5crmLf!rn[S3roX4ErpB^Srpp-_!VQ-bq#:*gqu6Qnro=%=s8N#srVl]nqYp<ip&=R^nG_hSl2KlF
i;VO2g&BJ"ci2,e_Z%7J\,NT1W;`OjRf8QNNrF_2J,XfoF8g+WC]7lD@K'U4=T2>";Z9Ml:&[fb8H)-Y
7ef@>6G>^95_21O5_21]5jq&76iKRS8,c'Y9E%Zb;#XAl<rQ5#?N+C4AH$BDDuOhWHiAQpK`7#2PQ%$M
UAh.kYPu$1^&GnJbPoiee,J&"h>Z@3kPjcGmJcVSo)SFap%A=[rqcWkrr)iqj8\0>rr2oqrquclrqZQd
rq$-YrpKdNroa:>rndY.rmUkmrlb;Xrk8<@rilC%rhKI]rfmDCre:?&rd=]erc%jQral(<ra,S,r`B(t
r_WShr_3;_r^d#Xr^?WNlpC\;`'Al=JO"cOJO#Jcr^#m;r^6QNr^QlWr^m)_r_<Agr_resr`T5,raGe;
rbVRQrcJ-erdb!%rf@&CrgNh]ri,n$rj_sArkeZXrm1Smrn@A-ro*k>rp'LNrp]pY!;-Bcp&=ddqu6Nm
rVlfVs5X.Yrr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu7.e,I_nbl5KY^Ab_CYl:[%U]-b^Q2ZjDL]2l(
IK"?fE;j\QB)Z9=?N+.-=8l1u;#X5h9`@W_8H)*X7/K@<6M3Xh5_21O5_21O5at%960U`86i0:N7fGpW
8cDE_:B")h<;otu>5hk-@fC!=D#SDQFT-^fK)UQ)O8bFDS,T2^WrB7%])KGC_Z%dYci2DmgA]t.ir80@
lMg5NnG`%[p&Xm\rqZQjrqucorr1sXj8],Xrr)iorqcWirq??_rp]pTrp0RIro3q6rnIG$rm:Ygrkn`M
rjr*5ri5snrg`tRrf@&7re(3!rcS3[rb_XHraYq7r`fA'r`/qor_EGdr^m)[r^QlTqa9C1r^"doJO"cO
JO"cOSj<9@j$N`4qaCEQr^ZrZr_3;dr_WSor`K/(ra5Y7rau.Hrc.p[rdOiureUQ7rg!JQrhTOorilC5
rkABLrlkAfrmUl$rnm_7roj@HrpKdTrq$3a!VZ6dq>U9jr;QZoro=%:s8N#sr;QTmqYp3fo`"C[n,DYP
kl0T@hu;F1ec*tqc2P]]_>_+HZ2Uj(VZ*.cQi<-HM>i/,If=NiErKtUBDuH@?iF=0=T2>";>sAj9`@W_
8H)*X7.iq36N09q5_21O5_21O5b:7?60:N26i0:N7fGpW8cDE_:B",i<W6,">lJ+0A,^-?DZ4\UG5csi
KDp`,OoC^HSc5McXT#L(]`,_G`W"-]dJh\qh#?41ir80@li-APnc&.\p&Xm\rqcWkrquZmj8\';rr2op
rql]krq??`rpg!Vrp0RIro3q7rnRM(rmLekrl4rRrk/69riQ0trgs+VrfR2;re19#rce?_rbqdLrac"9
r`oG*r`9"rr_NMer_!/\r^QlTog@t1r^"doJO"cOJO"cOSj<9@k!Jr4qaCEQr^d#\r_3;er_i_rr`K/)
ra>_:rb2:LrcA'_rdXp#reg];rg3VUrhoatrj)O9rk\TRrm(Mkrmq)(rnm_7roj@IrpTjVrq$3a!VZ6d
qYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wli-/Jj8S!9h>Z")df.Sl`r<gR^&GA;Y5Y?uT`1AYP5^C=
L&QW%H2_pbDuOJMAH$!9>lIn*<rQ"r:]=)f9)_B\8,bsV7/0.66N09q5_21O5_21O5b:7?60:N26iKLQ
7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:C&W&MFT-RbJGt<&MuJn=RJrlYVuEgtZi7Z;_Z%RSci2Dmf)FM)
i;Vd9l2L&Kn,DnWo`4^ep\4[`rql]mqu5XUi;`fUrr)iorqcWgrq??_rp]pSrp'LEro3q6rn%.urm1Sb
rkn`MrjDa0ri,mirgWnPrf-o4rdk&prc\9\rbMLFraPk5r`fA(r_i_lr_EGcr_!/\r^QlUr^?WNi'RE/
ej+dOJO"cOJO$+ur^#@,r^6ZQr^HfUr^d#[r_*5cr_WSlr`K/'ra,S5rb)4Grc.p[rd+QpreLK4rg!JO
rh07iric=/rkJHNrlG)brmUkurndY5roO.Erp9XRrq$-^!;?Ngp\t$gqu6Qkro=%:s8N#srVl`oqYp6g
pAX^`nG_hSlMfoEir7g6f`'D"ci2&c`;[ON\,NW2X8\glSGniRNrFk6K)U,rG5cL\D#S,IA,]j7>Q.b(
;uTYn:B!rd9)_B\7fGjU7/K@06N0:%5_21O5_21O5c6mH6/=m,6iKLQ7K,dU8H)6\9`@fd;#XDm=T2P(
?iFR7BDu`HEW1.\HiAWrM#NG6QN!ERU&M+lZ2V63^])1Nao9WceGe,"hYuL5jo4QEmJcVSo`"L`pAt$_
rqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroO.>rnm_/rmh"prlY5ZrkJHBrj)O*rhBC_rg3VG
reg]-rd=]hrc8!Trb2:@ra>_1r`K/!r_i_kr_<Aar^m)Yr^HfSpd=(.r^#+#JO"cOJO"cOVa15Ij$NN.
r^?`Sr^QlYr_*5br_NMkr`&l!r`fA0raYq@rb_XTrce?hre(3,rfI,Grgj%_riQ1*rj_sBrl"fYrm:Yp
rn@A/ro3q=rp0ROrp]pZrq-9c!Vc?fqYpBkrVQTSs5!_SrVl`oqu6BipAXaanc&"Vm/H2IjSn'9g]#e'
df.Jia8WpS])K)9YPt?sTDk8XOT(1;LAl]%H2_pbDuOMNB)Z3;?2e%,<W5qr:]=)f9)_E]8,c!W7JK71
6N0:%5_21O5_21O5c6mH6/t<,6iKOR7fGpW8cDB^:&[rf;Z9\q>5he+@/ad;C]88OFT-UcJ,Y3%MuJh;
RJriXV#IRs[/RZ9_>_IRbl6&ifDaP(hu;[8kPjiImf)bUp&=[cp]:0brql]mrr([Qh>dKQrqucmrqQKe
rq??]rpTjQroj@Cro*k3rn.5!rltG_rkeZIrjMg0rhf[frgWnLrf-o5rdauprc\9[rbVRIraGe4r`fA&
r`&kor_EGdr_!/\r^ZrWr^?WNj$NW/fg(*RJO"cOJO$5#r^#I/r^6QNr^QlWr^d#\r_*5cr_`Yor`9#&
ra,S4rb2:Hrc%j[rd4WpreUQ5rfR2Lrh07fric=/rk/6IrlG)`rmUkurnRM3roO.Crp9XPrpg!]rq?Ef
!VlHhqu6NmrS@M0s8Murr;QTmq>U0gpAXU]n,D_Rkl0]CiVq[4f`'A!cMkrb`;[IL[f3N1W;`RkT)OrQ
O8b%9Jc:)sGlD[]D#S/J@fBa6>lIh(<W5kp:]=&e9E%K]8,c!W7.iq-6J4VT5_21O5_22#5i>!+6i0:N
7fGpW8H)9]:&[rf;>sPo=8lJ(?iFO6C&VuKE;k+]I/\]rMZ/Y8PQ%0QUAh+jYl;-2^&GtLao9Tbe,J#!
h>ZC4jo4KCmJcSRnc&7]pAk!iq>($erqucoh>c=2qu-NlrqcWhrqHE`rpg!UrosFFro="7rn@A%rm:Yf
rl4rPrji$7ri?$orh'1UrfR2>re19#rd4Wbrbh^Nrac":ra,S+r`9"sr_WShr_3;_r^d#Xr^HfSog@b+
r^#F,JO"cOJO"cOYX&1Rj$NE+r^?`Sr^QlWr^m)_r_<Agr_resr`K/+raGe:rbMLOrc8!brdb!$rf-o?
rg*PUrh]Uprj2U7rkJHPrlb;frmh#$rndY7roX4ErpKdTrq$-`rqQQj!W)Zir;QZNs5!_Srr2lqr;QQl
q#:$eo`"C[mf)MNkPjN@hu;@/fDa.rbl5Z^_#CqE[/R0+VZ*7fR/W<KO8ak4Jc:)sF8g.XD>n,G@fBa6
=oMM%<;o_n:B!rd9)_BY7fGjU7/0.06Mj(.5_21O5_21O5dN`T6/Y*)6iKLQ7JfRR8H)6\9`@fd;#XGn
<rQ8$?iFO6Ac?QGE;jqXIK"fsL&R/4PQ$sKT`1hfXT#U+])KMEa8X<^d/MYrg]$+0j8S6@lMg5Nnc&1[
p\ssgq>pHhrqucorr1aRh>dKRrr)iorqcWhrqHEarpp'Wrp9XJroO.;rnRM+rmC_irlP/Urk/6=ric="
rhBC\rg!JDreUQ+rdXoirc8!Vrb)4@ra>_1r`K/"r_`Yjr_<Aar^d#Yr^QlUr^?NKh*U*dJO"cOJO"cO
ZU!>5pd>$Kr^HfUr^ZrZr_!/ar_NMjr`/r"r`oG1rac"@rbqdVrcS3ire(3+rf@&CrgNh\ri,n#rjMg=
rk\TUrltGirn7;,ro!e;roj@JrpTjWrq-3arqQQj!W)Zlr;QZorn[V1s8N#prVlZmq>U0go`"F\n,D_R
l2KlFi;VR3g]#\$d/M8g_u@FM\c/i4X8]!qT)P,VP5^C=L&QT$H2_pbDuOPOB)Z9=?N+1.=T27u;>sAj
9`@Z`8cD3V7K,^J6e=[(61I3k5_21O5_22;5lO(!6Mj.I7/fXP7fH!Y9E%Wa:]=5j;uTnu>5hk-@fC$>
C]88OFT-RbJ,Y0$MuJn=R/W]VVZ*XqYl;34^Ac%Lbl5rfe,J,$hYuI4kPjcGmJcSRo)A:\q#:'hq>pHh
rr)`nh>c=2rr2fnrqcWirqQKcrq-3[rpKdOroj@@rnm_1rmh"qrltG]rkSNFrj)O*ri#ghrgNhNrf$i3
rdt,rrc\9]rbVRIrac"9r`oG*r`&kpr_NMfr_*5_qa^WTr^?EHf0]I&nN_XjJO"cOJO%(;r^#%#qa:6K
qaUQTr_!/_r_<Afr_i_pr`T5*ra>_9rb2:Irc8!^rd4WrreLK3rfmDNrh07hriZ7+rk&0Frl+l]rmC_q
rnRM1ro3q@rp'LNrpg!Zrq69crqQQj!W)ZlrVQTMs5!_SrqlZnqu6Hkq>U*eo`"C[n,DYPkl0WAi;VR3
f)F+sci1ua_u@CL[/R9.WrA^kSGniRO8b"8K`6H"H2_maDuOMNB)Z3;?2e%,<W5qr;#X5h9`@Z`8H)-Y
7fGjU7.iq$6N0:@5_21O5_21O5f,ec6/"Zu6iKLQ7K,dU8,c'Y9)_K_:B")h;uTer>5hh,@/ad;CAr/N
F8gF`If>$"MZ/\9QN!ERU&M(kYPtp.^Ac"Ka8XEae,Iqth>Z@3j8S9Ali-APnc&1[pAXmeq>gBnqtpBk
qu5FOgAh0Orr)iorql]krqHEbrpp'XrpB^NroO.=rnm_.rmh"orlb;[rkJHCrj2U,rhTOcrgWnLrf-o5
rdauqrce?\rb_XLraYq8ra#M*r`/qqr_WShr_3;_r^d#Yr^QlUr^?<Ed6ddsJO"cOJO"cOc9TZAogA^H
r^HfUr^ZrYr^m)_r_<Agr_i_rr`K/*ra>_8rbDFKrc%j\rd4WpreUQ5rfR2Lrh07driZ7,rji$Crl+l[
rm1Snrn7;.ro3q=rp0RNrp]pXrq69brqcWk!;llqr;QZorn@D+s8N#srVl`oqu6Hkp\smco`"@Zmf)SP
k5OE?i;VL1f)F+sbl5Z^_Z%1H[JmB/VuEChSc4lQO8b(:K)U5uHN%saDZ4GNAc?0<?iF4-=8l5!;>sAj
:&[ca8cD9[7f,XR7.ipp6N'4J6%M:U5_21O5hA9r6-_go6i0:N7JfRR8H)3[9)_Qa:]=5j<W6)!=oMe-
@fBs<C]88OErLCaIf=ruMuJh;Pl@6QUAh(iYPts/]Df\Ha8X<^df.ktg]$.1jSn<@m/HGPnG`(Zp&=^b
qYp?lquQ`nrr)iqgAfn,rr2oqrqucmrqcWgrq??`rpg!Vrp9XIroO.<rnRM*rmUkmrlP/Xrk8<?rj)O'
rh]Udrg3VIrf6u2rdaurrcJ-Zrbh^Jrac"8r`oG*r`9"rr_WSir_*5_r^luWr^QlTnjCbjr'Gs"L-U;T
JO%gPb<kkhqaC<Nr^ZrZr_!/_r_NMjr_i_rr`K/)ra5Y7rb)4Jrc.pZrdFcsre192rf[8Irh'1cri5t'
rj_s@rl"fYrm1Smrn%/)ro*k;roa:IrpKdUrq-3_rqHEgrqc]n!W;lprVlfMs4@;Mrr2lqr;QTmq#:$e
pAXX^nG_kTl2KlFj8Rs8gA]\&d/M8ga8WmR]Df5;Y5YC!UAg\^QN!!FMZ/>/J,X`mFT-4XC]7uGA,]j7
>Q.e)<W5nq:]=)f9`@Z`8cD9X7fGjU7.N^r6L[>@6%M:d5_21O5it?26,Gt]6iKLQ7JfRR8,c*Z9)_K_
:&[rf;Z9\q=oM\*?iFR7BDu]GDuOkXH2`<mK`6l.OT(RFSGo8^W;`t![Jmc:_#DCRbPolff)FG'hu;[8
k5OWEmf)_To)A@^p\ssequ6Knr;llqqu5=LfDkjLqu-NlrqZQgrq??_rpg!Vrp'LGroF(:rnRM+rmC_j
rlY5Wrk8<@rilC&rh]UcrgEbLrf$i3rdt,rrc\9]rb_XKrau.;ra#M-r`B(ur_WSir_3;ar_!/\r^ZrW
qaLKPog@:sn3[+?JO#JcJO"cOk!8o3_F",eqaCEPqaUQTr^m)]r_*5br_NMir`&kur`fA.ra>_;rb;@K
rc8!^rd4WrreLK3rfd>Krgs+cri?%&rj_s@rkeZWrltGirn7;+ro!e:roj@HrpTjVrq$-_rqHEfqtpHm
!WDuorn@D(s8N#prVl`oqYp9hp\sgao)A+Wm/H8Kk5O<<h>Z.-e,I_nc2PZ\^](kEZMq!*WW&RiS,S]P
O8b"8K`6K#H2_scE;j\QB`;K??iF@1=T2>";uTVm:B!rd9)_E]8GG[R7-m:u6L[>@6%M:d5_21O5it?2
6-DUc6i0:H7fGsX8cD?]9`@fd;#XDm<rQ5#?2e72@fC'?D#SDQFoH^dJ,Y-#MZ/\9Q2[9PT`1qiY5Ya+
]DfVF`;\$\d/MMngA]q-i;Vm<kl0rJn,DnWo`"Uaq>U6fquHZrrVcWmgAf\&qu-NlrqcWirqQKcrq$-Y
rpKdOroj@Aro!e3rmq(srm1Sbrkn`MrjMg2riQ0prh07\rf[8@reg]+rdOinrc8!Vrb_XHraYq7r`oG*
r`B(sr_WSir_3;ar_!/]r^d#Yr^QcRr^?*?kX*fdr]u*#YX!b)JO'3#\O,jSqaCEPqaUQTr^d#[r_!/_
r_3;er_`Ymr`B)%r`oG0raYq>rb_XRrc8!brdOitreg]8rf[8Nrh'1briQ1*rjMg@rl"fWrm1Smrmq))
ro!e9roj@HrpKdTrq$-^rqQKgrqcNi!;ursrRCkss8N#srVl`oqYp<iq#:!do`"C[n,DYPl2KcCiVqa6
f`'D"d/M5f`r<gR])K,:YPtL"U]-kaQN!$GNW+V1Jc:,tG5cR^DuOJMAc?0<?iF:/=oMG#;uTVm:B!rd
9E%Q_8cD9X8,c!T7JfLG6g-ke6@hG)6%M=Q6+0,W6hNkH7JfRR8,c'Y8cD?]9E%Wa:B")h;uTer=oM\*
?iFO6B)ZNDDuOhWG5csiJc:?%NW,+?QN!KTUAh+jYPtp.])KPF`r=0\d/MSpf`'e-ir8$<l2L&Kn,DkV
o`"R`q#:*gqYpElr;cftrr1FIeGoOIqu-NkrqcWirq??`rq$-YrpB^NroO.>rnm_0rmq(srm(Mbrkn`L
rj_s5riH*rrh07Zrg!JDreUQ,rdXomrcS3[rb_XJral(:ra#M-r`9"tr_remr_NMgr_*5_r^m)[r^ZiT
qaLKPgdD!,JO5)XJO4oSf0\1YqaCEPpdY6Qr^d#[r_!/_r_EGgr_WSmr`/qur`fA.ra>_:rb;@Krc.p[
rd"Kmre(3+rf@&CrgNhZrhf[rrj)O5rkABLrlG)armLetrnIG0ro3q=rp0ROrp]pYrq69arqZQirql]n
rVcisrm^tts8N#prVl`oqu6Hkp\smco`"@Zmf)VQkl0]Cir7g6gA]Y%d/M8ga8WmR]`,D>Yl:^&VZ*4e
Rf8TONrFn7K`6K#HN&*eE;j_RCAqcC@K'X5>Q.e)=8l+s;#X8i:B!ue9`@Z]8cD9X8,,RK7INYC6\.UU
6\.UU6dA'f7/04G7fGpT8H)3X9)_N`:&[oe:]=5j;Z9bs=oMY)?iFO6AH$?CD#SDQG5cjfJ,Y-#M>iP7
Q2[6OTDk_eX8]@&\,O#=_#DCRbPolfec+8$hYuO6k5OTDmJcSRnG`(Zp&=^bqYpBkr;QZnrW3#teGn%u
rr2fnrqucmrqcWhrq??arpp'XrpKdMroa:Aro!e2rn.4urm(McrkeZKrjr*7riZ7#rh9=^rgEbIrf$i5
rdk&trd+Qbrc%jRrb)4AraGe5r`fA)r`9"tr_i_lr_EGer_32^qapcXpdb*KlU?@nJOP,YJOR4?pdY$K
qag]Xr_*,^r_<Afr_WSlr`&ktr`T5*ra5Y5rac"@rb_XRrcA'brdFcsre^W6rfI,Irgj%^ri5t#rj)O7
rkABKrlY5crmLeurnIG1roF(ArosFMrp]pXrq69brqQKhrql]mrr)fp!WN)Js3^lGrqlZnr;QQlq>U0g
pAX[_o)A+Wm/H8Kk5O<<h>Z.-eGdkpcMkf^_Z%:K[JmK2Y5Y6rT`1M]PQ$[CNW+V1Jc:,tG5cR^DuOSP
B`;QA@/aL3>lIk)<rQ+u;Z9Pm:]=2i:B!rd9E%QY8cD9U8*`Wq7Y+$[7Y+%A7efLN8Gc!X9)_K_9`@cc
;#X8i;>sJm<W6)!=T2S)?N+@3AH$6@D#SAPF8g@^If=otK`6u1OT(ICSc5>^V#IOrZ2V01^AbtJ`W"0^
dJhYpgA]q-i;Vm<kl0rJn,DkVoD\I_p\t!fqYpBhrVlcrs3gqms8N#prVl`oqYp9hp\sgao)A+Wmf)PO
kl0ZBiVq^5f`'D"ci2,e`W![P]Df8<Z2Ug'V>d.eS,S]POT(1;LAlc'IK"KjFT-7YD>n;LAc?3=?iFC2
>Q.e)<rQ(t;uTYn;#=&f:B!ue9`%KX9'](B8V'Ek8:a<_8D6Vp8bbpW9D_E^:&[ob:]=2i;>sMn<W6%u
=oMY)?N+=2@fBs<CAr&KE;jtYH2`6kJc:E'MuJh;QN!BQT`1hfX8]C'[f3o<_#D@QbPoieeGe,"hYuL5
jSnBBlMg5Nn,DnWo`"Uaq>U6fr;QZlrW)uHs3CZDrqlZnr;QQlq>U0gp&=U_nc&"Vli-/Jjo4<>hu;C0
fDa7uc2Pf``;[LM])K,:Y5YF"V#HtbRJrHMNrFq8LAl`&I/\EjErL"VD>n5JB)Z??@/aL3>lIk)=8l8"
<;ohq;Z9Pm;#X8i:A[c\9^>@F97]]o8qBTc9%lnt9DD3[:&@]b:]=2i;>sJm;uTbq<rQ2"=T2S)?N+@3
AH$3?B`;lJE;jnWH2`3jJGt<&MZ/Y8Pl@*MT)PPbWW'("[Jm`9^Ac(Mao9Qae,Itug]$+0ir8'=l2L&K
n,DkVoD\F^q#:*gqYU3irVQQos3gqms8N#mrVlZjq>U*eo`"I]nG_hSli-)Hjo46<h>Z+,f)F%qbl5]_
_#D"G\Gi`3XT#0tT`1J\RJr?JNrFt9KDpE#IK"BgF8g+WD>n8KBDuB>@/aO4>lIq+=T2A#<W5ts;Ys>g
;#X8i;#=&f:@:jS9n>um9S#lg9\2u):&@]_:]=2i:]!uf;>X8j<;ons<rQ5#>5he+?iFL5@fC$>CAr)L
DuOeVFoHggJGt3#MuJb9OoCdJSc5;]W;`mtYl;03]`,_GaSsE_d/MVqg&Bh,iVqp;kPjfHmf)_ToD\F^
pAXmbqY:$drW)uHs3(HArqlZnr;QTmqYp6gpAX^`nG_nUmf)MNkPjQAi;VO2g&BG!ci22g`W!aR^AbS?
ZMq',VuEIjTDk5WPQ$XBMZ/A0Jc:,tHN&-fEW0nUD>n5JAc?3=@/aO4?N+1.>5h\(=T2D$<rQ+u<;oed
;>sAj;"mb::Ou;m:Ou<_:]=2i:]=2`;>sJm;uTer<rQ2"=T2J&>5hb*?N+=2@/a[8B)ZKCD>nJQEW11]
HN&BmJc:E'MZ/\9Pl@'LTDkVbVuEn!Zi7E4^AbtJ`W"-]d/MJmg&Be+i;Vg:kl0lHmf)\SnG`(Zp&=^b
qYpBkr;QZlrqcZCs3(HArqlZnr;QTmqYp9hpAXaaoD\:Zn,DYPl2KlFiVqa6h#>n(e,I\mao96X_#CqE
[f3Q2X8]!qUAg\^R/W<KNrFq8L]2l(If=]nFoHI]DuOSPC&VcEAH$';@/aO4?2e+.>5h\%=T2D$<r5no
<;TVd;Lq_s;Lq_s;T2Q5;tX,h<W6%u=8Q,!=oMV(>lJ%.?iFI4A,^$<BDuWED#SAPErL4\HiAKnJc:H(
MZ/Y8PQ$pJSGo8^VuEarZ2V01])KME`W"!Yci2Dmf)FJ(hYuL5kPj`Fli-APnc&.Zp&=^bq#:-hqu6Nm
rVQTjs3gqjs8N#mrVl`oqYp<iq#:$eo`"F\n,D_RlMg#Hj8S$:hu;:-ec*tqc2Pf`_u@CL\c/u8YPtR$
VZ*7fSGnoTOoCC?MuJD/Jc:/uH2`!dF8g.XDZ4JOBDuNBAG]g4?iF@1>lIt,>5MG!=8l7g<VBFD</ae-
<.S$&<9[E[<rQ1q=T2J&>Q.n,?2J".@/aU6AH$0>BDu`HDZ4VSF8g@^H2`<mK)UH&MuJb9OoCaISGo2\
VZ*UpYPtp.\c0>B_u@aVc2Q,iec+5#hu;U6j8S9AlMg2Mn,DnWo`"Uaq#:*gqYpBhrVQTjs3gqds8N#p
rVl`oqYp<iq#9sco`"C[nG_hSli-)HjSn*:h>Z+,ec*qpc2Plb_Z%=L]`,;;Yl:d(V>d4gTDk8XQ2ZmE
N;eY4KDpE#IK"TmFoHI]E;jeTD#S5LB`;WCAH$';@K'X5@/aO1?N+70>jknq>4YpK=cZ^:=b0`6=moP_
>Q.n,?2.b*@/aO4@K'a8AH$3?B`;fHD>nJQE;jqXFoHaeIK"crKDpZ*N;eq<Q2[3NTDkSaV>dUrZ2V-0
]`,\F_Z%^Wbl5ugec+8$h>Z@3jSn?Ali-;NnG_tWoD\F^q#:*gqYU3irVQTgs3gqds8N#prVl`oqYp<i
q#:!do`"I]nG_kTmJcALk5OB>hu;C0f`'A!d/M;h`r<jS^](eC[JmE0WrAmpUAgb`RJrHMOT(4<M>i/,
Jc:/uHN&-fFoHC[E;jeTC]8)JC&VcEB)ZB@A,]s7@K'[0?hIb(?1qQT>`;p=>_-/6>kMCn?Me+/@/FC3
@fBm:Ac?<@BDuWECAr#JDuO_TEW1+[GlE$gJ,Y#uKDp`,N;eq<Pl@*MT)PJ`VZ*UpYl;'0\c0AC_u@[T
c2Q)he,J#!g]$+0ir8*>l2L)Ln,DhUoD\F^pAXjdq>U6fr;QZlrqHH@s2G$;rqQHkqu6Hkq>U-fpAX^`
nc&%Wn,DVOkPjTBiVq^5g]#e'e,I\mb5TE[_>_1J\c/r7YPtR$VuE@gSc5)WPQ$^DNrFk6L&QZ&JGsur
HN&'dFT-=[E;jbSD>n>MCAqoGB)?0=AG]m9@e*t+@"D^:@"D^:@*W0Q@JaO5A,Bg9Ac$*=B`;`FC]82M
DuO_TErL.ZFoH^dI/\ZqJc:B&M#NG6OT(ICRf8lWT`1kgX8]=%Zi7K6^AbtJ`W"$Zci2Dmf)FG'hYuL5
jo4KClMg8OnG_tWo`"O_p\t!fqYpBerVQTgs3gqas8N#prVl`oqu6Hkq>U0gp\sgao)A+Wmf)POl2KfD
ir7j7gA]_'eGdhobl5]__>_4K]`,;;Z2Up*W;`UlTDkD\R/W?LOT(7=MZ/>/KDU/tI/\HkG5cU_F8g.U
Du4DND"qcBC&Vf<BDcEAAq=NMAV"EDA_gqpB('C0B`;`@CAViHD>nJNE;jqXFoHR`HN&<hJ,Y'!L&Qu/
N;eq<Pl@*MSc58\V#I=lY5Y^*[/R`;^AbtJaSsB^d/MPof`'V(hu;X7jo4NDli->On,DnWo`"Uaq#:*g
qYpBkr;QZlrpg$:s2+g2rr2ipqtp6hq>U0gp&=U_nc&%WmJcGNkPjTBiVq[4gA]b(df.PkbPoK[_Z%=L
\c0&:Z2Um)WW&doT`1M]Rf8QNOoCC?MZ/G2LAlf(JGt#sHiA<iGQ)aaFT-@\EW0qVDuOYID>nADC]%t!
Bng>QBn:!MC%#j7D#8)HDZ4SRE;jkVF8g:\FoHUaH2`0iIf=lsK)UN(M#N;2NrG1?Pl@-NSc5;]VZ*Ro
Xo>U)[Jm`9^])+L`W"'[ci2Alf`'V(h>ZC4jSn?Ali-;NnG_tWoD\F^q#:*dqYpBkr:p9]s3gq[s8N#s
rVl`oqu6Hkq>U0gpAX^`oD\7Ymf)SPkl0`DjSn*:h>Z.-eGdnqci2)d`r<gR^Ab_C[f3N1Xo>C#V#I(e
TDk;YQN!'HOT(7=MuJJ1K`6T&JGt#sI/\HkH2`'fFoHL^F8g4WEV4;FDu=O)DME%[DLl]WDY7r=E;jkS
ErL.ZFT-F^GlE!fHN&<kIf=lsK)UH&LAm,1NW,%=P5^gIRf8rYUAgtfX8]:$Yl;*1\c0>B_>_FQb5T`d
df.bqgA]q-i;Vg:k5OTDm/HGPnG`%Yp&=[aq#:*gqYpBkr;QZlrpKg7s1JC2rqQHhqu6Hkp\smcp&=O]
nG_nUm/H;Lkl0WAiVqa6gA]\&df.Vmbl5``_u@LO^AbYA[/R</Xo>=!VZ*7fT)P8ZQN!-JOoCIANW+k8
LAll*KDpH$JGt&tIf=cpI/\KlHN&3bGlDm\FTHW-JTQNdJTQHbd<,8.qf_aZrd"Khrd4WlrdFcprdXot
rdk'$re:?+repc8rfI,ArfmDJrg`tZrh07fri,n!rilC0rj_sArkSNNrlP/`rm:Ymrn%/'rnm_6ro="A
rp'LLrpTjVrpp']rq??cqtg<hq#1*hmf1`8]`7m.qu-Nlrql]krqQKerq??_rpp'XrpKdOrosFEroF(;
rn[S,rn%.trm1Sgrl>#VrkSNGrji$:rilC(ri?$qrhKIbrgj%Wrg<\Lrf[8Arf-o7reUQ.re:?)rdt-#
qgeZqrdOWiqg80cJU2lnJU2lnaEmi4pjE'irdXfqrdk'#re19)reCE.reg]7rf@&ArfmDLrgNhWrh'1b
rhf[qriZ7)rjMg9rk/6Grl"fVrltGhrmLetrn@A-ro*k;roX4Erp0ROrp]pXrq$-_rqHEerqcWkrquco
p&=CZdf6lXrr2fnrqucmrqcWirqQKerq-3]rpp'XrpB^Nroj@DroF(:rn[S-rmh"srm1SgrlG)XrkSNH
rk&0:rj)O,riH*trh]Ufrh'1\rgEbPrfmDErfI,>rf$i7reg]2reCE+re19'rdt#upji?nrdXuuJU`6#
JU`6#d=;.GrdXTkrdk'#re(3're:?,reUQ2repc7rf6u=rfR2Erg*POrgj%\rh9=fri#gtric=,rj;[:
rkABIrl+lYrltGgrmLerrn@A-ro!e:roX4Drp0ROrp]pXrq$-]rqHEerqZQirql]mrr)`nkl9*2\c;I(
qu-NlrqcNfrqHEcrq-3[rp]pUrp0RKroj@Aro*k6rnIG*rmq(qrm(Merl4rTrkSNIrjr*<rj)O-riZ7#
rhoakrh07_rgs+YrgEbOrfmDGrfR2Arf@&=qi1T6pko',qhP-)JVJ`1JVJ`1cA)=RqhY$)qi(N6qi:Z;
rfR2DrfmDJrg<\Srgs+]rh07drhoaqriZ7)rj)O4rjr*CrkSNOrl4r]rm(Mirmq)$rnIG0ro*k:roj@G
rp0RPrp]pWrq-3_rqHEfqtg3frr)Wkkl9*2\c;I(qu-Nlq"k!brq??arq$-[rpTjSrp0RJroX4@ro*k6
rnIG*rm^qprm1SerlP/Zrk\TKrk/6?rjDa1ric=&ri5sprhTOfrh07^rg`tVrgEbQrg!JIrfd>ErfR)>
rf?r:pPf35NId%@N.Hq=N7!U]NV/>/OSb4?PQ$gGQ2[0MRJrZSSGo,ZT`1\bV#I7jWrB+!YPtg+[Jm]8
]`,YE_>_IRaSsB^ci2AleGe/#h#?41iVqp;k5OWEli->On,DkVoD\F^p\ss_qYU3irV6BUs3gqRs8N#m
rVQKkqYp9ep\sgao)A1YnG_hSli-,Ik5OKAi;VU4h>Z%*ec+"rd/M;hbPoK[_u@FM^AbbD\Gii6ZMq',
Xo>@"W;`UlUAgkcT`1P^SbnoURf8]OQi<9LPkC7>OoUX9Ob&UTOF`LEOPl5nOo(=7PQ$gGQ2[-IR/<?O
S,SuXTDkM_U&LhdV#I=lWrB."YPtg+Zi7K6])KGC^])+L`W"'[c2Q)hdf.erfDaV*hu;R5jo4HBkl0oI
mf)_Tnc&.Zo`"U^q"speqtU-eroO1.s02P&rqQHkr;QTmqYp<iq#:$epAX^`nc&%Wn,D\QlMg#Hjo4<>
i;VU4g]#n*eGdnqci25hbPoT^`;[UP^](nF])K5=[/RB.Yl:g)XT#0tVuERjU]."eT^n`MSc,)JS:R/m
Rt7&[S*$4)SG8ZJTDP;YUAgqeVZ*LmW;`mtXo#@%Zi7?2\Gj)=]`,\F_Z%LQaSs?]cMl/hdf.bqg&Bb*
hYuI4j8S0>kl0lHm/HJQnG_tWo`"O_p\sseq>U6iqu6NjrVQTOs3gqOs7lTjrVl`oqYU*fq#:!dp&=R^
o)A.Xmf)SPlMg#Hk5OH@i;VU4h#?"+fDa>"dJhJkbl5``a8X$V_#D+J^Ab_C\Giu:[/RB1Yl:j'Xo>?t
WW&gpVY-e\U]-tfTn/ngTn/ngU"#e5UA1MVV>d@kVuE[mWrB."Y5YX(Yl;!.[/RQ6\c02>^AbnH_#D:O
`r=*Zbl5oedJh\qfDaJ&h#?10i;Vg:k5OTDlMg,Kmf)_To)A7[p&=^bq#:*dqYU3irV6BLs3gqIs8N#m
rVQKkqYp9ep\sgaoD\=[nG_nUmf)MNkl0`Dir7p9hu;L3g]#k)eGdnqci25hbl5ca`W!gT_Z%@M^AbhF
])K5=[emE1ZMq**YPt^(Xo>EsX8]-nW<&utJZ+4"JZ+-udAZrAql9FlriH+$riZ7(qlot'rj2U4rj_s=
rk8<GrkSNMrkn`SrlY5`rm(MhrmLeqrn.5(rndY3ro*k9roX4Drp'LNrpTjUrpp'[rq-3aqtU'brqlKh
qu5CNdf66Frr2]krqucmrqcWirqQKerq??arpp'XrpTjSrp9XMroj@DroF(:rnm_3rn@A(rn%.trm:Yj
rm(MerlY5[rl+lTrk\TLrkJ?Drk/6@rj_s:rjM^3rj;R/os+S&o<EkNO0F2>J["(:os+(nrj2L/rjDX3
rjVm:rjhp=rk8<GrkSNLrl"fTrl4r[rlkAerm1SkrmLetrn7;)rndY3ro!e:roX4Drp0RNrpKdSrpg!Y
rq69arqHEerqZQirql]mqu-Ekf)O1uVuQPkqu-NlrqcNfrqQKerq??`rposUrpKdQrp'LHroa:Aro3q7
rndY0rn@A'rmh"srmC_lrm(MdrlY5^rl4rVrl"fQrk\KHqn<!Ark&'=qmlC0!4V@)J[UiPJ[U-<j0nNf
o!n\0pq$I:rk/6DrkA9Erk\TNrl"fTrl4rZrlY5`rm(MhrmC_ormh#"rn@A+rndY3ro3q<roa:Frp'LM
rpK[Qrq$-]rq??crqQKgqtg3frr)Wkf)O1uU&Y,kq#1*erqcWirqQKerq69_rq$-Zrp]pUrpB^NrosFE
roF(=ro!e5rndY/rn7;&rmh"trmLemrm1ShrlkAarlP/Zqo/HMrke?DqnN-EpV#t-J\78\J\6QHj1OWi
qnE'Eo"b.>rkn`Sqo8WWrlb;brm(Mhrm:YmrmUksrn%/&rnIG/rnm_5ro=">roX4Erp0RNrpTjUrpg!Z
rq-3_rqHEerqZHfrqlKhqu5(Edf5p=rr2]krqucmrqcNfqtL*`rq-3\qsaURrpKdOrp'LHroX4@ro3q8
rnm_3rnRM,rn7;$rm^qrrmC_lrm1Shqp##]rlY5^rlFlTrl4iSqS^q&J]"V-J]!&VaMe(sqo8NRrlG)\
qo\o]rlt>crm1SjrmC_orm^qtrn7;*rnRM0rnm_5ro3q<roX4DrosFJqsO@Nrq$-]qtC$`rqZHfrql]m
qu-Ekc2Z5lT)\Tbqu-NlqtpBhrqZQgrqHEbrq-3]rpg!WrpTjRrp9XLroj@EroX4@ro3h5rndY0qq:u$
qpk\qrmLenqp>>grm(Dcqonr\oZI!Pg<"oeYfMC:J]Ri3i5t6+rlauYrlt>cqp>5gqpbVqqq1o$rnRM/
qr%J6roF(@roa:Erp'LKrpB^Rrp]pWrq$-]rq69brqQKgqtg<hqu$Hlq#8P<df5^7rr2]krqucmqtg<f
rqQKerq??arq$-[rpg!WrpTjSrp0RKroj@DroO.?ro3q9qqq;,rn@A)rn.5$qpkSmrmL\kpsB#drm:Dc
p<S<8N6[""J^2upn'D![rm18armCVkrmUksqptc!rn7;)rn[S1qqqD3ro3q<roO.Aroj@Grp0ROrpTjU
rpg!Yrq$-^rq??crqQKgqtg<hrquQiqu4b<df5U4rr2ThrquZjrqcWirqQKerq??arq-3\rpg!Vrp]pT
rpB^Nrp'LIroa:CroF(<ro*b4qqq;,rnRM,p"B>srn%/#n^RZje`kS7e!ng;dt-!:e)SsKec+/!fDF4t
g&'M#h#?.,htu@/ir8$<jo4HBl2KuIli-;Nmf)_Tn,DkVo)A:\p&=[ap\sseq>:$fqtp<grVQT4s3gq4
s7QBjrVQNiqu6Hhq>U-fpA=O^o`"I]nc&%Wn,)MOm/H;Ll2KoGk549;j8S';i;;F,h>Z4&g]#q!g#Uh;
fUg`HfR_]Af\5$UgABY%h"]_)htu@/ir8!;jnn3>kl0iGlMKrImJcSRnG_tWoD\CZp&=[ap\t!cqYpBe
r;QZfrl"ibs,[3Wrq66hr:p-fq"sgbpAXaao`"I]o)A1YnGD\RmJcJOlhfrGkl0`Ajnn*;iqq^0i;VX5
i;;F,hYl8]h1=C5h1=D-h>#k(hu;R5ht>q,iVVX6j8S0;k54BAl2L#Jm/HDOn,)VRnc&+YoD\C]p&=[a
p\Xa\qYU3frUp0+s3gq%s8N#mrVl`lqtU$eq"sgbpAXaao`"FYnc&%Tn,DbPmJH5KlMKiFkkjQBk4Rg.
j8.d5idp'CiITs=iRd&Ziqqd,jSS*=kPOKBl20cFli-;Kmf)\PnG_tTo)A:\p&=[ap\Xa\qYpBhr:p6f
rj`!Vs+^RHrqQEgqu6Heq>U-fpA=O^o_\7Zo)A1YnGD\Rmf)VNm/H>JlMg&=kkjQ8k5=@mjbDlJjalOF
jmV@2kO7X6l20cFlhg&JmJcPQn,)VRnc&+VoD\CZp&=[ap\=R]qYpBer:9iss3gq"s7lTgrVl`lqtU$e
q"XU_pAXaao_\7Zo)%tSnG_nUnG_nUmecDEm.fl<klL&5J`qaMJ`q[KdHL8fq!.G:rpBUNrp]pUqsaUT
qssaXqt0m\rq?6`qtTs_rqlTjq#1!eZN&AQJcGTHq#:'erquZjq"jm`rqQ9_rq?6^rq-3]rposVq!e:O
rp]LIo^7:uJaS*WJaUMFo'cSIrpTOLrpg!Yrq$-]rq60^q"O[\rqZ?crqlTjq#1!eWW1EHJcGTHn,E+[
q"t'eo(i(Tq"=FSq"+1Lqsj=JJae6[Jae6[`UNlso()SIq"4@Sq"OIWqtg*bq#'U[WW1EHJcG9?q#9j_
rquZjp%nR]rqQ9_q"FUXo(;AA!V>o6nq6Lanq$AZo()D=o`"OYpA"CZq#:*[qYpBhr:U$`rh0;>s+146
s7QB^rV6<fqt9g\q=saEp\+?4p5J]rp4;qkp=f99q"X[UqYpBer:U$Zrg3Z5s+146s5s=Rr9X=[qUt]<
q18="pjr3kptGMjq>:$Zqss[Irg3Z5s+14's7QBUrVQN`qr7I'qLSKoqLSLLqXsaYr9XCQrepg)s+13g
s6os6r;llqJc(/uJc()sdJVDjn,@n<oDd8=JcE[g^]"63Jc1/uJc1/ueG[&ZJcG?Adf4muRfDUNJc:6"
Jc:6"[f1jXbl?,kJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$
df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$
JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0u
JcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$
JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muRfDUNJc:6"Jc:6"[f1jXbl?,kJcE%Um/H,FJc1/uJc1/u
\c(dlJcF^/df4mu`;f<*d/="DrIOm!r.4csr6bGirU9`:s7?9=s+14's7QBUrVQN`qr7I'qLSKoqLSLL
qXsaYr9XCQrepg)s+14*s8N#arUp*cqsXC@pjr3kpjr3kpp9baqYpB_r9XC]repg)s+146s7QB^rV6<f
qt9g\q=saEp\+?4p5J]rp4;qkp=f99q"X[UqYpBer:U$Zrg3Z5s+14?s7lTarVl`lqt9g_q>U0ap\=IZ
p%%bCo)\ISJb"HaJb"B_dIQl"m.C;Mq"FLWqtU0do(r@_qu$-cq#6rddf4munc/1Yqu$?grqcNfp%\O\
qtBp[rq,mTp%%G=!V,]2n:U4]n:C)VnEf]9o)&%Uo`"OYpAXgZq#:*dqYpBbr:U#]s3gpus8)cjrqQHk
r;6BdqYU*fq"XU_pA=O^o`"I]o)%tPnG_nUnFH&?mXaeWmXaeWm`"Vbn,DhUn+H2Lnc&+YoD\C]p&"IX
p\Xabq=sgcqtp<drV6Aks3gq"s7lTgrVl`lqtU$eq"XU_pAXaao_\7Zo)%tSnG_nUnG_nUmecDEm.fl<
klL&5J`qaMJ`q[KdHL8fq!.G:rpBUNrp]pUqsaUTqssaXqt0m\rq?6`qtTs_rqlTjq#1!eZN&AQKE(N@
rquQgqt^6dqtL*`qt9s\rposVrp]gRq!IkBq!%S;o&oo4!9JdnJ`VIEJ`YDCp#br1puqM;q!7_BrpTaR
rpfmVqt0m\qtC$`qtU0dq"ssdp&22rdf5(%rr2]krquZjq"k!bqtL*`rq69_rposVrp]gRrpK[Nqs47H
qs"+Dqrdt@p#Pf+qVqG4J`2@BJ`21=fAZ;[qr@8.qr[n@qrn%Dqs+1HrpBUNrpTaRrpfmVrq-3_rq??c
qtTs_rqlTjq#1*h\Gt"WO8o+Vp&4mfq"k!bqtL*`rq69_rq$-[rpg!WqsXOOrp9XMqs"+DroX+>qr@\8
qr.>.rnm_5qqq2*rS<%\J_bn5J_eW-ptko*ro!e5p#,i.qr7V8roO%>qrn%Drp0RMrpB^RqsaUTrpp'[
rq-3_rq??cqtTs_qu$?ip&;f-df5L1rr2ThrquZjqt^6dqtL*`rq-3]rpp'Yrp]pUrpB^Orp0IGroj@D
qrR_8ro3q8qqqD0rn[8&n(R`n!SQ.WfRqh-fR_]&f`'Rmg@a8#h>Z:1htu@/ir8!;jnn3;kl0iGli-8M
mJcSRnG_tWo)A7[o_\@]p\Xabq>U9gr:U$frk\W_s-<W`rq66hr;6BjqYp<iq#:$epAXaao`"F\nc&"V
nG_kTmJcGNlMg&IkPjWCjSn0<iVVR1htu7/h#?%#g&BY'fDa@keH+4Nl-t:5S'ur;J^a):j4*YMrmq)#
qq1f!qqCr&rn[J/qr%A2roF(?roa:Frp'LKrpB^Qrp]pUrpg!Yrq-3_rq??crqQKgqtg<hqu$?iqu4P6
df5^7rr2]krqucmqtg<frqQKerq??arq$-[rpg!WrpTjSrp0RKroj@DroO.?ro3q9qqq;,rn@A)rn.5$
qpkSmrmL\kpsB#drm:Dcp<S<8N6[""J^2upn'D![rm18armCVkrmUksqptc!rn7;)rn[S1qqqD3ro3q<
roO.Aroj@Grp0ROrpTjUrpg!Yrq$-^rq??crqQKgqtg<hrquQiqu4b<df5g:rr2]krqucmrqcWirqQBb
rq??arq-3\rpg!VrpKdPrp0RJroa:Bro=";qr%J1rnRM,rn7;'rmq)!rm^qqrmCVirm1Shqp##^qoeu]
pW8!.J]WJbJ]Z*Wqo\o]p!!E[qp,)cqpPJnrmh#!rn.5'rn@A,rn[J0ro3q;roO.BrosFJrp9XPrpTjV
rpp'\rq69arqH<brqZQirqlTjqu-Nnb5]oiT)\fhq#13irql]kqt^-`rq??`rposUrpTjSrp0RKroj@D
roF(<ro!e5rndY0rn@A)rmh"trmUkorm:Yjrm(Dcqoeu]rlP/\prEBRqo/EMe\m$VXi#_-J]#RIrl+cS
qoA]WrlP&[rlb;cqp,2erm:YlrmUkrrmh#$rnIG-rndY3ro!e8roF(@roj@Grp0ILqsaUVrq-*]rqHEf
qtg<hrquZlqu4k?df6$@rr2]kqtpBhrqZQgrqHEbrq-3]rpg!WrpTjRrp0RJroX4@ro="9rnm_3rnIG*
rn%/"rm^qqrm:Yjrm(MerlY5^rl4iSqnrEMot^I>rkA-?mCe(`Q+V[\J\:$Ul+Qu.rkJ$>qni?Mrl+cS
rlP/_rlkAerm1SjrmLeprmh#"rn7;*rndY3ro!e9roO.ArosFJrpB^Rrp]pWrq$-]rq69brqQKgqtg<h
q#1*he,RkrV#UGnq#13irql]krqZQgrqHEcrq-3]rpp'XrpKdPrp'LHroa:@ro3q8rndY0rn@A&rmh"t
rmLemrm(MdrlY5^rl>#WrknWLrkSNJqn;d:rjr!;rj_^3o=':ZO1'VJJ[XLFm'll%rjhp;pq-O=rkABH
rkSEIrkn`Srl>#[rlY5`rm(MirmLeqrmh#!rn@A+rndY4ro3q;roa:Frp'LLrpKdTrpp'[rq-3`rqHEe
rqZQirqlTjqu-Nne,RkrVuQbqq#13irql]krqZQgrqHEcrq69]rp]pUrpKdPrp0RIroX4@ro!e5rndY.
rn.5%rmLemrm1ShrlkAarl4rVrl"fPrkSNJqn<!Arji$<rjVm8qmHF1qm5t$!3u.#JZt3>JZs^0i3;mZ
o!88$qm?@1qmQL5rj_s<qn2pArkJHJrk\TPrl+lVrlY5arm(MhrmC_nrn%/&rn@A.rnm_5roF(@roj@I
rpB^QrpTjVrpp']rq??crqQKgrqcWkrquZlqu51Hdf6?Irr2]kqtpBhrqQBbrq-3]rpp'XrpTjSrp'LH
roX4>ro*k6rndY/rn.5"rmLelrm(MerlY5Zrl"fQrkSNIrk8<Brj_s9qm6:-ril:'riZ7&riGmqri5^l
!NE&LW.V%"W.CnpW;ERkWq`XoXT#@$Y5YX%Ykta*Zi7E4\Gj)=^&GeG_#D4M_u@XSb5TT`cMl/hdf.bq
f`'V(hYuF3iVqj9k5OTDlMg5Nn,DhUo)A7[o`"U^q"speqtU-ernRP%s/l>#rqQHkr;QTmqYp<fp\smc
oD\=Xn,D\Qli-)Hk5OE?i;VU4h#>t*f)F1ud/M>ibl5]_`r<sV_>_4K^&GVB\Giu:[/RB1Yl:j*Xo>F$
WrB!sW;ELlVYHtaU\^_SU4K#$Tn/ngU#r'2UAgq\V#.%gVuEXoWW&psXT#@$YPtd*Zi7?2\,Nr;])KDB
^])(K`W!pWaSsE_cMl2ieGe%uf`'\*h>Z@3j8S0>kPjfHmJHAOnc&.WpAXgcq>U6iqtp<grVlfOs3gqO
s8N#mrVl`oqu6Hkq>U0gp\smco`"C[nG_nUm/H;Lkl0]Cj8S!9hYu:/g&BM#df.SlcMl#daSs-W_>_4K
]`,MA\Gil7ZMUm*Y5YO%W;`^oVYd.fUAghVTD4uUSFE&"S!'7lRt7'kS*?IBSbo#OTDP;YUAgqeVZ*Lm
W;`mtXo#@%Zi7?2\Gj)=]`,\F_Z%LQaSs?]cMl/hdf.bqg&Bb*hYuI4j8S0>kl0lHm/HJQnG_tWo`"O_
p\sseq>U6iqu6NjrVQTOs3gqRs8N#mrVQKkqYp9ep\sgao)A1YnG_hSli-,Ik5OKAi;VU4h>Z%*ec+"r
d/M;hbPoK[_u@FM^AbbD\Gii6ZMq',Xo>@"W;`UlUAgkcT`1P^SbnoURf8]OQi<9LPkC7>OoUX9Ob&UT
OF`LEOPl5nOo(=7PQ$gGQ2[-IR/<?OS,SuXTDkM_U&LhdV#I=lWrB."YPtg+Zi7K6])KGC^])+L`W"'[
c2Q)hdf.erfDaV*hu;R5jo4HBkl0oImf)_Tnc&.Zo`"U^q"speqtU-eroO1.s0Mb)rqQHkqu6Hkq>9pc
pAX[_o)A+Wmf)SPlMfrFjSn-;hYu:/g&BM#df.SlbPoT^`r<gR^](nF\,Nf7ZMq*-Xo>@"VZ*CjUAghb
T)P8ZRf8]RQi!'IPl?jCOoCI>O8+b6N:W!ZMiWdIMh-fEMslW"NrG+:OT(C>P5CLCQ2[-LRJrZSSGo)Y
T`1\bV>d@kWrB+!Yl:s-[JmZ7]`,YE_>_IRaSsB^ci2AleGe/#g]$(/iVqp;k5OZFli->On,DkVoDA7\
p\t!fqYpBerVQTUs3gqXs7lTjrVl`oqYU*fp\smco`"C[nG_nUli-2Kkl0WAiVqa6g]#n*f)F%qcMl&e
`r<mT_#D(I])K2<ZMq*-Y5YI#VuELkT`1S_T)P5YRJrNOPl?mGOoCIAO8b1:NW+n3MZ/G/L])sYL4P)1
L4P*)LAlu*M"ll)N;eh6NrG.>OoCRDPl@!JR/WTST)PA]T`1bdVuE^qY5Y[)ZMq?4])KGC_#D:O`r=3]
cMl2if)F>$g]$+0iVqm:kl0iGli-APnG_tWo`"O_p\t!cqYU3irV6BUs3gqXs8N#prVl`oqu6Hkq>U0g
p\sgaoD\=[nG_hSli-,Ik5OH@i;VR3gA]Y%e,I\mc2Pf``W![P^&GYC[/RB1YPtX&W;`XmU&L\`Sc5&V
Qi<6KOoCIANrG":MuJV5M#N/.L&Qc)KDpK"JbXcpJ,XruIt<*#It<*#J'icFJGt&kJGt-!K)UE%K`6])
L]3,/MZ/P5N;ek:O8b:@Pl@!JRJrcVTDkP`V>dFmXT#F&ZMq61]DfPD_#D=Pao9Qaci2Alec+;%h>Z@3
jSn<@kl0oImf)_To)A7[o`"Uaq#:*gqYpBkr;QZlrojC1s1/1)rVQKkqYp9hp\smcoD\=Xn,D\QlMfrF
j8S!9hYu7.fDa4tci2/faSs0X_>_.I\c0&:Yl:d(X8\spU]-qcSc5&VQi<3JOoCF@N;e_6M>i;0LAlo+
KDpK"JGt#mIK"WhHiA<kH%C6lH%C6lH.7-:HMDjaI/A?kIf"ZpK)UE%L&Qi+L]3/0MuJ\7O8b:@PQ$pJ
Rf8lWT`1_cV>dOpY5Y[)[f3i:^&GkI`W!sXbl5rfdf.ktgA]t.i;Vg:k5OZFm/-8Nnc&.ZpAXgcq"spe
qtU-Rs3gq[s8N#mrVQKkqYp6gpAXaao)A.Xn,D\QlMg#Hj8S$:hu;@/f)F+sd/M8gao93W_>_1J\Gil7
Yl:d(WW&doT`1P^SGniRPl?gEOT(7=MuJJ1K`6W'Jc:3!J,XorIK"WnHiA?jH2)X`G5$+[F`i7WK62Zd
JTT:]qfVdZpiud`rd+Qjrd=]nrdOirrdb!!re(3(reCE1rf-o=rfR2Erg*PRrgs+^rhf[oriQ1(rjDa8
rkABIrkn`WrlkAgrmLetrn@A/ro*k:roj@Hrp9XQrpg!Yrq69arqH<drqlKhqu6$`df6u[rr2oqrqucm
rqcWirqQKdrq-3]rp]pTrp9XJroX4@ro!e3rn@A$rmLelrlY5[rk\TJrjr*;rilC(ri?$orh9=`rgNhP
rf[8Brf-o8reCE*rdt-"rdOiord+QhrcnEbrcJ-\rc7mUol0YDr,7.(L2MQ[JSs(Wol'D?rc.gUrcA'\
rcS3brd"Khrd=]ordb!"re19*repc8rfI,Brg3VQrh'1arhTOoriZ7)rjMg:rkABJrl+lZrm1Slrm^r$
rn[S3roF(@roj@JrpKdTrq$-^rq??drqZQirql]mrr)`nmf1`8^]4<4qu-Nlrql]jrqQKerq69_rpg!V
rp9XLroX4?ro!e4rn@A'rmC_krlkA]rkeZLrj_s8riuI)ri#gmrh07]rgNhOrf[8Areg]1re:?'rdaus
rd4WjrcnEbrcJ-\qf2LOqel1FqeQ%CJSKaNJSKaNaD1]iph]hFqeuIQrc.pYrcJ-^rcnEfrd4Wnrdb!"
re:?-reg]9rf[8GrgNhWrh07eri,n!riuI1rj_sBrkn`TrlkAermC_srn@A.ro!e:roX4Frp9XQrpg!Z
rq69brqQKgrql]mqu-Nnmf1`8_Z0W7qu-Nlrql]krqZQgrqHEarpp'WrpKdOrosFDro3q7rn@A'rmUkn
rlkA_rk\TKrk/6;riuI*ri#glrh'1\rg<\LrfI,=reg]/re()trd=]krc\9_rcA'Xqeu@KrbV@Eqe?%C
oOn)7rap^mM.M6LJS!YKqe#;0qe5tCphK\Brb_XQqf)OUrcS3`rd+Qkqg\Tsre:?/rf$i<rfmDMrgj%\
rhTOlriZ7*rj;[;rkABJrlG)^rm:Yorn.5(rnm_7roO.Drp0ROrpTjWrq-3arqQKgrqcWkrqucoqu6-c
df7;drr2]krql]krqZQfrq??`rpg!WrpTjOroa:Bro*k5rnIG'rmUkmrlY5[rk\TJrji$7ric=$rhoag
rgj%Wrfd>Drf6u6re:?&rdaurrd+QdrcJ-[rc%jSrb_XMrbDFGrau%=rabn9raPG,rEt1aJRF%:JRHc2
ojR`,raYh9rakt=rb2:FrbMLMrbqdTrc8!ZrcS3drd=]qrdk'&reUQ6rfI,CrgNhWrh07gri?%%rj2U6
rkABJrl+lZrm1Smrmq)'rndY5roO.Crp'LOrp]pWrq-3_rqHEfrqcWkq#1*hp]&\A`W,r:q#13hrqcWi
rq??`rq$-YrpKdProj@Dro="9rnRM+rmUknrltG^rkeZLrj_s7ric=%rhf[hrgj%Vrg!JErf$i5re19%
rdOimrcnEcrc8!Wrbh^OrbDFGrau.@rabn9raPb5qd8o#rE]##JR"7@JR!b2i*>_Vnm;3#ra>_6qdTP7
rac">rau.CrbDFKrbh^Src8!]rcnEgrdOitre19-rf$i<rg!JNrgj%_rhoarric=.rj_sBrkn`TrltGh
rmUl"rnRM2ro="?roj@JrpKdTrq$-^rq??erqcWkq#1*hp]&\A`W,r:qu-NlrqcWirqQKcrq-3[rp]pS
rp0RHroF(:rn[S,rmh"prltGbrkeZLrk/6;rilC(rh]Ugrh'1Xrg!JErf$i4re(3#rdFcmrcS3]rc%jT
rbVRLrb2:Crac";raGe5ra>_4qd08-r`nnrrEAerJQ\%:JQ[P,i*#MPmp#crra#;*ra>_4raGe8rac"?
rb2:Hrb_XQrc%jXrcS3erdFcrre(3*rf$i<rg!JNrh'1arh]UrriuI0rk/6FrkeZWrlkAgrmh#$rn[S3
roF(Arp0RNrp]pWrq$-^rqQKgrqcNirr)`np]&\AbQ%S@q#13irqcWirqQKerq-3\rpTjRrp'LHro=":
rnm_-rmh"qrltG`rkn`Lrji$8ric=$rhf[frg`tTrfR2?repc/rdk&urd"KdrcA'Xrbh^Orb)4Brabn7
qd9>.r`oG,r`]2$qcEbtmT&s\JQ.S-JQ.2"g/R<:qc<\tpfRMur`fA,ra#D.ra>_6rac">rb)4Hrbh^S
rcA'^rd"Kmrdt-&repc9rfR2Irg`t\rhf[pric=.rji$Brkn`VrltGirmh##rnm_6ro="Arp'LMrpTjW
rq-3arqQKgrqcWkqu-EkqZ#"DbQ%S@q#13irqcWhrqHEcrpp'XrpTjProsFEro*k5rnIG&rmLelrlG)W
rkSNErjMg2ri?$qrh9=^rg<\Krf@&9reCE&rdFclrcS3]rbqdQrbDFGrac";ra>_4ra#M.r`fA*r`T5%
r`8\lr`&;ar)<SmJPh8$JPgtqh,4&Ilr3d\oi:ulr`B)%r`];*r`oG.ra5Y4raYq<rb2:Grb_XQrc8!\
rd+Qlrdb!&reg]9rfd>Krgj%^rhf[qriuI1rjr*Erl+lXrm1Slrmh#&rndY5roX4Drp0RPrpg!Yrq??c
rqQKhrqlTkqu6Hldf7Mjrr2fnrqucmrqcWgrq??`rp]pUrpKdNroa:Aro!e2rn7;!rm1Sgrl+lRrkAB?
rj)O,rhoajrh'1Wrfd>Breg]0rdk&trd+Qfrc.pUrb_XJral(=ra>_4ra,S.r`];(r`K/$r`9"ur`&kp
nkoB^r_W>bJPUhmJPUhmaA;e3r_NMiohk]dr_rerr`9#"r`K/&r`];*ra,S2ra>_8rau.Crb_XQrc.p]
rd+Qmrdk''reg]9rfmDLrh'1brhob!rj2U4rkABJrl+l]rm:Ymrn7;+ro!e:roj@HrpKdSrp]pZrq69b
rqcWkrqucoqu6Hldf7Vmrr2]krqcNfrq??`rq$-YrpB^Nroa:Bro*k4rn7;%rm:YgrlG)Srk/6?rilC'
ri#ghrg`tUrfR2?repc.rdaurrcS3]rbqdQrb;@EraPk7ra5Y0r`];'r`9"ur`&kpqbd5er_NMiqbR2d
mS3URJP:elJP:Vgf1bO*qbI#ar_WSiqb[8hqbmDmr`/qur`K/'r`oG0raGe8rb)4Frb_XQrc8!\rdFcr
re(3.rf6u?rgEbVrh07hriH+'rj_s?rkSNSrlkAgrmq)%rn[S4roF(Arp0ROrp]pYrq69arqZHfq#1*h
!<:LIcN!nCq#13grqZQgrq69_rpg!Vrp9XLroX4?rnm_0rmq(srm(Mbrl"fMrji$8riZ7"rhTObrgNhO
rf@&9reCE&rd=]ircA'Xrb_XJrau.>ra>_2r`fA)r`K/#r`&kpr_`YkqbR2dqb?iZqb-HOJP(JcJP(Jc
^InJupe:Z]qbI,dqb[8hr_reqr`9#"r`T5)ra#M2raYq>rb2:Jrc%jXrcnEirdb!&reg]9rg!JNrgs+b
ri,n"rj;[8rkABMrlP/brmLetrnIG0ro="?rp'LLrpTjVrq$-^rqQKgrqcEgqu-Tqdf7Vmrr2fnrqucl
rqQKerq-3\rpTjSrp0RIroF(;rndY,rm^qnrlb;[rkSNFrjMg2ri?$prh07[rg!JErepc1rdk&srcnEa
rc%jRrbDFDraYq7ra,S.r`T5$r`&kqr_`YkqbR2dr_<Acqb-]VlUgeAJOk_jJOk>_g.:6qpe(NYqb6u`
r_E>dr_WSkr_rerr`9#$r`fA.ra5Y6ral(DrbVRQrcJ-brdFcsreCE1rfI,FrgWn[rhf[qriuI2rk&0F
rl4r\rm1Snrn.5,ro*k;roj@HrpKdSrpp'\rqHEfrqcNirr)`n!<:LIdJs4Fqu-NlrqcWirqQKdrq$-[
rpTjQrosFEro!e3rn@A$rmC_jrl+lRrkAB>rj)O+rhTOdrgj%PrfI,=re19%rdOiircA'WrbVRIrac"9
ra,S/r`K/#r`/qqr_`Yjr_WShr_3;ar^urWr^cfSlUHFpJOY2[JO[:Apdb3PqapcZr_*5ar_<Agr_NMj
r_i_qr`B)$r`oG/ra>_9rb)4HrbqdWrc\9irdk'%rf-o=rfd>Prh9=eriZ7*rjDa>rk\TQrm(Mjrm^r$
rn[S3roX4Drp9XQrpg!Zrq??crqZQirqlTkrr)otdf7_prr2fnrquclrqQKdrq69]rp]pTrp'LGro="8
rnIG)rmLekrlb;YrkJHErj2U-ri5skrgj%VrfI,<reUQ)rdOimrcA'Xrb_XIrac"9ra,S.r`T5#r`&kq
r_WSir_EGdr_*,\r^luXqa^ENmm[1CJOG&WJOG&Wc:%+ipdY6QpdkBUqb$i\r_3;dr_NMir_reqr`/r#
r`fA.ra>_9rb)4Irc%jXrd+Qlrdk')rf$i<rgEbVrh9=kriZ7,rk&0Erkn`Yrm1Slrn.5)rnm_8roa:G
rpKdTrpp']rqHEerqcWkqu-Nn!<:LIeGoOIqu-Nlrql]krqHEcrq-3ZrpKdQroj@Cro3q6rn@A%rm:Yg
rl>#Rrk/6>rilC&rhf[ergNhOrf6u7re19#rd+Qerc%jRrbDFCraGe5r`fA)r`B(sr_WSir_EGer_3;`
qapcXqa^ENpdOX>rBl-'JO=uUJO@^MmmQq>pdY6Qqag]Xqb$i]r_<Aer_NMjr_i_sr`T5)ra5Y6rac"C
rbVRQrc\9frdXp#re^W7rg!JOrh'1eri?%&rjVm=rkSNRrlb;frmh#$rndY6roX4DrpB^Rrp]pZrq69b
rqcWkrqucorVcisrm^tts8N#prVl]nqYp<ipAX^`oD\7YmJcGNjo4<>hu;C0f)F+scMkrb_u@CL\Gif5
XT#*rT`1DZQ2ZjDM#N),J,X`mFoHC[D>n5JAc?*:?2e(-<rQ(t;uTVm:]=,g9E%Q_8cD9[8,GdQ7K,^1
6i9<&6A@gX6@hJT6J=g(7/fXM7fGpW8H)3[9)_K_:B"&g;#XDm<W6%u>Q.t.@/aa:C&VuKEW1+[H2`<m
KDp]+O8bCCRf8uZVZ*[rZMqB5^Ac%LaSsKadf.ktg]$+0ir8'=li->OnG`%Yp&=[aq>U6iqu6QmrW3#t
eGn%uq#13hrqcWirq69_rpg!Vrp9XLroF(;rndY,rmh"qrlb;[rkSNErjDa/ri#gkrh'1UrfR2>re:?&
rdFcgrc8!Vrb;@DraPk5r`fA)r`&kpr_WSir_<Acr_!/]r^d#Yr^QZOr^>F,r'T1)JO-D(JO+iQf0[tS
qaC<Mr^QlWr^d#[r_!/`r_<Afr_WSmr`&l"r`fA.raPk=rb;@Mrc8!\rdFcsre:?2rf[8Hrh'1bri#h"
rj;[9rkSNQrlb;grmh##rndY5roF(Drp9XQrpg!Zrq69drqcWkqY^HnrRCkss82cor;QQlq>U0gp&=R^
nG_kTli-,Ij8S!9h>Z")df.SlaSs*V^](\@Z2Um)U]-qcSGn]NNrFq8Jc:,tHiA'bDuOVQB)Z<>?iF=0
=oMM%;Z9Ml:]=&e9E%Q_8cD9[8,c!T7K,^A6g-ke6N09%5d3M)5_23"6+K>Q6i0:N7JfRR8,c'Y8cD?]
9E%Wa:]=5j;Z9bs=oM\*?iFR7B)ZZHE;jnWHiAKnJc:Q+NrG4@SGo/[U].CpZMq<3^])1NaSsNbe,Iqt
h>Z@3j8S9AlMg5NnG`%Yp&=acq>U6fquHZrrVb7GfDkjLqu-NlrqcWhrqHEarpp'Wrp9XKroX4<rn[S-
rmUknrltG\rkJHErj)O*ri,mirgWnPrf@&8re19#rd"Kcrc%jQrb2:?ra5Y1r`K/"r_remr_EGdr_!/]
r^cfRr^?*?ha6g!r]u*#PsBmcJO&?_r^"^onjE:BpdY6Rr^m)]r_3;dr_WSmr`9##ra#M2raPk?rbVRQ
rcS3drdXp#reg]9rg!JPrh07iriZ7+rk&0Frl"f\rm:Ynrn@A-ro!e<roj@JrpTjWrq-3arqZQiqtpHm
!WDuorn@D(s8N#srVl`oqu6Ejq#:$eoD\:Zn,DVOkPjQAi;VO2f`'=ucMkuc_>_.I\Gi`3X8]!qT)P/W
PQ$O?L]2o)I/\?hErKtUCAqiE@/aI2>5hS%<;obo:]=&e9E%N^8H)-Y7f,X=6f16"6N09%5a=Tc5_22_
5lO'm6L7)=7JfRR8,c'Y8cDB^:&[rf;>sPo<rQ;%?2e72B)ZNDDZ4\UGQ*!hK)UQ)N;f%?R/W]VVZ*Xq
Yl;03^&GkIb5T]cdf.nug]$.1jSnBBlMg8Onc&.Zp\sseq>U9jquHZrrVcWmgAfe)rr2oqrqucmrqQKe
rq??^rp]pTrosFFro="8rn@A&rm:Ygrl>#Rrk&0;riZ7!rhBC^rg*PFreg]/rdXomrcJ-XrbMLGraYq7
r`fA)r`/qqr_NMfr_3;`r^m)[qaUQRr^?<EejAjmr]u*#PsBmcJO&?_r^"CfogA^Hr^H]Rr^ZrZr_!/_
r_<Afr_i_qr`T5*ra5Y7rb)4GrbqdXrd"Kmre19.rfI,Frg`t^ri#h!rjDa:rkSNRrlb;frmq)'rnm_8
roX4ErpKdTrpp'^rqHEerql]m!;ursrVQTJs4[MPrr2lqr;QTmqYp6gpAX^`nc&"Vm/H2Ijo46<h#>t*
e,I\mao96X^&GM?ZMpm'V>d+dQi<0INrF_2JGsurFT-:ZDZ4;JAH#s8>lIn*<rQ"r;#X8i9E%Q_8c)$W
7fGgH6dS0t6@hCV5_21O5hA9E6M3_C7/KIQ8,c*Z9)_K_:]=5j;Z9_r=T2S)?iFR7BDufJEW1(ZIK"fs
K`7#2P5^gITDkYcWrB='\Gj2@`;[pYci2DmfDaS)iVqp;kPjiImf)bUo`"O_p\t$gqZ-Npr;?Qmrr1XO
gAh0Orr)iorql]krqHEbrq$-YrpB^NroX4?rnm_0rmq(rrltG_rkeZHrjDa0ri#gjrgj%Qrf@&:rdt,u
rd+QarbqdPral(<ra,S-r`B(ur_WShr_<Aar^m)[r^ZrWr^H9Ce3a+"r'>m!L-U;TJO%gPpd*CrmmI(C
r^QlWr^d#[r_!/ar_NMir`&kur`];-raGe;rbVRPrc8!ardOiurepc;rfmDQrhBCjrilC1rk&0HrlG)`
rmC_rrnIG0ro="?rp0ROrp]pYrq69brqcWk!;llqr;QZorn@D+s8N#srVl`oqu6Hkp\sjbo)A.XmJcGN
jo49=hu;=.ec*nobPoK[^](eCZi7-,V#I"cS,SQLNW+b5JGsrqGQ)R\D>n;LA,]m8?2dt*<W5nq;#X5h
9`@W_8H)-Y7fGjU7.N^m6N'0#5_21O5_22G5gD^h6iKLQ7K,dU8,c'Y8cDE_:&[ug;Z9_r=T2V*@/a[8
CAr&KE;k(\HiAQpM#ND5OoCjLT`1bdY5Yd,\c0AC`W"'[ci2Gng&Bn.ir8'=li-;NnG`"Xp&=^bqYp?l
quQ`nrr)iqgAg"/rr2fnrql]krqZQerq-3[rpTjProj@Aro!e3rmq(srm1Sarkn`Lrj;[.ri5skrg`tR
rf@&8re(3!rd"KarbqdNrau.;ra#M,r`/qrr_WShr_3;`r^d#Yr^QlUr^?EHg-Yd)nN_XjJO"cOJO%(;
r^#7)ogA^Hr^HfUr^ZrYr_!/_r_EGhr_rerr`];,ra>_;rbDFNrcA'`rdOj"reg]9rg*PRrh9=kric=.
rkABKrl>#armUktrn[S3ro="Arp0RPrpg![rq??erqZWl!W2cnrVQTMs5!_SrqlZnqu6Hkq>U'doD\7Y
mf)MNkPjK?hu;F1eGdhoc2P]]_>_+HZMq!*VuE@gRf8QNNW+_4Jc:#qG5cL\D>n5JA,]j7>Q.e)<;oep
:]=,g9E%N^8,c!T7K,^J6eXm+61I3k5_21O5_22;5lO('6M3_F7/KFP7fGpW8cDB^:B"&g;Z9Yp=oM\*
?iFR7B`;lJEW1.\HiAWrM#ND5Pl@-NT`1kgXo>X*]`,_G`W"-]dJhYph#?41ir8-?lMg5NnG`%Yp&=dd
q>gBnqtpBkqu5FOh>dKRqu-NjrqZQgrq-3\rpTjRrosFFro!e3rnIG$rm:Ygrkn`Mrji$4ri?$qrgs+V
rf[8=re:?$rd"KbrbqdOrau.=ra,S.r`K.ur_`Yjr_3;`r^m)YqaLKPog@=tr^$'>JO"cOJO"cO_Ee)d
e3a%"qaCEPqaUQVr_*5ar_NMjr_reur`];-raPk>rbMLOrcJ-brdXp$repc=rg<\Vrhf[qrilC4rkABL
rlkAfrmUl$rndY4roa:GrpB^Rrpp'\rqQKg!;Z`mqYpHjrn[V1s8N#srVl`oqYp9hp\sgao)A+Wm/H5J
jo43;h#?"+dJhDiao9-U]`,A=YPtL"UAgV\Q2ZjDM#N&+J,XTiErL"VBDuH@@/aF1=T2>";>sAj:&[ca
8H)-Y7fGjU7/0.*6K17]5_21O5_22,5i"d%6iKLQ7K,dU8,c*Z9)_Qa:]=5j<W6,">lJ.1AH$6@DuOeV
FoHmiKDp]+O8bCCRf9&\WW'+#[f3r=_>_RUc2Q,ig&Bh,i;Vj;kl0rJn,DnWo`"Uaq#L6lqYL3hrr)iq
h>c=2qu-NlrqcWhrqHE`rpg!Vrp'LGroF(9rnIG)rm:YgrlG)Srk&0;riQ0trh9=Zrfd>AreCE'rd=]e
rc%jQrau.>ra5Y/r`B)!r_WShr_<A`r^d#Yr^HfSog@b+qa'4,JO"cOJO"cOZU"LUi'R*(r^?`Sr^ZrY
r^m)`r_NMir`/r"r`fA/raYq>rbVRQrcJ-erdk''rf6uArgEbZrhoatrjDa;rkSNSrlkAgrn.5)rnm_9
roj@HrpTjVrq$-`rqQQj!W)Zir;QZNs5!_PrVl`oqYp9hp\sd`nc%tUl2KlFj8Rp7gA]Y%d/M5f`r<aP
\c/r7X8\poTDk/UOoC@>K`6K#HiA'bDZ4GNAH$$:?N+(+<rQ%s;#X5h9`@W_8H)*X7K,^J6fUN46/OqY
5_21O5_22)5lO(06M3_F7/fXS7fGpW8cDE_:&[ug;uThs=T2Y+@K'g:C]88OErLFbJGt6$NW,+?QN!NU
V>dOpZi7N7^])7PbPolfec+8$hYuR7k5OWEmf)_ToD\L`q#L6lqYL*err([Qh>dKQrqucmrqZQgrq??]
rpTjRroj@Cro*k4rn.5!rm(Mbrl"fLrjMg1ri#gkrgs+Qrf@&9rdk&srcnE]rbVRJraPk6r`oG(r`/qp
r_NMer_*5]r^ZrWr^?EHj$MEaJO"cOJO"cOW^,K/qa:6Kr^QlWr^d#]r_<Afr_`Yor`B)(ra5Y6rb;@K
rc%j]rd=]rreg]8rfd>QrhBCjrilC2rk8<LrlP/brmUl!rn[S4roO.CrpB^Rrpg!]rq?Eg!VuQjqu6Nm
rS@M0s8Murr;QTmq>U-fp&=L\n,D_RkPjQAi;VO2fDa4tc2Pf`_u@:I[JmB/VuEChSGn]NNW+b5JGsop
FoH@ZD#S,I@K'U4>Q.\&;uTVm:B!rd9)_?[7fGjI6g6r76.nMS5_21O5_22#5lO(06M3_F7K,dU8,c-[
9E%]c;#XGn<rQ>&?N+C4B`;fHE;k"ZHiAQpM#ND5P5_!NU&LthYPts/]Df_IaSsH`df.kth#?72jSn?A
mJcSRnc&4\pAk!iq>($erqucoh>c=2rr)iorql]irq??arpg!Vrp9XIroF(9rnIG'rmLeirl>#Srjr*9
ric<srh'1XrfI,;reCE%rd"KbrbqdNrau.;ra#M,r`/qrr_NMfr_!/]r^ZrWr^HTLj$N`2ej+dOJO"cO
JO$+ur^#R2pd>$Lr^QlWr^m)^r_<Afr_i_qr`];+ra>_;rbMLOrcJ-crdXp%repc;rgEbXrhTOsrj;[9
rk\TRrlkAirn%/(rnm_8roa:IrpKdUrq69b!;HTiq#:0ir;QZNs5<qVrr2lqr;QQlp\smco`"@ZmJcGN
jo4<>hu;@/ec*qpb5TBZ^](bBZMq!*UAg__Qi<*GMZ/8-I/\?hErKqTB`;N@@/aF1=T2;!;Z9Jk:&[ca
8cD3Y7K,^M6fUN46.S;P5_21O5_21u5lO(06MNqI7/fXS7fH!Y9E%Zb:]=8k<;p#!>Q/%0A,^0@D>nST
GQ*!hKDp`,OT(UGSc5A_Xo>X*\Gj8B`;[pYd/MSpgA^"/ir8'=li->OnG`(Zo`4^ep\4[`rql]nqu5XU
i;`fUrr)iorqcWgrq??_rp]pSrp0RFro3q7rn.5"rm:Yerl"fNrjMg2riH*mrg`tRrf6u6rdt,rrc\9]
rbVRHraPk5r`fA(r_renr_NMdr_!/]r^QlUr^?NKj$N`2ej+dOJO"cOJO$+ur^#R2pd>$Kr^HfUr^m)]
r_*5dr_`Ynr`K/'ra,S5rb)4Hrc8!^rd4WrreUQ6rg*PRrh9=mriuI2rkJHNrlY5ermh##rnm_7roO.F
rpB^Srq$-^!;?Ngp\t$gqu6Qkro=%:s8N#srVl`oqYp6gpAX[_nG_hSlMfoEir7g6fDa7uci2#b_u@FM
[JmE0WW&RiS,S]PNW+_4Jc9upG5cL\C]7rF@fB^5>Q.b(;Z9Ml:B!oc9)_B\7fGjU7/K@06N0:%5_21O
5_21O5c6mH6/=m,6iKLQ7K,dU8H)3[9E%]c;#XAl=T2M'?N+F5BDu]GEW1+[HN&KpL]3;4Q2[6OT`1qi
YPts/^])1NaSsNbe,ItuhYuL5jo4QEm/HMRoD\C_pAt$_rqcWkrr)`nj8\';rr2oprql]krqHEbrpp'W
rp0RJro="9rn[S)rmLelrl4rRrk8<;riZ6urh07Yrf[8=re:?%rd"KbrbqdMrac"9r`oG*r`9"rr_NMf
r_!/\r^ZrVr^?NKksGA8bs6hFJO"cOJO#elr^#[5qa:?Nr^HfVr^m)]r_<Agr_i_rr`K/)ra>_:rb;@M
rcJ-brdb!&repc=rgEbYrhoatrj2U;rkeZSrm1Smrmq))ro!e9rosFKrpTjWrq-9c!Vc?fqYpBkr;6KR
s5<qVrr2ipqu6Hkp\sjbo)A+Wli-/Jj8S!9h>Yt(dJhDi`W!^Q^&G>:XT#*rT)P,VP5^@<L&QT$GlDd`
DuODKAH$!9>lIk)<W5kp:]=)f8cD9[8,bsV7/0.66N09q5_21O5_21O5b:7?60:N26iKLQ7K,gV8H)3[
:&[rf;>sSp=T2S)@/a^9BDuiKF8gF`J,Y-#MZ/e<R/W]VVZ*^sZMqQ:_>_FQc2Q,iec+D(i;Vd9l2L&K
n,DnWo`4^ep\4[`rql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@rnm_1rmh"qrltG]rk\THriuI(
rhf[crg3VHre^W,rdOiirc8!Urb)4@ra5Y0r`K/"r_`Yjr_3;_r^d#Xr^?EHksGA8bs6hFJO"cOJO#el
r^#[5qa:6Kr^QlWr^m)_r_EGir`/r"r`oG0raYq?rbh^Urc\9ire(3,rfR2Hrgj%criH+(rk/6Grl+l]
rmC_qrnRM1ro3q@rp0RPrpg![!;6HepAXpfqu6Njro=%=s8N#srVl`oqYp<ipAX[_nG_kTli-,Iir7g6
g]#\$d/M8g_u@FM])Jr5WrAgnSGniRO8at7KDp?!FoHC[D>n/HA,]j7>Q._'<W5ho:B!rd8cD9[7fGgQ
6fUN46-VZG5_21O5_21l5lO(06N0@L7/f[T8,c*Z9`@fd;#XJo=T2P(?iFR7B)ZZHEW1+[If=ruM#NJ7
Q2[<QV#IFoYl;65^Ac%Lbl5rfe,J,$hu;X7kl0lHmf)_ToDnRcp@eL]rql]mrr)iqj8\0>rr2oqrqucl
rqZQdrq$-YrpKdNroa:>rndY/rmUkmrlb;YrkABArilC%rhTO_rfmDCreCE'rdFcgrc.pSral(<ra5Y-
r`B(ur_WShr_3;_r^d#Xr^?WNlpCA2bs6hFJO"cOJO#\iqa'I5r^6QNr^QlWr^m)_r_<Agr`&kur`T5-
raPk<rb_XSrcS3grdt-(rf@&DrgWn_ri5t%rj_sArkn`Yrm1SmrnIG/ro*k>rp'LNrp]pY!;-Bcp&=dd
qu6NmrVlfVs5X.Yrr2lqr;QQlq>U'doD\7Ymf)MNkPjH>hYu7.e,I\mbPoBX^&GP@Yl:[%U]-_]Pl?aC
L&QZ&I/\6eE;j\QAc?0<?N++,=8l.t;#X5h9`@W_8H)*X7/K@<6N09h5_21O5_21O5a=V660pr;6i0:N
7fGpW8cDE_:&[ug;uThs=oMb,@K'j;D#SDQFT-[eJGt9%O8bCCRf9)]WW'.$\Gj5A_Z%aXci2DmgA]q-
iVr$>lMg5NnG`"Zo`=aYrqZQjrqucorr1sXj8],Xrr)inrqcWirq69^rp]pSrosFFro!e2rn7;"rm1Se
rkeZJrjVm1ri#gjrgNhNrf6u2rdXoorcA'WrbMLDraGe4r`K/"r_i_lr_<Abr^d#Yr^QZMmm=`RJO"cO
JO"cOO$N/#pd>$Mr^ZrYr_*5br_WSlr`9##ra,S4rac"DrbqdWrd4Wpre192rfd>MrhBCkric=1rk8<J
rlb;ermUl"rn[S3roa:GrpB^Srpp-_!VQ-bq>U6iqu6Qnro=%=s8N#srVl]nqYp<ip&=R^nG_hSl2KlF
i;VO2g&BJ"ci2,e_>_.I\,NQ0W;`OjRf8NMNW+V1J,XfoF8g+WC]7lD@K'U4=T2>";Z9Ml:&[fb8H)-Y
7ef@>6G>^95_21O5_21]5jq&76iKRS8,c'Y9E%Zb;#XAl<rQ5#?N+C4AH$BDDuOhWHiAQpK`6u1PQ%$M
UAh+jY5Yp0]`,bHbPoiee,J&"h>Z@3kPjcGmJcVSo)SFap%A=[rqcWkrr)iqj8\0>rr2oqrql]krqQKc
rq$-YrpB^LroO.;rnRM+rmLekrlY5Vrk8<?riZ7!rh9=Zrf[8?re19#rd4Wbrbh^Nrac":ra,S+r`/qq
r_WSgr_*5]r^ZrWpd=L:^-I67JO"cOJO#8]mm?e:r^QlWr^d#]r_<Agr_i_rr`K/+raGe:rbMLOrc8!b
rdb!$rf-o@rgEbZrhoaurjVm>rk\TVrm(Mkrn7;+ro!e;rosFLrp]pY!;-Bcp&=acq>U9jrVlfVs5X.Y
rr2lqqu6Hkq#9pbo)A.Xm/H8Kk5O<<h#?"+dJhGjb5T6V]`,A=Y5Y?uT`1>XP5^I?KDpB"HN%saDZ4DM
AH$!9?2dt*<W5kp:]=&e9E%K]7fGjO6gm@U5_21O5_21O5`\2!6MNqI7K,gV8H)9]:&[rf;>sSp=T2V*
@K'g:CAr,MErLCaIf>!!NW,+?R/WcXVuEju[f3r=_>_UVc2Q,ig&Bh,i;Vm<kl0rJnG`"ZoE"UVrqQKg
rql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pRrosFDro!e2rn7:urltGark\THrjMg/rhoagrg<\Jrf-o0
rdXonrc8!UrbDFCra>_2r`K/"r_`Yjr_3;ar^ZrWr^HTLmm=`RJO"cOJO"cOO$N/#pd>$Lr^QlWr_*5b
r_NMjr`/r"ra#M3rac"Crbh^Urd+Qmre(30rf[8Jrh07griZ7/rk/6HrlP/armC_urnRM2roO.Crp9XR
rpp-^!VH$`q#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_eRl2KfDi;VO2g&BCuc2Pia_#CtF[f3H/
VuE@gR/W9JNW+S0J,XcnErKtUCAqcC@/aI2=T2>";>sAj9`@Z`8,c!W7JK7=6G>^95_21O5_21]5jq&7
6iKOR7fGpW9)_N`:]=5j<W6,"?2e:3AH$?CDZ4\UHN&BmKDpl0P5^jJT`1kgY5Ym/]`,_Gao9QadJhhu
h#?72jo4KCm/HMRo)SC`o^r.XrqZQjrr)iqj8\0>rr2oqrql]krqQKbrpp'Xrp9XKroO.;rnRM+rmC_i
rlP/Trk&0<riZ6urh07Xrf[8?re(3"rd+Qarbh^Mrac"9ra#M*r`/qpr_NMer_!/[r^QlUpd=L:^-I67
JO"cOJO#8]mm?e:r^HfUr^Zr[r_3;er_`Ypr`K/*raGe:rbDFMrc8!ardOj!rf-o?rg<\XrhoaurjMg=
rkSNTrltGirn7;+ro!e;roj@Jrp]pY!;$<ao`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9pbo)A.Xm/H8K
jo43;h#?"+dJhGjb5T3U]Df8<Y5Y?uT`1>XP5^I?KDpB"HN%saDZ4DMAH$!9?2dt*<W5kp:]=&e9)_B\
7fGjO6gm@U5_21O5_21O5`\2!6MNqI7K,gV8H)6\9`@ie;>sSp=T2V*@K'g:CAr,MErLCaIf>!!NW,+?
R/WcXVuEju[f3r=_#DLUc2Q,ig&Be+i;Vj;kl0rJnG`"ZoE"UVrqQKgrql]nrr1sXj8],Xrr)inrqcWh
rq-3\rp]pRrosFEro!e2rn7:urm(Mcrk\THrjMg/rhoagrg<\Jrf-o0rdXonrc8!UrbDFCra>_2r`K/"
r_`Yjr_3;ar^d#Xr^HTLmm=`RJO"cOJO"cOO$N/#pd>$Lr^ZrYr_*5br_NMjr`/r"ra#M3rac"Crbh^U
rd+Qmre(30rf[8Jrh07griZ7/rk/6HrlY5brmC_urn[S3roX4Drp9XRrpp-^!VH$`q#:*gqu6Qnro=%=
s8N#srVl]nqYp9hp&=R^nG_hSl2KfDi;VO2g&BG!cMkuc_>_.I\,NQ0W;`LiRJrBKNW+V1J,XfoErKtU
C]7lD@K'U4=T2>";Z9Ml:&[fb8H)-Y7ef@>6G>^95_21O5_21]5jq&76iKRS8,c'Y9E%Zb;#XAl<rQ5#
?N+C4AH$BDDuOeVHiAQpK`6u1PQ%!LU&LthY5Yp0]`,bHb5T]cdf.r!h#?72jo4NDmJcVSo)SFap%A=Z
rqZQjrr)iqj8\0>rr2oqrql]krqQKcrq$-YrpB^LroX4<rnRM+rmLekrlY5Wrk8<?ric="rh9=Zrfd>A
re19#rd4Wbrbh^Nrac":ra,S+r`/qqr_WSgr_*5]r^ZrWpd=L:^-I67JO"cOJO#8]mm?e:r^QlWr^d#]
r_<Agr_i_rr`K/+raGe:rbMLOrc8!brdb!$rf6uArgEbZri#h"rjVm?rkeZWrm(Mkrn7;,ro!e<rosFL
rp]pY!;-Bcp&=acq>U9jrVlfVs5X.Yrr2lqqu6Hkq>U'doD\7YmJcALkPjE=h#?"+e,I\mbPoBX^&GM?
YPtL"UAgV\Pl?^BK`6K#HiA*cDuOPOAH$$:?N+(+<W5nq;#X2g9E%K]8,c!Q6gm@U5_21O5_21O5`\2!
6MNqI7fGpW8H)9]:&[ug;Z9_r=T2Y+@K'g:C]88OF8gOcJGt6$NrG7ARf9&\WW'+#\,O)?_Z%aXci2Dm
g&Bh,i;Vp=lMg2MnG`"Zo`=aYrqZQirql]nrr1sXj8],Xrr)iorqcWirq69^rp]pTrp'LGro*k5rn@A#
rm1SerkeZJrj_s3ri5smrgNhNrf@&4rdk&rrcJ-YrbVRFraPk5r`T5%r_remr_EGdr^m)[r^QlTqa9^:
r^"IfJO"cOJO"cOPsG=7lpC\=qaCEQr^ZrZr_3;cr_WSmr`9#$ra,S4ral(Frc%jYrd=]qre:?4rfmDN
rhKIlrilC3rkABKrlb;ermUl#rn[S4roa:GrpKdTrpp-_!VQ-bq>U9jr;QZoro=%=s8N#srVl`oqYp<i
pAX[_nG_kTli-,Iir7g6gA]S#d/M8g_Z%:K])Jr5WrAdmS,S]PO8aq6Jc:)sFT-7YD#S&G@fB^5>5hV&
<;o_n:B!rd8cD9[7fGgQ6gR/46-VZG5_21O5_21i5l3k36N0@L7/f[T8,c*Z9`@fd;#XGn=8lD&?N+F5
B)ZWGE;jtYIK"itL]3A6Q2[9PU].:mYl;65^Ac"Kbl5rfe,J)#hYuO6kl0lHmf)_ToDnRcp@eL]rql]m
rr)iqj8\0>rr2oqrquclrqZQerq$-YrpKdOroj@@rndY/rmUknrlkAZrkJHDrilC%rhTO`rg*PEreUQ+
rdOihrc.pSrau.>ra5Y/r`B)!r_WShr_3;_r^d#Xr^?WNj$N`2bs6hFJO"cOJO#elr^#R2r^6QNr^QlW
r^m)_r_EGhr`/r"r`fA/raYq>rb_XSrcS3hrdt-*rf@&Drg`t`ri?%&rjr*Crkn`Zrm1SmrnIG0ro3q@
rp'LNrp]pZ!;6HepAXmequ6NmrVlfVs5<qVrr2ipqu6HkpAX^`nc&"Vli-,Iir7j7h#>k'dJhDi`W!^Q
]`,28XT#*rSc4uTOoC4:KDp?!G5cO]DZ4;JAH#s8>lIk)<W5kp:]=&e8cD9[7fGgK6g6r:6-VZG5_21O
5_21l5lO(36Mj.I7/f[T8,c*Z9`@fd;>sSp=T2S)?iFR7BDufJErL7]If>!!M>iY:Qi<QTVZ*[rZ2VE8
_#D=Pc2Q,iec+A'hu;X7kl0oIn,DkVoDnRcp@eL^rql]mqu5XUi;`fUrqucmrqcWfrq-3[rpTjProj@@
rnm_1rmq(srm(M_rk\THrj)O*rhoaerg<\Ireg].rdXokrcA'Wrb2:Ara>_1r`T5$r_i_kr_3;`r^d#X
r^?EHksGA8bs6hFJO"cOJO#elr^#[5qa:6Kr^QlXr_!/`r_NMkr`9##r`oG1ral(BrbqdWrce?kre19.
rfR2Hrgs+eriQ1*rk/6Hrl4r_rmLesrnRM1ro3q@rp0RPrpg![!;6HepAXpfqu6Njro=%:s8N#sr;QTm
qYp6gp&=O]n,DYPl2K`Bi;VR3f)F+sci1r`_>_.IZi7-,VuE@gRJrBKMuJG0JGsinFT-4XC&VZB@/aF1
=oMJ$;Z9Jk:&[ca8H)-Y7K,^M6g6r:6-VZG5_21O5_21l5lO(36Mj.L7/fXS8,c*Z9)_Qa;#XAl<rQ5#
>lJ.1Ac?ECDuOkXH2`?nLAm,1P5^mKT`1kgXo>[+^&GnJ`r=<`e,Iqth>Z@3j8S<Bm/HJQo)A:^pAt$_
rqcWkrquZmj8\';rr2oqrquclrqHEcrq$-YrpB^MroO.=rndY+rmUkmrlG)VrkJH?rilC$rh07[rg!JB
reLK(rd+Qerc.pQrau.=ra,S.r`K.tr_WShr_*5_r^d#Xr^HfSqa9:.r^#+#JO"cOJO"cOVa15Ih*V*.
r^?`Sr^QlXr^m)^r_EGhr_i_tr`];-raPk>rbMLQrcS3drdk'(rf-oBrgNhZri,n#rjDa?rl"fWrm1Sm
rn%/+ro*k<rp'LLrp]pYrq-9c!Vc?fqYpBkrVQTSs5<qVrr2lqr;QQlp\smco`"@ZmJcDMjo49=hYu1,
eGdenao96X^](_AYl:^&U&LS]QMupDM#N#*HiA3fEW0eRB`;N@?iF:/=T27u;>s>i9`@Z`8H)*X7K,^P
6f:<16.S;P5_21O5_21u5lO(*6N0@O7/fXS7fGsX9)_N`:B")h;uTnu>Q/"/A,^-?D#SGRG5cjfK)UT*
NrG@DSGo5]X8]C'\,O/A`;[mXci2Gnf`'b,iVqs<lMg2MnG`(Zo`4^ep\4[`rql]nqu5XUi;`fUrr)io
rqcWgrq??`rp]pSrp0RFro="8rn@A%rm:Yerl+lOrj_s5riQ0orgj%TrfI,:re(2trce?^rb_XJraYq8
r`oG)r`&kpr_NMfr_!/]r^QlUr^?NKj$N`2ej+dOJO"cOJO$+ur^#R2pd>$Kr^HfUr^m)^r_<Afr_i_p
r`K/(ra>_8rb2:Jrc8!^rd=]tre^W9rg3VTrhBCorj)O5rkJHNrlY5ermh#%rnm_7roO.FrpKdTrq-3_
!;?Ngp\t$gqu6Qkro=%7s8Murr;QTmq#:!dp&=L\n,D\QkPjQAhu;C0f)F+sbl5Z^_>_%F[/R9.V#I"c
RJr<IMuJJ1J,X`mFT-4XCAqiE@/aI2>5hP$;uTSl:&[ca8cD6Z7fGjO6fUN46.S;P5_21O5_21u5lO(0
6MNqI7K,dU8,c*Z9E%Zb:]=8k<W62$>lJ.1B)ZTFDuOkXHN&EnLAm,1OT([ITDkYcYPtp.])KPF`r=3]
df.ktg]$+0j8S6@m/HGPnc&4\pAjshq"Xjcrqucoh>c=2rr)iorql]irqHEcrpg!Vrp9XJroO.<rnRM*
rmUkkrl>#Trk/6=ric<urh07[rfR2>reUQ(rd4Wfrc%jQrb2:>ra,S.r`9"tr_`Yir_3;`r^d#Yr^QlT
qa9C1qa&n#JO"cOJO"cOW^-PLi'RE1qaCEQr^ZrYr_!/_r_EGir`&ktr`fA.raGe>rbMLPrc\9frdb!(
rf-o>rgWn[rhf[urjDa<rkeZUrltGkrn%/)ro*k<roj@JrpKdUrq??c!;HTiq#:0ir;QZNs5!_SrVl`o
qu6Ejq#:!dnc&"VmJc>Kjo46<h>Z(+e,IYlao96X^&GJ>Yl:U#U]-kaPQ$XBMZ/2+IK"KjE;j\QC&VT@
?iF=0=8l5!;>sAj9`@]a8H)-Y7fGgK6fUMd5_21O5_21O5cR*-6Mj.I7/f[T8,c'Y9E%Zb:]=5j<;otu
>lJ+0@fC*@D>nMRGlE*iJc:Q+NrG7AT)PJ`W;a%#\,O)?`;[mXcMl;lf`'_+iVqs<kl0uKn,DkVpAXdd
q#U<erql]mrr([Qh>dBNrquclrqQKerq$-ZrpKdMroa:@rndY.rmh"prlb;\rkJHCrj2U)rhTOcrg*PG
rf-o1rdXoorc8!UrbMLDraGe4r`K/#r_remr_EGdr^m)[r^QlUr^?EHj$N`2h`u`XJO"cOJO$G)r^#R2
ogA^Hr^HfUr^ZrZr_3;cr_WSmr`9##ra,S4rac"DrbqdVrd4Wpre191rf[8Hrh'1dri?%)rji$Crl4r\
rm:Yprn7;-ro="?rosFMrp]pYrqHEf!;Z`mqYU3irS@M0s8N#srVl`oqYp9hp\sganc%tUlMfuGj8Rs8
gA]_'d/M8ga8WmR])K)9XT#*rT`1>XPQ$XBL&QZ&IK"<eE;j_RAc?0<?iF4-=8l1u;#X5h9`@Z`8GbmU
7K,^M6fUN16/k.\5_21O5_22,5lO(-6MNqI7/fXP7fGsX9)_N`:B")h<;oqt=oMe-@fBs<D>nMRF8gUe
Jc:B&O8b@BR/WcXVZ*[r[/RZ9_#DCRbl5ugfDaP(hu;[8kPjcGmf)bUo`"Uaq#L6lqYL3hrr)iqh>c=2
rr2oqrquclrqQKerq-3\rpTjQroj@Cro!e2rn7:urltGark\THrjMg0ri#gjrgNhOrf@&7re(3"rcS3\
rbqdKrac"9r`oG)r`/qpr_NMfr_!/\r^ZrWr^HfSpd<k(i]r&[JO"cOJO$P,h*Um(r^?`Sr^QlWr^m)]
r_<Afr_`Ypr`K/)ra>_9rb)4Krc8!\rdXp"reUQ7rfmDNrhBCkric=0rk/6HrlP/armC_urn[S3roO.C
rp9XQrpp'\rqHEf!;Z`mqYpElrVlfPs5!_SrqlZnqYp<iq#9pbo)A+WmJcALkPjE=h>Z1.e,I_nbl5NZ
^](eCYl:^&VZ*1dR/W9JMuJG0J,X`mFT-4XC]7rF@fB^5>Q.b(;uTYn:]=&e9)_E]7f,XR7.iq!6N0:@
5_21O5_21O5f,ec6.A6u6i0:N7JfRR8cDB^9`@ie;>sMn=T2M'?N+F5BDu]GDuOkXH2`<mL&R#0P5^jJ
T)PVdX8]@&\c0>B_u@mZci2Dmg]$(/i;Vp=lMg2Mn,DnWo`"Xbq#L6lqYL3iqu5FOh>dKRqu-NjrqZQg
rq69_rpg!Urp0RIro3q7rnRM'rmC_irl+lPrk&08riQ0urh07ZrfmD@reLK)rd4Wfrc8!Srb2:Ara>_1
r`T5"r_i_kr_<Abr_!&Xr^QlTog@=tr^$'>JO"cOJO"cO_Ee)de3a%"qaC<Nr^Zr[r_*5br_NMkr`&l"
r`oG1rac"ArbVRSrce?grdt-)rf$i@rgNhZri#h!rj)O8rkSNPrltGirmh#'rnm_7roj@HrpKdUrq$-^
rqQKg!;Z`mqYpHjrn[V1s8N#prVl]nqYp<ipAX^`nc&"Vli-,Ij8S!9h>Z")df.Sla8X!U^AbM=YPtR$
U&LS]QMusEM>i2-If=WlF8g+WCAqiE@/aI2>5hP$;uTVm:B!rd9)_B\8,c!W7K,^J6eXm+61I3k5_21O
5_22;5lO('6M3_F7/fXS7fGpW8H)6\9E%]c;#XDm<W62$?2e72B)ZQEDuOhWGlE0kK`6l.O8bIESGo5]
WrB4$[/Rf=_Z%UTci2Dmf)FM)i;Vd9kl0oIn,DkVo`"R`q>U3jqZ6Tkrr)`nh>c4/rr2oqrqucmrqcWg
rq69]rp]pSrp0RFro3q7rn7;$rm1Serl+lOrji$7riZ6rrh'1ZrfR2>reUQ(rd=]hrc%jRrbDFBra>_2
r`K/"r_i_lr_EGdr^m)[r^ZrWr^HfSnjCekrBPp!JO"cOJO%LGc9h1kr^?`Sr^QlWr^d#[r_3;cr_WSl
r`9##ra#M2raYqBrbVRQrce?grdb!(rf-o>rgWn[rhTOrrj2U7rkJHOrlb;erm^r#rnm_7roO.FrpB^S
rpp']rqHEgrqc]n!W;lprVlfMs4[MPrr2lqr;QTmqYp6gpAX^`nG_kTm/H/Hj8S!9g]#e'df.Jia8WsT
]Df5;YPtI!U&LV^Pl?aCMuJ>-If=ZmErKtUC]7oE@fBa6=oMM%<W5kp:]=)f9)_E]8H)*U7K,^J6d\7!
62X$"5__OT5_22P5kmXj6Mj.I7/fXP7fGsX8cD?]:&[rf;>sSp=8lA%?iFO6Ac?KEDuOeVHN&BmK)U]-
OT(LDSc5A_VuEn![Jmf;_Z%UTbl6&ifDaP(i;Vg:k5O`Hmf)_To`"O_p\t$gqZ-Npr;?Qmrr1XOgAh0O
rr)iorql]krqHEcrq-3[rpTjQroa:Bro*k3rn.5!rm1Scrl"fLrjVm4ri5sorh'1Vrf[8@re19$rdFcf
rc.pTrb)4@ra5Y0r`T5$r_i_lr_NMdr_!/]qa^WTr^?<EcpIXsJO"rTJO"cOf0IMGogAUEqaUQTr^m)]
r_*5dr_`Ymr`9##r`oG0raYq?rbh^TrcJ-frdk'%rf6u@rg3VVrhTOnrj)O5rk8<LrlY5drmUkurnRM3
roF(Arp9XPrpg![rq69brqcWk!;llqr;QZorn@D(s8N#srVl`oqu6Bip\smco)A.Xmf)JMkPjN@hu;@/
f)F%qbl5Z^_#CtF[Jm?.W;`OjSGniROT(.:L&QT$H2_pbDuOPOBDuE??iF:/=oMG#;Z9Jk:&[ic9)_E]
8GbmU7K,^G6e4Tn6N09%5a=Tc5_22_5lO'd6M3_F7/fXP7fGpW8cD?]9E%Zb:]=8k<W6/#>lJ+0A,^-?
C]88OFT-RbJ,Y-#MZ/_:QN!ERUAh+jY5Yj.])KMEa8X9]d/MVqg]$+0j8S3?l2L,MnG`"XpAXgcq#:0i
quHZrrVcWmgAfe)rr2fnrquckrqQKdrq$-ZrpTjOroa:Aro!e2rn7:urm(McrkeZJrj_s3ri?$prgs+W
rfd>?reLK)rd4Wfrc8!Trb;@Dra>_2r`fA'r`&knr_NMer_*5_r^d#Yr^QcRr^?EHejAjmr]u*#PsBmc
JO&?_r^"Cfqa:6Kr^H]Rr^ZrZr_!/_r_<Afr_WSnr`B)'ra,S3rau.Drb_XTrce?grdt-)rf$i?rg<\V
rh]UprilC3rk8<JrlY5brmC_urnRM2roF(Brp'LOrpg!Zrq??crqZHh!;ursrVQTJs4@;MrqlZnr;QQl
q#:$eo`"F\n,D\Ql2KiEi;VR3gA]S#d/M;h`;[ON]Df,8Xo>=!T`1G[Q2ZjDM>i2-J,X`mFoH@ZD#S,I
@fBa6?2dt*<W5qr;#X5h9`@Z`8cD9U7fGgB6f16"6N09%5a=Tc5_22_5lO'm6LmM@7/07N8H)3[9)_N`
:B")h;uThs=T2V*@/aX7B`;iIE;k"ZHN&EnK`6l.O8bFDS,T)[WW'("ZMqK8_#D:Oc2Q)he,J)#h>Z@3
k5OTDm/HJQo)A:\p\t!fqYU0jr;llqqu5=LeGoFErquclrqZQgrq69^rp]pTrp0RIro="9rn[S)rmLel
rlG)VrkJH@riuI)rhKIcrg`tNrf6u8rdk&trd4WbrbqdQrau.>ra5Y0r`T5%r_i_lr_NMer_*5_r^m)[
r^ZrWqaLKPlpKu'eO'7$JO$G)JO"cOr^"(]njE:Br^H]Rr^ZrYr^m)]r_*5ar_NMjr_i_sr`T5*ra5Y7
rau.Hrc%jWrd4Wnrdk'+rf6u@rg`t[rhKIprj)O3rkJHNrlG)brmUktrn[S3ro="Arp'LNrp]pYrq69c
rqZQiqtpHm!WDuHs4%)Jrr2lqr;QQlq>U0gpAX^`nc&"Vli-/JjSn-;hu;:-eGdhobPoN\_>_%F[JmB/
W;`RkT)P&TOoC@>K`6Q%If=NiF8g+WC&V]C@fBa6>Q.e)<W5qr;#X5h9`@]a9)_E]8GbpV7f,XO7.iq2
6IeDR6*3G(6%M>16Mj.C7/fXP7fGpW8H)3[9)_K_9`@fd;#XDm<W6/#>lJ+0@fC!=C&W&MF8g@^If=ot
K`6u1P5^dHT)PJ`W;a""[/RZ9_>_IRbPolfec+5#hu;X7jSnECm/HJQnc&1[pAXjdq>U6ir;QWprW3#t
eGn%urr2fnrql]krqZQerq-3]rp]pSrp0RFro="8rnIG'rmLekrlP/WrkABArj)O)rhf[frgNhOrf@&7
re19#rd"Kcrc.pSrb2:Bra>_2r`fA&r`&kqr_WSir_EGcr_!/]r^d#YqaUHOr^>O/r'Q$%L-gGXJO7sT
g-ba*r^HTOr^ZrYr^m)]r_*5cr_NMir_rerr`9#&ra,S3ral(Crb_XSrcS3crdXp"reUQ7rfmDNrh07f
riH+)rj_sArkn`Vrm(Mkrn%/(rnm_7roO.FrpKdTrq$-^rq??erqcWkrr)fp!WN)Js4%)JrqlZnr;QTm
qYp6gpAX^`nG_kTmJc>Kjo49=hYu7.ec*qpbl5Z^_#D"G\,NW2X8]!qTDk;YQ2ZgCM>i2-J,XcnG5cI[
D>n;LAH$$:?iF:/=oMM%;Z9Ml:]=,g:&[ic9)D3Z8GbpP7efF@7/]K(6\.UU6\.VM6gmG<7JK@O8,GjV
8c)-Z9`@cc:B"&g;>sJm=8lA%>Q/"/@fBp;CAr&KE;k%[HiANoK`6i-NrG=CRf8rYVZ*XqYl;-2]DfVF
a8X9]d/MSpg&Bk-ir8*>kl0uKn,DhUo`"O_p\t$gqu6NmrVc]rrr1FIeGoOIqu-Nlrql]krqQKdrq69]
rp]pTrosFFroF(:rnRM*rmLekrlY5WrkABCrj)O+ri5skrgj%VrfI,<re^W*rdOimrcA'Xrb_XIral(;
ra5Y/r`T5$r`&kpr_WShr_<Acqb-fXr^cfSpdXR<JOP,YJOP,Y]LDTbpdb3Pr^m)^qb6u`r_NMir_i_p
r`9#$r`oG0raGe:rb)4Irc%jXrd+Qlrdk'*rf-o=rgEbVrh9=kriZ7+rjr*CrkeZWrm(Mkrn.5)ro!e:
roa:FrpKdTrpp']rqHEerqcWkrqucorVcisrm^tqs8N#prVl`oqYp<iq#:!doD\=[n,D\Ql2KiEi;VR3
gA]V$dJhGj`W!aR^AbP>ZMq$+V#I%dSc4iPOT(7=K`6Q%If=NiF8g+WD#S,IAH$!9?N+4/=T2A#<W5nq
;>sAj;#X5h9`@]a9))!W8GG^@7Y+$[7Y+$[7_D4c8,GjS8cD?]9E%Wa:&[ug:]=5j;Z9\q=8l>$>lJ(/
@/a^9BDu`HDuOhWG5csiJc:?%NW,%=PQ%-PU&LkeY5Y^*[Jmo>_>_FQcMl5jeGe2$h>Z@3k5OTDm/HJQ
nc&.ZpAXgcq>U6iqtp?krW)uHs3CZDrqlZnr;QQlq#:$eo`"F\n,DbSli-,IjSn-;hYu1,eGdenbPoK[
_#CtF[f3Q2X8\spT`1G[Q2ZmEMuJJ1Jc:)sGlDgaE;j_RCAqfDA,]j7?N+1.=oMJ$<;ohq;>sDh:]=,g
:&[i`9DD-F8bP`,8;p)j8:a=c8E3;:9)_K\9`@cc:A[id;#X>k;uTer<rQ8$>Q.t.?iFO6Ac?HDD#SDQ
FT-RbIK"fsLAm,1OT(RFS,T)[VZ*XqZ2V32]DfVF`r=0\ci2Gnf`'b,iVqp;kl0lHmf)\So)A:\p\t!f
qYU3irVQQos3gqms8N#prVl`oqYp<iq#9sco`"C[n,DYPl2KfDj8Rs8g]#h(e,IVkaSs-W^Ab_C[Jm?.
WW&^mT)P/WPl?^BMZ/A0JGsrqH2_j`DuOVQB`;WCAH$!9?N+4/=T2D$<rQ(t;uT\o;>sDk:]=,d:&%EJ
9D2#08rQAn8qBUg9&iS>9`@c`:B"&g;#X>k;Z9Vo<;oqt=8l>$>lJ(/@/a^9B)ZKCD>nMRErL@`I/\Zq
LAm)0NrG:BRJrfWV#I@mY5Yj.\c0>B`;[mXc2Q2kfDaP(hu;X7jo4NDm/HJQnc&.Zp&=acq>U6fr;QZl
rW)uHs3CZDrqQHkqYU*fpAX^`oD\7YmJcGNkPjTBiVq[4g&BS%d/M8gaSs!S]`,G?Yl:a'W;`IhSGnrU
OoCC?MuJA.JGsurFoHI]DuOVQC&VcE@fBd7?iF=0>5hY'<rQ+u<;oem;>X2h:]=2f:]=,W:&I_:9SQ5l
9S#mh9^GLN:A[id;#X8f;#X>h;Z9Yp<W6%u=T2M'>lJ+0@K'a8BDuZFD>nJQErL4\IK"crKDpf.NrG1?
RJrcVT`1nhXT#I'\Gj/?_#DFSbl5ugf)FA%h>ZC4jSn?Ali->OnG`%Yp&=[aq>:$`rVQQos3gqjs8N#p
rVl`oqu6Hkp\smco`"@Zn,DbSlMfuGjSn*:h#?"+df.Slc2P]]_Z%:K[f3T3YPtI!U]-nbR/W<KO8b%9
LAlc'If=ZmGQ)U]DuOVQB`;TBA,]m8?iFC2>Q.h*=oMP&=8l8"<W5ts;Y!]a:]=2b:Ou;m:Ou;m:WQ?2
;#X8i;"[]b;Z9Vo<W6%u=8l>$=oMV(>Q.t.?iFI4A,^*>B`;lJDuObUGQ)pfIf=otLAm)0O8bCCR/W`W
U].1jYPtm-[f4#?_>_FQc2Q)hdf.r!h#?72jSnBBlMg5Nn,DhUo`"O_p\t$gqu6NmrVQTjs3gqjs8N#p
rVl`oqu6Hkq#:!dp&=R^nc&"Vli-/JkPjH>hu;F1f)F.tci2&c`;[RO])K/;Z2Ug'VZ*=hSGnoTPQ$UA
MZ/D1Jc:,tHiA0eF8g+WD#S/JBDuH@@fBd7?iF@1>lIq+=o2>#=8l7t<Vobm;tNt=;Lq_s;Lq`b;Z9Vf
<;ons<rQ1t=T2J&>5he+?2e41@/a[8AH$6@C&VrJDuOeVFoHaeIf=otL]321NrG7AQi<NSUAh(iX8]C'
[Jmc:_#D=Pao9Wce,Iqth#?10iVr$>l2L#Jn,DkVoD\F^p\sseqYpBkr;QZlrqcZCs3(HArqQHkr;QQl
q>U0gp\sgao)A+WmJcDMkl0WAiVqa6f`'G#dJhDiaSs*V^Ab\B[/R9.WrAmpT`1J\R/W6INrFt9K`6Q%
J,X`mG5cR^E;jbSD#S)HB)Z?<@JaF2?2e+.>Q.h'=Sl2!<piu]<In,.<.S#"<8(=9<Vohr=85ns=oMY)
>lJ%+?iFI4@K'g:Ac??AD#S>OE;jqXG5cddJ,Y'!K`6o/NrG1?R/WWTT`1hfWrB4$[/RW8^Ac%LaSsH`
dJh\qf`'e-iVqm:kl0lHmJcSRo)A:\p\sseq>U6iqtp?hrqcZCs2G$;rqlZnr;QQlq>U0gp&=U_nc&%W
mJcGNkPjQAi;VR3g&BP$d/M;hb5T9W^](nF[/R</Xo>0rUAgeaRJrKNOT(4<M#N&+JGsurHiA0eF8g.X
DuOSPC]8#HB)Z??@fBg8?iFI4?i+1/?2e*t>Q%as>(Kh;=b0_,=l<HO>45\p>lJ%(?N+@3?iFL5@fBp;
B)ZKCC]82MDuO_TF8g=]HiAHmJGt3#L]383OT(OERJriXUAh"gXo>U)[/R`;^])+Lb5TWad/MSpg&Bh,
i;Vg:kPjfHmJcVSnc&.Zp&=acq>U6fr;QZlrqHH@s2G$;rqlZnr;QQlq>U0gpAX^`oD\7Ymf)VQl2KiE
ir7j7g]#k)e,I_nc2P`^_Z%=L\c0#9Yl:[%VZ*=hT)P/WPl?dDN;e\5KDpH$J,XcnGQ)aaEW0qVDuOPO
CAqrHBDuNBAc?3=@f'U5@/++%?N"1'?%H7>>_-.2>hWHU?1M>!?iFI1@K'a8A,^'=B)ZHBC&VlHC]88O
E;jkVFoHXbHN&EnJc:<$M>iJ5OT(LDRJrfWUAh%hWrB7%[Jm`9^]).M`r=6^d/MMnf`'Y)hu;X7k5OWE
mJcSRnG`%Yp&=[aq#:*gqYU3irVQTgs3gqds8N#mrVl]nqYp<ip\smco`"C[nG_nUlMfuGjo46<hYu:/
f)F.tci2)d`r<gR^Ab\BZi70-WrApqT`1M]Rf8NMOoCC?M#N,-Jc:3!IK"QlFoHL^ErL%WDZ4MPC]8)J
B`;W@Ac?6;A,]s.@JsSb@"D^:@"D_2@.dt*@fBm7AH$0;B)ZKCC&VoID>nJQE;jnWF8g=]HN&<kJGt-!
L&Qo-NrG.>PQ%$MSc5;]VuEarYPtm-\Gj5A_>_FQb5T`de,Iqtg]$(/iVqs<kl0lHn,DhUnc&1[p&=^b
q>U6iqtU-erqHH@s2+g8rqlZnr;QTmqYp<iq#:$eo`"F\n,DbSli-/Jjo49=hu;@/fDa;!d/M8gaSs$T
^](nF[/R?0Y5YC!V#I"cSc5#UPl?dDNW+h7L&Q`%J,XipHN&*eFT-@\E;OSND>nAHCAV`EB_5s8BDuLo
AVjuLAV"FKAc$*.BDZBAC%uH?D#S;NDu4MQF8g=]G5cgeI/AEmK)UK'MZ/S6OT(LDRJrcVTDkYcW;`t!
Z2V-0]`,YE_>_OTbPolfeGe,"gA^"/ir8'=l2L#Jmf)\So)A:\p\sseq>U6iqu6NmrVQTas3gqas7lTm
r;QTjqYp<iq#9sco`"C[nG_hSli-)Hjo46<h>Z.-f`'=ucMl#d`W!aR^](eC[f3Q2Xo>=!VZ*7fSc5)W
Pl?gENrFq8M#N/.K)U<"If=]nH2`$eFoHL^F8g1YE;jeTDY7lGD"MN@COp2SBn9uLC"I(fC\qrFD>S5M
DuO_TEW1%YFT-F^GQ)meHiAKnJGt0"LAm#.MZ/Y8OoCUERf8lWT`1hfWW'%!Z2V01\c0AC_Z%ORbPoie
df.nugA]q-iVqp;kPjfHmJcVSnc&.Zp&=acq>:$fqu6Ngrpg$:s1JC2rr2lqr;QTmqYp<iq#:!do`"I]
nG_kTm/H5Jk5OH@i;VR3gA]V$df.Slb5TE[_>_1J])K/;Yl:d(X8\poU&L\`Rf8WPP5^RBNW+k8LAll*
K)U<"If=`oHN&3hGlDjbFT-@\Er0kLE;+;KDh2e\DLl\VDV&e!Dt7lHEVjeUF8g:\FoHXbH2`-hI/\To
JGt0"K`6`*MuJ_8OT(FBQi<HQTDkSaV#IFoY5Y[)[f3i:^AbtJ`W"$Zci2AleGe2$h>Z@3jSn<@kl0rJ
mf)_ToD\F^pAXjdq>U6iqu6NmrVQT^s3gq[s8N#mrVQKkqYp6gpAXaao)A.Xn,D\QlMg#Hj8S$:hu;@/
f)F+sd/M8gao93W_>_1J\Gil7Yl:d(WW&doT`1P^SGniRPl?gEOT(7=MuJJ1K`6W'Jc:3!J,XorIK"Wn
HiA?jH2)X`G5$+[F`i7WK62ZdJTT:]qfVdZpiud`rd+Qjrd=]nrdOirrdb!!re(3(reCE1rf-o=rfR2E
rg*PRrgs+^rhf[oriQ1(rjDa8rkABIrkn`WrlkAgrmLetrn@A/ro*k:roj@Hrp9XQrpg!Yrq69arqH<d
rqlKhqu6$`df6u[qu6KkrqucmrqcWhrqHEcrq$-[rp]pTrp0RJroX4@ro*k4rn7;&rmLelrltG_rl"fO
rk/6@rjMg1riQ1#rhf[irh'1\rgNhRrfmDFrf@&<reg]2reCE+re19&rdjrsrdXorpjDscqKd^=JU2ln
JU5C`rd4EfrdOirqgeZsrdt-&re:?+reUQ2rf-o<rf[8Frg<\Rrgj%\rhKIiri?%$rilC1rj_s?rkSNO
rl>#_rm:Ymrn%/'rn[S4roF(@rosFJrpKdTrpp'[rq??crqQKhrql]mrr)Nhmf1`8\c;[.qu-Nlrql]k
rqZQgrqHEarq$-[rp]pSrp0RIroX4@ro!e3rn@A%rmUkmrltG`rl+lPrk8<Crj;[1ric=&ri#gmrh9=`
rgj%Vrg3VKrfR2Arf6u:repc5reUQ.re:?)re(3%qgnNmrdXot!.TQLJU`6#JUc'srdautomm$mrdt-%
re19)reLK/reg]5rf$i:rf@&@rfmDJrgEbVrh'1`rh]UmriH+&rj)O1rk&0DrkSNPrlP/arm1Slrmh#%
rn[S3roF(@roj@IrpKdTrpp'[rq-3arqQKgrqcWkrqucoqu5gZdf6lXq#:0hrquclqt^6crq??`rpg!W
rpTjPrp'LHro=":rnm_0rn7;%rm:YirlkA]rkn`NrkABCrjVm4rilC)ri5sqrhTOdrh'1]rgWnTrg*PJ
rfd>DrfI,?rf6l8rf$W0reUH,rJ#lXJVJ`1JVMI)reLB,pkns-rf-f8rfI,Arfd>Grg*PNrgWnYrh'1_
rhTOkri5t#rilC-rjVm<rkABIrl"fUrlkAerm:Yqrn.5)rnm_6ro="ArosFJrpTjUrpg![rq69brqZHf
qu$Hlq#9LWdf6lXq#:0hrquQfrqQKdrq69^rpp'WrpKdOrosFEroF(;rnm_0rn7;#rmC_krlb;_rl4rR
rkJHFrj_s8riuI+riH+!rhf[jrhBCbrgs+ZrgNhSrg<\MrfmDGrf[8CqiLf<qi:E1!KE(iN.[(?N.Hr8
N;JV-Nr+q8P5^[EPl?sIR/WNQRf8iVT)PD^UAgtfVZ*UpXT#F&Z2V01\Gj/?^AbtJ`r='YbPoiedf.bq
g&Be+hu;U6jSn<@l2L#Jmf)\Snc&.Zp&=^bq"X^_r;QZirojC1s0Mb)rqQHhqu6Hkq"sgbo`"F\nc&%W
mJcGNkl0`Djo43;hYu@1fDa>"df.Vmc2Poc`W!dS^](tH]Df>>Zi790YPt['WrAsrV#I+fU&L_aT)P;X
S,SlUR/<6LQ2[$@PQ$^FOn4]dOH5KSOF`MOOS+b5P4b%<Pl?sIQi!0IRf8fUSc58\T`1YaU].(gW;`gr
Xo>O'Z2V*/\Gj)=^AbnH_Z%ORbPoccd/MJmec+2"h>Z=2i;Vj;kPj]Eli->OnG_tWoD\C]p\Xa_qYpBe
rVQTUs3gqOs8N#mrVl`oqu6Hkq>U0gp\smco`"C[nG_nUm/H;Lkl0]Cj8S!9hYu:/g&BM#df.SlcMl#d
aSs-W_>_4K]`,MA\Gil7ZMUm*Y5YO%W;`^oVYd.fUAghVTD4uUSFE&"S!'7lRt7'kS*?I<Sb8WPT_kJ_
U]..iVuEXoXT#@!Yl;!.[/RT7])KAA^])+L`;[jWb5T]cci2AleGe/#g]$(/i;Vd9jo4KClMg/Ln,DhU
nc&1[p&=^bq#:*gqYpBkr;6Hirnmb(s02OurqlZnr;QQiq>U0gpAXaaoD\=[nG_kTm/H;Lkl0`DjSn*:
hYu=0g&BV&ec*tqci2/fao9?[`;[RO^](tH])K5=\,Nc6ZMq*-YPYI$Wr&dpVuERdV>-hbU&^m<Tn/ng
Tn/oeU&1SZU\1J_VZ*LmWV`^pXo>L&YPtd*Zi7?2\,Nr;])KGC^])%J`;[dUao9N`cMl5jec+2"g&Be+
hYuI4jSn<@kl0lHli->OnG`"XoD\F^p\sseq>:$cr;QZirnmb(s/Q+urqQHhqu6Hkq"sgbo`"I]o)A.X
n,DbSlMg#Hk5OB>iVqa6hYu:/f`'D"df.SlcMl&eb5TBZ`;[XQ_#D(I^&GVB\Gir6Zi790YktX'Y5YR&
XSAjqWqWInWMtHIK;a@"JZ-tpql0ImpoFCqriQ1&ric4'qm-4-rjMg9rjr*BrkJHJrkeZPrl+lZrlb;d
rm1Slrm^r"rn@A.rnm_6ro3q>roj@HrpKdSrp]pXrq$-]rqH<bqtg<hq#1*hh#Gh&VuQbqq#13irql]k
rqZQgrqHEcrq69]rp]pUrpKdPrp0RIroX4@ro!e5rndY.rn.5%rmLemrm1ShrlkAarl4rVrl"fPrkSNJ
qn<!Arji$<rjVm8qmHF1qm5t$!3u.#JZt3>JZs^0i3;mZo!88$qm?@1qmQL5rj_s<qn2pArkJHJrk\TP
rl+lVrlY5arm(MhrmC_nrn%/&rn@A.rnm_5roF(@roj@IrpB^QrpTjVrpp']rq??crqQKgrqcWkrquZl
qu51Hdf66Fq#:0hrquclqt^6drqHEcrq-3\qsaUQrpB^Mroj@EroF(<rnm_3rnRM,rn%/"rmUkorm:Yi
rlb;`rlP/Zrl+lTrkeZNqnN$Ark/6Bqmu[8osb"2mC.YTQ*u7PJ[XUIo!e2"rjhg8rk&0Brk8<FqnN-H
rkeZQrl+lVrlP/^rlb;drm1SkrmUksrn%/'rnIG/rnm_7roF(ArosFIrpB^QqsaUVrq-3`rqHEerqZHf
qu$Hlq#8kEdf6$@rr2]kqtpBhrqZQgrqHEbrq-3]rpg!WrpTjRrp0RJroX4@ro="9rnm_3rnIG*rn%/"
rm^qqrm:Yjrm(MerlY5^rl4iSqnrEMot^I>rkA-?mCe(`Q+V[\J\:$Ul+Qu.rkJ$>qni?Mrl+cSrlP/_
rlkAerm1SjrmLeprmh#"rn7;*rndY3ro!e9roO.ArosFJrpB^Rrp]pWrq$-]rq69brqQKgqtg<hq#1*h
e,RkrT)\fhq#13irql]kqt^-`rq??`rposUrpTjSrp0RKroj@DroF(<ro!e5rndY0rn@A)rmh"trmUko
rm:Yjrm(Dcqoeu]rlP/\prEBRqo/EMe\m$VXi#_-J]#RIrl+cSqoA]WrlP&[rlb;cqp,2erm:YlrmUkr
rmh#$rnIG-rndY3ro!e8roF(@roj@Grp0ILqsaUVrq-*]rqHEfqtg<hrquZlqu4k?df5p=q#:0hrquZj
rqcWirqQKerq69_rq$-Zrp]pUrpB^Orp'LHroa:CroF(<qr%J1rnRD(rn.+urm^qqrmCVirm1Shqp##^
qoeWSq9%F5J]P(:J]ND`rlF$>l,s"Kp!!E[qp,)cqpPAkrmgnurn7;+rn[J0ro="=roX4Croj@Hrp0RN
rpTjUrpg!Zrq-3_rqHEerqZHfrqlTjrr)Wkc2Z5lR/d0bq#13irqlThrqZQgrqHEcrq69^rpp'Yrp]pU
rpKdOrp'LHroX4AroF(<ro*b3qq_8*rn7;'rmptsqpYPmqpG2crm1SjpWrQZJ^05"J^/hlg<T05rm:Yj
p!E]cqpPJmrmgnsrn.5'rn@A-rndP0ro*k9roF(?roX4DrosFJrpKdSrp]pWrpp'[rq69arqHEerqZHf
rql]mq#1*hb5]oiQ2gj_p&4mfqtpBhrqZQgrqHEcrq69_rpp'YrpTjUrpKdQrp0RKrosFFroX4@ro3q9
qr%A/qq_8,rn@%urn.5%rmpVi!S,`be:H)<dt,u!e*kcGeFM/hf)F:uf_aA!gAB\)h>?+,i;;O5jSn9?
kPj`FlMg,KmJcPQnG_nUnc&+Yo`"O_pAXgcq#:*dqYpBhr;6Hirl"ibs-<WWrr2lnr;6BjqYU*fp\sm`
p&=U_oD\:ZnG_nRmJcJOlMg&Ikl0`Ajnn*;ir7m5htZ%,h"BG$g@X(Zfn%eIfR_\+f^.8Eg&'M#g\]e$
h>Z=/i;;O5j8S0;k5OTDl2KuFm/HDOn,DhUnc&.Zo_\=\pAXgcq>:$fqtU*grUp0.s3gq.s82fgrVl`i
qYp9ep\smcp&=U_oD\=[nc&%Tn,D_Rm/H>Jl2KoGk549;j8S'8iV;@1hu;R2htZ(,h1=C5h1=C5h9OjO
hYZ40i;VX,i;V^4ir8!;jnn3;kl0iGli-8MmJcSOnG_tWo)A7[o`"O_pAXg`q"X^_r;6Hcrk\W_s+^RQ
rqQHkr;6BdqYp9ep\smcp&=U_o)%tVnGD\RmecDKli-2Hl2KoDkPjW:jRqR0ir%eeiJ-<BiITt>iUZ"*
j7;:.k5OQ@kl0iDlMg,KmJH>Nn,)VRnb_nVo`"O_pAXg`q"X^bqtp<drVQT(s3gq%s7QBdr;6BjqY9mc
p\sm`p&=U\oD\=[nc&%Tn,DbSmJH8LlhfuHl14'8kOdp7k(2WKjalNEjk&V_k5OQ4kl0iDlMg,Hm/HDO
mf)\PnG_tWo)&%Xo_\=\pAXg]q>:$fqtU*[rj`!Vs+C@HrqQHkr;6BdqYp9bp\smcp&=U\oD\=Xnb_hT
n,DhUn,DbPmIfi@lLa<Al03c_KBRmMJ`tMFp$)8:o'HACqsOIQrpTaRrpfmVrq$$Zrq69aqtL!_q"k!e
qu$6fq#7T!df4muqZ$?iq#13iqtp0bqt^6dq"Od]qt9s\rq$-[qsjINrpTjUo'c5=JaS*WJaS*W`U<<c
rp]pUp$htNrpp'[rq-3_qtBgZqtU0dq"k!equ$6fq#78mdf4muqZ$$`q#'parqc3]q"ORVq"4@Qp%&"M
o^IG$Jae6[JagYJrpfRMq"+:Qq"=FVp%eL]q"sjan,B<ddf4munc/C`o)8Rcqtp'_qt^6dq"ORWqt9OP
mdgJNo7?Ibnq$@_o$R%!oBc,Kp%\7Up\Xabq==C]qtp<arV6Abs3gpus60LUrpp$_r;6BaqY9m]pu;&A
pOW$sp4;pgp=f5op\=OYq==C]qtU*^rUTrSs3gpus60LFrq63Uqu6HFq=aW8pl,!!pjr4opsJp7qXXOS
r9"!Fs3gpus4RGFrosCYr:9aEqLSKoqLSKoqQp%kqt9mRrUTrGs3gpus2=s+rm:TErV_<FKD^;uJc*pn
dJ`P5JcG?Adf4mu`;dUO!<%KIJc1/uJc4*s]`*K^oDd8=JcD2=kl-/4Jc:6"Jc<+WJcEsodf4muJcC<$
JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$
df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$
JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0u
JcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$
JcC<$JcF0uJcD2=kl-/4Jc:6"Jc<+WJcEsodf4muZN':jjo'c/Jc1/uJc3.Xl2H86iW%@+JcE[gn,C]4
!WDtJr.Four.4dnr6bK3rdk+@s3gpus4RGFrosCYr:9aEqLSKoqLSKoqQp%kqt9mRrUTrGs3gpus4mYR
rp9UVr;6B[qVq:$pjr3kpjr4Hq!\(Yqss[OrVleSs3gpus60LUrpp$_r;6BaqY9m]pu;&ApOW$sp4;pg
p=f5op\=OYq==C]qtU*^rUTrSs3gpus7--arpp$er;6BaqYU*fq"XUYpA=ORo^;;OoCIP(KCXTaJb%4Z
o(25?rq6'[q"O[\rqZ-]rqlTjp&4[bT`<I?JcG9?o)8I`qtpBhqt]p[rqH<`qt9s\p%.kIlgY#GnU^1^
n:C([nBpalnac8JoDA1Zp%\7[p\"=\q>:$fqt9m[rLj2=s+14Hs7lTgrVl`lqtU$bq>U0ap\sm`p&=U_
oD\=XnbDVQn,DhIn+?%!mXaeWmXafFmdfiGnG_nLnG_tWo)A7[o`"O\pA"CZq#:*aqYpBhr:p6cri,qG
s+C@HrqQHkr;6BdqYp9bp\smcp&=U\oD\=Xnb_hTn,DhUn,DbPmIfi@lLa<Al03c_KBRmMJ`tMFp$)8:
o'HACqsOIQrpTaRrpfmVrq$$Zrq69aqtL!_q"k!equ$6fq#7T!df4t"o)8Rcq"ssarqQBbrq?6^rq-3\
qsj[TqsX=Iq!7_>puq;3qrRn?J`VIEJ`VIEeE-Acp#l,6q!%S>q!J(LqsaUTqssXVrq60^rqH<brqZ?d
qu$-cZN&AQLB%8Pq#13iqtp0brqQBbrq??arq-3\qsj[TqsXOPqsF:Hrp'CFroj7BroWn7p#Go.r8N:d
L>d^BJ`55>o&BQ,o&T]1roa1Bros=Frp0RNqsOIPqsaUTqssaYrq69arqH<bq"k!equ$6fqu4,*df5C.
qu69erquQfrqQBbrq??arq-3]rpp'Yrp]gRrpB^Orp0IGroj@DqrR_8ro3h6pu)//ro!\2ptku*J_bn5
J_bn5cJA9PqqqD2rnmD,ro*b6ro=">qr[e>rosFJrp9XOrpTaRrpg!Yrq$-]rq69arqH<bq"jmcqu-3e
_>hs`P5kO\p&4mfqtp9drqQBbrq??`rq$-[rpg!WrpTjRrp9XMqs"+DroX+>qr@\8ro!\2rndY1p"]#i
rRh5)fn%e.fR_\+f[8@Ng$dYfh#?./hYuF0i;;O5j8S0;k54BAl2L#Jm/HDOn,DhUnc&+YoD\CZpAXg`
q#:*gqtp<arVlf4s3gq4s8N#jrVl`lqu6Hkq>U0gp\smcp&=U_o)A1Yn,DhUmf)VQli-2Kl2KlFk5OH@
ir7p6i;;F/h>Z4/g@a.uf`'M%f(%8ke^`p6J^^+;J^]2!n'g=Ho%!`jrn%&"qq:l#qqV2,qqq;/qr7V9
roO.BrosFIrp0RNrpKdTrpTjVrpp'\rq69arqHEerqZHfrqlTjqu-Ek`;e9cR/d0bq#13irqlThrqZQg
rqHEcrq69^rpp'Yrp]pUrpKdOrp'LHroX4AroF(<ro*b3qq_8*rn7;'rmptsqpYPmqpG2crm1SjpWrQZ
J^05"J^/hlg<T05rm:Yjp!E]cqpPJmrmgnsrn.5'rn@A-rndP0ro*k9roF(?roX4DrosFJrpKdSrp]pW
rpp'[rq69arqHEerqZHfrql]mq#1*hb5]oiS,`Keq#13irql]krqZQgqtL*`rq69_rpp'YrpTjSrp9XM
rosFFroO.>ro3h5rndY0rn@A)rn.5$rmh"trmLenqp>>grm(Dcqonr\rlXuWJ]WJbJ]WJbbK9Y(rlauY
rlt>cqp>5grm^qtrmq)$rn7;)rnRM/qr%J5ro=">roa:Frp0RMrpKdSrpg!Yrq-3_rq??cqtU0drqcWk
qu$?irr1(?df5p=rr2]krqucmrqcNfqtL*`rq-3\qsaURrpKdOrp'LHroX4@ro3q8rnm_3rnRM,rn7;$
rm^qrrmC_lrm1Shqp##]rlY5^rlFlTrl4iSqS^q&J]"V-J]!&VaMe(sqo8NRrlG)\qo\o]rlt>crm1Sj
rmC_orm^qtrn7;*rnRM0rnm_5ro3q<roX4DrosFJqsO@Nrq$-]qtC$`rqZHfrql]mqu-Ekc2Z5lU&Y,k
q#1*erqcWirqQKerq69_rq$-Zrp]pUrpB^NrosFEroF(=ro!e5rndY/rn7;&rmh"trmLemrm1ShrlkAa
rlP/Zqo/HMrke?DqnN-EpV#t-J\78\J\6QHj1OWiqnE'Eo"b.>rkn`Sqo8WWrlb;brm(Mhrm:YmrmUks
rn%/&rnIG/rnm_5ro=">roX4Erp0RNrpTjUrpg!Zrq-3_rqHEerqZHfrqlKhqu5(Edf6-Crr2]krqucm
rqcWirqQKerq??`rq$-[rp]pTrp9XLroj@Ero=";ro!e4rnRM,rmq)!rm^qqrm:Yirlb;`rlP/[rl+lS
qn`9IrkJ?Dpq-O:qml^9pUBb'J[UWJJ[U-<i3r!]qmcX9qmuR7rk8<FrkJHJqn`9Lrl+lWrlP/^rlb;d
rm:Ymrm^qtrmq)&rnIG/ro!e8ro="@rosFIrp9XPrp]pXrq$-]rq??crqQKgrqcWkqu$?irr1CHdf66F
rr2]krqucmrqcWirqQKerq??arpp'XrpTjSrp9XMroj@DroF(:rnm_3rn@A(rn%.trm:Yjrm(MerlY5[
rl+lTrk\TLrkJ?Drk/6@rj_s:rjM^3rj;R/os+S&o<EkNO0F2>J["(:os+(nrj2L/rjDX3rjVm:rjhp=
rk8<GrkSNLrl"fTrl4r[rlkAerm1SkrmLetrn7;)rndY3ro!e:roX4Drp0RNrpKdSrpg!Yrq69arqHEe
rqZQirql]mqu-Ekf)O1uWrN(tq#1*erqcWhqtL*^rq$-[rp]pUrpKdNroj@Dro3q9rnm_3rnIG)rm^qq
rm1ShrlkAarl+lTrkeZMrkABFrjr*=rjM^1rj)O-qlg"%riQ1$poFCopSe1mWI_"#W.CmuW6qR@WV`^j
X8]4"Xo>L&YPYR$ZMq30[f3f9])KDB^])%J_Z%IP`W"$ZbPofdci2AleGe,"gA]t.hu;U6ir8*>kl0lH
mf)\SnG`"XoD\C]p\Xa_qYpBerVQTLs3gqLs8N#mrVl`oqu6Hkq>9pcpAX[_o)%nTm/H>MkPjWCj8S!9
hYu=0f`'J$eGdhocMl&eaSs3Y`W!^Q^](qG])K5=\,Nc6ZMq*-YPt['XT#7!WW&jnVuERgV#-q`U@=n.
Tou+#Tn/p"U#r*KU\1G[VZ*LmW;`dqWrB+!Xo>O'Yl;!.[/RQ6\c02>^&GeG_>_FQa8X0Zbl5oed/MPo
f)F>$h#?./i;Vd9jo4HBli-;Kn,DkVoDA7\p\t!fqYpBhr;6HlrnRP%s02P&rqQHkr;QTmqYp<iq#:$e
pAX^`nc&%Wn,D\QlMg#Hjo4<>i;VU4g]#n*eGdnqci25hbPoT^`;[UP^](nF])K5=[/RB.Yl:g)XT#0t
VuERjU]."eT^n`MSc,)JS:R/mRt7&[S*$4)SGo)VT(S`QT_kJ_U]..iVuEXoXT#@!Yl;!.[/RT7])KAA
^])+L`;[jWb5T]cci2AleGe/#g]$(/i;Vd9jo4KClMg/Ln,DhUnc&1[p&=^bq#:*gqYpBkr;6Hirnmb(
s0Mb)rqQHhqu6Hkq"sgbo`"F\nc&%WmJcGNkl0`Djo43;hYu@1fDa>"df.Vmc2Poc`W!dS^](tH]Df>>
Zi790YPt['WrAsrV#I+fU&L_aT)P;XS,SlUR/<6LQ2[$@PQ$^FOn4]dOH5KSOF`MOOS+b5P4b%<Pl?sI
Qi!0IRf8fUSc58\T`1YaU].(gW;`grXo>O'Z2V*/\Gj)=^AbnH_Z%ORbPoccd/MJmec+2"h>Z=2i;Vj;
kPj]Eli->OnG_tWoD\C]p\Xa_qYpBerVQTUs3gqRs8N#mrVl]nqYp<fp\smcoD\=[n,DbSm/H;Lk5OH@
iVq^5g]#n*eGdnqci2,eaSs3Y_>_4K]`,D>[JmK2Yl:d(WrAmpV#I+fT`1P^SGnuVR/WHLQ2[$IP5CC@
OSb+6Nr=q.N.HnJMh-e;Mr9N^N;/G4O8G%<Oo(==Pl?sIQi<EPRf8iVSc5;]UAh"gVZ*UpXT#I'ZMq92
\,O&>^AbtJ`r='YbPoiedf.bqg&Bb*hYuL5jSn<@lMg,Kmf)\Snc&.WpAXgcq>U6iqtU-eroO1.s1/1)
rqlZnr;QQiq>U-fpAX^`nc&%Wn,DYPlMg#Hj8S$:hu;C0g&BS%d/M>ibl5W]_u@IN^Ab_C\,N]4Yl:g)
WrApqV#I%dTDkG]S,SiTQN!-JPQ$^DOT(=?Nr+h8N;/;0M#2u+L4P)1L4P)1L<bPQL\lo&MYiA3NVeb8
OT(CAPQ$gGQN!9NS,T#YTDkM_V#I:kWrB1#Yl:s-\,Nu<^AbqI`;[dUbl5oed/MVqf`'Y)hu;U6j8S9A
l2L#Jn,DhUnc&1[p&=^bq>:$cr;QZirojC1s1/1/rqlZnr;QTmqYp<iq#:$eo`"I]o)A.XmJcGNkl0`D
jSn*:h>Z.-ec+%sci22gaSs0X_#D%H]Df2:ZMq',XT#0tV>d1fTDkD\RJrQPPl?gEOT(:>N;eb7MZ/G2
LAlo+K`6W'K):,oJGt&tJ,k(MIt<*#It<*sJ,XutJ+\?kJc:9#KDpQ'L&Ql,M#N;2MuJ\7NrG+=OoCUE
QN!<OSc58\U&LnfW;`mtYPtj,[/R]:^AbqI`W"!Yc2Q&gdf.ergA]q-i;Vg:k5OTDli->OnG`"XoD\C]
p\sseq>U6iqu6NmrVQTXs3gqXs7lQiqu6Hkq#:$epAX[_o)%nTm/H;Lk5OE?i;VU4gA]_'df.Slbl5]_
`W!^Q^&GSA[f3N1Xo>C#V>d7hT`1M]RJrQPPQ$^DO8b+;MZ/J3L]3&-L&Q`(K):)tIe\?jI/&'fH2r5A
H%C6lH%C7jH2Dp_Hi&3fIK"]mJGt0"KDpT(LAlu-M>iG4N;en;OoCRDQi<HQSc5;]U].+hX8]:$Yl;*1
\c0;A_>_FQaSsE_ci2AlfDaM'hYuI4jSn<@lMg/In,DkVoD\I_p\ssbqYpBerTO:0s1JC2rqQHhqu6Hk
p\smcp&=O]nG_nUm/H;Lkl0WAiVqa6gA]\&df.Vmbl5``_u@LO^AbYA[/R</Xo>=!VZ*7fT)P8ZQN!-J
OoCIANW+k8LAll*KDpH$JGt&tIf=cpI/\KlHN&3bGlDm\FTHW-JTQNdJTQHbd<,8.qf_aZrd"Khrd4Wl
rdFcprdXotrdk'$re:?+repc8rfI,ArfmDJrg`tZrh07fri,n!rilC0rj_sArkSNNrlP/`rm:Ymrn%/'
rnm_6ro="Arp'LLrpTjVrpp']rq??cqtg<hq#1*hmf1`8]`8!1rr)iorql]krqZQgrq??`rq$-YrpKdP
roj@DroF(:rn[S-rm^qqrm1Sdrl4rRrkABCrjMg1riQ1#rhTOerh'1Yrg*PHrfI,=repc1re19&rdaus
rd=]krd"KfrcS3^rcA'Zqf2:JpM]tJJSp3[JSp$Vf5C8"no4SJqf;[WrcJ-^rcnEfrd+QkrdOisrdt-&
reCE1rf-o=rf[8IrgNhYrhBCfri?%$rilC1rji$Brk\TQrlY5drmLeqrn@A-ro!e:roX4Drp9XPrp]pY
rq69arqQKgrqcWkrqucoqu6$`df7)^rr2fnrqucmrqZQgrqHEbrq-3[rpTjQrp'LFro="9rndY.rn%.s
rm1Sfrl4rSrkJHBrjDa1riQ0urh]Uergj%Wrg!JGrf@&9reLK,rdt-"rdOinrd+QgrcS3^rc@sVqeu@L
ph]hCqJ(RrJSKaNJSN8@rbM:Fqel:Lrc%jVrcA'\rcS3brd"KirdOisrdt-'reUQ2rf@&Arg!JOrgj%]
rh]UnriQ1)rjDa8rkJHMrl4r]rm(Mjrn%/'rndY4roF(@rp'LLrpTjVrq$-^rqHEerqZQjrquZlrr2?c
df72arr2fnrqucmrqcWirqQKerq-3\rpTjSrp0RJroO.=rnm_/rn%.urm:YgrlG)TrkJHFrj;[0riZ7!
rhTOcrgj%UrfmDDrf-o7re:?(qg\Tmrd+QercJ-\rc%aQqec=KphK\?rb1q:r+H"@JRs[LJRsCDh.?Iq
mq;N2rb;.BqeZ7Krbq[QrcA']rc\9erd=Tmrdt-'reg]6rfI,DrgEbVrh'1cri#h!riuI0rk/6Erk\TT
rlb;frm^r"rn@A/ro3q=rosFJrpKdSrpp'\rqHEerqZQirql]mrr)`nnc.&;`W,r:q#13hrqcWirqHEc
rq-3[rp]pUrp'LGroO.<rndY/rmq(trm1Sdrl4rRrkABBrj2U-ri5sqrh07]rgNhMrfR2?reUQ-rdk'!
rdFclrcS3^rc8!Wrbh^PrbMLJrb2:Cqdob;qd]V7nmVK)JRF%:JRF%:c=$<RqdTP7qdf\;qe#h@rb;@I
rb_XQrc%jWrcA']rd+Qkrdb!!re:?-rf6u>rfd>Mrgj%]rhoarric=-rj_sArk\TQrlY5drmUktrnIG/
ro*k<roj@HrpTjUrpg![rq69brqZQirqlKhqu6?idf7;drr2]krql]krqZQerq-3]rp]pTrp9XJroX4?
ro!e2rn7;"rm:Yhrl4rSrkJHBrj;[.ri?$qrhBC_rgEbNrfI,<re^W-rdk&trd+Qgrc\9]rc%jSrbVRK
rb2:Cral(>qd]V7qdKA/nm;9#o3HoPO'I6@JR%,<mp5Kjqd9>1raG\5raYq<ral(@rb2:GrbVROrc%jW
rc\9crd+Qmrdk'%re^W5rfI,ErgEbVrhBCiri?%%rj;[7rkJHMrl4r^rm:Ynrn7;+ro!e9roX4Drp9XP
rp]pYrq69arqZQirqlKhqu6?idf7;drr2fnrquclrqZQgrq69_rpg!WrpB^Nroa:Aro!e3rn7;$rm:Yh
rlY5WrkJHFrj;[/riQ0rrhBCargEbNrfI,<reUQ+rdaurrd4WercA'XrbqdPrbMLHrau.?raPk8ra5Y4
ra5P/ra#M.mp#`oo3-]JO'.$:JQ^o6moo0ar`oG.pg3r-ra5Y5raPk;rau.CrbMLMrbqdTrcA']rd4Wm
rdb!#reLK3rfI,ErgEbXrhBCgriQ1)rj;[;rkJHLrlY5arm:Yprn7;,ro!e:roa:HrpB^Srpg!Zrq69c
rqZQiqu$Hlqu6?idf7Mjrr2]krquclrqZQgrqHEarpp'WrpB^Mroj@Aro*k6rn.5#rmC_irlG)VrkABB
rj;[.ri5sprh07\rg<\Irf6u9re19%rdXomrc\9^rc%jSrbVRHrau.?qdKA/ra#M.r`fA*qcN_sr`8Ge
p/QZCN)Y@-JQ1?&kuIU]r`Aksr`T5)r`oG.qd9>1raGe:ral(ArbVROrc%jXrc\9drdXp!re19/rf6u?
rg<\Trh07fri5t$rj;[8rkABLrlG)`rmC_qrn.5-ro*k:roj@HrpB^Rrpp'\rqHEerqZQirqlTkqu6Hl
df7Mjrr2]krquclrqQKerq??^rp]pUrp0RJroX4=rndY/rmh"rrm1Sbrl"fOrjr*;riuI'rhf[grgj%U
rfd>Breg]0rdaurrd+QdrcA'Wrb_XLrb2:AraPk7ra5Y1r`oG,r`];(r`B)"oi:ujmSj$^r_e;EM,Ah$
JPk6#qblcZqc*5gr`9#"r`T5(r`fA,ra#M1ra>_8rac"ArbDFLrbqdVrcS3drdFcrreCE0rf@&Brg<\U
rh9=gri?%'rjDa:rkSNPrlG)brmLerrnIG/ro*k=roj@IrpTjVrpp'^rqHEerqcWkqu-EkqZ#"DbQ%S@
qu-Nlrql]krqHEcrq-3ZrpTjSrp'LGroF(:rnRM+rmLelrltG]rkeZKrjMg3ric=!rhKIbrg<\Krf@&9
reCE'rdOimrce?]rbqdQrb2:BraYq8ra5Y2r`fA*r`T5&r`B)"r`/qsr_i;ar_NMipJ6?9JPUhmJPX?_
r_WSir_W8br_i_or`/qur`B)$r`T5(r`fA.ra5Y4raYq>rb2:JrbqdUrce?frdOitreCE0rf@&Crg<\W
rhKIjric=-rjMg?rk\TQrltGhrmLf!rnRM2roF(Brp'LNrpTjUrq-3_rqHEgrql]mrr)`nqZ#"DcN!nC
q#13gqt^6brq-3]rp]pSrp0RHroO.<rn[S,rmq(qrlkA_rkSNGrj_s3riH*trh07\rgEbJrf6u9re(3#
rdFcgrcA'Wrb_XKrb)4>ra>_4r`oG+r`K/#r`/qsr_iVjqb[8fr_WJfr_DlUr(V`9L.m.lJP=ZhlqR@P
qbR2fr_NDfr_`Pjr`&ksr`9##r`];+ra5Y5raPk>rbDFLrbqdVrcS3grdb!#repc9rfR2Jrgj%]ri#gt
rilC3rk/6GrlG)_rm:Yqrn7;,ro*k;roa:HrpKdTrq$-^rq??eqtg*dqu-Tqdf7Vmrr2]krqcWirqQKc
rq-3[rpTjQrp'LFro="8rnIG'rmLekrlP/XrkABBrj;[-ri,mmrgs+Xrg!JDreg]0rdauqrcnE`rc%jR
rb2:CraYq8ra#M-r`T5&r`9"tr_i_mr_WJfr_E>bpe:QXnOe@)JP(JcJP*[Lr_*#[r_<8br_NDfr_`Yn
r`&ktr`B)%r`fA-ra>_8rau.Crb_XRrcA'`rd=]qreCE0rf@&DrgEbWrhTOmriZ7-rji$Brl"fXrm(Mk
rn%/(rnm_8roX4Frp9XQrpg!Zrq69crqZQiq#1*h!<:LIcN!nCqu-NlrqcWhrqHEarpp'WrpKdOroj@B
ro*k5rn.5"rm1Serl+lPrk&0<riuI'rh]UergWnPrfI,;reCE'rdFcjrcJ-Yrb_XLral(=ra5Y2r`fA)
r`9"tr_renr_WJfr_EGer_32^pe'jDp.9g+N(ALjJOnKcj%9#<r_*,^r_<AeqbR2fr_`Ynr`/qur`T5)
ra,S2raPk<rbDFKrc%jYrd"Kkrdk''repc;rg*PQrh07fri?%'rjMg<rkSNQrlb;erm^r"rndY5roF(B
rp'LNrpTjWrq-3arqZQiqu$Hlqu-Tqdf7_prr2fnrquclrqZQgrq??_rpp'Wrp9XKroX4<rn[S-rm^qp
rm(M^rkeZKrjDa2riZ6rrh07]rfd>Crf-o1rdk&trc\9^rbqdPrb2:Ara>_3r`oG)r`9"ur_i_mr_NMi
r_EGdr_*5_pdtHUpdaX>JOY2[JOY2[]LMZdqagTUr_!/_r_3;cr_WSir_`Ymr`/r!r`K/)ra,S3rac"@
rbVRPrcA'^rdOitre191rfI,Crgj%^rhTOrriuI1rkABJrl+l^rmC_prn@A-ro!e<roj@JrpTjVrq$-_
rqHEfrqcWkqu-Nn!<:LIdJs4Fqu-NlrqcWhrq??arpp'XrpKdNroa:@rnm_0rn.4urm(Mdrkn`Mrk&09
ric=$rh9=^rgEbIrf$i4rdk&trd+Qbrc%jRrb)4@ra>_3r`fA)r`/qsr_remr_NMgr_3;aqb$iZqagTS
pdX^@rBu3)JOG&WJOIdOmm["@r^Z`Sr^luZr_*5ar_EGgr_WSmr`&ksr`T5)ra,S3rac"@rb_XRrcA'b
rdFcsreUQ4rfI,Irgj%^ri5t#rj2U9rkJHMrlb;ermLeurnIG0ro="@rp'LNrp]pXrq69brqQKhrqlTk
rr)otdf7hsrr2fnrqucmrqcWgrq??`rp]pTrpB^KroO.=rndY.rmh"prlkA^rkSNGrjVm2ri?$qrh'1Y
rg!JCre^W-rdXonrc\9[rb_XLrac":ra5Y/r`T5%r_i_lr_NMgr_<Acr_!&Zr^coVpdY$ImmR+AJO=uU
JO=uUc9q%gpdOsIr^ZiVr^luZr_3;cr_EGgr_`Ymr`B)%r`fA/raPk;rbDFKrc%j[rd4Wore19-rf6uC
rgNhYrhf[qrilC2rk&0Frl>#]rm:Yprn7;-ro3q>roj@KrpTjUrq-3_rqHEgrql]mrr)fp!WN)Js4%)J
rqlZnqu6Hkq>U*eo`"I]nG_hSli-#Fj8Rs8g]#e'df.Pkao93W^AbYAZMps)VZ*7fRf8TOO8at7K`6K#
H2_scEW0hSB`;TB@/aI2>Q.\&<;ohq;#X8i:B!oc9)_E]8H)-V7f,XR7,10-6\.RY6@hIS6J"QX6i0:N
7JK@O8,c'Y8cD?]9E%]c:]=2i;uTer<rQ>&?N+@3Ac?ECD>nPSFoH[cJ,Y*"M#NJ7Pl@-NT`1hfXT#O)
\Gj5A_u@aVcMl8kfDaP(hu;X7jo4TFmf)_ToD\F^pAXmeqYpBkrVc]rrr1FIeGo=Brql]krqZQdrq-3[
rpTjQrp'LDro*k5rn.5#rmC_grl+lPrjr*:ric="rhKIbrg*PGrf-o2rdk&srcS3\rbqdMrau.=ra,S.
r`T5"r_i_lr_NMfr_3;`r^m)[r^ZrWpdP0MfgG[)g-U?VX[.M(JO.mSe3j+$qaLKRr^ZrYr^m)]r_3;c
r_NMir_reqr`T5)ra,S5rau.DrbqdVrcS3grdk'&rf-o?rg*PUrhKIkric=.rjr*Erl4r\rmC_qrn.5,
ro*k;rp'LLrpTjVrq$-^rqZQirqlQj!WDuHs4%)GrVl`oqYp<iq#9scoD\7Ymf)POkl0WAi;VR3f)F+s
ci2#b_u@FM[f3Q2Xo>*pT`1J\P5^L@MZ/2+If=]nErL"VD>n/HA,]j7>lIn*=8l+s;#X8i9`@]a9)_E]
8H)-Y7f,XR7-m;)6IeF%6%M;*5_21O5lO'[6LmM@7/fXP7fGpW8H)3[9)_K_9`@ie;>sJm=8lA%>lJ+0
A,^*>D>nMRErLFbIf=otMZ/Y8P5_!NTDkVbXo>X*[f4&@`;[jWci2Dmf)FM)i;Vd9kl0lHmf)_ToD\F^
q#:*gqYU0jr;llqeGn/#rr2fnrquclrqQKerq-3\rpTjQrosFEro!e3rn@A#rm:Yhrl"fNrk&08riQ1!
rh07[rg!JDre^W-rdXomrcS3ZrbVRIraPk6ra#M*r`/qrr_WShr_3;`r^m)[pdY6NlpKYsn3[+?JO#Jc
JO"cOk!8o3b<kbeqaC3Kr^d#[r_!/`r_EGhr_resr`K/*ra>_7rb2:Irc%jZrd+Qnre19.rf@&DrgWn[
ri,n"rj)O8rkSNOrltGhrmUl#rn[S3roX4Drp9XQrpp'\rqHEfrqcNi!;ursrVQTJs4@;Mrr2lqr;QTm
q>U0gp\sd`nc&"VlMfuGjSn*:h#>t*df.Pkb5T6V^&GP@Yl:^&VZ*1dRJrELN;eV3K)U/sGQ)X^DZ4DM
B)Z3;?2e%,<rQ(t;>sAj9`@]a8cD9[8,c!T7Hm1s6L[>@6%M:d5_21O5it?26-DU]6iKOO7fGpW8H)3[
9E%Zb:]=5j<;oqt>5hh,@/ad;C&W#LErL:^I/\`sL]383PQ$sKT)PVdX8]@&\Gj2@_>_UVcMl8kf`'Y)
i;Vg:kl0lHn,DkVoD\L`q#:*gqu6Knr;llqqu5=LfDkjLrr)iorql]irqHEcrpp'XrpKdMroa:@rnm_/
rmq(qrlkA^rkSNFrjDa.ri#gjrg`tRrfI,:re:?$rd"KbrbqdOrb)4?ra5Y/r`T5#r_i_kr_<Acr_!/]
r^coUr^HfSnjCtpn3[+?JO#JcJO"cOk!8o3_F!o_r^?`SqaUQTr^m)]r_*5br_NMkr`/r#r`oG0raYq?
rbMLOrcJ-brdXp#reg]:rg*PRrhBCjriZ7.rjr*Erl>#]rm:YqrnIG0ro="?rosFMrp]pXrq??crqQKi
rqlcp!WDuorn@D+s8N#srVl`oqu6Hkp\smco`"C[n,D\QkPjTBiVqX3f`'A!ci2&c`;[IL\,N]4WrAjo
TDk2VP5^L@K`6N$IK"?fEW0kTBDuH@?iF=0=oMJ$;Z9Ml:]=#d9)_EZ8,c!W7.N^l6Ms0$5__OT5_22P
5g)Le6i0:K7fGpW8cD?]9E%`d;>sJm<rQ5#>lJ+0A,^-?DZ4YTFT-^fJc:?%NrG4@Qi<WVV#ICnZMqB5
^&GtLb5T`de,Ituh#?:3jSn?Am/HGPnc&1[p&=^bqYp?lquQ`nrr)iqgAfn,rr2oqrqucmrqcWgrq69^
rp]pSrp0RGro="8rnIG'rmC_irl>#Trk&0;rilC#rhBC_rfmDCrepc-rdOimrc8!VrbVRFraPk5r`];&
r`&knr_EGer_!/]r^d#Yr^QlUmmGSkrB^?IJO"rTJO"cOf0K*se3`Ukr^HfUr^ZrYr^m)]r_<Afr_WSn
r`B)&ra,S4ral(FrbqdVrd+Qmrdt--rfI,Drgj%_ri#h#rjMg<rkeZUrltGirmq)'rnm_8roX4GrpKdT
rq$-^rqHEgrqc]n!W;lprVlfMs4[MPrr2lqr;QTmqYp6gp&=O]nG_hSli-#Fir7j7g&BP$ci2,e`W!XO
\c/r7Y5Y6rTDk>ZOoC@>M#Mr(I/\?hE;j_RCAq`B@/aI2=T2>";Z9Ml:B!rd8cD9[8,c!W7K,^G6d\7!
5_21O5_21O5gDX?6M3_F7/fXS7fGpW8H)3[9`@cc;#XAl<rQ5#?2e72A,^6BD#SDQGQ)sgJGtB(NW,(>
S,T)[V#IOrZi7N7^])4ObPoieeGe/#hu;X7jo4TFmJcVSo)A=]p\t$gqZ-Npr;?Qmrr1XOh>dKRqu-Nk
rqcWirq??`rpg!Vrp0RIro="9rn[S)rmLelrl>#UrkAB=ric=$rh9=]rg*PEre^W,rdOilrcA'WrbDFE
ra>_2r`];$r_remr_EGdr_!/\r^ZrWr^HfSog@G"r^$'>JO"cOJO"cO_Ee)dg-YI"r^?`Sr^QlWr^d#\
r_*5cr_WSmr`/r$ra#M2rau.ErbqdWrcnEkre19.rf@&Erg`t]ri5t$rj;[=rkeZTrm1Smrmq))ro!e9
roj@IrpTjVrq-3`rqZQi!;cfoqu6Qkrn[V1s8N#prVl]nqYp<ip&=R^nG_kTlMfuGir7j7h#>h&d/M;h
`W!^Q]`,59Xo>6tT`1DZPl?[AL]2l(HiA3fEW0hSB`;N@?iF:/=oMD";Z9Jk:B!oc8cD6Z7f,XR7.iq$
6N0:@5_21O5_21O5f,ec6/"Zu6iKLN7K,dU8,c*Z9E%]c:]=8k<;p&">lJ+0A,^0@D>nPSG5cjfK)UT*
NW,1ARf8uZVuEgtZMqN9_#D=Pc2Q,ieGe8&hu;X7kPjcGmf)_ToD\F^q>U3jqZ6Tkrr)`nh>c=2rr2fn
rqcWirqQKbrpp'WrpB^Lroa:=rn[S.rmUknrlkAZrkJHCrilC&rhf[drg<\Jrepc0rdXomrcJ-XrbMLF
raPk5r`fA(r_renr_NMer_!/]r^QcRr^?EHf0]I&nN_XjJO"cOJO%(;r^#%#qa:6Kr^H]Rr^m)^r_3;e
r_`Ynr`K/'ra,S5rb)4GrbqdXrd"Kmre:?0rf[8Jrgs+dri?%&rji$Brkn`Zrm1SmrnIG/ro!e=rp'LM
rpTjWrq-3brqQQj!W)ZlrVQTMs5!_Srr2lqr;QQlq#:$eo`"F\n,D\Qkl0]Ci;VO2g&BCuc2Pia_>_+H
[f3K0W;`OjRf8TOO8at7KDpB"FoHF\DuODKAH$!9>lIk)<W5kp:]=)f9)_B\8,c!W7K,^M6et)g5_21O
5_21O5dN`36MNqI7/fXS7fGpW8cD?]:&[rf;>sSp=T2S)@/a^9BDuiKErL4\J,Y*"M#NJ7Pl@-NUAh.k
YPu!0]`,bHao9QadJhhuh>Z@3jo4KCm/HJQo)A:\p\ssgq>pHhrqucorr1aRh>dBNrquclrqQKerq$-Z
rpTjOroa:Arnm_0rn.4srlkA_rkSNFrjDa-rhoahrgEbLrf6u4rdk&rrcJ-YrbVRGraYq7r`fA'r`/qo
r_EGer^m)[r^ZrVr^?EHj$NW/i]r&[JO"cOJO$P,r^#I/ogA^Hr^HfVr^d#[r_<Afr_WSor`K/(ra5Y7
rau.Grc%jYrd=]rreCE4rfd>Lrh9=hriQ1-rk&0FrlG)_rm:YsrnIG0roF(Brp'LOrpg!ZrqHEf!;Z`m
qYU3irS@M0s82cor;QQlq#:$eoD\:Zmf)JMkPjN@hYu7.ec*qpbPoN\^](eCZi7$)V#I"cQN!$GNW+V1
J,XfoErKtUC]7lD@K'U4=T2A#;uTVm:B!rd8cD9[7fGjU7.iq-6N0:.5_21O5_21O5d3NQ6/t<)6iKLQ
7K,dU8,c*Z9`@cc;#XDm<rQ5#?N+C4AH$BDDuOeVHiAQpK`6u1P5^dHTDk\dX8]I)\c0AC`r=0\d/MSp
g&Bk-j8S3?l2L,MnG`%Yp\ssgq>pHhqu$Hlh>c=2rr)iorql]jrqQKdrpg!VrpB^KroO.<rn[S+rmUkl
rlP/Xrk8<>rilC#rhKIarfd>Breg]+rdFcjrc%jQrb;@@ra5Y0r`B)!r_`Yjr_3;ar^d#Yr^QlTog@b+
fg(*RJO"cOJO$5#i'R<.qaCEQr^ZrYr_*5br_NMjr`&kur`oG0raPk@rb_XRrcnEirdk'+rf6uArgs+`
ri#h#rjVm?rl"fXrm(Mlrn.5+ro*k<roj@KrpTjVrq??c!;QZkq>U9jr;QZNs5!_SrVl`oqu6Ejp\sjb
nc&"VmJc;JjSn*:h#>q)df.MjaSs*V]Df5;YPtI!U&LS]P5^I?M#Mr(HiA0eE;j\QB`;H>?N+1.<rQ%s
;#X5h9`@Z`8,c!W7Iih16Mj(%5_21O5_21O5cR*K6/t<)6iKOR7fGpW9)_K_:B")h<;oqt>Q.t.@K's>
C]8;PFoHaeJGtB(NW,+?SGo5]VuEn![Jmf;_u@aVc2Q/jfDaS)i;Vg:kPjlJn,DkVp&=[cq#U<erql]m
rr([Qh>dKQrqucmrqQKdrq69\rpTjQroa:Arnm_0rmq(srlkA^rk\TFrj;[.rhTOcrgEbIrepc1rdXom
rcJ-XrbDFEra>_2r`];$r_relr_<Aar^m)Zr^QlUpd=(.r^#+#JO"cOJO"cOVa15Ij$NN.r^HfUr^ZrZ
r_*5br_NMkr`/r$r`oG1rau.FrbqdXrd+QnreCE1rfI,Irh'1cric=.rjr*Frl4r]rmLetrnIG0ro="@
rp9XPrpg!\rq?Ef!VlHhqu6NmrS@M3s8N#srVl`oqYp6gpAX^`nG_hSli-#Fj8Rs8gA]Y%d/M2e`W!XO
\Gif5Xo>'oSc4uTOT(.:KDp8tGQ)X^D>n5JA,]m8>lIk)<;oep:]=)f9)_E]7fGjU7/0.06N0:%5_21O
5_21O5c6mH6/t<,6iKLQ7K,dU8cDB^:&[rf;Z9Yp=T2P(@/a[8B`;lJErL:^I/\ctM>iV9Qi<QTUAh:o
ZMqB5^])1Nb5Tceec+;%hu;X7jo4TFmf)_To`"L`pAt$_rqcWkrr)`nj8\';rr2oqrquclrqHEcrq$-Y
rpB^NroO.=rnm_-rm^qorlY5YrkJH@riuI(rh9=]rg*PDreUQ*rd4Wfrc8!Srb)4>ra,S.r`K.ur_`Yj
r_*5_r^m)Yr^HfSpd=(.r^#+#JO"cOJO"cOVa15Ij$NN.r^?`Sr^QlYr_!/_r_NMjr_reur`];-raPk>
rbVRSrce?grdt-*rf6uDrg`t]riH+(rjMg@rl"fYrm:Yprn.5-ro3q=rp0RNrp]pYrq-9c!Vc?fqYpBk
rVQTSs5<qVrr2lqr;QQlp\smcoD\7YmJcDMjo49=hYu.+e,I\maSs*V^](Y?Yl:X$T`1G[Q2ZdBL]2l(
HN&*eEW0bQB)Z9=?N+1.=T24t;#X5h9E%Q_8H)*X7K,^P6f:<16.S;P5_21O5_21u5lO(*6N0@O7/fXS
7fGsX8cDB^:B")h;Z9et>5hk-@fC$>C]8>QFoH^dJc:H(NW,4BRf8uZWW'+#[Jmr?`;[jWci2DmfDaY+
iVqs<lMg/LnG`%Yo`4^ep\4[`rql]nqu5XUi;`fUrqucmrqcWgrq69]rpTjProsFBro!e3rmq(srm1S`
rk\TIrj2U,rhoagrgEbKrepc0rdaunrcJ-Xrb;@Bra>_1r`T5$r_i_kr_<Aar^d#Yr^HfSpd=:4r^"do
JO"cOJO"cOSj<9@k!Jr4r^?`Sr^ZrZr_!/ar_WSlr`9##r`oG1ral(CrbqdXrd"KnreCE1rf[8Krh07g
riQ1+rk8<Jrl4r`rmUktrn[S3ro="Brp9XQrpp']!;?Ngp\t$gqu6Njro=%:s8N#sr;QTmqYp6gp&=O]
n,DYPl2K`Bi;VR3ec*tqc2P]]_>_.IZMps)VZ*1dR/W9JMZ/>/J,X]lF8g+WBDuH@@/aF1=T2>";>sAj
:&[``8H)-Y7K,^M6g6r:6-VZG5_21O5_21l5lO(36Mj.L7/fXS8,c'Y8cDH`:]=5j<W6,">lJ.1AH$6@
DuOhWGlE3lK`6l.P5^jJT)PVdXo>X*^&GkI`W"-]dJh\qh>Z@3j8S<Bm/HJQo)A:^pAt$_rqcWkrquZm
j8\';rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM'rmC_irl+lQrk/68riH*rrgj%TrfR2:re(3!rc\9]
rbh^Jrac"8r`oG)r`/qpr_NMer^m)[r^QlTog@t1r^"doJO"cOJO"cOSj<9@k!Jr4qaCEQr^ZrZr_3;d
r_`Ypr`K/)ra5Y7rb)4Jrc8!]rdOj!re^W:rg3VTrhf[rriuI8rkSNPrltGirmh#'rnm_7roj@IrpTjV
rq$3a!VZ6dqYpBkr;6KRs5X.Yrr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu:/e,I_nbl5NZ^](hDYl:[%
V#Hn`QMusEM#N&+If=KhEW0hSB)Z<>?iF:/=8l5!;#X5h9`@W_8H)*X7/K@36N09q5_21O5_21O5b:7?
6/t<26i0:N7fGpW8cDE_:B")h<W6,">Q/"/A,^*>D>nPSFoHjhK)UT*O8bFDSGo>`X8]@&])KGC_u@mZ
ci2Dmg]$+0ir80@lMg5NnG`%[p&Xm\rqZQjrqucorr1sXj8],Xrr)iorqcWirq69^rp]pTrp'LGro*k5
rnIG$rm1Serkn`Lrj_s3ri5snrgWnOrf@&5rdk&srcS3[rb_XGraPk6r`T5%r`&knr_EGdr^m)[r^QlT
qa9^:og-hfJO"cOJO"cORm?j:ksGA:qaCEQr^ZrZr_3;cr_WSnr`B)%ra5Y6ral(Grc.p[rdFctreCE5
rg!JPrhTOnrilC3rkABLrlb;ermUl$rndY5roa:GrpKdTrpp-_!VQ-bq>U9jr;QZoro=%=s8N#srVl`o
qYp<ip&=R^nG_kTlMfuGiVq^5gA]S#ci2,e_Z%7J\Gi`3WrAdmRf8QNO8ak4Jc:&rFT-7YD#S#F@fB^5
=oMM%;uTVm:B!rd8cD9[7fGgQ6gR/=6,Z$>5_21O5_21c5lO(96N0@L7/f[T8,c*Z9`@cc;#XDm<rQ8$
?N+C4Ac?NFE;jtYI/\ZqL&R/4Pl@-NU].7lYl;03^Ac"KbPoiee,J)#h>ZC4kPjcGmf)_To)SFap%A=[
rql]mrr)iqj8\0>rr2oqrql]krqZQdrq$-YrpB^Lroa:=rnRM+rmUkmrlb;Xrk8<?ric="rhBC\rfmDB
re19#rd4WcrbqdOrac":ra,S+r`/qqr_WSgr_*5]r^ZrWpd=L:^-I67JO"cOJO#8]mm?e:r^QlWr^d#]
r_<Agr_i_rr`K/+raGe:rbMLOrcA'crdb!$rf6uArgNh\ri,n#rjVm?rkeZXrm1Smrn7;,ro!e=rp'LM
rp]pY!;-Bcp&=ddqYpBkrVlfVs5X.Yrr2lqqu6Hkq>U'doD\7YmJcALkPjE=h#?"+e,I\mbPo?W^&GM?
Y5YC!UAgV\PQ$R@K`6K#HiA*cDuOPOAH$$:?N+(+<W5nq;#X2g9E%K]8,c!Q6gm@U5_21O5_21O5`\2!
6MNqI7fGpW8H)9]:&[ug;Z9_r=T2Y+@K'g:C]88OF8gOcJGt6$NW,.@Rf9&\W;`t!\,O&>_>_XWci2Dm
g&Bh,i;Vp=lMg2MnG`"Zo`=aYrqZQirql]nrr1sXj8],Xrr)inrqcWhrq69^rp]pSrosFDro!e2rn7;!
rm(Mcrk\TIrjVm0ri#girgEbKrf-o1rdXoorc8!UrbMLDraGe4r`K/"r_i_lr_<Abr^d#Yr^QZMmm=`R
JO"cOJO"cOO$N/#pd>$Mr^ZrYr_*5br_WSlr`9##ra,S4rac"DrbqdVrd4Wpre191rfd>Lrh9=hriZ70
rk/6HrlY5crmLf!rnRM2roO.DrpB^Srpp-_!VQ-bq#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_eR
l2KiEi;VO2g&BCucMkuc_>_+H[f3H/VuE@gR/W9JNW+S0J,XcnErKtUCAqcC@/aI2=T2>";>sAj9`@]a
8H)*X7JK7=6G>^95_21O5_21]5jq&76iKOR8,c'Y9E%Zb:]=5j<W6,"?2e:3AH$?CDZ4\UHN&BmKDpl0
P5^jJT`1kgY5Ym/]`,bHb5TZbdJhhuh>Z@3k5OTDm/HMRo)SC`o^r.XrqZQjrr)iqj8\0>rr2oqrql]k
rqQKbrpp'Xrp9XKroO.;rnRM+rmC_irlP/Urk/6=riZ6urh07Xrf[8?re(3"rd+Qarbh^Mrac"9ra#M*
r`/qpr_NMer_*5\r^QlUpd=L:^-I67JO"cOJO#8]mm?e:r^HfUr^Zr\r_<Afr_`Ypr`K/*raGe:rbDFM
rc8!ardOj!rf-o?rg<\XrhoaurjMg=rk\TUrltGirn7;+ro!e;roj@Jrp]pY!;$<ao`"Xbq>U9jrVlfV
s5X.Yrr2lqqu6Hkq#9pbo)A.Xm/H8Kjo43;h#?"+dJhDiao9*T]Df8<Y5Y?uT`1>XP5^I?KDpB"HN%sa
DZ4DMAH$!9?2dt*<W5kp:]=&e9)_?[7fGjO6gm@U5_21O5_21O5`\2!6MNqI7K,dU8,c-[9`@ie;>sSp
=T2V*@K'g:CAr,MErLCaIf>!!NW,+?R/WcXVuEju[f3r=_#DITc2Q,ig&Be+i;Vj;kl0rJnG`"ZoE"UV
rqQKgrql]nrr1sXj8],Xrr)inrqcWhrq-3\rp]pRrosFDro!e2rn7:urltGarkSNFrjMg/rhoagrg<\J
rf-o0rdXonrc8!UrbDFCra>_2r`K/"r_`Yjr_3;`r^ZrWr^HTLmm=`RJO"cOJO"cOO$N/#pd>$Lr^QlW
r_!/`r_NMjr`/r"ra#M3rac"Crbh^Urd+Qmre(30rf[8Jrh07griZ7/rk/6GrlP/armC_urnRM2roO.C
rp9XRrpp-^!VH$`q#:*gqu6Qnro=%=s8N#srVl]nqYp9ho`"F\nG_eRl2KfDi;VO2g&BCucMkuc_#CtF
[f3H/VuE@gR/W9JNW+S0J,XcnErKtUCAqcC@/aI2=T2>";>sAj9`@Z`8H)*X7JK7=6G>^95_21O5_21]
5jq&76iKOR8,c'Y9)_N`:]=5j<W6,"?2e:3AH$?CDZ4\UHN&BmKDpl0P5^jJT`1kgY5Ym/]`,_Gb5TZb
dJhhuh#?72jo4KCm/HMRo)SC`o^r.XrqZQjrr)iqj8\0>rr2oqrql]krqQKbrpp'Xrp9XKroX4<rnRM+
rmC_jrlY5Vrk/6=riZ6urh07Xrf[8?re(3"rd+Qarbh^Mrac"9ra#M*r`/qpr_NMer_*5]r^QlUpd=L:
^-I67JO"cOJO#8]mm?e:r^HfVr^d#]r_<Afr_`Ypr`K/*raGe:rbDFMrc8!ardOj!rf-o?rg<\Xrhoau
rjMg=rk\TVrltGirn7;,ro!e<roj@Jrp]pY!;$<ao`"Xbq>U9jrVlfVs5X.Yrr2lqqu6Hkq#9scoD\7Y
mJcALjo43;h#?"+df.Pkb5T6V^&GM?Y5YC!U&LJZP5^I?K`6K#HiA'bDZ4GNAH$$:?N+(+<W5nq;#X2g
9E%K]8,c!Q6gm@U5_21O5_21O5`\2!6MNqI7fGpW8H)9]:&[ug;Z9_r=T2Y+@K'g:C]88OErLFbJGt6$
NW,.@RJroZVuEju\,O&>_>_UVcMl8kg&Be+i;Vj;l2L)LnG`"Zo`=aYrqQKgrql]nrr1sXj8],Xrr)in
rqcWhrq69^rp]pSrosFEro!e2rn7;!rm(McrkeZJrjVm1ri#girgEbLrf6u2rdXoorc8!UrbMLDraGe4
r`K/"r_i_lr_<Abr^d#Yr^QZMmm=`RJO"cOJO"cOO$N/#pd>$Mr^ZrYr_*5br_WSlr`9##ra,S4rac"D
rbqdVrd4Wpre192rfd>Lrh9=iric=1rk8<JrlY5crmLf!rn[S3roX4ErpB^Srpp-_!VQ-bq#:*gqu6Qn
ro=%=s8N#srVl]nqYp<ip&=R^nG_hSl2KlFi;VO2g&BJ"ci2,e_Z%7J\,NT1W;`OjRf8QNNrF_2J,Xfo
F8g+WC]7lD@K'U4=T2>";Z9Ml:&[fb8H)-Y7ef@>6G>^95_21O5_21]5jq&76iKRS8,c'Y9E%Zb;#XAl
<rQ5#?N+C4AH$BDDuOhWHiAQpK`7#2PQ%$MUAh.kYPu$1^&GnJbPoiee,J&"h>Z@3kPjcGmJcVSo)SFa
p%A=[rqcWkrr)iqj8\0>rr2oqrquclrqZQdrq$-YrpKdNroa:>rndY.rmUkmrlb;Xrk8<@rilC%rhKI]
rfmDCre:?&rd=]erc%jQral(<ra,S,r`B(tr_WShr_3;_r^d#Xr^?WNlpC\;`'Al=JO"cOJO#Jcr^#m;
r^6QNr^QlWr^m)_r_<Agr_resr`T5,raGe;rbVRQrcJ-erdb!%rf@&CrgNh]ri,n$rj_sArkeZXrm1Sm
rn@A-ro*k>rp'LNrp]pY!;-Bcp&=ddqu6NmrVlfVs5X.Yrr2lqr;QQlq>U*eoD\7Ymf)POkl0T@hYu7.
e,I_nbl5KY^Ab_CYl:[%U]-b^Q2ZjDL]2l(IK"?fE;j\QB)Z9=?N+.-=8l1u;#X5h9`@W_8H)*X7/K@<
6M3Xh5_21O5_21O5at%960U`86i0:N7fGpW8cDE_:B")h<;otu>5hk-@fC!=D#SDQFT-^fK)UQ)O8bFD
S,T2^WrB7%])KGC_Z%dYci2DmgA]t.ir80@lMg5NnG`%[p&Xm\rqZQjrqucorr1sXj8],Xrr)iorqcWi
rq??_rp]pTrp0RIro3q6rnIG$rm:Ygrkn`Mrjr*5ri5snrg`tRrf@&7re(3!rcS3[rb_XHraYq7r`fA'
r`/qor_EGdr^m)[r^QlTqa9C1r^"doJO"cOJO"cOSj<9@j$N`4qaCEQr^ZrZr_3;dr_WSor`K/(ra5Y7
rau.Hrc.p[rdOiureUQ7rg!JQrhTOorilC5rkABLrlkAfrmUl$rnm_7roj@HrpKdTrq$3a!VZ6dq>U9j
r;QZoro=%:s8N#sr;QTmqYp3fo`"C[n,DYPkl0T@hu;F1ec*tqc2P]]_>_+HZ2Uj(VZ*.cQi<-HM>i/,
If=NiErKtUBDuH@?iF=0=T2>";>sAj9`@W_8H)*X7.iq36N09q5_21O5_21O5b:7?60:N26i0:N7fGpW
8cDE_:B",i<W6,">lJ+0A,^-?DZ4\UG5csiKDp`,OoC^HSc5McXT#L(]`,_G`W"-]dJh\qh#?41ir80@
li-APnc&.\p&Xm\rqcWkrquZmj8\';rr2oprql]krq??`rpg!Vrp0RIro3q7rnRM(rmLekrl4rRrk/69
riQ0trgs+VrfR2;re19#rce?_rbqdLrac"9r`oG*r`9"rr_NMer_!/\r^QlTog@t1r^"doJO"cOJO"cO
Sj<9@k!Jr4qaCEQr^d#\r_3;er_i_rr`K/)ra>_:rb2:LrcA'_rdXp#reg];rg3VUrhoatrj)O9rk\TR
rm(Mkrmq)(rnm_7roj@IrpTjVrq$3a!VZ6dqYpBkr;6KRs5<qVrr2ipqu6Hkp\sjbo)A+Wli-/Jj8S!9
h>Z")df.Sl`r<gR^&GA;Y5Y?uT`1AYP5^C=L&QW%H2_pbDuOJMAH$!9>lIn*<rQ"r:]=)f9)_B\8,bsV
7/0.66N09q5_21O5_21O5b:7?60:N26iKLQ7K,gV8cD?]:&[ug;Z9_r=T2S)@/aa:C&W&MFT-RbJGt<&
MuJn=RJrlYVuEgtZi7Z;_Z%RSci2Dmf)FM)i;Vd9l2L&Kn,DnWo`4^ep\4[`rql]mqu5XUi;`fUrr)io
rqcWgrq??_rp]pSrp'LEro3q6rn%.urm1Sbrkn`MrjDa0ri,mirgWnPrf-o4rdk&prc\9\rbMLFraPk5
r`fA(r_i_lr_EGcr_!/\r^QlUr^?WNi'RE/ej+dOJO"cOJO$+ur^#@,r^6ZQr^HfUr^d#[r_*5cr_WSl
r`K/'ra,S5rb)4Grc.p[rd+QpreLK4rg!JOrh07iric=/rkJHNrlG)brmUkurndY5roO.Erp9XRrq$-^
!;?Ngp\t$gqu6Qkro=%:s8N#srVl`oqYp6gpAX^`nG_hSlMfoEir7g6f`'D"ci2&c`;[ON\,NW2X8\gl
SGniRNrFk6K)U,rG5cL\D#S,IA,]j7>Q.b(;uTYn:B!rd9)_B\7fGjU7/K@06N0:%5_21O5_21O5c6mH
6/=m,6iKLQ7K,dU8H)6\9`@fd;#XDm=T2P(?iFR7BDu`HEW1.\HiAWrM#NG6QN!ERU&M+lZ2V63^])1N
ao9WceGe,"hYuL5jo4QEmJcVSo`"L`pAt$_rqcWkrr)`nj8\';rr2oqrquclrqHEcrq-3ZrpB^NroO.>
rnm_/rmh"prlY5ZrkJHBrj)O*rhBC_rg3VGreg]-rd=]hrc8!Trb2:@ra>_1r`K/!r_i_kr_<Aar^m)Y
r^HfSpd=(.r^#+#JO"cOJO"cOVa15Ij$NN.r^?`Sr^QlYr_*5br_NMkr`&l!r`fA0raYq@rb_XTrce?h
re(3,rfI,Grgj%_riQ1*rj_sBrl"fYrm:Yprn@A/ro3q=rp0ROrp]pZrq-9c!Vc?fqYpBkrVQTSs5!_S
rVl`oqu6BipAXaanc&"Vm/H2IjSn'9g]#e'df.Jia8WpS])K)9YPt?sTDk8XOT(1;LAl]%H2_pbDuOMN
B)Z3;?2e%,<W5qr:]=)f9)_E]8,c!W7JK716N0:%5_21O5_21O5c6mH6/t<,6iKOR7fGpW8cDB^:&[rf
;Z9\q>5he+@/ad;C]88OFT-UcJ,Y3%MuJh;RJriXV#IRs[/RZ9_>_IRbl6&ifDaP(hu;[8kPjiImf)bU
p&=[cp]:0brql]mrr([Qh>dKQrqucmrqQKerq??]rpTjQroj@Cro*k3rn.5!rltG_rkeZIrjMg0rhf[f
rgWnLrf-o5rdauprc\9[rbVRIraGe4r`fA&r`&kor_EGdr_!/\r^ZrWr^?WNj$NW/fg(*RJO"cOJO$5#
r^#I/r^6QNr^QlWr^d#\r_*5cr_`Yor`9#&ra,S4rb2:Hrc%j[rd4WpreUQ5rfR2Lrh07fric=/rk/6I
rlG)`rmUkurnRM3roO.Crp9XPrpg!]rq?Ef!VlHhqu6NmrS@M0s8Murr;QTmq>U0gpAXU]n,D_Rkl0]C
iVq[4f`'A!cMkrb`;[IL[f3N1W;`RkT)OrQO8b%9Jc:)sGlD[]D#S/J@fBa6>lIh(<W5kp:]=&e9E%K]
8,c!W7.iq-6J4VT5_21O5_22#5i>!+6i0:N7fGpW8H)9]:&[rf;>sPo=8lJ(?iFO6C&VuKE;k+]I/\]r
MZ/Y8PQ%0QUAh+jYl;-2^&GtLao9Tbe,J#!h>ZC4jo4KCmJcSRnc&7]pAk!iq>($erqucoh>c=2qu-Nl
rqcWhrqHE`rpg!UrosFFro="7rn@A%rm:Yfrl4rPrji$7ri?$orh'1UrfR2>re19#rd4Wbrbh^Nrac":
ra,S+r`9"sr_WShr_3;_r^d#Xr^HfSog@b+r^#F,JO"cOJO"cOYX&1Rj$NE+r^?`Sr^QlWr^m)_r_<Ag
r_resr`K/+raGe:rbMLOrc8!brdb!$rf-o?rg*PUrh]Uprj2U7rkJHPrlb;frmh#$rndY7roX4ErpKdT
rq$-`rqQQj!W)Zir;QZNs5!_Srr2lqr;QQlq#:$eo`"C[mf)MNkPjN@hu;@/fDa.rbl5Z^_#CqE[/R0+
VZ*7fR/W<KO8ak4Jc:)sF8g.XD>n,G@fBa6=oMM%<;o_n:B!rd9)_BY7fGjU7/0.06Mj(.5_21O5_21O
5dN`T6/Y*)6iKLQ7JfRR8H)6\9`@fd;#XGn<rQ8$?iFO6Ac?QGE;jqXIK"fsL&R/4PQ$sKT`1hfXT#U+
])KMEa8X<^d/MYrg]$+0j8S6@lMg5Nnc&1[p\ssgq>pHhrqucorr1aRh>dKRrr)iorqcWhrqHEarpp'W
rp9XJroO.;rnRM+rmC_irlP/Urk/6=ric="rhBC\rg!JDreUQ+rdXoirc8!Vrb)4@ra>_1r`K/"r_`Yj
r_<Aar^d#Yr^QlUr^?NKh*U*dJO"cOJO"cOZU!>5pd>$Kr^HfUr^ZrZr_!/ar_NMjr`/r"r`oG1rac"@
rbqdVrcS3ire(3+rf@&CrgNh\ri,n#rjMg=rk\TUrltGirn7;,ro!e;roj@JrpTjWrq-3arqQQj!W)Zl
r;QZorn[V1s8N#prVlZmq>U0go`"F\n,D_Rl2KlFi;VR3g]#\$d/M8g_u@FM\c/i4X8]!qT)P,VP5^C=
L&QT$H2_pbDuOPOB)Z9=?N+1.=T27u;>sAj9`@Z`8cD3V7K,^J6e=[(61I3k5_21O5_22;5lO(!6Mj.I
7/fXP7fH!Y9E%Wa:]=5j;uTnu>5hk-@fC$>C]88OFT-RbJ,Y0$MuJn=R/W]VVZ*XqYl;34^Ac%Lbl5rf
e,J,$hYuI4kPjcGmJcSRo)A:\q#:'hq>pHhrr)`nh>c=2rr2fnrqcWirqQKcrq-3[rpKdOroj@@rnm_1
rmh"qrltG]rkSNFrj)O*ri#ghrgNhNrf$i3rdt,rrc\9]rbVRIrac"9r`oG*r`&kpr_NMfr_*5_qa^WT
r^?EHf0]I&nN_XjJO"cOJO%(;r^#%#qa:6KqaUQTr_!/_r_<Afr_i_pr`T5*ra>_9rb2:Irc8!^rd4Wr
reLK3rfmDNrh07hriZ7+rk&0Frl+l]rmC_qrnRM1ro3q@rp'LNrpg!Zrq69crqQQj!W)ZlrVQTMs5!_S
rqlZnqu6Hkq>U*eo`"C[n,DYPkl0WAi;VR3f)F+sci1ua_u@CL[/R9.WrA^kSGniRO8b"8K`6H"H2_ma
DuOMNB)Z3;?2e%,<W5qr;#X5h9`@Z`8H)-Y7fGjU7.iq$6N0:@5_21O5_21O5f,ec6/"Zu6iKLQ7K,dU
8,c'Y9)_K_:B")h;uTer>5hh,@/ad;CAr/NF8gF`If>$"MZ/\9QN!ERU&M(kYPtp.^Ac"Ka8XEae,Iqt
h>Z@3j8S9Ali-APnc&1[pAXmeq>gBnqtpBkqu5FOgAh0Orr)iorql]krqHEbrpp'XrpB^NroO.=rnm_.
rmh"orlb;[rkJHCrj2U,rhTOcrgWnLrf-o5rdauqrce?\rb_XLraYq8ra#M*r`/qqr_WShr_3;_r^d#Y
r^QlUr^?<Ed6ddsJO"cOJO"cOc9TZAogA^Hr^HfUr^ZrYr^m)_r_<Agr_i_rr`K/*ra>_8rbDFKrc%j\
rd4WpreUQ5rfR2Lrh07driZ7,rji$Crl+l[rm1Snrn7;.ro3q=rp0RNrp]pXrq69brqcWk!;llqr;QZo
rn@D+s8N#srVl`oqu6Hkp\smco`"@Zmf)SPk5OE?i;VL1f)F+sbl5Z^_Z%1H[JmB/VuEChSc4lQO8b(:
K)U5uHN%saDZ4GNAc?0<?iF4-=8l5!;>sAj:&[ca8cD9[7f,XR7.ipp6N'4J6%M:U5_21O5hA9r6-_go
6i0:N7JfRR8H)3[9)_Qa:]=5j<W6)!=oMe-@fBs<C]88OErLCaIf=ruMuJh;Pl@6QUAh(iYPts/]Df\H
a8X<^df.ktg]$.1jSn<@m/HGPnG`(Zp&=^bqYp?lquQ`nrr)iqgAfn,rr2oqrqucmrqcWgrq??`rpg!V
rp9XIroO.<rnRM*rmUkmrlP/Xrk8<?rj)O'rh]Udrg3VIrf6u2rdaurrcJ-Zrbh^Jrac"8r`oG*r`9"r
r_WSir_*5_r^luWr^QlTnjCbjr'Gs"L-U;TJO%gPb<kkhqaC<Nr^ZrZr_!/_r_NMjr_i_rr`K/)ra5Y7
rb)4Jrc.pZrdFcsre192rf[8Irh'1cri5t'rj_s@rl"fYrm1Smrn%/)ro*k;roa:IrpKdUrq-3_rqHEg
rqc]n!W;lprVlfMs4@;Mrr2lqr;QTmq#:$epAXX^nG_kTl2KlFj8Rs8gA]\&d/M8ga8WmR]Df5;Y5YC!
UAg\^QN!!FMZ/>/J,X`mFT-4XC]7uGA,]j7>Q.e)<W5nq:]=)f9`@Z`8cD9X7fGjU7.N^r6L[>@6%M:d
5_21O5it?26,Gt]6iKLQ7JfRR8,c*Z9)_K_:&[rf;Z9\q=oM\*?iFR7BDu]GDuOkXH2`<mK`6l.OT(RF
SGo8^W;`t![Jmc:_#DCRbPolff)FG'hu;[8k5OWEmf)_To)A@^p\ssequ6Knr;llqqu5=LfDkjLqu-Nl
rqZQgrq??_rpg!Vrp'LGroF(:rnRM+rmC_jrlY5Wrk8<@rilC&rh]UcrgEbLrf$i3rdt,rrc\9]rb_XK
rau.;ra#M-r`B(ur_WSir_3;ar_!/\r^ZrWqaLKPog@:sn3[+?JO#JcJO"cOk!8o3_F",eqaCEPqaUQT
r^m)]r_*5br_NMir`&kur`fA.ra>_;rb;@Krc8!^rd4WrreLK3rfd>Krgs+cri?%&rj_s@rkeZWrltGi
rn7;+ro!e:roj@HrpTjVrq$-_rqHEfqtpHm!WDuorn@D(s8N#prVl`oqYp9hp\sgao)A+Wm/H8Kk5O<<
h>Z.-e,I_nc2PZ\^](kEZMq!*WW&RiS,S]PO8b"8K`6K#H2_scE;j\QB`;K??iF@1=T2>";uTVm:B!rd
9)_E]8GG[R7-m:u6L[>@6%M:d5_21O5it?26-DUc6i0:H7fGsX8cD?]9`@fd;#XDm<rQ5#?2e72@fC'?
D#SDQFoH^dJ,Y-#MZ/\9Q2[9PT`1qiY5Ya+]DfVF`;\$\d/MMngA]q-i;Vm<kl0rJn,DnWo`"Uaq>U6f
quHZrrVcWmgAf\&qu-NlrqcWirqQKcrq$-YrpKdOroj@Aro!e3rmq(srm1Sbrkn`MrjMg2riQ0prh07\
rf[8@reg]+rdOinrc8!Vrb_XHraYq7r`oG*r`B(sr_WSir_3;ar_!/]r^d#Yr^QcRr^?*?kX*fdr]u*#
YX!b)JO'3#\O,jSqaCEPqaUQTr^d#[r_!/_r_3;er_`Ymr`B)%r`oG0raYq>rb_XRrc8!brdOitreg]8
rf[8Nrh'1briQ1*rjMg@rl"fWrm1Smrmq))ro!e9roj@HrpKdTrq$-^rqQKgrqcNi!;ursrRCkss8N#s
rVl`oqYp<iq#:!do`"C[n,DYPl2KcCiVqa6f`'D"d/M5f`r<gR])K,:YPtL"U]-kaQN!$GNW+V1Jc:,t
G5cR^DuOJMAc?0<?iF:/=oMG#;uTVm:B!rd9E%Q_8cD9X8,c!T7JfLG6g-ke6@hG)6%M=Q6+0,W6hNkH
7JfRR8,c'Y8cD?]9E%Wa:B")h;uTer=oM\*?iFO6B)ZNDDuOhWG5csiJc:?%NW,+?QN!KTUAh+jYPtp.
])KPF`r=0\d/MSpf`'e-ir8$<l2L&Kn,DkVo`"R`q#:*gqYpElr;cftrr1FIeGoOIqu-NkrqcWirq??`
rq$-YrpB^NroO.>rnm_0rmq(srm(Mbrkn`Lrj_s5riH*rrh07Zrg!JDreUQ,rdXomrcS3[rb_XJral(:
ra#M-r`9"tr_remr_NMgr_*5_r^m)[r^ZiTqaLKPgdD!,JO5)XJO4oSf0\1YqaCEPpdY6Qr^d#[r_!/_
r_EGgr_WSmr`/qur`fA.ra>_:rb;@Krc.p[rd"Kmre(3+rf@&CrgNhZrhf[rrj)O5rkABLrlG)armLet
rnIG0ro3q=rp0ROrp]pYrq69arqZQirql]nrVcisrm^tts8N#prVl`oqu6Hkp\smco`"@Zmf)VQkl0]C
ir7g6gA]Y%d/M8ga8WmR]`,D>Yl:^&VZ*4eRf8TONrFn7K`6K#HN&*eE;j_RCAqcC@K'X5>Q.e)=8l+s
;#X8i:B!ue9`@Z]8cD9X8,,RK7INYC6\.UU6\.UU6dA'f7/04G7fGpT8H)3X9)_N`:&[oe:]=5j;Z9bs
=oMY)?iFO6AH$?CD#SDQG5cjfJ,Y-#M>iP7Q2[6OTDk_eX8]@&\,O#=_#DCRbPolfec+8$hYuO6k5OTD
mJcSRnG`(Zp&=^bqYpBkr;QZnrW3#teGn%urr2fnrqucmrqcWhrq??arpp'XrpKdMroa:Aro!e2rn.4u
rm(McrkeZKrjr*7riZ7#rh9=^rgEbIrf$i5rdk&trd+Qbrc%jRrb)4AraGe5r`fA)r`9"tr_i_lr_EGe
r_32^qapcXpdb*KlU?@nJOP,YJOR4?pdY$Kqag]Xr_*,^r_<Afr_WSlr`&ktr`T5*ra5Y5rac"@rb_XR
rcA'brdFcsre^W6rfI,Irgj%^ri5t#rj)O7rkABKrlY5crmLeurnIG1roF(ArosFMrp]pXrq69brqQKh
rql]mrr)fp!WN)Js3^lGrqlZnr;QQlq>U0gpAX[_o)A+Wm/H8Kk5O<<h>Z.-eGdkpcMkf^_Z%:K[JmK2
Y5Y6rT`1M]PQ$[CNW+V1Jc:,tG5cR^DuOSPB`;QA@/aL3>lIk)<rQ+u;Z9Pm:]=2i:B!rd9E%QY8cD9U
8*`Wq7Y+$[7Y+%A7efLN8Gc!X9)_K_9`@cc;#X8i;>sJm<W6)!=T2S)?N+@3AH$6@D#SAPF8g@^If=ot
K`6u1OT(ICSc5>^V#IOrZ2V01^AbtJ`W"0^dJhYpgA]q-i;Vm<kl0rJn,DkVoD\I_p\t!fqYpBhrVlcr
s3gqms8N#prVl`oqYp9hp\sgao)A+Wmf)POkl0ZBiVq^5f`'D"ci2,e`W![P]Df8<Z2Ug'V>d.eS,S]P
OT(1;LAlc'IK"KjFT-7YD>n;LAc?3=?iFC2>Q.e)<rQ(t;uTYn;#=&f:B!ue9`%KX9'](B8V'Ek8:a<_
8D6Vp8bbpW9D_E^:&[ob:]=2i;>sMn<W6%u=oMY)?N+=2@fBs<CAr&KE;jtYH2`6kJc:E'MuJh;QN!BQ
T`1hfX8]C'[f3o<_#D@QbPoieeGe,"hYuL5jSnBBlMg5Nn,DnWo`"Uaq>U6fr;QZlrW)uHs3CZDrqlZn
r;QQlq>U0gp&=U_nc&"Vli-/Jjo4<>hu;C0fDa7uc2Pf``;[LM])K,:Y5YF"V#HtbRJrHMNrFq8LAl`&
I/\EjErL"VD>n5JB)Z??@/aL3>lIk)=8l8"<;ohq;Z9Pm;#X8i:A[c\9^>@F97]]o8qBTc9%lnt9DD3[
:&@]b:]=2i;>sJm;uTbq<rQ2"=T2S)?N+@3AH$3?B`;lJE;jnWH2`3jJGt<&MZ/Y8Pl@*MT)PPbWW'("
[Jm`9^Ac(Mao9Qae,Itug]$+0ir8'=l2L&Kn,DkVoD\F^q#:*gqYU3irVQQos3gqms8N#mrVlZjq>U*e
o`"I]nG_hSli-)Hjo46<h>Z+,f)F%qbl5]__#D"G\Gi`3XT#0tT`1J\RJr?JNrFt9KDpE#IK"BgF8g+W
D>n8KBDuB>@/aO4>lIq+=T2A#<W5ts;Ys>g;#X8i;#=&f:@:jS9n>um9S#lg9\2u):&@]_:]=2i:]!uf
;>X8j<;ons<rQ5#>5he+?iFL5@fC$>CAr)LDuOeVFoHggJGt3#MuJb9OoCdJSc5;]W;`mtYl;03]`,_G
aSsE_d/MVqg&Bh,iVqp;kPjfHmf)_ToD\F^pAXmbqY:$drW)uHs3(HArqlZnr;QTmqYp6gpAX^`nG_nU
mf)MNkPjQAi;VO2g&BG!ci22g`W!aR^AbS?ZMq',VuEIjTDk5WPQ$XBMZ/A0Jc:,tHN&-fEW0nUD>n5J
Ac?3=@/aO4?N+1.>5h\(=T2D$<rQ+u<;oed;>sAj;"mb::Ou;m:Ou<_:]=2i:]=2`;>sJm;uTer<rQ2"
=T2J&>5hb*?N+=2@/a[8B)ZKCD>nJQEW11]HN&BmJc:E'MZ/\9Pl@'LTDkVbVuEn!Zi7E4^AbtJ`W"-]
d/MJmg&Be+i;Vg:kl0lHmf)\SnG`(Zp&=^bqYpBkr;QZlrqcZCs3(HArqlZnr;QTmqYp9hpAXaaoD\:Z
n,DYPl2KlFiVqa6h#>n(e,I\mao96X_#CqE[f3Q2X8]!qUAg\^R/W<KNrFq8L]2l(If=]nFoHI]DuOSP
C&VcEAH$';@/aO4?2e+.>5h\%=T2D$<r5no<;TVd;Lq_s;Lq_s;T2Q5;tX,h<W6%u=8Q,!=oMV(>lJ%.
?iFI4A,^$<BDuWED#SAPErL4\HiAKnJc:H(MZ/Y8PQ$pJSGo8^VuEarZ2V01])KME`W"!Yci2Dmf)FJ(
hYuL5kPj`Fli-APnc&.Zp&=^bq#:-hqu6NmrVQTjs3gqjs8N#mrVl`oqYp<iq#:$eo`"F\n,D_RlMg#H
j8S$:hu;:-ec*tqc2Pf`_u@CL\c/u8YPtR$VZ*7fSGnoTOoCC?MuJD/Jc:/uH2`!dF8g.XDZ4JOBDuNB
AG]g4?iF@1>lIt,>5MG!=8l7g<VBFD</ae-<.S$&<9[E[<rQ1q=T2J&>Q.n,?2J".@/aU6AH$0>BDu`H
DZ4VSF8g@^H2`<mK)UH&MuJb9OoCaISGo2\VZ*UpYPtp.\c0>B_u@aVc2Q,iec+5#hu;U6j8S9AlMg2M
n,DnWo`"Uaq#:*gqYpBhrVQTjs3gqds8N#prVl`oqYp<iq#9sco`"C[nG_hSli-)HjSn*:h>Z+,ec*qp
c2Plb_Z%=L]`,;;Yl:d(V>d4gTDk8XQ2ZmEN;eY4KDpE#IK"TmFoHI]E;jeTD#S5LB`;WCAH$';@K'X5
@/aO1?N+70>jknq>4YpK=cZ^:=b0`6=moP_>Q.n,?2.b*@/aO4@K'a8AH$3?B`;fHD>nJQE;jqXFoHae
IK"crKDpZ*N;eq<Q2[3NTDkSaV>dUrZ2V-0]`,\F_Z%^Wbl5ugec+8$h>Z@3jSn?Ali-;NnG_tWoD\F^
q#:*gqYU3irVQTgs3gqds8N#prVl`oqYp<iq#:!do`"I]nG_kTmJcALk5OB>hu;C0f`'A!d/M;h`r<jS
^](eC[JmE0WrAmpUAgb`RJrHMOT(4<M>i/,Jc:/uHN&-fFoHC[E;jeTC]8)JC&VcEB)ZB@A,]s7@K'[0
?hIb(?1qQT>`;p=>_-/6>kMCn?Me+/@/FC3@fBm:Ac?<@BDuWECAr#JDuO_TEW1+[GlE$gJ,Y#uKDp`,
N;eq<Pl@*MT)PJ`VZ*UpYl;'0\c0AC_u@[Tc2Q)he,J#!g]$+0ir8*>l2L)Ln,DhUoD\F^pAXjdq>U6f
r;QZlrqHH@s2G$;rqQHkqu6Hkq>U-fpAX^`nc&%Wn,DVOkPjTBiVq^5g]#e'e,I\mb5TE[_>_1J\c/r7
YPtR$VuE@gSc5)WPQ$^DNrFk6L&QZ&JGsurHN&'dFT-=[E;jbSD>n>MCAqoGB)?0=AG]m9@e*t+@"D^:
@"D^:@*W0Q@JaO5A,Bg9Ac$*=B`;`FC]82MDuO_TErL.ZFoH^dI/\ZqJc:B&M#NG6OT(ICRf8lWT`1kg
X8]=%Zi7K6^AbtJ`W"$Zci2Dmf)FG'hYuL5jo4KClMg8OnG_tWo`"O_p\t!fqYpBerVQTgs3gqas8N#p
rVl`oqu6Hkq>U0gp\sgao)A+Wmf)POl2KfDir7j7gA]_'eGdhobl5]__>_4K]`,;;Z2Up*W;`UlTDkD\
R/W?LOT(7=MZ/>/KDU/tI/\HkG5cU_F8g.UDu4DND"qcBC&Vf<BDcEAAq=NMAV"EDA_gqpB('C0B`;`@
CAViHD>nJNE;jqXFoHR`HN&<hJ,Y'!L&Qu/N;eq<Pl@*MSc58\V#I=lY5Y^*[/R`;^AbtJaSsB^d/MPo
f`'V(hu;X7jo4NDli->On,DnWo`"Uaq#:*gqYpBkr;QZlrpg$:s2+g2rr2ipqtp6hq>U0gp&=U_nc&%W
mJcGNkPjTBiVq[4gA]b(df.PkbPoK[_Z%=L\c0&:Z2Um)WW&doT`1M]Rf8QNOoCC?MZ/G2LAlf(JGt#s
HiA<iGQ)aaFT-@\EW0qVDuOYID>nADC]%t!Bng>QBn:!MC%#j7D#8)HDZ4SRE;jkVF8g:\FoHUaH2`0i
If=lsK)UN(M#N;2NrG1?Pl@-NSc5;]VZ*RoXo>U)[Jm`9^])+L`W"'[ci2Alf`'V(h>ZC4jSn?Ali-;N
nG_tWoD\F^q#:*dqYpBkr:p9]s3gq[s8N#srVl`oqu6Hkq>U0gpAX^`oD\7Ymf)SPkl0`DjSn*:h>Z.-
eGdnqci2)d`r<gR^Ab_C[f3N1Xo>C#V#I(eTDk;YQN!'HOT(7=MuJJ1K`6T&JGt#sI/\HkH2`'fFoHL^
F8g4WEV4;FDu=O)DME%[DLl]WDY7r=E;jkSErL.ZFT-F^GlE!fHN&<kIf=lsK)UH&LAm,1NW,%=P5^gI
Rf8rYUAgtfX8]:$Yl;*1\c0>B_>_FQb5T`ddf.bqgA]q-i;Vg:k5OTDm/HGPnG`%Yp&=[aq#:*gqYpBk
r;QZlrpKg7s1JC2rqQHhqu6Hkp\smcp&=O]nG_nUm/H;Lkl0WAiVqa6gA]\&df.Vmbl5``_u@LO^AbYA
[/R</Xo>=!VZ*7fT)P8ZQN!-JOoCIANW+k8LAll*KDpH$JGt&tIf=cpI/\KlHN&3bGlDm\FTHW-JTQNd
JTQHbd<,8.qf_aZrd"Khrd4WlrdFcprdXotrdk'$re:?+repc8rfI,ArfmDJrg`tZrh07fri,n!rilC0
rj_sArkSNNrlP/`rm:Ymrn%/'rnm_6ro="Arp'LLrpTjVrpp']rq??cqtg<hq#1*hmf1`8]`7m.qu-Nl
rql]krqQKerq??_rpp'XrpKdOrosFEroF(;rn[S,rn%.trm1Sgrl>#VrkSNGrji$:rilC(ri?$qrhKIb
rgj%Wrg<\Lrf[8Arf-o7reUQ.re:?)rdt-#qgeZqrdOWiqg80cJU2lnJU2lnaEmi4pjE'irdXfqrdk'#
re19)reCE.reg]7rf@&ArfmDLrgNhWrh'1brhf[qriZ7)rjMg9rk/6Grl"fVrltGhrmLetrn@A-ro*k;
roX4Erp0ROrp]pXrq$-_rqHEerqcWkrqucop&=CZdf6lXrr2fnrqucmrqcWirqQKerq-3]rpp'XrpB^N
roj@DroF(:rn[S-rmh"srm1SgrlG)XrkSNHrk&0:rj)O,riH*trh]Ufrh'1\rgEbPrfmDErfI,>rf$i7
reg]2reCE+re19'rdt#upji?nrdXuuJU`6#JU`6#d=;.GrdXTkrdk'#re(3're:?,reUQ2repc7rf6u=
rfR2Erg*POrgj%\rh9=fri#gtric=,rj;[:rkABIrl+lYrltGgrmLerrn@A-ro!e:roX4Drp0ROrp]pX
rq$-]rqHEerqZQirql]mrr)`nkl9*2\c;I(qu-NlrqcNfrqHEcrq-3[rp]pUrp0RKroj@Aro*k6rnIG*
rmq(qrm(Merl4rTrkSNIrjr*<rj)O-riZ7#rhoakrh07_rgs+YrgEbOrfmDGrfR2Arf@&=qi1T6pko',
qhP-)JVJ`1JVJ`1cA)=RqhY$)qi(N6qi:Z;rfR2DrfmDJrg<\Srgs+]rh07drhoaqriZ7)rj)O4rjr*C
rkSNOrl4r]rm(Mirmq)$rnIG0ro*k:roj@Grp0RPrp]pWrq-3_rqHEfqtg3frr)Wkkl9*2\c;I(qu-Nl
q"k!brq??arq$-[rpTjSrp0RJroX4@ro*k6rnIG*rm^qprm1SerlP/Zrk\TKrk/6?rjDa1ric=&ri5sp
rhTOfrh07^rg`tVrgEbQrg!JIrfd>ErfR)>rf?r:pPf35NId%@N.Hq=N7!U]NV/>/OSb4?PQ$gGQ2[0M
RJrZSSGo,ZT`1\bV#I7jWrB+!YPtg+[Jm]8]`,YE_>_IRaSsB^ci2AleGe/#h#?41iVqp;k5OWEli->O
n,DkVoD\F^p\ss_qYU3irV6BUs3gqRs8N#mrVQKkqYp9ep\sgao)A1YnG_hSli-,Ik5OKAi;VU4h>Z%*
ec+"rd/M;hbPoK[_u@FM^AbbD\Gii6ZMq',Xo>@"W;`UlUAgkcT`1P^SbnoURf8]OQi<9LPkC7>OoUX9
Ob&UTOF`LEOPl5nOo(=7PQ$gGQ2[-IR/<?OS,SuXTDkM_U&LhdV#I=lWrB."YPtg+Zi7K6])KGC^])+L
`W"'[c2Q)hdf.erfDaV*hu;R5jo4HBkl0oImf)_Tnc&.Zo`"U^q"speqtU-eroO1.s02P&rqQHkr;QTm
qYp<iq#:$epAX^`nc&%Wn,D\QlMg#Hjo4<>i;VU4g]#n*eGdnqci25hbPoT^`;[UP^](nF])K5=[/RB.
Yl:g)XT#0tVuERjU]."eT^n`MSc,)JS:R/mRt7&[S*$4)SG8ZJTDP;YUAgqeVZ*LmW;`mtXo#@%Zi7?2
\Gj)=]`,\F_Z%LQaSs?]cMl/hdf.bqg&Bb*hYuI4j8S0>kl0lHm/HJQnG_tWo`"O_p\sseq>U6iqu6Nj
rVQTOs3gqOs7lTjrVl`oqYU*fq#:!dp&=R^o)A.Xmf)SPlMg#Hk5OH@i;VU4h#?"+fDa>"dJhJkbl5``
a8X$V_#D+J^Ab_C\Giu:[/RB1Yl:j'Xo>?tWW&gpVY-e\U]-tfTn/ngTn/ngU"#e5UA1MVV>d@kVuE[m
WrB."Y5YX(Yl;!.[/RQ6\c02>^AbnH_#D:O`r=*Zbl5oedJh\qfDaJ&h#?10i;Vg:k5OTDlMg,Kmf)_T
o)A7[p&=^bq#:*dqYU3irV6BLs3gqIs8N#mrVQKkqYp9ep\sgaoD\=[nG_nUmf)MNkl0`Dir7p9hu;L3
g]#k)eGdnqci25hbl5ca`W!gT_Z%@M^AbhF])K5=[emE1ZMq**YPt^(Xo>EsX8]-nW<&utJZ+4"JZ+-u
dAZrAql9FlriH+$riZ7(qlot'rj2U4rj_s=rk8<GrkSNMrkn`SrlY5`rm(MhrmLeqrn.5(rndY3ro*k9
roX4Drp'LNrpTjUrpp'[rq-3aqtU'brqlKhqu5CNdf66Frr2]krqucmrqcWirqQKerq??arpp'XrpTjS
rp9XMroj@DroF(:rnm_3rn@A(rn%.trm:Yjrm(MerlY5[rl+lTrk\TLrkJ?Drk/6@rj_s:rjM^3rj;R/
os+S&o<EkNO0F2>J["(:os+(nrj2L/rjDX3rjVm:rjhp=rk8<GrkSNLrl"fTrl4r[rlkAerm1SkrmLet
rn7;)rndY3ro!e:roX4Drp0RNrpKdSrpg!Yrq69arqHEerqZQirql]mqu-Ekf)O1uVuQPkqu-NlrqcNf
rqQKerq??`rposUrpKdQrp'LHroa:Aro3q7rndY0rn@A'rmh"srmC_lrm(MdrlY5^rl4rVrl"fQrk\KH
qn<!Ark&'=qmlC0!4V@)J[UiPJ[U-<j0nNfo!n\0pq$I:rk/6DrkA9Erk\TNrl"fTrl4rZrlY5`rm(Mh
rmC_ormh#"rn@A+rndY3ro3q<roa:Frp'LMrpK[Qrq$-]rq??crqQKgqtg3frr)Wkf)O1uU&Y,kq#1*e
rqcWirqQKerq69_rq$-Zrp]pUrpB^NrosFEroF(=ro!e5rndY/rn7;&rmh"trmLemrm1ShrlkAarlP/Z
qo/HMrke?DqnN-EpV#t-J\78\J\6QHj1OWiqnE'Eo"b.>rkn`Sqo8WWrlb;brm(Mhrm:YmrmUksrn%/&
rnIG/rnm_5ro=">roX4Erp0RNrpTjUrpg!Zrq-3_rqHEerqZHfrqlKhqu5(Edf5p=rr2]krqucmrqcNf
qtL*`rq-3\qsaURrpKdOrp'LHroX4@ro3q8rnm_3rnRM,rn7;$rm^qrrmC_lrm1Shqp##]rlY5^rlFlT
rl4iSqS^q&J]"V-J]!&VaMe(sqo8NRrlG)\qo\o]rlt>crm1SjrmC_orm^qtrn7;*rnRM0rnm_5ro3q<
roX4DrosFJqsO@Nrq$-]qtC$`rqZHfrql]mqu-Ekc2Z5lT)\Tbqu-NlqtpBhrqZQgrqHEbrq-3]rpg!W
rpTjRrp9XLroj@EroX4@ro3h5rndY0qq:u$qpk\qrmLenqp>>grm(Dcqonr\oZI!Pg<"oeYfMC:J]Ri3
i5t6+rlauYrlt>cqp>5gqpbVqqq1o$rnRM/qr%J6roF(@roa:Erp'LKrpB^Rrp]pWrq$-]rq69brqQKg
qtg<hqu$Hlq#8P<df5^7rr2]krqucmqtg<frqQKerq??arq$-[rpg!WrpTjSrp0RKroj@DroO.?ro3q9
qqq;,rn@A)rn.5$qpkSmrmL\kpsB#drm:Dcp<S<8N6[""J^2upn'D![rm18armCVkrmUksqptc!rn7;)
rn[S1qqqD3ro3q<roO.Aroj@Grp0ROrpTjUrpg!Yrq$-^rq??crqQKgqtg<hrquQiqu4b<df5U4rr2Th
rquZjrqcWirqQKerq??arq-3\rpg!Vrp]pTrpB^Nrp'LIroa:CroF(<ro*b4qqq;,rnRM,p"B>srn%/#
n^RZje`kS7e!ng;dt-!:e)SsKec+/!fDF4tg&'M#h#?.,htu@/ir8$<jo4HBl2KuIli-;Nmf)_Tn,DkV
o)A:\p&=[ap\sseq>:$fqtp<grVQT4s3gq4s7QBjrVQNiqu6Hhq>U-fpA=O^o`"I]nc&%Wn,)MOm/H;L
l2KoGk549;j8S';i;;F,h>Z4&g]#q!g#Uh;fUg`HfR_]Af\5$UgABY%h"]_)htu@/ir8!;jnn3>kl0iG
lMKrImJcSRnG_tWoD\CZp&=[ap\t!cqYpBer;QZfrl"ibs,[3Wrq66hr:p-fq"sgbpAXaao`"I]o)A1Y
nGD\RmJcJOlhfrGkl0`Ajnn*;iqq^0i;VX5i;;F,hYl8]h1=C5h1=D-h>#k(hu;R5ht>q,iVVX6j8S0;
k54BAl2L#Jm/HDOn,)VRnc&+YoD\C]p&=[ap\Xa\qYU3frUp0+s3gq%s8N#mrVl`lqtU$eq"sgbpAXaa
o`"FYnc&%Tn,DbPmJH5KlMKiFkkjQBk4Rg.j8.d5idp'CiITs=iRd&Ziqqd,jSS*=kPOKBl20cFli-;K
mf)\PnG_tTo)A:\p&=[ap\Xa\qYpBhr:p6frj`!Vs+^RHrqQEgqu6Heq>U-fpA=O^o_\7Zo)A1YnGD\R
mf)VNm/H>JlMg&=kkjQ8k5=@mjbDlJjalOFjmV@2kO7X6l20cFlhg&JmJcPQn,)VRnc&+VoD\CZp&=[a
p\=R]qYpBer:9iss3gq"s7lTgrVl`lqtU$eq"XU_pAXaao_\7Zo)%tSnG_nUnG_nUmecDEm.fl<klL&5
J`qaMJ`q[KdHL8fq!.G:rpBUNrp]pUqsaUTqssaXqt0m\rq?6`qtTs_rqlTjq#1!eZN&AQJcGTHq#:'e
rquZjq"jm`rqQ9_rq?6^rq-3]rposVq!e:Orp]LIo^7:uJaS*WJaUMFo'cSIrpTOLrpg!Yrq$-]rq60^
q"O[\rqZ?crqlTjq#1!eWW1EHJcGTHn,E+[q"t'eo(i(Tq"=FSq"+1Lqsj=JJae6[Jae6[`UNlso()SI
q"4@Sq"OIWqtg*bq#'U[WW1EHJcG9?q#9j_rquZjp%nR]rqQ9_q"FUXo(;AA!V>o6nq6Lanq$AZo()D=
o`"OYpA"CZq#:*[qYpBhr:U$`rh0;>s+146s7QB^rV6<fqt9g\q=saEp\+?4p5J]rp4;qkp=f99q"X[U
qYpBer:U$Zrg3Z5s+146s5s=Rr9X=[qUt]<q18="pjr3kptGMjq>:$Zqss[Irg3Z5s+14's7QBUrVQN`
qr7I'qLSKoqLSLLqXsaYr9XCQrepg)s+13gs6os6r;llqJc(/uJc()sdJVDjn,@n<oDd8=JcE[g^]"63
Jc1/uJc1/ueG[&ZJcG?Adf4muRfDUNJc:6"Jc:6"[f1jXbl?,kJcC<$JcC<$JcC<$JcC<$df4muJcC<$
JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$
df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$JcC<$JcC<$df4muJcC<$JcC<$JcC<$JcF0uJcC<$JcC<$
JcC<$JcC<$df4g
~> %APLeod
EI
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
11 335 m
81 335 l
81 273 l
11 273 l
h
11 335 m
f
1 J
1 j
0 0 0 sc
1 0 0 -1 -40 417 cm
51 82 m
121 82 l
121 144 l
51 144 l
h
51 82 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 46 304 cm
/F1.1[ 12 0 0 -12 0 0]sf
-25.429688 -3 m
(!"#$%&'\($)[ 3.457031 7.447266 4.488281 6.685547 4.910156 4.412109 6.626953 6.146484 0.000000 ] xS
-28.980469 12 m
(\)*+,-#$%)[ 8.302734 7.371094 11.203125 7.552734 7.447266 4.488281 6.685547 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
205 335 m
275 335 l
275 273 l
205 273 l
h
205 335 m
f
0 0 0 sc
1 0 0 -1 -40 417 cm
245 82 m
315 82 l
315 144 l
245 144 l
h
245 82 m
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 240 304 cm
-21.679688 -3 m
(\)*"#%*.)[ 8.302734 7.371094 7.447266 4.488281 4.910156 7.371094 0.000000 ] xS
-28.980469 12 m
(\)*+,-#$%)[ 8.302734 7.371094 11.203125 7.552734 7.447266 4.488281 6.685547 0.000000 ] xS
0.60000002 i
/Cs3 SC
0 0 0 sc
1 0 0 -1 -40 417 cm
315.5 113 m
408 113 l
408 348 l
S
1 1 1 sc
CM
428.54999 278 m
496.45001 278 l
504.48157 278 511 269.936 511 260 c
511 250.064 504.48157 242 496.45001 242 c
428.54999 242 l
420.5184 242 414 250.064 414 260 c
414 269.936 420.5184 278 428.54999 278 c
f
0 0 0 sc
1 0 0 -1 -40 417 cm
468.54999 139 m
536.45001 139 l
544.48157 139 551 147.064 551 157 c
551 166.936 544.48157 175 536.45001 175 c
468.54999 175 l
460.5184 175 454 166.936 454 157 c
454 147.064 460.5184 139 468.54999 139 c
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 462.5 260 cm
-23.469727 -3 m
(/!01213)[ 6.433594 3.457031 7.587891 6.503906 8.865234 6.503906 0.000000 ] xS
-16.839844 12 m
(2451)[ 8.865234 9.322266 8.988281 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
428.54999 221 m
496.45001 221 l
504.48157 221 511 212.936 511 203 c
511 193.064 504.48157 185 496.45001 185 c
428.54999 185 l
420.5184 185 414 193.064 414 203 c
414 212.936 420.5184 221 428.54999 221 c
f
0 0 0 sc
1 0 0 -1 -40 417 cm
468.54999 196 m
536.45001 196 l
544.48157 196 551 204.064 551 214 c
551 223.936 544.48157 232 536.45001 232 c
468.54999 232 l
460.5184 232 454 223.936 454 214 c
454 204.064 460.5184 196 468.54999 196 c
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 462.5 203 cm
-23.469727 -3 m
(/!01213)[ 6.433594 3.457031 7.587891 6.503906 8.865234 6.503906 0.000000 ] xS
-16.839844 12 m
(2451)[ 8.865234 9.322266 8.988281 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
428.54999 164 m
496.45001 164 l
504.48157 164 511 155.936 511 146 c
511 136.064 504.48157 128 496.45001 128 c
428.54999 128 l
420.5184 128 414 136.064 414 146 c
414 155.936 420.5184 164 428.54999 164 c
f
0 0 0 sc
1 0 0 -1 -40 417 cm
468.54999 253 m
536.45001 253 l
544.48157 253 551 261.064 551 271 c
551 280.936 544.48157 289 536.45001 289 c
468.54999 289 l
460.5184 289 454 280.936 454 271 c
454 261.064 460.5184 253 468.54999 253 c
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 462.5 146 cm
-23.469727 -3 m
(/!01213)[ 6.433594 3.457031 7.587891 6.503906 8.865234 6.503906 0.000000 ] xS
-16.839844 12 m
(2451)[ 8.865234 9.322266 8.988281 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
428.54999 107 m
496.45001 107 l
504.48157 107 511 98.936005 511 89 c
511 79.063995 504.48157 71 496.45001 71 c
428.54999 71 l
420.5184 71 414 79.063995 414 89 c
414 98.936005 420.5184 107 428.54999 107 c
f
0 0 0 sc
1 0 0 -1 -40 417 cm
468.54999 310 m
536.45001 310 l
544.48157 310 551 318.064 551 328 c
551 337.936 544.48157 346 536.45001 346 c
468.54999 346 l
460.5184 346 454 337.936 454 328 c
454 318.064 460.5184 310 468.54999 310 c
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 462.5 89 cm
-23.469727 -3 m
(/!01213)[ 6.433594 3.457031 7.587891 6.503906 8.865234 6.503906 0.000000 ] xS
-16.839844 12 m
(2451)[ 8.865234 9.322266 8.988281 0.000000 ] xS
0.60000002 i
/Cs3 SC
0 0 0 sc
1 0 0 -1 -40 417 cm
453.52341 158.03653 m
408 159 l
S
453.50583 213.48154 m
408 212.99998 l
S
454 275.48199 m
408.49399 275 l
S
454 327.98199 m
408.49399 327.5 l
S
/Cs1 SC
0 sc
0 i
1 0 0 -1 457 24 cm
-2 -10.5 m
(6)s
-2 4.5 m
(6)s
-2 19.5 m
(6)s
3 w
0.60000002 i
/Cs3 SC
0 0 0 sc
1 0 0 -1 -40 417 cm
137.39999 113 m
228.60001 113 l
S
CM
199.8 304 m
188.60001 308.20001 l
188.60001 299.79999 l
h
199.8 304 m
f
0 J
0 j
1 0 0 -1 -40 417 cm
239.8 113 m
228.60001 108.79999 l
228.60001 117.20001 l
h
239.8 113 m
S
CM
86.199997 304 m
97.399994 299.79999 l
97.399994 308.20001 l
h
86.199997 304 m
f
1 0 0 -1 -40 417 cm
126.2 113 m
137.39999 117.20001 l
137.39999 108.79999 l
h
126.2 113 m
S
1 1 1 sc
CM
102 311.5 m
178 311.5 l
178 296.5 l
102 296.5 l
h
102 311.5 m
f
/Cs1 SC
0 sc
0 i
1 0 0 -1 140 304 cm
-32.53125 4.5 m
(7338901:3)[ 8.818359 7.587891 7.587891 6.632812 6.292969 7.587891 6.503906 6.462891 0.000000 ] xS
0.60000002 i
/Cs3 SC
1 1 1 sc
CM
289.5 311.5 m
346.5 311.5 l
346.5 296.5 l
289.5 296.5 l
h
289.5 311.5 m
f
/Cs1 SC
0 sc
0 i
1 0 0 -1 318 304 cm
-23.469727 4.5 m
(/!01213)[ 6.433594 3.457031 7.587891 6.503906 8.865234 6.503906 0.000000 ] xS
ep
end
%%Trailer
%%EOF

Added Docs/Images/system.graffle.

cannot compute difference between binary files

Added Docs/Images/system.png.

cannot compute difference between binary files

Added Docs/Video/P1040172.MP4.

cannot compute difference between binary files

Added Docs/firenet.bib.

















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
%% This BibTeX bibliography file was created using BibDesk.
%% http://bibdesk.sourceforge.net/


%% Created for Jim at 2010-11-14 07:27:56 -0500 


%% Saved with string encoding Western (ASCII) 



@url{Cappuccino,
	Author = {280 North},
	Date-Added = {2010-11-14 07:26:20 -0500},
	Date-Modified = {2010-11-14 07:27:55 -0500},
	Keywords = {Cappuccino,web framework, javascript},
	Lastchecked = {14-Nov-2010},
	Title = {Cappuccino Web Framework},
	Urldate = {http://cappuccino.org/}}

@url{libmicrohttpd,
	Author = {Christian Grothoff},
	Date-Added = {2010-11-14 07:23:19 -0500},
	Date-Modified = {2010-11-14 07:24:26 -0500},
	Keywords = {HTTP,web server,},
	Lastchecked = {14-Nov-2010},
	Title = {GNU libmicrohttpd},
	Urldate = {http://www.gnu.org/software/libmicrohttpd/}}

@url{Lua,
	Author = {Roberto Ierusalimschy,Departamento de Inform{\'a}tica, PUC-Rio},
	Date-Added = {2010-11-14 07:20:49 -0500},
	Date-Modified = {2010-11-14 07:22:21 -0500},
	Keywords = {Lua, scripting,language},
	Lastchecked = {14-Nov-2010},
	Title = {Lua Home page},
	Urldate = {http://www.lua.org}}

@url{Arduino,
	Author = {Arduino},
	Date-Added = {2010-11-14 07:17:39 -0500},
	Date-Modified = {2010-11-14 07:19:05 -0500},
	Keywords = {Arduino,microprocessor, IDE },
	Lastchecked = {14-Nov-2010},
	Title = {Arduino Home Page},
	Urldate = {http://www.arduino.cc/}}

@url{REST,
	Author = {Wikipedia},
	Date-Added = {2010-10-31 17:49:05 -0400},
	Date-Modified = {2010-10-31 17:50:13 -0400},
	Keywords = {REST WWW HTTP architecture},
	Lastchecked = {31-Oct-201},
	Title = {Representational State Transfer},
	Urldate = {http://en.wikipedia.org/wiki/Representational_State_Transfer}}

@url{HTTP,
	Author = {Christian Grothoff},
	Date-Added = {2010-10-31 17:36:10 -0400},
	Date-Modified = {2010-10-31 17:48:07 -0400},
	Keywords = {HTTP library},
	Lastchecked = {31-Oct-2010},
	Title = {GNU libmicrohttpd},
	Urldate = {http://www.gnu.org/software/libmicrohttpd/}}

@techreport{JSON,
	Author = {D. Crockford},
	Date-Added = {2010-06-08 07:10:35 -0400},
	Date-Modified = {2010-06-08 07:13:28 -0400},
	Institution = {Network Working Group},
	Keywords = {JSON JavaScript Objects},
	Month = {July},
	Number = {4627},
	Title = {The application/json Media Type for JavaScript Object Notation},
	Type = {Request for Comments},
	Urldate = {8-Jun-2010},
	Year = {2006},
	Bdsk-Url-1 = {http://www.ietf.org/rfc/rfc4627.txt?number=4627}}

@url{subversion,
	Author = {Subversion Software project},
	Date-Added = {2010-05-12 06:40:29 -0400},
	Date-Modified = {2010-05-12 06:43:02 -0400},
	Keywords = {subversion, version control systems},
	Lastchecked = {12-May-2010},
	Title = {Apache Subversion},
	Urldate = {12-May-2010},
	Bdsk-Url-1 = {http://subversion.apache.org/}}

@url{FOSSIL-HOME,
	Author = {D. Richard Hipp},
	Date-Added = {2010-04-30 06:36:02 -0400},
	Date-Modified = {2010-04-30 06:38:54 -0400},
	Keywords = {Fossil wiki},
	Lastchecked = {30-April-2010},
	Title = {Fossil Home Page},
	Urldate = {http://www.fossil-scm.org/index.html/doc/tip/www/index.wiki},
	Bdsk-Url-1 = {http://www.fossil-scm.org/index.html/doc/tip/www/index.wiki}}

@url{USE-SCCS,
	Author = {University of Texas},
	Date-Added = {2010-04-30 06:19:37 -0400},
	Date-Modified = {2010-04-30 06:20:45 -0400},
	Keywords = {SCCS use UTexas},
	Lastchecked = {30-April-2010},
	Title = {How we use SCCS},
	Urldate = {http://www.utexas.edu/cc/unix/OurSCCS.html},
	Bdsk-Url-1 = {http://www.utexas.edu/cc/unix/OurSCCS.html}}

@url{LyX,
	Author = {Mattias Ettrich},
	Date-Added = {2010-04-25 07:23:20 -0400},
	Date-Modified = {2010-04-25 07:25:52 -0400},
	Keywords = {Tex LaTex document processor},
	Lastchecked = {25-Apr-2010},
	Title = {LyX - The Document Processor},
	Urldate = {www.lyx.org},
	Bdsk-Url-1 = {http://www.lyx.org/}}

@url{RCS,
	Author = {Walter F. Tichy},
	Date-Added = {2010-04-25 06:56:56 -0400},
	Date-Modified = {2010-04-25 06:58:43 -0400},
	Keywords = {version control systems},
	Lastchecked = {25-Apr-2010},
	Title = {RCS - A System For Version Control},
	Urldate = {http://www.burlingtontelecom.net/~ashawley/rcs/tichy1985rcs/html/index.html#id2456539},
	Bdsk-Url-1 = {http://www.burlingtontelecom.net/~ashawley/rcs/tichy1985rcs/html/index.html#id2456539}}

@article{CVS,
	Author = {Dick Grune},
	Date-Added = {2010-04-25 06:52:55 -0400},
	Date-Modified = {2010-04-25 06:56:06 -0400},
	Journal = {unpublished},
	Keywords = {concurrency, version control systems, RCS, multiple file update, user interface},
	Title = {Concurrent Versions System, A Method for Independent Cooperation},
	Year = {1986},
	Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUIJidUJHRvcFgkb2JqZWN0c1gkdmVyc2lvblkkYXJjaGl2ZXLRBgdUcm9vdIABqAkKFRYXGyIjVSRudWxs0wsMDQ4RFFpOUy5vYmplY3RzV05TLmtleXNWJGNsYXNzog8QgASABqISE4ACgAOAB1lhbGlhc0RhdGFccmVsYXRpdmVQYXRo0hgNGRpXTlMuZGF0YU8RAaoAAAAAAaoAAgAACVdoaXRlQm9vawAAAAAAAAAAAAAAAAAAAAAAAMbVOKpIKwAAADTAvA1DVlMtZ3J1bmUucGRmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANMC9yEDTxAAAAAAAAAAAAAIABAAACSAAAAAAAAAAAAAAAAAAAAAHSGlzdG9yeQAAEAAIAADG1XDqAAAAEQAIAADIQQwEAAAAAQAYADTAvAA0wLsANMB0AAkFjAAJBGUABxlVAAIASVdoaXRlQm9vazpVc2Vyczpqc2NoaW1wZjpQdWJsaWM6Rm9zc2lsQm9vazpSZXNlYXJjaDpIaXN0b3J5OkNWUy1ncnVuZS5wZGYAAA4AHAANAEMAVgBTAC0AZwByAHUAbgBlAC4AcABkAGYADwAUAAkAVwBoAGkAdABlAEIAbwBvAGsAEgA/VXNlcnMvanNjaGltcGYvUHVibGljL0Zvc3NpbEJvb2svUmVzZWFyY2gvSGlzdG9yeS9DVlMtZ3J1bmUucGRmAAATAAEvAP//AACABdIcHR4fWCRjbGFzc2VzWiRjbGFzc25hbWWjHyAhXU5TTXV0YWJsZURhdGFWTlNEYXRhWE5TT2JqZWN0XxAvLi4vLi4vRm9zc2lsQm9vay9SZXNlYXJjaC9IaXN0b3J5L0NWUy1ncnVuZS5wZGbSHB0kJaIlIVxOU0RpY3Rpb25hcnkSAAGGoF8QD05TS2V5ZWRBcmNoaXZlcgAIABEAFgAfACgAMgA1ADoAPABFAEsAUgBdAGUAbABvAHEAcwB2AHgAegB8AIYAkwCYAKACTgJQAlUCXgJpAm0CewKCAosCvQLCAsUC0gLXAAAAAAAAAgEAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAuk=}}

@article{SCCS,
	Author = {Marc J Rochkind},
	Date-Added = {2010-04-25 06:26:32 -0400},
	Date-Modified = {2010-04-25 06:29:15 -0400},
	Journal = {IEEE Transactions on Software Engineering},
	Keywords = {Source Control, change control},
	Month = {December},
	Number = {4},
	Pages = {364},
	Title = {The Source Control System},
	Volume = {SE-1},
	Year = {1975},
	Bdsk-File-1 = {YnBsaXN0MDDUAQIDBAUIJidUJHRvcFgkb2JqZWN0c1gkdmVyc2lvblkkYXJjaGl2ZXLRBgdUcm9vdIABqAkKFRYXGyIjVSRudWxs0wsMDQ4RFFpOUy5vYmplY3RzV05TLmtleXNWJGNsYXNzog8QgASABqISE4ACgAOAB1lhbGlhc0RhdGFccmVsYXRpdmVQYXRo0hgNGRpXTlMuZGF0YU8RAbwAAAAAAbwAAgAACVdoaXRlQm9vawAAAAAAAAAAAAAAAAAAAAAAAMbVOKpIKwAAADTAvBJTQ0NTLVNsaWRlc2hvdy5wZGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANMC/yEDTxAAAAAAAAAAAAAIABAAACSAAAAAAAAAAAAAAAAAAAAAHSGlzdG9yeQAAEAAIAADG1XDqAAAAEQAIAADIQQwEAAAAAQAYADTAvAA0wLsANMB0AAkFjAAJBGUABxlVAAIATldoaXRlQm9vazpVc2Vyczpqc2NoaW1wZjpQdWJsaWM6Rm9zc2lsQm9vazpSZXNlYXJjaDpIaXN0b3J5OlNDQ1MtU2xpZGVzaG93LnBkZgAOACYAEgBTAEMAQwBTAC0AUwBsAGkAZABlAHMAaABvAHcALgBwAGQAZgAPABQACQBXAGgAaQB0AGUAQgBvAG8AawASAERVc2Vycy9qc2NoaW1wZi9QdWJsaWMvRm9zc2lsQm9vay9SZXNlYXJjaC9IaXN0b3J5L1NDQ1MtU2xpZGVzaG93LnBkZgATAAEvAP//AACABdIcHR4fWCRjbGFzc2VzWiRjbGFzc25hbWWjHyAhXU5TTXV0YWJsZURhdGFWTlNEYXRhWE5TT2JqZWN0XxA0Li4vLi4vRm9zc2lsQm9vay9SZXNlYXJjaC9IaXN0b3J5L1NDQ1MtU2xpZGVzaG93LnBkZtIcHSQloiUhXE5TRGljdGlvbmFyeRIAAYagXxAPTlNLZXllZEFyY2hpdmVyAAgAEQAWAB8AKAAyADUAOgA8AEUASwBSAF0AZQBsAG8AcQBzAHYAeAB6AHwAhgCTAJgAoAJgAmICZwJwAnsCfwKNApQCnQLUAtkC3ALpAu4AAAAAAAACAQAAAAAAAAAoAAAAAAAAAAAAAAAAAAADAA==}}

Changes to Docs/firenet.lyx.

more than 10,000 changes

Added Docs/firenet.pdf.

cannot compute difference between binary files

Added Docs/parts/atmelavr_hardware.pdf.

cannot compute difference between binary files

Added Docs/parts/atmelavr_instructions.pdf.

cannot compute difference between binary files

Deleted Firenet.xcodeproj/jim.mode1v3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>ActivePerspectiveName</key>
	<string>Project</string>
	<key>AllowedModules</key>
	<array>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXSmartGroupTreeModule</string>
			<key>Name</key>
			<string>Groups and Files Outline View</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXNavigatorGroup</string>
			<key>Name</key>
			<string>Editor</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCTaskListModule</string>
			<key>Name</key>
			<string>Task List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDetailModule</string>
			<key>Name</key>
			<string>File and Smart Group Detail Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXBuildResultsModule</string>
			<key>Name</key>
			<string>Detailed Build Results Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXProjectFindModule</string>
			<key>Name</key>
			<string>Project Batch Find Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCProjectFormatConflictsModule</string>
			<key>Name</key>
			<string>Project Format Conflicts List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXBookmarksModule</string>
			<key>Name</key>
			<string>Bookmarks Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXClassBrowserModule</string>
			<key>Name</key>
			<string>Class Browser</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXCVSModule</string>
			<key>Name</key>
			<string>Source Code Control Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXDebugBreakpointsModule</string>
			<key>Name</key>
			<string>Debug Breakpoints Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDockableInspector</string>
			<key>Name</key>
			<string>Inspector</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXOpenQuicklyModule</string>
			<key>Name</key>
			<string>Open Quickly Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugSessionModule</string>
			<key>Name</key>
			<string>Debugger</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugCLIModule</string>
			<key>Name</key>
			<string>Debug Console</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCSnapshotModule</string>
			<key>Name</key>
			<string>Snapshots Tool</string>
		</dict>
	</array>
	<key>BundlePath</key>
	<string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
	<key>Description</key>
	<string>DefaultDescriptionKey</string>
	<key>DockingSystemVisible</key>
	<false/>
	<key>Extension</key>
	<string>mode1v3</string>
	<key>FavBarConfig</key>
	<dict>
		<key>PBXProjectModuleGUID</key>
		<string>38007462101F628B007957AC</string>
		<key>XCBarModuleItemNames</key>
		<dict/>
		<key>XCBarModuleItems</key>
		<array/>
	</dict>
	<key>FirstTimeWindowDisplayed</key>
	<false/>
	<key>Identifier</key>
	<string>com.apple.perspectives.project.mode1v3</string>
	<key>MajorVersion</key>
	<integer>33</integer>
	<key>MinorVersion</key>
	<integer>0</integer>
	<key>Name</key>
	<string>Default</string>
	<key>Notifications</key>
	<array>
		<dict>
			<key>XCObserverAutoDisconnectKey</key>
			<true/>
			<key>XCObserverDefintionKey</key>
			<dict/>
			<key>XCObserverFactoryKey</key>
			<string>XCPerspectivesSpecificationIdentifier</string>
			<key>XCObserverGUIDKey</key>
			<string>XCObserverProjectIdentifier</string>
			<key>XCObserverNotificationKey</key>
			<string>PBXStatusBuildStateMessageNotification</string>
			<key>XCObserverTargetKey</key>
			<string>XCMainBuildResultsModuleGUID</string>
			<key>XCObserverTriggerKey</key>
			<string>awakenModuleWithObserver:</string>
			<key>XCObserverValidationKey</key>
			<dict/>
		</dict>
	</array>
	<key>OpenEditors</key>
	<array/>
	<key>PerspectiveWidths</key>
	<array>
		<integer>-1</integer>
		<integer>-1</integer>
	</array>
	<key>Perspectives</key>
	<array>
		<dict>
			<key>ChosenToolbarItems</key>
			<array>
				<string>active-combo-popup</string>
				<string>action</string>
				<string>NSToolbarFlexibleSpaceItem</string>
				<string>buildOrClean</string>
				<string>build-and-go</string>
				<string>go</string>
				<string>debugger-enable-breakpoints</string>
				<string>servicesModulebreakpoints</string>
				<string>com.apple.ide.PBXToolbarStopButton</string>
				<string>servicesModulefind</string>
				<string>NSToolbarFlexibleSpaceItem</string>
				<string>com.apple.pbx.toolbar.searchfield</string>
			</array>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProjectWithEditor</string>
			<key>Identifier</key>
			<string>perspective.project</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<true/>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>1CE0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>217</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>08FB7794FE84155DC02AAC07</string>
								<string>08FB7795FE84155DC02AAC07</string>
								<string>3877B3EE10459B370033A57B</string>
								<string>3877B3F410459B370033A57B</string>
								<string>3877B3EF10459B370033A57B</string>
								<string>380074AD10209122007957AC</string>
								<string>38E018D2106CE8C000711E4D</string>
								<string>1C37FAAC04509CD000000102</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>27</integer>
									<integer>26</integer>
									<integer>18</integer>
									<integer>1</integer>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 56}, {217, 595}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<true/>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {234, 613}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>217</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>54 124 857 654 0 0 1280 778 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>234pt</string>
				</dict>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20306471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CE0B20406471E060097A5F4</string>
										<key>PBXProjectModuleLabel</key>
										<string></string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {618, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>54 124 857 654 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20506471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 5}, {618, 608}}</string>
								<key>RubberWindowFrame</key>
								<string>54 124 857 654 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>608pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>618pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCModuleDock</string>
				<string>PBXNavigatorGroup</string>
				<string>XCDetailModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>38AFF63F107E22860025F301</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>38AFF640107E22860025F301</string>
				<string>1CE0B20306471E060097A5F4</string>
				<string>1CE0B20506471E060097A5F4</string>
			</array>
			<key>ToolbarConfigUserDefaultsMinorVersion</key>
			<string>2</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.defaultV3</string>
		</dict>
		<dict>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProject</string>
			<key>Identifier</key>
			<string>perspective.morph</string>
			<key>IsVertical</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<integer>1</integer>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C08E77C0454961000C914BD</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>11E0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>29B97314FDCFA39411CA2CEA</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 337}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<integer>1</integer>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 355}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>373 269 690 397 0 0 1440 878 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Morph</string>
			<key>PreferredWidth</key>
			<integer>300</integer>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>11E0B1FE06471DED0097A5F4</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.default.shortV3</string>
		</dict>
	</array>
	<key>PerspectivesBarVisible</key>
	<false/>
	<key>ShelfIsVisible</key>
	<false/>
	<key>SourceDescription</key>
	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
	<key>StatusbarIsVisible</key>
	<true/>
	<key>TimeStamp</key>
	<real>276780758.51794398</real>
	<key>ToolbarDisplayMode</key>
	<integer>1</integer>
	<key>ToolbarIsVisible</key>
	<true/>
	<key>ToolbarSizeMode</key>
	<integer>1</integer>
	<key>Type</key>
	<string>Perspectives</string>
	<key>UpdateMessage</key>
	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
	<key>WindowJustification</key>
	<integer>5</integer>
	<key>WindowOrderList</key>
	<array>
		<string>1C530D57069F1CE1000CFCEE</string>
		<string>38AFF642107E22860025F301</string>
		<string>38AFF643107E22860025F301</string>
		<string>1C78EAAD065D492600B07095</string>
		<string>3800743A101F6082007957AC</string>
		<string>38AFF6BF107E342F0025F301</string>
		<string>1CD10A99069EF8BA00B06720</string>
		<string>/Users/jschimpf/Public/Firenet/Firenet.xcodeproj</string>
	</array>
	<key>WindowString</key>
	<string>54 124 857 654 0 0 1280 778 </string>
	<key>WindowToolsV3</key>
	<array>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.build</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528F0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {616, 294}}</string>
								<key>RubberWindowFrame</key>
								<string>83 163 616 595 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>294pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>XCMainBuildResultsModuleGUID</string>
								<key>PBXProjectModuleLabel</key>
								<string>Build Results</string>
								<key>XCBuildResultsTrigger_Collapse</key>
								<integer>1024</integer>
								<key>XCBuildResultsTrigger_Open</key>
								<integer>1010</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 299}, {616, 255}}</string>
								<key>RubberWindowFrame</key>
								<string>83 163 616 595 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXBuildResultsModule</string>
							<key>Proportion</key>
							<string>255pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>554pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Build Results</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBuildResultsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>3800743A101F6082007957AC</string>
				<string>38AFF5FF107E1BB50025F301</string>
				<string>1CD0528F0623707200166675</string>
				<string>XCMainBuildResultsModuleGUID</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.buildV3</string>
			<key>WindowString</key>
			<string>83 163 616 595 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>3800743A101F6082007957AC</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debugger</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>Debugger</key>
								<dict>
									<key>HorizontalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {437, 330}}</string>
											<string>{{437, 0}, {522, 330}}</string>
										</array>
									</dict>
									<key>VerticalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {959, 330}}</string>
											<string>{{0, 330}, {959, 288}}</string>
										</array>
									</dict>
								</dict>
								<key>LauncherConfigVersion</key>
								<string>8</string>
								<key>PBXProjectModuleGUID</key>
								<string>1C162984064C10D400B95A72</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debug - GLUTExamples (Underwater)</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>DebugConsoleVisible</key>
								<string>None</string>
								<key>DebugConsoleWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>DebugSTDIOWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>Frame</key>
								<string>{{0, 0}, {959, 618}}</string>
								<key>PBXDebugSessionStackFrameViewKey</key>
								<dict>
									<key>DebugVariablesTableConfiguration</key>
									<array>
										<string>Name</string>
										<real>149</real>
										<string>Value</string>
										<real>114</real>
										<string>Summary</string>
										<real>234</real>
									</array>
									<key>Frame</key>
									<string>{{437, 0}, {522, 330}}</string>
									<key>RubberWindowFrame</key>
									<string>337 -307 959 659 0 0 1280 778 </string>
								</dict>
								<key>RubberWindowFrame</key>
								<string>337 -307 959 659 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugSessionModule</string>
							<key>Proportion</key>
							<string>618pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>618pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugSessionModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1CD10A99069EF8BA00B06720</string>
				<string>38AFF600107E1BB50025F301</string>
				<string>1C162984064C10D400B95A72</string>
				<string>38AFF601107E1BB50025F301</string>
				<string>38AFF602107E1BB50025F301</string>
				<string>38AFF603107E1BB50025F301</string>
				<string>38AFF604107E1BB50025F301</string>
				<string>38AFF605107E1BB50025F301</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugV3</string>
			<key>WindowString</key>
			<string>337 -307 959 659 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1CD10A99069EF8BA00B06720</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.find</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Dock</key>
							<array>
								<dict>
									<key>ContentConfiguration</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CDD528C0622207200134675</string>
										<key>PBXProjectModuleLabel</key>
										<string>network.c</string>
										<key>StatusBarVisibility</key>
										<true/>
									</dict>
									<key>GeometryConfiguration</key>
									<dict>
										<key>Frame</key>
										<string>{{0, 0}, {781, 212}}</string>
										<key>RubberWindowFrame</key>
										<string>154 285 781 470 0 0 1280 778 </string>
									</dict>
									<key>Module</key>
									<string>PBXNavigatorGroup</string>
									<key>Proportion</key>
									<string>781pt</string>
								</dict>
							</array>
							<key>Proportion</key>
							<string>212pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528E0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>Project Find</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 217}, {781, 212}}</string>
								<key>RubberWindowFrame</key>
								<string>154 285 781 470 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXProjectFindModule</string>
							<key>Proportion</key>
							<string>212pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>429pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Find</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXProjectFindModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C530D57069F1CE1000CFCEE</string>
				<string>38AFF63D107E22800025F301</string>
				<string>38AFF63E107E22800025F301</string>
				<string>1CDD528C0622207200134675</string>
				<string>1CD0528E0623707200166675</string>
			</array>
			<key>WindowString</key>
			<string>154 285 781 470 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1C530D57069F1CE1000CFCEE</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>MENUSEPARATOR</string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debuggerConsole</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAAC065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debugger Console</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {788, 385}}</string>
								<key>RubberWindowFrame</key>
								<string>277 228 788 426 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugCLIModule</string>
							<key>Proportion</key>
							<string>385pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>385pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger Console</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugCLIModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAAD065D492600B07095</string>
				<string>38AFF608107E1BE60025F301</string>
				<string>1C78EAAC065D492600B07095</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.consoleV3</string>
			<key>WindowString</key>
			<string>277 228 788 426 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1C78EAAD065D492600B07095</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.snapshots</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCSnapshotModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Snapshots</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCSnapshotModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<string>Yes</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.snapshots</string>
			<key>WindowString</key>
			<string>315 824 300 550 0 0 1440 878 </string>
			<key>WindowToolIsVisible</key>
			<string>Yes</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.scm</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAB2065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>&lt;No Editor&gt;</string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1C78EAB3065D492600B07095</string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<integer>1</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {452, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD052920623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>SCM</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ConsoleFrame</key>
								<string>{{0, 259}, {452, 0}}</string>
								<key>Frame</key>
								<string>{{0, 7}, {452, 259}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
								<key>TableConfiguration</key>
								<array>
									<string>Status</string>
									<real>30</real>
									<string>FileName</string>
									<real>199</real>
									<string>Path</string>
									<real>197.0950012207031</real>
								</array>
								<key>TableFrame</key>
								<string>{{0, 0}, {452, 250}}</string>
							</dict>
							<key>Module</key>
							<string>PBXCVSModule</string>
							<key>Proportion</key>
							<string>262pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>266pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>SCM</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXCVSModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAB4065D492600B07095</string>
				<string>1C78EAB5065D492600B07095</string>
				<string>1C78EAB2065D492600B07095</string>
				<string>1CD052920623707200166675</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.scm</string>
			<key>WindowString</key>
			<string>743 379 452 308 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.breakpoints</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXBottomSmartGroupGIDs</key>
								<array>
									<string>1C77FABC04509CD000000102</string>
								</array>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B1FE06471DED0097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Files</string>
								<key>PBXProjectStructureProvided</key>
								<string>no</string>
								<key>PBXSmartGroupTreeModuleColumnData</key>
								<dict>
									<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
									<array>
										<real>168</real>
									</array>
									<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
									<array>
										<string>MainColumn</string>
									</array>
								</dict>
								<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
								<dict>
									<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
									<array>
										<string>1C77FABC04509CD000000102</string>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
									<array>
										<array>
											<integer>0</integer>
										</array>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
									<string>{{0, 0}, {168, 350}}</string>
								</dict>
								<key>PBXTopSmartGroupGIDs</key>
								<array/>
								<key>XCIncludePerspectivesSwitch</key>
								<false/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {185, 368}}</string>
								<key>GroupTreeTableConfiguration</key>
								<array>
									<string>MainColumn</string>
									<real>168</real>
								</array>
								<key>RubberWindowFrame</key>
								<string>329 337 744 409 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXSmartGroupTreeModule</string>
							<key>Proportion</key>
							<string>185pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CA1AED706398EBD00589147</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{190, 0}, {554, 368}}</string>
								<key>RubberWindowFrame</key>
								<string>329 337 744 409 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>554pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>368pt</string>
				</dict>
			</array>
			<key>MajorVersion</key>
			<integer>3</integer>
			<key>MinorVersion</key>
			<integer>0</integer>
			<key>Name</key>
			<string>Breakpoints</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCDetailModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>38AFF6BF107E342F0025F301</string>
				<string>38AFF6C0107E342F0025F301</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>1CA1AED706398EBD00589147</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.breakpointsV3</string>
			<key>WindowString</key>
			<string>329 337 744 409 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>38AFF6BF107E342F0025F301</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.debugAnimator</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debug Visualizer</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXNavigatorGroup</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugAnimatorV3</string>
			<key>WindowString</key>
			<string>100 100 700 500 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.bookmarks</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXBookmarksModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Bookmarks</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBookmarksModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowString</key>
			<string>538 42 401 187 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.projectFormatConflicts</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCProjectFormatConflictsModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Format Conflicts</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCProjectFormatConflictsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowContentMinSize</key>
			<string>450 300</string>
			<key>WindowString</key>
			<string>50 850 472 307 0 0 1440 877</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.classBrowser</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>OptionsSetName</key>
								<string>Hierarchy, all classes</string>
								<key>PBXProjectModuleGUID</key>
								<string>1CA6456E063B45B4001379D8</string>
								<key>PBXProjectModuleLabel</key>
								<string>Class Browser - NSObject</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ClassesFrame</key>
								<string>{{0, 0}, {374, 96}}</string>
								<key>ClassesTreeTableConfiguration</key>
								<array>
									<string>PBXClassNameColumnIdentifier</string>
									<real>208</real>
									<string>PBXClassBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>Frame</key>
								<string>{{0, 0}, {630, 331}}</string>
								<key>MembersFrame</key>
								<string>{{0, 105}, {374, 395}}</string>
								<key>MembersTreeTableConfiguration</key>
								<array>
									<string>PBXMemberTypeIconColumnIdentifier</string>
									<real>22</real>
									<string>PBXMemberNameColumnIdentifier</string>
									<real>216</real>
									<string>PBXMemberTypeColumnIdentifier</string>
									<real>97</real>
									<string>PBXMemberBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>PBXModuleWindowStatusBarHidden2</key>
								<integer>1</integer>
								<key>RubberWindowFrame</key>
								<string>385 179 630 352 0 0 1440 878 </string>
							</dict>
							<key>Module</key>
							<string>PBXClassBrowserModule</string>
							<key>Proportion</key>
							<string>332pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>332pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Class Browser</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXClassBrowserModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C0AD2AF069F1E9B00FABCE6</string>
				<string>1C0AD2B0069F1E9B00FABCE6</string>
				<string>1CA6456E063B45B4001379D8</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.classbrowser</string>
			<key>WindowString</key>
			<string>385 179 630 352 0 0 1440 878 </string>
			<key>WindowToolGUID</key>
			<string>1C0AD2AF069F1E9B00FABCE6</string>
			<key>WindowToolIsVisible</key>
			<integer>0</integer>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.refactoring</string>
			<key>IncludeInToolsMenu</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{0, 0}, {500, 335}</string>
								<key>RubberWindowFrame</key>
								<string>{0, 0}, {500, 335}</string>
							</dict>
							<key>Module</key>
							<string>XCRefactoringModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Refactoring</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCRefactoringModule</string>
			</array>
			<key>WindowString</key>
			<string>200 200 500 356 0 0 1920 1200 </string>
		</dict>
	</array>
</dict>
</plist>
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<












































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Deleted Firenet.xcodeproj/jim.pbxuser.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
// !$*UTF8*$!
{
	08FB7793FE84155DC02AAC07 /* Project object */ = {
		activeBuildConfigurationName = Debug;
		activeExecutable = 3800741B101F5FD4007957AC /* Firenet */;
		activeTarget = 8DD76FA90486AB0100D96B5E /* Firenet */;
		addToTargets = (
			8DD76FA90486AB0100D96B5E /* Firenet */,
		);
		breakpoints = (
			384B556A102DC8BF00AEC1B9 /* malloc_error_break */,
		);
		codeSenseManager = 38007424101F5FF8007957AC /* Code sense */;
		executables = (
			3800741B101F5FD4007957AC /* Firenet */,
		);
		perUserDictionary = {
			"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					20,
					198,
					20,
					99,
					99,
					29,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXBreakpointsDataSource_ActionID,
					PBXBreakpointsDataSource_TypeID,
					PBXBreakpointsDataSource_BreakpointID,
					PBXBreakpointsDataSource_UseID,
					PBXBreakpointsDataSource_LocationID,
					PBXBreakpointsDataSource_ConditionID,
					PBXBreakpointsDataSource_IgnoreCountID,
					PBXBreakpointsDataSource_ContinueID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID;
				PBXFileTableDataSourceColumnWidthsKey = (
					200,
					200,
					57.58349609375,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXBookmarksDataSource_LocationID,
					PBXBookmarksDataSource_NameID,
					PBXBookmarksDataSource_CommentsID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					300,
					195,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXErrorsWarningsDataSource_TypeID,
					PBXErrorsWarningsDataSource_MessageID,
					PBXErrorsWarningsDataSource_LocationID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
				PBXFileTableDataSourceColumnWidthsKey = (
					22,
					300,
					267,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXExecutablesDataSource_ActiveFlagID,
					PBXExecutablesDataSource_NameID,
					PBXExecutablesDataSource_CommentsID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					379,
					20,
					48,
					43,
					43,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
					PBXFileDataSource_Target_ColumnID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID;
				PBXFileTableDataSourceColumnWidthsKey = (
					200,
					68,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFindDataSource_MessageID,
					PBXFindDataSource_LocationID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID;
				PBXFileTableDataSourceColumnWidthsKey = (
					16,
					200,
					50,
					45.20849609375,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXSymbolsDataSource_SymbolTypeIconID,
					PBXSymbolsDataSource_SymbolNameID,
					PBXSymbolsDataSource_SymbolTypeID,
					PBXSymbolsDataSource_ReferenceNameID,
				);
			};
			PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					14,
					60,
					20,
					48.16259765625,
					43,
					43,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXTargetDataSource_PrimaryAttribute,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 276700070;
			PBXWorkspaceStateSaveDate = 276700070;
		};
		sourceControlManager = 38007423101F5FF8007957AC /* Source Control */;
		userBuildSettings = {
		};
	};
	08FB7796FE84155DC02AAC07 /* main.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {701, 3066}}";
			sepNavSelRange = "{2205, 12}";
			sepNavVisRange = "{2162, 765}";
			sepNavWindowFrame = "{{493, 63}, {748, 715}}";
		};
	};
	3800741B101F5FD4007957AC /* Firenet */ = {
		isa = PBXExecutable;
		activeArgIndices = (
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,
			YES,
		);
		argumentStrings = (
			"-p X -n 10",
			"-p 1",
			"-p 1 -n 10",
			"-p X -c test.lua",
			"-p X -n 1",
			"-p X -n 10 -c queuefile.lua",
			"-p X -n 5 -c playshow.lua -Q queue.out -M stars_stripes_forever.mp3",
			"-p X -n 10 -c test.lua",
		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 1;
		configStateDict = {
		};
		customDataFormattersEnabled = 1;
		dataTipCustomDataFormattersEnabled = 1;
		dataTipShowTypeColumn = 1;
		dataTipSortType = 0;
		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		libgmallocEnabled = 0;
		name = Firenet;
		savedGlobals = {
		};
		showTypeColumn = 0;
		sourceDirectories = (
		);
		variableFormatDictionary = {
			"0-unsigned char-main" = 1;
			"0-unsigned char-packet_gen_type" = 1;
			"0-unsigned char-pump_packet" = 1;
			"1-unsigned char-packet_gen_type" = 1;
			"2-unsigned char-packet_gen_type" = 1;
			"3-unsigned char-packet_gen_type" = 1;
			"4-unsigned char-packet_gen_type" = 1;
			"5-unsigned char-packet_gen_type" = 1;
			"cksum-unsigned char-put_packet" = 1;
			"data-unsigned char [32]-packet_gen_type" = 1;
			"delay-int-delay_fire" = 1;
			"from-unsigned char-main" = 1;
			"lval-long unsigned int-packet_gen_type" = 1;
			"shft-int-delay_handler" = 1;
			"to-unsigned char-main" = 1;
			"type-unsigned char-main" = 1;
			"val-int-setup_address" = 1;
			"val-short unsigned int-delay_fire" = 1;
		};
	};
	38007423101F5FF8007957AC /* Source Control */ = {
		isa = PBXSourceControlManager;
		fallbackIsa = XCSourceControlManager;
		isSCMEnabled = 0;
		scmConfiguration = {
			repositoryNamesForRoots = {
				"" = "";
			};
		};
	};
	38007424101F5FF8007957AC /* Code sense */ = {
		isa = PBXCodeSenseManager;
		indexTemplatePath = "";
	};
	380074B0102091B1007957AC /* mac.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 1610}}";
			sepNavSelRange = "{3104, 0}";
			sepNavVisRange = "{2018, 1088}";
			sepNavWindowFrame = "{{51, 63}, {773, 715}}";
		};
	};
	380074B1102091B1007957AC /* mac.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 10010}}";
			sepNavSelRange = "{7205, 0}";
			sepNavVisRange = "{7007, 393}";
			sepNavWindowFrame = "{{223, 59}, {778, 715}}";
		};
	};
	380076181021E188007957AC /* network.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {617, 532}}";
			sepNavSelRange = "{670, 0}";
			sepNavVisRange = "{0, 1084}";
			sepNavWindowFrame = "{{347, 99}, {664, 654}}";
		};
	};
	380076191021E188007957AC /* network.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {732, 6244}}";
			sepNavSelRange = "{4393, 7}";
			sepNavVisRange = "{4249, 245}";
			sepNavWindowFrame = "{{463, 88}, {664, 654}}";
		};
	};
	384B556A102DC8BF00AEC1B9 /* malloc_error_break */ = {
		isa = PBXSymbolicBreakpoint;
		actions = (
		);
		breakpointStyle = 1;
		continueAfterActions = 0;
		countType = 0;
		delayBeforeContinue = 0;
		hitCount = 0;
		ignoreCount = 0;
		location = libSystem.B.dylib;
		modificationTime = 276708737.534003;
		originalNumberOfMultipleMatches = 0;
		state = 2;
		symbolName = malloc_error_break;
	};
	3877B3FC10459B370033A57B /* comqueue.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {732, 5936}}";
			sepNavSelRange = "{6996, 19}";
			sepNavVisRange = "{6911, 305}";
			sepNavWindowFrame = "{{507, 63}, {773, 715}}";
		};
	};
	3877B3FD10459B370033A57B /* comqueue.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 640}}";
			sepNavSelRange = "{644, 14}";
			sepNavVisRange = "{0, 895}";
			sepNavWindowFrame = "{{-845, -63}, {773, 768}}";
		};
	};
	3877B40710459BDB0033A57B /* clock.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {723, 2044}}";
			sepNavSelRange = "{1467, 53}";
			sepNavVisRange = "{0, 1183}";
			sepNavWindowFrame = "{{-1024, 32}, {770, 768}}";
		};
	};
	3877B40810459BDB0033A57B /* clock.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {493, 466}}";
			sepNavSelRange = "{803, 13}";
			sepNavVisRange = "{0, 844}";
			sepNavWindowFrame = "{{-1103, -148}, {540, 594}}";
		};
	};
	3877B40910459BDB0033A57B /* stackcom_inc.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {521, 503}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{0, 414}";
			sepNavWindowFrame = "{{15, 142}, {568, 631}}";
		};
	};
	3877B41B10459E390033A57B /* parent.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {582, 2534}}";
			sepNavSelRange = "{1037, 0}";
			sepNavVisRange = "{247, 1122}";
			sepNavWindowFrame = "{{562, -43}, {629, 695}}";
		};
	};
	3877B41C10459E390033A57B /* parent.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 630}}";
			sepNavSelRange = "{1163, 19}";
			sepNavVisRange = "{79, 1317}";
			sepNavWindowFrame = "{{242, 63}, {773, 715}}";
		};
	};
	38851C79104C46AC00A3B757 /* lapi.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 15274}}";
			sepNavSelRange = "{9725, 0}";
			sepNavVisRange = "{9548, 384}";
			sepNavWindowFrame = "{{-1024, 32}, {770, 768}}";
		};
	};
	38851C7B104C46AC00A3B757 /* lauxlib.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {723, 9254}}";
			sepNavSelRange = "{16483, 77}";
			sepNavVisRange = "{15835, 1130}";
			sepNavWindowFrame = "{{-982, -141}, {770, 838}}";
		};
	};
	38851C83104C46AC00A3B757 /* ldo.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 7308}}";
			sepNavSelRange = "{8883, 0}";
			sepNavVisRange = "{8715, 518}";
		};
	};
	38851C8A104C46AC00A3B757 /* linit.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {723, 728}}";
			sepNavSelRange = "{796, 0}";
			sepNavVisRange = "{142, 927}";
			sepNavWindowFrame = "{{404, -36}, {770, 715}}";
		};
	};
	38851C8B104C46AC00A3B757 /* liolib.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1048, 7728}}";
			sepNavSelRange = "{8179, 0}";
			sepNavVisRange = "{7918, 700}";
		};
	};
	38851C92104C46AC00A3B757 /* loadlib.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {732, 9254}}";
			sepNavSelRange = "{12136, 24}";
			sepNavVisRange = "{11945, 319}";
			sepNavWindowFrame = "{{84, 79}, {568, 631}}";
		};
	};
	38851C98104C46AC00A3B757 /* lparser.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1048, 19264}}";
			sepNavSelRange = "{26497, 0}";
			sepNavVisRange = "{26242, 466}";
		};
	};
	38851C9E104C46AC00A3B757 /* lstrlib.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {567, 12404}}";
			sepNavSelRange = "{3007, 0}";
			sepNavVisRange = "{2749, 484}";
			sepNavWindowFrame = "{{38, 72}, {655, 680}}";
		};
	};
	38851C9F104C46AC00A3B757 /* ltable.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 8078}}";
			sepNavSelRange = "{12851, 0}";
			sepNavVisRange = "{12726, 379}";
		};
	};
	38851CA5104C46AC00A3B757 /* lua.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1077, 5698}}";
			sepNavSelRange = "{8122, 54}";
			sepNavVisRange = "{7613, 1002}";
			sepNavWindowFrame = "{{61, 86}, {1124, 645}}";
		};
	};
	38851CA7104C46AC00A3B757 /* luaconf.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1077, 10724}}";
			sepNavSelRange = "{7705, 0}";
			sepNavVisRange = "{7245, 1251}";
			sepNavWindowFrame = "{{15, 128}, {1124, 645}}";
		};
	};
	38851CA8104C46AC00A3B757 /* lualib.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {493, 756}}";
			sepNavSelRange = "{787, 0}";
			sepNavVisRange = "{328, 698}";
			sepNavWindowFrame = "{{-989, -51}, {540, 594}}";
		};
	};
	38851CAB104C46AC00A3B757 /* lvm.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1048, 10696}}";
			sepNavSelRange = "{20440, 0}";
			sepNavVisRange = "{16876, 647}";
		};
	};
	38B352B6105D0CCA00A36F46 /* debug.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {725, 486}}";
			sepNavSelRange = "{406, 0}";
			sepNavVisRange = "{0, 563}";
			sepNavWindowFrame = "{{442, 63}, {772, 614}}";
		};
	};
	38B354EE105EA9BB00A36F46 /* lua_kbd.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {521, 2324}}";
			sepNavSelRange = "{2224, 0}";
			sepNavVisRange = "{1731, 809}";
			sepNavWindowFrame = "{{-691, 40}, {568, 631}}";
		};
	};
	38B354F1105EA9BB00A36F46 /* tgkbhit.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1048, 3122}}";
			sepNavSelRange = "{5807, 0}";
			sepNavVisRange = "{5644, 280}";
			sepNavWindowFrame = "{{605, 54}, {568, 631}}";
		};
	};
	38B354F2105EA9BB00A36F46 /* tgkbhit.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {521, 503}}";
			sepNavSelRange = "{861, 7}";
			sepNavVisRange = "{0, 921}";
			sepNavWindowFrame = "{{61, 100}, {568, 631}}";
		};
	};
	38B4A3841051562000B79D3C /* sysop.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {723, 6888}}";
			sepNavSelRange = "{2820, 89}";
			sepNavVisRange = "{2681, 950}";
			sepNavWindowFrame = "{{241, 63}, {770, 715}}";
		};
	};
	38B4A38E105159E900B79D3C /* sysop.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {723, 710}}";
			sepNavSelRange = "{792, 0}";
			sepNavVisRange = "{0, 809}";
			sepNavWindowFrame = "{{-770, -224}, {770, 838}}";
		};
	};
	38B4A41A1051906900B79D3C /* lua_timer.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 4676}}";
			sepNavSelRange = "{5031, 0}";
			sepNavVisRange = "{4811, 331}";
			sepNavWindowFrame = "{{412, 121}, {540, 594}}";
		};
	};
	38B4A41B1051906900B79D3C /* lua_timer.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {493, 466}}";
			sepNavSelRange = "{544, 30}";
			sepNavVisRange = "{0, 630}";
			sepNavWindowFrame = "{{593, 158}, {540, 594}}";
		};
	};
	38BCE291105559220001F1EC /* lua_firenet.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 4102}}";
			sepNavSelRange = "{4263, 0}";
			sepNavVisRange = "{4112, 389}";
			sepNavWindowFrame = "{{50, 104}, {630, 649}}";
		};
	};
	38BCE292105559220001F1EC /* lua_firenet.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1048, 420}}";
			sepNavSelRange = "{625, 0}";
			sepNavVisRange = "{323, 302}";
			sepNavWindowFrame = "{{378, 22}, {1124, 645}}";
		};
	};
	38BCE293105559220001F1EC /* packet_lua.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 5866}}";
			sepNavSelRange = "{932, 0}";
			sepNavVisRange = "{584, 433}";
			sepNavWindowFrame = "{{445, 130}, {540, 594}}";
		};
	};
	38BCE294105559220001F1EC /* packet_lua.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1077, 517}}";
			sepNavSelRange = "{531, 0}";
			sepNavVisRange = "{0, 660}";
			sepNavWindowFrame = "{{67, 95}, {1124, 645}}";
		};
	};
	38CEECC810495B0100F62890 /* logmap.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 5726}}";
			sepNavSelRange = "{1257, 23}";
			sepNavVisRange = "{0, 1047}";
			sepNavWindowFrame = "{{215, 63}, {773, 715}}";
		};
	};
	38CEECC910495B0100F62890 /* logmap.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {583, 658}}";
			sepNavSelRange = "{1008, 13}";
			sepNavVisRange = "{347, 1012}";
			sepNavWindowFrame = "{{15, 69}, {630, 649}}";
		};
	};
	38E018E1106CE91C00711E4D /* phy.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 552}}";
			sepNavSelRange = "{854, 0}";
			sepNavVisRange = "{0, 984}";
			sepNavWindowFrame = "{{-783, -29}, {655, 680}}";
		};
	};
	38E018E2106CE91C00711E4D /* phy.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 3220}}";
			sepNavSelRange = "{2962, 37}";
			sepNavVisRange = "{0, 935}";
			sepNavWindowFrame = "{{241, 98}, {655, 680}}";
		};
	};
	38E018F0106CEA0F00711E4D /* sim_phy.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 3766}}";
			sepNavSelRange = "{852, 0}";
			sepNavVisRange = "{398, 725}";
			sepNavWindowFrame = "{{388, 72}, {655, 680}}";
		};
	};
	38E018F1106CEA0F00711E4D /* sim_phy.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 552}}";
			sepNavSelRange = "{1022, 35}";
			sepNavVisRange = "{0, 1089}";
			sepNavWindowFrame = "{{38, 72}, {655, 680}}";
		};
	};
	38E01925106D09B600711E4D /* real_phy.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 552}}";
			sepNavSelRange = "{934, 36}";
			sepNavVisRange = "{0, 1002}";
			sepNavWindowFrame = "{{444, 98}, {655, 680}}";
		};
	};
	38E0192C106D0ACD00711E4D /* real_phy.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 2828}}";
			sepNavSelRange = "{3598, 0}";
			sepNavVisRange = "{3416, 399}";
			sepNavWindowFrame = "{{15, 93}, {655, 680}}";
		};
	};
	38E01933106D0AD200711E4D /* bsdserial.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {910, 11284}}";
			sepNavSelRange = "{8966, 0}";
			sepNavVisRange = "{8689, 506}";
			sepNavWindowFrame = "{{15, 93}, {655, 680}}";
		};
	};
	38E01934106D0AD200711E4D /* bsdserial.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 1750}}";
			sepNavSelRange = "{3027, 7}";
			sepNavVisRange = "{2192, 890}";
			sepNavWindowFrame = "{{409, 63}, {655, 680}}";
		};
	};
	38FFC85D104A8D35000206C4 /* child.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 798}}";
			sepNavSelRange = "{1380, 18}";
			sepNavVisRange = "{455, 1227}";
			sepNavWindowFrame = "{{0, 63}, {773, 715}}";
		};
	};
	38FFC85E104A8D35000206C4 /* child_cmd.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 6370}}";
			sepNavSelRange = "{6480, 0}";
			sepNavVisRange = "{10391, 806}";
			sepNavWindowFrame = "{{380, 63}, {773, 715}}";
		};
	};
	38FFC85F104A8D35000206C4 /* child_cmd.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {726, 656}}";
			sepNavSelRange = "{572, 0}";
			sepNavVisRange = "{0, 664}";
		};
	};
	38FFC860104A8D35000206C4 /* child.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {701, 2562}}";
			sepNavSelRange = "{985, 0}";
			sepNavVisRange = "{585, 879}";
			sepNavWindowFrame = "{{297, 63}, {748, 715}}";
		};
	};
	8DD76FA90486AB0100D96B5E /* Firenet */ = {
		activeExec = 0;
		executables = (
			3800741B101F5FD4007957AC /* Firenet */,
		);
	};
}
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<






















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Changes to Firenet.xcodeproj/project.pbxproj.

45
46
47
48
49
50
51


















52
53
54
55
56
57
58
		38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354EE105EA9BB00A36F46 /* lua_kbd.c */; };
		38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354F1105EA9BB00A36F46 /* tgkbhit.c */; };
		38B4A3851051562000B79D3C /* sysop.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A3841051562000B79D3C /* sysop.c */; };
		38B4A4221051906900B79D3C /* lua_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A41A1051906900B79D3C /* lua_timer.c */; };
		38BCE295105559220001F1EC /* lua_firenet.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE291105559220001F1EC /* lua_firenet.c */; };
		38BCE296105559220001F1EC /* packet_lua.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE293105559220001F1EC /* packet_lua.c */; };
		38CEECCA10495B0100F62890 /* logmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CEECC810495B0100F62890 /* logmap.c */; };


















		38E018E3106CE91C00711E4D /* phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018E2106CE91C00711E4D /* phy.c */; };
		38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018F0106CEA0F00711E4D /* sim_phy.c */; };
		38E0192D106D0ACD00711E4D /* real_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E0192C106D0ACD00711E4D /* real_phy.c */; };
		38E01939106D0AD200711E4D /* bsdserial.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E01933106D0AD200711E4D /* bsdserial.c */; };
		38E01954106D10F200711E4D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01953106D10F200711E4D /* IOKit.framework */; };
		38E01998106D129500711E4D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01997106D129500711E4D /* CoreFoundation.framework */; };
		38FFC861104A8D35000206C4 /* child_cmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38FFC85E104A8D35000206C4 /* child_cmd.c */; };







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
		38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354EE105EA9BB00A36F46 /* lua_kbd.c */; };
		38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354F1105EA9BB00A36F46 /* tgkbhit.c */; };
		38B4A3851051562000B79D3C /* sysop.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A3841051562000B79D3C /* sysop.c */; };
		38B4A4221051906900B79D3C /* lua_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A41A1051906900B79D3C /* lua_timer.c */; };
		38BCE295105559220001F1EC /* lua_firenet.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE291105559220001F1EC /* lua_firenet.c */; };
		38BCE296105559220001F1EC /* packet_lua.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE293105559220001F1EC /* packet_lua.c */; };
		38CEECCA10495B0100F62890 /* logmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CEECC810495B0100F62890 /* logmap.c */; };
		38CF343D146D35850015A33B /* firenetlog.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF343B146D35850015A33B /* firenetlog.c */; };
		38CF3531146D35C20015A33B /* restcom.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF3441146D35C00015A33B /* restcom.c */; };
		38CF3532146D35C20015A33B /* restcomQ.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF3443146D35C00015A33B /* restcomQ.c */; };
		38CF359C146D35C20015A33B /* rest.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF352D146D35C10015A33B /* rest.c */; };
		38CF359D146D35C20015A33B /* restclient.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF352F146D35C10015A33B /* restclient.c */; };
		38CF35A9146D35CA0015A33B /* jescape.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A0146D35CA0015A33B /* jescape.c */; };
		38CF35AA146D35CA0015A33B /* qdj.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A2146D35CA0015A33B /* qdj.c */; };
		38CF35AB146D35CA0015A33B /* qdj_token.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A4146D35CA0015A33B /* qdj_token.c */; };
		38CF35AC146D35CA0015A33B /* qdj_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A6146D35CA0015A33B /* qdj_util.c */; };
		38CF35AD146D35CA0015A33B /* jsonlua.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A7146D35CA0015A33B /* jsonlua.c */; };
		38CF35B2146D367B0015A33B /* httplib.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B0146D367B0015A33B /* httplib.c */; };
		38CF35B6146D36BE0015A33B /* postprocessor.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B5146D36BE0015A33B /* postprocessor.c */; };
		38CF35BB146D36D70015A33B /* reason_phrase.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B7146D36D70015A33B /* reason_phrase.c */; };
		38CF35BC146D36D70015A33B /* response.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B9146D36D70015A33B /* response.c */; };
		38CF35BF146D36F00015A33B /* memorypool.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35BD146D36F00015A33B /* memorypool.c */; };
		38CF35C2146D37070015A33B /* connection.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35C0146D37070015A33B /* connection.c */; };
		38CF35C4146D37180015A33B /* daemon.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35C3146D37180015A33B /* daemon.c */; };
		38CF35C6146D372E0015A33B /* internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35C5146D372E0015A33B /* internal.c */; };
		38E018E3106CE91C00711E4D /* phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018E2106CE91C00711E4D /* phy.c */; };
		38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018F0106CEA0F00711E4D /* sim_phy.c */; };
		38E0192D106D0ACD00711E4D /* real_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E0192C106D0ACD00711E4D /* real_phy.c */; };
		38E01939106D0AD200711E4D /* bsdserial.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E01933106D0AD200711E4D /* bsdserial.c */; };
		38E01954106D10F200711E4D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01953106D10F200711E4D /* IOKit.framework */; };
		38E01998106D129500711E4D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01997106D129500711E4D /* CoreFoundation.framework */; };
		38FFC861104A8D35000206C4 /* child_cmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38FFC85E104A8D35000206C4 /* child_cmd.c */; };
151
152
153
154
155
156
157





































158
159
160
161
162
163
164
		38B4A41B1051906900B79D3C /* lua_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_timer.h; path = luasupport/timer/lua_timer.h; sourceTree = SOURCE_ROOT; };
		38BCE291105559220001F1EC /* lua_firenet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_firenet.c; path = luasupport/firenet/lua_firenet.c; sourceTree = SOURCE_ROOT; };
		38BCE292105559220001F1EC /* lua_firenet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_firenet.h; path = luasupport/firenet/lua_firenet.h; sourceTree = SOURCE_ROOT; };
		38BCE293105559220001F1EC /* packet_lua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = packet_lua.c; path = luasupport/firenet/packet_lua.c; sourceTree = SOURCE_ROOT; };
		38BCE294105559220001F1EC /* packet_lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packet_lua.h; path = luasupport/firenet/packet_lua.h; sourceTree = SOURCE_ROOT; };
		38CEECC810495B0100F62890 /* logmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = logmap.c; path = Node/parent/logmap.c; sourceTree = SOURCE_ROOT; };
		38CEECC910495B0100F62890 /* logmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logmap.h; path = Node/parent/logmap.h; sourceTree = SOURCE_ROOT; };





































		38E018E1106CE91C00711E4D /* phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = phy.h; sourceTree = "<group>"; };
		38E018E2106CE91C00711E4D /* phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = phy.c; sourceTree = "<group>"; };
		38E018F0106CEA0F00711E4D /* sim_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sim_phy.c; path = Network/Simulation/sim_phy.c; sourceTree = SOURCE_ROOT; };
		38E018F1106CEA0F00711E4D /* sim_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sim_phy.h; path = Network/Simulation/sim_phy.h; sourceTree = SOURCE_ROOT; };
		38E01925106D09B600711E4D /* real_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = real_phy.h; path = Network/Real/real_phy.h; sourceTree = SOURCE_ROOT; };
		38E0192C106D0ACD00711E4D /* real_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = real_phy.c; path = Network/Real/real_phy.c; sourceTree = SOURCE_ROOT; };
		38E01933106D0AD200711E4D /* bsdserial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsdserial.c; path = Network/Real/SERIAL/OSX/bsdserial.c; sourceTree = SOURCE_ROOT; };







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
		38B4A41B1051906900B79D3C /* lua_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_timer.h; path = luasupport/timer/lua_timer.h; sourceTree = SOURCE_ROOT; };
		38BCE291105559220001F1EC /* lua_firenet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_firenet.c; path = luasupport/firenet/lua_firenet.c; sourceTree = SOURCE_ROOT; };
		38BCE292105559220001F1EC /* lua_firenet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_firenet.h; path = luasupport/firenet/lua_firenet.h; sourceTree = SOURCE_ROOT; };
		38BCE293105559220001F1EC /* packet_lua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = packet_lua.c; path = luasupport/firenet/packet_lua.c; sourceTree = SOURCE_ROOT; };
		38BCE294105559220001F1EC /* packet_lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packet_lua.h; path = luasupport/firenet/packet_lua.h; sourceTree = SOURCE_ROOT; };
		38CEECC810495B0100F62890 /* logmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = logmap.c; path = Node/parent/logmap.c; sourceTree = SOURCE_ROOT; };
		38CEECC910495B0100F62890 /* logmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logmap.h; path = Node/parent/logmap.h; sourceTree = SOURCE_ROOT; };
		38CF343B146D35850015A33B /* firenetlog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = firenetlog.c; path = Logging/firenetlog.c; sourceTree = SOURCE_ROOT; };
		38CF343C146D35850015A33B /* firenetlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = firenetlog.h; path = Logging/firenetlog.h; sourceTree = SOURCE_ROOT; };
		38CF3441146D35C00015A33B /* restcom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = restcom.c; path = luasupport/HTTP/COMS/restcom.c; sourceTree = SOURCE_ROOT; };
		38CF3442146D35C00015A33B /* restcom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = restcom.h; path = luasupport/HTTP/COMS/restcom.h; sourceTree = SOURCE_ROOT; };
		38CF3443146D35C00015A33B /* restcomQ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = restcomQ.c; path = luasupport/HTTP/COMS/restcomQ.c; sourceTree = SOURCE_ROOT; };
		38CF3444146D35C00015A33B /* restcomQ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = restcomQ.h; path = luasupport/HTTP/COMS/restcomQ.h; sourceTree = SOURCE_ROOT; };
		38CF352D146D35C10015A33B /* rest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rest.c; path = luasupport/HTTP/rest/rest.c; sourceTree = SOURCE_ROOT; };
		38CF352E146D35C10015A33B /* rest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rest.h; path = luasupport/HTTP/rest/rest.h; sourceTree = SOURCE_ROOT; };
		38CF352F146D35C10015A33B /* restclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = restclient.c; path = luasupport/HTTP/rest/restclient.c; sourceTree = SOURCE_ROOT; };
		38CF3530146D35C10015A33B /* restclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = restclient.h; path = luasupport/HTTP/rest/restclient.h; sourceTree = SOURCE_ROOT; };
		38CF35A0146D35CA0015A33B /* jescape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jescape.c; path = luasupport/JSON/JSON/jescape.c; sourceTree = SOURCE_ROOT; };
		38CF35A1146D35CA0015A33B /* jescape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jescape.h; path = luasupport/JSON/JSON/jescape.h; sourceTree = SOURCE_ROOT; };
		38CF35A2146D35CA0015A33B /* qdj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qdj.c; path = luasupport/JSON/JSON/qdj.c; sourceTree = SOURCE_ROOT; };
		38CF35A3146D35CA0015A33B /* qdj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdj.h; path = luasupport/JSON/JSON/qdj.h; sourceTree = SOURCE_ROOT; };
		38CF35A4146D35CA0015A33B /* qdj_token.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qdj_token.c; path = luasupport/JSON/JSON/qdj_token.c; sourceTree = SOURCE_ROOT; };
		38CF35A5146D35CA0015A33B /* qdj_token.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdj_token.h; path = luasupport/JSON/JSON/qdj_token.h; sourceTree = SOURCE_ROOT; };
		38CF35A6146D35CA0015A33B /* qdj_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qdj_util.c; path = luasupport/JSON/JSON/qdj_util.c; sourceTree = SOURCE_ROOT; };
		38CF35A7146D35CA0015A33B /* jsonlua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jsonlua.c; path = luasupport/JSON/jsonlua.c; sourceTree = SOURCE_ROOT; };
		38CF35A8146D35CA0015A33B /* jsonlua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jsonlua.h; path = luasupport/JSON/jsonlua.h; sourceTree = SOURCE_ROOT; };
		38CF35B0146D367B0015A33B /* httplib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = httplib.c; path = luasupport/HTTP/httplib.c; sourceTree = SOURCE_ROOT; };
		38CF35B1146D367B0015A33B /* httplib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = httplib.h; path = luasupport/HTTP/httplib.h; sourceTree = SOURCE_ROOT; };
		38CF35B5146D36BE0015A33B /* postprocessor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = postprocessor.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor.c"; sourceTree = SOURCE_ROOT; };
		38CF35B7146D36D70015A33B /* reason_phrase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = reason_phrase.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.c"; sourceTree = SOURCE_ROOT; };
		38CF35B8146D36D70015A33B /* reason_phrase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reason_phrase.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.h"; sourceTree = SOURCE_ROOT; };
		38CF35B9146D36D70015A33B /* response.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = response.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.c"; sourceTree = SOURCE_ROOT; };
		38CF35BA146D36D70015A33B /* response.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = response.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.h"; sourceTree = SOURCE_ROOT; };
		38CF35BD146D36F00015A33B /* memorypool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = memorypool.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.c"; sourceTree = SOURCE_ROOT; };
		38CF35BE146D36F00015A33B /* memorypool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memorypool.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.h"; sourceTree = SOURCE_ROOT; };
		38CF35C0146D37070015A33B /* connection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = connection.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.c"; sourceTree = SOURCE_ROOT; };
		38CF35C1146D37070015A33B /* connection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = connection.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.h"; sourceTree = SOURCE_ROOT; };
		38CF35C3146D37180015A33B /* daemon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = daemon.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/daemon.c"; sourceTree = SOURCE_ROOT; };
		38CF35C5146D372E0015A33B /* internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = internal.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.c"; sourceTree = SOURCE_ROOT; };
		38CF35C8146D37610015A33B /* microhttpd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = microhttpd.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/include/microhttpd.h"; sourceTree = SOURCE_ROOT; };
		38CF35C9146D37620015A33B /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = platform.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/include/platform.h"; sourceTree = SOURCE_ROOT; };
		38CF35CA146D37620015A33B /* plibc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plibc.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/include/plibc.h"; sourceTree = SOURCE_ROOT; };
		38CF35CB146D377C0015A33B /* MHD_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MHD_config.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/MHD_config.h"; sourceTree = SOURCE_ROOT; };
		38CF35CD146D37920015A33B /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = internal.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.h"; sourceTree = SOURCE_ROOT; };
		38E018E1106CE91C00711E4D /* phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = phy.h; sourceTree = "<group>"; };
		38E018E2106CE91C00711E4D /* phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = phy.c; sourceTree = "<group>"; };
		38E018F0106CEA0F00711E4D /* sim_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sim_phy.c; path = Network/Simulation/sim_phy.c; sourceTree = SOURCE_ROOT; };
		38E018F1106CEA0F00711E4D /* sim_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sim_phy.h; path = Network/Simulation/sim_phy.h; sourceTree = SOURCE_ROOT; };
		38E01925106D09B600711E4D /* real_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = real_phy.h; path = Network/Real/real_phy.h; sourceTree = SOURCE_ROOT; };
		38E0192C106D0ACD00711E4D /* real_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = real_phy.c; path = Network/Real/real_phy.c; sourceTree = SOURCE_ROOT; };
		38E01933106D0AD200711E4D /* bsdserial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsdserial.c; path = Network/Real/SERIAL/OSX/bsdserial.c; sourceTree = SOURCE_ROOT; };
197
198
199
200
201
202
203

204
205
206
207
208
209
210
			name = Firenet;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				08FB7796FE84155DC02AAC07 /* main.c */,

				3877B3EE10459B370033A57B /* Node */,
				38851C77104C469000A3B757 /* Lua */,
				380074AD10209122007957AC /* Network */,
			);
			name = Source;
			sourceTree = "<group>";
		};







>







252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
			name = Firenet;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				08FB7796FE84155DC02AAC07 /* main.c */,
				38CF343A146D35850015A33B /* Logging */,
				3877B3EE10459B370033A57B /* Node */,
				38851C77104C469000A3B757 /* Lua */,
				380074AD10209122007957AC /* Network */,
			);
			name = Source;
			sourceTree = "<group>";
		};
380
381
382
383
384
385
386


387
388
389
390
391
392
393
		};
		38B4A3831051562000B79D3C /* luasupport */ = {
			isa = PBXGroup;
			children = (
				38B4A38E105159E900B79D3C /* sysop.h */,
				38B4A3841051562000B79D3C /* sysop.c */,
				38851C8A104C46AC00A3B757 /* linit.c */,


				38B4A4191051906900B79D3C /* timer */,
				38BCE290105559220001F1EC /* firenet */,
				38B354ED105EA9BB00A36F46 /* kdb */,
			);
			path = luasupport;
			sourceTree = SOURCE_ROOT;
		};







>
>







436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
		};
		38B4A3831051562000B79D3C /* luasupport */ = {
			isa = PBXGroup;
			children = (
				38B4A38E105159E900B79D3C /* sysop.h */,
				38B4A3841051562000B79D3C /* sysop.c */,
				38851C8A104C46AC00A3B757 /* linit.c */,
				38CF343F146D35C00015A33B /* HTTP */,
				38CF359E146D35CA0015A33B /* JSON */,
				38B4A4191051906900B79D3C /* timer */,
				38BCE290105559220001F1EC /* firenet */,
				38B354ED105EA9BB00A36F46 /* kdb */,
			);
			path = luasupport;
			sourceTree = SOURCE_ROOT;
		};
408
409
410
411
412
413
414















































































































415
416
417
418
419
420
421
				38BCE292105559220001F1EC /* lua_firenet.h */,
				38BCE293105559220001F1EC /* packet_lua.c */,
				38BCE294105559220001F1EC /* packet_lua.h */,
			);
			name = firenet;
			path = luasupport/firenet;
			sourceTree = SOURCE_ROOT;















































































































		};
		38E018D2106CE8C000711E4D /* Simulation */ = {
			isa = PBXGroup;
			children = (
				38E018F0106CEA0F00711E4D /* sim_phy.c */,
				38E018F1106CEA0F00711E4D /* sim_phy.h */,
			);







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
				38BCE292105559220001F1EC /* lua_firenet.h */,
				38BCE293105559220001F1EC /* packet_lua.c */,
				38BCE294105559220001F1EC /* packet_lua.h */,
			);
			name = firenet;
			path = luasupport/firenet;
			sourceTree = SOURCE_ROOT;
		};
		38CF343A146D35850015A33B /* Logging */ = {
			isa = PBXGroup;
			children = (
				38CF343B146D35850015A33B /* firenetlog.c */,
				38CF343C146D35850015A33B /* firenetlog.h */,
			);
			path = Logging;
			sourceTree = SOURCE_ROOT;
		};
		38CF343F146D35C00015A33B /* HTTP */ = {
			isa = PBXGroup;
			children = (
				38CF35B0146D367B0015A33B /* httplib.c */,
				38CF35B1146D367B0015A33B /* httplib.h */,
				38CF35B3146D367F0015A33B /* libmicrohttp */,
				38CF3440146D35C00015A33B /* COMS */,
				38CF352C146D35C10015A33B /* rest */,
			);
			name = HTTP;
			path = luasupport/HTTP;
			sourceTree = SOURCE_ROOT;
		};
		38CF3440146D35C00015A33B /* COMS */ = {
			isa = PBXGroup;
			children = (
				38CF3441146D35C00015A33B /* restcom.c */,
				38CF3442146D35C00015A33B /* restcom.h */,
				38CF3443146D35C00015A33B /* restcomQ.c */,
				38CF3444146D35C00015A33B /* restcomQ.h */,
			);
			name = COMS;
			path = luasupport/HTTP/COMS;
			sourceTree = SOURCE_ROOT;
		};
		38CF352C146D35C10015A33B /* rest */ = {
			isa = PBXGroup;
			children = (
				38CF352D146D35C10015A33B /* rest.c */,
				38CF352E146D35C10015A33B /* rest.h */,
				38CF352F146D35C10015A33B /* restclient.c */,
				38CF3530146D35C10015A33B /* restclient.h */,
			);
			name = rest;
			path = luasupport/HTTP/rest;
			sourceTree = SOURCE_ROOT;
		};
		38CF359E146D35CA0015A33B /* JSON */ = {
			isa = PBXGroup;
			children = (
				38CF359F146D35CA0015A33B /* JSON */,
				38CF35A7146D35CA0015A33B /* jsonlua.c */,
				38CF35A8146D35CA0015A33B /* jsonlua.h */,
			);
			name = JSON;
			path = luasupport/JSON;
			sourceTree = SOURCE_ROOT;
		};
		38CF359F146D35CA0015A33B /* JSON */ = {
			isa = PBXGroup;
			children = (
				38CF35A0146D35CA0015A33B /* jescape.c */,
				38CF35A1146D35CA0015A33B /* jescape.h */,
				38CF35A2146D35CA0015A33B /* qdj.c */,
				38CF35A3146D35CA0015A33B /* qdj.h */,
				38CF35A4146D35CA0015A33B /* qdj_token.c */,
				38CF35A5146D35CA0015A33B /* qdj_token.h */,
				38CF35A6146D35CA0015A33B /* qdj_util.c */,
			);
			name = JSON;
			path = luasupport/JSON/JSON;
			sourceTree = SOURCE_ROOT;
		};
		38CF35B3146D367F0015A33B /* libmicrohttp */ = {
			isa = PBXGroup;
			children = (
				38CF35C7146D37340015A33B /* Include */,
				38CF35B4146D36930015A33B /* SRC */,
			);
			name = libmicrohttp;
			sourceTree = "<group>";
		};
		38CF35B4146D36930015A33B /* SRC */ = {
			isa = PBXGroup;
			children = (
				38CF35CD146D37920015A33B /* internal.h */,
				38CF35C5146D372E0015A33B /* internal.c */,
				38CF35C3146D37180015A33B /* daemon.c */,
				38CF35C0146D37070015A33B /* connection.c */,
				38CF35C1146D37070015A33B /* connection.h */,
				38CF35BD146D36F00015A33B /* memorypool.c */,
				38CF35BE146D36F00015A33B /* memorypool.h */,
				38CF35B7146D36D70015A33B /* reason_phrase.c */,
				38CF35B8146D36D70015A33B /* reason_phrase.h */,
				38CF35B9146D36D70015A33B /* response.c */,
				38CF35BA146D36D70015A33B /* response.h */,
				38CF35B5146D36BE0015A33B /* postprocessor.c */,
			);
			name = SRC;
			sourceTree = "<group>";
		};
		38CF35C7146D37340015A33B /* Include */ = {
			isa = PBXGroup;
			children = (
				38CF35CB146D377C0015A33B /* MHD_config.h */,
				38CF35C8146D37610015A33B /* microhttpd.h */,
				38CF35C9146D37620015A33B /* platform.h */,
				38CF35CA146D37620015A33B /* plibc.h */,
			);
			name = Include;
			sourceTree = "<group>";
		};
		38E018D2106CE8C000711E4D /* Simulation */ = {
			isa = PBXGroup;
			children = (
				38E018F0106CEA0F00711E4D /* sim_phy.c */,
				38E018F1106CEA0F00711E4D /* sim_phy.h */,
			);
491
492
493
494
495
496
497



498
499

500



501
502
503
504
505
506
507
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;



			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "Firenet" */;
			compatibilityVersion = "Xcode 3.2";

			hasScannedForEncodings = 1;



			mainGroup = 08FB7794FE84155DC02AAC07 /* Firenet */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* Firenet */,
			);
		};







>
>
>


>

>
>
>







660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 0720;
			};
			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "Firenet" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 1;
			knownRegions = (
				en,
			);
			mainGroup = 08FB7794FE84155DC02AAC07 /* Firenet */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* Firenet */,
			);
		};
557
558
559
560
561
562
563


















564
565
566
567
568
569
570
571
572
573
574
575
576
577
578

579
580

581
582
583
584
585
586
587
588
589
590
591

592
593
594
595
596
597
598
599
600
601
602
603

604
605

606
607
608
609
610
611
612
613
614
615
616

617

618
619
620
621
622
623
624
625
				38BCE296105559220001F1EC /* packet_lua.c in Sources */,
				38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */,
				38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */,
				38E018E3106CE91C00711E4D /* phy.c in Sources */,
				38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */,
				38E0192D106D0ACD00711E4D /* real_phy.c in Sources */,
				38E01939106D0AD200711E4D /* bsdserial.c in Sources */,


















			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_MODEL_TUNING = G5;
				GCC_OPTIMIZATION_LEVEL = 0;

				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = Firenet;

			};
			name = Debug;
		};
		1DEB928708733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_MODEL_TUNING = G5;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = Firenet;

			};
			name = Release;
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;

				ONLY_ACTIVE_ARCH = YES;
				PREBINDING = NO;

				SDKROOT = macosx10.6;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;

				PREBINDING = NO;

				SDKROOT = macosx10.6;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "Firenet" */ = {







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>












<


>


>











>






|


|


>

|
>
|






<



>
|
>
|







733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769

770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810

811
812
813
814
815
816
817
818
819
820
821
822
823
824
				38BCE296105559220001F1EC /* packet_lua.c in Sources */,
				38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */,
				38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */,
				38E018E3106CE91C00711E4D /* phy.c in Sources */,
				38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */,
				38E0192D106D0ACD00711E4D /* real_phy.c in Sources */,
				38E01939106D0AD200711E4D /* bsdserial.c in Sources */,
				38CF343D146D35850015A33B /* firenetlog.c in Sources */,
				38CF3531146D35C20015A33B /* restcom.c in Sources */,
				38CF3532146D35C20015A33B /* restcomQ.c in Sources */,
				38CF359C146D35C20015A33B /* rest.c in Sources */,
				38CF359D146D35C20015A33B /* restclient.c in Sources */,
				38CF35A9146D35CA0015A33B /* jescape.c in Sources */,
				38CF35AA146D35CA0015A33B /* qdj.c in Sources */,
				38CF35AB146D35CA0015A33B /* qdj_token.c in Sources */,
				38CF35AC146D35CA0015A33B /* qdj_util.c in Sources */,
				38CF35AD146D35CA0015A33B /* jsonlua.c in Sources */,
				38CF35B2146D367B0015A33B /* httplib.c in Sources */,
				38CF35B6146D36BE0015A33B /* postprocessor.c in Sources */,
				38CF35BB146D36D70015A33B /* reason_phrase.c in Sources */,
				38CF35BC146D36D70015A33B /* response.c in Sources */,
				38CF35BF146D36F00015A33B /* memorypool.c in Sources */,
				38CF35C2146D37070015A33B /* connection.c in Sources */,
				38CF35C4146D37180015A33B /* daemon.c in Sources */,
				38CF35C6146D372E0015A33B /* internal.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;

				GCC_MODEL_TUNING = G5;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_VERSION = "";
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = Firenet;
				SDKROOT = macosx;
			};
			name = Debug;
		};
		1DEB928708733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_MODEL_TUNING = G5;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = Firenet;
				SDKROOT = macosx;
			};
			name = Release;
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_VERSION = com.apple.compilers.llvmgcc42;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				ONLY_ACTIVE_ARCH = YES;
				OTHER_CFLAGS = "-DBSD_VERSION";
				"OTHER_CPLUSPLUSFLAGS[sdk=macosx10.7][arch=*]" = "$(OTHER_CFLAGS)";
				SDKROOT = macosx;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {

				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				ONLY_ACTIVE_ARCH = YES;
				OTHER_CFLAGS = "-DBSD_VERSION";
				SDKROOT = macosx;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "Firenet" */ = {

Changes to Firenet_old.xcodeproj/jim.mode1v3.

223
224
225
226
227
228
229


230

231
232
233
234
235
236
237


238
239
240
241
242
243
244
		<integer>-1</integer>
	</array>
	<key>Perspectives</key>
	<array>
		<dict>
			<key>ChosenToolbarItems</key>
			<array>


				<string>active-combo-popup</string>

				<string>buildOrClean</string>
				<string>build-and-go</string>
				<string>go</string>
				<string>debugger-enable-breakpoints</string>
				<string>servicesModulebreakpoints</string>
				<string>com.apple.ide.PBXToolbarStopButton</string>
				<string>servicesModulefind</string>


			</array>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProjectWithEditor</string>
			<key>Identifier</key>
			<string>perspective.project</string>







>
>
|
>

<
|
|

<

>
>







223
224
225
226
227
228
229
230
231
232
233
234

235
236
237

238
239
240
241
242
243
244
245
246
247
		<integer>-1</integer>
	</array>
	<key>Perspectives</key>
	<array>
		<dict>
			<key>ChosenToolbarItems</key>
			<array>
				<string>active-target-popup</string>
				<string>active-buildstyle-popup</string>
				<string>action</string>
				<string>debugger-enable-breakpoints</string>
				<string>buildOrClean</string>

				<string>go-debug</string>
				<string>com.apple.ide.PBXToolbarStopButton</string>
				<string>servicesModulebreakpoints</string>

				<string>servicesModulefind</string>
				<string>NSToolbarFlexibleSpaceItem</string>
				<string>com.apple.pbx.toolbar.searchfield</string>
			</array>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProjectWithEditor</string>
			<key>Identifier</key>
			<string>perspective.project</string>
281
282
283
284
285
286
287

288
289
290
291
292
293
294
295
296
297
298
299

300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>08FB7794FE84155DC02AAC07</string>
								<string>08FB7795FE84155DC02AAC07</string>

								<string>3877B3EE10459B370033A57B</string>
								<string>3877B3F410459B370033A57B</string>
								<string>3877B3EF10459B370033A57B</string>
								<string>380074AD10209122007957AC</string>
								<string>38E018D2106CE8C000711E4D</string>
								<string>1C37FAAC04509CD000000102</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>0</integer>

								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {217, 595}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<true/>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {234, 613}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>217</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>54 124 857 654 0 0 1280 778 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>234pt</string>
				</dict>
				<dict>







>

|
<
<
<






|
>



|











|






|







284
285
286
287
288
289
290
291
292
293



294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>08FB7794FE84155DC02AAC07</string>
								<string>08FB7795FE84155DC02AAC07</string>
								<string>38CF343A146D35850015A33B</string>
								<string>3877B3EE10459B370033A57B</string>
								<string>38851C77104C469000A3B757</string>



								<string>1C37FAAC04509CD000000102</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>20</integer>
									<integer>19</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {217, 569}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<true/>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {234, 587}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>217</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>217 119 857 628 0 0 1280 1002 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>234pt</string>
				</dict>
				<dict>
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {618, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>54 124 857 654 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20506471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 5}, {618, 608}}</string>
								<key>RubberWindowFrame</key>
								<string>54 124 857 654 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>608pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>618pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCModuleDock</string>
				<string>PBXNavigatorGroup</string>
				<string>XCDetailModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>3847C09A108F2CF4008484F8</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>3847C09B108F2CF4008484F8</string>
				<string>1CE0B20306471E060097A5F4</string>
				<string>1CE0B20506471E060097A5F4</string>
			</array>
			<key>ToolbarConfigUserDefaultsMinorVersion</key>
			<string>2</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.defaultV3</string>







|

















|

|




|


















|

|







354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {618, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>217 119 857 628 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20506471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 5}, {618, 582}}</string>
								<key>RubberWindowFrame</key>
								<string>217 119 857 628 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>582pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>618pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCModuleDock</string>
				<string>PBXNavigatorGroup</string>
				<string>XCDetailModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>38B8C8F114E666E800656598</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>38B8C8F214E666E800656598</string>
				<string>1CE0B20306471E060097A5F4</string>
				<string>1CE0B20506471E060097A5F4</string>
			</array>
			<key>ToolbarConfigUserDefaultsMinorVersion</key>
			<string>2</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.defaultV3</string>
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
	<key>ShelfIsVisible</key>
	<false/>
	<key>SourceDescription</key>
	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
	<key>StatusbarIsVisible</key>
	<true/>
	<key>TimeStamp</key>
	<real>277818612.32285899</real>
	<key>ToolbarDisplayMode</key>
	<integer>1</integer>
	<key>ToolbarIsVisible</key>
	<true/>
	<key>ToolbarSizeMode</key>
	<integer>1</integer>
	<key>Type</key>
	<string>Perspectives</string>
	<key>UpdateMessage</key>
	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
	<key>WindowJustification</key>
	<integer>5</integer>
	<key>WindowOrderList</key>
	<array>
		<string>3800743A101F6082007957AC</string>
		<string>1CD10A99069EF8BA00B06720</string>
		<string>/Users/jschimpf/Public/Firenet/Firenet_old.xcodeproj</string>
	</array>
	<key>WindowString</key>
	<string>54 124 857 654 0 0 1280 778 </string>
	<key>WindowToolsV3</key>
	<array>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.build</string>







|





|













|







521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
	<key>ShelfIsVisible</key>
	<false/>
	<key>SourceDescription</key>
	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
	<key>StatusbarIsVisible</key>
	<true/>
	<key>TimeStamp</key>
	<real>350657621.99337798</real>
	<key>ToolbarDisplayMode</key>
	<integer>1</integer>
	<key>ToolbarIsVisible</key>
	<true/>
	<key>ToolbarSizeMode</key>
	<integer>2</integer>
	<key>Type</key>
	<string>Perspectives</string>
	<key>UpdateMessage</key>
	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
	<key>WindowJustification</key>
	<integer>5</integer>
	<key>WindowOrderList</key>
	<array>
		<string>3800743A101F6082007957AC</string>
		<string>1CD10A99069EF8BA00B06720</string>
		<string>/Users/jschimpf/Public/Firenet/Firenet_old.xcodeproj</string>
	</array>
	<key>WindowString</key>
	<string>217 119 857 628 0 0 1280 1002 </string>
	<key>WindowToolsV3</key>
	<array>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.build</string>
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {616, 294}}</string>
								<key>RubberWindowFrame</key>
								<string>83 163 616 595 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>294pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>XCMainBuildResultsModuleGUID</string>
								<key>PBXProjectModuleLabel</key>
								<string>Build Results</string>
								<key>XCBuildResultsTrigger_Collapse</key>
								<integer>1024</integer>
								<key>XCBuildResultsTrigger_Open</key>
								<integer>1010</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 299}, {616, 255}}</string>
								<key>RubberWindowFrame</key>
								<string>83 163 616 595 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXBuildResultsModule</string>
							<key>Proportion</key>
							<string>255pt</string>
						</dict>
					</array>







|














|

|








|







571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {616, 294}}</string>
								<key>RubberWindowFrame</key>
								<string>-668 234 616 595 -1024 123 1024 768 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>294pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>XCMainBuildResultsModuleGUID</string>
								<key>PBXProjectModuleLabel</key>
								<string>Build</string>
								<key>XCBuildResultsTrigger_Collapse</key>
								<integer>1022</integer>
								<key>XCBuildResultsTrigger_Open</key>
								<integer>1010</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 299}, {616, 255}}</string>
								<key>RubberWindowFrame</key>
								<string>-668 234 616 595 -1024 123 1024 768 </string>
							</dict>
							<key>Module</key>
							<string>PBXBuildResultsModule</string>
							<key>Proportion</key>
							<string>255pt</string>
						</dict>
					</array>
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
				<string>PBXBuildResultsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>3800743A101F6082007957AC</string>
				<string>3847C091108F2CEE008484F8</string>
				<string>1CD0528F0623707200166675</string>
				<string>XCMainBuildResultsModuleGUID</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.buildV3</string>
			<key>WindowString</key>
			<string>83 163 616 595 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>3800743A101F6082007957AC</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>







|






|







620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
				<string>PBXBuildResultsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>3800743A101F6082007957AC</string>
				<string>38B8C8E914E6669500656598</string>
				<string>1CD0528F0623707200166675</string>
				<string>XCMainBuildResultsModuleGUID</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.buildV3</string>
			<key>WindowString</key>
			<string>-668 234 616 595 -1024 123 1024 768 </string>
			<key>WindowToolGUID</key>
			<string>3800743A101F6082007957AC</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {437, 330}}</string>
											<string>{{437, 0}, {522, 330}}</string>
										</array>
									</dict>
									<key>VerticalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {959, 330}}</string>
											<string>{{0, 330}, {959, 288}}</string>
										</array>
									</dict>
								</dict>
								<key>LauncherConfigVersion</key>
								<string>8</string>
								<key>PBXProjectModuleGUID</key>
								<string>1C162984064C10D400B95A72</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debug - GLUTExamples (Underwater)</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>DebugConsoleVisible</key>
								<string>None</string>
								<key>DebugConsoleWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>DebugSTDIOWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>Frame</key>
								<string>{{0, 0}, {959, 618}}</string>
								<key>PBXDebugSessionStackFrameViewKey</key>
								<dict>
									<key>DebugVariablesTableConfiguration</key>
									<array>
										<string>Name</string>
										<real>149</real>
										<string>Value</string>
										<real>114</real>
										<string>Summary</string>
										<real>234</real>
									</array>
									<key>Frame</key>
									<string>{{437, 0}, {522, 330}}</string>
									<key>RubberWindowFrame</key>
									<string>321 119 959 659 0 0 1280 778 </string>
								</dict>
								<key>RubberWindowFrame</key>
								<string>321 119 959 659 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugSessionModule</string>
							<key>Proportion</key>
							<string>618pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>618pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugSessionModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1CD10A99069EF8BA00B06720</string>
				<string>3847C092108F2CEE008484F8</string>
				<string>1C162984064C10D400B95A72</string>
				<string>3847C093108F2CEE008484F8</string>
				<string>3847C094108F2CEE008484F8</string>
				<string>3847C095108F2CEE008484F8</string>
				<string>3847C096108F2CEE008484F8</string>
				<string>3847C097108F2CEE008484F8</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugV3</string>
			<key>WindowString</key>
			<string>321 119 959 659 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1CD10A99069EF8BA00B06720</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.find</string>
			<key>IsVertical</key>







|
|














|
|



















|









|


|

|


|




|



|













|

|
|
|
|
|




|



|







662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {480, 310}}</string>
											<string>{{480, 0}, {479, 310}}</string>
										</array>
									</dict>
									<key>VerticalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {959, 310}}</string>
											<string>{{0, 310}, {959, 276}}</string>
										</array>
									</dict>
								</dict>
								<key>LauncherConfigVersion</key>
								<string>8</string>
								<key>PBXProjectModuleGUID</key>
								<string>1C162984064C10D400B95A72</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debug - GLUTExamples (Underwater)</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>DebugConsoleVisible</key>
								<string>None</string>
								<key>DebugConsoleWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>DebugSTDIOWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>Frame</key>
								<string>{{0, 0}, {959, 586}}</string>
								<key>PBXDebugSessionStackFrameViewKey</key>
								<dict>
									<key>DebugVariablesTableConfiguration</key>
									<array>
										<string>Name</string>
										<real>149</real>
										<string>Value</string>
										<real>114</real>
										<string>Summary</string>
										<real>191</real>
									</array>
									<key>Frame</key>
									<string>{{480, 0}, {479, 310}}</string>
									<key>RubberWindowFrame</key>
									<string>-845 203 959 627 -1024 123 1024 768 </string>
								</dict>
								<key>RubberWindowFrame</key>
								<string>-845 203 959 627 -1024 123 1024 768 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugSessionModule</string>
							<key>Proportion</key>
							<string>586pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>586pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugSessionModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1CD10A99069EF8BA00B06720</string>
				<string>38B8C8DF14E6668A00656598</string>
				<string>1C162984064C10D400B95A72</string>
				<string>38B8C8E014E6668A00656598</string>
				<string>38B8C8E114E6668A00656598</string>
				<string>38B8C8E214E6668A00656598</string>
				<string>38B8C8E314E6668A00656598</string>
				<string>38B8C8E414E6668A00656598</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugV3</string>
			<key>WindowString</key>
			<string>-845 203 959 627 -1024 123 1024 768 </string>
			<key>WindowToolGUID</key>
			<string>1CD10A99069EF8BA00B06720</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.find</string>
			<key>IsVertical</key>
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
								<string>Debugger Console</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {788, 385}}</string>
								<key>RubberWindowFrame</key>
								<string>277 228 788 426 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugCLIModule</string>
							<key>Proportion</key>
							<string>385pt</string>
						</dict>
					</array>







|







879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
								<string>Debugger Console</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {788, 385}}</string>
								<key>RubberWindowFrame</key>
								<string>201 425 788 426 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugCLIModule</string>
							<key>Proportion</key>
							<string>385pt</string>
						</dict>
					</array>
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
				<string>PBXDebugCLIModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAAD065D492600B07095</string>
				<string>38AFF608107E1BE60025F301</string>
				<string>1C78EAAC065D492600B07095</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.consoleV3</string>
			<key>WindowString</key>
			<string>277 228 788 426 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1C78EAAD065D492600B07095</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.snapshots</string>
			<key>Layout</key>
			<array>
				<dict>







|





|



|







902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
				<string>PBXDebugCLIModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAAD065D492600B07095</string>
				<string>383BD5B714B1F0260028C672</string>
				<string>1C78EAAC065D492600B07095</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.consoleV3</string>
			<key>WindowString</key>
			<string>201 425 788 426 0 0 1280 1002 </string>
			<key>WindowToolGUID</key>
			<string>1C78EAAD065D492600B07095</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.snapshots</string>
			<key>Layout</key>
			<array>
				<dict>

Changes to Firenet_old.xcodeproj/jim.pbxuser.

149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180

181


182
183
184
185
186
187
188
189
190
191



192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
					PBXTargetDataSource_PrimaryAttribute,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 277818580;
			PBXWorkspaceStateSaveDate = 277818580;
		};
		sourceControlManager = 38007423101F5FF8007957AC /* Source Control */;
		userBuildSettings = {
		};
	};
	08FB7796FE84155DC02AAC07 /* main.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {701, 3066}}";
			sepNavSelRange = "{2205, 12}";
			sepNavVisRange = "{2162, 765}";
			sepNavWindowFrame = "{{493, 63}, {748, 715}}";
		};
	};
	3800741B101F5FD4007957AC /* Firenet */ = {
		isa = PBXExecutable;
		activeArgIndices = (
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,

			YES,


		);
		argumentStrings = (
			"-p X -n 10",
			"-p 1",
			"-p 1 -n 10",
			"-p X -c test.lua",
			"-p X -n 1",
			"-p X -n 10 -c queuefile.lua",
			"-p X -n 5 -c playshow.lua -Q queue.out -M stars_stripes_forever.mp3",
			"-p X -n 10 -c test.lua",



		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 1;
		configStateDict = {
		};
		customDataFormattersEnabled = 1;
		dataTipCustomDataFormattersEnabled = 1;
		dataTipShowTypeColumn = 1;
		dataTipSortType = 0;
		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		libgmallocEnabled = 0;
		name = Firenet;
		savedGlobals = {
		};
		showTypeColumn = 0;
		sourceDirectories = (
		);
		variableFormatDictionary = {
			"0-unsigned char-main" = 1;
			"0-unsigned char-packet_gen_type" = 1;
			"0-unsigned char-pump_packet" = 1;
			"1-unsigned char-packet_gen_type" = 1;







|
|







|
|
|
|












>

>
>










>
>
>


|



<
<
<












<







149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203



204
205
206
207
208
209
210
211
212
213
214
215

216
217
218
219
220
221
222
					PBXTargetDataSource_PrimaryAttribute,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 350643842;
			PBXWorkspaceStateSaveDate = 350643842;
		};
		sourceControlManager = 38007423101F5FF8007957AC /* Source Control */;
		userBuildSettings = {
		};
	};
	08FB7796FE84155DC02AAC07 /* main.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {570, 3360}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{0, 788}";
			sepNavWindowFrame = "{{347, 130}, {748, 715}}";
		};
	};
	3800741B101F5FD4007957AC /* Firenet */ = {
		isa = PBXExecutable;
		activeArgIndices = (
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,
			NO,
			YES,
			NO,
			NO,
		);
		argumentStrings = (
			"-p X -n 10",
			"-p 1",
			"-p 1 -n 10",
			"-p X -c test.lua",
			"-p X -n 1",
			"-p X -n 10 -c queuefile.lua",
			"-p X -n 5 -c playshow.lua -Q queue.out -M stars_stripes_forever.mp3",
			"-p X -n 10 -c test.lua",
			"-p 1 -c ../../Scripts/MultFire.lua -log log.txt",
			"-p X -n 10 -c ../../Scripts/PgmFire.lua -log log.txt",
			"-p X -n 10 -c ../../Site/rest/main.lua -http ../../Site/Site_J -rest ../../Site/rest -show ../../Shows -log log.txt",
		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 0;
		configStateDict = {
		};
		customDataFormattersEnabled = 1;



		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		libgmallocEnabled = 0;
		name = Firenet;
		savedGlobals = {
		};

		sourceDirectories = (
		);
		variableFormatDictionary = {
			"0-unsigned char-main" = 1;
			"0-unsigned char-packet_gen_type" = 1;
			"0-unsigned char-pump_packet" = 1;
			"1-unsigned char-packet_gen_type" = 1;
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
		breakpointStyle = 1;
		continueAfterActions = 0;
		countType = 0;
		delayBeforeContinue = 0;
		hitCount = 0;
		ignoreCount = 0;
		location = libSystem.B.dylib;
		modificationTime = 276708737.5340031;
		originalNumberOfMultipleMatches = 0;
		state = 2;
		symbolName = malloc_error_break;
	};
	3877B3FC10459B370033A57B /* comqueue.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {732, 5936}}";
			sepNavSelRange = "{6996, 19}";







|
<







289
290
291
292
293
294
295
296

297
298
299
300
301
302
303
		breakpointStyle = 1;
		continueAfterActions = 0;
		countType = 0;
		delayBeforeContinue = 0;
		hitCount = 0;
		ignoreCount = 0;
		location = libSystem.B.dylib;
		modificationTime = 347205646.948454;

		state = 2;
		symbolName = malloc_error_break;
	};
	3877B3FC10459B370033A57B /* comqueue.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {732, 5936}}";
			sepNavSelRange = "{6996, 19}";
558
559
560
561
562
563
564








565
566
567
568
569
570
571
	38CEECC910495B0100F62890 /* logmap.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {583, 658}}";
			sepNavSelRange = "{1008, 13}";
			sepNavVisRange = "{347, 1012}";
			sepNavWindowFrame = "{{15, 69}, {630, 649}}";
		};








	};
	38E018E1106CE91C00711E4D /* phy.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 552}}";
			sepNavSelRange = "{854, 0}";
			sepNavVisRange = "{0, 984}";
			sepNavWindowFrame = "{{-783, -29}, {655, 680}}";







>
>
>
>
>
>
>
>







559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
	38CEECC910495B0100F62890 /* logmap.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {583, 658}}";
			sepNavSelRange = "{1008, 13}";
			sepNavVisRange = "{347, 1012}";
			sepNavWindowFrame = "{{15, 69}, {630, 649}}";
		};
	};
	38CF35B0146D367B0015A33B /* httplib.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {796, 9086}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{13743, 802}";
			sepNavWindowFrame = "{{15, 309}, {843, 688}}";
		};
	};
	38E018E1106CE91C00711E4D /* phy.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {608, 552}}";
			sepNavSelRange = "{854, 0}";
			sepNavVisRange = "{0, 984}";
			sepNavWindowFrame = "{{-783, -29}, {655, 680}}";

Changes to Firenet_old.xcodeproj/project.pbxproj.

45
46
47
48
49
50
51


















52
53
54
55
56
57
58
		38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354EE105EA9BB00A36F46 /* lua_kbd.c */; };
		38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354F1105EA9BB00A36F46 /* tgkbhit.c */; };
		38B4A3851051562000B79D3C /* sysop.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A3841051562000B79D3C /* sysop.c */; };
		38B4A4221051906900B79D3C /* lua_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A41A1051906900B79D3C /* lua_timer.c */; };
		38BCE295105559220001F1EC /* lua_firenet.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE291105559220001F1EC /* lua_firenet.c */; };
		38BCE296105559220001F1EC /* packet_lua.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE293105559220001F1EC /* packet_lua.c */; };
		38CEECCA10495B0100F62890 /* logmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CEECC810495B0100F62890 /* logmap.c */; };


















		38E018E3106CE91C00711E4D /* phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018E2106CE91C00711E4D /* phy.c */; };
		38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018F0106CEA0F00711E4D /* sim_phy.c */; };
		38E0192D106D0ACD00711E4D /* real_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E0192C106D0ACD00711E4D /* real_phy.c */; };
		38E01939106D0AD200711E4D /* bsdserial.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E01933106D0AD200711E4D /* bsdserial.c */; };
		38E01954106D10F200711E4D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01953106D10F200711E4D /* IOKit.framework */; };
		38E01998106D129500711E4D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01997106D129500711E4D /* CoreFoundation.framework */; };
		38FFC861104A8D35000206C4 /* child_cmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38FFC85E104A8D35000206C4 /* child_cmd.c */; };







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
		38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354EE105EA9BB00A36F46 /* lua_kbd.c */; };
		38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B354F1105EA9BB00A36F46 /* tgkbhit.c */; };
		38B4A3851051562000B79D3C /* sysop.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A3841051562000B79D3C /* sysop.c */; };
		38B4A4221051906900B79D3C /* lua_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 38B4A41A1051906900B79D3C /* lua_timer.c */; };
		38BCE295105559220001F1EC /* lua_firenet.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE291105559220001F1EC /* lua_firenet.c */; };
		38BCE296105559220001F1EC /* packet_lua.c in Sources */ = {isa = PBXBuildFile; fileRef = 38BCE293105559220001F1EC /* packet_lua.c */; };
		38CEECCA10495B0100F62890 /* logmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CEECC810495B0100F62890 /* logmap.c */; };
		38CF343D146D35850015A33B /* firenetlog.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF343B146D35850015A33B /* firenetlog.c */; };
		38CF3531146D35C20015A33B /* restcom.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF3441146D35C00015A33B /* restcom.c */; };
		38CF3532146D35C20015A33B /* restcomQ.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF3443146D35C00015A33B /* restcomQ.c */; };
		38CF359C146D35C20015A33B /* rest.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF352D146D35C10015A33B /* rest.c */; };
		38CF359D146D35C20015A33B /* restclient.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF352F146D35C10015A33B /* restclient.c */; };
		38CF35A9146D35CA0015A33B /* jescape.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A0146D35CA0015A33B /* jescape.c */; };
		38CF35AA146D35CA0015A33B /* qdj.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A2146D35CA0015A33B /* qdj.c */; };
		38CF35AB146D35CA0015A33B /* qdj_token.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A4146D35CA0015A33B /* qdj_token.c */; };
		38CF35AC146D35CA0015A33B /* qdj_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A6146D35CA0015A33B /* qdj_util.c */; };
		38CF35AD146D35CA0015A33B /* jsonlua.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35A7146D35CA0015A33B /* jsonlua.c */; };
		38CF35B2146D367B0015A33B /* httplib.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B0146D367B0015A33B /* httplib.c */; };
		38CF35B6146D36BE0015A33B /* postprocessor.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B5146D36BE0015A33B /* postprocessor.c */; };
		38CF35BB146D36D70015A33B /* reason_phrase.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B7146D36D70015A33B /* reason_phrase.c */; };
		38CF35BC146D36D70015A33B /* response.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35B9146D36D70015A33B /* response.c */; };
		38CF35BF146D36F00015A33B /* memorypool.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35BD146D36F00015A33B /* memorypool.c */; };
		38CF35C2146D37070015A33B /* connection.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35C0146D37070015A33B /* connection.c */; };
		38CF35C4146D37180015A33B /* daemon.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35C3146D37180015A33B /* daemon.c */; };
		38CF35C6146D372E0015A33B /* internal.c in Sources */ = {isa = PBXBuildFile; fileRef = 38CF35C5146D372E0015A33B /* internal.c */; };
		38E018E3106CE91C00711E4D /* phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018E2106CE91C00711E4D /* phy.c */; };
		38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E018F0106CEA0F00711E4D /* sim_phy.c */; };
		38E0192D106D0ACD00711E4D /* real_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E0192C106D0ACD00711E4D /* real_phy.c */; };
		38E01939106D0AD200711E4D /* bsdserial.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E01933106D0AD200711E4D /* bsdserial.c */; };
		38E01954106D10F200711E4D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01953106D10F200711E4D /* IOKit.framework */; };
		38E01998106D129500711E4D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E01997106D129500711E4D /* CoreFoundation.framework */; };
		38FFC861104A8D35000206C4 /* child_cmd.c in Sources */ = {isa = PBXBuildFile; fileRef = 38FFC85E104A8D35000206C4 /* child_cmd.c */; };
151
152
153
154
155
156
157





































158
159
160
161
162
163
164
		38B4A41B1051906900B79D3C /* lua_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_timer.h; path = luasupport/timer/lua_timer.h; sourceTree = SOURCE_ROOT; };
		38BCE291105559220001F1EC /* lua_firenet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_firenet.c; path = luasupport/firenet/lua_firenet.c; sourceTree = SOURCE_ROOT; };
		38BCE292105559220001F1EC /* lua_firenet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_firenet.h; path = luasupport/firenet/lua_firenet.h; sourceTree = SOURCE_ROOT; };
		38BCE293105559220001F1EC /* packet_lua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = packet_lua.c; path = luasupport/firenet/packet_lua.c; sourceTree = SOURCE_ROOT; };
		38BCE294105559220001F1EC /* packet_lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packet_lua.h; path = luasupport/firenet/packet_lua.h; sourceTree = SOURCE_ROOT; };
		38CEECC810495B0100F62890 /* logmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = logmap.c; path = Node/parent/logmap.c; sourceTree = SOURCE_ROOT; };
		38CEECC910495B0100F62890 /* logmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logmap.h; path = Node/parent/logmap.h; sourceTree = SOURCE_ROOT; };





































		38E018E1106CE91C00711E4D /* phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = phy.h; sourceTree = "<group>"; };
		38E018E2106CE91C00711E4D /* phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = phy.c; sourceTree = "<group>"; };
		38E018F0106CEA0F00711E4D /* sim_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sim_phy.c; path = Network/Simulation/sim_phy.c; sourceTree = SOURCE_ROOT; };
		38E018F1106CEA0F00711E4D /* sim_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sim_phy.h; path = Network/Simulation/sim_phy.h; sourceTree = SOURCE_ROOT; };
		38E01925106D09B600711E4D /* real_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = real_phy.h; path = Network/Real/real_phy.h; sourceTree = SOURCE_ROOT; };
		38E0192C106D0ACD00711E4D /* real_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = real_phy.c; path = Network/Real/real_phy.c; sourceTree = SOURCE_ROOT; };
		38E01933106D0AD200711E4D /* bsdserial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsdserial.c; path = Network/Real/SERIAL/OSX/bsdserial.c; sourceTree = SOURCE_ROOT; };







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
		38B4A41B1051906900B79D3C /* lua_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_timer.h; path = luasupport/timer/lua_timer.h; sourceTree = SOURCE_ROOT; };
		38BCE291105559220001F1EC /* lua_firenet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lua_firenet.c; path = luasupport/firenet/lua_firenet.c; sourceTree = SOURCE_ROOT; };
		38BCE292105559220001F1EC /* lua_firenet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lua_firenet.h; path = luasupport/firenet/lua_firenet.h; sourceTree = SOURCE_ROOT; };
		38BCE293105559220001F1EC /* packet_lua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = packet_lua.c; path = luasupport/firenet/packet_lua.c; sourceTree = SOURCE_ROOT; };
		38BCE294105559220001F1EC /* packet_lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packet_lua.h; path = luasupport/firenet/packet_lua.h; sourceTree = SOURCE_ROOT; };
		38CEECC810495B0100F62890 /* logmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = logmap.c; path = Node/parent/logmap.c; sourceTree = SOURCE_ROOT; };
		38CEECC910495B0100F62890 /* logmap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = logmap.h; path = Node/parent/logmap.h; sourceTree = SOURCE_ROOT; };
		38CF343B146D35850015A33B /* firenetlog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = firenetlog.c; path = Logging/firenetlog.c; sourceTree = SOURCE_ROOT; };
		38CF343C146D35850015A33B /* firenetlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = firenetlog.h; path = Logging/firenetlog.h; sourceTree = SOURCE_ROOT; };
		38CF3441146D35C00015A33B /* restcom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = restcom.c; path = luasupport/HTTP/COMS/restcom.c; sourceTree = SOURCE_ROOT; };
		38CF3442146D35C00015A33B /* restcom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = restcom.h; path = luasupport/HTTP/COMS/restcom.h; sourceTree = SOURCE_ROOT; };
		38CF3443146D35C00015A33B /* restcomQ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = restcomQ.c; path = luasupport/HTTP/COMS/restcomQ.c; sourceTree = SOURCE_ROOT; };
		38CF3444146D35C00015A33B /* restcomQ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = restcomQ.h; path = luasupport/HTTP/COMS/restcomQ.h; sourceTree = SOURCE_ROOT; };
		38CF352D146D35C10015A33B /* rest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rest.c; path = luasupport/HTTP/rest/rest.c; sourceTree = SOURCE_ROOT; };
		38CF352E146D35C10015A33B /* rest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rest.h; path = luasupport/HTTP/rest/rest.h; sourceTree = SOURCE_ROOT; };
		38CF352F146D35C10015A33B /* restclient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = restclient.c; path = luasupport/HTTP/rest/restclient.c; sourceTree = SOURCE_ROOT; };
		38CF3530146D35C10015A33B /* restclient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = restclient.h; path = luasupport/HTTP/rest/restclient.h; sourceTree = SOURCE_ROOT; };
		38CF35A0146D35CA0015A33B /* jescape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jescape.c; path = luasupport/JSON/JSON/jescape.c; sourceTree = SOURCE_ROOT; };
		38CF35A1146D35CA0015A33B /* jescape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jescape.h; path = luasupport/JSON/JSON/jescape.h; sourceTree = SOURCE_ROOT; };
		38CF35A2146D35CA0015A33B /* qdj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qdj.c; path = luasupport/JSON/JSON/qdj.c; sourceTree = SOURCE_ROOT; };
		38CF35A3146D35CA0015A33B /* qdj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdj.h; path = luasupport/JSON/JSON/qdj.h; sourceTree = SOURCE_ROOT; };
		38CF35A4146D35CA0015A33B /* qdj_token.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qdj_token.c; path = luasupport/JSON/JSON/qdj_token.c; sourceTree = SOURCE_ROOT; };
		38CF35A5146D35CA0015A33B /* qdj_token.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdj_token.h; path = luasupport/JSON/JSON/qdj_token.h; sourceTree = SOURCE_ROOT; };
		38CF35A6146D35CA0015A33B /* qdj_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = qdj_util.c; path = luasupport/JSON/JSON/qdj_util.c; sourceTree = SOURCE_ROOT; };
		38CF35A7146D35CA0015A33B /* jsonlua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jsonlua.c; path = luasupport/JSON/jsonlua.c; sourceTree = SOURCE_ROOT; };
		38CF35A8146D35CA0015A33B /* jsonlua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jsonlua.h; path = luasupport/JSON/jsonlua.h; sourceTree = SOURCE_ROOT; };
		38CF35B0146D367B0015A33B /* httplib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = httplib.c; path = luasupport/HTTP/httplib.c; sourceTree = SOURCE_ROOT; };
		38CF35B1146D367B0015A33B /* httplib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = httplib.h; path = luasupport/HTTP/httplib.h; sourceTree = SOURCE_ROOT; };
		38CF35B5146D36BE0015A33B /* postprocessor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = postprocessor.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor.c"; sourceTree = SOURCE_ROOT; };
		38CF35B7146D36D70015A33B /* reason_phrase.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = reason_phrase.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.c"; sourceTree = SOURCE_ROOT; };
		38CF35B8146D36D70015A33B /* reason_phrase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reason_phrase.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.h"; sourceTree = SOURCE_ROOT; };
		38CF35B9146D36D70015A33B /* response.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = response.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.c"; sourceTree = SOURCE_ROOT; };
		38CF35BA146D36D70015A33B /* response.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = response.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.h"; sourceTree = SOURCE_ROOT; };
		38CF35BD146D36F00015A33B /* memorypool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = memorypool.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.c"; sourceTree = SOURCE_ROOT; };
		38CF35BE146D36F00015A33B /* memorypool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memorypool.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.h"; sourceTree = SOURCE_ROOT; };
		38CF35C0146D37070015A33B /* connection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = connection.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.c"; sourceTree = SOURCE_ROOT; };
		38CF35C1146D37070015A33B /* connection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = connection.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.h"; sourceTree = SOURCE_ROOT; };
		38CF35C3146D37180015A33B /* daemon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = daemon.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/daemon.c"; sourceTree = SOURCE_ROOT; };
		38CF35C5146D372E0015A33B /* internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = internal.c; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.c"; sourceTree = SOURCE_ROOT; };
		38CF35C8146D37610015A33B /* microhttpd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = microhttpd.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/include/microhttpd.h"; sourceTree = SOURCE_ROOT; };
		38CF35C9146D37620015A33B /* platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = platform.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/include/platform.h"; sourceTree = SOURCE_ROOT; };
		38CF35CA146D37620015A33B /* plibc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plibc.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/include/plibc.h"; sourceTree = SOURCE_ROOT; };
		38CF35CB146D377C0015A33B /* MHD_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MHD_config.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/MHD_config.h"; sourceTree = SOURCE_ROOT; };
		38CF35CD146D37920015A33B /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = internal.h; path = "luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.h"; sourceTree = SOURCE_ROOT; };
		38E018E1106CE91C00711E4D /* phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = phy.h; sourceTree = "<group>"; };
		38E018E2106CE91C00711E4D /* phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = phy.c; sourceTree = "<group>"; };
		38E018F0106CEA0F00711E4D /* sim_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sim_phy.c; path = Network/Simulation/sim_phy.c; sourceTree = SOURCE_ROOT; };
		38E018F1106CEA0F00711E4D /* sim_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sim_phy.h; path = Network/Simulation/sim_phy.h; sourceTree = SOURCE_ROOT; };
		38E01925106D09B600711E4D /* real_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = real_phy.h; path = Network/Real/real_phy.h; sourceTree = SOURCE_ROOT; };
		38E0192C106D0ACD00711E4D /* real_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = real_phy.c; path = Network/Real/real_phy.c; sourceTree = SOURCE_ROOT; };
		38E01933106D0AD200711E4D /* bsdserial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsdserial.c; path = Network/Real/SERIAL/OSX/bsdserial.c; sourceTree = SOURCE_ROOT; };
197
198
199
200
201
202
203

204
205
206
207
208
209
210
			name = Firenet;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				08FB7796FE84155DC02AAC07 /* main.c */,

				3877B3EE10459B370033A57B /* Node */,
				38851C77104C469000A3B757 /* Lua */,
				380074AD10209122007957AC /* Network */,
			);
			name = Source;
			sourceTree = "<group>";
		};







>







252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
			name = Firenet;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				08FB7796FE84155DC02AAC07 /* main.c */,
				38CF343A146D35850015A33B /* Logging */,
				3877B3EE10459B370033A57B /* Node */,
				38851C77104C469000A3B757 /* Lua */,
				380074AD10209122007957AC /* Network */,
			);
			name = Source;
			sourceTree = "<group>";
		};
380
381
382
383
384
385
386


387
388
389
390
391
392
393
		};
		38B4A3831051562000B79D3C /* luasupport */ = {
			isa = PBXGroup;
			children = (
				38B4A38E105159E900B79D3C /* sysop.h */,
				38B4A3841051562000B79D3C /* sysop.c */,
				38851C8A104C46AC00A3B757 /* linit.c */,


				38B4A4191051906900B79D3C /* timer */,
				38BCE290105559220001F1EC /* firenet */,
				38B354ED105EA9BB00A36F46 /* kdb */,
			);
			path = luasupport;
			sourceTree = SOURCE_ROOT;
		};







>
>







436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
		};
		38B4A3831051562000B79D3C /* luasupport */ = {
			isa = PBXGroup;
			children = (
				38B4A38E105159E900B79D3C /* sysop.h */,
				38B4A3841051562000B79D3C /* sysop.c */,
				38851C8A104C46AC00A3B757 /* linit.c */,
				38CF343F146D35C00015A33B /* HTTP */,
				38CF359E146D35CA0015A33B /* JSON */,
				38B4A4191051906900B79D3C /* timer */,
				38BCE290105559220001F1EC /* firenet */,
				38B354ED105EA9BB00A36F46 /* kdb */,
			);
			path = luasupport;
			sourceTree = SOURCE_ROOT;
		};
408
409
410
411
412
413
414















































































































415
416
417
418
419
420
421
				38BCE292105559220001F1EC /* lua_firenet.h */,
				38BCE293105559220001F1EC /* packet_lua.c */,
				38BCE294105559220001F1EC /* packet_lua.h */,
			);
			name = firenet;
			path = luasupport/firenet;
			sourceTree = SOURCE_ROOT;















































































































		};
		38E018D2106CE8C000711E4D /* Simulation */ = {
			isa = PBXGroup;
			children = (
				38E018F0106CEA0F00711E4D /* sim_phy.c */,
				38E018F1106CEA0F00711E4D /* sim_phy.h */,
			);







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
				38BCE292105559220001F1EC /* lua_firenet.h */,
				38BCE293105559220001F1EC /* packet_lua.c */,
				38BCE294105559220001F1EC /* packet_lua.h */,
			);
			name = firenet;
			path = luasupport/firenet;
			sourceTree = SOURCE_ROOT;
		};
		38CF343A146D35850015A33B /* Logging */ = {
			isa = PBXGroup;
			children = (
				38CF343B146D35850015A33B /* firenetlog.c */,
				38CF343C146D35850015A33B /* firenetlog.h */,
			);
			path = Logging;
			sourceTree = SOURCE_ROOT;
		};
		38CF343F146D35C00015A33B /* HTTP */ = {
			isa = PBXGroup;
			children = (
				38CF35B0146D367B0015A33B /* httplib.c */,
				38CF35B1146D367B0015A33B /* httplib.h */,
				38CF35B3146D367F0015A33B /* libmicrohttp */,
				38CF3440146D35C00015A33B /* COMS */,
				38CF352C146D35C10015A33B /* rest */,
			);
			name = HTTP;
			path = luasupport/HTTP;
			sourceTree = SOURCE_ROOT;
		};
		38CF3440146D35C00015A33B /* COMS */ = {
			isa = PBXGroup;
			children = (
				38CF3441146D35C00015A33B /* restcom.c */,
				38CF3442146D35C00015A33B /* restcom.h */,
				38CF3443146D35C00015A33B /* restcomQ.c */,
				38CF3444146D35C00015A33B /* restcomQ.h */,
			);
			name = COMS;
			path = luasupport/HTTP/COMS;
			sourceTree = SOURCE_ROOT;
		};
		38CF352C146D35C10015A33B /* rest */ = {
			isa = PBXGroup;
			children = (
				38CF352D146D35C10015A33B /* rest.c */,
				38CF352E146D35C10015A33B /* rest.h */,
				38CF352F146D35C10015A33B /* restclient.c */,
				38CF3530146D35C10015A33B /* restclient.h */,
			);
			name = rest;
			path = luasupport/HTTP/rest;
			sourceTree = SOURCE_ROOT;
		};
		38CF359E146D35CA0015A33B /* JSON */ = {
			isa = PBXGroup;
			children = (
				38CF359F146D35CA0015A33B /* JSON */,
				38CF35A7146D35CA0015A33B /* jsonlua.c */,
				38CF35A8146D35CA0015A33B /* jsonlua.h */,
			);
			name = JSON;
			path = luasupport/JSON;
			sourceTree = SOURCE_ROOT;
		};
		38CF359F146D35CA0015A33B /* JSON */ = {
			isa = PBXGroup;
			children = (
				38CF35A0146D35CA0015A33B /* jescape.c */,
				38CF35A1146D35CA0015A33B /* jescape.h */,
				38CF35A2146D35CA0015A33B /* qdj.c */,
				38CF35A3146D35CA0015A33B /* qdj.h */,
				38CF35A4146D35CA0015A33B /* qdj_token.c */,
				38CF35A5146D35CA0015A33B /* qdj_token.h */,
				38CF35A6146D35CA0015A33B /* qdj_util.c */,
			);
			name = JSON;
			path = luasupport/JSON/JSON;
			sourceTree = SOURCE_ROOT;
		};
		38CF35B3146D367F0015A33B /* libmicrohttp */ = {
			isa = PBXGroup;
			children = (
				38CF35C7146D37340015A33B /* Include */,
				38CF35B4146D36930015A33B /* SRC */,
			);
			name = libmicrohttp;
			sourceTree = "<group>";
		};
		38CF35B4146D36930015A33B /* SRC */ = {
			isa = PBXGroup;
			children = (
				38CF35CD146D37920015A33B /* internal.h */,
				38CF35C5146D372E0015A33B /* internal.c */,
				38CF35C3146D37180015A33B /* daemon.c */,
				38CF35C0146D37070015A33B /* connection.c */,
				38CF35C1146D37070015A33B /* connection.h */,
				38CF35BD146D36F00015A33B /* memorypool.c */,
				38CF35BE146D36F00015A33B /* memorypool.h */,
				38CF35B7146D36D70015A33B /* reason_phrase.c */,
				38CF35B8146D36D70015A33B /* reason_phrase.h */,
				38CF35B9146D36D70015A33B /* response.c */,
				38CF35BA146D36D70015A33B /* response.h */,
				38CF35B5146D36BE0015A33B /* postprocessor.c */,
			);
			name = SRC;
			sourceTree = "<group>";
		};
		38CF35C7146D37340015A33B /* Include */ = {
			isa = PBXGroup;
			children = (
				38CF35CB146D377C0015A33B /* MHD_config.h */,
				38CF35C8146D37610015A33B /* microhttpd.h */,
				38CF35C9146D37620015A33B /* platform.h */,
				38CF35CA146D37620015A33B /* plibc.h */,
			);
			name = Include;
			sourceTree = "<group>";
		};
		38E018D2106CE8C000711E4D /* Simulation */ = {
			isa = PBXGroup;
			children = (
				38E018F0106CEA0F00711E4D /* sim_phy.c */,
				38E018F1106CEA0F00711E4D /* sim_phy.h */,
			);
557
558
559
560
561
562
563


















564
565
566
567
568
569
570
				38BCE296105559220001F1EC /* packet_lua.c in Sources */,
				38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */,
				38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */,
				38E018E3106CE91C00711E4D /* phy.c in Sources */,
				38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */,
				38E0192D106D0ACD00711E4D /* real_phy.c in Sources */,
				38E01939106D0AD200711E4D /* bsdserial.c in Sources */,


















			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
				38BCE296105559220001F1EC /* packet_lua.c in Sources */,
				38B354F3105EA9BB00A36F46 /* lua_kbd.c in Sources */,
				38B354F4105EA9BB00A36F46 /* tgkbhit.c in Sources */,
				38E018E3106CE91C00711E4D /* phy.c in Sources */,
				38E018F2106CEA0F00711E4D /* sim_phy.c in Sources */,
				38E0192D106D0ACD00711E4D /* real_phy.c in Sources */,
				38E01939106D0AD200711E4D /* bsdserial.c in Sources */,
				38CF343D146D35850015A33B /* firenetlog.c in Sources */,
				38CF3531146D35C20015A33B /* restcom.c in Sources */,
				38CF3532146D35C20015A33B /* restcomQ.c in Sources */,
				38CF359C146D35C20015A33B /* rest.c in Sources */,
				38CF359D146D35C20015A33B /* restclient.c in Sources */,
				38CF35A9146D35CA0015A33B /* jescape.c in Sources */,
				38CF35AA146D35CA0015A33B /* qdj.c in Sources */,
				38CF35AB146D35CA0015A33B /* qdj_token.c in Sources */,
				38CF35AC146D35CA0015A33B /* qdj_util.c in Sources */,
				38CF35AD146D35CA0015A33B /* jsonlua.c in Sources */,
				38CF35B2146D367B0015A33B /* httplib.c in Sources */,
				38CF35B6146D36BE0015A33B /* postprocessor.c in Sources */,
				38CF35BB146D36D70015A33B /* reason_phrase.c in Sources */,
				38CF35BC146D36D70015A33B /* response.c in Sources */,
				38CF35BF146D36F00015A33B /* memorypool.c in Sources */,
				38CF35C2146D37070015A33B /* connection.c in Sources */,
				38CF35C4146D37180015A33B /* daemon.c in Sources */,
				38CF35C6146D372E0015A33B /* internal.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {
594
595
596
597
598
599
600
601
602
603
604

605
606
607
608
609
610
611
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_VERSION = 4.2;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;

				PREBINDING = NO;
				SDKROOT = macosx10.5;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;







|



>







781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_VERSION = com.apple.compilers.llvmgcc42;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;
				OTHER_CFLAGS = "-DBSD_VERSION";
				PREBINDING = NO;
				SDKROOT = macosx10.5;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;

Changes to Hardware/.DS_Store.

cannot compute difference between binary files

Changes to Hardware/Board/Firenet/.DS_Store.

cannot compute difference between binary files

Changes to Hardware/Board/Firenet/Firenet.brd.

cannot compute difference between binary files

Changes to Hardware/Board/Firenet/Firenet.pro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
EAGLE AutoRouter Statistics:

Job           : /Users/jschimpf/Public/Firenet/Hardware/Board/Firenet/Firenet.brd

Start at      : 12:18:46 (09/03/2010)
End at        : 12:18:47 (09/03/2010)
Elapsed time  : 00:00:00

Signals       :    41   RoutingGrid: 50 mil  Layers: 2
Connections   :   118   predefined:  116 ( 22 Vias )

Router memory :   27360

Passname          :    Busses     Route Optimize1 Optimize2 Optimize3 Optimize4

Time per pass     :  00:00:00  00:00:00  00:00:00  00:00:00  00:00:00  00:00:00
Number of Ripups  :         0         0         0         0         0         0
max. Level        :         0         0         0         0         0         0
max. Total        :         0         0         0         0         0         0

Routed            :         0         2         2         2         2         2
Vias              :         0         1         0         0         0         0
Resolution        :    98.3 %   100.0 %   100.0 %   100.0 %   100.0 %   100.0 %

Final             : 99.2% finished




|
|
|

|
|

|



|
|
|
|

|
|
|

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
EAGLE AutoRouter Statistics:

Job           : /Users/jschimpf/Public/Firenet/Hardware/Board/Firenet/Firenet.brd

Start at      : 14:05:33 (26/06/2014)
End at        : 14:05:34 (26/06/2014)
Elapsed time  : 00:00:01

Signals       :    45   RoutingGrid: 50 mil  Layers: 2
Connections   :   126   predefined:  34 ( 0 Vias )

Router memory :   49536

Passname          :    Busses     Route Optimize1 Optimize2 Optimize3 Optimize4

Time per pass     :  00:00:00  00:00:00  00:00:00  00:00:01  00:00:00  00:00:00
Number of Ripups  :         0         5         0         0         0         0
max. Level        :         0         1         0         0         0         0
max. Total        :         0         2         0         0         0         0

Routed            :        10        92        92        92        92        92
Vias              :         0        99        54        50        43        38
Resolution        :    34.9 %   100.0 %   100.0 %   100.0 %   100.0 %   100.0 %

Final             : 96.0% finished. Polygons may have fallen apart.

Changes to Hardware/Board/Firenet/Firenet.sch.

cannot compute difference between binary files

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/LilyPad-Wearables.lbr.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.3">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="yes" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="yes" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="yes" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="yes" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="yes" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="yes" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="yes" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="yes" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="yes" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="yes" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="yes" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="yes" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="yes" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="yes" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="16" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="yes" active="yes"/>
<layer number="51" name="tDocu" color="14" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="yes" active="yes"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="7" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="no"/>
<layer number="201" name="201bmp" color="2" fill="1" visible="no" active="no"/>
<layer number="202" name="202bmp" color="3" fill="1" visible="no" active="no"/>
<layer number="203" name="203bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<library>
<packages>
<package name="PETAL-NOHOLE">
<polygon width="0.2032" layer="1">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
<polygon width="0.2032" layer="29">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
</package>
<package name="BUTTONHOLE-SM">
<pad name="P$1" x="0" y="0" drill="1.6"/>
<pad name="P$2" x="2.54" y="0" drill="1.6"/>
<smd name="P$3" x="1.27" y="1.27" dx="1.27" dy="0.635" layer="1" rot="R90"/>
<smd name="P$4" x="1.27" y="1.27" dx="1.27" dy="0.635" layer="16" rot="R90"/>
<polygon width="0.127" layer="1">
<vertex x="0" y="1.27"/>
<vertex x="2.54" y="1.27" curve="-90"/>
<vertex x="3.81" y="0" curve="-90"/>
<vertex x="2.54" y="-1.27"/>
<vertex x="0" y="-1.27" curve="-90"/>
<vertex x="-1.27" y="0" curve="-90"/>
</polygon>
<polygon width="0.127" layer="16">
<vertex x="0" y="1.27"/>
<vertex x="2.54" y="1.27" curve="-180"/>
<vertex x="2.54" y="-1.27"/>
<vertex x="0" y="-1.27" curve="-180"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="1.27"/>
<vertex x="2.54" y="1.27" curve="-180"/>
<vertex x="2.54" y="-1.27"/>
<vertex x="0" y="-1.27" curve="-180"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0" y="1.27"/>
<vertex x="2.54" y="1.27" curve="-180"/>
<vertex x="2.54" y="-1.27"/>
<vertex x="0" y="-1.27" curve="-180"/>
</polygon>
<polygon width="0.127" layer="41">
<vertex x="0" y="0.762" curve="90"/>
<vertex x="-0.762" y="0" curve="90"/>
<vertex x="0" y="-0.762" curve="90"/>
<vertex x="0.762" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="41">
<vertex x="2.54" y="0.762" curve="90"/>
<vertex x="1.778" y="0" curve="90"/>
<vertex x="2.54" y="-0.762" curve="90"/>
<vertex x="3.302" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="42">
<vertex x="0" y="0.762" curve="90"/>
<vertex x="-0.762" y="0" curve="90"/>
<vertex x="0" y="-0.762" curve="90"/>
<vertex x="0.762" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="42">
<vertex x="2.54" y="0.762" curve="90"/>
<vertex x="1.778" y="0" curve="90"/>
<vertex x="2.54" y="-0.762" curve="90"/>
<vertex x="3.302" y="0" curve="90"/>
</polygon>
</package>
<package name="BUTTONHOLE">
<pad name="1" x="0" y="0" drill="2.2" diameter="3.81"/>
<pad name="P$2" x="5.08" y="0" drill="2.2" diameter="3.81"/>
<smd name="P$1" x="2.54" y="1.905" dx="1.27" dy="0.635" layer="1" rot="R90"/>
<smd name="P$3" x="2.54" y="-1.905" dx="1.27" dy="0.635" layer="1" rot="R90"/>
<polygon width="0.127" layer="29">
<vertex x="0" y="1.905"/>
<vertex x="5.08" y="1.905" curve="-180"/>
<vertex x="5.08" y="-1.905"/>
<vertex x="0" y="-1.905" curve="-180"/>
</polygon>
<polygon width="0.127" layer="1">
<vertex x="0" y="1.905"/>
<vertex x="5.08" y="1.905" curve="-180"/>
<vertex x="5.08" y="-1.905"/>
<vertex x="0" y="-1.905" curve="-180"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0" y="1.905"/>
<vertex x="5.08" y="1.905" curve="-180"/>
<vertex x="5.08" y="-1.905"/>
<vertex x="0" y="-1.905" curve="-180"/>
</polygon>
<polygon width="0.127" layer="16">
<vertex x="0" y="1.905"/>
<vertex x="5.08" y="1.905" curve="-180"/>
<vertex x="5.08" y="-1.905"/>
<vertex x="0" y="-1.905" curve="-180"/>
</polygon>
<polygon width="0.127" layer="41">
<vertex x="0" y="1.27" curve="90"/>
<vertex x="-1.27" y="0" curve="90"/>
<vertex x="0" y="-1.27" curve="90"/>
<vertex x="1.27" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="41">
<vertex x="5.08" y="1.27" curve="90"/>
<vertex x="3.81" y="0" curve="90"/>
<vertex x="5.08" y="-1.27" curve="90"/>
<vertex x="6.35" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="42">
<vertex x="0" y="1.27" curve="90"/>
<vertex x="-1.27" y="0" curve="90"/>
<vertex x="0" y="-1.27" curve="90"/>
<vertex x="1.27" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="42">
<vertex x="5.08" y="1.27" curve="90"/>
<vertex x="3.81" y="0" curve="90"/>
<vertex x="5.08" y="-1.27" curve="90"/>
<vertex x="6.35" y="0" curve="90"/>
</polygon>
</package>
<package name="LOGO-LILYPAD">
<wire x1="1.41" y1="-0.965" x2="1.41" y2="1.135" width="0.2032" layer="21"/>
<wire x1="1.41" y1="1.135" x2="2.01" y2="1.635" width="0.2032" layer="21" curve="-90"/>
<wire x1="2.01" y1="1.635" x2="2.61" y2="1.135" width="0.2032" layer="21" curve="-89.980905"/>
<wire x1="2.61" y1="1.135" x2="2.61" y2="0.935" width="0.2032" layer="21"/>
<wire x1="2.61" y1="0.935" x2="2.11" y2="0.485" width="0.2032" layer="21" curve="-89.977086"/>
<wire x1="2.11" y1="0.485" x2="1.81" y2="0.485" width="0.2032" layer="21"/>
<wire x1="2.86" y1="-0.565" x2="2.56" y2="-0.965" width="0.2032" layer="21" curve="-90"/>
<wire x1="2.56" y1="-0.965" x2="2.36" y2="-0.965" width="0.2032" layer="21"/>
<wire x1="2.36" y1="-0.965" x2="1.96" y2="-0.465" width="0.2032" layer="21" curve="-90"/>
<wire x1="1.96" y1="-0.465" x2="2.36" y2="0.035" width="0.2032" layer="21" curve="-90"/>
<wire x1="2.36" y1="0.035" x2="2.46" y2="0.035" width="0.2032" layer="21"/>
<wire x1="2.46" y1="0.035" x2="2.86" y2="-0.365" width="0.2032" layer="21" curve="-90"/>
<wire x1="2.86" y1="-0.365" x2="2.86" y2="-0.565" width="0.2032" layer="21"/>
<wire x1="2.86" y1="-0.565" x2="3.11" y2="-0.965" width="0.2032" layer="21" curve="90"/>
<wire x1="3.11" y1="-0.965" x2="3.46" y2="-0.765" width="0.2032" layer="21" curve="90"/>
<wire x1="3.46" y1="-0.765" x2="3.46" y2="-0.715" width="0.2032" layer="21"/>
<wire x1="3.46" y1="-0.715" x2="3.46" y2="-0.465" width="0.2032" layer="21"/>
<wire x1="3.46" y1="-0.465" x2="3.91" y2="0.035" width="0.2032" layer="21" curve="-90"/>
<wire x1="3.91" y1="0.035" x2="4.36" y2="-0.515" width="0.2032" layer="21" curve="-90"/>
<wire x1="4.36" y1="-0.515" x2="4.36" y2="-0.715" width="0.2032" layer="21" curve="-28.072487"/>
<wire x1="4.36" y1="-0.715" x2="4.06" y2="-1.015" width="0.2032" layer="21" curve="-61.927513"/>
<wire x1="4.06" y1="-1.015" x2="3.46" y2="-0.715" width="0.2032" layer="21" curve="-90"/>
<wire x1="4.36" y1="-0.715" x2="4.36" y2="-0.815" width="0.2032" layer="21"/>
<wire x1="4.36" y1="-0.815" x2="4.56" y2="-1.015" width="0.2032" layer="21" curve="90"/>
<wire x1="4.56" y1="-1.015" x2="4.76" y2="-0.815" width="0.2032" layer="21" curve="90"/>
<wire x1="4.36" y1="-0.615" x2="4.36" y2="1.385" width="0.2032" layer="21"/>
<wire x1="-2.14" y1="0.235" x2="-2.14" y2="0.285" width="0.2032" layer="21"/>
<wire x1="-2.94" y1="0.685" x2="-4.24" y2="1.985" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.94" y1="0.685" x2="-2.79" y2="0.685" width="0.2032" layer="21"/>
<wire x1="-2.79" y1="0.685" x2="-2.09" y2="1.335" width="0.2032" layer="21" curve="90"/>
<wire x1="-2.39" y1="1.635" x2="-2.09" y2="1.335" width="0.2032" layer="21" curve="-90"/>
<wire x1="-4.39" y1="0.035" x2="-3.44" y2="-0.565" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.49" y1="1.635" x2="-2.39" y2="1.635" width="0.2032" layer="21"/>
<wire x1="-3.19" y1="0.935" x2="-2.49" y2="1.635" width="0.2032" layer="21" curve="-90"/>
<wire x1="-4.84" y1="-0.565" x2="-4.39" y2="0.035" width="0.2032" layer="21" curve="-90"/>
<wire x1="-3.19" y1="0.235" x2="-3.19" y2="0.935" width="0.2032" layer="21"/>
<wire x1="-4.39" y1="-0.965" x2="-3.19" y2="0.235" width="0.2032" layer="21" curve="90"/>
<wire x1="-4.39" y1="-0.965" x2="-4.84" y2="-0.565" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.14" y1="-0.515" x2="-3.19" y2="-0.915" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.14" y1="-0.365" x2="-2.14" y2="-0.065" width="0.2032" layer="21"/>
<wire x1="-2.14" y1="-0.365" x2="-2.14" y2="-0.515" width="0.2032" layer="21"/>
<wire x1="-1.19" y1="-0.265" x2="-1.19" y2="1.385" width="0.2032" layer="21"/>
<wire x1="-1.69" y1="-0.965" x2="-2.14" y2="-0.365" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.19" y1="-0.415" x2="-1.69" y2="-0.965" width="0.2032" layer="21" curve="-81.226126"/>
<wire x1="-1.19" y1="-0.415" x2="-1.19" y2="-0.265" width="0.2032" layer="21" curve="8.79831"/>
<wire x1="-1.19" y1="-0.465" x2="-1.19" y2="-0.415" width="0.2032" layer="21"/>
<wire x1="-0.69" y1="-0.965" x2="-1.19" y2="-0.465" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.19" y1="-0.465" x2="-0.69" y2="-0.965" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.19" y1="-0.465" x2="-0.19" y2="0.135" width="0.2032" layer="21"/>
<wire x1="0.31" y1="-0.965" x2="-0.19" y2="-0.465" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.29" y1="-1.465" x2="1.11" y2="-2.665" width="0.2032" layer="21" curve="-90"/>
<wire x1="0.81" y1="-0.465" x2="0.31" y2="-0.965" width="0.2032" layer="21" curve="-90"/>
<wire x1="0.81" y1="-0.465" x2="0.81" y2="0.135" width="0.2032" layer="21"/>
<wire x1="0.81" y1="-1.265" x2="0.81" y2="-0.465" width="0.2032" layer="21"/>
<wire x1="-0.49" y1="-1.465" x2="-0.29" y2="-1.465" width="0.2032" layer="21"/>
<wire x1="-1.09" y1="-2.065" x2="-0.49" y2="-1.465" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.49" y1="-2.565" x2="0.81" y2="-1.265" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.59" y1="-2.565" x2="-0.49" y2="-2.565" width="0.2032" layer="21"/>
<wire x1="-0.59" y1="-2.565" x2="-1.09" y2="-2.065" width="0.2032" layer="21" curve="-90"/>
<wire x1="-3.44" y1="-0.565" x2="-2.84" y2="-0.965" width="0.2032" layer="21" curve="90"/>
</package>
<package name="LOGO-A">
<wire x1="0.73" y1="1.1" x2="2.18" y2="0.15" width="0.2032" layer="21" curve="90"/>
<wire x1="4.13" y1="-1" x2="4.38" y2="-0.75" width="0.2032" layer="21" curve="90"/>
<wire x1="4.38" y1="-0.75" x2="4.38" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="4.38" y1="-0.7" x2="4.38" y2="-0.45" width="0.2032" layer="21"/>
<wire x1="4.38" y1="-0.45" x2="4.83" y2="0" width="0.2032" layer="21" curve="-90"/>
<wire x1="4.83" y1="0" x2="5.28" y2="-0.5" width="0.2032" layer="21" curve="-90"/>
<wire x1="5.28" y1="-0.5" x2="5.28" y2="-0.7" width="0.2032" layer="21" curve="-28.072487"/>
<wire x1="5.28" y1="-0.7" x2="4.98" y2="-1" width="0.2032" layer="21" curve="-61.927513"/>
<wire x1="4.98" y1="-1" x2="4.38" y2="-0.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="5.28" y1="-0.7" x2="5.28" y2="-0.8" width="0.2032" layer="21"/>
<wire x1="5.28" y1="-0.8" x2="5.58" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="5.58" y1="-1" x2="5.78" y2="-0.8" width="0.2032" layer="21" curve="90"/>
<wire x1="5.28" y1="-0.6" x2="5.28" y2="1.4" width="0.2032" layer="21"/>
<wire x1="9.13" y1="-0.6" x2="9.53" y2="-0.1" width="0.2032" layer="21" curve="-90"/>
<wire x1="9.53" y1="-0.1" x2="9.63" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="10.03" y1="-0.5" x2="9.63" y2="-0.1" width="0.2032" layer="21" curve="90"/>
<wire x1="10.03" y1="-0.6" x2="10.03" y2="-0.5" width="0.2032" layer="21"/>
<wire x1="9.63" y1="-1.05" x2="10.03" y2="-0.6" width="0.2032" layer="21" curve="90"/>
<wire x1="9.53" y1="-1.05" x2="9.63" y2="-1.05" width="0.2032" layer="21"/>
<wire x1="9.53" y1="-1.05" x2="9.13" y2="-0.6" width="0.2032" layer="21" curve="-90"/>
<wire x1="10.03" y1="-0.6" x2="9.38" y2="-0.15" width="0.2032" layer="21" curve="-90"/>
<wire x1="10.03" y1="-0.6" x2="9.98" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="9.98" y1="-0.6" x2="10.43" y2="-0.3" width="0.2032" layer="21" curve="90"/>
<wire x1="10.43" y1="-0.3" x2="10.43" y2="-0.15" width="0.2032" layer="21"/>
<wire x1="8.93" y1="-1" x2="9.13" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="8.78" y1="-1" x2="8.93" y2="-1" width="0.2032" layer="21"/>
<wire x1="8.63" y1="-0.75" x2="8.78" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="8.63" y1="-0.35" x2="8.63" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="8.33" y1="-0.1" x2="8.63" y2="-0.35" width="0.2032" layer="21" curve="-90"/>
<wire x1="8.18" y1="-0.1" x2="8.33" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="7.88" y1="-0.4" x2="8.18" y2="-0.1" width="0.2032" layer="21" curve="-90"/>
<wire x1="7.88" y1="-0.7" x2="7.88" y2="0" width="0.2032" layer="21"/>
<wire x1="7.88" y1="-0.7" x2="7.88" y2="-0.4" width="0.2032" layer="21"/>
<wire x1="7.58" y1="-1" x2="7.88" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="7.18" y1="-0.6" x2="7.58" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="7.18" y1="-0.55" x2="7.18" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="7.18" y1="-0.55" x2="7.18" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="7.18" y1="-0.7" x2="7.18" y2="-0.55" width="0.2032" layer="21"/>
<wire x1="6.88" y1="-1" x2="7.18" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="6.58" y1="-0.6" x2="6.58" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="6.58" y1="-0.6" x2="6.88" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="5.78" y1="-0.7" x2="5.78" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="6.23" y1="-1" x2="5.78" y2="-0.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="6.23" y1="-1" x2="6.58" y2="-0.6" width="0.2032" layer="21" curve="90"/>
<wire x1="3.63" y1="-0.2" x2="3.83" y2="-0.2" width="0.2032" layer="21"/>
<wire x1="3.03" y1="0.3" x2="3.63" y2="-0.2" width="0.2032" layer="21" curve="89.980905"/>
<wire x1="3.03" y1="-0.7" x2="3.03" y2="0.3" width="0.2032" layer="21"/>
<wire x1="2.63" y1="-1" x2="3.03" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="2.23" y1="-0.6" x2="2.63" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="2.13" y1="1" x2="2.23" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="1.53" y1="1.6" x2="2.13" y2="1" width="0.2032" layer="21" curve="-90"/>
<wire x1="1.43" y1="1.6" x2="1.53" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.43" y1="0.3" x2="1.43" y2="1.6" width="0.2032" layer="21"/>
<wire x1="-0.57" y1="-1.85" x2="1.43" y2="0.3" width="0.2032" layer="21" curve="90"/>
<wire x1="3.83" y1="-0.2" x2="3.83" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="3.83" y1="-0.75" x2="4.08" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="7.18" y1="0.25" x2="7.18" y2="0.2" width="0.2032" layer="21"/>
</package>
<package name="LOGO-LPA">
<wire x1="-3.77" y1="-1" x2="-3.77" y2="1.1" width="0.2032" layer="21"/>
<wire x1="-3.77" y1="1.1" x2="-3.17" y2="1.6" width="0.2032" layer="21" curve="-90"/>
<wire x1="-3.17" y1="1.6" x2="-2.57" y2="1.1" width="0.2032" layer="21" curve="-89.980905"/>
<wire x1="-2.57" y1="1.1" x2="-2.57" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-2.57" y1="0.9" x2="-3.07" y2="0.45" width="0.2032" layer="21" curve="-89.977086"/>
<wire x1="-3.07" y1="0.45" x2="-3.37" y2="0.45" width="0.2032" layer="21"/>
<wire x1="-2.32" y1="-0.6" x2="-2.62" y2="-1" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.62" y1="-1" x2="-2.82" y2="-1" width="0.2032" layer="21"/>
<wire x1="-2.82" y1="-1" x2="-3.22" y2="-0.5" width="0.2032" layer="21" curve="-90"/>
<wire x1="-3.22" y1="-0.5" x2="-2.82" y2="0" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.82" y1="0" x2="-2.72" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.72" y1="0" x2="-2.32" y2="-0.4" width="0.2032" layer="21" curve="-90"/>
<wire x1="-2.32" y1="-0.4" x2="-2.32" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="-2.32" y1="-0.6" x2="-2.07" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="-2.07" y1="-1" x2="-1.72" y2="-0.8" width="0.2032" layer="21" curve="90"/>
<wire x1="-1.72" y1="-0.8" x2="-1.72" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="-1.72" y1="-0.75" x2="-1.72" y2="-0.5" width="0.2032" layer="21"/>
<wire x1="-1.72" y1="-0.5" x2="-1.27" y2="0" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.27" y1="0" x2="-0.82" y2="-0.55" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.82" y1="-0.55" x2="-0.82" y2="-0.75" width="0.2032" layer="21" curve="-28.072487"/>
<wire x1="-0.82" y1="-0.75" x2="-1.12" y2="-1.05" width="0.2032" layer="21" curve="-61.927513"/>
<wire x1="-1.12" y1="-1.05" x2="-1.72" y2="-0.75" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.82" y1="-0.75" x2="-0.82" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="-0.82" y1="-0.85" x2="-0.62" y2="-1.05" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.62" y1="-1.05" x2="-0.42" y2="-0.85" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.82" y1="-0.65" x2="-0.82" y2="1.35" width="0.2032" layer="21"/>
<wire x1="0.73" y1="1.1" x2="2.18" y2="0.15" width="0.2032" layer="21" curve="90"/>
<wire x1="4.13" y1="-1" x2="4.38" y2="-0.75" width="0.2032" layer="21" curve="90"/>
<wire x1="4.38" y1="-0.75" x2="4.38" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="4.38" y1="-0.7" x2="4.38" y2="-0.45" width="0.2032" layer="21"/>
<wire x1="4.38" y1="-0.45" x2="4.83" y2="0" width="0.2032" layer="21" curve="-90"/>
<wire x1="4.83" y1="0" x2="5.28" y2="-0.5" width="0.2032" layer="21" curve="-90"/>
<wire x1="5.28" y1="-0.5" x2="5.28" y2="-0.7" width="0.2032" layer="21" curve="-28.072487"/>
<wire x1="5.28" y1="-0.7" x2="4.98" y2="-1" width="0.2032" layer="21" curve="-61.927513"/>
<wire x1="4.98" y1="-1" x2="4.38" y2="-0.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="5.28" y1="-0.7" x2="5.28" y2="-0.8" width="0.2032" layer="21"/>
<wire x1="5.28" y1="-0.8" x2="5.58" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="5.58" y1="-1" x2="5.78" y2="-0.8" width="0.2032" layer="21" curve="90"/>
<wire x1="5.28" y1="-0.6" x2="5.28" y2="1.4" width="0.2032" layer="21"/>
<wire x1="9.13" y1="-0.6" x2="9.53" y2="-0.1" width="0.2032" layer="21" curve="-90"/>
<wire x1="9.53" y1="-0.1" x2="9.63" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="10.03" y1="-0.5" x2="9.63" y2="-0.1" width="0.2032" layer="21" curve="90"/>
<wire x1="10.03" y1="-0.6" x2="10.03" y2="-0.5" width="0.2032" layer="21"/>
<wire x1="9.63" y1="-1.05" x2="10.03" y2="-0.6" width="0.2032" layer="21" curve="90"/>
<wire x1="9.53" y1="-1.05" x2="9.63" y2="-1.05" width="0.2032" layer="21"/>
<wire x1="9.53" y1="-1.05" x2="9.13" y2="-0.6" width="0.2032" layer="21" curve="-90"/>
<wire x1="10.03" y1="-0.6" x2="9.38" y2="-0.15" width="0.2032" layer="21" curve="-90"/>
<wire x1="10.03" y1="-0.6" x2="9.98" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="9.98" y1="-0.6" x2="10.43" y2="-0.3" width="0.2032" layer="21" curve="90"/>
<wire x1="10.43" y1="-0.3" x2="10.43" y2="-0.15" width="0.2032" layer="21"/>
<wire x1="8.93" y1="-1" x2="9.13" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="8.78" y1="-1" x2="8.93" y2="-1" width="0.2032" layer="21"/>
<wire x1="8.63" y1="-0.75" x2="8.78" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="8.63" y1="-0.35" x2="8.63" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="8.33" y1="-0.1" x2="8.63" y2="-0.35" width="0.2032" layer="21" curve="-90"/>
<wire x1="8.18" y1="-0.1" x2="8.33" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="7.88" y1="-0.4" x2="8.18" y2="-0.1" width="0.2032" layer="21" curve="-90"/>
<wire x1="7.88" y1="-0.7" x2="7.88" y2="0" width="0.2032" layer="21"/>
<wire x1="7.88" y1="-0.7" x2="7.88" y2="-0.4" width="0.2032" layer="21"/>
<wire x1="7.58" y1="-1" x2="7.88" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="7.18" y1="-0.6" x2="7.58" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="7.18" y1="-0.55" x2="7.18" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="7.18" y1="-0.55" x2="7.18" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="7.18" y1="-0.7" x2="7.18" y2="-0.55" width="0.2032" layer="21"/>
<wire x1="6.88" y1="-1" x2="7.18" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="6.58" y1="-0.6" x2="6.58" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="6.58" y1="-0.6" x2="6.88" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="5.78" y1="-0.7" x2="5.78" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="6.23" y1="-1" x2="5.78" y2="-0.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="6.23" y1="-1" x2="6.58" y2="-0.6" width="0.2032" layer="21" curve="90"/>
<wire x1="3.63" y1="-0.2" x2="3.83" y2="-0.2" width="0.2032" layer="21"/>
<wire x1="3.03" y1="0.3" x2="3.63" y2="-0.2" width="0.2032" layer="21" curve="89.980905"/>
<wire x1="3.03" y1="-0.7" x2="3.03" y2="0.3" width="0.2032" layer="21"/>
<wire x1="2.63" y1="-1" x2="3.03" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="2.23" y1="-0.6" x2="2.63" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="2.13" y1="1" x2="2.23" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="1.53" y1="1.6" x2="2.13" y2="1" width="0.2032" layer="21" curve="-90"/>
<wire x1="1.43" y1="1.6" x2="1.53" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.43" y1="0.3" x2="1.43" y2="1.6" width="0.2032" layer="21"/>
<wire x1="-0.57" y1="-1.85" x2="1.43" y2="0.3" width="0.2032" layer="21" curve="90"/>
<wire x1="3.83" y1="-0.2" x2="3.83" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="3.83" y1="-0.75" x2="4.08" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="-7.32" y1="0.2" x2="-7.32" y2="0.25" width="0.2032" layer="21"/>
<wire x1="7.18" y1="0.25" x2="7.18" y2="0.2" width="0.2032" layer="21"/>
<wire x1="-8.12" y1="0.65" x2="-9.42" y2="1.95" width="0.2032" layer="21" curve="-90"/>
<wire x1="-8.12" y1="0.65" x2="-7.97" y2="0.65" width="0.2032" layer="21"/>
<wire x1="-7.97" y1="0.65" x2="-7.27" y2="1.3" width="0.2032" layer="21" curve="90"/>
<wire x1="-7.57" y1="1.6" x2="-7.27" y2="1.3" width="0.2032" layer="21" curve="-90"/>
<wire x1="-9.57" y1="0" x2="-8.62" y2="-0.6" width="0.2032" layer="21" curve="-90"/>
<wire x1="-7.67" y1="1.6" x2="-7.57" y2="1.6" width="0.2032" layer="21"/>
<wire x1="-8.37" y1="0.9" x2="-7.67" y2="1.6" width="0.2032" layer="21" curve="-90"/>
<wire x1="-10.02" y1="-0.6" x2="-9.57" y2="0" width="0.2032" layer="21" curve="-90"/>
<wire x1="-8.37" y1="0.2" x2="-8.37" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-9.57" y1="-1" x2="-8.37" y2="0.2" width="0.2032" layer="21" curve="90"/>
<wire x1="-9.57" y1="-1" x2="-10.02" y2="-0.6" width="0.2032" layer="21" curve="-90"/>
<wire x1="-7.32" y1="-0.55" x2="-8.37" y2="-0.95" width="0.2032" layer="21" curve="-90"/>
<wire x1="-7.32" y1="-0.4" x2="-7.32" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="-7.32" y1="-0.4" x2="-7.32" y2="-0.55" width="0.2032" layer="21"/>
<wire x1="-6.37" y1="-0.3" x2="-6.37" y2="1.35" width="0.2032" layer="21"/>
<wire x1="-6.87" y1="-1" x2="-7.32" y2="-0.4" width="0.2032" layer="21" curve="-90"/>
<wire x1="-6.37" y1="-0.45" x2="-6.87" y2="-1" width="0.2032" layer="21" curve="-81.226126"/>
<wire x1="-6.37" y1="-0.45" x2="-6.37" y2="-0.3" width="0.2032" layer="21" curve="8.79831"/>
<wire x1="-6.37" y1="-0.5" x2="-6.37" y2="-0.45" width="0.2032" layer="21"/>
<wire x1="-5.87" y1="-1" x2="-6.37" y2="-0.5" width="0.2032" layer="21" curve="-90"/>
<wire x1="-5.37" y1="-0.5" x2="-5.87" y2="-1" width="0.2032" layer="21" curve="-90"/>
<wire x1="-5.37" y1="-0.5" x2="-5.37" y2="0.1" width="0.2032" layer="21"/>
<wire x1="-4.87" y1="-1" x2="-5.37" y2="-0.5" width="0.2032" layer="21" curve="-90"/>
<wire x1="-5.47" y1="-1.5" x2="-4.07" y2="-2.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="-4.37" y1="-0.5" x2="-4.87" y2="-1" width="0.2032" layer="21" curve="-90"/>
<wire x1="-4.37" y1="-0.5" x2="-4.37" y2="0.1" width="0.2032" layer="21"/>
<wire x1="-4.37" y1="-1.3" x2="-4.37" y2="-0.5" width="0.2032" layer="21"/>
<wire x1="-5.67" y1="-1.5" x2="-5.47" y2="-1.5" width="0.2032" layer="21"/>
<wire x1="-6.27" y1="-2.1" x2="-5.67" y2="-1.5" width="0.2032" layer="21" curve="-90"/>
<wire x1="-5.67" y1="-2.6" x2="-4.37" y2="-1.3" width="0.2032" layer="21" curve="90"/>
<wire x1="-5.77" y1="-2.6" x2="-5.67" y2="-2.6" width="0.2032" layer="21"/>
<wire x1="-5.77" y1="-2.6" x2="-6.27" y2="-2.1" width="0.2032" layer="21" curve="-90"/>
<wire x1="-8.62" y1="-0.6" x2="-8.02" y2="-1" width="0.2032" layer="21" curve="90"/>
</package>
<package name="LOGO-L">
<wire x1="-0.7732" y1="1.6244" x2="0.5268" y2="0.3244" width="0.2032" layer="21" curve="90"/>
<wire x1="0.5268" y1="0.3244" x2="0.7268" y2="0.3244" width="0.2032" layer="21"/>
<wire x1="0.7268" y1="0.3244" x2="1.3768" y2="0.9744" width="0.2032" layer="21" curve="90"/>
<wire x1="1.3768" y1="0.9744" x2="1.3768" y2="1.0244" width="0.2032" layer="21"/>
<wire x1="1.3768" y1="1.0244" x2="1.1268" y2="1.2744" width="0.2032" layer="21" curve="90"/>
<wire x1="1.1268" y1="1.2744" x2="1.0268" y2="1.2744" width="0.2032" layer="21"/>
<wire x1="1.0268" y1="1.2744" x2="0.2768" y2="0.5244" width="0.2032" layer="21" curve="90"/>
<wire x1="0.2768" y1="0.5244" x2="0.2768" y2="-0.1256" width="0.2032" layer="21"/>
<wire x1="0.2768" y1="-0.1256" x2="-0.9232" y2="-1.3256" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.9232" y1="-1.3256" x2="-1.3732" y2="-0.8756" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.3732" y1="-0.8756" x2="-0.8232" y2="-0.3256" width="0.2032" layer="21" curve="-90"/>
<wire x1="-0.8232" y1="-0.3256" x2="-0.7232" y2="-0.3256" width="0.2032" layer="21"/>
<wire x1="-0.7232" y1="-0.3256" x2="0.0268" y2="-1.0756" width="0.2032" layer="21" curve="-90"/>
<wire x1="0.0268" y1="-1.0756" x2="0.8768" y2="-1.5756" width="0.2032" layer="21" curve="90"/>
</package>
<package name="PETAL-LONG-1">
<wire x1="0" y1="0" x2="2.7" y2="0" width="0.01" layer="49"/>
<circle x="5" y="0" radius="2.3" width="0.01" layer="49"/>
<pad name="1" x="0.03" y="0" drill="2.794" diameter="4.064"/>
<polygon width="0.2032" layer="1" spacing="0.4064">
<vertex x="3.6" y="-1.9" curve="-110.088851"/>
<vertex x="3.6" y="1.9"/>
<vertex x="-0.4" y="2.5" curve="89.995593"/>
<vertex x="-3" y="0" curve="89.991186"/>
<vertex x="-0.4" y="-2.5"/>
</polygon>
<polygon width="0.2032" layer="29" spacing="0.4064">
<vertex x="3.6" y="-1.9" curve="-110.088851"/>
<vertex x="3.6" y="1.9"/>
<vertex x="-0.4" y="2.5" curve="89.995593"/>
<vertex x="-3" y="0" curve="89.991186"/>
<vertex x="-0.4" y="-2.5"/>
</polygon>
</package>
<package name="PETAL-LONG-2">
<pad name="1" x="0" y="0" drill="2.794" rot="R90"/>
<polygon width="0.2032" layer="1">
<vertex x="-1.27" y="2.255" curve="9.397466"/>
<vertex x="-2.436" y="0.05" curve="89.995576"/>
<vertex x="0" y="-2.54" curve="89.990906"/>
<vertex x="2.406" y="-0.02" curve="12.680383"/>
<vertex x="1.27" y="2.255" curve="154.643527"/>
</polygon>
<polygon width="0.2032" layer="29">
<vertex x="-1.27" y="2.255" curve="9.397466"/>
<vertex x="-2.436" y="0.05" curve="89.995576"/>
<vertex x="0" y="-2.54" curve="89.990906"/>
<vertex x="2.406" y="-0.02" curve="12.680383"/>
<vertex x="1.27" y="2.255" curve="154.643527"/>
</polygon>
</package>
<package name="PETAL-MEDIUM">
<pad name="1" x="0" y="-0.254" drill="2.794"/>
<polygon width="0.127" layer="1">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
</package>
<package name="PETAL-LARGE">
<wire x1="0" y1="3.81" x2="0" y2="1.27" width="1.524" layer="1"/>
<pad name="1" x="0" y="3.556" drill="2.794"/>
<hole x="0" y="3.556" drill="1.5"/>
<polygon width="0.127" layer="1">
<vertex x="0" y="0" curve="90"/>
<vertex x="5.08" y="5.08" curve="-73.73763"/>
<vertex x="-5.08" y="5.08" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="0" curve="90"/>
<vertex x="5.08" y="5.08" curve="-73.73763"/>
<vertex x="-5.08" y="5.08" curve="90"/>
</polygon>
</package>
<package name="PETAL-SMALL">
<pad name="1" x="0" y="0" drill="2.2" rot="R90"/>
<polygon width="0.2032" layer="1">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
<polygon width="0.2032" layer="29">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
</package>
<package name="LED-1206">
<wire x1="0.3" y1="0.7" x2="0.3" y2="0" width="0.2032" layer="21"/>
<wire x1="0.3" y1="0" x2="0.3" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="0.3" y1="0" x2="-0.3" y2="0.6" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="0.6" x2="-0.3" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="-0.6" x2="0.3" y2="0" width="0.2032" layer="21"/>
<smd name="A" x="-1.5" y="0" dx="1.2" dy="1.4" layer="1"/>
<smd name="C" x="1.5" y="0" dx="1.2" dy="1.4" layer="1"/>
<text x="-2.17" y="1.67" size="1.27" layer="25">&gt;NAME</text>
<text x="-2.17" y="-2.74" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="PETAL-SMALL-2SIDE">
<pad name="1" x="0" y="0" drill="2.2" rot="R90"/>
<polygon width="0.2032" layer="1">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
<polygon width="0.2032" layer="29">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
<polygon width="0.2032" layer="30">
<vertex x="2.4" y="0.6" curve="-96.730733"/>
<vertex x="0" y="-2" curve="-96.730733"/>
<vertex x="-2.4" y="0.6" curve="106.260205"/>
</polygon>
<polygon width="0.2032" layer="16">
<vertex x="2.4" y="0.6" curve="-96.730733"/>
<vertex x="0" y="-2" curve="-96.730733"/>
<vertex x="-2.4" y="0.6" curve="106.260205"/>
</polygon>
</package>
<package name="PETAL-NOHOLE-2SIDE">
<polygon width="0.2032" layer="1">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
<polygon width="0.2032" layer="29">
<vertex x="-2.4" y="0.6" curve="96.730733"/>
<vertex x="0" y="-2" curve="96.730733"/>
<vertex x="2.4" y="0.6" curve="-106.260205"/>
</polygon>
<polygon width="0.2032" layer="16">
<vertex x="2.4" y="0.6" curve="-96.730733"/>
<vertex x="0" y="-2" curve="-96.730733"/>
<vertex x="-2.4" y="0.6" curve="106.260205"/>
</polygon>
<polygon width="0.2032" layer="30">
<vertex x="2.4" y="0.6" curve="-96.730733"/>
<vertex x="0" y="-2" curve="-96.730733"/>
<vertex x="-2.4" y="0.6" curve="106.260205"/>
</polygon>
</package>
<package name="PETAL-LARGE-2SIDE">
<wire x1="0" y1="3.81" x2="0" y2="1.27" width="1.524" layer="1"/>
<pad name="1" x="0" y="3.556" drill="2.794"/>
<hole x="0" y="3.556" drill="1.5"/>
<polygon width="0.127" layer="1">
<vertex x="0" y="0" curve="90"/>
<vertex x="5.08" y="5.08" curve="-73.73763"/>
<vertex x="-5.08" y="5.08" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="0" curve="90"/>
<vertex x="5.08" y="5.08" curve="-73.73763"/>
<vertex x="-5.08" y="5.08" curve="90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0" y="0" curve="-90"/>
<vertex x="-5.08" y="5.08" curve="73.73763"/>
<vertex x="5.08" y="5.08" curve="-90"/>
</polygon>
<polygon width="0.127" layer="16">
<vertex x="0" y="0" curve="-90"/>
<vertex x="-5.08" y="5.08" curve="73.73763"/>
<vertex x="5.08" y="5.08" curve="-90"/>
</polygon>
</package>
<package name="PETAL-MEDIUM-2SIDE">
<pad name="1" x="0" y="-0.254" drill="2.794"/>
<polygon width="0.127" layer="1">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="16">
<vertex x="0" y="-3.81" curve="-90"/>
<vertex x="-3.81" y="0" curve="73.739795"/>
<vertex x="3.81" y="0" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0" y="-3.81" curve="-90"/>
<vertex x="-3.81" y="0" curve="73.739795"/>
<vertex x="3.81" y="0" curve="-90"/>
</polygon>
</package>
<package name="PETAL-LONG-1-2SIDE">
<wire x1="0" y1="0" x2="2.7" y2="0" width="0.01" layer="49"/>
<circle x="5" y="0" radius="2.3" width="0.01" layer="49"/>
<pad name="1" x="0.03" y="0" drill="2.794" diameter="4.064"/>
<polygon width="0.2032" layer="1" spacing="0.4064">
<vertex x="3.6" y="-1.9" curve="-110.088851"/>
<vertex x="3.6" y="1.9"/>
<vertex x="-0.4" y="2.5" curve="89.995593"/>
<vertex x="-3" y="0" curve="89.991186"/>
<vertex x="-0.4" y="-2.5"/>
</polygon>
<polygon width="0.2032" layer="29" spacing="0.4064">
<vertex x="3.6" y="-1.9" curve="-110.088851"/>
<vertex x="3.6" y="1.9"/>
<vertex x="-0.4" y="2.5" curve="89.995593"/>
<vertex x="-3" y="0" curve="89.991186"/>
<vertex x="-0.4" y="-2.5"/>
</polygon>
<polygon width="0.2032" layer="30" spacing="0.4064">
<vertex x="3.6" y="1.9" curve="110.088851"/>
<vertex x="3.6" y="-1.9"/>
<vertex x="-0.4" y="-2.5" curve="-89.995593"/>
<vertex x="-3" y="0" curve="-89.991186"/>
<vertex x="-0.4" y="2.5"/>
</polygon>
<polygon width="0.2032" layer="16" spacing="0.4064">
<vertex x="3.6" y="1.9" curve="110.088851"/>
<vertex x="3.6" y="-1.9"/>
<vertex x="-0.4" y="-2.5" curve="-89.995593"/>
<vertex x="-3" y="0" curve="-89.991186"/>
<vertex x="-0.4" y="2.5"/>
</polygon>
</package>
<package name="PETAL-LONG-2-2SIDE">
<pad name="1" x="0" y="0" drill="2.794" rot="R90"/>
<polygon width="0.2032" layer="1">
<vertex x="-1.27" y="2.255" curve="9.397466"/>
<vertex x="-2.436" y="0.05" curve="89.995576"/>
<vertex x="0" y="-2.54" curve="89.990906"/>
<vertex x="2.406" y="-0.02" curve="12.680383"/>
<vertex x="1.27" y="2.255" curve="154.643527"/>
</polygon>
<polygon width="0.2032" layer="29">
<vertex x="-1.27" y="2.255" curve="9.397466"/>
<vertex x="-2.436" y="0.05" curve="89.995576"/>
<vertex x="0" y="-2.54" curve="89.990906"/>
<vertex x="2.406" y="-0.02" curve="12.680383"/>
<vertex x="1.27" y="2.255" curve="154.643527"/>
</polygon>
<polygon width="0.2032" layer="30">
<vertex x="1.27" y="2.255" curve="-12.680383"/>
<vertex x="2.406" y="-0.02" curve="-89.995453"/>
<vertex x="0" y="-2.54" curve="-89.991152"/>
<vertex x="-2.436" y="0.05" curve="9.397466"/>
<vertex x="-1.27" y="2.255" curve="-154.643527"/>
</polygon>
<polygon width="0.2032" layer="16">
<vertex x="1.27" y="2.255" curve="-12.680383"/>
<vertex x="2.406" y="-0.02" curve="-89.995453"/>
<vertex x="0" y="-2.54" curve="-89.991152"/>
<vertex x="-2.436" y="0.05" curve="-9.397466"/>
<vertex x="-1.27" y="2.255" curve="-154.643527"/>
</polygon>
</package>
<package name="LOGO-L-TINY">
<rectangle x1="0.4064" y1="-1.0813" x2="0.4511" y2="-1.0757" layer="21"/>
<rectangle x1="0.3561" y1="-1.0757" x2="0.4844" y2="-1.0701" layer="21"/>
<rectangle x1="0.317" y1="-1.0701" x2="0.5179" y2="-1.0645" layer="21"/>
<rectangle x1="0.3002" y1="-1.0645" x2="0.5458" y2="-1.0589" layer="21"/>
<rectangle x1="0.2779" y1="-1.0589" x2="0.557" y2="-1.0533" layer="21"/>
<rectangle x1="0.2611" y1="-1.0533" x2="0.5682" y2="-1.0477" layer="21"/>
<rectangle x1="0.2443" y1="-1.0477" x2="0.5738" y2="-1.0422" layer="21"/>
<rectangle x1="0.222" y1="-1.0422" x2="0.5794" y2="-1.0366" layer="21"/>
<rectangle x1="0.2108" y1="-1.0366" x2="0.5794" y2="-1.031" layer="21"/>
<rectangle x1="0.1996" y1="-1.031" x2="0.585" y2="-1.0254" layer="21"/>
<rectangle x1="0.1885" y1="-1.0254" x2="0.585" y2="-1.0198" layer="21"/>
<rectangle x1="0.1829" y1="-1.0198" x2="0.5906" y2="-1.0142" layer="21"/>
<rectangle x1="0.1717" y1="-1.0142" x2="0.5906" y2="-1.0086" layer="21"/>
<rectangle x1="0.1605" y1="-1.0086" x2="0.5906" y2="-1.003" layer="21"/>
<rectangle x1="0.1549" y1="-1.003" x2="0.5906" y2="-0.9975" layer="21"/>
<rectangle x1="0.1438" y1="-0.9975" x2="0.5906" y2="-0.9919" layer="21"/>
<rectangle x1="0.1326" y1="-0.9919" x2="0.5906" y2="-0.9863" layer="21"/>
<rectangle x1="0.127" y1="-0.9863" x2="0.5906" y2="-0.9807" layer="21"/>
<rectangle x1="0.1158" y1="-0.9807" x2="0.585" y2="-0.9751" layer="21"/>
<rectangle x1="0.1102" y1="-0.9751" x2="0.585" y2="-0.9695" layer="21"/>
<rectangle x1="0.1046" y1="-0.9695" x2="0.5794" y2="-0.9639" layer="21"/>
<rectangle x1="0.0991" y1="-0.9639" x2="0.5794" y2="-0.9583" layer="21"/>
<rectangle x1="0.0935" y1="-0.9583" x2="0.5738" y2="-0.9528" layer="21"/>
<rectangle x1="0.0879" y1="-0.9528" x2="0.412" y2="-0.9472" layer="21"/>
<rectangle x1="0.4399" y1="-0.9528" x2="0.5682" y2="-0.9472" layer="21"/>
<rectangle x1="0.0823" y1="-0.9472" x2="0.3617" y2="-0.9416" layer="21"/>
<rectangle x1="0.4732" y1="-0.9472" x2="0.557" y2="-0.9416" layer="21"/>
<rectangle x1="0.0767" y1="-0.9416" x2="0.3338" y2="-0.936" layer="21"/>
<rectangle x1="0.5067" y1="-0.9416" x2="0.5458" y2="-0.936" layer="21"/>
<rectangle x1="0.0711" y1="-0.936" x2="0.317" y2="-0.9304" layer="21"/>
<rectangle x1="0.0655" y1="-0.9304" x2="0.3002" y2="-0.9248" layer="21"/>
<rectangle x1="0.0544" y1="-0.9248" x2="0.2779" y2="-0.9192" layer="21"/>
<rectangle x1="0.0488" y1="-0.9192" x2="0.2667" y2="-0.9136" layer="21"/>
<rectangle x1="0.0432" y1="-0.9136" x2="0.2555" y2="-0.908" layer="21"/>
<rectangle x1="-0.6383" y1="-0.908" x2="-0.5433" y2="-0.9025" layer="21"/>
<rectangle x1="0.0376" y1="-0.908" x2="0.2443" y2="-0.9025" layer="21"/>
<rectangle x1="-0.6942" y1="-0.9025" x2="-0.4653" y2="-0.8969" layer="21"/>
<rectangle x1="0.032" y1="-0.9025" x2="0.2388" y2="-0.8969" layer="21"/>
<rectangle x1="-0.7054" y1="-0.8969" x2="-0.443" y2="-0.8913" layer="21"/>
<rectangle x1="0.032" y1="-0.8969" x2="0.2276" y2="-0.8913" layer="21"/>
<rectangle x1="-0.7221" y1="-0.8913" x2="-0.4206" y2="-0.8857" layer="21"/>
<rectangle x1="0.0264" y1="-0.8913" x2="0.2164" y2="-0.8857" layer="21"/>
<rectangle x1="-0.7333" y1="-0.8857" x2="-0.3983" y2="-0.8801" layer="21"/>
<rectangle x1="0.0208" y1="-0.8857" x2="0.2108" y2="-0.8801" layer="21"/>
<rectangle x1="-0.7501" y1="-0.8801" x2="-0.3703" y2="-0.8745" layer="21"/>
<rectangle x1="0.0208" y1="-0.8801" x2="0.1996" y2="-0.8745" layer="21"/>
<rectangle x1="-0.7612" y1="-0.8745" x2="-0.348" y2="-0.8689" layer="21"/>
<rectangle x1="0.0152" y1="-0.8745" x2="0.1941" y2="-0.8689" layer="21"/>
<rectangle x1="-0.7724" y1="-0.8689" x2="-0.3368" y2="-0.8633" layer="21"/>
<rectangle x1="0.0097" y1="-0.8689" x2="0.1885" y2="-0.8633" layer="21"/>
<rectangle x1="-0.7836" y1="-0.8633" x2="-0.32" y2="-0.8578" layer="21"/>
<rectangle x1="0.0041" y1="-0.8633" x2="0.1773" y2="-0.8578" layer="21"/>
<rectangle x1="-0.7892" y1="-0.8578" x2="-0.3089" y2="-0.8522" layer="21"/>
<rectangle x1="0.0041" y1="-0.8578" x2="0.1717" y2="-0.8522" layer="21"/>
<rectangle x1="-0.7948" y1="-0.8522" x2="-0.2921" y2="-0.8466" layer="21"/>
<rectangle x1="-0.0015" y1="-0.8522" x2="0.1661" y2="-0.8466" layer="21"/>
<rectangle x1="-0.8004" y1="-0.8466" x2="-0.2809" y2="-0.841" layer="21"/>
<rectangle x1="-0.0071" y1="-0.8466" x2="0.1605" y2="-0.841" layer="21"/>
<rectangle x1="-0.8115" y1="-0.841" x2="-0.2642" y2="-0.8354" layer="21"/>
<rectangle x1="-0.0071" y1="-0.841" x2="0.1549" y2="-0.8354" layer="21"/>
<rectangle x1="-0.8171" y1="-0.8354" x2="-0.253" y2="-0.8298" layer="21"/>
<rectangle x1="-0.0127" y1="-0.8354" x2="0.1494" y2="-0.8298" layer="21"/>
<rectangle x1="-0.8227" y1="-0.8298" x2="-0.2362" y2="-0.8242" layer="21"/>
<rectangle x1="-0.0183" y1="-0.8298" x2="0.1438" y2="-0.8242" layer="21"/>
<rectangle x1="-0.8283" y1="-0.8242" x2="-0.225" y2="-0.8186" layer="21"/>
<rectangle x1="-0.0239" y1="-0.8242" x2="0.1382" y2="-0.8186" layer="21"/>
<rectangle x1="-0.8395" y1="-0.8186" x2="-0.2139" y2="-0.8131" layer="21"/>
<rectangle x1="-0.0239" y1="-0.8186" x2="0.1326" y2="-0.8131" layer="21"/>
<rectangle x1="-0.8451" y1="-0.8131" x2="-0.2027" y2="-0.8075" layer="21"/>
<rectangle x1="-0.0295" y1="-0.8131" x2="0.127" y2="-0.8075" layer="21"/>
<rectangle x1="-0.8506" y1="-0.8075" x2="-0.1971" y2="-0.8019" layer="21"/>
<rectangle x1="-0.0295" y1="-0.8075" x2="0.1214" y2="-0.8019" layer="21"/>
<rectangle x1="-0.8506" y1="-0.8019" x2="-0.1859" y2="-0.7963" layer="21"/>
<rectangle x1="-0.0351" y1="-0.8019" x2="0.1214" y2="-0.7963" layer="21"/>
<rectangle x1="-0.8562" y1="-0.7963" x2="-0.1803" y2="-0.7907" layer="21"/>
<rectangle x1="-0.0351" y1="-0.7963" x2="0.1158" y2="-0.7907" layer="21"/>
<rectangle x1="-0.8618" y1="-0.7907" x2="-0.1692" y2="-0.7851" layer="21"/>
<rectangle x1="-0.0351" y1="-0.7907" x2="0.1102" y2="-0.7851" layer="21"/>
<rectangle x1="-0.8674" y1="-0.7851" x2="-0.158" y2="-0.7795" layer="21"/>
<rectangle x1="-0.0406" y1="-0.7851" x2="0.1102" y2="-0.7795" layer="21"/>
<rectangle x1="-0.8674" y1="-0.7795" x2="-0.6383" y2="-0.7739" layer="21"/>
<rectangle x1="-0.5489" y1="-0.7795" x2="-0.1524" y2="-0.7739" layer="21"/>
<rectangle x1="-0.0406" y1="-0.7795" x2="0.1046" y2="-0.7739" layer="21"/>
<rectangle x1="-0.873" y1="-0.7739" x2="-0.6662" y2="-0.7683" layer="21"/>
<rectangle x1="-0.4821" y1="-0.7739" x2="-0.1412" y2="-0.7683" layer="21"/>
<rectangle x1="-0.0406" y1="-0.7739" x2="0.0991" y2="-0.7683" layer="21"/>
<rectangle x1="-0.8786" y1="-0.7683" x2="-0.683" y2="-0.7628" layer="21"/>
<rectangle x1="-0.4597" y1="-0.7683" x2="-0.13" y2="-0.7628" layer="21"/>
<rectangle x1="-0.0462" y1="-0.7683" x2="0.0935" y2="-0.7628" layer="21"/>
<rectangle x1="-0.8786" y1="-0.7628" x2="-0.6942" y2="-0.7572" layer="21"/>
<rectangle x1="-0.4318" y1="-0.7628" x2="-0.1245" y2="-0.7572" layer="21"/>
<rectangle x1="-0.0462" y1="-0.7628" x2="0.0935" y2="-0.7572" layer="21"/>
<rectangle x1="-0.8842" y1="-0.7572" x2="-0.7109" y2="-0.7516" layer="21"/>
<rectangle x1="-0.4094" y1="-0.7572" x2="-0.1133" y2="-0.7516" layer="21"/>
<rectangle x1="-0.0462" y1="-0.7572" x2="0.0879" y2="-0.7516" layer="21"/>
<rectangle x1="-0.8898" y1="-0.7516" x2="-0.7165" y2="-0.746" layer="21"/>
<rectangle x1="-0.3871" y1="-0.7516" x2="-0.1077" y2="-0.746" layer="21"/>
<rectangle x1="-0.0518" y1="-0.7516" x2="0.0879" y2="-0.746" layer="21"/>
<rectangle x1="-0.8953" y1="-0.746" x2="-0.7221" y2="-0.7404" layer="21"/>
<rectangle x1="-0.3759" y1="-0.746" x2="-0.1021" y2="-0.7404" layer="21"/>
<rectangle x1="-0.0518" y1="-0.746" x2="0.0823" y2="-0.7404" layer="21"/>
<rectangle x1="-0.8953" y1="-0.7404" x2="-0.7277" y2="-0.7348" layer="21"/>
<rectangle x1="-0.3592" y1="-0.7404" x2="-0.0965" y2="-0.7348" layer="21"/>
<rectangle x1="-0.0574" y1="-0.7404" x2="0.0823" y2="-0.7348" layer="21"/>
<rectangle x1="-0.9009" y1="-0.7348" x2="-0.7389" y2="-0.7292" layer="21"/>
<rectangle x1="-0.348" y1="-0.7348" x2="-0.0909" y2="-0.7292" layer="21"/>
<rectangle x1="-0.0574" y1="-0.7348" x2="0.0823" y2="-0.7292" layer="21"/>
<rectangle x1="-0.9009" y1="-0.7292" x2="-0.7445" y2="-0.7236" layer="21"/>
<rectangle x1="-0.3312" y1="-0.7292" x2="-0.0853" y2="-0.7236" layer="21"/>
<rectangle x1="-0.0574" y1="-0.7292" x2="0.0767" y2="-0.7236" layer="21"/>
<rectangle x1="-0.9065" y1="-0.7236" x2="-0.7501" y2="-0.7181" layer="21"/>
<rectangle x1="-0.32" y1="-0.7236" x2="-0.0742" y2="-0.7181" layer="21"/>
<rectangle x1="-0.063" y1="-0.7236" x2="0.0767" y2="-0.7181" layer="21"/>
<rectangle x1="-0.9065" y1="-0.7181" x2="-0.7556" y2="-0.7125" layer="21"/>
<rectangle x1="-0.3033" y1="-0.7181" x2="-0.0686" y2="-0.7125" layer="21"/>
<rectangle x1="-0.063" y1="-0.7181" x2="0.0711" y2="-0.7125" layer="21"/>
<rectangle x1="-0.9121" y1="-0.7125" x2="-0.7612" y2="-0.7069" layer="21"/>
<rectangle x1="-0.2921" y1="-0.7125" x2="0.0711" y2="-0.7069" layer="21"/>
<rectangle x1="-0.9121" y1="-0.7069" x2="-0.7612" y2="-0.7013" layer="21"/>
<rectangle x1="-0.2809" y1="-0.7069" x2="0.0711" y2="-0.7013" layer="21"/>
<rectangle x1="-0.9121" y1="-0.7013" x2="-0.7668" y2="-0.6957" layer="21"/>
<rectangle x1="-0.2697" y1="-0.7013" x2="0.0655" y2="-0.6957" layer="21"/>
<rectangle x1="-0.9177" y1="-0.6957" x2="-0.7724" y2="-0.6901" layer="21"/>
<rectangle x1="-0.2586" y1="-0.6957" x2="0.0655" y2="-0.6901" layer="21"/>
<rectangle x1="-0.9177" y1="-0.6901" x2="-0.7724" y2="-0.6845" layer="21"/>
<rectangle x1="-0.253" y1="-0.6901" x2="0.0655" y2="-0.6845" layer="21"/>
<rectangle x1="-0.9233" y1="-0.6845" x2="-0.778" y2="-0.6789" layer="21"/>
<rectangle x1="-0.2418" y1="-0.6845" x2="0.0599" y2="-0.6789" layer="21"/>
<rectangle x1="-0.9233" y1="-0.6789" x2="-0.7836" y2="-0.6734" layer="21"/>
<rectangle x1="-0.2306" y1="-0.6789" x2="0.0599" y2="-0.6734" layer="21"/>
<rectangle x1="-0.9233" y1="-0.6734" x2="-0.7892" y2="-0.6678" layer="21"/>
<rectangle x1="-0.225" y1="-0.6734" x2="0.0599" y2="-0.6678" layer="21"/>
<rectangle x1="-0.9289" y1="-0.6678" x2="-0.7892" y2="-0.6622" layer="21"/>
<rectangle x1="-0.2139" y1="-0.6678" x2="0.0599" y2="-0.6622" layer="21"/>
<rectangle x1="-0.9289" y1="-0.6622" x2="-0.7892" y2="-0.6566" layer="21"/>
<rectangle x1="-0.2027" y1="-0.6622" x2="0.0544" y2="-0.6566" layer="21"/>
<rectangle x1="-0.9345" y1="-0.6566" x2="-0.7948" y2="-0.651" layer="21"/>
<rectangle x1="-0.1971" y1="-0.6566" x2="0.0544" y2="-0.651" layer="21"/>
<rectangle x1="-0.9345" y1="-0.651" x2="-0.7948" y2="-0.6454" layer="21"/>
<rectangle x1="-0.1915" y1="-0.651" x2="0.0544" y2="-0.6454" layer="21"/>
<rectangle x1="-0.9345" y1="-0.6454" x2="-0.8004" y2="-0.6401" layer="21"/>
<rectangle x1="-0.1803" y1="-0.6454" x2="0.0544" y2="-0.6401" layer="21"/>
<rectangle x1="-0.9345" y1="-0.6401" x2="-0.8004" y2="-0.6345" layer="21"/>
<rectangle x1="-0.1748" y1="-0.6401" x2="0.0544" y2="-0.6345" layer="21"/>
<rectangle x1="-0.9345" y1="-0.6345" x2="-0.8004" y2="-0.6289" layer="21"/>
<rectangle x1="-0.1692" y1="-0.6345" x2="0.0544" y2="-0.6289" layer="21"/>
<rectangle x1="-0.9345" y1="-0.6289" x2="-0.8059" y2="-0.6233" layer="21"/>
<rectangle x1="-0.1636" y1="-0.6289" x2="0.0544" y2="-0.6233" layer="21"/>
<rectangle x1="-0.9401" y1="-0.6233" x2="-0.8059" y2="-0.6177" layer="21"/>
<rectangle x1="-0.158" y1="-0.6233" x2="0.0544" y2="-0.6177" layer="21"/>
<rectangle x1="-0.9401" y1="-0.6177" x2="-0.8059" y2="-0.6121" layer="21"/>
<rectangle x1="-0.1524" y1="-0.6177" x2="0.0488" y2="-0.6121" layer="21"/>
<rectangle x1="-0.9401" y1="-0.6121" x2="-0.8115" y2="-0.6066" layer="21"/>
<rectangle x1="-0.1468" y1="-0.6121" x2="0.0488" y2="-0.6066" layer="21"/>
<rectangle x1="-0.9401" y1="-0.6066" x2="-0.8115" y2="-0.601" layer="21"/>
<rectangle x1="-0.1356" y1="-0.6066" x2="0.0488" y2="-0.601" layer="21"/>
<rectangle x1="-0.9401" y1="-0.601" x2="-0.8115" y2="-0.5954" layer="21"/>
<rectangle x1="-0.13" y1="-0.601" x2="0.0488" y2="-0.5954" layer="21"/>
<rectangle x1="-0.9401" y1="-0.5954" x2="-0.8115" y2="-0.5898" layer="21"/>
<rectangle x1="-0.1245" y1="-0.5954" x2="0.0488" y2="-0.5898" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5898" x2="-0.8115" y2="-0.5842" layer="21"/>
<rectangle x1="-0.1189" y1="-0.5898" x2="0.0488" y2="-0.5842" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5842" x2="-0.8115" y2="-0.5786" layer="21"/>
<rectangle x1="-0.1133" y1="-0.5842" x2="0.0544" y2="-0.5786" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5786" x2="-0.8171" y2="-0.573" layer="21"/>
<rectangle x1="-0.1077" y1="-0.5786" x2="0.0599" y2="-0.573" layer="21"/>
<rectangle x1="-0.9456" y1="-0.573" x2="-0.8171" y2="-0.5674" layer="21"/>
<rectangle x1="-0.1021" y1="-0.573" x2="0.0599" y2="-0.5674" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5674" x2="-0.8171" y2="-0.5618" layer="21"/>
<rectangle x1="-0.0965" y1="-0.5674" x2="0.0655" y2="-0.5618" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5618" x2="-0.8171" y2="-0.5563" layer="21"/>
<rectangle x1="-0.0965" y1="-0.5618" x2="0.0711" y2="-0.5563" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5563" x2="-0.8171" y2="-0.5507" layer="21"/>
<rectangle x1="-0.0909" y1="-0.5563" x2="0.0711" y2="-0.5507" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5507" x2="-0.8171" y2="-0.5451" layer="21"/>
<rectangle x1="-0.0965" y1="-0.5507" x2="0.0767" y2="-0.5451" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5451" x2="-0.8171" y2="-0.5395" layer="21"/>
<rectangle x1="-0.0965" y1="-0.5451" x2="0.0767" y2="-0.5395" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5395" x2="-0.8171" y2="-0.5339" layer="21"/>
<rectangle x1="-0.0965" y1="-0.5395" x2="0.0823" y2="-0.5339" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5339" x2="-0.8171" y2="-0.5283" layer="21"/>
<rectangle x1="-0.0965" y1="-0.5339" x2="0.0879" y2="-0.5283" layer="21"/>
<rectangle x1="-0.9456" y1="-0.5283" x2="-0.8115" y2="-0.5227" layer="21"/>
<rectangle x1="-0.1021" y1="-0.5283" x2="0.0879" y2="-0.5227" layer="21"/>
<rectangle x1="-0.9401" y1="-0.5227" x2="-0.8115" y2="-0.5171" layer="21"/>
<rectangle x1="-0.1077" y1="-0.5227" x2="0.0935" y2="-0.5171" layer="21"/>
<rectangle x1="-0.9401" y1="-0.5171" x2="-0.8115" y2="-0.5116" layer="21"/>
<rectangle x1="-0.1077" y1="-0.5171" x2="0.0935" y2="-0.5116" layer="21"/>
<rectangle x1="-0.9401" y1="-0.5116" x2="-0.8115" y2="-0.506" layer="21"/>
<rectangle x1="-0.1133" y1="-0.5116" x2="0.0991" y2="-0.506" layer="21"/>
<rectangle x1="-0.9401" y1="-0.506" x2="-0.8115" y2="-0.5004" layer="21"/>
<rectangle x1="-0.1133" y1="-0.506" x2="0.1046" y2="-0.5004" layer="21"/>
<rectangle x1="-0.9401" y1="-0.5004" x2="-0.8115" y2="-0.4948" layer="21"/>
<rectangle x1="-0.1189" y1="-0.5004" x2="0.1046" y2="-0.4948" layer="21"/>
<rectangle x1="-0.9401" y1="-0.4948" x2="-0.8115" y2="-0.4892" layer="21"/>
<rectangle x1="-0.1189" y1="-0.4948" x2="0.1102" y2="-0.4892" layer="21"/>
<rectangle x1="-0.9401" y1="-0.4892" x2="-0.8059" y2="-0.4836" layer="21"/>
<rectangle x1="-0.1245" y1="-0.4892" x2="0.1102" y2="-0.4836" layer="21"/>
<rectangle x1="-0.9401" y1="-0.4836" x2="-0.8059" y2="-0.478" layer="21"/>
<rectangle x1="-0.13" y1="-0.4836" x2="0.1158" y2="-0.478" layer="21"/>
<rectangle x1="-0.9401" y1="-0.478" x2="-0.8004" y2="-0.4724" layer="21"/>
<rectangle x1="-0.13" y1="-0.478" x2="0.1214" y2="-0.4724" layer="21"/>
<rectangle x1="-0.9401" y1="-0.4724" x2="-0.8004" y2="-0.4669" layer="21"/>
<rectangle x1="-0.1356" y1="-0.4724" x2="0.1214" y2="-0.4669" layer="21"/>
<rectangle x1="-0.9345" y1="-0.4669" x2="-0.8004" y2="-0.4613" layer="21"/>
<rectangle x1="-0.1356" y1="-0.4669" x2="0.127" y2="-0.4613" layer="21"/>
<rectangle x1="-0.9345" y1="-0.4613" x2="-0.7948" y2="-0.4557" layer="21"/>
<rectangle x1="-0.1412" y1="-0.4613" x2="0.127" y2="-0.4557" layer="21"/>
<rectangle x1="-0.9345" y1="-0.4557" x2="-0.7948" y2="-0.4501" layer="21"/>
<rectangle x1="-0.1468" y1="-0.4557" x2="0.1326" y2="-0.4501" layer="21"/>
<rectangle x1="-0.9289" y1="-0.4501" x2="-0.7948" y2="-0.4445" layer="21"/>
<rectangle x1="-0.1524" y1="-0.4501" x2="0.1326" y2="-0.4445" layer="21"/>
<rectangle x1="-0.9289" y1="-0.4445" x2="-0.7892" y2="-0.4389" layer="21"/>
<rectangle x1="-0.158" y1="-0.4445" x2="0.1382" y2="-0.4389" layer="21"/>
<rectangle x1="-0.9233" y1="-0.4389" x2="-0.7836" y2="-0.4333" layer="21"/>
<rectangle x1="-0.1636" y1="-0.4389" x2="0.1382" y2="-0.4333" layer="21"/>
<rectangle x1="-0.9233" y1="-0.4333" x2="-0.7836" y2="-0.4277" layer="21"/>
<rectangle x1="-0.1692" y1="-0.4333" x2="-0.0071" y2="-0.4277" layer="21"/>
<rectangle x1="-0.0015" y1="-0.4333" x2="0.1382" y2="-0.4277" layer="21"/>
<rectangle x1="-0.9233" y1="-0.4277" x2="-0.778" y2="-0.4221" layer="21"/>
<rectangle x1="-0.1692" y1="-0.4277" x2="-0.0127" y2="-0.4221" layer="21"/>
<rectangle x1="-0.0015" y1="-0.4277" x2="0.1438" y2="-0.4221" layer="21"/>
<rectangle x1="-0.9177" y1="-0.4221" x2="-0.778" y2="-0.4166" layer="21"/>
<rectangle x1="-0.1748" y1="-0.4221" x2="-0.0127" y2="-0.4166" layer="21"/>
<rectangle x1="0.0041" y1="-0.4221" x2="0.1438" y2="-0.4166" layer="21"/>
<rectangle x1="-0.9177" y1="-0.4166" x2="-0.7724" y2="-0.411" layer="21"/>
<rectangle x1="-0.1803" y1="-0.4166" x2="-0.0183" y2="-0.411" layer="21"/>
<rectangle x1="0.0041" y1="-0.4166" x2="0.1494" y2="-0.411" layer="21"/>
<rectangle x1="-0.9121" y1="-0.411" x2="-0.7668" y2="-0.4054" layer="21"/>
<rectangle x1="-0.1859" y1="-0.411" x2="-0.0239" y2="-0.4054" layer="21"/>
<rectangle x1="0.0097" y1="-0.411" x2="0.1494" y2="-0.4054" layer="21"/>
<rectangle x1="-0.9121" y1="-0.4054" x2="-0.7668" y2="-0.3998" layer="21"/>
<rectangle x1="-0.1915" y1="-0.4054" x2="-0.0239" y2="-0.3998" layer="21"/>
<rectangle x1="0.0152" y1="-0.4054" x2="0.1494" y2="-0.3998" layer="21"/>
<rectangle x1="-0.9121" y1="-0.3998" x2="-0.7612" y2="-0.3942" layer="21"/>
<rectangle x1="-0.1971" y1="-0.3998" x2="-0.0295" y2="-0.3942" layer="21"/>
<rectangle x1="0.0152" y1="-0.3998" x2="0.1549" y2="-0.3942" layer="21"/>
<rectangle x1="-0.9065" y1="-0.3942" x2="-0.7556" y2="-0.3886" layer="21"/>
<rectangle x1="-0.2027" y1="-0.3942" x2="-0.0295" y2="-0.3886" layer="21"/>
<rectangle x1="0.0152" y1="-0.3942" x2="0.1549" y2="-0.3886" layer="21"/>
<rectangle x1="-0.9065" y1="-0.3886" x2="-0.7501" y2="-0.383" layer="21"/>
<rectangle x1="-0.2083" y1="-0.3886" x2="-0.0351" y2="-0.383" layer="21"/>
<rectangle x1="0.0208" y1="-0.3886" x2="0.1605" y2="-0.383" layer="21"/>
<rectangle x1="-0.9009" y1="-0.383" x2="-0.7445" y2="-0.3774" layer="21"/>
<rectangle x1="-0.2195" y1="-0.383" x2="-0.0406" y2="-0.3774" layer="21"/>
<rectangle x1="0.0208" y1="-0.383" x2="0.1605" y2="-0.3774" layer="21"/>
<rectangle x1="-0.9009" y1="-0.3774" x2="-0.7389" y2="-0.3719" layer="21"/>
<rectangle x1="-0.225" y1="-0.3774" x2="-0.0462" y2="-0.3719" layer="21"/>
<rectangle x1="0.0264" y1="-0.3774" x2="0.1661" y2="-0.3719" layer="21"/>
<rectangle x1="-0.8953" y1="-0.3719" x2="-0.7333" y2="-0.3663" layer="21"/>
<rectangle x1="-0.2306" y1="-0.3719" x2="-0.0518" y2="-0.3663" layer="21"/>
<rectangle x1="0.0264" y1="-0.3719" x2="0.1661" y2="-0.3663" layer="21"/>
<rectangle x1="-0.8898" y1="-0.3663" x2="-0.7277" y2="-0.3607" layer="21"/>
<rectangle x1="-0.2362" y1="-0.3663" x2="-0.0574" y2="-0.3607" layer="21"/>
<rectangle x1="0.0264" y1="-0.3663" x2="0.1661" y2="-0.3607" layer="21"/>
<rectangle x1="-0.8898" y1="-0.3607" x2="-0.7221" y2="-0.3551" layer="21"/>
<rectangle x1="-0.2418" y1="-0.3607" x2="-0.0574" y2="-0.3551" layer="21"/>
<rectangle x1="0.032" y1="-0.3607" x2="0.1717" y2="-0.3551" layer="21"/>
<rectangle x1="-0.8842" y1="-0.3551" x2="-0.7165" y2="-0.3495" layer="21"/>
<rectangle x1="-0.253" y1="-0.3551" x2="-0.063" y2="-0.3495" layer="21"/>
<rectangle x1="0.032" y1="-0.3551" x2="0.1717" y2="-0.3495" layer="21"/>
<rectangle x1="-0.8842" y1="-0.3495" x2="-0.7109" y2="-0.3439" layer="21"/>
<rectangle x1="-0.2642" y1="-0.3495" x2="-0.0686" y2="-0.3439" layer="21"/>
<rectangle x1="0.0376" y1="-0.3495" x2="0.1773" y2="-0.3439" layer="21"/>
<rectangle x1="-0.8786" y1="-0.3439" x2="-0.6998" y2="-0.3383" layer="21"/>
<rectangle x1="-0.2753" y1="-0.3439" x2="-0.0742" y2="-0.3383" layer="21"/>
<rectangle x1="0.0376" y1="-0.3439" x2="0.1773" y2="-0.3383" layer="21"/>
<rectangle x1="-0.873" y1="-0.3383" x2="-0.6942" y2="-0.3327" layer="21"/>
<rectangle x1="-0.2865" y1="-0.3383" x2="-0.0798" y2="-0.3327" layer="21"/>
<rectangle x1="0.0432" y1="-0.3383" x2="0.1773" y2="-0.3327" layer="21"/>
<rectangle x1="-0.873" y1="-0.3327" x2="-0.683" y2="-0.3272" layer="21"/>
<rectangle x1="-0.2977" y1="-0.3327" x2="-0.0853" y2="-0.3272" layer="21"/>
<rectangle x1="0.0432" y1="-0.3327" x2="0.1773" y2="-0.3272" layer="21"/>
<rectangle x1="-0.8674" y1="-0.3272" x2="-0.6718" y2="-0.3216" layer="21"/>
<rectangle x1="-0.3033" y1="-0.3272" x2="-0.0909" y2="-0.3216" layer="21"/>
<rectangle x1="0.0432" y1="-0.3272" x2="0.1829" y2="-0.3216" layer="21"/>
<rectangle x1="-0.8618" y1="-0.3216" x2="-0.6662" y2="-0.316" layer="21"/>
<rectangle x1="-0.3145" y1="-0.3216" x2="-0.0909" y2="-0.316" layer="21"/>
<rectangle x1="0.0488" y1="-0.3216" x2="0.1829" y2="-0.316" layer="21"/>
<rectangle x1="-0.8618" y1="-0.316" x2="-0.6551" y2="-0.3104" layer="21"/>
<rectangle x1="-0.3312" y1="-0.316" x2="-0.0965" y2="-0.3104" layer="21"/>
<rectangle x1="0.0488" y1="-0.316" x2="0.1829" y2="-0.3104" layer="21"/>
<rectangle x1="-0.8562" y1="-0.3104" x2="-0.6383" y2="-0.3048" layer="21"/>
<rectangle x1="-0.348" y1="-0.3104" x2="-0.1021" y2="-0.3048" layer="21"/>
<rectangle x1="0.0544" y1="-0.3104" x2="0.1829" y2="-0.3048" layer="21"/>
<rectangle x1="-0.8506" y1="-0.3048" x2="-0.6215" y2="-0.2992" layer="21"/>
<rectangle x1="-0.3647" y1="-0.3048" x2="-0.1133" y2="-0.2992" layer="21"/>
<rectangle x1="0.0544" y1="-0.3048" x2="0.1829" y2="-0.2992" layer="21"/>
<rectangle x1="-0.8451" y1="-0.2992" x2="-0.6104" y2="-0.2936" layer="21"/>
<rectangle x1="-0.3871" y1="-0.2992" x2="-0.1189" y2="-0.2936" layer="21"/>
<rectangle x1="0.0544" y1="-0.2992" x2="0.1885" y2="-0.2936" layer="21"/>
<rectangle x1="-0.8395" y1="-0.2936" x2="-0.588" y2="-0.288" layer="21"/>
<rectangle x1="-0.4094" y1="-0.2936" x2="-0.1245" y2="-0.288" layer="21"/>
<rectangle x1="0.0544" y1="-0.2936" x2="0.1885" y2="-0.288" layer="21"/>
<rectangle x1="-0.8339" y1="-0.288" x2="-0.5489" y2="-0.2824" layer="21"/>
<rectangle x1="-0.4542" y1="-0.288" x2="-0.13" y2="-0.2824" layer="21"/>
<rectangle x1="0.0599" y1="-0.288" x2="0.1885" y2="-0.2824" layer="21"/>
<rectangle x1="-0.8283" y1="-0.2824" x2="-0.1356" y2="-0.2769" layer="21"/>
<rectangle x1="0.0599" y1="-0.2824" x2="0.1885" y2="-0.2769" layer="21"/>
<rectangle x1="-0.8227" y1="-0.2769" x2="-0.1468" y2="-0.2713" layer="21"/>
<rectangle x1="0.0599" y1="-0.2769" x2="0.1941" y2="-0.2713" layer="21"/>
<rectangle x1="-0.8171" y1="-0.2713" x2="-0.1524" y2="-0.2657" layer="21"/>
<rectangle x1="0.0599" y1="-0.2713" x2="0.1941" y2="-0.2657" layer="21"/>
<rectangle x1="-0.8115" y1="-0.2657" x2="-0.158" y2="-0.2601" layer="21"/>
<rectangle x1="0.0655" y1="-0.2657" x2="0.1941" y2="-0.2601" layer="21"/>
<rectangle x1="-0.8059" y1="-0.2601" x2="-0.1636" y2="-0.2545" layer="21"/>
<rectangle x1="0.0655" y1="-0.2601" x2="0.1941" y2="-0.2545" layer="21"/>
<rectangle x1="-0.8004" y1="-0.2545" x2="-0.1692" y2="-0.2489" layer="21"/>
<rectangle x1="0.0655" y1="-0.2545" x2="0.1996" y2="-0.2489" layer="21"/>
<rectangle x1="-0.7948" y1="-0.2489" x2="-0.1803" y2="-0.2433" layer="21"/>
<rectangle x1="0.0655" y1="-0.2489" x2="0.1996" y2="-0.2433" layer="21"/>
<rectangle x1="-0.7836" y1="-0.2433" x2="-0.1915" y2="-0.2377" layer="21"/>
<rectangle x1="0.0655" y1="-0.2433" x2="0.1996" y2="-0.2377" layer="21"/>
<rectangle x1="-0.7724" y1="-0.2377" x2="-0.2027" y2="-0.2322" layer="21"/>
<rectangle x1="0.0711" y1="-0.2377" x2="0.1996" y2="-0.2322" layer="21"/>
<rectangle x1="-0.7668" y1="-0.2322" x2="-0.2083" y2="-0.2266" layer="21"/>
<rectangle x1="0.0711" y1="-0.2322" x2="0.2052" y2="-0.2266" layer="21"/>
<rectangle x1="-0.7556" y1="-0.2266" x2="-0.2195" y2="-0.221" layer="21"/>
<rectangle x1="0.0711" y1="-0.2266" x2="0.2052" y2="-0.221" layer="21"/>
<rectangle x1="-0.7445" y1="-0.221" x2="-0.2306" y2="-0.2154" layer="21"/>
<rectangle x1="0.0711" y1="-0.221" x2="0.2052" y2="-0.2154" layer="21"/>
<rectangle x1="-0.7389" y1="-0.2154" x2="-0.2418" y2="-0.2098" layer="21"/>
<rectangle x1="0.0767" y1="-0.2154" x2="0.2052" y2="-0.2098" layer="21"/>
<rectangle x1="-0.7277" y1="-0.2098" x2="-0.253" y2="-0.2042" layer="21"/>
<rectangle x1="0.0767" y1="-0.2098" x2="0.2052" y2="-0.2042" layer="21"/>
<rectangle x1="-0.7165" y1="-0.2042" x2="-0.2642" y2="-0.1986" layer="21"/>
<rectangle x1="0.0767" y1="-0.2042" x2="0.2052" y2="-0.1986" layer="21"/>
<rectangle x1="-0.7054" y1="-0.1986" x2="-0.2753" y2="-0.193" layer="21"/>
<rectangle x1="0.0767" y1="-0.1986" x2="0.2052" y2="-0.193" layer="21"/>
<rectangle x1="-0.6886" y1="-0.193" x2="-0.2921" y2="-0.1875" layer="21"/>
<rectangle x1="0.0767" y1="-0.193" x2="0.2052" y2="-0.1875" layer="21"/>
<rectangle x1="-0.6774" y1="-0.1875" x2="-0.3145" y2="-0.1819" layer="21"/>
<rectangle x1="0.0767" y1="-0.1875" x2="0.2108" y2="-0.1819" layer="21"/>
<rectangle x1="-0.6607" y1="-0.1819" x2="-0.3312" y2="-0.1763" layer="21"/>
<rectangle x1="0.0823" y1="-0.1819" x2="0.2108" y2="-0.1763" layer="21"/>
<rectangle x1="-0.6495" y1="-0.1763" x2="-0.348" y2="-0.1707" layer="21"/>
<rectangle x1="0.0823" y1="-0.1763" x2="0.2108" y2="-0.1707" layer="21"/>
<rectangle x1="-0.6327" y1="-0.1707" x2="-0.3647" y2="-0.1651" layer="21"/>
<rectangle x1="0.0823" y1="-0.1707" x2="0.2108" y2="-0.1651" layer="21"/>
<rectangle x1="-0.5992" y1="-0.1651" x2="-0.4039" y2="-0.1595" layer="21"/>
<rectangle x1="0.0823" y1="-0.1651" x2="0.2108" y2="-0.1595" layer="21"/>
<rectangle x1="-0.5601" y1="-0.1595" x2="-0.4486" y2="-0.1539" layer="21"/>
<rectangle x1="0.0823" y1="-0.1595" x2="0.2108" y2="-0.1539" layer="21"/>
<rectangle x1="0.0823" y1="-0.1539" x2="0.2108" y2="-0.1483" layer="21"/>
<rectangle x1="0.0823" y1="-0.1483" x2="0.2108" y2="-0.1427" layer="21"/>
<rectangle x1="0.0823" y1="-0.1427" x2="0.2108" y2="-0.1372" layer="21"/>
<rectangle x1="0.0823" y1="-0.1372" x2="0.2108" y2="-0.1316" layer="21"/>
<rectangle x1="0.0823" y1="-0.1316" x2="0.2108" y2="-0.126" layer="21"/>
<rectangle x1="0.0823" y1="-0.126" x2="0.2164" y2="-0.1204" layer="21"/>
<rectangle x1="0.0879" y1="-0.1204" x2="0.2164" y2="-0.1148" layer="21"/>
<rectangle x1="0.0879" y1="-0.1148" x2="0.2164" y2="-0.1092" layer="21"/>
<rectangle x1="0.0879" y1="-0.1092" x2="0.2164" y2="-0.1036" layer="21"/>
<rectangle x1="0.0879" y1="-0.1036" x2="0.2164" y2="-0.098" layer="21"/>
<rectangle x1="0.0879" y1="-0.098" x2="0.2164" y2="-0.0925" layer="21"/>
<rectangle x1="0.0879" y1="-0.0925" x2="0.2164" y2="-0.0869" layer="21"/>
<rectangle x1="0.0879" y1="-0.0869" x2="0.2164" y2="-0.0813" layer="21"/>
<rectangle x1="0.0879" y1="-0.0813" x2="0.2164" y2="-0.0757" layer="21"/>
<rectangle x1="0.0879" y1="-0.0757" x2="0.2164" y2="-0.0701" layer="21"/>
<rectangle x1="0.0879" y1="-0.0701" x2="0.2164" y2="-0.0645" layer="21"/>
<rectangle x1="0.0879" y1="-0.0645" x2="0.2164" y2="-0.0589" layer="21"/>
<rectangle x1="0.0879" y1="-0.0589" x2="0.2164" y2="-0.0533" layer="21"/>
<rectangle x1="0.0879" y1="-0.0533" x2="0.2164" y2="-0.0478" layer="21"/>
<rectangle x1="0.0879" y1="-0.0478" x2="0.2164" y2="-0.0422" layer="21"/>
<rectangle x1="0.0879" y1="-0.0422" x2="0.2164" y2="-0.0366" layer="21"/>
<rectangle x1="0.0879" y1="-0.0366" x2="0.2164" y2="-0.031" layer="21"/>
<rectangle x1="0.0879" y1="-0.031" x2="0.2164" y2="-0.0254" layer="21"/>
<rectangle x1="0.0879" y1="-0.0254" x2="0.2164" y2="-0.0198" layer="21"/>
<rectangle x1="0.0879" y1="-0.0198" x2="0.2164" y2="-0.0142" layer="21"/>
<rectangle x1="0.0879" y1="-0.0142" x2="0.2164" y2="-0.0086" layer="21"/>
<rectangle x1="0.0879" y1="-0.0086" x2="0.2164" y2="-0.003" layer="21"/>
<rectangle x1="0.0879" y1="-0.003" x2="0.2164" y2="0.0025" layer="21"/>
<rectangle x1="0.0879" y1="0.0025" x2="0.2164" y2="0.0081" layer="21"/>
<rectangle x1="0.0879" y1="0.0081" x2="0.2164" y2="0.0137" layer="21"/>
<rectangle x1="0.0879" y1="0.0137" x2="0.2164" y2="0.0193" layer="21"/>
<rectangle x1="0.0879" y1="0.0193" x2="0.2164" y2="0.0249" layer="21"/>
<rectangle x1="0.0879" y1="0.0249" x2="0.2164" y2="0.0305" layer="21"/>
<rectangle x1="0.0879" y1="0.0305" x2="0.2164" y2="0.0361" layer="21"/>
<rectangle x1="0.0879" y1="0.0361" x2="0.2164" y2="0.0417" layer="21"/>
<rectangle x1="0.0879" y1="0.0417" x2="0.2164" y2="0.0472" layer="21"/>
<rectangle x1="0.0879" y1="0.0472" x2="0.2164" y2="0.0528" layer="21"/>
<rectangle x1="0.0879" y1="0.0528" x2="0.2164" y2="0.0584" layer="21"/>
<rectangle x1="0.0879" y1="0.0584" x2="0.2164" y2="0.064" layer="21"/>
<rectangle x1="0.0879" y1="0.064" x2="0.2164" y2="0.0696" layer="21"/>
<rectangle x1="0.0879" y1="0.0696" x2="0.2164" y2="0.0752" layer="21"/>
<rectangle x1="0.0879" y1="0.0752" x2="0.2164" y2="0.0808" layer="21"/>
<rectangle x1="0.0879" y1="0.0808" x2="0.2164" y2="0.0864" layer="21"/>
<rectangle x1="0.0879" y1="0.0864" x2="0.2164" y2="0.0919" layer="21"/>
<rectangle x1="0.0879" y1="0.0919" x2="0.2164" y2="0.0975" layer="21"/>
<rectangle x1="0.0879" y1="0.0975" x2="0.2164" y2="0.1031" layer="21"/>
<rectangle x1="0.0879" y1="0.1031" x2="0.2164" y2="0.1087" layer="21"/>
<rectangle x1="0.0879" y1="0.1087" x2="0.2164" y2="0.1143" layer="21"/>
<rectangle x1="0.0879" y1="0.1143" x2="0.2164" y2="0.1199" layer="21"/>
<rectangle x1="0.0879" y1="0.1199" x2="0.2164" y2="0.1255" layer="21"/>
<rectangle x1="0.2723" y1="0.1199" x2="0.4623" y2="0.1255" layer="21"/>
<rectangle x1="0.0879" y1="0.1255" x2="0.5067" y2="0.1311" layer="21"/>
<rectangle x1="0.0879" y1="0.1311" x2="0.5458" y2="0.1367" layer="21"/>
<rectangle x1="0.0879" y1="0.1367" x2="0.557" y2="0.1422" layer="21"/>
<rectangle x1="0.0879" y1="0.1422" x2="0.5738" y2="0.1478" layer="21"/>
<rectangle x1="0.0879" y1="0.1478" x2="0.585" y2="0.1534" layer="21"/>
<rectangle x1="0.0599" y1="0.1534" x2="0.6017" y2="0.159" layer="21"/>
<rectangle x1="0.0376" y1="0.159" x2="0.6129" y2="0.1646" layer="21"/>
<rectangle x1="0.0264" y1="0.1646" x2="0.6297" y2="0.1702" layer="21"/>
<rectangle x1="0.0097" y1="0.1702" x2="0.6408" y2="0.1758" layer="21"/>
<rectangle x1="-0.0015" y1="0.1758" x2="0.652" y2="0.1814" layer="21"/>
<rectangle x1="-0.0127" y1="0.1814" x2="0.6632" y2="0.1869" layer="21"/>
<rectangle x1="-0.0295" y1="0.1869" x2="0.6688" y2="0.1925" layer="21"/>
<rectangle x1="-0.0406" y1="0.1925" x2="0.68" y2="0.1981" layer="21"/>
<rectangle x1="-0.0518" y1="0.1981" x2="0.6911" y2="0.2037" layer="21"/>
<rectangle x1="-0.0686" y1="0.2037" x2="0.7023" y2="0.2093" layer="21"/>
<rectangle x1="-0.0798" y1="0.2093" x2="0.7079" y2="0.2149" layer="21"/>
<rectangle x1="-0.0909" y1="0.2149" x2="0.7191" y2="0.2205" layer="21"/>
<rectangle x1="-0.1021" y1="0.2205" x2="0.7303" y2="0.2261" layer="21"/>
<rectangle x1="-0.1133" y1="0.2261" x2="0.7358" y2="0.2316" layer="21"/>
<rectangle x1="-0.1189" y1="0.2316" x2="0.7414" y2="0.2372" layer="21"/>
<rectangle x1="-0.13" y1="0.2372" x2="0.747" y2="0.2428" layer="21"/>
<rectangle x1="-0.1412" y1="0.2428" x2="0.7526" y2="0.2484" layer="21"/>
<rectangle x1="-0.1468" y1="0.2484" x2="0.2779" y2="0.254" layer="21"/>
<rectangle x1="0.4567" y1="0.2484" x2="0.7582" y2="0.254" layer="21"/>
<rectangle x1="-0.158" y1="0.254" x2="0.2164" y2="0.2596" layer="21"/>
<rectangle x1="0.5011" y1="0.254" x2="0.7638" y2="0.2596" layer="21"/>
<rectangle x1="-0.1692" y1="0.2596" x2="0.2164" y2="0.2652" layer="21"/>
<rectangle x1="0.5179" y1="0.2596" x2="0.7694" y2="0.2652" layer="21"/>
<rectangle x1="-0.1748" y1="0.2652" x2="0.2164" y2="0.2708" layer="21"/>
<rectangle x1="0.5347" y1="0.2652" x2="0.775" y2="0.2708" layer="21"/>
<rectangle x1="-0.1859" y1="0.2708" x2="0.2164" y2="0.2764" layer="21"/>
<rectangle x1="0.5458" y1="0.2708" x2="0.7805" y2="0.2764" layer="21"/>
<rectangle x1="-0.1971" y1="0.2764" x2="0.2164" y2="0.2819" layer="21"/>
<rectangle x1="0.5626" y1="0.2764" x2="0.7861" y2="0.2819" layer="21"/>
<rectangle x1="-0.2027" y1="0.2819" x2="0.0767" y2="0.2875" layer="21"/>
<rectangle x1="0.0879" y1="0.2819" x2="0.2164" y2="0.2875" layer="21"/>
<rectangle x1="0.5738" y1="0.2819" x2="0.7917" y2="0.2875" layer="21"/>
<rectangle x1="-0.2139" y1="0.2875" x2="0.0655" y2="0.2931" layer="21"/>
<rectangle x1="0.0879" y1="0.2875" x2="0.2164" y2="0.2931" layer="21"/>
<rectangle x1="0.5906" y1="0.2875" x2="0.7973" y2="0.2931" layer="21"/>
<rectangle x1="-0.2195" y1="0.2931" x2="0.0488" y2="0.2987" layer="21"/>
<rectangle x1="0.0879" y1="0.2931" x2="0.2164" y2="0.2987" layer="21"/>
<rectangle x1="0.5961" y1="0.2931" x2="0.8029" y2="0.2987" layer="21"/>
<rectangle x1="-0.225" y1="0.2987" x2="0.0376" y2="0.3043" layer="21"/>
<rectangle x1="0.0879" y1="0.2987" x2="0.2164" y2="0.3043" layer="21"/>
<rectangle x1="0.6073" y1="0.2987" x2="0.8085" y2="0.3043" layer="21"/>
<rectangle x1="-0.2306" y1="0.3043" x2="0.0264" y2="0.3099" layer="21"/>
<rectangle x1="0.0879" y1="0.3043" x2="0.2164" y2="0.3099" layer="21"/>
<rectangle x1="0.6185" y1="0.3043" x2="0.8085" y2="0.3099" layer="21"/>
<rectangle x1="-0.2362" y1="0.3099" x2="0.0097" y2="0.3152" layer="21"/>
<rectangle x1="0.0879" y1="0.3099" x2="0.2164" y2="0.3152" layer="21"/>
<rectangle x1="0.6297" y1="0.3099" x2="0.8141" y2="0.3152" layer="21"/>
<rectangle x1="-0.2418" y1="0.3152" x2="-0.0015" y2="0.3208" layer="21"/>
<rectangle x1="0.0879" y1="0.3152" x2="0.2164" y2="0.3208" layer="21"/>
<rectangle x1="0.6353" y1="0.3152" x2="0.8141" y2="0.3208" layer="21"/>
<rectangle x1="-0.2474" y1="0.3208" x2="-0.0127" y2="0.3264" layer="21"/>
<rectangle x1="0.0879" y1="0.3208" x2="0.2164" y2="0.3264" layer="21"/>
<rectangle x1="0.6464" y1="0.3208" x2="0.8197" y2="0.3264" layer="21"/>
<rectangle x1="-0.2586" y1="0.3264" x2="-0.0295" y2="0.332" layer="21"/>
<rectangle x1="0.0879" y1="0.3264" x2="0.2164" y2="0.332" layer="21"/>
<rectangle x1="0.652" y1="0.3264" x2="0.8252" y2="0.332" layer="21"/>
<rectangle x1="-0.2642" y1="0.332" x2="-0.0351" y2="0.3376" layer="21"/>
<rectangle x1="0.0879" y1="0.332" x2="0.222" y2="0.3376" layer="21"/>
<rectangle x1="0.6576" y1="0.332" x2="0.8252" y2="0.3376" layer="21"/>
<rectangle x1="-0.2697" y1="0.3376" x2="-0.0462" y2="0.3432" layer="21"/>
<rectangle x1="0.0935" y1="0.3376" x2="0.222" y2="0.3432" layer="21"/>
<rectangle x1="0.6632" y1="0.3376" x2="0.8308" y2="0.3432" layer="21"/>
<rectangle x1="-0.2753" y1="0.3432" x2="-0.0574" y2="0.3487" layer="21"/>
<rectangle x1="0.0935" y1="0.3432" x2="0.222" y2="0.3487" layer="21"/>
<rectangle x1="0.6688" y1="0.3432" x2="0.8308" y2="0.3487" layer="21"/>
<rectangle x1="-0.2809" y1="0.3487" x2="-0.063" y2="0.3543" layer="21"/>
<rectangle x1="0.0935" y1="0.3487" x2="0.222" y2="0.3543" layer="21"/>
<rectangle x1="0.6744" y1="0.3487" x2="0.8364" y2="0.3543" layer="21"/>
<rectangle x1="-0.2865" y1="0.3543" x2="-0.0742" y2="0.3599" layer="21"/>
<rectangle x1="0.0935" y1="0.3543" x2="0.222" y2="0.3599" layer="21"/>
<rectangle x1="0.68" y1="0.3543" x2="0.8364" y2="0.3599" layer="21"/>
<rectangle x1="-0.2921" y1="0.3599" x2="-0.0853" y2="0.3655" layer="21"/>
<rectangle x1="0.0935" y1="0.3599" x2="0.222" y2="0.3655" layer="21"/>
<rectangle x1="0.6855" y1="0.3599" x2="0.842" y2="0.3655" layer="21"/>
<rectangle x1="-0.3033" y1="0.3655" x2="-0.0909" y2="0.3711" layer="21"/>
<rectangle x1="0.0935" y1="0.3655" x2="0.222" y2="0.3711" layer="21"/>
<rectangle x1="0.6911" y1="0.3655" x2="0.8476" y2="0.3711" layer="21"/>
<rectangle x1="-0.3089" y1="0.3711" x2="-0.1021" y2="0.3767" layer="21"/>
<rectangle x1="0.0935" y1="0.3711" x2="0.222" y2="0.3767" layer="21"/>
<rectangle x1="0.6967" y1="0.3711" x2="0.8476" y2="0.3767" layer="21"/>
<rectangle x1="-0.3145" y1="0.3767" x2="-0.1133" y2="0.3823" layer="21"/>
<rectangle x1="0.0935" y1="0.3767" x2="0.2276" y2="0.3823" layer="21"/>
<rectangle x1="0.7023" y1="0.3767" x2="0.8532" y2="0.3823" layer="21"/>
<rectangle x1="-0.32" y1="0.3823" x2="-0.1189" y2="0.3879" layer="21"/>
<rectangle x1="0.0991" y1="0.3823" x2="0.2276" y2="0.3879" layer="21"/>
<rectangle x1="0.7079" y1="0.3823" x2="0.8532" y2="0.3879" layer="21"/>
<rectangle x1="-0.3256" y1="0.3879" x2="-0.13" y2="0.3934" layer="21"/>
<rectangle x1="0.0991" y1="0.3879" x2="0.2276" y2="0.3934" layer="21"/>
<rectangle x1="0.7079" y1="0.3879" x2="0.8588" y2="0.3934" layer="21"/>
<rectangle x1="-0.3256" y1="0.3934" x2="-0.1356" y2="0.399" layer="21"/>
<rectangle x1="0.0991" y1="0.3934" x2="0.2276" y2="0.399" layer="21"/>
<rectangle x1="0.7135" y1="0.3934" x2="0.8588" y2="0.399" layer="21"/>
<rectangle x1="-0.3312" y1="0.399" x2="-0.1468" y2="0.4046" layer="21"/>
<rectangle x1="0.0991" y1="0.399" x2="0.2276" y2="0.4046" layer="21"/>
<rectangle x1="0.7191" y1="0.399" x2="0.8644" y2="0.4046" layer="21"/>
<rectangle x1="-0.3368" y1="0.4046" x2="-0.1524" y2="0.4102" layer="21"/>
<rectangle x1="0.0991" y1="0.4046" x2="0.2332" y2="0.4102" layer="21"/>
<rectangle x1="0.7191" y1="0.4046" x2="0.8644" y2="0.4102" layer="21"/>
<rectangle x1="-0.3424" y1="0.4102" x2="-0.158" y2="0.4158" layer="21"/>
<rectangle x1="0.0991" y1="0.4102" x2="0.2332" y2="0.4158" layer="21"/>
<rectangle x1="0.7247" y1="0.4102" x2="0.8644" y2="0.4158" layer="21"/>
<rectangle x1="-0.348" y1="0.4158" x2="-0.1636" y2="0.4214" layer="21"/>
<rectangle x1="0.0991" y1="0.4158" x2="0.2332" y2="0.4214" layer="21"/>
<rectangle x1="0.7247" y1="0.4158" x2="0.87" y2="0.4214" layer="21"/>
<rectangle x1="-0.3536" y1="0.4214" x2="-0.1692" y2="0.427" layer="21"/>
<rectangle x1="0.1046" y1="0.4214" x2="0.2332" y2="0.427" layer="21"/>
<rectangle x1="0.7303" y1="0.4214" x2="0.87" y2="0.427" layer="21"/>
<rectangle x1="-0.3592" y1="0.427" x2="-0.1748" y2="0.4326" layer="21"/>
<rectangle x1="0.1046" y1="0.427" x2="0.2388" y2="0.4326" layer="21"/>
<rectangle x1="0.7303" y1="0.427" x2="0.8755" y2="0.4326" layer="21"/>
<rectangle x1="-0.3647" y1="0.4326" x2="-0.1803" y2="0.4382" layer="21"/>
<rectangle x1="0.1046" y1="0.4326" x2="0.2388" y2="0.4382" layer="21"/>
<rectangle x1="0.7358" y1="0.4326" x2="0.8755" y2="0.4382" layer="21"/>
<rectangle x1="-0.3647" y1="0.4382" x2="-0.1915" y2="0.4437" layer="21"/>
<rectangle x1="0.1046" y1="0.4382" x2="0.2388" y2="0.4437" layer="21"/>
<rectangle x1="0.7414" y1="0.4382" x2="0.8755" y2="0.4437" layer="21"/>
<rectangle x1="-0.3703" y1="0.4437" x2="-0.1971" y2="0.4493" layer="21"/>
<rectangle x1="0.1102" y1="0.4437" x2="0.2388" y2="0.4493" layer="21"/>
<rectangle x1="0.7414" y1="0.4437" x2="0.8811" y2="0.4493" layer="21"/>
<rectangle x1="-0.3759" y1="0.4493" x2="-0.2027" y2="0.4549" layer="21"/>
<rectangle x1="0.1102" y1="0.4493" x2="0.2443" y2="0.4549" layer="21"/>
<rectangle x1="0.7414" y1="0.4493" x2="0.8811" y2="0.4549" layer="21"/>
<rectangle x1="-0.3815" y1="0.4549" x2="-0.2083" y2="0.4605" layer="21"/>
<rectangle x1="0.1102" y1="0.4549" x2="0.2443" y2="0.4605" layer="21"/>
<rectangle x1="0.747" y1="0.4549" x2="0.8867" y2="0.4605" layer="21"/>
<rectangle x1="-0.3871" y1="0.4605" x2="-0.2139" y2="0.4661" layer="21"/>
<rectangle x1="0.1102" y1="0.4605" x2="0.2443" y2="0.4661" layer="21"/>
<rectangle x1="0.747" y1="0.4605" x2="0.8867" y2="0.4661" layer="21"/>
<rectangle x1="-0.3927" y1="0.4661" x2="-0.2195" y2="0.4717" layer="21"/>
<rectangle x1="0.1158" y1="0.4661" x2="0.2443" y2="0.4717" layer="21"/>
<rectangle x1="0.7526" y1="0.4661" x2="0.8867" y2="0.4717" layer="21"/>
<rectangle x1="-0.3983" y1="0.4717" x2="-0.225" y2="0.4773" layer="21"/>
<rectangle x1="0.1158" y1="0.4717" x2="0.2499" y2="0.4773" layer="21"/>
<rectangle x1="0.7526" y1="0.4717" x2="0.8923" y2="0.4773" layer="21"/>
<rectangle x1="-0.4039" y1="0.4773" x2="-0.2306" y2="0.4829" layer="21"/>
<rectangle x1="0.1158" y1="0.4773" x2="0.2555" y2="0.4829" layer="21"/>
<rectangle x1="0.7526" y1="0.4773" x2="0.8923" y2="0.4829" layer="21"/>
<rectangle x1="-0.4039" y1="0.4829" x2="-0.2362" y2="0.4884" layer="21"/>
<rectangle x1="0.1158" y1="0.4829" x2="0.2555" y2="0.4884" layer="21"/>
<rectangle x1="0.7582" y1="0.4829" x2="0.8979" y2="0.4884" layer="21"/>
<rectangle x1="-0.4094" y1="0.4884" x2="-0.2418" y2="0.494" layer="21"/>
<rectangle x1="0.1214" y1="0.4884" x2="0.2611" y2="0.494" layer="21"/>
<rectangle x1="0.7582" y1="0.4884" x2="0.8979" y2="0.494" layer="21"/>
<rectangle x1="-0.415" y1="0.494" x2="-0.2474" y2="0.4996" layer="21"/>
<rectangle x1="0.1214" y1="0.494" x2="0.2611" y2="0.4996" layer="21"/>
<rectangle x1="0.7638" y1="0.494" x2="0.8979" y2="0.4996" layer="21"/>
<rectangle x1="-0.415" y1="0.4996" x2="-0.253" y2="0.5052" layer="21"/>
<rectangle x1="0.1214" y1="0.4996" x2="0.2667" y2="0.5052" layer="21"/>
<rectangle x1="0.7638" y1="0.4996" x2="0.8979" y2="0.5052" layer="21"/>
<rectangle x1="-0.4206" y1="0.5052" x2="-0.253" y2="0.5108" layer="21"/>
<rectangle x1="0.1214" y1="0.5052" x2="0.2667" y2="0.5108" layer="21"/>
<rectangle x1="0.7638" y1="0.5052" x2="0.8979" y2="0.5108" layer="21"/>
<rectangle x1="-0.4206" y1="0.5108" x2="-0.2586" y2="0.5164" layer="21"/>
<rectangle x1="0.127" y1="0.5108" x2="0.2723" y2="0.5164" layer="21"/>
<rectangle x1="0.7694" y1="0.5108" x2="0.8979" y2="0.5164" layer="21"/>
<rectangle x1="-0.4262" y1="0.5164" x2="-0.2642" y2="0.522" layer="21"/>
<rectangle x1="0.127" y1="0.5164" x2="0.2779" y2="0.522" layer="21"/>
<rectangle x1="0.7694" y1="0.5164" x2="0.8979" y2="0.522" layer="21"/>
<rectangle x1="-0.4318" y1="0.522" x2="-0.2697" y2="0.5276" layer="21"/>
<rectangle x1="0.1326" y1="0.522" x2="0.2779" y2="0.5276" layer="21"/>
<rectangle x1="0.7694" y1="0.522" x2="0.9035" y2="0.5276" layer="21"/>
<rectangle x1="-0.4318" y1="0.5276" x2="-0.2753" y2="0.5331" layer="21"/>
<rectangle x1="0.1326" y1="0.5276" x2="0.2835" y2="0.5331" layer="21"/>
<rectangle x1="0.775" y1="0.5276" x2="0.9035" y2="0.5331" layer="21"/>
<rectangle x1="-0.4374" y1="0.5331" x2="-0.2809" y2="0.5387" layer="21"/>
<rectangle x1="0.1382" y1="0.5331" x2="0.2835" y2="0.5387" layer="21"/>
<rectangle x1="0.775" y1="0.5331" x2="0.9035" y2="0.5387" layer="21"/>
<rectangle x1="-0.4374" y1="0.5387" x2="-0.2865" y2="0.5443" layer="21"/>
<rectangle x1="0.1382" y1="0.5387" x2="0.2891" y2="0.5443" layer="21"/>
<rectangle x1="0.775" y1="0.5387" x2="0.9035" y2="0.5443" layer="21"/>
<rectangle x1="-0.443" y1="0.5443" x2="-0.2921" y2="0.5499" layer="21"/>
<rectangle x1="0.1438" y1="0.5443" x2="0.2946" y2="0.5499" layer="21"/>
<rectangle x1="0.775" y1="0.5443" x2="0.9035" y2="0.5499" layer="21"/>
<rectangle x1="-0.4486" y1="0.5499" x2="-0.2921" y2="0.5555" layer="21"/>
<rectangle x1="0.1494" y1="0.5499" x2="0.3002" y2="0.5555" layer="21"/>
<rectangle x1="0.775" y1="0.5499" x2="0.9035" y2="0.5555" layer="21"/>
<rectangle x1="-0.4486" y1="0.5555" x2="-0.2977" y2="0.5611" layer="21"/>
<rectangle x1="0.1494" y1="0.5555" x2="0.3058" y2="0.5611" layer="21"/>
<rectangle x1="0.775" y1="0.5555" x2="0.9035" y2="0.5611" layer="21"/>
<rectangle x1="-0.4542" y1="0.5611" x2="-0.3033" y2="0.5667" layer="21"/>
<rectangle x1="0.1549" y1="0.5611" x2="0.3114" y2="0.5667" layer="21"/>
<rectangle x1="0.775" y1="0.5611" x2="0.9035" y2="0.5667" layer="21"/>
<rectangle x1="-0.4542" y1="0.5667" x2="-0.3033" y2="0.5723" layer="21"/>
<rectangle x1="0.1549" y1="0.5667" x2="0.317" y2="0.5723" layer="21"/>
<rectangle x1="0.775" y1="0.5667" x2="0.9091" y2="0.5723" layer="21"/>
<rectangle x1="-0.4597" y1="0.5723" x2="-0.3089" y2="0.5779" layer="21"/>
<rectangle x1="0.1605" y1="0.5723" x2="0.317" y2="0.5779" layer="21"/>
<rectangle x1="0.7805" y1="0.5723" x2="0.9091" y2="0.5779" layer="21"/>
<rectangle x1="-0.4653" y1="0.5779" x2="-0.3145" y2="0.5834" layer="21"/>
<rectangle x1="0.1605" y1="0.5779" x2="0.3226" y2="0.5834" layer="21"/>
<rectangle x1="0.7805" y1="0.5779" x2="0.9091" y2="0.5834" layer="21"/>
<rectangle x1="-0.4653" y1="0.5834" x2="-0.3145" y2="0.589" layer="21"/>
<rectangle x1="0.1661" y1="0.5834" x2="0.3282" y2="0.589" layer="21"/>
<rectangle x1="0.7805" y1="0.5834" x2="0.9091" y2="0.589" layer="21"/>
<rectangle x1="-0.4709" y1="0.589" x2="-0.32" y2="0.5946" layer="21"/>
<rectangle x1="0.1717" y1="0.589" x2="0.3338" y2="0.5946" layer="21"/>
<rectangle x1="0.7805" y1="0.589" x2="0.9091" y2="0.5946" layer="21"/>
<rectangle x1="-0.4709" y1="0.5946" x2="-0.32" y2="0.6002" layer="21"/>
<rectangle x1="0.1717" y1="0.5946" x2="0.3393" y2="0.6002" layer="21"/>
<rectangle x1="0.7805" y1="0.5946" x2="0.9091" y2="0.6002" layer="21"/>
<rectangle x1="-0.4765" y1="0.6002" x2="-0.3256" y2="0.6058" layer="21"/>
<rectangle x1="0.1773" y1="0.6002" x2="0.3449" y2="0.6058" layer="21"/>
<rectangle x1="0.7805" y1="0.6002" x2="0.9091" y2="0.6058" layer="21"/>
<rectangle x1="-0.4765" y1="0.6058" x2="-0.3312" y2="0.6114" layer="21"/>
<rectangle x1="0.1773" y1="0.6058" x2="0.3505" y2="0.6114" layer="21"/>
<rectangle x1="0.7805" y1="0.6058" x2="0.9091" y2="0.6114" layer="21"/>
<rectangle x1="-0.4821" y1="0.6114" x2="-0.3312" y2="0.617" layer="21"/>
<rectangle x1="0.1829" y1="0.6114" x2="0.3561" y2="0.617" layer="21"/>
<rectangle x1="0.7805" y1="0.6114" x2="0.9091" y2="0.617" layer="21"/>
<rectangle x1="-0.4821" y1="0.617" x2="-0.3368" y2="0.6226" layer="21"/>
<rectangle x1="0.1885" y1="0.617" x2="0.3673" y2="0.6226" layer="21"/>
<rectangle x1="0.7805" y1="0.617" x2="0.9091" y2="0.6226" layer="21"/>
<rectangle x1="-0.4877" y1="0.6226" x2="-0.3368" y2="0.6281" layer="21"/>
<rectangle x1="0.1941" y1="0.6226" x2="0.3729" y2="0.6281" layer="21"/>
<rectangle x1="0.7805" y1="0.6226" x2="0.9091" y2="0.6281" layer="21"/>
<rectangle x1="-0.4877" y1="0.6281" x2="-0.3424" y2="0.6337" layer="21"/>
<rectangle x1="0.1996" y1="0.6281" x2="0.3785" y2="0.6337" layer="21"/>
<rectangle x1="0.775" y1="0.6281" x2="0.9091" y2="0.6337" layer="21"/>
<rectangle x1="-0.4877" y1="0.6337" x2="-0.348" y2="0.6393" layer="21"/>
<rectangle x1="0.2052" y1="0.6337" x2="0.384" y2="0.6393" layer="21"/>
<rectangle x1="0.775" y1="0.6337" x2="0.9091" y2="0.6393" layer="21"/>
<rectangle x1="-0.493" y1="0.6393" x2="-0.348" y2="0.6449" layer="21"/>
<rectangle x1="0.2052" y1="0.6393" x2="0.3896" y2="0.6449" layer="21"/>
<rectangle x1="0.775" y1="0.6393" x2="0.9091" y2="0.6449" layer="21"/>
<rectangle x1="-0.493" y1="0.6449" x2="-0.3536" y2="0.6505" layer="21"/>
<rectangle x1="0.2108" y1="0.6449" x2="0.3952" y2="0.6505" layer="21"/>
<rectangle x1="0.775" y1="0.6449" x2="0.9035" y2="0.6505" layer="21"/>
<rectangle x1="-0.4986" y1="0.6505" x2="-0.3536" y2="0.6561" layer="21"/>
<rectangle x1="0.2164" y1="0.6505" x2="0.4064" y2="0.6561" layer="21"/>
<rectangle x1="0.7694" y1="0.6505" x2="0.9035" y2="0.6561" layer="21"/>
<rectangle x1="-0.4986" y1="0.6561" x2="-0.3592" y2="0.6617" layer="21"/>
<rectangle x1="0.222" y1="0.6561" x2="0.4176" y2="0.6617" layer="21"/>
<rectangle x1="0.7694" y1="0.6561" x2="0.9035" y2="0.6617" layer="21"/>
<rectangle x1="-0.5042" y1="0.6617" x2="-0.3647" y2="0.6673" layer="21"/>
<rectangle x1="0.2276" y1="0.6617" x2="0.4288" y2="0.6673" layer="21"/>
<rectangle x1="0.7638" y1="0.6617" x2="0.9035" y2="0.6673" layer="21"/>
<rectangle x1="-0.5042" y1="0.6673" x2="-0.3647" y2="0.6728" layer="21"/>
<rectangle x1="0.2332" y1="0.6673" x2="0.4399" y2="0.6728" layer="21"/>
<rectangle x1="0.7638" y1="0.6673" x2="0.8979" y2="0.6728" layer="21"/>
<rectangle x1="-0.5042" y1="0.6728" x2="-0.3647" y2="0.6784" layer="21"/>
<rectangle x1="0.2332" y1="0.6728" x2="0.4511" y2="0.6784" layer="21"/>
<rectangle x1="0.7582" y1="0.6728" x2="0.8979" y2="0.6784" layer="21"/>
<rectangle x1="-0.5098" y1="0.6784" x2="-0.3703" y2="0.684" layer="21"/>
<rectangle x1="0.2388" y1="0.6784" x2="0.4623" y2="0.684" layer="21"/>
<rectangle x1="0.7526" y1="0.6784" x2="0.8979" y2="0.684" layer="21"/>
<rectangle x1="-0.5098" y1="0.684" x2="-0.3703" y2="0.6896" layer="21"/>
<rectangle x1="0.2443" y1="0.684" x2="0.4788" y2="0.6896" layer="21"/>
<rectangle x1="0.747" y1="0.684" x2="0.8979" y2="0.6896" layer="21"/>
<rectangle x1="-0.5154" y1="0.6896" x2="-0.3759" y2="0.6952" layer="21"/>
<rectangle x1="0.2499" y1="0.6896" x2="0.4956" y2="0.6952" layer="21"/>
<rectangle x1="0.7414" y1="0.6896" x2="0.8923" y2="0.6952" layer="21"/>
<rectangle x1="-0.5154" y1="0.6952" x2="-0.3759" y2="0.7008" layer="21"/>
<rectangle x1="0.2555" y1="0.6952" x2="0.5123" y2="0.7008" layer="21"/>
<rectangle x1="0.7358" y1="0.6952" x2="0.8923" y2="0.7008" layer="21"/>
<rectangle x1="-0.521" y1="0.7008" x2="-0.3815" y2="0.7064" layer="21"/>
<rectangle x1="0.2667" y1="0.7008" x2="0.5347" y2="0.7064" layer="21"/>
<rectangle x1="0.7247" y1="0.7008" x2="0.8867" y2="0.7064" layer="21"/>
<rectangle x1="-0.521" y1="0.7064" x2="-0.3815" y2="0.712" layer="21"/>
<rectangle x1="0.2723" y1="0.7064" x2="0.557" y2="0.712" layer="21"/>
<rectangle x1="0.7135" y1="0.7064" x2="0.8867" y2="0.712" layer="21"/>
<rectangle x1="-0.521" y1="0.712" x2="-0.3815" y2="0.7176" layer="21"/>
<rectangle x1="0.2779" y1="0.712" x2="0.6017" y2="0.7176" layer="21"/>
<rectangle x1="0.6911" y1="0.712" x2="0.8811" y2="0.7176" layer="21"/>
<rectangle x1="-0.5265" y1="0.7176" x2="-0.3871" y2="0.7231" layer="21"/>
<rectangle x1="0.2835" y1="0.7176" x2="0.8811" y2="0.7231" layer="21"/>
<rectangle x1="-0.5265" y1="0.7231" x2="-0.3871" y2="0.7287" layer="21"/>
<rectangle x1="0.2891" y1="0.7231" x2="0.8755" y2="0.7287" layer="21"/>
<rectangle x1="-0.5321" y1="0.7287" x2="-0.3927" y2="0.7343" layer="21"/>
<rectangle x1="0.3002" y1="0.7287" x2="0.8755" y2="0.7343" layer="21"/>
<rectangle x1="-0.5321" y1="0.7343" x2="-0.3927" y2="0.7399" layer="21"/>
<rectangle x1="0.3058" y1="0.7343" x2="0.87" y2="0.7399" layer="21"/>
<rectangle x1="-0.5321" y1="0.7399" x2="-0.3983" y2="0.7455" layer="21"/>
<rectangle x1="0.3114" y1="0.7399" x2="0.87" y2="0.7455" layer="21"/>
<rectangle x1="-0.5321" y1="0.7455" x2="-0.3983" y2="0.7511" layer="21"/>
<rectangle x1="0.317" y1="0.7455" x2="0.8644" y2="0.7511" layer="21"/>
<rectangle x1="-0.5377" y1="0.7511" x2="-0.3983" y2="0.7567" layer="21"/>
<rectangle x1="0.3226" y1="0.7511" x2="0.8644" y2="0.7567" layer="21"/>
<rectangle x1="-0.5377" y1="0.7567" x2="-0.4039" y2="0.7623" layer="21"/>
<rectangle x1="0.3338" y1="0.7567" x2="0.8588" y2="0.7623" layer="21"/>
<rectangle x1="-0.5377" y1="0.7623" x2="-0.4039" y2="0.7678" layer="21"/>
<rectangle x1="0.3449" y1="0.7623" x2="0.8532" y2="0.7678" layer="21"/>
<rectangle x1="-0.5377" y1="0.7678" x2="-0.4094" y2="0.7734" layer="21"/>
<rectangle x1="0.3561" y1="0.7678" x2="0.8476" y2="0.7734" layer="21"/>
<rectangle x1="-0.5377" y1="0.7734" x2="-0.4094" y2="0.779" layer="21"/>
<rectangle x1="0.3673" y1="0.7734" x2="0.842" y2="0.779" layer="21"/>
<rectangle x1="-0.5433" y1="0.779" x2="-0.4094" y2="0.7846" layer="21"/>
<rectangle x1="0.3785" y1="0.779" x2="0.8364" y2="0.7846" layer="21"/>
<rectangle x1="-0.5433" y1="0.7846" x2="-0.4094" y2="0.7902" layer="21"/>
<rectangle x1="0.3896" y1="0.7846" x2="0.8308" y2="0.7902" layer="21"/>
<rectangle x1="-0.5433" y1="0.7902" x2="-0.415" y2="0.7958" layer="21"/>
<rectangle x1="0.4008" y1="0.7902" x2="0.8252" y2="0.7958" layer="21"/>
<rectangle x1="-0.5433" y1="0.7958" x2="-0.415" y2="0.8014" layer="21"/>
<rectangle x1="0.412" y1="0.7958" x2="0.8197" y2="0.8014" layer="21"/>
<rectangle x1="-0.5489" y1="0.8014" x2="-0.415" y2="0.807" layer="21"/>
<rectangle x1="0.4232" y1="0.8014" x2="0.8085" y2="0.807" layer="21"/>
<rectangle x1="-0.5489" y1="0.807" x2="-0.415" y2="0.8125" layer="21"/>
<rectangle x1="0.4399" y1="0.807" x2="0.7973" y2="0.8125" layer="21"/>
<rectangle x1="-0.5489" y1="0.8125" x2="-0.415" y2="0.8181" layer="21"/>
<rectangle x1="0.4623" y1="0.8125" x2="0.7861" y2="0.8181" layer="21"/>
<rectangle x1="-0.5489" y1="0.8181" x2="-0.4206" y2="0.8237" layer="21"/>
<rectangle x1="0.4788" y1="0.8181" x2="0.775" y2="0.8237" layer="21"/>
<rectangle x1="-0.5489" y1="0.8237" x2="-0.4206" y2="0.8293" layer="21"/>
<rectangle x1="0.4956" y1="0.8237" x2="0.7638" y2="0.8293" layer="21"/>
<rectangle x1="-0.5545" y1="0.8293" x2="-0.4206" y2="0.8349" layer="21"/>
<rectangle x1="0.5123" y1="0.8293" x2="0.7526" y2="0.8349" layer="21"/>
<rectangle x1="-0.5545" y1="0.8349" x2="-0.4206" y2="0.8405" layer="21"/>
<rectangle x1="0.5514" y1="0.8349" x2="0.7303" y2="0.8405" layer="21"/>
<rectangle x1="-0.5545" y1="0.8405" x2="-0.4262" y2="0.8461" layer="21"/>
<rectangle x1="0.5961" y1="0.8405" x2="0.7079" y2="0.8461" layer="21"/>
<rectangle x1="-0.5545" y1="0.8461" x2="-0.4262" y2="0.8517" layer="21"/>
<rectangle x1="-0.5601" y1="0.8517" x2="-0.4262" y2="0.8573" layer="21"/>
<rectangle x1="-0.5601" y1="0.8573" x2="-0.4262" y2="0.8628" layer="21"/>
<rectangle x1="-0.5601" y1="0.8628" x2="-0.4262" y2="0.8684" layer="21"/>
<rectangle x1="-0.5601" y1="0.8684" x2="-0.4318" y2="0.874" layer="21"/>
<rectangle x1="-0.5601" y1="0.874" x2="-0.4318" y2="0.8796" layer="21"/>
<rectangle x1="-0.5601" y1="0.8796" x2="-0.4318" y2="0.8852" layer="21"/>
<rectangle x1="-0.5601" y1="0.8852" x2="-0.4318" y2="0.8908" layer="21"/>
<rectangle x1="-0.5601" y1="0.8908" x2="-0.4318" y2="0.8964" layer="21"/>
<rectangle x1="-0.5601" y1="0.8964" x2="-0.4318" y2="0.902" layer="21"/>
<rectangle x1="-0.5657" y1="0.902" x2="-0.4318" y2="0.9075" layer="21"/>
<rectangle x1="-0.5657" y1="0.9075" x2="-0.4374" y2="0.9131" layer="21"/>
<rectangle x1="-0.5657" y1="0.9131" x2="-0.4374" y2="0.9187" layer="21"/>
<rectangle x1="-0.5657" y1="0.9187" x2="-0.4374" y2="0.9243" layer="21"/>
<rectangle x1="-0.5657" y1="0.9243" x2="-0.4374" y2="0.9299" layer="21"/>
<rectangle x1="-0.5657" y1="0.9299" x2="-0.4374" y2="0.9355" layer="21"/>
<rectangle x1="-0.5657" y1="0.9355" x2="-0.4374" y2="0.9411" layer="21"/>
<rectangle x1="-0.5657" y1="0.9411" x2="-0.4374" y2="0.9467" layer="21"/>
<rectangle x1="-0.5657" y1="0.9467" x2="-0.4374" y2="0.9522" layer="21"/>
<rectangle x1="-0.5657" y1="0.9522" x2="-0.4374" y2="0.9578" layer="21"/>
<rectangle x1="-0.5657" y1="0.9578" x2="-0.4374" y2="0.9634" layer="21"/>
<rectangle x1="-0.5712" y1="0.9634" x2="-0.4374" y2="0.969" layer="21"/>
<rectangle x1="-0.5712" y1="0.969" x2="-0.443" y2="0.9746" layer="21"/>
<rectangle x1="-0.5712" y1="0.9746" x2="-0.443" y2="0.9802" layer="21"/>
<rectangle x1="-0.5712" y1="0.9802" x2="-0.443" y2="0.9858" layer="21"/>
<rectangle x1="-0.5712" y1="0.9858" x2="-0.443" y2="0.9914" layer="21"/>
<rectangle x1="-0.5712" y1="0.9914" x2="-0.443" y2="0.997" layer="21"/>
<rectangle x1="-0.5712" y1="0.997" x2="-0.443" y2="1.0025" layer="21"/>
<rectangle x1="-0.5712" y1="1.0025" x2="-0.443" y2="1.0081" layer="21"/>
<rectangle x1="-0.5712" y1="1.0081" x2="-0.443" y2="1.0137" layer="21"/>
<rectangle x1="-0.5712" y1="1.0137" x2="-0.443" y2="1.0193" layer="21"/>
<rectangle x1="-0.5657" y1="1.0193" x2="-0.4486" y2="1.0249" layer="21"/>
<rectangle x1="-0.5657" y1="1.0249" x2="-0.4486" y2="1.0305" layer="21"/>
<rectangle x1="-0.5601" y1="1.0305" x2="-0.4542" y2="1.0361" layer="21"/>
<rectangle x1="-0.5601" y1="1.0361" x2="-0.4542" y2="1.0417" layer="21"/>
<rectangle x1="-0.5545" y1="1.0417" x2="-0.4597" y2="1.0472" layer="21"/>
<rectangle x1="-0.5489" y1="1.0472" x2="-0.4653" y2="1.0528" layer="21"/>
<rectangle x1="-0.5377" y1="1.0528" x2="-0.4765" y2="1.0584" layer="21"/>
<rectangle x1="-0.5265" y1="1.0584" x2="-0.4877" y2="1.064" layer="21"/>
</package>
<package name="PETAL-TINY">
<pad name="1" x="0" y="0" drill="1.016" diameter="2.032" rot="R90" stop="no" thermals="no"/>
<polygon width="0.2032" layer="29">
<vertex x="-1.27" y="-0.127"/>
<vertex x="-1.27" y="0.254" curve="-90"/>
<vertex x="0" y="1.524" curve="-90"/>
<vertex x="1.27" y="0.254"/>
<vertex x="1.27" y="-0.127" curve="90"/>
</polygon>
<polygon width="0.2032" layer="1">
<vertex x="-1.27" y="-0.127"/>
<vertex x="-1.27" y="0.254" curve="-90"/>
<vertex x="0" y="1.524" curve="-90"/>
<vertex x="1.27" y="0.254"/>
<vertex x="1.27" y="-0.127" curve="90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0.0025" y="-0.9525" curve="-90"/>
<vertex x="-0.9524" y="-0.0228" curve="-90.011749"/>
<vertex x="0" y="0.9526" curve="-90"/>
<vertex x="0.95" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="-0.4445" curve="-90.012891"/>
<vertex x="-0.4445" y="-0.0203" curve="-90"/>
<vertex x="0" y="0.447" curve="-90"/>
<vertex x="0.4419" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.2032" layer="30">
<vertex x="1.27" y="-0.127"/>
<vertex x="1.27" y="0.254" curve="90"/>
<vertex x="0" y="1.524" curve="90"/>
<vertex x="-1.27" y="0.254"/>
<vertex x="-1.27" y="-0.127" curve="-90"/>
</polygon>
<polygon width="0.2032" layer="16">
<vertex x="-1.27" y="-0.127"/>
<vertex x="-1.27" y="0.254" curve="-90"/>
<vertex x="0" y="1.524" curve="-90"/>
<vertex x="1.27" y="0.254"/>
<vertex x="1.27" y="-0.127" curve="90"/>
</polygon>
</package>
<package name="PETAL-MEDIUM-2SIDE-NOHOLE">
<polygon width="0.127" layer="1">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="16">
<vertex x="0" y="-3.81" curve="-90"/>
<vertex x="-3.81" y="0" curve="73.739795"/>
<vertex x="3.81" y="0" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0" y="-3.81" curve="-90"/>
<vertex x="-3.81" y="0" curve="73.739795"/>
<vertex x="3.81" y="0" curve="-90"/>
</polygon>
</package>
<package name="PETAL-MEDIUM-NOHOLE">
<polygon width="0.127" layer="1">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="-3.81" curve="90"/>
<vertex x="3.81" y="0" curve="-73.739795"/>
<vertex x="-3.81" y="0" curve="90"/>
</polygon>
</package>
<package name="SIMPLE_HOLE">
<pad name="P$1" x="0" y="0" drill="2.54" diameter="3.048"/>
<text x="1.905" y="-0.127" size="0.4064" layer="25">&gt;NAME</text>
</package>
<package name="SIMPLE_HOLE_SM">
<pad name="P$1" x="0" y="0" drill="1.778" diameter="2.286"/>
</package>
</packages>
<symbols>
<symbol name="BUTTONHOLE">
<wire x1="-7.62" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94" curve="-180"/>
<wire x1="0" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="2.54" width="0.254" layer="94" curve="-180"/>
<circle x="-7.62" y="0" radius="1.27" width="0.254" layer="94"/>
<circle x="0" y="0" radius="1.27" width="0.254" layer="94"/>
<text x="-2.54" y="3.048" size="1.27" layer="95">&gt;NAME</text>
<text x="-2.54" y="-4.318" size="1.27" layer="96">&gt;VALUE</text>
<pin name="P$1" x="-3.81" y="5.08" visible="off" length="middle" rot="R270"/>
</symbol>
<symbol name="LETTER_L">
<wire x1="0" y1="185.42" x2="248.92" y2="185.42" width="0.4064" layer="94"/>
<wire x1="248.92" y1="185.42" x2="248.92" y2="0" width="0.4064" layer="94"/>
<wire x1="0" y1="185.42" x2="0" y2="0" width="0.4064" layer="94"/>
<wire x1="0" y1="0" x2="248.92" y2="0" width="0.4064" layer="94"/>
</symbol>
<symbol name="DOCFIELD">
<wire x1="0" y1="0" x2="71.12" y2="0" width="0.254" layer="94"/>
<wire x1="101.6" y1="15.24" x2="87.63" y2="15.24" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="71.12" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="0" y2="15.24" width="0.254" layer="94"/>
<wire x1="101.6" y1="15.24" x2="101.6" y2="5.08" width="0.254" layer="94"/>
<wire x1="71.12" y1="5.08" x2="71.12" y2="0" width="0.254" layer="94"/>
<wire x1="71.12" y1="5.08" x2="87.63" y2="5.08" width="0.254" layer="94"/>
<wire x1="71.12" y1="0" x2="101.6" y2="0" width="0.254" layer="94"/>
<wire x1="87.63" y1="15.24" x2="87.63" y2="5.08" width="0.254" layer="94"/>
<wire x1="87.63" y1="15.24" x2="0" y2="15.24" width="0.254" layer="94"/>
<wire x1="87.63" y1="5.08" x2="101.6" y2="5.08" width="0.254" layer="94"/>
<wire x1="101.6" y1="5.08" x2="101.6" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="15.24" x2="0" y2="22.86" width="0.254" layer="94"/>
<wire x1="101.6" y1="35.56" x2="0" y2="35.56" width="0.254" layer="94"/>
<wire x1="101.6" y1="35.56" x2="101.6" y2="22.86" width="0.254" layer="94"/>
<wire x1="0" y1="22.86" x2="101.6" y2="22.86" width="0.254" layer="94"/>
<wire x1="0" y1="22.86" x2="0" y2="35.56" width="0.254" layer="94"/>
<wire x1="101.6" y1="22.86" x2="101.6" y2="15.24" width="0.254" layer="94"/>
<text x="1.27" y="1.27" size="2.54" layer="94" font="vector">Date:</text>
<text x="12.7" y="1.27" size="2.54" layer="94" font="vector">&gt;LAST_DATE_TIME</text>
<text x="72.39" y="1.27" size="2.54" layer="94" font="vector">Sheet:</text>
<text x="86.36" y="1.27" size="2.54" layer="94" font="vector">&gt;SHEET</text>
<text x="88.9" y="11.43" size="2.54" layer="94" font="vector">REV:</text>
<text x="1.27" y="19.05" size="2.54" layer="94" font="vector">TITLE:</text>
<text x="1.27" y="11.43" size="2.54" layer="94" font="vector">Document Number:</text>
</symbol>
<symbol name="SEWTAP-NOHOLE">
<wire x1="0.762" y1="0.762" x2="0.762" y2="-0.762" width="0.1524" layer="94" curve="180"/>
</symbol>
<symbol name="SEWTAP">
<wire x1="0" y1="0" x2="-2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="0.762" y1="0.762" x2="0.762" y2="-0.762" width="0.1524" layer="94" curve="180"/>
<pin name="1" x="-2.54" y="0" visible="off" length="point" rot="R180"/>
</symbol>
<symbol name="LOGO-LP">
<wire x1="-2.54" y1="5.08" x2="-2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="12.7" y2="-2.54" width="0.254" layer="94"/>
<wire x1="12.7" y1="-2.54" x2="12.7" y2="5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="5.08" x2="-2.54" y2="5.08" width="0.254" layer="94"/>
<text x="-0.254" y="0.254" size="1.9304" layer="94">LilyPad</text>
</symbol>
<symbol name="SEWTAP-NEW">
<wire x1="0" y1="0" x2="-2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="0.762" y1="0.762" x2="0.762" y2="-0.762" width="0.1524" layer="94" curve="180"/>
<pin name="1" x="-2.54" y="0" visible="off" length="point" rot="R180"/>
</symbol>
<symbol name="LED">
<wire x1="1.27" y1="0" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="-0.762" x2="-3.429" y2="-2.159" width="0.1524" layer="94"/>
<wire x1="-1.905" y1="-1.905" x2="-3.302" y2="-3.302" width="0.1524" layer="94"/>
<text x="3.556" y="-4.572" size="1.778" layer="95" rot="R90">&gt;NAME</text>
<text x="5.715" y="-4.572" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
<pin name="A" x="0" y="2.54" visible="off" length="short" direction="pas" rot="R270"/>
<pin name="C" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
<polygon width="0.1524" layer="94">
<vertex x="-3.429" y="-2.159"/>
<vertex x="-3.048" y="-1.27"/>
<vertex x="-2.54" y="-1.778"/>
</polygon>
<polygon width="0.1524" layer="94">
<vertex x="-3.302" y="-3.302"/>
<vertex x="-2.921" y="-2.413"/>
<vertex x="-2.413" y="-2.921"/>
</polygon>
</symbol>
<symbol name="SIMPLE_HOLE">
<circle x="0" y="0" radius="2.54" width="0.254" layer="94"/>
<pin name="P$1" x="-5.08" y="0" visible="off" length="short"/>
<text x="-2.54" y="-4.318" size="1.27" layer="94">&gt;NAME</text>
</symbol>
<symbol name="SIMPLE_HOLE_SM">
<circle x="0" y="0" radius="1.481059375" width="0.254" layer="94"/>
<pin name="P$1" x="-2.54" y="0" visible="off" length="point"/>
<wire x1="-2.54" y1="0" x2="-1.524" y2="0" width="0.254" layer="94"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="BUTTONHOLE" prefix="BH">
<gates>
<gate name="G$1" symbol="BUTTONHOLE" x="3.81" y="0"/>
</gates>
<devices>
<device name="LARGE" package="BUTTONHOLE">
<connects>
<connect gate="G$1" pin="P$1" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMALL" package="BUTTONHOLE-SM">
<connects>
<connect gate="G$1" pin="P$1" pad="P$3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SEWTAP-NOHOLE">
<gates>
<gate name="G$1" symbol="SEWTAP-NOHOLE" x="0" y="0"/>
</gates>
<devices>
<device name="1" package="PETAL-NOHOLE">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2" package="PETAL-NOHOLE-2SIDE">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3" package="PETAL-MEDIUM-2SIDE-NOHOLE">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="4" package="PETAL-MEDIUM-NOHOLE">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED" prefix="LED" uservalue="yes">
<description>&lt;b&gt;LEDs&lt;/b&gt;
Standard schematic elements and footprints for 5mm, 3mm, 1206, and 0603 sized LEDs. 5mm - Spark Fun Electronics SKU : Comp-SBL</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="1206" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LOGO-LP">
<gates>
<gate name="G$1" symbol="LOGO-LP" x="0" y="0"/>
</gates>
<devices>
<device name="LP" package="LOGO-LILYPAD">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="LPA" package="LOGO-LPA">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="L" package="LOGO-L">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="L-TINY" package="LOGO-L-TINY">
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="ARDUINO_ONLY" package="LOGO-A">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SEWTAP">
<gates>
<gate name="G$1" symbol="SEWTAP" x="2.54" y="0"/>
</gates>
<devices>
<device name="1" package="PETAL-LONG-1">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2" package="PETAL-LONG-2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3" package="PETAL-MEDIUM">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="5" package="PETAL-LARGE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="4" package="PETAL-SMALL">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="6" package="PETAL-SMALL-2SIDE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="7" package="PETAL-LARGE-2SIDE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="8" package="PETAL-MEDIUM-2SIDE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="9" package="PETAL-LONG-1-2SIDE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="10" package="PETAL-LONG-2-2SIDE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="11" package="PETAL-TINY">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SEW_HOLE" prefix="H">
<description>Simple sew-hole&lt;br&gt;
.1" diameter hole with 20mil annular ring</description>
<gates>
<gate name="G$1" symbol="SIMPLE_HOLE" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SIMPLE_HOLE">
<connects>
<connect gate="G$1" pin="P$1" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SEW_HOLE-SMALL" prefix="H">
<description>.070" hole with 20mil annular ring</description>
<gates>
<gate name="G$1" symbol="SIMPLE_HOLE_SM" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SIMPLE_HOLE_SM">
<connects>
<connect gate="G$1" pin="P$1" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/README.

















>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
SparkFun Electronics' preferred foot prints using Eagle v6.0 or greater. We've spent an enormous amount of time creating and checking these footprints and parts. If you enjoy using this library, please buy one of our products at http://www.sparkfun.com. Please also note that we guarantee that there are some messed up footprints in this library. We've tried to note which are proven and tested, but by downloading these files, you acknowledge that you are using the files at your own risk. We cannot be held responsible for faulty PCBs. Always check your parts against a 1:1 printout.

Licensing CC v3.0 Share-Alike (http://creativecommons.org/licenses/by-sa/3.0/) You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.

This is the complete SparkFun Electronics default foot prints for Eagle 6.0+. We switched to Eagle back in 2006 and have been extremely impressed with its ease of use and flexibility. As with any new software, it's like learning a new language and takes time. Do it. Eagle is great. If you need more information about how to use Eagle, checkout our Eagle Tutorials http://www.sparkfun.com/tutorials/108

The library associated with Eagle v5.11 and earlier is found here:
https://github.com/sparkfun/Old-SparkFun-Eagle-Library

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Aesthetics.lbr.

more than 10,000 changes

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-AnalogIC.lbr.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="no" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="no" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="no" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="no" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="no" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="no" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="no" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="no" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="no" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="no" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="no" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="no" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="16" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
<layer number="108" name="tplace-old" color="10" fill="1" visible="yes" active="yes"/>
<layer number="109" name="ref-old" color="11" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
<layer number="199" name="Contour" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find all manner of analog ICs- DACs, ADCs, video chips, op-amps, and others.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="SO08">
<description>&lt;b&gt;Small Outline Package&lt;/b&gt; Fits JEDEC packages (narrow SOIC-8)</description>
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="2" x="-0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="3" x="0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="4" x="1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="5" x="1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="6" x="0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="7" x="-0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="8" x="-1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="SO16L">
<description>&lt;b&gt;Small Outline Package&lt;/b&gt; .300 SIOC&lt;p&gt;
Source: http://www.maxim-ic.com/cgi-bin/packages?pkg=16%2FSOIC%2E300&amp;Type=Max</description>
<wire x1="4.8768" y1="3.7338" x2="-4.8768" y2="3.7338" width="0.1524" layer="21"/>
<wire x1="4.8768" y1="-3.7338" x2="5.2578" y2="-3.3528" width="0.1524" layer="21" curve="90"/>
<wire x1="-5.2578" y1="3.3528" x2="-4.8768" y2="3.7338" width="0.1524" layer="21" curve="-90"/>
<wire x1="4.8768" y1="3.7338" x2="5.2578" y2="3.3528" width="0.1524" layer="21" curve="-90"/>
<wire x1="-5.2578" y1="-3.3528" x2="-4.8768" y2="-3.7338" width="0.1524" layer="21" curve="90"/>
<wire x1="-4.8768" y1="-3.7338" x2="4.8768" y2="-3.7338" width="0.1524" layer="21"/>
<wire x1="5.2578" y1="-3.3528" x2="5.2578" y2="3.3528" width="0.1524" layer="21"/>
<wire x1="-5.2578" y1="3.3528" x2="-5.2578" y2="-3.3528" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="-3.3782" x2="5.2324" y2="-3.3782" width="0.0508" layer="21"/>
<wire x1="-5.2578" y1="1.27" x2="-5.2578" y2="-1.27" width="0.1524" layer="21" curve="-180"/>
<smd name="1" x="-4.445" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="2" x="-3.175" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="3" x="-1.905" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="4" x="-0.635" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="5" x="0.635" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="6" x="1.905" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="7" x="3.175" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="8" x="4.445" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="9" x="4.445" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="10" x="3.175" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="11" x="1.905" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="12" x="0.635" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="13" x="-0.635" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="14" x="-1.905" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="15" x="-3.175" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="16" x="-4.445" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<text x="-3.556" y="-0.762" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.588" y="-3.556" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<rectangle x1="-4.699" y1="-3.8608" x2="-4.191" y2="-3.7338" layer="21"/>
<rectangle x1="-4.699" y1="-5.334" x2="-4.191" y2="-3.8608" layer="51"/>
<rectangle x1="-3.429" y1="-3.8608" x2="-2.921" y2="-3.7338" layer="21"/>
<rectangle x1="-3.429" y1="-5.334" x2="-2.921" y2="-3.8608" layer="51"/>
<rectangle x1="-2.159" y1="-3.8608" x2="-1.651" y2="-3.7338" layer="21"/>
<rectangle x1="-2.159" y1="-5.334" x2="-1.651" y2="-3.8608" layer="51"/>
<rectangle x1="-0.889" y1="-3.8608" x2="-0.381" y2="-3.7338" layer="21"/>
<rectangle x1="-0.889" y1="-5.334" x2="-0.381" y2="-3.8608" layer="51"/>
<rectangle x1="0.381" y1="-5.334" x2="0.889" y2="-3.8608" layer="51"/>
<rectangle x1="0.381" y1="-3.8608" x2="0.889" y2="-3.7338" layer="21"/>
<rectangle x1="1.651" y1="-3.8608" x2="2.159" y2="-3.7338" layer="21"/>
<rectangle x1="1.651" y1="-5.334" x2="2.159" y2="-3.8608" layer="51"/>
<rectangle x1="2.921" y1="-3.8608" x2="3.429" y2="-3.7338" layer="21"/>
<rectangle x1="2.921" y1="-5.334" x2="3.429" y2="-3.8608" layer="51"/>
<rectangle x1="4.191" y1="-3.8608" x2="4.699" y2="-3.7338" layer="21"/>
<rectangle x1="4.191" y1="-5.334" x2="4.699" y2="-3.8608" layer="51"/>
<rectangle x1="-4.699" y1="3.8608" x2="-4.191" y2="5.334" layer="51"/>
<rectangle x1="-4.699" y1="3.7338" x2="-4.191" y2="3.8608" layer="21"/>
<rectangle x1="-3.429" y1="3.7338" x2="-2.921" y2="3.8608" layer="21"/>
<rectangle x1="-3.429" y1="3.8608" x2="-2.921" y2="5.334" layer="51"/>
<rectangle x1="-2.159" y1="3.7338" x2="-1.651" y2="3.8608" layer="21"/>
<rectangle x1="-2.159" y1="3.8608" x2="-1.651" y2="5.334" layer="51"/>
<rectangle x1="-0.889" y1="3.7338" x2="-0.381" y2="3.8608" layer="21"/>
<rectangle x1="-0.889" y1="3.8608" x2="-0.381" y2="5.334" layer="51"/>
<rectangle x1="0.381" y1="3.7338" x2="0.889" y2="3.8608" layer="21"/>
<rectangle x1="0.381" y1="3.8608" x2="0.889" y2="5.334" layer="51"/>
<rectangle x1="1.651" y1="3.7338" x2="2.159" y2="3.8608" layer="21"/>
<rectangle x1="1.651" y1="3.8608" x2="2.159" y2="5.334" layer="51"/>
<rectangle x1="2.921" y1="3.7338" x2="3.429" y2="3.8608" layer="21"/>
<rectangle x1="2.921" y1="3.8608" x2="3.429" y2="5.334" layer="51"/>
<rectangle x1="4.191" y1="3.7338" x2="4.699" y2="3.8608" layer="21"/>
<rectangle x1="4.191" y1="3.8608" x2="4.699" y2="5.334" layer="51"/>
</package>
<package name="TSSOP20">
<wire x1="-2.2922" y1="-3.8487" x2="2.2602" y2="-3.8487" width="0.127" layer="51"/>
<wire x1="2.2602" y1="-3.8487" x2="2.2602" y2="3.2908" width="0.127" layer="51"/>
<wire x1="2.2602" y1="3.2908" x2="-2.2922" y2="3.2908" width="0.127" layer="51"/>
<wire x1="-2.2922" y1="3.2908" x2="-2.2922" y2="-3.8487" width="0.127" layer="51"/>
<wire x1="-2.2922" y1="3.2908" x2="2.2602" y2="3.2908" width="0.127" layer="21"/>
<wire x1="2.2602" y1="3.2908" x2="2.2602" y2="-3.8487" width="0.127" layer="21"/>
<wire x1="2.2602" y1="-3.8487" x2="-2.2922" y2="-3.8487" width="0.127" layer="21"/>
<wire x1="-2.2922" y1="-3.8487" x2="-2.2922" y2="3.2908" width="0.127" layer="21"/>
<circle x="-1.716" y="2.7908" radius="0.1414" width="0.05" layer="21"/>
<smd name="10" x="-2.937" y="-3.2508" dx="1" dy="0.4" layer="1"/>
<smd name="9" x="-2.937" y="-2.5904" dx="1" dy="0.4" layer="1"/>
<smd name="8" x="-2.943" y="-1.93" dx="1" dy="0.4" layer="1"/>
<smd name="7" x="-2.937" y="-1.2696" dx="1" dy="0.4" layer="1"/>
<smd name="6" x="-2.937" y="-0.6092" dx="1" dy="0.4" layer="1"/>
<smd name="5" x="-2.937" y="0.0512" dx="1" dy="0.4" layer="1"/>
<smd name="4" x="-2.937" y="0.7116" dx="1" dy="0.4" layer="1"/>
<smd name="3" x="-2.937" y="1.372" dx="1" dy="0.4" layer="1"/>
<smd name="2" x="-2.937" y="2.0324" dx="1" dy="0.4" layer="1"/>
<smd name="1" x="-2.937" y="2.6928" dx="1" dy="0.4" layer="1"/>
<smd name="20" x="2.905" y="2.6928" dx="1" dy="0.4" layer="1"/>
<smd name="19" x="2.905" y="2.0324" dx="1" dy="0.4" layer="1"/>
<smd name="18" x="2.905" y="1.372" dx="1" dy="0.4" layer="1"/>
<smd name="17" x="2.905" y="0.7116" dx="1" dy="0.4" layer="1"/>
<smd name="16" x="2.905" y="0.0512" dx="1" dy="0.4" layer="1"/>
<smd name="15" x="2.905" y="-0.6092" dx="1" dy="0.4" layer="1"/>
<smd name="14" x="2.905" y="-1.2696" dx="1" dy="0.4" layer="1"/>
<smd name="13" x="2.911" y="-1.93" dx="1" dy="0.4" layer="1"/>
<smd name="12" x="2.905" y="-2.5904" dx="1" dy="0.4" layer="1"/>
<smd name="11" x="2.905" y="-3.2508" dx="1" dy="0.4" layer="1"/>
<text x="-2.116" y="3.4908" size="0.254" layer="25">&gt;Name</text>
<text x="-2.116" y="-4.2396" size="0.254" layer="27">&gt;Value</text>
</package>
<package name="TSSOP16">
<description>&lt;b&gt;TSOP16&lt;/b&gt;&lt;p&gt;
thin small outline package</description>
<wire x1="3.1" y1="-2.4" x2="-3" y2="-2.4" width="0.2032" layer="51"/>
<wire x1="-3" y1="2.6" x2="3.1" y2="2.6" width="0.2032" layer="51"/>
<wire x1="3.1" y1="-2.4" x2="3.1" y2="2.6" width="0.2032" layer="51"/>
<wire x1="-3" y1="2.6" x2="-2.8" y2="2.6" width="0.2032" layer="21"/>
<wire x1="-3" y1="2.6" x2="-3" y2="0.5" width="0.2032" layer="21"/>
<wire x1="-3" y1="-0.5" x2="-3" y2="-2.4" width="0.2032" layer="21"/>
<wire x1="-3" y1="-2.4" x2="-2.8" y2="-2.4" width="0.2032" layer="21"/>
<wire x1="2.9" y1="-2.4" x2="3.1" y2="-2.4" width="0.2032" layer="21"/>
<wire x1="3.1" y1="-2.4" x2="3.1" y2="2.6" width="0.2032" layer="21"/>
<wire x1="3.1" y1="2.6" x2="2.9" y2="2.6" width="0.2032" layer="21"/>
<wire x1="-3" y1="0.5" x2="-3" y2="-0.5" width="0.2032" layer="21" curve="-180"/>
<smd name="1" x="-2.225" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="2" x="-1.575" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="3" x="-0.925" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="4" x="-0.275" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="5" x="0.375" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="6" x="1.025" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="7" x="1.675" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="8" x="2.325" y="-2.85" dx="0.4" dy="1.6" layer="1"/>
<smd name="9" x="2.325" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="10" x="1.675" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="11" x="1.025" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="12" x="0.375" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="13" x="-0.275" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="14" x="-0.925" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="15" x="-1.575" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<smd name="16" x="-2.225" y="3.05" dx="0.4" dy="1.6" layer="1"/>
<text x="-1.524" y="-1.27" size="0.6096" layer="25">&gt;NAME</text>
<text x="-1.524" y="0.889" size="0.6096" layer="27">&gt;VALUE</text>
<rectangle x1="-2.425" y1="-3.3501" x2="-2.0249" y2="-2.5299" layer="51"/>
<rectangle x1="-1.775" y1="-3.3501" x2="-1.3749" y2="-2.5299" layer="51"/>
<rectangle x1="-1.125" y1="-3.3501" x2="-0.725" y2="-2.5299" layer="51"/>
<rectangle x1="-0.475" y1="-3.3501" x2="-0.075" y2="-2.5299" layer="51"/>
<rectangle x1="0.175" y1="-3.3501" x2="0.575" y2="-2.5299" layer="51"/>
<rectangle x1="0.825" y1="-3.3501" x2="1.225" y2="-2.5299" layer="51"/>
<rectangle x1="1.4749" y1="-3.3501" x2="1.875" y2="-2.5299" layer="51"/>
<rectangle x1="2.1249" y1="-3.3501" x2="2.525" y2="-2.5299" layer="51"/>
<rectangle x1="2.1249" y1="2.7299" x2="2.525" y2="3.5501" layer="51"/>
<rectangle x1="1.4749" y1="2.7299" x2="1.875" y2="3.5501" layer="51"/>
<rectangle x1="0.825" y1="2.7299" x2="1.225" y2="3.5501" layer="51"/>
<rectangle x1="0.175" y1="2.7299" x2="0.575" y2="3.5501" layer="51"/>
<rectangle x1="-0.475" y1="2.7299" x2="-0.075" y2="3.5501" layer="51"/>
<rectangle x1="-1.125" y1="2.7299" x2="-0.725" y2="3.5501" layer="51"/>
<rectangle x1="-1.775" y1="2.7299" x2="-1.3749" y2="3.5501" layer="51"/>
<rectangle x1="-2.425" y1="2.7299" x2="-2.0249" y2="3.5501" layer="51"/>
<rectangle x1="-2.425" y1="-3.3501" x2="-2.0249" y2="-2.5299" layer="51"/>
<rectangle x1="-1.775" y1="-3.3501" x2="-1.3749" y2="-2.5299" layer="51"/>
<rectangle x1="-1.125" y1="-3.3501" x2="-0.725" y2="-2.5299" layer="51"/>
<rectangle x1="-0.475" y1="-3.3501" x2="-0.075" y2="-2.5299" layer="51"/>
<rectangle x1="0.175" y1="-3.3501" x2="0.575" y2="-2.5299" layer="51"/>
<rectangle x1="0.825" y1="-3.3501" x2="1.225" y2="-2.5299" layer="51"/>
<rectangle x1="1.4749" y1="-3.3501" x2="1.875" y2="-2.5299" layer="51"/>
<rectangle x1="2.1249" y1="-3.3501" x2="2.525" y2="-2.5299" layer="51"/>
<rectangle x1="2.1249" y1="2.7299" x2="2.525" y2="3.5501" layer="51"/>
<rectangle x1="1.4749" y1="2.7299" x2="1.875" y2="3.5501" layer="51"/>
<rectangle x1="0.825" y1="2.7299" x2="1.225" y2="3.5501" layer="51"/>
<rectangle x1="0.175" y1="2.7299" x2="0.575" y2="3.5501" layer="51"/>
<rectangle x1="-0.475" y1="2.7299" x2="-0.075" y2="3.5501" layer="51"/>
<rectangle x1="-1.125" y1="2.7299" x2="-0.725" y2="3.5501" layer="51"/>
<rectangle x1="-1.775" y1="2.7299" x2="-1.3749" y2="3.5501" layer="51"/>
<rectangle x1="-2.425" y1="2.7299" x2="-2.0249" y2="3.5501" layer="51"/>
</package>
<package name="SOIC-14">
<wire x1="3.6068" y1="1.9463" x2="-4.8768" y2="1.9463" width="0.2032" layer="21"/>
<wire x1="3.7068" y1="-1.9463" x2="3.9878" y2="-1.5653" width="0.2032" layer="21" curve="90"/>
<wire x1="-5.2578" y1="1.4653" x2="-4.8768" y2="1.9463" width="0.2032" layer="21" curve="-90.023829"/>
<wire x1="3.6068" y1="1.9463" x2="3.9878" y2="1.5653" width="0.2032" layer="21" curve="-90.030084"/>
<wire x1="-5.2578" y1="-1.6653" x2="-4.8768" y2="-1.9463" width="0.2032" layer="21" curve="90.060185"/>
<wire x1="-4.8768" y1="-1.9463" x2="3.7068" y2="-1.9463" width="0.2032" layer="21"/>
<wire x1="3.9878" y1="-1.5653" x2="3.9878" y2="1.5653" width="0.2032" layer="21"/>
<wire x1="-5.207" y1="0.6096" x2="-5.207" y2="-0.6604" width="0.2032" layer="21" curve="-180"/>
<wire x1="-5.2578" y1="1.4526" x2="-5.2578" y2="0.6096" width="0.2032" layer="21"/>
<wire x1="-5.2578" y1="-1.6653" x2="-5.2578" y2="-0.6604" width="0.2032" layer="21"/>
<smd name="1" x="-4.445" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="2" x="-3.175" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="3" x="-1.905" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="4" x="-0.635" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="5" x="0.635" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="6" x="1.905" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="7" x="3.175" y="-3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="8" x="3.175" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="9" x="1.905" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="10" x="0.635" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="11" x="-0.635" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="12" x="-1.905" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="13" x="-3.175" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<smd name="14" x="-4.445" y="3.3147" dx="0.6604" dy="2.032" layer="1"/>
<text x="-5.588" y="-1.9685" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<rectangle x1="-4.699" y1="-3.7465" x2="-4.191" y2="-2.2733" layer="51"/>
<rectangle x1="-3.429" y1="-3.7465" x2="-2.921" y2="-2.2733" layer="51"/>
<rectangle x1="-2.159" y1="-3.7465" x2="-1.651" y2="-2.2733" layer="51"/>
<rectangle x1="-0.889" y1="-3.7465" x2="-0.381" y2="-2.2733" layer="51"/>
<rectangle x1="0.381" y1="-3.7465" x2="0.889" y2="-2.2733" layer="51"/>
<rectangle x1="1.651" y1="-3.7465" x2="2.159" y2="-2.2733" layer="51"/>
<rectangle x1="2.921" y1="-3.7465" x2="3.429" y2="-2.2733" layer="51"/>
<rectangle x1="-4.699" y1="2.2733" x2="-4.191" y2="3.7465" layer="51"/>
<rectangle x1="-3.429" y1="2.2733" x2="-2.921" y2="3.7465" layer="51"/>
<rectangle x1="-2.159" y1="2.2733" x2="-1.651" y2="3.7465" layer="51"/>
<rectangle x1="-0.889" y1="2.2733" x2="-0.381" y2="3.7465" layer="51"/>
<rectangle x1="0.381" y1="2.2733" x2="0.889" y2="3.7465" layer="51"/>
<rectangle x1="1.651" y1="2.2733" x2="2.159" y2="3.7465" layer="51"/>
<rectangle x1="2.921" y1="2.2733" x2="3.429" y2="3.7465" layer="51"/>
</package>
<package name="TSSOP-16">
<wire x1="-2.2764" y1="-2.2" x2="-2.5" y2="-1.9764" width="0.1778" layer="21" curve="-90"/>
<wire x1="-2.5" y1="-1.9764" x2="-2.5" y2="1.9764" width="0.1778" layer="21"/>
<wire x1="-2.5" y1="1.9764" x2="-2.2764" y2="2.2" width="0.1778" layer="21" curve="-90"/>
<wire x1="-2.2764" y1="2.2" x2="2.2764" y2="2.2" width="0.1778" layer="21"/>
<wire x1="2.2764" y1="2.2" x2="2.5" y2="1.9764" width="0.1778" layer="21" curve="-90"/>
<wire x1="2.5" y1="1.9764" x2="2.5" y2="-1.9764" width="0.1778" layer="21"/>
<wire x1="2.5" y1="-1.9764" x2="2.2764" y2="-2.2" width="0.1778" layer="21" curve="-90"/>
<wire x1="2.2764" y1="-2.2" x2="-2.2764" y2="-2.2" width="0.1778" layer="21"/>
<circle x="-2" y="-1.7" radius="0.1" width="0.1778" layer="21"/>
<smd name="1" x="-2.275" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="2" x="-1.625" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="3" x="-0.975" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="4" x="-0.325" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="5" x="0.325" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="6" x="0.975" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="7" x="1.625" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="8" x="2.275" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="9" x="2.275" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="10" x="1.625" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="11" x="0.975" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="12" x="0.325" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="13" x="-0.325" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="14" x="-0.975" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="15" x="-1.625" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="16" x="-2.275" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<rectangle x1="0.175" y1="-3.2" x2="0.475" y2="-2.6" layer="51"/>
<rectangle x1="-0.475" y1="-3.2" x2="-0.175" y2="-2.6" layer="51"/>
<rectangle x1="-1.125" y1="-3.2" x2="-0.825" y2="-2.6" layer="51"/>
<rectangle x1="-1.775" y1="-3.2" x2="-1.475" y2="-2.6" layer="51"/>
<rectangle x1="0.825" y1="-3.2" x2="1.125" y2="-2.6" layer="51"/>
<rectangle x1="1.475" y1="-3.2" x2="1.775" y2="-2.6" layer="51"/>
<rectangle x1="2.125" y1="-3.2" x2="2.425" y2="-2.6" layer="51"/>
<rectangle x1="-2.425" y1="-3.2" x2="-2.125" y2="-2.6" layer="51"/>
<rectangle x1="-0.475" y1="2.6" x2="-0.175" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="0.175" y1="2.6" x2="0.475" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="0.825" y1="2.6" x2="1.125" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="1.475" y1="2.6" x2="1.775" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="-1.125" y1="2.6" x2="-0.825" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="-1.775" y1="2.6" x2="-1.475" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="-2.425" y1="2.6" x2="-2.125" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="2.125" y1="2.6" x2="2.425" y2="3.2" layer="51" rot="R180"/>
</package>
<package name="SO08-EPAD">
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-1.905" y="-2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="2" x="-0.635" y="-2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="3" x="0.635" y="-2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="4" x="1.905" y="-2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="5" x="1.905" y="2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="6" x="0.635" y="2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="7" x="-0.635" y="2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="8" x="-1.905" y="2.6924" dx="0.6096" dy="2.0574" layer="1"/>
<smd name="EPAD" x="0" y="0" dx="2.286" dy="2.286" layer="1" rot="R90"/>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="ALM-1412">
<wire x1="-0.2" y1="0" x2="-0.2" y2="1.9" width="0.01" layer="51"/>
<wire x1="-0.2" y1="1.9" x2="3" y2="1.9" width="0.01" layer="51"/>
<wire x1="3" y1="1.9" x2="3" y2="0" width="0.01" layer="51"/>
<wire x1="3" y1="0" x2="-0.2" y2="0" width="0.01" layer="51"/>
<smd name="1" x="0" y="0.17" dx="0.35" dy="0.35" layer="1"/>
<smd name="2" x="0.69" y="0.17" dx="0.35" dy="0.35" layer="1"/>
<smd name="3" x="2.75" y="0.95" dx="0.35" dy="0.35" layer="1"/>
<smd name="4" x="0.68" y="1.72" dx="0.35" dy="0.35" layer="1"/>
<smd name="5" x="0" y="1.72" dx="0.35" dy="0.35" layer="1"/>
<smd name="9" x="1.47" y="1.72" dx="0.35" dy="0.35" layer="1" cream="no"/>
<smd name="8" x="2.52" y="1.72" dx="0.35" dy="0.35" layer="1" cream="no"/>
<smd name="6" x="1.47" y="0.18" dx="0.35" dy="0.35" layer="1" cream="no"/>
<smd name="7" x="2.52" y="0.18" dx="0.35" dy="0.35" layer="1" cream="no"/>
<text x="0" y="-0.6985" size="0.4064" layer="27">&gt;VALUE</text>
<text x="0" y="2.2225" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="1.16" y1="1.43" x2="2.92" y2="1.9" layer="1"/>
<rectangle x1="1.16" y1="0" x2="2.92" y2="0.47" layer="1"/>
<rectangle x1="1.16" y1="0.4" x2="2.27" y2="1.5" layer="1"/>
<rectangle x1="0.1" y1="0.65" x2="1.76" y2="1.25" layer="1"/>
<rectangle x1="0.508" y1="0.3" x2="0.867" y2="0.7" layer="1"/>
<rectangle x1="1.33" y1="1.585" x2="1.61" y2="1.895" layer="31"/>
<rectangle x1="1.86" y1="1.585" x2="2.12" y2="1.895" layer="31"/>
<rectangle x1="2.37" y1="1.51" x2="2.67" y2="1.89" layer="31"/>
<rectangle x1="1.33" y1="0.005" x2="1.61" y2="0.315" layer="31"/>
<rectangle x1="1.86" y1="0.005" x2="2.12" y2="0.315" layer="31"/>
<rectangle x1="2.37" y1="0.01" x2="2.67" y2="0.39" layer="31"/>
<rectangle x1="1.86" y1="0.64" x2="2.12" y2="1.26" layer="31"/>
<rectangle x1="-0.005" y1="0.7" x2="0.545" y2="1.2" layer="31"/>
<rectangle x1="0.79" y1="0.64" x2="1.61" y2="1.26" layer="31"/>
<rectangle x1="1.09" y1="1.43" x2="3" y2="2" layer="29"/>
<rectangle x1="1.09" y1="-0.11" x2="3" y2="0.47" layer="29"/>
<rectangle x1="1.09" y1="0.47" x2="2.27" y2="1.43" layer="29"/>
<rectangle x1="-0.28" y1="0.57" x2="1.09" y2="1.34" layer="29"/>
<polygon width="0.01" layer="1">
<vertex x="-0.17" y="0.65"/>
<vertex x="-0.17" y="1"/>
<vertex x="0.08" y="1.25"/>
<vertex x="0.1" y="1.25"/>
<vertex x="0.1" y="0.65"/>
</polygon>
</package>
<package name="QFN-24_ALT2">
<description>&lt;h3&gt;24-pin QFN with Exposed Thermal pad&lt;/h3&gt;
Parts that use this package:
&lt;ul&gt;
&lt;li&gt;A6282&lt;/li&gt;
&lt;/ul&gt;
Last modified: 8/20/10&lt;br&gt;
&lt;br&gt;
&lt;b&gt;***UNPROVEN***&lt;/b&gt;&lt;BR&gt;</description>
<wire x1="-2" y1="-2" x2="-2" y2="2" width="0.127" layer="51"/>
<wire x1="-2" y1="2" x2="2" y2="2" width="0.127" layer="51"/>
<wire x1="2" y1="2" x2="2" y2="-2" width="0.127" layer="51"/>
<wire x1="2" y1="-2" x2="-2" y2="-2" width="0.127" layer="51"/>
<wire x1="-2" y1="1.6" x2="-1.6" y2="2" width="0.127" layer="21"/>
<wire x1="2" y1="2" x2="1.6" y2="2" width="0.127" layer="21"/>
<wire x1="2" y1="2" x2="2" y2="1.6" width="0.127" layer="21"/>
<wire x1="-2" y1="-2" x2="-1.6" y2="-2" width="0.127" layer="21"/>
<wire x1="-2" y1="-2" x2="-2" y2="-1.6" width="0.127" layer="21"/>
<wire x1="2" y1="-2" x2="2" y2="-1.6" width="0.127" layer="21"/>
<wire x1="2" y1="-2" x2="1.6" y2="-2" width="0.127" layer="21"/>
<smd name="21" x="0.25" y="2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="22" x="-0.25" y="2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="23" x="-0.75" y="2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="24" x="-1.25" y="2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="20" x="0.75" y="2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="19" x="1.25" y="2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="4" x="-2.05" y="-0.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="5" x="-2.05" y="-0.75" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="6" x="-2.05" y="-1.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="3" x="-2.05" y="0.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="2" x="-2.05" y="0.75" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="15" x="1.95" y="-0.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="14" x="1.95" y="-0.75" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="13" x="1.95" y="-1.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="16" x="1.95" y="0.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="17" x="1.95" y="0.75" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="10" x="0.25" y="-2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="9" x="-0.25" y="-2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="8" x="-0.75" y="-2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="7" x="-1.25" y="-2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="11" x="0.75" y="-2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="12" x="1.25" y="-2.05" dx="0.3" dy="0.9" layer="1"/>
<smd name="1" x="-2.05" y="1.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="18" x="1.95" y="1.25" dx="0.3" dy="0.9" layer="1" rot="R90"/>
<smd name="EP" x="0" y="0" dx="2.1" dy="2.1" layer="1"/>
</package>
<package name="SOT23-6">
<wire x1="1.4224" y1="0.8104" x2="1.4224" y2="-0.8104" width="0.2032" layer="21"/>
<wire x1="-1.4224" y1="-0.8104" x2="-1.4224" y2="0.8104" width="0.2032" layer="21"/>
<wire x1="-1.3276" y1="-0.8104" x2="-1.4224" y2="-0.8104" width="0.2032" layer="21"/>
<wire x1="1.4224" y1="-0.8104" x2="1.3276" y2="-0.8104" width="0.2032" layer="21"/>
<wire x1="1.3276" y1="0.8104" x2="1.4224" y2="0.8104" width="0.2032" layer="21"/>
<wire x1="-1.4224" y1="0.8104" x2="-1.3276" y2="0.8104" width="0.2032" layer="21"/>
<circle x="0.9398" y="-0.381" radius="0.0359" width="0.3048" layer="21"/>
<smd name="3" x="-0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="2" x="0" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="1" x="0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="6" x="0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="4" x="-0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="5" x="0" y="1.3001" dx="0.55" dy="1.2" layer="1" rot="R180"/>
<text x="-0.8255" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="DIL18">
<description>&lt;b&gt;Dual In Line Package&lt;/b&gt;</description>
<wire x1="11.43" y1="3.048" x2="11.43" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="3.048" x2="-11.43" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="-3.048" x2="-11.43" y2="-1.016" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="1.016" x2="-11.43" y2="-1.016" width="0.2032" layer="21" curve="-180"/>
<wire x1="-11.43" y1="3.048" x2="-11.176" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-9.144" y1="3.048" x2="-8.636" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="-3.048" x2="-11.176" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="11.43" y1="3.048" x2="11.176" y2="3.048" width="0.2032" layer="21"/>
<wire x1="11.43" y1="-3.048" x2="11.176" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-6.604" y1="3.048" x2="-6.096" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-4.064" y1="3.048" x2="-3.556" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-1.524" y1="3.048" x2="-1.016" y2="3.048" width="0.2032" layer="21"/>
<wire x1="1.016" y1="3.048" x2="1.524" y2="3.048" width="0.2032" layer="21"/>
<wire x1="3.556" y1="3.048" x2="4.064" y2="3.048" width="0.2032" layer="21"/>
<wire x1="6.096" y1="3.048" x2="6.604" y2="3.048" width="0.2032" layer="21"/>
<wire x1="8.636" y1="3.048" x2="9.144" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-9.144" y1="-3.048" x2="-8.636" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-6.604" y1="-3.048" x2="-6.096" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-4.064" y1="-3.048" x2="-3.556" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-1.524" y1="-3.048" x2="-1.016" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="1.016" y1="-3.048" x2="1.524" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="3.556" y1="-3.048" x2="4.064" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="6.096" y1="-3.048" x2="6.604" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="8.636" y1="-3.048" x2="9.144" y2="-3.048" width="0.2032" layer="21"/>
<pad name="1" x="-10.16" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="2" x="-7.62" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="7" x="5.08" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="8" x="7.62" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="3" x="-5.08" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="4" x="-2.54" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="6" x="2.54" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="5" x="0" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="9" x="10.16" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="10" x="10.16" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="11" x="7.62" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="12" x="5.08" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="13" x="2.54" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="14" x="0" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="15" x="-2.54" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="16" x="-5.08" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="17" x="-7.62" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="18" x="-10.16" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<text x="-11.684" y="-3.048" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="-9.525" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="DIP08">
<description>&lt;b&gt;Dual In Line&lt;/b&gt;</description>
<wire x1="-5.08" y1="2.54" x2="5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-1.524" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="5.08" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="-1.524" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-1.524" x2="-5.08" y2="-1.016" width="0.2032" layer="21"/>
<circle x="-3.81" y="-1.27" radius="0.7184" width="0.254" layer="21"/>
<pad name="1" x="-3.81" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="2" x="-1.27" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="3" x="1.27" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="4" x="3.81" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="5" x="3.81" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="6" x="1.27" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="7" x="-1.27" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="8" x="-3.81" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<text x="-3.175" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.715" y="-3.81" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
</package>
<package name="SO014">
<wire x1="4.8768" y1="2.1463" x2="-3.6068" y2="2.1463" width="0.1524" layer="21"/>
<wire x1="4.8768" y1="-2.1463" x2="5.2578" y2="-1.7653" width="0.1524" layer="21" curve="90"/>
<wire x1="-3.9878" y1="1.7653" x2="-3.6068" y2="2.1463" width="0.1524" layer="21" curve="-90"/>
<wire x1="4.8768" y1="2.1463" x2="5.2578" y2="1.7653" width="0.1524" layer="21" curve="-90"/>
<wire x1="-3.9878" y1="-1.7653" x2="-3.6068" y2="-2.1463" width="0.1524" layer="21" curve="90"/>
<wire x1="-3.6068" y1="-2.1463" x2="4.8768" y2="-2.1463" width="0.1524" layer="21"/>
<wire x1="5.2578" y1="-1.7653" x2="5.2578" y2="1.7653" width="0.1524" layer="21"/>
<wire x1="-3.9878" y1="1.7653" x2="-3.9878" y2="1.27" width="0.1524" layer="21"/>
<wire x1="-3.9878" y1="1.27" x2="-3.9878" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="-3.9878" y1="-1.27" x2="-3.9878" y2="-1.7653" width="0.1524" layer="21"/>
<wire x1="-3.9878" y1="1.27" x2="-3.9878" y2="-1.27" width="0.1524" layer="21" curve="-180"/>
<smd name="1" x="-3.175" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="2" x="-1.905" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="3" x="-0.635" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="4" x="0.635" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="5" x="1.905" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="6" x="3.175" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="7" x="4.445" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="8" x="4.445" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="9" x="3.175" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="10" x="1.905" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="11" x="0.635" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="12" x="-0.635" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="13" x="-1.905" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="14" x="-3.175" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<text x="-4.318" y="-2.6035" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<rectangle x1="-3.429" y1="-2.2733" x2="-2.921" y2="-2.1463" layer="21"/>
<rectangle x1="-3.429" y1="-2.2733" x2="-2.921" y2="-2.1463" layer="21"/>
<rectangle x1="-3.429" y1="-3.429" x2="-2.921" y2="-1.9558" layer="51"/>
<rectangle x1="-2.159" y1="-2.2733" x2="-1.651" y2="-2.1463" layer="21"/>
<rectangle x1="-2.159" y1="-3.429" x2="-1.651" y2="-1.9558" layer="51"/>
<rectangle x1="-0.889" y1="-2.2733" x2="-0.381" y2="-2.1463" layer="21"/>
<rectangle x1="-0.889" y1="-3.429" x2="-0.381" y2="-1.9558" layer="51"/>
<rectangle x1="0.381" y1="-3.429" x2="0.889" y2="-1.9558" layer="51"/>
<rectangle x1="0.381" y1="-2.2733" x2="0.889" y2="-2.1463" layer="21"/>
<rectangle x1="1.651" y1="-2.2733" x2="2.159" y2="-2.1463" layer="21"/>
<rectangle x1="1.651" y1="-3.429" x2="2.159" y2="-1.9558" layer="51"/>
<rectangle x1="2.921" y1="-2.2733" x2="3.429" y2="-2.1463" layer="21"/>
<rectangle x1="2.921" y1="-3.429" x2="3.429" y2="-1.9558" layer="51"/>
<rectangle x1="4.191" y1="-2.2733" x2="4.699" y2="-2.1463" layer="21"/>
<rectangle x1="4.191" y1="-3.429" x2="4.699" y2="-1.9558" layer="51"/>
<rectangle x1="-3.429" y1="2.1463" x2="-2.921" y2="2.2733" layer="21"/>
<rectangle x1="-3.429" y1="2.1463" x2="-2.921" y2="2.2733" layer="21"/>
<rectangle x1="-3.429" y1="2.2733" x2="-2.921" y2="3.7465" layer="51"/>
<rectangle x1="-2.159" y1="2.1463" x2="-1.651" y2="2.2733" layer="21"/>
<rectangle x1="-2.159" y1="2.2733" x2="-1.651" y2="3.7465" layer="51"/>
<rectangle x1="-0.889" y1="2.1463" x2="-0.381" y2="2.2733" layer="21"/>
<rectangle x1="-0.889" y1="2.2733" x2="-0.381" y2="3.7465" layer="51"/>
<rectangle x1="0.381" y1="2.1463" x2="0.889" y2="2.2733" layer="21"/>
<rectangle x1="0.381" y1="2.2733" x2="0.889" y2="3.7465" layer="51"/>
<rectangle x1="1.651" y1="2.1463" x2="2.159" y2="2.2733" layer="21"/>
<rectangle x1="1.651" y1="2.2733" x2="2.159" y2="3.7465" layer="51"/>
<rectangle x1="2.921" y1="2.1463" x2="3.429" y2="2.2733" layer="21"/>
<rectangle x1="2.921" y1="2.2733" x2="3.429" y2="3.7465" layer="51"/>
<rectangle x1="4.191" y1="2.1463" x2="4.699" y2="2.2733" layer="21"/>
<rectangle x1="4.191" y1="2.2733" x2="4.699" y2="3.7465" layer="51"/>
</package>
<package name="MSOP8">
<description>&lt;b&gt;8M, 8-Lead, 0.118" Wide, Miniature Small Outline Package&lt;/b&gt;&lt;p&gt;
MSOP&lt;br&gt;
8M-Package doc1097.pdf</description>
<wire x1="-1.48" y1="1.23" x2="-1.23" y2="1.48" width="0.1524" layer="21" curve="-90" cap="flat"/>
<wire x1="1.23" y1="1.48" x2="1.48" y2="1.23" width="0.1524" layer="21" curve="-90"/>
<wire x1="1.23" y1="-1.49" x2="1.48" y2="-1.24" width="0.1524" layer="21" curve="90"/>
<wire x1="-1.48" y1="-1.24" x2="-1.23" y2="-1.49" width="0.1524" layer="21" curve="90" cap="flat"/>
<wire x1="1.24" y1="-1.49" x2="-1.22" y2="-1.49" width="0.1524" layer="21"/>
<wire x1="-1.22" y1="1.48" x2="1.24" y2="1.48" width="0.1524" layer="21"/>
<wire x1="-1.48" y1="1.23" x2="-1.48" y2="-1.23" width="0.1524" layer="21"/>
<wire x1="1.48" y1="-1.24" x2="1.48" y2="1.23" width="0.1524" layer="21"/>
<circle x="-0.65" y="-0.65" radius="0.325" width="0.254" layer="21"/>
<smd name="1" x="-0.975" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="2" x="-0.325" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="3" x="0.325" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="4" x="0.975" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="5" x="0.975" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="6" x="0.325" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="7" x="-0.325" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="8" x="-0.975" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<text x="-2.54" y="-1.27" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="2.54" y="-1.27" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-1.175" y1="-2.45" x2="-0.775" y2="-1.55" layer="51"/>
<rectangle x1="-0.525" y1="-2.45" x2="-0.125" y2="-1.55" layer="51"/>
<rectangle x1="0.125" y1="-2.45" x2="0.525" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="-2.45" x2="1.175" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="1.55" x2="1.175" y2="2.45" layer="51"/>
<rectangle x1="0.125" y1="1.55" x2="0.525" y2="2.45" layer="51"/>
<rectangle x1="-0.525" y1="1.55" x2="-0.125" y2="2.45" layer="51"/>
<rectangle x1="-1.175" y1="1.55" x2="-0.775" y2="2.45" layer="51"/>
</package>
<package name="SO08-MAX6675">
<description>&lt;b&gt;SMALL OUTLINE INTEGRATED CIRCUIT&lt;/b&gt;&lt;p&gt;
body 3.9 mm/JEDEC MS-012AA</description>
<wire x1="-2.9" y1="3.9" x2="2.9" y2="3.9" width="0.1998" layer="39"/>
<wire x1="2.9" y1="3.9" x2="2.9" y2="-3.9" width="0.1998" layer="39"/>
<wire x1="2.9" y1="-3.9" x2="-2.9" y2="-3.9" width="0.1998" layer="39"/>
<wire x1="-2.9" y1="-3.9" x2="-2.9" y2="3.9" width="0.1998" layer="39"/>
<wire x1="2.4" y1="1.9" x2="2.4" y2="-1.4" width="0.2032" layer="51"/>
<wire x1="2.4" y1="-1.4" x2="2.4" y2="-1.9" width="0.2032" layer="51"/>
<wire x1="2.4" y1="-1.9" x2="-2.4" y2="-1.9" width="0.2032" layer="51"/>
<wire x1="-2.4" y1="-1.9" x2="-2.4" y2="-1.4" width="0.2032" layer="51"/>
<wire x1="-2.4" y1="-1.4" x2="-2.4" y2="1.9" width="0.2032" layer="51"/>
<wire x1="-2.4" y1="1.9" x2="2.4" y2="1.9" width="0.2032" layer="51"/>
<wire x1="2.4" y1="-1.4" x2="-2.4" y2="-1.4" width="0.2032" layer="51"/>
<smd name="2" x="-0.635" y="-2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="7" x="-0.635" y="2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="1" x="-1.905" y="-2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="3" x="0.635" y="-2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="4" x="1.905" y="-2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="8" x="-1.905" y="2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="6" x="0.635" y="2.6" dx="0.6" dy="2.2" layer="1"/>
<smd name="5" x="1.905" y="2.6" dx="0.6" dy="2.2" layer="1"/>
<text x="-3.175" y="-1.905" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="4.445" y="-1.905" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-2.1501" y1="-3.1001" x2="-1.6599" y2="-2" layer="51"/>
<rectangle x1="-0.8801" y1="-3.1001" x2="-0.3899" y2="-2" layer="51"/>
<rectangle x1="0.3899" y1="-3.1001" x2="0.8801" y2="-2" layer="51"/>
<rectangle x1="1.6599" y1="-3.1001" x2="2.1501" y2="-2" layer="51"/>
<rectangle x1="1.6599" y1="2" x2="2.1501" y2="3.1001" layer="51"/>
<rectangle x1="0.3899" y1="2" x2="0.8801" y2="3.1001" layer="51"/>
<rectangle x1="-0.8801" y1="2" x2="-0.3899" y2="3.1001" layer="51"/>
<rectangle x1="-2.1501" y1="2" x2="-1.6599" y2="3.1001" layer="51"/>
</package>
<package name="SOIC8">
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="2" x="-0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="3" x="0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="4" x="1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="5" x="1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="6" x="0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="7" x="-0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="8" x="-1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="SSOP24">
<wire x1="-4.25" y1="2.5" x2="4.25" y2="2.5" width="0.2032" layer="21"/>
<wire x1="4.25" y1="2.5" x2="4.25" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="4.25" y1="-2.5" x2="-4.25" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="-4.25" y1="-2.5" x2="-4.25" y2="2.5" width="0.2032" layer="21"/>
<circle x="-3.556" y="-1.778" radius="0.2231" width="0.2032" layer="21"/>
<smd name="24" x="-3.575" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="23" x="-2.925" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="22" x="-2.275" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="20" x="-0.975" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="21" x="-1.625" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="19" x="-0.325" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="18" x="0.325" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="17" x="0.975" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="16" x="1.625" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="15" x="2.275" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="1" x="-3.575" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="2" x="-2.925" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="3" x="-2.275" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="4" x="-1.625" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="5" x="-0.975" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="6" x="-0.325" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="7" x="0.325" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="8" x="0.975" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="9" x="1.625" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="10" x="2.275" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="11" x="2.925" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="12" x="3.575" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="13" x="3.575" y="3.656" dx="0.348" dy="1.397" layer="1" rot="R180"/>
<smd name="14" x="2.925" y="3.656" dx="0.348" dy="1.397" layer="1" rot="R180"/>
<text x="-3.81" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.81" y="0" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SO16">
<description>&lt;b&gt;Small Outline package&lt;/b&gt; 150 mil</description>
<wire x1="4.699" y1="1.9558" x2="-4.699" y2="1.9558" width="0.1524" layer="21"/>
<wire x1="4.699" y1="-1.9558" x2="5.08" y2="-1.5748" width="0.1524" layer="21" curve="90"/>
<wire x1="-4.699" y1="1.9558" x2="-5.08" y2="1.5748" width="0.1524" layer="21" curve="90"/>
<wire x1="5.08" y1="1.5748" x2="4.699" y2="1.9558" width="0.1524" layer="21" curve="90"/>
<wire x1="-5.08" y1="-1.5748" x2="-4.699" y2="-1.9558" width="0.1524" layer="21" curve="90"/>
<wire x1="-4.699" y1="-1.9558" x2="4.699" y2="-1.9558" width="0.1524" layer="21"/>
<wire x1="5.08" y1="-1.5748" x2="5.08" y2="1.5748" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="1.5748" x2="-5.08" y2="0.508" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="0.508" x2="-5.08" y2="-0.508" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-0.508" x2="-5.08" y2="-1.5748" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-0.508" x2="-5.08" y2="0.508" width="0.1524" layer="21" curve="180"/>
<wire x1="-5.08" y1="-1.6002" x2="5.08" y2="-1.6002" width="0.0508" layer="21"/>
<smd name="1" x="-4.445" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="2" x="-3.175" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="3" x="-1.905" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="4" x="-0.635" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="5" x="0.635" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="6" x="1.905" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="7" x="3.175" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="8" x="4.445" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="9" x="4.445" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="10" x="3.175" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="11" x="1.905" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="12" x="0.635" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="13" x="-0.635" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="14" x="-1.905" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="15" x="-3.175" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="16" x="-4.445" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<text x="-4.064" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.461" y="-1.778" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<rectangle x1="-0.889" y1="1.9558" x2="-0.381" y2="3.0988" layer="51"/>
<rectangle x1="-4.699" y1="-3.0988" x2="-4.191" y2="-1.9558" layer="51"/>
<rectangle x1="-3.429" y1="-3.0988" x2="-2.921" y2="-1.9558" layer="51"/>
<rectangle x1="-2.159" y1="-3.0734" x2="-1.651" y2="-1.9304" layer="51"/>
<rectangle x1="-0.889" y1="-3.0988" x2="-0.381" y2="-1.9558" layer="51"/>
<rectangle x1="-2.159" y1="1.9558" x2="-1.651" y2="3.0988" layer="51"/>
<rectangle x1="-3.429" y1="1.9558" x2="-2.921" y2="3.0988" layer="51"/>
<rectangle x1="-4.699" y1="1.9558" x2="-4.191" y2="3.0988" layer="51"/>
<rectangle x1="0.381" y1="-3.0988" x2="0.889" y2="-1.9558" layer="51"/>
<rectangle x1="1.651" y1="-3.0988" x2="2.159" y2="-1.9558" layer="51"/>
<rectangle x1="2.921" y1="-3.0988" x2="3.429" y2="-1.9558" layer="51"/>
<rectangle x1="4.191" y1="-3.0988" x2="4.699" y2="-1.9558" layer="51"/>
<rectangle x1="0.381" y1="1.9558" x2="0.889" y2="3.0988" layer="51"/>
<rectangle x1="1.651" y1="1.9558" x2="2.159" y2="3.0988" layer="51"/>
<rectangle x1="2.921" y1="1.9558" x2="3.429" y2="3.0988" layer="51"/>
<rectangle x1="4.191" y1="1.9558" x2="4.699" y2="3.0988" layer="51"/>
</package>
<package name="DIL-08">
<description>&lt;b&gt;Dual In Line Package&lt;/b&gt;</description>
<wire x1="5.08" y1="2.921" x2="-5.08" y2="2.921" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-2.921" x2="5.08" y2="-2.921" width="0.1524" layer="21"/>
<wire x1="5.08" y1="2.921" x2="5.08" y2="-2.921" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="2.921" x2="-5.08" y2="1.016" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-2.921" x2="-5.08" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="1.016" x2="-5.08" y2="-1.016" width="0.1524" layer="21" curve="-180"/>
<pad name="1" x="-3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="2" x="-1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="7" x="-1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="8" x="-3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="3" x="1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="4" x="3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="6" x="1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="5" x="3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<text x="-5.334" y="-2.921" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="-3.556" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="SOT23-5">
<description>&lt;b&gt;Small Outline Transistor&lt;/b&gt;</description>
<wire x1="1.4224" y1="0.4294" x2="1.4224" y2="-0.4294" width="0.2032" layer="21"/>
<wire x1="1.4" y1="-0.8" x2="-1.4" y2="-0.8" width="0.1524" layer="51"/>
<wire x1="-1.4224" y1="-0.4294" x2="-1.4224" y2="0.4294" width="0.2032" layer="21"/>
<wire x1="-1.4" y1="0.8" x2="1.4" y2="0.8" width="0.1524" layer="51"/>
<wire x1="-0.2684" y1="0.8104" x2="0.2684" y2="0.8104" width="0.2032" layer="21"/>
<wire x1="1.4" y1="0.8" x2="1.4" y2="-0.8" width="0.1524" layer="51"/>
<wire x1="-1.4" y1="0.8" x2="-1.4" y2="-0.8" width="0.1524" layer="51"/>
<smd name="1" x="-0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="2" x="0" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="3" x="0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="4" x="0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="5" x="-0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<text x="-0.889" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.2" y1="-1.5" x2="-0.7" y2="-0.85" layer="51"/>
<rectangle x1="-0.25" y1="-1.5" x2="0.25" y2="-0.85" layer="51"/>
<rectangle x1="0.7" y1="-1.5" x2="1.2" y2="-0.85" layer="51"/>
<rectangle x1="0.7" y1="0.85" x2="1.2" y2="1.5" layer="51"/>
<rectangle x1="-1.2" y1="0.85" x2="-0.7" y2="1.5" layer="51"/>
</package>
<package name="SSOP20">
<description>&lt;b&gt;Shrink Small Outline Package&lt;/b&gt;&lt;p&gt;
package type SS</description>
<wire x1="-3.8" y1="-2.6" x2="3.8" y2="-2.6" width="0.2032" layer="21"/>
<wire x1="3.8" y1="-2.6" x2="3.8" y2="2.6" width="0.2032" layer="21"/>
<wire x1="3.8" y1="2.6" x2="-3.8" y2="2.6" width="0.2032" layer="21"/>
<wire x1="-3.825" y1="2.575" x2="-3.8" y2="2.575" width="0.127" layer="21"/>
<wire x1="-3.8" y1="2.575" x2="-3.8" y2="-2.6" width="0.2032" layer="21"/>
<circle x="-3.048" y="-1.778" radius="0.3592" width="0.2032" layer="21"/>
<smd name="1" x="-2.925" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="2" x="-2.275" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="3" x="-1.625" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="4" x="-0.975" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="5" x="-0.325" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="6" x="0.325" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="7" x="0.975" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="8" x="1.625" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="9" x="2.275" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="10" x="2.925" y="-3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="11" x="2.925" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="12" x="2.275" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="13" x="1.625" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="14" x="0.975" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="15" x="0.325" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="16" x="-0.325" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="17" x="-0.975" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="18" x="-1.625" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="19" x="-2.275" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<smd name="20" x="-2.925" y="3.625" dx="0.4" dy="1.5" layer="1"/>
<text x="0" y="0" size="0.4064" layer="25">&gt;NAME</text>
<text x="0" y="-1.27" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-3.1028" y1="-3.937" x2="-2.7472" y2="-2.6416" layer="51"/>
<rectangle x1="-2.4529" y1="-3.937" x2="-2.0973" y2="-2.6416" layer="51"/>
<rectangle x1="-1.8029" y1="-3.937" x2="-1.4473" y2="-2.6416" layer="51"/>
<rectangle x1="-1.1529" y1="-3.937" x2="-0.7973" y2="-2.6416" layer="51"/>
<rectangle x1="-0.5029" y1="-3.937" x2="-0.1473" y2="-2.6416" layer="51"/>
<rectangle x1="0.1471" y1="-3.937" x2="0.5027" y2="-2.6416" layer="51"/>
<rectangle x1="0.7971" y1="-3.937" x2="1.1527" y2="-2.6416" layer="51"/>
<rectangle x1="1.4473" y1="-3.937" x2="1.8029" y2="-2.6416" layer="51"/>
<rectangle x1="2.0973" y1="-3.937" x2="2.4529" y2="-2.6416" layer="51"/>
<rectangle x1="2.7473" y1="-3.937" x2="3.1029" y2="-2.6416" layer="51"/>
<rectangle x1="2.7471" y1="2.6416" x2="3.1027" y2="3.937" layer="51"/>
<rectangle x1="2.0971" y1="2.6416" x2="2.4527" y2="3.937" layer="51"/>
<rectangle x1="1.4471" y1="2.6416" x2="1.8027" y2="3.937" layer="51"/>
<rectangle x1="0.7972" y1="2.6416" x2="1.1528" y2="3.937" layer="51"/>
<rectangle x1="0.1472" y1="2.6416" x2="0.5028" y2="3.937" layer="51"/>
<rectangle x1="-0.5027" y1="2.6416" x2="-0.1471" y2="3.937" layer="51"/>
<rectangle x1="-1.1527" y1="2.6416" x2="-0.7971" y2="3.937" layer="51"/>
<rectangle x1="-1.8027" y1="2.6416" x2="-1.4471" y2="3.937" layer="51"/>
<rectangle x1="-2.4527" y1="2.6416" x2="-2.0971" y2="3.937" layer="51"/>
<rectangle x1="-3.1027" y1="2.6416" x2="-2.7471" y2="3.937" layer="51"/>
</package>
<package name="TVSOP-16">
<wire x1="0.985" y1="0.405" x2="0.985" y2="-3.205" width="0.127" layer="21"/>
<wire x1="0.985" y1="-3.205" x2="4.7" y2="-3.205" width="0.127" layer="21"/>
<wire x1="4.7" y1="-3.205" x2="4.7" y2="0.405" width="0.127" layer="21"/>
<wire x1="4.7" y1="0.405" x2="0.985" y2="0.405" width="0.127" layer="21"/>
<circle x="1.525" y="-0.075" radius="0.2294" width="0.127" layer="21"/>
<smd name="P$1" x="0" y="0" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$2" x="0" y="-0.4" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$3" x="0" y="-0.8" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$4" x="0" y="-1.2" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$5" x="0" y="-1.6" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$6" x="0" y="-2" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$7" x="0" y="-2.4" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$8" x="0" y="-2.8" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$9" x="5.715" y="-2.8" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$10" x="5.715" y="-2.4" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$11" x="5.715" y="-2" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$12" x="5.715" y="-1.6" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$13" x="5.715" y="-1.2" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$14" x="5.715" y="-0.8" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$15" x="5.715" y="-0.4" dx="1.397" dy="0.23" layer="1"/>
<smd name="P$16" x="5.715" y="0" dx="1.397" dy="0.23" layer="1"/>
</package>
<package name="TQFP32-5MM">
<wire x1="-2.5" y1="-2.5" x2="2.5" y2="-2.5" width="0.254" layer="51"/>
<wire x1="2.5" y1="-2.5" x2="2.5" y2="2.5" width="0.254" layer="51"/>
<wire x1="2.5" y1="2.5" x2="-2.5" y2="2.5" width="0.254" layer="51"/>
<wire x1="-2.5" y1="2.5" x2="-2.5" y2="-2.5" width="0.254" layer="51"/>
<wire x1="-2.5" y1="-2.5" x2="2.5" y2="-2.5" width="0.254" layer="21"/>
<wire x1="2.5" y1="-2.5" x2="2.5" y2="2.5" width="0.254" layer="21"/>
<wire x1="2.5" y1="2.5" x2="-2.5" y2="2.5" width="0.254" layer="21"/>
<wire x1="-2.5" y1="2.5" x2="-2.5" y2="-2.5" width="0.254" layer="21"/>
<circle x="-1.5" y="1.5" radius="0.5" width="0.254" layer="21"/>
<smd name="1" x="-3.5" y="1.75" dx="1.143" dy="0.254" layer="1"/>
<smd name="2" x="-3.5" y="1.25" dx="1.143" dy="0.254" layer="1"/>
<smd name="3" x="-3.5" y="0.75" dx="1.143" dy="0.254" layer="1"/>
<smd name="4" x="-3.5" y="0.25" dx="1.143" dy="0.254" layer="1"/>
<smd name="5" x="-3.5" y="-0.25" dx="1.143" dy="0.254" layer="1"/>
<smd name="6" x="-3.5" y="-0.75" dx="1.143" dy="0.254" layer="1"/>
<smd name="7" x="-3.5" y="-1.25" dx="1.143" dy="0.254" layer="1"/>
<smd name="8" x="-3.5" y="-1.75" dx="1.143" dy="0.254" layer="1"/>
<smd name="9" x="-1.75" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="10" x="-1.25" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="11" x="-0.75" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="12" x="-0.25" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="13" x="0.25" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="14" x="0.75" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="15" x="1.25" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="16" x="1.75" y="-3.5" dx="1.143" dy="0.254" layer="1" rot="R90"/>
<smd name="17" x="3.5" y="-1.75" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="18" x="3.5" y="-1.25" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="19" x="3.5" y="-0.75" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="20" x="3.5" y="-0.25" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="21" x="3.5" y="0.25" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="22" x="3.5" y="0.75" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="23" x="3.5" y="1.25" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="24" x="3.5" y="1.75" dx="1.143" dy="0.254" layer="1" rot="R180"/>
<smd name="25" x="1.75" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="26" x="1.25" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="27" x="0.75" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="28" x="0.25" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="29" x="-0.25" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="30" x="-0.75" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="31" x="-1.25" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<smd name="32" x="-1.75" y="3.5" dx="1.143" dy="0.254" layer="1" rot="R270"/>
<text x="-3.81" y="-5.08" size="0.8128" layer="27">&gt;Value</text>
<text x="1.27" y="-5.08" size="0.8128" layer="25">&gt;Name</text>
</package>
<package name="DIL16">
<description>&lt;b&gt;Dual In Line Package&lt;/b&gt;</description>
<wire x1="10.16" y1="2.921" x2="-10.16" y2="2.921" width="0.3048" layer="21"/>
<wire x1="-10.16" y1="-2.921" x2="10.16" y2="-2.921" width="0.3048" layer="21"/>
<wire x1="10.16" y1="2.921" x2="10.16" y2="-2.921" width="0.3048" layer="21"/>
<wire x1="-10.16" y1="2.921" x2="-10.16" y2="1.016" width="0.3048" layer="21"/>
<wire x1="-10.16" y1="-2.921" x2="-10.16" y2="-1.016" width="0.3048" layer="21"/>
<wire x1="-10.16" y1="-1.016" x2="-10.16" y2="1.016" width="0.3048" layer="21" curve="180"/>
<pad name="1" x="-8.89" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="2" x="-6.35" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="3" x="-3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="4" x="-1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="5" x="1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="6" x="3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="7" x="6.35" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="8" x="8.89" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="9" x="8.89" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="10" x="6.35" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="11" x="3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="12" x="1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="13" x="-1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="14" x="-3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="15" x="-6.35" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="16" x="-8.89" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<text x="-10.541" y="-2.921" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="-7.493" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="DIL14">
<wire x1="7.62" y1="2.921" x2="7.62" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="2.921" x2="-10.16" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-2.921" x2="-10.16" y2="-1.016" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-1.016" x2="-10.16" y2="1.016" width="0.2032" layer="21" curve="180"/>
<wire x1="-10.16" y1="2.921" x2="-9.906" y2="2.921" width="0.2032" layer="21"/>
<wire x1="7.62" y1="2.921" x2="7.366" y2="2.921" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-2.921" x2="-9.906" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="7.62" y1="-2.921" x2="7.366" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-7.9502" y1="2.921" x2="-7.2898" y2="2.921" width="0.2032" layer="21"/>
<wire x1="-5.4102" y1="2.921" x2="-4.7498" y2="2.921" width="0.2032" layer="21"/>
<wire x1="-2.8702" y1="2.921" x2="-2.2098" y2="2.921" width="0.2032" layer="21"/>
<wire x1="-0.3302" y1="2.921" x2="0.3302" y2="2.921" width="0.2032" layer="21"/>
<wire x1="2.2098" y1="2.921" x2="2.8702" y2="2.921" width="0.2032" layer="21"/>
<wire x1="4.7498" y1="2.921" x2="5.4102" y2="2.921" width="0.2032" layer="21"/>
<wire x1="4.7498" y1="-2.921" x2="5.4102" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="2.2098" y1="-2.921" x2="2.8702" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-0.3302" y1="-2.921" x2="0.3302" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-2.8702" y1="-2.921" x2="-2.2098" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-5.4102" y1="-2.921" x2="-4.7498" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-7.9502" y1="-2.921" x2="-7.2898" y2="-2.921" width="0.2032" layer="21"/>
<pad name="1" x="-8.89" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="2" x="-6.35" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="3" x="-3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="4" x="-1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="5" x="1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="6" x="3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="7" x="6.35" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="8" x="6.35" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="9" x="3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="10" x="1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="11" x="-1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="12" x="-3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="13" x="-6.35" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="14" x="-8.89" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<text x="-6.35" y="0.635" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-6.35" y="-1.778" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="TSSOP-14">
<smd name="4" x="-2.8" y="-0.05" dx="1.6" dy="0.35" layer="1"/>
<smd name="11" x="2.8" y="0" dx="1.6" dy="0.35" layer="1"/>
<smd name="12" x="2.8" y="0.65" dx="1.6" dy="0.35" layer="1"/>
<smd name="13" x="2.8" y="1.3" dx="1.6" dy="0.35" layer="1"/>
<smd name="14" x="2.8" y="1.95" dx="1.6" dy="0.35" layer="1"/>
<smd name="10" x="2.8" y="-0.65" dx="1.6" dy="0.35" layer="1"/>
<smd name="9" x="2.8" y="-1.3" dx="1.6" dy="0.35" layer="1"/>
<smd name="8" x="2.8" y="-1.95" dx="1.6" dy="0.35" layer="1"/>
<smd name="3" x="-2.8" y="0.6" dx="1.6" dy="0.35" layer="1"/>
<smd name="2" x="-2.8" y="1.25" dx="1.6" dy="0.35" layer="1"/>
<smd name="1" x="-2.8" y="1.9" dx="1.6" dy="0.35" layer="1"/>
<smd name="5" x="-2.8" y="-0.7" dx="1.6" dy="0.35" layer="1"/>
<smd name="6" x="-2.8" y="-1.35" dx="1.6" dy="0.35" layer="1"/>
<smd name="7" x="-2.8" y="-2" dx="1.6" dy="0.35" layer="1"/>
<wire x1="2" y1="2.5" x2="-2" y2="2.5" width="0.127" layer="21"/>
<wire x1="-2" y1="2.5" x2="-2" y2="-2.5" width="0.127" layer="21"/>
<wire x1="-2" y1="-2.5" x2="2" y2="-2.5" width="0.127" layer="21"/>
<wire x1="2" y1="-2.5" x2="2" y2="2.5" width="0.127" layer="21"/>
<circle x="-1.4" y="1.85" radius="0.335409375" width="0.127" layer="21"/>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="POWER-SOP8">
<description>&lt;b&gt;8M, 8-Lead, 0.118" Wide, Miniature Small Outline Package&lt;/b&gt;&lt;p&gt;
MSOP&lt;br&gt;
8M-Package doc1097.pdf</description>
<wire x1="-1.48" y1="1.23" x2="-1.23" y2="1.48" width="0.1524" layer="21" curve="-90" cap="flat"/>
<wire x1="1.23" y1="1.48" x2="1.48" y2="1.23" width="0.1524" layer="21" curve="-90"/>
<wire x1="1.23" y1="-1.49" x2="1.48" y2="-1.24" width="0.1524" layer="21" curve="90"/>
<wire x1="-1.48" y1="-1.24" x2="-1.23" y2="-1.49" width="0.1524" layer="21" curve="90" cap="flat"/>
<wire x1="1.24" y1="-1.49" x2="-1.22" y2="-1.49" width="0.1524" layer="21"/>
<wire x1="-1.22" y1="1.48" x2="1.24" y2="1.48" width="0.1524" layer="21"/>
<wire x1="-1.48" y1="1.23" x2="-1.48" y2="-1.23" width="0.1524" layer="21"/>
<wire x1="1.48" y1="-1.24" x2="1.48" y2="1.23" width="0.1524" layer="21"/>
<circle x="-0.65" y="-0.65" radius="0.325" width="0.254" layer="21"/>
<smd name="1" x="-0.975" y="-2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="2" x="-0.325" y="-2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="3" x="0.325" y="-2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="4" x="0.975" y="-2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="5" x="0.975" y="2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="6" x="0.325" y="2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="7" x="-0.325" y="2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="8" x="-0.975" y="2.1" dx="0.4" dy="1.6" layer="1"/>
<smd name="9" x="0" y="0" dx="1.89" dy="1.57" layer="1"/>
<text x="-2.54" y="-1.27" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="2.54" y="-1.27" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-1.175" y1="-2.45" x2="-0.775" y2="-1.55" layer="51"/>
<rectangle x1="-0.525" y1="-2.45" x2="-0.125" y2="-1.55" layer="51"/>
<rectangle x1="0.125" y1="-2.45" x2="0.525" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="-2.45" x2="1.175" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="1.55" x2="1.175" y2="2.45" layer="51"/>
<rectangle x1="0.125" y1="1.55" x2="0.525" y2="2.45" layer="51"/>
<rectangle x1="-0.525" y1="1.55" x2="-0.125" y2="2.45" layer="51"/>
<rectangle x1="-1.175" y1="1.55" x2="-0.775" y2="2.45" layer="51"/>
</package>
<package name="QFN-8_PAD">
<wire x1="-1.575" y1="1.575" x2="1.575" y2="1.575" width="0.03" layer="51"/>
<wire x1="1.575" y1="1.575" x2="1.575" y2="-1.575" width="0.03" layer="51"/>
<wire x1="1.575" y1="-1.575" x2="-1.575" y2="-1.565" width="0.03" layer="51"/>
<wire x1="-1.575" y1="-1.565" x2="-1.575" y2="1.575" width="0.03" layer="51"/>
<wire x1="-1.27" y1="1.5875" x2="-1.5875" y2="1.5875" width="0.2032" layer="21"/>
<wire x1="-1.5875" y1="1.5875" x2="-1.5875" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="1.5875" x2="1.5875" y2="1.5875" width="0.2032" layer="21"/>
<wire x1="1.5875" y1="1.5875" x2="1.5875" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.5875" y1="-0.635" x2="1.5875" y2="-1.5875" width="0.2032" layer="21"/>
<wire x1="1.5875" y1="-1.5875" x2="1.27" y2="-1.5875" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.5875" x2="-1.5875" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.5875" y1="-1.27" x2="-1.5875" y2="-0.635" width="0.2032" layer="21"/>
<smd name="6" x="0.325" y="1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<smd name="9" x="0" y="0" dx="1.5" dy="1.75" layer="1" rot="R90" cream="no"/>
<smd name="13" x="-1.3875" y="0.325" dx="1.025" dy="0.28" layer="1" rot="R180" stop="no" thermals="no" cream="no"/>
<smd name="10" x="-1.3875" y="-0.325" dx="1.025" dy="0.28" layer="1" rot="R180" stop="no" thermals="no" cream="no"/>
<smd name="12" x="1.3875" y="0.325" dx="1.025" dy="0.28" layer="1" rot="R180" stop="no" thermals="no" cream="no"/>
<smd name="11" x="1.3875" y="-0.325" dx="1.025" dy="0.28" layer="1" rot="R180" stop="no" thermals="no" cream="no"/>
<smd name="7" x="-0.325" y="1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<smd name="8" x="-0.975" y="1.475" dx="0.85" dy="0.35" layer="1" roundness="10" rot="R270"/>
<smd name="5" x="0.975" y="1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<smd name="1" x="-0.975" y="-1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<smd name="2" x="-0.325" y="-1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<smd name="3" x="0.325" y="-1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<smd name="4" x="0.975" y="-1.475" dx="0.85" dy="0.35" layer="1" rot="R90"/>
<rectangle x1="-0.875" y1="-0.75" x2="0.875" y2="0.75" layer="31" rot="R180"/>
<polygon width="0.127" layer="41" spacing="0.0254">
<vertex x="-1.524" y="0.7366"/>
<vertex x="-0.9398" y="0.7366"/>
<vertex x="-0.9398" y="-0.7366"/>
<vertex x="-1.524" y="-0.7366"/>
</polygon>
<polygon width="0.127" layer="41" spacing="0.0254">
<vertex x="0.9398" y="0.7366"/>
<vertex x="1.524" y="0.7366"/>
<vertex x="1.524" y="-0.7366"/>
<vertex x="0.9398" y="-0.7366"/>
</polygon>
</package>
<package name="DIP08-KIT">
<wire x1="-5.08" y1="2.54" x2="5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="5.08" y2="-2.54" width="0.2032" layer="21"/>
<circle x="-3.81" y="-1.27" radius="0.7184" width="0.254" layer="21"/>
<pad name="1" x="-3.81" y="-4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="2" x="-1.27" y="-4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="3" x="1.27" y="-4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="4" x="3.81" y="-4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="5" x="3.81" y="4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="6" x="1.27" y="4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="7" x="-1.27" y="4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<pad name="8" x="-3.81" y="4.191" drill="0.8128" diameter="1.7272" stop="no"/>
<text x="-3.175" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.715" y="-3.81" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<circle x="-3.81" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-1.27" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="1.27" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="3.81" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="3.81" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="1.27" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-1.27" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-3.81" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-3.81" y="4.191" radius="0.9906" width="0" layer="30"/>
<circle x="-1.27" y="4.191" radius="0.9906" width="0" layer="30"/>
<circle x="1.27" y="4.191" radius="0.9906" width="0" layer="30"/>
<circle x="3.81" y="4.191" radius="0.9906" width="0" layer="30"/>
<circle x="3.81" y="-4.191" radius="0.9906" width="0" layer="30"/>
<circle x="1.27" y="-4.191" radius="0.9906" width="0" layer="30"/>
<circle x="-1.27" y="-4.191" radius="0.9906" width="0" layer="30"/>
<circle x="-3.81" y="-4.191" radius="0.9906" width="0" layer="30"/>
<text x="-3.175" y="-0.635" size="1.27" layer="21" ratio="10">&gt;VALUE</text>
</package>
<package name="SO08-TIGHT">
<wire x1="2.159" y1="1.9558" x2="-2.159" y2="1.9558" width="0.1524" layer="21"/>
<wire x1="2.159" y1="-1.9558" x2="2.54" y2="-1.5748" width="0.1524" layer="21" curve="90"/>
<wire x1="-2.159" y1="1.9558" x2="-2.54" y2="1.5748" width="0.1524" layer="21" curve="90"/>
<wire x1="2.54" y1="1.5748" x2="2.159" y2="1.9558" width="0.1524" layer="21" curve="90"/>
<wire x1="-2.54" y1="-1.5748" x2="-2.159" y2="-1.9558" width="0.1524" layer="21" curve="90"/>
<wire x1="-2.159" y1="-1.9558" x2="2.159" y2="-1.9558" width="0.1524" layer="21"/>
<wire x1="2.54" y1="-1.5748" x2="2.54" y2="1.5748" width="0.1524" layer="21"/>
<wire x1="-2.54" y1="1.5748" x2="-2.54" y2="0.508" width="0.1524" layer="21"/>
<wire x1="-2.54" y1="0.508" x2="-2.54" y2="-0.508" width="0.1524" layer="21"/>
<wire x1="-2.54" y1="-0.508" x2="-2.54" y2="-1.5748" width="0.1524" layer="21"/>
<wire x1="-2.54" y1="-0.508" x2="-2.54" y2="0.508" width="0.1524" layer="21" curve="180"/>
<wire x1="-2.54" y1="-1.6002" x2="2.54" y2="-1.6002" width="0.0508" layer="21"/>
<smd name="1" x="-1.905" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="2" x="-0.635" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="3" x="0.635" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="4" x="1.905" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="5" x="1.905" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="6" x="0.635" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="7" x="-0.635" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="8" x="-1.905" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<text x="-1.524" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-2.921" y="-1.778" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<rectangle x1="1.651" y1="1.9558" x2="2.159" y2="3.0988" layer="51"/>
<rectangle x1="-2.159" y1="-3.0988" x2="-1.651" y2="-1.9558" layer="51"/>
<rectangle x1="-0.889" y1="-3.0988" x2="-0.381" y2="-1.9558" layer="51"/>
<rectangle x1="0.381" y1="-3.0734" x2="0.889" y2="-1.9304" layer="51"/>
<rectangle x1="1.651" y1="-3.0988" x2="2.159" y2="-1.9558" layer="51"/>
<rectangle x1="0.381" y1="1.9558" x2="0.889" y2="3.0988" layer="51"/>
<rectangle x1="-0.889" y1="1.9558" x2="-0.381" y2="3.0988" layer="51"/>
<rectangle x1="-2.159" y1="1.9558" x2="-1.651" y2="3.0988" layer="51"/>
</package>
<package name="DIL14-KIT">
<pad name="1" x="-8.89" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="2" x="-6.35" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="3" x="-3.81" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="4" x="-1.27" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="5" x="1.27" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="6" x="3.81" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="7" x="6.35" y="-4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="8" x="6.35" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="9" x="3.81" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="10" x="1.27" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="11" x="-1.27" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="12" x="-3.81" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="13" x="-6.35" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<pad name="14" x="-8.89" y="4.191" drill="0.8128" rot="R90" stop="no"/>
<circle x="-8.89" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-8.89" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="-6.35" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-3.81" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-1.27" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="1.27" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="3.81" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="6.35" y="4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-6.35" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-3.81" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-1.27" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="1.27" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="3.81" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="6.35" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-8.89" y="-4.191" radius="0.4064" width="0" layer="29"/>
<circle x="-3.81" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="-1.27" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="1.27" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="3.81" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="6.35" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="-6.35" y="-4.191" radius="0.7874" width="0" layer="30"/>
<circle x="-3.81" y="-4.191" radius="0.7874" width="0" layer="30"/>
<circle x="-1.27" y="-4.191" radius="0.7874" width="0" layer="30"/>
<circle x="3.81" y="-4.191" radius="0.7874" width="0" layer="30"/>
<circle x="6.35" y="-4.191" radius="0.7874" width="0" layer="30"/>
<circle x="-8.89" y="-4.191" radius="0.7874" width="0" layer="30"/>
<wire x1="7.62" y1="2.921" x2="7.62" y2="-2.921" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="2.921" x2="-10.16" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-2.921" x2="-10.16" y2="-1.016" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-1.016" x2="-10.16" y2="1.016" width="0.2032" layer="21" curve="180"/>
<wire x1="-10.16" y1="2.921" x2="7.62" y2="2.921" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-2.921" x2="7.62" y2="-2.921" width="0.2032" layer="21"/>
<text x="-6.35" y="0.635" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-6.35" y="-1.778" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-6.35" y="-1.778" size="1.27" layer="21" ratio="10">&gt;VALUE</text>
<circle x="-6.35" y="4.191" radius="0.7874" width="0" layer="30"/>
<circle x="1.27" y="-4.191" radius="0.7874" width="0" layer="30"/>
</package>
</packages>
<symbols>
<symbol name="ACS712">
<wire x1="-10.16" y1="-5.08" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
<text x="-10.16" y="8.382" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-7.62" size="1.778" layer="96">&gt;VALUE</text>
<pin name="IP+@1" x="-15.24" y="5.08" length="middle"/>
<pin name="IP+@2" x="-15.24" y="2.54" length="middle"/>
<pin name="IP-@3" x="-15.24" y="0" length="middle"/>
<pin name="IP-@4" x="-15.24" y="-2.54" length="middle"/>
<pin name="GND" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="FILT" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="VOUT" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="VCC" x="12.7" y="5.08" length="middle" rot="R180"/>
</symbol>
<symbol name="AD725">
<wire x1="-12.7" y1="38.1" x2="-12.7" y2="-45.72" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-45.72" x2="20.32" y2="-45.72" width="0.254" layer="94"/>
<wire x1="20.32" y1="-45.72" x2="20.32" y2="38.1" width="0.254" layer="94"/>
<wire x1="20.32" y1="38.1" x2="-12.7" y2="38.1" width="0.254" layer="94"/>
<pin name="STND" x="-17.78" y="-22.86" length="middle"/>
<pin name="AGND" x="0" y="-50.8" length="middle" rot="R90"/>
<pin name="4FSC" x="-17.78" y="-12.7" length="middle"/>
<pin name="APOS" x="12.7" y="43.18" length="middle" rot="R270"/>
<pin name="CE" x="-17.78" y="30.48" length="middle"/>
<pin name="RIN" x="-17.78" y="20.32" length="middle"/>
<pin name="GIN" x="-17.78" y="15.24" length="middle"/>
<pin name="BIN" x="-17.78" y="10.16" length="middle"/>
<pin name="HSYNC" x="-17.78" y="0" length="middle"/>
<pin name="VSYNC" x="-17.78" y="-5.08" length="middle"/>
<pin name="DPOS" x="0" y="43.18" length="middle" rot="R270"/>
<pin name="DGND" x="12.7" y="-50.8" length="middle" rot="R90"/>
<pin name="YTRAP" x="-17.78" y="-27.94" length="middle"/>
<pin name="LUMA" x="25.4" y="-20.32" length="middle" rot="R180"/>
<pin name="COMP" x="25.4" y="-7.62" length="middle" rot="R180"/>
<pin name="CRMA" x="25.4" y="-27.94" length="middle" rot="R180"/>
</symbol>
<symbol name="AD5330">
<wire x1="-10.16" y1="-17.78" x2="-10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="17.78" x2="10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="17.78" x2="10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="-17.78" x2="-10.16" y2="-17.78" width="0.254" layer="94"/>
<text x="2.54" y="-20.32" size="1.778" layer="96">&gt;Value</text>
<text x="-10.16" y="-20.32" size="1.778" layer="95">&gt;Name</text>
<pin name="VDD" x="-12.7" y="15.24" length="short"/>
<pin name="VREF" x="-12.7" y="12.7" length="short"/>
<pin name="CS" x="12.7" y="15.24" length="short" rot="R180"/>
<pin name="DB0" x="-12.7" y="7.62" length="short"/>
<pin name="DB1" x="-12.7" y="5.08" length="short"/>
<pin name="DB2" x="-12.7" y="2.54" length="short"/>
<pin name="DB3" x="-12.7" y="0" length="short"/>
<pin name="DB4" x="-12.7" y="-2.54" length="short"/>
<pin name="DB5" x="-12.7" y="-5.08" length="short"/>
<pin name="DB6" x="-12.7" y="-7.62" length="short"/>
<pin name="DB7" x="-12.7" y="-10.16" length="short"/>
<pin name="WR" x="12.7" y="12.7" length="short" rot="R180"/>
<pin name="CLR" x="12.7" y="7.62" length="short" rot="R180"/>
<pin name="PD" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="GND" x="-12.7" y="-15.24" length="short"/>
<pin name="VOUT" x="12.7" y="-12.7" length="short" rot="R180"/>
<pin name="LDAC" x="12.7" y="10.16" length="short" rot="R180"/>
<pin name="GAIN" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="BUF" x="12.7" y="-2.54" length="short" rot="R180"/>
</symbol>
<symbol name="AD7302">
<wire x1="-10.16" y1="12.7" x2="-10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="-15.24" x2="10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="12.7" x2="-10.16" y2="12.7" width="0.254" layer="94"/>
<text x="-2.54" y="15.24" size="1.778" layer="95" rot="R180">&gt;Name</text>
<text x="-10.16" y="-17.78" size="1.778" layer="96">&gt;Value</text>
<pin name="DB7" x="-15.24" y="10.16" length="middle"/>
<pin name="DB6" x="-15.24" y="7.62" length="middle"/>
<pin name="DB5" x="-15.24" y="5.08" length="middle"/>
<pin name="DB4" x="-15.24" y="2.54" length="middle"/>
<pin name="DB3" x="-15.24" y="0" length="middle"/>
<pin name="DB2" x="-15.24" y="-2.54" length="middle"/>
<pin name="DB1" x="-15.24" y="-5.08" length="middle"/>
<pin name="DB0" x="-15.24" y="-7.62" length="middle"/>
<pin name="CS" x="-15.24" y="-10.16" length="middle"/>
<pin name="WR" x="-15.24" y="-12.7" length="middle"/>
<pin name="DGND" x="15.24" y="10.16" length="middle" rot="R180"/>
<pin name="VOUTA" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="VOUTB" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="AGND" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="REFIN" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="VDD" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="CLR" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="LDAC" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="PD" x="15.24" y="-10.16" length="middle" rot="R180"/>
<pin name="AB" x="15.24" y="-12.7" length="middle" rot="R180"/>
</symbol>
<symbol name="AD7745">
<wire x1="-12.7" y1="12.7" x2="12.7" y2="12.7" width="0.254" layer="94"/>
<wire x1="12.7" y1="12.7" x2="12.7" y2="-10.16" width="0.254" layer="94"/>
<wire x1="12.7" y1="-10.16" x2="-12.7" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-10.16" x2="-12.7" y2="12.7" width="0.254" layer="94"/>
<text x="-12.7" y="13.208" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-12.7" size="1.778" layer="96">&gt;Value</text>
<pin name="/RDY" x="-17.78" y="7.62" length="middle"/>
<pin name="CIN1+" x="-17.78" y="-7.62" length="middle"/>
<pin name="CIN1-" x="-17.78" y="-5.08" length="middle"/>
<pin name="CIN2+" x="17.78" y="-7.62" length="middle" rot="R180"/>
<pin name="CIN2-" x="17.78" y="-5.08" length="middle" rot="R180"/>
<pin name="EXCA" x="-17.78" y="5.08" length="middle"/>
<pin name="EXCB" x="-17.78" y="2.54" length="middle"/>
<pin name="GND" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="NC" x="17.78" y="7.62" length="middle" rot="R180"/>
<pin name="REFIN+" x="-17.78" y="0" length="middle"/>
<pin name="REFIN-" x="-17.78" y="-2.54" length="middle"/>
<pin name="SCL" x="-17.78" y="10.16" length="middle"/>
<pin name="SDA" x="17.78" y="10.16" length="middle" rot="R180"/>
<pin name="VDD" x="17.78" y="5.08" length="middle" rot="R180"/>
<pin name="VIN+" x="17.78" y="-2.54" length="middle" rot="R180"/>
<pin name="VIN-" x="17.78" y="0" length="middle" rot="R180"/>
</symbol>
<symbol name="AD7781">
<wire x1="-12.7" y1="10.16" x2="-12.7" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="-10.16" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-12.7" y2="10.16" width="0.254" layer="94"/>
<text x="-12.7" y="10.668" size="1.778" layer="95">&gt;Name</text>
<text x="-12.7" y="-12.446" size="1.778" layer="96">&gt;Value</text>
<pin name="SCLK" x="12.7" y="0" length="short" rot="R180"/>
<pin name="DOUT" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="GAIN" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="AIN+" x="-15.24" y="0" length="short"/>
<pin name="AIN-" x="-15.24" y="-2.54" length="short"/>
<pin name="REFIN+" x="-15.24" y="2.54" length="short"/>
<pin name="REFIN-" x="-15.24" y="-5.08" length="short"/>
<pin name="BPDSW" x="-15.24" y="-7.62" length="short"/>
<pin name="GND" x="12.7" y="-7.62" length="short" rot="R180"/>
<pin name="AVDD" x="-15.24" y="7.62" length="short"/>
<pin name="DVDD" x="12.7" y="7.62" length="short" rot="R180"/>
<pin name="*PDRST" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="FILTER" x="12.7" y="-2.54" length="short" rot="R180"/>
</symbol>
<symbol name="OP-AMP+--1">
<wire x1="-3.81" y1="3.175" x2="-3.81" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-4.445" y1="2.54" x2="-3.175" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-4.445" y1="-2.54" x2="-3.175" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="5.08" x2="-2.54" y2="3.8862" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-3.9116" x2="-2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="-5.08" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="0" y2="-2.54" width="0.4064" layer="94"/>
<wire x1="0" y1="-2.54" x2="5.08" y2="0" width="0.4064" layer="94"/>
<wire x1="0" y1="-2.54" x2="0" y2="0" width="0.1524" layer="94"/>
<text x="2.54" y="5.715" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
<text x="-1.27" y="4.445" size="0.8128" layer="93" rot="R90">V+</text>
<text x="-1.27" y="-5.715" size="0.8128" layer="93" rot="R90">V-</text>
<text x="3.81" y="-4.572" size="0.8128" layer="93" rot="R90">EPAD</text>
<rectangle x1="-2.54" y1="-0.762" x2="0.762" y2="0.762" layer="94"/>
<pin name="-IN" x="-7.62" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="+IN" x="-7.62" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="OUT" x="7.62" y="0" visible="pad" length="short" direction="out" rot="R180"/>
<pin name="V+" x="-2.54" y="7.62" visible="pad" length="short" direction="pwr" rot="R270"/>
<pin name="V-" x="-2.54" y="-7.62" visible="pad" length="short" direction="pwr" rot="R90"/>
<pin name="EPAD" x="0" y="-5.08" visible="pad" length="short" rot="R90"/>
</symbol>
<symbol name="OP-AMP-1">
<wire x1="-3.81" y1="3.175" x2="-3.81" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-4.445" y1="2.54" x2="-3.175" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-4.445" y1="-2.54" x2="-3.175" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="-5.08" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="0" width="0.4064" layer="94"/>
<text x="2.54" y="5.715" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
<pin name="-IN" x="-7.62" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="+IN" x="-7.62" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="OUT" x="7.62" y="0" visible="pad" length="short" direction="out" rot="R180"/>
</symbol>
<symbol name="AD9835">
<wire x1="-10.16" y1="22.86" x2="-10.16" y2="0" width="0.254" layer="94"/>
<wire x1="-10.16" y1="0" x2="10.16" y2="0" width="0.254" layer="94"/>
<wire x1="10.16" y1="0" x2="10.16" y2="22.86" width="0.254" layer="94"/>
<wire x1="10.16" y1="22.86" x2="-10.16" y2="22.86" width="0.254" layer="94"/>
<text x="-9.652" y="23.368" size="1.524" layer="95">&gt;Name</text>
<text x="-9.906" y="-2.286" size="1.524" layer="96">&gt;Value</text>
<pin name="FS_ADJ" x="-15.24" y="20.32" visible="pin" length="middle"/>
<pin name="REFIN" x="-15.24" y="17.78" visible="pin" length="middle"/>
<pin name="REFOUT" x="-15.24" y="15.24" visible="pin" length="middle"/>
<pin name="DVDD" x="-15.24" y="12.7" visible="pin" length="middle"/>
<pin name="DGND" x="-15.24" y="10.16" visible="pin" length="middle"/>
<pin name="MCLK" x="-15.24" y="7.62" visible="pin" length="middle"/>
<pin name="SCLK" x="-15.24" y="5.08" visible="pin" length="middle"/>
<pin name="SDATA" x="-15.24" y="2.54" visible="pin" length="middle"/>
<pin name="FSYNC" x="15.24" y="2.54" visible="pin" length="middle" rot="R180"/>
<pin name="FSEL" x="15.24" y="5.08" visible="pin" length="middle" rot="R180"/>
<pin name="PSEL1" x="15.24" y="7.62" visible="pin" length="middle" rot="R180"/>
<pin name="PSEL0" x="15.24" y="10.16" visible="pin" length="middle" rot="R180"/>
<pin name="AGND" x="15.24" y="12.7" visible="pin" length="middle" rot="R180"/>
<pin name="IOUT" x="15.24" y="15.24" visible="pin" length="middle" rot="R180"/>
<pin name="AVDD" x="15.24" y="17.78" visible="pin" length="middle" rot="R180"/>
<pin name="COMP" x="15.24" y="20.32" visible="pin" length="middle" rot="R180"/>
</symbol>
<symbol name="ALM-1412">
<wire x1="-10.16" y1="-12.7" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="7.62" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<text x="-10.16" y="8.382" size="1.778" layer="95">&gt;NAME</text>
<text x="4.064" y="8.382" size="1.778" layer="96">&gt;VALUE</text>
<pin name="RF_IN" x="-12.7" y="-2.54" visible="pin" length="short"/>
<pin name="GND" x="-5.08" y="-15.24" visible="pin" length="short" rot="R90"/>
<pin name="SD" x="-12.7" y="2.54" visible="pin" length="short"/>
<pin name="RF_OUT" x="12.7" y="0" visible="pin" length="short" rot="R180"/>
<pin name="VDD" x="0" y="10.16" visible="pin" length="short" rot="R270"/>
<pin name="GND@6" x="-2.54" y="-15.24" length="short" rot="R90"/>
<pin name="GND@7" x="0" y="-15.24" length="short" rot="R90"/>
<pin name="GND@8" x="2.54" y="-15.24" length="short" rot="R90"/>
<pin name="GND@9" x="5.08" y="-15.24" length="short" rot="R90"/>
</symbol>
<symbol name="AS3400">
<wire x1="0" y1="33.02" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="33.02" y2="0" width="0.254" layer="94"/>
<wire x1="33.02" y1="0" x2="33.02" y2="33.02" width="0.254" layer="94"/>
<wire x1="33.02" y1="33.02" x2="0" y2="33.02" width="0.254" layer="94"/>
<text x="0" y="-2.54" size="1.778" layer="95">&gt;NAME</text>
<text x="25.4" y="-2.54" size="1.778" layer="96">&gt;VALUE</text>
<pin name="AGND" x="-5.08" y="22.86" length="middle"/>
<pin name="LINL" x="-5.08" y="20.32" length="middle"/>
<pin name="LINR" x="-5.08" y="17.78" length="middle"/>
<pin name="VOL_CSDA" x="-5.08" y="15.24" length="middle"/>
<pin name="MODE_CSCL" x="-5.08" y="12.7" length="middle"/>
<pin name="MICL" x="-5.08" y="10.16" length="middle"/>
<pin name="MICS" x="10.16" y="-5.08" length="middle" rot="R90"/>
<pin name="MICR" x="12.7" y="-5.08" length="middle" rot="R90"/>
<pin name="QMICR" x="15.24" y="-5.08" length="middle" rot="R90"/>
<pin name="QLINR" x="17.78" y="-5.08" length="middle" rot="R90"/>
<pin name="IOP1R" x="20.32" y="-5.08" length="middle" rot="R90"/>
<pin name="QOP1R" x="22.86" y="-5.08" length="middle" rot="R90"/>
<pin name="IOP2R" x="38.1" y="10.16" length="middle" rot="R180"/>
<pin name="QOP2R" x="38.1" y="12.7" length="middle" rot="R180"/>
<pin name="VSS" x="38.1" y="15.24" length="middle" rot="R180"/>
<pin name="HPL" x="38.1" y="17.78" length="middle" rot="R180"/>
<pin name="HPR" x="38.1" y="20.32" length="middle" rot="R180"/>
<pin name="HPVDD" x="38.1" y="22.86" length="middle" rot="R180"/>
<pin name="VBAT" x="22.86" y="38.1" length="middle" rot="R270"/>
<pin name="CPP" x="20.32" y="38.1" length="middle" rot="R270"/>
<pin name="GND" x="17.78" y="38.1" length="middle" rot="R270"/>
<pin name="CPN" x="15.24" y="38.1" length="middle" rot="R270"/>
<pin name="VNEG" x="12.7" y="38.1" length="middle" rot="R270"/>
<pin name="QMICL" x="10.16" y="38.1" length="middle" rot="R270"/>
<pin name="PAD" x="7.62" y="38.1" length="middle" rot="R270"/>
</symbol>
<symbol name="MCP4725">
<wire x1="-7.62" y1="-5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<text x="-7.62" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-7.62" size="1.778" layer="96">&gt;VALUE</text>
<pin name="VOUT" x="-12.7" y="2.54" length="middle"/>
<pin name="VSS" x="-12.7" y="0" length="middle"/>
<pin name="VDD" x="-12.7" y="-2.54" length="middle"/>
<pin name="AO" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="SCL" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="SDA" x="12.7" y="-2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="HT8950">
<wire x1="-10.16" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="15.24" x2="-10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="-10.16" y1="15.24" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<text x="-9.652" y="16.002" size="1.778" layer="94">&gt;NAME</text>
<text x="-5.588" y="-15.24" size="1.778" layer="94">&gt;VALUE</text>
<pin name="SW0" x="-15.24" y="12.7" length="middle"/>
<pin name="SW1" x="-15.24" y="10.16" length="middle"/>
<pin name="SW2" x="-15.24" y="7.62" length="middle"/>
<pin name="VSS" x="-15.24" y="5.08" length="middle"/>
<pin name="AO" x="-15.24" y="0" length="middle"/>
<pin name="AIN" x="-15.24" y="-2.54" length="middle"/>
<pin name="VDD" x="-15.24" y="-5.08" length="middle"/>
<pin name="LAMP" x="-15.24" y="-7.62" length="middle"/>
<pin name="AUDIO" x="-15.24" y="-10.16" length="middle"/>
<pin name="VREF" x="15.24" y="-10.16" length="middle" rot="R180"/>
<pin name="TS" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="FVIB" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="OSC2" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="OSC1" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="VIB" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="TGU" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="TGD" x="15.24" y="10.16" length="middle" rot="R180"/>
<pin name="ROB" x="15.24" y="12.7" length="middle" rot="R180"/>
</symbol>
<symbol name="OP-AMP+-">
<wire x1="-1.27" y1="-3.175" x2="-1.27" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="-1.905" y1="-2.54" x2="-0.635" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-1.905" y1="2.54" x2="-0.635" y2="2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="-5.08" x2="0" y2="-3.8862" width="0.1524" layer="94"/>
<wire x1="0" y1="3.9116" x2="0" y2="5.08" width="0.1524" layer="94"/>
<wire x1="7.62" y1="0" x2="-2.54" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-2.54" y1="-5.08" x2="-2.54" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-2.54" y1="5.08" x2="7.62" y2="0" width="0.4064" layer="94"/>
<text x="5.08" y="-5.715" size="1.778" layer="95" rot="MR180">&gt;NAME</text>
<text x="5.08" y="5.08" size="1.778" layer="96" rot="MR180">&gt;VALUE</text>
<text x="1.27" y="5.715" size="0.8128" layer="93" rot="MR270">V+</text>
<text x="1.27" y="-4.445" size="0.8128" layer="93" rot="MR270">V-</text>
<pin name="+IN" x="-5.08" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="-IN" x="-5.08" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="OUT" x="10.16" y="0" visible="pad" length="short" direction="out" rot="R180"/>
<pin name="V+" x="0" y="7.62" visible="pad" length="short" direction="pwr" rot="R270"/>
<pin name="V-" x="0" y="-7.62" visible="pad" length="short" direction="pwr" rot="R90"/>
</symbol>
<symbol name="OP-AMP">
<wire x1="-3.81" y1="3.175" x2="-3.81" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-4.445" y1="2.54" x2="-3.175" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-4.445" y1="-2.54" x2="-3.175" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="-5.08" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="0" width="0.4064" layer="94"/>
<text x="2.54" y="5.715" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
<pin name="+IN" x="-7.62" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="-IN" x="-7.62" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="OUT" x="7.62" y="0" visible="pad" length="short" direction="out" rot="R180"/>
</symbol>
<symbol name="LMV324">
<wire x1="12.7" y1="0" x2="5.08" y2="-3.048" width="0.254" layer="94"/>
<wire x1="5.08" y1="-3.048" x2="0" y2="-5.08" width="0.254" layer="94"/>
<wire x1="0" y1="-5.08" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="5.08" y2="3.048" width="0.254" layer="94"/>
<pin name="-IN" x="-2.54" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="+IN" x="-2.54" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="-V" x="5.08" y="-7.62" length="short" direction="pwr" rot="R90"/>
<pin name="OUT" x="15.24" y="0" visible="pad" length="short" direction="out" rot="R180"/>
<pin name="+V" x="5.08" y="7.62" length="short" direction="pwr" rot="R270"/>
<text x="1.016" y="1.778" size="1.778" layer="94">-</text>
<text x="0.762" y="-3.302" size="1.778" layer="94">+</text>
<wire x1="5.08" y1="3.048" x2="12.7" y2="0" width="0.254" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="5.08" y1="5.08" x2="5.08" y2="3.048" width="0.1524" layer="94"/>
<text x="7.62" y="5.08" size="1.778" layer="95">&gt;NAME</text>
<text x="7.62" y="2.54" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="LMV324_2">
<wire x1="12.7" y1="0" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="0" y2="-5.08" width="0.254" layer="94"/>
<wire x1="0" y1="-5.08" x2="12.7" y2="0" width="0.254" layer="94"/>
<pin name="-IN" x="-2.54" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="+IN" x="-2.54" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="OUT" x="15.24" y="0" visible="pad" length="short" direction="out" rot="R180"/>
<text x="0.508" y="1.778" size="1.778" layer="94">-</text>
<text x="0.508" y="-3.302" size="1.778" layer="94">+</text>
<text x="7.62" y="2.54" size="1.778" layer="96">&gt;VALUE</text>
<text x="7.62" y="5.08" size="1.778" layer="95">&gt;NAME</text>
</symbol>
<symbol name="OPAMP_2">
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="0" width="0.4064" layer="94"/>
<wire x1="5.08" y1="0" x2="-5.08" y2="5.08" width="0.4064" layer="94"/>
<text x="-4.318" y="2.032" size="1.27" layer="94" font="vector">-</text>
<text x="-4.318" y="-3.302" size="1.27" layer="94" font="vector">+</text>
<text x="2.032" y="2.54" size="1.27" layer="94" font="vector" rot="R90">+V</text>
<text x="2.032" y="-5.588" size="1.27" layer="94" font="vector" rot="R90">GND</text>
<pin name="-IN1" x="-7.62" y="2.54" visible="off" length="short" direction="in"/>
<pin name="+IN1" x="-7.62" y="-2.54" visible="off" length="short" direction="in"/>
<pin name="OUT1" x="7.62" y="0" visible="off" length="short" direction="out" rot="R180"/>
<pin name="+V" x="0" y="5.08" visible="off" length="short" direction="pwr" rot="R270"/>
<pin name="GND" x="0" y="-5.08" visible="off" length="short" direction="pwr" rot="R90"/>
<text x="5.08" y="2.54" size="1.778" layer="95">&gt;Name</text>
<text x="5.08" y="-5.08" size="1.778" layer="96">&gt;Value</text>
</symbol>
<symbol name="OPAMP_2_1">
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="0" width="0.4064" layer="94"/>
<wire x1="5.08" y1="0" x2="-5.08" y2="5.08" width="0.4064" layer="94"/>
<text x="-4.318" y="2.032" size="1.27" layer="94" font="vector">-</text>
<text x="-4.318" y="-3.302" size="1.27" layer="94" font="vector">+</text>
<pin name="OUT2" x="7.62" y="0" visible="off" length="short" direction="out" rot="R180"/>
<pin name="-IN2" x="-7.62" y="2.54" visible="off" length="short" direction="in"/>
<pin name="+IN2" x="-7.62" y="-2.54" visible="off" length="short" direction="in"/>
</symbol>
<symbol name="LT1014">
<wire x1="12.7" y1="0" x2="-5.08" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-12.7" x2="-5.08" y2="12.7" width="0.254" layer="94"/>
<wire x1="-5.08" y1="12.7" x2="12.7" y2="0" width="0.254" layer="94"/>
<pin name="-IN" x="-10.16" y="5.08" length="middle" direction="in"/>
<pin name="+IN" x="-10.16" y="-5.08" length="middle" direction="in"/>
<pin name="-V" x="2.54" y="-12.7" length="middle" direction="pwr" rot="R90"/>
<pin name="OUT" x="17.78" y="0" length="middle" direction="out" rot="R180"/>
<pin name="+V" x="2.54" y="12.7" length="middle" direction="pwr" rot="R270"/>
</symbol>
<symbol name="LT1014_2">
<wire x1="12.7" y1="0" x2="-5.08" y2="12.7" width="0.254" layer="94"/>
<wire x1="-5.08" y1="12.7" x2="-5.08" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-12.7" x2="12.7" y2="0" width="0.254" layer="94"/>
<pin name="-IN" x="-10.16" y="5.08" length="middle" direction="pwr"/>
<pin name="+IN" x="-10.16" y="-5.08" length="middle" direction="pwr"/>
<pin name="OUT" x="17.78" y="0" length="middle" direction="pwr" rot="R180"/>
</symbol>
<symbol name="LTC6244">
<wire x1="-5.08" y1="7.62" x2="-5.08" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-12.7" x2="10.16" y2="-2.54" width="0.254" layer="94"/>
<wire x1="10.16" y1="-2.54" x2="-5.08" y2="7.62" width="0.254" layer="94"/>
<pin name="-IN" x="-10.16" y="0" length="middle"/>
<pin name="+IN" x="-10.16" y="-5.08" length="middle"/>
<pin name="-V" x="2.54" y="-12.7" length="middle" rot="R90"/>
<pin name="+V" x="2.54" y="7.62" length="middle" rot="R270"/>
<pin name="OUT" x="15.24" y="-2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="LTC6244_2">
<wire x1="-5.08" y1="10.16" x2="-5.08" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-10.16" x2="10.16" y2="0" width="0.254" layer="94"/>
<wire x1="10.16" y1="0" x2="-5.08" y2="10.16" width="0.254" layer="94"/>
<pin name="-IN" x="-10.16" y="2.54" length="middle"/>
<pin name="+IN" x="-10.16" y="-2.54" length="middle"/>
<pin name="OUT" x="15.24" y="0" length="middle" rot="R180"/>
</symbol>
<symbol name="MAX323">
<wire x1="-5.08" y1="7.62" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="-5.08" x2="12.7" y2="7.62" width="0.254" layer="94"/>
<wire x1="12.7" y1="7.62" x2="-5.08" y2="7.62" width="0.254" layer="94"/>
<pin name="NO1" x="-10.16" y="5.08" length="middle"/>
<pin name="COM1" x="-10.16" y="2.54" length="middle"/>
<pin name="IN2" x="-10.16" y="0" length="middle"/>
<pin name="V-" x="-10.16" y="-2.54" length="middle"/>
<pin name="NO2" x="17.78" y="-2.54" length="middle" rot="R180"/>
<pin name="COM2" x="17.78" y="0" length="middle" rot="R180"/>
<pin name="IN1" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="V+" x="17.78" y="5.08" length="middle" rot="R180"/>
</symbol>
<symbol name="MAX6675">
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<text x="-5.08" y="10.16" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-10.16" size="1.778" layer="96">&gt;Value</text>
<pin name="VSS" x="12.7" y="-5.08" length="middle" rot="R180"/>
<pin name="T-" x="12.7" y="5.08" length="middle" rot="R180"/>
<pin name="T+" x="12.7" y="7.62" length="middle" rot="R180"/>
<pin name="VDD" x="-12.7" y="7.62" length="middle"/>
<pin name="MISO" x="-12.7" y="0" length="middle"/>
<pin name="CS" x="-12.7" y="-2.54" length="middle"/>
<pin name="SCK" x="-12.7" y="-5.08" length="middle"/>
</symbol>
<symbol name="MCP41XXX">
<wire x1="-5.08" y1="25.4" x2="-5.08" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-10.16" x2="7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="-10.16" x2="7.62" y2="25.4" width="0.254" layer="94"/>
<wire x1="7.62" y1="25.4" x2="-5.08" y2="25.4" width="0.254" layer="94"/>
<pin name="VCC" x="-10.16" y="20.32" length="middle"/>
<pin name="CS" x="-10.16" y="15.24" length="middle"/>
<pin name="SCK" x="-10.16" y="12.7" length="middle"/>
<pin name="DI" x="-10.16" y="10.16" length="middle"/>
<pin name="A" x="-10.16" y="5.08" length="middle"/>
<pin name="W" x="-10.16" y="2.54" length="middle"/>
<pin name="B" x="-10.16" y="0" length="middle"/>
<pin name="GND" x="-10.16" y="-5.08" length="middle"/>
</symbol>
<symbol name="MCP42XXX">
<wire x1="-5.08" y1="22.86" x2="10.16" y2="22.86" width="0.254" layer="94"/>
<wire x1="10.16" y1="22.86" x2="10.16" y2="-33.02" width="0.254" layer="94"/>
<wire x1="10.16" y1="-33.02" x2="-5.08" y2="-33.02" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-33.02" x2="-5.08" y2="22.86" width="0.254" layer="94"/>
<pin name="A0" x="-10.16" y="10.16" length="middle"/>
<pin name="W0" x="-10.16" y="7.62" length="middle"/>
<pin name="B0" x="-10.16" y="5.08" length="middle"/>
<pin name="A1" x="-10.16" y="0" length="middle"/>
<pin name="W1" x="-10.16" y="-2.54" length="middle"/>
<pin name="B1" x="-10.16" y="-5.08" length="middle"/>
<pin name="SCK" x="-10.16" y="-10.16" length="middle"/>
<pin name="DI" x="-10.16" y="-12.7" length="middle"/>
<pin name="DO" x="-10.16" y="-15.24" length="middle"/>
<pin name="SHTDWN" x="-10.16" y="-22.86" length="middle"/>
<pin name="RST" x="-10.16" y="-25.4" length="middle"/>
<pin name="GND" x="-10.16" y="-30.48" length="middle"/>
<pin name="VCC" x="-10.16" y="17.78" length="middle"/>
<pin name="CS" x="-10.16" y="-17.78" length="middle"/>
</symbol>
<symbol name="MSGEQ7">
<wire x1="-12.7" y1="7.62" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="7.62" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="-12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-5.08" x2="-12.7" y2="7.62" width="0.254" layer="94"/>
<text x="-6.096" y="8.636" size="1.778" layer="95">&gt;NAME</text>
<text x="-6.096" y="-7.874" size="1.778" layer="96">MSGEQ7</text>
<pin name="DCOUT" x="15.24" y="5.08" visible="pin" length="middle" rot="R180"/>
<pin name="CG" x="15.24" y="0" visible="pin" length="middle" rot="R180"/>
<pin name="CKIN" x="15.24" y="2.54" visible="pin" length="middle" rot="R180"/>
<pin name="GND" x="15.24" y="-2.54" visible="pin" length="middle" rot="R180"/>
<pin name="RESET" x="-17.78" y="-2.54" visible="pin" length="middle" direction="in"/>
<pin name="STROBE" x="-17.78" y="0" visible="pin" length="middle" direction="in"/>
<pin name="AUDIO_IN" x="-17.78" y="2.54" visible="pin" length="middle" direction="in"/>
<pin name="VDD" x="-17.78" y="5.08" visible="pin" length="middle" direction="in"/>
</symbol>
<symbol name="CD74HC4067">
<wire x1="-10.16" y1="20.32" x2="10.16" y2="20.32" width="0.254" layer="94"/>
<wire x1="10.16" y1="20.32" x2="10.16" y2="-22.86" width="0.254" layer="94"/>
<wire x1="10.16" y1="-22.86" x2="-10.16" y2="-22.86" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-22.86" x2="-10.16" y2="20.32" width="0.254" layer="94"/>
<text x="-10.16" y="21.082" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-25.4" size="1.778" layer="95">&gt;Value</text>
<pin name="COM" x="15.24" y="-10.16" length="middle" rot="R180"/>
<pin name="CHAN7" x="-15.24" y="0" length="middle"/>
<pin name="CHAN6" x="-15.24" y="2.54" length="middle"/>
<pin name="CHAN5" x="-15.24" y="5.08" length="middle"/>
<pin name="CHAN4" x="-15.24" y="7.62" length="middle"/>
<pin name="CHAN3" x="-15.24" y="10.16" length="middle"/>
<pin name="CHAN2" x="-15.24" y="12.7" length="middle"/>
<pin name="CHAN1" x="-15.24" y="15.24" length="middle"/>
<pin name="CHAN0" x="-15.24" y="17.78" length="middle"/>
<pin name="S0" x="15.24" y="2.54" length="middle" direction="in" rot="R180"/>
<pin name="S1" x="15.24" y="0" length="middle" direction="in" rot="R180"/>
<pin name="GND" x="15.24" y="-20.32" length="middle" rot="R180"/>
<pin name="S3" x="15.24" y="-5.08" length="middle" direction="in" rot="R180"/>
<pin name="S2" x="15.24" y="-2.54" length="middle" direction="in" rot="R180"/>
<pin name="EN" x="15.24" y="7.62" length="middle" direction="in" function="dot" rot="R180"/>
<pin name="CHAN15" x="-15.24" y="-20.32" length="middle"/>
<pin name="CHAN14" x="-15.24" y="-17.78" length="middle"/>
<pin name="CHAN13" x="-15.24" y="-15.24" length="middle"/>
<pin name="CHAN12" x="-15.24" y="-12.7" length="middle"/>
<pin name="CHAN11" x="-15.24" y="-10.16" length="middle"/>
<pin name="CHAN10" x="-15.24" y="-7.62" length="middle"/>
<pin name="CHAN9" x="-15.24" y="-5.08" length="middle"/>
<pin name="CHAN8" x="-15.24" y="-2.54" length="middle"/>
<pin name="VCC" x="15.24" y="17.78" length="middle" rot="R180"/>
</symbol>
<symbol name="TS3A5017">
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-12.7" x2="7.62" y2="-12.7" width="0.254" layer="94"/>
<wire x1="7.62" y1="-12.7" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<text x="-6.35" y="10.668" size="1.778" layer="94">TS3A5017</text>
<pin name="IN2" x="-12.7" y="5.08" length="middle"/>
<pin name="1S4" x="-12.7" y="2.54" length="middle"/>
<pin name="1S3" x="-12.7" y="0" length="middle"/>
<pin name="1S2" x="-12.7" y="-2.54" length="middle"/>
<pin name="1S1" x="-12.7" y="-5.08" length="middle"/>
<pin name="1D" x="-12.7" y="-7.62" length="middle"/>
<pin name="GND" x="-12.7" y="-10.16" length="middle"/>
<pin name="2D" x="12.7" y="-10.16" length="middle" rot="R180"/>
<pin name="2S1" x="12.7" y="-7.62" length="middle" rot="R180"/>
<pin name="2S2" x="12.7" y="-5.08" length="middle" rot="R180"/>
<pin name="2S3" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="2S4" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="IN1" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="VCC" x="12.7" y="7.62" length="middle" rot="R180"/>
<pin name="1EN" x="-12.7" y="7.62" length="middle" function="dot"/>
<pin name="2EN" x="12.7" y="5.08" length="middle" function="dot" rot="R180"/>
</symbol>
<symbol name="NE555">
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-10.16" x2="7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="-10.16" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<text x="-7.62" y="11.43" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-12.7" size="1.778" layer="96">&gt;VALUE</text>
<pin name="TRE" x="-10.16" y="7.62" length="short" direction="in"/>
<pin name="OUT" x="10.16" y="0" length="short" direction="out" rot="R180"/>
<pin name="DIS" x="-10.16" y="0" length="short" direction="in"/>
<pin name="TRI" x="-10.16" y="-7.62" length="short" direction="in"/>
<pin name="VCC+" x="10.16" y="7.62" length="short" direction="pwr" rot="R180"/>
<pin name="GND" x="10.16" y="-7.62" length="short" direction="pwr" rot="R180"/>
<pin name="CON" x="10.16" y="-5.08" length="short" direction="in" rot="R180"/>
<pin name="/RES" x="10.16" y="5.08" length="short" direction="in" rot="R180"/>
</symbol>
<symbol name="PCM1803A">
<wire x1="-10.16" y1="-20.32" x2="10.16" y2="-20.32" width="0.254" layer="94"/>
<wire x1="10.16" y1="-20.32" x2="10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="12.7" x2="-10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="12.7" x2="-10.16" y2="-20.32" width="0.254" layer="94"/>
<text x="-10.16" y="13.462" size="1.27" layer="95">&gt;NAME</text>
<text x="-10.16" y="-22.352" size="1.27" layer="96">&gt;VALUE</text>
<pin name="VINL" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="VINR" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="VREF1" x="15.24" y="-12.7" length="middle" rot="R180"/>
<pin name="VREF2" x="15.24" y="-15.24" length="middle" rot="R180"/>
<pin name="VCCA" x="15.24" y="10.16" length="middle" rot="R180"/>
<pin name="GNDA" x="15.24" y="-17.78" length="middle" rot="R180"/>
<pin name="PDWN" x="-15.24" y="-7.62" length="middle"/>
<pin name="BPAS" x="-15.24" y="-5.08" length="middle"/>
<pin name="TEST" x="-15.24" y="-15.24" length="middle"/>
<pin name="LRCK" x="-15.24" y="2.54" length="middle"/>
<pin name="BCK" x="-15.24" y="5.08" length="middle"/>
<pin name="DOUT" x="-15.24" y="7.62" length="middle"/>
<pin name="GNDD" x="-15.24" y="-17.78" length="middle"/>
<pin name="VDD" x="-15.24" y="10.16" length="middle"/>
<pin name="SCK" x="-15.24" y="0" length="middle"/>
<pin name="OSR" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="FMT0" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="FMT1" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="MD0" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="MD1" x="15.24" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="SN74LV4052APWR">
<wire x1="-17.78" y1="30.48" x2="-17.78" y2="0" width="0.254" layer="94"/>
<wire x1="-17.78" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="30.48" width="0.254" layer="94"/>
<wire x1="2.54" y1="30.48" x2="-17.78" y2="30.48" width="0.254" layer="94"/>
<text x="-18.796" y="30.988" size="1.778" layer="94">SN74LV4052APWR</text>
<pin name="2Y0" x="7.62" y="10.16" length="middle" rot="R180"/>
<pin name="2Y2" x="7.62" y="5.08" length="middle" rot="R180"/>
<pin name="2-COM" x="-22.86" y="10.16" length="middle"/>
<pin name="2Y3" x="7.62" y="2.54" length="middle" rot="R180"/>
<pin name="2Y1" x="7.62" y="7.62" length="middle" rot="R180"/>
<pin name="INH" x="7.62" y="27.94" length="middle" rot="R180"/>
<pin name="GNG@7" x="-22.86" y="5.08" length="middle"/>
<pin name="GND@8" x="-22.86" y="2.54" length="middle"/>
<pin name="B" x="-22.86" y="20.32" length="middle"/>
<pin name="A" x="-22.86" y="22.86" length="middle"/>
<pin name="1Y3" x="7.62" y="15.24" length="middle" rot="R180"/>
<pin name="1Y0" x="7.62" y="22.86" length="middle" rot="R180"/>
<pin name="1-COM" x="-22.86" y="15.24" length="middle"/>
<pin name="1Y1" x="7.62" y="20.32" length="middle" rot="R180"/>
<pin name="1Y2" x="7.62" y="17.78" length="middle" rot="R180"/>
<pin name="VCC" x="-22.86" y="27.94" length="middle"/>
</symbol>
<symbol name="TVP5150-NTSC_DECODER-1">
<wire x1="-12.7" y1="-27.94" x2="-12.7" y2="25.4" width="0.254" layer="94"/>
<wire x1="-12.7" y1="25.4" x2="12.7" y2="25.4" width="0.254" layer="94"/>
<wire x1="12.7" y1="25.4" x2="12.7" y2="-27.94" width="0.254" layer="94"/>
<wire x1="12.7" y1="-27.94" x2="-12.7" y2="-27.94" width="0.254" layer="94"/>
<text x="-12.7" y="25.4" size="1.27" layer="96">&gt;Value</text>
<text x="-12.7" y="-30.48" size="1.27" layer="96">&gt;Name</text>
<pin name="AGND" x="-15.24" y="-25.4" length="short"/>
<pin name="AIP1A" x="-15.24" y="-5.08" length="short"/>
<pin name="AIP1B" x="-15.24" y="-7.62" length="short"/>
<pin name="AVID" x="15.24" y="-20.32" length="short" rot="R180"/>
<pin name="CH_AGND" x="-15.24" y="-22.86" length="short"/>
<pin name="CH_AVDD" x="-15.24" y="22.86" length="short"/>
<pin name="DGND" x="-15.24" y="-17.78" length="short"/>
<pin name="DVDD" x="-15.24" y="17.78" length="short"/>
<pin name="FID/GLCO" x="15.24" y="-22.86" length="short" rot="R180"/>
<pin name="HSYNC" x="15.24" y="-12.7" length="short" rot="R180"/>
<pin name="INT_REQ" x="15.24" y="-25.4" length="short" rot="R180"/>
<pin name="IO_DVDD" x="-15.24" y="15.24" length="short"/>
<pin name="PCLK/SCLK" x="15.24" y="17.78" length="short" rot="R180"/>
<pin name="PDN" x="-15.24" y="10.16" length="short"/>
<pin name="PLL_AGND" x="-15.24" y="-20.32" length="short"/>
<pin name="PLL_AVDD" x="-15.24" y="20.32" length="short"/>
<pin name="REFM" x="-15.24" y="-15.24" length="short"/>
<pin name="REFP" x="-15.24" y="-12.7" length="short"/>
<pin name="RESET/" x="-15.24" y="7.62" length="short"/>
<pin name="SCL" x="15.24" y="22.86" length="short" rot="R180"/>
<pin name="SDA" x="15.24" y="20.32" length="short" rot="R180"/>
<pin name="VSYNC" x="15.24" y="-15.24" length="short" rot="R180"/>
<pin name="XTAL1" x="-15.24" y="2.54" length="short"/>
<pin name="XTAL2" x="-15.24" y="0" length="short"/>
<pin name="YOUT_0" x="15.24" y="10.16" length="short" rot="R180"/>
<pin name="YOUT_1" x="15.24" y="7.62" length="short" rot="R180"/>
<pin name="YOUT_2" x="15.24" y="5.08" length="short" rot="R180"/>
<pin name="YOUT_3" x="15.24" y="2.54" length="short" rot="R180"/>
<pin name="YOUT_4" x="15.24" y="0" length="short" rot="R180"/>
<pin name="YOUT_5" x="15.24" y="-2.54" length="short" rot="R180"/>
<pin name="YOUT_6" x="15.24" y="-5.08" length="short" rot="R180"/>
<pin name="YOUT_7" x="15.24" y="-7.62" length="short" rot="R180"/>
</symbol>
<symbol name="X9015_DIGI_POT">
<wire x1="12.7" y1="-7.62" x2="-12.7" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-7.62" x2="-12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="-12.7" y1="10.16" x2="12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="12.7" y1="10.16" x2="12.7" y2="-7.62" width="0.254" layer="94"/>
<text x="-12.7" y="10.16" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<pin name="VSS" x="15.24" y="-5.08" length="short" direction="pwr" rot="R180"/>
<pin name="RW/VW" x="-15.24" y="-2.54" length="short"/>
<pin name="VCC" x="15.24" y="7.62" length="short" direction="pwr" rot="R180"/>
<pin name="CS'" x="-15.24" y="2.54" length="short"/>
<pin name="INC'" x="-15.24" y="5.08" length="short"/>
<pin name="U/D'" x="-15.24" y="7.62" length="short"/>
<pin name="RH/VH" x="-15.24" y="0" length="short"/>
<pin name="RL/VL" x="-15.24" y="-5.08" length="short"/>
</symbol>
<symbol name="74HC4051_MUX">
<wire x1="-10.16" y1="-12.7" x2="7.62" y2="-12.7" width="0.254" layer="94"/>
<wire x1="7.62" y1="-12.7" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="10.16" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<text x="-6.35" y="11.176" size="1.778" layer="94">&gt;NAME</text>
<text x="-9.144" y="-15.24" size="1.778" layer="94">&gt;VALUE</text>
<pin name="VSS" x="-15.24" y="-10.16" length="middle"/>
<pin name="VEE" x="-15.24" y="-7.62" length="middle"/>
<pin name="INH" x="-15.24" y="-5.08" length="middle"/>
<pin name="IO7" x="-15.24" y="0" length="middle"/>
<pin name="IO5" x="-15.24" y="-2.54" length="middle"/>
<pin name="IO6" x="-15.24" y="5.08" length="middle"/>
<pin name="IO" x="-15.24" y="2.54" length="middle"/>
<pin name="IO4" x="-15.24" y="7.62" length="middle"/>
<pin name="VDD" x="12.7" y="7.62" length="middle" rot="R180"/>
<pin name="IO2" x="12.7" y="5.08" length="middle" rot="R180"/>
<pin name="IO1" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="IO0" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="IO3" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="A" x="12.7" y="-5.08" length="middle" rot="R180"/>
<pin name="B" x="12.7" y="-7.62" length="middle" rot="R180"/>
<pin name="C" x="12.7" y="-10.16" length="middle" rot="R180"/>
</symbol>
<symbol name="74HC4052">
<wire x1="-7.62" y1="-12.7" x2="7.62" y2="-12.7" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-12.7" x2="7.62" y2="10.16" width="0.4064" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-7.62" y2="10.16" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-12.7" width="0.4064" layer="94"/>
<text x="-7.62" y="10.795" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
<pin name="A" x="-10.16" y="0" length="short" direction="in"/>
<pin name="B" x="-10.16" y="-2.54" length="short" direction="in"/>
<pin name="GND" x="-10.16" y="-7.62" length="short" direction="pwr"/>
<pin name="INH" x="-10.16" y="-5.08" length="short" direction="in"/>
<pin name="VCC" x="-10.16" y="7.62" length="short" direction="pwr"/>
<pin name="VEE" x="-10.16" y="-10.16" length="short" direction="pwr"/>
<pin name="X" x="-10.16" y="5.08" length="short"/>
<pin name="X0" x="10.16" y="7.62" length="short" rot="R180"/>
<pin name="X1" x="10.16" y="5.08" length="short" rot="R180"/>
<pin name="X2" x="10.16" y="2.54" length="short" rot="R180"/>
<pin name="X3" x="10.16" y="0" length="short" rot="R180"/>
<pin name="Y" x="-10.16" y="2.54" length="short"/>
<pin name="Y0" x="10.16" y="-2.54" length="short" rot="R180"/>
<pin name="Y1" x="10.16" y="-5.08" length="short" rot="R180"/>
<pin name="Y2" x="10.16" y="-7.62" length="short" rot="R180"/>
<pin name="Y3" x="10.16" y="-10.16" length="short" rot="R180"/>
</symbol>
<symbol name="74VHC4052_ANALOG_MUX">
<wire x1="-12.7" y1="-17.78" x2="-12.7" y2="17.78" width="0.254" layer="94"/>
<wire x1="-12.7" y1="17.78" x2="12.7" y2="17.78" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-17.78" x2="12.7" y2="-17.78" width="0.254" layer="94"/>
<wire x1="12.7" y1="-17.78" x2="12.7" y2="17.78" width="0.254" layer="94"/>
<text x="-12.7" y="18.542" size="1.778" layer="95">&gt;NAME</text>
<pin name="VCC" x="-20.32" y="15.24"/>
<pin name="GND" x="-20.32" y="-15.24"/>
<pin name="X3" x="20.32" y="5.08" rot="R180"/>
<pin name="IN/OUT_X" x="-20.32" y="7.62"/>
<pin name="X2" x="20.32" y="7.62" rot="R180"/>
<pin name="X1" x="20.32" y="10.16" rot="R180"/>
<pin name="Y1" x="20.32" y="-5.08" rot="R180"/>
<pin name="Y2" x="20.32" y="-7.62" rot="R180"/>
<pin name="X0" x="20.32" y="12.7" rot="R180"/>
<pin name="Y0" x="20.32" y="-2.54" rot="R180"/>
<pin name="Y3" x="20.32" y="-10.16" rot="R180"/>
<pin name="IN/OUT_Y" x="-20.32" y="5.08"/>
<pin name="A" x="-20.32" y="-2.54"/>
<pin name="B" x="-20.32" y="-5.08"/>
<pin name="VEE" x="-20.32" y="12.7"/>
<pin name="INH" x="-20.32" y="-12.7"/>
</symbol>
<symbol name="556_TIMER_DUAL">
<wire x1="-7.62" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-12.7" width="0.254" layer="94"/>
<text x="-6.35" y="10.922" size="1.778" layer="94">&gt;NAME</text>
<text x="-7.112" y="-15.24" size="1.778" layer="94">&gt;VALUE</text>
<pin name="GND" x="-12.7" y="-10.16" length="middle"/>
<pin name="TRIG" x="-12.7" y="-7.62" length="middle"/>
<pin name="OUT" x="-12.7" y="-5.08" length="middle"/>
<pin name="CV" x="-12.7" y="0" length="middle"/>
<pin name="RST" x="-12.7" y="-2.54" length="middle"/>
<pin name="THR" x="-12.7" y="2.54" length="middle"/>
<pin name="DIS" x="-12.7" y="5.08" length="middle"/>
<pin name="TRIG2" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="OUT2" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="RST2" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="CV2" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="THR2" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="DIS2" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="VCC" x="15.24" y="7.62" length="middle" rot="R180"/>
</symbol>
<symbol name="INA139">
<pin name="VIN+" x="2.54" y="15.24" visible="off" length="middle" rot="R270"/>
<pin name="VIN-" x="7.62" y="15.24" visible="off" length="middle" rot="R270"/>
<pin name="V+" x="-7.62" y="-2.54" visible="off" length="middle"/>
<pin name="GND" x="7.62" y="-17.78" visible="off" length="middle" rot="R90"/>
<pin name="OUT" x="22.86" y="-7.62" visible="off" length="middle" rot="R180"/>
<wire x1="17.78" y1="-7.62" x2="15.24" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="15.24" y1="-7.62" x2="15.24" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="15.24" y1="-5.08" x2="13.97" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="13.97" y1="-3.81" x2="13.97" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="13.97" y1="-3.048" x2="13.97" y2="-2.286" width="0.1524" layer="94"/>
<wire x1="13.97" y1="-2.286" x2="15.24" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.54" y1="10.16" x2="2.54" y2="8.89" width="0.1524" layer="94"/>
<wire x1="2.54" y1="8.89" x2="1.778" y2="8.636" width="0.1524" layer="94"/>
<wire x1="1.778" y1="8.636" x2="3.302" y2="8.128" width="0.1524" layer="94"/>
<wire x1="3.302" y1="8.128" x2="1.778" y2="7.62" width="0.1524" layer="94"/>
<wire x1="1.778" y1="7.62" x2="3.302" y2="7.112" width="0.1524" layer="94"/>
<wire x1="3.302" y1="7.112" x2="1.778" y2="6.604" width="0.1524" layer="94"/>
<wire x1="1.778" y1="6.604" x2="2.54" y2="6.35" width="0.1524" layer="94"/>
<wire x1="2.54" y1="6.35" x2="2.54" y2="3.81" width="0.1524" layer="94"/>
<wire x1="2.54" y1="3.81" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
<wire x1="7.62" y1="10.16" x2="7.62" y2="8.89" width="0.1524" layer="94"/>
<wire x1="7.62" y1="8.89" x2="6.858" y2="8.636" width="0.1524" layer="94"/>
<wire x1="6.858" y1="8.636" x2="8.382" y2="8.128" width="0.1524" layer="94"/>
<wire x1="8.382" y1="8.128" x2="6.858" y2="7.62" width="0.1524" layer="94"/>
<wire x1="6.858" y1="7.62" x2="8.382" y2="7.112" width="0.1524" layer="94"/>
<wire x1="8.382" y1="7.112" x2="6.858" y2="6.604" width="0.1524" layer="94"/>
<wire x1="6.858" y1="6.604" x2="7.62" y2="6.35" width="0.1524" layer="94"/>
<wire x1="7.62" y1="6.35" x2="7.62" y2="2.54" width="0.1524" layer="94"/>
<wire x1="1.27" y1="2.54" x2="8.89" y2="2.54" width="0.1524" layer="94"/>
<wire x1="8.89" y1="2.54" x2="5.08" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="1.27" y2="2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.032" x2="2.54" y2="1.016" width="0.1524" layer="94"/>
<wire x1="3.048" y1="1.524" x2="2.032" y2="1.524" width="0.1524" layer="94"/>
<wire x1="7.112" y1="1.524" x2="8.128" y2="1.524" width="0.1524" layer="94"/>
<wire x1="2.54" y1="3.81" x2="15.24" y2="3.81" width="0.1524" layer="94"/>
<wire x1="15.24" y1="-1.016" x2="15.24" y2="3.81" width="0.1524" layer="94"/>
<wire x1="13.97" y1="-2.286" x2="13.97" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="13.97" y1="-3.81" x2="13.97" y2="-4.826" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-7.62" x2="10.16" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="10.16" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="10.16" y1="-3.048" x2="13.97" y2="-3.048" width="0.1524" layer="94"/>
<polygon width="0.1524" layer="94">
<vertex x="2.286" y="3.81" curve="-90"/>
<vertex x="2.54" y="4.064" curve="-90"/>
<vertex x="2.794" y="3.81" curve="-90"/>
<vertex x="2.54" y="3.556" curve="-90"/>
</polygon>
<wire x1="15.24" y1="-5.08" x2="14.986" y2="-4.572" width="0.1524" layer="94"/>
<wire x1="15.24" y1="-5.08" x2="14.732" y2="-4.826" width="0.1524" layer="94"/>
<text x="1.27" y="6.096" size="1.778" layer="94" rot="R90">1k</text>
<text x="10.668" y="6.096" size="1.778" layer="94" rot="R90">1k</text>
<wire x1="-2.54" y1="10.16" x2="17.78" y2="10.16" width="0.1524" layer="94"/>
<wire x1="17.78" y1="10.16" x2="17.78" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="17.78" y1="-12.7" x2="-2.54" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-12.7" x2="-2.54" y2="10.16" width="0.1524" layer="94"/>
<text x="-1.524" y="-3.302" size="1.778" layer="94">V+</text>
<text x="4.826" y="-11.938" size="1.778" layer="94">GND</text>
<text x="11.938" y="-9.906" size="1.778" layer="94">OUT</text>
<text x="10.16" y="10.16" size="1.778" layer="96">&gt;VALUE</text>
<text x="10.16" y="12.7" size="1.778" layer="95">&gt;NAME</text>
</symbol>
<symbol name="OP-AMP+-FULL">
<wire x1="-1.27" y1="-3.175" x2="-1.27" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="-1.905" y1="-2.54" x2="-0.635" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-1.905" y1="2.54" x2="-0.635" y2="2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="-5.08" x2="0" y2="-3.8862" width="0.1524" layer="94"/>
<wire x1="0" y1="3.9116" x2="0" y2="5.08" width="0.1524" layer="94"/>
<wire x1="7.62" y1="0" x2="-2.54" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-2.54" y1="-5.08" x2="-2.54" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-2.54" y1="5.08" x2="5.08" y2="1.27" width="0.4064" layer="94"/>
<text x="5.08" y="-5.715" size="1.778" layer="95" rot="MR180">&gt;NAME</text>
<text x="5.08" y="5.08" size="1.778" layer="96" rot="MR180">&gt;VALUE</text>
<pin name="+IN" x="-5.08" y="-2.54" visible="pad" length="short" direction="in"/>
<pin name="-IN" x="-5.08" y="2.54" visible="pad" length="short" direction="in"/>
<pin name="OUT" x="10.16" y="0" visible="pad" length="short" direction="out" rot="R180"/>
<pin name="V+" x="0" y="7.62" visible="pad" length="short" direction="pwr" rot="R270"/>
<pin name="V-" x="0" y="-7.62" visible="pad" length="short" direction="pwr" rot="R90"/>
<pin name="GAIN@8" x="5.08" y="5.08" visible="pad" length="short" rot="R270"/>
<pin name="GAIN@1" x="2.54" y="5.08" visible="pad" length="short" rot="R270"/>
<pin name="BP" x="2.54" y="-5.08" visible="pad" length="short" rot="R90"/>
<wire x1="5.08" y1="1.27" x2="7.62" y2="0" width="0.4064" layer="94"/>
<wire x1="5.08" y1="1.27" x2="5.08" y2="2.54" width="0.1524" layer="94"/>
</symbol>
<symbol name="TPA6138A2">
<pin name="CN" x="-12.7" y="-15.24" length="short"/>
<pin name="VSS" x="-12.7" y="-10.16" length="short"/>
<pin name="!MUTE" x="-12.7" y="-5.08" length="short"/>
<pin name="GND" x="-12.7" y="0" length="short"/>
<pin name="OUTR" x="-12.7" y="5.08" length="short"/>
<pin name="INR-" x="-12.7" y="10.16" length="short"/>
<pin name="INR+" x="-12.7" y="15.24" length="short"/>
<pin name="INL+" x="12.7" y="15.24" length="short" rot="R180"/>
<pin name="INL-" x="12.7" y="10.16" length="short" rot="R180"/>
<pin name="OUTL" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="UVP" x="12.7" y="0" length="short" rot="R180"/>
<pin name="VDD" x="12.7" y="-10.16" length="short" rot="R180"/>
<pin name="CP" x="12.7" y="-15.24" length="short" rot="R180"/>
<wire x1="-10.16" y1="17.78" x2="10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="17.78" x2="10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="-17.78" x2="-10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-17.78" x2="-10.16" y2="17.78" width="0.254" layer="94"/>
<text x="-10.16" y="20.32" size="1.27" layer="95">&gt;NAME</text>
<text x="-10.16" y="18.542" size="1.27" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="TPA2005D1">
<wire x1="-10.16" y1="7.62" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-5.08" x2="-10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-10.16" x2="0" y2="-10.16" width="0.254" layer="94"/>
<wire x1="0" y1="-10.16" x2="12.7" y2="-10.16" width="0.254" layer="94"/>
<wire x1="12.7" y1="-10.16" x2="12.7" y2="7.62" width="0.254" layer="94"/>
<wire x1="12.7" y1="7.62" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-5.08" x2="0" y2="-5.08" width="0.127" layer="94"/>
<wire x1="0" y1="-5.08" x2="0" y2="-10.16" width="0.127" layer="94"/>
<text x="12.7" y="-12.7" size="1.778" layer="95" rot="MR0">&gt;NAME</text>
<text x="-10.16" y="10.16" size="1.778" layer="95" rot="MR180">&gt;VALUE</text>
<text x="-9.144" y="-8.128" size="1.27" layer="95" ratio="10">GND PAD</text>
<pin name="VDD" x="17.78" y="5.08" length="middle" direction="pwr" rot="R180"/>
<pin name="IN+" x="-15.24" y="0" length="middle"/>
<pin name="IN-" x="-15.24" y="-2.54" length="middle"/>
<pin name="GND@1" x="17.78" y="-7.62" length="middle" direction="pwr" rot="R180"/>
<pin name="OUT+" x="17.78" y="0" length="middle" rot="R180"/>
<pin name="OUT-" x="17.78" y="-2.54" length="middle" rot="R180"/>
<pin name="SHUTDOWN" x="-15.24" y="5.08" length="middle" direction="in" function="dot"/>
<pin name="GND@2" x="-5.08" y="-12.7" visible="off" length="short" direction="pwr" rot="R90"/>
</symbol>
<symbol name="HIH6131">
<wire x1="-10.16" y1="10.16" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="-10.16" x2="-10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-10.16" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<pin name="SCL" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="SDA" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="AL_L" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="AL_H" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="VDD" x="-15.24" y="7.62" length="middle"/>
<pin name="VCORE" x="-15.24" y="2.54" length="middle"/>
<pin name="GND" x="-15.24" y="-2.54" length="middle"/>
<pin name="NC" x="-15.24" y="-7.62" length="middle"/>
<text x="-10.16" y="10.668" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-12.7" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="INA169">
<pin name="VIN+" x="-5.08" y="20.32" visible="pad" length="middle" rot="R270"/>
<pin name="VIN-" x="0" y="20.32" visible="pad" length="middle" rot="R270"/>
<pin name="V+" x="-17.78" y="2.54" visible="pad" length="middle"/>
<pin name="GND" x="0" y="-17.78" visible="pad" length="middle" rot="R90"/>
<pin name="OUT" x="15.24" y="-7.62" visible="pad" length="middle" rot="R180"/>
<wire x1="10.16" y1="-7.62" x2="7.62" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="6.35" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="6.35" y1="-3.81" x2="6.35" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="6.35" y1="-3.048" x2="6.35" y2="-2.286" width="0.1524" layer="94"/>
<wire x1="6.35" y1="-2.286" x2="7.62" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="8.89" x2="-5.842" y2="8.636" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="8.636" x2="-4.318" y2="8.128" width="0.1524" layer="94"/>
<wire x1="-4.318" y1="8.128" x2="-5.842" y2="7.62" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="7.62" x2="-4.318" y2="7.112" width="0.1524" layer="94"/>
<wire x1="-4.318" y1="7.112" x2="-5.842" y2="6.604" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="6.604" x2="-5.08" y2="6.35" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="6.35" x2="-5.08" y2="3.81" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="3.81" x2="-5.08" y2="2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="8.89" x2="-0.762" y2="8.636" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="8.636" x2="0.762" y2="8.128" width="0.1524" layer="94"/>
<wire x1="0.762" y1="8.128" x2="-0.762" y2="7.62" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="7.62" x2="0.762" y2="7.112" width="0.1524" layer="94"/>
<wire x1="0.762" y1="7.112" x2="-0.762" y2="6.604" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="6.604" x2="0" y2="6.35" width="0.1524" layer="94"/>
<wire x1="0" y1="6.35" x2="0" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-6.35" y1="2.54" x2="1.27" y2="2.54" width="0.1524" layer="94"/>
<wire x1="1.27" y1="2.54" x2="-2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-5.08" x2="-6.35" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-5.08" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="1.524" x2="-5.588" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-0.508" y1="1.524" x2="0.508" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="3.81" x2="7.62" y2="3.81" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-1.016" x2="7.62" y2="3.81" width="0.1524" layer="94"/>
<wire x1="6.35" y1="-2.286" x2="6.35" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="6.35" y1="-3.81" x2="6.35" y2="-4.826" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-5.08" x2="-2.54" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-7.62" x2="2.54" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-7.62" x2="2.54" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-3.048" x2="6.35" y2="-3.048" width="0.1524" layer="94"/>
<polygon width="0.1524" layer="94">
<vertex x="-5.334" y="3.81" curve="-90"/>
<vertex x="-5.08" y="4.064" curve="-90"/>
<vertex x="-4.826" y="3.81" curve="-90"/>
<vertex x="-5.08" y="3.556" curve="-90"/>
</polygon>
<wire x1="7.62" y1="-5.08" x2="7.366" y2="-4.572" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.112" y2="-4.826" width="0.1524" layer="94"/>
<text x="-6.35" y="6.096" size="1.778" layer="94" rot="R90">1k</text>
<text x="3.048" y="6.096" size="1.778" layer="94" rot="R90">1k</text>
<wire x1="-12.7" y1="15.24" x2="-5.08" y2="15.24" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="15.24" x2="0" y2="15.24" width="0.1524" layer="94"/>
<wire x1="0" y1="15.24" x2="10.16" y2="15.24" width="0.1524" layer="94"/>
<wire x1="10.16" y1="15.24" x2="10.16" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="-12.7" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="-12.7" y1="-12.7" x2="-12.7" y2="15.24" width="0.1524" layer="94"/>
<text x="-2.794" y="-11.938" size="1.778" layer="94">GND</text>
<text x="4.318" y="-9.906" size="1.778" layer="94">OUT</text>
<text x="2.54" y="15.24" size="1.778" layer="96">&gt;VALUE</text>
<text x="2.54" y="17.78" size="1.778" layer="95">&gt;NAME</text>
<text x="-11.684" y="1.778" size="1.778" layer="94">V+</text>
<wire x1="-5.08" y1="15.24" x2="-5.08" y2="8.89" width="0.1524" layer="94"/>
<wire x1="0" y1="15.24" x2="0" y2="8.89" width="0.1524" layer="94"/>
<text x="-6.604" y="11.938" size="1.778" layer="94" align="bottom-right">Vin+</text>
<text x="1.016" y="11.938" size="1.778" layer="94">Vin-</text>
</symbol>
</symbols>
<devicesets>
<deviceset name="ACS712">
<description>Hall-effect-based isolated linear current sensor</description>
<gates>
<gate name="G$1" symbol="ACS712" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="FILT" pad="6"/>
<connect gate="G$1" pin="GND" pad="5"/>
<connect gate="G$1" pin="IP+@1" pad="1"/>
<connect gate="G$1" pin="IP+@2" pad="2"/>
<connect gate="G$1" pin="IP-@3" pad="3"/>
<connect gate="G$1" pin="IP-@4" pad="4"/>
<connect gate="G$1" pin="VCC" pad="8"/>
<connect gate="G$1" pin="VOUT" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD725">
<description>RGB component to NTSC/PAL Encoder</description>
<gates>
<gate name="G$1" symbol="AD725" x="2.54" y="2.54"/>
</gates>
<devices>
<device name="" package="SO16L">
<connects>
<connect gate="G$1" pin="4FSC" pad="3"/>
<connect gate="G$1" pin="AGND" pad="2"/>
<connect gate="G$1" pin="APOS" pad="4"/>
<connect gate="G$1" pin="BIN" pad="8"/>
<connect gate="G$1" pin="CE" pad="5"/>
<connect gate="G$1" pin="COMP" pad="10"/>
<connect gate="G$1" pin="CRMA" pad="9"/>
<connect gate="G$1" pin="DGND" pad="13"/>
<connect gate="G$1" pin="DPOS" pad="14"/>
<connect gate="G$1" pin="GIN" pad="7"/>
<connect gate="G$1" pin="HSYNC" pad="16"/>
<connect gate="G$1" pin="LUMA" pad="11"/>
<connect gate="G$1" pin="RIN" pad="6"/>
<connect gate="G$1" pin="STND" pad="1"/>
<connect gate="G$1" pin="VSYNC" pad="15"/>
<connect gate="G$1" pin="YTRAP" pad="12"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD5330" prefix="U">
<description>8-bit parallel input DAC</description>
<gates>
<gate name="G$1" symbol="AD5330" x="-10.16" y="-15.24"/>
</gates>
<devices>
<device name="" package="TSSOP20">
<connects>
<connect gate="G$1" pin="BUF" pad="1"/>
<connect gate="G$1" pin="CLR" pad="9"/>
<connect gate="G$1" pin="CS" pad="6"/>
<connect gate="G$1" pin="DB0" pad="13"/>
<connect gate="G$1" pin="DB1" pad="14"/>
<connect gate="G$1" pin="DB2" pad="15"/>
<connect gate="G$1" pin="DB3" pad="16"/>
<connect gate="G$1" pin="DB4" pad="17"/>
<connect gate="G$1" pin="DB5" pad="18"/>
<connect gate="G$1" pin="DB6" pad="19"/>
<connect gate="G$1" pin="DB7" pad="20"/>
<connect gate="G$1" pin="GAIN" pad="8"/>
<connect gate="G$1" pin="GND" pad="5"/>
<connect gate="G$1" pin="LDAC" pad="10"/>
<connect gate="G$1" pin="PD" pad="11"/>
<connect gate="G$1" pin="VDD" pad="12"/>
<connect gate="G$1" pin="VOUT" pad="4"/>
<connect gate="G$1" pin="VREF" pad="3"/>
<connect gate="G$1" pin="WR" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD7302">
<description>8-bit parallel input 2-output DAC</description>
<gates>
<gate name="G$1" symbol="AD7302" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="TSSOP20">
<connects>
<connect gate="G$1" pin="AB" pad="11"/>
<connect gate="G$1" pin="AGND" pad="17"/>
<connect gate="G$1" pin="CLR" pad="14"/>
<connect gate="G$1" pin="CS" pad="9"/>
<connect gate="G$1" pin="DB0" pad="8"/>
<connect gate="G$1" pin="DB1" pad="7"/>
<connect gate="G$1" pin="DB2" pad="6"/>
<connect gate="G$1" pin="DB3" pad="5"/>
<connect gate="G$1" pin="DB4" pad="4"/>
<connect gate="G$1" pin="DB5" pad="3"/>
<connect gate="G$1" pin="DB6" pad="2"/>
<connect gate="G$1" pin="DB7" pad="1"/>
<connect gate="G$1" pin="DGND" pad="20"/>
<connect gate="G$1" pin="LDAC" pad="13"/>
<connect gate="G$1" pin="PD" pad="12"/>
<connect gate="G$1" pin="REFIN" pad="16"/>
<connect gate="G$1" pin="VDD" pad="15"/>
<connect gate="G$1" pin="VOUTA" pad="19"/>
<connect gate="G$1" pin="VOUTB" pad="18"/>
<connect gate="G$1" pin="WR" pad="10"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD7745">
<description>24-bit capacitance to digital converter</description>
<gates>
<gate name="G$1" symbol="AD7745" x="-5.08" y="2.54"/>
</gates>
<devices>
<device name="" package="TSSOP16">
<connects>
<connect gate="G$1" pin="/RDY" pad="2"/>
<connect gate="G$1" pin="CIN1+" pad="8"/>
<connect gate="G$1" pin="CIN1-" pad="7"/>
<connect gate="G$1" pin="CIN2+" pad="9"/>
<connect gate="G$1" pin="CIN2-" pad="10"/>
<connect gate="G$1" pin="EXCA" pad="3"/>
<connect gate="G$1" pin="EXCB" pad="4"/>
<connect gate="G$1" pin="GND" pad="13"/>
<connect gate="G$1" pin="NC" pad="15"/>
<connect gate="G$1" pin="REFIN+" pad="5"/>
<connect gate="G$1" pin="REFIN-" pad="6"/>
<connect gate="G$1" pin="SCL" pad="1"/>
<connect gate="G$1" pin="SDA" pad="16"/>
<connect gate="G$1" pin="VDD" pad="14"/>
<connect gate="G$1" pin="VIN+" pad="11"/>
<connect gate="G$1" pin="VIN-" pad="12"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD7781" prefix="U">
<description>20-Bit, Pin-Programmable, Ultralow Power Sigma-Delta ADC</description>
<gates>
<gate name="G$1" symbol="AD7781" x="0" y="0"/>
</gates>
<devices>
<device name="CRZ" package="SOIC-14">
<connects>
<connect gate="G$1" pin="*PDRST" pad="13"/>
<connect gate="G$1" pin="AIN+" pad="5"/>
<connect gate="G$1" pin="AIN-" pad="6"/>
<connect gate="G$1" pin="AVDD" pad="11"/>
<connect gate="G$1" pin="BPDSW" pad="9"/>
<connect gate="G$1" pin="DOUT" pad="2"/>
<connect gate="G$1" pin="DVDD" pad="12"/>
<connect gate="G$1" pin="FILTER" pad="14"/>
<connect gate="G$1" pin="GAIN" pad="4"/>
<connect gate="G$1" pin="GND" pad="10"/>
<connect gate="G$1" pin="REFIN+" pad="7"/>
<connect gate="G$1" pin="REFIN-" pad="8"/>
<connect gate="G$1" pin="SCLK" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="CRUZ" package="TSSOP-16">
<connects>
<connect gate="G$1" pin="*PDRST" pad="14"/>
<connect gate="G$1" pin="AIN+" pad="6"/>
<connect gate="G$1" pin="AIN-" pad="7"/>
<connect gate="G$1" pin="AVDD" pad="12"/>
<connect gate="G$1" pin="BPDSW" pad="10"/>
<connect gate="G$1" pin="DOUT" pad="3"/>
<connect gate="G$1" pin="DVDD" pad="13"/>
<connect gate="G$1" pin="FILTER" pad="15"/>
<connect gate="G$1" pin="GAIN" pad="5"/>
<connect gate="G$1" pin="GND" pad="11"/>
<connect gate="G$1" pin="REFIN+" pad="8"/>
<connect gate="G$1" pin="REFIN-" pad="9"/>
<connect gate="G$1" pin="SCLK" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD8397-EPAD" prefix="IC">
<description>Rail-to-rail high current output op-amp</description>
<gates>
<gate name="A" symbol="OP-AMP+--1" x="-15.24" y="0"/>
<gate name="B" symbol="OP-AMP-1" x="12.7" y="0"/>
</gates>
<devices>
<device name="EPAD" package="SO08-EPAD">
<connects>
<connect gate="A" pin="+IN" pad="3"/>
<connect gate="A" pin="-IN" pad="2"/>
<connect gate="A" pin="EPAD" pad="EPAD"/>
<connect gate="A" pin="OUT" pad="1"/>
<connect gate="A" pin="V+" pad="8"/>
<connect gate="A" pin="V-" pad="4"/>
<connect gate="B" pin="+IN" pad="5"/>
<connect gate="B" pin="-IN" pad="6"/>
<connect gate="B" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AD9835">
<description>50MHz DDS waveform generator</description>
<gates>
<gate name="G$1" symbol="AD9835" x="0" y="-10.16"/>
</gates>
<devices>
<device name="" package="TSSOP16">
<connects>
<connect gate="G$1" pin="AGND" pad="13"/>
<connect gate="G$1" pin="AVDD" pad="15"/>
<connect gate="G$1" pin="COMP" pad="16"/>
<connect gate="G$1" pin="DGND" pad="5"/>
<connect gate="G$1" pin="DVDD" pad="4"/>
<connect gate="G$1" pin="FSEL" pad="10"/>
<connect gate="G$1" pin="FSYNC" pad="9"/>
<connect gate="G$1" pin="FS_ADJ" pad="1"/>
<connect gate="G$1" pin="IOUT" pad="14"/>
<connect gate="G$1" pin="MCLK" pad="6"/>
<connect gate="G$1" pin="PSEL0" pad="12"/>
<connect gate="G$1" pin="PSEL1" pad="11"/>
<connect gate="G$1" pin="REFIN" pad="2"/>
<connect gate="G$1" pin="REFOUT" pad="3"/>
<connect gate="G$1" pin="SCLK" pad="7"/>
<connect gate="G$1" pin="SDATA" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AS3400" prefix="U">
<description>Active noise cancellation chip.&lt;br&gt;
Stereo in, stereo out, two microphones.&lt;br&gt;
Single alkaline cell power.&lt;br&gt;
QFN-24 w/exposed pad.</description>
<gates>
<gate name="G$1" symbol="AS3400" x="0" y="0"/>
</gates>
<devices>
<device name="" package="QFN-24_ALT2">
<connects>
<connect gate="G$1" pin="AGND" pad="1"/>
<connect gate="G$1" pin="CPN" pad="22"/>
<connect gate="G$1" pin="CPP" pad="20"/>
<connect gate="G$1" pin="GND" pad="21"/>
<connect gate="G$1" pin="HPL" pad="16"/>
<connect gate="G$1" pin="HPR" pad="17"/>
<connect gate="G$1" pin="HPVDD" pad="18"/>
<connect gate="G$1" pin="IOP1R" pad="11"/>
<connect gate="G$1" pin="IOP2R" pad="13"/>
<connect gate="G$1" pin="LINL" pad="2"/>
<connect gate="G$1" pin="LINR" pad="3"/>
<connect gate="G$1" pin="MICL" pad="6"/>
<connect gate="G$1" pin="MICR" pad="8"/>
<connect gate="G$1" pin="MICS" pad="7"/>
<connect gate="G$1" pin="MODE_CSCL" pad="5"/>
<connect gate="G$1" pin="PAD" pad="EP"/>
<connect gate="G$1" pin="QLINR" pad="10"/>
<connect gate="G$1" pin="QMICL" pad="24"/>
<connect gate="G$1" pin="QMICR" pad="9"/>
<connect gate="G$1" pin="QOP1R" pad="12"/>
<connect gate="G$1" pin="QOP2R" pad="14"/>
<connect gate="G$1" pin="VBAT" pad="19"/>
<connect gate="G$1" pin="VNEG" pad="23"/>
<connect gate="G$1" pin="VOL_CSDA" pad="4"/>
<connect gate="G$1" pin="VSS" pad="15"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DAC_MCP4725">
<description>Microchip 12-bit I2C DAC, SOT23-6</description>
<gates>
<gate name="G$1" symbol="MCP4725" x="0" y="0"/>
</gates>
<devices>
<device name="SOT" package="SOT23-6">
<connects>
<connect gate="G$1" pin="AO" pad="4"/>
<connect gate="G$1" pin="SCL" pad="5"/>
<connect gate="G$1" pin="SDA" pad="6"/>
<connect gate="G$1" pin="VDD" pad="1"/>
<connect gate="G$1" pin="VOUT" pad="3"/>
<connect gate="G$1" pin="VSS" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="HT8950">
<description>Holtek voice modulator IC, COM-10574</description>
<gates>
<gate name="G$1" symbol="HT8950" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DIL18">
<connects>
<connect gate="G$1" pin="AIN" pad="6"/>
<connect gate="G$1" pin="AO" pad="5"/>
<connect gate="G$1" pin="AUDIO" pad="9"/>
<connect gate="G$1" pin="FVIB" pad="12"/>
<connect gate="G$1" pin="LAMP" pad="8"/>
<connect gate="G$1" pin="OSC1" pad="14"/>
<connect gate="G$1" pin="OSC2" pad="13"/>
<connect gate="G$1" pin="ROB" pad="18"/>
<connect gate="G$1" pin="SW0" pad="1"/>
<connect gate="G$1" pin="SW1" pad="2"/>
<connect gate="G$1" pin="SW2" pad="3"/>
<connect gate="G$1" pin="TGD" pad="17"/>
<connect gate="G$1" pin="TGU" pad="16"/>
<connect gate="G$1" pin="TS" pad="11"/>
<connect gate="G$1" pin="VDD" pad="7"/>
<connect gate="G$1" pin="VIB" pad="15"/>
<connect gate="G$1" pin="VREF" pad="10"/>
<connect gate="G$1" pin="VSS" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM358" prefix="IC">
<description>Jellybean op-amp</description>
<gates>
<gate name="G$1" symbol="OP-AMP+-" x="0" y="20.32"/>
<gate name="G$2" symbol="OP-AMP" x="2.54" y="-15.24"/>
</gates>
<devices>
<device name="" package="DIP08">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="-IN" pad="2"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="V+" pad="8"/>
<connect gate="G$1" pin="V-" pad="4"/>
<connect gate="G$2" pin="+IN" pad="5"/>
<connect gate="G$2" pin="-IN" pad="6"/>
<connect gate="G$2" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-09172" constant="no"/>
</technology>
</technologies>
</device>
<device name="KIT" package="DIP08-KIT">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="-IN" pad="2"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="V+" pad="8"/>
<connect gate="G$1" pin="V-" pad="4"/>
<connect gate="G$2" pin="+IN" pad="5"/>
<connect gate="G$2" pin="-IN" pad="6"/>
<connect gate="G$2" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-09172" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM393">
<description>Low-voltage comparator</description>
<gates>
<gate name="G1" symbol="OP-AMP+-" x="0" y="15.24"/>
<gate name="G2" symbol="OP-AMP" x="2.54" y="-15.24"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G1" pin="+IN" pad="3"/>
<connect gate="G1" pin="-IN" pad="2"/>
<connect gate="G1" pin="OUT" pad="1"/>
<connect gate="G1" pin="V+" pad="8"/>
<connect gate="G1" pin="V-" pad="4"/>
<connect gate="G2" pin="+IN" pad="5"/>
<connect gate="G2" pin="-IN" pad="6"/>
<connect gate="G2" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LMV324" prefix="U">
<description>Jellybean quad op-amp</description>
<gates>
<gate name="G$1" symbol="LMV324" x="-7.62" y="0" swaplevel="1"/>
<gate name="G$2" symbol="LMV324_2" x="0" y="-40.64" swaplevel="1"/>
<gate name="G$3" symbol="LMV324_2" x="45.72" y="-2.54" swaplevel="1"/>
<gate name="G$4" symbol="LMV324_2" x="45.72" y="-40.64" swaplevel="1"/>
</gates>
<devices>
<device name="" package="SO014">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="+V" pad="4"/>
<connect gate="G$1" pin="-IN" pad="2"/>
<connect gate="G$1" pin="-V" pad="11"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$2" pin="+IN" pad="5"/>
<connect gate="G$2" pin="-IN" pad="6"/>
<connect gate="G$2" pin="OUT" pad="7"/>
<connect gate="G$3" pin="+IN" pad="10"/>
<connect gate="G$3" pin="-IN" pad="9"/>
<connect gate="G$3" pin="OUT" pad="8"/>
<connect gate="G$4" pin="+IN" pad="12"/>
<connect gate="G$4" pin="-IN" pad="13"/>
<connect gate="G$4" pin="OUT" pad="14"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-08227"/>
<attribute name="VALUE" value="LMV324" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LMV358">
<description>Jellybean rail-to-rail output op-amp</description>
<gates>
<gate name="U$" symbol="OPAMP_2" x="0" y="15.24"/>
<gate name="G$2" symbol="OPAMP_2_1" x="0" y="-12.7"/>
</gates>
<devices>
<device name="SOIC" package="SO08">
<connects>
<connect gate="G$2" pin="+IN2" pad="5"/>
<connect gate="G$2" pin="-IN2" pad="6"/>
<connect gate="G$2" pin="OUT2" pad="7"/>
<connect gate="U$" pin="+IN1" pad="3"/>
<connect gate="U$" pin="+V" pad="8"/>
<connect gate="U$" pin="-IN1" pad="2"/>
<connect gate="U$" pin="GND" pad="4"/>
<connect gate="U$" pin="OUT1" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-09657"/>
</technology>
</technologies>
</device>
<device name="SOICT" package="SO08-TIGHT">
<connects>
<connect gate="G$2" pin="+IN2" pad="5"/>
<connect gate="G$2" pin="-IN2" pad="6"/>
<connect gate="G$2" pin="OUT2" pad="7"/>
<connect gate="U$" pin="+IN1" pad="3"/>
<connect gate="U$" pin="+V" pad="8"/>
<connect gate="U$" pin="-IN1" pad="2"/>
<connect gate="U$" pin="GND" pad="4"/>
<connect gate="U$" pin="OUT1" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LT1014">
<description>Precision quad op-amp. I/O range includes negative rail.</description>
<gates>
<gate name="G$1" symbol="LT1014" x="-22.86" y="33.02"/>
<gate name="G$2" symbol="LT1014_2" x="33.02" y="33.02"/>
<gate name="G$3" symbol="LT1014_2" x="-22.86" y="-25.4"/>
<gate name="G$4" symbol="LT1014_2" x="35.56" y="-25.4"/>
</gates>
<devices>
<device name="" package="SO16L">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="+V" pad="4"/>
<connect gate="G$1" pin="-IN" pad="2"/>
<connect gate="G$1" pin="-V" pad="13"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$2" pin="+IN" pad="5"/>
<connect gate="G$2" pin="-IN" pad="6"/>
<connect gate="G$2" pin="OUT" pad="7"/>
<connect gate="G$3" pin="+IN" pad="12"/>
<connect gate="G$3" pin="-IN" pad="11"/>
<connect gate="G$3" pin="OUT" pad="10"/>
<connect gate="G$4" pin="+IN" pad="14"/>
<connect gate="G$4" pin="-IN" pad="15"/>
<connect gate="G$4" pin="OUT" pad="16"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MAX323" prefix="U">
<description>Dual low-voltage SPST analog switch</description>
<gates>
<gate name="G$1" symbol="MAX323" x="-2.54" y="-2.54"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="COM1" pad="2"/>
<connect gate="G$1" pin="COM2" pad="6"/>
<connect gate="G$1" pin="IN1" pad="7"/>
<connect gate="G$1" pin="IN2" pad="3"/>
<connect gate="G$1" pin="NO1" pad="1"/>
<connect gate="G$1" pin="NO2" pad="5"/>
<connect gate="G$1" pin="V+" pad="8"/>
<connect gate="G$1" pin="V-" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MAX6675">
<description>K-type thermocouple ADC, SPI output</description>
<gates>
<gate name="G$1" symbol="MAX6675" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="SO08-MAX6675">
<connects>
<connect gate="G$1" pin="CS" pad="6"/>
<connect gate="G$1" pin="MISO" pad="7"/>
<connect gate="G$1" pin="SCK" pad="5"/>
<connect gate="G$1" pin="T+" pad="3"/>
<connect gate="G$1" pin="T-" pad="2"/>
<connect gate="G$1" pin="VDD" pad="4"/>
<connect gate="G$1" pin="VSS" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MCP41XXX" prefix="U">
<description>SPI controlled single digital potentiometer by Microchip&lt;br /&gt;
&lt;br /&gt;
PID: COM-10613</description>
<gates>
<gate name="G$1" symbol="MCP41XXX" x="-2.54" y="-7.62"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="A" pad="5"/>
<connect gate="G$1" pin="B" pad="7"/>
<connect gate="G$1" pin="CS" pad="1"/>
<connect gate="G$1" pin="DI" pad="3"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="SCK" pad="2"/>
<connect gate="G$1" pin="VCC" pad="8"/>
<connect gate="G$1" pin="W" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="DIL" package="DIL-08">
<connects>
<connect gate="G$1" pin="A" pad="5"/>
<connect gate="G$1" pin="B" pad="7"/>
<connect gate="G$1" pin="CS" pad="1"/>
<connect gate="G$1" pin="DI" pad="3"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="SCK" pad="2"/>
<connect gate="G$1" pin="VCC" pad="8"/>
<connect gate="G$1" pin="W" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MCP42XXX" prefix="U">
<description>SPI controlled dual digital potentiometer by Microchip</description>
<gates>
<gate name="G$1" symbol="MCP42XXX" x="-2.54" y="5.08"/>
</gates>
<devices>
<device name="" package="SO014">
<connects>
<connect gate="G$1" pin="A0" pad="8"/>
<connect gate="G$1" pin="A1" pad="7"/>
<connect gate="G$1" pin="B0" pad="10"/>
<connect gate="G$1" pin="B1" pad="5"/>
<connect gate="G$1" pin="CS" pad="1"/>
<connect gate="G$1" pin="DI" pad="3"/>
<connect gate="G$1" pin="DO" pad="13"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="RST" pad="11"/>
<connect gate="G$1" pin="SCK" pad="2"/>
<connect gate="G$1" pin="SHTDWN" pad="12"/>
<connect gate="G$1" pin="VCC" pad="14"/>
<connect gate="G$1" pin="W0" pad="9"/>
<connect gate="G$1" pin="W1" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MSGEQ7" prefix="IC">
<description>7-band graphic equalizer</description>
<gates>
<gate name="G$1" symbol="MSGEQ7" x="0" y="5.08"/>
</gates>
<devices>
<device name="SOIC" package="SOIC8">
<connects>
<connect gate="G$1" pin="AUDIO_IN" pad="5"/>
<connect gate="G$1" pin="CG" pad="6"/>
<connect gate="G$1" pin="CKIN" pad="8"/>
<connect gate="G$1" pin="DCOUT" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="RESET" pad="7"/>
<connect gate="G$1" pin="STROBE" pad="4"/>
<connect gate="G$1" pin="VDD" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="DIL" package="DIL-08">
<connects>
<connect gate="G$1" pin="AUDIO_IN" pad="5"/>
<connect gate="G$1" pin="CG" pad="6"/>
<connect gate="G$1" pin="CKIN" pad="8"/>
<connect gate="G$1" pin="DCOUT" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="RESET" pad="7"/>
<connect gate="G$1" pin="STROBE" pad="4"/>
<connect gate="G$1" pin="VDD" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MUX-74HC4067">
<description>16-channel analog MUX</description>
<gates>
<gate name="G$1" symbol="CD74HC4067" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SSOP24">
<connects>
<connect gate="G$1" pin="CHAN0" pad="9"/>
<connect gate="G$1" pin="CHAN1" pad="8"/>
<connect gate="G$1" pin="CHAN10" pad="21"/>
<connect gate="G$1" pin="CHAN11" pad="20"/>
<connect gate="G$1" pin="CHAN12" pad="19"/>
<connect gate="G$1" pin="CHAN13" pad="18"/>
<connect gate="G$1" pin="CHAN14" pad="17"/>
<connect gate="G$1" pin="CHAN15" pad="16"/>
<connect gate="G$1" pin="CHAN2" pad="7"/>
<connect gate="G$1" pin="CHAN3" pad="6"/>
<connect gate="G$1" pin="CHAN4" pad="5"/>
<connect gate="G$1" pin="CHAN5" pad="4"/>
<connect gate="G$1" pin="CHAN6" pad="3"/>
<connect gate="G$1" pin="CHAN7" pad="2"/>
<connect gate="G$1" pin="CHAN8" pad="23"/>
<connect gate="G$1" pin="CHAN9" pad="22"/>
<connect gate="G$1" pin="COM" pad="1"/>
<connect gate="G$1" pin="EN" pad="15"/>
<connect gate="G$1" pin="GND" pad="12"/>
<connect gate="G$1" pin="S0" pad="10"/>
<connect gate="G$1" pin="S1" pad="11"/>
<connect gate="G$1" pin="S2" pad="14"/>
<connect gate="G$1" pin="S3" pad="13"/>
<connect gate="G$1" pin="VCC" pad="24"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MUX-TS3A5017">
<description>Dual-channel 4:1 analog mux</description>
<gates>
<gate name="G$1" symbol="TS3A5017" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO16">
<connects>
<connect gate="G$1" pin="1D" pad="7"/>
<connect gate="G$1" pin="1EN" pad="1"/>
<connect gate="G$1" pin="1S1" pad="6"/>
<connect gate="G$1" pin="1S2" pad="5"/>
<connect gate="G$1" pin="1S3" pad="4"/>
<connect gate="G$1" pin="1S4" pad="3"/>
<connect gate="G$1" pin="2D" pad="9"/>
<connect gate="G$1" pin="2EN" pad="15"/>
<connect gate="G$1" pin="2S1" pad="10"/>
<connect gate="G$1" pin="2S2" pad="11"/>
<connect gate="G$1" pin="2S3" pad="12"/>
<connect gate="G$1" pin="2S4" pad="13"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="IN1" pad="14"/>
<connect gate="G$1" pin="IN2" pad="2"/>
<connect gate="G$1" pin="VCC" pad="16"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="NE555" prefix="IC">
<description>&lt;b&gt;General purpose bipolar Timer&lt;/b&gt;</description>
<gates>
<gate name="G$1" symbol="NE555" x="60.96" y="-27.94"/>
</gates>
<devices>
<device name="P" package="DIL-08">
<connects>
<connect gate="G$1" pin="/RES" pad="4"/>
<connect gate="G$1" pin="CON" pad="5"/>
<connect gate="G$1" pin="DIS" pad="7"/>
<connect gate="G$1" pin="GND" pad="1"/>
<connect gate="G$1" pin="OUT" pad="3"/>
<connect gate="G$1" pin="TRE" pad="6"/>
<connect gate="G$1" pin="TRI" pad="2"/>
<connect gate="G$1" pin="VCC+" pad="8"/>
</connects>
<technologies>
<technology name="">
<attribute name="MF" value="Arrow Electronics" constant="no"/>
<attribute name="MPN" value="NE555N" constant="no"/>
<attribute name="OC_FARNELL" value="1467742" constant="no"/>
<attribute name="OC_NEWARK" value="89K1486" constant="no"/>
</technology>
</technologies>
</device>
<device name="D" package="SO08">
<connects>
<connect gate="G$1" pin="/RES" pad="4"/>
<connect gate="G$1" pin="CON" pad="5"/>
<connect gate="G$1" pin="DIS" pad="7"/>
<connect gate="G$1" pin="GND" pad="1"/>
<connect gate="G$1" pin="OUT" pad="3"/>
<connect gate="G$1" pin="TRE" pad="6"/>
<connect gate="G$1" pin="TRI" pad="2"/>
<connect gate="G$1" pin="VCC+" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="OPA344">
<description>Single gate rail-to-rail output op-amp. Inputs extend 300mV past rails.</description>
<gates>
<gate name="G$1" symbol="OP-AMP+-" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="-IN" pad="4"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="V+" pad="5"/>
<connect gate="G$1" pin="V-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="OPAMP-DUAL" prefix="IC">
<description>Generic op-amp footprint</description>
<gates>
<gate name="A" symbol="OP-AMP+-" x="-15.24" y="0"/>
<gate name="B" symbol="OP-AMP" x="12.7" y="0"/>
</gates>
<devices>
<device name="U" package="SO08">
<connects>
<connect gate="A" pin="+IN" pad="3"/>
<connect gate="A" pin="-IN" pad="2"/>
<connect gate="A" pin="OUT" pad="1"/>
<connect gate="A" pin="V+" pad="8"/>
<connect gate="A" pin="V-" pad="4"/>
<connect gate="B" pin="+IN" pad="5"/>
<connect gate="B" pin="-IN" pad="6"/>
<connect gate="B" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="" package="DIP08">
<connects>
<connect gate="A" pin="+IN" pad="3"/>
<connect gate="A" pin="-IN" pad="2"/>
<connect gate="A" pin="OUT" pad="1"/>
<connect gate="A" pin="V+" pad="8"/>
<connect gate="A" pin="V-" pad="4"/>
<connect gate="B" pin="+IN" pad="5"/>
<connect gate="B" pin="-IN" pad="6"/>
<connect gate="B" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name="DIP"/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="PCM1803" prefix="U">
<description>24-bit ADC</description>
<gates>
<gate name="G$1" symbol="PCM1803A" x="0" y="2.54"/>
</gates>
<devices>
<device name="SMD" package="SSOP20">
<connects>
<connect gate="G$1" pin="BCK" pad="11"/>
<connect gate="G$1" pin="BPAS" pad="8"/>
<connect gate="G$1" pin="DOUT" pad="12"/>
<connect gate="G$1" pin="FMT0" pad="17"/>
<connect gate="G$1" pin="FMT1" pad="18"/>
<connect gate="G$1" pin="GNDA" pad="6"/>
<connect gate="G$1" pin="GNDD" pad="13"/>
<connect gate="G$1" pin="LRCK" pad="10"/>
<connect gate="G$1" pin="MD0" pad="19"/>
<connect gate="G$1" pin="MD1" pad="20"/>
<connect gate="G$1" pin="OSR" pad="16"/>
<connect gate="G$1" pin="PDWN" pad="7"/>
<connect gate="G$1" pin="SCK" pad="15"/>
<connect gate="G$1" pin="TEST" pad="9"/>
<connect gate="G$1" pin="VCCA" pad="5"/>
<connect gate="G$1" pin="VDD" pad="14"/>
<connect gate="G$1" pin="VINL" pad="1"/>
<connect gate="G$1" pin="VINR" pad="2"/>
<connect gate="G$1" pin="VREF1" pad="3"/>
<connect gate="G$1" pin="VREF2" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SV74LV4052APWR">
<description>Dual 4:1 analog mux</description>
<gates>
<gate name="G$1" symbol="SN74LV4052APWR" x="7.62" y="-15.24"/>
</gates>
<devices>
<device name="" package="TSSOP16">
<connects>
<connect gate="G$1" pin="1-COM" pad="13"/>
<connect gate="G$1" pin="1Y0" pad="12"/>
<connect gate="G$1" pin="1Y1" pad="14"/>
<connect gate="G$1" pin="1Y2" pad="15"/>
<connect gate="G$1" pin="1Y3" pad="11"/>
<connect gate="G$1" pin="2-COM" pad="3"/>
<connect gate="G$1" pin="2Y0" pad="1"/>
<connect gate="G$1" pin="2Y1" pad="5"/>
<connect gate="G$1" pin="2Y2" pad="2"/>
<connect gate="G$1" pin="2Y3" pad="4"/>
<connect gate="G$1" pin="A" pad="10"/>
<connect gate="G$1" pin="B" pad="9"/>
<connect gate="G$1" pin="GND@8" pad="8"/>
<connect gate="G$1" pin="GNG@7" pad="7"/>
<connect gate="G$1" pin="INH" pad="6"/>
<connect gate="G$1" pin="VCC" pad="16"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2" package="TVSOP-16">
<connects>
<connect gate="G$1" pin="1-COM" pad="P$13"/>
<connect gate="G$1" pin="1Y0" pad="P$12"/>
<connect gate="G$1" pin="1Y1" pad="P$14"/>
<connect gate="G$1" pin="1Y2" pad="P$15"/>
<connect gate="G$1" pin="1Y3" pad="P$11"/>
<connect gate="G$1" pin="2-COM" pad="P$3"/>
<connect gate="G$1" pin="2Y0" pad="P$1"/>
<connect gate="G$1" pin="2Y1" pad="P$5"/>
<connect gate="G$1" pin="2Y2" pad="P$2"/>
<connect gate="G$1" pin="2Y3" pad="P$4"/>
<connect gate="G$1" pin="A" pad="P$10"/>
<connect gate="G$1" pin="B" pad="P$9"/>
<connect gate="G$1" pin="GND@8" pad="P$8"/>
<connect gate="G$1" pin="GNG@7" pad="P$7"/>
<connect gate="G$1" pin="INH" pad="P$6"/>
<connect gate="G$1" pin="VCC" pad="P$16"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TVP5150-NTSC_DECODER">
<description>Texas Instrument NTSC/PAL Decoder
TI Part #TVP5150AM1
*** UNPROVEN FOOTPRINT ***

Decodes NTSC video signal to YCbCr 4:2:2 signal</description>
<gates>
<gate name="G$1" symbol="TVP5150-NTSC_DECODER-1" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TQFP32-5MM">
<connects>
<connect gate="G$1" pin="AGND" pad="7"/>
<connect gate="G$1" pin="AIP1A" pad="1"/>
<connect gate="G$1" pin="AIP1B" pad="2"/>
<connect gate="G$1" pin="AVID" pad="26"/>
<connect gate="G$1" pin="CH_AGND" pad="31"/>
<connect gate="G$1" pin="CH_AVDD" pad="32"/>
<connect gate="G$1" pin="DGND" pad="19"/>
<connect gate="G$1" pin="DVDD" pad="20"/>
<connect gate="G$1" pin="FID/GLCO" pad="23"/>
<connect gate="G$1" pin="HSYNC" pad="25"/>
<connect gate="G$1" pin="INT_REQ" pad="27"/>
<connect gate="G$1" pin="IO_DVDD" pad="10"/>
<connect gate="G$1" pin="PCLK/SCLK" pad="9"/>
<connect gate="G$1" pin="PDN" pad="28"/>
<connect gate="G$1" pin="PLL_AGND" pad="3"/>
<connect gate="G$1" pin="PLL_AVDD" pad="4"/>
<connect gate="G$1" pin="REFM" pad="30"/>
<connect gate="G$1" pin="REFP" pad="29"/>
<connect gate="G$1" pin="RESET/" pad="8"/>
<connect gate="G$1" pin="SCL" pad="21"/>
<connect gate="G$1" pin="SDA" pad="22"/>
<connect gate="G$1" pin="VSYNC" pad="24"/>
<connect gate="G$1" pin="XTAL1" pad="5"/>
<connect gate="G$1" pin="XTAL2" pad="6"/>
<connect gate="G$1" pin="YOUT_0" pad="18"/>
<connect gate="G$1" pin="YOUT_1" pad="17"/>
<connect gate="G$1" pin="YOUT_2" pad="16"/>
<connect gate="G$1" pin="YOUT_3" pad="15"/>
<connect gate="G$1" pin="YOUT_4" pad="14"/>
<connect gate="G$1" pin="YOUT_5" pad="13"/>
<connect gate="G$1" pin="YOUT_6" pad="12"/>
<connect gate="G$1" pin="YOUT_7" pad="11"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="X9015_DIGI_POT">
<description>Digital pot- up/down/increment control only</description>
<gates>
<gate name="G$1" symbol="X9015_DIGI_POT" x="0" y="0"/>
</gates>
<devices>
<device name="S" package="SO08">
<connects>
<connect gate="G$1" pin="CS'" pad="7"/>
<connect gate="G$1" pin="INC'" pad="1"/>
<connect gate="G$1" pin="RH/VH" pad="3"/>
<connect gate="G$1" pin="RL/VL" pad="6"/>
<connect gate="G$1" pin="RW/VW" pad="5"/>
<connect gate="G$1" pin="U/D'" pad="2"/>
<connect gate="G$1" pin="VCC" pad="8"/>
<connect gate="G$1" pin="VSS" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="74HC4051_MUX">
<description>8:1 analog mux</description>
<gates>
<gate name="G$1" symbol="74HC4051_MUX" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO16">
<connects>
<connect gate="G$1" pin="A" pad="11"/>
<connect gate="G$1" pin="B" pad="10"/>
<connect gate="G$1" pin="C" pad="9"/>
<connect gate="G$1" pin="INH" pad="6"/>
<connect gate="G$1" pin="IO" pad="3"/>
<connect gate="G$1" pin="IO0" pad="13"/>
<connect gate="G$1" pin="IO1" pad="14"/>
<connect gate="G$1" pin="IO2" pad="15"/>
<connect gate="G$1" pin="IO3" pad="12"/>
<connect gate="G$1" pin="IO4" pad="1"/>
<connect gate="G$1" pin="IO5" pad="5"/>
<connect gate="G$1" pin="IO6" pad="2"/>
<connect gate="G$1" pin="IO7" pad="4"/>
<connect gate="G$1" pin="VDD" pad="16"/>
<connect gate="G$1" pin="VEE" pad="7"/>
<connect gate="G$1" pin="VSS" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="74HC4052" prefix="U">
<description>Dual 4:1 analog mux</description>
<gates>
<gate name="G$1" symbol="74HC4052" x="0" y="0"/>
</gates>
<devices>
<device name="SO" package="SO16">
<connects>
<connect gate="G$1" pin="A" pad="10"/>
<connect gate="G$1" pin="B" pad="9"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="INH" pad="6"/>
<connect gate="G$1" pin="VCC" pad="16"/>
<connect gate="G$1" pin="VEE" pad="7"/>
<connect gate="G$1" pin="X" pad="13"/>
<connect gate="G$1" pin="X0" pad="12"/>
<connect gate="G$1" pin="X1" pad="14"/>
<connect gate="G$1" pin="X2" pad="15"/>
<connect gate="G$1" pin="X3" pad="11"/>
<connect gate="G$1" pin="Y" pad="3"/>
<connect gate="G$1" pin="Y0" pad="1"/>
<connect gate="G$1" pin="Y1" pad="5"/>
<connect gate="G$1" pin="Y2" pad="2"/>
<connect gate="G$1" pin="Y3" pad="4"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-09813"/>
<attribute name="VALUE" value="74HC4052"/>
</technology>
</technologies>
</device>
<device name="DIP" package="DIL16">
<connects>
<connect gate="G$1" pin="A" pad="10"/>
<connect gate="G$1" pin="B" pad="9"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="INH" pad="6"/>
<connect gate="G$1" pin="VCC" pad="16"/>
<connect gate="G$1" pin="VEE" pad="7"/>
<connect gate="G$1" pin="X" pad="13"/>
<connect gate="G$1" pin="X0" pad="12"/>
<connect gate="G$1" pin="X1" pad="14"/>
<connect gate="G$1" pin="X2" pad="15"/>
<connect gate="G$1" pin="X3" pad="11"/>
<connect gate="G$1" pin="Y" pad="3"/>
<connect gate="G$1" pin="Y0" pad="1"/>
<connect gate="G$1" pin="Y1" pad="5"/>
<connect gate="G$1" pin="Y2" pad="2"/>
<connect gate="G$1" pin="Y3" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="74VHC4052_ANALOG_MUX" prefix="U">
<description>Dual 4:1 analog mux</description>
<gates>
<gate name="G$1" symbol="74VHC4052_ANALOG_MUX" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TSSOP16">
<connects>
<connect gate="G$1" pin="A" pad="10"/>
<connect gate="G$1" pin="B" pad="9"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="IN/OUT_X" pad="13"/>
<connect gate="G$1" pin="IN/OUT_Y" pad="3"/>
<connect gate="G$1" pin="INH" pad="6"/>
<connect gate="G$1" pin="VCC" pad="16"/>
<connect gate="G$1" pin="VEE" pad="7"/>
<connect gate="G$1" pin="X0" pad="12"/>
<connect gate="G$1" pin="X1" pad="14"/>
<connect gate="G$1" pin="X2" pad="15"/>
<connect gate="G$1" pin="X3" pad="11"/>
<connect gate="G$1" pin="Y0" pad="1"/>
<connect gate="G$1" pin="Y1" pad="5"/>
<connect gate="G$1" pin="Y2" pad="2"/>
<connect gate="G$1" pin="Y3" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="556" prefix="IC" uservalue="yes">
<description>Dual timer circuit (2 555 timers in one package)</description>
<gates>
<gate name="G$1" symbol="556_TIMER_DUAL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DIL14">
<connects>
<connect gate="G$1" pin="CV" pad="3"/>
<connect gate="G$1" pin="CV2" pad="11"/>
<connect gate="G$1" pin="DIS" pad="1"/>
<connect gate="G$1" pin="DIS2" pad="13"/>
<connect gate="G$1" pin="GND" pad="7"/>
<connect gate="G$1" pin="OUT" pad="5"/>
<connect gate="G$1" pin="OUT2" pad="9"/>
<connect gate="G$1" pin="RST" pad="4"/>
<connect gate="G$1" pin="RST2" pad="10"/>
<connect gate="G$1" pin="THR" pad="2"/>
<connect gate="G$1" pin="THR2" pad="12"/>
<connect gate="G$1" pin="TRIG" pad="6"/>
<connect gate="G$1" pin="TRIG2" pad="8"/>
<connect gate="G$1" pin="VCC" pad="14"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="KIT" package="DIL14-KIT">
<connects>
<connect gate="G$1" pin="CV" pad="3"/>
<connect gate="G$1" pin="CV2" pad="11"/>
<connect gate="G$1" pin="DIS" pad="1"/>
<connect gate="G$1" pin="DIS2" pad="13"/>
<connect gate="G$1" pin="GND" pad="7"/>
<connect gate="G$1" pin="OUT" pad="5"/>
<connect gate="G$1" pin="OUT2" pad="9"/>
<connect gate="G$1" pin="RST" pad="4"/>
<connect gate="G$1" pin="RST2" pad="10"/>
<connect gate="G$1" pin="THR" pad="2"/>
<connect gate="G$1" pin="THR2" pad="12"/>
<connect gate="G$1" pin="TRIG" pad="6"/>
<connect gate="G$1" pin="TRIG2" pad="8"/>
<connect gate="G$1" pin="VCC" pad="14"/>
</connects>
<technologies>
<technology name="">
<attribute name="VALUE" value="556" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM386" prefix="U">
<description>low voltage audio power amplifier</description>
<gates>
<gate name="G$1" symbol="OP-AMP+-FULL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DIP08">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="-IN" pad="2"/>
<connect gate="G$1" pin="BP" pad="7"/>
<connect gate="G$1" pin="GAIN@1" pad="1"/>
<connect gate="G$1" pin="GAIN@8" pad="8"/>
<connect gate="G$1" pin="OUT" pad="5"/>
<connect gate="G$1" pin="V+" pad="6"/>
<connect gate="G$1" pin="V-" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LTC6244">
<description>Low-noise, high-speed rail-to-rail CMOS op-amp</description>
<gates>
<gate name="G$1" symbol="LTC6244" x="-22.86" y="2.54"/>
<gate name="G$2" symbol="LTC6244_2" x="20.32" y="0"/>
</gates>
<devices>
<device name="" package="MSOP8">
<connects>
<connect gate="G$1" pin="+IN" pad="3"/>
<connect gate="G$1" pin="+V" pad="8"/>
<connect gate="G$1" pin="-IN" pad="2"/>
<connect gate="G$1" pin="-V" pad="4"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$2" pin="+IN" pad="5"/>
<connect gate="G$2" pin="-IN" pad="6"/>
<connect gate="G$2" pin="OUT" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="INA139" prefix="U" uservalue="yes">
<description>High-side shunt current sense&lt;BR&gt;
2.7V-40V, 1%</description>
<gates>
<gate name="G$1" symbol="INA139" x="-7.62" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="V+" pad="5"/>
<connect gate="G$1" pin="VIN+" pad="3"/>
<connect gate="G$1" pin="VIN-" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TPA6138A2">
<description>&lt;H3&gt;Headphone driver amp&lt;/h3&gt;&lt;p&gt;
Differential to single-ended audio amplifier.</description>
<gates>
<gate name="G$1" symbol="TPA6138A2" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TSSOP-14">
<connects>
<connect gate="G$1" pin="!MUTE" pad="5"/>
<connect gate="G$1" pin="CN" pad="7"/>
<connect gate="G$1" pin="CP" pad="8"/>
<connect gate="G$1" pin="GND" pad="4 10"/>
<connect gate="G$1" pin="INL+" pad="14"/>
<connect gate="G$1" pin="INL-" pad="13"/>
<connect gate="G$1" pin="INR+" pad="1"/>
<connect gate="G$1" pin="INR-" pad="2"/>
<connect gate="G$1" pin="OUTL" pad="12"/>
<connect gate="G$1" pin="OUTR" pad="3"/>
<connect gate="G$1" pin="UVP" pad="11"/>
<connect gate="G$1" pin="VDD" pad="9"/>
<connect gate="G$1" pin="VSS" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TPA2005D1" prefix="U">
<description>&lt;b&gt;1.4W MONO CLASS-D AUDIO POWER AMPLIFIER&lt;/b&gt;&lt;p&gt;

The TPA2005D1 is a 1.4-W high efficiency filter-free class-D audio power amplifier in a BGA, QFN, or MSOP package that requires only three external components.&lt;p&gt;
Datasheet: &lt;href="http://focus.ti.com/lit/ds/symlink/tpa2005d1.pdf"&gt;http://focus.ti.com/lit/ds/symlink/tpa2005d1.pdf&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;1.4 W Into 8 ? From a 5V Supply at THD = 10% (Typ)&lt;/li&gt;
&lt;li&gt;Maximum Battery Life and Minimum Heat&lt;/li&gt;
&lt;li&gt;Efficiency With an 8-? Speaker: 84% at 400 mW, 79% at 100 mW&lt;/li&gt;
&lt;li&gt;2.8-mA Quiescent Current&lt;/li&gt;
&lt;li&gt;0.5-mA Shutdown Current&lt;/li&gt;
&lt;li&gt;Ideal for Wireless or Cellular Handsets and PDAs&lt;/li&gt;
&lt;li&gt;Capable of Driving an 8-? Speaker (2.5 V ? VDD ? 5.5 V) and a 4-? Speaker (2.5 V ? VDD ? 4.2 V)&lt;/li&gt;
&lt;li&gt;Only Three External Components&lt;/li&gt;
&lt;li&gt;Optimized PWM Output Stage Eliminates LC Output Filter&lt;/li&gt;
&lt;li&gt;Internally Generated 250-kHz Switching Frequency Eliminates Capacitor and Resistor&lt;/li&gt;
&lt;li&gt;Improved PSRR (-71 dB at 217 Hz) and Wide Supply Voltage (2.5 V to 5.5 V) Eliminates Need for a Voltage Regulator&lt;/li&gt;
&lt;li&gt;Fully Differential Design Reduces RF Rectification and Eliminates Bypass Capacitor&lt;/li&gt;
&lt;li&gt;Improved CMRR Eliminates Two Input Coupling Capacitors&lt;/li&gt;
&lt;/ul&gt;</description>
<gates>
<gate name="G$1" symbol="TPA2005D1" x="0" y="0"/>
</gates>
<devices>
<device name="DGN" package="POWER-SOP8">
<connects>
<connect gate="G$1" pin="GND@1" pad="7"/>
<connect gate="G$1" pin="GND@2" pad="9"/>
<connect gate="G$1" pin="IN+" pad="3"/>
<connect gate="G$1" pin="IN-" pad="4"/>
<connect gate="G$1" pin="OUT+" pad="5"/>
<connect gate="G$1" pin="OUT-" pad="8"/>
<connect gate="G$1" pin="SHUTDOWN" pad="1"/>
<connect gate="G$1" pin="VDD" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="DRB" package="QFN-8_PAD">
<connects>
<connect gate="G$1" pin="GND@1" pad="7"/>
<connect gate="G$1" pin="GND@2" pad="9 10 11 12 13"/>
<connect gate="G$1" pin="IN+" pad="3"/>
<connect gate="G$1" pin="IN-" pad="4"/>
<connect gate="G$1" pin="OUT+" pad="5"/>
<connect gate="G$1" pin="OUT-" pad="8"/>
<connect gate="G$1" pin="SHUTDOWN" pad="1"/>
<connect gate="G$1" pin="VDD" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="HIH6131">
<gates>
<gate name="G$1" symbol="HIH6131" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOIC8">
<connects>
<connect gate="G$1" pin="AL_H" pad="5"/>
<connect gate="G$1" pin="AL_L" pad="6"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="NC" pad="7"/>
<connect gate="G$1" pin="SCL" pad="3"/>
<connect gate="G$1" pin="SDA" pad="4"/>
<connect gate="G$1" pin="VCORE" pad="1"/>
<connect gate="G$1" pin="VDD" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="INA169" prefix="U">
<gates>
<gate name="G$1" symbol="INA169" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="V+" pad="5"/>
<connect gate="G$1" pin="VIN+" pad="3"/>
<connect gate="G$1" pin="VIN-" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Boards.lbr.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="16" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find boards and modules: Arduino footprints, breadboards, non-RF modules, etc.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="ARDUINO_MEGA">
<description>Full Arduino MEGA footprint</description>
<wire x1="0" y1="53.34" x2="96.52" y2="53.34" width="0.2032" layer="20"/>
<wire x1="96.52" y1="53.34" x2="99.06" y2="50.8" width="0.2032" layer="20"/>
<wire x1="99.06" y1="40.64" x2="101.6" y2="38.1" width="0.2032" layer="20"/>
<wire x1="101.6" y1="38.1" x2="101.6" y2="3.81" width="0.2032" layer="20"/>
<wire x1="101.6" y1="3.81" x2="99.06" y2="1.27" width="0.2032" layer="20"/>
<wire x1="99.06" y1="1.27" x2="99.06" y2="0" width="0.2032" layer="20"/>
<wire x1="99.06" y1="0" x2="0" y2="0" width="0.2032" layer="20"/>
<wire x1="0" y1="0" x2="0" y2="53.34" width="0.2032" layer="20"/>
<wire x1="99.06" y1="50.8" x2="99.06" y2="40.64" width="0.2032" layer="20"/>
<wire x1="88.265" y1="3.81" x2="89.535" y2="3.81" width="0.2032" layer="21"/>
<wire x1="89.535" y1="3.81" x2="90.17" y2="3.175" width="0.2032" layer="21"/>
<wire x1="90.17" y1="1.905" x2="89.535" y2="1.27" width="0.2032" layer="21"/>
<wire x1="85.09" y1="3.175" x2="85.725" y2="3.81" width="0.2032" layer="21"/>
<wire x1="85.725" y1="3.81" x2="86.995" y2="3.81" width="0.2032" layer="21"/>
<wire x1="86.995" y1="3.81" x2="87.63" y2="3.175" width="0.2032" layer="21"/>
<wire x1="87.63" y1="1.905" x2="86.995" y2="1.27" width="0.2032" layer="21"/>
<wire x1="86.995" y1="1.27" x2="85.725" y2="1.27" width="0.2032" layer="21"/>
<wire x1="85.725" y1="1.27" x2="85.09" y2="1.905" width="0.2032" layer="21"/>
<wire x1="88.265" y1="3.81" x2="87.63" y2="3.175" width="0.2032" layer="21"/>
<wire x1="87.63" y1="1.905" x2="88.265" y2="1.27" width="0.2032" layer="21"/>
<wire x1="89.535" y1="1.27" x2="88.265" y2="1.27" width="0.2032" layer="21"/>
<wire x1="80.645" y1="3.81" x2="81.915" y2="3.81" width="0.2032" layer="21"/>
<wire x1="81.915" y1="3.81" x2="82.55" y2="3.175" width="0.2032" layer="21"/>
<wire x1="82.55" y1="1.905" x2="81.915" y2="1.27" width="0.2032" layer="21"/>
<wire x1="82.55" y1="3.175" x2="83.185" y2="3.81" width="0.2032" layer="21"/>
<wire x1="83.185" y1="3.81" x2="84.455" y2="3.81" width="0.2032" layer="21"/>
<wire x1="84.455" y1="3.81" x2="85.09" y2="3.175" width="0.2032" layer="21"/>
<wire x1="85.09" y1="1.905" x2="84.455" y2="1.27" width="0.2032" layer="21"/>
<wire x1="84.455" y1="1.27" x2="83.185" y2="1.27" width="0.2032" layer="21"/>
<wire x1="83.185" y1="1.27" x2="82.55" y2="1.905" width="0.2032" layer="21"/>
<wire x1="77.47" y1="3.175" x2="78.105" y2="3.81" width="0.2032" layer="21"/>
<wire x1="78.105" y1="3.81" x2="79.375" y2="3.81" width="0.2032" layer="21"/>
<wire x1="79.375" y1="3.81" x2="80.01" y2="3.175" width="0.2032" layer="21"/>
<wire x1="80.01" y1="1.905" x2="79.375" y2="1.27" width="0.2032" layer="21"/>
<wire x1="79.375" y1="1.27" x2="78.105" y2="1.27" width="0.2032" layer="21"/>
<wire x1="78.105" y1="1.27" x2="77.47" y2="1.905" width="0.2032" layer="21"/>
<wire x1="80.645" y1="3.81" x2="80.01" y2="3.175" width="0.2032" layer="21"/>
<wire x1="80.01" y1="1.905" x2="80.645" y2="1.27" width="0.2032" layer="21"/>
<wire x1="81.915" y1="1.27" x2="80.645" y2="1.27" width="0.2032" layer="21"/>
<wire x1="73.025" y1="3.81" x2="74.295" y2="3.81" width="0.2032" layer="21"/>
<wire x1="74.295" y1="3.81" x2="74.93" y2="3.175" width="0.2032" layer="21"/>
<wire x1="74.93" y1="1.905" x2="74.295" y2="1.27" width="0.2032" layer="21"/>
<wire x1="74.93" y1="3.175" x2="75.565" y2="3.81" width="0.2032" layer="21"/>
<wire x1="75.565" y1="3.81" x2="76.835" y2="3.81" width="0.2032" layer="21"/>
<wire x1="76.835" y1="3.81" x2="77.47" y2="3.175" width="0.2032" layer="21"/>
<wire x1="77.47" y1="1.905" x2="76.835" y2="1.27" width="0.2032" layer="21"/>
<wire x1="76.835" y1="1.27" x2="75.565" y2="1.27" width="0.2032" layer="21"/>
<wire x1="75.565" y1="1.27" x2="74.93" y2="1.905" width="0.2032" layer="21"/>
<wire x1="72.39" y1="3.175" x2="72.39" y2="1.905" width="0.2032" layer="21"/>
<wire x1="73.025" y1="3.81" x2="72.39" y2="3.175" width="0.2032" layer="21"/>
<wire x1="72.39" y1="1.905" x2="73.025" y2="1.27" width="0.2032" layer="21"/>
<wire x1="74.295" y1="1.27" x2="73.025" y2="1.27" width="0.2032" layer="21"/>
<wire x1="90.805" y1="3.81" x2="92.075" y2="3.81" width="0.2032" layer="21"/>
<wire x1="92.075" y1="3.81" x2="92.71" y2="3.175" width="0.2032" layer="21"/>
<wire x1="92.71" y1="3.175" x2="92.71" y2="1.905" width="0.2032" layer="21"/>
<wire x1="92.71" y1="1.905" x2="92.075" y2="1.27" width="0.2032" layer="21"/>
<wire x1="90.805" y1="3.81" x2="90.17" y2="3.175" width="0.2032" layer="21"/>
<wire x1="90.17" y1="1.905" x2="90.805" y2="1.27" width="0.2032" layer="21"/>
<wire x1="92.075" y1="1.27" x2="90.805" y2="1.27" width="0.2032" layer="21"/>
<wire x1="83.185" y1="52.07" x2="84.455" y2="52.07" width="0.2032" layer="21"/>
<wire x1="84.455" y1="52.07" x2="85.09" y2="51.435" width="0.2032" layer="21"/>
<wire x1="85.09" y1="50.165" x2="84.455" y2="49.53" width="0.2032" layer="21"/>
<wire x1="80.01" y1="51.435" x2="80.645" y2="52.07" width="0.2032" layer="21"/>
<wire x1="80.645" y1="52.07" x2="81.915" y2="52.07" width="0.2032" layer="21"/>
<wire x1="81.915" y1="52.07" x2="82.55" y2="51.435" width="0.2032" layer="21"/>
<wire x1="82.55" y1="50.165" x2="81.915" y2="49.53" width="0.2032" layer="21"/>
<wire x1="81.915" y1="49.53" x2="80.645" y2="49.53" width="0.2032" layer="21"/>
<wire x1="80.645" y1="49.53" x2="80.01" y2="50.165" width="0.2032" layer="21"/>
<wire x1="83.185" y1="52.07" x2="82.55" y2="51.435" width="0.2032" layer="21"/>
<wire x1="82.55" y1="50.165" x2="83.185" y2="49.53" width="0.2032" layer="21"/>
<wire x1="84.455" y1="49.53" x2="83.185" y2="49.53" width="0.2032" layer="21"/>
<wire x1="75.565" y1="52.07" x2="76.835" y2="52.07" width="0.2032" layer="21"/>
<wire x1="76.835" y1="52.07" x2="77.47" y2="51.435" width="0.2032" layer="21"/>
<wire x1="77.47" y1="50.165" x2="76.835" y2="49.53" width="0.2032" layer="21"/>
<wire x1="77.47" y1="51.435" x2="78.105" y2="52.07" width="0.2032" layer="21"/>
<wire x1="78.105" y1="52.07" x2="79.375" y2="52.07" width="0.2032" layer="21"/>
<wire x1="79.375" y1="52.07" x2="80.01" y2="51.435" width="0.2032" layer="21"/>
<wire x1="80.01" y1="50.165" x2="79.375" y2="49.53" width="0.2032" layer="21"/>
<wire x1="79.375" y1="49.53" x2="78.105" y2="49.53" width="0.2032" layer="21"/>
<wire x1="78.105" y1="49.53" x2="77.47" y2="50.165" width="0.2032" layer="21"/>
<wire x1="72.39" y1="51.435" x2="73.025" y2="52.07" width="0.2032" layer="21"/>
<wire x1="73.025" y1="52.07" x2="74.295" y2="52.07" width="0.2032" layer="21"/>
<wire x1="74.295" y1="52.07" x2="74.93" y2="51.435" width="0.2032" layer="21"/>
<wire x1="74.93" y1="50.165" x2="74.295" y2="49.53" width="0.2032" layer="21"/>
<wire x1="74.295" y1="49.53" x2="73.025" y2="49.53" width="0.2032" layer="21"/>
<wire x1="73.025" y1="49.53" x2="72.39" y2="50.165" width="0.2032" layer="21"/>
<wire x1="75.565" y1="52.07" x2="74.93" y2="51.435" width="0.2032" layer="21"/>
<wire x1="74.93" y1="50.165" x2="75.565" y2="49.53" width="0.2032" layer="21"/>
<wire x1="76.835" y1="49.53" x2="75.565" y2="49.53" width="0.2032" layer="21"/>
<wire x1="67.945" y1="52.07" x2="69.215" y2="52.07" width="0.2032" layer="21"/>
<wire x1="69.215" y1="52.07" x2="69.85" y2="51.435" width="0.2032" layer="21"/>
<wire x1="69.85" y1="50.165" x2="69.215" y2="49.53" width="0.2032" layer="21"/>
<wire x1="69.85" y1="51.435" x2="70.485" y2="52.07" width="0.2032" layer="21"/>
<wire x1="70.485" y1="52.07" x2="71.755" y2="52.07" width="0.2032" layer="21"/>
<wire x1="71.755" y1="52.07" x2="72.39" y2="51.435" width="0.2032" layer="21"/>
<wire x1="72.39" y1="50.165" x2="71.755" y2="49.53" width="0.2032" layer="21"/>
<wire x1="71.755" y1="49.53" x2="70.485" y2="49.53" width="0.2032" layer="21"/>
<wire x1="70.485" y1="49.53" x2="69.85" y2="50.165" width="0.2032" layer="21"/>
<wire x1="67.31" y1="51.435" x2="67.31" y2="50.165" width="0.2032" layer="21"/>
<wire x1="67.945" y1="52.07" x2="67.31" y2="51.435" width="0.2032" layer="21"/>
<wire x1="67.31" y1="50.165" x2="67.945" y2="49.53" width="0.2032" layer="21"/>
<wire x1="69.215" y1="49.53" x2="67.945" y2="49.53" width="0.2032" layer="21"/>
<wire x1="85.725" y1="52.07" x2="86.995" y2="52.07" width="0.2032" layer="21"/>
<wire x1="86.995" y1="52.07" x2="87.63" y2="51.435" width="0.2032" layer="21"/>
<wire x1="87.63" y1="51.435" x2="87.63" y2="50.165" width="0.2032" layer="21"/>
<wire x1="87.63" y1="50.165" x2="86.995" y2="49.53" width="0.2032" layer="21"/>
<wire x1="85.725" y1="52.07" x2="85.09" y2="51.435" width="0.2032" layer="21"/>
<wire x1="85.09" y1="50.165" x2="85.725" y2="49.53" width="0.2032" layer="21"/>
<wire x1="86.995" y1="49.53" x2="85.725" y2="49.53" width="0.2032" layer="21"/>
<wire x1="65.405" y1="3.81" x2="66.675" y2="3.81" width="0.2032" layer="21"/>
<wire x1="66.675" y1="3.81" x2="67.31" y2="3.175" width="0.2032" layer="21"/>
<wire x1="67.31" y1="1.905" x2="66.675" y2="1.27" width="0.2032" layer="21"/>
<wire x1="62.23" y1="3.175" x2="62.865" y2="3.81" width="0.2032" layer="21"/>
<wire x1="62.865" y1="3.81" x2="64.135" y2="3.81" width="0.2032" layer="21"/>
<wire x1="64.135" y1="3.81" x2="64.77" y2="3.175" width="0.2032" layer="21"/>
<wire x1="64.77" y1="1.905" x2="64.135" y2="1.27" width="0.2032" layer="21"/>
<wire x1="64.135" y1="1.27" x2="62.865" y2="1.27" width="0.2032" layer="21"/>
<wire x1="62.865" y1="1.27" x2="62.23" y2="1.905" width="0.2032" layer="21"/>
<wire x1="65.405" y1="3.81" x2="64.77" y2="3.175" width="0.2032" layer="21"/>
<wire x1="64.77" y1="1.905" x2="65.405" y2="1.27" width="0.2032" layer="21"/>
<wire x1="66.675" y1="1.27" x2="65.405" y2="1.27" width="0.2032" layer="21"/>
<wire x1="57.785" y1="3.81" x2="59.055" y2="3.81" width="0.2032" layer="21"/>
<wire x1="59.055" y1="3.81" x2="59.69" y2="3.175" width="0.2032" layer="21"/>
<wire x1="59.69" y1="1.905" x2="59.055" y2="1.27" width="0.2032" layer="21"/>
<wire x1="59.69" y1="3.175" x2="60.325" y2="3.81" width="0.2032" layer="21"/>
<wire x1="60.325" y1="3.81" x2="61.595" y2="3.81" width="0.2032" layer="21"/>
<wire x1="61.595" y1="3.81" x2="62.23" y2="3.175" width="0.2032" layer="21"/>
<wire x1="62.23" y1="1.905" x2="61.595" y2="1.27" width="0.2032" layer="21"/>
<wire x1="61.595" y1="1.27" x2="60.325" y2="1.27" width="0.2032" layer="21"/>
<wire x1="60.325" y1="1.27" x2="59.69" y2="1.905" width="0.2032" layer="21"/>
<wire x1="54.61" y1="3.175" x2="55.245" y2="3.81" width="0.2032" layer="21"/>
<wire x1="55.245" y1="3.81" x2="56.515" y2="3.81" width="0.2032" layer="21"/>
<wire x1="56.515" y1="3.81" x2="57.15" y2="3.175" width="0.2032" layer="21"/>
<wire x1="57.15" y1="1.905" x2="56.515" y2="1.27" width="0.2032" layer="21"/>
<wire x1="56.515" y1="1.27" x2="55.245" y2="1.27" width="0.2032" layer="21"/>
<wire x1="55.245" y1="1.27" x2="54.61" y2="1.905" width="0.2032" layer="21"/>
<wire x1="57.785" y1="3.81" x2="57.15" y2="3.175" width="0.2032" layer="21"/>
<wire x1="57.15" y1="1.905" x2="57.785" y2="1.27" width="0.2032" layer="21"/>
<wire x1="59.055" y1="1.27" x2="57.785" y2="1.27" width="0.2032" layer="21"/>
<wire x1="50.165" y1="3.81" x2="51.435" y2="3.81" width="0.2032" layer="21"/>
<wire x1="51.435" y1="3.81" x2="52.07" y2="3.175" width="0.2032" layer="21"/>
<wire x1="52.07" y1="1.905" x2="51.435" y2="1.27" width="0.2032" layer="21"/>
<wire x1="52.07" y1="3.175" x2="52.705" y2="3.81" width="0.2032" layer="21"/>
<wire x1="52.705" y1="3.81" x2="53.975" y2="3.81" width="0.2032" layer="21"/>
<wire x1="53.975" y1="3.81" x2="54.61" y2="3.175" width="0.2032" layer="21"/>
<wire x1="54.61" y1="1.905" x2="53.975" y2="1.27" width="0.2032" layer="21"/>
<wire x1="53.975" y1="1.27" x2="52.705" y2="1.27" width="0.2032" layer="21"/>
<wire x1="52.705" y1="1.27" x2="52.07" y2="1.905" width="0.2032" layer="21"/>
<wire x1="49.53" y1="3.175" x2="49.53" y2="1.905" width="0.2032" layer="21"/>
<wire x1="50.165" y1="3.81" x2="49.53" y2="3.175" width="0.2032" layer="21"/>
<wire x1="49.53" y1="1.905" x2="50.165" y2="1.27" width="0.2032" layer="21"/>
<wire x1="51.435" y1="1.27" x2="50.165" y2="1.27" width="0.2032" layer="21"/>
<wire x1="67.945" y1="3.81" x2="69.215" y2="3.81" width="0.2032" layer="21"/>
<wire x1="69.215" y1="3.81" x2="69.85" y2="3.175" width="0.2032" layer="21"/>
<wire x1="69.85" y1="3.175" x2="69.85" y2="1.905" width="0.2032" layer="21"/>
<wire x1="69.85" y1="1.905" x2="69.215" y2="1.27" width="0.2032" layer="21"/>
<wire x1="67.945" y1="3.81" x2="67.31" y2="3.175" width="0.2032" layer="21"/>
<wire x1="67.31" y1="1.905" x2="67.945" y2="1.27" width="0.2032" layer="21"/>
<wire x1="69.215" y1="1.27" x2="67.945" y2="1.27" width="0.2032" layer="21"/>
<wire x1="60.325" y1="52.07" x2="61.595" y2="52.07" width="0.2032" layer="21"/>
<wire x1="61.595" y1="52.07" x2="62.23" y2="51.435" width="0.2032" layer="21"/>
<wire x1="62.23" y1="50.165" x2="61.595" y2="49.53" width="0.2032" layer="21"/>
<wire x1="57.15" y1="51.435" x2="57.785" y2="52.07" width="0.2032" layer="21"/>
<wire x1="57.785" y1="52.07" x2="59.055" y2="52.07" width="0.2032" layer="21"/>
<wire x1="59.055" y1="52.07" x2="59.69" y2="51.435" width="0.2032" layer="21"/>
<wire x1="59.69" y1="50.165" x2="59.055" y2="49.53" width="0.2032" layer="21"/>
<wire x1="59.055" y1="49.53" x2="57.785" y2="49.53" width="0.2032" layer="21"/>
<wire x1="57.785" y1="49.53" x2="57.15" y2="50.165" width="0.2032" layer="21"/>
<wire x1="60.325" y1="52.07" x2="59.69" y2="51.435" width="0.2032" layer="21"/>
<wire x1="59.69" y1="50.165" x2="60.325" y2="49.53" width="0.2032" layer="21"/>
<wire x1="61.595" y1="49.53" x2="60.325" y2="49.53" width="0.2032" layer="21"/>
<wire x1="52.705" y1="52.07" x2="53.975" y2="52.07" width="0.2032" layer="21"/>
<wire x1="53.975" y1="52.07" x2="54.61" y2="51.435" width="0.2032" layer="21"/>
<wire x1="54.61" y1="50.165" x2="53.975" y2="49.53" width="0.2032" layer="21"/>
<wire x1="54.61" y1="51.435" x2="55.245" y2="52.07" width="0.2032" layer="21"/>
<wire x1="55.245" y1="52.07" x2="56.515" y2="52.07" width="0.2032" layer="21"/>
<wire x1="56.515" y1="52.07" x2="57.15" y2="51.435" width="0.2032" layer="21"/>
<wire x1="57.15" y1="50.165" x2="56.515" y2="49.53" width="0.2032" layer="21"/>
<wire x1="56.515" y1="49.53" x2="55.245" y2="49.53" width="0.2032" layer="21"/>
<wire x1="55.245" y1="49.53" x2="54.61" y2="50.165" width="0.2032" layer="21"/>
<wire x1="49.53" y1="51.435" x2="50.165" y2="52.07" width="0.2032" layer="21"/>
<wire x1="50.165" y1="52.07" x2="51.435" y2="52.07" width="0.2032" layer="21"/>
<wire x1="51.435" y1="52.07" x2="52.07" y2="51.435" width="0.2032" layer="21"/>
<wire x1="52.07" y1="50.165" x2="51.435" y2="49.53" width="0.2032" layer="21"/>
<wire x1="51.435" y1="49.53" x2="50.165" y2="49.53" width="0.2032" layer="21"/>
<wire x1="50.165" y1="49.53" x2="49.53" y2="50.165" width="0.2032" layer="21"/>
<wire x1="52.705" y1="52.07" x2="52.07" y2="51.435" width="0.2032" layer="21"/>
<wire x1="52.07" y1="50.165" x2="52.705" y2="49.53" width="0.2032" layer="21"/>
<wire x1="53.975" y1="49.53" x2="52.705" y2="49.53" width="0.2032" layer="21"/>
<wire x1="45.085" y1="52.07" x2="46.355" y2="52.07" width="0.2032" layer="21"/>
<wire x1="46.355" y1="52.07" x2="46.99" y2="51.435" width="0.2032" layer="21"/>
<wire x1="46.99" y1="50.165" x2="46.355" y2="49.53" width="0.2032" layer="21"/>
<wire x1="46.99" y1="51.435" x2="47.625" y2="52.07" width="0.2032" layer="21"/>
<wire x1="47.625" y1="52.07" x2="48.895" y2="52.07" width="0.2032" layer="21"/>
<wire x1="48.895" y1="52.07" x2="49.53" y2="51.435" width="0.2032" layer="21"/>
<wire x1="49.53" y1="50.165" x2="48.895" y2="49.53" width="0.2032" layer="21"/>
<wire x1="48.895" y1="49.53" x2="47.625" y2="49.53" width="0.2032" layer="21"/>
<wire x1="47.625" y1="49.53" x2="46.99" y2="50.165" width="0.2032" layer="21"/>
<wire x1="44.45" y1="51.435" x2="44.45" y2="50.165" width="0.2032" layer="21"/>
<wire x1="45.085" y1="52.07" x2="44.45" y2="51.435" width="0.2032" layer="21"/>
<wire x1="44.45" y1="50.165" x2="45.085" y2="49.53" width="0.2032" layer="21"/>
<wire x1="46.355" y1="49.53" x2="45.085" y2="49.53" width="0.2032" layer="21"/>
<wire x1="62.865" y1="52.07" x2="64.135" y2="52.07" width="0.2032" layer="21"/>
<wire x1="64.135" y1="52.07" x2="64.77" y2="51.435" width="0.2032" layer="21"/>
<wire x1="64.77" y1="51.435" x2="64.77" y2="50.165" width="0.2032" layer="21"/>
<wire x1="64.77" y1="50.165" x2="64.135" y2="49.53" width="0.2032" layer="21"/>
<wire x1="62.865" y1="52.07" x2="62.23" y2="51.435" width="0.2032" layer="21"/>
<wire x1="62.23" y1="50.165" x2="62.865" y2="49.53" width="0.2032" layer="21"/>
<wire x1="64.135" y1="49.53" x2="62.865" y2="49.53" width="0.2032" layer="21"/>
<wire x1="38.481" y1="52.07" x2="39.751" y2="52.07" width="0.2032" layer="21"/>
<wire x1="39.751" y1="52.07" x2="40.386" y2="51.435" width="0.2032" layer="21"/>
<wire x1="40.386" y1="50.165" x2="39.751" y2="49.53" width="0.2032" layer="21"/>
<wire x1="35.306" y1="51.435" x2="35.941" y2="52.07" width="0.2032" layer="21"/>
<wire x1="35.941" y1="52.07" x2="37.211" y2="52.07" width="0.2032" layer="21"/>
<wire x1="37.211" y1="52.07" x2="37.846" y2="51.435" width="0.2032" layer="21"/>
<wire x1="37.846" y1="50.165" x2="37.211" y2="49.53" width="0.2032" layer="21"/>
<wire x1="37.211" y1="49.53" x2="35.941" y2="49.53" width="0.2032" layer="21"/>
<wire x1="35.941" y1="49.53" x2="35.306" y2="50.165" width="0.2032" layer="21"/>
<wire x1="38.481" y1="52.07" x2="37.846" y2="51.435" width="0.2032" layer="21"/>
<wire x1="37.846" y1="50.165" x2="38.481" y2="49.53" width="0.2032" layer="21"/>
<wire x1="39.751" y1="49.53" x2="38.481" y2="49.53" width="0.2032" layer="21"/>
<wire x1="30.861" y1="52.07" x2="32.131" y2="52.07" width="0.2032" layer="21"/>
<wire x1="32.131" y1="52.07" x2="32.766" y2="51.435" width="0.2032" layer="21"/>
<wire x1="32.766" y1="50.165" x2="32.131" y2="49.53" width="0.2032" layer="21"/>
<wire x1="32.766" y1="51.435" x2="33.401" y2="52.07" width="0.2032" layer="21"/>
<wire x1="33.401" y1="52.07" x2="34.671" y2="52.07" width="0.2032" layer="21"/>
<wire x1="34.671" y1="52.07" x2="35.306" y2="51.435" width="0.2032" layer="21"/>
<wire x1="35.306" y1="50.165" x2="34.671" y2="49.53" width="0.2032" layer="21"/>
<wire x1="34.671" y1="49.53" x2="33.401" y2="49.53" width="0.2032" layer="21"/>
<wire x1="33.401" y1="49.53" x2="32.766" y2="50.165" width="0.2032" layer="21"/>
<wire x1="27.686" y1="51.435" x2="28.321" y2="52.07" width="0.2032" layer="21"/>
<wire x1="28.321" y1="52.07" x2="29.591" y2="52.07" width="0.2032" layer="21"/>
<wire x1="29.591" y1="52.07" x2="30.226" y2="51.435" width="0.2032" layer="21"/>
<wire x1="30.226" y1="50.165" x2="29.591" y2="49.53" width="0.2032" layer="21"/>
<wire x1="29.591" y1="49.53" x2="28.321" y2="49.53" width="0.2032" layer="21"/>
<wire x1="28.321" y1="49.53" x2="27.686" y2="50.165" width="0.2032" layer="21"/>
<wire x1="30.861" y1="52.07" x2="30.226" y2="51.435" width="0.2032" layer="21"/>
<wire x1="30.226" y1="50.165" x2="30.861" y2="49.53" width="0.2032" layer="21"/>
<wire x1="32.131" y1="49.53" x2="30.861" y2="49.53" width="0.2032" layer="21"/>
<wire x1="23.241" y1="52.07" x2="24.511" y2="52.07" width="0.2032" layer="21"/>
<wire x1="24.511" y1="52.07" x2="25.146" y2="51.435" width="0.2032" layer="21"/>
<wire x1="25.146" y1="50.165" x2="24.511" y2="49.53" width="0.2032" layer="21"/>
<wire x1="25.146" y1="51.435" x2="25.781" y2="52.07" width="0.2032" layer="21"/>
<wire x1="25.781" y1="52.07" x2="27.051" y2="52.07" width="0.2032" layer="21"/>
<wire x1="27.051" y1="52.07" x2="27.686" y2="51.435" width="0.2032" layer="21"/>
<wire x1="27.686" y1="50.165" x2="27.051" y2="49.53" width="0.2032" layer="21"/>
<wire x1="27.051" y1="49.53" x2="25.781" y2="49.53" width="0.2032" layer="21"/>
<wire x1="25.781" y1="49.53" x2="25.146" y2="50.165" width="0.2032" layer="21"/>
<wire x1="22.606" y1="51.435" x2="22.606" y2="50.165" width="0.2032" layer="21"/>
<wire x1="23.241" y1="52.07" x2="22.606" y2="51.435" width="0.2032" layer="21"/>
<wire x1="22.606" y1="50.165" x2="23.241" y2="49.53" width="0.2032" layer="21"/>
<wire x1="24.511" y1="49.53" x2="23.241" y2="49.53" width="0.2032" layer="21"/>
<wire x1="41.021" y1="52.07" x2="42.291" y2="52.07" width="0.2032" layer="21"/>
<wire x1="42.291" y1="52.07" x2="42.926" y2="51.435" width="0.2032" layer="21"/>
<wire x1="42.926" y1="51.435" x2="42.926" y2="50.165" width="0.2032" layer="21"/>
<wire x1="42.926" y1="50.165" x2="42.291" y2="49.53" width="0.2032" layer="21"/>
<wire x1="41.021" y1="52.07" x2="40.386" y2="51.435" width="0.2032" layer="21"/>
<wire x1="40.386" y1="50.165" x2="41.021" y2="49.53" width="0.2032" layer="21"/>
<wire x1="42.291" y1="49.53" x2="41.021" y2="49.53" width="0.2032" layer="21"/>
<wire x1="62.992" y1="31.75" x2="62.357" y2="31.115" width="0.2032" layer="51"/>
<wire x1="62.357" y1="29.845" x2="62.992" y2="29.21" width="0.2032" layer="51"/>
<wire x1="62.992" y1="29.21" x2="62.357" y2="28.575" width="0.2032" layer="51"/>
<wire x1="62.357" y1="27.305" x2="62.992" y2="26.67" width="0.2032" layer="51"/>
<wire x1="62.992" y1="26.67" x2="62.357" y2="26.035" width="0.2032" layer="51"/>
<wire x1="62.357" y1="24.765" x2="62.992" y2="24.13" width="0.2032" layer="51"/>
<wire x1="62.992" y1="31.75" x2="66.802" y2="31.75" width="0.2032" layer="51"/>
<wire x1="66.802" y1="31.75" x2="67.437" y2="31.115" width="0.2032" layer="51"/>
<wire x1="67.437" y1="31.115" x2="67.437" y2="29.845" width="0.2032" layer="51"/>
<wire x1="67.437" y1="29.845" x2="66.802" y2="29.21" width="0.2032" layer="51"/>
<wire x1="66.802" y1="29.21" x2="67.437" y2="28.575" width="0.2032" layer="51"/>
<wire x1="67.437" y1="28.575" x2="67.437" y2="27.305" width="0.2032" layer="51"/>
<wire x1="67.437" y1="27.305" x2="66.802" y2="26.67" width="0.2032" layer="51"/>
<wire x1="66.802" y1="26.67" x2="67.437" y2="26.035" width="0.2032" layer="51"/>
<wire x1="67.437" y1="26.035" x2="67.437" y2="24.765" width="0.2032" layer="51"/>
<wire x1="67.437" y1="24.765" x2="66.802" y2="24.13" width="0.2032" layer="51"/>
<wire x1="66.802" y1="29.21" x2="62.992" y2="29.21" width="0.2032" layer="51"/>
<wire x1="66.802" y1="26.67" x2="62.992" y2="26.67" width="0.2032" layer="51"/>
<wire x1="66.802" y1="24.13" x2="62.992" y2="24.13" width="0.2032" layer="51"/>
<wire x1="62.357" y1="26.035" x2="62.357" y2="24.765" width="0.2032" layer="51"/>
<wire x1="62.357" y1="28.575" x2="62.357" y2="27.305" width="0.2032" layer="51"/>
<wire x1="62.357" y1="31.115" x2="62.357" y2="29.845" width="0.2032" layer="51"/>
<wire x1="62.022" y1="29.845" x2="62.022" y2="31.115" width="0.2032" layer="51"/>
<wire x1="97.155" y1="29.21" x2="97.79" y2="29.845" width="0.1524" layer="21"/>
<wire x1="97.79" y1="31.115" x2="97.155" y2="31.75" width="0.1524" layer="21"/>
<wire x1="97.155" y1="31.75" x2="97.79" y2="32.385" width="0.1524" layer="21"/>
<wire x1="97.79" y1="33.655" x2="97.155" y2="34.29" width="0.1524" layer="21"/>
<wire x1="97.155" y1="34.29" x2="97.79" y2="34.925" width="0.1524" layer="21"/>
<wire x1="97.79" y1="36.195" x2="97.155" y2="36.83" width="0.1524" layer="21"/>
<wire x1="97.155" y1="36.83" x2="97.79" y2="37.465" width="0.1524" layer="21"/>
<wire x1="97.79" y1="38.735" x2="97.155" y2="39.37" width="0.1524" layer="21"/>
<wire x1="97.155" y1="39.37" x2="97.79" y2="40.005" width="0.1524" layer="21"/>
<wire x1="97.79" y1="41.275" x2="97.155" y2="41.91" width="0.1524" layer="21"/>
<wire x1="97.155" y1="41.91" x2="97.79" y2="42.545" width="0.1524" layer="21"/>
<wire x1="97.79" y1="43.815" x2="97.155" y2="44.45" width="0.1524" layer="21"/>
<wire x1="93.345" y1="29.21" x2="92.71" y2="29.845" width="0.1524" layer="21"/>
<wire x1="92.71" y1="29.845" x2="92.71" y2="31.115" width="0.1524" layer="21"/>
<wire x1="92.71" y1="31.115" x2="93.345" y2="31.75" width="0.1524" layer="21"/>
<wire x1="93.345" y1="31.75" x2="92.71" y2="32.385" width="0.1524" layer="21"/>
<wire x1="92.71" y1="32.385" x2="92.71" y2="33.655" width="0.1524" layer="21"/>
<wire x1="92.71" y1="33.655" x2="93.345" y2="34.29" width="0.1524" layer="21"/>
<wire x1="93.345" y1="34.29" x2="92.71" y2="34.925" width="0.1524" layer="21"/>
<wire x1="92.71" y1="34.925" x2="92.71" y2="36.195" width="0.1524" layer="21"/>
<wire x1="92.71" y1="36.195" x2="93.345" y2="36.83" width="0.1524" layer="21"/>
<wire x1="93.345" y1="36.83" x2="92.71" y2="37.465" width="0.1524" layer="21"/>
<wire x1="92.71" y1="37.465" x2="92.71" y2="38.735" width="0.1524" layer="21"/>
<wire x1="92.71" y1="38.735" x2="93.345" y2="39.37" width="0.1524" layer="21"/>
<wire x1="93.345" y1="39.37" x2="92.71" y2="40.005" width="0.1524" layer="21"/>
<wire x1="92.71" y1="40.005" x2="92.71" y2="41.275" width="0.1524" layer="21"/>
<wire x1="92.71" y1="41.275" x2="93.345" y2="41.91" width="0.1524" layer="21"/>
<wire x1="93.345" y1="41.91" x2="92.71" y2="42.545" width="0.1524" layer="21"/>
<wire x1="92.71" y1="42.545" x2="92.71" y2="43.815" width="0.1524" layer="21"/>
<wire x1="92.71" y1="43.815" x2="93.345" y2="44.45" width="0.1524" layer="21"/>
<wire x1="93.345" y1="44.45" x2="92.71" y2="45.085" width="0.1524" layer="21"/>
<wire x1="92.71" y1="45.085" x2="92.71" y2="46.355" width="0.1524" layer="21"/>
<wire x1="92.71" y1="46.355" x2="93.345" y2="46.99" width="0.1524" layer="21"/>
<wire x1="93.345" y1="46.99" x2="92.71" y2="47.625" width="0.1524" layer="21"/>
<wire x1="92.71" y1="47.625" x2="92.71" y2="48.895" width="0.1524" layer="21"/>
<wire x1="92.71" y1="48.895" x2="93.345" y2="49.53" width="0.1524" layer="21"/>
<wire x1="97.155" y1="49.53" x2="97.79" y2="48.895" width="0.1524" layer="21"/>
<wire x1="97.155" y1="46.99" x2="97.79" y2="47.625" width="0.1524" layer="21"/>
<wire x1="97.155" y1="46.99" x2="97.79" y2="46.355" width="0.1524" layer="21"/>
<wire x1="97.155" y1="44.45" x2="97.79" y2="45.085" width="0.1524" layer="21"/>
<wire x1="93.345" y1="31.75" x2="97.155" y2="31.75" width="0.1524" layer="21"/>
<wire x1="93.345" y1="34.29" x2="97.155" y2="34.29" width="0.1524" layer="21"/>
<wire x1="93.345" y1="36.83" x2="97.155" y2="36.83" width="0.1524" layer="21"/>
<wire x1="93.345" y1="39.37" x2="97.155" y2="39.37" width="0.1524" layer="21"/>
<wire x1="93.345" y1="41.91" x2="97.155" y2="41.91" width="0.1524" layer="21"/>
<wire x1="93.345" y1="44.45" x2="97.155" y2="44.45" width="0.1524" layer="21"/>
<wire x1="93.345" y1="46.99" x2="97.155" y2="46.99" width="0.1524" layer="21"/>
<wire x1="97.79" y1="47.625" x2="97.79" y2="48.895" width="0.1524" layer="21"/>
<wire x1="97.79" y1="45.085" x2="97.79" y2="46.355" width="0.1524" layer="21"/>
<wire x1="97.79" y1="42.545" x2="97.79" y2="43.815" width="0.1524" layer="21"/>
<wire x1="97.79" y1="40.005" x2="97.79" y2="41.275" width="0.1524" layer="21"/>
<wire x1="97.79" y1="37.465" x2="97.79" y2="38.735" width="0.1524" layer="21"/>
<wire x1="97.79" y1="34.925" x2="97.79" y2="36.195" width="0.1524" layer="21"/>
<wire x1="97.79" y1="32.385" x2="97.79" y2="33.655" width="0.1524" layer="21"/>
<wire x1="97.79" y1="29.845" x2="97.79" y2="31.115" width="0.1524" layer="21"/>
<wire x1="97.155" y1="8.89" x2="97.79" y2="9.525" width="0.1524" layer="21"/>
<wire x1="97.79" y1="10.795" x2="97.155" y2="11.43" width="0.1524" layer="21"/>
<wire x1="97.155" y1="11.43" x2="97.79" y2="12.065" width="0.1524" layer="21"/>
<wire x1="97.79" y1="13.335" x2="97.155" y2="13.97" width="0.1524" layer="21"/>
<wire x1="97.155" y1="13.97" x2="97.79" y2="14.605" width="0.1524" layer="21"/>
<wire x1="97.79" y1="15.875" x2="97.155" y2="16.51" width="0.1524" layer="21"/>
<wire x1="97.155" y1="16.51" x2="97.79" y2="17.145" width="0.1524" layer="21"/>
<wire x1="97.79" y1="18.415" x2="97.155" y2="19.05" width="0.1524" layer="21"/>
<wire x1="97.155" y1="19.05" x2="97.79" y2="19.685" width="0.1524" layer="21"/>
<wire x1="97.79" y1="20.955" x2="97.155" y2="21.59" width="0.1524" layer="21"/>
<wire x1="97.155" y1="21.59" x2="97.79" y2="22.225" width="0.1524" layer="21"/>
<wire x1="97.79" y1="23.495" x2="97.155" y2="24.13" width="0.1524" layer="21"/>
<wire x1="93.345" y1="8.89" x2="92.71" y2="9.525" width="0.1524" layer="21"/>
<wire x1="92.71" y1="9.525" x2="92.71" y2="10.795" width="0.1524" layer="21"/>
<wire x1="92.71" y1="10.795" x2="93.345" y2="11.43" width="0.1524" layer="21"/>
<wire x1="93.345" y1="11.43" x2="92.71" y2="12.065" width="0.1524" layer="21"/>
<wire x1="92.71" y1="12.065" x2="92.71" y2="13.335" width="0.1524" layer="21"/>
<wire x1="92.71" y1="13.335" x2="93.345" y2="13.97" width="0.1524" layer="21"/>
<wire x1="93.345" y1="13.97" x2="92.71" y2="14.605" width="0.1524" layer="21"/>
<wire x1="92.71" y1="14.605" x2="92.71" y2="15.875" width="0.1524" layer="21"/>
<wire x1="92.71" y1="15.875" x2="93.345" y2="16.51" width="0.1524" layer="21"/>
<wire x1="93.345" y1="16.51" x2="92.71" y2="17.145" width="0.1524" layer="21"/>
<wire x1="92.71" y1="17.145" x2="92.71" y2="18.415" width="0.1524" layer="21"/>
<wire x1="92.71" y1="18.415" x2="93.345" y2="19.05" width="0.1524" layer="21"/>
<wire x1="93.345" y1="19.05" x2="92.71" y2="19.685" width="0.1524" layer="21"/>
<wire x1="92.71" y1="19.685" x2="92.71" y2="20.955" width="0.1524" layer="21"/>
<wire x1="92.71" y1="20.955" x2="93.345" y2="21.59" width="0.1524" layer="21"/>
<wire x1="93.345" y1="21.59" x2="92.71" y2="22.225" width="0.1524" layer="21"/>
<wire x1="92.71" y1="22.225" x2="92.71" y2="23.495" width="0.1524" layer="21"/>
<wire x1="92.71" y1="23.495" x2="93.345" y2="24.13" width="0.1524" layer="21"/>
<wire x1="93.345" y1="24.13" x2="92.71" y2="24.765" width="0.1524" layer="21"/>
<wire x1="92.71" y1="24.765" x2="92.71" y2="26.035" width="0.1524" layer="21"/>
<wire x1="92.71" y1="26.035" x2="93.345" y2="26.67" width="0.1524" layer="21"/>
<wire x1="93.345" y1="26.67" x2="92.71" y2="27.305" width="0.1524" layer="21"/>
<wire x1="92.71" y1="27.305" x2="92.71" y2="28.575" width="0.1524" layer="21"/>
<wire x1="92.71" y1="28.575" x2="93.345" y2="29.21" width="0.1524" layer="21"/>
<wire x1="97.155" y1="29.21" x2="97.79" y2="28.575" width="0.1524" layer="21"/>
<wire x1="97.155" y1="26.67" x2="97.79" y2="27.305" width="0.1524" layer="21"/>
<wire x1="97.155" y1="26.67" x2="97.79" y2="26.035" width="0.1524" layer="21"/>
<wire x1="97.155" y1="24.13" x2="97.79" y2="24.765" width="0.1524" layer="21"/>
<wire x1="93.345" y1="11.43" x2="97.155" y2="11.43" width="0.1524" layer="21"/>
<wire x1="93.345" y1="13.97" x2="97.155" y2="13.97" width="0.1524" layer="21"/>
<wire x1="93.345" y1="16.51" x2="97.155" y2="16.51" width="0.1524" layer="21"/>
<wire x1="93.345" y1="19.05" x2="97.155" y2="19.05" width="0.1524" layer="21"/>
<wire x1="93.345" y1="21.59" x2="97.155" y2="21.59" width="0.1524" layer="21"/>
<wire x1="93.345" y1="24.13" x2="97.155" y2="24.13" width="0.1524" layer="21"/>
<wire x1="93.345" y1="26.67" x2="97.155" y2="26.67" width="0.1524" layer="21"/>
<wire x1="93.345" y1="29.21" x2="97.155" y2="29.21" width="0.1524" layer="21"/>
<wire x1="97.79" y1="27.305" x2="97.79" y2="28.575" width="0.1524" layer="21"/>
<wire x1="97.79" y1="24.765" x2="97.79" y2="26.035" width="0.1524" layer="21"/>
<wire x1="97.79" y1="22.225" x2="97.79" y2="23.495" width="0.1524" layer="21"/>
<wire x1="97.79" y1="19.685" x2="97.79" y2="20.955" width="0.1524" layer="21"/>
<wire x1="97.79" y1="17.145" x2="97.79" y2="18.415" width="0.1524" layer="21"/>
<wire x1="97.79" y1="14.605" x2="97.79" y2="15.875" width="0.1524" layer="21"/>
<wire x1="97.79" y1="12.065" x2="97.79" y2="13.335" width="0.1524" layer="21"/>
<wire x1="97.79" y1="9.525" x2="97.79" y2="10.795" width="0.1524" layer="21"/>
<wire x1="97.155" y1="8.89" x2="97.79" y2="8.255" width="0.2032" layer="21"/>
<wire x1="97.79" y1="6.985" x2="97.155" y2="6.35" width="0.2032" layer="21"/>
<wire x1="92.71" y1="8.255" x2="92.71" y2="6.985" width="0.2032" layer="21"/>
<wire x1="93.345" y1="8.89" x2="92.71" y2="8.255" width="0.2032" layer="21"/>
<wire x1="92.71" y1="6.985" x2="93.345" y2="6.35" width="0.2032" layer="21"/>
<wire x1="97.79" y1="8.255" x2="97.79" y2="6.985" width="0.2032" layer="21"/>
<wire x1="93.345" y1="8.89" x2="97.155" y2="8.89" width="0.2032" layer="21"/>
<wire x1="97.155" y1="6.35" x2="93.345" y2="6.35" width="0.2032" layer="21"/>
<wire x1="97.155" y1="52.07" x2="97.79" y2="51.435" width="0.2032" layer="21"/>
<wire x1="97.79" y1="50.165" x2="97.155" y2="49.53" width="0.2032" layer="21"/>
<wire x1="92.71" y1="51.435" x2="92.71" y2="50.165" width="0.2032" layer="21"/>
<wire x1="93.345" y1="52.07" x2="92.71" y2="51.435" width="0.2032" layer="21"/>
<wire x1="92.71" y1="50.165" x2="93.345" y2="49.53" width="0.2032" layer="21"/>
<wire x1="97.79" y1="51.435" x2="97.79" y2="50.165" width="0.2032" layer="21"/>
<wire x1="93.345" y1="52.07" x2="97.155" y2="52.07" width="0.2032" layer="21"/>
<wire x1="97.155" y1="49.53" x2="93.345" y2="49.53" width="0.2032" layer="21"/>
<wire x1="59.436" y1="43.053" x2="28.067" y2="43.053" width="0.3048" layer="21"/>
<wire x1="59.944" y1="39.751" x2="85.471" y2="39.751" width="0.3048" layer="21"/>
<wire x1="86.2584" y1="39.5478" x2="86.2584" y2="11.43" width="0.3048" layer="21"/>
<wire x1="88.2904" y1="41.5798" x2="88.2904" y2="48.641" width="0.3048" layer="21"/>
<wire x1="93.98" y1="52.1462" x2="93.98" y2="52.7812" width="0.3048" layer="21"/>
<wire x1="93.98" y1="52.7812" x2="96.52" y2="52.7812" width="0.3048" layer="21"/>
<wire x1="96.52" y1="52.7812" x2="96.52" y2="52.1208" width="0.3048" layer="21"/>
<wire x1="93.98" y1="6.2738" x2="93.98" y2="5.5372" width="0.3048" layer="21"/>
<wire x1="93.98" y1="5.5372" x2="96.52" y2="5.5372" width="0.3048" layer="21"/>
<wire x1="96.52" y1="5.5372" x2="96.52" y2="6.2992" width="0.3048" layer="21"/>
<wire x1="86.233" y1="10.5664" x2="49.911" y2="10.5664" width="0.3048" layer="21"/>
<wire x1="86.233" y1="10.5664" x2="87.9348" y2="8.8646" width="0.3048" layer="21"/>
<wire x1="87.9348" y1="8.8646" x2="100.8126" y2="8.8646" width="0.3048" layer="21"/>
<wire x1="86.2584" y1="39.5478" x2="88.2904" y2="41.5798" width="0.3048" layer="21"/>
<wire x1="97.79" y1="6.35" x2="100.7872" y2="6.35" width="0.3048" layer="21"/>
<wire x1="60.833" y1="45.72" x2="60.833" y2="46.99" width="0.2032" layer="21"/>
<wire x1="60.325" y1="46.482" x2="60.833" y2="46.99" width="0.2032" layer="21"/>
<wire x1="60.833" y1="46.99" x2="61.341" y2="46.482" width="0.2032" layer="21"/>
<wire x1="63.373" y1="46.99" x2="63.373" y2="45.72" width="0.2032" layer="21"/>
<wire x1="63.881" y1="46.228" x2="63.373" y2="45.72" width="0.2032" layer="21"/>
<wire x1="63.373" y1="45.72" x2="62.865" y2="46.228" width="0.2032" layer="21"/>
<wire x1="46.609" y1="10.5664" x2="32.131" y2="10.5664" width="0.3048" layer="21"/>
<wire x1="44.45" y1="3.175" x2="45.085" y2="3.81" width="0.2032" layer="21"/>
<wire x1="45.085" y1="3.81" x2="46.355" y2="3.81" width="0.2032" layer="21"/>
<wire x1="46.355" y1="3.81" x2="46.99" y2="3.175" width="0.2032" layer="21"/>
<wire x1="46.99" y1="1.905" x2="46.355" y2="1.27" width="0.2032" layer="21"/>
<wire x1="46.355" y1="1.27" x2="45.085" y2="1.27" width="0.2032" layer="21"/>
<wire x1="45.085" y1="1.27" x2="44.45" y2="1.905" width="0.2032" layer="21"/>
<wire x1="40.005" y1="3.81" x2="41.275" y2="3.81" width="0.2032" layer="21"/>
<wire x1="41.275" y1="3.81" x2="41.91" y2="3.175" width="0.2032" layer="21"/>
<wire x1="41.91" y1="1.905" x2="41.275" y2="1.27" width="0.2032" layer="21"/>
<wire x1="41.91" y1="3.175" x2="42.545" y2="3.81" width="0.2032" layer="21"/>
<wire x1="42.545" y1="3.81" x2="43.815" y2="3.81" width="0.2032" layer="21"/>
<wire x1="43.815" y1="3.81" x2="44.45" y2="3.175" width="0.2032" layer="21"/>
<wire x1="44.45" y1="1.905" x2="43.815" y2="1.27" width="0.2032" layer="21"/>
<wire x1="43.815" y1="1.27" x2="42.545" y2="1.27" width="0.2032" layer="21"/>
<wire x1="42.545" y1="1.27" x2="41.91" y2="1.905" width="0.2032" layer="21"/>
<wire x1="36.83" y1="3.175" x2="37.465" y2="3.81" width="0.2032" layer="21"/>
<wire x1="37.465" y1="3.81" x2="38.735" y2="3.81" width="0.2032" layer="21"/>
<wire x1="38.735" y1="3.81" x2="39.37" y2="3.175" width="0.2032" layer="21"/>
<wire x1="39.37" y1="1.905" x2="38.735" y2="1.27" width="0.2032" layer="21"/>
<wire x1="38.735" y1="1.27" x2="37.465" y2="1.27" width="0.2032" layer="21"/>
<wire x1="37.465" y1="1.27" x2="36.83" y2="1.905" width="0.2032" layer="21"/>
<wire x1="40.005" y1="3.81" x2="39.37" y2="3.175" width="0.2032" layer="21"/>
<wire x1="39.37" y1="1.905" x2="40.005" y2="1.27" width="0.2032" layer="21"/>
<wire x1="41.275" y1="1.27" x2="40.005" y2="1.27" width="0.2032" layer="21"/>
<wire x1="32.385" y1="3.81" x2="33.655" y2="3.81" width="0.2032" layer="21"/>
<wire x1="33.655" y1="3.81" x2="34.29" y2="3.175" width="0.2032" layer="21"/>
<wire x1="34.29" y1="1.905" x2="33.655" y2="1.27" width="0.2032" layer="21"/>
<wire x1="34.29" y1="3.175" x2="34.925" y2="3.81" width="0.2032" layer="21"/>
<wire x1="34.925" y1="3.81" x2="36.195" y2="3.81" width="0.2032" layer="21"/>
<wire x1="36.195" y1="3.81" x2="36.83" y2="3.175" width="0.2032" layer="21"/>
<wire x1="36.83" y1="1.905" x2="36.195" y2="1.27" width="0.2032" layer="21"/>
<wire x1="36.195" y1="1.27" x2="34.925" y2="1.27" width="0.2032" layer="21"/>
<wire x1="34.925" y1="1.27" x2="34.29" y2="1.905" width="0.2032" layer="21"/>
<wire x1="31.75" y1="3.175" x2="31.75" y2="1.905" width="0.2032" layer="21"/>
<wire x1="32.385" y1="3.81" x2="31.75" y2="3.175" width="0.2032" layer="21"/>
<wire x1="31.75" y1="1.905" x2="32.385" y2="1.27" width="0.2032" layer="21"/>
<wire x1="33.655" y1="1.27" x2="32.385" y2="1.27" width="0.2032" layer="21"/>
<wire x1="46.99" y1="3.175" x2="46.99" y2="1.905" width="0.2032" layer="21"/>
<wire x1="93.218" y1="52.7812" x2="93.98" y2="52.7812" width="0.3048" layer="21"/>
<pad name="A9" x="76.2" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A10" x="78.74" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A11" x="81.28" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A12" x="83.82" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A13" x="86.36" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A14" x="88.9" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A15" x="91.44" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A8" x="73.66" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="15" x="71.12" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="16" x="73.66" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="17" x="76.2" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="18" x="78.74" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="19" x="81.28" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="20" x="83.82" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="21" x="86.36" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="14" x="68.58" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="53.34" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="55.88" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="58.42" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="60.96" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="63.5" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A6" x="66.04" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A7" x="68.58" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="6" x="48.26" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5" x="50.8" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="4" x="53.34" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="55.88" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="58.42" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="1" x="60.96" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="0" x="63.5" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="7" x="45.72" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@4" x="26.416" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="13" x="28.956" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="12" x="31.496" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="11" x="34.036" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="10" x="36.576" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="9" x="39.116" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="8" x="41.656" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="23.876" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="37" x="96.52" y="30.48" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="36" x="93.98" y="30.48" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="35" x="96.52" y="33.02" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="34" x="93.98" y="33.02" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="33" x="96.52" y="35.56" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="32" x="93.98" y="35.56" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="31" x="96.52" y="38.1" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="30" x="93.98" y="38.1" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="29" x="96.52" y="40.64" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="28" x="93.98" y="40.64" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="27" x="96.52" y="43.18" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="26" x="93.98" y="43.18" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="25" x="96.52" y="45.72" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="24" x="93.98" y="45.72" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="23" x="96.52" y="48.26" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="22" x="93.98" y="48.26" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="53" x="96.52" y="10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="52" x="93.98" y="10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="51" x="96.52" y="12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="50" x="93.98" y="12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="49" x="96.52" y="15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="48" x="93.98" y="15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="47" x="96.52" y="17.78" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="46" x="93.98" y="17.78" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="45" x="96.52" y="20.32" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="44" x="93.98" y="20.32" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="43" x="96.52" y="22.86" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="42" x="93.98" y="22.86" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="41" x="96.52" y="25.4" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="40" x="93.98" y="25.4" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="39" x="96.52" y="27.94" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="38" x="93.98" y="27.94" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="GND@2" x="93.98" y="7.62" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@3" x="96.52" y="7.62" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V@1" x="93.98" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V@2" x="96.52" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RESET" x="33.02" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="35.56" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V@0" x="38.1" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="40.64" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="43.18" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="45.72" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="63.881" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">0</text>
<text x="61.341" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">1</text>
<text x="58.801" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">2</text>
<text x="56.261" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">3</text>
<text x="53.721" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">4</text>
<text x="51.181" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">5</text>
<text x="48.641" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">6</text>
<text x="46.101" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">7</text>
<text x="42.291" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">8</text>
<text x="39.751" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">9</text>
<text x="37.211" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">10</text>
<text x="34.671" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">11</text>
<text x="32.131" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">12</text>
<text x="29.591" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">13</text>
<text x="68.961" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">14</text>
<text x="71.501" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">15</text>
<text x="74.041" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">16</text>
<text x="76.581" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">17</text>
<text x="79.121" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">18</text>
<text x="81.661" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">19</text>
<text x="84.201" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">20</text>
<text x="86.741" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">21</text>
<text x="89.6874" y="47.498" size="1.4224" layer="21" font="vector" ratio="15">22</text>
<text x="89.6874" y="44.958" size="1.4224" layer="21" font="vector" ratio="15">24</text>
<text x="89.6874" y="42.418" size="1.4224" layer="21" font="vector" ratio="15">26</text>
<text x="89.6874" y="39.878" size="1.4224" layer="21" font="vector" ratio="15">28</text>
<text x="89.6874" y="37.338" size="1.4224" layer="21" font="vector" ratio="15">30</text>
<text x="89.6874" y="34.798" size="1.4224" layer="21" font="vector" ratio="15">32</text>
<text x="89.6874" y="32.258" size="1.4224" layer="21" font="vector" ratio="15">34</text>
<text x="89.6874" y="29.718" size="1.4224" layer="21" font="vector" ratio="15">36</text>
<text x="89.6874" y="27.178" size="1.4224" layer="21" font="vector" ratio="15">38</text>
<text x="89.6874" y="24.638" size="1.4224" layer="21" font="vector" ratio="15">40</text>
<text x="89.6874" y="22.098" size="1.4224" layer="21" font="vector" ratio="15">42</text>
<text x="89.6874" y="19.558" size="1.4224" layer="21" font="vector" ratio="15">44</text>
<text x="89.6874" y="17.018" size="1.4224" layer="21" font="vector" ratio="15">46</text>
<text x="89.6874" y="11.938" size="1.4224" layer="21" font="vector" ratio="15">50</text>
<text x="89.6874" y="14.478" size="1.4224" layer="21" font="vector" ratio="15">48</text>
<text x="89.6874" y="9.398" size="1.4224" layer="21" font="vector" ratio="15">52</text>
<text x="98.425" y="37.3634" size="1.4224" layer="21" font="vector" ratio="15">31</text>
<text x="98.425" y="34.8234" size="1.4224" layer="21" font="vector" ratio="15">33</text>
<text x="98.425" y="32.2834" size="1.4224" layer="21" font="vector" ratio="15">35</text>
<text x="98.425" y="29.7434" size="1.4224" layer="21" font="vector" ratio="15">37</text>
<text x="98.425" y="27.2034" size="1.4224" layer="21" font="vector" ratio="15">39</text>
<text x="98.425" y="24.6634" size="1.4224" layer="21" font="vector" ratio="15">41</text>
<text x="98.425" y="22.1234" size="1.4224" layer="21" font="vector" ratio="15">43</text>
<text x="98.425" y="19.5834" size="1.4224" layer="21" font="vector" ratio="15">45</text>
<text x="98.425" y="17.0434" size="1.4224" layer="21" font="vector" ratio="15">47</text>
<text x="98.425" y="14.5034" size="1.4224" layer="21" font="vector" ratio="15">49</text>
<text x="98.425" y="11.9634" size="1.4224" layer="21" font="vector" ratio="15">51</text>
<text x="98.425" y="9.4234" size="1.4224" layer="21" font="vector" ratio="15">53</text>
<text x="51.562" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A0</text>
<text x="53.848" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A1</text>
<text x="56.642" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A2</text>
<text x="59.182" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A3</text>
<text x="61.722" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A4</text>
<text x="64.135" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A5</text>
<text x="66.675" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">6</text>
<text x="69.342" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A7</text>
<text x="74.422" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A8</text>
<text x="76.962" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A9</text>
<text x="79.502" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A10</text>
<text x="82.042" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A11</text>
<text x="84.582" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A12</text>
<text x="87.122" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A13</text>
<text x="89.662" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A14</text>
<text x="92.075" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A15</text>
<text x="51.054" y="8.128" size="1.524" layer="21" font="vector" ratio="15">ANALOG IN</text>
<text x="60.452" y="40.259" size="1.524" layer="21" font="vector" ratio="15">COMMUNICATION</text>
<text x="88.519" y="11.684" size="1.524" layer="21" font="vector" ratio="15" rot="R90">DIGITAL</text>
<text x="98.425" y="6.8834" size="1.016" layer="21" font="vector" ratio="15">GND</text>
<text x="61.341" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX0</text>
<text x="63.881" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX0</text>
<text x="29.21" y="43.815" size="1.524" layer="21" font="vector" ratio="15">PWM</text>
<text x="68.961" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX3</text>
<text x="71.501" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX3</text>
<text x="74.041" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX2</text>
<text x="76.581" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX2</text>
<text x="79.121" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX1</text>
<text x="81.661" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX1</text>
<text x="84.201" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">SDA</text>
<text x="86.741" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">SCL</text>
<text x="39.624" y="8.128" size="1.524" layer="21" font="vector" ratio="15">POWER</text>
<text x="33.528" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RESET</text>
<text x="36.068" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">3.3V</text>
<text x="38.608" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">5V</text>
<text x="41.148" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">GND</text>
<text x="43.688" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">GND</text>
<text x="46.228" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">Vin</text>
<text x="25.654" y="49.022" size="1.4224" layer="21" font="vector" ratio="15" rot="R270">GND</text>
<text x="23.241" y="49.022" size="1.4224" layer="21" font="vector" ratio="15" rot="R270">AREF</text>
<text x="91.44" y="52.07" size="0.889" layer="21" font="vector" ratio="15">5V</text>
<rectangle x1="88.646" y1="2.286" x2="89.154" y2="2.794" layer="51"/>
<rectangle x1="86.106" y1="2.286" x2="86.614" y2="2.794" layer="51"/>
<rectangle x1="83.566" y1="2.286" x2="84.074" y2="2.794" layer="51"/>
<rectangle x1="81.026" y1="2.286" x2="81.534" y2="2.794" layer="51"/>
<rectangle x1="78.486" y1="2.286" x2="78.994" y2="2.794" layer="51"/>
<rectangle x1="75.946" y1="2.286" x2="76.454" y2="2.794" layer="51"/>
<rectangle x1="73.406" y1="2.286" x2="73.914" y2="2.794" layer="51"/>
<rectangle x1="91.186" y1="2.286" x2="91.694" y2="2.794" layer="51"/>
<rectangle x1="83.566" y1="50.546" x2="84.074" y2="51.054" layer="51"/>
<rectangle x1="81.026" y1="50.546" x2="81.534" y2="51.054" layer="51"/>
<rectangle x1="78.486" y1="50.546" x2="78.994" y2="51.054" layer="51"/>
<rectangle x1="75.946" y1="50.546" x2="76.454" y2="51.054" layer="51"/>
<rectangle x1="73.406" y1="50.546" x2="73.914" y2="51.054" layer="51"/>
<rectangle x1="70.866" y1="50.546" x2="71.374" y2="51.054" layer="51"/>
<rectangle x1="68.326" y1="50.546" x2="68.834" y2="51.054" layer="51"/>
<rectangle x1="86.106" y1="50.546" x2="86.614" y2="51.054" layer="51"/>
<rectangle x1="65.786" y1="2.286" x2="66.294" y2="2.794" layer="51"/>
<rectangle x1="63.246" y1="2.286" x2="63.754" y2="2.794" layer="51"/>
<rectangle x1="60.706" y1="2.286" x2="61.214" y2="2.794" layer="51"/>
<rectangle x1="58.166" y1="2.286" x2="58.674" y2="2.794" layer="51"/>
<rectangle x1="55.626" y1="2.286" x2="56.134" y2="2.794" layer="51"/>
<rectangle x1="53.086" y1="2.286" x2="53.594" y2="2.794" layer="51"/>
<rectangle x1="50.546" y1="2.286" x2="51.054" y2="2.794" layer="51"/>
<rectangle x1="68.326" y1="2.286" x2="68.834" y2="2.794" layer="51"/>
<rectangle x1="60.706" y1="50.546" x2="61.214" y2="51.054" layer="51"/>
<rectangle x1="58.166" y1="50.546" x2="58.674" y2="51.054" layer="51"/>
<rectangle x1="55.626" y1="50.546" x2="56.134" y2="51.054" layer="51"/>
<rectangle x1="53.086" y1="50.546" x2="53.594" y2="51.054" layer="51"/>
<rectangle x1="50.546" y1="50.546" x2="51.054" y2="51.054" layer="51"/>
<rectangle x1="48.006" y1="50.546" x2="48.514" y2="51.054" layer="51"/>
<rectangle x1="45.466" y1="50.546" x2="45.974" y2="51.054" layer="51"/>
<rectangle x1="63.246" y1="50.546" x2="63.754" y2="51.054" layer="51"/>
<rectangle x1="38.862" y1="50.546" x2="39.37" y2="51.054" layer="51"/>
<rectangle x1="36.322" y1="50.546" x2="36.83" y2="51.054" layer="51"/>
<rectangle x1="33.782" y1="50.546" x2="34.29" y2="51.054" layer="51"/>
<rectangle x1="31.242" y1="50.546" x2="31.75" y2="51.054" layer="51"/>
<rectangle x1="28.702" y1="50.546" x2="29.21" y2="51.054" layer="51"/>
<rectangle x1="26.162" y1="50.546" x2="26.67" y2="51.054" layer="51"/>
<rectangle x1="23.622" y1="50.546" x2="24.13" y2="51.054" layer="51"/>
<rectangle x1="41.402" y1="50.546" x2="41.91" y2="51.054" layer="51"/>
<rectangle x1="63.373" y1="30.226" x2="63.881" y2="30.734" layer="51" rot="R270"/>
<rectangle x1="65.913" y1="30.226" x2="66.421" y2="30.734" layer="51" rot="R270"/>
<rectangle x1="65.913" y1="27.686" x2="66.421" y2="28.194" layer="51" rot="R270"/>
<rectangle x1="63.373" y1="27.686" x2="63.881" y2="28.194" layer="51" rot="R270"/>
<rectangle x1="65.913" y1="25.146" x2="66.421" y2="25.654" layer="51" rot="R270"/>
<rectangle x1="63.373" y1="25.146" x2="63.881" y2="25.654" layer="51" rot="R270"/>
<rectangle x1="96.266" y1="30.226" x2="96.774" y2="30.734" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="30.226" x2="94.234" y2="30.734" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="32.766" x2="94.234" y2="33.274" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="32.766" x2="96.774" y2="33.274" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="35.306" x2="94.234" y2="35.814" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="35.306" x2="96.774" y2="35.814" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="37.846" x2="94.234" y2="38.354" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="40.386" x2="94.234" y2="40.894" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="42.926" x2="94.234" y2="43.434" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="37.846" x2="96.774" y2="38.354" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="40.386" x2="96.774" y2="40.894" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="42.926" x2="96.774" y2="43.434" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="45.466" x2="94.234" y2="45.974" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="45.466" x2="96.774" y2="45.974" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="48.006" x2="94.234" y2="48.514" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="48.006" x2="96.774" y2="48.514" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="9.906" x2="96.774" y2="10.414" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="9.906" x2="94.234" y2="10.414" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="12.446" x2="94.234" y2="12.954" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="12.446" x2="96.774" y2="12.954" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="14.986" x2="94.234" y2="15.494" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="14.986" x2="96.774" y2="15.494" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="17.526" x2="94.234" y2="18.034" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="20.066" x2="94.234" y2="20.574" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="22.606" x2="94.234" y2="23.114" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="17.526" x2="96.774" y2="18.034" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="20.066" x2="96.774" y2="20.574" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="22.606" x2="96.774" y2="23.114" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="25.146" x2="94.234" y2="25.654" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="25.146" x2="96.774" y2="25.654" layer="51" rot="R90"/>
<rectangle x1="93.726" y1="27.686" x2="94.234" y2="28.194" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="27.686" x2="96.774" y2="28.194" layer="51" rot="R90"/>
<rectangle x1="96.266" y1="7.366" x2="96.774" y2="7.874" layer="51"/>
<rectangle x1="93.726" y1="7.366" x2="94.234" y2="7.874" layer="51"/>
<rectangle x1="96.266" y1="50.546" x2="96.774" y2="51.054" layer="51"/>
<rectangle x1="93.726" y1="50.546" x2="94.234" y2="51.054" layer="51"/>
<rectangle x1="45.466" y1="2.286" x2="45.974" y2="2.794" layer="51"/>
<rectangle x1="42.926" y1="2.286" x2="43.434" y2="2.794" layer="51"/>
<rectangle x1="40.386" y1="2.286" x2="40.894" y2="2.794" layer="51"/>
<rectangle x1="37.846" y1="2.286" x2="38.354" y2="2.794" layer="51"/>
<rectangle x1="35.306" y1="2.286" x2="35.814" y2="2.794" layer="51"/>
<rectangle x1="32.766" y1="2.286" x2="33.274" y2="2.794" layer="51"/>
<hole x="15.24" y="50.8" drill="3.2"/>
<hole x="13.97" y="2.54" drill="3.2"/>
<hole x="66.04" y="35.56" drill="3.2"/>
<hole x="66.04" y="7.62" drill="3.2"/>
<hole x="90.17" y="50.8" drill="3.2"/>
<hole x="96.52" y="2.54" drill="3.2"/>
</package>
<package name="ARDUINO_MEGA-PRO-3.3V">
<description>Arduino Mega Pro footprint</description>
<wire x1="1.27" y1="53.34" x2="85.09" y2="53.34" width="0.2032" layer="20"/>
<wire x1="85.09" y1="53.34" x2="87.63" y2="50.8" width="0.2032" layer="20"/>
<wire x1="87.63" y1="40.64" x2="90.17" y2="38.1" width="0.2032" layer="20"/>
<wire x1="90.17" y1="38.1" x2="90.17" y2="3.81" width="0.2032" layer="20"/>
<wire x1="90.17" y1="3.81" x2="87.63" y2="1.27" width="0.2032" layer="20"/>
<wire x1="87.63" y1="1.27" x2="87.63" y2="0" width="0.2032" layer="20"/>
<wire x1="87.63" y1="0" x2="1.27" y2="0" width="0.2032" layer="20"/>
<wire x1="1.27" y1="0" x2="0" y2="1.27" width="0.2032" layer="20"/>
<wire x1="0" y1="1.27" x2="0" y2="52.07" width="0.2032" layer="20"/>
<wire x1="0" y1="52.07" x2="1.27" y2="53.34" width="0.2032" layer="20"/>
<wire x1="87.63" y1="50.8" x2="87.63" y2="40.64" width="0.2032" layer="20"/>
<wire x1="76.835" y1="3.81" x2="78.105" y2="3.81" width="0.2032" layer="21"/>
<wire x1="78.105" y1="3.81" x2="78.74" y2="3.175" width="0.2032" layer="21"/>
<wire x1="78.74" y1="1.905" x2="78.105" y2="1.27" width="0.2032" layer="21"/>
<wire x1="73.66" y1="3.175" x2="74.295" y2="3.81" width="0.2032" layer="21"/>
<wire x1="74.295" y1="3.81" x2="75.565" y2="3.81" width="0.2032" layer="21"/>
<wire x1="75.565" y1="3.81" x2="76.2" y2="3.175" width="0.2032" layer="21"/>
<wire x1="76.2" y1="1.905" x2="75.565" y2="1.27" width="0.2032" layer="21"/>
<wire x1="75.565" y1="1.27" x2="74.295" y2="1.27" width="0.2032" layer="21"/>
<wire x1="74.295" y1="1.27" x2="73.66" y2="1.905" width="0.2032" layer="21"/>
<wire x1="76.835" y1="3.81" x2="76.2" y2="3.175" width="0.2032" layer="21"/>
<wire x1="76.2" y1="1.905" x2="76.835" y2="1.27" width="0.2032" layer="21"/>
<wire x1="78.105" y1="1.27" x2="76.835" y2="1.27" width="0.2032" layer="21"/>
<wire x1="69.215" y1="3.81" x2="70.485" y2="3.81" width="0.2032" layer="21"/>
<wire x1="70.485" y1="3.81" x2="71.12" y2="3.175" width="0.2032" layer="21"/>
<wire x1="71.12" y1="1.905" x2="70.485" y2="1.27" width="0.2032" layer="21"/>
<wire x1="71.12" y1="3.175" x2="71.755" y2="3.81" width="0.2032" layer="21"/>
<wire x1="71.755" y1="3.81" x2="73.025" y2="3.81" width="0.2032" layer="21"/>
<wire x1="73.025" y1="3.81" x2="73.66" y2="3.175" width="0.2032" layer="21"/>
<wire x1="73.66" y1="1.905" x2="73.025" y2="1.27" width="0.2032" layer="21"/>
<wire x1="73.025" y1="1.27" x2="71.755" y2="1.27" width="0.2032" layer="21"/>
<wire x1="71.755" y1="1.27" x2="71.12" y2="1.905" width="0.2032" layer="21"/>
<wire x1="66.04" y1="3.175" x2="66.675" y2="3.81" width="0.2032" layer="21"/>
<wire x1="66.675" y1="3.81" x2="67.945" y2="3.81" width="0.2032" layer="21"/>
<wire x1="67.945" y1="3.81" x2="68.58" y2="3.175" width="0.2032" layer="21"/>
<wire x1="68.58" y1="1.905" x2="67.945" y2="1.27" width="0.2032" layer="21"/>
<wire x1="67.945" y1="1.27" x2="66.675" y2="1.27" width="0.2032" layer="21"/>
<wire x1="66.675" y1="1.27" x2="66.04" y2="1.905" width="0.2032" layer="21"/>
<wire x1="69.215" y1="3.81" x2="68.58" y2="3.175" width="0.2032" layer="21"/>
<wire x1="68.58" y1="1.905" x2="69.215" y2="1.27" width="0.2032" layer="21"/>
<wire x1="70.485" y1="1.27" x2="69.215" y2="1.27" width="0.2032" layer="21"/>
<wire x1="61.595" y1="3.81" x2="62.865" y2="3.81" width="0.2032" layer="21"/>
<wire x1="62.865" y1="3.81" x2="63.5" y2="3.175" width="0.2032" layer="21"/>
<wire x1="63.5" y1="1.905" x2="62.865" y2="1.27" width="0.2032" layer="21"/>
<wire x1="63.5" y1="3.175" x2="64.135" y2="3.81" width="0.2032" layer="21"/>
<wire x1="64.135" y1="3.81" x2="65.405" y2="3.81" width="0.2032" layer="21"/>
<wire x1="65.405" y1="3.81" x2="66.04" y2="3.175" width="0.2032" layer="21"/>
<wire x1="66.04" y1="1.905" x2="65.405" y2="1.27" width="0.2032" layer="21"/>
<wire x1="65.405" y1="1.27" x2="64.135" y2="1.27" width="0.2032" layer="21"/>
<wire x1="64.135" y1="1.27" x2="63.5" y2="1.905" width="0.2032" layer="21"/>
<wire x1="60.96" y1="3.175" x2="60.96" y2="1.905" width="0.2032" layer="21"/>
<wire x1="61.595" y1="3.81" x2="60.96" y2="3.175" width="0.2032" layer="21"/>
<wire x1="60.96" y1="1.905" x2="61.595" y2="1.27" width="0.2032" layer="21"/>
<wire x1="62.865" y1="1.27" x2="61.595" y2="1.27" width="0.2032" layer="21"/>
<wire x1="79.375" y1="3.81" x2="80.645" y2="3.81" width="0.2032" layer="21"/>
<wire x1="80.645" y1="3.81" x2="81.28" y2="3.175" width="0.2032" layer="21"/>
<wire x1="81.28" y1="3.175" x2="81.28" y2="1.905" width="0.2032" layer="21"/>
<wire x1="81.28" y1="1.905" x2="80.645" y2="1.27" width="0.2032" layer="21"/>
<wire x1="79.375" y1="3.81" x2="78.74" y2="3.175" width="0.2032" layer="21"/>
<wire x1="78.74" y1="1.905" x2="79.375" y2="1.27" width="0.2032" layer="21"/>
<wire x1="80.645" y1="1.27" x2="79.375" y2="1.27" width="0.2032" layer="21"/>
<wire x1="71.755" y1="52.07" x2="73.025" y2="52.07" width="0.2032" layer="21"/>
<wire x1="73.025" y1="52.07" x2="73.66" y2="51.435" width="0.2032" layer="21"/>
<wire x1="73.66" y1="50.165" x2="73.025" y2="49.53" width="0.2032" layer="21"/>
<wire x1="68.58" y1="51.435" x2="69.215" y2="52.07" width="0.2032" layer="21"/>
<wire x1="69.215" y1="52.07" x2="70.485" y2="52.07" width="0.2032" layer="21"/>
<wire x1="70.485" y1="52.07" x2="71.12" y2="51.435" width="0.2032" layer="21"/>
<wire x1="71.12" y1="50.165" x2="70.485" y2="49.53" width="0.2032" layer="21"/>
<wire x1="70.485" y1="49.53" x2="69.215" y2="49.53" width="0.2032" layer="21"/>
<wire x1="69.215" y1="49.53" x2="68.58" y2="50.165" width="0.2032" layer="21"/>
<wire x1="71.755" y1="52.07" x2="71.12" y2="51.435" width="0.2032" layer="21"/>
<wire x1="71.12" y1="50.165" x2="71.755" y2="49.53" width="0.2032" layer="21"/>
<wire x1="73.025" y1="49.53" x2="71.755" y2="49.53" width="0.2032" layer="21"/>
<wire x1="64.135" y1="52.07" x2="65.405" y2="52.07" width="0.2032" layer="21"/>
<wire x1="65.405" y1="52.07" x2="66.04" y2="51.435" width="0.2032" layer="21"/>
<wire x1="66.04" y1="50.165" x2="65.405" y2="49.53" width="0.2032" layer="21"/>
<wire x1="66.04" y1="51.435" x2="66.675" y2="52.07" width="0.2032" layer="21"/>
<wire x1="66.675" y1="52.07" x2="67.945" y2="52.07" width="0.2032" layer="21"/>
<wire x1="67.945" y1="52.07" x2="68.58" y2="51.435" width="0.2032" layer="21"/>
<wire x1="68.58" y1="50.165" x2="67.945" y2="49.53" width="0.2032" layer="21"/>
<wire x1="67.945" y1="49.53" x2="66.675" y2="49.53" width="0.2032" layer="21"/>
<wire x1="66.675" y1="49.53" x2="66.04" y2="50.165" width="0.2032" layer="21"/>
<wire x1="60.96" y1="51.435" x2="61.595" y2="52.07" width="0.2032" layer="21"/>
<wire x1="61.595" y1="52.07" x2="62.865" y2="52.07" width="0.2032" layer="21"/>
<wire x1="62.865" y1="52.07" x2="63.5" y2="51.435" width="0.2032" layer="21"/>
<wire x1="63.5" y1="50.165" x2="62.865" y2="49.53" width="0.2032" layer="21"/>
<wire x1="62.865" y1="49.53" x2="61.595" y2="49.53" width="0.2032" layer="21"/>
<wire x1="61.595" y1="49.53" x2="60.96" y2="50.165" width="0.2032" layer="21"/>
<wire x1="64.135" y1="52.07" x2="63.5" y2="51.435" width="0.2032" layer="21"/>
<wire x1="63.5" y1="50.165" x2="64.135" y2="49.53" width="0.2032" layer="21"/>
<wire x1="65.405" y1="49.53" x2="64.135" y2="49.53" width="0.2032" layer="21"/>
<wire x1="56.515" y1="52.07" x2="57.785" y2="52.07" width="0.2032" layer="21"/>
<wire x1="57.785" y1="52.07" x2="58.42" y2="51.435" width="0.2032" layer="21"/>
<wire x1="58.42" y1="50.165" x2="57.785" y2="49.53" width="0.2032" layer="21"/>
<wire x1="58.42" y1="51.435" x2="59.055" y2="52.07" width="0.2032" layer="21"/>
<wire x1="59.055" y1="52.07" x2="60.325" y2="52.07" width="0.2032" layer="21"/>
<wire x1="60.325" y1="52.07" x2="60.96" y2="51.435" width="0.2032" layer="21"/>
<wire x1="60.96" y1="50.165" x2="60.325" y2="49.53" width="0.2032" layer="21"/>
<wire x1="60.325" y1="49.53" x2="59.055" y2="49.53" width="0.2032" layer="21"/>
<wire x1="59.055" y1="49.53" x2="58.42" y2="50.165" width="0.2032" layer="21"/>
<wire x1="55.88" y1="51.435" x2="55.88" y2="50.165" width="0.2032" layer="21"/>
<wire x1="56.515" y1="52.07" x2="55.88" y2="51.435" width="0.2032" layer="21"/>
<wire x1="55.88" y1="50.165" x2="56.515" y2="49.53" width="0.2032" layer="21"/>
<wire x1="57.785" y1="49.53" x2="56.515" y2="49.53" width="0.2032" layer="21"/>
<wire x1="74.295" y1="52.07" x2="75.565" y2="52.07" width="0.2032" layer="21"/>
<wire x1="75.565" y1="52.07" x2="76.2" y2="51.435" width="0.2032" layer="21"/>
<wire x1="76.2" y1="51.435" x2="76.2" y2="50.165" width="0.2032" layer="21"/>
<wire x1="76.2" y1="50.165" x2="75.565" y2="49.53" width="0.2032" layer="21"/>
<wire x1="74.295" y1="52.07" x2="73.66" y2="51.435" width="0.2032" layer="21"/>
<wire x1="73.66" y1="50.165" x2="74.295" y2="49.53" width="0.2032" layer="21"/>
<wire x1="75.565" y1="49.53" x2="74.295" y2="49.53" width="0.2032" layer="21"/>
<wire x1="53.975" y1="3.81" x2="55.245" y2="3.81" width="0.2032" layer="21"/>
<wire x1="55.245" y1="3.81" x2="55.88" y2="3.175" width="0.2032" layer="21"/>
<wire x1="55.88" y1="1.905" x2="55.245" y2="1.27" width="0.2032" layer="21"/>
<wire x1="50.8" y1="3.175" x2="51.435" y2="3.81" width="0.2032" layer="21"/>
<wire x1="51.435" y1="3.81" x2="52.705" y2="3.81" width="0.2032" layer="21"/>
<wire x1="52.705" y1="3.81" x2="53.34" y2="3.175" width="0.2032" layer="21"/>
<wire x1="53.34" y1="1.905" x2="52.705" y2="1.27" width="0.2032" layer="21"/>
<wire x1="52.705" y1="1.27" x2="51.435" y2="1.27" width="0.2032" layer="21"/>
<wire x1="51.435" y1="1.27" x2="50.8" y2="1.905" width="0.2032" layer="21"/>
<wire x1="53.975" y1="3.81" x2="53.34" y2="3.175" width="0.2032" layer="21"/>
<wire x1="53.34" y1="1.905" x2="53.975" y2="1.27" width="0.2032" layer="21"/>
<wire x1="55.245" y1="1.27" x2="53.975" y2="1.27" width="0.2032" layer="21"/>
<wire x1="46.355" y1="3.81" x2="47.625" y2="3.81" width="0.2032" layer="21"/>
<wire x1="47.625" y1="3.81" x2="48.26" y2="3.175" width="0.2032" layer="21"/>
<wire x1="48.26" y1="1.905" x2="47.625" y2="1.27" width="0.2032" layer="21"/>
<wire x1="48.26" y1="3.175" x2="48.895" y2="3.81" width="0.2032" layer="21"/>
<wire x1="48.895" y1="3.81" x2="50.165" y2="3.81" width="0.2032" layer="21"/>
<wire x1="50.165" y1="3.81" x2="50.8" y2="3.175" width="0.2032" layer="21"/>
<wire x1="50.8" y1="1.905" x2="50.165" y2="1.27" width="0.2032" layer="21"/>
<wire x1="50.165" y1="1.27" x2="48.895" y2="1.27" width="0.2032" layer="21"/>
<wire x1="48.895" y1="1.27" x2="48.26" y2="1.905" width="0.2032" layer="21"/>
<wire x1="43.18" y1="3.175" x2="43.815" y2="3.81" width="0.2032" layer="21"/>
<wire x1="43.815" y1="3.81" x2="45.085" y2="3.81" width="0.2032" layer="21"/>
<wire x1="45.085" y1="3.81" x2="45.72" y2="3.175" width="0.2032" layer="21"/>
<wire x1="45.72" y1="1.905" x2="45.085" y2="1.27" width="0.2032" layer="21"/>
<wire x1="45.085" y1="1.27" x2="43.815" y2="1.27" width="0.2032" layer="21"/>
<wire x1="43.815" y1="1.27" x2="43.18" y2="1.905" width="0.2032" layer="21"/>
<wire x1="46.355" y1="3.81" x2="45.72" y2="3.175" width="0.2032" layer="21"/>
<wire x1="45.72" y1="1.905" x2="46.355" y2="1.27" width="0.2032" layer="21"/>
<wire x1="47.625" y1="1.27" x2="46.355" y2="1.27" width="0.2032" layer="21"/>
<wire x1="38.735" y1="3.81" x2="40.005" y2="3.81" width="0.2032" layer="21"/>
<wire x1="40.005" y1="3.81" x2="40.64" y2="3.175" width="0.2032" layer="21"/>
<wire x1="40.64" y1="1.905" x2="40.005" y2="1.27" width="0.2032" layer="21"/>
<wire x1="40.64" y1="3.175" x2="41.275" y2="3.81" width="0.2032" layer="21"/>
<wire x1="41.275" y1="3.81" x2="42.545" y2="3.81" width="0.2032" layer="21"/>
<wire x1="42.545" y1="3.81" x2="43.18" y2="3.175" width="0.2032" layer="21"/>
<wire x1="43.18" y1="1.905" x2="42.545" y2="1.27" width="0.2032" layer="21"/>
<wire x1="42.545" y1="1.27" x2="41.275" y2="1.27" width="0.2032" layer="21"/>
<wire x1="41.275" y1="1.27" x2="40.64" y2="1.905" width="0.2032" layer="21"/>
<wire x1="38.1" y1="3.175" x2="38.1" y2="1.905" width="0.2032" layer="21"/>
<wire x1="38.735" y1="3.81" x2="38.1" y2="3.175" width="0.2032" layer="21"/>
<wire x1="38.1" y1="1.905" x2="38.735" y2="1.27" width="0.2032" layer="21"/>
<wire x1="40.005" y1="1.27" x2="38.735" y2="1.27" width="0.2032" layer="21"/>
<wire x1="56.515" y1="3.81" x2="57.785" y2="3.81" width="0.2032" layer="21"/>
<wire x1="57.785" y1="3.81" x2="58.42" y2="3.175" width="0.2032" layer="21"/>
<wire x1="58.42" y1="3.175" x2="58.42" y2="1.905" width="0.2032" layer="21"/>
<wire x1="58.42" y1="1.905" x2="57.785" y2="1.27" width="0.2032" layer="21"/>
<wire x1="56.515" y1="3.81" x2="55.88" y2="3.175" width="0.2032" layer="21"/>
<wire x1="55.88" y1="1.905" x2="56.515" y2="1.27" width="0.2032" layer="21"/>
<wire x1="57.785" y1="1.27" x2="56.515" y2="1.27" width="0.2032" layer="21"/>
<wire x1="48.895" y1="52.07" x2="50.165" y2="52.07" width="0.2032" layer="21"/>
<wire x1="50.165" y1="52.07" x2="50.8" y2="51.435" width="0.2032" layer="21"/>
<wire x1="50.8" y1="50.165" x2="50.165" y2="49.53" width="0.2032" layer="21"/>
<wire x1="45.72" y1="51.435" x2="46.355" y2="52.07" width="0.2032" layer="21"/>
<wire x1="46.355" y1="52.07" x2="47.625" y2="52.07" width="0.2032" layer="21"/>
<wire x1="47.625" y1="52.07" x2="48.26" y2="51.435" width="0.2032" layer="21"/>
<wire x1="48.26" y1="50.165" x2="47.625" y2="49.53" width="0.2032" layer="21"/>
<wire x1="47.625" y1="49.53" x2="46.355" y2="49.53" width="0.2032" layer="21"/>
<wire x1="46.355" y1="49.53" x2="45.72" y2="50.165" width="0.2032" layer="21"/>
<wire x1="48.895" y1="52.07" x2="48.26" y2="51.435" width="0.2032" layer="21"/>
<wire x1="48.26" y1="50.165" x2="48.895" y2="49.53" width="0.2032" layer="21"/>
<wire x1="50.165" y1="49.53" x2="48.895" y2="49.53" width="0.2032" layer="21"/>
<wire x1="41.275" y1="52.07" x2="42.545" y2="52.07" width="0.2032" layer="21"/>
<wire x1="42.545" y1="52.07" x2="43.18" y2="51.435" width="0.2032" layer="21"/>
<wire x1="43.18" y1="50.165" x2="42.545" y2="49.53" width="0.2032" layer="21"/>
<wire x1="43.18" y1="51.435" x2="43.815" y2="52.07" width="0.2032" layer="21"/>
<wire x1="43.815" y1="52.07" x2="45.085" y2="52.07" width="0.2032" layer="21"/>
<wire x1="45.085" y1="52.07" x2="45.72" y2="51.435" width="0.2032" layer="21"/>
<wire x1="45.72" y1="50.165" x2="45.085" y2="49.53" width="0.2032" layer="21"/>
<wire x1="45.085" y1="49.53" x2="43.815" y2="49.53" width="0.2032" layer="21"/>
<wire x1="43.815" y1="49.53" x2="43.18" y2="50.165" width="0.2032" layer="21"/>
<wire x1="38.1" y1="51.435" x2="38.735" y2="52.07" width="0.2032" layer="21"/>
<wire x1="38.735" y1="52.07" x2="40.005" y2="52.07" width="0.2032" layer="21"/>
<wire x1="40.005" y1="52.07" x2="40.64" y2="51.435" width="0.2032" layer="21"/>
<wire x1="40.64" y1="50.165" x2="40.005" y2="49.53" width="0.2032" layer="21"/>
<wire x1="40.005" y1="49.53" x2="38.735" y2="49.53" width="0.2032" layer="21"/>
<wire x1="38.735" y1="49.53" x2="38.1" y2="50.165" width="0.2032" layer="21"/>
<wire x1="41.275" y1="52.07" x2="40.64" y2="51.435" width="0.2032" layer="21"/>
<wire x1="40.64" y1="50.165" x2="41.275" y2="49.53" width="0.2032" layer="21"/>
<wire x1="42.545" y1="49.53" x2="41.275" y2="49.53" width="0.2032" layer="21"/>
<wire x1="33.655" y1="52.07" x2="34.925" y2="52.07" width="0.2032" layer="21"/>
<wire x1="34.925" y1="52.07" x2="35.56" y2="51.435" width="0.2032" layer="21"/>
<wire x1="35.56" y1="50.165" x2="34.925" y2="49.53" width="0.2032" layer="21"/>
<wire x1="35.56" y1="51.435" x2="36.195" y2="52.07" width="0.2032" layer="21"/>
<wire x1="36.195" y1="52.07" x2="37.465" y2="52.07" width="0.2032" layer="21"/>
<wire x1="37.465" y1="52.07" x2="38.1" y2="51.435" width="0.2032" layer="21"/>
<wire x1="38.1" y1="50.165" x2="37.465" y2="49.53" width="0.2032" layer="21"/>
<wire x1="37.465" y1="49.53" x2="36.195" y2="49.53" width="0.2032" layer="21"/>
<wire x1="36.195" y1="49.53" x2="35.56" y2="50.165" width="0.2032" layer="21"/>
<wire x1="33.02" y1="51.435" x2="33.02" y2="50.165" width="0.2032" layer="21"/>
<wire x1="33.655" y1="52.07" x2="33.02" y2="51.435" width="0.2032" layer="21"/>
<wire x1="33.02" y1="50.165" x2="33.655" y2="49.53" width="0.2032" layer="21"/>
<wire x1="34.925" y1="49.53" x2="33.655" y2="49.53" width="0.2032" layer="21"/>
<wire x1="51.435" y1="52.07" x2="52.705" y2="52.07" width="0.2032" layer="21"/>
<wire x1="52.705" y1="52.07" x2="53.34" y2="51.435" width="0.2032" layer="21"/>
<wire x1="53.34" y1="51.435" x2="53.34" y2="50.165" width="0.2032" layer="21"/>
<wire x1="53.34" y1="50.165" x2="52.705" y2="49.53" width="0.2032" layer="21"/>
<wire x1="51.435" y1="52.07" x2="50.8" y2="51.435" width="0.2032" layer="21"/>
<wire x1="50.8" y1="50.165" x2="51.435" y2="49.53" width="0.2032" layer="21"/>
<wire x1="52.705" y1="49.53" x2="51.435" y2="49.53" width="0.2032" layer="21"/>
<wire x1="27.051" y1="52.07" x2="28.321" y2="52.07" width="0.2032" layer="21"/>
<wire x1="28.321" y1="52.07" x2="28.956" y2="51.435" width="0.2032" layer="21"/>
<wire x1="28.956" y1="50.165" x2="28.321" y2="49.53" width="0.2032" layer="21"/>
<wire x1="23.876" y1="51.435" x2="24.511" y2="52.07" width="0.2032" layer="21"/>
<wire x1="24.511" y1="52.07" x2="25.781" y2="52.07" width="0.2032" layer="21"/>
<wire x1="25.781" y1="52.07" x2="26.416" y2="51.435" width="0.2032" layer="21"/>
<wire x1="26.416" y1="50.165" x2="25.781" y2="49.53" width="0.2032" layer="21"/>
<wire x1="25.781" y1="49.53" x2="24.511" y2="49.53" width="0.2032" layer="21"/>
<wire x1="24.511" y1="49.53" x2="23.876" y2="50.165" width="0.2032" layer="21"/>
<wire x1="27.051" y1="52.07" x2="26.416" y2="51.435" width="0.2032" layer="21"/>
<wire x1="26.416" y1="50.165" x2="27.051" y2="49.53" width="0.2032" layer="21"/>
<wire x1="28.321" y1="49.53" x2="27.051" y2="49.53" width="0.2032" layer="21"/>
<wire x1="19.431" y1="52.07" x2="20.701" y2="52.07" width="0.2032" layer="21"/>
<wire x1="20.701" y1="52.07" x2="21.336" y2="51.435" width="0.2032" layer="21"/>
<wire x1="21.336" y1="50.165" x2="20.701" y2="49.53" width="0.2032" layer="21"/>
<wire x1="21.336" y1="51.435" x2="21.971" y2="52.07" width="0.2032" layer="21"/>
<wire x1="21.971" y1="52.07" x2="23.241" y2="52.07" width="0.2032" layer="21"/>
<wire x1="23.241" y1="52.07" x2="23.876" y2="51.435" width="0.2032" layer="21"/>
<wire x1="23.876" y1="50.165" x2="23.241" y2="49.53" width="0.2032" layer="21"/>
<wire x1="23.241" y1="49.53" x2="21.971" y2="49.53" width="0.2032" layer="21"/>
<wire x1="21.971" y1="49.53" x2="21.336" y2="50.165" width="0.2032" layer="21"/>
<wire x1="16.256" y1="51.435" x2="16.891" y2="52.07" width="0.2032" layer="21"/>
<wire x1="16.891" y1="52.07" x2="18.161" y2="52.07" width="0.2032" layer="21"/>
<wire x1="18.161" y1="52.07" x2="18.796" y2="51.435" width="0.2032" layer="21"/>
<wire x1="18.796" y1="50.165" x2="18.161" y2="49.53" width="0.2032" layer="21"/>
<wire x1="18.161" y1="49.53" x2="16.891" y2="49.53" width="0.2032" layer="21"/>
<wire x1="16.891" y1="49.53" x2="16.256" y2="50.165" width="0.2032" layer="21"/>
<wire x1="19.431" y1="52.07" x2="18.796" y2="51.435" width="0.2032" layer="21"/>
<wire x1="18.796" y1="50.165" x2="19.431" y2="49.53" width="0.2032" layer="21"/>
<wire x1="20.701" y1="49.53" x2="19.431" y2="49.53" width="0.2032" layer="21"/>
<wire x1="11.811" y1="52.07" x2="13.081" y2="52.07" width="0.2032" layer="21"/>
<wire x1="13.081" y1="52.07" x2="13.716" y2="51.435" width="0.2032" layer="21"/>
<wire x1="13.716" y1="50.165" x2="13.081" y2="49.53" width="0.2032" layer="21"/>
<wire x1="13.716" y1="51.435" x2="14.351" y2="52.07" width="0.2032" layer="21"/>
<wire x1="14.351" y1="52.07" x2="15.621" y2="52.07" width="0.2032" layer="21"/>
<wire x1="15.621" y1="52.07" x2="16.256" y2="51.435" width="0.2032" layer="21"/>
<wire x1="16.256" y1="50.165" x2="15.621" y2="49.53" width="0.2032" layer="21"/>
<wire x1="15.621" y1="49.53" x2="14.351" y2="49.53" width="0.2032" layer="21"/>
<wire x1="14.351" y1="49.53" x2="13.716" y2="50.165" width="0.2032" layer="21"/>
<wire x1="11.176" y1="51.435" x2="11.176" y2="50.165" width="0.2032" layer="21"/>
<wire x1="11.811" y1="52.07" x2="11.176" y2="51.435" width="0.2032" layer="21"/>
<wire x1="11.176" y1="50.165" x2="11.811" y2="49.53" width="0.2032" layer="21"/>
<wire x1="13.081" y1="49.53" x2="11.811" y2="49.53" width="0.2032" layer="21"/>
<wire x1="29.591" y1="52.07" x2="30.861" y2="52.07" width="0.2032" layer="21"/>
<wire x1="30.861" y1="52.07" x2="31.496" y2="51.435" width="0.2032" layer="21"/>
<wire x1="31.496" y1="51.435" x2="31.496" y2="50.165" width="0.2032" layer="21"/>
<wire x1="31.496" y1="50.165" x2="30.861" y2="49.53" width="0.2032" layer="21"/>
<wire x1="29.591" y1="52.07" x2="28.956" y2="51.435" width="0.2032" layer="21"/>
<wire x1="28.956" y1="50.165" x2="29.591" y2="49.53" width="0.2032" layer="21"/>
<wire x1="30.861" y1="49.53" x2="29.591" y2="49.53" width="0.2032" layer="21"/>
<wire x1="51.562" y1="31.75" x2="50.927" y2="31.115" width="0.2032" layer="51"/>
<wire x1="50.927" y1="29.845" x2="51.562" y2="29.21" width="0.2032" layer="51"/>
<wire x1="51.562" y1="29.21" x2="50.927" y2="28.575" width="0.2032" layer="51"/>
<wire x1="50.927" y1="27.305" x2="51.562" y2="26.67" width="0.2032" layer="51"/>
<wire x1="51.562" y1="26.67" x2="50.927" y2="26.035" width="0.2032" layer="51"/>
<wire x1="50.927" y1="24.765" x2="51.562" y2="24.13" width="0.2032" layer="51"/>
<wire x1="51.562" y1="31.75" x2="55.372" y2="31.75" width="0.2032" layer="51"/>
<wire x1="55.372" y1="31.75" x2="56.007" y2="31.115" width="0.2032" layer="51"/>
<wire x1="56.007" y1="31.115" x2="56.007" y2="29.845" width="0.2032" layer="51"/>
<wire x1="56.007" y1="29.845" x2="55.372" y2="29.21" width="0.2032" layer="51"/>
<wire x1="55.372" y1="29.21" x2="56.007" y2="28.575" width="0.2032" layer="51"/>
<wire x1="56.007" y1="28.575" x2="56.007" y2="27.305" width="0.2032" layer="51"/>
<wire x1="56.007" y1="27.305" x2="55.372" y2="26.67" width="0.2032" layer="51"/>
<wire x1="55.372" y1="26.67" x2="56.007" y2="26.035" width="0.2032" layer="51"/>
<wire x1="56.007" y1="26.035" x2="56.007" y2="24.765" width="0.2032" layer="51"/>
<wire x1="56.007" y1="24.765" x2="55.372" y2="24.13" width="0.2032" layer="51"/>
<wire x1="55.372" y1="29.21" x2="51.562" y2="29.21" width="0.2032" layer="51"/>
<wire x1="55.372" y1="26.67" x2="51.562" y2="26.67" width="0.2032" layer="51"/>
<wire x1="55.372" y1="24.13" x2="51.562" y2="24.13" width="0.2032" layer="51"/>
<wire x1="50.927" y1="26.035" x2="50.927" y2="24.765" width="0.2032" layer="51"/>
<wire x1="50.927" y1="28.575" x2="50.927" y2="27.305" width="0.2032" layer="51"/>
<wire x1="50.927" y1="31.115" x2="50.927" y2="29.845" width="0.2032" layer="51"/>
<wire x1="50.592" y1="29.845" x2="50.592" y2="31.115" width="0.2032" layer="51"/>
<wire x1="85.725" y1="29.21" x2="86.36" y2="29.845" width="0.1524" layer="21"/>
<wire x1="86.36" y1="31.115" x2="85.725" y2="31.75" width="0.1524" layer="21"/>
<wire x1="85.725" y1="31.75" x2="86.36" y2="32.385" width="0.1524" layer="21"/>
<wire x1="86.36" y1="33.655" x2="85.725" y2="34.29" width="0.1524" layer="21"/>
<wire x1="85.725" y1="34.29" x2="86.36" y2="34.925" width="0.1524" layer="21"/>
<wire x1="86.36" y1="36.195" x2="85.725" y2="36.83" width="0.1524" layer="21"/>
<wire x1="85.725" y1="36.83" x2="86.36" y2="37.465" width="0.1524" layer="21"/>
<wire x1="86.36" y1="38.735" x2="85.725" y2="39.37" width="0.1524" layer="21"/>
<wire x1="85.725" y1="39.37" x2="86.36" y2="40.005" width="0.1524" layer="21"/>
<wire x1="86.36" y1="41.275" x2="85.725" y2="41.91" width="0.1524" layer="21"/>
<wire x1="85.725" y1="41.91" x2="86.36" y2="42.545" width="0.1524" layer="21"/>
<wire x1="86.36" y1="43.815" x2="85.725" y2="44.45" width="0.1524" layer="21"/>
<wire x1="81.915" y1="29.21" x2="81.28" y2="29.845" width="0.1524" layer="21"/>
<wire x1="81.28" y1="29.845" x2="81.28" y2="31.115" width="0.1524" layer="21"/>
<wire x1="81.28" y1="31.115" x2="81.915" y2="31.75" width="0.1524" layer="21"/>
<wire x1="81.915" y1="31.75" x2="81.28" y2="32.385" width="0.1524" layer="21"/>
<wire x1="81.28" y1="32.385" x2="81.28" y2="33.655" width="0.1524" layer="21"/>
<wire x1="81.28" y1="33.655" x2="81.915" y2="34.29" width="0.1524" layer="21"/>
<wire x1="81.915" y1="34.29" x2="81.28" y2="34.925" width="0.1524" layer="21"/>
<wire x1="81.28" y1="34.925" x2="81.28" y2="36.195" width="0.1524" layer="21"/>
<wire x1="81.28" y1="36.195" x2="81.915" y2="36.83" width="0.1524" layer="21"/>
<wire x1="81.915" y1="36.83" x2="81.28" y2="37.465" width="0.1524" layer="21"/>
<wire x1="81.28" y1="37.465" x2="81.28" y2="38.735" width="0.1524" layer="21"/>
<wire x1="81.28" y1="38.735" x2="81.915" y2="39.37" width="0.1524" layer="21"/>
<wire x1="81.915" y1="39.37" x2="81.28" y2="40.005" width="0.1524" layer="21"/>
<wire x1="81.28" y1="40.005" x2="81.28" y2="41.275" width="0.1524" layer="21"/>
<wire x1="81.28" y1="41.275" x2="81.915" y2="41.91" width="0.1524" layer="21"/>
<wire x1="81.915" y1="41.91" x2="81.28" y2="42.545" width="0.1524" layer="21"/>
<wire x1="81.28" y1="42.545" x2="81.28" y2="43.815" width="0.1524" layer="21"/>
<wire x1="81.28" y1="43.815" x2="81.915" y2="44.45" width="0.1524" layer="21"/>
<wire x1="81.915" y1="44.45" x2="81.28" y2="45.085" width="0.1524" layer="21"/>
<wire x1="81.28" y1="45.085" x2="81.28" y2="46.355" width="0.1524" layer="21"/>
<wire x1="81.28" y1="46.355" x2="81.915" y2="46.99" width="0.1524" layer="21"/>
<wire x1="81.915" y1="46.99" x2="81.28" y2="47.625" width="0.1524" layer="21"/>
<wire x1="81.28" y1="47.625" x2="81.28" y2="48.895" width="0.1524" layer="21"/>
<wire x1="81.28" y1="48.895" x2="81.915" y2="49.53" width="0.1524" layer="21"/>
<wire x1="85.725" y1="49.53" x2="86.36" y2="48.895" width="0.1524" layer="21"/>
<wire x1="85.725" y1="46.99" x2="86.36" y2="47.625" width="0.1524" layer="21"/>
<wire x1="85.725" y1="46.99" x2="86.36" y2="46.355" width="0.1524" layer="21"/>
<wire x1="85.725" y1="44.45" x2="86.36" y2="45.085" width="0.1524" layer="21"/>
<wire x1="81.915" y1="31.75" x2="85.725" y2="31.75" width="0.1524" layer="21"/>
<wire x1="81.915" y1="34.29" x2="85.725" y2="34.29" width="0.1524" layer="21"/>
<wire x1="81.915" y1="36.83" x2="85.725" y2="36.83" width="0.1524" layer="21"/>
<wire x1="81.915" y1="39.37" x2="85.725" y2="39.37" width="0.1524" layer="21"/>
<wire x1="81.915" y1="41.91" x2="85.725" y2="41.91" width="0.1524" layer="21"/>
<wire x1="81.915" y1="44.45" x2="85.725" y2="44.45" width="0.1524" layer="21"/>
<wire x1="81.915" y1="46.99" x2="85.725" y2="46.99" width="0.1524" layer="21"/>
<wire x1="86.36" y1="47.625" x2="86.36" y2="48.895" width="0.1524" layer="21"/>
<wire x1="86.36" y1="45.085" x2="86.36" y2="46.355" width="0.1524" layer="21"/>
<wire x1="86.36" y1="42.545" x2="86.36" y2="43.815" width="0.1524" layer="21"/>
<wire x1="86.36" y1="40.005" x2="86.36" y2="41.275" width="0.1524" layer="21"/>
<wire x1="86.36" y1="37.465" x2="86.36" y2="38.735" width="0.1524" layer="21"/>
<wire x1="86.36" y1="34.925" x2="86.36" y2="36.195" width="0.1524" layer="21"/>
<wire x1="86.36" y1="32.385" x2="86.36" y2="33.655" width="0.1524" layer="21"/>
<wire x1="86.36" y1="29.845" x2="86.36" y2="31.115" width="0.1524" layer="21"/>
<wire x1="85.725" y1="8.89" x2="86.36" y2="9.525" width="0.1524" layer="21"/>
<wire x1="86.36" y1="10.795" x2="85.725" y2="11.43" width="0.1524" layer="21"/>
<wire x1="85.725" y1="11.43" x2="86.36" y2="12.065" width="0.1524" layer="21"/>
<wire x1="86.36" y1="13.335" x2="85.725" y2="13.97" width="0.1524" layer="21"/>
<wire x1="85.725" y1="13.97" x2="86.36" y2="14.605" width="0.1524" layer="21"/>
<wire x1="86.36" y1="15.875" x2="85.725" y2="16.51" width="0.1524" layer="21"/>
<wire x1="85.725" y1="16.51" x2="86.36" y2="17.145" width="0.1524" layer="21"/>
<wire x1="86.36" y1="18.415" x2="85.725" y2="19.05" width="0.1524" layer="21"/>
<wire x1="85.725" y1="19.05" x2="86.36" y2="19.685" width="0.1524" layer="21"/>
<wire x1="86.36" y1="20.955" x2="85.725" y2="21.59" width="0.1524" layer="21"/>
<wire x1="85.725" y1="21.59" x2="86.36" y2="22.225" width="0.1524" layer="21"/>
<wire x1="86.36" y1="23.495" x2="85.725" y2="24.13" width="0.1524" layer="21"/>
<wire x1="81.915" y1="8.89" x2="81.28" y2="9.525" width="0.1524" layer="21"/>
<wire x1="81.28" y1="9.525" x2="81.28" y2="10.795" width="0.1524" layer="21"/>
<wire x1="81.28" y1="10.795" x2="81.915" y2="11.43" width="0.1524" layer="21"/>
<wire x1="81.915" y1="11.43" x2="81.28" y2="12.065" width="0.1524" layer="21"/>
<wire x1="81.28" y1="12.065" x2="81.28" y2="13.335" width="0.1524" layer="21"/>
<wire x1="81.28" y1="13.335" x2="81.915" y2="13.97" width="0.1524" layer="21"/>
<wire x1="81.915" y1="13.97" x2="81.28" y2="14.605" width="0.1524" layer="21"/>
<wire x1="81.28" y1="14.605" x2="81.28" y2="15.875" width="0.1524" layer="21"/>
<wire x1="81.28" y1="15.875" x2="81.915" y2="16.51" width="0.1524" layer="21"/>
<wire x1="81.915" y1="16.51" x2="81.28" y2="17.145" width="0.1524" layer="21"/>
<wire x1="81.28" y1="17.145" x2="81.28" y2="18.415" width="0.1524" layer="21"/>
<wire x1="81.28" y1="18.415" x2="81.915" y2="19.05" width="0.1524" layer="21"/>
<wire x1="81.915" y1="19.05" x2="81.28" y2="19.685" width="0.1524" layer="21"/>
<wire x1="81.28" y1="19.685" x2="81.28" y2="20.955" width="0.1524" layer="21"/>
<wire x1="81.28" y1="20.955" x2="81.915" y2="21.59" width="0.1524" layer="21"/>
<wire x1="81.915" y1="21.59" x2="81.28" y2="22.225" width="0.1524" layer="21"/>
<wire x1="81.28" y1="22.225" x2="81.28" y2="23.495" width="0.1524" layer="21"/>
<wire x1="81.28" y1="23.495" x2="81.915" y2="24.13" width="0.1524" layer="21"/>
<wire x1="81.915" y1="24.13" x2="81.28" y2="24.765" width="0.1524" layer="21"/>
<wire x1="81.28" y1="24.765" x2="81.28" y2="26.035" width="0.1524" layer="21"/>
<wire x1="81.28" y1="26.035" x2="81.915" y2="26.67" width="0.1524" layer="21"/>
<wire x1="81.915" y1="26.67" x2="81.28" y2="27.305" width="0.1524" layer="21"/>
<wire x1="81.28" y1="27.305" x2="81.28" y2="28.575" width="0.1524" layer="21"/>
<wire x1="81.28" y1="28.575" x2="81.915" y2="29.21" width="0.1524" layer="21"/>
<wire x1="85.725" y1="29.21" x2="86.36" y2="28.575" width="0.1524" layer="21"/>
<wire x1="85.725" y1="26.67" x2="86.36" y2="27.305" width="0.1524" layer="21"/>
<wire x1="85.725" y1="26.67" x2="86.36" y2="26.035" width="0.1524" layer="21"/>
<wire x1="85.725" y1="24.13" x2="86.36" y2="24.765" width="0.1524" layer="21"/>
<wire x1="81.915" y1="11.43" x2="85.725" y2="11.43" width="0.1524" layer="21"/>
<wire x1="81.915" y1="13.97" x2="85.725" y2="13.97" width="0.1524" layer="21"/>
<wire x1="81.915" y1="16.51" x2="85.725" y2="16.51" width="0.1524" layer="21"/>
<wire x1="81.915" y1="19.05" x2="85.725" y2="19.05" width="0.1524" layer="21"/>
<wire x1="81.915" y1="21.59" x2="85.725" y2="21.59" width="0.1524" layer="21"/>
<wire x1="81.915" y1="24.13" x2="85.725" y2="24.13" width="0.1524" layer="21"/>
<wire x1="81.915" y1="26.67" x2="85.725" y2="26.67" width="0.1524" layer="21"/>
<wire x1="81.915" y1="29.21" x2="85.725" y2="29.21" width="0.1524" layer="21"/>
<wire x1="86.36" y1="27.305" x2="86.36" y2="28.575" width="0.1524" layer="21"/>
<wire x1="86.36" y1="24.765" x2="86.36" y2="26.035" width="0.1524" layer="21"/>
<wire x1="86.36" y1="22.225" x2="86.36" y2="23.495" width="0.1524" layer="21"/>
<wire x1="86.36" y1="19.685" x2="86.36" y2="20.955" width="0.1524" layer="21"/>
<wire x1="86.36" y1="17.145" x2="86.36" y2="18.415" width="0.1524" layer="21"/>
<wire x1="86.36" y1="14.605" x2="86.36" y2="15.875" width="0.1524" layer="21"/>
<wire x1="86.36" y1="12.065" x2="86.36" y2="13.335" width="0.1524" layer="21"/>
<wire x1="86.36" y1="9.525" x2="86.36" y2="10.795" width="0.1524" layer="21"/>
<wire x1="85.725" y1="8.89" x2="86.36" y2="8.255" width="0.2032" layer="21"/>
<wire x1="86.36" y1="6.985" x2="85.725" y2="6.35" width="0.2032" layer="21"/>
<wire x1="81.28" y1="8.255" x2="81.28" y2="6.985" width="0.2032" layer="21"/>
<wire x1="81.915" y1="8.89" x2="81.28" y2="8.255" width="0.2032" layer="21"/>
<wire x1="81.28" y1="6.985" x2="81.915" y2="6.35" width="0.2032" layer="21"/>
<wire x1="86.36" y1="8.255" x2="86.36" y2="6.985" width="0.2032" layer="21"/>
<wire x1="81.915" y1="8.89" x2="85.725" y2="8.89" width="0.2032" layer="21"/>
<wire x1="85.725" y1="6.35" x2="81.915" y2="6.35" width="0.2032" layer="21"/>
<wire x1="85.725" y1="52.07" x2="86.36" y2="51.435" width="0.2032" layer="21"/>
<wire x1="86.36" y1="50.165" x2="85.725" y2="49.53" width="0.2032" layer="21"/>
<wire x1="81.28" y1="51.435" x2="81.28" y2="50.165" width="0.2032" layer="21"/>
<wire x1="81.915" y1="52.07" x2="81.28" y2="51.435" width="0.2032" layer="21"/>
<wire x1="81.28" y1="50.165" x2="81.915" y2="49.53" width="0.2032" layer="21"/>
<wire x1="86.36" y1="51.435" x2="86.36" y2="50.165" width="0.2032" layer="21"/>
<wire x1="81.915" y1="52.07" x2="85.725" y2="52.07" width="0.2032" layer="21"/>
<wire x1="85.725" y1="49.53" x2="81.915" y2="49.53" width="0.2032" layer="21"/>
<wire x1="48.006" y1="43.053" x2="16.637" y2="43.053" width="0.3048" layer="21"/>
<wire x1="48.514" y1="39.751" x2="74.041" y2="39.751" width="0.3048" layer="21"/>
<wire x1="74.8284" y1="39.5478" x2="74.8284" y2="11.43" width="0.3048" layer="21"/>
<wire x1="76.8604" y1="41.5798" x2="76.8604" y2="48.641" width="0.3048" layer="21"/>
<wire x1="82.55" y1="52.1462" x2="82.55" y2="52.7812" width="0.3048" layer="21"/>
<wire x1="82.55" y1="52.7812" x2="85.09" y2="52.7812" width="0.3048" layer="21"/>
<wire x1="85.09" y1="52.7812" x2="85.09" y2="52.1208" width="0.3048" layer="21"/>
<wire x1="82.55" y1="6.2738" x2="82.55" y2="5.5372" width="0.3048" layer="21"/>
<wire x1="82.55" y1="5.5372" x2="85.09" y2="5.5372" width="0.3048" layer="21"/>
<wire x1="85.09" y1="5.5372" x2="85.09" y2="6.2992" width="0.3048" layer="21"/>
<wire x1="74.803" y1="10.5664" x2="38.481" y2="10.5664" width="0.3048" layer="21"/>
<wire x1="74.803" y1="10.5664" x2="76.5048" y2="8.8646" width="0.3048" layer="21"/>
<wire x1="76.5048" y1="8.8646" x2="89.3826" y2="8.8646" width="0.3048" layer="21"/>
<wire x1="74.8284" y1="39.5478" x2="76.8604" y2="41.5798" width="0.3048" layer="21"/>
<wire x1="86.36" y1="6.35" x2="89.3572" y2="6.35" width="0.3048" layer="21"/>
<wire x1="49.403" y1="45.72" x2="49.403" y2="46.99" width="0.2032" layer="21"/>
<wire x1="48.895" y1="46.482" x2="49.403" y2="46.99" width="0.2032" layer="21"/>
<wire x1="49.403" y1="46.99" x2="49.911" y2="46.482" width="0.2032" layer="21"/>
<wire x1="51.943" y1="46.99" x2="51.943" y2="45.72" width="0.2032" layer="21"/>
<wire x1="52.451" y1="46.228" x2="51.943" y2="45.72" width="0.2032" layer="21"/>
<wire x1="51.943" y1="45.72" x2="51.435" y2="46.228" width="0.2032" layer="21"/>
<wire x1="35.179" y1="10.5664" x2="20.701" y2="10.5664" width="0.3048" layer="21"/>
<wire x1="33.02" y1="3.175" x2="33.655" y2="3.81" width="0.2032" layer="21"/>
<wire x1="33.655" y1="3.81" x2="34.925" y2="3.81" width="0.2032" layer="21"/>
<wire x1="34.925" y1="3.81" x2="35.56" y2="3.175" width="0.2032" layer="21"/>
<wire x1="35.56" y1="1.905" x2="34.925" y2="1.27" width="0.2032" layer="21"/>
<wire x1="34.925" y1="1.27" x2="33.655" y2="1.27" width="0.2032" layer="21"/>
<wire x1="33.655" y1="1.27" x2="33.02" y2="1.905" width="0.2032" layer="21"/>
<wire x1="28.575" y1="3.81" x2="29.845" y2="3.81" width="0.2032" layer="21"/>
<wire x1="29.845" y1="3.81" x2="30.48" y2="3.175" width="0.2032" layer="21"/>
<wire x1="30.48" y1="1.905" x2="29.845" y2="1.27" width="0.2032" layer="21"/>
<wire x1="30.48" y1="3.175" x2="31.115" y2="3.81" width="0.2032" layer="21"/>
<wire x1="31.115" y1="3.81" x2="32.385" y2="3.81" width="0.2032" layer="21"/>
<wire x1="32.385" y1="3.81" x2="33.02" y2="3.175" width="0.2032" layer="21"/>
<wire x1="33.02" y1="1.905" x2="32.385" y2="1.27" width="0.2032" layer="21"/>
<wire x1="32.385" y1="1.27" x2="31.115" y2="1.27" width="0.2032" layer="21"/>
<wire x1="31.115" y1="1.27" x2="30.48" y2="1.905" width="0.2032" layer="21"/>
<wire x1="25.4" y1="3.175" x2="26.035" y2="3.81" width="0.2032" layer="21"/>
<wire x1="26.035" y1="3.81" x2="27.305" y2="3.81" width="0.2032" layer="21"/>
<wire x1="27.305" y1="3.81" x2="27.94" y2="3.175" width="0.2032" layer="21"/>
<wire x1="27.94" y1="1.905" x2="27.305" y2="1.27" width="0.2032" layer="21"/>
<wire x1="27.305" y1="1.27" x2="26.035" y2="1.27" width="0.2032" layer="21"/>
<wire x1="26.035" y1="1.27" x2="25.4" y2="1.905" width="0.2032" layer="21"/>
<wire x1="28.575" y1="3.81" x2="27.94" y2="3.175" width="0.2032" layer="21"/>
<wire x1="27.94" y1="1.905" x2="28.575" y2="1.27" width="0.2032" layer="21"/>
<wire x1="29.845" y1="1.27" x2="28.575" y2="1.27" width="0.2032" layer="21"/>
<wire x1="20.955" y1="3.81" x2="22.225" y2="3.81" width="0.2032" layer="21"/>
<wire x1="22.225" y1="3.81" x2="22.86" y2="3.175" width="0.2032" layer="21"/>
<wire x1="22.86" y1="1.905" x2="22.225" y2="1.27" width="0.2032" layer="21"/>
<wire x1="22.86" y1="3.175" x2="23.495" y2="3.81" width="0.2032" layer="21"/>
<wire x1="23.495" y1="3.81" x2="24.765" y2="3.81" width="0.2032" layer="21"/>
<wire x1="24.765" y1="3.81" x2="25.4" y2="3.175" width="0.2032" layer="21"/>
<wire x1="25.4" y1="1.905" x2="24.765" y2="1.27" width="0.2032" layer="21"/>
<wire x1="24.765" y1="1.27" x2="23.495" y2="1.27" width="0.2032" layer="21"/>
<wire x1="23.495" y1="1.27" x2="22.86" y2="1.905" width="0.2032" layer="21"/>
<wire x1="20.32" y1="3.175" x2="20.32" y2="1.905" width="0.2032" layer="21"/>
<wire x1="20.955" y1="3.81" x2="20.32" y2="3.175" width="0.2032" layer="21"/>
<wire x1="20.32" y1="1.905" x2="20.955" y2="1.27" width="0.2032" layer="21"/>
<wire x1="22.225" y1="1.27" x2="20.955" y2="1.27" width="0.2032" layer="21"/>
<wire x1="35.56" y1="3.175" x2="35.56" y2="1.905" width="0.2032" layer="21"/>
<pad name="A9" x="64.77" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A10" x="67.31" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A11" x="69.85" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A12" x="72.39" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A13" x="74.93" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A14" x="77.47" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A15" x="80.01" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A8" x="62.23" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="15" x="59.69" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="16" x="62.23" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="17" x="64.77" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="18" x="67.31" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="19" x="69.85" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="20" x="72.39" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="21" x="74.93" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="14" x="57.15" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="41.91" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="44.45" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="46.99" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="49.53" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="52.07" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A6" x="54.61" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A7" x="57.15" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="39.37" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="6" x="36.83" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5" x="39.37" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="4" x="41.91" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="44.45" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="46.99" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="1" x="49.53" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="0" x="52.07" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="7" x="34.29" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@4" x="14.986" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="13" x="17.526" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="12" x="20.066" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="11" x="22.606" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="10" x="25.146" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="9" x="27.686" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="8" x="30.226" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="12.446" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="37" x="85.09" y="30.48" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="36" x="82.55" y="30.48" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="35" x="85.09" y="33.02" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="34" x="82.55" y="33.02" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="33" x="85.09" y="35.56" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="32" x="82.55" y="35.56" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="31" x="85.09" y="38.1" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="30" x="82.55" y="38.1" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="29" x="85.09" y="40.64" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="28" x="82.55" y="40.64" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="27" x="85.09" y="43.18" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="26" x="82.55" y="43.18" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="25" x="85.09" y="45.72" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="24" x="82.55" y="45.72" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="23" x="85.09" y="48.26" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="22" x="82.55" y="48.26" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="53" x="85.09" y="10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="52" x="82.55" y="10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="51" x="85.09" y="12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="50" x="82.55" y="12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="49" x="85.09" y="15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="48" x="82.55" y="15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="47" x="85.09" y="17.78" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="46" x="82.55" y="17.78" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="45" x="85.09" y="20.32" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="44" x="82.55" y="20.32" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="43" x="85.09" y="22.86" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="42" x="82.55" y="22.86" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="41" x="85.09" y="25.4" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="40" x="82.55" y="25.4" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="39" x="85.09" y="27.94" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="38" x="82.55" y="27.94" drill="1.016" diameter="1.8796" shape="octagon" rot="R90"/>
<pad name="GND@2" x="82.55" y="7.62" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@3" x="85.09" y="7.62" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V@1" x="82.55" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V@2" x="85.09" y="50.8" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RESET" x="21.59" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="24.13" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V@0" x="26.67" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="29.21" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="31.75" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="34.29" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="52.451" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">0</text>
<text x="49.911" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">1</text>
<text x="47.371" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">2</text>
<text x="44.831" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">3</text>
<text x="42.291" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">4</text>
<text x="39.751" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">5</text>
<text x="37.211" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">6</text>
<text x="34.671" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">7</text>
<text x="30.861" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">8</text>
<text x="28.321" y="47.752" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">9</text>
<text x="25.781" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">10</text>
<text x="23.241" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">11</text>
<text x="20.701" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">12</text>
<text x="18.161" y="46.482" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">13</text>
<text x="57.531" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">14</text>
<text x="60.071" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">15</text>
<text x="62.611" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">16</text>
<text x="65.151" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">17</text>
<text x="67.691" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">18</text>
<text x="70.231" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">19</text>
<text x="72.771" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">20</text>
<text x="75.311" y="46.863" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">21</text>
<text x="78.2574" y="47.498" size="1.4224" layer="21" font="vector" ratio="15">22</text>
<text x="78.2574" y="44.958" size="1.4224" layer="21" font="vector" ratio="15">24</text>
<text x="78.2574" y="42.418" size="1.4224" layer="21" font="vector" ratio="15">26</text>
<text x="78.2574" y="39.878" size="1.4224" layer="21" font="vector" ratio="15">28</text>
<text x="78.2574" y="37.338" size="1.4224" layer="21" font="vector" ratio="15">30</text>
<text x="78.2574" y="34.798" size="1.4224" layer="21" font="vector" ratio="15">32</text>
<text x="78.2574" y="32.258" size="1.4224" layer="21" font="vector" ratio="15">34</text>
<text x="78.2574" y="29.718" size="1.4224" layer="21" font="vector" ratio="15">36</text>
<text x="78.2574" y="27.178" size="1.4224" layer="21" font="vector" ratio="15">38</text>
<text x="78.2574" y="24.638" size="1.4224" layer="21" font="vector" ratio="15">40</text>
<text x="78.2574" y="22.098" size="1.4224" layer="21" font="vector" ratio="15">42</text>
<text x="78.2574" y="19.558" size="1.4224" layer="21" font="vector" ratio="15">44</text>
<text x="78.2574" y="17.018" size="1.4224" layer="21" font="vector" ratio="15">46</text>
<text x="78.2574" y="11.938" size="1.4224" layer="21" font="vector" ratio="15">50</text>
<text x="78.2574" y="14.478" size="1.4224" layer="21" font="vector" ratio="15">48</text>
<text x="78.2574" y="9.398" size="1.4224" layer="21" font="vector" ratio="15">52</text>
<text x="86.995" y="37.3634" size="1.4224" layer="21" font="vector" ratio="15">31</text>
<text x="86.995" y="34.8234" size="1.4224" layer="21" font="vector" ratio="15">33</text>
<text x="86.995" y="32.2834" size="1.4224" layer="21" font="vector" ratio="15">35</text>
<text x="86.995" y="29.7434" size="1.4224" layer="21" font="vector" ratio="15">37</text>
<text x="86.995" y="27.2034" size="1.4224" layer="21" font="vector" ratio="15">39</text>
<text x="86.995" y="24.6634" size="1.4224" layer="21" font="vector" ratio="15">41</text>
<text x="86.995" y="22.1234" size="1.4224" layer="21" font="vector" ratio="15">43</text>
<text x="86.995" y="19.5834" size="1.4224" layer="21" font="vector" ratio="15">45</text>
<text x="86.995" y="17.0434" size="1.4224" layer="21" font="vector" ratio="15">47</text>
<text x="86.995" y="14.5034" size="1.4224" layer="21" font="vector" ratio="15">49</text>
<text x="86.995" y="11.9634" size="1.4224" layer="21" font="vector" ratio="15">51</text>
<text x="86.995" y="9.4234" size="1.4224" layer="21" font="vector" ratio="15">53</text>
<text x="40.132" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A0</text>
<text x="42.418" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A1</text>
<text x="45.212" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A2</text>
<text x="47.752" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A3</text>
<text x="50.292" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A4</text>
<text x="52.705" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A5</text>
<text x="55.245" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">6</text>
<text x="57.912" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A7</text>
<text x="62.992" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A8</text>
<text x="65.532" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A9</text>
<text x="68.072" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A10</text>
<text x="70.612" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A11</text>
<text x="73.152" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A12</text>
<text x="75.692" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A13</text>
<text x="78.232" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A14</text>
<text x="80.645" y="4.5974" size="1.4224" layer="21" font="vector" ratio="15" rot="R90">A15</text>
<text x="39.624" y="8.128" size="1.524" layer="21" font="vector" ratio="15">ANALOG IN</text>
<text x="49.022" y="40.259" size="1.524" layer="21" font="vector" ratio="15">COMMUNICATION</text>
<text x="77.089" y="11.684" size="1.524" layer="21" font="vector" ratio="15" rot="R90">DIGITAL</text>
<text x="86.995" y="6.8834" size="1.016" layer="21" font="vector" ratio="15">GND</text>
<text x="49.911" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX0</text>
<text x="52.451" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX0</text>
<text x="17.78" y="43.815" size="1.524" layer="21" font="vector" ratio="15">PWM</text>
<text x="57.531" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX3</text>
<text x="60.071" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX3</text>
<text x="62.611" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX2</text>
<text x="65.151" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX2</text>
<text x="67.691" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">TX1</text>
<text x="70.231" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RX1</text>
<text x="72.771" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">SDA</text>
<text x="75.311" y="42.672" size="1.016" layer="21" font="vector" ratio="15" rot="R90">SCL</text>
<text x="28.194" y="8.128" size="1.524" layer="21" font="vector" ratio="15">POWER</text>
<text x="22.098" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">RESET</text>
<text x="24.638" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">3.3V</text>
<text x="27.178" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">3.3V</text>
<text x="29.718" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">GND</text>
<text x="32.258" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">GND</text>
<text x="34.798" y="4.5974" size="1.016" layer="21" font="vector" ratio="15" rot="R90">Vin</text>
<text x="14.224" y="49.022" size="1.4224" layer="21" font="vector" ratio="15" rot="R270">GND</text>
<text x="11.811" y="49.022" size="1.4224" layer="21" font="vector" ratio="15" rot="R270">AREF</text>
<text x="80.01" y="52.07" size="0.889" layer="21" font="vector" ratio="15">3.3</text>
<rectangle x1="77.216" y1="2.286" x2="77.724" y2="2.794" layer="51"/>
<rectangle x1="74.676" y1="2.286" x2="75.184" y2="2.794" layer="51"/>
<rectangle x1="72.136" y1="2.286" x2="72.644" y2="2.794" layer="51"/>
<rectangle x1="69.596" y1="2.286" x2="70.104" y2="2.794" layer="51"/>
<rectangle x1="67.056" y1="2.286" x2="67.564" y2="2.794" layer="51"/>
<rectangle x1="64.516" y1="2.286" x2="65.024" y2="2.794" layer="51"/>
<rectangle x1="61.976" y1="2.286" x2="62.484" y2="2.794" layer="51"/>
<rectangle x1="79.756" y1="2.286" x2="80.264" y2="2.794" layer="51"/>
<rectangle x1="72.136" y1="50.546" x2="72.644" y2="51.054" layer="51"/>
<rectangle x1="69.596" y1="50.546" x2="70.104" y2="51.054" layer="51"/>
<rectangle x1="67.056" y1="50.546" x2="67.564" y2="51.054" layer="51"/>
<rectangle x1="64.516" y1="50.546" x2="65.024" y2="51.054" layer="51"/>
<rectangle x1="61.976" y1="50.546" x2="62.484" y2="51.054" layer="51"/>
<rectangle x1="59.436" y1="50.546" x2="59.944" y2="51.054" layer="51"/>
<rectangle x1="56.896" y1="50.546" x2="57.404" y2="51.054" layer="51"/>
<rectangle x1="74.676" y1="50.546" x2="75.184" y2="51.054" layer="51"/>
<rectangle x1="54.356" y1="2.286" x2="54.864" y2="2.794" layer="51"/>
<rectangle x1="51.816" y1="2.286" x2="52.324" y2="2.794" layer="51"/>
<rectangle x1="49.276" y1="2.286" x2="49.784" y2="2.794" layer="51"/>
<rectangle x1="46.736" y1="2.286" x2="47.244" y2="2.794" layer="51"/>
<rectangle x1="44.196" y1="2.286" x2="44.704" y2="2.794" layer="51"/>
<rectangle x1="41.656" y1="2.286" x2="42.164" y2="2.794" layer="51"/>
<rectangle x1="39.116" y1="2.286" x2="39.624" y2="2.794" layer="51"/>
<rectangle x1="56.896" y1="2.286" x2="57.404" y2="2.794" layer="51"/>
<rectangle x1="49.276" y1="50.546" x2="49.784" y2="51.054" layer="51"/>
<rectangle x1="46.736" y1="50.546" x2="47.244" y2="51.054" layer="51"/>
<rectangle x1="44.196" y1="50.546" x2="44.704" y2="51.054" layer="51"/>
<rectangle x1="41.656" y1="50.546" x2="42.164" y2="51.054" layer="51"/>
<rectangle x1="39.116" y1="50.546" x2="39.624" y2="51.054" layer="51"/>
<rectangle x1="36.576" y1="50.546" x2="37.084" y2="51.054" layer="51"/>
<rectangle x1="34.036" y1="50.546" x2="34.544" y2="51.054" layer="51"/>
<rectangle x1="51.816" y1="50.546" x2="52.324" y2="51.054" layer="51"/>
<rectangle x1="27.432" y1="50.546" x2="27.94" y2="51.054" layer="51"/>
<rectangle x1="24.892" y1="50.546" x2="25.4" y2="51.054" layer="51"/>
<rectangle x1="22.352" y1="50.546" x2="22.86" y2="51.054" layer="51"/>
<rectangle x1="19.812" y1="50.546" x2="20.32" y2="51.054" layer="51"/>
<rectangle x1="17.272" y1="50.546" x2="17.78" y2="51.054" layer="51"/>
<rectangle x1="14.732" y1="50.546" x2="15.24" y2="51.054" layer="51"/>
<rectangle x1="12.192" y1="50.546" x2="12.7" y2="51.054" layer="51"/>
<rectangle x1="29.972" y1="50.546" x2="30.48" y2="51.054" layer="51"/>
<rectangle x1="51.943" y1="30.226" x2="52.451" y2="30.734" layer="51" rot="R270"/>
<rectangle x1="54.483" y1="30.226" x2="54.991" y2="30.734" layer="51" rot="R270"/>
<rectangle x1="54.483" y1="27.686" x2="54.991" y2="28.194" layer="51" rot="R270"/>
<rectangle x1="51.943" y1="27.686" x2="52.451" y2="28.194" layer="51" rot="R270"/>
<rectangle x1="54.483" y1="25.146" x2="54.991" y2="25.654" layer="51" rot="R270"/>
<rectangle x1="51.943" y1="25.146" x2="52.451" y2="25.654" layer="51" rot="R270"/>
<rectangle x1="84.836" y1="30.226" x2="85.344" y2="30.734" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="30.226" x2="82.804" y2="30.734" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="32.766" x2="82.804" y2="33.274" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="32.766" x2="85.344" y2="33.274" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="35.306" x2="82.804" y2="35.814" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="35.306" x2="85.344" y2="35.814" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="37.846" x2="82.804" y2="38.354" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="40.386" x2="82.804" y2="40.894" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="42.926" x2="82.804" y2="43.434" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="37.846" x2="85.344" y2="38.354" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="40.386" x2="85.344" y2="40.894" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="42.926" x2="85.344" y2="43.434" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="45.466" x2="82.804" y2="45.974" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="45.466" x2="85.344" y2="45.974" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="48.006" x2="82.804" y2="48.514" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="48.006" x2="85.344" y2="48.514" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="9.906" x2="85.344" y2="10.414" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="9.906" x2="82.804" y2="10.414" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="12.446" x2="82.804" y2="12.954" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="12.446" x2="85.344" y2="12.954" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="14.986" x2="82.804" y2="15.494" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="14.986" x2="85.344" y2="15.494" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="17.526" x2="82.804" y2="18.034" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="20.066" x2="82.804" y2="20.574" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="22.606" x2="82.804" y2="23.114" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="17.526" x2="85.344" y2="18.034" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="20.066" x2="85.344" y2="20.574" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="22.606" x2="85.344" y2="23.114" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="25.146" x2="82.804" y2="25.654" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="25.146" x2="85.344" y2="25.654" layer="51" rot="R90"/>
<rectangle x1="82.296" y1="27.686" x2="82.804" y2="28.194" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="27.686" x2="85.344" y2="28.194" layer="51" rot="R90"/>
<rectangle x1="84.836" y1="7.366" x2="85.344" y2="7.874" layer="51"/>
<rectangle x1="82.296" y1="7.366" x2="82.804" y2="7.874" layer="51"/>
<rectangle x1="84.836" y1="50.546" x2="85.344" y2="51.054" layer="51"/>
<rectangle x1="82.296" y1="50.546" x2="82.804" y2="51.054" layer="51"/>
<rectangle x1="34.036" y1="2.286" x2="34.544" y2="2.794" layer="51"/>
<rectangle x1="31.496" y1="2.286" x2="32.004" y2="2.794" layer="51"/>
<rectangle x1="28.956" y1="2.286" x2="29.464" y2="2.794" layer="51"/>
<rectangle x1="26.416" y1="2.286" x2="26.924" y2="2.794" layer="51"/>
<rectangle x1="23.876" y1="2.286" x2="24.384" y2="2.794" layer="51"/>
<rectangle x1="21.336" y1="2.286" x2="21.844" y2="2.794" layer="51"/>
<hole x="3.81" y="50.8" drill="3.2"/>
<hole x="2.54" y="2.54" drill="3.2"/>
<hole x="54.61" y="35.56" drill="3.2"/>
<hole x="54.61" y="7.62" drill="3.2"/>
<hole x="78.74" y="50.8" drill="3.2"/>
<hole x="85.09" y="2.54" drill="3.2"/>
</package>
<package name="ARDUINO_MINI">
<wire x1="-8.89" y1="16.51" x2="-8.89" y2="-16.51" width="0.127" layer="51"/>
<wire x1="-8.89" y1="-16.51" x2="8.89" y2="-16.51" width="0.127" layer="51"/>
<wire x1="8.89" y1="-16.51" x2="8.89" y2="16.51" width="0.127" layer="51"/>
<wire x1="8.89" y1="16.51" x2="-8.89" y2="16.51" width="0.127" layer="51"/>
<pad name="1" x="-7.62" y="12.7" drill="1.016" diameter="1.8796"/>
<pad name="2" x="-7.62" y="10.16" drill="1.016" diameter="1.8796"/>
<pad name="3" x="-7.62" y="7.62" drill="1.016" diameter="1.8796"/>
<pad name="4" x="-7.62" y="5.08" drill="1.016" diameter="1.8796"/>
<pad name="5" x="-7.62" y="2.54" drill="1.016" diameter="1.8796"/>
<pad name="6" x="-7.62" y="0" drill="1.016" diameter="1.8796"/>
<pad name="7" x="-7.62" y="-2.54" drill="1.016" diameter="1.8796"/>
<pad name="8" x="-7.62" y="-5.08" drill="1.016" diameter="1.8796"/>
<pad name="9" x="-7.62" y="-7.62" drill="1.016" diameter="1.8796"/>
<pad name="10" x="-7.62" y="-10.16" drill="1.016" diameter="1.8796"/>
<pad name="11" x="-7.62" y="-12.7" drill="1.016" diameter="1.8796"/>
<pad name="12" x="-7.62" y="-15.24" drill="1.016" diameter="1.8796"/>
<pad name="13" x="7.62" y="-15.24" drill="1.016" diameter="1.8796"/>
<pad name="14" x="7.62" y="-12.7" drill="1.016" diameter="1.8796"/>
<pad name="15" x="7.62" y="-10.16" drill="1.016" diameter="1.8796"/>
<pad name="16" x="7.62" y="-7.62" drill="1.016" diameter="1.8796"/>
<pad name="17" x="7.62" y="-5.08" drill="1.016" diameter="1.8796"/>
<pad name="18" x="7.62" y="-2.54" drill="1.016" diameter="1.8796"/>
<pad name="19" x="7.62" y="0" drill="1.016" diameter="1.8796"/>
<pad name="20" x="7.62" y="2.54" drill="1.016" diameter="1.8796"/>
<pad name="21" x="7.62" y="5.08" drill="1.016" diameter="1.8796"/>
<pad name="22" x="7.62" y="7.62" drill="1.016" diameter="1.8796"/>
<pad name="23" x="7.62" y="10.16" drill="1.016" diameter="1.8796"/>
<pad name="24" x="7.62" y="12.7" drill="1.016" diameter="1.8796"/>
<text x="-3.81" y="-13.97" size="1.27" layer="25">&gt;NAME</text>
<text x="-3.81" y="-15.875" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="DUEMILANOVE_SHIELD">
<wire x1="2.54" y1="0" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="9.5" y1="0" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="0" x2="50.8" y2="0" width="0.254" layer="51"/>
<wire x1="50.8" y1="0" x2="53.34" y2="2.54" width="0.254" layer="51"/>
<wire x1="53.34" y1="57.15" x2="50.8" y2="57.15" width="0.254" layer="51"/>
<wire x1="50.8" y1="57.15" x2="48.26" y2="59.69" width="0.254" layer="51"/>
<wire x1="0" y1="55.88" x2="0" y2="2.54" width="0.254" layer="51"/>
<wire x1="0" y1="2.54" x2="2.54" y2="0" width="0.254" layer="51"/>
<wire x1="48.26" y1="59.69" x2="15.24" y2="59.69" width="0.254" layer="51"/>
<wire x1="15.24" y1="59.69" x2="12.7" y2="57.15" width="0.254" layer="51"/>
<wire x1="12.7" y1="57.15" x2="1.27" y2="57.15" width="0.254" layer="51"/>
<wire x1="1.27" y1="57.15" x2="0" y2="55.88" width="0.254" layer="51"/>
<wire x1="53.34" y1="2.54" x2="53.34" y2="57.15" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="21.7" y2="-15.5" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="49.2" y2="-10.3" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="-15.5" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="40.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="49.2" y1="-10.3" x2="49.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="1.27" y1="55.88" x2="3.81" y2="55.88" width="0.127" layer="51"/>
<wire x1="3.81" y1="55.88" x2="3.81" y2="35.56" width="0.127" layer="51"/>
<wire x1="3.81" y1="35.56" x2="1.27" y2="35.56" width="0.127" layer="51"/>
<wire x1="1.27" y1="35.56" x2="1.27" y2="55.88" width="0.127" layer="51"/>
<wire x1="1.27" y1="34.29" x2="3.81" y2="34.29" width="0.127" layer="51"/>
<wire x1="3.81" y1="34.29" x2="3.81" y2="13.97" width="0.127" layer="51"/>
<wire x1="3.81" y1="13.97" x2="1.27" y2="13.97" width="0.127" layer="51"/>
<wire x1="1.27" y1="13.97" x2="1.27" y2="34.29" width="0.127" layer="51"/>
<wire x1="49.53" y1="22.86" x2="52.07" y2="22.86" width="0.127" layer="51"/>
<wire x1="52.07" y1="22.86" x2="52.07" y2="38.1" width="0.127" layer="51"/>
<wire x1="52.07" y1="38.1" x2="49.53" y2="38.1" width="0.127" layer="51"/>
<wire x1="49.53" y1="38.1" x2="49.53" y2="22.86" width="0.127" layer="51"/>
<wire x1="52.07" y1="40.64" x2="49.53" y2="40.64" width="0.127" layer="51"/>
<wire x1="49.53" y1="40.64" x2="49.53" y2="55.88" width="0.127" layer="51"/>
<wire x1="49.53" y1="55.88" x2="52.07" y2="55.88" width="0.127" layer="51"/>
<wire x1="52.07" y1="55.88" x2="52.07" y2="40.64" width="0.127" layer="51"/>
<circle x="2.54" y="6.35" radius="1.905" width="0.127" layer="42"/>
<circle x="2.54" y="6.35" radius="1.905" width="0.127" layer="41"/>
<circle x="45.72" y="57.15" radius="1.905" width="0.127" layer="42"/>
<circle x="45.72" y="57.15" radius="1.905" width="0.127" layer="41"/>
<pad name="RES" x="50.8" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="50.8" y="26.67" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V" x="50.8" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="50.8" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="50.8" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="50.8" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="50.8" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="50.8" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="50.8" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="50.8" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="50.8" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RX" x="2.54" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="TX" x="2.54" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D2" x="2.54" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D3" x="2.54" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D4" x="2.54" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D5" x="2.54" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D6" x="2.54" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D7" x="2.54" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D8" x="2.54" y="33.02" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D9" x="2.54" y="30.48" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D10" x="2.54" y="27.94" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D11" x="2.54" y="25.4" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D12" x="2.54" y="22.86" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D13" x="2.54" y="20.32" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@2" x="2.54" y="17.78" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="2.54" y="15.24" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.4157" y="32.258" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.4157" y="34.798" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.4157" y="29.718" size="1.016" layer="21" ratio="15" rot="R180">+5V</text>
<text x="49.4157" y="24.638" size="1.016" layer="21" ratio="15" rot="R180">RST</text>
<text x="49.4157" y="37.338" size="1.016" layer="21" ratio="15" rot="R180">VIN</text>
<text x="49.4157" y="27.178" size="1.016" layer="21" ratio="15" rot="R180">+3.3V</text>
<text x="49.4157" y="42.418" size="1.016" layer="21" ratio="15" rot="R180">0</text>
<text x="49.4157" y="44.958" size="1.016" layer="21" ratio="15" rot="R180">1</text>
<text x="49.4157" y="47.498" size="1.016" layer="21" ratio="15" rot="R180">2</text>
<text x="49.4157" y="50.038" size="1.016" layer="21" ratio="15" rot="R180">3</text>
<text x="49.4157" y="52.578" size="1.016" layer="21" ratio="15" rot="R180">4</text>
<text x="49.4157" y="55.118" size="1.016" layer="21" ratio="15" rot="R180">5</text>
<text x="46.8757" y="52.197" size="1.016" layer="21" ratio="15" rot="R270">Analog In</text>
<text x="3.81" y="17.272" size="1.016" layer="21" ratio="15">GND</text>
<text x="3.81" y="19.812" size="1.016" layer="21" ratio="15">13</text>
<text x="3.81" y="22.352" size="1.016" layer="21" ratio="15">12</text>
<text x="3.81" y="24.892" size="1.016" layer="21" ratio="15">11</text>
<text x="3.81" y="14.732" size="1.016" layer="21" ratio="15">AREF</text>
<text x="3.81" y="27.432" size="1.016" layer="21" ratio="15">10</text>
<text x="3.81" y="29.972" size="1.016" layer="21" ratio="15">9</text>
<text x="3.81" y="32.512" size="1.016" layer="21" ratio="15">8</text>
<text x="3.81" y="36.322" size="1.016" layer="21" ratio="15">7</text>
<text x="3.81" y="38.862" size="1.016" layer="21" ratio="15">6</text>
<text x="3.81" y="41.402" size="1.016" layer="21" ratio="15">5</text>
<text x="3.81" y="43.942" size="1.016" layer="21" ratio="15">4</text>
<text x="3.81" y="46.482" size="1.016" layer="21" ratio="15">3</text>
<text x="3.81" y="49.022" size="1.016" layer="21" ratio="15">2</text>
<text x="3.81" y="51.562" size="1.016" layer="21" ratio="15">TX</text>
<text x="3.81" y="54.102" size="1.016" layer="21" ratio="15">RX</text>
<hole x="45.72" y="57.15" drill="3.302"/>
<hole x="2.54" y="6.35" drill="3.302"/>
</package>
<package name="DUEMILANOVE_VIAS">
<wire x1="1.27" y1="43.18" x2="3.81" y2="43.18" width="0.127" layer="51"/>
<wire x1="3.81" y1="43.18" x2="3.81" y2="22.86" width="0.127" layer="51"/>
<wire x1="3.81" y1="22.86" x2="1.27" y2="22.86" width="0.127" layer="51"/>
<wire x1="1.27" y1="22.86" x2="1.27" y2="43.18" width="0.127" layer="51"/>
<wire x1="1.27" y1="21.59" x2="3.81" y2="21.59" width="0.127" layer="51"/>
<wire x1="3.81" y1="21.59" x2="3.81" y2="1.27" width="0.127" layer="51"/>
<wire x1="3.81" y1="1.27" x2="1.27" y2="1.27" width="0.127" layer="51"/>
<wire x1="1.27" y1="1.27" x2="1.27" y2="21.59" width="0.127" layer="51"/>
<wire x1="49.53" y1="43.18" x2="52.07" y2="43.18" width="0.127" layer="51"/>
<wire x1="52.07" y1="43.18" x2="52.07" y2="27.94" width="0.127" layer="51"/>
<wire x1="52.07" y1="27.94" x2="49.53" y2="27.94" width="0.127" layer="51"/>
<wire x1="49.53" y1="27.94" x2="49.53" y2="43.18" width="0.127" layer="51"/>
<wire x1="49.53" y1="25.4" x2="52.07" y2="25.4" width="0.127" layer="51"/>
<wire x1="52.07" y1="25.4" x2="52.07" y2="10.16" width="0.127" layer="51"/>
<wire x1="52.07" y1="10.16" x2="49.53" y2="10.16" width="0.127" layer="51"/>
<wire x1="49.53" y1="10.16" x2="49.53" y2="25.4" width="0.127" layer="51"/>
<pad name="RES" x="50.8" y="11.43" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="50.8" y="13.97" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V" x="50.8" y="16.51" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="50.8" y="19.05" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="50.8" y="21.59" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="50.8" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="50.8" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="50.8" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="50.8" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="50.8" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="50.8" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RX" x="2.54" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="TX" x="2.54" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D2" x="2.54" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D3" x="2.54" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D4" x="2.54" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D5" x="2.54" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D6" x="2.54" y="26.67" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D7" x="2.54" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D8" x="2.54" y="20.32" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D9" x="2.54" y="17.78" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D10" x="2.54" y="15.24" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D11" x="2.54" y="12.7" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D12" x="2.54" y="10.16" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D13" x="2.54" y="7.62" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@2" x="2.54" y="5.08" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="2.54" y="2.54" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.7332" y="19.558" size="1.016" layer="51" ratio="15" rot="R180">GND</text>
<text x="49.7332" y="22.098" size="1.016" layer="51" ratio="15" rot="R180">GND</text>
<text x="49.7332" y="17.018" size="1.016" layer="51" ratio="15" rot="R180">+5V</text>
<text x="49.7332" y="11.938" size="1.016" layer="51" ratio="15" rot="R180">Reset</text>
<text x="49.7332" y="24.638" size="1.016" layer="51" ratio="15" rot="R180">Vin</text>
<text x="49.7332" y="14.478" size="1.016" layer="51" ratio="15" rot="R180">+3.3V</text>
<text x="49.7332" y="29.718" size="1.016" layer="51" ratio="15" rot="R180">0</text>
<text x="49.7332" y="32.258" size="1.016" layer="51" ratio="15" rot="R180">1</text>
<text x="49.7332" y="34.798" size="1.016" layer="51" ratio="15" rot="R180">2</text>
<text x="49.7332" y="37.338" size="1.016" layer="51" ratio="15" rot="R180">3</text>
<text x="49.7332" y="39.878" size="1.016" layer="51" ratio="15" rot="R180">4</text>
<text x="49.7332" y="42.418" size="1.016" layer="51" ratio="15" rot="R180">5</text>
<text x="47.1932" y="39.497" size="1.016" layer="51" ratio="15" rot="R270">Analog In</text>
<text x="3.81" y="4.572" size="1.016" layer="51" ratio="15">GND</text>
<text x="3.81" y="7.112" size="1.016" layer="51" ratio="15">13</text>
<text x="3.81" y="9.652" size="1.016" layer="51" ratio="15">12</text>
<text x="3.81" y="12.192" size="1.016" layer="51" ratio="15">11</text>
<text x="3.81" y="2.032" size="1.016" layer="51" ratio="15">Aref</text>
<text x="3.81" y="14.732" size="1.016" layer="51" ratio="15">10</text>
<text x="3.81" y="17.272" size="1.016" layer="51" ratio="15">9</text>
<text x="3.81" y="19.812" size="1.016" layer="51" ratio="15">8</text>
<text x="3.81" y="23.622" size="1.016" layer="51" ratio="15">7</text>
<text x="3.81" y="26.162" size="1.016" layer="51" ratio="15">6</text>
<text x="3.81" y="28.702" size="1.016" layer="51" ratio="15">5</text>
<text x="3.81" y="31.242" size="1.016" layer="51" ratio="15">4</text>
<text x="3.81" y="33.782" size="1.016" layer="51" ratio="15">3</text>
<text x="3.81" y="36.322" size="1.016" layer="51" ratio="15">2</text>
<text x="3.81" y="38.862" size="1.016" layer="51" ratio="15">TX</text>
<text x="3.81" y="41.402" size="1.016" layer="51" ratio="15">RX</text>
<text x="6.81" y="12.192" size="1.016" layer="51" ratio="15">PWM</text>
<text x="6.81" y="14.732" size="1.016" layer="51" ratio="15">PWM</text>
<text x="6.81" y="17.272" size="1.016" layer="51" ratio="15">PWM</text>
<text x="6.81" y="26.162" size="1.016" layer="51" ratio="15">PWM</text>
<text x="6.81" y="28.702" size="1.016" layer="51" ratio="15">PWM</text>
<text x="6.81" y="33.782" size="1.016" layer="51" ratio="15">PWM</text>
</package>
<package name="DUEMILANOVE_SHIELD_NOHOLES">
<wire x1="2.54" y1="0" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="9.5" y1="0" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="0" x2="50.8" y2="0" width="0.254" layer="51"/>
<wire x1="50.8" y1="0" x2="53.34" y2="2.54" width="0.254" layer="51"/>
<wire x1="53.34" y1="57.15" x2="50.8" y2="57.15" width="0.254" layer="51"/>
<wire x1="50.8" y1="57.15" x2="48.26" y2="59.69" width="0.254" layer="51"/>
<wire x1="0" y1="55.88" x2="0" y2="2.54" width="0.254" layer="51"/>
<wire x1="0" y1="2.54" x2="2.54" y2="0" width="0.254" layer="51"/>
<wire x1="48.26" y1="59.69" x2="15.24" y2="59.69" width="0.254" layer="51"/>
<wire x1="15.24" y1="59.69" x2="12.7" y2="57.15" width="0.254" layer="51"/>
<wire x1="12.7" y1="57.15" x2="1.27" y2="57.15" width="0.254" layer="51"/>
<wire x1="1.27" y1="57.15" x2="0" y2="55.88" width="0.254" layer="51"/>
<wire x1="53.34" y1="2.54" x2="53.34" y2="57.15" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="21.7" y2="-15.5" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="49.2" y2="-10.3" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="-15.5" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="40.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="49.2" y1="-10.3" x2="49.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="1.27" y1="55.88" x2="3.81" y2="55.88" width="0.127" layer="51"/>
<wire x1="3.81" y1="55.88" x2="3.81" y2="35.56" width="0.127" layer="51"/>
<wire x1="3.81" y1="35.56" x2="1.27" y2="35.56" width="0.127" layer="51"/>
<wire x1="1.27" y1="35.56" x2="1.27" y2="55.88" width="0.127" layer="51"/>
<wire x1="1.27" y1="34.29" x2="3.81" y2="34.29" width="0.127" layer="51"/>
<wire x1="3.81" y1="34.29" x2="3.81" y2="13.97" width="0.127" layer="51"/>
<wire x1="3.81" y1="13.97" x2="1.27" y2="13.97" width="0.127" layer="51"/>
<wire x1="1.27" y1="13.97" x2="1.27" y2="34.29" width="0.127" layer="51"/>
<wire x1="49.53" y1="55.88" x2="52.07" y2="55.88" width="0.127" layer="51"/>
<wire x1="52.07" y1="55.88" x2="52.07" y2="40.64" width="0.127" layer="51"/>
<wire x1="52.07" y1="40.64" x2="49.53" y2="40.64" width="0.127" layer="51"/>
<wire x1="49.53" y1="40.64" x2="49.53" y2="55.88" width="0.127" layer="51"/>
<wire x1="49.53" y1="38.1" x2="52.07" y2="38.1" width="0.127" layer="51"/>
<wire x1="52.07" y1="38.1" x2="52.07" y2="22.86" width="0.127" layer="51"/>
<wire x1="52.07" y1="22.86" x2="49.53" y2="22.86" width="0.127" layer="51"/>
<wire x1="49.53" y1="22.86" x2="49.53" y2="38.1" width="0.127" layer="51"/>
<pad name="RES" x="50.8" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="50.8" y="26.67" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V" x="50.8" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="50.8" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="50.8" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="50.8" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="50.8" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="50.8" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="50.8" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="50.8" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="50.8" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RX" x="2.54" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="TX" x="2.54" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D2" x="2.54" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D3" x="2.54" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D4" x="2.54" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D5" x="2.54" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D6" x="2.54" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D7" x="2.54" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D8" x="2.54" y="33.02" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D9" x="2.54" y="30.48" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D10" x="2.54" y="27.94" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D11" x="2.54" y="25.4" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D12" x="2.54" y="22.86" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D13" x="2.54" y="20.32" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@2" x="2.54" y="17.78" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="2.54" y="15.24" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.149" y="34.798" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.149" y="29.718" size="1.016" layer="21" ratio="15" rot="R180">5V</text>
<text x="49.149" y="24.638" size="1.016" layer="21" ratio="15" rot="R180">RST</text>
<text x="49.1617" y="37.338" size="1.016" layer="21" ratio="15" rot="R180">VIN</text>
<text x="49.149" y="27.178" size="1.016" layer="21" ratio="15" rot="R180">3V3</text>
<text x="49.1617" y="42.418" size="1.016" layer="21" ratio="15" rot="R180">0</text>
<text x="49.1617" y="44.958" size="1.016" layer="21" ratio="15" rot="R180">1</text>
<text x="49.1617" y="47.498" size="1.016" layer="21" ratio="15" rot="R180">2</text>
<text x="49.1617" y="50.038" size="1.016" layer="21" ratio="15" rot="R180">3</text>
<text x="49.1617" y="52.578" size="1.016" layer="21" ratio="15" rot="R180">4</text>
<text x="49.1617" y="55.118" size="1.016" layer="21" ratio="15" rot="R180">5</text>
<text x="46.8757" y="52.197" size="1.016" layer="21" ratio="15" rot="R270">Analog In</text>
<text x="4.064" y="17.272" size="1.016" layer="21" ratio="15">GND</text>
<text x="4.064" y="19.812" size="1.016" layer="21" ratio="15">13</text>
<text x="4.064" y="22.352" size="1.016" layer="21" ratio="15">12</text>
<text x="4.064" y="24.892" size="1.016" layer="21" ratio="15">11</text>
<text x="4.064" y="14.732" size="1.016" layer="21" ratio="15">AREF</text>
<text x="4.064" y="27.432" size="1.016" layer="21" ratio="15">10</text>
<text x="4.064" y="29.972" size="1.016" layer="21" ratio="15">9</text>
<text x="4.064" y="32.512" size="1.016" layer="21" ratio="15">8</text>
<text x="4.064" y="36.322" size="1.016" layer="21" ratio="15">7</text>
<text x="4.064" y="38.862" size="1.016" layer="21" ratio="15">6</text>
<text x="4.064" y="41.402" size="1.016" layer="21" ratio="15">5</text>
<text x="4.064" y="43.942" size="1.016" layer="21" ratio="15">4</text>
<text x="4.064" y="46.482" size="1.016" layer="21" ratio="15">3</text>
<text x="4.064" y="49.022" size="1.016" layer="21" ratio="15">2</text>
<text x="4.064" y="51.562" size="1.016" layer="21" ratio="15">TX</text>
<text x="4.064" y="54.102" size="1.016" layer="21" ratio="15">RX</text>
<text x="49.149" y="32.258" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
</package>
<package name="DUEMILANOVE_SHIELD_LONGPADS">
<wire x1="2.54" y1="0" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="9.5" y1="0" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="0" x2="50.8" y2="0" width="0.254" layer="51"/>
<wire x1="50.8" y1="0" x2="53.34" y2="2.54" width="0.254" layer="51"/>
<wire x1="53.34" y1="57.15" x2="50.8" y2="57.15" width="0.254" layer="51"/>
<wire x1="50.8" y1="57.15" x2="48.26" y2="59.69" width="0.254" layer="51"/>
<wire x1="0" y1="55.88" x2="0" y2="2.54" width="0.254" layer="51"/>
<wire x1="0" y1="2.54" x2="2.54" y2="0" width="0.254" layer="51"/>
<wire x1="48.26" y1="59.69" x2="15.24" y2="59.69" width="0.254" layer="51"/>
<wire x1="15.24" y1="59.69" x2="12.7" y2="57.15" width="0.254" layer="51"/>
<wire x1="12.7" y1="57.15" x2="1.27" y2="57.15" width="0.254" layer="51"/>
<wire x1="1.27" y1="57.15" x2="0" y2="55.88" width="0.254" layer="51"/>
<wire x1="53.34" y1="2.54" x2="53.34" y2="57.15" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="21.7" y2="-15.5" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="49.2" y2="-10.3" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="-15.5" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="40.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="49.2" y1="-10.3" x2="49.2" y2="-0.1" width="0.254" layer="51"/>
<circle x="2.54" y="6.35" radius="1.905" width="0.127" layer="42"/>
<circle x="2.54" y="6.35" radius="1.905" width="0.127" layer="41"/>
<circle x="45.72" y="57.15" radius="1.905" width="0.127" layer="42"/>
<circle x="45.72" y="57.15" radius="1.905" width="0.127" layer="41"/>
<pad name="RES" x="50.8" y="24.13" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="3.3V" x="50.8" y="26.67" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="5V" x="50.8" y="29.21" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="GND@0" x="50.8" y="31.75" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="GND@1" x="50.8" y="34.29" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="VIN" x="50.8" y="36.83" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="A0" x="50.8" y="41.91" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="A1" x="50.8" y="44.45" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="A2" x="50.8" y="46.99" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="A3" x="50.8" y="49.53" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="A4" x="50.8" y="52.07" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="A5" x="50.8" y="54.61" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="RX" x="2.54" y="54.61" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="TX" x="2.54" y="52.07" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D2" x="2.54" y="49.53" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D3" x="2.54" y="46.99" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D4" x="2.54" y="44.45" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D5" x="2.54" y="41.91" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D6" x="2.54" y="39.37" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D7" x="2.54" y="36.83" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D8" x="2.54" y="33.02" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D9" x="2.54" y="30.48" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D10" x="2.54" y="27.94" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D11" x="2.54" y="25.4" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D12" x="2.54" y="22.86" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="D13" x="2.54" y="20.32" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="GND@2" x="2.54" y="17.78" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<pad name="AREF" x="2.54" y="15.24" drill="1.016" diameter="1.8796" shape="long" rot="R180"/>
<text x="49.4157" y="32.258" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.4157" y="34.798" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.4157" y="29.718" size="1.016" layer="21" ratio="15" rot="R180">+5V</text>
<text x="49.4157" y="24.638" size="1.016" layer="21" ratio="15" rot="R180">Reset</text>
<text x="49.4157" y="37.338" size="1.016" layer="21" ratio="15" rot="R180">Vin</text>
<text x="49.4157" y="27.178" size="1.016" layer="21" ratio="15" rot="R180">+3.3V</text>
<text x="49.4157" y="42.418" size="1.016" layer="21" ratio="15" rot="R180">0</text>
<text x="49.4157" y="44.958" size="1.016" layer="21" ratio="15" rot="R180">1</text>
<text x="49.4157" y="47.498" size="1.016" layer="21" ratio="15" rot="R180">2</text>
<text x="49.4157" y="50.038" size="1.016" layer="21" ratio="15" rot="R180">3</text>
<text x="49.4157" y="52.578" size="1.016" layer="21" ratio="15" rot="R180">4</text>
<text x="49.4157" y="55.118" size="1.016" layer="21" ratio="15" rot="R180">5</text>
<text x="46.8757" y="52.197" size="1.016" layer="21" ratio="15" rot="R270">Analog In</text>
<text x="3.81" y="17.272" size="1.016" layer="21" ratio="15">GND</text>
<text x="3.81" y="19.812" size="1.016" layer="21" ratio="15">13</text>
<text x="3.81" y="22.352" size="1.016" layer="21" ratio="15">12</text>
<text x="3.81" y="24.892" size="1.016" layer="21" ratio="15">11</text>
<text x="3.81" y="14.732" size="1.016" layer="21" ratio="15">Aref</text>
<text x="3.81" y="27.432" size="1.016" layer="21" ratio="15">10</text>
<text x="3.81" y="29.972" size="1.016" layer="21" ratio="15">9</text>
<text x="3.81" y="32.512" size="1.016" layer="21" ratio="15">8</text>
<text x="3.81" y="36.322" size="1.016" layer="21" ratio="15">7</text>
<text x="3.81" y="38.862" size="1.016" layer="21" ratio="15">6</text>
<text x="3.81" y="41.402" size="1.016" layer="21" ratio="15">5</text>
<text x="3.81" y="43.942" size="1.016" layer="21" ratio="15">4</text>
<text x="3.81" y="46.482" size="1.016" layer="21" ratio="15">3</text>
<text x="3.81" y="49.022" size="1.016" layer="21" ratio="15">2</text>
<text x="3.81" y="51.562" size="1.016" layer="21" ratio="15">TX</text>
<text x="3.81" y="54.102" size="1.016" layer="21" ratio="15">RX</text>
<hole x="45.72" y="57.15" drill="3.302"/>
<hole x="2.54" y="6.35" drill="3.302"/>
</package>
<package name="DUEMILANOVE_SHIELD_NOLABELS">
<wire x1="2.54" y1="0" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="9.5" y1="0" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="0" x2="50.8" y2="0" width="0.254" layer="51"/>
<wire x1="50.8" y1="0" x2="53.34" y2="2.54" width="0.254" layer="51"/>
<wire x1="53.34" y1="57.15" x2="50.8" y2="57.15" width="0.254" layer="51"/>
<wire x1="50.8" y1="57.15" x2="48.26" y2="59.69" width="0.254" layer="51"/>
<wire x1="0" y1="55.88" x2="0" y2="2.54" width="0.254" layer="51"/>
<wire x1="0" y1="2.54" x2="2.54" y2="0" width="0.254" layer="51"/>
<wire x1="48.26" y1="59.69" x2="15.24" y2="59.69" width="0.254" layer="51"/>
<wire x1="15.24" y1="59.69" x2="12.7" y2="57.15" width="0.254" layer="51"/>
<wire x1="12.7" y1="57.15" x2="1.27" y2="57.15" width="0.254" layer="51"/>
<wire x1="1.27" y1="57.15" x2="0" y2="55.88" width="0.254" layer="51"/>
<wire x1="53.34" y1="2.54" x2="53.34" y2="57.15" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="21.7" y2="-15.5" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="49.2" y2="-10.3" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="-15.5" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="40.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="49.2" y1="-10.3" x2="49.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="1.27" y1="55.88" x2="3.81" y2="55.88" width="0.127" layer="51"/>
<wire x1="3.81" y1="55.88" x2="3.81" y2="35.56" width="0.127" layer="51"/>
<wire x1="3.81" y1="35.56" x2="1.27" y2="35.56" width="0.127" layer="51"/>
<wire x1="1.27" y1="35.56" x2="1.27" y2="55.88" width="0.127" layer="51"/>
<wire x1="1.27" y1="34.29" x2="3.81" y2="34.29" width="0.127" layer="51"/>
<wire x1="3.81" y1="34.29" x2="3.81" y2="13.97" width="0.127" layer="51"/>
<wire x1="3.81" y1="13.97" x2="1.27" y2="13.97" width="0.127" layer="51"/>
<wire x1="1.27" y1="13.97" x2="1.27" y2="34.29" width="0.127" layer="51"/>
<wire x1="49.53" y1="38.1" x2="52.07" y2="38.1" width="0.127" layer="51"/>
<wire x1="52.07" y1="38.1" x2="52.07" y2="22.86" width="0.127" layer="51"/>
<wire x1="52.07" y1="22.86" x2="49.53" y2="22.86" width="0.127" layer="51"/>
<wire x1="49.53" y1="22.86" x2="49.53" y2="38.1" width="0.127" layer="51"/>
<wire x1="49.53" y1="55.88" x2="52.07" y2="55.88" width="0.127" layer="51"/>
<wire x1="52.07" y1="55.88" x2="52.07" y2="40.64" width="0.127" layer="51"/>
<wire x1="52.07" y1="40.64" x2="49.53" y2="40.64" width="0.127" layer="51"/>
<wire x1="49.53" y1="40.64" x2="49.53" y2="55.88" width="0.127" layer="51"/>
<circle x="2.54" y="6.35" radius="1.905" width="0.127" layer="42"/>
<circle x="2.54" y="6.35" radius="1.905" width="0.127" layer="41"/>
<circle x="45.72" y="57.15" radius="1.905" width="0.127" layer="42"/>
<circle x="45.72" y="57.15" radius="1.905" width="0.127" layer="41"/>
<pad name="RES" x="50.8" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="50.8" y="26.67" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V" x="50.8" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="50.8" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="50.8" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="50.8" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="50.8" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="50.8" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="50.8" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="50.8" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="50.8" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RX" x="2.54" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="TX" x="2.54" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D2" x="2.54" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D3" x="2.54" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D4" x="2.54" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D5" x="2.54" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D6" x="2.54" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D7" x="2.54" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D8" x="2.54" y="33.02" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D9" x="2.54" y="30.48" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D10" x="2.54" y="27.94" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D11" x="2.54" y="25.4" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D12" x="2.54" y="22.86" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D13" x="2.54" y="20.32" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@2" x="2.54" y="17.78" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="2.54" y="15.24" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.2887" y="32.258" size="1.016" layer="51" ratio="15" rot="R180">GND</text>
<text x="49.2887" y="34.798" size="1.016" layer="51" ratio="15" rot="R180">GND</text>
<text x="49.2887" y="29.718" size="1.016" layer="51" ratio="15" rot="R180">5V</text>
<text x="49.2887" y="24.638" size="1.016" layer="51" ratio="15" rot="R180">RST</text>
<text x="49.2887" y="37.338" size="1.016" layer="51" ratio="15" rot="R180">VIN</text>
<text x="49.2887" y="27.178" size="1.016" layer="51" ratio="15" rot="R180">3.3V</text>
<text x="49.2887" y="42.418" size="1.016" layer="51" ratio="15" rot="R180">0</text>
<text x="49.2887" y="44.958" size="1.016" layer="51" ratio="15" rot="R180">1</text>
<text x="49.2887" y="47.498" size="1.016" layer="51" ratio="15" rot="R180">2</text>
<text x="49.2887" y="50.038" size="1.016" layer="51" ratio="15" rot="R180">3</text>
<text x="49.2887" y="52.578" size="1.016" layer="51" ratio="15" rot="R180">4</text>
<text x="49.2887" y="55.118" size="1.016" layer="51" ratio="15" rot="R180">5</text>
<text x="46.7487" y="52.197" size="1.016" layer="51" ratio="15" rot="R270">Analog In</text>
<text x="3.937" y="17.272" size="1.016" layer="51" ratio="15">GND</text>
<text x="3.937" y="19.812" size="1.016" layer="51" ratio="15">13</text>
<text x="3.937" y="22.352" size="1.016" layer="51" ratio="15">12</text>
<text x="3.937" y="24.892" size="1.016" layer="51" ratio="15">11</text>
<text x="3.937" y="14.732" size="1.016" layer="51" ratio="15">AREF</text>
<text x="3.937" y="27.432" size="1.016" layer="51" ratio="15">10</text>
<text x="3.937" y="29.972" size="1.016" layer="51" ratio="15">9</text>
<text x="3.937" y="32.512" size="1.016" layer="51" ratio="15">8</text>
<text x="3.937" y="36.322" size="1.016" layer="51" ratio="15">7</text>
<text x="3.937" y="38.862" size="1.016" layer="51" ratio="15">6</text>
<text x="3.937" y="41.402" size="1.016" layer="51" ratio="15">5</text>
<text x="3.937" y="43.942" size="1.016" layer="51" ratio="15">4</text>
<text x="3.937" y="46.482" size="1.016" layer="51" ratio="15">3</text>
<text x="3.937" y="49.022" size="1.016" layer="51" ratio="15">2</text>
<text x="3.937" y="51.562" size="1.016" layer="51" ratio="15">TX</text>
<text x="3.937" y="54.102" size="1.016" layer="51" ratio="15">RX</text>
<hole x="45.72" y="57.15" drill="3.302"/>
<hole x="2.54" y="6.35" drill="3.302"/>
</package>
<package name="DUEMILANOVE_SHIELD_NOHOLES_NOLABELS">
<wire x1="2.54" y1="0" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="9.5" y1="0" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="0" x2="50.8" y2="0" width="0.254" layer="51"/>
<wire x1="50.8" y1="0" x2="53.34" y2="2.54" width="0.254" layer="51"/>
<wire x1="53.34" y1="57.15" x2="50.8" y2="57.15" width="0.254" layer="51"/>
<wire x1="50.8" y1="57.15" x2="48.26" y2="59.69" width="0.254" layer="51"/>
<wire x1="0" y1="55.88" x2="0" y2="2.54" width="0.254" layer="51"/>
<wire x1="0" y1="2.54" x2="2.54" y2="0" width="0.254" layer="51"/>
<wire x1="48.26" y1="59.69" x2="15.24" y2="59.69" width="0.254" layer="51"/>
<wire x1="15.24" y1="59.69" x2="12.7" y2="57.15" width="0.254" layer="51"/>
<wire x1="12.7" y1="57.15" x2="1.27" y2="57.15" width="0.254" layer="51"/>
<wire x1="1.27" y1="57.15" x2="0" y2="55.88" width="0.254" layer="51"/>
<wire x1="53.34" y1="2.54" x2="53.34" y2="57.15" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="21.7" y2="-15.5" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="49.2" y2="-10.3" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="-15.5" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="40.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="49.2" y1="-10.3" x2="49.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="1.27" y1="55.88" x2="3.81" y2="55.88" width="0.127" layer="51"/>
<wire x1="3.81" y1="55.88" x2="3.81" y2="35.56" width="0.127" layer="51"/>
<wire x1="3.81" y1="35.56" x2="1.27" y2="35.56" width="0.127" layer="51"/>
<wire x1="1.27" y1="35.56" x2="1.27" y2="55.88" width="0.127" layer="51"/>
<wire x1="1.27" y1="34.29" x2="3.81" y2="34.29" width="0.127" layer="51"/>
<wire x1="3.81" y1="34.29" x2="3.81" y2="13.97" width="0.127" layer="51"/>
<wire x1="3.81" y1="13.97" x2="1.27" y2="13.97" width="0.127" layer="51"/>
<wire x1="1.27" y1="13.97" x2="1.27" y2="34.29" width="0.127" layer="51"/>
<wire x1="49.53" y1="55.88" x2="52.07" y2="55.88" width="0.127" layer="51"/>
<wire x1="52.07" y1="55.88" x2="52.07" y2="40.64" width="0.127" layer="51"/>
<wire x1="52.07" y1="40.64" x2="49.53" y2="40.64" width="0.127" layer="51"/>
<wire x1="49.53" y1="40.64" x2="49.53" y2="55.88" width="0.127" layer="51"/>
<wire x1="49.53" y1="38.1" x2="52.07" y2="38.1" width="0.127" layer="51"/>
<wire x1="52.07" y1="38.1" x2="52.07" y2="22.86" width="0.127" layer="51"/>
<wire x1="52.07" y1="22.86" x2="49.53" y2="22.86" width="0.127" layer="51"/>
<wire x1="49.53" y1="22.86" x2="49.53" y2="38.1" width="0.127" layer="51"/>
<pad name="RES" x="50.8" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="50.8" y="26.67" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V" x="50.8" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="50.8" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="50.8" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="50.8" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="50.8" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="50.8" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="50.8" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="50.8" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="50.8" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RX" x="2.54" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="TX" x="2.54" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D2" x="2.54" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D3" x="2.54" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D4" x="2.54" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D5" x="2.54" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D6" x="2.54" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D7" x="2.54" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D8" x="2.54" y="33.02" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D9" x="2.54" y="30.48" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D10" x="2.54" y="27.94" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D11" x="2.54" y="25.4" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D12" x="2.54" y="22.86" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D13" x="2.54" y="20.32" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@2" x="2.54" y="17.78" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="2.54" y="15.24" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.149" y="34.798" size="1.016" layer="51" ratio="15" rot="R180">GND</text>
<text x="49.149" y="29.718" size="1.016" layer="51" ratio="15" rot="R180">5V</text>
<text x="49.149" y="24.638" size="1.016" layer="51" ratio="15" rot="R180">RST</text>
<text x="49.1617" y="37.338" size="1.016" layer="51" ratio="15" rot="R180">VIN</text>
<text x="49.149" y="27.178" size="1.016" layer="51" ratio="15" rot="R180">3V3</text>
<text x="49.1617" y="42.418" size="1.016" layer="51" ratio="15" rot="R180">0</text>
<text x="49.1617" y="44.958" size="1.016" layer="51" ratio="15" rot="R180">1</text>
<text x="49.1617" y="47.498" size="1.016" layer="51" ratio="15" rot="R180">2</text>
<text x="49.1617" y="50.038" size="1.016" layer="51" ratio="15" rot="R180">3</text>
<text x="49.1617" y="52.578" size="1.016" layer="51" ratio="15" rot="R180">4</text>
<text x="49.1617" y="55.118" size="1.016" layer="51" ratio="15" rot="R180">5</text>
<text x="46.8757" y="52.197" size="1.016" layer="51" ratio="15" rot="R270">Analog In</text>
<text x="4.064" y="17.272" size="1.016" layer="51" ratio="15">GND</text>
<text x="4.064" y="19.812" size="1.016" layer="51" ratio="15">13</text>
<text x="4.064" y="22.352" size="1.016" layer="51" ratio="15">12</text>
<text x="4.064" y="24.892" size="1.016" layer="51" ratio="15">11</text>
<text x="4.064" y="14.732" size="1.016" layer="51" ratio="15">AREF</text>
<text x="4.064" y="27.432" size="1.016" layer="51" ratio="15">10</text>
<text x="4.064" y="29.972" size="1.016" layer="51" ratio="15">9</text>
<text x="4.064" y="32.512" size="1.016" layer="51" ratio="15">8</text>
<text x="4.064" y="36.322" size="1.016" layer="51" ratio="15">7</text>
<text x="4.064" y="38.862" size="1.016" layer="51" ratio="15">6</text>
<text x="4.064" y="41.402" size="1.016" layer="51" ratio="15">5</text>
<text x="4.064" y="43.942" size="1.016" layer="51" ratio="15">4</text>
<text x="4.064" y="46.482" size="1.016" layer="51" ratio="15">3</text>
<text x="4.064" y="49.022" size="1.016" layer="51" ratio="15">2</text>
<text x="4.064" y="51.562" size="1.016" layer="51" ratio="15">TX</text>
<text x="4.064" y="54.102" size="1.016" layer="51" ratio="15">RX</text>
<text x="49.149" y="32.258" size="1.016" layer="51" ratio="15" rot="R180">GND</text>
</package>
<package name="1X06-SMD">
<wire x1="7.62" y1="1.25" x2="-7.62" y2="1.25" width="0.127" layer="51"/>
<wire x1="-7.62" y1="1.25" x2="-7.62" y2="-1.25" width="0.127" layer="51"/>
<wire x1="-7.62" y1="-1.25" x2="-6.35" y2="-1.25" width="0.127" layer="51"/>
<wire x1="-6.35" y1="-1.25" x2="-3.81" y2="-1.25" width="0.127" layer="51"/>
<wire x1="-3.81" y1="-1.25" x2="-1.27" y2="-1.25" width="0.127" layer="51"/>
<wire x1="-1.27" y1="-1.25" x2="1.27" y2="-1.25" width="0.127" layer="51"/>
<wire x1="1.27" y1="-1.25" x2="3.81" y2="-1.25" width="0.127" layer="51"/>
<wire x1="3.81" y1="-1.25" x2="6.35" y2="-1.25" width="0.127" layer="51"/>
<wire x1="6.35" y1="-1.25" x2="7.62" y2="-1.25" width="0.127" layer="51"/>
<wire x1="7.62" y1="-1.25" x2="7.62" y2="1.25" width="0.127" layer="51"/>
<wire x1="6.35" y1="-1.25" x2="6.35" y2="-7.25" width="0.127" layer="51"/>
<wire x1="3.81" y1="-1.25" x2="3.81" y2="-7.25" width="0.127" layer="51"/>
<wire x1="1.27" y1="-1.25" x2="1.27" y2="-7.25" width="0.127" layer="51"/>
<wire x1="-1.27" y1="-1.25" x2="-1.27" y2="-7.25" width="0.127" layer="51"/>
<wire x1="-3.81" y1="-1.25" x2="-3.81" y2="-7.25" width="0.127" layer="51"/>
<wire x1="-6.35" y1="-1.25" x2="-6.35" y2="-7.25" width="0.127" layer="51"/>
<smd name="4" x="1.27" y="5" dx="3" dy="1" layer="1" rot="R90"/>
<smd name="5" x="3.81" y="5" dx="3" dy="1" layer="1" rot="R90"/>
<smd name="6" x="6.35" y="5" dx="3" dy="1" layer="1" rot="R90"/>
<smd name="3" x="-1.27" y="5" dx="3" dy="1" layer="1" rot="R90"/>
<smd name="2" x="-3.81" y="5" dx="3" dy="1" layer="1" rot="R90"/>
<smd name="1" x="-6.35" y="5" dx="3" dy="1" layer="1" rot="R90"/>
<hole x="-5.08" y="0" drill="1.4"/>
<hole x="5.08" y="0" drill="1.4"/>
</package>
<package name="1X06">
<wire x1="11.43" y1="0.635" x2="12.065" y2="1.27" width="0.2032" layer="21"/>
<wire x1="12.065" y1="1.27" x2="13.335" y2="1.27" width="0.2032" layer="21"/>
<wire x1="13.335" y1="1.27" x2="13.97" y2="0.635" width="0.2032" layer="21"/>
<wire x1="13.97" y1="-0.635" x2="13.335" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="13.335" y1="-1.27" x2="12.065" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="12.065" y1="-1.27" x2="11.43" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="6.985" y1="1.27" x2="8.255" y2="1.27" width="0.2032" layer="21"/>
<wire x1="8.255" y1="1.27" x2="8.89" y2="0.635" width="0.2032" layer="21"/>
<wire x1="8.89" y1="-0.635" x2="8.255" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="8.89" y1="0.635" x2="9.525" y2="1.27" width="0.2032" layer="21"/>
<wire x1="9.525" y1="1.27" x2="10.795" y2="1.27" width="0.2032" layer="21"/>
<wire x1="10.795" y1="1.27" x2="11.43" y2="0.635" width="0.2032" layer="21"/>
<wire x1="11.43" y1="-0.635" x2="10.795" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="10.795" y1="-1.27" x2="9.525" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="9.525" y1="-1.27" x2="8.89" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="6.985" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="6.985" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="8.255" y1="-1.27" x2="6.985" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="13.97" y1="0.635" x2="13.97" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="4" x="7.62" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5" x="10.16" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="6" x="12.7" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="12.446" y1="-0.254" x2="12.954" y2="0.254" layer="51"/>
<rectangle x1="9.906" y1="-0.254" x2="10.414" y2="0.254" layer="51"/>
<rectangle x1="7.366" y1="-0.254" x2="7.874" y2="0.254" layer="51"/>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
</package>
<package name="MOLEX-1X6-RA_LOCK">
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="3.175" width="0.127" layer="21"/>
<wire x1="13.97" y1="0.635" x2="13.97" y2="3.175" width="0.127" layer="21"/>
<wire x1="13.97" y1="0.635" x2="-1.27" y2="0.635" width="0.127" layer="21"/>
<wire x1="13.97" y1="3.175" x2="12.7" y2="3.175" width="0.127" layer="21"/>
<wire x1="12.7" y1="3.175" x2="0" y2="3.175" width="0.127" layer="21"/>
<wire x1="0" y1="3.175" x2="-1.27" y2="3.175" width="0.127" layer="21"/>
<wire x1="0" y1="3.175" x2="0" y2="7.62" width="0.127" layer="21"/>
<wire x1="0" y1="7.62" x2="12.7" y2="7.62" width="0.127" layer="21"/>
<wire x1="12.7" y1="7.62" x2="12.7" y2="3.175" width="0.127" layer="21"/>
<pad name="1" x="0" y="0.127" drill="1.016" diameter="1.8796" shape="square"/>
<pad name="2" x="2.54" y="-0.127" drill="1.016" diameter="1.8796"/>
<pad name="3" x="5.08" y="0.127" drill="1.016" diameter="1.8796"/>
<pad name="4" x="7.62" y="-0.127" drill="1.016" diameter="1.8796"/>
<pad name="5" x="10.16" y="0.127" drill="1.016" diameter="1.8796"/>
<pad name="6" x="12.7" y="-0.127" drill="1.016" diameter="1.8796"/>
<text x="-0.889" y="-2.794" size="1.27" layer="25">&gt;NAME</text>
<text x="8.001" y="-2.794" size="1.27" layer="25">&gt;VALUE</text>
</package>
<package name="1X06_LONGPADS">
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="13.97" y1="0.635" x2="13.97" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
<pad name="3" x="5.08" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
<pad name="4" x="7.62" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
<pad name="5" x="10.16" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
<pad name="6" x="12.7" y="0" drill="1.1176" diameter="1.8796" shape="long" rot="R90"/>
<text x="-1.3462" y="2.4638" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.81" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="12.446" y1="-0.254" x2="12.954" y2="0.254" layer="51"/>
<rectangle x1="9.906" y1="-0.254" x2="10.414" y2="0.254" layer="51"/>
<rectangle x1="7.366" y1="-0.254" x2="7.874" y2="0.254" layer="51"/>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
</package>
<package name="1X06_LOCK">
<description>This footprint was designed to help hold the alignment of a through-hole component (i.e.  6-pin header) while soldering it into place.  
You may notice that each hole has been shifted either up or down by 0.005 of an inch from it's more standard position (which is a perfectly straight line).  
This slight alteration caused the pins (the squares in the middle) to touch the edges of the holes.  Because they are alternating, it causes a "brace" 
to hold the component in place.  0.005 has proven to be the perfect amount of "off-center" position when using our standard breakaway headers.
Although looks a little odd when you look at the bare footprint, once you have a header in there, the alteration is very hard to notice.  Also,
if you push a header all the way into place, it is covered up entirely on the bottom side.  This idea of altering the position of holes to aid alignment 
will be further integrated into the Sparkfun Library for other footprints.  It can help hold any component with 3 or more connection pins.</description>
<wire x1="-1.27" y1="0.508" x2="-0.635" y2="1.143" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.143" x2="0.635" y2="1.143" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.143" x2="1.27" y2="0.508" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.508" x2="1.905" y2="1.143" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.143" x2="3.175" y2="1.143" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.143" x2="3.81" y2="0.508" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.508" x2="4.445" y2="1.143" width="0.2032" layer="21"/>
<wire x1="4.445" y1="1.143" x2="5.715" y2="1.143" width="0.2032" layer="21"/>
<wire x1="5.715" y1="1.143" x2="6.35" y2="0.508" width="0.2032" layer="21"/>
<wire x1="6.35" y1="0.508" x2="6.985" y2="1.143" width="0.2032" layer="21"/>
<wire x1="6.985" y1="1.143" x2="8.255" y2="1.143" width="0.2032" layer="21"/>
<wire x1="8.255" y1="1.143" x2="8.89" y2="0.508" width="0.2032" layer="21"/>
<wire x1="8.89" y1="0.508" x2="9.525" y2="1.143" width="0.2032" layer="21"/>
<wire x1="9.525" y1="1.143" x2="10.795" y2="1.143" width="0.2032" layer="21"/>
<wire x1="10.795" y1="1.143" x2="11.43" y2="0.508" width="0.2032" layer="21"/>
<wire x1="11.43" y1="0.508" x2="12.065" y2="1.143" width="0.2032" layer="21"/>
<wire x1="12.065" y1="1.143" x2="13.335" y2="1.143" width="0.2032" layer="21"/>
<wire x1="13.335" y1="1.143" x2="13.97" y2="0.508" width="0.2032" layer="21"/>
<wire x1="13.97" y1="0.508" x2="13.97" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="13.97" y1="-0.762" x2="13.335" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="13.335" y1="-1.397" x2="12.065" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="12.065" y1="-1.397" x2="11.43" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="11.43" y1="-0.762" x2="10.795" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="10.795" y1="-1.397" x2="9.525" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="9.525" y1="-1.397" x2="8.89" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="8.89" y1="-0.762" x2="8.255" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="8.255" y1="-1.397" x2="6.985" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="6.985" y1="-1.397" x2="6.35" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.762" x2="5.715" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="5.715" y1="-1.397" x2="4.445" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="4.445" y1="-1.397" x2="3.81" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.762" x2="3.175" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.397" x2="1.905" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.397" x2="1.27" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.762" x2="0.635" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.397" x2="-0.635" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="-1.397" x2="-1.27" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.762" x2="-1.27" y2="0.508" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.508" x2="1.27" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.508" x2="3.81" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="6.35" y1="0.508" x2="6.35" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="8.89" y1="0.508" x2="8.89" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="11.43" y1="0.508" x2="11.43" y2="-0.762" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796"/>
<pad name="2" x="2.54" y="-0.254" drill="1.016" diameter="1.8796"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796"/>
<pad name="4" x="7.62" y="-0.254" drill="1.016" diameter="1.8796"/>
<pad name="5" x="10.16" y="0" drill="1.016" diameter="1.8796"/>
<pad name="6" x="12.7" y="-0.254" drill="1.016" diameter="1.8796"/>
<text x="-1.27" y="1.778" size="1.27" layer="25" font="vector">&gt;NAME</text>
<text x="-1.27" y="-3.302" size="1.27" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.2921" y1="-0.4191" x2="0.2921" y2="0.1651" layer="51"/>
<rectangle x1="2.2479" y1="-0.4191" x2="2.8321" y2="0.1651" layer="51"/>
<rectangle x1="4.7879" y1="-0.4191" x2="5.3721" y2="0.1651" layer="51"/>
<rectangle x1="7.3279" y1="-0.4191" x2="7.9121" y2="0.1651" layer="51"/>
<rectangle x1="9.8679" y1="-0.4191" x2="10.4521" y2="0.1651" layer="51"/>
<rectangle x1="12.4079" y1="-0.4191" x2="12.9921" y2="0.1651" layer="51"/>
</package>
<package name="1X06-KIT">
<description>&lt;h3&gt;1X06-KIT&lt;/h3&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="11.43" y1="0.635" x2="12.065" y2="1.27" width="0.2032" layer="51"/>
<wire x1="12.065" y1="1.27" x2="13.335" y2="1.27" width="0.2032" layer="51"/>
<wire x1="13.335" y1="1.27" x2="13.97" y2="0.635" width="0.2032" layer="51"/>
<wire x1="13.97" y1="-0.635" x2="13.335" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="13.335" y1="-1.27" x2="12.065" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="12.065" y1="-1.27" x2="11.43" y2="-0.635" width="0.2032" layer="51"/>
<wire x1="6.985" y1="1.27" x2="8.255" y2="1.27" width="0.2032" layer="51"/>
<wire x1="8.255" y1="1.27" x2="8.89" y2="0.635" width="0.2032" layer="51"/>
<wire x1="8.89" y1="-0.635" x2="8.255" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="8.89" y1="0.635" x2="9.525" y2="1.27" width="0.2032" layer="51"/>
<wire x1="9.525" y1="1.27" x2="10.795" y2="1.27" width="0.2032" layer="51"/>
<wire x1="10.795" y1="1.27" x2="11.43" y2="0.635" width="0.2032" layer="51"/>
<wire x1="11.43" y1="-0.635" x2="10.795" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="10.795" y1="-1.27" x2="9.525" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="9.525" y1="-1.27" x2="8.89" y2="-0.635" width="0.2032" layer="51"/>
<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="51"/>
<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="51"/>
<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="51"/>
<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="51"/>
<wire x1="6.985" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="51"/>
<wire x1="6.35" y1="-0.635" x2="6.985" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="8.255" y1="-1.27" x2="6.985" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="51"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="51"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="51"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="51"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="51"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="51"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="51"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="51"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="51"/>
<wire x1="13.97" y1="0.635" x2="13.97" y2="-0.635" width="0.2032" layer="51"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90" stop="no"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90" stop="no"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90" stop="no"/>
<pad name="4" x="7.62" y="0" drill="1.016" diameter="1.8796" rot="R90" stop="no"/>
<pad name="5" x="10.16" y="0" drill="1.016" diameter="1.8796" rot="R90" stop="no"/>
<pad name="6" x="12.7" y="0" drill="1.016" diameter="1.8796" rot="R90" stop="no"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="12.446" y1="-0.254" x2="12.954" y2="0.254" layer="51"/>
<rectangle x1="9.906" y1="-0.254" x2="10.414" y2="0.254" layer="51"/>
<rectangle x1="7.366" y1="-0.254" x2="7.874" y2="0.254" layer="51"/>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
<polygon width="0.127" layer="30">
<vertex x="0.0025" y="-0.9525" curve="-90"/>
<vertex x="-0.9524" y="-0.0228" curve="-90.011749"/>
<vertex x="0" y="0.9526" curve="-90"/>
<vertex x="0.95" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="-0.4445" curve="-90.012891"/>
<vertex x="-0.4445" y="-0.0203" curve="-90"/>
<vertex x="0" y="0.447" curve="-90"/>
<vertex x="0.4419" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="2.5425" y="-0.9525" curve="-90"/>
<vertex x="1.5876" y="-0.0228" curve="-90.011749"/>
<vertex x="2.54" y="0.9526" curve="-90"/>
<vertex x="3.49" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="2.54" y="-0.4445" curve="-90.012891"/>
<vertex x="2.0955" y="-0.0203" curve="-90"/>
<vertex x="2.54" y="0.447" curve="-90"/>
<vertex x="2.9819" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="5.0825" y="-0.9525" curve="-90"/>
<vertex x="4.1276" y="-0.0228" curve="-90.011749"/>
<vertex x="5.08" y="0.9526" curve="-90"/>
<vertex x="6.03" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="5.08" y="-0.4445" curve="-90.012891"/>
<vertex x="4.6355" y="-0.0203" curve="-90"/>
<vertex x="5.08" y="0.447" curve="-90"/>
<vertex x="5.5219" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="7.6225" y="-0.9525" curve="-90"/>
<vertex x="6.6676" y="-0.0228" curve="-90.011749"/>
<vertex x="7.62" y="0.9526" curve="-90"/>
<vertex x="8.57" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="7.62" y="-0.4445" curve="-90.012891"/>
<vertex x="7.1755" y="-0.0203" curve="-90"/>
<vertex x="7.62" y="0.447" curve="-90"/>
<vertex x="8.0619" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="10.1625" y="-0.9525" curve="-90"/>
<vertex x="9.2076" y="-0.0228" curve="-90.011749"/>
<vertex x="10.16" y="0.9526" curve="-90"/>
<vertex x="11.11" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="10.16" y="-0.4445" curve="-90.012891"/>
<vertex x="9.7155" y="-0.0203" curve="-90"/>
<vertex x="10.16" y="0.447" curve="-90"/>
<vertex x="10.6019" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="12.7025" y="-0.9525" curve="-90"/>
<vertex x="11.7476" y="-0.0228" curve="-90.011749"/>
<vertex x="12.7" y="0.9526" curve="-90"/>
<vertex x="13.65" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="12.7" y="-0.4445" curve="-90.012891"/>
<vertex x="12.2555" y="-0.0203" curve="-90"/>
<vertex x="12.7" y="0.447" curve="-90"/>
<vertex x="13.1419" y="-0.0101" curve="-90.012967"/>
</polygon>
</package>
<package name="BREADBOARD-MINI">
<wire x1="0" y1="0" x2="0" y2="35.56" width="0.2032" layer="21"/>
<wire x1="0" y1="35.56" x2="45.72" y2="35.56" width="0.2032" layer="21"/>
<wire x1="45.72" y1="35.56" x2="45.72" y2="0" width="0.2032" layer="21"/>
<wire x1="45.72" y1="0" x2="0" y2="0" width="0.2032" layer="21"/>
</package>
<package name="MICRO-SDCARD">
<wire x1="10.16" y1="0" x2="10.16" y2="15" width="0.127" layer="21"/>
<wire x1="10.16" y1="15" x2="-0.84" y2="15" width="0.127" layer="21"/>
<wire x1="-0.84" y1="9.6" x2="-0.44" y2="9.2" width="0.127" layer="21"/>
<wire x1="-0.44" y1="9.2" x2="-0.44" y2="7.4" width="0.127" layer="21"/>
<wire x1="-0.44" y1="7.4" x2="-0.84" y2="7" width="0.127" layer="21"/>
<wire x1="-0.84" y1="7" x2="-0.84" y2="6" width="0.127" layer="21"/>
<wire x1="-0.84" y1="6" x2="0.16" y2="5" width="0.127" layer="21"/>
<wire x1="0.16" y1="5" x2="0.16" y2="0" width="0.127" layer="21"/>
<wire x1="0.16" y1="0" x2="10.16" y2="0" width="0.127" layer="21"/>
<wire x1="-0.84" y1="15" x2="-0.84" y2="9.6" width="0.127" layer="21"/>
<smd name="DAT1" x="9.16" y="2.3" dx="0.85" dy="3.25" layer="16"/>
<smd name="DAT0" x="8.06" y="2.3" dx="0.85" dy="3.25" layer="16"/>
<smd name="GND" x="6.96" y="2.1" dx="0.85" dy="3.75" layer="16" rot="R180"/>
<smd name="CLK" x="5.86" y="2.3" dx="0.85" dy="3.25" layer="16"/>
<smd name="VCC" x="4.76" y="2.1" dx="0.85" dy="3.75" layer="16"/>
<smd name="CMD" x="3.66" y="2.3" dx="0.85" dy="3.25" layer="16"/>
<smd name="CD/DAT3" x="2.56" y="2.3" dx="0.85" dy="3.25" layer="16"/>
<smd name="DAT2" x="1.46" y="2.3" dx="0.85" dy="3.25" layer="16"/>
<text x="6.35" y="16.51" size="1.27" layer="21" rot="R180">&gt;Name</text>
<text x="0" y="-2.54" size="1.27" layer="21">&gt;Value</text>
</package>
<package name="SD-MMC-CARD">
<wire x1="-11.43" y1="-13.97" x2="12.57" y2="-13.97" width="0.127" layer="21"/>
<wire x1="-11.43" y1="14.03" x2="-11.43" y2="-13.97" width="0.127" layer="21"/>
<wire x1="-11.43" y1="-13.97" x2="-11.43" y2="13.97" width="0.127" layer="51"/>
<wire x1="-11.43" y1="13.97" x2="-7.62" y2="17.78" width="0.127" layer="51"/>
<wire x1="-7.62" y1="17.78" x2="12.7" y2="17.78" width="0.127" layer="51"/>
<wire x1="12.7" y1="17.78" x2="12.7" y2="-13.97" width="0.127" layer="51"/>
<wire x1="12.7" y1="-13.97" x2="-11.43" y2="-13.97" width="0.127" layer="51"/>
<smd name="5" x="3.465" y="14.703" dx="1.75" dy="6" layer="1" rot="R180"/>
<smd name="4" x="0.93" y="14.703" dx="1.75" dy="6" layer="1" rot="R180"/>
<smd name="8" x="10.43" y="14.703" dx="1.25" dy="6" layer="1" rot="R180"/>
<smd name="7" x="8.43" y="14.703" dx="1.65" dy="6" layer="1" rot="R180"/>
<smd name="6" x="6.03" y="14.703" dx="1.75" dy="6" layer="1" rot="R180"/>
<smd name="1" x="-6.7446" y="14.7134" dx="1.75" dy="6" layer="1" rot="R180"/>
<smd name="9" x="-9.53" y="12.03" dx="2" dy="5" layer="1" rot="R180"/>
<smd name="2" x="-4.195" y="14.703" dx="1.75" dy="6" layer="1" rot="R180"/>
<smd name="3" x="-1.6" y="14.703" dx="1.75" dy="6" layer="1" rot="R180"/>
<text x="-5.08" y="19.05" size="0.4064" layer="25" rot="R180">&gt;NAME</text>
<text x="6.35" y="19.05" size="0.4064" layer="27" rot="R180">&gt;VALUE</text>
</package>
<package name="WIZ811MJ">
<description>&lt;h3&gt;WIZnet W5100 Network Module with MagJack - WIZ811MJ&lt;/h3&gt;
WIZnet's WIZ811MJ is a breakout board for the W5100 embedded TCP/IP chip. Also included on the board is a RJ-45 MagJack Connector (RJ45 with X'FMR).&lt;br&gt;&lt;br&gt;

See http://www.sparkfun.com/commerce/product_info.php?products_id=9473 for more documentation and info.&lt;br&gt;
&lt;B&gt;**UNPROVEN&lt;/b&gt;</description>
<wire x1="-31.86" y1="-23.73" x2="-31.86" y2="1.27" width="0.127" layer="21"/>
<wire x1="-31.86" y1="1.27" x2="20.14" y2="1.27" width="0.127" layer="21"/>
<wire x1="20.14" y1="1.27" x2="20.14" y2="-23.73" width="0.127" layer="21"/>
<wire x1="20.14" y1="-23.73" x2="-31.86" y2="-23.73" width="0.127" layer="21"/>
<wire x1="2.14" y1="-19.18" x2="23.34" y2="-19.18" width="0.127" layer="51"/>
<wire x1="23.34" y1="-19.18" x2="23.34" y2="-3.28" width="0.127" layer="51"/>
<wire x1="23.34" y1="-3.28" x2="2.14" y2="-3.28" width="0.127" layer="51"/>
<wire x1="2.14" y1="-19.18" x2="2.14" y2="-3.28" width="0.127" layer="51"/>
<pad name="40" x="-22.86" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="38" x="-20.32" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="36" x="-17.78" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="34" x="-15.24" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="32" x="-12.7" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="30" x="-10.16" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="28" x="-7.62" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="26" x="-5.08" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="24" x="-2.54" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="22" x="0" y="-22.46" drill="1.02" diameter="1.8796"/>
<pad name="39" x="-22.86" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="37" x="-20.32" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="35" x="-17.78" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="33" x="-15.24" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="31" x="-12.7" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="29" x="-10.16" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="27" x="-7.62" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="25" x="-5.08" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="23" x="-2.54" y="-19.92" drill="1.02" diameter="1.8796"/>
<pad name="21" x="0" y="-19.92" drill="1.02" diameter="1.8796" shape="square"/>
<pad name="19" x="-22.86" y="0" drill="1.02" diameter="1.8796"/>
<pad name="17" x="-20.32" y="0" drill="1.02" diameter="1.8796"/>
<pad name="15" x="-17.78" y="0" drill="1.02" diameter="1.8796"/>
<pad name="13" x="-15.24" y="0" drill="1.02" diameter="1.8796"/>
<pad name="11" x="-12.7" y="0" drill="1.02" diameter="1.8796"/>
<pad name="9" x="-10.16" y="0" drill="1.02" diameter="1.8796"/>
<pad name="7" x="-7.62" y="0" drill="1.02" diameter="1.8796"/>
<pad name="5" x="-5.08" y="0" drill="1.02" diameter="1.8796"/>
<pad name="3" x="-2.54" y="0" drill="1.02" diameter="1.8796"/>
<pad name="1" x="0" y="0" drill="1.02" diameter="1.8796" shape="square"/>
<pad name="20" x="-22.86" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="18" x="-20.32" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="16" x="-17.78" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="14" x="-15.24" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="12" x="-12.7" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="10" x="-10.16" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="8" x="-7.62" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="6" x="-5.08" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="4" x="-2.54" y="-2.54" drill="1.02" diameter="1.8796"/>
<pad name="2" x="0" y="-2.54" drill="1.02" diameter="1.8796"/>
<text x="1.14" y="-1.73" size="1.27" layer="51">J1</text>
<text x="1.14" y="-21.73" size="1.27" layer="51">J2</text>
<text x="6.14" y="-0.73" size="1.27" layer="51">WIZnet</text>
<text x="3.44" y="-23.33" size="1.27" layer="51">WIZ811MJ REV1.0</text>
<text x="-30.59" y="-7.22" size="1.778" layer="25">&gt;Name</text>
<text x="-30.59" y="-17.38" size="1.778" layer="27">&gt;Value</text>
<hole x="-27.86" y="-19.73" drill="3"/>
<hole x="-27.86" y="-2.73" drill="3"/>
</package>
<package name="XPORT">
<wire x1="8.128" y1="-3.937" x2="8.128" y2="21.7932" width="0.2032" layer="21"/>
<wire x1="8.128" y1="21.7932" x2="-8.128" y2="21.7932" width="0.2032" layer="21"/>
<wire x1="-8.128" y1="21.7932" x2="-8.128" y2="-3.937" width="0.2032" layer="21"/>
<wire x1="8.128" y1="-3.937" x2="-8.128" y2="-3.937" width="0.2032" layer="21"/>
<wire x1="-8.128" y1="-3.937" x2="-8.128" y2="-12.1158" width="0.2032" layer="51"/>
<wire x1="-8.128" y1="-12.1158" x2="8.128" y2="-12.1158" width="0.2032" layer="51"/>
<wire x1="8.128" y1="-12.1158" x2="8.128" y2="-3.937" width="0.2032" layer="51"/>
<pad name="1" x="-3.175" y="7.62" drill="0.889" diameter="1.8796"/>
<pad name="P6" x="-1.905" y="5.08" drill="0.889" diameter="1.8796"/>
<pad name="P5" x="-0.635" y="7.62" drill="0.889" diameter="1.8796"/>
<pad name="P4" x="0.635" y="5.08" drill="0.889" diameter="1.8796"/>
<pad name="P3" x="1.905" y="7.62" drill="0.889" diameter="1.8796"/>
<pad name="P2" x="3.175" y="5.08" drill="0.889" diameter="1.8796"/>
<pad name="P7" x="-3.175" y="7.62" drill="0.889" diameter="1.8796"/>
<pad name="8" x="4.445" y="7.62" drill="0.889" diameter="1.8796"/>
<pad name="P1" x="4.445" y="7.62" drill="0.889" diameter="1.8796"/>
<pad name="10" x="-4.445" y="5.08" drill="0.889" diameter="1.8796"/>
<pad name="P8" x="-4.445" y="5.08" drill="0.889" diameter="1.8796"/>
<pad name="GND@9" x="-8.128" y="10.081" drill="1.6" diameter="2.54"/>
<pad name="GND@10" x="8.128" y="10.081" drill="1.6" diameter="2.54"/>
<hole x="-6.1468" y="-1.27" drill="3.2512"/>
<hole x="6.1468" y="-1.27" drill="3.2512"/>
</package>
<package name="XPORT_DIRECT_MODULE">
<wire x1="-15.22" y1="-13.95" x2="-15.22" y2="10.55" width="0.2032" layer="21"/>
<wire x1="-12.72" y1="10.55" x2="-12.72" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="-15.22" y1="-13.95" x2="-12.72" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="-15.22" y1="10.55" x2="-12.72" y2="10.55" width="0.2032" layer="21"/>
<wire x1="12.72" y1="-13.95" x2="12.72" y2="10.55" width="0.2032" layer="21"/>
<wire x1="15.22" y1="10.55" x2="15.22" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="12.72" y1="-13.95" x2="15.22" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="12.72" y1="10.55" x2="15.22" y2="10.55" width="0.2032" layer="21"/>
<wire x1="7.874" y1="17.653" x2="15.875" y2="17.653" width="0.254" layer="51"/>
<wire x1="-15.875" y1="-19.177" x2="15.875" y2="-19.177" width="0.254" layer="51"/>
<wire x1="-7.874" y1="24.511" x2="7.874" y2="24.511" width="0.254" layer="51"/>
<wire x1="-15.875" y1="-19.177" x2="-15.875" y2="17.653" width="0.254" layer="51"/>
<wire x1="15.875" y1="-19.177" x2="15.875" y2="17.653" width="0.254" layer="51"/>
<wire x1="-7.874" y1="17.653" x2="-7.874" y2="24.511" width="0.254" layer="51"/>
<wire x1="7.874" y1="17.653" x2="7.874" y2="24.511" width="0.254" layer="51"/>
<wire x1="-15.875" y1="17.653" x2="-7.874" y2="17.653" width="0.254" layer="51"/>
<wire x1="-15.875" y1="-19.177" x2="-15.875" y2="11.43" width="0.254" layer="21"/>
<wire x1="-15.875" y1="-19.177" x2="-15.24" y2="-19.177" width="0.254" layer="21"/>
<wire x1="15.875" y1="-19.177" x2="15.24" y2="-19.177" width="0.254" layer="21"/>
<wire x1="15.875" y1="-19.177" x2="15.875" y2="11.43" width="0.254" layer="21"/>
<pad name="P23" x="-13.97" y="-12.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P21" x="-13.97" y="-10.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P19" x="-13.97" y="-8.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P17" x="-13.97" y="-6.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P15" x="-13.97" y="-4.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P13" x="-13.97" y="-2.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P11" x="-13.97" y="-0.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P9" x="-13.97" y="1.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P7" x="-13.97" y="3.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P5" x="-13.97" y="5.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P3" x="-13.97" y="7.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P1" x="-13.97" y="9.3" drill="0.8" diameter="1.524" shape="square" rot="R180"/>
<pad name="P24" x="13.97" y="-12.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P22" x="13.97" y="-10.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P20" x="13.97" y="-8.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P18" x="13.97" y="-6.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P16" x="13.97" y="-4.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P14" x="13.97" y="-2.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P12" x="13.97" y="-0.7" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P10" x="13.97" y="1.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P8" x="13.97" y="3.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P6" x="13.97" y="5.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P4" x="13.97" y="7.3" drill="0.8" diameter="1.524" rot="R180"/>
<pad name="P2" x="13.97" y="9.3" drill="0.8" diameter="1.524" rot="R180"/>
<rectangle x1="-14.224" y1="-8.954" x2="-13.716" y2="-8.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-10.954" x2="-13.716" y2="-10.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-12.954" x2="-13.716" y2="-12.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-6.954" x2="-13.716" y2="-6.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-4.954" x2="-13.716" y2="-4.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-2.954" x2="-13.716" y2="-2.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-0.954" x2="-13.716" y2="-0.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="1.046" x2="-13.716" y2="1.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="3.046" x2="-13.716" y2="3.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="5.046" x2="-13.716" y2="5.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="7.046" x2="-13.716" y2="7.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="9.046" x2="-13.716" y2="9.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-8.954" x2="14.224" y2="-8.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-10.954" x2="14.224" y2="-10.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-12.954" x2="14.224" y2="-12.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-6.954" x2="14.224" y2="-6.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-4.954" x2="14.224" y2="-4.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-2.954" x2="14.224" y2="-2.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-0.954" x2="14.224" y2="-0.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="1.046" x2="14.224" y2="1.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="3.046" x2="14.224" y2="3.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="5.046" x2="14.224" y2="5.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="7.046" x2="14.224" y2="7.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="9.046" x2="14.224" y2="9.554" layer="51" rot="R90"/>
</package>
<package name="XPORT_DIRECT_MODULE-SMD">
<wire x1="-15.2218" y1="-13.9566" x2="-15.2218" y2="6.5434" width="0.2032" layer="51"/>
<wire x1="-12.7218" y1="6.5434" x2="-12.7218" y2="-13.9566" width="0.2032" layer="51"/>
<wire x1="-15.2218" y1="-13.9566" x2="-12.7218" y2="-13.9566" width="0.2032" layer="51"/>
<wire x1="-15.2218" y1="-13.9566" x2="-15.2218" y2="-13.4066" width="0.2032" layer="21"/>
<wire x1="-15.2218" y1="-13.9566" x2="-12.7218" y2="-13.9566" width="0.2032" layer="21"/>
<wire x1="-12.7218" y1="-13.9566" x2="-12.7218" y2="-13.4066" width="0.2032" layer="21"/>
<wire x1="-15.2218" y1="-9.9561" x2="-15.2218" y2="10.5439" width="0.2032" layer="51"/>
<wire x1="-12.7218" y1="10.5439" x2="-12.7218" y2="-9.9561" width="0.2032" layer="51"/>
<wire x1="-15.2218" y1="10.5439" x2="-12.7218" y2="10.5439" width="0.2032" layer="51"/>
<wire x1="-12.7218" y1="9.8939" x2="-12.7218" y2="10.5439" width="0.2032" layer="21"/>
<wire x1="-12.7218" y1="10.5439" x2="-15.2218" y2="10.5439" width="0.2032" layer="21"/>
<wire x1="-15.2218" y1="10.5439" x2="-15.2218" y2="9.8939" width="0.2032" layer="21"/>
<wire x1="-15.22" y1="-13.95" x2="-15.22" y2="10.55" width="0.2032" layer="21"/>
<wire x1="-12.72" y1="10.55" x2="-12.72" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="-15.22" y1="-13.95" x2="-12.72" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="-15.22" y1="10.55" x2="-12.72" y2="10.55" width="0.2032" layer="21"/>
<wire x1="12.72" y1="-13.95" x2="12.72" y2="10.55" width="0.2032" layer="21"/>
<wire x1="15.22" y1="10.55" x2="15.22" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="12.72" y1="-13.95" x2="15.22" y2="-13.95" width="0.2032" layer="21"/>
<wire x1="12.72" y1="10.55" x2="15.22" y2="10.55" width="0.2032" layer="21"/>
<wire x1="7.874" y1="17.653" x2="15.875" y2="17.653" width="0.254" layer="51"/>
<wire x1="-15.875" y1="-19.177" x2="15.875" y2="-19.177" width="0.254" layer="51"/>
<wire x1="-7.874" y1="24.511" x2="7.874" y2="24.511" width="0.254" layer="51"/>
<wire x1="-15.875" y1="-19.177" x2="-15.875" y2="17.653" width="0.254" layer="51"/>
<wire x1="15.875" y1="-19.177" x2="15.875" y2="17.653" width="0.254" layer="51"/>
<wire x1="-7.874" y1="17.653" x2="-7.874" y2="24.511" width="0.254" layer="51"/>
<wire x1="7.874" y1="17.653" x2="7.874" y2="24.511" width="0.254" layer="51"/>
<wire x1="-15.875" y1="17.653" x2="-7.874" y2="17.653" width="0.254" layer="51"/>
<wire x1="-15.875" y1="-19.177" x2="-15.875" y2="11.43" width="0.254" layer="21"/>
<wire x1="-15.875" y1="-19.177" x2="-15.24" y2="-19.177" width="0.254" layer="21"/>
<wire x1="15.875" y1="-19.177" x2="15.24" y2="-19.177" width="0.254" layer="21"/>
<wire x1="15.875" y1="-19.177" x2="15.875" y2="11.43" width="0.254" layer="21"/>
<wire x1="12.7182" y1="-13.9566" x2="12.7182" y2="6.5434" width="0.2032" layer="51"/>
<wire x1="15.2182" y1="6.5434" x2="15.2182" y2="-13.9566" width="0.2032" layer="51"/>
<wire x1="12.7182" y1="-13.9566" x2="15.2182" y2="-13.9566" width="0.2032" layer="51"/>
<wire x1="12.7182" y1="-13.9566" x2="12.7182" y2="-13.4066" width="0.2032" layer="21"/>
<wire x1="12.7182" y1="-13.9566" x2="15.2182" y2="-13.9566" width="0.2032" layer="21"/>
<wire x1="15.2182" y1="-13.9566" x2="15.2182" y2="-13.4066" width="0.2032" layer="21"/>
<wire x1="12.7182" y1="-9.9561" x2="12.7182" y2="10.5439" width="0.2032" layer="51"/>
<wire x1="15.2182" y1="10.5439" x2="15.2182" y2="-9.9561" width="0.2032" layer="51"/>
<wire x1="12.7182" y1="10.5439" x2="15.2182" y2="10.5439" width="0.2032" layer="51"/>
<wire x1="15.2182" y1="9.8939" x2="15.2182" y2="10.5439" width="0.2032" layer="21"/>
<wire x1="15.2182" y1="10.5439" x2="12.7182" y2="10.5439" width="0.2032" layer="21"/>
<wire x1="12.7182" y1="10.5439" x2="12.7182" y2="9.8939" width="0.2032" layer="21"/>
<smd name="P23" x="-12.4718" y="-12.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P21" x="-15.4718" y="-10.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P19" x="-12.4718" y="-8.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P17" x="-15.4718" y="-6.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P15" x="-12.4718" y="-4.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P13" x="-15.4718" y="-2.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P11" x="-12.4718" y="-0.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P9" x="-15.4718" y="1.2934" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P5" x="-15.4718" y="5.2934" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P7" x="-12.4718" y="3.2939" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P3" x="-12.4718" y="7.2939" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P1" x="-15.4718" y="9.2939" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P24" x="15.4682" y="-12.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P22" x="12.4682" y="-10.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P20" x="15.4682" y="-8.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P18" x="12.4682" y="-6.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P16" x="15.4682" y="-4.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P14" x="12.4682" y="-2.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P12" x="15.4682" y="-0.7066" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P10" x="12.4682" y="1.2934" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P6" x="12.4682" y="5.2934" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P8" x="15.4682" y="3.2939" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P4" x="15.4682" y="7.2939" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<smd name="P2" x="12.4682" y="9.2939" dx="0.85" dy="1.7" layer="1" rot="R90"/>
<text x="-11.8618" y="-12.1666" size="0.4064" layer="25">&gt;Name</text>
<text x="-11.8618" y="-13.4366" size="0.4064" layer="27">&gt;Value</text>
<text x="16.0782" y="-12.1666" size="0.4064" layer="25">&gt;Name</text>
<text x="16.0782" y="-13.4366" size="0.4064" layer="27">&gt;Value</text>
<rectangle x1="-14.224" y1="-8.954" x2="-13.716" y2="-8.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-10.954" x2="-13.716" y2="-10.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-12.954" x2="-13.716" y2="-12.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-6.954" x2="-13.716" y2="-6.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-4.954" x2="-13.716" y2="-4.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-2.954" x2="-13.716" y2="-2.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="-0.954" x2="-13.716" y2="-0.446" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="1.046" x2="-13.716" y2="1.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="3.046" x2="-13.716" y2="3.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="5.046" x2="-13.716" y2="5.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="7.046" x2="-13.716" y2="7.554" layer="51" rot="R90"/>
<rectangle x1="-14.224" y1="9.046" x2="-13.716" y2="9.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-8.954" x2="14.224" y2="-8.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-10.954" x2="14.224" y2="-10.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-12.954" x2="14.224" y2="-12.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-6.954" x2="14.224" y2="-6.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-4.954" x2="14.224" y2="-4.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-2.954" x2="14.224" y2="-2.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="-0.954" x2="14.224" y2="-0.446" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="1.046" x2="14.224" y2="1.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="3.046" x2="14.224" y2="3.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="5.046" x2="14.224" y2="5.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="7.046" x2="14.224" y2="7.554" layer="51" rot="R90"/>
<rectangle x1="13.716" y1="9.046" x2="14.224" y2="9.554" layer="51" rot="R90"/>
</package>
<package name="AUDIO-AMP-MONO">
<wire x1="-10.16" y1="10.16" x2="10.16" y2="10.16" width="0.2032" layer="21"/>
<wire x1="10.16" y1="10.16" x2="10.16" y2="-10.16" width="0.2032" layer="21"/>
<wire x1="10.16" y1="-10.16" x2="-10.16" y2="-10.16" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-10.16" x2="-10.16" y2="10.16" width="0.2032" layer="21"/>
<pad name="S" x="-8.89" y="-8.89" drill="1.016" diameter="1.8796"/>
<pad name="PWR+" x="-8.89" y="-6.35" drill="1.016" diameter="1.8796"/>
<pad name="PWR-" x="-8.89" y="-3.81" drill="1.016" diameter="1.8796"/>
<pad name="OUT-" x="-8.89" y="3.81" drill="1.016" diameter="1.8796"/>
<pad name="OUT+" x="-8.89" y="6.35" drill="1.016" diameter="1.8796"/>
<pad name="VOL+" x="8.89" y="-8.89" drill="1.016" diameter="1.8796"/>
<pad name="VOL" x="8.89" y="-6.35" drill="1.016" diameter="1.8796"/>
<pad name="VOL-" x="8.89" y="-3.81" drill="1.016" diameter="1.8796"/>
<pad name="IN-" x="8.89" y="3.81" drill="1.016" diameter="1.8796"/>
<pad name="IN+" x="8.89" y="6.35" drill="1.016" diameter="1.8796"/>
<text x="-4.445" y="0" size="1.27" layer="21" ratio="15">SparkFun
AudioAmp</text>
<text x="-5.08" y="-2.54" size="1.27" layer="21" ratio="15">TPA2005D1</text>
<text x="-9.525" y="8.255" size="1.27" layer="21" ratio="15">OUT</text>
<text x="7.62" y="8.255" size="1.27" layer="21" ratio="15">IN</text>
<text x="6.35" y="5.715" size="1.27" layer="21" ratio="15">+</text>
<text x="6.35" y="3.175" size="1.27" layer="21" ratio="15">-</text>
<text x="-6.985" y="3.175" size="1.27" layer="21" ratio="15">-</text>
<text x="-6.985" y="5.715" size="1.27" layer="21" ratio="15">+</text>
<text x="-9.525" y="-2.54" size="1.27" layer="21" ratio="15">PWR</text>
<text x="6.35" y="-2.54" size="1.27" layer="21" ratio="15">VOL</text>
<text x="-6.985" y="-6.985" size="1.27" layer="21" ratio="15">+</text>
<text x="-6.985" y="-4.445" size="1.27" layer="21" ratio="15">-</text>
</package>
<package name="ARDUINO_PRO_MINI">
<wire x1="-8.89" y1="16.51" x2="-8.89" y2="-16.51" width="0.127" layer="51"/>
<wire x1="-8.89" y1="-16.51" x2="8.89" y2="-16.51" width="0.127" layer="51"/>
<wire x1="8.89" y1="-16.51" x2="8.89" y2="16.51" width="0.127" layer="51"/>
<wire x1="8.89" y1="16.51" x2="-8.89" y2="16.51" width="0.127" layer="51"/>
<pad name="1" x="-7.62" y="12.7" drill="1.016" diameter="1.8796"/>
<pad name="2" x="-7.62" y="10.16" drill="1.016" diameter="1.8796"/>
<pad name="3" x="-7.62" y="7.62" drill="1.016" diameter="1.8796"/>
<pad name="4" x="-7.62" y="5.08" drill="1.016" diameter="1.8796"/>
<pad name="5" x="-7.62" y="2.54" drill="1.016" diameter="1.8796"/>
<pad name="6" x="-7.62" y="0" drill="1.016" diameter="1.8796"/>
<pad name="7" x="-7.62" y="-2.54" drill="1.016" diameter="1.8796"/>
<pad name="8" x="-7.62" y="-5.08" drill="1.016" diameter="1.8796"/>
<pad name="9" x="-7.62" y="-7.62" drill="1.016" diameter="1.8796"/>
<pad name="10" x="-7.62" y="-10.16" drill="1.016" diameter="1.8796"/>
<pad name="11" x="-7.62" y="-12.7" drill="1.016" diameter="1.8796"/>
<pad name="12" x="-7.62" y="-15.24" drill="1.016" diameter="1.8796"/>
<pad name="13" x="7.62" y="-15.24" drill="1.016" diameter="1.8796"/>
<pad name="14" x="7.62" y="-12.7" drill="1.016" diameter="1.8796"/>
<pad name="15" x="7.62" y="-10.16" drill="1.016" diameter="1.8796"/>
<pad name="16" x="7.62" y="-7.62" drill="1.016" diameter="1.8796"/>
<pad name="17" x="7.62" y="-5.08" drill="1.016" diameter="1.8796"/>
<pad name="18" x="7.62" y="-2.54" drill="1.016" diameter="1.8796"/>
<pad name="19" x="7.62" y="0" drill="1.016" diameter="1.8796"/>
<pad name="20" x="7.62" y="2.54" drill="1.016" diameter="1.8796"/>
<pad name="21" x="7.62" y="5.08" drill="1.016" diameter="1.8796"/>
<pad name="22" x="7.62" y="7.62" drill="1.016" diameter="1.8796"/>
<pad name="23" x="7.62" y="10.16" drill="1.016" diameter="1.8796"/>
<pad name="24" x="7.62" y="12.7" drill="1.016" diameter="1.8796"/>
<text x="-3.81" y="-13.97" size="1.27" layer="25">&gt;NAME</text>
<text x="-3.81" y="-15.875" size="1.27" layer="27">&gt;VALUE</text>
<pad name="A6" x="4.7625" y="-9.04875" drill="1.016" diameter="1.8796"/>
<pad name="A7" x="4.7625" y="-6.50875" drill="1.016" diameter="1.8796"/>
<pad name="A5" x="4.7625" y="3.96875" drill="1.016" diameter="1.8796"/>
<pad name="A4" x="4.7625" y="1.42875" drill="1.016" diameter="1.8796"/>
<pad name="BLK" x="-6.35" y="15.24" drill="1.016" diameter="1.8796"/>
<pad name="GND" x="-3.81" y="15.24" drill="1.016" diameter="1.8796"/>
<pad name="VCC" x="-1.27" y="15.24" drill="1.016" diameter="1.8796"/>
<pad name="RXI" x="1.27" y="15.24" drill="1.016" diameter="1.8796"/>
<pad name="TXO" x="3.81" y="15.24" drill="1.016" diameter="1.8796"/>
<pad name="GRN" x="6.35" y="15.24" drill="1.016" diameter="1.8796"/>
</package>
<package name="LOGIC_LEVEL_CONVERTER">
<pad name="P$1" x="1.27" y="13.97" drill="0.8"/>
<pad name="P$2" x="1.27" y="11.43" drill="0.8"/>
<pad name="P$3" x="1.27" y="8.89" drill="0.8"/>
<pad name="P$4" x="1.27" y="6.35" drill="0.8"/>
<pad name="P$5" x="1.27" y="3.81" drill="0.8"/>
<pad name="P$6" x="1.27" y="1.27" drill="0.8"/>
<pad name="P$7" x="11.43" y="1.27" drill="0.8"/>
<pad name="P$8" x="11.43" y="3.81" drill="0.8"/>
<pad name="P$9" x="11.43" y="6.35" drill="0.8"/>
<pad name="P$10" x="11.43" y="8.89" drill="0.8"/>
<pad name="P$11" x="11.43" y="11.43" drill="0.8"/>
<pad name="P$12" x="11.43" y="13.97" drill="0.8"/>
<wire x1="0" y1="0" x2="0" y2="5.08" width="0.127" layer="21"/>
<wire x1="0" y1="5.08" x2="0" y2="10.16" width="0.127" layer="21"/>
<wire x1="0" y1="10.16" x2="0" y2="15.24" width="0.127" layer="21"/>
<wire x1="0" y1="15.24" x2="12.7" y2="15.24" width="0.127" layer="21"/>
<wire x1="12.7" y1="15.24" x2="12.7" y2="10.16" width="0.127" layer="21"/>
<wire x1="12.7" y1="10.16" x2="12.7" y2="5.08" width="0.127" layer="21"/>
<wire x1="12.7" y1="5.08" x2="12.7" y2="0" width="0.127" layer="21"/>
<wire x1="12.7" y1="0" x2="0" y2="0" width="0.127" layer="21"/>
<text x="3.81" y="10.16" size="1.27" layer="21">Chan1</text>
<text x="3.81" y="3.81" size="1.27" layer="21">Chan2</text>
<wire x1="0" y1="10.16" x2="12.7" y2="10.16" width="0.127" layer="21"/>
<wire x1="0" y1="5.08" x2="12.7" y2="5.08" width="0.127" layer="21"/>
<text x="2.54" y="13.97" size="1.27" layer="21">LV</text>
<text x="2.54" y="0" size="1.27" layer="21">LV</text>
<text x="7.62" y="13.97" size="1.27" layer="21">HV</text>
<text x="7.62" y="0" size="1.27" layer="21">HV</text>
</package>
<package name="UNO_R3_SHIELD">
<description>Uno R3 Compatible Board Layout</description>
<wire x1="2.54" y1="0" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="9.5" y1="0" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="0" x2="50.8" y2="0" width="0.254" layer="51"/>
<wire x1="50.8" y1="0" x2="53.34" y2="2.54" width="0.254" layer="51"/>
<wire x1="53.34" y1="57.15" x2="50.8" y2="57.15" width="0.254" layer="51"/>
<wire x1="50.8" y1="57.15" x2="48.26" y2="59.69" width="0.254" layer="51"/>
<wire x1="0" y1="55.88" x2="0" y2="2.54" width="0.254" layer="51"/>
<wire x1="0" y1="2.54" x2="2.54" y2="0" width="0.254" layer="51"/>
<wire x1="48.26" y1="59.69" x2="15.24" y2="59.69" width="0.254" layer="51"/>
<wire x1="15.24" y1="59.69" x2="12.7" y2="57.15" width="0.254" layer="51"/>
<wire x1="12.7" y1="57.15" x2="1.27" y2="57.15" width="0.254" layer="51"/>
<wire x1="1.27" y1="57.15" x2="0" y2="55.88" width="0.254" layer="51"/>
<wire x1="53.34" y1="2.54" x2="53.34" y2="57.15" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="21.7" y2="-15.5" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="49.2" y2="-10.3" width="0.254" layer="51"/>
<wire x1="9.5" y1="-15.5" x2="9.5" y2="0" width="0.254" layer="51"/>
<wire x1="21.7" y1="-15.5" x2="21.7" y2="0" width="0.254" layer="51"/>
<wire x1="40.2" y1="-10.3" x2="40.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="49.2" y1="-10.3" x2="49.2" y2="-0.1" width="0.254" layer="51"/>
<wire x1="1.27" y1="55.88" x2="3.81" y2="55.88" width="0.127" layer="51"/>
<wire x1="3.81" y1="55.88" x2="3.81" y2="35.56" width="0.127" layer="51"/>
<wire x1="3.81" y1="35.56" x2="1.27" y2="35.56" width="0.127" layer="51"/>
<wire x1="1.27" y1="35.56" x2="1.27" y2="55.88" width="0.127" layer="51"/>
<wire x1="1.27" y1="34.29" x2="3.81" y2="34.29" width="0.127" layer="51"/>
<wire x1="3.81" y1="34.29" x2="3.81" y2="8.89" width="0.127" layer="51"/>
<wire x1="3.81" y1="8.89" x2="1.27" y2="8.89" width="0.127" layer="51"/>
<wire x1="1.27" y1="8.89" x2="1.27" y2="34.29" width="0.127" layer="51"/>
<wire x1="49.53" y1="17.78" x2="52.07" y2="17.78" width="0.127" layer="51"/>
<wire x1="52.07" y1="17.78" x2="52.07" y2="38.1" width="0.127" layer="51"/>
<wire x1="52.07" y1="38.1" x2="49.53" y2="38.1" width="0.127" layer="51"/>
<wire x1="49.53" y1="38.1" x2="49.53" y2="17.78" width="0.127" layer="51"/>
<wire x1="52.07" y1="40.64" x2="49.53" y2="40.64" width="0.127" layer="51"/>
<wire x1="49.53" y1="40.64" x2="49.53" y2="55.88" width="0.127" layer="51"/>
<wire x1="49.53" y1="55.88" x2="52.07" y2="55.88" width="0.127" layer="51"/>
<wire x1="52.07" y1="55.88" x2="52.07" y2="40.64" width="0.127" layer="51"/>
<pad name="RES" x="50.8" y="24.13" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3.3V" x="50.8" y="26.67" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5V" x="50.8" y="29.21" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@0" x="50.8" y="31.75" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@1" x="50.8" y="34.29" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="VIN" x="50.8" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A0" x="50.8" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A1" x="50.8" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A2" x="50.8" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A3" x="50.8" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A4" x="50.8" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="A5" x="50.8" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="RX" x="2.54" y="54.61" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="TX" x="2.54" y="52.07" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D2" x="2.54" y="49.53" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D3" x="2.54" y="46.99" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D4" x="2.54" y="44.45" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D5" x="2.54" y="41.91" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D6" x="2.54" y="39.37" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D7" x="2.54" y="36.83" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D8" x="2.54" y="33.02" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D9" x="2.54" y="30.48" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D10" x="2.54" y="27.94" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D11" x="2.54" y="25.4" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D12" x="2.54" y="22.86" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="D13" x="2.54" y="20.32" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="GND@2" x="2.54" y="17.78" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="AREF" x="2.54" y="15.24" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.4157" y="32.258" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.4157" y="34.798" size="1.016" layer="21" ratio="15" rot="R180">GND</text>
<text x="49.4157" y="29.718" size="1.016" layer="21" ratio="15" rot="R180">+5V</text>
<text x="49.4157" y="24.638" size="1.016" layer="21" ratio="15" rot="R180">RST</text>
<text x="49.4157" y="37.338" size="1.016" layer="21" ratio="15" rot="R180">VIN</text>
<text x="49.4157" y="27.178" size="1.016" layer="21" ratio="15" rot="R180">+3.3V</text>
<text x="49.4157" y="42.418" size="1.016" layer="21" ratio="15" rot="R180">0</text>
<text x="49.4157" y="44.958" size="1.016" layer="21" ratio="15" rot="R180">1</text>
<text x="49.4157" y="47.498" size="1.016" layer="21" ratio="15" rot="R180">2</text>
<text x="49.4157" y="50.038" size="1.016" layer="21" ratio="15" rot="R180">3</text>
<text x="49.4157" y="52.578" size="1.016" layer="21" ratio="15" rot="R180">4</text>
<text x="49.4157" y="55.118" size="1.016" layer="21" ratio="15" rot="R180">5</text>
<text x="46.8757" y="52.197" size="1.016" layer="21" ratio="15" rot="R270">Analog In</text>
<text x="3.81" y="17.272" size="1.016" layer="21" ratio="15">GND</text>
<text x="3.81" y="19.812" size="1.016" layer="21" ratio="15">13</text>
<text x="3.81" y="22.352" size="1.016" layer="21" ratio="15">12</text>
<text x="3.81" y="24.892" size="1.016" layer="21" ratio="15">11</text>
<text x="3.81" y="14.732" size="1.016" layer="21" ratio="15">AREF</text>
<text x="3.81" y="27.432" size="1.016" layer="21" ratio="15">10</text>
<text x="3.81" y="29.972" size="1.016" layer="21" ratio="15">9</text>
<text x="3.81" y="32.512" size="1.016" layer="21" ratio="15">8</text>
<text x="3.81" y="36.322" size="1.016" layer="21" ratio="15">7</text>
<text x="3.81" y="38.862" size="1.016" layer="21" ratio="15">6</text>
<text x="3.81" y="41.402" size="1.016" layer="21" ratio="15">5</text>
<text x="3.81" y="43.942" size="1.016" layer="21" ratio="15">4</text>
<text x="3.81" y="46.482" size="1.016" layer="21" ratio="15">3</text>
<text x="3.81" y="49.022" size="1.016" layer="21" ratio="15">2</text>
<text x="3.81" y="51.562" size="1.016" layer="21" ratio="15">TX</text>
<text x="3.81" y="54.102" size="1.016" layer="21" ratio="15">RX</text>
<pad name="SDA" x="2.54" y="12.7" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="SCL" x="2.54" y="10.16" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="3.81" y="12.192" size="1.016" layer="21" ratio="15">SDA</text>
<text x="3.81" y="9.652" size="1.016" layer="21" ratio="15">SCL</text>
<pad name="IOREF" x="50.8" y="21.59" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="NC" x="50.8" y="19.05" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="49.4157" y="22.098" size="1.016" layer="21" ratio="15" rot="R180">IOREF</text>
</package>
<package name="ARDUINO_PRO_MICRO">
<wire x1="-8.89" y1="16.51" x2="-8.89" y2="-16.51" width="0.127" layer="51"/>
<wire x1="-8.89" y1="-16.51" x2="8.89" y2="-16.51" width="0.127" layer="51"/>
<wire x1="8.89" y1="-16.51" x2="8.89" y2="16.51" width="0.127" layer="51"/>
<wire x1="8.89" y1="16.51" x2="-8.89" y2="16.51" width="0.127" layer="51"/>
<pad name="1" x="-7.62" y="12.7" drill="1.016" diameter="1.8796"/>
<pad name="2" x="-7.62" y="10.16" drill="1.016" diameter="1.8796"/>
<pad name="3" x="-7.62" y="7.62" drill="1.016" diameter="1.8796"/>
<pad name="4" x="-7.62" y="5.08" drill="1.016" diameter="1.8796"/>
<pad name="5" x="-7.62" y="2.54" drill="1.016" diameter="1.8796"/>
<pad name="6" x="-7.62" y="0" drill="1.016" diameter="1.8796"/>
<pad name="7" x="-7.62" y="-2.54" drill="1.016" diameter="1.8796"/>
<pad name="8" x="-7.62" y="-5.08" drill="1.016" diameter="1.8796"/>
<pad name="9" x="-7.62" y="-7.62" drill="1.016" diameter="1.8796"/>
<pad name="10" x="-7.62" y="-10.16" drill="1.016" diameter="1.8796"/>
<pad name="11" x="-7.62" y="-12.7" drill="1.016" diameter="1.8796"/>
<pad name="12" x="-7.62" y="-15.24" drill="1.016" diameter="1.8796"/>
<pad name="13" x="7.62" y="-15.24" drill="1.016" diameter="1.8796"/>
<pad name="14" x="7.62" y="-12.7" drill="1.016" diameter="1.8796"/>
<pad name="15" x="7.62" y="-10.16" drill="1.016" diameter="1.8796"/>
<pad name="16" x="7.62" y="-7.62" drill="1.016" diameter="1.8796"/>
<pad name="17" x="7.62" y="-5.08" drill="1.016" diameter="1.8796"/>
<pad name="18" x="7.62" y="-2.54" drill="1.016" diameter="1.8796"/>
<pad name="19" x="7.62" y="0" drill="1.016" diameter="1.8796"/>
<pad name="20" x="7.62" y="2.54" drill="1.016" diameter="1.8796"/>
<pad name="21" x="7.62" y="5.08" drill="1.016" diameter="1.8796"/>
<pad name="22" x="7.62" y="7.62" drill="1.016" diameter="1.8796"/>
<pad name="23" x="7.62" y="10.16" drill="1.016" diameter="1.8796"/>
<pad name="24" x="7.62" y="12.7" drill="1.016" diameter="1.8796"/>
<text x="-3.81" y="-13.97" size="1.27" layer="25">&gt;NAME</text>
<text x="-3.81" y="-15.875" size="1.27" layer="27">&gt;VALUE</text>
<wire x1="-3.81" y1="16.51" x2="-3.81" y2="17.78" width="0.127" layer="51"/>
<wire x1="-3.81" y1="17.78" x2="3.81" y2="17.78" width="0.127" layer="51"/>
<wire x1="3.81" y1="17.78" x2="3.81" y2="16.51" width="0.127" layer="51"/>
</package>
<package name="2X13-SHROUDED">
<wire x1="-2.775" y1="15.875" x2="-2.775" y2="14.605" width="0.2032" layer="21"/>
<wire x1="4.5" y1="20.26" x2="4.5" y2="-20.26" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="-20.26" x2="-4.5" y2="-2.2" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="-2.2" x2="-4.5" y2="2.2" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="2.2" x2="-4.5" y2="20.26" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="20.26" x2="4.4" y2="20.26" width="0.2032" layer="21"/>
<wire x1="4.5" y1="-20.26" x2="-4.5" y2="-20.26" width="0.2032" layer="21"/>
<wire x1="-3.4" y1="19.16" x2="3.4" y2="19.16" width="0.2032" layer="51"/>
<wire x1="3.4" y1="19.16" x2="3.4" y2="-19.16" width="0.2032" layer="51"/>
<wire x1="-3.4" y1="-19.16" x2="3.4" y2="-19.16" width="0.2032" layer="51"/>
<wire x1="-4.5" y1="2.2" x2="-3" y2="2.2" width="0.2032" layer="21"/>
<wire x1="-3" y1="2.2" x2="-3" y2="-2.2" width="0.2032" layer="21"/>
<wire x1="-3" y1="-2.2" x2="-4.5" y2="-2.2" width="0.2032" layer="21"/>
<wire x1="-3.4" y1="19.16" x2="-3.4" y2="2.2" width="0.2032" layer="51"/>
<wire x1="-3.4" y1="-19.16" x2="-3.4" y2="-2.2" width="0.2032" layer="51"/>
<pad name="1" x="-1.27" y="15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="2" x="1.27" y="15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="3" x="-1.27" y="12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="4" x="1.27" y="12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="5" x="-1.27" y="10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="6" x="1.27" y="10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="7" x="-1.27" y="7.62" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="8" x="1.27" y="7.62" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="9" x="-1.27" y="5.08" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="10" x="1.27" y="5.08" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<text x="-2.921" y="20.574" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<text x="-2.921" y="-21.082" size="0.4064" layer="104">&gt;NAME</text>
<rectangle x1="-1.524" y1="14.986" x2="-1.016" y2="15.494" layer="51"/>
<rectangle x1="1.016" y1="14.986" x2="1.524" y2="15.494" layer="51"/>
<rectangle x1="1.016" y1="12.446" x2="1.524" y2="12.954" layer="51"/>
<rectangle x1="-1.524" y1="12.446" x2="-1.016" y2="12.954" layer="51"/>
<rectangle x1="1.016" y1="9.906" x2="1.524" y2="10.414" layer="51"/>
<rectangle x1="-1.524" y1="9.906" x2="-1.016" y2="10.414" layer="51"/>
<rectangle x1="1.016" y1="7.366" x2="1.524" y2="7.874" layer="51"/>
<rectangle x1="-1.524" y1="7.366" x2="-1.016" y2="7.874" layer="51"/>
<rectangle x1="1.016" y1="4.826" x2="1.524" y2="5.334" layer="51"/>
<rectangle x1="-1.524" y1="4.826" x2="-1.016" y2="5.334" layer="51"/>
<rectangle x1="-1.524" y1="7.366" x2="-1.016" y2="7.874" layer="51"/>
<rectangle x1="1.016" y1="7.366" x2="1.524" y2="7.874" layer="51"/>
<pad name="11" x="-1.27" y="2.54" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="12" x="1.27" y="2.54" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="13" x="-1.27" y="0" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="14" x="1.27" y="0" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="15" x="-1.27" y="-2.54" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="16" x="1.27" y="-2.54" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="17" x="-1.27" y="-5.08" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="18" x="1.27" y="-5.08" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="19" x="-1.27" y="-7.62" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="20" x="1.27" y="-7.62" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<rectangle x1="-1.524" y1="2.286" x2="-1.016" y2="2.794" layer="51"/>
<rectangle x1="1.016" y1="2.286" x2="1.524" y2="2.794" layer="51"/>
<rectangle x1="1.016" y1="-0.254" x2="1.524" y2="0.254" layer="51"/>
<rectangle x1="-1.524" y1="-0.254" x2="-1.016" y2="0.254" layer="51"/>
<rectangle x1="1.016" y1="-2.794" x2="1.524" y2="-2.286" layer="51"/>
<rectangle x1="-1.524" y1="-2.794" x2="-1.016" y2="-2.286" layer="51"/>
<rectangle x1="1.016" y1="-5.334" x2="1.524" y2="-4.826" layer="51"/>
<rectangle x1="-1.524" y1="-5.334" x2="-1.016" y2="-4.826" layer="51"/>
<rectangle x1="1.016" y1="-7.874" x2="1.524" y2="-7.366" layer="51"/>
<rectangle x1="-1.524" y1="-7.874" x2="-1.016" y2="-7.366" layer="51"/>
<rectangle x1="-1.524" y1="-5.334" x2="-1.016" y2="-4.826" layer="51"/>
<rectangle x1="1.016" y1="-5.334" x2="1.524" y2="-4.826" layer="51"/>
<pad name="21" x="-1.27" y="-10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="22" x="1.27" y="-10.16" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="23" x="-1.27" y="-12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="24" x="1.27" y="-12.7" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="25" x="-1.27" y="-15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<pad name="26" x="1.27" y="-15.24" drill="1.016" diameter="1.8796" shape="octagon" rot="R270"/>
<rectangle x1="1.016" y1="-10.414" x2="1.524" y2="-9.906" layer="51"/>
<rectangle x1="-1.524" y1="-10.414" x2="-1.016" y2="-9.906" layer="51"/>
<rectangle x1="1.016" y1="-12.954" x2="1.524" y2="-12.446" layer="51"/>
<rectangle x1="-1.524" y1="-12.954" x2="-1.016" y2="-12.446" layer="51"/>
<rectangle x1="1.016" y1="-15.494" x2="1.524" y2="-14.986" layer="51"/>
<rectangle x1="-1.524" y1="-15.494" x2="-1.016" y2="-14.986" layer="51"/>
<rectangle x1="-1.524" y1="-12.954" x2="-1.016" y2="-12.446" layer="51"/>
<rectangle x1="1.016" y1="-12.954" x2="1.524" y2="-12.446" layer="51"/>
</package>
</packages>
<symbols>
<symbol name="ARDUINO-MEGA">
<wire x1="-15.24" y1="-53.34" x2="15.24" y2="-53.34" width="0.254" layer="94"/>
<wire x1="15.24" y1="-53.34" x2="15.24" y2="53.34" width="0.254" layer="94"/>
<wire x1="15.24" y1="53.34" x2="-15.24" y2="53.34" width="0.254" layer="94"/>
<wire x1="-15.24" y1="53.34" x2="-15.24" y2="-53.34" width="0.254" layer="94"/>
<text x="-15.24" y="54.102" size="1.778" layer="95">&gt;NAME</text>
<text x="-15.24" y="-55.88" size="1.778" layer="96">&gt;VALUE</text>
<pin name="5V@0" x="-20.32" y="48.26" length="middle"/>
<pin name="RESET" x="-20.32" y="35.56" length="middle"/>
<pin name="5V@1" x="-20.32" y="45.72" length="middle"/>
<pin name="A0(RX0)" x="-20.32" y="33.02" length="middle"/>
<pin name="A1(TX0)" x="-20.32" y="30.48" length="middle"/>
<pin name="A2" x="-20.32" y="27.94" length="middle"/>
<pin name="A3" x="-20.32" y="25.4" length="middle"/>
<pin name="A4" x="-20.32" y="22.86" length="middle"/>
<pin name="A5" x="-20.32" y="20.32" length="middle"/>
<pin name="A6" x="-20.32" y="17.78" length="middle"/>
<pin name="A7" x="-20.32" y="15.24" length="middle"/>
<pin name="A8" x="-20.32" y="12.7" length="middle"/>
<pin name="A9" x="-20.32" y="10.16" length="middle"/>
<pin name="A10" x="-20.32" y="7.62" length="middle"/>
<pin name="A11" x="-20.32" y="5.08" length="middle"/>
<pin name="A12" x="-20.32" y="2.54" length="middle"/>
<pin name="A13" x="-20.32" y="0" length="middle"/>
<pin name="A14" x="-20.32" y="-2.54" length="middle"/>
<pin name="A15" x="-20.32" y="-5.08" length="middle"/>
<pin name="1(TX0)" x="-20.32" y="-10.16" length="middle"/>
<pin name="2" x="-20.32" y="-12.7" length="middle"/>
<pin name="3" x="-20.32" y="-15.24" length="middle"/>
<pin name="4" x="-20.32" y="-17.78" length="middle"/>
<pin name="5" x="-20.32" y="-20.32" length="middle"/>
<pin name="6" x="-20.32" y="-22.86" length="middle"/>
<pin name="7" x="-20.32" y="-25.4" length="middle"/>
<pin name="8" x="-20.32" y="-27.94" length="middle"/>
<pin name="9" x="-20.32" y="-30.48" length="middle"/>
<pin name="10" x="-20.32" y="-33.02" length="middle"/>
<pin name="GND@4" x="-20.32" y="-50.8" length="middle"/>
<pin name="16(TX2)" x="20.32" y="43.18" length="middle" rot="R180"/>
<pin name="17(RX2)" x="20.32" y="40.64" length="middle" rot="R180"/>
<pin name="18(TX1)" x="20.32" y="38.1" length="middle" rot="R180"/>
<pin name="22" x="20.32" y="27.94" length="middle" rot="R180"/>
<pin name="23" x="20.32" y="25.4" length="middle" rot="R180"/>
<pin name="24" x="20.32" y="22.86" length="middle" rot="R180"/>
<pin name="25" x="20.32" y="20.32" length="middle" rot="R180"/>
<pin name="26" x="20.32" y="17.78" length="middle" rot="R180"/>
<pin name="27" x="20.32" y="15.24" length="middle" rot="R180"/>
<pin name="28" x="20.32" y="12.7" length="middle" rot="R180"/>
<pin name="29" x="20.32" y="10.16" length="middle" rot="R180"/>
<pin name="30" x="20.32" y="7.62" length="middle" rot="R180"/>
<pin name="31" x="20.32" y="5.08" length="middle" rot="R180"/>
<pin name="32" x="20.32" y="2.54" length="middle" rot="R180"/>
<pin name="33" x="20.32" y="0" length="middle" rot="R180"/>
<pin name="34" x="20.32" y="-2.54" length="middle" rot="R180"/>
<pin name="35" x="20.32" y="-5.08" length="middle" rot="R180"/>
<pin name="36" x="20.32" y="-7.62" length="middle" rot="R180"/>
<pin name="37" x="20.32" y="-10.16" length="middle" rot="R180"/>
<pin name="38" x="20.32" y="-12.7" length="middle" rot="R180"/>
<pin name="40" x="20.32" y="-17.78" length="middle" rot="R180"/>
<pin name="39" x="20.32" y="-15.24" length="middle" rot="R180"/>
<pin name="41" x="20.32" y="-20.32" length="middle" rot="R180"/>
<pin name="42" x="20.32" y="-22.86" length="middle" rot="R180"/>
<pin name="43" x="20.32" y="-25.4" length="middle" rot="R180"/>
<pin name="44" x="20.32" y="-27.94" length="middle" rot="R180"/>
<pin name="45" x="20.32" y="-30.48" length="middle" rot="R180"/>
<pin name="46" x="20.32" y="-33.02" length="middle" rot="R180"/>
<pin name="47" x="20.32" y="-35.56" length="middle" rot="R180"/>
<pin name="48" x="20.32" y="-38.1" length="middle" rot="R180"/>
<pin name="11" x="-20.32" y="-35.56" length="middle"/>
<pin name="12" x="-20.32" y="-38.1" length="middle"/>
<pin name="13" x="20.32" y="50.8" length="middle" rot="R180"/>
<pin name="15(RX3)" x="20.32" y="45.72" length="middle" rot="R180"/>
<pin name="14(TX3)" x="20.32" y="48.26" length="middle" rot="R180"/>
<pin name="GND@0" x="-20.32" y="-40.64" length="middle"/>
<pin name="GND@1" x="-20.32" y="-43.18" length="middle"/>
<pin name="GND@2" x="-20.32" y="-45.72" length="middle"/>
<pin name="GND@3" x="-20.32" y="-48.26" length="middle"/>
<pin name="53" x="20.32" y="-50.8" length="middle" rot="R180"/>
<pin name="52" x="20.32" y="-48.26" length="middle" rot="R180"/>
<pin name="51" x="20.32" y="-45.72" length="middle" rot="R180"/>
<pin name="50" x="20.32" y="-43.18" length="middle" rot="R180"/>
<pin name="49" x="20.32" y="-40.64" length="middle" rot="R180"/>
<pin name="5V@2" x="-20.32" y="43.18" length="middle"/>
<pin name="3.3V" x="-20.32" y="40.64" length="middle"/>
<pin name="AREF" x="-20.32" y="38.1" length="middle"/>
<pin name="21(SCL)" x="20.32" y="30.48" length="middle" rot="R180"/>
<pin name="20(SDA)" x="20.32" y="33.02" length="middle" rot="R180"/>
<pin name="19(RX1)" x="20.32" y="35.56" length="middle" rot="R180"/>
<pin name="VIN" x="-20.32" y="50.8" length="middle"/>
<pin name="0(RX0)" x="-20.32" y="-7.62" length="middle"/>
</symbol>
<symbol name="ARDUINO_MINI">
<wire x1="-7.62" y1="15.24" x2="-7.62" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-17.78" x2="10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="-17.78" x2="10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="15.24" x2="-7.62" y2="15.24" width="0.254" layer="94"/>
<text x="-7.62" y="16.002" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-20.32" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="-10.16" y="2.54" length="short"/>
<pin name="3" x="-10.16" y="0" length="short"/>
<pin name="4" x="-10.16" y="-2.54" length="short"/>
<pin name="5" x="-10.16" y="-5.08" length="short"/>
<pin name="6" x="-10.16" y="-7.62" length="short"/>
<pin name="7" x="-10.16" y="-10.16" length="short"/>
<pin name="8" x="-10.16" y="-12.7" length="short"/>
<pin name="9" x="-10.16" y="-15.24" length="short"/>
<pin name="10" x="12.7" y="-15.24" length="short" rot="R180"/>
<pin name="11" x="12.7" y="-12.7" length="short" rot="R180"/>
<pin name="12" x="12.7" y="-10.16" length="short" rot="R180"/>
<pin name="13" x="12.7" y="-7.62" length="short" rot="R180"/>
<pin name="A0" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="A1" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="A2" x="12.7" y="0" length="short" rot="R180"/>
<pin name="A3" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="GND" x="-10.16" y="5.08" length="short"/>
<pin name="GND@2" x="12.7" y="10.16" length="short" rot="R180"/>
<pin name="RAW" x="12.7" y="12.7" length="short" rot="R180"/>
<pin name="RST" x="-10.16" y="7.62" length="short"/>
<pin name="RST@2" x="12.7" y="7.62" length="short" rot="R180"/>
<pin name="RXI" x="-10.16" y="10.16" length="short"/>
<pin name="TXO" x="-10.16" y="12.7" length="short"/>
<pin name="VCC" x="12.7" y="5.08" length="short" rot="R180"/>
</symbol>
<symbol name="ARDUINO_SHIELD">
<wire x1="-10.16" y1="-20.32" x2="-10.16" y2="20.32" width="0.254" layer="94"/>
<wire x1="-10.16" y1="20.32" x2="10.16" y2="20.32" width="0.254" layer="94"/>
<wire x1="10.16" y1="20.32" x2="10.16" y2="-20.32" width="0.254" layer="94"/>
<wire x1="10.16" y1="-20.32" x2="-10.16" y2="-20.32" width="0.254" layer="94"/>
<text x="-9.652" y="21.082" size="1.778" layer="95">&gt;Name</text>
<text x="-8.89" y="-22.86" size="1.778" layer="96">&gt;Value</text>
<pin name="RX" x="12.7" y="17.78" visible="pin" length="short" rot="R180"/>
<pin name="TX" x="12.7" y="15.24" visible="pin" length="short" rot="R180"/>
<pin name="D2" x="12.7" y="10.16" visible="pin" length="short" rot="R180"/>
<pin name="*D3" x="12.7" y="7.62" visible="pin" length="short" rot="R180"/>
<pin name="D4" x="12.7" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="*D5" x="12.7" y="2.54" visible="pin" length="short" rot="R180"/>
<pin name="*D6" x="12.7" y="0" visible="pin" length="short" rot="R180"/>
<pin name="D7" x="12.7" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="D8" x="12.7" y="-5.08" visible="pin" length="short" rot="R180"/>
<pin name="*D9" x="12.7" y="-7.62" visible="pin" length="short" rot="R180"/>
<pin name="*D10" x="12.7" y="-10.16" visible="pin" length="short" rot="R180"/>
<pin name="*D11" x="12.7" y="-12.7" visible="pin" length="short" rot="R180"/>
<pin name="D12" x="12.7" y="-15.24" visible="pin" length="short" rot="R180"/>
<pin name="D13" x="12.7" y="-17.78" visible="pin" length="short" rot="R180"/>
<pin name="A0" x="-12.7" y="17.78" visible="pin" length="short"/>
<pin name="A1" x="-12.7" y="15.24" visible="pin" length="short"/>
<pin name="A2" x="-12.7" y="12.7" visible="pin" length="short"/>
<pin name="A3" x="-12.7" y="10.16" visible="pin" length="short"/>
<pin name="A4" x="-12.7" y="7.62" visible="pin" length="short"/>
<pin name="A5" x="-12.7" y="5.08" visible="pin" length="short"/>
<pin name="VIN" x="-12.7" y="-2.54" visible="pin" length="short"/>
<pin name="RES" x="-12.7" y="0" visible="pin" length="short"/>
<pin name="5V" x="-12.7" y="-5.08" visible="pin" length="short"/>
<pin name="AREF" x="-12.7" y="-10.16" visible="pin" length="short"/>
<pin name="GND@2" x="-12.7" y="-12.7" visible="pin" length="short"/>
<pin name="GND@1" x="-12.7" y="-15.24" visible="pin" length="short"/>
<pin name="GND@0" x="-12.7" y="-17.78" visible="pin" length="short"/>
<pin name="3.3V" x="-12.7" y="-7.62" visible="pin" length="short"/>
</symbol>
<symbol name="ARDUINO_SERIAL_PROGRAM">
<wire x1="1.27" y1="-7.62" x2="-7.62" y2="-7.62" width="0.4064" layer="94"/>
<wire x1="-1.27" y1="0" x2="0" y2="0" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="-2.54" x2="0" y2="-2.54" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="-5.08" x2="0" y2="-5.08" width="0.6096" layer="94"/>
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-7.62" width="0.4064" layer="94"/>
<wire x1="1.27" y1="-7.62" x2="1.27" y2="10.16" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="10.16" x2="1.27" y2="10.16" width="0.4064" layer="94"/>
<wire x1="-1.27" y1="5.08" x2="0" y2="5.08" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="2.54" x2="0" y2="2.54" width="0.6096" layer="94"/>
<wire x1="-1.27" y1="7.62" x2="0" y2="7.62" width="0.6096" layer="94"/>
<text x="-5.08" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<text x="-5.08" y="10.922" size="1.778" layer="95">&gt;NAME</text>
<pin name="DTR" x="5.08" y="-5.08" visible="pin" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="RXI" x="5.08" y="-2.54" visible="pin" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="TXO" x="5.08" y="0" visible="pin" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="VCC" x="5.08" y="2.54" visible="pin" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="CTS" x="5.08" y="5.08" visible="pin" length="middle" direction="pas" swaplevel="1" rot="R180"/>
<pin name="GND" x="5.08" y="7.62" visible="pin" length="middle" direction="pas" swaplevel="1" rot="R180"/>
</symbol>
<symbol name="BREADBOARD">
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="5.08" x2="-5.08" y2="5.08" width="0.254" layer="94"/>
<text x="-5.08" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<text x="-5.08" y="-7.62" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="MICRO-SDCARD">
<wire x1="12.7" y1="22.86" x2="12.7" y2="0" width="0.254" layer="94"/>
<wire x1="12.7" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="22.86" width="0.254" layer="94"/>
<wire x1="0" y1="22.86" x2="12.7" y2="22.86" width="0.254" layer="94"/>
<text x="5.08" y="25.4" size="1.27" layer="95" rot="R180">&gt;NAME</text>
<text x="0" y="-2.54" size="1.27" layer="96">&gt;VALUE</text>
<pin name="CD/DAT3" x="17.78" y="5.08" length="middle" rot="R180"/>
<pin name="CMD" x="17.78" y="7.62" length="middle" rot="R180"/>
<pin name="GND" x="17.78" y="10.16" length="middle" rot="R180"/>
<pin name="VDD" x="17.78" y="12.7" length="middle" rot="R180"/>
<pin name="CLK" x="17.78" y="15.24" length="middle" rot="R180"/>
<pin name="DAT0" x="17.78" y="17.78" length="middle" rot="R180"/>
<pin name="DAT1" x="17.78" y="20.32" length="middle" rot="R180"/>
<pin name="DAT2" x="17.78" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="SD-MMC-CARD">
<wire x1="-5.08" y1="-12.7" x2="7.62" y2="-12.7" width="0.254" layer="94"/>
<wire x1="7.62" y1="-12.7" x2="7.62" y2="12.7" width="0.254" layer="94"/>
<wire x1="7.62" y1="12.7" x2="-5.08" y2="12.7" width="0.254" layer="94"/>
<wire x1="-5.08" y1="12.7" x2="-5.08" y2="-12.7" width="0.254" layer="94"/>
<text x="0.762" y="14.478" size="1.27" layer="95" rot="R180">&gt;NAME</text>
<text x="3.048" y="-13.462" size="1.27" layer="96" rot="R180">&gt;VALUE</text>
<pin name="DAT2" x="-10.16" y="10.16" length="middle"/>
<pin name="CD/DAT3" x="-10.16" y="7.62" length="middle"/>
<pin name="CMD" x="-10.16" y="5.08" length="middle"/>
<pin name="VSS1" x="-10.16" y="2.54" length="middle"/>
<pin name="VDD" x="-10.16" y="0" length="middle"/>
<pin name="DAT1" x="-10.16" y="-10.16" length="middle"/>
<pin name="DAT0" x="-10.16" y="-7.62" length="middle"/>
<pin name="VSS2" x="-10.16" y="-5.08" length="middle"/>
<pin name="CLK" x="-10.16" y="-2.54" length="middle"/>
</symbol>
<symbol name="WIZ811MJ">
<wire x1="-12.7" y1="30.48" x2="-12.7" y2="-33.02" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-33.02" x2="12.7" y2="-33.02" width="0.254" layer="94"/>
<wire x1="12.7" y1="-33.02" x2="12.7" y2="30.48" width="0.254" layer="94"/>
<wire x1="12.7" y1="30.48" x2="-12.7" y2="30.48" width="0.254" layer="94"/>
<text x="-12.7" y="30.988" size="1.778" layer="95">&gt;Name</text>
<text x="-12.7" y="-35.56" size="1.778" layer="96">&gt;Value</text>
<pin name="VCC@1" x="-15.24" y="27.94" length="short"/>
<pin name="VCC@2" x="-15.24" y="25.4" length="short"/>
<pin name="GND@1" x="-15.24" y="-20.32" length="short"/>
<pin name="GND@2" x="-15.24" y="-22.86" length="short"/>
<pin name="GND@3" x="-15.24" y="-25.4" length="short"/>
<pin name="GND@4" x="-15.24" y="-27.94" length="short"/>
<pin name="GND@5" x="-15.24" y="-30.48" length="short"/>
<pin name="SCLK" x="15.24" y="20.32" length="short" rot="R180"/>
<pin name="/SCS" x="15.24" y="17.78" length="short" rot="R180"/>
<pin name="MOSI" x="15.24" y="15.24" length="short" rot="R180"/>
<pin name="MISO" x="15.24" y="12.7" length="short" rot="R180"/>
<pin name="A14" x="15.24" y="5.08" length="short" rot="R180"/>
<pin name="A13" x="15.24" y="2.54" length="short" rot="R180"/>
<pin name="A12" x="15.24" y="0" length="short" rot="R180"/>
<pin name="A11" x="15.24" y="-2.54" length="short" rot="R180"/>
<pin name="A10" x="15.24" y="-5.08" length="short" rot="R180"/>
<pin name="A9" x="15.24" y="-7.62" length="short" rot="R180"/>
<pin name="A8" x="15.24" y="-10.16" length="short" rot="R180"/>
<pin name="A7" x="15.24" y="-12.7" length="short" rot="R180"/>
<pin name="D7" x="-15.24" y="-12.7" length="short"/>
<pin name="D6" x="-15.24" y="-10.16" length="short"/>
<pin name="D5" x="-15.24" y="-7.62" length="short"/>
<pin name="D4" x="-15.24" y="-5.08" length="short"/>
<pin name="D3" x="-15.24" y="-2.54" length="short"/>
<pin name="D2" x="-15.24" y="0" length="short"/>
<pin name="D1" x="-15.24" y="2.54" length="short"/>
<pin name="/RD" x="-15.24" y="12.7" length="short"/>
<pin name="/CS" x="-15.24" y="10.16" length="short"/>
<pin name="/WR" x="-15.24" y="15.24" length="short"/>
<pin name="/INT" x="-15.24" y="17.78" length="short"/>
<pin name="D0" x="-15.24" y="5.08" length="short"/>
<pin name="/RESET" x="15.24" y="27.94" length="short" rot="R180"/>
<pin name="A6" x="15.24" y="-15.24" length="short" rot="R180"/>
<pin name="A5" x="15.24" y="-17.78" length="short" rot="R180"/>
<pin name="A4" x="15.24" y="-20.32" length="short" rot="R180"/>
<pin name="A3" x="15.24" y="-22.86" length="short" rot="R180"/>
<pin name="A2" x="15.24" y="-25.4" length="short" rot="R180"/>
<pin name="A1" x="15.24" y="-27.94" length="short" rot="R180"/>
<pin name="A0" x="15.24" y="-30.48" length="short" rot="R180"/>
</symbol>
<symbol name="XPORT">
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="7.62" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="7.62" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<text x="-7.366" y="8.128" size="1.27" layer="95">&gt;NAME</text>
<text x="-7.366" y="-7.112" size="1.27" layer="96">&gt;VALUE</text>
<pin name="GND" x="-12.7" y="5.08" visible="pin" length="middle"/>
<pin name="3.3V" x="-12.7" y="2.54" visible="pin" length="middle"/>
<pin name="RST" x="-12.7" y="0" visible="pin" length="middle" function="dot"/>
<pin name="TX" x="-12.7" y="-2.54" visible="pin" length="middle"/>
<pin name="RX" x="15.24" y="-2.54" visible="pin" length="middle" rot="R180"/>
<pin name="RTS" x="15.24" y="0" visible="pin" length="middle" rot="R180"/>
<pin name="DTR" x="15.24" y="2.54" visible="pin" length="middle" rot="R180"/>
<pin name="CTS" x="15.24" y="5.08" visible="pin" length="middle" rot="R180"/>
</symbol>
<symbol name="XPORT_DIRECT">
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<text x="-7.366" y="10.668" size="1.27" layer="95">&gt;NAME</text>
<text x="-7.62" y="-14.732" size="1.27" layer="96">&gt;VALUE</text>
<pin name="GND@1" x="-12.7" y="-5.08" visible="pin" length="middle"/>
<pin name="GND@2" x="-12.7" y="-7.62" visible="pin" length="middle"/>
<pin name="3.3V" x="-12.7" y="7.62" visible="pin" length="middle"/>
<pin name="RST" x="-12.7" y="2.54" visible="pin" length="middle"/>
<pin name="TX" x="15.24" y="7.62" visible="pin" length="middle" rot="R180"/>
<pin name="RX" x="15.24" y="5.08" visible="pin" length="middle" rot="R180"/>
<pin name="RTS" x="15.24" y="2.54" visible="pin" length="middle" rot="R180"/>
<pin name="DTR" x="15.24" y="0" visible="pin" length="middle" rot="R180"/>
<pin name="CTS" x="15.24" y="-2.54" visible="pin" length="middle" rot="R180"/>
<pin name="CP1" x="15.24" y="-7.62" visible="pin" length="middle" rot="R180"/>
<pin name="CP2" x="15.24" y="-10.16" visible="pin" length="middle" rot="R180"/>
<pin name="GND@24" x="-12.7" y="-10.16" visible="pin" length="middle"/>
</symbol>
<symbol name="AUDIO-AMP-MONO">
<wire x1="-12.7" y1="10.16" x2="12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="12.7" y1="10.16" x2="12.7" y2="-7.62" width="0.254" layer="94"/>
<wire x1="12.7" y1="-7.62" x2="-12.7" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-7.62" x2="-12.7" y2="10.16" width="0.254" layer="94"/>
<pin name="OUT+" x="-15.24" y="7.62" visible="pin" length="short"/>
<pin name="OUT-" x="-15.24" y="5.08" visible="pin" length="short"/>
<pin name="GND" x="-15.24" y="0" visible="pin" length="short"/>
<pin name="VCC" x="-15.24" y="-2.54" visible="pin" length="short"/>
<pin name="*SHTDWN" x="-15.24" y="-5.08" visible="pin" length="short"/>
<pin name="VCC@VOL" x="15.24" y="-5.08" visible="pin" length="short" rot="R180"/>
<pin name="VOL" x="15.24" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="GND@VOL" x="15.24" y="0" visible="pin" length="short" rot="R180"/>
<pin name="IN-" x="15.24" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="IN+" x="15.24" y="7.62" visible="pin" length="short" rot="R180"/>
<text x="-12.7" y="10.922" size="1.778" layer="95">&gt;Name</text>
<text x="-12.7" y="-10.16" size="1.778" layer="96">&gt;Value</text>
</symbol>
<symbol name="ARDUINO_PRO_MINI">
<wire x1="-7.62" y1="17.78" x2="-7.62" y2="-22.86" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-22.86" x2="10.16" y2="-22.86" width="0.254" layer="94"/>
<wire x1="10.16" y1="-22.86" x2="10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="17.78" x2="-7.62" y2="17.78" width="0.254" layer="94"/>
<text x="-7.62" y="18.542" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-25.4" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="-10.16" y="5.08" length="short"/>
<pin name="*3" x="-10.16" y="2.54" length="short"/>
<pin name="4" x="-10.16" y="0" length="short"/>
<pin name="*5" x="-10.16" y="-2.54" length="short"/>
<pin name="*6" x="-10.16" y="-5.08" length="short"/>
<pin name="7" x="-10.16" y="-7.62" length="short"/>
<pin name="8" x="-10.16" y="-10.16" length="short"/>
<pin name="*9" x="-10.16" y="-12.7" length="short"/>
<pin name="*10" x="12.7" y="-12.7" length="short" rot="R180"/>
<pin name="*11" x="12.7" y="-10.16" length="short" rot="R180"/>
<pin name="12" x="12.7" y="-7.62" length="short" rot="R180"/>
<pin name="13" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="A0" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="A1" x="12.7" y="0" length="short" rot="R180"/>
<pin name="A2" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="A3" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="GND" x="-10.16" y="7.62" length="short"/>
<pin name="GND@2" x="12.7" y="12.7" length="short" rot="R180"/>
<pin name="RAW" x="12.7" y="15.24" length="short" rot="R180"/>
<pin name="RST" x="-10.16" y="10.16" length="short"/>
<pin name="RST@2" x="12.7" y="10.16" length="short" rot="R180"/>
<pin name="RXI" x="-10.16" y="12.7" length="short"/>
<pin name="TXO" x="-10.16" y="15.24" length="short"/>
<pin name="VCC" x="12.7" y="7.62" length="short" rot="R180"/>
<pin name="A7" x="12.7" y="-17.78" length="short" rot="R180"/>
<pin name="A6" x="12.7" y="-20.32" length="short" rot="R180"/>
<pin name="A4" x="-10.16" y="-17.78" length="short"/>
<pin name="A5" x="-10.16" y="-20.32" length="short"/>
</symbol>
<symbol name="LOGIC_LEVEL_CONVERTER">
<description>Logic Level Converter (3.3v - 5v)</description>
<pin name="HV_TXO_1" x="7.62" y="30.48" length="middle" rot="R180"/>
<pin name="HV_RXI_1" x="7.62" y="27.94" length="middle" rot="R180"/>
<pin name="HV" x="7.62" y="25.4" length="middle" rot="R180"/>
<pin name="GND@2" x="7.62" y="22.86" length="middle" rot="R180"/>
<pin name="HV_RXI_2" x="7.62" y="20.32" length="middle" rot="R180"/>
<pin name="HV_TXO_2" x="7.62" y="17.78" length="middle" rot="R180"/>
<pin name="LV_TXI_1" x="-30.48" y="30.48" length="middle"/>
<pin name="LV" x="-30.48" y="25.4" length="middle"/>
<pin name="LV_RXO_1" x="-30.48" y="27.94" length="middle"/>
<pin name="GND" x="-30.48" y="22.86" length="middle"/>
<pin name="LV_RXO_2" x="-30.48" y="20.32" length="middle"/>
<pin name="LV_TXI_2" x="-30.48" y="17.78" length="middle"/>
<wire x1="-25.4" y1="15.24" x2="-25.4" y2="33.02" width="0.254" layer="94"/>
<wire x1="-25.4" y1="33.02" x2="2.54" y2="33.02" width="0.254" layer="94"/>
<wire x1="2.54" y1="33.02" x2="2.54" y2="15.24" width="0.254" layer="94"/>
<wire x1="2.54" y1="15.24" x2="-25.4" y2="15.24" width="0.254" layer="94"/>
</symbol>
<symbol name="ARDUINO_R3_SHIELD">
<wire x1="-10.16" y1="-25.4" x2="-10.16" y2="20.32" width="0.254" layer="94"/>
<wire x1="-10.16" y1="20.32" x2="10.16" y2="20.32" width="0.254" layer="94"/>
<wire x1="10.16" y1="20.32" x2="10.16" y2="-25.4" width="0.254" layer="94"/>
<wire x1="10.16" y1="-25.4" x2="-10.16" y2="-25.4" width="0.254" layer="94"/>
<text x="-9.652" y="21.082" size="1.778" layer="95">&gt;Name</text>
<text x="-6.35" y="-27.94" size="1.778" layer="96">&gt;Value</text>
<pin name="RX" x="12.7" y="17.78" visible="pin" length="short" rot="R180"/>
<pin name="TX" x="12.7" y="15.24" visible="pin" length="short" rot="R180"/>
<pin name="D2" x="12.7" y="10.16" visible="pin" length="short" rot="R180"/>
<pin name="*D3" x="12.7" y="7.62" visible="pin" length="short" rot="R180"/>
<pin name="D4" x="12.7" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="*D5" x="12.7" y="2.54" visible="pin" length="short" rot="R180"/>
<pin name="*D6" x="12.7" y="0" visible="pin" length="short" rot="R180"/>
<pin name="D7" x="12.7" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="D8" x="12.7" y="-5.08" visible="pin" length="short" rot="R180"/>
<pin name="*D9" x="12.7" y="-7.62" visible="pin" length="short" rot="R180"/>
<pin name="*D10" x="12.7" y="-10.16" visible="pin" length="short" rot="R180"/>
<pin name="*D11" x="12.7" y="-12.7" visible="pin" length="short" rot="R180"/>
<pin name="D12" x="12.7" y="-15.24" visible="pin" length="short" rot="R180"/>
<pin name="D13" x="12.7" y="-17.78" visible="pin" length="short" rot="R180"/>
<pin name="A0" x="-12.7" y="17.78" visible="pin" length="short"/>
<pin name="A1" x="-12.7" y="15.24" visible="pin" length="short"/>
<pin name="A2" x="-12.7" y="12.7" visible="pin" length="short"/>
<pin name="A3" x="-12.7" y="10.16" visible="pin" length="short"/>
<pin name="A4" x="-12.7" y="7.62" visible="pin" length="short"/>
<pin name="A5" x="-12.7" y="5.08" visible="pin" length="short"/>
<pin name="VIN" x="-12.7" y="-7.62" visible="pin" length="short"/>
<pin name="RES" x="-12.7" y="-5.08" visible="pin" length="short"/>
<pin name="5V" x="-12.7" y="-10.16" visible="pin" length="short"/>
<pin name="AREF" x="-12.7" y="-15.24" visible="pin" length="short"/>
<pin name="GND@2" x="-12.7" y="-17.78" visible="pin" length="short"/>
<pin name="GND@1" x="-12.7" y="-20.32" visible="pin" length="short"/>
<pin name="GND@0" x="-12.7" y="-22.86" visible="pin" length="short"/>
<pin name="3.3V" x="-12.7" y="-12.7" visible="pin" length="short"/>
<pin name="IOREF" x="-12.7" y="-2.54" visible="pin" length="short"/>
<pin name="SDA" x="12.7" y="-20.32" visible="pin" length="short" rot="R180"/>
<pin name="SCL" x="12.7" y="-22.86" visible="pin" length="short" rot="R180"/>
</symbol>
<symbol name="ARDUINO_PRO_MICRO">
<wire x1="-7.62" y1="17.78" x2="-7.62" y2="-15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="-15.24" x2="10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="17.78" x2="-7.62" y2="17.78" width="0.254" layer="94"/>
<text x="-7.62" y="18.542" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-17.78" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="-10.16" y="5.08" length="short"/>
<pin name="*3" x="-10.16" y="2.54" length="short"/>
<pin name="4" x="-10.16" y="0" length="short"/>
<pin name="*5" x="-10.16" y="-2.54" length="short"/>
<pin name="*6" x="-10.16" y="-5.08" length="short"/>
<pin name="7" x="-10.16" y="-7.62" length="short"/>
<pin name="8" x="-10.16" y="-10.16" length="short"/>
<pin name="*9" x="-10.16" y="-12.7" length="short"/>
<pin name="*10" x="12.7" y="-12.7" length="short" rot="R180"/>
<pin name="11(MOSI)" x="12.7" y="-10.16" length="short" rot="R180"/>
<pin name="12(MISO)" x="12.7" y="-7.62" length="short" rot="R180"/>
<pin name="13(SCK)" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="A0" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="A1" x="12.7" y="0" length="short" rot="R180"/>
<pin name="A2" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="A3" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="GND" x="-10.16" y="7.62" length="short"/>
<pin name="GND@2" x="12.7" y="12.7" length="short" rot="R180"/>
<pin name="RAW" x="12.7" y="15.24" length="short" rot="R180"/>
<pin name="GND@1" x="-10.16" y="10.16" length="short"/>
<pin name="RESET" x="12.7" y="10.16" length="short" rot="R180"/>
<pin name="RXI" x="-10.16" y="12.7" length="short"/>
<pin name="TXO" x="-10.16" y="15.24" length="short"/>
<pin name="VCC" x="12.7" y="7.62" length="short" rot="R180"/>
<wire x1="-7.62" y1="-15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/>
</symbol>
<symbol name="RASPBERRYPI-GPIO">
<wire x1="-12.7" y1="27.94" x2="12.7" y2="27.94" width="0.254" layer="94"/>
<wire x1="12.7" y1="27.94" x2="12.7" y2="-25.4" width="0.254" layer="94"/>
<wire x1="12.7" y1="-25.4" x2="-12.7" y2="-25.4" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-25.4" x2="-12.7" y2="27.94" width="0.254" layer="94"/>
<pin name="3.3V@1" x="-15.24" y="20.32" length="short" direction="pwr"/>
<pin name="SDA" x="15.24" y="25.4" length="short" rot="R180"/>
<pin name="SCL" x="15.24" y="22.86" length="short" rot="R180"/>
<pin name="GP4" x="15.24" y="-5.08" length="short" rot="R180"/>
<pin name="GND@9" x="-15.24" y="-15.24" length="short" direction="pwr"/>
<pin name="GP17" x="15.24" y="-7.62" length="short" rot="R180"/>
<pin name="GP27" x="15.24" y="-22.86" length="short" rot="R180"/>
<pin name="GP22" x="15.24" y="-12.7" length="short" rot="R180"/>
<pin name="3.3V@17" x="-15.24" y="17.78" length="short" direction="pwr"/>
<pin name="MOSI" x="15.24" y="5.08" length="short" direction="out" rot="R180"/>
<pin name="MISO" x="15.24" y="7.62" length="short" direction="in" rot="R180"/>
<pin name="SCLK" x="15.24" y="10.16" length="short" direction="out" rot="R180"/>
<pin name="GND@25" x="-15.24" y="-22.86" length="short" direction="pwr"/>
<pin name="CE1" x="15.24" y="0" length="short" direction="out" rot="R180"/>
<pin name="CE0" x="15.24" y="2.54" length="short" direction="out" rot="R180"/>
<pin name="GP25" x="15.24" y="-20.32" length="short" rot="R180"/>
<pin name="GND@20" x="-15.24" y="-20.32" length="short" direction="pwr"/>
<pin name="GP24" x="15.24" y="-17.78" length="short" rot="R180"/>
<pin name="GP23" x="15.24" y="-15.24" length="short" rot="R180"/>
<pin name="GND@14" x="-15.24" y="-17.78" length="short" direction="pwr"/>
<pin name="GP18#" x="15.24" y="-10.16" length="short" rot="R180"/>
<pin name="RXI" x="15.24" y="15.24" length="short" direction="in" rot="R180"/>
<pin name="TXO" x="15.24" y="17.78" length="short" direction="out" rot="R180"/>
<pin name="GND@6" x="-15.24" y="-12.7" length="short" direction="pwr"/>
<pin name="5V@4" x="-15.24" y="22.86" length="short" direction="pwr"/>
<pin name="5V@2" x="-15.24" y="25.4" length="short" direction="pwr"/>
<text x="-12.7" y="28.702" size="1.778" layer="95">&gt;Name</text>
<text x="-12.7" y="-27.94" size="1.778" layer="96">&gt;Value</text>
</symbol>
</symbols>
<devicesets>
<deviceset name="ARDUINO-MEGA" prefix="U">
<description>Arduino Mega board footprint</description>
<gates>
<gate name="G$1" symbol="ARDUINO-MEGA" x="0" y="0"/>
</gates>
<devices>
<device name="FULL" package="ARDUINO_MEGA">
<connects>
<connect gate="G$1" pin="0(RX0)" pad="0"/>
<connect gate="G$1" pin="1(TX0)" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14(TX3)" pad="14"/>
<connect gate="G$1" pin="15(RX3)" pad="15"/>
<connect gate="G$1" pin="16(TX2)" pad="16"/>
<connect gate="G$1" pin="17(RX2)" pad="17"/>
<connect gate="G$1" pin="18(TX1)" pad="18"/>
<connect gate="G$1" pin="19(RX1)" pad="19"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="20(SDA)" pad="20"/>
<connect gate="G$1" pin="21(SCL)" pad="21"/>
<connect gate="G$1" pin="22" pad="22"/>
<connect gate="G$1" pin="23" pad="23"/>
<connect gate="G$1" pin="24" pad="24"/>
<connect gate="G$1" pin="25" pad="25"/>
<connect gate="G$1" pin="26" pad="26"/>
<connect gate="G$1" pin="27" pad="27"/>
<connect gate="G$1" pin="28" pad="28"/>
<connect gate="G$1" pin="29" pad="29"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="30" pad="30"/>
<connect gate="G$1" pin="31" pad="31"/>
<connect gate="G$1" pin="32" pad="32"/>
<connect gate="G$1" pin="33" pad="33"/>
<connect gate="G$1" pin="34" pad="34"/>
<connect gate="G$1" pin="35" pad="35"/>
<connect gate="G$1" pin="36" pad="36"/>
<connect gate="G$1" pin="37" pad="37"/>
<connect gate="G$1" pin="38" pad="38"/>
<connect gate="G$1" pin="39" pad="39"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="40" pad="40"/>
<connect gate="G$1" pin="41" pad="41"/>
<connect gate="G$1" pin="42" pad="42"/>
<connect gate="G$1" pin="43" pad="43"/>
<connect gate="G$1" pin="44" pad="44"/>
<connect gate="G$1" pin="45" pad="45"/>
<connect gate="G$1" pin="46" pad="46"/>
<connect gate="G$1" pin="47" pad="47"/>
<connect gate="G$1" pin="48" pad="48"/>
<connect gate="G$1" pin="49" pad="49"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="50" pad="50"/>
<connect gate="G$1" pin="51" pad="51"/>
<connect gate="G$1" pin="52" pad="52"/>
<connect gate="G$1" pin="53" pad="53"/>
<connect gate="G$1" pin="5V@0" pad="5V@0"/>
<connect gate="G$1" pin="5V@1" pad="5V@1"/>
<connect gate="G$1" pin="5V@2" pad="5V@2"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
<connect gate="G$1" pin="A0(RX0)" pad="A0"/>
<connect gate="G$1" pin="A1(TX0)" pad="A1"/>
<connect gate="G$1" pin="A10" pad="A10"/>
<connect gate="G$1" pin="A11" pad="A11"/>
<connect gate="G$1" pin="A12" pad="A12"/>
<connect gate="G$1" pin="A13" pad="A13"/>
<connect gate="G$1" pin="A14" pad="A14"/>
<connect gate="G$1" pin="A15" pad="A15"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="A6" pad="A6"/>
<connect gate="G$1" pin="A7" pad="A7"/>
<connect gate="G$1" pin="A8" pad="A8"/>
<connect gate="G$1" pin="A9" pad="A9"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="GND@3" pad="GND@3"/>
<connect gate="G$1" pin="GND@4" pad="GND@4"/>
<connect gate="G$1" pin="RESET" pad="RESET"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PRO" package="ARDUINO_MEGA-PRO-3.3V">
<connects>
<connect gate="G$1" pin="0(RX0)" pad="0"/>
<connect gate="G$1" pin="1(TX0)" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14(TX3)" pad="14"/>
<connect gate="G$1" pin="15(RX3)" pad="15"/>
<connect gate="G$1" pin="16(TX2)" pad="16"/>
<connect gate="G$1" pin="17(RX2)" pad="17"/>
<connect gate="G$1" pin="18(TX1)" pad="18"/>
<connect gate="G$1" pin="19(RX1)" pad="19"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="20(SDA)" pad="20"/>
<connect gate="G$1" pin="21(SCL)" pad="21"/>
<connect gate="G$1" pin="22" pad="22"/>
<connect gate="G$1" pin="23" pad="23"/>
<connect gate="G$1" pin="24" pad="24"/>
<connect gate="G$1" pin="25" pad="25"/>
<connect gate="G$1" pin="26" pad="26"/>
<connect gate="G$1" pin="27" pad="27"/>
<connect gate="G$1" pin="28" pad="28"/>
<connect gate="G$1" pin="29" pad="29"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="30" pad="30"/>
<connect gate="G$1" pin="31" pad="31"/>
<connect gate="G$1" pin="32" pad="32"/>
<connect gate="G$1" pin="33" pad="33"/>
<connect gate="G$1" pin="34" pad="34"/>
<connect gate="G$1" pin="35" pad="35"/>
<connect gate="G$1" pin="36" pad="36"/>
<connect gate="G$1" pin="37" pad="37"/>
<connect gate="G$1" pin="38" pad="38"/>
<connect gate="G$1" pin="39" pad="39"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="40" pad="40"/>
<connect gate="G$1" pin="41" pad="41"/>
<connect gate="G$1" pin="42" pad="42"/>
<connect gate="G$1" pin="43" pad="43"/>
<connect gate="G$1" pin="44" pad="44"/>
<connect gate="G$1" pin="45" pad="45"/>
<connect gate="G$1" pin="46" pad="46"/>
<connect gate="G$1" pin="47" pad="47"/>
<connect gate="G$1" pin="48" pad="48"/>
<connect gate="G$1" pin="49" pad="49"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="50" pad="50"/>
<connect gate="G$1" pin="51" pad="51"/>
<connect gate="G$1" pin="52" pad="52"/>
<connect gate="G$1" pin="53" pad="53"/>
<connect gate="G$1" pin="5V@0" pad="5V@0"/>
<connect gate="G$1" pin="5V@1" pad="5V@1"/>
<connect gate="G$1" pin="5V@2" pad="5V@2"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
<connect gate="G$1" pin="A0(RX0)" pad="A0"/>
<connect gate="G$1" pin="A1(TX0)" pad="A1"/>
<connect gate="G$1" pin="A10" pad="A10"/>
<connect gate="G$1" pin="A11" pad="A11"/>
<connect gate="G$1" pin="A12" pad="A12"/>
<connect gate="G$1" pin="A13" pad="A13"/>
<connect gate="G$1" pin="A14" pad="A14"/>
<connect gate="G$1" pin="A15" pad="A15"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="A6" pad="A6"/>
<connect gate="G$1" pin="A7" pad="A7"/>
<connect gate="G$1" pin="A8" pad="A8"/>
<connect gate="G$1" pin="A9" pad="A9"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="GND@3" pad="GND@3"/>
<connect gate="G$1" pin="GND@4" pad="GND@4"/>
<connect gate="G$1" pin="RESET" pad="RESET"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ARDUINO_MINI">
<description>Arduino Pro Mini footprint</description>
<gates>
<gate name="G$1" symbol="ARDUINO_MINI" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="ARDUINO_MINI">
<connects>
<connect gate="G$1" pin="10" pad="13"/>
<connect gate="G$1" pin="11" pad="14"/>
<connect gate="G$1" pin="12" pad="15"/>
<connect gate="G$1" pin="13" pad="16"/>
<connect gate="G$1" pin="2" pad="5"/>
<connect gate="G$1" pin="3" pad="6"/>
<connect gate="G$1" pin="4" pad="7"/>
<connect gate="G$1" pin="5" pad="8"/>
<connect gate="G$1" pin="6" pad="9"/>
<connect gate="G$1" pin="7" pad="10"/>
<connect gate="G$1" pin="8" pad="11"/>
<connect gate="G$1" pin="9" pad="12"/>
<connect gate="G$1" pin="A0" pad="17"/>
<connect gate="G$1" pin="A1" pad="18"/>
<connect gate="G$1" pin="A2" pad="19"/>
<connect gate="G$1" pin="A3" pad="20"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="GND@2" pad="23"/>
<connect gate="G$1" pin="RAW" pad="24"/>
<connect gate="G$1" pin="RST" pad="3"/>
<connect gate="G$1" pin="RST@2" pad="22"/>
<connect gate="G$1" pin="RXI" pad="2"/>
<connect gate="G$1" pin="TXO" pad="1"/>
<connect gate="G$1" pin="VCC" pad="21"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ARDUINO_SHIELD" prefix="U">
<description>Arduino shield footprint</description>
<gates>
<gate name="G$1" symbol="ARDUINO_SHIELD" x="0" y="0"/>
</gates>
<devices>
<device name="LABEL" package="DUEMILANOVE_SHIELD">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NO_SILK" package="DUEMILANOVE_VIAS">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NOHOLES" package="DUEMILANOVE_SHIELD_NOHOLES">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="LONGPADS" package="DUEMILANOVE_SHIELD_LONGPADS">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NOLABELS" package="DUEMILANOVE_SHIELD_NOLABELS">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NOHOLESORLABELS" package="DUEMILANOVE_SHIELD_NOHOLES_NOLABELS">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="BREADBOARD">
<description>&lt;b&gt;Breadboard Mini Self Adhesive&lt;/b&gt;&lt;p&gt;
This is the mechnical outline for the very small self adhesive breadboard from SparkFun Electronics. Good for very small proto areas. SKU : PRT-07916</description>
<gates>
<gate name="G$1" symbol="BREADBOARD" x="0" y="0"/>
</gates>
<devices>
<device name="MINI" package="BREADBOARD-MINI">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MICRO-SDCARD">
<description>MicroSD footprint- NOT a socket for a MicroSD card!</description>
<gates>
<gate name="G$1" symbol="MICRO-SDCARD" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="MICRO-SDCARD">
<connects>
<connect gate="G$1" pin="CD/DAT3" pad="CD/DAT3"/>
<connect gate="G$1" pin="CLK" pad="CLK"/>
<connect gate="G$1" pin="CMD" pad="CMD"/>
<connect gate="G$1" pin="DAT0" pad="DAT0"/>
<connect gate="G$1" pin="DAT1" pad="DAT1"/>
<connect gate="G$1" pin="DAT2" pad="DAT2"/>
<connect gate="G$1" pin="GND" pad="GND"/>
<connect gate="G$1" pin="VDD" pad="VCC"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SD_MMC_CARD">
<description>Mechanical size of an SD/MMC card- NOT a socket!</description>
<gates>
<gate name="G$1" symbol="SD-MMC-CARD" x="0" y="0"/>
</gates>
<devices>
<device name="SD_PCB" package="SD-MMC-CARD">
<connects>
<connect gate="G$1" pin="CD/DAT3" pad="1"/>
<connect gate="G$1" pin="CLK" pad="5"/>
<connect gate="G$1" pin="CMD" pad="2"/>
<connect gate="G$1" pin="DAT0" pad="7"/>
<connect gate="G$1" pin="DAT1" pad="8"/>
<connect gate="G$1" pin="DAT2" pad="9"/>
<connect gate="G$1" pin="VDD" pad="4"/>
<connect gate="G$1" pin="VSS1" pad="3"/>
<connect gate="G$1" pin="VSS2" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="WIZ811MJ" prefix="U">
<description>&lt;h3&gt;WIZnet W5100 Network Module with MagJack - WIZ811MJ&lt;/h3&gt;
WIZnet's WIZ811MJ is a breakout board for the W5100 embedded TCP/IP chip. Also included on the board is a RJ-45 MagJack Connector (RJ45 with X'FMR).&lt;br&gt;&lt;br&gt;

See http://www.sparkfun.com/commerce/product_info.php?products_id=9473 for more documentation and info.&lt;br&gt;
&lt;B&gt;**UNPROVEN&lt;/b&gt;</description>
<gates>
<gate name="G$1" symbol="WIZ811MJ" x="0" y="0"/>
</gates>
<devices>
<device name="" package="WIZ811MJ">
<connects>
<connect gate="G$1" pin="/CS" pad="27"/>
<connect gate="G$1" pin="/INT" pad="28"/>
<connect gate="G$1" pin="/RD" pad="26"/>
<connect gate="G$1" pin="/RESET" pad="22"/>
<connect gate="G$1" pin="/SCS" pad="24"/>
<connect gate="G$1" pin="/WR" pad="25"/>
<connect gate="G$1" pin="A0" pad="31"/>
<connect gate="G$1" pin="A1" pad="32"/>
<connect gate="G$1" pin="A10" pad="15"/>
<connect gate="G$1" pin="A11" pad="16"/>
<connect gate="G$1" pin="A12" pad="17"/>
<connect gate="G$1" pin="A13" pad="18"/>
<connect gate="G$1" pin="A14" pad="19"/>
<connect gate="G$1" pin="A2" pad="33"/>
<connect gate="G$1" pin="A3" pad="34"/>
<connect gate="G$1" pin="A4" pad="35"/>
<connect gate="G$1" pin="A5" pad="36"/>
<connect gate="G$1" pin="A6" pad="37"/>
<connect gate="G$1" pin="A7" pad="38"/>
<connect gate="G$1" pin="A8" pad="13"/>
<connect gate="G$1" pin="A9" pad="14"/>
<connect gate="G$1" pin="D0" pad="4"/>
<connect gate="G$1" pin="D1" pad="3"/>
<connect gate="G$1" pin="D2" pad="6"/>
<connect gate="G$1" pin="D3" pad="5"/>
<connect gate="G$1" pin="D4" pad="8"/>
<connect gate="G$1" pin="D5" pad="7"/>
<connect gate="G$1" pin="D6" pad="10"/>
<connect gate="G$1" pin="D7" pad="9"/>
<connect gate="G$1" pin="GND@1" pad="11"/>
<connect gate="G$1" pin="GND@2" pad="29"/>
<connect gate="G$1" pin="GND@3" pad="39"/>
<connect gate="G$1" pin="GND@4" pad="40"/>
<connect gate="G$1" pin="GND@5" pad="30"/>
<connect gate="G$1" pin="MISO" pad="2"/>
<connect gate="G$1" pin="MOSI" pad="1"/>
<connect gate="G$1" pin="SCLK" pad="23"/>
<connect gate="G$1" pin="VCC@1" pad="12"/>
<connect gate="G$1" pin="VCC@2" pad="21"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="XPORT">
<description>TCP/IP stack and phy in RJ-45 jack footprint</description>
<gates>
<gate name="G$1" symbol="XPORT" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="XPORT">
<connects>
<connect gate="G$1" pin="3.3V" pad="P2"/>
<connect gate="G$1" pin="CTS" pad="P8"/>
<connect gate="G$1" pin="DTR" pad="P7"/>
<connect gate="G$1" pin="GND" pad="P1"/>
<connect gate="G$1" pin="RST" pad="P3"/>
<connect gate="G$1" pin="RTS" pad="P6"/>
<connect gate="G$1" pin="RX" pad="P5"/>
<connect gate="G$1" pin="TX" pad="P4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="XPORT-DIRECT">
<description>TCP/IP phy and stack module</description>
<gates>
<gate name="G$1" symbol="XPORT_DIRECT" x="0" y="0"/>
</gates>
<devices>
<device name="" package="XPORT_DIRECT_MODULE">
<connects>
<connect gate="G$1" pin="3.3V" pad="P3"/>
<connect gate="G$1" pin="CP1" pad="P23"/>
<connect gate="G$1" pin="CP2" pad="P21"/>
<connect gate="G$1" pin="CTS" pad="P15"/>
<connect gate="G$1" pin="DTR" pad="P13"/>
<connect gate="G$1" pin="GND@1" pad="P1"/>
<connect gate="G$1" pin="GND@2" pad="P2"/>
<connect gate="G$1" pin="GND@24" pad="P24"/>
<connect gate="G$1" pin="RST" pad="P5"/>
<connect gate="G$1" pin="RTS" pad="P11"/>
<connect gate="G$1" pin="RX" pad="P9"/>
<connect gate="G$1" pin="TX" pad="P7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="XPORT_DIRECT_MODULE-SMD">
<connects>
<connect gate="G$1" pin="3.3V" pad="P3"/>
<connect gate="G$1" pin="CP1" pad="P23"/>
<connect gate="G$1" pin="CP2" pad="P21"/>
<connect gate="G$1" pin="CTS" pad="P15"/>
<connect gate="G$1" pin="DTR" pad="P13"/>
<connect gate="G$1" pin="GND@1" pad="P1"/>
<connect gate="G$1" pin="GND@2" pad="P2"/>
<connect gate="G$1" pin="GND@24" pad="P24"/>
<connect gate="G$1" pin="RST" pad="P5"/>
<connect gate="G$1" pin="RTS" pad="P11"/>
<connect gate="G$1" pin="RX" pad="P9"/>
<connect gate="G$1" pin="TX" pad="P7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AUDIO-AMP-MONO" prefix="U">
<gates>
<gate name="U1" symbol="AUDIO-AMP-MONO" x="0" y="0"/>
</gates>
<devices>
<device name="DIP" package="AUDIO-AMP-MONO">
<connects>
<connect gate="U1" pin="*SHTDWN" pad="S"/>
<connect gate="U1" pin="GND" pad="PWR-"/>
<connect gate="U1" pin="GND@VOL" pad="VOL-"/>
<connect gate="U1" pin="IN+" pad="IN+"/>
<connect gate="U1" pin="IN-" pad="IN-"/>
<connect gate="U1" pin="OUT+" pad="OUT+"/>
<connect gate="U1" pin="OUT-" pad="OUT-"/>
<connect gate="U1" pin="VCC" pad="PWR+"/>
<connect gate="U1" pin="VCC@VOL" pad="VOL+"/>
<connect gate="U1" pin="VOL" pad="VOL"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ARDUINO_PRO_MINI">
<gates>
<gate name="G$1" symbol="ARDUINO_PRO_MINI" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="ARDUINO_PRO_MINI">
<connects>
<connect gate="G$1" pin="*10" pad="13"/>
<connect gate="G$1" pin="*11" pad="14"/>
<connect gate="G$1" pin="*3" pad="6"/>
<connect gate="G$1" pin="*5" pad="8"/>
<connect gate="G$1" pin="*6" pad="9"/>
<connect gate="G$1" pin="*9" pad="12"/>
<connect gate="G$1" pin="12" pad="15"/>
<connect gate="G$1" pin="13" pad="16"/>
<connect gate="G$1" pin="2" pad="5"/>
<connect gate="G$1" pin="4" pad="7"/>
<connect gate="G$1" pin="7" pad="10"/>
<connect gate="G$1" pin="8" pad="11"/>
<connect gate="G$1" pin="A0" pad="17"/>
<connect gate="G$1" pin="A1" pad="18"/>
<connect gate="G$1" pin="A2" pad="19"/>
<connect gate="G$1" pin="A3" pad="20"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="A6" pad="A6"/>
<connect gate="G$1" pin="A7" pad="A7"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="GND@2" pad="23"/>
<connect gate="G$1" pin="RAW" pad="24"/>
<connect gate="G$1" pin="RST" pad="3"/>
<connect gate="G$1" pin="RST@2" pad="22"/>
<connect gate="G$1" pin="RXI" pad="2"/>
<connect gate="G$1" pin="TXO" pad="1"/>
<connect gate="G$1" pin="VCC" pad="21"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LOGIC_LEVEL_CONVERTER">
<description>Logic Level Converter (3.3v - 5v)


https://www.sparkfun.com/products/8745</description>
<gates>
<gate name="G$1" symbol="LOGIC_LEVEL_CONVERTER" x="10.16" y="-22.86"/>
</gates>
<devices>
<device name="" package="LOGIC_LEVEL_CONVERTER">
<connects>
<connect gate="G$1" pin="GND" pad="P$4"/>
<connect gate="G$1" pin="GND@2" pad="P$9"/>
<connect gate="G$1" pin="HV" pad="P$10"/>
<connect gate="G$1" pin="HV_RXI_1" pad="P$11"/>
<connect gate="G$1" pin="HV_RXI_2" pad="P$8"/>
<connect gate="G$1" pin="HV_TXO_1" pad="P$12"/>
<connect gate="G$1" pin="HV_TXO_2" pad="P$7"/>
<connect gate="G$1" pin="LV" pad="P$3"/>
<connect gate="G$1" pin="LV_RXO_1" pad="P$2"/>
<connect gate="G$1" pin="LV_RXO_2" pad="P$5"/>
<connect gate="G$1" pin="LV_TXI_1" pad="P$1"/>
<connect gate="G$1" pin="LV_TXI_2" pad="P$6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ARDUINO_R3_SHIELD">
<description>Shield form compatible with the Arduino Uno R3.</description>
<gates>
<gate name="G$1" symbol="ARDUINO_R3_SHIELD" x="0" y="0"/>
</gates>
<devices>
<device name="" package="UNO_R3_SHIELD">
<connects>
<connect gate="G$1" pin="*D10" pad="D10"/>
<connect gate="G$1" pin="*D11" pad="D11"/>
<connect gate="G$1" pin="*D3" pad="D3"/>
<connect gate="G$1" pin="*D5" pad="D5"/>
<connect gate="G$1" pin="*D6" pad="D6"/>
<connect gate="G$1" pin="*D9" pad="D9"/>
<connect gate="G$1" pin="3.3V" pad="3.3V"/>
<connect gate="G$1" pin="5V" pad="5V"/>
<connect gate="G$1" pin="A0" pad="A0"/>
<connect gate="G$1" pin="A1" pad="A1"/>
<connect gate="G$1" pin="A2" pad="A2"/>
<connect gate="G$1" pin="A3" pad="A3"/>
<connect gate="G$1" pin="A4" pad="A4"/>
<connect gate="G$1" pin="A5" pad="A5"/>
<connect gate="G$1" pin="AREF" pad="AREF"/>
<connect gate="G$1" pin="D12" pad="D12"/>
<connect gate="G$1" pin="D13" pad="D13"/>
<connect gate="G$1" pin="D2" pad="D2"/>
<connect gate="G$1" pin="D4" pad="D4"/>
<connect gate="G$1" pin="D7" pad="D7"/>
<connect gate="G$1" pin="D8" pad="D8"/>
<connect gate="G$1" pin="GND@0" pad="GND@0"/>
<connect gate="G$1" pin="GND@1" pad="GND@1"/>
<connect gate="G$1" pin="GND@2" pad="GND@2"/>
<connect gate="G$1" pin="IOREF" pad="IOREF"/>
<connect gate="G$1" pin="RES" pad="RES"/>
<connect gate="G$1" pin="RX" pad="RX"/>
<connect gate="G$1" pin="SCL" pad="SCL"/>
<connect gate="G$1" pin="SDA" pad="SDA"/>
<connect gate="G$1" pin="TX" pad="TX"/>
<connect gate="G$1" pin="VIN" pad="VIN"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ARDUINO_PRO_MICRO">
<gates>
<gate name="G$1" symbol="ARDUINO_PRO_MICRO" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="ARDUINO_PRO_MICRO">
<connects>
<connect gate="G$1" pin="*10" pad="13"/>
<connect gate="G$1" pin="*3" pad="6"/>
<connect gate="G$1" pin="*5" pad="8"/>
<connect gate="G$1" pin="*6" pad="9"/>
<connect gate="G$1" pin="*9" pad="12"/>
<connect gate="G$1" pin="11(MOSI)" pad="14"/>
<connect gate="G$1" pin="12(MISO)" pad="15"/>
<connect gate="G$1" pin="13(SCK)" pad="16"/>
<connect gate="G$1" pin="2" pad="5"/>
<connect gate="G$1" pin="4" pad="7"/>
<connect gate="G$1" pin="7" pad="10"/>
<connect gate="G$1" pin="8" pad="11"/>
<connect gate="G$1" pin="A0" pad="17"/>
<connect gate="G$1" pin="A1" pad="18"/>
<connect gate="G$1" pin="A2" pad="19"/>
<connect gate="G$1" pin="A3" pad="20"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="GND@1" pad="3"/>
<connect gate="G$1" pin="GND@2" pad="23"/>
<connect gate="G$1" pin="RAW" pad="24"/>
<connect gate="G$1" pin="RESET" pad="22"/>
<connect gate="G$1" pin="RXI" pad="2"/>
<connect gate="G$1" pin="TXO" pad="1"/>
<connect gate="G$1" pin="VCC" pad="21"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RASPBERRYPI-GPIO" prefix="JP">
<description>RASPBERRY PI I/O HEADER

As defined for the Revistion 2 Pi.</description>
<gates>
<gate name="JP1" symbol="RASPBERRYPI-GPIO" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="2X13-SHROUDED">
<connects>
<connect gate="JP1" pin="3.3V@1" pad="1"/>
<connect gate="JP1" pin="3.3V@17" pad="17"/>
<connect gate="JP1" pin="5V@2" pad="2"/>
<connect gate="JP1" pin="5V@4" pad="4"/>
<connect gate="JP1" pin="CE0" pad="24"/>
<connect gate="JP1" pin="CE1" pad="26"/>
<connect gate="JP1" pin="GND@14" pad="14"/>
<connect gate="JP1" pin="GND@20" pad="20"/>
<connect gate="JP1" pin="GND@25" pad="25"/>
<connect gate="JP1" pin="GND@6" pad="6"/>
<connect gate="JP1" pin="GND@9" pad="9"/>
<connect gate="JP1" pin="GP17" pad="11"/>
<connect gate="JP1" pin="GP18#" pad="12"/>
<connect gate="JP1" pin="GP22" pad="15"/>
<connect gate="JP1" pin="GP23" pad="16"/>
<connect gate="JP1" pin="GP24" pad="18"/>
<connect gate="JP1" pin="GP25" pad="22"/>
<connect gate="JP1" pin="GP27" pad="13"/>
<connect gate="JP1" pin="GP4" pad="7"/>
<connect gate="JP1" pin="MISO" pad="21"/>
<connect gate="JP1" pin="MOSI" pad="19"/>
<connect gate="JP1" pin="RXI" pad="10"/>
<connect gate="JP1" pin="SCL" pad="5"/>
<connect gate="JP1" pin="SCLK" pad="23"/>
<connect gate="JP1" pin="SDA" pad="3"/>
<connect gate="JP1" pin="TXO" pad="8"/>
</connects>
<technologies>
<technology name="">
<attribute name="DIST" value="sparkfun" constant="no"/>
<attribute name="DIST_ID" value="PRT-11490" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
<compatibility>
<note version="6.3" minversion="6.2.2" severity="warning">
Since Version 6.2.2 text objects can contain more than one line,
which will not be processed correctly with this version.
</note>
</compatibility>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Capacitors.lbr.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.05" unitdist="inch" unit="inch" style="lines" multiple="1" display="yes" altdistance="0.025" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="no" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="no" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="no" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="no" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="no" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="no" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="no" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="no" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="no" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="no" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="no" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="no" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="CAP-PTH-SMALL">
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="0.7" diameter="1.651"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651"/>
<text x="0.508" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="0.254" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CAP-PTH-SMALL2">
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="1.27" x2="3.81" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="1.27" x2="3.81" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-1.27" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="1.27" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="0.7" diameter="1.651"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651"/>
<text x="-1.27" y="1.905" size="0.6096" layer="25">&gt;Name</text>
<text x="-1.27" y="-2.54" size="0.6096" layer="27">&gt;Value</text>
</package>
<package name="CAP-PTH-SMALLEZ">
<description>This is the "EZ" version of the .1" spaced ceramic thru-hole cap.&lt;br&gt;
It has reduced top mask to make it harder to put the component on the wrong side of the board.</description>
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="1.27" x2="3.81" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="1.27" x2="3.81" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-1.27" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="1.27" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="0.7" diameter="1.651" stop="no"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651" stop="no"/>
<text x="-1.27" y="1.905" size="0.6096" layer="25">&gt;Name</text>
<text x="-1.27" y="-2.54" size="0.6096" layer="27">&gt;Value</text>
<circle x="0" y="0" radius="0.898025" width="0" layer="30"/>
<circle x="2.54" y="0" radius="0.915809375" width="0" layer="30"/>
<circle x="0" y="0" radius="0.40160625" width="0" layer="29"/>
<circle x="2.54" y="0" radius="0.40160625" width="0" layer="29"/>
</package>
<package name="0805">
<wire x1="-0.3" y1="0.6" x2="0.3" y2="0.6" width="0.1524" layer="21"/>
<wire x1="-0.3" y1="-0.6" x2="0.3" y2="-0.6" width="0.1524" layer="21"/>
<smd name="1" x="-0.9" y="0" dx="0.8" dy="1.2" layer="1"/>
<smd name="2" x="0.9" y="0" dx="0.8" dy="1.2" layer="1"/>
<text x="-0.762" y="0.8255" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-1.397" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CAP-PTH-LARGE">
<wire x1="0" y1="0.635" x2="0" y2="0" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="0" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="2.54" y2="0" width="0.2032" layer="21"/>
<pad name="1" x="-4.826" y="0" drill="0.9" diameter="1.905"/>
<pad name="2" x="4.572" y="0" drill="0.9" diameter="1.905"/>
<text x="-0.762" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.016" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="GRM43D">
<wire x1="2.25" y1="1.6" x2="1.1" y2="1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="1.6" x2="-1.1" y2="1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="1.6" x2="-2.25" y2="1.6" width="0.127" layer="51"/>
<wire x1="-2.25" y1="1.6" x2="-2.25" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-2.25" y1="-1.6" x2="-1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="-1.6" x2="1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="-1.6" x2="2.25" y2="-1.6" width="0.127" layer="51"/>
<wire x1="2.25" y1="-1.6" x2="2.25" y2="1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="1.6" x2="1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="1.6" x2="-1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-2.3" y1="1.8" x2="2.3" y2="1.8" width="0.127" layer="21"/>
<wire x1="-2.3" y1="-1.8" x2="2.3" y2="-1.8" width="0.127" layer="21"/>
<smd name="A" x="1.927" y="0" dx="3.2" dy="1.65" layer="1" rot="R90"/>
<smd name="C" x="-1.927" y="0" dx="3.2" dy="1.65" layer="1" rot="R90"/>
<text x="-2" y="2" size="0.4064" layer="25">&gt;NAME</text>
<text x="0" y="-2" size="0.4064" layer="27" rot="R180">&gt;VALUE</text>
<rectangle x1="-2.2" y1="-1.6" x2="-1.1" y2="1.6" layer="51"/>
<rectangle x1="1.1" y1="-1.6" x2="2.2" y2="1.6" layer="51"/>
</package>
<package name="0603-CAP">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<wire x1="0" y1="0.0305" x2="0" y2="-0.0305" width="0.5588" layer="21"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="0402-CAP">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="0" y1="0.0305" x2="0" y2="-0.0305" width="0.4064" layer="21"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="CAP-PTH-5MM">
<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="-2.5" y="0" drill="0.7" diameter="1.651"/>
<pad name="2" x="2.5" y="0" drill="0.7" diameter="1.651"/>
<text x="-0.762" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.016" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="AXIAL-5MM">
<wire x1="-1.14" y1="0.762" x2="1.14" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0.762" x2="1.14" y2="0" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0" x2="1.14" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="-0.762" x2="-1.14" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="-0.762" x2="-1.14" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="0" x2="-1.14" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0" x2="1.394" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="0" x2="-1.394" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-2.5" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="2.5" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.17" size="0.4" layer="25">&gt;Name</text>
<text x="-1.032" y="-0.208" size="0.4" layer="21" ratio="15">&gt;Value</text>
</package>
<package name="1210">
<wire x1="-1.6" y1="1.3" x2="1.6" y2="1.3" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.3" x2="1.6" y2="-1.3" width="0.127" layer="51"/>
<wire x1="1.6" y1="-1.3" x2="-1.6" y2="-1.3" width="0.127" layer="51"/>
<wire x1="-1.6" y1="-1.3" x2="-1.6" y2="1.3" width="0.127" layer="51"/>
<wire x1="-1.6" y1="1.3" x2="1.6" y2="1.3" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.3" x2="1.6" y2="-1.3" width="0.2032" layer="21"/>
<smd name="1" x="-1.6" y="0" dx="1.2" dy="2" layer="1"/>
<smd name="2" x="1.6" y="0" dx="1.2" dy="2" layer="1"/>
<text x="-0.8" y="0.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9" y="-0.7" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="1206">
<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
<text x="-1.27" y="1.143" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.397" y="-1.524" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
</package>
<package name="CTZ3">
<description>CTZ3 Series land pattern for variable capacitor - CTZ3E-50C-W1-PF</description>
<wire x1="-1.6" y1="1.4" x2="-1.6" y2="-2.25" width="0.127" layer="51"/>
<wire x1="-1.6" y1="-2.25" x2="1.6" y2="-2.25" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.4" x2="1.6" y2="-2.25" width="0.127" layer="51"/>
<wire x1="-0.5" y1="0" x2="0.5" y2="0" width="0.127" layer="51"/>
<wire x1="-1.6" y1="1.4" x2="-1" y2="2.2" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.4" x2="1" y2="2.2" width="0.127" layer="51"/>
<wire x1="-1" y1="2.2" x2="1" y2="2.2" width="0.127" layer="51"/>
<wire x1="0" y1="0.8" x2="0" y2="-0.8" width="0.127" layer="51"/>
<wire x1="-0.8" y1="0" x2="0.8" y2="0" width="0.127" layer="51"/>
<wire x1="-1.05" y1="2.25" x2="-1.7" y2="1.45" width="0.127" layer="21"/>
<wire x1="-1.7" y1="1.45" x2="-1.7" y2="-2.35" width="0.127" layer="21"/>
<wire x1="-1.7" y1="-2.35" x2="-1.05" y2="-2.35" width="0.127" layer="21"/>
<wire x1="1.05" y1="2.25" x2="1.7" y2="1.4" width="0.127" layer="21"/>
<wire x1="1.7" y1="1.4" x2="1.7" y2="-2.35" width="0.127" layer="21"/>
<wire x1="1.7" y1="-2.35" x2="1.05" y2="-2.35" width="0.127" layer="21"/>
<smd name="+" x="0" y="2.05" dx="1.5" dy="1.2" layer="1"/>
<smd name="-" x="0" y="-2.05" dx="1.5" dy="1.2" layer="1"/>
<text x="-2" y="3" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2" y="-3.4" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CAP-PTH-SMALL-KIT">
<description>&lt;h3&gt;CAP-PTH-SMALL-KIT&lt;/h3&gt;
Commonly used for small ceramic capacitors. Like our 0.1uF (http://www.sparkfun.com/products/8375) or 22pF caps (http://www.sparkfun.com/products/8571).&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.254" layer="21"/>
<wire x1="-2.667" y1="1.27" x2="2.667" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.667" y1="1.27" x2="2.667" y2="-1.27" width="0.254" layer="21"/>
<wire x1="2.667" y1="-1.27" x2="-2.667" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-2.667" y1="-1.27" x2="-2.667" y2="1.27" width="0.254" layer="21"/>
<pad name="1" x="-1.397" y="0" drill="1.016" diameter="2.032" stop="no"/>
<pad name="2" x="1.397" y="0" drill="1.016" diameter="2.032" stop="no"/>
<polygon width="0.127" layer="30">
<vertex x="-1.4021" y="-0.9475" curve="-90"/>
<vertex x="-2.357" y="-0.0178" curve="-90.011749"/>
<vertex x="-1.4046" y="0.9576" curve="-90"/>
<vertex x="-0.4546" y="-0.0204" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-1.4046" y="-0.4395" curve="-90.012891"/>
<vertex x="-1.8491" y="-0.0153" curve="-90"/>
<vertex x="-1.4046" y="0.452" curve="-90"/>
<vertex x="-0.9627" y="-0.0051" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="1.397" y="-0.9475" curve="-90"/>
<vertex x="0.4421" y="-0.0178" curve="-90.011749"/>
<vertex x="1.3945" y="0.9576" curve="-90"/>
<vertex x="2.3445" y="-0.0204" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="1.3945" y="-0.4395" curve="-90.012891"/>
<vertex x="0.95" y="-0.0153" curve="-90"/>
<vertex x="1.3945" y="0.452" curve="-90"/>
<vertex x="1.8364" y="-0.0051" curve="-90.012967"/>
</polygon>
</package>
<package name="EIA3216">
<wire x1="-1" y1="-1.2" x2="-2.5" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-1.2" x2="-2.5" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="1.2" x2="-1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.2" x2="2.1" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="2.1" y1="-1.2" x2="2.5" y2="-0.8" width="0.2032" layer="21"/>
<wire x1="2.5" y1="-0.8" x2="2.5" y2="0.8" width="0.2032" layer="21"/>
<wire x1="2.5" y1="0.8" x2="2.1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="2.1" y1="1.2" x2="1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="0.381" y1="1.016" x2="0.381" y2="-1.016" width="0.127" layer="21"/>
<smd name="C" x="-1.4" y="0" dx="1.6" dy="1.4" layer="1" rot="R90"/>
<smd name="A" x="1.4" y="0" dx="1.6" dy="1.4" layer="1" rot="R90"/>
<text x="-2.54" y="1.381" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.408" y="1.332" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="EIA3528">
<wire x1="-0.9" y1="-1.6" x2="-2.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="-1.6" x2="-2.6" y2="1.55" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="1.55" x2="-0.9" y2="1.55" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.55" x2="2.2" y2="-1.55" width="0.2032" layer="21"/>
<wire x1="2.2" y1="-1.55" x2="2.6" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="2.6" y1="-1.2" x2="2.6" y2="1.25" width="0.2032" layer="21"/>
<wire x1="2.6" y1="1.25" x2="2.2" y2="1.55" width="0.2032" layer="21"/>
<wire x1="2.2" y1="1.55" x2="1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="2.2" y1="1.55" x2="1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="0.609" y1="1.311" x2="0.609" y2="-1.286" width="0.2032" layer="21" style="longdash"/>
<smd name="C" x="-1.65" y="0" dx="2.5" dy="1.2" layer="1" rot="R90"/>
<smd name="A" x="1.65" y="0" dx="2.5" dy="1.2" layer="1" rot="R90"/>
<text x="-2.27" y="-1.27" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="3.24" y="-1.37" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
</package>
<package name="CPOL-RADIAL-100UF-25V">
<wire x1="-0.635" y1="1.27" x2="-1.905" y2="1.27" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="3.25" width="0.2032" layer="21"/>
<pad name="2" x="-1.27" y="0" drill="0.7" diameter="1.651"/>
<pad name="1" x="1.27" y="0" drill="0.7" diameter="1.651" shape="square"/>
<text x="-1.905" y="-4.318" size="0.8128" layer="27">&gt;Value</text>
<text x="-0.762" y="1.651" size="0.4064" layer="25">&gt;Name</text>
</package>
<package name="CPOL-RADIAL-10UF-25V">
<wire x1="-0.762" y1="1.397" x2="-1.778" y2="1.397" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="2.5" width="0.2032" layer="21"/>
<pad name="1" x="1.27" y="0" drill="0.7" diameter="1.651" shape="square"/>
<pad name="2" x="-1.27" y="0" drill="0.7" diameter="1.651"/>
<text x="-0.889" y="1.524" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.905" y="-3.683" size="0.8128" layer="27">&gt;Value</text>
</package>
<package name="EIA7343">
<wire x1="-5" y1="2.5" x2="-2" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-5" y1="2.5" x2="-5" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="-5" y1="-2.5" x2="-2" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="2" y1="2.5" x2="4" y2="2.5" width="0.2032" layer="21"/>
<wire x1="4" y1="2.5" x2="5" y2="1.5" width="0.2032" layer="21"/>
<wire x1="5" y1="1.5" x2="5" y2="-1.5" width="0.2032" layer="21"/>
<wire x1="5" y1="-1.5" x2="4" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="4" y1="-2.5" x2="2" y2="-2.5" width="0.2032" layer="21"/>
<smd name="C" x="-3.17" y="0" dx="2.55" dy="2.7" layer="1" rot="R180"/>
<smd name="A" x="3.17" y="0" dx="2.55" dy="2.7" layer="1" rot="R180"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.27" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="PANASONIC_G">
<description>&lt;b&gt;Panasonic Aluminium Electrolytic Capacitor VS-Serie Package G&lt;/b&gt;</description>
<wire x1="-5.1" y1="5.1" x2="2.8" y2="5.1" width="0.1016" layer="51"/>
<wire x1="2.8" y1="5.1" x2="5.1" y2="2.8" width="0.1016" layer="51"/>
<wire x1="5.1" y1="2.8" x2="5.1" y2="-2.8" width="0.1016" layer="51"/>
<wire x1="5.1" y1="-2.8" x2="2.8" y2="-5.1" width="0.1016" layer="51"/>
<wire x1="2.8" y1="-5.1" x2="-5.1" y2="-5.1" width="0.1016" layer="51"/>
<wire x1="-5.1" y1="-5.1" x2="-5.1" y2="5.1" width="0.1016" layer="51"/>
<wire x1="-5.1" y1="1" x2="-5.1" y2="5.1" width="0.2032" layer="21"/>
<wire x1="-5.1" y1="5.1" x2="2.8" y2="5.1" width="0.2032" layer="21"/>
<wire x1="2.8" y1="5.1" x2="5.1" y2="2.8" width="0.2032" layer="21"/>
<wire x1="5.1" y1="2.8" x2="5.1" y2="1" width="0.2032" layer="21"/>
<wire x1="5.1" y1="-1" x2="5.1" y2="-2.8" width="0.2032" layer="21"/>
<wire x1="5.1" y1="-2.8" x2="2.8" y2="-5.1" width="0.2032" layer="21"/>
<wire x1="2.8" y1="-5.1" x2="-5.1" y2="-5.1" width="0.2032" layer="21"/>
<wire x1="-5.1" y1="-5.1" x2="-5.1" y2="-1" width="0.2032" layer="21"/>
<wire x1="-4.85" y1="-1" x2="4.85" y2="-1" width="0.2032" layer="21" curve="156.699401" cap="flat"/>
<wire x1="-4.85" y1="1" x2="4.85" y2="1" width="0.2032" layer="21" curve="-156.699401" cap="flat"/>
<wire x1="-3.25" y1="3.7" x2="-3.25" y2="-3.65" width="0.1016" layer="51"/>
<circle x="0" y="0" radius="4.95" width="0.1016" layer="51"/>
<smd name="-" x="-4.25" y="0" dx="3.9" dy="1.6" layer="1"/>
<smd name="+" x="4.25" y="0" dx="3.9" dy="1.6" layer="1"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-5.85" y1="-0.45" x2="-4.9" y2="0.45" layer="51"/>
<rectangle x1="4.9" y1="-0.45" x2="5.85" y2="0.45" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-3.3" y="3.6"/>
<vertex x="-4.05" y="2.75"/>
<vertex x="-4.65" y="1.55"/>
<vertex x="-4.85" y="0.45"/>
<vertex x="-4.85" y="-0.45"/>
<vertex x="-4.65" y="-1.55"/>
<vertex x="-4.05" y="-2.75"/>
<vertex x="-3.3" y="-3.6"/>
<vertex x="-3.3" y="3.55"/>
</polygon>
</package>
<package name="PANASONIC_E">
<description>&lt;b&gt;Panasonic Aluminium Electrolytic Capacitor VS-Serie Package E&lt;/b&gt;</description>
<wire x1="-4.1" y1="4.1" x2="1.8" y2="4.1" width="0.1016" layer="51"/>
<wire x1="1.8" y1="4.1" x2="4.1" y2="1.8" width="0.1016" layer="51"/>
<wire x1="4.1" y1="1.8" x2="4.1" y2="-1.8" width="0.1016" layer="51"/>
<wire x1="4.1" y1="-1.8" x2="1.8" y2="-4.1" width="0.1016" layer="51"/>
<wire x1="1.8" y1="-4.1" x2="-4.1" y2="-4.1" width="0.1016" layer="51"/>
<wire x1="-4.1" y1="-4.1" x2="-4.1" y2="4.1" width="0.1016" layer="51"/>
<wire x1="-4.1" y1="0.9" x2="-4.1" y2="4.1" width="0.2032" layer="21"/>
<wire x1="-4.1" y1="4.1" x2="1.8" y2="4.1" width="0.2032" layer="21"/>
<wire x1="1.8" y1="4.1" x2="4.1" y2="1.8" width="0.2032" layer="21"/>
<wire x1="4.1" y1="1.8" x2="4.1" y2="0.9" width="0.2032" layer="21"/>
<wire x1="4.1" y1="-0.9" x2="4.1" y2="-1.8" width="0.2032" layer="21"/>
<wire x1="4.1" y1="-1.8" x2="1.8" y2="-4.1" width="0.2032" layer="21"/>
<wire x1="1.8" y1="-4.1" x2="-4.1" y2="-4.1" width="0.2032" layer="21"/>
<wire x1="-4.1" y1="-4.1" x2="-4.1" y2="-0.9" width="0.2032" layer="21"/>
<wire x1="-2.2" y1="3.25" x2="-2.2" y2="-3.25" width="0.1016" layer="51"/>
<wire x1="-3.85" y1="0.9" x2="3.85" y2="0.9" width="0.2032" layer="21" curve="-153.684915" cap="flat"/>
<wire x1="-3.85" y1="-0.9" x2="3.85" y2="-0.9" width="0.2032" layer="21" curve="153.684915" cap="flat"/>
<circle x="0" y="0" radius="3.95" width="0.1016" layer="51"/>
<smd name="-" x="-3" y="0" dx="3.8" dy="1.4" layer="1"/>
<smd name="+" x="3" y="0" dx="3.8" dy="1.4" layer="1"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-4.5" y1="-0.35" x2="-3.8" y2="0.35" layer="51"/>
<rectangle x1="3.8" y1="-0.35" x2="4.5" y2="0.35" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-2.25" y="3.2"/>
<vertex x="-3" y="2.5"/>
<vertex x="-3.6" y="1.5"/>
<vertex x="-3.85" y="0.65"/>
<vertex x="-3.85" y="-0.65"/>
<vertex x="-3.55" y="-1.6"/>
<vertex x="-2.95" y="-2.55"/>
<vertex x="-2.25" y="-3.2"/>
<vertex x="-2.25" y="3.15"/>
</polygon>
</package>
<package name="PANASONIC_C">
<description>&lt;b&gt;Panasonic Aluminium Electrolytic Capacitor VS-Serie Package E&lt;/b&gt;</description>
<wire x1="-2.6" y1="2.45" x2="1.6" y2="2.45" width="0.2032" layer="21"/>
<wire x1="1.6" y1="2.45" x2="2.7" y2="1.35" width="0.2032" layer="21"/>
<wire x1="2.7" y1="-1.75" x2="1.6" y2="-2.85" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-2.85" x2="-2.6" y2="-2.85" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="2.45" x2="1.6" y2="2.45" width="0.1016" layer="51"/>
<wire x1="1.6" y1="2.45" x2="2.7" y2="1.35" width="0.1016" layer="51"/>
<wire x1="2.7" y1="-1.75" x2="1.6" y2="-2.85" width="0.1016" layer="51"/>
<wire x1="1.6" y1="-2.85" x2="-2.6" y2="-2.85" width="0.1016" layer="51"/>
<wire x1="-2.6" y1="2.45" x2="-2.6" y2="0.35" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="-2.85" x2="-2.6" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="2.7" y1="1.35" x2="2.7" y2="0.35" width="0.2032" layer="21"/>
<wire x1="2.7" y1="-1.75" x2="2.7" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="2.45" x2="-2.6" y2="-2.85" width="0.1016" layer="51"/>
<wire x1="2.7" y1="1.35" x2="2.7" y2="-1.75" width="0.1016" layer="51"/>
<wire x1="-2.4" y1="0.35" x2="2.45" y2="0.3" width="0.2032" layer="21" curve="-156.699401"/>
<wire x1="2.5" y1="-0.7" x2="-2.4" y2="-0.75" width="0.2032" layer="21" curve="-154.694887"/>
<circle x="0.05" y="-0.2" radius="2.5004" width="0.1016" layer="51"/>
<smd name="-" x="-1.8" y="-0.2" dx="2.2" dy="0.65" layer="1"/>
<smd name="+" x="1.9" y="-0.2" dx="2.2" dy="0.65" layer="1"/>
<text x="-2.6" y="2.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.6" y="-3.45" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="NIPPON_F80">
<wire x1="-3.3" y1="3.3" x2="1.7" y2="3.3" width="0.2032" layer="21"/>
<wire x1="1.7" y1="3.3" x2="3.3" y2="2" width="0.2032" layer="21"/>
<wire x1="3.3" y1="-2" x2="1.7" y2="-3.3" width="0.2032" layer="21"/>
<wire x1="1.7" y1="-3.3" x2="-3.3" y2="-3.3" width="0.2032" layer="21"/>
<wire x1="-3.3" y1="3.3" x2="1.7" y2="3.3" width="0.1016" layer="51"/>
<wire x1="1.7" y1="3.3" x2="3.3" y2="2" width="0.1016" layer="51"/>
<wire x1="3.3" y1="-2" x2="1.7" y2="-3.3" width="0.1016" layer="51"/>
<wire x1="1.7" y1="-3.3" x2="-3.3" y2="-3.3" width="0.1016" layer="51"/>
<wire x1="-3.3" y1="3.3" x2="-3.3" y2="0.685" width="0.2032" layer="21"/>
<wire x1="-3.3" y1="-3.3" x2="-3.3" y2="-0.685" width="0.2032" layer="21"/>
<wire x1="3.3" y1="2" x2="3.3" y2="0.685" width="0.2032" layer="21"/>
<wire x1="3.3" y1="-2" x2="3.3" y2="-0.685" width="0.2032" layer="21"/>
<wire x1="-3.3" y1="3.3" x2="-3.3" y2="-3.3" width="0.1016" layer="51"/>
<wire x1="3.3" y1="2" x2="3.3" y2="-2" width="0.1016" layer="51"/>
<wire x1="-3.1" y1="0.685" x2="3.1" y2="0.685" width="0.2032" layer="21" curve="-156.500033"/>
<wire x1="3.1" y1="-0.685" x2="-3.1" y2="-0.685" width="0.2032" layer="21" curve="-154.748326"/>
<circle x="0" y="0" radius="3.15" width="0.1016" layer="51"/>
<smd name="-" x="-2.4" y="0" dx="2.95" dy="1" layer="1"/>
<smd name="+" x="2.4" y="0" dx="2.95" dy="1" layer="1"/>
<text x="-3.2" y="3.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.2" y="-3.85" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="PANASONIC_D">
<wire x1="-3.25" y1="3.25" x2="1.55" y2="3.25" width="0.1016" layer="51"/>
<wire x1="1.55" y1="3.25" x2="3.25" y2="1.55" width="0.1016" layer="51"/>
<wire x1="3.25" y1="1.55" x2="3.25" y2="-1.55" width="0.1016" layer="51"/>
<wire x1="3.25" y1="-1.55" x2="1.55" y2="-3.25" width="0.1016" layer="51"/>
<wire x1="1.55" y1="-3.25" x2="-3.25" y2="-3.25" width="0.1016" layer="51"/>
<wire x1="-3.25" y1="-3.25" x2="-3.25" y2="3.25" width="0.1016" layer="51"/>
<wire x1="-3.25" y1="0.95" x2="-3.25" y2="3.25" width="0.1016" layer="21"/>
<wire x1="-3.25" y1="3.25" x2="1.55" y2="3.25" width="0.1016" layer="21"/>
<wire x1="1.55" y1="3.25" x2="3.25" y2="1.55" width="0.1016" layer="21"/>
<wire x1="3.25" y1="1.55" x2="3.25" y2="0.95" width="0.1016" layer="21"/>
<wire x1="3.25" y1="-0.95" x2="3.25" y2="-1.55" width="0.1016" layer="21"/>
<wire x1="3.25" y1="-1.55" x2="1.55" y2="-3.25" width="0.1016" layer="21"/>
<wire x1="1.55" y1="-3.25" x2="-3.25" y2="-3.25" width="0.1016" layer="21"/>
<wire x1="-3.25" y1="-3.25" x2="-3.25" y2="-0.95" width="0.1016" layer="21"/>
<wire x1="2.95" y1="0.95" x2="-2.95" y2="0.95" width="0.1016" layer="21" curve="144.299363"/>
<wire x1="-2.95" y1="-0.95" x2="2.95" y2="-0.95" width="0.1016" layer="21" curve="144.299363"/>
<wire x1="-2.1" y1="2.25" x2="-2.1" y2="-2.2" width="0.1016" layer="51"/>
<circle x="0" y="0" radius="3.1" width="0.1016" layer="51"/>
<smd name="+" x="2.4" y="0" dx="3" dy="1.4" layer="1"/>
<smd name="-" x="-2.4" y="0" dx="3" dy="1.4" layer="1"/>
<text x="-1.75" y="1" size="1.016" layer="25">&gt;NAME</text>
<text x="-1.75" y="-1.975" size="1.016" layer="27">&gt;VALUE</text>
<rectangle x1="-3.65" y1="-0.35" x2="-3.05" y2="0.35" layer="51"/>
<rectangle x1="3.05" y1="-0.35" x2="3.65" y2="0.35" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-2.15" y="2.15"/>
<vertex x="-2.6" y="1.6"/>
<vertex x="-2.9" y="0.9"/>
<vertex x="-3.05" y="0"/>
<vertex x="-2.9" y="-0.95"/>
<vertex x="-2.55" y="-1.65"/>
<vertex x="-2.15" y="-2.15"/>
<vertex x="-2.15" y="2.1"/>
</polygon>
</package>
<package name="CPOL-RADIAL-1000UF-63V">
<wire x1="-3.175" y1="1.905" x2="-4.445" y2="1.905" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="8.001" width="0.2032" layer="21"/>
<pad name="2" x="-3.81" y="0" drill="1.016" diameter="1.6764"/>
<pad name="1" x="3.81" y="0" drill="1.016" diameter="1.651" shape="square"/>
<text x="-2.54" y="8.89" size="0.8128" layer="27">&gt;Value</text>
<text x="-2.54" y="10.16" size="0.8128" layer="25">&gt;Name</text>
</package>
<package name="CPOL-RADIAL-1000UF-25V">
<wire x1="-1.905" y1="1.27" x2="-3.175" y2="1.27" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="5.461" width="0.2032" layer="21"/>
<pad name="2" x="-2.54" y="0" drill="0.7" diameter="1.651"/>
<pad name="1" x="2.54" y="0" drill="0.7" diameter="1.651" shape="square"/>
<text x="-1.905" y="-4.318" size="0.8128" layer="27">&gt;Value</text>
<text x="-0.762" y="2.921" size="0.4064" layer="25">&gt;Name</text>
</package>
<package name="VISHAY_C">
<wire x1="0" y1="1.27" x2="0" y2="1.905" width="0.254" layer="21"/>
<wire x1="-2.0574" y1="4.2926" x2="-2.0574" y2="-4.2926" width="0.127" layer="21"/>
<wire x1="-2.0574" y1="-4.2926" x2="2.0574" y2="-4.2926" width="0.127" layer="21"/>
<wire x1="2.0574" y1="-4.2926" x2="2.0574" y2="4.2926" width="0.127" layer="21"/>
<wire x1="2.0574" y1="4.2926" x2="-2.0574" y2="4.2926" width="0.127" layer="21"/>
<smd name="+" x="0" y="3.048" dx="3.556" dy="1.778" layer="1"/>
<smd name="-" x="0" y="-3.048" dx="3.556" dy="1.778" layer="1"/>
<text x="-1.905" y="4.445" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.905" y="-5.08" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="PANASONIC_H13">
<wire x1="-6.75" y1="6.75" x2="4" y2="6.75" width="0.1016" layer="51"/>
<wire x1="4" y1="6.75" x2="6.75" y2="4" width="0.1016" layer="51"/>
<wire x1="6.75" y1="4" x2="6.75" y2="-4" width="0.1016" layer="51"/>
<wire x1="6.75" y1="-4" x2="4" y2="-6.75" width="0.1016" layer="51"/>
<wire x1="4" y1="-6.75" x2="-6.75" y2="-6.75" width="0.1016" layer="51"/>
<wire x1="-6.75" y1="-6.75" x2="-6.75" y2="6.75" width="0.1016" layer="51"/>
<wire x1="-6.75" y1="1" x2="-6.75" y2="6.75" width="0.2032" layer="21"/>
<wire x1="-6.75" y1="6.75" x2="4" y2="6.75" width="0.2032" layer="21"/>
<wire x1="4" y1="6.75" x2="6.75" y2="4" width="0.2032" layer="21"/>
<wire x1="6.75" y1="4" x2="6.75" y2="1" width="0.2032" layer="21"/>
<wire x1="6.75" y1="-1" x2="6.75" y2="-4" width="0.2032" layer="21"/>
<wire x1="6.75" y1="-4" x2="4" y2="-6.75" width="0.2032" layer="21"/>
<wire x1="4" y1="-6.75" x2="-6.75" y2="-6.75" width="0.2032" layer="21"/>
<wire x1="-6.75" y1="-6.75" x2="-6.75" y2="-1" width="0.2032" layer="21"/>
<wire x1="-6.55" y1="-1.2" x2="6.45" y2="-1.2" width="0.2032" layer="21" curve="156.692742" cap="flat"/>
<wire x1="-6.55" y1="1.2" x2="6.55" y2="1.2" width="0.2032" layer="21" curve="-156.697982" cap="flat"/>
<wire x1="-5" y1="4.25" x2="-4.95" y2="-4.35" width="0.1016" layer="51"/>
<circle x="0" y="0" radius="6.6" width="0.1016" layer="51"/>
<smd name="-" x="-4.7" y="0" dx="5" dy="1.6" layer="1"/>
<smd name="+" x="4.7" y="0" dx="5" dy="1.6" layer="1"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-7.55" y1="-0.45" x2="-6.6" y2="0.45" layer="51"/>
<rectangle x1="6.6" y1="-0.45" x2="7.55" y2="0.45" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-5" y="4.2"/>
<vertex x="-5.75" y="3.15"/>
<vertex x="-6.25" y="2.05"/>
<vertex x="-6.55" y="0.45"/>
<vertex x="-6.55" y="-0.45"/>
<vertex x="-6.35" y="-1.65"/>
<vertex x="-5.75" y="-3.25"/>
<vertex x="-5" y="-4.2"/>
</polygon>
</package>
<package name="EIA6032">
<wire x1="3.2" y1="-1.6" x2="3.2" y2="1.6" width="0.127" layer="21"/>
<wire x1="-2.8" y1="-1.6" x2="3.2" y2="-1.6" width="0.127" layer="21"/>
<wire x1="3.2" y1="1.6" x2="-2.8" y2="1.6" width="0.127" layer="21"/>
<wire x1="-2.8" y1="1.6" x2="-3.4" y2="1" width="0.127" layer="21"/>
<wire x1="-3.4" y1="1" x2="-3.4" y2="-1" width="0.127" layer="21"/>
<wire x1="-2.8" y1="-1.6" x2="-3.4" y2="-1" width="0.127" layer="21"/>
<smd name="P$1" x="-2.3" y="0" dx="1.5" dy="2.4" layer="1"/>
<smd name="P$2" x="2.3" y="0" dx="1.5" dy="2.4" layer="1"/>
</package>
<package name="EN_J2">
<description>Type J2 package for SMD supercap PRT-10317 (p# EEC-EN0F204J2)</description>
<wire x1="-2.5" y1="-3.5" x2="2.5" y2="-3.5" width="0.127" layer="51"/>
<wire x1="-2.1" y1="3.5" x2="2.1" y2="3.5" width="0.127" layer="51"/>
<wire x1="-2.1" y1="3.5" x2="-2.5" y2="3.1" width="0.127" layer="51"/>
<wire x1="-2.5" y1="3.1" x2="-2.5" y2="2.3" width="0.127" layer="51"/>
<wire x1="2.1" y1="3.5" x2="2.5" y2="3.1" width="0.127" layer="51"/>
<wire x1="2.5" y1="3.1" x2="2.5" y2="2.3" width="0.127" layer="51"/>
<wire x1="-2.5" y1="-3.5" x2="-2.5" y2="-2.3" width="0.127" layer="51"/>
<wire x1="2.5" y1="-3.5" x2="2.5" y2="-2.3" width="0.127" layer="51"/>
<wire x1="-2.5908" y1="-2.413" x2="-2.5654" y2="2.4384" width="0.127" layer="21" curve="-91.212564"/>
<wire x1="2.5908" y1="-2.413" x2="2.5654" y2="2.4384" width="0.127" layer="21" curve="86.79344"/>
<wire x1="1.7272" y1="-1.27" x2="1.7272" y2="-2.0828" width="0.127" layer="21"/>
<wire x1="1.3462" y1="-1.6764" x2="2.159" y2="-1.6764" width="0.127" layer="21"/>
<circle x="0" y="0" radius="3.4" width="0.127" layer="51"/>
<smd name="-" x="0" y="2.8" dx="5" dy="2.4" layer="1"/>
<smd name="+" x="0" y="-3.2" dx="5" dy="1.6" layer="1"/>
<text x="-2.28" y="0.66" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.31" y="-1.21" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="EIA3528-KIT">
<description>&lt;h3&gt;EIA3528-KIT&lt;/h3&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has longer pads to make hand soldering easier.&lt;br&gt;</description>
<wire x1="-0.9" y1="-1.6" x2="-3.1" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-3.1" y1="-1.6" x2="-3.1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="-3.1" y1="1.55" x2="-0.9" y2="1.55" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.55" x2="2.7" y2="-1.55" width="0.2032" layer="21"/>
<wire x1="2.7" y1="-1.55" x2="3.1" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="3.1" y1="-1.2" x2="3.1" y2="1.25" width="0.2032" layer="21"/>
<wire x1="3.1" y1="1.25" x2="2.7" y2="1.55" width="0.2032" layer="21"/>
<wire x1="2.7" y1="1.55" x2="1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="0.609" y1="1.311" x2="0.609" y2="-1.286" width="0.4" layer="21" style="longdash"/>
<smd name="C" x="-1.9" y="0" dx="1.7" dy="2.5" layer="1"/>
<smd name="A" x="1.9" y="0" dx="1.7" dy="2.5" layer="1"/>
<text x="-2.27" y="-1.27" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="3.24" y="-1.37" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
</package>
<package name="EIA3216-KIT">
<description>&lt;h3&gt;EIA3216-KIT&lt;/h3&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has longer pads to make hand soldering easier.&lt;br&gt;</description>
<wire x1="-1" y1="-1.2" x2="-3" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="-3" y1="-1.2" x2="-3" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-3" y1="1.2" x2="-1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.2" x2="2.6" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="2.6" y1="-1.2" x2="3" y2="-0.8" width="0.2032" layer="21"/>
<wire x1="3" y1="-0.8" x2="3" y2="0.8" width="0.2032" layer="21"/>
<wire x1="3" y1="0.8" x2="2.6" y2="1.2" width="0.2032" layer="21"/>
<wire x1="2.6" y1="1.2" x2="1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="0.381" y1="1.016" x2="0.381" y2="-1.016" width="0.127" layer="21"/>
<smd name="C" x="-1.65" y="0" dx="1.9" dy="1.6" layer="1"/>
<smd name="A" x="1.65" y="0" dx="1.9" dy="1.6" layer="1"/>
<text x="-2.54" y="1.381" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.408" y="1.332" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="0603">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="FUSE_5MM">
<wire x1="-3.2258" y1="-10.127" x2="-3.2258" y2="-4.1072" width="0.2032" layer="21"/>
<wire x1="-3.2258" y1="-10.127" x2="3.2258" y2="-10.127" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="-10.127" x2="3.2258" y2="-4.031" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="-4.031" x2="-3.2258" y2="-4.031" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="10.127" x2="3.2258" y2="4.1072" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="10.127" x2="-3.2258" y2="10.127" width="0.2032" layer="21"/>
<wire x1="-3.2258" y1="10.127" x2="-3.2258" y2="4.031" width="0.2032" layer="21"/>
<wire x1="-3.2258" y1="4.031" x2="3.2258" y2="4.031" width="0.2032" layer="21"/>
<wire x1="-2.921" y1="9.812" x2="-2.921" y2="-9.619" width="0.2032" layer="51"/>
<wire x1="-2.921" y1="-9.619" x2="0.254" y2="-9.619" width="0.2032" layer="51"/>
<wire x1="0.254" y1="-9.619" x2="2.794" y2="-9.619" width="0.2032" layer="51"/>
<wire x1="2.794" y1="-9.619" x2="2.794" y2="9.177" width="0.2032" layer="51"/>
<wire x1="2.794" y1="9.177" x2="2.794" y2="9.812" width="0.2032" layer="51"/>
<wire x1="2.794" y1="9.812" x2="-2.921" y2="9.812" width="0.2032" layer="51"/>
<pad name="1" x="0" y="-10" drill="2.54" diameter="3.556"/>
<pad name="2" x="0" y="-4.158" drill="2.54" diameter="3.556"/>
<pad name="4" x="0" y="10" drill="2.54" diameter="3.556" rot="R180"/>
<pad name="3" x="0" y="4.158" drill="2.54" diameter="3.556" rot="R180"/>
</package>
<package name="INDUCTOR-1206">
<wire x1="-1.778" y1="2.032" x2="-3.81" y2="2.032" width="0.127" layer="21"/>
<wire x1="-3.81" y1="2.032" x2="-3.81" y2="-2.032" width="0.127" layer="21"/>
<wire x1="-3.81" y1="-2.032" x2="-1.524" y2="-2.032" width="0.127" layer="21"/>
<wire x1="1.524" y1="2.032" x2="3.81" y2="2.032" width="0.127" layer="21"/>
<wire x1="3.81" y1="2.032" x2="3.81" y2="-2.032" width="0.127" layer="21"/>
<wire x1="3.81" y1="-2.032" x2="1.524" y2="-2.032" width="0.127" layer="21"/>
<smd name="P$1" x="-2.54" y="0" dx="3.556" dy="2.032" layer="1" rot="R90"/>
<smd name="P$2" x="2.54" y="0" dx="3.556" dy="2.032" layer="1" rot="R90"/>
<text x="-1.27" y="2.54" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CR54">
<wire x1="2.8" y1="2.98" x2="-2.8" y2="2.98" width="0.127" layer="51"/>
<wire x1="-2.8" y1="2.98" x2="-2.8" y2="-3" width="0.127" layer="51"/>
<wire x1="-2.8" y1="-3" x2="2.8" y2="-3" width="0.127" layer="51"/>
<wire x1="2.8" y1="-3" x2="2.8" y2="2.98" width="0.127" layer="51"/>
<wire x1="-3.048" y1="2.794" x2="-3.048" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-3.048" y1="-3.048" x2="-2.794" y2="-3.302" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="-3.302" x2="2.794" y2="-3.302" width="0.2032" layer="21"/>
<wire x1="2.794" y1="-3.302" x2="3.048" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="3.048" y1="-3.048" x2="3.048" y2="3.048" width="0.2032" layer="21"/>
<wire x1="3.048" y1="3.048" x2="2.794" y2="3.302" width="0.2032" layer="21"/>
<wire x1="2.794" y1="3.302" x2="-2.794" y2="3.302" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="3.302" x2="-3.048" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-3.048" y1="3.048" x2="-3.048" y2="2.794" width="0.2032" layer="21"/>
<circle x="0" y="0.508" radius="0.127" width="0.2032" layer="21"/>
<smd name="P$1" x="0" y="1.92" dx="5.5" dy="2.15" layer="1"/>
<smd name="P$2" x="0" y="-1.92" dx="5.5" dy="2.15" layer="1"/>
<text x="-2.54" y="3.81" size="0.4064" layer="25">&gt;Name</text>
<text x="0" y="3.81" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CDRH125">
<wire x1="-3.5" y1="6" x2="-6" y2="6" width="0.2032" layer="21"/>
<wire x1="-6" y1="6" x2="-6" y2="-6" width="0.2032" layer="21"/>
<wire x1="-6" y1="-6" x2="-3.5" y2="-6" width="0.2032" layer="21"/>
<wire x1="3.5" y1="-6" x2="6" y2="-6" width="0.2032" layer="21"/>
<wire x1="6" y1="-6" x2="6" y2="6" width="0.2032" layer="21"/>
<wire x1="6" y1="6" x2="3.5" y2="6" width="0.2032" layer="21"/>
<smd name="1" x="0" y="4.9" dx="5.4" dy="4" layer="1"/>
<smd name="2" x="0" y="-4.9" dx="5.4" dy="4" layer="1"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.54" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="C0402">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="B82462G">
<wire x1="3.15" y1="3.15" x2="-3.15" y2="3.15" width="0.127" layer="51"/>
<wire x1="-3.15" y1="3.15" x2="-3.15" y2="-3.15" width="0.127" layer="51"/>
<wire x1="-3.15" y1="-3.15" x2="3.15" y2="-3.15" width="0.127" layer="51"/>
<wire x1="3.15" y1="-3.15" x2="3.15" y2="3.15" width="0.127" layer="51"/>
<wire x1="-3.15" y1="3.15" x2="-2" y2="3.15" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="3.15" x2="-3.15" y2="-3.15" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="-3.15" x2="-2" y2="-3.15" width="0.2032" layer="21"/>
<wire x1="2" y1="-3.15" x2="3.15" y2="-3.15" width="0.2032" layer="21"/>
<wire x1="3.15" y1="-3.15" x2="3.15" y2="3.15" width="0.2032" layer="21"/>
<wire x1="3.15" y1="3.15" x2="2" y2="3.15" width="0.2032" layer="21"/>
<smd name="P$1" x="0" y="2.75" dx="2.4" dy="1.5" layer="1"/>
<smd name="P$2" x="0" y="-2.75" dx="2.4" dy="1.5" layer="1"/>
</package>
<package name="CR75">
<wire x1="-1" y1="3.65" x2="7" y2="3.65" width="0.127" layer="21"/>
<wire x1="7" y1="3.65" x2="7" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="3.65" x2="-1" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="7" y2="-3.65" width="0.127" layer="21"/>
<wire x1="7" y1="-3.65" x2="7" y2="-2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="-1" y2="-2.55" width="0.127" layer="21"/>
<smd name="P$1" x="0" y="0" dx="4.7" dy="1.75" layer="1" rot="R90"/>
<smd name="P$2" x="6.05" y="0" dx="4.7" dy="1.75" layer="1" rot="R90"/>
</package>
<package name="1007">
<description>1007 (2518 metric) package</description>
<wire x1="0.9" y1="1.25" x2="-0.9" y2="1.25" width="0.127" layer="51"/>
<wire x1="-0.9" y1="1.25" x2="-0.9" y2="-1.25" width="0.127" layer="51"/>
<wire x1="-0.9" y1="-1.25" x2="0.9" y2="-1.25" width="0.127" layer="51"/>
<wire x1="0.9" y1="-1.25" x2="0.9" y2="1.25" width="0.127" layer="51"/>
<wire x1="-1" y1="-0.4" x2="-1" y2="0.4" width="0.127" layer="21"/>
<wire x1="1" y1="-0.4" x2="1" y2="0.4" width="0.127" layer="21"/>
<smd name="1" x="0" y="1" dx="2" dy="0.8" layer="1"/>
<smd name="2" x="0" y="-1" dx="2" dy="0.8" layer="1"/>
<text x="-1" y="1.6" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1" y="-2" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="COOPER_UP4B">
<wire x1="-6.3" y1="7" x2="-7.5" y2="2" width="0.2032" layer="21"/>
<wire x1="-7.5" y1="2" x2="-7.5" y2="-2" width="0.2032" layer="21"/>
<wire x1="-7.5" y1="-2" x2="-6.3" y2="-7" width="0.2032" layer="21"/>
<wire x1="7.5" y1="2" x2="7.5" y2="-2" width="0.2032" layer="21"/>
<wire x1="7.5" y1="2" x2="6.3" y2="7" width="0.2032" layer="21"/>
<wire x1="7.5" y1="-2" x2="6.3" y2="-7" width="0.2032" layer="21"/>
<smd name="1" x="0" y="8.9" dx="12" dy="4.3" layer="1"/>
<smd name="2" x="0" y="-8.9" dx="12" dy="4.3" layer="1"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.54" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CDRH3D28">
<wire x1="-2.0503" y1="-0.677" x2="-2.0505" y2="0.6629" width="0.127" layer="51"/>
<wire x1="0.6192" y1="1.9926" x2="-0.7206" y2="1.9927" width="0.127" layer="51"/>
<wire x1="1.9491" y1="0.6627" x2="1.9491" y2="-0.677" width="0.127" layer="51"/>
<wire x1="-2.0505" y1="0.6629" x2="-0.7206" y2="1.9927" width="0.127" layer="51"/>
<wire x1="1.9491" y1="0.6627" x2="0.6192" y2="1.9926" width="0.127" layer="51"/>
<wire x1="1.9503" y1="-0.6737" x2="-0.0506" y2="-2.6748" width="0.127" layer="51"/>
<wire x1="-0.0436" y1="-2.6999" x2="1.2914" y2="-1.3649" width="0.127" layer="21"/>
<wire x1="-0.0436" y1="-2.6999" x2="-1.3785" y2="-1.3649" width="0.127" layer="21"/>
<wire x1="-2.0434" y1="-0.68" x2="-0.0535" y2="-2.6698" width="0.127" layer="51"/>
<wire x1="-1.7435" y1="1" x2="-0.7895" y2="1.954" width="0.127" layer="21"/>
<wire x1="1.6563" y1="0.9999" x2="0.7024" y2="1.9538" width="0.127" layer="21"/>
<smd name="2" x="1.849" y="-0.007" dx="1.5" dy="1.4" layer="1" rot="R270"/>
<smd name="1" x="-1.9504" y="-0.007" dx="1.5" dy="1.4" layer="1" rot="R270"/>
<text x="-2.492" y="2.524" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.492" y="-3.27" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CR75_V2">
<wire x1="-1" y1="3.65" x2="7" y2="3.65" width="0.127" layer="21"/>
<wire x1="7" y1="3.65" x2="7" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="3.65" x2="-1" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="7" y2="-3.65" width="0.127" layer="21"/>
<wire x1="7" y1="-3.65" x2="7" y2="-2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="-1" y2="-2.55" width="0.127" layer="21"/>
<smd name="P$1" x="-0.254" y="0" dx="2.54" dy="1.524" layer="1" rot="R90"/>
<smd name="P$2" x="6.304" y="0" dx="2.54" dy="1.524" layer="1" rot="R90"/>
</package>
<package name="CDRH2D09">
<description>1.3x1.3mm 1.7mm between. Fits Sumida CDRH2D09, CDRH2D18 inductor</description>
<wire x1="-1.2" y1="0.9" x2="-0.6" y2="1.5" width="0.2032" layer="21"/>
<wire x1="-0.6" y1="1.5" x2="0.6" y2="1.5" width="0.2032" layer="21"/>
<wire x1="0.6" y1="1.5" x2="1.2" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-1.2" y1="-0.9" x2="-0.6783" y2="-1.3739" width="0.2032" layer="21"/>
<wire x1="-0.6783" y1="-1.3739" x2="0.6783" y2="-1.3739" width="0.2032" layer="21" curve="85.420723"/>
<wire x1="0.6783" y1="-1.3739" x2="1.2" y2="-0.9" width="0.2032" layer="21"/>
<wire x1="-1.5" y1="-0.6" x2="-0.7071" y2="-1.3929" width="0.03" layer="51"/>
<wire x1="-0.7071" y1="-1.3929" x2="0.7071" y2="-1.3929" width="0.03" layer="51" curve="90"/>
<wire x1="0.7071" y1="-1.3929" x2="1.5" y2="-0.6" width="0.03" layer="51"/>
<wire x1="1.5" y1="-0.6" x2="1.5" y2="0.6" width="0.03" layer="51"/>
<wire x1="1.5" y1="0.6" x2="0.6" y2="1.5" width="0.03" layer="51"/>
<wire x1="0.6" y1="1.5" x2="-0.6" y2="1.5" width="0.03" layer="51"/>
<wire x1="-0.6" y1="1.5" x2="-1.5" y2="0.6" width="0.03" layer="51"/>
<wire x1="-1.5" y1="0.6" x2="-1.5" y2="-0.6" width="0.03" layer="51"/>
<smd name="P$1" x="-1.5" y="0" dx="1.3" dy="1.3" layer="1" rot="R90"/>
<smd name="P$2" x="1.5" y="0" dx="1.3" dy="1.3" layer="1" rot="R90"/>
<text x="2.8" y="0.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="2.8" y="-1" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="NPI75C">
<wire x1="-3.9" y1="3.5" x2="-3.9" y2="-3.5" width="0.1778" layer="51"/>
<wire x1="-3.9" y1="-3.5" x2="3.9" y2="-3.5" width="0.1778" layer="51"/>
<wire x1="3.9" y1="-3.5" x2="3.9" y2="3.5" width="0.1778" layer="51"/>
<wire x1="0.8" y1="3.5" x2="-0.8" y2="3.5" width="0.1778" layer="21"/>
<wire x1="-0.8" y1="-3.5" x2="0.8" y2="-3.5" width="0.1778" layer="21"/>
<wire x1="3.9" y1="3.5" x2="-3.9" y2="3.5" width="0.1778" layer="51"/>
<smd name="1" x="-2.5" y="0" dx="3" dy="7.5" layer="1"/>
<smd name="2" x="2.5" y="0" dx="3" dy="7.5" layer="1"/>
</package>
<package name="SRU5028">
<wire x1="1.2048" y1="-2.473" x2="2.4476" y2="-1.2048" width="0.2032" layer="21"/>
<wire x1="2.6" y1="-0.9" x2="2.6" y2="0.9" width="0.2032" layer="51"/>
<wire x1="2.473" y1="1.2048" x2="1.2048" y2="2.4476" width="0.2032" layer="21"/>
<wire x1="0.9" y1="2.6" x2="-0.9" y2="2.6" width="0.2032" layer="51"/>
<wire x1="-1.1794" y1="2.4222" x2="-2.4222" y2="1.2048" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="0.9" x2="-2.6" y2="-0.9" width="0.2032" layer="51"/>
<wire x1="-2.3968" y1="-1.1794" x2="-1.2048" y2="-2.4476" width="0.2032" layer="21"/>
<wire x1="-0.9" y1="-2.6" x2="0.9" y2="-2.6" width="0.2032" layer="51"/>
<circle x="1.5" y="0" radius="0.1414" width="0.4" layer="21"/>
<smd name="P$1" x="0" y="2.4" dx="2" dy="1.1" layer="1"/>
<smd name="P$2" x="0" y="-2.4" dx="2" dy="1.1" layer="1"/>
<smd name="1" x="2.4" y="0" dx="2" dy="1.1" layer="1" rot="R90"/>
<smd name="2" x="-2.4" y="0" dx="2" dy="1.1" layer="1" rot="R90"/>
<text x="-2.54" y="3.175" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.81" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SRU1038">
<wire x1="-5" y1="-1.6" x2="-5" y2="1.6" width="0.2032" layer="51"/>
<wire x1="-5" y1="1.6" x2="-1.6" y2="5" width="0.2032" layer="51"/>
<wire x1="-1.6" y1="5" x2="1.6" y2="5" width="0.2032" layer="51"/>
<wire x1="1.6" y1="5" x2="5" y2="1.6" width="0.2032" layer="51"/>
<wire x1="5" y1="1.6" x2="5" y2="-1.6" width="0.2032" layer="51"/>
<wire x1="5" y1="-1.6" x2="1.6" y2="-5" width="0.2032" layer="51"/>
<wire x1="1.6" y1="-5" x2="-1.6" y2="-5" width="0.2032" layer="51"/>
<wire x1="-1.6" y1="-5" x2="-5" y2="-1.6" width="0.2032" layer="51"/>
<wire x1="-4.5" y1="2.1" x2="-1.6" y2="5" width="0.254" layer="21"/>
<wire x1="-1.6" y1="5" x2="1.6" y2="5" width="0.254" layer="21"/>
<wire x1="1.6" y1="-5" x2="-1.6" y2="-5" width="0.254" layer="21"/>
<wire x1="1.6" y1="5" x2="4.5" y2="2.1" width="0.254" layer="21"/>
<wire x1="-4.5" y1="-2.1" x2="-1.6" y2="-5" width="0.254" layer="21"/>
<wire x1="1.6" y1="-5" x2="4.5" y2="-2.1" width="0.254" layer="21"/>
<smd name="2" x="4.5" y="0" dx="1.8" dy="3.6" layer="1"/>
<smd name="1" x="-4.5" y="0" dx="1.8" dy="3.6" layer="1"/>
<text x="-2.54" y="2.54" size="1.016" layer="25">&gt;Name</text>
<text x="-2.54" y="-3.302" size="1.016" layer="27">&gt;Value</text>
</package>
<package name="CR54-KIT">
<wire x1="-3.048" y1="-3.548" x2="-2.794" y2="-3.802" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="-3.802" x2="2.794" y2="-3.802" width="0.2032" layer="21"/>
<wire x1="2.794" y1="-3.802" x2="3.048" y2="-3.548" width="0.2032" layer="21"/>
<wire x1="3.048" y1="-3.548" x2="3.048" y2="3.548" width="0.2032" layer="21"/>
<wire x1="3.048" y1="3.548" x2="2.794" y2="3.802" width="0.2032" layer="21"/>
<wire x1="2.794" y1="3.802" x2="-2.794" y2="3.802" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="3.802" x2="-3.048" y2="3.548" width="0.2032" layer="21"/>
<wire x1="-3.048" y1="3.548" x2="-3.048" y2="-3.548" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-2.5" x2="-2.5" y2="2.5" width="0.1778" layer="51"/>
<wire x1="-2.5" y1="2.5" x2="2.5" y2="2.5" width="0.1778" layer="51"/>
<wire x1="2.5" y1="2.5" x2="2.5" y2="-2.5" width="0.1778" layer="51"/>
<wire x1="2.5" y1="-2.5" x2="-2.5" y2="-2.5" width="0.1778" layer="51"/>
<circle x="0" y="0.508" radius="0.127" width="0.2032" layer="21"/>
<smd name="P$1" x="0" y="2.17" dx="5" dy="2.65" layer="1"/>
<smd name="P$2" x="0" y="-2.17" dx="5" dy="2.65" layer="1"/>
<text x="-2.54" y="4.01" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.7" y="-4.39" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="1X02">
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
</package>
<package name="SJ_2S">
<description>Small solder jumper with big paste layer so it will short during reflow.</description>
<wire x1="0.8" y1="-1" x2="-0.8" y2="-1" width="0.1524" layer="21"/>
<wire x1="0.8" y1="1" x2="1.1" y2="0.75" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.1" y1="0.75" x2="-0.8" y2="1" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.1" y1="-0.75" x2="-0.8" y2="-1" width="0.1524" layer="21" curve="90.114706"/>
<wire x1="0.8" y1="-1" x2="1.1" y2="-0.75" width="0.1524" layer="21" curve="90"/>
<wire x1="1.1" y1="-0.75" x2="1.1" y2="0.75" width="0.1524" layer="21"/>
<wire x1="-1.1" y1="-0.75" x2="-1.1" y2="0.75" width="0.1524" layer="21"/>
<wire x1="-0.8" y1="1" x2="0.8" y2="1" width="0.1524" layer="21"/>
<smd name="1" x="-0.4119" y="0" dx="0.635" dy="1.27" layer="1"/>
<smd name="2" x="0.4119" y="0" dx="0.635" dy="1.27" layer="1"/>
<text x="-0.9498" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9498" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.2192" y1="-1.143" x2="1.2192" y2="1.143" layer="31"/>
</package>
<package name="1X02_LOCK">
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="-0.1778" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.7178" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-0.2921" y1="-0.2921" x2="0.2921" y2="0.2921" layer="51"/>
<rectangle x1="2.2479" y1="-0.2921" x2="2.8321" y2="0.2921" layer="51"/>
</package>
<package name="SJ_2S-NO">
<description>Small solder jumper with no paste layer so it will open after reflow.</description>
<wire x1="0.8" y1="-1" x2="-0.8" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="1" x2="1" y2="0.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1" y1="0.7" x2="-0.8" y2="1" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1" y1="-0.7" x2="-0.8" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="0.8" y1="-1" x2="1" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.8" y1="1" x2="0.8" y2="1" width="0.2032" layer="21"/>
<smd name="1" x="-0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.908" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.908" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SJ_2S-NO-NS">
<smd name="1" x="-0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.908" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.908" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SJ_3">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<smd name="1" x="-0.889" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.889" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="1X03">
<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="6.35" y1="0.635" x2="6.35" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
</package>
<package name="SJ_3_PASTE1&amp;2">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<wire x1="0.1905" y1="0.508" x2="-1.016" y2="0.508" width="0.127" layer="51"/>
<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.127" layer="51"/>
<wire x1="-1.016" y1="-0.508" x2="0.1905" y2="-0.508" width="0.127" layer="51"/>
<wire x1="0.1905" y1="-0.508" x2="0.1905" y2="0.508" width="0.127" layer="51"/>
<smd name="1" x="-0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-0.762" y="-0.4445" size="0.254" layer="51" rot="R40">PASTE</text>
<rectangle x1="-1.4478" y1="-1.016" x2="0.2794" y2="0.9398" layer="31"/>
</package>
<package name="SJ_3_PASTE2&amp;3">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<wire x1="1.016" y1="0.508" x2="-0.1905" y2="0.508" width="0.127" layer="51"/>
<wire x1="-0.1905" y1="0.508" x2="-0.1905" y2="-0.508" width="0.127" layer="51"/>
<wire x1="-0.1905" y1="-0.508" x2="1.016" y2="-0.508" width="0.127" layer="51"/>
<wire x1="1.016" y1="-0.508" x2="1.016" y2="0.508" width="0.127" layer="51"/>
<smd name="1" x="-0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
<text x="0.0635" y="-0.4445" size="0.254" layer="51" rot="R40">PASTE</text>
<rectangle x1="-0.2794" y1="-1.016" x2="1.4224" y2="0.9906" layer="31"/>
</package>
<package name="AXIAL-0.3">
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="3.81" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.032" y="-0.381" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.3EZ">
<description>This is the "EZ" version of the standard .3" spaced resistor package.&lt;br&gt;
It has a reduced top mask to make it harder to install upside-down.</description>
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<pad name="P$2" x="3.81" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.032" y="-0.381" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
<circle x="-3.81" y="0" radius="0.508" width="0" layer="29"/>
<circle x="3.81" y="0" radius="0.523634375" width="0" layer="29"/>
<circle x="-3.81" y="0" radius="1.02390625" width="0" layer="30"/>
<circle x="3.81" y="0" radius="1.04726875" width="0" layer="30"/>
</package>
<package name="R2010">
<description>&lt;b&gt;RESISTOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="51"/>
<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="51"/>
<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
<wire x1="-1.027" y1="1.245" x2="1.027" y2="1.245" width="0.1524" layer="21"/>
<wire x1="-1.002" y1="-1.245" x2="1.016" y2="-1.245" width="0.1524" layer="21"/>
<smd name="1" x="-2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
<smd name="2" x="2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
<text x="-2.54" y="1.5875" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.032" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
</package>
<package name="0603-RES">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2286" y1="-0.381" x2="0.2286" y2="0.381" layer="21"/>
</package>
<package name="0402-RES">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2032" y1="-0.3556" x2="0.2032" y2="0.3556" layer="21"/>
</package>
<package name="1/6W-RES">
<description>1/6W Thru-hole Resistor - *UNPROVEN*</description>
<wire x1="-1.55" y1="0.85" x2="-1.55" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="-1.55" y1="-0.85" x2="1.55" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="1.55" y1="-0.85" x2="1.55" y2="0.85" width="0.2032" layer="21"/>
<wire x1="1.55" y1="0.85" x2="-1.55" y2="0.85" width="0.2032" layer="21"/>
<pad name="1" x="-2.5" y="0" drill="0.762"/>
<pad name="2" x="2.5" y="0" drill="0.762"/>
<text x="-1.2662" y="0.9552" size="0.6096" layer="25">&gt;NAME</text>
<text x="-1.423" y="-0.4286" size="0.8128" layer="21" ratio="15">&gt;VALUE</text>
</package>
<package name="R2512">
<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="51"/>
<smd name="1" x="-2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
<smd name="2" x="2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
<text x="-2.54" y="1.905" size="1.27" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
</package>
<package name="AXIAL-0.4">
<description>1/4W Resistor, 0.4" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-3.15" y1="-1.2" x2="-3.15" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="1.2" x2="3.15" y2="1.2" width="0.2032" layer="21"/>
<wire x1="3.15" y1="1.2" x2="3.15" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="3.15" y1="-1.2" x2="-3.15" y2="-1.2" width="0.2032" layer="21"/>
<pad name="P$1" x="-5.08" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="5.08" y="0" drill="0.9" diameter="1.8796"/>
<text x="-3.175" y="1.905" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-2.286" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.5">
<description>1/2W Resistor, 0.5" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-4.5" y1="-1.65" x2="-4.5" y2="1.65" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="1.65" x2="4.5" y2="1.65" width="0.2032" layer="21"/>
<wire x1="4.5" y1="1.65" x2="4.5" y2="-1.65" width="0.2032" layer="21"/>
<wire x1="4.5" y1="-1.65" x2="-4.5" y2="-1.65" width="0.2032" layer="21"/>
<pad name="P$1" x="-6.35" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="6.35" y="0" drill="0.9" diameter="1.8796"/>
<text x="-4.445" y="2.54" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-3.429" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.6">
<description>1W Resistor, 0.6" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-5.75" y1="-2.25" x2="-5.75" y2="2.25" width="0.2032" layer="21"/>
<wire x1="-5.75" y1="2.25" x2="5.75" y2="2.25" width="0.2032" layer="21"/>
<wire x1="5.75" y1="2.25" x2="5.75" y2="-2.25" width="0.2032" layer="21"/>
<wire x1="5.75" y1="-2.25" x2="-5.75" y2="-2.25" width="0.2032" layer="21"/>
<pad name="P$1" x="-7.62" y="0" drill="1.2" diameter="1.8796"/>
<pad name="P$2" x="7.62" y="0" drill="1.2" diameter="1.8796"/>
<text x="-5.715" y="3.175" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-4.064" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.8">
<description>2W Resistor, 0.8" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-7.75" y1="-2.5" x2="-7.75" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-7.75" y1="2.5" x2="7.75" y2="2.5" width="0.2032" layer="21"/>
<wire x1="7.75" y1="2.5" x2="7.75" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="7.75" y1="-2.5" x2="-7.75" y2="-2.5" width="0.2032" layer="21"/>
<pad name="P$1" x="-10.16" y="0" drill="1.2" diameter="1.8796"/>
<pad name="P$2" x="10.16" y="0" drill="1.2" diameter="1.8796"/>
<text x="-7.62" y="3.175" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-5.969" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.3-KIT">
<description>&lt;h3&gt;AXIAL-0.3-KIT&lt;/h3&gt;

Commonly used for 1/4W through-hole resistors. 0.3" pitch between holes.&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of the AXIAL-0.3 package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="-2.54" y1="1.27" x2="2.54" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="1.27" x2="2.54" y2="0" width="0.254" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="-1.27" x2="-2.54" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="0" width="0.254" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.254" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.254" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="1.016" diameter="2.032" stop="no"/>
<pad name="P$2" x="3.81" y="0" drill="1.016" diameter="2.032" stop="no"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.159" y="-0.762" size="1.27" layer="21" font="vector" ratio="15">&gt;Value</text>
<polygon width="0.127" layer="30">
<vertex x="3.8201" y="-0.9449" curve="-90"/>
<vertex x="2.8652" y="-0.0152" curve="-90.011749"/>
<vertex x="3.8176" y="0.9602" curve="-90"/>
<vertex x="4.7676" y="-0.0178" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="3.8176" y="-0.4369" curve="-90.012891"/>
<vertex x="3.3731" y="-0.0127" curve="-90"/>
<vertex x="3.8176" y="0.4546" curve="-90"/>
<vertex x="4.2595" y="-0.0025" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-3.8075" y="-0.9525" curve="-90"/>
<vertex x="-4.7624" y="-0.0228" curve="-90.011749"/>
<vertex x="-3.81" y="0.9526" curve="-90"/>
<vertex x="-2.86" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-3.81" y="-0.4445" curve="-90.012891"/>
<vertex x="-4.2545" y="-0.0203" curve="-90"/>
<vertex x="-3.81" y="0.447" curve="-90"/>
<vertex x="-3.3681" y="-0.0101" curve="-90.012967"/>
</polygon>
</package>
<package name="0603-ARV">
<description>&lt;b&gt;Chip Resistor Array&lt;/b&gt; size 4 × 0603&lt;p&gt;
convex termination - Phycomp Components&lt;br&gt;
Source: RS Components</description>
<wire x1="-1.55" y1="0.45" x2="1.55" y2="0.45" width="0.1016" layer="51"/>
<wire x1="1.55" y1="0.45" x2="1.55" y2="-0.45" width="0.1016" layer="51"/>
<wire x1="-1.55" y1="-0.45" x2="-1.55" y2="0.45" width="0.1016" layer="51"/>
<wire x1="1.55" y1="-0.45" x2="-1.55" y2="-0.45" width="0.1016" layer="51"/>
<smd name="1" x="-1.2" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="2" x="-0.4" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="3" x="0.4" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="4" x="1.2" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="5" x="1.2" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="6" x="0.4" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="7" x="-0.4" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="8" x="-1.2" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<text x="-1.905" y="-2.54" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.905" y="1.27" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<rectangle x1="-1.6" y1="0.7" x2="-0.9" y2="0.8" layer="51"/>
<rectangle x1="-0.7" y1="0.7" x2="-0.1" y2="0.8" layer="51"/>
<rectangle x1="0.1" y1="0.7" x2="0.7" y2="0.8" layer="51"/>
<rectangle x1="0.9" y1="0.7" x2="1.6" y2="0.8" layer="51"/>
<rectangle x1="-1.5" y1="0.5" x2="-0.95" y2="0.7" layer="51"/>
<rectangle x1="-0.65" y1="0.5" x2="-0.15" y2="0.7" layer="51"/>
<rectangle x1="0.15" y1="0.5" x2="0.65" y2="0.7" layer="51"/>
<rectangle x1="0.95" y1="0.5" x2="1.5" y2="0.7" layer="51"/>
<rectangle x1="0.9" y1="-0.8" x2="1.6" y2="-0.7" layer="51"/>
<rectangle x1="0.1" y1="-0.8" x2="0.7" y2="-0.7" layer="51"/>
<rectangle x1="-0.7" y1="-0.8" x2="-0.1" y2="-0.7" layer="51"/>
<rectangle x1="-1.6" y1="-0.8" x2="-0.9" y2="-0.7" layer="51"/>
<rectangle x1="0.95" y1="-0.7" x2="1.5" y2="-0.5" layer="51"/>
<rectangle x1="0.15" y1="-0.7" x2="0.65" y2="-0.5" layer="51"/>
<rectangle x1="-0.65" y1="-0.7" x2="-0.15" y2="-0.5" layer="51"/>
<rectangle x1="-1.5" y1="-0.7" x2="-0.95" y2="-0.5" layer="51"/>
</package>
<package name="RPACK-SIP-PTH-5">
<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.2032" layer="21" curve="-180"/>
<wire x1="1.27" y1="-12.7" x2="-1.27" y2="-12.7" width="0.2032" layer="21" curve="-180"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-12.7" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-12.7" x2="1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-1.27" x2="1.27" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="-1.27" width="0.2032" layer="21"/>
<pad name="P$1" x="0" y="0" drill="0.8" shape="square"/>
<pad name="P$2" x="0" y="-2.54" drill="0.8"/>
<pad name="P$3" x="0" y="-5.08" drill="0.8"/>
<pad name="P$4" x="0" y="-7.62" drill="0.8"/>
<pad name="P$5" x="0" y="-10.16" drill="0.8"/>
<pad name="P$6" x="0" y="-12.7" drill="0.8"/>
<text x="-1.778" y="-12.7" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="-3.048" y="0" size="1.27" layer="27" rot="R270">&gt;VALUE</text>
</package>
<package name="SJ_2S-TRACE">
<description>Solder jumper, small, shorted with trace. No paste layer. Trace is cuttable.</description>
<wire x1="0.8255" y1="-1.016" x2="-0.8255" y2="-1.016" width="0.2032" layer="21"/>
<wire x1="0.8255" y1="1.016" x2="1.0795" y2="0.762" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.0795" y1="0.762" x2="-0.8255" y2="1.016" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.0795" y1="-0.762" x2="-0.8255" y2="-1.016" width="0.2032" layer="21" curve="90"/>
<wire x1="0.8255" y1="-1.016" x2="1.0795" y2="-0.762" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.8255" y1="1.016" x2="0.8255" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-0.381" y1="0" x2="0.381" y2="0" width="0.2032" layer="1"/>
<smd name="1" x="-0.508" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0.508" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.9525" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SJ_2S-NOTRACE">
<wire x1="0.8" y1="-1" x2="-0.8" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="1" x2="1" y2="0.7" width="0.2032" layer="21" curve="-90.076445"/>
<wire x1="-1" y1="0.7" x2="-0.8" y2="1" width="0.2032" layer="21" curve="-90.03821"/>
<wire x1="-1" y1="-0.7" x2="-0.8" y2="-1" width="0.2032" layer="21" curve="90.03821"/>
<wire x1="0.8" y1="-1" x2="1" y2="-0.7" width="0.2032" layer="21" curve="90.03821"/>
<wire x1="-0.8" y1="1" x2="0.8" y2="1" width="0.2032" layer="21"/>
<smd name="1" x="-0.4009" y="0" dx="0.635" dy="1.27" layer="1" rot="R180" cream="no"/>
<smd name="2" x="0.4127" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.9525" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.016" y1="-1.016" x2="1.016" y2="1.016" layer="31"/>
</package>
<package name="SJ_2W">
<description>&lt;b&gt;Solder jumper&lt;/b&gt;</description>
<wire x1="3.175" y1="-1.524" x2="-3.175" y2="-1.524" width="0.1524" layer="21"/>
<wire x1="3.175" y1="1.524" x2="3.429" y2="1.27" width="0.1524" layer="21" curve="-90"/>
<wire x1="-3.429" y1="1.27" x2="-3.175" y2="1.524" width="0.1524" layer="21" curve="-90"/>
<wire x1="-3.429" y1="-1.27" x2="-3.175" y2="-1.524" width="0.1524" layer="21" curve="90"/>
<wire x1="3.175" y1="-1.524" x2="3.429" y2="-1.27" width="0.1524" layer="21" curve="90"/>
<wire x1="3.429" y1="-1.27" x2="3.429" y2="1.27" width="0.1524" layer="21"/>
<wire x1="-3.429" y1="-1.27" x2="-3.429" y2="1.27" width="0.1524" layer="21"/>
<wire x1="-3.175" y1="1.524" x2="3.175" y2="1.524" width="0.1524" layer="21"/>
<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
<wire x1="-2.794" y1="0" x2="-3.302" y2="0" width="0.1524" layer="51"/>
<wire x1="0" y1="0.762" x2="0" y2="1.397" width="0.1524" layer="51"/>
<wire x1="0" y1="-1.397" x2="0" y2="-0.762" width="0.1524" layer="51"/>
<wire x1="2.032" y1="0.127" x2="2.032" y2="-0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<wire x1="-2.032" y1="-0.127" x2="-2.032" y2="0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<smd name="1" x="-2.54" y="0" dx="1.27" dy="2.54" layer="1"/>
<smd name="2" x="0" y="0" dx="1.27" dy="2.54" layer="1"/>
<smd name="3" x="2.54" y="0" dx="1.27" dy="2.54" layer="1"/>
<text x="-3.429" y="1.778" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<rectangle x1="-0.508" y1="-0.762" x2="0.508" y2="0.762" layer="51"/>
</package>
<package name="SJ_2">
<description>&lt;b&gt;Solder jumper&lt;/b&gt;</description>
<wire x1="2.159" y1="-1.016" x2="-2.159" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="2.159" y1="1.016" x2="2.413" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-2.413" y1="0.762" x2="-2.159" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-2.413" y1="-0.762" x2="-2.159" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="2.159" y1="-1.016" x2="2.413" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="2.413" y1="-0.762" x2="2.413" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-2.413" y1="-0.762" x2="-2.413" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-2.159" y1="1.016" x2="2.159" y2="1.016" width="0.1524" layer="21"/>
<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
<wire x1="-1.778" y1="0" x2="-2.286" y2="0" width="0.1524" layer="51"/>
<wire x1="0" y1="0.762" x2="0" y2="1.016" width="0.1524" layer="51"/>
<wire x1="0" y1="-1.016" x2="0" y2="-0.762" width="0.1524" layer="51"/>
<wire x1="1.016" y1="0.127" x2="1.016" y2="-0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<wire x1="-1.016" y1="-0.127" x2="-1.016" y2="0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<smd name="1" x="-1.524" y="0" dx="1.1684" dy="1.6002" layer="1"/>
<smd name="2" x="0" y="0" dx="1.1684" dy="1.6002" layer="1"/>
<smd name="3" x="1.524" y="0" dx="1.1684" dy="1.6002" layer="1"/>
<text x="-2.413" y="1.27" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<rectangle x1="-0.508" y1="-0.762" x2="0.508" y2="0.762" layer="51"/>
</package>
<package name="PAD.02X.02">
<smd name="P$1" x="0" y="0" dx="0.508" dy="0.508" layer="1"/>
</package>
<package name="PAD.03X.03">
<smd name="P$1" x="0" y="0" dx="0.762" dy="0.762" layer="1" roundness="100" cream="no"/>
</package>
<package name="PAD.03X.05">
<smd name="P$1" x="0" y="0" dx="1.27" dy="1.27" layer="1" roundness="100" cream="no"/>
</package>
<package name="GND_CONNECT">
<smd name="1" x="-1.016" y="0" dx="1.016" dy="1.016" layer="1"/>
<smd name="2" x="-1.016" y="-1.27" dx="1.016" dy="1.016" layer="1"/>
<smd name="3" x="0.254" y="-0.635" dx="1.016" dy="1.016" layer="1"/>
<text x="-0.889" y="1.27" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.143" y="-4.064" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="DR1030">
<description>For Coiltronics/Cooper DR1030 series inductors</description>
<wire x1="5.15" y1="5.25" x2="5.15" y2="-5.25" width="0.127" layer="21"/>
<wire x1="-5.15" y1="-5.25" x2="-5.15" y2="5.25" width="0.127" layer="21"/>
<smd name="2" x="0" y="-4.45" dx="3.3" dy="1.6" layer="1"/>
<smd name="1" x="0" y="4.45" dx="3.3" dy="1.6" layer="1"/>
<wire x1="5.15" y1="-5.25" x2="2" y2="-5.25" width="0.127" layer="21"/>
<wire x1="-5.15" y1="-5.25" x2="-2" y2="-5.25" width="0.127" layer="21"/>
<wire x1="-5.15" y1="5.25" x2="-2" y2="5.25" width="0.127" layer="21"/>
<wire x1="5.15" y1="5.25" x2="2" y2="5.25" width="0.127" layer="21"/>
<text x="-3.81" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.81" y="-1.27" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CPOL-RADIAL-10UF-25V-KIT">
<wire x1="-0.762" y1="1.397" x2="-1.778" y2="1.397" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="2.5" width="0.2032" layer="21"/>
<pad name="1" x="1.27" y="0" drill="0.7" diameter="1.651" shape="square" stop="no"/>
<pad name="2" x="-1.27" y="0" drill="0.7" diameter="1.651" stop="no"/>
<text x="-0.889" y="1.524" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.905" y="-3.683" size="0.8128" layer="27">&gt;Value</text>
<circle x="-1.27" y="0" radius="0.3556" width="0" layer="29"/>
<circle x="-1.27" y="0" radius="0.9652" width="0" layer="30"/>
<circle x="1.27" y="0" radius="0.3556" width="0" layer="29"/>
<rectangle x1="0.3048" y1="-0.9652" x2="2.2352" y2="0.9652" layer="30"/>
</package>
</packages>
<symbols>
<symbol name="CAP">
<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
<text x="1.524" y="-2.159" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="2" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="CAP_ADJ">
<wire x1="-2.032" y1="-0.762" x2="2.032" y2="3.302" width="0.254" layer="94"/>
<wire x1="1.016" y1="3.302" x2="2.032" y2="3.302" width="0.254" layer="94"/>
<wire x1="2.032" y1="3.302" x2="2.032" y2="2.286" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
<text x="1.524" y="-2.159" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
<pin name="3" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="4" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="CAP_POL">
<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
<wire x1="-2.4669" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.376341" cap="flat"/>
<text x="1.016" y="0.635" size="1.778" layer="95">&gt;NAME</text>
<text x="1.016" y="-4.191" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-2.253" y1="0.668" x2="-1.364" y2="0.795" layer="94"/>
<rectangle x1="-1.872" y1="0.287" x2="-1.745" y2="1.176" layer="94"/>
<pin name="+" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="-" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="CAP" prefix="C" uservalue="yes">
<description>&lt;b&gt;Capacitor&lt;/b&gt;
Standard 0603 ceramic capacitor, and 0.1" leaded capacitor.</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="CAP-PTH-SMALL">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH2" package="CAP-PTH-SMALL2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0805" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH3" package="CAP-PTH-LARGE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="GRM43D">
<connects>
<connect gate="G$1" pin="1" pad="A"/>
<connect gate="G$1" pin="2" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0603-CAP" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0402-CAP" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH1" package="CAP-PTH-5MM">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="_" package="AXIAL-5MM">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1210" package="1210">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1206" package="1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="ASMD" package="CTZ3">
<connects>
<connect gate="G$1" pin="1" pad="+"/>
<connect gate="G$1" pin="2" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="KIT" package="CAP-PTH-SMALL-KIT">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EZ" package="CAP-PTH-SMALLEZ">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="CAP_ADJ" prefix="C">
<description>Variable, non-polarized capacitor</description>
<gates>
<gate name="G$1" symbol="CAP_ADJ" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="CTZ3">
<connects>
<connect gate="G$1" pin="3" pad="+"/>
<connect gate="G$1" pin="4" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="CAP_POL" prefix="C" uservalue="yes">
<description>&lt;b&gt;Capacitor Polarized&lt;/b&gt;
These are standard SMD and PTH capacitors. Normally 10uF, 47uF, and 100uF in electrolytic and tantalum varieties. Always verify the external diameter of the through hole cap, it varies with capacity, voltage, and manufacturer. The EIA devices should be standard.</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="1206" package="EIA3216">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3528" package="EIA3528">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH1" package="CPOL-RADIAL-100UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH2" package="CPOL-RADIAL-10UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="7343" package="EIA7343">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="G" package="PANASONIC_G">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="E" package="PANASONIC_E">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="C" package="PANASONIC_C">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="F80" package="NIPPON_F80">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="D" package="PANASONIC_D">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH3" package="CPOL-RADIAL-1000UF-63V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH4" package="CPOL-RADIAL-1000UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="VISHAY_C">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="H13" package="PANASONIC_H13">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="6032" package="EIA6032">
<connects>
<connect gate="G$1" pin="+" pad="P$1"/>
<connect gate="G$1" pin="-" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EN_J2" package="EN_J2">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3528-KIT" package="EIA3528-KIT">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1206-KIT" package="EIA3216-KIT">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name=".1UF-CER" prefix="C">
<description>.1uF ceramic SMT&lt;br&gt;
CAP-00810- 25V +80%/-20% (0603)&lt;br&gt;
CAP-08390- 100V 10% (0603)&lt;br&gt;
CAP-08604- 25V 5% (0603)&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00810"/>
<attribute name="VALUE" value="0.1uF" constant="no"/>
</technology>
</technologies>
</device>
<device name="CAP-08604" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08604"/>
<attribute name="VALUE" value="0.1uF" constant="no"/>
</technology>
</technologies>
</device>
<device name="CAP-08390" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08390"/>
<attribute name="VALUE" value="0.1uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2.2UF-CER" prefix="C">
<description>2.2uF Ceramic SMT&lt;BR&gt;
CAP-07888- 10V, 20% (0603)&lt;br&gt;
CAP-10009- 50V, 10% (1206)</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="CAP-07888" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07888"/>
<attribute name="VALUE" value="2.2uF" constant="no"/>
</technology>
</technologies>
</device>
<device name="CAP-10009" package="1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-10009"/>
<attribute name="VALUE" value="2.2uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name=".22UF-CER" prefix="C" uservalue="yes">
<description>.22uF ceramic SMT&lt;br&gt;
CAP-09885- 50V +80%/-20% (0603)</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09885"/>
<attribute name="VALUE" value=".22uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="100UF-ELECT" prefix="C" uservalue="yes">
<description>100uF electrolytic SMT&lt;br&gt;
CAP-08362- 63V 20%</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="PANASONIC_H13">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08362"/>
<attribute name="VALUE" value="100uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10NF-CER" prefix="C" uservalue="yes">
<description>10nF/.01uF/10000pF ceramic SMT&lt;br&gt;
CAP-00867- 50V 10% (0603)</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00867"/>
<attribute name="VALUE" value="10nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10UF-TANT" prefix="C" uservalue="yes">
<description>10uF Tantalum SMT&lt;br&gt;
CAP-00811- 16V 10% (EIA-3216)</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="EIA3216">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00811"/>
<attribute name="VALUE" value="10uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="47UF-TANT" prefix="C" uservalue="yes">
<description>47uF Tantalum SMT&lt;br&gt;
CAP-08310- 10V 10% (EIA-3528)</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="EIA3528">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08310"/>
<attribute name="VALUE" value="47uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name=".47UF-16V(-20/+80%)(0805)" prefix="C" uservalue="yes">
<description>CAP-08139 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name=".68UF-16V-20%,+80%(0603)" prefix="C" uservalue="yes">
<description>CAP-08708 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.018UF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-08494 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.01UF-1000V-10%(1812)" prefix="C" uservalue="yes">
<description>CAP-09114</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.1UF-100V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-08390</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08390" constant="no"/>
<attribute name="VALUE" value="0.1uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.1UF-25V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08604</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08604"/>
<attribute name="VALUE" value="0.1uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.1UF-25V(+80/-20%)(0603)" prefix="C" uservalue="yes">
<description>Ceramic&lt;br&gt;
Standard decoupling cap &lt;br&gt;
CAP-00810</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00810"/>
<attribute name="VALUE" value="0.1uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.1UF-50V-20%(PTH)" prefix="C" uservalue="yes">
<description>CAP-08370</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="KIT-EZ" package="CAP-PTH-SMALL-KIT">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08370" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.22UF-25V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-07822</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07822" constant="no"/>
<attribute name="VALUE" value="0.22uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.22UF-50V-?20%(ELECT)(PTH)" prefix="C" uservalue="yes">
<description>CAP-09998 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.22UF50V-20%,+80%(0603)" prefix="C" uservalue="yes">
<description>CAP-09885</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09885" constant="no"/>
<attribute name="VALUE" value="0.22uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.2F-3.3V--20%,+80%(COIN)" prefix="C" uservalue="yes">
<description>CAP-10408 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.33UF-50V-10%(0805)" prefix="C" uservalue="yes">
<description>CAP-08469</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.33UF-50V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-08617</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.47UF-25V--20%,+80%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09152</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.68UF-16V--20%,+80%(0603)" prefix="C" uservalue="yes">
<description>CAP-08723 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.75PF-50V(-/+.25PF)(0603)" prefix="C" uservalue="yes">
<description>CAP-07878</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07878" constant="no"/>
<attribute name="VALUE" value="0.75pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1.0PF-50V(-/+.25PF)(0603)" prefix="C" uservalue="yes">
<description>CAP-07879</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07879" constant="no"/>
<attribute name="VALUE" value="1.0pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1.0UF50V10%(1206)" prefix="C" uservalue="yes">
<description>CAP-09822</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.0UF-100V-10%(1206)" prefix="C" uservalue="yes">
<description>CAP-10742</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.0UF-16V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-00868</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00868"/>
<attribute name="VALUE" value="1.0uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1.0UF-50V-20%-(ELECT)" prefix="C" uservalue="yes">
<description>CAP-10222</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.2PF-50V-20%(0603)" prefix="C" uservalue="yes">
<description>CAP-09201</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09201" constant="no"/>
<attribute name="VALUE" value="1.2pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1.5PF-50V(+/-.25PF)(0603)" prefix="C" uservalue="yes">
<description>CAP-08763</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08763" constant="no"/>
<attribute name="VALUE" value="1.5pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1000UF-10V-20%(PTH)" prefix="C" uservalue="yes">
<description>CAP-08514</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1000UF-25V-20%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09538</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1000UF-25V(PTH)" prefix="C" uservalue="yes">
<description>CAP-08070</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100PF-200V-5%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09181</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-07883</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF-10V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-07890</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF-16V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-08702</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF-25V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08498</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF-25V-20%(PTH)" prefix="C" uservalue="yes">
<description>CAP-08439</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF-35V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-09297</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF-63V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08362</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100UF6.3V20%(1210)" prefix="C" uservalue="yes">
<description>CAP-09827</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10NF-100V-10%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09183</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10NF(0.01UF/10,000PF)-1000V-10%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09321</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10NF/10000PF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-00867</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00867" constant="no"/>
<attribute name="VALUE" value="10nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10PF-200V-5%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09180</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10UF-16V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-00811&lt;BR&gt;
1206/EIA-3216 Tantalum capacitor</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="EIA3216">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-00811"/>
<attribute name="VALUE" value="10uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10UF-16V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-09575 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10UF-20V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-08063</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10UF-25V-20%(PTH)" prefix="C" uservalue="yes">
<description>CAP-08440</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="" package="CPOL-RADIAL-10UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08440" constant="no"/>
</technology>
</technologies>
</device>
<device name="KIT" package="CPOL-RADIAL-10UF-25V-KIT">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08440" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10UF-6.3V-20%(1206)" prefix="C" uservalue="yes">
<description>Ceramic&lt;br&gt;
CAP-10057</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-10057"/>
<attribute name="VALUE" value="10uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10UF-6.3V-20%(0603)" prefix="C" uservalue="yes">
<description>CAP-11015</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-11015" constant="no"/>
<attribute name="VALUE" value="10uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10UF10V10%(0805)" prefix="C" uservalue="yes">
<description>CAP-11330</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10UF50V20%(1210)" prefix="C" uservalue="yes">
<description>CAP-09824</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="1210">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09824"/>
<attribute name="VALUE" value="10uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="12NF-200V-10%(0805)" prefix="C" uservalue="yes">
<description>CAP-11056 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="12PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-09137</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09137" constant="no"/>
<attribute name="VALUE" value="12pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="15000PF(15NF)-25V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-08710</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="15NF-250V-10%(0805)" prefix="C" uservalue="yes">
<description>CAP-11077</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="15PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-07881</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07881"/>
<attribute name="VALUE" value="15pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="18PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08267</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08267" constant="no"/>
<attribute name="VALUE" value="18pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1NF-100V-5%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09182</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1NF/1000PF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-07886</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07886" constant="no"/>
<attribute name="VALUE" value="1nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1UF-25V-10%(0805)" prefix="C" uservalue="yes">
<description>CAP-08064</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08064"/>
<attribute name="VALUE" value="1uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1UF-35V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-09577</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1UF-50V--20,+80%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09184</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.2NF/2200PF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-07877</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07877" constant="no"/>
<attribute name="VALUE" value="2.2nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2.2UF-10V-20%(0603)" prefix="C" uservalue="yes">
<description>CAP-07888</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07888" constant="no"/>
<attribute name="VALUE" value="2.2uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2.2UF-25V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-08706 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.2UF50V10%(1206)" prefix="C" uservalue="yes">
<description>CAP-10009</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08722</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220UF-16V-20%(PTH)" prefix="C" uservalue="yes">
<description>CAP-10898</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220UF-16V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-09578</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22NF/22,000PF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-07885</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07885" constant="no"/>
<attribute name="VALUE" value="22nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="22PF-200V-5%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09128</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-07876</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07876" constant="no"/>
<attribute name="VALUE" value="22pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="22UF-16V-20%-(1210)" prefix="C" uservalue="yes">
<description>CAP-10381</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="1210">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-10381"/>
<attribute name="VALUE" value="22uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="22UF-16V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-09576</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22UF-35V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08618</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22UF-6.3V-20%(0805)" prefix="C" uservalue="yes">
<description>Ceramic&lt;BR&gt;
CAP-08402</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08402"/>
<attribute name="VALUE" value="22uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="27PF50V5%(0603)" prefix="C" uservalue="yes">
<description>CAP-09989</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="3.3NF-100V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-09633</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09633" constant="no"/>
<attribute name="VALUE" value="3.3nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="3.3UF-80V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08365 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="330PF-25V-10%-(0603)" prefix="C" uservalue="yes">
<description>CAP-10108</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="33NF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-07887</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="33PF-50V-5%-(0603)" prefix="C" uservalue="yes">
<description>CAP-10142</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="33UF-16V-20%(TANT)" prefix="C" uservalue="yes">
<description>CAP-09017</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="33UF-50V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08826</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="390NF-10V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-10986</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7NF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-11378</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-11378" constant="no"/>
<attribute name="VALUE" value="4.7nF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="4.7PF-50V(-/+.25PF)(0603)" prefix="C" uservalue="yes">
<description>CAP-07880</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-07880" constant="no"/>
<attribute name="VALUE" value="4.7pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="4.7UF-16V-20%,+80%-(1206)" prefix="C" uservalue="yes">
<description>CAP-10300</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7UF-35V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-08313</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7UF-6.3V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-08280</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="-2.54"/>
</gates>
<devices>
<device name="0603" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08280"/>
<attribute name="VALUE" value="4.7uF"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="430PF-100V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08709</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470NF-16V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-09041</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-07884</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470UF-25V(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08700</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470UF-6.3V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08408</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470UF16V?20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-10043</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470UF16V(PTH)" prefix="C" uservalue="yes">
<description>CAP-08088</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47NF(0.047UF/47000PF)-25V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08605</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47PF-1500V-5%(0805)" prefix="C" uservalue="yes">
<description>CAP-09202</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47PF-500V-10%(PTH)" prefix="C" uservalue="yes">
<description>CAP-09326</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08913</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08913"/>
<attribute name="VALUE" value="47pF"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="47UF-10V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-08310</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47UF-25V(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08699</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47UF-35V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-08478</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47UF-50V-20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-10547</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="560PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08749</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-08749"/>
<attribute name="VALUE" value="560pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="560UF25V20%(ELECT)" prefix="C" uservalue="yes">
<description>CAP-09983</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="6.7PF" prefix="C" uservalue="yes">
<description>CAP-08429 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="6.8PF-50V-+/-.25PF(0603)" prefix="C" uservalue="yes">
<description>CAP-08620 - Retired</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="680PF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-09232</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="680PF-50V-5%(0805)" prefix="C" uservalue="yes">
<description>CAP-08472</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="68PF-50V-5%(0603)" prefix="C" uservalue="yes">
<description>CAP-08804</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="68UF-10V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-08312</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="68UF-10V-10%(TANT)" prefix="C" uservalue="yes">
<description>CAP-10790</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="8200PF(PTH)" prefix="C" uservalue="yes">
<description>CAP-08081</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="8200PF/8.2NF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-08309</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="9.0PF-50V-10%(0603)" prefix="C" uservalue="yes">
<description>CAP-09341</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-09341" constant="no"/>
<attribute name="VALUE" value="9.0pF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1.0UF-25V-+80/-20(0805)" prefix="C" uservalue="yes">
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-11625"/>
<attribute name="VALUE" value="1.0uF"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2.2UF-25V-+80/-20(0805)" prefix="C" uservalue="yes">
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="CAP-11624"/>
<attribute name="VALUE" value="2.2uF" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Connectors.lbr.

more than 10,000 changes

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-DigitalIC.lbr.

more than 10,000 changes

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-DiscreteSemi.lbr.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.4">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="yes" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="yes" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="yes" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="yes" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="yes" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="yes" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="yes" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="yes" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="yes" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="yes" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="yes" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="yes" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="yes" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find discrete semiconductors- transistors, diodes, TRIACs, optoisolators, etc.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="SOT23">
<description>&lt;b&gt;SOT-23&lt;/b&gt;</description>
<wire x1="1.4224" y1="0.6604" x2="1.4224" y2="-0.6604" width="0.1524" layer="21"/>
<wire x1="1.4224" y1="-0.6604" x2="-1.4224" y2="-0.6604" width="0.1524" layer="21"/>
<wire x1="-1.4224" y1="-0.6604" x2="-1.4224" y2="0.6604" width="0.1524" layer="21"/>
<wire x1="-1.4224" y1="0.6604" x2="1.4224" y2="0.6604" width="0.1524" layer="21"/>
<smd name="3" x="0" y="1.1" dx="1" dy="1.4" layer="1"/>
<smd name="2" x="0.95" y="-1.1" dx="1" dy="1.4" layer="1"/>
<smd name="1" x="-0.95" y="-1.1" dx="1" dy="1.4" layer="1"/>
<text x="-0.889" y="2.032" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.2286" y1="0.7112" x2="0.2286" y2="1.2954" layer="51"/>
<rectangle x1="0.7112" y1="-1.2954" x2="1.1684" y2="-0.7112" layer="51"/>
<rectangle x1="-1.1684" y1="-1.2954" x2="-0.7112" y2="-0.7112" layer="51"/>
</package>
<package name="SOT363">
<wire x1="-1.2" y1="-0.8" x2="-1.2" y2="0.8" width="0.2032" layer="21"/>
<wire x1="1.2" y1="-0.8" x2="1.2" y2="0.8" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-0.7" x2="-1.5" y2="-0.7" width="0.127" layer="21"/>
<wire x1="-1.5" y1="-0.7" x2="-1.5" y2="-0.8" width="0.127" layer="21"/>
<circle x="-1.6" y="-0.7" radius="0.1414" width="0.2032" layer="21"/>
<smd name="1" x="-0.65" y="-0.8" dx="0.99" dy="0.3" layer="1" rot="R90"/>
<smd name="2" x="0" y="-0.8" dx="0.99" dy="0.3" layer="1" rot="R90"/>
<smd name="3" x="0.65" y="-0.8" dx="0.99" dy="0.3" layer="1" rot="R90"/>
<smd name="6" x="-0.65" y="0.81" dx="0.99" dy="0.3" layer="1" rot="R90"/>
<smd name="5" x="0" y="0.81" dx="0.99" dy="0.3" layer="1" rot="R90"/>
<smd name="4" x="0.65" y="0.81" dx="0.99" dy="0.3" layer="1" rot="R90"/>
</package>
<package name="CNZ1120">
<wire x1="-9.5" y1="3.1" x2="9.5" y2="3.1" width="0.2032" layer="21"/>
<wire x1="9.5" y1="3.1" x2="9.5" y2="-3.1" width="0.2032" layer="21"/>
<wire x1="9.5" y1="-3.1" x2="-9.5" y2="-3.1" width="0.2032" layer="21"/>
<wire x1="-9.5" y1="-3.1" x2="-9.5" y2="3.1" width="0.2032" layer="21"/>
<circle x="-8.8" y="2.4" radius="0.3162" width="0.2032" layer="21"/>
<pad name="1" x="-7.7" y="1.3" drill="0.7" shape="square"/>
<pad name="4" x="7.7" y="1.3" drill="0.7"/>
<pad name="2" x="-7.7" y="-1.3" drill="0.7"/>
<pad name="3" x="7.7" y="-1.3" drill="0.7"/>
</package>
<package name="SMA-DIODE">
<description>&lt;B&gt;Diode&lt;/B&gt;&lt;p&gt;
Basic SMA packaged diode. Good for reverse polarization protection. Common part #: MBRA140</description>
<wire x1="-2.3" y1="1" x2="-2.3" y2="1.45" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="1.45" x2="2.3" y2="1.45" width="0.2032" layer="21"/>
<wire x1="2.3" y1="1.45" x2="2.3" y2="1" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1" x2="2.3" y2="-1.45" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1.45" x2="-2.3" y2="-1.45" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="-1.45" x2="-2.3" y2="-1" width="0.2032" layer="21"/>
<wire x1="1" y1="1" x2="1" y2="-1" width="0.2032" layer="21"/>
<smd name="A" x="-2.15" y="0" dx="1.27" dy="1.47" layer="1" rot="R180"/>
<smd name="C" x="2.15" y="0" dx="1.27" dy="1.47" layer="1"/>
<text x="-2.286" y="1.651" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.254" y="1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="DIODE-1N4001">
<wire x1="3.175" y1="1.27" x2="1.905" y2="1.27" width="0.254" layer="21"/>
<wire x1="1.905" y1="1.27" x2="-3.175" y2="1.27" width="0.254" layer="21"/>
<wire x1="-3.175" y1="1.27" x2="-3.175" y2="0" width="0.254" layer="21"/>
<wire x1="-3.175" y1="0" x2="-3.175" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.254" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="3.175" y2="-1.27" width="0.254" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="3.175" y2="0" width="0.254" layer="21"/>
<wire x1="3.175" y1="0" x2="3.175" y2="1.27" width="0.254" layer="21"/>
<wire x1="1.905" y1="1.27" x2="1.905" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-3.175" y1="0" x2="-3.81" y2="0" width="0.254" layer="21"/>
<wire x1="3.175" y1="0" x2="3.81" y2="0" width="0.254" layer="21"/>
<pad name="A" x="-5.08" y="0" drill="1" diameter="1.9812"/>
<pad name="C" x="5.08" y="0" drill="1" diameter="1.9812"/>
<text x="-2.921" y="1.651" size="0.6096" layer="25">&gt;Name</text>
<text x="-2.921" y="-0.508" size="1.016" layer="21" ratio="12">&gt;Value</text>
</package>
<package name="SOD-323">
<wire x1="-0.9" y1="0.65" x2="-0.5" y2="0.65" width="0.2032" layer="21"/>
<wire x1="-0.5" y1="0.65" x2="0.9" y2="0.65" width="0.2032" layer="21"/>
<wire x1="-0.9" y1="-0.65" x2="-0.5" y2="-0.65" width="0.2032" layer="21"/>
<wire x1="-0.5" y1="-0.65" x2="0.9" y2="-0.65" width="0.2032" layer="21"/>
<wire x1="-0.5" y1="0.65" x2="-0.5" y2="-0.65" width="0.2032" layer="21"/>
<smd name="1" x="-1.15" y="0" dx="0.63" dy="0.83" layer="1"/>
<smd name="2" x="1.15" y="0" dx="0.63" dy="0.83" layer="1"/>
<text x="-0.889" y="1.016" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-1.397" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SOT23-3">
<wire x1="1.4224" y1="0.6604" x2="1.4224" y2="-0.6604" width="0.1524" layer="51"/>
<wire x1="1.4224" y1="-0.6604" x2="-1.4224" y2="-0.6604" width="0.1524" layer="51"/>
<wire x1="-1.4224" y1="-0.6604" x2="-1.4224" y2="0.6604" width="0.1524" layer="51"/>
<wire x1="-1.4224" y1="0.6604" x2="1.4224" y2="0.6604" width="0.1524" layer="51"/>
<wire x1="-0.8" y1="0.7" x2="-1.4" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-1.4" y1="0.7" x2="-1.4" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="0.7" x2="1.4" y2="0.7" width="0.2032" layer="21"/>
<wire x1="1.4" y1="0.7" x2="1.4" y2="-0.1" width="0.2032" layer="21"/>
<smd name="1" x="-0.95" y="-1" dx="0.8" dy="0.9" layer="1"/>
<smd name="2" x="0.95" y="-1" dx="0.8" dy="0.9" layer="1"/>
<smd name="3" x="0" y="1.1" dx="0.8" dy="0.9" layer="1"/>
<text x="-0.8255" y="1.778" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="DIODE-1N4148">
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="1.905" y1="0.635" x2="1.905" y2="-0.635" width="0.2032" layer="21"/>
<pad name="A" x="-3.81" y="0" drill="0.9" diameter="1.8796"/>
<pad name="C" x="3.81" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.032" y="-0.508" size="0.8128" layer="21">&gt;Value</text>
</package>
<package name="SMB-DIODE">
<description>&lt;b&gt;Diode&lt;/b&gt;&lt;p&gt;
Basic small signal diode good up to 200mA. SMB footprint. Common part #: BAS16</description>
<wire x1="-3.973" y1="1.983" x2="3.973" y2="1.983" width="0.0508" layer="39"/>
<wire x1="3.973" y1="-1.983" x2="-3.973" y2="-1.983" width="0.0508" layer="39"/>
<wire x1="-3.973" y1="-1.983" x2="-3.973" y2="1.983" width="0.0508" layer="39"/>
<wire x1="3.973" y1="1.983" x2="3.973" y2="-1.983" width="0.0508" layer="39"/>
<wire x1="-2.2606" y1="1.905" x2="2.2606" y2="1.905" width="0.1016" layer="21"/>
<wire x1="-2.2606" y1="-1.905" x2="2.2606" y2="-1.905" width="0.1016" layer="21"/>
<wire x1="-2.261" y1="-1.905" x2="-2.261" y2="1.905" width="0.1016" layer="51"/>
<wire x1="2.261" y1="-1.905" x2="2.261" y2="1.905" width="0.1016" layer="51"/>
<wire x1="0.643" y1="1" x2="-0.73" y2="0" width="0.2032" layer="21"/>
<wire x1="-0.73" y1="0" x2="0.643" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.643" y1="-1" x2="0.643" y2="1" width="0.2032" layer="21"/>
<wire x1="-0.73" y1="1" x2="-0.73" y2="-1" width="0.2032" layer="21"/>
<smd name="C" x="-2.2" y="0" dx="2.4" dy="2.4" layer="1"/>
<smd name="A" x="2.2" y="0" dx="2.4" dy="2.4" layer="1"/>
<text x="-2.159" y="2.159" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.905" y="-3.429" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-2.794" y1="-1.0922" x2="-2.2606" y2="1.0922" layer="51"/>
<rectangle x1="2.2606" y1="-1.0922" x2="2.794" y2="1.0922" layer="51"/>
</package>
<package name="DIODE-HV">
<wire x1="-3.973" y1="1.983" x2="3.973" y2="1.983" width="0.0508" layer="39"/>
<wire x1="3.973" y1="-1.983" x2="-3.973" y2="-1.983" width="0.0508" layer="39"/>
<wire x1="-3.973" y1="-1.983" x2="-3.973" y2="1.983" width="0.0508" layer="39"/>
<wire x1="3.973" y1="1.983" x2="3.973" y2="-1.983" width="0.0508" layer="39"/>
<wire x1="-2.2606" y1="1.905" x2="2.2606" y2="1.905" width="0.1016" layer="21"/>
<wire x1="-2.2606" y1="-1.905" x2="2.2606" y2="-1.905" width="0.1016" layer="21"/>
<wire x1="-2.261" y1="-1.905" x2="-2.261" y2="1.905" width="0.1016" layer="51"/>
<wire x1="2.261" y1="-1.905" x2="2.261" y2="1.905" width="0.1016" layer="51"/>
<wire x1="0.643" y1="1" x2="-0.73" y2="0" width="0.2032" layer="21"/>
<wire x1="-0.73" y1="0" x2="0.643" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.643" y1="-1" x2="0.643" y2="1" width="0.2032" layer="21"/>
<wire x1="-0.73" y1="1" x2="-0.73" y2="-1" width="0.2032" layer="21"/>
<smd name="C" x="-2.454" y="0" dx="2.2" dy="2.4" layer="1"/>
<smd name="A" x="2.454" y="0" dx="2.2" dy="2.4" layer="1"/>
<text x="-2.159" y="2.159" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.905" y="-3.429" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-2.794" y1="-1.0922" x2="-2.2606" y2="1.0922" layer="51"/>
<rectangle x1="2.2606" y1="-1.0922" x2="2.794" y2="1.0922" layer="51"/>
</package>
<package name="SMA-DIODE_ALT">
<wire x1="-2.3" y1="1.3" x2="-2.3" y2="1.45" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="1.45" x2="2.3" y2="1.45" width="0.2032" layer="21"/>
<wire x1="2.3" y1="1.45" x2="2.3" y2="1.3" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1.3" x2="2.3" y2="-1.45" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1.45" x2="-2.3" y2="-1.45" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="-1.45" x2="-2.3" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="0.6" y1="1" x2="0.6" y2="-1" width="0.2032" layer="21"/>
<smd name="A" x="-2" y="0" dx="2" dy="2" layer="1" rot="R180"/>
<smd name="C" x="2" y="0" dx="2" dy="2" layer="1"/>
<text x="-2.286" y="1.651" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.254" y="1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SMA-DIODE-KIT">
<wire x1="-2.3" y1="1" x2="-2.3" y2="1.45" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="1.45" x2="2.3" y2="1.45" width="0.2032" layer="21"/>
<wire x1="2.3" y1="1.45" x2="2.3" y2="1" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1" x2="2.3" y2="-1.45" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1.45" x2="-2.3" y2="-1.45" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="-1.45" x2="-2.3" y2="-1" width="0.2032" layer="21"/>
<wire x1="1" y1="1" x2="1" y2="-1" width="0.2032" layer="21"/>
<smd name="A" x="-2.4" y="0" dx="1.77" dy="1.47" layer="1" rot="R180"/>
<smd name="C" x="2.4" y="0" dx="1.77" dy="1.47" layer="1"/>
<text x="-2.286" y="1.651" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.254" y="1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="DIODE-ZENER">
<wire x1="-1.778" y1="0.762" x2="1.778" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.778" y1="0" x2="1.778" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="1.778" y1="-0.762" x2="-1.778" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-1.778" y1="-0.762" x2="-1.778" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.778" y1="0" x2="-1.778" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.778" y1="0" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.778" y1="0" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="1.778" y1="0.762" x2="1.778" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.556" y="0" drill="0.9"/>
<pad name="P$2" x="3.556" y="0" drill="0.9"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.397" y="-0.508" size="0.4064" layer="21">&gt;Value</text>
</package>
<package name="GP1A57HR">
<wire x1="-9.5" y1="3.1" x2="9.5" y2="3.1" width="0.2032" layer="21"/>
<wire x1="9.5" y1="3.1" x2="9.5" y2="-3.1" width="0.2032" layer="21"/>
<wire x1="9.5" y1="-3.1" x2="-9.5" y2="-3.1" width="0.2032" layer="21"/>
<wire x1="-9.5" y1="-3.1" x2="-9.5" y2="3.1" width="0.2032" layer="21"/>
<pad name="1" x="-7.6" y="1.24" drill="0.7"/>
<pad name="3" x="7.6" y="-1.3" drill="0.7"/>
<pad name="4" x="6.15" y="0" drill="0.7"/>
<pad name="2" x="-7.62" y="-1.27" drill="0.7"/>
<pad name="5" x="7.62" y="1.27" drill="0.7"/>
<hole x="0" y="0" drill="1.5"/>
<hole x="-8.95" y="2" drill="0.7"/>
</package>
<package name="SC70">
<wire x1="1" y1="0.625" x2="1" y2="-0.625" width="0.127" layer="51"/>
<wire x1="-1" y1="-0.625" x2="-1" y2="0.625" width="0.127" layer="51"/>
<wire x1="-1" y1="-0.625" x2="1" y2="-0.625" width="0.127" layer="51"/>
<wire x1="-1" y1="0.625" x2="1" y2="0.625" width="0.127" layer="51"/>
<smd name="1" x="-0.65" y="-0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="2" x="0" y="-0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="3" x="0.65" y="-0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="4" x="0.65" y="0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="5" x="-0.65" y="0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<text x="-0.889" y="1.524" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.762" y="-0.254" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.85" y1="0.45" x2="-0.45" y2="1.2" layer="31"/>
<rectangle x1="0.45" y1="0.45" x2="0.85" y2="1.2" layer="31"/>
<rectangle x1="-0.8382" y1="-1.1684" x2="-0.508" y2="-0.4826" layer="31"/>
<rectangle x1="-0.1651" y1="-1.1684" x2="0.1651" y2="-0.4826" layer="31"/>
<rectangle x1="0.508" y1="-1.1684" x2="0.8382" y2="-0.4826" layer="31"/>
</package>
<package name="SO08">
<description>&lt;b&gt;Small Outline Package&lt;/b&gt; Fits JEDEC packages (narrow SOIC-8)</description>
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="2" x="-0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="3" x="0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="4" x="1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="5" x="1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="6" x="0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="7" x="-0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="8" x="-1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="MSOP8">
<description>&lt;b&gt;8M, 8-Lead, 0.118" Wide, Miniature Small Outline Package&lt;/b&gt;&lt;p&gt;
MSOP&lt;br&gt;
8M-Package doc1097.pdf</description>
<wire x1="-1.48" y1="1.23" x2="-1.23" y2="1.48" width="0.1524" layer="21" curve="-90" cap="flat"/>
<wire x1="1.23" y1="1.48" x2="1.48" y2="1.23" width="0.1524" layer="21" curve="-90"/>
<wire x1="1.23" y1="-1.49" x2="1.48" y2="-1.24" width="0.1524" layer="21" curve="90"/>
<wire x1="-1.48" y1="-1.24" x2="-1.23" y2="-1.49" width="0.1524" layer="21" curve="90" cap="flat"/>
<wire x1="1.24" y1="-1.49" x2="-1.22" y2="-1.49" width="0.1524" layer="21"/>
<wire x1="-1.22" y1="1.48" x2="1.24" y2="1.48" width="0.1524" layer="21"/>
<wire x1="-1.48" y1="1.23" x2="-1.48" y2="-1.23" width="0.1524" layer="21"/>
<wire x1="1.48" y1="-1.24" x2="1.48" y2="1.23" width="0.1524" layer="21"/>
<circle x="-0.65" y="-0.65" radius="0.325" width="0.254" layer="21"/>
<smd name="1" x="-0.975" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="2" x="-0.325" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="3" x="0.325" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="4" x="0.975" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="5" x="0.975" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="6" x="0.325" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="7" x="-0.325" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="8" x="-0.975" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<text x="-2.54" y="-1.27" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="2.54" y="-1.27" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-1.175" y1="-2.45" x2="-0.775" y2="-1.55" layer="51"/>
<rectangle x1="-0.525" y1="-2.45" x2="-0.125" y2="-1.55" layer="51"/>
<rectangle x1="0.125" y1="-2.45" x2="0.525" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="-2.45" x2="1.175" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="1.55" x2="1.175" y2="2.45" layer="51"/>
<rectangle x1="0.125" y1="1.55" x2="0.525" y2="2.45" layer="51"/>
<rectangle x1="-0.525" y1="1.55" x2="-0.125" y2="2.45" layer="51"/>
<rectangle x1="-1.175" y1="1.55" x2="-0.775" y2="2.45" layer="51"/>
</package>
<package name="DIL06">
<wire x1="3.14" y1="5.08" x2="-5.08" y2="5.08" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-5.08" x2="3.14" y2="-5.08" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="2.54" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-5.08" x2="-5.08" y2="-2.54" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-1.016" x2="-5.08" y2="1.016" width="0.1524" layer="21" curve="180"/>
<wire x1="-5.08" y1="2.54" x2="3.14" y2="2.54" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="3.04" y2="-2.54" width="0.1524" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="3.14" y1="5.08" x2="3.14" y2="-5.08" width="0.127" layer="21"/>
<pad name="1" x="-3.51" y="-3.81" drill="0.8128" diameter="1.6002" shape="octagon"/>
<pad name="2" x="-0.97" y="-3.81" drill="0.8128" diameter="1.6002" shape="octagon"/>
<pad name="3" x="1.57" y="-3.81" drill="0.8128" diameter="1.6002" shape="octagon"/>
<pad name="4" x="1.57" y="3.81" drill="0.8128" diameter="1.6002" shape="octagon"/>
<pad name="5" x="-0.97" y="3.81" drill="0.8128" diameter="1.6002" shape="octagon"/>
<pad name="6" x="-3.51" y="3.81" drill="0.8128" diameter="1.6002" shape="octagon"/>
<text x="-3.775" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.715" y="-3.81" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
</package>
<package name="TO-92">
<description>&lt;b&gt;TO 92&lt;/b&gt;</description>
<wire x1="-0.7863" y1="2.5485" x2="-2.0946" y2="-1.651" width="0.2032" layer="21" curve="111.098962"/>
<wire x1="2.0945" y1="-1.651" x2="0.7863" y2="2.548396875" width="0.2032" layer="21" curve="111.099507"/>
<wire x1="-2.0945" y1="-1.651" x2="2.0945" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="-2.6549" y1="-0.254" x2="-2.2537" y2="-0.254" width="0.2032" layer="21"/>
<wire x1="-0.2863" y1="-0.254" x2="0.2863" y2="-0.254" width="0.2032" layer="21"/>
<wire x1="2.2537" y1="-0.254" x2="2.6549" y2="-0.254" width="0.2032" layer="21"/>
<pad name="1" x="-1.27" y="0" drill="0.8128" diameter="1.8796"/>
<pad name="2" x="0" y="1.905" drill="0.8128" diameter="1.8796"/>
<pad name="3" x="1.27" y="0" drill="0.8128" diameter="1.8796"/>
<text x="3.175" y="0.635" size="0.4064" layer="25" ratio="10">&gt;NAME</text>
<text x="3.175" y="-1.27" size="0.4064" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="DPAK">
<wire x1="3.2766" y1="2.4654" x2="3.277" y2="-3.729" width="0.2032" layer="21"/>
<wire x1="3.277" y1="-3.729" x2="-3.277" y2="-3.729" width="0.2032" layer="21"/>
<wire x1="-3.277" y1="-3.729" x2="-3.2766" y2="2.4654" width="0.2032" layer="21"/>
<wire x1="-3.277" y1="2.465" x2="3.2774" y2="2.4646" width="0.2032" layer="51"/>
<wire x1="-2.5654" y1="2.567" x2="-2.5654" y2="3.2782" width="0.2032" layer="51"/>
<wire x1="-2.5654" y1="3.2782" x2="-2.1082" y2="3.7354" width="0.2032" layer="51"/>
<wire x1="-2.1082" y1="3.7354" x2="2.1082" y2="3.7354" width="0.2032" layer="51"/>
<wire x1="2.1082" y1="3.7354" x2="2.5654" y2="3.2782" width="0.2032" layer="51"/>
<wire x1="2.5654" y1="3.2782" x2="2.5654" y2="2.567" width="0.2032" layer="51"/>
<wire x1="2.5654" y1="2.567" x2="-2.5654" y2="2.567" width="0.2032" layer="51"/>
<rectangle x1="-2.7178" y1="-6.7262" x2="-1.8542" y2="-3.8306" layer="51"/>
<rectangle x1="1.8542" y1="-6.7262" x2="2.7178" y2="-3.8306" layer="51"/>
<rectangle x1="-0.4318" y1="-4.5926" x2="0.4318" y2="-3.8306" layer="21"/>
<smd name="1" x="-2.28" y="-5.31" dx="1.6" dy="3" layer="1"/>
<smd name="3" x="2.28" y="-5.31" dx="1.6" dy="3" layer="1"/>
<smd name="4" x="0" y="1.588" dx="4.826" dy="5.715" layer="1"/>
<text x="-3.683" y="-3.702" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="3.937" y="-3.702" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<polygon width="0.1998" layer="51">
<vertex x="-2.5654" y="2.567"/>
<vertex x="-2.5654" y="3.2782"/>
<vertex x="-2.1082" y="3.7354"/>
<vertex x="2.1082" y="3.7354"/>
<vertex x="2.5654" y="3.2782"/>
<vertex x="2.5654" y="2.567"/>
</polygon>
</package>
<package name="TO220V">
<description>&lt;b&gt;TO 220 Vertical&lt;/b&gt; Package works with various parts including N-Channel MOSFET SparkFun SKU: COM-10213</description>
<wire x1="-5.08" y1="2.032" x2="-5.08" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.032" x2="5.08" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.032" x2="-5.08" y2="2.032" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="2.032" x2="-5.08" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="3.048" x2="5.08" y2="3.048" width="0.2032" layer="21"/>
<wire x1="5.08" y1="3.048" x2="5.08" y2="2.032" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-0.381" x2="-4.191" y2="-1.27" width="0.2032" layer="21" curve="92.798868"/>
<wire x1="4.191" y1="-1.27" x2="5.08" y2="-0.381" width="0.2032" layer="21" curve="92.798868"/>
<wire x1="-4.191" y1="-1.27" x2="-3.81" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="4.191" y1="-1.27" x2="3.81" y2="-1.27" width="0.2032" layer="21"/>
<rectangle x1="-5.08" y1="2.032" x2="5.08" y2="3.048" layer="21"/>
<pad name="1" x="-2.54" y="0" drill="1.016" shape="long" rot="R90"/>
<pad name="2" x="0" y="0" drill="1.016" shape="long" rot="R90"/>
<pad name="3" x="2.54" y="0" drill="1.016" shape="long" rot="R90"/>
<text x="-2.794" y="3.429" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-3.302" y="-3.302" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="8-SMD">
<wire x1="-5" y1="-4" x2="4.69" y2="-4" width="0.1" layer="51"/>
<wire x1="-5" y1="-4" x2="-5" y2="3.62" width="0.1" layer="51"/>
<wire x1="-5" y1="3.62" x2="4.68" y2="3.62" width="0.1" layer="51"/>
<wire x1="4.68" y1="3.62" x2="4.68" y2="-3.98" width="0.1" layer="51"/>
<wire x1="-4.953" y1="3.556" x2="4.572" y2="3.556" width="0.2032" layer="21"/>
<wire x1="4.572" y1="3.556" x2="4.572" y2="-3.937" width="0.2032" layer="21"/>
<wire x1="4.572" y1="-3.937" x2="-4.953" y2="-3.937" width="0.2032" layer="21"/>
<wire x1="-4.953" y1="-3.937" x2="-4.953" y2="3.556" width="0.2032" layer="21"/>
<circle x="-3.76" y="-2.57" radius="0.5993" width="0.127" layer="21"/>
<smd name="8" x="-4.03" y="4.58" dx="1.3" dy="1.4" layer="1"/>
<smd name="7" x="-1.49" y="4.58" dx="1.3" dy="1.4" layer="1"/>
<smd name="6" x="1.05" y="4.58" dx="1.3" dy="1.4" layer="1"/>
<smd name="5" x="3.59" y="4.58" dx="1.3" dy="1.4" layer="1"/>
<smd name="1" x="-3.96" y="-4.96" dx="1.3" dy="1.4" layer="1"/>
<smd name="2" x="-1.42" y="-4.96" dx="1.3" dy="1.4" layer="1"/>
<smd name="3" x="1.12" y="-4.96" dx="1.3" dy="1.4" layer="1"/>
<smd name="4" x="3.66" y="-4.96" dx="1.3" dy="1.4" layer="1"/>
</package>
<package name="SSOP-4">
<wire x1="-2.5" y1="1.3" x2="2.5" y2="1.3" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-1.2" x2="2.5" y2="-1.2" width="0.2032" layer="21"/>
<circle x="-2" y="0.7" radius="0.2247" width="0.2032" layer="21"/>
<smd name="2" x="-3.2" y="-0.6" dx="0.9" dy="1.2" layer="1" rot="R90"/>
<smd name="1" x="-3.2" y="0.67" dx="0.9" dy="1.2" layer="1" rot="R90"/>
<smd name="3" x="3.2" y="-0.6" dx="0.9" dy="1.2" layer="1" rot="R90"/>
<smd name="4" x="3.2" y="0.67" dx="0.9" dy="1.2" layer="1" rot="R90"/>
<text x="-1.4" y="-0.2" size="0.4064" layer="27">TCMT1103</text>
</package>
<package name="SOT223">
<description>&lt;b&gt;SOT-223&lt;/b&gt;</description>
<wire x1="3.2766" y1="1.651" x2="3.2766" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="3.2766" y1="-1.651" x2="-3.2766" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="-3.2766" y1="-1.651" x2="-3.2766" y2="1.651" width="0.2032" layer="21"/>
<wire x1="-3.2766" y1="1.651" x2="3.2766" y2="1.651" width="0.2032" layer="21"/>
<smd name="1" x="-2.3114" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
<smd name="2" x="0" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
<smd name="3" x="2.3114" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
<smd name="4" x="0" y="3.099" dx="3.6" dy="2.2" layer="1"/>
<text x="-0.8255" y="4.5085" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.6002" y1="1.8034" x2="1.6002" y2="3.6576" layer="51"/>
<rectangle x1="-0.4318" y1="-3.6576" x2="0.4318" y2="-1.8034" layer="51"/>
<rectangle x1="-2.7432" y1="-3.6576" x2="-1.8796" y2="-1.8034" layer="51"/>
<rectangle x1="1.8796" y1="-3.6576" x2="2.7432" y2="-1.8034" layer="51"/>
<rectangle x1="-1.6002" y1="1.8034" x2="1.6002" y2="3.6576" layer="51"/>
<rectangle x1="-0.4318" y1="-3.6576" x2="0.4318" y2="-1.8034" layer="51"/>
<rectangle x1="-2.7432" y1="-3.6576" x2="-1.8796" y2="-1.8034" layer="51"/>
<rectangle x1="1.8796" y1="-3.6576" x2="2.7432" y2="-1.8034" layer="51"/>
</package>
<package name="SOT89">
<wire x1="2.3" y1="1.3" x2="2.3" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="2.3" y1="-1.3" x2="-2.3" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="-1.3" x2="-2.3" y2="1.3" width="0.2032" layer="21"/>
<wire x1="-2.3" y1="1.3" x2="2.3" y2="1.3" width="0.2032" layer="21"/>
<smd name="1" x="-1.5" y="-1.8" dx="0.58" dy="1.2" layer="1"/>
<smd name="2" x="0" y="-1.8" dx="0.58" dy="1.2" layer="1"/>
<smd name="3" x="1.5" y="-1.8" dx="0.58" dy="1.2" layer="1"/>
<smd name="4" x="0" y="1.3" dx="2" dy="2" layer="1"/>
<text x="-2.5185" y="-0.9555" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="2.9905" y="-1.1295" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-0.915" y1="0.3034" x2="0.915" y2="2.1576" layer="51"/>
<rectangle x1="-1.74" y1="-2.23" x2="-1.26" y2="-1.27" layer="51"/>
<rectangle x1="-0.24" y1="-2.23" x2="0.24" y2="-1.27" layer="51"/>
<rectangle x1="1.26" y1="-2.23" x2="1.74" y2="-1.27" layer="51"/>
</package>
<package name="TO-92-AMMO">
<wire x1="-2.0946" y1="-1.651" x2="-0.7863" y2="2.5485" width="0.2032" layer="21" curve="-111.098957" cap="flat"/>
<wire x1="0.7863" y1="2.5484" x2="2.0945" y2="-1.651" width="0.2032" layer="21" curve="-111.09954" cap="flat"/>
<wire x1="-2.0945" y1="-1.651" x2="2.0945" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="2.54" x2="0.635" y2="2.54" width="0.2032" layer="21" curve="-25.057615"/>
<wire x1="0.635" y1="2.54" x2="1.905" y2="1.905" width="0.2032" layer="21" curve="-28.072487"/>
<wire x1="-1.905" y1="1.905" x2="0.635" y2="2.54" width="0.2032" layer="21" curve="-53.130102"/>
<pad name="3" x="2.54" y="0" drill="0.8128" diameter="1.8796"/>
<pad name="2" x="0" y="0" drill="0.8128" diameter="1.8796"/>
<pad name="1" x="-2.54" y="0" drill="0.8128" diameter="1.8796"/>
<text x="3.175" y="1.905" size="0.4064" layer="25" ratio="10">&gt;NAME</text>
<text x="3.175" y="-1.905" size="0.4064" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="V18ZA2P">
<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.127" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="8.89" y2="-1.27" width="0.127" layer="21"/>
<wire x1="8.89" y1="-1.27" x2="8.89" y2="1.27" width="0.127" layer="21"/>
<wire x1="8.89" y1="1.27" x2="-1.27" y2="1.27" width="0.127" layer="21"/>
<pad name="P$1" x="0" y="0" drill="0.8"/>
<pad name="P$2" x="7.5" y="0" drill="0.8"/>
</package>
<package name="0603-RES">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2286" y1="-0.381" x2="0.2286" y2="0.381" layer="21"/>
</package>
<package name="DIP8SMD">
<wire x1="-3.81" y1="3.175" x2="3.81" y2="3.175" width="0.127" layer="21"/>
<wire x1="3.81" y1="3.175" x2="3.81" y2="-2.032" width="0.127" layer="21"/>
<wire x1="3.81" y1="-2.032" x2="3.81" y2="-3.175" width="0.127" layer="21"/>
<wire x1="3.81" y1="-3.175" x2="-3.81" y2="-3.175" width="0.127" layer="21"/>
<wire x1="-3.81" y1="-3.175" x2="-3.81" y2="-2.032" width="0.127" layer="21"/>
<wire x1="-3.81" y1="-2.032" x2="-3.81" y2="3.175" width="0.127" layer="21"/>
<wire x1="-3.81" y1="-2.032" x2="3.81" y2="-2.032" width="0.127" layer="21"/>
<circle x="-2.794" y="-0.889" radius="0.381" width="0.127" layer="21"/>
<smd name="1" x="-2.54" y="-4.572" dx="1.524" dy="1.27" layer="1"/>
<smd name="2" x="0" y="-4.572" dx="1.524" dy="1.27" layer="1"/>
<smd name="3" x="2.54" y="-4.572" dx="1.524" dy="1.27" layer="1"/>
<smd name="4" x="2.54" y="4.572" dx="1.524" dy="1.27" layer="1"/>
<smd name="5" x="0" y="4.572" dx="1.524" dy="1.27" layer="1"/>
<smd name="6" x="-2.54" y="4.572" dx="1.524" dy="1.27" layer="1"/>
<text x="-3.556" y="1.524" size="1.016" layer="25">&gt;NAME</text>
<text x="-3.556" y="0" size="1.016" layer="27">&gt;VALUE</text>
</package>
<package name="SMC">
<description>&lt;b&gt;DIODE&lt;/b&gt;</description>
<wire x1="-3.5606" y1="3.105" x2="3.5606" y2="3.105" width="0.1016" layer="21"/>
<wire x1="-3.5606" y1="-3.105" x2="3.5606" y2="-3.105" width="0.1016" layer="21"/>
<wire x1="-3.5606" y1="-3.105" x2="-3.5606" y2="3.105" width="0.1016" layer="51"/>
<wire x1="3.5606" y1="-3.105" x2="3.5606" y2="3.105" width="0.1016" layer="51"/>
<wire x1="0.543" y1="1" x2="-0.83" y2="0" width="0.2032" layer="21"/>
<wire x1="-0.83" y1="0" x2="0.543" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.543" y1="-1" x2="0.543" y2="1" width="0.2032" layer="21"/>
<smd name="C" x="-3.7" y="0" dx="2.8" dy="3.8" layer="1"/>
<smd name="A" x="3.7" y="0" dx="2.8" dy="3.8" layer="1"/>
<text x="-3.459" y="3.359" size="1.27" layer="25">&gt;NAME</text>
<text x="-3.459" y="-4.629" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-4.094" y1="-1.0922" x2="-3.5606" y2="1.0922" layer="51"/>
<rectangle x1="3.5606" y1="-1.0922" x2="4.094" y2="1.0922" layer="51"/>
<rectangle x1="-2.1" y1="-3.1" x2="-0.85" y2="3.1" layer="21"/>
</package>
<package name="0402-RES">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2032" y1="-0.3556" x2="0.2032" y2="0.3556" layer="21"/>
</package>
<package name="SOT23-6">
<wire x1="1.4224" y1="0.8104" x2="1.4224" y2="-0.8104" width="0.2032" layer="21"/>
<wire x1="-1.4224" y1="-0.8104" x2="-1.4224" y2="0.8104" width="0.2032" layer="21"/>
<wire x1="-1.3276" y1="-0.8104" x2="-1.4224" y2="-0.8104" width="0.2032" layer="21"/>
<wire x1="1.4224" y1="-0.8104" x2="1.3276" y2="-0.8104" width="0.2032" layer="21"/>
<wire x1="1.3276" y1="0.8104" x2="1.4224" y2="0.8104" width="0.2032" layer="21"/>
<wire x1="-1.4224" y1="0.8104" x2="-1.3276" y2="0.8104" width="0.2032" layer="21"/>
<circle x="0.9398" y="-0.381" radius="0.0359" width="0.3048" layer="21"/>
<smd name="3" x="-0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="2" x="0" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="1" x="0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="6" x="0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="4" x="-0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="5" x="0" y="1.3001" dx="0.55" dy="1.2" layer="1" rot="R180"/>
<text x="-0.8255" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="POWERPAK1212-8">
<description>Vishay PowerPAK 1212-8 single device package&lt;br&gt;
High-power, low thermal resistance package.</description>
<smd name="S3" x="-1.4224" y="-0.3302" dx="0.9906" dy="0.4064" layer="1"/>
<smd name="S2" x="-1.4224" y="0.3302" dx="0.9906" dy="0.4064" layer="1"/>
<smd name="S1" x="-1.4224" y="0.9906" dx="0.9906" dy="0.4064" layer="1"/>
<smd name="G" x="-1.4224" y="-0.9906" dx="0.9906" dy="0.4064" layer="1"/>
<smd name="D2" x="1.5494" y="0.3302" dx="0.762" dy="0.4064" layer="1"/>
<smd name="D1" x="1.5494" y="0.9906" dx="0.762" dy="0.4064" layer="1"/>
<smd name="D3" x="1.5494" y="-0.3302" dx="0.762" dy="0.4064" layer="1"/>
<smd name="D4" x="1.5494" y="-0.9906" dx="0.762" dy="0.4064" layer="1"/>
<smd name="DPAD" x="0.5842" y="0" dx="1.7272" dy="2.2352" layer="1"/>
<wire x1="-1.5" y1="1.5" x2="1.5" y2="1.5" width="0.127" layer="21"/>
<wire x1="1.5" y1="1.5" x2="1.5" y2="1.35" width="0.127" layer="21"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="1.4" width="0.127" layer="21"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.127" layer="21"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="-1.35" width="0.127" layer="21"/>
<wire x1="-1.5" y1="-1.5" x2="-1.5" y2="-1.35" width="0.127" layer="21"/>
<text x="-1.143" y="0.508" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.143" y="-0.381" size="0.4064" layer="25">&gt;NAME</text>
</package>
<package name="SOD-523">
<smd name="C" x="0.55" y="0" dx="0.8" dy="0.6" layer="1"/>
<smd name="A" x="-0.55" y="0" dx="0.8" dy="0.6" layer="1"/>
<wire x1="-0.6" y1="-0.4" x2="0.4" y2="-0.4" width="0.127" layer="21"/>
<wire x1="0.4" y1="-0.4" x2="0.6" y2="-0.4" width="0.127" layer="21"/>
<wire x1="0.6" y1="0.4" x2="0.4" y2="0.4" width="0.127" layer="21"/>
<wire x1="0.4" y1="0.4" x2="-0.6" y2="0.4" width="0.127" layer="21"/>
<wire x1="0.6" y1="0.4" x2="0.4" y2="0.6" width="0.127" layer="21"/>
<wire x1="0.6" y1="-0.4" x2="0.4" y2="-0.6" width="0.127" layer="21"/>
<wire x1="0.4" y1="-0.6" x2="0.4" y2="-0.4" width="0.127" layer="21"/>
<wire x1="0.4" y1="0.6" x2="0.4" y2="0.4" width="0.127" layer="21"/>
</package>
<package name="SOD523">
<wire x1="-0.59" y1="0.4" x2="0.59" y2="0.4" width="0.1016" layer="21"/>
<wire x1="0.59" y1="0.4" x2="0.59" y2="-0.4" width="0.1016" layer="51"/>
<wire x1="0.59" y1="-0.4" x2="-0.59" y2="-0.4" width="0.1016" layer="21"/>
<wire x1="-0.59" y1="-0.4" x2="-0.59" y2="0.4" width="0.1016" layer="51"/>
<rectangle x1="-0.75" y1="-0.17" x2="-0.54" y2="0.17" layer="51"/>
<rectangle x1="0.54" y1="-0.17" x2="0.75" y2="0.17" layer="51"/>
<rectangle x1="-0.59" y1="-0.4" x2="-0.3" y2="0.4" layer="51"/>
<smd name="A" x="0.7" y="0" dx="0.7" dy="0.5" layer="1"/>
<smd name="C" x="-0.6" y="0" dx="0.7" dy="0.5" layer="1"/>
<text x="-0.7366" y="0.5588" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.6858" y="-0.9906" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.1397" y1="-0.3937" x2="-0.0127" y2="0.381" layer="21"/>
</package>
<package name="SOT323">
<wire x1="1.1224" y1="0.6604" x2="1.1224" y2="-0.6604" width="0.1524" layer="51"/>
<wire x1="1.1224" y1="-0.6604" x2="-1.1224" y2="-0.6604" width="0.1524" layer="51"/>
<wire x1="-1.1224" y1="-0.6604" x2="-1.1224" y2="0.6604" width="0.1524" layer="51"/>
<wire x1="-1.1224" y1="0.6604" x2="1.1224" y2="0.6604" width="0.1524" layer="51"/>
<wire x1="-0.8" y1="0.7" x2="-1.1" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-1.1" y1="0.7" x2="-1.1" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="0.7" x2="1.1" y2="0.7" width="0.2032" layer="21"/>
<wire x1="1.1" y1="0.7" x2="1.1" y2="-0.1" width="0.2032" layer="21"/>
<smd name="1" x="-0.65" y="-0.925" dx="0.7" dy="0.7" layer="1"/>
<smd name="2" x="0.65" y="-0.925" dx="0.7" dy="0.7" layer="1"/>
<smd name="3" x="0" y="0.925" dx="0.7" dy="0.7" layer="1"/>
<text x="-1.1255" y="1.878" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.116" y="1.3095" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="MICROFET_2X2">
<description>&lt;b&gt;1206-8 ChipFET&lt;/b&gt;&lt;p&gt;
Source: http://www.vishay.com/docs/72593/72593.pdf&lt;br&gt;
http://www.vishay.com/docs/71151/71151.pdf</description>
<wire x1="-1" y1="1" x2="1" y2="1" width="0.127" layer="21"/>
<wire x1="1" y1="1" x2="1" y2="-1" width="0.127" layer="21"/>
<wire x1="1" y1="-1" x2="-1" y2="-1" width="0.127" layer="21"/>
<wire x1="-1" y1="-1" x2="-1" y2="1" width="0.127" layer="21"/>
<smd name="D2" x="-0.5" y="0" dx="0.8" dy="1" layer="1"/>
<smd name="D1" x="0.5" y="0" dx="0.8" dy="1" layer="1"/>
<smd name="D2_2" x="-0.65" y="0.915" dx="0.42" dy="0.42" layer="1"/>
<smd name="G1" x="0" y="0.915" dx="0.42" dy="0.42" layer="1"/>
<smd name="S1" x="0.65" y="0.915" dx="0.42" dy="0.42" layer="1"/>
<smd name="D1_2" x="0.65" y="-0.915" dx="0.42" dy="0.42" layer="1"/>
<smd name="G2" x="0" y="-0.915" dx="0.42" dy="0.42" layer="1"/>
<smd name="S2" x="-0.65" y="-0.915" dx="0.42" dy="0.42" layer="1"/>
<text x="-1.3" y="1.3" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.3" y="-2.6" size="1.27" layer="27">&gt;VALUE</text>
</package>
</packages>
<symbols>
<symbol name="BAV99">
<wire x1="-5.08" y1="2.54" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="0" width="0.254" layer="94"/>
<wire x1="5.08" y1="0" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="0" width="0.254" layer="94"/>
<wire x1="-5.08" y1="0" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="0" x2="-3.556" y2="0" width="0.254" layer="94"/>
<wire x1="-3.556" y1="0" x2="-3.556" y2="1.016" width="0.254" layer="94"/>
<wire x1="-3.556" y1="1.016" x2="-1.778" y2="0" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0" x2="-3.556" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-3.556" y1="-1.016" x2="-3.556" y2="0" width="0.254" layer="94"/>
<wire x1="-1.778" y1="1.016" x2="-1.778" y2="0" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0" x2="-1.778" y2="-1.016" width="0.254" layer="94"/>
<wire x1="3.556" y1="1.016" x2="3.556" y2="0" width="0.254" layer="94"/>
<wire x1="3.556" y1="0" x2="3.556" y2="-1.016" width="0.254" layer="94"/>
<wire x1="3.556" y1="0" x2="1.778" y2="-1.016" width="0.254" layer="94"/>
<wire x1="1.778" y1="1.016" x2="3.556" y2="0" width="0.254" layer="94"/>
<wire x1="1.778" y1="-1.016" x2="1.778" y2="0" width="0.254" layer="94"/>
<wire x1="1.778" y1="0" x2="1.778" y2="1.016" width="0.254" layer="94"/>
<wire x1="1.778" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="-1.778" y2="0" width="0.254" layer="94"/>
<wire x1="5.08" y1="0" x2="3.556" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="0" y2="0" width="0.254" layer="94"/>
<pin name="A1" x="-10.16" y="0" visible="pad" length="middle"/>
<pin name="C2" x="10.16" y="0" visible="pad" length="middle" rot="R180"/>
<pin name="COM" x="0" y="-7.62" visible="pad" length="middle" rot="R90"/>
</symbol>
<symbol name="PNP">
<wire x1="2.54" y1="2.54" x2="0.508" y2="1.524" width="0.1524" layer="94"/>
<wire x1="0.508" y1="-1.524" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="1.27" y1="2.54" x2="1.778" y2="1.524" width="0.1524" layer="94"/>
<wire x1="1.778" y1="1.524" x2="0.508" y2="1.524" width="0.1524" layer="94"/>
<wire x1="0.508" y1="1.524" x2="1.27" y2="2.54" width="0.1524" layer="94"/>
<wire x1="1.2192" y1="2.3114" x2="1.5748" y2="1.6256" width="0.2032" layer="94"/>
<wire x1="1.143" y1="2.159" x2="1.397" y2="1.6256" width="0.2032" layer="94"/>
<wire x1="1.016" y1="2.032" x2="1.2192" y2="1.6256" width="0.2032" layer="94"/>
<wire x1="0.9398" y1="1.8796" x2="1.0414" y2="1.651" width="0.2032" layer="94"/>
<wire x1="0.8128" y1="1.778" x2="0.889" y2="1.6256" width="0.2032" layer="94"/>
<text x="5.08" y="0" size="1.778" layer="95">&gt;NAME</text>
<text x="5.08" y="-2.54" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-0.254" y1="-2.54" x2="0.508" y2="2.54" layer="94"/>
<pin name="B" x="-2.54" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="C" x="2.54" y="-5.08" visible="off" length="short" direction="pas" swaplevel="3" rot="R90"/>
<pin name="E" x="2.54" y="5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R270"/>
</symbol>
<symbol name="NPN">
<wire x1="2.54" y1="2.54" x2="0.508" y2="1.524" width="0.1524" layer="94"/>
<wire x1="1.778" y1="-1.524" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="1.27" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="1.778" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="1.54" y1="-2.04" x2="0.308" y2="-1.424" width="0.1524" layer="94"/>
<wire x1="1.524" y1="-2.413" x2="2.286" y2="-2.413" width="0.254" layer="94"/>
<wire x1="2.286" y1="-2.413" x2="1.778" y2="-1.778" width="0.254" layer="94"/>
<wire x1="1.778" y1="-1.778" x2="1.524" y2="-2.286" width="0.254" layer="94"/>
<wire x1="1.524" y1="-2.286" x2="1.905" y2="-2.286" width="0.254" layer="94"/>
<wire x1="1.905" y1="-2.286" x2="1.778" y2="-2.032" width="0.254" layer="94"/>
<text x="5.08" y="0" size="1.778" layer="95">&gt;NAME</text>
<text x="5.08" y="-2.54" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-0.254" y1="-2.54" x2="0.508" y2="2.54" layer="94"/>
<pin name="B" x="-2.54" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="E" x="2.54" y="-5.08" visible="off" length="short" direction="pas" swaplevel="3" rot="R90"/>
<pin name="C" x="2.54" y="5.08" visible="off" length="short" direction="pas" swaplevel="2" rot="R270"/>
</symbol>
<symbol name="CNZ1120">
<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="-2.54" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="0.762" x2="-6.35" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-3.81" y1="0.762" x2="-5.08" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-3.81" y1="0.762" x2="-4.064" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="1.016" x2="-4.318" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-4.318" y1="1.27" x2="-4.572" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="1.524" x2="-4.826" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-4.826" y1="1.778" x2="-4.953" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-4.953" y1="1.905" x2="-5.08" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-5.207" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-5.207" y1="1.905" x2="-5.334" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-5.334" y1="1.778" x2="-5.588" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-5.588" y1="1.524" x2="-5.842" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="1.27" x2="-6.096" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-6.096" y1="1.016" x2="-6.35" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-3.556" y1="2.032" x2="-5.08" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-6.604" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-5.08" y2="5.08" width="0.1524" layer="94"/>
<wire x1="3.302" y1="3.302" x2="3.302" y2="2.032" width="0.1524" layer="94"/>
<wire x1="3.302" y1="2.032" x2="3.302" y2="0.508" width="0.1524" layer="94"/>
<wire x1="3.302" y1="0.508" x2="3.302" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="3.302" y1="0.508" x2="4.572" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="3.302" y1="2.032" x2="5.08" y2="3.81" width="0.1524" layer="94"/>
<wire x1="5.08" y1="3.81" x2="5.08" y2="5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.254" x2="4.064" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.064" y1="-1.27" x2="4.191" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.191" y1="-1.27" x2="4.318" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.318" y1="-1.27" x2="4.445" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.445" y1="-1.27" x2="4.572" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-1.27" x2="4.699" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.699" y1="-1.27" x2="4.826" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.826" y1="-1.27" x2="5.08" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-1.27" x2="5.08" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-1.016" x2="5.08" y2="-0.889" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.889" x2="5.08" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.762" x2="5.08" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.635" x2="5.08" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.508" x2="5.08" y2="-0.381" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.381" x2="5.08" y2="-0.254" width="0.1524" layer="94"/>
<wire x1="-2.794" y1="1.524" x2="-1.778" y2="2.54" width="0.254" layer="94"/>
<wire x1="-2.032" y1="3.048" x2="-1.27" y2="2.286" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.286" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.54" x2="-1.27" y2="2.794" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.794" x2="-1.27" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.27" y1="3.048" x2="-1.524" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.524" y1="3.048" x2="-1.778" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.778" y1="3.048" x2="-2.032" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.778" y1="3.048" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
<wire x1="-1.524" y1="3.048" x2="-1.27" y2="2.794" width="0.254" layer="94"/>
<wire x1="-2.794" y1="-1.016" x2="-1.778" y2="0" width="0.254" layer="94"/>
<wire x1="-2.032" y1="0.508" x2="-1.27" y2="-0.254" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-0.254" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="0.254" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0.254" x2="-1.27" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0.508" x2="-1.524" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.524" y1="0.508" x2="-1.778" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0.508" x2="-2.032" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0.508" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.524" y1="0.508" x2="-1.27" y2="0.254" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="5.08" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="1.016" x2="-6.096" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="1.27" x2="-4.318" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="1.524" x2="-5.588" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-5.334" y1="1.778" x2="-4.826" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-6.096" y1="0.889" x2="-4.064" y2="0.889" width="0.1524" layer="94"/>
<wire x1="-4.318" y1="1.143" x2="-5.842" y2="1.143" width="0.1524" layer="94"/>
<wire x1="-5.588" y1="1.397" x2="-4.572" y2="1.397" width="0.1524" layer="94"/>
<wire x1="-4.826" y1="1.651" x2="-5.334" y2="1.651" width="0.1524" layer="94"/>
<wire x1="-5.207" y1="1.905" x2="-4.953" y2="1.905" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.508" x2="4.318" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.635" x2="4.445" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.762" x2="4.572" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.889" x2="4.699" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-1.016" x2="4.826" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-1.143" x2="4.826" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.381" x2="4.191" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.508" x2="4.318" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.635" x2="4.445" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.762" x2="4.572" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.889" x2="4.699" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-1.016" x2="4.826" y2="-1.27" width="0.1524" layer="94"/>
<text x="10.16" y="2.54" size="1.778" layer="95">&gt;Name</text>
<text x="10.16" y="0" size="1.778" layer="96">&gt;Value</text>
<pin name="2" x="-5.08" y="7.62" visible="off" length="short" rot="R270"/>
<pin name="1" x="-5.08" y="-5.08" visible="off" length="short" rot="R90"/>
<pin name="4" x="5.08" y="-5.08" visible="off" length="short" rot="R90"/>
<pin name="3" x="5.08" y="7.62" visible="off" length="short" rot="R270"/>
</symbol>
<symbol name="DIODE">
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
<text x="2.54" y="0.4826" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-2.3114" size="1.778" layer="96">&gt;VALUE</text>
<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
</symbol>
<symbol name="DIODE-SCHOTTKY">
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.778" y2="1.524" width="0.254" layer="94"/>
<wire x1="1.27" y1="-1.27" x2="0.762" y2="-1.524" width="0.254" layer="94"/>
<text x="2.54" y="0.4826" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-2.3114" size="1.778" layer="96">&gt;VALUE</text>
<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
</symbol>
<symbol name="DIODE-ZENER">
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.778" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="-1.27" x2="0.762" y2="-1.27" width="0.254" layer="94"/>
<text x="2.54" y="0.4826" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-2.3114" size="1.778" layer="96">&gt;VALUE</text>
<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
<pin name="C" x="2.54" y="0" visible="off" length="short" direction="pas" rot="R180"/>
</symbol>
<symbol name="GP1A57HR">
<wire x1="-7.62" y1="10.16" x2="5.08" y2="10.16" width="0.254" layer="94"/>
<wire x1="5.08" y1="10.16" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="-2.54" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="0.762" x2="-6.35" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-3.81" y1="0.762" x2="-5.08" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-3.81" y1="0.762" x2="-4.064" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="1.016" x2="-4.318" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-4.318" y1="1.27" x2="-4.572" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="1.524" x2="-4.826" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-4.826" y1="1.778" x2="-4.953" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-4.953" y1="1.905" x2="-5.08" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-5.207" y2="1.905" width="0.1524" layer="94"/>
<wire x1="-5.207" y1="1.905" x2="-5.334" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-5.334" y1="1.778" x2="-5.588" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-5.588" y1="1.524" x2="-5.842" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="1.27" x2="-6.096" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-6.096" y1="1.016" x2="-6.35" y2="0.762" width="0.1524" layer="94"/>
<wire x1="-3.556" y1="2.032" x2="-5.08" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-6.604" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="2.032" x2="-5.08" y2="10.16" width="0.1524" layer="94"/>
<wire x1="3.302" y1="3.302" x2="3.302" y2="2.032" width="0.1524" layer="94"/>
<wire x1="3.302" y1="2.032" x2="3.302" y2="0.508" width="0.1524" layer="94"/>
<wire x1="3.302" y1="0.508" x2="3.302" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="3.302" y1="0.508" x2="4.572" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="3.302" y1="2.032" x2="5.08" y2="3.81" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.254" x2="4.064" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.064" y1="-1.27" x2="4.191" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.191" y1="-1.27" x2="4.318" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.318" y1="-1.27" x2="4.445" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.445" y1="-1.27" x2="4.572" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-1.27" x2="4.699" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.699" y1="-1.27" x2="4.826" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="4.826" y1="-1.27" x2="5.08" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-1.27" x2="5.08" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-1.016" x2="5.08" y2="-0.889" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.889" x2="5.08" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.762" x2="5.08" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.635" x2="5.08" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.508" x2="5.08" y2="-0.381" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.381" x2="5.08" y2="-0.254" width="0.1524" layer="94"/>
<wire x1="-2.794" y1="1.524" x2="-1.778" y2="2.54" width="0.254" layer="94"/>
<wire x1="-2.032" y1="3.048" x2="-1.27" y2="2.286" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.286" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.54" x2="-1.27" y2="2.794" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.794" x2="-1.27" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.27" y1="3.048" x2="-1.524" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.524" y1="3.048" x2="-1.778" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.778" y1="3.048" x2="-2.032" y2="3.048" width="0.254" layer="94"/>
<wire x1="-1.778" y1="3.048" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
<wire x1="-1.524" y1="3.048" x2="-1.27" y2="2.794" width="0.254" layer="94"/>
<wire x1="-2.794" y1="-1.016" x2="-1.778" y2="0" width="0.254" layer="94"/>
<wire x1="-2.032" y1="0.508" x2="-1.27" y2="-0.254" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-0.254" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="0.254" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0.254" x2="-1.27" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0.508" x2="-1.524" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.524" y1="0.508" x2="-1.778" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0.508" x2="-2.032" y2="0.508" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0.508" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.524" y1="0.508" x2="-1.27" y2="0.254" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="5.08" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="1.016" x2="-6.096" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="1.27" x2="-4.318" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="1.524" x2="-5.588" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-5.334" y1="1.778" x2="-4.826" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-6.096" y1="0.889" x2="-4.064" y2="0.889" width="0.1524" layer="94"/>
<wire x1="-4.318" y1="1.143" x2="-5.842" y2="1.143" width="0.1524" layer="94"/>
<wire x1="-5.588" y1="1.397" x2="-4.572" y2="1.397" width="0.1524" layer="94"/>
<wire x1="-4.826" y1="1.651" x2="-5.334" y2="1.651" width="0.1524" layer="94"/>
<wire x1="-5.207" y1="1.905" x2="-4.953" y2="1.905" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.508" x2="4.318" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.635" x2="4.445" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.762" x2="4.572" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-0.889" x2="4.699" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-1.016" x2="4.826" y2="-1.143" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-1.143" x2="4.826" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.381" x2="4.191" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.508" x2="4.318" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.635" x2="4.445" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.762" x2="4.572" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-0.889" x2="4.699" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-1.016" x2="4.826" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="5.08" y1="10.16" x2="5.08" y2="9.144" width="0.1524" layer="94"/>
<wire x1="5.08" y1="9.144" x2="5.588" y2="8.89" width="0.1524" layer="94"/>
<wire x1="5.588" y1="8.89" x2="4.572" y2="8.382" width="0.1524" layer="94"/>
<wire x1="4.572" y1="8.382" x2="5.588" y2="7.874" width="0.1524" layer="94"/>
<wire x1="5.588" y1="7.874" x2="4.572" y2="7.366" width="0.1524" layer="94"/>
<wire x1="4.572" y1="7.366" x2="5.08" y2="7.112" width="0.1524" layer="94"/>
<wire x1="5.08" y1="7.112" x2="5.08" y2="5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="5.08" x2="5.08" y2="3.81" width="0.1524" layer="94"/>
<wire x1="5.08" y1="5.08" x2="7.62" y2="5.08" width="0.1524" layer="94"/>
<text x="7.874" y="7.62" size="1.778" layer="95">&gt;Name</text>
<text x="7.874" y="0" size="1.778" layer="96">&gt;Value</text>
<text x="0.254" y="7.366" size="1.524" layer="94">15K</text>
<pin name="2" x="-5.08" y="12.7" visible="off" length="short" rot="R270"/>
<pin name="1" x="-5.08" y="-5.08" visible="off" length="short" rot="R90"/>
<pin name="5" x="5.08" y="-5.08" visible="off" length="short" rot="R90"/>
<pin name="3" x="5.08" y="12.7" visible="off" length="short" rot="R270"/>
<pin name="4" x="10.16" y="5.08" visible="off" length="short" rot="R180"/>
</symbol>
<symbol name="HALL-EFFECT">
<wire x1="-10.16" y1="5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="10.16" y2="0" width="0.254" layer="94"/>
<wire x1="10.16" y1="0" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-5.08" x2="-10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="-6.35" y1="1.27" x2="-3.81" y2="1.27" width="0.254" layer="94"/>
<wire x1="-3.81" y1="1.27" x2="-3.81" y2="0" width="0.254" layer="94"/>
<wire x1="-3.81" y1="0" x2="-3.81" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-3.81" y1="-1.27" x2="-6.35" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-6.35" y1="-1.27" x2="-6.35" y2="1.27" width="0.254" layer="94"/>
<wire x1="-3.81" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="3.81" x2="-1.27" y2="-3.81" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-3.81" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="-1.27" y2="3.81" width="0.254" layer="94"/>
<wire x1="-4.318" y1="0.762" x2="-5.842" y2="-0.762" width="0.254" layer="94"/>
<wire x1="-4.318" y1="-0.762" x2="-5.842" y2="0.762" width="0.254" layer="94"/>
<wire x1="-0.762" y1="-0.508" x2="-0.508" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-0.508" x2="-0.508" y2="0.508" width="0.254" layer="94"/>
<wire x1="-0.508" y1="0.508" x2="0" y2="0.508" width="0.254" layer="94"/>
<wire x1="0" y1="0.508" x2="0.508" y2="0.508" width="0.254" layer="94"/>
<wire x1="0.508" y1="0.508" x2="1.016" y2="0.508" width="0.254" layer="94"/>
<wire x1="1.016" y1="0.508" x2="1.016" y2="-0.508" width="0.254" layer="94"/>
<wire x1="1.016" y1="-0.508" x2="1.27" y2="-0.508" width="0.254" layer="94"/>
<wire x1="0.508" y1="0.508" x2="0.508" y2="-0.508" width="0.254" layer="94"/>
<wire x1="0.508" y1="-0.508" x2="1.016" y2="-0.508" width="0.254" layer="94"/>
<wire x1="0" y1="0.508" x2="0" y2="-0.508" width="0.254" layer="94"/>
<wire x1="0" y1="-0.508" x2="-0.508" y2="-0.508" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="3.048" y2="0" width="0.254" layer="94"/>
<wire x1="10.16" y1="0" x2="7.62" y2="0" width="0.254" layer="94"/>
<text x="-10.16" y="5.588" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="GND" x="-12.7" y="-2.54" length="short"/>
<pin name="OUT" x="12.7" y="0" length="short" rot="R180"/>
<pin name="VCC" x="-12.7" y="2.54" length="short"/>
</symbol>
<symbol name="ILD213T">
<wire x1="0" y1="0" x2="12.7" y2="0" width="0.254" layer="94"/>
<wire x1="12.7" y1="0" x2="12.7" y2="15.24" width="0.254" layer="94"/>
<wire x1="12.7" y1="15.24" x2="12.7" y2="22.86" width="0.254" layer="94"/>
<wire x1="12.7" y1="22.86" x2="12.7" y2="25.4" width="0.254" layer="94"/>
<wire x1="12.7" y1="25.4" x2="0" y2="25.4" width="0.254" layer="94"/>
<wire x1="0" y1="25.4" x2="0" y2="22.86" width="0.254" layer="94"/>
<wire x1="0" y1="22.86" x2="0" y2="15.24" width="0.254" layer="94"/>
<wire x1="0" y1="15.24" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="22.86" x2="1.524" y2="22.86" width="0.254" layer="94"/>
<wire x1="1.524" y1="22.86" x2="1.524" y2="20.066" width="0.254" layer="94"/>
<wire x1="1.524" y1="20.066" x2="2.286" y2="20.066" width="0.254" layer="94"/>
<wire x1="1.524" y1="20.066" x2="0.762" y2="20.066" width="0.254" layer="94"/>
<wire x1="0.762" y1="20.066" x2="1.524" y2="19.304" width="0.254" layer="94"/>
<wire x1="1.524" y1="19.304" x2="2.286" y2="20.066" width="0.254" layer="94"/>
<wire x1="0.762" y1="19.05" x2="2.286" y2="19.05" width="0.254" layer="94"/>
<wire x1="1.524" y1="19.05" x2="1.524" y2="15.24" width="0.254" layer="94"/>
<wire x1="1.524" y1="15.24" x2="0" y2="15.24" width="0.254" layer="94"/>
<wire x1="0" y1="10.16" x2="1.524" y2="10.16" width="0.254" layer="94"/>
<wire x1="1.524" y1="10.16" x2="1.524" y2="7.366" width="0.254" layer="94"/>
<wire x1="1.524" y1="7.366" x2="2.286" y2="7.366" width="0.254" layer="94"/>
<wire x1="1.524" y1="7.366" x2="0.762" y2="7.366" width="0.254" layer="94"/>
<wire x1="0.762" y1="7.366" x2="1.524" y2="6.604" width="0.254" layer="94"/>
<wire x1="1.524" y1="6.604" x2="2.286" y2="7.366" width="0.254" layer="94"/>
<wire x1="0.762" y1="6.35" x2="2.286" y2="6.35" width="0.254" layer="94"/>
<wire x1="1.524" y1="6.35" x2="1.524" y2="2.54" width="0.254" layer="94"/>
<wire x1="1.524" y1="2.54" x2="0" y2="2.54" width="0.254" layer="94"/>
<wire x1="12.7" y1="22.86" x2="10.922" y2="22.86" width="0.254" layer="94"/>
<wire x1="10.922" y1="22.86" x2="10.922" y2="21.336" width="0.254" layer="94"/>
<wire x1="10.922" y1="21.336" x2="9.652" y2="20.066" width="0.254" layer="94"/>
<wire x1="9.652" y1="20.066" x2="9.652" y2="17.78" width="0.254" layer="94"/>
<wire x1="9.652" y1="17.78" x2="10.922" y2="16.51" width="0.254" layer="94"/>
<wire x1="10.922" y1="16.51" x2="10.922" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.922" y1="15.24" x2="12.7" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.922" y1="16.51" x2="10.922" y2="17.272" width="0.254" layer="94"/>
<wire x1="10.922" y1="17.272" x2="10.922" y2="17.526" width="0.254" layer="94"/>
<wire x1="10.922" y1="17.526" x2="10.16" y2="16.764" width="0.254" layer="94"/>
<wire x1="10.16" y1="16.764" x2="9.906" y2="16.51" width="0.254" layer="94"/>
<wire x1="9.906" y1="16.51" x2="10.668" y2="16.51" width="0.254" layer="94"/>
<wire x1="10.668" y1="16.51" x2="10.922" y2="16.51" width="0.254" layer="94"/>
<wire x1="10.922" y1="16.51" x2="10.922" y2="16.764" width="0.254" layer="94"/>
<wire x1="10.922" y1="16.764" x2="10.668" y2="17.018" width="0.254" layer="94"/>
<wire x1="10.668" y1="17.018" x2="10.414" y2="16.764" width="0.254" layer="94"/>
<wire x1="10.16" y1="16.764" x2="10.414" y2="16.764" width="0.254" layer="94"/>
<wire x1="10.414" y1="16.764" x2="10.668" y2="16.51" width="0.254" layer="94"/>
<wire x1="10.668" y1="16.51" x2="10.668" y2="17.018" width="0.254" layer="94"/>
<wire x1="10.668" y1="17.018" x2="10.922" y2="17.272" width="0.254" layer="94"/>
<wire x1="9.652" y1="17.78" x2="9.652" y2="17.526" width="0.254" layer="94"/>
<wire x1="9.652" y1="20.066" x2="9.652" y2="20.32" width="0.254" layer="94"/>
<wire x1="12.7" y1="10.16" x2="10.922" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.922" y1="10.16" x2="10.922" y2="8.636" width="0.254" layer="94"/>
<wire x1="10.922" y1="8.636" x2="9.652" y2="7.366" width="0.254" layer="94"/>
<wire x1="9.652" y1="7.366" x2="9.652" y2="5.08" width="0.254" layer="94"/>
<wire x1="9.652" y1="5.08" x2="10.922" y2="3.81" width="0.254" layer="94"/>
<wire x1="10.922" y1="3.81" x2="10.922" y2="2.54" width="0.254" layer="94"/>
<wire x1="10.922" y1="2.54" x2="12.7" y2="2.54" width="0.254" layer="94"/>
<wire x1="10.922" y1="3.81" x2="10.922" y2="4.572" width="0.254" layer="94"/>
<wire x1="10.922" y1="4.572" x2="10.922" y2="4.826" width="0.254" layer="94"/>
<wire x1="10.922" y1="4.826" x2="10.16" y2="4.064" width="0.254" layer="94"/>
<wire x1="10.16" y1="4.064" x2="9.906" y2="3.81" width="0.254" layer="94"/>
<wire x1="9.906" y1="3.81" x2="10.668" y2="3.81" width="0.254" layer="94"/>
<wire x1="10.668" y1="3.81" x2="10.922" y2="3.81" width="0.254" layer="94"/>
<wire x1="10.922" y1="3.81" x2="10.922" y2="4.064" width="0.254" layer="94"/>
<wire x1="10.922" y1="4.064" x2="10.668" y2="4.318" width="0.254" layer="94"/>
<wire x1="10.668" y1="4.318" x2="10.414" y2="4.064" width="0.254" layer="94"/>
<wire x1="10.16" y1="4.064" x2="10.414" y2="4.064" width="0.254" layer="94"/>
<wire x1="10.414" y1="4.064" x2="10.668" y2="3.81" width="0.254" layer="94"/>
<wire x1="10.668" y1="3.81" x2="10.668" y2="4.318" width="0.254" layer="94"/>
<wire x1="10.668" y1="4.318" x2="10.922" y2="4.572" width="0.254" layer="94"/>
<wire x1="9.652" y1="5.08" x2="9.652" y2="4.826" width="0.254" layer="94"/>
<wire x1="9.652" y1="7.366" x2="9.652" y2="7.62" width="0.254" layer="94"/>
<wire x1="6.096" y1="19.05" x2="5.588" y2="19.05" width="0.2032" layer="94"/>
<wire x1="5.588" y1="19.05" x2="6.858" y2="17.78" width="0.2032" layer="94"/>
<wire x1="6.858" y1="17.78" x2="6.858" y2="18.542" width="0.2032" layer="94"/>
<wire x1="6.858" y1="17.78" x2="6.096" y2="17.78" width="0.2032" layer="94"/>
<wire x1="4.826" y1="20.32" x2="6.096" y2="19.05" width="0.2032" layer="94"/>
<wire x1="6.35" y1="6.35" x2="5.842" y2="6.35" width="0.2032" layer="94"/>
<wire x1="5.842" y1="6.35" x2="7.112" y2="5.08" width="0.2032" layer="94"/>
<wire x1="7.112" y1="5.08" x2="7.112" y2="5.842" width="0.2032" layer="94"/>
<wire x1="7.112" y1="5.08" x2="6.35" y2="5.08" width="0.2032" layer="94"/>
<wire x1="5.08" y1="7.62" x2="6.35" y2="6.35" width="0.2032" layer="94"/>
<text x="1.524" y="26.162" size="1.778" layer="94">&gt;NAME</text>
<text x="1.27" y="-2.54" size="1.778" layer="94">&gt;VALUE</text>
<pin name="C2" x="-5.08" y="2.54" length="middle"/>
<pin name="A2" x="-5.08" y="10.16" length="middle"/>
<pin name="C1" x="-5.08" y="15.24" length="middle"/>
<pin name="A1" x="-5.08" y="22.86" length="middle"/>
<pin name="ET2" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="CT2" x="17.78" y="10.16" length="middle" rot="R180"/>
<pin name="ET1" x="17.78" y="15.24" length="middle" rot="R180"/>
<pin name="CT1" x="17.78" y="22.86" length="middle" rot="R180"/>
</symbol>
<symbol name="IRF7507">
<wire x1="2.54" y1="15.24" x2="2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.54" x2="17.78" y2="2.54" width="0.254" layer="94"/>
<wire x1="17.78" y1="2.54" x2="17.78" y2="15.24" width="0.254" layer="94"/>
<wire x1="17.78" y1="15.24" x2="2.54" y2="15.24" width="0.254" layer="94"/>
<pin name="S1" x="-2.54" y="12.7" length="middle"/>
<pin name="G1" x="-2.54" y="10.16" length="middle"/>
<pin name="S2" x="-2.54" y="7.62" length="middle"/>
<pin name="G2" x="-2.54" y="5.08" length="middle"/>
<pin name="D2@5" x="22.86" y="5.08" length="middle" rot="R180"/>
<pin name="D2@6" x="22.86" y="7.62" length="middle" rot="R180"/>
<pin name="D1@7" x="22.86" y="10.16" length="middle" rot="R180"/>
<pin name="D1@8" x="22.86" y="12.7" length="middle" rot="R180"/>
</symbol>
<symbol name="TVS">
<wire x1="-1.27" y1="-0.508" x2="-2.54" y2="2.032" width="0.254" layer="94"/>
<wire x1="-2.54" y1="2.032" x2="-3.81" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-3.81" y1="2.032" x2="-2.54" y2="2.032" width="0.254" layer="94"/>
<wire x1="-3.81" y1="-0.508" x2="-2.54" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-0.508" x2="-1.27" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-2.54" y1="2.032" x2="-1.27" y2="2.032" width="0.254" layer="94"/>
<wire x1="-3.81" y1="2.032" x2="-3.81" y2="2.54" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.032" x2="-1.27" y2="1.524" width="0.254" layer="94"/>
<wire x1="3.81" y1="-0.508" x2="2.54" y2="2.032" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.032" x2="1.27" y2="-0.508" width="0.254" layer="94"/>
<wire x1="1.27" y1="2.032" x2="2.54" y2="2.032" width="0.254" layer="94"/>
<wire x1="1.27" y1="-0.508" x2="2.54" y2="-0.508" width="0.254" layer="94"/>
<wire x1="2.54" y1="-0.508" x2="3.81" y2="-0.508" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.032" x2="3.81" y2="2.032" width="0.254" layer="94"/>
<wire x1="1.27" y1="2.032" x2="1.27" y2="2.54" width="0.254" layer="94"/>
<wire x1="3.81" y1="2.032" x2="3.81" y2="1.524" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="5.08" y2="5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="5.08" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="-2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="2.032" x2="-2.54" y2="3.81" width="0.254" layer="94"/>
<wire x1="-2.54" y1="3.81" x2="0" y2="3.81" width="0.254" layer="94"/>
<wire x1="0" y1="3.81" x2="2.54" y2="3.81" width="0.254" layer="94"/>
<wire x1="2.54" y1="3.81" x2="2.54" y2="2.032" width="0.254" layer="94"/>
<wire x1="0" y1="3.81" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="-0.508" width="0.254" layer="94"/>
<text x="-20.32" y="10.6426" size="1.778" layer="95">&gt;NAME</text>
<text x="-20.32" y="7.8486" size="1.778" layer="96">&gt;VALUE</text>
<pin name="A1" x="-2.54" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
<pin name="C" x="0" y="7.62" visible="off" length="short" direction="pas" rot="R270"/>
<pin name="A2" x="2.54" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
</symbol>
<symbol name="MOC3031-M">
<wire x1="-5.08" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="2.54" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-5.08" y2="5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="-5.08" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-4.826" y1="2.54" x2="-2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="2.54" x2="-2.54" y2="-0.254" width="0.254" layer="94"/>
<wire x1="-4.064" y1="-0.254" x2="-1.016" y2="-0.254" width="0.254" layer="94"/>
<wire x1="-1.016" y1="-0.254" x2="-2.54" y2="-1.778" width="0.254" layer="94"/>
<wire x1="-4.064" y1="-0.254" x2="-2.54" y2="-1.778" width="0.254" layer="94"/>
<wire x1="-4.064" y1="-1.778" x2="-1.016" y2="-1.778" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.032" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="1.27" y1="-0.254" x2="4.064" y2="-0.254" width="0.254" layer="94"/>
<wire x1="4.064" y1="-0.254" x2="4.318" y2="-0.254" width="0.254" layer="94"/>
<wire x1="4.318" y1="-0.254" x2="2.794" y2="-1.778" width="0.254" layer="94"/>
<wire x1="1.27" y1="-0.254" x2="2.794" y2="-1.778" width="0.254" layer="94"/>
<wire x1="1.27" y1="-1.778" x2="4.064" y2="-1.778" width="0.254" layer="94"/>
<wire x1="4.064" y1="-1.778" x2="4.318" y2="-1.778" width="0.254" layer="94"/>
<wire x1="6.604" y1="-1.778" x2="4.064" y2="-1.778" width="0.254" layer="94"/>
<wire x1="4.064" y1="-1.778" x2="3.556" y2="-1.778" width="0.254" layer="94"/>
<wire x1="3.556" y1="-1.778" x2="5.08" y2="-0.254" width="0.254" layer="94"/>
<wire x1="6.604" y1="-1.778" x2="5.08" y2="-0.254" width="0.254" layer="94"/>
<wire x1="6.604" y1="-0.254" x2="4.064" y2="-0.254" width="0.254" layer="94"/>
<wire x1="4.064" y1="-0.254" x2="3.556" y2="-0.254" width="0.254" layer="94"/>
<wire x1="-0.254" y1="0.254" x2="0.508" y2="-0.508" width="0.2032" layer="94"/>
<wire x1="0.508" y1="0" x2="0.508" y2="-0.508" width="0.2032" layer="94"/>
<wire x1="0.508" y1="-0.508" x2="0" y2="-0.508" width="0.2032" layer="94"/>
<wire x1="-0.254" y1="-0.508" x2="0.508" y2="-1.27" width="0.2032" layer="94"/>
<wire x1="0.508" y1="-0.762" x2="0.508" y2="-1.27" width="0.2032" layer="94"/>
<wire x1="0.508" y1="-1.27" x2="0" y2="-1.27" width="0.2032" layer="94"/>
<wire x1="7.62" y1="2.54" x2="4.064" y2="2.54" width="0.2032" layer="94"/>
<wire x1="4.064" y1="2.54" x2="4.064" y2="-0.254" width="0.2032" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="4.064" y2="-5.08" width="0.2032" layer="94"/>
<wire x1="4.064" y1="-5.08" x2="4.064" y2="-1.778" width="0.2032" layer="94"/>
<text x="-5.334" y="5.842" size="1.778" layer="94">MOC3031-M</text>
<text x="-3.302" y="-10.16" size="1.778" layer="94">&gt;NAME</text>
<pin name="1" x="-10.16" y="2.54" visible="pad" length="middle"/>
<pin name="2" x="-10.16" y="-5.08" visible="pad" length="middle"/>
<pin name="6" x="12.7" y="2.54" visible="pad" length="middle" rot="R180"/>
<pin name="4" x="12.7" y="-5.08" visible="pad" length="middle" rot="R180"/>
</symbol>
<symbol name="MOSFET-NCHANNEL">
<wire x1="-3.6576" y1="2.413" x2="-3.6576" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="1.905" x2="-2.0066" y2="1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="-1.905" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="1.905" x2="2.54" y2="1.905" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-1.905" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.905" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-3.81" y1="0" x2="-5.08" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="0" x2="-0.762" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="-0.508" x2="-0.762" y2="0.508" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="0.508" x2="-2.032" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="0" x2="0" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="0.254" x2="-1.778" y2="0" width="0.3048" layer="94"/>
<wire x1="-1.778" y1="0" x2="-0.889" y2="-0.254" width="0.3048" layer="94"/>
<wire x1="-0.889" y1="-0.254" x2="-0.889" y2="0" width="0.3048" layer="94"/>
<wire x1="-0.889" y1="0" x2="-1.143" y2="0" width="0.3048" layer="94"/>
<wire x1="2.54" y1="1.905" x2="2.54" y2="0.762" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0.762" x2="1.905" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="1.905" y1="-0.635" x2="3.175" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="3.175" y1="-0.635" x2="2.54" y2="0.762" width="0.1524" layer="94"/>
<wire x1="1.905" y1="0.762" x2="2.54" y2="0.762" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0.762" x2="3.175" y2="0.762" width="0.1524" layer="94"/>
<wire x1="3.175" y1="0.762" x2="3.429" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.905" y1="0.762" x2="1.651" y2="0.508" width="0.1524" layer="94"/>
<circle x="0" y="-1.905" radius="0.127" width="0.4064" layer="94"/>
<circle x="0" y="1.905" radius="0.127" width="0.4064" layer="94"/>
<text x="5.08" y="2.54" size="1.778" layer="95">&gt;NAME</text>
<text x="5.08" y="0" size="1.778" layer="96">&gt;VALUE</text>
<text x="-1.27" y="2.54" size="0.8128" layer="93">D</text>
<text x="-1.27" y="-3.556" size="0.8128" layer="93">S</text>
<text x="-5.08" y="-1.27" size="0.8128" layer="93">G</text>
<rectangle x1="-2.794" y1="-2.54" x2="-2.032" y2="-1.27" layer="94"/>
<rectangle x1="-2.794" y1="1.27" x2="-2.032" y2="2.54" layer="94"/>
<rectangle x1="-2.794" y1="-0.889" x2="-2.032" y2="0.889" layer="94"/>
<pin name="G" x="-7.62" y="0" visible="off" length="short" direction="pas"/>
<pin name="D" x="0" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
<pin name="S" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
</symbol>
<symbol name="IRF9410">
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="-7.62" y2="0" width="0.254" layer="94"/>
<wire x1="-7.62" y1="0" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="-2.54" x2="7.62" y2="0" width="0.254" layer="94"/>
<wire x1="7.62" y1="0" x2="7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="2.54" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="0" width="0.254" layer="94"/>
<wire x1="-7.62" y1="0" x2="-5.08" y2="0" width="0.254" layer="94"/>
<wire x1="-5.08" y1="0" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="2.54" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="0" width="0.254" layer="94"/>
<wire x1="7.62" y1="0" x2="5.08" y2="0" width="0.254" layer="94"/>
<wire x1="5.08" y1="0" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="-2.54" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-1.524" y1="1.27" x2="-1.524" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-1.524" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.524" width="0.254" layer="94"/>
<wire x1="0" y1="1.524" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="0" y2="-3.302" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="1.524" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="1.524" x2="1.778" y2="1.524" width="0.254" layer="94"/>
<wire x1="1.778" y1="1.524" x2="1.778" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.54" x2="2.794" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.794" y1="2.54" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.794" y1="2.54" x2="1.778" y2="2.54" width="0.254" layer="94"/>
<wire x1="1.524" y1="-2.54" x2="1.27" y2="-2.032" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.032" x2="1.27" y2="-2.794" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.794" x2="1.524" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.524" y1="-2.54" x2="1.524" y2="-5.08" width="0.254" layer="94"/>
<wire x1="1.524" y1="-5.08" x2="-3.048" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-3.048" y1="-5.08" x2="-3.048" y2="0.254" width="0.254" layer="94"/>
<wire x1="-3.048" y1="0.254" x2="-4.826" y2="0.254" width="0.254" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-2.286" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-2.286" y1="-1.016" x2="-2.286" y2="-4.064" width="0.254" layer="94"/>
<wire x1="-2.286" y1="-4.064" x2="-5.588" y2="-4.064" width="0.254" layer="94"/>
<wire x1="-5.588" y1="-4.064" x2="-5.588" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.588" y1="-5.08" x2="-7.366" y2="-5.08" width="0.254" layer="94"/>
<text x="-7.62" y="-10.16" size="1.778" layer="96">&gt;Value</text>
<text x="-7.62" y="5.842" size="1.778" layer="95">&gt;Name</text>
<pin name="S@1" x="-12.7" y="2.54" visible="pad" length="middle"/>
<pin name="S@2" x="-12.7" y="0" visible="pad" length="middle"/>
<pin name="S@3" x="-12.7" y="-2.54" visible="pad" length="middle"/>
<pin name="G" x="-12.7" y="-5.08" visible="pad" length="middle"/>
<pin name="D@1" x="12.7" y="-5.08" visible="pad" length="middle" rot="R180"/>
<pin name="D@2" x="12.7" y="-2.54" visible="pad" length="middle" rot="R180"/>
<pin name="D@3" x="12.7" y="0" visible="pad" length="middle" rot="R180"/>
<pin name="D@4" x="12.7" y="2.54" visible="pad" length="middle" rot="R180"/>
</symbol>
<symbol name="MOSFET-PCHANNEL">
<wire x1="-3.6576" y1="2.413" x2="-3.6576" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="1.905" x2="-2.0066" y2="1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="-1.905" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="1.905" x2="2.54" y2="1.905" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-1.905" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.905" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-1.905" x2="2.54" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-0.762" x2="2.54" y2="1.905" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-0.762" x2="3.175" y2="0.635" width="0.1524" layer="94"/>
<wire x1="3.175" y1="0.635" x2="1.905" y2="0.635" width="0.1524" layer="94"/>
<wire x1="1.905" y1="0.635" x2="2.54" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="3.175" y1="-0.762" x2="2.54" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-0.762" x2="1.905" y2="-0.762" width="0.1524" layer="94"/>
<wire x1="1.905" y1="-0.762" x2="1.651" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="3.175" y1="-0.762" x2="3.429" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="-1.27" y2="0.508" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="0.508" x2="-1.27" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="-0.508" x2="0" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.143" y1="0" x2="-2.032" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.143" y1="-0.254" x2="-0.254" y2="0" width="0.3048" layer="94"/>
<wire x1="-0.254" y1="0" x2="-1.143" y2="0.254" width="0.3048" layer="94"/>
<wire x1="-1.143" y1="0.254" x2="-1.143" y2="0" width="0.3048" layer="94"/>
<wire x1="-1.143" y1="0" x2="-0.889" y2="0" width="0.3048" layer="94"/>
<wire x1="-3.81" y1="0" x2="-5.08" y2="0" width="0.1524" layer="94"/>
<circle x="0" y="-1.905" radius="0.127" width="0.4064" layer="94"/>
<circle x="0" y="1.905" radius="0.127" width="0.4064" layer="94"/>
<text x="5.08" y="2.54" size="1.778" layer="95">&gt;NAME</text>
<text x="5.08" y="0" size="1.778" layer="96">&gt;VALUE</text>
<text x="-1.27" y="2.54" size="0.8128" layer="93">D</text>
<text x="-1.27" y="-3.556" size="0.8128" layer="93">S</text>
<text x="-5.08" y="-1.27" size="0.8128" layer="93">G</text>
<rectangle x1="-2.794" y1="-2.54" x2="-2.032" y2="-1.27" layer="94"/>
<rectangle x1="-2.794" y1="1.27" x2="-2.032" y2="2.54" layer="94"/>
<rectangle x1="-2.794" y1="-0.889" x2="-2.032" y2="0.889" layer="94"/>
<pin name="G" x="-7.62" y="0" visible="off" length="short" direction="pas"/>
<pin name="D" x="0" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
<pin name="S" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
</symbol>
<symbol name="NDS8434-1">
<wire x1="-7.62" y1="5.08" x2="5.08" y2="5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="5.08" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="0" width="0.254" layer="94"/>
<wire x1="5.08" y1="0" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="-7.62" width="0.254" layer="94"/>
<wire x1="5.08" y1="-7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="0" width="0.254" layer="94"/>
<wire x1="-7.62" y1="0" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-3.81" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-3.81" y1="-5.08" x2="-3.81" y2="1.27" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.54" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="5.08" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="0" y2="-5.08" width="0.254" layer="94"/>
<wire x1="0" y1="-5.08" x2="0" y2="-3.302" width="0.254" layer="94"/>
<wire x1="0" y1="-3.302" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="1.27" y2="-1.524" width="0.254" layer="94"/>
<wire x1="1.27" y1="-1.524" x2="0.508" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0.508" y1="-1.524" x2="1.27" y2="-0.762" width="0.254" layer="94"/>
<wire x1="1.27" y1="-0.762" x2="2.032" y2="-1.524" width="0.254" layer="94"/>
<wire x1="2.032" y1="-1.524" x2="1.27" y2="-1.524" width="0.254" layer="94"/>
<wire x1="2.032" y1="-0.508" x2="1.27" y2="-0.508" width="0.254" layer="94"/>
<wire x1="1.27" y1="-0.508" x2="0.508" y2="-0.508" width="0.254" layer="94"/>
<wire x1="1.27" y1="-0.508" x2="1.27" y2="1.524" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.524" x2="0" y2="1.524" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-2.286" x2="0" y2="-1.27" width="0.254" layer="94"/>
<wire x1="0" y1="-1.27" x2="-1.27" y2="-0.254" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-0.254" x2="-1.27" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-0.508" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-2.286" width="0.254" layer="94"/>
<wire x1="0" y1="-1.27" x2="0" y2="0.762" width="0.254" layer="94"/>
<wire x1="0" y1="0.762" x2="0" y2="2.54" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="0" x2="-5.08" y2="0" width="0.254" layer="94"/>
<wire x1="-5.08" y1="0" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="0" width="0.254" layer="94"/>
<wire x1="-2.54" y1="1.27" x2="-2.54" y2="0.762" width="0.254" layer="94"/>
<wire x1="-2.54" y1="0.762" x2="-2.54" y2="0" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="-2.032" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="-3.302" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-3.302" x2="-2.54" y2="-3.81" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-3.302" x2="0" y2="-3.302" width="0.254" layer="94"/>
<wire x1="-2.54" y1="0.762" x2="0" y2="0.762" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-0.254" y1="-1.27" x2="-1.27" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-0.3556" y1="-1.397" x2="-1.1176" y2="-0.8382" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-1.4986" x2="-1.143" y2="-1.0414" width="0.254" layer="94"/>
<wire x1="-0.6096" y1="-1.6256" x2="-1.1176" y2="-1.2954" width="0.254" layer="94"/>
<wire x1="-0.7874" y1="-1.7272" x2="-1.0922" y2="-1.5494" width="0.254" layer="94"/>
<wire x1="-0.9144" y1="-1.8796" x2="-1.1176" y2="-1.7526" width="0.254" layer="94"/>
<wire x1="-1.0414" y1="-2.0066" x2="-1.1684" y2="-1.9304" width="0.254" layer="94"/>
<wire x1="1.7018" y1="-1.3462" x2="0.9144" y2="-1.3462" width="0.254" layer="94"/>
<wire x1="1.524" y1="-1.1684" x2="1.0922" y2="-1.1684" width="0.254" layer="94"/>
<wire x1="1.3716" y1="-0.9906" x2="1.2192" y2="-0.9906" width="0.254" layer="94"/>
<text x="-7.62" y="5.588" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<pin name="D@1" x="7.62" y="-5.08" visible="off" length="short" rot="R180"/>
<pin name="D@2" x="7.62" y="-2.54" visible="off" length="short" rot="R180"/>
<pin name="D@3" x="7.62" y="0" visible="off" length="short" rot="R180"/>
<pin name="D@4" x="7.62" y="2.54" visible="off" length="short" rot="R180"/>
<pin name="G" x="-10.16" y="-5.08" visible="off" length="short"/>
<pin name="S@1" x="-10.16" y="2.54" visible="off" length="short"/>
<pin name="S@2" x="-10.16" y="0" visible="off" length="short"/>
<pin name="S@3" x="-10.16" y="-2.54" visible="off" length="short"/>
</symbol>
<symbol name="OPTOTRIAC_ZC">
<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="2.54" width="0.4064" layer="94"/>
<wire x1="7.62" y1="2.54" x2="7.62" y2="-2.54" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-2.54" x2="7.62" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="-2.54" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="-2.54" x2="-7.62" y2="2.54" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="-7.62" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-6.35" y1="-1.016" x2="-5.08" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-1.016" x2="-3.81" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-1.016" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-1.016" x2="-5.08" y2="1.016" width="0.254" layer="94"/>
<wire x1="1.778" y1="-1.016" x2="3.048" y2="-1.016" width="0.254" layer="94"/>
<wire x1="3.048" y1="-1.016" x2="4.318" y2="-1.016" width="0.254" layer="94"/>
<wire x1="3.048" y1="-1.016" x2="3.048" y2="1.016" width="0.254" layer="94"/>
<wire x1="6.858" y1="1.016" x2="5.588" y2="1.016" width="0.254" layer="94"/>
<wire x1="5.588" y1="1.016" x2="4.318" y2="1.016" width="0.254" layer="94"/>
<wire x1="5.588" y1="1.016" x2="5.588" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="1.016" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-7.62" y2="-2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="2.54" x2="4.318" y2="2.54" width="0.254" layer="94"/>
<wire x1="7.62" y1="-2.54" x2="4.318" y2="-2.54" width="0.254" layer="94"/>
<wire x1="4.318" y1="-2.54" x2="4.318" y2="-1.524" width="0.254" layer="94"/>
<wire x1="4.318" y1="1.016" x2="4.318" y2="2.54" width="0.254" layer="94"/>
<wire x1="4.318" y1="-1.524" x2="4.318" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-2.032" y1="-1.016" x2="-2.032" y2="-3.302" width="0.254" layer="94"/>
<wire x1="-2.032" y1="-3.302" x2="1.016" y2="-3.302" width="0.254" layer="94"/>
<wire x1="1.016" y1="-3.302" x2="1.016" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.016" y1="-2.54" x2="1.016" y2="-1.778" width="0.254" layer="94"/>
<wire x1="1.016" y1="-1.778" x2="1.016" y2="-1.016" width="0.254" layer="94"/>
<wire x1="1.016" y1="-1.016" x2="-0.508" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-1.016" x2="-2.032" y2="-1.016" width="0.254" layer="94"/>
<wire x1="4.318" y1="2.54" x2="-0.508" y2="2.54" width="0.254" layer="94"/>
<wire x1="-0.508" y1="2.54" x2="-0.508" y2="0" width="0.254" layer="94"/>
<wire x1="-0.508" y1="0" x2="-0.508" y2="-1.016" width="0.254" layer="94"/>
<wire x1="4.318" y1="-2.54" x2="1.016" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-3.302" y1="0.762" x2="-1.524" y2="2.032" width="0.254" layer="94"/>
<wire x1="-1.524" y1="2.032" x2="-2.286" y2="2.032" width="0.254" layer="94"/>
<wire x1="-1.524" y1="2.032" x2="-1.778" y2="1.27" width="0.254" layer="94"/>
<wire x1="-3.048" y1="-0.508" x2="-1.27" y2="0.762" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0.762" x2="-2.032" y2="0.762" width="0.254" layer="94"/>
<wire x1="-1.27" y1="0.762" x2="-1.524" y2="0" width="0.254" layer="94"/>
<wire x1="3.048" y1="-1.016" x2="2.54" y2="-1.778" width="0.254" layer="94"/>
<wire x1="2.54" y1="-1.778" x2="1.016" y2="-1.778" width="0.254" layer="94"/>
<text x="-7.62" y="-7.62" size="1.778" layer="96">&gt;VALUE</text>
<text x="-7.62" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<text x="-1.524" y="-2.794" size="1.27" layer="94" ratio="15">ZC</text>
<pin name="A" x="-12.7" y="2.54" visible="pad" length="middle"/>
<pin name="K" x="-12.7" y="-2.54" visible="pad" length="middle"/>
<pin name="T2" x="12.7" y="-2.54" visible="pad" length="middle" rot="R180"/>
<pin name="T1" x="12.7" y="2.54" visible="pad" length="middle" rot="R180"/>
<polygon width="0.254" layer="94">
<vertex x="-6.35" y="1.016"/>
<vertex x="-5.08" y="-1.016"/>
<vertex x="-3.81" y="1.016"/>
</polygon>
<polygon width="0.254" layer="94">
<vertex x="1.778" y="1.016"/>
<vertex x="3.048" y="-1.016"/>
<vertex x="4.318" y="1.016"/>
</polygon>
<polygon width="0.254" layer="94">
<vertex x="6.858" y="-1.016"/>
<vertex x="5.588" y="1.016"/>
<vertex x="4.318" y="-1.016"/>
</polygon>
</symbol>
<symbol name="NDS8434">
<wire x1="-7.62" y1="10.16" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="-10.16" x2="-7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<pin name="S@1" x="-12.7" y="7.62" length="middle"/>
<pin name="S@2" x="-12.7" y="2.54" length="middle"/>
<pin name="S@3" x="-12.7" y="-2.54" length="middle"/>
<pin name="G" x="-12.7" y="-7.62" length="middle"/>
<pin name="D@1" x="12.7" y="-7.62" length="middle" rot="R180"/>
<pin name="D@2" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="D@3" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="D@4" x="12.7" y="7.62" length="middle" rot="R180"/>
</symbol>
<symbol name="OPTO_DARLINGTON_6N138-39">
<wire x1="-5.08" y1="-10.16" x2="7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="-10.16" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-5.08" y2="5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-7.62" x2="-5.08" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-3.302" y2="2.54" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="2.54" x2="-3.302" y2="-1.778" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="-1.778" x2="-2.286" y2="-1.778" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="-1.778" x2="-4.318" y2="-1.778" width="0.2032" layer="94"/>
<wire x1="-4.318" y1="-1.778" x2="-3.302" y2="-2.794" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="-2.794" x2="-2.286" y2="-1.778" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="-2.794" x2="-2.286" y2="-2.794" width="0.2032" layer="94"/>
<wire x1="-4.318" y1="-2.794" x2="-3.302" y2="-2.794" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="-2.794" x2="-3.302" y2="-7.62" width="0.2032" layer="94"/>
<wire x1="-3.302" y1="-7.62" x2="-5.08" y2="-7.62" width="0.2032" layer="94"/>
<text x="-5.842" y="6.35" size="1.778" layer="94">OPTO DARL</text>
<text x="-3.556" y="-13.208" size="1.778" layer="94">&gt;VALUE</text>
<pin name="C" x="-10.16" y="-7.62" length="middle"/>
<pin name="A" x="-10.16" y="2.54" length="middle"/>
<pin name="VCC" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="VOUT" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="GND" x="12.7" y="-7.62" length="middle" rot="R180"/>
</symbol>
<symbol name="TCMT1103">
<wire x1="-7.62" y1="-5.08" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-3.556" y1="2.54" x2="-1.27" y2="2.54" width="0.254" layer="94"/>
<wire x1="-3.556" y1="-2.54" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-1.27" y1="2.54" x2="0.254" y2="1.016" width="0.254" layer="94"/>
<wire x1="0.254" y1="-1.016" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0.254" y1="1.524" x2="0.254" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0.508" y1="1.524" x2="0.508" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0.508" y1="-1.524" x2="0.254" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0.508" y1="1.524" x2="0.254" y2="1.524" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-2.54" x2="-0.762" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-2.032" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-2.032" x2="-0.762" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.842" y1="2.54" x2="3.81" y2="2.54" width="0.254" layer="94"/>
<wire x1="3.81" y1="2.54" x2="3.81" y2="-0.508" width="0.254" layer="94"/>
<wire x1="3.81" y1="-0.508" x2="3.81" y2="-2.54" width="0.254" layer="94"/>
<wire x1="3.81" y1="-2.54" x2="5.842" y2="-2.54" width="0.254" layer="94"/>
<wire x1="3.81" y1="-0.508" x2="4.064" y2="-0.254" width="0.254" layer="94"/>
<wire x1="4.064" y1="-0.254" x2="4.572" y2="0.254" width="0.254" layer="94"/>
<wire x1="4.572" y1="0.254" x2="4.826" y2="0.508" width="0.254" layer="94"/>
<wire x1="3.81" y1="-0.508" x2="3.556" y2="-0.254" width="0.254" layer="94"/>
<wire x1="3.556" y1="-0.254" x2="2.794" y2="0.508" width="0.254" layer="94"/>
<wire x1="4.826" y1="0.508" x2="4.318" y2="0.508" width="0.254" layer="94"/>
<wire x1="4.318" y1="0.508" x2="2.794" y2="0.508" width="0.254" layer="94"/>
<wire x1="2.794" y1="0.508" x2="3.048" y2="0.508" width="0.254" layer="94"/>
<wire x1="3.048" y1="0.508" x2="3.302" y2="0.254" width="0.254" layer="94"/>
<wire x1="3.302" y1="0.254" x2="3.556" y2="0" width="0.254" layer="94"/>
<wire x1="3.556" y1="0" x2="4.064" y2="0" width="0.254" layer="94"/>
<wire x1="4.064" y1="0" x2="4.318" y2="0.254" width="0.254" layer="94"/>
<wire x1="4.318" y1="0.254" x2="3.556" y2="0.254" width="0.254" layer="94"/>
<wire x1="3.302" y1="0.254" x2="4.318" y2="0.254" width="0.254" layer="94"/>
<wire x1="4.318" y1="0.508" x2="4.318" y2="0.254" width="0.254" layer="94"/>
<wire x1="4.318" y1="0.254" x2="4.572" y2="0.254" width="0.254" layer="94"/>
<wire x1="4.064" y1="-0.254" x2="3.556" y2="-0.254" width="0.254" layer="94"/>
<wire x1="2.794" y1="-0.508" x2="4.826" y2="-0.508" width="0.254" layer="94"/>
<wire x1="2.286" y1="0" x2="1.524" y2="0.762" width="0.254" layer="94"/>
<wire x1="1.524" y1="0.762" x2="1.524" y2="0.254" width="0.254" layer="94"/>
<wire x1="1.524" y1="0.762" x2="2.032" y2="0.762" width="0.254" layer="94"/>
<wire x1="2.286" y1="-1.016" x2="1.524" y2="-0.254" width="0.254" layer="94"/>
<wire x1="1.524" y1="-0.254" x2="1.524" y2="-0.762" width="0.254" layer="94"/>
<wire x1="1.524" y1="-0.254" x2="2.032" y2="-0.254" width="0.254" layer="94"/>
<text x="-1.27" y="5.842" size="1.778" layer="94">&gt;NAME</text>
<text x="-5.08" y="-7.62" size="1.778" layer="94">&gt;VALUE</text>
<pin name="C" x="-12.7" y="2.54" length="middle"/>
<pin name="E" x="-12.7" y="-2.54" length="middle"/>
<pin name="K" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="A" x="15.24" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="TRIAC">
<wire x1="-2.54" y1="-1.27" x2="-1.27" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="-1.27" x2="0" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.27" x2="1.27" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="1.27" y1="-1.27" x2="2.54" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="0" y2="0" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="1.27" y2="0" width="0.1524" layer="94"/>
<wire x1="1.27" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="-1.27" x2="-2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="-1.27" x2="0" y2="0" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.27" x2="1.27" y2="0" width="0.1524" layer="94"/>
<wire x1="1.27" y1="0" x2="2.54" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.27" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="1.27" y2="-1.27" width="0.1524" layer="94"/>
<text x="2.54" y="2.54" size="1.27" layer="95">&gt;NAME</text>
<text x="2.54" y="-5.08" size="1.27" layer="96">&gt;VALUE</text>
<pin name="M2" x="0" y="2.54" visible="off" length="short" rot="R270"/>
<pin name="M1" x="0" y="-5.08" visible="off" length="short" rot="R90"/>
<pin name="G" x="5.08" y="-2.54" visible="off" length="short" rot="R180"/>
</symbol>
<symbol name="SCHOTTKY_BRIDGE">
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="-1.27" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.905" y1="1.27" x2="1.27" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="1.27" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="-1.27" x2="0.635" y2="-1.27" width="0.254" layer="94"/>
<wire x1="3.81" y1="1.27" x2="3.81" y2="-1.27" width="0.254" layer="94"/>
<wire x1="3.81" y1="-1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="3.81" y2="1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="1.905" y1="1.27" x2="1.905" y2="1.016" width="0.254" layer="94"/>
<wire x1="0.635" y1="-1.016" x2="0.635" y2="-1.27" width="0.254" layer="94"/>
<text x="-1.27" y="1.905" size="1.778" layer="95">&gt;NAME</text>
<text x="-1.27" y="-3.429" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" rot="R180"/>
</symbol>
<symbol name="V18ZA2P">
<wire x1="-5.08" y1="2.54" x2="5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="5.08" y1="2.54" x2="-5.08" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="5.08" x2="0" y2="2.54" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
<pin name="P$1" x="-10.16" y="0" length="middle"/>
<pin name="P$2" x="10.16" y="0" length="middle" rot="R180"/>
</symbol>
<symbol name="VARISTOR">
<wire x1="-2.54" y1="1.016" x2="2.54" y2="1.016" width="0.1524" layer="94"/>
<wire x1="2.54" y1="1.016" x2="2.54" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-1.016" x2="-2.54" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-1.016" x2="-2.54" y2="1.016" width="0.1524" layer="94"/>
<wire x1="2.54" y1="1.524" x2="1.524" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-1.524" x2="1.524" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-1.524" x2="-1.524" y2="-1.524" width="0.1524" layer="94"/>
<text x="-3.81" y="1.7526" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.81" y="-3.556" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="XN04312">
<wire x1="-7.62" y1="7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="0" width="0.254" layer="94"/>
<wire x1="7.62" y1="0" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-5.08" x2="-1.27" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="-3.81" x2="0" y2="-3.81" width="0.254" layer="94"/>
<wire x1="0" y1="-3.81" x2="1.27" y2="-3.81" width="0.254" layer="94"/>
<wire x1="1.27" y1="-3.81" x2="1.778" y2="-3.81" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="1.27" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="2.286" y2="-4.318" width="0.1524" layer="94"/>
<wire x1="2.286" y1="-4.318" x2="1.778" y2="-4.826" width="0.1524" layer="94"/>
<wire x1="1.778" y1="-4.826" x2="2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="4.064" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="4.064" y1="-5.08" x2="7.62" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="7.62" y1="0" x2="6.604" y2="0" width="0.1524" layer="94"/>
<wire x1="6.604" y1="0" x2="6.35" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="6.35" y1="-0.508" x2="6.096" y2="0.508" width="0.1524" layer="94"/>
<wire x1="6.096" y1="0.508" x2="5.842" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="5.842" y1="-0.508" x2="5.588" y2="0.508" width="0.1524" layer="94"/>
<wire x1="5.588" y1="0.508" x2="5.334" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="5.334" y1="-0.508" x2="5.08" y2="0.508" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0.508" x2="4.826" y2="0" width="0.1524" layer="94"/>
<wire x1="4.826" y1="0" x2="4.064" y2="0" width="0.1524" layer="94"/>
<wire x1="4.064" y1="0" x2="1.27" y2="0" width="0.1524" layer="94"/>
<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="1.27" y1="-1.27" x2="0" y2="-1.27" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.27" x2="0" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="4.064" y1="0" x2="4.064" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="4.064" y1="-1.524" x2="4.572" y2="-1.778" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-1.778" x2="3.556" y2="-2.032" width="0.1524" layer="94"/>
<wire x1="3.556" y1="-2.032" x2="4.572" y2="-2.286" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-2.286" x2="3.556" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="3.556" y1="-2.54" x2="4.572" y2="-2.794" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-2.794" x2="3.556" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="3.556" y1="-3.048" x2="4.064" y2="-3.302" width="0.1524" layer="94"/>
<wire x1="4.064" y1="-3.302" x2="4.064" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="7.62" y1="5.08" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
<wire x1="1.778" y1="3.81" x2="1.27" y2="3.81" width="0.254" layer="94"/>
<wire x1="1.27" y1="3.81" x2="0" y2="3.81" width="0.254" layer="94"/>
<wire x1="0" y1="3.81" x2="-1.27" y2="3.81" width="0.254" layer="94"/>
<wire x1="-1.27" y1="3.81" x2="-2.032" y2="3.81" width="0.254" layer="94"/>
<wire x1="2.54" y1="5.08" x2="1.27" y2="3.81" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="3.81" x2="-2.54" y2="5.08" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="3.81" x2="-1.524" y2="4.572" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="4.572" x2="-2.032" y2="4.064" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="4.064" x2="-1.27" y2="3.81" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="5.08" x2="-4.064" y2="5.08" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="5.08" x2="-7.62" y2="5.08" width="0.1524" layer="94"/>
<wire x1="-7.62" y1="0" x2="-6.604" y2="0" width="0.1524" layer="94"/>
<wire x1="-6.604" y1="0" x2="-6.35" y2="0.508" width="0.1524" layer="94"/>
<wire x1="-6.35" y1="0.508" x2="-6.096" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="-6.096" y1="-0.508" x2="-5.842" y2="0.508" width="0.1524" layer="94"/>
<wire x1="-5.842" y1="0.508" x2="-5.588" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="-5.588" y1="-0.508" x2="-5.334" y2="0.508" width="0.1524" layer="94"/>
<wire x1="-5.334" y1="0.508" x2="-5.08" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="-0.508" x2="-4.826" y2="0" width="0.1524" layer="94"/>
<wire x1="-4.826" y1="0" x2="-4.064" y2="0" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="0" x2="-1.27" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="1.27" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="0" x2="-4.064" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="3.302" x2="-3.556" y2="3.048" width="0.1524" layer="94"/>
<wire x1="-3.556" y1="3.048" x2="-4.572" y2="2.794" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="2.794" x2="-3.556" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-3.556" y1="2.54" x2="-4.572" y2="2.286" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="2.286" x2="-3.556" y2="2.032" width="0.1524" layer="94"/>
<wire x1="-3.556" y1="2.032" x2="-4.572" y2="1.778" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="1.778" x2="-4.064" y2="1.524" width="0.1524" layer="94"/>
<wire x1="-4.064" y1="3.302" x2="-4.064" y2="5.08" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="1.27" x2="0" y2="1.27" width="0.1524" layer="94"/>
<wire x1="0" y1="1.27" x2="0" y2="3.81" width="0.1524" layer="94"/>
<text x="-7.62" y="8.382" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<pin name="E2" x="-10.16" y="5.08" visible="off" length="short"/>
<pin name="B2" x="-10.16" y="0" visible="off" length="short"/>
<pin name="C1" x="-10.16" y="-5.08" visible="off" length="short"/>
<pin name="E1" x="10.16" y="-5.08" visible="off" length="short" rot="R180"/>
<pin name="B1" x="10.16" y="0" visible="off" length="short" rot="R180"/>
<pin name="C2" x="10.16" y="5.08" visible="off" length="short" rot="R180"/>
</symbol>
<symbol name="IRF7509_NMOS">
<pin name="G1" x="0" y="0" visible="off" length="middle"/>
<pin name="S1" x="12.7" y="-5.08" visible="off" length="middle" rot="R90"/>
<pin name="D1" x="12.7" y="12.7" visible="off" length="middle" rot="R270"/>
<wire x1="5.08" y1="0" x2="5.08" y2="7.62" width="0.1524" layer="94"/>
<wire x1="7.62" y1="4.572" x2="7.62" y2="3.81" width="0.1524" layer="94"/>
<wire x1="7.62" y1="3.81" x2="7.62" y2="3.048" width="0.1524" layer="94"/>
<wire x1="7.62" y1="2.032" x2="7.62" y2="1.016" width="0.1524" layer="94"/>
<wire x1="7.62" y1="1.016" x2="7.62" y2="0" width="0.1524" layer="94"/>
<wire x1="7.62" y1="7.62" x2="7.62" y2="6.604" width="0.1524" layer="94"/>
<wire x1="7.62" y1="6.604" x2="7.62" y2="5.588" width="0.1524" layer="94"/>
<wire x1="7.62" y1="3.81" x2="8.382" y2="3.556" width="0.1524" layer="94"/>
<wire x1="8.382" y1="3.556" x2="8.382" y2="3.81" width="0.1524" layer="94"/>
<wire x1="8.382" y1="3.81" x2="8.382" y2="4.064" width="0.1524" layer="94"/>
<wire x1="8.382" y1="4.064" x2="7.62" y2="3.81" width="0.1524" layer="94"/>
<wire x1="7.62" y1="1.016" x2="9.652" y2="1.016" width="0.1524" layer="94"/>
<wire x1="9.652" y1="1.016" x2="9.652" y2="3.81" width="0.1524" layer="94"/>
<wire x1="9.652" y1="3.81" x2="8.382" y2="3.81" width="0.1524" layer="94"/>
<wire x1="12.7" y1="3.302" x2="12.7" y2="1.016" width="0.1524" layer="94"/>
<wire x1="12.7" y1="1.016" x2="9.652" y2="1.016" width="0.1524" layer="94"/>
<wire x1="7.62" y1="6.604" x2="12.7" y2="6.604" width="0.1524" layer="94"/>
<wire x1="12.7" y1="6.604" x2="12.7" y2="4.572" width="0.1524" layer="94"/>
<wire x1="12.7" y1="4.572" x2="11.938" y2="3.302" width="0.1524" layer="94"/>
<wire x1="11.938" y1="3.302" x2="12.7" y2="3.302" width="0.1524" layer="94"/>
<wire x1="12.7" y1="3.302" x2="13.462" y2="3.302" width="0.1524" layer="94"/>
<wire x1="13.462" y1="3.302" x2="12.7" y2="4.572" width="0.1524" layer="94"/>
<wire x1="12.7" y1="4.572" x2="13.462" y2="4.572" width="0.1524" layer="94"/>
<wire x1="12.7" y1="4.572" x2="11.938" y2="4.572" width="0.1524" layer="94"/>
<wire x1="12.7" y1="7.62" x2="12.7" y2="6.604" width="0.1524" layer="94"/>
<wire x1="12.7" y1="0" x2="12.7" y2="1.016" width="0.1524" layer="94"/>
</symbol>
<symbol name="IRF7509_PMOS">
<pin name="G2" x="0" y="0" visible="off" length="middle"/>
<pin name="S2" x="12.7" y="5.08" visible="off" length="middle" rot="R270"/>
<pin name="D2" x="12.7" y="-12.7" visible="off" length="middle" rot="R90"/>
<wire x1="5.08" y1="0" x2="5.08" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-4.572" x2="7.62" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-3.81" x2="7.62" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-2.032" x2="7.62" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-1.016" x2="7.62" y2="0" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-6.604" x2="7.62" y2="-5.588" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-1.016" x2="9.652" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="9.652" y1="-1.016" x2="9.652" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-3.302" x2="12.7" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-1.016" x2="9.652" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="7.62" y1="-6.604" x2="12.7" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-6.604" x2="12.7" y2="-4.572" width="0.1524" layer="94"/>
<wire x1="11.938" y1="-3.302" x2="12.7" y2="-3.302" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-3.302" x2="13.462" y2="-3.302" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-4.572" x2="13.462" y2="-4.572" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-4.572" x2="11.938" y2="-4.572" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-7.62" x2="12.7" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="12.7" y1="0" x2="12.7" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="12.7" y1="-3.302" x2="11.938" y2="-4.572" width="0.1524" layer="94"/>
<wire x1="13.462" y1="-4.572" x2="12.7" y2="-3.302" width="0.1524" layer="94"/>
<wire x1="9.652" y1="-3.81" x2="8.89" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="8.89" y1="-3.556" x2="8.89" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="8.89" y1="-3.81" x2="8.89" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="8.89" y1="-4.064" x2="9.652" y2="-3.81" width="0.1524" layer="94"/>
<wire x1="8.89" y1="-3.81" x2="7.62" y2="-3.81" width="0.1524" layer="94"/>
</symbol>
<symbol name="MOSFET-NCHANNEL-1">
<circle x="0" y="-1.905" radius="0.127" width="0.4064" layer="94"/>
<circle x="0" y="1.905" radius="0.127" width="0.4064" layer="94"/>
<rectangle x1="-2.794" y1="-2.54" x2="-2.032" y2="-1.27" layer="94"/>
<rectangle x1="-2.794" y1="1.27" x2="-2.032" y2="2.54" layer="94"/>
<rectangle x1="-2.794" y1="-0.889" x2="-2.032" y2="0.889" layer="94"/>
<wire x1="-3.6576" y1="2.413" x2="-3.6576" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="1.905" x2="-2.0066" y2="1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="-1.905" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="1.905" x2="2.54" y2="1.905" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-1.905" x2="0" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.905" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-3.81" y1="0" x2="-5.08" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="0" x2="-0.762" y2="-0.508" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="-0.508" x2="-0.762" y2="0.508" width="0.1524" layer="94"/>
<wire x1="-0.762" y1="0.508" x2="-2.032" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="0" x2="0" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="0.254" x2="-1.778" y2="0" width="0.3048" layer="94"/>
<wire x1="-1.778" y1="0" x2="-0.889" y2="-0.254" width="0.3048" layer="94"/>
<wire x1="-0.889" y1="-0.254" x2="-0.889" y2="0" width="0.3048" layer="94"/>
<wire x1="-0.889" y1="0" x2="-1.143" y2="0" width="0.3048" layer="94"/>
<wire x1="2.54" y1="1.905" x2="2.54" y2="0.762" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0.762" x2="1.905" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="1.905" y1="-0.635" x2="3.175" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="3.175" y1="-0.635" x2="2.54" y2="0.762" width="0.1524" layer="94"/>
<wire x1="1.905" y1="0.762" x2="2.54" y2="0.762" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0.762" x2="3.175" y2="0.762" width="0.1524" layer="94"/>
<wire x1="3.175" y1="0.762" x2="3.429" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.905" y1="0.762" x2="1.651" y2="0.508" width="0.1524" layer="94"/>
<pin name="D" x="0" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
<pin name="G" x="-7.62" y="0" visible="off" length="short" direction="pas"/>
<pin name="S" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
<text x="5.08" y="2.54" size="1.778" layer="95">&gt;NAME</text>
<text x="5.08" y="0" size="1.778" layer="96">&gt;VALUE</text>
<text x="-1.27" y="2.54" size="0.8128" layer="93">D</text>
<text x="-1.27" y="-3.556" size="0.8128" layer="93">S</text>
<text x="-5.08" y="-1.27" size="0.8128" layer="93">G</text>
</symbol>
<symbol name="N-MOSFET-G2DS-D">
<wire x1="-2.54" y1="-2.54" x2="-1.2192" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="0.762" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-0.762" width="0.254" layer="94"/>
<wire x1="0" y1="3.683" x2="0" y2="2.54" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.397" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="-1.397" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="0" y2="-3.683" width="0.254" layer="94"/>
<wire x1="-1.143" y1="2.54" x2="-1.143" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="2.54" y2="2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.54" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="3.81" y1="2.54" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
<wire x1="3.81" y1="0.508" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="3.81" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.54" x2="3.81" y2="2.54" width="0.1524" layer="94"/>
<wire x1="4.572" y1="0.762" x2="4.318" y2="0.508" width="0.1524" layer="94"/>
<wire x1="4.318" y1="0.508" x2="3.81" y2="0.508" width="0.1524" layer="94"/>
<wire x1="3.81" y1="0.508" x2="3.302" y2="0.508" width="0.1524" layer="94"/>
<wire x1="3.302" y1="0.508" x2="3.048" y2="0.254" width="0.1524" layer="94"/>
<circle x="2.54" y="-2.54" radius="0.3592" width="0" layer="94"/>
<circle x="2.54" y="2.54" radius="0.3592" width="0" layer="94"/>
<text x="-11.43" y="0" size="1.778" layer="96">&gt;VALUE</text>
<text x="-11.43" y="2.54" size="1.778" layer="95">&gt;NAME</text>
<pin name="D" x="2.54" y="5.08" visible="off" length="point" direction="pas" rot="R180"/>
<pin name="S" x="2.54" y="-7.62" visible="off" length="middle" direction="pas" rot="R90"/>
<pin name="G" x="-5.08" y="-2.54" visible="off" length="short" direction="pas"/>
<pin name="D1" x="2.54" y="7.62" visible="off" length="short" direction="pas" rot="R270"/>
<polygon width="0.1524" layer="94">
<vertex x="3.81" y="0.508"/>
<vertex x="3.302" y="-0.254"/>
<vertex x="4.318" y="-0.254"/>
</polygon>
<polygon width="0.1524" layer="94">
<vertex x="0.254" y="0"/>
<vertex x="1.27" y="0.762"/>
<vertex x="1.27" y="-0.762"/>
</polygon>
</symbol>
</symbols>
<devicesets>
<deviceset name="BAV99" prefix="D" uservalue="yes">
<description>Two small signal silicon diodes connected anode to cathode.&lt;br&gt;
Connections to all three nodes available.&lt;br&gt;
DIO-10647</description>
<gates>
<gate name="G$1" symbol="BAV99" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23">
<connects>
<connect gate="G$1" pin="A1" pad="1"/>
<connect gate="G$1" pin="C2" pad="2"/>
<connect gate="G$1" pin="COM" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-10647"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="BC847PN">
<description>NPN/PNP transistor pair in SOT-363 package</description>
<gates>
<gate name="G1" symbol="PNP" x="0" y="15.24"/>
<gate name="G2" symbol="NPN" x="0" y="-15.24"/>
</gates>
<devices>
<device name="" package="SOT363">
<connects>
<connect gate="G1" pin="B" pad="2"/>
<connect gate="G1" pin="C" pad="6"/>
<connect gate="G1" pin="E" pad="1"/>
<connect gate="G2" pin="B" pad="5"/>
<connect gate="G2" pin="C" pad="3"/>
<connect gate="G2" pin="E" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="CNZ1120">
<description>LED-to-NPN optoisolator</description>
<gates>
<gate name="G$1" symbol="CNZ1120" x="0" y="-2.54"/>
</gates>
<devices>
<device name="PTH" package="CNZ1120">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DIODE-SCHOTTKY" prefix="D">
<description>Commonly MBRA140.</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="0" y="0"/>
</gates>
<devices>
<device name="_" package="SMA-DIODE">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="" package="SOD-523">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DIODE-ZENER">
<description>Zener Diode
Production Part - 8199
3.4V Zener Voltage</description>
<gates>
<gate name="G$1" symbol="DIODE-ZENER" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="DIODE-ZENER">
<connects>
<connect gate="G$1" pin="A" pad="P$2"/>
<connect gate="G$1" pin="C" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMB" package="SMB-DIODE">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-BZT52" package="SOD-323">
<connects>
<connect gate="G$1" pin="A" pad="2"/>
<connect gate="G$1" pin="C" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="GP1A57HR">
<description>Optoisolator with 15k built-in bias resistor.</description>
<gates>
<gate name="G$1" symbol="GP1A57HR" x="0" y="-5.08"/>
</gates>
<devices>
<device name="" package="GP1A57HR">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ILD213T" prefix="IC">
<description>Dual optoisolator.</description>
<gates>
<gate name="G$1" symbol="ILD213T" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="A1" pad="1"/>
<connect gate="G$1" pin="A2" pad="3"/>
<connect gate="G$1" pin="C1" pad="2"/>
<connect gate="G$1" pin="C2" pad="4"/>
<connect gate="G$1" pin="CT1" pad="6"/>
<connect gate="G$1" pin="CT2" pad="8"/>
<connect gate="G$1" pin="ET1" pad="5"/>
<connect gate="G$1" pin="ET2" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MOC3063*" prefix="U" uservalue="yes">
<description>&lt;b&gt;Optotriac in DIP and SMD&lt;/b&gt;
&lt;p&gt;
LED:&lt;br&gt;
Vf: 1.2V&lt;br&gt;
If: 5 mA&lt;br&gt;
&lt;p&gt;
TRIAC&lt;br&gt;
Vdrm: 600V&lt;br&gt;
Itsm: 1A&lt;br&gt;
Viso: 5000V&lt;br&gt;
DV/dt: 1500V/us&lt;br&gt;
&lt;p&gt;
DIP: MOC3063&lt;br&gt;
SMD: MOC3063S</description>
<gates>
<gate name="G$1" symbol="OPTOTRIAC_ZC" x="0" y="0"/>
</gates>
<devices>
<device name="S" package="DIP8SMD">
<connects>
<connect gate="G$1" pin="A" pad="1"/>
<connect gate="G$1" pin="K" pad="2"/>
<connect gate="G$1" pin="T1" pad="6"/>
<connect gate="G$1" pin="T2" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MMBZ27VCLT1">
<description>40W Zener-diode transient voltage suppressor (ESD protection)</description>
<gates>
<gate name="G$1" symbol="TVS" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-3">
<connects>
<connect gate="G$1" pin="A1" pad="1"/>
<connect gate="G$1" pin="A2" pad="2"/>
<connect gate="G$1" pin="C" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MMDT3904">
<description>Dual NPN transistor</description>
<gates>
<gate name="G$1" symbol="NPN" x="0" y="12.7"/>
<gate name="G$2" symbol="NPN" x="0" y="-12.7"/>
</gates>
<devices>
<device name="" package="SOT363">
<connects>
<connect gate="G$1" pin="B" pad="5"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="4"/>
<connect gate="G$2" pin="B" pad="2"/>
<connect gate="G$2" pin="C" pad="6"/>
<connect gate="G$2" pin="E" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MOC3031-M">
<description>Opto-isolated TRIAC</description>
<gates>
<gate name="G$1" symbol="MOC3031-M" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DIL06">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="6" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MOSFET-PCHANNEL" prefix="Q">
<description>Generic PMOSFET</description>
<gates>
<gate name="G$1" symbol="MOSFET-PCHANNEL" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SOT23-3">
<connects>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="IRLML2244" package="SOT23-3">
<connects>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-11153"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MOSFET-PCHANNEL-SOIC8">
<description>Generic 8-pin PMOSFET</description>
<gates>
<gate name="G$1" symbol="NDS8434-1" x="0" y="0"/>
</gates>
<devices>
<device name="SOIC8" package="SO08">
<connects>
<connect gate="G$1" pin="D@1" pad="5"/>
<connect gate="G$1" pin="D@2" pad="6"/>
<connect gate="G$1" pin="D@3" pad="7"/>
<connect gate="G$1" pin="D@4" pad="8"/>
<connect gate="G$1" pin="G" pad="4"/>
<connect gate="G$1" pin="S@1" pad="1"/>
<connect gate="G$1" pin="S@2" pad="2"/>
<connect gate="G$1" pin="S@3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="NDS8434">
<description>8-SOIC NMOSFET</description>
<gates>
<gate name="G$1" symbol="NDS8434" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="D@1" pad="7"/>
<connect gate="G$1" pin="D@2" pad="8"/>
<connect gate="G$1" pin="D@3" pad="6"/>
<connect gate="G$1" pin="D@4" pad="5"/>
<connect gate="G$1" pin="G" pad="4"/>
<connect gate="G$1" pin="S@1" pad="1"/>
<connect gate="G$1" pin="S@2" pad="2"/>
<connect gate="G$1" pin="S@3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="OPTO_DARL_6N138S">
<description>Optoisolator, darlington pair output</description>
<gates>
<gate name="G$1" symbol="OPTO_DARLINGTON_6N138-39" x="0" y="0"/>
</gates>
<devices>
<device name="" package="8-SMD">
<connects>
<connect gate="G$1" pin="A" pad="2"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="GND" pad="5"/>
<connect gate="G$1" pin="VCC" pad="8"/>
<connect gate="G$1" pin="VOUT" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TCMT1103-OPTO">
<description>Optoisolator- NPN output</description>
<gates>
<gate name="G$1" symbol="TCMT1103" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SSOP-4">
<connects>
<connect gate="G$1" pin="A" pad="1"/>
<connect gate="G$1" pin="C" pad="4"/>
<connect gate="G$1" pin="E" pad="3"/>
<connect gate="G$1" pin="K" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRANSISTOR_NPN" prefix="Q" uservalue="yes">
<description>&lt;b&gt;Generic NPN BJT&lt;/b&gt; &lt;P&gt;
MMBT2222A - TRANS-08049 (SOT-23, 1A 40V)&lt;br&gt;
MPSA42 - TRANS-09116 (SOT-23, 500mA 300V)&lt;br&gt;
MMBT5088LT1G - TRANS-11160 (SOT-23, 50 mA 30V)&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="NPN" x="0" y="0"/>
</gates>
<devices>
<device name="SOT23" package="SOT23">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SOT23-3" package="SOT23-3">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TO92" package="TO-92">
<connects>
<connect gate="G$1" pin="B" pad="2"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="&quot;" package="SOT223">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="2"/>
<connect gate="G$1" pin="E" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SOT89" package="SOT89">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="2"/>
<connect gate="G$1" pin="E" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TO-92-AMMO" package="TO-92-AMMO">
<connects>
<connect gate="G$1" pin="B" pad="2"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="MMBT2222A" package="SOT23">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-08049"/>
<attribute name="VALUE" value="MMBT2222A" constant="no"/>
</technology>
</technologies>
</device>
<device name="MPSA42" package="SOT23">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-09116"/>
<attribute name="VALUE" value="MPSA42" constant="no"/>
</technology>
</technologies>
</device>
<device name="MMBT5088" package="SOT23">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-11160"/>
<attribute name="VALUE" value="MMBT5088" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRANSISTOR_NPN_2">
<description>Alternate TO-92 NPN BJT</description>
<gates>
<gate name="G$1" symbol="NPN" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="TO-92">
<connects>
<connect gate="G$1" pin="B" pad="2"/>
<connect gate="G$1" pin="C" pad="1"/>
<connect gate="G$1" pin="E" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRANSISTOR_PNP" prefix="Q" uservalue="yes">
<description>&lt;h3&gt;Generic PNP BJT&lt;/h3&gt; &lt;P&gt;
 Double check pinouts against datasheets- not all devices are the same!&lt;br&gt;
MMBT3906 - 40V 200mA SOT-23 (TRANS-08052)&lt;br&gt;
MMBT4403 - 40V 600mA SOT-23 (TRANS-09245)</description>
<gates>
<gate name="G$1" symbol="PNP" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SOT23-3">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TO92" package="TO-92">
<connects>
<connect gate="G$1" pin="B" pad="2"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="" package="SOT89">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="2"/>
<connect gate="G$1" pin="E" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="MMBT3906" package="SOT23">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-08052"/>
<attribute name="VALUE" value="MMBT3906"/>
</technology>
</technologies>
</device>
<device name="MMBT4403" package="SOT23">
<connects>
<connect gate="G$1" pin="B" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
<connect gate="G$1" pin="E" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-09245"/>
<attribute name="VALUE" value="MMBT4403"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRIAC">
<description>Low-power generic TRIAC packages</description>
<gates>
<gate name="G$1" symbol="TRIAC" x="0" y="2.54"/>
</gates>
<devices>
<device name="PTH" package="TO-92">
<connects>
<connect gate="G$1" pin="G" pad="2"/>
<connect gate="G$1" pin="M1" pad="1"/>
<connect gate="G$1" pin="M2" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="SOT223">
<connects>
<connect gate="G$1" pin="G" pad="3"/>
<connect gate="G$1" pin="M1" pad="1"/>
<connect gate="G$1" pin="M2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TVS">
<description>Transient voltage suppressor- prevents ESD on inputs.&lt;br&gt;
Ignore package description- MBRA140 is NOT this type of part!!!</description>
<gates>
<gate name="G$1" symbol="SCHOTTKY_BRIDGE" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SMA-DIODE">
<connects>
<connect gate="G$1" pin="1" pad="A"/>
<connect gate="G$1" pin="2" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V-REFERENCE">
<description>Zener diode</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SOT23-3">
<connects>
<connect gate="G$1" pin="A" pad="2"/>
<connect gate="G$1" pin="C" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V18ZA2P">
<description>Varistor</description>
<gates>
<gate name="G$1" symbol="V18ZA2P" x="-2.54" y="0"/>
</gates>
<devices>
<device name="" package="V18ZA2P">
<connects>
<connect gate="G$1" pin="P$1" pad="P$1"/>
<connect gate="G$1" pin="P$2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="VARISTOR" prefix="Z" uservalue="yes">
<description>&lt;h3&gt;Varistor&lt;/h3&gt;
Varistor (Variable resistor) is a nonlinear resistive element of the
voltage dependence that resistance changes with applied voltage.
Varistor is equivalent with Zener diode of two series connection.</description>
<gates>
<gate name="G$1" symbol="VARISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="-0603" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-0402" package="0402-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="XN04312">
<description>&lt;b&gt;NPN/PNP Transistor Array&lt;/b&gt;
Handy dandy transistor array for level shifting and inverting signals. Spark Fun Electronics SKU : COM-00588</description>
<gates>
<gate name="G$1" symbol="XN04312" x="0" y="0"/>
</gates>
<devices>
<device name="SOT" package="SOT23-6">
<connects>
<connect gate="G$1" pin="B1" pad="5"/>
<connect gate="G$1" pin="B2" pad="2"/>
<connect gate="G$1" pin="C1" pad="1"/>
<connect gate="G$1" pin="C2" pad="4"/>
<connect gate="G$1" pin="E1" pad="6"/>
<connect gate="G$1" pin="E2" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DIODE" prefix="D" uservalue="yes">
<description>&lt;b&gt;Diode&lt;/b&gt;
These are standard reverse protection diodes and small signal diodes. SMA package can handle up to about 1A. SOD-323 can handle about 200mA. What the SOD-323 package when ordering, there are some mfgs out there that are 5-pin packages.</description>
<gates>
<gate name="G$1" symbol="DIODE" x="0" y="0"/>
</gates>
<devices>
<device name="SMA" package="SMA-DIODE">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH" package="DIODE-1N4001">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SOD" package="SOD-323">
<connects>
<connect gate="G$1" pin="A" pad="2"/>
<connect gate="G$1" pin="C" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09646" constant="no"/>
</technology>
</technologies>
</device>
<device name="SOT23" package="SOT23-3">
<connects>
<connect gate="G$1" pin="A" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1N4148" package="DIODE-1N4148">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMB" package="SMB-DIODE">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="HV" package="DIODE-HV">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMA-ALT" package="SMA-DIODE_ALT">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMA-KIT" package="SMA-DIODE-KIT">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SOD523" package="SOD523">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMC/DO-214AB" package="SMC">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MOSFET-NCHANNEL" prefix="Q">
<description>&lt;B&gt;Common NMOSFET Parts&lt;/b&gt;&lt;p&gt;
&lt;table border = "1"&gt;
&lt;tr&gt;&lt;th&gt;MFG P/N&lt;/th&gt;&lt;th&gt;Store ID&lt;/th&gt;&lt;th&gt;Prod ID&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FDD8780&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;TRANS-09984&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;SI7820DN&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;TRANS-11055&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FDS6630A&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;IC-08089&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2N7002PW&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;TRANS-11151&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FQP30N06L&lt;/td&gt;  &lt;td&gt;COM-10213&lt;/td&gt;&lt;td&gt;TRANS-10060&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BSS123LT1G&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;TRANS-08345&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BSS138&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;TRANS-00830&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BS170&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2N7000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
<gates>
<gate name="G$1" symbol="MOSFET-NCHANNEL-1" x="0" y="0"/>
</gates>
<devices>
<device name="FDD8780" package="DPAK">
<connects>
<connect gate="G$1" pin="D" pad="4"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-09984"/>
</technology>
</technologies>
</device>
<device name="SI7820DN" package="POWERPAK1212-8">
<connects>
<connect gate="G$1" pin="D" pad="D1 D2 D3 D4 DPAD"/>
<connect gate="G$1" pin="G" pad="G"/>
<connect gate="G$1" pin="S" pad="S1 S2 S3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-11055"/>
</technology>
</technologies>
</device>
<device name="FDS6630A" package="SO08">
<connects>
<connect gate="G$1" pin="D" pad="5 6 7 8"/>
<connect gate="G$1" pin="G" pad="4"/>
<connect gate="G$1" pin="S" pad="1 2 3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-08089"/>
</technology>
</technologies>
</device>
<device name="2N7002PW" package="SOT323">
<connects>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-11151"/>
</technology>
</technologies>
</device>
<device name="FQP30N06L" package="TO220V">
<connects>
<connect gate="G$1" pin="D" pad="2"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-10060"/>
</technology>
</technologies>
</device>
<device name="BSS123LT1G" package="SOT23">
<connects>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-08345"/>
</technology>
</technologies>
</device>
<device name="BSS138" package="SOT23">
<connects>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="G" pad="1"/>
<connect gate="G$1" pin="S" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-00830"/>
</technology>
</technologies>
</device>
<device name="BS170" package="TO-92">
<connects>
<connect gate="G$1" pin="D" pad="1"/>
<connect gate="G$1" pin="G" pad="2"/>
<connect gate="G$1" pin="S" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2N7000" package="TO-92">
<connects>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="G" pad="2"/>
<connect gate="G$1" pin="S" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="IRF7509" prefix="Q" uservalue="yes">
<description>30V Dual PMOS/NMOS MSOP-8&lt;BR&gt;
NMOS RDS .11-ohm&lt;BR&gt;
PMOS RDS .20-ohm&lt;BR&gt;
TRANS-07913</description>
<gates>
<gate name="NMOS" symbol="MOSFET-NCHANNEL" x="-2.54" y="0"/>
<gate name="PMOS" symbol="MOSFET-PCHANNEL" x="-2.54" y="-20.32"/>
</gates>
<devices>
<device name="" package="MSOP8">
<connects>
<connect gate="NMOS" pin="D" pad="7 8"/>
<connect gate="NMOS" pin="G" pad="2"/>
<connect gate="NMOS" pin="S" pad="1"/>
<connect gate="PMOS" pin="D" pad="5 6"/>
<connect gate="PMOS" pin="G" pad="4"/>
<connect gate="PMOS" pin="S" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-07913"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MBRA140" prefix="D">
<description>40V, 1A Schottky rectifier&lt;br&gt;
SMA/DO-214AC package&lt;br&gt;
DIO-08053</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SMA-DIODE">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-08053"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="B340A" prefix="D" uservalue="yes">
<description>Schottky Diode&lt;br&gt;
3A-40V</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SMA-DIODE">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09886"/>
<attribute name="VALUE" value="BA340A"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RB751" prefix="D" uservalue="yes">
<description>40V 120mA SOD-523 Schottky&lt;br&gt;
DIO-11018</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOD-523">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-11018"/>
<attribute name="VALUE" value="RB751" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MOSFET-NCHANNEL_DUAL" prefix="Q">
<description>&lt;b&gt;Dual N-Channel 30-V (D-S) MOSFET&lt;/b&gt;&lt;BR&gt;
FDMA1024NZ&lt;br&gt;
TRANS-09516&lt;br&gt;
http://www.vishay.com/docs/71053/71053.pdf</description>
<gates>
<gate name="A" symbol="N-MOSFET-G2DS-D" x="0" y="10.16"/>
<gate name="B" symbol="N-MOSFET-G2DS-D" x="0" y="-10.16"/>
</gates>
<devices>
<device name="FDMA1024NZ" package="MICROFET_2X2">
<connects>
<connect gate="A" pin="D" pad="D1"/>
<connect gate="A" pin="D1" pad="D1_2"/>
<connect gate="A" pin="G" pad="G1"/>
<connect gate="A" pin="S" pad="S1"/>
<connect gate="B" pin="D" pad="D2"/>
<connect gate="B" pin="D1" pad="D2_2"/>
<connect gate="B" pin="G" pad="G2"/>
<connect gate="B" pin="S" pad="S2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-09516"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRANSISTOR_NPN2UP">
<description>&lt;H3&gt;2-up package of NPN transistors&lt;/h3&gt;&lt;P&gt;
MMDT3904- TRANS-09373 (SOT-363, 200mA 40V)&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="NPN" x="0" y="0"/>
<gate name="G$2" symbol="NPN" x="20.32" y="0"/>
</gates>
<devices>
<device name="MMDT3904" package="SOT363">
<connects>
<connect gate="G$1" pin="B" pad="2"/>
<connect gate="G$1" pin="C" pad="6"/>
<connect gate="G$1" pin="E" pad="1"/>
<connect gate="G$2" pin="B" pad="5"/>
<connect gate="G$2" pin="C" pad="3"/>
<connect gate="G$2" pin="E" pad="4"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="TRANS-09373"/>
<attribute name="VALUE" value="MMDT3904" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="BAT20JFILM" prefix="D" uservalue="yes">
<description>23V, 1A Schottky diode, SOD-323 package</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="-2.54" y="2.54"/>
</gates>
<devices>
<device name="" package="SOD-323">
<connects>
<connect gate="G$1" pin="A" pad="2"/>
<connect gate="G$1" pin="C" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-11623"/>
<attribute name="VALUE" value="BAT20JFILM"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ZLLS500" prefix="D" uservalue="yes">
<description>700mA 40V SOT-23 Schottky</description>
<gates>
<gate name="G$1" symbol="DIODE-SCHOTTKY" x="0" y="0"/>
</gates>
<devices>
<device name="ZLLS500" package="SOT23">
<connects>
<connect gate="G$1" pin="A" pad="1"/>
<connect gate="G$1" pin="C" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-08411"/>
<attribute name="VALUE" value="ZLLS500"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Displays.lbr.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.05" unitdist="inch" unit="inch" style="lines" multiple="1" display="yes" altdistance="0.001" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="16" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="14" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find all manner of display devices- LED displays, LCD displays, etc.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="ALPHANUMERIC">
<wire x1="-11.43" y1="16.51" x2="11.43" y2="16.51" width="0.2032" layer="21"/>
<wire x1="11.43" y1="16.51" x2="11.43" y2="-16.51" width="0.2032" layer="21"/>
<wire x1="11.43" y1="-16.51" x2="-11.43" y2="-16.51" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="-16.51" x2="-11.43" y2="16.51" width="0.2032" layer="21"/>
<wire x1="-4.826" y1="11.684" x2="-3.429" y2="10.16" width="0.2032" layer="21"/>
<wire x1="-3.429" y1="10.16" x2="-4.445" y2="1.143" width="0.2032" layer="21"/>
<wire x1="-4.445" y1="1.143" x2="-5.334" y2="0.127" width="0.2032" layer="21"/>
<wire x1="-5.334" y1="0.127" x2="-6.477" y2="0.127" width="0.2032" layer="21"/>
<wire x1="-6.477" y1="0.127" x2="-5.334" y2="10.795" width="0.2032" layer="21"/>
<wire x1="-5.334" y1="10.795" x2="-4.826" y2="11.684" width="0.2032" layer="21"/>
<wire x1="-4.445" y1="12.065" x2="-3.175" y2="10.795" width="0.2032" layer="21"/>
<wire x1="-3.175" y1="10.795" x2="-0.127" y2="10.795" width="0.2032" layer="21"/>
<wire x1="-0.127" y1="10.795" x2="0.889" y2="11.811" width="0.2032" layer="21"/>
<wire x1="0.889" y1="11.811" x2="0.889" y2="12.7" width="0.2032" layer="21"/>
<wire x1="0.889" y1="12.7" x2="-3.81" y2="12.7" width="0.2032" layer="21"/>
<wire x1="-3.81" y1="12.7" x2="-4.445" y2="12.065" width="0.2032" layer="21"/>
<wire x1="1.397" y1="12.7" x2="1.397" y2="11.684" width="0.2032" layer="21"/>
<wire x1="1.397" y1="11.684" x2="2.286" y2="10.795" width="0.2032" layer="21"/>
<wire x1="2.286" y1="10.795" x2="5.588" y2="10.795" width="0.2032" layer="21"/>
<wire x1="5.588" y1="10.795" x2="6.477" y2="11.938" width="0.2032" layer="21"/>
<wire x1="6.477" y1="11.938" x2="6.096" y2="12.7" width="0.2032" layer="21"/>
<wire x1="6.096" y1="12.7" x2="1.397" y2="12.7" width="0.2032" layer="21"/>
<wire x1="4.445" y1="1.016" x2="5.207" y2="0" width="0.2032" layer="21"/>
<wire x1="5.207" y1="0" x2="6.35" y2="0" width="0.2032" layer="21"/>
<wire x1="6.35" y1="0" x2="7.62" y2="10.541" width="0.2032" layer="21"/>
<wire x1="7.62" y1="10.541" x2="6.985" y2="11.684" width="0.2032" layer="21"/>
<wire x1="6.223" y1="-0.762" x2="4.953" y2="-11.176" width="0.2032" layer="21"/>
<wire x1="4.953" y1="-11.176" x2="4.318" y2="-11.557" width="0.2032" layer="21"/>
<wire x1="4.318" y1="-11.557" x2="3.175" y2="-10.668" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-10.668" x2="4.064" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="4.064" y1="-1.778" x2="5.08" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="5.08" y1="-0.762" x2="6.223" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="3.937" y1="-12.192" x2="2.667" y2="-11.176" width="0.2032" layer="21"/>
<wire x1="2.667" y1="-11.176" x2="-0.508" y2="-11.176" width="0.2032" layer="21"/>
<wire x1="-0.508" y1="-11.176" x2="-1.27" y2="-12.065" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-12.065" x2="-1.27" y2="-12.827" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-12.827" x2="3.429" y2="-12.827" width="0.2032" layer="21"/>
<wire x1="3.429" y1="-12.827" x2="3.937" y2="-12.192" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="-11.176" x2="-5.842" y2="-11.176" width="0.2032" layer="21"/>
<wire x1="-5.842" y1="-11.176" x2="-6.858" y2="-12.319" width="0.2032" layer="21"/>
<wire x1="-6.858" y1="-12.319" x2="-6.35" y2="-12.827" width="0.2032" layer="21"/>
<wire x1="-6.35" y1="-12.827" x2="-1.905" y2="-12.827" width="0.2032" layer="21"/>
<wire x1="-1.905" y1="-12.827" x2="-1.905" y2="-12.065" width="0.2032" layer="21"/>
<wire x1="-6.985" y1="-11.43" x2="-5.715" y2="-10.16" width="0.2032" layer="21"/>
<wire x1="-5.715" y1="-10.16" x2="-4.826" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="-4.826" y1="-1.778" x2="-5.461" y2="-0.889" width="0.2032" layer="21"/>
<wire x1="-5.461" y1="-0.889" x2="-6.604" y2="-0.889" width="0.2032" layer="21"/>
<wire x1="-6.604" y1="-0.889" x2="-7.62" y2="-10.795" width="0.2032" layer="21"/>
<wire x1="-7.62" y1="-10.795" x2="-6.985" y2="-11.43" width="0.2032" layer="21"/>
<wire x1="6.985" y1="11.684" x2="5.588" y2="10.16" width="0.2032" layer="21"/>
<wire x1="5.588" y1="10.16" x2="4.445" y2="1.016" width="0.2032" layer="21"/>
<wire x1="1.143" y1="11.43" x2="1.905" y2="10.541" width="0.2032" layer="21"/>
<wire x1="1.905" y1="10.541" x2="0.762" y2="1.143" width="0.2032" layer="21"/>
<wire x1="0.762" y1="1.143" x2="-0.127" y2="0" width="0.2032" layer="21"/>
<wire x1="-0.127" y1="0" x2="-0.889" y2="1.143" width="0.2032" layer="21"/>
<wire x1="-0.889" y1="1.143" x2="0.127" y2="10.414" width="0.2032" layer="21"/>
<wire x1="0.127" y1="10.414" x2="1.143" y2="11.43" width="0.2032" layer="21"/>
<wire x1="5.08" y1="10.033" x2="4.699" y2="6.731" width="0.2032" layer="21"/>
<wire x1="4.699" y1="6.731" x2="1.27" y2="1.143" width="0.2032" layer="21"/>
<wire x1="1.27" y1="1.143" x2="1.778" y2="4.572" width="0.2032" layer="21"/>
<wire x1="1.778" y1="4.572" x2="5.08" y2="10.033" width="0.2032" layer="21"/>
<wire x1="-1.016" y1="4.572" x2="-2.921" y2="10.033" width="0.2032" layer="21"/>
<wire x1="-3.302" y1="6.477" x2="-2.921" y2="10.033" width="0.2032" layer="21" curve="1.259197"/>
<wire x1="-3.302" y1="6.477" x2="-1.397" y2="1.27" width="0.2032" layer="21"/>
<wire x1="-1.397" y1="1.27" x2="-1.016" y2="4.572" width="0.2032" layer="21"/>
<wire x1="-0.254" y1="-0.635" x2="0.381" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="0.381" y1="-1.905" x2="-0.762" y2="-10.541" width="0.2032" layer="21"/>
<wire x1="-0.762" y1="-10.541" x2="-1.651" y2="-11.43" width="0.2032" layer="21"/>
<wire x1="-1.651" y1="-11.43" x2="-2.54" y2="-10.541" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-10.541" x2="-1.397" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="-1.397" y1="-1.778" x2="-0.254" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.524" y1="0.635" x2="-0.762" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="-0.762" y1="-0.381" x2="-1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.905" y1="-1.27" x2="-4.318" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-4.318" y1="-1.27" x2="-4.953" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="-4.953" y1="-0.381" x2="-4.064" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-4.064" y1="0.635" x2="-1.524" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.397" y1="0.635" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="4.699" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="4.699" y1="-0.381" x2="3.683" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="3.683" y1="-1.397" x2="1.016" y2="-1.397" width="0.2032" layer="21"/>
<wire x1="1.016" y1="-1.397" x2="0.381" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="0.381" y1="-0.381" x2="1.397" y2="0.635" width="0.2032" layer="21"/>
<wire x1="0.889" y1="-1.905" x2="3.048" y2="-7.112" width="0.2032" layer="21"/>
<wire x1="3.048" y1="-7.112" x2="2.667" y2="-10.541" width="0.2032" layer="21"/>
<wire x1="2.667" y1="-10.541" x2="0.508" y2="-5.715" width="0.2032" layer="21"/>
<wire x1="0.508" y1="-5.715" x2="0.889" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="-1.905" y1="-1.905" x2="-2.413" y2="-5.461" width="0.2032" layer="21"/>
<wire x1="-2.413" y1="-5.461" x2="-5.207" y2="-10.16" width="0.2032" layer="21"/>
<wire x1="-5.207" y1="-10.16" x2="-4.826" y2="-6.477" width="0.2032" layer="21"/>
<wire x1="-4.826" y1="-6.477" x2="-1.905" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="-1.905" y1="-12.065" x2="-2.794" y2="-11.176" width="0.2032" layer="21"/>
<circle x="-6.35" y="12.954" radius="0.7405" width="0.2032" layer="21"/>
<circle x="5.842" y="-13.335" radius="0.6839" width="0.2032" layer="21"/>
<pad name="1" x="-8.89" y="13.97" drill="0.9" diameter="1.7"/>
<pad name="2" x="-8.89" y="11.43" drill="0.9" diameter="1.7"/>
<pad name="3" x="-8.89" y="8.89" drill="0.9" diameter="1.7"/>
<pad name="4" x="-8.89" y="6.35" drill="0.9" diameter="1.7"/>
<pad name="6" x="-8.89" y="1.27" drill="0.9" diameter="1.7"/>
<pad name="7" x="-8.89" y="-1.27" drill="0.9" diameter="1.7"/>
<pad name="9" x="-8.89" y="-6.35" drill="0.9" diameter="1.7"/>
<pad name="10" x="-8.89" y="-8.89" drill="0.9" diameter="1.7"/>
<pad name="11" x="-8.89" y="-11.43" drill="0.9" diameter="1.7"/>
<pad name="12" x="-8.89" y="-13.97" drill="0.9" diameter="1.7"/>
<pad name="13" x="8.89" y="-13.97" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="14" x="8.89" y="-11.43" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="15" x="8.89" y="-8.89" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="16" x="8.89" y="-6.35" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="18" x="8.89" y="-1.27" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="19" x="8.89" y="1.27" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="21" x="8.89" y="6.35" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="22" x="8.89" y="8.89" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="23" x="8.89" y="11.43" drill="0.9" diameter="1.7" rot="R180"/>
<pad name="24" x="8.89" y="13.97" drill="0.9" diameter="1.7" rot="R180"/>
</package>
<package name="LCD-16X2">
<wire x1="-40" y1="18" x2="40" y2="18" width="0.2032" layer="21"/>
<wire x1="40" y1="18" x2="40" y2="-18" width="0.2032" layer="21"/>
<wire x1="40" y1="-18" x2="-40" y2="-18" width="0.2032" layer="21"/>
<wire x1="-40" y1="-18" x2="-40" y2="18" width="0.2032" layer="21"/>
<wire x1="-35.65" y1="13.15" x2="35.65" y2="13.15" width="0.2032" layer="21"/>
<wire x1="35.65" y1="13.15" x2="35.65" y2="-13.15" width="0.2032" layer="21"/>
<wire x1="35.65" y1="-13.15" x2="-35.65" y2="-13.15" width="0.2032" layer="21"/>
<wire x1="-35.65" y1="-13.15" x2="-35.65" y2="13.15" width="0.2032" layer="21"/>
<wire x1="-32.25" y1="8.2" x2="32.25" y2="8.2" width="0.2032" layer="47"/>
<wire x1="32.25" y1="8.2" x2="32.25" y2="-8.2" width="0.2032" layer="47"/>
<wire x1="32.25" y1="-8.2" x2="-32.25" y2="-8.2" width="0.2032" layer="47"/>
<wire x1="-32.25" y1="-8.2" x2="-32.25" y2="8.2" width="0.2032" layer="47"/>
<pad name="1" x="-32" y="15.5" drill="1.016" diameter="1.8796" shape="square"/>
<pad name="2" x="-29.46" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="3" x="-26.92" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="4" x="-24.38" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="5" x="-21.84" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="6" x="-19.3" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="7" x="-16.76" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="8" x="-14.22" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="9" x="-11.68" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="10" x="-9.14" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="11" x="-6.6" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="12" x="-4.06" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="13" x="-1.52" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="14" x="1.02" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="15" x="3.56" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="16" x="6.1" y="15.5" drill="1.016" diameter="1.8796"/>
<text x="-34.29" y="15.24" size="1.016" layer="51" ratio="15">1</text>
<hole x="-37.5" y="15.5" drill="2.8"/>
<hole x="-37.5" y="-15.5" drill="2.8"/>
<hole x="37.5" y="15.5" drill="2.8"/>
<hole x="37.5" y="-15.5" drill="2.8"/>
</package>
<package name="LCD-16X2_NOSILK">
<wire x1="-40" y1="18" x2="40" y2="18" width="0.2032" layer="51"/>
<wire x1="40" y1="18" x2="40" y2="-18" width="0.2032" layer="51"/>
<wire x1="40" y1="-18" x2="-40" y2="-18" width="0.2032" layer="51"/>
<wire x1="-40" y1="-18" x2="-40" y2="18" width="0.2032" layer="51"/>
<wire x1="-35.65" y1="13.15" x2="35.65" y2="13.15" width="0.2032" layer="51"/>
<wire x1="35.65" y1="13.15" x2="35.65" y2="-13.15" width="0.2032" layer="51"/>
<wire x1="35.65" y1="-13.15" x2="-35.65" y2="-13.15" width="0.2032" layer="51"/>
<wire x1="-35.65" y1="-13.15" x2="-35.65" y2="13.15" width="0.2032" layer="51"/>
<wire x1="-32.25" y1="8.2" x2="32.25" y2="8.2" width="0.2032" layer="51"/>
<wire x1="32.25" y1="8.2" x2="32.25" y2="-8.2" width="0.2032" layer="51"/>
<wire x1="32.25" y1="-8.2" x2="-32.25" y2="-8.2" width="0.2032" layer="51"/>
<wire x1="-32.25" y1="-8.2" x2="-32.25" y2="8.2" width="0.2032" layer="51"/>
<pad name="1" x="-32" y="15.5" drill="1.016" diameter="1.8796" shape="square"/>
<pad name="2" x="-29.46" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="3" x="-26.92" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="4" x="-24.38" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="5" x="-21.84" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="6" x="-19.3" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="7" x="-16.76" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="8" x="-14.22" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="9" x="-11.68" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="10" x="-9.14" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="11" x="-6.6" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="12" x="-4.06" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="13" x="-1.52" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="14" x="1.02" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="15" x="3.56" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="16" x="6.1" y="15.5" drill="1.016" diameter="1.8796"/>
<text x="-34.29" y="15.24" size="1.016" layer="51" ratio="15">1</text>
<hole x="-37.5" y="15.5" drill="2.8"/>
<hole x="-37.5" y="-15.5" drill="2.8"/>
<hole x="37.5" y="15.5" drill="2.8"/>
<hole x="37.5" y="-15.5" drill="2.8"/>
</package>
<package name="LCD-16X2_NOHOLES">
<wire x1="-40" y1="18" x2="40" y2="18" width="0.2032" layer="51"/>
<wire x1="40" y1="18" x2="40" y2="-18" width="0.2032" layer="51"/>
<wire x1="40" y1="-18" x2="-40" y2="-18" width="0.2032" layer="51"/>
<wire x1="-40" y1="-18" x2="-40" y2="18" width="0.2032" layer="51"/>
<wire x1="-35.65" y1="13.15" x2="35.65" y2="13.15" width="0.2032" layer="51"/>
<wire x1="35.65" y1="13.15" x2="35.65" y2="-13.15" width="0.2032" layer="51"/>
<wire x1="35.65" y1="-13.15" x2="-35.65" y2="-13.15" width="0.2032" layer="51"/>
<wire x1="-35.65" y1="-13.15" x2="-35.65" y2="13.15" width="0.2032" layer="51"/>
<wire x1="-32.25" y1="8.2" x2="32.25" y2="8.2" width="0.2032" layer="51"/>
<wire x1="32.25" y1="8.2" x2="32.25" y2="-8.2" width="0.2032" layer="51"/>
<wire x1="32.25" y1="-8.2" x2="-32.25" y2="-8.2" width="0.2032" layer="51"/>
<wire x1="-32.25" y1="-8.2" x2="-32.25" y2="8.2" width="0.2032" layer="51"/>
<pad name="1" x="-32" y="15.5" drill="1.016" diameter="1.8796" shape="square"/>
<pad name="2" x="-29.46" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="3" x="-26.92" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="4" x="-24.38" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="5" x="-21.84" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="6" x="-19.3" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="7" x="-16.76" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="8" x="-14.22" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="9" x="-11.68" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="10" x="-9.14" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="11" x="-6.6" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="12" x="-4.06" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="13" x="-1.52" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="14" x="1.02" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="15" x="3.56" y="15.5" drill="1.016" diameter="1.8796"/>
<pad name="16" x="6.1" y="15.5" drill="1.016" diameter="1.8796"/>
<text x="-34.29" y="15.24" size="1.016" layer="51" ratio="15">1</text>
</package>
<package name="LCD-8X2">
<description>&lt;h3&gt;8x2 Character LCD w/ Backlight&lt;/h3&gt;
Outer Dimensions: 40.0 x 35.4mm&lt;br&gt;
Viewing Area: 26.4 x 13.9mm&lt;br&gt;
Character Size: 2.95 x 4.75mm&lt;br&gt;
&lt;br&gt;
For Reference, see Amotec Display part ADM0802A (http://amotec-display.com/pdf/ADM0802A.pdf).
&lt;br&gt;
&lt;br&gt;
&lt;B&gt;***Footprint Unproven***&lt;/b&gt;</description>
<wire x1="-20" y1="-11.6" x2="-20" y2="18.4" width="0.2032" layer="21"/>
<wire x1="-20" y1="18.4" x2="20" y2="18.4" width="0.2032" layer="21"/>
<wire x1="20" y1="18.4" x2="20" y2="-11.6" width="0.2032" layer="21"/>
<wire x1="20" y1="-11.6" x2="-20" y2="-11.6" width="0.2032" layer="21"/>
<wire x1="-15.2" y1="6.95" x2="-15.2" y2="-6.95" width="0.127" layer="51"/>
<wire x1="-15.2" y1="-6.95" x2="15.2" y2="-6.95" width="0.127" layer="51"/>
<wire x1="15.2" y1="-6.95" x2="15.2" y2="6.95" width="0.127" layer="51"/>
<wire x1="15.2" y1="6.95" x2="-15.2" y2="6.95" width="0.127" layer="51"/>
<wire x1="0.2" y1="0.2" x2="0.2" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="0.2" y1="4.95" x2="3.15" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.15" y1="4.95" x2="3.15" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.15" y1="0.2" x2="0.2" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="0.2" y1="-0.2" x2="0.2" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="0.2" y1="-4.95" x2="3.15" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.15" y1="-4.95" x2="3.15" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.15" y1="-0.2" x2="0.2" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.55" y1="0.2" x2="3.55" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.55" y1="4.95" x2="6.5" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.5" y1="4.95" x2="6.5" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.5" y1="0.2" x2="3.55" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.55" y1="-0.2" x2="3.55" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.55" y1="-4.95" x2="6.5" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.5" y1="-4.95" x2="6.5" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.5" y1="-0.2" x2="3.55" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.9" y1="0.2" x2="6.9" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.9" y1="4.95" x2="9.85" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="9.85" y1="4.95" x2="9.85" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="9.85" y1="0.2" x2="6.9" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.9" y1="-0.2" x2="6.9" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.9" y1="-4.95" x2="9.85" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="9.85" y1="-4.95" x2="9.85" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="9.85" y1="-0.2" x2="6.9" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="10.25" y1="0.2" x2="10.25" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="10.25" y1="4.95" x2="13.2" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="13.2" y1="4.95" x2="13.2" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="13.2" y1="0.2" x2="10.25" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="10.25" y1="-0.2" x2="10.25" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="10.25" y1="-4.95" x2="13.2" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="13.2" y1="-4.95" x2="13.2" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="13.2" y1="-0.2" x2="10.25" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-13.2" y1="0.2" x2="-13.2" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-13.2" y1="4.95" x2="-10.25" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-10.25" y1="4.95" x2="-10.25" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-10.25" y1="0.2" x2="-13.2" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-13.2" y1="-0.2" x2="-13.2" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-13.2" y1="-4.95" x2="-10.25" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-10.25" y1="-4.95" x2="-10.25" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-10.25" y1="-0.2" x2="-13.2" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-9.85" y1="0.2" x2="-9.85" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-9.85" y1="4.95" x2="-6.9" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.9" y1="4.95" x2="-6.9" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.9" y1="0.2" x2="-9.85" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-9.85" y1="-0.2" x2="-9.85" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-9.85" y1="-4.95" x2="-6.9" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.9" y1="-4.95" x2="-6.9" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.9" y1="-0.2" x2="-9.85" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.5" y1="0.2" x2="-6.5" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.5" y1="4.95" x2="-3.55" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.55" y1="4.95" x2="-3.55" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.55" y1="0.2" x2="-6.5" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.5" y1="-0.2" x2="-6.5" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.5" y1="-4.95" x2="-3.55" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.55" y1="-4.95" x2="-3.55" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.55" y1="-0.2" x2="-6.5" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.15" y1="0.2" x2="-3.15" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.15" y1="4.95" x2="-0.2" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-0.2" y1="4.95" x2="-0.2" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-0.2" y1="0.2" x2="-3.15" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.15" y1="-0.2" x2="-3.15" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.15" y1="-4.95" x2="-0.2" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-0.2" y1="-4.95" x2="-0.2" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-0.2" y1="-0.2" x2="-3.15" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-20" y1="-15" x2="-16" y2="-15" width="0.2032" layer="51" curve="180"/>
<wire x1="-20" y1="-15" x2="-20" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-16" y1="-15" x2="-16" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="16" y1="-15" x2="20" y2="-15" width="0.2032" layer="51" curve="180"/>
<wire x1="16" y1="-15" x2="16" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="20" y1="-15" x2="20" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-18" y1="11.6" x2="18" y2="11.6" width="0.2032" layer="51"/>
<wire x1="18" y1="11.6" x2="18" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-18" y1="11.6" x2="-18" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-18" y1="-11.6" x2="18" y2="-11.6" width="0.2032" layer="51"/>
<pad name="8" x="0" y="16.27" drill="1" diameter="1.778"/>
<pad name="7" x="0" y="13.73" drill="1" diameter="1.778"/>
<pad name="6" x="-2.54" y="16.27" drill="1" diameter="1.778"/>
<pad name="4" x="-5.08" y="16.27" drill="1" diameter="1.778"/>
<pad name="2" x="-7.62" y="16.27" drill="1" diameter="1.778"/>
<pad name="5" x="-2.54" y="13.73" drill="1" diameter="1.778"/>
<pad name="3" x="-5.08" y="13.73" drill="1" diameter="1.778"/>
<pad name="1" x="-7.62" y="13.73" drill="1" diameter="1.778"/>
<pad name="10" x="2.54" y="16.27" drill="1" diameter="1.778"/>
<pad name="12" x="5.08" y="16.27" drill="1" diameter="1.778"/>
<pad name="14" x="7.62" y="16.27" drill="1" diameter="1.778"/>
<pad name="16" x="10.16" y="16.27" drill="1" diameter="1.778"/>
<pad name="9" x="2.54" y="13.73" drill="1" diameter="1.778"/>
<pad name="11" x="5.08" y="13.73" drill="1" diameter="1.778"/>
<pad name="13" x="7.62" y="13.73" drill="1" diameter="1.778"/>
<pad name="15" x="10.16" y="13.73" drill="1" diameter="1.778"/>
<text x="-19.05" y="10.16" size="0.4318" layer="25">&gt;Name</text>
<text x="-19.05" y="-10.16" size="0.4318" layer="27">&gt;Value</text>
<hole x="18" y="15" drill="2"/>
<hole x="-18" y="15" drill="2"/>
<hole x="-18" y="-15" drill="2"/>
<hole x="18" y="-15" drill="2"/>
</package>
<package name="LCD-8X2-KIT">
<description>&lt;h3&gt;LCD-8X2-KIT&lt;/h3&gt;
8x2 LCD&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="-20" y1="-11.6" x2="-20" y2="18.4" width="0.2032" layer="51"/>
<wire x1="-20" y1="18.4" x2="20" y2="18.4" width="0.2032" layer="51"/>
<wire x1="20" y1="18.4" x2="20" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="20" y1="-11.6" x2="-20" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-15.2" y1="6.95" x2="-15.2" y2="-6.95" width="0.127" layer="51"/>
<wire x1="-15.2" y1="-6.95" x2="15.2" y2="-6.95" width="0.127" layer="51"/>
<wire x1="15.2" y1="-6.95" x2="15.2" y2="6.95" width="0.127" layer="51"/>
<wire x1="15.2" y1="6.95" x2="-15.2" y2="6.95" width="0.127" layer="51"/>
<wire x1="0.2" y1="0.2" x2="0.2" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="0.2" y1="4.95" x2="3.15" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.15" y1="4.95" x2="3.15" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.15" y1="0.2" x2="0.2" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="0.2" y1="-0.2" x2="0.2" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="0.2" y1="-4.95" x2="3.15" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.15" y1="-4.95" x2="3.15" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.15" y1="-0.2" x2="0.2" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.55" y1="0.2" x2="3.55" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.55" y1="4.95" x2="6.5" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.5" y1="4.95" x2="6.5" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.5" y1="0.2" x2="3.55" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="3.55" y1="-0.2" x2="3.55" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="3.55" y1="-4.95" x2="6.5" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.5" y1="-4.95" x2="6.5" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.5" y1="-0.2" x2="3.55" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.9" y1="0.2" x2="6.9" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.9" y1="4.95" x2="9.85" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="9.85" y1="4.95" x2="9.85" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="9.85" y1="0.2" x2="6.9" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="6.9" y1="-0.2" x2="6.9" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="6.9" y1="-4.95" x2="9.85" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="9.85" y1="-4.95" x2="9.85" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="9.85" y1="-0.2" x2="6.9" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="10.25" y1="0.2" x2="10.25" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="10.25" y1="4.95" x2="13.2" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="13.2" y1="4.95" x2="13.2" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="13.2" y1="0.2" x2="10.25" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="10.25" y1="-0.2" x2="10.25" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="10.25" y1="-4.95" x2="13.2" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="13.2" y1="-4.95" x2="13.2" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="13.2" y1="-0.2" x2="10.25" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-13.2" y1="0.2" x2="-13.2" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-13.2" y1="4.95" x2="-10.25" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-10.25" y1="4.95" x2="-10.25" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-10.25" y1="0.2" x2="-13.2" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-13.2" y1="-0.2" x2="-13.2" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-13.2" y1="-4.95" x2="-10.25" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-10.25" y1="-4.95" x2="-10.25" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-10.25" y1="-0.2" x2="-13.2" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-9.85" y1="0.2" x2="-9.85" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-9.85" y1="4.95" x2="-6.9" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.9" y1="4.95" x2="-6.9" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.9" y1="0.2" x2="-9.85" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-9.85" y1="-0.2" x2="-9.85" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-9.85" y1="-4.95" x2="-6.9" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.9" y1="-4.95" x2="-6.9" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.9" y1="-0.2" x2="-9.85" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.5" y1="0.2" x2="-6.5" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.5" y1="4.95" x2="-3.55" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.55" y1="4.95" x2="-3.55" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.55" y1="0.2" x2="-6.5" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-6.5" y1="-0.2" x2="-6.5" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-6.5" y1="-4.95" x2="-3.55" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.55" y1="-4.95" x2="-3.55" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.55" y1="-0.2" x2="-6.5" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.15" y1="0.2" x2="-3.15" y2="4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.15" y1="4.95" x2="-0.2" y2="4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-0.2" y1="4.95" x2="-0.2" y2="0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-0.2" y1="0.2" x2="-3.15" y2="0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-3.15" y1="-0.2" x2="-3.15" y2="-4.95" width="0.127" layer="51" style="dashdot"/>
<wire x1="-3.15" y1="-4.95" x2="-0.2" y2="-4.95" width="0.127" layer="51" style="shortdash"/>
<wire x1="-0.2" y1="-4.95" x2="-0.2" y2="-0.2" width="0.127" layer="51" style="dashdot"/>
<wire x1="-0.2" y1="-0.2" x2="-3.15" y2="-0.2" width="0.127" layer="51" style="shortdash"/>
<wire x1="-20" y1="-15" x2="-16" y2="-15" width="0.2032" layer="51" curve="180"/>
<wire x1="-20" y1="-15" x2="-20" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-16" y1="-15" x2="-16" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="16" y1="-15" x2="20" y2="-15" width="0.2032" layer="51" curve="180"/>
<wire x1="16" y1="-15" x2="16" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="20" y1="-15" x2="20" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-18" y1="11.6" x2="18" y2="11.6" width="0.2032" layer="51"/>
<wire x1="18" y1="11.6" x2="18" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-18" y1="11.6" x2="-18" y2="-11.6" width="0.2032" layer="51"/>
<wire x1="-18" y1="-11.6" x2="18" y2="-11.6" width="0.2032" layer="51"/>
<pad name="8" x="0" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="7" x="0" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="6" x="-2.54" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="4" x="-5.08" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="2" x="-7.62" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="5" x="-2.54" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="3" x="-5.08" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="1" x="-7.62" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="10" x="2.54" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="12" x="5.08" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="14" x="7.62" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="16" x="10.16" y="16.27" drill="1" diameter="1.778" stop="no"/>
<pad name="9" x="2.54" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="11" x="5.08" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="13" x="7.62" y="13.73" drill="1" diameter="1.778" stop="no"/>
<pad name="15" x="10.16" y="13.73" drill="1" diameter="1.778" stop="no"/>
<text x="-19.05" y="10.16" size="0.4318" layer="25">&gt;Name</text>
<text x="-19.05" y="-10.16" size="0.4318" layer="27">&gt;Value</text>
<hole x="18" y="15" drill="2"/>
<hole x="-18" y="15" drill="2"/>
<hole x="-18" y="-15" drill="2"/>
<hole x="18" y="-15" drill="2"/>
<polygon width="0.127" layer="30">
<vertex x="-7.6175" y="15.2975" curve="-90"/>
<vertex x="-8.5724" y="16.2272" curve="-90.011749"/>
<vertex x="-7.62" y="17.2026" curve="-90"/>
<vertex x="-6.67" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-7.62" y="15.8055" curve="-90.012891"/>
<vertex x="-8.0645" y="16.2297" curve="-90"/>
<vertex x="-7.62" y="16.697" curve="-90"/>
<vertex x="-7.1781" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-5.0775" y="15.2975" curve="-90"/>
<vertex x="-6.0324" y="16.2272" curve="-90.011749"/>
<vertex x="-5.08" y="17.2026" curve="-90"/>
<vertex x="-4.13" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-5.08" y="15.8055" curve="-90.012891"/>
<vertex x="-5.5245" y="16.2297" curve="-90"/>
<vertex x="-5.08" y="16.697" curve="-90"/>
<vertex x="-4.6381" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-2.5375" y="15.2975" curve="-90"/>
<vertex x="-3.4924" y="16.2272" curve="-90.011749"/>
<vertex x="-2.54" y="17.2026" curve="-90"/>
<vertex x="-1.59" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-2.54" y="15.8055" curve="-90.012891"/>
<vertex x="-2.9845" y="16.2297" curve="-90"/>
<vertex x="-2.54" y="16.697" curve="-90"/>
<vertex x="-2.0981" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0.0025" y="15.2975" curve="-90"/>
<vertex x="-0.9524" y="16.2272" curve="-90.011749"/>
<vertex x="0" y="17.2026" curve="-90"/>
<vertex x="0.95" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="15.8055" curve="-90.012891"/>
<vertex x="-0.4445" y="16.2297" curve="-90"/>
<vertex x="0" y="16.697" curve="-90"/>
<vertex x="0.4419" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="2.5425" y="15.2975" curve="-90"/>
<vertex x="1.5876" y="16.2272" curve="-90.011749"/>
<vertex x="2.54" y="17.2026" curve="-90"/>
<vertex x="3.49" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="2.54" y="15.8055" curve="-90.012891"/>
<vertex x="2.0955" y="16.2297" curve="-90"/>
<vertex x="2.54" y="16.697" curve="-90"/>
<vertex x="2.9819" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="5.0825" y="15.2975" curve="-90"/>
<vertex x="4.1276" y="16.2272" curve="-90.011749"/>
<vertex x="5.08" y="17.2026" curve="-90"/>
<vertex x="6.03" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="5.08" y="15.8055" curve="-90.012891"/>
<vertex x="4.6355" y="16.2297" curve="-90"/>
<vertex x="5.08" y="16.697" curve="-90"/>
<vertex x="5.5219" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="7.6225" y="15.2975" curve="-90"/>
<vertex x="6.6676" y="16.2272" curve="-90.011749"/>
<vertex x="7.62" y="17.2026" curve="-90"/>
<vertex x="8.57" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="7.62" y="15.8055" curve="-90.012891"/>
<vertex x="7.1755" y="16.2297" curve="-90"/>
<vertex x="7.62" y="16.697" curve="-90"/>
<vertex x="8.0619" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="10.1625" y="15.2975" curve="-90"/>
<vertex x="9.2076" y="16.2272" curve="-90.011749"/>
<vertex x="10.16" y="17.2026" curve="-90"/>
<vertex x="11.11" y="16.2246" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="10.16" y="15.8055" curve="-90.012891"/>
<vertex x="9.7155" y="16.2297" curve="-90"/>
<vertex x="10.16" y="16.697" curve="-90"/>
<vertex x="10.6019" y="16.2399" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-7.6175" y="12.7575" curve="-90"/>
<vertex x="-8.5724" y="13.6872" curve="-90.011749"/>
<vertex x="-7.62" y="14.6626" curve="-90"/>
<vertex x="-6.67" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-7.62" y="13.2655" curve="-90.012891"/>
<vertex x="-8.0645" y="13.6897" curve="-90"/>
<vertex x="-7.62" y="14.157" curve="-90"/>
<vertex x="-7.1781" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-5.0775" y="12.7575" curve="-90"/>
<vertex x="-6.0324" y="13.6872" curve="-90.011749"/>
<vertex x="-5.08" y="14.6626" curve="-90"/>
<vertex x="-4.13" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-5.08" y="13.2655" curve="-90.012891"/>
<vertex x="-5.5245" y="13.6897" curve="-90"/>
<vertex x="-5.08" y="14.157" curve="-90"/>
<vertex x="-4.6381" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-2.5375" y="12.7575" curve="-90"/>
<vertex x="-3.4924" y="13.6872" curve="-90.011749"/>
<vertex x="-2.54" y="14.6626" curve="-90"/>
<vertex x="-1.59" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-2.54" y="13.2655" curve="-90.012891"/>
<vertex x="-2.9845" y="13.6897" curve="-90"/>
<vertex x="-2.54" y="14.157" curve="-90"/>
<vertex x="-2.0981" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="0.0025" y="12.7575" curve="-90"/>
<vertex x="-0.9524" y="13.6872" curve="-90.011749"/>
<vertex x="0" y="14.6626" curve="-90"/>
<vertex x="0.95" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0" y="13.2655" curve="-90.012891"/>
<vertex x="-0.4445" y="13.6897" curve="-90"/>
<vertex x="0" y="14.157" curve="-90"/>
<vertex x="0.4419" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="2.5425" y="12.7575" curve="-90"/>
<vertex x="1.5876" y="13.6872" curve="-90.011749"/>
<vertex x="2.54" y="14.6626" curve="-90"/>
<vertex x="3.49" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="2.54" y="13.2655" curve="-90.012891"/>
<vertex x="2.0955" y="13.6897" curve="-90"/>
<vertex x="2.54" y="14.157" curve="-90"/>
<vertex x="2.9819" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="5.0825" y="12.7575" curve="-90"/>
<vertex x="4.1276" y="13.6872" curve="-90.011749"/>
<vertex x="5.08" y="14.6626" curve="-90"/>
<vertex x="6.03" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="5.08" y="13.2655" curve="-90.012891"/>
<vertex x="4.6355" y="13.6897" curve="-90"/>
<vertex x="5.08" y="14.157" curve="-90"/>
<vertex x="5.5219" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="7.6225" y="12.7575" curve="-90"/>
<vertex x="6.6676" y="13.6872" curve="-90.011749"/>
<vertex x="7.62" y="14.6626" curve="-90"/>
<vertex x="8.57" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="7.62" y="13.2655" curve="-90.012891"/>
<vertex x="7.1755" y="13.6897" curve="-90"/>
<vertex x="7.62" y="14.157" curve="-90"/>
<vertex x="8.0619" y="13.6999" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="10.1625" y="12.7575" curve="-90"/>
<vertex x="9.2076" y="13.6872" curve="-90.011749"/>
<vertex x="10.16" y="14.6626" curve="-90"/>
<vertex x="11.11" y="13.6846" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="10.16" y="13.2655" curve="-90.012891"/>
<vertex x="9.7155" y="13.6897" curve="-90"/>
<vertex x="10.16" y="14.157" curve="-90"/>
<vertex x="10.6019" y="13.6999" curve="-90.012967"/>
</polygon>
</package>
<package name="LCD-G12864">
<wire x1="0" y1="0" x2="0" y2="5" width="0.2032" layer="21"/>
<wire x1="0" y1="5" x2="0" y2="49.7" width="0.2032" layer="21"/>
<wire x1="0" y1="49.7" x2="0" y2="52.7" width="0.2032" layer="21"/>
<wire x1="0" y1="52.7" x2="75" y2="52.7" width="0.2032" layer="21"/>
<wire x1="75" y1="52.7" x2="75" y2="49.7" width="0.2032" layer="21"/>
<wire x1="75" y1="49.7" x2="75" y2="5" width="0.2032" layer="21"/>
<wire x1="75" y1="5" x2="75" y2="0" width="0.2032" layer="21"/>
<wire x1="75" y1="0" x2="0" y2="0" width="0.2032" layer="21"/>
<wire x1="7.5" y1="11.1" x2="7.5" y2="43.7" width="0.2032" layer="21"/>
<wire x1="7.5" y1="43.7" x2="67.5" y2="43.7" width="0.2032" layer="21"/>
<wire x1="67.5" y1="43.7" x2="67.5" y2="11.1" width="0.2032" layer="21"/>
<wire x1="67.5" y1="11.1" x2="7.5" y2="11.1" width="0.2032" layer="21"/>
<wire x1="0" y1="49.7" x2="75" y2="49.7" width="0.2032" layer="21"/>
<wire x1="75" y1="5" x2="0" y2="5" width="0.2032" layer="21"/>
<pad name="1" x="13.4" y="2.5" drill="1.016" shape="square" rot="R90"/>
<pad name="2" x="15.94" y="2.5" drill="1.016" rot="R90"/>
<pad name="3" x="18.48" y="2.5" drill="1.016" rot="R90"/>
<pad name="4" x="21.02" y="2.5" drill="1.016" rot="R90"/>
<pad name="5" x="23.56" y="2.5" drill="1.016" rot="R90"/>
<pad name="6" x="26.1" y="2.5" drill="1.016" rot="R90"/>
<pad name="7" x="28.64" y="2.5" drill="1.016" rot="R90"/>
<pad name="8" x="31.18" y="2.5" drill="1.016" rot="R90"/>
<pad name="9" x="33.72" y="2.5" drill="1.016" rot="R90"/>
<pad name="10" x="36.26" y="2.5" drill="1.016" rot="R90"/>
<pad name="11" x="38.8" y="2.5" drill="1.016" rot="R90"/>
<pad name="12" x="41.34" y="2.5" drill="1.016" rot="R90"/>
<pad name="13" x="43.88" y="2.5" drill="1.016" rot="R90"/>
<pad name="14" x="46.42" y="2.5" drill="1.016" rot="R90"/>
<pad name="15" x="48.96" y="2.5" drill="1.016" rot="R90"/>
<pad name="16" x="51.5" y="2.5" drill="1.016" rot="R90"/>
<pad name="17" x="54.04" y="2.5" drill="1.016" rot="R90"/>
<pad name="18" x="56.58" y="2.5" drill="1.016" rot="R90"/>
<pad name="19" x="59.12" y="2.5" drill="1.016" rot="R90"/>
<pad name="20" x="61.66" y="2.5" drill="1.016" rot="R90"/>
<text x="11" y="2" size="1.27" layer="21">1</text>
<text x="64" y="2" size="1.27" layer="21">20</text>
<hole x="2.5" y="2.5" drill="2.5"/>
<hole x="2.5" y="52.2" drill="2.5"/>
<hole x="72.5" y="52.2" drill="2.5"/>
<hole x="72.5" y="2.5" drill="2.5"/>
</package>
<package name="1X20">
<wire x1="14.605" y1="1.27" x2="15.875" y2="1.27" width="0.2032" layer="21"/>
<wire x1="15.875" y1="1.27" x2="16.51" y2="0.635" width="0.2032" layer="21"/>
<wire x1="16.51" y1="-0.635" x2="15.875" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="11.43" y1="0.635" x2="12.065" y2="1.27" width="0.2032" layer="21"/>
<wire x1="12.065" y1="1.27" x2="13.335" y2="1.27" width="0.2032" layer="21"/>
<wire x1="13.335" y1="1.27" x2="13.97" y2="0.635" width="0.2032" layer="21"/>
<wire x1="13.97" y1="-0.635" x2="13.335" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="13.335" y1="-1.27" x2="12.065" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="12.065" y1="-1.27" x2="11.43" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="14.605" y1="1.27" x2="13.97" y2="0.635" width="0.2032" layer="21"/>
<wire x1="13.97" y1="-0.635" x2="14.605" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="15.875" y1="-1.27" x2="14.605" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="6.985" y1="1.27" x2="8.255" y2="1.27" width="0.2032" layer="21"/>
<wire x1="8.255" y1="1.27" x2="8.89" y2="0.635" width="0.2032" layer="21"/>
<wire x1="8.89" y1="-0.635" x2="8.255" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="8.89" y1="0.635" x2="9.525" y2="1.27" width="0.2032" layer="21"/>
<wire x1="9.525" y1="1.27" x2="10.795" y2="1.27" width="0.2032" layer="21"/>
<wire x1="10.795" y1="1.27" x2="11.43" y2="0.635" width="0.2032" layer="21"/>
<wire x1="11.43" y1="-0.635" x2="10.795" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="10.795" y1="-1.27" x2="9.525" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="9.525" y1="-1.27" x2="8.89" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="6.985" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="6.985" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="8.255" y1="-1.27" x2="6.985" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="32.385" y1="1.27" x2="33.655" y2="1.27" width="0.2032" layer="21"/>
<wire x1="33.655" y1="1.27" x2="34.29" y2="0.635" width="0.2032" layer="21"/>
<wire x1="34.29" y1="-0.635" x2="33.655" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="29.21" y1="0.635" x2="29.845" y2="1.27" width="0.2032" layer="21"/>
<wire x1="29.845" y1="1.27" x2="31.115" y2="1.27" width="0.2032" layer="21"/>
<wire x1="31.115" y1="1.27" x2="31.75" y2="0.635" width="0.2032" layer="21"/>
<wire x1="31.75" y1="-0.635" x2="31.115" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="31.115" y1="-1.27" x2="29.845" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="29.845" y1="-1.27" x2="29.21" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="32.385" y1="1.27" x2="31.75" y2="0.635" width="0.2032" layer="21"/>
<wire x1="31.75" y1="-0.635" x2="32.385" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="33.655" y1="-1.27" x2="32.385" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="24.765" y1="1.27" x2="26.035" y2="1.27" width="0.2032" layer="21"/>
<wire x1="26.035" y1="1.27" x2="26.67" y2="0.635" width="0.2032" layer="21"/>
<wire x1="26.67" y1="-0.635" x2="26.035" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="26.67" y1="0.635" x2="27.305" y2="1.27" width="0.2032" layer="21"/>
<wire x1="27.305" y1="1.27" x2="28.575" y2="1.27" width="0.2032" layer="21"/>
<wire x1="28.575" y1="1.27" x2="29.21" y2="0.635" width="0.2032" layer="21"/>
<wire x1="29.21" y1="-0.635" x2="28.575" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="28.575" y1="-1.27" x2="27.305" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="27.305" y1="-1.27" x2="26.67" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="21.59" y1="0.635" x2="22.225" y2="1.27" width="0.2032" layer="21"/>
<wire x1="22.225" y1="1.27" x2="23.495" y2="1.27" width="0.2032" layer="21"/>
<wire x1="23.495" y1="1.27" x2="24.13" y2="0.635" width="0.2032" layer="21"/>
<wire x1="24.13" y1="-0.635" x2="23.495" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="23.495" y1="-1.27" x2="22.225" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="22.225" y1="-1.27" x2="21.59" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="24.765" y1="1.27" x2="24.13" y2="0.635" width="0.2032" layer="21"/>
<wire x1="24.13" y1="-0.635" x2="24.765" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="26.035" y1="-1.27" x2="24.765" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="17.145" y1="1.27" x2="18.415" y2="1.27" width="0.2032" layer="21"/>
<wire x1="18.415" y1="1.27" x2="19.05" y2="0.635" width="0.2032" layer="21"/>
<wire x1="19.05" y1="-0.635" x2="18.415" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="19.05" y1="0.635" x2="19.685" y2="1.27" width="0.2032" layer="21"/>
<wire x1="19.685" y1="1.27" x2="20.955" y2="1.27" width="0.2032" layer="21"/>
<wire x1="20.955" y1="1.27" x2="21.59" y2="0.635" width="0.2032" layer="21"/>
<wire x1="21.59" y1="-0.635" x2="20.955" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="20.955" y1="-1.27" x2="19.685" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="19.685" y1="-1.27" x2="19.05" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="17.145" y1="1.27" x2="16.51" y2="0.635" width="0.2032" layer="21"/>
<wire x1="16.51" y1="-0.635" x2="17.145" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="18.415" y1="-1.27" x2="17.145" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="34.925" y1="1.27" x2="34.29" y2="0.635" width="0.2032" layer="21"/>
<wire x1="34.925" y1="1.27" x2="36.195" y2="1.27" width="0.2032" layer="21"/>
<wire x1="36.195" y1="1.27" x2="36.83" y2="0.635" width="0.2032" layer="21"/>
<wire x1="36.83" y1="-0.635" x2="36.195" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="36.195" y1="-1.27" x2="34.925" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="34.29" y1="-0.635" x2="34.925" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="37.465" y1="1.27" x2="36.83" y2="0.635" width="0.2032" layer="21"/>
<wire x1="37.465" y1="1.27" x2="38.735" y2="1.27" width="0.2032" layer="21"/>
<wire x1="38.735" y1="1.27" x2="39.37" y2="0.635" width="0.2032" layer="21"/>
<wire x1="39.37" y1="-0.635" x2="38.735" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="38.735" y1="-1.27" x2="37.465" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="36.83" y1="-0.635" x2="37.465" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="40.005" y1="1.27" x2="39.37" y2="0.635" width="0.2032" layer="21"/>
<wire x1="40.005" y1="1.27" x2="41.275" y2="1.27" width="0.2032" layer="21"/>
<wire x1="41.275" y1="1.27" x2="41.91" y2="0.635" width="0.2032" layer="21"/>
<wire x1="41.91" y1="-0.635" x2="41.275" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="41.275" y1="-1.27" x2="40.005" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="39.37" y1="-0.635" x2="40.005" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="42.545" y1="1.27" x2="41.91" y2="0.635" width="0.2032" layer="21"/>
<wire x1="42.545" y1="1.27" x2="43.815" y2="1.27" width="0.2032" layer="21"/>
<wire x1="43.815" y1="1.27" x2="44.45" y2="0.635" width="0.2032" layer="21"/>
<wire x1="44.45" y1="-0.635" x2="43.815" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="43.815" y1="-1.27" x2="42.545" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="41.91" y1="-0.635" x2="42.545" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="45.085" y1="1.27" x2="44.45" y2="0.635" width="0.2032" layer="21"/>
<wire x1="45.085" y1="1.27" x2="46.355" y2="1.27" width="0.2032" layer="21"/>
<wire x1="46.355" y1="1.27" x2="46.99" y2="0.635" width="0.2032" layer="21"/>
<wire x1="46.99" y1="-0.635" x2="46.355" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="46.355" y1="-1.27" x2="45.085" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="44.45" y1="-0.635" x2="45.085" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="47.625" y1="1.27" x2="46.99" y2="0.635" width="0.2032" layer="21"/>
<wire x1="47.625" y1="1.27" x2="48.895" y2="1.27" width="0.2032" layer="21"/>
<wire x1="48.895" y1="1.27" x2="49.53" y2="0.635" width="0.2032" layer="21"/>
<wire x1="49.53" y1="0.635" x2="49.53" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="49.53" y1="-0.635" x2="48.895" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="48.895" y1="-1.27" x2="47.625" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="46.99" y1="-0.635" x2="47.625" y2="-1.27" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" shape="square" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="4" x="7.62" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="5" x="10.16" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="6" x="12.7" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="7" x="15.24" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="8" x="17.78" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="9" x="20.32" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="10" x="22.86" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="11" x="25.4" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="12" x="27.94" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="13" x="30.48" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="14" x="33.02" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="15" x="35.56" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="16" x="38.1" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="17" x="40.64" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="18" x="43.18" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="19" x="45.72" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="20" x="48.26" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="14.986" y1="-0.254" x2="15.494" y2="0.254" layer="51"/>
<rectangle x1="12.446" y1="-0.254" x2="12.954" y2="0.254" layer="51"/>
<rectangle x1="9.906" y1="-0.254" x2="10.414" y2="0.254" layer="51"/>
<rectangle x1="7.366" y1="-0.254" x2="7.874" y2="0.254" layer="51"/>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
<rectangle x1="32.766" y1="-0.254" x2="33.274" y2="0.254" layer="51"/>
<rectangle x1="30.226" y1="-0.254" x2="30.734" y2="0.254" layer="51"/>
<rectangle x1="27.686" y1="-0.254" x2="28.194" y2="0.254" layer="51"/>
<rectangle x1="25.146" y1="-0.254" x2="25.654" y2="0.254" layer="51"/>
<rectangle x1="22.606" y1="-0.254" x2="23.114" y2="0.254" layer="51"/>
<rectangle x1="20.066" y1="-0.254" x2="20.574" y2="0.254" layer="51"/>
<rectangle x1="17.526" y1="-0.254" x2="18.034" y2="0.254" layer="51"/>
<rectangle x1="35.306" y1="-0.254" x2="35.814" y2="0.254" layer="51"/>
<rectangle x1="37.846" y1="-0.254" x2="38.354" y2="0.254" layer="51"/>
<rectangle x1="40.386" y1="-0.254" x2="40.894" y2="0.254" layer="51"/>
<rectangle x1="42.926" y1="-0.254" x2="43.434" y2="0.254" layer="51"/>
<rectangle x1="45.466" y1="-0.254" x2="45.974" y2="0.254" layer="51"/>
<rectangle x1="48.006" y1="-0.254" x2="48.514" y2="0.254" layer="51"/>
</package>
<package name="LCD_BACKLIGHT_PADS">
<smd name="P$1" x="0" y="0" dx="3.81" dy="3.81" layer="1"/>
<smd name="P$2" x="0" y="6.35" dx="3.81" dy="3.81" layer="1"/>
</package>
<package name="LCD_CFAX">
<wire x1="28.5" y1="18" x2="-15.9" y2="18" width="0.127" layer="21"/>
<wire x1="-15.9" y1="18" x2="-28.5" y2="18" width="0.127" layer="21"/>
<wire x1="-28.5" y1="18" x2="-28.5" y2="-25" width="0.127" layer="21"/>
<wire x1="-28.5" y1="-25" x2="-16.5" y2="-25" width="0.127" layer="21"/>
<wire x1="16.5" y1="-25" x2="28.5" y2="-25" width="0.127" layer="21"/>
<wire x1="28.5" y1="-25" x2="28.5" y2="-9.175" width="0.127" layer="21"/>
<wire x1="28.5" y1="1.46" x2="28.5" y2="18" width="0.127" layer="21"/>
<wire x1="28.5" y1="1.46" x2="34.5" y2="1.46" width="0.127" layer="21"/>
<wire x1="28.5" y1="-9.175" x2="34.5" y2="-9.175" width="0.127" layer="21"/>
<wire x1="34.5" y1="-9.175" x2="34.5" y2="1.46" width="0.127" layer="21"/>
<wire x1="16.5" y1="-25" x2="16.5" y2="-28.5" width="0.127" layer="21"/>
<wire x1="16.5" y1="-28.5" x2="-16.5" y2="-28.5" width="0.127" layer="21"/>
<wire x1="-16.5" y1="-28.5" x2="-16.5" y2="-25" width="0.127" layer="21"/>
<wire x1="2.54" y1="0" x2="-2.54" y2="0" width="0.127" layer="51"/>
<wire x1="0" y1="-2.54" x2="0" y2="6.54" width="0.127" layer="51"/>
<wire x1="-24" y1="16" x2="-16" y2="16" width="0.127" layer="21"/>
<wire x1="-16" y1="16" x2="24" y2="16" width="0.127" layer="21"/>
<wire x1="-24" y1="-16" x2="-24" y2="0" width="0.127" layer="21"/>
<wire x1="-24" y1="0" x2="-24" y2="16" width="0.127" layer="21"/>
<wire x1="24" y1="-16" x2="24" y2="16" width="0.127" layer="21"/>
<wire x1="-24" y1="-16" x2="24" y2="-16" width="0.127" layer="21"/>
<wire x1="-24" y1="0" x2="0" y2="0" width="0.127" layer="51"/>
<wire x1="-16" y1="16" x2="-15.9" y2="16" width="0.127" layer="21"/>
<wire x1="-15.9" y1="16" x2="-15.9" y2="18" width="0.127" layer="51"/>
<smd name="P$1" x="-4.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$2" x="-3.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$3" x="-3.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$4" x="-2.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$5" x="-2.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$6" x="-1.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$7" x="-1.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$8" x="-0.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$9" x="-0.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$10" x="0.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$11" x="0.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$12" x="1.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$13" x="1.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$14" x="2.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$15" x="2.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$16" x="3.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$17" x="3.75" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$18" x="4.25" y="11.05" dx="1.3" dy="0.25" layer="1" rot="R90"/>
<smd name="P$19" x="-6.6" y="8.85" dx="1.4" dy="2" layer="1"/>
<smd name="P$20" x="6.7" y="8.85" dx="1.4" dy="2" layer="1"/>
<smd name="P$21" x="6.1" y="7.75" dx="1.8" dy="2.2" layer="1"/>
<smd name="P$22" x="-6.1" y="7.75" dx="1.8" dy="2.2" layer="1"/>
</package>
<package name="NOKIA6100_LCD">
<wire x1="1.016" y1="0" x2="1.016" y2="40.132" width="0.2032" layer="21"/>
<wire x1="1.016" y1="40.132" x2="36.576" y2="40.132" width="0.2032" layer="21"/>
<wire x1="36.576" y1="40.132" x2="36.576" y2="0" width="0.2032" layer="21"/>
<wire x1="36.576" y1="0" x2="1.016" y2="0" width="0.2032" layer="21"/>
<wire x1="32.766" y1="30.48" x2="32.766" y2="3.556" width="0.2032" layer="21"/>
<wire x1="4.826" y1="30.48" x2="29.21" y2="30.48" width="0.2032" layer="21"/>
<wire x1="29.21" y1="30.48" x2="32.766" y2="30.48" width="0.2032" layer="21"/>
<wire x1="4.826" y1="30.48" x2="4.826" y2="3.556" width="0.2032" layer="21"/>
<wire x1="4.826" y1="3.556" x2="32.766" y2="3.556" width="0.2032" layer="21"/>
<wire x1="28.956" y1="30.48" x2="29.21" y2="30.48" width="0.127" layer="21"/>
<wire x1="24.257" y1="45.7962" x2="29.337" y2="45.7962" width="0.2032" layer="21"/>
<wire x1="29.337" y1="40.7162" x2="24.257" y2="40.7162" width="0.2032" layer="21"/>
<wire x1="24.25" y1="40.72" x2="24.25" y2="41.61" width="0.2032" layer="21"/>
<wire x1="29.35" y1="40.72" x2="29.35" y2="41.59" width="0.2032" layer="21"/>
<wire x1="29.34" y1="45.78" x2="29.34" y2="45" width="0.2032" layer="21"/>
<wire x1="24.26" y1="45.79" x2="24.26" y2="45" width="0.2032" layer="21"/>
<smd name="5" x="24.2554" y="42.311" dx="0.3" dy="1.6" layer="1" rot="R90"/>
<smd name="4" x="24.2554" y="42.811" dx="0.3" dy="1.6" layer="1" rot="R90"/>
<smd name="3" x="24.2554" y="43.311" dx="0.3" dy="1.6" layer="1" rot="R90"/>
<smd name="2" x="24.2554" y="43.811" dx="0.3" dy="1.6" layer="1" rot="R90"/>
<smd name="1" x="24.2554" y="44.311" dx="0.3" dy="1.6" layer="1" rot="R90"/>
<smd name="10" x="29.3894" y="44.303" dx="0.3" dy="1.6" layer="1" rot="R270"/>
<smd name="9" x="29.3894" y="43.803" dx="0.3" dy="1.6" layer="1" rot="R270"/>
<smd name="8" x="29.3894" y="43.303" dx="0.3" dy="1.6" layer="1" rot="R270"/>
<smd name="7" x="29.3894" y="42.803" dx="0.3" dy="1.6" layer="1" rot="R270"/>
<smd name="6" x="29.3894" y="42.303" dx="0.3" dy="1.6" layer="1" rot="R270"/>
</package>
<package name="SCREENKEY-TFT128">
<wire x1="-14.29" y1="-16.19" x2="-14.29" y2="16.21" width="0.127" layer="51"/>
<wire x1="-14.29" y1="16.21" x2="14.31" y2="16.21" width="0.127" layer="51"/>
<wire x1="14.31" y1="16.21" x2="14.31" y2="-16.19" width="0.127" layer="51"/>
<wire x1="14.31" y1="-16.19" x2="-14.29" y2="-16.19" width="0.127" layer="51"/>
<wire x1="-12.09" y1="13.41" x2="-12.19" y2="-10.89" width="0.127" layer="51"/>
<wire x1="-12.19" y1="-10.89" x2="11.81" y2="-10.89" width="0.127" layer="51"/>
<wire x1="11.81" y1="-10.89" x2="11.91" y2="13.41" width="0.127" layer="51"/>
<wire x1="11.91" y1="13.41" x2="-12.09" y2="13.41" width="0.127" layer="51"/>
<wire x1="13.81" y1="-13.69" x2="11.81" y2="-15.69" width="0.127" layer="51" style="shortdash" curve="90"/>
<wire x1="-11.69" y1="-15.59" x2="-13.69" y2="-13.59" width="0.127" layer="51" style="shortdash" curve="90"/>
<wire x1="11.81" y1="15.71" x2="13.81" y2="13.71" width="0.127" layer="51" style="shortdash" curve="90"/>
<wire x1="-13.79" y1="13.71" x2="-11.79" y2="15.71" width="0.127" layer="51" style="shortdash" curve="90"/>
<hole x="10.01" y="12.01" drill="1.6"/>
<hole x="10.01" y="-11.99" drill="1.6"/>
<hole x="0.01" y="0.01" drill="4"/>
</package>
<package name="7-SEGMENT-4DIGIT">
<wire x1="-20.0914" y1="6.4008" x2="20.0914" y2="6.4008" width="0.2032" layer="21"/>
<wire x1="20.0914" y1="6.4008" x2="20.0914" y2="-6.4008" width="0.2032" layer="21"/>
<wire x1="20.0914" y1="-6.4008" x2="-20.0914" y2="-6.4008" width="0.2032" layer="21"/>
<wire x1="-20.0914" y1="-6.4008" x2="-20.0914" y2="6.4008" width="0.2032" layer="21"/>
<pad name="1" x="-8.89" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="2" x="-6.35" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="3" x="-3.81" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="4" x="-1.27" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="5" x="1.27" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="6" x="3.81" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="7" x="6.35" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="8" x="8.89" y="-5.08" drill="0.9" diameter="1.8796"/>
<pad name="9" x="8.89" y="5.08" drill="0.9" diameter="1.8796"/>
<pad name="11" x="3.81" y="5.08" drill="0.9" diameter="1.8796"/>
<pad name="13" x="-1.27" y="5.08" drill="0.9" diameter="1.8796"/>
<pad name="14" x="-3.81" y="5.08" drill="0.9" diameter="1.8796"/>
<pad name="15" x="-6.35" y="5.08" drill="0.9" diameter="1.8796"/>
<pad name="16" x="-8.89" y="5.08" drill="0.9" diameter="1.8796"/>
</package>
<package name="7-SEGMENT-4DIGIT-YOUNGSUN">
<description>This is a package for the 4-digit 7-segment RED LED from Young Sun.</description>
<wire x1="-20.09" y1="6.4" x2="20.09" y2="6.4" width="0.127" layer="51"/>
<wire x1="-20.09" y1="-6.4" x2="20.09" y2="-6.4" width="0.127" layer="51"/>
<wire x1="-20.09" y1="6.4" x2="-20.09" y2="-6.4" width="0.127" layer="51"/>
<wire x1="20.09" y1="6.4" x2="20.09" y2="-6.4" width="0.127" layer="51"/>
<wire x1="-18.161" y1="5.334" x2="-18.542" y2="0.508" width="0.127" layer="51"/>
<wire x1="-13.081" y1="5.334" x2="-13.462" y2="0.508" width="0.127" layer="51"/>
<wire x1="-18.669" y1="-0.508" x2="-19.05" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-13.589" y1="-0.508" x2="-13.97" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-17.907" y1="0" x2="-13.97" y2="0" width="0.127" layer="51"/>
<wire x1="-17.653" y1="5.588" x2="-13.335" y2="5.588" width="0.127" layer="51"/>
<wire x1="-18.542" y1="-5.715" x2="-14.351" y2="-5.715" width="0.127" layer="51"/>
<wire x1="-9.271" y1="5.334" x2="-9.652" y2="0.508" width="0.127" layer="51"/>
<wire x1="-4.191" y1="5.334" x2="-4.572" y2="0.508" width="0.127" layer="51"/>
<wire x1="-9.779" y1="-0.508" x2="-10.16" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-4.699" y1="-0.508" x2="-5.08" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-9.017" y1="0" x2="-5.08" y2="0" width="0.127" layer="51"/>
<wire x1="-8.763" y1="5.588" x2="-4.445" y2="5.588" width="0.127" layer="51"/>
<wire x1="-9.652" y1="-5.715" x2="-5.461" y2="-5.715" width="0.127" layer="51"/>
<wire x1="3.429" y1="5.334" x2="3.048" y2="0.508" width="0.127" layer="51"/>
<wire x1="8.509" y1="5.334" x2="8.128" y2="0.508" width="0.127" layer="51"/>
<wire x1="2.921" y1="-0.508" x2="2.54" y2="-5.334" width="0.127" layer="51"/>
<wire x1="8.001" y1="-0.508" x2="7.62" y2="-5.334" width="0.127" layer="51"/>
<wire x1="3.683" y1="0" x2="7.62" y2="0" width="0.127" layer="51"/>
<wire x1="3.937" y1="5.588" x2="8.255" y2="5.588" width="0.127" layer="51"/>
<wire x1="3.048" y1="-5.715" x2="7.239" y2="-5.715" width="0.127" layer="51"/>
<wire x1="13.589" y1="5.334" x2="13.208" y2="0.508" width="0.127" layer="51"/>
<wire x1="18.669" y1="5.334" x2="18.288" y2="0.508" width="0.127" layer="51"/>
<wire x1="13.081" y1="-0.508" x2="12.7" y2="-5.334" width="0.127" layer="51"/>
<wire x1="18.161" y1="-0.508" x2="17.78" y2="-5.334" width="0.127" layer="51"/>
<wire x1="13.843" y1="0" x2="17.78" y2="0" width="0.127" layer="51"/>
<wire x1="14.097" y1="5.588" x2="18.415" y2="5.588" width="0.127" layer="51"/>
<wire x1="13.208" y1="-5.715" x2="17.399" y2="-5.715" width="0.127" layer="51"/>
<wire x1="-20.09" y1="6.4" x2="-20.09" y2="-6.4" width="0.127" layer="21"/>
<wire x1="-20.09" y1="6.4" x2="20.09" y2="6.4" width="0.127" layer="21"/>
<wire x1="-20.09" y1="-6.4" x2="20.09" y2="-6.4" width="0.127" layer="21"/>
<wire x1="20.09" y1="6.4" x2="20.09" y2="-6.4" width="0.127" layer="21"/>
<circle x="-12.7" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="-3.81" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="8.89" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="19.05" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="-0.635" y="1.524" radius="0.635" width="0.127" layer="51"/>
<circle x="-0.889" y="-2.159" radius="0.635" width="0.127" layer="51"/>
<circle x="11.049" y="5.207" radius="0.635" width="0.127" layer="51"/>
<circle x="11.065" y="5.215" radius="0.635" width="0.127" layer="21"/>
<pad name="1" x="-8.89" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="2" x="-6.35" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="3" x="-3.81" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="4" x="-1.27" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="5" x="1.27" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="6" x="3.81" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="8" x="8.89" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="7" x="6.35" y="-5.08" drill="0.8" diameter="1.778"/>
<pad name="9" x="8.89" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="14" x="-3.81" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="13" x="-1.27" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="12" x="1.27" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="10" x="6.35" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="11" x="3.81" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="15" x="-6.35" y="5.08" drill="0.8" diameter="1.778"/>
<pad name="16" x="-8.89" y="5.08" drill="0.8" diameter="1.778"/>
<text x="-20" y="6.746" size="0.4064" layer="25">&gt;NAME</text>
<text x="-20.127" y="-7.238" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="7-SEGMENT-4DIGIT_LONGPADS_FOR_POGOBED">
<pad name="1" x="-8.89" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="2" x="-6.35" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="3" x="-3.81" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="4" x="-1.27" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="5" x="1.27" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="6" x="3.81" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="7" x="6.35" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="8" x="8.89" y="-5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="9" x="8.89" y="5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="11" x="3.81" y="5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="13" x="-1.27" y="5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="14" x="-3.81" y="5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="15" x="-6.35" y="5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
<pad name="16" x="-8.89" y="5.08" drill="1.016" diameter="1.8796" shape="long" rot="R90"/>
</package>
<package name="7-SEGMENT-4DIGIT-YOUNGSUN-LONGPADS">
<wire x1="-20.09" y1="6.4" x2="20.09" y2="6.4" width="0.127" layer="51"/>
<wire x1="-20.09" y1="-6.4" x2="20.09" y2="-6.4" width="0.127" layer="51"/>
<wire x1="-20.09" y1="6.4" x2="-20.09" y2="-6.4" width="0.127" layer="51"/>
<wire x1="20.09" y1="6.4" x2="20.09" y2="-6.4" width="0.127" layer="51"/>
<wire x1="-18.161" y1="5.334" x2="-18.542" y2="0.508" width="0.127" layer="51"/>
<wire x1="-13.081" y1="5.334" x2="-13.462" y2="0.508" width="0.127" layer="51"/>
<wire x1="-18.669" y1="-0.508" x2="-19.05" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-13.589" y1="-0.508" x2="-13.97" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-17.907" y1="0" x2="-13.97" y2="0" width="0.127" layer="51"/>
<wire x1="-17.653" y1="5.588" x2="-13.335" y2="5.588" width="0.127" layer="51"/>
<wire x1="-18.542" y1="-5.715" x2="-14.351" y2="-5.715" width="0.127" layer="51"/>
<wire x1="-9.271" y1="5.334" x2="-9.652" y2="0.508" width="0.127" layer="51"/>
<wire x1="-4.191" y1="5.334" x2="-4.572" y2="0.508" width="0.127" layer="51"/>
<wire x1="-9.779" y1="-0.508" x2="-10.16" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-4.699" y1="-0.508" x2="-5.08" y2="-5.334" width="0.127" layer="51"/>
<wire x1="-9.017" y1="0" x2="-5.08" y2="0" width="0.127" layer="51"/>
<wire x1="-8.763" y1="5.588" x2="-4.445" y2="5.588" width="0.127" layer="51"/>
<wire x1="-9.652" y1="-5.715" x2="-5.461" y2="-5.715" width="0.127" layer="51"/>
<wire x1="3.429" y1="5.334" x2="3.048" y2="0.508" width="0.127" layer="51"/>
<wire x1="8.509" y1="5.334" x2="8.128" y2="0.508" width="0.127" layer="51"/>
<wire x1="2.921" y1="-0.508" x2="2.54" y2="-5.334" width="0.127" layer="51"/>
<wire x1="8.001" y1="-0.508" x2="7.62" y2="-5.334" width="0.127" layer="51"/>
<wire x1="3.683" y1="0" x2="7.62" y2="0" width="0.127" layer="51"/>
<wire x1="3.937" y1="5.588" x2="8.255" y2="5.588" width="0.127" layer="51"/>
<wire x1="3.048" y1="-5.715" x2="7.239" y2="-5.715" width="0.127" layer="51"/>
<wire x1="13.589" y1="5.334" x2="13.208" y2="0.508" width="0.127" layer="51"/>
<wire x1="18.669" y1="5.334" x2="18.288" y2="0.508" width="0.127" layer="51"/>
<wire x1="13.081" y1="-0.508" x2="12.7" y2="-5.334" width="0.127" layer="51"/>
<wire x1="18.161" y1="-0.508" x2="17.78" y2="-5.334" width="0.127" layer="51"/>
<wire x1="13.843" y1="0" x2="17.78" y2="0" width="0.127" layer="51"/>
<wire x1="14.097" y1="5.588" x2="18.415" y2="5.588" width="0.127" layer="51"/>
<wire x1="13.208" y1="-5.715" x2="17.399" y2="-5.715" width="0.127" layer="51"/>
<wire x1="-20.09" y1="6.4" x2="-20.09" y2="-6.4" width="0.127" layer="21"/>
<wire x1="-20.09" y1="6.4" x2="20.09" y2="6.4" width="0.127" layer="21"/>
<wire x1="-20.09" y1="-6.4" x2="20.09" y2="-6.4" width="0.127" layer="21"/>
<wire x1="20.09" y1="6.4" x2="20.09" y2="-6.4" width="0.127" layer="21"/>
<circle x="-12.7" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="-3.81" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="8.89" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="19.05" y="-5.08" radius="0.635" width="0.127" layer="51"/>
<circle x="-0.635" y="1.524" radius="0.635" width="0.127" layer="51"/>
<circle x="-0.889" y="-2.159" radius="0.635" width="0.127" layer="51"/>
<circle x="11.049" y="5.207" radius="0.635" width="0.127" layer="51"/>
<pad name="1" x="-8.89" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="2" x="-6.35" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="3" x="-3.81" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="4" x="-1.27" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="5" x="1.27" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="6" x="3.81" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="8" x="8.89" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="7" x="6.35" y="-5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="9" x="8.89" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="14" x="-3.81" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="13" x="-1.27" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="12" x="1.27" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="10" x="6.35" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="11" x="3.81" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="15" x="-6.35" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<pad name="16" x="-8.89" y="5.08" drill="1.016" diameter="1.778" shape="long" rot="R90"/>
<text x="-20" y="6.746" size="0.4064" layer="25">&gt;NAME</text>
<text x="-20.127" y="-7.238" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="7-SEGMENT-DISPLAY">
<wire x1="6.2" y1="8.5" x2="-6.2" y2="8.5" width="0.2032" layer="21"/>
<wire x1="-6.2" y1="8.5" x2="-6.2" y2="-8.5" width="0.2032" layer="21"/>
<wire x1="-6.2" y1="-8.5" x2="6.2" y2="-8.5" width="0.2032" layer="21"/>
<wire x1="6.2" y1="-8.5" x2="6.2" y2="8.5" width="0.2032" layer="21"/>
<wire x1="4.1" y1="7.2" x2="-1.2" y2="7.2" width="0.2032" layer="51"/>
<wire x1="-1.2" y1="7.2" x2="-1.9" y2="6.6" width="0.2032" layer="51"/>
<wire x1="-1.9" y1="6.6" x2="-1" y2="5.7" width="0.2032" layer="51"/>
<wire x1="-1" y1="5.7" x2="3.3" y2="5.7" width="0.2032" layer="51"/>
<wire x1="3.3" y1="5.7" x2="4.5" y2="6.6" width="0.2032" layer="51"/>
<wire x1="4.5" y1="6.6" x2="4.1" y2="7.2" width="0.2032" layer="51"/>
<wire x1="4.8" y1="6.3" x2="5.3" y2="5.8" width="0.2032" layer="51"/>
<wire x1="5.3" y1="5.8" x2="4.4" y2="0.9" width="0.2032" layer="51"/>
<wire x1="4.4" y1="0.9" x2="3.5" y2="0.2" width="0.2032" layer="51"/>
<wire x1="3.5" y1="0.2" x2="2.8" y2="1.1" width="0.2032" layer="51"/>
<wire x1="2.8" y1="1.1" x2="3.6" y2="5.3" width="0.2032" layer="51"/>
<wire x1="3.6" y1="5.3" x2="4.8" y2="6.3" width="0.2032" layer="51"/>
<wire x1="-2.3" y1="6.4" x2="-1.4" y2="5.4" width="0.2032" layer="51"/>
<wire x1="-1.4" y1="5.4" x2="-2.2" y2="1.1" width="0.2032" layer="51"/>
<wire x1="-2.2" y1="1.1" x2="-3.3" y2="0.3" width="0.2032" layer="51"/>
<wire x1="-3.3" y1="0.3" x2="-3.8" y2="1" width="0.2032" layer="51"/>
<wire x1="-3.8" y1="1" x2="-2.9" y2="5.8" width="0.2032" layer="51"/>
<wire x1="-2.9" y1="5.8" x2="-2.3" y2="6.4" width="0.2032" layer="51"/>
<wire x1="-2" y1="0.7" x2="2.5" y2="0.7" width="0.2032" layer="51"/>
<wire x1="2.5" y1="0.7" x2="3.1" y2="0" width="0.2032" layer="51"/>
<wire x1="3.1" y1="0" x2="2.2" y2="-0.8" width="0.2032" layer="51"/>
<wire x1="2.2" y1="-0.8" x2="-2.4" y2="-0.8" width="0.2032" layer="51"/>
<wire x1="-2.4" y1="-0.8" x2="-2.9" y2="0" width="0.2032" layer="51"/>
<wire x1="-2.9" y1="0" x2="-2" y2="0.7" width="0.2032" layer="51"/>
<wire x1="3.4" y1="-0.3" x2="4.1" y2="-1.2" width="0.2032" layer="51"/>
<wire x1="4.1" y1="-1.2" x2="3.2" y2="-5.6" width="0.2032" layer="51"/>
<wire x1="3.2" y1="-5.6" x2="2.3" y2="-6.2" width="0.2032" layer="51"/>
<wire x1="2.3" y1="-6.2" x2="1.6" y2="-5.5" width="0.2032" layer="51"/>
<wire x1="1.6" y1="-5.5" x2="2.5" y2="-1.1" width="0.2032" layer="51"/>
<wire x1="2.5" y1="-1.1" x2="3.4" y2="-0.3" width="0.2032" layer="51"/>
<wire x1="1.3" y1="-5.8" x2="2" y2="-6.5" width="0.2032" layer="51"/>
<wire x1="2" y1="-6.5" x2="1.2" y2="-7.2" width="0.2032" layer="51"/>
<wire x1="1.2" y1="-7.2" x2="-3.4" y2="-7.2" width="0.2032" layer="51"/>
<wire x1="-3.4" y1="-7.2" x2="-4" y2="-6.6" width="0.2032" layer="51"/>
<wire x1="-4" y1="-6.6" x2="-3.1" y2="-5.8" width="0.2032" layer="51"/>
<wire x1="-3.1" y1="-5.8" x2="1.3" y2="-5.8" width="0.2032" layer="51"/>
<wire x1="-3.4" y1="-5.4" x2="-2.6" y2="-1.3" width="0.2032" layer="51"/>
<wire x1="-2.6" y1="-1.3" x2="-3.3" y2="-0.3" width="0.2032" layer="51"/>
<wire x1="-3.3" y1="-0.3" x2="-4.2" y2="-1" width="0.2032" layer="51"/>
<wire x1="-4.2" y1="-1" x2="-5" y2="-5.7" width="0.2032" layer="51"/>
<wire x1="-5" y1="-5.7" x2="-4.4" y2="-6.3" width="0.2032" layer="51"/>
<wire x1="-4.4" y1="-6.3" x2="-3.4" y2="-5.4" width="0.2032" layer="51"/>
<circle x="5.1" y="-6.3" radius="0.7211" width="0.2032" layer="51"/>
<circle x="5" y="-6" radius="0.6" width="0.2032" layer="21"/>
<pad name="1" x="-5.08" y="-7.62" drill="0.65" diameter="1.8796"/>
<pad name="2" x="-2.54" y="-7.62" drill="0.65" diameter="1.8796"/>
<pad name="3" x="0" y="-7.62" drill="0.65" diameter="1.8796"/>
<pad name="4" x="2.54" y="-7.62" drill="0.65" diameter="1.8796"/>
<pad name="5" x="5.08" y="-7.62" drill="0.65" diameter="1.8796"/>
<pad name="6" x="5.08" y="7.62" drill="0.65" diameter="1.8796"/>
<pad name="7" x="2.54" y="7.62" drill="0.65" diameter="1.8796"/>
<pad name="8" x="0" y="7.62" drill="0.65" diameter="1.8796"/>
<pad name="9" x="-2.54" y="7.62" drill="0.65" diameter="1.8796"/>
<pad name="10" x="-5.08" y="7.62" drill="0.65" diameter="1.8796"/>
<text x="-8.89" y="-11.43" size="1.27" layer="51" ratio="15">160-1576-5-ND</text>
</package>
<package name="7-SEGMENT-1&quot;PTH">
<description>7 Segment display Storefront SKU#: COM-08546</description>
<wire x1="-9" y1="-12.5" x2="-9" y2="12.5" width="0.254" layer="21"/>
<wire x1="-9" y1="12.5" x2="9" y2="12.5" width="0.254" layer="21"/>
<wire x1="9" y1="12.5" x2="9" y2="-11" width="0.254" layer="21"/>
<wire x1="7.5" y1="-12.5" x2="-9" y2="-12.5" width="0.254" layer="21"/>
<wire x1="-2.3" y1="6.4" x2="-1.4" y2="5.4" width="0.127" layer="51"/>
<wire x1="-1.4" y1="5.4" x2="-2.2" y2="1.1" width="0.127" layer="51"/>
<wire x1="-2.2" y1="1.1" x2="-3.3" y2="0.3" width="0.127" layer="51"/>
<wire x1="-3.3" y1="0.3" x2="-3.8" y2="1" width="0.127" layer="51"/>
<wire x1="-3.8" y1="1" x2="-2.9" y2="5.8" width="0.127" layer="51"/>
<wire x1="-2.9" y1="5.8" x2="-2.3" y2="6.4" width="0.127" layer="51"/>
<wire x1="-2.9" y1="0" x2="-2" y2="0.7" width="0.127" layer="51"/>
<wire x1="-2" y1="0.7" x2="2.5" y2="0.7" width="0.127" layer="51"/>
<wire x1="2.5" y1="0.7" x2="3.1" y2="0" width="0.127" layer="51"/>
<wire x1="3.1" y1="0" x2="2.2" y2="-0.8" width="0.127" layer="51"/>
<wire x1="2.2" y1="-0.8" x2="-2.4" y2="-0.8" width="0.127" layer="51"/>
<wire x1="-2.4" y1="-0.8" x2="-2.9" y2="0" width="0.127" layer="51"/>
<wire x1="4.3" y1="6.4" x2="5.2" y2="5.4" width="0.127" layer="51"/>
<wire x1="5.2" y1="5.4" x2="4.4" y2="1.1" width="0.127" layer="51"/>
<wire x1="4.4" y1="1.1" x2="3.3" y2="0.3" width="0.127" layer="51"/>
<wire x1="3.3" y1="0.3" x2="2.8" y2="1" width="0.127" layer="51"/>
<wire x1="2.8" y1="1" x2="3.7" y2="5.8" width="0.127" layer="51"/>
<wire x1="3.7" y1="5.8" x2="4.3" y2="6.4" width="0.127" layer="51"/>
<wire x1="-3.4" y1="-0.2" x2="-2.5" y2="-1.2" width="0.127" layer="51"/>
<wire x1="-2.5" y1="-1.2" x2="-3.3" y2="-5.5" width="0.127" layer="51"/>
<wire x1="-3.3" y1="-5.5" x2="-4.4" y2="-6.3" width="0.127" layer="51"/>
<wire x1="-4.4" y1="-6.3" x2="-4.9" y2="-5.6" width="0.127" layer="51"/>
<wire x1="-4.9" y1="-5.6" x2="-4" y2="-0.8" width="0.127" layer="51"/>
<wire x1="-4" y1="-0.8" x2="-3.4" y2="-0.2" width="0.127" layer="51"/>
<wire x1="3.2" y1="-0.4" x2="4.1" y2="-1.4" width="0.127" layer="51"/>
<wire x1="4.1" y1="-1.4" x2="3.3" y2="-5.7" width="0.127" layer="51"/>
<wire x1="3.3" y1="-5.7" x2="2.2" y2="-6.5" width="0.127" layer="51"/>
<wire x1="2.2" y1="-6.5" x2="1.7" y2="-5.8" width="0.127" layer="51"/>
<wire x1="1.7" y1="-5.8" x2="2.6" y2="-1" width="0.127" layer="51"/>
<wire x1="2.6" y1="-1" x2="3.2" y2="-0.4" width="0.127" layer="51"/>
<wire x1="-1.9" y1="6.7" x2="-1" y2="7.4" width="0.127" layer="51"/>
<wire x1="-1" y1="7.4" x2="3.5" y2="7.4" width="0.127" layer="51"/>
<wire x1="3.5" y1="7.4" x2="4.1" y2="6.7" width="0.127" layer="51"/>
<wire x1="4.1" y1="6.7" x2="3.2" y2="5.9" width="0.127" layer="51"/>
<wire x1="3.2" y1="5.9" x2="-1.4" y2="5.9" width="0.127" layer="51"/>
<wire x1="-1.4" y1="5.9" x2="-1.9" y2="6.7" width="0.127" layer="51"/>
<wire x1="-4.1" y1="-6.6" x2="-3.2" y2="-5.9" width="0.127" layer="51"/>
<wire x1="-3.2" y1="-5.9" x2="1.3" y2="-5.9" width="0.127" layer="51"/>
<wire x1="1.3" y1="-5.9" x2="1.9" y2="-6.6" width="0.127" layer="51"/>
<wire x1="1.9" y1="-6.6" x2="1" y2="-7.4" width="0.127" layer="51"/>
<wire x1="1" y1="-7.4" x2="-3.6" y2="-7.4" width="0.127" layer="51"/>
<wire x1="-3.6" y1="-7.4" x2="-4.1" y2="-6.6" width="0.127" layer="51"/>
<wire x1="9" y1="-11" x2="7.5" y2="-12.5" width="0.254" layer="21"/>
<circle x="7" y="-8" radius="0.6" width="0.2032" layer="21"/>
<circle x="5.5" y="-7.2" radius="0.7211" width="0.2032" layer="51"/>
<circle x="-6.1" y="-7.3" radius="0.7211" width="0.2032" layer="51"/>
<pad name="6" x="5.08" y="10.16" drill="1" diameter="1.8796"/>
<pad name="7" x="2.54" y="10.16" drill="1" diameter="1.8796"/>
<pad name="8" x="0" y="10.16" drill="1" diameter="1.8796"/>
<pad name="9" x="-2.54" y="10.16" drill="1" diameter="1.8796"/>
<pad name="10" x="-5.08" y="10.16" drill="1" diameter="1.8796"/>
<pad name="1" x="-5.08" y="-10.16" drill="1" diameter="1.8796"/>
<pad name="2" x="-2.54" y="-10.16" drill="1" diameter="1.8796"/>
<pad name="3" x="0" y="-10.16" drill="1" diameter="1.8796"/>
<pad name="4" x="2.54" y="-10.16" drill="1" diameter="1.8796"/>
<pad name="5" x="5.08" y="-10.16" drill="1" diameter="1.8796"/>
</package>
<package name="7-SEGMENT-4DIGIT-COUNTER">
<wire x1="-32" y1="13" x2="32" y2="13" width="0.254" layer="21"/>
<wire x1="32" y1="13" x2="32" y2="-13" width="0.254" layer="21"/>
<wire x1="32" y1="-13" x2="-32" y2="-13" width="0.254" layer="21"/>
<wire x1="-32" y1="-13" x2="-32" y2="13" width="0.254" layer="21"/>
<pad name="1" x="-6.35" y="-10.9982" drill="0.9" diameter="1.8796"/>
<pad name="2" x="-3.81" y="-10.9982" drill="0.9" diameter="1.8796"/>
<pad name="3" x="-1.27" y="-10.9982" drill="0.9" diameter="1.8796"/>
<pad name="4" x="1.27" y="-10.9982" drill="0.9" diameter="1.8796"/>
<pad name="5" x="3.81" y="-10.9982" drill="0.9" diameter="1.8796"/>
<pad name="6" x="6.35" y="-10.9982" drill="0.9" diameter="1.8796"/>
<pad name="7" x="6.35" y="10.9982" drill="0.9" diameter="1.8796"/>
<pad name="8" x="3.81" y="10.9982" drill="0.9" diameter="1.8796"/>
<pad name="9" x="1.27" y="10.9982" drill="0.9" diameter="1.8796"/>
<pad name="10" x="-1.27" y="10.9982" drill="0.9" diameter="1.8796"/>
<pad name="11" x="-3.81" y="10.9982" drill="0.9" diameter="1.8796"/>
<pad name="12" x="-6.35" y="10.9982" drill="0.9" diameter="1.8796"/>
<wire x1="-25.2" y1="7.8" x2="-23.8" y2="6.5" width="0.254" layer="51"/>
<wire x1="-23.8" y1="6.5" x2="-25" y2="2.4" width="0.254" layer="51"/>
<wire x1="-25" y1="2.4" x2="-27" y2="0.5" width="0.254" layer="51"/>
<wire x1="-27" y1="0.5" x2="-27.9" y2="1.5" width="0.254" layer="51"/>
<wire x1="-27.9" y1="1.5" x2="-26.3" y2="7.2" width="0.254" layer="51"/>
<wire x1="-26.3" y1="7.2" x2="-25.2" y2="7.8" width="0.254" layer="51"/>
<wire x1="-26.7" y1="0.1" x2="-25.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="-25.5" y1="1.2" x2="-19.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="-19.5" y1="1.2" x2="-18.5" y2="0.1" width="0.254" layer="51"/>
<wire x1="-18.5" y1="0.1" x2="-20" y2="-1.2" width="0.254" layer="51"/>
<wire x1="-20" y1="-1.2" x2="-25.6" y2="-1.2" width="0.254" layer="51"/>
<wire x1="-25.6" y1="-1.2" x2="-26.7" y2="0.1" width="0.254" layer="51"/>
<wire x1="-16.1" y1="7.7" x2="-15.2" y2="6.9" width="0.254" layer="51"/>
<wire x1="-15.2" y1="6.9" x2="-16.6" y2="1.2" width="0.254" layer="51"/>
<wire x1="-16.6" y1="1.2" x2="-17.9" y2="0.4" width="0.254" layer="51"/>
<wire x1="-17.9" y1="0.4" x2="-18.9" y2="1.5" width="0.254" layer="51"/>
<wire x1="-18.9" y1="1.5" x2="-17.6" y2="6.3" width="0.254" layer="51"/>
<wire x1="-17.6" y1="6.3" x2="-16.1" y2="7.7" width="0.254" layer="51"/>
<wire x1="-27.4" y1="0" x2="-26.1" y2="-1.6" width="0.254" layer="51"/>
<wire x1="-26.1" y1="-1.6" x2="-27.2" y2="-5.9" width="0.254" layer="51"/>
<wire x1="-27.2" y1="-5.9" x2="-29.3" y2="-7.5" width="0.254" layer="51"/>
<wire x1="-29.3" y1="-7.5" x2="-30.1" y2="-6.6" width="0.254" layer="51"/>
<wire x1="-30.1" y1="-6.6" x2="-28.7" y2="-1.4" width="0.254" layer="51"/>
<wire x1="-28.7" y1="-1.4" x2="-27.4" y2="0" width="0.254" layer="51"/>
<wire x1="-18.3" y1="-0.4" x2="-17.4" y2="-1.4" width="0.254" layer="51"/>
<wire x1="-17.4" y1="-1.4" x2="-18.6" y2="-6.3" width="0.254" layer="51"/>
<wire x1="-18.6" y1="-6.3" x2="-20" y2="-7.7" width="0.254" layer="51"/>
<wire x1="-20" y1="-7.7" x2="-21.2" y2="-6.2" width="0.254" layer="51"/>
<wire x1="-21.2" y1="-6.2" x2="-19.8" y2="-1.8" width="0.254" layer="51"/>
<wire x1="-19.8" y1="-1.8" x2="-18.3" y2="-0.4" width="0.254" layer="51"/>
<wire x1="-24.5" y1="7.9" x2="-23.4" y2="9" width="0.254" layer="51" curve="-3.579821"/>
<wire x1="-23.4" y1="9" x2="-17" y2="9" width="0.254" layer="51"/>
<wire x1="-17" y1="9" x2="-16.4" y2="8.1" width="0.254" layer="51"/>
<wire x1="-16.4" y1="8.1" x2="-17.9" y2="6.7" width="0.254" layer="51"/>
<wire x1="-17.9" y1="6.7" x2="-23.2" y2="6.7" width="0.254" layer="51"/>
<wire x1="-23.2" y1="6.7" x2="-24.5" y2="7.9" width="0.254" layer="51"/>
<wire x1="-28.7" y1="-7.8" x2="-26.9" y2="-6.4" width="0.254" layer="51"/>
<wire x1="-26.9" y1="-6.4" x2="-21.7" y2="-6.4" width="0.254" layer="51"/>
<wire x1="-21.7" y1="-6.4" x2="-20.4" y2="-8.1" width="0.254" layer="51"/>
<wire x1="-20.4" y1="-8.1" x2="-21.1" y2="-8.8" width="0.254" layer="51"/>
<wire x1="-21.1" y1="-8.8" x2="-28.1" y2="-8.8" width="0.254" layer="51"/>
<wire x1="-28.1" y1="-8.8" x2="-28.7" y2="-7.8" width="0.254" layer="51"/>
<circle x="-16.8" y="-7.6" radius="1.17046875" width="0.254" layer="51"/>
<wire x1="-10.2" y1="7.8" x2="-8.8" y2="6.5" width="0.254" layer="51"/>
<wire x1="-8.8" y1="6.5" x2="-10" y2="2.4" width="0.254" layer="51"/>
<wire x1="-10" y1="2.4" x2="-12" y2="0.5" width="0.254" layer="51"/>
<wire x1="-12" y1="0.5" x2="-12.9" y2="1.5" width="0.254" layer="51"/>
<wire x1="-12.9" y1="1.5" x2="-11.3" y2="7.2" width="0.254" layer="51"/>
<wire x1="-11.3" y1="7.2" x2="-10.2" y2="7.8" width="0.254" layer="51"/>
<wire x1="-11.7" y1="0.1" x2="-10.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="-10.5" y1="1.2" x2="-4.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="-4.5" y1="1.2" x2="-3.5" y2="0.1" width="0.254" layer="51"/>
<wire x1="-3.5" y1="0.1" x2="-5" y2="-1.2" width="0.254" layer="51"/>
<wire x1="-5" y1="-1.2" x2="-10.6" y2="-1.2" width="0.254" layer="51"/>
<wire x1="-10.6" y1="-1.2" x2="-11.7" y2="0.1" width="0.254" layer="51"/>
<wire x1="-1.1" y1="7.7" x2="-0.2" y2="6.9" width="0.254" layer="51"/>
<wire x1="-0.2" y1="6.9" x2="-1.6" y2="1.2" width="0.254" layer="51"/>
<wire x1="-1.6" y1="1.2" x2="-2.9" y2="0.4" width="0.254" layer="51"/>
<wire x1="-2.9" y1="0.4" x2="-3.9" y2="1.5" width="0.254" layer="51"/>
<wire x1="-3.9" y1="1.5" x2="-2.6" y2="6.3" width="0.254" layer="51"/>
<wire x1="-2.6" y1="6.3" x2="-1.1" y2="7.7" width="0.254" layer="51"/>
<wire x1="-12.4" y1="0" x2="-11.1" y2="-1.6" width="0.254" layer="51"/>
<wire x1="-11.1" y1="-1.6" x2="-12.2" y2="-5.9" width="0.254" layer="51"/>
<wire x1="-12.2" y1="-5.9" x2="-14.3" y2="-7.5" width="0.254" layer="51"/>
<wire x1="-14.3" y1="-7.5" x2="-15.1" y2="-6.6" width="0.254" layer="51"/>
<wire x1="-15.1" y1="-6.6" x2="-13.7" y2="-1.4" width="0.254" layer="51"/>
<wire x1="-13.7" y1="-1.4" x2="-12.4" y2="0" width="0.254" layer="51"/>
<wire x1="-3.3" y1="-0.4" x2="-2.4" y2="-1.4" width="0.254" layer="51"/>
<wire x1="-2.4" y1="-1.4" x2="-3.6" y2="-6.3" width="0.254" layer="51"/>
<wire x1="-3.6" y1="-6.3" x2="-5" y2="-7.7" width="0.254" layer="51"/>
<wire x1="-5" y1="-7.7" x2="-6.2" y2="-6.2" width="0.254" layer="51"/>
<wire x1="-6.2" y1="-6.2" x2="-4.8" y2="-1.8" width="0.254" layer="51"/>
<wire x1="-4.8" y1="-1.8" x2="-3.3" y2="-0.4" width="0.254" layer="51"/>
<wire x1="-9.5" y1="7.9" x2="-8.4" y2="9" width="0.254" layer="51" curve="-3.579821"/>
<wire x1="-8.4" y1="9" x2="-2" y2="9" width="0.254" layer="51"/>
<wire x1="-2" y1="9" x2="-1.4" y2="8.1" width="0.254" layer="51"/>
<wire x1="-1.4" y1="8.1" x2="-2.9" y2="6.7" width="0.254" layer="51"/>
<wire x1="-2.9" y1="6.7" x2="-8.2" y2="6.7" width="0.254" layer="51"/>
<wire x1="-8.2" y1="6.7" x2="-9.5" y2="7.9" width="0.254" layer="51"/>
<wire x1="-13.7" y1="-7.8" x2="-11.9" y2="-6.4" width="0.254" layer="51"/>
<wire x1="-11.9" y1="-6.4" x2="-6.7" y2="-6.4" width="0.254" layer="51"/>
<wire x1="-6.7" y1="-6.4" x2="-5.4" y2="-8.1" width="0.254" layer="51"/>
<wire x1="-5.4" y1="-8.1" x2="-6.1" y2="-8.8" width="0.254" layer="51"/>
<wire x1="-6.1" y1="-8.8" x2="-13.1" y2="-8.8" width="0.254" layer="51"/>
<wire x1="-13.1" y1="-8.8" x2="-13.7" y2="-7.8" width="0.254" layer="51"/>
<circle x="-1.8" y="-7.6" radius="1.17046875" width="0.254" layer="51"/>
<wire x1="4.8" y1="7.8" x2="6.2" y2="6.5" width="0.254" layer="51"/>
<wire x1="6.2" y1="6.5" x2="5" y2="2.4" width="0.254" layer="51"/>
<wire x1="5" y1="2.4" x2="3" y2="0.5" width="0.254" layer="51"/>
<wire x1="3" y1="0.5" x2="2.1" y2="1.5" width="0.254" layer="51"/>
<wire x1="2.1" y1="1.5" x2="3.7" y2="7.2" width="0.254" layer="51"/>
<wire x1="3.7" y1="7.2" x2="4.8" y2="7.8" width="0.254" layer="51"/>
<wire x1="3.3" y1="0.1" x2="4.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="4.5" y1="1.2" x2="10.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="10.5" y1="1.2" x2="11.5" y2="0.1" width="0.254" layer="51"/>
<wire x1="11.5" y1="0.1" x2="10" y2="-1.2" width="0.254" layer="51"/>
<wire x1="10" y1="-1.2" x2="4.4" y2="-1.2" width="0.254" layer="51"/>
<wire x1="4.4" y1="-1.2" x2="3.3" y2="0.1" width="0.254" layer="51"/>
<wire x1="13.9" y1="7.7" x2="14.8" y2="6.9" width="0.254" layer="51"/>
<wire x1="14.8" y1="6.9" x2="13.4" y2="1.2" width="0.254" layer="51"/>
<wire x1="13.4" y1="1.2" x2="12.1" y2="0.4" width="0.254" layer="51"/>
<wire x1="12.1" y1="0.4" x2="11.1" y2="1.5" width="0.254" layer="51"/>
<wire x1="11.1" y1="1.5" x2="12.4" y2="6.3" width="0.254" layer="51"/>
<wire x1="12.4" y1="6.3" x2="13.9" y2="7.7" width="0.254" layer="51"/>
<wire x1="2.6" y1="0" x2="3.9" y2="-1.6" width="0.254" layer="51"/>
<wire x1="3.9" y1="-1.6" x2="2.8" y2="-5.9" width="0.254" layer="51"/>
<wire x1="2.8" y1="-5.9" x2="0.7" y2="-7.5" width="0.254" layer="51"/>
<wire x1="0.7" y1="-7.5" x2="-0.1" y2="-6.6" width="0.254" layer="51"/>
<wire x1="-0.1" y1="-6.6" x2="1.3" y2="-1.4" width="0.254" layer="51"/>
<wire x1="1.3" y1="-1.4" x2="2.6" y2="0" width="0.254" layer="51"/>
<wire x1="11.7" y1="-0.4" x2="12.6" y2="-1.4" width="0.254" layer="51"/>
<wire x1="12.6" y1="-1.4" x2="11.4" y2="-6.3" width="0.254" layer="51"/>
<wire x1="11.4" y1="-6.3" x2="10" y2="-7.7" width="0.254" layer="51"/>
<wire x1="10" y1="-7.7" x2="8.8" y2="-6.2" width="0.254" layer="51"/>
<wire x1="8.8" y1="-6.2" x2="10.2" y2="-1.8" width="0.254" layer="51"/>
<wire x1="10.2" y1="-1.8" x2="11.7" y2="-0.4" width="0.254" layer="51"/>
<wire x1="5.5" y1="7.9" x2="6.6" y2="9" width="0.254" layer="51" curve="-3.579821"/>
<wire x1="6.6" y1="9" x2="13" y2="9" width="0.254" layer="51"/>
<wire x1="13" y1="9" x2="13.6" y2="8.1" width="0.254" layer="51"/>
<wire x1="13.6" y1="8.1" x2="12.1" y2="6.7" width="0.254" layer="51"/>
<wire x1="12.1" y1="6.7" x2="6.8" y2="6.7" width="0.254" layer="51"/>
<wire x1="6.8" y1="6.7" x2="5.5" y2="7.9" width="0.254" layer="51"/>
<wire x1="1.3" y1="-7.8" x2="3.1" y2="-6.4" width="0.254" layer="51"/>
<wire x1="3.1" y1="-6.4" x2="8.3" y2="-6.4" width="0.254" layer="51"/>
<wire x1="8.3" y1="-6.4" x2="9.6" y2="-8.1" width="0.254" layer="51"/>
<wire x1="9.6" y1="-8.1" x2="8.9" y2="-8.8" width="0.254" layer="51"/>
<wire x1="8.9" y1="-8.8" x2="1.9" y2="-8.8" width="0.254" layer="51"/>
<wire x1="1.9" y1="-8.8" x2="1.3" y2="-7.8" width="0.254" layer="51"/>
<circle x="13.2" y="-7.6" radius="1.17046875" width="0.254" layer="51"/>
<wire x1="19.8" y1="7.8" x2="21.2" y2="6.5" width="0.254" layer="51"/>
<wire x1="21.2" y1="6.5" x2="20" y2="2.4" width="0.254" layer="51"/>
<wire x1="20" y1="2.4" x2="18" y2="0.5" width="0.254" layer="51"/>
<wire x1="18" y1="0.5" x2="17.1" y2="1.5" width="0.254" layer="51"/>
<wire x1="17.1" y1="1.5" x2="18.7" y2="7.2" width="0.254" layer="51"/>
<wire x1="18.7" y1="7.2" x2="19.8" y2="7.8" width="0.254" layer="51"/>
<wire x1="18.3" y1="0.1" x2="19.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="19.5" y1="1.2" x2="25.5" y2="1.2" width="0.254" layer="51"/>
<wire x1="25.5" y1="1.2" x2="26.5" y2="0.1" width="0.254" layer="51"/>
<wire x1="26.5" y1="0.1" x2="25" y2="-1.2" width="0.254" layer="51"/>
<wire x1="25" y1="-1.2" x2="19.4" y2="-1.2" width="0.254" layer="51"/>
<wire x1="19.4" y1="-1.2" x2="18.3" y2="0.1" width="0.254" layer="51"/>
<wire x1="28.9" y1="7.7" x2="29.8" y2="6.9" width="0.254" layer="51"/>
<wire x1="29.8" y1="6.9" x2="28.4" y2="1.2" width="0.254" layer="51"/>
<wire x1="28.4" y1="1.2" x2="27.1" y2="0.4" width="0.254" layer="51"/>
<wire x1="27.1" y1="0.4" x2="26.1" y2="1.5" width="0.254" layer="51"/>
<wire x1="26.1" y1="1.5" x2="27.4" y2="6.3" width="0.254" layer="51"/>
<wire x1="27.4" y1="6.3" x2="28.9" y2="7.7" width="0.254" layer="51"/>
<wire x1="17.6" y1="0" x2="18.9" y2="-1.6" width="0.254" layer="51"/>
<wire x1="18.9" y1="-1.6" x2="17.8" y2="-5.9" width="0.254" layer="51"/>
<wire x1="17.8" y1="-5.9" x2="15.7" y2="-7.5" width="0.254" layer="51"/>
<wire x1="15.7" y1="-7.5" x2="14.9" y2="-6.6" width="0.254" layer="51"/>
<wire x1="14.9" y1="-6.6" x2="16.3" y2="-1.4" width="0.254" layer="51"/>
<wire x1="16.3" y1="-1.4" x2="17.6" y2="0" width="0.254" layer="51"/>
<wire x1="26.7" y1="-0.4" x2="27.6" y2="-1.4" width="0.254" layer="51"/>
<wire x1="27.6" y1="-1.4" x2="26.4" y2="-6.3" width="0.254" layer="51"/>
<wire x1="26.4" y1="-6.3" x2="25" y2="-7.7" width="0.254" layer="51"/>
<wire x1="25" y1="-7.7" x2="23.8" y2="-6.2" width="0.254" layer="51"/>
<wire x1="23.8" y1="-6.2" x2="25.2" y2="-1.8" width="0.254" layer="51"/>
<wire x1="25.2" y1="-1.8" x2="26.7" y2="-0.4" width="0.254" layer="51"/>
<wire x1="20.5" y1="7.9" x2="21.6" y2="9" width="0.254" layer="51" curve="-3.579821"/>
<wire x1="21.6" y1="9" x2="28" y2="9" width="0.254" layer="51"/>
<wire x1="28" y1="9" x2="28.6" y2="8.1" width="0.254" layer="51"/>
<wire x1="28.6" y1="8.1" x2="27.1" y2="6.7" width="0.254" layer="51"/>
<wire x1="27.1" y1="6.7" x2="21.8" y2="6.7" width="0.254" layer="51"/>
<wire x1="21.8" y1="6.7" x2="20.5" y2="7.9" width="0.254" layer="51"/>
<wire x1="16.3" y1="-7.8" x2="18.1" y2="-6.4" width="0.254" layer="51"/>
<wire x1="18.1" y1="-6.4" x2="23.3" y2="-6.4" width="0.254" layer="51"/>
<wire x1="23.3" y1="-6.4" x2="24.6" y2="-8.1" width="0.254" layer="51"/>
<wire x1="24.6" y1="-8.1" x2="23.9" y2="-8.8" width="0.254" layer="51"/>
<wire x1="23.9" y1="-8.8" x2="16.9" y2="-8.8" width="0.254" layer="51"/>
<wire x1="16.9" y1="-8.8" x2="16.3" y2="-7.8" width="0.254" layer="51"/>
<circle x="28.2" y="-7.6" radius="1.17046875" width="0.254" layer="51"/>
<polygon width="0.254" layer="21">
<vertex x="-30.1" y="-6.6"/>
<vertex x="-28.7" y="-1.4"/>
<vertex x="-27.2" y="0"/>
<vertex x="-26.1" y="-1.6"/>
<vertex x="-27.2" y="-5.8"/>
<vertex x="-29.4" y="-7.4"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-28.8" y="-8"/>
<vertex x="-26.7" y="-6.4"/>
<vertex x="-21.8" y="-6.4"/>
<vertex x="-20.4" y="-8.1"/>
<vertex x="-21.1" y="-8.8"/>
<vertex x="-28.1" y="-8.8"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-21.2" y="-5.9"/>
<vertex x="-19.8" y="-1.8"/>
<vertex x="-18.1" y="-0.3"/>
<vertex x="-17.4" y="-1.4"/>
<vertex x="-18.6" y="-6.3"/>
<vertex x="-19.9" y="-7.5"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-20.2" y="-1.2"/>
<vertex x="-25.5" y="-1.2"/>
<vertex x="-26.5" y="0.1"/>
<vertex x="-25.2" y="1.2"/>
<vertex x="-19.7" y="1.2"/>
<vertex x="-18.7" y="0.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-18" y="0.3"/>
<vertex x="-18.9" y="1.5"/>
<vertex x="-17.6" y="6.1"/>
<vertex x="-16" y="7.6"/>
<vertex x="-15.2" y="6.9"/>
<vertex x="-16.6" y="1.2"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-18" y="6.7"/>
<vertex x="-23.3" y="6.7"/>
<vertex x="-24.7" y="8.1"/>
<vertex x="-23.7" y="9"/>
<vertex x="-17" y="9"/>
<vertex x="-16.4" y="8.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-23.9" y="6.3"/>
<vertex x="-25.3" y="7.7"/>
<vertex x="-26.3" y="7.2"/>
<vertex x="-27.9" y="1.5"/>
<vertex x="-27.1" y="0.5"/>
<vertex x="-25" y="2.4"/>
</polygon>
<circle x="-16.8" y="-7.6" radius="0.412309375" width="1.5" layer="21"/>
<polygon width="0.254" layer="21">
<vertex x="-15.1" y="-6.6"/>
<vertex x="-13.7" y="-1.4"/>
<vertex x="-12.2" y="0"/>
<vertex x="-11.1" y="-1.6"/>
<vertex x="-12.2" y="-5.8"/>
<vertex x="-14.4" y="-7.4"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-13.8" y="-8"/>
<vertex x="-11.7" y="-6.4"/>
<vertex x="-6.8" y="-6.4"/>
<vertex x="-5.4" y="-8.1"/>
<vertex x="-6.1" y="-8.8"/>
<vertex x="-13.1" y="-8.8"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-6.2" y="-5.9"/>
<vertex x="-4.8" y="-1.8"/>
<vertex x="-3.1" y="-0.3"/>
<vertex x="-2.4" y="-1.4"/>
<vertex x="-3.6" y="-6.3"/>
<vertex x="-4.9" y="-7.5"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-5.2" y="-1.2"/>
<vertex x="-10.5" y="-1.2"/>
<vertex x="-11.5" y="0.1"/>
<vertex x="-10.2" y="1.2"/>
<vertex x="-4.7" y="1.2"/>
<vertex x="-3.7" y="0.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-3" y="0.3"/>
<vertex x="-3.9" y="1.5"/>
<vertex x="-2.6" y="6.1"/>
<vertex x="-1" y="7.6"/>
<vertex x="-0.2" y="6.9"/>
<vertex x="-1.6" y="1.2"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-3" y="6.7"/>
<vertex x="-8.3" y="6.7"/>
<vertex x="-9.7" y="8.1"/>
<vertex x="-8.7" y="9"/>
<vertex x="-2" y="9"/>
<vertex x="-1.4" y="8.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="-8.9" y="6.3"/>
<vertex x="-10.3" y="7.7"/>
<vertex x="-11.3" y="7.2"/>
<vertex x="-12.9" y="1.5"/>
<vertex x="-12.1" y="0.5"/>
<vertex x="-10" y="2.4"/>
</polygon>
<circle x="-1.8" y="-7.6" radius="0.412309375" width="1.5" layer="21"/>
<polygon width="0.254" layer="21">
<vertex x="-0.1" y="-6.6"/>
<vertex x="1.3" y="-1.4"/>
<vertex x="2.8" y="0"/>
<vertex x="3.9" y="-1.6"/>
<vertex x="2.8" y="-5.8"/>
<vertex x="0.6" y="-7.4"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="1.2" y="-8"/>
<vertex x="3.3" y="-6.4"/>
<vertex x="8.2" y="-6.4"/>
<vertex x="9.6" y="-8.1"/>
<vertex x="8.9" y="-8.8"/>
<vertex x="1.9" y="-8.8"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="8.8" y="-5.9"/>
<vertex x="10.2" y="-1.8"/>
<vertex x="11.9" y="-0.3"/>
<vertex x="12.6" y="-1.4"/>
<vertex x="11.4" y="-6.3"/>
<vertex x="10.1" y="-7.5"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="9.8" y="-1.2"/>
<vertex x="4.5" y="-1.2"/>
<vertex x="3.5" y="0.1"/>
<vertex x="4.8" y="1.2"/>
<vertex x="10.3" y="1.2"/>
<vertex x="11.3" y="0.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="12" y="0.3"/>
<vertex x="11.1" y="1.5"/>
<vertex x="12.4" y="6.1"/>
<vertex x="14" y="7.6"/>
<vertex x="14.8" y="6.9"/>
<vertex x="13.4" y="1.2"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="12" y="6.7"/>
<vertex x="6.7" y="6.7"/>
<vertex x="5.3" y="8.1"/>
<vertex x="6.3" y="9"/>
<vertex x="13" y="9"/>
<vertex x="13.6" y="8.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="6.1" y="6.3"/>
<vertex x="4.7" y="7.7"/>
<vertex x="3.7" y="7.2"/>
<vertex x="2.1" y="1.5"/>
<vertex x="2.9" y="0.5"/>
<vertex x="5" y="2.4"/>
</polygon>
<circle x="13.2" y="-7.6" radius="0.412309375" width="1.5" layer="21"/>
<polygon width="0.254" layer="21">
<vertex x="14.9" y="-6.6"/>
<vertex x="16.3" y="-1.4"/>
<vertex x="17.8" y="0"/>
<vertex x="18.9" y="-1.6"/>
<vertex x="17.8" y="-5.8"/>
<vertex x="15.6" y="-7.4"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="16.2" y="-8"/>
<vertex x="18.3" y="-6.4"/>
<vertex x="23.2" y="-6.4"/>
<vertex x="24.6" y="-8.1"/>
<vertex x="23.9" y="-8.8"/>
<vertex x="16.9" y="-8.8"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="23.8" y="-5.9"/>
<vertex x="25.2" y="-1.8"/>
<vertex x="26.9" y="-0.3"/>
<vertex x="27.6" y="-1.4"/>
<vertex x="26.4" y="-6.3"/>
<vertex x="25.1" y="-7.5"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="24.8" y="-1.2"/>
<vertex x="19.5" y="-1.2"/>
<vertex x="18.5" y="0.1"/>
<vertex x="19.8" y="1.2"/>
<vertex x="25.3" y="1.2"/>
<vertex x="26.3" y="0.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="27" y="0.3"/>
<vertex x="26.1" y="1.5"/>
<vertex x="27.4" y="6.1"/>
<vertex x="29" y="7.6"/>
<vertex x="29.8" y="6.9"/>
<vertex x="28.4" y="1.2"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="27" y="6.7"/>
<vertex x="21.7" y="6.7"/>
<vertex x="20.3" y="8.1"/>
<vertex x="21.3" y="9"/>
<vertex x="28" y="9"/>
<vertex x="28.6" y="8.1"/>
</polygon>
<polygon width="0.254" layer="21">
<vertex x="21.1" y="6.3"/>
<vertex x="19.7" y="7.7"/>
<vertex x="18.7" y="7.2"/>
<vertex x="17.1" y="1.5"/>
<vertex x="17.9" y="0.5"/>
<vertex x="20" y="2.4"/>
</polygon>
<circle x="28.2" y="-7.6" radius="0.412309375" width="1.5" layer="21"/>
</package>
<package name="7-SEGMENT-1&quot;PTH-EZ">
<wire x1="-9" y1="-12.5" x2="-9" y2="12.5" width="0.254" layer="21"/>
<wire x1="-9" y1="12.5" x2="9" y2="12.5" width="0.254" layer="21"/>
<wire x1="9" y1="12.5" x2="9" y2="-10.5174" width="0.254" layer="21"/>
<wire x1="7.0174" y1="-12.5" x2="-9" y2="-12.5" width="0.254" layer="21"/>
<wire x1="-2.3" y1="6.4" x2="-1.4" y2="5.4" width="0.127" layer="21"/>
<wire x1="-1.4" y1="5.4" x2="-2.2" y2="1.1" width="0.127" layer="21"/>
<wire x1="-2.2" y1="1.1" x2="-3.3" y2="0.3" width="0.127" layer="21"/>
<wire x1="-3.3" y1="0.3" x2="-3.8" y2="1" width="0.127" layer="21"/>
<wire x1="-3.8" y1="1" x2="-2.9" y2="5.8" width="0.127" layer="21"/>
<wire x1="-2.9" y1="5.8" x2="-2.3" y2="6.4" width="0.127" layer="21"/>
<wire x1="-2.9" y1="0" x2="-2" y2="0.7" width="0.127" layer="21"/>
<wire x1="-2" y1="0.7" x2="2.5" y2="0.7" width="0.127" layer="21"/>
<wire x1="2.5" y1="0.7" x2="3.1" y2="0" width="0.127" layer="21"/>
<wire x1="3.1" y1="0" x2="2.2" y2="-0.8" width="0.127" layer="21"/>
<wire x1="2.2" y1="-0.8" x2="-2.4" y2="-0.8" width="0.127" layer="21"/>
<wire x1="-2.4" y1="-0.8" x2="-2.9" y2="0" width="0.127" layer="21"/>
<wire x1="4.3" y1="6.4" x2="5.2" y2="5.4" width="0.127" layer="21"/>
<wire x1="5.2" y1="5.4" x2="4.4" y2="1.1" width="0.127" layer="21"/>
<wire x1="4.4" y1="1.1" x2="3.3" y2="0.3" width="0.127" layer="21"/>
<wire x1="3.3" y1="0.3" x2="2.8" y2="1" width="0.127" layer="21"/>
<wire x1="2.8" y1="1" x2="3.7" y2="5.8" width="0.127" layer="21"/>
<wire x1="3.7" y1="5.8" x2="4.3" y2="6.4" width="0.127" layer="21"/>
<wire x1="-3.4" y1="-0.2" x2="-2.5" y2="-1.2" width="0.127" layer="21"/>
<wire x1="-2.5" y1="-1.2" x2="-3.3" y2="-5.5" width="0.127" layer="21"/>
<wire x1="-3.3" y1="-5.5" x2="-4.4" y2="-6.3" width="0.127" layer="21"/>
<wire x1="-4.4" y1="-6.3" x2="-4.9" y2="-5.6" width="0.127" layer="21"/>
<wire x1="-4.9" y1="-5.6" x2="-4" y2="-0.8" width="0.127" layer="21"/>
<wire x1="-4" y1="-0.8" x2="-3.4" y2="-0.2" width="0.127" layer="21"/>
<wire x1="3.2" y1="-0.4" x2="4.1" y2="-1.4" width="0.127" layer="21"/>
<wire x1="4.1" y1="-1.4" x2="3.3" y2="-5.7" width="0.127" layer="21"/>
<wire x1="3.3" y1="-5.7" x2="2.2" y2="-6.5" width="0.127" layer="21"/>
<wire x1="2.2" y1="-6.5" x2="1.7" y2="-5.8" width="0.127" layer="21"/>
<wire x1="1.7" y1="-5.8" x2="2.6" y2="-1" width="0.127" layer="21"/>
<wire x1="2.6" y1="-1" x2="3.2" y2="-0.4" width="0.127" layer="21"/>
<wire x1="-1.9" y1="6.7" x2="-1" y2="7.4" width="0.127" layer="21"/>
<wire x1="-1" y1="7.4" x2="3.5" y2="7.4" width="0.127" layer="21"/>
<wire x1="3.5" y1="7.4" x2="4.1" y2="6.7" width="0.127" layer="21"/>
<wire x1="4.1" y1="6.7" x2="3.2" y2="5.9" width="0.127" layer="21"/>
<wire x1="3.2" y1="5.9" x2="-1.4" y2="5.9" width="0.127" layer="21"/>
<wire x1="-1.4" y1="5.9" x2="-1.9" y2="6.7" width="0.127" layer="21"/>
<wire x1="-4.1" y1="-6.6" x2="-3.2" y2="-5.9" width="0.127" layer="21"/>
<wire x1="-3.2" y1="-5.9" x2="1.3" y2="-5.9" width="0.127" layer="21"/>
<wire x1="1.3" y1="-5.9" x2="1.9" y2="-6.6" width="0.127" layer="21"/>
<wire x1="1.9" y1="-6.6" x2="1" y2="-7.4" width="0.127" layer="21"/>
<wire x1="1" y1="-7.4" x2="-3.6" y2="-7.4" width="0.127" layer="21"/>
<wire x1="-3.6" y1="-7.4" x2="-4.1" y2="-6.6" width="0.127" layer="21"/>
<wire x1="9" y1="-10.5174" x2="7.0174" y2="-12.5" width="0.254" layer="21"/>
<pad name="6" x="5.08" y="10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="7" x="2.54" y="10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="8" x="0" y="10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="9" x="-2.54" y="10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="10" x="-5.08" y="10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="1" x="-5.08" y="-10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="2" x="-2.54" y="-10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="3" x="0" y="-10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="4" x="2.54" y="-10.16" drill="1" diameter="1.8796" stop="no"/>
<pad name="5" x="5.08" y="-10.16" drill="1" diameter="1.8796" stop="no"/>
<polygon width="0.127" layer="30">
<vertex x="-5.090159375" y="9.243059375" curve="-90"/>
<vertex x="-6.0198" y="10.15491875" curve="-90"/>
<vertex x="-5.08508125" y="11.0871" curve="-90"/>
<vertex x="-4.1529" y="10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-2.550159375" y="9.243059375" curve="-90"/>
<vertex x="-3.4798" y="10.15491875" curve="-90"/>
<vertex x="-2.54508125" y="11.0871" curve="-90"/>
<vertex x="-1.6129" y="10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-0.010159375" y="9.243059375" curve="-90"/>
<vertex x="-0.9398" y="10.15491875" curve="-90"/>
<vertex x="-0.00508125" y="11.0871" curve="-90"/>
<vertex x="0.9271" y="10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="2.529840625" y="9.243059375" curve="-90"/>
<vertex x="1.6002" y="10.15491875" curve="-90"/>
<vertex x="2.53491875" y="11.0871" curve="-90"/>
<vertex x="3.4671" y="10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="5.069840625" y="9.243059375" curve="-90"/>
<vertex x="4.1402" y="10.15491875" curve="-90"/>
<vertex x="5.07491875" y="11.0871" curve="-90"/>
<vertex x="6.0071" y="10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-5.090159375" y="-11.076940625" curve="-90"/>
<vertex x="-6.0198" y="-10.16508125" curve="-90"/>
<vertex x="-5.08508125" y="-9.2329" curve="-90"/>
<vertex x="-4.1529" y="-10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-2.550159375" y="-11.076940625" curve="-90"/>
<vertex x="-3.4798" y="-10.16508125" curve="-90"/>
<vertex x="-2.54508125" y="-9.2329" curve="-90"/>
<vertex x="-1.6129" y="-10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-0.010159375" y="-11.076940625" curve="-90"/>
<vertex x="-0.9398" y="-10.16508125" curve="-90"/>
<vertex x="-0.00508125" y="-9.2329" curve="-90"/>
<vertex x="0.9271" y="-10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="2.529840625" y="-11.076940625" curve="-90"/>
<vertex x="1.6002" y="-10.16508125" curve="-90"/>
<vertex x="2.53491875" y="-9.2329" curve="-90"/>
<vertex x="3.4671" y="-10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="5.069840625" y="-11.076940625" curve="-90"/>
<vertex x="4.1402" y="-10.16508125" curve="-90"/>
<vertex x="5.07491875" y="-9.2329" curve="-90"/>
<vertex x="6.0071" y="-10.16" curve="-90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-4.6482" y="10.152378125" curve="90"/>
<vertex x="-5.082540625" y="10.5918" curve="90"/>
<vertex x="-5.5118" y="10.162540625" curve="90"/>
<vertex x="-5.077459375" y="9.72311875" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-2.1082" y="10.152378125" curve="90"/>
<vertex x="-2.542540625" y="10.5918" curve="90"/>
<vertex x="-2.9718" y="10.162540625" curve="90"/>
<vertex x="-2.537459375" y="9.72311875" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0.4318" y="10.152378125" curve="90"/>
<vertex x="-0.002540625" y="10.5918" curve="90"/>
<vertex x="-0.4318" y="10.162540625" curve="90"/>
<vertex x="0.002540625" y="9.72311875" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="2.9718" y="10.152378125" curve="90"/>
<vertex x="2.537459375" y="10.5918" curve="90"/>
<vertex x="2.1082" y="10.162540625" curve="90"/>
<vertex x="2.542540625" y="9.72311875" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="5.5118" y="10.152378125" curve="90"/>
<vertex x="5.077459375" y="10.5918" curve="90"/>
<vertex x="4.6482" y="10.162540625" curve="90"/>
<vertex x="5.082540625" y="9.72311875" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-4.6482" y="-10.167621875" curve="90"/>
<vertex x="-5.082540625" y="-9.7282" curve="90"/>
<vertex x="-5.5118" y="-10.157459375" curve="90"/>
<vertex x="-5.077459375" y="-10.59688125" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-2.1082" y="-10.167621875" curve="90"/>
<vertex x="-2.542540625" y="-9.7282" curve="90"/>
<vertex x="-2.9718" y="-10.157459375" curve="90"/>
<vertex x="-2.537459375" y="-10.59688125" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="0.4318" y="-10.167621875" curve="90"/>
<vertex x="-0.002540625" y="-9.7282" curve="90"/>
<vertex x="-0.4318" y="-10.157459375" curve="90"/>
<vertex x="0.002540625" y="-10.59688125" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="2.9718" y="-10.167621875" curve="90"/>
<vertex x="2.537459375" y="-9.7282" curve="90"/>
<vertex x="2.1082" y="-10.157459375" curve="90"/>
<vertex x="2.542540625" y="-10.59688125" curve="90"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="5.5118" y="-10.167621875" curve="90"/>
<vertex x="5.077459375" y="-9.7282" curve="90"/>
<vertex x="4.6482" y="-10.157459375" curve="90"/>
<vertex x="5.082540625" y="-10.59688125" curve="90"/>
</polygon>
<polygon width="0.127" layer="21">
<vertex x="-6.0706" y="-6.5278" curve="-90"/>
<vertex x="-5.334" y="-7.366" curve="-90"/>
<vertex x="-6.1468" y="-8.0518" curve="-90"/>
<vertex x="-6.858" y="-7.2898" curve="-90"/>
</polygon>
<polygon width="0.127" layer="21">
<vertex x="5.5372" y="-6.4262" curve="-90"/>
<vertex x="6.2738" y="-7.2644" curve="-90"/>
<vertex x="5.461" y="-7.9502" curve="-90"/>
<vertex x="4.7498" y="-7.1882" curve="-90"/>
</polygon>
</package>
</packages>
<symbols>
<symbol name="ALPHANUMERIC">
<wire x1="15.24" y1="25.4" x2="15.24" y2="-22.86" width="0.254" layer="94"/>
<wire x1="15.24" y1="-22.86" x2="-17.78" y2="-22.86" width="0.254" layer="94"/>
<wire x1="-17.78" y1="-22.86" x2="-17.78" y2="25.4" width="0.254" layer="94"/>
<wire x1="-17.78" y1="25.4" x2="15.24" y2="25.4" width="0.254" layer="94"/>
<wire x1="-6.604" y1="19.812" x2="0.254" y2="19.812" width="0.254" layer="94"/>
<wire x1="0.254" y1="19.812" x2="0.254" y2="18.542" width="0.254" layer="94"/>
<wire x1="0.254" y1="18.542" x2="-1.27" y2="17.272" width="0.254" layer="94"/>
<wire x1="-1.27" y1="17.272" x2="-6.096" y2="17.272" width="0.254" layer="94"/>
<wire x1="-6.096" y1="17.272" x2="-7.62" y2="18.796" width="0.254" layer="94"/>
<wire x1="-7.62" y1="18.796" x2="-6.604" y2="19.812" width="0.254" layer="94"/>
<wire x1="1.27" y1="19.812" x2="1.27" y2="18.542" width="0.254" layer="94"/>
<wire x1="1.27" y1="18.542" x2="2.54" y2="17.272" width="0.254" layer="94"/>
<wire x1="2.54" y1="17.272" x2="6.858" y2="17.272" width="0.254" layer="94"/>
<wire x1="6.858" y1="17.272" x2="8.636" y2="18.796" width="0.254" layer="94"/>
<wire x1="8.636" y1="18.796" x2="7.874" y2="19.812" width="0.254" layer="94"/>
<wire x1="7.874" y1="19.812" x2="1.27" y2="19.812" width="0.254" layer="94"/>
<wire x1="9.144" y1="18.288" x2="7.366" y2="16.764" width="0.254" layer="94"/>
<wire x1="7.366" y1="16.764" x2="6.096" y2="2.54" width="0.254" layer="94"/>
<wire x1="6.096" y1="2.54" x2="6.858" y2="1.524" width="0.254" layer="94"/>
<wire x1="6.858" y1="1.524" x2="8.636" y2="1.524" width="0.254" layer="94"/>
<wire x1="8.636" y1="1.524" x2="10.16" y2="16.51" width="0.254" layer="94"/>
<wire x1="10.16" y1="16.51" x2="9.144" y2="18.288" width="0.254" layer="94"/>
<wire x1="8.382" y1="0.254" x2="6.858" y2="-14.732" width="0.254" layer="94"/>
<wire x1="6.858" y1="-14.732" x2="5.842" y2="-15.748" width="0.254" layer="94"/>
<wire x1="5.842" y1="-15.748" x2="4.318" y2="-14.478" width="0.254" layer="94"/>
<wire x1="4.318" y1="-14.478" x2="5.334" y2="-1.27" width="0.254" layer="94"/>
<wire x1="5.334" y1="-1.27" x2="7.112" y2="0.254" width="0.254" layer="94"/>
<wire x1="7.112" y1="0.254" x2="8.382" y2="0.254" width="0.254" layer="94"/>
<wire x1="5.08" y1="-16.51" x2="3.556" y2="-15.24" width="0.254" layer="94"/>
<wire x1="3.556" y1="-15.24" x2="-1.27" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-15.24" x2="-2.54" y2="-16.256" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-16.256" x2="-2.54" y2="-17.526" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-17.526" x2="4.318" y2="-17.526" width="0.254" layer="94"/>
<wire x1="4.318" y1="-17.526" x2="5.08" y2="-16.51" width="0.254" layer="94"/>
<wire x1="-3.556" y1="-16.256" x2="-4.572" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-4.572" y1="-15.24" x2="-9.398" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-9.398" y1="-15.24" x2="-10.668" y2="-16.51" width="0.254" layer="94"/>
<wire x1="-10.668" y1="-16.51" x2="-9.652" y2="-17.526" width="0.254" layer="94"/>
<wire x1="-9.652" y1="-17.526" x2="-3.556" y2="-17.526" width="0.254" layer="94"/>
<wire x1="-3.556" y1="-17.526" x2="-3.556" y2="-16.256" width="0.254" layer="94"/>
<wire x1="-9.652" y1="-14.224" x2="-7.874" y2="-1.016" width="0.254" layer="94"/>
<wire x1="-7.874" y1="-1.016" x2="-8.89" y2="0.254" width="0.254" layer="94"/>
<wire x1="-8.89" y1="0.254" x2="-10.414" y2="0.254" width="0.254" layer="94"/>
<wire x1="-10.414" y1="0.254" x2="-11.938" y2="-14.986" width="0.254" layer="94"/>
<wire x1="-11.938" y1="-14.986" x2="-11.176" y2="-16.002" width="0.254" layer="94"/>
<wire x1="-11.176" y1="-16.002" x2="-9.652" y2="-14.224" width="0.254" layer="94"/>
<wire x1="-8.636" y1="1.524" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="-6.35" y2="16.51" width="0.254" layer="94"/>
<wire x1="-6.35" y1="16.51" x2="-8.128" y2="18.288" width="0.254" layer="94"/>
<wire x1="-8.128" y1="18.288" x2="-8.89" y2="17.272" width="0.254" layer="94"/>
<wire x1="-8.89" y1="17.272" x2="-10.16" y2="1.524" width="0.254" layer="94"/>
<wire x1="-10.16" y1="1.524" x2="-8.636" y2="1.524" width="0.254" layer="94"/>
<wire x1="-4.064" y1="-14.224" x2="-2.54" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-1.27" x2="-1.016" y2="0" width="0.254" layer="94"/>
<wire x1="-1.016" y1="0" x2="0" y2="-1.27" width="0.254" layer="94"/>
<wire x1="0" y1="-1.27" x2="-1.778" y2="-14.478" width="0.254" layer="94"/>
<wire x1="-1.778" y1="-14.478" x2="-2.794" y2="-15.494" width="0.254" layer="94"/>
<wire x1="-2.794" y1="-15.494" x2="-4.064" y2="-14.224" width="0.254" layer="94"/>
<wire x1="0.508" y1="2.794" x2="1.778" y2="16.51" width="0.254" layer="94"/>
<wire x1="1.778" y1="16.51" x2="0.762" y2="17.78" width="0.254" layer="94"/>
<wire x1="0.762" y1="17.78" x2="-1.016" y2="16.256" width="0.254" layer="94"/>
<wire x1="-1.016" y1="16.256" x2="-2.032" y2="2.794" width="0.254" layer="94"/>
<wire x1="-2.032" y1="2.794" x2="-1.016" y2="1.524" width="0.254" layer="94"/>
<wire x1="-1.016" y1="1.524" x2="0.508" y2="2.794" width="0.254" layer="94"/>
<wire x1="1.27" y1="2.286" x2="4.826" y2="2.286" width="0.254" layer="94"/>
<wire x1="4.826" y1="2.286" x2="6.096" y2="0.762" width="0.254" layer="94"/>
<wire x1="6.096" y1="0.762" x2="4.572" y2="-0.508" width="0.254" layer="94"/>
<wire x1="4.572" y1="-0.508" x2="0.762" y2="-0.508" width="0.254" layer="94"/>
<wire x1="0.762" y1="-0.508" x2="-0.254" y2="0.762" width="0.254" layer="94"/>
<wire x1="-0.254" y1="0.762" x2="1.27" y2="2.286" width="0.254" layer="94"/>
<wire x1="-2.794" y1="2.286" x2="-1.778" y2="0.762" width="0.254" layer="94"/>
<wire x1="-1.778" y1="0.762" x2="-3.048" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-3.048" y1="-0.508" x2="-7.112" y2="-0.508" width="0.254" layer="94"/>
<wire x1="-7.112" y1="-0.508" x2="-8.128" y2="0.762" width="0.254" layer="94"/>
<wire x1="-8.128" y1="0.762" x2="-6.35" y2="2.286" width="0.254" layer="94"/>
<wire x1="-6.35" y1="2.286" x2="-2.794" y2="2.286" width="0.254" layer="94"/>
<wire x1="1.27" y1="3.048" x2="1.778" y2="8.382" width="0.254" layer="94"/>
<wire x1="1.778" y1="8.382" x2="6.604" y2="16.51" width="0.254" layer="94"/>
<wire x1="6.604" y1="16.51" x2="6.096" y2="11.43" width="0.254" layer="94"/>
<wire x1="6.096" y1="11.43" x2="1.27" y2="3.048" width="0.254" layer="94"/>
<wire x1="-2.794" y1="3.048" x2="-2.286" y2="8.382" width="0.254" layer="94"/>
<wire x1="-2.286" y1="8.382" x2="-5.588" y2="16.256" width="0.254" layer="94"/>
<wire x1="-5.588" y1="16.256" x2="-6.096" y2="11.684" width="0.254" layer="94"/>
<wire x1="-6.096" y1="11.684" x2="-2.794" y2="3.048" width="0.254" layer="94"/>
<wire x1="0.762" y1="-1.778" x2="4.064" y2="-8.89" width="0.254" layer="94"/>
<wire x1="4.064" y1="-8.89" x2="3.556" y2="-14.224" width="0.254" layer="94"/>
<wire x1="3.556" y1="-14.224" x2="0" y2="-6.604" width="0.254" layer="94"/>
<wire x1="0" y1="-6.604" x2="0.762" y2="-1.778" width="0.254" layer="94"/>
<wire x1="-3.302" y1="-1.778" x2="-3.81" y2="-6.35" width="0.254" layer="94"/>
<wire x1="-3.81" y1="-6.35" x2="-8.89" y2="-13.97" width="0.254" layer="94"/>
<wire x1="-8.89" y1="-13.97" x2="-8.382" y2="-9.144" width="0.254" layer="94"/>
<wire x1="-8.382" y1="-9.144" x2="-3.302" y2="-1.778" width="0.254" layer="94"/>
<circle x="-10.668" y="20.066" radius="1.1359" width="0.254" layer="94"/>
<circle x="8.382" y="-18.034" radius="1.0776" width="0.254" layer="94"/>
<text x="2.54" y="7.366" size="1.778" layer="94">K</text>
<text x="7.62" y="7.62" size="1.778" layer="94">B</text>
<text x="5.588" y="-8.89" size="1.778" layer="94">C</text>
<text x="1.778" y="-8.636" size="1.778" layer="94">L</text>
<text x="-2.54" y="-8.636" size="1.778" layer="94">M</text>
<text x="-6.604" y="-8.636" size="1.778" layer="94">N</text>
<text x="-10.668" y="-8.636" size="1.778" layer="94">E</text>
<text x="-8.128" y="-17.272" size="1.778" layer="94">D1</text>
<text x="-0.254" y="-17.272" size="1.778" layer="94">D2</text>
<text x="6.35" y="-22.098" size="1.778" layer="94">DP1</text>
<text x="-12.7" y="21.844" size="1.778" layer="94">DP2</text>
<text x="-5.08" y="17.526" size="1.778" layer="94">A1</text>
<text x="3.302" y="17.526" size="1.778" layer="94">A2</text>
<text x="-8.89" y="7.62" size="1.778" layer="94">F</text>
<text x="-4.318" y="7.62" size="1.778" layer="94">H</text>
<text x="-0.762" y="7.62" size="1.778" layer="94">J</text>
<text x="1.27" y="-0.254" size="1.778" layer="94">G2</text>
<text x="-16.764" y="26.162" size="1.9304" layer="95">&gt;Name</text>
<text x="-15.24" y="-25.4" size="1.9304" layer="96">&gt;Value</text>
<text x="-6.35" y="-0.254" size="1.778" layer="94">G1</text>
<pin name="A1" x="17.78" y="20.32" visible="pin" length="short" rot="R180"/>
<pin name="A2" x="17.78" y="17.78" visible="pin" length="short" rot="R180"/>
<pin name="B" x="17.78" y="15.24" visible="pin" length="short" rot="R180"/>
<pin name="C" x="17.78" y="12.7" visible="pin" length="short" rot="R180"/>
<pin name="D1" x="17.78" y="10.16" visible="pin" length="short" rot="R180"/>
<pin name="D2" x="17.78" y="7.62" visible="pin" length="short" rot="R180"/>
<pin name="E" x="17.78" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="F" x="17.78" y="2.54" visible="pin" length="short" rot="R180"/>
<pin name="G1" x="17.78" y="0" visible="pin" length="short" rot="R180"/>
<pin name="G2" x="17.78" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="H" x="17.78" y="-5.08" visible="pin" length="short" rot="R180"/>
<pin name="J" x="17.78" y="-7.62" visible="pin" length="short" rot="R180"/>
<pin name="K" x="17.78" y="-10.16" visible="pin" length="short" rot="R180"/>
<pin name="L" x="17.78" y="-12.7" visible="pin" length="short" rot="R180"/>
<pin name="M" x="17.78" y="-15.24" visible="pin" length="short" rot="R180"/>
<pin name="N" x="17.78" y="-17.78" visible="pin" length="short" rot="R180"/>
<pin name="NC@1" x="-20.32" y="-17.78" visible="pin" length="short"/>
<pin name="NC@13" x="-20.32" y="-20.32" visible="pin" length="short"/>
<pin name="VCC@6" x="-20.32" y="15.24" visible="pin" length="short"/>
<pin name="VCC@18" x="-20.32" y="12.7" visible="pin" length="short"/>
</symbol>
<symbol name="LCD-16X2">
<wire x1="-7.62" y1="22.86" x2="-7.62" y2="-20.32" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-20.32" x2="5.08" y2="-20.32" width="0.254" layer="94"/>
<wire x1="5.08" y1="-20.32" x2="5.08" y2="22.86" width="0.254" layer="94"/>
<wire x1="5.08" y1="22.86" x2="-7.62" y2="22.86" width="0.254" layer="94"/>
<text x="-7.62" y="23.368" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-22.86" size="1.778" layer="96">&gt;Value</text>
<text x="3.048" y="-6.858" size="2.286" layer="94" ratio="20" rot="R90">16x2 LCD</text>
<pin name="A" x="-10.16" y="-15.24" visible="pin" length="short" direction="pwr"/>
<pin name="DB0" x="-10.16" y="5.08" visible="pin" length="short"/>
<pin name="DB1" x="-10.16" y="2.54" visible="pin" length="short"/>
<pin name="DB2" x="-10.16" y="0" visible="pin" length="short"/>
<pin name="DB3" x="-10.16" y="-2.54" visible="pin" length="short"/>
<pin name="DB4" x="-10.16" y="-5.08" visible="pin" length="short"/>
<pin name="DB5" x="-10.16" y="-7.62" visible="pin" length="short"/>
<pin name="DB6" x="-10.16" y="-10.16" visible="pin" length="short"/>
<pin name="DB7" x="-10.16" y="-12.7" visible="pin" length="short"/>
<pin name="E" x="-10.16" y="7.62" visible="pin" length="short" direction="in"/>
<pin name="K" x="-10.16" y="-17.78" visible="pin" length="short" direction="pwr"/>
<pin name="R/W" x="-10.16" y="10.16" visible="pin" length="short" direction="in"/>
<pin name="RS" x="-10.16" y="12.7" visible="pin" length="short" direction="in"/>
<pin name="VDD" x="-10.16" y="17.78" visible="pin" length="short" direction="pwr"/>
<pin name="VO" x="-10.16" y="15.24" visible="pin" length="short"/>
<pin name="VSS" x="-10.16" y="20.32" visible="pin" length="short" direction="pwr"/>
</symbol>
<symbol name="LCD-G12864">
<wire x1="-7.62" y1="25.4" x2="-7.62" y2="-27.94" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-27.94" x2="7.62" y2="-27.94" width="0.254" layer="94"/>
<wire x1="7.62" y1="-27.94" x2="7.62" y2="25.4" width="0.254" layer="94"/>
<wire x1="7.62" y1="25.4" x2="-7.62" y2="25.4" width="0.254" layer="94"/>
<pin name="VDD" x="-12.7" y="22.86" length="middle" direction="pwr"/>
<pin name="VSS" x="-12.7" y="20.32" length="middle" direction="pwr"/>
<pin name="VO" x="-12.7" y="17.78" length="middle"/>
<pin name="DB0" x="-12.7" y="15.24" length="middle"/>
<pin name="DB1" x="-12.7" y="12.7" length="middle"/>
<pin name="DB2" x="-12.7" y="10.16" length="middle"/>
<pin name="DB3" x="-12.7" y="7.62" length="middle"/>
<pin name="DB4" x="-12.7" y="5.08" length="middle"/>
<pin name="DB5" x="-12.7" y="2.54" length="middle"/>
<pin name="DB6" x="-12.7" y="0" length="middle"/>
<pin name="DB7" x="-12.7" y="-2.54" length="middle"/>
<pin name="CS1" x="-12.7" y="-7.62" length="middle" direction="in"/>
<pin name="CS2" x="-12.7" y="-5.08" length="middle" direction="in"/>
<pin name="RST" x="-12.7" y="-10.16" length="middle" direction="in"/>
<pin name="R/W" x="-12.7" y="-12.7" length="middle" direction="in"/>
<pin name="D/I" x="-12.7" y="-15.24" length="middle" direction="in"/>
<pin name="E" x="-12.7" y="-17.78" length="middle" direction="in"/>
<pin name="VEE" x="-12.7" y="-20.32" length="middle"/>
<pin name="A" x="-12.7" y="-22.86" length="middle" direction="pwr"/>
<pin name="K" x="-12.7" y="-25.4" length="middle" direction="pwr"/>
</symbol>
<symbol name="LCD_BACKLIGHT_PADS">
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.54" x2="-5.08" y2="2.54" width="0.254" layer="94"/>
<text x="-5.08" y="3.048" size="1.778" layer="95">&gt;Name</text>
<text x="-5.08" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="A" x="-7.62" y="-2.54" visible="pin" length="short"/>
<pin name="K" x="-7.62" y="0" visible="pin" length="short"/>
</symbol>
<symbol name="LCD_CFAX">
<wire x1="-7.62" y1="27.94" x2="5.08" y2="27.94" width="0.254" layer="94"/>
<wire x1="5.08" y1="27.94" x2="5.08" y2="-25.4" width="0.254" layer="94"/>
<wire x1="5.08" y1="-25.4" x2="-7.62" y2="-25.4" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-25.4" x2="-7.62" y2="27.94" width="0.254" layer="94"/>
<text x="-7.62" y="28.448" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-27.94" size="1.778" layer="95">&gt;Value</text>
<pin name="VCC" x="-12.7" y="25.4" visible="pin" length="middle"/>
<pin name="RESET" x="-12.7" y="22.86" visible="pin" length="middle"/>
<pin name="GND" x="-12.7" y="20.32" visible="pin" length="middle"/>
<pin name="CS1B" x="-12.7" y="15.24" visible="pin" length="middle"/>
<pin name="CS2" x="-12.7" y="12.7" visible="pin" length="middle"/>
<pin name="RS" x="-12.7" y="10.16" visible="pin" length="middle"/>
<pin name="RW" x="-12.7" y="7.62" visible="pin" length="middle"/>
<pin name="ERD" x="-12.7" y="5.08" visible="pin" length="middle"/>
<pin name="MI" x="-12.7" y="2.54" visible="pin" length="middle"/>
<pin name="P/S" x="-12.7" y="0" visible="pin" length="middle"/>
<pin name="D0" x="-12.7" y="-5.08" visible="pin" length="middle"/>
<pin name="D1" x="-12.7" y="-7.62" visible="pin" length="middle"/>
<pin name="D2" x="-12.7" y="-10.16" visible="pin" length="middle"/>
<pin name="D3" x="-12.7" y="-12.7" visible="pin" length="middle"/>
<pin name="D4" x="-12.7" y="-15.24" visible="pin" length="middle"/>
<pin name="D5" x="-12.7" y="-17.78" visible="pin" length="middle"/>
<pin name="D6" x="-12.7" y="-20.32" visible="pin" length="middle"/>
<pin name="D7" x="-12.7" y="-22.86" visible="pin" length="middle"/>
</symbol>
<symbol name="NOKIA6100_LCD">
<wire x1="-7.62" y1="-17.78" x2="-7.62" y2="17.78" width="0.254" layer="94"/>
<wire x1="-7.62" y1="17.78" x2="7.62" y2="17.78" width="0.254" layer="94"/>
<wire x1="7.62" y1="17.78" x2="7.62" y2="-17.78" width="0.254" layer="94"/>
<wire x1="7.62" y1="-17.78" x2="-7.62" y2="-17.78" width="0.254" layer="94"/>
<text x="5.842" y="-10.16" size="1.778" layer="94" ratio="15" rot="R90">Nokia6100_LCD</text>
<text x="-7.62" y="18.542" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-20.32" size="1.778" layer="96">&gt;Value</text>
<pin name="VDISPLAY" x="-10.16" y="15.24" length="short"/>
<pin name="VDIGITAL" x="-10.16" y="12.7" length="short"/>
<pin name="SCK" x="-10.16" y="7.62" length="short"/>
<pin name="DIO" x="-10.16" y="5.08" length="short"/>
<pin name="CS" x="-10.16" y="2.54" length="short"/>
<pin name="GND" x="-10.16" y="-15.24" length="short"/>
<pin name="LEDGND" x="-10.16" y="-12.7" length="short"/>
<pin name="RESET" x="-10.16" y="-2.54" length="short"/>
<pin name="VLED" x="-10.16" y="-7.62" length="short"/>
</symbol>
<symbol name="SCREENKEY-TFT128">
<wire x1="0" y1="0" x2="25.4" y2="0" width="0.254" layer="94"/>
<wire x1="25.4" y1="0" x2="25.4" y2="30.48" width="0.254" layer="94"/>
<wire x1="25.4" y1="30.48" x2="0" y2="30.48" width="0.254" layer="94"/>
<wire x1="0" y1="30.48" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="22.86" y1="7.62" x2="2.54" y2="7.62" width="0.254" layer="94"/>
<wire x1="2.54" y1="7.62" x2="2.54" y2="27.94" width="0.254" layer="94"/>
<wire x1="2.54" y1="27.94" x2="22.86" y2="27.94" width="0.254" layer="94"/>
<wire x1="22.86" y1="27.94" x2="22.86" y2="7.62" width="0.254" layer="94"/>
<text x="2.54" y="2.54" size="1.27" layer="94">SCREENKEY- TFT128</text>
</symbol>
<symbol name="7-SEGMENT-4DIGIT">
<wire x1="-38.1" y1="20.32" x2="38.1" y2="20.32" width="0.254" layer="94"/>
<wire x1="38.1" y1="20.32" x2="38.1" y2="-17.78" width="0.254" layer="94"/>
<wire x1="38.1" y1="-17.78" x2="-38.1" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-38.1" y1="-17.78" x2="-38.1" y2="20.32" width="0.254" layer="94"/>
<wire x1="-22.86" y1="11.43" x2="-21.59" y2="10.16" width="0.508" layer="94"/>
<wire x1="-21.59" y1="10.16" x2="-22.86" y2="8.89" width="0.508" layer="94"/>
<wire x1="-22.86" y1="8.89" x2="-30.48" y2="8.89" width="0.508" layer="94"/>
<wire x1="-30.48" y1="8.89" x2="-31.75" y2="10.16" width="0.508" layer="94"/>
<wire x1="-31.75" y1="10.16" x2="-30.48" y2="11.43" width="0.508" layer="94"/>
<wire x1="-30.48" y1="11.43" x2="-22.86" y2="11.43" width="0.508" layer="94"/>
<wire x1="-21.336" y1="8.89" x2="-20.066" y2="7.62" width="0.508" layer="94"/>
<wire x1="-21.336" y1="8.89" x2="-22.606" y2="7.62" width="0.508" layer="94"/>
<wire x1="-22.606" y1="7.62" x2="-23.876" y2="0" width="0.508" layer="94"/>
<wire x1="-23.876" y1="0" x2="-22.606" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-1.27" x2="-21.336" y2="0" width="0.508" layer="94"/>
<wire x1="-21.336" y1="0" x2="-20.066" y2="7.62" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-2.54" x2="-31.75" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-2.54" x2="-31.75" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-31.75" y1="-3.81" x2="-24.13" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-24.13" y1="-3.81" x2="-22.86" y2="-2.54" width="0.508" layer="94"/>
<wire x1="-22.86" y1="-2.54" x2="-24.13" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-24.13" y1="-1.27" x2="-31.75" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-34.29" y1="-15.24" x2="-33.02" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-34.29" y1="-15.24" x2="-33.02" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-16.51" x2="-25.4" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-25.4" y1="-16.51" x2="-24.13" y2="-15.24" width="0.508" layer="94"/>
<wire x1="-24.13" y1="-15.24" x2="-25.4" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-25.4" y1="-13.97" x2="-33.02" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-32.004" y1="8.89" x2="-30.734" y2="7.62" width="0.508" layer="94"/>
<wire x1="-32.004" y1="8.89" x2="-33.274" y2="7.62" width="0.508" layer="94"/>
<wire x1="-33.274" y1="7.62" x2="-34.544" y2="0" width="0.508" layer="94"/>
<wire x1="-34.544" y1="0" x2="-33.274" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-1.27" x2="-32.004" y2="0" width="0.508" layer="94"/>
<wire x1="-32.004" y1="0" x2="-30.734" y2="7.62" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-3.81" x2="-32.004" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-3.81" x2="-34.544" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-34.544" y1="-5.08" x2="-35.814" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-35.814" y1="-12.7" x2="-34.544" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-34.544" y1="-13.97" x2="-33.274" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-12.7" x2="-32.004" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-3.81" x2="-21.336" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-3.81" x2="-23.876" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-23.876" y1="-5.08" x2="-25.146" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-25.146" y1="-12.7" x2="-23.876" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-23.876" y1="-13.97" x2="-22.606" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-12.7" x2="-21.336" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-5.08" y1="11.43" x2="-3.81" y2="10.16" width="0.508" layer="94"/>
<wire x1="-3.81" y1="10.16" x2="-5.08" y2="8.89" width="0.508" layer="94"/>
<wire x1="-5.08" y1="8.89" x2="-12.7" y2="8.89" width="0.508" layer="94"/>
<wire x1="-12.7" y1="8.89" x2="-13.97" y2="10.16" width="0.508" layer="94"/>
<wire x1="-13.97" y1="10.16" x2="-12.7" y2="11.43" width="0.508" layer="94"/>
<wire x1="-12.7" y1="11.43" x2="-5.08" y2="11.43" width="0.508" layer="94"/>
<wire x1="-3.556" y1="8.89" x2="-2.286" y2="7.62" width="0.508" layer="94"/>
<wire x1="-3.556" y1="8.89" x2="-4.826" y2="7.62" width="0.508" layer="94"/>
<wire x1="-4.826" y1="7.62" x2="-6.096" y2="0" width="0.508" layer="94"/>
<wire x1="-6.096" y1="0" x2="-4.826" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-1.27" x2="-3.556" y2="0" width="0.508" layer="94"/>
<wire x1="-3.556" y1="0" x2="-2.286" y2="7.62" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-2.54" x2="-13.97" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-2.54" x2="-13.97" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-13.97" y1="-3.81" x2="-6.35" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-3.81" x2="-5.08" y2="-2.54" width="0.508" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-6.35" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-1.27" x2="-13.97" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-16.51" y1="-15.24" x2="-15.24" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-16.51" y1="-15.24" x2="-15.24" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-16.51" x2="-7.62" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-7.62" y1="-16.51" x2="-6.35" y2="-15.24" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-15.24" x2="-7.62" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-7.62" y1="-13.97" x2="-15.24" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-14.224" y1="8.89" x2="-12.954" y2="7.62" width="0.508" layer="94"/>
<wire x1="-14.224" y1="8.89" x2="-15.494" y2="7.62" width="0.508" layer="94"/>
<wire x1="-15.494" y1="7.62" x2="-16.764" y2="0" width="0.508" layer="94"/>
<wire x1="-16.764" y1="0" x2="-15.494" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-1.27" x2="-14.224" y2="0" width="0.508" layer="94"/>
<wire x1="-14.224" y1="0" x2="-12.954" y2="7.62" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-3.81" x2="-14.224" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-3.81" x2="-16.764" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-16.764" y1="-5.08" x2="-18.034" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-18.034" y1="-12.7" x2="-16.764" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-16.764" y1="-13.97" x2="-15.494" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-12.7" x2="-14.224" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-3.81" x2="-3.556" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-3.81" x2="-6.096" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-6.096" y1="-5.08" x2="-7.366" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-7.366" y1="-12.7" x2="-6.096" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-6.096" y1="-13.97" x2="-4.826" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-12.7" x2="-3.556" y2="-5.08" width="0.508" layer="94"/>
<wire x1="15.24" y1="11.43" x2="16.51" y2="10.16" width="0.508" layer="94"/>
<wire x1="16.51" y1="10.16" x2="15.24" y2="8.89" width="0.508" layer="94"/>
<wire x1="15.24" y1="8.89" x2="7.62" y2="8.89" width="0.508" layer="94"/>
<wire x1="7.62" y1="8.89" x2="6.35" y2="10.16" width="0.508" layer="94"/>
<wire x1="6.35" y1="10.16" x2="7.62" y2="11.43" width="0.508" layer="94"/>
<wire x1="7.62" y1="11.43" x2="15.24" y2="11.43" width="0.508" layer="94"/>
<wire x1="16.764" y1="8.89" x2="18.034" y2="7.62" width="0.508" layer="94"/>
<wire x1="16.764" y1="8.89" x2="15.494" y2="7.62" width="0.508" layer="94"/>
<wire x1="15.494" y1="7.62" x2="14.224" y2="0" width="0.508" layer="94"/>
<wire x1="14.224" y1="0" x2="15.494" y2="-1.27" width="0.508" layer="94"/>
<wire x1="15.494" y1="-1.27" x2="16.764" y2="0" width="0.508" layer="94"/>
<wire x1="16.764" y1="0" x2="18.034" y2="7.62" width="0.508" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="6.35" y2="-1.27" width="0.508" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="6.35" y2="-3.81" width="0.508" layer="94"/>
<wire x1="6.35" y1="-3.81" x2="13.97" y2="-3.81" width="0.508" layer="94"/>
<wire x1="13.97" y1="-3.81" x2="15.24" y2="-2.54" width="0.508" layer="94"/>
<wire x1="15.24" y1="-2.54" x2="13.97" y2="-1.27" width="0.508" layer="94"/>
<wire x1="13.97" y1="-1.27" x2="6.35" y2="-1.27" width="0.508" layer="94"/>
<wire x1="3.81" y1="-15.24" x2="5.08" y2="-13.97" width="0.508" layer="94"/>
<wire x1="3.81" y1="-15.24" x2="5.08" y2="-16.51" width="0.508" layer="94"/>
<wire x1="5.08" y1="-16.51" x2="12.7" y2="-16.51" width="0.508" layer="94"/>
<wire x1="12.7" y1="-16.51" x2="13.97" y2="-15.24" width="0.508" layer="94"/>
<wire x1="13.97" y1="-15.24" x2="12.7" y2="-13.97" width="0.508" layer="94"/>
<wire x1="12.7" y1="-13.97" x2="5.08" y2="-13.97" width="0.508" layer="94"/>
<wire x1="6.096" y1="8.89" x2="7.366" y2="7.62" width="0.508" layer="94"/>
<wire x1="6.096" y1="8.89" x2="4.826" y2="7.62" width="0.508" layer="94"/>
<wire x1="4.826" y1="7.62" x2="3.556" y2="0" width="0.508" layer="94"/>
<wire x1="3.556" y1="0" x2="4.826" y2="-1.27" width="0.508" layer="94"/>
<wire x1="4.826" y1="-1.27" x2="6.096" y2="0" width="0.508" layer="94"/>
<wire x1="6.096" y1="0" x2="7.366" y2="7.62" width="0.508" layer="94"/>
<wire x1="4.826" y1="-3.81" x2="6.096" y2="-5.08" width="0.508" layer="94"/>
<wire x1="4.826" y1="-3.81" x2="3.556" y2="-5.08" width="0.508" layer="94"/>
<wire x1="3.556" y1="-5.08" x2="2.286" y2="-12.7" width="0.508" layer="94"/>
<wire x1="2.286" y1="-12.7" x2="3.556" y2="-13.97" width="0.508" layer="94"/>
<wire x1="3.556" y1="-13.97" x2="4.826" y2="-12.7" width="0.508" layer="94"/>
<wire x1="4.826" y1="-12.7" x2="6.096" y2="-5.08" width="0.508" layer="94"/>
<wire x1="15.494" y1="-3.81" x2="16.764" y2="-5.08" width="0.508" layer="94"/>
<wire x1="15.494" y1="-3.81" x2="14.224" y2="-5.08" width="0.508" layer="94"/>
<wire x1="14.224" y1="-5.08" x2="12.954" y2="-12.7" width="0.508" layer="94"/>
<wire x1="12.954" y1="-12.7" x2="14.224" y2="-13.97" width="0.508" layer="94"/>
<wire x1="14.224" y1="-13.97" x2="15.494" y2="-12.7" width="0.508" layer="94"/>
<wire x1="15.494" y1="-12.7" x2="16.764" y2="-5.08" width="0.508" layer="94"/>
<wire x1="33.02" y1="11.43" x2="34.29" y2="10.16" width="0.508" layer="94"/>
<wire x1="34.29" y1="10.16" x2="33.02" y2="8.89" width="0.508" layer="94"/>
<wire x1="33.02" y1="8.89" x2="25.4" y2="8.89" width="0.508" layer="94"/>
<wire x1="25.4" y1="8.89" x2="24.13" y2="10.16" width="0.508" layer="94"/>
<wire x1="24.13" y1="10.16" x2="25.4" y2="11.43" width="0.508" layer="94"/>
<wire x1="25.4" y1="11.43" x2="33.02" y2="11.43" width="0.508" layer="94"/>
<wire x1="34.544" y1="8.89" x2="35.814" y2="7.62" width="0.508" layer="94"/>
<wire x1="34.544" y1="8.89" x2="33.274" y2="7.62" width="0.508" layer="94"/>
<wire x1="33.274" y1="7.62" x2="32.004" y2="0" width="0.508" layer="94"/>
<wire x1="32.004" y1="0" x2="33.274" y2="-1.27" width="0.508" layer="94"/>
<wire x1="33.274" y1="-1.27" x2="34.544" y2="0" width="0.508" layer="94"/>
<wire x1="34.544" y1="0" x2="35.814" y2="7.62" width="0.508" layer="94"/>
<wire x1="22.86" y1="-2.54" x2="24.13" y2="-1.27" width="0.508" layer="94"/>
<wire x1="22.86" y1="-2.54" x2="24.13" y2="-3.81" width="0.508" layer="94"/>
<wire x1="24.13" y1="-3.81" x2="31.75" y2="-3.81" width="0.508" layer="94"/>
<wire x1="31.75" y1="-3.81" x2="33.02" y2="-2.54" width="0.508" layer="94"/>
<wire x1="33.02" y1="-2.54" x2="31.75" y2="-1.27" width="0.508" layer="94"/>
<wire x1="31.75" y1="-1.27" x2="24.13" y2="-1.27" width="0.508" layer="94"/>
<wire x1="21.59" y1="-15.24" x2="22.86" y2="-13.97" width="0.508" layer="94"/>
<wire x1="21.59" y1="-15.24" x2="22.86" y2="-16.51" width="0.508" layer="94"/>
<wire x1="22.86" y1="-16.51" x2="30.48" y2="-16.51" width="0.508" layer="94"/>
<wire x1="30.48" y1="-16.51" x2="31.75" y2="-15.24" width="0.508" layer="94"/>
<wire x1="31.75" y1="-15.24" x2="30.48" y2="-13.97" width="0.508" layer="94"/>
<wire x1="30.48" y1="-13.97" x2="22.86" y2="-13.97" width="0.508" layer="94"/>
<wire x1="23.876" y1="8.89" x2="25.146" y2="7.62" width="0.508" layer="94"/>
<wire x1="23.876" y1="8.89" x2="22.606" y2="7.62" width="0.508" layer="94"/>
<wire x1="22.606" y1="7.62" x2="21.336" y2="0" width="0.508" layer="94"/>
<wire x1="21.336" y1="0" x2="22.606" y2="-1.27" width="0.508" layer="94"/>
<wire x1="22.606" y1="-1.27" x2="23.876" y2="0" width="0.508" layer="94"/>
<wire x1="23.876" y1="0" x2="25.146" y2="7.62" width="0.508" layer="94"/>
<wire x1="22.606" y1="-3.81" x2="23.876" y2="-5.08" width="0.508" layer="94"/>
<wire x1="22.606" y1="-3.81" x2="21.336" y2="-5.08" width="0.508" layer="94"/>
<wire x1="21.336" y1="-5.08" x2="20.066" y2="-12.7" width="0.508" layer="94"/>
<wire x1="20.066" y1="-12.7" x2="21.336" y2="-13.97" width="0.508" layer="94"/>
<wire x1="21.336" y1="-13.97" x2="22.606" y2="-12.7" width="0.508" layer="94"/>
<wire x1="22.606" y1="-12.7" x2="23.876" y2="-5.08" width="0.508" layer="94"/>
<wire x1="33.274" y1="-3.81" x2="34.544" y2="-5.08" width="0.508" layer="94"/>
<wire x1="33.274" y1="-3.81" x2="32.004" y2="-5.08" width="0.508" layer="94"/>
<wire x1="32.004" y1="-5.08" x2="30.734" y2="-12.7" width="0.508" layer="94"/>
<wire x1="30.734" y1="-12.7" x2="32.004" y2="-13.97" width="0.508" layer="94"/>
<wire x1="32.004" y1="-13.97" x2="33.274" y2="-12.7" width="0.508" layer="94"/>
<wire x1="33.274" y1="-12.7" x2="34.544" y2="-5.08" width="0.508" layer="94"/>
<circle x="-20.32" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="-2.54" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="17.78" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="35.56" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="-0.762" y="-7.62" radius="1.27" width="0.508" layer="94"/>
<circle x="0.508" y="2.54" radius="1.27" width="0.508" layer="94"/>
<circle x="20.32" y="7.62" radius="1.27" width="0.508" layer="94"/>
<text x="-26.924" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="-22.352" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="-23.622" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="-29.464" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="-34.29" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="-33.02" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="-28.194" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="-21.082" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="-9.144" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="-4.572" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="-5.842" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="-11.684" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="-16.51" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="-15.24" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="-10.414" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="-3.302" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="11.176" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="15.748" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="14.478" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="8.636" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="3.81" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="5.08" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="9.906" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="17.018" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="28.956" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="33.528" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="32.258" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="26.416" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="21.59" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="22.86" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="27.686" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="34.798" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="-1.524" y="-8.128" size="1.016" layer="94" ratio="15">L2</text>
<text x="-0.254" y="2.032" size="1.016" layer="94" ratio="15">L1</text>
<text x="19.558" y="7.112" size="1.016" layer="94" ratio="15">L3</text>
<pin name="1" x="-20.32" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="2" x="-17.78" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="3" x="-15.24" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="4" x="-12.7" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="5" x="-10.16" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="6" x="-7.62" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="7" x="-5.08" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="8" x="-2.54" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="9" x="0" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="11" x="5.08" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="13" x="10.16" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="14" x="12.7" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="15" x="15.24" y="22.86" visible="pin" length="short" rot="R270"/>
<pin name="16" x="17.78" y="22.86" visible="pin" length="short" rot="R270"/>
</symbol>
<symbol name="7-SEGMENT-4DIGIT-YOUNGSUN">
<wire x1="38.1" y1="22.86" x2="38.1" y2="-17.78" width="0.254" layer="94"/>
<wire x1="38.1" y1="-17.78" x2="-38.1" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-38.1" y1="-17.78" x2="-38.1" y2="22.86" width="0.254" layer="94"/>
<wire x1="-22.86" y1="11.43" x2="-21.59" y2="10.16" width="0.508" layer="94"/>
<wire x1="-21.59" y1="10.16" x2="-22.86" y2="8.89" width="0.508" layer="94"/>
<wire x1="-22.86" y1="8.89" x2="-30.48" y2="8.89" width="0.508" layer="94"/>
<wire x1="-30.48" y1="8.89" x2="-31.75" y2="10.16" width="0.508" layer="94"/>
<wire x1="-31.75" y1="10.16" x2="-30.48" y2="11.43" width="0.508" layer="94"/>
<wire x1="-30.48" y1="11.43" x2="-22.86" y2="11.43" width="0.508" layer="94"/>
<wire x1="-21.336" y1="8.89" x2="-20.066" y2="7.62" width="0.508" layer="94"/>
<wire x1="-21.336" y1="8.89" x2="-22.606" y2="7.62" width="0.508" layer="94"/>
<wire x1="-22.606" y1="7.62" x2="-23.876" y2="0" width="0.508" layer="94"/>
<wire x1="-23.876" y1="0" x2="-22.606" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-1.27" x2="-21.336" y2="0" width="0.508" layer="94"/>
<wire x1="-21.336" y1="0" x2="-20.066" y2="7.62" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-2.54" x2="-31.75" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-2.54" x2="-31.75" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-31.75" y1="-3.81" x2="-24.13" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-24.13" y1="-3.81" x2="-22.86" y2="-2.54" width="0.508" layer="94"/>
<wire x1="-22.86" y1="-2.54" x2="-24.13" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-24.13" y1="-1.27" x2="-31.75" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-34.29" y1="-15.24" x2="-33.02" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-34.29" y1="-15.24" x2="-33.02" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-16.51" x2="-25.4" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-25.4" y1="-16.51" x2="-24.13" y2="-15.24" width="0.508" layer="94"/>
<wire x1="-24.13" y1="-15.24" x2="-25.4" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-25.4" y1="-13.97" x2="-33.02" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-32.004" y1="8.89" x2="-30.734" y2="7.62" width="0.508" layer="94"/>
<wire x1="-32.004" y1="8.89" x2="-33.274" y2="7.62" width="0.508" layer="94"/>
<wire x1="-33.274" y1="7.62" x2="-34.544" y2="0" width="0.508" layer="94"/>
<wire x1="-34.544" y1="0" x2="-33.274" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-1.27" x2="-32.004" y2="0" width="0.508" layer="94"/>
<wire x1="-32.004" y1="0" x2="-30.734" y2="7.62" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-3.81" x2="-32.004" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-3.81" x2="-34.544" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-34.544" y1="-5.08" x2="-35.814" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-35.814" y1="-12.7" x2="-34.544" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-34.544" y1="-13.97" x2="-33.274" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-12.7" x2="-32.004" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-3.81" x2="-21.336" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-3.81" x2="-23.876" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-23.876" y1="-5.08" x2="-25.146" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-25.146" y1="-12.7" x2="-23.876" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-23.876" y1="-13.97" x2="-22.606" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-22.606" y1="-12.7" x2="-21.336" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-5.08" y1="11.43" x2="-3.81" y2="10.16" width="0.508" layer="94"/>
<wire x1="-3.81" y1="10.16" x2="-5.08" y2="8.89" width="0.508" layer="94"/>
<wire x1="-5.08" y1="8.89" x2="-12.7" y2="8.89" width="0.508" layer="94"/>
<wire x1="-12.7" y1="8.89" x2="-13.97" y2="10.16" width="0.508" layer="94"/>
<wire x1="-13.97" y1="10.16" x2="-12.7" y2="11.43" width="0.508" layer="94"/>
<wire x1="-12.7" y1="11.43" x2="-5.08" y2="11.43" width="0.508" layer="94"/>
<wire x1="-3.556" y1="8.89" x2="-2.286" y2="7.62" width="0.508" layer="94"/>
<wire x1="-3.556" y1="8.89" x2="-4.826" y2="7.62" width="0.508" layer="94"/>
<wire x1="-4.826" y1="7.62" x2="-6.096" y2="0" width="0.508" layer="94"/>
<wire x1="-6.096" y1="0" x2="-4.826" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-1.27" x2="-3.556" y2="0" width="0.508" layer="94"/>
<wire x1="-3.556" y1="0" x2="-2.286" y2="7.62" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-2.54" x2="-13.97" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-2.54" x2="-13.97" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-13.97" y1="-3.81" x2="-6.35" y2="-3.81" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-3.81" x2="-5.08" y2="-2.54" width="0.508" layer="94"/>
<wire x1="-5.08" y1="-2.54" x2="-6.35" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-1.27" x2="-13.97" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-16.51" y1="-15.24" x2="-15.24" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-16.51" y1="-15.24" x2="-15.24" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-16.51" x2="-7.62" y2="-16.51" width="0.508" layer="94"/>
<wire x1="-7.62" y1="-16.51" x2="-6.35" y2="-15.24" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-15.24" x2="-7.62" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-7.62" y1="-13.97" x2="-15.24" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-14.224" y1="8.89" x2="-12.954" y2="7.62" width="0.508" layer="94"/>
<wire x1="-14.224" y1="8.89" x2="-15.494" y2="7.62" width="0.508" layer="94"/>
<wire x1="-15.494" y1="7.62" x2="-16.764" y2="0" width="0.508" layer="94"/>
<wire x1="-16.764" y1="0" x2="-15.494" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-1.27" x2="-14.224" y2="0" width="0.508" layer="94"/>
<wire x1="-14.224" y1="0" x2="-12.954" y2="7.62" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-3.81" x2="-14.224" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-3.81" x2="-16.764" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-16.764" y1="-5.08" x2="-18.034" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-18.034" y1="-12.7" x2="-16.764" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-16.764" y1="-13.97" x2="-15.494" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-12.7" x2="-14.224" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-3.81" x2="-3.556" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-3.81" x2="-6.096" y2="-5.08" width="0.508" layer="94"/>
<wire x1="-6.096" y1="-5.08" x2="-7.366" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-7.366" y1="-12.7" x2="-6.096" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-6.096" y1="-13.97" x2="-4.826" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-4.826" y1="-12.7" x2="-3.556" y2="-5.08" width="0.508" layer="94"/>
<wire x1="15.24" y1="11.43" x2="16.51" y2="10.16" width="0.508" layer="94"/>
<wire x1="16.51" y1="10.16" x2="15.24" y2="8.89" width="0.508" layer="94"/>
<wire x1="15.24" y1="8.89" x2="7.62" y2="8.89" width="0.508" layer="94"/>
<wire x1="7.62" y1="8.89" x2="6.35" y2="10.16" width="0.508" layer="94"/>
<wire x1="6.35" y1="10.16" x2="7.62" y2="11.43" width="0.508" layer="94"/>
<wire x1="7.62" y1="11.43" x2="15.24" y2="11.43" width="0.508" layer="94"/>
<wire x1="16.764" y1="8.89" x2="18.034" y2="7.62" width="0.508" layer="94"/>
<wire x1="16.764" y1="8.89" x2="15.494" y2="7.62" width="0.508" layer="94"/>
<wire x1="15.494" y1="7.62" x2="14.224" y2="0" width="0.508" layer="94"/>
<wire x1="14.224" y1="0" x2="15.494" y2="-1.27" width="0.508" layer="94"/>
<wire x1="15.494" y1="-1.27" x2="16.764" y2="0" width="0.508" layer="94"/>
<wire x1="16.764" y1="0" x2="18.034" y2="7.62" width="0.508" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="6.35" y2="-1.27" width="0.508" layer="94"/>
<wire x1="5.08" y1="-2.54" x2="6.35" y2="-3.81" width="0.508" layer="94"/>
<wire x1="6.35" y1="-3.81" x2="13.97" y2="-3.81" width="0.508" layer="94"/>
<wire x1="13.97" y1="-3.81" x2="15.24" y2="-2.54" width="0.508" layer="94"/>
<wire x1="15.24" y1="-2.54" x2="13.97" y2="-1.27" width="0.508" layer="94"/>
<wire x1="13.97" y1="-1.27" x2="6.35" y2="-1.27" width="0.508" layer="94"/>
<wire x1="3.81" y1="-15.24" x2="5.08" y2="-13.97" width="0.508" layer="94"/>
<wire x1="3.81" y1="-15.24" x2="5.08" y2="-16.51" width="0.508" layer="94"/>
<wire x1="5.08" y1="-16.51" x2="12.7" y2="-16.51" width="0.508" layer="94"/>
<wire x1="12.7" y1="-16.51" x2="13.97" y2="-15.24" width="0.508" layer="94"/>
<wire x1="13.97" y1="-15.24" x2="12.7" y2="-13.97" width="0.508" layer="94"/>
<wire x1="12.7" y1="-13.97" x2="5.08" y2="-13.97" width="0.508" layer="94"/>
<wire x1="6.096" y1="8.89" x2="7.366" y2="7.62" width="0.508" layer="94"/>
<wire x1="6.096" y1="8.89" x2="4.826" y2="7.62" width="0.508" layer="94"/>
<wire x1="4.826" y1="7.62" x2="3.556" y2="0" width="0.508" layer="94"/>
<wire x1="3.556" y1="0" x2="4.826" y2="-1.27" width="0.508" layer="94"/>
<wire x1="4.826" y1="-1.27" x2="6.096" y2="0" width="0.508" layer="94"/>
<wire x1="6.096" y1="0" x2="7.366" y2="7.62" width="0.508" layer="94"/>
<wire x1="4.826" y1="-3.81" x2="6.096" y2="-5.08" width="0.508" layer="94"/>
<wire x1="4.826" y1="-3.81" x2="3.556" y2="-5.08" width="0.508" layer="94"/>
<wire x1="3.556" y1="-5.08" x2="2.286" y2="-12.7" width="0.508" layer="94"/>
<wire x1="2.286" y1="-12.7" x2="3.556" y2="-13.97" width="0.508" layer="94"/>
<wire x1="3.556" y1="-13.97" x2="4.826" y2="-12.7" width="0.508" layer="94"/>
<wire x1="4.826" y1="-12.7" x2="6.096" y2="-5.08" width="0.508" layer="94"/>
<wire x1="15.494" y1="-3.81" x2="16.764" y2="-5.08" width="0.508" layer="94"/>
<wire x1="15.494" y1="-3.81" x2="14.224" y2="-5.08" width="0.508" layer="94"/>
<wire x1="14.224" y1="-5.08" x2="12.954" y2="-12.7" width="0.508" layer="94"/>
<wire x1="12.954" y1="-12.7" x2="14.224" y2="-13.97" width="0.508" layer="94"/>
<wire x1="14.224" y1="-13.97" x2="15.494" y2="-12.7" width="0.508" layer="94"/>
<wire x1="15.494" y1="-12.7" x2="16.764" y2="-5.08" width="0.508" layer="94"/>
<wire x1="33.02" y1="11.43" x2="34.29" y2="10.16" width="0.508" layer="94"/>
<wire x1="34.29" y1="10.16" x2="33.02" y2="8.89" width="0.508" layer="94"/>
<wire x1="33.02" y1="8.89" x2="25.4" y2="8.89" width="0.508" layer="94"/>
<wire x1="25.4" y1="8.89" x2="24.13" y2="10.16" width="0.508" layer="94"/>
<wire x1="24.13" y1="10.16" x2="25.4" y2="11.43" width="0.508" layer="94"/>
<wire x1="25.4" y1="11.43" x2="33.02" y2="11.43" width="0.508" layer="94"/>
<wire x1="34.544" y1="8.89" x2="35.814" y2="7.62" width="0.508" layer="94"/>
<wire x1="34.544" y1="8.89" x2="33.274" y2="7.62" width="0.508" layer="94"/>
<wire x1="33.274" y1="7.62" x2="32.004" y2="0" width="0.508" layer="94"/>
<wire x1="32.004" y1="0" x2="33.274" y2="-1.27" width="0.508" layer="94"/>
<wire x1="33.274" y1="-1.27" x2="34.544" y2="0" width="0.508" layer="94"/>
<wire x1="34.544" y1="0" x2="35.814" y2="7.62" width="0.508" layer="94"/>
<wire x1="22.86" y1="-2.54" x2="24.13" y2="-1.27" width="0.508" layer="94"/>
<wire x1="22.86" y1="-2.54" x2="24.13" y2="-3.81" width="0.508" layer="94"/>
<wire x1="24.13" y1="-3.81" x2="31.75" y2="-3.81" width="0.508" layer="94"/>
<wire x1="31.75" y1="-3.81" x2="33.02" y2="-2.54" width="0.508" layer="94"/>
<wire x1="33.02" y1="-2.54" x2="31.75" y2="-1.27" width="0.508" layer="94"/>
<wire x1="31.75" y1="-1.27" x2="24.13" y2="-1.27" width="0.508" layer="94"/>
<wire x1="21.59" y1="-15.24" x2="22.86" y2="-13.97" width="0.508" layer="94"/>
<wire x1="21.59" y1="-15.24" x2="22.86" y2="-16.51" width="0.508" layer="94"/>
<wire x1="22.86" y1="-16.51" x2="30.48" y2="-16.51" width="0.508" layer="94"/>
<wire x1="30.48" y1="-16.51" x2="31.75" y2="-15.24" width="0.508" layer="94"/>
<wire x1="31.75" y1="-15.24" x2="30.48" y2="-13.97" width="0.508" layer="94"/>
<wire x1="30.48" y1="-13.97" x2="22.86" y2="-13.97" width="0.508" layer="94"/>
<wire x1="23.876" y1="8.89" x2="25.146" y2="7.62" width="0.508" layer="94"/>
<wire x1="23.876" y1="8.89" x2="22.606" y2="7.62" width="0.508" layer="94"/>
<wire x1="22.606" y1="7.62" x2="21.336" y2="0" width="0.508" layer="94"/>
<wire x1="21.336" y1="0" x2="22.606" y2="-1.27" width="0.508" layer="94"/>
<wire x1="22.606" y1="-1.27" x2="23.876" y2="0" width="0.508" layer="94"/>
<wire x1="23.876" y1="0" x2="25.146" y2="7.62" width="0.508" layer="94"/>
<wire x1="22.606" y1="-3.81" x2="23.876" y2="-5.08" width="0.508" layer="94"/>
<wire x1="22.606" y1="-3.81" x2="21.336" y2="-5.08" width="0.508" layer="94"/>
<wire x1="21.336" y1="-5.08" x2="20.066" y2="-12.7" width="0.508" layer="94"/>
<wire x1="20.066" y1="-12.7" x2="21.336" y2="-13.97" width="0.508" layer="94"/>
<wire x1="21.336" y1="-13.97" x2="22.606" y2="-12.7" width="0.508" layer="94"/>
<wire x1="22.606" y1="-12.7" x2="23.876" y2="-5.08" width="0.508" layer="94"/>
<wire x1="33.274" y1="-3.81" x2="34.544" y2="-5.08" width="0.508" layer="94"/>
<wire x1="33.274" y1="-3.81" x2="32.004" y2="-5.08" width="0.508" layer="94"/>
<wire x1="32.004" y1="-5.08" x2="30.734" y2="-12.7" width="0.508" layer="94"/>
<wire x1="30.734" y1="-12.7" x2="32.004" y2="-13.97" width="0.508" layer="94"/>
<wire x1="32.004" y1="-13.97" x2="33.274" y2="-12.7" width="0.508" layer="94"/>
<wire x1="33.274" y1="-12.7" x2="34.544" y2="-5.08" width="0.508" layer="94"/>
<wire x1="38.1" y1="22.86" x2="-38.1" y2="22.86" width="0.254" layer="94"/>
<circle x="-20.32" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="-2.54" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="17.78" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="35.56" y="-15.24" radius="1.27" width="0.508" layer="94"/>
<circle x="-0.762" y="-7.62" radius="1.27" width="0.508" layer="94"/>
<circle x="0.508" y="2.54" radius="1.27" width="0.508" layer="94"/>
<circle x="20.32" y="7.62" radius="1.27" width="0.508" layer="94"/>
<text x="-26.924" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="-22.352" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="-23.622" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="-29.464" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="-34.29" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="-33.02" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="-28.194" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="-21.082" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="-9.144" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="-4.572" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="-5.842" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="-11.684" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="-16.51" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="-15.24" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="-10.414" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="-3.302" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="11.176" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="15.748" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="14.478" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="8.636" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="3.81" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="5.08" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="9.906" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="17.018" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="28.956" y="9.652" size="1.016" layer="94" ratio="15">A</text>
<text x="33.528" y="3.302" size="1.016" layer="94" ratio="15">B</text>
<text x="32.258" y="-9.398" size="1.016" layer="94" ratio="15">C</text>
<text x="26.416" y="-15.748" size="1.016" layer="94" ratio="15">D</text>
<text x="21.59" y="-9.398" size="1.016" layer="94" ratio="15">E</text>
<text x="22.86" y="3.302" size="1.016" layer="94" ratio="15">F</text>
<text x="27.686" y="-3.048" size="1.016" layer="94" ratio="15">G</text>
<text x="34.798" y="-15.748" size="1.016" layer="94" ratio="15">DP</text>
<text x="-1.524" y="-3.048" size="1.016" layer="94" ratio="15">COL</text>
<text x="18.796" y="9.652" size="1.016" layer="94" ratio="15">APOS</text>
<text x="-35.56" y="-20.32" size="1.778" layer="95">&gt;Name</text>
<text x="35.56" y="-18.542" size="1.778" layer="96" rot="R180">&gt;Value</text>
<pin name="DIG2" x="-27.94" y="27.94" length="middle" rot="R270"/>
<pin name="DIG3" x="-25.4" y="27.94" length="middle" rot="R270"/>
<pin name="DIG4" x="-22.86" y="27.94" length="middle" rot="R270"/>
<pin name="COL-A" x="-12.7" y="27.94" length="middle" rot="R270"/>
<pin name="APOS-A" x="27.94" y="27.94" length="middle" rot="R270"/>
<pin name="A" x="0" y="27.94" length="middle" rot="R270"/>
<pin name="B" x="2.54" y="27.94" length="middle" rot="R270"/>
<pin name="C" x="5.08" y="27.94" length="middle" rot="R270"/>
<pin name="D" x="7.62" y="27.94" length="middle" rot="R270"/>
<pin name="E" x="10.16" y="27.94" length="middle" rot="R270"/>
<pin name="F" x="12.7" y="27.94" length="middle" rot="R270"/>
<pin name="G" x="15.24" y="27.94" length="middle" rot="R270"/>
<pin name="DP" x="17.78" y="27.94" length="middle" rot="R270"/>
<pin name="COL-C" x="-10.16" y="27.94" length="middle" rot="R270"/>
<pin name="APOS-C" x="30.48" y="27.94" length="middle" rot="R270"/>
<pin name="DIG1" x="-30.48" y="27.94" length="middle" rot="R270"/>
</symbol>
<symbol name="7-SEGMENT-DISPLAY">
<wire x1="-15.24" y1="15.24" x2="10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="-15.24" x2="-15.24" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-15.24" y1="-15.24" x2="-15.24" y2="15.24" width="0.254" layer="94"/>
<wire x1="5.08" y1="13.97" x2="6.35" y2="12.7" width="0.508" layer="94"/>
<wire x1="6.35" y1="12.7" x2="5.08" y2="11.43" width="0.508" layer="94"/>
<wire x1="5.08" y1="11.43" x2="-2.54" y2="11.43" width="0.508" layer="94"/>
<wire x1="-2.54" y1="11.43" x2="-3.81" y2="12.7" width="0.508" layer="94"/>
<wire x1="-3.81" y1="12.7" x2="-2.54" y2="13.97" width="0.508" layer="94"/>
<wire x1="-2.54" y1="13.97" x2="5.08" y2="13.97" width="0.508" layer="94"/>
<wire x1="6.604" y1="11.43" x2="7.874" y2="10.16" width="0.508" layer="94"/>
<wire x1="6.604" y1="11.43" x2="5.334" y2="10.16" width="0.508" layer="94"/>
<wire x1="5.334" y1="10.16" x2="4.064" y2="2.54" width="0.508" layer="94"/>
<wire x1="4.064" y1="2.54" x2="5.334" y2="1.27" width="0.508" layer="94"/>
<wire x1="5.334" y1="1.27" x2="6.604" y2="2.54" width="0.508" layer="94"/>
<wire x1="6.604" y1="2.54" x2="7.874" y2="10.16" width="0.508" layer="94"/>
<wire x1="-5.08" y1="0" x2="-3.81" y2="1.27" width="0.508" layer="94"/>
<wire x1="-5.08" y1="0" x2="-3.81" y2="-1.27" width="0.508" layer="94"/>
<wire x1="-3.81" y1="-1.27" x2="3.81" y2="-1.27" width="0.508" layer="94"/>
<wire x1="3.81" y1="-1.27" x2="5.08" y2="0" width="0.508" layer="94"/>
<wire x1="5.08" y1="0" x2="3.81" y2="1.27" width="0.508" layer="94"/>
<wire x1="3.81" y1="1.27" x2="-3.81" y2="1.27" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-12.7" x2="-5.08" y2="-11.43" width="0.508" layer="94"/>
<wire x1="-6.35" y1="-12.7" x2="-5.08" y2="-13.97" width="0.508" layer="94"/>
<wire x1="-5.08" y1="-13.97" x2="2.54" y2="-13.97" width="0.508" layer="94"/>
<wire x1="2.54" y1="-13.97" x2="3.81" y2="-12.7" width="0.508" layer="94"/>
<wire x1="3.81" y1="-12.7" x2="2.54" y2="-11.43" width="0.508" layer="94"/>
<wire x1="2.54" y1="-11.43" x2="-5.08" y2="-11.43" width="0.508" layer="94"/>
<wire x1="-4.064" y1="11.43" x2="-2.794" y2="10.16" width="0.508" layer="94"/>
<wire x1="-4.064" y1="11.43" x2="-5.334" y2="10.16" width="0.508" layer="94"/>
<wire x1="-5.334" y1="10.16" x2="-6.604" y2="2.54" width="0.508" layer="94"/>
<wire x1="-6.604" y1="2.54" x2="-5.334" y2="1.27" width="0.508" layer="94"/>
<wire x1="-5.334" y1="1.27" x2="-4.064" y2="2.54" width="0.508" layer="94"/>
<wire x1="-4.064" y1="2.54" x2="-2.794" y2="10.16" width="0.508" layer="94"/>
<wire x1="-5.334" y1="-1.27" x2="-4.064" y2="-2.54" width="0.508" layer="94"/>
<wire x1="-5.334" y1="-1.27" x2="-6.604" y2="-2.54" width="0.508" layer="94"/>
<wire x1="-6.604" y1="-2.54" x2="-7.874" y2="-10.16" width="0.508" layer="94"/>
<wire x1="-7.874" y1="-10.16" x2="-6.604" y2="-11.43" width="0.508" layer="94"/>
<wire x1="-6.604" y1="-11.43" x2="-5.334" y2="-10.16" width="0.508" layer="94"/>
<wire x1="-5.334" y1="-10.16" x2="-4.064" y2="-2.54" width="0.508" layer="94"/>
<wire x1="5.334" y1="-1.27" x2="6.604" y2="-2.54" width="0.508" layer="94"/>
<wire x1="5.334" y1="-1.27" x2="4.064" y2="-2.54" width="0.508" layer="94"/>
<wire x1="4.064" y1="-2.54" x2="2.794" y2="-10.16" width="0.508" layer="94"/>
<wire x1="2.794" y1="-10.16" x2="4.064" y2="-11.43" width="0.508" layer="94"/>
<wire x1="4.064" y1="-11.43" x2="5.334" y2="-10.16" width="0.508" layer="94"/>
<wire x1="5.334" y1="-10.16" x2="6.604" y2="-2.54" width="0.508" layer="94"/>
<circle x="7.62" y="-12.7" radius="1.27" width="0.508" layer="94"/>
<text x="1.016" y="12.192" size="1.016" layer="94" ratio="15">A</text>
<text x="5.588" y="5.842" size="1.016" layer="94" ratio="15">B</text>
<text x="4.318" y="-6.858" size="1.016" layer="94" ratio="15">C</text>
<text x="-1.524" y="-13.208" size="1.016" layer="94" ratio="15">D</text>
<text x="-6.35" y="-6.858" size="1.016" layer="94" ratio="15">E</text>
<text x="-5.08" y="5.842" size="1.016" layer="94" ratio="15">F</text>
<text x="-0.254" y="-0.508" size="1.016" layer="94" ratio="15">G</text>
<text x="6.858" y="-13.208" size="1.016" layer="94" ratio="15">DP</text>
<pin name="A" x="-17.78" y="10.16" length="short"/>
<pin name="B" x="-17.78" y="7.62" length="short"/>
<pin name="C" x="-17.78" y="5.08" length="short"/>
<pin name="D" x="-17.78" y="2.54" length="short"/>
<pin name="DP" x="-17.78" y="-7.62" length="short"/>
<pin name="E" x="-17.78" y="0" length="short"/>
<pin name="F" x="-17.78" y="-2.54" length="short"/>
<pin name="G" x="-17.78" y="-5.08" length="short"/>
<pin name="G1" x="-17.78" y="-10.16" length="short"/>
<pin name="G2" x="-17.78" y="-12.7" length="short"/>
</symbol>
<symbol name="7-SEGMENT-1&quot;">
<wire x1="-15.24" y1="-15.24" x2="-15.24" y2="15.24" width="0.254" layer="94"/>
<wire x1="-15.24" y1="15.24" x2="10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-15.24" y1="-15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-3.81" y1="12.7" x2="-2.54" y2="13.97" width="0.508" layer="94"/>
<wire x1="-2.54" y1="13.97" x2="5.08" y2="13.97" width="0.508" layer="94"/>
<wire x1="5.08" y1="13.97" x2="6.35" y2="12.7" width="0.508" layer="94"/>
<wire x1="6.35" y1="12.7" x2="5.08" y2="11.43" width="0.508" layer="94"/>
<wire x1="5.08" y1="11.43" x2="-2.54" y2="11.43" width="0.508" layer="94"/>
<wire x1="-2.54" y1="11.43" x2="-3.81" y2="12.7" width="0.508" layer="94"/>
<wire x1="5.334" y1="10.16" x2="4.064" y2="2.54" width="0.508" layer="94"/>
<wire x1="4.064" y1="2.54" x2="5.334" y2="1.27" width="0.508" layer="94"/>
<wire x1="5.334" y1="1.27" x2="6.604" y2="2.54" width="0.508" layer="94"/>
<wire x1="6.604" y1="2.54" x2="7.874" y2="10.16" width="0.508" layer="94"/>
<wire x1="7.874" y1="10.16" x2="6.604" y2="11.43" width="0.508" layer="94"/>
<wire x1="6.604" y1="11.43" x2="5.334" y2="10.16" width="0.508" layer="94"/>
<wire x1="-5.588" y1="10.414" x2="-6.858" y2="2.794" width="0.508" layer="94"/>
<wire x1="-6.858" y1="2.794" x2="-5.588" y2="1.524" width="0.508" layer="94"/>
<wire x1="-5.588" y1="1.524" x2="-4.318" y2="2.794" width="0.508" layer="94"/>
<wire x1="-4.318" y1="2.794" x2="-3.048" y2="10.414" width="0.508" layer="94"/>
<wire x1="-3.048" y1="10.414" x2="-4.318" y2="11.684" width="0.508" layer="94"/>
<wire x1="-4.318" y1="11.684" x2="-5.588" y2="10.414" width="0.508" layer="94"/>
<wire x1="-5.334" y1="0.508" x2="-4.064" y2="1.778" width="0.508" layer="94"/>
<wire x1="-4.064" y1="1.778" x2="3.556" y2="1.778" width="0.508" layer="94"/>
<wire x1="3.556" y1="1.778" x2="4.826" y2="0.508" width="0.508" layer="94"/>
<wire x1="4.826" y1="0.508" x2="3.556" y2="-0.762" width="0.508" layer="94"/>
<wire x1="3.556" y1="-0.762" x2="-4.064" y2="-0.762" width="0.508" layer="94"/>
<wire x1="-4.064" y1="-0.762" x2="-5.334" y2="0.508" width="0.508" layer="94"/>
<wire x1="-7.112" y1="-1.524" x2="-8.382" y2="-9.144" width="0.508" layer="94"/>
<wire x1="-8.382" y1="-9.144" x2="-7.112" y2="-10.414" width="0.508" layer="94"/>
<wire x1="-7.112" y1="-10.414" x2="-5.842" y2="-9.144" width="0.508" layer="94"/>
<wire x1="-5.842" y1="-9.144" x2="-4.572" y2="-1.524" width="0.508" layer="94"/>
<wire x1="-4.572" y1="-1.524" x2="-5.842" y2="-0.254" width="0.508" layer="94"/>
<wire x1="-5.842" y1="-0.254" x2="-7.112" y2="-1.524" width="0.508" layer="94"/>
<wire x1="3.81" y1="-1.778" x2="2.54" y2="-9.398" width="0.508" layer="94"/>
<wire x1="2.54" y1="-9.398" x2="3.81" y2="-10.668" width="0.508" layer="94"/>
<wire x1="3.81" y1="-10.668" x2="5.08" y2="-9.398" width="0.508" layer="94"/>
<wire x1="5.08" y1="-9.398" x2="6.35" y2="-1.778" width="0.508" layer="94"/>
<wire x1="6.35" y1="-1.778" x2="5.08" y2="-0.508" width="0.508" layer="94"/>
<wire x1="5.08" y1="-0.508" x2="3.81" y2="-1.778" width="0.508" layer="94"/>
<wire x1="-6.858" y1="-11.43" x2="-5.588" y2="-10.16" width="0.508" layer="94"/>
<wire x1="-5.588" y1="-10.16" x2="2.032" y2="-10.16" width="0.508" layer="94"/>
<wire x1="2.032" y1="-10.16" x2="3.302" y2="-11.43" width="0.508" layer="94"/>
<wire x1="3.302" y1="-11.43" x2="2.032" y2="-12.7" width="0.508" layer="94"/>
<wire x1="2.032" y1="-12.7" x2="-5.588" y2="-12.7" width="0.508" layer="94"/>
<wire x1="-5.588" y1="-12.7" x2="-6.858" y2="-11.43" width="0.508" layer="94"/>
<circle x="7.62" y="-12.7" radius="1.27" width="0.508" layer="94"/>
<text x="0.762" y="12.192" size="1.016" layer="94" ratio="15">A</text>
<text x="5.588" y="5.842" size="1.016" layer="94" ratio="15">B</text>
<text x="4.064" y="-6.35" size="1.016" layer="94" ratio="15">C</text>
<text x="-2.286" y="-11.938" size="1.016" layer="94" ratio="15">D</text>
<text x="-6.858" y="-5.842" size="1.016" layer="94" ratio="15">E</text>
<text x="-5.334" y="6.096" size="1.016" layer="94" ratio="15">F</text>
<text x="-0.762" y="0" size="1.016" layer="94" ratio="15">G</text>
<text x="6.604" y="-13.208" size="1.016" layer="94" ratio="15">DP</text>
<pin name="A" x="-20.32" y="10.16" length="middle"/>
<pin name="B" x="-20.32" y="7.62" length="middle"/>
<pin name="C" x="-20.32" y="5.08" length="middle"/>
<pin name="D" x="-20.32" y="2.54" length="middle"/>
<pin name="E" x="-20.32" y="0" length="middle"/>
<pin name="F" x="-20.32" y="-2.54" length="middle"/>
<pin name="G" x="-20.32" y="-5.08" length="middle"/>
<pin name="DP" x="-20.32" y="-7.62" length="middle"/>
<pin name="G1" x="-20.32" y="-10.16" length="middle"/>
<pin name="G2" x="-20.32" y="-12.7" length="middle"/>
</symbol>
<symbol name="7-SEGMENT-4DIGIT-COUNTER">
<wire x1="-35.56" y1="16.51" x2="35.56" y2="16.51" width="0.254" layer="94"/>
<wire x1="35.56" y1="16.51" x2="35.56" y2="-15.24" width="0.254" layer="94"/>
<wire x1="35.56" y1="-15.24" x2="-35.56" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-35.56" y1="-15.24" x2="-35.56" y2="16.51" width="0.254" layer="94"/>
<wire x1="-22.59" y1="15.51" x2="-21.32" y2="14.24" width="0.508" layer="94"/>
<wire x1="-21.32" y1="14.24" x2="-22.59" y2="12.97" width="0.508" layer="94"/>
<wire x1="-22.59" y1="12.97" x2="-29.21" y2="12.97" width="0.508" layer="94"/>
<wire x1="-29.21" y1="12.97" x2="-30.48" y2="14.24" width="0.508" layer="94"/>
<wire x1="-30.48" y1="14.24" x2="-29.21" y2="15.51" width="0.508" layer="94"/>
<wire x1="-29.21" y1="15.51" x2="-22.59" y2="15.51" width="0.508" layer="94"/>
<wire x1="-21.066" y1="12.97" x2="-19.796" y2="11.7" width="0.508" layer="94"/>
<wire x1="-21.066" y1="12.97" x2="-22.336" y2="11.7" width="0.508" layer="94"/>
<wire x1="-22.336" y1="11.7" x2="-23.606" y2="6.08" width="0.508" layer="94"/>
<wire x1="-23.606" y1="6.08" x2="-22.336" y2="4.81" width="0.508" layer="94"/>
<wire x1="-22.336" y1="4.81" x2="-21.066" y2="6.08" width="0.508" layer="94"/>
<wire x1="-21.066" y1="6.08" x2="-19.796" y2="11.7" width="0.508" layer="94"/>
<wire x1="-31.75" y1="3.54" x2="-30.48" y2="4.81" width="0.508" layer="94"/>
<wire x1="-31.75" y1="3.54" x2="-30.48" y2="2.27" width="0.508" layer="94"/>
<wire x1="-30.48" y1="2.27" x2="-23.86" y2="2.27" width="0.508" layer="94"/>
<wire x1="-23.86" y1="2.27" x2="-22.59" y2="3.54" width="0.508" layer="94"/>
<wire x1="-22.59" y1="3.54" x2="-23.86" y2="4.81" width="0.508" layer="94"/>
<wire x1="-23.86" y1="4.81" x2="-30.48" y2="4.81" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-7.16" x2="-31.75" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-33.02" y1="-7.16" x2="-31.75" y2="-8.43" width="0.508" layer="94"/>
<wire x1="-31.75" y1="-8.43" x2="-25.13" y2="-8.43" width="0.508" layer="94"/>
<wire x1="-25.13" y1="-8.43" x2="-23.86" y2="-7.16" width="0.508" layer="94"/>
<wire x1="-23.86" y1="-7.16" x2="-25.13" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-25.13" y1="-5.89" x2="-31.75" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-30.734" y1="12.97" x2="-29.464" y2="11.7" width="0.508" layer="94"/>
<wire x1="-30.734" y1="12.97" x2="-32.004" y2="11.7" width="0.508" layer="94"/>
<wire x1="-32.004" y1="11.7" x2="-33.274" y2="6.08" width="0.508" layer="94"/>
<wire x1="-33.274" y1="6.08" x2="-32.004" y2="4.81" width="0.508" layer="94"/>
<wire x1="-32.004" y1="4.81" x2="-30.734" y2="6.08" width="0.508" layer="94"/>
<wire x1="-30.734" y1="6.08" x2="-29.464" y2="11.7" width="0.508" layer="94"/>
<wire x1="-32.004" y1="2.27" x2="-30.734" y2="1" width="0.508" layer="94"/>
<wire x1="-32.004" y1="2.27" x2="-33.274" y2="1" width="0.508" layer="94"/>
<wire x1="-33.274" y1="1" x2="-34.544" y2="-5.62" width="0.508" layer="94"/>
<wire x1="-34.544" y1="-5.62" x2="-33.274" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-33.274" y1="-5.89" x2="-32.004" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-32.004" y1="-4.62" x2="-30.734" y2="1" width="0.508" layer="94"/>
<wire x1="-22.336" y1="2.27" x2="-21.066" y2="1" width="0.508" layer="94"/>
<wire x1="-22.336" y1="2.27" x2="-23.606" y2="1" width="0.508" layer="94"/>
<wire x1="-23.606" y1="1" x2="-24.876" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-24.876" y1="-4.62" x2="-23.606" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-23.606" y1="-5.89" x2="-22.336" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-22.336" y1="-4.62" x2="-21.066" y2="1" width="0.508" layer="94"/>
<wire x1="-4.81" y1="15.51" x2="-3.54" y2="14.24" width="0.508" layer="94"/>
<wire x1="-3.54" y1="14.24" x2="-4.81" y2="12.97" width="0.508" layer="94"/>
<wire x1="-4.81" y1="12.97" x2="-11.43" y2="12.97" width="0.508" layer="94"/>
<wire x1="-11.43" y1="12.97" x2="-12.7" y2="14.24" width="0.508" layer="94"/>
<wire x1="-12.7" y1="14.24" x2="-11.43" y2="15.51" width="0.508" layer="94"/>
<wire x1="-11.43" y1="15.51" x2="-4.81" y2="15.51" width="0.508" layer="94"/>
<wire x1="-3.286" y1="12.97" x2="-2.016" y2="11.7" width="0.508" layer="94"/>
<wire x1="-3.286" y1="12.97" x2="-4.556" y2="11.7" width="0.508" layer="94"/>
<wire x1="-4.556" y1="11.7" x2="-5.826" y2="6.08" width="0.508" layer="94"/>
<wire x1="-5.826" y1="6.08" x2="-4.556" y2="4.81" width="0.508" layer="94"/>
<wire x1="-4.556" y1="4.81" x2="-3.286" y2="6.08" width="0.508" layer="94"/>
<wire x1="-3.286" y1="6.08" x2="-2.016" y2="11.7" width="0.508" layer="94"/>
<wire x1="-13.97" y1="3.54" x2="-12.7" y2="4.81" width="0.508" layer="94"/>
<wire x1="-13.97" y1="3.54" x2="-12.7" y2="2.27" width="0.508" layer="94"/>
<wire x1="-12.7" y1="2.27" x2="-6.08" y2="2.27" width="0.508" layer="94"/>
<wire x1="-6.08" y1="2.27" x2="-4.81" y2="3.54" width="0.508" layer="94"/>
<wire x1="-4.81" y1="3.54" x2="-6.08" y2="4.81" width="0.508" layer="94"/>
<wire x1="-6.08" y1="4.81" x2="-12.7" y2="4.81" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-7.16" x2="-13.97" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-15.24" y1="-7.16" x2="-13.97" y2="-8.43" width="0.508" layer="94"/>
<wire x1="-13.97" y1="-8.43" x2="-7.35" y2="-8.43" width="0.508" layer="94"/>
<wire x1="-7.35" y1="-8.43" x2="-6.08" y2="-7.16" width="0.508" layer="94"/>
<wire x1="-6.08" y1="-7.16" x2="-7.35" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-7.35" y1="-5.89" x2="-13.97" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-12.954" y1="12.97" x2="-11.684" y2="11.7" width="0.508" layer="94"/>
<wire x1="-12.954" y1="12.97" x2="-14.224" y2="11.7" width="0.508" layer="94"/>
<wire x1="-14.224" y1="11.7" x2="-15.494" y2="6.08" width="0.508" layer="94"/>
<wire x1="-15.494" y1="6.08" x2="-14.224" y2="4.81" width="0.508" layer="94"/>
<wire x1="-14.224" y1="4.81" x2="-12.954" y2="6.08" width="0.508" layer="94"/>
<wire x1="-12.954" y1="6.08" x2="-11.684" y2="11.7" width="0.508" layer="94"/>
<wire x1="-14.224" y1="2.27" x2="-12.954" y2="1" width="0.508" layer="94"/>
<wire x1="-14.224" y1="2.27" x2="-15.494" y2="1" width="0.508" layer="94"/>
<wire x1="-15.494" y1="1" x2="-16.764" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-16.764" y1="-4.62" x2="-15.494" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-15.494" y1="-5.89" x2="-14.224" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-14.224" y1="-4.62" x2="-12.954" y2="1" width="0.508" layer="94"/>
<wire x1="-4.556" y1="2.27" x2="-3.286" y2="1" width="0.508" layer="94"/>
<wire x1="-4.556" y1="2.27" x2="-5.826" y2="1" width="0.508" layer="94"/>
<wire x1="-5.826" y1="1" x2="-7.096" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-7.096" y1="-4.62" x2="-5.826" y2="-5.89" width="0.508" layer="94"/>
<wire x1="-5.826" y1="-5.89" x2="-4.556" y2="-4.62" width="0.508" layer="94"/>
<wire x1="-4.556" y1="-4.62" x2="-3.286" y2="1" width="0.508" layer="94"/>
<wire x1="12.97" y1="15.51" x2="14.24" y2="14.24" width="0.508" layer="94"/>
<wire x1="14.24" y1="14.24" x2="12.97" y2="12.97" width="0.508" layer="94"/>
<wire x1="12.97" y1="12.97" x2="6.35" y2="12.97" width="0.508" layer="94"/>
<wire x1="6.35" y1="12.97" x2="5.08" y2="14.24" width="0.508" layer="94"/>
<wire x1="5.08" y1="14.24" x2="6.35" y2="15.51" width="0.508" layer="94"/>
<wire x1="6.35" y1="15.51" x2="12.97" y2="15.51" width="0.508" layer="94"/>
<wire x1="14.494" y1="12.97" x2="15.764" y2="11.7" width="0.508" layer="94"/>
<wire x1="14.494" y1="12.97" x2="13.224" y2="11.7" width="0.508" layer="94"/>
<wire x1="13.224" y1="11.7" x2="11.954" y2="6.08" width="0.508" layer="94"/>
<wire x1="11.954" y1="6.08" x2="13.224" y2="4.81" width="0.508" layer="94"/>
<wire x1="13.224" y1="4.81" x2="14.494" y2="6.08" width="0.508" layer="94"/>
<wire x1="14.494" y1="6.08" x2="15.764" y2="11.7" width="0.508" layer="94"/>
<wire x1="3.81" y1="3.54" x2="5.08" y2="4.81" width="0.508" layer="94"/>
<wire x1="3.81" y1="3.54" x2="5.08" y2="2.27" width="0.508" layer="94"/>
<wire x1="5.08" y1="2.27" x2="11.7" y2="2.27" width="0.508" layer="94"/>
<wire x1="11.7" y1="2.27" x2="12.97" y2="3.54" width="0.508" layer="94"/>
<wire x1="12.97" y1="3.54" x2="11.7" y2="4.81" width="0.508" layer="94"/>
<wire x1="11.7" y1="4.81" x2="5.08" y2="4.81" width="0.508" layer="94"/>
<wire x1="2.54" y1="-7.16" x2="3.81" y2="-5.89" width="0.508" layer="94"/>
<wire x1="2.54" y1="-7.16" x2="3.81" y2="-8.43" width="0.508" layer="94"/>
<wire x1="3.81" y1="-8.43" x2="10.43" y2="-8.43" width="0.508" layer="94"/>
<wire x1="10.43" y1="-8.43" x2="11.7" y2="-7.16" width="0.508" layer="94"/>
<wire x1="11.7" y1="-7.16" x2="10.43" y2="-5.89" width="0.508" layer="94"/>
<wire x1="10.43" y1="-5.89" x2="3.81" y2="-5.89" width="0.508" layer="94"/>
<wire x1="4.826" y1="12.97" x2="6.096" y2="11.7" width="0.508" layer="94"/>
<wire x1="4.826" y1="12.97" x2="3.556" y2="11.7" width="0.508" layer="94"/>
<wire x1="3.556" y1="11.7" x2="2.286" y2="6.08" width="0.508" layer="94"/>
<wire x1="2.286" y1="6.08" x2="3.556" y2="4.81" width="0.508" layer="94"/>
<wire x1="3.556" y1="4.81" x2="4.826" y2="6.08" width="0.508" layer="94"/>
<wire x1="4.826" y1="6.08" x2="6.096" y2="11.7" width="0.508" layer="94"/>
<wire x1="3.556" y1="2.27" x2="4.826" y2="1" width="0.508" layer="94"/>
<wire x1="3.556" y1="2.27" x2="2.286" y2="1" width="0.508" layer="94"/>
<wire x1="2.286" y1="1" x2="1.016" y2="-4.62" width="0.508" layer="94"/>
<wire x1="1.016" y1="-4.62" x2="2.286" y2="-5.89" width="0.508" layer="94"/>
<wire x1="2.286" y1="-5.89" x2="3.556" y2="-4.62" width="0.508" layer="94"/>
<wire x1="3.556" y1="-4.62" x2="4.826" y2="1" width="0.508" layer="94"/>
<wire x1="13.224" y1="2.27" x2="14.494" y2="1" width="0.508" layer="94"/>
<wire x1="13.224" y1="2.27" x2="11.954" y2="1" width="0.508" layer="94"/>
<wire x1="11.954" y1="1" x2="10.684" y2="-4.62" width="0.508" layer="94"/>
<wire x1="10.684" y1="-4.62" x2="11.954" y2="-5.89" width="0.508" layer="94"/>
<wire x1="11.954" y1="-5.89" x2="13.224" y2="-4.62" width="0.508" layer="94"/>
<wire x1="13.224" y1="-4.62" x2="14.494" y2="1" width="0.508" layer="94"/>
<wire x1="30.75" y1="15.51" x2="32.02" y2="14.24" width="0.508" layer="94"/>
<wire x1="32.02" y1="14.24" x2="30.75" y2="12.97" width="0.508" layer="94"/>
<wire x1="30.75" y1="12.97" x2="24.13" y2="12.97" width="0.508" layer="94"/>
<wire x1="24.13" y1="12.97" x2="22.86" y2="14.24" width="0.508" layer="94"/>
<wire x1="22.86" y1="14.24" x2="24.13" y2="15.51" width="0.508" layer="94"/>
<wire x1="24.13" y1="15.51" x2="30.75" y2="15.51" width="0.508" layer="94"/>
<wire x1="32.274" y1="12.97" x2="33.544" y2="11.7" width="0.508" layer="94"/>
<wire x1="32.274" y1="12.97" x2="31.004" y2="11.7" width="0.508" layer="94"/>
<wire x1="31.004" y1="11.7" x2="29.734" y2="6.08" width="0.508" layer="94"/>
<wire x1="29.734" y1="6.08" x2="31.004" y2="4.81" width="0.508" layer="94"/>
<wire x1="31.004" y1="4.81" x2="32.274" y2="6.08" width="0.508" layer="94"/>
<wire x1="32.274" y1="6.08" x2="33.544" y2="11.7" width="0.508" layer="94"/>
<wire x1="21.59" y1="3.54" x2="22.86" y2="4.81" width="0.508" layer="94"/>
<wire x1="21.59" y1="3.54" x2="22.86" y2="2.27" width="0.508" layer="94"/>
<wire x1="22.86" y1="2.27" x2="29.48" y2="2.27" width="0.508" layer="94"/>
<wire x1="29.48" y1="2.27" x2="30.75" y2="3.54" width="0.508" layer="94"/>
<wire x1="30.75" y1="3.54" x2="29.48" y2="4.81" width="0.508" layer="94"/>
<wire x1="29.48" y1="4.81" x2="22.86" y2="4.81" width="0.508" layer="94"/>
<wire x1="20.32" y1="-7.16" x2="21.59" y2="-5.89" width="0.508" layer="94"/>
<wire x1="20.32" y1="-7.16" x2="21.59" y2="-8.43" width="0.508" layer="94"/>
<wire x1="21.59" y1="-8.43" x2="28.21" y2="-8.43" width="0.508" layer="94"/>
<wire x1="28.21" y1="-8.43" x2="29.48" y2="-7.16" width="0.508" layer="94"/>
<wire x1="29.48" y1="-7.16" x2="28.21" y2="-5.89" width="0.508" layer="94"/>
<wire x1="28.21" y1="-5.89" x2="21.59" y2="-5.89" width="0.508" layer="94"/>
<wire x1="22.606" y1="12.97" x2="23.876" y2="11.7" width="0.508" layer="94"/>
<wire x1="22.606" y1="12.97" x2="21.336" y2="11.7" width="0.508" layer="94"/>
<wire x1="21.336" y1="11.7" x2="20.066" y2="6.08" width="0.508" layer="94"/>
<wire x1="20.066" y1="6.08" x2="21.336" y2="4.81" width="0.508" layer="94"/>
<wire x1="21.336" y1="4.81" x2="22.606" y2="6.08" width="0.508" layer="94"/>
<wire x1="22.606" y1="6.08" x2="23.876" y2="11.7" width="0.508" layer="94"/>
<wire x1="21.336" y1="2.27" x2="22.606" y2="1" width="0.508" layer="94"/>
<wire x1="21.336" y1="2.27" x2="20.066" y2="1" width="0.508" layer="94"/>
<wire x1="20.066" y1="1" x2="18.796" y2="-4.62" width="0.508" layer="94"/>
<wire x1="18.796" y1="-4.62" x2="20.066" y2="-5.89" width="0.508" layer="94"/>
<wire x1="20.066" y1="-5.89" x2="21.336" y2="-4.62" width="0.508" layer="94"/>
<wire x1="21.336" y1="-4.62" x2="22.606" y2="1" width="0.508" layer="94"/>
<wire x1="31.004" y1="2.27" x2="32.274" y2="1" width="0.508" layer="94"/>
<wire x1="31.004" y1="2.27" x2="29.734" y2="1" width="0.508" layer="94"/>
<wire x1="29.734" y1="1" x2="28.464" y2="-4.62" width="0.508" layer="94"/>
<wire x1="28.464" y1="-4.62" x2="29.734" y2="-5.89" width="0.508" layer="94"/>
<wire x1="29.734" y1="-5.89" x2="31.004" y2="-4.62" width="0.508" layer="94"/>
<wire x1="31.004" y1="-4.62" x2="32.274" y2="1" width="0.508" layer="94"/>
<circle x="-20.05" y="-7.16" radius="1.27" width="0.508" layer="94"/>
<circle x="-2.27" y="-7.16" radius="1.27" width="0.508" layer="94"/>
<circle x="15.51" y="-7.16" radius="1.27" width="0.508" layer="94"/>
<circle x="33.29" y="-7.16" radius="1.27" width="0.508" layer="94"/>
<text x="-26.654" y="13.732" size="1.016" layer="94" ratio="15">A</text>
<text x="-22.082" y="7.382" size="1.016" layer="94" ratio="15">B</text>
<text x="-23.352" y="-1.318" size="1.016" layer="94" ratio="15">C</text>
<text x="-28.194" y="-7.668" size="1.016" layer="94" ratio="15">D</text>
<text x="-33.02" y="-1.318" size="1.016" layer="94" ratio="15">E</text>
<text x="-31.75" y="7.382" size="1.016" layer="94" ratio="15">F</text>
<text x="-26.924" y="3.032" size="1.016" layer="94" ratio="15">G</text>
<text x="-20.812" y="-7.668" size="1.016" layer="94" ratio="15">DP</text>
<pin name="A" x="-17.78" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="B" x="-15.24" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="C" x="-12.7" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="D" x="-10.16" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="E" x="-7.62" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="F" x="-5.08" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="G" x="-2.54" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="DP" x="0" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="D1" x="10.16" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="D2" x="12.7" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="D3" x="15.24" y="-17.78" visible="pin" length="short" rot="R90"/>
<pin name="D4" x="17.78" y="-17.78" visible="pin" length="short" rot="R90"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="ALPHANUMERIC" prefix="U">
<description>&lt;b&gt;Alphanumeric LED Display&lt;/b&gt; Common anode. Multiple LEDs on some segments. Multiple LED colors available. Works great with A6282 driver IC. Decimal points are unfornately not connected. SKU: COM-09933.</description>
<gates>
<gate name="G$1" symbol="ALPHANUMERIC" x="2.54" y="0"/>
</gates>
<devices>
<device name="PTH" package="ALPHANUMERIC">
<connects>
<connect gate="G$1" pin="A1" pad="2"/>
<connect gate="G$1" pin="A2" pad="22"/>
<connect gate="G$1" pin="B" pad="21"/>
<connect gate="G$1" pin="C" pad="16"/>
<connect gate="G$1" pin="D1" pad="10"/>
<connect gate="G$1" pin="D2" pad="14"/>
<connect gate="G$1" pin="E" pad="9"/>
<connect gate="G$1" pin="F" pad="4"/>
<connect gate="G$1" pin="G1" pad="7"/>
<connect gate="G$1" pin="G2" pad="19"/>
<connect gate="G$1" pin="H" pad="3"/>
<connect gate="G$1" pin="J" pad="24"/>
<connect gate="G$1" pin="K" pad="23"/>
<connect gate="G$1" pin="L" pad="15"/>
<connect gate="G$1" pin="M" pad="12"/>
<connect gate="G$1" pin="N" pad="11"/>
<connect gate="G$1" pin="NC@1" pad="1"/>
<connect gate="G$1" pin="NC@13" pad="13"/>
<connect gate="G$1" pin="VCC@18" pad="18"/>
<connect gate="G$1" pin="VCC@6" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LCD-16X2" prefix="U">
<description>Standard text-only 16x2 parallel input LCD</description>
<gates>
<gate name="G$1" symbol="LCD-16X2" x="0" y="0"/>
</gates>
<devices>
<device name="SILK" package="LCD-16X2">
<connects>
<connect gate="G$1" pin="A" pad="15"/>
<connect gate="G$1" pin="DB0" pad="7"/>
<connect gate="G$1" pin="DB1" pad="8"/>
<connect gate="G$1" pin="DB2" pad="9"/>
<connect gate="G$1" pin="DB3" pad="10"/>
<connect gate="G$1" pin="DB4" pad="11"/>
<connect gate="G$1" pin="DB5" pad="12"/>
<connect gate="G$1" pin="DB6" pad="13"/>
<connect gate="G$1" pin="DB7" pad="14"/>
<connect gate="G$1" pin="E" pad="6"/>
<connect gate="G$1" pin="K" pad="16"/>
<connect gate="G$1" pin="R/W" pad="5"/>
<connect gate="G$1" pin="RS" pad="4"/>
<connect gate="G$1" pin="VDD" pad="2"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NOSILK" package="LCD-16X2_NOSILK">
<connects>
<connect gate="G$1" pin="A" pad="15"/>
<connect gate="G$1" pin="DB0" pad="7"/>
<connect gate="G$1" pin="DB1" pad="8"/>
<connect gate="G$1" pin="DB2" pad="9"/>
<connect gate="G$1" pin="DB3" pad="10"/>
<connect gate="G$1" pin="DB4" pad="11"/>
<connect gate="G$1" pin="DB5" pad="12"/>
<connect gate="G$1" pin="DB6" pad="13"/>
<connect gate="G$1" pin="DB7" pad="14"/>
<connect gate="G$1" pin="E" pad="6"/>
<connect gate="G$1" pin="K" pad="16"/>
<connect gate="G$1" pin="R/W" pad="5"/>
<connect gate="G$1" pin="RS" pad="4"/>
<connect gate="G$1" pin="VDD" pad="2"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NOHOLES" package="LCD-16X2_NOHOLES">
<connects>
<connect gate="G$1" pin="A" pad="15"/>
<connect gate="G$1" pin="DB0" pad="7"/>
<connect gate="G$1" pin="DB1" pad="8"/>
<connect gate="G$1" pin="DB2" pad="9"/>
<connect gate="G$1" pin="DB3" pad="10"/>
<connect gate="G$1" pin="DB4" pad="11"/>
<connect gate="G$1" pin="DB5" pad="12"/>
<connect gate="G$1" pin="DB6" pad="13"/>
<connect gate="G$1" pin="DB7" pad="14"/>
<connect gate="G$1" pin="E" pad="6"/>
<connect gate="G$1" pin="K" pad="16"/>
<connect gate="G$1" pin="R/W" pad="5"/>
<connect gate="G$1" pin="RS" pad="4"/>
<connect gate="G$1" pin="VDD" pad="2"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="8X2" package="LCD-8X2">
<connects>
<connect gate="G$1" pin="A" pad="15"/>
<connect gate="G$1" pin="DB0" pad="7"/>
<connect gate="G$1" pin="DB1" pad="8"/>
<connect gate="G$1" pin="DB2" pad="9"/>
<connect gate="G$1" pin="DB3" pad="10"/>
<connect gate="G$1" pin="DB4" pad="11"/>
<connect gate="G$1" pin="DB5" pad="12"/>
<connect gate="G$1" pin="DB6" pad="13"/>
<connect gate="G$1" pin="DB7" pad="14"/>
<connect gate="G$1" pin="E" pad="6"/>
<connect gate="G$1" pin="K" pad="16"/>
<connect gate="G$1" pin="R/W" pad="5"/>
<connect gate="G$1" pin="RS" pad="4"/>
<connect gate="G$1" pin="VDD" pad="2"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="8X2-KIT" package="LCD-8X2-KIT">
<connects>
<connect gate="G$1" pin="A" pad="15"/>
<connect gate="G$1" pin="DB0" pad="7"/>
<connect gate="G$1" pin="DB1" pad="8"/>
<connect gate="G$1" pin="DB2" pad="9"/>
<connect gate="G$1" pin="DB3" pad="10"/>
<connect gate="G$1" pin="DB4" pad="11"/>
<connect gate="G$1" pin="DB5" pad="12"/>
<connect gate="G$1" pin="DB6" pad="13"/>
<connect gate="G$1" pin="DB7" pad="14"/>
<connect gate="G$1" pin="E" pad="6"/>
<connect gate="G$1" pin="K" pad="16"/>
<connect gate="G$1" pin="R/W" pad="5"/>
<connect gate="G$1" pin="RS" pad="4"/>
<connect gate="G$1" pin="VDD" pad="2"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LCD-G12864">
<description>&lt;b&gt;Graphical LCD 128x64&lt;/b&gt; 
Footprint is not yet proven. Double check it. Spark Fun Electronics SKU : LCD-00710</description>
<gates>
<gate name="G$1" symbol="LCD-G12864" x="0" y="0"/>
</gates>
<devices>
<device name="FULL" package="LCD-G12864">
<connects>
<connect gate="G$1" pin="A" pad="19"/>
<connect gate="G$1" pin="CS1" pad="13"/>
<connect gate="G$1" pin="CS2" pad="12"/>
<connect gate="G$1" pin="D/I" pad="16"/>
<connect gate="G$1" pin="DB0" pad="4"/>
<connect gate="G$1" pin="DB1" pad="5"/>
<connect gate="G$1" pin="DB2" pad="6"/>
<connect gate="G$1" pin="DB3" pad="7"/>
<connect gate="G$1" pin="DB4" pad="8"/>
<connect gate="G$1" pin="DB5" pad="9"/>
<connect gate="G$1" pin="DB6" pad="10"/>
<connect gate="G$1" pin="DB7" pad="11"/>
<connect gate="G$1" pin="E" pad="17"/>
<connect gate="G$1" pin="K" pad="20"/>
<connect gate="G$1" pin="R/W" pad="15"/>
<connect gate="G$1" pin="RST" pad="14"/>
<connect gate="G$1" pin="VDD" pad="1"/>
<connect gate="G$1" pin="VEE" pad="18"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="BARE" package="1X20">
<connects>
<connect gate="G$1" pin="A" pad="19"/>
<connect gate="G$1" pin="CS1" pad="13"/>
<connect gate="G$1" pin="CS2" pad="12"/>
<connect gate="G$1" pin="D/I" pad="16"/>
<connect gate="G$1" pin="DB0" pad="4"/>
<connect gate="G$1" pin="DB1" pad="5"/>
<connect gate="G$1" pin="DB2" pad="6"/>
<connect gate="G$1" pin="DB3" pad="7"/>
<connect gate="G$1" pin="DB4" pad="8"/>
<connect gate="G$1" pin="DB5" pad="9"/>
<connect gate="G$1" pin="DB6" pad="10"/>
<connect gate="G$1" pin="DB7" pad="11"/>
<connect gate="G$1" pin="E" pad="17"/>
<connect gate="G$1" pin="K" pad="20"/>
<connect gate="G$1" pin="R/W" pad="15"/>
<connect gate="G$1" pin="RST" pad="14"/>
<connect gate="G$1" pin="VDD" pad="1"/>
<connect gate="G$1" pin="VEE" pad="18"/>
<connect gate="G$1" pin="VO" pad="3"/>
<connect gate="G$1" pin="VSS" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LCD_BACKLIGHT_PADS">
<gates>
<gate name="G$1" symbol="LCD_BACKLIGHT_PADS" x="2.54" y="-2.54"/>
</gates>
<devices>
<device name="" package="LCD_BACKLIGHT_PADS">
<connects>
<connect gate="G$1" pin="A" pad="P$1"/>
<connect gate="G$1" pin="K" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LCD_CFAX">
<description>Graphic LCD module (LCD-00463) DISCONTINUED</description>
<gates>
<gate name="LCD" symbol="LCD_CFAX" x="0" y="-7.62"/>
</gates>
<devices>
<device name="" package="LCD_CFAX">
<connects>
<connect gate="LCD" pin="CS1B" pad="P$3"/>
<connect gate="LCD" pin="CS2" pad="P$4"/>
<connect gate="LCD" pin="D0" pad="P$9"/>
<connect gate="LCD" pin="D1" pad="P$10"/>
<connect gate="LCD" pin="D2" pad="P$11"/>
<connect gate="LCD" pin="D3" pad="P$12"/>
<connect gate="LCD" pin="D4" pad="P$13"/>
<connect gate="LCD" pin="D5" pad="P$14"/>
<connect gate="LCD" pin="D6" pad="P$15"/>
<connect gate="LCD" pin="D7" pad="P$16"/>
<connect gate="LCD" pin="ERD" pad="P$8"/>
<connect gate="LCD" pin="GND" pad="P$2"/>
<connect gate="LCD" pin="MI" pad="P$17"/>
<connect gate="LCD" pin="P/S" pad="P$18"/>
<connect gate="LCD" pin="RESET" pad="P$5"/>
<connect gate="LCD" pin="RS" pad="P$6"/>
<connect gate="LCD" pin="RW" pad="P$7"/>
<connect gate="LCD" pin="VCC" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="NOKIA6100_LCD">
<description>&lt;b&gt;Nokia 6100 Color LCD&lt;/b&gt;
Schematic element and footprint production proven but could use some touching up. Spark Fun Electronics SKU : LCD-00569. Mating SMD connector : LCD-00570</description>
<gates>
<gate name="G$1" symbol="NOKIA6100_LCD" x="-10.16" y="-20.32"/>
</gates>
<devices>
<device name="" package="NOKIA6100_LCD">
<connects>
<connect gate="G$1" pin="CS" pad="5"/>
<connect gate="G$1" pin="DIO" pad="3"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="LEDGND" pad="9"/>
<connect gate="G$1" pin="RESET" pad="2"/>
<connect gate="G$1" pin="SCK" pad="4"/>
<connect gate="G$1" pin="VDIGITAL" pad="1"/>
<connect gate="G$1" pin="VDISPLAY" pad="6"/>
<connect gate="G$1" pin="VLED" pad="10"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SCREENKEY-TFT128">
<description>Mechanical footprint of the ScreenKey (COM-09366)&lt;br&gt;
NO ELECTRICAL CONNECTIONS.</description>
<gates>
<gate name="G$1" symbol="SCREENKEY-TFT128" x="0" y="0"/>
</gates>
<devices>
<device name="DEMENSIONANDHOLES" package="SCREENKEY-TFT128">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="7-SEGMENT-4DIGIT">
<gates>
<gate name="G$1" symbol="7-SEGMENT-4DIGIT" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="7-SEGMENT-4DIGIT">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="" package="7-SEGMENT-4DIGIT-YOUNGSUN">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="FOR_POGOBED_ONLY" package="7-SEGMENT-4DIGIT_LONGPADS_FOR_POGOBED">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="7-SEGMENT-4DIGIT-YOUNGSUN" prefix="LED">
<description>This is a part for the 4-Digit 7-segment LEDs from Young Sun.  Different from the Digikey LEDs, all 16 pins are used.
The LONGPADS Variant is used for a test jig, but you may like it because there is more pad to solder to. If you are concerned about routing space, the standard works just fine though.</description>
<gates>
<gate name="G$1" symbol="7-SEGMENT-4DIGIT-YOUNGSUN" x="0" y="0"/>
</gates>
<devices>
<device name="" package="7-SEGMENT-4DIGIT-YOUNGSUN">
<connects>
<connect gate="G$1" pin="A" pad="14"/>
<connect gate="G$1" pin="APOS-A" pad="10"/>
<connect gate="G$1" pin="APOS-C" pad="9"/>
<connect gate="G$1" pin="B" pad="16"/>
<connect gate="G$1" pin="C" pad="13"/>
<connect gate="G$1" pin="COL-A" pad="4"/>
<connect gate="G$1" pin="COL-C" pad="12"/>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="DIG1" pad="1"/>
<connect gate="G$1" pin="DIG2" pad="2"/>
<connect gate="G$1" pin="DIG3" pad="6"/>
<connect gate="G$1" pin="DIG4" pad="8"/>
<connect gate="G$1" pin="DP" pad="7"/>
<connect gate="G$1" pin="E" pad="5"/>
<connect gate="G$1" pin="F" pad="11"/>
<connect gate="G$1" pin="G" pad="15"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="LONGPADS" package="7-SEGMENT-4DIGIT-YOUNGSUN-LONGPADS">
<connects>
<connect gate="G$1" pin="A" pad="14"/>
<connect gate="G$1" pin="APOS-A" pad="10"/>
<connect gate="G$1" pin="APOS-C" pad="9"/>
<connect gate="G$1" pin="B" pad="16"/>
<connect gate="G$1" pin="C" pad="13"/>
<connect gate="G$1" pin="COL-A" pad="4"/>
<connect gate="G$1" pin="COL-C" pad="12"/>
<connect gate="G$1" pin="D" pad="3"/>
<connect gate="G$1" pin="DIG1" pad="1"/>
<connect gate="G$1" pin="DIG2" pad="2"/>
<connect gate="G$1" pin="DIG3" pad="6"/>
<connect gate="G$1" pin="DIG4" pad="8"/>
<connect gate="G$1" pin="DP" pad="7"/>
<connect gate="G$1" pin="E" pad="5"/>
<connect gate="G$1" pin="F" pad="11"/>
<connect gate="G$1" pin="G" pad="15"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="7-SEGMENT-DISPLAY">
<gates>
<gate name="G$1" symbol="7-SEGMENT-DISPLAY" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="7-SEGMENT-DISPLAY">
<connects>
<connect gate="G$1" pin="A" pad="7"/>
<connect gate="G$1" pin="B" pad="6"/>
<connect gate="G$1" pin="C" pad="4"/>
<connect gate="G$1" pin="D" pad="2"/>
<connect gate="G$1" pin="DP" pad="5"/>
<connect gate="G$1" pin="E" pad="1"/>
<connect gate="G$1" pin="F" pad="9"/>
<connect gate="G$1" pin="G" pad="10"/>
<connect gate="G$1" pin="G1" pad="3"/>
<connect gate="G$1" pin="G2" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="7-SEGMENT-DISPLAY-1&quot;-RED">
<description>7-Segment Display 1" Red (COM-08546)

EZ is for kits. Pads are only exposed on the bottom side to help prevent soldering in upside down.</description>
<gates>
<gate name="G$1" symbol="7-SEGMENT-1&quot;" x="0" y="0"/>
</gates>
<devices>
<device name="" package="7-SEGMENT-1&quot;PTH">
<connects>
<connect gate="G$1" pin="A" pad="7"/>
<connect gate="G$1" pin="B" pad="6"/>
<connect gate="G$1" pin="C" pad="4"/>
<connect gate="G$1" pin="D" pad="2"/>
<connect gate="G$1" pin="DP" pad="5"/>
<connect gate="G$1" pin="E" pad="1"/>
<connect gate="G$1" pin="F" pad="9"/>
<connect gate="G$1" pin="G" pad="10"/>
<connect gate="G$1" pin="G1" pad="3"/>
<connect gate="G$1" pin="G2" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EZ" package="7-SEGMENT-1&quot;PTH-EZ">
<connects>
<connect gate="G$1" pin="A" pad="7"/>
<connect gate="G$1" pin="B" pad="6"/>
<connect gate="G$1" pin="C" pad="4"/>
<connect gate="G$1" pin="D" pad="2"/>
<connect gate="G$1" pin="DP" pad="5"/>
<connect gate="G$1" pin="E" pad="1"/>
<connect gate="G$1" pin="F" pad="9"/>
<connect gate="G$1" pin="G" pad="10"/>
<connect gate="G$1" pin="G1" pad="3"/>
<connect gate="G$1" pin="G2" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="7-SEGMENT-4DIGIT-COUNTER">
<gates>
<gate name="G$1" symbol="7-SEGMENT-4DIGIT-COUNTER" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="7-SEGMENT-4DIGIT-COUNTER">
<connects>
<connect gate="G$1" pin="A" pad="11"/>
<connect gate="G$1" pin="B" pad="7"/>
<connect gate="G$1" pin="C" pad="4"/>
<connect gate="G$1" pin="D" pad="2"/>
<connect gate="G$1" pin="D1" pad="12"/>
<connect gate="G$1" pin="D2" pad="9"/>
<connect gate="G$1" pin="D3" pad="8"/>
<connect gate="G$1" pin="D4" pad="6"/>
<connect gate="G$1" pin="DP" pad="3"/>
<connect gate="G$1" pin="E" pad="1"/>
<connect gate="G$1" pin="F" pad="10"/>
<connect gate="G$1" pin="G" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Electromechanical.lbr.

more than 10,000 changes

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-FreqCtrl.lbr.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.3">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="no" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="no" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="no" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="no" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="no" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="no" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="no" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="no" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="no" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="no" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="no" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="no" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find crystals and oscillators and other things that go "tick".&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="HC49U-V">
<description>&lt;b&gt;CRYSTAL&lt;/b&gt;</description>
<wire x1="-2.921" y1="-2.286" x2="2.921" y2="-2.286" width="0.4064" layer="21"/>
<wire x1="-2.921" y1="2.286" x2="2.921" y2="2.286" width="0.4064" layer="21"/>
<wire x1="-2.921" y1="-1.778" x2="2.921" y2="-1.778" width="0.1524" layer="21"/>
<wire x1="2.921" y1="1.778" x2="-2.921" y2="1.778" width="0.1524" layer="21"/>
<wire x1="2.921" y1="1.778" x2="2.921" y2="-1.778" width="0.1524" layer="21" curve="-180"/>
<wire x1="2.921" y1="2.286" x2="2.921" y2="-2.286" width="0.4064" layer="21" curve="-180"/>
<wire x1="-2.921" y1="2.286" x2="-2.921" y2="-2.286" width="0.4064" layer="21" curve="180"/>
<wire x1="-2.921" y1="1.778" x2="-2.921" y2="-1.778" width="0.1524" layer="21" curve="180"/>
<wire x1="-0.254" y1="0.889" x2="0.254" y2="0.889" width="0.1524" layer="21"/>
<wire x1="0.254" y1="0.889" x2="0.254" y2="-0.889" width="0.1524" layer="21"/>
<wire x1="0.254" y1="-0.889" x2="-0.254" y2="-0.889" width="0.1524" layer="21"/>
<wire x1="-0.254" y1="-0.889" x2="-0.254" y2="0.889" width="0.1524" layer="21"/>
<wire x1="0.635" y1="0.889" x2="0.635" y2="0" width="0.1524" layer="21"/>
<wire x1="0.635" y1="0" x2="0.635" y2="-0.889" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="0.889" x2="-0.635" y2="0" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="0" x2="-0.635" y2="-0.889" width="0.1524" layer="21"/>
<wire x1="0.635" y1="0" x2="1.27" y2="0" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="0" x2="-1.27" y2="0" width="0.1524" layer="21"/>
<pad name="1" x="-2.413" y="0" drill="0.8128"/>
<pad name="2" x="2.413" y="0" drill="0.8128"/>
<text x="-5.08" y="2.921" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-5.08" y="-4.191" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<rectangle x1="-3.81" y1="-2.794" x2="3.81" y2="2.794" layer="43"/>
<rectangle x1="-4.318" y1="-2.54" x2="-3.81" y2="2.54" layer="43"/>
<rectangle x1="-4.826" y1="-2.286" x2="-4.318" y2="2.286" layer="43"/>
<rectangle x1="-5.334" y1="-1.778" x2="-4.826" y2="1.778" layer="43"/>
<rectangle x1="-5.588" y1="-1.27" x2="-5.334" y2="1.016" layer="43"/>
<rectangle x1="3.81" y1="-2.54" x2="4.318" y2="2.54" layer="43"/>
<rectangle x1="4.318" y1="-2.286" x2="4.826" y2="2.286" layer="43"/>
<rectangle x1="4.826" y1="-1.778" x2="5.334" y2="1.778" layer="43"/>
<rectangle x1="5.334" y1="-1.016" x2="5.588" y2="1.016" layer="43"/>
</package>
<package name="TC38H">
<description>&lt;b&gt;CRYSTAL&lt;/b&gt;</description>
<wire x1="-1.397" y1="1.651" x2="1.397" y2="1.651" width="0.1524" layer="21"/>
<wire x1="1.27" y1="9.906" x2="1.524" y2="9.652" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="9.652" x2="-1.27" y2="9.906" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.27" y1="9.906" x2="1.27" y2="9.906" width="0.1524" layer="21"/>
<wire x1="1.397" y1="1.651" x2="1.397" y2="2.032" width="0.1524" layer="21"/>
<wire x1="1.524" y1="2.032" x2="1.397" y2="2.032" width="0.1524" layer="21"/>
<wire x1="1.524" y1="2.032" x2="1.524" y2="9.652" width="0.1524" layer="21"/>
<wire x1="-1.397" y1="1.651" x2="-1.397" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="2.032" x2="-1.397" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="2.032" x2="-1.524" y2="9.652" width="0.1524" layer="21"/>
<wire x1="1.397" y1="2.032" x2="-1.397" y2="2.032" width="0.1524" layer="21"/>
<wire x1="0.5588" y1="0.7112" x2="0.508" y2="0.762" width="0.4064" layer="21"/>
<wire x1="0.508" y1="0.762" x2="0.508" y2="1.143" width="0.4064" layer="21"/>
<wire x1="-0.508" y1="0.762" x2="-0.508" y2="1.016" width="0.4064" layer="21"/>
<wire x1="-0.5588" y1="0.7112" x2="-0.508" y2="0.762" width="0.4064" layer="21"/>
<wire x1="0.635" y1="0.635" x2="1.27" y2="0" width="0.1524" layer="51"/>
<wire x1="-0.635" y1="0.635" x2="-1.27" y2="0" width="0.1524" layer="51"/>
<wire x1="-0.762" y1="5.588" x2="-0.762" y2="5.207" width="0.1524" layer="21"/>
<wire x1="0.762" y1="5.207" x2="-0.762" y2="5.207" width="0.1524" layer="21"/>
<wire x1="0.762" y1="5.207" x2="0.762" y2="5.588" width="0.1524" layer="21"/>
<wire x1="-0.762" y1="5.588" x2="0.762" y2="5.588" width="0.1524" layer="21"/>
<wire x1="-0.762" y1="5.969" x2="0" y2="5.969" width="0.1524" layer="21"/>
<wire x1="-0.762" y1="4.826" x2="0" y2="4.826" width="0.1524" layer="21"/>
<wire x1="0" y1="4.826" x2="0" y2="4.318" width="0.1524" layer="21"/>
<wire x1="0" y1="4.826" x2="0.762" y2="4.826" width="0.1524" layer="21"/>
<wire x1="0" y1="5.969" x2="0" y2="6.477" width="0.1524" layer="21"/>
<wire x1="0" y1="5.969" x2="0.762" y2="5.969" width="0.1524" layer="21"/>
<pad name="1" x="-1.27" y="0" drill="0.8128" diameter="1.6764"/>
<pad name="2" x="1.27" y="0" drill="0.8128" diameter="1.6764"/>
<text x="-1.905" y="2.032" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="3.175" y="2.032" size="1.27" layer="27" ratio="10" rot="R90">&gt;VALUE</text>
<rectangle x1="0.3048" y1="1.016" x2="0.7112" y2="1.6002" layer="21"/>
<rectangle x1="-0.7112" y1="1.016" x2="-0.3048" y2="1.6002" layer="21"/>
<rectangle x1="-1.778" y1="1.016" x2="1.778" y2="10.414" layer="43"/>
</package>
<package name="TC26H_KIT">
<description>&lt;b&gt;CRYSTAL&lt;/b&gt;</description>
<wire x1="-0.889" y1="1.651" x2="0.889" y2="1.651" width="0.1524" layer="21"/>
<wire x1="0.762" y1="7.747" x2="1.016" y2="7.493" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.016" y1="7.493" x2="-0.762" y2="7.747" width="0.1524" layer="21" curve="-90"/>
<wire x1="-0.762" y1="7.747" x2="0.762" y2="7.747" width="0.1524" layer="21"/>
<wire x1="0.889" y1="1.651" x2="0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="1.016" y1="2.032" x2="1.016" y2="7.493" width="0.1524" layer="21"/>
<wire x1="-0.889" y1="1.651" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.016" y1="2.032" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.016" y1="2.032" x2="-1.016" y2="7.493" width="0.1524" layer="21"/>
<wire x1="0.508" y1="0.762" x2="0.508" y2="1.143" width="0.4064" layer="21"/>
<wire x1="-0.508" y1="0.762" x2="-0.508" y2="1.27" width="0.4064" layer="21"/>
<wire x1="0.635" y1="0.635" x2="1.27" y2="0" width="0.4064" layer="51"/>
<wire x1="-0.635" y1="0.635" x2="-1.27" y2="0" width="0.4064" layer="51"/>
<wire x1="-0.508" y1="4.953" x2="-0.508" y2="4.572" width="0.1524" layer="21"/>
<wire x1="0.508" y1="4.572" x2="-0.508" y2="4.572" width="0.1524" layer="21"/>
<wire x1="0.508" y1="4.572" x2="0.508" y2="4.953" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="4.953" x2="0.508" y2="4.953" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="5.334" x2="0" y2="5.334" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="4.191" x2="0" y2="4.191" width="0.1524" layer="21"/>
<wire x1="0" y1="4.191" x2="0" y2="3.683" width="0.1524" layer="21"/>
<wire x1="0" y1="4.191" x2="0.508" y2="4.191" width="0.1524" layer="21"/>
<wire x1="0" y1="5.334" x2="0" y2="5.842" width="0.1524" layer="21"/>
<wire x1="0" y1="5.334" x2="0.508" y2="5.334" width="0.1524" layer="21"/>
<wire x1="1.016" y1="2.032" x2="0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="0.889" y1="2.032" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<pad name="1" x="-1.27" y="0" drill="0.8128" diameter="1.6764"/>
<pad name="2" x="1.27" y="0" drill="0.8128" diameter="1.6764"/>
<text x="-1.397" y="2.032" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="2.667" y="2.032" size="1.27" layer="27" ratio="10" rot="R90">&gt;VALUE</text>
<rectangle x1="0.3048" y1="1.016" x2="0.7112" y2="1.6002" layer="21"/>
<rectangle x1="-0.7112" y1="1.016" x2="-0.3048" y2="1.6002" layer="21"/>
<rectangle x1="-1.778" y1="0.762" x2="1.778" y2="8.382" layer="43"/>
</package>
<package name="TC26H">
<description>&lt;b&gt;CRYSTAL&lt;/b&gt;</description>
<wire x1="-0.889" y1="1.651" x2="0.889" y2="1.651" width="0.1524" layer="21"/>
<wire x1="0.762" y1="7.747" x2="1.016" y2="7.493" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.016" y1="7.493" x2="-0.762" y2="7.747" width="0.1524" layer="21" curve="-90"/>
<wire x1="-0.762" y1="7.747" x2="0.762" y2="7.747" width="0.1524" layer="21"/>
<wire x1="0.889" y1="1.651" x2="0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="1.016" y1="2.032" x2="1.016" y2="7.493" width="0.1524" layer="21"/>
<wire x1="-0.889" y1="1.651" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.016" y1="2.032" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.016" y1="2.032" x2="-1.016" y2="7.493" width="0.1524" layer="21"/>
<wire x1="0.508" y1="0.762" x2="0.508" y2="1.143" width="0.4064" layer="21"/>
<wire x1="-0.508" y1="0.762" x2="-0.508" y2="1.27" width="0.4064" layer="21"/>
<wire x1="0.635" y1="0.635" x2="1.27" y2="0" width="0.4064" layer="51"/>
<wire x1="-0.635" y1="0.635" x2="-1.27" y2="0" width="0.4064" layer="51"/>
<wire x1="-0.508" y1="4.953" x2="-0.508" y2="4.572" width="0.1524" layer="21"/>
<wire x1="0.508" y1="4.572" x2="-0.508" y2="4.572" width="0.1524" layer="21"/>
<wire x1="0.508" y1="4.572" x2="0.508" y2="4.953" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="4.953" x2="0.508" y2="4.953" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="5.334" x2="0" y2="5.334" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="4.191" x2="0" y2="4.191" width="0.1524" layer="21"/>
<wire x1="0" y1="4.191" x2="0" y2="3.683" width="0.1524" layer="21"/>
<wire x1="0" y1="4.191" x2="0.508" y2="4.191" width="0.1524" layer="21"/>
<wire x1="0" y1="5.334" x2="0" y2="5.842" width="0.1524" layer="21"/>
<wire x1="0" y1="5.334" x2="0.508" y2="5.334" width="0.1524" layer="21"/>
<wire x1="1.016" y1="2.032" x2="0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="0.889" y1="2.032" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<pad name="1" x="-1.27" y="0" drill="0.8128" diameter="1.6764"/>
<pad name="2" x="1.27" y="0" drill="0.8128" diameter="1.6764"/>
<text x="-1.397" y="2.032" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="2.667" y="2.032" size="1.27" layer="27" ratio="10" rot="R90">&gt;VALUE</text>
<rectangle x1="0.3048" y1="1.016" x2="0.7112" y2="1.6002" layer="21"/>
<rectangle x1="-0.7112" y1="1.016" x2="-0.3048" y2="1.6002" layer="21"/>
<rectangle x1="-1.778" y1="0.762" x2="1.778" y2="8.382" layer="43"/>
</package>
<package name="HC49UP">
<description>&lt;b&gt;CRYSTAL&lt;/b&gt;</description>
<wire x1="-5.1091" y1="1.143" x2="-3.429" y2="2.0321" width="0.0508" layer="21" curve="-55.770993" cap="flat"/>
<wire x1="-5.715" y1="1.143" x2="-5.715" y2="2.159" width="0.1524" layer="21"/>
<wire x1="3.429" y1="2.032" x2="5.1091" y2="1.143" width="0.0508" layer="21" curve="-55.772485" cap="flat"/>
<wire x1="5.715" y1="1.143" x2="5.715" y2="2.159" width="0.1524" layer="21"/>
<wire x1="3.429" y1="-1.27" x2="-3.429" y2="-1.27" width="0.0508" layer="21"/>
<wire x1="3.429" y1="-2.032" x2="-3.429" y2="-2.032" width="0.0508" layer="21"/>
<wire x1="-3.429" y1="1.27" x2="3.429" y2="1.27" width="0.0508" layer="21"/>
<wire x1="5.461" y1="-2.413" x2="-5.461" y2="-2.413" width="0.1524" layer="21"/>
<wire x1="5.715" y1="-0.381" x2="6.477" y2="-0.381" width="0.1524" layer="51"/>
<wire x1="5.715" y1="0.381" x2="6.477" y2="0.381" width="0.1524" layer="51"/>
<wire x1="6.477" y1="-0.381" x2="6.477" y2="0.381" width="0.1524" layer="51"/>
<wire x1="5.461" y1="-2.413" x2="5.715" y2="-2.159" width="0.1524" layer="21" curve="90"/>
<wire x1="5.715" y1="-1.143" x2="5.715" y2="1.143" width="0.1524" layer="51"/>
<wire x1="5.715" y1="-2.159" x2="5.715" y2="-1.143" width="0.1524" layer="21"/>
<wire x1="3.429" y1="-1.27" x2="3.9826" y2="-1.143" width="0.0508" layer="21" curve="25.842828" cap="flat"/>
<wire x1="3.429" y1="1.27" x2="3.9826" y2="1.143" width="0.0508" layer="21" curve="-25.842828" cap="flat"/>
<wire x1="3.429" y1="-2.032" x2="5.109" y2="-1.1429" width="0.0508" layer="21" curve="55.771157" cap="flat"/>
<wire x1="3.9826" y1="-1.143" x2="3.9826" y2="1.143" width="0.0508" layer="51" curve="128.314524" cap="flat"/>
<wire x1="5.1091" y1="-1.143" x2="5.1091" y2="1.143" width="0.0508" layer="51" curve="68.456213" cap="flat"/>
<wire x1="-5.1091" y1="-1.143" x2="-3.429" y2="-2.032" width="0.0508" layer="21" curve="55.772485" cap="flat"/>
<wire x1="-3.9826" y1="-1.143" x2="-3.9826" y2="1.143" width="0.0508" layer="51" curve="-128.314524" cap="flat"/>
<wire x1="-3.9826" y1="-1.143" x2="-3.429" y2="-1.27" width="0.0508" layer="21" curve="25.842828" cap="flat"/>
<wire x1="-3.9826" y1="1.143" x2="-3.429" y2="1.27" width="0.0508" layer="21" curve="-25.842828" cap="flat"/>
<wire x1="-6.477" y1="-0.381" x2="-6.477" y2="0.381" width="0.1524" layer="51"/>
<wire x1="-5.1091" y1="-1.143" x2="-5.1091" y2="1.143" width="0.0508" layer="51" curve="-68.456213" cap="flat"/>
<wire x1="-5.715" y1="-1.143" x2="-5.715" y2="-0.381" width="0.1524" layer="51"/>
<wire x1="-5.715" y1="-0.381" x2="-5.715" y2="0.381" width="0.1524" layer="51"/>
<wire x1="-5.715" y1="0.381" x2="-5.715" y2="1.143" width="0.1524" layer="51"/>
<wire x1="-5.715" y1="-2.159" x2="-5.715" y2="-1.143" width="0.1524" layer="21"/>
<wire x1="-5.715" y1="-2.159" x2="-5.461" y2="-2.413" width="0.1524" layer="21" curve="90"/>
<wire x1="-5.715" y1="-0.381" x2="-6.477" y2="-0.381" width="0.1524" layer="51"/>
<wire x1="-5.715" y1="0.381" x2="-6.477" y2="0.381" width="0.1524" layer="51"/>
<wire x1="-3.429" y1="2.032" x2="3.429" y2="2.032" width="0.0508" layer="21"/>
<wire x1="5.461" y1="2.413" x2="-5.461" y2="2.413" width="0.1524" layer="21"/>
<wire x1="5.461" y1="2.413" x2="5.715" y2="2.159" width="0.1524" layer="21" curve="-90"/>
<wire x1="-5.715" y1="2.159" x2="-5.461" y2="2.413" width="0.1524" layer="21" curve="-90"/>
<wire x1="-0.254" y1="0.635" x2="-0.254" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="-0.254" y1="-0.635" x2="0.254" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="0.254" y1="-0.635" x2="0.254" y2="0.635" width="0.1524" layer="21"/>
<wire x1="0.254" y1="0.635" x2="-0.254" y2="0.635" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="0.635" x2="-0.635" y2="0" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="0" x2="-0.635" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="-0.635" y1="0" x2="-1.016" y2="0" width="0.0508" layer="21"/>
<wire x1="0.635" y1="0.635" x2="0.635" y2="0" width="0.1524" layer="21"/>
<wire x1="0.635" y1="0" x2="0.635" y2="-0.635" width="0.1524" layer="21"/>
<wire x1="0.635" y1="0" x2="1.016" y2="0" width="0.0508" layer="21"/>
<smd name="1" x="-4.826" y="0" dx="5.334" dy="1.9304" layer="1"/>
<smd name="2" x="4.826" y="0" dx="5.334" dy="1.9304" layer="1"/>
<text x="-5.715" y="2.794" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-5.715" y="-4.191" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<rectangle x1="-6.604" y1="-3.048" x2="6.604" y2="3.048" layer="43"/>
</package>
<package name="HC49US">
<description>&lt;B&gt;CRYSTAL&lt;/B&gt;</description>
<wire x1="-3.429" y1="-2.286" x2="3.429" y2="-2.286" width="0.2032" layer="21"/>
<wire x1="3.429" y1="2.286" x2="-3.429" y2="2.286" width="0.2032" layer="21"/>
<wire x1="3.429" y1="2.286" x2="3.429" y2="-2.286" width="0.2032" layer="21" curve="-180"/>
<wire x1="-3.429" y1="2.286" x2="-3.429" y2="-2.286" width="0.2032" layer="21" curve="180"/>
<pad name="1" x="-2.54" y="0" drill="0.7" diameter="1.651" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651" rot="R90"/>
<text x="-5.08" y="-3.937" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.08" y="2.667" size="1.27" layer="25" ratio="10">&gt;NAME</text>
</package>
<package name="CRYSTAL-32KHZ-SMD">
<smd name="X1" x="-1.27" y="0" dx="1" dy="2.5" layer="1"/>
<smd name="X2" x="1.27" y="0" dx="1" dy="2.5" layer="1"/>
<smd name="SHEILD" x="0" y="5.08" dx="2.5" dy="6" layer="1"/>
<text x="-0.635" y="8.255" size="0.4064" layer="25">&gt;Name</text>
<text x="-0.635" y="-1.905" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CRYSTAL-SMD-5X3">
<wire x1="-0.6" y1="1.6" x2="0.6" y2="1.6" width="0.2032" layer="21"/>
<wire x1="2.5" y1="0.3" x2="2.5" y2="-0.3" width="0.2032" layer="21"/>
<wire x1="0.6" y1="-1.6" x2="-0.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="0.3" x2="-2.5" y2="-0.3" width="0.2032" layer="21"/>
<smd name="1" x="-1.85" y="-1.15" dx="1.9" dy="1.1" layer="1"/>
<smd name="3" x="1.85" y="1.15" dx="1.9" dy="1.1" layer="1"/>
<smd name="4" x="-1.85" y="1.15" dx="1.9" dy="1.1" layer="1"/>
<smd name="2" x="1.85" y="-1.15" dx="1.9" dy="1.1" layer="1"/>
<text x="-2.54" y="1.905" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="TC26HEZ">
<description>32kHz crystal package&lt;br&gt;
This is the "EZ" version, which has limited top masking for improved ease of assembly.</description>
<wire x1="-0.889" y1="1.651" x2="0.889" y2="1.651" width="0.1524" layer="21"/>
<wire x1="0.762" y1="7.747" x2="1.016" y2="7.493" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.016" y1="7.493" x2="-0.762" y2="7.747" width="0.1524" layer="21" curve="-90"/>
<wire x1="-0.762" y1="7.747" x2="0.762" y2="7.747" width="0.1524" layer="21"/>
<wire x1="0.889" y1="1.651" x2="0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="1.016" y1="2.032" x2="1.016" y2="7.493" width="0.1524" layer="21"/>
<wire x1="-0.889" y1="1.651" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.016" y1="2.032" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="-1.016" y1="2.032" x2="-1.016" y2="7.493" width="0.1524" layer="21"/>
<wire x1="0.508" y1="0.762" x2="0.508" y2="1.143" width="0.4064" layer="21"/>
<wire x1="-0.508" y1="0.762" x2="-0.508" y2="1.27" width="0.4064" layer="21"/>
<wire x1="0.635" y1="0.635" x2="1.27" y2="0" width="0.4064" layer="51"/>
<wire x1="-0.635" y1="0.635" x2="-1.27" y2="0" width="0.4064" layer="51"/>
<wire x1="-0.508" y1="4.953" x2="-0.508" y2="4.572" width="0.1524" layer="21"/>
<wire x1="0.508" y1="4.572" x2="-0.508" y2="4.572" width="0.1524" layer="21"/>
<wire x1="0.508" y1="4.572" x2="0.508" y2="4.953" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="4.953" x2="0.508" y2="4.953" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="5.334" x2="0" y2="5.334" width="0.1524" layer="21"/>
<wire x1="-0.508" y1="4.191" x2="0" y2="4.191" width="0.1524" layer="21"/>
<wire x1="0" y1="4.191" x2="0" y2="3.683" width="0.1524" layer="21"/>
<wire x1="0" y1="4.191" x2="0.508" y2="4.191" width="0.1524" layer="21"/>
<wire x1="0" y1="5.334" x2="0" y2="5.842" width="0.1524" layer="21"/>
<wire x1="0" y1="5.334" x2="0.508" y2="5.334" width="0.1524" layer="21"/>
<wire x1="1.016" y1="2.032" x2="0.889" y2="2.032" width="0.1524" layer="21"/>
<wire x1="0.889" y1="2.032" x2="-0.889" y2="2.032" width="0.1524" layer="21"/>
<pad name="1" x="-1.27" y="0" drill="0.8128" diameter="1.6764" stop="no"/>
<pad name="2" x="1.27" y="0" drill="0.8128" diameter="1.6764" stop="no"/>
<text x="-1.397" y="2.032" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="2.667" y="2.032" size="1.27" layer="27" ratio="10" rot="R90">&gt;VALUE</text>
<rectangle x1="0.3048" y1="1.016" x2="0.7112" y2="1.6002" layer="21"/>
<rectangle x1="-0.7112" y1="1.016" x2="-0.3048" y2="1.6002" layer="21"/>
<rectangle x1="-1.778" y1="0.762" x2="1.778" y2="8.382" layer="43"/>
<circle x="-1.27" y="0" radius="0.508" width="0" layer="29"/>
<circle x="1.27" y="0" radius="0.508" width="0" layer="29"/>
<circle x="-1.27" y="0" radius="0.924571875" width="0" layer="30"/>
<circle x="1.27" y="0" radius="0.915809375" width="0" layer="30"/>
</package>
<package name="CRYSTAL-32KHZ-SMD_EPSON_MC146">
<wire x1="0.2" y1="0" x2="7.2" y2="0" width="0.127" layer="51"/>
<wire x1="7.2" y1="0" x2="7.2" y2="1.5" width="0.127" layer="51"/>
<wire x1="7.2" y1="1.5" x2="0.2" y2="1.5" width="0.127" layer="51"/>
<wire x1="0.2" y1="1.5" x2="0.2" y2="0" width="0.127" layer="51"/>
<wire x1="6.2" y1="1.4" x2="5.9" y2="1.4" width="0.127" layer="21"/>
<wire x1="5.9" y1="1.4" x2="5.9" y2="0.1" width="0.127" layer="21"/>
<wire x1="5.9" y1="0.1" x2="6.2" y2="0.1" width="0.127" layer="21"/>
<wire x1="1.3" y1="1.4" x2="1.9" y2="1.4" width="0.127" layer="21"/>
<wire x1="1.3" y1="0.1" x2="1.9" y2="0.1" width="0.127" layer="21"/>
<smd name="P$1" x="0.6" y="0.3" dx="1.2" dy="0.6" layer="1"/>
<smd name="P$2" x="0.6" y="1.2" dx="1.2" dy="0.6" layer="1"/>
<smd name="NC2" x="6.9" y="0.3" dx="1.2" dy="0.6" layer="1"/>
<smd name="NC1" x="6.9" y="1.2" dx="1.2" dy="0.6" layer="1"/>
</package>
<package name="CRYSTAL-SMD-10.5X4.8-2PIN">
<wire x1="-6.2" y1="1.5" x2="-6.2" y2="2.4" width="0.127" layer="21"/>
<wire x1="-6.2" y1="2.4" x2="6.2" y2="2.4" width="0.127" layer="21"/>
<wire x1="6.2" y1="2.4" x2="6.2" y2="1.5" width="0.127" layer="21"/>
<wire x1="-6.2" y1="-1.5" x2="-6.2" y2="-2.4" width="0.127" layer="21"/>
<wire x1="-6.2" y1="-2.4" x2="6.2" y2="-2.4" width="0.127" layer="21"/>
<wire x1="6.2" y1="-2.4" x2="6.2" y2="-1.5" width="0.127" layer="21"/>
<smd name="P$1" x="-4.3" y="0" dx="5.5" dy="1.5" layer="1"/>
<smd name="P$2" x="4.3" y="0" dx="5.5" dy="1.5" layer="1"/>
</package>
<package name="SO08">
<description>&lt;b&gt;Small Outline Package&lt;/b&gt; Fits JEDEC packages (narrow SOIC-8)</description>
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="2" x="-0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="3" x="0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="4" x="1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="5" x="1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="6" x="0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="7" x="-0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="8" x="-1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="DS3234">
<wire x1="6.5" y1="3.75" x2="6.5" y2="-3.75" width="0.254" layer="21"/>
<wire x1="6.5" y1="3.75" x2="-6.5" y2="3.75" width="0.127" layer="51"/>
<wire x1="6.5" y1="-3.75" x2="-6.5" y2="-3.75" width="0.127" layer="51"/>
<wire x1="-6.5" y1="3.75" x2="-6.5" y2="-3.75" width="0.254" layer="21"/>
<circle x="-5.7" y="-1" radius="0.2" width="0.254" layer="21"/>
<smd name="10" x="5.715" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="11" x="5.715" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="12" x="4.445" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="13" x="3.175" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="14" x="1.905" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="15" x="0.635" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="16" x="-0.635" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="17" x="-1.905" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="18" x="-3.175" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="19" x="-4.445" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="20" x="-5.715" y="4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="9" x="4.445" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="8" x="3.175" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="7" x="1.905" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="6" x="0.635" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="5" x="-0.635" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="4" x="-1.905" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="3" x="-3.175" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="2" x="-4.445" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<smd name="1" x="-5.715" y="-4.685" dx="0.53" dy="1.98" layer="1" rot="R180"/>
<text x="-6.985" y="-1.905" size="1.016" layer="25" rot="R90">&gt;NAME</text>
</package>
<package name="CRYSTAL-SMD-7X5">
<wire x1="1.402" y1="-0.4094" x2="1.402" y2="-0.6094" width="0.127" layer="21"/>
<wire x1="-0.889" y1="1.27" x2="-0.889" y2="2.921" width="0.2032" layer="21"/>
<wire x1="5.969" y1="1.27" x2="5.969" y2="2.921" width="0.2032" layer="21"/>
<wire x1="3.937" y1="5.207" x2="1.143" y2="5.207" width="0.2032" layer="21"/>
<wire x1="3.937" y1="-1.016" x2="1.143" y2="-1.016" width="0.2032" layer="21"/>
<circle x="1.402" y="-0.5094" radius="0.3" width="0.127" layer="21"/>
<circle x="1.402" y="-0.5094" radius="0.2236" width="0.127" layer="21"/>
<circle x="1.402" y="-0.5094" radius="0.1" width="0.127" layer="21"/>
<smd name="P$1" x="0" y="0" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="P$2" x="5.08" y="0" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="P$3" x="5.08" y="4.2" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="P$4" x="0" y="4.2" dx="2" dy="1.8" layer="1" rot="R90"/>
<text x="-1.016" y="5.842" size="1.27" layer="25" ratio="15">&gt;Name</text>
<text x="-1.016" y="-2.921" size="1.27" layer="27" ratio="15">&gt;Value</text>
</package>
<package name="CRYSTAL-SMD-7.5X5.2-6PIN">
<description>FXO-HC73 Series Oscillator. 7.5x5.2mm 6-pin package</description>
<wire x1="3.75" y1="2.6" x2="-3.75" y2="2.6" width="0.127" layer="51"/>
<wire x1="-3.75" y1="2.6" x2="-3.75" y2="-2.6" width="0.127" layer="51"/>
<wire x1="-3.75" y1="-2.6" x2="3.75" y2="-2.6" width="0.127" layer="51"/>
<wire x1="3.75" y1="-2.6" x2="3.75" y2="2.6" width="0.127" layer="51"/>
<wire x1="-3.8" y1="2.4" x2="-3.8" y2="-2.4" width="0.127" layer="21"/>
<wire x1="3.8" y1="2.4" x2="3.8" y2="-2.4" width="0.127" layer="21"/>
<circle x="-3" y="-0.5" radius="0.3605" width="0.127" layer="21"/>
<smd name="2" x="2.54" y="-2.1" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="3" x="2.54" y="2.1" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="4" x="-2.54" y="2.1" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="1" x="-2.54" y="-2.1" dx="2" dy="1.8" layer="1" rot="R90"/>
<smd name="NC0" x="0" y="-2.1" dx="2" dy="1.4" layer="1" rot="R90"/>
<smd name="NC1" x="0" y="2.1" dx="2" dy="1.4" layer="1" rot="R90"/>
<text x="-3.6" y="3.4" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.7" y="-3.8" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CRYSTAL-OSC-SMD-5X3">
<wire x1="-0.6" y1="1.6" x2="0.6" y2="1.6" width="0.2032" layer="21"/>
<wire x1="2.5" y1="0.3" x2="2.5" y2="-0.3" width="0.2032" layer="21"/>
<wire x1="0.6" y1="-1.6" x2="-0.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="0.3" x2="-2.5" y2="-0.3" width="0.2032" layer="21"/>
<circle x="-3.4986" y="-1.2794" radius="0.2653" width="0.127" layer="21"/>
<circle x="-3.4986" y="-1.2794" radius="0.1456" width="0.127" layer="21"/>
<circle x="-3.4986" y="-1.2794" radius="0.0284" width="0.127" layer="21"/>
<smd name="1" x="-1.85" y="-1.15" dx="1.9" dy="1.1" layer="1"/>
<smd name="3" x="1.85" y="1.15" dx="1.9" dy="1.1" layer="1"/>
<smd name="4" x="-1.85" y="1.15" dx="1.9" dy="1.1" layer="1"/>
<smd name="2" x="1.85" y="-1.15" dx="1.9" dy="1.1" layer="1"/>
<text x="-2.54" y="1.905" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="RESONATOR-SMD">
<wire x1="1.8" y1="0.65" x2="1.8" y2="-0.65" width="0.2032" layer="21"/>
<wire x1="-1.8" y1="-0.65" x2="-1.8" y2="0.65" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="0.65" x2="1.6" y2="0.65" width="0.127" layer="51"/>
<wire x1="1.6" y1="0.65" x2="1.6" y2="-0.65" width="0.127" layer="51"/>
<wire x1="1.6" y1="-0.65" x2="-1.6" y2="-0.65" width="0.127" layer="51"/>
<wire x1="-1.6" y1="-0.65" x2="-1.6" y2="0.65" width="0.127" layer="51"/>
<smd name="1" x="-1.2" y="0" dx="0.7" dy="1.7" layer="1"/>
<smd name="2" x="0" y="0" dx="0.7" dy="1.7" layer="1"/>
<smd name="3" x="1.2" y="0" dx="0.7" dy="1.7" layer="1"/>
<text x="-0.889" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-0.889" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="RESONATOR-PTH">
<wire x1="-2.286" y1="1.778" x2="-2.286" y2="-1.778" width="0.2032" layer="21" curve="162.403081"/>
<wire x1="2.286" y1="-1.778" x2="2.286" y2="1.778" width="0.2032" layer="21" curve="162.403081"/>
<wire x1="-2.286" y1="-1.778" x2="2.286" y2="-1.778" width="0.2032" layer="21" curve="12.71932"/>
<wire x1="2.286" y1="1.778" x2="-2.286" y2="1.778" width="0.2032" layer="21" curve="12.758496"/>
<pad name="2" x="0" y="0" drill="0.8" diameter="1.8796"/>
<pad name="1" x="-2.54" y="0" drill="0.8" diameter="1.8796"/>
<pad name="3" x="2.54" y="0" drill="0.8" diameter="1.8796"/>
</package>
<package name="RESONATOR-WIDE-SMD">
<wire x1="-3.3" y1="2.3" x2="-3.7" y2="2.3" width="0.127" layer="121"/>
<wire x1="-3.7" y1="2.3" x2="-3.7" y2="-2.4" width="0.127" layer="121"/>
<wire x1="-3.7" y1="-2.4" x2="-3.3" y2="-2.4" width="0.127" layer="121"/>
<wire x1="3.3" y1="2.3" x2="3.8" y2="2.3" width="0.127" layer="121"/>
<wire x1="3.8" y1="2.3" x2="3.8" y2="-2.4" width="0.127" layer="121"/>
<wire x1="3.8" y1="-2.4" x2="3.3" y2="-2.4" width="0.127" layer="121"/>
<smd name="1" x="-2.5" y="0" dx="1.7" dy="4" layer="1" rot="R180"/>
<smd name="2" x="0" y="0" dx="1.5" dy="4" layer="1" rot="R180"/>
<smd name="3" x="2.5" y="0" dx="1.7" dy="4" layer="1" rot="R180"/>
</package>
<package name="RESONATOR_NOCAP">
<wire x1="0.6" y1="3" x2="3.3" y2="3" width="0.254" layer="21"/>
<wire x1="0.5" y1="-3" x2="3.4" y2="-3" width="0.254" layer="21"/>
<smd name="P$1" x="0" y="0" dx="0.8" dy="5.1" layer="1"/>
<smd name="P$2" x="3.9" y="0" dx="0.8" dy="5.1" layer="1"/>
</package>
<package name="SIT8002">
<wire x1="0" y1="0" x2="7" y2="0" width="0.127" layer="51"/>
<wire x1="7" y1="0" x2="7" y2="5" width="0.127" layer="51"/>
<wire x1="7" y1="5" x2="0" y2="5" width="0.127" layer="51"/>
<wire x1="0" y1="5" x2="0" y2="0" width="0.127" layer="51"/>
<circle x="7.239" y="5.08" radius="0.2839" width="0.127" layer="21"/>
<smd name="1" x="5.7" y="4.4" dx="1.6" dy="1.1" layer="1"/>
<smd name="2" x="1.3" y="4.4" dx="1.6" dy="1.1" layer="1"/>
<smd name="3" x="1.3" y="0.6" dx="1.6" dy="1.1" layer="1"/>
<smd name="4" x="5.7" y="0.6" dx="1.6" dy="1.1" layer="1"/>
<smd name="N" x="3.5" y="2.5" dx="2.3" dy="1.8" layer="1" rot="R90"/>
</package>
<package name="CRYSTAL-TXC-7A">
<smd name="P$1" x="1.85" y="0" dx="1.7" dy="2.4" layer="1"/>
<smd name="P$2" x="-1.85" y="0" dx="1.7" dy="2.4" layer="1"/>
<wire x1="-2.6" y1="1.6" x2="2.6" y2="1.6" width="0.127" layer="21"/>
<wire x1="2.6" y1="-1.6" x2="-2.6" y2="-1.6" width="0.127" layer="21"/>
<text x="-1.016" y="0.254" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-0.508" size="0.4064" layer="27">&gt;VALUE</text>
</package>
</packages>
<symbols>
<symbol name="Q">
<wire x1="1.016" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="-1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.381" y1="1.524" x2="-0.381" y2="-1.524" width="0.254" layer="94"/>
<wire x1="-0.381" y1="-1.524" x2="0.381" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0.381" y1="-1.524" x2="0.381" y2="1.524" width="0.254" layer="94"/>
<wire x1="0.381" y1="1.524" x2="-0.381" y2="1.524" width="0.254" layer="94"/>
<wire x1="1.016" y1="1.778" x2="1.016" y2="-1.778" width="0.254" layer="94"/>
<wire x1="-1.016" y1="1.778" x2="-1.016" y2="-1.778" width="0.254" layer="94"/>
<text x="2.54" y="1.016" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-2.54" size="1.778" layer="96">&gt;VALUE</text>
<text x="-2.159" y="-1.143" size="0.8636" layer="93">1</text>
<text x="1.524" y="-1.143" size="0.8636" layer="93">2</text>
<pin name="2" x="2.54" y="0" visible="off" length="point" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-2.54" y="0" visible="off" length="point" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="DS1077">
<wire x1="-10.16" y1="10.16" x2="-10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="-10.16" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<text x="-10.16" y="10.668" size="1.27" layer="95">&gt;NAME</text>
<text x="-10.16" y="-11.938" size="1.27" layer="96">&gt;VALUE</text>
<pin name="OUT1" x="-15.24" y="7.62" length="middle"/>
<pin name="OUT0" x="-15.24" y="2.54" length="middle"/>
<pin name="VCC" x="-15.24" y="-2.54" length="middle"/>
<pin name="GND" x="-15.24" y="-7.62" length="middle"/>
<pin name="CTRL0" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="CTRL1" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="SDA" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="SCL" x="15.24" y="7.62" length="middle" rot="R180"/>
</symbol>
<symbol name="DS1307">
<wire x1="-7.62" y1="5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<text x="-7.62" y="5.842" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-10.16" size="1.778" layer="95">&gt;Value</text>
<pin name="X1" x="-10.16" y="2.54" length="short"/>
<pin name="X2" x="-10.16" y="0" length="short"/>
<pin name="VBATT" x="-10.16" y="-2.54" length="short"/>
<pin name="GND" x="-10.16" y="-5.08" length="short"/>
<pin name="SDA" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="SCL" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="SQW" x="12.7" y="0" length="short" rot="R180"/>
<pin name="VCC" x="12.7" y="2.54" length="short" rot="R180"/>
</symbol>
<symbol name="DS3234">
<wire x1="-10.16" y1="15.24" x2="-10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-17.78" x2="12.7" y2="-17.78" width="0.254" layer="94"/>
<wire x1="12.7" y1="-17.78" x2="12.7" y2="15.24" width="0.254" layer="94"/>
<wire x1="12.7" y1="15.24" x2="-10.16" y2="15.24" width="0.254" layer="94"/>
<text x="-9.144" y="15.494" size="1.778" layer="95">&gt;NAME</text>
<text x="-9.398" y="-20.066" size="1.778" layer="96">&gt;VALUE</text>
<pin name="GND" x="17.78" y="-15.24" length="middle" rot="R180"/>
<pin name="VCC" x="-15.24" y="12.7" length="middle"/>
<pin name="SCLK@20" x="-15.24" y="5.08" length="middle"/>
<pin name="DOUT" x="-15.24" y="2.54" length="middle"/>
<pin name="DIN" x="-15.24" y="0" length="middle"/>
<pin name="CS" x="-15.24" y="-2.54" length="middle"/>
<pin name="INT/SQW" x="-15.24" y="-7.62" length="middle"/>
<pin name="RST" x="-15.24" y="-12.7" length="middle"/>
<pin name="32KHZ" x="-15.24" y="-15.24" length="middle"/>
<pin name="GND@2" x="17.78" y="7.62" length="middle" rot="R180"/>
<pin name="VBAT" x="17.78" y="12.7" length="middle" rot="R180"/>
<pin name="SCLK@18" x="-15.24" y="7.62" length="middle"/>
<pin name="GND@14" x="17.78" y="-12.7" length="middle" rot="R180"/>
<pin name="GND@9" x="17.78" y="0" length="middle" rot="R180"/>
<pin name="GND@13" x="17.78" y="-10.16" length="middle" rot="R180"/>
<pin name="GND@12" x="17.78" y="-7.62" length="middle" rot="R180"/>
<pin name="GND@11" x="17.78" y="-5.08" length="middle" rot="R180"/>
<pin name="GND@10" x="17.78" y="-2.54" length="middle" rot="R180"/>
<pin name="GND@8" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="GND@7" x="17.78" y="5.08" length="middle" rot="R180"/>
</symbol>
<symbol name="OSCILLATOR">
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<text x="-7.62" y="5.842" size="1.27" layer="95">&gt;Name</text>
<text x="-7.62" y="-7.366" size="1.27" layer="96">&gt;Value</text>
<pin name="EN" x="-12.7" y="-2.54" length="middle"/>
<pin name="GND" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="OUT" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="VCC" x="-12.7" y="2.54" length="middle"/>
</symbol>
<symbol name="RESONATOR">
<wire x1="1.016" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="-1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.381" y1="1.524" x2="-0.381" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="-0.381" y1="-1.524" x2="0.381" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="0.381" y1="-1.524" x2="0.381" y2="1.524" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.524" x2="-0.381" y2="1.524" width="0.1524" layer="94"/>
<wire x1="1.016" y1="1.778" x2="1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="1.016" y1="0" x2="1.016" y2="-1.778" width="0.1524" layer="94"/>
<wire x1="-1.016" y1="1.778" x2="-1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.016" y1="0" x2="-1.016" y2="-1.778" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-2.032" width="0.1524" layer="94"/>
<wire x1="3.302" y1="-2.032" x2="2.54" y2="-2.032" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.032" x2="1.778" y2="-2.032" width="0.1524" layer="94"/>
<wire x1="3.302" y1="-3.048" x2="2.54" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-3.048" x2="1.778" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-3.048" x2="2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="-1.778" y1="-3.048" x2="-2.54" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-3.048" x2="-3.302" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-3.048" x2="-2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="-1.778" y1="-2.032" x2="-2.54" y2="-2.032" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-2.032" x2="-3.302" y2="-2.032" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="-2.032" x2="-2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="0" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="0" y1="-5.08" x2="-2.54" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="0" y1="-5.08" x2="0" y2="-7.62" width="0.1524" layer="94"/>
<text x="2.54" y="1.016" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-7.62" size="1.778" layer="96">&gt;VALUE</text>
<pin name="3" x="2.54" y="0" visible="off" length="point" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-2.54" y="0" visible="off" length="point" direction="pas" swaplevel="1"/>
<pin name="2" x="0" y="-7.62" visible="off" length="point" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="RESONATOR_NOCAP">
<wire x1="1.016" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="-1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="-0.381" y1="1.524" x2="-0.381" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="-0.381" y1="-1.524" x2="0.381" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="0.381" y1="-1.524" x2="0.381" y2="1.524" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.524" x2="-0.381" y2="1.524" width="0.1524" layer="94"/>
<wire x1="1.016" y1="1.778" x2="1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="1.016" y1="0" x2="1.016" y2="-1.778" width="0.1524" layer="94"/>
<wire x1="-1.016" y1="1.778" x2="-1.016" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.016" y1="0" x2="-1.016" y2="-1.778" width="0.1524" layer="94"/>
<text x="-2.794" y="2.54" size="1.27" layer="95">&gt;NAME</text>
<text x="-3.048" y="-4.064" size="1.27" layer="96">&gt;Value</text>
<pin name="3" x="2.54" y="0" visible="off" length="point" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-2.54" y="0" visible="off" length="point" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="SIT8002">
<wire x1="-10.16" y1="-5.08" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="-10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="-10.16" y1="5.08" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
<text x="-6.604" y="5.842" size="1.778" layer="94">&gt;VALUE</text>
<text x="-4.826" y="-7.874" size="1.778" layer="94">&gt;NAME</text>
<pin name="/ST-OE" x="-15.24" y="0" length="middle"/>
<pin name="GND" x="-15.24" y="-2.54" length="middle"/>
<pin name="OUT" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="VDD" x="-15.24" y="2.54" length="middle"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="CRYSTAL" prefix="Y" uservalue="yes">
<description>Various standard crystals. Proven footprints. Spark Fun Electronics SKU : COM-00534</description>
<gates>
<gate name="G$1" symbol="Q" x="0" y="0"/>
</gates>
<devices>
<device name="HC49UV" package="HC49U-V">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TC38H" package="TC38H">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TC26H" package="TC26H">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="HC49UP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="HC49US" package="HC49US">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="32-SMD" package="CRYSTAL-32KHZ-SMD">
<connects>
<connect gate="G$1" pin="1" pad="X1"/>
<connect gate="G$1" pin="2" pad="X2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="5X3" package="CRYSTAL-SMD-5X3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EPSONMC146" package="CRYSTAL-32KHZ-SMD_EPSON_MC146">
<connects>
<connect gate="G$1" pin="1" pad="P$2"/>
<connect gate="G$1" pin="2" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="10.5X4.8" package="CRYSTAL-SMD-10.5X4.8-2PIN">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TC26H_EZ" package="TC26HEZ">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TXC-7A" package="CRYSTAL-TXC-7A">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DS1077">
<description>I2C non-volatile programmable oscillator, 16kHz to 133MHz</description>
<gates>
<gate name="G$1" symbol="DS1077" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="CTRL0" pad="5"/>
<connect gate="G$1" pin="CTRL1" pad="6"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="OUT0" pad="2"/>
<connect gate="G$1" pin="OUT1" pad="1"/>
<connect gate="G$1" pin="SCL" pad="8"/>
<connect gate="G$1" pin="SDA" pad="7"/>
<connect gate="G$1" pin="VCC" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DS1307">
<description>I2C real-time clock with battery backup.</description>
<gates>
<gate name="G$1" symbol="DS1307" x="0" y="0"/>
</gates>
<devices>
<device name="SO8" package="SO08">
<connects>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="SCL" pad="6"/>
<connect gate="G$1" pin="SDA" pad="5"/>
<connect gate="G$1" pin="SQW" pad="7"/>
<connect gate="G$1" pin="VBATT" pad="3"/>
<connect gate="G$1" pin="VCC" pad="8"/>
<connect gate="G$1" pin="X1" pad="1"/>
<connect gate="G$1" pin="X2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DS3234">
<description>SPI RTC module with battery backup and internal clock.</description>
<gates>
<gate name="G$1" symbol="DS3234" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DS3234">
<connects>
<connect gate="G$1" pin="32KHZ" pad="3"/>
<connect gate="G$1" pin="CS" pad="1"/>
<connect gate="G$1" pin="DIN" pad="17"/>
<connect gate="G$1" pin="DOUT" pad="19"/>
<connect gate="G$1" pin="GND" pad="15"/>
<connect gate="G$1" pin="GND@10" pad="10"/>
<connect gate="G$1" pin="GND@11" pad="11"/>
<connect gate="G$1" pin="GND@12" pad="12"/>
<connect gate="G$1" pin="GND@13" pad="13"/>
<connect gate="G$1" pin="GND@14" pad="14"/>
<connect gate="G$1" pin="GND@2" pad="2"/>
<connect gate="G$1" pin="GND@7" pad="7"/>
<connect gate="G$1" pin="GND@8" pad="8"/>
<connect gate="G$1" pin="GND@9" pad="9"/>
<connect gate="G$1" pin="INT/SQW" pad="5"/>
<connect gate="G$1" pin="RST" pad="6"/>
<connect gate="G$1" pin="SCLK@18" pad="18"/>
<connect gate="G$1" pin="SCLK@20" pad="20"/>
<connect gate="G$1" pin="VBAT" pad="16"/>
<connect gate="G$1" pin="VCC" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="OSCILLATOR" prefix="U">
<description>Generic 5x3 and 7x5 oscillators</description>
<gates>
<gate name="G$1" symbol="OSCILLATOR" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="CRYSTAL-SMD-7X5">
<connects>
<connect gate="G$1" pin="EN" pad="P$1"/>
<connect gate="G$1" pin="GND" pad="P$2"/>
<connect gate="G$1" pin="OUT" pad="P$3"/>
<connect gate="G$1" pin="VCC" pad="P$4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD6" package="CRYSTAL-SMD-7.5X5.2-6PIN">
<connects>
<connect gate="G$1" pin="EN" pad="1"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="OUT" pad="3"/>
<connect gate="G$1" pin="VCC" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="5X3" package="CRYSTAL-SMD-5X3">
<connects>
<connect gate="G$1" pin="EN" pad="1"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="OUT" pad="3"/>
<connect gate="G$1" pin="VCC" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="5X3-PIN1-INDICATED" package="CRYSTAL-OSC-SMD-5X3">
<connects>
<connect gate="G$1" pin="EN" pad="1"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="OUT" pad="3"/>
<connect gate="G$1" pin="VCC" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RESONATOR" prefix="Y" uservalue="yes">
<description>&lt;b&gt;Resonator&lt;/b&gt;&lt;br&gt;
Small SMD resonator.&lt;br&gt;
Used, eg, on the Arduino Pro/ Pro Mini boards.&lt;br&gt;
8MHz- XTAL-08895&lt;br&gt;
16MHz- XTAL-08900</description>
<gates>
<gate name="G$1" symbol="RESONATOR" x="0" y="0"/>
</gates>
<devices>
<device name="8MHZ" package="RESONATOR-SMD">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="XTAL-08895"/>
<attribute name="VALUE" value="8MHZ" constant="no"/>
</technology>
</technologies>
</device>
<device name="PTH" package="RESONATOR-PTH">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="16MHZ" package="RESONATOR-SMD">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="XTAL-08900"/>
<attribute name="VALUE" value="16MHz"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RESONATOR-WIDE">
<gates>
<gate name="G$1" symbol="RESONATOR" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="RESONATOR-WIDE-SMD">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RESONATOR_NOCAP">
<gates>
<gate name="G$1" symbol="RESONATOR_NOCAP" x="0" y="0"/>
</gates>
<devices>
<device name="" package="RESONATOR_NOCAP">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="3" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SIT8002">
<description>Silicon Oscillator- not field programmable</description>
<gates>
<gate name="G$1" symbol="SIT8002" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SIT8002">
<connects>
<connect gate="G$1" pin="/ST-OE" pad="1"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="OUT" pad="3"/>
<connect gate="G$1" pin="VDD" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-LED.lbr.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="16" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="14" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find discrete LEDs for illumination or indication, but no displays.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="APA3010SF4C">
<wire x1="-1" y1="1" x2="-1.5" y2="1" width="0.127" layer="21"/>
<wire x1="-1.5" y1="1" x2="-1.5" y2="-1" width="0.127" layer="21"/>
<wire x1="-1.5" y1="-1" x2="-1" y2="-1" width="0.127" layer="21"/>
<smd name="3" x="0.65" y="0" dx="0.9" dy="0.9" layer="1"/>
<smd name="2" x="0" y="1.75" dx="1.5" dy="1.5" layer="1"/>
<smd name="1" x="0" y="-1.75" dx="1.5" dy="1.5" layer="1"/>
</package>
<package name="LED5MM">
<description>&lt;B&gt;LED&lt;/B&gt;&lt;p&gt;
5 mm, round</description>
<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.254" layer="21" curve="-286.260205" cap="flat"/>
<wire x1="-1.143" y1="0" x2="0" y2="1.143" width="0.1524" layer="51" curve="-90" cap="flat"/>
<wire x1="0" y1="-1.143" x2="1.143" y2="0" width="0.1524" layer="51" curve="90" cap="flat"/>
<wire x1="-1.651" y1="0" x2="0" y2="1.651" width="0.1524" layer="51" curve="-90" cap="flat"/>
<wire x1="0" y1="-1.651" x2="1.651" y2="0" width="0.1524" layer="51" curve="90" cap="flat"/>
<wire x1="-2.159" y1="0" x2="0" y2="2.159" width="0.1524" layer="51" curve="-90" cap="flat"/>
<wire x1="0" y1="-2.159" x2="2.159" y2="0" width="0.1524" layer="51" curve="90" cap="flat"/>
<circle x="0" y="0" radius="2.54" width="0.1524" layer="21"/>
<pad name="A" x="-1.27" y="0" drill="0.8128" diameter="1.8796"/>
<pad name="K" x="1.27" y="0" drill="0.8128" diameter="1.8796"/>
<text x="3.175" y="0.5334" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="3.2004" y="-1.8034" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="LED3MM">
<description>&lt;B&gt;LED&lt;/B&gt;&lt;p&gt;
3 mm, round</description>
<wire x1="1.5748" y1="-1.27" x2="1.5748" y2="1.27" width="0.254" layer="51"/>
<wire x1="0" y1="2.032" x2="1.561" y2="1.3009" width="0.254" layer="21" curve="-50.193108" cap="flat"/>
<wire x1="-1.7929" y1="0.9562" x2="0" y2="2.032" width="0.254" layer="21" curve="-61.926949" cap="flat"/>
<wire x1="0" y1="-2.032" x2="1.5512" y2="-1.3126" width="0.254" layer="21" curve="49.763022" cap="flat"/>
<wire x1="-1.7643" y1="-1.0082" x2="0" y2="-2.032" width="0.254" layer="21" curve="60.255215" cap="flat"/>
<wire x1="-2.032" y1="0" x2="-1.7891" y2="0.9634" width="0.254" layer="51" curve="-28.301701" cap="flat"/>
<wire x1="-2.032" y1="0" x2="-1.7306" y2="-1.065" width="0.254" layer="51" curve="31.60822" cap="flat"/>
<wire x1="1.5748" y1="1.2954" x2="1.5748" y2="0.7874" width="0.254" layer="21"/>
<wire x1="1.5748" y1="-1.2954" x2="1.5748" y2="-0.8382" width="0.254" layer="21"/>
<pad name="A" x="-1.27" y="0" drill="0.8128" diameter="1.8796"/>
<pad name="K" x="1.27" y="0" drill="0.8128" diameter="1.8796"/>
<text x="1.905" y="0.381" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="1.905" y="-1.651" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="LED-1206">
<wire x1="-1" y1="1" x2="-2.4" y2="1" width="0.2032" layer="21"/>
<wire x1="-2.4" y1="1" x2="-2.4" y2="-1" width="0.2032" layer="21"/>
<wire x1="-2.4" y1="-1" x2="-1" y2="-1" width="0.2032" layer="21"/>
<wire x1="1" y1="1" x2="2.4" y2="1" width="0.2032" layer="21"/>
<wire x1="2.4" y1="1" x2="2.4" y2="-1" width="0.2032" layer="21"/>
<wire x1="2.4" y1="-1" x2="1" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.3" y1="0.7" x2="0.3" y2="0" width="0.2032" layer="21"/>
<wire x1="0.3" y1="0" x2="0.3" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="0.3" y1="0" x2="-0.3" y2="0.6" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="0.6" x2="-0.3" y2="-0.6" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="-0.6" x2="0.3" y2="0" width="0.2032" layer="21"/>
<smd name="A" x="-1.5" y="0" dx="1.2" dy="1.4" layer="1"/>
<smd name="C" x="1.5" y="0" dx="1.2" dy="1.4" layer="1"/>
<text x="-0.889" y="1.397" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-1.778" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="LED-0603">
<wire x1="0.46" y1="0.17" x2="0" y2="0.17" width="0.2032" layer="21"/>
<wire x1="-0.46" y1="0.17" x2="0" y2="0.17" width="0.2032" layer="21"/>
<wire x1="0" y1="0.17" x2="0.2338" y2="-0.14" width="0.2032" layer="21"/>
<wire x1="-0.0254" y1="0.1546" x2="-0.2184" y2="-0.14" width="0.2032" layer="21"/>
<smd name="C" x="0" y="0.75" dx="0.8" dy="0.8" layer="1"/>
<smd name="A" x="0" y="-0.75" dx="0.8" dy="0.8" layer="1"/>
<text x="-0.6985" y="-0.889" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="1.0795" y="-1.016" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
</package>
<package name="LED10MM">
<wire x1="-5" y1="-2" x2="-5" y2="2" width="0.2032" layer="21" curve="316.862624"/>
<wire x1="-5" y1="2" x2="-5" y2="-2" width="0.2032" layer="21"/>
<pad name="A" x="2.54" y="0" drill="2.4" diameter="3.7"/>
<pad name="C" x="-2.54" y="0" drill="2.4" diameter="3.7" shape="square"/>
<text x="2.159" y="2.54" size="1.016" layer="51" ratio="15">L</text>
<text x="-2.921" y="2.54" size="1.016" layer="51" ratio="15">S</text>
</package>
<package name="FKIT-LED-1206">
<wire x1="1.55" y1="-0.75" x2="-1.55" y2="-0.75" width="0.1016" layer="51"/>
<wire x1="-1.55" y1="-0.75" x2="-1.55" y2="0.75" width="0.1016" layer="51"/>
<wire x1="-1.55" y1="0.75" x2="1.55" y2="0.75" width="0.1016" layer="51"/>
<wire x1="1.55" y1="0.75" x2="1.55" y2="-0.75" width="0.1016" layer="51"/>
<wire x1="-0.55" y1="-0.5" x2="0.55" y2="-0.5" width="0.1016" layer="21" curve="95.452622"/>
<wire x1="-0.55" y1="0.5" x2="-0.55" y2="-0.5" width="0.1016" layer="51" curve="84.547378"/>
<wire x1="0.55" y1="0.5" x2="-0.55" y2="0.5" width="0.1016" layer="21" curve="95.452622"/>
<wire x1="0.55" y1="-0.5" x2="0.55" y2="0.5" width="0.1016" layer="51" curve="84.547378"/>
<smd name="A" x="-1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
<smd name="C" x="1.422" y="0" dx="1.6" dy="1.803" layer="1"/>
<text x="-1.27" y="1.27" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-0.1" y1="-0.1" x2="0.1" y2="0.1" layer="21"/>
<rectangle x1="0.45" y1="-0.7" x2="0.8" y2="-0.45" layer="51"/>
<rectangle x1="0.8" y1="-0.7" x2="0.9" y2="0.5" layer="51"/>
<rectangle x1="0.8" y1="0.55" x2="0.9" y2="0.7" layer="51"/>
<rectangle x1="-0.9" y1="-0.7" x2="-0.8" y2="0.5" layer="51"/>
<rectangle x1="-0.9" y1="0.55" x2="-0.8" y2="0.7" layer="51"/>
<rectangle x1="0.45" y1="-0.7" x2="0.6" y2="-0.45" layer="21"/>
</package>
<package name="LED3MM-NS">
<description>&lt;h3&gt;LED 3MM - No Silk&lt;/h3&gt;
3 mm, round</description>
<wire x1="1.5748" y1="-1.27" x2="1.5748" y2="1.27" width="0.254" layer="51"/>
<wire x1="0" y1="2.032" x2="1.561" y2="1.3009" width="0.254" layer="51" curve="-50.193108" cap="flat"/>
<wire x1="-1.7929" y1="0.9562" x2="0" y2="2.032" width="0.254" layer="51" curve="-61.926949" cap="flat"/>
<wire x1="0" y1="-2.032" x2="1.5512" y2="-1.3126" width="0.254" layer="51" curve="49.763022" cap="flat"/>
<wire x1="-1.7643" y1="-1.0082" x2="0" y2="-2.032" width="0.254" layer="51" curve="60.255215" cap="flat"/>
<wire x1="-2.032" y1="0" x2="-1.7891" y2="0.9634" width="0.254" layer="51" curve="-28.301701" cap="flat"/>
<wire x1="-2.032" y1="0" x2="-1.7306" y2="-1.065" width="0.254" layer="51" curve="31.60822" cap="flat"/>
<wire x1="1.5748" y1="1.2954" x2="1.5748" y2="0.7874" width="0.254" layer="51"/>
<wire x1="1.5748" y1="-1.2954" x2="1.5748" y2="-0.8382" width="0.254" layer="51"/>
<pad name="A" x="-1.27" y="0" drill="0.8128"/>
<pad name="K" x="1.27" y="0" drill="0.8128"/>
<text x="1.905" y="0.381" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="1.905" y="-1.651" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="LED5MM-KIT">
<description>&lt;h3&gt;LED5MM-KIT&lt;/h3&gt;
5MM Through-hole LED&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-1.905" x2="2.54" y2="1.905" width="0.254" layer="21" curve="-286.260205" cap="flat"/>
<wire x1="-1.143" y1="0" x2="0" y2="1.143" width="0.1524" layer="51" curve="-90" cap="flat"/>
<wire x1="0" y1="-1.143" x2="1.143" y2="0" width="0.1524" layer="51" curve="90" cap="flat"/>
<wire x1="-1.651" y1="0" x2="0" y2="1.651" width="0.1524" layer="51" curve="-90" cap="flat"/>
<wire x1="0" y1="-1.651" x2="1.651" y2="0" width="0.1524" layer="51" curve="90" cap="flat"/>
<wire x1="-2.159" y1="0" x2="0" y2="2.159" width="0.1524" layer="51" curve="-90" cap="flat"/>
<wire x1="0" y1="-2.159" x2="2.159" y2="0" width="0.1524" layer="51" curve="90" cap="flat"/>
<circle x="0" y="0" radius="2.54" width="0.1524" layer="21"/>
<pad name="A" x="-1.27" y="0" drill="0.8128" diameter="1.8796" stop="no"/>
<pad name="K" x="1.27" y="0" drill="0.8128" diameter="1.8796" stop="no"/>
<text x="3.175" y="0.5334" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="3.2004" y="-1.8034" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<polygon width="0.127" layer="30">
<vertex x="-1.2675" y="-0.9525" curve="-90"/>
<vertex x="-2.2224" y="-0.0228" curve="-90.011749"/>
<vertex x="-1.27" y="0.9526" curve="-90"/>
<vertex x="-0.32" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-1.27" y="-0.4445" curve="-90.012891"/>
<vertex x="-1.7145" y="-0.0203" curve="-90"/>
<vertex x="-1.27" y="0.447" curve="-90"/>
<vertex x="-0.8281" y="-0.0101" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="1.2725" y="-0.9525" curve="-90"/>
<vertex x="0.3176" y="-0.0228" curve="-90.011749"/>
<vertex x="1.27" y="0.9526" curve="-90"/>
<vertex x="2.22" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="1.27" y="-0.4445" curve="-90.012891"/>
<vertex x="0.8255" y="-0.0203" curve="-90"/>
<vertex x="1.27" y="0.447" curve="-90"/>
<vertex x="1.7119" y="-0.0101" curve="-90.012967"/>
</polygon>
</package>
<package name="LED-TRICOLOR-SMD">
<wire x1="-1.3" y1="1.3" x2="-1.6" y2="1.3" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="1.3" x2="-1.6" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.3" x2="-1.3" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="1.3" y1="1.3" x2="1.6" y2="1.3" width="0.2032" layer="21"/>
<wire x1="1.6" y1="1.3" x2="1.6" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.3" x2="1.3" y2="-1.3" width="0.2032" layer="21"/>
<wire x1="0" y1="-1.6" x2="0" y2="-1.8" width="0.2032" layer="21"/>
<smd name="G" x="-0.7" y="1.5" dx="0.7" dy="1.2" layer="1"/>
<smd name="B" x="0.7" y="1.5" dx="0.7" dy="1.2" layer="1"/>
<smd name="R" x="-0.7" y="-1.5" dx="0.7" dy="1.2" layer="1"/>
<smd name="A" x="0.7" y="-1.5" dx="0.7" dy="1.2" layer="1"/>
<text x="-1.016" y="0.127" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="LED_BARGAPH_10">
<description>&lt;b&gt;Dual In Line Package&lt;/b&gt;</description>
<wire x1="12.7" y1="5.08" x2="-12.7" y2="5.08" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-5.08" x2="12.7" y2="-5.08" width="0.2032" layer="21"/>
<wire x1="12.7" y1="5.08" x2="12.7" y2="-5.08" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="-5.08" x2="-12.7" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="-12.7" y1="-2.54" x2="-12.7" y2="5.08" width="0.2032" layer="21"/>
<wire x1="0" y1="-2.2225" x2="0" y2="2.2225" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="0.635" x2="0.635" y2="0.635" width="0.2032" layer="21"/>
<pad name="1" x="-11.43" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="2" x="-8.89" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="7" x="3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="8" x="6.35" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="3" x="-6.35" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="4" x="-3.81" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="6" x="1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="5" x="-1.27" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="9" x="8.89" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="10" x="11.43" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="11" x="11.43" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="12" x="8.89" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="13" x="6.35" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="14" x="3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="15" x="1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="16" x="-1.27" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="17" x="-3.81" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="18" x="-6.35" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="19" x="-8.89" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="20" x="-11.43" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<text x="-10.16" y="-0.635" size="1.27" layer="25">&gt;NAME</text>
<text x="5.08" y="-0.635" size="1.27" layer="27">&gt;VALUE</text>
<polygon width="0.127" layer="21">
<vertex x="-0.635" y="-0.3175"/>
<vertex x="0.635" y="-0.3175"/>
<vertex x="0" y="0.635"/>
</polygon>
</package>
<package name="LED_PIRANHA_5MM">
<wire x1="-3.81" y1="-3.81" x2="3.69" y2="-3.81" width="0.127" layer="21"/>
<wire x1="3.69" y1="-3.81" x2="3.69" y2="3.69" width="0.127" layer="21"/>
<wire x1="3.69" y1="3.69" x2="-2.81" y2="3.69" width="0.127" layer="21"/>
<wire x1="-2.81" y1="3.69" x2="-3.81" y2="2.69" width="0.127" layer="21"/>
<wire x1="-3.81" y1="2.69" x2="-3.81" y2="-3.81" width="0.127" layer="21"/>
<pad name="-" x="-2.684" y="-2.684" drill="0.9"/>
<pad name="R" x="2.579" y="-2.696" drill="0.9"/>
<pad name="B" x="-2.688" y="2.574" drill="0.9"/>
<pad name="G" x="2.575" y="2.562" drill="0.9"/>
<text x="-1.65" y="2.323" size="0.6096" layer="25">B</text>
<text x="0.962" y="2.298" size="0.6096" layer="25">G</text>
<text x="1.037" y="-3.131" size="0.6096" layer="25">R</text>
<text x="-1.524" y="-3.031" size="0.6096" layer="25">-</text>
<text x="-1.989" y="0.209" size="0.4064" layer="25">PIRANHA 5MM</text>
<text x="-1.278" y="-0.44" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="LED_RING">
<description>&lt;h3&gt;LED Ring&lt;/h3&gt;
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/LED/Top-Up%20LED%20Ring%20LED-CCL-A.pdf&lt;br&gt;</description>
<wire x1="-20" y1="-13" x2="-20" y2="13" width="0.1778" layer="21"/>
<wire x1="-20" y1="13" x2="-11.7" y2="13" width="0.1778" layer="51"/>
<wire x1="-20" y1="-13" x2="-11.7" y2="-13" width="0.1778" layer="51"/>
<wire x1="20" y1="-13" x2="11.7" y2="-13" width="0.1778" layer="51"/>
<wire x1="20" y1="-13" x2="20" y2="13" width="0.1778" layer="21"/>
<wire x1="20" y1="13" x2="11.7" y2="13" width="0.1778" layer="51"/>
<circle x="0" y="0" radius="17.5" width="0.1778" layer="21"/>
<circle x="0" y="0" radius="11" width="0.127" layer="21"/>
<pad name="16" x="-13.2" y="12.75" drill="1.2" diameter="2"/>
<pad name="15" x="-14.5" y="15.05" drill="1.2" diameter="2"/>
<pad name="14" x="-15.8" y="12.75" drill="1.2" diameter="2"/>
<pad name="13" x="-17.1" y="15.05" drill="1.2" diameter="2"/>
<pad name="COM3" x="-18.4" y="12.75" drill="1.2" diameter="2"/>
<pad name="COM0" x="18.4" y="12.75" drill="1.2" diameter="2"/>
<pad name="4" x="17.1" y="15.05" drill="1.2" diameter="2"/>
<pad name="3" x="15.8" y="12.75" drill="1.2" diameter="2"/>
<pad name="2" x="14.5" y="15.05" drill="1.2" diameter="2"/>
<pad name="1" x="13.2" y="12.75" drill="1.2" diameter="2"/>
<pad name="8" x="13.2" y="-12.75" drill="1.2" diameter="2"/>
<pad name="7" x="14.5" y="-15.05" drill="1.2" diameter="2"/>
<pad name="6" x="15.8" y="-12.75" drill="1.2" diameter="2"/>
<pad name="5" x="17.1" y="-15.05" drill="1.2" diameter="2"/>
<pad name="COM1" x="18.4" y="-12.75" drill="1.2" diameter="2"/>
<pad name="COM2" x="-18.4" y="-12.75" drill="1.2" diameter="2"/>
<pad name="12" x="-17.1" y="-15.05" drill="1.2" diameter="2"/>
<pad name="11" x="-15.8" y="-12.75" drill="1.2" diameter="2"/>
<pad name="10" x="-14.5" y="-15.05" drill="1.2" diameter="2"/>
<pad name="9" x="-13.2" y="-12.75" drill="1.2" diameter="2"/>
<text x="-5.08" y="6.89" size="1.778" layer="25">&gt;Name</text>
<text x="-5.08" y="-8.16" size="1.778" layer="27">&gt;Value</text>
<hole x="0" y="14" drill="4"/>
<hole x="0" y="-14" drill="3"/>
</package>
<package name="LIGHTPIPE-7511">
<wire x1="-2.2352" y1="-4.5974" x2="2.2352" y2="-4.5974" width="0.127" layer="21"/>
<wire x1="-2.2352" y1="-4.5974" x2="-2.2352" y2="-2.3114" width="0.127" layer="21"/>
<wire x1="-2.2352" y1="-2.3114" x2="-2.2352" y2="4.6228" width="0.127" layer="21"/>
<wire x1="-1.5748" y1="7.0358" x2="1.5748" y2="7.0358" width="0.127" layer="21"/>
<wire x1="2.2352" y1="4.6228" x2="2.2352" y2="-2.3114" width="0.127" layer="21"/>
<wire x1="2.2352" y1="-2.3114" x2="2.2352" y2="-4.5974" width="0.127" layer="21"/>
<wire x1="-2.2352" y1="-2.3114" x2="2.2352" y2="-2.3114" width="0.127" layer="21"/>
<wire x1="-1.5748" y1="7.0358" x2="-2.2352" y2="4.6228" width="0.127" layer="21"/>
<wire x1="1.5748" y1="7.0358" x2="2.2352" y2="4.6228" width="0.127" layer="21"/>
<hole x="0" y="0" drill="1.6764"/>
<hole x="0" y="3.175" drill="1.6764"/>
</package>
<package name="LTE-302">
<wire x1="2.159" y1="0.762" x2="2.159" y2="-0.762" width="0.127" layer="21"/>
<wire x1="2.159" y1="-0.762" x2="0.762" y2="-0.762" width="0.127" layer="21"/>
<wire x1="0.762" y1="-0.762" x2="0.381" y2="-0.762" width="0.127" layer="21"/>
<wire x1="0.381" y1="-0.762" x2="-0.381" y2="-0.762" width="0.127" layer="21"/>
<wire x1="-0.381" y1="-0.762" x2="-0.762" y2="-0.762" width="0.127" layer="21"/>
<wire x1="-0.762" y1="-0.762" x2="-2.159" y2="-0.762" width="0.127" layer="21"/>
<wire x1="-2.159" y1="-0.762" x2="-2.159" y2="0.762" width="0.127" layer="21"/>
<wire x1="-2.159" y1="0.762" x2="-0.381" y2="0.762" width="0.127" layer="21"/>
<wire x1="-0.381" y1="0.762" x2="0.381" y2="0.762" width="0.127" layer="21"/>
<wire x1="0.381" y1="0.762" x2="2.159" y2="0.762" width="0.127" layer="21"/>
<wire x1="-0.381" y1="0" x2="0.381" y2="0.762" width="0.127" layer="21"/>
<wire x1="0.381" y1="0.762" x2="0.381" y2="-0.762" width="0.127" layer="21"/>
<wire x1="0.381" y1="-0.762" x2="-0.381" y2="0" width="0.127" layer="21"/>
<wire x1="-0.381" y1="0" x2="-0.381" y2="0.762" width="0.127" layer="21"/>
<wire x1="-0.381" y1="0" x2="-0.381" y2="-0.762" width="0.127" layer="21"/>
<wire x1="0.762" y1="-0.762" x2="-0.762" y2="-0.762" width="0.127" layer="21" curve="-180"/>
<pad name="A" x="1.27" y="0" drill="0.8"/>
<pad name="C" x="-1.27" y="0" drill="0.8"/>
</package>
<package name="LUXEON">
<wire x1="-3.7" y1="1.5" x2="-3.7" y2="-1.5" width="0.2032" layer="21"/>
<wire x1="3.7" y1="1.5" x2="3.7" y2="-1.5" width="0.2032" layer="21"/>
<wire x1="0" y1="4" x2="3.7" y2="1.5" width="0.2032" layer="21" curve="-67.861525"/>
<wire x1="0" y1="4" x2="-3.7" y2="1.5" width="0.2032" layer="21" curve="67.861525"/>
<wire x1="0" y1="-4" x2="3.7" y2="-1.5" width="0.2032" layer="21" curve="67.859595"/>
<wire x1="0" y1="-4" x2="-3.7" y2="-1.5" width="0.2032" layer="21" curve="-67.859595"/>
<circle x="-4.7" y="1" radius="0.4123" width="0.2032" layer="21"/>
<smd name="A" x="-6.1" y="-1.1" dx="2.85" dy="1.8" layer="1" roundness="25"/>
<smd name="C" x="6.1" y="1.1" dx="2.85" dy="1.8" layer="1" roundness="25"/>
<smd name="S" x="0" y="0" dx="5.2" dy="6" layer="1" roundness="50"/>
<text x="-6.35" y="2.54" size="1.27" layer="51">+</text>
<text x="5.08" y="-2.54" size="1.27" layer="51">-</text>
</package>
<package name="LUXEON-REBEL">
<smd name="ANODE" x="-1.39" y="2.63" dx="1.91" dy="2.03" layer="1" roundness="50"/>
<smd name="CATHODE" x="1.39" y="2.63" dx="1.91" dy="2.03" layer="1" roundness="50"/>
<smd name="P$3" x="0" y="-1.42" dx="4.68" dy="3.03" layer="1" roundness="50"/>
<text x="-2.54" y="3.175" size="0.508" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.175" size="0.508" layer="27">&gt;VALUE</text>
</package>
<package name="LED-RGB-THRU">
<wire x1="2.5" y1="-1" x2="2.5" y2="1" width="0.127" layer="21"/>
<wire x1="2.5" y1="-1" x2="2.5" y2="1" width="0.127" layer="21" curve="-316.397181"/>
<pad name="2" x="0.635" y="0" drill="0.762" diameter="0.889" shape="long" rot="R90"/>
<pad name="1" x="1.905" y="0" drill="0.762" diameter="0.889" shape="long" rot="R90"/>
<pad name="3" x="-0.635" y="0" drill="0.762" diameter="0.889" shape="long" rot="R90"/>
<pad name="4" x="-1.905" y="0" drill="0.762" diameter="0.889" shape="long" rot="R90"/>
</package>
<package name="LED-TRICOLOR-5050">
<description>&lt;H3&gt;5050 SMD RGB LED&lt;/h3&gt;
5.0mm x 5.0mm, 2.6mm thickness</description>
<circle x="-0.7" y="2" radius="0.2236" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="2" width="0.127" layer="51"/>
<wire x1="-2.5" y1="-2.5" x2="-2.5" y2="2" width="0.127" layer="51"/>
<wire x1="-1.8" y1="2.5" x2="2.5" y2="2.5" width="0.127" layer="51"/>
<wire x1="2.5" y1="2.5" x2="2.5" y2="-2.5" width="0.127" layer="51"/>
<wire x1="2.5" y1="-2.5" x2="-2.5" y2="-2.5" width="0.127" layer="51"/>
<wire x1="-1" y1="2.5" x2="1" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-1" y1="-2.5" x2="1" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="0.7" x2="-2.5" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-0.9" x2="-2.5" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="2.5" y1="-0.9" x2="2.5" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="2.5" y1="0.7" x2="2.5" y2="0.9" width="0.2032" layer="21"/>
<wire x1="0.254" y1="-0.127" x2="0.254" y2="0.127" width="0.2032" layer="21"/>
<wire x1="0.254" y1="0.127" x2="0.508" y2="0.127" width="0.2032" layer="21"/>
<wire x1="0.508" y1="0.127" x2="0.508" y2="-0.127" width="0.2032" layer="21"/>
<wire x1="0.508" y1="-0.127" x2="0.254" y2="-0.127" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="2" x2="-1.8" y2="2.5" width="0.127" layer="51"/>
<rectangle x1="1.7" y1="-0.45" x2="2.7" y2="0.45" layer="51"/>
<rectangle x1="1.7" y1="1.15" x2="2.7" y2="2.05" layer="51"/>
<rectangle x1="1.7" y1="-2.05" x2="2.7" y2="-1.15" layer="51"/>
<rectangle x1="-2.7" y1="1.15" x2="-1.7" y2="2.05" layer="51" rot="R180"/>
<rectangle x1="-2.7" y1="-0.45" x2="-1.7" y2="0.45" layer="51" rot="R180"/>
<rectangle x1="-2.7" y1="-2.05" x2="-1.7" y2="-1.15" layer="51" rot="R180"/>
<smd name="1" x="-2.4" y="1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="2" x="-2.4" y="0" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="3" x="-2.4" y="-1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="4" x="2.4" y="-1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="5" x="2.4" y="0" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="6" x="2.4" y="1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<text x="-2.54" y="2.794" size="0.762" layer="25">&gt;Name</text>
<text x="-2.54" y="-3.556" size="0.762" layer="27">&gt;Value</text>
</package>
<package name="LED-TRICOLOR-5050-IC">
<circle x="-0.7" y="2" radius="0.2236" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="2" width="0.127" layer="51"/>
<wire x1="-2.5" y1="-2.5" x2="-2.5" y2="2" width="0.127" layer="51"/>
<wire x1="-1.8" y1="2.5" x2="2.5" y2="2.5" width="0.127" layer="51"/>
<wire x1="2.5" y1="2.5" x2="2.5" y2="-2.5" width="0.127" layer="51"/>
<wire x1="2.5" y1="-2.5" x2="-2.5" y2="-2.5" width="0.127" layer="51"/>
<wire x1="-1" y1="2.5" x2="1" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-1" y1="-2.5" x2="1" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="0.7" x2="-2.5" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-0.9" x2="-2.5" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="2.5" y1="-0.9" x2="2.5" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="2.5" y1="0.7" x2="2.5" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-1.016" y1="-0.381" x2="-1.016" y2="0.381" width="0.2032" layer="21"/>
<wire x1="-1.016" y1="0.381" x2="-0.127" y2="0.381" width="0.2032" layer="21"/>
<wire x1="-0.127" y1="0.381" x2="-0.127" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="-0.127" y1="-0.381" x2="-1.016" y2="-0.381" width="0.2032" layer="21"/>
<wire x1="0.254" y1="-0.127" x2="0.254" y2="0.127" width="0.2032" layer="21"/>
<wire x1="0.254" y1="0.127" x2="0.508" y2="0.127" width="0.2032" layer="21"/>
<wire x1="0.508" y1="0.127" x2="0.508" y2="-0.127" width="0.2032" layer="21"/>
<wire x1="0.508" y1="-0.127" x2="0.254" y2="-0.127" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="2" x2="-1.8" y2="2.5" width="0.127" layer="51"/>
<rectangle x1="1.7" y1="-0.45" x2="2.7" y2="0.45" layer="51"/>
<rectangle x1="1.7" y1="1.15" x2="2.7" y2="2.05" layer="51"/>
<rectangle x1="1.7" y1="-2.05" x2="2.7" y2="-1.15" layer="51"/>
<rectangle x1="-2.7" y1="1.15" x2="-1.7" y2="2.05" layer="51" rot="R180"/>
<rectangle x1="-2.7" y1="-0.45" x2="-1.7" y2="0.45" layer="51" rot="R180"/>
<rectangle x1="-2.7" y1="-2.05" x2="-1.7" y2="-1.15" layer="51" rot="R180"/>
<smd name="1" x="-2.4" y="1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="2" x="-2.4" y="0" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="3" x="-2.4" y="-1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="4" x="2.4" y="-1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="5" x="2.4" y="0" dx="2" dy="1.1" layer="1" roundness="100"/>
<smd name="6" x="2.4" y="1.7" dx="2" dy="1.1" layer="1" roundness="100"/>
<text x="-2.54" y="2.794" size="0.762" layer="25">&gt;Name</text>
<text x="-2.54" y="-3.556" size="0.762" layer="27">&gt;Value</text>
</package>
<package name="LED-1206-BOTTOM">
<wire x1="-2" y1="0.4" x2="-2" y2="-0.4" width="0.127" layer="49"/>
<wire x1="-2.4" y1="0" x2="-1.6" y2="0" width="0.127" layer="49"/>
<wire x1="1.6" y1="0" x2="2.4" y2="0" width="0.127" layer="49"/>
<wire x1="-1.27" y1="0" x2="-0.381" y2="0" width="0.127" layer="49"/>
<wire x1="-0.381" y1="0" x2="-0.381" y2="0.635" width="0.127" layer="49"/>
<wire x1="-0.381" y1="0.635" x2="0.254" y2="0" width="0.127" layer="49"/>
<wire x1="0.254" y1="0" x2="-0.381" y2="-0.635" width="0.127" layer="49"/>
<wire x1="-0.381" y1="-0.635" x2="-0.381" y2="0" width="0.127" layer="49"/>
<wire x1="0.254" y1="0" x2="0.254" y2="0.635" width="0.127" layer="49"/>
<wire x1="0.254" y1="0" x2="0.254" y2="-0.635" width="0.127" layer="49"/>
<wire x1="0.254" y1="0" x2="1.27" y2="0" width="0.127" layer="49"/>
<rectangle x1="-0.75" y1="-0.75" x2="0.75" y2="0.75" layer="51"/>
<smd name="A" x="-1.8" y="0" dx="1.5" dy="1.6" layer="1"/>
<smd name="C" x="1.8" y="0" dx="1.5" dy="1.6" layer="1"/>
<hole x="0" y="0" drill="2.3"/>
<polygon width="0" layer="51">
<vertex x="1.1" y="-0.5"/>
<vertex x="1.1" y="0.5"/>
<vertex x="1.6" y="0.5"/>
<vertex x="1.6" y="0.25" curve="90"/>
<vertex x="1.4" y="0.05"/>
<vertex x="1.4" y="-0.05" curve="90"/>
<vertex x="1.6" y="-0.25"/>
<vertex x="1.6" y="-0.5"/>
</polygon>
<polygon width="0" layer="51">
<vertex x="-1.1" y="0.5"/>
<vertex x="-1.1" y="-0.5"/>
<vertex x="-1.6" y="-0.5"/>
<vertex x="-1.6" y="-0.25" curve="90"/>
<vertex x="-1.4" y="-0.05"/>
<vertex x="-1.4" y="0.05" curve="90"/>
<vertex x="-1.6" y="0.25"/>
<vertex x="-1.6" y="0.5"/>
</polygon>
</package>
<package name="HSMC-C265">
<wire x1="-1.5" y1="1" x2="-2.9" y2="1" width="0.2032" layer="21"/>
<wire x1="-2.9" y1="1" x2="-2.9" y2="-1" width="0.2032" layer="21"/>
<wire x1="-2.9" y1="-1" x2="-1.5" y2="-1" width="0.2032" layer="21"/>
<wire x1="1.5" y1="1" x2="2.9" y2="1" width="0.2032" layer="21"/>
<wire x1="2.9" y1="1" x2="2.9" y2="-1" width="0.2032" layer="21"/>
<wire x1="2.9" y1="-1" x2="1.5" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.3" y1="-1.51" x2="0.3" y2="-2.2" width="0.2032" layer="21"/>
<wire x1="0.3" y1="-2.2" x2="0.3" y2="-2.21" width="0.2032" layer="21"/>
<wire x1="0.3" y1="-2.21" x2="0.3" y2="-2.91" width="0.2032" layer="21"/>
<wire x1="0.3" y1="-2.21" x2="-0.3" y2="-1.61" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="-1.61" x2="-0.3" y2="-2.2" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="-2.2" x2="-0.3" y2="-2.81" width="0.2032" layer="21"/>
<wire x1="-0.3" y1="-2.81" x2="0.3" y2="-2.21" width="0.2032" layer="21"/>
<smd name="A" x="-1.85" y="0" dx="1.4" dy="1.25" layer="1"/>
<smd name="C" x="1.85" y="0" dx="1.4" dy="1.25" layer="1"/>
<text x="-1" y="2" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1" y="1.4" size="0.4064" layer="27">&gt;VALUE</text>
<hole x="0" y="0" drill="2.2"/>
<wire x1="-1.5" y1="-2.2" x2="-0.3" y2="-2.2" width="0.2032" layer="21"/>
<wire x1="0.3" y1="-2.2" x2="1.5" y2="-2.2" width="0.2032" layer="21"/>
</package>
</packages>
<symbols>
<symbol name="APA3010SF4C">
<wire x1="-2.54" y1="2.54" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="-2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="2.54" width="0.254" layer="94"/>
<text x="-7.62" y="-5.08" size="1.778" layer="94">&gt;NAME</text>
<text x="-7.62" y="-7.62" size="1.778" layer="94">&gt;VALUE</text>
<pin name="1" x="-7.62" y="0" visible="off" length="middle"/>
<pin name="2" x="7.62" y="0" visible="off" length="middle" rot="R180"/>
</symbol>
<symbol name="LED">
<wire x1="1.27" y1="0" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-2.032" y1="-0.762" x2="-3.429" y2="-2.159" width="0.1524" layer="94"/>
<wire x1="-1.905" y1="-1.905" x2="-3.302" y2="-3.302" width="0.1524" layer="94"/>
<text x="3.556" y="-4.572" size="1.778" layer="95" rot="R90">&gt;NAME</text>
<text x="5.715" y="-4.572" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
<pin name="C" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
<pin name="A" x="0" y="2.54" visible="off" length="short" direction="pas" rot="R270"/>
<polygon width="0.1524" layer="94">
<vertex x="-3.429" y="-2.159"/>
<vertex x="-3.048" y="-1.27"/>
<vertex x="-2.54" y="-1.778"/>
</polygon>
<polygon width="0.1524" layer="94">
<vertex x="-3.302" y="-3.302"/>
<vertex x="-2.921" y="-2.413"/>
<vertex x="-2.413" y="-2.921"/>
</polygon>
</symbol>
<symbol name="LED-TRICOLORSMD">
<wire x1="10.16" y1="2.54" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="-7.62" y2="2.54" width="0.254" layer="94"/>
<wire x1="-7.62" y1="2.54" x2="10.16" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.81" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="-1.27" width="0.254" layer="94"/>
<wire x1="2.54" y1="-1.27" x2="1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="2.54" y2="-3.81" width="0.254" layer="94"/>
<wire x1="1.27" y1="-3.81" x2="1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="3.81" y2="-2.54" width="0.254" layer="94"/>
<text x="-7.62" y="3.302" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-10.16" size="1.778" layer="95">&gt;VALUE</text>
<pin name="GRN" x="-10.16" y="-5.08" visible="pin" length="short"/>
<pin name="BLU" x="-10.16" y="-2.54" visible="pin" length="short"/>
<pin name="A" x="12.7" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="RED" x="-10.16" y="0" visible="pin" length="short"/>
</symbol>
<symbol name="LED_BARGRAPH_10">
<wire x1="0" y1="1.27" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="0" y2="-1.27" width="0.254" layer="94"/>
<wire x1="2.54" y1="1.27" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-1.27" width="0.254" layer="94"/>
<wire x1="0" y1="1.27" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-1.27" width="0.254" layer="94"/>
<wire x1="3.81" y1="0.254" x2="5.207" y2="1.651" width="0.1524" layer="94"/>
<wire x1="2.921" y1="0.635" x2="4.318" y2="2.032" width="0.1524" layer="94"/>
<text x="-6.35" y="2.286" size="1.778" layer="95" rot="MR180">&gt;NAME</text>
<text x="-6.35" y="-0.381" size="1.778" layer="96" rot="MR180">&gt;VALUE</text>
<pin name="C" x="5.08" y="0" visible="off" length="short" direction="pas" rot="R180"/>
<pin name="A" x="-2.54" y="0" visible="off" length="short" direction="pas"/>
<polygon width="0.1524" layer="94">
<vertex x="5.207" y="1.651"/>
<vertex x="4.826" y="0.762"/>
<vertex x="4.318" y="1.27"/>
</polygon>
<polygon width="0.1524" layer="94">
<vertex x="4.318" y="2.032"/>
<vertex x="3.937" y="1.143"/>
<vertex x="3.429" y="1.651"/>
</polygon>
</symbol>
<symbol name="LED-TRICOLOR-THROUGHHOLE">
<wire x1="10.16" y1="5.08" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="1.27" y1="1.27" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94"/>
<wire x1="1.27" y1="-1.27" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="1.27" y2="1.27" width="0.254" layer="94"/>
<wire x1="2.54" y1="1.27" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-1.27" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="3.81" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<text x="-7.62" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-7.62" size="1.778" layer="95">&gt;VALUE</text>
<pin name="GRN" x="-10.16" y="-2.54" visible="pin" length="short"/>
<pin name="BLU" x="-10.16" y="0" visible="pin" length="short"/>
<pin name="C" x="12.7" y="0" visible="pin" length="short" rot="R180"/>
<pin name="RED" x="-10.16" y="2.54" visible="pin" length="short"/>
</symbol>
<symbol name="LED_RING">
<wire x1="-9.9314" y1="3.1242" x2="-7.6708" y2="1.6256" width="0.254" layer="94"/>
<wire x1="-7.6708" y1="1.6256" x2="-10.3124" y2="1.0414" width="0.254" layer="94"/>
<wire x1="-7.493" y1="2.667" x2="-7.6708" y2="1.6256" width="0.254" layer="94"/>
<wire x1="-7.6708" y1="1.6256" x2="-7.874" y2="0.5588" width="0.254" layer="94"/>
<wire x1="-9.9314" y1="3.1242" x2="-10.3124" y2="1.0414" width="0.254" layer="94"/>
<wire x1="-7.6708" y1="1.6256" x2="-5.7658" y2="1.2446" width="0.1524" layer="94"/>
<wire x1="-8.1026" y1="6.5024" x2="-6.5786" y2="4.2672" width="0.254" layer="94"/>
<wire x1="-6.5786" y1="4.2672" x2="-9.2202" y2="4.699" width="0.254" layer="94"/>
<wire x1="-6.0198" y1="5.207" x2="-6.5786" y2="4.2672" width="0.254" layer="94"/>
<wire x1="-6.5786" y1="4.2672" x2="-7.112" y2="3.4036" width="0.254" layer="94"/>
<wire x1="-8.1026" y1="6.5024" x2="-9.2202" y2="4.699" width="0.254" layer="94"/>
<wire x1="-6.5786" y1="4.2672" x2="-4.953" y2="3.2512" width="0.1524" layer="94"/>
<wire x1="-5.1308" y1="9.017" x2="-4.572" y2="6.35" width="0.254" layer="94"/>
<wire x1="-4.572" y1="6.35" x2="-6.8834" y2="7.7216" width="0.254" layer="94"/>
<wire x1="-3.6576" y1="7.0104" x2="-4.572" y2="6.35" width="0.254" layer="94"/>
<wire x1="-5.1308" y1="9.017" x2="-6.8834" y2="7.7216" width="0.254" layer="94"/>
<wire x1="-4.572" y1="6.35" x2="-3.3782" y2="4.826" width="0.1524" layer="94"/>
<wire x1="-0.9652" y1="10.3886" x2="-1.4986" y2="7.6962" width="0.254" layer="94"/>
<wire x1="-1.4986" y1="7.6962" x2="-3.048" y2="9.9568" width="0.254" layer="94"/>
<wire x1="-0.4064" y1="7.9248" x2="-1.4986" y2="7.6962" width="0.254" layer="94"/>
<wire x1="-1.4986" y1="7.6962" x2="-2.54" y2="7.493" width="0.254" layer="94"/>
<wire x1="-0.9652" y1="10.3886" x2="-3.048" y2="9.9568" width="0.254" layer="94"/>
<wire x1="-1.4986" y1="7.6962" x2="-1.0668" y2="5.7658" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="6.35" x2="-5.4102" y2="5.7404" width="0.254" layer="94"/>
<wire x1="-9.9314" y1="-3.1242" x2="-7.6708" y2="-1.6256" width="0.254" layer="94"/>
<wire x1="-7.6708" y1="-1.6256" x2="-10.3124" y2="-1.0414" width="0.254" layer="94"/>
<wire x1="-7.493" y1="-2.667" x2="-7.6708" y2="-1.6256" width="0.254" layer="94"/>
<wire x1="-7.6708" y1="-1.6256" x2="-7.874" y2="-0.5588" width="0.254" layer="94"/>
<wire x1="-9.9314" y1="-3.1242" x2="-10.3124" y2="-1.0414" width="0.254" layer="94"/>
<wire x1="-7.6708" y1="-1.6256" x2="-5.7658" y2="-1.2446" width="0.1524" layer="94"/>
<wire x1="-8.1026" y1="-6.5024" x2="-6.5786" y2="-4.2672" width="0.254" layer="94"/>
<wire x1="-6.5786" y1="-4.2672" x2="-9.2202" y2="-4.699" width="0.254" layer="94"/>
<wire x1="-6.0198" y1="-5.207" x2="-6.5786" y2="-4.2672" width="0.254" layer="94"/>
<wire x1="-6.5786" y1="-4.2672" x2="-7.112" y2="-3.4036" width="0.254" layer="94"/>
<wire x1="-8.1026" y1="-6.5024" x2="-9.2202" y2="-4.699" width="0.254" layer="94"/>
<wire x1="-6.5786" y1="-4.2672" x2="-4.953" y2="-3.2512" width="0.1524" layer="94"/>
<wire x1="-5.1308" y1="-9.017" x2="-4.572" y2="-6.35" width="0.254" layer="94"/>
<wire x1="-4.572" y1="-6.35" x2="-6.8834" y2="-7.7216" width="0.254" layer="94"/>
<wire x1="-3.6576" y1="-7.0104" x2="-4.572" y2="-6.35" width="0.254" layer="94"/>
<wire x1="-5.1308" y1="-9.017" x2="-6.8834" y2="-7.7216" width="0.254" layer="94"/>
<wire x1="-4.572" y1="-6.35" x2="-3.3782" y2="-4.826" width="0.1524" layer="94"/>
<wire x1="-0.9652" y1="-10.3886" x2="-1.4986" y2="-7.6962" width="0.254" layer="94"/>
<wire x1="-1.4986" y1="-7.6962" x2="-3.048" y2="-9.9568" width="0.254" layer="94"/>
<wire x1="-0.4064" y1="-7.9248" x2="-1.4986" y2="-7.6962" width="0.254" layer="94"/>
<wire x1="-1.4986" y1="-7.6962" x2="-2.54" y2="-7.493" width="0.254" layer="94"/>
<wire x1="-0.9652" y1="-10.3886" x2="-3.048" y2="-9.9568" width="0.254" layer="94"/>
<wire x1="-1.4986" y1="-7.6962" x2="-1.0668" y2="-5.7658" width="0.1524" layer="94"/>
<wire x1="-4.572" y1="-6.35" x2="-5.4102" y2="-5.7404" width="0.254" layer="94"/>
<wire x1="-10.1346" y1="-2.0828" x2="-12.7" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-10.1346" y1="2.0828" x2="-12.7" y2="2.54" width="0.1524" layer="94"/>
<wire x1="-8.6868" y1="5.588" x2="-12.065" y2="7.62" width="0.1524" layer="94"/>
<wire x1="-6.0452" y1="8.3566" x2="-7.4676" y2="10.16" width="0.1524" layer="94"/>
<wire x1="-12.065" y1="7.62" x2="-12.7" y2="7.62" width="0.1524" layer="94"/>
<wire x1="-1.9558" y1="10.1854" x2="-2.5146" y2="12.7" width="0.1524" layer="94"/>
<wire x1="-2.5146" y1="12.7" x2="-12.7" y2="12.7" width="0.1524" layer="94"/>
<wire x1="-7.4676" y1="10.16" x2="-12.7" y2="10.16" width="0.1524" layer="94"/>
<wire x1="-8.6868" y1="-5.588" x2="-12.065" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="-12.065" y1="-7.62" x2="-12.7" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="-6.0452" y1="-8.3566" x2="-7.4676" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="-7.4676" y1="-10.16" x2="-12.7" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="-1.9558" y1="-10.1854" x2="-2.5146" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="-2.5146" y1="-12.7" x2="-12.7" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="0" y1="-5.969" x2="0" y2="-15.24" width="0.1524" layer="94"/>
<wire x1="0" y1="-15.24" x2="-12.7" y2="-15.24" width="0.1524" layer="94"/>
<wire x1="0" y1="5.969" x2="0" y2="15.24" width="0.1524" layer="94"/>
<wire x1="0" y1="15.24" x2="-12.7" y2="15.24" width="0.1524" layer="94"/>
<wire x1="9.9314" y1="3.1242" x2="7.6708" y2="1.6256" width="0.254" layer="94"/>
<wire x1="7.6708" y1="1.6256" x2="10.3124" y2="1.0414" width="0.254" layer="94"/>
<wire x1="7.493" y1="2.667" x2="7.6708" y2="1.6256" width="0.254" layer="94"/>
<wire x1="7.6708" y1="1.6256" x2="7.874" y2="0.5588" width="0.254" layer="94"/>
<wire x1="9.9314" y1="3.1242" x2="10.3124" y2="1.0414" width="0.254" layer="94"/>
<wire x1="7.6708" y1="1.6256" x2="5.7658" y2="1.2446" width="0.1524" layer="94"/>
<wire x1="8.1026" y1="6.5024" x2="6.5786" y2="4.2672" width="0.254" layer="94"/>
<wire x1="6.5786" y1="4.2672" x2="9.2202" y2="4.699" width="0.254" layer="94"/>
<wire x1="6.0198" y1="5.207" x2="6.5786" y2="4.2672" width="0.254" layer="94"/>
<wire x1="6.5786" y1="4.2672" x2="7.112" y2="3.4036" width="0.254" layer="94"/>
<wire x1="8.1026" y1="6.5024" x2="9.2202" y2="4.699" width="0.254" layer="94"/>
<wire x1="6.5786" y1="4.2672" x2="4.953" y2="3.2512" width="0.1524" layer="94"/>
<wire x1="5.1308" y1="9.017" x2="4.572" y2="6.35" width="0.254" layer="94"/>
<wire x1="4.572" y1="6.35" x2="6.8834" y2="7.7216" width="0.254" layer="94"/>
<wire x1="3.6576" y1="7.0104" x2="4.572" y2="6.35" width="0.254" layer="94"/>
<wire x1="5.1308" y1="9.017" x2="6.8834" y2="7.7216" width="0.254" layer="94"/>
<wire x1="4.572" y1="6.35" x2="3.3782" y2="4.826" width="0.1524" layer="94"/>
<wire x1="0.9652" y1="10.3886" x2="1.4986" y2="7.6962" width="0.254" layer="94"/>
<wire x1="1.4986" y1="7.6962" x2="3.048" y2="9.9568" width="0.254" layer="94"/>
<wire x1="0.4064" y1="7.9248" x2="1.4986" y2="7.6962" width="0.254" layer="94"/>
<wire x1="1.4986" y1="7.6962" x2="2.54" y2="7.493" width="0.254" layer="94"/>
<wire x1="0.9652" y1="10.3886" x2="3.048" y2="9.9568" width="0.254" layer="94"/>
<wire x1="1.4986" y1="7.6962" x2="1.0668" y2="5.7658" width="0.1524" layer="94"/>
<wire x1="4.572" y1="6.35" x2="5.4102" y2="5.7404" width="0.254" layer="94"/>
<wire x1="9.9314" y1="-3.1242" x2="7.6708" y2="-1.6256" width="0.254" layer="94"/>
<wire x1="7.6708" y1="-1.6256" x2="10.3124" y2="-1.0414" width="0.254" layer="94"/>
<wire x1="7.493" y1="-2.667" x2="7.6708" y2="-1.6256" width="0.254" layer="94"/>
<wire x1="7.6708" y1="-1.6256" x2="7.874" y2="-0.5588" width="0.254" layer="94"/>
<wire x1="9.9314" y1="-3.1242" x2="10.3124" y2="-1.0414" width="0.254" layer="94"/>
<wire x1="7.6708" y1="-1.6256" x2="5.7658" y2="-1.2446" width="0.1524" layer="94"/>
<wire x1="8.1026" y1="-6.5024" x2="6.5786" y2="-4.2672" width="0.254" layer="94"/>
<wire x1="6.5786" y1="-4.2672" x2="9.2202" y2="-4.699" width="0.254" layer="94"/>
<wire x1="6.0198" y1="-5.207" x2="6.5786" y2="-4.2672" width="0.254" layer="94"/>
<wire x1="6.5786" y1="-4.2672" x2="7.112" y2="-3.4036" width="0.254" layer="94"/>
<wire x1="8.1026" y1="-6.5024" x2="9.2202" y2="-4.699" width="0.254" layer="94"/>
<wire x1="6.5786" y1="-4.2672" x2="4.953" y2="-3.2512" width="0.1524" layer="94"/>
<wire x1="5.1308" y1="-9.017" x2="4.572" y2="-6.35" width="0.254" layer="94"/>
<wire x1="4.572" y1="-6.35" x2="6.8834" y2="-7.7216" width="0.254" layer="94"/>
<wire x1="3.6576" y1="-7.0104" x2="4.572" y2="-6.35" width="0.254" layer="94"/>
<wire x1="5.1308" y1="-9.017" x2="6.8834" y2="-7.7216" width="0.254" layer="94"/>
<wire x1="4.572" y1="-6.35" x2="3.3782" y2="-4.826" width="0.1524" layer="94"/>
<wire x1="0.9652" y1="-10.3886" x2="1.4986" y2="-7.6962" width="0.254" layer="94"/>
<wire x1="1.4986" y1="-7.6962" x2="3.048" y2="-9.9568" width="0.254" layer="94"/>
<wire x1="0.4064" y1="-7.9248" x2="1.4986" y2="-7.6962" width="0.254" layer="94"/>
<wire x1="1.4986" y1="-7.6962" x2="2.54" y2="-7.493" width="0.254" layer="94"/>
<wire x1="0.9652" y1="-10.3886" x2="3.048" y2="-9.9568" width="0.254" layer="94"/>
<wire x1="1.4986" y1="-7.6962" x2="1.0668" y2="-5.7658" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-6.35" x2="5.4102" y2="-5.7404" width="0.254" layer="94"/>
<wire x1="10.1346" y1="-2.0828" x2="12.7" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="10.1346" y1="2.0828" x2="12.7" y2="2.54" width="0.1524" layer="94"/>
<wire x1="8.6868" y1="5.588" x2="12.065" y2="7.62" width="0.1524" layer="94"/>
<wire x1="6.0452" y1="8.3566" x2="7.4676" y2="10.16" width="0.1524" layer="94"/>
<wire x1="12.065" y1="7.62" x2="12.7" y2="7.62" width="0.1524" layer="94"/>
<wire x1="1.9558" y1="10.1854" x2="2.5146" y2="12.7" width="0.1524" layer="94"/>
<wire x1="2.5146" y1="12.7" x2="12.7" y2="12.7" width="0.1524" layer="94"/>
<wire x1="7.4676" y1="10.16" x2="12.7" y2="10.16" width="0.1524" layer="94"/>
<wire x1="8.6868" y1="-5.588" x2="12.065" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="12.065" y1="-7.62" x2="12.7" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="6.0452" y1="-8.3566" x2="7.4676" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="7.4676" y1="-10.16" x2="12.7" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="1.9558" y1="-10.1854" x2="2.5146" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="2.5146" y1="-12.7" x2="12.7" y2="-12.7" width="0.1524" layer="94"/>
<wire x1="0" y1="-15.24" x2="12.7" y2="-15.24" width="0.1524" layer="94"/>
<wire x1="0" y1="15.24" x2="12.7" y2="15.24" width="0.1524" layer="94"/>
<circle x="0" y="0" radius="5.864" width="0.1524" layer="94"/>
<text x="-5.1054" y="-17.272" size="1.778" layer="96">&gt;VALUE</text>
<text x="-5.08" y="15.494" size="1.778" layer="95">&gt;NAME</text>
<pin name="COM1" x="15.24" y="15.24" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="13" x="-15.24" y="-12.7" visible="pad" length="short" direction="pas"/>
<pin name="14" x="-15.24" y="-10.16" visible="pad" length="short" direction="pas"/>
<pin name="15" x="-15.24" y="-7.62" visible="pad" length="short" direction="pas"/>
<pin name="16" x="-15.24" y="-2.54" visible="pad" length="short" direction="pas"/>
<pin name="COM2" x="15.24" y="-15.24" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="1" x="-15.24" y="2.54" visible="pad" length="short" direction="pas"/>
<pin name="2" x="-15.24" y="7.62" visible="pad" length="short" direction="pas"/>
<pin name="3" x="-15.24" y="10.16" visible="pad" length="short" direction="pas"/>
<pin name="4" x="-15.24" y="12.7" visible="pad" length="short" direction="pas"/>
<pin name="COM3" x="-15.24" y="-15.24" visible="pad" length="short" direction="pas"/>
<pin name="8" x="15.24" y="2.54" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="7" x="15.24" y="7.62" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="6" x="15.24" y="10.16" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="5" x="15.24" y="12.7" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="COM0" x="-15.24" y="15.24" visible="pad" length="short" direction="pas"/>
<pin name="12" x="15.24" y="-12.7" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="11" x="15.24" y="-10.16" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="10" x="15.24" y="-7.62" visible="pad" length="short" direction="pas" rot="R180"/>
<pin name="9" x="15.24" y="-2.54" visible="pad" length="short" direction="pas" rot="R180"/>
</symbol>
<symbol name="LIGHTPIPE-7511">
<wire x1="0" y1="0" x2="0" y2="2.54" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="15.24" y2="2.54" width="0.254" layer="94"/>
<wire x1="15.24" y1="2.54" x2="15.24" y2="0" width="0.254" layer="94"/>
<wire x1="15.24" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<text x="0.508" y="0.508" size="1.27" layer="94">7511Lightpipe</text>
</symbol>
<symbol name="LTE-302">
<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="-1.27" y1="-2.54" x2="1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.048" x2="1.27" y2="-1.778" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.048" x2="2.286" y2="-2.286" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.048" x2="1.778" y2="-2.794" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.032" x2="1.27" y2="-0.762" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.032" x2="2.286" y2="-1.27" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.032" x2="1.778" y2="-1.778" width="0.254" layer="94"/>
<text x="3.556" y="-3.048" size="1.27" layer="94">&gt;VALUE</text>
<text x="3.556" y="-1.016" size="1.27" layer="94">&gt;NAME</text>
<pin name="A" x="0" y="2.54" visible="off" length="short" rot="R270"/>
<pin name="C" x="0" y="-5.08" visible="off" length="short" rot="R90"/>
</symbol>
<symbol name="LUXEON">
<wire x1="1.27" y1="0" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="1.27" y1="-2.54" x2="0" y2="-2.54" width="0.254" layer="94"/>
<wire x1="0" y1="-2.54" x2="-1.27" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.27" y1="0" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="-1.27" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-0.508" x2="-2.921" y2="-1.905" width="0.1524" layer="94"/>
<wire x1="-1.397" y1="-1.651" x2="-2.794" y2="-3.048" width="0.1524" layer="94"/>
<wire x1="-5.08" y1="0" x2="-3.556" y2="0" width="0.1524" layer="94"/>
<circle x="0" y="-1.27" radius="3.81" width="0.254" layer="94"/>
<text x="6.096" y="-4.572" size="1.778" layer="95" rot="R90">&gt;NAME</text>
<text x="8.255" y="-4.572" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
<pin name="C" x="0" y="-7.62" visible="off" length="middle" direction="pas" rot="R90"/>
<pin name="A" x="0" y="5.08" visible="off" length="middle" direction="pas" rot="R270"/>
<pin name="S" x="-7.62" y="0" visible="off" length="short"/>
<polygon width="0.1524" layer="94">
<vertex x="-2.921" y="-1.905"/>
<vertex x="-2.54" y="-1.016"/>
<vertex x="-2.032" y="-1.524"/>
</polygon>
<polygon width="0.1524" layer="94">
<vertex x="-2.794" y="-3.048"/>
<vertex x="-2.413" y="-2.159"/>
<vertex x="-1.905" y="-2.667"/>
</polygon>
</symbol>
<symbol name="LED-RGB-CA">
<pin name="RED_CATHODE" x="-5.08" y="5.08" visible="off" length="middle"/>
<pin name="GREEN_CATHODE" x="-5.08" y="0" visible="off" length="middle"/>
<pin name="BLUE_CATHODE" x="-5.08" y="-5.08" visible="off" length="middle"/>
<pin name="ANODE" x="10.16" y="0" visible="off" length="middle" rot="R180"/>
<wire x1="2.54" y1="3.556" x2="2.54" y2="5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="5.08" x2="2.54" y2="6.604" width="0.254" layer="94"/>
<wire x1="2.54" y1="6.604" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="2.54" y2="3.556" width="0.254" layer="94"/>
<wire x1="0" y1="3.556" x2="0" y2="6.604" width="0.254" layer="94"/>
<wire x1="2.54" y1="-1.524" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="1.524" width="0.254" layer="94"/>
<wire x1="2.54" y1="1.524" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="2.54" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0" y1="-1.524" x2="0" y2="1.524" width="0.254" layer="94"/>
<wire x1="2.54" y1="-6.604" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="2.54" y2="-3.556" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.556" x2="0" y2="-5.08" width="0.254" layer="94"/>
<wire x1="0" y1="-5.08" x2="2.54" y2="-6.604" width="0.254" layer="94"/>
<wire x1="0" y1="-6.604" x2="0" y2="-3.556" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="5.08" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="0" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="5.08" y2="5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="5.08" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<text x="0.254" y="7.112" size="0.8128" layer="94">RED</text>
<text x="0.254" y="2.032" size="0.8128" layer="94">GREEN</text>
<text x="0.254" y="-3.048" size="0.8128" layer="94">BLUE</text>
<text x="5.842" y="1.524" size="1.27" layer="95">&gt;NAME</text>
</symbol>
<symbol name="LED-RGB-CC">
<pin name="RED_CATHODE" x="-5.08" y="5.08" visible="off" length="middle"/>
<pin name="GREEN_CATHODE" x="-5.08" y="0" visible="off" length="middle"/>
<pin name="BLUE_CATHODE" x="-5.08" y="-5.08" visible="off" length="middle"/>
<pin name="CATHODE" x="10.16" y="0" visible="off" length="middle" rot="R180"/>
<wire x1="0" y1="6.604" x2="0" y2="3.556" width="0.254" layer="94"/>
<wire x1="0" y1="3.556" x2="2.54" y2="5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="5.08" x2="0" y2="6.604" width="0.254" layer="94"/>
<wire x1="2.54" y1="6.604" x2="2.54" y2="5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="5.08" x2="2.54" y2="3.556" width="0.254" layer="94"/>
<wire x1="0" y1="1.524" x2="0" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0" y1="-1.524" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="0" y2="1.524" width="0.254" layer="94"/>
<wire x1="2.54" y1="1.524" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-1.524" width="0.254" layer="94"/>
<wire x1="0" y1="-3.556" x2="0" y2="-6.604" width="0.254" layer="94"/>
<wire x1="0" y1="-6.604" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="0" y2="-3.556" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.556" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="2.54" y2="-6.604" width="0.254" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="0" width="0.1524" layer="94"/>
<text x="0.254" y="7.112" size="0.8128" layer="94">RED</text>
<text x="0.254" y="2.032" size="0.8128" layer="94">GREEN</text>
<text x="0.254" y="-3.048" size="0.8128" layer="94">BLUE</text>
<wire x1="5.08" y1="0" x2="5.08" y2="5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="5.08" x2="2.54" y2="5.08" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="2.54" y2="-5.08" width="0.1524" layer="94"/>
<text x="5.842" y="2.54" size="1.27" layer="95">&gt;NAME</text>
</symbol>
<symbol name="LED-TRICOLOR-INDV">
<wire x1="12.7" y1="5.08" x2="12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="-5.08" x2="-12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-5.08" x2="-12.7" y2="5.08" width="0.254" layer="94"/>
<wire x1="-12.7" y1="5.08" x2="12.7" y2="5.08" width="0.254" layer="94"/>
<wire x1="0.508" y1="-1.27" x2="0.508" y2="0" width="0.254" layer="94"/>
<wire x1="0.508" y1="0" x2="0.508" y2="1.27" width="0.254" layer="94"/>
<wire x1="0.508" y1="1.27" x2="-0.762" y2="0" width="0.254" layer="94"/>
<wire x1="-0.762" y1="0" x2="0.508" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-0.762" y1="-1.27" x2="-0.762" y2="0" width="0.254" layer="94"/>
<wire x1="-0.762" y1="0" x2="-0.762" y2="1.27" width="0.254" layer="94"/>
<wire x1="-0.762" y1="0" x2="-2.032" y2="0" width="0.254" layer="94"/>
<wire x1="0.508" y1="0" x2="1.778" y2="0" width="0.254" layer="94"/>
<wire x1="0.508" y1="1.778" x2="0.508" y2="3.048" width="0.254" layer="94"/>
<wire x1="0.508" y1="3.048" x2="0.508" y2="4.318" width="0.254" layer="94"/>
<wire x1="0.508" y1="4.318" x2="-0.762" y2="3.048" width="0.254" layer="94"/>
<wire x1="-0.762" y1="3.048" x2="0.508" y2="1.778" width="0.254" layer="94"/>
<wire x1="-0.762" y1="1.778" x2="-0.762" y2="3.048" width="0.254" layer="94"/>
<wire x1="-0.762" y1="3.048" x2="-0.762" y2="4.318" width="0.254" layer="94"/>
<wire x1="-0.762" y1="3.048" x2="-2.032" y2="3.048" width="0.254" layer="94"/>
<wire x1="0.508" y1="3.048" x2="1.778" y2="3.048" width="0.254" layer="94"/>
<wire x1="0.508" y1="-4.318" x2="0.508" y2="-3.048" width="0.254" layer="94"/>
<wire x1="0.508" y1="-3.048" x2="0.508" y2="-1.778" width="0.254" layer="94"/>
<wire x1="0.508" y1="-1.778" x2="-0.762" y2="-3.048" width="0.254" layer="94"/>
<wire x1="-0.762" y1="-3.048" x2="0.508" y2="-4.318" width="0.254" layer="94"/>
<wire x1="-0.762" y1="-4.318" x2="-0.762" y2="-3.048" width="0.254" layer="94"/>
<wire x1="-0.762" y1="-3.048" x2="-0.762" y2="-1.778" width="0.254" layer="94"/>
<wire x1="-0.762" y1="-3.048" x2="-2.032" y2="-3.048" width="0.254" layer="94"/>
<wire x1="0.508" y1="-3.048" x2="1.778" y2="-3.048" width="0.254" layer="94"/>
<pin name="BLU-A" x="15.24" y="2.54" visible="pin" length="short" rot="R180"/>
<pin name="BLU-C" x="-15.24" y="2.54" visible="pin" length="short"/>
<pin name="GRN-A" x="15.24" y="0" visible="pin" length="short" rot="R180"/>
<pin name="GRN-C" x="-15.24" y="0" visible="pin" length="short"/>
<pin name="RED-A" x="15.24" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="RED-C" x="-15.24" y="-2.54" visible="pin" length="short"/>
<text x="-12.7" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-7.62" size="1.778" layer="95">&gt;VALUE</text>
</symbol>
<symbol name="LED-TRICOLOR-WS28X1">
<wire x1="10.16" y1="7.62" x2="10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="-5.08" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-5.08" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="-12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-5.08" x2="-12.7" y2="7.62" width="0.254" layer="94"/>
<wire x1="-12.7" y1="7.62" x2="-5.08" y2="7.62" width="0.254" layer="94"/>
<wire x1="-5.08" y1="7.62" x2="-2.54" y2="7.62" width="0.254" layer="94"/>
<wire x1="-2.54" y1="7.62" x2="2.54" y2="7.62" width="0.254" layer="94"/>
<wire x1="2.54" y1="7.62" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-0.508" y1="1.27" x2="-0.508" y2="0" width="0.254" layer="94"/>
<wire x1="-0.508" y1="0" x2="-0.508" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-1.27" x2="0.762" y2="0" width="0.254" layer="94"/>
<wire x1="0.762" y1="0" x2="-0.508" y2="1.27" width="0.254" layer="94"/>
<wire x1="0.762" y1="1.27" x2="0.762" y2="0" width="0.254" layer="94"/>
<wire x1="0.762" y1="0" x2="0.762" y2="-1.27" width="0.254" layer="94"/>
<wire x1="0.762" y1="0" x2="2.032" y2="0" width="0.254" layer="94"/>
<wire x1="-0.508" y1="0" x2="-1.778" y2="0" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-1.778" x2="-0.508" y2="-3.048" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-3.048" x2="-0.508" y2="-4.318" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-4.318" x2="0.762" y2="-3.048" width="0.254" layer="94"/>
<wire x1="0.762" y1="-3.048" x2="-0.508" y2="-1.778" width="0.254" layer="94"/>
<wire x1="0.762" y1="-1.778" x2="0.762" y2="-3.048" width="0.254" layer="94"/>
<wire x1="0.762" y1="-3.048" x2="0.762" y2="-4.318" width="0.254" layer="94"/>
<wire x1="0.762" y1="-3.048" x2="2.032" y2="-3.048" width="0.254" layer="94"/>
<wire x1="-0.508" y1="-3.048" x2="-1.778" y2="-3.048" width="0.254" layer="94"/>
<wire x1="-0.508" y1="4.318" x2="-0.508" y2="3.048" width="0.254" layer="94"/>
<wire x1="-0.508" y1="3.048" x2="-0.508" y2="1.778" width="0.254" layer="94"/>
<wire x1="-0.508" y1="1.778" x2="0.762" y2="3.048" width="0.254" layer="94"/>
<wire x1="0.762" y1="3.048" x2="-0.508" y2="4.318" width="0.254" layer="94"/>
<wire x1="0.762" y1="4.318" x2="0.762" y2="3.048" width="0.254" layer="94"/>
<wire x1="0.762" y1="3.048" x2="0.762" y2="1.778" width="0.254" layer="94"/>
<wire x1="0.762" y1="3.048" x2="2.032" y2="3.048" width="0.254" layer="94"/>
<wire x1="-0.508" y1="3.048" x2="-1.778" y2="3.048" width="0.254" layer="94"/>
<pin name="VDD" x="-15.24" y="5.08" visible="pin" length="short"/>
<pin name="VSS" x="-15.24" y="-2.54" visible="pin" length="short"/>
<pin name="DI" x="12.7" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="DO" x="12.7" y="-2.54" visible="pin" length="short" rot="R180"/>
<text x="-12.7" y="8.382" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-7.62" size="1.778" layer="95">&gt;VALUE</text>
<wire x1="-2.54" y1="7.62" x2="-2.54" y2="-5.08" width="0.254" layer="94" style="shortdash"/>
<wire x1="2.54" y1="7.62" x2="2.54" y2="-5.08" width="0.254" layer="94" style="shortdash"/>
<text x="-1.524" y="5.5118" size="1.27" layer="94">RGB</text>
<text x="-3.175" y="-2.159" size="1.27" layer="94" rot="R90">WS28x1</text>
<wire x1="-5.08" y1="7.62" x2="-5.08" y2="-5.08" width="0.254" layer="94" style="shortdash"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="APA3010SF4C" prefix="D">
<description>Right-angle 880nm SMT infrared LED</description>
<gates>
<gate name="G$1" symbol="APA3010SF4C" x="0" y="0"/>
</gates>
<devices>
<device name="" package="APA3010SF4C">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED" prefix="LED" uservalue="yes">
<description>&lt;b&gt;LEDs&lt;/b&gt;
Standard schematic elements and footprints for 5mm, 3mm, 1206, and 0603 sized LEDs. 5mm - Spark Fun Electronics SKU : COM-00529 (and others)</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="5MM" package="LED5MM">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="K"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3MM" package="LED3MM">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="K"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1206" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0603" package="LED-0603">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="10MM" package="LED10MM">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-FKIT-1206" package="FKIT-LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-3MM-NO_SILK" package="LED3MM-NS">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="K"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="5MM-KIT" package="LED5MM-KIT">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="K"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1206-BOTTOM" package="LED-1206-BOTTOM">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-TRICOLOR">
<description>&lt;b&gt;Tri-Color LED SMD&lt;/b&gt;
Proven layout and schematic for triple color LED in SMD package - common anode. Spark Fun Electronics SKU : COM-07844</description>
<gates>
<gate name="G$1" symbol="LED-TRICOLORSMD" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="LED-TRICOLOR-SMD">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="BLU" pad="B"/>
<connect gate="G$1" pin="GRN" pad="G"/>
<connect gate="G$1" pin="RED" pad="R"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED_BARGRAPH_10" prefix="D" uservalue="yes">
<description>10-Segment LED Bar Graph&lt;p&gt;
&lt;p&gt;
SFE part numbers:&lt;p&gt;
COM-09935 (red, Vf = 2.1V, Ifmax = 20mA)&lt;br&gt;
COM-09936 (yellow, Vf = 2.1V, Ifmax = 20mA)&lt;br&gt;
COM-09937 (blue, Vf = 3.4V, Ifmax = 20mA)&lt;br&gt;
COM-09938 (green, Vf = 3.4V, Ifmax = 20mA)&lt;br&gt;</description>
<gates>
<gate name="A" symbol="LED_BARGRAPH_10" x="-17.78" y="12.7"/>
<gate name="B" symbol="LED_BARGRAPH_10" x="-17.78" y="5.08"/>
<gate name="C" symbol="LED_BARGRAPH_10" x="-17.78" y="-2.54"/>
<gate name="D" symbol="LED_BARGRAPH_10" x="-17.78" y="-10.16"/>
<gate name="E" symbol="LED_BARGRAPH_10" x="-17.78" y="-17.78"/>
<gate name="F" symbol="LED_BARGRAPH_10" x="10.16" y="12.7"/>
<gate name="G" symbol="LED_BARGRAPH_10" x="10.16" y="5.08"/>
<gate name="H" symbol="LED_BARGRAPH_10" x="10.16" y="-2.54"/>
<gate name="I" symbol="LED_BARGRAPH_10" x="10.16" y="-10.16"/>
<gate name="J" symbol="LED_BARGRAPH_10" x="10.16" y="-17.78"/>
</gates>
<devices>
<device name="" package="LED_BARGAPH_10">
<connects>
<connect gate="A" pin="A" pad="1"/>
<connect gate="A" pin="C" pad="20"/>
<connect gate="B" pin="A" pad="2"/>
<connect gate="B" pin="C" pad="19"/>
<connect gate="C" pin="A" pad="3"/>
<connect gate="C" pin="C" pad="18"/>
<connect gate="D" pin="A" pad="4"/>
<connect gate="D" pin="C" pad="17"/>
<connect gate="E" pin="A" pad="5"/>
<connect gate="E" pin="C" pad="16"/>
<connect gate="F" pin="A" pad="6"/>
<connect gate="F" pin="C" pad="15"/>
<connect gate="G" pin="A" pad="7"/>
<connect gate="G" pin="C" pad="14"/>
<connect gate="H" pin="A" pad="8"/>
<connect gate="H" pin="C" pad="13"/>
<connect gate="I" pin="A" pad="9"/>
<connect gate="I" pin="C" pad="12"/>
<connect gate="J" pin="A" pad="10"/>
<connect gate="J" pin="C" pad="11"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED_PIRANHA_5MM">
<description>High-brightness RGB through-hole LED, similar to that used in the Shiftbrite</description>
<gates>
<gate name="G$1" symbol="LED-TRICOLOR-THROUGHHOLE" x="0" y="0"/>
</gates>
<devices>
<device name="" package="LED_PIRANHA_5MM">
<connects>
<connect gate="G$1" pin="BLU" pad="B"/>
<connect gate="G$1" pin="C" pad="-"/>
<connect gate="G$1" pin="GRN" pad="G"/>
<connect gate="G$1" pin="RED" pad="R"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED_RING" prefix="LED">
<description>&lt;h3&gt;16 LED Ring&lt;/h3&gt;
COM-10595&lt;br&gt;
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/LED/Top-Up%20LED%20Ring%20LED-CCL-A.pdf</description>
<gates>
<gate name="G$1" symbol="LED_RING" x="0" y="0"/>
</gates>
<devices>
<device name="" package="LED_RING">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
<connect gate="G$1" pin="COM0" pad="COM0"/>
<connect gate="G$1" pin="COM1" pad="COM1"/>
<connect gate="G$1" pin="COM2" pad="COM2"/>
<connect gate="G$1" pin="COM3" pad="COM3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LIGHTPIPE-7511">
<gates>
<gate name="G$1" symbol="LIGHTPIPE-7511" x="0" y="0"/>
</gates>
<devices>
<device name="" package="LIGHTPIPE-7511">
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LTE-302" prefix="D" uservalue="yes">
<description>Through-hole side-firing 940nm IR LED</description>
<gates>
<gate name="G$1" symbol="LTE-302" x="0" y="1.016"/>
</gates>
<devices>
<device name="" package="LTE-302">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LUXEON">
<description>&lt;b&gt;Luxeon LED&lt;/b&gt;
This footprint works with the current 1 Watt, 3 Watt, and 5 Watt LEDs. These blindingly bright LEDs generate a lot of heat so the footprint has a large pad under the LED for thermal transfer. Schematic and footprint are proven. Spark Fun Electronics SKU : COM-00603</description>
<gates>
<gate name="G$1" symbol="LUXEON" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="LUXEON">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
<connect gate="G$1" pin="S" pad="S"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LUXEON-REBEL">
<description>Luxeon Rebel single-color high output LED</description>
<gates>
<gate name="G$1" symbol="LUXEON" x="0" y="0"/>
</gates>
<devices>
<device name="" package="LUXEON-REBEL">
<connects>
<connect gate="G$1" pin="A" pad="ANODE"/>
<connect gate="G$1" pin="C" pad="CATHODE"/>
<connect gate="G$1" pin="S" pad="P$3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-GREEN" prefix="D" uservalue="yes">
<description>Various green LEDs&lt;br&gt;
0603- DIO-00821&lt;br&gt;
LARGE- DIO-00862&lt;br&gt;
LILYPAD- DIO-09910&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="0603" package="LED-0603">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-00821" constant="no"/>
<attribute name="VALUE" value="GREEN" constant="no"/>
</technology>
</technologies>
</device>
<device name="LILYPAD" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09910"/>
<attribute name="VALUE" value="GREEN" constant="no"/>
</technology>
</technologies>
</device>
<device name="LARGE" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-00862" constant="no"/>
<attribute name="VALUE" value="GREEN" constant="no"/>
</technology>
</technologies>
</device>
<device name="1206-BOTTOM" package="LED-1206-BOTTOM">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-11076" constant="no"/>
<attribute name="VALUE" value="Green" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-RED" prefix="D" uservalue="yes">
<description>Assorted Red LEDs&lt;br&gt;
LilyPad 1206- DIO-09912&lt;br&gt;
1206- DIO-00809&lt;br&gt;
0603- DIO-00819</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="0603" package="LED-0603">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-00819"/>
<attribute name="VALUE" value="RED" constant="no"/>
</technology>
</technologies>
</device>
<device name="1206" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-00809"/>
<attribute name="VALUE" value="RED" constant="no"/>
</technology>
</technologies>
</device>
<device name="LILYPAD" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09912"/>
<attribute name="VALUE" value="RED" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-WHITE" prefix="D" uservalue="yes">
<description>White SMD LEDs&lt;br&gt;
LilyPad 1206- DIO-09955</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09955" constant="no"/>
<attribute name="VALUE" value="WHITE" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-YELLOW" prefix="D" uservalue="yes">
<description>Yellow SMD LEDs&lt;br&gt;
LilyPad 1206- DIO-09909&lt;br&gt;
0603- DIO-09003</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="LILYPAD" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09909"/>
<attribute name="VALUE" value="Yellow" constant="no"/>
</technology>
</technologies>
</device>
<device name="0603" package="LED-0603">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09003"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-RGB-CA-THRU" prefix="D">
<description>RGB Through-hole common anode&lt;br&gt;
SparkFun store front&lt;br&gt;
COM-10821 (diffuse)&lt;br&gt;
COM-10820 (clear)&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="LED-RGB-CA" x="0" y="0"/>
</gates>
<devices>
<device name="DIFFUSE" package="LED-RGB-THRU">
<connects>
<connect gate="G$1" pin="ANODE" pad="2"/>
<connect gate="G$1" pin="BLUE_CATHODE" pad="4"/>
<connect gate="G$1" pin="GREEN_CATHODE" pad="3"/>
<connect gate="G$1" pin="RED_CATHODE" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-10632"/>
</technology>
</technologies>
</device>
<device name="CLEAR" package="LED-RGB-THRU">
<connects>
<connect gate="G$1" pin="ANODE" pad="2"/>
<connect gate="G$1" pin="BLUE_CATHODE" pad="4"/>
<connect gate="G$1" pin="GREEN_CATHODE" pad="3"/>
<connect gate="G$1" pin="RED_CATHODE" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-10631"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-RGB-CC-THRU" prefix="D">
<description>RGB Through-hole common cathode LED&lt;br&gt;
SparkFun Storefront:&lt;br&gt;
COM-00105 (Clear)&lt;br&gt;
COM-09264 (Diffuse)</description>
<gates>
<gate name="G$1" symbol="LED-RGB-CC" x="0" y="0"/>
</gates>
<devices>
<device name="DIFFUSE" package="LED-RGB-THRU">
<connects>
<connect gate="G$1" pin="BLUE_CATHODE" pad="4"/>
<connect gate="G$1" pin="CATHODE" pad="2"/>
<connect gate="G$1" pin="GREEN_CATHODE" pad="3"/>
<connect gate="G$1" pin="RED_CATHODE" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09434"/>
</technology>
</technologies>
</device>
<device name="CLEAR" package="LED-RGB-THRU">
<connects>
<connect gate="G$1" pin="BLUE_CATHODE" pad="4"/>
<connect gate="G$1" pin="CATHODE" pad="2"/>
<connect gate="G$1" pin="GREEN_CATHODE" pad="3"/>
<connect gate="G$1" pin="RED_CATHODE" pad="1"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-08418"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-TRICOLOR-5050" prefix="LED">
<gates>
<gate name="D1" symbol="LED-TRICOLOR-INDV" x="0" y="0"/>
</gates>
<devices>
<device name="NO_IC" package="LED-TRICOLOR-5050">
<connects>
<connect gate="D1" pin="BLU-A" pad="3"/>
<connect gate="D1" pin="BLU-C" pad="4"/>
<connect gate="D1" pin="GRN-A" pad="1"/>
<connect gate="D1" pin="GRN-C" pad="6"/>
<connect gate="D1" pin="RED-A" pad="2"/>
<connect gate="D1" pin="RED-C" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-TRICOLOR-5050-IC" prefix="U">
<description>&lt;h3&gt; WS2811 RGB LED w/driver&lt;/h3&gt;&lt;p&gt;
5x5mm SMD LED with built-in controller IC.&lt;br&gt;
DIO-11598</description>
<gates>
<gate name="U1" symbol="LED-TRICOLOR-WS28X1" x="0" y="0"/>
</gates>
<devices>
<device name="WS2811" package="LED-TRICOLOR-5050-IC">
<connects>
<connect gate="U1" pin="DI" pad="2" route="any"/>
<connect gate="U1" pin="DO" pad="1"/>
<connect gate="U1" pin="VDD" pad="3 5"/>
<connect gate="U1" pin="VSS" pad="6"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-11598"/>
<attribute name="VALUE" value="WS2811" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LED-BLUE" prefix="D" uservalue="yes">
<description>&lt;H3&gt;Blue LEDs for production use&lt;/H3&gt;&lt;p&gt;
Various blue LEDs stocked by SparkFun production&lt;br&gt;
0603 - DIO-08575&lt;br&gt;
Rebel - DIO-09553&lt;br&gt;
1206 - DIO-09911</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="2.54"/>
</gates>
<devices>
<device name="0603" package="LED-0603">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-08575"/>
<attribute name="VALUE" value="BLUE"/>
</technology>
</technologies>
</device>
<device name="1206" package="LED-1206">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09911"/>
<attribute name="VALUE" value="BLUE" constant="no"/>
</technology>
</technologies>
</device>
<device name="REBEL" package="LUXEON-REBEL">
<connects>
<connect gate="G$1" pin="A" pad="ANODE"/>
<connect gate="G$1" pin="C" pad="CATHODE"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="DIO-09553"/>
<attribute name="VALUE" value="BLUE"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="HSMC-C265">
<description>Avago HSMC-C265 reverse-mounted red LED

This is a SMD LED that is mounted to one side of a PCB and shines through a hole to the other side of the PCB. Useful for making boards with no components on one side for mounting and having LED indicator lights shine through the board, panel, etc.</description>
<gates>
<gate name="G$1" symbol="LED" x="0" y="0"/>
</gates>
<devices>
<device name="" package="HSMC-C265">
<connects>
<connect gate="G$1" pin="A" pad="A"/>
<connect gate="G$1" pin="C" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Passives.lbr.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.4">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="no" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="no" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="no" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="no" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="no" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="no" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="no" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="no" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="no" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="no" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="no" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="no" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="no" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
<layer number="108" name="tplace-old" color="10" fill="1" visible="yes" active="yes"/>
<layer number="109" name="ref-old" color="11" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
<layer number="199" name="Contour" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="CAP-PTH-SMALL">
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="0.7" diameter="1.651"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651"/>
<text x="0.508" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="0.254" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CAP-PTH-SMALL2">
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="1.27" x2="3.81" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="1.27" x2="3.81" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-1.27" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="1.27" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="0.7" diameter="1.651"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651"/>
<text x="-1.27" y="1.905" size="0.6096" layer="25">&gt;Name</text>
<text x="-1.27" y="-2.54" size="0.6096" layer="27">&gt;Value</text>
</package>
<package name="CAP-PTH-SMALLEZ">
<description>This is the "EZ" version of the .1" spaced ceramic thru-hole cap.&lt;br&gt;
It has reduced top mask to make it harder to put the component on the wrong side of the board.</description>
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="1.27" x2="3.81" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="1.27" x2="3.81" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-1.27" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="1.27" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="0.7" diameter="1.651" stop="no"/>
<pad name="2" x="2.54" y="0" drill="0.7" diameter="1.651" stop="no"/>
<text x="-1.27" y="1.905" size="0.6096" layer="25">&gt;Name</text>
<text x="-1.27" y="-2.54" size="0.6096" layer="27">&gt;Value</text>
<circle x="0" y="0" radius="0.898025" width="0" layer="30"/>
<circle x="2.54" y="0" radius="0.915809375" width="0" layer="30"/>
<circle x="0" y="0" radius="0.40160625" width="0" layer="29"/>
<circle x="2.54" y="0" radius="0.40160625" width="0" layer="29"/>
</package>
<package name="0805">
<wire x1="-0.3" y1="0.6" x2="0.3" y2="0.6" width="0.1524" layer="21"/>
<wire x1="-0.3" y1="-0.6" x2="0.3" y2="-0.6" width="0.1524" layer="21"/>
<smd name="1" x="-0.9" y="0" dx="0.8" dy="1.2" layer="1"/>
<smd name="2" x="0.9" y="0" dx="0.8" dy="1.2" layer="1"/>
<text x="-0.762" y="0.8255" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-1.397" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CAP-PTH-LARGE">
<wire x1="0" y1="0.635" x2="0" y2="0" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="0" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="2.54" y2="0" width="0.2032" layer="21"/>
<pad name="1" x="-4.826" y="0" drill="0.9" diameter="1.905"/>
<pad name="2" x="4.572" y="0" drill="0.9" diameter="1.905"/>
<text x="-0.762" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.016" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="GRM43D">
<wire x1="2.25" y1="1.6" x2="1.1" y2="1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="1.6" x2="-1.1" y2="1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="1.6" x2="-2.25" y2="1.6" width="0.127" layer="51"/>
<wire x1="-2.25" y1="1.6" x2="-2.25" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-2.25" y1="-1.6" x2="-1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="-1.6" x2="1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="-1.6" x2="2.25" y2="-1.6" width="0.127" layer="51"/>
<wire x1="2.25" y1="-1.6" x2="2.25" y2="1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="1.6" x2="1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="1.6" x2="-1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-2.3" y1="1.8" x2="2.3" y2="1.8" width="0.127" layer="21"/>
<wire x1="-2.3" y1="-1.8" x2="2.3" y2="-1.8" width="0.127" layer="21"/>
<smd name="A" x="1.927" y="0" dx="3.2" dy="1.65" layer="1" rot="R90"/>
<smd name="C" x="-1.927" y="0" dx="3.2" dy="1.65" layer="1" rot="R90"/>
<text x="-2" y="2" size="0.4064" layer="25">&gt;NAME</text>
<text x="0" y="-2" size="0.4064" layer="27" rot="R180">&gt;VALUE</text>
<rectangle x1="-2.2" y1="-1.6" x2="-1.1" y2="1.6" layer="51"/>
<rectangle x1="1.1" y1="-1.6" x2="2.2" y2="1.6" layer="51"/>
</package>
<package name="0603-CAP">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<wire x1="0" y1="0.0305" x2="0" y2="-0.0305" width="0.5588" layer="21"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="0402-CAP">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="0" y1="0.0305" x2="0" y2="-0.0305" width="0.4064" layer="21"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="CAP-PTH-5MM">
<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="-2.5" y="0" drill="0.7" diameter="1.651"/>
<pad name="2" x="2.5" y="0" drill="0.7" diameter="1.651"/>
<text x="-0.762" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.016" y="-1.524" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="AXIAL-5MM">
<wire x1="-1.14" y1="0.762" x2="1.14" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0.762" x2="1.14" y2="0" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0" x2="1.14" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="-0.762" x2="-1.14" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="-0.762" x2="-1.14" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="0" x2="-1.14" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0" x2="1.394" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="0" x2="-1.394" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-2.5" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="2.5" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.17" size="0.4" layer="25">&gt;Name</text>
<text x="-1.032" y="-0.208" size="0.4" layer="21" ratio="15">&gt;Value</text>
</package>
<package name="1210">
<wire x1="-1.6" y1="1.3" x2="1.6" y2="1.3" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.3" x2="1.6" y2="-1.3" width="0.127" layer="51"/>
<wire x1="1.6" y1="-1.3" x2="-1.6" y2="-1.3" width="0.127" layer="51"/>
<wire x1="-1.6" y1="-1.3" x2="-1.6" y2="1.3" width="0.127" layer="51"/>
<wire x1="-1.6" y1="1.3" x2="1.6" y2="1.3" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.3" x2="1.6" y2="-1.3" width="0.2032" layer="21"/>
<smd name="1" x="-1.6" y="0" dx="1.2" dy="2" layer="1"/>
<smd name="2" x="1.6" y="0" dx="1.2" dy="2" layer="1"/>
<text x="-0.8" y="0.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9" y="-0.7" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="1206">
<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
<text x="-1.27" y="1.143" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.397" y="-1.524" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
</package>
<package name="CTZ3">
<description>CTZ3 Series land pattern for variable capacitor - CTZ3E-50C-W1-PF</description>
<wire x1="-1.6" y1="1.4" x2="-1.6" y2="-2.25" width="0.127" layer="51"/>
<wire x1="-1.6" y1="-2.25" x2="1.6" y2="-2.25" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.4" x2="1.6" y2="-2.25" width="0.127" layer="51"/>
<wire x1="-0.5" y1="0" x2="0.5" y2="0" width="0.127" layer="51"/>
<wire x1="-1.6" y1="1.4" x2="-1" y2="2.2" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.4" x2="1" y2="2.2" width="0.127" layer="51"/>
<wire x1="-1" y1="2.2" x2="1" y2="2.2" width="0.127" layer="51"/>
<wire x1="0" y1="0.8" x2="0" y2="-0.8" width="0.127" layer="51"/>
<wire x1="-0.8" y1="0" x2="0.8" y2="0" width="0.127" layer="51"/>
<wire x1="-1.05" y1="2.25" x2="-1.7" y2="1.45" width="0.127" layer="21"/>
<wire x1="-1.7" y1="1.45" x2="-1.7" y2="-2.35" width="0.127" layer="21"/>
<wire x1="-1.7" y1="-2.35" x2="-1.05" y2="-2.35" width="0.127" layer="21"/>
<wire x1="1.05" y1="2.25" x2="1.7" y2="1.4" width="0.127" layer="21"/>
<wire x1="1.7" y1="1.4" x2="1.7" y2="-2.35" width="0.127" layer="21"/>
<wire x1="1.7" y1="-2.35" x2="1.05" y2="-2.35" width="0.127" layer="21"/>
<smd name="+" x="0" y="2.05" dx="1.5" dy="1.2" layer="1"/>
<smd name="-" x="0" y="-2.05" dx="1.5" dy="1.2" layer="1"/>
<text x="-2" y="3" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2" y="-3.4" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CAP-PTH-SMALL-KIT">
<description>&lt;h3&gt;CAP-PTH-SMALL-KIT&lt;/h3&gt;
Commonly used for small ceramic capacitors. Like our 0.1uF (http://www.sparkfun.com/products/8375) or 22pF caps (http://www.sparkfun.com/products/8571).&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.254" layer="21"/>
<wire x1="-2.667" y1="1.27" x2="2.667" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.667" y1="1.27" x2="2.667" y2="-1.27" width="0.254" layer="21"/>
<wire x1="2.667" y1="-1.27" x2="-2.667" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-2.667" y1="-1.27" x2="-2.667" y2="1.27" width="0.254" layer="21"/>
<pad name="1" x="-1.397" y="0" drill="1.016" diameter="2.032" stop="no"/>
<pad name="2" x="1.397" y="0" drill="1.016" diameter="2.032" stop="no"/>
<polygon width="0.127" layer="30">
<vertex x="-1.4021" y="-0.9475" curve="-90"/>
<vertex x="-2.357" y="-0.0178" curve="-90.011749"/>
<vertex x="-1.4046" y="0.9576" curve="-90"/>
<vertex x="-0.4546" y="-0.0204" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-1.4046" y="-0.4395" curve="-90.012891"/>
<vertex x="-1.8491" y="-0.0153" curve="-90"/>
<vertex x="-1.4046" y="0.452" curve="-90"/>
<vertex x="-0.9627" y="-0.0051" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="1.397" y="-0.9475" curve="-90"/>
<vertex x="0.4421" y="-0.0178" curve="-90.011749"/>
<vertex x="1.3945" y="0.9576" curve="-90"/>
<vertex x="2.3445" y="-0.0204" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="1.3945" y="-0.4395" curve="-90.012891"/>
<vertex x="0.95" y="-0.0153" curve="-90"/>
<vertex x="1.3945" y="0.452" curve="-90"/>
<vertex x="1.8364" y="-0.0051" curve="-90.012967"/>
</polygon>
</package>
<package name="EIA3216">
<wire x1="-1" y1="-1.2" x2="-2.5" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-1.2" x2="-2.5" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="1.2" x2="-1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.2" x2="2.1" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="2.1" y1="-1.2" x2="2.5" y2="-0.8" width="0.2032" layer="21"/>
<wire x1="2.5" y1="-0.8" x2="2.5" y2="0.8" width="0.2032" layer="21"/>
<wire x1="2.5" y1="0.8" x2="2.1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="2.1" y1="1.2" x2="1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="0.381" y1="1.016" x2="0.381" y2="-1.016" width="0.127" layer="21"/>
<smd name="C" x="-1.4" y="0" dx="1.6" dy="1.4" layer="1" rot="R90"/>
<smd name="A" x="1.4" y="0" dx="1.6" dy="1.4" layer="1" rot="R90"/>
<text x="-2.54" y="1.381" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.408" y="1.332" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="EIA3528">
<wire x1="-0.9" y1="-1.6" x2="-2.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="-1.6" x2="-2.6" y2="1.55" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="1.55" x2="-0.9" y2="1.55" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.55" x2="2.2" y2="-1.55" width="0.2032" layer="21"/>
<wire x1="2.2" y1="-1.55" x2="2.6" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="2.6" y1="-1.2" x2="2.6" y2="1.25" width="0.2032" layer="21"/>
<wire x1="2.6" y1="1.25" x2="2.2" y2="1.55" width="0.2032" layer="21"/>
<wire x1="2.2" y1="1.55" x2="1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="2.2" y1="1.55" x2="1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="0.609" y1="1.311" x2="0.609" y2="-1.286" width="0.2032" layer="21" style="longdash"/>
<smd name="C" x="-1.65" y="0" dx="2.5" dy="1.2" layer="1" rot="R90"/>
<smd name="A" x="1.65" y="0" dx="2.5" dy="1.2" layer="1" rot="R90"/>
<text x="-2.27" y="-1.27" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="3.24" y="-1.37" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
</package>
<package name="CPOL-RADIAL-100UF-25V">
<wire x1="-0.635" y1="1.27" x2="-1.905" y2="1.27" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="3.25" width="0.2032" layer="21"/>
<pad name="2" x="-1.27" y="0" drill="0.7" diameter="1.651"/>
<pad name="1" x="1.27" y="0" drill="0.7" diameter="1.651" shape="square"/>
<text x="-1.905" y="-4.318" size="0.8128" layer="27">&gt;Value</text>
<text x="-0.762" y="1.651" size="0.4064" layer="25">&gt;Name</text>
</package>
<package name="CPOL-RADIAL-10UF-25V">
<wire x1="-0.762" y1="1.397" x2="-1.778" y2="1.397" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="2.5" width="0.2032" layer="21"/>
<pad name="1" x="1.27" y="0" drill="0.7" diameter="1.651" shape="square"/>
<pad name="2" x="-1.27" y="0" drill="0.7" diameter="1.651"/>
<text x="-0.889" y="1.524" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.905" y="-3.683" size="0.8128" layer="27">&gt;Value</text>
</package>
<package name="EIA7343">
<wire x1="-5" y1="2.5" x2="-2" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-5" y1="2.5" x2="-5" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="-5" y1="-2.5" x2="-2" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="2" y1="2.5" x2="4" y2="2.5" width="0.2032" layer="21"/>
<wire x1="4" y1="2.5" x2="5" y2="1.5" width="0.2032" layer="21"/>
<wire x1="5" y1="1.5" x2="5" y2="-1.5" width="0.2032" layer="21"/>
<wire x1="5" y1="-1.5" x2="4" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="4" y1="-2.5" x2="2" y2="-2.5" width="0.2032" layer="21"/>
<smd name="C" x="-3.17" y="0" dx="2.55" dy="2.7" layer="1" rot="R180"/>
<smd name="A" x="3.17" y="0" dx="2.55" dy="2.7" layer="1" rot="R180"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.27" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="PANASONIC_G">
<description>&lt;b&gt;Panasonic Aluminium Electrolytic Capacitor VS-Serie Package G&lt;/b&gt;</description>
<wire x1="-5.1" y1="5.1" x2="2.8" y2="5.1" width="0.1016" layer="51"/>
<wire x1="2.8" y1="5.1" x2="5.1" y2="2.8" width="0.1016" layer="51"/>
<wire x1="5.1" y1="2.8" x2="5.1" y2="-2.8" width="0.1016" layer="51"/>
<wire x1="5.1" y1="-2.8" x2="2.8" y2="-5.1" width="0.1016" layer="51"/>
<wire x1="2.8" y1="-5.1" x2="-5.1" y2="-5.1" width="0.1016" layer="51"/>
<wire x1="-5.1" y1="-5.1" x2="-5.1" y2="5.1" width="0.1016" layer="51"/>
<wire x1="-5.1" y1="1" x2="-5.1" y2="5.1" width="0.2032" layer="21"/>
<wire x1="-5.1" y1="5.1" x2="2.8" y2="5.1" width="0.2032" layer="21"/>
<wire x1="2.8" y1="5.1" x2="5.1" y2="2.8" width="0.2032" layer="21"/>
<wire x1="5.1" y1="2.8" x2="5.1" y2="1" width="0.2032" layer="21"/>
<wire x1="5.1" y1="-1" x2="5.1" y2="-2.8" width="0.2032" layer="21"/>
<wire x1="5.1" y1="-2.8" x2="2.8" y2="-5.1" width="0.2032" layer="21"/>
<wire x1="2.8" y1="-5.1" x2="-5.1" y2="-5.1" width="0.2032" layer="21"/>
<wire x1="-5.1" y1="-5.1" x2="-5.1" y2="-1" width="0.2032" layer="21"/>
<wire x1="-4.85" y1="-1" x2="4.85" y2="-1" width="0.2032" layer="21" curve="156.699401" cap="flat"/>
<wire x1="-4.85" y1="1" x2="4.85" y2="1" width="0.2032" layer="21" curve="-156.699401" cap="flat"/>
<wire x1="-3.25" y1="3.7" x2="-3.25" y2="-3.65" width="0.1016" layer="51"/>
<circle x="0" y="0" radius="4.95" width="0.1016" layer="51"/>
<smd name="-" x="-4.25" y="0" dx="3.9" dy="1.6" layer="1"/>
<smd name="+" x="4.25" y="0" dx="3.9" dy="1.6" layer="1"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-5.85" y1="-0.45" x2="-4.9" y2="0.45" layer="51"/>
<rectangle x1="4.9" y1="-0.45" x2="5.85" y2="0.45" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-3.3" y="3.6"/>
<vertex x="-4.05" y="2.75"/>
<vertex x="-4.65" y="1.55"/>
<vertex x="-4.85" y="0.45"/>
<vertex x="-4.85" y="-0.45"/>
<vertex x="-4.65" y="-1.55"/>
<vertex x="-4.05" y="-2.75"/>
<vertex x="-3.3" y="-3.6"/>
<vertex x="-3.3" y="3.55"/>
</polygon>
</package>
<package name="PANASONIC_E">
<description>&lt;b&gt;Panasonic Aluminium Electrolytic Capacitor VS-Serie Package E&lt;/b&gt;</description>
<wire x1="-4.1" y1="4.1" x2="1.8" y2="4.1" width="0.1016" layer="51"/>
<wire x1="1.8" y1="4.1" x2="4.1" y2="1.8" width="0.1016" layer="51"/>
<wire x1="4.1" y1="1.8" x2="4.1" y2="-1.8" width="0.1016" layer="51"/>
<wire x1="4.1" y1="-1.8" x2="1.8" y2="-4.1" width="0.1016" layer="51"/>
<wire x1="1.8" y1="-4.1" x2="-4.1" y2="-4.1" width="0.1016" layer="51"/>
<wire x1="-4.1" y1="-4.1" x2="-4.1" y2="4.1" width="0.1016" layer="51"/>
<wire x1="-4.1" y1="0.9" x2="-4.1" y2="4.1" width="0.2032" layer="21"/>
<wire x1="-4.1" y1="4.1" x2="1.8" y2="4.1" width="0.2032" layer="21"/>
<wire x1="1.8" y1="4.1" x2="4.1" y2="1.8" width="0.2032" layer="21"/>
<wire x1="4.1" y1="1.8" x2="4.1" y2="0.9" width="0.2032" layer="21"/>
<wire x1="4.1" y1="-0.9" x2="4.1" y2="-1.8" width="0.2032" layer="21"/>
<wire x1="4.1" y1="-1.8" x2="1.8" y2="-4.1" width="0.2032" layer="21"/>
<wire x1="1.8" y1="-4.1" x2="-4.1" y2="-4.1" width="0.2032" layer="21"/>
<wire x1="-4.1" y1="-4.1" x2="-4.1" y2="-0.9" width="0.2032" layer="21"/>
<wire x1="-2.2" y1="3.25" x2="-2.2" y2="-3.25" width="0.1016" layer="51"/>
<wire x1="-3.85" y1="0.9" x2="3.85" y2="0.9" width="0.2032" layer="21" curve="-153.684915" cap="flat"/>
<wire x1="-3.85" y1="-0.9" x2="3.85" y2="-0.9" width="0.2032" layer="21" curve="153.684915" cap="flat"/>
<circle x="0" y="0" radius="3.95" width="0.1016" layer="51"/>
<smd name="-" x="-3" y="0" dx="3.8" dy="1.4" layer="1"/>
<smd name="+" x="3" y="0" dx="3.8" dy="1.4" layer="1"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-4.5" y1="-0.35" x2="-3.8" y2="0.35" layer="51"/>
<rectangle x1="3.8" y1="-0.35" x2="4.5" y2="0.35" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-2.25" y="3.2"/>
<vertex x="-3" y="2.5"/>
<vertex x="-3.6" y="1.5"/>
<vertex x="-3.85" y="0.65"/>
<vertex x="-3.85" y="-0.65"/>
<vertex x="-3.55" y="-1.6"/>
<vertex x="-2.95" y="-2.55"/>
<vertex x="-2.25" y="-3.2"/>
<vertex x="-2.25" y="3.15"/>
</polygon>
</package>
<package name="PANASONIC_C">
<description>&lt;b&gt;Panasonic Aluminium Electrolytic Capacitor VS-Serie Package E&lt;/b&gt;</description>
<wire x1="-2.6" y1="2.45" x2="1.6" y2="2.45" width="0.2032" layer="21"/>
<wire x1="1.6" y1="2.45" x2="2.7" y2="1.35" width="0.2032" layer="21"/>
<wire x1="2.7" y1="-1.75" x2="1.6" y2="-2.85" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-2.85" x2="-2.6" y2="-2.85" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="2.45" x2="1.6" y2="2.45" width="0.1016" layer="51"/>
<wire x1="1.6" y1="2.45" x2="2.7" y2="1.35" width="0.1016" layer="51"/>
<wire x1="2.7" y1="-1.75" x2="1.6" y2="-2.85" width="0.1016" layer="51"/>
<wire x1="1.6" y1="-2.85" x2="-2.6" y2="-2.85" width="0.1016" layer="51"/>
<wire x1="-2.6" y1="2.45" x2="-2.6" y2="0.35" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="-2.85" x2="-2.6" y2="-0.75" width="0.2032" layer="21"/>
<wire x1="2.7" y1="1.35" x2="2.7" y2="0.35" width="0.2032" layer="21"/>
<wire x1="2.7" y1="-1.75" x2="2.7" y2="-0.7" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="2.45" x2="-2.6" y2="-2.85" width="0.1016" layer="51"/>
<wire x1="2.7" y1="1.35" x2="2.7" y2="-1.75" width="0.1016" layer="51"/>
<wire x1="-2.4" y1="0.35" x2="2.45" y2="0.3" width="0.2032" layer="21" curve="-156.699401"/>
<wire x1="2.5" y1="-0.7" x2="-2.4" y2="-0.75" width="0.2032" layer="21" curve="-154.694887"/>
<circle x="0.05" y="-0.2" radius="2.5004" width="0.1016" layer="51"/>
<smd name="-" x="-1.8" y="-0.2" dx="2.2" dy="0.65" layer="1"/>
<smd name="+" x="1.9" y="-0.2" dx="2.2" dy="0.65" layer="1"/>
<text x="-2.6" y="2.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.6" y="-3.45" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="NIPPON_F80">
<wire x1="-3.3" y1="3.3" x2="1.7" y2="3.3" width="0.2032" layer="21"/>
<wire x1="1.7" y1="3.3" x2="3.3" y2="2" width="0.2032" layer="21"/>
<wire x1="3.3" y1="-2" x2="1.7" y2="-3.3" width="0.2032" layer="21"/>
<wire x1="1.7" y1="-3.3" x2="-3.3" y2="-3.3" width="0.2032" layer="21"/>
<wire x1="-3.3" y1="3.3" x2="1.7" y2="3.3" width="0.1016" layer="51"/>
<wire x1="1.7" y1="3.3" x2="3.3" y2="2" width="0.1016" layer="51"/>
<wire x1="3.3" y1="-2" x2="1.7" y2="-3.3" width="0.1016" layer="51"/>
<wire x1="1.7" y1="-3.3" x2="-3.3" y2="-3.3" width="0.1016" layer="51"/>
<wire x1="-3.3" y1="3.3" x2="-3.3" y2="0.685" width="0.2032" layer="21"/>
<wire x1="-3.3" y1="-3.3" x2="-3.3" y2="-0.685" width="0.2032" layer="21"/>
<wire x1="3.3" y1="2" x2="3.3" y2="0.685" width="0.2032" layer="21"/>
<wire x1="3.3" y1="-2" x2="3.3" y2="-0.685" width="0.2032" layer="21"/>
<wire x1="-3.3" y1="3.3" x2="-3.3" y2="-3.3" width="0.1016" layer="51"/>
<wire x1="3.3" y1="2" x2="3.3" y2="-2" width="0.1016" layer="51"/>
<wire x1="-3.1" y1="0.685" x2="3.1" y2="0.685" width="0.2032" layer="21" curve="-156.500033"/>
<wire x1="3.1" y1="-0.685" x2="-3.1" y2="-0.685" width="0.2032" layer="21" curve="-154.748326"/>
<circle x="0" y="0" radius="3.15" width="0.1016" layer="51"/>
<smd name="-" x="-2.4" y="0" dx="2.95" dy="1" layer="1"/>
<smd name="+" x="2.4" y="0" dx="2.95" dy="1" layer="1"/>
<text x="-3.2" y="3.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.2" y="-3.85" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="PANASONIC_D">
<wire x1="-3.25" y1="3.25" x2="1.55" y2="3.25" width="0.1016" layer="51"/>
<wire x1="1.55" y1="3.25" x2="3.25" y2="1.55" width="0.1016" layer="51"/>
<wire x1="3.25" y1="1.55" x2="3.25" y2="-1.55" width="0.1016" layer="51"/>
<wire x1="3.25" y1="-1.55" x2="1.55" y2="-3.25" width="0.1016" layer="51"/>
<wire x1="1.55" y1="-3.25" x2="-3.25" y2="-3.25" width="0.1016" layer="51"/>
<wire x1="-3.25" y1="-3.25" x2="-3.25" y2="3.25" width="0.1016" layer="51"/>
<wire x1="-3.25" y1="0.95" x2="-3.25" y2="3.25" width="0.1016" layer="21"/>
<wire x1="-3.25" y1="3.25" x2="1.55" y2="3.25" width="0.1016" layer="21"/>
<wire x1="1.55" y1="3.25" x2="3.25" y2="1.55" width="0.1016" layer="21"/>
<wire x1="3.25" y1="1.55" x2="3.25" y2="0.95" width="0.1016" layer="21"/>
<wire x1="3.25" y1="-0.95" x2="3.25" y2="-1.55" width="0.1016" layer="21"/>
<wire x1="3.25" y1="-1.55" x2="1.55" y2="-3.25" width="0.1016" layer="21"/>
<wire x1="1.55" y1="-3.25" x2="-3.25" y2="-3.25" width="0.1016" layer="21"/>
<wire x1="-3.25" y1="-3.25" x2="-3.25" y2="-0.95" width="0.1016" layer="21"/>
<wire x1="2.95" y1="0.95" x2="-2.95" y2="0.95" width="0.1016" layer="21" curve="144.299363"/>
<wire x1="-2.95" y1="-0.95" x2="2.95" y2="-0.95" width="0.1016" layer="21" curve="144.299363"/>
<wire x1="-2.1" y1="2.25" x2="-2.1" y2="-2.2" width="0.1016" layer="51"/>
<circle x="0" y="0" radius="3.1" width="0.1016" layer="51"/>
<smd name="+" x="2.4" y="0" dx="3" dy="1.4" layer="1"/>
<smd name="-" x="-2.4" y="0" dx="3" dy="1.4" layer="1"/>
<text x="-1.75" y="1" size="1.016" layer="25">&gt;NAME</text>
<text x="-1.75" y="-1.975" size="1.016" layer="27">&gt;VALUE</text>
<rectangle x1="-3.65" y1="-0.35" x2="-3.05" y2="0.35" layer="51"/>
<rectangle x1="3.05" y1="-0.35" x2="3.65" y2="0.35" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-2.15" y="2.15"/>
<vertex x="-2.6" y="1.6"/>
<vertex x="-2.9" y="0.9"/>
<vertex x="-3.05" y="0"/>
<vertex x="-2.9" y="-0.95"/>
<vertex x="-2.55" y="-1.65"/>
<vertex x="-2.15" y="-2.15"/>
<vertex x="-2.15" y="2.1"/>
</polygon>
</package>
<package name="CPOL-RADIAL-1000UF-63V">
<wire x1="-3.175" y1="1.905" x2="-4.445" y2="1.905" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="8.001" width="0.2032" layer="21"/>
<pad name="2" x="-3.81" y="0" drill="1.016" diameter="1.6764"/>
<pad name="1" x="3.81" y="0" drill="1.016" diameter="1.651" shape="square"/>
<text x="-2.54" y="8.89" size="0.8128" layer="27">&gt;Value</text>
<text x="-2.54" y="10.16" size="0.8128" layer="25">&gt;Name</text>
</package>
<package name="CPOL-RADIAL-1000UF-25V">
<wire x1="-1.905" y1="1.27" x2="-3.175" y2="1.27" width="0.2032" layer="21"/>
<circle x="0" y="0" radius="5.461" width="0.2032" layer="21"/>
<pad name="2" x="-2.54" y="0" drill="0.7" diameter="1.651"/>
<pad name="1" x="2.54" y="0" drill="0.7" diameter="1.651" shape="square"/>
<text x="-1.905" y="-4.318" size="0.8128" layer="27">&gt;Value</text>
<text x="-0.762" y="2.921" size="0.4064" layer="25">&gt;Name</text>
</package>
<package name="VISHAY_C">
<wire x1="0" y1="1.27" x2="0" y2="1.905" width="0.254" layer="21"/>
<wire x1="-2.0574" y1="4.2926" x2="-2.0574" y2="-4.2926" width="0.127" layer="21"/>
<wire x1="-2.0574" y1="-4.2926" x2="2.0574" y2="-4.2926" width="0.127" layer="21"/>
<wire x1="2.0574" y1="-4.2926" x2="2.0574" y2="4.2926" width="0.127" layer="21"/>
<wire x1="2.0574" y1="4.2926" x2="-2.0574" y2="4.2926" width="0.127" layer="21"/>
<smd name="+" x="0" y="3.048" dx="3.556" dy="1.778" layer="1"/>
<smd name="-" x="0" y="-3.048" dx="3.556" dy="1.778" layer="1"/>
<text x="-1.905" y="4.445" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.905" y="-5.08" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="PANASONIC_H13">
<wire x1="-6.75" y1="6.75" x2="4" y2="6.75" width="0.1016" layer="51"/>
<wire x1="4" y1="6.75" x2="6.75" y2="4" width="0.1016" layer="51"/>
<wire x1="6.75" y1="4" x2="6.75" y2="-4" width="0.1016" layer="51"/>
<wire x1="6.75" y1="-4" x2="4" y2="-6.75" width="0.1016" layer="51"/>
<wire x1="4" y1="-6.75" x2="-6.75" y2="-6.75" width="0.1016" layer="51"/>
<wire x1="-6.75" y1="-6.75" x2="-6.75" y2="6.75" width="0.1016" layer="51"/>
<wire x1="-6.75" y1="1" x2="-6.75" y2="6.75" width="0.2032" layer="21"/>
<wire x1="-6.75" y1="6.75" x2="4" y2="6.75" width="0.2032" layer="21"/>
<wire x1="4" y1="6.75" x2="6.75" y2="4" width="0.2032" layer="21"/>
<wire x1="6.75" y1="4" x2="6.75" y2="1" width="0.2032" layer="21"/>
<wire x1="6.75" y1="-1" x2="6.75" y2="-4" width="0.2032" layer="21"/>
<wire x1="6.75" y1="-4" x2="4" y2="-6.75" width="0.2032" layer="21"/>
<wire x1="4" y1="-6.75" x2="-6.75" y2="-6.75" width="0.2032" layer="21"/>
<wire x1="-6.75" y1="-6.75" x2="-6.75" y2="-1" width="0.2032" layer="21"/>
<wire x1="-6.55" y1="-1.2" x2="6.45" y2="-1.2" width="0.2032" layer="21" curve="156.692742" cap="flat"/>
<wire x1="-6.55" y1="1.2" x2="6.55" y2="1.2" width="0.2032" layer="21" curve="-156.697982" cap="flat"/>
<wire x1="-5" y1="4.25" x2="-4.95" y2="-4.35" width="0.1016" layer="51"/>
<circle x="0" y="0" radius="6.6" width="0.1016" layer="51"/>
<smd name="-" x="-4.7" y="0" dx="5" dy="1.6" layer="1"/>
<smd name="+" x="4.7" y="0" dx="5" dy="1.6" layer="1"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-7.55" y1="-0.45" x2="-6.6" y2="0.45" layer="51"/>
<rectangle x1="6.6" y1="-0.45" x2="7.55" y2="0.45" layer="51"/>
<polygon width="0.1016" layer="51">
<vertex x="-5" y="4.2"/>
<vertex x="-5.75" y="3.15"/>
<vertex x="-6.25" y="2.05"/>
<vertex x="-6.55" y="0.45"/>
<vertex x="-6.55" y="-0.45"/>
<vertex x="-6.35" y="-1.65"/>
<vertex x="-5.75" y="-3.25"/>
<vertex x="-5" y="-4.2"/>
</polygon>
</package>
<package name="EIA6032">
<wire x1="3.2" y1="-1.6" x2="3.2" y2="1.6" width="0.127" layer="21"/>
<wire x1="-2.8" y1="-1.6" x2="3.2" y2="-1.6" width="0.127" layer="21"/>
<wire x1="3.2" y1="1.6" x2="-2.8" y2="1.6" width="0.127" layer="21"/>
<wire x1="-2.8" y1="1.6" x2="-3.4" y2="1" width="0.127" layer="21"/>
<wire x1="-3.4" y1="1" x2="-3.4" y2="-1" width="0.127" layer="21"/>
<wire x1="-2.8" y1="-1.6" x2="-3.4" y2="-1" width="0.127" layer="21"/>
<smd name="P$1" x="-2.3" y="0" dx="1.5" dy="2.4" layer="1"/>
<smd name="P$2" x="2.3" y="0" dx="1.5" dy="2.4" layer="1"/>
</package>
<package name="EN_J2">
<description>Type J2 package for SMD supercap PRT-10317 (p# EEC-EN0F204J2)</description>
<wire x1="-2.5" y1="-3.5" x2="2.5" y2="-3.5" width="0.127" layer="51"/>
<wire x1="-2.1" y1="3.5" x2="2.1" y2="3.5" width="0.127" layer="51"/>
<wire x1="-2.1" y1="3.5" x2="-2.5" y2="3.1" width="0.127" layer="51"/>
<wire x1="-2.5" y1="3.1" x2="-2.5" y2="2.3" width="0.127" layer="51"/>
<wire x1="2.1" y1="3.5" x2="2.5" y2="3.1" width="0.127" layer="51"/>
<wire x1="2.5" y1="3.1" x2="2.5" y2="2.3" width="0.127" layer="51"/>
<wire x1="-2.5" y1="-3.5" x2="-2.5" y2="-2.3" width="0.127" layer="51"/>
<wire x1="2.5" y1="-3.5" x2="2.5" y2="-2.3" width="0.127" layer="51"/>
<wire x1="-2.5908" y1="-2.413" x2="-2.5654" y2="2.4384" width="0.127" layer="21" curve="-91.212564"/>
<wire x1="2.5908" y1="-2.413" x2="2.5654" y2="2.4384" width="0.127" layer="21" curve="86.79344"/>
<wire x1="1.7272" y1="-1.27" x2="1.7272" y2="-2.0828" width="0.127" layer="21"/>
<wire x1="1.3462" y1="-1.6764" x2="2.159" y2="-1.6764" width="0.127" layer="21"/>
<circle x="0" y="0" radius="3.4" width="0.127" layer="51"/>
<smd name="-" x="0" y="2.8" dx="5" dy="2.4" layer="1"/>
<smd name="+" x="0" y="-3.2" dx="5" dy="1.6" layer="1"/>
<text x="-2.28" y="0.66" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.31" y="-1.21" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="EIA3528-KIT">
<description>&lt;h3&gt;EIA3528-KIT&lt;/h3&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has longer pads to make hand soldering easier.&lt;br&gt;</description>
<wire x1="-0.9" y1="-1.6" x2="-3.1" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-3.1" y1="-1.6" x2="-3.1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="-3.1" y1="1.55" x2="-0.9" y2="1.55" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.55" x2="2.7" y2="-1.55" width="0.2032" layer="21"/>
<wire x1="2.7" y1="-1.55" x2="3.1" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="3.1" y1="-1.2" x2="3.1" y2="1.25" width="0.2032" layer="21"/>
<wire x1="3.1" y1="1.25" x2="2.7" y2="1.55" width="0.2032" layer="21"/>
<wire x1="2.7" y1="1.55" x2="1" y2="1.55" width="0.2032" layer="21"/>
<wire x1="0.609" y1="1.311" x2="0.609" y2="-1.286" width="0.4" layer="21" style="longdash"/>
<smd name="C" x="-1.9" y="0" dx="1.7" dy="2.5" layer="1"/>
<smd name="A" x="1.9" y="0" dx="1.7" dy="2.5" layer="1"/>
<text x="-2.27" y="-1.27" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="3.24" y="-1.37" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
</package>
<package name="EIA3216-KIT">
<description>&lt;h3&gt;EIA3216-KIT&lt;/h3&gt;
&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of this package. This package has longer pads to make hand soldering easier.&lt;br&gt;</description>
<wire x1="-1" y1="-1.2" x2="-3" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="-3" y1="-1.2" x2="-3" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-3" y1="1.2" x2="-1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="1" y1="-1.2" x2="2.6" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="2.6" y1="-1.2" x2="3" y2="-0.8" width="0.2032" layer="21"/>
<wire x1="3" y1="-0.8" x2="3" y2="0.8" width="0.2032" layer="21"/>
<wire x1="3" y1="0.8" x2="2.6" y2="1.2" width="0.2032" layer="21"/>
<wire x1="2.6" y1="1.2" x2="1" y2="1.2" width="0.2032" layer="21"/>
<wire x1="0.381" y1="1.016" x2="0.381" y2="-1.016" width="0.127" layer="21"/>
<smd name="C" x="-1.65" y="0" dx="1.9" dy="1.6" layer="1"/>
<smd name="A" x="1.65" y="0" dx="1.9" dy="1.6" layer="1"/>
<text x="-2.54" y="1.381" size="0.4064" layer="25">&gt;NAME</text>
<text x="0.408" y="1.332" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="0603">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="FUSE_5MM">
<wire x1="-3.2258" y1="-10.127" x2="-3.2258" y2="-4.1072" width="0.2032" layer="21"/>
<wire x1="-3.2258" y1="-10.127" x2="3.2258" y2="-10.127" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="-10.127" x2="3.2258" y2="-4.031" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="-4.031" x2="-3.2258" y2="-4.031" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="10.127" x2="3.2258" y2="4.1072" width="0.2032" layer="21"/>
<wire x1="3.2258" y1="10.127" x2="-3.2258" y2="10.127" width="0.2032" layer="21"/>
<wire x1="-3.2258" y1="10.127" x2="-3.2258" y2="4.031" width="0.2032" layer="21"/>
<wire x1="-3.2258" y1="4.031" x2="3.2258" y2="4.031" width="0.2032" layer="21"/>
<wire x1="-2.921" y1="9.812" x2="-2.921" y2="-9.619" width="0.2032" layer="51"/>
<wire x1="-2.921" y1="-9.619" x2="0.254" y2="-9.619" width="0.2032" layer="51"/>
<wire x1="0.254" y1="-9.619" x2="2.794" y2="-9.619" width="0.2032" layer="51"/>
<wire x1="2.794" y1="-9.619" x2="2.794" y2="9.177" width="0.2032" layer="51"/>
<wire x1="2.794" y1="9.177" x2="2.794" y2="9.812" width="0.2032" layer="51"/>
<wire x1="2.794" y1="9.812" x2="-2.921" y2="9.812" width="0.2032" layer="51"/>
<pad name="1" x="0" y="-10" drill="2.54" diameter="3.556"/>
<pad name="2" x="0" y="-4.158" drill="2.54" diameter="3.556"/>
<pad name="4" x="0" y="10" drill="2.54" diameter="3.556" rot="R180"/>
<pad name="3" x="0" y="4.158" drill="2.54" diameter="3.556" rot="R180"/>
</package>
<package name="INDUCTOR-1206">
<wire x1="-1.778" y1="2.032" x2="-3.81" y2="2.032" width="0.127" layer="21"/>
<wire x1="-3.81" y1="2.032" x2="-3.81" y2="-2.032" width="0.127" layer="21"/>
<wire x1="-3.81" y1="-2.032" x2="-1.524" y2="-2.032" width="0.127" layer="21"/>
<wire x1="1.524" y1="2.032" x2="3.81" y2="2.032" width="0.127" layer="21"/>
<wire x1="3.81" y1="2.032" x2="3.81" y2="-2.032" width="0.127" layer="21"/>
<wire x1="3.81" y1="-2.032" x2="1.524" y2="-2.032" width="0.127" layer="21"/>
<smd name="P$1" x="-2.54" y="0" dx="3.556" dy="2.032" layer="1" rot="R90"/>
<smd name="P$2" x="2.54" y="0" dx="3.556" dy="2.032" layer="1" rot="R90"/>
<text x="-1.27" y="2.54" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.27" y="-2.54" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CR54">
<wire x1="2.8" y1="2.98" x2="-2.8" y2="2.98" width="0.127" layer="51"/>
<wire x1="-2.8" y1="2.98" x2="-2.8" y2="-3" width="0.127" layer="51"/>
<wire x1="-2.8" y1="-3" x2="2.8" y2="-3" width="0.127" layer="51"/>
<wire x1="2.8" y1="-3" x2="2.8" y2="2.98" width="0.127" layer="51"/>
<wire x1="-3.048" y1="2.794" x2="-3.048" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-3.048" y1="-3.048" x2="-2.794" y2="-3.302" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="-3.302" x2="2.794" y2="-3.302" width="0.2032" layer="21"/>
<wire x1="2.794" y1="-3.302" x2="3.048" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="3.048" y1="-3.048" x2="3.048" y2="3.048" width="0.2032" layer="21"/>
<wire x1="3.048" y1="3.048" x2="2.794" y2="3.302" width="0.2032" layer="21"/>
<wire x1="2.794" y1="3.302" x2="-2.794" y2="3.302" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="3.302" x2="-3.048" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-3.048" y1="3.048" x2="-3.048" y2="2.794" width="0.2032" layer="21"/>
<circle x="0" y="0.508" radius="0.127" width="0.2032" layer="21"/>
<smd name="P$1" x="0" y="1.92" dx="5.5" dy="2.15" layer="1"/>
<smd name="P$2" x="0" y="-1.92" dx="5.5" dy="2.15" layer="1"/>
<text x="-2.54" y="3.81" size="0.4064" layer="25">&gt;Name</text>
<text x="0" y="3.81" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CDRH125">
<wire x1="-3.5" y1="6" x2="-6" y2="6" width="0.2032" layer="21"/>
<wire x1="-6" y1="6" x2="-6" y2="-6" width="0.2032" layer="21"/>
<wire x1="-6" y1="-6" x2="-3.5" y2="-6" width="0.2032" layer="21"/>
<wire x1="3.5" y1="-6" x2="6" y2="-6" width="0.2032" layer="21"/>
<wire x1="6" y1="-6" x2="6" y2="6" width="0.2032" layer="21"/>
<wire x1="6" y1="6" x2="3.5" y2="6" width="0.2032" layer="21"/>
<smd name="1" x="0" y="4.9" dx="5.4" dy="4" layer="1"/>
<smd name="2" x="0" y="-4.9" dx="5.4" dy="4" layer="1"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.54" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="C0402">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="B82462G">
<wire x1="3.15" y1="3.15" x2="-3.15" y2="3.15" width="0.127" layer="51"/>
<wire x1="-3.15" y1="3.15" x2="-3.15" y2="-3.15" width="0.127" layer="51"/>
<wire x1="-3.15" y1="-3.15" x2="3.15" y2="-3.15" width="0.127" layer="51"/>
<wire x1="3.15" y1="-3.15" x2="3.15" y2="3.15" width="0.127" layer="51"/>
<wire x1="-3.15" y1="3.15" x2="-2" y2="3.15" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="3.15" x2="-3.15" y2="-3.15" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="-3.15" x2="-2" y2="-3.15" width="0.2032" layer="21"/>
<wire x1="2" y1="-3.15" x2="3.15" y2="-3.15" width="0.2032" layer="21"/>
<wire x1="3.15" y1="-3.15" x2="3.15" y2="3.15" width="0.2032" layer="21"/>
<wire x1="3.15" y1="3.15" x2="2" y2="3.15" width="0.2032" layer="21"/>
<smd name="P$1" x="0" y="2.75" dx="2.4" dy="1.5" layer="1"/>
<smd name="P$2" x="0" y="-2.75" dx="2.4" dy="1.5" layer="1"/>
</package>
<package name="CR75">
<wire x1="-1" y1="3.65" x2="7" y2="3.65" width="0.127" layer="21"/>
<wire x1="7" y1="3.65" x2="7" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="3.65" x2="-1" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="7" y2="-3.65" width="0.127" layer="21"/>
<wire x1="7" y1="-3.65" x2="7" y2="-2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="-1" y2="-2.55" width="0.127" layer="21"/>
<smd name="P$1" x="0" y="0" dx="4.7" dy="1.75" layer="1" rot="R90"/>
<smd name="P$2" x="6.05" y="0" dx="4.7" dy="1.75" layer="1" rot="R90"/>
</package>
<package name="1007">
<description>1007 (2518 metric) package</description>
<wire x1="0.9" y1="1.25" x2="-0.9" y2="1.25" width="0.127" layer="51"/>
<wire x1="-0.9" y1="1.25" x2="-0.9" y2="-1.25" width="0.127" layer="51"/>
<wire x1="-0.9" y1="-1.25" x2="0.9" y2="-1.25" width="0.127" layer="51"/>
<wire x1="0.9" y1="-1.25" x2="0.9" y2="1.25" width="0.127" layer="51"/>
<wire x1="-1" y1="-0.4" x2="-1" y2="0.4" width="0.127" layer="21"/>
<wire x1="1" y1="-0.4" x2="1" y2="0.4" width="0.127" layer="21"/>
<smd name="1" x="0" y="1" dx="2" dy="0.8" layer="1"/>
<smd name="2" x="0" y="-1" dx="2" dy="0.8" layer="1"/>
<text x="-1" y="1.6" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1" y="-2" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="COOPER_UP4B">
<wire x1="-6.3" y1="7" x2="-7.5" y2="2" width="0.2032" layer="21"/>
<wire x1="-7.5" y1="2" x2="-7.5" y2="-2" width="0.2032" layer="21"/>
<wire x1="-7.5" y1="-2" x2="-6.3" y2="-7" width="0.2032" layer="21"/>
<wire x1="7.5" y1="2" x2="7.5" y2="-2" width="0.2032" layer="21"/>
<wire x1="7.5" y1="2" x2="6.3" y2="7" width="0.2032" layer="21"/>
<wire x1="7.5" y1="-2" x2="6.3" y2="-7" width="0.2032" layer="21"/>
<smd name="1" x="0" y="8.9" dx="12" dy="4.3" layer="1"/>
<smd name="2" x="0" y="-8.9" dx="12" dy="4.3" layer="1"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.54" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="CDRH3D28">
<wire x1="-2.0503" y1="-0.677" x2="-2.0505" y2="0.6629" width="0.127" layer="51"/>
<wire x1="0.6192" y1="1.9926" x2="-0.7206" y2="1.9927" width="0.127" layer="51"/>
<wire x1="1.9491" y1="0.6627" x2="1.9491" y2="-0.677" width="0.127" layer="51"/>
<wire x1="-2.0505" y1="0.6629" x2="-0.7206" y2="1.9927" width="0.127" layer="51"/>
<wire x1="1.9491" y1="0.6627" x2="0.6192" y2="1.9926" width="0.127" layer="51"/>
<wire x1="1.9503" y1="-0.6737" x2="-0.0506" y2="-2.6748" width="0.127" layer="51"/>
<wire x1="-0.0436" y1="-2.6999" x2="1.2914" y2="-1.3649" width="0.127" layer="21"/>
<wire x1="-0.0436" y1="-2.6999" x2="-1.3785" y2="-1.3649" width="0.127" layer="21"/>
<wire x1="-2.0434" y1="-0.68" x2="-0.0535" y2="-2.6698" width="0.127" layer="51"/>
<wire x1="-1.7435" y1="1" x2="-0.7895" y2="1.954" width="0.127" layer="21"/>
<wire x1="1.6563" y1="0.9999" x2="0.7024" y2="1.9538" width="0.127" layer="21"/>
<smd name="2" x="1.849" y="-0.007" dx="1.5" dy="1.4" layer="1" rot="R270"/>
<smd name="1" x="-1.9504" y="-0.007" dx="1.5" dy="1.4" layer="1" rot="R270"/>
<text x="-2.492" y="2.524" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.492" y="-3.27" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="CR75_V2">
<wire x1="-1" y1="3.65" x2="7" y2="3.65" width="0.127" layer="21"/>
<wire x1="7" y1="3.65" x2="7" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="3.65" x2="-1" y2="2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="7" y2="-3.65" width="0.127" layer="21"/>
<wire x1="7" y1="-3.65" x2="7" y2="-2.55" width="0.127" layer="21"/>
<wire x1="-1" y1="-3.65" x2="-1" y2="-2.55" width="0.127" layer="21"/>
<smd name="P$1" x="-0.254" y="0" dx="2.54" dy="1.524" layer="1" rot="R90"/>
<smd name="P$2" x="6.304" y="0" dx="2.54" dy="1.524" layer="1" rot="R90"/>
</package>
<package name="CDRH2D09">
<description>1.3x1.3mm 1.7mm between. Fits Sumida CDRH2D09, CDRH2D18 inductor</description>
<wire x1="-1.2" y1="0.9" x2="-0.6" y2="1.5" width="0.2032" layer="21"/>
<wire x1="-0.6" y1="1.5" x2="0.6" y2="1.5" width="0.2032" layer="21"/>
<wire x1="0.6" y1="1.5" x2="1.2" y2="0.9" width="0.2032" layer="21"/>
<wire x1="-1.2" y1="-0.9" x2="-0.6783" y2="-1.3739" width="0.2032" layer="21"/>
<wire x1="-0.6783" y1="-1.3739" x2="0.6783" y2="-1.3739" width="0.2032" layer="21" curve="85.420723"/>
<wire x1="0.6783" y1="-1.3739" x2="1.2" y2="-0.9" width="0.2032" layer="21"/>
<wire x1="-1.5" y1="-0.6" x2="-0.7071" y2="-1.3929" width="0.03" layer="51"/>
<wire x1="-0.7071" y1="-1.3929" x2="0.7071" y2="-1.3929" width="0.03" layer="51" curve="90"/>
<wire x1="0.7071" y1="-1.3929" x2="1.5" y2="-0.6" width="0.03" layer="51"/>
<wire x1="1.5" y1="-0.6" x2="1.5" y2="0.6" width="0.03" layer="51"/>
<wire x1="1.5" y1="0.6" x2="0.6" y2="1.5" width="0.03" layer="51"/>
<wire x1="0.6" y1="1.5" x2="-0.6" y2="1.5" width="0.03" layer="51"/>
<wire x1="-0.6" y1="1.5" x2="-1.5" y2="0.6" width="0.03" layer="51"/>
<wire x1="-1.5" y1="0.6" x2="-1.5" y2="-0.6" width="0.03" layer="51"/>
<smd name="P$1" x="-1.5" y="0" dx="1.3" dy="1.3" layer="1" rot="R90"/>
<smd name="P$2" x="1.5" y="0" dx="1.3" dy="1.3" layer="1" rot="R90"/>
<text x="2.8" y="0.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="2.8" y="-1" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="NPI75C">
<wire x1="-3.9" y1="3.5" x2="-3.9" y2="-3.5" width="0.1778" layer="51"/>
<wire x1="-3.9" y1="-3.5" x2="3.9" y2="-3.5" width="0.1778" layer="51"/>
<wire x1="3.9" y1="-3.5" x2="3.9" y2="3.5" width="0.1778" layer="51"/>
<wire x1="0.8" y1="3.5" x2="-0.8" y2="3.5" width="0.1778" layer="21"/>
<wire x1="-0.8" y1="-3.5" x2="0.8" y2="-3.5" width="0.1778" layer="21"/>
<wire x1="3.9" y1="3.5" x2="-3.9" y2="3.5" width="0.1778" layer="51"/>
<smd name="1" x="-2.5" y="0" dx="3" dy="7.5" layer="1"/>
<smd name="2" x="2.5" y="0" dx="3" dy="7.5" layer="1"/>
</package>
<package name="SRU5028">
<wire x1="1.2048" y1="-2.473" x2="2.4476" y2="-1.2048" width="0.2032" layer="21"/>
<wire x1="2.6" y1="-0.9" x2="2.6" y2="0.9" width="0.2032" layer="51"/>
<wire x1="2.473" y1="1.2048" x2="1.2048" y2="2.4476" width="0.2032" layer="21"/>
<wire x1="0.9" y1="2.6" x2="-0.9" y2="2.6" width="0.2032" layer="51"/>
<wire x1="-1.1794" y1="2.4222" x2="-2.4222" y2="1.2048" width="0.2032" layer="21"/>
<wire x1="-2.6" y1="0.9" x2="-2.6" y2="-0.9" width="0.2032" layer="51"/>
<wire x1="-2.3968" y1="-1.1794" x2="-1.2048" y2="-2.4476" width="0.2032" layer="21"/>
<wire x1="-0.9" y1="-2.6" x2="0.9" y2="-2.6" width="0.2032" layer="51"/>
<circle x="1.5" y="0" radius="0.1414" width="0.4" layer="21"/>
<smd name="P$1" x="0" y="2.4" dx="2" dy="1.1" layer="1"/>
<smd name="P$2" x="0" y="-2.4" dx="2" dy="1.1" layer="1"/>
<smd name="1" x="2.4" y="0" dx="2" dy="1.1" layer="1" rot="R90"/>
<smd name="2" x="-2.4" y="0" dx="2" dy="1.1" layer="1" rot="R90"/>
<text x="-2.54" y="3.175" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.81" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SRU1038">
<wire x1="-5" y1="-1.6" x2="-5" y2="1.6" width="0.2032" layer="51"/>
<wire x1="-5" y1="1.6" x2="-1.6" y2="5" width="0.2032" layer="51"/>
<wire x1="-1.6" y1="5" x2="1.6" y2="5" width="0.2032" layer="51"/>
<wire x1="1.6" y1="5" x2="5" y2="1.6" width="0.2032" layer="51"/>
<wire x1="5" y1="1.6" x2="5" y2="-1.6" width="0.2032" layer="51"/>
<wire x1="5" y1="-1.6" x2="1.6" y2="-5" width="0.2032" layer="51"/>
<wire x1="1.6" y1="-5" x2="-1.6" y2="-5" width="0.2032" layer="51"/>
<wire x1="-1.6" y1="-5" x2="-5" y2="-1.6" width="0.2032" layer="51"/>
<wire x1="-4.5" y1="2.1" x2="-1.6" y2="5" width="0.254" layer="21"/>
<wire x1="-1.6" y1="5" x2="1.6" y2="5" width="0.254" layer="21"/>
<wire x1="1.6" y1="-5" x2="-1.6" y2="-5" width="0.254" layer="21"/>
<wire x1="1.6" y1="5" x2="4.5" y2="2.1" width="0.254" layer="21"/>
<wire x1="-4.5" y1="-2.1" x2="-1.6" y2="-5" width="0.254" layer="21"/>
<wire x1="1.6" y1="-5" x2="4.5" y2="-2.1" width="0.254" layer="21"/>
<smd name="2" x="4.5" y="0" dx="1.8" dy="3.6" layer="1"/>
<smd name="1" x="-4.5" y="0" dx="1.8" dy="3.6" layer="1"/>
<text x="-2.54" y="2.54" size="1.016" layer="25">&gt;Name</text>
<text x="-2.54" y="-3.302" size="1.016" layer="27">&gt;Value</text>
</package>
<package name="CR54-KIT">
<wire x1="-3.048" y1="-3.548" x2="-2.794" y2="-3.802" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="-3.802" x2="2.794" y2="-3.802" width="0.2032" layer="21"/>
<wire x1="2.794" y1="-3.802" x2="3.048" y2="-3.548" width="0.2032" layer="21"/>
<wire x1="3.048" y1="-3.548" x2="3.048" y2="3.548" width="0.2032" layer="21"/>
<wire x1="3.048" y1="3.548" x2="2.794" y2="3.802" width="0.2032" layer="21"/>
<wire x1="2.794" y1="3.802" x2="-2.794" y2="3.802" width="0.2032" layer="21"/>
<wire x1="-2.794" y1="3.802" x2="-3.048" y2="3.548" width="0.2032" layer="21"/>
<wire x1="-3.048" y1="3.548" x2="-3.048" y2="-3.548" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="-2.5" x2="-2.5" y2="2.5" width="0.1778" layer="51"/>
<wire x1="-2.5" y1="2.5" x2="2.5" y2="2.5" width="0.1778" layer="51"/>
<wire x1="2.5" y1="2.5" x2="2.5" y2="-2.5" width="0.1778" layer="51"/>
<wire x1="2.5" y1="-2.5" x2="-2.5" y2="-2.5" width="0.1778" layer="51"/>
<circle x="0" y="0.508" radius="0.127" width="0.2032" layer="21"/>
<smd name="P$1" x="0" y="2.17" dx="5" dy="2.65" layer="1"/>
<smd name="P$2" x="0" y="-2.17" dx="5" dy="2.65" layer="1"/>
<text x="-2.54" y="4.01" size="0.4064" layer="25">&gt;Name</text>
<text x="-2.7" y="-4.39" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="1X02">
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
</package>
<package name="SJ_2S">
<description>Small solder jumper with big paste layer so it will short during reflow.</description>
<wire x1="0.8" y1="-1" x2="-0.8" y2="-1" width="0.1524" layer="21"/>
<wire x1="0.8" y1="1" x2="1.1" y2="0.75" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.1" y1="0.75" x2="-0.8" y2="1" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.1" y1="-0.75" x2="-0.8" y2="-1" width="0.1524" layer="21" curve="90.114706"/>
<wire x1="0.8" y1="-1" x2="1.1" y2="-0.75" width="0.1524" layer="21" curve="90"/>
<wire x1="1.1" y1="-0.75" x2="1.1" y2="0.75" width="0.1524" layer="21"/>
<wire x1="-1.1" y1="-0.75" x2="-1.1" y2="0.75" width="0.1524" layer="21"/>
<wire x1="-0.8" y1="1" x2="0.8" y2="1" width="0.1524" layer="21"/>
<smd name="1" x="-0.4119" y="0" dx="0.635" dy="1.27" layer="1"/>
<smd name="2" x="0.4119" y="0" dx="0.635" dy="1.27" layer="1"/>
<text x="-0.9498" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9498" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.2192" y1="-1.143" x2="1.2192" y2="1.143" layer="31"/>
</package>
<package name="1X02_LOCK">
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.81" y1="0.635" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="-0.1778" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.7178" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-0.2921" y1="-0.2921" x2="0.2921" y2="0.2921" layer="51"/>
<rectangle x1="2.2479" y1="-0.2921" x2="2.8321" y2="0.2921" layer="51"/>
</package>
<package name="SJ_2S-NO">
<description>Small solder jumper with no paste layer so it will open after reflow.</description>
<wire x1="0.8" y1="-1" x2="-0.8" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="1" x2="1" y2="0.7" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1" y1="0.7" x2="-0.8" y2="1" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1" y1="-0.7" x2="-0.8" y2="-1" width="0.2032" layer="21" curve="90"/>
<wire x1="0.8" y1="-1" x2="1" y2="-0.7" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.8" y1="1" x2="0.8" y2="1" width="0.2032" layer="21"/>
<smd name="1" x="-0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.908" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.908" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SJ_2S-NO-NS">
<smd name="1" x="-0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0.45" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.908" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.908" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SJ_3">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<smd name="1" x="-0.889" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.889" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="1X03">
<wire x1="3.81" y1="0.635" x2="4.445" y2="1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="1.27" x2="5.715" y2="1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="1.27" x2="6.35" y2="0.635" width="0.2032" layer="21"/>
<wire x1="6.35" y1="-0.635" x2="5.715" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="5.715" y1="-1.27" x2="4.445" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="4.445" y1="-1.27" x2="3.81" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="0.635" y2="1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="1.27" x2="1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-0.635" x2="0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0.635" x2="1.905" y2="1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="1.27" x2="3.175" y2="1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="1.27" x2="3.81" y2="0.635" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-0.635" x2="3.175" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="3.175" y1="-1.27" x2="1.905" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.905" y1="-1.27" x2="1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="0.635" x2="-1.27" y2="-0.635" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="1.27" x2="-1.27" y2="0.635" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-0.635" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="0.635" y1="-1.27" x2="-0.635" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="6.35" y1="0.635" x2="6.35" y2="-0.635" width="0.2032" layer="21"/>
<pad name="1" x="0" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="2" x="2.54" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<pad name="3" x="5.08" y="0" drill="1.016" diameter="1.8796" rot="R90"/>
<text x="-1.3462" y="1.8288" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.27" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="4.826" y1="-0.254" x2="5.334" y2="0.254" layer="51"/>
<rectangle x1="2.286" y1="-0.254" x2="2.794" y2="0.254" layer="51"/>
<rectangle x1="-0.254" y1="-0.254" x2="0.254" y2="0.254" layer="51"/>
</package>
<package name="SJ_3_PASTE1&amp;2">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<wire x1="0.1905" y1="0.508" x2="-1.016" y2="0.508" width="0.127" layer="51"/>
<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.127" layer="51"/>
<wire x1="-1.016" y1="-0.508" x2="0.1905" y2="-0.508" width="0.127" layer="51"/>
<wire x1="0.1905" y1="-0.508" x2="0.1905" y2="0.508" width="0.127" layer="51"/>
<smd name="1" x="-0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-0.762" y="-0.4445" size="0.254" layer="51" rot="R40">PASTE</text>
<rectangle x1="-1.4478" y1="-1.016" x2="0.2794" y2="0.9398" layer="31"/>
</package>
<package name="SJ_3_PASTE2&amp;3">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<wire x1="1.016" y1="0.508" x2="-0.1905" y2="0.508" width="0.127" layer="51"/>
<wire x1="-0.1905" y1="0.508" x2="-0.1905" y2="-0.508" width="0.127" layer="51"/>
<wire x1="-0.1905" y1="-0.508" x2="1.016" y2="-0.508" width="0.127" layer="51"/>
<wire x1="1.016" y1="-0.508" x2="1.016" y2="0.508" width="0.127" layer="51"/>
<smd name="1" x="-0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
<text x="0.0635" y="-0.4445" size="0.254" layer="51" rot="R40">PASTE</text>
<rectangle x1="-0.2794" y1="-1.016" x2="1.4224" y2="0.9906" layer="31"/>
</package>
<package name="AXIAL-0.3">
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="3.81" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.032" y="-0.381" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.3EZ">
<description>This is the "EZ" version of the standard .3" spaced resistor package.&lt;br&gt;
It has a reduced top mask to make it harder to install upside-down.</description>
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<pad name="P$2" x="3.81" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.032" y="-0.381" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
<circle x="-3.81" y="0" radius="0.508" width="0" layer="29"/>
<circle x="3.81" y="0" radius="0.523634375" width="0" layer="29"/>
<circle x="-3.81" y="0" radius="1.02390625" width="0" layer="30"/>
<circle x="3.81" y="0" radius="1.04726875" width="0" layer="30"/>
</package>
<package name="R2010">
<description>&lt;b&gt;RESISTOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="51"/>
<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="51"/>
<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
<wire x1="-1.027" y1="1.245" x2="1.027" y2="1.245" width="0.1524" layer="21"/>
<wire x1="-1.002" y1="-1.245" x2="1.016" y2="-1.245" width="0.1524" layer="21"/>
<smd name="1" x="-2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
<smd name="2" x="2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
<text x="-2.54" y="1.5875" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.032" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
</package>
<package name="0603-RES">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2286" y1="-0.381" x2="0.2286" y2="0.381" layer="21"/>
</package>
<package name="0402-RES">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2032" y1="-0.3556" x2="0.2032" y2="0.3556" layer="21"/>
</package>
<package name="1/6W-RES">
<description>1/6W Thru-hole Resistor - *UNPROVEN*</description>
<wire x1="-1.55" y1="0.85" x2="-1.55" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="-1.55" y1="-0.85" x2="1.55" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="1.55" y1="-0.85" x2="1.55" y2="0.85" width="0.2032" layer="21"/>
<wire x1="1.55" y1="0.85" x2="-1.55" y2="0.85" width="0.2032" layer="21"/>
<pad name="1" x="-2.5" y="0" drill="0.762"/>
<pad name="2" x="2.5" y="0" drill="0.762"/>
<text x="-1.2662" y="0.9552" size="0.6096" layer="25">&gt;NAME</text>
<text x="-1.423" y="-0.4286" size="0.8128" layer="21" ratio="15">&gt;VALUE</text>
</package>
<package name="R2512">
<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="51"/>
<smd name="1" x="-2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
<smd name="2" x="2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
<text x="-2.54" y="1.905" size="1.27" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
</package>
<package name="AXIAL-0.4">
<description>1/4W Resistor, 0.4" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-3.15" y1="-1.2" x2="-3.15" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="1.2" x2="3.15" y2="1.2" width="0.2032" layer="21"/>
<wire x1="3.15" y1="1.2" x2="3.15" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="3.15" y1="-1.2" x2="-3.15" y2="-1.2" width="0.2032" layer="21"/>
<pad name="P$1" x="-5.08" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="5.08" y="0" drill="0.9" diameter="1.8796"/>
<text x="-3.175" y="1.905" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-2.286" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.5">
<description>1/2W Resistor, 0.5" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-4.5" y1="-1.65" x2="-4.5" y2="1.65" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="1.65" x2="4.5" y2="1.65" width="0.2032" layer="21"/>
<wire x1="4.5" y1="1.65" x2="4.5" y2="-1.65" width="0.2032" layer="21"/>
<wire x1="4.5" y1="-1.65" x2="-4.5" y2="-1.65" width="0.2032" layer="21"/>
<pad name="P$1" x="-6.35" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="6.35" y="0" drill="0.9" diameter="1.8796"/>
<text x="-4.445" y="2.54" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-3.429" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.6">
<description>1W Resistor, 0.6" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-5.75" y1="-2.25" x2="-5.75" y2="2.25" width="0.2032" layer="21"/>
<wire x1="-5.75" y1="2.25" x2="5.75" y2="2.25" width="0.2032" layer="21"/>
<wire x1="5.75" y1="2.25" x2="5.75" y2="-2.25" width="0.2032" layer="21"/>
<wire x1="5.75" y1="-2.25" x2="-5.75" y2="-2.25" width="0.2032" layer="21"/>
<pad name="P$1" x="-7.62" y="0" drill="1.2" diameter="1.8796"/>
<pad name="P$2" x="7.62" y="0" drill="1.2" diameter="1.8796"/>
<text x="-5.715" y="3.175" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-4.064" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.8">
<description>2W Resistor, 0.8" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-7.75" y1="-2.5" x2="-7.75" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-7.75" y1="2.5" x2="7.75" y2="2.5" width="0.2032" layer="21"/>
<wire x1="7.75" y1="2.5" x2="7.75" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="7.75" y1="-2.5" x2="-7.75" y2="-2.5" width="0.2032" layer="21"/>
<pad name="P$1" x="-10.16" y="0" drill="1.2" diameter="1.8796"/>
<pad name="P$2" x="10.16" y="0" drill="1.2" diameter="1.8796"/>
<text x="-7.62" y="3.175" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-5.969" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.3-KIT">
<description>&lt;h3&gt;AXIAL-0.3-KIT&lt;/h3&gt;

Commonly used for 1/4W through-hole resistors. 0.3" pitch between holes.&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of the AXIAL-0.3 package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="-2.54" y1="1.27" x2="2.54" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="1.27" x2="2.54" y2="0" width="0.254" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="-1.27" x2="-2.54" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="0" width="0.254" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.254" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.254" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="1.016" diameter="2.032" stop="no"/>
<pad name="P$2" x="3.81" y="0" drill="1.016" diameter="2.032" stop="no"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.159" y="-0.762" size="1.27" layer="21" font="vector" ratio="15">&gt;Value</text>
<polygon width="0.127" layer="30">
<vertex x="3.8201" y="-0.9449" curve="-90"/>
<vertex x="2.8652" y="-0.0152" curve="-90.011749"/>
<vertex x="3.8176" y="0.9602" curve="-90"/>
<vertex x="4.7676" y="-0.0178" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="3.8176" y="-0.4369" curve="-90.012891"/>
<vertex x="3.3731" y="-0.0127" curve="-90"/>
<vertex x="3.8176" y="0.4546" curve="-90"/>
<vertex x="4.2595" y="-0.0025" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-3.8075" y="-0.9525" curve="-90"/>
<vertex x="-4.7624" y="-0.0228" curve="-90.011749"/>
<vertex x="-3.81" y="0.9526" curve="-90"/>
<vertex x="-2.86" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-3.81" y="-0.4445" curve="-90.012891"/>
<vertex x="-4.2545" y="-0.0203" curve="-90"/>
<vertex x="-3.81" y="0.447" curve="-90"/>
<vertex x="-3.3681" y="-0.0101" curve="-90.012967"/>
</polygon>
</package>
<package name="0603-ARV">
<description>&lt;b&gt;Chip Resistor Array&lt;/b&gt; size 4 × 0603&lt;p&gt;
convex termination - Phycomp Components&lt;br&gt;
Source: RS Components</description>
<wire x1="-1.55" y1="0.45" x2="1.55" y2="0.45" width="0.1016" layer="51"/>
<wire x1="1.55" y1="0.45" x2="1.55" y2="-0.45" width="0.1016" layer="51"/>
<wire x1="-1.55" y1="-0.45" x2="-1.55" y2="0.45" width="0.1016" layer="51"/>
<wire x1="1.55" y1="-0.45" x2="-1.55" y2="-0.45" width="0.1016" layer="51"/>
<smd name="1" x="-1.2" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="2" x="-0.4" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="3" x="0.4" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="4" x="1.2" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="5" x="1.2" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="6" x="0.4" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="7" x="-0.4" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="8" x="-1.2" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<text x="-1.905" y="-2.54" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.905" y="1.27" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<rectangle x1="-1.6" y1="0.7" x2="-0.9" y2="0.8" layer="51"/>
<rectangle x1="-0.7" y1="0.7" x2="-0.1" y2="0.8" layer="51"/>
<rectangle x1="0.1" y1="0.7" x2="0.7" y2="0.8" layer="51"/>
<rectangle x1="0.9" y1="0.7" x2="1.6" y2="0.8" layer="51"/>
<rectangle x1="-1.5" y1="0.5" x2="-0.95" y2="0.7" layer="51"/>
<rectangle x1="-0.65" y1="0.5" x2="-0.15" y2="0.7" layer="51"/>
<rectangle x1="0.15" y1="0.5" x2="0.65" y2="0.7" layer="51"/>
<rectangle x1="0.95" y1="0.5" x2="1.5" y2="0.7" layer="51"/>
<rectangle x1="0.9" y1="-0.8" x2="1.6" y2="-0.7" layer="51"/>
<rectangle x1="0.1" y1="-0.8" x2="0.7" y2="-0.7" layer="51"/>
<rectangle x1="-0.7" y1="-0.8" x2="-0.1" y2="-0.7" layer="51"/>
<rectangle x1="-1.6" y1="-0.8" x2="-0.9" y2="-0.7" layer="51"/>
<rectangle x1="0.95" y1="-0.7" x2="1.5" y2="-0.5" layer="51"/>
<rectangle x1="0.15" y1="-0.7" x2="0.65" y2="-0.5" layer="51"/>
<rectangle x1="-0.65" y1="-0.7" x2="-0.15" y2="-0.5" layer="51"/>
<rectangle x1="-1.5" y1="-0.7" x2="-0.95" y2="-0.5" layer="51"/>
</package>
<package name="RPACK-SIP-PTH-5">
<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.2032" layer="21" curve="-180"/>
<wire x1="1.27" y1="-12.7" x2="-1.27" y2="-12.7" width="0.2032" layer="21" curve="-180"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-12.7" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-12.7" x2="1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-1.27" x2="1.27" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="-1.27" width="0.2032" layer="21"/>
<pad name="P$1" x="0" y="0" drill="0.8" shape="square"/>
<pad name="P$2" x="0" y="-2.54" drill="0.8"/>
<pad name="P$3" x="0" y="-5.08" drill="0.8"/>
<pad name="P$4" x="0" y="-7.62" drill="0.8"/>
<pad name="P$5" x="0" y="-10.16" drill="0.8"/>
<pad name="P$6" x="0" y="-12.7" drill="0.8"/>
<text x="-1.778" y="-12.7" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="-3.048" y="0" size="1.27" layer="27" rot="R270">&gt;VALUE</text>
</package>
<package name="SJ_2S-TRACE">
<description>Solder jumper, small, shorted with trace. No paste layer. Trace is cuttable.</description>
<wire x1="0.8255" y1="-1.016" x2="-0.8255" y2="-1.016" width="0.2032" layer="21"/>
<wire x1="0.8255" y1="1.016" x2="1.0795" y2="0.762" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.0795" y1="0.762" x2="-0.8255" y2="1.016" width="0.2032" layer="21" curve="-90"/>
<wire x1="-1.0795" y1="-0.762" x2="-0.8255" y2="-1.016" width="0.2032" layer="21" curve="90"/>
<wire x1="0.8255" y1="-1.016" x2="1.0795" y2="-0.762" width="0.2032" layer="21" curve="90"/>
<wire x1="-0.8255" y1="1.016" x2="0.8255" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-0.381" y1="0" x2="0.381" y2="0" width="0.2032" layer="1"/>
<smd name="1" x="-0.508" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0.508" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.9525" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SJ_2S-NOTRACE">
<wire x1="0.8" y1="-1" x2="-0.8" y2="-1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="1" x2="1" y2="0.7" width="0.2032" layer="21" curve="-90.076445"/>
<wire x1="-1" y1="0.7" x2="-0.8" y2="1" width="0.2032" layer="21" curve="-90.03821"/>
<wire x1="-1" y1="-0.7" x2="-0.8" y2="-1" width="0.2032" layer="21" curve="90.03821"/>
<wire x1="0.8" y1="-1" x2="1" y2="-0.7" width="0.2032" layer="21" curve="90.03821"/>
<wire x1="-0.8" y1="1" x2="0.8" y2="1" width="0.2032" layer="21"/>
<smd name="1" x="-0.4009" y="0" dx="0.635" dy="1.27" layer="1" rot="R180" cream="no"/>
<smd name="2" x="0.4127" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-0.9525" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-1.651" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.016" y1="-1.016" x2="1.016" y2="1.016" layer="31"/>
</package>
<package name="SJ_2W">
<description>&lt;b&gt;Solder jumper&lt;/b&gt;</description>
<wire x1="3.175" y1="-1.524" x2="-3.175" y2="-1.524" width="0.1524" layer="21"/>
<wire x1="3.175" y1="1.524" x2="3.429" y2="1.27" width="0.1524" layer="21" curve="-90"/>
<wire x1="-3.429" y1="1.27" x2="-3.175" y2="1.524" width="0.1524" layer="21" curve="-90"/>
<wire x1="-3.429" y1="-1.27" x2="-3.175" y2="-1.524" width="0.1524" layer="21" curve="90"/>
<wire x1="3.175" y1="-1.524" x2="3.429" y2="-1.27" width="0.1524" layer="21" curve="90"/>
<wire x1="3.429" y1="-1.27" x2="3.429" y2="1.27" width="0.1524" layer="21"/>
<wire x1="-3.429" y1="-1.27" x2="-3.429" y2="1.27" width="0.1524" layer="21"/>
<wire x1="-3.175" y1="1.524" x2="3.175" y2="1.524" width="0.1524" layer="21"/>
<wire x1="2.794" y1="0" x2="3.302" y2="0" width="0.1524" layer="51"/>
<wire x1="-2.794" y1="0" x2="-3.302" y2="0" width="0.1524" layer="51"/>
<wire x1="0" y1="0.762" x2="0" y2="1.397" width="0.1524" layer="51"/>
<wire x1="0" y1="-1.397" x2="0" y2="-0.762" width="0.1524" layer="51"/>
<wire x1="2.032" y1="0.127" x2="2.032" y2="-0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<wire x1="-2.032" y1="-0.127" x2="-2.032" y2="0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<smd name="1" x="-2.54" y="0" dx="1.27" dy="2.54" layer="1"/>
<smd name="2" x="0" y="0" dx="1.27" dy="2.54" layer="1"/>
<smd name="3" x="2.54" y="0" dx="1.27" dy="2.54" layer="1"/>
<text x="-3.429" y="1.778" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<rectangle x1="-0.508" y1="-0.762" x2="0.508" y2="0.762" layer="51"/>
</package>
<package name="SJ_2">
<description>&lt;b&gt;Solder jumper&lt;/b&gt;</description>
<wire x1="2.159" y1="-1.016" x2="-2.159" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="2.159" y1="1.016" x2="2.413" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-2.413" y1="0.762" x2="-2.159" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-2.413" y1="-0.762" x2="-2.159" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="2.159" y1="-1.016" x2="2.413" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="2.413" y1="-0.762" x2="2.413" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-2.413" y1="-0.762" x2="-2.413" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-2.159" y1="1.016" x2="2.159" y2="1.016" width="0.1524" layer="21"/>
<wire x1="1.778" y1="0" x2="2.286" y2="0" width="0.1524" layer="51"/>
<wire x1="-1.778" y1="0" x2="-2.286" y2="0" width="0.1524" layer="51"/>
<wire x1="0" y1="0.762" x2="0" y2="1.016" width="0.1524" layer="51"/>
<wire x1="0" y1="-1.016" x2="0" y2="-0.762" width="0.1524" layer="51"/>
<wire x1="1.016" y1="0.127" x2="1.016" y2="-0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<wire x1="-1.016" y1="-0.127" x2="-1.016" y2="0.127" width="1.27" layer="51" curve="-180" cap="flat"/>
<smd name="1" x="-1.524" y="0" dx="1.1684" dy="1.6002" layer="1"/>
<smd name="2" x="0" y="0" dx="1.1684" dy="1.6002" layer="1"/>
<smd name="3" x="1.524" y="0" dx="1.1684" dy="1.6002" layer="1"/>
<text x="-2.413" y="1.27" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-0.1001" y="0" size="0.02" layer="27">&gt;VALUE</text>
<rectangle x1="-0.508" y1="-0.762" x2="0.508" y2="0.762" layer="51"/>
</package>
<package name="PAD.02X.02">
<smd name="P$1" x="0" y="0" dx="0.508" dy="0.508" layer="1"/>
</package>
<package name="PAD.03X.03">
<smd name="P$1" x="0" y="0" dx="0.762" dy="0.762" layer="1" roundness="100" cream="no"/>
</package>
<package name="PAD.03X.05">
<smd name="P$1" x="0" y="0" dx="1.27" dy="1.27" layer="1" roundness="100" cream="no"/>
</package>
<package name="GND_CONNECT">
<smd name="1" x="-1.016" y="0" dx="1.016" dy="1.016" layer="1"/>
<smd name="2" x="-1.016" y="-1.27" dx="1.016" dy="1.016" layer="1"/>
<smd name="3" x="0.254" y="-0.635" dx="1.016" dy="1.016" layer="1"/>
<text x="-0.889" y="1.27" size="1.27" layer="25">&gt;NAME</text>
<text x="-1.143" y="-4.064" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="DR1030">
<description>For Coiltronics/Cooper DR1030 series inductors</description>
<wire x1="5.15" y1="5.25" x2="5.15" y2="-5.25" width="0.127" layer="21"/>
<wire x1="-5.15" y1="-5.25" x2="-5.15" y2="5.25" width="0.127" layer="21"/>
<smd name="2" x="0" y="-4.45" dx="3.3" dy="1.6" layer="1"/>
<smd name="1" x="0" y="4.45" dx="3.3" dy="1.6" layer="1"/>
<wire x1="5.15" y1="-5.25" x2="2" y2="-5.25" width="0.127" layer="21"/>
<wire x1="-5.15" y1="-5.25" x2="-2" y2="-5.25" width="0.127" layer="21"/>
<wire x1="-5.15" y1="5.25" x2="-2" y2="5.25" width="0.127" layer="21"/>
<wire x1="5.15" y1="5.25" x2="2" y2="5.25" width="0.127" layer="21"/>
<text x="-3.81" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.81" y="-1.27" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="VLF4012A">
<wire x1="-1.85" y1="0.925" x2="-0.925" y2="1.85" width="0.127" layer="21"/>
<wire x1="-0.925" y1="1.85" x2="0.925" y2="1.85" width="0.127" layer="21"/>
<wire x1="0.925" y1="1.85" x2="1.85" y2="0.925" width="0.127" layer="21"/>
<wire x1="1.85" y1="0.925" x2="1.85" y2="-0.925" width="0.127" layer="21"/>
<wire x1="1.85" y1="-0.925" x2="0.925" y2="-1.85" width="0.127" layer="21"/>
<wire x1="-0.925" y1="-1.85" x2="-1.85" y2="-0.925" width="0.127" layer="21"/>
<wire x1="-1.85" y1="0.925" x2="-1.85" y2="-0.925" width="0.127" layer="21"/>
<wire x1="-0.925" y1="-1.85" x2="0.925" y2="-1.85" width="0.127" layer="21"/>
<smd name="P$1" x="-1.9" y="0" dx="0.9" dy="1.3" layer="1"/>
<smd name="P$2" x="1.9" y="0" dx="0.9" dy="1.3" layer="1"/>
</package>
<package name="RLB0912">
<circle x="0" y="0" radius="4.445" width="0.2032" layer="21"/>
<pad name="2" x="-2.5019" y="0" drill="0.8128" diameter="1.651"/>
<text x="-1.905" y="-3.048" size="0.8128" layer="27">&gt;Value</text>
<text x="-0.762" y="2.921" size="0.4064" layer="25">&gt;Name</text>
<pad name="1" x="2.5019" y="0" drill="0.8128" diameter="1.651"/>
</package>
<package name="SRN6045">
<smd name="1" x="-2.175" y="-0.175" dx="6" dy="2.5" layer="1" rot="R90"/>
<smd name="2" x="2.125" y="-0.175" dx="6" dy="2.5" layer="1" rot="R90"/>
<wire x1="-2.175" y1="-3.175" x2="-3.175" y2="-2.175" width="0.127" layer="51"/>
<wire x1="-3.175" y1="-2.175" x2="-3.175" y2="1.825" width="0.127" layer="51"/>
<wire x1="-3.175" y1="1.825" x2="-2.175" y2="2.825" width="0.127" layer="51"/>
<wire x1="-2.175" y1="2.825" x2="2.125" y2="2.825" width="0.127" layer="51"/>
<wire x1="2.125" y1="2.825" x2="3.125" y2="1.825" width="0.127" layer="51"/>
<wire x1="3.125" y1="1.825" x2="3.125" y2="-2.175" width="0.127" layer="51"/>
<wire x1="3.125" y1="-2.175" x2="2.125" y2="-3.175" width="0.127" layer="51"/>
<wire x1="2.125" y1="-3.175" x2="-2.175" y2="-3.175" width="0.127" layer="51"/>
<text x="-4.175" y="3.825" size="1.27" layer="25">&gt;NAME</text>
<text x="-4.175" y="-5.175" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="2PT_GND_TIE">
<smd name="P$1" x="0" y="0.635" dx="1.27" dy="0.635" layer="1" stop="no" cream="no"/>
<smd name="P$2" x="0" y="-0.635" dx="1.27" dy="0.635" layer="1" stop="no" cream="no"/>
<wire x1="0" y1="0.635" x2="0" y2="-0.635" width="0.4064" layer="1"/>
</package>
<package name="SDR0403">
<description>Footprint for Bourns SDR0403 family inductors</description>
<smd name="P$1" x="-1.65" y="0" dx="4.5" dy="1.8" layer="1" rot="R90"/>
<smd name="P$2" x="1.65" y="0" dx="4.5" dy="1.8" layer="1" rot="R90"/>
<wire x1="-0.5" y1="2" x2="0.5" y2="2" width="0.127" layer="21"/>
<wire x1="-0.5" y1="-2" x2="0.5" y2="-2" width="0.127" layer="21"/>
<text x="-0.762" y="-0.254" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-0.889" y="1.016" size="0.4064" layer="25">&gt;NAME</text>
</package>
<package name="SJ_3_PASTE1&amp;2&amp;3">
<wire x1="1.27" y1="-1.016" x2="-1.27" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="1.27" y1="1.016" x2="1.524" y2="0.762" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="0.762" x2="-1.27" y2="1.016" width="0.1524" layer="21" curve="-90"/>
<wire x1="-1.524" y1="-0.762" x2="-1.27" y2="-1.016" width="0.1524" layer="21" curve="90"/>
<wire x1="1.27" y1="-1.016" x2="1.524" y2="-0.762" width="0.1524" layer="21" curve="90"/>
<wire x1="1.524" y1="-0.762" x2="1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.524" y1="-0.762" x2="-1.524" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="1.016" x2="1.27" y2="1.016" width="0.1524" layer="21"/>
<wire x1="1.016" y1="0.508" x2="-1.016" y2="0.508" width="0.127" layer="51"/>
<wire x1="-1.016" y1="0.508" x2="-1.016" y2="-0.508" width="0.127" layer="51"/>
<wire x1="-1.016" y1="-0.508" x2="1.016" y2="-0.508" width="0.127" layer="51"/>
<wire x1="1.016" y1="-0.508" x2="1.016" y2="0.508" width="0.127" layer="51"/>
<smd name="1" x="-0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="2" x="0" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<smd name="3" x="0.8128" y="0" dx="0.635" dy="1.27" layer="1" cream="no"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="-1.905" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-0.33138125" y="-0.4445" size="0.254" layer="51" rot="R40">PASTE</text>
<rectangle x1="-1.4224" y1="-0.9906" x2="1.4224" y2="0.9906" layer="31"/>
</package>
</packages>
<symbols>
<symbol name="CAP">
<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
<text x="1.524" y="-2.159" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="2" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="CAP_ADJ">
<wire x1="-2.032" y1="-0.762" x2="2.032" y2="3.302" width="0.254" layer="94"/>
<wire x1="1.016" y1="3.302" x2="2.032" y2="3.302" width="0.254" layer="94"/>
<wire x1="2.032" y1="3.302" x2="2.032" y2="2.286" width="0.254" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="2.032" width="0.1524" layer="94"/>
<wire x1="0" y1="0" x2="0" y2="0.508" width="0.1524" layer="94"/>
<text x="1.524" y="2.921" size="1.778" layer="95">&gt;NAME</text>
<text x="1.524" y="-2.159" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-2.032" y1="0.508" x2="2.032" y2="1.016" layer="94"/>
<rectangle x1="-2.032" y1="1.524" x2="2.032" y2="2.032" layer="94"/>
<pin name="3" x="0" y="5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="4" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="CAP_POL">
<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="-1.016" x2="0" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="0" y1="-1" x2="2.4892" y2="-1.8542" width="0.254" layer="94" curve="-37.878202" cap="flat"/>
<wire x1="-2.4669" y1="-1.8504" x2="0" y2="-1.0161" width="0.254" layer="94" curve="-37.376341" cap="flat"/>
<text x="1.016" y="0.635" size="1.778" layer="95">&gt;NAME</text>
<text x="1.016" y="-4.191" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-2.253" y1="0.668" x2="-1.364" y2="0.795" layer="94"/>
<rectangle x1="-1.872" y1="0.287" x2="-1.745" y2="1.176" layer="94"/>
<pin name="+" x="0" y="2.54" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="-" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="FB">
<wire x1="-2.54" y1="-2.54" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="2.54" x2="-2.54" y2="2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="2.54" x2="-2.54" y2="-2.54" width="0.254" layer="94"/>
<text x="-4.064" y="3.302" size="1.778" layer="95">&gt;Name</text>
<text x="-4.572" y="-5.08" size="1.778" layer="96">&gt;Value</text>
<pin name="P$1" x="5.08" y="0" visible="off" length="short" rot="R180"/>
<pin name="P$2" x="-5.08" y="0" visible="off" length="short"/>
</symbol>
<symbol name="FUSE">
<wire x1="0" y1="0" x2="-5.08" y2="0" width="0.254" layer="94" curve="-180"/>
<wire x1="0" y1="0" x2="5.08" y2="0" width="0.254" layer="94" curve="-180"/>
<text x="-10.16" y="2.54" size="1.27" layer="95">&gt;Name</text>
<text x="5.08" y="2.54" size="1.27" layer="96">&gt;Value</text>
<pin name="1" x="-10.16" y="0" length="middle"/>
<pin name="2" x="10.16" y="0" length="middle" rot="R180"/>
</symbol>
<symbol name="INDUCTOR">
<wire x1="0" y1="5.08" x2="1.27" y2="3.81" width="0.254" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="2.54" x2="1.27" y2="3.81" width="0.254" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="2.54" x2="1.27" y2="1.27" width="0.254" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="0" x2="1.27" y2="1.27" width="0.254" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="0" x2="1.27" y2="-1.27" width="0.254" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="-2.54" x2="1.27" y2="-1.27" width="0.254" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="-2.54" x2="1.27" y2="-3.81" width="0.254" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="-5.08" x2="1.27" y2="-3.81" width="0.254" layer="94" curve="90" cap="flat"/>
<text x="2.54" y="5.08" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="0" y="7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R270"/>
<pin name="2" x="0" y="-7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R90"/>
</symbol>
<symbol name="JUMPER-2">
<wire x1="0" y1="0" x2="0" y2="1.27" width="0.1524" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.27" width="0.4064" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="1.27" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.54" x2="2.54" y2="1.27" width="0.4064" layer="94"/>
<wire x1="-0.635" y1="0" x2="3.175" y2="0" width="0.4064" layer="94"/>
<wire x1="3.175" y1="0" x2="3.175" y2="0.635" width="0.4064" layer="94"/>
<wire x1="3.175" y1="0.635" x2="-0.635" y2="0.635" width="0.4064" layer="94"/>
<wire x1="-0.635" y1="0.635" x2="-0.635" y2="0" width="0.4064" layer="94"/>
<text x="-1.27" y="0" size="1.778" layer="95" rot="R90">&gt;NAME</text>
<text x="5.715" y="0" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
<pin name="1" x="0" y="-2.54" visible="pad" length="short" direction="pas" rot="R90"/>
<pin name="2" x="2.54" y="-2.54" visible="pad" length="short" direction="pas" rot="R90"/>
</symbol>
<symbol name="JUMPER-3">
<wire x1="0" y1="0" x2="0" y2="1.27" width="0.1524" layer="94"/>
<wire x1="0" y1="2.54" x2="0" y2="1.27" width="0.4064" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="1.27" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.54" x2="2.54" y2="1.27" width="0.4064" layer="94"/>
<wire x1="-0.635" y1="0" x2="2.54" y2="0" width="0.4064" layer="94"/>
<wire x1="2.54" y1="0" x2="5.08" y2="0" width="0.4064" layer="94"/>
<wire x1="5.08" y1="0" x2="5.715" y2="0" width="0.4064" layer="94"/>
<wire x1="5.715" y1="0" x2="5.715" y2="0.635" width="0.4064" layer="94"/>
<wire x1="5.715" y1="0.635" x2="-0.635" y2="0.635" width="0.4064" layer="94"/>
<wire x1="-0.635" y1="0.635" x2="-0.635" y2="0" width="0.4064" layer="94"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="1.27" width="0.4064" layer="94"/>
<wire x1="5.08" y1="0" x2="5.08" y2="1.27" width="0.1524" layer="94"/>
<text x="-1.27" y="0" size="1.778" layer="95" rot="R90">&gt;NAME</text>
<text x="8.255" y="0" size="1.778" layer="96" rot="R90">&gt;VALUE</text>
<pin name="1" x="0" y="-2.54" visible="off" length="short" direction="pas" rot="R90"/>
<pin name="2" x="2.54" y="-2.54" visible="off" length="short" direction="pas" rot="R90"/>
<pin name="3" x="5.08" y="-2.54" visible="off" length="short" direction="pas" rot="R90"/>
</symbol>
<symbol name="RESISTOR">
<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.1524" layer="94"/>
<text x="-3.81" y="1.4986" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.81" y="-3.302" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="RESISTOR-1">
<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.1524" layer="94"/>
<text x="-3.81" y="1.4986" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.81" y="-3.302" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="-5.08" y="0" visible="pad" length="short" direction="pas" swaplevel="1"/>
<pin name="2" x="5.08" y="0" visible="pad" length="short" direction="pas" swaplevel="1" rot="R180"/>
</symbol>
<symbol name="RPACK-BUSSED-5">
<wire x1="4.572" y1="0" x2="4.953" y2="1.016" width="0.1524" layer="94"/>
<wire x1="4.953" y1="1.016" x2="5.588" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-1.016" x2="6.223" y2="1.016" width="0.1524" layer="94"/>
<wire x1="6.223" y1="1.016" x2="6.858" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-1.016" x2="7.493" y2="1.016" width="0.1524" layer="94"/>
<wire x1="7.493" y1="1.016" x2="8.128" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-1.016" x2="8.763" y2="1.016" width="0.1524" layer="94"/>
<wire x1="8.763" y1="1.016" x2="9.398" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-1.016" x2="9.652" y2="0" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-2.54" x2="4.953" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-1.524" x2="5.588" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-3.556" x2="6.223" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-1.524" x2="6.858" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-3.556" x2="7.493" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-1.524" x2="8.128" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-3.556" x2="8.763" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-1.524" x2="9.398" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-3.556" x2="9.652" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-5.08" x2="4.953" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-4.064" x2="5.588" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-6.096" x2="6.223" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-4.064" x2="6.858" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-6.096" x2="7.493" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-4.064" x2="8.128" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-6.096" x2="8.763" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-4.064" x2="9.398" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-6.096" x2="9.652" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-7.62" x2="4.953" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-6.604" x2="5.588" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-8.636" x2="6.223" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-6.604" x2="6.858" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-8.636" x2="7.493" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-6.604" x2="8.128" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-8.636" x2="8.763" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-6.604" x2="9.398" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-8.636" x2="9.652" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-10.16" x2="4.953" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-9.144" x2="5.588" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-11.176" x2="6.223" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-9.144" x2="6.858" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-11.176" x2="7.493" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-9.144" x2="8.128" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-11.176" x2="8.763" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-9.144" x2="9.398" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-11.176" x2="9.652" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0" x2="4.572" y2="0" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="4.572" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="4.572" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-7.62" x2="2.54" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-10.16" x2="4.572" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="9.652" y1="-10.16" x2="10.922" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-10.16" x2="10.922" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-7.62" x2="9.652" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-7.62" x2="10.922" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-5.08" x2="9.652" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-5.08" x2="10.922" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-2.54" x2="9.652" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="9.652" y1="0" x2="10.922" y2="0" width="0.1524" layer="94"/>
<wire x1="10.922" y1="0" x2="10.922" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.54" x2="12.7" y2="2.54" width="0.4064" layer="94"/>
<wire x1="12.7" y1="2.54" x2="12.7" y2="0" width="0.4064" layer="94"/>
<wire x1="12.7" y1="0" x2="12.7" y2="-12.7" width="0.4064" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="2.54" y2="-12.7" width="0.4064" layer="94"/>
<wire x1="2.54" y1="-12.7" x2="2.54" y2="2.54" width="0.4064" layer="94"/>
<wire x1="10.922" y1="0" x2="12.7" y2="0" width="0.1524" layer="94"/>
<circle x="10.922" y="0" radius="0.254" width="0.4064" layer="94"/>
<circle x="10.922" y="-2.54" radius="0.254" width="0.4064" layer="94"/>
<circle x="10.922" y="-5.08" radius="0.254" width="0.4064" layer="94"/>
<circle x="10.922" y="-7.62" radius="0.254" width="0.4064" layer="94"/>
<text x="2.54" y="3.302" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="15.24" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="2" x="0" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="3" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="4" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="5" x="0" y="-7.62" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="6" x="0" y="-10.16" visible="off" length="short" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="SJ">
<wire x1="0.381" y1="0.635" x2="0.381" y2="-0.635" width="1.27" layer="94" curve="-180" cap="flat"/>
<wire x1="-0.381" y1="-0.635" x2="-0.381" y2="0.635" width="1.27" layer="94" curve="-180" cap="flat"/>
<wire x1="2.54" y1="0" x2="1.651" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="-1.651" y2="0" width="0.1524" layer="94"/>
<text x="-2.54" y="2.54" size="1.778" layer="95">&gt;NAME</text>
<text x="-2.54" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="SJ_2">
<wire x1="-0.635" y1="-1.397" x2="0.635" y2="-1.397" width="1.27" layer="94" curve="180" cap="flat"/>
<wire x1="-0.635" y1="1.397" x2="0.635" y2="1.397" width="1.27" layer="94" curve="-180" cap="flat"/>
<wire x1="1.27" y1="-0.635" x2="-1.27" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="-0.635" x2="-1.27" y2="0" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="0.635" width="0.1524" layer="94"/>
<wire x1="-1.27" y1="0.635" x2="1.27" y2="0.635" width="0.1524" layer="94"/>
<wire x1="1.27" y1="0.635" x2="1.27" y2="-0.635" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="-1.27" y2="0" width="0.1524" layer="94"/>
<text x="2.54" y="0.381" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-1.905" size="1.778" layer="96">&gt;VALUE</text>
<rectangle x1="-1.27" y1="-0.635" x2="1.27" y2="0.635" layer="94"/>
<pin name="3" x="0" y="-5.08" visible="off" length="short" direction="pas" rot="R90"/>
<pin name="1" x="0" y="5.08" visible="off" length="short" direction="pas" rot="R270"/>
<pin name="2" x="-5.08" y="0" visible="off" length="short" direction="pas"/>
</symbol>
<symbol name="TEST-POINT">
<wire x1="2.54" y1="0" x2="0" y2="0" width="0.1524" layer="94"/>
<wire x1="3.302" y1="0.762" x2="3.302" y2="-0.762" width="0.1524" layer="94" curve="180"/>
<text x="-2.54" y="2.54" size="1.778" layer="95">&gt;Name</text>
<text x="-2.54" y="-2.54" size="1.778" layer="96">&gt;Value</text>
<pin name="1" x="0" y="0" visible="off" length="point" rot="R180"/>
</symbol>
<symbol name="GND_CONNECT">
<wire x1="5.08" y1="10.16" x2="5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="-5.08" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-5.08" x2="-5.08" y2="10.16" width="0.254" layer="94"/>
<wire x1="-5.08" y1="10.16" x2="5.08" y2="10.16" width="0.254" layer="94"/>
<pin name="IN" x="-10.16" y="2.54" length="middle"/>
<pin name="AGND" x="10.16" y="7.62" length="middle" rot="R180"/>
<pin name="DGND" x="10.16" y="-2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="POTENTIOMETER">
<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.1524" layer="94"/>
<text x="-3.81" y="-3.5814" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.81" y="-5.842" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
<wire x1="0" y1="2.54" x2="0" y2="1.016" width="0.1524" layer="94"/>
<wire x1="0" y1="1.016" x2="0.254" y2="1.524" width="0.1524" layer="94"/>
<wire x1="0" y1="1.016" x2="-0.254" y2="1.524" width="0.1524" layer="94"/>
<pin name="P$1" x="0" y="5.08" visible="off" length="short" rot="R270"/>
</symbol>
<symbol name="2PT_GND_TIE">
<wire x1="-3.556" y1="-2.54" x2="-2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="-1.524" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-1.524" y1="-2.54" x2="-2.54" y2="-3.556" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-3.556" x2="-3.556" y2="-2.54" width="0.254" layer="94"/>
<wire x1="1.524" y1="-2.54" x2="2.54" y2="-2.54" width="0.254" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="3.556" y2="-2.54" width="0.254" layer="94"/>
<wire x1="3.556" y1="-2.54" x2="2.54" y2="-3.556" width="0.254" layer="94"/>
<wire x1="2.54" y1="-3.556" x2="1.524" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="-2.54" y1="0" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-2.54" width="0.1524" layer="94"/>
<pin name="P$1" x="-5.08" y="0" visible="off" length="short"/>
<pin name="P$2" x="5.08" y="0" visible="off" length="short" rot="R180"/>
<wire x1="0" y1="2.54" x2="0" y2="-4.064" width="0.1524" layer="94" style="shortdash"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="CAP" prefix="C" uservalue="yes">
<description>&lt;b&gt;Capacitor&lt;/b&gt;
Standard 0603 ceramic capacitor, and 0.1" leaded capacitor.</description>
<gates>
<gate name="G$1" symbol="CAP" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="CAP-PTH-SMALL">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH2" package="CAP-PTH-SMALL2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0805" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH3" package="CAP-PTH-LARGE">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="GRM43D">
<connects>
<connect gate="G$1" pin="1" pad="A"/>
<connect gate="G$1" pin="2" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0603-CAP" package="0603-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0402-CAP" package="0402-CAP">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH1" package="CAP-PTH-5MM">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="_" package="AXIAL-5MM">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1210" package="1210">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1206" package="1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="ASMD" package="CTZ3">
<connects>
<connect gate="G$1" pin="1" pad="+"/>
<connect gate="G$1" pin="2" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="KIT" package="CAP-PTH-SMALL-KIT">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EZ" package="CAP-PTH-SMALLEZ">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="CAP_ADJ" prefix="C">
<description>Variable, non-polarized capacitor</description>
<gates>
<gate name="G$1" symbol="CAP_ADJ" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="CTZ3">
<connects>
<connect gate="G$1" pin="3" pad="+"/>
<connect gate="G$1" pin="4" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="CAP_POL" prefix="C" uservalue="yes">
<description>&lt;b&gt;Capacitor Polarized&lt;/b&gt;
These are standard SMD and PTH capacitors. Normally 10uF, 47uF, and 100uF in electrolytic and tantalum varieties. Always verify the external diameter of the through hole cap, it varies with capacity, voltage, and manufacturer. The EIA devices should be standard.</description>
<gates>
<gate name="G$1" symbol="CAP_POL" x="0" y="0"/>
</gates>
<devices>
<device name="1206" package="EIA3216">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3528" package="EIA3528">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH1" package="CPOL-RADIAL-100UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH2" package="CPOL-RADIAL-10UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="7343" package="EIA7343">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="G" package="PANASONIC_G">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="E" package="PANASONIC_E">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="C" package="PANASONIC_C">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="F80" package="NIPPON_F80">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="D" package="PANASONIC_D">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH3" package="CPOL-RADIAL-1000UF-63V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH4" package="CPOL-RADIAL-1000UF-25V">
<connects>
<connect gate="G$1" pin="+" pad="1"/>
<connect gate="G$1" pin="-" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="VISHAY_C">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="H13" package="PANASONIC_H13">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="6032" package="EIA6032">
<connects>
<connect gate="G$1" pin="+" pad="P$1"/>
<connect gate="G$1" pin="-" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EN_J2" package="EN_J2">
<connects>
<connect gate="G$1" pin="+" pad="+"/>
<connect gate="G$1" pin="-" pad="-"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3528-KIT" package="EIA3528-KIT">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1206-KIT" package="EIA3216-KIT">
<connects>
<connect gate="G$1" pin="+" pad="A"/>
<connect gate="G$1" pin="-" pad="C"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="FB">
<gates>
<gate name="G$1" symbol="FB" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603">
<connects>
<connect gate="G$1" pin="P$1" pad="1"/>
<connect gate="G$1" pin="P$2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="FUSE" prefix="F">
<gates>
<gate name="G$1" symbol="FUSE" x="0" y="0"/>
</gates>
<devices>
<device name="X20MM" package="FUSE_5MM">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="INDUCTOR" prefix="L" uservalue="yes">
<description>&lt;b&gt;Inductors&lt;/b&gt;&lt;p&gt;
Basic Inductor/Choke - 0603 and 1206. Footprints are not proven and vary greatly between part numbers.&lt;br&gt;
SRN6045- 33uH, 20% 1.4A&lt;BR&gt;
SDR0403-560KL - 56uH, 10%, 500mA RMS/740mA peak</description>
<gates>
<gate name="G$1" symbol="INDUCTOR" x="0" y="0"/>
</gates>
<devices>
<device name="H*" package="INDUCTOR-1206">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name="1206"/>
</technologies>
</device>
<device name="0603" package="0603">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="CR54" package="CR54">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PWR" package="CDRH125">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0402" package="C0402">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-B82462G" package="B82462G">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="CR75" package="CR75">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1210" package="1210">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1007" package="1007">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="_" package="COOPER_UP4B">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-" package="CDRH3D28">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0805" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="CR75_V2" package="CR75_V2">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="." package="CDRH2D09">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NPI75" package="NPI75C">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SRU5028" package="SRU5028">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SRU1038" package="SRU1038">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="CR54-KIT" package="CR54-KIT">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="DR1030" package="DR1030">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="VLF4012A" package="VLF4012A">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="AXIAL-0.6" package="AXIAL-0.6">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="RLB0912" package="RLB0912">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="BOURNS_SRN6045" package="SRN6045">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="NDUC-11627"/>
<attribute name="VALUE" value="33uH"/>
</technology>
</technologies>
</device>
<device name="SDR0403-560KL" package="SDR0403">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name="">
<attribute name="DIST" value="DIGIKEY"/>
<attribute name="DIST_ID" value="SDR0403-560KLCT-ND"/>
<attribute name="VALUE" value="56uH"/>
</technology>
</technologies>
</device>
<device name="30OHM,1.8A" package="0603">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07859"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="JUMPER-2" prefix="JP" uservalue="yes">
<description>&lt;b&gt;Jumper&lt;/b&gt;
Basic 0.1" spaced jumper. Use with breakaway headers.</description>
<gates>
<gate name="A" symbol="JUMPER-2" x="2.54" y="0"/>
</gates>
<devices>
<device name="PTH" package="1X02">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD-NC" package="SJ_2S">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH_LOCK" package="1X02_LOCK">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD-NO" package="SJ_2S-NO">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD-NO-NS" package="SJ_2S-NO-NS">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="JUMPER-2-OLD" prefix="JP" uservalue="yes">
<description>&lt;b&gt;Jumper&lt;/b&gt;
Basic 0.1" spaced jumper. Use with breakaway headers.</description>
<gates>
<gate name="A" symbol="JUMPER-2" x="2.54" y="0"/>
</gates>
<devices>
<device name="PTH" package="1X02">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD-NC" package="SJ_2S">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH_LOCK" package="1X02_LOCK">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD-NO" package="SJ_2S-NO">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="JUMPER-3" prefix="JP">
<gates>
<gate name="G$1" symbol="JUMPER-3" x="-2.54" y="0"/>
</gates>
<devices>
<device name="SMD" package="SJ_3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH" package="1X03">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1-2" package="SJ_3_PASTE1&amp;2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2-3" package="SJ_3_PASTE2&amp;3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="JUMPER-3-OLD" prefix="JP">
<gates>
<gate name="G$1" symbol="JUMPER-3" x="-2.54" y="0"/>
</gates>
<devices>
<device name="SMD" package="SJ_3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH" package="1X03">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1-2" package="SJ_3_PASTE1&amp;2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2-3" package="SJ_3_PASTE2&amp;3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RESISTOR" prefix="R" uservalue="yes">
<description>&lt;b&gt;Resistor&lt;/b&gt;
Basic schematic elements and footprints for 0603, 1206, and PTH resistors.</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="1206" package="1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="AXIAL-0.3" package="AXIAL-0.3">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2010" package="R2010">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0805-RES" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0603-RES" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0402-RES" package="0402-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/6W" package="1/6W-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2512" package="R2512">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/4W" package="AXIAL-0.4">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/2W" package="AXIAL-0.5">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1W" package="AXIAL-0.6">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-2W" package="AXIAL-0.8">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="KIT" package="AXIAL-0.3-KIT">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EZ" package="AXIAL-0.3EZ">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RESISTOR-ARRAY" prefix="R" uservalue="yes">
<description>&lt;b&gt;Array Chip Resistor&lt;/b&gt;&lt;p&gt;
Source: RS Component / Phycomp</description>
<gates>
<gate name="A" symbol="RESISTOR-1" x="0" y="7.62" addlevel="always" swaplevel="1"/>
<gate name="B" symbol="RESISTOR-1" x="0" y="2.54" addlevel="always" swaplevel="1"/>
<gate name="C" symbol="RESISTOR-1" x="0" y="-2.54" addlevel="always" swaplevel="1"/>
<gate name="D" symbol="RESISTOR-1" x="0" y="-7.62" addlevel="always" swaplevel="1"/>
</gates>
<devices>
<device name="0603-ARV" package="0603-ARV">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="8"/>
<connect gate="B" pin="1" pad="2"/>
<connect gate="B" pin="2" pad="7"/>
<connect gate="C" pin="1" pad="3"/>
<connect gate="C" pin="2" pad="6"/>
<connect gate="D" pin="1" pad="4"/>
<connect gate="D" pin="2" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RPACK*" prefix="R" uservalue="yes">
<description>BOURNS 4600X series thick-film SIP resistor packs&lt;br&gt;
&lt;br&gt;
Five resistors bussed to a single pin (denoted by dot).&lt;br&gt;
0.2W / resistor&lt;br&gt;
&lt;a href="http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/4600x.pdf"&gt;datasheet&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
SFE parts COM-10855 (330), COM-10856 (10K)&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="RPACK-BUSSED-5" x="-7.62" y="5.08"/>
</gates>
<devices>
<device name="-BUSSED-SIP-PTH-5" package="RPACK-SIP-PTH-5">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
<connect gate="G$1" pin="3" pad="P$3"/>
<connect gate="G$1" pin="4" pad="P$4"/>
<connect gate="G$1" pin="5" pad="P$5"/>
<connect gate="G$1" pin="6" pad="P$6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SOLDERJUMPER" prefix="SJ">
<description>&lt;b&gt;Solder Jumper&lt;/b&gt;
Standard SMD solder jumper. Used to automate production. Two varients : Normally Open and Normally Closed are the same, but have different paste layers. NC will have a large amount of paste and should jumper during reflow.</description>
<gates>
<gate name="1" symbol="SJ" x="0" y="0"/>
</gates>
<devices>
<device name="NC" package="SJ_2S">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TRACE" package="SJ_2S-TRACE">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NC2" package="SJ_2S-NOTRACE">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NO" package="SJ_2S-NO">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SOLDERJUMPER-OLD" prefix="SJ">
<description>&lt;b&gt;Solder Jumper&lt;/b&gt;
Standard SMD solder jumper. Used to automate production. Two varients : Normally Open and Normally Closed are the same, but have different paste layers. NC will have a large amount of paste and should jumper during reflow.</description>
<gates>
<gate name="1" symbol="SJ" x="0" y="0"/>
</gates>
<devices>
<device name="NC" package="SJ_2S">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TRACE" package="SJ_2S-TRACE">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NC2" package="SJ_2S-NOTRACE">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="NO" package="SJ_2S-NO">
<connects>
<connect gate="1" pin="1" pad="1"/>
<connect gate="1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SOLDERJUMPER_2WAY-OLD" prefix="SJ" uservalue="yes">
<description>&lt;b&gt;Solder Jumper&lt;/b&gt;
2 way solder jumper</description>
<gates>
<gate name="G$1" symbol="SJ_2" x="0" y="0"/>
</gates>
<devices>
<device name="W" package="SJ_2W">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="T" package="SJ_2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="S" package="SJ_3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PASTE1&amp;2" package="SJ_3_PASTE1&amp;2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PASTE2&amp;3" package="SJ_3_PASTE2&amp;3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TEST-POINT" prefix="TP">
<description>Bare copper test points for troubleshooting or ICT</description>
<gates>
<gate name="G$1" symbol="TEST-POINT" x="0" y="0"/>
</gates>
<devices>
<device name="2" package="PAD.02X.02">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3" package="PAD.03X.03">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="3X5" package="PAD.03X.05">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="GND_CONNECT">
<description>Use to make a connection of multiple grounds in only one place.</description>
<gates>
<gate name="G$1" symbol="GND_CONNECT" x="0" y="-2.54"/>
</gates>
<devices>
<device name="" package="GND_CONNECT">
<connects>
<connect gate="G$1" pin="AGND" pad="2"/>
<connect gate="G$1" pin="DGND" pad="1"/>
<connect gate="G$1" pin="IN" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="POTENTIOMETER" prefix="R">
<gates>
<gate name="G$1" symbol="POTENTIOMETER" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-ARV">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="P$1" pad="3 4 5 6 7 8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2PT_GND_TIE" prefix="PT">
<description>Package for connecting two ground nets in one place.</description>
<gates>
<gate name="G$1" symbol="2PT_GND_TIE" x="0" y="0"/>
</gates>
<devices>
<device name="" package="2PT_GND_TIE">
<connects>
<connect gate="G$1" pin="P$1" pad="P$1"/>
<connect gate="G$1" pin="P$2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SOLDERJUMPER_2WAY" prefix="SJ" uservalue="yes">
<description>&lt;b&gt;Solder Jumper&lt;/b&gt;
2 way solder jumper</description>
<gates>
<gate name="G$1" symbol="SJ_2" x="0" y="0"/>
</gates>
<devices>
<device name="W" package="SJ_2W">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="T" package="SJ_2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="S" package="SJ_3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PASTE1&amp;2" package="SJ_3_PASTE1&amp;2">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PASTE2&amp;3" package="SJ_3_PASTE2&amp;3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PASTE1&amp;2&amp;3" package="SJ_3_PASTE1&amp;2&amp;3">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-PowerIC.lbr.







































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="yes" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="yes" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="yes" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="yes" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="yes" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="yes" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="yes" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="yes" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="yes" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="yes" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="yes" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="yes" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="yes" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="yes" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="yes" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="yes" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="yes" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="yes" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="yes" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="yes" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="yes" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="yes" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="yes" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="yes" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="yes" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="yes" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="yes" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="yes" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="yes" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="yes" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="yes" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="yes" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="yes" active="yes"/>
<layer number="108" name="tplace-old" color="10" fill="1" visible="yes" active="yes"/>
<layer number="109" name="ref-old" color="11" fill="1" visible="yes" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="yes" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="yes" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="yes" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="yes" active="yes"/>
<layer number="199" name="Contour" color="7" fill="1" visible="yes" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="yes" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="yes" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="yes" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="yes" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="yes" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="yes" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="yes" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="yes" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="yes" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="yes" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="yes" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find drivers, regulators, and amplifiers.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="SC-70">
<wire x1="-1" y1="-0.55" x2="1" y2="-0.55" width="0.05" layer="51"/>
<wire x1="1" y1="-0.55" x2="1" y2="0.55" width="0.05" layer="51"/>
<wire x1="1" y1="0.55" x2="-1" y2="0.55" width="0.05" layer="51"/>
<wire x1="-1" y1="0.55" x2="-1" y2="-0.55" width="0.05" layer="51"/>
<circle x="-0.74" y="-0.18" radius="0.0921" width="0.15" layer="21"/>
<smd name="1" x="-0.65" y="-0.95" dx="0.36" dy="0.95" layer="1"/>
<smd name="2" x="0" y="-0.95" dx="0.36" dy="0.95" layer="1"/>
<smd name="3" x="0.65" y="-0.95" dx="0.36" dy="0.95" layer="1"/>
<smd name="4" x="0.65" y="0.95" dx="0.36" dy="0.95" layer="1"/>
<smd name="5" x="0" y="0.95" dx="0.36" dy="0.95" layer="1"/>
<smd name="6" x="-0.65" y="0.95" dx="0.36" dy="0.95" layer="1"/>
</package>
<package name="SO08WIDE">
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.3556" width="0.0508" layer="21"/>
<smd name="1" x="-1.905" y="-3.5687" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="8" x="-1.905" y="3.8862" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="2" x="-0.635" y="-3.5687" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="3" x="0.635" y="-3.5687" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="7" x="-0.635" y="3.8862" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="6" x="0.635" y="3.8862" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="4" x="1.905" y="-3.5687" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="5" x="1.905" y="3.8862" dx="0.6096" dy="2.2098" layer="1"/>
<text x="4.0005" y="-2.032" size="1.27" layer="27" ratio="10" rot="R90">&gt;VALUE</text>
<text x="-2.7305" y="-2.032" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="DRC-10">
<description>&lt;h3&gt;10-pin QFN/SON package&lt;/h3&gt;
Package Type: SON&lt;br&gt;
Package Drawing: DRC&lt;Br&gt;
Pitch: 0.5mm&lt;br&gt;
Overall Dimensions: 3.15x3.15mm&lt;br&gt;
Pins: 10 (+1 exposed heatsink pin)&lt;br&gt;
&lt;br&gt;Related ICs:&lt;ul&gt;&lt;li&gt; TI's BQ2402x - http://focus.ti.com/lit/ds/symlink/bq24023.pdf&lt;br&gt;
&lt;/ul&gt;

Last modified: 8/16/10&lt;br&gt;
&lt;B&gt;Unproven!!!&lt;/B&gt;&lt;br&gt;</description>
<wire x1="1.575" y1="1.575" x2="-1.575" y2="1.575" width="0.127" layer="51"/>
<wire x1="-1.575" y1="1.575" x2="-1.575" y2="-1.575" width="0.127" layer="21"/>
<wire x1="-1.575" y1="-1.575" x2="1.575" y2="-1.575" width="0.127" layer="51"/>
<wire x1="1.575" y1="-1.575" x2="1.575" y2="1.321" width="0.127" layer="21"/>
<wire x1="-1.325" y1="1.575" x2="-1.575" y2="1.575" width="0.127" layer="21"/>
<wire x1="1.575" y1="1.321" x2="1.325" y2="1.575" width="0.127" layer="21"/>
<wire x1="-1.575" y1="-1.575" x2="-1.325" y2="-1.575" width="0.127" layer="21"/>
<wire x1="1.325" y1="-1.575" x2="1.575" y2="-1.575" width="0.127" layer="21"/>
<smd name="3" x="0" y="1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="2" x="0.5" y="1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="4" x="-0.5" y="1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="5" x="-1" y="1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="1" x="1" y="1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="10" x="1" y="-1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="6" x="-1" y="-1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="7" x="-0.5" y="-1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="9" x="0.5" y="-1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="8" x="0" y="-1.475" dx="0.85" dy="0.23" layer="1" rot="R90"/>
<smd name="EP" x="0" y="0" dx="1.65" dy="2.4" layer="1" rot="R90"/>
<text x="-1.778" y="-1.27" size="0.4064" layer="25" rot="R90">&gt;Name</text>
<text x="2.159" y="-1.27" size="0.4064" layer="27" rot="R90">&gt;Value</text>
</package>
<package name="DC-DC_CONVERTER">
<wire x1="-6" y1="-6" x2="6" y2="-6" width="0.25" layer="51"/>
<wire x1="6" y1="-6" x2="6" y2="6" width="0.25" layer="51"/>
<wire x1="6" y1="6" x2="-6" y2="6" width="0.25" layer="51"/>
<wire x1="-6" y1="6" x2="-6" y2="-6" width="0.25" layer="51"/>
<wire x1="-5.973" y1="-5.973" x2="5.973" y2="-5.973" width="0.1778" layer="21"/>
<wire x1="5.973" y1="-5.973" x2="5.973" y2="5.973" width="0.1778" layer="21"/>
<wire x1="5.973" y1="5.973" x2="-5.973" y2="5.973" width="0.1778" layer="21"/>
<wire x1="-5.973" y1="5.973" x2="-5.973" y2="-5.973" width="0.1778" layer="21"/>
<wire x1="-5.9182" y1="5.6896" x2="-5.6896" y2="5.9182" width="0.254" layer="21"/>
<wire x1="-5.9182" y1="5.4356" x2="-5.4102" y2="5.9436" width="0.1778" layer="21"/>
<smd name="10" x="-4.48" y="-2.19" dx="1.01" dy="1.01" layer="1"/>
<smd name="7" x="0.1" y="-4.48" dx="1.01" dy="1.01" layer="1"/>
<smd name="5" x="4.61" y="0.1" dx="1.01" dy="1.01" layer="1"/>
<smd name="8" x="-2.19" y="-4.48" dx="1.01" dy="1.01" layer="1"/>
<smd name="6" x="4.61" y="-4.48" dx="1.01" dy="1.01" layer="1"/>
<smd name="1" x="-4.48" y="0.1" dx="1.01" dy="1.01" layer="1"/>
<smd name="9" x="-4.48" y="-4.48" dx="1.01" dy="1.01" layer="1"/>
<smd name="3" x="1.24" y="4.67" dx="1.77" dy="4.07" layer="1" rot="R90"/>
<smd name="4" x="4.67" y="3.53" dx="1.77" dy="4.07" layer="1"/>
<smd name="2" x="-3.33" y="4.67" dx="1.77" dy="4.07" layer="1" rot="R90"/>
<text x="-6" y="6.4" size="0.4064" layer="25">&gt;NAME</text>
<text x="-6" y="-6.965" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="MSOP8">
<description>&lt;b&gt;8M, 8-Lead, 0.118" Wide, Miniature Small Outline Package&lt;/b&gt;&lt;p&gt;
MSOP&lt;br&gt;
8M-Package doc1097.pdf</description>
<wire x1="-1.48" y1="1.23" x2="-1.23" y2="1.48" width="0.1524" layer="21" curve="-90" cap="flat"/>
<wire x1="1.23" y1="1.48" x2="1.48" y2="1.23" width="0.1524" layer="21" curve="-90"/>
<wire x1="1.23" y1="-1.49" x2="1.48" y2="-1.24" width="0.1524" layer="21" curve="90"/>
<wire x1="-1.48" y1="-1.24" x2="-1.23" y2="-1.49" width="0.1524" layer="21" curve="90" cap="flat"/>
<wire x1="1.24" y1="-1.49" x2="-1.22" y2="-1.49" width="0.1524" layer="21"/>
<wire x1="-1.22" y1="1.48" x2="1.24" y2="1.48" width="0.1524" layer="21"/>
<wire x1="-1.48" y1="1.23" x2="-1.48" y2="-1.23" width="0.1524" layer="21"/>
<wire x1="1.48" y1="-1.24" x2="1.48" y2="1.23" width="0.1524" layer="21"/>
<circle x="-0.65" y="-0.65" radius="0.325" width="0.254" layer="21"/>
<smd name="1" x="-0.975" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="2" x="-0.325" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="3" x="0.325" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="4" x="0.975" y="-2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="5" x="0.975" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="6" x="0.325" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="7" x="-0.325" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<smd name="8" x="-0.975" y="2.25" dx="0.4" dy="1.1" layer="1"/>
<text x="-2.54" y="-1.27" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="2.54" y="-1.27" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-1.175" y1="-2.45" x2="-0.775" y2="-1.55" layer="51"/>
<rectangle x1="-0.525" y1="-2.45" x2="-0.125" y2="-1.55" layer="51"/>
<rectangle x1="0.125" y1="-2.45" x2="0.525" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="-2.45" x2="1.175" y2="-1.55" layer="51"/>
<rectangle x1="0.775" y1="1.55" x2="1.175" y2="2.45" layer="51"/>
<rectangle x1="0.125" y1="1.55" x2="0.525" y2="2.45" layer="51"/>
<rectangle x1="-0.525" y1="1.55" x2="-0.125" y2="2.45" layer="51"/>
<rectangle x1="-1.175" y1="1.55" x2="-0.775" y2="2.45" layer="51"/>
</package>
<package name="MULTIWATT15">
<description>Multiwatt15V package for the L298 dual full bridge driver</description>
<wire x1="-10.16" y1="2.54" x2="-10.16" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="5.94" x2="-10.16" y2="7.54" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="7.54" x2="10.04" y2="7.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="7.54" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="10.04" y1="5.94" x2="10.04" y2="2.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="2.54" x2="-10.16" y2="2.54" width="0.2032" layer="51"/>
<wire x1="-10.16" y1="5.94" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.15" y1="2.55" x2="-8.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-6.5" y1="2.55" x2="-6.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-3.95" y1="2.55" x2="-3.75" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-1.45" y1="2.55" x2="-1.25" y2="2.55" width="0.2032" layer="21"/>
<wire x1="1.1" y1="2.55" x2="1.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="3.65" y1="2.55" x2="3.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="6.2" y1="2.55" x2="6.4" y2="2.55" width="0.2032" layer="21"/>
<wire x1="10.05" y1="2.55" x2="8.75" y2="2.55" width="0.2032" layer="21"/>
<pad name="2" x="-7.68" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="4" x="-5.14" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="6" x="-2.6" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="8" x="-0.06" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="10" x="2.48" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="12" x="5.02" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="14" x="7.56" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="1" x="-8.95" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="3" x="-6.41" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="5" x="-3.87" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="7" x="-1.33" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="9" x="1.21" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="11" x="3.75" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="13" x="6.29" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="15" x="8.83" y="-2.39" drill="1.1" diameter="1.9"/>
<text x="-10.26" y="7.69" size="1.27" layer="25">&gt;NAME</text>
<text x="3.44" y="7.69" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="MULTIWATT15_6400BGHEATSINK">
<wire x1="-20.955" y1="21.209" x2="-4.445" y2="21.209" width="0.254" layer="51"/>
<wire x1="4.445" y1="21.209" x2="20.955" y2="21.209" width="0.254" layer="51"/>
<wire x1="-12.7" y1="6.731" x2="-12.7" y2="-4.191" width="0.254" layer="51"/>
<wire x1="12.7" y1="6.604" x2="12.7" y2="-4.191" width="0.254" layer="51"/>
<wire x1="12.7" y1="-4.191" x2="20.955" y2="-4.191" width="0.254" layer="51"/>
<wire x1="20.955" y1="-4.191" x2="20.955" y2="21.209" width="0.254" layer="51"/>
<wire x1="-12.7" y1="-4.191" x2="-20.955" y2="-4.191" width="0.254" layer="51"/>
<wire x1="-20.955" y1="-4.191" x2="-20.955" y2="21.209" width="0.254" layer="51"/>
<wire x1="-11.049" y1="7.7216" x2="11.049" y2="7.7216" width="0.254" layer="51"/>
<wire x1="-4.445" y1="21.209" x2="-4.445" y2="9.2964" width="0.254" layer="51"/>
<wire x1="4.445" y1="9.2964" x2="4.445" y2="21.209" width="0.254" layer="51"/>
<wire x1="-4.445" y1="9.2964" x2="4.445" y2="9.2964" width="0.254" layer="51"/>
<wire x1="-10.16" y1="2.54" x2="-10.16" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="5.94" x2="-10.16" y2="7.54" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="7.54" x2="10.04" y2="7.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="7.54" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="10.04" y1="5.94" x2="10.04" y2="2.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="2.54" x2="-10.16" y2="2.54" width="0.2032" layer="51"/>
<wire x1="-10.16" y1="5.94" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.15" y1="2.55" x2="-8.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-6.5" y1="2.55" x2="-6.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-3.95" y1="2.55" x2="-3.75" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-1.45" y1="2.55" x2="-1.25" y2="2.55" width="0.2032" layer="21"/>
<wire x1="1.1" y1="2.55" x2="1.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="3.65" y1="2.55" x2="3.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="6.2" y1="2.55" x2="6.4" y2="2.55" width="0.2032" layer="21"/>
<wire x1="10.05" y1="2.55" x2="8.75" y2="2.55" width="0.2032" layer="21"/>
<pad name="2" x="-7.68" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="4" x="-5.14" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="6" x="-2.6" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="8" x="-0.06" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="10" x="2.48" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="12" x="5.02" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="14" x="7.56" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="1" x="-8.95" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="3" x="-6.41" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="5" x="-3.87" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="7" x="-1.33" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="9" x="1.21" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="11" x="3.75" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="13" x="6.29" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="15" x="8.83" y="-2.39" drill="1.1" diameter="1.9"/>
<text x="-10.26" y="7.69" size="1.27" layer="25">&gt;NAME</text>
<text x="3.44" y="7.69" size="1.27" layer="27">&gt;VALUE</text>
<hole x="-12.7" y="8.509" drill="2.9972"/>
<hole x="12.7" y="8.509" drill="2.9972"/>
</package>
<package name="POWERSO20">
<wire x1="-5.461" y1="-7.9502" x2="5.461" y2="-7.9502" width="0.127" layer="21"/>
<wire x1="5.461" y1="7.9502" x2="-4.2418" y2="7.9502" width="0.127" layer="21"/>
<wire x1="-5.461" y1="6.731" x2="-5.461" y2="-7.9502" width="0.127" layer="21"/>
<wire x1="5.461" y1="7.9502" x2="5.461" y2="-7.9502" width="0.127" layer="21"/>
<wire x1="-5.461" y1="6.731" x2="-4.2418" y2="7.9502" width="0.127" layer="21"/>
<smd name="1" x="-6.731" y="5.715" dx="1.651" dy="0.635" layer="1"/>
<smd name="2" x="-6.731" y="4.445" dx="1.651" dy="0.635" layer="1"/>
<smd name="3" x="-6.731" y="3.175" dx="1.651" dy="0.635" layer="1"/>
<smd name="4" x="-6.731" y="1.905" dx="1.651" dy="0.635" layer="1"/>
<smd name="5" x="-6.731" y="0.635" dx="1.651" dy="0.635" layer="1"/>
<smd name="6" x="-6.731" y="-0.635" dx="1.651" dy="0.635" layer="1"/>
<smd name="7" x="-6.731" y="-1.905" dx="1.651" dy="0.635" layer="1"/>
<smd name="8" x="-6.731" y="-3.175" dx="1.651" dy="0.635" layer="1"/>
<smd name="9" x="-6.731" y="-4.445" dx="1.651" dy="0.635" layer="1"/>
<smd name="10" x="-6.731" y="-5.715" dx="1.651" dy="0.635" layer="1"/>
<smd name="11" x="6.731" y="-5.715" dx="1.651" dy="0.635" layer="1"/>
<smd name="12" x="6.731" y="-4.445" dx="1.651" dy="0.635" layer="1"/>
<smd name="13" x="6.731" y="-3.175" dx="1.651" dy="0.635" layer="1"/>
<smd name="14" x="6.731" y="-1.905" dx="1.651" dy="0.635" layer="1"/>
<smd name="15" x="6.731" y="-0.635" dx="1.651" dy="0.635" layer="1"/>
<smd name="16" x="6.731" y="0.635" dx="1.651" dy="0.635" layer="1"/>
<smd name="17" x="6.731" y="1.905" dx="1.651" dy="0.635" layer="1"/>
<smd name="18" x="6.731" y="3.175" dx="1.651" dy="0.635" layer="1"/>
<smd name="19" x="6.731" y="4.445" dx="1.651" dy="0.635" layer="1"/>
<smd name="20" x="6.731" y="5.715" dx="1.651" dy="0.635" layer="1"/>
</package>
<package name="HTSSOP28">
<wire x1="-5" y1="2" x2="-5" y2="0.5" width="0.127" layer="21"/>
<wire x1="-5" y1="-0.5" x2="-5" y2="-2" width="0.127" layer="21"/>
<wire x1="5" y1="2" x2="5" y2="-2" width="0.127" layer="21"/>
<wire x1="-5" y1="0.5" x2="-5" y2="-0.5" width="0.127" layer="21" curve="-180"/>
<wire x1="-5" y1="2" x2="5" y2="2" width="0.127" layer="21"/>
<wire x1="-5" y1="-2" x2="5" y2="-2" width="0.127" layer="21"/>
<smd name="1" x="-4.225" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="2" x="-3.575" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="3" x="-2.925" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="4" x="-2.275" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="5" x="-1.625" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="6" x="-0.975" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="7" x="-0.325" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="8" x="0.325" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="9" x="0.975" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="10" x="1.625" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="11" x="2.275" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="12" x="2.925" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="13" x="3.575" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="14" x="4.225" y="-2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="28" x="-4.225" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="27" x="-3.575" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="26" x="-2.925" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="25" x="-2.275" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="24" x="-1.625" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="23" x="-0.975" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="22" x="-0.325" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="21" x="0.325" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="20" x="0.975" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="19" x="1.625" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="18" x="2.275" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="17" x="2.925" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="16" x="3.575" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="15" x="4.225" y="2.97" dx="0.36" dy="1.19" layer="1"/>
<smd name="29" x="0" y="0" dx="5.5" dy="2.8" layer="1"/>
<text x="-3.5" y="0.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.5" y="-1" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="MSOP-8">
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.2032" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.2032" layer="21"/>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.2032" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.2032" layer="21"/>
<circle x="-1.0034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-0.975" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="2" x="-0.325" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="3" x="0.325" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="4" x="0.975" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="5" x="0.975" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="6" x="0.325" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="7" x="-0.325" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="8" x="-0.975" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<text x="-1.1" y="-0.6" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-0.9" y="0.5" size="0.4064" layer="25">&gt;NAME</text>
</package>
<package name="SO08">
<description>&lt;b&gt;Small Outline Package&lt;/b&gt; Fits JEDEC packages (narrow SOIC-8)</description>
<wire x1="-2.362" y1="-1.803" x2="2.362" y2="-1.803" width="0.1524" layer="51"/>
<wire x1="2.362" y1="-1.803" x2="2.362" y2="1.803" width="0.1524" layer="21"/>
<wire x1="2.362" y1="1.803" x2="-2.362" y2="1.803" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="1.803" x2="-2.362" y2="-1.803" width="0.1524" layer="21"/>
<circle x="-1.8034" y="-0.9906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="2" x="-0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="3" x="0.635" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="4" x="1.905" y="-2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="5" x="1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="6" x="0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="7" x="-0.635" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<smd name="8" x="-1.905" y="2.6162" dx="0.6096" dy="2.2098" layer="1"/>
<text x="-1.27" y="-0.635" size="0.4064" layer="27">&gt;VALUE</text>
<text x="-1.27" y="0" size="0.4064" layer="25">&gt;NAME</text>
<rectangle x1="-2.0828" y1="-2.8702" x2="-1.7272" y2="-1.8542" layer="51"/>
<rectangle x1="-0.8128" y1="-2.8702" x2="-0.4572" y2="-1.8542" layer="51"/>
<rectangle x1="0.4572" y1="-2.8702" x2="0.8128" y2="-1.8542" layer="51"/>
<rectangle x1="1.7272" y1="-2.8702" x2="2.0828" y2="-1.8542" layer="51"/>
<rectangle x1="-2.0828" y1="1.8542" x2="-1.7272" y2="2.8702" layer="51"/>
<rectangle x1="-0.8128" y1="1.8542" x2="-0.4572" y2="2.8702" layer="51"/>
<rectangle x1="0.4572" y1="1.8542" x2="0.8128" y2="2.8702" layer="51"/>
<rectangle x1="1.7272" y1="1.8542" x2="2.0828" y2="2.8702" layer="51"/>
</package>
<package name="DPAK">
<wire x1="3.2766" y1="2.4654" x2="3.277" y2="-3.729" width="0.2032" layer="21"/>
<wire x1="3.277" y1="-3.729" x2="-3.277" y2="-3.729" width="0.2032" layer="21"/>
<wire x1="-3.277" y1="-3.729" x2="-3.2766" y2="2.4654" width="0.2032" layer="21"/>
<wire x1="-3.277" y1="2.465" x2="3.2774" y2="2.4646" width="0.2032" layer="51"/>
<wire x1="-2.5654" y1="2.567" x2="-2.5654" y2="3.2782" width="0.2032" layer="51"/>
<wire x1="-2.5654" y1="3.2782" x2="-2.1082" y2="3.7354" width="0.2032" layer="51"/>
<wire x1="-2.1082" y1="3.7354" x2="2.1082" y2="3.7354" width="0.2032" layer="51"/>
<wire x1="2.1082" y1="3.7354" x2="2.5654" y2="3.2782" width="0.2032" layer="51"/>
<wire x1="2.5654" y1="3.2782" x2="2.5654" y2="2.567" width="0.2032" layer="51"/>
<wire x1="2.5654" y1="2.567" x2="-2.5654" y2="2.567" width="0.2032" layer="51"/>
<smd name="1" x="-2.28" y="-5.31" dx="1.6" dy="3" layer="1"/>
<smd name="3" x="2.28" y="-5.31" dx="1.6" dy="3" layer="1"/>
<smd name="4" x="0" y="1.588" dx="4.826" dy="5.715" layer="1"/>
<text x="-3.683" y="-3.702" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
<text x="3.937" y="-3.702" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-2.7178" y1="-6.7262" x2="-1.8542" y2="-3.8306" layer="51"/>
<rectangle x1="1.8542" y1="-6.7262" x2="2.7178" y2="-3.8306" layer="51"/>
<rectangle x1="-0.4318" y1="-4.5926" x2="0.4318" y2="-3.8306" layer="21"/>
<polygon width="0.1998" layer="51">
<vertex x="-2.5654" y="2.567"/>
<vertex x="-2.5654" y="3.2782"/>
<vertex x="-2.1082" y="3.7354"/>
<vertex x="2.1082" y="3.7354"/>
<vertex x="2.5654" y="3.2782"/>
<vertex x="2.5654" y="2.567"/>
</polygon>
</package>
<package name="SOT23-3">
<wire x1="1.4224" y1="0.6604" x2="1.4224" y2="-0.6604" width="0.1524" layer="51"/>
<wire x1="1.4224" y1="-0.6604" x2="-1.4224" y2="-0.6604" width="0.1524" layer="51"/>
<wire x1="-1.4224" y1="-0.6604" x2="-1.4224" y2="0.6604" width="0.1524" layer="51"/>
<wire x1="-1.4224" y1="0.6604" x2="1.4224" y2="0.6604" width="0.1524" layer="51"/>
<wire x1="-0.8" y1="0.7" x2="-1.4" y2="0.7" width="0.2032" layer="21"/>
<wire x1="-1.4" y1="0.7" x2="-1.4" y2="-0.1" width="0.2032" layer="21"/>
<wire x1="0.8" y1="0.7" x2="1.4" y2="0.7" width="0.2032" layer="21"/>
<wire x1="1.4" y1="0.7" x2="1.4" y2="-0.1" width="0.2032" layer="21"/>
<smd name="3" x="0" y="1.1" dx="0.8" dy="0.9" layer="1"/>
<smd name="2" x="0.95" y="-1" dx="0.8" dy="0.9" layer="1"/>
<smd name="1" x="-0.95" y="-1" dx="0.8" dy="0.9" layer="1"/>
<text x="-0.8255" y="1.778" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="SOT23-5">
<description>&lt;b&gt;Small Outline Transistor&lt;/b&gt;</description>
<wire x1="1.4224" y1="0.4294" x2="1.4224" y2="-0.4294" width="0.2032" layer="21"/>
<wire x1="1.4" y1="-0.8" x2="-1.4" y2="-0.8" width="0.1524" layer="51"/>
<wire x1="-1.4224" y1="-0.4294" x2="-1.4224" y2="0.4294" width="0.2032" layer="21"/>
<wire x1="-1.4" y1="0.8" x2="1.4" y2="0.8" width="0.1524" layer="51"/>
<wire x1="-0.2684" y1="0.8104" x2="0.2684" y2="0.8104" width="0.2032" layer="21"/>
<wire x1="1.4" y1="0.8" x2="1.4" y2="-0.8" width="0.1524" layer="51"/>
<wire x1="-1.4" y1="0.8" x2="-1.4" y2="-0.8" width="0.1524" layer="51"/>
<smd name="1" x="-0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="2" x="0" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="3" x="0.95" y="-1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="4" x="0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<smd name="5" x="-0.95" y="1.3001" dx="0.55" dy="1.2" layer="1"/>
<text x="-0.889" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9525" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.2" y1="-1.5" x2="-0.7" y2="-0.85" layer="51"/>
<rectangle x1="-0.25" y1="-1.5" x2="0.25" y2="-0.85" layer="51"/>
<rectangle x1="0.7" y1="-1.5" x2="1.2" y2="-0.85" layer="51"/>
<rectangle x1="0.7" y1="0.85" x2="1.2" y2="1.5" layer="51"/>
<rectangle x1="-1.2" y1="0.85" x2="-0.7" y2="1.5" layer="51"/>
</package>
<package name="MSOP-8-EP">
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.2032" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.2032" layer="21"/>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.2032" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.2032" layer="21"/>
<circle x="-1.5734" y="-1.5906" radius="0.1436" width="0.2032" layer="21"/>
<smd name="1" x="-0.975" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="2" x="-0.325" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="3" x="0.325" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="4" x="0.975" y="-2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="5" x="0.975" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="6" x="0.325" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="7" x="-0.325" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="8" x="-0.975" y="2.4" dx="0.41" dy="1.02" layer="1"/>
<smd name="EP" x="0" y="0" dx="2.6" dy="2.6" layer="1"/>
<text x="2.1" y="-1.21" size="0.4064" layer="27" rot="R90">&gt;VALUE</text>
<text x="-1.7" y="-1.01" size="0.4064" layer="25" rot="R90">&gt;NAME</text>
</package>
<package name="TSSOP-16">
<wire x1="-2.2764" y1="-2.2" x2="-2.5" y2="-1.9764" width="0.1778" layer="21" curve="-90"/>
<wire x1="-2.5" y1="-1.9764" x2="-2.5" y2="1.9764" width="0.1778" layer="21"/>
<wire x1="-2.5" y1="1.9764" x2="-2.2764" y2="2.2" width="0.1778" layer="21" curve="-90"/>
<wire x1="-2.2764" y1="2.2" x2="2.2764" y2="2.2" width="0.1778" layer="21"/>
<wire x1="2.2764" y1="2.2" x2="2.5" y2="1.9764" width="0.1778" layer="21" curve="-90"/>
<wire x1="2.5" y1="1.9764" x2="2.5" y2="-1.9764" width="0.1778" layer="21"/>
<wire x1="2.5" y1="-1.9764" x2="2.2764" y2="-2.2" width="0.1778" layer="21" curve="-90"/>
<wire x1="2.2764" y1="-2.2" x2="-2.2764" y2="-2.2" width="0.1778" layer="21"/>
<circle x="-2" y="-1.7" radius="0.1" width="0.1778" layer="21"/>
<smd name="1" x="-2.275" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="2" x="-1.625" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="3" x="-0.975" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="4" x="-0.325" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="5" x="0.325" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="6" x="0.975" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="7" x="1.625" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="8" x="2.275" y="-2.9" dx="0.4" dy="1.1" layer="1"/>
<smd name="9" x="2.275" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="10" x="1.625" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="11" x="0.975" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="12" x="0.325" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="13" x="-0.325" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="14" x="-0.975" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="15" x="-1.625" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<smd name="16" x="-2.275" y="2.9" dx="0.4" dy="1.1" layer="1" rot="R180"/>
<rectangle x1="0.175" y1="-3.2" x2="0.475" y2="-2.6" layer="51"/>
<rectangle x1="-0.475" y1="-3.2" x2="-0.175" y2="-2.6" layer="51"/>
<rectangle x1="-1.125" y1="-3.2" x2="-0.825" y2="-2.6" layer="51"/>
<rectangle x1="-1.775" y1="-3.2" x2="-1.475" y2="-2.6" layer="51"/>
<rectangle x1="0.825" y1="-3.2" x2="1.125" y2="-2.6" layer="51"/>
<rectangle x1="1.475" y1="-3.2" x2="1.775" y2="-2.6" layer="51"/>
<rectangle x1="2.125" y1="-3.2" x2="2.425" y2="-2.6" layer="51"/>
<rectangle x1="-2.425" y1="-3.2" x2="-2.125" y2="-2.6" layer="51"/>
<rectangle x1="-0.475" y1="2.6" x2="-0.175" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="0.175" y1="2.6" x2="0.475" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="0.825" y1="2.6" x2="1.125" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="1.475" y1="2.6" x2="1.775" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="-1.125" y1="2.6" x2="-0.825" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="-1.775" y1="2.6" x2="-1.475" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="-2.425" y1="2.6" x2="-2.125" y2="3.2" layer="51" rot="R180"/>
<rectangle x1="2.125" y1="2.6" x2="2.425" y2="3.2" layer="51" rot="R180"/>
</package>
<package name="TO-220-11LEAD">
<description>TO-220 11 Pin Package</description>
<wire x1="0" y1="0" x2="20.02" y2="0" width="0.2032" layer="51"/>
<wire x1="20.02" y1="0" x2="20.02" y2="2.95" width="0.2032" layer="21"/>
<wire x1="20.02" y1="2.95" x2="20.02" y2="4.5" width="0.2032" layer="21"/>
<wire x1="20.02" y1="4.5" x2="0" y2="4.5" width="0.2032" layer="21"/>
<wire x1="0" y1="4.5" x2="0" y2="2.95" width="0.2032" layer="21"/>
<wire x1="0" y1="2.95" x2="0" y2="0" width="0.2032" layer="21"/>
<wire x1="0" y1="2.95" x2="20.02" y2="2.95" width="0.2032" layer="21"/>
<wire x1="0" y1="0" x2="2.05" y2="0" width="0.2032" layer="21"/>
<wire x1="4.35" y1="0" x2="5.45" y2="0" width="0.2032" layer="21"/>
<wire x1="7.75" y1="0" x2="8.85" y2="0" width="0.2032" layer="21"/>
<wire x1="11.15" y1="0" x2="12.25" y2="0" width="0.2032" layer="21"/>
<wire x1="14.55" y1="0" x2="15.65" y2="0" width="0.2032" layer="21"/>
<wire x1="20" y1="0" x2="17.95" y2="0" width="0.2032" layer="21"/>
<pad name="2" x="3.2" y="0.21" drill="1.1" diameter="1.9"/>
<pad name="4" x="6.6" y="0.21" drill="1.1" diameter="1.9"/>
<pad name="6" x="10" y="0.21" drill="1.1" diameter="1.9"/>
<pad name="8" x="13.4" y="0.21" drill="1.1" diameter="1.9"/>
<pad name="10" x="16.8" y="0.21" drill="1.1" diameter="1.9"/>
<pad name="1" x="1.5" y="-4.87" drill="1.1" diameter="1.9" shape="square"/>
<pad name="3" x="4.9" y="-4.87" drill="1.1" diameter="1.9"/>
<pad name="5" x="8.3" y="-4.87" drill="1.1" diameter="1.9"/>
<pad name="7" x="11.7" y="-4.87" drill="1.1" diameter="1.9"/>
<pad name="9" x="15.1" y="-4.87" drill="1.1" diameter="1.9"/>
<pad name="11" x="18.5" y="-4.87" drill="1.1" diameter="1.9"/>
<text x="0" y="5.08" size="1.27" layer="25">&gt;NAME</text>
<text x="13.335" y="5.08" size="1.27" layer="25">&gt;VALUE</text>
</package>
<package name="TO-PMOD-7">
<description>7-Lead package for National voltage switchers (LMZ14203)</description>
<wire x1="-5.08" y1="5.28" x2="-5.08" y2="-4.57" width="0.127" layer="21"/>
<wire x1="-5.08" y1="5.28" x2="5.08" y2="5.28" width="0.127" layer="21"/>
<wire x1="5.08" y1="5.28" x2="5.08" y2="-4.57" width="0.127" layer="21"/>
<wire x1="-5.08" y1="-4.57" x2="5.08" y2="-4.57" width="0.127" layer="21"/>
<smd name="EP" x="0" y="0" dx="5.35" dy="8.54" layer="1"/>
<smd name="1" x="-3.81" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<smd name="2" x="-2.54" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<smd name="3" x="-1.27" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<smd name="4" x="0" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<smd name="5" x="1.27" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<smd name="6" x="2.57" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<smd name="7" x="3.81" y="-7.63" dx="2.41" dy="0.89" layer="1" rot="R90"/>
<text x="6" y="-4" size="0.8" layer="27" rot="R90">&gt;VALUE</text>
<text x="-5.3" y="-4" size="0.8" layer="25" rot="R90">&gt;NAME</text>
</package>
<package name="Q5-DD">
<description>&lt;b&gt;Q5-DD&lt;/b&gt;</description>
<wire x1="4.917" y1="3.99" x2="4.917" y2="-5.014" width="0.2032" layer="51"/>
<wire x1="4.917" y1="-5.014" x2="-4.917" y2="-5.014" width="0.2032" layer="51"/>
<wire x1="-4.917" y1="-5.014" x2="-4.917" y2="3.99" width="0.2032" layer="51"/>
<wire x1="-4.917" y1="3.99" x2="4.917" y2="3.99" width="0.2032" layer="51"/>
<circle x="0" y="-0.175" radius="1" width="0.254" layer="51"/>
<smd name="6" x="0" y="0.325" dx="10.414" dy="9.525" layer="1"/>
<smd name="3" x="0" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="1" x="-3.4" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="2" x="-1.7" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="4" x="1.7" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="5" x="3.4" y="-7.875" dx="1" dy="3.4" layer="1"/>
<text x="-5.334" y="-8.509" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="6.604" y="-8.509" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-0.381" y1="-8.768" x2="0.381" y2="-5.974" layer="51"/>
<rectangle x1="-3.781" y1="-8.768" x2="-3.019" y2="-5.974" layer="51"/>
<rectangle x1="-2.081" y1="-8.768" x2="-1.319" y2="-5.974" layer="51"/>
<rectangle x1="1.319" y1="-8.768" x2="2.081" y2="-5.974" layer="51"/>
<rectangle x1="3.019" y1="-8.768" x2="3.781" y2="-5.974" layer="51"/>
<polygon width="0.2" layer="51">
<vertex x="-4.5654" y="4.092"/>
<vertex x="-4.5654" y="4.5032"/>
<vertex x="-2.1082" y="4.9604"/>
<vertex x="2.1082" y="4.9604"/>
<vertex x="4.5654" y="4.5032"/>
<vertex x="4.5654" y="4.092"/>
</polygon>
</package>
<package name="MSOP-10-GNDPAD">
<description>10-lead MSOP w/ center GND pad</description>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.127" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.127" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.127" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.127" layer="51"/>
<wire x1="-1.6508" y1="1.5" x2="-1.6508" y2="-1.5" width="0.127" layer="21"/>
<wire x1="1.6508" y1="1.5" x2="1.6508" y2="-1.5" width="0.127" layer="21"/>
<circle x="-0.8" y="-0.8" radius="0.3" width="0.127" layer="51"/>
<circle x="-1.5494" y="-1.9812" radius="0.0567" width="0.127" layer="21"/>
<smd name="GND" x="0" y="0" dx="2.794" dy="2.083" layer="1" cream="no"/>
<smd name="8" x="0" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="7" x="0.5" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="6" x="1" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="9" x="-0.5" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="10" x="-1" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="3" x="0" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="4" x="0.5" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="5" x="1" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="2" x="-0.5" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="1" x="-1" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<text x="-1.35" y="0.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.35" y="0" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.1" y1="1.6" x2="-0.9" y2="2.45" layer="51"/>
<rectangle x1="-0.6" y1="1.6" x2="-0.4" y2="2.45" layer="51"/>
<rectangle x1="-0.1" y1="1.6" x2="0.1" y2="2.45" layer="51"/>
<rectangle x1="0.4" y1="1.6" x2="0.6" y2="2.45" layer="51"/>
<rectangle x1="0.9" y1="1.6" x2="1.1" y2="2.45" layer="51"/>
<rectangle x1="-1.1" y1="-2.45" x2="-0.9" y2="-1.6" layer="51"/>
<rectangle x1="-0.6" y1="-2.45" x2="-0.4" y2="-1.6" layer="51"/>
<rectangle x1="-0.1" y1="-2.45" x2="0.1" y2="-1.6" layer="51"/>
<rectangle x1="0.4" y1="-2.45" x2="0.6" y2="-1.6" layer="51"/>
<rectangle x1="0.9" y1="-2.45" x2="1.1" y2="-1.6" layer="51"/>
<rectangle x1="-0.9144" y1="-0.6096" x2="0.9144" y2="0.5588" layer="31"/>
</package>
<package name="TDFN-8">
<description>TDFN - 8pin, 2mmx3mm</description>
<wire x1="-1.5" y1="1" x2="-1.5" y2="-1" width="0.127" layer="51"/>
<wire x1="-1.5" y1="-1" x2="1.5" y2="-1" width="0.127" layer="51"/>
<wire x1="1.5" y1="-1" x2="1.5" y2="1" width="0.127" layer="51"/>
<wire x1="1.5" y1="1" x2="-1.5" y2="1" width="0.127" layer="51"/>
<wire x1="-1.5" y1="1.05" x2="-1.45" y2="1.05" width="0.127" layer="21"/>
<wire x1="-1.45" y1="1.05" x2="1.5" y2="1.05" width="0.2032" layer="21"/>
<wire x1="-1.5" y1="-1.05" x2="1.5" y2="-1.05" width="0.2032" layer="21"/>
<wire x1="-1.5" y1="1.05" x2="-1.45" y2="1.05" width="0.2032" layer="21" curve="-345.749967"/>
<smd name="EP" x="0" y="0" dx="1.73" dy="1.88" layer="1" stop="no" cream="no"/>
<smd name="1" x="-1.4" y="0.75" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="2" x="-1.4" y="0.25" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="4" x="-1.4" y="-0.75" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="3" x="-1.4" y="-0.25" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="8" x="1.4" y="0.75" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="7" x="1.4" y="0.25" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="5" x="1.4" y="-0.75" dx="0.8" dy="0.3" layer="1" stop="no"/>
<smd name="6" x="1.4" y="-0.25" dx="0.8" dy="0.3" layer="1" stop="no"/>
<text x="-2" y="1" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2" y="-1.4" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.8" y1="0.6" x2="-1" y2="0.9" layer="29"/>
<rectangle x1="-1.8" y1="0.6" x2="-1" y2="0.9" layer="29"/>
<rectangle x1="-1.8" y1="-0.4" x2="-1" y2="-0.1" layer="29"/>
<rectangle x1="-1.8" y1="0.1" x2="-1" y2="0.4" layer="29"/>
<rectangle x1="-1.8" y1="-0.9" x2="-1" y2="-0.6" layer="29"/>
<rectangle x1="1" y1="0.6" x2="1.8" y2="0.9" layer="29"/>
<rectangle x1="1" y1="0.1" x2="1.8" y2="0.4" layer="29"/>
<rectangle x1="1" y1="-0.4" x2="1.8" y2="-0.1" layer="29"/>
<rectangle x1="1" y1="-0.9" x2="1.8" y2="-0.6" layer="29"/>
<rectangle x1="-0.865" y1="-0.94" x2="0.865" y2="0.94" layer="29"/>
<rectangle x1="-0.3302" y1="-0.3302" x2="0.3302" y2="0.3302" layer="31"/>
</package>
<package name="8-TDFN-EP">
<description>TDFN - 8pin, 2mmx3mm</description>
<wire x1="-1" y1="1" x2="-1" y2="-1" width="0.2032" layer="51"/>
<wire x1="-1" y1="-1" x2="1" y2="-1" width="0.2032" layer="51"/>
<wire x1="1" y1="-1" x2="1" y2="1" width="0.2032" layer="51"/>
<wire x1="1" y1="1" x2="-1" y2="1" width="0.2032" layer="51"/>
<wire x1="-1" y1="1" x2="1" y2="1" width="0.2032" layer="21"/>
<wire x1="1" y1="-1" x2="-1" y2="-1" width="0.2032" layer="21"/>
<circle x="-1.25" y="1.25" radius="0.1" width="0.2032" layer="21"/>
<smd name="1" x="-0.99" y="0.75" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="2" x="-0.99" y="0.25" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="3" x="-0.99" y="-0.25" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="4" x="-0.99" y="-0.75" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="5" x="0.99" y="-0.75" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="6" x="0.99" y="-0.25" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="7" x="0.99" y="0.25" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="8" x="0.99" y="0.75" dx="0.7" dy="0.3" layer="1" roundness="100"/>
<smd name="9" x="0" y="0" dx="0.8" dy="1.38" layer="1" cream="no"/>
<text x="-0.73" y="1.25" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0475" y="-1.7175" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.35" y1="-0.65" x2="0.35" y2="-0.05" layer="31"/>
<rectangle x1="-0.35" y1="0.05" x2="0.35" y2="0.65" layer="31"/>
</package>
<package name="14-TDFN">
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.2032" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.2032" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.2032" layer="51"/>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.2032" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="1.5" y2="1.5" width="0.2032" layer="21"/>
<wire x1="1.5" y1="-1.5" x2="-1.5" y2="-1.5" width="0.2032" layer="21"/>
<circle x="-1.75" y="1.75" radius="0.1" width="0.2032" layer="21"/>
<smd name="1" x="-1.475" y="1.2" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="15" x="0" y="0" dx="1.78" dy="2.35" layer="1" stop="no" cream="no"/>
<smd name="2" x="-1.475" y="0.8" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="3" x="-1.475" y="0.4" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="4" x="-1.475" y="0" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="5" x="-1.475" y="-0.4" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="6" x="-1.475" y="-0.8" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="7" x="-1.475" y="-1.2" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="8" x="1.475" y="-1.2" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="9" x="1.475" y="-0.8" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="10" x="1.475" y="-0.4" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="11" x="1.475" y="0" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="12" x="1.475" y="0.4" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="13" x="1.475" y="0.8" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<smd name="14" x="1.475" y="1.2" dx="0.7" dy="0.25" layer="1" roundness="100"/>
<text x="-1.23" y="1.75" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.5475" y="-2.2175" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.85" y1="0.65" x2="-0.05" y2="1.15" layer="31"/>
<rectangle x1="0.05" y1="0.65" x2="0.85" y2="1.15" layer="31"/>
<rectangle x1="-0.85" y1="0.05" x2="-0.05" y2="0.55" layer="31"/>
<rectangle x1="0.05" y1="0.05" x2="0.85" y2="0.55" layer="31"/>
<rectangle x1="-0.85" y1="-0.55" x2="-0.05" y2="-0.05" layer="31"/>
<rectangle x1="0.05" y1="-0.55" x2="0.85" y2="-0.05" layer="31"/>
<rectangle x1="-0.85" y1="-1.15" x2="-0.05" y2="-0.65" layer="31"/>
<rectangle x1="0.05" y1="-1.15" x2="0.85" y2="-0.65" layer="31"/>
<rectangle x1="-0.9375" y1="-1.25" x2="0.9375" y2="1.25" layer="29"/>
</package>
<package name="MSOP-10">
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.127" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.127" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.127" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.127" layer="51"/>
<wire x1="-1.6508" y1="1.5" x2="-1.6508" y2="-1.5" width="0.127" layer="21"/>
<wire x1="1.6508" y1="1.5" x2="1.6508" y2="-1.5" width="0.127" layer="21"/>
<circle x="-0.8" y="-0.8" radius="0.3" width="0.127" layer="51"/>
<circle x="-0.7794" y="-0.8112" radius="0.0567" width="0.127" layer="21"/>
<smd name="8" x="0" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="7" x="0.5" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="6" x="1" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="9" x="-0.5" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="10" x="-1" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="3" x="0" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="4" x="0.5" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="5" x="1" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="2" x="-0.5" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="1" x="-1" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<text x="-1.35" y="0.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.35" y="0" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.1" y1="1.6" x2="-0.9" y2="2.45" layer="51"/>
<rectangle x1="-0.6" y1="1.6" x2="-0.4" y2="2.45" layer="51"/>
<rectangle x1="-0.1" y1="1.6" x2="0.1" y2="2.45" layer="51"/>
<rectangle x1="0.4" y1="1.6" x2="0.6" y2="2.45" layer="51"/>
<rectangle x1="0.9" y1="1.6" x2="1.1" y2="2.45" layer="51"/>
<rectangle x1="-1.1" y1="-2.45" x2="-0.9" y2="-1.6" layer="51"/>
<rectangle x1="-0.6" y1="-2.45" x2="-0.4" y2="-1.6" layer="51"/>
<rectangle x1="-0.1" y1="-2.45" x2="0.1" y2="-1.6" layer="51"/>
<rectangle x1="0.4" y1="-2.45" x2="0.6" y2="-1.6" layer="51"/>
<rectangle x1="0.9" y1="-2.45" x2="1.1" y2="-1.6" layer="51"/>
</package>
<package name="SO-24W">
<wire x1="-7.62" y1="-3.302" x2="7.62" y2="-3.302" width="0.2032" layer="21"/>
<wire x1="7.62" y1="-3.302" x2="7.62" y2="3.302" width="0.2032" layer="21"/>
<wire x1="7.62" y1="3.302" x2="-7.62" y2="3.302" width="0.2032" layer="21"/>
<wire x1="-7.62" y1="0.762" x2="-7.62" y2="-0.762" width="0.2032" layer="21" curve="-180"/>
<wire x1="-7.62" y1="0.762" x2="-7.62" y2="3.302" width="0.2032" layer="21"/>
<wire x1="-7.62" y1="-0.762" x2="-7.62" y2="-3.302" width="0.2032" layer="21"/>
<smd name="1" x="-6.985" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="2" x="-5.715" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="3" x="-4.445" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="4" x="-3.175" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="5" x="-1.905" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="6" x="-0.635" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="7" x="0.635" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="8" x="1.905" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="9" x="3.175" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="10" x="4.445" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="18" x="0.635" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="17" x="1.905" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="16" x="3.175" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="15" x="4.445" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="14" x="5.715" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="13" x="6.985" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="12" x="6.985" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="11" x="5.715" y="-4.953" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="19" x="-0.635" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="20" x="-1.905" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="21" x="-3.175" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="22" x="-4.445" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="23" x="-5.715" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<smd name="24" x="-6.985" y="4.826" dx="0.762" dy="1.524" layer="1" roundness="100"/>
<text x="0" y="0" size="0.4064" layer="25">&gt;NAME</text>
<text x="0" y="-1.27" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="Q5-DD_SPX29300">
<wire x1="-5.5118" y1="5.6896" x2="-5.5118" y2="6.6548" width="0.254" layer="21"/>
<wire x1="-5.5118" y1="6.6548" x2="-3.81" y2="6.6548" width="0.254" layer="21"/>
<wire x1="5.5118" y1="5.6896" x2="5.5118" y2="6.6548" width="0.254" layer="21"/>
<wire x1="5.5118" y1="6.6548" x2="3.81" y2="6.6548" width="0.254" layer="21"/>
<circle x="-3.4" y="-3.8608" radius="0.2047" width="0.4064" layer="21"/>
<circle x="-1.7" y="-3.8608" radius="0.2047" width="0.4064" layer="21"/>
<circle x="0" y="-3.8608" radius="0.2047" width="0.4064" layer="21"/>
<circle x="1.7" y="-3.8608" radius="0.2047" width="0.4064" layer="21"/>
<circle x="3.4" y="-3.8608" radius="0.2047" width="0.4064" layer="21"/>
<smd name="6" x="0" y="1.595" dx="10.414" dy="9.525" layer="1" cream="no"/>
<smd name="3" x="0" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="1" x="-3.4" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="2" x="-1.7" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="4" x="1.7" y="-7.875" dx="1" dy="3.4" layer="1"/>
<smd name="5" x="3.4" y="-7.875" dx="1" dy="3.4" layer="1"/>
<text x="-4.445" y="-4.191" size="0.4064" layer="25">&gt;Name</text>
<text x="2.286" y="-4.191" size="0.4064" layer="27">&gt;Value</text>
<rectangle x1="-3.81" y1="2.54" x2="-1.27" y2="5.08" layer="31"/>
<rectangle x1="1.27" y1="2.54" x2="3.81" y2="5.08" layer="31"/>
<rectangle x1="1.27" y1="-2.54" x2="3.81" y2="0" layer="31"/>
<rectangle x1="-3.81" y1="-2.54" x2="-1.27" y2="0" layer="31"/>
</package>
<package name="PTC">
<wire x1="-3.81" y1="1.524" x2="3.81" y2="1.524" width="0.2032" layer="21"/>
<wire x1="3.81" y1="1.524" x2="3.81" y2="-1.524" width="0.2032" layer="21"/>
<wire x1="3.81" y1="-1.524" x2="-3.81" y2="-1.524" width="0.2032" layer="21"/>
<wire x1="-3.81" y1="-1.524" x2="-3.81" y2="1.524" width="0.2032" layer="21"/>
<pad name="P$1" x="-2.54" y="0" drill="0.8" diameter="1.8796"/>
<pad name="P$2" x="2.54" y="0" drill="0.8" diameter="1.8796"/>
<text x="-3.81" y="1.705" size="0.4318" layer="25">&gt;Name</text>
<text x="-3.81" y="-2.14" size="0.4318" layer="27">&gt;Value</text>
</package>
<package name="PTC-1206">
<wire x1="-1.5" y1="0.75" x2="1.5" y2="0.75" width="0.127" layer="51"/>
<wire x1="1.5" y1="0.75" x2="1.5" y2="-0.75" width="0.127" layer="51"/>
<wire x1="1.5" y1="-0.75" x2="-1.5" y2="-0.75" width="0.127" layer="51"/>
<wire x1="-1.5" y1="-0.75" x2="-1.5" y2="0.75" width="0.127" layer="51"/>
<wire x1="0.635" y1="-0.762" x2="-0.635" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-0.635" y1="0.762" x2="0.635" y2="0.762" width="0.2032" layer="21"/>
<wire x1="-1.143" y1="-1.016" x2="0.254" y2="1.016" width="0.127" layer="51"/>
<wire x1="0.254" y1="1.016" x2="1.143" y2="1.016" width="0.127" layer="51"/>
<smd name="1" x="-1.4" y="0" dx="1" dy="1.8" layer="1"/>
<smd name="2" x="1.4" y="0" dx="1" dy="1.8" layer="1"/>
<text x="-1.524" y="1.27" size="0.4064" layer="25">&gt;Name</text>
<text x="-1.524" y="-1.651" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="0603">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="MULTIWATT15_YB324GHEATSINK">
<wire x1="-10.16" y1="2.54" x2="-10.16" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="5.94" x2="-10.16" y2="7.54" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="7.54" x2="10.04" y2="7.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="7.54" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="10.04" y1="5.94" x2="10.04" y2="2.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="2.54" x2="-10.16" y2="2.54" width="0.2032" layer="51"/>
<wire x1="-10.16" y1="5.94" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.15" y1="2.55" x2="-8.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-6.5" y1="2.55" x2="-6.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-3.95" y1="2.55" x2="-3.75" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-1.45" y1="2.55" x2="-1.25" y2="2.55" width="0.2032" layer="21"/>
<wire x1="1.1" y1="2.55" x2="1.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="3.65" y1="2.55" x2="3.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="6.2" y1="2.55" x2="6.4" y2="2.55" width="0.2032" layer="21"/>
<wire x1="10.05" y1="2.55" x2="8.75" y2="2.55" width="0.2032" layer="21"/>
<wire x1="29.9974" y1="-3.556" x2="16.002" y2="-3.556" width="0.254" layer="51"/>
<wire x1="-16.002" y1="-3.556" x2="-29.9974" y2="-3.556" width="0.254" layer="51"/>
<wire x1="-29.9974" y1="12.446" x2="-29.9974" y2="-3.556" width="0.254" layer="51"/>
<wire x1="29.9974" y1="12.446" x2="29.9974" y2="-3.556" width="0.254" layer="51"/>
<wire x1="29.9974" y1="12.446" x2="-29.9974" y2="12.446" width="0.254" layer="51"/>
<wire x1="16.002" y1="-3.556" x2="16.002" y2="7.747" width="0.254" layer="51"/>
<wire x1="-16.002" y1="7.747" x2="-16.002" y2="-3.556" width="0.254" layer="51"/>
<wire x1="16.002" y1="7.747" x2="-16.002" y2="7.747" width="0.254" layer="51"/>
<pad name="2" x="-7.68" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="4" x="-5.14" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="6" x="-2.6" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="8" x="-0.06" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="10" x="2.48" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="12" x="5.02" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="14" x="7.56" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="1" x="-8.95" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="3" x="-6.41" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="5" x="-3.87" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="7" x="-1.33" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="9" x="1.21" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="11" x="3.75" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="13" x="6.29" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="15" x="8.83" y="-2.39" drill="1.1" diameter="1.9"/>
<text x="-10.26" y="7.69" size="1.27" layer="25">&gt;NAME</text>
<text x="3.44" y="7.69" size="1.27" layer="27">&gt;VALUE</text>
<hole x="19.1516" y="4.445" drill="2.9972"/>
<hole x="-19.1516" y="4.445" drill="2.9972"/>
</package>
<package name="MULTIWATT15_6400BGHEATSINK_2">
<wire x1="-20.955" y1="21.209" x2="-4.445" y2="21.209" width="0.254" layer="21"/>
<wire x1="4.445" y1="21.209" x2="20.955" y2="21.209" width="0.254" layer="21"/>
<wire x1="-12.7" y1="6.096" x2="-12.7" y2="-4.191" width="0.254" layer="21"/>
<wire x1="12.7" y1="5.969" x2="12.7" y2="-4.191" width="0.254" layer="21"/>
<wire x1="12.7" y1="-4.191" x2="20.955" y2="-4.191" width="0.254" layer="21"/>
<wire x1="20.955" y1="-4.191" x2="20.955" y2="21.209" width="0.254" layer="21"/>
<wire x1="-12.7" y1="-4.191" x2="-20.955" y2="-4.191" width="0.254" layer="21"/>
<wire x1="-20.955" y1="-4.191" x2="-20.955" y2="21.209" width="0.254" layer="21"/>
<wire x1="-10.414" y1="7.7216" x2="10.414" y2="7.7216" width="0.254" layer="21"/>
<wire x1="-4.445" y1="21.209" x2="-4.445" y2="9.2964" width="0.254" layer="21"/>
<wire x1="4.445" y1="9.2964" x2="4.445" y2="21.209" width="0.254" layer="21"/>
<wire x1="-4.445" y1="9.2964" x2="4.445" y2="9.2964" width="0.254" layer="21"/>
<wire x1="-10.16" y1="2.54" x2="-10.16" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="5.94" x2="-10.16" y2="7.54" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="7.54" x2="10.04" y2="7.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="7.54" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="10.04" y1="5.94" x2="10.04" y2="2.54" width="0.2032" layer="21"/>
<wire x1="10.04" y1="2.54" x2="-10.16" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-10.16" y1="5.94" x2="10.04" y2="5.94" width="0.2032" layer="21"/>
<wire x1="-10.15" y1="2.55" x2="-8.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-6.5" y1="2.55" x2="-6.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-3.95" y1="2.55" x2="-3.75" y2="2.55" width="0.2032" layer="21"/>
<wire x1="-1.45" y1="2.55" x2="-1.25" y2="2.55" width="0.2032" layer="21"/>
<wire x1="1.1" y1="2.55" x2="1.3" y2="2.55" width="0.2032" layer="21"/>
<wire x1="3.65" y1="2.55" x2="3.85" y2="2.55" width="0.2032" layer="21"/>
<wire x1="6.2" y1="2.55" x2="6.4" y2="2.55" width="0.2032" layer="21"/>
<wire x1="10.05" y1="2.55" x2="8.75" y2="2.55" width="0.2032" layer="21"/>
<pad name="2" x="-7.68" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="4" x="-5.14" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="6" x="-2.6" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="8" x="-0.06" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="10" x="2.48" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="12" x="5.02" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="14" x="7.56" y="2.69" drill="1.1" diameter="1.9"/>
<pad name="1" x="-8.95" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="3" x="-6.41" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="5" x="-3.87" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="7" x="-1.33" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="9" x="1.21" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="11" x="3.75" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="13" x="6.29" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="15" x="8.83" y="-2.39" drill="1.1" diameter="1.9"/>
<pad name="P$1" x="-12.7" y="8.509" drill="2.413" diameter="3.81"/>
<pad name="P$2" x="12.7" y="8.509" drill="2.413" diameter="3.81"/>
<text x="-10.26" y="7.69" size="1.27" layer="25">&gt;NAME</text>
<text x="3.44" y="7.69" size="1.27" layer="27">&gt;VALUE</text>
</package>
<package name="SSOP24">
<wire x1="-4.25" y1="2.5" x2="4.25" y2="2.5" width="0.2032" layer="21"/>
<wire x1="4.25" y1="2.5" x2="4.25" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="4.25" y1="-2.5" x2="-4.25" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="-4.25" y1="-2.5" x2="-4.25" y2="2.5" width="0.2032" layer="21"/>
<circle x="-3.556" y="-1.778" radius="0.2231" width="0.2032" layer="21"/>
<smd name="24" x="-3.575" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="23" x="-2.925" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="22" x="-2.275" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="20" x="-0.975" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="21" x="-1.625" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="19" x="-0.325" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="18" x="0.325" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="17" x="0.975" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="16" x="1.625" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="15" x="2.275" y="3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="1" x="-3.575" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="2" x="-2.925" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="3" x="-2.275" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="4" x="-1.625" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="5" x="-0.975" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="6" x="-0.325" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="7" x="0.325" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="8" x="0.975" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="9" x="1.625" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="10" x="2.275" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="11" x="2.925" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="12" x="3.575" y="-3.656" dx="0.348" dy="1.397" layer="1"/>
<smd name="13" x="3.575" y="3.656" dx="0.348" dy="1.397" layer="1" rot="R180"/>
<smd name="14" x="2.925" y="3.656" dx="0.348" dy="1.397" layer="1" rot="R180"/>
<text x="-3.81" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.81" y="0" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="QFN16-4X4">
<description>&lt;b&gt;16-Lead Plastic Quad Flat, No Lead Package (ML) - 4x4x0.9mm Body [QFN]&lt;/b&gt;&lt;p&gt;
Source: http://ww1.microchip.com/downloads/en/DeviceDoc/41203E.pdf</description>
<wire x1="-1.95" y1="1.925" x2="-1.95" y2="-1.95" width="0.1016" layer="51"/>
<wire x1="1.95" y1="-1.95" x2="1.95" y2="1.925" width="0.1016" layer="51"/>
<wire x1="-2.032" y1="2.0066" x2="-1.4986" y2="2.0066" width="0.2032" layer="21"/>
<wire x1="-2.032" y1="2.0066" x2="-2.032" y2="1.3462" width="0.2032" layer="21"/>
<wire x1="1.4986" y1="2.0066" x2="2.032" y2="2.0066" width="0.2032" layer="21"/>
<wire x1="2.032" y1="2.0066" x2="2.032" y2="1.3462" width="0.2032" layer="21"/>
<wire x1="-1.524" y1="-2.032" x2="-2.0574" y2="-2.032" width="0.2032" layer="21"/>
<wire x1="-2.0574" y1="-2.032" x2="-2.0574" y2="-1.3716" width="0.2032" layer="21"/>
<wire x1="2.0574" y1="-2.032" x2="1.524" y2="-2.032" width="0.2032" layer="21"/>
<wire x1="2.0574" y1="-2.032" x2="2.0574" y2="-1.3716" width="0.2032" layer="21"/>
<smd name="1" x="-2" y="0.975" dx="0.8" dy="0.35" layer="1"/>
<smd name="2" x="-2" y="0.325" dx="0.8" dy="0.35" layer="1"/>
<smd name="3" x="-2" y="-0.325" dx="0.8" dy="0.35" layer="1"/>
<smd name="4" x="-2" y="-0.975" dx="0.8" dy="0.35" layer="1"/>
<smd name="5" x="-0.975" y="-2" dx="0.8" dy="0.35" layer="1" rot="R90"/>
<smd name="6" x="-0.325" y="-2" dx="0.8" dy="0.35" layer="1" rot="R90"/>
<smd name="7" x="0.325" y="-2" dx="0.8" dy="0.35" layer="1" rot="R90"/>
<smd name="8" x="0.975" y="-2" dx="0.8" dy="0.35" layer="1" rot="R90"/>
<smd name="9" x="2" y="-0.975" dx="0.8" dy="0.35" layer="1" rot="R180"/>
<smd name="10" x="2" y="-0.325" dx="0.8" dy="0.35" layer="1" rot="R180"/>
<smd name="11" x="2" y="0.325" dx="0.8" dy="0.35" layer="1" rot="R180"/>
<smd name="12" x="2" y="0.975" dx="0.8" dy="0.35" layer="1" rot="R180"/>
<smd name="13" x="0.975" y="2" dx="0.8" dy="0.35" layer="1" rot="R270"/>
<smd name="14" x="0.325" y="2" dx="0.8" dy="0.35" layer="1" rot="R270"/>
<smd name="15" x="-0.325" y="2" dx="0.8" dy="0.35" layer="1" rot="R270"/>
<smd name="16" x="-0.975" y="2" dx="0.8" dy="0.35" layer="1" rot="R270"/>
<smd name="EXP" x="0" y="0" dx="2.5" dy="2.5" layer="1" stop="no" cream="no"/>
<text x="-1.95" y="2.6" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.0516" y="-3.1634" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.95" y1="1.475" x2="-1.525" y2="1.925" layer="51"/>
<rectangle x1="-1.3" y1="-1.3" x2="1.3" y2="1.3" layer="29"/>
<rectangle x1="-1.95" y1="1.475" x2="-1.525" y2="1.925" layer="21"/>
<rectangle x1="-1" y1="0.2" x2="-0.2" y2="1" layer="31"/>
<rectangle x1="0.2" y1="0.2" x2="1" y2="1" layer="31"/>
<rectangle x1="0.2" y1="-1" x2="1" y2="-0.2" layer="31"/>
<rectangle x1="-1" y1="-1" x2="-0.2" y2="-0.2" layer="31"/>
</package>
<package name="QFN-10_PAD">
<wire x1="-1.575" y1="1.585" x2="1.57" y2="1.585" width="0.03" layer="51"/>
<wire x1="1.57" y1="1.585" x2="1.57" y2="-1.565" width="0.03" layer="51"/>
<wire x1="1.57" y1="-1.565" x2="-1.575" y2="-1.565" width="0.03" layer="51"/>
<wire x1="-1.575" y1="-1.565" x2="-1.575" y2="1.585" width="0.03" layer="51"/>
<wire x1="-1.75" y1="-1.75" x2="-1.5" y2="-1.5" width="0.2032" layer="21"/>
<wire x1="-1.651" y1="1.4986" x2="-1.651" y2="0.8382" width="0.2032" layer="21"/>
<wire x1="1.651" y1="1.4986" x2="1.651" y2="0.8382" width="0.2032" layer="21"/>
<wire x1="1.651" y1="-0.8128" x2="1.651" y2="-1.4732" width="0.2032" layer="21"/>
<circle x="-1.25" y="-1.25" radius="0.1285" width="0.03" layer="51"/>
<smd name="1" x="-1" y="-1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="2" x="-0.5" y="-1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="3" x="0" y="-1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="4" x="0.5" y="-1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="5" x="1" y="-1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="6" x="1" y="1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="7" x="0.5" y="1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="8" x="0" y="1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="9" x="-0.5" y="1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="10" x="-1" y="1.475" dx="0.85" dy="0.2968" layer="1" rot="R90"/>
<smd name="15" x="0" y="0" dx="1.65" dy="2.4" layer="1" rot="R90" cream="no"/>
<smd name="11" x="-1.5" y="0.25" dx="0.7" dy="0.28" layer="1" rot="R180"/>
<smd name="12" x="-1.5" y="-0.25" dx="0.7" dy="0.28" layer="1" rot="R180"/>
<smd name="13" x="1.5" y="0.25" dx="0.7" dy="0.28" layer="1" rot="R180"/>
<smd name="14" x="1.5" y="-0.25" dx="0.7" dy="0.28" layer="1" rot="R180"/>
<rectangle x1="-1.1938" y1="-0.4318" x2="1.1938" y2="0.4318" layer="31"/>
</package>
<package name="TRANSFORMER">
<wire x1="7" y1="7.5" x2="-7" y2="7.5" width="0.127" layer="21"/>
<wire x1="-7" y1="7.5" x2="-7" y2="-7.5" width="0.127" layer="21"/>
<wire x1="-7" y1="-7.5" x2="7" y2="-7.5" width="0.127" layer="21"/>
<wire x1="7" y1="-7.5" x2="7" y2="7.5" width="0.127" layer="21"/>
<wire x1="3.15" y1="10.3" x2="-3.15" y2="10.3" width="0.127" layer="51"/>
<wire x1="-3.15" y1="10.3" x2="-3.15" y2="-10.3" width="0.127" layer="51"/>
<wire x1="-3.15" y1="-10.3" x2="3.15" y2="-10.3" width="0.127" layer="51"/>
<wire x1="3.15" y1="-10.3" x2="3.15" y2="10.3" width="0.127" layer="51"/>
<wire x1="-3.302" y1="7.5438" x2="-3.302" y2="10.414" width="0.127" layer="21"/>
<wire x1="-3.302" y1="10.414" x2="3.302" y2="10.414" width="0.127" layer="21"/>
<wire x1="3.302" y1="10.414" x2="3.302" y2="7.5184" width="0.127" layer="21"/>
<wire x1="-3.302" y1="-7.5184" x2="-3.302" y2="-10.414" width="0.127" layer="21"/>
<wire x1="-3.302" y1="-10.414" x2="3.302" y2="-10.414" width="0.127" layer="21"/>
<wire x1="3.302" y1="-10.414" x2="3.302" y2="-7.5184" width="0.127" layer="21"/>
<circle x="-3" y="3" radius="0.7102" width="0.127" layer="21"/>
<pad name="4" x="5.35" y="4.75" drill="1.4"/>
<pad name="1" x="-5.35" y="4.75" drill="1.4"/>
<pad name="2" x="-5.35" y="-4.75" drill="1.4"/>
<pad name="3" x="5.35" y="-4.75" drill="1.4"/>
<text x="-7" y="6" size="1.27" layer="25">&gt;NAME</text>
<text x="0" y="-6" size="1.27" layer="27" rot="R180">&gt;VALUE</text>
</package>
<package name="TRANSFORMER_SMD">
<description>TTC-5023</description>
<wire x1="-4.8" y1="6.25" x2="-4.8" y2="-6.25" width="0.127" layer="21"/>
<wire x1="4.8" y1="-6.25" x2="4.8" y2="6.25" width="0.127" layer="21"/>
<wire x1="-4.8" y1="-6.25" x2="-3.7" y2="-6.25" width="0.127" layer="21"/>
<wire x1="3.7" y1="-6.25" x2="4.8" y2="-6.25" width="0.127" layer="21"/>
<wire x1="3.7" y1="6.25" x2="4.8" y2="6.25" width="0.127" layer="21"/>
<wire x1="-4.8" y1="6.25" x2="-3.7" y2="6.25" width="0.127" layer="21"/>
<circle x="-4.1" y="-5.5" radius="0.3605" width="0.127" layer="21"/>
<smd name="4" x="2.54" y="6.15" dx="2.9" dy="1.3" layer="1" rot="R90"/>
<smd name="3" x="2.54" y="-6.15" dx="2.9" dy="1.3" layer="1" rot="R90"/>
<smd name="1" x="-2.54" y="-6.15" dx="2.9" dy="1.3" layer="1" rot="R90"/>
<smd name="6" x="-2.54" y="6.15" dx="2.9" dy="1.3" layer="1" rot="R90"/>
<smd name="5" x="0" y="6.15" dx="2.9" dy="1.3" layer="1" rot="R90"/>
<smd name="2" x="0" y="-6.15" dx="2.9" dy="1.3" layer="1" rot="R90"/>
<text x="-4" y="3" size="0.4064" layer="25">&gt;NAME</text>
<text x="-4" y="-4" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="DIL18">
<description>&lt;b&gt;Dual In Line Package&lt;/b&gt;</description>
<wire x1="11.43" y1="3.048" x2="11.43" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="3.048" x2="-11.43" y2="1.016" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="-3.048" x2="-11.43" y2="-1.016" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="1.016" x2="-11.43" y2="-1.016" width="0.2032" layer="21" curve="-180"/>
<wire x1="-11.43" y1="3.048" x2="-11.176" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-9.144" y1="3.048" x2="-8.636" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-11.43" y1="-3.048" x2="-11.176" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="11.43" y1="3.048" x2="11.176" y2="3.048" width="0.2032" layer="21"/>
<wire x1="11.43" y1="-3.048" x2="11.176" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-6.604" y1="3.048" x2="-6.096" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-4.064" y1="3.048" x2="-3.556" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-1.524" y1="3.048" x2="-1.016" y2="3.048" width="0.2032" layer="21"/>
<wire x1="1.016" y1="3.048" x2="1.524" y2="3.048" width="0.2032" layer="21"/>
<wire x1="3.556" y1="3.048" x2="4.064" y2="3.048" width="0.2032" layer="21"/>
<wire x1="6.096" y1="3.048" x2="6.604" y2="3.048" width="0.2032" layer="21"/>
<wire x1="8.636" y1="3.048" x2="9.144" y2="3.048" width="0.2032" layer="21"/>
<wire x1="-9.144" y1="-3.048" x2="-8.636" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-6.604" y1="-3.048" x2="-6.096" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-4.064" y1="-3.048" x2="-3.556" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="-1.524" y1="-3.048" x2="-1.016" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="1.016" y1="-3.048" x2="1.524" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="3.556" y1="-3.048" x2="4.064" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="6.096" y1="-3.048" x2="6.604" y2="-3.048" width="0.2032" layer="21"/>
<wire x1="8.636" y1="-3.048" x2="9.144" y2="-3.048" width="0.2032" layer="21"/>
<pad name="1" x="-10.16" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="2" x="-7.62" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="7" x="5.08" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="8" x="7.62" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="3" x="-5.08" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="4" x="-2.54" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="6" x="2.54" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="5" x="0" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="9" x="10.16" y="-3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="10" x="10.16" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="11" x="7.62" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="12" x="5.08" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="13" x="2.54" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="14" x="0" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="15" x="-2.54" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="16" x="-5.08" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="17" x="-7.62" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<pad name="18" x="-10.16" y="3.81" drill="0.8128" shape="long" rot="R90"/>
<text x="-11.684" y="-3.048" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="-9.525" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="SO018">
<wire x1="5.5118" y1="2.1463" x2="-5.5118" y2="2.1463" width="0.1524" layer="21"/>
<wire x1="5.5118" y1="-2.1463" x2="5.8928" y2="-1.7653" width="0.1524" layer="21" curve="90"/>
<wire x1="-5.8928" y1="1.7653" x2="-5.5118" y2="2.1463" width="0.1524" layer="21" curve="-90"/>
<wire x1="5.5118" y1="2.1463" x2="5.8928" y2="1.7653" width="0.1524" layer="21" curve="-90"/>
<wire x1="-5.8928" y1="-1.7653" x2="-5.5118" y2="-2.1463" width="0.1524" layer="21" curve="90"/>
<wire x1="-5.5118" y1="-2.1463" x2="5.5118" y2="-2.1463" width="0.1524" layer="21"/>
<wire x1="5.8928" y1="-1.7653" x2="5.8928" y2="1.7653" width="0.1524" layer="21"/>
<wire x1="-5.8928" y1="1.7653" x2="-5.8928" y2="-1.7653" width="0.1524" layer="21"/>
<wire x1="-5.8928" y1="1.27" x2="-5.8928" y2="-1.27" width="0.1524" layer="21" curve="-180"/>
<smd name="1" x="-5.08" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="2" x="-3.81" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="3" x="-2.54" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="4" x="-1.27" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="5" x="0" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="6" x="1.27" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="7" x="2.54" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="8" x="3.81" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="9" x="5.08" y="-2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="10" x="5.08" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="11" x="3.81" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="12" x="2.54" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="13" x="1.27" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="14" x="0" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="15" x="-1.27" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="16" x="-2.54" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="17" x="-3.81" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<smd name="18" x="-5.08" y="2.8" dx="0.6" dy="1.2" layer="1"/>
<text x="-6.223" y="-1.9685" size="0.4064" layer="25" ratio="10" rot="R90">&gt;NAME</text>
<text x="-3.81" y="-1.27" size="0.4064" layer="27">&gt;Value</text>
<rectangle x1="-5.334" y1="-2.2733" x2="-4.826" y2="-2.1463" layer="21"/>
<rectangle x1="-4.064" y1="-2.2733" x2="-3.556" y2="-2.1463" layer="21"/>
<rectangle x1="-2.794" y1="-2.2733" x2="-2.286" y2="-2.1463" layer="21"/>
<rectangle x1="-1.524" y1="-2.2733" x2="-1.016" y2="-2.1463" layer="21"/>
<rectangle x1="-0.254" y1="-2.2733" x2="0.254" y2="-2.1463" layer="21"/>
<rectangle x1="1.016" y1="-2.2733" x2="1.524" y2="-2.1463" layer="21"/>
<rectangle x1="2.286" y1="-2.2733" x2="2.794" y2="-2.1463" layer="21"/>
<rectangle x1="3.556" y1="-2.2733" x2="4.064" y2="-2.1463" layer="21"/>
<rectangle x1="-5.334" y1="2.1463" x2="-4.826" y2="2.2733" layer="21"/>
<rectangle x1="-4.064" y1="2.1463" x2="-3.556" y2="2.2733" layer="21"/>
<rectangle x1="-2.794" y1="2.1463" x2="-2.286" y2="2.2733" layer="21"/>
<rectangle x1="-1.524" y1="2.1463" x2="-1.016" y2="2.2733" layer="21"/>
<rectangle x1="-0.254" y1="2.1463" x2="0.254" y2="2.2733" layer="21"/>
<rectangle x1="1.016" y1="2.1463" x2="1.524" y2="2.2733" layer="21"/>
<rectangle x1="2.286" y1="2.1463" x2="2.794" y2="2.2733" layer="21"/>
<rectangle x1="3.556" y1="2.1463" x2="4.064" y2="2.2733" layer="21"/>
</package>
<package name="SO18L">
<wire x1="10.0076" y1="3.7338" x2="-1.016" y2="3.7338" width="0.2032" layer="21"/>
<wire x1="10.0076" y1="-3.7338" x2="10.3378" y2="-3.429" width="0.2032" layer="21" curve="90.069449"/>
<wire x1="-1.4478" y1="3.302" x2="-1.016" y2="3.7338" width="0.2032" layer="21" curve="-90"/>
<wire x1="10.0076" y1="3.7338" x2="10.3378" y2="3.429" width="0.2032" layer="21" curve="-90.069449"/>
<wire x1="-1.4478" y1="-3.3528" x2="-1.016" y2="-3.7338" width="0.2032" layer="21" curve="90"/>
<wire x1="-1.016" y1="-3.7338" x2="10.0076" y2="-3.7338" width="0.2032" layer="21"/>
<wire x1="10.3378" y1="-3.429" x2="10.3378" y2="3.429" width="0.2032" layer="21"/>
<wire x1="-1.4478" y1="3.302" x2="-1.45" y2="1" width="0.2032" layer="21"/>
<wire x1="-1.45" y1="-1" x2="-1.4478" y2="-3.3528" width="0.2032" layer="21"/>
<wire x1="-1.327" y1="-3.3782" x2="10.2616" y2="-3.3782" width="0.2032" layer="21"/>
<wire x1="-1.45" y1="1" x2="-1.45" y2="-1" width="0.2032" layer="21" curve="-155.940425"/>
<smd name="1" x="-0.635" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="2" x="0.635" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="3" x="1.905" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="4" x="3.175" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="5" x="4.445" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="6" x="5.715" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="7" x="6.985" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="8" x="8.255" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="11" x="8.255" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="12" x="6.985" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="13" x="5.715" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="14" x="4.445" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="15" x="3.175" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="16" x="1.905" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="17" x="0.635" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="18" x="-0.635" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="9" x="9.525" y="-4.9022" dx="0.6604" dy="2.032" layer="1"/>
<smd name="10" x="9.525" y="4.9022" dx="0.6604" dy="2.032" layer="1"/>
<text x="0.254" y="-0.762" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-1.778" y="-3.556" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
</package>
<package name="VNH2SP30">
<wire x1="-8.6" y1="-8" x2="8.6" y2="-8" width="0.254" layer="51"/>
<wire x1="-8.6" y1="-8" x2="-8.6" y2="8" width="0.254" layer="51"/>
<wire x1="-8.6" y1="8" x2="8.6" y2="8" width="0.254" layer="51"/>
<wire x1="8.6" y1="8" x2="8.6" y2="-8" width="0.254" layer="51"/>
<wire x1="-7.635" y1="-8.05" x2="-8.635" y2="-8.05" width="0.254" layer="21"/>
<wire x1="-8.635" y1="-8.05" x2="-8.635" y2="8.05" width="0.254" layer="21"/>
<wire x1="-8.635" y1="8.05" x2="-7.635" y2="8.05" width="0.254" layer="21"/>
<wire x1="7.665" y1="8.05" x2="8.665" y2="8.05" width="0.254" layer="21"/>
<wire x1="8.665" y1="8.05" x2="8.665" y2="-8.05" width="0.254" layer="21"/>
<wire x1="8.665" y1="-8.05" x2="7.665" y2="-8.05" width="0.254" layer="21"/>
<circle x="-7.035" y="-6.45" radius="1" width="0.254" layer="21"/>
<smd name="1" x="-7" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="2" x="-6" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="3" x="-5" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="4" x="-4" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="5" x="-3" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="6" x="-2" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="7" x="-1" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="8" x="0" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="9" x="1" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="10" x="2" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="11" x="3" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="12" x="4" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="13" x="5" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="14" x="6" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="15" x="7" y="-9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="30" x="-7" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="29" x="-6" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="28" x="-5" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="27" x="-4" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="26" x="-3" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="25" x="-2" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="24" x="-1" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="23" x="0" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="22" x="1" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="21" x="2" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="20" x="3" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="19" x="4" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="18" x="5" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="17" x="6" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="16" x="7" y="9.1" dx="0.67" dy="1.3" layer="1"/>
<smd name="SLUG1" x="0" y="-3.05" dx="10.3" dy="5.25" layer="1"/>
<smd name="SLUG3" x="-4.165" y="3.05" dx="6.23" dy="5.25" layer="1"/>
<smd name="SLUG2" x="4.165" y="3.05" dx="6.23" dy="5.25" layer="1"/>
<text x="-8.605" y="10.6" size="0.762" layer="25">&gt;NAME</text>
<text x="-8.605" y="-10.99" size="0.762" layer="27">&gt;VALUE</text>
</package>
<package name="78XXL">
<description>&lt;b&gt;VOLTAGE REGULATOR&lt;/b&gt;</description>
<wire x1="-5.207" y1="-1.27" x2="5.207" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="5.207" y1="14.605" x2="-5.207" y2="14.605" width="0.1524" layer="21"/>
<wire x1="5.207" y1="-1.27" x2="5.207" y2="11.176" width="0.1524" layer="21"/>
<wire x1="5.207" y1="11.176" x2="4.318" y2="11.176" width="0.1524" layer="21"/>
<wire x1="4.318" y1="11.176" x2="4.318" y2="12.7" width="0.1524" layer="21"/>
<wire x1="4.318" y1="12.7" x2="5.207" y2="12.7" width="0.1524" layer="21"/>
<wire x1="5.207" y1="12.7" x2="5.207" y2="14.605" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="-1.27" x2="-5.207" y2="11.176" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="11.176" x2="-4.318" y2="11.176" width="0.1524" layer="21"/>
<wire x1="-4.318" y1="11.176" x2="-4.318" y2="12.7" width="0.1524" layer="21"/>
<wire x1="-4.318" y1="12.7" x2="-5.207" y2="12.7" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="12.7" x2="-5.207" y2="14.605" width="0.1524" layer="21"/>
<wire x1="-4.572" y1="-0.635" x2="4.572" y2="-0.635" width="0.0508" layer="21"/>
<wire x1="4.572" y1="7.62" x2="4.572" y2="-0.635" width="0.0508" layer="21"/>
<wire x1="4.572" y1="7.62" x2="-4.572" y2="7.62" width="0.0508" layer="21"/>
<wire x1="-4.572" y1="-0.635" x2="-4.572" y2="7.62" width="0.0508" layer="21"/>
<circle x="0" y="11.176" radius="1.8034" width="0.1524" layer="21"/>
<circle x="0" y="11.176" radius="4.191" width="0" layer="42"/>
<circle x="0" y="11.176" radius="4.191" width="0" layer="43"/>
<pad name="IN" x="-2.54" y="-3.81" drill="1.016" shape="long" rot="R90"/>
<pad name="GND" x="0" y="-3.81" drill="1.016" shape="long" rot="R90"/>
<pad name="OUT" x="2.54" y="-3.81" drill="1.016" shape="long" rot="R90"/>
<text x="-3.81" y="5.08" size="1.778" layer="25" ratio="10">&gt;NAME</text>
<text x="-3.937" y="2.54" size="1.778" layer="27" ratio="10">&gt;VALUE</text>
<text x="-4.445" y="7.874" size="0.9906" layer="21" ratio="10">A15,2mm</text>
<text x="-0.508" y="0" size="1.27" layer="51" ratio="10">-</text>
<text x="-3.048" y="0" size="1.27" layer="51" ratio="10">I</text>
<text x="2.032" y="0" size="1.27" layer="51" ratio="10">O</text>
<rectangle x1="1.905" y1="-2.159" x2="3.175" y2="-1.27" layer="21"/>
<rectangle x1="1.905" y1="-3.81" x2="3.175" y2="-2.159" layer="51"/>
<rectangle x1="-0.635" y1="-2.159" x2="0.635" y2="-1.27" layer="21"/>
<rectangle x1="-3.175" y1="-2.159" x2="-1.905" y2="-1.27" layer="21"/>
<rectangle x1="-0.635" y1="-3.81" x2="0.635" y2="-2.159" layer="51"/>
<rectangle x1="-3.175" y1="-3.81" x2="-1.905" y2="-2.159" layer="51"/>
<hole x="0" y="11.176" drill="3.302"/>
</package>
<package name="TO220-IGO">
<wire x1="5.08" y1="-1.905" x2="-5.08" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-1.905" x2="-5.08" y2="1.905" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="1.905" x2="-5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="2.54" x2="5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="1.905" width="0.2032" layer="21"/>
<wire x1="5.08" y1="1.905" x2="5.08" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="5.08" y1="1.905" x2="-5.08" y2="1.905" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="8.255" y2="2.54" width="0.2032" layer="51"/>
<wire x1="8.255" y1="2.54" x2="8.255" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="8.255" y1="-5.715" x2="9.525" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="9.525" y1="-5.715" x2="9.525" y2="3.81" width="0.2032" layer="51"/>
<wire x1="9.525" y1="3.81" x2="-9.525" y2="3.81" width="0.2032" layer="51"/>
<wire x1="-9.525" y1="3.81" x2="-9.525" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="-9.525" y1="-5.715" x2="-8.255" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="-8.255" y1="-5.715" x2="-8.255" y2="2.54" width="0.2032" layer="51"/>
<wire x1="-8.255" y1="2.54" x2="-5.08" y2="2.54" width="0.2032" layer="51"/>
<pad name="IN" x="-2.54" y="0" drill="1" diameter="1.8796" shape="square"/>
<pad name="GND" x="0" y="0" drill="1" diameter="1.8796"/>
<pad name="OUT" x="2.54" y="0" drill="1" diameter="1.8796"/>
</package>
<package name="TO-92">
<description>&lt;b&gt;TO 92&lt;/b&gt;</description>
<wire x1="-2.0946" y1="-1.651" x2="-0.7863" y2="2.5485" width="0.2032" layer="21" curve="-111.098957" cap="flat"/>
<wire x1="0.7863" y1="2.5484" x2="2.0945" y2="-1.651" width="0.2032" layer="21" curve="-111.09954" cap="flat"/>
<wire x1="-2.0945" y1="-1.651" x2="2.0945" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="-2.6549" y1="-0.254" x2="-2.2537" y2="-0.254" width="0.2032" layer="21"/>
<wire x1="-0.2863" y1="-0.254" x2="0.2863" y2="-0.254" width="0.2032" layer="21"/>
<wire x1="2.2537" y1="-0.254" x2="2.6549" y2="-0.254" width="0.2032" layer="21"/>
<pad name="3" x="1.27" y="0" drill="0.8128" diameter="1.8796"/>
<pad name="2" x="0" y="1.905" drill="0.8128" diameter="1.8796"/>
<pad name="1" x="-1.27" y="0" drill="0.8128" diameter="1.8796"/>
<text x="3.175" y="0.635" size="0.4064" layer="25" ratio="10">&gt;NAME</text>
<text x="3.175" y="-1.27" size="0.4064" layer="27" ratio="10">&gt;VALUE</text>
</package>
<package name="TO-220-ALT">
<wire x1="-5.207" y1="-1.27" x2="5.207" y2="-1.27" width="0.1524" layer="21"/>
<wire x1="5.207" y1="14.605" x2="-5.207" y2="14.605" width="0.1524" layer="21"/>
<wire x1="5.207" y1="-1.27" x2="5.207" y2="11.176" width="0.1524" layer="21"/>
<wire x1="5.207" y1="11.176" x2="4.318" y2="11.176" width="0.1524" layer="21"/>
<wire x1="4.318" y1="11.176" x2="4.318" y2="12.7" width="0.1524" layer="21"/>
<wire x1="4.318" y1="12.7" x2="5.207" y2="12.7" width="0.1524" layer="21"/>
<wire x1="5.207" y1="12.7" x2="5.207" y2="14.605" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="-1.27" x2="-5.207" y2="11.176" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="11.176" x2="-4.318" y2="11.176" width="0.1524" layer="21"/>
<wire x1="-4.318" y1="11.176" x2="-4.318" y2="12.7" width="0.1524" layer="21"/>
<wire x1="-4.318" y1="12.7" x2="-5.207" y2="12.7" width="0.1524" layer="21"/>
<wire x1="-5.207" y1="12.7" x2="-5.207" y2="14.605" width="0.1524" layer="21"/>
<wire x1="-4.572" y1="-0.635" x2="4.572" y2="-0.635" width="0.0508" layer="21"/>
<wire x1="4.572" y1="7.62" x2="4.572" y2="-0.635" width="0.0508" layer="21"/>
<wire x1="4.572" y1="7.62" x2="-4.572" y2="7.62" width="0.0508" layer="21"/>
<wire x1="-4.572" y1="-0.635" x2="-4.572" y2="7.62" width="0.0508" layer="21"/>
<circle x="0" y="11.176" radius="1.8034" width="0.1524" layer="21"/>
<circle x="0" y="11.176" radius="3.048" width="0" layer="42"/>
<circle x="0" y="11.176" radius="3.048" width="0" layer="43"/>
<pad name="IN" x="-2.54" y="-3.81" drill="1.016" shape="long" rot="R90"/>
<pad name="GND" x="0" y="-3.81" drill="1.016" shape="long" rot="R90"/>
<pad name="OUT" x="2.54" y="-3.81" drill="1.016" shape="long" rot="R90"/>
<text x="-3.81" y="5.08" size="1.778" layer="25" ratio="10">&gt;NAME</text>
<text x="-3.937" y="2.54" size="1.778" layer="27" ratio="10">&gt;VALUE</text>
<text x="-0.508" y="0" size="1.27" layer="51" ratio="10">-</text>
<text x="-3.048" y="0" size="1.27" layer="51" ratio="10">I</text>
<text x="2.032" y="0" size="1.27" layer="51" ratio="10">O</text>
<rectangle x1="1.905" y1="-2.159" x2="3.175" y2="-1.27" layer="21"/>
<rectangle x1="1.905" y1="-3.81" x2="3.175" y2="-2.159" layer="51"/>
<rectangle x1="-0.635" y1="-2.159" x2="0.635" y2="-1.27" layer="21"/>
<rectangle x1="-3.175" y1="-2.159" x2="-1.905" y2="-1.27" layer="21"/>
<rectangle x1="-0.635" y1="-3.81" x2="0.635" y2="-2.159" layer="51"/>
<rectangle x1="-3.175" y1="-3.81" x2="-1.905" y2="-2.159" layer="51"/>
<hole x="0" y="11.176" drill="3.302"/>
</package>
<package name="TO220-ADJ">
<wire x1="5.08" y1="-1.905" x2="-5.08" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-1.905" x2="-5.08" y2="1.905" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="1.905" x2="-5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="2.54" x2="5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="1.905" width="0.2032" layer="21"/>
<wire x1="5.08" y1="1.905" x2="5.08" y2="-1.905" width="0.2032" layer="21"/>
<wire x1="5.08" y1="1.905" x2="-5.08" y2="1.905" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="8.255" y2="2.54" width="0.2032" layer="51"/>
<wire x1="8.255" y1="2.54" x2="8.255" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="8.255" y1="-5.715" x2="9.525" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="9.525" y1="-5.715" x2="9.525" y2="3.81" width="0.2032" layer="51"/>
<wire x1="9.525" y1="3.81" x2="-9.525" y2="3.81" width="0.2032" layer="51"/>
<wire x1="-9.525" y1="3.81" x2="-9.525" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="-9.525" y1="-5.715" x2="-8.255" y2="-5.715" width="0.2032" layer="51"/>
<wire x1="-8.255" y1="-5.715" x2="-8.255" y2="2.54" width="0.2032" layer="51"/>
<wire x1="-8.255" y1="2.54" x2="-5.08" y2="2.54" width="0.2032" layer="51"/>
<pad name="ADJ" x="-2.54" y="0" drill="1" diameter="1.8796" shape="square"/>
<pad name="OUT" x="0" y="0" drill="1" diameter="1.8796"/>
<pad name="IN" x="2.54" y="0" drill="1" diameter="1.8796"/>
</package>
<package name="SOT223">
<description>&lt;b&gt;SOT-223&lt;/b&gt;</description>
<wire x1="3.2766" y1="1.651" x2="3.2766" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="3.2766" y1="-1.651" x2="-3.2766" y2="-1.651" width="0.2032" layer="21"/>
<wire x1="-3.2766" y1="-1.651" x2="-3.2766" y2="1.651" width="0.2032" layer="21"/>
<wire x1="-3.2766" y1="1.651" x2="3.2766" y2="1.651" width="0.2032" layer="21"/>
<smd name="1" x="-2.3114" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
<smd name="2" x="0" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
<smd name="3" x="2.3114" y="-3.0988" dx="1.2192" dy="2.2352" layer="1"/>
<smd name="4" x="0" y="3.099" dx="3.6" dy="2.2" layer="1"/>
<text x="-0.8255" y="4.5085" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-0.1905" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.6002" y1="1.8034" x2="1.6002" y2="3.6576" layer="51"/>
<rectangle x1="-0.4318" y1="-3.6576" x2="0.4318" y2="-1.8034" layer="51"/>
<rectangle x1="-2.7432" y1="-3.6576" x2="-1.8796" y2="-1.8034" layer="51"/>
<rectangle x1="1.8796" y1="-3.6576" x2="2.7432" y2="-1.8034" layer="51"/>
<rectangle x1="-1.6002" y1="1.8034" x2="1.6002" y2="3.6576" layer="51"/>
<rectangle x1="-0.4318" y1="-3.6576" x2="0.4318" y2="-1.8034" layer="51"/>
<rectangle x1="-2.7432" y1="-3.6576" x2="-1.8796" y2="-1.8034" layer="51"/>
<rectangle x1="1.8796" y1="-3.6576" x2="2.7432" y2="-1.8034" layer="51"/>
</package>
<package name="V-REG_DPACK">
<description>&lt;b&gt;DPAK&lt;/b&gt;&lt;p&gt;
PLASTIC PACKAGE CASE 369C-01&lt;br&gt;
Source: http://www.onsemi.co.jp .. LM317M-D.PDF</description>
<wire x1="3.2766" y1="3.8354" x2="3.277" y2="-2.159" width="0.2032" layer="21"/>
<wire x1="3.277" y1="-2.159" x2="-3.277" y2="-2.159" width="0.2032" layer="21"/>
<wire x1="-3.277" y1="-2.159" x2="-3.2766" y2="3.8354" width="0.2032" layer="21"/>
<wire x1="-3.277" y1="3.835" x2="3.2774" y2="3.8346" width="0.2032" layer="51"/>
<wire x1="-2.5654" y1="3.937" x2="-2.5654" y2="4.6482" width="0.2032" layer="51"/>
<wire x1="-2.5654" y1="4.6482" x2="-2.1082" y2="5.1054" width="0.2032" layer="51"/>
<wire x1="-2.1082" y1="5.1054" x2="2.1082" y2="5.1054" width="0.2032" layer="51"/>
<wire x1="2.1082" y1="5.1054" x2="2.5654" y2="4.6482" width="0.2032" layer="51"/>
<wire x1="2.5654" y1="4.6482" x2="2.5654" y2="3.937" width="0.2032" layer="51"/>
<wire x1="2.5654" y1="3.937" x2="-2.5654" y2="3.937" width="0.2032" layer="51"/>
<smd name="1" x="-2.28" y="-4.8" dx="1.6" dy="3" layer="1"/>
<smd name="3" x="2.28" y="-4.8" dx="1.6" dy="3" layer="1"/>
<smd name="4" x="0" y="2.38" dx="5.8" dy="6.2" layer="1"/>
<text x="-3.81" y="-2.54" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="5.08" y="-2.54" size="1.27" layer="27" rot="R90">&gt;VALUE</text>
<rectangle x1="-2.7178" y1="-5.1562" x2="-1.8542" y2="-2.2606" layer="51"/>
<rectangle x1="1.8542" y1="-5.1562" x2="2.7178" y2="-2.2606" layer="51"/>
<rectangle x1="-0.4318" y1="-3.0226" x2="0.4318" y2="-2.2606" layer="21"/>
<polygon width="0.1998" layer="51">
<vertex x="-2.5654" y="3.937"/>
<vertex x="-2.5654" y="4.6482"/>
<vertex x="-2.1082" y="5.1054"/>
<vertex x="2.1082" y="5.1054"/>
<vertex x="2.5654" y="4.6482"/>
<vertex x="2.5654" y="3.937"/>
</polygon>
</package>
<package name="D2PACK/A">
<description>&lt;h3&gt;D&lt;sup&gt;2&lt;/sup&gt;PAK/A V-reg Package&lt;/h3&gt;
3-pins w/ tab&lt;br&gt;&lt;br&gt;
&lt;b&gt;***Unproven***&lt;/b&gt;&lt;br&gt;&lt;br&gt;
&lt;b&gt;Used on:&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;LD1085xx Adjustable 3A Regulator
&lt;/ul&gt;</description>
<wire x1="-5.2" y1="-4.575" x2="-5.2" y2="4.575" width="0.2032" layer="51"/>
<wire x1="5.2" y1="4.575" x2="5.2" y2="-4.575" width="0.2032" layer="51"/>
<wire x1="5.2" y1="-4.575" x2="-5.2" y2="-4.575" width="0.2032" layer="21"/>
<wire x1="-5.2" y1="-4.575" x2="-5.2" y2="-3.175" width="0.2032" layer="21"/>
<wire x1="5.2" y1="-4.575" x2="5.2" y2="-3.175" width="0.2032" layer="21"/>
<smd name="TAB" x="0" y="2" dx="12.2" dy="9.75" layer="1"/>
<smd name="2" x="0" y="-8.275" dx="1.6" dy="3.5" layer="1"/>
<smd name="3" x="2.54" y="-8.275" dx="1.6" dy="3.5" layer="1"/>
<smd name="1" x="-2.54" y="-8.275" dx="1.6" dy="3.5" layer="1"/>
<text x="-4.953" y="-3.556" size="0.4318" layer="25">&gt;Name</text>
<text x="-4.953" y="-4.318" size="0.4318" layer="27">&gt;Value</text>
<rectangle x1="-0.525" y1="-9.775" x2="0.525" y2="-6.575" layer="51"/>
<rectangle x1="2.015" y1="-9.775" x2="3.065" y2="-6.575" layer="51"/>
<rectangle x1="-3.065" y1="-9.775" x2="-2.015" y2="-6.575" layer="51"/>
<rectangle x1="-0.525" y1="-6.375" x2="0.525" y2="-4.475" layer="21"/>
<rectangle x1="-3.065" y1="-6.375" x2="-2.015" y2="-4.475" layer="21"/>
<rectangle x1="2.015" y1="-6.375" x2="3.065" y2="-4.475" layer="21"/>
<polygon width="0.2032" layer="51">
<vertex x="-5.2" y="4.6"/>
<vertex x="-5.2" y="5.7"/>
<vertex x="-2.8" y="6.075"/>
<vertex x="2.8" y="6.075"/>
<vertex x="5.2" y="5.7"/>
<vertex x="5.2" y="4.6"/>
</polygon>
<polygon width="0.127" layer="51">
<vertex x="-4.25" y="-1.925"/>
<vertex x="-4.25" y="0"/>
<vertex x="-3.6" y="0"/>
<vertex x="-3.6" y="3.4"/>
<vertex x="-2.8" y="3.4"/>
<vertex x="-2.8" y="6.075"/>
<vertex x="2.8" y="6.075"/>
<vertex x="2.8" y="3.4"/>
<vertex x="3.6" y="3.4"/>
<vertex x="3.6" y="0"/>
<vertex x="4.25" y="0"/>
<vertex x="4.25" y="-1.925"/>
</polygon>
</package>
<package name="SC70">
<wire x1="1" y1="0.625" x2="1" y2="-0.625" width="0.127" layer="51"/>
<wire x1="-1" y1="-0.625" x2="-1" y2="0.625" width="0.127" layer="51"/>
<wire x1="-1" y1="-0.625" x2="1" y2="-0.625" width="0.127" layer="51"/>
<wire x1="-1" y1="0.625" x2="1" y2="0.625" width="0.127" layer="51"/>
<smd name="1" x="-0.65" y="-0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="2" x="0" y="-0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="3" x="0.65" y="-0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="4" x="0.65" y="0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<smd name="5" x="-0.65" y="0.825" dx="0.4" dy="0.75" layer="1" cream="no"/>
<text x="-0.889" y="1.524" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.762" y="-0.254" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.85" y1="0.45" x2="-0.45" y2="1.2" layer="31"/>
<rectangle x1="0.45" y1="0.45" x2="0.85" y2="1.2" layer="31"/>
<rectangle x1="-0.8382" y1="-1.1684" x2="-0.508" y2="-0.4826" layer="31"/>
<rectangle x1="-0.1651" y1="-1.1684" x2="0.1651" y2="-0.4826" layer="31"/>
<rectangle x1="0.508" y1="-1.1684" x2="0.8382" y2="-0.4826" layer="31"/>
</package>
<package name="DPAK-5">
<description>DPAK 5, center lead crop, case 175AA</description>
<wire x1="3.26" y1="-3.13" x2="-3.24" y2="-3.13" width="0.127" layer="51"/>
<wire x1="3.26" y1="-3.13" x2="3.26" y2="2.87" width="0.127" layer="51"/>
<wire x1="3.26" y1="2.87" x2="-2.21" y2="2.87" width="0.127" layer="51"/>
<wire x1="-2.21" y1="2.87" x2="-3.24" y2="2.87" width="0.127" layer="51"/>
<wire x1="-3.24" y1="2.87" x2="-3.24" y2="-3.13" width="0.127" layer="51"/>
<wire x1="-2.21" y1="2.87" x2="-2.21" y2="3.6" width="0.127" layer="51"/>
<wire x1="-2.21" y1="3.6" x2="-1.96" y2="3.85" width="0.127" layer="51"/>
<wire x1="2.29" y1="2.88" x2="2.29" y2="3.6" width="0.127" layer="51"/>
<wire x1="2.29" y1="3.6" x2="2.04" y2="3.85" width="0.127" layer="51"/>
<wire x1="2.04" y1="3.85" x2="-1.96" y2="3.85" width="0.127" layer="51"/>
<wire x1="-3.09" y1="3.03" x2="-3.48" y2="3.03" width="0.127" layer="21"/>
<wire x1="-3.48" y1="3.03" x2="-3.48" y2="-3.38" width="0.127" layer="21"/>
<wire x1="-3.48" y1="-3.38" x2="-3" y2="-3.38" width="0.127" layer="21"/>
<wire x1="-3.48" y1="3.03" x2="-3" y2="3.03" width="0.127" layer="21"/>
<wire x1="3.07" y1="-3.38" x2="3.46" y2="-3.38" width="0.127" layer="21"/>
<wire x1="3.46" y1="-3.38" x2="3.46" y2="3.03" width="0.127" layer="21"/>
<wire x1="3.46" y1="3.03" x2="2.98" y2="3.03" width="0.127" layer="21"/>
<wire x1="3.46" y1="-3.38" x2="2.98" y2="-3.38" width="0.127" layer="21"/>
<circle x="-2.27" y="-3.5" radius="0.1" width="0.254" layer="21"/>
<circle x="-1.16" y="-3.5" radius="0.1" width="0.254" layer="21"/>
<circle x="1.12" y="-3.5" radius="0.1" width="0.254" layer="21"/>
<circle x="2.23" y="-3.5" radius="0.1" width="0.254" layer="21"/>
<smd name="GND" x="0" y="1" dx="6.4" dy="5.8" layer="1" rot="R90"/>
<smd name="VOUT" x="1.14" y="-5.3" dx="2.2" dy="0.8" layer="1" rot="R90"/>
<smd name="ADJ" x="2.28" y="-5.3" dx="2.2" dy="0.8" layer="1" rot="R90"/>
<smd name="EN" x="-2.28" y="-5.3" dx="2.2" dy="0.8" layer="1" rot="R90"/>
<smd name="VIN" x="-1.14" y="-5.3" dx="2.2" dy="0.8" layer="1" rot="R90"/>
<text x="-3" y="4.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3" y="-3" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-2.62" y1="-5.8" x2="-1.92" y2="-3.1" layer="51"/>
<rectangle x1="-1.49" y1="-5.8" x2="-0.79" y2="-3.1" layer="51"/>
<rectangle x1="0.79" y1="-5.79" x2="1.49" y2="-3.09" layer="51"/>
<rectangle x1="1.92" y1="-5.79" x2="2.62" y2="-3.09" layer="51"/>
</package>
<package name="QFN-28-5MM">
<wire x1="-2" y1="2.5" x2="-2" y2="2" width="0.2032" layer="21"/>
<wire x1="-2" y1="2" x2="-2.5" y2="2" width="0.2032" layer="21"/>
<wire x1="-2.5" y1="2.5" x2="-2.5" y2="2" width="0.2032" layer="51"/>
<wire x1="-2.5" y1="2" x2="-2.5" y2="-2.5" width="0.2032" layer="51"/>
<wire x1="-2.5" y1="-2.5" x2="2.5" y2="-2.5" width="0.2032" layer="51"/>
<wire x1="2.5" y1="-2.5" x2="2.5" y2="2.5" width="0.2032" layer="51"/>
<wire x1="2.5" y1="2.5" x2="-2" y2="2.5" width="0.2032" layer="51"/>
<wire x1="-2" y1="2.5" x2="-2.5" y2="2.5" width="0.2032" layer="51"/>
<wire x1="-2" y1="2.5" x2="-2" y2="2" width="0.2032" layer="51"/>
<wire x1="-2" y1="2" x2="-2.5" y2="2" width="0.2032" layer="51"/>
<wire x1="2.54" y1="2.5" x2="2.54" y2="1.778" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="2.54" x2="-2.54" y2="1.778" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="2.54" x2="-1.778" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-2.54" x2="-1.778" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-2.54" x2="1.778" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="2.54" y1="2.54" x2="1.778" y2="2.54" width="0.2032" layer="21"/>
<circle x="-3" y="2.2" radius="0.2" width="0.2032" layer="21"/>
<circle x="-3" y="2.2" radius="0.2" width="0.2032" layer="51"/>
<smd name="P$1" x="-2.4" y="1.5" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$2" x="-2.4" y="1" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$3" x="-2.4" y="0.5" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$4" x="-2.4" y="0" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$5" x="-2.4" y="-0.5" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$6" x="-2.4" y="-1" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$7" x="-2.4" y="-1.5" dx="0.3" dy="1.15" layer="1" rot="R90"/>
<smd name="P$8" x="-1.5" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$9" x="-1" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$10" x="-0.5" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$11" x="0" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$12" x="0.5" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$13" x="1" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$14" x="1.5" y="-2.4" dx="0.3" dy="1.15" layer="1" rot="R180"/>
<smd name="P$15" x="2.4" y="-1.5" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$16" x="2.4" y="-1" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$17" x="2.4" y="-0.5" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$18" x="2.4" y="0" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$19" x="2.4" y="0.5" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$20" x="2.4" y="1" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$21" x="2.4" y="1.5" dx="0.3" dy="1.15" layer="1" rot="R270"/>
<smd name="P$22" x="1.5" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$23" x="1" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$24" x="0.5" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$25" x="0" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$26" x="-0.5" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$27" x="-1" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$28" x="-1.5" y="2.4" dx="0.3" dy="1.15" layer="1"/>
<smd name="P$29" x="0" y="0" dx="3.15" dy="3.15" layer="1" cream="no"/>
<text x="-2.54" y="3.81" size="1.27" layer="25">&gt;NAME</text>
<text x="-2.54" y="-5.08" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-1.016" y1="0.254" x2="-0.254" y2="1.016" layer="31"/>
<rectangle x1="0.254" y1="0.254" x2="1.016" y2="1.016" layer="31"/>
<rectangle x1="-1.016" y1="-1.016" x2="-0.254" y2="-0.254" layer="31"/>
<rectangle x1="0.254" y1="-1.016" x2="1.016" y2="-0.254" layer="31"/>
</package>
<package name="QFN16-3X3MM">
<description>3mm x 3mm QFN 16 pin</description>
<smd name="5" x="-0.75" y="-1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="6" x="-0.25" y="-1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="7" x="0.25" y="-1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="8" x="0.75" y="-1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="9" x="1.475" y="-0.75" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="10" x="1.475" y="-0.25" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="11" x="1.475" y="0.25" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="12" x="1.475" y="0.75" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="13" x="0.75" y="1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="14" x="0.25" y="1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="15" x="-0.25" y="1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="16" x="-0.75" y="1.475" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="1" x="-1.475" y="0.75" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="2" x="-1.475" y="0.25" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="3" x="-1.475" y="-0.25" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="4" x="-1.475" y="-0.75" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<text x="-2.54" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.1524" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.1524" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.1524" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.1524" layer="51"/>
<wire x1="-1.6" y1="1.1" x2="-1.1" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.1" y1="1.6" x2="1.6" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.6" y1="1.6" x2="1.6" y2="1.1" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.1" x2="1.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.6" x2="1.1" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-1.1" y1="-1.6" x2="-1.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.6" x2="-1.6" y2="-1.1" width="0.2032" layer="21"/>
<smd name="EXT" x="0" y="0" dx="1.68" dy="1.68" layer="1" cream="no"/>
<rectangle x1="-0.6" y1="0.15" x2="-0.15" y2="0.6" layer="31"/>
<rectangle x1="0.15" y1="0.15" x2="0.6" y2="0.6" layer="31"/>
<rectangle x1="0.15" y1="-0.6" x2="0.6" y2="-0.15" layer="31"/>
<rectangle x1="-0.6" y1="-0.6" x2="-0.15" y2="-0.15" layer="31"/>
<wire x1="-1.8" y1="0.75" x2="-1.15" y2="0.75" width="0.2032" layer="31"/>
<wire x1="-1.8" y1="-0.25" x2="-1.15" y2="-0.25" width="0.2032" layer="31"/>
<wire x1="-0.75" y1="-1.8" x2="-0.75" y2="-1.15" width="0.2032" layer="31"/>
<wire x1="0.25" y1="-1.8" x2="0.25" y2="-1.15" width="0.2032" layer="31"/>
<wire x1="1.8" y1="-0.75" x2="1.15" y2="-0.75" width="0.2032" layer="31"/>
<wire x1="1.8" y1="0.25" x2="1.15" y2="0.25" width="0.2032" layer="31"/>
<wire x1="0.75" y1="1.8" x2="0.75" y2="1.15" width="0.2032" layer="31"/>
<wire x1="-0.25" y1="1.8" x2="-0.25" y2="1.15" width="0.2032" layer="31"/>
<wire x1="0.25" y1="1.8" x2="0.25" y2="1.15" width="0.2032" layer="31"/>
<wire x1="-0.75" y1="1.8" x2="-0.75" y2="1.15" width="0.2032" layer="31"/>
<wire x1="-1.8" y1="0.25" x2="-1.15" y2="0.25" width="0.2032" layer="31"/>
<wire x1="-1.8" y1="-0.75" x2="-1.15" y2="-0.75" width="0.2032" layer="31"/>
<wire x1="-0.25" y1="-1.8" x2="-0.25" y2="-1.15" width="0.2032" layer="31"/>
<wire x1="0.75" y1="-1.8" x2="0.75" y2="-1.15" width="0.2032" layer="31"/>
<wire x1="1.8" y1="-0.25" x2="1.15" y2="-0.25" width="0.2032" layer="31"/>
<wire x1="1.8" y1="0.75" x2="1.15" y2="0.75" width="0.2032" layer="31"/>
</package>
<package name="WSON-8-PAD">
<wire x1="-1" y1="-1" x2="-1" y2="1" width="0.127" layer="51"/>
<wire x1="-1" y1="1" x2="1" y2="1" width="0.127" layer="51"/>
<wire x1="1" y1="1" x2="1" y2="-1" width="0.127" layer="51"/>
<wire x1="1" y1="-1" x2="-1" y2="-1" width="0.127" layer="51"/>
<smd name="6" x="0.25" y="0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="5" x="0.75" y="0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="8" x="-0.75" y="0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="7" x="-0.25" y="0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="2" x="-0.25" y="-0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="3" x="0.25" y="-0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="4" x="0.75" y="-0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="1" x="-0.75" y="-0.95" dx="0.25" dy="0.5" layer="1"/>
<smd name="PAD" x="0" y="0" dx="1.6" dy="0.9" layer="1" cream="no"/>
<wire x1="-1" y1="1" x2="-1" y2="-1" width="0.127" layer="21"/>
<wire x1="1" y1="1" x2="1" y2="-1" width="0.127" layer="21"/>
<circle x="-1" y="-1" radius="0.05" width="0.127" layer="21"/>
<rectangle x1="-0.8" y1="-0.45" x2="0.8" y2="0.45" layer="51"/>
<rectangle x1="-0.375" y1="-1" x2="-0.125" y2="-0.7" layer="51"/>
<rectangle x1="-0.875" y1="-1" x2="-0.625" y2="-0.7" layer="51"/>
<rectangle x1="0.125" y1="-1" x2="0.375" y2="-0.7" layer="51"/>
<rectangle x1="0.625" y1="-1" x2="0.875" y2="-0.7" layer="51"/>
<rectangle x1="0.125" y1="0.7" x2="0.375" y2="1" layer="51" rot="R180"/>
<rectangle x1="0.625" y1="0.7" x2="0.875" y2="1" layer="51" rot="R180"/>
<rectangle x1="-0.375" y1="0.7" x2="-0.125" y2="1" layer="51" rot="R180"/>
<rectangle x1="-0.875" y1="0.7" x2="-0.625" y2="1" layer="51" rot="R180"/>
<rectangle x1="-0.65" y1="-0.35" x2="0.65" y2="0.35" layer="31"/>
</package>
<package name="QFN-28-5MM-1:1">
<wire x1="-2" y1="2.5" x2="-2" y2="2" width="0.2032" layer="21"/>
<wire x1="-2" y1="2" x2="-2.5" y2="2" width="0.2032" layer="21"/>
<wire x1="2.54" y1="2.5" x2="2.54" y2="1.778" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-2.54" x2="2.54" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="2.54" x2="-2.54" y2="1.778" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="2.54" x2="-1.778" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-2.54" x2="-2.54" y2="-1.778" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-2.54" x2="-1.778" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-2.54" x2="1.778" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="2.54" y1="2.54" x2="1.778" y2="2.54" width="0.2032" layer="21"/>
<circle x="-3" y="2.2" radius="0.2" width="0.2032" layer="21"/>
<smd name="P$1" x="-2.527" y="1.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$2" x="-2.527" y="1" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$3" x="-2.527" y="0.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$4" x="-2.527" y="0" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$5" x="-2.527" y="-0.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$6" x="-2.527" y="-1" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$7" x="-2.527" y="-1.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R90"/>
<smd name="P$8" x="-1.5" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$9" x="-1" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$10" x="-0.5" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$11" x="0" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$12" x="0.5" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$13" x="1" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$14" x="1.5" y="-2.527" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R180"/>
<smd name="P$15" x="2.527" y="-1.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$16" x="2.527" y="-1" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$17" x="2.527" y="-0.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$18" x="2.527" y="0" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$19" x="2.527" y="0.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$20" x="2.527" y="1" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$21" x="2.527" y="1.5" dx="0.3" dy="1.15" layer="1" roundness="100" rot="R270"/>
<smd name="P$22" x="1.5" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$23" x="1" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$24" x="0.5" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$25" x="0" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$26" x="-0.5" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$27" x="-1" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$28" x="-1.5" y="2.527" dx="0.3" dy="1.15" layer="1" roundness="100"/>
<smd name="P$29" x="0" y="0" dx="3.15" dy="3.15" layer="1" cream="no"/>
<rectangle x1="-1.016" y1="0.254" x2="-0.254" y2="1.016" layer="31"/>
<rectangle x1="0.254" y1="0.254" x2="1.016" y2="1.016" layer="31"/>
<rectangle x1="-1.016" y1="-1.016" x2="-0.254" y2="-0.254" layer="31"/>
<rectangle x1="0.254" y1="-1.016" x2="1.016" y2="-0.254" layer="31"/>
<wire x1="0.584353125" y1="4.139159375" x2="5.588153125" y2="4.139159375" width="0.0508" layer="49"/>
<rectangle x1="1.08924375" y1="-2.63153125" x2="1.134225" y2="-2.62510625" layer="200"/>
<rectangle x1="0.08675625" y1="-2.625103125" x2="0.10603125" y2="-2.618678125" layer="200"/>
<rectangle x1="1.069965625" y1="-2.625103125" x2="1.147078125" y2="-2.618678125" layer="200"/>
<rectangle x1="0.067478125" y1="-2.618678125" x2="0.118884375" y2="-2.612253125" layer="200"/>
<rectangle x1="1.0571125" y1="-2.618678125" x2="1.15350625" y2="-2.612253125" layer="200"/>
<rectangle x1="-0.401634375" y1="-2.61225" x2="-0.388784375" y2="-2.605825" layer="200"/>
<rectangle x1="0.054625" y1="-2.61225" x2="0.1253125" y2="-2.605825" layer="200"/>
<rectangle x1="1.050684375" y1="-2.61225" x2="1.153503125" y2="-2.605825" layer="200"/>
<rectangle x1="-1.44910625" y1="-2.605825" x2="-1.42983125" y2="-2.5994" layer="200"/>
<rectangle x1="-0.928584375" y1="-2.605825" x2="-0.896453125" y2="-2.5994" layer="200"/>
<rectangle x1="-0.433765625" y1="-2.605825" x2="-0.382359375" y2="-2.5994" layer="200"/>
<rectangle x1="0.041771875" y1="-2.605825" x2="0.131740625" y2="-2.5994" layer="200"/>
<rectangle x1="0.54944375" y1="-2.605825" x2="0.55586875" y2="-2.5994" layer="200"/>
<rectangle x1="1.044259375" y1="-2.605825" x2="1.069965625" y2="-2.5994" layer="200"/>
<rectangle x1="1.121375" y1="-2.605825" x2="1.15350625" y2="-2.5994" layer="200"/>
<rectangle x1="-1.461959375" y1="-2.5994" x2="-1.410553125" y2="-2.592975" layer="200"/>
<rectangle x1="-0.9478625" y1="-2.5994" x2="-0.877175" y2="-2.592975" layer="200"/>
<rectangle x1="-0.45304375" y1="-2.5994" x2="-0.3887875" y2="-2.592975" layer="200"/>
<rectangle x1="-0.028915625" y1="-2.5994" x2="-0.016065625" y2="-2.592975" layer="200"/>
<rectangle x1="0.035346875" y1="-2.5994" x2="0.131740625" y2="-2.592975" layer="200"/>
<rectangle x1="0.536590625" y1="-2.5994" x2="0.607278125" y2="-2.592975" layer="200"/>
<rectangle x1="1.037834375" y1="-2.5994" x2="1.063534375" y2="-2.592975" layer="200"/>
<rectangle x1="1.134225" y1="-2.5994" x2="1.15350625" y2="-2.592975" layer="200"/>
<rectangle x1="-1.468384375" y1="-2.592971875" x2="-1.391271875" y2="-2.586546875" layer="200"/>
<rectangle x1="-0.9542875" y1="-2.592971875" x2="-0.864325" y2="-2.586546875" layer="200"/>
<rectangle x1="-0.465896875" y1="-2.592971875" x2="-0.388784375" y2="-2.586546875" layer="200"/>
<rectangle x1="-0.061046875" y1="-2.592971875" x2="0.138165625" y2="-2.586546875" layer="200"/>
<rectangle x1="0.5301625" y1="-2.592971875" x2="0.6137" y2="-2.586546875" layer="200"/>
<rectangle x1="1.03140625" y1="-2.592971875" x2="1.0571125" y2="-2.586546875" layer="200"/>
<rectangle x1="1.616190625" y1="-2.592971875" x2="1.622615625" y2="-2.586546875" layer="200"/>
<rectangle x1="-1.474809375" y1="-2.586546875" x2="-1.384846875" y2="-2.580121875" layer="200"/>
<rectangle x1="-0.967140625" y1="-2.586546875" x2="-0.857896875" y2="-2.580121875" layer="200"/>
<rectangle x1="-0.47875" y1="-2.586546875" x2="-0.4016375" y2="-2.580121875" layer="200"/>
<rectangle x1="-0.1381625" y1="-2.586546875" x2="-0.08675" y2="-2.580121875" layer="200"/>
<rectangle x1="-0.061046875" y1="-2.586546875" x2="0.073903125" y2="-2.580121875" layer="200"/>
<rectangle x1="0.106034375" y1="-2.586546875" x2="0.138165625" y2="-2.580121875" layer="200"/>
<rectangle x1="0.5237375" y1="-2.586546875" x2="0.62013125" y2="-2.580121875" layer="200"/>
<rectangle x1="1.005703125" y1="-2.586546875" x2="1.050684375" y2="-2.580121875" layer="200"/>
<rectangle x1="1.1920625" y1="-2.586546875" x2="1.23704375" y2="-2.580121875" layer="200"/>
<rectangle x1="1.5198" y1="-2.586546875" x2="1.56478125" y2="-2.580121875" layer="200"/>
<rectangle x1="1.616190625" y1="-2.586546875" x2="1.635465625" y2="-2.580121875" layer="200"/>
<rectangle x1="-1.4876625" y1="-2.58011875" x2="-1.44268125" y2="-2.57369375" layer="200"/>
<rectangle x1="-1.429828125" y1="-2.58011875" x2="-1.371990625" y2="-2.57369375" layer="200"/>
<rectangle x1="-1.192059375" y1="-2.58011875" x2="-1.179209375" y2="-2.57369375" layer="200"/>
<rectangle x1="-1.0763875" y1="-2.58011875" x2="-1.05710625" y2="-2.57369375" layer="200"/>
<rectangle x1="-0.973565625" y1="-2.58011875" x2="-0.857896875" y2="-2.57369375" layer="200"/>
<rectangle x1="-0.703665625" y1="-2.58011875" x2="-0.684390625" y2="-2.57369375" layer="200"/>
<rectangle x1="-0.658684375" y1="-2.58011875" x2="-0.645834375" y2="-2.57369375" layer="200"/>
<rectangle x1="-0.485175" y1="-2.58011875" x2="-0.4144875" y2="-2.57369375" layer="200"/>
<rectangle x1="-0.1510125" y1="-2.58011875" x2="-0.0096375" y2="-2.57369375" layer="200"/>
<rectangle x1="0.003215625" y1="-2.58011875" x2="0.067478125" y2="-2.57369375" layer="200"/>
<rectangle x1="0.112459375" y1="-2.58011875" x2="0.144590625" y2="-2.57369375" layer="200"/>
<rectangle x1="0.510884375" y1="-2.58011875" x2="0.549440625" y2="-2.57369375" layer="200"/>
<rectangle x1="0.575146875" y1="-2.58011875" x2="0.626553125" y2="-2.57369375" layer="200"/>
<rectangle x1="0.99285" y1="-2.58011875" x2="1.04425625" y2="-2.57369375" layer="200"/>
<rectangle x1="1.1856375" y1="-2.58011875" x2="1.23704375" y2="-2.57369375" layer="200"/>
<rectangle x1="1.49409375" y1="-2.58011875" x2="1.56478125" y2="-2.57369375" layer="200"/>
<rectangle x1="1.616190625" y1="-2.58011875" x2="1.635465625" y2="-2.57369375" layer="200"/>
<rectangle x1="-1.731859375" y1="-2.57369375" x2="-1.616190625" y2="-2.56726875" layer="200"/>
<rectangle x1="-1.500515625" y1="-2.57369375" x2="-1.455534375" y2="-2.56726875" layer="200"/>
<rectangle x1="-1.416975" y1="-2.57369375" x2="-1.32058125" y2="-2.56726875" layer="200"/>
<rectangle x1="-1.2113375" y1="-2.57369375" x2="-1.15993125" y2="-2.56726875" layer="200"/>
<rectangle x1="-1.0828125" y1="-2.57369375" x2="-1.05068125" y2="-2.56726875" layer="200"/>
<rectangle x1="-0.97999375" y1="-2.57369375" x2="-0.9285875" y2="-2.56726875" layer="200"/>
<rectangle x1="-0.902878125" y1="-2.57369375" x2="-0.851471875" y2="-2.56726875" layer="200"/>
<rectangle x1="-0.72294375" y1="-2.57369375" x2="-0.63298125" y2="-2.56726875" layer="200"/>
<rectangle x1="-0.562290625" y1="-2.57369375" x2="-0.536584375" y2="-2.56726875" layer="200"/>
<rectangle x1="-0.498028125" y1="-2.57369375" x2="-0.427340625" y2="-2.56726875" layer="200"/>
<rectangle x1="-0.1510125" y1="-2.57369375" x2="-0.054625" y2="-2.56726875" layer="200"/>
<rectangle x1="0.003215625" y1="-2.57369375" x2="0.061046875" y2="-2.56726875" layer="200"/>
<rectangle x1="0.1188875" y1="-2.57369375" x2="0.18315" y2="-2.56726875" layer="200"/>
<rectangle x1="0.49160625" y1="-2.57369375" x2="0.5365875" y2="-2.56726875" layer="200"/>
<rectangle x1="0.588" y1="-2.57369375" x2="0.63298125" y2="-2.56726875" layer="200"/>
<rectangle x1="0.780784375" y1="-2.57369375" x2="0.812915625" y2="-2.56726875" layer="200"/>
<rectangle x1="0.9285875" y1="-2.57369375" x2="0.9478625" y2="-2.56726875" layer="200"/>
<rectangle x1="0.95429375" y1="-2.57369375" x2="1.04425625" y2="-2.56726875" layer="200"/>
<rectangle x1="1.179209375" y1="-2.57369375" x2="1.243471875" y2="-2.56726875" layer="200"/>
<rectangle x1="1.35914375" y1="-2.57369375" x2="1.416975" y2="-2.56726875" layer="200"/>
<rectangle x1="1.4619625" y1="-2.57369375" x2="1.56478125" y2="-2.56726875" layer="200"/>
<rectangle x1="1.641896875" y1="-2.57369375" x2="1.680453125" y2="-2.56726875" layer="200"/>
<rectangle x1="1.976059375" y1="-2.57369375" x2="2.021040625" y2="-2.56726875" layer="200"/>
<rectangle x1="2.143140625" y1="-2.57369375" x2="2.149565625" y2="-2.56726875" layer="200"/>
<rectangle x1="-1.7447125" y1="-2.56726875" x2="-1.53265" y2="-2.56084375" layer="200"/>
<rectangle x1="-1.506940625" y1="-2.56726875" x2="-1.461959375" y2="-2.56084375" layer="200"/>
<rectangle x1="-1.41055" y1="-2.56726875" x2="-1.30773125" y2="-2.56084375" layer="200"/>
<rectangle x1="-1.2241875" y1="-2.56726875" x2="-1.147075" y2="-2.56084375" layer="200"/>
<rectangle x1="-1.102090625" y1="-2.56726875" x2="-0.935009375" y2="-2.56084375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.56726875" x2="-0.8193375" y2="-2.56084375" layer="200"/>
<rectangle x1="-0.74865" y1="-2.56726875" x2="-0.44019375" y2="-2.56084375" layer="200"/>
<rectangle x1="-0.356653125" y1="-2.56726875" x2="-0.330946875" y2="-2.56084375" layer="200"/>
<rectangle x1="-0.163865625" y1="-2.56726875" x2="-0.054621875" y2="-2.56084375" layer="200"/>
<rectangle x1="0.009640625" y1="-2.56726875" x2="0.054621875" y2="-2.56084375" layer="200"/>
<rectangle x1="0.131740625" y1="-2.56726875" x2="0.195996875" y2="-2.56084375" layer="200"/>
<rectangle x1="0.465903125" y1="-2.56726875" x2="0.530159375" y2="-2.56084375" layer="200"/>
<rectangle x1="0.607278125" y1="-2.56726875" x2="0.645834375" y2="-2.56084375" layer="200"/>
<rectangle x1="0.774359375" y1="-2.56726875" x2="0.819340625" y2="-2.56084375" layer="200"/>
<rectangle x1="0.88360625" y1="-2.56726875" x2="1.04425625" y2="-2.56084375" layer="200"/>
<rectangle x1="1.179209375" y1="-2.56726875" x2="1.249896875" y2="-2.56084375" layer="200"/>
<rectangle x1="1.314159375" y1="-2.56726875" x2="1.558353125" y2="-2.56084375" layer="200"/>
<rectangle x1="1.63546875" y1="-2.56726875" x2="1.69330625" y2="-2.56084375" layer="200"/>
<rectangle x1="1.847534375" y1="-2.56726875" x2="1.860384375" y2="-2.56084375" layer="200"/>
<rectangle x1="1.95678125" y1="-2.56726875" x2="2.02746875" y2="-2.56084375" layer="200"/>
<rectangle x1="2.09173125" y1="-2.56726875" x2="2.16884375" y2="-2.56084375" layer="200"/>
<rectangle x1="-1.7575625" y1="-2.560840625" x2="-1.4748125" y2="-2.554415625" layer="200"/>
<rectangle x1="-1.404121875" y1="-2.560840625" x2="-1.301303125" y2="-2.554415625" layer="200"/>
<rectangle x1="-1.237040625" y1="-2.560840625" x2="-0.935009375" y2="-2.554415625" layer="200"/>
<rectangle x1="-0.8836" y1="-2.560840625" x2="-0.8129125" y2="-2.554415625" layer="200"/>
<rectangle x1="-0.755075" y1="-2.560840625" x2="-0.45304375" y2="-2.554415625" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.560840625" x2="-0.324521875" y2="-2.554415625" layer="200"/>
<rectangle x1="-0.170290625" y1="-2.560840625" x2="-0.061046875" y2="-2.554415625" layer="200"/>
<rectangle x1="0.009640625" y1="-2.560840625" x2="0.054621875" y2="-2.554415625" layer="200"/>
<rectangle x1="0.138165625" y1="-2.560840625" x2="0.208853125" y2="-2.554415625" layer="200"/>
<rectangle x1="0.36308125" y1="-2.560840625" x2="0.5237375" y2="-2.554415625" layer="200"/>
<rectangle x1="0.613703125" y1="-2.560840625" x2="0.690815625" y2="-2.554415625" layer="200"/>
<rectangle x1="0.76150625" y1="-2.560840625" x2="0.83219375" y2="-2.554415625" layer="200"/>
<rectangle x1="0.8579" y1="-2.560840625" x2="1.03783125" y2="-2.554415625" layer="200"/>
<rectangle x1="1.179209375" y1="-2.560840625" x2="1.256321875" y2="-2.554415625" layer="200"/>
<rectangle x1="1.30130625" y1="-2.560840625" x2="1.55835625" y2="-2.554415625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.560840625" x2="1.712584375" y2="-2.554415625" layer="200"/>
<rectangle x1="1.744715625" y1="-2.560840625" x2="1.783271875" y2="-2.554415625" layer="200"/>
<rectangle x1="1.82825625" y1="-2.560840625" x2="1.90536875" y2="-2.554415625" layer="200"/>
<rectangle x1="1.943928125" y1="-2.560840625" x2="2.040321875" y2="-2.554415625" layer="200"/>
<rectangle x1="2.078878125" y1="-2.560840625" x2="2.200971875" y2="-2.554415625" layer="200"/>
<rectangle x1="2.278090625" y1="-2.560840625" x2="2.355203125" y2="-2.554415625" layer="200"/>
<rectangle x1="2.42589375" y1="-2.560840625" x2="2.458025" y2="-2.554415625" layer="200"/>
<rectangle x1="-2.4194625" y1="-2.554415625" x2="-2.4066125" y2="-2.547990625" layer="200"/>
<rectangle x1="-2.3552" y1="-2.554415625" x2="-2.25880625" y2="-2.547990625" layer="200"/>
<rectangle x1="-1.98890625" y1="-2.554415625" x2="-1.92464375" y2="-2.547990625" layer="200"/>
<rectangle x1="-1.78969375" y1="-2.554415625" x2="-1.4812375" y2="-2.547990625" layer="200"/>
<rectangle x1="-1.397696875" y1="-2.554415625" x2="-1.288453125" y2="-2.547990625" layer="200"/>
<rectangle x1="-1.269171875" y1="-2.554415625" x2="-0.947865625" y2="-2.547990625" layer="200"/>
<rectangle x1="-0.864321875" y1="-2.554415625" x2="-0.800059375" y2="-2.547990625" layer="200"/>
<rectangle x1="-0.767928125" y1="-2.554415625" x2="-0.465896875" y2="-2.547990625" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.554415625" x2="-0.240984375" y2="-2.547990625" layer="200"/>
<rectangle x1="-0.18314375" y1="-2.554415625" x2="-0.067475" y2="-2.547990625" layer="200"/>
<rectangle x1="0.009640625" y1="-2.554415625" x2="0.048196875" y2="-2.547990625" layer="200"/>
<rectangle x1="0.138165625" y1="-2.554415625" x2="0.228128125" y2="-2.547990625" layer="200"/>
<rectangle x1="0.2538375" y1="-2.554415625" x2="0.5173125" y2="-2.547990625" layer="200"/>
<rectangle x1="0.62013125" y1="-2.554415625" x2="1.03783125" y2="-2.547990625" layer="200"/>
<rectangle x1="1.179209375" y1="-2.554415625" x2="1.551928125" y2="-2.547990625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.554415625" x2="2.213828125" y2="-2.547990625" layer="200"/>
<rectangle x1="2.2588125" y1="-2.554415625" x2="2.470875" y2="-2.547990625" layer="200"/>
<rectangle x1="-2.45159375" y1="-2.547990625" x2="-1.4812375" y2="-2.541565625" layer="200"/>
<rectangle x1="-1.39126875" y1="-2.547990625" x2="-0.9542875" y2="-2.541565625" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.547990625" x2="-0.478753125" y2="-2.541565625" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.547990625" x2="-0.067471875" y2="-2.541565625" layer="200"/>
<rectangle x1="0.003215625" y1="-2.547990625" x2="0.041771875" y2="-2.541565625" layer="200"/>
<rectangle x1="0.144590625" y1="-2.547990625" x2="0.517309375" y2="-2.541565625" layer="200"/>
<rectangle x1="0.62655625" y1="-2.547990625" x2="1.03140625" y2="-2.541565625" layer="200"/>
<rectangle x1="1.179209375" y1="-2.547990625" x2="1.545503125" y2="-2.541565625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.547990625" x2="2.483728125" y2="-2.541565625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.5415625" x2="-1.4876625" y2="-2.5351375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.5415625" x2="-0.9542875" y2="-2.5351375" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.5415625" x2="-0.485178125" y2="-2.5351375" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.5415625" x2="-0.073903125" y2="-2.5351375" layer="200"/>
<rectangle x1="0.003215625" y1="-2.5415625" x2="0.035346875" y2="-2.5351375" layer="200"/>
<rectangle x1="0.15101875" y1="-2.5415625" x2="0.5173125" y2="-2.5351375" layer="200"/>
<rectangle x1="0.632984375" y1="-2.5415625" x2="1.024978125" y2="-2.5351375" layer="200"/>
<rectangle x1="1.179209375" y1="-2.5415625" x2="1.539078125" y2="-2.5351375" layer="200"/>
<rectangle x1="1.648321875" y1="-2.5415625" x2="2.496578125" y2="-2.5351375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.5351375" x2="-1.6226125" y2="-2.5287125" layer="200"/>
<rectangle x1="-1.609759375" y1="-2.5351375" x2="-1.487665625" y2="-2.5287125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.5351375" x2="-0.96071875" y2="-2.5287125" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.5351375" x2="-0.485178125" y2="-2.5287125" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.5351375" x2="-0.080328125" y2="-2.5287125" layer="200"/>
<rectangle x1="-0.003209375" y1="-2.5351375" x2="0.035346875" y2="-2.5287125" layer="200"/>
<rectangle x1="0.15101875" y1="-2.5351375" x2="0.5173125" y2="-2.5287125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.5351375" x2="1.024978125" y2="-2.5287125" layer="200"/>
<rectangle x1="1.1856375" y1="-2.5351375" x2="1.539075" y2="-2.5287125" layer="200"/>
<rectangle x1="1.648321875" y1="-2.5351375" x2="2.503003125" y2="-2.5287125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.528709375" x2="-1.62904375" y2="-2.522284375" layer="200"/>
<rectangle x1="-1.6161875" y1="-2.528709375" x2="-1.49409375" y2="-2.522284375" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.528709375" x2="-0.96714375" y2="-2.522284375" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.528709375" x2="-0.710096875" y2="-2.522284375" layer="200"/>
<rectangle x1="-0.6843875" y1="-2.528709375" x2="-0.49160625" y2="-2.522284375" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.528709375" x2="-0.106034375" y2="-2.522284375" layer="200"/>
<rectangle x1="-0.003209375" y1="-2.528709375" x2="0.035346875" y2="-2.522284375" layer="200"/>
<rectangle x1="0.15744375" y1="-2.528709375" x2="0.51088125" y2="-2.522284375" layer="200"/>
<rectangle x1="0.639409375" y1="-2.528709375" x2="1.018553125" y2="-2.522284375" layer="200"/>
<rectangle x1="1.1856375" y1="-2.528709375" x2="1.4555375" y2="-2.522284375" layer="200"/>
<rectangle x1="1.474815625" y1="-2.528709375" x2="1.532646875" y2="-2.522284375" layer="200"/>
<rectangle x1="1.65475" y1="-2.528709375" x2="2.50943125" y2="-2.522284375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.522284375" x2="-1.62904375" y2="-2.515859375" layer="200"/>
<rectangle x1="-1.6161875" y1="-2.522284375" x2="-1.49409375" y2="-2.515859375" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.522284375" x2="-0.967140625" y2="-2.515859375" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.522284375" x2="-0.716521875" y2="-2.515859375" layer="200"/>
<rectangle x1="-0.671534375" y1="-2.522284375" x2="-0.491603125" y2="-2.515859375" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.522284375" x2="-0.131734375" y2="-2.515859375" layer="200"/>
<rectangle x1="-0.0096375" y1="-2.522284375" x2="0.02891875" y2="-2.515859375" layer="200"/>
<rectangle x1="0.15744375" y1="-2.522284375" x2="0.51088125" y2="-2.515859375" layer="200"/>
<rectangle x1="0.639409375" y1="-2.522284375" x2="1.012128125" y2="-2.515859375" layer="200"/>
<rectangle x1="1.1856375" y1="-2.522284375" x2="1.44910625" y2="-2.515859375" layer="200"/>
<rectangle x1="1.481240625" y1="-2.522284375" x2="1.526221875" y2="-2.515859375" layer="200"/>
<rectangle x1="1.65475" y1="-2.522284375" x2="2.50943125" y2="-2.515859375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.515859375" x2="-1.49409375" y2="-2.509434375" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.515859375" x2="-1.192059375" y2="-2.509434375" layer="200"/>
<rectangle x1="-1.172778125" y1="-2.515859375" x2="-0.979996875" y2="-2.509434375" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.515859375" x2="-0.722946875" y2="-2.509434375" layer="200"/>
<rectangle x1="-0.658684375" y1="-2.515859375" x2="-0.543015625" y2="-2.509434375" layer="200"/>
<rectangle x1="-0.536584375" y1="-2.515859375" x2="-0.498028125" y2="-2.509434375" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.515859375" x2="-0.138165625" y2="-2.509434375" layer="200"/>
<rectangle x1="-0.0160625" y1="-2.515859375" x2="0.02891875" y2="-2.509434375" layer="200"/>
<rectangle x1="0.16386875" y1="-2.515859375" x2="0.51088125" y2="-2.509434375" layer="200"/>
<rectangle x1="0.639409375" y1="-2.515859375" x2="1.012128125" y2="-2.509434375" layer="200"/>
<rectangle x1="1.1856375" y1="-2.515859375" x2="1.38484375" y2="-2.509434375" layer="200"/>
<rectangle x1="1.410553125" y1="-2.515859375" x2="1.436259375" y2="-2.509434375" layer="200"/>
<rectangle x1="1.481240625" y1="-2.515859375" x2="1.519796875" y2="-2.509434375" layer="200"/>
<rectangle x1="1.65475" y1="-2.515859375" x2="2.50943125" y2="-2.509434375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.50943125" x2="-1.49409375" y2="-2.50300625" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.50943125" x2="-1.198484375" y2="-2.50300625" layer="200"/>
<rectangle x1="-1.166353125" y1="-2.50943125" x2="-0.986421875" y2="-2.50300625" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.50943125" x2="-0.722946875" y2="-2.50300625" layer="200"/>
<rectangle x1="-0.64583125" y1="-2.50943125" x2="-0.55586875" y2="-2.50300625" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.50943125" x2="-0.138165625" y2="-2.50300625" layer="200"/>
<rectangle x1="-0.04176875" y1="-2.50943125" x2="0.02249375" y2="-2.50300625" layer="200"/>
<rectangle x1="0.16386875" y1="-2.50943125" x2="0.51088125" y2="-2.50300625" layer="200"/>
<rectangle x1="0.639409375" y1="-2.50943125" x2="1.005703125" y2="-2.50300625" layer="200"/>
<rectangle x1="1.1856375" y1="-2.50943125" x2="1.37841875" y2="-2.50300625" layer="200"/>
<rectangle x1="1.48766875" y1="-2.50943125" x2="1.50694375" y2="-2.50300625" layer="200"/>
<rectangle x1="1.661175" y1="-2.50943125" x2="2.51585625" y2="-2.50300625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.50300625" x2="-1.6033375" y2="-2.49658125" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.50300625" x2="-1.204909375" y2="-2.49658125" layer="200"/>
<rectangle x1="-1.159928125" y1="-2.50300625" x2="-0.999271875" y2="-2.49658125" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.50300625" x2="-0.722946875" y2="-2.49658125" layer="200"/>
<rectangle x1="-0.626553125" y1="-2.50300625" x2="-0.562290625" y2="-2.49658125" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.50300625" x2="-0.138165625" y2="-2.49658125" layer="200"/>
<rectangle x1="-0.054621875" y1="-2.50300625" x2="0.022490625" y2="-2.49658125" layer="200"/>
<rectangle x1="0.16386875" y1="-2.50300625" x2="0.50445625" y2="-2.49658125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.50300625" x2="0.999271875" y2="-2.49658125" layer="200"/>
<rectangle x1="1.1856375" y1="-2.50300625" x2="1.37841875" y2="-2.49658125" layer="200"/>
<rectangle x1="1.661175" y1="-2.50300625" x2="2.51585625" y2="-2.49658125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.496578125" x2="-1.6033375" y2="-2.490153125" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.496578125" x2="-1.204909375" y2="-2.490153125" layer="200"/>
<rectangle x1="-1.159928125" y1="-2.496578125" x2="-1.012128125" y2="-2.490153125" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.496578125" x2="-0.722946875" y2="-2.490153125" layer="200"/>
<rectangle x1="-0.607275" y1="-2.496578125" x2="-0.56229375" y2="-2.490153125" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.496578125" x2="-0.131734375" y2="-2.490153125" layer="200"/>
<rectangle x1="-0.080325" y1="-2.496578125" x2="0.01606875" y2="-2.490153125" layer="200"/>
<rectangle x1="0.16386875" y1="-2.496578125" x2="0.50445625" y2="-2.490153125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.496578125" x2="0.999271875" y2="-2.490153125" layer="200"/>
<rectangle x1="1.1856375" y1="-2.496578125" x2="1.37841875" y2="-2.490153125" layer="200"/>
<rectangle x1="1.661175" y1="-2.496578125" x2="2.51585625" y2="-2.490153125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.490153125" x2="-1.6033375" y2="-2.483728125" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.490153125" x2="-1.211340625" y2="-2.483728125" layer="200"/>
<rectangle x1="-1.1535" y1="-2.490153125" x2="-1.01855" y2="-2.483728125" layer="200"/>
<rectangle x1="-0.857896875" y1="-2.490153125" x2="-0.722946875" y2="-2.483728125" layer="200"/>
<rectangle x1="-0.594421875" y1="-2.490153125" x2="-0.568715625" y2="-2.483728125" layer="200"/>
<rectangle x1="-0.363078125" y1="-2.490153125" x2="-0.131734375" y2="-2.483728125" layer="200"/>
<rectangle x1="-0.080325" y1="-2.490153125" x2="0.0096375" y2="-2.483728125" layer="200"/>
<rectangle x1="0.16386875" y1="-2.490153125" x2="0.49803125" y2="-2.483728125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.490153125" x2="0.896453125" y2="-2.483728125" layer="200"/>
<rectangle x1="0.9221625" y1="-2.490153125" x2="0.999275" y2="-2.483728125" layer="200"/>
<rectangle x1="1.1856375" y1="-2.490153125" x2="1.37841875" y2="-2.483728125" layer="200"/>
<rectangle x1="1.661175" y1="-2.490153125" x2="2.51585625" y2="-2.483728125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.483728125" x2="-1.6033375" y2="-2.477303125" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.483728125" x2="-1.211340625" y2="-2.477303125" layer="200"/>
<rectangle x1="-1.147075" y1="-2.483728125" x2="-1.10851875" y2="-2.477303125" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.483728125" x2="-1.018553125" y2="-2.477303125" layer="200"/>
<rectangle x1="-0.864321875" y1="-2.483728125" x2="-0.722946875" y2="-2.477303125" layer="200"/>
<rectangle x1="-0.58799375" y1="-2.483728125" x2="-0.56871875" y2="-2.477303125" layer="200"/>
<rectangle x1="-0.369503125" y1="-2.483728125" x2="-0.125309375" y2="-2.477303125" layer="200"/>
<rectangle x1="-0.08675" y1="-2.483728125" x2="0.0096375" y2="-2.477303125" layer="200"/>
<rectangle x1="0.15744375" y1="-2.483728125" x2="0.49803125" y2="-2.477303125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.483728125" x2="0.890028125" y2="-2.477303125" layer="200"/>
<rectangle x1="0.935015625" y1="-2.483728125" x2="0.992846875" y2="-2.477303125" layer="200"/>
<rectangle x1="1.1856375" y1="-2.483728125" x2="1.37841875" y2="-2.477303125" layer="200"/>
<rectangle x1="1.661175" y1="-2.483728125" x2="2.51585625" y2="-2.477303125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.4773" x2="-1.6033375" y2="-2.470875" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.4773" x2="-1.204909375" y2="-2.470875" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.4773" x2="-1.018553125" y2="-2.470875" layer="200"/>
<rectangle x1="-0.864321875" y1="-2.4773" x2="-0.716521875" y2="-2.470875" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.4773" x2="-0.11888125" y2="-2.470875" layer="200"/>
<rectangle x1="-0.08675" y1="-2.4773" x2="-0.0032125" y2="-2.470875" layer="200"/>
<rectangle x1="0.15101875" y1="-2.4773" x2="0.3887875" y2="-2.470875" layer="200"/>
<rectangle x1="0.414490625" y1="-2.4773" x2="0.498028125" y2="-2.470875" layer="200"/>
<rectangle x1="0.639409375" y1="-2.4773" x2="0.883603125" y2="-2.470875" layer="200"/>
<rectangle x1="0.941440625" y1="-2.4773" x2="0.979996875" y2="-2.470875" layer="200"/>
<rectangle x1="1.179209375" y1="-2.4773" x2="1.384846875" y2="-2.470875" layer="200"/>
<rectangle x1="1.65475" y1="-2.4773" x2="2.51585625" y2="-2.470875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.470875" x2="-1.6033375" y2="-2.46445" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.470875" x2="-1.211340625" y2="-2.46445" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.470875" x2="-1.018553125" y2="-2.46445" layer="200"/>
<rectangle x1="-0.877175" y1="-2.470875" x2="-0.70366875" y2="-2.46445" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.470875" x2="-0.11245625" y2="-2.46445" layer="200"/>
<rectangle x1="-0.08675" y1="-2.470875" x2="-0.0160625" y2="-2.46445" layer="200"/>
<rectangle x1="0.144590625" y1="-2.470875" x2="0.388784375" y2="-2.46445" layer="200"/>
<rectangle x1="0.42734375" y1="-2.470875" x2="0.48518125" y2="-2.46445" layer="200"/>
<rectangle x1="0.632984375" y1="-2.470875" x2="0.883603125" y2="-2.46445" layer="200"/>
<rectangle x1="0.947865625" y1="-2.470875" x2="0.973571875" y2="-2.46445" layer="200"/>
<rectangle x1="1.179209375" y1="-2.470875" x2="1.384846875" y2="-2.46445" layer="200"/>
<rectangle x1="1.648321875" y1="-2.470875" x2="2.515859375" y2="-2.46445" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.46445" x2="-1.6033375" y2="-2.458025" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.46445" x2="-1.204909375" y2="-2.458025" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.46445" x2="-1.018553125" y2="-2.458025" layer="200"/>
<rectangle x1="-0.8836" y1="-2.46445" x2="-0.69081875" y2="-2.458025" layer="200"/>
<rectangle x1="-0.498028125" y1="-2.46445" x2="-0.485178125" y2="-2.458025" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.46445" x2="-0.09960625" y2="-2.458025" layer="200"/>
<rectangle x1="-0.08675" y1="-2.46445" x2="-0.04819375" y2="-2.458025" layer="200"/>
<rectangle x1="0.138165625" y1="-2.46445" x2="0.382359375" y2="-2.458025" layer="200"/>
<rectangle x1="0.440196875" y1="-2.46445" x2="0.472328125" y2="-2.458025" layer="200"/>
<rectangle x1="0.632984375" y1="-2.46445" x2="0.877178125" y2="-2.458025" layer="200"/>
<rectangle x1="1.179209375" y1="-2.46445" x2="1.391271875" y2="-2.458025" layer="200"/>
<rectangle x1="1.641896875" y1="-2.46445" x2="2.515859375" y2="-2.458025" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.458021875" x2="-1.6033375" y2="-2.451596875" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.458021875" x2="-1.204909375" y2="-2.451596875" layer="200"/>
<rectangle x1="-1.05710625" y1="-2.458021875" x2="-1.01855" y2="-2.451596875" layer="200"/>
<rectangle x1="-0.8836" y1="-2.458021875" x2="-0.6843875" y2="-2.451596875" layer="200"/>
<rectangle x1="-0.504453125" y1="-2.458021875" x2="-0.478753125" y2="-2.451596875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.458021875" x2="-0.09960625" y2="-2.451596875" layer="200"/>
<rectangle x1="0.131740625" y1="-2.458021875" x2="0.375934375" y2="-2.451596875" layer="200"/>
<rectangle x1="0.62655625" y1="-2.458021875" x2="0.877175" y2="-2.451596875" layer="200"/>
<rectangle x1="1.172784375" y1="-2.458021875" x2="1.391271875" y2="-2.451596875" layer="200"/>
<rectangle x1="1.63546875" y1="-2.458021875" x2="2.51585625" y2="-2.451596875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.451596875" x2="-1.821825" y2="-2.445171875" layer="200"/>
<rectangle x1="-1.796121875" y1="-2.451596875" x2="-1.603334375" y2="-2.445171875" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.451596875" x2="-1.1984875" y2="-2.445171875" layer="200"/>
<rectangle x1="-1.1535" y1="-2.451596875" x2="-1.14065" y2="-2.445171875" layer="200"/>
<rectangle x1="-1.05710625" y1="-2.451596875" x2="-1.02498125" y2="-2.445171875" layer="200"/>
<rectangle x1="-0.8836" y1="-2.451596875" x2="-0.6715375" y2="-2.445171875" layer="200"/>
<rectangle x1="-0.498028125" y1="-2.451596875" x2="-0.478753125" y2="-2.445171875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.451596875" x2="-0.09960625" y2="-2.445171875" layer="200"/>
<rectangle x1="0.1253125" y1="-2.451596875" x2="0.36950625" y2="-2.445171875" layer="200"/>
<rectangle x1="0.62655625" y1="-2.451596875" x2="0.877175" y2="-2.445171875" layer="200"/>
<rectangle x1="1.16635625" y1="-2.451596875" x2="1.391275" y2="-2.445171875" layer="200"/>
<rectangle x1="1.62904375" y1="-2.451596875" x2="2.36163125" y2="-2.445171875" layer="200"/>
<rectangle x1="2.36805625" y1="-2.451596875" x2="2.51585625" y2="-2.445171875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.44516875" x2="-1.84110625" y2="-2.43874375" layer="200"/>
<rectangle x1="-1.78326875" y1="-2.44516875" x2="-1.6033375" y2="-2.43874375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.44516875" x2="-1.14065" y2="-2.43874375" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.44516875" x2="-1.024978125" y2="-2.43874375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.44516875" x2="-0.6651125" y2="-2.43874375" layer="200"/>
<rectangle x1="-0.491603125" y1="-2.44516875" x2="-0.478753125" y2="-2.43874375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.44516875" x2="-0.10603125" y2="-2.43874375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.44516875" x2="0.36950625" y2="-2.43874375" layer="200"/>
<rectangle x1="0.62013125" y1="-2.44516875" x2="0.877175" y2="-2.43874375" layer="200"/>
<rectangle x1="1.15993125" y1="-2.44516875" x2="1.391275" y2="-2.43874375" layer="200"/>
<rectangle x1="1.62261875" y1="-2.44516875" x2="2.348775" y2="-2.43874375" layer="200"/>
<rectangle x1="2.374484375" y1="-2.44516875" x2="2.515859375" y2="-2.43874375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.43874375" x2="-1.84753125" y2="-2.43231875" layer="200"/>
<rectangle x1="-1.78326875" y1="-2.43874375" x2="-1.6033375" y2="-2.43231875" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.43874375" x2="-1.14065" y2="-2.43231875" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.43874375" x2="-1.024978125" y2="-2.43231875" layer="200"/>
<rectangle x1="-0.890025" y1="-2.43874375" x2="-0.6586875" y2="-2.43231875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.43874375" x2="-0.10603125" y2="-2.43231875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.43874375" x2="0.363078125" y2="-2.43231875" layer="200"/>
<rectangle x1="0.62013125" y1="-2.43874375" x2="0.877175" y2="-2.43231875" layer="200"/>
<rectangle x1="1.147078125" y1="-2.43874375" x2="1.391271875" y2="-2.43231875" layer="200"/>
<rectangle x1="1.62261875" y1="-2.43874375" x2="2.348775" y2="-2.43231875" layer="200"/>
<rectangle x1="2.374484375" y1="-2.43874375" x2="2.515859375" y2="-2.43231875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.43231875" x2="-1.85395625" y2="-2.42589375" layer="200"/>
<rectangle x1="-1.78326875" y1="-2.43231875" x2="-1.6033375" y2="-2.42589375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.43231875" x2="-1.14065" y2="-2.42589375" layer="200"/>
<rectangle x1="-1.063534375" y1="-2.43231875" x2="-1.031403125" y2="-2.42589375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.43231875" x2="-0.65225625" y2="-2.42589375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.43231875" x2="-0.10603125" y2="-2.42589375" layer="200"/>
<rectangle x1="0.106034375" y1="-2.43231875" x2="0.363078125" y2="-2.42589375" layer="200"/>
<rectangle x1="0.613703125" y1="-2.43231875" x2="0.877178125" y2="-2.42589375" layer="200"/>
<rectangle x1="1.140653125" y1="-2.43231875" x2="1.391271875" y2="-2.42589375" layer="200"/>
<rectangle x1="1.62261875" y1="-2.43231875" x2="2.348775" y2="-2.42589375" layer="200"/>
<rectangle x1="2.374484375" y1="-2.43231875" x2="2.515859375" y2="-2.42589375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.425890625" x2="-1.85395625" y2="-2.419465625" layer="200"/>
<rectangle x1="-1.78326875" y1="-2.425890625" x2="-1.6097625" y2="-2.419465625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.425890625" x2="-1.134225" y2="-2.419465625" layer="200"/>
<rectangle x1="-0.890025" y1="-2.425890625" x2="-0.64583125" y2="-2.419465625" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.425890625" x2="-0.10603125" y2="-2.419465625" layer="200"/>
<rectangle x1="0.106034375" y1="-2.425890625" x2="0.363078125" y2="-2.419465625" layer="200"/>
<rectangle x1="0.613703125" y1="-2.425890625" x2="0.883603125" y2="-2.419465625" layer="200"/>
<rectangle x1="1.140653125" y1="-2.425890625" x2="1.391271875" y2="-2.419465625" layer="200"/>
<rectangle x1="1.62261875" y1="-2.425890625" x2="2.36163125" y2="-2.419465625" layer="200"/>
<rectangle x1="2.36805625" y1="-2.425890625" x2="2.51585625" y2="-2.419465625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.419465625" x2="-1.85395625" y2="-2.413040625" layer="200"/>
<rectangle x1="-1.78326875" y1="-2.419465625" x2="-1.6161875" y2="-2.413040625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.419465625" x2="-1.134225" y2="-2.413040625" layer="200"/>
<rectangle x1="-0.890025" y1="-2.419465625" x2="-0.63940625" y2="-2.413040625" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.419465625" x2="-0.10603125" y2="-2.413040625" layer="200"/>
<rectangle x1="0.106034375" y1="-2.419465625" x2="0.369509375" y2="-2.413040625" layer="200"/>
<rectangle x1="0.613703125" y1="-2.419465625" x2="0.883603125" y2="-2.413040625" layer="200"/>
<rectangle x1="1.134225" y1="-2.419465625" x2="1.391275" y2="-2.413040625" layer="200"/>
<rectangle x1="1.62904375" y1="-2.419465625" x2="2.51585625" y2="-2.413040625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.4130375" x2="-1.85395625" y2="-2.4066125" layer="200"/>
<rectangle x1="-1.78969375" y1="-2.4130375" x2="-1.6161875" y2="-2.4066125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.4130375" x2="-1.134225" y2="-2.4066125" layer="200"/>
<rectangle x1="-0.896453125" y1="-2.4130375" x2="-0.632978125" y2="-2.4066125" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.4130375" x2="-0.11245625" y2="-2.4066125" layer="200"/>
<rectangle x1="0.106034375" y1="-2.4130375" x2="0.375934375" y2="-2.4066125" layer="200"/>
<rectangle x1="0.613703125" y1="-2.4130375" x2="0.883603125" y2="-2.4066125" layer="200"/>
<rectangle x1="1.134225" y1="-2.4130375" x2="1.391275" y2="-2.4066125" layer="200"/>
<rectangle x1="1.63546875" y1="-2.4130375" x2="2.51585625" y2="-2.4066125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.4066125" x2="-1.85395625" y2="-2.4001875" layer="200"/>
<rectangle x1="-1.796121875" y1="-2.4066125" x2="-1.616190625" y2="-2.4001875" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.4066125" x2="-1.1278" y2="-2.4001875" layer="200"/>
<rectangle x1="-0.896453125" y1="-2.4066125" x2="-0.632978125" y2="-2.4001875" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.4066125" x2="-0.11245625" y2="-2.4001875" layer="200"/>
<rectangle x1="0.106034375" y1="-2.4066125" x2="0.375934375" y2="-2.4001875" layer="200"/>
<rectangle x1="0.613703125" y1="-2.4066125" x2="0.883603125" y2="-2.4001875" layer="200"/>
<rectangle x1="1.1278" y1="-2.4066125" x2="1.38484375" y2="-2.4001875" layer="200"/>
<rectangle x1="1.63546875" y1="-2.4066125" x2="2.51585625" y2="-2.4001875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.4001875" x2="-1.85395625" y2="-2.3937625" layer="200"/>
<rectangle x1="-1.8154" y1="-2.4001875" x2="-1.6226125" y2="-2.3937625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.4001875" x2="-1.1278" y2="-2.3937625" layer="200"/>
<rectangle x1="-0.896453125" y1="-2.4001875" x2="-0.632978125" y2="-2.3937625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.4001875" x2="-0.11888125" y2="-2.3937625" layer="200"/>
<rectangle x1="0.112459375" y1="-2.4001875" x2="0.382359375" y2="-2.3937625" layer="200"/>
<rectangle x1="0.613703125" y1="-2.4001875" x2="0.883603125" y2="-2.3937625" layer="200"/>
<rectangle x1="1.1278" y1="-2.4001875" x2="1.38484375" y2="-2.3937625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.4001875" x2="2.515859375" y2="-2.3937625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.393759375" x2="-1.85395625" y2="-2.387334375" layer="200"/>
<rectangle x1="-1.821825" y1="-2.393759375" x2="-1.6226125" y2="-2.387334375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.393759375" x2="-1.12136875" y2="-2.387334375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.393759375" x2="-0.63298125" y2="-2.387334375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.393759375" x2="-0.11888125" y2="-2.387334375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.393759375" x2="0.3823625" y2="-2.387334375" layer="200"/>
<rectangle x1="0.62013125" y1="-2.393759375" x2="0.88360625" y2="-2.387334375" layer="200"/>
<rectangle x1="1.1278" y1="-2.393759375" x2="1.37841875" y2="-2.387334375" layer="200"/>
<rectangle x1="1.648321875" y1="-2.393759375" x2="2.515859375" y2="-2.387334375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.387334375" x2="-1.85395625" y2="-2.380909375" layer="200"/>
<rectangle x1="-1.834678125" y1="-2.387334375" x2="-1.622615625" y2="-2.380909375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.387334375" x2="-1.11494375" y2="-2.380909375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.387334375" x2="-0.62655625" y2="-2.380909375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.387334375" x2="-0.11888125" y2="-2.380909375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.387334375" x2="0.3823625" y2="-2.380909375" layer="200"/>
<rectangle x1="0.62013125" y1="-2.387334375" x2="0.88360625" y2="-2.380909375" layer="200"/>
<rectangle x1="1.1278" y1="-2.387334375" x2="1.37841875" y2="-2.380909375" layer="200"/>
<rectangle x1="1.65475" y1="-2.387334375" x2="2.51585625" y2="-2.380909375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.380909375" x2="-1.84753125" y2="-2.374484375" layer="200"/>
<rectangle x1="-1.841103125" y1="-2.380909375" x2="-1.622615625" y2="-2.374484375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.380909375" x2="-1.11494375" y2="-2.374484375" layer="200"/>
<rectangle x1="-0.8836" y1="-2.380909375" x2="-0.62655625" y2="-2.374484375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.380909375" x2="-0.11888125" y2="-2.374484375" layer="200"/>
<rectangle x1="0.1253125" y1="-2.380909375" x2="0.3823625" y2="-2.374484375" layer="200"/>
<rectangle x1="0.62013125" y1="-2.380909375" x2="0.88360625" y2="-2.374484375" layer="200"/>
<rectangle x1="1.1278" y1="-2.380909375" x2="1.37841875" y2="-2.374484375" layer="200"/>
<rectangle x1="1.65475" y1="-2.380909375" x2="2.51585625" y2="-2.374484375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.37448125" x2="-1.6226125" y2="-2.36805625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.37448125" x2="-1.11494375" y2="-2.36805625" layer="200"/>
<rectangle x1="-0.8836" y1="-2.37448125" x2="-0.62655625" y2="-2.36805625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.37448125" x2="-0.11888125" y2="-2.36805625" layer="200"/>
<rectangle x1="0.131740625" y1="-2.37448125" x2="0.382359375" y2="-2.36805625" layer="200"/>
<rectangle x1="0.62013125" y1="-2.37448125" x2="0.88360625" y2="-2.36805625" layer="200"/>
<rectangle x1="1.134225" y1="-2.37448125" x2="1.37841875" y2="-2.36805625" layer="200"/>
<rectangle x1="1.648321875" y1="-2.37448125" x2="2.515859375" y2="-2.36805625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.36805625" x2="-1.6226125" y2="-2.36163125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.36805625" x2="-1.11494375" y2="-2.36163125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.36805625" x2="-0.620125" y2="-2.36163125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.36805625" x2="-0.11888125" y2="-2.36163125" layer="200"/>
<rectangle x1="0.131740625" y1="-2.36805625" x2="0.382359375" y2="-2.36163125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.36805625" x2="0.88360625" y2="-2.36163125" layer="200"/>
<rectangle x1="1.140653125" y1="-2.36805625" x2="1.378421875" y2="-2.36163125" layer="200"/>
<rectangle x1="1.648321875" y1="-2.36805625" x2="2.515859375" y2="-2.36163125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.361628125" x2="-1.6226125" y2="-2.355203125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.361628125" x2="-1.11494375" y2="-2.355203125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.361628125" x2="-0.607275" y2="-2.355203125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.361628125" x2="-0.11888125" y2="-2.355203125" layer="200"/>
<rectangle x1="0.131740625" y1="-2.361628125" x2="0.382359375" y2="-2.355203125" layer="200"/>
<rectangle x1="0.62655625" y1="-2.361628125" x2="0.89003125" y2="-2.355203125" layer="200"/>
<rectangle x1="1.140653125" y1="-2.361628125" x2="1.378421875" y2="-2.355203125" layer="200"/>
<rectangle x1="1.641896875" y1="-2.361628125" x2="2.515859375" y2="-2.355203125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.355203125" x2="-1.6226125" y2="-2.348778125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.355203125" x2="-1.12136875" y2="-2.348778125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.355203125" x2="-0.60085" y2="-2.348778125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.355203125" x2="-0.11888125" y2="-2.348778125" layer="200"/>
<rectangle x1="0.1253125" y1="-2.355203125" x2="0.37593125" y2="-2.348778125" layer="200"/>
<rectangle x1="0.62655625" y1="-2.355203125" x2="0.89645625" y2="-2.348778125" layer="200"/>
<rectangle x1="1.140653125" y1="-2.355203125" x2="1.384846875" y2="-2.348778125" layer="200"/>
<rectangle x1="1.641896875" y1="-2.355203125" x2="2.515859375" y2="-2.348778125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.348778125" x2="-1.6226125" y2="-2.342353125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.348778125" x2="-1.12136875" y2="-2.342353125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.348778125" x2="-0.594425" y2="-2.342353125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.348778125" x2="-0.1253125" y2="-2.342353125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.348778125" x2="0.37593125" y2="-2.342353125" layer="200"/>
<rectangle x1="0.62655625" y1="-2.348778125" x2="0.89645625" y2="-2.342353125" layer="200"/>
<rectangle x1="1.140653125" y1="-2.348778125" x2="1.384846875" y2="-2.342353125" layer="200"/>
<rectangle x1="1.63546875" y1="-2.348778125" x2="2.51585625" y2="-2.342353125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.34235" x2="-1.62904375" y2="-2.335925" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.34235" x2="-1.12136875" y2="-2.335925" layer="200"/>
<rectangle x1="-0.8836" y1="-2.34235" x2="-0.594425" y2="-2.335925" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.34235" x2="-0.1253125" y2="-2.335925" layer="200"/>
<rectangle x1="0.1188875" y1="-2.34235" x2="0.37593125" y2="-2.335925" layer="200"/>
<rectangle x1="0.632984375" y1="-2.34235" x2="0.896453125" y2="-2.335925" layer="200"/>
<rectangle x1="1.140653125" y1="-2.34235" x2="1.384846875" y2="-2.335925" layer="200"/>
<rectangle x1="1.63546875" y1="-2.34235" x2="2.51585625" y2="-2.335925" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.335925" x2="-1.62904375" y2="-2.3295" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.335925" x2="-1.121371875" y2="-2.3295" layer="200"/>
<rectangle x1="-0.8836" y1="-2.335925" x2="-0.594425" y2="-2.3295" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.335925" x2="-0.1253125" y2="-2.3295" layer="200"/>
<rectangle x1="0.1188875" y1="-2.335925" x2="0.37593125" y2="-2.3295" layer="200"/>
<rectangle x1="0.632984375" y1="-2.335925" x2="0.896453125" y2="-2.3295" layer="200"/>
<rectangle x1="1.140653125" y1="-2.335925" x2="1.391271875" y2="-2.3295" layer="200"/>
<rectangle x1="1.62904375" y1="-2.335925" x2="2.51585625" y2="-2.3295" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.329496875" x2="-1.62904375" y2="-2.323071875" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.329496875" x2="-1.127796875" y2="-2.323071875" layer="200"/>
<rectangle x1="-0.8836" y1="-2.329496875" x2="-0.594425" y2="-2.323071875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.329496875" x2="-0.1253125" y2="-2.323071875" layer="200"/>
<rectangle x1="0.1188875" y1="-2.329496875" x2="0.36950625" y2="-2.323071875" layer="200"/>
<rectangle x1="0.632984375" y1="-2.329496875" x2="0.890028125" y2="-2.323071875" layer="200"/>
<rectangle x1="1.134225" y1="-2.329496875" x2="1.391275" y2="-2.323071875" layer="200"/>
<rectangle x1="1.62904375" y1="-2.329496875" x2="2.51585625" y2="-2.323071875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.323071875" x2="-1.62904375" y2="-2.316646875" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.323071875" x2="-1.127796875" y2="-2.316646875" layer="200"/>
<rectangle x1="-0.8836" y1="-2.323071875" x2="-0.60085" y2="-2.316646875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.323071875" x2="-0.1253125" y2="-2.316646875" layer="200"/>
<rectangle x1="0.1188875" y1="-2.323071875" x2="0.36950625" y2="-2.316646875" layer="200"/>
<rectangle x1="0.632984375" y1="-2.323071875" x2="0.883603125" y2="-2.316646875" layer="200"/>
<rectangle x1="1.134225" y1="-2.323071875" x2="1.391275" y2="-2.316646875" layer="200"/>
<rectangle x1="1.62261875" y1="-2.323071875" x2="2.51585625" y2="-2.316646875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.316646875" x2="-1.63546875" y2="-2.310221875" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.316646875" x2="-1.1278" y2="-2.310221875" layer="200"/>
<rectangle x1="-0.8836" y1="-2.316646875" x2="-0.6137" y2="-2.310221875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.316646875" x2="-0.1317375" y2="-2.310221875" layer="200"/>
<rectangle x1="0.1188875" y1="-2.316646875" x2="0.36950625" y2="-2.310221875" layer="200"/>
<rectangle x1="0.632984375" y1="-2.316646875" x2="0.877178125" y2="-2.310221875" layer="200"/>
<rectangle x1="1.134225" y1="-2.316646875" x2="1.391275" y2="-2.310221875" layer="200"/>
<rectangle x1="1.62261875" y1="-2.316646875" x2="2.51585625" y2="-2.310221875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.31021875" x2="-1.63546875" y2="-2.30379375" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.31021875" x2="-1.1278" y2="-2.30379375" layer="200"/>
<rectangle x1="-0.8836" y1="-2.31021875" x2="-0.620125" y2="-2.30379375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.31021875" x2="-0.1317375" y2="-2.30379375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.31021875" x2="0.36950625" y2="-2.30379375" layer="200"/>
<rectangle x1="0.632984375" y1="-2.31021875" x2="0.870753125" y2="-2.30379375" layer="200"/>
<rectangle x1="1.134225" y1="-2.31021875" x2="1.391275" y2="-2.30379375" layer="200"/>
<rectangle x1="1.62904375" y1="-2.31021875" x2="2.51585625" y2="-2.30379375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.30379375" x2="-1.63546875" y2="-2.29736875" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.30379375" x2="-1.1278" y2="-2.29736875" layer="200"/>
<rectangle x1="-0.8836" y1="-2.30379375" x2="-0.620125" y2="-2.29736875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.30379375" x2="-0.1317375" y2="-2.29736875" layer="200"/>
<rectangle x1="0.1188875" y1="-2.30379375" x2="0.36308125" y2="-2.29736875" layer="200"/>
<rectangle x1="0.632984375" y1="-2.30379375" x2="0.864321875" y2="-2.29736875" layer="200"/>
<rectangle x1="1.134225" y1="-2.30379375" x2="1.38484375" y2="-2.29736875" layer="200"/>
<rectangle x1="1.62904375" y1="-2.30379375" x2="2.51585625" y2="-2.29736875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.29736875" x2="-1.63546875" y2="-2.29094375" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.29736875" x2="-1.1278" y2="-2.29094375" layer="200"/>
<rectangle x1="-0.8836" y1="-2.29736875" x2="-0.62655625" y2="-2.29094375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.29736875" x2="-0.1317375" y2="-2.29094375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.29736875" x2="0.36308125" y2="-2.29094375" layer="200"/>
<rectangle x1="0.632984375" y1="-2.29736875" x2="0.857896875" y2="-2.29094375" layer="200"/>
<rectangle x1="1.134225" y1="-2.29736875" x2="1.38484375" y2="-2.29094375" layer="200"/>
<rectangle x1="1.63546875" y1="-2.29736875" x2="2.51585625" y2="-2.29094375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.290940625" x2="-1.63546875" y2="-2.284515625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.290940625" x2="-1.1278" y2="-2.284515625" layer="200"/>
<rectangle x1="-0.8836" y1="-2.290940625" x2="-0.62655625" y2="-2.284515625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.290940625" x2="-0.1317375" y2="-2.284515625" layer="200"/>
<rectangle x1="0.1188875" y1="-2.290940625" x2="0.36950625" y2="-2.284515625" layer="200"/>
<rectangle x1="0.639409375" y1="-2.290940625" x2="0.857896875" y2="-2.284515625" layer="200"/>
<rectangle x1="1.134225" y1="-2.290940625" x2="1.38484375" y2="-2.284515625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.290940625" x2="2.515859375" y2="-2.284515625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.284515625" x2="-1.63546875" y2="-2.278090625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.284515625" x2="-1.1278" y2="-2.278090625" layer="200"/>
<rectangle x1="-0.8836" y1="-2.284515625" x2="-0.62655625" y2="-2.278090625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.284515625" x2="-0.1317375" y2="-2.278090625" layer="200"/>
<rectangle x1="0.1188875" y1="-2.284515625" x2="0.36950625" y2="-2.278090625" layer="200"/>
<rectangle x1="0.639409375" y1="-2.284515625" x2="0.857896875" y2="-2.278090625" layer="200"/>
<rectangle x1="1.134225" y1="-2.284515625" x2="1.38484375" y2="-2.278090625" layer="200"/>
<rectangle x1="1.648321875" y1="-2.284515625" x2="2.515859375" y2="-2.278090625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.2780875" x2="-1.6226125" y2="-2.2716625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.2780875" x2="-1.1278" y2="-2.2716625" layer="200"/>
<rectangle x1="-0.890025" y1="-2.2780875" x2="-0.62655625" y2="-2.2716625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.2780875" x2="-0.1317375" y2="-2.2716625" layer="200"/>
<rectangle x1="0.1188875" y1="-2.2780875" x2="0.36950625" y2="-2.2716625" layer="200"/>
<rectangle x1="0.639409375" y1="-2.2780875" x2="0.857896875" y2="-2.2716625" layer="200"/>
<rectangle x1="1.134225" y1="-2.2780875" x2="1.38484375" y2="-2.2716625" layer="200"/>
<rectangle x1="1.65475" y1="-2.2780875" x2="2.50943125" y2="-2.2716625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.2716625" x2="-1.6033375" y2="-2.2652375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.2716625" x2="-1.1278" y2="-2.2652375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.2716625" x2="-0.62655625" y2="-2.2652375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.2716625" x2="-0.1317375" y2="-2.2652375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.2716625" x2="0.36950625" y2="-2.2652375" layer="200"/>
<rectangle x1="0.639409375" y1="-2.2716625" x2="0.857896875" y2="-2.2652375" layer="200"/>
<rectangle x1="1.134225" y1="-2.2716625" x2="1.37841875" y2="-2.2652375" layer="200"/>
<rectangle x1="1.65475" y1="-2.2716625" x2="2.50943125" y2="-2.2652375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.2652375" x2="-1.6033375" y2="-2.2588125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.2652375" x2="-1.1278" y2="-2.2588125" layer="200"/>
<rectangle x1="-0.890025" y1="-2.2652375" x2="-0.62655625" y2="-2.2588125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.2652375" x2="-0.1317375" y2="-2.2588125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.2652375" x2="0.36950625" y2="-2.2588125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.2652375" x2="0.857896875" y2="-2.2588125" layer="200"/>
<rectangle x1="1.134225" y1="-2.2652375" x2="1.37841875" y2="-2.2588125" layer="200"/>
<rectangle x1="1.65475" y1="-2.2652375" x2="2.51585625" y2="-2.2588125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.258809375" x2="-1.6033375" y2="-2.252384375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.258809375" x2="-1.1278" y2="-2.252384375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.258809375" x2="-0.62655625" y2="-2.252384375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.258809375" x2="-0.1317375" y2="-2.252384375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.258809375" x2="0.36950625" y2="-2.252384375" layer="200"/>
<rectangle x1="0.639409375" y1="-2.258809375" x2="0.857896875" y2="-2.252384375" layer="200"/>
<rectangle x1="1.134225" y1="-2.258809375" x2="1.37841875" y2="-2.252384375" layer="200"/>
<rectangle x1="1.65475" y1="-2.258809375" x2="2.51585625" y2="-2.252384375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.252384375" x2="-1.6033375" y2="-2.245959375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.252384375" x2="-1.1278" y2="-2.245959375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.252384375" x2="-0.62655625" y2="-2.245959375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.252384375" x2="-0.1317375" y2="-2.245959375" layer="200"/>
<rectangle x1="0.1188875" y1="-2.252384375" x2="0.36950625" y2="-2.245959375" layer="200"/>
<rectangle x1="0.639409375" y1="-2.252384375" x2="0.864321875" y2="-2.245959375" layer="200"/>
<rectangle x1="1.134225" y1="-2.252384375" x2="1.37841875" y2="-2.245959375" layer="200"/>
<rectangle x1="1.648321875" y1="-2.252384375" x2="2.522284375" y2="-2.245959375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.24595625" x2="-1.6033375" y2="-2.23953125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.24595625" x2="-1.1278" y2="-2.23953125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.24595625" x2="-0.62655625" y2="-2.23953125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.24595625" x2="-0.1317375" y2="-2.23953125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.24595625" x2="0.36950625" y2="-2.23953125" layer="200"/>
<rectangle x1="0.639409375" y1="-2.24595625" x2="0.870753125" y2="-2.23953125" layer="200"/>
<rectangle x1="1.134225" y1="-2.24595625" x2="1.37199375" y2="-2.23953125" layer="200"/>
<rectangle x1="1.641896875" y1="-2.24595625" x2="2.143140625" y2="-2.23953125" layer="200"/>
<rectangle x1="2.15599375" y1="-2.24595625" x2="2.5287125" y2="-2.23953125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.23953125" x2="-1.6033375" y2="-2.23310625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.23953125" x2="-1.1278" y2="-2.23310625" layer="200"/>
<rectangle x1="-0.8836" y1="-2.23953125" x2="-0.62655625" y2="-2.23310625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.23953125" x2="-0.1317375" y2="-2.23310625" layer="200"/>
<rectangle x1="0.1188875" y1="-2.23953125" x2="0.36950625" y2="-2.23310625" layer="200"/>
<rectangle x1="0.639409375" y1="-2.23953125" x2="0.877178125" y2="-2.23310625" layer="200"/>
<rectangle x1="1.134225" y1="-2.23953125" x2="1.37199375" y2="-2.23310625" layer="200"/>
<rectangle x1="1.63546875" y1="-2.23953125" x2="2.1367125" y2="-2.23310625" layer="200"/>
<rectangle x1="2.16241875" y1="-2.23953125" x2="2.5287125" y2="-2.23310625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.23310625" x2="-1.6097625" y2="-2.22668125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.23310625" x2="-1.1278" y2="-2.22668125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.23310625" x2="-0.62655625" y2="-2.22668125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.23310625" x2="-0.1317375" y2="-2.22668125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.23310625" x2="0.36950625" y2="-2.22668125" layer="200"/>
<rectangle x1="0.632984375" y1="-2.23310625" x2="0.877178125" y2="-2.22668125" layer="200"/>
<rectangle x1="1.1278" y1="-2.23310625" x2="1.36556875" y2="-2.22668125" layer="200"/>
<rectangle x1="1.63546875" y1="-2.23310625" x2="2.1302875" y2="-2.22668125" layer="200"/>
<rectangle x1="2.16884375" y1="-2.23310625" x2="2.5287125" y2="-2.22668125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.226678125" x2="-1.6226125" y2="-2.220253125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.226678125" x2="-1.1278" y2="-2.220253125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.226678125" x2="-0.62655625" y2="-2.220253125" layer="200"/>
<rectangle x1="-0.388784375" y1="-2.226678125" x2="-0.131734375" y2="-2.220253125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.226678125" x2="0.37593125" y2="-2.220253125" layer="200"/>
<rectangle x1="0.62655625" y1="-2.226678125" x2="0.88360625" y2="-2.220253125" layer="200"/>
<rectangle x1="1.1278" y1="-2.226678125" x2="1.36556875" y2="-2.220253125" layer="200"/>
<rectangle x1="1.62904375" y1="-2.226678125" x2="1.796125" y2="-2.220253125" layer="200"/>
<rectangle x1="1.80255" y1="-2.226678125" x2="2.1302875" y2="-2.220253125" layer="200"/>
<rectangle x1="2.16884375" y1="-2.226678125" x2="2.5287125" y2="-2.220253125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.220253125" x2="-1.62904375" y2="-2.213828125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.220253125" x2="-1.1278" y2="-2.213828125" layer="200"/>
<rectangle x1="-0.8836" y1="-2.220253125" x2="-0.620125" y2="-2.213828125" layer="200"/>
<rectangle x1="-0.388784375" y1="-2.220253125" x2="-0.131734375" y2="-2.213828125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.220253125" x2="0.37593125" y2="-2.213828125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.220253125" x2="0.88360625" y2="-2.213828125" layer="200"/>
<rectangle x1="1.1278" y1="-2.220253125" x2="1.36556875" y2="-2.213828125" layer="200"/>
<rectangle x1="1.62904375" y1="-2.220253125" x2="1.78326875" y2="-2.213828125" layer="200"/>
<rectangle x1="1.808978125" y1="-2.220253125" x2="2.123859375" y2="-2.213828125" layer="200"/>
<rectangle x1="2.16884375" y1="-2.220253125" x2="2.52228125" y2="-2.213828125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.213828125" x2="-1.62904375" y2="-2.207403125" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.213828125" x2="-1.121371875" y2="-2.207403125" layer="200"/>
<rectangle x1="-0.877175" y1="-2.213828125" x2="-0.620125" y2="-2.207403125" layer="200"/>
<rectangle x1="-0.388784375" y1="-2.213828125" x2="-0.131734375" y2="-2.207403125" layer="200"/>
<rectangle x1="0.1188875" y1="-2.213828125" x2="0.37593125" y2="-2.207403125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.213828125" x2="0.88360625" y2="-2.207403125" layer="200"/>
<rectangle x1="1.1278" y1="-2.213828125" x2="1.37199375" y2="-2.207403125" layer="200"/>
<rectangle x1="1.62261875" y1="-2.213828125" x2="1.78326875" y2="-2.207403125" layer="200"/>
<rectangle x1="1.815403125" y1="-2.213828125" x2="2.123859375" y2="-2.207403125" layer="200"/>
<rectangle x1="2.16884375" y1="-2.213828125" x2="2.52228125" y2="-2.207403125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.2074" x2="-1.62904375" y2="-2.200975" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.2074" x2="-1.114946875" y2="-2.200975" layer="200"/>
<rectangle x1="-0.877175" y1="-2.2074" x2="-0.6137" y2="-2.200975" layer="200"/>
<rectangle x1="-0.388784375" y1="-2.2074" x2="-0.131734375" y2="-2.200975" layer="200"/>
<rectangle x1="0.1188875" y1="-2.2074" x2="0.3823625" y2="-2.200975" layer="200"/>
<rectangle x1="0.62013125" y1="-2.2074" x2="0.877175" y2="-2.200975" layer="200"/>
<rectangle x1="1.1278" y1="-2.2074" x2="1.37199375" y2="-2.200975" layer="200"/>
<rectangle x1="1.62261875" y1="-2.2074" x2="1.78326875" y2="-2.200975" layer="200"/>
<rectangle x1="1.808978125" y1="-2.2074" x2="2.123859375" y2="-2.200975" layer="200"/>
<rectangle x1="2.16884375" y1="-2.2074" x2="2.51585625" y2="-2.200975" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.200975" x2="-1.62904375" y2="-2.19455" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.200975" x2="-1.114946875" y2="-2.19455" layer="200"/>
<rectangle x1="-0.877175" y1="-2.200975" x2="-0.6137" y2="-2.19455" layer="200"/>
<rectangle x1="-0.388784375" y1="-2.200975" x2="-0.131734375" y2="-2.19455" layer="200"/>
<rectangle x1="0.112459375" y1="-2.200975" x2="0.388784375" y2="-2.19455" layer="200"/>
<rectangle x1="0.62013125" y1="-2.200975" x2="0.877175" y2="-2.19455" layer="200"/>
<rectangle x1="1.1278" y1="-2.200975" x2="1.37841875" y2="-2.19455" layer="200"/>
<rectangle x1="1.62261875" y1="-2.200975" x2="2.1367125" y2="-2.19455" layer="200"/>
<rectangle x1="2.16241875" y1="-2.200975" x2="2.51585625" y2="-2.19455" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.194546875" x2="-1.62904375" y2="-2.188121875" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.194546875" x2="-1.114946875" y2="-2.188121875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.194546875" x2="-0.6137" y2="-2.188121875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.194546875" x2="-0.1317375" y2="-2.188121875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.194546875" x2="0.388784375" y2="-2.188121875" layer="200"/>
<rectangle x1="0.62655625" y1="-2.194546875" x2="0.877175" y2="-2.188121875" layer="200"/>
<rectangle x1="1.1278" y1="-2.194546875" x2="1.37841875" y2="-2.188121875" layer="200"/>
<rectangle x1="1.62261875" y1="-2.194546875" x2="2.1495625" y2="-2.188121875" layer="200"/>
<rectangle x1="2.15599375" y1="-2.194546875" x2="2.51585625" y2="-2.188121875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.188121875" x2="-1.62904375" y2="-2.181696875" layer="200"/>
<rectangle x1="-1.359140625" y1="-2.188121875" x2="-1.114946875" y2="-2.181696875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.188121875" x2="-0.6137" y2="-2.181696875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.188121875" x2="-0.1317375" y2="-2.181696875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.188121875" x2="0.388784375" y2="-2.181696875" layer="200"/>
<rectangle x1="0.62655625" y1="-2.188121875" x2="0.877175" y2="-2.181696875" layer="200"/>
<rectangle x1="1.1278" y1="-2.188121875" x2="1.37841875" y2="-2.181696875" layer="200"/>
<rectangle x1="1.62261875" y1="-2.188121875" x2="2.51585625" y2="-2.181696875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.181696875" x2="-1.62904375" y2="-2.175271875" layer="200"/>
<rectangle x1="-1.3527125" y1="-2.181696875" x2="-1.10851875" y2="-2.175271875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.181696875" x2="-0.6137" y2="-2.175271875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.181696875" x2="-0.1253125" y2="-2.175271875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.181696875" x2="0.388784375" y2="-2.175271875" layer="200"/>
<rectangle x1="0.632984375" y1="-2.181696875" x2="0.877178125" y2="-2.175271875" layer="200"/>
<rectangle x1="1.121375" y1="-2.181696875" x2="1.37841875" y2="-2.175271875" layer="200"/>
<rectangle x1="1.62904375" y1="-2.181696875" x2="2.2780875" y2="-2.175271875" layer="200"/>
<rectangle x1="2.310221875" y1="-2.181696875" x2="2.515859375" y2="-2.175271875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.17526875" x2="-1.6226125" y2="-2.16884375" layer="200"/>
<rectangle x1="-1.3527125" y1="-2.17526875" x2="-1.10209375" y2="-2.16884375" layer="200"/>
<rectangle x1="-0.877175" y1="-2.17526875" x2="-0.620125" y2="-2.16884375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.17526875" x2="-0.1253125" y2="-2.16884375" layer="200"/>
<rectangle x1="0.112459375" y1="-2.17526875" x2="0.388784375" y2="-2.16884375" layer="200"/>
<rectangle x1="0.632984375" y1="-2.17526875" x2="0.877178125" y2="-2.16884375" layer="200"/>
<rectangle x1="1.121375" y1="-2.17526875" x2="1.37841875" y2="-2.16884375" layer="200"/>
<rectangle x1="1.63546875" y1="-2.17526875" x2="2.2780875" y2="-2.16884375" layer="200"/>
<rectangle x1="2.310221875" y1="-2.17526875" x2="2.515859375" y2="-2.16884375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.16884375" x2="-1.6226125" y2="-2.16241875" layer="200"/>
<rectangle x1="-1.3527125" y1="-2.16884375" x2="-1.10209375" y2="-2.16241875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.16884375" x2="-0.62655625" y2="-2.16241875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.16884375" x2="-0.11888125" y2="-2.16241875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.16884375" x2="0.388784375" y2="-2.16241875" layer="200"/>
<rectangle x1="0.632984375" y1="-2.16884375" x2="0.877178125" y2="-2.16241875" layer="200"/>
<rectangle x1="1.121375" y1="-2.16884375" x2="1.37841875" y2="-2.16241875" layer="200"/>
<rectangle x1="1.63546875" y1="-2.16884375" x2="2.2845125" y2="-2.16241875" layer="200"/>
<rectangle x1="2.29094375" y1="-2.16884375" x2="2.51585625" y2="-2.16241875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.162415625" x2="-1.6161875" y2="-2.155990625" layer="200"/>
<rectangle x1="-1.3527125" y1="-2.162415625" x2="-1.09566875" y2="-2.155990625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.162415625" x2="-0.62655625" y2="-2.155990625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.162415625" x2="-0.11888125" y2="-2.155990625" layer="200"/>
<rectangle x1="0.112459375" y1="-2.162415625" x2="0.388784375" y2="-2.155990625" layer="200"/>
<rectangle x1="0.632984375" y1="-2.162415625" x2="0.883603125" y2="-2.155990625" layer="200"/>
<rectangle x1="1.121375" y1="-2.162415625" x2="1.37841875" y2="-2.155990625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.162415625" x2="2.515859375" y2="-2.155990625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.155990625" x2="-1.6097625" y2="-2.149565625" layer="200"/>
<rectangle x1="-1.3527125" y1="-2.155990625" x2="-1.09566875" y2="-2.149565625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.155990625" x2="-0.63298125" y2="-2.149565625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.155990625" x2="-0.1253125" y2="-2.149565625" layer="200"/>
<rectangle x1="0.112459375" y1="-2.155990625" x2="0.388784375" y2="-2.149565625" layer="200"/>
<rectangle x1="0.632984375" y1="-2.155990625" x2="0.890028125" y2="-2.149565625" layer="200"/>
<rectangle x1="1.114946875" y1="-2.155990625" x2="1.378421875" y2="-2.149565625" layer="200"/>
<rectangle x1="1.648321875" y1="-2.155990625" x2="2.515859375" y2="-2.149565625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.149565625" x2="-1.6033375" y2="-2.143140625" layer="200"/>
<rectangle x1="-1.359140625" y1="-2.149565625" x2="-1.095665625" y2="-2.143140625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.149565625" x2="-0.63298125" y2="-2.143140625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.149565625" x2="-0.1253125" y2="-2.143140625" layer="200"/>
<rectangle x1="0.112459375" y1="-2.149565625" x2="0.388784375" y2="-2.143140625" layer="200"/>
<rectangle x1="0.62655625" y1="-2.149565625" x2="0.89003125" y2="-2.143140625" layer="200"/>
<rectangle x1="1.114946875" y1="-2.149565625" x2="1.378421875" y2="-2.143140625" layer="200"/>
<rectangle x1="1.648321875" y1="-2.149565625" x2="2.515859375" y2="-2.143140625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.1431375" x2="-1.6033375" y2="-2.1367125" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.1431375" x2="-1.095665625" y2="-2.1367125" layer="200"/>
<rectangle x1="-0.877175" y1="-2.1431375" x2="-0.63298125" y2="-2.1367125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.1431375" x2="-0.1253125" y2="-2.1367125" layer="200"/>
<rectangle x1="0.112459375" y1="-2.1431375" x2="0.388784375" y2="-2.1367125" layer="200"/>
<rectangle x1="0.62655625" y1="-2.1431375" x2="0.89003125" y2="-2.1367125" layer="200"/>
<rectangle x1="1.114946875" y1="-2.1431375" x2="1.378421875" y2="-2.1367125" layer="200"/>
<rectangle x1="1.65475" y1="-2.1431375" x2="2.51585625" y2="-2.1367125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.1367125" x2="-1.6033375" y2="-2.1302875" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.1367125" x2="-1.12136875" y2="-2.1302875" layer="200"/>
<rectangle x1="-1.102090625" y1="-2.1367125" x2="-1.095665625" y2="-2.1302875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.1367125" x2="-0.63298125" y2="-2.1302875" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.1367125" x2="-0.1317375" y2="-2.1302875" layer="200"/>
<rectangle x1="0.106034375" y1="-2.1367125" x2="0.388784375" y2="-2.1302875" layer="200"/>
<rectangle x1="0.62655625" y1="-2.1367125" x2="0.89003125" y2="-2.1302875" layer="200"/>
<rectangle x1="1.114946875" y1="-2.1367125" x2="1.378421875" y2="-2.1302875" layer="200"/>
<rectangle x1="1.65475" y1="-2.1367125" x2="2.51585625" y2="-2.1302875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.1302875" x2="-1.6033375" y2="-2.1238625" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.1302875" x2="-1.1278" y2="-2.1238625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.1302875" x2="-0.63298125" y2="-2.1238625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.1302875" x2="-0.1317375" y2="-2.1238625" layer="200"/>
<rectangle x1="0.106034375" y1="-2.1302875" x2="0.388784375" y2="-2.1238625" layer="200"/>
<rectangle x1="0.62013125" y1="-2.1302875" x2="0.89003125" y2="-2.1238625" layer="200"/>
<rectangle x1="1.114946875" y1="-2.1302875" x2="1.378421875" y2="-2.1238625" layer="200"/>
<rectangle x1="1.65475" y1="-2.1302875" x2="2.51585625" y2="-2.1238625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.123859375" x2="-1.6033375" y2="-2.117434375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.123859375" x2="-1.134225" y2="-2.117434375" layer="200"/>
<rectangle x1="-0.877175" y1="-2.123859375" x2="-0.63298125" y2="-2.117434375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.123859375" x2="-0.1317375" y2="-2.117434375" layer="200"/>
<rectangle x1="0.099609375" y1="-2.123859375" x2="0.388784375" y2="-2.117434375" layer="200"/>
<rectangle x1="0.62013125" y1="-2.123859375" x2="0.89003125" y2="-2.117434375" layer="200"/>
<rectangle x1="1.114946875" y1="-2.123859375" x2="1.378421875" y2="-2.117434375" layer="200"/>
<rectangle x1="1.648321875" y1="-2.123859375" x2="2.515859375" y2="-2.117434375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.117434375" x2="-1.6033375" y2="-2.111009375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.117434375" x2="-1.134225" y2="-2.111009375" layer="200"/>
<rectangle x1="-0.877175" y1="-2.117434375" x2="-0.63298125" y2="-2.111009375" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.117434375" x2="-0.1317375" y2="-2.111009375" layer="200"/>
<rectangle x1="0.099609375" y1="-2.117434375" x2="0.388784375" y2="-2.111009375" layer="200"/>
<rectangle x1="0.62013125" y1="-2.117434375" x2="0.89003125" y2="-2.111009375" layer="200"/>
<rectangle x1="1.114946875" y1="-2.117434375" x2="1.384846875" y2="-2.111009375" layer="200"/>
<rectangle x1="1.648321875" y1="-2.117434375" x2="2.515859375" y2="-2.111009375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.11100625" x2="-1.6033375" y2="-2.10458125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.11100625" x2="-1.134225" y2="-2.10458125" layer="200"/>
<rectangle x1="-0.877175" y1="-2.11100625" x2="-0.63298125" y2="-2.10458125" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.11100625" x2="-0.1317375" y2="-2.10458125" layer="200"/>
<rectangle x1="0.099609375" y1="-2.11100625" x2="0.382359375" y2="-2.10458125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.11100625" x2="0.88360625" y2="-2.10458125" layer="200"/>
<rectangle x1="1.121375" y1="-2.11100625" x2="1.38484375" y2="-2.10458125" layer="200"/>
<rectangle x1="1.641896875" y1="-2.11100625" x2="2.515859375" y2="-2.10458125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.10458125" x2="-1.6033375" y2="-2.09815625" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.10458125" x2="-1.134225" y2="-2.09815625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.10458125" x2="-0.63298125" y2="-2.09815625" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.10458125" x2="-0.1317375" y2="-2.09815625" layer="200"/>
<rectangle x1="0.106034375" y1="-2.10458125" x2="0.382359375" y2="-2.09815625" layer="200"/>
<rectangle x1="0.62013125" y1="-2.10458125" x2="0.877175" y2="-2.09815625" layer="200"/>
<rectangle x1="1.121375" y1="-2.10458125" x2="1.38484375" y2="-2.09815625" layer="200"/>
<rectangle x1="1.641896875" y1="-2.10458125" x2="2.515859375" y2="-2.09815625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.09815625" x2="-1.6033375" y2="-2.09173125" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.09815625" x2="-1.134225" y2="-2.09173125" layer="200"/>
<rectangle x1="-0.877175" y1="-2.09815625" x2="-0.63298125" y2="-2.09173125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.09815625" x2="-0.1317375" y2="-2.09173125" layer="200"/>
<rectangle x1="0.112459375" y1="-2.09815625" x2="0.375934375" y2="-2.09173125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.09815625" x2="0.877175" y2="-2.09173125" layer="200"/>
<rectangle x1="1.1278" y1="-2.09815625" x2="1.391275" y2="-2.09173125" layer="200"/>
<rectangle x1="1.641896875" y1="-2.09815625" x2="2.515859375" y2="-2.09173125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.091728125" x2="-1.6033375" y2="-2.085303125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.091728125" x2="-1.1278" y2="-2.085303125" layer="200"/>
<rectangle x1="-0.877175" y1="-2.091728125" x2="-0.63298125" y2="-2.085303125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.091728125" x2="-0.1317375" y2="-2.085303125" layer="200"/>
<rectangle x1="0.112459375" y1="-2.091728125" x2="0.375934375" y2="-2.085303125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.091728125" x2="0.877175" y2="-2.085303125" layer="200"/>
<rectangle x1="1.1278" y1="-2.091728125" x2="1.391275" y2="-2.085303125" layer="200"/>
<rectangle x1="1.63546875" y1="-2.091728125" x2="2.51585625" y2="-2.085303125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.085303125" x2="-1.6033375" y2="-2.078878125" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.085303125" x2="-1.1278" y2="-2.078878125" layer="200"/>
<rectangle x1="-0.877175" y1="-2.085303125" x2="-0.62655625" y2="-2.078878125" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.085303125" x2="-0.1317375" y2="-2.078878125" layer="200"/>
<rectangle x1="0.112459375" y1="-2.085303125" x2="0.375934375" y2="-2.078878125" layer="200"/>
<rectangle x1="0.62013125" y1="-2.085303125" x2="0.877175" y2="-2.078878125" layer="200"/>
<rectangle x1="1.134225" y1="-2.085303125" x2="1.391275" y2="-2.078878125" layer="200"/>
<rectangle x1="1.62904375" y1="-2.085303125" x2="2.51585625" y2="-2.078878125" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.078875" x2="-1.6033375" y2="-2.07245" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.078875" x2="-1.127796875" y2="-2.07245" layer="200"/>
<rectangle x1="-0.877175" y1="-2.078875" x2="-0.62655625" y2="-2.07245" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.078875" x2="-0.1317375" y2="-2.07245" layer="200"/>
<rectangle x1="0.112459375" y1="-2.078875" x2="0.375934375" y2="-2.07245" layer="200"/>
<rectangle x1="0.613703125" y1="-2.078875" x2="0.877178125" y2="-2.07245" layer="200"/>
<rectangle x1="1.134225" y1="-2.078875" x2="1.391275" y2="-2.07245" layer="200"/>
<rectangle x1="1.62261875" y1="-2.078875" x2="2.31664375" y2="-2.07245" layer="200"/>
<rectangle x1="2.3295" y1="-2.078875" x2="2.51585625" y2="-2.07245" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.07245" x2="-1.6033375" y2="-2.066025" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.07245" x2="-1.127796875" y2="-2.066025" layer="200"/>
<rectangle x1="-0.877175" y1="-2.07245" x2="-0.62655625" y2="-2.066025" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.07245" x2="-0.1317375" y2="-2.066025" layer="200"/>
<rectangle x1="0.112459375" y1="-2.07245" x2="0.375934375" y2="-2.066025" layer="200"/>
<rectangle x1="0.613703125" y1="-2.07245" x2="0.877178125" y2="-2.066025" layer="200"/>
<rectangle x1="1.134225" y1="-2.07245" x2="1.391275" y2="-2.066025" layer="200"/>
<rectangle x1="1.616190625" y1="-2.07245" x2="2.123859375" y2="-2.066025" layer="200"/>
<rectangle x1="2.15599375" y1="-2.07245" x2="2.31664375" y2="-2.066025" layer="200"/>
<rectangle x1="2.3295" y1="-2.07245" x2="2.50943125" y2="-2.066025" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.066025" x2="-1.6161875" y2="-2.0596" layer="200"/>
<rectangle x1="-1.359140625" y1="-2.066025" x2="-1.121371875" y2="-2.0596" layer="200"/>
<rectangle x1="-0.877175" y1="-2.066025" x2="-0.62655625" y2="-2.0596" layer="200"/>
<rectangle x1="-0.38235625" y1="-2.066025" x2="-0.1317375" y2="-2.0596" layer="200"/>
<rectangle x1="0.112459375" y1="-2.066025" x2="0.382359375" y2="-2.0596" layer="200"/>
<rectangle x1="0.613703125" y1="-2.066025" x2="0.877178125" y2="-2.0596" layer="200"/>
<rectangle x1="1.134225" y1="-2.066025" x2="1.391275" y2="-2.0596" layer="200"/>
<rectangle x1="1.609765625" y1="-2.066025" x2="2.117434375" y2="-2.0596" layer="200"/>
<rectangle x1="2.15599375" y1="-2.066025" x2="2.50943125" y2="-2.0596" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.059596875" x2="-1.6161875" y2="-2.053171875" layer="200"/>
<rectangle x1="-1.359140625" y1="-2.059596875" x2="-1.121371875" y2="-2.053171875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.059596875" x2="-0.620125" y2="-2.053171875" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.059596875" x2="-0.1317375" y2="-2.053171875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.059596875" x2="0.388784375" y2="-2.053171875" layer="200"/>
<rectangle x1="0.613703125" y1="-2.059596875" x2="0.877178125" y2="-2.053171875" layer="200"/>
<rectangle x1="1.140653125" y1="-2.059596875" x2="1.391271875" y2="-2.053171875" layer="200"/>
<rectangle x1="1.609765625" y1="-2.059596875" x2="2.117434375" y2="-2.053171875" layer="200"/>
<rectangle x1="2.149565625" y1="-2.059596875" x2="2.509434375" y2="-2.053171875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.053171875" x2="-1.6161875" y2="-2.046746875" layer="200"/>
<rectangle x1="-1.359140625" y1="-2.053171875" x2="-1.114946875" y2="-2.046746875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.053171875" x2="-0.620125" y2="-2.046746875" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.053171875" x2="-0.1253125" y2="-2.046746875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.053171875" x2="0.388784375" y2="-2.046746875" layer="200"/>
<rectangle x1="0.613703125" y1="-2.053171875" x2="0.883603125" y2="-2.046746875" layer="200"/>
<rectangle x1="1.140653125" y1="-2.053171875" x2="1.391271875" y2="-2.046746875" layer="200"/>
<rectangle x1="1.603340625" y1="-2.053171875" x2="2.117434375" y2="-2.046746875" layer="200"/>
<rectangle x1="2.143140625" y1="-2.053171875" x2="2.509434375" y2="-2.046746875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.046746875" x2="-1.6161875" y2="-2.040321875" layer="200"/>
<rectangle x1="-1.359140625" y1="-2.046746875" x2="-1.114946875" y2="-2.040321875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.046746875" x2="-0.6137" y2="-2.040321875" layer="200"/>
<rectangle x1="-0.498028125" y1="-2.046746875" x2="-0.478753125" y2="-2.040321875" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.046746875" x2="-0.1253125" y2="-2.040321875" layer="200"/>
<rectangle x1="0.112459375" y1="-2.046746875" x2="0.395209375" y2="-2.040321875" layer="200"/>
<rectangle x1="0.613703125" y1="-2.046746875" x2="0.890028125" y2="-2.040321875" layer="200"/>
<rectangle x1="1.005703125" y1="-2.046746875" x2="1.031403125" y2="-2.040321875" layer="200"/>
<rectangle x1="1.140653125" y1="-2.046746875" x2="1.391271875" y2="-2.040321875" layer="200"/>
<rectangle x1="1.603340625" y1="-2.046746875" x2="2.509434375" y2="-2.040321875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.04031875" x2="-1.6097625" y2="-2.03389375" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.04031875" x2="-1.114946875" y2="-2.03389375" layer="200"/>
<rectangle x1="-0.877175" y1="-2.04031875" x2="-0.6137" y2="-2.03389375" layer="200"/>
<rectangle x1="-0.498028125" y1="-2.04031875" x2="-0.478753125" y2="-2.03389375" layer="200"/>
<rectangle x1="-0.369503125" y1="-2.04031875" x2="-0.125309375" y2="-2.03389375" layer="200"/>
<rectangle x1="0.112459375" y1="-2.04031875" x2="0.395209375" y2="-2.03389375" layer="200"/>
<rectangle x1="0.613703125" y1="-2.04031875" x2="0.890028125" y2="-2.03389375" layer="200"/>
<rectangle x1="1.134225" y1="-2.04031875" x2="1.391275" y2="-2.03389375" layer="200"/>
<rectangle x1="1.603340625" y1="-2.04031875" x2="2.509434375" y2="-2.03389375" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.03389375" x2="-1.6033375" y2="-2.02746875" layer="200"/>
<rectangle x1="-1.365565625" y1="-2.03389375" x2="-1.114946875" y2="-2.02746875" layer="200"/>
<rectangle x1="-0.877175" y1="-2.03389375" x2="-0.6137" y2="-2.02746875" layer="200"/>
<rectangle x1="-0.504453125" y1="-2.03389375" x2="-0.478753125" y2="-2.02746875" layer="200"/>
<rectangle x1="-0.369503125" y1="-2.03389375" x2="-0.112459375" y2="-2.02746875" layer="200"/>
<rectangle x1="0.106034375" y1="-2.03389375" x2="0.401640625" y2="-2.02746875" layer="200"/>
<rectangle x1="0.613703125" y1="-2.03389375" x2="0.896453125" y2="-2.02746875" layer="200"/>
<rectangle x1="1.134225" y1="-2.03389375" x2="1.3977" y2="-2.02746875" layer="200"/>
<rectangle x1="1.603340625" y1="-2.03389375" x2="2.509434375" y2="-2.02746875" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.027465625" x2="-1.6033375" y2="-2.021040625" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.027465625" x2="-1.108521875" y2="-2.021040625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.027465625" x2="-0.607275" y2="-2.021040625" layer="200"/>
<rectangle x1="-0.369503125" y1="-2.027465625" x2="-0.106034375" y2="-2.021040625" layer="200"/>
<rectangle x1="0.09318125" y1="-2.027465625" x2="0.4080625" y2="-2.021040625" layer="200"/>
<rectangle x1="0.613703125" y1="-2.027465625" x2="0.896453125" y2="-2.021040625" layer="200"/>
<rectangle x1="1.1278" y1="-2.027465625" x2="1.404125" y2="-2.021040625" layer="200"/>
<rectangle x1="1.603340625" y1="-2.027465625" x2="2.509434375" y2="-2.021040625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.021040625" x2="-1.6033375" y2="-2.014615625" layer="200"/>
<rectangle x1="-1.371990625" y1="-2.021040625" x2="-1.102090625" y2="-2.014615625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.021040625" x2="-0.60085" y2="-2.014615625" layer="200"/>
<rectangle x1="-0.369503125" y1="-2.021040625" x2="-0.099603125" y2="-2.014615625" layer="200"/>
<rectangle x1="0.09318125" y1="-2.021040625" x2="0.42734375" y2="-2.014615625" layer="200"/>
<rectangle x1="0.613703125" y1="-2.021040625" x2="0.902884375" y2="-2.014615625" layer="200"/>
<rectangle x1="1.121375" y1="-2.021040625" x2="1.404125" y2="-2.014615625" layer="200"/>
<rectangle x1="1.603340625" y1="-2.021040625" x2="2.509434375" y2="-2.014615625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.014615625" x2="-1.5969125" y2="-2.008190625" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.014615625" x2="-1.09566875" y2="-2.008190625" layer="200"/>
<rectangle x1="-0.877175" y1="-2.014615625" x2="-0.58799375" y2="-2.008190625" layer="200"/>
<rectangle x1="-0.369503125" y1="-2.014615625" x2="-0.093178125" y2="-2.008190625" layer="200"/>
<rectangle x1="0.09318125" y1="-2.014615625" x2="0.43376875" y2="-2.008190625" layer="200"/>
<rectangle x1="0.607278125" y1="-2.014615625" x2="0.909309375" y2="-2.008190625" layer="200"/>
<rectangle x1="1.114946875" y1="-2.014615625" x2="1.410553125" y2="-2.008190625" layer="200"/>
<rectangle x1="1.603340625" y1="-2.014615625" x2="2.509434375" y2="-2.008190625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.0081875" x2="-1.59048125" y2="-2.0017625" layer="200"/>
<rectangle x1="-1.37841875" y1="-2.0081875" x2="-1.0892375" y2="-2.0017625" layer="200"/>
<rectangle x1="-0.8836" y1="-2.0081875" x2="-0.58156875" y2="-2.0017625" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.0081875" x2="-0.09318125" y2="-2.0017625" layer="200"/>
<rectangle x1="0.09318125" y1="-2.0081875" x2="0.44019375" y2="-2.0017625" layer="200"/>
<rectangle x1="0.600853125" y1="-2.0081875" x2="0.915734375" y2="-2.0017625" layer="200"/>
<rectangle x1="1.108521875" y1="-2.0081875" x2="1.416978125" y2="-2.0017625" layer="200"/>
<rectangle x1="1.603340625" y1="-2.0081875" x2="2.509434375" y2="-2.0017625" layer="200"/>
<rectangle x1="-2.52228125" y1="-2.0017625" x2="-1.58405625" y2="-1.9953375" layer="200"/>
<rectangle x1="-1.38484375" y1="-2.0017625" x2="-1.0828125" y2="-1.9953375" layer="200"/>
<rectangle x1="-0.890025" y1="-2.0017625" x2="-0.57514375" y2="-1.9953375" layer="200"/>
<rectangle x1="-0.37593125" y1="-2.0017625" x2="-0.08675" y2="-1.9953375" layer="200"/>
<rectangle x1="0.08675625" y1="-2.0017625" x2="0.44019375" y2="-1.9953375" layer="200"/>
<rectangle x1="0.588" y1="-2.0017625" x2="0.9221625" y2="-1.9953375" layer="200"/>
<rectangle x1="1.102096875" y1="-2.0017625" x2="1.423403125" y2="-1.9953375" layer="200"/>
<rectangle x1="1.5969125" y1="-2.0017625" x2="2.50943125" y2="-1.9953375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.9953375" x2="-1.57763125" y2="-1.9889125" layer="200"/>
<rectangle x1="-1.39126875" y1="-1.9953375" x2="-1.0699625" y2="-1.9889125" layer="200"/>
<rectangle x1="-0.896453125" y1="-1.9953375" x2="-0.568715625" y2="-1.9889125" layer="200"/>
<rectangle x1="-0.38235625" y1="-1.9953375" x2="-0.08675" y2="-1.9889125" layer="200"/>
<rectangle x1="0.08675625" y1="-1.9953375" x2="0.44019375" y2="-1.9889125" layer="200"/>
<rectangle x1="0.581571875" y1="-1.9953375" x2="0.928584375" y2="-1.9889125" layer="200"/>
<rectangle x1="1.09566875" y1="-1.9953375" x2="1.42983125" y2="-1.9889125" layer="200"/>
<rectangle x1="1.5969125" y1="-1.9953375" x2="2.50943125" y2="-1.9889125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.988909375" x2="-1.55835" y2="-1.982484375" layer="200"/>
<rectangle x1="-1.41055" y1="-1.988909375" x2="-1.0635375" y2="-1.982484375" layer="200"/>
<rectangle x1="-0.902878125" y1="-1.988909375" x2="-0.562290625" y2="-1.982484375" layer="200"/>
<rectangle x1="-0.388784375" y1="-1.988909375" x2="-0.080328125" y2="-1.982484375" layer="200"/>
<rectangle x1="0.08033125" y1="-1.988909375" x2="0.44661875" y2="-1.982484375" layer="200"/>
<rectangle x1="0.568721875" y1="-1.988909375" x2="0.935015625" y2="-1.982484375" layer="200"/>
<rectangle x1="1.076390625" y1="-1.988909375" x2="1.429828125" y2="-1.982484375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.988909375" x2="2.50943125" y2="-1.982484375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.982484375" x2="-1.5455" y2="-1.976059375" layer="200"/>
<rectangle x1="-1.416975" y1="-1.982484375" x2="-1.03783125" y2="-1.976059375" layer="200"/>
<rectangle x1="-0.90930625" y1="-1.982484375" x2="-0.55586875" y2="-1.976059375" layer="200"/>
<rectangle x1="-0.395209375" y1="-1.982484375" x2="-0.073903125" y2="-1.976059375" layer="200"/>
<rectangle x1="0.073903125" y1="-1.982484375" x2="0.453046875" y2="-1.976059375" layer="200"/>
<rectangle x1="0.55586875" y1="-1.982484375" x2="0.9414375" y2="-1.976059375" layer="200"/>
<rectangle x1="1.076390625" y1="-1.982484375" x2="1.429828125" y2="-1.976059375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.982484375" x2="2.50943125" y2="-1.976059375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.97605625" x2="-1.52621875" y2="-1.96963125" layer="200"/>
<rectangle x1="-1.4234" y1="-1.97605625" x2="-1.01855" y2="-1.96963125" layer="200"/>
<rectangle x1="-0.91573125" y1="-1.97605625" x2="-0.5494375" y2="-1.96963125" layer="200"/>
<rectangle x1="-0.401634375" y1="-1.97605625" x2="-0.061046875" y2="-1.96963125" layer="200"/>
<rectangle x1="0.067478125" y1="-1.97605625" x2="0.453046875" y2="-1.96963125" layer="200"/>
<rectangle x1="0.54944375" y1="-1.97605625" x2="0.9478625" y2="-1.96963125" layer="200"/>
<rectangle x1="1.0635375" y1="-1.97605625" x2="1.43625625" y2="-1.96963125" layer="200"/>
<rectangle x1="1.584059375" y1="-1.97605625" x2="2.509434375" y2="-1.96963125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.96963125" x2="-1.51336875" y2="-1.96320625" layer="200"/>
<rectangle x1="-1.429828125" y1="-1.96963125" x2="-1.005696875" y2="-1.96320625" layer="200"/>
<rectangle x1="-0.928584375" y1="-1.96963125" x2="-0.517309375" y2="-1.96320625" layer="200"/>
<rectangle x1="-0.427340625" y1="-1.96963125" x2="-0.054621875" y2="-1.96320625" layer="200"/>
<rectangle x1="0.06105" y1="-1.96963125" x2="0.459475" y2="-1.96320625" layer="200"/>
<rectangle x1="0.536590625" y1="-1.96963125" x2="0.954290625" y2="-1.96320625" layer="200"/>
<rectangle x1="1.0571125" y1="-1.96963125" x2="1.44268125" y2="-1.96320625" layer="200"/>
<rectangle x1="1.49409375" y1="-1.96963125" x2="1.51336875" y2="-1.96320625" layer="200"/>
<rectangle x1="1.577634375" y1="-1.96963125" x2="2.509434375" y2="-1.96320625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.96320625" x2="-1.49409375" y2="-1.95678125" layer="200"/>
<rectangle x1="-1.44268125" y1="-1.96320625" x2="-0.97999375" y2="-1.95678125" layer="200"/>
<rectangle x1="-0.9414375" y1="-1.96320625" x2="-0.51088125" y2="-1.95678125" layer="200"/>
<rectangle x1="-0.44019375" y1="-1.96320625" x2="-0.04176875" y2="-1.95678125" layer="200"/>
<rectangle x1="0.0482" y1="-1.96320625" x2="0.4659" y2="-1.95678125" layer="200"/>
<rectangle x1="0.5301625" y1="-1.96320625" x2="0.96714375" y2="-1.95678125" layer="200"/>
<rectangle x1="1.02498125" y1="-1.96320625" x2="1.44910625" y2="-1.95678125" layer="200"/>
<rectangle x1="1.48766875" y1="-1.96320625" x2="1.526225" y2="-1.95678125" layer="200"/>
<rectangle x1="1.56478125" y1="-1.96320625" x2="2.50943125" y2="-1.95678125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.956778125" x2="-1.4812375" y2="-1.950353125" layer="200"/>
<rectangle x1="-1.44910625" y1="-1.956778125" x2="-0.50445625" y2="-1.950353125" layer="200"/>
<rectangle x1="-0.45304375" y1="-1.956778125" x2="0.48518125" y2="-1.950353125" layer="200"/>
<rectangle x1="0.5173125" y1="-1.956778125" x2="2.50943125" y2="-1.950353125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.950353125" x2="2.50943125" y2="-1.943928125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.943925" x2="2.50943125" y2="-1.9375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.9375" x2="2.50943125" y2="-1.931075" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.931075" x2="2.50943125" y2="-1.92465" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.924646875" x2="2.50943125" y2="-1.918221875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.918221875" x2="2.50943125" y2="-1.911796875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.911796875" x2="2.50943125" y2="-1.905371875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.90536875" x2="2.50943125" y2="-1.89894375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.89894375" x2="2.50943125" y2="-1.89251875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.892515625" x2="2.50943125" y2="-1.886090625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.886090625" x2="2.50943125" y2="-1.879665625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.879665625" x2="2.50943125" y2="-1.873240625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.8732375" x2="2.50943125" y2="-1.8668125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.8668125" x2="2.50943125" y2="-1.8603875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.860384375" x2="2.50943125" y2="-1.853959375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.853959375" x2="2.50943125" y2="-1.847534375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.847534375" x2="2.50943125" y2="-1.841109375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.84110625" x2="2.50943125" y2="-1.83468125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.83468125" x2="2.50943125" y2="-1.82825625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.82825625" x2="2.50943125" y2="-1.82183125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.821828125" x2="-2.496575" y2="-1.815403125" layer="200"/>
<rectangle x1="-2.483725" y1="-1.821828125" x2="2.50943125" y2="-1.815403125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.815403125" x2="-2.496575" y2="-1.808978125" layer="200"/>
<rectangle x1="-2.483725" y1="-1.815403125" x2="1.89894375" y2="-1.808978125" layer="200"/>
<rectangle x1="1.911796875" y1="-1.815403125" x2="2.509434375" y2="-1.808978125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.808975" x2="2.50943125" y2="-1.80255" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.80255" x2="2.50943125" y2="-1.796125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.796125" x2="2.50943125" y2="-1.7897" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.789696875" x2="2.51585625" y2="-1.783271875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.783271875" x2="2.50943125" y2="-1.776846875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.77684375" x2="2.50943125" y2="-1.77041875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.77041875" x2="2.50943125" y2="-1.76399375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.76399375" x2="2.50943125" y2="-1.75756875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.757565625" x2="2.50943125" y2="-1.751140625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.751140625" x2="2.50943125" y2="-1.744715625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.744715625" x2="2.50943125" y2="-1.738290625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.7382875" x2="2.50943125" y2="-1.7318625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.7318625" x2="2.50943125" y2="-1.7254375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.725434375" x2="2.50943125" y2="-1.719009375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.719009375" x2="2.51585625" y2="-1.712584375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.712584375" x2="-2.470875" y2="-1.706159375" layer="200"/>
<rectangle x1="-2.432315625" y1="-1.712584375" x2="2.515859375" y2="-1.706159375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.70615625" x2="-2.483725" y2="-1.69973125" layer="200"/>
<rectangle x1="-2.4258875" y1="-1.70615625" x2="2.52228125" y2="-1.69973125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.69973125" x2="-2.49015" y2="-1.69330625" layer="200"/>
<rectangle x1="-2.4194625" y1="-1.69973125" x2="2.5287125" y2="-1.69330625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.693303125" x2="-2.49015" y2="-1.686878125" layer="200"/>
<rectangle x1="-2.4194625" y1="-1.693303125" x2="2.5287125" y2="-1.686878125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.686878125" x2="-2.496575" y2="-1.680453125" layer="200"/>
<rectangle x1="-2.413034375" y1="-1.686878125" x2="2.528709375" y2="-1.680453125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.680453125" x2="-2.496575" y2="-1.674028125" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.680453125" x2="2.528709375" y2="-1.674028125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.674025" x2="-2.496575" y2="-1.6676" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.674025" x2="2.528709375" y2="-1.6676" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.6676" x2="-2.50300625" y2="-1.661175" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.6676" x2="2.522284375" y2="-1.661175" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.661175" x2="-2.50943125" y2="-1.65475" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.661175" x2="2.515859375" y2="-1.65475" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.654746875" x2="-2.51585625" y2="-1.648321875" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.654746875" x2="2.175271875" y2="-1.648321875" layer="200"/>
<rectangle x1="2.213828125" y1="-1.654746875" x2="2.515859375" y2="-1.648321875" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.648321875" x2="2.162415625" y2="-1.641896875" layer="200"/>
<rectangle x1="2.22668125" y1="-1.648321875" x2="2.49658125" y2="-1.641896875" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.64189375" x2="2.136709375" y2="-1.63546875" layer="200"/>
<rectangle x1="2.245959375" y1="-1.64189375" x2="2.361628125" y2="-1.63546875" layer="200"/>
<rectangle x1="2.36805625" y1="-1.64189375" x2="2.45159375" y2="-1.63546875" layer="200"/>
<rectangle x1="-2.400184375" y1="-1.63546875" x2="2.085303125" y2="-1.62904375" layer="200"/>
<rectangle x1="2.387334375" y1="-1.63546875" x2="2.438740625" y2="-1.62904375" layer="200"/>
<rectangle x1="-2.400184375" y1="-1.62904375" x2="-0.086753125" y2="-1.62261875" layer="200"/>
<rectangle x1="-0.035340625" y1="-1.62904375" x2="2.001759375" y2="-1.62261875" layer="200"/>
<rectangle x1="2.4001875" y1="-1.62904375" x2="2.42589375" y2="-1.62261875" layer="200"/>
<rectangle x1="-2.39375625" y1="-1.622615625" x2="-0.11245625" y2="-1.616190625" layer="200"/>
<rectangle x1="-0.028915625" y1="-1.622615625" x2="0.035346875" y2="-1.616190625" layer="200"/>
<rectangle x1="0.073903125" y1="-1.622615625" x2="2.001759375" y2="-1.616190625" layer="200"/>
<rectangle x1="-2.38733125" y1="-1.616190625" x2="-2.348775" y2="-1.609765625" layer="200"/>
<rectangle x1="-2.310215625" y1="-1.616190625" x2="-2.188121875" y2="-1.609765625" layer="200"/>
<rectangle x1="-2.168840625" y1="-1.616190625" x2="-0.125309375" y2="-1.609765625" layer="200"/>
<rectangle x1="-0.022490625" y1="-1.616190625" x2="0.028915625" y2="-1.609765625" layer="200"/>
<rectangle x1="0.08033125" y1="-1.616190625" x2="1.9953375" y2="-1.609765625" layer="200"/>
<rectangle x1="-2.368053125" y1="-1.6097625" x2="-2.361628125" y2="-1.6033375" layer="200"/>
<rectangle x1="-2.297365625" y1="-1.6097625" x2="-2.207396875" y2="-1.6033375" layer="200"/>
<rectangle x1="-2.1495625" y1="-1.6097625" x2="-0.38235625" y2="-1.6033375" layer="200"/>
<rectangle x1="-0.350225" y1="-1.6097625" x2="-0.16386875" y2="-1.6033375" layer="200"/>
<rectangle x1="-0.0160625" y1="-1.6097625" x2="0.02249375" y2="-1.6033375" layer="200"/>
<rectangle x1="0.09318125" y1="-1.6097625" x2="0.15744375" y2="-1.6033375" layer="200"/>
<rectangle x1="0.170296875" y1="-1.6097625" x2="0.652259375" y2="-1.6033375" layer="200"/>
<rectangle x1="0.68439375" y1="-1.6097625" x2="1.9889125" y2="-1.6033375" layer="200"/>
<rectangle x1="-2.2909375" y1="-1.6033375" x2="-2.22025" y2="-1.5969125" layer="200"/>
<rectangle x1="-2.143134375" y1="-1.6033375" x2="-1.249896875" y2="-1.5969125" layer="200"/>
<rectangle x1="-1.204909375" y1="-1.6033375" x2="-1.069959375" y2="-1.5969125" layer="200"/>
<rectangle x1="-1.04425625" y1="-1.6033375" x2="-0.77435625" y2="-1.5969125" layer="200"/>
<rectangle x1="-0.755075" y1="-1.6033375" x2="-0.3952125" y2="-1.5969125" layer="200"/>
<rectangle x1="-0.330946875" y1="-1.6033375" x2="-0.189571875" y2="-1.5969125" layer="200"/>
<rectangle x1="-0.0160625" y1="-1.6033375" x2="0.02249375" y2="-1.5969125" layer="200"/>
<rectangle x1="0.22170625" y1="-1.6033375" x2="0.2795375" y2="-1.5969125" layer="200"/>
<rectangle x1="0.375934375" y1="-1.6033375" x2="0.530159375" y2="-1.5969125" layer="200"/>
<rectangle x1="0.581571875" y1="-1.6033375" x2="0.639409375" y2="-1.5969125" layer="200"/>
<rectangle x1="0.69724375" y1="-1.6033375" x2="1.0057" y2="-1.5969125" layer="200"/>
<rectangle x1="1.044259375" y1="-1.6033375" x2="1.166353125" y2="-1.5969125" layer="200"/>
<rectangle x1="1.269178125" y1="-1.6033375" x2="1.371996875" y2="-1.5969125" layer="200"/>
<rectangle x1="1.410553125" y1="-1.6033375" x2="1.988909375" y2="-1.5969125" layer="200"/>
<rectangle x1="-2.278084375" y1="-1.5969125" x2="-2.226678125" y2="-1.5904875" layer="200"/>
<rectangle x1="-2.136709375" y1="-1.5969125" x2="-1.262746875" y2="-1.5904875" layer="200"/>
<rectangle x1="-1.198484375" y1="-1.5969125" x2="-1.076390625" y2="-1.5904875" layer="200"/>
<rectangle x1="-1.01855" y1="-1.5969125" x2="-0.9285875" y2="-1.5904875" layer="200"/>
<rectangle x1="-0.857896875" y1="-1.5969125" x2="-0.812915625" y2="-1.5904875" layer="200"/>
<rectangle x1="-0.665109375" y1="-1.5969125" x2="-0.401634375" y2="-1.5904875" layer="200"/>
<rectangle x1="-0.324521875" y1="-1.5969125" x2="-0.279540625" y2="-1.5904875" layer="200"/>
<rectangle x1="-0.0160625" y1="-1.5969125" x2="0.02249375" y2="-1.5904875" layer="200"/>
<rectangle x1="0.594425" y1="-1.5969125" x2="0.62013125" y2="-1.5904875" layer="200"/>
<rectangle x1="0.76150625" y1="-1.5969125" x2="0.97999375" y2="-1.5904875" layer="200"/>
<rectangle x1="1.0571125" y1="-1.5969125" x2="1.15993125" y2="-1.5904875" layer="200"/>
<rectangle x1="1.28845625" y1="-1.5969125" x2="1.3398625" y2="-1.5904875" layer="200"/>
<rectangle x1="1.436259375" y1="-1.5969125" x2="1.988909375" y2="-1.5904875" layer="200"/>
<rectangle x1="-2.271659375" y1="-1.590484375" x2="-2.233103125" y2="-1.584059375" layer="200"/>
<rectangle x1="-2.12385625" y1="-1.590484375" x2="-1.38484375" y2="-1.584059375" layer="200"/>
<rectangle x1="-1.3462875" y1="-1.590484375" x2="-1.29488125" y2="-1.584059375" layer="200"/>
<rectangle x1="-1.166353125" y1="-1.590484375" x2="-1.095665625" y2="-1.584059375" layer="200"/>
<rectangle x1="-1.005696875" y1="-1.590484375" x2="-0.954290625" y2="-1.584059375" layer="200"/>
<rectangle x1="-0.65225625" y1="-1.590484375" x2="-0.60085" y2="-1.584059375" layer="200"/>
<rectangle x1="-0.57514375" y1="-1.590484375" x2="-0.4080625" y2="-1.584059375" layer="200"/>
<rectangle x1="-0.0096375" y1="-1.590484375" x2="0.02249375" y2="-1.584059375" layer="200"/>
<rectangle x1="1.069965625" y1="-1.590484375" x2="1.147078125" y2="-1.584059375" layer="200"/>
<rectangle x1="1.449109375" y1="-1.590484375" x2="1.982484375" y2="-1.584059375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.584059375" x2="-2.51585625" y2="-1.577634375" layer="200"/>
<rectangle x1="-2.265234375" y1="-1.584059375" x2="-2.239528125" y2="-1.577634375" layer="200"/>
<rectangle x1="-2.091725" y1="-1.584059375" x2="-1.3977" y2="-1.577634375" layer="200"/>
<rectangle x1="-1.1535" y1="-1.584059375" x2="-1.09566875" y2="-1.577634375" layer="200"/>
<rectangle x1="-0.999271875" y1="-1.584059375" x2="-0.967140625" y2="-1.577634375" layer="200"/>
<rectangle x1="-0.459471875" y1="-1.584059375" x2="-0.414490625" y2="-1.577634375" layer="200"/>
<rectangle x1="-0.0096375" y1="-1.584059375" x2="0.02249375" y2="-1.577634375" layer="200"/>
<rectangle x1="1.082815625" y1="-1.584059375" x2="1.140653125" y2="-1.577634375" layer="200"/>
<rectangle x1="1.48766875" y1="-1.584059375" x2="1.97605625" y2="-1.577634375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.577634375" x2="-2.50943125" y2="-1.571209375" layer="200"/>
<rectangle x1="-2.008184375" y1="-1.577634375" x2="-1.410553125" y2="-1.571209375" layer="200"/>
<rectangle x1="-1.147075" y1="-1.577634375" x2="-1.10209375" y2="-1.571209375" layer="200"/>
<rectangle x1="-0.992846875" y1="-1.577634375" x2="-0.979996875" y2="-1.571209375" layer="200"/>
<rectangle x1="-0.0096375" y1="-1.577634375" x2="0.02249375" y2="-1.571209375" layer="200"/>
<rectangle x1="1.082815625" y1="-1.577634375" x2="1.134221875" y2="-1.571209375" layer="200"/>
<rectangle x1="1.513371875" y1="-1.577634375" x2="1.969628125" y2="-1.571209375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.57120625" x2="-2.50943125" y2="-1.56478125" layer="200"/>
<rectangle x1="-2.008184375" y1="-1.57120625" x2="-1.519796875" y2="-1.56478125" layer="200"/>
<rectangle x1="-1.468384375" y1="-1.57120625" x2="-1.416978125" y2="-1.56478125" layer="200"/>
<rectangle x1="1.08924375" y1="-1.57120625" x2="1.134225" y2="-1.56478125" layer="200"/>
<rectangle x1="1.526225" y1="-1.57120625" x2="1.96963125" y2="-1.56478125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.56478125" x2="-2.50300625" y2="-1.55835625" layer="200"/>
<rectangle x1="-1.995334375" y1="-1.56478125" x2="-1.532646875" y2="-1.55835625" layer="200"/>
<rectangle x1="-1.45553125" y1="-1.56478125" x2="-1.42983125" y2="-1.55835625" layer="200"/>
<rectangle x1="1.09566875" y1="-1.56478125" x2="1.134225" y2="-1.55835625" layer="200"/>
<rectangle x1="1.53265" y1="-1.56478125" x2="1.96320625" y2="-1.55835625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.558353125" x2="-2.50300625" y2="-1.551928125" layer="200"/>
<rectangle x1="-1.98248125" y1="-1.558353125" x2="-1.539075" y2="-1.551928125" layer="200"/>
<rectangle x1="1.108521875" y1="-1.558353125" x2="1.121371875" y2="-1.551928125" layer="200"/>
<rectangle x1="1.545503125" y1="-1.558353125" x2="1.956778125" y2="-1.551928125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.551928125" x2="-2.50300625" y2="-1.545503125" layer="200"/>
<rectangle x1="-1.963203125" y1="-1.551928125" x2="-1.545503125" y2="-1.545503125" layer="200"/>
<rectangle x1="1.55835625" y1="-1.551928125" x2="1.95035" y2="-1.545503125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.545503125" x2="-2.50300625" y2="-1.539078125" layer="200"/>
<rectangle x1="-1.956775" y1="-1.545503125" x2="-1.5455" y2="-1.539078125" layer="200"/>
<rectangle x1="1.571209375" y1="-1.545503125" x2="1.950353125" y2="-1.539078125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.539075" x2="-2.50300625" y2="-1.53265" layer="200"/>
<rectangle x1="-1.956775" y1="-1.539075" x2="-1.5455" y2="-1.53265" layer="200"/>
<rectangle x1="1.577634375" y1="-1.539075" x2="1.950353125" y2="-1.53265" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.53265" x2="-2.50300625" y2="-1.526225" layer="200"/>
<rectangle x1="-1.956775" y1="-1.53265" x2="-1.5455" y2="-1.526225" layer="200"/>
<rectangle x1="1.584059375" y1="-1.53265" x2="1.950353125" y2="-1.526225" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.526221875" x2="-2.50300625" y2="-1.519796875" layer="200"/>
<rectangle x1="-1.95035" y1="-1.526221875" x2="-1.539075" y2="-1.519796875" layer="200"/>
<rectangle x1="1.5904875" y1="-1.526221875" x2="1.95035" y2="-1.519796875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.519796875" x2="-2.50300625" y2="-1.513371875" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.519796875" x2="-1.539071875" y2="-1.513371875" layer="200"/>
<rectangle x1="1.5904875" y1="-1.519796875" x2="1.95035" y2="-1.513371875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.513371875" x2="-2.50300625" y2="-1.506946875" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.513371875" x2="-1.539071875" y2="-1.506946875" layer="200"/>
<rectangle x1="1.5969125" y1="-1.513371875" x2="1.95678125" y2="-1.506946875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.50694375" x2="-2.50300625" y2="-1.50051875" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.50694375" x2="-1.539071875" y2="-1.50051875" layer="200"/>
<rectangle x1="1.5904875" y1="-1.50694375" x2="1.95678125" y2="-1.50051875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.50051875" x2="-2.50300625" y2="-1.49409375" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.50051875" x2="-1.539071875" y2="-1.49409375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.50051875" x2="1.95678125" y2="-1.49409375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.49409375" x2="-2.50300625" y2="-1.48766875" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.49409375" x2="-1.539071875" y2="-1.48766875" layer="200"/>
<rectangle x1="1.584059375" y1="-1.49409375" x2="1.963203125" y2="-1.48766875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.487665625" x2="-2.50300625" y2="-1.481240625" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.487665625" x2="-1.539071875" y2="-1.481240625" layer="200"/>
<rectangle x1="1.584059375" y1="-1.487665625" x2="1.706159375" y2="-1.481240625" layer="200"/>
<rectangle x1="1.719009375" y1="-1.487665625" x2="1.963203125" y2="-1.481240625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.481240625" x2="-2.50300625" y2="-1.474815625" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.481240625" x2="-1.539071875" y2="-1.474815625" layer="200"/>
<rectangle x1="1.577634375" y1="-1.481240625" x2="1.693303125" y2="-1.474815625" layer="200"/>
<rectangle x1="1.7254375" y1="-1.481240625" x2="1.96320625" y2="-1.474815625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.4748125" x2="-2.50943125" y2="-1.4683875" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.4748125" x2="-1.539071875" y2="-1.4683875" layer="200"/>
<rectangle x1="1.577634375" y1="-1.4748125" x2="1.693303125" y2="-1.4683875" layer="200"/>
<rectangle x1="1.7318625" y1="-1.4748125" x2="1.96320625" y2="-1.4683875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.4683875" x2="-2.51585625" y2="-1.4619625" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.4683875" x2="-1.539071875" y2="-1.4619625" layer="200"/>
<rectangle x1="1.577634375" y1="-1.4683875" x2="1.693303125" y2="-1.4619625" layer="200"/>
<rectangle x1="1.7318625" y1="-1.4683875" x2="1.96320625" y2="-1.4619625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.4619625" x2="-2.51585625" y2="-1.4555375" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.4619625" x2="-1.584059375" y2="-1.4555375" layer="200"/>
<rectangle x1="-1.564778125" y1="-1.4619625" x2="-1.539071875" y2="-1.4555375" layer="200"/>
<rectangle x1="1.577634375" y1="-1.4619625" x2="1.699728125" y2="-1.4555375" layer="200"/>
<rectangle x1="1.7254375" y1="-1.4619625" x2="1.96320625" y2="-1.4555375" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.455534375" x2="-1.584059375" y2="-1.449109375" layer="200"/>
<rectangle x1="1.577634375" y1="-1.455534375" x2="1.963203125" y2="-1.449109375" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.449109375" x2="-1.584059375" y2="-1.442684375" layer="200"/>
<rectangle x1="1.577634375" y1="-1.449109375" x2="1.963203125" y2="-1.442684375" layer="200"/>
<rectangle x1="-1.931071875" y1="-1.44268125" x2="-1.584059375" y2="-1.43625625" layer="200"/>
<rectangle x1="1.577634375" y1="-1.44268125" x2="1.963203125" y2="-1.43625625" layer="200"/>
<rectangle x1="-1.931071875" y1="-1.43625625" x2="-1.584059375" y2="-1.42983125" layer="200"/>
<rectangle x1="1.584059375" y1="-1.43625625" x2="1.969628125" y2="-1.42983125" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.42983125" x2="-1.584059375" y2="-1.42340625" layer="200"/>
<rectangle x1="1.584059375" y1="-1.42983125" x2="1.976059375" y2="-1.42340625" layer="200"/>
<rectangle x1="-1.943921875" y1="-1.423403125" x2="-1.584059375" y2="-1.416978125" layer="200"/>
<rectangle x1="1.5904875" y1="-1.423403125" x2="1.98248125" y2="-1.416978125" layer="200"/>
<rectangle x1="-1.95035" y1="-1.416978125" x2="-1.58405625" y2="-1.410553125" layer="200"/>
<rectangle x1="1.5904875" y1="-1.416978125" x2="1.9953375" y2="-1.410553125" layer="200"/>
<rectangle x1="-1.95035" y1="-1.410553125" x2="-1.58405625" y2="-1.404128125" layer="200"/>
<rectangle x1="1.5904875" y1="-1.410553125" x2="2.0017625" y2="-1.404128125" layer="200"/>
<rectangle x1="-1.963203125" y1="-1.404125" x2="-1.590484375" y2="-1.3977" layer="200"/>
<rectangle x1="1.584059375" y1="-1.404125" x2="2.033890625" y2="-1.3977" layer="200"/>
<rectangle x1="2.43874375" y1="-1.404125" x2="2.46445" y2="-1.3977" layer="200"/>
<rectangle x1="-2.24595625" y1="-1.3977" x2="-2.22025" y2="-1.391275" layer="200"/>
<rectangle x1="-2.168840625" y1="-1.3977" x2="-2.117434375" y2="-1.391275" layer="200"/>
<rectangle x1="-2.05316875" y1="-1.3977" x2="-2.03389375" y2="-1.391275" layer="200"/>
<rectangle x1="-1.969628125" y1="-1.3977" x2="-1.590484375" y2="-1.391275" layer="200"/>
<rectangle x1="1.584059375" y1="-1.3977" x2="2.072453125" y2="-1.391275" layer="200"/>
<rectangle x1="2.15599375" y1="-1.3977" x2="2.200975" y2="-1.391275" layer="200"/>
<rectangle x1="2.310221875" y1="-1.3977" x2="2.348778125" y2="-1.391275" layer="200"/>
<rectangle x1="2.43231875" y1="-1.3977" x2="2.49015625" y2="-1.391275" layer="200"/>
<rectangle x1="-2.438740625" y1="-1.391271875" x2="-2.380909375" y2="-1.384846875" layer="200"/>
<rectangle x1="-2.278084375" y1="-1.391271875" x2="-2.091728125" y2="-1.384846875" layer="200"/>
<rectangle x1="-2.078875" y1="-1.391271875" x2="-2.0210375" y2="-1.384846875" layer="200"/>
<rectangle x1="-1.976053125" y1="-1.391271875" x2="-1.590484375" y2="-1.384846875" layer="200"/>
<rectangle x1="1.584059375" y1="-1.391271875" x2="2.091728125" y2="-1.384846875" layer="200"/>
<rectangle x1="2.1302875" y1="-1.391271875" x2="2.2716625" y2="-1.384846875" layer="200"/>
<rectangle x1="2.29094375" y1="-1.391271875" x2="2.36163125" y2="-1.384846875" layer="200"/>
<rectangle x1="2.42589375" y1="-1.391271875" x2="2.50300625" y2="-1.384846875" layer="200"/>
<rectangle x1="-2.45159375" y1="-1.384846875" x2="-2.36805625" y2="-1.378421875" layer="200"/>
<rectangle x1="-2.310215625" y1="-1.384846875" x2="-1.596909375" y2="-1.378421875" layer="200"/>
<rectangle x1="1.577634375" y1="-1.384846875" x2="2.374484375" y2="-1.378421875" layer="200"/>
<rectangle x1="2.413040625" y1="-1.384846875" x2="2.535134375" y2="-1.378421875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.378421875" x2="-2.51585625" y2="-1.371996875" layer="200"/>
<rectangle x1="-2.496575" y1="-1.378421875" x2="-2.361625" y2="-1.371996875" layer="200"/>
<rectangle x1="-2.32306875" y1="-1.378421875" x2="-1.5969125" y2="-1.371996875" layer="200"/>
<rectangle x1="1.571209375" y1="-1.378421875" x2="2.528709375" y2="-1.371996875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.37199375" x2="-1.5969125" y2="-1.36556875" layer="200"/>
<rectangle x1="1.571209375" y1="-1.37199375" x2="2.528709375" y2="-1.36556875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.36556875" x2="-1.5969125" y2="-1.35914375" layer="200"/>
<rectangle x1="1.56478125" y1="-1.36556875" x2="2.52228125" y2="-1.35914375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.359140625" x2="-1.5969125" y2="-1.352715625" layer="200"/>
<rectangle x1="1.571209375" y1="-1.359140625" x2="2.522284375" y2="-1.352715625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.352715625" x2="-1.5969125" y2="-1.346290625" layer="200"/>
<rectangle x1="1.571209375" y1="-1.352715625" x2="2.515859375" y2="-1.346290625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.346290625" x2="-1.5969125" y2="-1.339865625" layer="200"/>
<rectangle x1="1.571209375" y1="-1.346290625" x2="2.515859375" y2="-1.339865625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.3398625" x2="-1.5969125" y2="-1.3334375" layer="200"/>
<rectangle x1="1.577634375" y1="-1.3398625" x2="2.515859375" y2="-1.3334375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.3334375" x2="-1.5969125" y2="-1.3270125" layer="200"/>
<rectangle x1="1.584059375" y1="-1.3334375" x2="2.515859375" y2="-1.3270125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.3270125" x2="-1.59048125" y2="-1.3205875" layer="200"/>
<rectangle x1="1.584059375" y1="-1.3270125" x2="2.515859375" y2="-1.3205875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.320584375" x2="-1.58405625" y2="-1.314159375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.320584375" x2="2.51585625" y2="-1.314159375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.314159375" x2="-1.57120625" y2="-1.307734375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.314159375" x2="2.51585625" y2="-1.307734375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.30773125" x2="-1.56478125" y2="-1.30130625" layer="200"/>
<rectangle x1="-1.5455" y1="-1.30773125" x2="-1.539075" y2="-1.30130625" layer="200"/>
<rectangle x1="1.5904875" y1="-1.30773125" x2="2.51585625" y2="-1.30130625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.30130625" x2="-1.539075" y2="-1.29488125" layer="200"/>
<rectangle x1="1.584059375" y1="-1.30130625" x2="2.515859375" y2="-1.29488125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.29488125" x2="-1.539075" y2="-1.28845625" layer="200"/>
<rectangle x1="1.584059375" y1="-1.29488125" x2="2.515859375" y2="-1.28845625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.288453125" x2="-1.539075" y2="-1.282028125" layer="200"/>
<rectangle x1="1.584059375" y1="-1.288453125" x2="2.515859375" y2="-1.282028125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.282028125" x2="-1.58405625" y2="-1.275603125" layer="200"/>
<rectangle x1="1.577634375" y1="-1.282028125" x2="2.515859375" y2="-1.275603125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.2756" x2="-1.5969125" y2="-1.269175" layer="200"/>
<rectangle x1="1.577634375" y1="-1.2756" x2="2.515859375" y2="-1.269175" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.269175" x2="-1.5969125" y2="-1.26275" layer="200"/>
<rectangle x1="1.577634375" y1="-1.269175" x2="2.515859375" y2="-1.26275" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.26275" x2="-1.6033375" y2="-1.256325" layer="200"/>
<rectangle x1="1.584059375" y1="-1.26275" x2="2.509434375" y2="-1.256325" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.256321875" x2="-1.6033375" y2="-1.249896875" layer="200"/>
<rectangle x1="1.584059375" y1="-1.256321875" x2="2.509434375" y2="-1.249896875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.249896875" x2="-1.6033375" y2="-1.243471875" layer="200"/>
<rectangle x1="1.584059375" y1="-1.249896875" x2="2.509434375" y2="-1.243471875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.243471875" x2="-1.5969125" y2="-1.237046875" layer="200"/>
<rectangle x1="1.5904875" y1="-1.243471875" x2="2.50943125" y2="-1.237046875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.23704375" x2="-1.5969125" y2="-1.23061875" layer="200"/>
<rectangle x1="1.5904875" y1="-1.23704375" x2="2.50943125" y2="-1.23061875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.23061875" x2="-1.5969125" y2="-1.22419375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.23061875" x2="2.50943125" y2="-1.22419375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.224190625" x2="-1.5969125" y2="-1.217765625" layer="200"/>
<rectangle x1="1.5904875" y1="-1.224190625" x2="2.50943125" y2="-1.217765625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.217765625" x2="-1.59048125" y2="-1.211340625" layer="200"/>
<rectangle x1="1.5904875" y1="-1.217765625" x2="2.50943125" y2="-1.211340625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.211340625" x2="-1.59048125" y2="-1.204915625" layer="200"/>
<rectangle x1="1.5904875" y1="-1.211340625" x2="2.51585625" y2="-1.204915625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.2049125" x2="-1.59048125" y2="-1.1984875" layer="200"/>
<rectangle x1="1.5969125" y1="-1.2049125" x2="2.51585625" y2="-1.1984875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.1984875" x2="-1.59048125" y2="-1.1920625" layer="200"/>
<rectangle x1="1.5969125" y1="-1.1984875" x2="2.51585625" y2="-1.1920625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.1920625" x2="-1.59048125" y2="-1.1856375" layer="200"/>
<rectangle x1="1.5969125" y1="-1.1920625" x2="2.51585625" y2="-1.1856375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.185634375" x2="-1.5969125" y2="-1.179209375" layer="200"/>
<rectangle x1="1.5969125" y1="-1.185634375" x2="2.51585625" y2="-1.179209375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.179209375" x2="-1.5969125" y2="-1.172784375" layer="200"/>
<rectangle x1="1.603340625" y1="-1.179209375" x2="2.515859375" y2="-1.172784375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.17278125" x2="-1.5969125" y2="-1.16635625" layer="200"/>
<rectangle x1="1.603340625" y1="-1.17278125" x2="2.515859375" y2="-1.16635625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.16635625" x2="-1.5969125" y2="-1.15993125" layer="200"/>
<rectangle x1="1.603340625" y1="-1.16635625" x2="2.515859375" y2="-1.15993125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.15993125" x2="-2.496575" y2="-1.15350625" layer="200"/>
<rectangle x1="-2.470871875" y1="-1.15993125" x2="-1.596909375" y2="-1.15350625" layer="200"/>
<rectangle x1="1.603340625" y1="-1.15993125" x2="2.515859375" y2="-1.15350625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.153503125" x2="-2.496575" y2="-1.147078125" layer="200"/>
<rectangle x1="-2.45801875" y1="-1.153503125" x2="-1.5969125" y2="-1.147078125" layer="200"/>
<rectangle x1="1.603340625" y1="-1.153503125" x2="2.515859375" y2="-1.147078125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.147078125" x2="-2.50300625" y2="-1.140653125" layer="200"/>
<rectangle x1="-2.438740625" y1="-1.147078125" x2="-1.596909375" y2="-1.140653125" layer="200"/>
<rectangle x1="1.603340625" y1="-1.147078125" x2="2.515859375" y2="-1.140653125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.14065" x2="-2.50300625" y2="-1.134225" layer="200"/>
<rectangle x1="-2.4258875" y1="-1.14065" x2="-1.5969125" y2="-1.134225" layer="200"/>
<rectangle x1="1.603340625" y1="-1.14065" x2="2.085303125" y2="-1.134225" layer="200"/>
<rectangle x1="2.16884375" y1="-1.14065" x2="2.2780875" y2="-1.134225" layer="200"/>
<rectangle x1="2.342353125" y1="-1.14065" x2="2.387334375" y2="-1.134225" layer="200"/>
<rectangle x1="2.419465625" y1="-1.14065" x2="2.515859375" y2="-1.134225" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.134225" x2="-2.50300625" y2="-1.1278" layer="200"/>
<rectangle x1="-2.413034375" y1="-1.134225" x2="-1.590484375" y2="-1.1278" layer="200"/>
<rectangle x1="1.603340625" y1="-1.134225" x2="2.066021875" y2="-1.1278" layer="200"/>
<rectangle x1="2.43231875" y1="-1.134225" x2="2.51585625" y2="-1.1278" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.1278" x2="-2.50300625" y2="-1.121375" layer="200"/>
<rectangle x1="-2.406609375" y1="-1.1278" x2="-2.265234375" y2="-1.121375" layer="200"/>
<rectangle x1="-2.226675" y1="-1.1278" x2="-2.1495625" y2="-1.121375" layer="200"/>
<rectangle x1="-2.11743125" y1="-1.1278" x2="-1.59048125" y2="-1.121375" layer="200"/>
<rectangle x1="1.603340625" y1="-1.1278" x2="2.046746875" y2="-1.121375" layer="200"/>
<rectangle x1="2.43874375" y1="-1.1278" x2="2.51585625" y2="-1.121375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.121371875" x2="-2.50300625" y2="-1.114946875" layer="200"/>
<rectangle x1="-2.38733125" y1="-1.121371875" x2="-2.2780875" y2="-1.114946875" layer="200"/>
<rectangle x1="-2.207396875" y1="-1.121371875" x2="-2.162415625" y2="-1.114946875" layer="200"/>
<rectangle x1="-2.098153125" y1="-1.121371875" x2="-1.590484375" y2="-1.114946875" layer="200"/>
<rectangle x1="1.5969125" y1="-1.121371875" x2="2.03389375" y2="-1.114946875" layer="200"/>
<rectangle x1="2.451596875" y1="-1.121371875" x2="2.515859375" y2="-1.114946875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.114946875" x2="-2.50300625" y2="-1.108521875" layer="200"/>
<rectangle x1="-2.38090625" y1="-1.114946875" x2="-2.2845125" y2="-1.108521875" layer="200"/>
<rectangle x1="-2.19454375" y1="-1.114946875" x2="-2.17526875" y2="-1.108521875" layer="200"/>
<rectangle x1="-2.098153125" y1="-1.114946875" x2="-1.590484375" y2="-1.108521875" layer="200"/>
<rectangle x1="1.5969125" y1="-1.114946875" x2="2.02746875" y2="-1.108521875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.108521875" x2="-2.50300625" y2="-1.102096875" layer="200"/>
<rectangle x1="-2.3552" y1="-1.108521875" x2="-2.2909375" y2="-1.102096875" layer="200"/>
<rectangle x1="-2.091725" y1="-1.108521875" x2="-1.59048125" y2="-1.102096875" layer="200"/>
<rectangle x1="1.5969125" y1="-1.108521875" x2="2.0081875" y2="-1.102096875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.10209375" x2="-2.50300625" y2="-1.09566875" layer="200"/>
<rectangle x1="-2.3552" y1="-1.10209375" x2="-2.2909375" y2="-1.09566875" layer="200"/>
<rectangle x1="-2.0853" y1="-1.10209375" x2="-2.07245" y2="-1.09566875" layer="200"/>
<rectangle x1="-2.0210375" y1="-1.10209375" x2="-1.5969125" y2="-1.09566875" layer="200"/>
<rectangle x1="1.5969125" y1="-1.10209375" x2="1.9953375" y2="-1.09566875" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.09566875" x2="-2.50300625" y2="-1.08924375" layer="200"/>
<rectangle x1="-2.3552" y1="-1.09566875" x2="-2.2845125" y2="-1.08924375" layer="200"/>
<rectangle x1="-2.0146125" y1="-1.09566875" x2="-1.5969125" y2="-1.08924375" layer="200"/>
<rectangle x1="1.5969125" y1="-1.09566875" x2="1.9889125" y2="-1.08924375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.089240625" x2="-2.50300625" y2="-1.082815625" layer="200"/>
<rectangle x1="-2.001759375" y1="-1.089240625" x2="-1.596909375" y2="-1.082815625" layer="200"/>
<rectangle x1="1.5969125" y1="-1.089240625" x2="1.97605625" y2="-1.082815625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.082815625" x2="-2.50943125" y2="-1.076390625" layer="200"/>
<rectangle x1="-2.001759375" y1="-1.082815625" x2="-1.596909375" y2="-1.076390625" layer="200"/>
<rectangle x1="1.5969125" y1="-1.082815625" x2="1.97605625" y2="-1.076390625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.076390625" x2="-2.50943125" y2="-1.069965625" layer="200"/>
<rectangle x1="-1.995334375" y1="-1.076390625" x2="-1.596909375" y2="-1.069965625" layer="200"/>
<rectangle x1="1.5969125" y1="-1.076390625" x2="1.96963125" y2="-1.069965625" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.0699625" x2="-2.50943125" y2="-1.0635375" layer="200"/>
<rectangle x1="-1.98890625" y1="-1.0699625" x2="-1.5969125" y2="-1.0635375" layer="200"/>
<rectangle x1="1.5969125" y1="-1.0699625" x2="1.96963125" y2="-1.0635375" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.0635375" x2="-2.50943125" y2="-1.0571125" layer="200"/>
<rectangle x1="-1.98890625" y1="-1.0635375" x2="-1.5969125" y2="-1.0571125" layer="200"/>
<rectangle x1="1.5904875" y1="-1.0635375" x2="1.96320625" y2="-1.0571125" layer="200"/>
<rectangle x1="-2.52228125" y1="-1.057109375" x2="-2.51585625" y2="-1.050684375" layer="200"/>
<rectangle x1="-1.976053125" y1="-1.057109375" x2="-1.596909375" y2="-1.050684375" layer="200"/>
<rectangle x1="1.5904875" y1="-1.057109375" x2="1.96320625" y2="-1.050684375" layer="200"/>
<rectangle x1="-1.963203125" y1="-1.050684375" x2="-1.596909375" y2="-1.044259375" layer="200"/>
<rectangle x1="1.584059375" y1="-1.050684375" x2="1.956778125" y2="-1.044259375" layer="200"/>
<rectangle x1="-1.95035" y1="-1.044259375" x2="-1.5969125" y2="-1.037834375" layer="200"/>
<rectangle x1="1.584059375" y1="-1.044259375" x2="1.963203125" y2="-1.037834375" layer="200"/>
<rectangle x1="-1.95035" y1="-1.03783125" x2="-1.5969125" y2="-1.03140625" layer="200"/>
<rectangle x1="1.577634375" y1="-1.03783125" x2="1.969628125" y2="-1.03140625" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.03140625" x2="-1.596909375" y2="-1.02498125" layer="200"/>
<rectangle x1="1.577634375" y1="-1.03140625" x2="1.969628125" y2="-1.02498125" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.02498125" x2="-1.596909375" y2="-1.01855625" layer="200"/>
<rectangle x1="1.577634375" y1="-1.02498125" x2="1.969628125" y2="-1.01855625" layer="200"/>
<rectangle x1="-1.937496875" y1="-1.018553125" x2="-1.590484375" y2="-1.012128125" layer="200"/>
<rectangle x1="1.577634375" y1="-1.018553125" x2="1.969628125" y2="-1.012128125" layer="200"/>
<rectangle x1="-1.931071875" y1="-1.012128125" x2="-1.584059375" y2="-1.005703125" layer="200"/>
<rectangle x1="1.584059375" y1="-1.012128125" x2="1.969628125" y2="-1.005703125" layer="200"/>
<rectangle x1="-1.931071875" y1="-1.0057" x2="-1.577634375" y2="-0.999275" layer="200"/>
<rectangle x1="1.584059375" y1="-1.0057" x2="1.969628125" y2="-0.999275" layer="200"/>
<rectangle x1="-1.931071875" y1="-0.999275" x2="-1.571203125" y2="-0.99285" layer="200"/>
<rectangle x1="1.5904875" y1="-0.999275" x2="1.96963125" y2="-0.99285" layer="200"/>
<rectangle x1="2.5287125" y1="-0.999275" x2="2.5351375" y2="-0.99285" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.99285" x2="-2.51585625" y2="-0.986425" layer="200"/>
<rectangle x1="-1.92464375" y1="-0.99285" x2="-1.56478125" y2="-0.986425" layer="200"/>
<rectangle x1="1.5969125" y1="-0.99285" x2="1.96963125" y2="-0.986425" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.986421875" x2="-2.51585625" y2="-0.979996875" layer="200"/>
<rectangle x1="-1.92464375" y1="-0.986421875" x2="-1.56478125" y2="-0.979996875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.986421875" x2="1.96320625" y2="-0.979996875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.979996875" x2="-2.51585625" y2="-0.973571875" layer="200"/>
<rectangle x1="-1.931071875" y1="-0.979996875" x2="-1.564778125" y2="-0.973571875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.979996875" x2="1.963203125" y2="-0.973571875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.97356875" x2="-2.51585625" y2="-0.96714375" layer="200"/>
<rectangle x1="-1.931071875" y1="-0.97356875" x2="-1.564778125" y2="-0.96714375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.97356875" x2="1.963203125" y2="-0.96714375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.96714375" x2="-2.51585625" y2="-0.96071875" layer="200"/>
<rectangle x1="-1.931071875" y1="-0.96714375" x2="-1.571203125" y2="-0.96071875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.96714375" x2="1.963203125" y2="-0.96071875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.96071875" x2="-2.51585625" y2="-0.95429375" layer="200"/>
<rectangle x1="-1.931071875" y1="-0.96071875" x2="-1.577634375" y2="-0.95429375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.96071875" x2="1.963203125" y2="-0.95429375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.954290625" x2="-2.51585625" y2="-0.947865625" layer="200"/>
<rectangle x1="-1.937496875" y1="-0.954290625" x2="-1.577634375" y2="-0.947865625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.954290625" x2="1.96320625" y2="-0.947865625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.947865625" x2="-2.51585625" y2="-0.941440625" layer="200"/>
<rectangle x1="-1.937496875" y1="-0.947865625" x2="-1.590484375" y2="-0.941440625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.947865625" x2="1.96320625" y2="-0.941440625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.941440625" x2="-2.51585625" y2="-0.935015625" layer="200"/>
<rectangle x1="-1.937496875" y1="-0.941440625" x2="-1.596909375" y2="-0.935015625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.941440625" x2="1.96963125" y2="-0.935015625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.9350125" x2="-2.51585625" y2="-0.9285875" layer="200"/>
<rectangle x1="-1.95035" y1="-0.9350125" x2="-1.5969125" y2="-0.9285875" layer="200"/>
<rectangle x1="1.5904875" y1="-0.9350125" x2="1.97605625" y2="-0.9285875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.9285875" x2="-2.51585625" y2="-0.9221625" layer="200"/>
<rectangle x1="-1.95035" y1="-0.9285875" x2="-1.5969125" y2="-0.9221625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.9285875" x2="1.75756875" y2="-0.9221625" layer="200"/>
<rectangle x1="1.776846875" y1="-0.9285875" x2="1.982484375" y2="-0.9221625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.922159375" x2="-2.51585625" y2="-0.915734375" layer="200"/>
<rectangle x1="-1.969628125" y1="-0.922159375" x2="-1.596909375" y2="-0.915734375" layer="200"/>
<rectangle x1="1.584059375" y1="-0.922159375" x2="1.751140625" y2="-0.915734375" layer="200"/>
<rectangle x1="1.7897" y1="-0.922159375" x2="1.9889125" y2="-0.915734375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.915734375" x2="-2.51585625" y2="-0.909309375" layer="200"/>
<rectangle x1="-1.98248125" y1="-0.915734375" x2="-1.5969125" y2="-0.909309375" layer="200"/>
<rectangle x1="1.5904875" y1="-0.915734375" x2="1.7511375" y2="-0.909309375" layer="200"/>
<rectangle x1="1.80255" y1="-0.915734375" x2="1.9953375" y2="-0.909309375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.909309375" x2="-2.51585625" y2="-0.902884375" layer="200"/>
<rectangle x1="-1.98890625" y1="-0.909309375" x2="-1.5969125" y2="-0.902884375" layer="200"/>
<rectangle x1="1.5904875" y1="-0.909309375" x2="1.7511375" y2="-0.902884375" layer="200"/>
<rectangle x1="1.808978125" y1="-0.909309375" x2="2.001759375" y2="-0.902884375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.90288125" x2="-2.51585625" y2="-0.89645625" layer="200"/>
<rectangle x1="-2.008184375" y1="-0.90288125" x2="-1.596909375" y2="-0.89645625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.90288125" x2="1.7511375" y2="-0.89645625" layer="200"/>
<rectangle x1="1.808978125" y1="-0.90288125" x2="2.021040625" y2="-0.89645625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.89645625" x2="-2.51585625" y2="-0.89003125" layer="200"/>
<rectangle x1="-2.39375625" y1="-0.89645625" x2="-2.34235" y2="-0.89003125" layer="200"/>
<rectangle x1="-2.18169375" y1="-0.89645625" x2="-1.5969125" y2="-0.89003125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.89645625" x2="1.75756875" y2="-0.89003125" layer="200"/>
<rectangle x1="1.80255" y1="-0.89645625" x2="2.03389375" y2="-0.89003125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.890028125" x2="-2.51585625" y2="-0.883603125" layer="200"/>
<rectangle x1="-2.400184375" y1="-0.890028125" x2="-2.329496875" y2="-0.883603125" layer="200"/>
<rectangle x1="-2.2845125" y1="-0.890028125" x2="-2.2716625" y2="-0.883603125" layer="200"/>
<rectangle x1="-2.19454375" y1="-0.890028125" x2="-1.5969125" y2="-0.883603125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.890028125" x2="1.77041875" y2="-0.883603125" layer="200"/>
<rectangle x1="1.796125" y1="-0.890028125" x2="2.04031875" y2="-0.883603125" layer="200"/>
<rectangle x1="2.36805625" y1="-0.890028125" x2="2.3937625" y2="-0.883603125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.883603125" x2="-2.51585625" y2="-0.877178125" layer="200"/>
<rectangle x1="-2.445165625" y1="-0.883603125" x2="-1.603334375" y2="-0.877178125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.883603125" x2="2.07245" y2="-0.877178125" layer="200"/>
<rectangle x1="2.111009375" y1="-0.883603125" x2="2.432315625" y2="-0.877178125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.877178125" x2="-2.51585625" y2="-0.870753125" layer="200"/>
<rectangle x1="-2.45159375" y1="-0.877178125" x2="-1.6033375" y2="-0.870753125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.877178125" x2="2.483725" y2="-0.870753125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.87075" x2="-2.51585625" y2="-0.864325" layer="200"/>
<rectangle x1="-2.45801875" y1="-0.87075" x2="-1.6033375" y2="-0.864325" layer="200"/>
<rectangle x1="1.5904875" y1="-0.87075" x2="2.50300625" y2="-0.864325" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.864325" x2="-2.51585625" y2="-0.8579" layer="200"/>
<rectangle x1="-2.470871875" y1="-0.864325" x2="-1.609759375" y2="-0.8579" layer="200"/>
<rectangle x1="1.5904875" y1="-0.864325" x2="2.51585625" y2="-0.8579" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.8579" x2="-2.50943125" y2="-0.851475" layer="200"/>
<rectangle x1="-2.49015" y1="-0.8579" x2="-1.6097625" y2="-0.851475" layer="200"/>
<rectangle x1="1.5904875" y1="-0.8579" x2="2.51585625" y2="-0.851475" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.851471875" x2="-1.6161875" y2="-0.845046875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.851471875" x2="2.51585625" y2="-0.845046875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.845046875" x2="-1.6161875" y2="-0.838621875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.845046875" x2="2.52228125" y2="-0.838621875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.83861875" x2="-1.6161875" y2="-0.83219375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.83861875" x2="2.51585625" y2="-0.83219375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.83219375" x2="-1.6161875" y2="-0.82576875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.83219375" x2="2.515859375" y2="-0.82576875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.82576875" x2="-1.6161875" y2="-0.81934375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.82576875" x2="2.515859375" y2="-0.81934375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.819340625" x2="-1.6161875" y2="-0.812915625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.819340625" x2="2.515859375" y2="-0.812915625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.812915625" x2="-1.6097625" y2="-0.806490625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.812915625" x2="2.515859375" y2="-0.806490625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.8064875" x2="-1.6097625" y2="-0.8000625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.8064875" x2="2.515859375" y2="-0.8000625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.8000625" x2="-1.6033375" y2="-0.7936375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.8000625" x2="2.51585625" y2="-0.7936375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.7936375" x2="-1.6033375" y2="-0.7872125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.7936375" x2="2.51585625" y2="-0.7872125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.787209375" x2="-1.6033375" y2="-0.780784375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.787209375" x2="1.80255" y2="-0.780784375" layer="200"/>
<rectangle x1="1.815403125" y1="-0.787209375" x2="2.515859375" y2="-0.780784375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.780784375" x2="-1.6033375" y2="-0.774359375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.780784375" x2="1.68688125" y2="-0.774359375" layer="200"/>
<rectangle x1="1.69973125" y1="-0.780784375" x2="1.80255" y2="-0.774359375" layer="200"/>
<rectangle x1="1.815403125" y1="-0.780784375" x2="2.515859375" y2="-0.774359375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.774359375" x2="-1.5969125" y2="-0.767934375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.774359375" x2="1.674025" y2="-0.767934375" layer="200"/>
<rectangle x1="1.69973125" y1="-0.774359375" x2="1.80255" y2="-0.767934375" layer="200"/>
<rectangle x1="1.815403125" y1="-0.774359375" x2="2.515859375" y2="-0.767934375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.76793125" x2="-1.5969125" y2="-0.76150625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.76793125" x2="1.68045" y2="-0.76150625" layer="200"/>
<rectangle x1="1.69973125" y1="-0.76793125" x2="2.51585625" y2="-0.76150625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.76150625" x2="-1.5969125" y2="-0.75508125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.76150625" x2="2.51585625" y2="-0.75508125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.755078125" x2="-1.5969125" y2="-0.748653125" layer="200"/>
<rectangle x1="1.584059375" y1="-0.755078125" x2="2.515859375" y2="-0.748653125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.748653125" x2="-1.5969125" y2="-0.742228125" layer="200"/>
<rectangle x1="1.584059375" y1="-0.748653125" x2="2.515859375" y2="-0.742228125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.742228125" x2="-1.5969125" y2="-0.735803125" layer="200"/>
<rectangle x1="1.577634375" y1="-0.742228125" x2="2.515859375" y2="-0.735803125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.7358" x2="-1.5969125" y2="-0.729375" layer="200"/>
<rectangle x1="1.577634375" y1="-0.7358" x2="2.509434375" y2="-0.729375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.729375" x2="-1.5969125" y2="-0.72295" layer="200"/>
<rectangle x1="1.577634375" y1="-0.729375" x2="2.509434375" y2="-0.72295" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.722946875" x2="-1.5969125" y2="-0.716521875" layer="200"/>
<rectangle x1="1.577634375" y1="-0.722946875" x2="2.509434375" y2="-0.716521875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.716521875" x2="-1.5969125" y2="-0.710096875" layer="200"/>
<rectangle x1="1.577634375" y1="-0.716521875" x2="2.509434375" y2="-0.710096875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.710096875" x2="-1.5969125" y2="-0.703671875" layer="200"/>
<rectangle x1="1.577634375" y1="-0.710096875" x2="2.509434375" y2="-0.703671875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.70366875" x2="-1.6033375" y2="-0.69724375" layer="200"/>
<rectangle x1="1.577634375" y1="-0.70366875" x2="2.509434375" y2="-0.69724375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.69724375" x2="-1.6033375" y2="-0.69081875" layer="200"/>
<rectangle x1="1.577634375" y1="-0.69724375" x2="2.509434375" y2="-0.69081875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.69081875" x2="-1.6033375" y2="-0.68439375" layer="200"/>
<rectangle x1="1.577634375" y1="-0.69081875" x2="2.509434375" y2="-0.68439375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.684390625" x2="-1.6033375" y2="-0.677965625" layer="200"/>
<rectangle x1="1.584059375" y1="-0.684390625" x2="2.509434375" y2="-0.677965625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.677965625" x2="-1.6033375" y2="-0.671540625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.677965625" x2="1.6676" y2="-0.671540625" layer="200"/>
<rectangle x1="1.680453125" y1="-0.677965625" x2="1.751140625" y2="-0.671540625" layer="200"/>
<rectangle x1="1.76399375" y1="-0.677965625" x2="2.51585625" y2="-0.671540625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.6715375" x2="-1.6033375" y2="-0.6651125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.6715375" x2="1.661175" y2="-0.6651125" layer="200"/>
<rectangle x1="1.680453125" y1="-0.6715375" x2="1.751140625" y2="-0.6651125" layer="200"/>
<rectangle x1="1.76399375" y1="-0.6715375" x2="2.51585625" y2="-0.6651125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.6651125" x2="-2.4773" y2="-0.6586875" layer="200"/>
<rectangle x1="-2.445165625" y1="-0.6651125" x2="-1.603334375" y2="-0.6586875" layer="200"/>
<rectangle x1="1.5904875" y1="-0.6651125" x2="1.6676" y2="-0.6586875" layer="200"/>
<rectangle x1="1.680453125" y1="-0.6651125" x2="1.757565625" y2="-0.6586875" layer="200"/>
<rectangle x1="1.76399375" y1="-0.6651125" x2="2.52228125" y2="-0.6586875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.6586875" x2="-2.483725" y2="-0.6522625" layer="200"/>
<rectangle x1="-2.438740625" y1="-0.6586875" x2="-1.603334375" y2="-0.6522625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.6586875" x2="2.52228125" y2="-0.6522625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.652259375" x2="-2.483725" y2="-0.645834375" layer="200"/>
<rectangle x1="-2.432315625" y1="-0.652259375" x2="-1.609759375" y2="-0.645834375" layer="200"/>
<rectangle x1="1.5904875" y1="-0.652259375" x2="2.52228125" y2="-0.645834375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.645834375" x2="-2.483725" y2="-0.639409375" layer="200"/>
<rectangle x1="-2.4258875" y1="-0.645834375" x2="-1.6097625" y2="-0.639409375" layer="200"/>
<rectangle x1="1.5904875" y1="-0.645834375" x2="2.52228125" y2="-0.639409375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.63940625" x2="-2.483725" y2="-0.63298125" layer="200"/>
<rectangle x1="-2.4258875" y1="-0.63940625" x2="-1.6097625" y2="-0.63298125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.63940625" x2="2.51585625" y2="-0.63298125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.63298125" x2="-2.483725" y2="-0.62655625" layer="200"/>
<rectangle x1="-2.4194625" y1="-0.63298125" x2="-1.6097625" y2="-0.62655625" layer="200"/>
<rectangle x1="1.584059375" y1="-0.63298125" x2="2.483728125" y2="-0.62655625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.62655625" x2="-2.483725" y2="-0.62013125" layer="200"/>
<rectangle x1="-2.4194625" y1="-0.62655625" x2="-1.6097625" y2="-0.62013125" layer="200"/>
<rectangle x1="1.584059375" y1="-0.62655625" x2="2.053171875" y2="-0.62013125" layer="200"/>
<rectangle x1="2.085303125" y1="-0.62655625" x2="2.194546875" y2="-0.62013125" layer="200"/>
<rectangle x1="2.2716625" y1="-0.62655625" x2="2.335925" y2="-0.62013125" layer="200"/>
<rectangle x1="2.36163125" y1="-0.62655625" x2="2.4773" y2="-0.62013125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.620128125" x2="-2.483725" y2="-0.613703125" layer="200"/>
<rectangle x1="-2.413034375" y1="-0.620128125" x2="-1.609759375" y2="-0.613703125" layer="200"/>
<rectangle x1="1.584059375" y1="-0.620128125" x2="2.021040625" y2="-0.613703125" layer="200"/>
<rectangle x1="2.374484375" y1="-0.620128125" x2="2.425890625" y2="-0.613703125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.613703125" x2="-2.483725" y2="-0.607278125" layer="200"/>
<rectangle x1="-2.400184375" y1="-0.613703125" x2="-1.609759375" y2="-0.607278125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.613703125" x2="2.0146125" y2="-0.607278125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.607278125" x2="-2.49015" y2="-0.600853125" layer="200"/>
<rectangle x1="-2.38733125" y1="-0.607278125" x2="-2.1367125" y2="-0.600853125" layer="200"/>
<rectangle x1="-2.104578125" y1="-0.607278125" x2="-1.609759375" y2="-0.600853125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.607278125" x2="2.0081875" y2="-0.600853125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.60085" x2="-2.496575" y2="-0.594425" layer="200"/>
<rectangle x1="-2.2909375" y1="-0.60085" x2="-2.2074" y2="-0.594425" layer="200"/>
<rectangle x1="-2.078875" y1="-0.60085" x2="-1.6097625" y2="-0.594425" layer="200"/>
<rectangle x1="1.5969125" y1="-0.60085" x2="1.9953375" y2="-0.594425" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.594425" x2="-2.50300625" y2="-0.588" layer="200"/>
<rectangle x1="-2.072446875" y1="-0.594425" x2="-1.609759375" y2="-0.588" layer="200"/>
<rectangle x1="1.5969125" y1="-0.594425" x2="1.9889125" y2="-0.588" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.587996875" x2="-2.50943125" y2="-0.581571875" layer="200"/>
<rectangle x1="-2.0146125" y1="-0.587996875" x2="-1.6033375" y2="-0.581571875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.587996875" x2="1.98248125" y2="-0.581571875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.581571875" x2="-2.50943125" y2="-0.575146875" layer="200"/>
<rectangle x1="-2.0146125" y1="-0.581571875" x2="-1.5969125" y2="-0.575146875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.581571875" x2="1.97605625" y2="-0.575146875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.575146875" x2="-2.50300625" y2="-0.568721875" layer="200"/>
<rectangle x1="-2.008184375" y1="-0.575146875" x2="-1.596909375" y2="-0.568721875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.575146875" x2="1.96963125" y2="-0.568721875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.56871875" x2="-2.50300625" y2="-0.56229375" layer="200"/>
<rectangle x1="-2.008184375" y1="-0.56871875" x2="-1.590484375" y2="-0.56229375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.56871875" x2="1.96320625" y2="-0.56229375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.56229375" x2="-2.50300625" y2="-0.55586875" layer="200"/>
<rectangle x1="-2.001759375" y1="-0.56229375" x2="-1.590484375" y2="-0.55586875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.56229375" x2="1.95678125" y2="-0.55586875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.555865625" x2="-2.496575" y2="-0.549440625" layer="200"/>
<rectangle x1="-1.995334375" y1="-0.555865625" x2="-1.590484375" y2="-0.549440625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.555865625" x2="1.95678125" y2="-0.549440625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.549440625" x2="-2.496575" y2="-0.543015625" layer="200"/>
<rectangle x1="-1.98890625" y1="-0.549440625" x2="-1.59048125" y2="-0.543015625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.549440625" x2="1.95035" y2="-0.543015625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.543015625" x2="-2.496575" y2="-0.536590625" layer="200"/>
<rectangle x1="-1.976053125" y1="-0.543015625" x2="-1.590484375" y2="-0.536590625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.543015625" x2="1.950353125" y2="-0.536590625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.5365875" x2="-2.496575" y2="-0.5301625" layer="200"/>
<rectangle x1="-1.976053125" y1="-0.5365875" x2="-1.596909375" y2="-0.5301625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.5365875" x2="1.943928125" y2="-0.5301625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.5301625" x2="-2.49015" y2="-0.5237375" layer="200"/>
<rectangle x1="-1.969628125" y1="-0.5301625" x2="-1.603334375" y2="-0.5237375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.5301625" x2="1.943928125" y2="-0.5237375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.5237375" x2="-2.49015" y2="-0.5173125" layer="200"/>
<rectangle x1="-1.963203125" y1="-0.5237375" x2="-1.603334375" y2="-0.5173125" layer="200"/>
<rectangle x1="1.603340625" y1="-0.5237375" x2="1.943928125" y2="-0.5173125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.517309375" x2="-2.49015" y2="-0.510884375" layer="200"/>
<rectangle x1="-1.956775" y1="-0.517309375" x2="-1.6097625" y2="-0.510884375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.517309375" x2="1.943928125" y2="-0.510884375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.510884375" x2="-2.49015" y2="-0.504459375" layer="200"/>
<rectangle x1="-1.956775" y1="-0.510884375" x2="-1.6097625" y2="-0.504459375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.510884375" x2="1.950353125" y2="-0.504459375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.50445625" x2="-2.49015" y2="-0.49803125" layer="200"/>
<rectangle x1="-1.956775" y1="-0.50445625" x2="-1.6097625" y2="-0.49803125" layer="200"/>
<rectangle x1="1.603340625" y1="-0.50445625" x2="1.950353125" y2="-0.49803125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.49803125" x2="-2.49015" y2="-0.49160625" layer="200"/>
<rectangle x1="-1.956775" y1="-0.49803125" x2="-1.6097625" y2="-0.49160625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.49803125" x2="1.950353125" y2="-0.49160625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.49160625" x2="-2.49015" y2="-0.48518125" layer="200"/>
<rectangle x1="-1.956775" y1="-0.49160625" x2="-1.6097625" y2="-0.48518125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.49160625" x2="1.950353125" y2="-0.48518125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.485178125" x2="-2.49015" y2="-0.478753125" layer="200"/>
<rectangle x1="-1.956775" y1="-0.485178125" x2="-1.6097625" y2="-0.478753125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.485178125" x2="1.950353125" y2="-0.478753125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.478753125" x2="-2.49015" y2="-0.472328125" layer="200"/>
<rectangle x1="-1.956775" y1="-0.478753125" x2="-1.6097625" y2="-0.472328125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.478753125" x2="1.950353125" y2="-0.472328125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.472325" x2="-2.49015" y2="-0.4659" layer="200"/>
<rectangle x1="-1.956775" y1="-0.472325" x2="-1.6097625" y2="-0.4659" layer="200"/>
<rectangle x1="1.609765625" y1="-0.472325" x2="1.950353125" y2="-0.4659" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.4659" x2="-2.49015" y2="-0.459475" layer="200"/>
<rectangle x1="-1.963203125" y1="-0.4659" x2="-1.603334375" y2="-0.459475" layer="200"/>
<rectangle x1="1.609765625" y1="-0.4659" x2="1.950353125" y2="-0.459475" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.459475" x2="-2.49015" y2="-0.45305" layer="200"/>
<rectangle x1="-1.963203125" y1="-0.459475" x2="-1.603334375" y2="-0.45305" layer="200"/>
<rectangle x1="1.609765625" y1="-0.459475" x2="1.950353125" y2="-0.45305" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.453046875" x2="-2.496575" y2="-0.446621875" layer="200"/>
<rectangle x1="-1.969628125" y1="-0.453046875" x2="-1.603334375" y2="-0.446621875" layer="200"/>
<rectangle x1="1.609765625" y1="-0.453046875" x2="1.956778125" y2="-0.446621875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.446621875" x2="-2.496575" y2="-0.440196875" layer="200"/>
<rectangle x1="-1.976053125" y1="-0.446621875" x2="-1.603334375" y2="-0.440196875" layer="200"/>
<rectangle x1="1.616190625" y1="-0.446621875" x2="1.956778125" y2="-0.440196875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.440196875" x2="-2.50300625" y2="-0.433771875" layer="200"/>
<rectangle x1="-1.98248125" y1="-0.440196875" x2="-1.6033375" y2="-0.433771875" layer="200"/>
<rectangle x1="1.616190625" y1="-0.440196875" x2="1.956778125" y2="-0.433771875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.43376875" x2="-2.50943125" y2="-0.42734375" layer="200"/>
<rectangle x1="-1.98890625" y1="-0.43376875" x2="-1.6033375" y2="-0.42734375" layer="200"/>
<rectangle x1="1.609765625" y1="-0.43376875" x2="1.963203125" y2="-0.42734375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.42734375" x2="-2.51585625" y2="-0.42091875" layer="200"/>
<rectangle x1="-1.995334375" y1="-0.42734375" x2="-1.609759375" y2="-0.42091875" layer="200"/>
<rectangle x1="1.609765625" y1="-0.42734375" x2="1.963203125" y2="-0.42091875" layer="200"/>
<rectangle x1="-2.001759375" y1="-0.420915625" x2="-1.609759375" y2="-0.414490625" layer="200"/>
<rectangle x1="1.609765625" y1="-0.420915625" x2="1.969628125" y2="-0.414490625" layer="200"/>
<rectangle x1="-2.008184375" y1="-0.414490625" x2="-1.609759375" y2="-0.408065625" layer="200"/>
<rectangle x1="1.609765625" y1="-0.414490625" x2="1.982484375" y2="-0.408065625" layer="200"/>
<rectangle x1="-2.0146125" y1="-0.408065625" x2="-1.6097625" y2="-0.401640625" layer="200"/>
<rectangle x1="1.603340625" y1="-0.408065625" x2="1.995334375" y2="-0.401640625" layer="200"/>
<rectangle x1="-2.0210375" y1="-0.4016375" x2="-1.6097625" y2="-0.3952125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.4016375" x2="2.0017625" y2="-0.3952125" layer="200"/>
<rectangle x1="-2.033890625" y1="-0.3952125" x2="-1.616190625" y2="-0.3887875" layer="200"/>
<rectangle x1="1.5904875" y1="-0.3952125" x2="2.0146125" y2="-0.3887875" layer="200"/>
<rectangle x1="-2.25880625" y1="-0.3887875" x2="-2.226675" y2="-0.3823625" layer="200"/>
<rectangle x1="-2.040315625" y1="-0.3887875" x2="-1.616190625" y2="-0.3823625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.3887875" x2="2.02746875" y2="-0.3823625" layer="200"/>
<rectangle x1="2.36805625" y1="-0.3887875" x2="2.5287125" y2="-0.3823625" layer="200"/>
<rectangle x1="-2.2845125" y1="-0.382359375" x2="-2.19454375" y2="-0.375934375" layer="200"/>
<rectangle x1="-2.066021875" y1="-0.382359375" x2="-1.616190625" y2="-0.375934375" layer="200"/>
<rectangle x1="1.584059375" y1="-0.382359375" x2="2.149565625" y2="-0.375934375" layer="200"/>
<rectangle x1="2.207403125" y1="-0.382359375" x2="2.213828125" y2="-0.375934375" layer="200"/>
<rectangle x1="2.348778125" y1="-0.382359375" x2="2.535134375" y2="-0.375934375" layer="200"/>
<rectangle x1="-2.445165625" y1="-0.375934375" x2="-2.406609375" y2="-0.369509375" layer="200"/>
<rectangle x1="-2.297365625" y1="-0.375934375" x2="-2.175265625" y2="-0.369509375" layer="200"/>
<rectangle x1="-2.111003125" y1="-0.375934375" x2="-1.609759375" y2="-0.369509375" layer="200"/>
<rectangle x1="1.584059375" y1="-0.375934375" x2="2.245959375" y2="-0.369509375" layer="200"/>
<rectangle x1="2.323075" y1="-0.375934375" x2="2.5351375" y2="-0.369509375" layer="200"/>
<rectangle x1="-2.45801875" y1="-0.36950625" x2="-2.1495625" y2="-0.36308125" layer="200"/>
<rectangle x1="-2.12385625" y1="-0.36950625" x2="-1.6097625" y2="-0.36308125" layer="200"/>
<rectangle x1="1.584059375" y1="-0.36950625" x2="2.252384375" y2="-0.36308125" layer="200"/>
<rectangle x1="2.310221875" y1="-0.36950625" x2="2.528709375" y2="-0.36308125" layer="200"/>
<rectangle x1="-2.464446875" y1="-0.36308125" x2="-1.609759375" y2="-0.35665625" layer="200"/>
<rectangle x1="1.584059375" y1="-0.36308125" x2="2.271659375" y2="-0.35665625" layer="200"/>
<rectangle x1="2.284515625" y1="-0.36308125" x2="2.528709375" y2="-0.35665625" layer="200"/>
<rectangle x1="-2.470871875" y1="-0.35665625" x2="-1.603334375" y2="-0.35023125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.35665625" x2="2.52228125" y2="-0.35023125" layer="200"/>
<rectangle x1="-2.483725" y1="-0.350228125" x2="-1.6033375" y2="-0.343803125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.350228125" x2="2.52228125" y2="-0.343803125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.343803125" x2="-1.5969125" y2="-0.337378125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.343803125" x2="2.51585625" y2="-0.337378125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.337375" x2="-1.5969125" y2="-0.33095" layer="200"/>
<rectangle x1="1.603340625" y1="-0.337375" x2="2.515859375" y2="-0.33095" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.33095" x2="-1.5969125" y2="-0.324525" layer="200"/>
<rectangle x1="1.603340625" y1="-0.33095" x2="2.515859375" y2="-0.324525" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.324525" x2="-1.5969125" y2="-0.3181" layer="200"/>
<rectangle x1="1.603340625" y1="-0.324525" x2="2.515859375" y2="-0.3181" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.318096875" x2="-1.5969125" y2="-0.311671875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.318096875" x2="2.515859375" y2="-0.311671875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.311671875" x2="-1.5969125" y2="-0.305246875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.311671875" x2="2.515859375" y2="-0.305246875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.305246875" x2="-1.6033375" y2="-0.298821875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.305246875" x2="2.515859375" y2="-0.298821875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.29881875" x2="-1.6033375" y2="-0.29239375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.29881875" x2="2.51585625" y2="-0.29239375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.29239375" x2="-1.6097625" y2="-0.28596875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.29239375" x2="2.51585625" y2="-0.28596875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.285965625" x2="-1.6097625" y2="-0.279540625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.285965625" x2="2.51585625" y2="-0.279540625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.279540625" x2="-1.6097625" y2="-0.273115625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.279540625" x2="2.51585625" y2="-0.273115625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.273115625" x2="-1.6097625" y2="-0.266690625" layer="200"/>
<rectangle x1="-1.5455" y1="-0.273115625" x2="-1.539075" y2="-0.266690625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.273115625" x2="2.51585625" y2="-0.266690625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.2666875" x2="-1.6161875" y2="-0.2602625" layer="200"/>
<rectangle x1="-1.5455" y1="-0.2666875" x2="-1.539075" y2="-0.2602625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.2666875" x2="2.51585625" y2="-0.2602625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.2602625" x2="-1.6161875" y2="-0.2538375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.2602625" x2="2.515859375" y2="-0.2538375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.253834375" x2="-1.6161875" y2="-0.247409375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.253834375" x2="2.515859375" y2="-0.247409375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.247409375" x2="-1.6161875" y2="-0.240984375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.247409375" x2="2.258809375" y2="-0.240984375" layer="200"/>
<rectangle x1="2.284515625" y1="-0.247409375" x2="2.515859375" y2="-0.240984375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.240984375" x2="-1.6161875" y2="-0.234559375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.240984375" x2="2.252384375" y2="-0.234559375" layer="200"/>
<rectangle x1="2.29094375" y1="-0.240984375" x2="2.51585625" y2="-0.234559375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.23455625" x2="-1.6161875" y2="-0.22813125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.23455625" x2="2.245959375" y2="-0.22813125" layer="200"/>
<rectangle x1="2.310221875" y1="-0.23455625" x2="2.515859375" y2="-0.22813125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.22813125" x2="-1.6161875" y2="-0.22170625" layer="200"/>
<rectangle x1="1.609765625" y1="-0.22813125" x2="2.245959375" y2="-0.22170625" layer="200"/>
<rectangle x1="2.29094375" y1="-0.22813125" x2="2.51585625" y2="-0.22170625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.22170625" x2="-1.6097625" y2="-0.21528125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.22170625" x2="2.245959375" y2="-0.21528125" layer="200"/>
<rectangle x1="2.284515625" y1="-0.22170625" x2="2.515859375" y2="-0.21528125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.215278125" x2="-1.6097625" y2="-0.208853125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.215278125" x2="2.252384375" y2="-0.208853125" layer="200"/>
<rectangle x1="2.278090625" y1="-0.215278125" x2="2.515859375" y2="-0.208853125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.208853125" x2="-1.6097625" y2="-0.202428125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.208853125" x2="2.258809375" y2="-0.202428125" layer="200"/>
<rectangle x1="2.2716625" y1="-0.208853125" x2="2.38090625" y2="-0.202428125" layer="200"/>
<rectangle x1="2.3937625" y1="-0.208853125" x2="2.50943125" y2="-0.202428125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.202425" x2="-1.6097625" y2="-0.196" layer="200"/>
<rectangle x1="1.609765625" y1="-0.202425" x2="2.380909375" y2="-0.196" layer="200"/>
<rectangle x1="2.4001875" y1="-0.202425" x2="2.50943125" y2="-0.196" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.196" x2="-1.6097625" y2="-0.189575" layer="200"/>
<rectangle x1="1.609765625" y1="-0.196" x2="2.380909375" y2="-0.189575" layer="200"/>
<rectangle x1="2.4001875" y1="-0.196" x2="2.50943125" y2="-0.189575" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.189575" x2="-1.6097625" y2="-0.18315" layer="200"/>
<rectangle x1="1.603340625" y1="-0.189575" x2="2.387334375" y2="-0.18315" layer="200"/>
<rectangle x1="2.3937625" y1="-0.189575" x2="2.50943125" y2="-0.18315" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.183146875" x2="-1.6097625" y2="-0.176721875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.183146875" x2="2.509434375" y2="-0.176721875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.176721875" x2="-1.6097625" y2="-0.170296875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.176721875" x2="2.509434375" y2="-0.170296875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.17029375" x2="-1.6097625" y2="-0.16386875" layer="200"/>
<rectangle x1="1.5969125" y1="-0.17029375" x2="2.51585625" y2="-0.16386875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.16386875" x2="-1.6033375" y2="-0.15744375" layer="200"/>
<rectangle x1="1.5969125" y1="-0.16386875" x2="2.51585625" y2="-0.15744375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.15744375" x2="-1.6033375" y2="-0.15101875" layer="200"/>
<rectangle x1="1.5904875" y1="-0.15744375" x2="2.52228125" y2="-0.15101875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.151015625" x2="-2.496575" y2="-0.144590625" layer="200"/>
<rectangle x1="-2.445165625" y1="-0.151015625" x2="-1.596909375" y2="-0.144590625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.151015625" x2="2.52228125" y2="-0.144590625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.144590625" x2="-2.496575" y2="-0.138165625" layer="200"/>
<rectangle x1="-2.438740625" y1="-0.144590625" x2="-1.596909375" y2="-0.138165625" layer="200"/>
<rectangle x1="1.584059375" y1="-0.144590625" x2="2.528709375" y2="-0.138165625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.138165625" x2="-2.50300625" y2="-0.131740625" layer="200"/>
<rectangle x1="-2.438740625" y1="-0.138165625" x2="-1.596909375" y2="-0.131740625" layer="200"/>
<rectangle x1="1.584059375" y1="-0.138165625" x2="2.528709375" y2="-0.131740625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.1317375" x2="-2.50300625" y2="-0.1253125" layer="200"/>
<rectangle x1="-2.432315625" y1="-0.1317375" x2="-1.596909375" y2="-0.1253125" layer="200"/>
<rectangle x1="1.584059375" y1="-0.1317375" x2="2.522284375" y2="-0.1253125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.1253125" x2="-2.50943125" y2="-0.1188875" layer="200"/>
<rectangle x1="-2.432315625" y1="-0.1253125" x2="-1.596909375" y2="-0.1188875" layer="200"/>
<rectangle x1="1.584059375" y1="-0.1253125" x2="2.168840625" y2="-0.1188875" layer="200"/>
<rectangle x1="2.213828125" y1="-0.1253125" x2="2.387334375" y2="-0.1188875" layer="200"/>
<rectangle x1="2.406615625" y1="-0.1253125" x2="2.515859375" y2="-0.1188875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.118884375" x2="-2.50300625" y2="-0.112459375" layer="200"/>
<rectangle x1="-2.4258875" y1="-0.118884375" x2="-1.5969125" y2="-0.112459375" layer="200"/>
<rectangle x1="1.584059375" y1="-0.118884375" x2="2.021040625" y2="-0.112459375" layer="200"/>
<rectangle x1="2.072453125" y1="-0.118884375" x2="2.130284375" y2="-0.112459375" layer="200"/>
<rectangle x1="2.316646875" y1="-0.118884375" x2="2.361628125" y2="-0.112459375" layer="200"/>
<rectangle x1="2.445171875" y1="-0.118884375" x2="2.470871875" y2="-0.112459375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.112459375" x2="-2.50300625" y2="-0.106034375" layer="200"/>
<rectangle x1="-2.4194625" y1="-0.112459375" x2="-2.32949375" y2="-0.106034375" layer="200"/>
<rectangle x1="-2.32306875" y1="-0.112459375" x2="-1.6033375" y2="-0.106034375" layer="200"/>
<rectangle x1="1.584059375" y1="-0.112459375" x2="2.014615625" y2="-0.106034375" layer="200"/>
<rectangle x1="2.078878125" y1="-0.112459375" x2="2.117434375" y2="-0.106034375" layer="200"/>
<rectangle x1="2.323075" y1="-0.112459375" x2="2.3552" y2="-0.106034375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.106034375" x2="-2.496575" y2="-0.099609375" layer="200"/>
<rectangle x1="-2.4194625" y1="-0.106034375" x2="-2.39375625" y2="-0.099609375" layer="200"/>
<rectangle x1="-2.2845125" y1="-0.106034375" x2="-2.25880625" y2="-0.099609375" layer="200"/>
<rectangle x1="-2.130284375" y1="-0.106034375" x2="-2.066021875" y2="-0.099609375" layer="200"/>
<rectangle x1="-2.0210375" y1="-0.106034375" x2="-1.6033375" y2="-0.099609375" layer="200"/>
<rectangle x1="1.584059375" y1="-0.106034375" x2="2.008190625" y2="-0.099609375" layer="200"/>
<rectangle x1="2.335925" y1="-0.106034375" x2="2.348775" y2="-0.099609375" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.09960625" x2="-2.496575" y2="-0.09318125" layer="200"/>
<rectangle x1="-2.278084375" y1="-0.09960625" x2="-2.271659375" y2="-0.09318125" layer="200"/>
<rectangle x1="-2.111003125" y1="-0.09960625" x2="-2.085303125" y2="-0.09318125" layer="200"/>
<rectangle x1="-2.0146125" y1="-0.09960625" x2="-1.6033375" y2="-0.09318125" layer="200"/>
<rectangle x1="1.5904875" y1="-0.09960625" x2="2.0017625" y2="-0.09318125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.09318125" x2="-2.496575" y2="-0.08675625" layer="200"/>
<rectangle x1="-2.098153125" y1="-0.09318125" x2="-2.091728125" y2="-0.08675625" layer="200"/>
<rectangle x1="-2.008184375" y1="-0.09318125" x2="-1.603334375" y2="-0.08675625" layer="200"/>
<rectangle x1="1.5904875" y1="-0.09318125" x2="1.9953375" y2="-0.08675625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.086753125" x2="-2.49015" y2="-0.080328125" layer="200"/>
<rectangle x1="-2.001759375" y1="-0.086753125" x2="-1.603334375" y2="-0.080328125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.086753125" x2="1.97605625" y2="-0.080328125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.080328125" x2="-2.49015" y2="-0.073903125" layer="200"/>
<rectangle x1="-1.995334375" y1="-0.080328125" x2="-1.596909375" y2="-0.073903125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.080328125" x2="1.97605625" y2="-0.073903125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.073903125" x2="-2.49015" y2="-0.067478125" layer="200"/>
<rectangle x1="-1.98890625" y1="-0.073903125" x2="-1.5969125" y2="-0.067478125" layer="200"/>
<rectangle x1="1.5969125" y1="-0.073903125" x2="1.97605625" y2="-0.067478125" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.067475" x2="-2.496575" y2="-0.06105" layer="200"/>
<rectangle x1="-1.98890625" y1="-0.067475" x2="-1.5969125" y2="-0.06105" layer="200"/>
<rectangle x1="1.5969125" y1="-0.067475" x2="1.97605625" y2="-0.06105" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.06105" x2="-2.50300625" y2="-0.054625" layer="200"/>
<rectangle x1="-1.98248125" y1="-0.06105" x2="-1.5969125" y2="-0.054625" layer="200"/>
<rectangle x1="1.5969125" y1="-0.06105" x2="1.96963125" y2="-0.054625" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.054625" x2="-2.50300625" y2="-0.0482" layer="200"/>
<rectangle x1="-1.98248125" y1="-0.054625" x2="-1.5969125" y2="-0.0482" layer="200"/>
<rectangle x1="1.603340625" y1="-0.054625" x2="1.963203125" y2="-0.0482" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.048196875" x2="-2.50943125" y2="-0.041771875" layer="200"/>
<rectangle x1="-1.976053125" y1="-0.048196875" x2="-1.596909375" y2="-0.041771875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.048196875" x2="1.956778125" y2="-0.041771875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.041771875" x2="-2.50943125" y2="-0.035346875" layer="200"/>
<rectangle x1="-1.976053125" y1="-0.041771875" x2="-1.596909375" y2="-0.035346875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.041771875" x2="1.956778125" y2="-0.035346875" layer="200"/>
<rectangle x1="-2.52228125" y1="-0.03534375" x2="-2.51585625" y2="-0.02891875" layer="200"/>
<rectangle x1="-1.969628125" y1="-0.03534375" x2="-1.596909375" y2="-0.02891875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.03534375" x2="1.956778125" y2="-0.02891875" layer="200"/>
<rectangle x1="-1.963203125" y1="-0.02891875" x2="-1.596909375" y2="-0.02249375" layer="200"/>
<rectangle x1="1.603340625" y1="-0.02891875" x2="1.956778125" y2="-0.02249375" layer="200"/>
<rectangle x1="-1.956775" y1="-0.02249375" x2="-1.5969125" y2="-0.01606875" layer="200"/>
<rectangle x1="1.603340625" y1="-0.02249375" x2="1.956778125" y2="-0.01606875" layer="200"/>
<rectangle x1="-1.956775" y1="-0.016065625" x2="-1.6033375" y2="-0.009640625" layer="200"/>
<rectangle x1="1.609765625" y1="-0.016065625" x2="1.956778125" y2="-0.009640625" layer="200"/>
<rectangle x1="-1.95035" y1="-0.009640625" x2="-1.6033375" y2="-0.003215625" layer="200"/>
<rectangle x1="1.609765625" y1="-0.009640625" x2="1.956778125" y2="-0.003215625" layer="200"/>
<rectangle x1="-1.943921875" y1="-0.0032125" x2="-1.609759375" y2="0.0032125" layer="200"/>
<rectangle x1="1.609765625" y1="-0.0032125" x2="1.963203125" y2="0.0032125" layer="200"/>
<rectangle x1="-1.943921875" y1="0.0032125" x2="-1.609759375" y2="0.0096375" layer="200"/>
<rectangle x1="1.609765625" y1="0.0032125" x2="1.969628125" y2="0.0096375" layer="200"/>
<rectangle x1="-1.937496875" y1="0.0096375" x2="-1.609759375" y2="0.0160625" layer="200"/>
<rectangle x1="-1.551925" y1="0.0096375" x2="-1.539075" y2="0.0160625" layer="200"/>
<rectangle x1="1.609765625" y1="0.0096375" x2="1.969628125" y2="0.0160625" layer="200"/>
<rectangle x1="-1.937496875" y1="0.016065625" x2="-1.609759375" y2="0.022490625" layer="200"/>
<rectangle x1="-1.551925" y1="0.016065625" x2="-1.539075" y2="0.022490625" layer="200"/>
<rectangle x1="1.603340625" y1="0.016065625" x2="1.976059375" y2="0.022490625" layer="200"/>
<rectangle x1="-1.937496875" y1="0.022490625" x2="-1.616190625" y2="0.028915625" layer="200"/>
<rectangle x1="-1.551925" y1="0.022490625" x2="-1.539075" y2="0.028915625" layer="200"/>
<rectangle x1="1.603340625" y1="0.022490625" x2="1.976059375" y2="0.028915625" layer="200"/>
<rectangle x1="-1.937496875" y1="0.028915625" x2="-1.616190625" y2="0.035340625" layer="200"/>
<rectangle x1="-1.5455" y1="0.028915625" x2="-1.539075" y2="0.035340625" layer="200"/>
<rectangle x1="1.603340625" y1="0.028915625" x2="1.976059375" y2="0.035340625" layer="200"/>
<rectangle x1="-1.943921875" y1="0.03534375" x2="-1.609759375" y2="0.04176875" layer="200"/>
<rectangle x1="1.603340625" y1="0.03534375" x2="1.982484375" y2="0.04176875" layer="200"/>
<rectangle x1="-1.95035" y1="0.04176875" x2="-1.6097625" y2="0.04819375" layer="200"/>
<rectangle x1="1.603340625" y1="0.04176875" x2="1.988909375" y2="0.04819375" layer="200"/>
<rectangle x1="-1.95035" y1="0.048196875" x2="-1.6097625" y2="0.054621875" layer="200"/>
<rectangle x1="1.5969125" y1="0.048196875" x2="1.98248125" y2="0.054621875" layer="200"/>
<rectangle x1="-1.95035" y1="0.054621875" x2="-1.6097625" y2="0.061046875" layer="200"/>
<rectangle x1="1.5969125" y1="0.054621875" x2="1.97605625" y2="0.061046875" layer="200"/>
<rectangle x1="-1.956775" y1="0.061046875" x2="-1.6161875" y2="0.067471875" layer="200"/>
<rectangle x1="1.5904875" y1="0.061046875" x2="1.97605625" y2="0.067471875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.067475" x2="-2.51585625" y2="0.0739" layer="200"/>
<rectangle x1="-1.969628125" y1="0.067475" x2="-1.616190625" y2="0.0739" layer="200"/>
<rectangle x1="1.5904875" y1="0.067475" x2="1.97605625" y2="0.0739" layer="200"/>
<rectangle x1="-2.52228125" y1="0.0739" x2="-2.50943125" y2="0.080325" layer="200"/>
<rectangle x1="-1.969628125" y1="0.0739" x2="-1.616190625" y2="0.080325" layer="200"/>
<rectangle x1="1.584059375" y1="0.0739" x2="1.976059375" y2="0.080325" layer="200"/>
<rectangle x1="-2.52228125" y1="0.080328125" x2="-2.50300625" y2="0.086753125" layer="200"/>
<rectangle x1="-1.976053125" y1="0.080328125" x2="-1.616190625" y2="0.086753125" layer="200"/>
<rectangle x1="1.584059375" y1="0.080328125" x2="1.976059375" y2="0.086753125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.086753125" x2="-2.50300625" y2="0.093178125" layer="200"/>
<rectangle x1="-1.98248125" y1="0.086753125" x2="-1.6161875" y2="0.093178125" layer="200"/>
<rectangle x1="1.584059375" y1="0.086753125" x2="1.982484375" y2="0.093178125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.093178125" x2="-2.50300625" y2="0.099603125" layer="200"/>
<rectangle x1="-1.98890625" y1="0.093178125" x2="-1.6161875" y2="0.099603125" layer="200"/>
<rectangle x1="1.584059375" y1="0.093178125" x2="1.988909375" y2="0.099603125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.09960625" x2="-2.50300625" y2="0.10603125" layer="200"/>
<rectangle x1="-1.995334375" y1="0.09960625" x2="-1.616190625" y2="0.10603125" layer="200"/>
<rectangle x1="1.5904875" y1="0.09960625" x2="2.0081875" y2="0.10603125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.10603125" x2="-2.50943125" y2="0.11245625" layer="200"/>
<rectangle x1="-2.001759375" y1="0.10603125" x2="-1.609759375" y2="0.11245625" layer="200"/>
<rectangle x1="1.5904875" y1="0.10603125" x2="2.0146125" y2="0.11245625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.11245625" x2="-2.50943125" y2="0.11888125" layer="200"/>
<rectangle x1="-2.008184375" y1="0.11245625" x2="-1.609759375" y2="0.11888125" layer="200"/>
<rectangle x1="1.5969125" y1="0.11245625" x2="2.02746875" y2="0.11888125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.118884375" x2="-2.51585625" y2="0.125309375" layer="200"/>
<rectangle x1="-2.4258875" y1="0.118884375" x2="-2.4130375" y2="0.125309375" layer="200"/>
<rectangle x1="-2.130284375" y1="0.118884375" x2="-2.111003125" y2="0.125309375" layer="200"/>
<rectangle x1="-2.0146125" y1="0.118884375" x2="-1.6033375" y2="0.125309375" layer="200"/>
<rectangle x1="1.5969125" y1="0.118884375" x2="2.02746875" y2="0.125309375" layer="200"/>
<rectangle x1="2.310221875" y1="0.118884375" x2="2.368053125" y2="0.125309375" layer="200"/>
<rectangle x1="-2.445165625" y1="0.125309375" x2="-2.400184375" y2="0.131734375" layer="200"/>
<rectangle x1="-2.143134375" y1="0.125309375" x2="-2.091728125" y2="0.131734375" layer="200"/>
<rectangle x1="-2.0274625" y1="0.125309375" x2="-1.6033375" y2="0.131734375" layer="200"/>
<rectangle x1="1.5969125" y1="0.125309375" x2="2.03389375" y2="0.131734375" layer="200"/>
<rectangle x1="2.207403125" y1="0.125309375" x2="2.233103125" y2="0.131734375" layer="200"/>
<rectangle x1="2.29094375" y1="0.125309375" x2="2.44516875" y2="0.131734375" layer="200"/>
<rectangle x1="-2.45159375" y1="0.1317375" x2="-2.31664375" y2="0.1381625" layer="200"/>
<rectangle x1="-2.2909375" y1="0.1317375" x2="-2.22025" y2="0.1381625" layer="200"/>
<rectangle x1="-2.1559875" y1="0.1317375" x2="-2.066025" y2="0.1381625" layer="200"/>
<rectangle x1="-2.040315625" y1="0.1317375" x2="-1.596909375" y2="0.1381625" layer="200"/>
<rectangle x1="1.5969125" y1="0.1317375" x2="2.04031875" y2="0.1381625" layer="200"/>
<rectangle x1="2.200975" y1="0.1317375" x2="2.23953125" y2="0.1381625" layer="200"/>
<rectangle x1="2.284515625" y1="0.1317375" x2="2.464446875" y2="0.1381625" layer="200"/>
<rectangle x1="-2.45159375" y1="0.1381625" x2="-1.5969125" y2="0.1445875" layer="200"/>
<rectangle x1="1.5969125" y1="0.1381625" x2="2.0596" y2="0.1445875" layer="200"/>
<rectangle x1="2.117434375" y1="0.1381625" x2="2.123859375" y2="0.1445875" layer="200"/>
<rectangle x1="2.1367125" y1="0.1381625" x2="2.1431375" y2="0.1445875" layer="200"/>
<rectangle x1="2.175271875" y1="0.1381625" x2="2.515859375" y2="0.1445875" layer="200"/>
<rectangle x1="-2.45801875" y1="0.1445875" x2="-1.5969125" y2="0.1510125" layer="200"/>
<rectangle x1="-1.5455" y1="0.1445875" x2="-1.539075" y2="0.1510125" layer="200"/>
<rectangle x1="1.5904875" y1="0.1445875" x2="2.07245" y2="0.1510125" layer="200"/>
<rectangle x1="2.111009375" y1="0.1445875" x2="2.515859375" y2="0.1510125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.151015625" x2="-2.51585625" y2="0.157440625" layer="200"/>
<rectangle x1="-2.45801875" y1="0.151015625" x2="-1.5969125" y2="0.157440625" layer="200"/>
<rectangle x1="-1.5455" y1="0.151015625" x2="-1.539075" y2="0.157440625" layer="200"/>
<rectangle x1="1.5904875" y1="0.151015625" x2="2.078875" y2="0.157440625" layer="200"/>
<rectangle x1="2.10458125" y1="0.151015625" x2="2.51585625" y2="0.157440625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.157440625" x2="-2.51585625" y2="0.163865625" layer="200"/>
<rectangle x1="-2.464446875" y1="0.157440625" x2="-1.603334375" y2="0.163865625" layer="200"/>
<rectangle x1="-1.5455" y1="0.157440625" x2="-1.539075" y2="0.163865625" layer="200"/>
<rectangle x1="1.584059375" y1="0.157440625" x2="2.515859375" y2="0.163865625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.16386875" x2="-2.50943125" y2="0.17029375" layer="200"/>
<rectangle x1="-2.477296875" y1="0.16386875" x2="-1.603334375" y2="0.17029375" layer="200"/>
<rectangle x1="1.584059375" y1="0.16386875" x2="2.515859375" y2="0.17029375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.17029375" x2="-1.6033375" y2="0.17671875" layer="200"/>
<rectangle x1="1.584059375" y1="0.17029375" x2="2.515859375" y2="0.17671875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.17671875" x2="-1.6097625" y2="0.18314375" layer="200"/>
<rectangle x1="1.584059375" y1="0.17671875" x2="2.515859375" y2="0.18314375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.183146875" x2="-1.6097625" y2="0.189571875" layer="200"/>
<rectangle x1="1.584059375" y1="0.183146875" x2="2.515859375" y2="0.189571875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.189571875" x2="-1.6161875" y2="0.195996875" layer="200"/>
<rectangle x1="1.584059375" y1="0.189571875" x2="2.515859375" y2="0.195996875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.195996875" x2="-1.6161875" y2="0.202421875" layer="200"/>
<rectangle x1="1.584059375" y1="0.195996875" x2="2.515859375" y2="0.202421875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.202425" x2="-1.6161875" y2="0.20885" layer="200"/>
<rectangle x1="1.584059375" y1="0.202425" x2="2.143140625" y2="0.20885" layer="200"/>
<rectangle x1="2.15599375" y1="0.202425" x2="2.50943125" y2="0.20885" layer="200"/>
<rectangle x1="-2.52228125" y1="0.20885" x2="-1.6161875" y2="0.215275" layer="200"/>
<rectangle x1="1.584059375" y1="0.20885" x2="2.136709375" y2="0.215275" layer="200"/>
<rectangle x1="2.15599375" y1="0.20885" x2="2.50943125" y2="0.215275" layer="200"/>
<rectangle x1="-2.52228125" y1="0.215278125" x2="-1.6161875" y2="0.221703125" layer="200"/>
<rectangle x1="1.584059375" y1="0.215278125" x2="2.136709375" y2="0.221703125" layer="200"/>
<rectangle x1="2.16884375" y1="0.215278125" x2="2.36163125" y2="0.221703125" layer="200"/>
<rectangle x1="2.36805625" y1="0.215278125" x2="2.50943125" y2="0.221703125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.221703125" x2="-1.6097625" y2="0.228128125" layer="200"/>
<rectangle x1="1.584059375" y1="0.221703125" x2="2.143140625" y2="0.228128125" layer="200"/>
<rectangle x1="2.200975" y1="0.221703125" x2="2.36163125" y2="0.228128125" layer="200"/>
<rectangle x1="2.36805625" y1="0.221703125" x2="2.50943125" y2="0.228128125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.228128125" x2="-1.6097625" y2="0.234553125" layer="200"/>
<rectangle x1="1.584059375" y1="0.228128125" x2="2.155990625" y2="0.234553125" layer="200"/>
<rectangle x1="2.207403125" y1="0.228128125" x2="2.509434375" y2="0.234553125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.23455625" x2="-1.6033375" y2="0.24098125" layer="200"/>
<rectangle x1="1.584059375" y1="0.23455625" x2="2.098153125" y2="0.24098125" layer="200"/>
<rectangle x1="2.10458125" y1="0.23455625" x2="2.15599375" y2="0.24098125" layer="200"/>
<rectangle x1="2.207403125" y1="0.23455625" x2="2.509434375" y2="0.24098125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.24098125" x2="-1.6033375" y2="0.24740625" layer="200"/>
<rectangle x1="1.584059375" y1="0.24098125" x2="2.091728125" y2="0.24740625" layer="200"/>
<rectangle x1="2.10458125" y1="0.24098125" x2="2.15599375" y2="0.24740625" layer="200"/>
<rectangle x1="2.207403125" y1="0.24098125" x2="2.515859375" y2="0.24740625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.247409375" x2="-1.6033375" y2="0.253834375" layer="200"/>
<rectangle x1="1.584059375" y1="0.247409375" x2="2.085303125" y2="0.253834375" layer="200"/>
<rectangle x1="2.111009375" y1="0.247409375" x2="2.155990625" y2="0.253834375" layer="200"/>
<rectangle x1="2.207403125" y1="0.247409375" x2="2.515859375" y2="0.253834375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.253834375" x2="-1.5969125" y2="0.260259375" layer="200"/>
<rectangle x1="1.584059375" y1="0.253834375" x2="2.091728125" y2="0.260259375" layer="200"/>
<rectangle x1="2.111009375" y1="0.253834375" x2="2.155990625" y2="0.260259375" layer="200"/>
<rectangle x1="2.200975" y1="0.253834375" x2="2.51585625" y2="0.260259375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.260259375" x2="-1.5969125" y2="0.266684375" layer="200"/>
<rectangle x1="1.584059375" y1="0.260259375" x2="2.091728125" y2="0.266684375" layer="200"/>
<rectangle x1="2.111009375" y1="0.260259375" x2="2.162415625" y2="0.266684375" layer="200"/>
<rectangle x1="2.200975" y1="0.260259375" x2="2.52228125" y2="0.266684375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.2666875" x2="-1.6033375" y2="0.2731125" layer="200"/>
<rectangle x1="1.584059375" y1="0.2666875" x2="2.098153125" y2="0.2731125" layer="200"/>
<rectangle x1="2.10458125" y1="0.2666875" x2="2.17526875" y2="0.2731125" layer="200"/>
<rectangle x1="2.19455" y1="0.2666875" x2="2.52228125" y2="0.2731125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.2731125" x2="-1.6033375" y2="0.2795375" layer="200"/>
<rectangle x1="1.584059375" y1="0.2731125" x2="2.515859375" y2="0.2795375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.2795375" x2="-1.6033375" y2="0.2859625" layer="200"/>
<rectangle x1="1.584059375" y1="0.2795375" x2="2.515859375" y2="0.2859625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.285965625" x2="-1.6033375" y2="0.292390625" layer="200"/>
<rectangle x1="1.584059375" y1="0.285965625" x2="2.509434375" y2="0.292390625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.292390625" x2="-1.6033375" y2="0.298815625" layer="200"/>
<rectangle x1="1.584059375" y1="0.292390625" x2="2.509434375" y2="0.298815625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.29881875" x2="-1.6033375" y2="0.30524375" layer="200"/>
<rectangle x1="1.584059375" y1="0.29881875" x2="2.509434375" y2="0.30524375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.30524375" x2="-1.6033375" y2="0.31166875" layer="200"/>
<rectangle x1="1.584059375" y1="0.30524375" x2="2.509434375" y2="0.31166875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.31166875" x2="-1.6033375" y2="0.31809375" layer="200"/>
<rectangle x1="1.584059375" y1="0.31166875" x2="2.509434375" y2="0.31809375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.318096875" x2="-1.6033375" y2="0.324521875" layer="200"/>
<rectangle x1="1.584059375" y1="0.318096875" x2="2.509434375" y2="0.324521875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.324521875" x2="-1.6097625" y2="0.330946875" layer="200"/>
<rectangle x1="1.584059375" y1="0.324521875" x2="2.509434375" y2="0.330946875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.33095" x2="-1.6097625" y2="0.337375" layer="200"/>
<rectangle x1="1.5904875" y1="0.33095" x2="2.50943125" y2="0.337375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.337375" x2="-1.6161875" y2="0.3438" layer="200"/>
<rectangle x1="1.5904875" y1="0.337375" x2="2.51585625" y2="0.3438" layer="200"/>
<rectangle x1="-2.52228125" y1="0.3438" x2="-1.6161875" y2="0.350225" layer="200"/>
<rectangle x1="1.5969125" y1="0.3438" x2="2.52228125" y2="0.350225" layer="200"/>
<rectangle x1="-2.52228125" y1="0.350228125" x2="-1.6161875" y2="0.356653125" layer="200"/>
<rectangle x1="1.5969125" y1="0.350228125" x2="2.5287125" y2="0.356653125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.356653125" x2="-1.6161875" y2="0.363078125" layer="200"/>
<rectangle x1="1.5969125" y1="0.356653125" x2="2.5287125" y2="0.363078125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.363078125" x2="-1.6161875" y2="0.369503125" layer="200"/>
<rectangle x1="1.5969125" y1="0.363078125" x2="2.5287125" y2="0.369503125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.36950625" x2="-1.6161875" y2="0.37593125" layer="200"/>
<rectangle x1="1.5969125" y1="0.36950625" x2="2.34235" y2="0.37593125" layer="200"/>
<rectangle x1="2.374484375" y1="0.36950625" x2="2.528709375" y2="0.37593125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.37593125" x2="-1.6161875" y2="0.38235625" layer="200"/>
<rectangle x1="1.5904875" y1="0.37593125" x2="2.1495625" y2="0.38235625" layer="200"/>
<rectangle x1="2.213828125" y1="0.37593125" x2="2.335921875" y2="0.38235625" layer="200"/>
<rectangle x1="2.387334375" y1="0.37593125" x2="2.528709375" y2="0.38235625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.382359375" x2="-1.6161875" y2="0.388784375" layer="200"/>
<rectangle x1="1.5904875" y1="0.382359375" x2="2.0853" y2="0.388784375" layer="200"/>
<rectangle x1="2.22668125" y1="0.382359375" x2="2.323075" y2="0.388784375" layer="200"/>
<rectangle x1="2.3937625" y1="0.382359375" x2="2.52228125" y2="0.388784375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.388784375" x2="-2.50300625" y2="0.395209375" layer="200"/>
<rectangle x1="-2.470871875" y1="0.388784375" x2="-1.616190625" y2="0.395209375" layer="200"/>
<rectangle x1="1.584059375" y1="0.388784375" x2="2.078878125" y2="0.395209375" layer="200"/>
<rectangle x1="2.23310625" y1="0.388784375" x2="2.31021875" y2="0.395209375" layer="200"/>
<rectangle x1="2.4001875" y1="0.388784375" x2="2.49015625" y2="0.395209375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.395209375" x2="-2.50943125" y2="0.401634375" layer="200"/>
<rectangle x1="-2.445165625" y1="0.395209375" x2="-2.348778125" y2="0.401634375" layer="200"/>
<rectangle x1="-2.24595625" y1="0.395209375" x2="-2.18811875" y2="0.401634375" layer="200"/>
<rectangle x1="-2.1559875" y1="0.395209375" x2="-1.6161875" y2="0.401634375" layer="200"/>
<rectangle x1="1.584059375" y1="0.395209375" x2="2.066021875" y2="0.401634375" layer="200"/>
<rectangle x1="2.23310625" y1="0.395209375" x2="2.29736875" y2="0.401634375" layer="200"/>
<rectangle x1="2.413040625" y1="0.395209375" x2="2.477303125" y2="0.401634375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.4016375" x2="-2.51585625" y2="0.4080625" layer="200"/>
<rectangle x1="-2.39375625" y1="0.4016375" x2="-2.36805625" y2="0.4080625" layer="200"/>
<rectangle x1="-2.136709375" y1="0.4016375" x2="-1.609759375" y2="0.4080625" layer="200"/>
<rectangle x1="1.577634375" y1="0.4016375" x2="2.001759375" y2="0.4080625" layer="200"/>
<rectangle x1="2.42589375" y1="0.4016375" x2="2.458025" y2="0.4080625" layer="200"/>
<rectangle x1="-2.130284375" y1="0.4080625" x2="-1.609759375" y2="0.4144875" layer="200"/>
<rectangle x1="1.577634375" y1="0.4080625" x2="1.995334375" y2="0.4144875" layer="200"/>
<rectangle x1="-2.130284375" y1="0.4144875" x2="-1.609759375" y2="0.4209125" layer="200"/>
<rectangle x1="1.571209375" y1="0.4144875" x2="1.988909375" y2="0.4209125" layer="200"/>
<rectangle x1="-2.12385625" y1="0.420915625" x2="-2.078875" y2="0.427340625" layer="200"/>
<rectangle x1="-2.033890625" y1="0.420915625" x2="-1.609759375" y2="0.427340625" layer="200"/>
<rectangle x1="1.571209375" y1="0.420915625" x2="1.988909375" y2="0.427340625" layer="200"/>
<rectangle x1="-2.12385625" y1="0.427340625" x2="-2.091725" y2="0.433765625" layer="200"/>
<rectangle x1="-2.0274625" y1="0.427340625" x2="-1.6097625" y2="0.433765625" layer="200"/>
<rectangle x1="1.571209375" y1="0.427340625" x2="1.982484375" y2="0.433765625" layer="200"/>
<rectangle x1="-2.008184375" y1="0.43376875" x2="-1.609759375" y2="0.44019375" layer="200"/>
<rectangle x1="1.577634375" y1="0.43376875" x2="1.976059375" y2="0.44019375" layer="200"/>
<rectangle x1="-1.995334375" y1="0.44019375" x2="-1.609759375" y2="0.44661875" layer="200"/>
<rectangle x1="1.577634375" y1="0.44019375" x2="1.969628125" y2="0.44661875" layer="200"/>
<rectangle x1="-1.98890625" y1="0.44661875" x2="-1.6097625" y2="0.45304375" layer="200"/>
<rectangle x1="1.584059375" y1="0.44661875" x2="1.963203125" y2="0.45304375" layer="200"/>
<rectangle x1="-1.98890625" y1="0.453046875" x2="-1.6097625" y2="0.459471875" layer="200"/>
<rectangle x1="1.5904875" y1="0.453046875" x2="1.95678125" y2="0.459471875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.459471875" x2="-2.51585625" y2="0.465896875" layer="200"/>
<rectangle x1="-1.976053125" y1="0.459471875" x2="-1.616190625" y2="0.465896875" layer="200"/>
<rectangle x1="1.5969125" y1="0.459471875" x2="1.95035" y2="0.465896875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.4659" x2="-2.50943125" y2="0.472325" layer="200"/>
<rectangle x1="-1.969628125" y1="0.4659" x2="-1.616190625" y2="0.472325" layer="200"/>
<rectangle x1="1.603340625" y1="0.4659" x2="1.950353125" y2="0.472325" layer="200"/>
<rectangle x1="-2.52228125" y1="0.472325" x2="-2.496575" y2="0.47875" layer="200"/>
<rectangle x1="-1.956775" y1="0.472325" x2="-1.6226125" y2="0.47875" layer="200"/>
<rectangle x1="1.609765625" y1="0.472325" x2="1.943928125" y2="0.47875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.47875" x2="-2.496575" y2="0.485175" layer="200"/>
<rectangle x1="-1.956775" y1="0.47875" x2="-1.6161875" y2="0.485175" layer="200"/>
<rectangle x1="1.603340625" y1="0.47875" x2="1.943928125" y2="0.485175" layer="200"/>
<rectangle x1="-2.52228125" y1="0.485178125" x2="-2.49015" y2="0.491603125" layer="200"/>
<rectangle x1="-1.956775" y1="0.485178125" x2="-1.6161875" y2="0.491603125" layer="200"/>
<rectangle x1="1.603340625" y1="0.485178125" x2="1.937496875" y2="0.491603125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.491603125" x2="-2.496575" y2="0.498028125" layer="200"/>
<rectangle x1="-1.95035" y1="0.491603125" x2="-1.6097625" y2="0.498028125" layer="200"/>
<rectangle x1="1.603340625" y1="0.491603125" x2="1.937496875" y2="0.498028125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.498028125" x2="-2.496575" y2="0.504453125" layer="200"/>
<rectangle x1="-1.95035" y1="0.498028125" x2="-1.6097625" y2="0.504453125" layer="200"/>
<rectangle x1="1.5969125" y1="0.498028125" x2="1.9375" y2="0.504453125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.50445625" x2="-2.50300625" y2="0.51088125" layer="200"/>
<rectangle x1="-1.95035" y1="0.50445625" x2="-1.6097625" y2="0.51088125" layer="200"/>
<rectangle x1="1.5969125" y1="0.50445625" x2="1.9375" y2="0.51088125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.51088125" x2="-2.50943125" y2="0.51730625" layer="200"/>
<rectangle x1="-1.95035" y1="0.51088125" x2="-1.6033375" y2="0.51730625" layer="200"/>
<rectangle x1="1.5969125" y1="0.51088125" x2="1.943925" y2="0.51730625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.517309375" x2="-2.51585625" y2="0.523734375" layer="200"/>
<rectangle x1="-1.95035" y1="0.517309375" x2="-1.6033375" y2="0.523734375" layer="200"/>
<rectangle x1="1.5969125" y1="0.517309375" x2="1.943925" y2="0.523734375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.523734375" x2="-2.51585625" y2="0.530159375" layer="200"/>
<rectangle x1="-1.95035" y1="0.523734375" x2="-1.6033375" y2="0.530159375" layer="200"/>
<rectangle x1="1.5969125" y1="0.523734375" x2="1.943925" y2="0.530159375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.530159375" x2="-2.51585625" y2="0.536584375" layer="200"/>
<rectangle x1="-1.95035" y1="0.530159375" x2="-1.5969125" y2="0.536584375" layer="200"/>
<rectangle x1="1.5969125" y1="0.530159375" x2="1.95035" y2="0.536584375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.5365875" x2="-2.51585625" y2="0.5430125" layer="200"/>
<rectangle x1="-1.956775" y1="0.5365875" x2="-1.5969125" y2="0.5430125" layer="200"/>
<rectangle x1="1.5969125" y1="0.5365875" x2="1.95678125" y2="0.5430125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.5430125" x2="-2.51585625" y2="0.5494375" layer="200"/>
<rectangle x1="-1.956775" y1="0.5430125" x2="-1.5969125" y2="0.5494375" layer="200"/>
<rectangle x1="1.5969125" y1="0.5430125" x2="1.96320625" y2="0.5494375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.549440625" x2="-2.50943125" y2="0.555865625" layer="200"/>
<rectangle x1="-1.956775" y1="0.549440625" x2="-1.5969125" y2="0.555865625" layer="200"/>
<rectangle x1="1.5969125" y1="0.549440625" x2="1.96320625" y2="0.555865625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.555865625" x2="-2.50943125" y2="0.562290625" layer="200"/>
<rectangle x1="-1.963203125" y1="0.555865625" x2="-1.596909375" y2="0.562290625" layer="200"/>
<rectangle x1="1.5969125" y1="0.555865625" x2="1.96320625" y2="0.562290625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.562290625" x2="-2.50300625" y2="0.568715625" layer="200"/>
<rectangle x1="-1.963203125" y1="0.562290625" x2="-1.603334375" y2="0.568715625" layer="200"/>
<rectangle x1="1.5969125" y1="0.562290625" x2="1.96320625" y2="0.568715625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.56871875" x2="-2.50300625" y2="0.57514375" layer="200"/>
<rectangle x1="-1.969628125" y1="0.56871875" x2="-1.603334375" y2="0.57514375" layer="200"/>
<rectangle x1="1.5969125" y1="0.56871875" x2="1.96963125" y2="0.57514375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.57514375" x2="-2.50300625" y2="0.58156875" layer="200"/>
<rectangle x1="-1.976053125" y1="0.57514375" x2="-1.603334375" y2="0.58156875" layer="200"/>
<rectangle x1="1.5969125" y1="0.57514375" x2="1.97605625" y2="0.58156875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.58156875" x2="-2.50300625" y2="0.58799375" layer="200"/>
<rectangle x1="-1.976053125" y1="0.58156875" x2="-1.603334375" y2="0.58799375" layer="200"/>
<rectangle x1="1.5969125" y1="0.58156875" x2="1.98248125" y2="0.58799375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.587996875" x2="-2.50300625" y2="0.594421875" layer="200"/>
<rectangle x1="-1.98890625" y1="0.587996875" x2="-1.6097625" y2="0.594421875" layer="200"/>
<rectangle x1="1.5969125" y1="0.587996875" x2="1.98248125" y2="0.594421875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.594421875" x2="-2.50300625" y2="0.600846875" layer="200"/>
<rectangle x1="-1.995334375" y1="0.594421875" x2="-1.609759375" y2="0.600846875" layer="200"/>
<rectangle x1="1.5969125" y1="0.594421875" x2="1.9889125" y2="0.600846875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.60085" x2="-2.50943125" y2="0.607275" layer="200"/>
<rectangle x1="-2.0146125" y1="0.60085" x2="-1.6097625" y2="0.607275" layer="200"/>
<rectangle x1="1.5969125" y1="0.60085" x2="1.9953375" y2="0.607275" layer="200"/>
<rectangle x1="-2.52228125" y1="0.607275" x2="-2.50943125" y2="0.6137" layer="200"/>
<rectangle x1="-2.040315625" y1="0.607275" x2="-1.609759375" y2="0.6137" layer="200"/>
<rectangle x1="1.5969125" y1="0.607275" x2="1.9953375" y2="0.6137" layer="200"/>
<rectangle x1="-2.52228125" y1="0.6137" x2="-2.50943125" y2="0.620125" layer="200"/>
<rectangle x1="-2.05316875" y1="0.6137" x2="-1.6097625" y2="0.620125" layer="200"/>
<rectangle x1="1.5969125" y1="0.6137" x2="2.0017625" y2="0.620125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.620128125" x2="-2.50943125" y2="0.626553125" layer="200"/>
<rectangle x1="-2.066021875" y1="0.620128125" x2="-1.609759375" y2="0.626553125" layer="200"/>
<rectangle x1="1.5969125" y1="0.620128125" x2="2.0081875" y2="0.626553125" layer="200"/>
<rectangle x1="2.085303125" y1="0.620128125" x2="2.098153125" y2="0.626553125" layer="200"/>
<rectangle x1="2.30379375" y1="0.620128125" x2="2.31664375" y2="0.626553125" layer="200"/>
<rectangle x1="2.3937625" y1="0.620128125" x2="2.44516875" y2="0.626553125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.626553125" x2="-2.50300625" y2="0.632978125" layer="200"/>
<rectangle x1="-2.072446875" y1="0.626553125" x2="-1.609759375" y2="0.632978125" layer="200"/>
<rectangle x1="1.5969125" y1="0.626553125" x2="2.18811875" y2="0.632978125" layer="200"/>
<rectangle x1="2.245959375" y1="0.626553125" x2="2.503003125" y2="0.632978125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.63298125" x2="-2.45801875" y2="0.63940625" layer="200"/>
<rectangle x1="-2.368053125" y1="0.63298125" x2="-2.329496875" y2="0.63940625" layer="200"/>
<rectangle x1="-2.078875" y1="0.63298125" x2="-1.6097625" y2="0.63940625" layer="200"/>
<rectangle x1="1.5969125" y1="0.63298125" x2="2.200975" y2="0.63940625" layer="200"/>
<rectangle x1="2.23310625" y1="0.63298125" x2="2.51585625" y2="0.63940625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.63940625" x2="-2.44516875" y2="0.64583125" layer="200"/>
<rectangle x1="-2.38733125" y1="0.63940625" x2="-2.29736875" y2="0.64583125" layer="200"/>
<rectangle x1="-2.22025" y1="0.63940625" x2="-1.6097625" y2="0.64583125" layer="200"/>
<rectangle x1="1.5969125" y1="0.63940625" x2="2.52228125" y2="0.64583125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.64583125" x2="-2.4194625" y2="0.65225625" layer="200"/>
<rectangle x1="-2.413034375" y1="0.64583125" x2="-1.609759375" y2="0.65225625" layer="200"/>
<rectangle x1="1.5904875" y1="0.64583125" x2="2.52228125" y2="0.65225625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.652259375" x2="-1.6097625" y2="0.658684375" layer="200"/>
<rectangle x1="1.5904875" y1="0.652259375" x2="2.52228125" y2="0.658684375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.658684375" x2="-1.6097625" y2="0.665109375" layer="200"/>
<rectangle x1="1.5904875" y1="0.658684375" x2="2.51585625" y2="0.665109375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.665109375" x2="-1.6097625" y2="0.671534375" layer="200"/>
<rectangle x1="1.5904875" y1="0.665109375" x2="2.51585625" y2="0.671534375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.6715375" x2="-1.6097625" y2="0.6779625" layer="200"/>
<rectangle x1="1.5904875" y1="0.6715375" x2="2.51585625" y2="0.6779625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.6779625" x2="-1.6161875" y2="0.6843875" layer="200"/>
<rectangle x1="1.5904875" y1="0.6779625" x2="1.82183125" y2="0.6843875" layer="200"/>
<rectangle x1="1.83468125" y1="0.6779625" x2="2.51585625" y2="0.6843875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.684390625" x2="-1.6161875" y2="0.690815625" layer="200"/>
<rectangle x1="1.5904875" y1="0.684390625" x2="1.82183125" y2="0.690815625" layer="200"/>
<rectangle x1="1.841109375" y1="0.684390625" x2="2.515859375" y2="0.690815625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.690815625" x2="-1.6161875" y2="0.697240625" layer="200"/>
<rectangle x1="1.5904875" y1="0.690815625" x2="1.8154" y2="0.697240625" layer="200"/>
<rectangle x1="1.841109375" y1="0.690815625" x2="2.509434375" y2="0.697240625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.697240625" x2="-1.6161875" y2="0.703665625" layer="200"/>
<rectangle x1="1.5904875" y1="0.697240625" x2="1.82183125" y2="0.703665625" layer="200"/>
<rectangle x1="1.83468125" y1="0.697240625" x2="2.50943125" y2="0.703665625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.70366875" x2="-1.6161875" y2="0.71009375" layer="200"/>
<rectangle x1="1.5904875" y1="0.70366875" x2="2.50943125" y2="0.71009375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.71009375" x2="-1.6097625" y2="0.71651875" layer="200"/>
<rectangle x1="1.5904875" y1="0.71009375" x2="2.50943125" y2="0.71651875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.716521875" x2="-1.6097625" y2="0.722946875" layer="200"/>
<rectangle x1="1.5904875" y1="0.716521875" x2="2.50943125" y2="0.722946875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.722946875" x2="-1.6097625" y2="0.729371875" layer="200"/>
<rectangle x1="1.5904875" y1="0.722946875" x2="2.51585625" y2="0.729371875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.729371875" x2="-1.6097625" y2="0.735796875" layer="200"/>
<rectangle x1="1.5904875" y1="0.729371875" x2="2.51585625" y2="0.735796875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.7358" x2="-1.6097625" y2="0.742225" layer="200"/>
<rectangle x1="1.5904875" y1="0.7358" x2="2.51585625" y2="0.742225" layer="200"/>
<rectangle x1="-2.52228125" y1="0.742225" x2="-1.6097625" y2="0.74865" layer="200"/>
<rectangle x1="1.5904875" y1="0.742225" x2="2.51585625" y2="0.74865" layer="200"/>
<rectangle x1="-2.52228125" y1="0.74865" x2="-1.6097625" y2="0.755075" layer="200"/>
<rectangle x1="1.5904875" y1="0.74865" x2="2.51585625" y2="0.755075" layer="200"/>
<rectangle x1="-2.52228125" y1="0.755078125" x2="-1.6033375" y2="0.761503125" layer="200"/>
<rectangle x1="1.5904875" y1="0.755078125" x2="2.51585625" y2="0.761503125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.761503125" x2="-1.6033375" y2="0.767928125" layer="200"/>
<rectangle x1="1.5904875" y1="0.761503125" x2="2.51585625" y2="0.767928125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.76793125" x2="-1.6033375" y2="0.77435625" layer="200"/>
<rectangle x1="1.5904875" y1="0.76793125" x2="2.51585625" y2="0.77435625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.77435625" x2="-1.6033375" y2="0.78078125" layer="200"/>
<rectangle x1="1.5904875" y1="0.77435625" x2="2.51585625" y2="0.78078125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.78078125" x2="-1.6033375" y2="0.78720625" layer="200"/>
<rectangle x1="1.5904875" y1="0.78078125" x2="2.50943125" y2="0.78720625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.787209375" x2="-1.6033375" y2="0.793634375" layer="200"/>
<rectangle x1="1.5904875" y1="0.787209375" x2="2.50943125" y2="0.793634375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.793634375" x2="-1.5969125" y2="0.800059375" layer="200"/>
<rectangle x1="1.5904875" y1="0.793634375" x2="2.3552" y2="0.800059375" layer="200"/>
<rectangle x1="2.380909375" y1="0.793634375" x2="2.509434375" y2="0.800059375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.8000625" x2="-1.5969125" y2="0.8064875" layer="200"/>
<rectangle x1="1.5904875" y1="0.8000625" x2="1.8154" y2="0.8064875" layer="200"/>
<rectangle x1="1.83468125" y1="0.8000625" x2="2.348775" y2="0.8064875" layer="200"/>
<rectangle x1="2.3937625" y1="0.8000625" x2="2.50300625" y2="0.8064875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.8064875" x2="-1.5969125" y2="0.8129125" layer="200"/>
<rectangle x1="1.5969125" y1="0.8064875" x2="1.80255" y2="0.8129125" layer="200"/>
<rectangle x1="1.841109375" y1="0.8064875" x2="2.348778125" y2="0.8129125" layer="200"/>
<rectangle x1="2.3937625" y1="0.8064875" x2="2.50300625" y2="0.8129125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.8129125" x2="-1.5969125" y2="0.8193375" layer="200"/>
<rectangle x1="1.5969125" y1="0.8129125" x2="1.796125" y2="0.8193375" layer="200"/>
<rectangle x1="1.841109375" y1="0.8129125" x2="2.503003125" y2="0.8193375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.819340625" x2="-1.5969125" y2="0.825765625" layer="200"/>
<rectangle x1="1.603340625" y1="0.819340625" x2="1.796121875" y2="0.825765625" layer="200"/>
<rectangle x1="1.841109375" y1="0.819340625" x2="2.503003125" y2="0.825765625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.825765625" x2="-1.5969125" y2="0.832190625" layer="200"/>
<rectangle x1="1.603340625" y1="0.825765625" x2="1.796121875" y2="0.832190625" layer="200"/>
<rectangle x1="1.82825625" y1="0.825765625" x2="2.50300625" y2="0.832190625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.832190625" x2="-1.5969125" y2="0.838615625" layer="200"/>
<rectangle x1="1.603340625" y1="0.832190625" x2="1.802546875" y2="0.838615625" layer="200"/>
<rectangle x1="1.82183125" y1="0.832190625" x2="2.50943125" y2="0.838615625" layer="200"/>
<rectangle x1="-2.52228125" y1="0.83861875" x2="-1.5969125" y2="0.84504375" layer="200"/>
<rectangle x1="1.603340625" y1="0.83861875" x2="2.509434375" y2="0.84504375" layer="200"/>
<rectangle x1="-2.52228125" y1="0.84504375" x2="-1.5969125" y2="0.85146875" layer="200"/>
<rectangle x1="1.603340625" y1="0.84504375" x2="2.509434375" y2="0.85146875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.851471875" x2="-1.5969125" y2="0.857896875" layer="200"/>
<rectangle x1="1.5969125" y1="0.851471875" x2="2.50943125" y2="0.857896875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.857896875" x2="-1.5969125" y2="0.864321875" layer="200"/>
<rectangle x1="1.5904875" y1="0.857896875" x2="2.50943125" y2="0.864321875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.864321875" x2="-1.5969125" y2="0.870746875" layer="200"/>
<rectangle x1="1.584059375" y1="0.864321875" x2="2.515859375" y2="0.870746875" layer="200"/>
<rectangle x1="-2.52228125" y1="0.87075" x2="-1.5969125" y2="0.877175" layer="200"/>
<rectangle x1="1.584059375" y1="0.87075" x2="2.515859375" y2="0.877175" layer="200"/>
<rectangle x1="-2.52228125" y1="0.877175" x2="-1.5969125" y2="0.8836" layer="200"/>
<rectangle x1="1.584059375" y1="0.877175" x2="2.515859375" y2="0.8836" layer="200"/>
<rectangle x1="-2.52228125" y1="0.883603125" x2="-1.5969125" y2="0.890028125" layer="200"/>
<rectangle x1="1.584059375" y1="0.883603125" x2="2.438740625" y2="0.890028125" layer="200"/>
<rectangle x1="2.470875" y1="0.883603125" x2="2.51585625" y2="0.890028125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.890028125" x2="-2.496575" y2="0.896453125" layer="200"/>
<rectangle x1="-2.49015" y1="0.890028125" x2="-1.5969125" y2="0.896453125" layer="200"/>
<rectangle x1="1.584059375" y1="0.890028125" x2="2.393759375" y2="0.896453125" layer="200"/>
<rectangle x1="2.477303125" y1="0.890028125" x2="2.515859375" y2="0.896453125" layer="200"/>
<rectangle x1="-2.52228125" y1="0.896453125" x2="-2.51585625" y2="0.902878125" layer="200"/>
<rectangle x1="-2.483725" y1="0.896453125" x2="-1.5969125" y2="0.902878125" layer="200"/>
<rectangle x1="1.5904875" y1="0.896453125" x2="2.09815625" y2="0.902878125" layer="200"/>
<rectangle x1="2.335925" y1="0.896453125" x2="2.38090625" y2="0.902878125" layer="200"/>
<rectangle x1="2.483728125" y1="0.896453125" x2="2.515859375" y2="0.902878125" layer="200"/>
<rectangle x1="-2.477296875" y1="0.90288125" x2="-1.590484375" y2="0.90930625" layer="200"/>
<rectangle x1="1.5904875" y1="0.90288125" x2="2.078875" y2="0.90930625" layer="200"/>
<rectangle x1="2.483728125" y1="0.90288125" x2="2.515859375" y2="0.90930625" layer="200"/>
<rectangle x1="-2.470871875" y1="0.90930625" x2="-2.432315625" y2="0.91573125" layer="200"/>
<rectangle x1="-2.374478125" y1="0.90930625" x2="-1.571203125" y2="0.91573125" layer="200"/>
<rectangle x1="1.5904875" y1="0.90930625" x2="2.066025" y2="0.91573125" layer="200"/>
<rectangle x1="2.49015625" y1="0.90930625" x2="2.51585625" y2="0.91573125" layer="200"/>
<rectangle x1="-2.265234375" y1="0.91573125" x2="-2.226678125" y2="0.92215625" layer="200"/>
<rectangle x1="-2.05316875" y1="0.91573125" x2="-1.56478125" y2="0.92215625" layer="200"/>
<rectangle x1="1.5969125" y1="0.91573125" x2="2.0081875" y2="0.92215625" layer="200"/>
<rectangle x1="2.49658125" y1="0.91573125" x2="2.51585625" y2="0.92215625" layer="200"/>
<rectangle x1="-2.0210375" y1="0.922159375" x2="-1.57120625" y2="0.928584375" layer="200"/>
<rectangle x1="1.5969125" y1="0.922159375" x2="2.0017625" y2="0.928584375" layer="200"/>
<rectangle x1="2.36163125" y1="0.922159375" x2="2.38733125" y2="0.928584375" layer="200"/>
<rectangle x1="2.50300625" y1="0.922159375" x2="2.51585625" y2="0.928584375" layer="200"/>
<rectangle x1="-2.0146125" y1="0.928584375" x2="-1.58405625" y2="0.935009375" layer="200"/>
<rectangle x1="1.5969125" y1="0.928584375" x2="1.9953375" y2="0.935009375" layer="200"/>
<rectangle x1="-2.008184375" y1="0.9350125" x2="-1.596909375" y2="0.9414375" layer="200"/>
<rectangle x1="1.603340625" y1="0.9350125" x2="1.988909375" y2="0.9414375" layer="200"/>
<rectangle x1="-2.001759375" y1="0.9414375" x2="-1.596909375" y2="0.9478625" layer="200"/>
<rectangle x1="1.603340625" y1="0.9414375" x2="1.982484375" y2="0.9478625" layer="200"/>
<rectangle x1="-2.001759375" y1="0.9478625" x2="-1.603334375" y2="0.9542875" layer="200"/>
<rectangle x1="1.603340625" y1="0.9478625" x2="1.976059375" y2="0.9542875" layer="200"/>
<rectangle x1="-1.995334375" y1="0.954290625" x2="-1.603334375" y2="0.960715625" layer="200"/>
<rectangle x1="1.5969125" y1="0.954290625" x2="1.96320625" y2="0.960715625" layer="200"/>
<rectangle x1="-1.98890625" y1="0.960715625" x2="-1.6097625" y2="0.967140625" layer="200"/>
<rectangle x1="1.5969125" y1="0.960715625" x2="1.95678125" y2="0.967140625" layer="200"/>
<rectangle x1="-1.98890625" y1="0.96714375" x2="-1.6097625" y2="0.97356875" layer="200"/>
<rectangle x1="1.5904875" y1="0.96714375" x2="1.95678125" y2="0.97356875" layer="200"/>
<rectangle x1="-2.0274625" y1="0.97356875" x2="-2.0210375" y2="0.97999375" layer="200"/>
<rectangle x1="-1.98248125" y1="0.97356875" x2="-1.6161875" y2="0.97999375" layer="200"/>
<rectangle x1="1.5904875" y1="0.97356875" x2="1.64189375" y2="0.97999375" layer="200"/>
<rectangle x1="1.661175" y1="0.97356875" x2="1.95678125" y2="0.97999375" layer="200"/>
<rectangle x1="-2.0274625" y1="0.97999375" x2="-2.0210375" y2="0.98641875" layer="200"/>
<rectangle x1="-1.976053125" y1="0.97999375" x2="-1.616190625" y2="0.98641875" layer="200"/>
<rectangle x1="1.584059375" y1="0.97999375" x2="1.635465625" y2="0.98641875" layer="200"/>
<rectangle x1="1.674028125" y1="0.97999375" x2="1.950353125" y2="0.98641875" layer="200"/>
<rectangle x1="-2.0274625" y1="0.986421875" x2="-2.0210375" y2="0.992846875" layer="200"/>
<rectangle x1="-1.976053125" y1="0.986421875" x2="-1.616190625" y2="0.992846875" layer="200"/>
<rectangle x1="1.577634375" y1="0.986421875" x2="1.635465625" y2="0.992846875" layer="200"/>
<rectangle x1="1.674028125" y1="0.986421875" x2="1.950353125" y2="0.992846875" layer="200"/>
<rectangle x1="-2.0274625" y1="0.992846875" x2="-2.0210375" y2="0.999271875" layer="200"/>
<rectangle x1="-1.969628125" y1="0.992846875" x2="-1.616190625" y2="0.999271875" layer="200"/>
<rectangle x1="1.577634375" y1="0.992846875" x2="1.635465625" y2="0.999271875" layer="200"/>
<rectangle x1="1.674028125" y1="0.992846875" x2="1.950353125" y2="0.999271875" layer="200"/>
<rectangle x1="-1.963203125" y1="0.999271875" x2="-1.616190625" y2="1.005696875" layer="200"/>
<rectangle x1="1.577634375" y1="0.999271875" x2="1.641896875" y2="1.005696875" layer="200"/>
<rectangle x1="1.6676" y1="0.999271875" x2="1.95035" y2="1.005696875" layer="200"/>
<rectangle x1="-1.956775" y1="1.0057" x2="-1.6161875" y2="1.012125" layer="200"/>
<rectangle x1="1.577634375" y1="1.0057" x2="1.950353125" y2="1.012125" layer="200"/>
<rectangle x1="-1.956775" y1="1.012125" x2="-1.6161875" y2="1.01855" layer="200"/>
<rectangle x1="1.584059375" y1="1.012125" x2="1.950353125" y2="1.01855" layer="200"/>
<rectangle x1="-1.956775" y1="1.018553125" x2="-1.6097625" y2="1.024978125" layer="200"/>
<rectangle x1="1.584059375" y1="1.018553125" x2="1.950353125" y2="1.024978125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.024978125" x2="-2.51585625" y2="1.031403125" layer="200"/>
<rectangle x1="-1.956775" y1="1.024978125" x2="-1.6097625" y2="1.031403125" layer="200"/>
<rectangle x1="1.5904875" y1="1.024978125" x2="1.95035" y2="1.031403125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.031403125" x2="-2.51585625" y2="1.037828125" layer="200"/>
<rectangle x1="-1.956775" y1="1.031403125" x2="-1.6033375" y2="1.037828125" layer="200"/>
<rectangle x1="-1.5455" y1="1.031403125" x2="-1.539075" y2="1.037828125" layer="200"/>
<rectangle x1="1.5969125" y1="1.031403125" x2="1.95035" y2="1.037828125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.03783125" x2="-2.51585625" y2="1.04425625" layer="200"/>
<rectangle x1="-1.956775" y1="1.03783125" x2="-1.6033375" y2="1.04425625" layer="200"/>
<rectangle x1="-1.551925" y1="1.03783125" x2="-1.539075" y2="1.04425625" layer="200"/>
<rectangle x1="1.5969125" y1="1.03783125" x2="1.95035" y2="1.04425625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.04425625" x2="-2.51585625" y2="1.05068125" layer="200"/>
<rectangle x1="-1.956775" y1="1.04425625" x2="-1.6033375" y2="1.05068125" layer="200"/>
<rectangle x1="-1.55835" y1="1.04425625" x2="-1.539075" y2="1.05068125" layer="200"/>
<rectangle x1="1.5969125" y1="1.04425625" x2="1.95035" y2="1.05068125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.050684375" x2="-2.51585625" y2="1.057109375" layer="200"/>
<rectangle x1="-1.956775" y1="1.050684375" x2="-1.6033375" y2="1.057109375" layer="200"/>
<rectangle x1="-1.55835" y1="1.050684375" x2="-1.539075" y2="1.057109375" layer="200"/>
<rectangle x1="1.5969125" y1="1.050684375" x2="1.95035" y2="1.057109375" layer="200"/>
<rectangle x1="-1.956775" y1="1.057109375" x2="-1.6097625" y2="1.063534375" layer="200"/>
<rectangle x1="-1.564778125" y1="1.057109375" x2="-1.539071875" y2="1.063534375" layer="200"/>
<rectangle x1="1.5969125" y1="1.057109375" x2="1.95035" y2="1.063534375" layer="200"/>
<rectangle x1="-1.963203125" y1="1.063534375" x2="-1.616190625" y2="1.069959375" layer="200"/>
<rectangle x1="-1.564778125" y1="1.063534375" x2="-1.539071875" y2="1.069959375" layer="200"/>
<rectangle x1="1.5969125" y1="1.063534375" x2="1.95678125" y2="1.069959375" layer="200"/>
<rectangle x1="-1.969628125" y1="1.0699625" x2="-1.616190625" y2="1.0763875" layer="200"/>
<rectangle x1="-1.564778125" y1="1.0699625" x2="-1.539071875" y2="1.0763875" layer="200"/>
<rectangle x1="1.5969125" y1="1.0699625" x2="1.96320625" y2="1.0763875" layer="200"/>
<rectangle x1="-1.976053125" y1="1.0763875" x2="-1.616190625" y2="1.0828125" layer="200"/>
<rectangle x1="-1.564778125" y1="1.0763875" x2="-1.539071875" y2="1.0828125" layer="200"/>
<rectangle x1="1.5969125" y1="1.0763875" x2="1.96963125" y2="1.0828125" layer="200"/>
<rectangle x1="-1.995334375" y1="1.0828125" x2="-1.616190625" y2="1.0892375" layer="200"/>
<rectangle x1="-1.55835" y1="1.0828125" x2="-1.539075" y2="1.0892375" layer="200"/>
<rectangle x1="1.5969125" y1="1.0828125" x2="1.97605625" y2="1.0892375" layer="200"/>
<rectangle x1="-2.008184375" y1="1.089240625" x2="-1.616190625" y2="1.095665625" layer="200"/>
<rectangle x1="-1.55835" y1="1.089240625" x2="-1.539075" y2="1.095665625" layer="200"/>
<rectangle x1="1.5969125" y1="1.089240625" x2="1.98248125" y2="1.095665625" layer="200"/>
<rectangle x1="-2.008184375" y1="1.095665625" x2="-1.616190625" y2="1.102090625" layer="200"/>
<rectangle x1="-1.5455" y1="1.095665625" x2="-1.539075" y2="1.102090625" layer="200"/>
<rectangle x1="1.5969125" y1="1.095665625" x2="1.9889125" y2="1.102090625" layer="200"/>
<rectangle x1="-2.0210375" y1="1.10209375" x2="-1.6161875" y2="1.10851875" layer="200"/>
<rectangle x1="1.5969125" y1="1.10209375" x2="1.9953375" y2="1.10851875" layer="200"/>
<rectangle x1="-2.04674375" y1="1.10851875" x2="-1.6097625" y2="1.11494375" layer="200"/>
<rectangle x1="1.5969125" y1="1.10851875" x2="2.0017625" y2="1.11494375" layer="200"/>
<rectangle x1="-2.05959375" y1="1.11494375" x2="-1.6097625" y2="1.12136875" layer="200"/>
<rectangle x1="1.5969125" y1="1.11494375" x2="2.0017625" y2="1.12136875" layer="200"/>
<rectangle x1="2.49658125" y1="1.11494375" x2="2.51585625" y2="1.12136875" layer="200"/>
<rectangle x1="-2.078875" y1="1.121371875" x2="-1.6097625" y2="1.127796875" layer="200"/>
<rectangle x1="1.5969125" y1="1.121371875" x2="2.05316875" y2="1.127796875" layer="200"/>
<rectangle x1="2.3937625" y1="1.121371875" x2="2.51585625" y2="1.127796875" layer="200"/>
<rectangle x1="-2.098153125" y1="1.127796875" x2="-1.609759375" y2="1.134221875" layer="200"/>
<rectangle x1="1.5969125" y1="1.127796875" x2="2.07245" y2="1.134221875" layer="200"/>
<rectangle x1="2.3295" y1="1.127796875" x2="2.51585625" y2="1.134221875" layer="200"/>
<rectangle x1="-2.464446875" y1="1.134225" x2="-2.432315625" y2="1.14065" layer="200"/>
<rectangle x1="-2.32306875" y1="1.134225" x2="-1.6161875" y2="1.14065" layer="200"/>
<rectangle x1="1.5969125" y1="1.134225" x2="2.078875" y2="1.14065" layer="200"/>
<rectangle x1="2.316646875" y1="1.134225" x2="2.515859375" y2="1.14065" layer="200"/>
<rectangle x1="-2.470871875" y1="1.14065" x2="-2.419465625" y2="1.147075" layer="200"/>
<rectangle x1="-2.400184375" y1="1.14065" x2="-1.616190625" y2="1.147075" layer="200"/>
<rectangle x1="1.5969125" y1="1.14065" x2="2.09815625" y2="1.147075" layer="200"/>
<rectangle x1="2.117434375" y1="1.14065" x2="2.143140625" y2="1.147075" layer="200"/>
<rectangle x1="2.19455" y1="1.14065" x2="2.51585625" y2="1.147075" layer="200"/>
<rectangle x1="-2.52228125" y1="1.147075" x2="-2.51585625" y2="1.1535" layer="200"/>
<rectangle x1="-2.49015" y1="1.147075" x2="-1.6161875" y2="1.1535" layer="200"/>
<rectangle x1="1.5969125" y1="1.147075" x2="2.51585625" y2="1.1535" layer="200"/>
<rectangle x1="-2.52228125" y1="1.153503125" x2="-1.6161875" y2="1.159928125" layer="200"/>
<rectangle x1="1.5969125" y1="1.153503125" x2="2.51585625" y2="1.159928125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.159928125" x2="-1.6226125" y2="1.166353125" layer="200"/>
<rectangle x1="1.5904875" y1="1.159928125" x2="2.51585625" y2="1.166353125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.166353125" x2="-1.6161875" y2="1.172778125" layer="200"/>
<rectangle x1="1.5904875" y1="1.166353125" x2="2.51585625" y2="1.172778125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.17278125" x2="-1.6161875" y2="1.17920625" layer="200"/>
<rectangle x1="1.584059375" y1="1.17278125" x2="2.515859375" y2="1.17920625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.17920625" x2="-1.6161875" y2="1.18563125" layer="200"/>
<rectangle x1="1.584059375" y1="1.17920625" x2="2.515859375" y2="1.18563125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.185634375" x2="-1.6097625" y2="1.192059375" layer="200"/>
<rectangle x1="1.584059375" y1="1.185634375" x2="2.515859375" y2="1.192059375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.192059375" x2="-1.6097625" y2="1.198484375" layer="200"/>
<rectangle x1="1.584059375" y1="1.192059375" x2="2.515859375" y2="1.198484375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.198484375" x2="-1.6033375" y2="1.204909375" layer="200"/>
<rectangle x1="1.584059375" y1="1.198484375" x2="2.515859375" y2="1.204909375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.2049125" x2="-1.6033375" y2="1.2113375" layer="200"/>
<rectangle x1="1.584059375" y1="1.2049125" x2="2.515859375" y2="1.2113375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.2113375" x2="-1.6033375" y2="1.2177625" layer="200"/>
<rectangle x1="1.584059375" y1="1.2113375" x2="2.509434375" y2="1.2177625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.2177625" x2="-1.6033375" y2="1.2241875" layer="200"/>
<rectangle x1="1.577634375" y1="1.2177625" x2="2.509434375" y2="1.2241875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.224190625" x2="-1.6033375" y2="1.230615625" layer="200"/>
<rectangle x1="1.577634375" y1="1.224190625" x2="2.509434375" y2="1.230615625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.230615625" x2="-1.6033375" y2="1.237040625" layer="200"/>
<rectangle x1="1.577634375" y1="1.230615625" x2="2.194546875" y2="1.237040625" layer="200"/>
<rectangle x1="2.200975" y1="1.230615625" x2="2.50943125" y2="1.237040625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.23704375" x2="-1.6033375" y2="1.24346875" layer="200"/>
<rectangle x1="1.577634375" y1="1.23704375" x2="1.654746875" y2="1.24346875" layer="200"/>
<rectangle x1="1.674028125" y1="1.23704375" x2="2.509434375" y2="1.24346875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.24346875" x2="-1.6033375" y2="1.24989375" layer="200"/>
<rectangle x1="1.571209375" y1="1.24346875" x2="1.648321875" y2="1.24989375" layer="200"/>
<rectangle x1="1.680453125" y1="1.24346875" x2="2.509434375" y2="1.24989375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.24989375" x2="-1.6033375" y2="1.25631875" layer="200"/>
<rectangle x1="1.571209375" y1="1.24989375" x2="1.648321875" y2="1.25631875" layer="200"/>
<rectangle x1="1.68688125" y1="1.24989375" x2="2.50943125" y2="1.25631875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.256321875" x2="-1.5969125" y2="1.262746875" layer="200"/>
<rectangle x1="1.56478125" y1="1.256321875" x2="1.64831875" y2="1.262746875" layer="200"/>
<rectangle x1="1.69330625" y1="1.256321875" x2="2.50943125" y2="1.262746875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.262746875" x2="-1.59048125" y2="1.269171875" layer="200"/>
<rectangle x1="1.55835625" y1="1.262746875" x2="1.64831875" y2="1.269171875" layer="200"/>
<rectangle x1="1.69330625" y1="1.262746875" x2="2.50943125" y2="1.269171875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.269175" x2="-1.59048125" y2="1.2756" layer="200"/>
<rectangle x1="1.551928125" y1="1.269175" x2="1.654746875" y2="1.2756" layer="200"/>
<rectangle x1="1.68688125" y1="1.269175" x2="2.25238125" y2="1.2756" layer="200"/>
<rectangle x1="2.2716625" y1="1.269175" x2="2.50943125" y2="1.2756" layer="200"/>
<rectangle x1="-2.52228125" y1="1.2756" x2="-1.58405625" y2="1.282025" layer="200"/>
<rectangle x1="1.545503125" y1="1.2756" x2="1.654746875" y2="1.282025" layer="200"/>
<rectangle x1="1.68688125" y1="1.2756" x2="2.25238125" y2="1.282025" layer="200"/>
<rectangle x1="2.2716625" y1="1.2756" x2="2.50943125" y2="1.282025" layer="200"/>
<rectangle x1="-2.52228125" y1="1.282025" x2="-1.59048125" y2="1.28845" layer="200"/>
<rectangle x1="1.545503125" y1="1.282025" x2="2.509434375" y2="1.28845" layer="200"/>
<rectangle x1="-2.52228125" y1="1.288453125" x2="-1.59048125" y2="1.294878125" layer="200"/>
<rectangle x1="1.539078125" y1="1.288453125" x2="2.509434375" y2="1.294878125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.294878125" x2="-1.5969125" y2="1.301303125" layer="200"/>
<rectangle x1="1.53265" y1="1.294878125" x2="2.50943125" y2="1.301303125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.301303125" x2="-1.5969125" y2="1.307728125" layer="200"/>
<rectangle x1="1.5198" y1="1.301303125" x2="2.51585625" y2="1.307728125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.30773125" x2="-1.6033375" y2="1.31415625" layer="200"/>
<rectangle x1="1.506946875" y1="1.30773125" x2="2.515859375" y2="1.31415625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.31415625" x2="-1.6033375" y2="1.32058125" layer="200"/>
<rectangle x1="1.49409375" y1="1.31415625" x2="2.51585625" y2="1.32058125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.320584375" x2="-1.6097625" y2="1.327009375" layer="200"/>
<rectangle x1="1.481240625" y1="1.320584375" x2="2.515859375" y2="1.327009375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.327009375" x2="-1.6097625" y2="1.333434375" layer="200"/>
<rectangle x1="1.4683875" y1="1.327009375" x2="2.51585625" y2="1.333434375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.333434375" x2="-1.6161875" y2="1.339859375" layer="200"/>
<rectangle x1="1.449109375" y1="1.333434375" x2="2.515859375" y2="1.339859375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.3398625" x2="-1.6161875" y2="1.3462875" layer="200"/>
<rectangle x1="1.436259375" y1="1.3398625" x2="2.509434375" y2="1.3462875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.3462875" x2="-1.6161875" y2="1.3527125" layer="200"/>
<rectangle x1="1.42340625" y1="1.3462875" x2="2.50943125" y2="1.3527125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.352715625" x2="-1.6161875" y2="1.359140625" layer="200"/>
<rectangle x1="1.416978125" y1="1.352715625" x2="2.509434375" y2="1.359140625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.359140625" x2="-1.6097625" y2="1.365565625" layer="200"/>
<rectangle x1="1.410553125" y1="1.359140625" x2="2.509434375" y2="1.365565625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.365565625" x2="-1.6097625" y2="1.371990625" layer="200"/>
<rectangle x1="1.404128125" y1="1.365565625" x2="2.509434375" y2="1.371990625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.37199375" x2="-1.6033375" y2="1.37841875" layer="200"/>
<rectangle x1="1.404128125" y1="1.37199375" x2="2.509434375" y2="1.37841875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.37841875" x2="-1.6033375" y2="1.38484375" layer="200"/>
<rectangle x1="1.3977" y1="1.37841875" x2="2.50943125" y2="1.38484375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.38484375" x2="-2.496575" y2="1.39126875" layer="200"/>
<rectangle x1="-2.483725" y1="1.38484375" x2="-1.6033375" y2="1.39126875" layer="200"/>
<rectangle x1="1.3977" y1="1.38484375" x2="2.50300625" y2="1.39126875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.391271875" x2="-2.51585625" y2="1.397696875" layer="200"/>
<rectangle x1="-2.470871875" y1="1.391271875" x2="-1.596909375" y2="1.397696875" layer="200"/>
<rectangle x1="1.384846875" y1="1.391271875" x2="2.117434375" y2="1.397696875" layer="200"/>
<rectangle x1="2.1367125" y1="1.391271875" x2="2.49015625" y2="1.397696875" layer="200"/>
<rectangle x1="-2.45801875" y1="1.397696875" x2="-1.5969125" y2="1.404121875" layer="200"/>
<rectangle x1="1.378421875" y1="1.397696875" x2="2.078878125" y2="1.404121875" layer="200"/>
<rectangle x1="2.15599375" y1="1.397696875" x2="2.2074" y2="1.404121875" layer="200"/>
<rectangle x1="2.252384375" y1="1.397696875" x2="2.477303125" y2="1.404121875" layer="200"/>
<rectangle x1="-2.45159375" y1="1.404125" x2="-1.5969125" y2="1.41055" layer="200"/>
<rectangle x1="1.371996875" y1="1.404125" x2="2.072453125" y2="1.41055" layer="200"/>
<rectangle x1="2.413040625" y1="1.404125" x2="2.470871875" y2="1.41055" layer="200"/>
<rectangle x1="-2.445165625" y1="1.41055" x2="-2.374478125" y2="1.416975" layer="200"/>
<rectangle x1="-2.32306875" y1="1.41055" x2="-2.18169375" y2="1.416975" layer="200"/>
<rectangle x1="-2.11743125" y1="1.41055" x2="-1.59048125" y2="1.416975" layer="200"/>
<rectangle x1="1.36556875" y1="1.41055" x2="2.066025" y2="1.416975" layer="200"/>
<rectangle x1="2.42589375" y1="1.41055" x2="2.470875" y2="1.416975" layer="200"/>
<rectangle x1="-2.438740625" y1="1.416975" x2="-2.387334375" y2="1.4234" layer="200"/>
<rectangle x1="-2.310215625" y1="1.416975" x2="-2.258809375" y2="1.4234" layer="200"/>
<rectangle x1="-2.226675" y1="1.416975" x2="-2.2074" y2="1.4234" layer="200"/>
<rectangle x1="-2.033890625" y1="1.416975" x2="-1.590484375" y2="1.4234" layer="200"/>
<rectangle x1="1.36556875" y1="1.416975" x2="2.0017625" y2="1.4234" layer="200"/>
<rectangle x1="2.43874375" y1="1.416975" x2="2.470875" y2="1.4234" layer="200"/>
<rectangle x1="-2.4258875" y1="1.423403125" x2="-2.4066125" y2="1.429828125" layer="200"/>
<rectangle x1="-2.297365625" y1="1.423403125" x2="-2.271659375" y2="1.429828125" layer="200"/>
<rectangle x1="-2.0210375" y1="1.423403125" x2="-1.59048125" y2="1.429828125" layer="200"/>
<rectangle x1="1.35914375" y1="1.423403125" x2="1.9953375" y2="1.429828125" layer="200"/>
<rectangle x1="2.43874375" y1="1.423403125" x2="2.470875" y2="1.429828125" layer="200"/>
<rectangle x1="-2.0146125" y1="1.429828125" x2="-1.5969125" y2="1.436253125" layer="200"/>
<rectangle x1="1.35271875" y1="1.429828125" x2="1.9889125" y2="1.436253125" layer="200"/>
<rectangle x1="2.43874375" y1="1.429828125" x2="2.46445" y2="1.436253125" layer="200"/>
<rectangle x1="-1.995334375" y1="1.43625625" x2="-1.596909375" y2="1.44268125" layer="200"/>
<rectangle x1="1.339865625" y1="1.43625625" x2="1.982484375" y2="1.44268125" layer="200"/>
<rectangle x1="2.43874375" y1="1.43625625" x2="2.458025" y2="1.44268125" layer="200"/>
<rectangle x1="-1.995334375" y1="1.44268125" x2="-1.609759375" y2="1.44910625" layer="200"/>
<rectangle x1="1.3334375" y1="1.44268125" x2="1.97605625" y2="1.44910625" layer="200"/>
<rectangle x1="-1.995334375" y1="1.44910625" x2="-1.609759375" y2="1.45553125" layer="200"/>
<rectangle x1="-1.571203125" y1="1.44910625" x2="-1.558353125" y2="1.45553125" layer="200"/>
<rectangle x1="1.3270125" y1="1.44910625" x2="1.96963125" y2="1.45553125" layer="200"/>
<rectangle x1="-1.98890625" y1="1.455534375" x2="-1.6161875" y2="1.461959375" layer="200"/>
<rectangle x1="-1.57763125" y1="1.455534375" x2="-1.551925" y2="1.461959375" layer="200"/>
<rectangle x1="1.3205875" y1="1.455534375" x2="1.96963125" y2="1.461959375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.461959375" x2="-2.51585625" y2="1.468384375" layer="200"/>
<rectangle x1="-1.98248125" y1="1.461959375" x2="-1.6161875" y2="1.468384375" layer="200"/>
<rectangle x1="-1.571203125" y1="1.461959375" x2="-1.551928125" y2="1.468384375" layer="200"/>
<rectangle x1="1.3205875" y1="1.461959375" x2="1.96963125" y2="1.468384375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.468384375" x2="-2.51585625" y2="1.474809375" layer="200"/>
<rectangle x1="-1.976053125" y1="1.468384375" x2="-1.616190625" y2="1.474809375" layer="200"/>
<rectangle x1="-1.564778125" y1="1.468384375" x2="-1.558353125" y2="1.474809375" layer="200"/>
<rectangle x1="1.314159375" y1="1.468384375" x2="1.969628125" y2="1.474809375" layer="200"/>
<rectangle x1="-1.976053125" y1="1.4748125" x2="-1.609759375" y2="1.4812375" layer="200"/>
<rectangle x1="1.307734375" y1="1.4748125" x2="1.969628125" y2="1.4812375" layer="200"/>
<rectangle x1="-1.976053125" y1="1.4812375" x2="-1.590484375" y2="1.4876625" layer="200"/>
<rectangle x1="1.30130625" y1="1.4812375" x2="1.96320625" y2="1.4876625" layer="200"/>
<rectangle x1="-1.976053125" y1="1.487665625" x2="-1.584059375" y2="1.494090625" layer="200"/>
<rectangle x1="1.29488125" y1="1.487665625" x2="1.96320625" y2="1.494090625" layer="200"/>
<rectangle x1="-1.976053125" y1="1.494090625" x2="-1.584059375" y2="1.500515625" layer="200"/>
<rectangle x1="1.29488125" y1="1.494090625" x2="1.95678125" y2="1.500515625" layer="200"/>
<rectangle x1="-1.976053125" y1="1.500515625" x2="-1.584059375" y2="1.506940625" layer="200"/>
<rectangle x1="1.28845625" y1="1.500515625" x2="1.95035" y2="1.506940625" layer="200"/>
<rectangle x1="-1.976053125" y1="1.50694375" x2="-1.584059375" y2="1.51336875" layer="200"/>
<rectangle x1="1.282028125" y1="1.50694375" x2="1.943928125" y2="1.51336875" layer="200"/>
<rectangle x1="-1.969628125" y1="1.51336875" x2="-1.584059375" y2="1.51979375" layer="200"/>
<rectangle x1="1.282028125" y1="1.51336875" x2="1.943928125" y2="1.51979375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.519796875" x2="-2.51585625" y2="1.526221875" layer="200"/>
<rectangle x1="-1.969628125" y1="1.519796875" x2="-1.584059375" y2="1.526221875" layer="200"/>
<rectangle x1="1.275603125" y1="1.519796875" x2="1.943928125" y2="1.526221875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.526221875" x2="-2.51585625" y2="1.532646875" layer="200"/>
<rectangle x1="-1.963203125" y1="1.526221875" x2="-1.584059375" y2="1.532646875" layer="200"/>
<rectangle x1="1.282028125" y1="1.526221875" x2="1.943928125" y2="1.532646875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.532646875" x2="-2.51585625" y2="1.539071875" layer="200"/>
<rectangle x1="-1.956775" y1="1.532646875" x2="-1.59048125" y2="1.539071875" layer="200"/>
<rectangle x1="1.282028125" y1="1.532646875" x2="1.943928125" y2="1.539071875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.539075" x2="-2.50943125" y2="1.5455" layer="200"/>
<rectangle x1="-1.956775" y1="1.539075" x2="-1.59048125" y2="1.5455" layer="200"/>
<rectangle x1="1.282028125" y1="1.539075" x2="1.943928125" y2="1.5455" layer="200"/>
<rectangle x1="-2.52228125" y1="1.5455" x2="-2.50943125" y2="1.551925" layer="200"/>
<rectangle x1="-1.956775" y1="1.5455" x2="-1.58405625" y2="1.551925" layer="200"/>
<rectangle x1="1.282028125" y1="1.5455" x2="1.950353125" y2="1.551925" layer="200"/>
<rectangle x1="-2.52228125" y1="1.551925" x2="-2.50300625" y2="1.55835" layer="200"/>
<rectangle x1="-1.956775" y1="1.551925" x2="-1.57763125" y2="1.55835" layer="200"/>
<rectangle x1="-0.388784375" y1="1.551925" x2="-0.375934375" y2="1.55835" layer="200"/>
<rectangle x1="1.275603125" y1="1.551925" x2="1.950353125" y2="1.55835" layer="200"/>
<rectangle x1="-2.52228125" y1="1.558353125" x2="-2.50300625" y2="1.564778125" layer="200"/>
<rectangle x1="-1.963203125" y1="1.558353125" x2="-1.571203125" y2="1.564778125" layer="200"/>
<rectangle x1="1.275603125" y1="1.558353125" x2="1.956778125" y2="1.564778125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.564778125" x2="-2.50300625" y2="1.571203125" layer="200"/>
<rectangle x1="-1.963203125" y1="1.564778125" x2="-1.564778125" y2="1.571203125" layer="200"/>
<rectangle x1="1.275603125" y1="1.564778125" x2="1.963203125" y2="1.571203125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.57120625" x2="-2.50943125" y2="1.57763125" layer="200"/>
<rectangle x1="-1.963203125" y1="1.57120625" x2="-1.558353125" y2="1.57763125" layer="200"/>
<rectangle x1="1.269178125" y1="1.57120625" x2="1.969628125" y2="1.57763125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.57763125" x2="-2.50943125" y2="1.58405625" layer="200"/>
<rectangle x1="-1.969628125" y1="1.57763125" x2="-1.551928125" y2="1.58405625" layer="200"/>
<rectangle x1="1.26275" y1="1.57763125" x2="1.96963125" y2="1.58405625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.58405625" x2="-2.51585625" y2="1.59048125" layer="200"/>
<rectangle x1="-1.976053125" y1="1.58405625" x2="-1.539071875" y2="1.59048125" layer="200"/>
<rectangle x1="1.249896875" y1="1.58405625" x2="1.969628125" y2="1.59048125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.590484375" x2="-2.51585625" y2="1.596909375" layer="200"/>
<rectangle x1="-1.98248125" y1="1.590484375" x2="-1.53265" y2="1.596909375" layer="200"/>
<rectangle x1="1.23061875" y1="1.590484375" x2="1.97605625" y2="1.596909375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.596909375" x2="-2.51585625" y2="1.603334375" layer="200"/>
<rectangle x1="-1.98890625" y1="1.596909375" x2="-1.51979375" y2="1.603334375" layer="200"/>
<rectangle x1="-1.4234" y1="1.596909375" x2="-1.41055" y2="1.603334375" layer="200"/>
<rectangle x1="1.22419375" y1="1.596909375" x2="1.98248125" y2="1.603334375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.6033375" x2="-2.51585625" y2="1.6097625" layer="200"/>
<rectangle x1="-2.001759375" y1="1.6033375" x2="-1.506940625" y2="1.6097625" layer="200"/>
<rectangle x1="-1.45553125" y1="1.6033375" x2="-1.39126875" y2="1.6097625" layer="200"/>
<rectangle x1="-1.17920625" y1="1.6033375" x2="-1.16635625" y2="1.6097625" layer="200"/>
<rectangle x1="-1.01855" y1="1.6033375" x2="-1.0057" y2="1.6097625" layer="200"/>
<rectangle x1="-0.825765625" y1="1.6033375" x2="-0.800059375" y2="1.6097625" layer="200"/>
<rectangle x1="1.147078125" y1="1.6033375" x2="1.988909375" y2="1.6097625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.6097625" x2="-2.51585625" y2="1.6161875" layer="200"/>
<rectangle x1="-2.0274625" y1="1.6097625" x2="-1.37199375" y2="1.6161875" layer="200"/>
<rectangle x1="-1.198484375" y1="1.6097625" x2="-1.134221875" y2="1.6161875" layer="200"/>
<rectangle x1="-1.024978125" y1="1.6097625" x2="-0.999271875" y2="1.6161875" layer="200"/>
<rectangle x1="-0.890025" y1="1.6097625" x2="-0.877175" y2="1.6161875" layer="200"/>
<rectangle x1="-0.838615625" y1="1.6097625" x2="-0.774359375" y2="1.6161875" layer="200"/>
<rectangle x1="0.446621875" y1="1.6097625" x2="0.453046875" y2="1.6161875" layer="200"/>
<rectangle x1="0.5173125" y1="1.6097625" x2="0.55586875" y2="1.6161875" layer="200"/>
<rectangle x1="0.941440625" y1="1.6097625" x2="0.992846875" y2="1.6161875" layer="200"/>
<rectangle x1="1.01855625" y1="1.6097625" x2="1.0571125" y2="1.6161875" layer="200"/>
<rectangle x1="1.134225" y1="1.6097625" x2="1.9953375" y2="1.6161875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.6161875" x2="-2.51585625" y2="1.6226125" layer="200"/>
<rectangle x1="-2.033890625" y1="1.6161875" x2="-1.346290625" y2="1.6226125" layer="200"/>
<rectangle x1="-1.301303125" y1="1.6161875" x2="-1.288453125" y2="1.6226125" layer="200"/>
<rectangle x1="-1.2113375" y1="1.6161875" x2="-1.11494375" y2="1.6226125" layer="200"/>
<rectangle x1="-1.037828125" y1="1.6161875" x2="-0.992846875" y2="1.6226125" layer="200"/>
<rectangle x1="-0.896453125" y1="1.6161875" x2="-0.870746875" y2="1.6226125" layer="200"/>
<rectangle x1="-0.85146875" y1="1.6161875" x2="-0.729375" y2="1.6226125" layer="200"/>
<rectangle x1="-0.433765625" y1="1.6161875" x2="-0.420915625" y2="1.6226125" layer="200"/>
<rectangle x1="0.440196875" y1="1.6161875" x2="0.472328125" y2="1.6226125" layer="200"/>
<rectangle x1="0.48518125" y1="1.6161875" x2="0.56871875" y2="1.6226125" layer="200"/>
<rectangle x1="0.735803125" y1="1.6161875" x2="0.819340625" y2="1.6226125" layer="200"/>
<rectangle x1="0.88360625" y1="1.6161875" x2="1.0699625" y2="1.6226125" layer="200"/>
<rectangle x1="1.121375" y1="1.6161875" x2="2.0081875" y2="1.6226125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.622615625" x2="-2.51585625" y2="1.629040625" layer="200"/>
<rectangle x1="-2.040315625" y1="1.622615625" x2="-0.973565625" y2="1.629040625" layer="200"/>
<rectangle x1="-0.90930625" y1="1.622615625" x2="-0.65225625" y2="1.629040625" layer="200"/>
<rectangle x1="-0.6137" y1="1.622615625" x2="-0.55586875" y2="1.629040625" layer="200"/>
<rectangle x1="-0.530159375" y1="1.622615625" x2="-0.510884375" y2="1.629040625" layer="200"/>
<rectangle x1="-0.44661875" y1="1.622615625" x2="-0.4080625" y2="1.629040625" layer="200"/>
<rectangle x1="0.433771875" y1="1.622615625" x2="0.587996875" y2="1.629040625" layer="200"/>
<rectangle x1="0.710096875" y1="1.622615625" x2="1.089240625" y2="1.629040625" layer="200"/>
<rectangle x1="1.102096875" y1="1.622615625" x2="2.033890625" y2="1.629040625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.629040625" x2="-2.50943125" y2="1.635465625" layer="200"/>
<rectangle x1="-2.04674375" y1="1.629040625" x2="-0.96071875" y2="1.635465625" layer="200"/>
<rectangle x1="-0.92215625" y1="1.629040625" x2="-0.49803125" y2="1.635465625" layer="200"/>
<rectangle x1="-0.45304375" y1="1.629040625" x2="-0.3952125" y2="1.635465625" layer="200"/>
<rectangle x1="-0.324521875" y1="1.629040625" x2="-0.305246875" y2="1.635465625" layer="200"/>
<rectangle x1="0.414490625" y1="1.629040625" x2="2.053171875" y2="1.635465625" layer="200"/>
<rectangle x1="2.50300625" y1="1.629040625" x2="2.52228125" y2="1.635465625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.635465625" x2="-2.50943125" y2="1.641890625" layer="200"/>
<rectangle x1="-2.05316875" y1="1.635465625" x2="-0.9414375" y2="1.641890625" layer="200"/>
<rectangle x1="-0.928584375" y1="1.635465625" x2="-0.382359375" y2="1.641890625" layer="200"/>
<rectangle x1="-0.3438" y1="1.635465625" x2="-0.29239375" y2="1.641890625" layer="200"/>
<rectangle x1="-0.202421875" y1="1.635465625" x2="-0.163865625" y2="1.641890625" layer="200"/>
<rectangle x1="0.401640625" y1="1.635465625" x2="2.072453125" y2="1.641890625" layer="200"/>
<rectangle x1="2.49015625" y1="1.635465625" x2="2.5287125" y2="1.641890625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.64189375" x2="-2.50300625" y2="1.64831875" layer="200"/>
<rectangle x1="-2.265234375" y1="1.64189375" x2="-2.226678125" y2="1.64831875" layer="200"/>
<rectangle x1="-2.05316875" y1="1.64189375" x2="-0.2602625" y2="1.64831875" layer="200"/>
<rectangle x1="-0.234553125" y1="1.64189375" x2="-0.125309375" y2="1.64831875" layer="200"/>
<rectangle x1="0.09318125" y1="1.64189375" x2="0.15744375" y2="1.64831875" layer="200"/>
<rectangle x1="0.375934375" y1="1.64189375" x2="2.162415625" y2="1.64831875" layer="200"/>
<rectangle x1="2.213828125" y1="1.64189375" x2="2.265234375" y2="1.64831875" layer="200"/>
<rectangle x1="2.413040625" y1="1.64189375" x2="2.535134375" y2="1.64831875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.64831875" x2="-2.496575" y2="1.65474375" layer="200"/>
<rectangle x1="-2.464446875" y1="1.64831875" x2="-2.400184375" y2="1.65474375" layer="200"/>
<rectangle x1="-2.2845125" y1="1.64831875" x2="-2.213825" y2="1.65474375" layer="200"/>
<rectangle x1="-2.05959375" y1="1.64831875" x2="-0.09318125" y2="1.65474375" layer="200"/>
<rectangle x1="0.08675625" y1="1.64831875" x2="0.17029375" y2="1.65474375" layer="200"/>
<rectangle x1="0.36308125" y1="1.64831875" x2="2.29094375" y2="1.65474375" layer="200"/>
<rectangle x1="2.3937625" y1="1.64831875" x2="2.5351375" y2="1.65474375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.654746875" x2="-2.16241875" y2="1.661171875" layer="200"/>
<rectangle x1="-2.066021875" y1="1.654746875" x2="-0.054621875" y2="1.661171875" layer="200"/>
<rectangle x1="-0.035340625" y1="1.654746875" x2="-0.003209375" y2="1.661171875" layer="200"/>
<rectangle x1="0.054625" y1="1.654746875" x2="0.20885" y2="1.661171875" layer="200"/>
<rectangle x1="0.337378125" y1="1.654746875" x2="2.303790625" y2="1.661171875" layer="200"/>
<rectangle x1="2.380909375" y1="1.654746875" x2="2.535134375" y2="1.661171875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.661171875" x2="0.24098125" y2="1.667596875" layer="200"/>
<rectangle x1="0.298821875" y1="1.661171875" x2="2.535134375" y2="1.667596875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.667596875" x2="0.2538375" y2="1.674021875" layer="200"/>
<rectangle x1="0.28596875" y1="1.667596875" x2="2.5351375" y2="1.674021875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.674025" x2="2.5287125" y2="1.68045" layer="200"/>
<rectangle x1="-2.52228125" y1="1.68045" x2="2.52228125" y2="1.686875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.686878125" x2="2.51585625" y2="1.693303125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.693303125" x2="2.51585625" y2="1.699728125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.699728125" x2="2.50943125" y2="1.706153125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.70615625" x2="2.50943125" y2="1.71258125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.71258125" x2="2.50943125" y2="1.71900625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.71900625" x2="2.50943125" y2="1.72543125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.725434375" x2="2.50943125" y2="1.731859375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.731859375" x2="2.1302875" y2="1.738284375" layer="200"/>
<rectangle x1="2.149565625" y1="1.731859375" x2="2.515859375" y2="1.738284375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.7382875" x2="2.1238625" y2="1.7447125" layer="200"/>
<rectangle x1="2.149565625" y1="1.7382875" x2="2.515859375" y2="1.7447125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.7447125" x2="2.1238625" y2="1.7511375" layer="200"/>
<rectangle x1="2.149565625" y1="1.7447125" x2="2.515859375" y2="1.7511375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.7511375" x2="2.1238625" y2="1.7575625" layer="200"/>
<rectangle x1="2.149565625" y1="1.7511375" x2="2.515859375" y2="1.7575625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.757565625" x2="2.1302875" y2="1.763990625" layer="200"/>
<rectangle x1="2.143140625" y1="1.757565625" x2="2.515859375" y2="1.763990625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.763990625" x2="2.51585625" y2="1.770415625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.77041875" x2="2.51585625" y2="1.77684375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.77684375" x2="2.51585625" y2="1.78326875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.78326875" x2="2.51585625" y2="1.78969375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.789696875" x2="2.51585625" y2="1.796121875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.796121875" x2="2.51585625" y2="1.802546875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.802546875" x2="2.51585625" y2="1.808971875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.808975" x2="2.51585625" y2="1.8154" layer="200"/>
<rectangle x1="-2.52228125" y1="1.8154" x2="1.49409375" y2="1.821825" layer="200"/>
<rectangle x1="1.53265" y1="1.8154" x2="2.51585625" y2="1.821825" layer="200"/>
<rectangle x1="-2.52228125" y1="1.821828125" x2="1.48766875" y2="1.828253125" layer="200"/>
<rectangle x1="1.539078125" y1="1.821828125" x2="2.515859375" y2="1.828253125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.828253125" x2="1.4812375" y2="1.834678125" layer="200"/>
<rectangle x1="1.545503125" y1="1.828253125" x2="2.046746875" y2="1.834678125" layer="200"/>
<rectangle x1="2.0596" y1="1.828253125" x2="2.51585625" y2="1.834678125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.834678125" x2="1.4748125" y2="1.841103125" layer="200"/>
<rectangle x1="1.545503125" y1="1.834678125" x2="2.046746875" y2="1.841103125" layer="200"/>
<rectangle x1="2.0596" y1="1.834678125" x2="2.51585625" y2="1.841103125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.84110625" x2="1.4748125" y2="1.84753125" layer="200"/>
<rectangle x1="1.545503125" y1="1.84110625" x2="2.515859375" y2="1.84753125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.84753125" x2="1.4748125" y2="1.85395625" layer="200"/>
<rectangle x1="1.539078125" y1="1.84753125" x2="2.515859375" y2="1.85395625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.853959375" x2="1.4812375" y2="1.860384375" layer="200"/>
<rectangle x1="1.539078125" y1="1.853959375" x2="2.515859375" y2="1.860384375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.860384375" x2="1.48766875" y2="1.866809375" layer="200"/>
<rectangle x1="1.53265" y1="1.860384375" x2="2.51585625" y2="1.866809375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.866809375" x2="1.49409375" y2="1.873234375" layer="200"/>
<rectangle x1="1.53265" y1="1.866809375" x2="2.51585625" y2="1.873234375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.8732375" x2="1.50694375" y2="1.8796625" layer="200"/>
<rectangle x1="1.526225" y1="1.8732375" x2="2.51585625" y2="1.8796625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.8796625" x2="2.51585625" y2="1.8860875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.8860875" x2="2.51585625" y2="1.8925125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.892515625" x2="-1.0057" y2="1.898940625" layer="200"/>
<rectangle x1="-0.999271875" y1="1.892515625" x2="2.515859375" y2="1.898940625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.898940625" x2="-1.01855" y2="1.905365625" layer="200"/>
<rectangle x1="-0.992846875" y1="1.898940625" x2="2.509434375" y2="1.905365625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.90536875" x2="-1.01855" y2="1.91179375" layer="200"/>
<rectangle x1="-0.98641875" y1="1.90536875" x2="2.50943125" y2="1.91179375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.91179375" x2="-1.01855" y2="1.91821875" layer="200"/>
<rectangle x1="-0.992846875" y1="1.91179375" x2="2.509434375" y2="1.91821875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.91821875" x2="-1.012125" y2="1.92464375" layer="200"/>
<rectangle x1="-0.999271875" y1="1.91821875" x2="1.545503125" y2="1.92464375" layer="200"/>
<rectangle x1="1.56478125" y1="1.91821875" x2="2.50943125" y2="1.92464375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.924646875" x2="1.5455" y2="1.931071875" layer="200"/>
<rectangle x1="1.56478125" y1="1.924646875" x2="2.50943125" y2="1.931071875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.931071875" x2="1.89894375" y2="1.937496875" layer="200"/>
<rectangle x1="1.911796875" y1="1.931071875" x2="2.509434375" y2="1.937496875" layer="200"/>
<rectangle x1="-2.52228125" y1="1.9375" x2="1.8796625" y2="1.943925" layer="200"/>
<rectangle x1="1.918221875" y1="1.9375" x2="2.515859375" y2="1.943925" layer="200"/>
<rectangle x1="-2.52228125" y1="1.943925" x2="1.8732375" y2="1.95035" layer="200"/>
<rectangle x1="1.918221875" y1="1.943925" x2="2.515859375" y2="1.95035" layer="200"/>
<rectangle x1="-2.52228125" y1="1.95035" x2="1.8732375" y2="1.956775" layer="200"/>
<rectangle x1="1.918221875" y1="1.95035" x2="2.515859375" y2="1.956775" layer="200"/>
<rectangle x1="-2.52228125" y1="1.956778125" x2="1.48766875" y2="1.963203125" layer="200"/>
<rectangle x1="1.506946875" y1="1.956778125" x2="1.866809375" y2="1.963203125" layer="200"/>
<rectangle x1="1.911796875" y1="1.956778125" x2="2.515859375" y2="1.963203125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.963203125" x2="1.4683875" y2="1.969628125" layer="200"/>
<rectangle x1="1.5198" y1="1.963203125" x2="1.8668125" y2="1.969628125" layer="200"/>
<rectangle x1="1.905371875" y1="1.963203125" x2="2.040321875" y2="1.969628125" layer="200"/>
<rectangle x1="2.072453125" y1="1.963203125" x2="2.515859375" y2="1.969628125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.969628125" x2="1.4619625" y2="1.976053125" layer="200"/>
<rectangle x1="1.526225" y1="1.969628125" x2="1.8668125" y2="1.976053125" layer="200"/>
<rectangle x1="1.89894375" y1="1.969628125" x2="2.02746875" y2="1.976053125" layer="200"/>
<rectangle x1="2.072453125" y1="1.969628125" x2="2.239534375" y2="1.976053125" layer="200"/>
<rectangle x1="2.252384375" y1="1.969628125" x2="2.515859375" y2="1.976053125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.97605625" x2="-0.080325" y2="1.98248125" layer="200"/>
<rectangle x1="0.003215625" y1="1.97605625" x2="0.967140625" y2="1.98248125" layer="200"/>
<rectangle x1="1.050684375" y1="1.97605625" x2="1.449109375" y2="1.98248125" layer="200"/>
<rectangle x1="1.526225" y1="1.97605625" x2="2.02746875" y2="1.98248125" layer="200"/>
<rectangle x1="2.072453125" y1="1.97605625" x2="2.226678125" y2="1.98248125" layer="200"/>
<rectangle x1="2.2652375" y1="1.97605625" x2="2.51585625" y2="1.98248125" layer="200"/>
<rectangle x1="-2.52228125" y1="1.98248125" x2="-0.485175" y2="1.98890625" layer="200"/>
<rectangle x1="-0.44661875" y1="1.98248125" x2="-0.08675" y2="1.98890625" layer="200"/>
<rectangle x1="0.02249375" y1="1.98248125" x2="0.96071875" y2="1.98890625" layer="200"/>
<rectangle x1="1.0571125" y1="1.98248125" x2="1.44268125" y2="1.98890625" layer="200"/>
<rectangle x1="1.526225" y1="1.98248125" x2="2.22025" y2="1.98890625" layer="200"/>
<rectangle x1="2.2716625" y1="1.98248125" x2="2.51585625" y2="1.98890625" layer="200"/>
<rectangle x1="-2.52228125" y1="1.988909375" x2="-1.551925" y2="1.995334375" layer="200"/>
<rectangle x1="-1.474809375" y1="1.988909375" x2="-1.031403125" y2="1.995334375" layer="200"/>
<rectangle x1="-0.992846875" y1="1.988909375" x2="-0.504453125" y2="1.995334375" layer="200"/>
<rectangle x1="-0.44019375" y1="1.988909375" x2="-0.09318125" y2="1.995334375" layer="200"/>
<rectangle x1="0.02891875" y1="1.988909375" x2="0.51088125" y2="1.995334375" layer="200"/>
<rectangle x1="0.543015625" y1="1.988909375" x2="0.954290625" y2="1.995334375" layer="200"/>
<rectangle x1="1.069965625" y1="1.988909375" x2="1.436259375" y2="1.995334375" layer="200"/>
<rectangle x1="1.526225" y1="1.988909375" x2="2.213825" y2="1.995334375" layer="200"/>
<rectangle x1="2.2716625" y1="1.988909375" x2="2.50943125" y2="1.995334375" layer="200"/>
<rectangle x1="-2.52228125" y1="1.995334375" x2="-1.56478125" y2="2.001759375" layer="200"/>
<rectangle x1="-1.461959375" y1="1.995334375" x2="-1.082815625" y2="2.001759375" layer="200"/>
<rectangle x1="-0.960715625" y1="1.995334375" x2="-0.581571875" y2="2.001759375" layer="200"/>
<rectangle x1="-0.5494375" y1="1.995334375" x2="-0.51730625" y2="2.001759375" layer="200"/>
<rectangle x1="-0.427340625" y1="1.995334375" x2="-0.093178125" y2="2.001759375" layer="200"/>
<rectangle x1="0.041771875" y1="1.995334375" x2="0.440196875" y2="2.001759375" layer="200"/>
<rectangle x1="0.56229375" y1="1.995334375" x2="0.9414375" y2="2.001759375" layer="200"/>
<rectangle x1="1.082815625" y1="1.995334375" x2="1.423403125" y2="2.001759375" layer="200"/>
<rectangle x1="1.53265" y1="1.995334375" x2="2.0081875" y2="2.001759375" layer="200"/>
<rectangle x1="2.014615625" y1="1.995334375" x2="2.181696875" y2="2.001759375" layer="200"/>
<rectangle x1="2.2716625" y1="1.995334375" x2="2.50943125" y2="2.001759375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.001759375" x2="-1.57120625" y2="2.008184375" layer="200"/>
<rectangle x1="-1.44910625" y1="2.001759375" x2="-1.0892375" y2="2.008184375" layer="200"/>
<rectangle x1="-0.9542875" y1="2.001759375" x2="-0.594425" y2="2.008184375" layer="200"/>
<rectangle x1="-0.427340625" y1="2.001759375" x2="-0.099603125" y2="2.008184375" layer="200"/>
<rectangle x1="0.06105" y1="2.001759375" x2="0.4144875" y2="2.008184375" layer="200"/>
<rectangle x1="0.575146875" y1="2.001759375" x2="0.935015625" y2="2.008184375" layer="200"/>
<rectangle x1="1.08924375" y1="2.001759375" x2="1.416975" y2="2.008184375" layer="200"/>
<rectangle x1="1.53265" y1="2.001759375" x2="2.0081875" y2="2.008184375" layer="200"/>
<rectangle x1="2.014615625" y1="2.001759375" x2="2.188121875" y2="2.008184375" layer="200"/>
<rectangle x1="2.278090625" y1="2.001759375" x2="2.509434375" y2="2.008184375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.0081875" x2="-1.57763125" y2="2.0146125" layer="200"/>
<rectangle x1="-1.44268125" y1="2.0081875" x2="-1.09566875" y2="2.0146125" layer="200"/>
<rectangle x1="-0.9478625" y1="2.0081875" x2="-0.60085" y2="2.0146125" layer="200"/>
<rectangle x1="-0.4209125" y1="2.0081875" x2="-0.09960625" y2="2.0146125" layer="200"/>
<rectangle x1="0.073903125" y1="2.0081875" x2="0.408065625" y2="2.0146125" layer="200"/>
<rectangle x1="0.581571875" y1="2.0081875" x2="0.922159375" y2="2.0146125" layer="200"/>
<rectangle x1="1.09566875" y1="2.0081875" x2="1.41055" y2="2.0146125" layer="200"/>
<rectangle x1="1.53265" y1="2.0081875" x2="2.0017625" y2="2.0146125" layer="200"/>
<rectangle x1="2.014615625" y1="2.0081875" x2="2.200971875" y2="2.0146125" layer="200"/>
<rectangle x1="2.278090625" y1="2.0081875" x2="2.509434375" y2="2.0146125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.0146125" x2="-1.58405625" y2="2.0210375" layer="200"/>
<rectangle x1="-1.44268125" y1="2.0146125" x2="-1.10851875" y2="2.0210375" layer="200"/>
<rectangle x1="-0.9414375" y1="2.0146125" x2="-0.6137" y2="2.0210375" layer="200"/>
<rectangle x1="-0.4209125" y1="2.0146125" x2="-0.09960625" y2="2.0210375" layer="200"/>
<rectangle x1="0.08033125" y1="2.0146125" x2="0.4016375" y2="2.0210375" layer="200"/>
<rectangle x1="0.581571875" y1="2.0146125" x2="0.909309375" y2="2.0210375" layer="200"/>
<rectangle x1="1.09566875" y1="2.0146125" x2="1.404125" y2="2.0210375" layer="200"/>
<rectangle x1="1.539078125" y1="2.0146125" x2="2.001759375" y2="2.0210375" layer="200"/>
<rectangle x1="2.014615625" y1="2.0146125" x2="2.213828125" y2="2.0210375" layer="200"/>
<rectangle x1="2.278090625" y1="2.0146125" x2="2.509434375" y2="2.0210375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.0210375" x2="-1.5969125" y2="2.0274625" layer="200"/>
<rectangle x1="-1.436253125" y1="2.0210375" x2="-1.114946875" y2="2.0274625" layer="200"/>
<rectangle x1="-0.935009375" y1="2.0210375" x2="-0.620128125" y2="2.0274625" layer="200"/>
<rectangle x1="-0.4209125" y1="2.0210375" x2="-0.10603125" y2="2.0274625" layer="200"/>
<rectangle x1="0.08675625" y1="2.0210375" x2="0.4016375" y2="2.0274625" layer="200"/>
<rectangle x1="0.594425" y1="2.0210375" x2="0.90930625" y2="2.0274625" layer="200"/>
<rectangle x1="1.09566875" y1="2.0210375" x2="1.3977" y2="2.0274625" layer="200"/>
<rectangle x1="1.5904875" y1="2.0210375" x2="2.22025" y2="2.0274625" layer="200"/>
<rectangle x1="2.278090625" y1="2.0210375" x2="2.509434375" y2="2.0274625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.027465625" x2="-1.6097625" y2="2.033890625" layer="200"/>
<rectangle x1="-1.436253125" y1="2.027465625" x2="-1.114946875" y2="2.033890625" layer="200"/>
<rectangle x1="-0.928584375" y1="2.027465625" x2="-0.626553125" y2="2.033890625" layer="200"/>
<rectangle x1="-0.4209125" y1="2.027465625" x2="-0.10603125" y2="2.033890625" layer="200"/>
<rectangle x1="0.09318125" y1="2.027465625" x2="0.3952125" y2="2.033890625" layer="200"/>
<rectangle x1="0.594425" y1="2.027465625" x2="0.90288125" y2="2.033890625" layer="200"/>
<rectangle x1="1.102096875" y1="2.027465625" x2="1.397696875" y2="2.033890625" layer="200"/>
<rectangle x1="1.5969125" y1="2.027465625" x2="2.22668125" y2="2.033890625" layer="200"/>
<rectangle x1="2.278090625" y1="2.027465625" x2="2.509434375" y2="2.033890625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.033890625" x2="-1.6161875" y2="2.040315625" layer="200"/>
<rectangle x1="-1.429828125" y1="2.033890625" x2="-1.121371875" y2="2.040315625" layer="200"/>
<rectangle x1="-0.92215625" y1="2.033890625" x2="-0.62655625" y2="2.040315625" layer="200"/>
<rectangle x1="-0.4209125" y1="2.033890625" x2="-0.10603125" y2="2.040315625" layer="200"/>
<rectangle x1="0.09318125" y1="2.033890625" x2="0.3952125" y2="2.040315625" layer="200"/>
<rectangle x1="0.600853125" y1="2.033890625" x2="0.896453125" y2="2.040315625" layer="200"/>
<rectangle x1="1.102096875" y1="2.033890625" x2="1.391271875" y2="2.040315625" layer="200"/>
<rectangle x1="1.603340625" y1="2.033890625" x2="2.239534375" y2="2.040315625" layer="200"/>
<rectangle x1="2.2716625" y1="2.033890625" x2="2.50943125" y2="2.040315625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.04031875" x2="-1.6161875" y2="2.04674375" layer="200"/>
<rectangle x1="-1.4234" y1="2.04031875" x2="-1.1278" y2="2.04674375" layer="200"/>
<rectangle x1="-0.91573125" y1="2.04031875" x2="-0.62655625" y2="2.04674375" layer="200"/>
<rectangle x1="-0.4209125" y1="2.04031875" x2="-0.11245625" y2="2.04674375" layer="200"/>
<rectangle x1="0.099609375" y1="2.04031875" x2="0.388784375" y2="2.04674375" layer="200"/>
<rectangle x1="0.600853125" y1="2.04031875" x2="0.896453125" y2="2.04674375" layer="200"/>
<rectangle x1="1.102096875" y1="2.04031875" x2="1.391271875" y2="2.04674375" layer="200"/>
<rectangle x1="1.616190625" y1="2.04031875" x2="2.245959375" y2="2.04674375" layer="200"/>
<rectangle x1="2.2652375" y1="2.04031875" x2="2.50943125" y2="2.04674375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.04674375" x2="-1.6161875" y2="2.05316875" layer="200"/>
<rectangle x1="-1.416975" y1="2.04674375" x2="-1.134225" y2="2.05316875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.04674375" x2="-0.63298125" y2="2.05316875" layer="200"/>
<rectangle x1="-0.4144875" y1="2.04674375" x2="-0.11888125" y2="2.05316875" layer="200"/>
<rectangle x1="0.099609375" y1="2.04674375" x2="0.382359375" y2="2.05316875" layer="200"/>
<rectangle x1="0.600853125" y1="2.04674375" x2="0.896453125" y2="2.05316875" layer="200"/>
<rectangle x1="1.102096875" y1="2.04674375" x2="1.391271875" y2="2.05316875" layer="200"/>
<rectangle x1="1.62261875" y1="2.04674375" x2="2.50943125" y2="2.05316875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.05316875" x2="-1.6226125" y2="2.05959375" layer="200"/>
<rectangle x1="-1.416975" y1="2.05316875" x2="-1.134225" y2="2.05959375" layer="200"/>
<rectangle x1="-0.90930625" y1="2.05316875" x2="-0.63298125" y2="2.05959375" layer="200"/>
<rectangle x1="-0.4144875" y1="2.05316875" x2="-0.11888125" y2="2.05959375" layer="200"/>
<rectangle x1="0.112459375" y1="2.05316875" x2="0.375934375" y2="2.05959375" layer="200"/>
<rectangle x1="0.600853125" y1="2.05316875" x2="0.896453125" y2="2.05959375" layer="200"/>
<rectangle x1="1.102096875" y1="2.05316875" x2="1.391271875" y2="2.05959375" layer="200"/>
<rectangle x1="1.62904375" y1="2.05316875" x2="2.50943125" y2="2.05959375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.059596875" x2="-1.6226125" y2="2.066021875" layer="200"/>
<rectangle x1="-1.41055" y1="2.059596875" x2="-1.14065" y2="2.066021875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.059596875" x2="-0.63298125" y2="2.066021875" layer="200"/>
<rectangle x1="-0.4080625" y1="2.059596875" x2="-0.1253125" y2="2.066021875" layer="200"/>
<rectangle x1="0.112459375" y1="2.059596875" x2="0.375934375" y2="2.066021875" layer="200"/>
<rectangle x1="0.600853125" y1="2.059596875" x2="0.896453125" y2="2.066021875" layer="200"/>
<rectangle x1="1.102096875" y1="2.059596875" x2="1.391271875" y2="2.066021875" layer="200"/>
<rectangle x1="1.62904375" y1="2.059596875" x2="2.50943125" y2="2.066021875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.066021875" x2="-1.62904375" y2="2.072446875" layer="200"/>
<rectangle x1="-1.41055" y1="2.066021875" x2="-1.14065" y2="2.072446875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.066021875" x2="-0.63298125" y2="2.072446875" layer="200"/>
<rectangle x1="-0.401634375" y1="2.066021875" x2="-0.125309375" y2="2.072446875" layer="200"/>
<rectangle x1="0.112459375" y1="2.066021875" x2="0.375934375" y2="2.072446875" layer="200"/>
<rectangle x1="0.600853125" y1="2.066021875" x2="0.896453125" y2="2.072446875" layer="200"/>
<rectangle x1="1.102096875" y1="2.066021875" x2="1.384846875" y2="2.072446875" layer="200"/>
<rectangle x1="1.63546875" y1="2.066021875" x2="2.50943125" y2="2.072446875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.07245" x2="-1.63546875" y2="2.078875" layer="200"/>
<rectangle x1="-1.41055" y1="2.07245" x2="-1.14065" y2="2.078875" layer="200"/>
<rectangle x1="-0.902878125" y1="2.07245" x2="-0.632978125" y2="2.078875" layer="200"/>
<rectangle x1="-0.401634375" y1="2.07245" x2="-0.125309375" y2="2.078875" layer="200"/>
<rectangle x1="0.131740625" y1="2.07245" x2="0.369509375" y2="2.078875" layer="200"/>
<rectangle x1="0.607278125" y1="2.07245" x2="0.896453125" y2="2.078875" layer="200"/>
<rectangle x1="1.102096875" y1="2.07245" x2="1.384846875" y2="2.078875" layer="200"/>
<rectangle x1="1.63546875" y1="2.07245" x2="2.50943125" y2="2.078875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.078875" x2="-1.63546875" y2="2.0853" layer="200"/>
<rectangle x1="-1.41055" y1="2.078875" x2="-1.14065" y2="2.0853" layer="200"/>
<rectangle x1="-0.896453125" y1="2.078875" x2="-0.632978125" y2="2.0853" layer="200"/>
<rectangle x1="-0.401634375" y1="2.078875" x2="-0.125309375" y2="2.0853" layer="200"/>
<rectangle x1="0.138165625" y1="2.078875" x2="0.369509375" y2="2.0853" layer="200"/>
<rectangle x1="0.613703125" y1="2.078875" x2="0.896453125" y2="2.0853" layer="200"/>
<rectangle x1="1.102096875" y1="2.078875" x2="1.378421875" y2="2.0853" layer="200"/>
<rectangle x1="1.63546875" y1="2.078875" x2="2.50943125" y2="2.0853" layer="200"/>
<rectangle x1="-2.52228125" y1="2.0853" x2="-1.63546875" y2="2.091725" layer="200"/>
<rectangle x1="-1.41055" y1="2.0853" x2="-1.134225" y2="2.091725" layer="200"/>
<rectangle x1="-0.896453125" y1="2.0853" x2="-0.632978125" y2="2.091725" layer="200"/>
<rectangle x1="-0.395209375" y1="2.0853" x2="-0.125309375" y2="2.091725" layer="200"/>
<rectangle x1="0.144590625" y1="2.0853" x2="0.369509375" y2="2.091725" layer="200"/>
<rectangle x1="0.613703125" y1="2.0853" x2="0.896453125" y2="2.091725" layer="200"/>
<rectangle x1="1.102096875" y1="2.0853" x2="1.378421875" y2="2.091725" layer="200"/>
<rectangle x1="1.63546875" y1="2.0853" x2="2.50943125" y2="2.091725" layer="200"/>
<rectangle x1="-2.52228125" y1="2.091728125" x2="-1.64189375" y2="2.098153125" layer="200"/>
<rectangle x1="-1.41055" y1="2.091728125" x2="-1.134225" y2="2.098153125" layer="200"/>
<rectangle x1="-0.896453125" y1="2.091728125" x2="-0.632978125" y2="2.098153125" layer="200"/>
<rectangle x1="-0.395209375" y1="2.091728125" x2="-0.125309375" y2="2.098153125" layer="200"/>
<rectangle x1="0.144590625" y1="2.091728125" x2="0.369509375" y2="2.098153125" layer="200"/>
<rectangle x1="0.62013125" y1="2.091728125" x2="0.89645625" y2="2.098153125" layer="200"/>
<rectangle x1="1.108521875" y1="2.091728125" x2="1.378421875" y2="2.098153125" layer="200"/>
<rectangle x1="1.63546875" y1="2.091728125" x2="2.50943125" y2="2.098153125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.098153125" x2="-1.64189375" y2="2.104578125" layer="200"/>
<rectangle x1="-1.41055" y1="2.098153125" x2="-1.134225" y2="2.104578125" layer="200"/>
<rectangle x1="-0.896453125" y1="2.098153125" x2="-0.632978125" y2="2.104578125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.098153125" x2="-0.125309375" y2="2.104578125" layer="200"/>
<rectangle x1="0.144590625" y1="2.098153125" x2="0.363078125" y2="2.104578125" layer="200"/>
<rectangle x1="0.62013125" y1="2.098153125" x2="0.89645625" y2="2.104578125" layer="200"/>
<rectangle x1="1.108521875" y1="2.098153125" x2="1.378421875" y2="2.104578125" layer="200"/>
<rectangle x1="1.63546875" y1="2.098153125" x2="2.51585625" y2="2.104578125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.104578125" x2="-1.64189375" y2="2.111003125" layer="200"/>
<rectangle x1="-1.41055" y1="2.104578125" x2="-1.1278" y2="2.111003125" layer="200"/>
<rectangle x1="-0.896453125" y1="2.104578125" x2="-0.639409375" y2="2.111003125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.104578125" x2="-0.125309375" y2="2.111003125" layer="200"/>
<rectangle x1="0.15101875" y1="2.104578125" x2="0.36308125" y2="2.111003125" layer="200"/>
<rectangle x1="0.62013125" y1="2.104578125" x2="0.89645625" y2="2.111003125" layer="200"/>
<rectangle x1="1.108521875" y1="2.104578125" x2="1.371996875" y2="2.111003125" layer="200"/>
<rectangle x1="1.63546875" y1="2.104578125" x2="1.91179375" y2="2.111003125" layer="200"/>
<rectangle x1="1.943928125" y1="2.104578125" x2="2.515859375" y2="2.111003125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.11100625" x2="-1.64189375" y2="2.11743125" layer="200"/>
<rectangle x1="-1.41055" y1="2.11100625" x2="-1.12136875" y2="2.11743125" layer="200"/>
<rectangle x1="-0.896453125" y1="2.11100625" x2="-0.639409375" y2="2.11743125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.11100625" x2="-0.125309375" y2="2.11743125" layer="200"/>
<rectangle x1="0.15101875" y1="2.11100625" x2="0.36308125" y2="2.11743125" layer="200"/>
<rectangle x1="0.62013125" y1="2.11100625" x2="0.90288125" y2="2.11743125" layer="200"/>
<rectangle x1="1.108521875" y1="2.11100625" x2="1.371996875" y2="2.11743125" layer="200"/>
<rectangle x1="1.63546875" y1="2.11100625" x2="1.90536875" y2="2.11743125" layer="200"/>
<rectangle x1="1.950353125" y1="2.11100625" x2="2.515859375" y2="2.11743125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.11743125" x2="-1.64189375" y2="2.12385625" layer="200"/>
<rectangle x1="-1.41055" y1="2.11743125" x2="-1.12136875" y2="2.12385625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.11743125" x2="-0.645834375" y2="2.12385625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.11743125" x2="-0.131734375" y2="2.12385625" layer="200"/>
<rectangle x1="0.15101875" y1="2.11743125" x2="0.36308125" y2="2.12385625" layer="200"/>
<rectangle x1="0.613703125" y1="2.11743125" x2="0.902884375" y2="2.12385625" layer="200"/>
<rectangle x1="1.114946875" y1="2.11743125" x2="1.378421875" y2="2.12385625" layer="200"/>
<rectangle x1="1.63546875" y1="2.11743125" x2="1.89894375" y2="2.12385625" layer="200"/>
<rectangle x1="1.950353125" y1="2.11743125" x2="2.515859375" y2="2.12385625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.123859375" x2="-1.64189375" y2="2.130284375" layer="200"/>
<rectangle x1="-1.41055" y1="2.123859375" x2="-1.12136875" y2="2.130284375" layer="200"/>
<rectangle x1="-0.896453125" y1="2.123859375" x2="-0.645834375" y2="2.130284375" layer="200"/>
<rectangle x1="-0.38235625" y1="2.123859375" x2="-0.1317375" y2="2.130284375" layer="200"/>
<rectangle x1="0.15101875" y1="2.123859375" x2="0.36308125" y2="2.130284375" layer="200"/>
<rectangle x1="0.613703125" y1="2.123859375" x2="0.902884375" y2="2.130284375" layer="200"/>
<rectangle x1="1.114946875" y1="2.123859375" x2="1.378421875" y2="2.130284375" layer="200"/>
<rectangle x1="1.62904375" y1="2.123859375" x2="1.89894375" y2="2.130284375" layer="200"/>
<rectangle x1="1.950353125" y1="2.123859375" x2="2.515859375" y2="2.130284375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.130284375" x2="-1.64189375" y2="2.136709375" layer="200"/>
<rectangle x1="-1.41055" y1="2.130284375" x2="-1.1278" y2="2.136709375" layer="200"/>
<rectangle x1="-0.896453125" y1="2.130284375" x2="-0.645834375" y2="2.136709375" layer="200"/>
<rectangle x1="-0.37593125" y1="2.130284375" x2="-0.1317375" y2="2.136709375" layer="200"/>
<rectangle x1="0.15101875" y1="2.130284375" x2="0.36950625" y2="2.136709375" layer="200"/>
<rectangle x1="0.613703125" y1="2.130284375" x2="0.902884375" y2="2.136709375" layer="200"/>
<rectangle x1="1.114946875" y1="2.130284375" x2="1.378421875" y2="2.136709375" layer="200"/>
<rectangle x1="1.62904375" y1="2.130284375" x2="1.90536875" y2="2.136709375" layer="200"/>
<rectangle x1="1.943928125" y1="2.130284375" x2="2.515859375" y2="2.136709375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.136709375" x2="-1.64189375" y2="2.143134375" layer="200"/>
<rectangle x1="-1.404121875" y1="2.136709375" x2="-1.134221875" y2="2.143134375" layer="200"/>
<rectangle x1="-0.896453125" y1="2.136709375" x2="-0.645834375" y2="2.143134375" layer="200"/>
<rectangle x1="-0.37593125" y1="2.136709375" x2="-0.1381625" y2="2.143134375" layer="200"/>
<rectangle x1="0.15101875" y1="2.136709375" x2="0.36950625" y2="2.143134375" layer="200"/>
<rectangle x1="0.613703125" y1="2.136709375" x2="0.890028125" y2="2.143134375" layer="200"/>
<rectangle x1="1.114946875" y1="2.136709375" x2="1.378421875" y2="2.143134375" layer="200"/>
<rectangle x1="1.62904375" y1="2.136709375" x2="1.91179375" y2="2.143134375" layer="200"/>
<rectangle x1="1.92465" y1="2.136709375" x2="2.51585625" y2="2.143134375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.1431375" x2="-1.63546875" y2="2.1495625" layer="200"/>
<rectangle x1="-1.404121875" y1="2.1431375" x2="-1.140646875" y2="2.1495625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.1431375" x2="-0.645834375" y2="2.1495625" layer="200"/>
<rectangle x1="-0.37593125" y1="2.1431375" x2="-0.1381625" y2="2.1495625" layer="200"/>
<rectangle x1="0.144590625" y1="2.1431375" x2="0.369509375" y2="2.1495625" layer="200"/>
<rectangle x1="0.613703125" y1="2.1431375" x2="0.883603125" y2="2.1495625" layer="200"/>
<rectangle x1="1.114946875" y1="2.1431375" x2="1.384846875" y2="2.1495625" layer="200"/>
<rectangle x1="1.62261875" y1="2.1431375" x2="2.51585625" y2="2.1495625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.1495625" x2="-1.63546875" y2="2.1559875" layer="200"/>
<rectangle x1="-1.397696875" y1="2.1495625" x2="-1.140646875" y2="2.1559875" layer="200"/>
<rectangle x1="-0.896453125" y1="2.1495625" x2="-0.645834375" y2="2.1559875" layer="200"/>
<rectangle x1="-0.37593125" y1="2.1495625" x2="-0.1381625" y2="2.1559875" layer="200"/>
<rectangle x1="0.138165625" y1="2.1495625" x2="0.369509375" y2="2.1559875" layer="200"/>
<rectangle x1="0.613703125" y1="2.1495625" x2="0.877178125" y2="2.1559875" layer="200"/>
<rectangle x1="1.114946875" y1="2.1495625" x2="1.384846875" y2="2.1559875" layer="200"/>
<rectangle x1="1.62261875" y1="2.1495625" x2="2.51585625" y2="2.1559875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.155990625" x2="-1.63546875" y2="2.162415625" layer="200"/>
<rectangle x1="-1.397696875" y1="2.155990625" x2="-1.140646875" y2="2.162415625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.155990625" x2="-0.645834375" y2="2.162415625" layer="200"/>
<rectangle x1="-0.37593125" y1="2.155990625" x2="-0.1445875" y2="2.162415625" layer="200"/>
<rectangle x1="0.131740625" y1="2.155990625" x2="0.375934375" y2="2.162415625" layer="200"/>
<rectangle x1="0.613703125" y1="2.155990625" x2="0.870753125" y2="2.162415625" layer="200"/>
<rectangle x1="1.114946875" y1="2.155990625" x2="1.391271875" y2="2.162415625" layer="200"/>
<rectangle x1="1.62261875" y1="2.155990625" x2="2.51585625" y2="2.162415625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.162415625" x2="-1.63546875" y2="2.168840625" layer="200"/>
<rectangle x1="-1.397696875" y1="2.162415625" x2="-1.140646875" y2="2.168840625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.162415625" x2="-0.645834375" y2="2.168840625" layer="200"/>
<rectangle x1="-0.37593125" y1="2.162415625" x2="-0.1445875" y2="2.168840625" layer="200"/>
<rectangle x1="0.131740625" y1="2.162415625" x2="0.375934375" y2="2.168840625" layer="200"/>
<rectangle x1="0.613703125" y1="2.162415625" x2="0.870753125" y2="2.168840625" layer="200"/>
<rectangle x1="1.114946875" y1="2.162415625" x2="1.391271875" y2="2.168840625" layer="200"/>
<rectangle x1="1.616190625" y1="2.162415625" x2="2.515859375" y2="2.168840625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.168840625" x2="-1.63546875" y2="2.175265625" layer="200"/>
<rectangle x1="-1.397696875" y1="2.168840625" x2="-1.140646875" y2="2.175265625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.168840625" x2="-0.639409375" y2="2.175265625" layer="200"/>
<rectangle x1="-0.38235625" y1="2.168840625" x2="-0.1445875" y2="2.175265625" layer="200"/>
<rectangle x1="0.131740625" y1="2.168840625" x2="0.375934375" y2="2.175265625" layer="200"/>
<rectangle x1="0.613703125" y1="2.168840625" x2="0.870753125" y2="2.175265625" layer="200"/>
<rectangle x1="1.114946875" y1="2.168840625" x2="1.391271875" y2="2.175265625" layer="200"/>
<rectangle x1="1.616190625" y1="2.168840625" x2="2.515859375" y2="2.175265625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.17526875" x2="-1.63546875" y2="2.18169375" layer="200"/>
<rectangle x1="-1.397696875" y1="2.17526875" x2="-1.140646875" y2="2.18169375" layer="200"/>
<rectangle x1="-0.902878125" y1="2.17526875" x2="-0.639409375" y2="2.18169375" layer="200"/>
<rectangle x1="-0.38235625" y1="2.17526875" x2="-0.1445875" y2="2.18169375" layer="200"/>
<rectangle x1="0.1253125" y1="2.17526875" x2="0.37593125" y2="2.18169375" layer="200"/>
<rectangle x1="0.613703125" y1="2.17526875" x2="0.870753125" y2="2.18169375" layer="200"/>
<rectangle x1="1.114946875" y1="2.17526875" x2="1.384846875" y2="2.18169375" layer="200"/>
<rectangle x1="1.616190625" y1="2.17526875" x2="2.515859375" y2="2.18169375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.18169375" x2="-1.63546875" y2="2.18811875" layer="200"/>
<rectangle x1="-1.397696875" y1="2.18169375" x2="-1.140646875" y2="2.18811875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.18169375" x2="-0.63298125" y2="2.18811875" layer="200"/>
<rectangle x1="-0.388784375" y1="2.18169375" x2="-0.144590625" y2="2.18811875" layer="200"/>
<rectangle x1="0.1253125" y1="2.18169375" x2="0.37593125" y2="2.18811875" layer="200"/>
<rectangle x1="0.613703125" y1="2.18169375" x2="0.864321875" y2="2.18811875" layer="200"/>
<rectangle x1="1.114946875" y1="2.18169375" x2="1.384846875" y2="2.18811875" layer="200"/>
<rectangle x1="1.62261875" y1="2.18169375" x2="2.51585625" y2="2.18811875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.18811875" x2="-1.63546875" y2="2.19454375" layer="200"/>
<rectangle x1="-1.397696875" y1="2.18811875" x2="-1.140646875" y2="2.19454375" layer="200"/>
<rectangle x1="-0.90930625" y1="2.18811875" x2="-0.620125" y2="2.19454375" layer="200"/>
<rectangle x1="-0.395209375" y1="2.18811875" x2="-0.144590625" y2="2.19454375" layer="200"/>
<rectangle x1="0.1253125" y1="2.18811875" x2="0.37593125" y2="2.19454375" layer="200"/>
<rectangle x1="0.613703125" y1="2.18811875" x2="0.864321875" y2="2.19454375" layer="200"/>
<rectangle x1="1.114946875" y1="2.18811875" x2="1.378421875" y2="2.19454375" layer="200"/>
<rectangle x1="1.62261875" y1="2.18811875" x2="2.51585625" y2="2.19454375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.194546875" x2="-1.63546875" y2="2.200971875" layer="200"/>
<rectangle x1="-1.39126875" y1="2.194546875" x2="-1.14065" y2="2.200971875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.194546875" x2="-0.6137" y2="2.200971875" layer="200"/>
<rectangle x1="-0.395209375" y1="2.194546875" x2="-0.144590625" y2="2.200971875" layer="200"/>
<rectangle x1="0.1188875" y1="2.194546875" x2="0.37593125" y2="2.200971875" layer="200"/>
<rectangle x1="0.613703125" y1="2.194546875" x2="0.864321875" y2="2.200971875" layer="200"/>
<rectangle x1="1.114946875" y1="2.194546875" x2="1.378421875" y2="2.200971875" layer="200"/>
<rectangle x1="1.62261875" y1="2.194546875" x2="2.51585625" y2="2.200971875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.200971875" x2="-1.64189375" y2="2.207396875" layer="200"/>
<rectangle x1="-1.39126875" y1="2.200971875" x2="-1.14065" y2="2.207396875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.200971875" x2="-0.6137" y2="2.207396875" layer="200"/>
<rectangle x1="-0.395209375" y1="2.200971875" x2="-0.144590625" y2="2.207396875" layer="200"/>
<rectangle x1="0.1253125" y1="2.200971875" x2="0.37593125" y2="2.207396875" layer="200"/>
<rectangle x1="0.613703125" y1="2.200971875" x2="0.864321875" y2="2.207396875" layer="200"/>
<rectangle x1="1.114946875" y1="2.200971875" x2="1.378421875" y2="2.207396875" layer="200"/>
<rectangle x1="1.62261875" y1="2.200971875" x2="2.51585625" y2="2.207396875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.2074" x2="-1.64189375" y2="2.213825" layer="200"/>
<rectangle x1="-1.39126875" y1="2.2074" x2="-1.14065" y2="2.213825" layer="200"/>
<rectangle x1="-0.90930625" y1="2.2074" x2="-0.6137" y2="2.213825" layer="200"/>
<rectangle x1="-0.395209375" y1="2.2074" x2="-0.144590625" y2="2.213825" layer="200"/>
<rectangle x1="0.1253125" y1="2.2074" x2="0.37593125" y2="2.213825" layer="200"/>
<rectangle x1="0.607278125" y1="2.2074" x2="0.857896875" y2="2.213825" layer="200"/>
<rectangle x1="1.114946875" y1="2.2074" x2="1.378421875" y2="2.213825" layer="200"/>
<rectangle x1="1.62261875" y1="2.2074" x2="2.51585625" y2="2.213825" layer="200"/>
<rectangle x1="-2.52228125" y1="2.213825" x2="-1.64189375" y2="2.22025" layer="200"/>
<rectangle x1="-1.38484375" y1="2.213825" x2="-1.134225" y2="2.22025" layer="200"/>
<rectangle x1="-0.902878125" y1="2.213825" x2="-0.613703125" y2="2.22025" layer="200"/>
<rectangle x1="-0.395209375" y1="2.213825" x2="-0.144590625" y2="2.22025" layer="200"/>
<rectangle x1="0.1253125" y1="2.213825" x2="0.36950625" y2="2.22025" layer="200"/>
<rectangle x1="0.607278125" y1="2.213825" x2="0.857896875" y2="2.22025" layer="200"/>
<rectangle x1="1.108521875" y1="2.213825" x2="1.378421875" y2="2.22025" layer="200"/>
<rectangle x1="1.62261875" y1="2.213825" x2="2.51585625" y2="2.22025" layer="200"/>
<rectangle x1="-2.52228125" y1="2.22025" x2="-1.64189375" y2="2.226675" layer="200"/>
<rectangle x1="-1.37841875" y1="2.22025" x2="-1.134225" y2="2.226675" layer="200"/>
<rectangle x1="-0.902878125" y1="2.22025" x2="-0.613703125" y2="2.226675" layer="200"/>
<rectangle x1="-0.395209375" y1="2.22025" x2="-0.144590625" y2="2.226675" layer="200"/>
<rectangle x1="0.1188875" y1="2.22025" x2="0.37593125" y2="2.226675" layer="200"/>
<rectangle x1="0.607278125" y1="2.22025" x2="0.851471875" y2="2.226675" layer="200"/>
<rectangle x1="1.108521875" y1="2.22025" x2="1.378421875" y2="2.226675" layer="200"/>
<rectangle x1="1.62261875" y1="2.22025" x2="2.51585625" y2="2.226675" layer="200"/>
<rectangle x1="-2.52228125" y1="2.226678125" x2="-1.64189375" y2="2.233103125" layer="200"/>
<rectangle x1="-1.37841875" y1="2.226678125" x2="-1.134225" y2="2.233103125" layer="200"/>
<rectangle x1="-0.902878125" y1="2.226678125" x2="-0.613703125" y2="2.233103125" layer="200"/>
<rectangle x1="-0.395209375" y1="2.226678125" x2="-0.144590625" y2="2.233103125" layer="200"/>
<rectangle x1="0.1188875" y1="2.226678125" x2="0.37593125" y2="2.233103125" layer="200"/>
<rectangle x1="0.607278125" y1="2.226678125" x2="0.851471875" y2="2.233103125" layer="200"/>
<rectangle x1="1.108521875" y1="2.226678125" x2="1.378421875" y2="2.233103125" layer="200"/>
<rectangle x1="1.62261875" y1="2.226678125" x2="2.51585625" y2="2.233103125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.233103125" x2="-1.64189375" y2="2.239528125" layer="200"/>
<rectangle x1="-1.37841875" y1="2.233103125" x2="-1.14065" y2="2.239528125" layer="200"/>
<rectangle x1="-0.902878125" y1="2.233103125" x2="-0.613703125" y2="2.239528125" layer="200"/>
<rectangle x1="-0.395209375" y1="2.233103125" x2="-0.144590625" y2="2.239528125" layer="200"/>
<rectangle x1="0.1188875" y1="2.233103125" x2="0.3823625" y2="2.239528125" layer="200"/>
<rectangle x1="0.613703125" y1="2.233103125" x2="0.851471875" y2="2.239528125" layer="200"/>
<rectangle x1="1.108521875" y1="2.233103125" x2="1.378421875" y2="2.239528125" layer="200"/>
<rectangle x1="1.62261875" y1="2.233103125" x2="2.51585625" y2="2.239528125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.23953125" x2="-1.64189375" y2="2.24595625" layer="200"/>
<rectangle x1="-1.371990625" y1="2.23953125" x2="-1.140646875" y2="2.24595625" layer="200"/>
<rectangle x1="-0.902878125" y1="2.23953125" x2="-0.613703125" y2="2.24595625" layer="200"/>
<rectangle x1="-0.395209375" y1="2.23953125" x2="-0.144590625" y2="2.24595625" layer="200"/>
<rectangle x1="0.112459375" y1="2.23953125" x2="0.375934375" y2="2.24595625" layer="200"/>
<rectangle x1="0.613703125" y1="2.23953125" x2="0.851471875" y2="2.24595625" layer="200"/>
<rectangle x1="1.108521875" y1="2.23953125" x2="1.378421875" y2="2.24595625" layer="200"/>
<rectangle x1="1.62261875" y1="2.23953125" x2="2.51585625" y2="2.24595625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.24595625" x2="-1.64189375" y2="2.25238125" layer="200"/>
<rectangle x1="-1.371990625" y1="2.24595625" x2="-1.140646875" y2="2.25238125" layer="200"/>
<rectangle x1="-0.902878125" y1="2.24595625" x2="-0.620128125" y2="2.25238125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.24595625" x2="-0.144590625" y2="2.25238125" layer="200"/>
<rectangle x1="0.112459375" y1="2.24595625" x2="0.375934375" y2="2.25238125" layer="200"/>
<rectangle x1="0.613703125" y1="2.24595625" x2="0.851471875" y2="2.25238125" layer="200"/>
<rectangle x1="1.114946875" y1="2.24595625" x2="1.378421875" y2="2.25238125" layer="200"/>
<rectangle x1="1.62261875" y1="2.24595625" x2="2.51585625" y2="2.25238125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.25238125" x2="-1.64189375" y2="2.25880625" layer="200"/>
<rectangle x1="-1.371990625" y1="2.25238125" x2="-1.140646875" y2="2.25880625" layer="200"/>
<rectangle x1="-0.902878125" y1="2.25238125" x2="-0.626553125" y2="2.25880625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.25238125" x2="-0.144590625" y2="2.25880625" layer="200"/>
<rectangle x1="0.106034375" y1="2.25238125" x2="0.369509375" y2="2.25880625" layer="200"/>
<rectangle x1="0.613703125" y1="2.25238125" x2="0.851471875" y2="2.25880625" layer="200"/>
<rectangle x1="1.114946875" y1="2.25238125" x2="1.378421875" y2="2.25880625" layer="200"/>
<rectangle x1="1.62261875" y1="2.25238125" x2="2.51585625" y2="2.25880625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.258809375" x2="-1.64189375" y2="2.265234375" layer="200"/>
<rectangle x1="-1.37841875" y1="2.258809375" x2="-1.14065" y2="2.265234375" layer="200"/>
<rectangle x1="-0.902878125" y1="2.258809375" x2="-0.632978125" y2="2.265234375" layer="200"/>
<rectangle x1="-0.388784375" y1="2.258809375" x2="-0.144590625" y2="2.265234375" layer="200"/>
<rectangle x1="0.106034375" y1="2.258809375" x2="0.363078125" y2="2.265234375" layer="200"/>
<rectangle x1="0.613703125" y1="2.258809375" x2="0.851471875" y2="2.265234375" layer="200"/>
<rectangle x1="1.121375" y1="2.258809375" x2="1.38484375" y2="2.265234375" layer="200"/>
<rectangle x1="1.62261875" y1="2.258809375" x2="2.51585625" y2="2.265234375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.265234375" x2="-1.64189375" y2="2.271659375" layer="200"/>
<rectangle x1="-1.37841875" y1="2.265234375" x2="-1.14065" y2="2.271659375" layer="200"/>
<rectangle x1="-0.902878125" y1="2.265234375" x2="-0.632978125" y2="2.271659375" layer="200"/>
<rectangle x1="-0.388784375" y1="2.265234375" x2="-0.144590625" y2="2.271659375" layer="200"/>
<rectangle x1="0.106034375" y1="2.265234375" x2="0.356653125" y2="2.271659375" layer="200"/>
<rectangle x1="0.613703125" y1="2.265234375" x2="0.857896875" y2="2.271659375" layer="200"/>
<rectangle x1="1.121375" y1="2.265234375" x2="1.391275" y2="2.271659375" layer="200"/>
<rectangle x1="1.62261875" y1="2.265234375" x2="2.51585625" y2="2.271659375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.271659375" x2="-1.64189375" y2="2.278084375" layer="200"/>
<rectangle x1="-1.38484375" y1="2.271659375" x2="-1.14065" y2="2.278084375" layer="200"/>
<rectangle x1="-0.902878125" y1="2.271659375" x2="-0.639409375" y2="2.278084375" layer="200"/>
<rectangle x1="-0.388784375" y1="2.271659375" x2="-0.144590625" y2="2.278084375" layer="200"/>
<rectangle x1="0.106034375" y1="2.271659375" x2="0.356653125" y2="2.278084375" layer="200"/>
<rectangle x1="0.613703125" y1="2.271659375" x2="0.864321875" y2="2.278084375" layer="200"/>
<rectangle x1="1.121375" y1="2.271659375" x2="1.391275" y2="2.278084375" layer="200"/>
<rectangle x1="1.62261875" y1="2.271659375" x2="2.51585625" y2="2.278084375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.2780875" x2="-1.64189375" y2="2.2845125" layer="200"/>
<rectangle x1="-1.38484375" y1="2.2780875" x2="-1.14065" y2="2.2845125" layer="200"/>
<rectangle x1="-0.896453125" y1="2.2780875" x2="-0.639409375" y2="2.2845125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.2780875" x2="-0.144590625" y2="2.2845125" layer="200"/>
<rectangle x1="0.112459375" y1="2.2780875" x2="0.356653125" y2="2.2845125" layer="200"/>
<rectangle x1="0.613703125" y1="2.2780875" x2="0.870753125" y2="2.2845125" layer="200"/>
<rectangle x1="1.1278" y1="2.2780875" x2="1.391275" y2="2.2845125" layer="200"/>
<rectangle x1="1.62261875" y1="2.2780875" x2="1.9889125" y2="2.2845125" layer="200"/>
<rectangle x1="2.0017625" y1="2.2780875" x2="2.51585625" y2="2.2845125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.2845125" x2="-1.64189375" y2="2.2909375" layer="200"/>
<rectangle x1="-1.39126875" y1="2.2845125" x2="-1.14065" y2="2.2909375" layer="200"/>
<rectangle x1="-0.896453125" y1="2.2845125" x2="-0.639409375" y2="2.2909375" layer="200"/>
<rectangle x1="-0.388784375" y1="2.2845125" x2="-0.144590625" y2="2.2909375" layer="200"/>
<rectangle x1="0.112459375" y1="2.2845125" x2="0.356653125" y2="2.2909375" layer="200"/>
<rectangle x1="0.613703125" y1="2.2845125" x2="0.870753125" y2="2.2909375" layer="200"/>
<rectangle x1="1.121375" y1="2.2845125" x2="1.391275" y2="2.2909375" layer="200"/>
<rectangle x1="1.62261875" y1="2.2845125" x2="1.98248125" y2="2.2909375" layer="200"/>
<rectangle x1="2.008190625" y1="2.2845125" x2="2.335921875" y2="2.2909375" layer="200"/>
<rectangle x1="2.348778125" y1="2.2845125" x2="2.515859375" y2="2.2909375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.290940625" x2="-1.64189375" y2="2.297365625" layer="200"/>
<rectangle x1="-1.39126875" y1="2.290940625" x2="-1.14065" y2="2.297365625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.290940625" x2="-0.639409375" y2="2.297365625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.290940625" x2="-0.144590625" y2="2.297365625" layer="200"/>
<rectangle x1="0.112459375" y1="2.290940625" x2="0.350228125" y2="2.297365625" layer="200"/>
<rectangle x1="0.613703125" y1="2.290940625" x2="0.877178125" y2="2.297365625" layer="200"/>
<rectangle x1="1.121375" y1="2.290940625" x2="1.391275" y2="2.297365625" layer="200"/>
<rectangle x1="1.62261875" y1="2.290940625" x2="1.98248125" y2="2.297365625" layer="200"/>
<rectangle x1="2.008190625" y1="2.290940625" x2="2.335921875" y2="2.297365625" layer="200"/>
<rectangle x1="2.348778125" y1="2.290940625" x2="2.515859375" y2="2.297365625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.297365625" x2="-1.64189375" y2="2.303790625" layer="200"/>
<rectangle x1="-1.397696875" y1="2.297365625" x2="-1.140646875" y2="2.303790625" layer="200"/>
<rectangle x1="-0.896453125" y1="2.297365625" x2="-0.639409375" y2="2.303790625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.297365625" x2="-0.144590625" y2="2.303790625" layer="200"/>
<rectangle x1="0.112459375" y1="2.297365625" x2="0.356653125" y2="2.303790625" layer="200"/>
<rectangle x1="0.607278125" y1="2.297365625" x2="0.883603125" y2="2.303790625" layer="200"/>
<rectangle x1="1.121375" y1="2.297365625" x2="1.391275" y2="2.303790625" layer="200"/>
<rectangle x1="1.62904375" y1="2.297365625" x2="1.98248125" y2="2.303790625" layer="200"/>
<rectangle x1="2.008190625" y1="2.297365625" x2="2.342353125" y2="2.303790625" layer="200"/>
<rectangle x1="2.348778125" y1="2.297365625" x2="2.515859375" y2="2.303790625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.303790625" x2="-1.64189375" y2="2.310215625" layer="200"/>
<rectangle x1="-1.41055" y1="2.303790625" x2="-1.14065" y2="2.310215625" layer="200"/>
<rectangle x1="-0.902878125" y1="2.303790625" x2="-0.639409375" y2="2.310215625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.303790625" x2="-0.144590625" y2="2.310215625" layer="200"/>
<rectangle x1="0.112459375" y1="2.303790625" x2="0.356653125" y2="2.310215625" layer="200"/>
<rectangle x1="0.607278125" y1="2.303790625" x2="0.883603125" y2="2.310215625" layer="200"/>
<rectangle x1="1.114946875" y1="2.303790625" x2="1.391271875" y2="2.310215625" layer="200"/>
<rectangle x1="1.62904375" y1="2.303790625" x2="1.98248125" y2="2.310215625" layer="200"/>
<rectangle x1="2.008190625" y1="2.303790625" x2="2.515859375" y2="2.310215625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.31021875" x2="-1.63546875" y2="2.31664375" layer="200"/>
<rectangle x1="-1.41055" y1="2.31021875" x2="-1.14065" y2="2.31664375" layer="200"/>
<rectangle x1="-0.90930625" y1="2.31021875" x2="-0.63940625" y2="2.31664375" layer="200"/>
<rectangle x1="-0.388784375" y1="2.31021875" x2="-0.144590625" y2="2.31664375" layer="200"/>
<rectangle x1="0.112459375" y1="2.31021875" x2="0.356653125" y2="2.31664375" layer="200"/>
<rectangle x1="0.607278125" y1="2.31021875" x2="0.883603125" y2="2.31664375" layer="200"/>
<rectangle x1="1.108521875" y1="2.31021875" x2="1.384846875" y2="2.31664375" layer="200"/>
<rectangle x1="1.63546875" y1="2.31021875" x2="2.51585625" y2="2.31664375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.31664375" x2="-1.63546875" y2="2.32306875" layer="200"/>
<rectangle x1="-1.41055" y1="2.31664375" x2="-1.134225" y2="2.32306875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.31664375" x2="-0.63940625" y2="2.32306875" layer="200"/>
<rectangle x1="-0.388784375" y1="2.31664375" x2="-0.138165625" y2="2.32306875" layer="200"/>
<rectangle x1="0.106034375" y1="2.31664375" x2="0.363078125" y2="2.32306875" layer="200"/>
<rectangle x1="0.607278125" y1="2.31664375" x2="0.883603125" y2="2.32306875" layer="200"/>
<rectangle x1="1.108521875" y1="2.31664375" x2="1.384846875" y2="2.32306875" layer="200"/>
<rectangle x1="1.63546875" y1="2.31664375" x2="2.51585625" y2="2.32306875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.323071875" x2="-1.63546875" y2="2.329496875" layer="200"/>
<rectangle x1="-1.41055" y1="2.323071875" x2="-1.134225" y2="2.329496875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.323071875" x2="-0.63940625" y2="2.329496875" layer="200"/>
<rectangle x1="-0.388784375" y1="2.323071875" x2="-0.138165625" y2="2.329496875" layer="200"/>
<rectangle x1="0.106034375" y1="2.323071875" x2="0.363078125" y2="2.329496875" layer="200"/>
<rectangle x1="0.613703125" y1="2.323071875" x2="0.877178125" y2="2.329496875" layer="200"/>
<rectangle x1="1.108521875" y1="2.323071875" x2="1.378421875" y2="2.329496875" layer="200"/>
<rectangle x1="1.63546875" y1="2.323071875" x2="2.51585625" y2="2.329496875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.329496875" x2="-1.63546875" y2="2.335921875" layer="200"/>
<rectangle x1="-1.41055" y1="2.329496875" x2="-1.134225" y2="2.335921875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.329496875" x2="-0.63940625" y2="2.335921875" layer="200"/>
<rectangle x1="-0.388784375" y1="2.329496875" x2="-0.131734375" y2="2.335921875" layer="200"/>
<rectangle x1="0.106034375" y1="2.329496875" x2="0.369509375" y2="2.335921875" layer="200"/>
<rectangle x1="0.613703125" y1="2.329496875" x2="0.870753125" y2="2.335921875" layer="200"/>
<rectangle x1="1.102096875" y1="2.329496875" x2="1.378421875" y2="2.335921875" layer="200"/>
<rectangle x1="1.63546875" y1="2.329496875" x2="2.51585625" y2="2.335921875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.335921875" x2="-1.63546875" y2="2.342346875" layer="200"/>
<rectangle x1="-1.41055" y1="2.335921875" x2="-1.134225" y2="2.342346875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.335921875" x2="-0.63940625" y2="2.342346875" layer="200"/>
<rectangle x1="-0.388784375" y1="2.335921875" x2="-0.131734375" y2="2.342346875" layer="200"/>
<rectangle x1="0.099609375" y1="2.335921875" x2="0.375934375" y2="2.342346875" layer="200"/>
<rectangle x1="0.613703125" y1="2.335921875" x2="0.864321875" y2="2.342346875" layer="200"/>
<rectangle x1="1.108521875" y1="2.335921875" x2="1.378421875" y2="2.342346875" layer="200"/>
<rectangle x1="1.63546875" y1="2.335921875" x2="1.92465" y2="2.342346875" layer="200"/>
<rectangle x1="1.95678125" y1="2.335921875" x2="2.51585625" y2="2.342346875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.34235" x2="-1.63546875" y2="2.348775" layer="200"/>
<rectangle x1="-1.41055" y1="2.34235" x2="-1.134225" y2="2.348775" layer="200"/>
<rectangle x1="-0.90930625" y1="2.34235" x2="-0.63940625" y2="2.348775" layer="200"/>
<rectangle x1="-0.388784375" y1="2.34235" x2="-0.131734375" y2="2.348775" layer="200"/>
<rectangle x1="0.09318125" y1="2.34235" x2="0.37593125" y2="2.348775" layer="200"/>
<rectangle x1="0.62013125" y1="2.34235" x2="0.864325" y2="2.348775" layer="200"/>
<rectangle x1="1.114946875" y1="2.34235" x2="1.378421875" y2="2.348775" layer="200"/>
<rectangle x1="1.62904375" y1="2.34235" x2="1.92465" y2="2.348775" layer="200"/>
<rectangle x1="1.95678125" y1="2.34235" x2="2.51585625" y2="2.348775" layer="200"/>
<rectangle x1="-2.52228125" y1="2.348775" x2="-1.63546875" y2="2.3552" layer="200"/>
<rectangle x1="-1.404121875" y1="2.348775" x2="-1.134221875" y2="2.3552" layer="200"/>
<rectangle x1="-0.90930625" y1="2.348775" x2="-0.63940625" y2="2.3552" layer="200"/>
<rectangle x1="-0.388784375" y1="2.348775" x2="-0.125309375" y2="2.3552" layer="200"/>
<rectangle x1="0.09318125" y1="2.348775" x2="0.37593125" y2="2.3552" layer="200"/>
<rectangle x1="0.62655625" y1="2.348775" x2="0.8579" y2="2.3552" layer="200"/>
<rectangle x1="1.121375" y1="2.348775" x2="1.37199375" y2="2.3552" layer="200"/>
<rectangle x1="1.62904375" y1="2.348775" x2="1.92465" y2="2.3552" layer="200"/>
<rectangle x1="1.95678125" y1="2.348775" x2="2.51585625" y2="2.3552" layer="200"/>
<rectangle x1="-2.52228125" y1="2.3552" x2="-1.63546875" y2="2.361625" layer="200"/>
<rectangle x1="-1.404121875" y1="2.3552" x2="-1.134221875" y2="2.361625" layer="200"/>
<rectangle x1="-0.90930625" y1="2.3552" x2="-0.63298125" y2="2.361625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.3552" x2="-0.125309375" y2="2.361625" layer="200"/>
<rectangle x1="0.09318125" y1="2.3552" x2="0.37593125" y2="2.361625" layer="200"/>
<rectangle x1="0.62655625" y1="2.3552" x2="0.6715375" y2="2.361625" layer="200"/>
<rectangle x1="0.703671875" y1="2.3552" x2="0.857896875" y2="2.361625" layer="200"/>
<rectangle x1="1.1278" y1="2.3552" x2="1.37199375" y2="2.361625" layer="200"/>
<rectangle x1="1.62904375" y1="2.3552" x2="1.9375" y2="2.361625" layer="200"/>
<rectangle x1="1.950353125" y1="2.3552" x2="2.515859375" y2="2.361625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.361628125" x2="-1.63546875" y2="2.368053125" layer="200"/>
<rectangle x1="-1.397696875" y1="2.361628125" x2="-1.140646875" y2="2.368053125" layer="200"/>
<rectangle x1="-0.90930625" y1="2.361628125" x2="-0.63298125" y2="2.368053125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.361628125" x2="-0.118884375" y2="2.368053125" layer="200"/>
<rectangle x1="0.09318125" y1="2.361628125" x2="0.37593125" y2="2.368053125" layer="200"/>
<rectangle x1="0.62655625" y1="2.361628125" x2="0.6715375" y2="2.368053125" layer="200"/>
<rectangle x1="0.703671875" y1="2.361628125" x2="0.851471875" y2="2.368053125" layer="200"/>
<rectangle x1="1.1278" y1="2.361628125" x2="1.37199375" y2="2.368053125" layer="200"/>
<rectangle x1="1.62261875" y1="2.361628125" x2="2.50943125" y2="2.368053125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.368053125" x2="-1.64189375" y2="2.374478125" layer="200"/>
<rectangle x1="-1.404121875" y1="2.368053125" x2="-1.147078125" y2="2.374478125" layer="200"/>
<rectangle x1="-0.90930625" y1="2.368053125" x2="-0.62655625" y2="2.374478125" layer="200"/>
<rectangle x1="-0.388784375" y1="2.368053125" x2="-0.125309375" y2="2.374478125" layer="200"/>
<rectangle x1="0.08675625" y1="2.368053125" x2="0.37593125" y2="2.374478125" layer="200"/>
<rectangle x1="0.62655625" y1="2.368053125" x2="0.6715375" y2="2.374478125" layer="200"/>
<rectangle x1="0.703671875" y1="2.368053125" x2="0.851471875" y2="2.374478125" layer="200"/>
<rectangle x1="1.1278" y1="2.368053125" x2="1.37199375" y2="2.374478125" layer="200"/>
<rectangle x1="1.62261875" y1="2.368053125" x2="2.50943125" y2="2.374478125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.37448125" x2="-1.64189375" y2="2.38090625" layer="200"/>
<rectangle x1="-1.404121875" y1="2.37448125" x2="-1.153503125" y2="2.38090625" layer="200"/>
<rectangle x1="-0.91573125" y1="2.37448125" x2="-0.6137" y2="2.38090625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.37448125" x2="-0.125309375" y2="2.38090625" layer="200"/>
<rectangle x1="0.09318125" y1="2.37448125" x2="0.37593125" y2="2.38090625" layer="200"/>
<rectangle x1="0.62655625" y1="2.37448125" x2="0.6715375" y2="2.38090625" layer="200"/>
<rectangle x1="0.703671875" y1="2.37448125" x2="0.851471875" y2="2.38090625" layer="200"/>
<rectangle x1="1.134225" y1="2.37448125" x2="1.37199375" y2="2.38090625" layer="200"/>
<rectangle x1="1.616190625" y1="2.37448125" x2="2.509434375" y2="2.38090625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.38090625" x2="-1.64189375" y2="2.38733125" layer="200"/>
<rectangle x1="-1.404121875" y1="2.38090625" x2="-1.153503125" y2="2.38733125" layer="200"/>
<rectangle x1="-0.92215625" y1="2.38090625" x2="-0.6137" y2="2.38733125" layer="200"/>
<rectangle x1="-0.395209375" y1="2.38090625" x2="-0.131734375" y2="2.38733125" layer="200"/>
<rectangle x1="0.09318125" y1="2.38090625" x2="0.37593125" y2="2.38733125" layer="200"/>
<rectangle x1="0.62655625" y1="2.38090625" x2="0.68439375" y2="2.38733125" layer="200"/>
<rectangle x1="0.69081875" y1="2.38090625" x2="0.851475" y2="2.38733125" layer="200"/>
<rectangle x1="1.134225" y1="2.38090625" x2="1.37199375" y2="2.38733125" layer="200"/>
<rectangle x1="1.616190625" y1="2.38090625" x2="2.509434375" y2="2.38733125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.38733125" x2="-1.64189375" y2="2.39375625" layer="200"/>
<rectangle x1="-1.404121875" y1="2.38733125" x2="-1.159928125" y2="2.39375625" layer="200"/>
<rectangle x1="-0.928584375" y1="2.38733125" x2="-0.613703125" y2="2.39375625" layer="200"/>
<rectangle x1="-0.395209375" y1="2.38733125" x2="-0.131734375" y2="2.39375625" layer="200"/>
<rectangle x1="0.08675625" y1="2.38733125" x2="0.37593125" y2="2.39375625" layer="200"/>
<rectangle x1="0.62013125" y1="2.38733125" x2="0.851475" y2="2.39375625" layer="200"/>
<rectangle x1="1.1278" y1="2.38733125" x2="1.37199375" y2="2.39375625" layer="200"/>
<rectangle x1="1.616190625" y1="2.38733125" x2="2.509434375" y2="2.39375625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.393759375" x2="-1.64189375" y2="2.400184375" layer="200"/>
<rectangle x1="-1.404121875" y1="2.393759375" x2="-1.159928125" y2="2.400184375" layer="200"/>
<rectangle x1="-0.928584375" y1="2.393759375" x2="-0.613703125" y2="2.400184375" layer="200"/>
<rectangle x1="-0.395209375" y1="2.393759375" x2="-0.138165625" y2="2.400184375" layer="200"/>
<rectangle x1="0.08675625" y1="2.393759375" x2="0.37593125" y2="2.400184375" layer="200"/>
<rectangle x1="0.613703125" y1="2.393759375" x2="0.857896875" y2="2.400184375" layer="200"/>
<rectangle x1="1.121375" y1="2.393759375" x2="1.37841875" y2="2.400184375" layer="200"/>
<rectangle x1="1.616190625" y1="2.393759375" x2="1.706159375" y2="2.400184375" layer="200"/>
<rectangle x1="1.7254375" y1="2.393759375" x2="1.91821875" y2="2.400184375" layer="200"/>
<rectangle x1="1.9375" y1="2.393759375" x2="2.51585625" y2="2.400184375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.400184375" x2="-1.64189375" y2="2.406609375" layer="200"/>
<rectangle x1="-1.404121875" y1="2.400184375" x2="-1.159928125" y2="2.406609375" layer="200"/>
<rectangle x1="-0.928584375" y1="2.400184375" x2="-0.613703125" y2="2.406609375" layer="200"/>
<rectangle x1="-0.395209375" y1="2.400184375" x2="-0.138165625" y2="2.406609375" layer="200"/>
<rectangle x1="0.08033125" y1="2.400184375" x2="0.37593125" y2="2.406609375" layer="200"/>
<rectangle x1="0.607278125" y1="2.400184375" x2="0.857896875" y2="2.406609375" layer="200"/>
<rectangle x1="1.114946875" y1="2.400184375" x2="1.378421875" y2="2.406609375" layer="200"/>
<rectangle x1="1.616190625" y1="2.400184375" x2="1.706159375" y2="2.406609375" layer="200"/>
<rectangle x1="1.7318625" y1="2.400184375" x2="1.91179375" y2="2.406609375" layer="200"/>
<rectangle x1="1.943928125" y1="2.400184375" x2="2.515859375" y2="2.406609375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.4066125" x2="-1.64189375" y2="2.4130375" layer="200"/>
<rectangle x1="-1.41055" y1="2.4066125" x2="-1.15993125" y2="2.4130375" layer="200"/>
<rectangle x1="-0.928584375" y1="2.4066125" x2="-0.613703125" y2="2.4130375" layer="200"/>
<rectangle x1="-0.395209375" y1="2.4066125" x2="-0.138165625" y2="2.4130375" layer="200"/>
<rectangle x1="0.073903125" y1="2.4066125" x2="0.382359375" y2="2.4130375" layer="200"/>
<rectangle x1="0.607278125" y1="2.4066125" x2="0.864321875" y2="2.4130375" layer="200"/>
<rectangle x1="1.114946875" y1="2.4066125" x2="1.384846875" y2="2.4130375" layer="200"/>
<rectangle x1="1.616190625" y1="2.4066125" x2="1.706159375" y2="2.4130375" layer="200"/>
<rectangle x1="1.738290625" y1="2.4066125" x2="1.898940625" y2="2.4130375" layer="200"/>
<rectangle x1="1.950353125" y1="2.4066125" x2="2.515859375" y2="2.4130375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.4130375" x2="-1.64189375" y2="2.4194625" layer="200"/>
<rectangle x1="-1.41055" y1="2.4130375" x2="-1.15993125" y2="2.4194625" layer="200"/>
<rectangle x1="-0.928584375" y1="2.4130375" x2="-0.613703125" y2="2.4194625" layer="200"/>
<rectangle x1="-0.395209375" y1="2.4130375" x2="-0.138165625" y2="2.4194625" layer="200"/>
<rectangle x1="0.073903125" y1="2.4130375" x2="0.382359375" y2="2.4194625" layer="200"/>
<rectangle x1="0.600853125" y1="2.4130375" x2="0.864321875" y2="2.4194625" layer="200"/>
<rectangle x1="1.108521875" y1="2.4130375" x2="1.384846875" y2="2.4194625" layer="200"/>
<rectangle x1="1.62261875" y1="2.4130375" x2="1.70615625" y2="2.4194625" layer="200"/>
<rectangle x1="1.744715625" y1="2.4130375" x2="1.898940625" y2="2.4194625" layer="200"/>
<rectangle x1="1.96320625" y1="2.4130375" x2="2.51585625" y2="2.4194625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.4194625" x2="-1.63546875" y2="2.4258875" layer="200"/>
<rectangle x1="-1.416975" y1="2.4194625" x2="-1.1535" y2="2.4258875" layer="200"/>
<rectangle x1="-0.928584375" y1="2.4194625" x2="-0.613703125" y2="2.4258875" layer="200"/>
<rectangle x1="-0.395209375" y1="2.4194625" x2="-0.138165625" y2="2.4258875" layer="200"/>
<rectangle x1="0.073903125" y1="2.4194625" x2="0.382359375" y2="2.4258875" layer="200"/>
<rectangle x1="0.594425" y1="2.4194625" x2="0.87075" y2="2.4258875" layer="200"/>
<rectangle x1="1.108521875" y1="2.4194625" x2="1.237046875" y2="2.4258875" layer="200"/>
<rectangle x1="1.249896875" y1="2.4194625" x2="1.391271875" y2="2.4258875" layer="200"/>
<rectangle x1="1.62261875" y1="2.4194625" x2="1.70615625" y2="2.4258875" layer="200"/>
<rectangle x1="1.744715625" y1="2.4194625" x2="1.898940625" y2="2.4258875" layer="200"/>
<rectangle x1="1.96963125" y1="2.4194625" x2="2.51585625" y2="2.4258875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.425890625" x2="-1.63546875" y2="2.432315625" layer="200"/>
<rectangle x1="-1.41055" y1="2.425890625" x2="-1.147075" y2="2.432315625" layer="200"/>
<rectangle x1="-0.92215625" y1="2.425890625" x2="-0.62655625" y2="2.432315625" layer="200"/>
<rectangle x1="-0.395209375" y1="2.425890625" x2="-0.138165625" y2="2.432315625" layer="200"/>
<rectangle x1="0.08033125" y1="2.425890625" x2="0.3823625" y2="2.432315625" layer="200"/>
<rectangle x1="0.594425" y1="2.425890625" x2="0.87075" y2="2.432315625" layer="200"/>
<rectangle x1="1.102096875" y1="2.425890625" x2="1.397696875" y2="2.432315625" layer="200"/>
<rectangle x1="1.62261875" y1="2.425890625" x2="1.70615625" y2="2.432315625" layer="200"/>
<rectangle x1="1.744715625" y1="2.425890625" x2="1.905371875" y2="2.432315625" layer="200"/>
<rectangle x1="1.976059375" y1="2.425890625" x2="2.515859375" y2="2.432315625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.432315625" x2="-1.63546875" y2="2.438740625" layer="200"/>
<rectangle x1="-1.41055" y1="2.432315625" x2="-1.14065" y2="2.438740625" layer="200"/>
<rectangle x1="-0.91573125" y1="2.432315625" x2="-0.63298125" y2="2.438740625" layer="200"/>
<rectangle x1="-0.395209375" y1="2.432315625" x2="-0.138165625" y2="2.438740625" layer="200"/>
<rectangle x1="0.08675625" y1="2.432315625" x2="0.37593125" y2="2.438740625" layer="200"/>
<rectangle x1="0.594425" y1="2.432315625" x2="0.87075" y2="2.438740625" layer="200"/>
<rectangle x1="1.102096875" y1="2.432315625" x2="1.397696875" y2="2.438740625" layer="200"/>
<rectangle x1="1.616190625" y1="2.432315625" x2="1.712584375" y2="2.438740625" layer="200"/>
<rectangle x1="1.744715625" y1="2.432315625" x2="1.918221875" y2="2.438740625" layer="200"/>
<rectangle x1="1.976059375" y1="2.432315625" x2="2.515859375" y2="2.438740625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.438740625" x2="-1.62904375" y2="2.445165625" layer="200"/>
<rectangle x1="-1.404121875" y1="2.438740625" x2="-1.140646875" y2="2.445165625" layer="200"/>
<rectangle x1="-0.91573125" y1="2.438740625" x2="-0.63298125" y2="2.445165625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.438740625" x2="-0.138165625" y2="2.445165625" layer="200"/>
<rectangle x1="0.09318125" y1="2.438740625" x2="0.37593125" y2="2.445165625" layer="200"/>
<rectangle x1="0.594425" y1="2.438740625" x2="0.877175" y2="2.445165625" layer="200"/>
<rectangle x1="1.102096875" y1="2.438740625" x2="1.397696875" y2="2.445165625" layer="200"/>
<rectangle x1="1.62261875" y1="2.438740625" x2="1.91821875" y2="2.445165625" layer="200"/>
<rectangle x1="1.982484375" y1="2.438740625" x2="2.515859375" y2="2.445165625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.44516875" x2="-1.62904375" y2="2.45159375" layer="200"/>
<rectangle x1="-1.404121875" y1="2.44516875" x2="-1.134221875" y2="2.45159375" layer="200"/>
<rectangle x1="-0.91573125" y1="2.44516875" x2="-0.63298125" y2="2.45159375" layer="200"/>
<rectangle x1="-0.38235625" y1="2.44516875" x2="-0.1381625" y2="2.45159375" layer="200"/>
<rectangle x1="0.099609375" y1="2.44516875" x2="0.382359375" y2="2.45159375" layer="200"/>
<rectangle x1="0.600853125" y1="2.44516875" x2="0.877178125" y2="2.45159375" layer="200"/>
<rectangle x1="1.102096875" y1="2.44516875" x2="1.397696875" y2="2.45159375" layer="200"/>
<rectangle x1="1.62261875" y1="2.44516875" x2="1.92465" y2="2.45159375" layer="200"/>
<rectangle x1="1.982484375" y1="2.44516875" x2="2.515859375" y2="2.45159375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.45159375" x2="-1.62904375" y2="2.45801875" layer="200"/>
<rectangle x1="-1.397696875" y1="2.45159375" x2="-1.134221875" y2="2.45801875" layer="200"/>
<rectangle x1="-0.91573125" y1="2.45159375" x2="-0.63298125" y2="2.45801875" layer="200"/>
<rectangle x1="-0.37593125" y1="2.45159375" x2="-0.1381625" y2="2.45801875" layer="200"/>
<rectangle x1="0.106034375" y1="2.45159375" x2="0.382359375" y2="2.45801875" layer="200"/>
<rectangle x1="0.607278125" y1="2.45159375" x2="0.877178125" y2="2.45801875" layer="200"/>
<rectangle x1="1.108521875" y1="2.45159375" x2="1.397696875" y2="2.45801875" layer="200"/>
<rectangle x1="1.62261875" y1="2.45159375" x2="1.92465" y2="2.45801875" layer="200"/>
<rectangle x1="1.982484375" y1="2.45159375" x2="2.515859375" y2="2.45801875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.458021875" x2="-1.62904375" y2="2.464446875" layer="200"/>
<rectangle x1="-1.39126875" y1="2.458021875" x2="-1.134225" y2="2.464446875" layer="200"/>
<rectangle x1="-0.90930625" y1="2.458021875" x2="-0.63298125" y2="2.464446875" layer="200"/>
<rectangle x1="-0.369503125" y1="2.458021875" x2="-0.138165625" y2="2.464446875" layer="200"/>
<rectangle x1="0.112459375" y1="2.458021875" x2="0.382359375" y2="2.464446875" layer="200"/>
<rectangle x1="0.613703125" y1="2.458021875" x2="0.883603125" y2="2.464446875" layer="200"/>
<rectangle x1="1.114946875" y1="2.458021875" x2="1.391271875" y2="2.464446875" layer="200"/>
<rectangle x1="1.62904375" y1="2.458021875" x2="1.931075" y2="2.464446875" layer="200"/>
<rectangle x1="1.982484375" y1="2.458021875" x2="2.515859375" y2="2.464446875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.464446875" x2="-1.6226125" y2="2.470871875" layer="200"/>
<rectangle x1="-1.38484375" y1="2.464446875" x2="-1.134225" y2="2.470871875" layer="200"/>
<rectangle x1="-0.902878125" y1="2.464446875" x2="-0.632978125" y2="2.470871875" layer="200"/>
<rectangle x1="-0.363078125" y1="2.464446875" x2="-0.131734375" y2="2.470871875" layer="200"/>
<rectangle x1="0.1188875" y1="2.464446875" x2="0.3887875" y2="2.470871875" layer="200"/>
<rectangle x1="0.62655625" y1="2.464446875" x2="0.88360625" y2="2.470871875" layer="200"/>
<rectangle x1="1.121375" y1="2.464446875" x2="1.38484375" y2="2.470871875" layer="200"/>
<rectangle x1="1.62904375" y1="2.464446875" x2="1.931075" y2="2.470871875" layer="200"/>
<rectangle x1="1.982484375" y1="2.464446875" x2="2.515859375" y2="2.470871875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.470871875" x2="-1.6161875" y2="2.477296875" layer="200"/>
<rectangle x1="-1.371990625" y1="2.470871875" x2="-1.140646875" y2="2.477296875" layer="200"/>
<rectangle x1="-0.896453125" y1="2.470871875" x2="-0.626553125" y2="2.477296875" layer="200"/>
<rectangle x1="-0.356653125" y1="2.470871875" x2="-0.131734375" y2="2.477296875" layer="200"/>
<rectangle x1="0.1188875" y1="2.470871875" x2="0.3887875" y2="2.477296875" layer="200"/>
<rectangle x1="0.632984375" y1="2.470871875" x2="0.890028125" y2="2.477296875" layer="200"/>
<rectangle x1="1.1278" y1="2.470871875" x2="1.37841875" y2="2.477296875" layer="200"/>
<rectangle x1="1.63546875" y1="2.470871875" x2="1.931075" y2="2.477296875" layer="200"/>
<rectangle x1="1.982484375" y1="2.470871875" x2="2.515859375" y2="2.477296875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.4773" x2="-1.6097625" y2="2.483725" layer="200"/>
<rectangle x1="-1.359140625" y1="2.4773" x2="-1.140646875" y2="2.483725" layer="200"/>
<rectangle x1="-0.890025" y1="2.4773" x2="-0.620125" y2="2.483725" layer="200"/>
<rectangle x1="-0.356653125" y1="2.4773" x2="-0.131734375" y2="2.483725" layer="200"/>
<rectangle x1="0.1253125" y1="2.4773" x2="0.4144875" y2="2.483725" layer="200"/>
<rectangle x1="0.639409375" y1="2.4773" x2="0.896453125" y2="2.483725" layer="200"/>
<rectangle x1="1.134225" y1="2.4773" x2="1.38484375" y2="2.483725" layer="200"/>
<rectangle x1="1.63546875" y1="2.4773" x2="1.9375" y2="2.483725" layer="200"/>
<rectangle x1="1.982484375" y1="2.4773" x2="2.515859375" y2="2.483725" layer="200"/>
<rectangle x1="-2.52228125" y1="2.483725" x2="-1.6097625" y2="2.49015" layer="200"/>
<rectangle x1="-1.359140625" y1="2.483725" x2="-1.140646875" y2="2.49015" layer="200"/>
<rectangle x1="-0.8836" y1="2.483725" x2="-0.6137" y2="2.49015" layer="200"/>
<rectangle x1="-0.350225" y1="2.483725" x2="-0.1253125" y2="2.49015" layer="200"/>
<rectangle x1="0.1253125" y1="2.483725" x2="0.4144875" y2="2.49015" layer="200"/>
<rectangle x1="0.645834375" y1="2.483725" x2="0.902884375" y2="2.49015" layer="200"/>
<rectangle x1="1.134225" y1="2.483725" x2="1.38484375" y2="2.49015" layer="200"/>
<rectangle x1="1.641896875" y1="2.483725" x2="1.943928125" y2="2.49015" layer="200"/>
<rectangle x1="1.982484375" y1="2.483725" x2="2.515859375" y2="2.49015" layer="200"/>
<rectangle x1="-2.52228125" y1="2.490153125" x2="-1.6097625" y2="2.496578125" layer="200"/>
<rectangle x1="-1.3527125" y1="2.490153125" x2="-1.14065" y2="2.496578125" layer="200"/>
<rectangle x1="-0.8836" y1="2.490153125" x2="-0.6137" y2="2.496578125" layer="200"/>
<rectangle x1="-0.3438" y1="2.490153125" x2="-0.11888125" y2="2.496578125" layer="200"/>
<rectangle x1="0.1253125" y1="2.490153125" x2="0.4144875" y2="2.496578125" layer="200"/>
<rectangle x1="0.645834375" y1="2.490153125" x2="0.902884375" y2="2.496578125" layer="200"/>
<rectangle x1="1.134225" y1="2.490153125" x2="1.38484375" y2="2.496578125" layer="200"/>
<rectangle x1="1.641896875" y1="2.490153125" x2="1.950353125" y2="2.496578125" layer="200"/>
<rectangle x1="1.976059375" y1="2.490153125" x2="2.515859375" y2="2.496578125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.496578125" x2="-1.6097625" y2="2.503003125" layer="200"/>
<rectangle x1="-1.3527125" y1="2.496578125" x2="-1.14065" y2="2.503003125" layer="200"/>
<rectangle x1="-0.8836" y1="2.496578125" x2="-0.6137" y2="2.503003125" layer="200"/>
<rectangle x1="-0.3438" y1="2.496578125" x2="-0.09318125" y2="2.503003125" layer="200"/>
<rectangle x1="0.1253125" y1="2.496578125" x2="0.4144875" y2="2.503003125" layer="200"/>
<rectangle x1="0.645834375" y1="2.496578125" x2="0.902884375" y2="2.503003125" layer="200"/>
<rectangle x1="1.134225" y1="2.496578125" x2="1.38484375" y2="2.503003125" layer="200"/>
<rectangle x1="1.641896875" y1="2.496578125" x2="2.509434375" y2="2.503003125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.503003125" x2="-1.6097625" y2="2.509428125" layer="200"/>
<rectangle x1="-1.3527125" y1="2.503003125" x2="-1.134225" y2="2.509428125" layer="200"/>
<rectangle x1="-0.8836" y1="2.503003125" x2="-0.6137" y2="2.509428125" layer="200"/>
<rectangle x1="-0.3438" y1="2.503003125" x2="-0.09318125" y2="2.509428125" layer="200"/>
<rectangle x1="0.1253125" y1="2.503003125" x2="0.4144875" y2="2.509428125" layer="200"/>
<rectangle x1="0.645834375" y1="2.503003125" x2="0.902884375" y2="2.509428125" layer="200"/>
<rectangle x1="1.134225" y1="2.503003125" x2="1.38484375" y2="2.509428125" layer="200"/>
<rectangle x1="1.641896875" y1="2.503003125" x2="2.509434375" y2="2.509428125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.50943125" x2="-1.6033375" y2="2.51585625" layer="200"/>
<rectangle x1="-1.3527125" y1="2.50943125" x2="-1.134225" y2="2.51585625" layer="200"/>
<rectangle x1="-0.8836" y1="2.50943125" x2="-0.6137" y2="2.51585625" layer="200"/>
<rectangle x1="-0.337371875" y1="2.50943125" x2="-0.093178125" y2="2.51585625" layer="200"/>
<rectangle x1="0.1253125" y1="2.50943125" x2="0.4144875" y2="2.51585625" layer="200"/>
<rectangle x1="0.645834375" y1="2.50943125" x2="0.902884375" y2="2.51585625" layer="200"/>
<rectangle x1="1.134225" y1="2.50943125" x2="1.391275" y2="2.51585625" layer="200"/>
<rectangle x1="1.641896875" y1="2.50943125" x2="2.503003125" y2="2.51585625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.51585625" x2="-1.6033375" y2="2.52228125" layer="200"/>
<rectangle x1="-1.359140625" y1="2.51585625" x2="-1.114946875" y2="2.52228125" layer="200"/>
<rectangle x1="-1.0828125" y1="2.51585625" x2="-0.97356875" y2="2.52228125" layer="200"/>
<rectangle x1="-0.8836" y1="2.51585625" x2="-0.6137" y2="2.52228125" layer="200"/>
<rectangle x1="-0.337371875" y1="2.51585625" x2="-0.054621875" y2="2.52228125" layer="200"/>
<rectangle x1="0.1253125" y1="2.51585625" x2="0.4144875" y2="2.52228125" layer="200"/>
<rectangle x1="0.645834375" y1="2.51585625" x2="0.902884375" y2="2.52228125" layer="200"/>
<rectangle x1="1.134225" y1="2.51585625" x2="1.391275" y2="2.52228125" layer="200"/>
<rectangle x1="1.641896875" y1="2.51585625" x2="2.496578125" y2="2.52228125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.52228125" x2="-1.5969125" y2="2.52870625" layer="200"/>
<rectangle x1="-1.359140625" y1="2.52228125" x2="-1.102090625" y2="2.52870625" layer="200"/>
<rectangle x1="-1.095665625" y1="2.52228125" x2="-0.967140625" y2="2.52870625" layer="200"/>
<rectangle x1="-0.8836" y1="2.52228125" x2="-0.44661875" y2="2.52870625" layer="200"/>
<rectangle x1="-0.3438" y1="2.52228125" x2="-0.04819375" y2="2.52870625" layer="200"/>
<rectangle x1="0.1188875" y1="2.52228125" x2="0.4144875" y2="2.52870625" layer="200"/>
<rectangle x1="0.645834375" y1="2.52228125" x2="0.902884375" y2="2.52870625" layer="200"/>
<rectangle x1="1.134225" y1="2.52228125" x2="1.404125" y2="2.52870625" layer="200"/>
<rectangle x1="1.474815625" y1="2.52228125" x2="1.519796875" y2="2.52870625" layer="200"/>
<rectangle x1="1.641896875" y1="2.52228125" x2="2.490153125" y2="2.52870625" layer="200"/>
<rectangle x1="-2.52228125" y1="2.528709375" x2="-1.59048125" y2="2.535134375" layer="200"/>
<rectangle x1="-1.365565625" y1="2.528709375" x2="-0.960715625" y2="2.535134375" layer="200"/>
<rectangle x1="-0.8836" y1="2.528709375" x2="-0.44661875" y2="2.535134375" layer="200"/>
<rectangle x1="-0.350225" y1="2.528709375" x2="-0.04176875" y2="2.535134375" layer="200"/>
<rectangle x1="0.112459375" y1="2.528709375" x2="0.440196875" y2="2.535134375" layer="200"/>
<rectangle x1="0.645834375" y1="2.528709375" x2="0.902884375" y2="2.535134375" layer="200"/>
<rectangle x1="1.134225" y1="2.528709375" x2="1.416975" y2="2.535134375" layer="200"/>
<rectangle x1="1.4683875" y1="2.528709375" x2="1.526225" y2="2.535134375" layer="200"/>
<rectangle x1="1.63546875" y1="2.528709375" x2="2.49015625" y2="2.535134375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.535134375" x2="-1.53265" y2="2.541559375" layer="200"/>
<rectangle x1="-1.371990625" y1="2.535134375" x2="-0.947865625" y2="2.541559375" layer="200"/>
<rectangle x1="-0.8836" y1="2.535134375" x2="-0.44661875" y2="2.541559375" layer="200"/>
<rectangle x1="-0.356653125" y1="2.535134375" x2="-0.028915625" y2="2.541559375" layer="200"/>
<rectangle x1="0.106034375" y1="2.535134375" x2="0.446621875" y2="2.541559375" layer="200"/>
<rectangle x1="0.645834375" y1="2.535134375" x2="0.838621875" y2="2.541559375" layer="200"/>
<rectangle x1="0.845046875" y1="2.535134375" x2="0.902884375" y2="2.541559375" layer="200"/>
<rectangle x1="1.134225" y1="2.535134375" x2="1.53265" y2="2.541559375" layer="200"/>
<rectangle x1="1.63546875" y1="2.535134375" x2="2.4773" y2="2.541559375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.5415625" x2="-1.4748125" y2="2.5479875" layer="200"/>
<rectangle x1="-1.37841875" y1="2.5415625" x2="-0.9414375" y2="2.5479875" layer="200"/>
<rectangle x1="-0.8836" y1="2.5415625" x2="-0.44019375" y2="2.5479875" layer="200"/>
<rectangle x1="-0.363078125" y1="2.5415625" x2="-0.022490625" y2="2.5479875" layer="200"/>
<rectangle x1="0.099609375" y1="2.5415625" x2="0.446621875" y2="2.5479875" layer="200"/>
<rectangle x1="0.49160625" y1="2.5415625" x2="0.51088125" y2="2.5479875" layer="200"/>
<rectangle x1="0.6522625" y1="2.5415625" x2="0.81934375" y2="2.5479875" layer="200"/>
<rectangle x1="0.8579" y1="2.5415625" x2="0.91573125" y2="2.5479875" layer="200"/>
<rectangle x1="0.9221625" y1="2.5415625" x2="1.03783125" y2="2.5479875" layer="200"/>
<rectangle x1="1.121375" y1="2.5415625" x2="1.539075" y2="2.5479875" layer="200"/>
<rectangle x1="1.62904375" y1="2.5415625" x2="2.4001875" y2="2.5479875" layer="200"/>
<rectangle x1="2.406615625" y1="2.5415625" x2="2.477303125" y2="2.5479875" layer="200"/>
<rectangle x1="-2.52228125" y1="2.5479875" x2="-1.4683875" y2="2.5544125" layer="200"/>
<rectangle x1="-1.39126875" y1="2.5479875" x2="-1.269175" y2="2.5544125" layer="200"/>
<rectangle x1="-1.2177625" y1="2.5479875" x2="-0.9285875" y2="2.5544125" layer="200"/>
<rectangle x1="-0.8836" y1="2.5479875" x2="-0.44019375" y2="2.5544125" layer="200"/>
<rectangle x1="-0.369503125" y1="2.5479875" x2="-0.016065625" y2="2.5544125" layer="200"/>
<rectangle x1="0.09318125" y1="2.5479875" x2="0.18315" y2="2.5544125" layer="200"/>
<rectangle x1="0.196" y1="2.5479875" x2="0.44661875" y2="2.5544125" layer="200"/>
<rectangle x1="0.472328125" y1="2.5479875" x2="0.543015625" y2="2.5544125" layer="200"/>
<rectangle x1="0.600853125" y1="2.5479875" x2="0.626553125" y2="2.5544125" layer="200"/>
<rectangle x1="0.6651125" y1="2.5479875" x2="0.729375" y2="2.5544125" layer="200"/>
<rectangle x1="0.742228125" y1="2.5479875" x2="0.806490625" y2="2.5544125" layer="200"/>
<rectangle x1="0.89003125" y1="2.5479875" x2="1.05068125" y2="2.5544125" layer="200"/>
<rectangle x1="1.108521875" y1="2.5479875" x2="1.539078125" y2="2.5544125" layer="200"/>
<rectangle x1="1.62261875" y1="2.5479875" x2="1.69973125" y2="2.5544125" layer="200"/>
<rectangle x1="1.77041875" y1="2.5479875" x2="1.80255" y2="2.5544125" layer="200"/>
<rectangle x1="1.853959375" y1="2.5479875" x2="1.898940625" y2="2.5544125" layer="200"/>
<rectangle x1="1.9375" y1="2.5479875" x2="2.0081875" y2="2.5544125" layer="200"/>
<rectangle x1="2.078878125" y1="2.5479875" x2="2.143140625" y2="2.5544125" layer="200"/>
<rectangle x1="2.188121875" y1="2.5479875" x2="2.245959375" y2="2.5544125" layer="200"/>
<rectangle x1="2.284515625" y1="2.5479875" x2="2.387334375" y2="2.5544125" layer="200"/>
<rectangle x1="2.42589375" y1="2.5479875" x2="2.470875" y2="2.5544125" layer="200"/>
<rectangle x1="-2.52228125" y1="2.5544125" x2="-1.808975" y2="2.5608375" layer="200"/>
<rectangle x1="-1.78326875" y1="2.5544125" x2="-1.45553125" y2="2.5608375" layer="200"/>
<rectangle x1="-1.404121875" y1="2.5544125" x2="-1.301303125" y2="2.5608375" layer="200"/>
<rectangle x1="-1.159928125" y1="2.5544125" x2="-0.883603125" y2="2.5608375" layer="200"/>
<rectangle x1="-0.6779625" y1="2.5544125" x2="-0.43376875" y2="2.5608375" layer="200"/>
<rectangle x1="-0.37593125" y1="2.5544125" x2="-0.18314375" y2="2.5608375" layer="200"/>
<rectangle x1="-0.17671875" y1="2.5544125" x2="-0.0096375" y2="2.5608375" layer="200"/>
<rectangle x1="0.073903125" y1="2.5544125" x2="0.157440625" y2="2.5608375" layer="200"/>
<rectangle x1="0.459475" y1="2.5544125" x2="0.56871875" y2="2.5608375" layer="200"/>
<rectangle x1="0.581571875" y1="2.5544125" x2="0.632984375" y2="2.5608375" layer="200"/>
<rectangle x1="0.68439375" y1="2.5544125" x2="0.71009375" y2="2.5608375" layer="200"/>
<rectangle x1="0.767934375" y1="2.5544125" x2="0.793634375" y2="2.5608375" layer="200"/>
<rectangle x1="0.89645625" y1="2.5544125" x2="1.0635375" y2="2.5608375" layer="200"/>
<rectangle x1="1.102096875" y1="2.5544125" x2="1.147078125" y2="2.5608375" layer="200"/>
<rectangle x1="1.29488125" y1="2.5544125" x2="1.5455" y2="2.5608375" layer="200"/>
<rectangle x1="1.616190625" y1="2.5544125" x2="1.680453125" y2="2.5608375" layer="200"/>
<rectangle x1="1.950353125" y1="2.5544125" x2="1.995334375" y2="2.5608375" layer="200"/>
<rectangle x1="2.09815625" y1="2.5544125" x2="2.1302875" y2="2.5608375" layer="200"/>
<rectangle x1="2.207403125" y1="2.5544125" x2="2.239534375" y2="2.5608375" layer="200"/>
<rectangle x1="2.29094375" y1="2.5544125" x2="2.37448125" y2="2.5608375" layer="200"/>
<rectangle x1="2.42589375" y1="2.5544125" x2="2.4773" y2="2.5608375" layer="200"/>
<rectangle x1="-2.52228125" y1="2.560840625" x2="-2.45159375" y2="2.567265625" layer="200"/>
<rectangle x1="-2.2909375" y1="2.560840625" x2="-2.2074" y2="2.567265625" layer="200"/>
<rectangle x1="-2.12385625" y1="2.560840625" x2="-1.90536875" y2="2.567265625" layer="200"/>
<rectangle x1="-1.873234375" y1="2.560840625" x2="-1.821828125" y2="2.567265625" layer="200"/>
<rectangle x1="-1.770415625" y1="2.560840625" x2="-1.693303125" y2="2.567265625" layer="200"/>
<rectangle x1="-1.68045" y1="2.560840625" x2="-1.45553125" y2="2.567265625" layer="200"/>
<rectangle x1="-1.41055" y1="2.560840625" x2="-1.3270125" y2="2.567265625" layer="200"/>
<rectangle x1="-1.147075" y1="2.560840625" x2="-1.02498125" y2="2.567265625" layer="200"/>
<rectangle x1="-1.005696875" y1="2.560840625" x2="-0.883603125" y2="2.567265625" layer="200"/>
<rectangle x1="-0.64583125" y1="2.560840625" x2="-0.42734375" y2="2.567265625" layer="200"/>
<rectangle x1="-0.388784375" y1="2.560840625" x2="-0.330946875" y2="2.567265625" layer="200"/>
<rectangle x1="-0.1510125" y1="2.560840625" x2="-0.0032125" y2="2.567265625" layer="200"/>
<rectangle x1="0.06105" y1="2.560840625" x2="0.1445875" y2="2.567265625" layer="200"/>
<rectangle x1="0.459475" y1="2.560840625" x2="0.63298125" y2="2.567265625" layer="200"/>
<rectangle x1="0.902884375" y1="2.560840625" x2="1.076390625" y2="2.567265625" layer="200"/>
<rectangle x1="1.08924375" y1="2.560840625" x2="1.14065" y2="2.567265625" layer="200"/>
<rectangle x1="1.30130625" y1="2.560840625" x2="1.35914375" y2="2.567265625" layer="200"/>
<rectangle x1="1.378421875" y1="2.560840625" x2="1.551928125" y2="2.567265625" layer="200"/>
<rectangle x1="1.609765625" y1="2.560840625" x2="1.641896875" y2="2.567265625" layer="200"/>
<rectangle x1="1.95678125" y1="2.560840625" x2="1.98248125" y2="2.567265625" layer="200"/>
<rectangle x1="2.29094375" y1="2.560840625" x2="2.37448125" y2="2.567265625" layer="200"/>
<rectangle x1="2.42589375" y1="2.560840625" x2="2.4773" y2="2.567265625" layer="200"/>
<rectangle x1="-2.265234375" y1="2.567265625" x2="-2.226678125" y2="2.573690625" layer="200"/>
<rectangle x1="-1.641890625" y1="2.567265625" x2="-1.449109375" y2="2.573690625" layer="200"/>
<rectangle x1="-1.4234" y1="2.567265625" x2="-1.3462875" y2="2.573690625" layer="200"/>
<rectangle x1="-1.127796875" y1="2.567265625" x2="-1.089240625" y2="2.573690625" layer="200"/>
<rectangle x1="-0.992846875" y1="2.567265625" x2="-0.883603125" y2="2.573690625" layer="200"/>
<rectangle x1="-0.63940625" y1="2.567265625" x2="-0.56871875" y2="2.573690625" layer="200"/>
<rectangle x1="-0.51730625" y1="2.567265625" x2="-0.4209125" y2="2.573690625" layer="200"/>
<rectangle x1="-0.395209375" y1="2.567265625" x2="-0.337371875" y2="2.573690625" layer="200"/>
<rectangle x1="-0.093178125" y1="2.567265625" x2="-0.009640625" y2="2.573690625" layer="200"/>
<rectangle x1="0.054625" y1="2.567265625" x2="0.1381625" y2="2.573690625" layer="200"/>
<rectangle x1="0.472328125" y1="2.567265625" x2="0.626553125" y2="2.573690625" layer="200"/>
<rectangle x1="0.909309375" y1="2.567265625" x2="0.979996875" y2="2.573690625" layer="200"/>
<rectangle x1="1.01855625" y1="2.567265625" x2="1.134225" y2="2.573690625" layer="200"/>
<rectangle x1="1.314159375" y1="2.567265625" x2="1.346290625" y2="2.573690625" layer="200"/>
<rectangle x1="1.3977" y1="2.567265625" x2="1.56478125" y2="2.573690625" layer="200"/>
<rectangle x1="1.5904875" y1="2.567265625" x2="1.63546875" y2="2.573690625" layer="200"/>
<rectangle x1="1.96963125" y1="2.567265625" x2="1.97605625" y2="2.573690625" layer="200"/>
<rectangle x1="2.29736875" y1="2.567265625" x2="2.37448125" y2="2.573690625" layer="200"/>
<rectangle x1="2.42589375" y1="2.567265625" x2="2.4773" y2="2.573690625" layer="200"/>
<rectangle x1="-1.629040625" y1="2.57369375" x2="-1.449109375" y2="2.58011875" layer="200"/>
<rectangle x1="-1.4234" y1="2.57369375" x2="-1.35914375" y2="2.58011875" layer="200"/>
<rectangle x1="-0.97999375" y1="2.57369375" x2="-0.8836" y2="2.58011875" layer="200"/>
<rectangle x1="-0.465896875" y1="2.57369375" x2="-0.427340625" y2="2.58011875" layer="200"/>
<rectangle x1="-0.401634375" y1="2.57369375" x2="-0.343803125" y2="2.58011875" layer="200"/>
<rectangle x1="-0.054621875" y1="2.57369375" x2="-0.048196875" y2="2.58011875" layer="200"/>
<rectangle x1="0.02249375" y1="2.57369375" x2="0.10603125" y2="2.58011875" layer="200"/>
<rectangle x1="0.510884375" y1="2.57369375" x2="0.613703125" y2="2.58011875" layer="200"/>
<rectangle x1="1.037834375" y1="2.57369375" x2="1.127796875" y2="2.58011875" layer="200"/>
<rectangle x1="1.3205875" y1="2.57369375" x2="1.3270125" y2="2.58011875" layer="200"/>
<rectangle x1="1.5198" y1="2.57369375" x2="1.62904375" y2="2.58011875" layer="200"/>
<rectangle x1="2.29736875" y1="2.57369375" x2="2.36805625" y2="2.58011875" layer="200"/>
<rectangle x1="2.42589375" y1="2.57369375" x2="2.4773" y2="2.58011875" layer="200"/>
<rectangle x1="-1.609759375" y1="2.58011875" x2="-1.577634375" y2="2.58654375" layer="200"/>
<rectangle x1="-1.551925" y1="2.58011875" x2="-1.45553125" y2="2.58654375" layer="200"/>
<rectangle x1="-1.416975" y1="2.58011875" x2="-1.37841875" y2="2.58654375" layer="200"/>
<rectangle x1="-0.973565625" y1="2.58011875" x2="-0.890028125" y2="2.58654375" layer="200"/>
<rectangle x1="-0.4080625" y1="2.58011875" x2="-0.350225" y2="2.58654375" layer="200"/>
<rectangle x1="0.02249375" y1="2.58011875" x2="0.09318125" y2="2.58654375" layer="200"/>
<rectangle x1="0.5237375" y1="2.58011875" x2="0.60085" y2="2.58654375" layer="200"/>
<rectangle x1="1.050684375" y1="2.58011875" x2="1.114946875" y2="2.58654375" layer="200"/>
<rectangle x1="1.539078125" y1="2.58011875" x2="1.616190625" y2="2.58654375" layer="200"/>
<rectangle x1="2.30379375" y1="2.58011875" x2="2.36805625" y2="2.58654375" layer="200"/>
<rectangle x1="2.42589375" y1="2.58011875" x2="2.483725" y2="2.58654375" layer="200"/>
<rectangle x1="-1.532646875" y1="2.58654375" x2="-1.468384375" y2="2.59296875" layer="200"/>
<rectangle x1="-0.9478625" y1="2.58654375" x2="-0.90288125" y2="2.59296875" layer="200"/>
<rectangle x1="-0.4144875" y1="2.58654375" x2="-0.36308125" y2="2.59296875" layer="200"/>
<rectangle x1="0.01606875" y1="2.58654375" x2="0.08033125" y2="2.59296875" layer="200"/>
<rectangle x1="0.536590625" y1="2.58654375" x2="0.581571875" y2="2.59296875" layer="200"/>
<rectangle x1="1.0635375" y1="2.58654375" x2="1.10209375" y2="2.59296875" layer="200"/>
<rectangle x1="1.551928125" y1="2.58654375" x2="1.603340625" y2="2.59296875" layer="200"/>
<rectangle x1="2.30379375" y1="2.58654375" x2="2.36805625" y2="2.59296875" layer="200"/>
<rectangle x1="2.42589375" y1="2.58654375" x2="2.483725" y2="2.59296875" layer="200"/>
<rectangle x1="-0.4144875" y1="2.592971875" x2="-0.37593125" y2="2.599396875" layer="200"/>
<rectangle x1="0.02891875" y1="2.592971875" x2="0.0739" y2="2.599396875" layer="200"/>
<rectangle x1="1.55835625" y1="2.592971875" x2="1.5904875" y2="2.599396875" layer="200"/>
<rectangle x1="2.310221875" y1="2.592971875" x2="2.361628125" y2="2.599396875" layer="200"/>
<rectangle x1="2.42589375" y1="2.592971875" x2="2.4773" y2="2.599396875" layer="200"/>
<rectangle x1="-0.4080625" y1="2.599396875" x2="-0.38235625" y2="2.605821875" layer="200"/>
<rectangle x1="2.316646875" y1="2.599396875" x2="2.355203125" y2="2.605821875" layer="200"/>
<rectangle x1="2.43231875" y1="2.599396875" x2="2.470875" y2="2.605821875" layer="200"/>
<rectangle x1="2.43874375" y1="2.605821875" x2="2.46445" y2="2.612246875" layer="200"/>
<text x="-3.81" y="3.81" size="0.4064" layer="25">&gt;NAME</text>
<text x="-3.81" y="-3.81" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="DIP-08">
<wire x1="-5.08" y1="2.54" x2="5.08" y2="2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-1.524" width="0.2032" layer="21"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="5.08" y2="-2.54" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="-1.524" width="0.2032" layer="21"/>
<wire x1="-5.08" y1="-1.524" x2="-5.08" y2="-1.016" width="0.2032" layer="21"/>
<circle x="-3.81" y="-1.27" radius="0.7184" width="0.254" layer="21"/>
<pad name="1" x="-3.81" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="2" x="-1.27" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="3" x="1.27" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="4" x="3.81" y="-3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="5" x="3.81" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="6" x="1.27" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="7" x="-1.27" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<pad name="8" x="-3.81" y="3.81" drill="0.8128" diameter="1.7272" shape="octagon"/>
<text x="-3.175" y="-0.635" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-5.715" y="-3.81" size="1.27" layer="25" ratio="10" rot="R90">&gt;NAME</text>
</package>
<package name="TSSOP-10_PPAD">
<description>Created for TI DRV8830</description>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.127" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.127" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.127" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.127" layer="51"/>
<wire x1="-1.6508" y1="1.5" x2="-1.6508" y2="-1.5" width="0.127" layer="21"/>
<wire x1="1.6508" y1="1.5" x2="1.6508" y2="-1.5" width="0.127" layer="21"/>
<circle x="-0.8" y="-0.8" radius="0.3" width="0.127" layer="51"/>
<circle x="-0.7794" y="-0.8112" radius="0.0567" width="0.127" layer="21"/>
<smd name="8" x="0" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="7" x="0.5" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="6" x="1" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="9" x="-0.5" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="10" x="-1" y="2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="3" x="0" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="4" x="0.5" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="5" x="1" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="2" x="-0.5" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<smd name="1" x="-1" y="-2.1095" dx="0.305" dy="0.889" layer="1"/>
<text x="-1.35" y="0.7" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.35" y="0" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.1" y1="1.6" x2="-0.9" y2="2.45" layer="51"/>
<rectangle x1="-0.6" y1="1.6" x2="-0.4" y2="2.45" layer="51"/>
<rectangle x1="-0.1" y1="1.6" x2="0.1" y2="2.45" layer="51"/>
<rectangle x1="0.4" y1="1.6" x2="0.6" y2="2.45" layer="51"/>
<rectangle x1="0.9" y1="1.6" x2="1.1" y2="2.45" layer="51"/>
<rectangle x1="-1.1" y1="-2.45" x2="-0.9" y2="-1.6" layer="51"/>
<rectangle x1="-0.6" y1="-2.45" x2="-0.4" y2="-1.6" layer="51"/>
<rectangle x1="-0.1" y1="-2.45" x2="0.1" y2="-1.6" layer="51"/>
<rectangle x1="0.4" y1="-2.45" x2="0.6" y2="-1.6" layer="51"/>
<rectangle x1="0.9" y1="-2.45" x2="1.1" y2="-1.6" layer="51"/>
</package>
<package name="MSOP-12_GND">
<smd name="13" x="0" y="0" dx="2.845" dy="1.651" layer="1" rot="R90" cream="no"/>
<smd name="4" x="-2.1" y="-0.325" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="9" x="2.1" y="-0.325" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="3" x="-2.1" y="0.325" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="2" x="-2.1" y="0.975" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="1" x="-2.1" y="1.625" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="5" x="-2.1" y="-0.975" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="6" x="-2.1" y="-1.625" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="10" x="2.1" y="0.325" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="11" x="2.1" y="0.975" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="12" x="2.1" y="1.625" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="8" x="2.1" y="-0.975" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<smd name="7" x="2.1" y="-1.625" dx="0.889" dy="0.42" layer="1" rot="R180"/>
<rectangle x1="-0.7" y1="0.2" x2="-0.1" y2="1.3" layer="31"/>
<rectangle x1="0.1" y1="0.2" x2="0.7" y2="1.3" layer="31"/>
<rectangle x1="0.1" y1="-1.3" x2="0.7" y2="-0.2" layer="31"/>
<rectangle x1="-0.7" y1="-1.3" x2="-0.1" y2="-0.2" layer="31"/>
<wire x1="-1.5" y1="2" x2="-1.5" y2="-2" width="0.127" layer="21"/>
<wire x1="-1.5" y1="-2" x2="1.5" y2="-2" width="0.127" layer="21"/>
<wire x1="1.5" y1="-2" x2="1.5" y2="2" width="0.127" layer="21"/>
<wire x1="1.5" y1="2" x2="-1.5" y2="2" width="0.127" layer="21"/>
<circle x="-1.1" y="1.6" radius="0.1" width="0.127" layer="21"/>
<text x="-1.27" y="1.27" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.27" y="0.762" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="QFN16-3X3MM_1:1_V02">
<smd name="5" x="-0.765240625" y="-1.5131" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="6" x="-0.265240625" y="-1.513096875" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="7" x="0.262703125" y="-1.5131" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="8" x="0.7627" y="-1.5131" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="9" x="1.502940625" y="-0.77031875" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="10" x="1.497859375" y="-0.24491875" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="11" x="1.497859375" y="0.255078125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="12" x="1.49531875" y="0.75508125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="13" x="0.75761875" y="1.51818125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="14" x="0.257621875" y="1.518178125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="15" x="-0.247459375" y="1.518178125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="16" x="-0.742378125" y="1.51818125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="1" x="-1.524146875" y="0.75" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="2" x="-1.524146875" y="0.2525375" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="3" x="-1.52923125" y="-0.250003125" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="4" x="-1.5266875" y="-0.77375" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<text x="-2.54" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.1524" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.1524" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.1524" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.1524" layer="51"/>
<wire x1="-1.6" y1="1.1" x2="-1.1" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.1" y1="1.6" x2="1.6" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.6" y1="1.6" x2="1.6" y2="1.1" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.1" x2="1.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.6" x2="1.1" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-1.1" y1="-1.6" x2="-1.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.6" x2="-1.6" y2="-1.1" width="0.2032" layer="21"/>
<smd name="EXT" x="-0.009271875" y="0.00761875" dx="1.68" dy="1.68" layer="1" rot="R180" cream="no"/>
<rectangle x1="-0.6" y1="0.15" x2="-0.15" y2="0.6" layer="31"/>
<rectangle x1="0.15" y1="0.15" x2="0.6" y2="0.6" layer="31"/>
<rectangle x1="0.15" y1="-0.6" x2="0.6" y2="-0.15" layer="31"/>
<rectangle x1="-0.6" y1="-0.6" x2="-0.15" y2="-0.15" layer="31"/>
<wire x1="-1.1997375" y1="0.751140625" x2="-1.8497375" y2="0.751140625" width="0.2032" layer="31"/>
<wire x1="-1.852578125" y1="-0.25" x2="-1.202578125" y2="-0.25" width="0.2032" layer="31"/>
<wire x1="-0.765240625" y1="-1.8381" x2="-0.765240625" y2="-1.1881" width="0.2032" layer="31"/>
<wire x1="0.260159375" y1="-1.8381" x2="0.260159375" y2="-1.1881" width="0.2032" layer="31"/>
<wire x1="1.827940625" y1="-0.76778125" x2="1.177940625" y2="-0.76778125" width="0.2032" layer="31"/>
<wire x1="1.82031875" y1="0.25508125" x2="1.17031875" y2="0.25508125" width="0.2032" layer="31"/>
<wire x1="0.75761875" y1="1.843178125" x2="0.75761875" y2="1.193178125" width="0.2032" layer="31"/>
<wire x1="-0.247459375" y1="1.845721875" x2="-0.247459375" y2="1.195721875" width="0.2032" layer="31"/>
<wire x1="0.25761875" y1="1.84571875" x2="0.25761875" y2="1.19571875" width="0.2032" layer="31"/>
<wire x1="-0.74238125" y1="1.84318125" x2="-0.74238125" y2="1.19318125" width="0.2032" layer="31"/>
<wire x1="-1.8508" y1="0.252540625" x2="-1.2008" y2="0.252540625" width="0.2032" layer="31"/>
<wire x1="-1.853340625" y1="-0.772859375" x2="-1.203340625" y2="-0.772859375" width="0.2032" layer="31"/>
<wire x1="-0.2652375" y1="-1.8381" x2="-0.2652375" y2="-1.1881" width="0.2032" layer="31"/>
<wire x1="0.7627" y1="-1.840640625" x2="0.7627" y2="-1.190640625" width="0.2032" layer="31"/>
<wire x1="1.82031875" y1="-0.244921875" x2="1.17031875" y2="-0.244921875" width="0.2032" layer="31"/>
<wire x1="1.81778125" y1="0.75508125" x2="1.172859375" y2="0.755078125" width="0.2032" layer="31"/>
</package>
<package name="QFN16-3X3MM_1:1_V03">
<smd name="5" x="-0.765240625" y="-1.5131" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="6" x="-0.265240625" y="-1.513096875" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="7" x="0.262703125" y="-1.5131" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="8" x="0.7627" y="-1.5131" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R90" cream="no"/>
<smd name="9" x="1.502940625" y="-0.77031875" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="10" x="1.497859375" y="-0.24491875" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="11" x="1.497859375" y="0.255078125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="12" x="1.49531875" y="0.75508125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R180" cream="no"/>
<smd name="13" x="0.75761875" y="1.51818125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="14" x="0.257621875" y="1.518178125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="15" x="-0.247459375" y="1.518178125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="16" x="-0.742378125" y="1.51818125" dx="0.85" dy="0.28" layer="1" roundness="100" rot="R270" cream="no"/>
<smd name="1" x="-1.524146875" y="0.75" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="2" x="-1.524146875" y="0.2525375" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="3" x="-1.52923125" y="-0.250003125" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<smd name="4" x="-1.5266875" y="-0.77375" dx="0.85" dy="0.28" layer="1" roundness="100" cream="no"/>
<text x="-2.54" y="2.159" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.54" size="0.4064" layer="27">&gt;VALUE</text>
<wire x1="1.5" y1="1.5" x2="-1.5" y2="1.5" width="0.1524" layer="51"/>
<wire x1="-1.5" y1="1.5" x2="-1.5" y2="-1.5" width="0.1524" layer="51"/>
<wire x1="-1.5" y1="-1.5" x2="1.5" y2="-1.5" width="0.1524" layer="51"/>
<wire x1="1.5" y1="-1.5" x2="1.5" y2="1.5" width="0.1524" layer="51"/>
<wire x1="-1.6" y1="1.1" x2="-1.1" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.1" y1="1.6" x2="1.6" y2="1.6" width="0.2032" layer="21"/>
<wire x1="1.6" y1="1.6" x2="1.6" y2="1.1" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.1" x2="1.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="1.6" y1="-1.6" x2="1.1" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-1.1" y1="-1.6" x2="-1.6" y2="-1.6" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.6" x2="-1.6" y2="-1.1" width="0.2032" layer="21"/>
<smd name="EXT" x="-0.009271875" y="0.00761875" dx="1.68" dy="1.68" layer="1" rot="R180" cream="no"/>
<wire x1="-1.4029375" y1="0.751140625" x2="-1.8497375" y2="0.751140625" width="0.2032" layer="31"/>
<wire x1="-1.852578125" y1="-0.25" x2="-1.405778125" y2="-0.25" width="0.2032" layer="31"/>
<wire x1="-0.765240625" y1="-1.8381" x2="-0.765240625" y2="-1.3913" width="0.2032" layer="31"/>
<wire x1="0.260159375" y1="-1.8381" x2="0.260159375" y2="-1.3913" width="0.2032" layer="31"/>
<wire x1="1.827940625" y1="-0.76778125" x2="1.406540625" y2="-0.76778125" width="0.2032" layer="31"/>
<wire x1="1.82031875" y1="0.25508125" x2="1.39891875" y2="0.25508125" width="0.2032" layer="31"/>
<wire x1="0.75761875" y1="1.843178125" x2="0.75761875" y2="1.396378125" width="0.2032" layer="31"/>
<wire x1="-0.247459375" y1="1.845721875" x2="-0.247459375" y2="1.398921875" width="0.2032" layer="31"/>
<wire x1="0.25761875" y1="1.84571875" x2="0.25761875" y2="1.39891875" width="0.2032" layer="31"/>
<wire x1="-0.74238125" y1="1.84318125" x2="-0.74238125" y2="1.39638125" width="0.2032" layer="31"/>
<wire x1="-1.8508" y1="0.252540625" x2="-1.404" y2="0.252540625" width="0.2032" layer="31"/>
<wire x1="-1.853340625" y1="-0.772859375" x2="-1.406540625" y2="-0.772859375" width="0.2032" layer="31"/>
<wire x1="-0.2652375" y1="-1.8381" x2="-0.2652375" y2="-1.3913" width="0.2032" layer="31"/>
<wire x1="0.7627" y1="-1.840640625" x2="0.7627" y2="-1.393840625" width="0.2032" layer="31"/>
<wire x1="1.82031875" y1="-0.244921875" x2="1.39891875" y2="-0.244921875" width="0.2032" layer="31"/>
<wire x1="1.81778125" y1="0.75508125" x2="1.401459375" y2="0.755078125" width="0.2032" layer="31"/>
<rectangle x1="-0.3048" y1="-0.3048" x2="0.2794" y2="0.2794" layer="31"/>
</package>
<package name="COILCRAFT_DA230X">
<description>Coilcraft DA2303, DA2304</description>
<wire x1="-4.1" y1="5" x2="-3" y2="5" width="0.127" layer="21"/>
<wire x1="-3" y1="5" x2="3" y2="5" width="0.127" layer="21"/>
<wire x1="3" y1="5" x2="4.1" y2="5" width="0.127" layer="21"/>
<wire x1="-4.1" y1="-5" x2="-3" y2="-5" width="0.127" layer="21"/>
<wire x1="-3" y1="-5" x2="3" y2="-5" width="0.127" layer="21"/>
<wire x1="3" y1="-5" x2="4.1" y2="-5" width="0.127" layer="21"/>
<wire x1="4.1" y1="5" x2="4.1" y2="-5" width="0.127" layer="21"/>
<wire x1="-4.1" y1="5" x2="-4.1" y2="-5" width="0.127" layer="21"/>
<wire x1="-3" y1="5" x2="-3" y2="3" width="0.127" layer="21"/>
<wire x1="-3" y1="3" x2="-3" y2="-3" width="0.127" layer="21"/>
<wire x1="-3" y1="-3" x2="-3" y2="-5" width="0.127" layer="21"/>
<wire x1="3" y1="5" x2="3" y2="3" width="0.127" layer="21"/>
<text x="-1" y="-4" size="1.27" layer="21" rot="R90">&gt;NAME</text>
<text x="2" y="-4" size="1.27" layer="21" rot="R90">&gt;VALUE</text>
<wire x1="3" y1="3" x2="3" y2="-3" width="0.127" layer="21"/>
<wire x1="3" y1="-3" x2="3" y2="-5" width="0.127" layer="21"/>
<wire x1="-3" y1="-3" x2="-3" y2="3" width="0.127" layer="21" curve="-73.739795"/>
<wire x1="3" y1="3" x2="3" y2="-3" width="0.127" layer="21" curve="-73.739795"/>
<smd name="P$1" x="-5.4" y="3" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$2" x="-5.4" y="1" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$3" x="-5.4" y="-1" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$4" x="-5.4" y="-3" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$5" x="5.4" y="-3" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$6" x="5.4" y="-1" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$7" x="5.4" y="1" dx="1.7" dy="1.6" layer="1"/>
<smd name="P$8" x="5.4" y="3" dx="1.7" dy="1.6" layer="1"/>
<circle x="-1.905" y="3.81" radius="0.635" width="0" layer="21"/>
</package>
</packages>
<symbols>
<symbol name="ADM1087">
<wire x1="0" y1="0" x2="30.48" y2="0" width="0.254" layer="94"/>
<wire x1="30.48" y1="0" x2="30.48" y2="22.86" width="0.254" layer="94"/>
<wire x1="30.48" y1="22.86" x2="0" y2="22.86" width="0.254" layer="94"/>
<wire x1="0" y1="22.86" x2="0" y2="0" width="0.254" layer="94"/>
<text x="10.16" y="10.16" size="1.778" layer="94" ratio="15">ADM1087</text>
<pin name="ENIN" x="-2.54" y="7.62" length="short"/>
<pin name="GND" x="12.7" y="-2.54" length="short" rot="R90"/>
<pin name="VIN" x="-2.54" y="15.24" length="short"/>
<pin name="ENOUT" x="33.02" y="15.24" length="short" rot="R180"/>
<pin name="CEXT" x="25.4" y="-2.54" length="short" rot="R90"/>
<pin name="VCC" x="12.7" y="25.4" length="short" rot="R270"/>
</symbol>
<symbol name="BD10KA5WF-E2">
<wire x1="-7.62" y1="-10.16" x2="7.62" y2="-10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="-10.16" x2="7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-7.62" y2="10.16" width="0.254" layer="94"/>
<wire x1="-7.62" y1="10.16" x2="-7.62" y2="-10.16" width="0.254" layer="94"/>
<text x="-7.62" y="10.922" size="1.27" layer="95">&gt;NAME</text>
<text x="-7.62" y="-11.938" size="1.27" layer="96">&gt;VALUE</text>
<pin name="OUT" x="10.16" y="7.62" length="short" rot="R180"/>
<pin name="VCC" x="-10.16" y="7.62" length="short"/>
<pin name="GND1" x="-10.16" y="-2.54" length="short"/>
<pin name="GND2" x="-10.16" y="-7.62" length="short"/>
<pin name="CTL" x="-10.16" y="2.54" length="short"/>
</symbol>
<symbol name="BQ24022">
<wire x1="-10.16" y1="10.16" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<text x="-10.16" y="10.922" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-14.986" size="1.778" layer="96">&gt;Value</text>
<pin name="AC" x="-12.7" y="7.62" length="short"/>
<pin name="USB" x="-12.7" y="5.08" length="short"/>
<pin name="STAT1" x="-12.7" y="0" length="short"/>
<pin name="STAT2" x="-12.7" y="-2.54" length="short"/>
<pin name="GND" x="-12.7" y="-10.16" length="short"/>
<pin name="ISET1" x="12.7" y="-10.16" length="short" rot="R180"/>
<pin name="ISET2" x="12.7" y="-7.62" length="short" rot="R180"/>
<pin name="~PG" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="~CE" x="12.7" y="0" length="short" rot="R180"/>
<pin name="OUT" x="12.7" y="7.62" length="short" rot="R180"/>
<pin name="ETP" x="-12.7" y="-7.62" length="short"/>
</symbol>
<symbol name="DC-DC_CONVERTER">
<wire x1="-12.7" y1="22.86" x2="-12.7" y2="-22.86" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-22.86" x2="12.7" y2="-22.86" width="0.254" layer="94"/>
<wire x1="12.7" y1="-22.86" x2="12.7" y2="22.86" width="0.254" layer="94"/>
<wire x1="12.7" y1="22.86" x2="-12.7" y2="22.86" width="0.254" layer="94"/>
<text x="-12.7" y="22.86" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-25.4" size="1.778" layer="96">&gt;VALUE</text>
<pin name="VIN" x="-17.78" y="20.32" length="middle"/>
<pin name="GND1" x="-17.78" y="-20.32" length="middle"/>
<pin name="ON/OFF" x="-17.78" y="-5.08" length="middle"/>
<pin name="PGOOD" x="-17.78" y="0" length="middle"/>
<pin name="SEQ" x="-17.78" y="5.08" length="middle"/>
<pin name="VOUT" x="17.78" y="20.32" length="middle" rot="R180"/>
<pin name="SENSE" x="17.78" y="15.24" length="middle" rot="R180"/>
<pin name="TRIM" x="17.78" y="-5.08" length="middle" rot="R180"/>
<pin name="GND2" x="17.78" y="-20.32" length="middle" rot="R180"/>
</symbol>
<symbol name="HV826MG_BACKLIGHT">
<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<text x="-7.62" y="8.382" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="RSW" x="-12.7" y="2.54" length="middle"/>
<pin name="VA" x="12.7" y="5.08" length="middle" rot="R180"/>
<pin name="VCC" x="-12.7" y="5.08" length="middle"/>
<pin name="VB" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="CS" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="LX" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="REL" x="-12.7" y="0" length="middle" direction="pwr"/>
<pin name="GND" x="-12.7" y="-2.54" length="middle" direction="pwr"/>
</symbol>
<symbol name="L298">
<wire x1="-10.16" y1="-12.7" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="10.16" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<text x="-10.16" y="10.414" size="1.27" layer="95">&gt;NAME</text>
<text x="3.81" y="10.414" size="1.27" layer="96">&gt;VALUE</text>
<pin name="OUT1" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="VS" x="-15.24" y="7.62" length="middle"/>
<pin name="ENA" x="-15.24" y="2.54" length="middle"/>
<pin name="GND" x="-15.24" y="-10.16" length="middle"/>
<pin name="IN3" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="IN4" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="OUT4" x="15.24" y="-10.16" length="middle" rot="R180"/>
<pin name="CSA" x="-15.24" y="-5.08" length="middle"/>
<pin name="OUT2" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="IN1" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="IN2" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="VLS" x="-15.24" y="5.08" length="middle"/>
<pin name="ENB" x="-15.24" y="0" length="middle"/>
<pin name="OUT3" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="CSB" x="-15.24" y="-7.62" length="middle"/>
</symbol>
<symbol name="L298_BRIDGE_DRIVER">
<wire x1="-12.7" y1="-12.7" x2="12.7" y2="-12.7" width="0.254" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="12.7" y2="15.24" width="0.254" layer="94"/>
<wire x1="12.7" y1="15.24" x2="-12.7" y2="15.24" width="0.254" layer="94"/>
<wire x1="-12.7" y1="15.24" x2="-12.7" y2="-12.7" width="0.254" layer="94"/>
<text x="-12.446" y="15.748" size="1.778" layer="95">&gt;Name</text>
<text x="-12.446" y="-14.986" size="1.778" layer="96">&gt;Value</text>
<pin name="GND@1" x="-17.78" y="12.7" visible="pin" length="middle"/>
<pin name="SENSE_A" x="-17.78" y="10.16" visible="pin" length="middle"/>
<pin name="NC@3" x="-17.78" y="7.62" visible="pin" length="middle"/>
<pin name="OUT1" x="-17.78" y="5.08" visible="pin" length="middle"/>
<pin name="OUT2" x="-17.78" y="2.54" visible="pin" length="middle"/>
<pin name="VS" x="-17.78" y="0" visible="pin" length="middle"/>
<pin name="IN1" x="-17.78" y="-2.54" visible="pin" length="middle"/>
<pin name="ENA" x="-17.78" y="-5.08" visible="pin" length="middle"/>
<pin name="IN2" x="-17.78" y="-7.62" visible="pin" length="middle"/>
<pin name="GND@10" x="-17.78" y="-10.16" visible="pin" length="middle"/>
<pin name="GND@11" x="17.78" y="-10.16" visible="pin" length="middle" rot="R180"/>
<pin name="VSS" x="17.78" y="-7.62" visible="pin" length="middle" rot="R180"/>
<pin name="IN3" x="17.78" y="-5.08" visible="pin" length="middle" rot="R180"/>
<pin name="ENB" x="17.78" y="-2.54" visible="pin" length="middle" rot="R180"/>
<pin name="IN4" x="17.78" y="0" visible="pin" length="middle" rot="R180"/>
<pin name="OUT3" x="17.78" y="2.54" visible="pin" length="middle" rot="R180"/>
<pin name="OUT4" x="17.78" y="5.08" visible="pin" length="middle" rot="R180"/>
<pin name="NC@18" x="17.78" y="7.62" visible="pin" length="middle" rot="R180"/>
<pin name="SENSE_B" x="17.78" y="10.16" visible="pin" length="middle" rot="R180"/>
<pin name="GND@20" x="17.78" y="12.7" visible="pin" length="middle" rot="R180"/>
</symbol>
<symbol name="L6470">
<wire x1="0" y1="48.26" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="27.94" y2="0" width="0.254" layer="94"/>
<wire x1="27.94" y1="0" x2="27.94" y2="48.26" width="0.254" layer="94"/>
<wire x1="27.94" y1="48.26" x2="0" y2="48.26" width="0.254" layer="94"/>
<text x="0" y="49.022" size="1.778" layer="95">&gt;NAME</text>
<text x="0" y="-3.048" size="1.778" layer="96">&gt;VALUE</text>
<pin name="BUSYN/SYNC" x="-5.08" y="27.94" length="middle"/>
<pin name="DGND" x="-5.08" y="10.16" length="middle"/>
<pin name="PGNDB" x="-5.08" y="2.54" length="middle"/>
<pin name="PGNDA" x="-5.08" y="5.08" length="middle"/>
<pin name="AGND" x="-5.08" y="12.7" length="middle"/>
<pin name="OSCOUT" x="-5.08" y="17.78" length="middle"/>
<pin name="OSCIN" x="-5.08" y="20.32" length="middle"/>
<pin name="FLAGN" x="-5.08" y="30.48" length="middle"/>
<pin name="STCK" x="-5.08" y="25.4" length="middle"/>
<pin name="STBYN/RESETN" x="-5.08" y="33.02" length="middle"/>
<pin name="CSN" x="-5.08" y="38.1" length="middle"/>
<pin name="CK" x="-5.08" y="40.64" length="middle"/>
<pin name="SDI" x="-5.08" y="43.18" length="middle"/>
<pin name="SDO" x="-5.08" y="45.72" length="middle"/>
<pin name="VSA" x="33.02" y="40.64" length="middle" rot="R180"/>
<pin name="VSB" x="33.02" y="35.56" length="middle" rot="R180"/>
<pin name="OUT1A" x="33.02" y="20.32" length="middle" rot="R180"/>
<pin name="OUT2A" x="33.02" y="17.78" length="middle" rot="R180"/>
<pin name="OUT1B" x="33.02" y="15.24" length="middle" rot="R180"/>
<pin name="OUT2B" x="33.02" y="12.7" length="middle" rot="R180"/>
<pin name="VDD" x="33.02" y="43.18" length="middle" rot="R180"/>
<pin name="CP" x="33.02" y="27.94" length="middle" rot="R180"/>
<pin name="VBOOT" x="33.02" y="25.4" length="middle" rot="R180"/>
<pin name="VREG" x="33.02" y="45.72" length="middle" rot="R180"/>
<pin name="SW" x="33.02" y="5.08" length="middle" rot="R180"/>
<pin name="ADCIN" x="33.02" y="7.62" length="middle" rot="R180"/>
<pin name="VSB2" x="33.02" y="33.02" length="middle" rot="R180"/>
<pin name="VSA2" x="33.02" y="38.1" length="middle" rot="R180"/>
<pin name="EPAD" x="33.02" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="LM2621">
<wire x1="-10.16" y1="5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="-10.16" y2="5.08" width="0.254" layer="94"/>
<text x="-10.16" y="5.588" size="1.778" layer="95">&gt;Name</text>
<text x="5.08" y="-10.16" size="1.778" layer="96">&gt;Value</text>
<pin name="PGND" x="-7.62" y="-10.16" length="short" rot="R90"/>
<pin name="EN" x="12.7" y="0" length="short" rot="R180"/>
<pin name="FREQ" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="FB" x="0" y="-10.16" length="short" rot="R90"/>
<pin name="SGND" x="-5.08" y="-10.16" length="short" rot="R90"/>
<pin name="VDD" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="BOOT" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="SW" x="-12.7" y="2.54" length="short"/>
</symbol>
<symbol name="LM2931">
<wire x1="-10.16" y1="-5.08" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
<text x="-10.16" y="8.128" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="OUT" x="-15.24" y="5.08" length="middle"/>
<pin name="GND@2" x="-15.24" y="2.54" length="middle"/>
<pin name="GND@3" x="-15.24" y="0" length="middle"/>
<pin name="ADJ" x="-15.24" y="-2.54" length="middle"/>
<pin name="INH" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="GND@6" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="GND@7" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="IN" x="12.7" y="5.08" length="middle" rot="R180"/>
</symbol>
<symbol name="LM2931_FIXED">
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<text x="-7.62" y="8.636" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="5.588" size="1.778" layer="96">&gt;Value</text>
<pin name="VIN" x="-12.7" y="2.54" length="middle"/>
<pin name="GND" x="0" y="-12.7" length="middle" rot="R90"/>
<pin name="VOUT" x="12.7" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="LM3480IM4">
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<text x="-0.254" y="5.842" size="1.778" layer="94">&gt;NAME</text>
<text x="-11.43" y="5.842" size="1.778" layer="94">&gt;VALUE</text>
<pin name="IN" x="-12.7" y="0" length="middle"/>
<pin name="OUT" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="GND" x="0" y="-10.16" length="middle" rot="R90"/>
</symbol>
<symbol name="LM4128-2.5VREF">
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<text x="-7.62" y="5.588" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="VIN" x="-12.7" y="2.54" length="middle"/>
<pin name="EN" x="-12.7" y="-2.54" length="middle"/>
<pin name="GND" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="VOUT" x="12.7" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="LM4871">
<wire x1="-12.7" y1="-12.7" x2="-12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="-12.7" y1="10.16" x2="12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-12.7" x2="12.7" y2="-12.7" width="0.254" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="12.7" y2="10.16" width="0.254" layer="94"/>
<text x="-12.7" y="10.922" size="1.778" layer="95">&gt;NAME</text>
<pin name="VDD" x="-20.32" y="7.62" visible="pin"/>
<pin name="GND" x="-20.32" y="5.08" visible="pin"/>
<pin name="IN+" x="-20.32" y="0" visible="pin"/>
<pin name="IN-" x="-20.32" y="-2.54" visible="pin"/>
<pin name="BYPASS" x="-20.32" y="-7.62" visible="pin"/>
<pin name="SHUTDWN" x="-20.32" y="-10.16" visible="pin"/>
<pin name="V02" x="20.32" y="0" visible="pin" rot="R180"/>
<pin name="V01" x="20.32" y="-2.54" visible="pin" rot="R180"/>
</symbol>
<symbol name="LM5007">
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
<text x="-7.62" y="8.128" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-9.906" size="1.778" layer="96">&gt;Value</text>
<pin name="SW" x="10.16" y="0" length="short" rot="R180"/>
<pin name="BST" x="10.16" y="2.54" length="short" rot="R180"/>
<pin name="RCL" x="10.16" y="-2.54" length="short" rot="R180"/>
<pin name="RTN" x="-10.16" y="-2.54" length="short"/>
<pin name="FB" x="10.16" y="5.08" length="short" rot="R180"/>
<pin name="RON" x="-10.16" y="2.54" length="short"/>
<pin name="VCC" x="10.16" y="-5.08" length="short" rot="R180"/>
<pin name="VIN" x="-10.16" y="5.08" length="short"/>
<pin name="EP" x="-10.16" y="-5.08" length="short"/>
</symbol>
<symbol name="LM5574">
<wire x1="-10.16" y1="12.7" x2="-10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="-10.16" x2="10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="12.7" x2="-10.16" y2="12.7" width="0.254" layer="94"/>
<text x="-10.16" y="13.208" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-12.446" size="1.778" layer="96">&gt;Value</text>
<pin name="VCC" x="-12.7" y="0" length="short"/>
<pin name="SD" x="-12.7" y="5.08" length="short"/>
<pin name="VIN" x="-12.7" y="10.16" length="short"/>
<pin name="SYNC" x="-12.7" y="7.62" length="short"/>
<pin name="COMP" x="12.7" y="-5.08" length="short" rot="R180"/>
<pin name="FB" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="RT" x="-12.7" y="2.54" length="short"/>
<pin name="RAMP" x="-12.7" y="-5.08" length="short"/>
<pin name="AGND" x="12.7" y="-7.62" length="short" rot="R180"/>
<pin name="SS" x="-12.7" y="-2.54" length="short"/>
<pin name="OUT" x="12.7" y="0" length="short" rot="R180"/>
<pin name="PGND" x="-12.7" y="-7.62" length="short"/>
<pin name="IS" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="SW" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="PRE" x="12.7" y="7.62" length="short" rot="R180"/>
<pin name="BST" x="12.7" y="10.16" length="short" rot="R180"/>
</symbol>
<symbol name="LMD1820X">
<wire x1="-10.16" y1="10.16" x2="-10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="-10.16" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<text x="-10.16" y="10.922" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-12.446" size="1.778" layer="96">&gt;VALUE</text>
<pin name="BS1" x="-15.24" y="7.62" length="middle"/>
<pin name="OUT1" x="-15.24" y="5.08" length="middle"/>
<pin name="DIR" x="-15.24" y="2.54" length="middle"/>
<pin name="BRK" x="-15.24" y="0" length="middle"/>
<pin name="PWM" x="-15.24" y="-2.54" length="middle"/>
<pin name="PWR" x="-15.24" y="-5.08" length="middle"/>
<pin name="PGND" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="SGND" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="TF" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="OUT2" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="BS2" x="15.24" y="-2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="LMZ14203">
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.508" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.508" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="7.62" width="0.508" layer="94"/>
<wire x1="7.62" y1="7.62" x2="-7.62" y2="7.62" width="0.508" layer="94"/>
<text x="-7.62" y="8.128" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-10.033" size="1.778" layer="96">&gt;Value</text>
<pin name="VIN" x="-10.16" y="5.08" length="short"/>
<pin name="RON" x="-10.16" y="2.54" length="short"/>
<pin name="EN" x="-10.16" y="0" length="short"/>
<pin name="GND" x="-10.16" y="-2.54" length="short"/>
<pin name="SS" x="10.16" y="-5.08" length="short" rot="R180"/>
<pin name="FB" x="10.16" y="0" length="short" rot="R180"/>
<pin name="VOUT" x="10.16" y="5.08" length="short" rot="R180"/>
<pin name="EP" x="-10.16" y="-5.08" length="short"/>
</symbol>
<symbol name="LT1528">
<wire x1="-20.32" y1="20.32" x2="-20.32" y2="5.08" width="0.254" layer="94"/>
<wire x1="-20.32" y1="5.08" x2="0" y2="5.08" width="0.254" layer="94"/>
<wire x1="0" y1="5.08" x2="0" y2="20.32" width="0.254" layer="94"/>
<wire x1="0" y1="20.32" x2="-20.32" y2="20.32" width="0.254" layer="94"/>
<pin name="OUT" x="5.08" y="17.78" length="middle" rot="R180"/>
<pin name="SENSE" x="5.08" y="12.7" length="middle" rot="R180"/>
<pin name="GND" x="-10.16" y="0" length="middle" rot="R90"/>
<pin name="SHDN" x="-25.4" y="12.7" length="middle"/>
<pin name="IN" x="-25.4" y="17.78" length="middle"/>
</symbol>
<symbol name="LTC3588">
<wire x1="-10.16" y1="-10.16" x2="10.16" y2="-10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="-10.16" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="7.62" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="-10.16" y2="-10.16" width="0.254" layer="94"/>
<text x="-10.16" y="7.62" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-12.7" size="1.778" layer="96">&gt;VALUE</text>
<pin name="PZ1" x="-15.24" y="5.08" length="middle"/>
<pin name="PZ2" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="CAP" x="-15.24" y="0" length="middle"/>
<pin name="VIN" x="-15.24" y="2.54" length="middle"/>
<pin name="SW" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="VOUT" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="VIN2" x="-15.24" y="-2.54" length="middle"/>
<pin name="D1" x="-15.24" y="-5.08" length="middle"/>
<pin name="D0" x="-15.24" y="-7.62" length="middle"/>
<pin name="PGOOD" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="GND" x="15.24" y="-7.62" length="middle" rot="R180"/>
</symbol>
<symbol name="MAX1555">
<wire x1="-10.16" y1="5.08" x2="-10.16" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-10.16" y2="5.08" width="0.254" layer="94"/>
<text x="-10.16" y="5.842" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="USB" x="-15.24" y="2.54" length="middle"/>
<pin name="GND" x="-15.24" y="0" length="middle"/>
<pin name="CHG" x="-15.24" y="-2.54" length="middle"/>
<pin name="BATT" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="DC" x="12.7" y="-2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="MAX1704X">
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
<text x="-7.62" y="7.874" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-9.652" size="1.778" layer="96">&gt;VALUE</text>
<pin name="CTG" x="-12.7" y="5.08" length="middle"/>
<pin name="CELL" x="-12.7" y="2.54" length="middle"/>
<pin name="VDD" x="-12.7" y="0" length="middle"/>
<pin name="GND@4" x="-12.7" y="-2.54" length="middle"/>
<pin name="ALT" x="12.7" y="-2.54" length="middle" rot="R180"/>
<pin name="QST" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="SCL" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="SDA" x="12.7" y="5.08" length="middle" rot="R180"/>
<pin name="GND@EP" x="-12.7" y="-5.08" length="middle"/>
</symbol>
<symbol name="MAX98300">
<wire x1="-10.16" y1="10.16" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="10.16" y1="10.16" x2="-10.16" y2="10.16" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="10.16" y2="-7.62" width="0.127" layer="94"/>
<text x="10.16" y="-15.24" size="1.778" layer="95" rot="MR0">&gt;NAME</text>
<text x="-10.16" y="12.7" size="1.778" layer="95" rot="MR180">&gt;VALUE</text>
<text x="-6.858" y="-10.668" size="1.4224" layer="95" ratio="10">THERMAL PAD</text>
<pin name="VDD" x="15.24" y="7.62" length="middle" direction="pwr" rot="R180"/>
<pin name="IN+" x="-15.24" y="2.54" length="middle"/>
<pin name="IN-" x="-15.24" y="0" length="middle"/>
<pin name="GND@1" x="15.24" y="-5.08" length="middle" direction="pwr" rot="R180"/>
<pin name="OUT+" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="OUT-" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="SHDN" x="-15.24" y="7.62" length="middle" direction="in" function="dot"/>
<pin name="GND@2" x="15.24" y="-10.16" visible="off" length="middle" direction="pwr" rot="R180"/>
<pin name="GAIN" x="-15.24" y="-5.08" length="middle" direction="pwr"/>
</symbol>
<symbol name="MAX98306">
<wire x1="-10.16" y1="17.78" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="-10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-17.78" x2="10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="-17.78" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="17.78" x2="-10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="10.16" y2="-12.7" width="0.127" layer="94"/>
<wire x1="-10.16" y1="17.78" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<text x="10.16" y="-20.32" size="1.778" layer="95" rot="MR0">&gt;NAME</text>
<text x="-10.16" y="20.32" size="1.778" layer="95" rot="MR180">&gt;VALUE</text>
<text x="-6.858" y="-15.748" size="1.4224" layer="95" ratio="10">THERMAL PAD</text>
<pin name="VDD@2" x="15.24" y="12.7" length="middle" direction="pwr" rot="R180"/>
<pin name="INL+" x="-15.24" y="7.62" length="middle"/>
<pin name="INL-" x="-15.24" y="5.08" length="middle"/>
<pin name="GND@1" x="15.24" y="-7.62" length="middle" direction="pwr" rot="R180"/>
<pin name="OUTL+" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="OUTL-" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="SHDN" x="-15.24" y="12.7" length="middle" direction="in" function="dot"/>
<pin name="GND@3" x="15.24" y="-15.24" visible="off" length="middle" direction="pwr" rot="R180"/>
<pin name="GAIN" x="-15.24" y="-7.62" length="middle" direction="pas"/>
<pin name="INR+" x="-15.24" y="0" length="middle"/>
<pin name="INR-" x="-15.24" y="-2.54" length="middle"/>
<pin name="OUTR+" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="OUTR-" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="GND@2" x="15.24" y="-10.16" length="middle" direction="pwr" rot="R180"/>
<pin name="VDD@1" x="15.24" y="15.24" length="middle" direction="pwr" rot="R180"/>
</symbol>
<symbol name="MC34063">
<wire x1="-7.62" y1="-5.08" x2="7.62" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="7.62" width="0.4064" layer="94"/>
<wire x1="7.62" y1="7.62" x2="-7.62" y2="7.62" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-5.08" width="0.4064" layer="94"/>
<text x="-7.62" y="9.144" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.366" y="-8.382" size="1.778" layer="96">&gt;VALUE</text>
<pin name="DVR" x="10.16" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="COMP" x="10.16" y="-2.54" visible="pin" length="short" rot="R180"/>
<pin name="TC" x="-10.16" y="0" visible="pin" length="short"/>
<pin name="SWC" x="-10.16" y="5.08" visible="pin" length="short"/>
<pin name="GND" x="-10.16" y="-2.54" visible="pin" length="short"/>
<pin name="SWE" x="-10.16" y="2.54" visible="pin" length="short"/>
<pin name="VCC" x="10.16" y="0" visible="pin" length="short" rot="R180"/>
<pin name="SEN" x="10.16" y="2.54" visible="pin" length="short" rot="R180"/>
</symbol>
<symbol name="MCP73842">
<wire x1="-10.16" y1="5.08" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="-10.16" y2="5.08" width="0.254" layer="94"/>
<text x="-10.16" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<text x="-10.16" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<pin name="SENSE" x="-15.24" y="2.54" length="middle"/>
<pin name="VDD" x="-15.24" y="0" length="middle"/>
<pin name="STAT1" x="-15.24" y="-2.54" length="middle"/>
<pin name="EN" x="-15.24" y="-5.08" visible="pin" length="middle"/>
<pin name="TIMER" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="VSS" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="VBAT" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="DRV" x="15.24" y="2.54" length="middle" rot="R180"/>
</symbol>
<symbol name="MCP73831">
<wire x1="-7.62" y1="5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<text x="-7.62" y="5.588" size="1.778" layer="95">&gt;Name</text>
<text x="-7.62" y="-7.62" size="1.778" layer="96">&gt;Value</text>
<pin name="VIN" x="-10.16" y="2.54" length="short" direction="pwr"/>
<pin name="STAT" x="-10.16" y="-2.54" length="short" direction="out"/>
<pin name="VBAT" x="10.16" y="2.54" length="short" direction="pwr" rot="R180"/>
<pin name="PROG" x="10.16" y="0" length="short" direction="in" rot="R180"/>
<pin name="VSS" x="10.16" y="-2.54" length="short" direction="pwr" rot="R180"/>
</symbol>
<symbol name="MCP73833">
<wire x1="-10.16" y1="12.7" x2="-10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-15.24" x2="10.16" y2="-15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="-15.24" x2="10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="12.7" x2="-10.16" y2="12.7" width="0.254" layer="94"/>
<text x="-10.16" y="13.208" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-17.526" size="1.778" layer="96">&gt;Value</text>
<pin name="VDD@1" x="-15.24" y="10.16" length="middle"/>
<pin name="VDD@2" x="-15.24" y="7.62" length="middle"/>
<pin name="STAT1" x="-15.24" y="0" length="middle"/>
<pin name="STAT2" x="-15.24" y="-2.54" length="middle"/>
<pin name="VSS" x="-15.24" y="-12.7" length="middle"/>
<pin name="PROG" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="~PG" x="-15.24" y="-5.08" length="middle"/>
<pin name="THERM" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="VBAT@1" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="VBAT@2" x="15.24" y="10.16" length="middle" rot="R180"/>
</symbol>
<symbol name="MIC2571-1">
<wire x1="-10.16" y1="-7.62" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="10.16" y1="5.08" x2="-10.16" y2="5.08" width="0.254" layer="94"/>
<wire x1="-10.16" y1="5.08" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<text x="-10.16" y="5.842" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<pin name="IN" x="-15.24" y="2.54" length="middle"/>
<pin name="GND" x="-15.24" y="-5.08" length="middle"/>
<pin name="SW" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="2.85V" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="3.3V" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="5V" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="SYNC" x="-15.24" y="-2.54" length="middle"/>
</symbol>
<symbol name="NJM2670">
<wire x1="15.24" y1="-15.24" x2="-15.24" y2="-15.24" width="0.4064" layer="94"/>
<wire x1="-15.24" y1="-15.24" x2="-15.24" y2="17.78" width="0.4064" layer="94"/>
<wire x1="-15.24" y1="17.78" x2="15.24" y2="17.78" width="0.4064" layer="94"/>
<wire x1="15.24" y1="17.78" x2="15.24" y2="-15.24" width="0.4064" layer="94"/>
<text x="-15.24" y="19.05" size="1.778" layer="95">&gt;NAME</text>
<text x="-15.24" y="-17.78" size="1.778" layer="96">&gt;VALUE</text>
<pin name="NC@1" x="-17.78" y="7.62" length="short" direction="in"/>
<pin name="SENSEA" x="-17.78" y="15.24" length="short"/>
<pin name="INA1" x="-17.78" y="12.7" length="short"/>
<pin name="ENABLEA" x="-17.78" y="10.16" length="short"/>
<pin name="GND@2" x="-17.78" y="0" length="short"/>
<pin name="INB1" x="-17.78" y="-2.54" length="short"/>
<pin name="ENABLEB" x="-17.78" y="-5.08" length="short"/>
<pin name="NC@2" x="-17.78" y="-7.62" length="short"/>
<pin name="NC@3" x="17.78" y="-7.62" length="short" rot="R180"/>
<pin name="TSDARM" x="17.78" y="-5.08" length="short" rot="R180"/>
<pin name="INB2" x="17.78" y="-2.54" length="short" rot="R180"/>
<pin name="GND@3" x="17.78" y="0" length="short" rot="R180"/>
<pin name="GND@1" x="-17.78" y="2.54" length="short" direction="pwr"/>
<pin name="OUTA1" x="-17.78" y="5.08" length="short" direction="pwr"/>
<pin name="GND@4" x="17.78" y="2.54" length="short" direction="pwr" rot="R180"/>
<pin name="OUTA2" x="17.78" y="5.08" length="short" direction="pwr" rot="R180"/>
<pin name="NC@4" x="17.78" y="7.62" length="short" rot="R180"/>
<pin name="INA2" x="17.78" y="10.16" length="short" rot="R180"/>
<pin name="VCC" x="17.78" y="12.7" length="short" rot="R180"/>
<pin name="VSA" x="17.78" y="15.24" length="short" rot="R180"/>
<pin name="OUTB1" x="-17.78" y="-10.16" length="short"/>
<pin name="SENSEB" x="-17.78" y="-12.7" length="short"/>
<pin name="OUTB2" x="17.78" y="-10.16" length="short" rot="R180"/>
<pin name="VSB" x="17.78" y="-12.7" length="short" rot="R180"/>
</symbol>
<symbol name="PQ1CY1032Z">
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-7.62" x2="5.08" y2="-7.62" width="0.254" layer="94"/>
<wire x1="5.08" y1="-7.62" x2="5.08" y2="7.62" width="0.254" layer="94"/>
<wire x1="5.08" y1="7.62" x2="-7.62" y2="7.62" width="0.254" layer="94"/>
<pin name="VIN" x="-12.7" y="2.54" length="middle"/>
<pin name="VOUT" x="10.16" y="5.08" length="middle" rot="R180"/>
<pin name="GND" x="-12.7" y="-2.54" length="middle"/>
<pin name="ADJ" x="10.16" y="0" length="middle" rot="R180"/>
<pin name="VS" x="10.16" y="-5.08" length="middle" rot="R180"/>
</symbol>
<symbol name="PTC">
<wire x1="5.08" y1="1.27" x2="5.08" y2="-1.27" width="0.254" layer="94"/>
<wire x1="5.08" y1="-1.27" x2="-2.54" y2="-1.27" width="0.254" layer="94"/>
<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="1.27" width="0.254" layer="94"/>
<wire x1="-2.54" y1="1.27" x2="5.08" y2="1.27" width="0.254" layer="94"/>
<wire x1="-1.524" y1="-2.54" x2="3.81" y2="2.54" width="0.254" layer="94"/>
<wire x1="3.81" y1="2.54" x2="5.08" y2="2.54" width="0.254" layer="94"/>
<text x="-2.54" y="3.048" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.302" y="-5.08" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="-5.08" y="0" visible="off" length="short"/>
<pin name="2" x="7.62" y="0" visible="off" length="short" rot="R180"/>
</symbol>
<symbol name="SPX29300">
<wire x1="-12.7" y1="5.08" x2="-12.7" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-7.62" x2="15.24" y2="-7.62" width="0.254" layer="94"/>
<wire x1="15.24" y1="-7.62" x2="15.24" y2="5.08" width="0.254" layer="94"/>
<wire x1="15.24" y1="5.08" x2="-12.7" y2="5.08" width="0.254" layer="94"/>
<text x="-12.7" y="5.588" size="1.6764" layer="95">&gt;Name</text>
<text x="-12.7" y="-10.16" size="1.6764" layer="96">&gt;Value</text>
<pin name="ENABLE" x="-17.78" y="-2.54" length="middle"/>
<pin name="VIN" x="-17.78" y="2.54" length="middle"/>
<pin name="GND@1" x="0" y="-12.7" length="middle" rot="R90"/>
<pin name="VOUT" x="20.32" y="2.54" length="middle" rot="R180"/>
<pin name="ADJUST" x="20.32" y="-2.54" length="middle" rot="R180"/>
<pin name="GND@0" x="2.54" y="-12.7" length="middle" rot="R90"/>
</symbol>
<symbol name="STA540">
<wire x1="-10.16" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="15.24" x2="-10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="-10.16" y1="15.24" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<text x="-10.16" y="15.748" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-15.24" size="1.778" layer="96">&gt;Value</text>
<pin name="IN1" x="-15.24" y="2.54" length="middle"/>
<pin name="IN2" x="-15.24" y="0" length="middle"/>
<pin name="IN3" x="-15.24" y="-2.54" length="middle"/>
<pin name="SVR" x="-15.24" y="-10.16" length="middle"/>
<pin name="IN4" x="-15.24" y="-5.08" length="middle"/>
<pin name="P-GND" x="15.24" y="-10.16" length="middle" rot="R180"/>
<pin name="S-GND" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="DIAG" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="OUT4" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="OUT3" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="OUT2" x="15.24" y="10.16" length="middle" rot="R180"/>
<pin name="OUT1" x="15.24" y="12.7" length="middle" rot="R180"/>
<pin name="VCC1" x="-15.24" y="12.7" length="middle"/>
<pin name="VCC2" x="-15.24" y="10.16" length="middle"/>
<pin name="STBY" x="-15.24" y="7.62" length="middle"/>
</symbol>
<symbol name="TB6612FNG">
<wire x1="-12.7" y1="-17.78" x2="10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="10.16" y1="-17.78" x2="10.16" y2="15.24" width="0.254" layer="94"/>
<wire x1="10.16" y1="15.24" x2="-12.7" y2="15.24" width="0.254" layer="94"/>
<wire x1="-12.7" y1="15.24" x2="-12.7" y2="-17.78" width="0.254" layer="94"/>
<text x="-12.7" y="15.748" size="1.27" layer="95">&gt;Name</text>
<text x="-12.7" y="-20.32" size="1.27" layer="96">&gt;Value</text>
<pin name="A01@1" x="-17.78" y="12.7" length="middle"/>
<pin name="A01@2" x="-17.78" y="10.16" length="middle"/>
<pin name="PGND1@3" x="-17.78" y="7.62" length="middle"/>
<pin name="PGND1@4" x="-17.78" y="5.08" length="middle"/>
<pin name="A02@5" x="-17.78" y="2.54" length="middle"/>
<pin name="A02@6" x="-17.78" y="0" length="middle"/>
<pin name="B02@7" x="-17.78" y="-2.54" length="middle"/>
<pin name="B02@8" x="-17.78" y="-5.08" length="middle"/>
<pin name="PGND2@9" x="-17.78" y="-7.62" length="middle"/>
<pin name="PGND2@10" x="-17.78" y="-10.16" length="middle"/>
<pin name="B01@11" x="-17.78" y="-12.7" length="middle"/>
<pin name="B01@12" x="-17.78" y="-15.24" length="middle"/>
<pin name="VM2" x="15.24" y="-15.24" length="middle" rot="R180"/>
<pin name="VM3" x="15.24" y="-12.7" length="middle" rot="R180"/>
<pin name="PWMB" x="15.24" y="-10.16" length="middle" rot="R180"/>
<pin name="BIN2" x="15.24" y="-7.62" length="middle" rot="R180"/>
<pin name="BIN1" x="15.24" y="-5.08" length="middle" rot="R180"/>
<pin name="GND" x="15.24" y="-2.54" length="middle" rot="R180"/>
<pin name="STBY" x="15.24" y="0" length="middle" rot="R180"/>
<pin name="VCC" x="15.24" y="2.54" length="middle" rot="R180"/>
<pin name="AIN1" x="15.24" y="5.08" length="middle" rot="R180"/>
<pin name="AIN2" x="15.24" y="7.62" length="middle" rot="R180"/>
<pin name="PWMA" x="15.24" y="10.16" length="middle" rot="R180"/>
<pin name="VM1" x="15.24" y="12.7" length="middle" rot="R180"/>
</symbol>
<symbol name="TPS6211*">
<wire x1="-12.7" y1="20.32" x2="12.7" y2="20.32" width="0.254" layer="94"/>
<wire x1="12.7" y1="20.32" x2="12.7" y2="-20.32" width="0.254" layer="94"/>
<wire x1="12.7" y1="-20.32" x2="-12.7" y2="-20.32" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-20.32" x2="-12.7" y2="20.32" width="0.254" layer="94"/>
<text x="-12.7" y="22.86" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="20.32" size="1.778" layer="96">&gt;VALUE</text>
<pin name="AGND" x="-17.78" y="2.54" length="middle" direction="pwr"/>
<pin name="EN" x="-17.78" y="12.7" length="middle" direction="in"/>
<pin name="FB" x="17.78" y="0" length="middle" direction="in" rot="R180"/>
<pin name="GND@1" x="-10.16" y="-25.4" length="middle" direction="pwr" rot="R90"/>
<pin name="GND@2" x="-5.08" y="-25.4" length="middle" direction="pwr" rot="R90"/>
<pin name="LBI" x="-17.78" y="-2.54" length="middle" direction="in"/>
<pin name="LBO" x="17.78" y="5.08" length="middle" direction="out" rot="R180"/>
<pin name="PG" x="17.78" y="10.16" length="middle" direction="out" rot="R180"/>
<pin name="PGND@1" x="5.08" y="-25.4" length="middle" direction="pwr" rot="R90"/>
<pin name="PGND@2" x="10.16" y="-25.4" length="middle" direction="pwr" rot="R90"/>
<pin name="PWPD" x="0" y="-25.4" length="middle" direction="pwr" rot="R90"/>
<pin name="SW@1" x="17.78" y="15.24" length="middle" direction="out" rot="R180"/>
<pin name="SW@2" x="17.78" y="17.78" length="middle" direction="out" rot="R180"/>
<pin name="SYNC" x="-17.78" y="-7.62" length="middle" direction="in"/>
<pin name="VIN@1" x="-17.78" y="17.78" length="middle" direction="pwr"/>
<pin name="VIN@2" x="-17.78" y="15.24" length="middle" direction="pwr"/>
<pin name="VINA" x="-17.78" y="7.62" length="middle" direction="pwr"/>
</symbol>
<symbol name="TPS61200">
<wire x1="-12.7" y1="10.16" x2="-12.7" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-12.7" x2="12.7" y2="-12.7" width="0.254" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="12.7" y1="10.16" x2="-12.7" y2="10.16" width="0.254" layer="94"/>
<text x="-12.7" y="10.16" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
<pin name="EN" x="-17.78" y="5.08" length="middle" direction="in"/>
<pin name="FB" x="17.78" y="0" length="middle" direction="pas" rot="R180"/>
<pin name="GND" x="-17.78" y="-2.54" length="middle" direction="sup"/>
<pin name="L" x="17.78" y="7.62" length="middle" direction="pas" rot="R180"/>
<pin name="PAD@1" x="-17.78" y="-5.08" length="middle" direction="sup"/>
<pin name="PAD@2" x="-17.78" y="-7.62" length="middle" direction="sup"/>
<pin name="PAD@3" x="-17.78" y="-10.16" length="middle" direction="sup"/>
<pin name="PAD@4" x="17.78" y="-7.62" length="middle" direction="sup" rot="R180"/>
<pin name="PAD@5" x="17.78" y="-5.08" length="middle" direction="sup" rot="R180"/>
<pin name="PGND" x="17.78" y="-2.54" length="middle" direction="sup" rot="R180"/>
<pin name="PS" x="-17.78" y="2.54" length="middle" direction="in"/>
<pin name="UVLO" x="-17.78" y="0" length="middle" direction="pas"/>
<pin name="VAUX" x="17.78" y="2.54" length="middle" direction="pas" rot="R180"/>
<pin name="VIN" x="-17.78" y="7.62" length="middle" direction="sup"/>
<pin name="VOUT" x="17.78" y="5.08" length="middle" direction="pas" rot="R180"/>
</symbol>
<symbol name="TRANSFORMER">
<wire x1="-2.54" y1="5.08" x2="-2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="2.54" y1="5.08" x2="2.54" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="2.54" width="0.254" layer="94" curve="180"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="0" width="0.254" layer="94" curve="180"/>
<wire x1="-5.08" y1="0" x2="-5.08" y2="-2.54" width="0.254" layer="94" curve="180"/>
<wire x1="-5.08" y1="-2.54" x2="-5.08" y2="-5.08" width="0.254" layer="94" curve="180"/>
<wire x1="5.08" y1="5.08" x2="5.08" y2="2.54" width="0.254" layer="94" curve="-180"/>
<wire x1="5.08" y1="2.54" x2="5.08" y2="0" width="0.254" layer="94" curve="-180"/>
<wire x1="5.08" y1="0" x2="5.08" y2="-2.54" width="0.254" layer="94" curve="-180"/>
<wire x1="5.08" y1="-2.54" x2="5.08" y2="-5.08" width="0.254" layer="94" curve="-180"/>
<text x="10.16" y="5.08" size="1.778" layer="95">&gt;NAME</text>
<text x="10.16" y="-7.62" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="-5.08" y="7.62" visible="pad" length="short" rot="R270"/>
<pin name="4" x="5.08" y="7.62" visible="pad" length="short" rot="R270"/>
<pin name="2" x="-5.08" y="-7.62" visible="pad" length="short" rot="R90"/>
<pin name="3" x="5.08" y="-7.62" visible="pad" length="short" rot="R90"/>
</symbol>
<symbol name="ULN2803">
<wire x1="-10.16" y1="20.32" x2="-10.16" y2="17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="17.78" x2="-10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="12.7" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="-10.16" y2="2.54" width="0.254" layer="94"/>
<wire x1="-10.16" y1="2.54" x2="-10.16" y2="-2.54" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-2.54" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="-10.16" y2="-17.78" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-17.78" x2="-10.16" y2="-22.86" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-22.86" x2="-10.16" y2="-25.4" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-25.4" x2="12.7" y2="-25.4" width="0.254" layer="94"/>
<wire x1="12.7" y1="-25.4" x2="12.7" y2="-22.86" width="0.254" layer="94"/>
<wire x1="12.7" y1="-22.86" x2="12.7" y2="-17.78" width="0.254" layer="94"/>
<wire x1="12.7" y1="-17.78" x2="12.7" y2="-12.7" width="0.254" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="12.7" y2="-7.62" width="0.254" layer="94"/>
<wire x1="12.7" y1="-7.62" x2="12.7" y2="-2.54" width="0.254" layer="94"/>
<wire x1="12.7" y1="-2.54" x2="12.7" y2="2.54" width="0.254" layer="94"/>
<wire x1="12.7" y1="2.54" x2="12.7" y2="7.62" width="0.254" layer="94"/>
<wire x1="12.7" y1="7.62" x2="12.7" y2="12.7" width="0.254" layer="94"/>
<wire x1="12.7" y1="12.7" x2="12.7" y2="17.78" width="0.254" layer="94"/>
<wire x1="12.7" y1="17.78" x2="12.7" y2="20.32" width="0.254" layer="94"/>
<wire x1="12.7" y1="20.32" x2="-10.16" y2="20.32" width="0.254" layer="94"/>
<wire x1="-10.16" y1="17.78" x2="-2.54" y2="17.78" width="0.127" layer="94"/>
<wire x1="-10.16" y1="12.7" x2="-2.54" y2="12.7" width="0.127" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="-2.54" y2="7.62" width="0.127" layer="94"/>
<wire x1="-10.16" y1="2.54" x2="-2.54" y2="2.54" width="0.127" layer="94"/>
<wire x1="-10.16" y1="-2.54" x2="-2.54" y2="-2.54" width="0.127" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="-2.54" y2="-7.62" width="0.127" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="-2.54" y2="-12.7" width="0.127" layer="94"/>
<wire x1="-10.16" y1="-17.78" x2="-2.54" y2="-17.78" width="0.127" layer="94"/>
<wire x1="-10.16" y1="-22.86" x2="-2.54" y2="-22.86" width="0.127" layer="94"/>
<wire x1="-2.54" y1="19.05" x2="-2.54" y2="16.51" width="0.127" layer="94"/>
<wire x1="-2.54" y1="13.97" x2="-2.54" y2="11.43" width="0.127" layer="94"/>
<wire x1="-2.54" y1="3.81" x2="-2.54" y2="1.27" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="-3.81" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-6.35" x2="-2.54" y2="-8.89" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-11.43" x2="-2.54" y2="-13.97" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-16.51" x2="-2.54" y2="-19.05" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-19.05" x2="-1.27" y2="-17.78" width="0.127" layer="94"/>
<wire x1="-1.27" y1="-17.78" x2="-2.54" y2="-16.51" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-13.97" x2="-1.27" y2="-12.7" width="0.127" layer="94"/>
<wire x1="-1.27" y1="-12.7" x2="-2.54" y2="-11.43" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-6.35" x2="-1.27" y2="-7.62" width="0.127" layer="94"/>
<wire x1="-1.27" y1="-7.62" x2="-2.54" y2="-8.89" width="0.127" layer="94"/>
<wire x1="-2.54" y1="19.05" x2="-1.27" y2="17.78" width="0.127" layer="94"/>
<wire x1="-1.27" y1="17.78" x2="-2.54" y2="16.51" width="0.127" layer="94"/>
<wire x1="-2.54" y1="13.97" x2="-1.27" y2="12.7" width="0.127" layer="94"/>
<wire x1="-1.27" y1="12.7" x2="-2.54" y2="11.43" width="0.127" layer="94"/>
<wire x1="-2.54" y1="8.89" x2="-2.54" y2="6.35" width="0.127" layer="94"/>
<wire x1="-2.54" y1="8.89" x2="-1.27" y2="7.62" width="0.127" layer="94"/>
<wire x1="-1.27" y1="7.62" x2="-2.54" y2="6.35" width="0.127" layer="94"/>
<wire x1="-2.54" y1="3.81" x2="-1.27" y2="2.54" width="0.127" layer="94"/>
<wire x1="-1.27" y1="2.54" x2="-2.54" y2="1.27" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-1.27" x2="-1.27" y2="-2.54" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-3.81" x2="-1.27" y2="-2.54" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-22.86" x2="-2.54" y2="-23.8125" width="0.127" layer="94"/>
<wire x1="-3.175" y1="-23.8125" x2="-3.4925" y2="-23.8125" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-23.8125" x2="-1.905" y2="-23.8125" width="0.127" layer="94"/>
<wire x1="-1.905" y1="-23.8125" x2="-1.27" y2="-23.8125" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-23.8125" x2="-3.175" y2="-23.8125" width="0.127" layer="94"/>
<wire x1="-3.175" y1="-23.8125" x2="-3.81" y2="-23.8125" width="0.127" layer="94"/>
<wire x1="-3.81" y1="-23.8125" x2="-4.1275" y2="-24.13" width="0.127" layer="94"/>
<wire x1="-3.175" y1="-23.8125" x2="-3.4925" y2="-24.13" width="0.127" layer="94"/>
<wire x1="-2.54" y1="-23.8125" x2="-2.8575" y2="-24.13" width="0.127" layer="94"/>
<wire x1="-1.905" y1="-23.8125" x2="-2.2225" y2="-24.13" width="0.127" layer="94"/>
<wire x1="-1.27" y1="-23.8125" x2="-1.5875" y2="-24.13" width="0.127" layer="94"/>
<wire x1="-0.635" y1="17.78" x2="12.7" y2="17.78" width="0.127" layer="94"/>
<wire x1="-0.635" y1="12.7" x2="1.905" y2="12.7" width="0.127" layer="94"/>
<wire x1="1.905" y1="12.7" x2="12.7" y2="12.7" width="0.127" layer="94"/>
<wire x1="-0.635" y1="7.62" x2="1.905" y2="7.62" width="0.127" layer="94"/>
<wire x1="1.905" y1="7.62" x2="12.7" y2="7.62" width="0.127" layer="94"/>
<wire x1="-0.635" y1="2.54" x2="1.905" y2="2.54" width="0.127" layer="94"/>
<wire x1="1.905" y1="2.54" x2="12.7" y2="2.54" width="0.127" layer="94"/>
<wire x1="12.7" y1="-2.54" x2="1.905" y2="-2.54" width="0.127" layer="94"/>
<wire x1="1.905" y1="-2.54" x2="-0.635" y2="-2.54" width="0.127" layer="94"/>
<wire x1="-0.635" y1="-7.62" x2="1.905" y2="-7.62" width="0.127" layer="94"/>
<wire x1="1.905" y1="-7.62" x2="12.7" y2="-7.62" width="0.127" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="1.905" y2="-12.7" width="0.127" layer="94"/>
<wire x1="1.905" y1="-12.7" x2="-0.635" y2="-12.7" width="0.127" layer="94"/>
<wire x1="-0.635" y1="-17.78" x2="1.905" y2="-17.78" width="0.127" layer="94"/>
<wire x1="1.905" y1="-17.78" x2="12.7" y2="-17.78" width="0.127" layer="94"/>
<wire x1="1.905" y1="12.7" x2="1.905" y2="10.4775" width="0.127" layer="94"/>
<wire x1="1.905" y1="10.4775" x2="3.4925" y2="10.4775" width="0.127" layer="94"/>
<wire x1="3.4925" y1="10.4775" x2="3.4925" y2="11.43" width="0.127" layer="94"/>
<wire x1="3.4925" y1="10.4775" x2="3.4925" y2="9.525" width="0.127" layer="94"/>
<wire x1="3.4925" y1="9.525" x2="4.445" y2="10.4775" width="0.127" layer="94"/>
<wire x1="4.445" y1="10.4775" x2="3.4925" y2="11.43" width="0.127" layer="94"/>
<wire x1="4.445" y1="11.43" x2="4.445" y2="10.4775" width="0.127" layer="94"/>
<wire x1="4.445" y1="10.4775" x2="4.445" y2="9.525" width="0.127" layer="94"/>
<wire x1="1.905" y1="7.62" x2="1.905" y2="5.3975" width="0.127" layer="94"/>
<wire x1="1.905" y1="2.54" x2="1.905" y2="0.3175" width="0.127" layer="94"/>
<wire x1="1.905" y1="-2.54" x2="1.905" y2="-4.7625" width="0.127" layer="94"/>
<wire x1="1.905" y1="-7.62" x2="1.905" y2="-9.8425" width="0.127" layer="94"/>
<wire x1="1.905" y1="-12.7" x2="1.905" y2="-14.9225" width="0.127" layer="94"/>
<wire x1="1.905" y1="5.3975" x2="3.4925" y2="5.3975" width="0.127" layer="94"/>
<wire x1="1.905" y1="0.3175" x2="3.4925" y2="0.3175" width="0.127" layer="94"/>
<wire x1="1.905" y1="-4.7625" x2="3.4925" y2="-4.7625" width="0.127" layer="94"/>
<wire x1="1.905" y1="-9.8425" x2="3.4925" y2="-9.8425" width="0.127" layer="94"/>
<wire x1="1.905" y1="-14.9225" x2="3.4925" y2="-14.9225" width="0.127" layer="94"/>
<wire x1="3.4925" y1="6.35" x2="3.4925" y2="4.445" width="0.127" layer="94"/>
<wire x1="3.4925" y1="1.27" x2="3.4925" y2="-0.635" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-3.81" x2="3.4925" y2="-5.715" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-8.89" x2="3.4925" y2="-10.795" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-13.97" x2="3.4925" y2="-15.875" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-13.97" x2="4.445" y2="-14.9225" width="0.127" layer="94"/>
<wire x1="4.445" y1="-14.9225" x2="3.4925" y2="-15.875" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-8.89" x2="4.445" y2="-9.8425" width="0.127" layer="94"/>
<wire x1="4.445" y1="-9.8425" x2="3.4925" y2="-10.795" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-3.81" x2="4.445" y2="-4.7625" width="0.127" layer="94"/>
<wire x1="4.445" y1="-4.7625" x2="3.4925" y2="-5.715" width="0.127" layer="94"/>
<wire x1="3.4925" y1="1.27" x2="4.445" y2="0.3175" width="0.127" layer="94"/>
<wire x1="4.445" y1="0.3175" x2="3.4925" y2="-0.635" width="0.127" layer="94"/>
<wire x1="3.4925" y1="6.35" x2="4.445" y2="5.3975" width="0.127" layer="94"/>
<wire x1="4.445" y1="5.3975" x2="3.4925" y2="4.445" width="0.127" layer="94"/>
<wire x1="4.445" y1="6.35" x2="4.445" y2="5.3975" width="0.127" layer="94"/>
<wire x1="4.445" y1="5.3975" x2="4.445" y2="4.445" width="0.127" layer="94"/>
<wire x1="4.445" y1="1.27" x2="4.445" y2="0.3175" width="0.127" layer="94"/>
<wire x1="4.445" y1="0.3175" x2="4.445" y2="-0.635" width="0.127" layer="94"/>
<wire x1="4.445" y1="-3.81" x2="4.445" y2="-4.7625" width="0.127" layer="94"/>
<wire x1="4.445" y1="-4.7625" x2="4.445" y2="-5.715" width="0.127" layer="94"/>
<wire x1="4.445" y1="-8.89" x2="4.445" y2="-9.8425" width="0.127" layer="94"/>
<wire x1="4.445" y1="-9.8425" x2="4.445" y2="-10.795" width="0.127" layer="94"/>
<wire x1="4.445" y1="-13.97" x2="4.445" y2="-14.9225" width="0.127" layer="94"/>
<wire x1="4.445" y1="-14.9225" x2="4.445" y2="-15.875" width="0.127" layer="94"/>
<wire x1="10.4775" y1="-22.86" x2="12.7" y2="-22.86" width="0.127" layer="94"/>
<wire x1="10.4775" y1="10.4775" x2="10.4775" y2="5.3975" width="0.127" layer="94"/>
<wire x1="10.4775" y1="5.3975" x2="10.4775" y2="0.3175" width="0.127" layer="94"/>
<wire x1="10.4775" y1="0.3175" x2="10.4775" y2="-4.7625" width="0.127" layer="94"/>
<wire x1="10.4775" y1="-4.7625" x2="10.4775" y2="-9.8425" width="0.127" layer="94"/>
<wire x1="10.4775" y1="-9.8425" x2="10.4775" y2="-14.9225" width="0.127" layer="94"/>
<wire x1="10.4775" y1="-14.9225" x2="10.4775" y2="-22.86" width="0.127" layer="94"/>
<wire x1="4.445" y1="-14.9225" x2="10.4775" y2="-14.9225" width="0.127" layer="94"/>
<wire x1="4.445" y1="-9.8425" x2="10.4775" y2="-9.8425" width="0.127" layer="94"/>
<wire x1="4.445" y1="-4.7625" x2="10.4775" y2="-4.7625" width="0.127" layer="94"/>
<wire x1="4.445" y1="5.3975" x2="10.4775" y2="5.3975" width="0.127" layer="94"/>
<wire x1="4.445" y1="0.3175" x2="10.4775" y2="0.3175" width="0.127" layer="94"/>
<wire x1="4.445" y1="10.4775" x2="10.4775" y2="10.4775" width="0.127" layer="94"/>
<wire x1="1.905" y1="17.78" x2="1.905" y2="15.5575" width="0.127" layer="94"/>
<wire x1="1.905" y1="15.5575" x2="3.4925" y2="15.5575" width="0.127" layer="94"/>
<wire x1="3.4925" y1="15.5575" x2="3.4925" y2="16.51" width="0.127" layer="94"/>
<wire x1="3.4925" y1="15.5575" x2="3.4925" y2="14.605" width="0.127" layer="94"/>
<wire x1="3.4925" y1="14.605" x2="4.445" y2="15.5575" width="0.127" layer="94"/>
<wire x1="4.445" y1="15.5575" x2="3.4925" y2="16.51" width="0.127" layer="94"/>
<wire x1="4.445" y1="16.51" x2="4.445" y2="15.5575" width="0.127" layer="94"/>
<wire x1="4.445" y1="15.5575" x2="4.445" y2="14.605" width="0.127" layer="94"/>
<wire x1="4.445" y1="15.5575" x2="10.4775" y2="15.5575" width="0.127" layer="94"/>
<wire x1="10.4775" y1="15.5575" x2="10.4775" y2="10.4775" width="0.127" layer="94"/>
<wire x1="1.905" y1="-17.78" x2="1.905" y2="-20.0025" width="0.127" layer="94"/>
<wire x1="1.905" y1="-20.0025" x2="3.4925" y2="-20.0025" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-19.05" x2="3.4925" y2="-20.955" width="0.127" layer="94"/>
<wire x1="3.4925" y1="-19.05" x2="4.445" y2="-20.0025" width="0.127" layer="94"/>
<wire x1="4.445" y1="-20.0025" x2="3.4925" y2="-20.955" width="0.127" layer="94"/>
<wire x1="4.445" y1="-19.05" x2="4.445" y2="-20.0025" width="0.127" layer="94"/>
<wire x1="4.445" y1="-20.0025" x2="4.445" y2="-20.955" width="0.127" layer="94"/>
<wire x1="4.445" y1="-20.0025" x2="10.4775" y2="-20.0025" width="0.127" layer="94"/>
<circle x="-0.9525" y="17.78" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="12.7" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="7.62" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="2.54" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="-2.54" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="-7.62" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="-12.7" radius="0.3175" width="0.127" layer="94"/>
<circle x="-0.9525" y="-17.78" radius="0.3175" width="0.127" layer="94"/>
<circle x="10.4775" y="10.4775" radius="0.1419" width="0.127" layer="94"/>
<circle x="10.4775" y="5.3975" radius="0.1905" width="0.127" layer="94"/>
<circle x="10.4775" y="0.3175" radius="0.2008" width="0.127" layer="94"/>
<circle x="10.4775" y="-4.7625" radius="0.2008" width="0.127" layer="94"/>
<circle x="10.4775" y="-9.8425" radius="0.2008" width="0.127" layer="94"/>
<circle x="10.4775" y="-14.9225" radius="0.2008" width="0.127" layer="94"/>
<circle x="10.4775" y="10.4775" radius="0.1796" width="0.127" layer="94"/>
<circle x="10.4775" y="-14.9225" radius="0.0635" width="0.127" layer="94"/>
<circle x="10.4775" y="-14.9225" radius="0.2618" width="0.127" layer="94"/>
<circle x="10.4775" y="-4.7625" radius="0.0635" width="0.127" layer="94"/>
<circle x="10.4775" y="0.3175" radius="0.0635" width="0.127" layer="94"/>
<circle x="10.4775" y="-20.0025" radius="0.2008" width="0.127" layer="94"/>
<circle x="10.4775" y="-20.0025" radius="0.0635" width="0.127" layer="94"/>
<circle x="10.4775" y="-20.0025" radius="0.2618" width="0.127" layer="94"/>
<text x="-10.16" y="21.082" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-27.94" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="-12.7" y="17.78" visible="pad" length="short"/>
<pin name="2" x="-12.7" y="12.7" visible="pad" length="short"/>
<pin name="3" x="-12.7" y="7.62" visible="pad" length="short"/>
<pin name="4" x="-12.7" y="2.54" visible="pad" length="short"/>
<pin name="5" x="-12.7" y="-2.54" visible="pad" length="short"/>
<pin name="6" x="-12.7" y="-7.62" visible="pad" length="short"/>
<pin name="7" x="-12.7" y="-12.7" visible="pad" length="short"/>
<pin name="8" x="-12.7" y="-17.78" visible="pad" length="short"/>
<pin name="9" x="-12.7" y="-22.86" visible="pad" length="short"/>
<pin name="10" x="15.24" y="-22.86" visible="pad" length="short" rot="R180"/>
<pin name="11" x="15.24" y="-17.78" visible="pad" length="short" rot="R180"/>
<pin name="12" x="15.24" y="-12.7" visible="pad" length="short" rot="R180"/>
<pin name="13" x="15.24" y="-7.62" visible="pad" length="short" rot="R180"/>
<pin name="14" x="15.24" y="-2.54" visible="pad" length="short" rot="R180"/>
<pin name="15" x="15.24" y="2.54" visible="pad" length="short" rot="R180"/>
<pin name="16" x="15.24" y="7.62" visible="pad" length="short" rot="R180"/>
<pin name="17" x="15.24" y="12.7" visible="pad" length="short" rot="R180"/>
<pin name="18" x="15.24" y="17.78" visible="pad" length="short" rot="R180"/>
</symbol>
<symbol name="VNH2SP30">
<wire x1="-12.7" y1="-22.86" x2="-12.7" y2="22.86" width="0.254" layer="94"/>
<wire x1="-12.7" y1="22.86" x2="12.7" y2="22.86" width="0.254" layer="94"/>
<wire x1="12.7" y1="22.86" x2="12.7" y2="-22.86" width="0.254" layer="94"/>
<wire x1="12.7" y1="-22.86" x2="-12.7" y2="-22.86" width="0.254" layer="94"/>
<text x="-12.7" y="23.368" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="-25.146" size="1.778" layer="96">&gt;VALUE</text>
<pin name="OUTB@15" x="15.24" y="-10.16" visible="pin" length="short" rot="R180"/>
<pin name="INB" x="-15.24" y="2.54" visible="pin" length="short"/>
<pin name="VCC@13" x="-15.24" y="17.78" visible="pin" length="short"/>
<pin name="EN/DIAB" x="15.24" y="15.24" visible="pin" length="short" rot="R180"/>
<pin name="CS" x="15.24" y="-15.24" visible="pin" length="short" rot="R180"/>
<pin name="PWM" x="-15.24" y="-2.54" visible="pin" length="short"/>
<pin name="EN/DIAA" x="15.24" y="20.32" visible="pin" length="short" rot="R180"/>
<pin name="INA" x="-15.24" y="7.62" visible="pin" length="short"/>
<pin name="VCC@3" x="-15.24" y="20.32" visible="pin" length="short"/>
<pin name="OUTA@1" x="15.24" y="2.54" visible="pin" length="short" rot="R180"/>
<pin name="OUTA@30" x="15.24" y="7.62" visible="pin" length="short" rot="R180"/>
<pin name="GNDA@28" x="-15.24" y="-12.7" visible="pin" length="short"/>
<pin name="GNDA@27" x="-15.24" y="-10.16" visible="pin" length="short"/>
<pin name="GNDA@26" x="-15.24" y="-7.62" visible="pin" length="short"/>
<pin name="OUTA@25" x="15.24" y="5.08" visible="pin" length="short" rot="R180"/>
<pin name="VCC@23" x="-15.24" y="15.24" visible="pin" length="short"/>
<pin name="OUTB@21" x="15.24" y="-5.08" visible="pin" length="short" rot="R180"/>
<pin name="GNDB@20" x="-15.24" y="-20.32" visible="pin" length="short"/>
<pin name="GNDB@19" x="-15.24" y="-17.78" visible="pin" length="short"/>
<pin name="GNDB@18" x="-15.24" y="-15.24" visible="pin" length="short"/>
<pin name="OUTB@16" x="15.24" y="-7.62" visible="pin" length="short" rot="R180"/>
<pin name="VCC@SLUG1" x="-15.24" y="12.7" visible="pin" length="short"/>
<pin name="OUTA@SLUG3" x="15.24" y="10.16" visible="pin" length="short" rot="R180"/>
<pin name="OUTB@SLUG2" x="15.24" y="-2.54" visible="pin" length="short" rot="R180"/>
</symbol>
<symbol name="MIC5216">
<wire x1="-12.7" y1="5.08" x2="-12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-5.08" x2="12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="-5.08" x2="12.7" y2="5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="5.08" x2="-12.7" y2="5.08" width="0.254" layer="94"/>
<text x="-12.7" y="5.08" size="1.27" layer="95">&gt;Name</text>
<text x="5.08" y="5.08" size="1.27" layer="96">&gt;Value</text>
<pin name="VIN" x="-17.78" y="2.54" length="middle"/>
<pin name="EN" x="-17.78" y="0" length="middle"/>
<pin name="VOUT" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="FLAG" x="17.78" y="0" length="middle" rot="R180"/>
<pin name="GND@5" x="-5.08" y="-10.16" length="middle" rot="R90"/>
<pin name="GND@6" x="-2.54" y="-10.16" length="middle" rot="R90"/>
<pin name="GND@7" x="0" y="-10.16" length="middle" rot="R90"/>
<pin name="GND@8" x="2.54" y="-10.16" length="middle" rot="R90"/>
</symbol>
<symbol name="78XX">
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="2.54" width="0.4064" layer="94"/>
<wire x1="5.08" y1="2.54" x2="-5.08" y2="2.54" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<text x="2.54" y="-7.62" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<text x="-2.032" y="-4.318" size="1.524" layer="95">GND</text>
<text x="-4.445" y="-0.635" size="1.524" layer="95">IN</text>
<text x="0.635" y="-0.635" size="1.524" layer="95">OUT</text>
<pin name="IN" x="-7.62" y="0" visible="off" length="short" direction="in"/>
<pin name="GND" x="0" y="-7.62" visible="off" length="short" direction="in" rot="R90"/>
<pin name="OUT" x="7.62" y="0" visible="off" length="short" direction="out" rot="R180"/>
</symbol>
<symbol name="78ADJ-2">
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="2.54" width="0.4064" layer="94"/>
<wire x1="5.08" y1="2.54" x2="-5.08" y2="2.54" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<text x="2.54" y="-7.62" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<text x="-2.032" y="-4.318" size="1.524" layer="95">ADJ</text>
<text x="-4.445" y="-0.635" size="1.524" layer="95">IN</text>
<text x="0.635" y="-0.635" size="1.524" layer="95">OUT</text>
<pin name="IN" x="-7.62" y="0" visible="off" length="short" direction="in"/>
<pin name="ADJ" x="0" y="-7.62" visible="off" length="short" direction="in" rot="R90"/>
<pin name="OUT" x="7.62" y="0" visible="off" length="short" direction="out" rot="R180"/>
</symbol>
<symbol name="78ADJ">
<wire x1="-5.08" y1="-5.08" x2="5.08" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="5.08" y1="-5.08" x2="5.08" y2="2.54" width="0.4064" layer="94"/>
<wire x1="5.08" y1="2.54" x2="-5.08" y2="2.54" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="2.54" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<text x="2.54" y="-7.62" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<text x="-2.032" y="-4.318" size="1.524" layer="95">ADJ</text>
<text x="-4.445" y="-0.635" size="1.524" layer="95">IN</text>
<text x="0.635" y="-0.635" size="1.524" layer="95">OUT</text>
<pin name="IN" x="-7.62" y="0" visible="off" length="short" direction="in"/>
<pin name="ADJ" x="0" y="-7.62" visible="off" length="short" direction="in" rot="R90"/>
<pin name="OUT" x="7.62" y="0" visible="off" length="short" direction="out" rot="R180"/>
<pin name="OUT@1" x="7.62" y="-2.54" visible="off" length="short" direction="out" rot="R180"/>
</symbol>
<symbol name="V-REG-LDO">
<wire x1="-7.62" y1="-7.62" x2="5.08" y2="-7.62" width="0.4064" layer="94"/>
<wire x1="5.08" y1="-7.62" x2="5.08" y2="7.62" width="0.4064" layer="94"/>
<wire x1="5.08" y1="7.62" x2="-7.62" y2="7.62" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.4064" layer="94"/>
<text x="-7.62" y="9.144" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-11.43" size="1.778" layer="96">&gt;VALUE</text>
<pin name="IN" x="-10.16" y="5.08" visible="pin" length="short" direction="in"/>
<pin name="GND" x="-10.16" y="0" visible="pin" length="short" direction="in"/>
<pin name="OUT" x="7.62" y="5.08" visible="pin" length="short" direction="pas" rot="R180"/>
<pin name="EN" x="-10.16" y="-5.08" visible="pin" length="short" direction="in"/>
<pin name="BP" x="7.62" y="-5.08" visible="pin" length="short" direction="in" rot="R180"/>
</symbol>
<symbol name="V-REG-LDO-ADJ">
<wire x1="-7.62" y1="-7.62" x2="5.08" y2="-7.62" width="0.4064" layer="94"/>
<wire x1="5.08" y1="-7.62" x2="5.08" y2="7.62" width="0.4064" layer="94"/>
<wire x1="5.08" y1="7.62" x2="-7.62" y2="7.62" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="7.62" x2="-7.62" y2="-7.62" width="0.4064" layer="94"/>
<text x="-7.62" y="9.144" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="-11.43" size="1.778" layer="96">&gt;VALUE</text>
<pin name="IN" x="-10.16" y="5.08" visible="pin" length="short" direction="in"/>
<pin name="GND" x="-10.16" y="0" visible="pin" length="short" direction="in"/>
<pin name="OUT" x="7.62" y="5.08" visible="pin" length="short" direction="pas" rot="R180"/>
<pin name="EN" x="-10.16" y="-5.08" visible="pin" length="short" direction="in"/>
<pin name="ADJ" x="7.62" y="-5.08" visible="pin" length="short" direction="in" rot="R180"/>
</symbol>
<symbol name="78ADJ-3">
<wire x1="-7.62" y1="-7.62" x2="7.62" y2="-7.62" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-7.62" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="-7.62" width="0.4064" layer="94"/>
<text x="-7.62" y="7.62" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="5.08" size="1.778" layer="96">&gt;VALUE</text>
<text x="3.048" y="-5.08" size="1.524" layer="95">ADJ</text>
<text x="-6.731" y="1.905" size="1.524" layer="95">IN</text>
<text x="3.175" y="1.905" size="1.524" layer="95">OUT</text>
<text x="-1.905" y="-6.731" size="1.524" layer="95">GND</text>
<text x="-6.731" y="-5.207" size="1.524" layer="95">EN</text>
<pin name="IN" x="-10.16" y="2.54" visible="off" length="short" direction="in"/>
<pin name="ADJ" x="10.16" y="-5.08" visible="off" length="short" direction="in" rot="R180"/>
<pin name="OUT" x="10.16" y="2.54" visible="off" length="short" direction="out" rot="R180"/>
<pin name="GND" x="0" y="-10.16" visible="off" length="short" rot="R90"/>
<pin name="EN" x="-10.16" y="-5.08" visible="off" length="short"/>
</symbol>
<symbol name="NCP1400">
<wire x1="-5.08" y1="-5.08" x2="7.62" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-5.08" y2="5.08" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="5.08" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<text x="-5.08" y="6.604" size="1.778" layer="95">&gt;NAME</text>
<text x="-4.826" y="-8.382" size="1.778" layer="96">&gt;VALUE</text>
<pin name="LX" x="10.16" y="2.54" visible="pin" length="short" direction="in" rot="R180"/>
<pin name="GND" x="10.16" y="-2.54" visible="pin" length="short" direction="in" rot="R180"/>
<pin name="OUT" x="-7.62" y="0" visible="pin" length="short" direction="pas"/>
<pin name="EN" x="-7.62" y="2.54" visible="pin" length="short" direction="in"/>
<pin name="NC" x="-7.62" y="-2.54" visible="pin" length="short" direction="in"/>
</symbol>
<symbol name="TPS61040">
<wire x1="-5.08" y1="7.62" x2="-5.08" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-5.08" y1="-7.62" x2="7.62" y2="-7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="-7.62" x2="7.62" y2="7.62" width="0.254" layer="94"/>
<wire x1="7.62" y1="7.62" x2="-5.08" y2="7.62" width="0.254" layer="94"/>
<text x="-5.08" y="10.16" size="1.778" layer="95" rot="MR180">&gt;NAME</text>
<text x="-5.08" y="-10.16" size="1.778" layer="96">&gt;VALUE</text>
<pin name="EN" x="-10.16" y="-5.08" length="middle"/>
<pin name="GND" x="12.7" y="0" length="middle" rot="R180"/>
<pin name="VIN" x="-10.16" y="5.08" length="middle"/>
<pin name="SW" x="12.7" y="5.08" length="middle" rot="R180"/>
<pin name="FB" x="12.7" y="-5.08" length="middle" rot="R180"/>
</symbol>
<symbol name="TPS76433DBVT">
<wire x1="-5.08" y1="-5.08" x2="7.62" y2="-5.08" width="0.4064" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="10.16" width="0.4064" layer="94"/>
<wire x1="7.62" y1="10.16" x2="-5.08" y2="10.16" width="0.4064" layer="94"/>
<wire x1="-5.08" y1="10.16" x2="-5.08" y2="-5.08" width="0.4064" layer="94"/>
<text x="-5.08" y="11.684" size="1.778" layer="95">&gt;NAME</text>
<text x="-4.826" y="-10.922" size="1.778" layer="96">&gt;VALUE</text>
<pin name="IN" x="-7.62" y="7.62" visible="pin" length="short" direction="in"/>
<pin name="GND" x="10.16" y="-2.54" visible="pin" length="short" direction="in" rot="R180"/>
<pin name="OUT" x="10.16" y="7.62" visible="pin" length="short" direction="pas" rot="R180"/>
<pin name="EN" x="-7.62" y="2.54" visible="pin" length="short" direction="in"/>
<pin name="NC" x="-7.62" y="-2.54" visible="pin" length="short" direction="in"/>
</symbol>
<symbol name="ZXLD1360">
<wire x1="-10.16" y1="-7.62" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="7.62" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="7.62" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<text x="-10.16" y="8.382" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-10.16" size="1.778" layer="96">&gt;Value</text>
<pin name="LX" x="15.24" y="2.54" visible="pin" length="middle" rot="R180"/>
<pin name="GND" x="-15.24" y="-5.08" visible="pin" length="middle"/>
<pin name="ADJ" x="-15.24" y="0" visible="pin" length="middle"/>
<pin name="SENSE" x="15.24" y="-2.54" visible="pin" length="middle" rot="R180"/>
<pin name="VIN" x="-15.24" y="5.08" visible="pin" length="middle"/>
</symbol>
<symbol name="A4983">
<wire x1="-12.7" y1="25.4" x2="-12.7" y2="-25.4" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-25.4" x2="12.7" y2="-25.4" width="0.254" layer="94"/>
<wire x1="12.7" y1="-25.4" x2="12.7" y2="25.4" width="0.254" layer="94"/>
<wire x1="12.7" y1="25.4" x2="-12.7" y2="25.4" width="0.254" layer="94"/>
<text x="-12.7" y="-27.94" size="1.778" layer="96">&gt;VALUE</text>
<text x="-12.7" y="25.4" size="1.778" layer="95">&gt;NAME</text>
<pin name="CP1" x="-15.24" y="12.7" visible="pin" length="short"/>
<pin name="CP2" x="-15.24" y="10.16" visible="pin" length="short"/>
<pin name="DIR" x="-15.24" y="2.54" visible="pin" length="short" direction="in"/>
<pin name="ENABLE" x="-15.24" y="-10.16" visible="pin" length="short" direction="in"/>
<pin name="GND@1" x="-15.24" y="-17.78" visible="pin" length="short" direction="pwr"/>
<pin name="GND@2" x="-15.24" y="-20.32" visible="pin" length="short" direction="pwr"/>
<pin name="GND_PAD" x="-15.24" y="-22.86" visible="pin" length="short" direction="pwr"/>
<pin name="MS1" x="-15.24" y="-2.54" visible="pin" length="short" direction="in"/>
<pin name="MS2" x="-15.24" y="-5.08" visible="pin" length="short" direction="in"/>
<pin name="MS3" x="-15.24" y="-7.62" visible="pin" length="short" direction="in"/>
<pin name="NC@1" x="15.24" y="-17.78" visible="pin" length="short" direction="nc" rot="R180"/>
<pin name="NC@2" x="15.24" y="-20.32" visible="pin" length="short" direction="nc" rot="R180"/>
<pin name="NC@3" x="15.24" y="-22.86" visible="pin" length="short" direction="nc" rot="R180"/>
<pin name="OUT1A" x="15.24" y="12.7" visible="pin" length="short" rot="R180"/>
<pin name="OUT1B" x="15.24" y="15.24" visible="pin" length="short" rot="R180"/>
<pin name="OUT2A" x="15.24" y="10.16" visible="pin" length="short" rot="R180"/>
<pin name="OUT2B" x="15.24" y="7.62" visible="pin" length="short" rot="R180"/>
<pin name="REF" x="15.24" y="-12.7" visible="pin" length="short" rot="R180"/>
<pin name="RESET" x="-15.24" y="0" visible="pin" length="short" direction="in"/>
<pin name="ROSC" x="15.24" y="-10.16" visible="pin" length="short" rot="R180"/>
<pin name="SENSE1" x="15.24" y="2.54" visible="pin" length="short" rot="R180"/>
<pin name="SENSE2" x="15.24" y="0" visible="pin" length="short" rot="R180"/>
<pin name="SLEEP" x="-15.24" y="-12.7" visible="pin" length="short" direction="in"/>
<pin name="STEP" x="-15.24" y="5.08" visible="pin" length="short" direction="in"/>
<pin name="VBB1" x="15.24" y="22.86" visible="pin" length="short" rot="R180"/>
<pin name="VBB2" x="15.24" y="20.32" visible="pin" length="short" rot="R180"/>
<pin name="VCP" x="15.24" y="-5.08" visible="pin" length="short" rot="R180"/>
<pin name="VDD" x="-15.24" y="17.78" visible="pin" length="short" direction="pwr"/>
<pin name="VREG" x="15.24" y="-7.62" visible="pin" length="short" rot="R180"/>
</symbol>
<symbol name="TPS62143">
<wire x1="-12.7" y1="10.16" x2="-12.7" y2="-15.24" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-15.24" x2="12.7" y2="-15.24" width="0.254" layer="94"/>
<wire x1="12.7" y1="-15.24" x2="12.7" y2="10.16" width="0.254" layer="94"/>
<wire x1="12.7" y1="10.16" x2="-12.7" y2="10.16" width="0.254" layer="94"/>
<pin name="PVIN@11" x="-17.78" y="7.62" length="middle"/>
<pin name="PVIN@12" x="-17.78" y="5.08" length="middle"/>
<pin name="AVIN" x="-17.78" y="2.54" length="middle"/>
<pin name="EN" x="-17.78" y="0" length="middle"/>
<pin name="FSW" x="-7.62" y="-20.32" length="middle" rot="R90"/>
<pin name="PGND@15" x="0" y="-20.32" length="middle" rot="R90"/>
<pin name="PGND@16" x="2.54" y="-20.32" length="middle" rot="R90"/>
<pin name="EXT" x="5.08" y="-20.32" length="middle" rot="R90"/>
<pin name="SW@1" x="17.78" y="7.62" length="middle" rot="R180"/>
<pin name="SW@2" x="17.78" y="5.08" length="middle" rot="R180"/>
<pin name="SW@3" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="PG" x="17.78" y="-2.54" length="middle" rot="R180"/>
<pin name="VOS" x="17.78" y="0" length="middle" rot="R180"/>
<pin name="SS_TR" x="-17.78" y="-2.54" length="middle"/>
<pin name="AGND" x="-2.54" y="-20.32" length="middle" rot="R90"/>
<pin name="DEF" x="-5.08" y="-20.32" length="middle" rot="R90"/>
<pin name="FB" x="17.78" y="-5.08" length="middle" rot="R180"/>
<text x="-12.7" y="12.7" size="1.778" layer="95">&gt;NAME</text>
<text x="-12.7" y="10.16" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="HV816">
<pin name="VDD" x="-15.24" y="12.7" length="middle"/>
<pin name="REL-OSC" x="-15.24" y="5.08" length="middle"/>
<pin name="RSW-OSC" x="-15.24" y="0" length="middle"/>
<pin name="RSLEW-OUT" x="-15.24" y="-5.08" length="middle"/>
<pin name="GND" x="2.54" y="-17.78" length="middle" rot="R90"/>
<pin name="HVGND" x="12.7" y="-17.78" length="middle" rot="R90"/>
<pin name="SEL" x="30.48" y="-7.62" length="middle" rot="R180"/>
<pin name="EN" x="30.48" y="-2.54" length="middle" rot="R180"/>
<pin name="VB" x="30.48" y="2.54" length="middle" rot="R180"/>
<pin name="VA" x="30.48" y="7.62" length="middle" rot="R180"/>
<pin name="CS" x="30.48" y="12.7" length="middle" rot="R180"/>
<pin name="VREG" x="-2.54" y="20.32" length="middle" rot="R270"/>
<pin name="VOUT" x="2.54" y="20.32" length="middle" rot="R270"/>
<pin name="VDRIVE" x="7.62" y="20.32" length="middle" rot="R270"/>
<pin name="LX" x="12.7" y="20.32" length="middle" rot="R270"/>
<pin name="GATE" x="17.78" y="20.32" length="middle" rot="R270"/>
<wire x1="-10.16" y1="15.24" x2="25.4" y2="15.24" width="0.254" layer="94"/>
<wire x1="25.4" y1="15.24" x2="25.4" y2="-12.7" width="0.254" layer="94"/>
<wire x1="25.4" y1="-12.7" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="-10.16" y2="15.24" width="0.254" layer="94"/>
<text x="-10.16" y="16.256" size="1.778" layer="94">&gt;NAME</text>
<text x="-10.16" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="ADP160">
<pin name="VIN" x="-12.7" y="2.54" length="middle"/>
<pin name="EN" x="-12.7" y="-2.54" length="middle"/>
<pin name="VOUT" x="12.7" y="2.54" length="middle" rot="R180"/>
<pin name="GND" x="12.7" y="-2.54" length="middle" rot="R180"/>
<wire x1="-7.62" y1="5.08" x2="-7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-7.62" y1="-5.08" x2="7.62" y2="-5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="-5.08" x2="7.62" y2="5.08" width="0.254" layer="94"/>
<wire x1="7.62" y1="5.08" x2="-7.62" y2="5.08" width="0.254" layer="94"/>
<text x="-7.62" y="7.62" size="1.778" layer="95">&gt;NAME</text>
<text x="-7.62" y="5.08" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="MIC5216-1">
<wire x1="-12.7" y1="5.08" x2="-12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="-12.7" y1="-5.08" x2="12.7" y2="-5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="-5.08" x2="12.7" y2="5.08" width="0.254" layer="94"/>
<wire x1="12.7" y1="5.08" x2="-12.7" y2="5.08" width="0.254" layer="94"/>
<text x="-12.7" y="5.08" size="1.778" layer="95">&gt;Name</text>
<text x="5.08" y="5.08" size="1.778" layer="96">&gt;Value</text>
<pin name="VIN" x="-17.78" y="2.54" length="middle"/>
<pin name="EN" x="-17.78" y="0" length="middle"/>
<pin name="VOUT" x="17.78" y="2.54" length="middle" rot="R180"/>
<pin name="FLAG" x="17.78" y="0" length="middle" rot="R180"/>
<pin name="GND@5" x="-5.08" y="-10.16" length="middle" rot="R90"/>
<pin name="GND@6" x="-2.54" y="-10.16" length="middle" rot="R90"/>
<pin name="GND@7" x="0" y="-10.16" length="middle" rot="R90"/>
<pin name="GND@8" x="2.54" y="-10.16" length="middle" rot="R90"/>
</symbol>
<symbol name="TPS62172">
<description>&lt;h3&gt;TPS62172&lt;/h3&gt;

3-17V 0.5A Step-Down Converter w/ DCS-Control</description>
<pin name="VIN" x="-12.7" y="5.08" length="short"/>
<pin name="EN" x="-12.7" y="2.54" length="short"/>
<pin name="AGND" x="-12.7" y="0" length="short"/>
<pin name="PGND" x="-12.7" y="-2.54" length="short"/>
<pin name="SW" x="12.7" y="5.08" length="short" rot="R180"/>
<pin name="VOS" x="12.7" y="2.54" length="short" rot="R180"/>
<pin name="PG" x="12.7" y="0" length="short" rot="R180"/>
<pin name="FB" x="12.7" y="-2.54" length="short" rot="R180"/>
<pin name="PAD" x="-12.7" y="-5.08" length="short"/>
<wire x1="-10.16" y1="7.62" x2="-10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-7.62" x2="10.16" y2="-7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="-7.62" x2="10.16" y2="7.62" width="0.254" layer="94"/>
<wire x1="10.16" y1="7.62" x2="-10.16" y2="7.62" width="0.254" layer="94"/>
<text x="-10.16" y="8.128" size="1.778" layer="95">&gt;Name</text>
<text x="-10.16" y="-8.128" size="1.778" layer="96" align="top-left">&gt;Value</text>
</symbol>
<symbol name="DRV8830">
<pin name="VCC" x="-12.7" y="10.16" visible="pin" length="short" direction="pwr"/>
<pin name="SDA" x="-12.7" y="5.08" visible="pin" length="short"/>
<pin name="SCL" x="-12.7" y="2.54" visible="pin" length="short" direction="in"/>
<pin name="A0" x="-12.7" y="-2.54" visible="pin" length="short" direction="in"/>
<pin name="A1" x="-12.7" y="-5.08" visible="pin" length="short" direction="in"/>
<pin name="!FAULT" x="-12.7" y="-10.16" visible="pin" length="short" direction="out"/>
<pin name="ISENSE" x="12.7" y="0" visible="pin" length="short" rot="R180"/>
<pin name="OUT2" x="12.7" y="7.62" visible="pin" length="short" direction="pwr" rot="R180"/>
<pin name="OUT1" x="12.7" y="10.16" visible="pin" length="short" direction="pwr" rot="R180"/>
<pin name="GND" x="12.7" y="-7.62" visible="pin" length="short" direction="pwr" rot="R180"/>
<pin name="PPAD" x="12.7" y="-10.16" visible="pin" length="short" direction="pwr" rot="R180"/>
<wire x1="-10.16" y1="12.7" x2="-10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="-10.16" y1="-12.7" x2="10.16" y2="-12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="-12.7" x2="10.16" y2="12.7" width="0.254" layer="94"/>
<wire x1="10.16" y1="12.7" x2="-10.16" y2="12.7" width="0.254" layer="94"/>
<text x="-10.16" y="13.462" size="1.778" layer="95">&gt;NAME</text>
<text x="-10.16" y="-15.24" size="1.778" layer="95">&gt;VALUE</text>
</symbol>
<symbol name="AL8805">
<wire x1="-7.62" y1="-33.02" x2="-7.62" y2="20.32" width="0.254" layer="94"/>
<wire x1="-7.62" y1="20.32" x2="7.62" y2="20.32" width="0.254" layer="94"/>
<wire x1="7.62" y1="20.32" x2="7.62" y2="-33.02" width="0.254" layer="94"/>
<wire x1="7.62" y1="-33.02" x2="-7.62" y2="-33.02" width="0.254" layer="94"/>
<pin name="SW" x="12.7" y="-30.48" length="middle" rot="R180"/>
<pin name="GND" x="-12.7" y="-30.48" length="middle"/>
<pin name="CTRL" x="-12.7" y="17.78" length="middle"/>
<pin name="VIN" x="12.7" y="17.78" length="middle" rot="R180"/>
<pin name="SET" x="12.7" y="2.54" length="middle" rot="R180"/>
<text x="-7.62" y="22.86" size="1.778" layer="95" rot="MR180">&gt;NAME</text>
<text x="-7.62" y="-35.56" size="1.778" layer="96">&gt;VALUE</text>
</symbol>
<symbol name="LT3652">
<pin name="TIMER" x="-5.08" y="2.54" length="middle"/>
<pin name="!FAULT" x="-5.08" y="7.62" length="middle"/>
<pin name="!CHRG" x="-5.08" y="12.7" length="middle"/>
<pin name="!SHDN" x="-5.08" y="17.78" length="middle"/>
<pin name="VIN_REG" x="-5.08" y="22.86" length="middle"/>
<pin name="VIN" x="-5.08" y="27.94" length="middle"/>
<pin name="SW" x="30.48" y="27.94" length="middle" rot="R180"/>
<pin name="BOOST" x="30.48" y="22.86" length="middle" rot="R180"/>
<pin name="SENSE" x="30.48" y="17.78" length="middle" rot="R180"/>
<pin name="BAT" x="30.48" y="12.7" length="middle" rot="R180"/>
<pin name="NTC" x="30.48" y="7.62" length="middle" rot="R180"/>
<pin name="VFB" x="30.48" y="2.54" length="middle" rot="R180"/>
<wire x1="0" y1="30.48" x2="0" y2="0" width="0.254" layer="94"/>
<wire x1="0" y1="0" x2="25.4" y2="0" width="0.254" layer="94"/>
<wire x1="25.4" y1="0" x2="25.4" y2="30.48" width="0.254" layer="94"/>
<wire x1="25.4" y1="30.48" x2="0" y2="30.48" width="0.254" layer="94"/>
<text x="0" y="34.036" size="1.778" layer="95">&gt;NAME</text>
<text x="-0.254" y="31.242" size="1.778" layer="96">&gt;VALUE</text>
<pin name="GND_PAD" x="12.7" y="-2.54" length="short" rot="R90"/>
</symbol>
<symbol name="TRANSFORMER-QUADFILIAR">
<wire x1="0" y1="7.62" x2="1.27" y2="6.35" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="5.08" x2="1.27" y2="6.35" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="5.08" x2="1.27" y2="3.81" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="2.54" x2="1.27" y2="3.81" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="2.54" x2="1.27" y2="1.27" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="0" x2="1.27" y2="1.27" width="0.1524" layer="94" curve="90" cap="flat"/>
<text x="-2.54" y="18.542" size="1.778" layer="95">&gt;NAME</text>
<text x="-2.54" y="-2.54" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="-2.54" y="7.62" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="1" x="-2.54" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
<wire x1="0" y1="17.78" x2="1.27" y2="16.51" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="15.24" x2="1.27" y2="16.51" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="15.24" x2="1.27" y2="13.97" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="12.7" x2="1.27" y2="13.97" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="0" y1="12.7" x2="1.27" y2="11.43" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="0" y1="10.16" x2="1.27" y2="11.43" width="0.1524" layer="94" curve="90" cap="flat"/>
<pin name="4" x="-2.54" y="17.78" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="3" x="-2.54" y="10.16" visible="off" length="short" direction="pas" swaplevel="1"/>
<wire x1="7.62" y1="7.62" x2="6.35" y2="6.35" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="7.62" y1="5.08" x2="6.35" y2="6.35" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="7.62" y1="5.08" x2="6.35" y2="3.81" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="7.62" y1="2.54" x2="6.35" y2="3.81" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="7.62" y1="2.54" x2="6.35" y2="1.27" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="7.62" y1="0" x2="6.35" y2="1.27" width="0.1524" layer="94" curve="-90" cap="flat"/>
<pin name="6" x="10.16" y="7.62" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="5" x="10.16" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<wire x1="7.62" y1="17.78" x2="6.35" y2="16.51" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="7.62" y1="15.24" x2="6.35" y2="16.51" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="7.62" y1="15.24" x2="6.35" y2="13.97" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="7.62" y1="12.7" x2="6.35" y2="13.97" width="0.1524" layer="94" curve="-90" cap="flat"/>
<wire x1="7.62" y1="12.7" x2="6.35" y2="11.43" width="0.1524" layer="94" curve="90" cap="flat"/>
<wire x1="7.62" y1="10.16" x2="6.35" y2="11.43" width="0.1524" layer="94" curve="-90" cap="flat"/>
<pin name="8" x="10.16" y="17.78" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="7" x="10.16" y="10.16" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<circle x="0" y="16.51" radius="0" width="0.8128" layer="94"/>
<circle x="7.62" y="16.51" radius="0" width="0.8128" layer="94"/>
<circle x="0" y="6.35" radius="0" width="0.8128" layer="94"/>
<circle x="7.62" y="6.35" radius="0" width="0.8128" layer="94"/>
<wire x1="2.54" y1="17.78" x2="2.54" y2="0" width="0.1524" layer="94"/>
<wire x1="5.08" y1="0" x2="5.08" y2="17.78" width="0.254" layer="94"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="ADM1087">
<description>Power supply sequencer</description>
<gates>
<gate name="G$1" symbol="ADM1087" x="-15.24" y="-10.16"/>
</gates>
<devices>
<device name="SC-70" package="SC-70">
<connects>
<connect gate="G$1" pin="CEXT" pad="5"/>
<connect gate="G$1" pin="ENIN" pad="1"/>
<connect gate="G$1" pin="ENOUT" pad="4"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="VCC" pad="6"/>
<connect gate="G$1" pin="VIN" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="BD10KA5WF-E2">
<description>500mA LDO, 1.0V SO-8 (COM-10827)</description>
<gates>
<gate name="G$1" symbol="BD10KA5WF-E2" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO08WIDE">
<connects>
<connect gate="G$1" pin="CTL" pad="5"/>
<connect gate="G$1" pin="GND1" pad="6"/>
<connect gate="G$1" pin="GND2" pad="7"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="VCC" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="BQ24022" prefix="U">
<description>Single-chip, Li-ion and Li-pol charger IC with autonomous USB-port and AC-adapter supply management.&lt;br&gt;
Datasheet: http://focus.ti.com/lit/ds/symlink/bq24022.pdf&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Unproven&lt;/b&gt;&lt;br&gt;
Last modified: 8/16/10&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="BQ24022" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DRC-10">
<connects>
<connect gate="G$1" pin="AC" pad="1"/>
<connect gate="G$1" pin="ETP" pad="EP"/>
<connect gate="G$1" pin="GND" pad="5"/>
<connect gate="G$1" pin="ISET1" pad="6"/>
<connect gate="G$1" pin="ISET2" pad="7"/>
<connect gate="G$1" pin="OUT" pad="10"/>
<connect gate="G$1" pin="STAT1" pad="3"/>
<connect gate="G$1" pin="STAT2" pad="4"/>
<connect gate="G$1" pin="USB" pad="2"/>
<connect gate="G$1" pin="~CE" pad="9"/>
<connect gate="G$1" pin="~PG" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DC-DC_CONVERTER">
<description>APTS006A0X-SRZ Step-down 6A variable voltage switching module (TOL-09275)</description>
<gates>
<gate name="G$1" symbol="DC-DC_CONVERTER" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DC-DC_CONVERTER">
<connects>
<connect gate="G$1" pin="GND1" pad="3"/>
<connect gate="G$1" pin="GND2" pad="7"/>
<connect gate="G$1" pin="ON/OFF" pad="1"/>
<connect gate="G$1" pin="PGOOD" pad="10"/>
<connect gate="G$1" pin="SENSE" pad="5"/>
<connect gate="G$1" pin="SEQ" pad="9"/>
<connect gate="G$1" pin="TRIM" pad="6"/>
<connect gate="G$1" pin="VIN" pad="2"/>
<connect gate="G$1" pin="VOUT" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="HV826MG_BACKLIGHT">
<description>Small EL backlight driver for the CFAX 128x64 graphical display.</description>
<gates>
<gate name="G$1" symbol="HV826MG_BACKLIGHT" x="0" y="0"/>
</gates>
<devices>
<device name="" package="MSOP8">
<connects>
<connect gate="G$1" pin="CS" pad="6"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="LX" pad="5"/>
<connect gate="G$1" pin="REL" pad="3"/>
<connect gate="G$1" pin="RSW" pad="2"/>
<connect gate="G$1" pin="VA" pad="8"/>
<connect gate="G$1" pin="VB" pad="7"/>
<connect gate="G$1" pin="VCC" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="L298" prefix="U">
<description>L298 Dual Full Bridge Driver</description>
<gates>
<gate name="G$1" symbol="L298" x="-10.16" y="-12.7"/>
</gates>
<devices>
<device name="" package="MULTIWATT15">
<connects>
<connect gate="G$1" pin="CSA" pad="1"/>
<connect gate="G$1" pin="CSB" pad="15"/>
<connect gate="G$1" pin="ENA" pad="6"/>
<connect gate="G$1" pin="ENB" pad="11"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="IN1" pad="5"/>
<connect gate="G$1" pin="IN2" pad="7"/>
<connect gate="G$1" pin="IN3" pad="10"/>
<connect gate="G$1" pin="IN4" pad="12"/>
<connect gate="G$1" pin="OUT1" pad="2"/>
<connect gate="G$1" pin="OUT2" pad="3"/>
<connect gate="G$1" pin="OUT3" pad="13"/>
<connect gate="G$1" pin="OUT4" pad="14"/>
<connect gate="G$1" pin="VLS" pad="9"/>
<connect gate="G$1" pin="VS" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="HEATSINK" package="MULTIWATT15_6400BGHEATSINK">
<connects>
<connect gate="G$1" pin="CSA" pad="1"/>
<connect gate="G$1" pin="CSB" pad="15"/>
<connect gate="G$1" pin="ENA" pad="6"/>
<connect gate="G$1" pin="ENB" pad="11"/>
<connect gate="G$1" pin="GND" pad="8"/>
<connect gate="G$1" pin="IN1" pad="5"/>
<connect gate="G$1" pin="IN2" pad="7"/>
<connect gate="G$1" pin="IN3" pad="10"/>
<connect gate="G$1" pin="IN4" pad="12"/>
<connect gate="G$1" pin="OUT1" pad="2"/>
<connect gate="G$1" pin="OUT2" pad="3"/>
<connect gate="G$1" pin="OUT3" pad="13"/>
<connect gate="G$1" pin="OUT4" pad="14"/>
<connect gate="G$1" pin="VLS" pad="9"/>
<connect gate="G$1" pin="VS" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="L298_BRIDGE_DRIVER">
<description>Full-bridge power driver IC</description>
<gates>
<gate name="G$1" symbol="L298_BRIDGE_DRIVER" x="0" y="0"/>
</gates>
<devices>
<device name="" package="POWERSO20">
<connects>
<connect gate="G$1" pin="ENA" pad="8"/>
<connect gate="G$1" pin="ENB" pad="14"/>
<connect gate="G$1" pin="GND@1" pad="1"/>
<connect gate="G$1" pin="GND@10" pad="10"/>
<connect gate="G$1" pin="GND@11" pad="11"/>
<connect gate="G$1" pin="GND@20" pad="20"/>
<connect gate="G$1" pin="IN1" pad="7"/>
<connect gate="G$1" pin="IN2" pad="9"/>
<connect gate="G$1" pin="IN3" pad="13"/>
<connect gate="G$1" pin="IN4" pad="15"/>
<connect gate="G$1" pin="NC@18" pad="18"/>
<connect gate="G$1" pin="NC@3" pad="3"/>
<connect gate="G$1" pin="OUT1" pad="4"/>
<connect gate="G$1" pin="OUT2" pad="5"/>
<connect gate="G$1" pin="OUT3" pad="16"/>
<connect gate="G$1" pin="OUT4" pad="17"/>
<connect gate="G$1" pin="SENSE_A" pad="2"/>
<connect gate="G$1" pin="SENSE_B" pad="19"/>
<connect gate="G$1" pin="VS" pad="6"/>
<connect gate="G$1" pin="VSS" pad="12"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="L6470" prefix="U" uservalue="yes">
<description>3A RMS/7A peak bipolar stepper motor driver with SPI control&lt;br&gt;
and step input in HTSSOP-28 package.&lt;br&gt;
IC-10648</description>
<gates>
<gate name="G$1" symbol="L6470" x="-12.7" y="-25.4"/>
</gates>
<devices>
<device name="" package="HTSSOP28">
<connects>
<connect gate="G$1" pin="ADCIN" pad="5"/>
<connect gate="G$1" pin="AGND" pad="9"/>
<connect gate="G$1" pin="BUSYN/SYNC" pad="22"/>
<connect gate="G$1" pin="CK" pad="19"/>
<connect gate="G$1" pin="CP" pad="10"/>
<connect gate="G$1" pin="CSN" pad="23"/>
<connect gate="G$1" pin="DGND" pad="21"/>
<connect gate="G$1" pin="EPAD" pad="29"/>
<connect gate="G$1" pin="FLAGN" pad="24"/>
<connect gate="G$1" pin="OSCIN" pad="7"/>
<connect gate="G$1" pin="OSCOUT" pad="8"/>
<connect gate="G$1" pin="OUT1A" pad="1"/>
<connect gate="G$1" pin="OUT1B" pad="14"/>
<connect gate="G$1" pin="OUT2A" pad="28"/>
<connect gate="G$1" pin="OUT2B" pad="15"/>
<connect gate="G$1" pin="PGNDA" pad="27"/>
<connect gate="G$1" pin="PGNDB" pad="13"/>
<connect gate="G$1" pin="SDI" pad="20"/>
<connect gate="G$1" pin="SDO" pad="18"/>
<connect gate="G$1" pin="STBYN/RESETN" pad="3"/>
<connect gate="G$1" pin="STCK" pad="25"/>
<connect gate="G$1" pin="SW" pad="4"/>
<connect gate="G$1" pin="VBOOT" pad="11"/>
<connect gate="G$1" pin="VDD" pad="17"/>
<connect gate="G$1" pin="VREG" pad="6"/>
<connect gate="G$1" pin="VSA" pad="2"/>
<connect gate="G$1" pin="VSA2" pad="26"/>
<connect gate="G$1" pin="VSB" pad="12"/>
<connect gate="G$1" pin="VSB2" pad="16"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-10648"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM2621">
<description>Step-up switching regulator IC</description>
<gates>
<gate name="G$1" symbol="LM2621" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="MSOP-8">
<connects>
<connect gate="G$1" pin="BOOT" pad="7"/>
<connect gate="G$1" pin="EN" pad="2"/>
<connect gate="G$1" pin="FB" pad="4"/>
<connect gate="G$1" pin="FREQ" pad="3"/>
<connect gate="G$1" pin="PGND" pad="1"/>
<connect gate="G$1" pin="SGND" pad="5"/>
<connect gate="G$1" pin="SW" pad="8"/>
<connect gate="G$1" pin="VDD" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM2931">
<description>LDO regulator with reverse battery protection- very durable!</description>
<gates>
<gate name="G$1" symbol="LM2931" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="ADJ" pad="4"/>
<connect gate="G$1" pin="GND@2" pad="2"/>
<connect gate="G$1" pin="GND@3" pad="3"/>
<connect gate="G$1" pin="GND@6" pad="6"/>
<connect gate="G$1" pin="GND@7" pad="7"/>
<connect gate="G$1" pin="IN" pad="8"/>
<connect gate="G$1" pin="INH" pad="5"/>
<connect gate="G$1" pin="OUT" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM2931_FIXED">
<description>LDO regulator with reverse battery protection- very durable!</description>
<gates>
<gate name="G$1" symbol="LM2931_FIXED" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DPAK">
<connects>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="VIN" pad="1"/>
<connect gate="G$1" pin="VOUT" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM3480IM4">
<description>Small package linear regulator</description>
<gates>
<gate name="G$1" symbol="LM3480IM4" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-3">
<connects>
<connect gate="G$1" pin="GND" pad="3"/>
<connect gate="G$1" pin="IN" pad="2"/>
<connect gate="G$1" pin="OUT" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM4128-2.5VREF">
<description>.1% accurate low-current voltage reference</description>
<gates>
<gate name="G$1" symbol="LM4128-2.5VREF" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="VIN" pad="4"/>
<connect gate="G$1" pin="VOUT" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM4871">
<description>3W audio amplifier</description>
<gates>
<gate name="G$1" symbol="LM4871" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="SO08">
<connects>
<connect gate="G$1" pin="BYPASS" pad="2"/>
<connect gate="G$1" pin="GND" pad="7"/>
<connect gate="G$1" pin="IN+" pad="3"/>
<connect gate="G$1" pin="IN-" pad="4"/>
<connect gate="G$1" pin="SHUTDWN" pad="1"/>
<connect gate="G$1" pin="V01" pad="5"/>
<connect gate="G$1" pin="V02" pad="8"/>
<connect gate="G$1" pin="VDD" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM5007" prefix="U">
<description>High Voltage (80V) Step-down switching regulator&lt;br&gt;

http://www.national.com/ds/LM/LM5007.pdf&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="LM5007" x="0" y="0"/>
</gates>
<devices>
<device name="" package="MSOP-8-EP">
<connects>
<connect gate="G$1" pin="BST" pad="2"/>
<connect gate="G$1" pin="EP" pad="EP"/>
<connect gate="G$1" pin="FB" pad="5"/>
<connect gate="G$1" pin="RCL" pad="3"/>
<connect gate="G$1" pin="RON" pad="6"/>
<connect gate="G$1" pin="RTN" pad="4"/>
<connect gate="G$1" pin="SW" pad="1"/>
<connect gate="G$1" pin="VCC" pad="7"/>
<connect gate="G$1" pin="VIN" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LM5574" prefix="U">
<description>Simple Switcher 75V, 0.5A Step-down switching regulator</description>
<gates>
<gate name="G$1" symbol="LM5574" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TSSOP-16">
<connects>
<connect gate="G$1" pin="AGND" pad="9"/>
<connect gate="G$1" pin="BST" pad="16"/>
<connect gate="G$1" pin="COMP" pad="5"/>
<connect gate="G$1" pin="FB" pad="6"/>
<connect gate="G$1" pin="IS" pad="13"/>
<connect gate="G$1" pin="OUT" pad="11"/>
<connect gate="G$1" pin="PGND" pad="12"/>
<connect gate="G$1" pin="PRE" pad="15"/>
<connect gate="G$1" pin="RAMP" pad="8"/>
<connect gate="G$1" pin="RT" pad="7"/>
<connect gate="G$1" pin="SD" pad="2"/>
<connect gate="G$1" pin="SS" pad="10"/>
<connect gate="G$1" pin="SW" pad="14"/>
<connect gate="G$1" pin="SYNC" pad="4"/>
<connect gate="G$1" pin="VCC" pad="1"/>
<connect gate="G$1" pin="VIN" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LMD1820X">
<description>LMD1820X H-Bridge - BOB-00747</description>
<gates>
<gate name="G$1" symbol="LMD1820X" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TO-220-11LEAD">
<connects>
<connect gate="G$1" pin="BRK" pad="4"/>
<connect gate="G$1" pin="BS1" pad="1"/>
<connect gate="G$1" pin="BS2" pad="11"/>
<connect gate="G$1" pin="DIR" pad="3"/>
<connect gate="G$1" pin="OUT1" pad="2"/>
<connect gate="G$1" pin="OUT2" pad="10"/>
<connect gate="G$1" pin="PGND" pad="7"/>
<connect gate="G$1" pin="PWM" pad="5"/>
<connect gate="G$1" pin="PWR" pad="6"/>
<connect gate="G$1" pin="SGND" pad="8"/>
<connect gate="G$1" pin="TF" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LMZ14203" prefix="U">
<description>3A, Simple Switcher Power Module with 42V Maximum Input</description>
<gates>
<gate name="G$1" symbol="LMZ14203" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TO-PMOD-7">
<connects>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="EP" pad="EP"/>
<connect gate="G$1" pin="FB" pad="6"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="RON" pad="2"/>
<connect gate="G$1" pin="SS" pad="5"/>
<connect gate="G$1" pin="VIN" pad="1"/>
<connect gate="G$1" pin="VOUT" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LT1528">
<description>High current voltage regulator commonly used with GM862 cellular module. Spark Fun Electronics SKU : COM-00311. Footprint may need to have the large paste aperature reduced.</description>
<gates>
<gate name="G$1" symbol="LT1528" x="10.16" y="-10.16"/>
</gates>
<devices>
<device name="" package="Q5-DD">
<connects>
<connect gate="G$1" pin="GND" pad="3"/>
<connect gate="G$1" pin="IN" pad="5"/>
<connect gate="G$1" pin="OUT" pad="1"/>
<connect gate="G$1" pin="SENSE" pad="2"/>
<connect gate="G$1" pin="SHDN" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LTC3588" prefix="U">
<description>Energy Harvesting Power Supply</description>
<gates>
<gate name="G$1" symbol="LTC3588" x="0" y="0"/>
</gates>
<devices>
<device name="_" package="MSOP-10-GNDPAD">
<connects>
<connect gate="G$1" pin="CAP" pad="3"/>
<connect gate="G$1" pin="D0" pad="9"/>
<connect gate="G$1" pin="D1" pad="8"/>
<connect gate="G$1" pin="GND" pad="GND"/>
<connect gate="G$1" pin="PGOOD" pad="10"/>
<connect gate="G$1" pin="PZ1" pad="1"/>
<connect gate="G$1" pin="PZ2" pad="2"/>
<connect gate="G$1" pin="SW" pad="5"/>
<connect gate="G$1" pin="VIN" pad="4"/>
<connect gate="G$1" pin="VIN2" pad="7"/>
<connect gate="G$1" pin="VOUT" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MAX1555" prefix="U">
<description>&lt;b&gt;MAX1555 Lithium Charger IC&lt;/b&gt;
SOT-23 Lithium Polymer charging IC. Schematic element and footprint proven. Spark Fun Electronics SKU : COM-00674</description>
<gates>
<gate name="G$1" symbol="MAX1555" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="BATT" pad="5"/>
<connect gate="G$1" pin="CHG" pad="3"/>
<connect gate="G$1" pin="DC" pad="4"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="USB" pad="1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MAX1704X" prefix="U">
<description>MAX17043/MAX17044: Battery Fuel Guage (43 is 1cell, 44 is 2cell)</description>
<gates>
<gate name="G$1" symbol="MAX1704X" x="0" y="0"/>
</gates>
<devices>
<device name="" package="TDFN-8">
<connects>
<connect gate="G$1" pin="ALT" pad="5"/>
<connect gate="G$1" pin="CELL" pad="2"/>
<connect gate="G$1" pin="CTG" pad="1"/>
<connect gate="G$1" pin="GND@4" pad="4"/>
<connect gate="G$1" pin="GND@EP" pad="EP"/>
<connect gate="G$1" pin="QST" pad="6"/>
<connect gate="G$1" pin="SCL" pad="7"/>
<connect gate="G$1" pin="SDA" pad="8"/>
<connect gate="G$1" pin="VDD" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MAX98300" prefix="U" uservalue="yes">
<description>&lt;b&gt;Mono 2.6W Class D Amplifier&lt;/b&gt;&lt;p&gt;

Datasheet: &lt;a href="http://datasheets.maxim-ic.com/en/ds/MAX98300.pdf"&gt;http://datasheets.maxim-ic.com/en/ds/MAX98300.pdf&lt;/a&gt;&lt;p&gt;

The MAX98300 mono 2.6W Class D amplifier provides
Class AB audio performance with Class D efficiency.
This device offers five selectable gain settings (0dB,
3dB, 6dB, 9dB, and 12dB) set by a single gain-select
input (GAIN).
Active emissions-limiting edge-rate and overshoot control
circuitry greatly reduces EMI. A patented filterless
spread-spectrum modulation scheme eliminates the need
for output filtering found in traditional Class D devices.
These features reduce application component count.
The MAX98300 industry-leading 0.78mA at 3.7V (1.1mA
at 5V) quiescent current extends battery life in portable
applications.
The MAX98300 is available in an 8-pin TDFN-EP (2mm
x 2mm x 0.8mm) and a 9-bump (1.2mm x 1.2mm) WLP.
Both packages are specified over the extended -40NC to
+85NC temperature range.</description>
<gates>
<gate name="G$1" symbol="MAX98300" x="0" y="0"/>
</gates>
<devices>
<device name="ETA+" package="8-TDFN-EP">
<connects>
<connect gate="G$1" pin="GAIN" pad="4"/>
<connect gate="G$1" pin="GND@1" pad="5"/>
<connect gate="G$1" pin="GND@2" pad="9"/>
<connect gate="G$1" pin="IN+" pad="1"/>
<connect gate="G$1" pin="IN-" pad="2"/>
<connect gate="G$1" pin="OUT+" pad="7"/>
<connect gate="G$1" pin="OUT-" pad="6"/>
<connect gate="G$1" pin="SHDN" pad="3"/>
<connect gate="G$1" pin="VDD" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MAX98306" prefix="U">
<description>&lt;b&gt;Stereo 3.7W Class D Amplifier&lt;/b&gt;&lt;p&gt;

Datasheet: &lt;a href="http://datasheets.maxim-ic.com/en/ds/MAX98306.pdf"&gt;http://datasheets.maxim-ic.com/en/ds/MAX98306.pdf&lt;/a&gt;&lt;p&gt;

The MAX98306 stereo 3.7W Class D amplifier provides
Class AB audio performance with Class D efficiency.
This device offers five selectable gain settings (6dB,
9dB, 12dB, 15dB, and 18dB) set by a single gain-select
input (GAIN).
Active emissions limiting, edge-rate, and overshoot control
circuitry combined with a filterless spread-spectrum
modulation scheme (SSM) provide excellent EMI performance
while eliminating the need for output filtering found
in traditional Class D devices. These features reduce
application component count.
The IC's 2.0mA quiescent current with a 3.7V supply
extends battery life in portable applications.
The IC is available in a 14-pin TDFN (3mm x 3mm x
0.75mm) package specified over the extended -40NC to
+85NC temperature range.</description>
<gates>
<gate name="G$1" symbol="MAX98306" x="0" y="0"/>
</gates>
<devices>
<device name="ETD+" package="14-TDFN">
<connects>
<connect gate="G$1" pin="GAIN" pad="5"/>
<connect gate="G$1" pin="GND@1" pad="1"/>
<connect gate="G$1" pin="GND@2" pad="8"/>
<connect gate="G$1" pin="GND@3" pad="15"/>
<connect gate="G$1" pin="INL+" pad="3"/>
<connect gate="G$1" pin="INL-" pad="4"/>
<connect gate="G$1" pin="INR+" pad="7"/>
<connect gate="G$1" pin="INR-" pad="6"/>
<connect gate="G$1" pin="OUTL+" pad="13"/>
<connect gate="G$1" pin="OUTL-" pad="14"/>
<connect gate="G$1" pin="OUTR+" pad="10"/>
<connect gate="G$1" pin="OUTR-" pad="9"/>
<connect gate="G$1" pin="SHDN" pad="2"/>
<connect gate="G$1" pin="VDD@1" pad="11"/>
<connect gate="G$1" pin="VDD@2" pad="12"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MC34063" prefix="U">
<description>Jellybean switching supply controller</description>
<gates>
<gate name="G$1" symbol="MC34063" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SO08">
<connects>
<connect gate="G$1" pin="COMP" pad="5"/>
<connect gate="G$1" pin="DVR" pad="8"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="SEN" pad="7"/>
<connect gate="G$1" pin="SWC" pad="1"/>
<connect gate="G$1" pin="SWE" pad="2"/>
<connect gate="G$1" pin="TC" pad="3"/>
<connect gate="G$1" pin="VCC" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="DIP" package="DIP-08">
<connects>
<connect gate="G$1" pin="COMP" pad="5"/>
<connect gate="G$1" pin="DVR" pad="8"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="SEN" pad="7"/>
<connect gate="G$1" pin="SWC" pad="1"/>
<connect gate="G$1" pin="SWE" pad="2"/>
<connect gate="G$1" pin="TC" pad="3"/>
<connect gate="G$1" pin="VCC" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MCP7384XX" prefix="U">
<description>Li-Ion charge controller family from Microchip</description>
<gates>
<gate name="G$1" symbol="MCP73842" x="-2.54" y="2.54"/>
</gates>
<devices>
<device name="" package="MSOP8">
<connects>
<connect gate="G$1" pin="DRV" pad="8"/>
<connect gate="G$1" pin="EN" pad="4"/>
<connect gate="G$1" pin="SENSE" pad="1"/>
<connect gate="G$1" pin="STAT1" pad="3"/>
<connect gate="G$1" pin="TIMER" pad="5"/>
<connect gate="G$1" pin="VBAT" pad="7"/>
<connect gate="G$1" pin="VDD" pad="2"/>
<connect gate="G$1" pin="VSS" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MCP73831" prefix="U">
<description>Miniature single cell, fully integrated Li-Ion, Li-polymer charge management controller&lt;br&gt;
http://ww1.microchip.com/downloads/en/DeviceDoc/21984a.pdf&lt;br&gt;
IC-09995</description>
<gates>
<gate name="G$1" symbol="MCP73831" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="PROG" pad="5"/>
<connect gate="G$1" pin="STAT" pad="1"/>
<connect gate="G$1" pin="VBAT" pad="3"/>
<connect gate="G$1" pin="VIN" pad="4"/>
<connect gate="G$1" pin="VSS" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-09995"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MCP73833" prefix="U">
<description>Stand-alone Linear Li-ion/Li-polymer Charge Management Controller&lt;br&gt;
Packages: DFN-10, MSOP-10&lt;br&gt;
&lt;br&gt;
Last modified: 8/17/10&lt;br&gt;
&lt;b&gt;Unproven!&lt;/b&gt;</description>
<gates>
<gate name="G$1" symbol="MCP73833" x="0" y="0"/>
</gates>
<devices>
<device name="" package="MSOP-10">
<connects>
<connect gate="G$1" pin="PROG" pad="6"/>
<connect gate="G$1" pin="STAT1" pad="3"/>
<connect gate="G$1" pin="STAT2" pad="4"/>
<connect gate="G$1" pin="THERM" pad="8"/>
<connect gate="G$1" pin="VBAT@1" pad="9"/>
<connect gate="G$1" pin="VBAT@2" pad="10"/>
<connect gate="G$1" pin="VDD@1" pad="1"/>
<connect gate="G$1" pin="VDD@2" pad="2"/>
<connect gate="G$1" pin="VSS" pad="5"/>
<connect gate="G$1" pin="~PG" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MIC2571" prefix="U">
<description>Single Cell Switching Regulator - MIC2571</description>
<gates>
<gate name="G$1" symbol="MIC2571-1" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="MSOP-8">
<connects>
<connect gate="G$1" pin="2.85V" pad="6"/>
<connect gate="G$1" pin="3.3V" pad="5"/>
<connect gate="G$1" pin="5V" pad="4"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="8"/>
<connect gate="G$1" pin="SW" pad="1"/>
<connect gate="G$1" pin="SYNC" pad="7"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="NJM2670">
<description>Dual H-bridge driver</description>
<gates>
<gate name="G$1" symbol="NJM2670" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SO-24W">
<connects>
<connect gate="G$1" pin="ENABLEA" pad="3"/>
<connect gate="G$1" pin="ENABLEB" pad="9"/>
<connect gate="G$1" pin="GND@1" pad="6"/>
<connect gate="G$1" pin="GND@2" pad="7"/>
<connect gate="G$1" pin="GND@3" pad="18"/>
<connect gate="G$1" pin="GND@4" pad="19"/>
<connect gate="G$1" pin="INA1" pad="2"/>
<connect gate="G$1" pin="INA2" pad="22"/>
<connect gate="G$1" pin="INB1" pad="8"/>
<connect gate="G$1" pin="INB2" pad="17"/>
<connect gate="G$1" pin="NC@1" pad="4"/>
<connect gate="G$1" pin="NC@2" pad="10"/>
<connect gate="G$1" pin="NC@3" pad="15"/>
<connect gate="G$1" pin="NC@4" pad="21"/>
<connect gate="G$1" pin="OUTA1" pad="5"/>
<connect gate="G$1" pin="OUTA2" pad="20"/>
<connect gate="G$1" pin="OUTB1" pad="11"/>
<connect gate="G$1" pin="OUTB2" pad="14"/>
<connect gate="G$1" pin="SENSEA" pad="1"/>
<connect gate="G$1" pin="SENSEB" pad="12"/>
<connect gate="G$1" pin="TSDARM" pad="16"/>
<connect gate="G$1" pin="VCC" pad="23"/>
<connect gate="G$1" pin="VSA" pad="24"/>
<connect gate="G$1" pin="VSB" pad="13"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="PQ1CY1032Z">
<description>3.5A Switching Regulator</description>
<gates>
<gate name="G$1" symbol="PQ1CY1032Z" x="0" y="0"/>
</gates>
<devices>
<device name="" package="Q5-DD_SPX29300">
<connects>
<connect gate="G$1" pin="ADJ" pad="4"/>
<connect gate="G$1" pin="GND" pad="3"/>
<connect gate="G$1" pin="VIN" pad="1"/>
<connect gate="G$1" pin="VOUT" pad="2"/>
<connect gate="G$1" pin="VS" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="PTC" prefix="F">
<description>&lt;b&gt;Resettable Fuse PTC&lt;/b&gt;
Resettable Fuse. Spark Fun Electronics SKU : COM-08357</description>
<gates>
<gate name="G$1" symbol="PTC" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="PTC">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="PTC-1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-11150"/>
</technology>
</technologies>
</device>
<device name="0603" package="0603">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="SPX29302">
<description>3A LDO regulator</description>
<gates>
<gate name="G$1" symbol="SPX29300" x="-7.62" y="0"/>
</gates>
<devices>
<device name="" package="Q5-DD_SPX29300">
<connects>
<connect gate="G$1" pin="ADJUST" pad="5"/>
<connect gate="G$1" pin="ENABLE" pad="1"/>
<connect gate="G$1" pin="GND@0" pad="6"/>
<connect gate="G$1" pin="GND@1" pad="3"/>
<connect gate="G$1" pin="VIN" pad="2"/>
<connect gate="G$1" pin="VOUT" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="STA540">
<description>Multiwatt package for L298 bridge driver</description>
<gates>
<gate name="G$1" symbol="STA540" x="0" y="0"/>
</gates>
<devices>
<device name="" package="MULTIWATT15">
<connects>
<connect gate="G$1" pin="DIAG" pad="10"/>
<connect gate="G$1" pin="IN1" pad="4"/>
<connect gate="G$1" pin="IN2" pad="5"/>
<connect gate="G$1" pin="IN3" pad="12"/>
<connect gate="G$1" pin="IN4" pad="11"/>
<connect gate="G$1" pin="OUT1" pad="1"/>
<connect gate="G$1" pin="OUT2" pad="2"/>
<connect gate="G$1" pin="OUT3" pad="15"/>
<connect gate="G$1" pin="OUT4" pad="14"/>
<connect gate="G$1" pin="P-GND" pad="8"/>
<connect gate="G$1" pin="S-GND" pad="9"/>
<connect gate="G$1" pin="STBY" pad="7"/>
<connect gate="G$1" pin="SVR" pad="6"/>
<connect gate="G$1" pin="VCC1" pad="3"/>
<connect gate="G$1" pin="VCC2" pad="13"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="W/6400BG_HEATSINK" package="MULTIWATT15_6400BGHEATSINK">
<connects>
<connect gate="G$1" pin="DIAG" pad="10"/>
<connect gate="G$1" pin="IN1" pad="4"/>
<connect gate="G$1" pin="IN2" pad="5"/>
<connect gate="G$1" pin="IN3" pad="12"/>
<connect gate="G$1" pin="IN4" pad="11"/>
<connect gate="G$1" pin="OUT1" pad="1"/>
<connect gate="G$1" pin="OUT2" pad="2"/>
<connect gate="G$1" pin="OUT3" pad="15"/>
<connect gate="G$1" pin="OUT4" pad="14"/>
<connect gate="G$1" pin="P-GND" pad="8"/>
<connect gate="G$1" pin="S-GND" pad="9"/>
<connect gate="G$1" pin="STBY" pad="7"/>
<connect gate="G$1" pin="SVR" pad="6"/>
<connect gate="G$1" pin="VCC1" pad="3"/>
<connect gate="G$1" pin="VCC2" pad="13"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="W/YB324G_HEATSINK" package="MULTIWATT15_YB324GHEATSINK">
<connects>
<connect gate="G$1" pin="DIAG" pad="10"/>
<connect gate="G$1" pin="IN1" pad="4"/>
<connect gate="G$1" pin="IN2" pad="5"/>
<connect gate="G$1" pin="IN3" pad="12"/>
<connect gate="G$1" pin="IN4" pad="11"/>
<connect gate="G$1" pin="OUT1" pad="1"/>
<connect gate="G$1" pin="OUT2" pad="2"/>
<connect gate="G$1" pin="OUT3" pad="15"/>
<connect gate="G$1" pin="OUT4" pad="14"/>
<connect gate="G$1" pin="P-GND" pad="8"/>
<connect gate="G$1" pin="S-GND" pad="9"/>
<connect gate="G$1" pin="STBY" pad="7"/>
<connect gate="G$1" pin="SVR" pad="6"/>
<connect gate="G$1" pin="VCC1" pad="3"/>
<connect gate="G$1" pin="VCC2" pad="13"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="6400BG_W/SOLDERPOSTS" package="MULTIWATT15_6400BGHEATSINK_2">
<connects>
<connect gate="G$1" pin="DIAG" pad="10"/>
<connect gate="G$1" pin="IN1" pad="4"/>
<connect gate="G$1" pin="IN2" pad="5"/>
<connect gate="G$1" pin="IN3" pad="12"/>
<connect gate="G$1" pin="IN4" pad="11"/>
<connect gate="G$1" pin="OUT1" pad="1"/>
<connect gate="G$1" pin="OUT2" pad="2"/>
<connect gate="G$1" pin="OUT3" pad="15"/>
<connect gate="G$1" pin="OUT4" pad="14"/>
<connect gate="G$1" pin="P-GND" pad="8"/>
<connect gate="G$1" pin="S-GND" pad="9"/>
<connect gate="G$1" pin="STBY" pad="7"/>
<connect gate="G$1" pin="SVR" pad="6"/>
<connect gate="G$1" pin="VCC1" pad="3"/>
<connect gate="G$1" pin="VCC2" pad="13"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TB6621FNG" prefix="U" uservalue="yes">
<description>Toshiba 1A dual motor driver&lt;br&gt;
IC-09363</description>
<gates>
<gate name="G$1" symbol="TB6612FNG" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SSOP24">
<connects>
<connect gate="G$1" pin="A01@1" pad="1"/>
<connect gate="G$1" pin="A01@2" pad="2"/>
<connect gate="G$1" pin="A02@5" pad="5"/>
<connect gate="G$1" pin="A02@6" pad="6"/>
<connect gate="G$1" pin="AIN1" pad="21"/>
<connect gate="G$1" pin="AIN2" pad="22"/>
<connect gate="G$1" pin="B01@11" pad="11"/>
<connect gate="G$1" pin="B01@12" pad="12"/>
<connect gate="G$1" pin="B02@7" pad="7"/>
<connect gate="G$1" pin="B02@8" pad="8"/>
<connect gate="G$1" pin="BIN1" pad="17"/>
<connect gate="G$1" pin="BIN2" pad="16"/>
<connect gate="G$1" pin="GND" pad="18"/>
<connect gate="G$1" pin="PGND1@3" pad="3"/>
<connect gate="G$1" pin="PGND1@4" pad="4"/>
<connect gate="G$1" pin="PGND2@10" pad="10"/>
<connect gate="G$1" pin="PGND2@9" pad="9"/>
<connect gate="G$1" pin="PWMA" pad="23"/>
<connect gate="G$1" pin="PWMB" pad="15"/>
<connect gate="G$1" pin="STBY" pad="19"/>
<connect gate="G$1" pin="VCC" pad="20"/>
<connect gate="G$1" pin="VM1" pad="24"/>
<connect gate="G$1" pin="VM2" pad="13"/>
<connect gate="G$1" pin="VM3" pad="14"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-09363"/>
<attribute name="VALUE" value="TB6612FNG" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TPS6211*" prefix="U">
<description>TPS62112: 1.5A Step-Down Converter</description>
<gates>
<gate name="G$1" symbol="TPS6211*" x="0" y="0"/>
</gates>
<devices>
<device name="" package="QFN16-4X4">
<connects>
<connect gate="G$1" pin="AGND" pad="9"/>
<connect gate="G$1" pin="EN" pad="4"/>
<connect gate="G$1" pin="FB" pad="10"/>
<connect gate="G$1" pin="GND@1" pad="11"/>
<connect gate="G$1" pin="GND@2" pad="12"/>
<connect gate="G$1" pin="LBI" pad="7"/>
<connect gate="G$1" pin="LBO" pad="6"/>
<connect gate="G$1" pin="PG" pad="13"/>
<connect gate="G$1" pin="PGND@1" pad="1"/>
<connect gate="G$1" pin="PGND@2" pad="16"/>
<connect gate="G$1" pin="PWPD" pad="EXP"/>
<connect gate="G$1" pin="SW@1" pad="14"/>
<connect gate="G$1" pin="SW@2" pad="15"/>
<connect gate="G$1" pin="SYNC" pad="5"/>
<connect gate="G$1" pin="VIN@1" pad="2"/>
<connect gate="G$1" pin="VIN@2" pad="3"/>
<connect gate="G$1" pin="VINA" pad="8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TPS61200" prefix="U">
<description>DC to DC Booster&lt;br&gt;
IC-10035</description>
<gates>
<gate name="G$1" symbol="TPS61200" x="0" y="0"/>
</gates>
<devices>
<device name="" package="QFN-10_PAD">
<connects>
<connect gate="G$1" pin="EN" pad="6"/>
<connect gate="G$1" pin="FB" pad="10"/>
<connect gate="G$1" pin="GND" pad="9"/>
<connect gate="G$1" pin="L" pad="3"/>
<connect gate="G$1" pin="PAD@1" pad="15"/>
<connect gate="G$1" pin="PAD@2" pad="11"/>
<connect gate="G$1" pin="PAD@3" pad="12"/>
<connect gate="G$1" pin="PAD@4" pad="13"/>
<connect gate="G$1" pin="PAD@5" pad="14"/>
<connect gate="G$1" pin="PGND" pad="4"/>
<connect gate="G$1" pin="PS" pad="8"/>
<connect gate="G$1" pin="UVLO" pad="7"/>
<connect gate="G$1" pin="VAUX" pad="1"/>
<connect gate="G$1" pin="VIN" pad="5"/>
<connect gate="G$1" pin="VOUT" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-10035"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRANSFORMER">
<description>Small transformers</description>
<gates>
<gate name="G$1" symbol="TRANSFORMER" x="0" y="0"/>
</gates>
<devices>
<device name="PTH" package="TRANSFORMER">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="TRANSFORMER_SMD">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="3"/>
<connect gate="G$1" pin="3" pad="4"/>
<connect gate="G$1" pin="4" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ULN2803" prefix="ULN2803" uservalue="yes">
<description>&lt;b&gt;Darlington Driver&lt;/b&gt;
ULN2803 Darlington array. 500mA max per channel, 8-channel package. Spark Fun Electronics SKU : COM-00312</description>
<gates>
<gate name="G$1" symbol="ULN2803" x="0" y="0"/>
</gates>
<devices>
<device name="DIP" package="DIL18">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="17" pad="17"/>
<connect gate="G$1" pin="18" pad="18"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SOIC" package="SO018">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="17" pad="17"/>
<connect gate="G$1" pin="18" pad="18"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SOICW" package="SO18L">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="10" pad="10"/>
<connect gate="G$1" pin="11" pad="11"/>
<connect gate="G$1" pin="12" pad="12"/>
<connect gate="G$1" pin="13" pad="13"/>
<connect gate="G$1" pin="14" pad="14"/>
<connect gate="G$1" pin="15" pad="15"/>
<connect gate="G$1" pin="16" pad="16"/>
<connect gate="G$1" pin="17" pad="17"/>
<connect gate="G$1" pin="18" pad="18"/>
<connect gate="G$1" pin="2" pad="2"/>
<connect gate="G$1" pin="3" pad="3"/>
<connect gate="G$1" pin="4" pad="4"/>
<connect gate="G$1" pin="5" pad="5"/>
<connect gate="G$1" pin="6" pad="6"/>
<connect gate="G$1" pin="7" pad="7"/>
<connect gate="G$1" pin="8" pad="8"/>
<connect gate="G$1" pin="9" pad="9"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="VNH2SP30">
<description>30A motor driver IC</description>
<gates>
<gate name="G$1" symbol="VNH2SP30" x="0" y="0"/>
</gates>
<devices>
<device name="" package="VNH2SP30">
<connects>
<connect gate="G$1" pin="CS" pad="9"/>
<connect gate="G$1" pin="EN/DIAA" pad="6"/>
<connect gate="G$1" pin="EN/DIAB" pad="10"/>
<connect gate="G$1" pin="GNDA@26" pad="26"/>
<connect gate="G$1" pin="GNDA@27" pad="27"/>
<connect gate="G$1" pin="GNDA@28" pad="28"/>
<connect gate="G$1" pin="GNDB@18" pad="18"/>
<connect gate="G$1" pin="GNDB@19" pad="19"/>
<connect gate="G$1" pin="GNDB@20" pad="20"/>
<connect gate="G$1" pin="INA" pad="5"/>
<connect gate="G$1" pin="INB" pad="11"/>
<connect gate="G$1" pin="OUTA@1" pad="1"/>
<connect gate="G$1" pin="OUTA@25" pad="25"/>
<connect gate="G$1" pin="OUTA@30" pad="30"/>
<connect gate="G$1" pin="OUTA@SLUG3" pad="SLUG3"/>
<connect gate="G$1" pin="OUTB@15" pad="15"/>
<connect gate="G$1" pin="OUTB@16" pad="16"/>
<connect gate="G$1" pin="OUTB@21" pad="21"/>
<connect gate="G$1" pin="OUTB@SLUG2" pad="SLUG2"/>
<connect gate="G$1" pin="PWM" pad="8"/>
<connect gate="G$1" pin="VCC@13" pad="13"/>
<connect gate="G$1" pin="VCC@23" pad="23"/>
<connect gate="G$1" pin="VCC@3" pad="3"/>
<connect gate="G$1" pin="VCC@SLUG1" pad="SLUG1"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_78XX" prefix="IC" uservalue="yes">
<description>&lt;b&gt;Voltage Regulator&lt;/b&gt;
Standard 7805 5V regulator. IGO (Input Ground Output). Spark Fun Electronics SKU : COM-00107</description>
<gates>
<gate name="G$1" symbol="78XX" x="0" y="0"/>
</gates>
<devices>
<device name="SIDE" package="78XXL">
<connects>
<connect gate="G$1" pin="GND" pad="GND"/>
<connect gate="G$1" pin="IN" pad="IN"/>
<connect gate="G$1" pin="OUT" pad="OUT"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SINK" package="TO220-IGO">
<connects>
<connect gate="G$1" pin="GND" pad="GND"/>
<connect gate="G$1" pin="IN" pad="IN"/>
<connect gate="G$1" pin="OUT" pad="OUT"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="TO-92_UNTESTED" package="TO-92">
<connects>
<connect gate="G$1" pin="GND" pad="1"/>
<connect gate="G$1" pin="IN" pad="2"/>
<connect gate="G$1" pin="OUT" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="-TO-220" package="TO-220-ALT">
<connects>
<connect gate="G$1" pin="GND" pad="GND"/>
<connect gate="G$1" pin="IN" pad="IN"/>
<connect gate="G$1" pin="OUT" pad="OUT"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_317" prefix="U">
<description>&lt;b&gt;Voltage Regulator&lt;/b&gt;
Standard LM317 adjustable voltage regulator. AOI (Adjust Output Input). Google 'LM317 Calculator' for easy to use app to get the two resistor values needed. 240/720 for 5V output. 240/390 for 3.3V output. Spark Fun Electronics SKU : COM-00527</description>
<gates>
<gate name="G$1" symbol="78ADJ-2" x="0" y="0"/>
</gates>
<devices>
<device name="SINK" package="TO220-ADJ">
<connects>
<connect gate="G$1" pin="ADJ" pad="ADJ"/>
<connect gate="G$1" pin="IN" pad="IN"/>
<connect gate="G$1" pin="OUT" pad="OUT"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD" package="SOT223">
<connects>
<connect gate="G$1" pin="ADJ" pad="1"/>
<connect gate="G$1" pin="IN" pad="3"/>
<connect gate="G$1" pin="OUT" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="DPACK" package="V-REG_DPACK">
<connects>
<connect gate="G$1" pin="ADJ" pad="1"/>
<connect gate="G$1" pin="IN" pad="3"/>
<connect gate="G$1" pin="OUT" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_LD1085" prefix="U">
<description>&lt;h3&gt;LD1085 3A low-drop positive voltage regulator, adjustable&lt;/h3&gt;

The LD1085xx is a low drop voltage regulator able to provide up to 3 A of output current. Dropout is guaranteed at a maximum of 1.2 V at the maximum output current, decreasing at lower loads. The LD1085xx is pin to pin compatible with the older 3-terminal adjustable regulators, but has better performances in term of drop and output tolerance.&lt;br&gt;
&lt;br&gt;
&lt;B&gt;Available Packages&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;D&lt;sup&gt;2&lt;/sup&gt;PAK/A - 3-pin w/ tabs, SMD</description>
<gates>
<gate name="G$1" symbol="78ADJ" x="0" y="0"/>
</gates>
<devices>
<device name="D2" package="D2PACK/A">
<connects>
<connect gate="G$1" pin="ADJ" pad="1"/>
<connect gate="G$1" pin="IN" pad="3"/>
<connect gate="G$1" pin="OUT" pad="2"/>
<connect gate="G$1" pin="OUT@1" pad="TAB"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_LD1117VXX">
<description>LD1117VXX voltage regulator. We carry the 3.3V version (COM-00526) in TO-220 package.</description>
<gates>
<gate name="G$1" symbol="78XX" x="0" y="0"/>
</gates>
<devices>
<device name="" package="78XXL">
<connects>
<connect gate="G$1" pin="GND" pad="IN"/>
<connect gate="G$1" pin="IN" pad="OUT"/>
<connect gate="G$1" pin="OUT" pad="GND"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_LDO" prefix="U">
<description>&lt;b&gt;Voltage Regulator LDO&lt;/b&gt;
Standard 150mA LDO voltage regulator in SOT-23 layout. Micrel part MIC5205. BP (by-pass) pin is used to lower output noise with 470pF cap.</description>
<gates>
<gate name="G$1" symbol="V-REG-LDO" x="2.54" y="0"/>
</gates>
<devices>
<device name="SMD" package="SOT23-5">
<connects>
<connect gate="G$1" pin="BP" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="SMD2" package="SC70">
<connects>
<connect gate="G$1" pin="BP" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_LM1117" prefix="IC" uservalue="yes">
<description>&lt;b&gt;Voltage Regulator LM1117&lt;/b&gt;
Standard adjustable voltage regulator but in SMD form. Spark Fun Electronics SKU : COM-00595</description>
<gates>
<gate name="G$1" symbol="78ADJ" x="0" y="0"/>
</gates>
<devices>
<device name="SOT223" package="SOT223">
<connects>
<connect gate="G$1" pin="ADJ" pad="1"/>
<connect gate="G$1" pin="IN" pad="3"/>
<connect gate="G$1" pin="OUT" pad="2"/>
<connect gate="G$1" pin="OUT@1" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_MC33269" prefix="U">
<gates>
<gate name="G$1" symbol="78XX" x="0" y="0"/>
</gates>
<devices>
<device name="DT" package="DPAK">
<connects>
<connect gate="G$1" pin="GND" pad="1"/>
<connect gate="G$1" pin="IN" pad="3"/>
<connect gate="G$1" pin="OUT" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_MIC2920">
<description>MIC2920A (http://www.micrel.com/_PDF/mic2920.pdf) - 400mA output LDO Regulator</description>
<gates>
<gate name="G$1" symbol="78XX" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT223">
<connects>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_MIC5219" prefix="U" uservalue="yes">
<description>&lt;b&gt;V_REG MIC5219&lt;/b&gt;
Standard 500mA LDO voltage regulator in SOT-23 layout. Micrel part MIC5219. BP (by-pass) pin is used to lower output noise with 470pF cap,
may be left open.</description>
<gates>
<gate name="G$1" symbol="V-REG-LDO" x="2.54" y="0"/>
</gates>
<devices>
<device name="3.3V" package="SOT23-5">
<connects>
<connect gate="G$1" pin="BP" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="VREG-09872"/>
<attribute name="VALUE" value="MIC5219 3.3V" constant="no"/>
</technology>
</technologies>
</device>
<device name="5V" package="SOT23-5">
<connects>
<connect gate="G$1" pin="BP" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="VREG-10107"/>
<attribute name="VALUE" value="MIC5219 5V" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_MIC5235" prefix="U">
<gates>
<gate name="G$1" symbol="V-REG-LDO-ADJ" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="ADJ" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_NCP50X" prefix="U">
<description>NCP550x 500mA LDO Voltage Regulator</description>
<gates>
<gate name="G$1" symbol="78ADJ-3" x="0" y="0"/>
</gates>
<devices>
<device name="" package="DPAK-5">
<connects>
<connect gate="G$1" pin="ADJ" pad="ADJ"/>
<connect gate="G$1" pin="EN" pad="EN"/>
<connect gate="G$1" pin="GND" pad="GND"/>
<connect gate="G$1" pin="IN" pad="VIN"/>
<connect gate="G$1" pin="OUT" pad="VOUT"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_NCP1400" prefix="IC" uservalue="yes">
<description>&lt;b&gt;Switching step-up voltage regulator&lt;/b&gt;
NCP1400 switiching regulator takes single cell AA and outputs 100mA at 3.3V or 5V with minimal number of external components.</description>
<gates>
<gate name="G$1" symbol="NCP1400" x="0" y="0"/>
</gates>
<devices>
<device name="SOT23-5" package="SOT23-5">
<connects>
<connect gate="G$1" pin="EN" pad="1"/>
<connect gate="G$1" pin="GND" pad="4"/>
<connect gate="G$1" pin="LX" pad="5"/>
<connect gate="G$1" pin="NC" pad="3"/>
<connect gate="G$1" pin="OUT" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_TPS61040">
<gates>
<gate name="G$1" symbol="TPS61040" x="0" y="0"/>
</gates>
<devices>
<device name="SMD" package="SOT23-5">
<connects>
<connect gate="G$1" pin="EN" pad="4"/>
<connect gate="G$1" pin="FB" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="SW" pad="1"/>
<connect gate="G$1" pin="VIN" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_TPS76433" prefix="IC" uservalue="yes">
<description>&lt;b&gt;Voltage Regulator&lt;/b&gt;
Older TI part. LDO 150mA regulator. No output by-pass cap option. See V_REG_LDO for a better part.</description>
<gates>
<gate name="G$1" symbol="TPS76433DBVT" x="7.62" y="5.08"/>
</gates>
<devices>
<device name="SOT23-5" package="SOT23-5">
<connects>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="NC" pad="4"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ZXLD1360">
<description>Adjustable constant current switching driver for high-power LEDs</description>
<gates>
<gate name="G$1" symbol="ZXLD1360" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="ADJ" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="LX" pad="1"/>
<connect gate="G$1" pin="SENSE" pad="4"/>
<connect gate="G$1" pin="VIN" pad="5"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="A4983" prefix="U">
<description>DMOS Microstepping Driver with Translator ----------------

2/4/2013 - 1:1 variant has an imported .bmp image of the chip. The pads have been rounded and shifted so as to better fit this particular QFN package of this chip. The stencil layer has also been altered so that there is less paste under the IC. This is the package to use on all boards!</description>
<gates>
<gate name="G$1" symbol="A4983" x="0" y="0"/>
</gates>
<devices>
<device name="REGULAR" package="QFN-28-5MM">
<connects>
<connect gate="G$1" pin="CP1" pad="P$4"/>
<connect gate="G$1" pin="CP2" pad="P$5"/>
<connect gate="G$1" pin="DIR" pad="P$19"/>
<connect gate="G$1" pin="ENABLE" pad="P$2"/>
<connect gate="G$1" pin="GND@1" pad="P$3"/>
<connect gate="G$1" pin="GND@2" pad="P$18"/>
<connect gate="G$1" pin="GND_PAD" pad="P$29"/>
<connect gate="G$1" pin="MS1" pad="P$9"/>
<connect gate="G$1" pin="MS2" pad="P$10"/>
<connect gate="G$1" pin="MS3" pad="P$11"/>
<connect gate="G$1" pin="NC@1" pad="P$7"/>
<connect gate="G$1" pin="NC@2" pad="P$20"/>
<connect gate="G$1" pin="NC@3" pad="P$25"/>
<connect gate="G$1" pin="OUT1A" pad="P$24"/>
<connect gate="G$1" pin="OUT1B" pad="P$21"/>
<connect gate="G$1" pin="OUT2A" pad="P$26"/>
<connect gate="G$1" pin="OUT2B" pad="P$1"/>
<connect gate="G$1" pin="REF" pad="P$17"/>
<connect gate="G$1" pin="RESET" pad="P$12"/>
<connect gate="G$1" pin="ROSC" pad="P$13"/>
<connect gate="G$1" pin="SENSE1" pad="P$23"/>
<connect gate="G$1" pin="SENSE2" pad="P$27"/>
<connect gate="G$1" pin="SLEEP" pad="P$14"/>
<connect gate="G$1" pin="STEP" pad="P$16"/>
<connect gate="G$1" pin="VBB1" pad="P$22"/>
<connect gate="G$1" pin="VBB2" pad="P$28"/>
<connect gate="G$1" pin="VCP" pad="P$6"/>
<connect gate="G$1" pin="VDD" pad="P$15"/>
<connect gate="G$1" pin="VREG" pad="P$8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="1:1" package="QFN-28-5MM-1:1">
<connects>
<connect gate="G$1" pin="CP1" pad="P$4"/>
<connect gate="G$1" pin="CP2" pad="P$5"/>
<connect gate="G$1" pin="DIR" pad="P$19"/>
<connect gate="G$1" pin="ENABLE" pad="P$2"/>
<connect gate="G$1" pin="GND@1" pad="P$3"/>
<connect gate="G$1" pin="GND@2" pad="P$18"/>
<connect gate="G$1" pin="GND_PAD" pad="P$29"/>
<connect gate="G$1" pin="MS1" pad="P$9"/>
<connect gate="G$1" pin="MS2" pad="P$10"/>
<connect gate="G$1" pin="MS3" pad="P$11"/>
<connect gate="G$1" pin="NC@1" pad="P$7"/>
<connect gate="G$1" pin="NC@2" pad="P$20"/>
<connect gate="G$1" pin="NC@3" pad="P$25"/>
<connect gate="G$1" pin="OUT1A" pad="P$24"/>
<connect gate="G$1" pin="OUT1B" pad="P$21"/>
<connect gate="G$1" pin="OUT2A" pad="P$26"/>
<connect gate="G$1" pin="OUT2B" pad="P$1"/>
<connect gate="G$1" pin="REF" pad="P$17"/>
<connect gate="G$1" pin="RESET" pad="P$12"/>
<connect gate="G$1" pin="ROSC" pad="P$13"/>
<connect gate="G$1" pin="SENSE1" pad="P$23"/>
<connect gate="G$1" pin="SENSE2" pad="P$27"/>
<connect gate="G$1" pin="SLEEP" pad="P$14"/>
<connect gate="G$1" pin="STEP" pad="P$16"/>
<connect gate="G$1" pin="VBB1" pad="P$22"/>
<connect gate="G$1" pin="VBB2" pad="P$28"/>
<connect gate="G$1" pin="VCP" pad="P$6"/>
<connect gate="G$1" pin="VDD" pad="P$15"/>
<connect gate="G$1" pin="VREG" pad="P$8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="V_REG_MIC5216" prefix="U">
<description>500mA LDO, MSOP8 for better dissipation</description>
<gates>
<gate name="G$1" symbol="MIC5216-1" x="0" y="0"/>
</gates>
<devices>
<device name="" package="MSOP8">
<connects>
<connect gate="G$1" pin="EN" pad="1"/>
<connect gate="G$1" pin="FLAG" pad="4"/>
<connect gate="G$1" pin="GND@5" pad="5"/>
<connect gate="G$1" pin="GND@6" pad="6"/>
<connect gate="G$1" pin="GND@7" pad="7"/>
<connect gate="G$1" pin="GND@8" pad="8"/>
<connect gate="G$1" pin="VIN" pad="2"/>
<connect gate="G$1" pin="VOUT" pad="3"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="HV816">
<description>High-drive dimmable EL inverter&lt;br&gt;
Supertex, available in SOW16 and QFN16</description>
<gates>
<gate name="G$1" symbol="HV816" x="-7.62" y="-2.54"/>
</gates>
<devices>
<device name="K6" package="QFN16-4X4">
<connects>
<connect gate="G$1" pin="CS" pad="12"/>
<connect gate="G$1" pin="EN" pad="9"/>
<connect gate="G$1" pin="GATE" pad="15"/>
<connect gate="G$1" pin="GND" pad="7 EXP"/>
<connect gate="G$1" pin="HVGND" pad="13"/>
<connect gate="G$1" pin="LX" pad="16"/>
<connect gate="G$1" pin="REL-OSC" pad="2"/>
<connect gate="G$1" pin="RSLEW-OUT" pad="8"/>
<connect gate="G$1" pin="RSW-OSC" pad="1"/>
<connect gate="G$1" pin="SEL" pad="3"/>
<connect gate="G$1" pin="VA" pad="10"/>
<connect gate="G$1" pin="VB" pad="11"/>
<connect gate="G$1" pin="VDD" pad="6"/>
<connect gate="G$1" pin="VDRIVE" pad="14"/>
<connect gate="G$1" pin="VOUT" pad="5"/>
<connect gate="G$1" pin="VREG" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="ADP160" prefix="U" uservalue="yes">
<description>Nanopower LDO&lt;br&gt;
Iq less than 1uA for low Iload</description>
<gates>
<gate name="G$1" symbol="ADP160" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="VIN" pad="1"/>
<connect gate="G$1" pin="VOUT" pad="5"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="VREG-11306"/>
<attribute name="VALUE" value="ADP160" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TPS6214X" prefix="U">
<description>3-17V, 2A Step Down Converter</description>
<gates>
<gate name="G$1" symbol="TPS62143" x="0" y="2.54"/>
</gates>
<devices>
<device name="" package="QFN16-3X3MM">
<connects>
<connect gate="G$1" pin="AGND" pad="6"/>
<connect gate="G$1" pin="AVIN" pad="10"/>
<connect gate="G$1" pin="DEF" pad="8"/>
<connect gate="G$1" pin="EN" pad="13"/>
<connect gate="G$1" pin="EXT" pad="EXT"/>
<connect gate="G$1" pin="FB" pad="5"/>
<connect gate="G$1" pin="FSW" pad="7"/>
<connect gate="G$1" pin="PG" pad="4"/>
<connect gate="G$1" pin="PGND@15" pad="15"/>
<connect gate="G$1" pin="PGND@16" pad="16"/>
<connect gate="G$1" pin="PVIN@11" pad="11"/>
<connect gate="G$1" pin="PVIN@12" pad="12"/>
<connect gate="G$1" pin="SS_TR" pad="9"/>
<connect gate="G$1" pin="SW@1" pad="1"/>
<connect gate="G$1" pin="SW@2" pad="2"/>
<connect gate="G$1" pin="SW@3" pad="3"/>
<connect gate="G$1" pin="VOS" pad="14"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="&quot;" package="QFN16-3X3MM_1:1_V02">
<connects>
<connect gate="G$1" pin="AGND" pad="6"/>
<connect gate="G$1" pin="AVIN" pad="10"/>
<connect gate="G$1" pin="DEF" pad="8"/>
<connect gate="G$1" pin="EN" pad="13"/>
<connect gate="G$1" pin="EXT" pad="EXT"/>
<connect gate="G$1" pin="FB" pad="5"/>
<connect gate="G$1" pin="FSW" pad="7"/>
<connect gate="G$1" pin="PG" pad="4"/>
<connect gate="G$1" pin="PGND@15" pad="15"/>
<connect gate="G$1" pin="PGND@16" pad="16"/>
<connect gate="G$1" pin="PVIN@11" pad="11"/>
<connect gate="G$1" pin="PVIN@12" pad="12"/>
<connect gate="G$1" pin="SS_TR" pad="9"/>
<connect gate="G$1" pin="SW@1" pad="1"/>
<connect gate="G$1" pin="SW@2" pad="2"/>
<connect gate="G$1" pin="SW@3" pad="3"/>
<connect gate="G$1" pin="VOS" pad="14"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="&quot;&quot;" package="QFN16-3X3MM_1:1_V03">
<connects>
<connect gate="G$1" pin="AGND" pad="6"/>
<connect gate="G$1" pin="AVIN" pad="10"/>
<connect gate="G$1" pin="DEF" pad="8"/>
<connect gate="G$1" pin="EN" pad="13"/>
<connect gate="G$1" pin="EXT" pad="EXT"/>
<connect gate="G$1" pin="FB" pad="5"/>
<connect gate="G$1" pin="FSW" pad="7"/>
<connect gate="G$1" pin="PG" pad="4"/>
<connect gate="G$1" pin="PGND@15" pad="15"/>
<connect gate="G$1" pin="PGND@16" pad="16"/>
<connect gate="G$1" pin="PVIN@11" pad="11"/>
<connect gate="G$1" pin="PVIN@12" pad="12"/>
<connect gate="G$1" pin="SS_TR" pad="9"/>
<connect gate="G$1" pin="SW@1" pad="1"/>
<connect gate="G$1" pin="SW@2" pad="2"/>
<connect gate="G$1" pin="SW@3" pad="3"/>
<connect gate="G$1" pin="VOS" pad="14"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TPS62172" prefix="U">
<description>&lt;h3&gt;Texas Instruments TPS62172&lt;/h3&gt;
3-17V 0.5A Step-Down Converter with DCS control. Available in adjustable and fixed output voltage versions.&lt;br&gt;&lt;br&gt;

Is packaged in an 8-pin WSON package measuring 2 × 2 mm (DSG).&lt;br&gt; &lt;br&gt;

See a 3.3V fixed output version of this chip in action on the &lt;a href="https://www.sparkfun.com/products/11400"&gt;Electric Imp Breakout Board&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="http://www.ti.com/lit/gpn/tps62172"&gt;Datasheet&lt;/a&gt;</description>
<gates>
<gate name="G$1" symbol="TPS62172" x="0" y="0"/>
</gates>
<devices>
<device name="" package="WSON-8-PAD">
<connects>
<connect gate="G$1" pin="AGND" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="FB" pad="5"/>
<connect gate="G$1" pin="PAD" pad="PAD"/>
<connect gate="G$1" pin="PG" pad="8"/>
<connect gate="G$1" pin="PGND" pad="1"/>
<connect gate="G$1" pin="SW" pad="7"/>
<connect gate="G$1" pin="VIN" pad="2"/>
<connect gate="G$1" pin="VOS" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="MIC5205" prefix="U" uservalue="yes">
<description>MIC5205 150mA vreg&lt;br&gt;
3.3V - VREG-00822&lt;br&gt;
5V - VREG-00823</description>
<gates>
<gate name="G$1" symbol="V-REG-LDO" x="0" y="0"/>
</gates>
<devices>
<device name="3.3V" package="SOT23-5">
<connects>
<connect gate="G$1" pin="BP" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="VREG-00822"/>
</technology>
</technologies>
</device>
<device name="5V" package="SOT23-5">
<connects>
<connect gate="G$1" pin="BP" pad="4"/>
<connect gate="G$1" pin="EN" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="IN" pad="1"/>
<connect gate="G$1" pin="OUT" pad="5"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="VREG-00823"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="DRV8830" prefix="U">
<description>&lt;h2&gt;DRV8830 I&lt;sup&gt;2&lt;/sup&gt;C DC Motor Driver&lt;/h2&gt;
TSSOP-10 with exposed power pad&lt;br&gt;
1A current limit, 2.75V to 6.8V</description>
<gates>
<gate name="G$1" symbol="DRV8830" x="0" y="0"/>
</gates>
<devices>
<device name="" package="MSOP-10-GNDPAD">
<connects>
<connect gate="G$1" pin="!FAULT" pad="6"/>
<connect gate="G$1" pin="A0" pad="7"/>
<connect gate="G$1" pin="A1" pad="8"/>
<connect gate="G$1" pin="GND" pad="5"/>
<connect gate="G$1" pin="ISENSE" pad="2"/>
<connect gate="G$1" pin="OUT1" pad="3"/>
<connect gate="G$1" pin="OUT2" pad="1"/>
<connect gate="G$1" pin="PPAD" pad="GND"/>
<connect gate="G$1" pin="SCL" pad="10"/>
<connect gate="G$1" pin="SDA" pad="9"/>
<connect gate="G$1" pin="VCC" pad="4"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="AL8805" prefix="U" uservalue="yes">
<description>&lt;h3&gt;Constant current LED driver&lt;/h3&gt;&lt;p&gt;
PWM-able 1MHz switch freq 6V-36V&lt;br&gt;
Up to 1A LED current</description>
<gates>
<gate name="G$1" symbol="AL8805" x="0" y="0"/>
</gates>
<devices>
<device name="" package="SOT23-5">
<connects>
<connect gate="G$1" pin="CTRL" pad="3"/>
<connect gate="G$1" pin="GND" pad="2"/>
<connect gate="G$1" pin="SET" pad="4"/>
<connect gate="G$1" pin="SW" pad="1"/>
<connect gate="G$1" pin="VIN" pad="5"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="IC-11626"/>
<attribute name="VALUE" value="AL8805WS"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="LT3652" prefix="U" uservalue="yes">
<description>&lt;H3&gt;LT3652 MPPT Solar Charge Controller&lt;/h3&gt;&lt;p&gt;

5V-32V smart charger for batteries up to 14.4V</description>
<gates>
<gate name="G$1" symbol="LT3652" x="-10.16" y="-15.24"/>
</gates>
<devices>
<device name="" package="MSOP-12_GND">
<connects>
<connect gate="G$1" pin="!CHRG" pad="4"/>
<connect gate="G$1" pin="!FAULT" pad="5"/>
<connect gate="G$1" pin="!SHDN" pad="3"/>
<connect gate="G$1" pin="BAT" pad="9"/>
<connect gate="G$1" pin="BOOST" pad="11"/>
<connect gate="G$1" pin="GND_PAD" pad="13"/>
<connect gate="G$1" pin="NTC" pad="8"/>
<connect gate="G$1" pin="SENSE" pad="10"/>
<connect gate="G$1" pin="SW" pad="12"/>
<connect gate="G$1" pin="TIMER" pad="6"/>
<connect gate="G$1" pin="VFB" pad="7"/>
<connect gate="G$1" pin="VIN" pad="1"/>
<connect gate="G$1" pin="VIN_REG" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="VALUE" value="LT3652"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="TRANSFORMER_QUADFILIAR" prefix="TX">
<description>Transformer with 4 independent windings</description>
<gates>
<gate name="G$1" symbol="TRANSFORMER-QUADFILIAR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="COILCRAFT_DA230X">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
<connect gate="G$1" pin="3" pad="P$3"/>
<connect gate="G$1" pin="4" pad="P$4"/>
<connect gate="G$1" pin="5" pad="P$5"/>
<connect gate="G$1" pin="6" pad="P$6"/>
<connect gate="G$1" pin="7" pad="P$7"/>
<connect gate="G$1" pin="8" pad="P$8"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-RF.lbr.

more than 10,000 changes

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Resistors.lbr.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE eagle SYSTEM "eagle.dtd">
<eagle version="6.5.0">
<drawing>
<settings>
<setting alwaysvectorfont="no"/>
<setting verticaltext="up"/>
</settings>
<grid distance="0.1" unitdist="inch" unit="inch" style="lines" multiple="1" display="no" altdistance="0.01" altunitdist="inch" altunit="inch"/>
<layers>
<layer number="1" name="Top" color="4" fill="1" visible="yes" active="yes"/>
<layer number="2" name="Route2" color="1" fill="3" visible="no" active="yes"/>
<layer number="3" name="Route3" color="4" fill="3" visible="no" active="yes"/>
<layer number="4" name="Route4" color="1" fill="4" visible="no" active="yes"/>
<layer number="5" name="Route5" color="4" fill="4" visible="no" active="yes"/>
<layer number="6" name="Route6" color="1" fill="8" visible="no" active="yes"/>
<layer number="7" name="Route7" color="4" fill="8" visible="no" active="yes"/>
<layer number="8" name="Route8" color="1" fill="2" visible="no" active="yes"/>
<layer number="9" name="Route9" color="4" fill="2" visible="no" active="yes"/>
<layer number="10" name="Route10" color="1" fill="7" visible="no" active="yes"/>
<layer number="11" name="Route11" color="4" fill="7" visible="no" active="yes"/>
<layer number="12" name="Route12" color="1" fill="5" visible="no" active="yes"/>
<layer number="13" name="Route13" color="4" fill="5" visible="no" active="yes"/>
<layer number="14" name="Route14" color="1" fill="6" visible="no" active="yes"/>
<layer number="15" name="Route15" color="4" fill="6" visible="no" active="yes"/>
<layer number="16" name="Bottom" color="1" fill="1" visible="yes" active="yes"/>
<layer number="17" name="Pads" color="2" fill="1" visible="yes" active="yes"/>
<layer number="18" name="Vias" color="2" fill="1" visible="yes" active="yes"/>
<layer number="19" name="Unrouted" color="6" fill="1" visible="yes" active="yes"/>
<layer number="20" name="Dimension" color="15" fill="1" visible="yes" active="yes"/>
<layer number="21" name="tPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="22" name="bPlace" color="7" fill="1" visible="yes" active="yes"/>
<layer number="23" name="tOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="24" name="bOrigins" color="15" fill="1" visible="yes" active="yes"/>
<layer number="25" name="tNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="26" name="bNames" color="7" fill="1" visible="yes" active="yes"/>
<layer number="27" name="tValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="28" name="bValues" color="7" fill="1" visible="yes" active="yes"/>
<layer number="29" name="tStop" color="7" fill="3" visible="no" active="yes"/>
<layer number="30" name="bStop" color="7" fill="6" visible="yes" active="yes"/>
<layer number="31" name="tCream" color="7" fill="4" visible="no" active="yes"/>
<layer number="32" name="bCream" color="7" fill="5" visible="no" active="yes"/>
<layer number="33" name="tFinish" color="6" fill="3" visible="no" active="yes"/>
<layer number="34" name="bFinish" color="6" fill="6" visible="no" active="yes"/>
<layer number="35" name="tGlue" color="7" fill="4" visible="no" active="yes"/>
<layer number="36" name="bGlue" color="7" fill="5" visible="no" active="yes"/>
<layer number="37" name="tTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="38" name="bTest" color="7" fill="1" visible="no" active="yes"/>
<layer number="39" name="tKeepout" color="4" fill="11" visible="yes" active="yes"/>
<layer number="40" name="bKeepout" color="1" fill="11" visible="yes" active="yes"/>
<layer number="41" name="tRestrict" color="4" fill="10" visible="yes" active="yes"/>
<layer number="42" name="bRestrict" color="1" fill="10" visible="yes" active="yes"/>
<layer number="43" name="vRestrict" color="2" fill="10" visible="yes" active="yes"/>
<layer number="44" name="Drills" color="7" fill="1" visible="no" active="yes"/>
<layer number="45" name="Holes" color="7" fill="1" visible="no" active="yes"/>
<layer number="46" name="Milling" color="3" fill="1" visible="no" active="yes"/>
<layer number="47" name="Measures" color="7" fill="1" visible="no" active="yes"/>
<layer number="48" name="Document" color="7" fill="1" visible="yes" active="yes"/>
<layer number="49" name="Reference" color="7" fill="1" visible="yes" active="yes"/>
<layer number="50" name="dxf" color="7" fill="1" visible="no" active="no"/>
<layer number="51" name="tDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="52" name="bDocu" color="7" fill="1" visible="yes" active="yes"/>
<layer number="53" name="tGND_GNDA" color="7" fill="9" visible="no" active="no"/>
<layer number="54" name="bGND_GNDA" color="1" fill="9" visible="no" active="no"/>
<layer number="56" name="wert" color="7" fill="1" visible="no" active="no"/>
<layer number="91" name="Nets" color="2" fill="1" visible="yes" active="yes"/>
<layer number="92" name="Busses" color="1" fill="1" visible="yes" active="yes"/>
<layer number="93" name="Pins" color="2" fill="1" visible="no" active="yes"/>
<layer number="94" name="Symbols" color="4" fill="1" visible="yes" active="yes"/>
<layer number="95" name="Names" color="7" fill="1" visible="yes" active="yes"/>
<layer number="96" name="Values" color="7" fill="1" visible="yes" active="yes"/>
<layer number="97" name="Info" color="7" fill="1" visible="yes" active="yes"/>
<layer number="98" name="Guide" color="6" fill="1" visible="yes" active="yes"/>
<layer number="100" name="Muster" color="7" fill="1" visible="no" active="no"/>
<layer number="101" name="Patch_Top" color="12" fill="4" visible="no" active="yes"/>
<layer number="102" name="Vscore" color="7" fill="1" visible="no" active="yes"/>
<layer number="103" name="tMap" color="7" fill="1" visible="no" active="yes"/>
<layer number="104" name="Name" color="16" fill="1" visible="no" active="yes"/>
<layer number="105" name="tPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="106" name="bPlate" color="7" fill="1" visible="no" active="yes"/>
<layer number="107" name="Crop" color="7" fill="1" visible="no" active="yes"/>
<layer number="116" name="Patch_BOT" color="9" fill="4" visible="no" active="yes"/>
<layer number="121" name="_tsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="122" name="_bsilk" color="7" fill="1" visible="no" active="yes"/>
<layer number="125" name="_tNames" color="7" fill="1" visible="no" active="yes"/>
<layer number="144" name="Drill_legend" color="7" fill="1" visible="no" active="yes"/>
<layer number="151" name="HeatSink" color="7" fill="1" visible="no" active="yes"/>
<layer number="200" name="200bmp" color="1" fill="10" visible="no" active="yes"/>
<layer number="201" name="201bmp" color="2" fill="10" visible="no" active="yes"/>
<layer number="202" name="202bmp" color="3" fill="10" visible="no" active="yes"/>
<layer number="203" name="203bmp" color="4" fill="10" visible="no" active="yes"/>
<layer number="204" name="204bmp" color="5" fill="10" visible="no" active="yes"/>
<layer number="205" name="205bmp" color="6" fill="10" visible="no" active="yes"/>
<layer number="206" name="206bmp" color="7" fill="10" visible="no" active="yes"/>
<layer number="207" name="207bmp" color="8" fill="10" visible="no" active="yes"/>
<layer number="208" name="208bmp" color="9" fill="10" visible="no" active="yes"/>
<layer number="209" name="209bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="210" name="210bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="211" name="211bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="212" name="212bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="213" name="213bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="214" name="214bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="215" name="215bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="216" name="216bmp" color="7" fill="1" visible="no" active="yes"/>
<layer number="217" name="217bmp" color="18" fill="1" visible="no" active="no"/>
<layer number="218" name="218bmp" color="19" fill="1" visible="no" active="no"/>
<layer number="219" name="219bmp" color="20" fill="1" visible="no" active="no"/>
<layer number="220" name="220bmp" color="21" fill="1" visible="no" active="no"/>
<layer number="221" name="221bmp" color="22" fill="1" visible="no" active="no"/>
<layer number="222" name="222bmp" color="23" fill="1" visible="no" active="no"/>
<layer number="223" name="223bmp" color="24" fill="1" visible="no" active="no"/>
<layer number="224" name="224bmp" color="25" fill="1" visible="no" active="no"/>
<layer number="250" name="Descript" color="3" fill="1" visible="no" active="no"/>
<layer number="251" name="SMDround" color="12" fill="11" visible="no" active="no"/>
<layer number="254" name="cooling" color="7" fill="1" visible="no" active="yes"/>
</layers>
<library>
<description>&lt;h3&gt;SparkFun Electronics' preferred foot prints&lt;/h3&gt;
In this library you'll find resistors, capacitors, inductors, test points, jumper pads, etc.&lt;br&gt;&lt;br&gt;
We've spent an enormous amount of time creating and checking these footprints and parts, but it is the end user's responsibility to ensure correctness and suitablity for a given componet or application. If you enjoy using this library, please buy one of our products at www.sparkfun.com.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Licensing:&lt;/b&gt; CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage.</description>
<packages>
<package name="0805">
<wire x1="-0.3" y1="0.6" x2="0.3" y2="0.6" width="0.1524" layer="21"/>
<wire x1="-0.3" y1="-0.6" x2="0.3" y2="-0.6" width="0.1524" layer="21"/>
<smd name="1" x="-0.9" y="0" dx="0.8" dy="1.2" layer="1"/>
<smd name="2" x="0.9" y="0" dx="0.8" dy="1.2" layer="1"/>
<text x="-0.762" y="0.8255" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.016" y="-1.397" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="GRM43D">
<wire x1="2.25" y1="1.6" x2="1.1" y2="1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="1.6" x2="-1.1" y2="1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="1.6" x2="-2.25" y2="1.6" width="0.127" layer="51"/>
<wire x1="-2.25" y1="1.6" x2="-2.25" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-2.25" y1="-1.6" x2="-1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="-1.6" x2="1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="-1.6" x2="2.25" y2="-1.6" width="0.127" layer="51"/>
<wire x1="2.25" y1="-1.6" x2="2.25" y2="1.6" width="0.127" layer="51"/>
<wire x1="1.1" y1="1.6" x2="1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-1.1" y1="1.6" x2="-1.1" y2="-1.6" width="0.127" layer="51"/>
<wire x1="-2.3" y1="1.8" x2="2.3" y2="1.8" width="0.127" layer="21"/>
<wire x1="-2.3" y1="-1.8" x2="2.3" y2="-1.8" width="0.127" layer="21"/>
<smd name="A" x="1.927" y="0" dx="3.2" dy="1.65" layer="1" rot="R90"/>
<smd name="R" x="-1.927" y="0" dx="3.2" dy="1.65" layer="1" rot="R90"/>
<text x="-2" y="2" size="0.4064" layer="25">&gt;NAME</text>
<text x="0" y="-2" size="0.4064" layer="27" rot="R180">&gt;VALUE</text>
<rectangle x1="-2.2" y1="-1.6" x2="-1.1" y2="1.6" layer="51"/>
<rectangle x1="1.1" y1="-1.6" x2="2.2" y2="1.6" layer="51"/>
</package>
<package name="AXIAL-5MM">
<wire x1="-1.14" y1="0.762" x2="1.14" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0.762" x2="1.14" y2="0" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0" x2="1.14" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="-0.762" x2="-1.14" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="-0.762" x2="-1.14" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="0" x2="-1.14" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.14" y1="0" x2="1.394" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.14" y1="0" x2="-1.394" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-2.5" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="2.5" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.17" size="0.4" layer="25">&gt;Name</text>
<text x="-1.032" y="-0.208" size="0.4" layer="21" ratio="15">&gt;Value</text>
</package>
<package name="1210">
<wire x1="-1.6" y1="1.3" x2="1.6" y2="1.3" width="0.127" layer="51"/>
<wire x1="1.6" y1="1.3" x2="1.6" y2="-1.3" width="0.127" layer="51"/>
<wire x1="1.6" y1="-1.3" x2="-1.6" y2="-1.3" width="0.127" layer="51"/>
<wire x1="-1.6" y1="-1.3" x2="-1.6" y2="1.3" width="0.127" layer="51"/>
<wire x1="-1.6" y1="1.3" x2="1.6" y2="1.3" width="0.2032" layer="21"/>
<wire x1="-1.6" y1="-1.3" x2="1.6" y2="-1.3" width="0.2032" layer="21"/>
<smd name="1" x="-1.6" y="0" dx="1.2" dy="2" layer="1"/>
<smd name="2" x="1.6" y="0" dx="1.2" dy="2" layer="1"/>
<text x="-0.8" y="0.5" size="0.4064" layer="25">&gt;NAME</text>
<text x="-0.9" y="-0.7" size="0.4064" layer="27">&gt;VALUE</text>
</package>
<package name="1206">
<wire x1="-2.473" y1="0.983" x2="2.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="2.473" y1="-0.983" x2="-2.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-2.473" y1="-0.983" x2="-2.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="2.473" y1="0.983" x2="2.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-0.965" y1="0.787" x2="0.965" y2="0.787" width="0.1016" layer="51"/>
<wire x1="-0.965" y1="-0.787" x2="0.965" y2="-0.787" width="0.1016" layer="51"/>
<smd name="1" x="-1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
<smd name="2" x="1.4" y="0" dx="1.6" dy="1.8" layer="1"/>
<text x="-1.27" y="1.143" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.397" y="-1.524" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-1.7018" y1="-0.8509" x2="-0.9517" y2="0.8491" layer="51"/>
<rectangle x1="0.9517" y1="-0.8491" x2="1.7018" y2="0.8509" layer="51"/>
<rectangle x1="-0.1999" y1="-0.4001" x2="0.1999" y2="0.4001" layer="35"/>
</package>
<package name="0603">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
</package>
<package name="AXIAL-0.3">
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="3.81" y="0" drill="0.9" diameter="1.8796"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.032" y="-0.381" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.3EZ">
<description>This is the "EZ" version of the standard .3" spaced resistor package.&lt;br&gt;
It has a reduced top mask to make it harder to install upside-down.</description>
<wire x1="-2.54" y1="0.762" x2="2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0.762" x2="2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="-0.762" x2="-2.54" y2="-0.762" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="-0.762" x2="-2.54" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="0.762" width="0.2032" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.2032" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<pad name="P$2" x="3.81" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.032" y="-0.381" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
<circle x="-3.81" y="0" radius="0.508" width="0" layer="29"/>
<circle x="3.81" y="0" radius="0.523634375" width="0" layer="29"/>
<circle x="-3.81" y="0" radius="1.02390625" width="0" layer="30"/>
<circle x="3.81" y="0" radius="1.04726875" width="0" layer="30"/>
</package>
<package name="R2010">
<description>&lt;b&gt;RESISTOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-1.662" y1="1.245" x2="1.662" y2="1.245" width="0.1524" layer="51"/>
<wire x1="-1.637" y1="-1.245" x2="1.687" y2="-1.245" width="0.1524" layer="51"/>
<wire x1="-3.473" y1="1.483" x2="3.473" y2="1.483" width="0.0508" layer="39"/>
<wire x1="3.473" y1="1.483" x2="3.473" y2="-1.483" width="0.0508" layer="39"/>
<wire x1="3.473" y1="-1.483" x2="-3.473" y2="-1.483" width="0.0508" layer="39"/>
<wire x1="-3.473" y1="-1.483" x2="-3.473" y2="1.483" width="0.0508" layer="39"/>
<wire x1="-1.027" y1="1.245" x2="1.027" y2="1.245" width="0.1524" layer="21"/>
<wire x1="-1.002" y1="-1.245" x2="1.016" y2="-1.245" width="0.1524" layer="21"/>
<smd name="1" x="-2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
<smd name="2" x="2.2" y="0" dx="1.8" dy="2.7" layer="1"/>
<text x="-2.54" y="1.5875" size="0.4064" layer="25">&gt;NAME</text>
<text x="-2.54" y="-2.032" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-2.4892" y1="-1.3208" x2="-1.6393" y2="1.3292" layer="51"/>
<rectangle x1="1.651" y1="-1.3208" x2="2.5009" y2="1.3292" layer="51"/>
</package>
<package name="0603-RES">
<wire x1="-1.473" y1="0.983" x2="1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.983" x2="1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.983" x2="-1.473" y2="-0.983" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.983" x2="-1.473" y2="0.983" width="0.0508" layer="39"/>
<wire x1="-0.356" y1="0.432" x2="0.356" y2="0.432" width="0.1016" layer="51"/>
<wire x1="-0.356" y1="-0.419" x2="0.356" y2="-0.419" width="0.1016" layer="51"/>
<smd name="1" x="-0.85" y="0" dx="1.1" dy="1" layer="1"/>
<smd name="2" x="0.85" y="0" dx="1.1" dy="1" layer="1"/>
<text x="-0.889" y="0.762" size="0.4064" layer="25" font="vector">&gt;NAME</text>
<text x="-1.016" y="-1.143" size="0.4064" layer="27" font="vector">&gt;VALUE</text>
<rectangle x1="-0.8382" y1="-0.4699" x2="-0.3381" y2="0.4801" layer="51"/>
<rectangle x1="0.3302" y1="-0.4699" x2="0.8303" y2="0.4801" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2286" y1="-0.381" x2="0.2286" y2="0.381" layer="21"/>
</package>
<package name="0402-RES">
<description>&lt;b&gt;CAPACITOR&lt;/b&gt;&lt;p&gt;
chip</description>
<wire x1="-0.245" y1="0.224" x2="0.245" y2="0.224" width="0.1524" layer="51"/>
<wire x1="0.245" y1="-0.224" x2="-0.245" y2="-0.224" width="0.1524" layer="51"/>
<wire x1="-1.473" y1="0.483" x2="1.473" y2="0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="0.483" x2="1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="1.473" y1="-0.483" x2="-1.473" y2="-0.483" width="0.0508" layer="39"/>
<wire x1="-1.473" y1="-0.483" x2="-1.473" y2="0.483" width="0.0508" layer="39"/>
<smd name="1" x="-0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<smd name="2" x="0.65" y="0" dx="0.7" dy="0.9" layer="1"/>
<text x="-0.889" y="0.6985" size="0.4064" layer="25">&gt;NAME</text>
<text x="-1.0795" y="-1.143" size="0.4064" layer="27">&gt;VALUE</text>
<rectangle x1="-0.554" y1="-0.3048" x2="-0.254" y2="0.2951" layer="51"/>
<rectangle x1="0.2588" y1="-0.3048" x2="0.5588" y2="0.2951" layer="51"/>
<rectangle x1="-0.1999" y1="-0.3" x2="0.1999" y2="0.3" layer="35"/>
<rectangle x1="-0.2032" y1="-0.3556" x2="0.2032" y2="0.3556" layer="21"/>
</package>
<package name="1/6W-RES">
<description>1/6W Thru-hole Resistor - *UNPROVEN*</description>
<wire x1="-1.55" y1="0.85" x2="-1.55" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="-1.55" y1="-0.85" x2="1.55" y2="-0.85" width="0.2032" layer="21"/>
<wire x1="1.55" y1="-0.85" x2="1.55" y2="0.85" width="0.2032" layer="21"/>
<wire x1="1.55" y1="0.85" x2="-1.55" y2="0.85" width="0.2032" layer="21"/>
<pad name="1" x="-2.5" y="0" drill="0.762" diameter="1.6764"/>
<pad name="2" x="2.5" y="0" drill="0.762" diameter="1.6764"/>
<text x="-1.2662" y="0.9552" size="0.6096" layer="25">&gt;NAME</text>
<text x="-1.423" y="-0.4286" size="0.8128" layer="21" ratio="15">&gt;VALUE</text>
</package>
<package name="R2512">
<wire x1="-2.362" y1="1.473" x2="2.387" y2="1.473" width="0.1524" layer="51"/>
<wire x1="-2.362" y1="-1.473" x2="2.387" y2="-1.473" width="0.1524" layer="51"/>
<smd name="1" x="-2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
<smd name="2" x="2.8" y="0" dx="1.8" dy="3.2" layer="1"/>
<text x="-2.54" y="1.905" size="1.27" layer="25">&gt;NAME</text>
<text x="-2.54" y="-3.175" size="1.27" layer="27">&gt;VALUE</text>
<rectangle x1="-3.2004" y1="-1.5494" x2="-2.3505" y2="1.5507" layer="51"/>
<rectangle x1="2.3622" y1="-1.5494" x2="3.2121" y2="1.5507" layer="51"/>
</package>
<package name="AXIAL-0.4">
<description>1/4W Resistor, 0.4" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-3.15" y1="-1.2" x2="-3.15" y2="1.2" width="0.2032" layer="21"/>
<wire x1="-3.15" y1="1.2" x2="3.15" y2="1.2" width="0.2032" layer="21"/>
<wire x1="3.15" y1="1.2" x2="3.15" y2="-1.2" width="0.2032" layer="21"/>
<wire x1="3.15" y1="-1.2" x2="-3.15" y2="-1.2" width="0.2032" layer="21"/>
<pad name="P$1" x="-5.08" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="5.08" y="0" drill="0.9" diameter="1.8796"/>
<text x="-3.175" y="1.905" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-2.286" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.5">
<description>1/2W Resistor, 0.5" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-4.5" y1="-1.65" x2="-4.5" y2="1.65" width="0.2032" layer="21"/>
<wire x1="-4.5" y1="1.65" x2="4.5" y2="1.65" width="0.2032" layer="21"/>
<wire x1="4.5" y1="1.65" x2="4.5" y2="-1.65" width="0.2032" layer="21"/>
<wire x1="4.5" y1="-1.65" x2="-4.5" y2="-1.65" width="0.2032" layer="21"/>
<pad name="P$1" x="-6.35" y="0" drill="0.9" diameter="1.8796"/>
<pad name="P$2" x="6.35" y="0" drill="0.9" diameter="1.8796"/>
<text x="-4.445" y="2.54" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-3.429" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.6">
<description>1W Resistor, 0.6" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-5.75" y1="-2.25" x2="-5.75" y2="2.25" width="0.2032" layer="21"/>
<wire x1="-5.75" y1="2.25" x2="5.75" y2="2.25" width="0.2032" layer="21"/>
<wire x1="5.75" y1="2.25" x2="5.75" y2="-2.25" width="0.2032" layer="21"/>
<wire x1="5.75" y1="-2.25" x2="-5.75" y2="-2.25" width="0.2032" layer="21"/>
<pad name="P$1" x="-7.62" y="0" drill="1.2" diameter="1.8796"/>
<pad name="P$2" x="7.62" y="0" drill="1.2" diameter="1.8796"/>
<text x="-5.715" y="3.175" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-4.064" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.8">
<description>2W Resistor, 0.8" wide&lt;p&gt;

Yageo CFR series &lt;a href="http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf"&gt;http://www.yageo.com/pdf/yageo/Leaded-R_CFR_2008.pdf&lt;/a&gt;</description>
<wire x1="-7.75" y1="-2.5" x2="-7.75" y2="2.5" width="0.2032" layer="21"/>
<wire x1="-7.75" y1="2.5" x2="7.75" y2="2.5" width="0.2032" layer="21"/>
<wire x1="7.75" y1="2.5" x2="7.75" y2="-2.5" width="0.2032" layer="21"/>
<wire x1="7.75" y1="-2.5" x2="-7.75" y2="-2.5" width="0.2032" layer="21"/>
<pad name="P$1" x="-10.16" y="0" drill="1.2" diameter="1.8796"/>
<pad name="P$2" x="10.16" y="0" drill="1.2" diameter="1.8796"/>
<text x="-7.62" y="3.175" size="0.8128" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="-5.969" y="-0.381" size="0.8128" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
<package name="AXIAL-0.3-KIT">
<description>&lt;h3&gt;AXIAL-0.3-KIT&lt;/h3&gt;

Commonly used for 1/4W through-hole resistors. 0.3" pitch between holes.&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Warning:&lt;/b&gt; This is the KIT version of the AXIAL-0.3 package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side.</description>
<wire x1="-2.54" y1="1.27" x2="2.54" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="1.27" x2="2.54" y2="0" width="0.254" layer="21"/>
<wire x1="2.54" y1="0" x2="2.54" y2="-1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="-1.27" x2="-2.54" y2="-1.27" width="0.254" layer="21"/>
<wire x1="-2.54" y1="-1.27" x2="-2.54" y2="0" width="0.254" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.54" y2="1.27" width="0.254" layer="21"/>
<wire x1="2.54" y1="0" x2="2.794" y2="0" width="0.254" layer="21"/>
<wire x1="-2.54" y1="0" x2="-2.794" y2="0" width="0.254" layer="21"/>
<pad name="P$1" x="-3.81" y="0" drill="1.016" diameter="2.032" stop="no"/>
<pad name="P$2" x="3.81" y="0" drill="1.016" diameter="2.032" stop="no"/>
<text x="-2.54" y="1.27" size="0.4064" layer="25" font="vector">&gt;Name</text>
<text x="-2.159" y="-0.762" size="1.27" layer="21" font="vector" ratio="15">&gt;Value</text>
<polygon width="0.127" layer="30">
<vertex x="3.8201" y="-0.9449" curve="-90"/>
<vertex x="2.8652" y="-0.0152" curve="-90.011749"/>
<vertex x="3.8176" y="0.9602" curve="-90"/>
<vertex x="4.7676" y="-0.0178" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="3.8176" y="-0.4369" curve="-90.012891"/>
<vertex x="3.3731" y="-0.0127" curve="-90"/>
<vertex x="3.8176" y="0.4546" curve="-90"/>
<vertex x="4.2595" y="-0.0025" curve="-90.012967"/>
</polygon>
<polygon width="0.127" layer="30">
<vertex x="-3.8075" y="-0.9525" curve="-90"/>
<vertex x="-4.7624" y="-0.0228" curve="-90.011749"/>
<vertex x="-3.81" y="0.9526" curve="-90"/>
<vertex x="-2.86" y="-0.0254" curve="-90.024193"/>
</polygon>
<polygon width="0.127" layer="29">
<vertex x="-3.81" y="-0.4445" curve="-90.012891"/>
<vertex x="-4.2545" y="-0.0203" curve="-90"/>
<vertex x="-3.81" y="0.447" curve="-90"/>
<vertex x="-3.3681" y="-0.0101" curve="-90.012967"/>
</polygon>
</package>
<package name="0603-ARV">
<description>&lt;b&gt;Chip Resistor Array&lt;/b&gt; size 4 × 0603&lt;p&gt;
convex termination - Phycomp Components&lt;br&gt;
Source: RS Components</description>
<wire x1="-1.55" y1="0.45" x2="1.55" y2="0.45" width="0.1016" layer="51"/>
<wire x1="1.55" y1="0.45" x2="1.55" y2="-0.45" width="0.1016" layer="51"/>
<wire x1="-1.55" y1="-0.45" x2="-1.55" y2="0.45" width="0.1016" layer="51"/>
<wire x1="1.55" y1="-0.45" x2="-1.55" y2="-0.45" width="0.1016" layer="51"/>
<smd name="1" x="-1.2" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="2" x="-0.4" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="3" x="0.4" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="4" x="1.2" y="-0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="5" x="1.2" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="6" x="0.4" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="7" x="-0.4" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<smd name="8" x="-1.2" y="0.625" dx="0.5" dy="0.65" layer="1"/>
<text x="-1.905" y="-2.54" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-1.905" y="1.27" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<rectangle x1="-1.6" y1="0.7" x2="-0.9" y2="0.8" layer="51"/>
<rectangle x1="-0.7" y1="0.7" x2="-0.1" y2="0.8" layer="51"/>
<rectangle x1="0.1" y1="0.7" x2="0.7" y2="0.8" layer="51"/>
<rectangle x1="0.9" y1="0.7" x2="1.6" y2="0.8" layer="51"/>
<rectangle x1="-1.5" y1="0.5" x2="-0.95" y2="0.7" layer="51"/>
<rectangle x1="-0.65" y1="0.5" x2="-0.15" y2="0.7" layer="51"/>
<rectangle x1="0.15" y1="0.5" x2="0.65" y2="0.7" layer="51"/>
<rectangle x1="0.95" y1="0.5" x2="1.5" y2="0.7" layer="51"/>
<rectangle x1="0.9" y1="-0.8" x2="1.6" y2="-0.7" layer="51"/>
<rectangle x1="0.1" y1="-0.8" x2="0.7" y2="-0.7" layer="51"/>
<rectangle x1="-0.7" y1="-0.8" x2="-0.1" y2="-0.7" layer="51"/>
<rectangle x1="-1.6" y1="-0.8" x2="-0.9" y2="-0.7" layer="51"/>
<rectangle x1="0.95" y1="-0.7" x2="1.5" y2="-0.5" layer="51"/>
<rectangle x1="0.15" y1="-0.7" x2="0.65" y2="-0.5" layer="51"/>
<rectangle x1="-0.65" y1="-0.7" x2="-0.15" y2="-0.5" layer="51"/>
<rectangle x1="-1.5" y1="-0.7" x2="-0.95" y2="-0.5" layer="51"/>
</package>
<package name="RPACK-SIP-PTH-5">
<wire x1="-1.27" y1="0" x2="1.27" y2="0" width="0.2032" layer="21" curve="-180"/>
<wire x1="1.27" y1="-12.7" x2="-1.27" y2="-12.7" width="0.2032" layer="21" curve="-180"/>
<wire x1="-1.27" y1="0" x2="-1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="-1.27" y2="-12.7" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-12.7" x2="1.27" y2="-1.27" width="0.2032" layer="21"/>
<wire x1="1.27" y1="-1.27" x2="1.27" y2="0" width="0.2032" layer="21"/>
<wire x1="-1.27" y1="-1.27" x2="1.27" y2="-1.27" width="0.2032" layer="21"/>
<pad name="P$1" x="0" y="0" drill="0.8" diameter="1.6764" shape="square"/>
<pad name="P$2" x="0" y="-2.54" drill="0.8" diameter="1.6764"/>
<pad name="P$3" x="0" y="-5.08" drill="0.8" diameter="1.6764"/>
<pad name="P$4" x="0" y="-7.62" drill="0.8" diameter="1.6764"/>
<pad name="P$5" x="0" y="-10.16" drill="0.8" diameter="1.6764"/>
<pad name="P$6" x="0" y="-12.7" drill="0.8" diameter="1.6764"/>
<text x="-1.778" y="-12.7" size="1.27" layer="25" rot="R90">&gt;NAME</text>
<text x="-3.048" y="0" size="1.27" layer="27" rot="R270">&gt;VALUE</text>
</package>
<package name="AXIAL-0.1EZ">
<wire x1="1.27" y1="-0.762" x2="1.27" y2="0" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0" x2="1.27" y2="0.762" width="0.2032" layer="21"/>
<wire x1="1.524" y1="0" x2="1.27" y2="0" width="0.2032" layer="21"/>
<wire x1="1.27" y1="0" x2="1.016" y2="0" width="0.2032" layer="21"/>
<pad name="P$1" x="0" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<pad name="P$2" x="2.54" y="0" drill="0.9" diameter="1.8796" stop="no"/>
<text x="0" y="1.27" size="1.016" layer="25" font="vector" ratio="15">&gt;Name</text>
<text x="0" y="-2.159" size="1.016" layer="21" font="vector" ratio="15">&gt;Value</text>
</package>
</packages>
<symbols>
<symbol name="RESISTOR">
<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.1524" layer="94"/>
<text x="-3.81" y="1.4986" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.81" y="-3.302" size="1.778" layer="96">&gt;VALUE</text>
<pin name="2" x="5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="1" x="-5.08" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
</symbol>
<symbol name="RESISTOR-1">
<wire x1="-2.54" y1="0" x2="-2.159" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-2.159" y1="1.016" x2="-1.524" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-1.524" y1="-1.016" x2="-0.889" y2="1.016" width="0.1524" layer="94"/>
<wire x1="-0.889" y1="1.016" x2="-0.254" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="-0.254" y1="-1.016" x2="0.381" y2="1.016" width="0.1524" layer="94"/>
<wire x1="0.381" y1="1.016" x2="1.016" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="1.016" y1="-1.016" x2="1.651" y2="1.016" width="0.1524" layer="94"/>
<wire x1="1.651" y1="1.016" x2="2.286" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="2.286" y1="-1.016" x2="2.54" y2="0" width="0.1524" layer="94"/>
<text x="-3.81" y="1.4986" size="1.778" layer="95">&gt;NAME</text>
<text x="-3.81" y="-3.302" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="-5.08" y="0" visible="pad" length="short" direction="pas" swaplevel="1"/>
<pin name="2" x="5.08" y="0" visible="pad" length="short" direction="pas" swaplevel="1" rot="R180"/>
</symbol>
<symbol name="RPACK-BUSSED-5">
<wire x1="4.572" y1="0" x2="4.953" y2="1.016" width="0.1524" layer="94"/>
<wire x1="4.953" y1="1.016" x2="5.588" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-1.016" x2="6.223" y2="1.016" width="0.1524" layer="94"/>
<wire x1="6.223" y1="1.016" x2="6.858" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-1.016" x2="7.493" y2="1.016" width="0.1524" layer="94"/>
<wire x1="7.493" y1="1.016" x2="8.128" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-1.016" x2="8.763" y2="1.016" width="0.1524" layer="94"/>
<wire x1="8.763" y1="1.016" x2="9.398" y2="-1.016" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-1.016" x2="9.652" y2="0" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-2.54" x2="4.953" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-1.524" x2="5.588" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-3.556" x2="6.223" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-1.524" x2="6.858" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-3.556" x2="7.493" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-1.524" x2="8.128" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-3.556" x2="8.763" y2="-1.524" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-1.524" x2="9.398" y2="-3.556" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-3.556" x2="9.652" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-5.08" x2="4.953" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-4.064" x2="5.588" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-6.096" x2="6.223" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-4.064" x2="6.858" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-6.096" x2="7.493" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-4.064" x2="8.128" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-6.096" x2="8.763" y2="-4.064" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-4.064" x2="9.398" y2="-6.096" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-6.096" x2="9.652" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-7.62" x2="4.953" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-6.604" x2="5.588" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-8.636" x2="6.223" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-6.604" x2="6.858" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-8.636" x2="7.493" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-6.604" x2="8.128" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-8.636" x2="8.763" y2="-6.604" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-6.604" x2="9.398" y2="-8.636" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-8.636" x2="9.652" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-10.16" x2="4.953" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="4.953" y1="-9.144" x2="5.588" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="5.588" y1="-11.176" x2="6.223" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="6.223" y1="-9.144" x2="6.858" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="6.858" y1="-11.176" x2="7.493" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="7.493" y1="-9.144" x2="8.128" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="8.128" y1="-11.176" x2="8.763" y2="-9.144" width="0.1524" layer="94"/>
<wire x1="8.763" y1="-9.144" x2="9.398" y2="-11.176" width="0.1524" layer="94"/>
<wire x1="9.398" y1="-11.176" x2="9.652" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="2.54" y1="0" x2="4.572" y2="0" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-2.54" x2="4.572" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-5.08" x2="4.572" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="4.572" y1="-7.62" x2="2.54" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="2.54" y1="-10.16" x2="4.572" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="9.652" y1="-10.16" x2="10.922" y2="-10.16" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-10.16" x2="10.922" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-7.62" x2="9.652" y2="-7.62" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-7.62" x2="10.922" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-5.08" x2="9.652" y2="-5.08" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-5.08" x2="10.922" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="10.922" y1="-2.54" x2="9.652" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="9.652" y1="0" x2="10.922" y2="0" width="0.1524" layer="94"/>
<wire x1="10.922" y1="0" x2="10.922" y2="-2.54" width="0.1524" layer="94"/>
<wire x1="2.54" y1="2.54" x2="12.7" y2="2.54" width="0.4064" layer="94"/>
<wire x1="12.7" y1="2.54" x2="12.7" y2="0" width="0.4064" layer="94"/>
<wire x1="12.7" y1="0" x2="12.7" y2="-12.7" width="0.4064" layer="94"/>
<wire x1="12.7" y1="-12.7" x2="2.54" y2="-12.7" width="0.4064" layer="94"/>
<wire x1="2.54" y1="-12.7" x2="2.54" y2="2.54" width="0.4064" layer="94"/>
<wire x1="10.922" y1="0" x2="12.7" y2="0" width="0.1524" layer="94"/>
<circle x="10.922" y="0" radius="0.254" width="0.4064" layer="94"/>
<circle x="10.922" y="-2.54" radius="0.254" width="0.4064" layer="94"/>
<circle x="10.922" y="-5.08" radius="0.254" width="0.4064" layer="94"/>
<circle x="10.922" y="-7.62" radius="0.254" width="0.4064" layer="94"/>
<text x="2.54" y="3.302" size="1.778" layer="95">&gt;NAME</text>
<text x="2.54" y="-15.24" size="1.778" layer="96">&gt;VALUE</text>
<pin name="1" x="15.24" y="0" visible="off" length="short" direction="pas" swaplevel="1" rot="R180"/>
<pin name="2" x="0" y="0" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="3" x="0" y="-2.54" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="4" x="0" y="-5.08" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="5" x="0" y="-7.62" visible="off" length="short" direction="pas" swaplevel="1"/>
<pin name="6" x="0" y="-10.16" visible="off" length="short" direction="pas" swaplevel="1"/>
</symbol>
</symbols>
<devicesets>
<deviceset name="RESISTOR" prefix="R" uservalue="yes">
<description>&lt;b&gt;Resistor&lt;/b&gt;
Basic schematic elements and footprints for 0603, 1206, and PTH resistors.</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="1206" package="1206">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="AXIAL-0.3" package="AXIAL-0.3">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2010" package="R2010">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0805-RES" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0603-RES" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="0603" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/6W" package="1/6W-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="2512" package="R2512">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/4W" package="AXIAL-0.4">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/2W" package="AXIAL-0.5">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1W" package="AXIAL-0.6">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-2W" package="AXIAL-0.8">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="KIT" package="AXIAL-0.3-KIT">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="EZ" package="AXIAL-0.3EZ">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
<device name="PTH-1/4W-VERT" package="AXIAL-0.1EZ">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RESISTOR-ARRAY" prefix="R" uservalue="yes">
<description>&lt;b&gt;Array Chip Resistor&lt;/b&gt;&lt;p&gt;
Source: RS Component / Phycomp</description>
<gates>
<gate name="A" symbol="RESISTOR-1" x="0" y="7.62" addlevel="always" swaplevel="1"/>
<gate name="B" symbol="RESISTOR-1" x="0" y="2.54" addlevel="always" swaplevel="1"/>
<gate name="R" symbol="RESISTOR-1" x="0" y="-2.54" addlevel="always" swaplevel="1"/>
<gate name="D" symbol="RESISTOR-1" x="0" y="-7.62" addlevel="always" swaplevel="1"/>
</gates>
<devices>
<device name="0603-ARV" package="0603-ARV">
<connects>
<connect gate="A" pin="1" pad="1"/>
<connect gate="A" pin="2" pad="8"/>
<connect gate="B" pin="1" pad="2"/>
<connect gate="B" pin="2" pad="7"/>
<connect gate="D" pin="1" pad="4"/>
<connect gate="D" pin="2" pad="5"/>
<connect gate="R" pin="1" pad="3"/>
<connect gate="R" pin="2" pad="6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="RPACK" prefix="R" uservalue="yes">
<description>BOURNS 4600X series thick-film SIP resistor packs&lt;br&gt;
&lt;br&gt;
Five resistors bussed to a single pin (denoted by dot).&lt;br&gt;
0.2W / resistor&lt;br&gt;
&lt;a href="http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/4600x.pdf"&gt;datasheet&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
SFE parts COM-10855 (330), COM-10856 (10K)&lt;br&gt;</description>
<gates>
<gate name="G$1" symbol="RPACK-BUSSED-5" x="-7.62" y="5.08"/>
</gates>
<devices>
<device name="-BUSSED-SIP-PTH-5" package="RPACK-SIP-PTH-5">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
<connect gate="G$1" pin="3" pad="P$3"/>
<connect gate="G$1" pin="4" pad="P$4"/>
<connect gate="G$1" pin="5" pad="P$5"/>
<connect gate="G$1" pin="6" pad="P$6"/>
</connects>
<technologies>
<technology name=""/>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="787-1%" prefix="R" uservalue="yes">
<description>787-ohm SMT&lt;BR&gt;
1/10W - 1% (0603)&lt;BR&gt;
RES-11228</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-11228"/>
<attribute name="VALUE" value="787" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="220-5%" prefix="R" uservalue="yes">
<description>220-ohm SMT&lt;br&gt;
1/8W - 5% (0805)&lt;br&gt;
RES-07866</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07866"/>
<attribute name="VALUE" value="220" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="22M-10%" prefix="R" uservalue="yes">
<description>22M-ohm SMT&lt;BR&gt;
1/10W - 10% (0603)&lt;BR&gt;
RES-11132</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-11132"/>
<attribute name="VALUE" value="22M" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1K-1%" prefix="R" uservalue="yes">
<description>1k-ohm SMT&lt;BR&gt;
1/10W - 1% (0603)&lt;BR&gt;
RES-07856</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07856"/>
<attribute name="VALUE" value="1k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10K-1%" prefix="R" uservalue="yes">
<description>10k-ohm SMT&lt;br&gt;
1/10W - 1% (0603)&lt;br&gt;
RES-00824</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="RES-00824" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-00824"/>
<attribute name="VALUE" value="10k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="8.2K-5%" prefix="R" uservalue="yes">
<description>8.2k-ohm SMT&lt;BR&gt;
1/10W - 5% (0603)&lt;BR&gt;
RES-10646</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-10646"/>
<attribute name="VALUE" value="8.2k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="33K-1%" prefix="R" uservalue="yes">
<description>33k-ohm SMT&lt;BR&gt;
1/10W - 1% (0603)&lt;BR&gt;
RES-08416</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08416"/>
<attribute name="VALUE" value="33k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="100-1%" prefix="R" uservalue="yes">
<description>100-ohm SMT&lt;BR&gt;
1/10W - 1% (0603)&lt;BR&gt;
RES-07863</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07863"/>
<attribute name="VALUE" value="100" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1M-1%" prefix="R" uservalue="yes">
<description>1M-ohm SMT&lt;br&gt;
1/10W - 1% (0603)&lt;br&gt;
RES-07868</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07868"/>
<attribute name="VALUE" value="1M" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0OHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-08609</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.0OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10701</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.04OHM1/4W1%(1206)" prefix="R" uservalue="yes">
<description>RES-08140</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.10OHM1/31%(0805)" prefix="R" uservalue="yes">
<description>RES-09018</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.11OHM1/2W1%(2010)" prefix="R" uservalue="yes">
<description>RES-08354</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.15OHM1/5W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09738</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.22OHM-1W-1%(2010)" prefix="R" uservalue="yes">
<description>RES-10727</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.22OHM1/4W1%(0805)" prefix="R" uservalue="yes">
<description>RES-09883</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-09883"/>
<attribute name="VALUE" value="0.22" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="0.25OHM1/2W1%(2010)" prefix="R" uservalue="yes">
<description>RES-08366</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.27OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08787</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.33OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08412</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.75OHM1/4W1%(0805)" prefix="R" uservalue="yes">
<description>RES-08474</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="-2.54" y="0"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08474"/>
<attribute name="VALUE" value="0.75"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1OHM(PTH)" prefix="R" uservalue="yes">
<description>RES-08078</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08269</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.0OHM1/4W5%PTH" prefix="R" uservalue="yes">
<description>RES-09453</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.07KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09821</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.1KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10447</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.20KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08413</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.2KOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09452</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.2MOHMS-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10055</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-10055"/>
<attribute name="VALUE" value="1.2M" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1.43KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11019</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.43KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09567</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.4KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11114</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.5OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10700</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.5OHM5%(1210)" prefix="R" uservalue="yes">
<description>RES-08505</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.5KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08306</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.6KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08361</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.8KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09119</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1.8KOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09332</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10OHM-1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10896</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10698</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10OHM1/10W5%0603" prefix="R" uservalue="yes">
<description>RES-09834</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10OHM1/4W1%(1206)" prefix="R" uservalue="yes">
<description>RES-08705</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10.5KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09570</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100OHM-1/6W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10136</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07863</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07863" constant="no"/>
<attribute name="VALUE" value="100" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="100OHM1/16W.5%(0603)" prefix="R" uservalue="yes">
<description>RES-09565</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100OHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08059</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10686</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07828</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07828"/>
<attribute name="VALUE" value="100k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="100KOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09331</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="100KOHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09498</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="102KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09573</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="105OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10751</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10KOHM-1/16W-5%(0402)" prefix="R" uservalue="yes">
<description>RES-10636</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10KOHM-1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09435</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-00824</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="0603" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-00824"/>
<attribute name="VALUE" value="10K" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10KOHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08375</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="KIT" package="AXIAL-0.3-KIT">
<connects>
<connect gate="G$1" pin="1" pad="P$1"/>
<connect gate="G$1" pin="2" pad="P$2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08375" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="10MOHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-08283</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="10MOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09327</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="11.8KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09825</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="110OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10696</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="12.1KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09378</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="127KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-10010</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="12KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10327</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="13.7KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08603</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="13KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09571</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="147KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08601</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="150OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11028</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="150OHM-1/6W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10479</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="150KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09117</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="150KOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09330</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="15KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-11360</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="15KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07854</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="0603" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07854"/>
<attribute name="VALUE" value="15K"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="165KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10808</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="180OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08788</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="180OHM1/4W1%(1206)" prefix="R" uservalue="yes">
<description>RES-08364</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="180KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10066</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07856</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07856"/>
<attribute name="VALUE" value="1K" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="1KOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08380</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1KOHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09769</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1MOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07868</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1MOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09329</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="1MOHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09559</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.0KOHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-08296</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08296"/>
<attribute name="VALUE" value="2.0k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2.2OHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-07823</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.2KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10691</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.2KOHM(PTH)" prefix="R" uservalue="yes">
<description>RES-08148</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.2KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08272</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08272"/>
<attribute name="VALUE" value="2.2k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="2.2MOHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-09288</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.49KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09568</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.55KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11227</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.61KOHM1/8W1%(0805)" prefix="R" uservalue="yes">
<description>RES-08476</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.7OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09300</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2.7KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09382</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="20OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07862</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="20OHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09937</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="200OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08220</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="200KOHM-1/6W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10221</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="200KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09385</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="200K" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-09385"/>
<attribute name="VALUE" value="200k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="20KOHM-1/6W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10220</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="20KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09383</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-09383"/>
<attribute name="VALUE" value="20k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="20KOHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-09231</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="20KOHM1/10W5%(0805)" prefix="R" uservalue="yes">
<description>RES-08471</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="20KOHM1/8W5%(0805)" prefix="R" uservalue="yes">
<description>RES-09884</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08698</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22OHM1/2W5%(2010)" prefix="R" uservalue="yes">
<description>RES-08703</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22.6KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09384</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10695</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07861</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220OHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08376</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220OHM1/8W5%(0805)" prefix="R" uservalue="yes">
<description>RES-07866</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="220KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08969</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08969"/>
<attribute name="VALUE" value="220k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="22KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10688</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="22KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07853</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07853" constant="no"/>
<attribute name="VALUE" value="22K" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="22MOHM-1/10W-10%(0603)" prefix="R" uservalue="yes">
<description>RES-11132</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="240OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07849</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07849"/>
<attribute name="VALUE" value="240" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="240OHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08379</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="261KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08598</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="27OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09334</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="270OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11382</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="270OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-11364</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="287OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10752</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="28KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09343</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="29.4KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08600</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2MOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07867</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="2MOHMS-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10054</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-10054"/>
<attribute name="VALUE" value="2.0M" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="3.0MOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10937</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="3.3KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10690</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="3.3KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07851</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07851" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="3.3MOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11057</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-11057" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="3.6KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08417</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="3.9KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08701</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="30.1KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08595</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="-2.54" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-08595"/>
<attribute name="VALUE" value="30.1k" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="300OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10328</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="300OHM-1/6W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10219</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="300KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10809</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="-2.54" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-10809"/>
<attribute name="VALUE" value="300k"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="33OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08270</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="330OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10694</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="330OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-00818</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-00818"/>
<attribute name="VALUE" value="330" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="330OHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08371</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="330KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10685</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="330KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08968</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="33KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08416</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="36KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08602</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="374OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09992</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="390OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07864</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07864"/>
<attribute name="VALUE" value="390" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="390OHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08377</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="392OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11226</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.3KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09381</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.53KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09569</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10699</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7OHM(PTH)" prefix="R" uservalue="yes">
<description>RES-08102</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7OHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-08295</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10689</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.7KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07857</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="4.99KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07855</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="43KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07858</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07858"/>
<attribute name="VALUE" value="43k"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="47OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10697</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10693</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="470OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07869</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07869"/>
<attribute name="VALUE" value="470" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="470OHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-08079</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="475KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08806</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47KOHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10687</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="47KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07871</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-07871"/>
<attribute name="VALUE" value="47K" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="47KOHM1/6W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09497</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="49.9OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09542</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="49.9KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09572</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="499KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07872</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="5.1MOHM1/105%(0603)" prefix="R" uservalue="yes">
<description>RES-08805</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="5.62KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09823</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="5.6KOHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09451</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="50MOHM-1/10W-5%(0603)" prefix="R" uservalue="yes">
<description>RES-11075</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="510OHM1/2W5%(2010)" prefix="R" uservalue="yes">
<description>RES-08717</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="51KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08495</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="56OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10544</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="560KOHM-1/10W-5%(0603)" prefix="R" uservalue="yes">
<description>RES-10301</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="56KOHM-1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10897</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="6.8OHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09938</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="6.8KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08597</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="61.9KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09826</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="620OHM1/4W5%(0805)" prefix="R" uservalue="yes">
<description>RES-09377</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="62KOHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-09993</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="63.4KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08401</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="665KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10276</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="68OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07860</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="68.1KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09380</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="680OHM-1/4W-5%(PTH)" prefix="R" uservalue="yes">
<description>RES-10692</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="680OHM1/10W5%(0603)" prefix="R" uservalue="yes">
<description>RES-09333</description>
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0603-RES">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-09333"/>
<attribute name="VALUE" value="680" constant="no"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
<deviceset name="69.8KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09301</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="7.5OHM1/4W5%(PTH)" prefix="R" uservalue="yes">
<description>RES-09939</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="71.5OHM-1/4W-1%(PTH)" prefix="R" uservalue="yes">
<description>RES-10463</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="715OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07850</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="750OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07824</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="750KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-07852</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="75KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09737</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="787OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11228</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="8.06KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09547</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="8.2KOHM-1/10W-5%(0603)" prefix="R" uservalue="yes">
<description>RES-10646</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="82.5OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-11381</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="866OHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09991</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="88.7KOHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10744</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="88.7KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-09379</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="887OHM-1/10W-1%(0603)" prefix="R" uservalue="yes">
<description>RES-10268</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="9.1KOHM-1/10W-5%(0603)" prefix="R" uservalue="yes">
<description>RES-10267</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="90.9KOHM1/10W1%(0603)" prefix="R" uservalue="yes">
<description>RES-08599</description>
<gates>
</gates>
<devices>
</devices>
</deviceset>
<deviceset name="0.3OHM-1/8W-1%(0805)" prefix="R" uservalue="yes">
<gates>
<gate name="G$1" symbol="RESISTOR" x="0" y="0"/>
</gates>
<devices>
<device name="" package="0805">
<connects>
<connect gate="G$1" pin="1" pad="1"/>
<connect gate="G$1" pin="2" pad="2"/>
</connects>
<technologies>
<technology name="">
<attribute name="PROD_ID" value="RES-11622"/>
<attribute name="VALUE" value="0.3"/>
</technology>
</technologies>
</device>
</devices>
</deviceset>
</devicesets>
</library>
</drawing>
</eagle>

Added Hardware/Board/Firenet/SparkFun-Eagle-Libraries-master/SparkFun-Sensors.lbr.

more than 10,000 changes

Added Hardware/Board/Firenet/channels.numbers/Contents/PkgInfo.



>
1
????????

Added Hardware/Board/Firenet/channels.numbers/QuickLook/Thumbnail.jpg.

cannot compute difference between binary files

Added Hardware/Board/Firenet/channels.numbers/document-thumbnail.tiff.

cannot compute difference between binary files

Added Hardware/Board/Firenet/channels.numbers/index.xml.gz.

cannot compute difference between binary files

Changes to Hardware/Board/Firenet/eagle.epf.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[Eagle]
Version="05 07 00"
Platform="Mac OS X"
Serial="62191E841E-LSR-WLM-1EL"
Globals="Globals"
Desktop="Desktop"

[Globals]
AutoSaveProject=1
UsedLibrary="/LApps/Eagle/lbr/atmel.lbr"
UsedLibrary="/LApps/Eagle/lbr/battery.lbr"
UsedLibrary="/LApps/Eagle/lbr/capacitor-wima.lbr"
UsedLibrary="/LApps/Eagle/lbr/crystal.lbr"
UsedLibrary="/LApps/Eagle/lbr/diode.lbr"
UsedLibrary="/LApps/Eagle/lbr/frames.lbr"
UsedLibrary="/LApps/Eagle/lbr/fuse.lbr"
UsedLibrary="/LApps/Eagle/lbr/holes.lbr"
UsedLibrary="/LApps/Eagle/lbr/ir.lbr"
UsedLibrary="/LApps/Eagle/lbr/rectifier.lbr"
UsedLibrary="/LApps/Eagle/lbr/ref-packages.lbr"
UsedLibrary="/LApps/Eagle/lbr/relay.lbr"
UsedLibrary="/LApps/Eagle/lbr/resistor-power.lbr"
UsedLibrary="/LApps/Eagle/lbr/supply1.lbr"
UsedLibrary="/LApps/Eagle/lbr/v-reg.lbr"

[Win_1]
Type="Control Panel"
Loc="340 168 939 567"
State=2
Number=0

[Desktop]
Screen="1280 1024"
Window="Win_1"

|







<
<
<
<
<
<
<
<
|
<
<
|
<
<
<



|




|

1
2
3
4
5
6
7
8
9








10


11



12
13
14
15
16
17
18
19
20
21
[Eagle]
Version="06 06 00"
Platform="Mac OS X"
Serial="62191E841E-LSR-WLM-1EL"
Globals="Globals"
Desktop="Desktop"

[Globals]
AutoSaveProject=1








UsedLibrary="/LApps/lbr/con-subd.lbr"


UsedLibrary="/Users/jschimpf/Public/USBSW/Hardware/firenet.lbr"




[Win_1]
Type="Control Panel"
Loc="400 338 999 737"
State=2
Number=0

[Desktop]
Screen="1600 1200"
Window="Win_1"

Changes to Hardware/Board/Firenet/firenet.lbr.

cannot compute difference between binary files

Added Hardware/Board/pcbnotes.txt.





















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
PCB Notes:

	Bring up board
	Pick CAM JOB	- Button on board window
		then
	Once Up pick File->Open Job		Use sfe-gerb274X.cam in L-Apps/Eagle/cam
	
	Note specify file destination for each layer
	Then run process. (i.e. another directory...
	as it picks / and you cannot write there)
	
	Also open the execllon job file L-Apps/Eagle/cam and
	process again to make the drill files
	
	OLD ---Builds the following files:
	
		xxxx.GTL	Top copper
		xxxx.GTS	Top Solder mask
		xxxx.GTO	Top Silkscreen
		xxxx.GBL	Bottom copper
		xxxx.GBS	Bottom Solder mask
		xxxx.GBO	Bottom Silkscreen
		xxxx.TXT	Drill file
		
		Pitch GTP
		
	------------- Eagle 6.60
	Now builds
	FlowI2C.cmp
	FlowI2C.drd
	FlowI2C.plc		- Silk screen
	FlowI2C.sol
	FlowI2C.stc		- Mask top
	FlowI2C.sts		- Mask bottom
	
Discard:
	FlowI2C.dri		- Drill info
	FlowI2C.gpi		- Gerber plot info
		
	Archive all to a zip and send for design rule check
	
	Have size of board for input on form Go to Advanced Circuits 
	then to PCB link on page.
	
	
	Viewer found on VM: Fedora 11 Use Gerbv
						Problem with GBO
						
						
Solder stop Component side (.STC)	= 20 Dimension layer + 29 tStop layer
 Silkscreen Component side (.PLC)	= 20 Dimension layer + 21 tPlace layer + 25 tNames layer
             Componentside (.CMP)	= 1 Top layer + 17 Pads layer + 18 Vias layer + 20 Dimension layer

               Solderside (.SOL)	= 16 Bot layer + 17 Pads layer + 18 Vias layer + 20 Dimension layer
  Solder stop Solder side (.STS)	= 30 bStop layer + 20 Dimension layer
   Silkscreen Solder side (.PLS)	= 22 bPlace layer + 26 bNames layer + 20 Dimension layer

           Excellon drill (.DRD)	= 44 Drills layer + 45 Holes laye

Added Hardware/Boxes/Box_Holes.txt.













































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Box Drill Holes

	Binding Posts	21/64
	LED				7/64
	Phone Jack		15/64
	Lamp Cord		1/4
	
	Lamp cord hole	In 3cm X	Up 1 cm 
	Jack holes		In 3cm X	Up 1 cm
	
	Phone Plug
	
			---------
			|		|
	Tip	-->	0	*	0 <-- Ring
			|		|--0 Shield
			--------
			
			
	Tip		= + NET		RED
	Ring 	= - NET		BLACK
	Shield	=   GND		WHITE

Added Hardware/Boxes/HeavyDutyElectronicsEnclosures.webloc.

cannot compute difference between binary files

Added Hardware/Boxes/sqbox.pdf.

cannot compute difference between binary files

Added Hardware/Notes/LM317CCS.pdf.

cannot compute difference between binary files

Added Hardware/Notes/partsused.txt.









>
>
>
>
1
2
3
4
Needed parts as used...

	1 HEXFET
	1 LM317

Added Hardware/Parts/FTDI_Basic-v13-5V.sch.pdf.

cannot compute difference between binary files

Added Hardware/Parts/atmelavr_hardware.pdf.

cannot compute difference between binary files

Added Hardware/Parts/atmelavr_instructions.pdf.

cannot compute difference between binary files

Added Hardware/Parts/sp481-485_100_072804.pdf.

cannot compute difference between binary files

Added JavaPlanner/Planning/CGen/Quote.java.



>
1
/* 	Quote GENERATION MODULE 	 	14 Feb 1998 Initial creation of Quote generator */  import java.io.*; import java.awt.*; import java.applet.*;  class Quote { 	public static FileOutputStream out_stream;		// Output file 		 	public long in_length; 	public String out_name;  	/***************************************************** 	* 	*  GENERATE ZIP source from site description 	* 	*	INPUT:	base	- site base node 	* 	*	OUTPUT:	TRUE if OK, FALSE if not 	* 	*****************************************************/ 	 	public Quote(AppletFrame win,node base) 	{ 		FileDialog fd; 		FileOutputStream out_stream;	// Output Stream 		PrintStream data_out;			// output data 		 		/*  (1) If Base == NULL quit now */ 		 		if( base == null ) 			return; 						 		/* (2) Open output file */ 		 		fd = new FileDialog(win,"Quote File",FileDialog.SAVE); 		fd.setFile("Quote.txt"); 		fd.show(); 		if( fd.getFile() == null ) 			return; 		win.applet.show(); 		 		// (3) Now Create the output print stream 		 		try{ out_stream = new FileOutputStream( fd.getDirectory() + fd.getFile() ); } 		catch( IOException io ) { return; } 		data_out = new PrintStream(out_stream); 					 		// (4) Now go through the nodes and generate the output data for each 		 		Qgen( base,1,data_out ); 		 		// (5) Close the files and exit 		try{ out_stream.close(); } 		catch( IOException i4 ) {  return; } 							 	}  	/**************************************************************** 	* 	*  node_generate( node n )	- Recursively generate code for LBU's and RELAY's 	* 	*	INPUT:	n	- Current node (generate children) 	* 	*	OUTPUT:	NONE 	*			Generate relay or siteXXX file 	* 	*****************************************************************/ 	 	int Qgen( node n,int item,PrintStream out ) 	{ 		int i; 		 		// (1) Generate the quote for this one  		 		n.select(); 		item = n.Qgen( item,out ); 		n.show(); 		 		// (2) Now generate children 		 		for(i=0; i<n.children.length; i++ ) 		{ 			if( n.children[i] != null ) 			{ 				n.select(); 				item = this.Qgen(n.children[i],item,out ); 				n.show(); 			} 		} 		return( item ); 	} }

Added JavaPlanner/Planning/CGen/cgen.java.



>
1
/* 	CODE GENERATION MODULE 	 	3 Nov 97	 Add code to use different prototypes to store store type of LBU 	4 Nov 97	 Add code to use different prototypes to store store type of RELAY 	20 Jan 98 Add WX types on LBU 	31 Jan 98 Extensive changes to: 			Add UNIT address directives to .zh files 			Add new type relay units */  import java.io.*; import java.awt.*; import java.applet.*;  class cgen { 	public static String prototypes = "Protos";		// Prototype location 	public static String out_location = null;		// Output location 	public static FileInputStream in_stream;		// Input file 	public static FileOutputStream out_stream;		// Output file 	public static AppletFrame win; 	 	public int base_system; 	public int base_unit; 	 	public long in_length; 	public String out_name;  	/******************************************************** 	* 	*  Creator Open the default prototype directory 	* 	********************************************************/ 	 	 	public cgen(AppletFrame f,int x) 	{ 		win = f; 		prototypes = "Protos/"; 	} 	 	/******************************************************** 	* 	*  Creator will find the prototype directory 	* 	********************************************************/ 	 	 	public cgen(AppletFrame f) 	{ 		FileDialog fd; 		 		// Get a file dialog 		 		win = f; 		fd = new FileDialog((Frame)win,"Base Code Proto",FileDialog.LOAD); 		fd.setFile("stddefs.zip"); 		fd.show(); 		if( fd.getFile() != null ) 			prototypes = fd.getDirectory(); 		else 			prototypes = "Protos"; 	} 	 	/***************************************************** 	* 	*  cgenProtoTest()	- Check for prototype area present 	* 	*	INPUT:	NONE 	* 	*	OUTPUT:	TRUE if OK, FALSE if not 	* 	*****************************************************/ 	 	public boolean cgenProtoTest() 	{ 		DataInputStream data_in;		// input data 		boolean result; 		 		data_in = this.open_in("stddefs.zh");		// Check, this file MUST be there ! 		if( data_in != null ) 		{ 			result = true; 			try{ data_in.close(); } 			catch( IOException i3 ) {  return( false ); } 		} 		else 			result = false; 			 		return( result ); 	} 	 	/***************************************************** 	* 	*  GENERATE ZIP source from site description 	* 	*	INPUT:	base	- site base node 	* 	*	OUTPUT:	TRUE if OK, FALSE if not 	* 	*****************************************************/ 	 	public boolean generate(node base) 	{ 		FileDialog fd; 		DataInputStream data_in;		// input data 		PrintStream data_out;			// output data 		int i; 		node p; 		 		/*  (1) If Base == NULL quit now */ 		 		if( base == null ) 			return( false ); 			 		/* (1a) Find parent node */ 		 		p = base; 		while( p.parent != null ) 			p = p.parent; 			 		base_system = p.system; 		base_unit   = p.unit; 			 		/* (2) Ok,  Copy fixed output stuff 				a) Stddefs.zh 				b) base.zip 				c) base.zh 				Have the user specify where to put BASE.ZIP and that is 				where everything else will go 		*/ 		 		fd = new FileDialog(win,"Zip code store",FileDialog.SAVE); 		fd.setFile("stddefs.zh"); 		fd.show(); 		if( fd.getFile() == null ) 			return( false ); 		out_location = fd.getDirectory(); 		win.applet.show(); 					 		// Now open the input and output streams for these files 		// First move STDDEFS since all will need it 		 		base.select();										// Show doing base 		 		data_in = this.open_in("stddefs.zh");				// Move Stddefs  		data_out = this.create_out("stddefs.zh"); 		if( data_in == null || data_out == null ) 		{ 			// FAILURE here - quit now restoring base to full visibility 			base.show(); 			return( false ); 		} 		if( !this.file_copy(data_in,"",data_out) ) 			return( false ); 		 		 		// Generate the code for this unit 		// If successful then do all the children 		 		this.node_generate( base ); 		base.show(); 					 		return( true ); 	}  	/**************************************************************** 	* 	*  node_generate( node n )	- Recursively generate code for LBU's and RELAY's 	* 	*	INPUT:	n	- Current node (generate children) 	* 	*	OUTPUT:	NONE 	*			Generate relay or siteXXX file 	* 	*****************************************************************/ 	 	void node_generate( node n ) 	{ 		int i; 		int type; 		lbu l; 		 		// (1) Generate code for this node 		 		switch( n.node_type() ) { 		 			case node.BASE:			this.base_gen(n); 										n.show(); 										break; 			 			case node.LBU:				n.select(); 										l = (lbu) n; 										this.lbu_gen(l); 										n.show(); 										break; 										 			case node.RELAY:			n.select(); 										this.relay_gen(n); 										n.show(); 										break; 										 			case node.G1: 			case node.G2:				return;		// Quit on these two 			 			default:					return;		// ?? Just quit 			 		} 		 		// (2) Now generate children 		 		for(i=0; i<n.children.length; i++ ) 		{ 			if( n.children[i] != null ) 				this.node_generate( n.children[i] ); 		} 	} 	 	/*************************************************************** 	* 	*  BASE_GEN(lbu n)		- Generate code for BASE 	* 	*	INPUT:	n	- LBU node 	* 	*	OUTPUT:	NONE 	*			Generate base.zip file 	*			Generate base.zh file 	* 	****************************************************************/ 	 	void base_gen(node n) 	{ 		String out_name; 		 		/* (1) Build the output name */ 		 		out_name = "Base" + n.unit; 		 		/* (3) Generate the ZIP file */ 		 		this.base_gen_zip("base.pro",out_name ); 		 		/* (4) Generate the .ZH file */ 		 		 		this.base_gen_zh( n,out_name ); 	}  	/*************************************************************** 	* 	*  BASE_GEN_ZIP(String in_name,String out_name)	- Generate the ZIP file for the BASE 	* 	*	INPUT:	in_name	- PROTOTYPE FILE (i.e. BASE.ZIP....) 	*			out_name	- BASE 	* 	*	OUTPUT:	Output file to BASE.ZIP 	*			to new output location 	* 	****************************************************************/ 	 	boolean base_gen_zip(String in_name,String out_name) 	{ 		DataInputStream data_in;		// input data 		PrintStream data_out;			// output data 		String fline,fname;  		// (1) Build the file line and the include line to be move to the output file 		 		fname = out_name + ".zip"; 		fline = "#include\t\"" + out_name + ".zh\"";  		// (2) Open the channels to the new files 		data_in = this.open_in(in_name);					// Move Base 		data_out = this.create_out(fname); 		if( data_in == null || data_out == null ) 			return( false ); 			 		// (3) Create the new files  		 		if( !this.file_copy(data_in,fline,data_out) ) 			return( false ); 		 		return( true ); 	}  	/*************************************************************** 	* 	*  BASE_GEN_ZH( node n,String out_name)	- Generate the ZH file for the BASE 	* 	*	INPUT:	g2		- TRUE if g2 type 	*			n		- # G1/G2 supported 	*			units	- List of G1/G2 unit numbers 	*			relay	- Relay unit # (-1 if no unit) 	*			period	- LBU period in minutes 	*			system	- System code 	*			out_name	- SITEXXX 	* 	*	OUTPUT:	Output file to SITEXXX.ZH 	*			Pirnt this file to the output 	* 	****************************************************************/ 	 	void base_gen_zh(node n,String out_name) 	{ 		PrintStream data_out; 		int i; 		Progress prog; 		 		// (1) Create output file 		 		data_out = this.create_out(out_name+".zh"); 		prog = new Progress(out_name+".zh",16,win); 		 		// (2) Now print the data to the output file 		 		this.print("* Defines for Base Station",data_out); 		 		// Generate ADDRESS data 		 		this.addr_print( n,data_out ); 		 		// (4) Close the file and quit 		 		prog.dispose(); 		try{ out_stream.close(); } 		catch( IOException i4 ) { return; } 	} 	 	/*************************************************************** 	* 	*  LBU_GEN(lbu n)		- Generate code for an LBU 	* 	*	INPUT:	n	- LBU node 	* 	*	OUTPUT:	NONE 	*			Generate sitexxx.zip file from g1 or g2 site_g1/2.pro 	*			Generate siatexxx.zh file 	* 	****************************************************************/ 	 	void lbu_gen(lbu site) 	{ 		int n = 0;								// # Ghogs supported 		int[] units = new int[node.NODE_MAX];		// Array of GHOG numbers 		String in_name = null;					// Input file to be used 		String type_name = null;				// First part of name 		String out_name = null;				// Output file name 		int i; 		int relay_unit;						// -1 if no relay station 												// Otherwise address of relay 		int type;								// LBU type 		 		boolean g2_type = false; 		 		/* (2) Determine type of LBU we have here */ 		 		switch( site.get_lbu_type() ) { 			 			case lbu.STANDARD:			type_name = "site_"; 										break; 								 			case lbu.SITE_BASE:		type_name = "site_base_"; 										break; 								 			case lbu.SITE_BASE_MODEM:	type_name = "site_base_modem_"; 										break;  			case lbu.STANDARD_WX:		type_name = "site_wx_"; 										break;  			case lbu.SITE_BASE_WX:		type_name = "site_base_wx_"; 										break;  			case lbu.SITE_BASE_MODEM_WX:	type_name = "site_base_modem_wx_"; 										break; 									 			default:					type_name = "site_"; 										break; 		}  		/* (2)  Determine # and type of supported units - First one determines the lot */ 		 		for( i=0; i<site.children.length; i++) 		{ 			if( site.children[i] != null ) 			{ 				units[n++] = site.children[i].unit; 				if( in_name == null ) 				{ 					switch( site.children[i].node_type() ) { 						 						case node.G1:			in_name = type_name + "g1.pro"; 												g2_type = false; 												break; 												 						case node.G2:			in_name = type_name + "g2.pro"; 												g2_type = true; 												break; 											 						default:				in_name = type_name + "g2.pro"; 												g2_type = false; 												break; 					} 				} 			} 		} 		if( n == 0 ) 			return;			// No Ghogs ! 		 		/* (2) Build the output name */ 		 		out_name = "Site" + site.unit; 		 		/* (3) Generate the ZIP file */ 		 		this.lbu_gen_zip(in_name,out_name ); 		 		/* (4) Generate the .ZH file 			Note: Determine if we are sending to relay station and if so it's 			address 		*/ 		 		switch( site.parent.node_type() ) { 			 			case node.RELAY:				relay_unit = site.parent.unit; 											break; 											 			default:						relay_unit = -1; 		} 		 		this.lbu_gen_zh( site,g2_type,n,units,relay_unit,site.period,out_name ); 	} 	 	/*************************************************************** 	* 	*  LBU_GEN_ZIP(String in_name,String out_name)	- Generate the ZIP file for the LBU 	* 	*	INPUT:	in_name	- PROTOTYPE file 	*					Note: 1 line in file = #include\t########## 	*						must be changed to #include\t"<out_name>.zh" 	*			out_name	- SITEXXX 	* 	*	OUTPUT:	Output file to SITEXXX.ZIP 	*			with new include line 	* 	****************************************************************/ 	 	void lbu_gen_zip(String in_name,String out_name) 	{ 		DataInputStream data_in;		// input data 		PrintStream data_out;			// output data 		String fname,fline; 		 		// (1) Build the file line and the include line to be move to the output file 		 		fname = out_name + ".zip"; 		fline = "#include\t\"" + out_name + ".zh\""; 		 		// (2) Open the input and output channels		  		data_in = this.open_in(in_name);						// Prototype file 		data_out = this.create_out(fname);					// Output zip file 		if( data_in == null || data_out == null ) 			return; 		 		// (3) Copy the data 		 		this.file_copy(data_in,fline,data_out); 	}  	/*************************************************************** 	* 	*  LBU_GEN_ZH(lbu l,boolean g2,int n,int[] units,int relay,String out_name)	- Generate the ZH file for the LBU 	* 	*	INPUT:	l		- LBU node  	*			g2		- TRUE if g2 type 	*			n		- # G1/G2 supported 	*			units	- List of G1/G2 unit numbers 	*			relay	- Relay unit # (-1 if no unit) 	*			period	- LBU period in minutes 	*			out_name	- SITEXXX 	* 	*	OUTPUT:	Output file to SITEXXX.ZH 	*			Pirnt this file to the output 	* 	****************************************************************/ 	 	void lbu_gen_zh(lbu l,boolean g2, 					int n,int[] units, 					int relay,int period, 					String out_name) 	{ 		Integerf oi = new Integerf(); 		PrintStream data_out; 		int i; 		Progress prog; 		 		// (1) Create output file 		 		data_out = this.create_out(out_name+".zh"); 		prog = new Progress(out_name+".zh",16,win); 		 		// (2) Now print the data to the output file 	 		this.print("* Defines for Site Station",data_out); 		 		// Generate ADDRESS data 		 		this.addr_print( (node) l,data_out ); 		 		// Generate the rest 		 		this.print("#define\tPERIOD_CNT\t"+period,data_out); 		this.print("#define\tMASTER_UNIT\t"+oi.toString16fle( base_unit ),data_out); 		this.print("#define\tMASTER_SYSTEM\t"+oi.toString16fle( base_system ),data_out); 		if( relay > 0 ) 		{ 			this.print("#define\tRELAY_TYPE\t1",data_out); 			this.print("#define\tRELAY_UNIT\t"+oi.toString16fle( relay ),data_out); 		} 		else 		{ 			this.print(" ",data_out);		// On NO RELAY print nothing here 			if( g2 == true )				// If G2 type then print RELAY_UNIT but with base addr 					this.print("#define\tRELAY_UNIT\t"+oi.toString16fle( base_unit ),data_out);  		} 		 		// (3) Print the unit list 		 		this.print("* SUPPORTED GHOG UNITS",data_out); 		this.print("#define\tDATA_MAX_UNITS\t"+n,data_out); 		 		for( i=0; i<n; i++) 		{ 			this.print("#define\tSITE"+i+"\t"+oi.toString16fle(units[i]),data_out); 			prog.update( i ); 		} 		for( ; i<node.NODE_MAX; i++ ) 		{ 				this.print("#define\tSITE"+i+"\t"+oi.toString16fle(0xffff),data_out); 				prog.update( i ); 		}  		// (4) Close the file and quit 		 		prog.dispose(); 		try{ out_stream.close(); } 		catch( IOException i4 ) { return; } 	} 	 	/*************************************************************** 	* 	*  RELAY_GEN(node n)		- Generate code for an LBU 	* 	*	INPUT:	n	- RELAY node 	* 	*	OUTPUT:	NONE 	*			Generate relayxxx.zip file from g1 or g2 site_g1/2.pro 	*			Generate relayxxx.zh file 	* 	****************************************************************/ 	 	void relay_gen(node site) 	{ 		int n = 0;									// # Paths supported 		int parent; 		int[] dest		 = new int[node.NODE_MAX];		//  Local msg target 		int[] udest     = new int[node.NODE_MAX];		// Ultimate destinations 		String out_name = null;					// Output file name 		int i; 		relay r;  		/* (1)  First destination - base station and parent 		            These might be the same 		*/ 		 		udest[n] = base_unit;				// Base station ultimate target 		dest[n++] = site.parent.unit;		// Get there via parent 		 		/* (2) Now do the same with the children 		           the children units are the destination 		           but the LBU's on this path are the ultimate destination 		 */ 		 		for( i=0; i<site.children.length; i++ ) 		{ 			if( site.children[i] != null ) 			{ 				dest[n] = site.children[i].unit;		// Proximate unit address 				n = this.find_dests(site.children[i],n,dest,udest);	// Recursively find LBU's 			} 		}  		/* (3) Build the output name */ 		 		out_name = "Relay" + site.unit; 		 		/* (4) Build the various types of code */ 		 		r = (relay) site; 		 		switch( r.relay_type ) { 			 		case relay.RELAY_STANDARD: 									this.relay_gen_zip( out_name ); 									this.relay_gen_zh( site,n,dest,udest,out_name); 									break; 									 		case relay.RELAY_MODEM: 									this.base_gen_zip( "base_modem.pro",out_name); 									this.base_gen_zh( site,out_name ); 									break; 									 		case relay.RELAY_BASE: 									this.base_gen_zip( "base.pro",out_name); 									this.base_gen_zh( site,out_name ); 									break; 									 		} 	} 	 	/**************************************************************** 	* 	*  FIND_DESTS(node s,int n,int[] dest,int [] udest) 	* 	*	INPUT:	s	- Starting node for search (child of relay) 	*			n	- # Dests/udests found so far 	*			dest	- List of proximate destinations for relay data dest[n] = current proximate 	*			udest- List of ultimate destinations for relay data udest[n] not filled in yet 	* 	*	OUTPUT:	n	- New count of relay mapping locations 	* 	*	Method:	Make each child part of the DEST list 	*				If child = LBU then make address UDEST 	*				If child = RELAY then search children for LBU's (recursively) 	* 	*****************************************************************/ 	 	public int find_dests( node s,int n, int[] dest,int[] udest ) 	{ 		int i; 				 		// (1) Depending on type get ultimate destination 		 		switch( s.node_type() ) { 			 			case node.LBU:				udest[n++] = s.unit; 										dest[n] = dest[n-1];		// Advance prox dest 										return( n ); 										 			case node.RELAY:			for( i=0; i<s.children.length; i++ ) 										{ 											if( s.children[i] != null ) 											{ 												n = this.find_dests(s.children[i], 																	 n, 																	 dest, 																	 udest); 											} 										} 		} 		 		return( n ); 	} 	 	/*************************************************************** 	* 	*  RELAY_GEN_ZIP(String out_name)	- Generate the ZIP file for the LBU 	* 	*	INPUT:	out_name	- RELAYXXX 	* 	*	OUTPUT:	Output file to RELAYXXX.ZIP 	*			with new include line 	* 	****************************************************************/ 	 	void relay_gen_zip(String out_name) 	{ 		DataInputStream data_in;		// input data 		PrintStream data_out;			// output data 		String fname,fline; 		 		// (1) Build the file line and the include line to be move to the output file 		 		fname = out_name + ".zip"; 		fline = "#include\t\"" + out_name + ".zh\""; 		 		// (2) Open the input and output channels		  		data_in = this.open_in("Relay.pro");						// Prototype file 		data_out = this.create_out(fname);					// Output zip file 		if( data_in == null || data_out == null ) 			return; 		 		// (3) Copy the data 		 		file_copy(data_in,fline,data_out); 	}  	/*************************************************************** 	* 	*  RELAY_GEN_ZH(note r,int n,int[] dest,int[] udest,,String out_name)	- Generate the ZH file for the RELAY 	* 	*	INPUT:	r		- Relay node 	*			n		- # Items in routing table 	*			dest		- Local proximate destinations for routing table 	*			udest	- Ultimate destinations for routing table 	*			out_name	- SITEXXX 	* 	*	OUTPUT:	Output file to RELAYXXX.ZH 	*			Pirnt this file to the output 	* 	****************************************************************/ 	 	void relay_gen_zh(node r,int n,int[] dest,int[] udest,String out_name) 	{ 		Integerf oi = new Integerf(); 		PrintStream data_out; 		int i; 		Progress prog; 		 		// (1) Create output file 		 		data_out = this.create_out(out_name+".zh"); 		prog = new Progress( out_name+".zh",15,win); 		 		// (2) Now print the data to the output file  		 		this.print("* Defines for Relay Station",data_out); 		 		// Generate the address data 		 		this.addr_print( r,data_out ); 		 		this.print("*Site defines for "+out_name,data_out); 		this.print("#define\tSYS_CODE\t"+oi.toString16fle( base_system ),data_out); 		 		// (3) Print the unit list 		 		this.print("* ROUTING TABLE",data_out); 		 		for( i=0; i<n; i++) 		{ 			this.print("#define\tFROM"+i+"\t"+oi.toString16fle(udest[i]),data_out); 			this.print("#define\tTO"+i+"\t"+oi.toString16fle(dest[i]),data_out); 			prog.update( i ); 		} 		for( ; i<15; i++ ) 		{ 			this.print("#define\tFROM"+i+"\t"+oi.toString16fle(0xffff),data_out); 			this.print("#define\tTO"+i+"\t"+oi.toString16fle(0),data_out); 			prog.update(i); 		} 	  		// (4) Close the file and quit 		 		prog.dispose(); 		try{ out_stream.close(); } 		catch( IOException i4 ) { return; } 	} 	 	/**************************************************************** 	*				*** LOW LEVEL FILE HANDLERS *** 	****************************************************************/ 	/**************************************************************** 	* 	*  void ADDR_PRINT( node n )	- Print ADDRESS program direction lines 	* 	*	INPUT:	n	- Node  	* 	*	OUTPUT:	NONE 	*			Print #UNIT_ADDRESS <Unit code> 	*				  #UNIT_SYSTEM <System code> 	* 	*****************************************************************/ 	 	void addr_print( node n,PrintStream out ) 	{ 		this.print("#UNIT_ADDRESS\t"+n.unit,out); 		this.print("#UNIT_SYSTEM\t"+n.system,out); 	} 	 	/**************************************************************** 	* 	*  open_in(String name)		- Get an open stream on this file in the input directory 	* 	*	INPUT:	name	- Name of file to open 	* 	*	OUTPUT:	FileInputStream if OK or NULL if not 	* 	****************************************************************/ 	 	DataInputStream open_in( String name ) 	{ 		String nm; 		DataInputStream is; 		File f; 	 		// (1) Build the full file name 		 		nm = prototypes + name; 	 		/* (0) Get the length of the file */ 		 		try{ f = new File( nm ); } 		catch( NullPointerException np) { return( null ); } 		in_length = f.length(); 		 		// (2) Built the input stream if possible 		 		try{ in_stream = new FileInputStream( nm); } 		catch( FileNotFoundException i1 ) { return( null ); } 		//catch( IOException io ) { return( null ); } 		 		// (3) Build the input stream 		 		is = new DataInputStream(in_stream); 		 		return( is ); 	}  	/**************************************************************** 	* 	*  create_out(String name)		- Create an output file 	* 	*	INPUT:	name	- Name of file to create 	* 	*	OUTPUT:	PrintStream if OK, NULL if not 	* 	****************************************************************/ 	 	PrintStream create_out( String name ) 	{ 		String nm; 		PrintStream os; 		 		// (1) Build the full file name 		 		nm = out_location + name; 		out_name = name; 		 		// (2) Built the outputstream if possible 		 		try{ out_stream = new FileOutputStream( nm ); } 		catch( IOException io ) { return( null ); } 		 		// (3) Build the print stream 		 		os = new PrintStream(out_stream); 		 		return( os ); 	} 	 	/**************************************************************** 	* 	*  boolean file_copy(FileInputStream in,String fline,PrintStream out)	- Copy the file from in to out 	* 	*	INPUT:	in	- Input file 	*			fline - Modified file line 	*			out	- Output file 	* 	*	OUTPUT:	TRUE if OK, FALSE if not 	*			both files closed on return 	*			Put fline in output file in place of line containing 10 #'s 	* 	****************************************************************/ 	 	boolean file_copy( DataInputStream ins,String fline,PrintStream outs ) 	{ 		String line = null; 		Progress prog; 		int amt = 0; 		 		// First build a progress bar and  		 		prog = new Progress(out_name,(int)in_length,(Frame)win); 		 		// Copy data from input to output till NULL returned 		 		while( true ) 		{ 			try{ line = ins.readLine(); } 			catch( IOException io ) {		// Problem close both files and return 			 				try{ in_stream.close(); } 				catch( IOException i1 ) { prog.dispose(); return( false ); } 				 				try{ out_stream.close(); } 				catch( IOException i2 ) {  prog.dispose(); return( false ); } 			} 			 			if( line == null )		// EOF 				break; 				 			// Is this a modified line ? 			 			if( fline.length() > 0 && line.indexOf( "##########" ) > 0 ) 				line = fline;			// YES - Modify 				 			this.print(line,outs);		// Dos termination 			amt += line.length() + 2; 			prog.update( amt ); 		 		} 		 		// Done OK, close the files for return 		 		try{ in_stream.close(); } 		catch( IOException i3 ) {  prog.dispose(); return( false ); } 		 		try{ out_stream.close(); } 		catch( IOException i4 ) {  prog.dispose(); return( false ); }  		prog.dispose();   		return( true );				// Done OK 	} 	 	void print(String line,PrintStream out) 	{ 			out.print( line ); 			out.print( "\r\n");		// Dos termination 	} 			 } 	

Added JavaPlanner/Planning/DrawSupport/Alert.java.

















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.applet.Applet;
import java.awt.*;
//import InfoDialog.*;

public class Alert
{
	public InfoDialog err;
	public static int init_psn = 50;
	
	public Alert( String name,String message)
	{
			Frame f = new Frame("");
			f.reshape(init_psn,init_psn,100, 100);
			init_psn += 10;
			err = new InfoDialog( f,name,message,true);
			if( err != null )
			{
				err.move(init_psn,init_psn);
				err.show();
			}
			f.dispose();
	}
}

Added JavaPlanner/Planning/DrawSupport/InfoDialog.java.



>
1
// This example is from the book _Java in a Nutshell_ by David Flanagan. // Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates. // You may study, use, modify, and distribute this example for any purpose. // This example is provided WITHOUT WARRANTY either expressed or implied.  import java.awt.*;  public class InfoDialog extends Dialog  { 	protected Button button; 	protected MultiLineLabel label; 	boolean dismissed = false; 	 	// Add MODAL flag !!! 	public InfoDialog( Frame parent,String title, String message,boolean modal) 	{ 		// Create a dialog with the specified title 		super(parent, title, modal); 		 		// Create and use a BorderLayout manager with specified margins 		this.setLayout(new BorderLayout(15, 15)); 		 		// Create the message component and add it to the window 		label = new MultiLineLabel(message, 20, 20); 		this.add("Center", label); 		 		// Create an Okay button in a Panel; add the Panel to the window 		// Use a FlowLayout to center the button and give it margins. 		button = new Button("OK"); 		Panel p = new Panel(); 		p.setLayout(new FlowLayout(FlowLayout.CENTER, 15, 15)); 		p.add(button); 		this.add("South", p); 		 		// Resize the window to the preferred size of its components 		this.pack(); 	} 	 	// Pop down the window when the button is clicked. 	public boolean action(Event e, Object arg) 	{ 		if (e.target == button)  		{ 			this.hide(); 			this.dispose(); 			dismissed = true; 			return true; 		} 		else return false; 	} 	 	// When the window gets the keyboard focus, give it to the button. 	// This allows keyboard shortcuts to pop down the dialog. 	public boolean gotFocus(Event e, Object arg)  	{ 		button.requestFocus(); 		return true; 	} 	 	public boolean done() 	{ 		return( dismissed ); 	} 	 }

Added JavaPlanner/Planning/DrawSupport/metric.java.



>
1
import java.applet.Applet; import java.awt.*;  /************************************************************ * *  METRIC - Helper object used to find minimum distance to connections between *		   nodes * ************************************************************/  public class metric  {  	public int x1,x2,y1,y2; 	 	 	// Here find the shortest of 16 possible connections between  	// the node n1 and node n2 	// Each has a box of size with the upper left corner = draw_x,draw_y 	// Make a connection point at the center of each side of the box 	 	public metric( node n1,node n2) 	{ 		int i,j; 		double d,min_d; 		double dx1,dx2,dy1,dy2; 		double dsize1,dsize2; 		 		//  Double loop to try all distances 		 		dx1 = 0.0; 		dy1 = 0.0; 		dx2 = 0.0; 		dy2 = 0.0; 		 		dsize1 = n1.size; 		dsize2 = n2.size; 		 		min_d = -1; 		for( i=0; i<4; i++ ) 		{ 			switch( i ) { 				 				case 0:	dx1 = (n1.draw_x + dsize1/2); 							dy1 = n1.draw_y; 							break; 							 				case 1:	dx1 = n1.draw_x; 							dy1 = (n1.draw_y + dsize1/2); 							break; 							 				case 2:	dx1 = (n1.draw_x + dsize1/2); 							dy1 = (n1.draw_y + dsize1); 							break; 							 				case 3:	dx1 = (n1.draw_x + dsize1); 							dy1 = (n1.draw_y + dsize1/2); 							break; 				} 				 			for( j=0; j<4; j++) 			{ 				switch( j ) { 					 					case 0:	dx2 = (double) n2.draw_x  + (double) dsize2/2; 								dy2 = (double) n2.draw_y; 								break; 								 					case 1:	dx2 = (double) n2.draw_x; 								dy2 = (double) n2.draw_y + (double) dsize2/2; 								break; 								 					case 2:	dx2 = (double) n2.draw_x  + (double) dsize2/2; 								dy2 = (double) n2.draw_y + (double) dsize2; 								break; 								 					case 3:	dx2 = (double) n2.draw_x + (double) dsize2; 								dy2 = (double) n2.draw_y + (double) dsize2/2; 								break; 				}  				// Now compute distance ** 2 (no need to take sqrt) 				 				d = ((dx1 - dx2)*(dx1 - dx2)) + ((dy1 - dy2)*(dy1 - dy2)); 				 				// Find the minimum 				 				if( min_d < 0 || min_d > d ) 				{ 					min_d = d; 					x1 = (int)(dx1 + 0.5); 					x2 = (int)(dx2 + 0.5); 					y1 = (int)(dy1 + 0.5); 					y2 = (int)(dy2 + 0.5); 				} 			} 		} 	} }

Added JavaPlanner/Planning/File/kvpToken.java.































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/*

	Key value pair file tokenizer
	This extends the stream tokenizer
	
	9 Oct 97 Added UNGET KVP
*/

import java.io.*;
import java.util.Hashtable;

class kvpToken extends StreamTokenizer
{
	public Hashtable keys;
	
	public int key;				// Returned key number
	public String value;			// Returned value
	
	public boolean ungotten = false;
	
	public static final int KVP_BAD_KEY			=	-100;
	public static final int KVP_BAD_VALUE		=	-101;
	
	public static final int KVP_QUOTE			= 0x22;		// " character
	
	/*******************************************************
	*
	*  CONSTRUCTOR - Pass in INPUT Stream & key list
	*
	*	Set up for QUOTE = "
	*			WS      = 0x00 through 0x20
	*                     Word chrs 0x21 through 0x7F
	*			Parse numbers
	*			Comment = *
	*
	*******************************************************/
	
	public kvpToken( InputStream i,String key_list[] )
	{
		super( i );		// Normal setup
		
		// Now set quote and stuff
		
		this.quoteChar(KVP_QUOTE);
		this.whitespaceChars(0x00,0x20);
		this.wordChars(0x30,0x7f);
		this.parseNumbers();
		
		// Build the hashtable for the keys

		int j;
		Integer ky;		
		keys = new Hashtable(key_list.length);
		for( j=0; j<key_list.length; j++ )
		{
			ky = new Integer( j );
			try{ keys.put((Object)key_list[j],(Object)ky); }
			catch( NullPointerException np )
			{
				return;
			}
		}
		
		ungotten = false;		// No ungets
	}

	/*******************************************************
	*
	*  CONSTRUCTOR II - Pass in INPUT Stream 
	*
	*
	*******************************************************/
	
	public kvpToken( InputStream i )
	{
		super( i );		// Normal setup
	}

	/*******************************************************
	*
	*  initKeys(key_list)	- Initialize key list
	*
	*		INPUT:	key_list	- Key list for key value pair
	*
	*		OUTPUT:	NONE
	*				Hash table created
	*
	*******************************************************/
	
	public void initKeys( String key_list[] )
	{
		int j;
			
	// Now set quote and stuff
		
		this.quoteChar(KVP_QUOTE);
		this.whitespaceChars(0x00,0x20);
		this.wordChars(0x30,0x7f);
		this.parseNumbers();
		
		// Build the hashtable for the keys

		Integer ky;		
		keys = new Hashtable(key_list.length);
		for( j=0; j<key_list.length; j++ )
		{
			ky = new Integer( j );
			try{ keys.put((Object)key_list[j],(Object)ky); }
			catch( NullPointerException np )
			{
				return;
			}
		}
	}
	
	/*******************************************************
	*
	*  nextKvp()		- Get next key value pair
	*
	*	INPUT:	NONE	(assumed open stream)
	*
	*	OUTPUT:	TT_EOF if end of file hit
	*			Otherwise return key #
	*
	*******************************************************/
	
	public int nextKvp()
	{	
		Integer ky;
		int type;
		
		if( ungotten )
		{
			ungotten = false;		// Remove it then return old type
			return( key );
		}
			
		// Get the key token
		
		type = this.getToken();
		if( type != StreamTokenizer.TT_WORD )
			return( StreamTokenizer.TT_EOF );		// Failure return EOF
		
		// Find the key value
		
		try{ keys.contains( (Object)sval ); }
		catch( NullPointerException np) {
				return( StreamTokenizer.TT_EOF );
		}
		
		ky = (Integer)keys.get( (Object)sval );
		key = ky.intValue();
					
		// Get the value token 
		
		type = getToken();
		switch( type ) {
			
			case KVP_QUOTE:
			case StreamTokenizer.TT_NUMBER:
			case StreamTokenizer.TT_WORD:		return( key );
		
			default:		return( StreamTokenizer.TT_EOF );
		}
	}
	
	/*******************************************************
	*
	*  ungetKvp()		- Unget the last one
	*
	*	INPUT:	NONE	(assumed open stream)
	*
	*	OUTPUT:	Return last Key/Value pair
	*
	*******************************************************/
	
	public void ungetKvp()
	{	
		if( ungotten == false )
			ungotten = true;
	}
	
	/*******************************************************
	*
	*  getToken( )		- Return next token type from stream
	*
	*	INPUT:	token stream
	*
	*	OUTPUT:	Current token type
	*
	*******************************************************/
	
	public int getToken( )
	{
		// Do all the stuff needed to handle getting a token
		
			try{ this.nextToken(); }
			catch( IOException io ) 
			{
				return( StreamTokenizer.TT_EOF );
			}
			
			// We have one so return the type
			
			return( ttype );
	}
}

Added JavaPlanner/Planning/File/nodeStream.java.



>
1
/* *  PLOADER - Read the site plan from a text file *	This interperts a stream into nodes *      29 Sept 97 Psn correction for display offset *	  9 Oct 97 Use UNGET and just loop for data input *	  3 Nov 97 Add LBU type *	16-Feb-98 Add G2 type */  import java.io.*; import java.awt.*; import java.util.Date; import java.applet.Applet;  // This class returns nodes from an I/O stream  public class nodeStream extends kvpToken  {  	// Key value list for NODE type file 	 	public final String[] key_list = { 	"TYPE:", 											"LEVEL:", 											"PSNX:", 											"PSNY:", 											"CREATED:", 											"NAME:", 											"ADDRESS:", 											"PHONE:", 											"FAX:", 											"LOCATION:", 											"SYSTEM:", 											"UNIT:", 											"PERIOD:", 											"LTYPE:"}; 	public final int PL_TYPE		= 0; 	public final int PL_LEVEL		= 1; 	public final int PL_PSNX		= 2; 	public final int PL_PSNY		= 3; 	public final int PL_CREATED		= 4; 	public final int PL_NAME		= 5; 	public final int PL_ADDRESS		= 6; 	public final int PL_PHONE		= 7; 	public final int PL_FAX			= 8; 	public final int PL_LOCATION	= 9; 	public final int PL_SYSTEM		= 10; 	public final int PL_UNIT		= 11; 	public final int PL_PERIOD		= 12; 	public final int PL_LTYPE		= 13; 	 	public final String[] node_list = { "BASE",		// List of node types 											"RELAY", 											"LBU", 											"G1", 											"G2", 											"SITE" 		// MAKE LAST 										}; 										 	public node n;							// Returing node structure; 	public boolean ispushed = false;	// TRUE if there is a pushed value 	public Canvas dw;						// Applet canvas  	// Header values - read from SITE level 	private String sphone,sfax;		// Values from header 	private String saddress,sname; 	 	// Item header vars filled in by call to get head 	 	private int ntype;				// Node type 	private int unit,system;			// Node ID 	private int period;				// Node period 	private int ltype;				// Lbu type 	public int level;					// Site drawing level 	private int x,y;					// X,Y position 	 	// Node body vars 	 	private String location; 	 	 	/******************************************************* 	* 	*  CONSTRUCTOR - Pass node key list to kvpToken parent 	* 	*******************************************************/ 	 	public nodeStream( InputStream i ) 	{ 		super( i );		// Normal setup  		// Now set up key list 		 		this.initKeys(key_list); 		 	} 	 	/****************************************************** 	* 	*  INIT()	- Initialize for run 	* 	*	INPUT:	w		- Applet canvas from caller 	*			Read first record from file 	* 	*	OUTPUT:	FALSE if file not read correctly 	*			TRUE if ok and set local vars with header values 	* 	******************************************************/ 	 	public boolean init(Canvas w) 	{ 		int type; 		boolean run = true; 		 		// Init pushed stuff & lock in window 		 		ispushed = false; 		dw = w; 		 		// First get the first line - just ignore it  		 		if( this.getHeader() == -1 ) 			return( false ); 		 		// Now get the Site information 		 		while( run ) 		{ 			type = this.nextKvp(); 			switch( type ) { 				 				case PL_CREATED:			break;		// Just ignore 				 				case PL_NAME:				sname = this.sval; 											break; 											 				case PL_ADDRESS:			saddress = this.sval; 											break; 											 				case PL_PHONE:				sphone = this.sval; 											break; 											 				case PL_FAX:				sfax = this.sval; 											break; 											 				default:					this.ungetKvp(); 											run = false; 											break; 			} 		} 		 		return( true ); 	}  	/****************************************************** 	* 	*  getNode()	- Get next or pushed node 	* 	*	INPUT:	NONE	- Input from file 	* 	*	OUTPUT:	Node level for either just read or pushed node 	*			-1 if EOF or file failure 	*			NOTE: Node is this.n 	* 	******************************************************/ 	 	public int getNode() 	{ 		lbu l; 		relay r; 		G2 g; 		 			// Is this a pushed node ? 			// If pushed just return current stuff 			 		if( ispushed == true ) 		{ 			ispushed = false;			// Clear pushed 			return( level ); 		} 						 		// Build the node 		 		switch( this.getNitems() ) { 			 			case node.BASE:	n = new base(); 								break; 								 			case node.RELAY:	n = new relay(); 								break; 								 			case node.LBU:		n = new lbu(); 								break; 								 			case node.G1:		n = new G1(); 								break; 								 			case node.G2:		n = new G2(); 								break; 					 			case -1:			 			default:			return( -1 );		// EOF Exit 		} 		 		// Fill in node data 		 		// NOTE: Correct for origin offset 		n.create_full(x+node.org_x,y+node.org_y,system,unit,dw); 		n.site_name = sname; 		n.site_address = saddress; 		n.location = location; 		n.phone = sphone; 		n.fax = sfax; 		 		if( n instanceof lbu ) 		{ 			l = (lbu)n; 			l.period = period; 			l.lbu_type = ltype; 		} 				 		if( n instanceof relay ) 		{ 			r = (relay)n; 			r.relay_type = ltype; 		} 		if( n instanceof G2 ) 		{ 			g = (G2)n; 			g.g2_type = ltype; 		} 		 		return( level); 	} 	 	/******************************************************* 	* 	*  ungetNode()		- Push the last read node to allow re-read 	* 	*******************************************************/ 	 	public void ungetNode() 	{ 		if( n != null && ispushed != true ) 			ispushed = true; 	} 	 	/******************************************************* 	* 	*  getItem(kvpToken fp)				- Get all items at a node 	* 	*	INPUT:	NONE 	* 	*	OUTPUT:	Type of node or -1 if problem 	*			Put all the node values in instance vars 	* 	*******************************************************/ 	 	public int getNitems() 	{ 		int type; 		boolean run = true; 		 		// (1) Get the header information 		 		type = this.getHeader(); 		if( type == -1 ) 			return( -1 );			// Problem !!! 			 		// (2) Now get the location, system and unit codes 		 		while( run ) 		{ 			switch( this.nextKvp() ) { 				 				case PL_LOCATION:		location = this.sval; 										break; 										 				case PL_SYSTEM:		system = (int)this.nval; 										break; 										 				case PL_UNIT:			unit = (int)this.nval; 										break; 										 				case PL_PERIOD:		period = (int)this.nval; 										break; 										 				case PL_LTYPE:			ltype = (int)this.nval; 										break; 				 				// This will allow reads of files without PERIOD 				default:				this.ungetKvp(); 										run = false; 										break; 			} 		} 		return( type ); 	} 		 	/******************************************************* 	* 	*  getHeader(  )	- Fill in item header information 	* 	*	INPUT:	NONE 	* 	*	OUTPUT:	Type of node 	* 	********************************************************/ 	 	public int getHeader() 	{ 		boolean run = true; 		int type = -1; 		int item_count = 0; 		 		// Read the 4 header items and store in vars 		 		while( run ) 		{ 			type = this.nextKvp(); 			switch( type ) 			{ 				case PL_TYPE:		ntype = getNtype( this.sval ); 									if( ntype < 0 ) 											return( -1 );	// Bad type 									item_count++; 									break; 									 				case PL_LEVEL:		level = (int)this.nval; 									item_count++; 									break; 									 				case PL_PSNX:		x = (int)this.nval; 									item_count++; 									break; 									 				case PL_PSNY:		y = (int)this.nval; 									item_count++; 									break; 									 				default:			this.ungetKvp(); 									run = false; 									break; 			} 		} 			 			// Was everything read ? 			 			if( item_count == 4 ) 				return( ntype ); 			else 				return( -1 );		// Something was read twice 	} 	 	/******************************************************** 	* 	*  getNtype(String name)	- Return node type from name 	* 	*	INPUT:	Node type as a string 	* 	*	OUTPUT:	Node id number or -1 if not found 	* 	********************************************************/ 	 	public int getNtype( String name ) 	{ 		int i; 		 		for( i=0; i<node_list.length; i++ ) 		{ 			if( name.equals(node_list[i]) ) 				return( i ); 		} 		 		// Failure return -1 		 		return( -1 ); 	} } 			

Added JavaPlanner/Planning/File/ploader.java.



>
1
/* *  PLOADER - Read the site plan from a text file  	3 Nov 97 Handle LBU type's *	16-Feb-98 Add G2 type */  import java.io.*; import java.awt.*; import java.util.Date; import java.applet.Applet;  public class ploader  { 	public String name; 	public nodeStream fp; 	public node base = null; 	 	/******************************************************* 	* 	* CONSTRUCTOR - FIND THE FILE 	* 	*******************************************************/ 	 	public ploader(Frame f) 	{ 		FileDialog fd; 		String dir; 		 		// Get a file dialog 		 		fd = new FileDialog(f,"Load Plan",FileDialog.LOAD); 		fd.setFile("site_plan.txt"); 		fd.show(); 		name = fd.getFile(); 		dir = fd.getDirectory(); 		if( name != null ) 			f.setTitle( name ); 			 		name = dir + "/"+name;			// NOTE: NON-MAC type separators 	} 	 	public ploader(String nm) 	{ 		name = "Images/"+ nm;		// Just look in images 	} 	 	/****************************************************** 	* 	*  LOAD()		- This does the heavy lifting of doing a recursive descent 	*			          parser of the load file 	* 	*	INPUT:	Applet Canvas for display 	*			File name to be read 	* 	*	OUTPUT: BASE Station structure pointer or NULL if nothing done 	* 	*******************************************************/ 	 	public node load(Canvas win) 	{ 		FileInputStream is; 		 		// (1) If no file name just return null 		 		if( name == null ) 			return( null ); 			 		// (2) Ok, try to create the input stream for the file 		 		try{ is = new FileInputStream( name ); } 		catch( IOException io ) { return( null ); } 		 		// (3) Start node reader and if bad file exit now 		 		fp = new nodeStream( is); 		if( fp.init(win) == true ) 			this.getNode(fp,fp.level+1,null);			// Read in node tree 		 		// (5) Close the file and return if problem wipe data 		 		try{ is.close(); } 			catch(IOException io ){ base = null; } 			 		return( base ); 	} 	 	 	/******************************************************* 	* 	* getNode(nodeStream fp,int lev,node parent,)		- Parse file and build nodes 	* 	*	INPUT:	fp		- Open file 	*			lev		- Current depth in site 	*			parent	- Parent node 	* 	*	OUTPUT:	null if EOF hit 	*			Otherwise node make here 	*			Do all the nodes on on level 	*			NODE: Level is an instance var 	* 	*******************************************************/ 	 	node getNode( nodeStream fp, int lev, node parent) 	{ 		int level; 		node n = null; 		 		// Loop here to exhaust items at this level 		 		while( true ) 		{ 			level = fp.getNode(); 			if( level == -1 ) 				return( null );			// EOF or file problem 			 			// ********* Now decide what to do **** 			// If this is on the same level make it a sibling 			if( lev == level ) 			{ 				n = fp.n; 				fp.n.add_parent( parent ); 				if( parent != null ) 				{ 					parent.add_child( fp.n ); 					parent.show(); 				} 				else 					base = n;			// Attach base 			} 			 			// If this lower make it a child 			if( lev < level ) 			{ 				if( n == null ) 					return( null );			// Problem here !!!! 				 				fp.ungetNode();					// Push present node 				if( this.getNode( fp,(lev+1),n) == null ) 					return( n ); 			} 			 			// If higher then return current node and unget the last one 			 			if( lev > level ) 			{ 				fp.ungetNode(); 				return( n ); 			} 		} 	} } 	

Added JavaPlanner/Planning/File/psaver.java.



>
1
/* *  PSAVER - Save site plan to a text file 	26 Aug 97 - Store period 	 3 Nov 97	- Store LBU type 	 4 Nov 98 - Store RELAY type *	16-Feb-98 Add G2 type */  import java.io.*; import java.awt.*; import java.util.Date;  public class psaver  { 	public String name; 	 	// Very simple constructor get file for save 	 	public psaver(Frame f) 	{ 	 		FileDialog fd; 		String dir; 		 		// Get a file dialog 		 		fd = new FileDialog(f,"Save Plan",FileDialog.SAVE); 		fd.setFile("site_plan.txt"); 		fd.show(); 		name = fd.getFile(); 		dir = fd.getDirectory(); 		name = dir + "/"+name;			// NOTE: NON-MAC type separators 	} 	 	public boolean save( node base ) 	{ 		FileOutputStream os; 		PrintStream fp; 		 		// (1) If no file name just return false  		 		if( name == null ) 			return( false ); 			 		// (2) Ok, try to create the output stream for the file 		 		try{ os = new FileOutputStream( name ); } 		catch( IOException io ) { return( false ); } 		 		// (3) Build the print stream for the file  		 		fp = new PrintStream(os); 		 		// (4) Now print something  		 		this.print_plan(base,fp); 			 		//(x) Close the file and quit 		 		try{ os.close(); } 		catch( IOException io ) { return( false ); } 		 		return( true ); 	} 	 	/********************************************************* 	* 	*  MAIN PLAN PRINTING SECTION 	* 	*  INPUT: base		- Base node for system 	*		fp		- PrintStream object on open file 	* 	*  OUTPUT:	Print plan to output 	* 	*********************************************************/ 	 	public void print_plan(node base,PrintStream fp) 	{ 		Date d; 		String indent; 		 		// (1) Put out the header information for the site 		 		this.print_indent(0,"TYPE: SITE LEVEL: 0 PSNX: 0 PSNY: 0",fp); 		d = new Date(); 		this.print_indent(0, "CREATED: "+"\""+d.toLocaleString()+"\"",fp ); 		this.print_indent(0, "NAME:" +"\""+base.site_name+"\"",fp ); 		this.print_indent(0, "ADDRESS: "+"\""+base.site_address+"\"",fp); 		this.print_indent(0, "PHONE: "+ "\""+base.phone+"\"",fp ); 		this.print_indent(0, "FAX: " + "\""+base.fax+"\"",fp ); 		 		// (2) Base station information 		 		this.print_one_node(1,base,fp); 				 		// (3) Recursively print out the rest of the site 		 		print_node( 1,base,fp ); 	} 	 	/*********************************************************** 	* 	*  Print_node( int indent,node n,PrintStream fp ) 	* 	*  INPUT:	indent	- Present level of indent 	*		n		- Current parent node 	*		fp		- Current print stream 	* 	*  OUTPUT:	Print depth first node listing  	* 	************************************************************/ 	 	public void print_node( int indent, node n,PrintStream fp ) 	{ 		int i; 		node child; 		 		// (1) Move in an indent level 		 		indent++; 		 		// (2) Find any child nodes and print them 		 		for( i=0; i<n.children.length; i++ ) 		{ 			if( n.children[i] != null ) 			{ 				child = n.children[i]; 				 				// (3) Print out the type node at this level 				 				this.print_one_node(indent,child,fp );  				// (4) Recursively print this level 				 				print_node( indent,child,fp ); 			} 		} 	} 		 	/*********************************************************** 	* 	*  Print_one_node( int indent,node n,PrintStream fp ) 	* 	*  INPUT:	indent	- Present level of indent 	*		n		- Node to print 	*		fp		- Current print stream 	* 	*  OUTPUT:	Print this node at this indent  	* 	************************************************************/ 	 	public void print_one_node( int indent, node n,PrintStream fp ) 	{ 		lbu l; 		relay r; 		G2 g; 		 		// On the first line put out TYPE: XXX LEVEL: X PSN: XX YY  		this.print_indent( indent,"TYPE: "+n.node_name()+ 						" LEVEL: "+indent+" PSNX: "+n.cur_x+" PSNY: "+n.cur_y,fp ); 		this.print_indent( indent,"LOCATION: "+"\""+n.location+"\"",fp); 		this.print_indent( indent,"SYSTEM: "+n.system,fp); 		this.print_indent( indent,"UNIT: "+n.unit,fp); 		 		if( n instanceof lbu  )							// Output LBU stuff 		{ 			l = (lbu)n; 			this.print_indent( indent,"PERIOD: "+l.period,fp); 			this.print_indent( indent,"LTYPE: "+l.lbu_type,fp); 		} 		else if( n instanceof relay )					// Output Relay stuff 		{ 			r = (relay)n; 			this.print_indent( indent,"PERIOD: " + 1,fp); 			this.print_indent( indent,"LTYPE: "+r.relay_type,fp); 		} 		else if( n instanceof G2 ) 		{ 				g = (G2)n; 				this.print_indent(indent,"PERIOD: "+ 1,fp);	// Just put in a dummy 				this.print_indent( indent,"LTYPE: "+ g.g2_type ,fp); 		} 		else												// Everything else 		{ 			this.print_indent(indent,"PERIOD: "+ 1,fp);	// Just put in a dummy 			this.print_indent( indent,"LTYPE: "+ 0,fp); 		} 		 	} 	 	/********************************************************** 	* 	*  PRINT_INDENT(int level,String string, PrintStream fp) 	* 	*	INPUT:	level	- Indentation level 	*			string	- String for print 	*			fp		- Open print stream 	* 	*	OUTPUT:	Print indented string and NL 	* 	**********************************************************/ 		 	public void print_indent( int level,String string, PrintStream fp) 	{ 		int i; 		String indent; 		 		// Build the indent string 		 		indent = ""; 		for( i=0; i<level; i++ ) 			indent = indent + "\t"; 			 		// Output the string with a line return 		fp.print( indent+string ); 		fp.print("\r\n");				// DOS line termination 	} } 	

Added JavaPlanner/Planning/Icon .

Added JavaPlanner/Planning/Main/AppletFrame.java.



>
1
import java.applet.*; import java.awt.*;  /* 	  2 Feb-98		J.Schimpf	Add partial code generation menu option 	14-Feb-98		J.Schimpf	Add quote generator 	23-Feb-98		J.Schimpf	Fixes to get partial code gen working */  class AppletFrame extends Frame {  	MenuBar menubar; 	Menu file,edit,gen; 	MenuItem fnew,fopen,fclose,fsave,fquit; 	MenuItem code_base,code_gen,code_gen_partial; 	MenuItem quote_gen,quote_gen_partial; 	plan applet; 	boolean issaved = false; 	int w,h; 	cgen generator = null; 	int xpsn,ypsn; 	 	public AppletFrame( String title,int x,int y,int width,int height) 	{ 		// put the title on the frame & save the parameters 		 		super(title); 		 		xpsn = x; 		ypsn = y; 		w = width; 		h = height; 		  		// Put a menu bar with a quit button 				 		menubar = new MenuBar(); 		file = new Menu("File",true); 		menubar.add(file); 		 		file.add("New"); 		fnew = file.getItem(0);  		file.add("Open..."); 		fopen = file.getItem(1); 		file.addSeparator(); 		 		file.add("Close"); 		fclose = file.getItem(3); 		 		file.add("Save..."); 		fsave = file.getItem(4); 		file.addSeparator(); 		 		file.add("Quit"); 		fquit = file.getItem(6); 		 		edit = new Menu("Edit",true); 		menubar.add(edit); 		edit.add("Cut"); 		edit.add("Copy"); 		edit.add("Paste"); 		edit.add("Clear"); 		 		gen = new Menu("Generate",true);		// Generate menu 		menubar.add(gen); 		gen.add("Locate Protos...");			// Find protos 		code_base = gen.getItem(0); 		gen.addSeparator(); 		 		gen.add("Generate Code...");			// Generate code 		code_gen = gen.getItem(2);  		gen.add("Generate Partial Code...");	// Generate partial code 		code_gen_partial = gen.getItem(3);  		gen.addSeparator(); 		 		gen.add("Generate Quote..."); 		quote_gen = gen.getItem(5);  		gen.add("Generate Partial Quote..."); 		quote_gen_partial = gen.getItem(6); 		 		this.setMenuBar(menubar);  		// Lock in the prototypes 				 		generator = new cgen(this,1); 		if( generator.cgenProtoTest() == true )					 			code_gen.enable(); 		else 			generator = null; 		 		// Bring up the applet  		 		this.new_plan();	 		 	} 	 	/**************************************************************** 	* 	*  ACTION ROUTILNE 	* 	****************************************************************/	 	 	// Menu handler for this application 	 	public boolean action(Event e,Object arg) 	{ 		myCanvas c; 		 		if( e.target instanceof MenuItem) 		{ 			// Handle the various menu targets 			 			if( e.target == fquit ) System.exit(0);		// Quit 			 			if( e.target == fnew )							// New 			{ 				this.new_plan(); 				return( true ); 			} 			 			if( e.target == fclose )						// Close 			{ 				if( applet != null ) 				{ 					if( issaved == true ) 					{ 						applet.stop(); 						applet.destroy(); 						applet = null; 						fnew.enable(); 						fclose.disable(); 						fsave.disable(); 					} 					else 					{ 						Alert a = new Alert("Warning","Plan not saved"); 					} 				} 				return( true ); 			} 			 			if( e.target == fsave )						// Close 			{ 				plan p; 				node n; 				psaver s; 				 				p = (plan)applet; 				n = p.site_base; 				 				if( n == null ) 				{ 					Alert a = new Alert("Warning","Nothing to save"); 				} 				else 				{ 					s = new psaver(this); 					issaved = s.save( n ); 				} 				return( true ); 			} 			 			if( e.target == fopen )						// Open 			{ 				ploader pl; 				plan p; 				 				p = (plan)applet; 				 				if( p.site_base != null ) 				{ 					if( issaved == true ) 					{ 						p.site_base.delete_node(); 						p.site_base = null; 					} 					else 					{ 						Alert a = new Alert("Warning","Save present Plan"); 						return( true ); 					} 				} 				pl = new ploader( this ); 				c = applet.canvas; 				p.site_base = (base)pl.load((Canvas)c); 				if( p.site_base != null ) 				{ 					c.lock_base( p.site_base ); 					p.site_base.show(); 				} 				issaved = false; 				 				return( true ); 			} 			 			// GENERATE MENU ITEM 			 			if( e.target == code_base )				// Get new code base 			{ 				generator = new cgen( this ); 				if( generator.cgenProtoTest() == true )					 					code_gen.enable(); 				else 					generator = null; 				return( true ); 			} 			 			if( e.target == code_gen )					// Generate Code.... 			{ 				plan p = (plan)applet; 				 				if( generator == null ) 					generator = new cgen(this); 				if( generator != null && p.site_base != null ) 				{ 					generator.generate( p.site_base ); 					return( true ); 				} 			}  			if( e.target == code_gen_partial )		// Generate Partial Code.... 			{ 				plan p = (plan)applet; 				if( p.selected_node == null ) 				{ 					Alert a = new Alert("Note:","Select a starting point"); 					return( true ); 				} 				 				if( generator == null ) 					generator = new cgen(this); 				if( generator != null && p.selected_node != null ) 				{ 					generator.generate( p.selected_node ); 					p.selected_node.show(); 					p.selected_node = null; 					return( true ); 				} 			} 			 			if( e.target == quote_gen )					// Generate. Quote... 			{ 				plan p = (plan)applet; 				 				if( p.site_base != null ) 				{ 					new Quote( this, p.site_base ); 					return( true ); 				} 			} 			 			if( e.target == quote_gen_partial )			// Generate Partial Quote 			{ 				plan p = (plan)applet; 				if( p.selected_node == null ) 				{ 					Alert a = new Alert("Note:","Select a starting point"); 					return( true ); 				} 				 				if( p.selected_node != null ) 				{ 					new Quote( this,p.selected_node ); 					p.selected_node.show(); 					p.selected_node = null; 					return( true ); 				} 			} 		}  		return( false ); 	} 	 	/************************************************************** 	* 	*					SUPPORT ROUTINES 	* 	***************************************************************/  	/************************************************************** 	* 	*  NEW_PLAN	- put up a new planning window 	* 	***************************************************************/ 	 	public void new_plan() 	{ 		// Set up a new plan 		 		applet = new plan(); 		issaved = false; 		 		// Put the applet in the window 	 		this.add("Center",applet); 		this.reshape(xpsn,ypsn,w,h); 		this.show(); 	 		// Start the applet 	 		applet.init(); 		applet.start(); 		 		// Disable new but enable close/save 		 		fnew.disable(); 		fclose.enable(); 		fsave.enable(); 		code_base.enable(); 		if( generator != null ) 			code_gen.enable(); 		else 			code_gen.disable(); 		this.show();  	}  }

Added JavaPlanner/Planning/Main/Site3.java.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//
//  Site3.java
//  Site3
//
//  Created by Jim on 21/09/2006.
//  Copyright (c) 2006 __MyCompanyName__. All rights reserved.
//
//	For information on setting Java configuration information, including 
//	setting Java properties, refer to the documentation at
//		http://developer.apple.com/techpubs/java/java.html
//


//APP Shell for the PLAN applet

import java.util.Locale;
import java.util.ResourceBundle;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Site3 extends plan
{
	public static Dimension screen;
	                      
	public static void main(String args[])
	{
		Frame frame;                
		Splash s;
		int i;
		plan p;
		
		screen = Toolkit.getDefaultToolkit().getScreenSize();
		
		 p = new plan();
		 s = new Splash(5,p);
		 
		 p = null;
		 s = null;
			
		frame = new AppletFrame("PLAN",40,40,600,400);
	}
}



Added JavaPlanner/Planning/Main/Splash.java.















































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
// *** SPLASH SCREEN FOR STARTUP 

import java.applet.*;
import java.awt.*;
import java.util.Date;

class Splash extends Frame {

	Applet ap;
	node n;
	base site_base;
	myCanvas c;

	public Splash( int wait,Applet a)
	{
		// Build the frame
		
		super("");
		
		// Build the plan thing
		
		c = new myCanvas();
		ap = a;
		
		this.add("Center",c);
		
		this.reshape(40,40,600,400);
		this.show();
		
		site_base = (base)this.ssite_build((Canvas)c);
		c.lock_base( site_base );
		
		site_base.show();
		this.word_build( c );
		
		Date t = new Date();
		int n = t.getSeconds();
		
		n = n + wait;
		if( n >= 60 )
			n = n - 60;
			
		while( n != t.getSeconds() )
		{
			this.word_build( c );
			t = new Date();
		}
						
		this.dispose();
	}
	
	// Support functions for splash
	
	/********************************************************
	*
	*  SSITE_BUILD	- Build a site on the screen
	*
	*	NOTE: Site built then data from dump used for this file
	*	Return top of site
	*
	********************************************************/
	
	public node ssite_build(Canvas s)
	{
		node cnode;
		node pnode;
		node l1,l2,r;
		
		// (1) Build LBU 101 and all the G1's around it
		
		pnode = (node)new lbu();
		pnode.create( 521,93,1,s);
		
		cnode = (node)new G1();		// G1-1
		cnode.create(486,54,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-2
		cnode.create(537,49,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-3
		cnode.create(570,69,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		l1 = pnode;						// Save LBU 101

		// (2) Build LBU 102 and all the G1's around it
		
		pnode = (node)new lbu();
		pnode.create( 534,290,1,s);
		
		cnode = (node)new G1();		// G1-1
		cnode.create(507,347,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-2
		cnode.create(547,355,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		l2 = pnode;					// Save LBU 102
		
	// (3) Create relay station 50
	
		pnode = (node)new relay();
		pnode.create(433,217,1,s);
		
	// (4) Create relay station 51
	
		cnode = (node)new relay();
		cnode.create( 520,174,1,s);
		
	// (5) Attach LBU 101 & 102 to relay 51
	
		l1.add_parent( cnode );
		cnode.add_child( l1 );
		l2.add_parent( cnode );
		cnode.add_child( l2 );
	
	// (6) Attach 51 to relay 50
	
		pnode.add_child( cnode );
		cnode.add_parent( pnode );
	
	// (7) Save relay 50 and build LBU 103 and G1's
	
		r = pnode;

	// (8) Build LBU 101 and all the G1's around it
		
		pnode = (node)new lbu();
		pnode.create( 390,295,1,s);
		
		cnode = (node)new G1();		// G1-1
		cnode.create(352,346,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-2
		cnode.create(388,353,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		cnode = (node)new G1();		// G1-3
		cnode.create(429,348,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );
		
	// (9) Attach to relay node 
	
		r.add_child( pnode );
		pnode.add_parent( r );
		
		cnode = r;
	
	// (10) Build base station and attach relay
	
		pnode = (node)new base();
		pnode.create( 359,157,1,s);
		pnode.add_child( cnode );
		cnode.add_parent( pnode );

		return( pnode );
	}		
	

	static final int MAIN_TITLEY = 90;
	static final int VER_TITLEY = 220;
	static final int SEC_TITLEY = 280;
	static final int CPY_TITLEY = 360;
	
	/*************************************************
	*
	*  WORD_BUILD(Applet s)	- Build the words on the screen
	*
	*	INPUT:	s	- Applet screen
	*
	*	OUTPUT:	Put the words on the screen
	*
	*************************************************/
	
	public void word_build(myCanvas s)
	{
		Graphics g = s.getGraphics();
		FontMetrics metric;
		Font f;
		
		// Put out the GPS words
		
		f = new Font("Helvetica",Font.PLAIN,36);
		metric = g.getFontMetrics( f );
		g.setColor(Color.red);
		g.setFont( f );
		g.drawString("G",50,MAIN_TITLEY);
		g.drawString("P",50,MAIN_TITLEY + metric.getHeight());
		g.drawString("S",50,MAIN_TITLEY + 2*metric.getHeight());
		
		g.setColor(Color.blue);
		g.drawString("roundhog",
					50 + metric.charWidth('G'),
					MAIN_TITLEY);
		g.drawString("lanning",
					50 + metric.charWidth('P'),
					MAIN_TITLEY + metric.getHeight());
		g.drawString("ystem",
					50 + metric.charWidth('S'),
					MAIN_TITLEY + 2*metric.getHeight());
					
		// Put out the Version information
		
		f = new Font("Helvetica",Font.PLAIN,24);
		g.setColor(Color.black);
		g.setFont(f );
		g.drawString(ap.getAppletInfo(),50,VER_TITLEY);
		
		// Put out other stuff

		f = new Font("Helvetica",Font.PLAIN,12);
		metric = g.getFontMetrics( f );
		g.setColor(Color.black);
		g.setFont(f );
		g.drawString("For design and code",50,SEC_TITLEY);
		g.drawString("generation of Nu-Metrics",
							50,SEC_TITLEY + metric.getHeight());
		g.drawString("RF Traffic Monitoring",
							50,SEC_TITLEY + 2*metric.getHeight());
		g.drawString("Systems",
							50,SEC_TITLEY + 3*metric.getHeight());
							
		// Put out copyright

		f = new Font("Helvetica",Font.PLAIN,12);
		metric = g.getFontMetrics( f );
		g.setColor(Color.black);
		g.drawString("Copyright 1997,98 Nu-Metrics",150,CPY_TITLEY);
		

	}


}
	

Added JavaPlanner/Planning/Main/myCanvas.java.



>
1
// Plan.java // 5 January 1998 myCanvas version  import java.applet.Applet; import java.awt.*;  /** Applet Plan.  *    *    *  @author   JHS  *  @version  1.0   	11 Nov 97	J.Schimpf	Fix system code creation on nodes  */   public class myCanvas extends Canvas { 	private base b; 	     /** Performs applet initialization.      */ 	public myCanvas() 	{ 		super(); 	} 	 	public void lock_base( base bb ) 	{ 		b = bb; 	} 	  	/************************************************** 	* 	*  PAINT ROUTINE 	* 	**************************************************/ 	 	public void paint( Graphics g ) 	{ 		Rectangle r = this.bounds(); 		 		g.setColor(this.getBackground()); 		g.fillRect(r.x,r.y,r.width,r.height);  		this.show();			// Show what we have done 		 		// This must be done or the menu items disappear 		 		if( b != null ) 			b.show(); 	} }  

Added JavaPlanner/Planning/Main/plan.java.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
// Plan.java

import java.applet.Applet;
import java.awt.*;

/** Applet Plan.
 *  
 *  
 *  @author   JHS
 *  @version  1.0
 
	11 Nov 97	J.Schimpf	Fix system code creation on nodes
	31 Jan 98	J.Schimpf	Conversion to version 3.0
 */
 
public class plan extends java.applet.Applet
{
	///XXX
	public static final String NAME    = "FPlan";
	public static final String VERSION = "1.0";
	
	// Actions during run
	public static final int INFO = 0;	
	public static final int MOVE = 1;
	public static final int ADD = 2;
	public static final int DELETE = 3;
	public static final int CONNECT = 4;
	public static final int DISCONNECT = 5;
	public static final int SELECT = 6;
	
	// Unit types
	public static final int BASE = 0;
	public static final int RELAY = 1;
	public static final int LBU = 2;
	public static final int G1 = 3;
	public static final int G2 = 4;
        public static final int FBASE = 5;
	
	// Last selected item
	
	public node selected_node;	// Last selected node
	
	// Unit connection array 
	// This shows the allowable connections
	// First index is the parent i.e. Base,Relay,LBU
	//  Second index is the connected to index
	//  If TRUE connection is allowed, if FALSE NOT
	
	public boolean connection[][] = new boolean[6][6];		  
	public myCanvas canvas;
	private int canvas_width,canvas_height;
	
	private int last_x=0;
	private int last_y=0;
	private Scrollbar hbar,vbar;		// For scrolling
	private Panel barea;
	private Color current_color=Color.black;
	private Button clear_button;
	private Choice type_choices;
	private Choice action_choices;
	private node last_node,moved_node;
	private node pnode,cnode;			// For connections
	
//	private Button save_button;
//	private Button load_button;
	public base site_base = null;
        public fbase site_fbase = null;

    /** Performs applet initialization.
     */
	public void init()
	{
	
		// Set up connection table of allowable connections
		
		connection[BASE][BASE]		= false;	// BASE as parent
		connection[BASE][RELAY] 	= true;
		connection[BASE][LBU]		= true;
		connection[BASE][G1]		= false;
		connection[BASE][G2]		= false;
                connection[BASE][FBASE]         = false;
		
		connection[RELAY][BASE] 	= false;	// RELAY as parent
		connection[RELAY][RELAY] 	= true;
		connection[RELAY][LBU]		= true;
		connection[RELAY][G1]		= false;
		connection[RELAY][G2]		= true;		// Allow G2 -> RELAY connection
                connection[RELAY][FBASE]        = false;
		
		connection[LBU][BASE] 		= false;	// LBU as parent
		connection[LBU][RELAY]		= true;		// RELAY -> LBU connection
		connection[LBU][LBU]		= false;
		connection[LBU][G1]		= true;
		connection[LBU][G2]		= true;
                connection[LBU][FBASE]          = false;
		
		connection[G1][BASE] 		= false;	// G1 as parent
		connection[G1][RELAY] 		= false;
		connection[G1][LBU]		= false;
		connection[G1][G1]		= false;
		connection[G1][G2]		= false;
                connection[G1][FBASE]           = false;
		
		connection[G2][BASE] 		= false;	// G2 as parent
		connection[G2][RELAY] 		= false;
		connection[G2][LBU]		= false;
		connection[G2][G1]		= false;
		connection[G2][G2]		= false;
                connection[G2][FBASE]           = false;
				
                connection[FBASE][BASE]		= false;	// FBASE as parent
		connection[FBASE][RELAY] 	= false;
		connection[FBASE][LBU]		= false;
		connection[FBASE][G1]		= false;
		connection[FBASE][G2]		= false;
                connection[FBASE][FBASE]        = false;
                
		// Set the color background
		
		this.setBackground(Color.white);
		
		// Put on the scroll bars
		
		canvas = new myCanvas();
		hbar = new Scrollbar( Scrollbar.HORIZONTAL );
		vbar = new Scrollbar( Scrollbar.VERTICAL );
		this.setLayout( new BorderLayout(0,0));
		this.add("South",hbar);
		this.add("East",vbar);
		this.add("Center",canvas);
		
		// Create the buttons and add to the applet
		// Put them in a panel at the top of the screen
		
		barea = new Panel();
		this.add("North",barea);
		
		clear_button = new Button( "*REFRESH*");
		clear_button.setForeground(Color.black);
		clear_button.setBackground(Color.lightGray);
		barea.add(clear_button);

		// Create an action choice list
		
		action_choices = new Choice();
		action_choices.addItem( "INFO" );
		action_choices.addItem( "MOVE" );
		action_choices.addItem("ADD");
		action_choices.addItem( "DELETE" );
		action_choices.addItem( "CONNECT" );
		action_choices.addItem( "DISCONNECT" );
		action_choices.addItem( "SELECT" );
		action_choices.setForeground(Color.black);
		action_choices.setBackground(Color.lightGray);
		barea.add(action_choices);
	
		// Create a type choice list
		
		type_choices = new Choice();
		type_choices.addItem("BASE");
		type_choices.addItem( "RELAY" );
		type_choices.addItem( "LBU" );
		type_choices.addItem( "G1" );
		type_choices.addItem( "G2" );
                type_choices.addItem("FBASE");
		type_choices.setForeground(Color.black);
		type_choices.setBackground(Color.lightGray);
		barea.add(type_choices);
		
		last_node = null;
	}

	/**************************************************
	*
	*  RESHAPE ROUTINE - refits the scroll bars
	*
	**************************************************/
	
	public synchronized void reshape( int x,int y,
								int width,int height)
	{
		Canvas c;
		super.reshape( x,y,width,height );
		if( hbar == null || vbar == null )
			return;
		
		// Fix the scroll bars up
		
		Dimension hbar_size = hbar.size();
		Dimension vbar_size = vbar.size();
		canvas_width = width - vbar_size.width;
		canvas_height = height - hbar_size.height;
		
		hbar.setValues(node.org_x,canvas_width,0,1000-canvas_width);
		vbar.setValues(node.org_y,canvas_height,0,1000-canvas_height);
		
		hbar.setPageIncrement( canvas_width/2 );
		vbar.setPageIncrement( canvas_height/2 );
		
		c = (Canvas)canvas;
		this.update( c.getGraphics() );
	}
	
	/**************************************************
	*
	*  ACTION ROUTINE
	*
	**************************************************/
	
	// Called when user clicks a button or chooses a menu
	public boolean action( Event event,Object arg)
	{
		int scroll;
				
		if( event.target == clear_button )		// BUTTON
		{	
			this.show();
			if( site_base != null )
				site_base.show();
			return true;
		}
		
		if( event.target == type_choices )		// CHOICE
		{
			return true;
		}

		if( event.target == action_choices )		// CHOICE
		{
			return true;
		}
		
		
		return super.action(event,arg);			// NEITHER
	}
	
	/**************************************************
	*
	*  Event Handler ROUTINE
	*
	**************************************************/
	
	public boolean handleEvent( Event event)
	{
		int scroll;
		
		if( event.target == hbar )				// Horizontal scroll bar
		{
			switch( event.id ) {
				
				case Event.SCROLL_LINE_UP:
				case Event.SCROLL_PAGE_UP:
				case Event.SCROLL_LINE_DOWN:
				case Event.SCROLL_PAGE_DOWN:
				case Event.SCROLL_ABSOLUTE:
					scroll = ((Integer)event.arg).intValue();
					if( site_base != null )
					{
						site_base.clear();
						site_base.scroll_x( -1 * scroll );
						site_base.show();
					}
					return( true );
				}
			}					

		if( event.target == vbar )				// Verticle scroll bar
		{
			switch( event.id ) {
				
				case Event.SCROLL_LINE_UP:
				case Event.SCROLL_PAGE_UP:
				case Event.SCROLL_LINE_DOWN:
				case Event.SCROLL_PAGE_DOWN:
				case Event.SCROLL_ABSOLUTE:
					scroll = ((Integer)event.arg).intValue();
					if( site_base != null )
					{
						site_base.clear();
						site_base.scroll_y( -1 * scroll );
						site_base.show();
					}
					return( true );
				}
			}					

		return( super.handleEvent(event) );
	}
	
	/*************************************************
	*
	*  mouseDown() - Handle action based on mode of display
	*
	**************************************************/
	
	public boolean mouseDown( Event e, int x,int y)
	{
		int type;
		boolean result;
		boolean no_base;
		Dimension sz = barea.size();
		
		y = y - sz.height;
		
		// Set NO BASE true if we don't have a base station yet
		
		if( site_base == null )
			no_base = true;
		else
			no_base = false;
		if( selected_node != null )
			selected_node.show();
		
		type = action_choices.getSelectedIndex();
		
		// Note put little things in here to run in macro loops for easier
		// user interface
		
		switch( type ) {
		
			case ADD:		result = add_node(e,x,y);
							if( result == true )
							{
								// This little thing keeps from jumping to CONNECT
								// if we have only just created the base station
								// We only switch to CONNECt if there is a base station
								// and it wasn't just created
								if( site_base != null && no_base == false )
									action_choices.select("CONNECT");
							}
							return( result );
						
			case MOVE:		result = move_node(e,x,y);
							return( result );
						
			case DELETE: 	result = delete_node( e,x,y );
							if( result = true )
								action_choices.select("INFO");
							return( result );
							
			case CONNECT: 	result = connect_node( e,x,y );
							if( result == true )
								action_choices.select("ADD");
							return( result );
							
			case DISCONNECT:	result = disconnect_node(e,x,y );
								if( result = true )
									action_choices.select("CONNECT");
								return( result );
							
			case INFO:		result = info_node(e,x,y);
							return( result );
							
			case SELECT:	selected_node = site_base.locate_node(x,y);
							if( selected_node != null )
								selected_node.select();
							return( true );	
						
			default:	result = false;
		}
		return( false );
	}

	/*************************************************
	*
	*  add_node()	- Add a new node to list attach to last_node
	*
	**************************************************/
	
	public boolean add_node( Event e,int x,int y)
	{
		Alert err;
		relay r_node;
		lbu lbu_node;
		G2 g2_node;
		G1 g1_node;
		int type;
		
		// If LAST NODE exists then delete it
		
		if( last_node != null )
			last_node.delete_node();
			
		// Ok make the new one
		
		type = type_choices.getSelectedIndex();
		
		switch( type ) {
			
		case BASE:	if( site_base == null )
					{
						site_base = new base();
						site_base.create( x,y,		// Position
										site_base.system,		// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node) site_base;
						last_node = null;
						
					}
					else
					{
						err = new Alert("ERROR",
							"BASE Station Already Created");
						last_node = null;
					}
					break;

		case RELAY:	if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						r_node = new relay();
						r_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)r_node;
					break;

		case LBU:		if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						lbu_node = new lbu();
						lbu_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)lbu_node;
					break;

		case G2:		if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						g2_node = new G2();
						g2_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)g2_node;
					break;

		case G1:		if( site_base == null )
						{
							new Alert("ERROR","Create Base First");
							break;
						}
						g1_node = new G1();
						g1_node.create( x,y,		// Position
										site_base.system,	// Sys/unit code
										(Canvas)canvas);		// Window
						last_node = (node)g1_node;
					break;
		case FBASE:	if( site_fbase == null )
					{
						site_fbase = new fbase();
						site_fbase.create( x,y,		// Position
							site_fbase.system,		// Sys/unit code
                                                        (Canvas)canvas);		// Window
						
					}
					else
					{
						err = new Alert("ERROR",
							"FBASE Station Already Created");

					}
					break;

					
		default:	last_node = null;
					break;
		}
		
		if( last_node != null )
			return( true );
		else
			return( false );

	}
	
	/*************************************************
	*
	*  move_node()	- See if a node is under the cursor and move it
	*
	**************************************************/
	
	public boolean move_node( Event e,int x,int y)
	{
		node n = null;
		
		if( site_base != null )
		{
			n = site_base.locate_node(x,y);
			if( n == null )
			{
				if( last_node != null )
					n = last_node.locate_node(x,y);
			}
		}
		
		if( n != null )
		{
			moved_node = n;
			return( true );
		}
		
		moved_node = null;
		return( false );
	}

	/*************************************************
	*
	*  delete_node()	- Delete this node and all it's children
	*
	**************************************************/
	
	public boolean delete_node( Event e,int x,int y)
	{
		node n = null;
		
		if( site_base != null )
		{
			n = site_base.locate_node(x,y);
			if( n == null )
			{
				if( last_node != null )
					n = last_node.locate_node(x,y);
			}
		}
		
		if( n == null )
			return( false );		// Nothing to do
			
		// Ok we have something to do make this node and all it's children
		// disappear
		
		n.delete_node();
		if( n == site_base )
			site_base = null;
		if( n == last_node )
			last_node = null;
		if( n == moved_node )
			moved_node = null;
			
		n = null;
		return( true );
	}
	
	/*************************************************
	*
	*  CONNECT NODE	- Determine if this is the first or second pass
	*
	*	First pass just mark node selected (p,c node == NULL)
	*     Second pass determine if allowed and do connection
	*	NOTE:Return FALSE on first pass
	*
	**************************************************/
	
	public boolean connect_node( Event e,int x,int y)
	{
		// (1) First or second pass ?
		
		if( pnode == null && cnode == null )
		{
			if( site_base != null )
				pnode = site_base.locate_node(x,y);
			
			if( pnode == null )
				return( false );		// Nothing to do
			else
			{
				pnode.select();
				return( false );
			}
		}
		
		// (2) Second pass - get child node and determine if this is allowed
		// NOTE CHID node must belong to last_node 

		if( last_node != null )
					cnode = last_node.locate_node(x,y);
		
		if( cnode != null )
		{
			cnode.select();
			
		// Is this allowed ? 
			if( !connection[pnode.node_type()][cnode.node_type()] 	)
			{	
				Alert err;
				err = new Alert("WARNING","Connection not allowed");
				pnode.show();
				cnode.show();
				pnode = null;
				cnode = null;
				return( false );
			}
			
			if( cnode.parent != null )
			{	
				Alert err;
				err = new Alert("WARNING","Already connected");
				pnode.show();
				cnode.show();
				pnode = null;
				cnode = null;
				return( false );
			}
			
			pnode.add_child( cnode );
			cnode.add_parent( pnode );
			
			pnode.show();
			cnode.show();
			cnode = null;
			pnode = null;
			last_node = null;		// Disconnect it
			return( true );
		}
		
		return( false );
	}

	/*************************************************
	*
	*  DISCONNECT NODE	- Disconnect this node from present location
	*
	*	If we are on a node disconnect it from parent and
	*	attach it to last_node
	*
	**************************************************/
	
	public boolean disconnect_node( Event e,int x,int y)
	{
		// (1) Are we on a connected node ?
		
		if( site_base != null )
		{
				last_node = site_base.locate_node( x,y );
		
			if( last_node != null )
			{
				pnode = last_node.parent;
				last_node.clear();
				pnode.delete_child( last_node );
				last_node.delete_parent();
				pnode = null;
				last_node.show();
				return( true );
			}
		}			
		
		return( false );
	}
	
	/*************************************************
	*
	*  info_node()	- Get information on node & set it
	*
	**************************************************/
	
	public boolean info_node( Event e,int x,int y)
	{
		node n = null;
		
		if( site_base != null )
		{
			n = site_base.locate_node(x,y);
			if( n == null )
			{
				if( last_node != null )
					n = last_node.locate_node(x,y);
			}
		}
		
		if( n != null )		// We have a node get info
		{
			n.select();		// Show we have it
			n.info();
			n.show();		// Restore node
			return( true );
		}
		
		return( false );
	}
	

	/*************************************************
	*
	*  mouseDrag - If we have a moved_node then drag it
	*
	**************************************************/
	
	public boolean mouseDrag(Event e,int x, int y)
	{
		boolean result;
		node n;
		int type;
		
		// If not in MOVE then quit
		
		type = action_choices.getSelectedIndex();
		
		if( type != MOVE )
			return( false );

		// If we have a node nove it
		
		if( moved_node != null )
			moved_node.move_node(x,y);
			
		return( true );
	}
	
	/*************************************************
	*
	*  mouseUp - If we have a moved_node then restore it
	*
	**************************************************/
	
	public boolean mouseUp(Event e,int x, int y)
	{
		boolean result;
		node n;
		int type;
		
		// If not in MOVE then quit
		
		type = action_choices.getSelectedIndex();
		
		if( type != MOVE )
			return( false );

		// If we have a node restore it
		
		if( moved_node != null )
		{
			moved_node.show();
			moved_node = null;
		}
			
		return( true );
	}

	/**************************************************
	*
	*  PAINT ROUTINE
	*
	**************************************************/
	
	public void paint( Graphics g )
	{
	
		Rectangle r = this.bounds();
		
		g.setColor(this.getBackground());
		g.fillRect(r.x,r.y,r.width,r.height);
		
		// This must be done or the menu items disappear
		
		if( clear_button != null )
			clear_button.show();
		if( type_choices != null )
			type_choices.show();
		if( action_choices != null )
			action_choices.show();
		
		if( site_base != null )
			site_base.show();
		if( last_node != null )
			last_node.show();
			
		this.show();			// Show what we have done
	}

			
    /** Returns a text description of the applet.
     */
	public String getAppletInfo()
	{
		// Return a String containing author, version, copyright, 
		// and other information.
		
		return NAME + " Version " + VERSION;
	}
}


Added JavaPlanner/Planning/Nodes/Dialog/node_dialog.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog * Remove LBU period (we have a special one for that) * ************************************************************/  public class node_dialog extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	Button ok; 	Button cancel; 	 	node n;							// Node we are working on 	 	public node_dialog(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(8,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location);  		add( new Label("Phone: "));				// ROW 6 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 7 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 8 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{ 		int unit = 0; 		int save_unit;	 		 		if( event.target == cancel )	// CANCEL BUTTON 		{	 			this.dispose();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			//n.period = 1;					// DEFAULT value 			 			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	}  } 

Added JavaPlanner/Planning/Nodes/Dialog/node_dialog_g2.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog for the G2 *  Add LBU period *  20 Jan 98  Add WX LBU types * ************************************************************/  public class node_dialog_g2 extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	TextField G2_period; 	Button ok; 	Button cancel; 	Choice type; 	 	G2 n;							// Node we are working on 	 	public node_dialog_g2(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(9,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = (G2) me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location);  		type = new Choice();						// ROW 6 		type.addItem("Standard"); 		type.addItem("Standard+WX"); 		add( new Label("G2 Type - Select")); 		type.select( n.g2_type); 		add( type ); 				 		add( new Label("Phone: "));				// ROW 7 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 8 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 9 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{	 		int unit = 0; 		int save_unit;	 		if( event.target == cancel )		// CANCEL BUTTON 		{	 			this.dispose();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			n.clear();				// Remove the old one 			 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			n.g2_type = type.getSelectedIndex(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	}  } 

Added JavaPlanner/Planning/Nodes/Dialog/node_dialog_lbu.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog *  Add LBU period *  20 Jan 98  Add WX LBU types * ************************************************************/  public class node_dialog_lbu extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	TextField lbu_period; 	Button ok; 	Button cancel; 	Choice type; 	 	lbu n;							// Node we are working on 	 	public node_dialog_lbu(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(10,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = (lbu) me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location);  		add(new Label("LBU Period: (Minutes) "));	// ROW 6 		lbu_period = new TextField(""+lbu.period,5); 		add( lbu_period ); 		 		type = new Choice();						// ROW 7 		type.addItem("Standard"); 		type.addItem( "Site+Base"); 		type.addItem( "Site+Base+Modem"); 		type.addItem("Standard+WX"); 		type.addItem( "Site+Base+WX"); 		type.addItem( "Site+Base+Modem+WX"); 		add( new Label("LBU Type - Select")); 		type.select( n.lbu_type); 		add( type ); 				 		add( new Label("Phone: "));				// ROW 8 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 9 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 10 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{	 		int unit = 0; 		int save_unit;	 		if( event.target == cancel )		// CANCEL BUTTON 		{	 			this.dispose();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			n.clear();				// Remove the old one 			 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			try{ lbu.period = Integer.parseInt( lbu_period.getText()); } 			catch( NumberFormatException x){ lbu.period = 1; } 			 			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			n.lbu_type = type.getSelectedIndex(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	}  } 

Added JavaPlanner/Planning/Nodes/Dialog/node_dialog_relay.java.



>
1
import java.applet.Applet; import java.awt.*;  /*********************************************************** * *  This is the node information dialog *  Add RELAY period * ************************************************************/  public class node_dialog_relay extends Frame  {  	// Window components 	 	TextField name; 	TextField address; 	TextField sys; 	TextField unit_num; 	TextField unit_location; 	TextField local_phone; 	TextField local_fax; 	Button ok; 	Button cancel; 	Choice type; 	 	relay n;							// Node we are working on 	 	public node_dialog_relay(String title) 	{ 		// (1) Set title & layout 		 		super( title ); 		setLayout(new GridLayout(9,2)); 				 	} 	 	public boolean show( node me ) 	{ 		n = (relay) me; 		 		/* 1) With the node information build the textfields in the window */ 		 		add(new Label("Site Name: ")); 		name = new TextField(""+node.site_name);	// Row 1 		add( name );  		add( new Label("Site Address: "));		// Row 2 		address = new TextField(""+node.site_address); 		add( address ); 		 		add(new Label("System: "));				// ROW 3 		sys = new TextField(""+node.system,5); 		add( sys ); 		 		add(new Label("Unit: "));					// ROW 4	 		unit_num = new TextField(""+n.unit,5); 		add( unit_num );  		add(new Label("Location: "));				// ROW 5 		unit_location = new TextField(n.location,30); 		add(unit_location); 		 		type = new Choice();						// ROW 6 		type.addItem("Standard"); 		type.addItem( "Relay+Modem"); 		type.addItem( "Base" ); 		add( new Label("RELAY Type - Select")); 		type.select( n.relay_type); 		add( type ); 				 		add( new Label("Phone: "));				// ROW 7 		local_phone = new TextField(node.phone,16); 		add( local_phone ); 		 		add( new Label("FAX: "));					// ROW 8 		local_fax = new TextField(node.fax,16); 		add(local_fax); 		 		ok = new Button( "OK" );					// ROW 9 		cancel = new Button("CANCEL"); 		add(ok); 		add( cancel ); 		 		 		/* Display the thing at the normal position */ 		 		this.reshape(50,50,400,220); 		this.show(); 		return( true ); 	} 	 	// Called when user clicks a button or chooses a menu 	public boolean action( Event event,Object arg) 	{	 		int unit = 0; 		int save_unit;	 		if( event.target == cancel )		// CANCEL BUTTON 		{	 			this.dispose(); 			n.show();				 			return(false); 		} 		 		if( event.target == ok ) 		{ 			// Ok, pull the fields and change them 			// Note first do the local fields 			// Check for duplicate unit # 			 			try{ unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; } 			 			save_unit = n.unit; 			if( unit != n.unit && n.setUnit( unit ) == false ) 			{ 					Alert a = new Alert("ERROR","Duplicate Unit #"); 					this.dispose(); 					return( false ); 			} 		 			n.location = unit_location.getText(); 			try{ n.unit = Integer.parseInt( unit_num.getText()); } 			catch( NumberFormatException x){ n.unit = 0; }  			// Now do the node class fields 			 			node.site_name = name.getText(); 			node.site_address = address.getText(); 			 			try { node.system = Integer.parseInt( sys.getText() ); } 			catch( NumberFormatException x) { n.system = 0; } 			 			node.phone = local_phone.getText(); 			node.fax = local_fax.getText(); 			 			n.relay_type = type.getSelectedIndex(); 			 			// Pitch the dialog and return with node re-written 			 			this.dispose(); 			 			n.clear(); 			n.show(); 			 			return( true ); 		} 		 		return( false ); 	} 	 	// Close window on click of GO-AWAY box 	 	public boolean handleEvent( Event e) 	{ 		if( e.id == Event.WINDOW_DESTROY ) 		{ 			this.dispose(); 			return( true ); 		} 		else 			return( super.handleEvent(e) );		// Let big brother do it 	} } 

Added JavaPlanner/Planning/Nodes/G1.java.



>
1
// G1.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * G1 Object * 29 Sept 1997 Add translate for scroll * ************************************************************/  public class G1 extends node { 	 	public void create(int x,int y,int sys,Canvas win) 	{ 		this.create_full(x,y,sys,this.getUnit(),win); 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 10; 				 		this.show(); 		 	}	  	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m;  		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	g.setColor( Color.black ); 						break; 						 		case CLEAR:	g.setColor( dw.getBackground() ); 						break; 						 		case SELECTED: g.setColor( Color.gray ); 						break; 		} 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 		} 		 		 		// (2) Draw it 					 		g.drawOval(draw_x,draw_y,size,size); 		g.fillOval(draw_x,draw_y,size,size); 		g.drawString("G1",draw_x,draw_y-5); 		 		// (3) Do the unit #  		 		u_string = "" + unit; 		g.drawString( u_string,draw_x+size+2,draw_y+size/2); 		 	} 	 	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit(  ); 		 		// Remove the data 		 		super.delete_node(); 	} 		 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.G1 );		// 3 = G1 	}  	public String node_name() 	{ 		return( "G1" ); 	} 	 	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.g_nums,1); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.g_nums,1); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.g_nums,1); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.g_nums,1); 		return( result ); 	}  	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G1 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		//this.Qprint(item+ " "," "," ","G1 UNIT - "+unit+" "+parent.location," ",out); 		this.Qprint(" ","1","G-1 UNIT "+unit,"Groundhog Wireless Volume Counter","1075",out); 		return( item+1); 	}  } 

Added JavaPlanner/Planning/Nodes/G2.java.



>
1
//G2.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * G2 Object *  29 Sept 1997 Add translate for scroll *  14-Feb-98	Add Quote generator *  16-Feb-98   Add G2 types * ************************************************************/  public class G2 extends node {  	static public final int STANDARD = 0; 	static public final int WX = 1;  	public int g2_type = STANDARD;				// Type of G2 	 	public void create( int x,int y,int sys,Canvas win) 	{ 		this.create_full(x,y,sys,this.getUnit(),win);		 	} 		 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 15;		// New size of G2 				 		this.show(); 	}  	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 	 		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	g.setColor( Color.black ); 						break; 						 		case CLEAR:	g.setColor( dw.getBackground() ); 						break; 						 		case SELECTED: g.setColor( Color.gray ); 						break; 		} 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 		} 		 		// (2) Draw it 					 		g.drawOval(draw_x,draw_y,size,size); 		g.fillOval(draw_x,draw_y,size,size); 		switch( g2_type ) 		{ 			case STANDARD:		g.drawString("G2",draw_x,draw_y-5); 								break; 								 			case WX:			g.drawString("G2-WX",draw_x,draw_y-5); 								break; 		} 		 		// (3) Do the unit #  		 		u_string = "" + unit; 		g.drawString( u_string,draw_x+size+2,draw_y+size/2); 		 	}  	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog_g2 n; 		String title; 		 		// (1) Build the title 		 		title = this.node_name(); 		 		title = title + unit; 		 		n = new node_dialog_g2(title); 		n.show(this); 	}  	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit( ); 		 		// Remove the data 		 		super.delete_node(); 	} 	 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.G2 );		// 4= G2 	}  	public String node_name() 	{ 		return( "G2" ); 	} 	 	public int get_g2_type( ) 	{ 		return( g2_type ); 	}  	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.g_nums,1); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.g_nums,1); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.g_nums,1); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.g_nums,1); 		return( result ); 	} 	 	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G2 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		//this.Qprint(item+ " "," "," ","G2 UNIT - "+unit+" "+parent.location," ",out); 		switch( g2_type ) { 			 			case STANDARD:	this.Qprint(item+" ","1","G-2 UNIT "+unit, 								"Groundhog Wireless Volume Counter/Classifier","1895",out); 							break; 							 			case WX:		this.Qprint(item+" ","1","G-2 UNIT "+unit, 								"Groundhog Counter/Classifier with Weather","1995",out); 							break; 		} 							 		return( item+1); 	} } 

Added JavaPlanner/Planning/Nodes/base.java.



>
1
// Base.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * *  BASE - This is the base station object * 19 Sep 1997 Add translate to draw * ************************************************************/  public class base extends node {  	public void create( int x,int y,int sys,Canvas win) 	{ 		this.create_full(x,y,sys,200,win); 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{ 		int i; 				 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		 		node.system = sys; 		unit = u; 		dw = win; 		size = 30; 		 		// Reset all the numbers 		 		for( i=0; i<node.g_nums.length; i++ ) 			node.g_nums[i] = false;  		for( i=0; i<node.l_nums.length; i++ ) 			node.l_nums[i] = false;  		for( i=0; i<node.r_nums.length; i++ ) 			node.r_nums[i] = false; 				 		this.show(); 		 	}  	/* This class actuallly draws the image 	     CLEAR is TRUE or FALSE 	     IF TRUE then draw the image in color 	     IF FALSE then clear the image 	*/  	public void draw_node( int type ) 	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 		FontMetrics fm; 		int x,y; 	 		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	g.setColor( Color.red ); 						break; 						 		case CLEAR:	g.setColor( dw.getBackground() ); 						break; 						 		case SELECTED: g.setColor( Color.gray ); 						break; 		} 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 		} 		 		// (2) Draw it 		 		g.drawRect(draw_x,draw_y,size,size); 		g.drawString("BASE",draw_x,draw_y-5); 		 		// (3) Do the unit #  		 		fm = g.getFontMetrics(); 		u_string = "" + unit; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = draw_y + fm.getHeight() - 5; 		g.drawString( u_string,x,y); 		 		u_string = "" + system; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = y + fm.getHeight(); 		g.drawString( u_string,x,y); 		 	}			  	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.BASE );		// 0 = BASE 	} 	 	public String node_name() 	{ 		return( "BASE" ); 	}  	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		return( 200 ); 	} 	 	public void markUnit( ) 	{ 	} 	 	public void removeUnit( ) 	{ 	}  	public boolean setUnit( int num ) 	{ 		return( true ); 	} 	 	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this BASE 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	*			win	- Window for display stuff 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+ " "," "," ","Base "+location," ",out); 		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out); 		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out); 		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out); 		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out); 		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out); 		this.Qprint(" ","1","BSM-2","Base Station Master Computer","5800",out); 		this.Qprint(" ","1","WDM","Wireless Data Management","1250",out); 		this.Qprint(" ","1","MRC-2","Master RFM/CPU Interface","150",out); 		this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out);		 		return( item+1); 	}  } 

Added JavaPlanner/Planning/Nodes/fbase.java.

























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
// FBase.java

import java.applet.Applet;
import java.awt.*;
import java.io.*;

/************************************************************
*
*  BASE - This is the base station object
* 19 Sep 1997 Add translate to draw
*
************************************************************/

public class fbase extends node {

	public void create( int x,int y,int sys,Canvas win)
	{
		this.create_full(x,y,sys,1,win);
	}
	
	public void create_full( int x,int y,int sys,int u,Canvas win)
	{
		int i;
				
		cur_x = x - org_x;
		cur_y = y - org_y;
		draw_x = x;
		draw_y = y;
		
		node.system = sys;
		unit = u;
		dw = win;
		size = 30;
		
		// Reset all the numbers
		
		for( i=0; i<node.node_nums.length; i++ )
			node.node_nums[i] = false;
				
		this.show();
		
	}

	/* This class actuallly draws the image
	     CLEAR is TRUE or FALSE
	     IF TRUE then draw the image in color
	     IF FALSE then clear the image
	*/

	public void draw_node( int type )
	{
		Graphics g = dw.getGraphics();
		String u_string;
		metric m;
		FontMetrics fm;
		int x,y;
	
		// (1) Set the color
		
		switch( type ) {
			
		case NORMAL:	g.setColor( Color.red );
						break;
						
		case CLEAR:	g.setColor( dw.getBackground() );
						break;
						
		case SELECTED: g.setColor( Color.gray );
						break;
		}
		
		// (1a) Draw the connection to parent if any
		
		if( parent != null )
		{
			m = new metric( this,parent);
			g.drawLine( m.x1,m.y1,m.x2,m.y2);
		}
		
		// (2) Draw it
		
		g.drawRect(draw_x,draw_y,size,size);
		g.drawString("FBASE",draw_x,draw_y-5);
		
		// (3) Do the unit # 
		
		fm = g.getFontMetrics();
		u_string = "" + unit;
		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2;
		y = draw_y + fm.getHeight() - 5;
		g.drawString( u_string,x,y);
		
		u_string = "" + system;
		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2;
		y = y + fm.getHeight();
		g.drawString( u_string,x,y);
		
	}			

	/***********************************************************
	*
	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one
	*
	***********************************************************/
	
	public int node_type()
	{
		return( node.FBASE );		// 0 = BASE
	}
	
	public String node_name()
	{
		return( "FBASE" );
	}

	/*********************************************************************
	*
	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units
	*
	**********************************************************************/
	
	public int getUnit( )
	{
		return( 1 );
	}
	
	public void markUnit( )
	{
	}
	
	public void removeUnit( )
	{
	}

	public boolean setUnit( int num )
	{
		return( true );
	}
	
	/*********************************************************************
	*
	*  QUOTE GENERATOR - Generate the stuff for this BASE
	*
	*	INPUT:	item	- Item count for this thing
	*			out	- Output file stream
	*			win	- Window for display stuff
	*
	*	OUTPUT:	Item number advanced
	*
	**********************************************************************/

	int Qgen( int item,PrintStream out )
	{
		// Write the stuff in the file
	/*	
		this.Qprint(item+ " "," "," ","Base "+location," ",out);
		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out);
		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out);
		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out);
		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out);
		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out);
		this.Qprint(" ","1","BSM-2","Base Station Master Computer","5800",out);
		this.Qprint(" ","1","WDM","Wireless Data Management","1250",out);
		this.Qprint(" ","1","MRC-2","Master RFM/CPU Interface","150",out);
		this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out);		
		return( item+1);
*/
            return 0;
	}

}

Added JavaPlanner/Planning/Nodes/lbu.java.



>
1
// LBU.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * LBU Local base unit object * 29 Sept 1997 Add translate for scroll *  8 Oct 97 Add special get info with period for LBU *  8 Oct 97 Make period class var for LBU's so they will all have the same *  3 Nov 97 Add TYPE to this item so it can show various types * 20 Jan 98 Add LBU with weather (WX) * ************************************************************/  public class lbu extends node {  	static public int period;			// Node period in minutes 	 	static public final int STANDARD = 0; 	static public final int SITE_BASE = 1; 	static public final int SITE_BASE_MODEM = 2; 	 	// Make types in order 	 	static public final int STANDARD_WX = 3; 	static public final int SITE_BASE_WX = 4; 	static public final int SITE_BASE_MODEM_WX = 5;  	public int lbu_type = lbu.STANDARD;					// Type of LBU 	 	public void create( int x,int y,int sys,Canvas win) 	{		 		this.create_full( x,y,sys,this.getUnit(),win);		 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 30; 		period = 1;				// Set default period 				 		this.show(); 		 	} 		 	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 		FontMetrics fm; 		int x,y; 		String s; 		Color draw_color = Color.magenta; 		int stored_type = lbu_type; 		int i; 	 		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	draw_color = Color.magenta; 						break; 						 		case CLEAR:	draw_color = dw.getBackground(); 						//lbu_type = SITE_BASE_MODEM; 						break; 						 		case SELECTED: draw_color = Color.gray; 						break; 		} 		 		g.setColor( draw_color );  		// (1a) Draw the connection to parent if any 		//  If NORMAL then change connection color on MODEM 		// units, on std unit leave magenta 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			if( type == NORMAL ) 			{ 				switch( lbu_type ) { 					 					case lbu.STANDARD: 					case lbu.STANDARD_WX:	break; 					 					default:	g.setColor( Color.green ); 				} 			} 				 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 			g.setColor( draw_color ); 		} 				 		// (2) Draw it 		 		// Note depending on type put in 1 or 2 background offset 		// boxes to show BASE & BASE+MODEM 		 		i = lbu_type; 		if( lbu_type >= STANDARD_WX ) 		{ 			i = i - STANDARD_WX; 		} 		 		switch( i ) { 			 			case SITE_BASE:	g.drawRoundRect(draw_x,draw_y-2, 									size,size,20,20); 								break; 								 			case SITE_BASE_MODEM:g.drawRoundRect(draw_x,draw_y-2, 									size,size,20,20); 								   g.drawRoundRect(draw_x,draw_y-4, 									size,size,20,20); 									break; 		} 		 		g.drawRoundRect(draw_x,draw_y,size,size,20,20); 		 		if( location.length() == 0 ) 			g.drawString("LBU",draw_x,draw_y-5); 		else 		{ 			g.setColor( dw.getBackground() ); 			g.drawString("LBU",draw_x,draw_y-5); 			g.setColor( draw_color ); 			try{ s = location.substring(0,8); } 			catch( StringIndexOutOfBoundsException ob)  			{ s = location; } 			g.drawString(s,draw_x,draw_y - 5); 		} 		 		// Show a weather unit 		 		if( lbu_type >= STANDARD_WX ) 			g.drawString("WX",draw_x+5,draw_y+40);  		// (3) Do the unit #  		 		fm = g.getFontMetrics(); 		u_string = "" + unit; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = draw_y + fm.getHeight() - 4; 		g.drawString( u_string,x,y); 		 		u_string = "" + system; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = y + fm.getHeight(); 		g.drawString( u_string,x,y);  		lbu_type = stored_type; 	} 	 	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog_lbu n; 		String title; 		 		// (1) Build the title 		 		title = this.node_name(); 		 		title = title + unit; 		 		n = new node_dialog_lbu(title); 		n.show(this); 	} 	 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.LBU );		// 2 = LBU 	} 	 	public String node_name() 	{ 		return( "LBU" ); 	} 	 	public int get_lbu_type( ) 	{ 		return( lbu_type ); 	} 	 	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit(); 		 		// Remove the data 		 		super.delete_node(); 	} 		 	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.l_nums,101); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.l_nums,101); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.l_nums,101); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.l_nums,101); 		return( result ); 	}  	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G2 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+ " "," "," ","LBU "+location," ",out); 		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out); 		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out); 		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out); 		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out); 		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out); 		 		switch( lbu_type ) { 			 			case STANDARD: 			case SITE_BASE:			break;			// Nothing extra 			 			case SITE_BASE_MODEM:		this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out); 										break; 			 			case STANDARD_WX:							 			case SITE_BASE_WX:			this.Qprint(" ","1","WX-1","Weather Station w/Precip","7200",out); 										break; 										 			case SITE_BASE_MODEM_WX:	this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out); 										this.Qprint(" ","1","WX-1","Weather Station w/Precip","7200",out); 										break; 			} 		 		return( item+1 ); 	}  } 

Added JavaPlanner/Planning/Nodes/node.java.



>
1
/* node.java * *   Node base class -  *   *    6-Jan-2016 Started firenet work */  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * *  NODE - This is the base class for system objects * *  24 Sept 1997 Change size allow up to 60 Ghogs & start relays @60 *  29 Sept 1997 Add origin values to structure & method to change them *  16 Feb 1998 Add stuff for quote prints *   6 Jan 2016 Add Firenet stuff * ************************************************************/  public class node  {  	static public int system;			// Make CLASS VAR's so we have only 1 	static public String site_name;			// Where it is 	static public String site_address; 	static public String phone; 	static public String fax; 	 	// Available numbers - note all start as FALSE when TRUE used         static public boolean[] node_nums = new boolean[6];             // Available Firenet nodes 	static public boolean[] g_nums = new boolean[60];		// Available Ghog numbers 	static public boolean[] r_nums = new boolean[25];		// Available relay numbers 	static public boolean[] l_nums = new boolean[25];		// Available lbu numbers 	static public int org_x = 0;								// Originial origin 	static public int org_y = 0;								// Original origin 	 	public int unit;					// Object vars 1/node 	public String location = "";  	public int cur_x,cur_y;		// Current position 	public int draw_x,draw_y;	// Draw node here (cur_x+org_x),(cur_y+org_y); 	public node parent = null;	// Pointer to parent 	public static final int NODE_MAX = 16; 	public node[] children = new node[NODE_MAX]; 	public Canvas dw; 	public boolean selected = false; 	public int size; 	//public int period;				// Node period in minutes 	 	// Drawing actions  	public static final int NORMAL = 0;		// Normal drawing 	public static final int CLEAR = 1;		// Clear the drawing 	public static final int SELECTED = 2;		// Show selected	  	// Unit types 	public static final int BASE = 0; 	public static final int RELAY = 1; 	public static final int LBU = 2; 	public static final int G1 = 3; 	public static final int G2 = 4;         public static final int FBASE = 5; 	 	// Class methods 	 	/********************************************************** 	* 	*  NODE INITER 	* 	**********************************************************/ 	 	public void create( int x,int y,int sys,Canvas win) 	{ 		// NOTE: X,Y here are DISPLAY values 		// Cur_X,Cur_Y are absolute values	 		this.create_full(x,y,sys,1,win);		 	}  	public void create_full( int x,int y,int sys,int u,Canvas win) 	{		 		cur_x = x - org_x; 		cur_y = y - org_y; 		draw_x = x; 		draw_y = y; 		node.system = sys; 		unit = u; 		dw = win; 		//period = 0; 					 		this.show(); 		 	}  	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( -1 ); 	}  	/*********************************************************** 	* 	*  NODE_NAME()	- Return name of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public String node_name() 	{ 		return( "NODE" ); 	} 	 	/*********************************************************** 	* 	*  NEW_ORIGIN(int x,int y)	- Set ORIGIN to this value for translate 	* 	*	INPUT:	x,y		- NEW origin values 	* 	*	OUTPUT:	These values saved as new origin 	*			Change DRAW X,DRAW Y in all children 	* 	************************************************************/ 	 	public void new_origin( int x,int y ) 	{ 		int i; 		 		node.org_x = x; 		node.org_y = y; 		 		this.draw_x = this.cur_x + node.org_x; 		this.draw_y = this.cur_y + node.org_y; 		 		for( i=0; i< children.length; i++ ) 		{ 			if( children[i] != null ) 				children[i].new_origin(x,y); 		} 	} 	 	public void scroll_x( int x ) 	{ 		this.new_origin( x,node.org_y ); 	} 	 	public void scroll_y( int y ) 	{ 		this.new_origin( node.org_x,y ); 	}  	/*********************************************************** 	* 	*  SHOW() - This paints the node & children 	* 	************************************************************/ 	 	public void show( ) 	{ 		int i; 				 		// Draw node 		 		this.draw_node(NORMAL); 		 		// Draw children 		 		for( i=0; i< children.length; i++ ) 		{ 			if( children[i] != null ) 				children[i].show(); 		} 	}  	/*********************************************************** 	* 	*  CLEAR() - This unpaints the node & children 	* 	************************************************************/ 	 	public void clear( ) 	{ 		int i; 		 		// Clear this node 		 		this.draw_node(CLEAR); 		 		// Clear children 		 		for( i=0; i< children.length; i++ ) 		{ 			if( children[i] != null ) 				children[i].clear(); 		} 		 	}  	/*********************************************************** 	* 	*  SELECT() - This shows selected/unselected 	* 	************************************************************/ 	 	public void select( ) 	{ 		this.draw_node(SELECTED); 	} 	 	// This is the actual drawing routine - overide this in subclass 	 	public void draw_node(int type) 	{ 	} 	 	/*********************************************************** 	* 	*  ADD_CHILD	- This adds a child node to an existing node 	* 	************************************************************/ 	 	public void add_child( node n ) 	{ 		int i; 		Alert err; 		 		/* (1) First see if this node is already part of the children */ 		 		for( i=0;i<children.length; i++ ) 		{ 			if( children[i] != null ) 			{ 				if( n == children[i] ) 					return; 			} 		} 		 		/* (2) Ok add it */ 	 		for( i=0;i<children.length; i++ ) 		{ 			if( children[i] == null ) 			{ 				children[i] = n; 				return; 			} 		} 		 		/* (3) Falling out here means we have failed !! */ 		 		err = new Alert("ERROR","No room to add child node"); 	}  	/*********************************************************** 	* 	*  ADD_PARENT	- This adds a parent to a node 	* 	************************************************************/ 		 	public void add_parent( node n ) 	{ 		parent = n; 	}  	/*********************************************************** 	* 	*  DELETE_CHILD	- This removes a child node to an existing node 	* 	************************************************************/ 	 	public void delete_child( node n ) 	{ 		int i; 		Alert err; 		 		/* (1) First see if this node is already part of the children */ 		 		for( i=0;i<children.length; i++ ) 		{ 			if( children[i] != null ) 			{ 				if( n == children[i] ) 				{ 					children[i] = null;		// & remove it 					return; 				} 			} 		} 	}  	/*********************************************************** 	* 	*  DELETE_PARENT	- Remove parent 	* 	************************************************************/ 		 	public void delete_parent(  ) 	{ 		parent = null; 	} 	 	/*********************************************************** 	* 	*  LOCATE_NODE	- This determines if a mouse hit landed on a node 	* 	************************************************************/ 	 	public node locate_node(int x, int y ) 	{ 		int i; 		node n; 		 		/* (1) First check all the children */ 		 		if( children != null ) 		{ 			for( i=0;i<children.length; i++ ) 			{ 				if( children[i] != null ) 				{ 					n = children[i].locate_node(x,y); 					if( n != null ) 						return( n ); 				} 			} 		} 		 		/* (2) Now check this one */ 		  		if( y < draw_y ) 			return( null ); 		if( y > draw_y + 30 ) 			return( null ); 		if( x < draw_x ) 			return( null ); 		if( x > draw_x + 30 ) 			return( null ); 			 		return( this ); 	} 	 	/*********************************************************** 	* 	*  MOVE_NODE	- This moves a node to a new position 	* 	************************************************************/ 		 	public void move_node( int x,int y) 	{ 		this.clear();		// Clear it 		 		cur_x = x - org_x;			// Move it 		//cur_y = y + org_y; 		cur_y = y; 		 		draw_x = x - org_x; 		//draw_y = y + org_y;		// Correction for panel at top 		draw_y = y; 		 		this.select();		// Show it 	} 	 	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		node n; 		int i; 		 		/* (1) Delete all the children */ 		 		if( children != null ) 		{ 			for( i=0;i<children.length; i++ ) 			{ 				if( children[i] != null ) 				{ 					children[i].delete_node(); 					children[i] = null; 				} 			} 		} 		 		/* (1) Delete reference from the parent node */ 		 		if( this.parent != null ) 		{ 			n = this.parent; 			for( i=0; i<n.children.length; i++ ) 			{ 				if( this == n.children[i] ) 				{ 					n.children[i] = null; 					break; 				} 			} 		} 		 		/* (3) Make the image disappear */ 		 		this.clear(); 	}  	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog n; 		String title; 		 		// (1) Build the title 		 		 		title = this.node_name(); 		 		title = title + unit; 		 		this.clear();					// Clear before running dialog 		n = new node_dialog(title);	 		n.show(this); 	} 	 	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public boolean setUnit( int num ) 	{ 		// Will be filled in by the class type 		 		return( false ); 	} 	 	public int low_getUnit(boolean list[],int offset ) 	{ 		int i; 		 		for( i=0; i<list.length; i++ ) 			if( list[i] == false ) 				break; 		return( i+offset ); 	} 	 	public void low_removeUnit( int num,boolean list[],int offset) 	{ 		if( this.checkUnit( num,list,offset) == false ) 			return; 			 		list[num-offset] = false; 	} 	 	public void low_markUnit( int num,boolean list[],int offset ) 	{ 		if( this.checkUnit( num,list,offset) == false ) 			return; 			 			list[num-offset] = true; 	} 	 	public boolean low_setUnit( int num,boolean list[],int offset ) 	{ 		// Check for bad number 		 		if( this.checkUnit( num,list,offset) == false ) 			return( false );  		//(1) Is this number unused ? 		 		if( list[num-offset] == true ) 			return( false );			// NOT SET bad number 			 		// (2) Ok remove the old number 		 		list[this.unit-offset] = false; 		 		//(3) Add and set new number 		 		list[num-offset] = true; 		this.clear();				// Clear the old one 		this.unit = num; 		this.show();				// Show the new one 		return( true ); 	} 	 	// Make sure you don't get an exception when calling this  	 	public boolean checkUnit( int num, boolean list[], int offset ) 	{ 		boolean val; 		Alert a; 		 		// Check for an array bound exception 		 		try{ val = list[num-offset]; } 		catch( ArrayIndexOutOfBoundsException ab ) 			{  				a = new Alert("ERROR","Bad Unit Number"); 				return( false );  			} 		 		// All ok return TRUE 		 		return( true ); 	} 	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this G2 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	*			win	- Window for display stuff 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+" "," "," ","\tNODE Stuff\r\n"," ",out); 		return( item+1); 	} 	 	/********************************************************************* 	* 	*  QPRINT(item,qty,stock_no,desc,cost,out) 	* 	*	INPUT:	item		- Item # 	*			qty		- # Items 	*			stock_no	- NM Stock # 	*			desc		- Item description 	*			cost		- Unit price 	*			out		- Print stream 	* 	*	OUTPUT:	NONE 	*			Print out items with \t between them and \r\n at end 	*			of line 	* 	*********************************************************************/ 	 	void Qprint(String item, 				 String qty, 				 String stock_no, 				 String desc, 				 String cost, 				 PrintStream out) 	{ 		// Print the stuff with TABS between items 		 		out.print(item+"\t"+qty); 		out.print("\t"+stock_no+"\t"+desc); 		out.print("\t"+cost+"\r\n"); 	} 	 }		

Added JavaPlanner/Planning/Nodes/relay.java.



>
1
// Relay.java  import java.applet.Applet; import java.awt.*; import java.io.*;  /************************************************************ * * RELAY Relay object *  29 Sept 1997 Add translate for scroll *    4 Nov 1997 Add code to handle various types of RELAY's *                                                    STD *						        MODEM (really a base station) * ************************************************************/  public class relay extends node {  	static public final int RELAY_STANDARD	=0;		// Regular relay station 	static public final int RELAY_MODEM		=1;		// Station with modem 	static public final int RELAY_BASE		=2;		// Base station type 	 	public int relay_type = relay.RELAY_STANDARD;		// Relay type  	public void create( int x,int y,int sys,Canvas win) 	{ 		this.create_full( x,y,sys,this.getUnit(),win); 	} 	 	public void create_full( int x,int y,int sys,int u,Canvas win) 	{	 		draw_x = x; 		draw_y = y;	 		cur_x = x - org_x; 		cur_y = y - org_y; 		node.system = sys; 		unit = u; 		this.markUnit(); 		dw = win; 		size = 30; 				 		this.show(); 		 	} 		 	public void draw_node( int type )  	{ 		Graphics g = dw.getGraphics(); 		String u_string; 		metric m; 		FontMetrics fm; 		int x,y; 		String s; 		Color draw_color = Color.blue; 		int stored_type = relay_type;  		// (1) Set the color 		 		switch( type ) { 			 		case NORMAL:	draw_color = Color.blue; 						break; 						 		case CLEAR:	draw_color = dw.getBackground(); 						//relay_type = RELAY_MODEM; 						break; 						 		case SELECTED: draw_color = Color.gray; 						break; 		} 		g.setColor( draw_color ); 		 		// (1a) Draw the connection to parent if any 		 		if( parent != null ) 		{ 			m = new metric( this,parent); 			 			// Set color of connecting line depending on type in std draw 			 			if( type == NORMAL ) 			{ 				switch( relay_type ) { 					 					case relay.RELAY_STANDARD:	break; 					 					case relay.RELAY_MODEM:		g.setColor( Color.green ); 												break; 												 					case relay.RELAY_BASE:		g.setColor( Color.yellow ); 												break; 				} 			} 			g.drawLine( m.x1,m.y1,m.x2,m.y2); 			g.setColor( draw_color ); 		} 							 		// (2) Draw it  		// Note depending on type put in 1 or 2 background offset 		// boxes to show BASE & BASE+MODEM 		 		switch( relay_type ) { 		 			case RELAY_STANDARD:		g.drawOval(draw_x,draw_y,size,size); 										break; 			 			case RELAY_MODEM:			g.drawOval(draw_x,draw_y-2, 											size,size); 										g.drawOval(draw_x,draw_y-4, 											size,size); 										break; 								 			case RELAY_BASE:			g.drawRect(draw_x,draw_y,size,size); 										g.drawOval(draw_x,draw_y,size,size); 										break;  		} 					 		if( location.length() == 0 ) 			g.drawString("RELAY",draw_x,draw_y-5); 		else 		{ 			g.setColor( dw.getBackground() ); 			g.drawString("RELAY",draw_x,draw_y-5); 			g.setColor( draw_color ); 			try{ s = location.substring(0,8); } 			catch( StringIndexOutOfBoundsException ob)  			{ s = location; } 			g.drawString(s,draw_x,draw_y - 5); 		} 		 		// (3) Do the unit #  		 		fm = g.getFontMetrics(); 		u_string = "" + unit; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = draw_y + fm.getHeight() - 5; 		g.drawString( u_string,x,y); 		 		u_string = "" + system; 		x = draw_x + (size - (fm.charWidth('0') * u_string.length()))/2; 		y = y + fm.getHeight(); 		g.drawString( u_string,x,y);  		relay_type = stored_type; 	}  	/************************************************************ 	* 	*  DELETE_NDOE - This deletes this node and all it's children 	* 	*************************************************************/ 	 	public void delete_node( ) 	{ 		// Remove unit number from list 		 		this.removeUnit( ); 		 		// Remove the data 		 		super.delete_node(); 	} 	 	/******************************************************************** 	* 	*  INFO	- Show dialog with node information to user 	* 	*  ALLOW IT TO BE CHANGED 	* 	*********************************************************************/ 	 	public void info() 	{ 		node_dialog_relay n; 		String title; 		 		// (1) Build the title 		 		title = this.node_name(); 		 		title = title + unit; 		 		n = new node_dialog_relay(title); 		n.show(this); 	} 	 		 	/*********************************************************** 	* 	*  NODE_TYPE()	- Return type of node (BASE,LBU....)	- override this one 	* 	***********************************************************/ 	 	public int node_type() 	{ 		return( node.RELAY );		// 1 = RELAY 	} 	 		public String node_name() 	{ 		return( "RELAY" ); 	} 	 	public int get_relay_type( ) 	{ 		return( relay_type ); 	}  	/********************************************************************* 	* 	*  UNIT_NUM_ASSIGNMENTS	- These are a called by specific subclasses to remove/or add units 	* 	**********************************************************************/ 	 	public int getUnit( ) 	{ 		int i; 	 		i =	this.low_getUnit(node.r_nums,60); 	 		return( i ); 	} 	 	public void markUnit( ) 	{ 		this.low_markUnit(this.unit,node.r_nums,60); 	} 	 	public void removeUnit( ) 	{ 		this.low_removeUnit(this.unit,node.r_nums,60); 	}  	public boolean setUnit( int num ) 	{ 		boolean result; 		 		result = low_setUnit( num,node.r_nums,60); 		return( result ); 	}  	/********************************************************************* 	* 	*  QUOTE GENERATOR - Generate the stuff for this RELAY 	* 	*	INPUT:	item	- Item count for this thing 	*			out	- Output file stream 	* 	*	OUTPUT:	Item number advanced 	* 	**********************************************************************/  	int Qgen( int item,PrintStream out ) 	{ 		// Write the stuff in the file 		 		this.Qprint(item+" "," "," ","Relay "+location," ",out); 		this.Qprint(" ","1","BSR-2","Base Station Repeater Cabinet","2100",out); 		this.Qprint(" ","1","SG-30","Solar Generator Panel 30W","690",out); 		this.Qprint(" ","50","AC-41N","Antenna Feed Line Cable","1.55",out); 		this.Qprint(" ","1","BA-03","Base Station Antenna 3dB","195",out); 		this.Qprint(" ","1","AT-20","Self Supporting Tower 20ft","390",out); 		switch( relay_type ) { 			 			case RELAY_MODEM:	this.Qprint(" ","1","RPM28.8", 									"Remote Polling Modem","395",out); 								break; 								 			case RELAY_BASE:		this.Qprint(" ","1","BSM-2","Base Station Master Computer","5800",out); 									this.Qprint(" ","1","WDM","Wireless Data Management","1250",out); 									this.Qprint(" ","1","MRC-2","Master RFM/CPU Interface","150",out); 									this.Qprint(" ","1","RPM28.8","Remote Polling Modem","395",out);		 									break; 		} 		return( item+1); 	}  }

Added JavaPlanner/Planning/Resources/Site3strings.properties.



































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
message=Hello World!
fileMenu=File
editMenu=Edit
newItem=New
openItem=Open...
closeItem=Close
saveItem=Save
saveAsItem=Save As...
undoItem=Undo
cutItem=Cut
copyItem=Copy
pasteItem=Paste
clearItem=Clear
selectAllItem=Select All
frameConstructor=Site3
appVersion=1.0
copyright=Copyright (c) 2016 Pandora Products. All rights reserved.

Added JavaPlanner/Planning/Resources/build.xml.



































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="UTF-8"?>
<project name="Site" default="jar" basedir=".">
    <property name="src" location="src"/>
    <property name="bin" location="bin"/>
    <property name="lib" location="lib"/>
    <property name="dist" location="dist"/>
    <property name="jarfile" location="${dist}/${ant.project.name}.jar"/>
    <property name="compile.debug" value="true"/>

    <fileset id="lib.jars" dir="${lib}">
        <include name="**/*.jar"/>
    </fileset>

    <path id="lib.path">
        <fileset refid="lib.jars"/>
    </path>

    <!-- Stub install target.  Install should depend on the 'jar' target,
         and copy the built objects to the 'dist' directory. -->
    <target name="install" description="Install jar" depends="jar">
    </target>

    <target name="compile" description="Compile code">
        <mkdir dir="${bin}"/>
        <mkdir dir="${lib}"/>
        <javac srcdir="${src}" destdir="${bin}"
               source="1.3" target="1.3"
               includeAntRuntime="no"
               classpathref="lib.path" debug="${compile.debug}">
        </javac>
    </target>

    <target name="jar" depends="compile" description="Build jar">
        <mkdir dir="${dist}"/>
        <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
            <!-- Merge library jars into final jar file -->
            <zipgroupfileset refid="lib.jars"/>
        </jar>
    </target>

    <target name="run" depends="jar" description="Run jar file">
        <java jar="${jarfile}" fork="yes" failonerror="true"/>
    </target>

    <target name="clean" description="Remove build and dist directories">
        <delete dir="${bin}"/>
        <delete dir="${dist}"/>
    </target>
</project>

Added JavaPlanner/Planning/Support/GifImage.java.



>
1
/*  * @(#)GifImage.java    1.1     96/03/16    *  * Copyright (c) 1996 Tadashi Hamano All Rights Reserved.  *  * Permission to use, copy, modify, and distribute this software  * and its documentation for NON-COMMERCIAL purposes and without  * fee is hereby granted provided that this copyright notice  * appears in all copies.   *  * I SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS  * A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE  * OR ITS DRIVATIVES.  *  *      History :  *              1.0     96/03/14                initial version  *              1.1     96/03/16                fix a bug (transparent)  */  // This is based on "GifImage" code on alpha3 API. // Listed below is the original Copyright notice. /*  * @(#)GifImage.java    1.24 95/05/11 Patrick Naughton, Arthur van Hoff  *  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.  *  * Permission to use, copy, modify, and distribute this software  * and its documentation for NON-COMMERCIAL purposes and without  * fee is hereby granted provided that this copyright notice  * appears in all copies. Please refer to the file "copyright.html"  * for further important copyright and licensing information.  *  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  */ // End of the original Copyright notice.  /*-  *      Reads GIF image from memory, construct   *      a MemoryImageSource object.  *  * The algorithm is copyright of CompuServe.  */  import  java.awt.image.*;  /**  * Gif Image converter  *   * @version 1.1 16 Mar 1996  * @author Tadashi Hamano  */  public class GifImage {          private static final int IMAGESEP               = 0x2c;         private static final int EXBLOCK                = 0x21;         private static final int EX_GRAPHICS_CONTROL    = 0xf9;         private static final int EX_COMMENT             = 0xfe;         private static final int EX_APPLICATION         = 0xff;         private static final int TERMINATOR             = 0x3b;         private static final int INTERLACEMASK          = 0x40;         private static final int COLORMAPMASK           = 0x80;          private int                     width;         private int                     height;         private byte                    raster[];         private IndexColorModel         icm;         private MemoryImageSource       mis;         private int                     bPtr;         private int                     num_colors;         private int                     trans_index = -1;         private byte                    red[];         private byte                    green[];         private byte                    blue[];         private byte                    buff[];          /**          * Constructor, read image from memory.          */         public GifImage( byte src[]) throws GifImageException {              buff = src;             bPtr = 0;              readHeader();              while (true) {                 int code;                 switch (code = readBuff()) {                   case EXBLOCK:                     switch (code = readBuff()) {                       case EX_GRAPHICS_CONTROL: {                         byte buf[] = new byte[6];                         if (readBuff( buf, 6) == -1) {                             throw new GifImageException( "corrupt GIF file");                         }                         if ((buf[0] != 4) || (buf[5] != 0)) {                             throw new GifImageException(                                  "corrupt GIF file (GCE size)");                         }                         // Get the index of the transparent color                         trans_index = buf[4] & 0xFF;                         break;                       }                       case EX_COMMENT:                       case EX_APPLICATION:                       default:                         while (true) {                             int n = readBuff();                             if (n == 0) {                                 break;                             }                             byte buf[] = new byte[n];                             if ( readBuff( buf, n) == -1) {                                 throw new GifImageException(                                      "corrupt GIF file");                             }                         }                         break;                     }                     break;                   case IMAGESEP:                     try {                         readImage();                         icm = new IndexColorModel( 8, num_colors,                              red, green, blue, trans_index);                         mis = new MemoryImageSource( width, height, icm,                             raster, 0, width);                     } catch (ArrayIndexOutOfBoundsException e) {                         e.printStackTrace();                         throw new GifImageException( "corrupt gif file");                     }                     break;                   case TERMINATOR:                     return;                   case -1:                     return;                   default:                     throw new GifImageException(                          "corrupt GIF file (parse) [" + code + "].");                 }             }         }          /**          * Returns MemoryImageSource to createImage();.          */         public MemoryImageSource get() {              return( mis);         }          /**          * Read Image header          */         private void readHeader() throws GifImageException {              byte buf[] = new byte[256*3];              if ( readBuff( buf, 13) == -1) {                 throw new GifImageException( "corrupt GIF file (header)");             }              if (( buf[0] != 'G') || ( buf[1] != 'I') || ( buf[2] != 'F')) {                 throw new GifImageException( "not a GIF file.");             }              // colormap info             int ch = buf[10] & 0xFF;             if (( ch & COLORMAPMASK) == 0) {                 throw new GifImageException( "no global colormap.");             }             num_colors = 1 << ((ch & 0x7) + 1);              // supposed to be NULL             if ( buf[12] != 0) {                 throw new GifImageException( "corrupt GIF file (nonull).");             }              // Read colors             if ( readBuff( buf, num_colors * 3) == -1) {                 throw new GifImageException( "corrupt Gif file (no color)");             }              red = new byte[num_colors];             green = new byte[num_colors];             blue = new byte[num_colors];              // Copy colors             for ( int i = 0; i < num_colors; i++) {                 red[i]   = buf[i*3 + 0];                 green[i] = buf[i*3 + 1];                 blue[i]  = buf[i*3 + 2];             }         }          private void readImage() throws GifImageException {              byte block[] = new byte[256 + 3];              // Read the image descriptor             if ( readBuff( block, 10) == -1) {                 throw new GifImageException(                      "corrupt GIF image.(no image descriptor)");             }              width = ( block[4] & 0xFF) | ( block[5] << 8);             height = ( block[6] & 0xFF) | ( block[7] << 8);             boolean interlace = ( block[8] & INTERLACEMASK) != 0;             int initCodeSize = block[9] & 0xFF;              byte ras[] = raster = new byte[ width * height];          // Patrick Naughton:         // Note that I ignore the possible existence of a local color map.         // I'm told there aren't many files around that use them, and the         // spec says it's defined for future use.  This could lead to an         // error reading some files.         //         // Start reading the image data. First we get the intial code size         // and compute decompressor constant values, based on this code         // size.         //         // The GIF spec has it that the code size is the code size used to         // compute the above values is the code size given in the file,         // but the code size used in compression/decompression is the code         // size given in the file plus one. (thus the ++).          // Arthur van Hoff:         // The following narly code reads LZW compressed data blocks and         // dumps it into the image data. The input stream is broken up into         // blocks of 1-255 characters, each preceded by a length byte.         // 3-12 bit codes are read from these blocks. The codes correspond to         // entry is the hashtable (the prefix, suffix stuff), and          // the appropriate pixels are written to the image.              int clearCode = (1 << initCodeSize);             int eofCode = clearCode + 1;             int bitMask = num_colors - 1;              // Variables used to form reading data             boolean blockEnd = false;             int remain = 0;             int byteoff = 0;             int accumbits = 0;             int accumdata = 0;                          // Variables used to decompress the data             int codeSize = initCodeSize + 1;             int maxCode = 1 << codeSize;             int codeMask = maxCode - 1;             int freeCode = clearCode + 2;             int code = 0;             int oldCode = 0;;             byte prevChar = 0;              // Temproray storage for decompression             short prefix[] = new short[ 4096];             byte suffix[] = new byte[ 4096];             byte outCode[] = new byte[ 1025];                          // Variables used for writing pixels             int x = width;             int y = 0;             int off = 0;             int pass = 0;              // Read codes until the eofCode is encountered             while (true) {                 if (accumbits < codeSize) {                     // fill the buffer if needed                     remain -= 2;                     while ( remain < 0 && !blockEnd) {                         block[0] = block[byteoff];                         byteoff = 0;                         // read the next block length                         int blockLength = readBuff();                         if (blockLength < 0) {                             return;                         }                         if (blockLength == 0) {                             blockEnd = true;                         }                         if ( readBuff( block, remain + 2, blockLength) == -1) {                             return;                         }                         remain += blockLength;                     }                     // 2 bytes at a time saves checking for                      // accumbits < codeSize.                     // We know we'll get enough and also that we can't                      // overflow since codeSize <= 12.                     accumdata += (block[ byteoff++] & 0xFF) << accumbits;                     accumbits += 8;                     accumdata += (block[ byteoff++] & 0xFF) << accumbits;                     accumbits += 8;                 }                  // Compute the code                 code = accumdata & codeMask;                 accumdata >>= codeSize;                 accumbits -= codeSize;                                                  //                 // Interpret the code                 //                 if (code == clearCode) {                     // Clear code sets everything back to its initial value,                      // then reads the immediately subsequent code as                      // uncompressed data.                      // Note that freeCode is one less than it is supposed                      // to be, this is because it will be incremented next                      // time round the loop                      freeCode = clearCode + 1;                     codeSize = initCodeSize + 1;                     maxCode = 1 << codeSize;                     codeMask = maxCode - 1;                      // Continue if we've NOT reached the end, some Gif                      // images contain bogus codes after the last clear code.                     if (off < raster.length) {                         continue;                     }                     // pretend we've reached the end of the data                     code = eofCode;                 }                  if (code == eofCode) {                     // make sure we read the whole block of pixels.                     if ( !blockEnd) {                         readBuff();                     }                     return;                 }                   // It must be data: save code in CurCode                 int curCode = code;                 int outCount = outCode.length;                  // If greater or equal to freeCode, not in the hash table                 // yet; repeat the last character decoded                 if (curCode >= freeCode) {                     curCode = oldCode;                     outCode[ --outCount] = prevChar;                 }                  // Unless this code is raw data, pursue the chain pointed                 // to by curCode through the hash table to its end; each                 // code in the chain puts its associated output code on                 // the output queue.                 while (curCode > bitMask) {                     outCode[ --outCount] = suffix[ curCode];                     curCode = prefix[ curCode];                 }                  // The last code in the chain is treated as raw data.                 prevChar = (byte)curCode;                 outCode[ --outCount] = prevChar;                  // Now we put the data out to the Output routine. It's                 // been stacked LIFO, so deal with it that way...                 int len = outCode.length - outCount;                 if ( len > 2 && len < x) {                     x -= len;                     System.arraycopy(outCode, outCount, ras, off, len);                     off += len;                 } else while (--len >= 0) {                     ras[ off++] = outCode[outCount++];                      // Update the X-coordinate, and if it overflows,                      // update the Y-coordinate                     if ( --x == 0) {                         // If a non-interlaced picture, just increment y                          // to the next scan line.  If it's interlaced,                          // deal with the interlace as described in the                          // GIF spec.  Put the decoded scan line out                         // to the screen if we haven't gone past the bottom                          // of it                         x = width;                         if ( interlace) {                             switch ( pass) {                                 case 0:                                     y += 8;                                     if ( y >= height) {                                         pass++;                                         y = 4;                                     }                                     break;                                 case 1:                                     y += 8;                                     if (y >= height) {                                         pass++;                                         y = 2;                                     }                                     break;                                 case 2:                                     y += 4;                                     if (y >= height) {                                         pass++;                                         y = 1;                                     }                                     break;                                 case 3:                                     y += 2;                                     break;                             }                             off = y * width;                         }                         // Some files overrun the end                         if ( off >= ras.length) {                             break;                         }                     }                 }                   // Build the hash table on-the-fly. No table is stored in                 // the file.                 prefix[freeCode] = (short)oldCode;                 suffix[freeCode] = prevChar;                 oldCode = code;                  // Point to the next slot in the table.  If we exceed the                 // maxCode, increment the code size unless                 // it's already 12.  If it is, do nothing: the next code                 // decompressed better be CLEAR                 if (++freeCode >= maxCode) {                     if (codeSize < 12) {                         codeSize++;                         maxCode <<= 1;                         codeMask = maxCode - 1;                     }                 }             }         }          /**          * Read a byte from memory, return it.          */         private int readBuff() {              if ( buff.length < 1 + bPtr) {                 return( -1);             } else {                 return( ( buff[ bPtr++] & 0xFF));             }         }                  /**          * Read bytes from memory, copy it.          * Returns number of bytes copied.          */         private int readBuff( byte dst[], int off, int len) {              bPtr += off;             return( readBuff( dst, len));         }          /**          * Read bytes from memory, copy it.          * Returns number of bytes copied.          */         private int readBuff( byte dst[], int len) {              if ( buff.length < len + bPtr) {                 return( -1);             } else {                 System.arraycopy( buff, bPtr, dst, 0, len);                 bPtr += len;                 return( len);             }         } } 

Added JavaPlanner/Planning/Support/GifImageException.java.



>
1
/*  * @(#)GifImageException.java    1.00    96/03/13  *  * Copyright (c) 1996 Tadashi Hamano All Rights Reserved.  *  * Permission to use, copy, modify, and distribute this software  * and its documentation for NON-COMMERCIAL purposes and without  * fee is hereby granted provided that this copyright notice  * appears in all copies.  *  * I SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS  * A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE  * OR ITS DRIVATIVES.  */  // This is based on "IOException" code. // Listed below is the original Copyright notice. /*  * @(#)IOException.java 1.10 95/08/09    *  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.  *  * Permission to use, copy, modify, and distribute this software  * and its documentation for NON-COMMERCIAL purposes and without  * fee is hereby granted provided that this copyright notice  * appears in all copies. Please refer to the file "copyright.html"  * for further important copyright and licensing information.  *  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  */ // End of the original Copyright notice.  /**  * Signals that a GifImage exception has occurred.  * @see GifImage  * @version     1.00, 13 Mar 1996  */ public class GifImageException extends Exception {     /**      * Constructs a GifImageException with no detail message.      * A detail message is a String that describes this particular exception.      */     public GifImageException() {         super();     }      /**      * Constructs a GifImageException with the specified detail message.      * A detail message is a String that describes this particular exception.      * @param s the detail message      */     public GifImageException(String s) {         super(s);     } }

Added JavaPlanner/Planning/Support/MultiLineLabel.java.



>
1
// This example is from the book _Java in a Nutshell_ by David Flanagan. // Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates. // You may study, use, modify, and distribute this example for any purpose. // This example is provided WITHOUT WARRANTY either expressed or implied.  import java.awt.*; import java.util.*;  public class MultiLineLabel extends Canvas {     public static final int LEFT = 0; // Alignment constants     public static final int CENTER = 1;     public static final int RIGHT = 2;     protected String[] lines;         // The lines of text to display     protected int num_lines;          // The number of lines     protected int margin_width;       // Left and right margins     protected int margin_height;      // Top and bottom margins     protected int line_height;        // Total height of the font     protected int line_ascent;        // Font height above baseline     protected int[] line_widths;      // How wide each line is     protected int max_width;          // The width of the widest line     protected int alignment = LEFT;   // The alignment of the text.          // This method breaks a specified label up into an array of lines.     // It uses the StringTokenizer utility class.     protected void newLabel(String label) {         StringTokenizer t = new StringTokenizer(label, "\n");         num_lines = t.countTokens();         lines = new String[num_lines];         line_widths = new int[num_lines];         for(int i = 0; i < num_lines; i++) lines[i] = t.nextToken();     }          // This method figures out how the font is, and how wide each     // line of the label is, and how wide the widest line is.     protected void measure() {         FontMetrics fm = this.getFontMetrics(this.getFont());         // If we don't have font metrics yet, just return.         if (fm == null) return;                  line_height = fm.getHeight();         line_ascent = fm.getAscent();         max_width = 0;         for(int i = 0; i < num_lines; i++) {             line_widths[i] = fm.stringWidth(lines[i]);             if (line_widths[i] > max_width) max_width = line_widths[i];         }     }          // Here are four versions of the cosntrutor.     // Break the label up into separate lines, and save the other info.     public MultiLineLabel(String label, int margin_width, int margin_height,                   int alignment) {         newLabel(label);         this.margin_width = margin_width;         this.margin_height = margin_height;         this.alignment = alignment;     }     public MultiLineLabel(String label, int margin_width, int margin_height) {         this(label, margin_width, margin_height, LEFT);     }     public MultiLineLabel(String label, int alignment) {         this(label, 10, 10, alignment);     }     public MultiLineLabel(String label) {         this(label, 10, 10, LEFT);     }          // Methods to set the various attributes of the component     public void setLabel(String label) {         newLabel(label);         measure();         repaint();     }     public void setFont(Font f) {         super.setFont(f);         measure();         repaint();     }     public void setForeground(Color c) {          super.setForeground(c);          repaint();      }     public void setAlignment(int a) { alignment = a; repaint(); }     public void setMarginWidth(int mw) { margin_width = mw; repaint(); }     public void setMarginHeight(int mh) { margin_height = mh; repaint(); }     public int getAlignment() { return alignment; }     public int getMarginWidth() { return margin_width; }     public int getMarginHeight() { return margin_height; }          // This method is invoked after our Canvas is first created     // but before it can actually be displayed.  After we've     // invoked our superclass's addNotify() method, we have font     // metrics and can successfully call measure() to figure out     // how big the label is.     public void addNotify() { super.addNotify(); measure(); }          // This method is called by a layout manager when it wants to     // know how big we'd like to be.       public Dimension preferredSize() {         return new Dimension(max_width + 2*margin_width,                       num_lines * line_height + 2*margin_height);     }          // This method is called when the layout manager wants to know     // the bare minimum amount of space we need to get by.     public Dimension minimumSize() {         return new Dimension(max_width, num_lines * line_height);     }          // This method draws the label (applets use the same method).     // Note that it handles the margins and the alignment, but that     // it doesn't have to worry about the color or font--the superclass     // takes care of setting those in the Graphics object we're passed.     public void paint(Graphics g) {         int x, y;         Dimension d = this.size();         y = line_ascent + (d.height - num_lines * line_height)/2;         for(int i = 0; i < num_lines; i++, y += line_height) {             switch(alignment) {             case LEFT:                 x = margin_width; break;             case CENTER:             default:                 x = (d.width - line_widths[i])/2; break;             case RIGHT:                 x = d.width - margin_width - line_widths[i]; break;             }             g.drawString(lines[i], x, y);         }     } }

Added JavaPlanner/Planning/Support/Progress.java.



>
1
import java.applet.Applet; import java.awt.*; //import mlsoft.mct.*;  public class Progress extends Dialog { 	Frame f; 	double max_value; 	double fraction; 	 	public Progress( String name,int max,Frame w) 	{ 			// Connect it to the world 			 			super(w,name,false); 			 	    	max_value = max; 	    	fraction = 0.0; 	    	 	    	// Now add the components  	    	 		   	this.reshape(50,50,200,75); 		   	this.show(); 	    	this.update(0); 	} 	 	public void update( int val ) 	{ 		if( val > (int)max_value ) 	    	max_value = (double)val; 	    	 	    fraction = (double)val/max_value; 	    if( fraction >= 1.0 ) 	    	fraction = 1.0; 	    this.draw(); 	} 	 	void draw() 	{ 		Rectangle r; 		Graphics g; 		double val; 		 		// Get the area covered by this thing & the graphics 		 		r = new Rectangle(5,25,190,15); 		g = this.getGraphics(); 	    g.drawString("File Store Progress",10,60); 		 		// Now draw a black box around the edges & fill with white 		 		g.setColor( Color.white ); 		g.fillRect( r.x,r.y,r.width,r.height); 		g.setColor( Color.black ); 		g.drawRect( r.x,r.y,r.width,r.height); 		 		// Now draw a sized filled box as the bar 		 		val = (double)r.width * fraction; 		r.width = (int)(val + 0.5); 		 		g.setColor( Color.blue ); 		g.fillRect( r.x,r.y,r.width,r.height); 		this.show(); 	}  } 

Added JavaPlanner/Planning/Support/intergerf.java.



>
1
/* *  This is a formatted version of the integer output *  Simple for now later we can do C stuff * */  class Integerf {  	// This converts the string to a little endian version 	 	public String toString16fle( int i ) 	{ 		int msb,lsb; 		int val; 		String out; 		 		// Get the msb and lsb 		 		msb = 0xff & (i >> 8 ); 		lsb = 0xff & i; 		 		// Form a little endian version 		 		val = msb | (lsb << 8); 		 		out = this.toString16f(val); 		return( out ); 	} 		 	//*  Just add a formatted output class for HEX 	//   format is $XXXX 	 	public String toString16f( int i ) 	{ 		Integer val;		 		String out,part; 		 		// (1) Generate the HEX value note will be 4 or less digits 		 		i = 0xffff & i; 		val = new Integer( i ); 		part = val.toString(i,16); 		 		// (2) Now add the required number of 0's and put a $ on the front 		 		switch( part.length() ) { 			 			case 0:		out = "$0000"; 							break; 							 			case 1:		out = "$000" + part; 							break; 							 			case 2:		out = "$00" + part; 							break; 							 			case 3:		out = "$0" + part; 							break; 							 			case 4:		out = "$" + part; 							break; 							 			default:		out = "$####"; 							break; 		} 		 		out.toUpperCase(); 		 		return( out ); 	} }

Added JavaPlanner/Planning/Support/prog_bar.java.



>
1
/*  	Progress bar class */  import java.awt.*;  class prog_bar extends Panel { 	double max; 	double current; 	double fraction; 	 	void prog_bar() 	{ 		Graphics g; 		 		// Set background white and set current and MAX 		 		g = this.getGraphics(); 		this.setBackground( Color.white ); 		max = 100.0; 		current = 0.0; 		fraction = 0.0; 		 		// Now draw the box and stuff 		 		this.draw(); 	} 	 	void setMax( int val ) 	{ 		max = (double) val; 	} 	 	void setValue( int val ) 	{ 		Graphics g; 		 		// Calculate the fraction part we have now (note: if > 1.0 make 1.0) 		current = (double) val; 		fraction = current/max; 		if( fraction >= 1.0 ) 			fraction = 1.0; 			 		// Now draw the thing 		 		this.draw(); 	} 	 	void draw() 	{ 		Rectangle r; 		Graphics g; 		double val; 		 		// Get the area covered by this thing & the graphics 		 		r = this.bounds(); 		g = this.getGraphics(); 		 		// Now draw a black box around the edges & fill with white 		 		g.setColor( Color.white ); 		g.fillRect( r.x,r.y,r.width,r.height); 		g.setColor( Color.black ); 		g.drawRect( r.x,r.y,r.width,r.height); 		 		// Now draw a sized filled box as the bar 		 		val = (double)r.width * fraction; 		r.width = (int)(val + 0.5); 		 		g.setColor( Color.blue ); 		g.fillRect( r.x,r.y,r.width,r.height); 		this.show(); 	} }

Added JavaPlanner/build.xml.



















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See commented blocks below for -->
<!-- some examples of how to customize the build. -->
<!-- (If you delete it and reopen the project it will be recreated.) -->
<!-- By default, only the Clean and Build commands use this build script. -->
<!-- Commands such as Run, Debug, and Test only use this build script if -->
<!-- the Compile on Save feature is turned off for the project. -->
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
<!-- in the project's Project Properties dialog box.-->
<project name="JavaPlanner" default="default" basedir=".">
    <description>Builds, tests, and runs the project JavaPlanner.</description>
    <import file="nbproject/build-impl.xml"/>
    <!--

    There exist several targets which are by default empty and which can be 
    used for execution of your tasks. These targets are usually executed 
    before and after some main targets. They are: 

      -pre-init:                 called before initialization of project properties
      -post-init:                called after initialization of project properties
      -pre-compile:              called before javac compilation
      -post-compile:             called after javac compilation
      -pre-compile-single:       called before javac compilation of single file
      -post-compile-single:      called after javac compilation of single file
      -pre-compile-test:         called before javac compilation of JUnit tests
      -post-compile-test:        called after javac compilation of JUnit tests
      -pre-compile-test-single:  called before javac compilation of single JUnit test
      -post-compile-test-single: called after javac compilation of single JUunit test
      -pre-jar:                  called before JAR building
      -post-jar:                 called after JAR building
      -post-clean:               called after cleaning build products

    (Targets beginning with '-' are not intended to be called on their own.)

    Example of inserting an obfuscator after compilation could look like this:

        <target name="-post-compile">
            <obfuscate>
                <fileset dir="${build.classes.dir}"/>
            </obfuscate>
        </target>

    For list of available properties check the imported 
    nbproject/build-impl.xml file. 


    Another way to customize the build is by overriding existing main targets.
    The targets of interest are: 

      -init-macrodef-javac:     defines macro for javac compilation
      -init-macrodef-junit:     defines macro for junit execution
      -init-macrodef-debug:     defines macro for class debugging
      -init-macrodef-java:      defines macro for class execution
      -do-jar:                  JAR building
      run:                      execution of project 
      -javadoc-build:           Javadoc generation
      test-report:              JUnit report generation

    An example of overriding the target for project execution could look like this:

        <target name="run" depends="JavaPlanner-impl.jar">
            <exec dir="bin" executable="launcher.exe">
                <arg file="${dist.jar}"/>
            </exec>
        </target>

    Notice that the overridden target depends on the jar target and not only on 
    the compile target as the regular run target does. Again, for a list of available 
    properties which you can use, check the target you are overriding in the
    nbproject/build-impl.xml file. 

    -->
</project>

Added Logging/firenetlog.c.























































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//*************************************************************************
/*
Copyright (c) 2010. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         firenetlog
*
*  Description:         This code will run a logging system for the app
*
*  Revision History:	22-May-2010 Initial version [d98ef0303d]
*/
//************************************************************************

#include "firenetlog.h"
#include "time.h"

#if 0
	#pragma mark -
	#pragma mark -- DATA --
#endif

static int log_on		= 0;		// Logging control, default = OFF
static FILE *log_file	= NULL;		// Log file

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

//***********************************************************************
/*
*	void log_control(int flag, char *where )	- Enable/disable logging
*
*	INPUT:	flag	- 1	=> Logging ON/0 => OFF
*			where	- File location for logging, if previously specified
*					  then can just pass NULL here
*
*	OUTPUT:	Logging enabled/disabled and output file created
*/
//***********************************************************************/

void log_control( int flag, const char *where )
{
	// (1) Is logging turn ON or OFF
	
	log_on = flag;
	time_t now;
	
	// (2) If OFF we can skip the rest of this
	
	if( log_on )
	{
		// (3) Is there a new logging file ?
		
		if( where != NULL )
		{
			// (3a) Close the old one if necessary
			
			if( log_file != NULL )
				fclose( log_file );
				
			// (3b) Open a new one
			
			log_file = fopen( where,"w");
			if( log_file != NULL )
			{
				now = time(NULL);
				fprintf(log_file,"# --- START  %s",ctime(&now));
			}

		}
	}
}

//***********************************************************************
/*
*	void log_data( const char *format, va_list data )
*
*	INPUT:	format	- Output format for log data
*			data	- Logged parameters
*
*	OUTPUT:	Write data to log file if logging ON
*/
//***********************************************************************/

void log_data(const char *format, ... )
{
	va_list args;
	
	// (1) Is this trip necessary
	
	if( log_on )
	{
		// (2) Is the log file open ?
		
		if( log_file != NULL )
		{
			// (3) Build the arg list 
			
			va_start( args, format );
			
			// (3a) Write and flush it out
			
			(void)vfprintf(log_file,format,args);
			fflush( log_file );
			
			// (3b) Tidy up arg list
			
			va_end( args );
		}
	}
}

//***********************************************************************
/*
*	void log_done(void)
*
*	INPUT:	NONE
*
*	OUTPUT:	Shutdown logging
*/
//***********************************************************************/

void log_done( void )
{
	// (1) Turn off logging
	
	log_on = 0;
	
	// (2) Close log file if open
	
	if( log_file != NULL )
	{
		fflush(log_file);
		fclose( log_file );
	}
}

Added Logging/firenetlog.h.























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//*************************************************************************
/*
Copyright (c) 2010. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         firenetlog
*
*  Description:         This code will run a logging system for the app
*
*  Revision History:	22-May-2010 Initial version
*/
//************************************************************************

#ifndef FIRENETLOG_H
#define FIRENETLOG_H	1

#include <stdarg.h>
#include <stdio.h>

void log_control( int flag, const char *where );	// Start logging and log file
void log_data(const char *format, ... );			// Send to log
void log_done(void);								// Shutdown log

#endif


Changes to Network/Real/SERIAL/Linux/linserial.c.

34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
static int GetPortState( PORT_HANDLE *h );
static int SetPortState( int state,PORT_HANDLE *h );

#pragma mark -- PORT MGMT API --

/****************************************************************
*
*  PORT_LIST *ListPorts()	- Get a list of SERIAL RS-232 ports
*
*	INPUT:NONE
*
*	OUTPUT:	NULL
*	This is not supported in Linux now so just return NULL
*
*****************************************************************/

PORT_LIST *ListPorts(void)
{
	PORT_LIST *base = NULL;
	
	return( base );
}

/****************************************************************







|

|






|







34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
static int GetPortState( PORT_HANDLE *h );
static int SetPortState( int state,PORT_HANDLE *h );

#pragma mark -- PORT MGMT API --

/****************************************************************
*
*  PORT_LIST *ListPorts(int modems)	- Get a list of SERIAL RS-232 ports
*
*	INPUT:modems	- (IGNORE)
*
*	OUTPUT:	NULL
*	This is not supported in Linux now so just return NULL
*
*****************************************************************/

PORT_LIST *ListPorts(int modems)
{
	PORT_LIST *base = NULL;
	
	return( base );
}

/****************************************************************
277
278
279
280
281
282
283

































284
285
286
287
288
289
290
		
		// (4) Free the handle
		
		MEMFREE( h );
	}
}
#pragma mark -- PORT I/O API --


































/***********************************************************************
*
* int WritePort( char *buffer,int size,PORT_HANDLE *h) - Write to a port
*
*	INPUT:	buffer	- Buffer to send
*			size	- # Bytes to send







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
		
		// (4) Free the handle
		
		MEMFREE( h );
	}
}
#pragma mark -- PORT I/O API --

/***********************************************************************
*
* int StatPort( PORT_HANDLE *h )	- Data present on port ?
*
*	INPUT:	dwelltime	- # MS to scan for data 0 => no wait
*			h			- To this port
*
*	OUTPUT:	1	- Data present for read, 0 no data
*
************************************************************************/

int StatPort( int dwelltime,PORT_HANDLE *h )
{
	int rtnval = 0;
	fd_set scan;
	struct timeval seltime; // Select timeout time
	
	// (1) Build scan array and set up time
	
	FD_ZERO( &scan );
	FD_SET( h->fd,&scan );
	seltime.tv_sec = dwelltime / 1000;
	seltime.tv_usec = (dwelltime - (1000 * seltime.tv_sec)) * 1000;
	
	// (2) Do a select on the socket
	
	rtnval = select(h->fd+1,&scan,NULL,NULL,&seltime);
	if( rtnval < 0 )
		rtnval = 0;		// If failure return 0
		
	return( rtnval );
}

/***********************************************************************
*
* int WritePort( char *buffer,int size,PORT_HANDLE *h) - Write to a port
*
*	INPUT:	buffer	- Buffer to send
*			size	- # Bytes to send

Changes to Network/Real/SERIAL/Linux/linserial.h.

37
38
39
40
41
42
43
44
45
46
47





48
49
50
51
52
53
54
#include <paths.h>
#include <termios.h>
#include <sysexits.h>
#include <sys/param.h>
#include <sys/select.h>
#include <sys/time.h>
#include <time.h>
#include "tgtypes.h"

#ifndef LINSERIAL_H
#define LINSERIAL_H	1






#pragma mark -- Structures --

typedef struct sdummy {
						struct sdummy *next;
						char *path;				// Path of port
						char *name;				// Just the name part of the port







<



>
>
>
>
>







37
38
39
40
41
42
43

44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <paths.h>
#include <termios.h>
#include <sysexits.h>
#include <sys/param.h>
#include <sys/select.h>
#include <sys/time.h>
#include <time.h>


#ifndef LINSERIAL_H
#define LINSERIAL_H	1

#ifndef MEMALLOC
	#define MEMALLOC(x)	calloc(1,x)
	#define MEMFREE(x)	free(x)
#endif

#pragma mark -- Structures --

typedef struct sdummy {
						struct sdummy *next;
						char *path;				// Path of port
						char *name;				// Just the name part of the port
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
				} PORT_HANDLE;
				
#define NEW_PORT_HANDLE		((PORT_HANDLE *)MEMALLOC(sizeof(PORT_HANDLE)))

#pragma mark -- API --

// **** PORT DETERMINATION ****
PORT_LIST *ListPorts(void);
void FreePorts(PORT_LIST *base );

// **** PORT OPEN/CLOSE

PORT_HANDLE *OpenPort( int psn,
						PORT_LIST *p,
						int baud,
						SER_PORT_STOP stop,
						SER_PORT_PARITY parity);
void ClosePort( PORT_HANDLE *h );

// **** PORT I/O

int StatPort( PORT_HANDLE *h );
int WritePort( char *buffer,int size,PORT_HANDLE *h);
int ReadPort( char *buffer, int size,PORT_HANDLE *h );

// *** PORT MISC

int CTSPort( PORT_HANDLE *h );				// Read CTS
void DTRPort( int flag,PORT_HANDLE *h);		// Set DTR

#endif







|













|









85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
				} PORT_HANDLE;
				
#define NEW_PORT_HANDLE		((PORT_HANDLE *)MEMALLOC(sizeof(PORT_HANDLE)))

#pragma mark -- API --

// **** PORT DETERMINATION ****
PORT_LIST *ListPorts(int modems);
void FreePorts(PORT_LIST *base );

// **** PORT OPEN/CLOSE

PORT_HANDLE *OpenPort( int psn,
						PORT_LIST *p,
						int baud,
						SER_PORT_STOP stop,
						SER_PORT_PARITY parity);
void ClosePort( PORT_HANDLE *h );

// **** PORT I/O

int StatPort( int dwelltime,PORT_HANDLE *h );
int WritePort( char *buffer,int size,PORT_HANDLE *h);
int ReadPort( char *buffer, int size,PORT_HANDLE *h );

// *** PORT MISC

int CTSPort( PORT_HANDLE *h );				// Read CTS
void DTRPort( int flag,PORT_HANDLE *h);		// Set DTR

#endif

Changes to Network/Real/SERIAL/OSX/bsdserial.c.

286
287
288
289
290
291
292





293





294
295
296
297
298
299
300
                    (int)h->run.c_iflag,
                    (int)h->run.c_oflag);
    // (4) Set the baud rates, if you try this in reverse order
    // then the c_flag -> 0 and will wipe out the baud rates
    // (i.e. baudrate = 0)
    
	error = cfsetospeed( &(h->run),baud );





	error = cfsetispeed( &(h->run),baud );






    // (5) Cause the new options to take effect immediately.
    if (tcsetattr(h->fd, TCSANOW, &(h->run)) == -1)
	{
		ClosePort( h );		// FAILURE
		return( NULL );
	}







>
>
>
>
>

>
>
>
>
>







286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
                    (int)h->run.c_iflag,
                    (int)h->run.c_oflag);
    // (4) Set the baud rates, if you try this in reverse order
    // then the c_flag -> 0 and will wipe out the baud rates
    // (i.e. baudrate = 0)
    
	error = cfsetospeed( &(h->run),baud );
    if( error != 0 )
    {
        MEMFREE(h);
        return NULL;
    }
	error = cfsetispeed( &(h->run),baud );
    if( error != 0 )
    {
        MEMFREE(h);
        return NULL;
    }

    // (5) Cause the new options to take effect immediately.
    if (tcsetattr(h->fd, TCSANOW, &(h->run)) == -1)
	{
		ClosePort( h );		// FAILURE
		return( NULL );
	}

Changes to Network/Real/real_phy.c.

1
2
3
4
5
6
7
8
9
10
11
12
13





14
15
16
17
18
19
20
21


22





23
24
25
26
27
28
29
30



31
32
33
34
35
36
37
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - Firing box network code
*
*  Description:         This code will be used to connect to the
*						firing box CSMA RS-485 network used between
*						firing boxes
*
*  Revision History:	25-Sep-2009 [fa981152d5] Real network support





*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include "real_phy.h"


#include "bsdserial.h"






#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

#define FIRENET_BAUD	38400
#define FIRENET_DWELL	100




#if 0
	#pragma mark -
	#pragma mark -- External SIMULATION API --
#endif

//*************************************************************************













>
>
>
>
>








>
>
|
>
>
>
>
>








>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - Firing box network code
*
*  Description:         This code will be used to connect to the
*						firing box CSMA RS-485 network used between
*						firing boxes
*
*  Revision History:	25-Sep-2009 [fa981152d5] Real network support
*						11-Jan-2011	DTR is inverted wrt TX use
*						22-Jan-2011 [f2fa5910e4] Add delay for XMIT Enable/Disable
*                       23-Aug-2011 [0020ac449a] Add RS-232 debug flag
*						31-Dec-2011 The head end controller will do the tx/RX 
*									control [55fd308482]
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include "real_phy.h"

#ifdef BSD_VERSION
	#include "bsdserial.h"
#else
	#include "linserial.h"
#endif

#include "debug.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

#define FIRENET_BAUD	38400
#define FIRENET_DWELL	100
#define NET_TX_ON_DLY	10		// usec Found by experiment
#define NET_TX_OFF_DLY	5000		// usec Found by experiment


#if 0
	#pragma mark -
	#pragma mark -- External SIMULATION API --
#endif

//*************************************************************************
86
87
88
89
90
91
92



93
94
95
96
97
98
99
		ph = OpenPort( psn,
						plist,
						FIRENET_BAUD,
						SER_STOP_ONE,
						SER_PARITY_NONE);
		if( ph != NULL )
		{



			// (3) Turn off DTR and start runnning
			
			real_phy_tx(0,ph);
			rtnval = (void *)ph;
		}
		
		FreePorts( plist );







>
>
>







101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
		ph = OpenPort( psn,
						plist,
						FIRENET_BAUD,
						SER_STOP_ONE,
						SER_PARITY_NONE);
		if( ph != NULL )
		{
#ifdef RS232_COM
            printf("\n** FIRENET RS-232 DEBUG MODE **\n");
#endif
			// (3) Turn off DTR and start runnning
			
			real_phy_tx(0,ph);
			rtnval = (void *)ph;
		}
		
		FreePorts( plist );
135
136
137
138
139
140
141



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
{
	int rtnval = -1;
	PORT_HANDLE *ph = (PORT_HANDLE *)h;
	char buffer[4];
	
	buffer[0] = (char)data;
	rtnval = WritePort(buffer,1,ph);



	if( rtnval == 1 )
		rtnval = 0;		// SUCCESS
	
	return( rtnval );
}

//*************************************************************************
/*
* int real_stat_phy( void *h )	- Is there data to read ?
*
*	INPUT:	psn	- This thread's read psn
*
*	OUTPUT:	1	- We have data, 0 no data (psn == buf_psn)
*
*/
//************************************************************************
	
int real_stat_phy( void *h )
{
	int rtnval = -1;
	PORT_HANDLE *ph = (PORT_HANDLE *)h;
	char buffer[4];
	
	rtnval = StatPort( FIRENET_DWELL, ph );
			
	return( rtnval );
}

//*************************************************************************







>
>
>

|
|


















<







153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

184
185
186
187
188
189
190
{
	int rtnval = -1;
	PORT_HANDLE *ph = (PORT_HANDLE *)h;
	char buffer[4];
	
	buffer[0] = (char)data;
	rtnval = WritePort(buffer,1,ph);
	
	// Did we get something ?
	
	if( rtnval == 1 )
		rtnval = 0;
		
	return( rtnval );
}

//*************************************************************************
/*
* int real_stat_phy( void *h )	- Is there data to read ?
*
*	INPUT:	psn	- This thread's read psn
*
*	OUTPUT:	1	- We have data, 0 no data (psn == buf_psn)
*
*/
//************************************************************************
	
int real_stat_phy( void *h )
{
	int rtnval = -1;
	PORT_HANDLE *ph = (PORT_HANDLE *)h;

	
	rtnval = StatPort( FIRENET_DWELL, ph );
			
	return( rtnval );
}

//*************************************************************************
182
183
184
185
186
187
188

189

190
191
192
193
194
195
196
197
198
199
200
201






202
203
204
205
206
207
208
209
210
211
212
	int rtnval = EOF;
	PORT_HANDLE *ph = (PORT_HANDLE *)h;
	char buffer[4];
	int val;
	
	val = ReadPort( buffer,1,ph );
	if( val >= 1 )

		rtnval = (int)(0xff & buffer[0]);

	
	return( rtnval );
}

//*************************************************************************
/*
* void real_phy_tx( int flag,void *h )	- Enable/Disable xmit
*
*	INPUT:	flag	- 1 Enable transmit,0 disable transmit
*			h	- Port handle
*
*	OUTPUT:	Returned data, EOF if no data






*/
//************************************************************************

void real_phy_tx( int flag,void *h )
{
	PORT_HANDLE *ph = (PORT_HANDLE *)h;
	
	// Turn DTR on or OFF
	
	DTRPort(flag,ph);
}







>

>









|


>
>
>
>
>
>





<
|
<
<
<
<
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234

235




	int rtnval = EOF;
	PORT_HANDLE *ph = (PORT_HANDLE *)h;
	char buffer[4];
	int val;
	
	val = ReadPort( buffer,1,ph );
	if( val >= 1 )
	{
		rtnval = (int)(0xff & buffer[0]);
	}
	
	return( rtnval );
}

//*************************************************************************
/*
* void real_phy_tx( int flag,void *h )	- Enable/Disable xmit
*
*	INPUT:	flag	- 1 Enable transmit,0 disable transmit
*			h		- Port handle
*
*	OUTPUT:	Returned data, EOF if no data
*
*	11-Jan-2011	Invert meaning of flag since DTR from USB board is
*				inverted.
*	22-Jan-2011	Add delays on TX on and TX off.  Delay after on and before OFF
*	31-Dec-2011 Delete this as hardware in the head end controller will do the
*				tx/RX control [55fd308482]
*/
//************************************************************************

void real_phy_tx( int flag,void *h )
{

}




Changes to Network/Simulation/sim_phy.c.

9
10
11
12
13
14
15



16
17
18
19
20
21
22

23


24
25
26
27
28
29
30
*  Description:         This code will be used to simulate the
*						firing box CSMA RS-485 network used between
*						firing boxes
*
*  Revision History:	28-Jul-2009	Initial version
*						25-Sep-2009 [fa981152d5] Change to support
*									both real and simulated phy



*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>

#include "sim_phy.h"



#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

// ***







>
>
>







>

>
>







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
*  Description:         This code will be used to simulate the
*						firing box CSMA RS-485 network used between
*						firing boxes
*
*  Revision History:	28-Jul-2009	Initial version
*						25-Sep-2009 [fa981152d5] Change to support
*									both real and simulated phy
*						12-Jan-2011 Change to ignore characters WE put into
*									buffer (like real hdw) [e4208b8f56]
*						23-Jan-2011 [f2fa5910e4] Add TX on/off delay
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include "sim_phy.h"

#define NET_TX_ON_DLY	5000		// usec Found by experiment

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

// ***
159
160
161
162
163
164
165







166
167
168
169
170
171
172
		{
			// Store data and move pointer to next slot
			
			buffer[buf_psn] = data;
			buf_psn += 1;
			if( buf_psn >= BUF_SIZE )
				buf_psn = 0;			// Circular buffer







			
			// Unlock before we leave
			
			rtnval = pthread_mutex_unlock( &buf_lock );
		}
	}
	







>
>
>
>
>
>
>







165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
		{
			// Store data and move pointer to next slot
			
			buffer[buf_psn] = data;
			buf_psn += 1;
			if( buf_psn >= BUF_SIZE )
				buf_psn = 0;			// Circular buffer
				
			// Eat character in buffer so we cannot see our own
			// xmitted characters (like hdw)
			
			ph->psn += 1;
			if( ph->psn >= BUF_SIZE )
				ph->psn = 0;
			
			// Unlock before we leave
			
			rtnval = pthread_mutex_unlock( &buf_lock );
		}
	}
	
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
	int rtnval = 0;			// No data
	SIM_PHY_HANDLE *ph = (SIM_PHY_HANDLE *)h;

	// (1) Is this valid before going on
	
	if( ph != NULL && ph->valid ==SIM_PHY_VALID )
	{

		// (1) Are we at buf_psn ?
		
		if( ph->psn != buf_psn )
		{
			// (2) No so return data and update
			// psn
			







<







232
233
234
235
236
237
238

239
240
241
242
243
244
245
	int rtnval = 0;			// No data
	SIM_PHY_HANDLE *ph = (SIM_PHY_HANDLE *)h;

	// (1) Is this valid before going on
	
	if( ph != NULL && ph->valid ==SIM_PHY_VALID )
	{

		// (1) Are we at buf_psn ?
		
		if( ph->psn != buf_psn )
		{
			// (2) No so return data and update
			// psn
			
258
259
260
261
262
263
264
265
266
267
268
*
*	OUTPUT:	NONE
*/
//************************************************************************

void sim_phy_tx( int flag,void *h )
{
	// Do nothing
}
	








|



270
271
272
273
274
275
276
277
278
279
280
*
*	OUTPUT:	NONE
*/
//************************************************************************

void sim_phy_tx( int flag,void *h )
{
	usleep(NET_TX_ON_DLY);		// Just delay like the real one
}
	

Changes to Network/mac.c.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38


39
40

41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

72
73
74
75
76
77
78
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - MAC layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version
*						28-Jul-2009	Change to support both 
*									real and sim phy [fa981152d5] 

*
*	This layer has two functions:
*		(a) Send and receive packets (see below)
*		(b) Get a node address
*
*	PACKET FORMAT:
*		:<Type><TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TYPE>	2 Nibble field as HEX (1 bytes 0-FF value)
*				1	- ACK
*				2	- NAK
*				3	- IAM	(see below)
*				4	- DATA
*	<TO>	2 Nibble field as HEX 1-FF	0xFF -> Broadcast, 0 -> INVALID
*	<FROM>	2 Nibble field as HEX 1-FE
*	<DATA>	Up to PHY_DATA_SIZE as 2 nibbles/byte
*	;		Packet End of Data marker
*	<CKSUM>	Single byte sum of TYPE,TO,FROM and DATA fields modulo 0xFF
*			and output as 2 nibbles
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>


#include "phy.h"
#include "mac.h"


#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

				
typedef struct {
				CHAR_TYPE	type;
				unsigned char value;
			} DATA_TOKEN;
				
static int mac_proc_char(unsigned char byte,MAC_HANDLE *mh );
static int packet_engine( MAC_HANDLE *mh );

static int send_packet_data( unsigned char ch,MAC_HANDLE *mh );
static int send_packet_byte( unsigned char byte,MAC_HANDLE *mh );

#if 0
	#pragma mark -
	#pragma mark -- Create/Delete API --
#endif

//*************************************************************************
/*
*  void *init_mac(char *port)	- Initialize MAC layer
*
*	INPUT:	port	- Phy port name
*
*	OUTPUT:	NULL, failure <> NULL -> Mac layer open
*			NOTE: on return we have an assigned NODE address

*/
//************************************************************************

void *init_mac(char *port)
{
	void *h;
	MAC_HANDLE *mh;













|
>






|

<
<
<
<
<
|
|
|

|
<





>
>


>







<
<
<
<
<
<
|

|
|














>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23





24
25
26
27
28

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45






46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - MAC layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version
*						28-Jul-2009	Change to support both 
*									real and sim phy [fa981152d5]
*						11-May-2010	Convert to new network [d26a3ab0e9]
*
*	This layer has two functions:
*		(a) Send and receive packets (see below)
*		(b) Get a node address
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker





*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100

*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include "phy.h"
#include "mac.h"
#include "clock.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

				






static int packet_engine( int byte,MAC_HANDLE *mh );

static int send_packet_number( int addr,MAC_HANDLE *mh,int *cksum );
//static int send_packet_byte( char byte,MAC_HANDLE *mh );

#if 0
	#pragma mark -
	#pragma mark -- Create/Delete API --
#endif

//*************************************************************************
/*
*  void *init_mac(char *port)	- Initialize MAC layer
*
*	INPUT:	port	- Phy port name
*
*	OUTPUT:	NULL, failure <> NULL -> Mac layer open
*			NOTE: on return we have an assigned NODE address
*
*/
//************************************************************************

void *init_mac(char *port)
{
	void *h;
	MAC_HANDLE *mh;
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219

220
221
222
223
224
225
226
227
228
229

230
231
232
233
234
235
236
237

238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271

272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298


299
300
301
302
303
304
305
		
		while( mh->state != RCVED_PACKET && 
			   stat_phy( mh->h ) )
		{
			// (3) Get the character and if read run through packet
			// engine
			byte = (unsigned char)get_phy( mh->h );
			if( mac_proc_char( byte,mh ) )
			{ 
				// (4) Run through packet engine
				
				rtnval = packet_engine( mh );
			}
		}
	}
		
	return( rtnval );
}

//*************************************************************************
/*
*  void flush_mac( void *h)	- Remove all incomming data from network & discard
*
*	INPUT:	h	- Valid MAC handle
*
*	OUTPUT:	NONE
*/
//************************************************************************

void flush_mac( void *h)
{
	unsigned char byte;
	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	
	// (1) Is this trip necessary
	
	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
		// Read out all the characters in the input buffer
		
		while( stat_phy( mh->h ) )
			byte = (unsigned char)get_phy( mh->h );
		
		// Flush packet
		
		mh->state = NO_PACKET;
	}
}
//*************************************************************************
/*
*  int put_mac( PACKET *pkt,void *h )	- Send a data packet
*
*	INPUT:	pkt	- Pointer to packet data
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Packet sent
*			<> 0 Transmission failure
*	25-Sep-2009 Change to enable TX

*/
//************************************************************************

int put_mac( PACKET *pkt,void *h )
{
	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	int rtnval = -1;
	int i;
	unsigned char cksum;
	unsigned char from;


	// (1) Is this trip necessary
	
	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
		// (1a) Enable XMIT
		
		phy_tx(1,mh->h);

		
		// (2) Send out each byte of the packet and verify that it's OK
		
		if( send_packet_data( MSG_HDR,mh ) == 0)
		{
			if( send_packet_byte( pkt->type,mh ) == 0 )			// Send TYPE
			{
				cksum = pkt->type;
				if( send_packet_byte( pkt->to,mh ) == 0 )			// Send TO
				{
					cksum += pkt->to;
					
					// If from address == 0 then use my current address
					
					if( pkt->from == 0 )
						from = mh->my_address;
					else
						from = pkt->from;
					if( send_packet_byte( from,mh ) == 0)		// Send FROM
					{
							
						cksum += from;
						for( i=0; i<pkt->len; i++ )
						{
							if( send_packet_byte( pkt->data[i],mh ) != 0)
								break;
							else
								cksum += pkt->data[i];
						}
						
						if( i >= pkt->len )
						{
							if( send_packet_data( MSG_TRLR,mh) == 0 )
							{

								if( send_packet_byte( cksum,mh ) == 0 )
								{
									rtnval = 0;		// SUCCESS
								}
								else
									rtnval = -7;
							}
							else
								rtnval = -6;
						}
						else
							rtnval = -5;
					}
					else
						rtnval = -4;
				}
				else
					rtnval = -3;
			}
			else
				rtnval = -2;
		}
		else
			rtnval = 1;
		
		// Disable TX
		


		phy_tx(0,mh->h);
	}
	
	return( rtnval );
}
	
//*************************************************************************







<
<
<
<
|
<


















|









|
















>








|

>








>



<
<
|
|
<
|
|
<
<
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<




|

>
>







155
156
157
158
159
160
161




162

163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231


232
233

234
235


236
237
238
239
240
241
242
243
244

245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273





274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
		
		while( mh->state != RCVED_PACKET && 
			   stat_phy( mh->h ) )
		{
			// (3) Get the character and if read run through packet
			// engine
			byte = (unsigned char)get_phy( mh->h );




			rtnval = packet_engine( byte,mh );

		}
	}
		
	return( rtnval );
}

//*************************************************************************
/*
*  void flush_mac( void *h)	- Remove all incomming data from network & discard
*
*	INPUT:	h	- Valid MAC handle
*
*	OUTPUT:	NONE
*/
//************************************************************************

void flush_mac( void *h)
{

	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	
	// (1) Is this trip necessary
	
	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
		// Read out all the characters in the input buffer
		
		while( stat_phy( mh->h ) )
			get_phy( mh->h );
		
		// Flush packet
		
		mh->state = NO_PACKET;
	}
}
//*************************************************************************
/*
*  int put_mac( PACKET *pkt,void *h )	- Send a data packet
*
*	INPUT:	pkt	- Pointer to packet data
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Packet sent
*			<> 0 Transmission failure
*	25-Sep-2009 Change to enable TX
*	29-Dec-2011 Change to make enable/disable RT dependent
*/
//************************************************************************

int put_mac( PACKET *pkt,void *h )
{
	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	int rtnval = -1;
	int i;
	int cksum =0;
	unsigned char from;
	CLOCK_STRUCT c;

	// (1) Is this trip necessary
	
	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
		// (1a) Enable XMIT
		
		phy_tx(1,mh->h);
		CLOCK_Start( &c );
		
		// (2) Send out each byte of the packet and verify that it's OK
		


		if( send_packet_byte( MSG_HDR,mh ) == 0)
		{

			if( send_packet_number( pkt->to,mh,&cksum ) == 0 )			// Send TO
			{				


				// If from address == 0 then use my current address
				
				if( pkt->from == 0 )
					from = mh->my_address;
				else
					from = pkt->from;
				if( send_packet_number( from,mh,&cksum ) == 0)		// Send FROM
				{
						

					for( i=0; i<pkt->len; i++ )
					{
						if( send_packet_byte( pkt->data[i],mh ) != 0)
							break;
						else
							cksum += pkt->data[i];
					}
					
					if( i >= pkt->len )
					{
						if( send_packet_byte( MSG_TRLR,mh) == 0 )
						{
							cksum = cksum % CKSUM_MODULO;	// Modulo checksum
							if( send_packet_number( cksum,mh,&cksum ) == 0 )
							{
								rtnval = 0;		// SUCCESS
							}
							else
								rtnval = -7;
						}
						else
							rtnval = -6;
					}
					else
						rtnval = -5;
				}
				else
					rtnval = -4;
			}





		}
		else
			rtnval = 1;
		
		// Disable TX after specified time
		
		while( CLOCK_Done(&c, 3) == 0 )
			;
		phy_tx(0,mh->h);
	}
	
	return( rtnval );
}
	
//*************************************************************************
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
	{
		// (2) Are we in a packet received state ?
		
		if( mh->state == RCVED_PACKET )
		{
			// (3) Yes, copy the data into the packet structure
			
			pkt->type = mh->ptype;
			pkt->to   = mh->to;
			pkt->from = mh->from;
			pkt->len  = mh->len;
			for( i=0; i<mh->len; i++ )
				pkt->data[i] = mh->data[i];
				
			mh->state = NO_PACKET;			// Ready for next....







<







309
310
311
312
313
314
315

316
317
318
319
320
321
322
	{
		// (2) Are we in a packet received state ?
		
		if( mh->state == RCVED_PACKET )
		{
			// (3) Yes, copy the data into the packet structure
			

			pkt->to   = mh->to;
			pkt->from = mh->from;
			pkt->len  = mh->len;
			for( i=0; i<mh->len; i++ )
				pkt->data[i] = mh->data[i];
				
			mh->state = NO_PACKET;			// Ready for next....
366
367
368
369
370
371
372



























373
374
375
376
377
378
379
380
381
382

383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418



419

420




421
422
423

424
425




426


427
428
429
430
431
432
433
434


435

436

437

438

439
440


441


442
443
444
445
446

447

448
449
450
451
452
453
454
455
456
457

458
459

460







461
462
463

464
465
466
467
468




469

470
471
472



473






474

475
476

477
478
479
480
481
482
483
484
485
486

487

488

489



490
491
492
493
494
495

496
497
498
499
500
501
502
503
504
505
506
507
508
509


510
511
512
513
514
515



516
517

518



519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638

639
640
641
642
643
644

645


646
647
648


649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
		rtnval = mh->my_address;
	}
	
	return( rtnval );
}




























#if 0
	#pragma mark -
	#pragma mark -- Support API --
#endif

//*************************************************************************
/*
*  int packet_engine( MAC_HANDLE *mh ) - Process a character into a packet
*

*	INPUT:	mh	- Valid MAC handle
*
*	OUTPUT:	 0	- Packet not ready
*			 1  - Packet ready, (internal buffer of mh)
*
*	Action:	Using the value in mh->value and type from there
*			accumulate the data into a packet
*	 8-Oct-2009 Reset packet engine when HDR received.  This will allow restart
*				partial packet received
*/
//************************************************************************

static int packet_engine( MAC_HANDLE *mh )
{
	int rtnval = 0;		// No packet
	int fail = 0;		// No fail
	
	// (0) If we have a header then start up a character
	
	if( mh->type == HDR_CHAR )
	{
		// We have winner go to type action
		
		mh->state = TYPE_PACKET;
		mh->len = 0;		// Init for packet run
		mh->cksum = 0;
	}
	else
	{
	
		// (1) Check incomming value, if wrong type then bail on packet
		
		switch( mh->state )
		{
			case TYPE_PACKET:
			case TO_PACKET:



			case FROM_PACKET:

			case CKSUM_PACKET:		// If we don't get a BIN type value




									// in these states then BAIL on the packet
									if( mh->type != BIN_CHAR )
										fail = 1;				// BAD INPUT

									break;
									




			case DATA_PACKET:		// If we get something other than a BIN or CKSUM character


									// here then bail also
									if( mh->type != BIN_CHAR &&
										mh->type != CKSUM_CHAR )
										fail = 1;				// Bad input
									break;
									
			default:				// Accept anything here
									break;


		}

									

		// (2) If we have good data then switch and do packet actions

		

		if( fail == 0 )
		{


			switch( mh->state )


			{
				case NO_PACKET:		// Do we have a startup for the packet ?
									if( mh->type == HDR_CHAR )
									{
										// We have winner go to type action

										

										mh->state = TYPE_PACKET;
										mh->len = 0;		// Init for packet run
										mh->cksum = 0;
									}
									break;
								
				case TYPE_PACKET:	// Get the type value and accum cksum
									mh->ptype = mh->value;
									mh->cksum += mh->value;
									mh->state = TO_PACKET;		// Get address...

									break;
									

				case TO_PACKET:		// Get to address and accum cksum







									mh->to = mh->value;
									mh->cksum += mh->value;
									mh->state = FROM_PACKET;	// Get address...

									break;
								
				case FROM_PACKET:		// Get from address and accum cksum
									mh->from = mh->value;
									mh->cksum += mh->value;




									mh->state = DATA_PACKET;	// Get data...

									break;
									
				case DATA_PACKET:	// Accumulate data values until CKSUM character



									if( mh->type == BIN_CHAR )






									{

										mh->data[mh->len++] = mh->value;
										mh->cksum += mh->value;

										
										// Also fail if we got too much data
										
										if( mh->len >= PHY_DATA_SIZE )
										{
											mh->state = NO_PACKET;
										}
									}
									else
									{

										// With the initial checking this has to be the CKSUM

										

										mh->state = CKSUM_PACKET;



										rtnval = 1;				// Packet is ready ....
									}
									break;
									
				case CKSUM_PACKET:	// Do the checksums match, if so go to packet ready
									// if not just fail

									
									if( mh->cksum == mh->value )
									{
										mh->state = RCVED_PACKET;	// Success
										rtnval = 1;
									}
									else
										mh->state = NO_PACKET;		// Failure
									break;
									
				case RCVED_PACKET:	// We have a packet so just ignore all input
									// packet is read
									break;
			}


		}
		else
		{
			// We have a bad input character so just ignore what we have
			// and go back to no packet
			



			mh->state = NO_PACKET;
		}

	}



	
	return( rtnval );
}

//*************************************************************************
/*
*  int mac_proc_char(unsigned char byte,MAC_HANDLE *mh ) - Process a character
*
*	INPUT:	byte
*			mh	- Valid MAC handle
*			byte	- Input character
*
*	OUTPUT:	 0	- Character not ready
*			 1  - Character ready, value in value of handle struct
*
*	Action:	: or ; seen return value = ; or : and type marked
*			0-9/A-F accumulate as nibbles till byte gotten (store in last_byte)
*			On second nibble return result
*/
//************************************************************************

static int mac_proc_char(unsigned char byte,MAC_HANDLE *mh )
{
	int rtnval = 0;			// No character ready
	
	// (1) Initialize return value
	
	mh->type = NO_CHAR;
	mh->value = byte;
	
	// (2) Process the byte value
	
	switch( byte )
	{
		case MSG_HDR:		// Packet header
						mh->type = HDR_CHAR;
						mh->nib_counter = 0;
						mh->last_byte = 0;
						rtnval = 1;				// We have output
						break;

		case MSG_TRLR:		// Packet cksum marker
						mh->type = CKSUM_CHAR;
						mh->nib_counter = 0;
						mh->last_byte = 0;
						rtnval = 1;				// We have output
						break;
						
						// Do a trick, handle all A-F hex characters here
						// Just form the value in the bottom nibble of byte
						// Pull off the bottom nibble then add 9 to convert to A-F
						// then let it fall through and be handled by the 0-9 code
						
		case 'A':
		case 'B':
		case 'C':
		case 'D':
		case 'E':
		case 'F':
						// NOTE: A -> 0x01 bottom nibble we want 0x0A so just add 9
						//		 B -> 0x02 bottom nibble we want 0x0B so just add 9
						//				:
						//				:
						byte = 9 + (0x0f & byte);
						
						// Now just fall through and handle the nibble just like we do 0-9
						
		case '0':		// 0-9 ASCII -> 0x30 - 0x39 so just get bottom nibble
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':		byte = 0xf & byte;	// Extract the value
						byte = byte << ((1 - mh->nib_counter++)*4);		// Shift to psn
						mh->last_byte |= byte;
						if( mh->nib_counter == 2 )
						{
							// We have an output
							mh->type = BIN_CHAR;
							mh->value = mh->last_byte;
							
							// Reset for next
							mh->nib_counter = 0;
							mh->last_byte = 0;
							
							rtnval = 1;		// We have output
						}
						break;
						
		default:		// On anything else just reset nibble work
						mh->nib_counter = 0;
						mh->last_byte = 0;
						break;
	}
	
	// (3) Return the token pointer
	
	return( rtnval );
}

//*************************************************************************
/*
*  int send_packet_byte( unsigned char byte,,MAC_HANDLE *mh )	- Send out two nibbles
*
*	INPUT:	byte	- Byte to be sent (as two ASCII hex characters)
*
*	OUTPUT:	 0	- Character sent OK
*			<> 0 Problem
*
*/
//************************************************************************

static int send_packet_byte( unsigned char byte,MAC_HANDLE *mh )
{
	int rtnval = -1;		// Set for failure
	unsigned char ch;

	
	// (1) Form the HIGH nibble
	
	ch = (byte>>4) & 0x0f;
	ch = 0x30 | ch;				// Convert to character
	if( ch > 0x39 )				// A -> F

		ch += 7;				// Converted


	if( send_packet_data( ch, mh ) == 0 )
	{
		// (2) Form low nibble


		
		ch = byte & 0xf;
		ch = ch | 0x30;
		if( ch > 0x39 )
			ch += 7;		// Convert A-F
		if( send_packet_data(ch,mh) == 0 )
			rtnval = 0;				// SUCCESS
	}
	
	return( rtnval );
}
	
//*************************************************************************
/*
*  int send_packet_data( unsigned char ch,MAC_HANDLE *mh )	- Send char out PHY and check
*
*	INPUT:	ch	- Character to be sent
*
*	OUTPUT:	 0	- Character sent and received OK to PHY
*			<> 0 Problem
*
*/
//************************************************************************

static int send_packet_data( unsigned char ch,MAC_HANDLE *mh )
{
	int rtnval = -1;		// Set for failure
	unsigned char byte;
	int i;
	
	// (1) Send it out via PHY 
	
	if( put_phy( ch,mh->h ) == 0 )
	{
		// (2) Now was it received ?
		// Give it three cycles
		
		for( i=0; i<3; i++ )
		{
			if( stat_phy(mh->h) == 1 )
			{
				// (3) Yes, does it match what we sent....
				byte = (unsigned char)get_phy( mh->h );
				if( byte == ch )
				{
					rtnval = 0;
					break;					// SUCCESS we got what we sent
				}
			}
		}
	}
	
	return( rtnval );
}









>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>








|

>
|











|


|

|

|

|

|





|
|



<
|
>
>
>
|
>
|
>
>
>
>
|
|
|
>


>
>
>
>
|
>
>
|
|
|
<
<
|
|
|
>
>
|
>
|
>
|
>
|
>
|
|
>
>
|
>
>
|
|
<
|
<
>
|
>
|
<
|
|
|
|
<
|
|
|
>
|
|
>
|
>
>
>
>
>
>
>
|
|
|
>
|
|
|
<
<
>
>
>
>
|
>
|
|
|
>
>
>
|
>
>
>
>
>
>
|
>
|
|
>
|
|

<
<
|
|
|
|
|
>
|
>
|
>
|
>
>
>
|
|
|
|
|
|
>
|
|
|
|
<
|
<
|
<
|
<
|
<
|
>
>
|
|
|
<
|
|
>
>
>
|
|
>
|
>
>
>






<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
|
<
|
<
<
|
<
|
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|





|

|
|
>

|

<
|
|
>
|
>
>
|
|
<
>
>
|
|
<
<
|
|
|

|



<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426

427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453


454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475

476

477
478
479
480

481
482
483
484

485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506


507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533


534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558

559

560

561

562

563
564
565
566
567
568

569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586














587



588

589


590

591








592





































































593
594
595
596
597
598
599
600
601
602
603
604
605
606

607
608
609
610
611
612
613
614

615
616
617
618


619
620
621
622
623
624
625
626












































	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
		rtnval = mh->my_address;
	}
	
	return( rtnval );
}

//*************************************************************************
/*
*  int send_packet_byte( unsigned char ch,MAC_HANDLE *mh )	- Send char out PHY and check
*
*	INPUT:	ch	- Character to be sent
*
*	OUTPUT:	 0	- Character sent and received OK to PHY
*			<> 0 Problem
*
*	EXTERNALLY ACCESSABLE FOR TESTING PURPOSES
*/
//************************************************************************

int send_packet_byte( char ch,MAC_HANDLE *mh )
{
	int rtnval = -1;		// Set for failure

	// (1) Send it out via PHY 
	
	if( put_phy( ch,mh->h ) == 0 )
	{
		rtnval = 0;
	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Support API --
#endif

//*************************************************************************
/*
*  int packet_engine( int byte,MAC_HANDLE *mh ) - Process a character into a packet
*
*	INPUT:	byte	- Incomming character
*			mh		- Valid MAC handle
*
*	OUTPUT:	 0	- Packet not ready
*			 1  - Packet ready, (internal buffer of mh)
*
*	Action:	Using the value in mh->value and type from there
*			accumulate the data into a packet
*	 8-Oct-2009 Reset packet engine when HDR received.  This will allow restart
*				partial packet received
*/
//************************************************************************

static int packet_engine( int byte,MAC_HANDLE *mh )
{
	int rtnval = 0;		// No packet
	//int fail = 0;		// No fail
	
	// (0) If we have a header then start up a packet
	
	if( byte ==  MSG_HDR )
	{
		// We have winner go to to action
		
		mh->state = TO_PACKET_A;
		mh->len = 0;		// Init for packet run
		mh->cksum = 0;
	}
	else
	{
		// (1) Use current state and incomming packet to determine if we
		// continue building packet
		
		switch( mh->state )
		{

			case TO_PACKET_A:		// Must be a digit
									if( isdigit( byte ) )
									{
										// Accumulate it into the to address
										
										mh->to = 10 *(0xf & byte );
										mh->state = TO_PACKET_B;		// Move to next
										mh->cksum += 0xff & byte;
									}
									else
									{
										// Failure, go back to NO packet
										
										mh->state = NO_PACKET;
									}
									break;
									
			case TO_PACKET_B:		// Second digit of to address
									if( isdigit( byte ) )
									{
										mh->to += (0xf & byte);		// Full address
										
										// Is this packet to us, either address = US
										// or ADDRESS == broadcast
										
										if( mh->to == mh->my_address ||
											mh->to == BCAST_ADDRESS )


										{
											// Accumulate cksum & move to FROM address
											
											mh->cksum += 0xff &  byte;
											mh->state = FROM_PACKET_A;
										}
										else
										{
											// FAIL go back to no packet
											
											mh->state = NO_PACKET;
										}
									}
									else
									{
										// FAIL, go back to NO packet
										
										mh->state = NO_PACKET;
									}
									break;
									
			case FROM_PACKET_A:	// First part of FROM value, must be a digit

			

								if( isdigit( byte ) )
								{
									mh->from = 10 * (0xf & byte);	// Get first part of address
									mh->state = FROM_PACKET_B;		// Move on

									mh->cksum += 0xff & byte;
								}
								else
								{

									// Failure, bail
									
									mh->state = NO_PACKET;
								}
								break;
								
			case FROM_PACKET_B:	// Second part of from, check for valid address
			
								if( isdigit(byte) )
								{
									mh->from += (0xf & byte);
									if( mh->from >= MIN_ADDRESS &&
										mh->from <= MAX_ADDRESS )
									{
										// OK, accumulate in cksum & move to data
										
										mh->cksum += 0xff & byte;
										mh->state = DATA_PACKET;
									}
									else
									{
										mh->state = NO_PACKET;	// Failure


									}
								}
								else
								{
									mh->state = NO_PACKET;		// FAILURE
								}
								break;
								
			case DATA_PACKET:	// Accumulate data here till ';' or MAX data, if MAX then failure
								if( byte == MSG_TRLR )
								{
									// End of data move to cksum state, get checksum
									
									mh->state = CKSUM_PACKET_A;
									mh->cksum = mh->cksum % CKSUM_MODULO;
									if( mh->len < PHY_DATA_SIZE )
										mh->data[mh->len] = '\0';				// Put in a NULL
								}
								else
								{
									// Keep accumulating data
									mh->data[mh->len++] = 0xff & byte;
									mh->cksum += byte;
									if( mh->len > PHY_DATA_SIZE )
									{
										// Problem too much data, bail
										


										mh->state = NO_PACKET;
									}
								}
								break;
								
			case CKSUM_PACKET_A:	// First byte of cksum
			
								if( isdigit( byte ) )
								{
									mh->pcksum = 10 * (0xf & byte);
									mh->state = CKSUM_PACKET_B;
								}
								else
								{
									mh->state = NO_PACKET;	// Failure
								}
								break;
								
			case CKSUM_PACKET_B:	// Second and last byte of checksum
			
								if( isdigit( byte ) )
								{
									mh->pcksum += (0xf & byte );
									
									// Is checksum right ?

									

									if( mh->pcksum == mh->cksum )

									{

										// Success

										
										mh->state = RCVED_PACKET;
										rtnval = 1;
									}
									else
									{

										mh->state = NO_PACKET;	// Failure
									}
								}
								else
								{
									mh->state = NO_PACKET;	// Failure
								}
								break;
								
				default:	break;
				}
			}
	
	return( rtnval );
}

//*************************************************************************
/*














*  int send_packet_addr( int addr,,MAC_HANDLE *mh,int *cksum )	- Send out packet address



*

*	INPUT:	addr	- Address (two digit number to send)


*			mh		- MAC_HANDLE

*			cksum	- Accumulated checksum








*





































































*	OUTPUT:	 = 0 Address sent OK
*			<> 0 Problem
*
*/
//************************************************************************

static int send_packet_number( int addr,MAC_HANDLE *mh,int *cksum )
{
	int rtnval = 0;		// Set for success
	char out[4];
	int i;
	
	// (1) form the address output string
	

	sprintf(out,"%02d",addr);
	
	// (2) Send out the two bytes of address
	
	for( i=0; i<2; i++)
	{
		if( send_packet_byte( out[i],mh ) != 0 )
		{

			rtnval = -1;
			break;
		}
		


		// Accumulate cksum
		
		*cksum = out[i] + *cksum;
	}
		
	return( rtnval );
}
	












































Changes to Network/mac.h.

1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

40





41

42
43
44
45
46
47

48
49

50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

91
92
93
94
95
96
97
98
99
100






101
102
103
104
105
106
107
108
109
110
111
112
113

114
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - MAC layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version

*
*	This layer has two functions:
*		(a) Send and receive packets (see below)
*		(b) Get a node address
*
*	PACKET FORMAT:
*		:<Type><TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TYPE>	2 Nibble field as HEX (1 bytes 0-FF value)
*				1	- ACK
*				2	- NAK
*				3	- IAM	(see below)
*				4	- DATA
*	<TO>	2 Nibble field as HEX 1-FF	0xFF -> Broadcast, 0 -> INVALID
*	<FROM>	2 Nibble field as HEX 1-FE
*	<DATA>	Up to PHY_DATA_SIZE as 2 nibbles/byte
*	;		Packet End of Data marker
*	<CKSUM>	Single byte sum of TYPE,TO,FROM and DATA fields modulo 0xFF
*			and output as 2 nibbles
*/
//************************************************************************

#ifndef MAC_H
#define MAC_H	1

#define MSG_HDR		':'
#define MSG_TRLR	';'

#define PHY_DATA_SIZE	32		// Max size of data xfered





#define NODE_NAME_SZ	16		// Max size of node names


typedef enum {
				NO_PACKET,
				TYPE_PACKET,	// Getting TYPE of packet
				TO_PACKET,		// Getting TO address
				FROM_PACKET,	// Getting FROM address

				DATA_PACKET,	// Getting packet data
				CKSUM_PACKET,	// Getting packet cksum

				RCVED_PACKET,	// Packet ready to use
			} PACKET_STATE;

typedef enum {
				NO_CHAR,		// Not ready yet (first nibble of HEX value)
				BIN_CHAR,		// Binary value
				HDR_CHAR,		// ':' head of packet
				CKSUM_CHAR,		// ';' end of packet
			} CHAR_TYPE;
			
#define PACKET_TYPE_ACK		1
#define PACKET_TYPE_NAK		2
#define PACKET_TYPE_IAM		3
#define PACKET_TYPE_DATA	4
#define PACKET_TYPE_PING	5
				
#define MAC_HANDLE_VALID	'MACH'

typedef struct {
					unsigned long valid;	// Valid marker for struct
					int my_address;			// Local address
					
					// Pump processing
					
					void *h;					// Serial handle
					int phy_psn;				// Current psn in phy buffer
					
					CHAR_TYPE	type;			// Input processing
					unsigned char value;
					unsigned char last_byte;	// Last byte received
					int nib_counter;			// Nibble counter (high/low nibble)
					
					
					// Received packet
					PACKET_STATE state;		// State of current received packet
					int ptype;
					int to;
					int from;
					int len;
					unsigned char data[PHY_DATA_SIZE];	// Packet data
					unsigned char cksum;				// Accmulated cksum

					
				} MAC_HANDLE;
				

typedef struct {
					unsigned char type;
					unsigned char to;
					unsigned char from;
					int len;
					unsigned char data[PHY_DATA_SIZE];	// Packet data






				} PACKET;

void *init_mac(char *port);		// Open and close of MAC layer
void close_mac( void *h );

void flush_mac( void *h);		// Flush network
int pump_mac( void *h );		// Call to update state

int put_mac( PACKET *pkt,void *h );
int get_mac( PACKET *pkt,void *h );

int my_addr_mac( void *h );		// Return PHY address for debugging


#endif












>






|

<
<
<
<
<
|
|
|

|
<








>

>
>
>
>
>
|
>



|
|
|
>

|
>


<
<
<
<
<
<
<

















|
<
<
<
<
<
<


<



|
|
>





<
|
|

|
>
>
>
>
>
>













>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21





22
23
24
25
26

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55







56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73






74
75

76
77
78
79
80
81
82
83
84
85
86

87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - MAC layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version
*						11-May-2010	Convert to new network [d26a3ab0e9]
*
*	This layer has two functions:
*		(a) Send and receive packets (see below)
*		(b) Get a node address
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker





*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100

*/
//************************************************************************

#ifndef MAC_H
#define MAC_H	1

#define MSG_HDR		':'
#define MSG_TRLR	';'
#define DATA_SEP	','
#define PHY_DATA_SIZE	32		// Max size of data xfered
#define CKSUM_MODULO	100		// For address calc
#define BCAST_ADDRESS	0		// Broadcast address
#define MIN_ADDRESS		1
#define MAX_ADDRESS		32
#define ACK_WAIT		5000	// Wait 5 ms * addr before sending ACK

#define PARENT_ADDRESS	MAX_ADDRESS

typedef enum {
				NO_PACKET,
				TO_PACKET_A,	// Getting TO address (first byte)
				TO_PACKET_B,	// Getting TO address (second byte)
				FROM_PACKET_A,	// Getting FROM address (first byte)
				FROM_PACKET_B,	// Getting FROM address (second byte)
				DATA_PACKET,	// Getting packet data
				CKSUM_PACKET_A,	// Getting packet cksum (first byte)
				CKSUM_PACKET_B,	// Getting packet cksum (second byte)
				RCVED_PACKET,	// Packet ready to use
			} PACKET_STATE;







			
#define PACKET_TYPE_ACK		1
#define PACKET_TYPE_NAK		2
#define PACKET_TYPE_IAM		3
#define PACKET_TYPE_DATA	4
#define PACKET_TYPE_PING	5
				
#define MAC_HANDLE_VALID	'MACH'

typedef struct {
					unsigned long valid;	// Valid marker for struct
					int my_address;			// Local address
					
					// Pump processing
					
					void *h;					// Serial handle
					int phy_psn;				// Current psn in phy buffer
										






					// Received packet
					PACKET_STATE state;		// State of current received packet

					int to;
					int from;
					int len;
					char data[PHY_DATA_SIZE];	// Packet data
					int cksum;				// Accmulated cksum
					int pcksum;				// Packet checksum
					
				} MAC_HANDLE;
				

typedef struct {

					int to;
					int from;
					int len;
					char data[PHY_DATA_SIZE];	// Packet data
					
					// Chunk handler 
					
					int chunk_len;	// Length of current chunk
					int chunk_end;	// End of current chunk
					int chunk_ptr;	// Psn in current chunk
				} PACKET;

void *init_mac(char *port);		// Open and close of MAC layer
void close_mac( void *h );

void flush_mac( void *h);		// Flush network
int pump_mac( void *h );		// Call to update state

int put_mac( PACKET *pkt,void *h );
int get_mac( PACKET *pkt,void *h );

int my_addr_mac( void *h );		// Return PHY address for debugging

int send_packet_byte( char ch,MAC_HANDLE *mh );
#endif

Changes to Network/network.c.

1
2
3
4
5
6
7
8
9
10
11
12





13
14
15
16
17
18
19
20

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - NETWORK layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version





*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include "network.h"


#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

static int setup_address( void *h );
int send_network_nakack( int type,int to,void *h);

#if 0
	#pragma mark -
	#pragma mark -- Create/Delete API --
#endif

//*************************************************************************
/*
*  void *init_network(char *port)	- Initialize NETWORK layer
*

*	INPUT:	port	- Phy port name
*
*	OUTPUT:	NULL, failure <> NULL -> Network layer open
*			NOTE: on return we have an assigned NODE address
*/
//************************************************************************

void *init_network(char *port)
{
	void *h;
	
	// (1) Open the MAC layer, quit if failure
	
	h = init_mac( port );
	if( h != NULL )
	{
		// (2) Set up our network address
		
		if( setup_address( h ) != 1 )
		{
			// Bad network, failure
			
			close_mac( h );
			h = NULL;
		}
	}












>
>
>
>
>








>






|









|

>
|






|










|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - NETWORK layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version
*						12-May-2010 [d26a3ab0e9] Convert to new network style
*									This will have fixed numeric addressed for each
*									node
*						22-May-2010 Add logging to system [d98ef0303d]
*						22-May-2010 Change get network to clear packet on rec
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include "network.h"
#include "firenetlog.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

static void net_backoff( int backoff, void *h );
int send_network_nakack( int type,int to,void *h);

#if 0
	#pragma mark -
	#pragma mark -- Create/Delete API --
#endif

//*************************************************************************
/*
*  void *init_network(int address,char *port)	- Initialize NETWORK layer
*
*	INPUT:	address	- Assigned address of node
*			port	- Phy port name
*
*	OUTPUT:	NULL, failure <> NULL -> Network layer open
*			NOTE: on return we have an assigned NODE address
*/
//************************************************************************

void *init_network(int address,char *port)
{
	void *h;
	
	// (1) Open the MAC layer, quit if failure
	
	h = init_mac( port );
	if( h != NULL )
	{
		// (2) Set up our network address
		
		if( setup_address( address,h ) != 1 )
		{
			// Bad network, failure
			
			close_mac( h );
			h = NULL;
		}
	}
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178







179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219























220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236






237






238
239




















































240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255

256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292

293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
*			and returns NAK if my address is seen
*/
//************************************************************************

int pump_network( void *h )
{
	int rtnval;
	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	
	// (1) Pump it....
	
	rtnval = pump_mac(h);
	
	// (2) If we got something (rtnval = 1) then check if it's a message
	// that should be handled here, done by peaking at the type in the
	// mac handle.  NOTE: The mac handle is valid since the pump_mac() wouldn't
	// return 1 unless it had a good handle (and there was data)
	// Also handle pings here and ack if received and match our address
	if( rtnval )
	{
		switch( mh->ptype )
		{
			case PACKET_TYPE_IAM:	// Handle IAM packets in here, just return a Broadcast NAK
									// if we have the same address
									if( mh->from == mh->my_address )
									{
										send_network_nak( BCAST_ADDRESS, h );
									}
									
									mh->state = NO_PACKET;	// Discard input
									rtnval = 0;				// There was no packet (wave hands)
									break;

			case PACKET_TYPE_PING:	// If we match to to address, then return an ACK
									if( mh->to == mh->my_address )
									{
										send_network_ack( mh->from, h );
									}
									
									mh->state = NO_PACKET;	// Discard input
									rtnval = 0;				// There was no packet (wave hands)
									break;
									
			default:				// On all others discard if they are not our address and 
									// BCAST address
									
									if( mh->to != mh->my_address &&
										mh->to != BCAST_ADDRESS )
									{
										mh->state = NO_PACKET;	// Discard input
										rtnval = 0;
									}
									break;
		}
	}
	
	return( rtnval );
}

//*************************************************************************
/*
*  int put_network( PACKET *pkt,void *h ) - Send a packet
*

*	INPUT:	pkt	- Packet information
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*			<> 0 problem
*/
//************************************************************************

int put_network( PACKET *pkt,void *h )
{
	int rtnval = -1;
	int count = MAX_TX_TRY;
	int backoff,i;
	int from;
	
	// (1) Try to send and backoff if failure
	
	while( count > 0 )
	{







		rtnval = put_mac( pkt,h );
		if( rtnval == 0 )
			break;					// Success
		else
		{
			if( pkt->from == 0 )
			{
				from = my_addr_mac( h );
			}
			else
				from = pkt->from;
			
			printf("Network XMIT Fail: [%02X] [%02X] count %d Reason [%d]\n",
							from,
							pkt->to,
							count,
							rtnval);
		}
		
		// (2) Now generate a random back off time
		// based in BACKOFF_UNIT ms intervals
		
		flush_network(h);			// Clear the network before
									// retry
		backoff = rand() & 0x3f;
		if( backoff == 0 )
			backoff = 10;
		printf("BACKOFF [%02X] [%d]\n",from,backoff);
		
		// Sleep then pump the network
		// till backoff done
		for( i=0; i<backoff; i++ )
		{
			usleep( BACKOFF_UNIT );
			pump_network( h );
		}
		count -= 1;
	}
	
	return( rtnval );
}























		
//*************************************************************************
/*
*  int get_network( PACKET *pkt,void *h )	- Get a packet
*
*	INPUT:	pkt	- Packet information
*			h	- Valid MAC handle
*
*	OUTPUT:	1 - We have a packet
*			0 No packet
*/
//************************************************************************

int get_network( PACKET *pkt,void *h )
{
	int rtnval;
	






	rtnval = get_mac(pkt,h);






	return( rtnval );
}





















































//*************************************************************************
/*
*  void flush_network( void *)	- Remove all incomming data from network
*
*	INPUT:	h	- Valid MAC handle
*
*	OUTPUT:NONE
*/
//************************************************************************

void flush_network( void *h)
{
	flush_mac( h );
}


//*************************************************************************
/*
*  int send_network_nak( int to,void *h)	- Send an NAK packet
*
*	INPUT:	to	- Destination address
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*/
//************************************************************************

int send_network_nak( int to,void *h)
{
	int rtnval;
	
	rtnval = send_network_nakack( PACKET_TYPE_NAK,to,h );
	
	return( rtnval );
}

//*************************************************************************
/*
*  int send_network_ack( int to,void *h)	- Send an AAK packet
*
*	INPUT:	to	- Destination address
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*/
//************************************************************************

int send_network_ack( int to,void *h)
{
	int rtnval;
	
	rtnval = send_network_nakack( PACKET_TYPE_ACK,to,h );
	

	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Support API --
#endif

//*************************************************************************
/*
*  int send_network_nakack( int to,void *h)	- Send an NAK or ACK packet
*
*	INPUT:	type  NAK or ACK type
*			to	- Destination address
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*/
//************************************************************************

int send_network_nakack( int type,int to,void *h)
{
	PACKET	pkt;
	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	int rtnval = -1;
	
	// (1) Is this trip necessary
	
	if( mh != NULL && mh->valid == MAC_HANDLE_VALID )
	{
	
		// (2) Fill out the packet
		
		pkt.type = type;
		pkt.to	 = to;
		pkt.from = mh->my_address;
		pkt.len = 0;
		
		rtnval = put_mac( &pkt, h );
	}
	
	return( rtnval );
}


//*************************************************************************
/*
*  int setup_address( void *h )
*
*	INPUT:	h	- Valid MAC handle
*
*	OUTPUT:	1 New address setup and running
*			0 If no address can be found (1-0xFE)
*
*	25-Sep-2009 Change here to time out after 30 seconds and return OK
*				this implies we are on an MT network
*/
//************************************************************************

static int setup_address( void *h )
{
	int rtnval;
	PACKET pkt;
	MAC_HANDLE *mh = (MAC_HANDLE *)h;
	int i;
	int val;
	int retry_cntr = 10;
	
	// (1) Loop here trying addresss till we find one that isn't used
	
	mh->my_address = 0;
	while( mh->my_address == 0 )
	{
		mh->my_address = 0xf & rand();
		if( mh->my_address != 0 )
			break;
	}
	
	// (1a) Loop setting address,
	// NOTE: This code will not be stuck here
	// Either XMIT will fail or we won't get any 
	// responses on an MT network
	
	while( 1)
	{
		val = rand();
		mh->my_address = mh->my_address + (0x0f & val);
		
		// (2) Build and send an IAM packet
		
		pkt.type = PACKET_TYPE_IAM;
		pkt.to	= BCAST_ADDRESS;
		pkt.from = mh->my_address;			// Where this is used ensures that
											// mh is valid
		pkt.len = 0;
		
		flush_network( h );					// Flush out all packets before we do this
		rtnval = put_mac(&pkt, h);			// Send out an IAM
		if( rtnval == 0 )
		{
			// (2) Now wait 10 backoff unit intervals for a NAK
			// message, if any then return fail
			
			//val = 1000 * mh->my_address;
			val = BACKOFF_UNIT;
			for( i=0; i<10; i++ )
			{
				usleep( val );
				val = BACKOFF_UNIT;
				if( pump_network( h ) == 1 )
					break;
			}
			
			// (3) Did we get something ?
			
			rtnval = 1;		// Set for success (i.e. no message means OK)
			while( get_network( &pkt, h ) )
			{
				if( pkt.type == PACKET_TYPE_NAK )
				{
					rtnval = 0;						// FAILURE
					break;
				}
				else
					rtnval = 1;						// Address accepted
				pump_network( h );			
			}
		}
		else 
		{
			// We have an XMIT failure so count up
			// and when we hit 10 mark as failure
			
			retry_cntr -= 1;
			if( retry_cntr <= 0 )
				break;
		}
		
		// (4) If we are OK here then exit out of loop with 
		// our address setup
		
		if( rtnval == 1 )
			break;
	}
	
	return( rtnval );
}








|




|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







>
|







|



|






>
>
>
>
>
>
>












|














|



|
<
<
<
<





>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

















>
>
>
>
>
>

>
>
>
>
>
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
















>


|

|


<
<
<
|
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<



|

<
|
<
|
>
|







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
104
105
106
107
108
109
110
111
112
113
114
115
116











































117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182




183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318



319



320













321
322
323
324
325

326

327
328
329
330
331
332
333
334
335
336












































































































































*			and returns NAK if my address is seen
*/
//************************************************************************

int pump_network( void *h )
{
	int rtnval;
	//MAC_HANDLE *mh = (MAC_HANDLE *)h;
	
	// (1) Pump it....
	
	rtnval = pump_mac(h);
		











































	return( rtnval );
}

//*************************************************************************
/*
*  int put_network( PACKET *pkt,void *h ) - Send a packet
*
*	INPUT:	bcast	- From address of originating packet (0 = BCAST)
*			pkt	- Packet information
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*			<> 0 problem
*/
//************************************************************************

int put_network( int bcast, PACKET *pkt,void *h )
{
	int rtnval = -1;
	int count = MAX_TX_TRY;
	int backoff;
	int from;
	
	// (1) Try to send and backoff if failure
	
	while( count > 0 )
	{
		// If broadcast source then backoff time = to current node #
		
		if( bcast == 0)
		{
			backoff = my_addr_mac(h);
			net_backoff( backoff,h );
		}
		rtnval = put_mac( pkt,h );
		if( rtnval == 0 )
			break;					// Success
		else
		{
			if( pkt->from == 0 )
			{
				from = my_addr_mac( h );
			}
			else
				from = pkt->from;
			
			log_data("Network XMIT Fail: [%02X] [%02X] count %d Reason [%d]\n",
							from,
							pkt->to,
							count,
							rtnval);
		}
		
		// (2) Now generate a random back off time
		// based in BACKOFF_UNIT ms intervals
		
		flush_network(h);			// Clear the network before
									// retry
		backoff = rand() & 0x3f;
		if( backoff == 0 )
			backoff = 10;
		log_data("BACKOFF [%02X] [%d]\n",from,backoff);
		
		// Sleep then pump the network
		// till backoff done
		net_backoff( backoff,h );




		count -= 1;
	}
	
	return( rtnval );
}

//*************************************************************************
/*
*  void net_backoff( int backoff, void *h )	- Network time backoff
*
*	INPUT:	backoff	- Backoff time in BACKOFF_UNIT values
*			h	- Valid MAC handle
*
*	OUTPUT:	NONE
*/
//************************************************************************

static void net_backoff( int backoff, void *h )
{
	int i;
	
	for( i=0; i<backoff; i++ )
	{
		usleep( BACKOFF_UNIT );
		pump_network( h );
	}
}
	
		
//*************************************************************************
/*
*  int get_network( PACKET *pkt,void *h )	- Get a packet
*
*	INPUT:	pkt	- Packet information
*			h	- Valid MAC handle
*
*	OUTPUT:	1 - We have a packet
*			0 No packet
*/
//************************************************************************

int get_network( PACKET *pkt,void *h )
{
	int rtnval;
	
	// (1) First clear old data from packet
	
	memset(pkt,'\0',sizeof(PACKET));
	
	// (2) Now fill the packet
	
	rtnval = get_mac(pkt,h);
	if( rtnval == 1 )		// We have a packet
	{
		// Get the first chunk

		rtnval = get_chunk( pkt );
	}
	return( rtnval );
}

//**************************************************************************
/*
* int get_chunk( PACKET *pkt )	- Setup for next chunk
*
*	INPUT:	pkt	- Packet object
*
*	OUTPUT:	1	- Next chunk found and setup
*			0	- No next chunk
*/
//***************************************************************************

int get_chunk( PACKET *pkt )
{
	int i;
	
	// (1) If not in start up state (chunk ptr,len & end == 0 )
	// Advance end forward (not past end) so we scan a clean
	// run
	
	if( pkt->chunk_end != 0 && pkt->chunk_end < pkt->len )
	{
		pkt->chunk_end += 1;
	}
	
	// (2) Scan forward and look for chunk marker or EOP
	
	for( i = pkt->chunk_end; i<= pkt->len; i++ )
	{
		switch( pkt->data[i] )
		{
			case DATA_SEP:	// We have a chunk
			case '\0':		// Treat NULL same way
			
							pkt->chunk_ptr = pkt->chunk_end;		// Start at last psn
							pkt->chunk_len = i - pkt->chunk_end;	// Calc chunk length
							pkt->chunk_end = i;						// Save last end
								
							// Mark end of data
							pkt->data[i] = '\0';
							
							if( pkt->chunk_len > 0 )
								return( 1 );		// Exit loop with a chunk
							else
								return( 0 );		// Exit loop with no chunk left
							
			default:		break;				// Ignore everything else
		}
	}
		
	return( 0 );		// Falling out here means we found nothing
}

//*************************************************************************
/*
*  void flush_network( void *)	- Remove all incomming data from network
*
*	INPUT:	h	- Valid MAC handle
*
*	OUTPUT:NONE
*/
//************************************************************************

void flush_network( void *h)
{
	flush_mac( h );
}


//*************************************************************************
/*
*  int setup_address( int address,void *h )
*
*	INPUT:	address	- Input address value
*			h	- Valid MAC handle
*



*	OUTPUT:	1 New address setup and running



*













*/
//************************************************************************

int setup_address( int address,void *h )
{

	MAC_HANDLE *mh = (MAC_HANDLE *)h;


	mh->my_address = address;
	return( 1 );
}

#if 0
	#pragma mark -
	#pragma mark -- Support API --
#endif













































































































































Changes to Network/network.h.

1
2
3
4
5
6
7
8
9
10
11
12





13
14
15
16
17
18
19
20
21
22
23
24




























25
26

27
28
29
30
31
32

33
34
35
36
37
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - NETWORK layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version





*/
//************************************************************************

#ifndef NETWORK_H
#define NETWORK_H	1

#include "mac.h"

#define BCAST_ADDRESS	0xff		// Broadcast address, all will receive
#define MAX_TX_TRY		3			// Try three times
#define BACKOFF_UNIT	15000		// ~ usec backoff time unit





























void *init_network(char *port);		// Open and close of MAC layer
void close_network( void *h );


void flush_network( void *);		// Remove all data from network
int pump_network( void *h );		// Call to update state

int put_network( PACKET *pkt,void *h );
int get_network( PACKET *pkt,void *h );


int send_network_nak( int to,void *h);
int send_network_ack( int to,void *h);

#endif












>
>
>
>
>








<



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|

>




|

>

|
|


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - NETWORK layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version
*						12-May-2010 [d26a3ab0e9] Convert to new network style
*						20-Jan-2011	Add version command
*						10-May-2011	[241aaaeb3d ] Update simulator 
*									to match hardware
*						14-Nov-2011 [683a021143] Add pgm event queue
*/
//************************************************************************

#ifndef NETWORK_H
#define NETWORK_H	1

#include "mac.h"


#define MAX_TX_TRY		3			// Try three times
#define BACKOFF_UNIT	15000		// ~ usec backoff time unit

// Packet commands

// Operational commands
#define ARM_CMD			'A'
#define FIRE_CMD		'F'
#define DLY_CMD			'D'
#define PGM_CMD			'P'
#define STATUS_CMD		'S'
#define SYNC_CMD		'Z'

// Information commands
#define VER_CMD			'V'
#define CHI_CMD			'C'
#define SET_AD_CMD		'W'
#define SET_FT_CMD		'T'
#define SET_TM_CMD		'M'
#define SET_BKOFF_CMD	'B'
#define RESET_CMD		'X'

// Readout commands

#define GET_DATA		'R'

// Response command
#define RESP_CMD	'R'

#define RESP_WAIT	5			// Wait 5 ms/address to receive/send resp cmd

void *init_network(int address,char *port);		// Open and close of MAC layer
void close_network( void *h );
int setup_address( int address,void *h );

void flush_network( void *);		// Remove all data from network
int pump_network( void *h );		// Call to update state

int put_network( int bcast,PACKET *pkt,void *h );
int get_network( PACKET *pkt,void *h );
int get_chunk( PACKET *pkt );

//int send_network_nak( int to,void *h);
//int send_network_ack( int to,void *h);

#endif

Changes to Network/phy.c.

8
9
10
11
12
13
14


15
16
17
18
19
20
21

22
23


24
25
26
27
28
29
30
*
*  Description:         This code will be used to simulate the
*						firing box CSMA RS-485 network used between
*						firing boxes
*
*  Revision History:	28-Jul-2009	Initial version supporting both
*									real and sim phy [fa981152d5] 


*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>

#include "sim_phy.h"
#include "real_phy.h"



#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

typedef enum {







>
>







>


>
>







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
*
*  Description:         This code will be used to simulate the
*						firing box CSMA RS-485 network used between
*						firing boxes
*
*  Revision History:	28-Jul-2009	Initial version supporting both
*									real and sim phy [fa981152d5] 
*						23-Jan-2011 [c6b3a88a66] Add PHY logging
*						 9-Feb-2013 Add control for PHY logging
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include <ctype.h>
#include "sim_phy.h"
#include "real_phy.h"
#include "firenetlog.h"
#include "debug.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

typedef enum {
88
89
90
91
92
93
94


95
96
97
98
99
100
101
*/
//************************************************************************

void  *init_phy( char *port )
{
	void *h = NULL;
	


	switch( phy_flag )
	{
		case REAL_PHY:	h = real_init_phy( port );
						break;
						
		case SIM_PHY:	h = sim_init_phy( port );
						break;







>
>







93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
*/
//************************************************************************

void  *init_phy( char *port )
{
	void *h = NULL;
	
	log_data("PHY OPEN [%s]\n",port);
	
	switch( phy_flag )
	{
		case REAL_PHY:	h = real_init_phy( port );
						break;
						
		case SIM_PHY:	h = sim_init_phy( port );
						break;
113
114
115
116
117
118
119


120
121
122
123
124
125
126
*/
//************************************************************************

void close_phy( void *h )
{
	if( h != NULL )
	{


		switch( phy_flag )
		{
			case REAL_PHY:	real_close_phy( h );
							break;
							
			case SIM_PHY:	sim_close_phy( h );
							break;







>
>







120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
*/
//************************************************************************

void close_phy( void *h )
{
	if( h != NULL )
	{
		log_data("PHY CLOSE\n");
		
		switch( phy_flag )
		{
			case REAL_PHY:	real_close_phy( h );
							break;
							
			case SIM_PHY:	sim_close_phy( h );
							break;
139
140
141
142
143
144
145







146
147
148
149
150
151
152
*
*/
//************************************************************************

int put_phy( unsigned char data,void *h )
{
	int rtnval = 0;







	
	switch( phy_flag )
	{
		case REAL_PHY:	rtnval = real_put_phy( data,h );
						break;
						
		case SIM_PHY:	rtnval = sim_put_phy( data,h );







>
>
>
>
>
>
>







148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
*
*/
//************************************************************************

int put_phy( unsigned char data,void *h )
{
	int rtnval = 0;

#ifdef MON_PHY
	if( isprint(data) )
		log_data("PHY OUT [%c]\n",data);
	else
		log_data("PHY OUT [0x%02X]\n",0xff & data);
#endif
	
	switch( phy_flag )
	{
		case REAL_PHY:	rtnval = real_put_phy( data,h );
						break;
						
		case SIM_PHY:	rtnval = sim_put_phy( data,h );
201
202
203
204
205
206
207










208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224


225
226
227
228
229
230
231
232
233
234
	{
		case REAL_PHY:	rtnval = real_get_phy( h );
						break;
						
		case SIM_PHY:	rtnval = sim_get_phy( h );
						break;
	}










	
	return( rtnval );
}

//*************************************************************************
/*
* int phy_tx( int flag,void *h)	- Enable transmit
*
*	INPUT:	flag	- 1 enable TX, 0 Disable
*			h		- Port handle
*
*	OUTPUT:	NONE
*/
//************************************************************************

int phy_tx( int flag,void *h )
{	


	switch( phy_flag )
	{
		case REAL_PHY:	real_phy_tx( flag,h );
						break;
						
		case SIM_PHY:	sim_phy_tx( flag,h );
						break;
	}
}








>
>
>
>
>
>
>
>
>
>















|
|
>
>










217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
	{
		case REAL_PHY:	rtnval = real_get_phy( h );
						break;
						
		case SIM_PHY:	rtnval = sim_get_phy( h );
						break;
	}
	
	if( rtnval != EOF )
	{
#ifdef MON_PHY
		if( isprint(rtnval) )
			log_data("PHY IN [%c]\n",rtnval);
		else
			log_data("PHY IN [0x%02X]\n",rtnval);
#endif
	}
	
	return( rtnval );
}

//*************************************************************************
/*
* int phy_tx( int flag,void *h)	- Enable transmit
*
*	INPUT:	flag	- 1 enable TX, 0 Disable
*			h		- Port handle
*
*	OUTPUT:	NONE
*/
//************************************************************************

void phy_tx( int flag,void *h )
{
	log_data("--TX FLG [%d]\n",flag);
	
	switch( phy_flag )
	{
		case REAL_PHY:	real_phy_tx( flag,h );
						break;
						
		case SIM_PHY:	sim_phy_tx( flag,h );
						break;
	}
}

Changes to Node/debug.h.

1
2
3
4
5
6
7

8
9
10
11
12
13
14
15

16




17
18
//*****************************************************************************
/*
*	DEBUG	- DEBUG FLAGS for system
*
*	This file holds debug flags for the system
*
*  Revision History:	13-Sep-2009	Initial version

*/
//*****************************************************************************

#ifndef DEBUG_H
#define DEBUG_H	1

	#define MON_PARENT_DATA	1		// Uncomment to display Parent network data
	#define MON_CHILD_DATA	1		// Uncomment to display Child network data

	//#define CMD_LINE_OPERATION	1		// Uncomment to run CMD Line version of system





#endif







>








>

>
>
>
>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//*****************************************************************************
/*
*	DEBUG	- DEBUG FLAGS for system
*
*	This file holds debug flags for the system
*
*  Revision History:	13-Sep-2009	Initial version
*                       23-Aug-2011 [0020ac449a] Add RS-232 debug flag
*/
//*****************************************************************************

#ifndef DEBUG_H
#define DEBUG_H	1

	#define MON_PARENT_DATA	1		// Uncomment to display Parent network data
	#define MON_CHILD_DATA	1		// Uncomment to display Child network data
//	#define MON_PHP			1
	//#define CMD_LINE_OPERATION	1		// Uncomment to run CMD Line version of system
	//#define DEBUG_RESPONSE_TIME		30000	// Wait 30 seconds for response
	//#define RS232_COM           1   // If present RS-232 connection to single node
                                    // used instead of FIRENET RS-485
                                    // DTR set OFF for all com

#endif

Changes to Node/node/child.c.

8
9
10
11
12
13
14





15
16
17
18
19
20
21
22
23
24
25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41


42
43
44
45
46
47
48
*
*  Description:         This layer is a simulation of the child nodes
*						of the network.  It is the thread code with network
*						startup and thread loop
*
*  Revision History:	30-Jul-2009	Initial version
*						30-Aug-2009	Convert to child only code





*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#include "network.h"
#include "child.h"
#include "child_cmd.h"
#include "debug.h"


#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

static void *node_th( void *ptr );

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

#define THREAD_PAUSE	1000000		// SWAG 1 S



//*************************************************************************
/*
*  NODE_DATA *child_start( char *port,int node_count )	- Start running nodes
*
*	INPUT:	port		- Network port name
*			node_count	- # Nodes created







>
>
>
>
>













>













|
>
>







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
*
*  Description:         This layer is a simulation of the child nodes
*						of the network.  It is the thread code with network
*						startup and thread loop
*
*  Revision History:	30-Jul-2009	Initial version
*						30-Aug-2009	Convert to child only code
*						15-May-2010	[d26a3ab0e9] Added fix to clear packet before receive
*						22-May-2010 Add logging to system [d98ef0303d]
*						22-May-2010 Fix output of logged packet to display correctly in node_th
*						 9-Jan-2011 Add default firing time to node data
*						14-May-2011 Add test mode & def backoff to node data
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#include "network.h"
#include "child.h"
#include "child_cmd.h"
#include "debug.h"
#include "firenetlog.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

static void *node_th( void *ptr );

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

//#define THREAD_PAUSE	1000000		// SWAG 1 S
#define THREAD_PAUSE	10000		// SWAG 10 mS


//*************************************************************************
/*
*  NODE_DATA *child_start( char *port,int node_count )	- Start running nodes
*
*	INPUT:	port		- Network port name
*			node_count	- # Nodes created
70
71
72
73
74
75
76
77







78






79
80
81
82
83
84
85
		{
			// (3) Fill in the individual data nodes & start the threads
			
			for( i=0; i<node_count; i++ )
			{
				node->data[i].port = port;
				node->data[i].ckts_connected = 0x3f;		// Have all 6 working
				sprintf(node->data[i].name,"NODE%02d",i+1);







				val = pthread_create(&(node->data[i].th),NULL,&node_th,&(node->data[i]));






			}
		}
		else
		{
			// FAILURE, free struct and return
			
			free( node );







|
>
>
>
>
>
>
>

>
>
>
>
>
>







78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
		{
			// (3) Fill in the individual data nodes & start the threads
			
			for( i=0; i<node_count; i++ )
			{
				node->data[i].port = port;
				node->data[i].ckts_connected = 0x3f;		// Have all 6 working
				node->data[i].number = i+1;
				
				// Node setup
				node->data[i].firing_time = DEF_FIRING_TIME;
				node->data[i].test_mode = 1;
				node->data[i].backoff = DEF_BACKOFF;
				
				// Start the node
				val = pthread_create(&(node->data[i].th),NULL,&node_th,&(node->data[i]));
                if( val != 0 )
                {
                    free( node );
                    return NULL;
                }

			}
		}
		else
		{
			// FAILURE, free struct and return
			
			free( node );
122
123
124
125
126
127
128



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/*
*  void *node_th( void *ptr )	- Node thread
*
*	INPUT:	ptr	- Node environment
*
*	OUTPUT:	NULL	Return NULL always
*			stay in this loop till stop != 0



*/
//************************************************************************

static void *node_th( void *ptr )
{
	void *h;
	PACKET packet;
	int val;
	CHILD_DATA *data = (CHILD_DATA *)ptr;
	MAC_HANDLE *mh;
	
	// (1) Open the a handle to the network

	h = init_network( data->port );
	if( h != NULL )
	{
		mh = (MAC_HANDLE *)h;
		//pthread_mutex_lock( &ptrmtx );
		//printf("\nAddress Assigned[%s]: %0X\n",data->name,
		//							mh->my_address);
		//pthread_mutex_unlock( &ptrmtx );
		
		// (2) Loop to handle child node actions
		
		while( data->stop == 0 )
		{
			// (2a) Manage internal operations
			
			child_manage_node( data, h );
			
			// (2b) Handle network traffic

			
			pump_network( h );
			val = get_network( &packet,h );
			if( val > 0 )
			{
#ifdef MON_CHILD_DATA
				//pthread_mutex_lock( &ptrmtx );
				printf("\nREC [%s] TYPE: %d FROM: %02X TO: %02X LEN: %d Data:",
								data->name,
								packet.type,
								packet.from,
								packet.to,
								packet.len);
				int i;
				for( i=0; i<packet.len; i++ )
					printf("%02X ",0xff & packet.data[i]);
				printf("\n");
				//pthread_mutex_unlock( &ptrmtx );
#endif
				// Handle packets
				child_packet_handler( data,&packet,h );
			}
			usleep( THREAD_PAUSE );
			//printf("Child [%s] Cycle\n",data->name);
		}
	}
	
	printf("\n[%s] Shutdown",data->name);
	
	return( NULL );
}







>
>
>









<



|


<
<
<
<
<










>







|
|
<


|
<
<
|
<


|







|



143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

162
163
164
165
166
167





168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187

188
189
190


191

192
193
194
195
196
197
198
199
200
201
202
203
204
205
/*
*  void *node_th( void *ptr )	- Node thread
*
*	INPUT:	ptr	- Node environment
*
*	OUTPUT:	NULL	Return NULL always
*			stay in this loop till stop != 0
*	15-May-2010	[d26a3ab0e9] Added fix to clear packet before receive
*				changed code in network.c to clear packet
*	22-May-2010 Fix output of logged packet to display correctly
*/
//************************************************************************

static void *node_th( void *ptr )
{
	void *h;
	PACKET packet;
	int val;
	CHILD_DATA *data = (CHILD_DATA *)ptr;

	
	// (1) Open the a handle to the network

	h = init_network( data->number,data->port );
	if( h != NULL )
	{





		
		// (2) Loop to handle child node actions
		
		while( data->stop == 0 )
		{
			// (2a) Manage internal operations
			
			child_manage_node( data, h );
			
			// (2b) Handle network traffic
			// Clear packet before receive
			
			pump_network( h );
			val = get_network( &packet,h );
			if( val > 0 )
			{
#ifdef MON_CHILD_DATA
				//pthread_mutex_lock( &ptrmtx );
				log_data("\nREC [%d]  FROM: %02d TO: %02d LEN: %d Data: [%s]\n",
								data->number,

								packet.from,
								packet.to,
								packet.len,


								packet.data);

				//pthread_mutex_unlock( &ptrmtx );
#endif
				// Handle packet
				child_packet_handler( data,&packet,h );
			}
			usleep( THREAD_PAUSE );
			//printf("Child [%s] Cycle\n",data->name);
		}
	}
	
	printf("\n[%d] Shutdown",data->number);
	
	return( NULL );
}

Changes to Node/node/child.h.

9
10
11
12
13
14
15



16
17
18
19
20
21
22
23
24
25
26
27
28
29




30





31
32
33
34
35
36
37
38
39
40
41
42

43











44
45
46
47
48
49
50
51
52
53
54
55
56
*  Description:         This layer is a simulation of the child nodes
*						of the network
*
*  Revision History:	30-Jul-2009	Initial version
*						 8-Aug-2009	Add parent/node specific data [48a9689588]
*						12-Aug-2009 Add a timer to parent and all nodes [0654091ae5]
*						30-Aug-2009	Convert to child node code



*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include "clock.h"
#include "mac.h"

#ifndef CHILD_H
#define CHILD_H	1





typedef struct {





					char *port;					// Port used
					char name[NODE_NAME_SZ];	// Node name
					int stop;					// TRUE to stop thread
					pthread_t	th;				// Thread handle
					int armed;
					int ckts_connected;			// Circuits connected with devices	
					int ckts_fired;				// Circuits that have been fired
					
					// Delayed firing support
					CLOCK_STRUCT c;				// Timer struct [0654091ae5]
					int delay_running;			// TRUE when delay running
					unsigned long delay_time;	// Current delay time

					int fire_channel;			// Channel to fire on delay











				} CHILD_DATA;
				
typedef struct {
					int node_count;		// # Nodes
					CHILD_DATA *data;	// Array of child data nodes
				} NODE_DATA;

NODE_DATA *child_start( char *port,int node_count );		// Start running nodes
void child_stop( NODE_DATA *pd );							// Shutdown nodes

// Input event

#endif







>
>
>














>
>
>
>

>
>
>
>
>

|










>

>
>
>
>
>
>
>
>
>
>
>













9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
*  Description:         This layer is a simulation of the child nodes
*						of the network
*
*  Revision History:	30-Jul-2009	Initial version
*						 8-Aug-2009	Add parent/node specific data [48a9689588]
*						12-Aug-2009 Add a timer to parent and all nodes [0654091ae5]
*						30-Aug-2009	Convert to child node code
*						24-May-2010	Add delay_rec to see when delay received
*						 9-Jan-2011 Add firing time value
*						14-Nov-2011 [683a021143] Add pgm event queue
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include "clock.h"
#include "mac.h"

#ifndef CHILD_H
#define CHILD_H	1

#define DEF_FIRING_TIME		1000	// 1000ms
#define DEF_BACKOFF			30		// 30 ms
#define MAX_FIRE_CHANNELS	6

typedef struct {
					int ch;
					long ft;
				} EVENT_LIST;

typedef struct {
					char *port;					// Port used
					int number;					// Node # (address)
					int stop;					// TRUE to stop thread
					pthread_t	th;				// Thread handle
					int armed;
					int ckts_connected;			// Circuits connected with devices	
					int ckts_fired;				// Circuits that have been fired
					
					// Delayed firing support
					CLOCK_STRUCT c;				// Timer struct [0654091ae5]
					int delay_running;			// TRUE when delay running
					unsigned long delay_time;	// Current delay time
					unsigned long delay_rec;	// When delay received (debug data)
					int fire_channel;			// Channel to fire on delay
					int firing_time;			// MS firing time
					int actual_time;			// Actual firing time
					int	test_mode;				// 1 => In test mode
					int backoff;				// Backoff value
					
					// Event programming
					int in_event;				// TRUE when events running
					int event_count;			// # Events 
					int event_next;				// Next event to fire
					int control;				// Source of event data
					EVENT_LIST	events[MAX_FIRE_CHANNELS];
				} CHILD_DATA;
				
typedef struct {
					int node_count;		// # Nodes
					CHILD_DATA *data;	// Array of child data nodes
				} NODE_DATA;

NODE_DATA *child_start( char *port,int node_count );		// Start running nodes
void child_stop( NODE_DATA *pd );							// Shutdown nodes

// Input event

#endif

Changes to Node/node/child_cmd.c.

8
9
10
11
12
13
14















15
16
17
18
19
20
21
22
23

24
25
26
27
28
29

30
31
32
33
34
35

36




37






38






39


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59


60
61
62
63
64
65
66
67
68
69
70


































71
72
73
74
75
76
77
*
*  Description:         This is the code that handles input packets from
*						the network & outputs stuff
*
*  Revision History:	 6-Apr-2009	Initial version
*						15-Aug-2009 Add clock handling
*						14-Sep-2009 Convert to 32 bit delays















*/
//************************************************************************

#include <stdio.h>
#include <string.h>
#include "network.h"
#include "child.h"
#include "child_cmd.h"
#include "debug.h"


#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif


static int arm_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int who_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int status_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int fire_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int sync_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int delay_handler( CHILD_DATA *data,PACKET *packet,void *h );






static void fire_circuit( int channel, CHILD_DATA *data );













static int put_network_child( PACKET *pkt,void *h );



#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

//*************************************************************************
/*
*  int child_manage_node( CHILD_DATA *data,void *h ) - Manage node operations
*
*	INPUT:	data	- Current node information
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*/
//************************************************************************

int child_manage_node( CHILD_DATA *data,void *h )
{
	int rtnval = 0;


	
	// (1) Is there a delay runnig, if so see if it's time yet
	
	if( data->delay_running )
	{
		if( CLOCK_Done( &(data->c),data->delay_time) )
		{
			// (2) We have a firing time, so do it....
			
			fire_circuit( data->fire_channel,data );
			data->delay_running = 0;


































		}
	}
	
	return( rtnval );
}

//*************************************************************************







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>









>






>

<
<



>

>
>
>
>
|
>
>
>
>
>
>

>
>
>
>
>
>
|
>
>




















>
>









|

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
*
*  Description:         This is the code that handles input packets from
*						the network & outputs stuff
*
*  Revision History:	 6-Apr-2009	Initial version
*						15-Aug-2009 Add clock handling
*						14-Sep-2009 Convert to 32 bit delays
*						12-May-2010 [d26a3ab0e9] Change to new network style
*						15-May-2010 [4faba11f43] Change W command to set address
*						22-May-2010 Add logging to system [d98ef0303d]
*						22-May-2010 Correct typo in Delay command
*						24-May-2010 Change arm_handler() to allow BCAST address
*						16-Jan-2011 [e4208b8f56] Add ACK to all commands but STATUS
*						16-Jan-2011 Reformat STATUS response to match others
*						24-Jan-2011 [4fd91ac4c2] Add Channel information command [4fd91ac4c2]
*						28-Feb-2011 Add code in fire_circuit() to simulate firing delay
*						10-May-2011	[241aaaeb3d ] Update simulator to match hardware
*						16-Jul-2011 [9e81c1a523] Add adaptive firing action & read out of
*									adaptive results
*						14-Nov-2011 [683a021143] Add pgm event queue
*						 9-Feb-2013 Fix commands that return packets to NOT
*									use send ACK
*/
//************************************************************************

#include <stdio.h>
#include <string.h>
#include "network.h"
#include "child.h"
#include "child_cmd.h"
#include "debug.h"
#include "firenetlog.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

// Firing commands
static int arm_handler( CHILD_DATA *data,PACKET *packet,void *h );


static int fire_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int sync_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int delay_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int pgm_handler(  CHILD_DATA *data,PACKET *packet,void *h );

// Information commands
static int status_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int version_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int channel_handler( CHILD_DATA *data,PACKET *packet,void *h );

// Setup commands
static int who_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int time_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int test_mode_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int backoff_handler( CHILD_DATA *data,PACKET *packet,void *h );
static int reset_handler( CHILD_DATA *data,PACKET *packet,void *h );

// Readout commands
static int getdata_handler( CHILD_DATA *data,PACKET *packet,void *h );

// Support routines
static void send_ack( CHILD_DATA *data,PACKET *rpkt,void *h);
static void fire_circuit( int channel, CHILD_DATA *data,int df );
static int put_network_child( int bcast,PACKET *pkt,void *h );
static int store_in_queue( int ch, long ft,CHILD_DATA *data );
static void next_event(CHILD_DATA *data);

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

//*************************************************************************
/*
*  int child_manage_node( CHILD_DATA *data,void *h ) - Manage node operations
*
*	INPUT:	data	- Current node information
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*/
//************************************************************************

int child_manage_node( CHILD_DATA *data,void *h )
{
	int rtnval = 0;
	PACKET pk;
	int ch,i;
	
	// (1) Is there a delay runnig, if so see if it's time yet
	
	if( data->delay_running )
	{
		if( CLOCK_Done( &(data->c),data->delay_time) )
		{
			// (2) We have a firing time, so do it....
			
			fire_circuit( data->fire_channel,data,1 );
			data->delay_running = 0;
			
			// (3) If we are running a PGM start the next delay action
			
			if( data->in_event )
			{
				// Send response message with this firing data
				// then advance to next event
				
				pk.to = data->control;
				pk.from = 0;
				
				pk.len = 3;
				pk.data[0] = RESP_CMD;
				pk.data[1] = PGM_CMD;
				ch = data->fire_channel;
				
				// Convert from channel bit psn to #
				for( i=0; i<6; i++ )
				{
					if( ch & 0x1 )
						break;
					ch = ch >> 1;
				}
				//---------------------------------
				
				pk.data[2] = i + 0x30;
				pk.data[3] = '\0';
				rtnval = put_network_child(0, &pk,h );	// BCAST SEND
				
				// Move to next event
				
				next_event( data );
			}
				
		}
	}
	
	return( rtnval );
}

//*************************************************************************
85
86
87
88
89
90
91

92
93
94
95
96
97
98
99


100
101

102
103

104
105
106
107

108
109













110
111
112









113


114
115
116

117
118
119









120

121
122




123
124





125
126
127
128
129
130
131
132
133
134
135





136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
*	OUTPUT:	0	Unless error and then <> 0 returned
*/
//************************************************************************

int child_packet_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;

	
	// (1) All packets at this point are data packets (type DATA)
	// If we have any switch on the first character in the data

	//printf("\nCHILD [%s] Packet [%c]\n",data->name,packet->data[0]);
	
	if( packet->len > 0 )
	{


		switch( packet->data[0] )
		{

			case 'A':		// Handle ARMED command
							rtnval = arm_handler( data,packet,h );

							break;
							
			case 'W':		// Handle WHO packet
							rtnval = who_handler( data,packet,h );

							break;
							













			case 'S':		// Handle STATUS packet
							rtnval = status_handler(data,packet,h);
							break;









							


			case 'F':		rtnval = fire_handler( data,packet,h );
							break;
							

			case 'D':		rtnval = delay_handler(data,packet,h );
							break;
													









			case 'Z':		rtnval = sync_handler(data,packet,h );

							break;





			default:		// Ignore and drop packet
							break;





		}
	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Command Handler API --
#endif






//*************************************************************************
/*
*  int arm_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*			Handle arm packet, but only if to this address, ignore if
*			broadcase
*/
//************************************************************************

static int arm_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
	
	// (1) Check to make sure we are not a broadcast packet
	
	if( packet->to != BCAST_ADDRESS )
	{
		// Now look at second byte to see if it's arm or disarm
		
		switch( packet->data[1] )
		{
			case 'A':	data->armed = 1;
						break;
						
			case 'D':	data->armed = 0;
						break;
						
			default:	break;
		}
	}
	
	return( rtnval );
}

//*************************************************************************
/*
*  int who_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*		Return WHO packet to FROM field
*		WHO data is <NODE_NAME>
*/
//************************************************************************

static int who_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval;
	
	// (1) Build our return packet using the input one
	//	TO	- Previous from field
	//	FROM - Out PORT
	//	DATA = NODE NAME

	packet->to = packet->from;
	packet->from = 0;			// My address
	sprintf((char *)packet->data,"WR%s",data->name);
	packet->len = strlen( (char *)packet->data ) + 1;
	
	// (2) Send this packet out
	
	rtnval = put_network_child( packet,h );
	return( rtnval );
}

//*************************************************************************
/*
*  int status_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*		Return WTATUS packet to FROM field
*		WHO data is ARMED/DISARMED and connected & fired values
*		AR[D/A][Connected][Fired]
*/
//************************************************************************

static int status_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval;
	
	// (1) Build our return packet using the input one
	//	TO	- Previous from field
	//	FROM - Out PORT
	//	DATA = NODE NAME

	packet->to = packet->from;
	packet->from = 0;			// My address
	
	// Build packet data, 5 bytes
	// SR	- Status return
	// Disarmed/armed (D/A)
	// Connected ckts byte
	// Fired ckts byte
	
	packet->len = 5;
	packet->data[0] = 'S';
	packet->data[1] = 'R';
	if( data->armed )
		packet->data[2] = 'A';
	else
		packet->data[2] = 'D';
	packet->data[3] = (unsigned char) (0xff & data->ckts_connected);
	packet->data[4] = (unsigned char) (0xff & data->ckts_fired);
	
	// (2) Send this packet out
	
	rtnval = put_network_child( packet,h );
	return( rtnval );
}

//*************************************************************************
/*
*  iint fire_handler( CHILD_DATA *data,PACKET *packet,void *h )
*







>








>
>
|
|
>
|
|
>
|
|
|
|
>
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
>
>
>
>
>
>
>
>
>
|
>
>
|
|
|
>
|
|
|
>
>
>
>
>
>
>
>
>
|
>
|
|
>
>
>
>
|
|
>
>
>
>
>











>
>
>
>
>









<
<






|
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269


270
271
272
273
274
275
276




277
278
279
280
281
282
283
284
285
286
287
288
289




















































































290
291
292
293
294
295
296
*	OUTPUT:	0	Unless error and then <> 0 returned
*/
//************************************************************************

int child_packet_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
	int chunk_loop = 1;
	
	// (1) All packets at this point are data packets (type DATA)
	// If we have any switch on the first character in the data

	//printf("\nCHILD [%s] Packet [%c]\n",data->name,packet->data[0]);
	
	if( packet->len > 0 )
	{
		while( chunk_loop )
		{
			switch( packet->data[packet->chunk_ptr] )
			{
				// Firing commands
				case ARM_CMD:		// Handle ARMED command
								rtnval = arm_handler( data,packet,h );
								send_ack(data,packet,h);
								break;

				case FIRE_CMD:		// Fire command
								rtnval = fire_handler( data,packet,h );
								send_ack(data,packet,h);
								break;
								
				case DLY_CMD:		// Delay command	
								rtnval = delay_handler(data,packet,h );
								send_ack(data,packet,h);
								break;
								
				case PGM_CMD:	rtnval = pgm_handler(data, packet, h);
								break;
														
				case SYNC_CMD:		// Sync command
								rtnval = sync_handler(data,packet,h );
								break;
								
				// Information commands
				case STATUS_CMD:		// Handle STATUS packet
								rtnval = status_handler(data,packet,h);
								break;
								
								
				case VER_CMD:		// Version command
								rtnval = version_handler(data,packet,h);
								break;
								
				case CHI_CMD:		// Channel information command
								rtnval = channel_handler(data,packet,h);
								break;
								
				// Setup commands
				case SET_AD_CMD:		// Handle WHO packet
								rtnval = who_handler( data,packet,h );
								break;
								
				case SET_FT_CMD:		// Handle Firing TIME packet
								rtnval = time_handler(data,packet,h);
								break;
								
				case SET_TM_CMD:		// Handle Test Mode command
								rtnval = test_mode_handler(data,packet,h);
								break;
								
				case SET_BKOFF_CMD:		// Set backoff value
								rtnval = backoff_handler(data,packet,h);
								break;
								
				case RESET_CMD:			// Handle RESET cmd
								rtnval = reset_handler(data,packet,h);
									// No response....
								break;
								
				case GET_DATA:			// Heandle read out command
								rtnval = getdata_handler(data,packet,h);
								break;

				default:		// Ignore and drop packet
								break;
			}
		
			// Get next chunk, and handle
			
			chunk_loop = get_chunk( packet );
		}
	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Command Handler API --
#endif

#if 0
	#pragma mark -
	#pragma mark -- OPERATION COMMANDS --
#endif

//*************************************************************************
/*
*  int arm_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned


*/
//************************************************************************

static int arm_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
		




	// Look at second byte to see if it's arm or disarm
	
	switch( packet->data[packet->chunk_ptr+1] )
	{
		case 'A':	data->armed = 1;
					break;
					
		case 'D':	data->armed = 0;
					break;
					
		default:	break;
	}
	




















































































	return( rtnval );
}

//*************************************************************************
/*
*  iint fire_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
273
274
275
276
277
278
279
280
281
282
283
284
285
286


















































































































































































































































































































287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305



































































































































































































































































































































































































































306
307

308

309










310
311
312
313
314





315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338



339
340

341

342
343
344
345





346

347


348
349
350
351
352
353
354
355

356
357
358
359




360
361
362
363
364
365
366

367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383


384
385
386
387
388
389
390
391
392


393
394

395
396

397
398
399
400


401
402

403
404
405
406
407
408
409
410
411
412
413
414
415
416

417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438

439
440
441

442

443
444
445
446
447
448
449
450
451
452
453
454
455
456
{
	int rtnval = 0;
	int channel = 1;
	int shft;
	
	// (1) Pull byte[1] of data to get he bit #
	
	shft = packet->data[1];
	channel = channel << shft;
	
	// (2) Fire the channel
	
	fire_circuit( channel, data );
	


















































































































































































































































































































	return( rtnval );
}

//*************************************************************************
/*
*  int sync_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*			Data[0]	= Z
*	Just sync the internal clock
*/
//************************************************************************

static int sync_handler( CHILD_DATA *data,PACKET *packet,void *h )
{



































































































































































































































































































































































































































	int rtnval = 0;
		

	// (1) Just sync the internal clock to system

	










	CLOCK_Start( &(data->c) );
	
	return( rtnval );
}






//*************************************************************************
/*
*  int delay_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*			Data[0]	= D
*			Data[1] = Channel
*			Data[2] = MSB Delay
*			Data[3] = MSB - 1 Delay
*			Data[4] = MSB - 2 Delay
*			Data[5] = LSB Delay
*	Just sync the internal clock
*
*	14-Sep-2009 Convert to 32 bit delays
*/
//************************************************************************

static int delay_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;



	short shft;
	unsigned long *val;

		

	// (1) If already in delay then exit from here
	
	if( data->delay_running == 0 )
	{





		// (2) Not running so pull out the values and 

		// start a new delay


		
		shft = packet->data[1];
		data->fire_channel = 1;
		data->fire_channel = data->fire_channel << shft;
		
		val = (unsigned long *)&(packet->data[2]);
		data->delay_time = (unsigned long)ntohl(*val);
		data->delay_running = 1;

	}
	
	return( rtnval );
}





//*************************************************************************
/*
*  void fire_circuit( int channel, CHILD_DATA *data )
*
*	INPUT:	channel	- Channel bit to be fired
*			data	- Current node information

*
*	OUTPUT:	NONE
*			Fire selected ckt if possible
*/
//************************************************************************

static void fire_circuit( int channel, CHILD_DATA *data )
{
	// (1) Are we armed ?
	
	if( data->armed )
	{
		if( data->ckts_connected & channel )
		{
			// (2) Has this one be fired
			
			if( (data->ckts_fired & channel) == 0 )


			{
				// (3) Ok we are going tio fire it
				
				//pthread_mutex_lock( data->prt );
				printf("\n--Node [%s] Channel [0x%01X] FIRING\n",data->name,channel);
				//pthread_mutex_unlock( data->prt );
				
				data->ckts_connected &= ~channel;
				data->ckts_fired |= channel;


			}
			else

			{
				// This channel already fired

				//pthread_mutex_lock( data->prt );
				printf("\n** Node [%s] Channel [0x%01X] FIRED\n",data->name,channel);
				//pthread_mutex_unlock( data->prt );
			}


		}
		else

		{
			// Nothing connected
			//pthread_mutex_lock( data->prt );
			printf("\n**Node [%s] Channel [0x%01X] NO CIRCUIT\n",data->name,channel);
			//pthread_mutex_unlock( data->prt );
		}
	}
	else
	{
		// Not armed
		//pthread_mutex_lock( data->prt );
		printf("\n**Node [%s] Channel [0x%01X] NOT ARMED\n",data->name,channel);
		//pthread_mutex_unlock( data->prt );
	}

}

#if 0
	#pragma mark -
	#pragma mark -- Child Debug --
#endif

//*************************************************************************
/*
*  int put_network_child( PACKET *pkt,void *h ) - Send a packet (from child)
*
*	INPUT:	pkt	- Packet information
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*			<> 0 problem
*/
//************************************************************************

static int put_network_child( PACKET *pkt,void *h )
{
	int rtnval;


#ifdef MON_CHILD_DATA
				printf("\nChild Send TYPE: %d FROM: %02X TO: %02X LEN: %d Data:",

								pkt->type,

								my_addr_mac(h),
								pkt->to,
								pkt->len);
				int i;
				for( i=0; i<pkt->len; i++ )
					printf("%02X ",0xff & pkt->data[i]);
				printf("\n");
#endif

	rtnval = put_network( pkt,h );
	
	return(rtnval);
}








|




|

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



















>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


>
|
>

>
>
>
>
>
>
>
>
>
>
|




>
>
>
>
>


|






<
<
<
<
<
<
<
<
<



|

|
>
>
>
|
<
>
|
>
|

|
|
>
>
>
>
>
|
>
|
>
>
|
|
|
<
|
|
|
|
>
|
|
<
|
>
>
>
>



|

|
|
>


|



|

<
|
|
|
<
<
|
|
<
>
>
|
<
|
<
<
<
|
<
|
>
>
|
|
>
|
<
>
|
<
|
|
>
>
|
<
>
|
<
|
<
|
|
|
<
<
|
<
<
<
|
>



















|


>


<
>
|
>


|
|
<
<
<


|




308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100









1101
1102
1103
1104
1105
1106
1107
1108
1109
1110

1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130

1131
1132
1133
1134
1135
1136
1137

1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158

1159
1160
1161


1162
1163

1164
1165
1166

1167



1168

1169
1170
1171
1172
1173
1174
1175

1176
1177

1178
1179
1180
1181
1182

1183
1184

1185

1186
1187
1188


1189



1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216

1217
1218
1219
1220
1221
1222
1223



1224
1225
1226
1227
1228
1229
1230
{
	int rtnval = 0;
	int channel = 1;
	int shft;
	
	// (1) Pull byte[1] of data to get he bit #
	
	shft = 0xf & packet->data[packet->chunk_ptr+1];		// Get bottom nibble = channel #
	channel = channel << shft;
	
	// (2) Fire the channel
	
	fire_circuit( channel, data,0 );
	
	return( rtnval );
}

//*************************************************************************
/*
*  void fire_circuit( int channel, CHILD_DATA *data )
*
*	INPUT:	channel	- Channel bit to be fired
*			data	- Current node information
*			df		- Delay flag 1 if fired by delay 0 if not
*
*	OUTPUT:	NONE
*			Fire selected ckt if possible
*
*	28-Feb-2011 Add code to simulate firing delay
*/
//************************************************************************

static void fire_circuit( int channel, CHILD_DATA *data,int df )
{
	// (1) Are we armed ?
	
	if( data->armed )
	{
		if( data->ckts_connected & channel )
		{
			// (2) Has this one be fired
			
			if( (data->ckts_fired & channel) == 0 )
			{
				// (3) Ok we are going to fire it
				
				if( df )
				{
					log_data("\n--Node [%d] Channel [0x%01X] DELAY REC @ [%ld] FIRING @ [%ld]\n",
										data->number,
										channel,
										data->delay_rec,
										CLOCK_Elapsed( &(data->c)) );
				}
				else
				{
					log_data("\n--Node [%d] Channel [0x%01X] FIRING\n",data->number,channel);
					usleep( 100000 );		// Sleep for a firing time
				}
				
				data->ckts_connected &= ~channel;
				data->ckts_fired |= channel;
				data->actual_time = data->c.tv_usec % 1000;		// Fake a time
			}
			else
			{
				// This channel already fired
				log_data("\n** Node [%d] Channel [0x%01X] FIRED\n",data->number,channel);
			}
		}
		else
		{
			// Nothing connected
			log_data("\n**Node [%d] Channel [0x%01X] NO CIRCUIT\n",data->number,channel);
		}
	}
	else
	{
		// Not armed
		log_data("\n**Node [%d] Channel [0x%01X] NOT ARMED\n",data->number,channel);
	}
}

//*************************************************************************
/*
*  int delay_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*			Data[0]	= D
*			Data[1] = Channel
*			Data[2]	-> end of packet = delay value as a number
*	Just sync the internal clock
*
*	14-Sep-2009 Convert to 32 bit delays
*	22-May-2010 Correct typo in getting Fire channel
*/
//************************************************************************

static int delay_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
	short shft;
	//unsigned long *val;
		
	// (1) If already in delay then exit from here
	
	if( data->delay_running == 0 )
	{
		// (2) Not running so pull out the values and 
		// start a new delay
		
		shft = 0xf & packet->data[packet->chunk_ptr + 1];	// Channel # bottom nibble of first byte
															// Make sure it's the FIRST byte
		data->fire_channel = 1;
		data->fire_channel = data->fire_channel << shft;
		
		// (3) Convert the delay value to a number
		
		data->delay_time = strtoul((const char *)&(packet->data[packet->chunk_ptr+2]),NULL,10);
		data->delay_rec = CLOCK_Elapsed( &(data->c) );
		data->delay_running = 1;
	}
	
	return( rtnval );
}

//*************************************************************************
/*
*  int pgm_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*			Data[0]	= P
*			Data[1] = Channel
*			Data[2]	-> end of packet = delay value as a number
*	Just sync the internal clock
*/
//************************************************************************

static int pgm_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = -1;
	int ch;
	long ft;
	PACKET pk;
	int bcast;
		
	// (1) Get channel values
	
	bcast = packet->to;
	ch = 0xf & packet->data[packet->chunk_ptr + 1];	// Channel # bottom nibble of												first byte
														// Make sure it's the
														// FIRST byte
	ch = 1 << ch;
	
	// (2) Convert the delay value to a number
	
	ft = strtoul((const char *)&(packet->data[packet->chunk_ptr+2]),NULL,10);
	
	// (3) Store in queue and return result
	
	if( store_in_queue( ch,ft,data ) == 0 )
	{
		rtnval = 0;
		data->control = packet->from;		// Save controller address
		pk.to = packet->from;
		pk.from = 0;
		
		pk.len = 2;
		pk.data[0] = RESP_CMD;
		pk.data[1] = PGM_CMD;
		pk.data[2] = '\0';
		rtnval = put_network_child( bcast,&pk,h );
	}
	
	return( rtnval );
}

/***********************************************************************
*
* 	int store_in_queue( int ch, long ft,CHILD_DATA *data )	- Store data in firing queue
*
*	INPUT:  ch		- Firing channel
*			long	- Firing time (ms)
*			data	- Child data structure
*
*	OUTPUT:	0 If inserted, <> 0 if not
*
**********************************************************************/

static int store_in_queue( int ch, long ft,CHILD_DATA *data )
{
	int rtnval = -1;	// Set for failure
	int i;
	int qpsn;
	
	// (1) Is there room ?
	
	if( data->event_count < MAX_FIRE_CHANNELS )
	{
		// (2) Event count 0  special case just inserted it
		
		if( data->event_count == 0 )
		{
			data->events[data->event_count].ch = ch;
			data->events[data->event_count].ft = ft;
			data->event_count++;
			rtnval = 0;				// SUCCESS
		}
		else
		{
			// (3) Determine where it fits in queue
			
			for( i=0; i<data->event_count; i++ )
			{
				if( ft <= data->events[i].ft )
					break;
			}
			
			qpsn = i;
			
			// (4) Two cases
			//	(a) Beyond end of queue, just stick it in
			//	(b) Inside queue, move up queue and stick it in
			
			if( qpsn >= data->event_count )
			{
				// Case (a) stick in new MT slot at end
				
				data->events[data->event_count].ch = ch;
				data->events[data->event_count].ft = ft;
				data->event_count++;
				rtnval = 0;				// SUCCESS
			}
			else
			{
				// Case (b) Move all the items above qpsn up one into MT slot
				// and insert new at qpsn
				
				for( i=data->event_count-1; i>=qpsn; i--)
				{
					data->events[i+1].ch = data->events[i].ch;
					data->events[i+1].ft = data->events[i].ft;
				}
				data->events[qpsn].ch = ch;
				data->events[qpsn].ft = ft;
				
				data->event_count++;
				rtnval = 0;
				
			}
		}
	}
	
	return rtnval;
		
}


//*************************************************************************
/*
*  int status_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*		Return STATUS packet to FROM field
*		WHO data is ARMED/DISARMED and connected & fired values
*		AR[D/A][Connected][Fired]
*	12-May-2011 Fix output status value (or with 0x40)
*/
//************************************************************************

static int status_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval;
	PACKET pk;
	int bcast;
	
	// (1) Build our return packet using the input one
	//	TO	- Previous from field
	//	FROM - Out PORT
	//	DATA = NODE NAME

	bcast = packet->to;
	pk.to = packet->from;
	pk.from = 0;			// My address
	
	// Build packet data, 5 bytes
	// RS	- Status return
	// Disarmed/armed (D/A)
	// Connected ckts byte
	// Fired ckts byte
	
	pk.len = 5;
	pk.data[0] = RESP_CMD;
	pk.data[1] = STATUS_CMD;
	if( data->armed )
		pk.data[2] = 'A';
	else
		pk.data[2] = 'D';
		
	// Convert last two values to ASCII characters
	// 0x40 -> converts 0-3F -> 0x40 - 0x7F
	pk.data[3] = 0X40 | (unsigned char) (0x3f & data->ckts_fired);
	pk.data[4] = 0x40 | (unsigned char) (0x3f & data->ckts_connected);
	pk.data[5] = '\0';
	
	// (2) Send this packet out
	
	rtnval = put_network_child(bcast, &pk,h );
	return( rtnval );
}

//*************************************************************************
/*
*  int sync_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*			Data[0]	= Z
*	Just sync the internal clock
*/
//************************************************************************

static int sync_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
	PACKET pk;
	int bcast;
		
	// (1) Just sync the internal clock to system & set up return packet
	
	CLOCK_Start( &(data->c) );
	bcast = packet->to;
	pk.to = packet->from;
	pk.from = 0;
	
	// (2) Check if there is a P in the data
	
	if( packet->len > 1 && packet->data[1] == PGM_CMD )
	{
		// Start the event system running & set up different return
		
		data->in_event = 1;
		next_event(data);				// Start next event
		sprintf(pk.data,"RZP");
	}
	else
	{
		// STD run
	
		sprintf(pk.data,"RZ");	
	}
	pk.len = strlen(pk.data);
	rtnval = put_network_child(bcast, &pk,h );
	
	return( rtnval );
}

/***********************************************************************
*
*  void next_event(CHILD_DATA *data)	- Set up for next event
*
*	INPUT:  NONE	- Use state
*
*	OUTPUT:	Delay firing started and set for next event or terminate
*			event handling
*
**********************************************************************/

static void next_event(CHILD_DATA *data)
{
	// Set up for next event 
	if( data->event_next < data->event_count )
	{
		data->delay_running = 1;
		data->delay_time = data->events[data->event_next].ft;
		data->fire_channel = data->events[data->event_next].ch;
		data->event_next++;
	}
	else
	{
		data->in_event = 0;
	}
}


#if 0
	#pragma mark -
	#pragma mark -- DISPLAY COMMANDS --
#endif

//*************************************************************************
/*
*  int version_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*		Return VERSION packet RV<Date> of build
*/
//************************************************************************

static int version_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval;
	PACKET pk;
	int i;
	int bcast;
	
	// (1) Build our return packet using the input one
	//	TO	- Previous from field
	//	FROM - Out PORT
	//	DATA = NODE NAME

	bcast = packet->to;
	pk.to = packet->from;
	pk.from = 0;			// My address
	
	// Build packet data, 5 bytes
	// RV	- Version return (RVX in test mode)
	// __DATE__ __TIME__ string
	// Connected ckts byte
	// Fired ckts byte
	
	pk.data[0] = '\0';
	sprintf(pk.data,"%c%c",RESP_CMD,VER_CMD);
	if( data->test_mode == 1 )
		strcat(pk.data,"X");			// Indicate test mode
		
	strcat(pk.data,__DATE__);
	strcat(pk.data," ");
	strcat(pk.data,__TIME__);
	pk.len = strlen(pk.data);
	
	// NOTE: Remove ':' in TIME and put in - as ; marks
	// END of DATA
	
	for( i=0; i<pk.len; i++ )
	{
		switch( pk.data[i] )
		{
			case ':':	pk.data[i] = '-';	// Remove :'s
						break;
						
			default:	break;
		}
	}
	
	// (2) Send this packet out
	
	rtnval = put_network_child(bcast, &pk,h );
	return( rtnval );
}

//*************************************************************************
/*
*  int channel_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	NOTE: Channel # is 0 based
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*		Return RC<Fired 0,1><A/D of channel>
*/
//************************************************************************

static int channel_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
	PACKET pk;
	int channel;
	int ad;
	int val;
	char *ptr;
	int bcast;
	
	// (1) Get the channel # from the input message
	// & build mask
	
	bcast = packet->to;
	channel = packet->data[1] - '0';
	if( channel >= 0 && channel < MAX_FIRE_CHANNELS )
	{
		channel = 1 << channel;

		// (2) Build our return packet using the input one
		//	TO	- Previous from field
		//	FROM - Out PORT
		//	DATA = NODE NAME

		pk.to = packet->from;
		pk.from = 0;			// My address
		
		// (3) Build packet data, RC<F><A/D>	up to 7 Bytes
		
		pk.data[0] = 'R';
		pk.data[1] = 'C';
		
		// Is this fired ?
		
		if( channel & data->ckts_fired )
			pk.data[2] = '1';
		else
			pk.data[2] = '0';
			
		// (3) Fake an A/D reading
		
		val = rand();
		if( channel & data->ckts_fired )
			ad = (0x3FF & val);
		else
			ad = (0x7F & val);
	

		
		ptr = (char *)&(pk.data[3]);
		sprintf(ptr,"%04d",ad);
	}
	else 
	{
		// BAD channel 
		pk.data[0] = 'R';
		pk.data[1] = 'C';
		pk.data[2] = '0';
		pk.data[3] = '0';
		pk.data[4] = '\0';	// Send back a failure packet
	}
	
	// (4) Get length and send it out
	pk.len = strlen(pk.data);
	rtnval = put_network_child(bcast, &pk,h );
	return( rtnval );
}

//*************************************************************************
/*
*  int who_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*
*	15-May-2010 [4faba11f43] Change to set node address
*/
//************************************************************************

static int who_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = -1;	// Set for failure
	char *ptr;
	int addr;
	PACKET pk;
	
	// (1) Only do this command if it is addressed to US
	
	if( packet->to == my_addr_mac(h) )
	{
		// (2) Extract address value from chunk
		
		ptr = &packet->data[packet->chunk_ptr+1];
		addr = strtol(ptr,NULL,10);				// Interpert as BASE 10
		if( addr >= MIN_ADDRESS &&
			addr < MAX_ADDRESS )
		{
			// Ok, set the address
			
			log_data("NODE [%d] Address changed to [%d]\n",data->number,addr );
			setup_address( addr,h );
		}
		
		// Return current address
		
		pk.to = packet->from;
		pk.from = 0;
		sprintf(pk.data,"RW%02d",packet->from);	
		pk.len = strlen(pk.data);
		rtnval = put_network_child(1, &pk,h );
	}

	return( rtnval );
}

//*************************************************************************
/*
*  int time_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*
*	 9-Jan-11 Add command to set firing time
*/
//************************************************************************

static int time_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = -1;	// Set for failure
	char *ptr;
	int ft;
	PACKET pk;
	int bcast;
	
	// (1) Extract firing time value from chunk
	
	bcast = packet->to;
	ptr = &packet->data[packet->chunk_ptr+1];
	if( strlen(ptr) > 0 )
	{
		// Set the firing time
		
		ft = strtol(ptr,NULL,10);				// Interpert as BASE 10
		
		log_data("NODE [%d] Firing time changed to [%d]\n",data->number,ft );
		data->firing_time = ft;
	}
	
	// Return current value	

	pk.to = packet->from;
	pk.from = 0;
	sprintf(pk.data,"RT%04d",data->firing_time);	
	pk.len = strlen(pk.data);
	rtnval = put_network_child(bcast, &pk,h );

	return( rtnval );
}

//*************************************************************************
/*
*  int backoff_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*/
//************************************************************************

static int backoff_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = -1;	// Set for failure
	char *ptr;
	int ft;
	PACKET pk;
	int bcast;
	
	// (2) Extract backoff time value from chunk
	
	bcast = packet->to;
	ptr = &packet->data[packet->chunk_ptr+1];
	
	if( strlen(ptr) > 0 )
	{
		// Set the value
		
		data->backoff = strtol(ptr,NULL,10);				// Interpert as BASE 10
	
		log_data("NODE [%d] Backoff time changed to [%d]\n",data->number,data->backoff );
		data->firing_time = ft;
	}
		
	// Return current value	

	pk.to = packet->from;
	pk.from = 0;
	sprintf(pk.data,"RB%04d",data->backoff);	
	pk.len = strlen(pk.data);
	rtnval = put_network_child(bcast, &pk,h );

	return( rtnval );
}

//*************************************************************************
/*
*  int test_mode_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned
*/
//************************************************************************

static int test_mode_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = -1;	// Set for failure
	char *ptr;
	int ft;
	PACKET pk;
	int bcast;
	
	// (2) Extract Mode value from chunk
	
	bcast = packet->to;
	ptr = &packet->data[packet->chunk_ptr+1];
	
	if( strlen(ptr) > 0 )
	{
		// Set the value
		
		data->test_mode = strtol(ptr,NULL,10);				// Interpert as BASE 10
		data->test_mode &= 0x1;								// Convert to 0,1
		
		log_data("NODE [%d] Test mode time changed to [%d]\n",data->number,data->test_mode );
		data->firing_time = ft;
	}
		
	// Return current value	

	pk.to = packet->from;
	pk.from = 0;
	sprintf(pk.data,"RM%01d",data->test_mode);	
	pk.len = strlen(pk.data);
	rtnval = put_network_child(bcast, &pk,h );

	return( rtnval );
}


//*************************************************************************
/*
*  int reset_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	NONE - this just resets node
*/
//************************************************************************

static int reset_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = 0;
		
	log_data("NODE [%d] RESET\n",data->number);
	
	// INIT all the data in the node
	
	data->armed = 0;
	data->ckts_connected = 0x3F;
	data->ckts_fired = 0;
	data->delay_running  = 0;
	data->firing_time = DEF_FIRING_TIME;
	data->test_mode = 1;
	data->backoff = DEF_BACKOFF;
	data->in_event = 0;
	data->event_count = 0;
	data->event_next = 0;

	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- READOUT COMMANDS --
#endif

//*************************************************************************
/*
*  int getdata_handler( CHILD_DATA *data,PACKET *packet,void *h )
*
*	INPUT:	data	- Current node information
*			packet	- Current packet
*			h		- Network handle
*
*	OUTPUT:	0	Unless error and then <> 0 returned









*/
//************************************************************************

static int getdata_handler( CHILD_DATA *data,PACKET *packet,void *h )
{
	int rtnval = -1;	// Set for failure
	char *ptr;
	int psn;
	PACKET pk;
	int i;

	int bcast;
	
	// Ignore input data (for now)
	// ...
	
	// Set to return firing data from this run

	bcast = packet->to;
	pk.to = packet->from;
	pk.from = 0;
	pk.data[0] = 'R';
	pk.data[1] = 'R';
	
	// Fill in with the firing data
	
	psn = 2;
	for( i=0; i<MAX_FIRE_CHANNELS; i++ )
	{
		ptr = (char *)&(pk.data[psn]);
		psn += sprintf(ptr,"%d ",data->actual_time);

	}
	pk.len = strlen(pk.data);
	rtnval = put_network_child(bcast, &pk,h );
	
	return rtnval;
}



#if 0
	#pragma mark -
	#pragma mark -- Child Ack --
#endif

//*************************************************************************
/*
*  void send_ack( CHILD_DATA *data, char cmd, void *h) - Send ACK
*
*	INPUT:	data	- Child information
*			rpkt	- Received packet
*			h		- Valid MAC handle
*
*	OUTPUT:	NONE
*			Send off ACK packet
*/
//************************************************************************

static void send_ack( CHILD_DATA *data,PACKET *rpkt,void *h)
{

	PACKET pk;
	int timewait;
	


	// (1) Build our return packet using the input one
	//	TO	- Previous from field

	//	FROM - Out PORT
	//	DATA = NODE NAME


	if( rpkt->to == BCAST_ADDRESS)



		pk.to = PARENT_ADDRESS;			// Return to Parent

	else
		pk.to = rpkt->from;				// Return to sender
	pk.from = 0;			// My address
	
	// Build packet data, two bytes
	// A for ACK then CMD byte
	

	pk.len = 2;
	pk.data[0] = RESP_CMD;

	pk.data[1] = rpkt->data[0];
	
	// If sent to BCAST then delay before sending
	// to account for other traffic
	

	if( rpkt->to == BCAST_ADDRESS )
	{

		timewait = 1000 * data->backoff * my_addr_mac(h);

		usleep( timewait );
	}
	


	// Send it



	
	put_network_child(1, &pk,h );
}

#if 0
	#pragma mark -
	#pragma mark -- Child Debug --
#endif

//*************************************************************************
/*
*  int put_network_child( PACKET *pkt,void *h ) - Send a packet (from child)
*
*	INPUT:	pkt	- Packet information
*			h	- Valid MAC handle
*
*	OUTPUT:	0	- Send OK
*			<> 0 problem
*/
//************************************************************************

static int put_network_child( int bcast,PACKET *pkt,void *h )
{
	int rtnval;
	char out[PHY_DATA_SIZE];

#ifdef MON_CHILD_DATA

				memset(out,'\0',PHY_DATA_SIZE);
				strncpy(out,pkt->data,pkt->len);
				log_data("\nChild Send FROM: %02d TO: %02d LEN: %d Data: [%s]\n",
								my_addr_mac(h),
								pkt->to,
								pkt->len,
								out);



#endif

	rtnval = put_network( bcast,pkt,h );
	
	return(rtnval);
}

Changes to Node/parent/logmap.c.

1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
18
19
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         logmap.h	- Logical (name) -> physical mapping 
*
*  Description:         This code is used to manage the logical to physical
*						mapping of the network
*
*  Revision History:	8-Aug-2009	Initial version

*/
//************************************************************************

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "logmap.h"











|
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         logmap.h	- Logical (name) -> physical mapping 
*
*  Description:         This code is used to manage the logical to physical
*						mapping of the network
*
*  Revision History:	 8-Aug-2009	Initial version
*                       22-Mar-2011 Update with Analyze fixes
*/
//************************************************************************

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "logmap.h"
241
242
243
244
245
246
247


248

249


250


251
252
253
254
255
256
257
				e1 = e1->next;
			}
			
			// Now remove it, either we have a previous one or we don't
			// If we do then link around removed node, if not just replace first
			
			if( prev != NULL )


				prev->next = e1->next;

			else


				map->base = e1->next;


				
			// (5) Delete the element and we are done
			
			free( e );
			rtnval = 0;
		}
	}







>
>
|
>

>
>
|
>
>







242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
				e1 = e1->next;
			}
			
			// Now remove it, either we have a previous one or we don't
			// If we do then link around removed node, if not just replace first
			
			if( prev != NULL )
            {
                if( e1 != NULL )
                   prev->next = e1->next;
            }
			else
            {
                if( e1 != NULL )
                    map->base = e1->next;
            }
				
				
			// (5) Delete the element and we are done
			
			free( e );
			rtnval = 0;
		}
	}

Changes to Node/parent/parent.c.

9
10
11
12
13
14
15

16
17
18
19
20
21
22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
37
38

39
40
41
42
43
44
45
*  Description:         This is the parent node, it is the master node and
*						source of commands
*
*  Revision History:	30-Jul-2009	Initial version
*						 8-Aug-2009	Add parent/node specific data [48a9689588]
*						12-Aug-2009 Add a timer to parent and all nodes [0654091ae5]
*						26-Aug-2009	Change to LUA version [a9d657d7f5] 

*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#include "network.h"
#include "parent.h"
#include "comqueue.h"
#include "logmap.h"
#include "parent_cmd.h"


//#define DUMP_NETWORK	1	// Uncomment to show network packets

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

#define THREAD_PAUSE	10000		// SWAG 10 ms

#define COM_QUEELS		10			// Estimated com queue elements/node
static void *parent_th( void *ptr );

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif







>














>









>







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
*  Description:         This is the parent node, it is the master node and
*						source of commands
*
*  Revision History:	30-Jul-2009	Initial version
*						 8-Aug-2009	Add parent/node specific data [48a9689588]
*						12-Aug-2009 Add a timer to parent and all nodes [0654091ae5]
*						26-Aug-2009	Change to LUA version [a9d657d7f5] 
*						22-May-2010 Add logging to system [d98ef0303d]
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#include "network.h"
#include "parent.h"
#include "comqueue.h"
#include "logmap.h"
#include "parent_cmd.h"
#include "firenetlog.h"

//#define DUMP_NETWORK	1	// Uncomment to show network packets

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

#define THREAD_PAUSE	10000		// SWAG 10 ms

#define COM_QUEELS		10			// Estimated com queue elements/node
static void *parent_th( void *ptr );

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
	
	pd = (PARENT_DATA *)calloc( 1,sizeof(PARENT_DATA));
	if( pd != NULL )
	{
		pd->port = port;
		pd->node_count = nodes;
		CLOCK_Start( &(pd->c));
		strncpy(pd->name,"PARENT",NODE_NAME_SZ);
	
		// (2) Init the com Queue stuct
		
		val = comqueueInit( nodes * COM_QUEELS);
		if( val == 0 )
		{
			// (3) Start the parent thread







<







68
69
70
71
72
73
74

75
76
77
78
79
80
81
	
	pd = (PARENT_DATA *)calloc( 1,sizeof(PARENT_DATA));
	if( pd != NULL )
	{
		pd->port = port;
		pd->node_count = nodes;
		CLOCK_Start( &(pd->c));

	
		// (2) Init the com Queue stuct
		
		val = comqueueInit( nodes * COM_QUEELS);
		if( val == 0 )
		{
			// (3) Start the parent thread
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
{
	PARENT_DATA *data = (PARENT_DATA *)ptr;
	PACKET packet;
	int val;
	
	// (1) Open the a handle to the network

	data->net = init_network( data->port );
	if( data->net != NULL )
	{
		// (1a) Open the logical network map code
		
		data->map = create_map();
		
		// (2) Main thread loop







|







139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
{
	PARENT_DATA *data = (PARENT_DATA *)ptr;
	PACKET packet;
	int val;
	
	// (1) Open the a handle to the network

	data->net = init_network( PARENT_ADDRESS,data->port );
	if( data->net != NULL )
	{
		// (1a) Open the logical network map code
		
		data->map = create_map();
		
		// (2) Main thread loop
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
				comqueueNetworkSend( &packet );
			}
			
			// (3) Look for FG packet and send that out
			
			if( comqueueNetworkReceive(&packet) )
			{
				val = put_network(&packet,data->net);
				if( val != 0 )
					printf("\n*** PARENT FAIL [%d]\n",val);
			}
			
			usleep( THREAD_PAUSE );		// Pause that refreshes
		}
	}
	else
	{
		printf("\n** PARENT: NETWORK FAILURE **\n");
	}
	
	close_map( data->map );		// Close network map
	close_network( data->net );	// Close network mac/phy
	sleep(2);
	
	return( NULL );
}








|

|







|









168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
				comqueueNetworkSend( &packet );
			}
			
			// (3) Look for FG packet and send that out
			
			if( comqueueNetworkReceive(&packet) )
			{
				val = put_network(1,&packet,data->net);
				if( val != 0 )
					log_data("\n*** PARENT FAIL [%d]\n",val);
			}
			
			usleep( THREAD_PAUSE );		// Pause that refreshes
		}
	}
	else
	{
		log_data("\n** PARENT: NETWORK FAILURE **\n");
	}
	
	close_map( data->map );		// Close network map
	close_network( data->net );	// Close network mac/phy
	sleep(2);
	
	return( NULL );
}

Changes to Node/parent/parent.h.

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "clock.h"

#ifndef PARENT_H
#define PARENT_H	1

typedef struct {
					char *port;					// Port used
					char name[NODE_NAME_SZ];	// Node name
					int node_count;				// # Nodes in system
					void *map;					// Address map
					CLOCK_STRUCT c;				// Timer struct [0654091ae5]
					void *net;					// Network handle
					int stop;					// TRUE on shutdown
					pthread_t pt;				// Thread object
				} PARENT_DATA;

PARENT_DATA *parent_start( char *port,int node_count );		// Start running parent
void parent_run( PARENT_DATA *pd );							// Enter parent code
void parent_stop( PARENT_DATA *pd );						// Shutdown parent

#endif







<













24
25
26
27
28
29
30

31
32
33
34
35
36
37
38
39
40
41
42
43
#include "clock.h"

#ifndef PARENT_H
#define PARENT_H	1

typedef struct {
					char *port;					// Port used

					int node_count;				// # Nodes in system
					void *map;					// Address map
					CLOCK_STRUCT c;				// Timer struct [0654091ae5]
					void *net;					// Network handle
					int stop;					// TRUE on shutdown
					pthread_t pt;				// Thread object
				} PARENT_DATA;

PARENT_DATA *parent_start( char *port,int node_count );		// Start running parent
void parent_run( PARENT_DATA *pd );							// Enter parent code
void parent_stop( PARENT_DATA *pd );						// Shutdown parent

#endif

Changes to Node/parent/support/comqueue.c.

8
9
10
11
12
13
14


15
16
17
18
19
20
21
22
23
24

25
26
27
28
29
30
31
*	There will be two queues
*			fg		---> network
*			network ---> fg
*	with mutexes
*
*
*  Revision History:	23-Aug-2009	Initial version [a9d657d7f5] 


*/
//*****************************************************************************

#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include "comqueue.h"
#include "debug.h"


// ***
// Internal Structure
// ***
#if 0
	#pragma mark -
	#pragma mark -- DATA --







>
>










>







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
*	There will be two queues
*			fg		---> network
*			network ---> fg
*	with mutexes
*
*
*  Revision History:	23-Aug-2009	Initial version [a9d657d7f5] 
*						22-May-2010 Add logging to system [d98ef0303d]
*						22-May-2010 Fix output of logged packets to display correctly
*/
//*****************************************************************************

#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include "comqueue.h"
#include "debug.h"
#include "firenetlog.h"

// ***
// Internal Structure
// ***
#if 0
	#pragma mark -
	#pragma mark -- DATA --
88
89
90
91
92
93
94


95


96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114


115


116
117
118
119
120
121
122
123


124


125
126
127
128
129
130
131
	
	st = (FGCOM *)MEMALLOC( sizeof(FGCOM) );
	if( st != NULL )
	{
		// (3) Add in the locks
		
		val = pthread_mutex_init(&(st->flock),NULL);


		val = pthread_mutex_init(&(st->nlock),NULL);


		
		// (4) Now build the buffers
		
		st->fqsize = qels;
		st->nqsize = qels;
		
		st->fbuffers = (PACKET *)MEMALLOC( sizeof(PACKET) * qels );
		if( st->fbuffers != NULL )
		{
			st->nbuffers = (PACKET *)MEMALLOC( sizeof(PACKET) * qels );
			if( st->nbuffers != NULL )
			{
				st->valid = COMQUEUE_VALID;
				rtnval = 0;				// SUCCESS !!!
			}
			else
			{
				// FAILURE, mark as such
				val = pthread_mutex_destroy(&(st->flock));


				val = pthread_mutex_destroy(&(st->nlock));


				MEMFREE( st->fbuffers );
				MEMFREE( st );
			}
		}
		else
		{
			// FAILURE, mark as such
			val = pthread_mutex_destroy(&(st->flock));


			val = pthread_mutex_destroy(&(st->nlock));


			MEMFREE( st );
		}
	}
		
	return( rtnval );
}








>
>

>
>



















>
>

>
>








>
>

>
>







91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
	
	st = (FGCOM *)MEMALLOC( sizeof(FGCOM) );
	if( st != NULL )
	{
		// (3) Add in the locks
		
		val = pthread_mutex_init(&(st->flock),NULL);
        if( val != 0 )
            return( -1);
		val = pthread_mutex_init(&(st->nlock),NULL);
        if( val != 0 )
            return( -1);
		
		// (4) Now build the buffers
		
		st->fqsize = qels;
		st->nqsize = qels;
		
		st->fbuffers = (PACKET *)MEMALLOC( sizeof(PACKET) * qels );
		if( st->fbuffers != NULL )
		{
			st->nbuffers = (PACKET *)MEMALLOC( sizeof(PACKET) * qels );
			if( st->nbuffers != NULL )
			{
				st->valid = COMQUEUE_VALID;
				rtnval = 0;				// SUCCESS !!!
			}
			else
			{
				// FAILURE, mark as such
				val = pthread_mutex_destroy(&(st->flock));
                if( val != 0 )
                    return( rtnval);
				val = pthread_mutex_destroy(&(st->nlock));
                if( val != 0 )
                    return( rtnval);
				MEMFREE( st->fbuffers );
				MEMFREE( st );
			}
		}
		else
		{
			// FAILURE, mark as such
			val = pthread_mutex_destroy(&(st->flock));
            if( val != 0 )
                return( -1);
			val = pthread_mutex_destroy(&(st->nlock));
            if( val != 0 )
                return( -1);
			MEMFREE( st );
		}
	}
		
	return( rtnval );
}

155
156
157
158
159
160
161


162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181


182
183
184
185
186
187
188
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the queue before going on
		
		val = pthread_mutex_lock( &(st->nlock) );


		
		// (3) If head <> tail then we have room for data, if not bail
		
		if( st->ncount < st->nqsize )
		{
			// (3a), Ok, add the data in, update the buffer count
			// and set the circular que pointer correctly
			
			memcpy(&(st->nbuffers[st->nhead]),(void *)pk,sizeof(PACKET));
			
			st->ncount += 1;
			st->nhead  += 1;
			if( st->nhead >= st->nqsize )
				st->nhead = 0;				// Circular queue action
			rtnval = 0;						// SUCCESS
		}
		
		// (4) Unlock queue and move on
		
		val = pthread_mutex_unlock( &(st->nlock) );


	}
	
	return( rtnval );
}

//************************************************************************
/*







>
>




















>
>







170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the queue before going on
		
		val = pthread_mutex_lock( &(st->nlock) );
        if( val != 0 )
            return( -1);
		
		// (3) If head <> tail then we have room for data, if not bail
		
		if( st->ncount < st->nqsize )
		{
			// (3a), Ok, add the data in, update the buffer count
			// and set the circular que pointer correctly
			
			memcpy(&(st->nbuffers[st->nhead]),(void *)pk,sizeof(PACKET));
			
			st->ncount += 1;
			st->nhead  += 1;
			if( st->nhead >= st->nqsize )
				st->nhead = 0;				// Circular queue action
			rtnval = 0;						// SUCCESS
		}
		
		// (4) Unlock queue and move on
		
		val = pthread_mutex_unlock( &(st->nlock) );
        if( val != 0 )
            return( -1 );
	}
	
	return( rtnval );
}

//************************************************************************
/*
233
234
235
236
237
238
239



240
241
242
243
244
245
246
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the stack --> mgetty queue
		
		val = pthread_mutex_lock( &(st->flock) );



		
		// (3) Is there a buffer ?
		
		if( st->fcount > 0 )
		{
			// (4) Yes there is, so pull out the data
			







>
>
>







252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the stack --> mgetty queue
		
		val = pthread_mutex_lock( &(st->flock) );
        if( val != 0 )
            return( -1 );

		
		// (3) Is there a buffer ?
		
		if( st->fcount > 0 )
		{
			// (4) Yes there is, so pull out the data
			
254
255
256
257
258
259
260



261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280

281
282
283
284
285
286
287
288
289
290
291
292
293
294
295



296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318

319
320
321
322
323



324
325
326
327
328
329
330
			if( st->ftail >= st->fqsize )
				st->ftail = 0;
		}
		
		// (5) Unlock the queue and return
		
		val = pthread_mutex_unlock( &(st->flock) );



	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- NETWORK API --
#endif

//************************************************************************
/*
    Function            :int comqueueNetworkSend( PACKET *pk )
    Description         : Put data into ---> FG queue
    Input Parameters    :	pk	- Packet data to send
    Output Parameters   :	NONE
    Function Returns    :	0	If success, <> 0 if failure
    Notes               :
    Date Created        : 23-Aug-2008
	

*/
//************************************************************************

int comqueueNetworkSend( PACKET *pk )
{
	int rtnval = -1;		// Set for failure
	int val;
	
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the queue before going on
		
		val = pthread_mutex_lock( &(st->flock) );



		
		// (3) If count less than max we can send data
		
		if( st->fcount < st->fqsize )
		{
			// (3a), Ok, add the data in, update the buffer count
			// and set the circular que pointer correctly
			
			memcpy(&(st->fbuffers[st->fhead]),pk,sizeof(PACKET));
			
			st->fcount += 1;
			st->fhead  += 1;
			if( st->fhead >= st->fqsize )
				st->fhead = 0;				// Circular queue action
			rtnval = 0;						// SUCCESS
		}

#ifdef MON_PARENT_DATA
		printf("--PARENT RECV TYPE: [%02X] FROM: [%02X] TO: [%02X] Size: [%d]\n",
						pk->type,
						pk->from,
						pk->to,
						pk->len);

#endif
		
		// (4) Unlock queue and move on
		
		val = pthread_mutex_unlock( &(st->flock) );



	}
	
	return( rtnval );
}

//************************************************************************
/*







>
>
>




















>















>
>
>


















|
<


|
>





>
>
>







276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343

344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
			if( st->ftail >= st->fqsize )
				st->ftail = 0;
		}
		
		// (5) Unlock the queue and return
		
		val = pthread_mutex_unlock( &(st->flock) );
        if( val != 0 )
            return( -1 );

	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- NETWORK API --
#endif

//************************************************************************
/*
    Function            :int comqueueNetworkSend( PACKET *pk )
    Description         : Put data into ---> FG queue
    Input Parameters    :	pk	- Packet data to send
    Output Parameters   :	NONE
    Function Returns    :	0	If success, <> 0 if failure
    Notes               :
    Date Created        : 23-Aug-2008
	
	22-May-2010 Change logging of packet to display data correctly
*/
//************************************************************************

int comqueueNetworkSend( PACKET *pk )
{
	int rtnval = -1;		// Set for failure
	int val;
	
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the queue before going on
		
		val = pthread_mutex_lock( &(st->flock) );
        if( val != 0 )
            return( -1 );

		
		// (3) If count less than max we can send data
		
		if( st->fcount < st->fqsize )
		{
			// (3a), Ok, add the data in, update the buffer count
			// and set the circular que pointer correctly
			
			memcpy(&(st->fbuffers[st->fhead]),pk,sizeof(PACKET));
			
			st->fcount += 1;
			st->fhead  += 1;
			if( st->fhead >= st->fqsize )
				st->fhead = 0;				// Circular queue action
			rtnval = 0;						// SUCCESS
		}

#ifdef MON_PARENT_DATA
		log_data("--PARENT RECV TYPE: FROM: [%02d] TO: [%02d] Size: [%d] Data: [%s]\n",

						pk->from,
						pk->to,
						pk->len,
						pk->data);
#endif
		
		// (4) Unlock queue and move on
		
		val = pthread_mutex_unlock( &(st->flock) );
        if( val != 0 )
            return( -1 );

	}
	
	return( rtnval );
}

//************************************************************************
/*
367
368
369
370
371
372
373



374
375
376
377
378
379
380
381



382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401

402
403
404

405
406
407
408
409
410
411



412
413
414
415
*/
//************************************************************************

int comqueueNetworkReceive(PACKET *pk )
{
	int rtnval = 0;
	int val;



	
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the FG --> network queue
		
		val = pthread_mutex_unlock( &(st->nlock) );



		
		// (3) Is there a buffer ?
		
		if( st->ncount > 0 )
		{
			// (4) Yes there is, so pull out the data
			
			memcpy(pk,&(st->nbuffers[st->ntail]),sizeof(PACKET));
			rtnval = 1;
			
			// (4a) Update for to next
			
			st->ncount -= 1;
			st->ntail  += 1;
			if( st->ntail >= st->nqsize )
				st->ntail = 0;

#ifdef MON_PARENT_DATA
			printf("--PARENT SEND TYPE: [%02X] FROM: [%02X] TO: [%02X] Size: [%d]\n",
							pk->type,

							pk->from,
							pk->to,
							pk->len);

#endif
		}
		
		
		// (5) Unlock the queue and return
		
		val = pthread_mutex_unlock( &(st->nlock) );



	}
	
	return( rtnval );
}







>
>
>








>
>
>


















|
|
>


|
>







>
>
>




399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
*/
//************************************************************************

int comqueueNetworkReceive(PACKET *pk )
{
	int rtnval = 0;
	int val;
#ifdef MON_PARENT_DATA
	char out[PHY_DATA_SIZE];
#endif
	
	// (1) Is the static structure valid ?
	
	if( st != NULL && st->valid == COMQUEUE_VALID )
	{
		// (2) Lock the FG --> network queue
		
		val = pthread_mutex_unlock( &(st->nlock) );
        if( val != 0 )
            return( -1 );

		
		// (3) Is there a buffer ?
		
		if( st->ncount > 0 )
		{
			// (4) Yes there is, so pull out the data
			
			memcpy(pk,&(st->nbuffers[st->ntail]),sizeof(PACKET));
			rtnval = 1;
			
			// (4a) Update for to next
			
			st->ncount -= 1;
			st->ntail  += 1;
			if( st->ntail >= st->nqsize )
				st->ntail = 0;

#ifdef MON_PARENT_DATA
			memset(out,'\0',PHY_DATA_SIZE);
			strncpy(out,pk->data,pk->len);
			log_data("--PARENT SEND FROM: [%02d] TO: [%02d] Size: [%d] Data: [%s]\n",
							pk->from,
							pk->to,
							pk->len,
							out);
#endif
		}
		
		
		// (5) Unlock the queue and return
		
		val = pthread_mutex_unlock( &(st->nlock) );
        if( val != 0 )
            return( -1 );

	}
	
	return( rtnval );
}

Added Scripts/ChannelTest.lua.







































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
--------------------------------------------------------------
--
--	Channel Tester
--	This file is used to test the A/D values on a board
--
--	26-Jun-2011	Initial version
--
----------------------------------------------------------------

--------------------------------------------------------------
--
--	firenet_swr(outpkt,net,wait)
--	
--	INPUT:	outpkt	- Output packet
--			net		- Firenet network
--			delay	- Wait # ms for reply
--
--	OUTPUT:	Response packet or nil if none before timeout
--
----------------------------------------------------------------

function firenet_swr(outpkt,net,wait)
	local inpkt = nil
	local wtimer
	
	-- Send the packet then wait for response
	
	net:write(outpkt)
	wtimer = timer.new()
	timer.sleep(100)
	
	-- Wait for response
	
	while( wtimer:done(wait) == nil )
	do
		inpkt = net:read()
		if( inpkt ~= nil )
		then
			break
		end
		timer.sleep(50)
	end
	
	wtimer:delete()
	
	return inpkt
end

--------------------------------------------------------------
--
--	show_version(address,net )		- Show node version
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function show_version(address,net)
	local out
	local outpkt = {}
	local inpkt
	local rtnval = nil
	
	-- (1) Get version of software
	
	outpkt.TO = address
	outpkt.DATA = "V"
	
	-- Send data and receive input
	
	inpkt = firenet_swr(outpkt,net,2000)
	
	-- Check result
	
	if( inpkt ~= nil )
	then
		out = string.format("Version Data: [%s]",inpkt.DATA)
		print(out)
		if( string.sub(inpkt.DATA,1,1) == "R" and 
				string.sub(inpkt.DATA,2,2) == "V" )
		then
			rtnval = 1
		end
	end
	
	return rtnval
end

--------------------------------------------------------------
--
--	check_arm(address,net )		- Check for ARM
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function do_arm(address,net)
	local out
	local outpkt = {}
	local inpkt1
	local rtnval = nil
	
	-- (1) ARM the node
	
	outpkt.TO = address
	outpkt.DATA = "AA"
	inpkt = firenet_swr(outpkt,net,2000)
		
	return rtnval
end

--------------------------------------------------------------
--
--	disarm_node(address,net )		- Turn off ARM
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	NONE
--
----------------------------------------------------------------

function disarm_node(address,net)
	local out
	local outpkt = {}
	local inpkt
	
	-- (1) ARM the node
	
	outpkt.TO = address
	outpkt.DATA = "AD"
	inpkt = firenet_swr(outpkt,net,2000)
	
end

--------------------------------------------------------------
--
--	check_channels(address,net )		- Show node version
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function check_channels(address,net)
	local out
	local outpkt = {}
	local inpkt
	local rtnval = 1
	local channel,status,ad
	
	-- (1) Loop and read each channel
	
	for channel=0,5 
	do
		outpkt.TO = address
		outpkt.DATA = string.format("C%d",channel)
		
		inpkt = firenet_swr(outpkt,net,2000)
		if( inpkt ~= nil )
		then
			status = string.sub(inpkt.DATA,3,3)
			if( status == "1" )
			then
				status = "F"
			else
				status = "U"
			end
			ad = string.sub(inpkt.DATA,4)
			out = string.format("Channel[%d] Status[%s] A/D=[%s]",
														channel+1,
														status,
														ad)
			print(out)
		else
			rtnval = nil
			break
		end
	end

	return rtnval
end

----------------------------------------------------------------
--	check_status( address,net )
--
--	INPUT:	address	- Node to read
--			net		- Firenet network
--
--	OUTPUT:	Return list of the form
--			list.ARMED = 1 if armed nil if not
--			list.W[1-6]	- 1 if item wired, nil if not
--			list.F[1-6] - 1 if fired, nil if not fired
--
--	A/D	- Armed/Disarmed
--	F	- 0x40 | 0x3F wired bits
--	W	- 0x40 | 0x3F fired bits
--
----------------------------------------------------------------

function update_status( address,net )

	local list = {}
	local part
	local output
	local outpkt
	local inpkt
	local sd
	local rtnval = nil		-- Set for failure
	
	-- (0) Read status
	
	outpkt = {}
	outpkt.TO = address
	outpkt.DATA = "S"
	inpkt = firenet_swr(outpkt,net,2000)
	
	if( inpkt ~= nil )
	then
		sd = inpkt.DATA
		
		-- (1) Get the armed,disarmed bit
		
		part = string.sub(sd,3,3)
		if( part == "A" )
		then
			list.ARMED = 1
		else
			list.ARMED = 0
		end
		
		table.foreach(list,print)
		
		-- (2) Get the Fired bits
		
		--print("SD = ",sd)
		part = string.sub(sd,4,4)
		part = string.byte(part)		-- Get the numerical value
		part = part - 64				-- Remove 0x40
		
		print("FIRED: ",part)
	
		list.FIRED = bin_con( part )	-- Convert to a binary array
		
		-- (3) Get the Wired bits
		
		part = string.sub(sd,5,5)
		part = string.byte(part)		-- Get the numerical value
		part = part - 64				-- Remove 0x40
	
		print("WIRED: ",part)
		
		list.UNFIRED = bin_con( part )	-- Convert to a binary array
		
		print("------------")
		
		if( list.ARMED ~= nil and list.ARMED == 1 )
		then
			print("ARMED")
		else
			print("DISARMED")
		end
		
		if( list.UNFIRED ~= nil and type(list.UNFIRED) == "table" )
		then
			table.foreach( list.UNFIRED,print)
		end
		
		print("------------")
				
		rtnval = 1
	end
	
	return rtnval
end

----------------------------------------------------------------
--	bin_con( val )	- Convert value to binary array
--
--	INPUT:	val	- 0 - 0x3f (0-63)
--
--	OUTPUT:	Binary array 1-6 of bits from the value
--			bit 6 == MSB
--
----------------------------------------------------------------

function bin_con( val )
	local temp
	local subval = 32
	local list = {}
	
	-- (1) Loop through values
	
	for i=6,1,-1 
	do
		temp = val - subval
		if( temp >= 0 )
		then
			list[i] = 1		-- We have the bit
			val = temp
		else
			list[i] = 0		-- We don't have the bit
		end
		
		subval = subval/2	-- Next lower bit
	end
	
	return list
end



-------------------- MAIN SCRIPT ---------------------

local run = 1

-- (1) First open FIRENET

net = firenet.new()
if( net ~= nil )
then
	while( run )
	do
		print("")
		print("Node Test")
		io.write("Node For Test: ")
		node = io.read("*l")
		
		node = tonumber(node)
		if( node > 0 and node < 30 )
		then
			
			do_arm( node,net )	-- Arm then dump A/D
			
			check_channels( node, net )
			
			update_status( node,net )
			
			disarm_node( net,net )
		else
			break
		end
	end
	net:delete()
end

print("-- End Run --")

Added Scripts/ChannelTest.sh.





















>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
# Startup for Channel Test
# Simulated network with 1 nodes

echo "Starting Node TEST"
echo "------------------"

../build/Debug\ INTEL/firenet -c ChannelTest.lua -p 1 -log net.data


Added Scripts/MultFire.lua.





























































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
--------------------------------------------------------------
--
--	FIRENET Multiple Fire test script
--	Tests multiple nodes to check on simultaneous fires
--
--	11-Nov-2011	Initial version
--
----------------------------------------------------------------

path = "../../Scripts"

-- Set that into the package search path							
_G.package.path = path .. "/?.lua;" .. _G.package.path

require "firenet_sup"	-- FIRENET support functions

--------------------------------------------------------------
--
--	firenet_swr(outpkt,net,wait)
--	
--	INPUT:	outpkt	- Output packet
--			net		- Firenet network
--			delay	- Wait # ms for reply
--
--	OUTPUT:	Response packet or nil if none before timeout
--
----------------------------------------------------------------

function firenet_swr(outpkt,net,wait)
	local inpkt = nil
	local wtimer
	
	print("----------")
	print("Sending to: ",outpkt.TO)
	print("DATA: ",outpkt.DATA)
	
	-- Send the packet then wait for response
	
	net:write(outpkt)
	wtimer = timer.new()
	timer.sleep(100)
	
	-- Wait for response
	
	while( wtimer:done(wait) == nil )
	do
		inpkt = net:read()
		if( inpkt ~= nil )
		then
			break
		end
		timer.sleep(50)
	end
	
	wtimer:delete()
	
	if( inpkt ~= nil )
	then
		print("Rec from: ",inpkt.FROM)
		print("DATA: ",inpkt.DATA)
	end
	
	return inpkt
end

-------------------- MAIN SCRIPT ---------------------

-- (1) First open FIRENET

local net
local outpkt
local dlytimer
local data;

net = firenet.new()
if( net ~= nil )
then
	-- Check What we have out there
	
	if( build_fnet_status(nil,net) )
	then
		print("")
		print("----------------------------------------")
		out = string.format("There are %d nodes on the net",FNET_MAP.n)
		print(out)
		
		-- Sync the nodes
		
		outpkt = {}
		outpkt.TO = BCAST_ADDR
		outpkt.DATA = "Z"
		dlytimer = timer.new()
		firenet_swr(outpkt,net,1000)
		
		-- ARM the nodes
		outpkt = {}
		outpkt.TO = BCAST_ADDR
		outpkt.DATA = "AA"
		firenet_swr(outpkt,net,1000)
		
		-- Nodes ARMED 
		
		io.write("Ready for Fire: ")
		data = io.read("*l")
		
		-- Now fire each of the nodes
		-- First get current "node time"
		-- then calculate firing time as 5 seconds
		-- from now
		
		data = dlytimer:read() + 5000
		for key,value in next,FNET_MAP
		do
			if( type(value) == "table" )
			then
				outpkt = {}
				outpkt.TO = key
				outpkt.DATA = string.format("D0%d",data)
				
				firenet_swr(outpkt,net,1000)
			end
		end
		print("*********")
		print("Now : ",dlytimer:read())
		
		timer.sleep(10000)		-- Wait for fire
		print("Current Time: ",dlytimer:read())
		
		-- Disarm nodes
		
		-- ARM the nodes
		outpkt = {}
		outpkt.TO = BCAST_ADDR
		outpkt.DATA = "AD"
		firenet_swr(outpkt,net,1000)
	end
	
	net:delete()
end

print("-- End Run --")

Added Scripts/PgmFire.lua.



































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
--------------------------------------------------------------
--
--	FIRENET Program and fire multiple
--	Tests multiple nodes to check on simultaneous fires
--
--	17-Nov-2011	Initial version
--
----------------------------------------------------------------

path = "../../Scripts"

-- Set that into the package search path							
_G.package.path = path .. "/?.lua;" .. _G.package.path

require "firenet_sup"	-- FIRENET support functions

--------------------------------------------------------------
--
--	firenet_swr(outpkt,net,wait)
--	
--	INPUT:	outpkt	- Output packet
--			net		- Firenet network
--			delay	- Wait # ms for reply
--
--	OUTPUT:	Response packet or nil if none before timeout
--
----------------------------------------------------------------

function firenet_swr(outpkt,net,wait)
	local inpkt = nil
	local wtimer
	
	print("----------")
	print("Sending to: ",outpkt.TO)
	print("DATA: ",outpkt.DATA)
	
	-- Send the packet then wait for response
	
	net:write(outpkt)
	wtimer = timer.new()
	timer.sleep(100)
	
	-- Wait for response
	
	while( wtimer:done(wait) == nil )
	do
		inpkt = net:read()
		if( inpkt ~= nil )
		then
			break
		end
		timer.sleep(50)
	end
	
	wtimer:delete()
	
	if( inpkt ~= nil )
	then
		print("Rec from: ",inpkt.FROM)
		print("DATA: ",inpkt.DATA)
	end
	
	return inpkt
end

-------------------- MAIN SCRIPT ---------------------

-- (1) First open FIRENET

local net
local outpkt
local dlytimer
local data;

net = firenet.new()
if( net ~= nil )
then
	-- Check What we have out there
	
	if( build_fnet_status(nil,net) )
	then
		print("")
		print("----------------------------------------")
		out = string.format("There are %d nodes on the net",FNET_MAP.n)
		print(out)
		
		for j=1,FNET_MAP.n
		do
			for i=0,5
			do
				outpkt = {}
				outpkt.TO = j
				outpkt.DATA = string.format("P%d%05d",i,(i+1)*1000);
				firenet_swr(outpkt,net,1000);
			end
		end
		
		-- Sync & fire the nodes
		
		-- Nodes ARMED 
		
		io.write("Ready for Fire: ")
		data = io.read("*l")
		
		-- ARM the nodes
		outpkt = {}
		outpkt.TO = BCAST_ADDR
		outpkt.DATA = "AA"
		firenet_swr(outpkt,net,1000)

		outpkt = {}
		outpkt.TO = BCAST_ADDR
		outpkt.DATA = "ZP"
		dlytimer = timer.new()
		firenet_swr(outpkt,net,500)
		
		print("****************")
		
		-- Now loop waiting for node fire data
		
		count = 0;
		while( 1 )
		do
			timer.sleep( 100 )
			
			outpkt = 1
			while (outpkt ~= nil )
			do
				outpkt = net:read()
				if( outpkt ~= nil )
				then
					count = count + 1
					out = string.format("-- REC [%d] Packet --",count)
					print(out)
					table.foreach(outpkt,print)
					print("-----------");
				end
			end
			
			if( count >= 6*FNET_MAP.n )
			then
				break;
			end
		end
		
		print("--NODE DONE--");
		
		-- Disarm nodes
		
		-- ARM the nodes
		outpkt = {}
		outpkt.TO = BCAST_ADDR
		outpkt.DATA = "AD"
		firenet_swr(outpkt,net,1000)
	end
	
	net:delete()
end

print("-- End Run --")

Added Scripts/ProdTest.lua.

























































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
--------------------------------------------------------------
--
--	FIRENET Production Test Script
--	This file is used to test and setup a new board
--
--	27-Feb-2011	Initial version
--
----------------------------------------------------------------

path = "../../Scripts"

-- Set that into the package search path							
_G.package.path = path .. "/?.lua;" .. _G.package.path

require "firenet_sup"	-- FIRENET support functions

--------------------------------------------------------------
--
--	firenet_swr(outpkt,net,wait)
--	
--	INPUT:	outpkt	- Output packet
--			net		- Firenet network
--			delay	- Wait # ms for reply
--
--	OUTPUT:	Response packet or nil if none before timeout
--
----------------------------------------------------------------

function firenet_swr(outpkt,net,wait)
	local inpkt = nil
	local wtimer
	
	-- Send the packet then wait for response
	
	net:write(outpkt)
	wtimer = timer.new()
	timer.sleep(100)
	
	-- Wait for response
	
	while( wtimer:done(wait) == nil )
	do
		inpkt = net:read()
		if( inpkt ~= nil )
		then
			break
		end
		timer.sleep(50)
	end
	
	wtimer:delete()
	
	return inpkt
end

--------------------------------------------------------------
--
--	show_version(address,net )		- Show node version
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function show_version(address,net)
	local out
	local outpkt = {}
	local inpkt
	local rtnval = nil
	
	-- (1) Get version of software
	
	outpkt.TO = address
	outpkt.DATA = "V"
	
	-- Send data and receive input
	
	inpkt = firenet_swr(outpkt,net,2000)
	
	-- Check result
	
	if( inpkt ~= nil )
	then
		out = string.format("Version Data: [%s]",inpkt.DATA)
		print(out)
		if( string.sub(inpkt.DATA,1,1) == "R" and 
				string.sub(inpkt.DATA,2,2) == "V" )
		then
			rtnval = 1
		end
	end
	
	return rtnval
end

--------------------------------------------------------------
--
--	check_arm(address,net )		- Check for ARM
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function check_arm(address,net)
	local out
	local outpkt = {}
	local inpkt
	local rtnval = nil
	
	-- (1) ARM the node
	
	outpkt.TO = address
	outpkt.DATA = "AA"
	net:write(outpkt)
	
	timer.sleep(1000)
	
	-- Check result
	
	print("ARM SENT - Is the NODE LED BLINKING ?")
	io.write("Y/N : ")
	out = io.read("*l")
	if( out == "Y" or out == "y" )
	then
		rtnval = 1
	end
	
	return rtnval
end

--------------------------------------------------------------
--
--	disarm_unit(address,net )		- Turn off ARM
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	NONE
--
----------------------------------------------------------------

function disarm_unit(address,net)
	local out
	local outpkt = {}
	local inpkt
	
	-- (1) ARM the node
	
	outpkt.TO = address
	outpkt.DATA = "AD"
	net:write(outpkt)
	
end

--------------------------------------------------------------
--
--	check_channels(address,net )		- Show node version
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function check_channels(address,net)
	local out
	local outpkt = {}
	local inpkt
	local rtnval = 1
	local channel,status,ad
	
	-- (1) Loop and read each channel
	
	for channel=0,5 
	do
		outpkt.TO = address
		outpkt.DATA = string.format("C%d",channel)
		
		inpkt = firenet_swr(outpkt,net,2000)
		if( inpkt ~= nil )
		then
			status = string.sub(inpkt.DATA,3,3)
			if( status == "1" )
			then
				status = "F"
			else
				status = "U"
			end
			ad = string.sub(inpkt.DATA,4)
			out = string.format("Channel[%d] Status[%s] A/D=[%s]",
														channel+1,
														status,
														ad)
			print(out)
		else
			rtnval = nil
			break
		end
	end

	return rtnval
end

--------------------------------------------------------------
--
--	fire_channels(address,net )		- Fire channels
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function fire_channels(address,net)
	local out
	local outpkt = {}
	local inpkt
	local channel,status,ad
	local i
	
	-- (1) Loop and read each channel
	
	print("Firing channels")
	for channel=0,5 
	do
		outpkt.TO = address
		outpkt.DATA = string.format("F%d",channel)
		
		out = string.format("Firing [%d] ",channel+1)
		print(out)
			net:write(outpkt)
		
		io.write("Did It pull current [y/n]:")
		out = io.read("*l")
		if( out == "Y" or out == "y" )
		then
			rtnval = 1
		else
			rtnval = nil
			break
		end
	end

	return rtnval
end

--------------------------------------------------------------
--
--	address_change(address,net )		- Change address
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if address NOT changed
--
----------------------------------------------------------------

function address_change(address,net)
	local out
	local outpkt = {}
	local inpkt
	local rtnval
	local addr

	-- Show current address and ask for change
	out = string.format("Current Unit address is [%d] ",address)
	print(out)
	io.write("Do you want to change it [y/n]: ")
	out = io.read("*l")
	if( out == "Y" or out == "y")
	then
	
		-- Get new address
		
		io.write("New address (1-30): " )
		out = io.read("*l")
		addr = tonumber(out)
		if( addr > 0 and addr <= 30 )
		then
		
			-- Try to change it
			
			outpkt.TO = address
			outpkt.DATA = string.format("W%d",addr)
			inpkt = firenet_swr(outpkt,net,4000)
			if( inpkt ~= nil )
			then
				out = string.format("RESPONSE [%s] ",inpkt.DATA)
				print(out)
				out = string.format("Unit Address changed from [%d] to [%d]",
											address,
											addr)
				rtnval = 1
			else
				print("** No response on address change packet **")
			end
		end
	end
	
	return rtnval
end

--------------------------------------------------------------
--
--	run_Tests(address,net )		- Run tests on node
--	
--	INPUT:	address	- Address of node under test
--			net		- Firenet network
--
--	OUTPUT:	1	If successful nil if not
--
----------------------------------------------------------------

function run_Tests(address,net)
	local out
	
	-- (1) Get and show version
	
	if( show_version(address,net) == nil )
	then
		print("** VERSION TEST FAILED **")
		return nil
	end
	
	if( check_arm(address,net) == nil )
	then
		print("** ARM TEST FAILED **")
		return nil
	end
	
	if( check_channels(address,net) == nil )
	then
		print("** CHANNEL TEST FAILED **")
		return nil 
	end
	
	if( fire_channels(address,net) == nil )
	then
		print("** FIRE CHANNELS TEST FAILED **")
		return nil
	end
	
	disarm_unit( address,net )
	
	if( address_change(address,net) )
	then
		print("-- UNIT OK & ADDRESS CHANGED --")
	else
		print("-- UNIT OK --")
	end

	return 1
end

-------------------- MAIN SCRIPT ---------------------

-- (1) First open FIRENET

net = firenet.new()
if( net ~= nil )
then
	-- Check What we have out there
	
	if( build_fnet_status(nil,net) )
	then
		print("")
		print("----------------------------------------")
		out = string.format("There are %d nodes on the net",FNET_MAP.n)
		print(out)
		
		if( FNET_MAP.n == 1 )
		then
			for key,value in next,FNET_MAP
			do
				if( type(value) == "table" )
				then
					address = tonumber(key)
					break
				end
			end
			
			out = string.format("NODE [%d] Under Test",address)
			print(out)
			
			if( run_Tests( address,net ) )
			then
				print("-- Test Successful --")
			end
			
		else
			print("*** ONLY ONE NODE IN NET FOR THIS TEST **")
			print("*** REMOVE EXTRA NODES ***")
			net:delete()
			return
		end
	else
		print("** NO UNITS IN NETWORK **")
		print("** TEST FAILED **")
	end

	net:delete()
end

print("-- End Run --")

Changes to Scripts/firenet_sup.lua.

13
14
15
16
17
18
19




20
21
22
23
24
25
26
27
28

29

30
31
32
33

34
35
36
37
38
39
40
41
42
43
44




45
46

47

48


49

50

51
52
53
54
55
56
57
58
59
60
61
62
63
64



65
66





67
68
69
70
71
72
73
74
75
76
77
78
79

80






81
82
83
84












85





86
87
88


89


90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116

117
118
119



120
121
























122

123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

144
145
146
147
148
149
150
151
152
153
154
155


156
157
158
159
160
161
162
163
164
165

166
167
168

169

170

171
172
173
174
175
176



177
178
179
180
181
182
183
184
185

186
187

188



189
190

191
192


193

194
195
196
197
198
199
200
201
202
203
204
205
--		REV_FNET_MAP	- List indexed by NODE Phy address
--			[<Node Phy addr]
--							.NAME		- Node name (see FNET_MAP)
--
--	13-Sep-2009	Initial version
--	20-Sep-2009	Add cmd line handler
--	21-Sep-2009 Add music shutdown




--
----------------------------------------------------------------

----------------------------------------------------------------
-- GLOBAL DATA STRUCTURES
----------------------------------------------------------------
FNET_MAP = {}			-- Network MAP
REV_FNET_MAP = {}		-- Reverse MAP
BCAST_ADDR = "0xFF"		-- Broadcast address for FIRENET

OS_MUSIC_PLAYER	= "afplay"	-- Cmd line Music player program (OS dependent)


----------------------------------------------------------------
--	build_fnet_map(h)	- Build Lua map of firenet network
--

--	INPUT:	h	- FIRENET handle
--
--	OUTPUT:	1	- Success, FNET_MAP and REV_FNET_MAP rebuilt
--			nil	- FAILURE
--
----------------------------------------------------------------

function build_fnet_map(h)
	local outpk
	local inpk
	local rtnval = nil




	
	-- (1) Build a WHO IS message

	

	outpk = {}


	outpk.CMD = "W"

	outpk.TO = BCAST_ADDR

	
	-- (2) Send it then wait for an answer
	
	--print("-- Sending Packet --")
	h:write(outpk)
	timer.sleep( 1000 );
	
	-- (3) Now read packets till we get a nil and store the data
	
	inpk = h:read()
	FNET_MAP = {}
	REV_FNET_MAP = {}
	while( inpk ~= nil )
	do



			--print("-- Rec Packet --")
			--table.foreach(inpk,print)






		if( inpk.CMD == "W" )
		then
			-- Build forward map
			FNET_MAP[inpk.DATA] = {}
			FNET_MAP[inpk.DATA].NAME = inpk.DATA
			FNET_MAP[inpk.DATA].PHY = inpk.FROM
			
			-- Build Reverse MAP
			REV_FNET_MAP[inpk.FROM] = {}
			REV_FNET_MAP[inpk.FROM].NAME = inpk.DATA
		end
		timer.sleep( 100 );

		rtnval = 1






		inpk = h:read()
	end
	return rtnval
end


















----------------------------------------------------------------
--	build_fnet_status(h)	- Get status of network
--


--	INPUT:	h	- FIRENET handle


--
--	OUTPUT:	1	- Success, FNET_MAP and REV_FNET_MAP updated with status
--			nil	- FAILURE
--
----------------------------------------------------------------

function build_fnet_status( h )
	local outpk
	local inpk
	local rtnval = nil
	local node
	local out
	
	-- (1) Build a STATUS message
	
	outpk = {}
	outpk.CMD = "S"
	outpk.TO = BCAST_ADDR
	
	-- (2) Send it then wait for an answer
	
	--print("-- Sending Packet --")
	h:write(outpk)
	timer.sleep( 1000 );
	
	-- (3) Now read packets till we get a nil and store the data
	

	inpk = h:read()
	while( inpk ~= nil )
	do



			print("-- Rec Packet --")
			table.foreach(inpk,print)


























		if( inpk.CMD == "S" )
		then
			node = node_address(inpk.FROM)
			if( node ~= nil )
			then
				-- Update forward map
				if( FNET_MAP[node] ~= nil )
				then
					FNET_MAP[node].FIRED = inpk.FIRED
					FNET_MAP[node].UNFIRED = inpk.UNFIRED
				else
					out = string.format("*** ERROR Unknown NODE [%s]",inpk.FROM)
					if( inpk.DATA ~= nil )
					then
						out = out..string.format("NAME: [%s]",node)
					end
					print(out)
				end
			else
				out = string.format("*** ERROR Node [%s] NOT FOUND",inpk.FROM)
				print(out)

			end
		end
		timer.sleep( 100 );
		rtnval = 1
		inpk = h:read()
	end
	return rtnval
end

----------------------------------------------------------------
--	phy_address(node)	- Return physical address for a node
--


--	INPUT:	node	- Node name
--
--	OUTPUT:	Physical address or BCAST_ADDRESS if none
--
----------------------------------------------------------------

function phy_address(node)
	local phy
	
	if( FNET_MAP[node] ~= nil )

	then
		phy = FNET_MAP[node].PHY
	else

		phy = BCAST_ADDR

	end

	
	return phy
end

----------------------------------------------------------------
--	node_address(phy)	- Return node  name from physical address



--
--	INPUT:	phy	- physical address
--
--	OUTPUT:	Node name or nil if not found
--
----------------------------------------------------------------

function node_address(phy)
	local node = nil

	local val
	

	val = tonumber(phy)



	if( REV_FNET_MAP[val] ~= nil )
	then

		node = REV_FNET_MAP[val].NAME
	else


		node = phy

	end
	
	return node
end
	
----------------------------------------------------------------
--	play_file(file)
--
--	INPUT:	file	- Music file
--
--	OUTPUT:	PID of music player
--







>
>
>
>







<
|
>

>


|

>
|

|




|

|

>
>
>
>

|
>

>
|
>
>
|
>
|
>



|

<



<
|
|
|

>
>
>
|
|
>
>
>
>
>
|
|
|
|
|
|
<
|
|
|
|
|
|
>
|
>
>
>
>
>
>
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>

<

>
>
|
>
>

|




|
<
<

|
<

<
<
<
<
<
<


|
|
<

|

>
|
|

>
>
>

|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

>
|
<
|
|
|
<
<
|
|
<
<
|
|
|
|
<
<
<
|
<
<
>
|
|
<
<
|
|
|
<
|
<
<
|
>
>
|
|
|
|
|
|
|
<

<
>
|
|
|
>
|
>
|
>

|



<
>
>
>

|
|
<



|
|
>
|

>
|
>
>
>
|
|
>
|
|
>
>
|
>


|

|







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

72
73
74

75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

132
133
134
135
136
137
138
139
140
141
142
143
144


145
146

147






148
149
150
151

152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

191
192
193


194
195


196
197
198
199



200


201
202
203


204
205
206

207


208
209
210
211
212
213
214
215
216
217

218

219
220
221
222
223
224
225
226
227
228
229
230
231
232

233
234
235
236
237
238

239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
--		REV_FNET_MAP	- List indexed by NODE Phy address
--			[<Node Phy addr]
--							.NAME		- Node name (see FNET_MAP)
--
--	13-Sep-2009	Initial version
--	20-Sep-2009	Add cmd line handler
--	21-Sep-2009 Add music shutdown
--	17-May-2010 [ba31d5cae3] Convert to NEWNET version
--	16-Jan-2011	[e4208b8f56] Change status response msg header
--	23-Jan-2011 Correct update_status() code for new response hdr
--	23-Jan-2011 [e63a96467f] Fix status return parsing
--
----------------------------------------------------------------

----------------------------------------------------------------
-- GLOBAL DATA STRUCTURES
----------------------------------------------------------------
FNET_MAP = {}			-- Network MAP

BCAST_ADDR = "0"		-- Broadcast address for FIRENET [ba31d5cae3]
FNET_MAX_ADDR = 32		-- Max address for FIRENET
OS_MUSIC_PLAYER	= "afplay"	-- Cmd line Music player program (OS dependent)
print("--FIRENET_SUP LOADED--")

----------------------------------------------------------------
--	build_fnet_status(addr,h)	- Get status of network
--
--	INPUT:	addr	- If present just query 1 node
--			h		- FIRENET handle
--
--	OUTPUT:	1	- Success, FNET_MAP updated with status
--			nil	- FAILURE
--
----------------------------------------------------------------

function build_fnet_status(addr, h )
	local outpk
	local inpkt
	local rtnval = nil
	local node
	local out
	local wtimer
	local i
	
	-- (1) Build a STATUS message
	-- If addr input then use just one address
	
	outpk = {}
	outpk.DATA = "S"
	if( addr == nil )
	then
		outpk.TO = BCAST_ADDR
	else
		outpk.TO = addr
	end
	
	-- (2) Send it then wait for an answer
	
	print("-- Sending Packet --")
	h:write(outpk)

	
	-- (3) Now read packets till we get a nil and store the data
	

	wtimer = timer.new()
	
	while( wtimer:done(2000) == nil )
	do
		inpkt = h:read()
		if( inpkt ~= nil )
		then
			print("-- Rec Packet --")
			table.foreach(inpkt,print)
	
			-- Handle Status return message
			
			print("------------")
			
			if( string.sub(inpkt.DATA,1,1) == "R" and 
				string.sub(inpkt.DATA,2,2) == "S" )
			then
				print("-- Doing packet")
				rtnval = 1
				node = inpkt.FROM

				
				-- Now fill in message with Status DATA
				
				FNET_MAP[node] = update_status( inpkt.DATA )
			end
			
			-- If only one then don't try another read
			
			if( addr == nil )
			then
				-- Restart time to look for next
				wtimer:start();		
			else
				-- Done
				break
			end
		end
	end
	
	-- Set the count in the structure 
	
	FNET_MAP.n = 0
	for key,value in next, FNET_MAP 
	do
		print( key,value )
		if( type(value) == "table" )
		then
			FNET_MAP.n = FNET_MAP.n + 1
		end
	end
	
	wtimer:delete()
	
	return rtnval
end

----------------------------------------------------------------

--
--	swr_firenet( pkt ,delay)	- Send request & wait reply	
--
--	INPUT:	pkt		- Packet to send
--			delay	- Wait # ms
--			h		- Network object
--
--	OUTPUT:	Returned packet
--			nil	- FAILURE
--
----------------------------------------------------------------

function swr_firenet(pkt,delay,h)


	local rtnval = nil
	local wtimer

	






	-- (2) Send it then wait for an answer
	
	print("-- Sending Packet --")
	h:write(pkt)

	
	-- (3) Wait for packet
	
	wtimer = timer.new()
	
	while( wtimer:done(delay) == nil )
	do
		rtnval = h:read()
		if( rtnval ~= nil )
		then
			print("-- Rec Packet --")
			table.foreach(rtnval,print)
			break
		end
	end
	
	-- Remove timer and return result
	wtimer:delete()	
	return rtnval
end

----------------------------------------------------------------
--	update_status( sd )
--
--	INPUT:	sd	- Status data (SR[A/D][F][W])	
--
--	OUTPUT:	Return list of the form
--			list.ARMED = 1 if armed nil if not
--			list.W[1-6]	- 1 if item wired, nil if not
--			list.F[1-6] - 1 if fired, nil if not fired
--
--	A/D	- Armed/Disarmed
--	F	- 0x30 | 0x3F wired bits
--	W	- 0x30 | 0x3F fired bits
--
----------------------------------------------------------------

function update_status( sd )


	local list = {}
	local part
	


	-- (1) Get the armed,disarmed bit
	


	part = string.sub(sd,3,3)
	if( part == "A" )
	then
		list.ARMED = 1



	else


		list.ARMED = 0
	end
	


	table.foreach(list,print)
	
	-- (2) Get the Fired bits

	


	--print("SD = ",sd)
	part = string.sub(sd,4,4)
	part = string.byte(part)		-- Get the numerical value
	part = part - 48				-- Remove 0x30
	
	print("FIRED: ",part)

	list.FIRED = bin_con( part )	-- Convert to a binary array
	
	-- (3) Get the Wired bits

	

	part = string.sub(sd,5,5)
	part = string.byte(part)		-- Get the numerical value
	part = part - 48				-- Remove 0x30

	print("WIRED: ",part)
	
	list.UNFIRED = bin_con( part )	-- Convert to a binary array
	
	--table.foreach(list,print)
	
	return list
end

----------------------------------------------------------------

--	bin_con( val )	- Convert value to binary array
--
--	INPUT:	val	- 0 - 0x3f (0-63)
--
--	OUTPUT:	Binary array 1-6 of bits from the value
--			bit 6 == MSB

--
----------------------------------------------------------------

function bin_con( val )
	local temp
	local subval = 32
	local list = {}
	
	-- (1) Loop through values
	
	for i=6,1,-1 
	do
		temp = val - subval
		if( temp >= 0 )
		then
			list[i] = 1		-- We have the bit
			val = temp
		else
			list[i] = 0		-- We don't have the bit
		end
		
		subval = subval/2	-- Next lower bit
	end
	
	return list
end

----------------------------------------------------------------
--	play_file(file)
--
--	INPUT:	file	- Music file
--
--	OUTPUT:	PID of music player
--

Added Scripts/labelmarkup.lua.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
-------------------------------------------------------------------------------
-- Copyright (C) 2009, Pandora Products
--
-- Module Name: queuemarkup.lua
--
-- Description: Markup a queue file from queuefile.lua
--
--  Suntax:	firenet -p X [-n #boxes] -c labelmarkup.lua -L<Label file>
--					-Q <queue file> -D <backup in ms for firing cmds>
--					-M <MP3 file name used>
--					-A -> Autofill.....
--
--  23-May-2010  Initial Version
--
-------------------------------------------------------------------------------

require "firenet_sup"	-- FIRENET support functions

-- Module Globals

queue_list = nil
network_picture = nil
DELAY_BACKUP	= 200		-- Back up # ms to send DELAY messages

-- Auto fill variables

auto_node = 1		-- Set for normal start
auto_ch = 0			-- Set for normal start

-- Local support functions -------

-------------------------------------------------------------------------------
--
--  read_label( file )	- Read label file in
--
--  INPUT:      file	- Text key file (see below)
--
--  OUTPUT     List form of QUEUE file with the following:
--					TIME:	Time Data 
--					DATA:	Line data with text from file
--
-- Key file of the form
--	<Time>\t<Time>\t<Text>
--
-------------------------------------------------------------------------------

function read_key( file )
	local line
	local list
	local part,pl
	local i,h
	local flag = 1
	-- (1) Init list to length 1
	
	list = {}
	list.n = 0
		
	-- (2) Open file as a set of lines then work through them
		
	for line in io.lines(file)
	do		
		-- (3) Determine line type and fill in list
		
		if( line ~= nil and string.len(line) > 0 )
		then
			i = 1
			pl = {}
			for part in string.gfind( line, "[%w.]+") 
			do				
				if( i == 1 )
				then
					pl.TIME = part
				end
				
				if( i == 3 )
				then
					pl.DATA = part
				end
				
				i = i + 1
			end
		
			list.n = list.n + 1
			list[list.n] = pl
		else
			flag = nil
		end
	end
		
	return list
end

-------------------------------------------------------------------------------
--
--  gen_network(node_count)
--
--  INPUT:      node_count	- # Nodes in network
--
--  OUTPUT      network list
--				Return a list node_count long with an array of
--				6 elements representing the piece at that point
--
-------------------------------------------------------------------------------

function gen_network( node_count )
	local network
	local i,j
	local node
	local nodename
	
	-- Generate the network
	
	network = {}
	network.n = node_count
	
	-- Each node is a 6 element array filled
	-- with O's showing ready to go
	
	for i=1,node_count 
	do
		-- Build node with all tubes loaded
		node = {}
		for j=1,6 
		do
			node[j] = "O"
		end
		
		-- Index into array by node #
		
		network[i] = node
	end
		
	return network
end

-------------------------------------------------------------------------------
--
--  show_network(network)
--
--  INPUT:      network	- Network list
--
--  OUTPUT      Output as NODE   <Node pieces>
--
-------------------------------------------------------------------------------

function show_network( network )
	local i,j
	local node
	local nodename
	local out
	
	-- Put out a header
	
	print("NODE\t\t012345")
	
	for i=1,network.n
	do
		-- Put in node name
		
		node = network[i]
		
		out = string.format("NODE%02d",i) .. "\t\t"
		
		-- Put out node data
		
		for j=1,6
		do
			out = out .. node[j]
		end
		
		print(out)
	end
end

-------------------------------------------------------------------------------
--
--  fire_network(ch,nodename,network) - Fire a node psn
--
--  INPUT:   ch			- Channel fired (note input as 0-5)
--			nodename	- Node fired
--			network		- Network list
--
--  OUTPUT      Updated network data
--
-------------------------------------------------------------------------------

function fire_network(ch,nodename,network)
	local node
	local out = nil
		
	-- (1) Is this node in the network
	
	if( nodename ~= nil and type(nodename) == "number" )
	then
		node = network[nodename]
		if( node ~= nil )
		then
			-- Change the element to fired if present
			
			if( ch == nil )
			then
				ch = 0
			end
			ch = tonumber(ch) + 1
			if( node[ch] ~= nil )
			then
				node[ch] = "X"
			else
				out = string.format("** CH [%d] not present on node [%s]",ch,nodename)
			end
		else
			out = string.format("** Node [%s] not present",nodename)
		end
		
		if( out ~= nil )
		then
			print(out)
		end
	end
	
	return network
	
end

-------------------------------------------------------------------------------
--
--  key_line( index,e)	- Handle each key line
--
--  INPUT:      index	- Index of this line in the file
--				el		- Element with TIME and DATA
--
-- 	   TIME is the absolute time into the file
--     DATA is the input from the file is of three forms
--			Starts with F	- Fire one node
--			Starts with D   - Fire multiple nodes
--			Neither         - Treat as F
--	Index is the count of the element

--		NOTE: The output is placed in the global queue_list
--
-------------------------------------------------------------------------------

function key_line( index,e )
	local indata
	local out
	local num,ft,cmd
	local i
	
	-- (1) Check for input being a table before proceeding
	
	if( type(e) == "table" )
	then
		-- (2) The element has a TIME and DATA field
		-- 	   TIME is the absolute time into the file
		--     DATA is the input from the file is of three forms
		--			Starts with F	- Fire one node
		--			Starts with D   - Fire multiple nodes
		--			Neither         - Treat as F
		--	Index is the count of the element
		
		num = index
		ft = e.TIME
		cmd = string.sub(e.DATA,1,1)
		print(cmd)
		if( cmd ~= "F" and cmd ~= "D" )
		then
			cmd = "F"	-- Treat all unknowns as F
		end
		
		-- Show the network
		
		show_network( network_picture )
		
		-- (4) Handle the data for F or M commands
		
		if( cmd == "F" )
		then
			handle_fire(num,ft,e.DATA,queue_list)
		else
			handle_delay(num,ft,e.DATA,queue_list)
		end
	end
end

-------------------------------------------------------------------------------
--
--  auto_key_line( index,e)	- Autofill each key line
--
--  INPUT:      index	- Index of this line in the file
--				el		- Element with TIME and DATA
--
-- 	   TIME is the absolute time into the file
--     DATA is the input from the file is of three forms
--			Starts with F	- Fire one node
--			Starts with D   - Fire multiple nodes
--			Neither         - Treat as F
--	Index is the count of the element

--		NOTE: The output is placed in the global queue_list
--
-------------------------------------------------------------------------------

function auto_key_line( index,e )
	local indata
	local out
	local num,ft,cmd
	local i
	
	-- (1) Check for input being a table before proceeding
	
	if( type(e) == "table" )
	then
		-- (2) The element has a TIME and DATA field
		-- 	   TIME is the absolute time into the file
		--     DATA is the input from the file is of three forms
		--			Starts with F	- Fire one node
		--			Starts with D   - Fire multiple nodes
		--			Neither         - Treat as F
		--	Index is the count of the element
		
		num = index
		ft = e.TIME
		cmd = string.sub(e.DATA,1,1)
		print(cmd)
		if( cmd ~= "F" and cmd ~= "D" )
		then
			cmd = "F"	-- Treat all unknowns as F
		end
		
		-- Show the network
		
		show_network( network_picture )
		
		-- (4) Handle the data for F or M commands
		
		if( cmd == "F" )
		then
			auto_handle_fire(num,ft,e.DATA,queue_list)
		else
			auto_handle_delay(num,ft,e.DATA,queue_list)
		end
	end
end

-------------------------------------------------------------------------------
--
--  handle_fire(num,ft,queue_list) - Handle a FIRE line
--
--  INPUT: 		num	- Line number from key file
--				ft	- Firing time from key file
--				data- Data from key file
--				queue_list	- Add this element to output list
--
--  OUTPUT      Generate a command elment of the form
--				e.TYPE = "C"
--				e.DATA = "<num> <Firing Time> <F> <NODE> <CHANNEL>
--		And add this to queue_list
--
-------------------------------------------------------------------------------
		
function handle_fire( num,ft,data,queue )
	local node,ch
	local e
	local out
	
	-- (1) Create list
	
	e = {}
	e.TYPE = "C"
	
	-- (2) Fill it in
	
	out = string.format("%04d %s [%s] NODE: ",num,ft,data)
	io.write(out)
	node = io.read("*l")
	node = tonumber(node)
	io.write("Channel: ")
	ch = io.read("*l")
	
	-- (3) Form output message
	
	e.DATA = string.format("%s %09d F NODE%02d %s",num,1000*ft,node,ch)
		
	-- (4) Add to output
	
	table.insert(queue,e)
	
	-- (5) Update the network picture
	
	network_picture = fire_network( ch,node,network_picture )
end

-------------------------------------------------------------------------------
--
--  handle_delay(num,ft,queue_list) - Handle a MULTIPLE line
--
--  INPUT: 		num	- Line number from key file
--				ft	- Firing time from key file
--				data- Data from key file
--				queue_list	- Add this element to output list
--
--  OUTPUT      Generate a variable # of firing commands
--				e.TYPE = "C"
--				e.DATA = "<num> <Firing Time> <D> <NODE> <CHANNEL> <DELAY>
--		And add these to queue_list
--
-------------------------------------------------------------------------------
		
function handle_delay( num,ft,data,queue )
	local node,ch
	local e
	local out
	local loop = 1
	local i = 1
	local mark_time = 1000*ft - DELAY_BACKUP	-- Back up these
	
	-- (1) Loop to generate a number of these
	
	while( loop == 1 )
	do
	
		-- (2a) on second and subsequent passes show network
		-- status
		
		if( i > 1 )
		then
			show_network(network_picture)
		end
		
		-- (2) Create a firing element
		
		e = {}
		e.TYPE = "C"
		
		-- (2) Fill it in
		
		out = string.format("CMD[%d] %s %s [%s] NODE: ",i,num,ft,data)
		i = i + 1
		io.write(out)
		node = io.read("*l")
		node = tonumber(node)
		if( node < 0 )
		then
			-- Ok done inputting
			loop = nil
			break
		end
		io.write("Channel: ")
		ch = io.read("*l")
		
		-- (3) Form output message
		
		e.DATA = string.format("%04d %08d D NODE%02d %s %08d",num,mark_time,node,ch,1000*ft)
		
		-- (4) Add to output
		
		table.insert(queue,e)
		
		-- (5) Update the network picture
	
		network_picture = fire_network( ch,node,network_picture )
	end
end

-------------------------------------------------------------------------------
--
--  auto_handle_fire(num,ft,queue_list) - Handle a FIRE line
--
--  INPUT: 		num	- Line number from key file
--				ft	- Firing time from key file
--				data- Data from key file
--				queue_list	- Add this element to output list
--
--  OUTPUT      Generate a command elment of the form
--				e.TYPE = "C"
--				e.DATA = "<num> <Firing Time> <F> <NODE> <CHANNEL>
--		And add this to queue_list
--
-- Use the auto node and auto channel varibles to fill this in
--
-------------------------------------------------------------------------------
		
function auto_handle_fire( num,ft,data,queue )
	local node,ch
	local e
	local out
	
	-- (1) Create list
	
	e = {}
	e.TYPE = "C"
	
	-- (2) Fill it in and update the auto channel
	
	node = auto_node
	ch = auto_ch;
	next_auto()
	
	-- (3) Form output message
	
	e.DATA = string.format("%04d %08d F NODE%02d %s",num,1000*ft,node,ch)
		
	-- (4) Add to output
	
	table.insert(queue,e)
	
	-- (5) Update the network picture
	
	network_picture = fire_network( ch,node,network_picture )
end

-------------------------------------------------------------------------------
--
--  auto_handle_delay(num,ft,queue_list) - Handle a MULTIPLE line
--
--  INPUT: 		num	- Line number from key file
--				ft	- Firing time from key file
--				data- Data from key file
--				queue_list	- Add this element to output list
--
--  OUTPUT      Generate a variable # of firing commands
--				e.TYPE = "C"
--				e.DATA = "<num> <Firing Time> <D> <NODE> <CHANNEL> <DELAY>
--		And add these to queue_list
--
-------------------------------------------------------------------------------
		
function auto_handle_delay( num,ft,data,queue )
	local node,ch
	local e
	local out
	local loop = 1
	local i = 1
	local mark_time = 1000*ft - DELAY_BACKUP	-- Back up these
	local count
	
	-- Pull the count of items from the
	-- second item in the DATA (i.e. D3)
	
	count = string.sub(data,2,2)
	count = tonumber(count)
	
	-- (1) Loop to generate a number of these
	
	for i=1,count
	do
	
		-- (2a) on second and subsequent passes show network
		-- status
		
		if( i > 1 )
		then
			show_network(network_picture)
		end
		
		-- (2) Create a firing element
		
		e = {}
		e.TYPE = "C"
		
		-- (2) Fill it in
		
		node = auto_node
		ch = auto_ch
		next_auto()
				
		-- (3) Form output message
		
		e.DATA = string.format("%04d %08d D NODE%02d %s %08d",num,mark_time,node,ch,1000*ft)
		
		-- (4) Add to output
		
		table.insert(queue,e)
		
		-- (5) Update the network picture
	
		network_picture = fire_network( ch,node,network_picture )
	end
end


-------------------------------------------------------------------------------
--
--  output_file( index,el )
--
--  INPUT:      index	- Index of this line in the file
--				el		- Element with type and data
--
--  OUTPUT      Output each of these lines to queue_queue file
--
-------------------------------------------------------------------------------

function output_file( index,el )
	local out
	
	queue_file:write(el.DATA )
	queue_file:write("\n")
end

-------------------------------------------------------------------------------
--
--  next_auto()
--
--  INPUT:      NONE
--
--  OUTPUT      Update auto_node and auto_ch for the next run
--				advance node first
--
-------------------------------------------------------------------------------

function next_auto()

	auto_node = auto_node + 1
	if( auto_node > box_count )
	then
		-- Reset back to starting node
		auto_node = 1
		-- Advance channel
		auto_ch = auto_ch + 1
		if( auto_ch > 5 )
		then
			auto_ch = 0
		end
	end
end
-------------------------------------------------------------------------------

							-- Main Code       --

-------------------------------------------------------------------------------

-- (1) Get Key file and check
-- Also get box count

print("-- Mark Up Queue File --")
print()

kfile = flag_srch( arg,"-L",1)
if( kfile == nil )
then
	io.write("Lable File: ")
	kfile = io.read("*l")
end

-- (2) Get queue output file

qfile = flag_srch( arg,"-Q",1)
if( qfile == nil )
then
	io.write("Queue File: ")
	qfile = io.read("*l")
end

music_file = flag_srch( arg,"-M",1)
if( music_file == nil )
then
	io.write("Music File: ")
	music_file = io.read("*l")
end

-- (3) Get box count for processing

box_count = flag_srch(arg,"-n",1)
if( box_count ~= nil )
then
	box_count = tonumber(box_count);
else
	box_count = 5		-- Set to default
end

-- (3a) Check for autofill function

auto_fill = flag_srch( arg,"-A")

DELAY_BACKUP = flag_srch( arg,"-D",1 )
if( DELAY_BACKUP == nil )
then
	DELAY_BACKUP = 200
end


-- (4) Read key file and process
-- Build a network picture for the run

network_picture = gen_network( box_count )

list = read_key( kfile )

if( list ~= nil )
then
	-- (5) Handle each line, clear output list first
	
	queue_list = {}
	
	-- (5b) Do each output element
	
	if( auto_fill )
	then
		table.foreach( list, auto_key_line )-- Auto fill
	else
		table.foreach( list,key_line)		-- Manual fill
	end
	
	-- (6) Do the open the output file and run the data
	
	queue_file = io.open(qfile,"w")
	if( queue_file ~= nil )
	then
		-- Put header on the file
		
		queue_file:write("#--------------------------------------------------------------\n")
		out = string.format("# MUSIC=%s DATE: %s\n",music_file,os.date())
		queue_file:write(out)
		queue_file:write("#--------------------------------------------------------------\n")
		queue_file:write("\n")
		
		-- Start the output run
		
		print("Generating ",qfile)
		table.foreach(queue_list,output_file)
		queue_file:close()
	end
end

print("-- End Run --")

Added Scripts/labels.txt.







































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.785034	1.785034	FLarge
4.141279	4.141279	FSmall
4.926694	4.926694	FStd
7.854150	7.854150	FStd
8.782367	8.782367	FStd
10.567401	10.567401	D3picece
13.352054	13.352054	D2pieces
14.280272	14.280272	Flarge
18.564354	18.564354	D4pieces
18.921361	18.921361	Fsrd
19.920980	19.920980	Fstd
22.634231	22.634231	D4
23.705252	23.705252	D6
28.346340	28.346340	D2
29.203156	29.203156	D3
50.123755	50.123755	D2
51.051973	51.051973	Fstd
51.980190	51.980190	D4
52.908408	52.908408	Fstd

Deleted Scripts/playfile.cmd.

1
os.execute("afplay ../../Scripts/stars_stripes_forever.mp3 &")
<


Changes to Scripts/playshow.lua.

1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
18
19
20
-------------------------------------------------------------------------------
-- Copyright (C) 2009, Pandora Products
--
-- Module Name: playshow.lua
--
-- Description: Play a show through the firing boxes
--
--  Suntax:	firenet -p [Port name] [-n #boxes] -c fireshow.lua -M <music file> 
--					-Q <queue file>
--
--  19-Sep-2009  Initial Version
--	20-Sep-2009	 Add firing actions
--	21-Sep-2009  Add music shutdown

--
-------------------------------------------------------------------------------

require "firenet_sup"	-- FIRENET support functions

-- Local support functions -------














>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-------------------------------------------------------------------------------
-- Copyright (C) 2009, Pandora Products
--
-- Module Name: playshow.lua
--
-- Description: Play a show through the firing boxes
--
--  Suntax:	firenet -p [Port name] [-n #boxes] -c fireshow.lua -M <music file> 
--					-Q <queue file>
--
--  19-Sep-2009  Initial Version
--	20-Sep-2009	 Add firing actions
--	21-Sep-2009  Add music shutdown
--	21-May-2010 [ba31d5cae3] Convert to NEWNET version
--
-------------------------------------------------------------------------------

require "firenet_sup"	-- FIRENET support functions

-- Local support functions -------

90
91
92
93
94
95
96


97
98
99
100
101
102
103
104
105
106

107
108
109
110
111
112
113
					then
						part.CMD = pat
					end
					
					if( i == 4 )				-- NODE
					then
						part.NODE = pat


					end
					
					if( i == 5 )				-- CHANNEL
					then
						part.CH = pat
					end
					
					if( i == 6 )				-- DELAY (on D cmds)
					then
						part.DELAY = pat

					end
					i = i + 1
				end
				
				-- Add to the list
				list.n = list.n + 1
				list[list.n] = part







>
>










>







91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
					then
						part.CMD = pat
					end
					
					if( i == 4 )				-- NODE
					then
						part.NODE = pat
						part.NODE = string.sub(part.NODE,5,6)
						part.NODE = tonumber( part.NODE )	-- Just get node #
					end
					
					if( i == 5 )				-- CHANNEL
					then
						part.CH = pat
					end
					
					if( i == 6 )				-- DELAY (on D cmds)
					then
						part.DELAY = pat
						part.DELAY = tonumber( part.DELAY )
					end
					i = i + 1
				end
				
				-- Add to the list
				list.n = list.n + 1
				list[list.n] = part
143
144
145
146
147
148
149
150
151
152

153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204


205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220

221

222
223
224
225
226
227
228

-- (2) Open network and create basic timer function

net = firenet.new()
show_timer = timer.new()
print("-- Waiting for NETWORK READY --")
print()
timer.sleep(5000)

list = read_queue( qfile )

if( list ~= nil )
then

	-- (3) Ready for run
	-- Prep network
	
	net_map = build_fnet_map(net)
	net_status = build_fnet_status(net)	
	
	if( net_map ~= nil and net_status ~= nil )
	then
	
		-- Build a global packet for here
		
		pkt = {}
		
		-- (4) Starting Show hold for input
		
		print("-- Input S to start show, any other ABORT --")
		inp = io.read("*l")
		if( inp == "S" )
		then
			print("-- SHOW STARTING --")
			
			-- ARM all the boxes
			
			pkt.CMD = "A"
			pkt.DATA = "A"
			
			for i in pairs(FNET_MAP) 
			do
				pkt.TO = i
				net:write(pkt)
			end
						
			-- Start music, zero timer, and send SYNC command
			
			pkt.CMD = "Z"
			pkt.TO = BCAST_ADDR
			pkt.DATA = ""
			show_timer:start()				-- Start timer
			net:write(pkt)					-- Send sync
			pid = play_file( mfile )		-- Start music
			
			-- (5) Walk through the list and fire when timer is correct
	
			for i=1,list.n
			do
				-- Loop waiting for next event
				-- from queue.  When found exit loop
				-- and move to next item in list
				-- Note we do the list in time order


				
				loop = 1
				while( loop )
				do
					part = list[i]
					now = show_timer:read()
					if( now >= part.FT )
					then
						pkt.CMD = part.CMD
						pkt.TO = part.NODE
						pkt.DATA = part.CH
						if( part.DELAY ~= nil )
						then
							pkt.DELAY = part.DELAY
						end
						

						print("SENDING: ",part.DATA)

						net:write(pkt)
						loop = nil
					else
						-- Put a sleep here to prevent the
						-- loop from hogging the system
						
						timer.sleep( 50 )			-- Idle 50 ms







|


>






<
|

|
















<
|
<
<
<
|
|
<



|

|

<










>
>






|

|

<


|


>
|
>







147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163

164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

183



184
185

186
187
188
189
190
191
192

193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214

215
216
217
218
219
220
221
222
223
224
225
226
227
228
229

-- (2) Open network and create basic timer function

net = firenet.new()
show_timer = timer.new()
print("-- Waiting for NETWORK READY --")
print()
--timer.sleep(5000)

list = read_queue( qfile )

if( list ~= nil )
then

	-- (3) Ready for run
	-- Prep network
	

	net_status = build_fnet_status(nil,net)	
	
	if(  net_status ~= nil )
	then
	
		-- Build a global packet for here
		
		pkt = {}
		
		-- (4) Starting Show hold for input
		
		print("-- Input S to start show, any other ABORT --")
		inp = io.read("*l")
		if( inp == "S" )
		then
			print("-- SHOW STARTING --")
			
			-- ARM all the boxes
			

			pkt.DATA = "AA"



			pkt.TO = BCAST_ADDR
			net:write(pkt)

						
			-- Start music, zero timer, and send SYNC command
			
			pkt.DATA = "Z"
			pkt.TO = BCAST_ADDR
			net:write(pkt)					-- Send sync
			show_timer:start()				-- Start timer

			pid = play_file( mfile )		-- Start music
			
			-- (5) Walk through the list and fire when timer is correct
	
			for i=1,list.n
			do
				-- Loop waiting for next event
				-- from queue.  When found exit loop
				-- and move to next item in list
				-- Note we do the list in time order
				-- NOTE: If we have a delay fire it right away
				-- otherwise wait for time
				
				loop = 1
				while( loop )
				do
					part = list[i]
					now = show_timer:read()
					if( now >= part.FT  )
					then
						pkt.DATA = part.CMD .. part.CH
						pkt.TO = part.NODE

						if( part.DELAY ~= nil )
						then
							pkt.DATA = pkt.DATA .. part.DELAY
						end
						
						out = string.format("TO [%d] Sent: [%s]",pkt.TO,pkt.DATA)
						print(out)
						
						net:write(pkt)
						loop = nil
					else
						-- Put a sleep here to prevent the
						-- loop from hogging the system
						
						timer.sleep( 50 )			-- Idle 50 ms
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
			timer.sleep( 5000 )		-- Ensure show is finished
			play_file_stop( pid )
			
			-- DISARM all the boxes
			
			print("-- Disarm Show Over --")
			
			pkt.CMD = "A"
			pkt.DATA = "D"
			
			for i in pairs(FNET_MAP) 
			do
				pkt.TO = i
				net:write(pkt)
			end

		else
			print("*** ABORT SHOW - Power down equipment ***")
		end
	else
		print("*** NETWORK PROBLEM ***")
	end
end

print("-- End Run --")
print()









<
|
<
<
<
|
|
<













237
238
239
240
241
242
243

244



245
246

247
248
249
250
251
252
253
254
255
256
257
258
259
			timer.sleep( 5000 )		-- Ensure show is finished
			play_file_stop( pid )
			
			-- DISARM all the boxes
			
			print("-- Disarm Show Over --")
			

			pkt.DATA = "AD"



			pkt.TO = BCAST_ADDR
			net:write(pkt)


		else
			print("*** ABORT SHOW - Power down equipment ***")
		end
	else
		print("*** NETWORK PROBLEM ***")
	end
end

print("-- End Run --")
print()


Deleted Scripts/stars_stripes_forever.mp3.

cannot compute difference between binary files

Added Scripts/test.lua.























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- Test lua script

require "firenet_sup"

function show_el( index,element)
	if( type(element) == "table" )
	then
		print("Element ",index)
		table.foreach( element,print)
	else
		print("Element ",index,"Value ",element)
	end
end

function show_stuff( index,element)
	print("NODE ",index)
	table.foreach(element,show_el)
end

h = firenet.new()

build_fnet_status( nil,h)

print("-- Print Map --")
table.foreach(FNET_MAP,show_stuff)

timer.sleep( 2000 )

Added Shows/QueFinder/QueFinder/QueFinder.xcodeproj/project.pbxproj.









































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		3810F5C11C32B04900336A4E /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 3810F5C01C32B04900336A4E /* main.c */; };
		384794111C32B16500F859F1 /* waverdr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3847940F1C32B16500F859F1 /* waverdr.c */; };
		384794BB1C35378700F859F1 /* PeakFinder.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794B91C35378700F859F1 /* PeakFinder.c */; };
		384794C21C35542E00F859F1 /* Hdr.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794C01C35542E00F859F1 /* Hdr.c */; };
		384794C71C35675500F859F1 /* Nodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 384794C51C35675500F859F1 /* Nodes.c */; };
		384794C81C35675500F859F1 /* Nodes.h in Sources */ = {isa = PBXBuildFile; fileRef = 384794C61C35675500F859F1 /* Nodes.h */; };
		38AEF00F1C3A789200E79ABE /* Plot.c in Sources */ = {isa = PBXBuildFile; fileRef = 38AEF00D1C3A789200E79ABE /* Plot.c */; };
		38AEF0131C3AAC7200E79ABE /* Correlation.c in Sources */ = {isa = PBXBuildFile; fileRef = 38AEF0111C3AAC7200E79ABE /* Correlation.c */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		3810F5BB1C32B04900336A4E /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = /usr/share/man/man1/;
			dstSubfolderSpec = 0;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 1;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		3810F5BD1C32B04900336A4E /* QueFinder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = QueFinder; sourceTree = BUILT_PRODUCTS_DIR; };
		3810F5C01C32B04900336A4E /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
		3847940F1C32B16500F859F1 /* waverdr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = waverdr.c; sourceTree = "<group>"; };
		384794101C32B16500F859F1 /* waverdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = waverdr.h; sourceTree = "<group>"; };
		384794B91C35378700F859F1 /* PeakFinder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PeakFinder.c; sourceTree = "<group>"; };
		384794BA1C35378700F859F1 /* PeakFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = PeakFinder.h; sourceTree = "<group>"; };
		384794C01C35542E00F859F1 /* Hdr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Hdr.c; sourceTree = "<group>"; };
		384794C11C35542E00F859F1 /* Hdr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = Hdr.h; sourceTree = "<group>"; };
		384794C51C35675500F859F1 /* Nodes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Nodes.c; sourceTree = "<group>"; };
		384794C61C35675500F859F1 /* Nodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = Nodes.h; sourceTree = "<group>"; };
		38AEF00D1C3A789200E79ABE /* Plot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Plot.c; sourceTree = "<group>"; };
		38AEF00E1C3A789200E79ABE /* Plot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Plot.h; sourceTree = "<group>"; };
		38AEF0111C3AAC7200E79ABE /* Correlation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Correlation.c; sourceTree = "<group>"; };
		38AEF0121C3AAC7200E79ABE /* Correlation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Correlation.h; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		3810F5BA1C32B04900336A4E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		3810F5B41C32B04900336A4E = {
			isa = PBXGroup;
			children = (
				3810F5BF1C32B04900336A4E /* QueFinder */,
				3810F5BE1C32B04900336A4E /* Products */,
			);
			sourceTree = "<group>";
		};
		3810F5BE1C32B04900336A4E /* Products */ = {
			isa = PBXGroup;
			children = (
				3810F5BD1C32B04900336A4E /* QueFinder */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		3810F5BF1C32B04900336A4E /* QueFinder */ = {
			isa = PBXGroup;
			children = (
				3810F5C01C32B04900336A4E /* main.c */,
				384794BD1C3553FF00F859F1 /* Support */,
			);
			path = QueFinder;
			sourceTree = "<group>";
		};
		3847940E1C32B16500F859F1 /* Wave */ = {
			isa = PBXGroup;
			children = (
				3847940F1C32B16500F859F1 /* waverdr.c */,
				384794101C32B16500F859F1 /* waverdr.h */,
			);
			name = Wave;
			path = ../../Wave;
			sourceTree = "<group>";
		};
		384794BD1C3553FF00F859F1 /* Support */ = {
			isa = PBXGroup;
			children = (
				38AEF0101C3AAC5600E79ABE /* Correlation */,
				38AEF00C1C3A787800E79ABE /* Plot */,
				384794C41C3565B000F859F1 /* Nodes */,
				384794BF1C35541B00F859F1 /* Header */,
				384794BE1C35540B00F859F1 /* Peak */,
				3847940E1C32B16500F859F1 /* Wave */,
			);
			name = Support;
			sourceTree = "<group>";
		};
		384794BE1C35540B00F859F1 /* Peak */ = {
			isa = PBXGroup;
			children = (
				384794BA1C35378700F859F1 /* PeakFinder.h */,
				384794B91C35378700F859F1 /* PeakFinder.c */,
			);
			name = Peak;
			sourceTree = "<group>";
		};
		384794BF1C35541B00F859F1 /* Header */ = {
			isa = PBXGroup;
			children = (
				384794C01C35542E00F859F1 /* Hdr.c */,
				384794C11C35542E00F859F1 /* Hdr.h */,
			);
			name = Header;
			sourceTree = "<group>";
		};
		384794C41C3565B000F859F1 /* Nodes */ = {
			isa = PBXGroup;
			children = (
				384794C51C35675500F859F1 /* Nodes.c */,
				384794C61C35675500F859F1 /* Nodes.h */,
			);
			name = Nodes;
			sourceTree = "<group>";
		};
		38AEF00C1C3A787800E79ABE /* Plot */ = {
			isa = PBXGroup;
			children = (
				38AEF00D1C3A789200E79ABE /* Plot.c */,
				38AEF00E1C3A789200E79ABE /* Plot.h */,
			);
			name = Plot;
			sourceTree = "<group>";
		};
		38AEF0101C3AAC5600E79ABE /* Correlation */ = {
			isa = PBXGroup;
			children = (
				38AEF0111C3AAC7200E79ABE /* Correlation.c */,
				38AEF0121C3AAC7200E79ABE /* Correlation.h */,
			);
			name = Correlation;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		3810F5BC1C32B04900336A4E /* QueFinder */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 3810F5C41C32B04900336A4E /* Build configuration list for PBXNativeTarget "QueFinder" */;
			buildPhases = (
				3810F5B91C32B04900336A4E /* Sources */,
				3810F5BA1C32B04900336A4E /* Frameworks */,
				3810F5BB1C32B04900336A4E /* CopyFiles */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = QueFinder;
			productName = QueFinder;
			productReference = 3810F5BD1C32B04900336A4E /* QueFinder */;
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		3810F5B51C32B04900336A4E /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 0720;
				ORGANIZATIONNAME = "Pandora,Inc";
				TargetAttributes = {
					3810F5BC1C32B04900336A4E = {
						CreatedOnToolsVersion = 7.2;
					};
				};
			};
			buildConfigurationList = 3810F5B81C32B04900336A4E /* Build configuration list for PBXProject "QueFinder" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
			);
			mainGroup = 3810F5B41C32B04900336A4E;
			productRefGroup = 3810F5BE1C32B04900336A4E /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				3810F5BC1C32B04900336A4E /* QueFinder */,
			);
		};
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
		3810F5B91C32B04900336A4E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				38AEF0131C3AAC7200E79ABE /* Correlation.c in Sources */,
				384794C81C35675500F859F1 /* Nodes.h in Sources */,
				384794BB1C35378700F859F1 /* PeakFinder.c in Sources */,
				3810F5C11C32B04900336A4E /* main.c in Sources */,
				38AEF00F1C3A789200E79ABE /* Plot.c in Sources */,
				384794C71C35675500F859F1 /* Nodes.c in Sources */,
				384794C21C35542E00F859F1 /* Hdr.c in Sources */,
				384794111C32B16500F859F1 /* waverdr.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		3810F5C21C32B04900336A4E /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				CODE_SIGN_IDENTITY = "-";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = macosx;
			};
			name = Debug;
		};
		3810F5C31C32B04900336A4E /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				CODE_SIGN_IDENTITY = "-";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = macosx;
			};
			name = Release;
		};
		3810F5C51C32B04900336A4E /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				PRODUCT_NAME = "$(TARGET_NAME)";
			};
			name = Debug;
		};
		3810F5C61C32B04900336A4E /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				PRODUCT_NAME = "$(TARGET_NAME)";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		3810F5B81C32B04900336A4E /* Build configuration list for PBXProject "QueFinder" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				3810F5C21C32B04900336A4E /* Debug */,
				3810F5C31C32B04900336A4E /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		3810F5C41C32B04900336A4E /* Build configuration list for PBXNativeTarget "QueFinder" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				3810F5C51C32B04900336A4E /* Debug */,
				3810F5C61C32B04900336A4E /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 3810F5B51C32B04900336A4E /* Project object */;
}

Added Shows/QueFinder/QueFinder/QueFinder.xcodeproj/project.xcworkspace/contents.xcworkspacedata.















>
>
>
>
>
>
>
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:QueFinder.xcodeproj">
   </FileRef>
</Workspace>

Added Shows/QueFinder/QueFinder/QueFinder.xcodeproj/project.xcworkspace/xcuserdata/jim.xcuserdatad/UserInterfaceState.xcuserstate.

cannot compute difference between binary files

Added Shows/QueFinder/QueFinder/QueFinder.xcodeproj/xcuserdata/jim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist.











































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
   type = "1"
   version = "2.0">
   <Breakpoints>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511233.890202"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "128"
            endingLineNumber = "128"
            landmarkName = "wave_frame_fread()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "61"
            endingLineNumber = "61"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511233.890202"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "303"
            endingLineNumber = "303"
            landmarkName = "wave_open_read()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511233.890202"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "266"
            endingLineNumber = "266"
            landmarkName = "wave_open_read()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511233.890202"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "260"
            endingLineNumber = "260"
            landmarkName = "wave_open_read()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "177"
            endingLineNumber = "177"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "161"
            endingLineNumber = "161"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/PeakFinder.c"
            timestampString = "473268557.429143"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "56"
            endingLineNumber = "56"
            landmarkName = "ScanData()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/Hdr.c"
            timestampString = "473258369.147145"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "44"
            endingLineNumber = "44"
            landmarkName = "GetHeader()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/Hdr.c"
            timestampString = "473258694.428339"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "70"
            endingLineNumber = "70"
            landmarkName = "GetHeader()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/Hdr.c"
            timestampString = "473258722.739692"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "61"
            endingLineNumber = "61"
            landmarkName = "GetHeader()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "79"
            endingLineNumber = "79"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/PeakFinder.c"
            timestampString = "473268557.429143"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "115"
            endingLineNumber = "115"
            landmarkName = "ScanDataOutput()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "Yes"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/PeakFinder.h"
            timestampString = "473268557.429143"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "31"
            endingLineNumber = "31">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/Nodes.c"
            timestampString = "473334598.524275"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "65"
            endingLineNumber = "65"
            landmarkName = "GetNextNode()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604451.317491"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "146"
            endingLineNumber = "146"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "../Wave/waverdr.c"
            timestampString = "473511229.857623"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "412"
            endingLineNumber = "412"
            landmarkName = "wave_find_data()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/main.c"
            timestampString = "473604435.181687"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "179"
            endingLineNumber = "179"
            landmarkName = "main()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
      <BreakpointProxy
         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
         <BreakpointContent
            shouldBeEnabled = "No"
            ignoreCount = "0"
            continueAfterRunningActions = "No"
            filePath = "QueFinder/Plot.c"
            timestampString = "473605353.016784"
            startingColumnNumber = "9223372036854775807"
            endingColumnNumber = "9223372036854775807"
            startingLineNumber = "45"
            endingLineNumber = "45"
            landmarkName = "plotData()"
            landmarkType = "7">
         </BreakpointContent>
      </BreakpointProxy>
   </Breakpoints>
</Bucket>

Added Shows/QueFinder/QueFinder/QueFinder.xcodeproj/xcuserdata/jim.xcuserdatad/xcschemes/QueFinder.xcscheme.



















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0720"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "3810F5BC1C32B04900336A4E"
               BuildableName = "QueFinder"
               BlueprintName = "QueFinder"
               ReferencedContainer = "container:QueFinder.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "3810F5BC1C32B04900336A4E"
            BuildableName = "QueFinder"
            BlueprintName = "QueFinder"
            ReferencedContainer = "container:QueFinder.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "3810F5BC1C32B04900336A4E"
            BuildableName = "QueFinder"
            BlueprintName = "QueFinder"
            ReferencedContainer = "container:QueFinder.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <CommandLineArguments>
         <CommandLineArgument
            argument = "-v"
            isEnabled = "NO">
         </CommandLineArgument>
         <CommandLineArgument
            argument = "-i x.wav"
            isEnabled = "NO">
         </CommandLineArgument>
         <CommandLineArgument
            argument = "-i ode.wav -hdr ode.hdr -nodes 8 -o ode.json -plt"
            isEnabled = "YES">
         </CommandLineArgument>
      </CommandLineArguments>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "3810F5BC1C32B04900336A4E"
            BuildableName = "QueFinder"
            BlueprintName = "QueFinder"
            ReferencedContainer = "container:QueFinder.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>

Added Shows/QueFinder/QueFinder/QueFinder.xcodeproj/xcuserdata/jim.xcuserdatad/xcschemes/xcschememanagement.plist.













































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>SchemeUserState</key>
	<dict>
		<key>QueFinder.xcscheme</key>
		<dict>
			<key>orderHint</key>
			<integer>0</integer>
		</dict>
	</dict>
	<key>SuppressBuildableAutocreation</key>
	<dict>
		<key>3810F5BC1C32B04900336A4E</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
	</dict>
</dict>
</plist>

Added Shows/QueFinder/QueFinder/QueFinder/Hdr.c.





























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
//  Hdr.c		Read header files
//  QueFinder
//
//	Of the form
//	# <comment>
//	Show name
//	Show file
//	Show time (MM:SS)
//
//  Created by Jim on 31/12/2015.
//  Copyright © 2015 Pandora,Inc. All rights reserved.
//

#include <stdlib.h>
#include <string.h>
#include "Hdr.h"

#if 0
	#pragma mark -
	#pragma mark External API
#endif

//------------------------------------------------------------------------------
/*
	SHOW_HDR *GetHeader( char *name ) - Read header file
	
	INPUT:	name	- Header file name
	
	OUTPUT:	SHOW_HDR struct or NULL
*/
//------------------------------------------------------------------------------

SHOW_HDR *GetHeader( char *name )
{
	SHOW_HDR *hdr = NULL;
	FILE *fp;
	char buffer[HDR_SIZE];
	int slot = 0;
	size_t n;

	// (1) Can we open the file ?

	fp = fopen(name,"r");
	if( fp != NULL )
	{
		// Build a header struct

		hdr = (SHOW_HDR *)calloc(sizeof(SHOW_HDR),1);
		if( hdr != NULL )
		{

			// Ok read the file line by line
			while(fgets(buffer,HDR_SIZE,fp) != NULL )
			{
				// Coment ?

				if( buffer[0] != CMT_MARK && buffer[0] != '\n')
				{
					n = strlen( buffer );
					buffer[n-1] = '\0';		// Trim \n
					switch( slot )
					{
						case 0:	strncpy(hdr->name,buffer,HDR_SIZE);
								break;

						case 1:	strncpy(hdr->file,buffer,HDR_SIZE);
								break;

						case 2:	strncpy(hdr->time,buffer,HDR_SIZE);
								break;
					}

					slot = slot +1;
					if( slot > 2 )
						break;
				}
			}

			fclose(fp);

			if( slot != 3 )
			{
				// Bad file

				FreeHeader(hdr);
				hdr = NULL;
			}
		}
	}

	return hdr;
}
void Print_Header(SHOW_HDR *hdr,FILE *out);

//------------------------------------------------------------------------------
/*
	void FreeHeader(SHOW_HDR *hdr) - Delete header
	
	INPUT:	hdr	- Header structure
	
	OUTPUT:	NONE
*/
//------------------------------------------------------------------------------

void FreeHeader(SHOW_HDR *hdr)
{
	if( hdr != NULL )
		free( hdr );
}

Added Shows/QueFinder/QueFinder/QueFinder/Hdr.h.























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//
//  Hdr.h
//  QueFinder
//
//  Created by Jim on 31/12/2015.
//  Copyright © 2015 Pandora,Inc. All rights reserved.
//

#ifndef Hdr_h
#define Hdr_h

#include <stdio.h>

#define HDR_SIZE	64
#define CMT_MARK	'#'

typedef struct {
				char name[HDR_SIZE+1];
				char file[HDR_SIZE+1];
				char time[HDR_SIZE+1];
				} SHOW_HDR;

SHOW_HDR *GetHeader( char *name );
void Print_Header(SHOW_HDR *hdr,FILE *out);
void FreeHeader(SHOW_HDR *hdr);

#endif /* Hdr_h */

Added Shows/QueFinder/QueFinder/QueFinder/Nodes.c.











































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//
//  Nodes.c
//  QueFinder
//
//  Created by Jim on 31/12/2015.
//  Copyright © 2015 Pandora,Inc. All rights reserved.
//

#include "stdlib.h"
#include "Nodes.h"


#if 0
	#pragma mark -
	#pragma mark External API
#endif

//------------------------------------------------------------------------------
/*
	NODES *BuildNodes(int n) - Build a set of nodes
	
	INPUT:	n	- # of nodes
	
	OUTPUT:	NODES struct or NULL
*/
//------------------------------------------------------------------------------

NODES *BuildNodes(int n)
{
	NODES *base;

	base = (NODES *)calloc(1,sizeof(NODES));
	if( base != NULL )
	{
		base->count = n;
		base->list = (NODE *)calloc(1,n * sizeof(NODE));
		if( base->list == NULL )
		{
			// FAILURE

			free(base);
			base = NULL;
		}
	}

	return base;
}

//------------------------------------------------------------------------------
/*
	int GetNextNode(NODES *list,NODE *nd);
	
	INPUT:	list	- List of nodes
			node	- Node found
			channel	- Channel on node found
	
	OUTPUT:	0 if returned node, <> 0 if not
*/
//------------------------------------------------------------------------------

int GetNextNode(NODES *list,int *node,int *channel)
{
	int i,j;

	for( i=0; i<list->count; i++)
	{
		for(j=0;j<6;j++)
		{
			if( list->list[i].channel[j] == 0 )
			{
				*node = i + 1;
				*channel = j + 1;
				list->list[i].channel[j] = 1;
				return 0;		// Success
			}
		}
	}
	return -1;
}

//------------------------------------------------------------------------------
/*
	void FreeNodes(NODES *list) - Free node list
	
	INPUT:	list	- List of nodes

	
	OUTPUT:	Free list
*/
//------------------------------------------------------------------------------

void FreeNodes(NODES *list)
{
	if( list != NULL )
	{
		if(list->list != NULL)
			free(list->list);

		free(list);
	}
	}

Added Shows/QueFinder/QueFinder/QueFinder/Nodes.h.

























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//
//  Nodes.h
//  QueFinder
//
//  Created by Jim on 31/12/2015.
//  Copyright © 2015 Pandora,Inc. All rights reserved.
//

#ifndef Nodes_h
#define Nodes_h

#include <stdio.h>

typedef struct {
			int node;
			char channel[6];
		} NODE;

typedef struct {
			int count;
			NODE *list;
		} NODES;

NODES *BuildNodes(int n);
int GetNextNode(NODES *list,int *node,int *channel);
void FreeNodes(NODES *list);

#endif /* Nodes_h */

Added Shows/QueFinder/QueFinder/QueFinder/PeakFinder.c.















































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
//
//  PeakFinder.c
//  QueFinder
//
//  Created by Jim on 30/12/2015.
//  Copyright © 2015 Pandora,Inc. All rights reserved.
//

#include "PeakFinder.h"
#if 0
	#pragma mark -
	#pragma mark Data
#endif

static PEAK *MakePeak( WAVE_HDL *wave,float *data,NODES *list,int psn);

#if 0
	#pragma mark -
	#pragma mark External API
#endif

//------------------------------------------------------------------------------
/*
	PEAK *ScanData( WAVE_HDL *wave,float *data,NODES *listfloat,int threshold,float width) - Find peaks
	
	INPUT:	wave		- Handle to open wave file
			data		- Floating point sound data from proc file
			list		- Node data list
			threahold	- 0-1.0 value for peak value
			width		- width of peak in ms
			
	OUTPUT:	Linked list of wave peaks
*/
//------------------------------------------------------------------------------

PEAK *ScanData( WAVE_HDL *wave,float *data,NODES *list,float threshold,float width)
{
	PEAK *base = NULL;
	PEAK *p = NULL;
	PEAK *last = NULL;
	int i;
	int peak_blank;

	// Calculate how long to blank after each peak

	peak_blank = (int) (width/1000 * wave->rate);

	// Scan data and capture peaks

	for( i=0; i< wave->frames; i++)
	{
		if( data[i] > threshold)
		{
			// Starting a new peak

			p = MakePeak(wave,data,list,i);

			// Add to list

			if( base == NULL )
			{
				base = p;
				last = p;
			}
			else
			{
				last->next = p;
				last = p;
			}

			// Skip fwd over blanking time

			i = i + peak_blank;
		}
	}

	return base;
}

//------------------------------------------------------------------------------
/*
	int ScanDataSize(PEAK *p)	- Count peaks
		
	INPUT:	p	- Peak list
	OUTPUT:	count of # of peaks
*/
//------------------------------------------------------------------------------

int ScanDataSize(PEAK *p)
{
	int rtnval = 0;
	while( p != NULL )
	{
		p = p->next;
		rtnval++;
	}
	
	return rtnval;
}

//------------------------------------------------------------------------------
/*
	int ScanDataOutput(PEAK *p,NODES *list,SHOW_HDR *hdr,char *outfile);
		
	INPUT:	p		- Peak list
			list	- Node list
			hdr		- Header data
			outfile	- Output file name

	OUTPUT:	0 if OK <> 0 if not
*/
//------------------------------------------------------------------------------

int ScanDataOutput(PEAK *p,NODES *list,SHOW_HDR *hdr,char *outfile)
{
	int delay;
	FILE *out;
	int rtnval = -1;

	// (1) open the file and quit if bad

	out = fopen(outfile,"w");
	if( out != NULL )
	{
		// (2) Do the header

		fprintf(out,"{\n");
		fprintf(out,"\t\"show\"\t\t:\t\"%s\",\n",hdr->name);
		fprintf(out,"\t\"music\"\t\t:\t\"%s\",\n",hdr->file);
		fprintf(out,"\t\"time\"\t\t:\t\"%s\",\n",hdr->time);
		fprintf(out,"\t\"nodes\"\t\t:\t\"%d\",\n",list->count);

		// Do the prograrm
		fprintf(out,"\t\"program\"\t: [\n");

		while( p != NULL )
		{
			delay = (int)(p->time * 1000.0 + 0.5);
			fprintf(out,"\t\t\t{\"node\" : \"%d\" , \"ch\" : \"%d\" , \"delay\" : \"%d\" }",
										p->node,
										p->channel,
										delay);
			p = p->next;
			if( p != NULL )
				fprintf(out,",\n");
			else
				fprintf(out,"\n");
		}

		// Close the json

		fprintf(out,"\t\t\t\t]\n");
		fprintf(out,"}\n");

		fclose(out);
		rtnval = 0;
	}

	return rtnval;
}
void ScanDataFree( PEAK *p)
{
	PEAK *pn;

	while( p != NULL )
	{
		pn = p->next;
		free(p);
		p = pn;
	}
}

#if 0
	#pragma mark -
	#pragma mark Internal API
#endif

static PEAK *MakePeak( WAVE_HDL *wave,float *data,NODES *list,int psn)
{
	PEAK *p;
	int node,channel;

	p = calloc(1, sizeof(PEAK));
	if( p != NULL )
	{
		// Fill it in

		p->peak_value = data[psn];
		p->index = psn;
		p->time = (float)psn / (float)wave->rate;
		if( list != NULL && GetNextNode(list, &node, &channel) == 0)
		{
			p->node = node;
			p->channel = channel;
		}
	}

	return p;
}

Added Shows/QueFinder/QueFinder/QueFinder/PeakFinder.h.









































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//
//  PeakFinder.h
//  QueFinder
//
//  Created by Jim on 30/12/2015.
//  Copyright © 2015 Pandora,Inc. All rights reserved.
//

#ifndef PeakFinder_h
#define PeakFinder_h

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "Hdr.h"
#include "Nodes.h"
#include "waverdr.h"

typedef struct dummy_cue {
								struct dummy_cue *next;
								float peak_value;		// Value @ peak
								int index;				// Index into data
								float time;				// MS into musical piece
								int fire_time;			// Time after DTMF time subtracted
								int node;
								int channel;
							} PEAK;

// External API

PEAK *ScanData( WAVE_HDL *wave,float *data,NODES *list,float threshold,float width);
int ScanDataSize(PEAK *p);
int ScanDataOutput(PEAK *p,NODES *list,SHOW_HDR *hdr,char *outfile);
void ScanDataFree( PEAK *p);

#endif /* PeakFinder_h */

Added Shows/QueFinder/QueFinder/QueFinder/main.c.

























































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268

//------------------------------------------------------------------------------
/*
	main.c
	QueFinder

	Created by Jim on 29/12/2015.
	Copyright © 2015 Pandora,Inc. All rights reserved.
	
	Cmd line:
		-i	<input files>	-nodes <# nodes> -hdr <header file> -o <output file>

*/
//------------------------------------------------------------------------------

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "waverdr.h"
#include "Hdr.h"
#include "Nodes.h"
#include "PeakFinder.h"
#include "Plot.h"


static int flag_srch(int argc,const char *argv[],
					char *flag,int get_value,
					char **rtn );
static void print_help(void);


int main(int argc, const char * argv[])
{
	char *ptr;
	WAVE_HDL *ifile;
	SHOW_HDR *hdr;
	NODES *nlist;
	float *buffer;
	int frames;
	PEAK *base;
	int count = 0;
	char inbuf[25];
	float threshold = 0.8;
	float width = 100.0;
	int n;
	int nodes;
	char *outfile;
	char plot = 0;

	//------------------------------------------------------------------------------
	// (1) Handle input options
	
	if( flag_srch( argc,argv,"-v",0,&ptr) )		// Handle -v
	{
		print_help();
		return( 0 );
	}

	if( flag_srch( argc,argv,"-i",1,&ptr) )		// Input sound file
	{
		ifile = wave_open(ptr,"r",NULL);

		if( ifile == NULL )
		{
			printf("*** ERROR Could not read [%s] Input sound file\n",ptr);
			print_help();
			return(-1);
		}
	}
	else
	{
		printf("*** ERROR NO Input Sound File\n");
		print_help();
		return( - 1 );
	}

	if( flag_srch( argc,argv,"-hdr",1,&ptr) )		// Input header file
	{
		hdr = GetHeader(ptr);

		if( hdr == NULL )
		{
			printf("*** ERROR Could not read [%s] Input header file\n",ptr);
			print_help();
			return(-1);
		}
	}
	else
	{
		printf("*** ERROR NO Input Header File\n");
		print_help();
		return( - 1 );
	}

	if( flag_srch( argc,argv,"-nodes",1,&ptr) )		// Input # nodes
	{
		nodes = (int)strtol(ptr,NULL,0);

		if( nodes < 0 || nodes > 10 )
		{
			printf("*** Bad node count [%d]\n",nodes);
			print_help();
			return(-1);
		}
		else
		{
			nlist = BuildNodes(nodes);
			if( nlist == NULL )
			{
				printf("*** ERROR Bad node list\n");
				print_help();
				return( - 1 );
			}
		}
	}
	else
	{
		printf("*** ERROR NO nodes value\n");
		print_help();
		return( - 1 );
	}

	if( flag_srch( argc,argv,"-o",1,&ptr) )		// Out pgm file
	{
		outfile = ptr;
	}
	else
	{
		printf("*** ERROR NO Output Program File\n");
		print_help();
		return( - 1 );
	}

	if( flag_srch( argc,argv,"-plt",0,&ptr) )		// Plot data generation
	{
		plot = 1;
	}

	//------------------------------------------------------------------------------
	// Process file
	// Read the data file

	buffer = (float *)calloc(2,sizeof(float) * ifile->frames);
	if( buffer != NULL )
	{
		frames = wave_frame_fread(ifile, (int)ifile->frames, buffer);
		printf("Frames Read %d\n",frames);

		// Get an acceptable # of peaks

		while( 1 )
		{
			printf("Input threshold (0-1.0): ");
			fgets(inbuf,25,stdin);
			n = sscanf(inbuf,"%f",&threshold);

			printf("Input Width (ms): ");
			fgets(inbuf,25,stdin);
			n = sscanf(inbuf,"%f",&width);

			base = ScanData(ifile,buffer,NULL,threshold,width);
			count = ScanDataSize(base);
			ScanDataFree(base);		// Free up trial

			printf("Found %d peaks\n",count);
			printf("OK (Y/n):");
			fgets(inbuf,25,stdin);
			if( inbuf[0] == 'Y')
				break;

		}

		// Run with current parameters
		base = ScanData(ifile,buffer,nlist,threshold,width);
		ScanDataOutput(base,nlist,hdr,outfile);

		if( plot)
		{
			plotData( 40*ifile->rate,1.0 * ifile->rate,buffer,base);
		}

		ScanDataFree(base);
		FreeHeader(hdr);
		wave_close(ifile);
	}
	

    return 0;
}

/***********************************************************************
*
*  print_help(void)
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*			Print program help
*
**********************************************************************/

static void print_help(void)
{
	printf("QueFinder - Find Que's in WAV File %s %s\n",__DATE__,__TIME__);
	printf("SYNTAX: firewalker   -i <Wave IN> -o <Queue OUT>\n");
	printf("\n");
	printf("    -i <Audio IN>       Stereo WAV file for queuing\n");
	printf("    -nodes <# nodes>    # Firing nodes\n");
	printf("    -hdr <header file>  File with show data\n");
	printf("    -o  <output file>   Show output file\n");
	printf("    -plt                Generate Plot files\n");
	printf("    [-v]                Show this message and return\n");
	printf("\n");
}

/***********************************************************************
*
*  FLAG_SRCH(argc,argv,flag,get_value,&rtn )
*
*	INPUT:	argc,argv	- Command line parameters
*		flag		- String (flag) to be found
*		get_value	- TRUE return pointer to next item
*				  FALSE no pointer returned
*		rtn		- Return pointer (NULL if not used or
*						  *				  found)
*
*	OUTPUT:	TRUE if flag found
*		FALSE if not
*		Scan argument list for flag
*		If found then TRUE is returned and if get_value TRUE
*		return rtn pointing to string in argv[] following
*		the flag
*		NOTE only exact matches will be found
*
**********************************************************************/

static int flag_srch(int argc,const char *argv[],char *flag,int get_value,char **rtn )
{
	int i;
	const char *ptr;

	/*  Scan through the argv's and look for a matching flag */

	for( i=0; i<argc; i++ )
	{
		ptr = argv[i];
		if( strcmp(ptr,flag) == 0 )
		{

			/*  Match found, return pointer to the following
			(if requested or NULL if not)
			*/
			i++;
			if( get_value && i < argc )
				*rtn = (char *)argv[i];
			else
				*rtn = NULL;
			return( 1 );
		}
	}

	/*  Failure exit here, so return to user with FALSE */

	return( 0 );
}



Added Shows/QueFinder/Wave/waverdr.c.









































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
/***************************************************************************
*  Copyright (C) 2005,  Pandora Products
*						vze35xda@verizon.net
* This is FREE SOFTWARE it can be used for any purpose and can be included
* in any project with no obligations to Pandora Products.
****************************************************************************/
/*
	waverdr.c	- File to read/write WAVE files
	
	API:	WAVE_HDL *wave_open( char *name,char *mode,WAVE_HDL *proto);
			void wave_close( WAVE_HDL *h );
			int wave_frame_fread( WAVE_HDL *h,int frames,float *frame_buf);
			int wave_frame_fwrite( WAVE_HDL *h,int frames,float *frame_buf);


	Changes	15-Dec-2005		Initial version
 */
//************************************************************************

#include <string.h>
#include <stdlib.h>
#include "waverdr.h"

// Internal routines

static WAVE_HDL *wave_open_read( FILE *h );
static WAVE_HDL *wave_open_write( FILE *h, WAVE_HDL *proto );
static int wave_find_data(int start,int size,char *buffer);


#pragma mark -- EXTERNAL API --

/*****************************************************************************
*
*  WAVE_HDL *wave_open( char *name,char *mode,WAVE_HDL *proto) - Open wave file
*
*	INPUT:	name	- Name of file to open
*			mode	- "r" or "w"
*			proto	- Prototype for "w" open will create header info using
*					this information
*					IGNORED on read
*
*	OUTPUT:	Pointer to handle for read or write of file
*
******************************************************************************/

WAVE_HDL *wave_open( char *name,char *mode,WAVE_HDL *proto)
{
	WAVE_HDL *fp = NULL;
	FILE *h;
	char internal_mode[10];
	
	// (1) Open the file and fail if not
	// Make the open "rb" or "wb"
	
	strncpy(internal_mode,mode,10);
	strncat(internal_mode,"b",10);
	h = fopen(name,internal_mode);
	if( h != NULL )
	{
		// (2) Open OK so handle READ or WRITE
		
		switch( mode[0] )
		{
			case 'r':		fp = wave_open_read( h );
							break;
							
			case 'w':		fp = wave_open_write(h,proto );
							break;
					
			default:		fp = NULL;
							break;
		}
	}
	
	return( fp );
}
	
/*****************************************************************************
*
*  void wave_close( WAVE_HDL *h )
*
*	INPUT:	h	- Open wave handle
*
*	OUTPUT:	Close file and wipe structure
*
******************************************************************************/

void wave_close( WAVE_HDL *h )
{
	if( h != NULL )
	{
		fclose( h->fp );
		free( h );
	}
}

/*****************************************************************************
*
*  int wave_frame_fread( WAVE_HDL *h,int frames,float *frame_buf)
*
*	INPUT:	h			Handle structure
*			frames		Read this many frames
*			frame_buf	Put output float here (must be large enought to hold data)
*
*	OUTPUT:	Read input, little endian -32768 to 32767 -> -1.0 to 1.0 float
*			return # frames read
*
******************************************************************************/

int wave_frame_fread( WAVE_HDL *hdl,int frames,float *frame_buf)
{
	char *buffer;
	int i,j,size;
	int psn = 0;
	int outpsn = 0;
	short val;
	
	// (1) Calculate # bytes to read & build a buffer to hold it
	
	size = hdl->frame_size * frames;
	buffer = (char *)calloc(1,size);
	if( buffer != NULL )
	{
		// (2) Read in buffer
		
		size = (int)fread(buffer,1,size,hdl->fp);
		if( size > 0 )
		{
			// (3) Now convert the input value into a float
			// Calculate how many frames we have
			
			frames = size / hdl->frame_size;

			// (3a) Move FWD to 'data' + 3 bytes to start of data

			psn = wave_find_data(0,size,buffer);

			// (4) Now read frames
			
			for( i=0; i<frames; i++ )
			{
				// On each frame generate the 2 byte
				// word for each and convert to -1.0/1.0 float
				
				for(j=0,val=0; j<hdl->channels; j++ )
				{
					val = 0xff & (0xff & buffer[psn++]);		// Low order first
					val = val + ((0xff & buffer[psn++])<<8);	// High order
					
					// Convert to float
					
					frame_buf[outpsn++] = (float)val/32768.0;
				}
			}
		}
		else
			frames = 0;
	
		// Free the read buffer
		
		 free( buffer );
	}
	else
		frames = 0;

	return( frames );
}

/*****************************************************************************
*
*  int wave_frame_fwrite( WAVE_HDL *h,int frames,float *frame_buf)
*
*	INPUT:	h			Handle structure
*			frames		Write this many frames
*			frame_buf	From here
*
*	OUTPUT:	Write data as frames, little endian -32768 to 32767 -> -1.0 to 1.0 float
*			Return # Frames written
*
******************************************************************************/

int wave_frame_fwrite( WAVE_HDL *hdl,int frames,float *frame_buf)
{
	char *buffer;
	int i,j,size;
	int psn = 0;
	int outpsn = 0;
	short val;

	// (1) Calculate # bytes to write & build a buffer to hold it
	
	size = hdl->frame_size * frames;
	buffer = (char *)calloc(1,size);
	if( buffer != NULL )
	{
		// (2) Write the input floats to this buffer
		// After conversion to +/- 32768
		
		for( i=0; i<frames; i++ )
		{
			// Generate the short from the float then
			// write in little endian order to buffer
			
			for(j=0; j<hdl->channels; j++ )
			{
				val = (short)(32768.0 * frame_buf[psn++]);
				
				buffer[outpsn++] = (char)(val & 0xff);
				buffer[outpsn++] = (char)((val>>8) & 0xff);
			}
		}
		
		// (3) Now write this output to the buffer
		// Calculate # frames written
		
		size = (int)fwrite(buffer,1,size,hdl->fp);
		frames = size / hdl->frame_size;
		
		// Free the read buffer
		
		 free( buffer );
	}
	else
		frames = 0;

	return( frames );
}


#pragma mark -- Internal API --

/*****************************************************************************
*
*  WAVE_HDL *wave_open_read( char *name) - Open wave file
*
*	INPUT:	h	- Open wave file
*
*	OUTPUT:	Handle to wave file filled out with internal data
*
******************************************************************************/

static WAVE_HDL *wave_open_read( FILE *h )
{
	int size;
	WAVE_HDL *hdl;
	
	// (1) Create wave file handle
	
	hdl = (WAVE_HDL *)calloc(1,sizeof(WAVE_HDL));
	if( hdl != NULL )
	{
		// (2) Read in the file chunks 
		
		size = (int)fread(hdl->hdr.buffer,1,WAVE_FILE_HDR_DATA,h);			// Header data
		if( size == WAVE_FILE_HDR_DATA )
		{
			// Get size of file, if start == RIFF then next is little
			// endian data size
			if( hdl->hdr.buffer[0] == 'R' &&
				hdl->hdr.buffer[1] == 'I' &&
				hdl->hdr.buffer[2] == 'F' &&
				hdl->hdr.buffer[3] == 'F' )
			{
				// Get the size as little endian
				hdl->frames = 0;
				hdl->frames += (0xff & hdl->hdr.buffer[7])<<24;
				hdl->frames += (0xff & hdl->hdr.buffer[6])<<16;
				hdl->frames += (0xff & hdl->hdr.buffer[5])<<8;
				hdl->frames += (0xff & hdl->hdr.buffer[4]);
			}

			size = (int)fread(hdl->fmt.buffer,1,WAVE_FMT_DATA,h);			// Format header chunk
			if( size == WAVE_FMT_DATA )
			{
				size = (int)fread(hdl->data.buffer,1,WAVE_DATA_DATA,h );	// Data header
				if( size == WAVE_DATA_DATA )
				{
					// At this point the header points to the data area
					// So fill in the handle with the needed data
					
					hdl->fp = h;		// File handle
					
					// # Channels = Byte 10 of format data buffer
					
					hdl->channels = 0xff & hdl->fmt.buffer[10];
					
					// Rate = bytes 12 & 13 of fmt block in little endian format
					
					hdl->rate = 0xff & hdl->fmt.buffer[13];
					hdl->rate = hdl->rate<<8;					// Move to top byte
					hdl->rate += 0xff &  hdl->fmt.buffer[12];	// Bottom byte
					
					// Bits/sample = byte 22 of fmt data buffer
					// then divide this by 8 to and mul by channels =  bytes/frame
					
					hdl->frame_size = 0xff & hdl->fmt.buffer[22];
					hdl->frame_size = (hdl->frame_size * hdl->channels)/8;
					
					// # Frames First get data size (long value 4-7 in data hdr)
					// In little endian order
					// Then divide this by frame size
					
					hdl->frames /= hdl->frame_size;
				}
			}
		}
	}
	
	return( hdl );
}

/*****************************************************************************
*
*  WAVE_HDL *wave_open_write( char *name)
*
*	INPUT:	h		Open wave file
*			proto	Prototype file (copy this file)
*
*	OUTPUT:	Handle to wave file handle filled out with internal data
*			And header data written to output file
*
******************************************************************************/

static WAVE_HDL *wave_open_write( FILE *fp, WAVE_HDL *proto )
{
	int size;
	WAVE_HDL *hdl;
	
	// (1) Create wave file handle
	
	hdl = (WAVE_HDL *)calloc(1,sizeof(WAVE_HDL));
	if( hdl != NULL )
	{
		// (2) Copy the prototype data into this handle
		
		hdl->channels		= proto->channels;
		hdl->rate			= proto->rate;
		hdl->frames			= proto->frames;
		hdl->frame_size		= proto->frame_size;
		hdl->fp				= fp;
		hdl->write_access	= 1;
		
		// (3) Copy the header blocks
		
		memcpy(hdl->hdr.buffer,proto->hdr.buffer,WAVE_FILE_HDR_DATA);
		memcpy(hdl->fmt.buffer,proto->fmt.buffer,WAVE_FMT_DATA);
		memcpy(hdl->data.buffer,proto->data.buffer,WAVE_DATA_DATA);
		
		// (4) Write the header data to the output file
		
		size = (int)fwrite(hdl->hdr.buffer,1,WAVE_FILE_HDR_DATA,fp);
		size = (int)fwrite(hdl->fmt.buffer,1,WAVE_FMT_DATA,fp);
		size = (int)fwrite(hdl->data.buffer,1,WAVE_DATA_DATA,fp);
	}
	
	return( hdl );
}

/*****************************************************************************
*
*  int wave_find_data(int start,char *buffer)	- Find start of data
*
*	INPUT:	start	- Psn to start search
*			size	- # bytes in buffer
*			buffer	- Data buffer
*
*	OUTPUT:	Find 'data' marker and move to start of data
*			- 1 if not found
*
*	DATA Chunk 
*		data		- 4 Bytes char
*		size		- 4 bytes
*
******************************************************************************/

static int wave_find_data(int start,int size,char *buffer)
{
	int rtnval = -1;
	int i;
	int step = 0;

	// Search for data

	for( i=start;i<size;i++)
	{
		switch( step )
		{
			case 0:	if( buffer[i] == 'd')
						step++;
					break;

			case 1:	if( buffer[i] == 'a')
						step++;
					else
						step = 0;
					break;

			case 2:	if( buffer[i] == 't')
						step++;
					else
						step = 0;
					break;

			case 3:	if( buffer[i] == 'a')
						step ++;
					else
						step = 0;
					break;

			case 4:	// Found, move past size and to data
					rtnval = i + 4;
					return( rtnval );
		}
	}

			return rtnval;
}

		

Added Shows/QueFinder/Wave/waverdr.h.















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/***************************************************************************
*  Copyright (C) 2005,  Pandora Products
*						vze35xda@verizon.net
* This is FREE SOFTWARE it can be used for any purpose and can be included
* in any project with no obligations to Pandora Products.
****************************************************************************/
/*
	waverdr.h	- File to read/write WAVE files
	
	API:	WAVE_HDL *wave_open( char *name,char *mode,WAVE_HDL *proto);
			void wave_close( WAVE_HDL *h );
			int wave_frame_fread( WAVE_HDL *h,int frames,float *frame_buf);
			int wave_frame_fwrite( WAVE_HDL *h,int frames,float *frame_buf);


	Changes	15-Dec-2005		Initial version
 */
//************************************************************************

#include <stdio.h>

#ifndef WAVERDR_H
#define WAVERDR_H

#define WAVE_FILE_HDR_DATA	12			// Length in bytes
typedef struct {
					int length;
					unsigned char buffer[WAVE_FILE_HDR_DATA];		// Raw data
				} WAVE_FILE_HDR;
				
#define WAVE_FMT_DATA		24			// Length in bytes
typedef struct {
					int channels;		// # Channels/frame
					int rate;			// Frames/sec
					int channel_bits;	// Bits/channel
					
					unsigned char buffer[WAVE_FMT_DATA];
				} WAVE_FMT;
				
#define WAVE_DATA_DATA		8			// Length in bytes
typedef struct {
					long datasize;		// # Bytes in data
					unsigned char buffer[WAVE_DATA_DATA];
				} WAVE_DATA;
				
typedef struct {
					// Wave handle used for file access to WAVE data file
					
					WAVE_FILE_HDR		hdr;		// Header data from file
					WAVE_FMT			fmt;		// Format data from file
					WAVE_DATA			data;		// Data header from file
					
					int channels;		// # Channels/frame
					int rate;			// Rate in frames/sec
					unsigned long frames;// # Frames of data following
					int frame_size;		// # bytes/frame
					
					int					write_access;// TRUE on write
					FILE				*fp;		// File handle
			} WAVE_HDL;

// ****
// API
// ****

WAVE_HDL *wave_open( char *name,char *mode,WAVE_HDL *proto);
void wave_close( WAVE_HDL *h );
int wave_frame_fread( WAVE_HDL *h,int frames,float *frame_buf);
int wave_frame_fwrite( WAVE_HDL *h,int frames,float *frame_buf);

#endif

Added Shows/mariseillaise.json.















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
	"show"		:	"La Mariseillaise",
	"music" 	:	"marseillaise.mp3",
	"time"		:	"1:03",
	"nodes"		:	"8",
	"program" : [
			{ "node" : "1", "ch" : "1" , "delay" : "1631" },
			{ "node" : "2", "ch" : "1" , "delay" : "2149" },
			{ "node" : "3", "ch" : "1" , "delay" : "2718" },
			{ "node" : "4", "ch" : "1" , "delay" : "3685" },
			{ "node" : "5", "ch" : "1" , "delay" : "4159" },
			{ "node" : "6", "ch" : "1" , "delay" : "5220" },
			{ "node" : "7", "ch" : "1" , "delay" : "5853" },
			{ "node" : "8", "ch" : "1" , "delay" : "6637" },
			{ "node" : "1", "ch" : "2" , "delay" : "6835" },
			{ "node" : "2", "ch" : "2" , "delay" : "7052" },
			{ "node" : "3", "ch" : "2" , "delay" : "7875" },
			{ "node" : "4", "ch" : "2" , "delay" : "8131" },
			{ "node" : "5", "ch" : "2" , "delay" : "8922" },
			{ "node" : "6", "ch" : "2" , "delay" : "11301" },
			{ "node" : "7", "ch" : "2" , "delay" : "11685" },
			{ "node" : "8", "ch" : "2" , "delay" : "12218" },
			{ "node" : "1", "ch" : "3" , "delay" : "13253" },
			{ "node" : "2", "ch" : "3" , "delay" : "15458" },
			{ "node" : "3", "ch" : "3" , "delay" : "15825" },
			{ "node" : "4", "ch" : "3" , "delay" : "16337" },
			{ "node" : "5", "ch" : "3" , "delay" : "17243" },
			{ "node" : "6", "ch" : "3" , "delay" : "19848" },
			{ "node" : "7", "ch" : "3" , "delay" : "24543" },
			{ "node" : "8", "ch" : "3" , "delay" : "27134" },
			{ "node" : "1", "ch" : "4" , "delay" : "27928" },
			{ "node" : "2", "ch" : "4" , "delay" : "30049" },
			{ "node" : "3", "ch" : "4" , "delay" : "33568" },
			{ "node" : "4", "ch" : "4" , "delay" : "35894" },
			{ "node" : "5", "ch" : "4" , "delay" : "41001" },
			{ "node" : "6", "ch" : "4" , "delay" : "42049" },
			{ "node" : "7", "ch" : "4" , "delay" : "43071" },
			{ "node" : "8", "ch" : "4" , "delay" : "43921" },
			{ "node" : "1", "ch" : "5" , "delay" : "45614" },
			{ "node" : "2", "ch" : "5" , "delay" : "46101" },
			{ "node" : "3", "ch" : "5" , "delay" : "47088" },
			{ "node" : "4", "ch" : "5" , "delay" : "47796" },
			{ "node" : "5", "ch" : "5" , "delay" : "49622" },
			{ "node" : "6", "ch" : "5" , "delay" : "51017" },
			{ "node" : "7", "ch" : "5" , "delay" : "52756" },
			{ "node" : "8", "ch" : "5" , "delay" : "53613" },
			{ "node" : "2", "ch" : "6" , "delay" : "54267" },
			{ "node" : "4", "ch" : "6" , "delay" : "54989" },
			{ "node" : "6", "ch" : "6" , "delay" : "56118" },
			{ "node" : "8", "ch" : "6" , "delay" : "57603" },
			{ "node" : "3", "ch" : "6" , "delay" : "59056" },
			{ "node" : "5", "ch" : "6" , "delay" : "60643" },
			{ "node" : "7", "ch" : "6" , "delay" : "61562" }
				]
}

Added Shows/mariseillaise4.json.



























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
	"show"		:	"La Mariseillaise4",
	"music" 	:	"marseillaise.mp3",
	"time"		:	"1:03",
	"nodes"		:	"4",
	"program" : [
			{ "node" : "1", "ch" : "1" , "delay" : "2480" },
			{ "node" : "1", "ch" : "2" , "delay" : "3563" },
			{ "node" : "1", "ch" : "3" , "delay" : "6242" },
			{ "node" : "1", "ch" : "4" , "delay" : "13315" },
			{ "node" : "1", "ch" : "5" , "delay" : "17122" },
			{ "node" : "1", "ch" : "6" , "delay" : "33305" },
			{ "node" : "2", "ch" : "1" , "delay" : "33391" },
			{ "node" : "2", "ch" : "2" , "delay" : "35509" },
			{ "node" : "2", "ch" : "3" , "delay" : "42111" },
			{ "node" : "2", "ch" : "4" , "delay" : "42660" },
			{ "node" : "2", "ch" : "5" , "delay" : "43116" },
			{ "node" : "2", "ch" : "6" , "delay" : "45770" },
			{ "node" : "3", "ch" : "1" , "delay" : "47410" },
			{ "node" : "3", "ch" : "2" , "delay" : "51580" },
			{ "node" : "3", "ch" : "3" , "delay" : "53654" },
			{ "node" : "3", "ch" : "4" , "delay" : "53758" },
			{ "node" : "3", "ch" : "5" , "delay" : "57373" },
			{ "node" : "3", "ch" : "6" , "delay" : "57889" },
			{ "node" : "4", "ch" : "1" , "delay" : "57936" },
			{ "node" : "4", "ch" : "2" , "delay" : "60703" },
			{ "node" : "4", "ch" : "3" , "delay" : "61247" }
		]
}

Added Shows/mariseillaise6.json.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
	"show"		:	"La Mariseillaise",
	"music" 	:	"marseillaise.mp3",
	"time"		:	"1:03",
	"nodes"		:	"6",
	"program" : [
			{ "node" : "1", "ch" : "1" , "delay" : "2480" },
			{ "node" : "2", "ch" : "1" , "delay" : "3563" },
			{ "node" : "3", "ch" : "1" , "delay" : "6242" },
			{ "node" : "4", "ch" : "1" , "delay" : "13315" },
			{ "node" : "5", "ch" : "1" , "delay" : "16053" },
			{ "node" : "6", "ch" : "1" , "delay" : "16578" },
			{ "node" : "1", "ch" : "2" , "delay" : "17122" },
			{ "node" : "2", "ch" : "2" , "delay" : "33305" },
			{ "node" : "3", "ch" : "2" , "delay" : "33391" },
			{ "node" : "4", "ch" : "2" , "delay" : "35509" },
			{ "node" : "5", "ch" : "2" , "delay" : "37697" },
			{ "node" : "6", "ch" : "2" , "delay" : "42094" },
			{ "node" : "1", "ch" : "3" , "delay" : "42111" },
			{ "node" : "2", "ch" : "3" , "delay" : "42660" },
			{ "node" : "3", "ch" : "3" , "delay" : "43116" },
			{ "node" : "4", "ch" : "3" , "delay" : "45770" },
			{ "node" : "5", "ch" : "3" , "delay" : "46843" },
			{ "node" : "6", "ch" : "3" , "delay" : "47335" },
			{ "node" : "1", "ch" : "4" , "delay" : "47410" },
			{ "node" : "2", "ch" : "4" , "delay" : "51580" },
			{ "node" : "3", "ch" : "4" , "delay" : "53654" },
			{ "node" : "4", "ch" : "4" , "delay" : "53758" },
			{ "node" : "5", "ch" : "4" , "delay" : "54743" },
			{ "node" : "6", "ch" : "4" , "delay" : "55267" },
			{ "node" : "1", "ch" : "5" , "delay" : "57373" },
			{ "node" : "2", "ch" : "5" , "delay" : "57889" },
			{ "node" : "3", "ch" : "5" , "delay" : "57936" },
			{ "node" : "4", "ch" : "5" , "delay" : "57955" },
			{ "node" : "5", "ch" : "5" , "delay" : "60148" },
			{ "node" : "6", "ch" : "5" , "delay" : "60703" },
			{ "node" : "2", "ch" : "6" , "delay" : "61247" }
		]
}

Added Shows/mariseillaise8.json.















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
{
	"show"		:	"La Mariseillaise",
	"music" 	:	"marseillaise.mp3",
	"time"		:	"1:03",
	"nodes"		:	"8",
	"program" : [
			{ "node" : "1", "ch" : "1" , "delay" : "1631" },
			{ "node" : "2", "ch" : "1" , "delay" : "2149" },
			{ "node" : "3", "ch" : "1" , "delay" : "2718" },
			{ "node" : "4", "ch" : "1" , "delay" : "3685" },
			{ "node" : "5", "ch" : "1" , "delay" : "4159" },
			{ "node" : "6", "ch" : "1" , "delay" : "5220" },
			{ "node" : "7", "ch" : "1" , "delay" : "5853" },
			{ "node" : "8", "ch" : "1" , "delay" : "6637" },
			{ "node" : "1", "ch" : "2" , "delay" : "6835" },
			{ "node" : "2", "ch" : "2" , "delay" : "7052" },
			{ "node" : "3", "ch" : "2" , "delay" : "7875" },
			{ "node" : "4", "ch" : "2" , "delay" : "8131" },
			{ "node" : "5", "ch" : "2" , "delay" : "8922" },
			{ "node" : "6", "ch" : "2" , "delay" : "11301" },
			{ "node" : "7", "ch" : "2" , "delay" : "11685" },
			{ "node" : "8", "ch" : "2" , "delay" : "12218" },
			{ "node" : "1", "ch" : "3" , "delay" : "13253" },
			{ "node" : "2", "ch" : "3" , "delay" : "15458" },
			{ "node" : "3", "ch" : "3" , "delay" : "15825" },
			{ "node" : "4", "ch" : "3" , "delay" : "16337" },
			{ "node" : "5", "ch" : "3" , "delay" : "17243" },
			{ "node" : "6", "ch" : "3" , "delay" : "19848" },
			{ "node" : "7", "ch" : "3" , "delay" : "24543" },
			{ "node" : "8", "ch" : "3" , "delay" : "27134" },
			{ "node" : "1", "ch" : "4" , "delay" : "27928" },
			{ "node" : "2", "ch" : "4" , "delay" : "30049" },
			{ "node" : "3", "ch" : "4" , "delay" : "33568" },
			{ "node" : "4", "ch" : "4" , "delay" : "35894" },
			{ "node" : "5", "ch" : "4" , "delay" : "41001" },
			{ "node" : "6", "ch" : "4" , "delay" : "42049" },
			{ "node" : "7", "ch" : "4" , "delay" : "43071" },
			{ "node" : "8", "ch" : "4" , "delay" : "43921" },
			{ "node" : "1", "ch" : "5" , "delay" : "45614" },
			{ "node" : "2", "ch" : "5" , "delay" : "46101" },
			{ "node" : "3", "ch" : "5" , "delay" : "47088" },
			{ "node" : "4", "ch" : "5" , "delay" : "47796" },
			{ "node" : "5", "ch" : "5" , "delay" : "49622" },
			{ "node" : "6", "ch" : "5" , "delay" : "51017" },
			{ "node" : "7", "ch" : "5" , "delay" : "52756" },
			{ "node" : "8", "ch" : "5" , "delay" : "53613" },
			{ "node" : "2", "ch" : "6" , "delay" : "54267" },
			{ "node" : "4", "ch" : "6" , "delay" : "54989" },
			{ "node" : "6", "ch" : "6" , "delay" : "56118" },
			{ "node" : "8", "ch" : "6" , "delay" : "57603" },
			{ "node" : "3", "ch" : "6" , "delay" : "59056" },
			{ "node" : "5", "ch" : "6" , "delay" : "60643" },
			{ "node" : "7", "ch" : "6" , "delay" : "61562" }
				]
}

Added Shows/marseillaise.mp3.

cannot compute difference between binary files

Added Shows/ode.json.









































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
	"show"		:	"Ode to Joy",
	"music"		:	"odeToJoy.mp3",
	"time"		:	"2:05",
	"nodes"		:	"8",
	"program"	: [
			{"node" : "1" , "ch" : "1" , "delay" : "15601" },
			{"node" : "1" , "ch" : "2" , "delay" : "21242" },
			{"node" : "1" , "ch" : "3" , "delay" : "32817" },
			{"node" : "1" , "ch" : "4" , "delay" : "37265" },
			{"node" : "1" , "ch" : "5" , "delay" : "41681" },
			{"node" : "1" , "ch" : "6" , "delay" : "43487" },
			{"node" : "2" , "ch" : "1" , "delay" : "45324" },
			{"node" : "2" , "ch" : "2" , "delay" : "46577" },
			{"node" : "2" , "ch" : "3" , "delay" : "68111" },
			{"node" : "2" , "ch" : "4" , "delay" : "69472" },
			{"node" : "2" , "ch" : "5" , "delay" : "69795" },
			{"node" : "2" , "ch" : "6" , "delay" : "73039" },
			{"node" : "3" , "ch" : "1" , "delay" : "73144" },
			{"node" : "3" , "ch" : "2" , "delay" : "73244" },
			{"node" : "3" , "ch" : "3" , "delay" : "73397" },
			{"node" : "3" , "ch" : "4" , "delay" : "73505" },
			{"node" : "3" , "ch" : "5" , "delay" : "76256" },
			{"node" : "3" , "ch" : "6" , "delay" : "77167" },
			{"node" : "4" , "ch" : "1" , "delay" : "77703" },
			{"node" : "4" , "ch" : "2" , "delay" : "78028" },
			{"node" : "4" , "ch" : "3" , "delay" : "78919" },
			{"node" : "4" , "ch" : "4" , "delay" : "80824" },
			{"node" : "4" , "ch" : "5" , "delay" : "82145" },
			{"node" : "4" , "ch" : "6" , "delay" : "83365" },
			{"node" : "5" , "ch" : "1" , "delay" : "83513" },
			{"node" : "5" , "ch" : "2" , "delay" : "83642" },
			{"node" : "5" , "ch" : "3" , "delay" : "84379" },
			{"node" : "5" , "ch" : "4" , "delay" : "87552" },
			{"node" : "5" , "ch" : "5" , "delay" : "87874" },
			{"node" : "5" , "ch" : "6" , "delay" : "87984" },
			{"node" : "6" , "ch" : "1" , "delay" : "92100" },
			{"node" : "6" , "ch" : "2" , "delay" : "94440" },
			{"node" : "6" , "ch" : "3" , "delay" : "94649" },
			{"node" : "6" , "ch" : "4" , "delay" : "95228" },
			{"node" : "6" , "ch" : "5" , "delay" : "97954" },
			{"node" : "6" , "ch" : "6" , "delay" : "98414" },
			{"node" : "7" , "ch" : "1" , "delay" : "102450" },
			{"node" : "7" , "ch" : "2" , "delay" : "106127" },
			{"node" : "7" , "ch" : "3" , "delay" : "108798" },
			{"node" : "7" , "ch" : "4" , "delay" : "114409" },
			{"node" : "7" , "ch" : "5" , "delay" : "114589" },
			{"node" : "7" , "ch" : "6" , "delay" : "123734" },
			{"node" : "8" , "ch" : "1" , "delay" : "123847" },
			{"node" : "8" , "ch" : "2" , "delay" : "124217" }
				]
}

Added Shows/odeToJoy.mp3.

cannot compute difference between binary files

Added Shows/shows.json.









































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
	"shows" : [
		{ "show"		:		"La Mariseillaise 4",
		  "file"		:	"mariseillaise4.json",
		  "nodes"		:	"4",
		  "time"		:	"1:02"
		  },
		  
		{ "show"		:	"La Mariseillaise 6",
		  "file"		:	"mariseillaise6.json",
		  "nodes"		:	"6",
		  "time"		:	"1:02"
		  },

		{ "show"		:	"La Mariseillaise 8",
		  "file"		:	"mariseillaise8.json",
		  "nodes"		:	"8",
		  "time"		:	"1:02"
		  },
		  
		  {
		  	"show"		:	"Stars & Stripes Forever",
		  	"file"		:	"ss_forever.json",
		  	"nodes"		:	"10",
		  	"time"		:	"3:38"
		  },
		  
		  {
			"show"		:	"Ode to Joy",
			"file"		:	"ode.json",
			"nodes"		:	"8",
			"time"		:	"2:05"
		  }

		]
}  

Added Shows/ss_forever.json.









































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
	"show"		:	"Stars & Stripes Forever",
	"music" 	:	"stars_stripes_forever.mp3",
	"time"		:	"3:38",
	"nodes"		:	"10",
	"program" : [
			{ "node" : "1", "ch" : "1" , "delay" : "320" },
			{ "node" : "2", "ch" : "1" , "delay" : "3960" },
			{ "node" : "3", "ch" : "1" , "delay" : "6540" },
			{ "node" : "4", "ch" : "1" , "delay" : "7480" },
			{ "node" : "5", "ch" : "1" , "delay" : "8590" },
			{ "node" : "6", "ch" : "1" , "delay" : "10020" },
			{ "node" : "7", "ch" : "1" , "delay" : "11460" },
			{ "node" : "8", "ch" : "1" , "delay" : "13240" },
			{ "node" : "9", "ch" : "1" , "delay" : "14150" },
			{ "node" : "10", "ch" : "1" , "delay" : "17890" },
			{ "node" : "1", "ch" : "2" , "delay" : "18360" },
			{ "node" : "2", "ch" : "2" , "delay" : "20510" },
			{ "node" : "3", "ch" : "2" , "delay" : "22350" },
			{ "node" : "4", "ch" : "2" , "delay" : "24250" },
			{ "node" : "5", "ch" : "2" , "delay" : "28190" },
			{ "node" : "6", "ch" : "2" , "delay" : "28940" },
			{ "node" : "7", "ch" : "2" , "delay" : "39720" },
			{ "node" : "8", "ch" : "2" , "delay" : "41170" },
			{ "node" : "9", "ch" : "2" , "delay" : "42170" },
			{ "node" : "10", "ch" : "2" , "delay" : "49420" },
			{ "node" : "1", "ch" : "3" , "delay" : "51630" },
			{ "node" : "2", "ch" : "3" , "delay" : "52380" },
			{ "node" : "3", "ch" : "3" , "delay" : "52790" },
			{ "node" : "4", "ch" : "3" , "delay" : "58140" },
			{ "node" : "5", "ch" : "3" , "delay" : "59530" },
			{ "node" : "6", "ch" : "3" , "delay" : "60300" },
			{ "node" : "7", "ch" : "3" , "delay" : "63410" },
			{ "node" : "8", "ch" : "3" , "delay" : "99450" },
			{ "node" : "9", "ch" : "3" , "delay" : "100500" },
			{ "node" : "10", "ch" : "3" , "delay" : "100850" },
			{ "node" : "1", "ch" : "4" , "delay" : "103460" },
			{ "node" : "2", "ch" : "4" , "delay" : "104980" },
			{ "node" : "3", "ch" : "4" , "delay" : "105470" },
			{ "node" : "4", "ch" : "4" , "delay" : "105950" },
			{ "node" : "5", "ch" : "4" , "delay" : "113320" },
			{ "node" : "6", "ch" : "4" , "delay" : "113790" },
			{ "node" : "7", "ch" : "4" , "delay" : "114790" },
			{ "node" : "8", "ch" : "4" , "delay" : "115760" },
			{ "node" : "9", "ch" : "4" , "delay" : "116710" },
			{ "node" : "10", "ch" : "4" , "delay" : "148900" },
			{ "node" : "1", "ch" : "5" , "delay" : "149930" },
			{ "node" : "2", "ch" : "5" , "delay" : "154160" },
			{ "node" : "3", "ch" : "5" , "delay" : "154960" },
			{ "node" : "4", "ch" : "5" , "delay" : "155400" },
			{ "node" : "5", "ch" : "5" , "delay" : "159230" },
			{ "node" : "6", "ch" : "5" , "delay" : "160990" },
			{ "node" : "7", "ch" : "5" , "delay" : "161500" },
			{ "node" : "8", "ch" : "5" , "delay" : "165420" },
			{ "node" : "9", "ch" : "5" , "delay" : "169320" },
			{ "node" : "10", "ch" : "5" , "delay" : "170790" },
			{ "node" : "2", "ch" : "6" , "delay" : "171720" },
			{ "node" : "4", "ch" : "6" , "delay" : "172660" },
			{ "node" : "6", "ch" : "6" , "delay" : "174760" },
			{ "node" : "8", "ch" : "6" , "delay" : "175230" },
			{ "node" : "10", "ch" : "6" , "delay" : "175770" },
			{ "node" : "3", "ch" : "6" , "delay" : "198830" },
			{ "node" : "5", "ch" : "6" , "delay" : "199420" },
			{ "node" : "7", "ch" : "6" , "delay" : "205310" },
			{ "node" : "9", "ch" : "6" , "delay" : "214110" }

				]
}

Added Shows/stars_stripes_forever.mp3.

cannot compute difference between binary files

Added Site/Site/AppController.j.













































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
/*
 *  AppController.j
 *  Site
 *
 *  Created by Jim on 17/11/2010.
 *  Copyright Pandora Products 2010. All rights reserved.
 *
 *	21-Nov-2010	Got working with server (REST interaction)
 *	 1-Dec-2010 Use Cappuccino JSON parsing
 *	12-Dec-2010 Moved AJAX into util object
 *	14-Dec-2010	Get URI back to host automatically
 *				data input is just the query.
 *	21-Dec-2020 Set up windows with a background
*/

@import <Foundation/CPObject.j>
@import "myAppUtils.j"

@implementation AppController : CPObject
{
	// Login operations & window
	CPWindow	loginWindow;		// Used for login
	@outlet		loginChal;			// Login challenge value
	@outlet		loginResp;			// Login response window
	
	// Main window buttons
    CPWindow    theWindow;			//this "outlet" is connected automatically by the Cib
	@outlet mainbDebug;				// Main window debug button
	@outlet mainbConsole;			// Main window console button
	@outlet mainbRun;				// Main window show button
	@outlet mainbLogout;			// Logout button
	@outlet loginReady;				// Ready status marker
	CPString lcnURI;				// Our location (get when loading)
	
	myAppUtils Utils;				// Utility function object
	
	CPWindow	debugWindow;		// Debug operation window
	@outlet		debugCmd;				// Debug Commad input slot
	@outlet		debugckPost;			// Post Checkbox
	@outlet		debugOutput;			// Debug Output slot

	// Console Window operations and controls
	CPWindow	consoleWindow;		// Console operation window

	// Run Window operations and controls
	CPWindow	runWindow;		// Run operation window
	
}

- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
    // This is called when the application is done loading.
	
	// var cib = [[CPCib alloc] initWithContentsOfURL:[[CPBundle mainBundle] pathForResource:@"MainMenu.cib"]];
	// [cib instantiateCibWithExternalNameTable:[CPDictionary dictionaryWithObject:self forKey:CPCibOwner]];
}

- (void)awakeFromCib
{
	var msg;
	var path;
	var content;
	
    // This is called when the cib is done loading.
    // You can implement this method on any object instantiated from a Cib.
    // It's a useful hook for setting up current UI values, and other things. 
    
    // In this case, we want the window from Cib to become our full browser window
    [theWindow setFullBridge:YES];
	
	[CPMenu setMenuBarVisible:NO];
		
	// Create our utility object
	
	Utils = [[myAppUtils alloc] init];
	
	// Create the location for further queries.  Host + /rest/
	
	lcnURI = window.location.protocol + "//" + window.location.hostname + ":"
				+ window.location.port + "/rest/";
	
	// Halt before run.
	
	debugger;
	
	// Disable buttons before run
	
	[mainbDebug setEnabled:false];
	[mainbConsole setEnabled:false];
	[mainbRun setEnabled:false];
	[mainbLogout setEnabled:false];
	
	// Issue a challenge/get response and then show login window
	// Note: Logout first...
	
	path = lcnURI + "admin/login/logout";
	[Utils getData:path PostState:true DataString:"" ];
	
	path = lcnURI + "admin/login/request";
	if( [Utils getData:path PostState:false DataString:"" ] )
	{
		msg = [Utils getParse ]
		[loginChal setStringValue:msg.CHAL ];
	}
	
	// Set up the windows with a background
	
	content = [theWindow contentView ];
	[content setBackgroundColor:[CPColor blueColor]];
	
	content = [loginWindow contentView ];
	[content setBackgroundColor:[CPColor yellowColor]];
	
	content = [debugWindow contentView ];
	[content setBackgroundColor:[CPColor orangeColor]];
	
	content = [consoleWindow contentView ];
	[content setBackgroundColor:[CPColor greenColor]];

	content = [runWindow contentView ];
	[content setBackgroundColor:[CPColor redColor]];
	
}

//-------------------------------------------------------------------
/*
	Login window support
*/
//-------------------------------------------------------------------

//-----------------------------------------------------------------------
//
// Login send button	- Press to send off response
//
//-----------------------------------------------------------------------

- (@action)loginSend:(id)sender
{
	var path;
	var msg;
	
	// Handle SEND button get string from login regponse
	
	path = lcnURI + "admin/login/response/" + [loginResp stringValue];
	if( [Utils getData:path PostState:true DataString:""] )
	{
		msg = [Utils getParse];
		if( msg.LOGIN == "OK" )
		{
			// Make Login window disappear
			
			[loginWindow orderOut:sender];
			
			// Show ready
			
			[loginReady setStringValue:@"-READY-"];

			// We are logged in
			// Enable buttons
			
			[mainbDebug setEnabled:true];
			[mainbConsole setEnabled:true];
			[mainbRun setEnabled:true];
			[mainbLogout setEnabled:true];
			
		}
		else
		{
			[loginResp setStringValue:"*FAIL*"];
		}
	}
}

//-----------------------------------------------------------------------
//
// Logout send button	- Press to send logout command
//
//-----------------------------------------------------------------------

- (@action)logoutButton:(id)sender
{
	var path;
	var msg;
	
	// Hide all the other windows
	
	[debugWindow orderOut:sender];
	[consoleWindow orderOut:sender];
	
	// Handle SEND button get string from login regponse
	
	path = lcnURI + "admin/login/logout";
	if( [Utils getData:path PostState:true DataString:""] )
	{
		msg = [Utils getResponse ];
		msg = [Utils getParse];
		if( msg.LOGOUT == "OK" )
		{
			// Disable all buttons

			[mainbDebug setEnabled:false];
			[mainbConsole setEnabled:false];
			[mainbRun setEnabled:false];
			[mainbLogout setEnabled:false];
			
			// & Show not ready
			[loginReady setStringValue:@""];
			
			// Make login window appear
			
			[loginWindow orderFront:sender];
			
			// & Update login criteria
			
			path = lcnURI + "admin/login/request"
			if( [Utils getData:path PostState:false DataString:"" ] )
			{
				msg = [Utils getParse ]
				[loginChal setStringValue:msg.CHAL ];
				[loginResp setStringValue:""];	
			}

		}
	}
}

//-------------------------------------------------------------------
/*
	Debug window support
*/
//-------------------------------------------------------------------

//-------------------------------------------------------------------
/*
	Hitting Debug button
*/
//-------------------------------------------------------------------

- (@action)debugShow:(id)sender
{
	// Disable the buttons and enable the debug window

	[mainbDebug setEnabled:false];
	[mainbConsole setEnabled:false];
	[mainbRun setEnabled:false];
	
	[debugWindow orderFront:sender];
}

//-------------------------------------------------------------------
/*
	Hitting Debug close window
*/
//-------------------------------------------------------------------

- (@action)debugDone:(id)sender
{
	// Clear debug window
	
	[debugCmd setStringValue:@""];
	[debugOutput setStringValue:@""];
	
	// Remove the debug window 
	
	[debugWindow orderOut:sender];
	
	// reenable buttons
	[mainbDebug setEnabled:true];
	[mainbConsole setEnabled:true];
	[mainbRun setEnabled:true];
}

//-------------------------------------------------------------------
/*
	Hitting Debug send command
*/
//-------------------------------------------------------------------

- (@action)debugSend:(id)sender
{
	var path;
	var post_state;
	var data;
	
	// (1) Build a path with the base path and the command
	
	path = lcnURI + [debugCmd stringValue];
	
	// (2) Get or POST
	
	if( [debugckPost state] == CPOffState )
		post_state = false;
	else
		post_state = true;
	
	// (3) Send and get data

	if(	[Utils getData:path PostState:post_state DataString:@""] )
	{
		data = [Utils getResponse];
		
		[debugOutput setStringValue:data];
	}
}

//-------------------------------------------------------------------
/*
	Console window support
*/
//-------------------------------------------------------------------

//-------------------------------------------------------------------
/*
	Hitting Console button
*/
//-------------------------------------------------------------------

- (@action)consoleShow:(id)sender
{
	// Disable the buttons and enable the debug window

	[mainbDebug setEnabled:false];
	[mainbConsole setEnabled:false];
	[mainbRun setEnabled:false];
	
	[consoleWindow orderFront:sender];
}

//-------------------------------------------------------------------
/*
	Hitting Console close window
*/
//-------------------------------------------------------------------

- (@action)consoleDone:(id)sender
{
	// Remove the Console window 
	
	[consoleWindow orderOut:sender];
	
	// reenable buttons
	[mainbDebug setEnabled:true];
	[mainbConsole setEnabled:true];
	[mainbRun setEnabled:true];
}

//-------------------------------------------------------------------
/*
	Run window support
*/
//-------------------------------------------------------------------

//-------------------------------------------------------------------
/*
	Hitting Run button
*/
//-------------------------------------------------------------------

- (@action)runShow:(id)sender
{
	// Disable the buttons and enable the Run window

	[mainbDebug setEnabled:false];
	[mainbConsole setEnabled:false];
	[mainbRun setEnabled:false];
	
	[runWindow orderFront:sender];
}

//-------------------------------------------------------------------
/*
	Hitting Run close window
*/
//-------------------------------------------------------------------

- (@action)runDone:(id)sender
{
	// Remove the Run window 
	
	[runWindow orderOut:sender];
	
	// reenable buttons
	[mainbDebug setEnabled:true];
	[mainbConsole setEnabled:true];
	[mainbRun setEnabled:true];

}


@end

Added Site/Site/Frameworks/AppKit/Browser.environment/AppKit.sj.

more than 10,000 changes

Added Site/Site/Frameworks/AppKit/Browser.environment/MHTMLData.txt.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUeNpiunnvEdO7j5+Z/v//j4H/IbP/geh/EDEY+x+Sun//UNSj62f4z8B099YNgAADAA9PUNwzG//eAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNpimL9qE9Pdh0+Y/v//D8T/mP79Q6chbBD9/x+MjwX/R7D/g9T/h9BgM/5D9BtqqgIEGAC2zE/UgDMaqgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAIAAADAusJtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1j2LNnD8P///8Zvnz5AsIAU6oK6qmqG6cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j2LNnzxcYAABDLQrJ2KbR7QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+PLlCwAFvALdifOWJQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j+AIDe/bsAQBJFQrJwsQiEQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAIAAADAusJtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUCB1j+PLlCwMM79mzBwBaQArJvXzTegAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACYAAAASCAYAAAA31qwVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHpJREFUSMdj+P//P8NgxIPSUaMOG9kOi4+Px4WFoRhDbqAdtgSKB5XD8oH4PxTnDRaHOQDxHySH/YaKDajD5IH4KZKjYPgpVG5AHMYOxMexOAqGj0PV0N1hM/A4Coan0tthBUQ4CoYL6OUwJjxFBsOAFRejVdKow0jEAMbSS1vJwWj5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACYAAAASCAYAAAA31qwVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUSMdj+P//P8NgxAyjDht12KjDaIjj4+OZ6OIwoEUFQPyfSAxSy0Avh4HwVCIcNQOqlq4OYwfi43gcdRyqhu4OA2F5IH6KxVFPoXIMA+UwEHYA4t9IjvoDFWMYaIeBcB6Sw/KxyA+Yw0B4CRQzDDaHCUPxwDlstEoajBgAIvph233GDmUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUCB0FwbENgDAQwMCvmByJpbxIeipqR0pn7ga4gBt4gQZ41lqdc6oa4FPbe6c2QGpqaj/TuDbcxUWSYgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUCB0FwbENgDAQwMCvmByJpbxIeipqR0pn7gYIeIEbuKbqnNNaK+AZtb13asA3ampqQD8COzbceGNz5AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2LNnz/8vX77AMQNQ4NX79+9RBNqvXLnyHyYIUsEGxL1A/BykHQCHWDaL8tTDxAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUCFtj+PLly38Y3rNnz38GGOf9+/cggVcMMM6VK1dAAl0MIGVA/ByIe4GYDQC0XjaO10uChwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewBackground.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAA7CAIAAAA1lncVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB0FwQEBwEAMhDAO/1Je1YSUJX7fJyHDSkDKQMArBwZyJ5uVkWN254EDIQvvkiVhJWFDyuscs7KSsJJlYSXDLgErIwkJj6QErISEeZcOKwMBASMJ33s/zDJY0JkKjKMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUKJFj0NDQWKGmpib1//9/BnyYwczM7L+RkdEuoAYdvApdXFz+u7q6/jc1NT2vqanphlOht7f3/+Dg4P8eHh7/LSwsnmhrayeoqqqyYCj08vI6FhER8T8kJOQ/kP3f2tr6k66ubhPQ3XwoCp2cnLiAJoIVh4WF/ff19f1vZ2f3V19ff7a6uroSXCGIALqTE6j4MEhxeHj4/4CAgP9AA/4bGxvvBrrbEegUQbjRQA/xABU/j4yM/A/SEBQUBPYkMFS2amlp2cAVWllZ9fr7+4MVwRQD+Wft7e1DgM6QASvS09PrdXR0BJsCUwQ0fZu7u7se3I0gRQ4ODmB3gRQA8a/AwMDpQHdLovja1tYWrAjkCSD+BLSuAmg6J0Y4enp6ghUBg+YeMGiigBqZccYMMLDPAQPbBm9cu7m57QE6Gm+CAGEA/dNCZSU2Z+AAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAU1JREFUKM9jsLS0XGFmZib1//9/BnyYwdfX97+7u/suCwsLHbwKExMT/4Owt7f3eSsrKzecCrOysv6XlZX9T01N/e/v7//E1tY2wcTEhAVDYWZm5rGampr/FRUV/4Hs/yEhIZ8cHByaTE1N+VAUxsbGcpWWlh6rra39X1VV9T83N/d/RETEX2dn59nm5uZKcIUgAuhGTqDiwyDF1dXV/wsLC/8DDfjv4eGxG+huR6BTBOFGAxXzAN36vK6u7j/IKSUlJf+TkpL++/j4bLUBArjCoKCg3oKCgv8gU2GKgfyzkZGRIU5OTjJgRUBGb0xMzH+g9WBFIMVA07cBQ0IP7kaQoqioKLC7QKYA8a/i4uLpQKdIovg6PDwcrgjokU9A6yqApnNihGN6ejpYUWVl5T1g0EQBNTLjjBlgYJ/LyMiwwRvXycnJe4CO1iGUegAs+F709mxc3QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPWindowView/_CPWindowViewResizeIndicator.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUKJFj+P//PwOx2NjYOJIkxUDalSTFQMxPkmIQnyTF0tLSASQpBtLOJCkGYlmSFGP4gZBiBQWFIJIUw+OBWMVALMkABHZAhg1MMQcHhxeQtoMp5uLi8obyJUF8ACitf5AUaj8yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/action_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAOCAYAAAArMezNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZxJREFUeNpi+P//PwMyBgJmKN0PxCBGP5TPja4WH0Y2UBKIGxgZGQ8AaVaooTDMx87O3guk15FsMAcHxy6YQVDD4QazsLBsRuLvIcng0tLSrWiuxMBAy/8YGRndJclgIPasra29DTJAR0fnY19f3/W3b98enjhx4jUQH2RoUVHRTaC6VqINRoooMK6rqwN51x2IuYDYFcRHc30/UtxMQ5OrQDYYxcu3b9/2R7b92rVrAehqYHI3b96s4uXl/QUSk5GR+fb+/fs4uMFxcXGPkTUBFaYgG8zPz5+KLA9SjyTPW19ffwkkPnv27P1APgtyGGcD8f6UlJSHwBTwV1hY+DpQYTQo7QJxPJT/39jY+P2PHz8OQNXDLf727VtgQkLCIyDbAls6PgZMZn+hye0frpQBlLuJJbKYgDgLa6owMTG5B9McHBz8DNkwWGrh5OT8Y2ho+IzU5Nbq7+//vLy8/A7Qa2VoERUCMtzFxeXZp0+f+kg1GITL3717FwOkmWERihRRIcuXL58FpFnJMZgBFquwCEWLKA1iywqAAAMA5oG1QG1/ejsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/brightness_bar.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAXUAAAAUCAYAAAByIq2DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrt1DEKgDAMQNEMvf+VdRC3QhNpUOS9pW0CDg5/RMQRl/uMxWy2z+w6zupuNeu6V3Yd747Zm/Onu93f+9q/2TnrfGd3u+/VWWbXcWZ30/0IAH5D1AFEHQBRB0DUARB1AFEHQNQBEHUARB0AUQcQdQBEHQBRB0DUARB1AFEHQNQBEHUA8k4Pbf5S2jTRYAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-leaf-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANJJREFUeNp0kMEKgkAQhmd1PYh5C3wNfZkeomNPEQQdu3bo1i06duzURW8d8hJkUQgFYqLp7vYbJRU48DMw880/s0tBEAx83+8opahNLAxDZHUrimJSluXY87wr/QWL41gZhkFZltEdkef5tKqqoeu6xwZKkkRZlkVwIbh9YAF4htoI8PYF2bb9mpBSElwaOE3TNdTj37s1TaN6NfLFNM3IcZwNyo8GwvEwkmfGWMQ5X6I0h3Z1j6MpsOKE6b2u64t38/DzPCHECmAf6rb901OAAQCWtKL7r7moLgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-leaf.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAONJREFUeNpiUFZWLlJSUuL5//8/Ay7MqKen95+BgeH9jx8/pv3586fv7t277xjQAKOtre1/VlZWhm/fvjF8//79K1DxfKDijjt37jyFK3JxcfnPxcXFAJRg+PnzJ1gxEP8Fshf//v27G6j4GgtIJRMTEwMbGxsDCwsLAwcHBwM3NzczUGECUKOyqqpqGAuy3SDFjIyMDCYmJi8DAgKeGBgYnAQK/2JBUvDP1NT0RUhIyBMVFZXNQKFVQHwLJMcCtOavnZ3ds/Dw8AdSUlIboZKPUbz3+vXr3cCwyAJiEVzhBBBgAKZHhoa/n4e4AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-resize-control.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAIAAAB/6NG4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeNpifP36NRMTEzMYMCEBRjBgAIP/YPDv3z8mBlIABaonTZr07ds3IKOvrw/C6O3thTAoNntUNRgwDpqYBwgwAFUPJZ6DFNTXAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/color_well.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAIAAADh1eFDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH1JREFUOI3t07EJgyEUBODHVbqAhXvY22cGXSAbpRFLC8loCiIkIfoyRHhW/7fAcXCHGONNXggBvfdSylNSrbW1hrUWgK+kvbfWGkT0kUdEIKK3PGY+lHS800veuU7XIv7BzFBKjTFEbzvnZGZYa3POD0kpJWMMnHN3ed77HwxWA6QUi5PsAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/New.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZNJREFUOI19kz9IAmEUwI8aaoqo1BaxWhoampMWazQS++PWEtTk1tIUOHbQkHZBTjY4eGpLKEE3JaLiDVficBwcSJSLTi4Owuu9jw8x79MHP+7ge+/3vXfffRIASBgzyByygCwjLsSLbCLbyAayhMxK48EFVOyCkeh0OmAYBnvHtTNkRyjhAtp5i5JrtRqjUChAIpEYCnH9WijhAmrbT4m6rjOKxSLIsjzalFjCBTRzgJKobULTNIjH4zAemHfOv828UNBsNhnlchnS6bRDwCW7yKJQYFkWo9FoQKlUAlVVIZlMgqIokEqlWHeYu4esCAWtVoth2zaYpskK6vU6VKtV9qTTwdx9xC0UtNvtqfARArzGKeh2uxM5ygQh8hIC3637a6Kg1+tN5Dh7AG+/lemCfr/v4CR3yLh4j8Kz/QpBNfyzdu+prD+sfjgEg8HAwWk+BE9WbohiZhijguGfKAqam7jUonDz+QjBbPh7vAN2F5AIcoXERHhjLpsEvjuPzmv+30Yu8fNjcuCT3QYV0+68RvoD0y0J9R+ff5MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/NewHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYhJREFUOI19k71Lw0AUwIMOOrViGzcXFwcHwY+WfizVwcG9iFIpDmkkSyDQ1MFWyVJqKdRSQggdMnQJFEr/FgdBEEdB/Bue7x3P0jbXHvzIwb33u3fvcgoAKDjWkA0khiQQFdlF9pFDZA/ZRtaVxcECSlYnkwn8MxwOodvtijmulZCMVMIC2vmAgtvttqBer0OlUpkKcb0mlbCAys5SYKfTETQaDSiXyzBblVTCAjpzgYKobMJxHNA0bU7AkjvuzaZU0O/3Ba1WCyzLighYkke2pALP8wS9Xg+azSbYtg2GYYCu62CapqgOY8+QpFQwGAwEvu+D67oigXpCjaUv3Q7GniM7UkEQBCvhIxQ4JyqgHZaRqZ5A/iENyevY11JBGIZLydqn8BS8rBaMRqMIuVpKcOFcguk/wrGV/lVL8Xf1Nv4WEYzH4wg5LNvwalN0tyqYFUz/RBl0boIquHq9hyMr9bNYgXgLSBGxkGcZiWLsmwTJm/gH58y/RpZk+ZoiYPM+KZl25xzlDyJip/qGO0OBAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/Open.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgtJREFUOMulkz1rlFEQhZ+Ze3dDkGhcSZa4UYOFhU1iYaUWfiP+Bit/gVhYm970oj/DPyDEFBpEEPFziYKKySa7yO67eb/uHYvs5g22meZyYeacM2dmxMw4TCiHDAGOzDabd0+fWVgMIRQAu8Nh5/vGxnqa7nb+I1FgF/gJmJnhgeNXb9y+/+Dho1v9pB8xGCaD5O2b1+12++uOc17GVCqqIYZkbXX1xUb72zMgeEBbzZn62VNNer26AqjOTC2eP7eE7Ek8KHh6+hjLj5cbKytPngJ4IIpYabHEQglACBCKHGRcXhk9OVHHLCY2ct8D0u325M9mh16vV3EJmI0xKqA0KxgkwxowAWT+ZGv+2tzCuaX1D22KPENGrOPxighmRjRwqqhucfHKzUsfv7SfA/f87Nx86/L1Oyemjk4TQokA0cCrIk7I84IQDRGh7h1mMN1o+FerLxsAPsvScrOzbUlhkucFMmLda8GIZoQQERFq3mFm9LOS/iDJAXxRlrbzt08W65Sh3PfNzDAzVHX/P26vNCVNM6sAuj0bpiahLKu1GRkoIlis/IjRSIYpg2QYAbyKOkXUuQM3YYY6HamIiI5bijgnqIJzrgbgu9tb2+/X137PzrVqoSgjIghg2Gh8e281VkFU6z/an38BiHN+YWJy8gKIB4tV8qhwH6JaJxFqeZZ9yrP0nRz2nP8BeYUUSYTtIaYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/OpenHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeRJREFUOBGlwV1qE1EAhuH3O3MM1CiN/RFEBBFFULDWG92BV6IgrsD96CoEvVMXIS5AW1FBqJQmFWnaJs4kc+Z8Thtt9brPI9ucROCEBPTme70ny8vnb+Wca1qTqvo5GPTfp5QGQOCYgBL4BtS2icDyrZXVpw8ePb5bVSXYVGU5/frl88ZgsLUbQiH+kBSy8/jT2trb7X7/GZAioIXefHFhqcdoHAERQq9z5fKlq2COCQGnu6d59fLl/JvXb57TikCWnOyMc+ZAk6FJCQkw/+mcitgeGSdaEQj7o7F2hruMxyNmxIyZEX9NU0M1mUSgC4ziwuLS/YXzF2983ejTpBokBNi0DAIMBiQRNOTazdur3zf7L4CHsbewePHGyp2zc3Ndcs4gsE2hgIKoUyJnI4lYBDB0z54p1tc+nqMV67pOw909qgRNShySCIAxtmmykaAIBcaUqaEsqwmtmFLj/V8ltSM5Z2aMaRkkccAYcUBki2ldm1ZscuP9vRGTqck5c0QcEmBzSIJsmEynVNUk04oiFJIIgSO2CQoYY5sQBAKyKYIQEEI4RSvu7w1/fPuyvtM7t1jk3GRaAmyOiZYAIwQhdLa3NrdoKYRwPXY694QKcAYxY0DMGBD/6KSUPqR6+k62OYnfXED9QFof0dQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/Save.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVhJREFUeNqsUz1rwlAUvS8JAemUPZNZAiLonqGTPyV/oWPt2H+T2aUK/oAQyKDSzUFCSBarolF7z22faKWmYC8c7st995z78Yg6Ho90j1lhGMpBKXVS8n1f8NOiKIJ72e/3/cPh8CXwfdfvdru02+0gRM1mUwDLsoziOKZOp0PtdptWq9XzdDod8hVABqsRsNlsaLlcijdNkxzHETBB4vC4Q67neW/MfZQOqqqSSqgO2LYtVSeTicTX67XE4dEdzo1GA0IQGF4JYLbFYiHQBsJsNjvlWZZFmnchsN1uKc/z+s2fC4AIA7ksSwqC4CZ5PB6LgOZddIAF9Xq9mwKj0Uhyr0ZABxCoM+Qg92oE3cFfBPTC/6UDoygK+dBPWGfI0TsA10qShFqtFhmGIdsdDAa1T4hcvFiapqQ45jI813Wf2DuMB4b52wSMD0Y5n89f2b+re3/nTwEGACUKCdgz2++nAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/SaveHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXBJREFUOE+lk09qwlAQxscXCC7cBUGwJCErt0IJOYLF0Bt0I8FVD+Eduuo2i+57hB6gBLLLUhoiLlQUxP/G9w08iYjJogM/Xpz5vnkzkog8z+k/iOFwSLVajXq9Xq4IgiAfjUZ3oOb7/gf0YDAYkCAZrut+OY5DlmWRbdvUbrep1Wox9XqdJpMJn6g1m833fr//Ch9CnE4nHuVwONB2u6X9fk9CCGo0Gsxut+M8TtTO5zMZhvHted4bNzgej5zECTDacrmkNE0ZmJDHiRqecYG88AWXcwM8KNBssVhQkiRMlmWk6zqfqBW13Kw4AdZYrValQFP0CCTUj/V6TaZplgKNagDv3QrdbreUhyuoSaqiqL1ZQf2BVVHU3qygJqkKdfN1hfl8fk3ihaoKaNRl8Io4jmmz2fDLoWkaRVFUCjTQwgMvvoWn6XT6+StDJpIwDMeSvweMoYEWHniFHCmV/MhxnmezWUdiS8wHoNaBFh54L4mHAQ/Vw7dXAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImage/CPImageNameColorPanel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABoAAAAdCAYAAAC0T3x2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABxBJREFUeNqMlmtsHNUVx8+dufPetddrO07sRG1ik0SEQIwDJRSaAEn4QEQiA4oQoEgoUj+0qpDCN0BVVdQPqA++tFU/VVCpISIK0MhWFYQICBEeBVyqxjHgBIOx49jrXdv7mNfO7f/eGQcTXrV19s7dO3N+5/zPuXeWCSHou/72/P759bGRHIyN5p6mkbQ2ebIt0QTpWjTC9WDB0P2XYcdODT524bv8sG8D7f/VS7fA+ZPFNt6/6/qrqv2bf9iad7mx1jBMuT4ZheFSXI9GJkYXT4+/5ZWblz7kmv/4C/v+8Nr/BTr46JDZNMTv2gpi8P79t5jbe9s6Io2ohtsCjD5TT5FDgixKyCNGBq7/Vfmo9NybRxtlMfMio+jIsbv+Gn4r6MGfDxcTLk5s71/d89A9A70+1mfx4XOiGJYYRELmwxLSKILFxDE6IqEOZpGN5Wff+9v4Oxff+IKJaPDovmPzXwMdOjzsCE6n9+7Z2LP79r6eyQWihSYAcI7QSbMzk3MtwUeEfELkgkgoIBPQFmDXUJ5e/mRoamj0+CSJaNfRu082pH/tMjEST9+wdU3bj7b3dY+irNOzkKsKUIDFZupbR0w6rbQEwiVYjqhGDZqhEo3RZ3Rz30/W3NR9U5GJ8Oll/wr08H0nB9pz7MAdt/Vv+GQccgHSAKQptYvgUBpAXBpgUBEmlEmYDpRAdg2qU4Xm6TxNsDsH7l5f1IoHHnjh1oHLIBYmT+28fTubmCC9BIi/iHogYS1KTUdGPCYyADIBMpGHLJWhYClI1osB5lNVwb6gKX3vjYOMJdFTksEP7z2xrbCab3VbV3VMfCoobqKLUAsTYTPIpqM+HDAzg0jJZOMJpahQ0glcxRkoQb0C5BbQIq3tWtvRzju3Hnq+f5umReLeqwf6/KkLUKnKSMA5i1PJZDYqE2RkwizAbBBka9uqRwQyS5BZE5ktZxXjKgCySlP0Odvad2ugi+a9mhYmOxyn261MovCLqUxSIkOk12oOmAWzce0oEINRBpOgJKtVouSU4AT1WqJpyvcULUOIHVyPxCbuuzZH8Q0PD8epA2WooMVI1UNKZ2XyyWaI4VCDSeHSPKSI2ootGqMXG2S7rR52xCZuxKJzYZRrMfZNrofIA8xB5K6KHCNADp639RTiKJB0TKpSQlVNwz9TGE19AwcQL6CL1OC+aZPeyaX+NiC1CXTbEqJeA+c9adFNhOJIsMxGQnTZaanpcMwUIG1xPA33VWQxh9kUrqfx/TzllMw6cdBmvdj3uO4WZMQeTqgcZPSQjgvNbDPNxjFSsC43VOITt3AE6T5cNGCIEFuWYdRQGx042SgBZoYf1BwyqtwlfSz0y71dhltgyM6DJi7MQ8e5MAdgC2bKzSu7Ao6IY5NFMWlOgywDMBYiS2kSIC1GjWPVFtNlv+KSMc6R1plq/eOu61Ggei1zHmQG5xZ8cnl08zCFRLhJkzcisxg3OFXiZo10LjPz4TpQJoEe/kdHF+vI6Az3iB8XCwuH24qU8IrQ3ICRnQEs+NUs2eOBkoZiaGrKPYBFH98HgIcSukTMrpJl1omzBprFVxm2UiEJZoJ2hxvH1en93HXDp9f1/KDrx86WzUvwZbWh4DDWBkcFUFvgLIc6OEspiNXStsxhPQ+oh4dcfG9X8HCZhFFGvXL0/r+DsfFz8xfvOzi0S24JcomOzM5+fJKu3tLIL6JJlFRBGjnJ0xWAAK1pw5mBUaun0vnQOUAgAeYh7vGwHiO7vFTB8S+MlFoNS3/gK++jV7YN/4W38xt2du3tpzk/jT4PSB5jDs4dmIWIjSwjT6Qd04KAWhBQi2xV3FvAvLudTv298kEU1d+969A/fqoO1eV9jC5+RC/Fp99jr/53oPu2LXTpItq4jAgBCCqZLDAOZ6yavtvz6MIQjkMEFiErgUw6O+n1Zy6djar1iEztkW98lb993XCRRHyiWQwKN/fu2Ei1kiPKY8ScRaU9QfvLIDcDtUYk8gGxjUWiDs8f+uf5sWZSr2iOMbjvyKkvX+VX/lj50/pfWtc66/9YMyu7N3Tna30d7ZsoKWlU+wyr8zjdZzDWiRWxo1vxeE+OqI0n/5ma+Whketq1nOSVdz+v/uy3J87JVhUiy2QlaPkNLU8Y/ud1v9i1Tnee8PXFXrPYmNu82nAKTmh2dnid8uaZ8lypFDaCkdq0v9AsF3VbnJ8Mkt/8+tSnr6uDjtRxGMnXFljNlSB5SDtpE6I3IQysZafbe82NdsfuTiO5NqElz9P9VU0cO2UWzyUW1adEPPrBUvjq+3ONs7h/IW1TdSZV0x1ODYDC7wXBID6tykY597K3iJ85RIfQJdh8dv29oK9Il4FNWvF6yuacll9JqTRSpkZm4YrvLksn7WvN8A22/CNm5Xz5ZwNlY3LF/Eqj/wkwAC2fO4nxam4uAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImage/CPImageNameColorPanelHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABoAAAAdCAYAAAC0T3x2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABqhJREFUeNqMVkuMHEcZ/quqq7vntbO743jXm8WLs/YaOQ8nUswzQitMImJ8AokcLBHhK7cIWUHmAsGKZHzkgpAiBckckDghJQcc4TwIIg4iRBBZMrZje22v19nHPHr6VV3FV109m12CSWb0TVV3Vf3f/65h9Cmfx3/40wM5y48rli9qoZsF5fs0IxLSXBI8H0hfn5e+eunCyV9/8P/ksHstfO0Hp45kJv55s0b7H957f/zA7M5GzedeRwjPrq8WhYp1qq7eXRq+f+tiOGS9f8vQ/OTN53/3h89EtPi9F8OCq5fqYf7U1790wJufrrcL7EoMUc6B8pQhH4MkTQFEeGTo8vB2/42LbyRDr3eOC338T8+/mtyT6MnvnJ7OdfzK3gfGdy5+ec9MhvUufnJBVAAaIM8RMVJAQQLwjaYxJkHOzPmrr9+6tPHBihfSkXMnXlv+BNHTR880Uj288Niju+575KGpHatDokg7AqhOHCYwO1ZEBCINEEET2OnhqUacJqlO/7jzt9V3l/68Iuvs0B9PvBVZ+XxEpNLk5YXPT7T2zU91lu4QrXWJ0hhWWF+BkAHcuAMfwxIa2FRQQiltUJ9u0l36wtSByf2T+8eKJHl5JL8kenrxxcWmrw4//ODczO3bcBdIMni4sCQFMkw5EjECWZgSvBw1fhVsSykC2TKtsEf3HNrVKBqHnzx1cHGTCMxnHnpkL62sEO9bElhiUiyqCrBGgNAzFWgER8JLFGXcMtg2ANkqrfHHFr5KOknPWA7v24+/8ISsZ/N+fay9cgduQJF4vlOBwSJu47KFRGxJnqJynanILJFBvHJYtk5D2jG2o92k9vy3frbvCW5ydWz33pl8dZmYShiZyl0WrKgsgUUeRmnKvEBKu1GWVukSoiRyB22SKFi2Rh+xuZkHUe/FMU55fsj3J8JoFTEfOjeVgo2bj9wmMfoYfby3Bo8gt7nPVO60tqYUg6reaUlWmEMeU3pOZIEUCL4InLCRtj6SX7LqWTuLRu4rygQ3lePYJrY6tkDEpF/UhDZznlB6PLrBWYFsDztACALt3GM1DpiD5I7EL4mck1x8eFmO7jtKe12qESFSKc89afi4J6ymIElWUHbINjkJwZPugAfVg9AJLy3kLttEJZDhl23WUwbxCRTo4WkV83W871OIHT5mXkBio6ZVTQjZsBqHSIYQbgxBGkC69Jw1gXDE3BaSydC9C+I8g4gUWYbNZFtbDLFpmeqyzD8Q5CoNmDf0QuZdU9lgdlxMNGz1BxbwS4j6CQAfkIAHBVhmHYYCE2g7BerGRwwExDEFKxWsVSCwKMqGa9NiI8r6Ne4teTUmLyTZ7c6ecILS1AkPINSvICFT2NZtK9eSKGjO7ahd6/BjEl4CS611OUTbvpeXhCG+t5bipCbkBa/JgrNJNHim1WRGRJoFOdskkJDHbK7z3LlGA56tASxmeJ8r5+cALpMx3JySYFlJZi1ssKbJ1nvtelOeFW+vn7v+jfY3n9F+kc+hO1ilfRsP2xmYctobCDPIGJuaCkSZnaeOuFzDO2PjFOEMLOQxsrZB167nS2mU3Tr1wjsny9tyjAfPbXRv/p59bjarDY1f3nIid5qXlkCIgnA5dBYx62PsyaBIjn156hQo4hKsZr3gZ8uXB436mPw+VZlKr62f+/Do+FNfvFvcCe9rT3Uozp1wm01WWz1wRApjDqSVRVaw3WcqlK0FZ+stev+t6IrkxV9Pnnr79Lb7qMnDZ72+Vld7//qQJnx7QcETEDroE/V7RL2uQ9fOAXuX9Kp5z+7BXqugGKOL5/vXisFQBZw/+z+v8l/Nn56Oi+iVopW1FqYXdpuk55vBTaQxNJUQ5AHwP7HEuc66qIFGVMuJzbQQgyD7+3sr17VJ+/VWcOTEL99ZvtefE/6jXcdr9/udswPR/cquTj2eajV2G91HHd7Fch/dfaOMEWvB6jqOd1D7Tc/cWN+4cXltLQxr9Jera+mx375+LS6blDH6v4lG95ltc95zO797tM34jxMezfqtbGN23AvqQe61WsG43dyN+v2BSrMryXoa6UFb+OZmt6Bf/Obd5VerNlEVHimQqa1E6GrISYQLsMLawMTBcObgghw73BJ6QdMwDHg2rtHXIlZ0jaR0jfSVK7F681I3/Sf2rwE9qwcA03HZItIgSj6VCNgBTAOTthKqPUGlrRW0DuDvDH30WYm2ua4itvP6FvibFytt/teyhMNKaFq92+Y6i08kw5aRbYmh2FoK1Vxvu+U+fjYVRs/l+B8BBgCMykDM1OUJfQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wUEOwUAUANA37S8JG7Fj5Qhu4KrOJyxEpJTpWHSW+l5ggwOOpZSzP8KkYDQjUJAxmBHIeOORUtphiQ6NKpDR44YT9thipQpkPHExuWONhSqQ0ZsMuKJDqwqM+CDjhRYNkipQkJHx9ccPCKMfJ5j/ZGcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wTsKAjEUAMAJvLt4LTsvayEeQAQbbRTEZd1PEgWLCLozUWv1T0ppjR2OYVlB9RaWDciokVJaaQomjHhgQA5sfFT0uOKMA3rkwFYzosMNF3SYA3tNxoQeHZ4ogZOmoiBjRkEJ3P2qvrwAKV0tKePvXOUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCFtj+P//PwMDggACdRDRByKiQIQOiOAHEYwAbGEKQz1zHVUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAYAAAAb4BS0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUCB1jYGBgEABiAyBOAAAB7QChuhy7UQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCFtj+P//PwM2DAQJQGwAxAIAxNISj3z8C1sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUGBl1wbENwjAQAMD7f8sYlCoN+w9GyRxOgRuk+C78CzcCgUShoZAIS0OiY+CFgY6yNBQGTnyRSISloeHAe875cSNReOK0kUh0HDYSgcLDRvoJhI0L53oFmk+kBA4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBJREFUGBl1wbEKwjAUAMB7aVAExUFw0f//vC6i1GASHYQuzV0gbOv+Ms5WHQ0VH1S0jLtVRcGCFxaUwMmqo6HhhhnP3Ht/2BARVxS8k7ELDpiSsSN2SMnYHhMiGQuEny/9fRhMYHBh/AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAYAAABP2FU6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUCB1jYGBgYARiBgEQoQMieAEB6QBLHwsEZwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPMenuItem/CPMenuItemOnState.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbElEQVQoFc2QQQ7AIAgESw98nW/4O55BdxNNkB6aEA8lGSXKiqxExNWJuyOi5idCEVFgwCfMdRuL5lRQYICuZSzXvUTTZS8iPuBZeNycgQ41xnaQ268cBTSCc/LLhLmue+7CpRPHZ/z8RLvjA8MnX72R/hSoAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZ0lEQVQoFc2QUQrAIAxDdR9e3Wvsdh6j6wOtWxkIxQ8DgRgNps0ikiK4IiEy5wSLtqnK1onGm2A5P6zqeeDZWxNvU3Xzqe7Z++3Luecwpr6eqziqFPWZicoQjTfuU+YQwfYZlyXCPz68ppV1+vunagAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpiZAiuZ2ZgYLAGYh0GhsA6h44tpzdfeP7lIxML038TCx11x1c/GflY/vz+w/35139uBoY/DCwM//4y//n7hwEEWBj+/2X+/QfG+fuX5ffvv1DOPyAHLvPvD1DZbySZ338QnD9/EHrgpjGxMzP++vr92w+QXUy6StLXjp+5cPnL12/fGe8+fSkXVjMh5Oq9JxqM////ZwQqlwZiIYAAAwAMX1XNMAlUgQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYAiuL2e48+H3f6Zb734yMP3985eB6c/fPwxMv/+AiN9/Yaw/v0FcIOvPH5gYWB2Iy7zvwWdVhv///xsDBBgAJJsuTOBf54IAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ5JREFUeNpiZAiuz2JgYLgCxEeZL+zbukdBXEhmz7mbT5le/WTks9BRd2Rh+m/C8vPXH4afDAzcf37/4Wb58/cPAxj8+8vM8vsPlPMfxPn9F8L5+5cFIfMPzPkN5fwBKUOS+fPnL7IyJKNB9vz89esHOzPjL5YvX799P3PxyhVdJelrzKde/ZbnZvl/YFVz/gaG////6wGxDBAzAgQYAO59XJBTIVY/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJhJREFUeNpi1LewZWZgYLAGYh0GfXMbh5XrN21++fbDRxYmZiYTGxtbx39MLNwsf/784f7LwMj9988fBhaG//+Z//75ywACLP+BnN9//8A5IKUIzu/fCA4zqgyMw4Cmh/k31GgmVlbWX1+/fPkBspRJVUX52qED+y9//vz5O+Ojx4/l8ovKQm7fvavBCNTDCFQuDcRCAAEGADqxWcjpDiMNAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUeNpi0LewLWf88uPXf8Zn7z7/Z3z0+sN/xvvP3/5nvPXk5X/Gaw+e/me8ePvhf6Y/f/4wMP0GEVDWXwamv2Du378MDKra+ksY////bwwQYAAEtTEizRGTJgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJZJREFUeNpi1LewzWJgYLgCxEeZL128tEdWVkbm8JGjT5n+MbHw2djYOjIxM5mw/P7zB6iCkfvPnz/cLH///GUAg///mVl+//0DZQM5f/7AOSwsv38jcZBkmKGmockwgPVAjQYr+wuU+QEErKysv5g+f/78/dCB/ZdVVZSvMegYmc0KDI0sevT4sRxIrR4QywAxI0CAAQBTdF49cw4ogQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiZIAAISBWATGE9+7dO/Xr16+vGTg4OGyAjA+/f//+z/Tjxw8uFhYW/n///jGwAJUxgRggAOIw/v37F85BkWFClkFVhlMPXBkTDw/Pf6DFn0CyzN7e3mKsrKwcUlJSCgxv374VCA4Odufn5w9h/P//P0g5PxBLAwQYADkXPiP8F5MNAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNocxFEKgCAQRdF59dO+WkT7B0EEQRBhGERv1Pk4Zma31lpozokiArk7GmOg3jtqraFaKyqloJwzSilx7L3t7/OcwPUKMABbNDOyQBe/kwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpiYGBgMANiIQYQ+Pr16+u9e/dOBTKFGX7//v0fKPCBg4PDhunfv38MLCws/D9+/OBiAXGggInl79+/MA4jThk0ZSgy+E379evXJx4env9M3759+7B///71rq6ubxn4+flDgoOD3d++fSvA8P//fy0g5gdiBoAAAwDmKUtB/aWHewAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpiZIAAISBWYQQSwp6enk1iYmJhLBwcHJpARjQTExM/048fP7iAsvz//v1jYAEymEAMEABxGP/+/QvnoMjgUYZTDyOMw8TDw/P/z58/n0ACTK6urm9fvXq1/vfv3x8Y3r59KxAcHOzOz88fwvj//3+Qcn4glgYIMADyGjn6SjxcsAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYGBgcGZMSkr6z/T//38Gpn///kGJv3//YnDRxOAECIQzAw3gAAgwAGRwKZNd4WBbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiYGBgMANiISBmYI6Pj78gJSUlfufOnZNMQCAiJiYWzcHBocn0798/kAr+Hz9+cLFAOSDAxPL3718YhxFVBrcyJA4TTj2MYEv//PnziYeH5z/T79+/P7x69Wq9q6vrWwZ+fv6Q4OBg97dv3wow/P//XwuI+YGYASDAADufQ795H/vjAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif
Content-Transfer-Encoding:base64

R0lGODlhQABAAPcAAP///8zMzJmZmWZmZjMzM7u7u6qqqoiIiHd3d1VVVURERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBgAAACwAAAAAQABAAEAI/wABCBxIsKDBgwgTKlzIsKHDhxAbGphooCDFigQvRtwo8CJFgQUmFjAY0sBIAB4nckyYgIDLlzAVQEzp8eTKjAoUJMipAIFAAQkGBAVQAAGCkQIOKD1ZQIDTpzcfHkiQQEBBo0YtKsUYtavXr2DDih0YcuxXjR0/plVp9qFJhyFttkU4lafVhU2fyp1rEEHQAQMGYvX5U+mBu3wTK17MuLHjx5AZo42McDJKtWu5Jr4ol/NllSXZgrRsNqVD06UVuOSZk4ACxKdpiqZMe6CBATmp5hyQF2GBkQaePtUs1u8A2FMBBwYwWKDhA8SD721rPAFhgc0HJlUKu7Zzowe8i7cfT768+fPo06tfz34jae8lDb4XGdmzbcxE3zMOzXWyfcXxEcRfZpntRd9YKdmEFluT8TebWA6+1VCE082l30EXttdWSzB1KJNbsh0YlQGqucaaa90xFCJxZvl1HV4CsJgYULntlOJBwjmV2AE15maVXwmEp9VhP+UoQIUjssbbQMoFyRxWKD2XkXD7NXlXdgZISZkBfyXAVXZEPYdkYsotKRiUBGkJ2W99oamhUhrGKeecdNbpXUAAIfkEBQYAAAAsDAAVACUAHwBACP8AAQgcoECBAIEIEypcyLChw4cQGxoYkGCAxQQRBRrYyDFjAQQgERRAeKDkgYQCUh58aCABgZcwMWZ8WCCBzZs4Dcz0iBNBwpAIDpo8WUDlSoEFOOrcKXAoUwAGYMIc8LQqAqknqyYkWLCrV5laZx4YkDWjgZEOBVC0uLapxaMIiwpYqrQjRKBLnQKQm/IpUIV6ERoNq7DvUwFSEywl3PCqVAIKyjJeKEDBY8mTFxKkOrkmzs+LGXP1+jWzacJqK4KFqJQmgopsE/jcCDFpXbRIYa/NOjFk07IqE9ZdPBZBaLW+Aeg1ihthaIYH/v4uiTLlc4jRQUoODFXl9bQDfAIMNqlQbvOwAkrChRgQACH5BAUGAAAALAwADgAfACYAQAj/AAEIHEhQgAGCCBMmNKCgoYIBBQYqIEBxgMKLAzJq3BjxoseEBxCIFDngAIACHT+qBCDggEsBBQXIJFjAgM2PAihShLnyY4KGCX7y7Em0qEIBCA6kBGDApUuBMmcytXnQKEEDMqsa1UlAq1WFBrgi+HoA6E8FCWAmqPg1IYIEY62+3bgxgcW2YEcO8Gp0wEiRPAs45SmVKl+PLV8OjDrU8NKFLvkyXniY4ACKcfEinEgxgeaEaykqaDsX4WXRj1cCdRj3gM7RXweYbbj36ecDZxUM/cx7Lt2MdvH+3sj7KILdeAv8RbBX83K/BxNXtpkawF+TA50eiB5VoGGi2hd3F/dOdWV48VLJ3/R4Hj3y71YnFx+4/mJAACH5BAUGAAAALAwADAAWACgAQAj/AAEIHEiw4EADCRIYMEiwgAIFCRQcEKiAAAEFDAceGDAxo8cDIA8U8OjRgICTBA2oXJgx4sORAyteHChgQIIBOG8uHPAQQcEDCIIKHeqTpMCQIVkCOCngoFKGBU7CdKqS5NOBFi2SfPiQoEyMAAokTFhUYMSIPr8aNGATp82rBIESFWq0rl2BApCCbGrUwAG+A6MyFbgS7kGmTwvfLVh1cUyLYBkieNjx8cyMPCMO8AqZZGaIliNvRPB08lmBWQkIFOv2ZkcBXBMsfQg4LIKbrREIvlvzpmzHd+XOpUtS+NypwE0a/qgXOUO/ekUCMCnAucaQtZlWn77SqHaYij1qDU/ZPeN48o0dhwcOMyAAIfkEBQYAAAAsDAAMAB8AJQBACP8AAQgcSLDgwAIDBhQwyJBhwgEJBAhMoEBBAoEICGgkYKDhQAEIJHocabCAgJMiSao8aKBlx5UkHw4oSNEiQQMbCRBEwJPnAAQYEyQ4YHCAxosfDyhdypQoTIYoUS4U6PLlU4Ytr64sMJVgTaQ3U2JNkDCB1a8fc6bsicCpwIdDAaA1qlGBxwJsEczUCkBA06Vi+Qp+aiDqSat8TSKm6nJwQZddHZNEq/WA0MCUB2YksJchArIJgA7MLHejXY+fH46uCFbBRrB920a2rFoua4GuNXZ+mzcl6JkGhHbMTcBtwQN5BxhnqHSlgZ4DFkt27Pcv08HVrU9nuDAydcOOTRoTFlkgq9aoiKtuZ2x+u/r1768GBAAh+QQFBgAAACwMAAwAJgAfAEAI/wABCBxIsCBBBAgMKlyoECFCAwIHSBwg8ICCBAoUFGDI0IAAiBwHDlAwYGNIggZSgjzJsqHDghMpDiyQ8SJHAwdy6jyw8YBEAQYRZKRokYDRowk9CljKtGnLpypVPp06NabClS0LOERgEoDVgTUVhNwJdOBWoAMSJKAoFGOCgQYSHCVQtuDOnF0ZHphLQEFdgUqbLqVKuDDVAlFT5jVcECvjxwTTroUsUMCAhDAn2s2IueUBhwciaxZ5kSTVzy8jjgbg1vTNA38BWE79tXVn2UMJ3j0A0sBlhKo3YsxYdgBfAo4F7AaacuHSuMcTODa4c7HCvUgpGw4smKl2wN29fw8POX184vKPz6NPr9I65YAAIfkEBQYAAAAsDwAMACUAFgBACOgAAQgcSLAggAMHDCpcaBAhwoEIIiIQKCDBgIsMMwIooBFigokdBzpMSFAiyIEXMS4sIKClSwEUERpomOAjgIoKFNTMSTJkSAUEggodmsAnAJMGC3A0etBhSYkDDVgckGDmwpdWBY6cifTA1AEDCwzImTPrwJctQwrQmSBnUaZG1xIgmzOoArMaD0TsCZegAZkFkRKsmICvRgEOYUKE6pHqSbWJF0dEedEmQ5Z4/zo9yjhl4YKOz6JdWiBygckAqFKFSLatgoIG0AqYqTSjWLeuwV5+qba14b7Agy8EOrT4W+EUgdIlfjcgACH5BAUGAAAALAwADAAoACgAQAj/AAEIHEiwIEEBAgwqXMgQIcICAg9IPCDQAIKLCBhqFFjAwEaCBwZQ/EhS4wECKAlkLMmy5UaHCUFOLIhx5UYDOHN6BGDgoUEBA0QKHJAgKNEBMQF01Ml0Z8kECqJKnTrAJckBKVM6tcq168SRXX86lClxYIGaEG/mTCsQJsSvAATUJIgggd0EbA02fWq06FaCTXO6NHC38N28YRN3TZAVZYK/ihtGrRq5suXKAiQmjVzAJ1mwAxEgtdoT4Va4Aw9gBM2y9GbUAGqyZgi581gAqDGOHmhRaMG9A2/jHql7Z8iiQfEqXKoTsV6PdY0SReBcoU6+RTdfdsk8MGSNUKeKK6fs/btGwoYLV+86QAHl7QZPZlWgHf4BBY1Vwv/NOGX9/QAGKOCAra23UUAAIfkEBQYAAAAsFQAMAB8AJgBACP8AAQgcSNCAAYIIEyY0aHCggIcCBh6YeEChxYsIBSCIiLFjRgUgE1T02FEBgZMJMDI8SBAiR4kUSRZouHBiRAMIBiDYuZMkxgEJBggdKjQBAp8mT45EAFJBApA+FSI4OSCqQ4hWB65siRXmRJJbAbgEYIDiSIEHeB7NKtCATrUF2FokSreq3LsKJ7oN+VSB3awFkhL4KxDoWrYJThJQwNbAQ5ZZaXJ9iLDsAcgKGca9StkhxZcKZzLk/FLAZ7CjxXY1i7lAWtBaU3c2PXGzRrWEfRaIe+Atz7Ny3fLEjLd4R6B1ix62WiD5ULkIjBpv6bRvyrsDUIq13hc4yewnGQsYbN5UAXGPUxWfvytAMQHYeA24n14QPsGAACH5BAUGAAAALB4ADwAWACUAQAjzAAEIHDiwgAABBQgqXHhQwEADByJKXEgRgcWLGBEcUIhAgYIBAgckGEBypEOBCggQUECwgEcFCSjKFNjQwMyZBSRuvEnxwICdMlOuFHgApseEMw0kSGCTp1OBBmo+pdkQ6UABB5rexKrzwMmpYCtmvAiU4siSA7QOFMqyYwKYBBEsFYmULUGjCtQqVKmSot6pDb8CbhjWIGGwhg8S5BpRpmGbObtm5RlZomCnEP9OLTCWLM/OGMuG5bnUJGAAnM+WRGAVgACPDt/CJiqSJF2BfAkIfPsWAUEDCH6uVclyt1GQM+0OHGA0ZlDiCosq8P186OiAACH5BAUGAAAALBUADAAfACgAQAj/AAEIHEgQQIGCCBMqFGigoYGBDh8unLiwgICDFDNCHICgo8SECQiIVDAwgQIFCQYOWJkAgUaEEQvGfLmwIUYBOHNepJnwgM+fQA8IGHhAJAGSBhIkeDggQVOJAjpKdSlwgEiqJU+mJChA6QGeDB2CnTgzbMOxAGaWTasTrUCdQ932DPozrtyXPhcOPcBx6leECIwSEGgSZVWWfwUWOIDArgKjWwlrJYjAacuxhSPfhfhxs9nOYdGuLSB2bNmIGMGqLU3QwM6MZ9OytghXrmu4oMfqTO25N0K6Qe2CBe5TOM2oxu8a6IuAI2+EIQkM+K3UpYGpUhM+Fjk9M4ADTlcSKmTccTpBwVS9A+i60rxewXbVpw2vGeF2Ap3lHxavN7d+xc+9VMBKAWYUEAAh+QQFBgAAACwOABUAJgAfAEAI/wABCBxIsKDBgwUNIFzIsCFCAQoISJR4wGGBAxgzOhyooKMCggNCDhhYAIFJBAU2qjxYwIDLlylXyhRAs2ZNhQImEkigUGACBT8RABiQIMFIASeFDhSQsSLDngVFjpRJdePLl1WfYs260qZXmlAJFhigYKpDAwLCHkSgU6KCimQVKCUoIGTFi00xqj3Y8adTqQINJK36s2NMgYAJDuZa0CTjxwZbboWc8KpLypWvYka4d7PBrzc9g7bZ2TNDthOdMsSLsaGBBG13ohXAGWfeA7QJGog9FWJfAGOnnjRr4DbIjrk5/kyAWKTA4ckFMi09kOzy6s6fn1St0npZkNkFHhPYLhNBR+5Dww9EMCA6Y6JGqwYEADs=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldCancel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAB3WlDQ1BJQ0MgUHJvZmlsZQAAeAGtksFLG0EUxr9NEBWLlaKe9yBiIbZr1oBeJEZtkeYQYopVeomzaxJw12V3jQoe/Bs8CIVSKBXppfRo6SnQS3vwIGJr2/9CwYvI9psd0vTQ4MUHb/c3337zZubNAsl82fPWEgAcN/SLT3P6i6VlvfMnNPThPgbwuCwCb7pQyNPSJq6+0804HZW12pjayb0+FwS0FA39FcVZySuKS5I3Qy+kpypZVMsWeYec8kvFGfJ7cm9F8SfJK4q/Sq6Lipx7TjZcq+YCiS7yhGUHgpwlCysQDvmA/NJx1lk/ScSI8HzOTY6Qh2RfpAjUL4CpN/TvtbSlj8CHHDBw3dKGx7ndDPD5VUu7PI97pQ12BatmOi6n9RwBHftRdLkIdD4Ebn5E0fVRFN0ccu1fQONKbPj12MuDaMfc8C1jdWZVHTjhGRjxHf2fVV9ilwG8awDcCp7tAq+zwDAHD34DBXIpi4RpNlP1kFagOzdmpA0zIyfeaThrG7ynODr4vGe7zxf47mPmV/0nxSZb9uxck+1g7q+nFs6XmjpyGIOBNNNEBovqrvkV4xPs/RnhW+NL/a1U/o3Q3op7OLPubfu1SjXUp/mn2yl93hWPUnraMCbxB2AbgwprTB4MAAAACXBIWXMAAAsTAAALEwEAmpwYAAABhUlEQVQ4Ee1US0rEQBCNHwYFUfzs/IGKXsAD6GJMwIuYla6SO2Sjh8gVIskBongEEUWEWQkKOpKIaHwvSfd00hnjZnbz4KUq1a+rO9VdMYwxRl2BiZYFFjC+DC6Bc6W2D/sKPoNvZUwzfyVehXoTZMIMpFa1XOAJ7IEaprRIEViD2QNnQDVZMVo8OzCL4Bf4XoQGz8mBK715eOsgF81c192hBSXKGN+nwQ2Qc1qxBUUXPHIc5yQDwjA8L2Nd+oxxTMRgt8FW7EPBxDlFIlrVF+Ol5ZxWHEAhE9MXCeu7V3SH8CtoqnFF8M+XyhlwDotfB68RTztHEATHpmmeRlF0wQD8M3yBYVnWZaHIn9qtUMaky4PIS4HTt+ufL8rCMaGD1Q6PV6qOHwTYcZ04jl/SNL22bftGiHzfv0uS5MrzvHvE2DQf4CP4CUoM6zx23S7YVCo5Gc43eAv21CD9ph0zzpqxo2ZBdlgdYqcPGNCSUjxsxyIRO2oFFD8h6rlo608ImjFGXIFfJ96OUFGBfFoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldCancelPressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAABz2lDQ1BJQ0MgUHJvZmlsZQAAeAGtks9LG0EUx7+btBixSI2t5z2IpBDLmjUQLyU/oEXsIcQUa29x8hPcddlsogUP/g0eBEEKpUW8iEeLp4CX9uChiK2t/hUKXkTW7+wQ0kNDL30wzGfefOfNe28GCMdKjrMcAmDZnlt4ldXfLr7TB34hjBGMIoqZkmg6mXz+NSV97OYHNLl1Oilj9RH1cw+7vBDQ4hQ8qSlOS15SXJS86jkeNXXJol4qk9fJcbdYyJH3yMM1xV8kLyn+KrktavLsOdmwyw0bCEXIqXKlKchpsig3hUX+TE5Z1grjhy7JMeG4PBt+QB6XfeFMa18BLz5Qs9nzLR4A+1ng6W3PNzHNdJPA0XbPd30e9EobizSrZiIIpw0dAg+3fP96ARh4Btz99P3bQ9+/2+Xdv4HOjWi57UDLQrQTJvyPtapZRQe+swZa8EZ/Z9WXQGUAnzoAU8HcBrCTBia4iF4AeXIxjZBpdofqIaXAYHbKSBhmUh78r2Ytt/hOgclv+qhiv5nn/JgjVnVfFrqMLKZgIMFhIokF9Y7cxXSKfT0jfOsctz9Kz5/mVdaC/uRWnPduo1b39Ax/cSWuz9rieVxPGMYM7gG5lX3sSVNlhQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAadJREFUOBHtk7tKxFAQhrOKilvExgtoENRGUijEwsVKYSEPsG/gC8RXyVOk0idIYSexEFQWbUyhEfHWZBEvTfz/JCceyexupdUOfHvOzsyZTP7JMYyR/bUCjSEPWEB8FSyDOcD8J3ALYvAIRBtUeBMnHDArnjSMF/jPwLkUH5ec8G2AXWCCftZEwALvoNb5mHCKr78Fphhrt9uLXHXTfMxhLs/8MqljSrDOLBZwXffAtu00iqJ7+jzP23YcZz/Lsm4cxz242DnXBFQmFd5BdIYZPMiilmV1uLZaLWytTpIkh0EQXFdVik1X/y8V3kPCRJmUsVNV3DRNG0WPfN+PEM+AGv4k9qflmXyRNNbj6qDuY0GaFCsi+JU6XoGfUuQdUVP1+mmaXpWy9PAmSlPmPYChUrAoL0SDw+OgqClfX5dFGx47vwTqQdjKHX/BvwSaHB4L6INicfrCMMy/EuS9Aur7Birrp5O6IPm3XGUXG31on3Adg4si9PMracwob9IHoCzTgMYm9KK80iegVhS+wZNFnDdqDfDqzgPaM7gDN6B2leEb2T8p8A3yHYy8BAVcaAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldFind.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAABz2lDQ1BJQ0MgUHJvZmlsZQAAeAGtks9LG0EUx7+btBixSI2t5z2IpBDLmjUQLyU/oEXsIcQUa29x8hPcddlsogUP/g0eBEEKpUW8iEeLp4CX9uChiK2t/hUKXkTW7+wQ0kNDL30wzGfefOfNe28GCMdKjrMcAmDZnlt4ldXfLr7TB34hjBGMIoqZkmg6mXz+NSV97OYHNLl1Oilj9RH1cw+7vBDQ4hQ8qSlOS15SXJS86jkeNXXJol4qk9fJcbdYyJH3yMM1xV8kLyn+KrktavLsOdmwyw0bCEXIqXKlKchpsig3hUX+TE5Z1grjhy7JMeG4PBt+QB6XfeFMa18BLz5Qs9nzLR4A+1ng6W3PNzHNdJPA0XbPd30e9EobizSrZiIIpw0dAg+3fP96ARh4Btz99P3bQ9+/2+Xdv4HOjWi57UDLQrQTJvyPtapZRQe+swZa8EZ/Z9WXQGUAnzoAU8HcBrCTBia4iF4AeXIxjZBpdofqIaXAYHbKSBhmUh78r2Ytt/hOgclv+qhiv5nn/JgjVnVfFrqMLKZgIMFhIokF9Y7cxXSKfT0jfOsctz9Kz5/mVdaC/uRWnPduo1b39Ax/cSWuz9rieVxPGMYM7gG5lX3sSVNlhQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAZVJREFUSA3tk0srRVEUx69XRAxEMpYo8krKkAEjg/sFTEx9DwOfga8g+QZSHqXEQHkr8hh55f36/dxzdOice3WjFP/63b332uuutdfa+6RS//qTHSjIUrV7PdABjYHfJuMKLAbrLw1JSbQPQRqKoBDUMzzBFMzAC+SUAeLUi3EYrmEOpmEhWNcxtsMxHEBOFcd4WEU3uGdgT3wHnnoHrGYQ9LFtrrMqbEPUySRN4LgEl3ADt8FcW+jDNLeSKgmTW8FjJIz3YTKlj7TACHzWBIY1jWGwzw62RXWCp45Km9rODG+BDBj1m2T9lkCfuIs3cQX4dGuhBM6hEvqgH9yfhQ3wrk7hELrABKvwrmj20KjNgGkYANtlm5SHssX67MMYXECoNiYfErgRV4l2A+/BGRiwCkzkxzgP1VAPzbAM96BOMsPHXwMkyROXQymEp39g7gFMMgo1sAvj4CuMVVIlOvv+PaHPV66C0dfleh1awYq24Ai+VXagDBrAe7PibF1hOz8Z1FaaIOlTyC9yzL9+pIKYPL/A9AoeHk3/hvvtQQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldSearch.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAAB3WlDQ1BJQ0MgUHJvZmlsZQAAeAGtksFLG0EUxr9NEBWLlaKe9yBiIbZr1oBeJEZtkeYQYopVeomzaxJw12V3jQoe/Bs8CIVSKBXppfRo6SnQS3vwIGJr2/9CwYvI9psd0vTQ4MUHb/c3337zZubNAsl82fPWEgAcN/SLT3P6i6VlvfMnNPThPgbwuCwCb7pQyNPSJq6+0804HZW12pjayb0+FwS0FA39FcVZySuKS5I3Qy+kpypZVMsWeYec8kvFGfJ7cm9F8SfJK4q/Sq6Lipx7TjZcq+YCiS7yhGUHgpwlCysQDvmA/NJx1lk/ScSI8HzOTY6Qh2RfpAjUL4CpN/TvtbSlj8CHHDBw3dKGx7ndDPD5VUu7PI97pQ12BatmOi6n9RwBHftRdLkIdD4Ebn5E0fVRFN0ccu1fQONKbPj12MuDaMfc8C1jdWZVHTjhGRjxHf2fVV9ilwG8awDcCp7tAq+zwDAHD34DBXIpi4RpNlP1kFagOzdmpA0zIyfeaThrG7ynODr4vGe7zxf47mPmV/0nxSZb9uxck+1g7q+nFs6XmjpyGIOBNNNEBovqrvkV4xPs/RnhW+NL/a1U/o3Q3op7OLPubfu1SjXUp/mn2yl93hWPUnraMCbxB2AbgwprTB4MAAAACXBIWXMAAAsTAAALEwEAmpwYAAABc0lEQVRIDe2TSytFURiGj0tyLxIxlaIUA8WUwkz5A36BPyI/RvgDBsqlTEwU4gzUGcstd8+Tteqotfc+nciAt57zrb3Wt7613m/vUyr96092oCHHtWvTMAEjIe+UeAwH8B7mCkPeIUvsXoYmaAyV3oivsAHbUNNBFkhphskVuIdd2IT98DxA1F0FrqBQzYkMbz0Frll4C55AXYBuFsGcw/BMyFZsQ3WGLRwFo72/hYeAY+diDsNipZxYIB6uA99B7P0L4+jKHHMLFYtVJ1rQtqjJz/DlN86ZU9MhqRfvxg6wWD/o9ga6YBbmwPUdOIPokmFaqZvorhP8fBfAFtky5aU81H1lWINryFXKiTezaBksYMFucM6b70EvDMEYHMEjZCrlJCZ7AdvSCo7NfQYP64FV6INLWAdbmlTKSUzUkUX9fP1T3oVx/JxPeB6HQTiHCnyrdKXDYZiHdsjrCsv1yaIt0Aapv0J9VTN2/YiDjLN+efoDgZRGxg70NQUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAARCAYAAAAcw8YSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCFtj+P//PwMDmQQQ2IAIDRAhASJ4QAQLAM+wJGk6yEDYAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKtJREFUOMu10r0OwjAMRtFrCIiBgYGBgYkn5mERtOmPWWwpShNEI7BkdfLR59QBCMABOAIn4AxcgKuq3vmiAj+ovyBqPVuvQrQAjC1JHJgMGNYgpQQD0Lesk6bogVcrMgIR6IBnyzqTrREtxWNtkjlBOmALbFof1teRlmNLEQdURG7A3jpYe0qpIenN+J/aZcMOSL4OH5CYDC+A2sX6VwySrKkhmmFkCKVhrzeOxUzF8ZZO7wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottomRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALFJREFUOMu9k8sOhCAMRSHhs/yo+ehZuHBhDKP4wE4nKZlaMFoWkpxgeJzcgjgAMHeatfaF3RtpkQ7pEY8Ed8tw0R6X7AQQVZKtIAKtZCVRZCJ1kpmJDok0kolEWRqNZEQCsrA0aomnNAuVFWvKGViaJNlrkoyFcsDhm2jYQqDJSAs32vTjw76zM+mEJIm4bDX/6y3eTi9iS1GSRTF2+E98QcJlXCrHTEoSTg4STsTZ/BcCN3bqE4blmQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAABCAYAAAA4u0VhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCB1jYGBgYAFiHiCWAGINILYB4hAgLvj//z8DMRgAsZ0fM9irjXgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAABCAYAAAA4u0VhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUCFtj+P//PwMxGAgKgDgEiG2AWAOIJYCYB4hZANHCHzOD2AJlAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTop.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAARCAYAAAAcw8YSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCB1jYGBgYAFiBh4QIQEiNECEDcP///8ZyCQAal8kaTS8tF4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTopLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJVJREFUOMutkgEKgDAIRbdmbY3o/nfrMGuBhjODlIQPw/D1rEEYKyrn+PL8LlAGeCal94CBeMskkjC8FzVIFICE/SszBgRsAIGwSDi0YAo7g4C9QgAHck9trR3hQ8l1CFJ7ti8AbsJXKQjZLRAy4d9j9ZjIdcjGBaHfm9HGvA7dAbof2Wqi2cyedTQjs0lQQC6Iq36BnNGBBaWEiui/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTopRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALBJREFUOMulkWEOgjAMRjscgoYYf3gF738Jr2SCiqsbaUlTC7GzyQuD0MfXEgEggl1onK1ns6BfaUZFUvfL+0UyGBJuYt5EUiAnOW8ISuOUeRETwZVYclES2Vx4EiNdg/5oRMQb/FAhhKsQyMSrf8aqQQh4R0UaPJKTMeos8yZ5EK3YjyvJMXPP7GkNDe/IIzlkOurZ1Uo6GoNTNDXjtFYKb5KvBDXjaAHUJNmM+Hd9AEI6RFQh0+dCAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCFtj+P//PwMDggACdRDRByKiQIQOiOAHEYwAbGEKQz1zHVUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottomLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wUEOwUAUANA37S8JG7Fj5Qhu4KrOJyxEpJTpWHSW+l5ggwOOpZSzP8KkYDQjUJAxmBHIeOORUtphiQ6NKpDR44YT9thipQpkPHExuWONhSqQ0ZsMuKJDqwqM+CDjhRYNkipQkJHx9ccPCKMfJ5j/ZGcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottomRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wTsKAjEUAMAJvLt4LTsvayEeQAQbbRTEZd1PEgWLCLozUWv1T0ppjR2OYVlB9RaWDciokVJaaQomjHhgQA5sfFT0uOKMA3rkwFYzosMNF3SYA3tNxoQeHZ4ogZOmoiBjRkEJ3P2qvrwAKV0tKePvXOUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCB1jYGBgEABiAyBO+P//PwM2DAD6GxKPgLbV2gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCFtj+P//PwM2DAQJQGwAxAIAxNISj3z8C1sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTop.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jYGBgYARiBgEQoQMieBn+///PgI0AAMt5Dzxv9Xo9AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTopLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUGBl1wbENwjAQAMD7f8sYlCoN+w9GyRxOgRuk+C78CzcCgUShoZAIS0OiY+CFgY6yNBQGTnyRSISloeHAe875cSNReOK0kUh0HDYSgcLDRvoJhI0L53oFmk+kBA4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTopRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBJREFUGBl1wbEKwjAUAMB7aVAExUFw0f//vC6i1GASHYQuzV0gbOv+Ms5WHQ0VH1S0jLtVRcGCFxaUwMmqo6HhhhnP3Ht/2BARVxS8k7ELDpiSsSN2SMnYHhMiGQuEny/9fRhMYHBh/AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSplitView/CPSplitViewHorizontal.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAKCAIAAAD+RXMgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjWgoDTKEwwPQPBpj+wgDTHxhAYmGTRYgdggEAPLVN4i1E+ZUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSplitView/CPSplitViewVertical.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCB1jXLp0qY2NDRMTEzMzMwsLC4SEMNauXctIkTQAwg4O0avWgU8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUCB1jWr169X8mZ2dnBqZ///5Bif///zMw/f37F1kMLIsQA7MQXDQdRkZGjADPODEixZK7iAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAASCAYAAAB4i6/FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUGFdtUEsKQyEMTCBuBXe9gDvXPU+37xKFXkev6Oc5QoJtHYjiTDJJ5DEGlVJeRHTNeDIzgZOc8zuE8IkxkveeTGitXSklcs4tovdOgMzHQ0QWiQBQJchQArdZ4Zh2S9ghtdblq9kmgDwKsEGARIKKS9ARd5gV8DUumh+n2psDtgfIYwXI/TtM0Iq/PU5TAfxrobgByk2US+DqkeEAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAASCAYAAAB4i6/FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNJREFUGFd9j8ENwyAMRe0qHLl3CNZhiEzRMXrtnU26AjOAxADg5KMa0QjlScGCh38MhxCEfojI9yxv7/2HU0rCzF2UUijGSDnn16O1RvhqrWStJecc9vt2tiNCo8gYg/ocQuM0YUMEDrFRupgPFFxeihEF9B+gd8xT/QksOpXWIa4MMd8Gy3FH1EosO8Ct4OsblAPXUJQLU51iKwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAIAAAAVNSPrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUCFtjys/PZwoKCmJiZGRkAgFmZmY4jQ0jyyEBAK7qAuAYeB3qAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAASCAYAAACeomSBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUCFuljbENwCAQAy27ov49aJnvB6FkrWcPmk9FFKQoTcrzST5mJsYY6e7J3nvOOVFrBSMCrTWYGbjWQikFJEGSkARJoKS9vpjfcF8f5ug86h9wATADFmAXDSbCAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAASCAYAAACeomSBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFdJREFUCFuVjbENwCAQA637ipo9aJmPQShZC/ag+RSIAhFFSnk+y6aU4q01d3eRUtIYQ7VWJ8aonLN67wJQCEFzTmFmMjMBywArOMyGw/yB1+n7Z9e+4QHvjBZgBg89KgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjvnDhAnNmZiZzRkYGHOPio9MwNoyfnp7OnJaWxpyUlATGcXFxzLGxscxWVlYA/CwgVtHWuDgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAORJREFUOMuNUcENwzAItNv8K+WbAbJEv92s367Vf7JCvhkhdgpVziKY2EZCNvYdcNDt++60zfPs+N17P1D4ofuTzoFi1znDjiQjnV8C9QzkN3aTcNibvEfAJDaTcHy+UA0Vai09kFXqLFXI7pcaZBuadCkaJF25NKWsUpMGTSpN6UQG6bIluV3EVQ3NY5Wb1dMqarBI1ZZ0xaaWqlOyFpb2oNcPm6apSYO3hMO1Bi9PScAZY0wECf47fyIr7hCdgfEG4Em0Ab6xb9uWsjIRCbSGRAAwhJBIcg8nMPl9WRa3rmu20B+QCNBalqdZ1QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUOMuVUrERgzAMtI3KVKHMELBAShZIk0FYIaNlAZowQbYAJzJn+WRjKeHvfBLwr5dkYJqmD8Ig3tbaJ8Yx5PGd6brOcAB9QFwwv2McUHjF8zIVAH9AUghnPA88t6ogkjKg02AEQCRQdcpPlIstcZEGqFRXxccdeMXS7a+1EvFQS9ocwNspXdS1Sq2JgpIkibIt8Q2JM2jbUWeotVSdQRpObYkTqEDf978dijl4+USCdV2zG2YulpEtiTaBcy4bNEbHKicReO93/1HTNGVLSQTLsmQOlCOCyseTRFtLwYXfdIRjlVOEeZ53q2vblhyI6GmGL+DHprPdSa8DAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBackgroundCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1jeP36NQAFhgLCPZRjjwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorder.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1jmD59OgADjgHGSFRdpwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorderLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCFtjZGBgYIZiVihmB+Hp06c/BAAH7ALGIwf97gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorderRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABtJREFUCFtjnD59+v/MzEx5BgaGn1D8G4r/AgCTpQkFeqUzkQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAaCAYAAACdM43SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUCJl1j4EKADAEBRmb//9im9VTmim6TsIgInZ3GQEnL0QqYP5hRRFAMdabvpXj9pi6qxjFzXlq/SKCYXgDF+AD5ACr1RsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABFJREFUCB1jZGBgMP7//78vAApVA38fKzIUAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAaCAYAAACdM43SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUCFtjYmBgMP7//38DEwME/Acx/iMz/mJn/APi3wQYf4H4F0zkJ4rIX5gISVL/kNWgiqDY/gfm1D9wEQDwSTQ2I/IFQAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUOMut0ksOgCAMBFAHem1WHBwTVrXpDJ9o0gBKn4MRY4znzwunDb33ObbWcAvij4S47cFmA8QauxtZIxv1mxZANp9rHKRh9dmHBZaBReEMjFBJ5imMzSN6xFeEt74VwyJME0bMg9XdqxkKklKlqq6WYJaOYRGWYHZMDxhJKsFCQHOguWezT/1zKp0lKSWYJbQFOIO8L0oHneBhzz8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUCJlj+P//PwMIMDKBSBDBxATjglnMqAQLnEDjsmBRzAgAI2YDUG/9aHsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUOMutklEOgCAMQ0fh2vxxb4yJmrG0QNQl/ZNnuw69d/tLSGRaa/ZGMDK11qRkk8GlJCR/pGDJQbfBDAoCggBJqIdlAlVgCfXOshOLrKCDu/OjEmBZuKSg6CwvgLMyBnfMGWweWTZ8w0qArmIacxeXvxuTwkFcqVPBxN0A+1KCbLMsIHRXamewdUR2b8/R7jyWbmKbO21JN34Oq/BktCvK5iYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCFtjZGBgYGSAAEYoZkLDzGiYBQ0zI6llBAAGtQAx0/UgogAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA1JREFUCB1jYGBgMAAAADUAMcUHJsAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAABCAYAAAA8TpVcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCFtjZGBg0Afif1D8F4r/oOG/SPgfGv4PwwB88RIDhNxONQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKRJREFUOMulklEOwyAMQ+O21+aLi0/t6JQZJ6QbUgRK8esDATODvQdGbVT7mI+xPlztrs49QAAEwXzwMRCBIQPv9f3tymXAlSXbpYbqLhk6HVcBTRhmUN//AK1gycfffgWubL9gEdAeQEHACeRh6m0iAIWGyjJ6UqokqHIFED80b8jACGoZLINUracMA6q98GQqnPWXmSxYgf+3+Ry992turcnsC77uBJ8gKQLbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjYmBgMGACEv9BxF9U4g8qgSaGpvgf3BQwiwEAxvcQJujA9GgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAASCAYAAAC5DOVpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKZJREFUOMuVk0kOxCAMBPvg98wn+XaMc4mRx/EWpBaLoFTEhAD8AAiADYCfXC5sovv0jGjITpIgGNv+NDL07eKBIcCukVOukhmfXmG6mQeA1JKeD+zN2IGlAb9gX66KDMYNbFLt0My+na6yYTUvs+gNBbVdek3gbddBznitJRls+he0ZhhC/qwsDAEMHSQy21l1JhC1Ulj1EFMLC6nMyhZBLOzTgardIdHIhbP7OXcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindowResizeIndicator.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUKJFj+P//PwOx2NjYOJIkxUDalSTFQMxPkmIQnyTF0tLSASQpBtLOJCkGYlmSFGP4gZBiBQWFIJIUw+OBWMVALMkABHZAhg1MMQcHhxeQtoMp5uLi8obyJUF8ACitf5AUaj8yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/empty.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+P//PwNAgAEACPwC/tuiTRYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/FIXME_ImageShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdNJREFUeNrt3EFPwkAQhuHdpYB403jx//89Y9SIiNAus8msTGtbjCFe5p3kS1tSDn0y3Wwv0+ScA/X3aiC4EmCMsZxvJGtJ0kQTr5VNOkkr+ZLs5O092g4seA+Se0VcShYa74CtgdtLniVPkncLuJLcSR4lt5Ibg5icItquO5Suk2z1t7fhGpj0eq14GwVsHL/G9dU9aiPV82rSA4x609Jkpfckc48nvKDdVp+/4i3GAGsX1nWvMfHcgRWvNTZpqgNr0sTR6xqYBjuTyX1gHNm6eN/KxJFj/O1GOl649rAGzj4/XyJ8ygEIIIAUgAACCCAFIIAAAkgBCCCAAFIAAggggBSAAAIIIAUggAACSAEIIIAAUgACCCCAFIAAAgggBSCAAAIIIAUggAACSAEIIIAAUgACCCCA1PUA84Vrb5UvAeZBwuDcI1ge4PU8mgm8LvRHv5Wj5wmWnUme68A6L7TkGM7DB5Pj17ZTi9bkG3LYgXXYaslCf28DAxjrBN+DwfwB2OkNewWzw1e9z1CtjfWpOYwBVuUP07Z24KrnNbAuaQVvp07tELCovugfVgbPY/fNdWHBe9XzHuBeAbeBMfBhZnvXmqXuDFjmwmubUnzK/V+dAO2XkLvQMyBAAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/GenericFile.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFW0lEQVR4Ae2bPUhsRxTHZ11X12/UKCpEiDba+dWksbFPLeneexYpgggvXUACNkEwsX+VH4UQsBBSCmktg00I8gKKnU8xUfzY1c353ezxLebtvWfXe90vB45z986ZmXP+5z9n5q53Yy64xEQlLtKQrYN7PE3jTrrfiFBHXuoNM2S2t7e/mpyc/P7i4qLOoG9WyWQyLp1Ou1QqlSvp09PT3/f29n5ZWVn5TQYDjMhKEABEP3F9fT3c29s70draGroh9/f3D87f3t66m5sb19XVNdXT0/P1yMjIu6WlpR8ODw/PQp84O2AQAKglz8/PkxiGRFHu7u4cQMAIZUV9fX3T8PDw/OLiYvPc3Nx3Mu95FHNbKB0XilqAKtq+eDzuEHHaJRIJTxgMRgwODs6tra39JB87ip7Ap6MFAJ/u4TWp89QIgMCGy8tLNzo6+np9fT0SEMwAxGIxF7XgtDIAEOrq6pzkHy9RTk1NRQKCGYDwYu0/Uu5SAADyw9XVlWtra3Pj4+Ohg2AGIOro6/g4rcuAmvsKQEdHhweC5ISfBcZQcoIJAIlKRg2MuoYfgKBMoAaA5uZmBwDIxMTEq7BAMAHgT9pwWxVgZQIAcFCi5hzS3t7uCSBsbGw8mQllBQDOa1EgWAZ6RgAUQIAFADE2NvZkEMwAqEFR1jjP+DiqovPBAAo1AHR3d7vOzk5ywqvNzc2it8hIDziexQX8wVktuY7DgP39fe9cwDZJaWho8EBqaWkhJ7ze2trKzM7OvpWmgk6MZgDUIG/2CP9w+NG5iDYO88C0s7Pj5EjuXaOTTCYdzsOG/v5+19fX90Zygpufn397dnZmBsG0BISOz7YLqPMsAQAg0k1NTTwgOXlA8mgP9dkV0OWgdHx87A4ODjgrvFleXv5R4tMi8pFOPgEzM8BnjFCbFACNPpHmEETUGxsbPQaoDjVAkSjRhykDAwPfrK6uvl9YWFgVw9IiGT8Dyw4AjMUxjT40JwfABB6OcpcIevpZ+7FkhoaGvp2Zmfl1d3f3D7n/dADEmIclwERRFpyiAAARpxBhgOBYjMO6Q9CmW2TuI7X0G5yenv5SAPgTFfTyFTMDMEyNyzdYWPdxUOfjmuhDby3aRg0gOE87wnXWzs9EHwQ/dtQBcuqyBEDtgwUAQJSVDdqWddL7CAicFgGAOssQ/Q4TSuVdBmYAdOLnqNU5jTAOPS7apvcBCwAUNMkFOP7/jtohW5sAwAAmVMMejRHJx9y5iPCnSq4O7WojOQPhFn/8igkABlAQ/AaLqu2xo/nmyVLfcz7LgHyqD/cDKYKmGPDpEDwMUz4XgMBWmGVAoGFmBii9AkcsAwWcFyAC6Y+pJgaUgU8FmUCwBAQTa00M0PVvXYsFWRuBctZOEwNMAGBjJS2BQgJlBkBBiCBgJR2yKnNAIYhWLQCSt8JNgqBKMqyUYrW1cjyKCPmXJBgRsCUfVrbC8HNAIftrqRF4yQHGCNR8DjABoHtqJS0BIwGq82nQ6jx6NX8OqHkArDnAY1Ul5YCa3wZDPQhpUqkkBqjNQXXN54CaB8CUBJVGL0tAkaiiuuaXwAsAVcTmolyxMIDXY0zfrhRlQYk7WQAosYnRTl+1AOh3GEHwmc4B+mBRSecAtTkIgKplQJDj2m4CQCJv0tNBy6G22mxZApkPUo6Ojv6SV9AS8sKS6f/upQKBHUtekUmdnJx8EBt8X5LExiBnaOfnop+LfCHCy4f/vbgvF2Va+M0xzr8XORK5EMm7jQcBIH0dL+i3ibSL8OZluS8Hos5PXP8W+UckJZK3WABAB6eJvEU/72TP2EDEYQJg5I3+M9pTvlP9C04LfFSu/LkzAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUDTheme/WindowClose.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzZENjA2MTc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzZENjA2MDc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+0eKROgAAAlxJREFUeNq0lM2LUmEUxr3qpDg2w5hfGTONobaoUYkICZnBFiGtyiaImZ1/gZtcuInoD3Dvol07Wyu6ioRahUJtLJJyIePXojTN1NvzyLkiFcymLvy4556P5z3ve+69iqqqun9xKf9VKBQKrdfr9fvT6fQq2KHPaDR+Ae8CgcCLWq02PE1IcTqd4X6/n5zNZnz+Cn5IzAQ2DAaDzmazPWu321U8q38TUlwu100kHMM+AV3wDfyU+Bo4C+zgvMPheI7ciiam11Ti8fhWt9u9C/MT+Ag+g5aInohN3wfGe73evUQiYVvuhR0BPbZEkUfgAbhdrVbVYrH40mKx7JNSqfSKPsbAIXPtdvtD1lLDKHrG4XB4UVblllR0997tdu/n8/nHTMBCUfrkzJhjGo1GbtaCibY1A6Yzx70vBzw6Ojp60mw233o8nluENn2IjeXs+pPJZCpCy470iqJwpGS0GJHJ1MWEZtoR0KZPRHh9F/SrU1tH63c6nU4TdoeOSqWSt1qt4Uaj8YbPXq83MhgMqtFo9FCEMDjHNiZXgD3QtqYGg0GupgC2q1Ck1Wq9TiaTTwlt+iRn8Ur4/f4ebvPVqZ0pl8s7SDyA6xIbADdABASEiPh2GTebzQeFQmGXtYtdaeMHG5lM5hqS9sAFwQW2BNeKfy+dTl9HzaY2fk2IrAF7LpcL+3y+K1K4yfMTaLsYy2azYeQ6tG5+F+LBm8A5jNqXSqXCsVjsMoq3CW36GOOCkqto9X98tPJKmKULs3xjOjngsbwiYxmKetr/SC+CxpXvcS7F0+WkVq5fAgwAsK9LC3k6I+YAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUDTheme/WindowCloseActive.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzZENjA2OTc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzZENjA2ODc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ehr59QAAAxVJREFUeNqsVEtLG2EUnVdeJiYmJDG2kgS0TUkUobiToghCXdUSspAqdutj51ZXunUndluQ0oV2U7rISukPsCA2GGktMaYk1DTvSTLJzKTnykzQrh345pu5r7n3nPMN2+l0mIe4OOaBLoFup6en+jtLa2try3Z0dBRttVqRdrvtJ4fBYEgbjcbE9PT0p83NzRpMHW0xY2NjDEujaYVYi8UixGKx5+l0+i3P8xwSaxzHtcipqqoRhW2Koqh+v//9wcHBt0ajIVOxe4X6+vr42dnZF7lc7o3NZiu4XK4KbBI6UagQOuNLpZKpUCjYa7Wau7+//0M8Hv8Km0KFBH2mjY0NF4rM9fb2Xg8ODpYDgYDqdrt5s9lM4zLNZlPO5/PS1dVVNZPJiNlsdm57e/v72tran9txNNa4YDD4GsHhoaGhGyxmfX39XaVSSZ6fn3+mgHA4/AofCe3s7CxfXl52sLwY/Rdg+EiT6x0JoigGnE7njc/nq3k8Hifa/22325+NjIyYKcBqtQbJ5vV6KbaI7hiM6dMIa+n087IsqyaTqYhkEUs5OTn5gsQsFdCK5MiGrlT46xi5BPBlnXm9I5DDiWi1jiQFYNeRUGVZtqtWPKtkA+gUIwmCIMNW17XYFSQFwSmhWBN7IxKJxJDwCDhlaNEz2cinxUhgtXpPkKQFYJFPpVKMJEn1YrEoYsxAuVz+cXZ2FqeA0dHRlw6H4wn5AEMdOFmHh4f/EtB3WTMeHx8/Xl1dfQrnDajvgT2ALq0DAwMNCgDdlmq1KgKCFOhvJBIJz+7u7s+ZmZlrAlvvSJ6YmCguLi6WDw8PjShQAnsSdk4XJJ55gKtCaw1oybawsFCdnJwsUG63I1J2KBQy4t0F6fv39/cVJJahrTYUflsIVPMY3YCuHNFolF9aWroG2IVkMindUzbobOOLpfn5eWVqasq1t7fnuLi4aKIwMcOMj4/34GPmlZWVGsYt4uxVAHqry+qdQ0unmNUIIBFatd2gxbbppGCJ2i4jr3v6hbv/FM3RhoPGkbSiukRUDQ8qoP7/P/onwAD1HZ96Rg2qRQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/minus_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAECAIAAADXmFKkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpiYKAHYPz//z9+FQABBgBgSgL/1o3U+QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/plus_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpi/P//PwMyYGRkhAsA5RiR5ZgYSAC0Uwxy0/+BdwYLlqBjQAo6VMVQdyOD/2h+ooeb0QXQ3YkMAAIMAKADEhQiIamgAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUWMPtl1EKwCAMQ3OeHc+7+539TNC6QZWWfMxBYCjSh6YRQRJK4QDYgVIKe6UD2IJPUZLk21y00BdsRd/+M74BoAKswATQxqN1ACYAqQekXSDPgdUF0YDY2bbII8Kq0SJNOgBchEsWwLvO6gB8BpHEA9IukOdAVsJ5QZGZ856jQtaN5zHrAADEygLY+QOwHUQpHpB2gTwHfv84vQHcG1BmjzmkMgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider_button_h.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ5JREFUWMPtl1EKgCAQROci3cl79rcXtAwE3YysdpmPVngQSvjAcSLknMEEIaBHSim3wHvoDQsicjBaswbthnXT0bMHncC6x6GgBeq8NSFwEqBmgHoL6D3wtTdciugOyyPC06BZhrQTWARTaIHZ9zQhcFlElAxQbwG9B+iF5dnzM0cFry/eTFg7AcAWLaDXQ+B1EblkgHoL6D3w+5/TDQIL6kKVaIANAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/standardApplicationIcon.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAM31JREFUeNrsXQd4VFXaPpmZJNPLnTs1jRIUERtiaCoEWKQoJaEJJIqhBsVC1RWxrO6669pd3fq77q6666pr76hIh5BAQgglkAbpCSQZAqTMf8+dc29uJpGamTPle/N8j5MhJmfOPefrJcLtdiMAABCeiAAGAAAAAwAAAMAAAAAAMAAAAAAMAAAAAAMAAADAAAAAADAAAAAADOCC/0BEBOwyAOAD9MTdpc4AfvfRVniSgYVeHBXBNvgHq6YMo8oAZPAIABIYOcoh/wWEARSwBWEvgSIk2tgD/eIchkOl5Q9w7z8heR8cRSEK0AAAwjmQcyrl/GgDg79/4P7n/88M5wMYgB/gBqJERPrjM6B46p2v73FY2XhFZBSyW8wG1hGTQjREmefnYL98Q2FuAkAUkjrkHEVFKdWPmsxm/g0DY0ZRlVWPci/fIT9zFp4TaACAEMLqqcMjyOWPXPWHd6fZWCYuWqXmpZJKrUb4+5WvviNoAXLy8wBgAIBQk/5GszXTaGY7/QP+3mSxLeVeRpOfAwADAISQ9Ocdf8t+88fRNqtliEaj62Sa4u/x+9y/Jwu+ANACgAEAQkz6O3v3W8WybLc/wDAMssTEz8FmAmgBwAAAoSX9FamZa/vpDYYhar2xW/+01sggs8Wagn9O0AJgB4EB9DAgFEQh7ISfe9Q1w0eusbLmcz4du5VFVyeNwL6AqA4zAPYRwoA9df0hvORvYA1AMXP5o33NZkuqyWI75w9rjWak0hlnjJg049ebP3vvDPdWG/fM4KmBBgAINqyZNkJQ/6OuumnEwzYre14JJZfLUK84p3bktLmZxBcgI78HAAwAEIzSn5PmVqVae5vOZL6g/wknBmkNxpnIExJUkN8DAAYACELpH4mleUKsUyuXyS/ITFUoolCsw+5c+erbaaAFAAMABLH0Hzl1jlXPmDNMrOWiXFV8YpDVsRB5nIEQEgQG0FMAT7CvSSr9h02YlhbvtOtk8ovz/+I0YSvL9F/y9GtCYpDc83thfyEKcDnXH/zJ/gKf+KMzsQs5uqRfwJgtyJ7QdzH38juOWpAnIgAADQAQqFibcrNY9LPy1XfS45wOZ1R09CX9Lq3BiEyMeey0xSshMQgYACDIpH80Y3OuMPIlv5eusuLQ4TXDk9cQX4CMMBgAMABAgEp/Pu33/uffnGK3mmOilGre7LpUMpqtyGBiUoZNSLEiCAkCAwAEh+1vtscuNjJsj/xCu9WCklPTcHpwJGgBwY0AcAKCF8kXeDj1FlH6L3nm9dF2K5uk1up65HcbzBZcKJTBvXyGo7MctbvhQYIGAAhM6W+L673EbLH0nNRQKJDTZtU9+NI/0gUtgDAcADAAQAA9W0XKktX9GIYZq9H3bKt/nB5stsc8hCAxCBgAIGDV/6irh41cY7WwvKnVk6RUqZHDZnHe99zfphItQA5aADAAQGCAT/udcd8jfVnWkmpkrT75I9ipyDrjFoEWAAzgMgDpoD1JEukfeeWgoZmekl/fADsVWcaUdNcjzw4iDID4AuA5QCrwhV5/8B37RPoPnzjdptLqZ+CGHr4Ep2GguH5X45DgLo5aER8RgIcAGgDA73hk+q2i9L916p2ZCbExOplc7lP5pWPMiLVYUqYtWSWkB4MfABgAgKL0l98y5U6rzmTOMJotftFibVYLumrwzUJikJwwIgAwAAAF6R81ePSkKThOj6W/PzgA7h6s1htmcGYHpAcDA7hoLwBQzzmT+MQfxmZfoTcxfnuCco7RxMfYtcMnpc4jWoDMw5DguYAT8HzXHxxGl41fzhgplvw++PI/+ZJflVrj1zXoTSzSM5YF3MtXkJgeDN2DQQMA+E0Q89Lf6lxhYFi/y7HI6GgUF+NwcgxI7BtIGBMAGADAx9KfT/td/KvXklnGxJf80tBm9QYGawGzESQGAQMA+F/623slrjZdZsOPyyGlRoNLhZMWPvmKOFAUtIDABpQDBzEenTlKlP6Lnnp1NL58OoOR6prMLIts8X2kfQPb4RmDBgDwsfS34pJflqXu08aDRnH14eSFD0HfQGAAAD88P8XUxSv5kl+13hgQi7JaLWjg0FFi30CiqQCAAQB8oP5HXj3k1jX40gVKaFtnNCOlRjtuyG3TIDEIGMB5vQBAl5ZAwhf9pC5bm8ip/ql82m+ArA0PFE3gB4rOEfsGehgWPDdIBPK+/uAfumism5UsSv8+A2+cxxLbP5Bg5PsGmr36BkJiEGgAgJ6Ap+R30gy+6OdCp/z69WDJcd9Ai275838XE4MI4wIAAwD0hPQfcfvMZb3jYnQKPOcvALVbPceY8DASBIlBwADAB9Cjtj8/6UdnYjL0DBuwhwvXI1jMJmfG+hdGEy1A7mFg8BzBBwA+gIvGY7NHiyW/97/wVprDatFF8A0/AncTcd9AR58rVyIYKAoaAKBHwCf+GC32lXrGHPCL1RmNiDWbk+ateUbsG0gYGQAYAOAipT9f8stJ//T4GP+X/F4qLBYWxSYOWAq+AGAA4APogYYfBtayyIA9/0GydJwYxFrYlCkd6cHgBwgQHwB1BnA5k2rDhR6bPUYs+lnwxMvJFpbtH6lS8bZ/sHxxa0aJ1yfNFZyB+DPBswUNAHCRtr8toe9qhmWDbvFaTmPBiUFDx8NYcTABABeM9Xd2kv6jHTZrkjZAin4uBnigaKzDqh085vbJhAHIyGcD0HwugeEDAFyI9Dc7Y+eYGCZoQ6c6I4sYuxMPFP078qQHt8HzBx8A0LltRD7td8qilYlmsyVFY2CC9rAp1WqEG5be9/s3cXowHxFYf+fYCPABgAkA6AaPzxkrhv76Dx6x1m4LnIq/SyWd0YR0DAt9A0EDAFwAeOk/dclqvuRXb7YG/QdSarTIbrMmZTz+0ijBF0AYHQB8AIAO6f8LScnvDfMsFnPIpE0zDIOwP4N7uQGRvoFwDsAHANSN7T90QqoVh8+0RjZkDh32Y2B/xqR77hf7BoIPAEwAAMETczuk//BJ0z0lvwr/zPnzF2F/Bm5lRnwBMvKZAcAAAEhS8qvWGWfiJJpQS4BV476Bar5voAVBYlA4MwDIB5eSRPpH3fvc39JinXanXBEZch9VLpOj+LgY7Yg7ZmQi0jHI89mhFiCsnIBQG94tSNGPfaXRzIbshzSYWKTSGmci6BsIJgAAoSfnjRNUf8Wy5/6WHh/rcEYpVSEr/eSRCn6gaOZv/yr2DSR7AAAGENbSP1pvYmdrjaaQV4ANZjMyWR3QNxB8AOFNRPLh5yGfv/6FZJvNkqRUaUP+o0dFq5GFNTnvXvf7ZKIFyD17AT4A8AGEqe1vi+uz2swP+ggP4L6B9oTEVciTGMQXCcG5ABMgbPBU2m1iye/sFU8Nxj30VHpDUDX8uJwvrcGIDAZD0sT5yxOJUJKRPQGACRA2aiAf+otNvHIpnvIbbltgsVjQgKSbxcSg8DkboAEAPEkwkXcseDDRzFpSAnHSj8/NANaK9EYmZfDYO6zEFwAaQDgwgHDP+X8qbbxY8nvFjcPX2qw2arKota2NJ1p/326zouG3zxITg/DeQC0AaADhIP0VN42bYtUbTKk6PvHH/9evtbUFZe/Y1ooJv6bSK4Bhkc7IZOC9QJAeDD6AUKdfpY+XFP3MyHTghh+UllNdWYlyNn5Vhqm2uprKGvCMwxiHVXtj8sTJghbg2SPwAfgKEAYMAOk/5LZpVo2BydAxdEJ/bZzaX1Zc1PrT/94uVev0iuETp/ey2R1U1oL7BhqtnfsGQkgQTICQw9N3TRCl/9CJ0zN7x8fq5AoFFRlUU1ONjubnVJ9qPNlcc7y0MW/7xvKamhoqa4lWq5HTbnVmPPnqFKIFyMleAYABhBz4tF+VVj9La2SoqaFY5f/hvTcLuG/OYNr+5QeFtdVV1NZjYMzIbI9ZhCA9GHwAoUhEovGe/6XP/jktLoZeyW9tdQ3K37mptPpYcQ33ThOmkoLciqIDeTVNjY1U1qTS6Pi+gXc9yqcH84lBnj0DHwD4AEJM+uvNtpV6hqV2FGo46b/9yw/3cS8bODpN3lbm7/ipsP/1N7EarY7KuoycFsDYY3DfQGGseDv4AsAECHo8c/dEseR3yW/+nJ4Q63RGKdVU1nKivh4VH8qvKsrPKea+reWoGvMEjuq3fPLvPWVFR1xnzpymsjaNwYRwUtTE+cvFvoFwesAECBWVj5f+OhMzW2MwUstCwXb+1k//k4V5gYQBVBEm0JC3ZcM+3hdAaX04MajfDUOEseIyD/MEEyCkGEA4Xf1n7p4klvymPfpcss1mS4pWa6msxXXKhSrLy1z7tv1wiDAA4fILDKB+2xfv7z1WVtpCKztQZWCQSqufMfgXk8W+gXD9Q00DCL/2b56S39jeqzkVl9q2Y89/1ref7OZeNuLLTi69QFgbONF0oq627MC+ktqaajpOErkc9YqL0w6dMF1MD/41ZqLAAcAHEGz49XxR+ivGpy+7wmAwJql0BiprOXv2LML2/aaP3tlDnH8nCNURZoDpJP63H/775lY+M5AScGGUWmfAfQOjEaQHgw8gFEp++9908xqLleXMXDcVwnb94T07DhHpf5Jc/pOEGQiEv2+sKC6sOHb0YGV9XR2VtcoUuG+g3bnomTfEvoEeZgoqQGj4AMJs0s/E+ffzJb8GSnP+WltbUVlJccuP77+1S8IA8H9xDoCLUJOUCWz99L2dtMwADANjQXqzdSGSJAZBNSCYAEGD39xzu9jr/4pBQ9fabPSGfGJ1fv/2jfmcfV8nkfqYAZxCnjyA0+S1wAQasKOw6niZ65TLRWXNkUoVslks/eeufVZIDJKTPQVcJmA4qH/AS3/c7CJapb5NpWeocf+62hq0e8OneRLp30CkPr74Z8laT5P3BHOgift/smIS+twap9ZQWbeJxX0D++C+gUJiUBsMFA0FEyDE6Tf33CEW/SRNSM2Mj4/TyuUyKqupqixHBdnbjnB2fTm5/IL630wufxu2EsjrU+TfeA1hz8av91dWHGuh1StArTMgvcGYNC49U0wMwnsLHoBgNwFC3/fnKfkdn2LVGpgMo5lu6O/H997c7mX744t+hlx8zADaiYQ9I9UCGutr6wq2/7SPZkQA9w3sf6NX30DgABAFCFR6NqND+t+QPDEtIdahQzI5ldXU19ehY0cOVlWWHKmQOvgkDKBd8kBayXunpMwia8OnudiEoDZEhO8baEwZNHqSpG8gcABwAgY2+MQfrZFZqDWaqbmb6zjJve2L93dILn8DcfSdFqT/mr9+7MYk0QI6+QIqOdPhQPa2wnqOCdD6HA67DQ2dmComBj2bMRmcgUHtAwjRsB85mHzJ74KnX0+Pi3E6FVHRVPYYe+/Ljh4+kb/th8Ju1H/B9peGpgQtQGAA4v+zb8v3+XW1tdTOi9bEIo3BfA+SJAZBGBA0gECW/tFGi32FUPJLq+NP7ubvciUX+aRE+vNTeVf/5WPv49hGtIBm8rONPAPY9sOhY0cL610cU6HxWXDXpBi7TZfx5GtiYtBvF4AWAD6AACJyIPm037vXvzjFabXEREarqCwHS/9jRYWuLZ+8myNR/5sktn+b5yc7/qfVf/lIMAMEX0CTxGxozNvybS6txqGYcHqw0Wp/CHXqGAQ+ADABAkut421/o8Wx2DPog1a7ryq0e8Nn2ZKQnlT68402Vv35I/fPfIY2oiE0S5hA4+aP380p45jK2bNnqHymaJUKOe02513rXphKtAD5bxdMiQATAEwA6vjdwimi9J+z9tnRDrstSanVUbn+La2tqLL8eMven74p8LL9XZLQX7fHEDMFCQOQ+gJ452Hh3l0HcXowLbmp55iqyeaEvoFgAgRsw48oa1yvVQye80cJNVWVqGAHn/Zb6yX9mzuk///c5/ksAhOQJgY1bPrfP7M8jUPpADNVlmWSUu97dBDZb5mH+YIJABoANek/VZT+t6Vn9jMYDEOUWiO1s4Uv6KaP3s5CXdN+zxAGcM4T6GEOYkhQMAN4PwBmKoV7swqrKyqofT6WtSJHnyuXghYAPoBAsuf4op9+Nwxfgw8orZHbOO33MHdBifTvLu23/UL2XxISFLQAMYlo4wf/2FbDMRlan1FtZPi+gePSxPTgCPABgAlAU53j034nzF/e18yaUw2UO/5s/OCt7V6hP6HiD1/o9pV/+tB9vs/k+RmeWXg7AxsqSwrLjx89VNnY0EDtc+LKysTrbloqOAOfWzQ1AkwAMAH8jucWTRNLfnsPvDHTZrNRO1O40reoYG9ZVUfab4Mk9Ccm/lwEpCFBqS+gae9PX+/1NA6l81lxZSXuG0jSg6FjEJgAdBt+4IOoVGtnKvUmaqox9s5nf/+5NO4vOP8Ez3/7ij9+6L5INdVbC+AZy+4Nn+2rKC1xuVxNVD6rTC5DcbEx2kFj7phHtAAZZsZgAoAG4Df8frEo/SNvum1aZu8EXPJLxyeF1fGigryq/ds3HvYK/TWjjsSfiwJmFqhzZmCnXgHZP3y2m2bHIJxnoTWaFxBnIGgB4AOgYvvLbxo31aoxmDJ0Znqhv9qaKoTV8m48/0Lor23FHz9wX6Kt2l1IsDF307f7q8qPteApwzSAayziY53Oe558VUwP9jBl8AGABuBz6Z8i2v4DR4yZgvPUIyIU1NJ+Kzl1nFP/81HXkt9Lsf0lWsAHP1cleBJHGorydh+uo5gerDexSMdYIDEIfAD00n71ZtsKLaeO0rL9cUhu9/efZ0ttdOSV+PPQGx+4L+OzCqaA0CxE1AK2ffH+LpohQYVSiawWtv+slb8SB4pi5gw+ADABfEbPL0kRS37nP/FKeq84pzNaRWfOH+72W82p4ds++88e1Lnm3yvt99I/70NvvC/1BZyWMhoccSg+kFt6or6O2kkycaYXG5OwGAVVkRCYAMEOXvobLJz0N7LUzlFNZSUq2LU5H3Ut+ZVI//fdPcSxW1HXxqGNOT98kUPTDFDrjMjEMGPHzlkEA0XBBPAtPb8kVUz7nbXqmWSWYWIUShWVs49n9x0rKWrZ8tE7u7qR/mcF6d+DKqt3rwCeAeDIw7Eier0CMFktNtRv0HCxbyB+TmACgAngK9WNl/6WmITVBoaltpa6mip0rHB/SdNJsehHavvzab8Pvv5fd0/8Lc/v6ZQY5JI6HPdt/T4XRyJo7YXaaEKcGTbuupHjJYlBYAKACdCDeGHpdIn0f3q002FL0uppFv1Uo03/+9c21H2v/1bU0fCzJyHtFdDhDPzsPznYF9Ha0kplL+QyOUqIj9cmjU8R0oNl5HkBwAToec8/Y49bglt905IfOAHnYM6OI1Xdd/vt0u+vJ+iBP/zX2xnYKTGoYNeWfdVVlfR6BZhZpNabMlAQ9A0EDSA41X9e+o+du7ifiTGNVWr11NbCd/z57pMc1H3DD77P/wN/eM/tI9W1u/qAxi0fv72rtrqS2p5EcFpAjMOmS3/sRTEx6MXM6RFgAoAJcNl4MXOGmPabeP3QNXzRDyXgkFtpYUFVcX5OsZfzTzrpxyfwMJUuiUH833edrK89kre7sI5yerCBta1AkBgEDKCHwRf9jEtflmhm2VStyUJNfcS2/66vPtyFOjft7JT2Sy6qL9U3qTNQ0EKasr/7NLuGWx+tvYlSqnFikHP6g0+MJlqAnDBvAPgALo2k0r/X1YMyrRSlP077rS4/5irYuekw6tzww2e2vzfd/9p73fUK4H0BRZxWUna4oNLV1Ehtj3Ardmt835UogMeKgwYQhA0/rh81wabUaGeo9CZ6tn9NFdrz4xe7vTz/nbr93v/af9x+2JP2brQA3hdwOGdbAR4lRmuPtHoDspiZpMlL14p9A19aNiMCfABgAlw0Xlo2U5T+N/5iSmbv+DidDM/5oyA1zp45i44XH3Ft//y/3mm/0kGf/jxd7d2HBN/Lxus8ffo0NQnLWKzI0bsf9A0EE6BHGn7wk35wiEnL0Cz5rUZHcrMOdSP9xbTf5a/+x+2PfcF/p5uQoLimgh0/5dGcKKwxMIgxW1JG37k4IPsGggYQBKr/y/eK0j8Kh5ZiHTZdhExBZbdaW1vQ8ZKjLVs/eXcXOmevf7+rsUKVYKchIlnffry3oqyYWq8ADKvVgnpdfd1cwRnoeZ5gAoAJcHHgE390ZstKDcWSXxz3P5i1Jd91ki+7E8d1SWz/tuWv/tuvJ4v8PcEXIJ0lyIcEjxceKME+C1p7puS0AA2ntV03agL0DQQT4OLo5XtniSW/aeteTE+IjXVGK9XUBEZdTS3as/GrPPTzab9uSqpsd+3Deea0+eO3t9ZW0asSVMgVKCE+TnvdyAnzCAOQ4ecKJgCYABeqonmkv8m8SGtiqO1UNd/rf8eR6tKj5aj7Xv9ttPb0vlfelYYEpb0CGrn1VpQcpNsrAPsCuGeH+wZGo4DqFQAmQMDilftmi0U/0x96MpmzJfsrolUU1f9qtOWjt7d72f5Sz387uYi0IJgBp5HXEJG9P361h6YZII+KQgmxMc60dS+kCREB8nzBBACc3/ZnYxJW444ztATFybo6VF50qKq6rKi7op8zyDcVf5eC7iYKNxzYtelQTfkxF05gotYwBPsCjMxsBCFB8AGcj6TSP/XBJ0c7bLYklc5IbZ9w6C/rm493oM5x/yaJ7d9278vvumnuGf77XlpAp4nCezd+nUUzJBit0iC71ZbEPc9Rgi8AP2fwAYAP4Jy2v8nqmGNgzNRWgjvsHC86fIKTooXdqP9Ubf+LmSi844v/5lSXl7W0tLZQW53RbEb4eaKA6RsIJkCggk/7HT1ncSLDsim89KckJuqqq9D+7RtzUdd+f6fJRWu/9+V33IGwaWQd3bUP57WAQ7u37qvjR4nR2Uv8HPHzHDUzA/oGggnQPb26/E4x9Nf7msFr7TY7tf3BNvOx4iOunV++Lx311SSx/dsQpdDfBYQEu50liEOZNIGfZ9/rh4p9A/HzBhMATADkXfQzZu4SvuRXbWIpdvypQrk/fZUtuURS6c+n/S576W13IO2fZz1dEoN4zQWHBAv37ijERUK0Vhitx30DVeOuHTnegqj3DQQTIKDw2v1zxKKfuCsHzrNY6I34xmm/uL9e/tbvC9A5034DEm7CoIQqQTEv4MDOTfvq62rohXXkcpSQEK8dNOb2TEQ6BpHnDiYAwCP9rxs10YqLfvD4aVq6NO71z9nMOO231kv6N3eW/oEHiRbQpUrwwK5Nh0sO5Fe5Ghuo7a3WaEZKrX4mkvQNBAZAxQfgDhiSSv/rkycu65MQp5MrFPTU/+pKtP3z97JQ17TfM4QBuANp/7yJMADpKDExPbhwz479NM0AmSISxTmdzjsf/l2aVAugsEegAQSY9Cclv8YMbPvTAk77LdqXU0ikf3dpv+1BsqfdJQY1Yqcm7hXQcvYstYXh7sEG1hrWfQOBARD84YG5YsnvnF8+lxbrsFOb8ssX/VRXo62fvitN+z1JPOpir//MF//lDuQ9JevrbpYgb8oU78s+WMuHBOnssSJKjaws65y2/LFkogXIyTkIGyhoL8AdWEeYFP1YVqqNnpJfGsCVviUH8spqOtJ+hay/Lv3+glALEH0B2Lzpe/2wgazNHokdczSgY1hkjum1inu5QdjbINrXUNAA6IetXn9wrhj3v/OR59IT4mKoTfnF4EN/m76Rxv0F559Y9LP0hX+6A7+S0o086xQTg5qlvgBs3pQfLSip40eJ0YFGb0RGgz7p1hnzE4lAlHnOA4QBww289NcYTLPVBhO1RTQ1nEQlB/OrDmVtPow6h/6aUUfiT7DBu1dAhxbw6b+31VGsD8BgrTbU97ohYmIQ+ADCSP6//uA8sehn6vL1yXabLSlSqaHmOa/hbOL8rd/vRV09/2Kv/yWcVA2mXspLOrSALlWC1WVF5eXFhZWNHOOjtec6xoLMFkvKqNkLE4kvICI85H8gcLvAaMnCq/+sM241w9JL/MFpv5VlJa68n77OR+eY8xekAxW9ewWIQ0T2b92wl3cGUoSFZVHcFQPnEQYgewMLhjDIBQ5rE+CNh9JE6T9hwYrBLMsmRWsN1NaDbeG8Td9kS7zlXbr9Lnn+H8HsohIiAp2qBHN/+joPMz6+VwAl4L6BOPR7zS3jwqpvIPgASOjPlpC4lGGt1ARka2sbqi4/3pL19Yfevf6DIe33vCCMS1ol2KlIiGN8u3GVIK39l8sjUazTqR0wfPRkUQvwCIiQRgCEAameafyAI0fOWsCX/Hqcf3TW42pqQDXHiyv6DxlpilKpz6q1BrfWZFbrWZtdozc2K7W6szKZ3O0O4hjVwt/9X0R7a6vsVOPJ6Kb6Wm1DXTXjOlFrb25qtLacbm5obaPL49RGBunN1oe4l39HYkgwtGOCEb7+gBER52aii3//FpUP/scV6RGEAarvfur1vw64emAqzcw/jMYT9ehMYx0KS0TIkVJv4sd50URNWRHKzd614P3n1/2baCpt3Bl1+/AcUhWeChS+4BnAQM7m0xkMqSpS8ksTcU4bsut7heXDaG13o0NVDdSfgZY7B0aLfRH38n/EXGkL5X2nbwJQ+Jt/8kh/vujnuuRJmXa7IyCs63rXWZ4A9BCt1iK73Z405b51oz565akvMW/ipHT7Ih9qAWHNACiFQnjpf82tt1nVOkMGtv2C2L8G6GEYTQwyWOy4b+AGogW0oxD1BYRdFOBPK+/qkP6jJmb27ZWgkysig2pIOZDvOwaZzZYUaXpwqN6HcA0D8iW/So12VjTFtF9A4IIzA1DCgBuEseIyIjiAAfS8BeC/lE/yEPmsv5mrf5MWGxPjlMujQOQBdaEonQn7A2YMvPkXYt9AaAgSQtJfx7ArcSmoG77gq5svmVyGevdK0F7LmYmIJAb9edXdEaABBCnIw8OXX8FJ//Re8XFOPOcPAPg5qIwMUml1Id03MNw0AF7645JfJafigaoLdC7C5mFcbKxzxqpfp4WqFhAWqcB/WT1f8PzL71j2y2SbzZYUpdKAiAOcFzoTi7Qm80IUounB4aQB8A0/zA5PyS9YufB1QWPFo5XIZrX2v33pw8lEYMqJQAEGEAyQSH/FiJT0KwwGY1KU1oAAgAuF0WxBbEwC7hsYch2DQn42oORzRvW+5qY1rNUK9i3QRZGSExh6TnCMmJYuDhTFggVmA/YMC/AxedJ+b5k+H8/5S9EyVjjTQBdNWHD0vnawV99AaAoa0PjrmnvEXv8JVw9aa7Pb4SgDXRLhvoE6gyllwLDRVhIRCAk/QKj7AHjpf/WIsdYopeo2nN0FAFwqHA47ujZ5kpgYRARMUCNkw4B/W5shFv1cM3J8Jp4GK5PJkRuK/gCXCKXBjFQ6wz0DRox9LX/zt6XcW+3uII8JhrIGQEp+x1tVOmMGVuEAgMuSlgrcN9Ch6z9kpNg3kAga0AACCVLpf9Ww5LTe8XE6JJMjqPkHXC40RnOXvoGgAQQm+MQftd64UKVnwI8F1DNVgko1inE4nFOWr59CtAB5MGsBIecD+L+HF4glv6krnk6Pj411yqKiQfYDeloLwH0DP0Skb2CwugJCVQPgi360jGWFhnKnX0DoIVqjQ3iIzJj0e28kQlRGBA9oADRBHgKf9otVtBiHLUYRrQTbH9DjMFusyJaQuIR7uRMJfQNBAwgc259T0RZrDGxQjtEDCnxS6hnEsJaUESlienAEMIBL9AH0BEml/8Qla0fj1s7RGi2IKoDPYLPZUWz/63DfQN4ZiM8gtAQLAOnPOOJWmVgrnFCAT4EzS5Vq7Yyrho8J2oGiIcEA3nxkoSj9h09L72cwGIZEaXQI4lZAviS5XIZwhumA4WPEseLkLIITkBIzi0oYOGgNa7FByi/AL1DrGaQxmBZwL19BnsSgdhREXudQyQPg035vTp3fl2HMqVrKab/HS4sQHnUN8D0YixU5YhPOO4TWZzZnVDTCuSbTHnwq7cMX1v2Fe6uV0wLcdz39JzcwAD/g779cJJb8xl517cM2POePIpoaTqJDe3ad+PS1X+XA9fQ9bp5+T+KI22fEsjZ6zx3nmmiMDE4MegsFWXpwKPgAeOl/1bDR1qho1W2ROhNVy7C2pgod2PZ9MfLEhvFhOAPkE8J725K38YviWk7bovnM5dEqvm/g+IWrhL6BMiKYQAPwk/SPHHjr+MxevRK0cpmMWq+l5lMuVFVW3Hwoa3MZVgUJtaNAaf8SGoggxHd5PlFVfqbsYF6VzRlrNZgYaovCfQNN9tjF3MvvUBAlBgW7D8DT8OOWcValVp+hNdG1/euqK1H+5m8KsCXA0WlBShGVEBhAzzEAGTm7uD2Xcv+W7w72HjiIKgOI1hqQ0WQaO3Ty3H7bPv5XHvLUB7QBA/AR3np0sSj9EweNmBIb4yQlv3TQcvYMKi85eipv41f53LcNHDVydIqoq63AAHr83OLLr+ZIV7xvd2ttxbFBdmecWqWhN+/BarOjhIE3ruEYQAY+EtwZbU//1R/dwAB8Bz7xR8ewK9QGM9UbVltTjUr37ynkXtZzVIPf4ugkYQJBmyseoBoAjrnjuW56jrDYby3YumGPPb73sBhNH2oLU5tw30BjypVDRj18YPsPpcGg+QUlAyDSny/5nfrAk+m94uOdUSoVtb1ua2tDFaVFLXu++ySLMIAKjqrIaxcxBUAD6DlEEQZgIsxVfjhry/6BIycMtsXERuLOPbSA+wZeM3LCUo4BrCdagDuQtYBg9gHw0l9rYleoDAzV61VfXYXKDuQWnmo8gSV/HUfVHFWS1y5ySIEB9Bwiifp/VjDBub1XH927M98R1+s6qyOG2sJw30Dsj+JePkPWF9B9A4NOA/jHuiWiEwiHXSysOYb2lF+c9JO38cssovLXEaolGsAp8AH0uAmAmf9psqeYGeCqLz0ndfcOGJpMlQFg7SMuxqmbfN/69I9feeJP+NlzZ9ad9tQbbmAAPWz7m+yxq3GzT5o7W1NZjorys4/UHS8pJwwAX/oTyOMIxNEA7ARsD9QDEIzgLpSMXH58DpRkv434GXDPotDiiOlrNNNrBKPitACd2YL7Br6JAjwxSBZkD14q/Uc7nY4ktd5IXfpnf/3hdnLZT5KL7yIXvw0uv28sR2JWnSF73Uj2vfFozvb8E3U1dB0UKjWyWizOcRkPjSYaipycXWAAXZ/khX9Jpb/B6lhixDn/FLtCnKyrRVWlhVV15aUV5PKfRB3hP5Hzw4zdnv2a99Tr+DC0EyZwmjBfngEc2bP9UEXpkfpmVxPVs6FjWMQ441cSh6X8584BaAAXN0aNl/5Dp8ztZzQxYyM1errSv6YK7dv49U5y6U9K1P7T5HC2zXvydTdUzvqAPAyglWgBAgPwMIHdW3NxUhZNqHVGZGEtScnzlg0iDED2z3VLIwJsNGDwmAD/fGypmPgTP+CGNTjpgub5O+VyocqSIyeO7t1xmBy8bqU/wKdoI3vdLDHBGvd+/1lOdcXxlpbWFqpnhGGtiI3tvVSqBYAJcHneX8XwlLsSGbMlVU077bemEhVmb8v9GenPh3946Q/wCcjeCgzgtJcvoKk4L2tfPeWSbKWBQXgiNdZYUYB2DAqK8eBS6e/sd3WmzW6jumJsX1aUHHXl/vBZjoQBSFN/SQYY6Oq+tgMkTOCUhAE04JBgfW019dNtsVoRd2bnCs5Az1mG8eAd1/8CfCqC9L9yaLItSqWZEak1UXXwYPuSO2DZkst/0sv2b5/7xB/c0D3Xt4T3+OecgTgkWJyfU8j7Aiguku8bqNFncGdX7BvodbbBBDgX/rU+U5T+A0b8IrNP7146mVxOTeZguxLbl4ezNhd4SX8h9AdJP/5XIQVn4CnJM2kq2PJddh3tXgGKSNS7V4K2/9DkeYQByMiZBhPgImx/OXf5rSqdIUNtpDvpp7aqEhXn7spvbjxZK3H+NRFHlCj94V76BxItQOoM5M2A44fziyuKD1e6mhrp+gL0ZqTWG3HfwOhAcwYGNAOQSP+ovoOGUS/5FYt+NvBFP1LnnyD9IeefDtqJL8A7MaipND+74ARlX4A8KgolxMc771j+eBoiEYFA0QIC3Ano2T/EF/2Y+ZJfmqivqULVJYdLiPSXJv40o46OsOCco+sMlGoBfEiwsuSoC/droAmV3oTUOsNs1CkkCE7An/Wf/Gv9MrHk94771qdjDhqpVPXYJKFLIaz+Z3/z0XYv598p4oDi23/Nefw1cP75mfCeEwbg7QzkzbOyA7kH+b6BFM+OQqlGNrs9aVzGilEdvoBlEaABnEd7whxTbTAtoi39T9TWoJL9OUfqy0vLvWx/SPwJHAhmQLPEDGjgTLZd9ZQzAzFwC3ODxbEEBVBiUEAygLcfXyYW/XAcM9lms/WXUy75xQUmR/dsz0fdJ/6I0h/uIB2QvRfSgzuZAZzJVld2MK8Qm3A0EanWIyPDjL3p9tlCYpAMGMB5pL/RFrsad1yliZP1dejY4YKqor07D6HOab/NIP0DCkJI8KyXFtBYsHVDdiAMa8Ep7PEDBq0hWgC+fxFhzgA6O3Q6S/+HRjud9iTccZWu868S5W/6ahfqWvIrhP7a5jz+KmT+USbPM+gSEuSfV/nh/KKK4kOVrqYGqmcpWs+gKKVy3BVJtwbEQNGAcwJKpb/WbJujM7FUHUynmppQbcVxV1HuLmnRj8AAOkp+wRkXECQxA06jzunBTaX5OQX1NTVU1yeTyVFCr97aATePE8aKU9UCAtEE4NN+h0yem8iY2RSP9KcnVXDRz8EdP+5GP1/y237n+lfB9g88Z2CLty8g94fPsytLj7rOnmmmeqbUBgZFq3UzkScxSAEMgOCdJ+4VQ3+x/a9ba3fQnfOHY8eVpUWuvB+/2OMl/aHff4CCMON2CQNwoY5eAU1Fe3fm0fYFyBSRKD4u1jlp2bo02lpAoGkAvPQfOjUtkWHZVKWBbtpvXU01OnYg9zDqWvTTDNI/KLQAoUpQ7BWwf8u3e6uOlbTgrE6a0HKmLe5ojSiHBAPGCUikP1/0Y+9zxTxcRkkTra0tnPQ/2rL3+093oe5Lfon0B+dboNGd619xe/kCmgRfAM7irC4pLKEdEvQMFGWdY+c/kEy0ADkNLSAA5gJ0lv64bDJaY8jAJb80yyXrqqpQUd7ufEnab4OX9G+b/dgrAdzxPewhDQmekpgBjTnffbyVMzH7mq10TUytkUVGe9wq7uUGRCmcHBAmwLtP3idK//7DRi9L7NNbR3O6CwZuJnFo58Y89POJP3D1AxiYOaOOkGCnXgH15aUVNWVFlU0NJ6muEdcHGAyGpMGTZiWijsSgiLBjAKhj2EO0UmvIUPJpv/RUyJrK43jOn5D2213RDyT+BAe8Q4JiElfh7s17cISHtrlisdpR3IAbpIlB4aUBSKR/FPaKxsXEUC355dX/6iq057tORT/etn87kTCA4HEGduoVcHDHj/tqjpe6zp45TXVxGsaCzKwlJWny3ETiCwhLDYBP/NEYzSv5OX8UgdN+q8uOVtVXlFWgrt1+zyCY8huMZoCgBQi9AjA1FeXSDwliYIe3vU//eYhCSJA2AxDj/pOWPZreKyHOGalSU1XKcNrv/s3f7ECd4/5S279t9mMvg/c/+BuHNhZs+W5P1bFiPiRIc4WROhNS6XQZVySN9Ht6cCBoALz0V+lNi1R6M9Wz4mps4It+inN3FXaj/kPabxDSrHUvSxODhI5BPGPHEZ7jh/IP81oAxXOnkEeiWGestu+gEZP9rQXIKEt/vuhnzPwHk+2BUPJbW4NK9+ccQN13++U7/pADBQgueDcOFSMC+Zu/yaoLgF4BKqMZaRl+oKhf+wbS1gBIyW/MaoOZbuIP7vWP88T3bfwy+2ds/zYEob+ghJcW0Kk+AEd6Ko4eKD1ZX0t1jVFKNeqdEO+cmPmokB7sl8QgWgxAlP63zF58o4Vlk6K1ekS76OfQzo3ZqHM7KReSFP2A9A8ZLaBTfQD33Pd4MgPp+iuidUak0htn+1MLoKkB8KE/NrbXUsZio7r1uNd/bcXxFk7670HQ6z+U0d0swYbi3F2H6iqPu/C8R5rnUKHSIIfdnsSZxKOQnxKDaGoAkUl33Okp+dWbqJ6KuqoKVLIvK19yKLp0+5217iXw/AcxeZ5fp4nCLgmzx1pAVn0NfV+AwcwivdkyB/mpSEhG6fLzoT/nldeutVEu+RV6/ef+8HkWOkfJL1yhEAkIdtYCxMahR7K37q+pOEa9SjBKa0RGsyXlxokz/dI3kBYDUPS7aaRVqzOkRutZqqcCT5CtLjly/l7/cIOCnmY++pL3LEFxiAh+/uWH9x+qpxwSxOSwO1DMFdcIY8V9agbIKFx+T9HP8DGZTqeTusqFQ0C5Gz7Zhrq2+2om0r+dHBxAaDoDxZZh+zd/sysQQoIKrQlFa7TTOSFpQT5ODKLBABRXDBllVWr1GdEBMOmntGDPEUnar5D1d4pICSj6CTFItABprwD+2eMqQe48FOJ8EJqQy+Wob+8+WiwkkY8Tg2R+vvyk5HdMZj++5FdBVdfC3P7g9u9zUNeS3zMg/UNeCxAyAzs1Di3O3Zl/oq6aur0SbeC0ALXW530D/a0B8CW/USrNLIXeRHWLcdFPZfHhqorCgmIv9R9KfsNHC+iSGIRDglWlRfW0Q4IRctw3MM45YekjPu0b6C8GIHr+J2T+Mg03RJTJKTf8wEU/W749Z6//mY++CKG/0I0JeIcExXFvRXu35wZCSFBjYpHaYFqIfBgS9GdLMF76awzMyrLjxxHCRBFnTjW5SvKyDqPOnn+Y8xde6K5KsGHfxi9z+g8bPexEbXUk7QXKFZH9k9OXJ3//1stfkPX2aEp6hK+b2kVwEC4/R0aOcNJ/PEe9OYrjyMYRbv6vRL7PfxY8wJjj13GEO/4UcYTNgDKOashBkIz6BoQwIsi51HGEW1DHctSLEE5QwRlqGuSfEl03OXdYI8Uh6WOSs3mcnE0X0U75S9sTd1fhx42OJKqMipDUuSEMcvC15G2TbDLm9vUIev2HO6RVgvgcnCCkIec1AvmnXZdbIt1lkruiJK+FAqEePZ/+YgAyQgryIeSowxMrjGnxx1qwVD9NpHwt0QLqUEfiTwv5GWAA4YHunIEnyJlQkcvfQoSVzE/n8yzqqD5FkvsiRz5wBPrTBxDhpeo0E47bjjq8nP6w+aQMoBp11PyD9A9fJtAq0QwxA1CTuyGMGvfn8A7peHMpI4iQUFAyAEHin5bYOWfJhvurDZLAAFxE/a8hf1/q/AMGEJ5agOAMPEEEkptcRA3yb5OONq+1dHc2I3rqnPrLCRhJNhFzVj1xumiImuXzggcvFUvKhBpQt9N+AGGGCHIOleSM6sg5pXFGvf0SQpi6U4ia51w9cHf9GQVQECag7MaxEeFHBtCKOrLAmsl/W1CHdxUYQHgyAMFHFUXOqeCojpTY3/5Cm0QTkJ5TQRNoDzYGIN3gSC/HBvIjAxDUvTbCCARqR+D8AybgOaOCsFJIJL+/J/a4JWdSek7bpOc0WBiA9ILLJBsdQfFhuyUb2S55DwBMINDOqdvrvKJgZAAAAKCnuUMwMAAAABDAKg8wAAAAGAAAAAAGAAAAgAEAAABgAAAAABgAAAAABgAAAIABAAAAYAAAAAAYAAAACGL8vwADAE4ag0JarbF5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_black.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAXUAAAF1CAYAAAAX/XrIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAIGNJREFUeNrt3XtclGXe+PF7mAMDDA46tiioJCQeUhfBA6kRmbaap/KQUiyiBSGiZpkaPY/bQVS0pBQF8/HcKoouJBhqHjZSyfVFaq2k9fx+2dbP51E8my/EcuZ3De2arScOc7jvez5/vLfcNcLvfc3nde0199xINptNApTo75WlPuVntrT67Fxex73nV/b45EJu7K6LWYO2X8wYVXLxzWdKLs1M/OjSa899dPnVFzb974sTS8Rft4lf7xD//a5Lb8bvFr/v0wtZT5SJf+6g+OcPia/z5dmiVsfF12W+UCqGAFn59MSHlhX7MmLeKByXMvbdR5f0m9xuZ5cRzb4K6el3NqC1rtrgr7FqDZKty0SvnyOFqElam11kmpetq/hrt3+SxNKuL/vX/xej+Pc1vV93Lfwhv7O9Rjb7apj4fqaI7+s98f1tEt/n5+L75bqBqMOjFXzxX2GzilPjn1vaN7vfa+Gl7YY3OuXf2uu63iTZ7BoSZFfTGX7h11hjDe1ivPh4QsvyKQseWfq++PPtEX9OrjeIOlTjE7GLnb1tYtzo93qt7p4WfPR33fVVOhFtncLC3dDg39dK+1P0E02+S3mj24ZVYh5fsLsHUYfclZ/+q98bWyfED8nsujl8dMBJg0Vj9ZR415VRzMVfzKePmNOLYl4rxdz+r5gf6whEHW6zrjwn/IU1Q2dFTWrxhX9br58IeMP4iPm1EHMcNbHFF/PFXPeULwlnnYGow2nyDy8PHbdq8JxOKc2OG4PELtwsWYmx8/iJ+f6upeb6CDHv+WLue8X8WYcg6miQGVuSx0bPCCvzDfP6WctO3O07+WBxHZ4X12PllqQk1ieIOu5pc8WakGeX989qNdx8yh5xduPyZBLXxR75viPMp+b91x+yDorrxvoFUUeNVeXZHQdmRa8zd9NXsRtX7i7+QXH9ZmY9tK5UXE/WNVGHh1ldnhPeN7PrZlOErpqQq4uvuJ5txXV9bX63/L3iOrPeiTpUaseJLZZhSx/LDuhpuOJFyD0m8F3E9Z4nrvtxcf15HRB1qMDEwsTUFqMDThJyAj9YrIMPChJTeV0QdSjMsvLsjl1ntt+lD9JYtbzZiZv422+VFOvipZnt9uzn/J2oQ96e2xA31TLQ7zy7ctR2995HrJeVYt3w+iHqkImyylKfmHldN+tbaq4Tc9SHn1g3zcX6eV2so//hscNEHe6x/HBu+wdnhB7QEHI4OPCTxLo6eCinPa8zog4XeH1P+oDm8U2+J+ZwdtxHinW2Xaw3XndEHc44L98UP8UUa7zsxRufcKFGYr31FutunVh/vA6JOhwgYUPcVO8IXTU7c7h7595JrMMPeFOVqKN+kgrHphqjDVUaduaQ2c69u1iXm8T65HVK1FELqUXJY316Gq6wM4fcd+7RYp0WivXK65ao4zYmb5sY5xtrvEzMoSQmsV5jxLrdKtYvr2OiDiH70KLO5mGNThNzKD3uT4p1/LlYz7yuibpH2l+53ztsRugBiZhDZXGfNj30QKVY37zOibrH6JPTJ1cTpOENUKhWkFjfOWKd83on6qr2wpaUsfpI/VV25/AERqNkixTrvUise17/RF1V1lb8OcQ8POCUZOSFDs+M+/Bh5lMVR9eG0AOirni9Fz6yWjJz1AKYzZL1vXd7r6YLRF2R5u6f38P7YZ8fJZOGFzRw0xupD/c2/li2N7MHnSDqitHxrYjtxBy4S9z9JNtbf+q4nV4QdVl7acf0kdoOhmsEHahd2Du0017b8dFLI+kHUZedkCkPfE7MgfrFfUpayOd0hKjLQsa+eTG6CGM1QQcaFvaIjrrqfZ9kxNAVou42PebH5BNzwLFxnz+rRz59IeoulX+sINA0qMlZgg44J+yDHjedPfb3/EB6Q9SdblRe4jSNxYv7zgEnszTWWPNWjZpGd4i60wSnhn3F7hxw7a49dVzwV/SHqDvU2oqNIYZoU5Vk8uKFBrgh7NGRhqqKQzxmgKg7QHLRi0kai5bjFkAGxzFFeclJdImo11vE7F7FkpHjFkAujN6SbXZ6RDF9Iup11viZFj9w3ALI8DjGV7I982TjH+gUUa+Vdz5bEqXt4HONoAPyDnuHB7TXDuxZEEW3iPodJRZMSiXmgLLiXrAmMZV+EfVbxCwavJygA8o8Z1+UEbOcjhH1Gx6YEVVG0AFl79jTU9vspWdEXbIkhH5H0AF1hD3hyabfEXUP/YOXVv7NzxhruUzQAXWFPba78XLl96V+RN2DLD28tr22re9PvAgAdWp7v/anw/uWtifqHmBu2eJemiADnxAFVC7oPo21bPvcXkRdxV7dNWeAZNYRdMBDmE2SdXdB+gCirkKTtv0pjqADHnjO7iPZtq2fFEfUVWRswcupkknLAgc8OOwFy8d6xIeUVP8HfHr9+HSCDsAe9nWLnk4n6gr2xIqEtwk6gJvDviLzibeJulKDbuQedAC/ZTSoO+zqPHJZl8qRC4C77tjXL1TnUYwK3xSdxpuiAGoV9oL31ffmqbpuWyx5M46gA6hL2Ld9oK7bHVXzB0nf/Q4fLAJQZ2Y/ybo7Xz0fUFLFH2LO/qW9JLOeoAOod9jLitXxSAHF/wGWHt7YXhNkJOgAGiTIorEe3qP8h4Ap+psvrTzkp23biKctAnCIti20P1V+q+zH9io66sbYoMssRACOFPt742Wi7gZNEx78TjLpWIQAHMpklGwJj1sU+xOUFPlNt0mP3UvQATgz7DP++EAZUXeBmEXPLifoAFwR9kUzYpYTdSdKLHgtlaADcGXY/5KdqKhPnSrmG13w2Zoogg7AHWH/rHhBFFF3MG2HxtdYYADcoUML7TWi7kCNn3nwB3bpANy5W38mtvEPRN0BImYPLSboAOQQ9tnJEcVEvQGSi95Mkow8dRGAPBj1kq1oSXISUa+HtRUfhWgsPNMFgLxYTBprxadrQ4h6HRmim1exgADIUXQbQxVRr4Pg1J5fcewCQM7HMKkDg78i6rUwKm/6NMmkZ+EAkDWTt2TLmztqGlG/i41f7QrkHB2AUtjP14/tzw8k6ndgGhR+loUCQEkGRZrOEvXb6D7/mXyOXQAo8Rhmfkr3fKJ+k4x9q2MIOgAlh33fxowYov5PuojAahYGACWLaKmrJupCyJQ+n7NLB6CG3fqUISGfe3TUX9qxcCRBB6CmsO9Y9tJIj426tkNTHqcLQFU6NHfvY3rd9i/u+NaI7ZLJwCIAoLrd+qz4TiUeFfXMsj/3IOgA1Bz2svzMHh4Tde+H7/+RCw9AzR5+wPijR0S998LnV7NLB+AJu/WFqb1Xqzrqayt2hkhmb57tAsAjmI2StWK3a5+97tKom4dHnOJCA/Ako7sHnFRl1FOK3h7LsQsAjzuGMUi2ogUpY1UXdX1k8FUuMABPFBmsv6qqqMcuTl3GLh2AJ+/Wc9L65Koi6vsrj3trghrx5igAjxbkr7FWHtvvrfioh04fcoALCgCSbfrA0AOKjvqCA5ujJKOOiwkAglEn2Q5sXBCl2Kj7D404w4UEgF8N6eR/RpFRn1iSHcebowDwW/Y3TUvemxinuKgbY8MvcwEB4FaxYcbLiop68pZ3x3KWDgB33q1vmZucpJioG3qGXeHCAcCd9WxluKKIqCdsypwsmby5aABwt926XrIVzhqbKvuo67vfX8UFA4B76xasr5J11EflZUxjlw4Atd+t56WPmibbqGs7NOcHSQNAHXRo6tgfVO2wLxS/ad4UyajnIgFAHdg/ZbppZvwU2UXdGNue+9IBoB5i73fcfesO+SLTd64axFk6ANSP/Wx9V/aMQbKJepP4mO+5MABQf/Fdmnwvi6jnHNrenl06ADR8t364ILe926PeetqIg1wQAGi4aY+1PujWqJdWfuPHLh0AHLdbr/yi1M9tUY+a+0IBFwIAHGfuiKgCt0VdE9SYnz0KAA4U5KexuiXqcRvmT5VMRi4CADiQ/Qhmw/S4qS6Pum//Lhe4AADgeP1b+15wadQXH9rRmV06ADhvt35o4+LOLot6u5lj9jB4AHCemX9ot8dlUddYTLxBCgBOFORbvzdM6/GTjd6bzNELADiXyf70xlcTJjs96gGjY08ycABwvtHtAk46Nepbvj1s4ZnpAOAaRq1kO1G6xeK0qPfJeS2XQQOA6+Qk9Ml1WtQN0e34odIA4EI9Aw1XnBL13MN72vMGKQC4lv0N08Mba/9I3lpHvWvmpM0MGABcL3NI180Oj7ouIrSa4QKA60U00VU7NOrZ5bs6SkYDwwUAN7DfBVO+Prujw6IenfXKOgYLAO6TNeKhdQ6Lur5bW+56AQA36tJEf9UhUV9x5NNQjl4AwL2MXpLtyF9WhjY46v2XZ2QxUABwv+WJ/bMaHHXziEdPMUwAcL/hrc2nGhx1yeTDMAFABkxae5YbEPWkLSuTiDoAyCfqW9KTkuod9bAZ48oYJADIx4yeYWX1jrpX6+bXGSIAyEdrX6/r9Yr6ii/2h3ErIwDIS82tjfkrQusc9cGr3p7DAAFAflYmDppT56g3e2HE1wwPAOTnhQ7Nvq5z1DVBTa0MDwDkJ8hbY61T1HPLPwnnVkYAkCf7rY3lH+SG1zrqQ1dnzWJwACBfa8YNnVXrqAenPXuUoQGAfKV1Cj5a66h7hbX4maEBgHyF+Xj9XKuoF33zpVky+TI0AJAx+7n6NzuLzPeM+oSt6+IZGADIX3H6hPh7Rj1q7owChgUA8pfZr+vme0Y9YPQTJxkWAMjf6FYBJ+8ZdY3FzIeOAEABLLpbP4T0m1/kHzsUKBm9GRYAKID94V7HivID7xj1CcXreZMUABSkeMZv3yz9TdR7vffmBwwJAJRjdr/u6+8Y9eC0MXySFAAUZHjIfd/eMer6yA5XGRIAKEcrb+1Pd4w6nyQFAGXRaez5vk3Ul5bvDyfqAKAsBhH18lVLw2+JekpR3lgGBADKs3Vq6phbov5Y7jvZDAcAlGfR4Edzbol6ePrkvQwHAJTnuXatPr8l6o2eGnCa4QCA8nQ3+1y8JeqalkHXGQ4AKI9Z++szYH69DYZnvgCAIt18W2PNf2w89iUP8gIApUZdOFb4y4O9aqKesW93DIMBAOXaNz8j5kbUxxXmpTAUAFCugvHjUm5EvW9O1iKGAgDK9e6AR5fciHqHl9N2MhQAUK5JndvtvhH1ZqOGHWMoAKBcI1oEHr8RddPDD51lKACgXL0C/M7eiLouNKSaoQCAct1v0F27EXXJ14ehAICC+Wt++VTpL1E3GBgKACiYQfrlU6VEHQDUFPXSylN+RB0AlB/1yr2lftKWM6daMRAAUL6zW4taSXnnKjsyDABQvnOb8jpKq86f6cEwAED5zq9d1UPKOX82lmEAgPJdeD/nMSnr4rlBDAMAlO/iwqxBUsbFc6MYBgCoIOpzM0ZJb1w6n8AwAED5Lr31RoI089LFRIYBACqI+uszE6XJXx+fwDAAQPm+mTJ5gvT8gQMvMwwAUL4vx49/UYrbvv0/GQYAKN8nf/xjOjt1AFDTTn3y19+MZxgAoHwnX5meLM34fyefYxgAoHyXZr6eKL1x7mI8wwAAFUT9zVnxUsa5i3yiFABU4GLG3FFS1tkLTzAMAFC2RC+97WLWwkFSztkLsQwEAJQedYPtQu6yWGnVmfPdGAgAKD/q51et7SblVZ7jJx8BgAqifi5vU0ep6PRZfkYpACg+6t62s8UlLaTSU5U+ksHAUABA0VE3/lxZutdHstnEr4k6ACg+6jU9J+oAoHwGSWO7EXWNyd/KUABAufw1GuuNqGtbtb7GUABAuUJ1huobUTdF9z7DUABAuR4xNa68EfXmw+MqGAoAKNezzUP+fiPq7VJf/JihAIByTe0Qsf1G1B/NfHcJQwEA5crpO2jRjaiPyytMYSgAoFyF41JTbkQ9Y/e+GIYCAMq1L2N+zI2of/jNCYuk5wNIAKBEJsnLduLDEsuNqNf8DVEHAMVG/UbL//U3GnNjPlUKAArU2stw/Zao+3TpcYHhAIDyDG8UeOqWqIc8+/xBhgMAyvNaeJfSW6L+6NyFuQwHAJRnad8ns2+JeurGrWMYDgAoz9bUqWNuifqyvx0J4w4YAFAW+50vR5atDbsl6tzWCADKjPpvOn7zL7QteK46AChJd71/1R2jHjwm7ShDAgDlSAtuf/SOUe/91sLVDAkAlGNh74Gr7xj1ifnb4hgSAChHycT0uDtG/cOKby2Sr4lBAYAC/PIgrx2WO0b9l2fAWHgGDAAogEWjs/57w2+JesATo08yLACQv9EBrU7eM+pdX83czLAAQP4yu/bdfM+oT1i3NZ5hAYD8bZ2QHn/PqP/1H5V+vFkKAPJmkrS2yr8e8Ltn1O28Qtr+xNAAQL7aevn+dLt+3zbqLeInfsHQAEC+Jrbo/EWtoz703TWzGBoAyNeaoeNm1TrquZ+Uh0smM/erA4AMmSWdtTzng/BaR73mQ0hNg4g6AMhQS43x+p3afceoN3s65TjDAwD5SWn24PE6R33w26vmMDwAkJ9Vg8fOqXPUV+w7Eir5cL86AMiJ/f70IyvyQ+sc9Zr71Zu3vs4QAUA+wrx8f75bt+8a9bBxM8oYIgDIx4ywnmX1jnryyqIkyY9bGwFADuy3MhYlpyfVO+o1v4FzdQCQBft5+j2bfa/fYH50+CmGCQDuN9zc+lSDo94/Y3kWwwQA91vePzGrwVFfU1YRwhEMALiXSdLZKtZsCWlw1O30bbtVMVQAcJ9uektVbXpdq6hHv5K1jqECgPtkPTRincOinr2rvKNk5AgGANzBfvRSnr2+o8OibqcLjahmuADgehG6JtW1bXWto97txfn5DBcAXG9+tyfzHR71nJ3l4RzBAIBr1Ry95GwId3jU7Qzte15hyADgOj0NgVfq0uk6Rf2x/1yazZABwHWWPjYm22lR//Dz/9OYIxgAcA370cuJLaUWp0XdLiB29EmGDQDONzqg3cm6NrrOUU/MLkiVfHkcLwA4k1nSWwsT/yPV6VG30zQOIuoA4ERBGl9rffpcr6i3GzNzD0MHAOeZ2e4Pe1wW9eztPDYAAJzFJOlt5dl5HV0WdTu/qIHnGT4AON5Av9Dz9W1zvaMeN3/DVMmHN0wBwJHMksG6IW76VJdHveYN0yYtr3MRAMBxWmpM1xvS5QZFvev4eZu5CADgOPO6jtzstqiXfn3aR/LmDVMAcAT7G6SnS4/4uC3qdqFPzzjAxQCAhpse2vdAQ5vc4Kjnbj/cnt06ADR8l344t6C926Nu1yQm/nsuCgDUX3yTLt87oscOiXr6mj0DuL0RAOrHfhvjnvQlA2QTdTtj+9jLXBwAqLtY4/2XHdVih0U9ft6mKZytA0Dd2M/SN8XPnCK7qNvpWkZUc5EAoPYidIHVjuywQ6MeN5tHBwBAbZklb2te3GtTZRv1mh9OHRpdxcUCgHuLNrSocnSDHR71se8UpnK2DgB3Z5IMtsJxs1JkH/Wa3XpYzytcNAC4s56GVlec0V+nRD353aKx7NYB4M679KLkzLGKiXrNfevh3LcOALfTz6fNRWe112lRn5hdEicZ2K0DwL/v0ksmvhenuKjbNeoy7DQXEQB+NaxR59PO7K5To75oy6HO7NYB4Ndd+qFFhZ0VG/Wa560P4XnrAGA3PXTgAWc31+lR33/stF7TKIhPmQLwaEEaf2vl/mN6xUfdrk9aTi7HMAA8+dglp09arit665Ko2+mDI69ycQF4okh98FVXtdZlUR+/YOsYdusAPHGXvnV81hjVRd0uIHL0SS4yAE8yOqD7SVd21qVRX7uzIkTy5tG8ADyDWTJaK9buDlFt1O0eTlq0nGMYAOo/dvG2LeydutrVjXV51GueCxPKc2EAqFusMfyyO/rqlqhn/rmsB7t1AGrepZdl5vfwmKjbdRqZUULYAagx6Bmd/ljirra6Leo1P6g6kB9UDUBdInQtqt3ZVbdG/eVFHw/jbhgAamGWfKwfv7xsmMdG3a51v2kHCTsANQR9WuunDrq7qW6Pes0xTDMeIQBA2SJ1ra7KoaeyiPqcNWW9JAO7dQDK3aWXzcnvRdRvEh2ftU7SczcMAGWx3+2SFZ22Ti4tlU3U7Uxth5xhkQBQkqH+Xc/IqaOyivqHe09YNEYLxzAAFMGiMVlPfPi5hajfxajpedM4hgGghGOXvNGZU+XWUNlF3S64V9pRwg5AzkFPCx58VI79lGXU7QzNo6tYPADkKNrQpkqu7ZRt1Nd+VBGi8eZ8HYC8BGkaW4+uKQ0h6vWQ/GZREscwAORz7GK0FSUvSZJzN2UddbuIobOLJR1hB+D+oM+OSC6WezNlH3W7Jh3jvyfsANwZ9Pgmfb5XQi8VEfWa58NYeEwvAPeI0LWuVkorFRP1BWsOREl6ng8DwLXMkq/1wILiKKLuBImvFaRyDAPAlccuBWOXpCipk4qKut0j8YuXEXYArgj64kdeXaa0Riou6nZtYtP3chQDwJlHLultxuxVYh8VGXW7pg8mfMeOHYAzdugJTR//TqltVGzU7Xxa9LvIIgTgSP18oi4quYuKjnrpodM+WnOHayxEAI7QQdvqWmXptz5E3Y1y1peHa3xaXmdBAmiIlpr7rpfn7ApXehMVH3W7ue+X9dIYePgXgPqxaBpZy+YWy+JnjBL1f0p/Z/cASccdMQDqxiz5WXen5w9QSwtVE3W7F2ftGEnYAdQl6NsmfRCnpg6qKup246YXpkhabnUEcHcmycdWOG6Zoj4t6pFRt3s6bf00duwA7rZDX//0wmlq7J8qo243IGHF2+zYAdxuh75q4LxMtbZPtVG3e8IednbsAG7aoa94IvNtNXdP1VGvOYoZv34aO3YA9h36+qcXq/LIxaOiXvPm6dTCFHbsgCfv0E3WwnErVPemqMdG3W7Sn7bFEXbAM4O+bdJ6Vd22SNT/6dU5uwZodHzyFPAUFo3Zuju9QDUfLCLqtzF3cVkvjTfPigHUrqUm8HrZ3O2q+Og/Ub+HnNXl4Vo/nu4IqFUHbei18pxSxT+ci6jXQenfKn187ut3UfLizhhALUySr62fT8+Lp0v/oejH5xL1BmgamvCdpOUNVEANQU9o+qRif2IRUXegNl3T97JjB5Qd9PQ2ExT5M0WJupM8MmTxMsIOKDPoix+Zs4yOEfVbJE4qSOUoBlAOs+RvLRi7xiM+VETU6+mdJZ9F6fwiqiUv4g7IOeYRuvbVBxbsiaJbRL1WGgc/8wPHMYA8j1ueaTz0BzpF1OssotfsYsIOyCvosyPSi+kTUa+35BeLkjS6II5iADcL0gRai5LzkugSUW+wtRsrQgym6Cp27YA7dud+tmhDZFXF2kMh9IioO1Rwm7SjkoawA64Melrw80fpD1F3mlGJedM0Wo5jAFcct+SNWqX6H2pB1GXgw4++tfhbhp5h1w44Z3c+1L//mRMf/reF3hB1l4qOzVrH/eyA45ilRtas6Lnr6AtRd5s5b5f10hkjr0oa4g40JOaRus5Xy+Z86nHPPyfqMtU6/JWDhB2oX9Bfaf3iQTpC1GXn5ekfD9MZIqo5awdqd3YeoetU/fHLJcPoB1GXtU5dMkoIO3D3oM/q9HoJvSDqipH5dlkPb5+HfyTuwM0xN9ke9u71Y1nm3h50gqgrUu9HFq7mrB2wn52brQt7v7uaLhB1xVvzQUVIQOPRJyWJXTs8c3c+OmDUyYq1R0PoAVFXlZTxxWP0+sirxB2eEvNIsd63inXP65+oq1ps7OJlGg2PGoB6BYn1vVisc17vRN1j7N9f6R0WOv2AJBmJAFTDKNbzNLGuK8X65nVO1D1S1oIDUWb/oWc0HMlA4Uctg/2HnPlMrGde10QdwsQJxfF+xtjLxB1Ki3mMWLdbxPrldUzUcRupyUVJRkN0FXGHnPmJ9Rlt6HmlUKxXXrdEHbXwfGJBqlHfjbhDdjGPEusyL2HTZF6nRB318MdRedMM2g7XiDvcHfO2Yh2uFeuR1yVRhwM8F79pisn48I/EHa6OeW9j7OV1Yv3xOiTqcIKZM3YNat4k/nviDmfHfKRYZyVivfG6I+pwgeW5h9t3aP3KQS/iDgfHPE2sq4NiffE6I+pwg7LSSr+Ho+YW6DRBVgKP+oY8UKyfP4l19D9iPfG6IuqQiXFxeVMtvv0vaPiUKmrBW6yTWLFeVsZtmMrrh6hDzkcziw917tZu5h49u3f8G1+xHgI0FutLYn2UiXXC64WoQ2FSEzZNbhEw+iS7d3blg8U6WMX95UQd6rBjywnLU31ycgMMPa+we/ecXfnvDdFVc8V1Py6uP68Dog6VWpt7uH3frpmbTbqIai928KpiENezrbiur4rrW8YdLEQdnmdVdnnHgQ9lrTPru1UReOWG/EFx/WaK61gqrifrmqgDNTasPBL6bP/lWa3Mw09pxf9113JMI0s+4rrY9RXXaZ64XvtXHA5l/YKo455eea4wJTpsRpmvV+vr7OLdvxtvLq7D8+J6rBDXhfUJoo4GyV9+JGzc4FVzOjZ74WujJsjKLt75u3GLmPMwMe/5Yu57xfxZhyDqcN5RzdLD7V8YumZWZHDaUZNX2M86It/giDcXcxwp5jl/6OpZnyzlTU4QdbjRnqJvzG9M2Bo/pGvm5vCA0ScNGovYzXNkczt6MRd/MZ8+Yk6To+YUrBRzOyzmxzoCUYesbc8/FvjWhOL4gZH/semBJv3/4acN/slLMtjsPCHeRrH7tgvVR159Mjj1q1d6vffBcjGPv238KpD1AaIO1di0tDx8VmrxmGdj3nk/qsWzhwONv79k0JitXpLOZqe0XbedRdPyenSjp04/G56+N73v0uz3xZ/vY/Hn5HqDqMOj7dx4LHBFxr6YN8YVpiQ++m5Ov3aTdnb+3ZNft/KLPmfW3X/NoPG3asVO/1+cEeqbv75R/Pss2vuvtRH//ujfPfX10LZpe159fNnC98T3t0l8n59tPN6c6waiDjjAl6WnfcqLzrb6LO9cx70rzvX4a86Fx3ZlXRy0LePCqJI3LiWUzLyU+NFrl5I2v/y/qcuSjrzyF/HXbeLXO8R/v1P877vF7/tU/P4y8c8dFP/8IfF1vhRf75j4uswXSvX/AXO4pNyLosLqAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB39JREFUWMPFl12MXVUVx39773P2Oefembnz0XamrW21DQIWBOHFoEEMDz4SYyQYSI2JD0WCiSSSqIkPhleNKIaYGOFBY/yIPvlAVEB40ED9ACJNLRTascyUTuncmbnna3/5cPbcmQFU8IWbrOyTe5P7/+21/nutfUQIgffyk2w+PLL6NEMx4rxaYkme5XV1jlkvWFSneJ+fEl4MDywweUMjl27RcuOaXJQHpwgzAxADWJ0LvcWB77844/c+2ZfrJ6b84Nwkb7iwcRCxehm/Pomv5nHhEEFOA47BR+/dAni7jw4pAq5akSufLdXS515Tq1dPA7vRZGgkCgUo/Fxg7UhQK7c4znxJ+Okzgr0/x6ufBdIXxDvJwFvESZKzyflji2rpvlItH52nYB+7mEYzQUIfRQ9BD+gR6OHoYSkw5HL9cC5Pfi0xc7c70u95MfkjoHxHAAHIg55eVK8/8HJy6rjGqFnmmSKnICMjpSAhJ6WAGIECR46JUZCFGmVWj6j2uQetPXhjK6+9H8KF/woQgImQTf8pO//Q6WTlzgHzDAjkGDQCTUGOJieJEIIcyAnk2BgtBQ2JyaDMoBqSlK8eC20+aNTNx7Fh+T8C9INOH9NnvvWXdPnOXSwwQNDHUWAocGRoMjJyUnIUBZJiB4ChoEWHGuoM6gRqCbUkXX3xNq/6w3rq0/cQ2HgLgA6KE/rcsT9mr909YA8DFBM4+ttqmyHIySNAQo6MGfBjgJwG2WioNsUF1EBtyS4/c5dbOPJcO3fTd4SzOwFOpGtXPZYvfSVhJpkhpY+nj2cyrgWWHhZNQha9kCHJdgC0pK6GWkOTQK2iONB4qGqZvfSHL4e19MmgJv8KkHxz/SlkkOqMLj+zqOTR/cyTE8bu3gTpYymwZECGpkBvK4Hv3E+DaDU0atvOPVQOKgNmDnVh8VAiz97V7rnuOcAlE2GQj4Td/bx2ny/YRYGiIESILibwTODHRy1Hjc2YAz1ct3vbQJVCuSkeoHRQ2Q6gbKGeJD39wh2mf/0PgVPJ/VPX1V8sn71hWRZXzNNDI6KpOnMV40wEJscAnhxNEY9ijiULLTRlTLuAalM8Cpc1lBrMFHLp/F617/xNwKkE4HSS3Aoz5EhSQEOsbQdSxEz0YzZ6uGjINIIalG2g2ky9f6vwSMNGCqMMNhLUP0/fCjySAFxUvaM5GQpBEp2ZAikh1pwxSB+YwMfGk1Ag0KGFuux6Xelg1MIoh1ENG50g6ymsa9hQUBaof618aHwKhmJwMCOg4hcJ7HjeBNIxKxNjCEGGQLZVrLuFsom7TbZiLYF11YkPFYwyxOWN+TGAF1MzCoGAcchtod4EoYFebMPa2m7no7oTWVPdui67WBOwJmEoYJVuXROI2ve3+kBdgBD/1zwXJjq8zqHJocm6LljlUGVd1G+OHJptnVCshaELYg7RzYNxBPCAi2GBFmhDZ/IUyESCrnvQGjAWrAPnwbsugt8WIf6pIZCXYhNgMPSLF5w8bMWWoN0eAVrRCTcBSg/CgU67454YjSwLqFto2whjOhi7DcpZ8B7aijA5d3GcgV0j9+LZKvmEE90OLWBEJ9bSrQ1QBlAeggEpYjYDaCvJ67xzf9lCY7pobQdkXQQyYD2UPfz795/c9BZXWvfEicvc3cidaW5jM9MB0iiOg+Ag192xzwDtIG1TVJnDqIkdr4XaQNNCYzsAYzsoO4H94JVPpJsAB5U9sbv0Z4e1PNRXnWgWhTWdsPBdaqwDJaPX4qzRDnQr6DUZlAWMYhOqzBZIbbpsrI/w0/suugMLT49L0G6Ic9eq9ie/W8m/UaVROEASIIniwoG34AP0dDfwdgAY0E1KslmKUbMFUhuoYlaGOebje39Fm700Bnjg5kl3z29Hv9jv3B0rb6gjWQqJA7WZdt+JWwNJ0p22KoFCQgVoD9pC1kK/zhBVvhNg1ELdg0sVfvfCBXdg7lFhaXfcB26YMs83e8SDP32l993LIKUEGWvuojhAP4Om7sZ9JTsPZB4y221QNwq92QdGbdeKywLWaijz0Hzq4EPmxtlnROV2XkiME3x4wfz45d3NR/78QvaFJP4SLDgDzoHWsfZpvG3FqZuFDkCbLgtJnSHrYmv3awYuZbTX7/+1uWbiYWH8uPHtuBOWRoxuPGS+vvaanD15Mr3Ni64ntC0IGRud7sSrBPLtAJs+MJDWkrzKug670cIbLfbI7O/tNeGrorKXQiHe/lIqgLIVy1fsNcer82L93OnkrrqF2RR6GbR13H26bewTTes6H2gDuoW01qjVAqoWt8/9xn5A3CeqjVcRb3Mt/8HjQ5TcgmiMWN6/xx6f9v7v504m964uyUNFHyb7XQaqBAoFlYgeCFs+0C2kI9AjQT6pl93h7OHQq78vGn85iHfxZmSsGB3cb7/dXBSP92fcsWpZ3T68IPclKaQpZBq07PpEGiA1kDZxnQgr2WH3yzSER90BnpHLcXC8m1czAGMEwN/mZv0/vAoP77uajzVL8pPZSB71tVhw0LcBbKD0vXCBGX9SLPinwlA+5af9K1yiEuZ/TNP3+vX830UX5/xBVNUfAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_button_h.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABu9JREFUWMPFV2lsFVUUvrO+ve+9lkJLAwVEKgo/TA1qNEBYGtqCQpBFNBiCaFAD/sHoDyRRYkgkRDAQNUgiNhgEI1tZ2hSrREiEgIpBoYCUrbSF9m0z783uPXPvLEWg4B9f8vXcuTO533e+c+7tDGtZFvo/wTIMg/rDvEIdM7FpTNWsQ+MW1e4b0TBjb/mJWXuKry7YlUy/uiuZWb47eX3VvrKTaxuHb9988InXt/8w5tHdzeP4/taFH4v6+Y1pGlN97vCFT27kO5v+Uk9vuWl1vCQjqRoxqILl2CKeY2Mcy5Sblvy4ZnbOlbQ/PrvZfb1FVVObmptHP93f+ncV8OzRWcLYA0+t6JRv7rxotC/Ls8rQICpCEVSCQiiBAnjcFzBXbMdYyChD5uUluWz3d/t3PvbB4W+fjD2QgPqmJaXXem983aZeXpNn9WFhvChARFEk4JGIZcA4YEcyJjGM70cw4kiwkogzlHJdurBSznR8c2jLpCH3JWDRwfdL/1Y6tl4zUvNCTIKNo1KccRzx+C9ZPOoSCragf48BnBFGSElghJGZ66wvpNsb9m2cXXlPAauOfSn+rl5a32bdmhZDSbxcEpHs43jRmJ29X0SAQvSJssVYmFyNYAQR0qIYMcSkr4w3U2c37tv0RuKuAk7dOv/2aat7LiFN4pyLENQdHAhhAbxrvyPEgzMHkdHClDxEokoFdZ6ts3rPv3NHAbMb11T/ot9YyjJRLooFBO3sYjZx2BaQsLP1l8Kz3bOfMzGZRqFiAVqQAjuhiox+6eTi/SvrJ/QR8ErjBv66Kb98k2WGxWmzOd0ddF0gAHLebT5qOc1cxE8wepgQqkEvKiKOAkJGDHG9qYFGz43Fjavm87aAZT9uCyM2OPy8lJ0rYgKoNYFTYxBAXAjbzsQoWditfcBtPGyzEiLQApgUQ6FRFYkQXJbCpYvTOYUZawvYMGGB3GXpz6TD0cFRO0PH0pgrhrgRpy7Efdn7doQVITW36x7qmzlEBSJOGjsU6M0mzZ6uyW4JrhhmDaJ15Ow6OzX1i4i6DQli/FsOSsCaYY8YslfEvsQFHPM8uS5wyGi/6glIW3wVLMiCjRQ8jd62I0KCPhcE6oKdPZArNOsCTyMlxYQoz5FxnrXvGd3pka4AyQqVEQHEAdY39oOnvRGiQgLUKbvxFKfOAiXGhAWWkMssIYZrGMP9W/mkK8AygzHInsFANPrB+lzhaYkCtGF5I+RlnWd9YEiUGUIq4SghEvGclbOC3jmgiUT9fwCj0kaDNXTocoFA9cE/p/ngCsgzORPUyQSWA4nApDAwdAo1R6CDxbDNYM/r2A34H2DiaPmi5cQInQ+D04orIFJgOnW8mIFh+kFJYd4mxlHDUDJYcxrzUiFWXqCOYCG6IyZIBBiOKECQiMD32FBxyhUQ15g2WAxIdUoOhBq91uhYwShgcjlNHaDzml1XZ9v5RNhCAlRE0Iv4Gaao9IIrYCjDtSBKBBlD1LOEHIi0LMnazhyjgK81XCI1S0TB86a9zejWs088kZwHtgiROAIC7BhE3JDKVldAeYA9EssVuuQMzThLM8wSACFknsemySkqSvJAnICuhy0IIuhBpIrekeyUBwtVI4k0Wzag2RWgSua5h6Kh7yE7p7mc7JzMbethnPVI+0AG96gLICTvFxLwekQSkTisssnShNOugIbl9frgsPBViWF0ZFK03tR2J3vZ13ha3ifUgUzKYsmOC/RAUqgIcCLLIyMeTwllxZ/X7fiw0Od9YNe7045VDxS+wLW3cikiAMjztOnAfnBEl53G87J3mlS1ewgOH8Hrhzw9lmU7WtzYyq21hz5queMb0eiK4LpHkmiv1EtIIfNCmmQOQjSapVd3j1ijZQB3LEdAnu4M2CFZAVkjSluFkSVr7vpKtm75lEzVYHbZkLj1U6YHoVwvsf72xrvd/j4iJLotJSpCIuSoPH4iNHLAW7Wb3+y451vxjo+ntw8pFRYOijAHZCwg3Y3XodvOOQFdyykUvyDaIyZYn8bkORGxxZHWUEViYU3j0jP39V3Q+nVde9nA+PwRFcIaEZldUBIog0aPYeW2HeDaL9M5eLaXQSbH93KVkU+jgxLzph5d/OcDfRkdbxyfOXO89r2SRPSFoRVcA88oPVKKlKWQIv1h7xQH0KS4bCqUzdIyVjm7I5yMzqk/O2fZxFNzuh7408z5nTs35UiiSFgyaGBi8qjRgRXJEma/KKI20zBvGaoh6QQ9lmCd54qZQ8EqYWW8NDFlUEnZopqLNS39fhvezyf0kZNTCz+fnfLrnlM1a5suT6/f3z1j1O7U8wO2pWdGN2Osz8wsWd393MMrrkyf9tpv01a/2Dbp+Pjj1VJ/68LvH9f5eR16/VvHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAAlCAYAAACONvPuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI4QTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0MkE1MjFGODc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2k7HQAAAAKVJREFUeNpiZEAAIyCOAWINIBYDCTBCJRLExcXrFBQUBAUEBNjY2dmZGRkZGVigOrK0tLTEQaq+f//+/9u3b39AbJBklr6+vuqvX78YgKr/I1kDllRhY2NjB9L//v9HkQNL8jAxMTGiS4AAE5TGlIHqhMhi0ckCk6CR5L9///7jlMTpWrySBL1CnrGUSdIg+AYwynBKgsFg8CcTAx5AIwfhtRMgwABg9KLwDJeKlwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAlCAYAAACDKIOpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI4RTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjA1QjI4RDc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+lugQ8wAAADlJREFUeNpiYGBgOMPg7+//nendu3d/mf7//8+ARABlGdDFwMS/f//+Y5XAVEesEuzmYXMBSAwgwAAGDGVWQ3ijRgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAAlCAYAAACONvPuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI5Mjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjA1QjI5MTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+yLs/YAAAAL5JREFUeNq8UTsOwjAMdawqQhE7F0AMXXKU3qPH4CQMHAchRsauZQgdSVpq7KIuVRQJQXiSFfk9f2I9BQAneOPGceU4EtFZCFVV1YMT8N4/u64LTdPc27bdM3conHPDVKUUGGN0WZYbFmvOLyhdEuM4Qt/3FEIAa+2W6+tChAVIa73idxcTAREVP2uEOKaOaOeMqDhzX4h8H2UY+/EpuUXxcQkxPsPO5NjfWJbcGfOT/u3nzCEkkOlDyZ0vAQYApzrDr3PIkEgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxMzc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxMjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+0BG1dwAAABpJREFUeNpiZGBgOCMvL6/5+/fvvwxoACDAAGiOBUKTvH+gAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxNzc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxNjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aFUCMAAAABVJREFUeNpilJKS+sQABEwMUAAQYAASUgFE0B817AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxQjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxQTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vZzRAQAAABpJREFUeNpilJKS+sSABlhZWZkfPnx4HSDAAClOBM5s/AWUAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMTY1NDg1Mjc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMTY1NDg1MTc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Sc/CAgAAAClJREFUeNpiZGBgOCMvL6/5+/fvvwxogAVMsLAwMWABjCCdDDgAQIABALFWBiGZGU1kAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjE4MTIzMjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjE4MTIzMTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+paGDHwAAABhJREFUeNpikJKS+sTEysrKzAAEZwACDAAP1QIhnbQ19QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMTY1NDg1Njc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMTY1NDg1NTc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+8Yt1RQAAACtJREFUeNpilJKS+sSABlhZWZkfPnx4nQXEQJdkYWFhAtGMQHyGAQcACDAAWtgFv4rp/QcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgJJREFUOE9dkzmPUlEYhmcSbbQ2sdBY2NpgqXZWdv4HLZyfYE/ClgkEQtjXAsMmS1gbKkJjKMYCGpZAQAts6AZH8vk9J/dOmDnJm3x5t3vOveeeicjZCc673e6TQCBw6fF4rpxO5xEww6HhOc2chh+kUqmPXq/3t8vlEg2JzgbMcGh48N4veJjNZr+43W7x+Xzi9/slGAxKKBQyYIZDw4OXjF1wPh6PX6l4jSkcDksikZB0Oo3RgBkOzSq6JkOWgsf5fP6bnlGi0ajoFoW1Wq2kXC4brNdrw6HhwUuGLAUv4vH4LwQlJZfLyXa7NYHlcmnAgkPDg5cMWQpeRyKRI1stlUpSLBYlmUzKfD43QRYzHBoevLFY7K9KDgreZjKZm0KhIPV6XZrNpjEtFovbAmY4NDx49b3cqPTGFFSr1b1taLfbstvtTHAymRiw4NDsB5CxCxzD4fBnpVKRVqsltVrNBGazmejRDJhZaHjwkiFrXuJ+v3ereLQLeNucmScBZji7AC8ZsuYzKj7oU36wPQycs9FoSKfTMWCGQ8ODlwxZc5EUzxQX+qmuBoPBsdfrSb/fvwM4tM1mw9YvrIy5SOYqK14qPh0Oh+p0Ov0zGo3+EQLMcKp9V89ny3t7lW3wgzxVvFd8VeQVfQvMcGh4TPh+gX2cR4rnCofinQVmOLQ7v/N/0NkPdZCIgQoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe9JREFUOE9dk7vL0mEUx98Xaqk5aCgaWltsrLamtv4HRft5Q8Ur4v0+NLpLCIFQe4M4a4u/FBcXpwJpaZHoTU7nc/AJfR/4wuF7Ob9zHh+vROTqDNfj8fhBJpN573meHwwGj4AaDg3PeeY8fKfZbL5V849QKCThcPgCcGh48N5ucLfdbr/DFIlEJBqNSjwel0QiYaCGQ8ODl4xrcD2bzZ5p99+Yksmk6LiSy+WkUCgYqOHQ8OAlQ5YG97vd7sdYLCbpdFqy2axwVquV1Ot1w3q9Ng4ND14yZGnwpFQqfUcoFouG7XZrgeVyaeDAOR0vGbI0eJ5KpY6MWq1WpVKp2Mi+71uQQw2HhgevTvNHpQANXmrXm3K5LHrDXJA0Gg1bwR1qODQ8ePP5/I1KL6zBYDD4RWcMupvsdjsLLhYLAwcODQ9eMq5BYDKZfKvVatLpdOwLHHZnV+DuAQ0PXjJk7RL3+31fOx8RGZV9uXG+BKjh0PDgJUPWfkbFm/l8/pXx3BStVkt6vZ6B2n0dD14yZO0hKR4pvM1m4w+Hw2O/32fHC8Ch6ZtgdO+UsYdkT1nxVBE8HA6fptPpz9Fo9JcQoIZT7bN6Qifv/6fswB/koeK1oqT4oPhyAjUcGh4L327g1rmneKwIKF6dQA2HdvF3/gckQc2QEBVViQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApdJREFUeNp0Ul1LVFEU3efeuV/jOMM4Ew5qJgzlRAmOIxKTEP6A/oDRa0+B8ywiKCI++KD0C3zxByT0ZA+BYYw2DmKkWUaWY4JFaOrMvd572uvgiBQdWNxz91lr73X2PmJsbIzqa3R0VJSHh9s3pBz2qtUHvufdRFw3jG3Dtl/dFWKye3Jyd3x8XNY12hVxaGFk5HG5Wl09//37iR4EnaauawD2iOEMHHAvEwghIDaeT0wUDo+P55icNE2TLMsi27YVsEcMZ+CACw20QkopNufnc29KpdemlKZhGARomqaAFQSBgud5Cq4Q7r2envuZwcG3sBLeqlRGLCLT4mqqEn9v5HLU2tVFJCXtrq/T11KJQrUa6bpOolYzockQPUKCpHd6mq9bRvXrfX2UGRi4bG5XKkWCv/ucpO4KGmjxl5Cum0BlAISObJb+Xu3d3eqszhOeF+dwExw4lmlKIxRS1XFH2PzfAsf3ffJJmXKUHyceP1N3466iyuby8j/Cjysr6hwAN9zUdIY4HJzGW1q+He3sZCAOsZPPxSJ5rkvp3l7uoaRt/v++sUGxcPhyOlHWsPYMCX525nIvipXKLZ6VhgSN3My91VX6tLSkqjuOQ42RiEqOcUrbDqCBFlc4bOzoWORq6wH/wCImEovFKJlMKkSjURXDGTjgQgOteki8aWU8PCiXn35ZW8v4JyfqhV5duIre0BDwNLZS2ewzDi0w9vQIW8vn82jIYSSV2r/W1kbnmtbMVi23WhWSEzmJRBBPp3919vcvxtLpOea+ZFSmp6d9MTU1pewVCgX1qBh3GH2M24zmCwMHjPeMIuMd48fMzIxX45cZwkxd7vjs7Oz50NAQiEeMDxfJGi4SnMAhhOg8cyU00P4RYAAZ2RK8jm+p0AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApNJREFUeNpkUt9LU2EY/s7ZOcfNjUltYBmlGPkrNSOL0mCbE+xiXepNBBM0hY3RdXTdH2Db1aDhH9BVGPljwsQIyqWE1cy70FKsyGE7bDs7p/f53CeWBx7OOe95nud9v+e8UjgcZuJKpVLScix24U0+/6ik6z6jXL6EuqKqm5rDkbnldj+5PTX1dXR01BIa+ZhYeTYxcT+zu7tS3N9/IBlGqypJMoBn1PANHHD/MaCCmozFHm7t7U0T2auqKlMUheF+/BnfwAEXGmgly7KklWTy2qt0+rVqmprNZmMCkiTxLsRhlUrlCGVZLt0JBvt7x8ezGKU2u7HxWLMsTal2s9ntrCsQYO19fcw0Tba+vMw+ZTLMVioxwzAwiQZNL2P3YODV8/k+CDVN4wZdg4Osf3j4KNz6piZ+3yQTWT6MDRpo8eYxCgWPOC/G7hkYYP9fPX4/FwueVSyeovJpGDiosyXOzX+bopwwEHkIHpmh4ODz1Ho8erXIie9mZ08YvF9cPPxtxAHX6fXqvBmhcLa5eWt7ba1NdMiSQalcZld8Ph7iKolzFKSTMhLTQIMoYPDrZjD48nku10IRy+hQS2dcn5tjqzMzXIBwHfRnYA5DZreb0ECLI/zwtLQsXB8a+mCSswjK5XIxt9vN4XQ6uQk6gwMuNNDyRaKHc4S7m0tL0ez8fButrSxCExeWqaauzrwaDG60+v1PqfSCsG3b2dlhoVBI55M0Nn6/2NHBiqZZb1QqNfrBgWSRUV1Dg3m+u/t3YGRk4Uxn5zRx04Rvk5OTFWlsbIyPl0gk+FIRLhNuENqxQ9UBdgmfCW8JHwk/I5FIuUSbqSAUrGc0GjXi8TiIecKXqpmzavAHE0KI5IlrQQPtXwEGAI4lFJG9vogeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNp0UzuLmkEUne/zrati4ou1V4JrBAkpbARJsRYhvY1FmqSTsEUgKGhlYb9VBGH/QSBKMGLaECxiJJjOIuLqJoFofD9yzsRPtsnAYYY795y5586MUigUhDby+bxSr9fdvV7v5XK5fLRer88YNxgMX0wmUyMUCpXOz89visXiXuOot8j6SqXypNPpfJ7P5y8Qum80GlWCa8a4xxzmajwFaiKXyxmq1erT4XB4qdPphF6vF5wVRZFJ+/1ebLdbsdls5Oz3+59nMpnX2F8r2FTa7Xa42Wx+AtGEEwVBciqVkgK1Wk2KrFYrCQgtk8nkg1gs1mV51m63+wo+TRaLRdhsNgmKnJ6eSnCtxZnDXHLIpRf3YrFImM1mYbVaBWckiNlsdmwu7ZBIa6r6r23kkEuBu/DlOyiLRCIhvF6vuD3S6bScR6ORgFV5CG7JjdAdClgQ2LHb9E2P/xvcYw4t7XY7dtgir8PhcMxQhYPrRqMhJpMJTxAXFxeSWC6XBd6BsNvtsg+04XQ6pUcKzHw+Xx9XGKEybTBxOp0eT/Z4POLk5ET2gmAl5GBrToGfkUjk7Xg8DkNZ1a6Qo9/vy5lkivIq+RYgsiOHXLb0BhY+INCGr+Op7Hir1ZLgWhvMYS455MqHhEUAeDwYDJ7hH5yhRJWn4S+Iw1/QmrcLBoPdQCBwifAb4LuO5cXj8TnVUOY1NrcgewETylXpGQ3b4vn+ikaj71wu1xVy3wMDiG6VUqkkO5zNZuWjAsLAQ+Ae4DtUfg18BT4CXeAH/4G0ys9xuN8NTmXib+DbQcx2EPjDCklk55F7/M5/BRgAk6YORNXAcuoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnRJREFUeNpcU79rWlEYvc/fGiJaTVPTJYqLPKcQHGuGZtPVxcFIHcx/UJB0qAr9B0SX6tIsri0daouhS0BCpqrgEOzQxkDaQsUnjT7tORefpL1wvNf7fed83z33PuXo6EgYo9FoKKenp/7Ly8vn0+n06d3dXZT7Npvti9Pp/Li3t/cqnU7fZrPZpcFRDAGQLcViMXF9fV2dzWaPTCaTuD8Wi4WwWq2jQCBwfHJy8g4i87UAyNZyufxsOBxWzWazICigKIokL5dLKaDrusTu7u5xoVB4jfhMQVA5OztTm83mBTbsFotFECTn83kpUKvVpMh8PpfA+k8qldo/ODjosk/X+fl5ARXtGMLhcAicl+2KcDgswTX3GGMOc8kh14If/3g8jsMoGeTMI8DA9fn539g3vCGHXAr44Pg2yWw9k8mIUCj0j4GlUknOV1dX9EseB0b7sfWAAk60toC6lL5f+f9hxFiI3pFLAeH1erXJZOLmul6vC3TECtI8Dppp+EBwuN1ujTOrasFg8CtdZ9Lm5qbw+XzC4/GsK3PNPcaYw1xyEJqyg5+4jveDwUBFwESjjPvv9Xpypvsul0uene8AIgtyyOU72MDiSafTedlqtfaNN8DzwmkpwMq8BeMtHB4eXsRisRcIfVZWZjwGkv1+P99ut6MgmoxqxjVSFEKLeDzeVVW1iu23wDfzaDQSiURiij+3W1tbN9FoVMezfQjYNU0z8d7x/vVIJPIrmUx+2NnZeYPcT8B3iOpKLpeT7VUqFfmoABWIARFge+XjDdAHOkAX+MHvQF4pPxKeCxtztM3E38BgJbaxEpiwQxLpPHLXn/NfAQYAVxYSIuMwPrYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjdJREFUeNqEUzuLGlEYvTM+xvcj0ShYWkhYjSAhhRYBSWGXP5FeSRUICFpZWOgfGBDSpwuyGCFgFRaLNUMwXZrg4iYBIb5nzDk3juwuC7lwQL/vnPM97h2l0WgI+9TrdaXf78em0+mbzWbzYrfbZRl3uVxfNE0bZDKZVqVSuW42mwdbo94QO3VdfzmZTC5Xq9VrhJ643W6V4G/GmCOH3JOBoigUu3q93qv5fP4e/5Mej0d4vd5bYIw5csilhlrlcDgo4/H4bDgcXjidTg0VBeFwOISq/mvQsixhmqbYbrcS+/1+Uy6XnxYKBYMMn2EYbzGnxkp+v18iEAjcgh0nh1xqqOUssfV6/Zwt+nw+2SoI93aADk8xaqilwUMkE/acJJVKJRGPx8XNg9nFaDSSHBrilmIIP6CBF0HruPHTrHcPY9iX3A92QBOFWnkdoVBoCWHIbm8wGIjFYiHNeDgOOCISicgR2GU4HF4yR4NlIpH4PpvNcnaSRC6OFXl4XYyzOtsnjxqkVjT4lcvlPmDGM74LJrmP+w4NaYCOLGqoZc/XaO8TAmMm/3fIIZcaauUIwCSdTuuo7MZ3kMXC5Au9Wx0jWNls1kilUjo11Do4a7FYXNEtGAxeIWmC/AiVNFyVelyymUwmf+fz+fNoNPoOoY/Aj3a7bSqtVkvgSxO1Wk0+KoC7eAY8BhLHBq6Ar8BnwAB+djqdHQoIp33v3W53X61WSVwA345m/qPBH3ZIITcP7oEaav8KMADyzRBm/XofAgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqEUj2LGlEUfTOOjhoVTDQrdpai2UKCrRax09YiIihYGPQHBFKKkB+gpNPCbGOzTUgREjSFCCHYJEMghRKL6MImAT9Gos6Yex4+GLbJg4POfefce+69TyqVSkycbrcrXV1dBSaTyfPdbvdkv9/HEXc4HF9dLtf7RCLxslAo3JbL5ZPQKBax0mg0sovF4tXhcAjJssxsNhu/MwzjcrVaXY5Go6fT6fQZcd9QkiPu5LPY3mw2K/P5/No0zRBVRFWmqiqH+MYdOOBCA610Op2k4XAY6/f7nyVJUhVFYQCqwwUOCeGCHY9HDtL8zefzj9PptAaGezwevyCyimpOp5NRvxz4f/cbHHChgRYzCKzX65SwjF9UB8gRd0AVuQOrK2igRYIHNPELq7hYLLJIJMKsZzabsV6vxzlISIMOUPg+ErjImklCGb2jX1ofu3sQgxAcuMHsoOVr9Pv9+na79Ql7nU6H6brOk/FVUdztdjOPx8PEen0+ny7egU52f2ia9gg9o4LX6+VDsx6xGbgADxoK71DyN63jrd1uN0U19ImKViAmHIILDbSI3AaDwY+ZTGaC7P874IALDbS8BcKXZDLZIeuOwWAQpxXJYoVWId2bqVRKi8ViHWigtS2XS5bNZndnJzfxeNyg4T2kSaubzYZ7DoVCRjQa/ZPL5d6Fw+HXFPpA+FmtVg2pUqnw/trtNn9UhBghSYgSLs4GbgjfCJ8IGuFXrVY7YLUKVoX3Xa/Xj61WC8QV4fs52b1zgi0cQojJE/cEDbT/BBgAoZsTVzzPeQgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAApCAYAAAAWNlirAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF1JREFUOI1jqa2tZQCB3NxceyBVBMTGQCzNAhLMycmp+P//fzsDEmABCoJUtjKgAZbv379P5uDgYMKQYGZm1kQXBEuAANB8TAlsgiND4t+/f6OW09/yISaBVZQsHQCsMHUPEsgdpgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAApCAIAAAB7iNSFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjevXqFdP///+ZGBgYUGhi8b9//8gWw4eR3AMAjT9unIbIdHUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAApCAYAAAAWNlirAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF5JREFUOI1jefXq1X8GBoanQHwWiPuA+CAQM7D8/w8SZ5CGYj8grgTiDhYGTNAKxEdgOpAB048fPyZj08HAzMysg00HAwsIYJNAdtXwlfj379+o5fS3fIhJYBUlSwcAax55fnDttN0AAAAASUVORK5CYII=
*/

Added Site/Site/Frameworks/AppKit/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;57;Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.pngu;65;Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow1.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow1.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow3.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow3.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow4.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow4.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow5.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow5.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow7.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow7.pngu;50;Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.pngu;50;Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded0.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded0.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded2.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded2.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded6.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded6.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded8.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded8.pngu;53;Resources/_CPToolbarView/_CPToolbarViewBackground.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewBackground.pngu;67;Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.pngu;58;Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.pngu;56;Resources/_CPWindowView/_CPWindowViewResizeIndicator.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPWindowView/_CPWindowViewResizeIndicator.pngu;27;Resources/action_button.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/action_button.pngu;28;Resources/brightness_bar.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/brightness_bar.pngu;38;Resources/browser-leaf-highlighted.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-leaf-highlighted.pngu;26;Resources/browser-leaf.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-leaf.pngu;36;Resources/browser-resize-control.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-resize-control.pngu;24;Resources/color_well.png64;mhtml:Browser.environment/MHTMLData.txt!Resources/color_well.pngu;31;Resources/CPApplication/New.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/New.pngu;42;Resources/CPApplication/NewHighlighted.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/NewHighlighted.pngu;32;Resources/CPApplication/Open.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/Open.pngu;43;Resources/CPApplication/OpenHighlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/OpenHighlighted.pngu;32;Resources/CPApplication/Save.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/Save.pngu;43;Resources/CPApplication/SaveHighlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/SaveHighlighted.pngu;43;Resources/CPImage/CPImageNameColorPanel.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImage/CPImageNameColorPanel.pngu;54;Resources/CPImage/CPImageNameColorPanelHighlighted.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImage/CPImageNameColorPanelHighlighted.pngu;53;Resources/CPImageView/CPImageViewBottomLeftShadow.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomLeftShadow.pngu;54;Resources/CPImageView/CPImageViewBottomRightShadow.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomRightShadow.pngu;49;Resources/CPImageView/CPImageViewBottomShadow.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomShadow.pngu;47;Resources/CPImageView/CPImageViewLeftShadow.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewLeftShadow.pngu;48;Resources/CPImageView/CPImageViewRightShadow.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewRightShadow.pngu;50;Resources/CPImageView/CPImageViewTopLeftShadow.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopLeftShadow.pngu;51;Resources/CPImageView/CPImageViewTopRightShadow.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopRightShadow.pngu;46;Resources/CPImageView/CPImageViewTopShadow.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopShadow.pngu;42;Resources/CPMenuItem/CPMenuItemOnState.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/CPMenuItem/CPMenuItemOnState.pngu;53;Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/CPMenuItem/CPMenuItemOnStateHighlighted.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.pngu;73;Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gifu;47;Resources/CPSearchField/CPSearchFieldCancel.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldCancel.pngu;54;Resources/CPSearchField/CPSearchFieldCancelPressed.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldCancelPressed.pngu;45;Resources/CPSearchField/CPSearchFieldFind.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldFind.pngu;47;Resources/CPSearchField/CPSearchFieldSearch.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldSearch.pngu;50;Resources/CPShadowView/CPShadowViewHeavyBottom.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottom.pngu;54;Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottomLeft.pngu;55;Resources/CPShadowView/CPShadowViewHeavyBottomRight.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottomRight.pngu;48;Resources/CPShadowView/CPShadowViewHeavyLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyLeft.pngu;49;Resources/CPShadowView/CPShadowViewHeavyRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyRight.pngu;47;Resources/CPShadowView/CPShadowViewHeavyTop.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTop.pngu;51;Resources/CPShadowView/CPShadowViewHeavyTopLeft.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTopLeft.pngu;52;Resources/CPShadowView/CPShadowViewHeavyTopRight.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTopRight.pngu;50;Resources/CPShadowView/CPShadowViewLightBottom.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottom.pngu;54;Resources/CPShadowView/CPShadowViewLightBottomLeft.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottomLeft.pngu;55;Resources/CPShadowView/CPShadowViewLightBottomRight.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottomRight.pngu;48;Resources/CPShadowView/CPShadowViewLightLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightLeft.pngu;49;Resources/CPShadowView/CPShadowViewLightRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightRight.pngu;47;Resources/CPShadowView/CPShadowViewLightTop.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTop.pngu;51;Resources/CPShadowView/CPShadowViewLightTopLeft.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTopLeft.pngu;52;Resources/CPShadowView/CPShadowViewLightTopRight.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTopRight.pngu;47;Resources/CPSplitView/CPSplitViewHorizontal.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSplitView/CPSplitViewHorizontal.pngu;45;Resources/CPSplitView/CPSplitViewVertical.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSplitView/CPSplitViewVertical.pngu;51;Resources/CPTabView/_CPTabLabelBackgroundCenter.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundCenter.pngu;49;Resources/CPTabView/_CPTabLabelBackgroundLeft.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundLeft.pngu;50;Resources/CPTabView/_CPTabLabelBackgroundRight.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundRight.pngu;49;Resources/CPTabView/_CPTabLabelSelectedCenter.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedCenter.pngu;47;Resources/CPTabView/_CPTabLabelSelectedLeft.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedLeft.pngu;48;Resources/CPTabView/_CPTabLabelSelectedRight.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedRight.pngu;46;Resources/CPTabView/_CPTabLabelsViewCenter.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewCenter.pngu;44;Resources/CPTabView/_CPTabLabelsViewLeft.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewLeft.pngu;45;Resources/CPTabView/_CPTabLabelsViewRight.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewRight.pngu;54;Resources/CPTabView/CPTabViewBezelBackgroundCenter.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBackgroundCenter.pngu;44;Resources/CPTabView/CPTabViewBezelBorder.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorder.pngu;48;Resources/CPTabView/CPTabViewBezelBorderLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorderLeft.pngu;49;Resources/CPTabView/CPTabViewBezelBorderRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorderRight.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator0.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator0.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator1.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator1.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator2.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator2.pngu;38;Resources/CPWindow/CPWindowShadow0.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow0.pngu;38;Resources/CPWindow/CPWindowShadow1.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow1.pngu;38;Resources/CPWindow/CPWindowShadow2.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow2.pngu;38;Resources/CPWindow/CPWindowShadow3.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow3.pngu;38;Resources/CPWindow/CPWindowShadow4.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow4.pngu;38;Resources/CPWindow/CPWindowShadow5.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow5.pngu;38;Resources/CPWindow/CPWindowShadow6.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow6.pngu;38;Resources/CPWindow/CPWindowShadow7.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow7.pngu;38;Resources/CPWindow/CPWindowShadow8.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow8.pngu;37;Resources/CPWindowResizeIndicator.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindowResizeIndicator.pngu;19;Resources/empty.png59;mhtml:Browser.environment/MHTMLData.txt!Resources/empty.pngu;31;Resources/FIXME_ImageShadow.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/FIXME_ImageShadow.pngu;25;Resources/GenericFile.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/GenericFile.pngu;34;Resources/HUDTheme/WindowClose.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/HUDTheme/WindowClose.pngu;40;Resources/HUDTheme/WindowCloseActive.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/HUDTheme/WindowCloseActive.pngu;26;Resources/minus_button.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/minus_button.pngu;25;Resources/plus_button.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/plus_button.pngu;27;Resources/slider_button.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/slider_button.pngu;29;Resources/slider_button_h.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/slider_button_h.pngu;37;Resources/standardApplicationIcon.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/standardApplicationIcon.pngu;25;Resources/wheel_black.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_black.pngu;26;Resources/wheel_button.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_button.pngu;28;Resources/wheel_button_h.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_button_h.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground0.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground0.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground1.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground1.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground2.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground2.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground3.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground3.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground4.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground4.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground5.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground5.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground6.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground6.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground7.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground7.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground8.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground8.pngu;59;Resources/CPWindow/Standard/CPWindowStandardCloseButton.png99;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButton.pngu;70;Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.pngu;66;Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.pngu;77;Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png117;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.pngu;62;Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.pngu;73;Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.pngu;62;Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.pngu;73;Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop0.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop0.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop1.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop1.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop2.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop2.png

Added Site/Site/Frameworks/AppKit/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site/Frameworks/AppKit/Browser.environment/dataURLs.txt.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/CommonJS.environment/AppKit.sj.

more than 10,000 changes

Added Site/Site/Frameworks/AppKit/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;15;com.280n.AppKitK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;6;AppKitK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;9;AppKit.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;E;

Added Site/Site/Frameworks/AppKit/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site/Frameworks/AppKit/Resources/AboutPanel.cib.



>
1
280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;K;21;CPCibObjectRecordsKeyD;K;6;CP$UIDd;1;4E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;6E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;7E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;8E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;2;10E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;11E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;12E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;13E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;15E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;17E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;19E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;E;E;S;16;IBCocoaFrameworkd;3;461D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;57E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;15;CibObjectRecordK;8;$classesA;S;15;CibObjectRecordS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;59E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;60E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;61E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;62E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;63E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;64E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;48E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;65E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;66E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;67E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;68E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;69E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;47E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;70E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;71E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;72E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;73E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;74E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;46E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;75E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;76E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;77E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;78E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;79E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;80E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;81E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;44E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;82E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;17E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;39E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;83E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;42E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;84E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;39E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;85E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;40E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;86E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;88E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;89E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;92E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;107E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;112E;K;12;$atext-colorD;K;6;CP$UIDd;3;114E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;121E;K;12;$atext-colorD;K;6;CP$UIDd;3;122E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;123E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;127E;K;12;$atext-colorD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;129E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;12;File's OwnerS;6;WindowS;11;ApplicationS;4;ViewS;10;Image viewS;10;Text fieldD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;17E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;39E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;130E;E;S;18;CPWindowControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;ArrayD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;22;{{72, 57}, {219, 263}}d;1;7S;0;S;13;CPApplicationS;5;$nullS;21;{{0, 26}, {219, 263}}S;20;{{0, 0}, {219, 263}}S;5;$nullD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;d;2;18S;6;normalS;1;1S;24;{{45.5, 16}, {128, 128}}S;20;{{0, 0}, {128, 128}}d;2;37d;1;0D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;131E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;132E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;134E;E;d;1;4S;1;2S;22;{{16, 165}, {187, 25}}S;19;{{0, 0}, {187, 25}}d;2;36D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;S;7;AppNamed;4;3072F;S;1;3S;22;{{16, 194}, {187, 20}}S;19;{{0, 0}, {187, 20}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;S;19;Version XXX (build)S;1;4S;22;{{16, 222}, {187, 22}}S;19;{{0, 0}, {187, 22}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;139E;E;S;9;CopyrightS;6;windowS;7;CPImageS;8;Icon.pngD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;141E;E;E;S;5;Ariald;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;143E;E;d;1;1S;24;{"width":-1,"height":-1}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/Aristo.blend.sj.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLData.txt.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-error.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABmxJREFUeNrUWV1sFFUUPjs7u9vttvRvZ1sMygJCSynRF3kh0UQfePGFxESfTEx80AQlEEKMhtlMlRcl1uATCdF3XnzAmBAf1JgYf6KILaVUoD/Q0h9Kf2a2uzu/njMz226b0s7cO5B4k5O72+6e8333fOfMvXdjjuPARiMWi8FWY6hre/WljKYA/yig9Qb9cOeNyQ3/LvIg8NdDbn5+j5Lt3gGigAth2+EdCQKYtgMPBu8pC3/fhjDEIieF8OWWg0hI2gax4bug6wazr3gyAVmpCRz0N9/PR4yZVP++Drm5Z5ciSQ3gTM+BUSyvpI5lWLEKiLoJktQCDvp92H+HmRgTqWt7O+SWnt1KTmoEe3YOzGKFi1BVy4ZWAtGxISe1IrHdyhwjsdCkru5tl1t78kquLQMmZshcjoDQKjPQ1TKI1hzkspSxvPJgYCQ0sVCk/ny2XW47sAsJNYAx+zBiQqsZ01HKovPQI4bxZkMSC0zqjz05ua0bM9SaAX3mMRGqzZhWxkbqEbMx7uz14MQCkfp1d07O7s8r7a31LiEjBCFq1TfnizCzrEOuPgmdLRmv9Qck5iCx9mwzOBh/enA0EDFhqw/8skuSpa6dSq6lHioz81ChFbRsXEUnkF1dMsA8+iZ0nb/ozn8tGoG/S3EoHsWl+ITDdhwZDexNFnXTTP2cz8q5zp1Ke7NHyCiFl1z22GnY+9obEI/H4enDL8K/+TzYX50LJUVvIeehvQ0zhnjuD22esdijtkk/5SX5qa5nlA6Uiz63AHqJrYZSl36ERklySVmWBcWFBSgdPRy+zHDblkynIInEplDOk0PjhZdGZ3tDyQ/Tq2zHJ3wZu1ylGE5ytZZIJEAURdwJCe4cJ98MflwpIg7CQ7gIX2j5WZgVZ3EZHVXA4ehy5ZkpaMhm17wnkKxd0UY8dYjLYqkpC7+jL5fBRMnwjNIYtuLunlVS4yNgsWx6awbhshwApkxVJcczrKlJN9N0lKG5MnoHBE6fhIsxUw6uqGdcADAzVfnSbN0bx2cP50IRLmZStCIWn1Tg7tgaUg7Jj9OnxZ6p1S7FM4S7o2tIxSbG+bPvZoqlplzp2dxFbd2fAEuvuK1d1zTQp6e4d4YeLmb5ecapFVgaGYHUgR5QsUlw+3NdMtaUSd3Ptl3jHdrIHch2HwDt9q1I/JEPk7Wmouh+NCojHhl9bCQSfxZzTUXV/ahBDFwD9Z+r7hyFP4vnORVF96OxcOU716IaNvNzyoZIut/jGB4uVvlFUFMG+hkuGaAhkAzu1DvTCUjEYhHUFKv8LM94xq1kPXR/8iFI+/fDg+FhGDj7MXQby5x7P55tEq0omsWxUz8oK/Dc697Jd+cLhyDd1ARLx99hv8mlwyZh2oTUIw+Ji7bTN6aVQEikkJfAdrBD6zxyBNLpNNTV1bnzvpdfYfZFOAgP4SJ8oUn1LuuF/oXFvknD5CJWGbzuri6dfGku/XuTixDhIVyEj+U2ST1bMgoDC0tIzIBYMulJ0e+IQW3o5HGY/v6Ku5ml+caxd0P7oLgUn3AQHsJ1Np1QQ1+81Pw+1Xg6lVC6tzWc6IgLYJbLXDXGUkMiSncKe/jgktb3acUo9NZ5hM6UdObLTJUcnVpUwWpsOLE9mQL7CRFzZYvxJgwLbqha3zndLBRSomptcWcS9NpZJYcnlzSwnxCxFUKm7RL63DALZ5KiGuSxKYSIo5Lj66raN4FSEFLYPLD4q7elURr5Jf8Uh+JR3I8ScXX957h/IKgS+8KwCu9pKtiZx5OxlQxRDRW1vi8Nu/BBQlAtCL4JEBjiqhRoQNP6JuxoM7aSIfRL/inOaVFwJbeR8XS/lT+ts6a344Lck8m8v4N2IJwZowzFscvdw9cDxeL5i5ZNV8qL7g2mb6fiwhqwn5kWt/yISML/DlkcA184qmmNhzKZt7oaG0EwTfb9nCjCkK7D78Xi19/YzgXyj5ahQzjti73DeLCr4jCk6LMptDrftqG1IoDLk1pRaoLiq7qPIMxhRfAdJ720fPub41zGl1n/X0t0qetbyQ7oWoygtksI5BLOP/grm/ZXOfBJgnygFdFm/dcbZzPgnX6YmhLWyS/lE0j4C53y50TIBmT78qJEV/zZ8MlVauW3XgSPxM7RKIQai9XMVQt8hVFjds1s17yvtS1JiQzBa0nCJu+Z7mi2eM8nv//z+E+AAQCtbACM76VJFwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-info.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACUpJREFUeNrUWmtsHFcVPrOzMzu768d6/fYmdhLnRZzQNO6DqkEpbSSiqK1IhVSUQqEKCooSUSFVwA9EVX40QuqDgiCVgqCQJiK0qJVKKKSgJii0SkWbhyDOy/Hasb3ep/c17zsznDuZNa6x453ZTSSOdHzvzOy9c757HvfcM2Ysy4K5xDAMLERPH74Ai1AMeYvDG5CXI3fNej7m8Fnkk8inkKegSnrliXUz/flkp+QHl2Ra5ny3eeSdyN8IC9yWrpYQdETC0BgMgBDggPeztgB0sRSd9Koa6S1KyuZUXtyXnJZAUsmfcexryEehDuQalGX+D6jdyD9cHWuJ9XW2QCgUAFExQNQMSIkmqHkJiGkBXVRqAJzfBwHWB0E+CP2xMHx2hR+KorQtPjW97VqisB/nehb50G0FZRpGpbsS+Xdre1sH+7qiYIAPMpIOpekiasO0gRDEb2JrzrISHwJj8Q/iAg7bAOeDJsEPK5Z0wLKu6PLRRO63VyZyu/CnTzpmehtA3dDUNuTDg2uWRKORRpjIK1BUCMiaOaOVBccjk0/5L0Be1CFd1NBcWeiLtUM4yG/55PLkaXz8GPKHtwGUsQ+bn9x/Rz+r4/ChRAlk1bDBeCWCypfRXIsyA3mJQDf6492fWdp1+t/xE/j4W46/3RpQu1798Ptrlrbt72xrQVMzIFMsgYY2ZllQF0JcoBPUuKpDR5MAm+9YySfSuV9fvp4O4uMDdQf11M9P7Vze3bK/LdoMY2huBVFDAUy4FUTQbycQnNjAQxcu4MX41M8c/zpWN1Bf/+mJdaZBftkWbYF4DgGVVTCqNDeDChgfg3w2B5HWKMSW9QLLsouOkw3TXjRqmnev72dPn714CB1wEB+NLDbWt9gPvvry31iDkCPrV/UG02hyuaIMmk5sYavh0YsXYWNUhb1bY3YbHxqqeqyq6ZDJi5BTLRhYubQF5agq1DOLZRQ7X/jLnlV93b/gI60wlSnhyrkzuY2BFGz/XD/wPA+apsG7p4fhjNLhag6OY6GnrRGKqSTEJ1JPHHnmi0dullHcFNTjP/4TjyNH7ty0oWcyK4GCDuyWnvl8I8S62lEwDgj6SSqdheffz7ueJxTkobOJh7PnLlxGAdcd/d52w1OaRHTtyeW9PT3TuI/IimpvpK6FCYVAEATw+Xy2L/n5gG1abkmUcC8UOOjuiK4en0rvwFtvegoUaMPfFJqaIZUvg67rniJZrqRCTyczYwH02jCI63noOkyjHG2RCJCx8d2eQD367O97AwJ/L2Y+IMvqgva7GE3mRBhwklk6RwITWEIMT3OJhgJNDQKmXdaDKF+UrpkrUERTtzd1dkCphEJ41BKlTFGxUytqfrSdQJBoAZ7nK6A8ra0tbHIq+RBevuEOFNHvZwMClGTF3gy9UiKvVPJFu01hjlfLfKKkYm4Ypv6+xTUozMbXGBYDmqp6cuwZTZWZGdO1QZX0mjSlIQt+zpbPtU8ZhrlCI5a9t1g1JHfJMnxKU+mybod2r0TnIEGOLnS/a1CmSSLUTHTi3Z9sTZWInRkEg0EoY8DJlpWa5mNMBmUyUFOkyRWozXteYVG9rKbVZiq2xmkmOpWHpsYGuJ7M1zwfjaJ0oXFb4FzlfqcOPG1gxEMmdvitla+nCzfyQARXj/l0DXPPm5jQwj6l6yWi6RF6fLdqPDCNpUs2qEnco2rVFN0aDI36pV50DYoQ9SrR5bto9aiW6EfpWkaGC6NpGE7jnmfUBsrP+FFTdO9UR1yD0jX1qq4iKJOtKVrZ5jyUsLkeRDWlqRpNDq64B6XIp+VS/iu+ULRmk6krYbYvFXOgKdIHrkEpxfS7xenmlyPhVjzlmp79ivpkITEJqHXgMENp7o6Br4qT70KRj/ExkE8nDDE7/lfXoOInXr+66pHvnDU1eSMtYHr1K5Kdgr0Pr4eVS9phZDILB4+dA669x5s/+f1A5DIQVfn7+Ad/mPJy9DB0uXRIyqc3+sJtQPcsL9ra8+gmeGzroH3yvQezk+aGELx4/JonLfE8C+XsJGhS4ZBTQnRfo8gM/eNX+cRoymdRQKZ9DnLLW+9bD9FoFCJ4DqLtA/eu8zQPHt5R7QoU0hPDybPH3/BceClPDBVUqfCSNJ20VW86ZuiGR1JlW0t0PG2vZyXXc1ALoePF3BRoYv4FJTdRrqVEZmXOHT8AbOBrUX9ggPUFXSe4Pzp8CgNEAB7ctBLePzMMz712EqOp4crsOMzKjXIOCqnrH02eOvKbmqtJlKLrt24OtC59L7psg0DLw+Q2hXgbEIZwwW9BNv6vkpyOP5C/cOKTmRX3Uk2ardHWu3Z8uzm2+kWusR0UjcyYxa0ERAs1oYAfsiPnDSJO78qdeed1J0e+KShf1ZH5n2+9mh+/tF8tJCHg9+HOztrVJTx31Z3pvCyLPojbmZRLgC4VfoCAjrbdt7Mqu3XzgUDKffz28wZ5WPQFxp6L9g2wFpqGqqp11RhNg2hAYU0ZMvEh3VTK3y2cP3aw5Z7HlWr3SsbtN1+kcMPah77EhiMHIrFVjVagGRTlRh2iFnD0nRQQrRGCPI1ZyHCKlLO7xUsn3mse/LI0U3j5+L+Vsbp98228c4dYOvPWm0Lf4LWcQQ42tPcOCE3toJt+OzK6BVfxHTvsAwEtNwZiZuIjLTu6Vx0/dx7fp5mmu2ymGk0xDs+9pgvSGlz9had8XGhfuH1JJ9/UAZZfsAuf1FQowLkgKxqhQOyKLe4/jC6CWkyDlJkYNzXxJfnKSfpBO+sEBcvhGQVVrr1GP8YJJhVm5/TpkTrCsHy3v2P1I0wgvI0TGgb4xigEGtsAr4HhgvhLfubrPCZuYOkyWCoCKWWQs3hLPGOp5eN68tIfMQOmOR09AOoOKNPh2X3zBiZvoHyORirMOUz79N8M0AGgmW5lyO20ZfxCP8MJazEV78OJorimYXw/P2t6Fe+LKFIOTDKKAC9YRBtxqq1p5GnqOvSg4FTEiANQd/oVNuvmUwtlHrawmFlZRJlEpi+dpFpEbpjzHiqciJx3gCSda61ue1wdzI9qAbUBAUdzIRpPnHsh5x47p8BEtSA5YEpOX3EWpgLwlpnfzQJFxTyZWWCZWWZaAc7OGW85AlaErJiVNUt4a9bRwnWg8FdpWvONZmanLHPuz9efb975+lDFfffm9/9O/xFgANbLi7lf3e3qAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-warning.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB/BJREFUeNrUWVtsI1cZ/sbXxB7f4ji+29m1t9lsspulUakglUAUJJQ8AYpEFwkhRBGIF7SVqJBBlZD6lKdIeSgI9gEhIVGVB1SKoFqxquBxoVVp2a2yJI2dbLPO1beZ8cyc4Z9xsl3HdmI7zmZzpE/jM55z/vOf//zf+c4MhyZl9earOIEySfiQIOCEi6XZTU3Temnjc4S/WV1BXi6uV+n3LOFPJ+mU6YQnbYDwpm/sq/zQZ78J/9Wv2aj+OiH92J3SI9ULqIy96hqeHHCE/NTrCvr8fXBf+LyNMTbfKxvNcJLL7yoHvOg+HwPYe9BYARznhCuRgrSZnBY2Pp6hZ/78+CLVAzBNW/CNPmsGdw+askQ37kNTV+jPj+CMJ/T/5+k5m9Yje4+ieU7pkToervHh9BQfoxSSV6kuEljtqnyC/kEZ7sR4ipbhSz2w1YCTyCmeBjvHxyLkQJaiVKQosYfQlDI5moVrOKgbytDz0V7n1Ek4lfGcuxyxe0o0+Dw5Itc5BaZAkzdhsT6A78LTTiKTuSfdqTThuicVAqo5MLVC91gjGC3D6ho8KR/6feEXqM1zj8Gp7kCBmB+4OGkzaasUoC0jKvVR2odK/28D0jKx4bB+a4Ham3uVVr2M1IxjKDHtSTqJD7KAKhqDbw0JmnQf/JAGd3J0gtp//0lbfrShavPuJO1JwhLlzO7ewNmhMEhEXIYnGaSq9opOMifmFO0hHUEhavaeH0s5PSJYlfYjViWobUCm5x/AZs3DmxoPUl+ZTm03Qy8URZR2vIw3GaAokXKQy/q0fDpBTMMf31rHck7EcKwPX58OwmTiPrXFiEyEZfjPT2JrUbtOt35DWDxVlU4z87PgpUmnlbSdKhGFa3Ld/7974xP8+verD+sVQcW3vxGq76O6BbN1CYGxp23r79+e5zjMnKagNfSdP8nTbOvkIDXkzT9vi3V9G/WD+aVWwSo5DERt4EPJaZ10To0oaGkthK48Y4Zwl8a1Q0tJacgbjrPW9a3XG3NLIYoncqnchS8R1fvVVbztNJy65olfmPINSVDLaySJKEqq2oCBAUf9AUuvN3kOShWqsA6ez8OfGk+R0nipt+zHtKPAq6o254vTOam8SGlUaknb8Yizrm+j3oriZSKNMpFGgtf1b4bsRNsYSwO6jVQm8NTliNOWgyJu0JFCbknb0WA9F+n1lhRP/SjiJqzsfwhdutq1LuzGKUPfDQ1badl9bMzuYcoh6Ktn0oh+CD5MaSgi9ZvDUEIBP9idLuzYKT2JI+NXbGbxHphIya0qh6qG+BAOOMWOUBqkC8UCULwHf01pkC7UzD1QFKwVZtzh6HQgXIFSpL1Hbk4OjyLoFGC11Mzo1yAvHtlGJw2lvA6fdxMD51ITZPc7h4ypAZ1EytB3gwkvWIGiJBWbUvhB0OgQjbpr+aRfqd6OhGLVMtmhDZlUCNn9RSe6sG2ndIoNXkinPI77UCsbNKPyESp8HwpioX6jX+NqHEfaaEf9q8I2HKYVhEbSEa12Sj6GU0SLB0A7IjLBuIlmLwetKhypwOvyKmyv0bl+7aCdJhNpFFYRThhjuk5INxlbA9pS6aTC56LjaaetugS5sn0ohTel9cAenQfQUTuNSEgRCjBXlhC7nLaptPzbUentLL+rvM/zQjQmEDmsEzlUO5ptHZMjVvzkx5/BM6O2jttCkSEX1hEOF+GNBNvShUeqdPq5MJQkcthepFwq1tZ7hyVk38X0hAlakaIsd96eiSWyv4xgYhRbOU1X8W/T7Wq3Kv3aYDI0FRzYhFrcMKi2PXKohyYSk21QLkqVrtrr0VJLm/D1UX49FT9SFx4WKaJQzIXiFqg7OTpVCLW3GqdUVEkEt7OGSNyL1TvI0PB/q3916jRSmdjFaMTNZaGUdmubYqf5QJAkhuuvSXj+ZQE/WhBRrrCu+tHtK6UCbGIWycuxQ3VhK6cMfRdLCpB37xvUSlTUFd5+V8V7S7Xj/Z2shr/cVrvuy1Aau+uk9HfgCXha6sIWRw/Mn5sI28yFLInLUtdR0uHy1x89eL+z6770/FIrlJ/bWYSH+1u+LzQfdOjWr16c8Ue9r6TPFVDN6xutdKw3i8mkA2Wri5ahhqlnPfjWF8ikUD7WG1ONiMMzaIXABkLlHTouA+/Xna4frfz9l9+jIzQ+vPLcYMpTvQN5e7s2Q8cpZMGSiMHk5sFKJISXs8cnHOJ0q9eLsuMi/vXO1hpVR+huqenbJP3TSnx0KOW3rUHa3DtWHLfQ+JXlld5SIfWpFgtwO7JIjCYjK//NZ+juTxsidfO170ZpAu9OfcXpNOc/glIoniqFtxMtM++AKTKCd/4q6Bvx2P77wn2i4BRFe/n8lUGnXVgl6txTDsaHsicUBmlUYCbBm54YtNH4f/78D25wehz05ceNjc2aJFkZ4/sFUuEFSkSl9p3xSS80TpXG63aVUFWUS7ofX/7hDWaZnZ01LS/n+7Pr3ncji9qXPBE7HA4nzkpRTHYsLe5iNV/5t8Ox3U/+CJZ8Pm+2WJjrxs3cm7kN78gtl/WLJq7/zHhFC0rcLj34x63/7L5hsfS5yJ/qQ/az2R3lt27v3FBk+Q+0K5vOilMcxzGL1Vzudzh3uL2UsQQCAZWWX9HKaauOPn7L7Ky9uTlDTpHg4VRiCEFWuGIsFlC5faLg+RWLyeQ12e0ShzNWJMmuMbbDSqWE8sEHr7P/CzAAN77WZZ8SpakAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2rt3L5OVlRXTt2/fmP79+8f0//9/MI2M//79i5WNjY9sxoULFwBPdEPtOkpElQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUeNpi2Lt370yG79+/z2T69u0bA9O/f/8YmP7//w9loRF///7Fw8UphmbohQsXGAACDAAFaUdSlQta6wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUeNpi3Lt3LwsDA4M3EFsBsQDL////faWkpDykpaUZ2NjYGJiAAtbi4uIMf//+Zfj27RsDy79//3iBmAEGQFoYQBguAJJFUUGmAMhK2muhiRnIAqAg/Pz7928GWEAxAWWPPn/+nOHXr19glaAg3Pz69WsWIDYD6uADCDAAuvWepGgKK5MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHtJREFUeNpi3Lt370wGBoYPQHwMiLeyWFlZMfz69Uvg6dOnXs+ePWNi+vbtG8Pfv38ZxMXFGf7//2/N8u/fPwYYALJ5WYCicAEQG10FWQIgK2mvhSZmYAjAAujPnz+gAPoMVgHivHz5EqTiOMuFCxdACj4B8Skg3ggQYACEzZ6gbOTDXgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUCFtjKi0tZbK0tGRiZGQEYxCA0TCAzmdmZsYpB+NLSEgw7d69GwDfyAUd/UzAZgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAINJREFUGFeVjbENwkAQBOf2z+fQEdLJuDIiS9RgiQhEIVT34TdBRPACAd5wtLNr27YFcAVW4Ohmds/MyzzPRAQu6bwsC8MwAOBmdogIXnFJSOqBmf1odKCUsnfjo/IGSil7le72P+XrhiS1cRxxdyQhM3u01pimiczEJd1qrVFrPQH5BFHNEV7zubdvAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIhJREFUGFeVjbENg1AUA89+X1BSRUIKizBPZqAiVSahyhLME/SlvwFNUoUmCAWX1p2tYRjewAuYgEfq+551Xa/Lsow557Ak6rqm6zps35IkAKqqQtIl2eYb22zEVvwQh0VEnN2IiB0iIs4qh7f7yn8btokIbBe3bUvTNJRSkDSleZ4BMvC0ff8ANOUZTP6A0qkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHZJREFUGFe1kDEKgDAMRf8QcoNSaW/mJHgJJ8WDeJSep0P3LqWtyaCgo2DgLT8vCYRCCAxgFSbBU+99d84t3nswMzSYrbWotSLnDGqtGQFXqQHlDrT7MD4GevL/kV92vB+USimGiG7jiDEu+lcN1dhSSiyMIgwn4zCUe/hU7cUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUGFdj2bt3738GBoanQLwAiJtYrKysGH79+iX99OnT6mfPnjGzfPv2jYGRkZFBXFycASiYzPLv3z8GGACyRVn+//8PFwCx0VWQJfD37186aKGJGRgCsAD68+cPKIBeg1WAOC9fvgSpWMBy4cIFkIIXQLwMiGsAfrObQPFrrDEAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUCFtj2Hv8MsOLj78ZHr79QxK+/vw3KRgAe89HUPF0VZwAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiePHxN9PPP4xMDAwMTAz/gZgRiWbAjr/9+o9TDgsGCDAAAzMJ6g6yR1MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABpJREFUeNpifP/1D+OrT39Jwo/f/SEFAwQYAODeRsIBHh3QAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpi2nfi8vuvf5gYwGDQUwABBgCRZQVstXD5TQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiev/1z74Tl5kYwGDQUwABBgCS+gVsJvl2BwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpinrNoJROvgAgTAwMDE8N/IGZEohmw4x+//+OUw4IBAgwAAtMHPgLjCOMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiXLdl97t375gYwGDQUwABBgBZowUZrYKqmQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpinLNopZCQMBMDGAx6CiDAAH9oAlBHNVNpAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpi2Hfi8osPv5kYwGDQUwABBgCHXwVdauGiRQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpievHh174Tl5kYwGDQUwABBgCJfwVeVOih6QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-resize-control.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAKCAYAAAB8OZQwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF1JREFUeNpUT0EOgCAM6/r/MzceoB/UoKEyJihNljVtRwNT3tQAn5T3zomGckO+YcFp1vWAwqPeUAQtRPyg0MCqLzk4/VqaPfDnlvPRRbeXqh5v1lHq/MB5VT0CDACNvzl3e/9MRwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAL1JREFUeNrEkrsKwkAQRWfDsF0kVYrd/7AwPyCKHytiuaUK/kZIQjrRKq+Ndwpb8wJdOGwzZ+7Msqrve5p72DnHuPdgA6IRzgNcwZmRfDDGbK21pLUeNOu6jrIs2+V5HnDXdUkcx9S2LTVNMygrpUjq0zRN2HsfosHkfcWTZJoji7Ncln1/L4s4Z2zx/jj20td+VVUVMvOkfcUL8FMuRVEQGtBnim9IndTDu0nyqSxLBms0XY0IfoI7OL4FGACS4bkP/RnUSQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMNJREFUeNrEkkEKgzAQRdMkZO9CDHizrgpeotDS0t6j4Kq38DiVSHUZRImxfwrtsmpcNPAYGOblEzKbcRxZ6JFFUSjUE9iBdIbzADm4SiRfkiTZa62ZUmrS7Ps+NcYcqqoSchiGLIoi1rYts9ZOypxzRvNlWWbSex93XTf7nQh7V/Io+dtYcsj5s+ycC5NJDEkmb13yahl/Fiw/sXKxEGKRSB5H6q2ua9rZT/MnNEfz8HJKPjdNo8AWl+oZwQbcwfElwADuQbxR1tcjhAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUpJREFUeNqckj1Lw1AUhk/Sq7WU2LpYKRQHPyq4OEiHdhdRHF39Qf4aRZyEDoIVhYLgorgoNv0wFNRU0/Tek3hOanQItE0vPFwI75M3595ovu/DtEscn9QE7ftEmchO4LwTNeJceJ53sFZY2i0u5yGVnB1rOu4g+/jS3Ht6besCESuLuRy0HAD15Y7/VF0Dzj88mxWWjQ+X51YTzYkEV7AnFCpg4i52BCoFUsWX2RNKIUiJwYP65UXeapkZTYuG+UoLK8Xu5nb5LWgmj+T/5vv6zUbX6qzqCRFtkgPo2fbd+lbpVw6aJckyCKQzCzBjEHOpiOx+9yCZNv6y7A2b5bB55/CoSlt11KxhVoUzM7FPm2dGnPK0MWhWtuv2jYQQsa6JPZ3+lKu22YC+04dwhFFwjvPkXQv08MzqNAVRopfOT1D8SdwSpz8CDAB8Kd6AIP4Z1gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqcks9Kw0AQxifJJiaiVMFotBWLXjx59OSTeBJ8CUFR9Og7CD159im8exFUBBWqpkFaa5Q2+yfObKM95JCkAx9Zlu+Xb2d2jTRNYdJi51fXDn6PUXuoegmmjWqhzphS6nRtce6guTQPrs0KyQEX9aewe/jc6VlMSrnvTTlw/9YFLmQhbDMLap4DxBHsh724dJ/oh8Ewoa/PhBR6o2oRx6QQelG1iGMC++Rc6Y2Xxzv4/IjAMIycma7UX25AsNocJSOH8Dj54fYGwtc2mFZ+6pInsLEZw8JKI4N1MtcLKm+mBsH6LNiul4OHPzE47vS/l7hRcnZFW9s7xYPKvOKvZzHJtKlnKcfJlaYtdbKIuEh80zRLg/ik6diRiQ/kot+PIUnoBKpQ5CM/ci0mlTyJv78c1C7+NCgR/I66RB39CjAAFHjbsmAj4HkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUZJREFUeNqckrFKw1AUhk+Sa2wFcaoNLVUpFTs5uugDODo7CX0JQVF09B2ETs4+hAhuOggWO1Q0bUpxENQkvfcknpMYHSom6b38BA7/l//+N9HCMIRplzi7vDbpeUTaI1UzMDapTToVQRCcrNas/bXlChRnzVTS9cfVzlP/4PHZMQQithbLZRi4AOrDTz+qrgH7H3p2i+HSm8+9VaaeSOII5oRCBay8ixmBSoFU+WHmhFIIUmI06N7fwutwANof5pB2ZakOtUYzTiaO4N/ku5sr6HU7oBtiMkmOYX1jE6yVxjccJUuCZTQozC+AVW/CTKE4Afuf7zSf+/EyFyfLOHlreye1a+JVSWdW7tvmzohT3jZGyWrk+17JECLXZ2JOpz/l3LFfwHM9SCr8J/axn7i2wACPR8O+Sdqll1oZgh3SBenwS4ABALu11aydNvk+AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiFJREFUeNqUU1trE0EYPU0n5tLdtcYmaVPabCNaQdOElJbSkL5Ia7F4Af+RbyooBEHQCl4exBfxgljwRSSxoC8WqmJTqmJra6u0SchlszO7zuya1kIa9IPzsN98Z853hrMtpmnif8oX7ve1tJLzJqO3yaVHrwnvTXGMcrQ3IzJGoR5P0M2tLVIrFZ3EMIzTh3s6J/vDIXhc+5qqptNpVEHI/u4I/EqbRBhjyUAwiNUKQEvansS3mZd4/moWSpeKvt5uxAbiAQcny3nNhFajYJQ1xMqXz3hw7w4kfwiSLOPsmXPgG8uEch8Ce1WtpuHWtSsgykEQdxumTk5AUhSL42CUQv+DG5cvoJDPb38L3J++joJuwiW3YzAWhRqJWH3Bc1C+lq4zrK+u4f38PKavXoSm6VYv82IGHz4twHvAj4C/A6PJlNUXEDxOthV+/VyH3BnGRr6Ih3dv4utSDjPPnkDq6ILL7cHE+DgMnon6RoJHKOUqHCE1ghOTp5DJZvFxIYfc4iI8viD36cVYKgmvJFlz9RI8Yinr9oMdPRZFuVLFu7k5gAfP4XTiyKE+9PSq2zM7ZEvZ3r9eA/EEyuUKlr4tQ/G6MTg0sut8h8xAROSEh78rMTSMSrmEaCxu+TQobRhVsXZR06pyKyG7DkdSY7ZCgwww+8GKImHZtZVlVLnXuoVmEHNinvNmCTPY040f3wnHML9U+Ye/ssDxhuPxbwEGAExxWB6CMBpMAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhNJREFUeNqUk01rE1EUht9O70ySaRMT7CQTU2tiYiwxftdU0F/iRsW1exeidNOF/gFRChVEwYJBUIKgWwMiFqwgilgCtUmIbdIkte3MvRPPnWpDqY164YW555znfHDP9N1+WsT/nMmrF0f6+tmtjuCXmeM4GtlukC6RYr1AITji2VNWvdHQrNWWV8ITB8LBa/FICF6V9ax6994U1sG0PbGDMAIDBhNCXPF5NHwu12FzsSv4YfYtXr2ZRSAax7BpYGwsd0jCRrXR7lnxe7WMF4UCBsMx6LqO82fH8cMSBuM0ByXYFbRtC/nHj6AFDTDvAM6dPuEmaK7VoQjOIRNIzUzfQbvd2rpLFfIzWIMKjz+I0cR+RPeZrl1yCqc5bdvBUm0JX+dLePLgPqwN7treFV9j/lsFeshAKODH0cwR1y4lOYI3KzQay/CbI1gh8OXzPMoLJRQJHhyKQtM8yJ08BgedblfEMc5t9yMcjeFMbhzvP35CabGKhcVn8O01aU4dxzNpeH0+N+73kRxzK/96ong8gXXLxpd+eu8OoKgqhiNDiIQjWzFd2K0sqI2uI5VMugkqyyvQVQWj6fQ2fxcWYELwHVkPp1LYmJtDMpGA43RI4o+rKtuu2dwyFEXZ5sxmM5tBDt8B0krLtmsKLchUs9mGZckOnL9Kxsl44qaZcMTN9mpLI12gpOY//JUV0kPS9Z8CDACMI0E9p2np0QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgtJREFUKFOV0V9Ik1EYBvBzNeiyLrsYddGoJYmmIkl0oYktikzFnLN0xpJBXxYtmqE2dY7JliuGRovQTc3J1FolbWGpodUMYQ2K/tk/MRwEFXkRXTyd98A+GOKyix8f3/s+z+HAYQDY/1ivVCk3bFYP8u86Zh+dVnBt3AKHVNoDk8jQHPm9aVcRNqbn3WK24ce2QOQtYkvLePf9T0pSixPbNDqklxlRUGuaZm1DE/GpTz8R/riMsflfq7J472JLQSl2Vp1F6YVOtPofxZnl5jjuvPmRkudhDOq9ZciokLDHaIHv2QdQjzX2hTD66tuq/NFF5B6uwY6SOmTXmNFx+4mYU4819NzDUGxJ2Kc/hd6n8/I/OXSyEeoD1ciuPo8614A8px47dz2I/rlFuMNRKHPysbv8BHzPF8RMutQLVWE5so6asN/kgHf2i5gT6rEzV0fQE/kMy8ADbD+ox9YiLYqlZvEsqvwSZGrrkWdowmV+OOUSqMcktx+emfeC1BVAZuVpcUCaplI8SY6+AWZfSM7IWd5jRlc/uiZfy447+8Q1s6pMoqizepL2CdRjBocXV8ZfJtG2epBraEZhvQ2d4diKPaEeq7XfgDP0IonjfhTFZheaBidW7BKox45Zr8XbgxHYx+bWjPLUY7qWbpvUPQLL8Ayswdl/ohzlea+DVVx0Kzgn95XDGlCO8oq/2QGjSdgwyFQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK9JREFUKJHFkjEKwyAUhuUNuUED0ms4eZ0eo4VS6NwbFHoRz+CQKwRSyewQiJr3l3Rr0dShw4cSvk/lEUopiV8hY0zDXJmeSQX0q98Qn3CRUh6VUnuttcgBDz46CiEc2rYV8zwL730WePDRUYxxx5vXR6w53h46Kgm+UR/jKVupj0sH9Wlwf3x27bTHaZo2Ras/4g+7D8MgSg+AB5+7B24+O+duXdc9rbUiBzz43J0WHcymW5LxdgkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUCFtj6tpwjCnYwZTpzodfTP/+/Qfif0x/gRhM/wWx/0JoOBvGB9JoapD1gsy6eu4kADbzQ5rojOveAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUeNpi6NpwbCbD3Q+/ZzLd+fCLgenfv/8g4h8D018QAWH9BXP/wlhIXITYX6gONMVoRoGNv3ruJANAgAEAzhtGyJPGg6AAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKZJREFUeNpi7NpwjIWBgcEbiK2AWIDl379/vqqyEh7qcpIMnOxsDCz///+3FpcQZ3j5k5Hhz/dfDCAVvJ9/MwJV/2MAAZAAAwjDAFjgL7oAmoq/DH//IgmAOH+BggRU/EU3A1nL378gLX/R3IFqBpoKiLX4HAbxC4Yt+D2HaigTUODz71+/GGAqQQJHXz57yvDrJ0jwPziQN7999ZwFiM2AOvgAAgwA2zedN71ws+cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKdJREFUeNqUkD0KAjEQRr9IWuv1Lt7QG+wttBA8wYoWdhaiNlqsCxbLWsgmmYkZ/4hxQQx8EF7ezCRRo3GRA6hDipCp2tc2v7YGm0OJ7fE06+1qg6pVyAYZvPdDzexhJFBg5n4AjNeSvaYUfBsUA5ISegM57DAi8DCikqcR96C0B3cZzL/Gfkzh9B6EP55Pzgm43L/QWYtzVQqY6/VqIUITsgyZ3AQYACwxo+jE5WFHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjCquZyKRtbM7ExMjEBCWYmMEkkGYGsZmhNIgPZYNomDiSGmS9qkJsTGv2nQIA4IwFK30tWVsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJhJREFUGJVjDKuZyMbAwFAHxAlALM3CxMTUKCQqXiEsLsHAwsrGwMLIyJgsJinDwMzCwgACIBWirGysDDAAEmAAYRQBZnQBFBXMzMwMzMwYWpiRBdBUgDjMmGYwo5nBjF8FM6otYENR3YHVWnwOI+h9IJ/pNS8w9FhZmBmgqpnmvnr1kkGKi4FBVQgSyPV3nrxkA+IooA4JAD9CEUzrpwlHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUGNONjzsOgWEURM+d+fwRpYTEo1UpFXZiA5ZBZQd2oFJZgwXYh8RPWIBHqET8nrecnMyZG4Px9AqsgRkwSd1en/Pp2Nrnm9Fhl1sKkWVl6o02ETFMUgCgrISkWpLE/SSRXAxeCT8C2yTLnwnJz6W2SLYLHX6x+JvFxR3vtf5B/Pe+FZS5IGmnTjWjWYHtNkfSLC2WK4ANMI+I8Q10tBpanttAIQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKNJREFUGFdj6dpwjI2BgaEOiBOAWJrl379/jaqyEhXqcpIMnOxsDCz///9PFpcQZ3j5k5Hhz/dfDCAVop9/MwJV/2MAAZAAAwjDAFjgL7oAmoq/DH//IgmAOH+BggRU/EU3A1nL378gLShm/EM3A00FxFp8DoP4BcMW/J7D9P7r379+iTKzsMAF5r589rRCRFySgYWVFRzI9W9fPWcD4iigAgkAAWSTEqdsRP0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKBJREFUGNOVjzsKwlAQRc+TtwWJ+3MbVlbiKlJZuwrBxs5C1EaRJGiRTvKZ+yz88IyCOOXhzL0zbjpfBOAEpMDY7csmXKuazSFje8wnvV1ZU1SOZJAQQhh6KVArUOOQ1PeSeI4kvHXBp2ExMLzJXsDsqxGBuxGtPIw4w7oZ+mZIv2rfWtS9w/jjfWtbJJ29FGibhkuRISn169USIAdmwOgGxHqjvh+HJ8QAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAIAAAAL5hHIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCB1j7u/vZ87JyWEuKioC44SEBABISgbNtp1KFwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpi7O/vn8mkoqLCwCQhIcHAxMPDw8D05csXBoAAAwBIogYEjN3jQgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUeNpirKysFODm5o5iY2PTZWFhYWIRFhZOAGJNXl5eBqAgA4uQkJCSuLg4Az8/PwMrKysDEzs7+z0uLi4GHh4eMGb6+fPnom/fvl398uULAwgDBBgAx68Ss6bQhHIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi7Ovrm/n3799/P3/+vPz169dlLCoqKgy/fv1i+vz5s/7bt285WSQkJBh+//7NwMXFxQAESiw8PDxggT9//jCws7PfY/ny5QtY4Nu3b1eB5iwBCDAA1UAuSStF1W0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUCB1jrKyslObm5p7GxsbmzcLCwszY09OzS1hY2JWXl5cBKMjAOG/evM8SEhI8/Pz8DKysrAyMS5cu3SUtLe0qKCgIEQCqkAOqmAlU4QFSAQDMoQ//dMukywAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFVJREFUCB1FyjEKwCAMQNHktIUexsMECl27egBvENBB0ASHRIotXfrHx8cQwrrfzOwYY+xIRMvdQVWh1nphjHHNOaH3DqUUx5TSB601YOb/EJEz57w9xYtAc8FdpUUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAwSURBVHjaYjAzM/vP9OvXLwYmBgYGBqb///8jE9jE8CvBawrzhw8fGBn+//8vBRgAxTY3eCgJOmQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAwSURBVHjaYjAzM2tg+vXrFwMTAwMDA9P///+RCWxi+JXgNYX5w4cPDAz////nBQwAi5c260232L8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACESURBVHjarI67CgIxEEXPzE4UH4RtLRYhZBs/QRv/v8yvpDSbsdpGBEH2lOdyuVeAlHO+j+M4qereVPUSY7wuyxJaa2jvPbh7cHcADKD3zooBrOlXoXzwu7KF+GN2i6dqZs3dX6sYUkrHWuvJzM4iMlBKOczzfDOzB/AUdxdgBwRA3gMATndJshnCq34AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACHSURBVHjarI4tDsJAFIS/bl5DENSjVtVwgBoMR+N0HGB1FVhE1SZs6RsMrQBBQjpuvmR+qq7rzu7+GIbh1vf9JZRSmKZp0zRNDCHsDUASQO3utb3NDFnArC8Q+NDvyBrgj9k1ni4dkkYze5ok3L3knK8xxjvAycyObdseUkrbStIOEDAC5TUAKxFgMuA5pPMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAzSURBVHjaYlBTU/vP9Pv3bwYmRkZGBiYGBgYoC0GgiWFTgl8HXIz5xYsXjAz///+XAgwAKVgKjcWlLqMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACGSURBVHjatJAxCsJQEETfrIsJCSkEBeF3gX8BW8HKG3gUwdoz5i5fm5BNYxorEX3lGwaGEXBOKV3btj0CnZvZoa7r0ziOTURg0zQ1QAMgCQOICBZ8ST4Xxht/qfxCfLPU3Z8R8ZCEJFZ9329LKbuqqvaS1gzDsMk5X9z9BtwVEQK619E2DwBfRh57l5xeoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACLSURBVHjatI4xCsJAEEXfDFMsAS9gs6TZA3gAz+YFPEquYKWHsLBMvxATi4QZGwWxEtHX/cf/8KWUEsAwjuOp7/u9zvPMsiyrlNJWVTcqIjxo3L3RZ4oIAOyl8aFQ3vjL5Bfim6cigogQEZOZ3QzA3a+11mPO+SzAzsymtm0vXdcdJCLWgAMTMNwHACs+L3xeMd7tAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACJSURBVHjarI4xCgIxFERfvh+LwC4RFKxDcgFbwcobeBTB2jPuVQLabPK3SiOCIPvKNwwzDrimlO4hhLOIDCoip3EcL7VWP88z0lrzZubNDAAFaK3RUYCefhXCB78ra4g/Ztd4Kqr6NrNXF5sY476UclDVo3NuyzRNu5zzTVUfwNOZmQMGwAOyDACRI0tKhkhIygAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACKSURBVHjarI49CgIxFIQn4VUL5gA2S65gkdKzeQGPkitY6SGEeIfAyhMCebONu4UWgux088H8uJQSzWyqtd5KKWffWkPvfRdCOHrvDwIAJAFgMLNB3maBWMGiL+Dxod+RLcAfs1s8XTtIqoi8hCTM7Kmq13Ec7w7ASUQ0xvjIOV8cyT0AA6AApnkA8SJiRCHFwrsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAA/SURBVHjaZIvBCYBAEMSGKfS0Fdu4fk6saR8TPwsK9wmEEI/jxFUlB2RAJmlNIkPkZA8ftoN/QGp97nUZmO8AYzNFSPGK8tYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAA8SURBVHjaZIuxCYBAAMTC9e7kJOooP/cXFwsFhW8CIYTjvEbmnKRKVGL7aluiJe0aPiyH/yA8CrCjbvcAE+tBokS7K5QAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACLSURBVHjapI5LDoJAEAWrhx7xdwEjYDIJG4+gmHj/JXeRBTLdbowLXBh1+SqpyhMgdd3lVDdNHWMsNYSw21fVAYjjOKJmFhGJ2QwABbDneAGfA3OfgTfF54r539HP4Ken/kU0qOo05Xx3wIEipbQehtumLJdbESno+37Vtu1RVc/AVdxdgAUQAXkMAA50T0Ivt9NcAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACVSURBVHjanI4xDsIwFEOd8CvEgOiKqBSWLO0JEAsnAY7CGXOEzIWpU0q+GVAlyIKoF0uWn+XF+XK9tV13qDf1PsY42JQSACx3TeOstVtREiBhjKlUtRKSAIDJhar41Bv5CsoGWSJaIDNGfweznvLf0QnIOY8i8hRVRc45Pe59dM71AHASkaP3vg0hrAzJNQACGAGk1wAfU2M6/egpmAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUeNpkjMEJACAMA5OM4Syiqzl4obYoWDCPcOEg6GO6zAyKQASiks4kLynpiVJFJPEX54X5DSy4e9sCDABELwjMR/gd5wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNqkkL0KQjEMRpO0OBQq3F4F50JBHV0FJ9/ARxGcfcY+jA79u4ku0kEvGEighy8HGgSA83a3v7pxPBKR1TwOg3On1prJOYOutRqGhgEgImiQkge86wWQCOATUA9k93uC+sRv6QwwQ9on8C8paa2fpZSH/Fhaee9XKaX10tqNUmoBMcYhhHDh5I037sjHFaPlNqKYBBgAFyshPM4kBT4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJRJREFUeNpitLGz///v37/P796+PXrj+rVepj9//jD8//+fV1BIyI6JicmIBUgwgAAjIyMXUCUXCyMDFPz/D6ZYGKEqYACuBS4A1EtABRO6CsKGEiFAhKHoKhgpNxTmW2BQfmNhYfkO1vLn9+8vTx4/OiIvL38TJNkAlClTVVUNvnTpkiAjMMSlgIL/gPgbEH8GCDAA2UIwblDGBeAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACgSURBVHjapI4xCsJAFAUn2Z9m0UbtjCEXSGNrtPIGOYr3ygUshICdYis5glpYKYTNXxuxiIWo5RuY4QmwzPP5apIksyiK+hKG4XQcxwvANk2DqKolCGyrCoAA6HO8gO8C9b4D3hTfVdT/Hf0Mfnrqv4mKyN217c0YYwEkTdPj5XyqBsNRbozpSVmWVVEUctjvNs45K1mWXeu6XgNbIHwMAL4rWK1r13/GAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACcSURBVHjanI4xCsJAFERn118FxNQaCGlN5wFyFPUOXsAL7RWsvISFzXaCsVFWCPw/FhLQNGKmGRjmDTNZb7Zc1vUun+VNjPHiu64DgOmiKBrv/UqMBEg45zIzy4QkAKB3oRk+9Ua+gmGDHCI2QEaM/g5GPeW/oz2gqklEnmJmUNXHrb0ey7I8OQB7EUlVVZ1DCAdHcg7AACQA99cA7LNl9l3/HpoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiEhUVPcOkoqJylklTU/Mei5yc3HumR48eCQIEGABLxgeqlrkYjQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiFhUVTWPW19eXYtLU1HzPJCcn951ZSUlJGSDAADTlBJ4jXpdLAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUeNokiEEKwCAMwGAtFqQWj4p7jN/rF/3BYIdd6mA4mbBADgkSUVhWRNwBYKKIVPk5nHMDY4ycUrpyzua9H7jiXHOWUm5mfkFVn9ZaMDPqvW+fAAMAgxAYEA9uUqQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUeNoMyjEKgCAUBmB7/mBQtjlEeAAHzxV4yo4SGLg1ifZCocYPvsEYs/feqbV2MfMhvfeb1roCmIUQK5xzdykFKaWJiBZYa5+cs6y1yn+8iDGOP6CU4hDC+QkwABcBJR2ZJ8maAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpiZGdnlwTiBhYWFgtmZuY/jKKiojP5+PhkgfgtGxvbDxYBAQEJILgvKSn5iouL6ycLkHMTKPhHWlr6PQ8Pz0/mzs7OT7du3ZL6+vUrz7dv31gBAgwAuQcYxkfD6eQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGNJREFUeNoAVQCq/wQVFRXN/f39BPz8/Mj5+fmAAy0tLTUNDQ3tBAQEGAAAADIEKSkp3fb29gfn5+fyAgICHAQdHR3v9PT0B/f39wcAAAD1AuPj4xHm5uYRBwcH8mpqaq0CDABLliXpqWUbNwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAADRUlEQVRIie2VS28bZRSGn5l4xhPHjY1jN4lrJZAUEhmDuKhkw4oKiajcsgB100WFEF2yYUPX5R+wqFDFIhuKAJWLCAgVIdQFEjtUoTqJExcsFF87GU/GM+PxZxYeOxPLUemmK470ro70nDPvd84Z+D8edkj/IS8Bsi8J6ALCV9fXA8H7wNCHV64sJU5MnVbD2nRYVZKO2665jl1uNOvbH12+nAe8QKH7wiUgtLq6Gj/7+puvLC08sZhJz5BMxEkk4jQaOrWGTumfPfI7m4Wb39z4YWNj4x7QGS4wNgp8/vzFmbOvnrvwwnPPTj+59DhuR1DfNyn+vYfd9hgf11iczxCdmEhEE6lcy3O3iltb9v3gY0Dk4ruX3l4583w8HJlgt1TGMC1sx6UjBLbjYpgW5brO5OQJpmIxRVEjUzd//H5zuPsgXALUS+9/8MzKypmnuiGVfeMAIcSxMg9adGWZ2GT0kWQqY/7+262y7z8AoQBcBtSTM7PLghCWZQ0SjVqN9WtX+fP2H2RzT3PhnfdIJJMAeJ6LqmpMzaSywG16D9zpA4NwRVXDKddzcV1voPVrV2nUKiwsLNCoVfj0k4+P5E3LQlHUJKAGmcOdj0kSmhAghDdImIZOOp1G0zRs26ZSqeB5h3khBF0k1bd5JBxAatm2Y9t2WJYPPyqby2HoOrIso2ka2WwO13WPwB2n1WZotIO2AHSb9f2GaZp4njfQ6mtrpDNzCCFIZ+Y4t/bWkbxpmpgN4x5DoxjsXACdnWL+r5OnZmdD6mHKtAWrb6wRjUQwLYu9Sg03YIth6BS287v0HnLktAig/e0X1+/MP7a0LMtyLBqNAuC5HjvFEqPCMAx2C9t73924vgm4QfioDZV1vdpMn5qfQ5JCiqIcO+e6rlOvVp2vv/rsl6au1wGL3iiOhHcB6tWqu13Il1PJ6biiqlGE6J2/bhfP83BaLQzD4O5Oofzl5+u/lkulMmAOdz58uCTfqnEgCsRefOnl048uLs/H4vFJRQmp7bbn7uu6USzcuXvr55+2AANoAi2G1v/Yq0hvISLAhF9MoTddAmj7sAPfCmcYfBx84H2gSH9B+j+Ljm+BywPe81FF+uqH4Ojf6OHHv8wPry1u2L4DAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABBlJREFUeNq0lctvG1UUxn8zY2emTtI2D5PEdWqnlEo0RKVVoVWRKCAhxCNFVBEPIYHEsgv+ADbddNdtF4CQWCAQSLBgA0tQQYi2Saw09EHVUidxEtuJk9SP8dh3xsPmjDtJG2DDlY6ujo7ud8/57rnf0Xzf5/9akfe/+WO7mCamA0bI98U8oBXyHwTfBlSXWBQwgQ7xdQF0gSbQAJT4ra2XbAUPQDuAGNAJdMluSgWegNaAquy2XBZc8gC4LpnuAHYCvWJ9wC6JB6sF3ANKYutAGahLJa0weJBxDOgBBoEhoE/LZsa09aUxnGqKppOkw8phdc35PYlZP314FtgNLElVCDUK8MPglmSYANJU1wa49tO7YyNDh8eeOkFqb5LhZIKF3FJ6bj6Xnr124+TVS99lGH3+S7p6TXkrT6jxAM84NHFGE467JeO0vzq/r5X54aPxF55Jn3r1JUwrRtVpkM3l8TWNeH8/x44+SQfe0M2LPx7X+pIZzez0AEdMAS3j0MQZQ3juBZK0vEH38vcfTrz24sCjBw6QXcxTrtk4jSatVgun0aRcsymWNkgOJ+ndGTNvXvolbuwdux566Abg6kKJKZn3qhu/Hj1ycH9qV98jFFZKuK67rRVWSgwkhjnyWPKwun7xqDx+t+DpwQcx5TG7VP7O0/GBAWq2jVIKpRSF/DLnz53lg7ff4Py5sxTyy+1YzbZJJJOo5dvH5c06hWZDD3WKCaCq6+moabUPK6X44rOPWVspMDIywtpKgc8/ubAp7msGqraRkuawpKX1cLfoAK7jdBtGBKXcdlNXyxskEgksy6LRaFAoFjfFdd3AdZyYuEaAFQl9ihaA5/uVSqXSbVlW+/Djo09Q3ljHMAxM0+TgwVGUUu14vV7H87HFDTRnk1Y0AOjozBaWlzaV/cqp0+wZTuF5HnuGU4yffnNTvJhfhuiOOQFvt2IkpBU2UIsMpidv3741Fh8cvE+L4/Py66fpisWo2jb54irKvU/LrT9vEk3s/10koSY64wWZN4AKUOo5Nn45O7+4cG1mBle5uMqlXne4O5dj9sYt7s7lqNeddmxmapJc6V6m5/j4pOhMRfBaAXhTFG5VMyIb/Sff+nR6erKcmbqCct1tLTN1hatXZ8rx5975SoBXBacZ/NCw5PoA0d1xYqnRqezkz/HS0vyQoetEIlF0XcexbQrLi8xMTzJfLGX2jJ+5YMaHl4AFoCjq2ARa2ntfz4ZVsTOkigmgt3Dx2yOVv2ZOqOpG2ndVtxaJVqJdu7Pd+w79NvDsxLRkvAgURHrtQBUD8O30vD+k51vXvRAVa/+k50GvK6HGlZYqAytSkRWaRI50RUU4/tdJFL7Ak70uF5hSlRYaBg2x5n+doWyZ7EEFxkPGnBf62Q+d/n8PAPiyIDwt8vw5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAKQWlDQ1BJQ0MgUHJvZmlsZQAAeAGdlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/ul8iYiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD00lEQVRIDdVUX2hTZxQ/Sc29N7G1bdKKjda2SKRNa0mZQ18qooXS4SwWN0TFPbiHMZQN9jK2PW6DPQ3ZHhwIgr4ogjZatQXng30XdIWqUVttMU2bJjc3/+7NTZP9zm1yk7tWEMSHHfjd737fOef3ne9853y2YrFIH0rsH4qYef+/5BvelhYbBDpGDcB2DJ7zJeVLWOE5C8Y1YltvHbycLiaTfvz51+HGhqZBUZR6BcHRmcvpTzRNfRyXoxO//PRDEDYqkAdPAaNF1pCXiKWh4eH2g4OHznX5fAPbvC3kcTeQp7GBluMyLcdkmn8TpulQ6N7fE2Pf3A0GZ8Cq/XcDS1rKxCe+ON23t39fcHeg19PRtp3iiRSFo3F6/jpMG10S1Tqd9FFgF7kb6wdEQXgAv4E7o6NPMVo2MMmh4Hw6nE6nu2/3ngsf9wU8gtNF/zzjoCoiKylizEeWcJJ66tvV40kqyu8gPwarOGh0nMC4g+pS5H/n6a+/Pb7Tt6MzreUpsrRM+Xz+rWC9hivt9vv3n/3u+5PsD3CQhpiRY8b/tZ7mpiNFWw2lM5lVC3xjy1G6dOE8TU89pq6eXjr15Vfk9jQZel3XSRBEcjc3H8XCFYAvWGNldeRM7hJEya/BgZ3KuAzi2FKEOjo6jPHiX3+aOrZJZrLkEMRO+G8EzIDNHyxyPYuowk2FQpEKBS7lVUkpMnm9XpIkiTRNo8jiIsgr+tUU22phLQDMY0g1OefKrqrZpKqqdTU1pg11dfeQIseJ10RRJL+/24i8xEErKyvYVE1jzk5mzqvTwjdcSMTkF+l02nLsTw6P0NbWNoOEx09HPrfo2V6JJ7isjI7FaEh15KzQZl+GJrds9QY2OCqqlFqkoeERqnW5KIWLXliMko4qKksiIdOL0NP7mOcA5jGkwrD6XmRuj14Ltu3wHUHut9XV1RlGeeR35tV8ycU6KIpCM89Dj8ZuXL0FDafG3LU6LbyYQl0vjo/d+G0hvJCMxWJGhBzlemB9ZCGSHB+7fg6+S+wP6IAh5ttS6lC+bTewfXNLS2Do8GdnWtvae1xod4cgkN1uRxUVSM/lKJPN0tyr2anxm9f/iITnH8JnDogDZoea5FgkbMAnkQDeoAVo7T8wONTu29m/qb6hVXAIrpyeyygJeW429Gxy8v7EHdgw6RuAiS1vi4UcyuoNOOHchs0Ab1ZuEE4f5zYGcCqigAJYiDGnNeTGYuU957eCSblBRIBPxu82tzfnlzfJAu/2nsPQkNIdcENwRTmAcoNwP3C58cXxKfgRNF5B/Ftk3cgtFu8x+Rc1XeEgwmSoOwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAa5JREFUeNrcUstqwlAQneTG2DyaaCKUrmxtRDdC6T/5JX6BK7eu3Ll36Qf4C0LWIlQkouZlz4RckRZai6t24HCTO3NmzswdhYh6juN4qqqmQKJpWgzwmQKZECLHfY44yrJMTdNUABpQ0fjydDopjMtvRp7nirTyX2UgiUBotSDDBJw5oEpwEHMAkon5jquCrOm6fq+VlwLSsk/Egsx+PlkFV2S5gG5Z1mNBtm1bj6KIykpMOJWKimplOyxXS5KkijmYwEvhaLfbAX50OHXOKk8OlDgej3dxHBtIYtVqtR5oKjf+0Gq13hqNhgNntNvtlFK+QFXur1ImrBqG4fi+34M6F36SAyNUtpvN5mu9Xg9Xq9X7druNWS23YZpmxXVdH0N6RkJupeCcydLQ/xOCnzgA1ejylCRpKt1gf5T8ZWB4U8KkeSnOQ2JgiD+Tu90u9ft9frrz3eFwoMFgQHjC72Uvl0sKw5C3jjqdDgVBQIvFgtbr9XU9TyaTQrbnebTf72k6nV4/sM1mQ6PRiLDPNBwOC9lXDUzabDYj7DHN5/PfPxVPeDwe/8cNu4n8IcAA4WwjSMEpNj8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNrcUr1qwlAUPkluYjQlUIsVO0iHBMG1L1A6lK7t5tZnEB/CydXF1QdwanHq4EvoUHATHQQxNTZ//c5tIkKhtTi1Bz7uveee7/x89ypE1LBt21FV1QfehBAewKsPvGuaFsAfIY6iKBJhGBqACeQFO5MkURnYKtmeEcexqigKA8dEwVkDBJIYgC3JMAOXIaBl4CCQ4pTIiQk+HRVzIJrAhUidObQWIEgHBAeBFDGZ73nlLrgiyBZwAveVJJumafm+n6SVeD4mJWli8TlZwu3mgyCw4TuDHreSXKlU7qbT6TMuOYggkpp2kEuTKVwV5wJwahhGg0eTZARfVqvV+8Vi8bRer7l1HsMHMeTiqQ4G4s7R5QP2ZS6SCUYILpdKpUfLsl5Wq9XrZrPx+HVYMF3XC6jmgnyDyjyD5OzImSHzNQKvOQit0v7K2DeVjrA/Sv4iGIvjeZ5UNBOJARF/JtfrdWo2m/z2Ox9+H7VaLZrNZt+3PR6PaTKZkOu6VKvVyHEcGo1GNJ/PD5u51+vJVovFohyh3+8fLthyuaROp0Pb7Zba7Tbhtx0mWGaDwYDwXWk4HP7+qbjtbrf7H3/YUeQPAQYATq8uCgYHvXQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc1JREFUeNrcUrtOAkEUvbs7LI9dlleUxAYLCDRU/gCxMLbaGRsbvoQvoKKloqOWcj+AX8AQSgIJISDLPj133SVGE8VQ6SQnM3PnnnvPnBmJiB4Mw6jKsmwBr0KILcCzBdiKojiIe8gjz/OE67oqkALSgoNBEMgMLKV4zfB9X5YkiYFtIGGvAAJFVOQaIRlDxaELKDE4CSQ/InJhQiyBjkmQU6qqXogomIQ0B0kJQHASSB6T+ZxnVsEdQdYAXdO0q5Cs67q22WyCqBPfj0lBVFi83yxguWnHcQz4UAJuQjm1Wu0WGx2HOqpmo1nnRCAL5Pb7fcG27SKKnOXz+UfQlLAzXL1sNpt3s9nseblcsnS+hgUVLjePfFAzmcx5Lpe7R6wMRRQbRuhcrlQqT4VCwZzP5y/r9XrLr8OGgZQBqQaTrpnECJvSp4H7t5Db4gTIp49zTIqHTCeMP0r+YhjelOA0/4qDSQyY+DO50WhQu93mpzvELMuiTqdDeMLvZU8mE5pOp/zrqF6vU7VapfF4TIvF4rg7DwaDUHaxWKTdbkfD4fB4w1arFfV6PcJ/pm63G8o+yrB4jEYjKpVKZJrm75+KHe73+//xh51EfhNgACA6JNNWltjcAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYGBg4GD09/f/z/T+/XsGpn///kGJv3//IrPQuAh1YOLXr18MAAEGAHdlKH321oJgAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARFJREFUeNqEkj1ug0AQhfcvFhC0yLJA2FKKKAUlHUVKUDq3LtK78BmS2r0Ln8c+gC+RLj0U/C+ZsUDCgOORnnal/fTm7c7SpmkIpZQMirbiINbuiSDjwkMeBMHKtu1vzvkazJZXh4Ezgk9RFG00TTsURbEAEWSG8BUMw3ALbseyLElVVbfZWhhp4fu+5zjOJU1TTSk1yid6F5qZprlDEF2nSvSzQpcPBLuM/8LQ+nWY8x7MAVR1XT+EsZo8z39g9e7BrF3x6irLsjO+ArpPqXs67GBKKd9c1z0xxuQj5yKO498kSb667Nilr5uhgAzQHAazNgxjjx3wqPsOo3GDnkFS1/UXy7I+hRDv+JFAzp8AAwCqDI1JAuEnqwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASVJREFUeNqMkT9KxUAQxmdf1iAWqQU7+1whBC8QSO0BLCwFL+AJvIGNlQQClhIs7HMDyxiIGpH8N9n4zXP3WbxncOCD2Z3ffju7I4hon35jhiZIcR6GIa8piqJ1UQRBMG/IeX6ZpinKsuwqTdM3Poi6iuP4B/Y8bwMLIci2bVbetu15kiT32P7SN9FKKUVGcCVAVNf1oWVZd77vn4LZY24LNhqGgbquIynlteu6x+AsvnjFbrukDxw4jnOm3YVkp7+CD8D9BKnNS8kuS4FHH5m+/wOTfuByGxx93z+bfNGZXQE/6qnOi86ofWCaN2YwO2GMnaWqqrpomuaVf2IL1hA7vmOKl0VRPGC7hsZ1G/yXGsyhbBzHp7Isb9Frju1PqDM9fwswACNF1jCNRpSTAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNo8i7kRACAMw4xD2twxCPvvRghPKHChkwoDQKeZNd5NiognBlX15fy2Epv3AUZESZDuXtPqEWAAAbEUmbnlEr0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAENJREFUeNoUy8ENwCAMQ1HLIYJThuhW3X+GFlAaqdiHr3cxANwtIi6eLZrZqzx09yktaUufUjwPsKpMaczMLo1fgAEADawUxddyoEQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbhJREFUeNq0VFtqwlAQnTw0UbCISj+kO9D+dAVxCxZxEYJr6BIEt+EyXINfrS2p0HylKiHmdb09ExILJWkF7cAhgZmcc+fMnShEdE//GLplWY/XIDoej+Fms3l1HMdVVVUoinJk6EhcTC6E8Far1XMURb6maTGIBWtCSJ4lgA+pWq2WpeV6vc7JQ5DGAJOmxL8K4GTk+z71ej2ybbuwBvmP3W53YHIgAnmS2wNIlQWKwMSVSoUmkwlNp1Mqq3Nd95NJ2Ro+PT91Xf9GUQdsyWAwoNFoRN1u90RWFPv9nm1JGCBMsnf2P+1AZxt+BhMPh0PqdDrUaDSYhIrqssNE6JQJBQMdiFyAh1xo0WKxoPl8TtvtNh0uCkstQl7jQTPYdyaGyAkqn6wIy+WSxuMxzWYz8jyPyurq9boppVQgwKB0sJlIalO/33/665o2m820m6IIw/Ady/UCm3zDMA54RpiFyAXO2gPclNIcCO9M03QwihgdxdkWy3RBpCSt3W5b/HIBFAjcBEHgJklyugmZbaS1Wq1LBZjHqNVqt7x36CRAB7mOcpV/URYmBv6AObzFcWyjG+5I/RJgAC85tuyF4bVKAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcdJREFUeNq0lLtOAlEQhucsC1TEcGvgDWgIlc8Ale0GGl6A14DnwNYHUAtiYWJntNdY0GziskT2fvcf3Ni4J5K4nuTPwGH45razgog0+scjhsNhVgYoy7LDbrfb7Pf7V0VRQiFEBMVqmqZ/hoOhb7fb6yRJdpVKxQU4xHWMQMlJAeI4JlVVpXxd128ANwC3AHWhCPcJF6ZwAJkY7DgODQYDqY/neY+QCajFASCHg3AlSMqRVhCGITWbTVosFjQajWg+nxf62bb9BqDHwBzsw8ZoUwKlhQH4bjKZ0HQ6pV6v951t0fF9/wPAAPKRsZ9/jvMgqYre/fjTbDYjTdOo0+lQo9Ggw+FARX75fOxqtRrxk8NCBWz5ewKlhTNYr9e0Wq3INE2q1WoER+kMAKzzMLlwbgtnjjtWxFI4syJtNhsaj8e0XC7JsiyS+SH7M+yAwjt1XCy0hbMHnIMlot/v/7porVbrWI2kRQ+u694i0Hu9XjdhHcwi4CpO3gPDMKS/AXIO2BOqcSCP+89V5NstythkBXO6CILgEo92lH0dni1XEYlut5uV9F77QLuuYJ/RJhtw3o1QtNvtrMy3J7K/g7kH/IXn8CnAADDPYRM6gNQFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc5JREFUeNq0VM1KAmEUvTOOvyCpuHLtTvdt9Q1CcBH4BoLP0Dv4CG19gGoRLYRcRStXZSAuhKZJzSbnv3MmMYiZCrILh0/n3jn33nPnfoqIHMs/mtJoNIJ9EPm+v5rNZpfz+fxeVVVbURQHcDU4/kzued58PB6f2bb9lEgkTBDbeOwikferBHhRUqlUbPGTyeQcMTrIX0BqAg7zAsG3CVCZmKYptVpNptNpZAz8N8vl0iD5NsGG0gAe4KtMEAUSJ5NJ6Xa70uv1JC7OMIwHkL5RGlbPU9O0T0R1QEmazaa0222pVCo7sihbrVZLEFusHISb7W/qzy58jTJ8NRK3Wi0pl8uSz+dJIlFx22LW6NThl0OgA5787wHREg0GA+n3+7JYLMLhIjBWIvjTHCaHTd1ZOZIQDqHFVTYcDmU0Gkmn0wm7iYvL5XIH6/Va5U6Fi8XBonqQh0NW6vX6j4tWKBTCbqLMsqxrLNcFZHpMp9MGzlfMwmIXv94DfCmxPhAeZjKZW8ziFV2+UX9WTl8QBMo+NlktFotHuq6fIokTfBhna4VzKJVKJ3ggfwEsn81m6zh1JHlGB7u7TqlWq8E+b0/IdOU4ztB13TveR+8CDAA4ZHMC9dTxrwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcRJREFUeNq0VEtuwkAM9WQCoQRICK3aErWLSCBRpScox2CPOAg7rsAxWHMVVgguwEd0gYDM9DlNFhVJP4JasjyTxO95nj0RRPRK/2hmrVbztNYGu1LKbDabtu/7bSFE6RoEwnXdNwALrJlEYl2AWWEYvhiGcXMpgSyXy48AilCxwl7zwyiKCGTvlUrlHpGyfL/fk5SS8t6nLqvV6h2DwzWI4ggTu91OQz4yTbOWldhqtWixWMQkyMkncBynwcBwzeCpdNwTRIVTPGQlDodD6nQ6NJvNaL1eE/LjxDOCer3ucQUMnhIkTZeHw8HwPM/PIhgMBhQEAXW7XSoWizSfz1NpvzgUMCP1aUYCrhLJ1Ol0ijgpy3AyYgk59nq9uCfT6fR8TKEhg4lERwGiuOHcCEwT77PHD9/jPS2XSxqNRvEJMu8B65+MqE5kYv15bAUmzMo7wXa7pfF4TJPJ5PuLxkDphoETl+y2bd/mnaDf79Nms/n5JqNCvsECehtYy+PxWEA0Mb4u+vOUR7BarX73q0iBEXldgFuQrQSCdh74n/5FXDGAUgILujcgTQiJSjxmFxNw9dxky7IcVP2M6oN0hq9hHwIMAA2mcW+/QfMYAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc1JREFUeNq0VE1rwkAQnc0mJrFqFKEIllJKWwqV1J5KobdevXirP8WfIP4Pj+q/8SDVYy+iVgTTxCR9o/Fk0g+0A481cee9eTO7EUTUoH8MNZfLXYVhqAJaEAR6oVA4LRaLNSFE/hgC0jTNR6w+CBnBarVyF4vFG4Qv8d6EMB0CmU6nHxRF8UDusRAQwgkB74Zh2EmJrusS8n4WyGazdyBfswMk8BrwH3ASwp3Au7O4RNu2aTweb0Q4EgUsy7phYmDTIuxlKNFcPLi4j0tstVpUqVRoMBjQbDZLFFIRDtoh8SDZxXZPmELCp+M4H9yuuCiVSlQul6larVK/36dut0vYv3+KEC5IFECNyGXUsjXC830/ViCTyRAOwmZtNBq0XC6p1+vtC0gpecAKwOQCQvzsb5SkFEkOsIc0TaPRaETNZpOGw2H8PeDeR70LeAZiqyR4DnBnJTmYz+fUbrep0+l8f9G4mF1RIObh8jxSDMRtkoN6vU7T6fTnm4wKVZ4B+s2/dc/z0lhN2L+Amackgclk8rtPBYg1EGpYDeAEyKH6PNpTSyL/07cIFZsgSoHYBLKo+lrX9VcW4XN8sAC3hdsEnIP8GXg5RuW7+BJgAINQm2YEYuEWAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNq0VLFOwlAUve1rqW1py0AMAWOMsUZi0DgZEzdXRgad+BI2foHPYCT8CosEJgcSoLAgpa3nFlikFQ34kpvb19d3zr3nvFeJiN7oH4di2/ZVFEUKQg3DUCsWi6elUqkqSVLuGARC1/VH5ACAHOF8Pl+ORqP3fD5/ifc6iOmQEIZhPMiy7APcZyJEFAQBL35ks9m7tI2LxYKEEPsJLMu6BfiKOwAR55AX0EkE+SRFUc6SNrquS4PBICbBnnQCx3GuGRgRS4QOOGT2BdlHF/dJGxuNBpXLZer1ejSZTAj7Y82/f4cClQXMFZgI7mL9TZTBhs/ZbOYVCoVE8/g9DgNVKhXqdDrU7XbJ9/3dU4SxBIGMUDbgYiPZCsNnP5IGOiNIGOdarRZ7wiQ7BNCQDZYRDC6BiOcBT1RV5XkiAeuOdRoOh9RsNqnf7yffA9Z+o13IHkhrJol9wAlz0jrwPI9arRa12+2fLxoXsy0KwGwu+5HhME3zJq2Der1O0+l0/01GhQp7AL35WYNRBrKO43sBf57SCMbj8e9+FQBWAaginyBMhA3ZciCopoH/6V+EinUAZQCsIyzo7kKaV0iU43N8MAHLwlnTtHNU/YzqX7aX5BjjS4ABAEDnkWqhfTpFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZJJREFUeNrUlMtrwkAQxiePxiZ48FHTggUvvaZ49uTRiwgW8Spe/XuVHgslB0tTQoIk5rX9JiSQqqXYXuzCZJbZ+e1OJt9GIiJrOBw+ZVlGh5am6Rd/aDL9YVwgLISgIAh+B0uSRJPJhJIkOQ/m7o7HY5pOp9Tr9c6DW60WzWYz6na7tFqtvj39CI7jmBaLBXU6nXwTy7JoNBrl3/VHuN/v02AwoHq9TpqmUaPRoOVySaZpHsHqYWC9XtN8Pj+psH8gksuGj7odRdG767pvvu8H0PcVh3Rdv4bdybJ8cxJGYrLdbl9s23ag6xiJKcIZ5iIMQ99xnI9ms2kahvFQcmoBBpvN5hlJoaIoe4AMJwBzuMhRPM+zd7ud2263HxEyFDxu+QQshAD2gCNVVSP4BD5m4zlXgo1SHhCMC/Xd5zCEr2Mx4hPLZPgUvmoZ1llmAvqPa7WaphZ3l0tMi93zJJ6XUFk6r/FPgu86+NcSLptTNVFswiYqjeXcGNV7JSzKBJ5XQFEYlysBzLgaeAmvGn4KMABFtPy+67Pl0wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZRJREFUeNrslL9OwlAUxs9tSzHKAARSEnbioHQicWF2ZGpA4gN0553cfQM34+ykMTFG4mgbobS0va3fKcU/SKJoYhwk+fgup+d3enpuL4KIjkzTPEmShFYlpXznq1LoB58/CKdpSmEYfg8uFAo0GAyyYW0E8yQty6J+v0+tVmsz2DAMGg6H1Gw2aTQafR2O45hs26Z6vU7VapXa7Tb1er1sBp/CnU6Hut0ulUol0nWdyuVyVqzRaHyAxf8b9ouwtmafrzzPuwyCwMHebiM00TStAplY766FkRi4rnvmOM61EMJXFGWOsMQ6wVY9+L5/UywW91DkEPGtFxjg43g8Po2iyFFVdQJwBgUAY4hPhkCOjq4uoFscmmPEaiq+9jkJlR0AT4CnqD6Fz+AsH2vuJEReiCKsO6wPMhg/KrjosZDsITmAz+GsMFeE63Jx6BIPvpO1jSpzVl49hnNixACLn3uRJiQfEHiK9s+XMP9lZM/3VigQ50pe55ryIBXc/X4Jyzwh5buwuEWO5VoOTXIncBVynwUYAA6xEqaxcbksAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaZJREFUeNrslD1PwnAQxq8vKVIZKAgLA6uDjYyGiU0WQkLCYOJAWPle7n4DN+NsQqIxMcZgwoA0lNLy75vPYfEFNAZNjIMkD9fc/37X6/EUiYiOarXaSRRFtKowDN/FVcn0g88fhOM4Jtd1vwdLkkTNZpOCINgM5u02Gg1qtVpULpc3g3O5HLXbbSqVStTr9T69+xrs+z51Oh0qFAqLJqZpUr1eX/yuX8KVSoWq1SplMhnSNI2y2Sx1u10qFovre/l32C/C6mpCCHFlWdalbdtj+FtHyk6n0wa0L8vy7ocwCr3hcHg2GAyu4WsXhXN2Kq4jz/MeRqPRjWEYe7quHyK/9QIDfOz3+6coGiuKYgOcQR7AAArZD6jRJpPJheM4t/l8/hi5HQVfJhTgYAxgAniqquoUcYbIcnHNkwg0EjCMgEHu4L6DBQzjGzh0WCh2UOwhzhFZIpGPc54igv+dVCq1rSbv7pyVdA8QudBngMXP/VwmhfwngRijwfkSFjw6H74VGgSJote9xrxIGePfL+EwKYj5LiwekXOJlksLeRJEBY9qPQkwAH6xFG4uskBeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNqUUL1qwzAQ1vkfAu7YxU/Sx/BrZOnWtc+QN8iSsdCxe/HYLoVMBmGoQwZjE2PLxJbVO2GBKIU6go87Sd93d98BYyxK0/Rc13UspWTzPGuYnKKdm/9xHIWDYsznwnEoXX9Q863FWPHN9/3VQqUUm6bpXYurqtqFYdh5nrdWLJqm2ZNYZVl2EkJsgyBg/xWgrn3fP3ddx13zmOf5MUmSzyiKHpBwZxZDZMtn2bbtU1mWr3i9GDExFOc8R8IhjmPABW5c170HABJ9DcPwUhTFI1r8QG6LEPBrKrJBBWl7wRJNA4kYEdclSvjDFixwLOipLehJwfZ06/kRYABTY58KWRsFmgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpiZGBg4AgKCvr+7t07hn///sHx379/4TQyGyb/+/dvBoAAAwB0aihkcGml8AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARBJREFUeNqUkbtKxEAUhudkZieERSQIQSFWKSwt04gpxFha+QA+gtY+h4XPYGdlY+Mr2FsETGERMOR+Gf8ZRllWi90fPphJznfOZELsb8jiWMg+V2C26LWiNVEXcyCAtDj2nZZ6ywgmWhNFFEV7YRjeKqXO5nk+HseRdV331jTNa5ZlD1VVfaKuAi2tiIskSc49z7tv2/YQAtPiNE0MTQzYfxRFcZfn+Qvqv7j9JpGm6ZXruo8Qd/u+N8WYblhZ70gpL1GXlWX5rmUnjuN93/ef67qWwzD8Sv+hwzk/xZAnc6NBENzgmEt9zE1CRB6GXRsZnS70xE0DmQkhToyMHOmL2SZocPDzDxdsy0BefgswANTzkXd08tnFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNosyrsNACAMQ8F820gMwv67kQQwEsXpuTAT0YyIISKlqgnL3d+u3w0HP+puBslMQ+0KMACg5xR+0/xvkgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNoMyrENACAIBVEEiVYM4VbuP4OKQRJ/cXnNFSKaZjaY2UVko6WqBzq88KHER5kpqEZEg/0LMACqFRSole+PrAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiMDMz+8/069cvBiYGIGD6//8/MoFNDL8SvKYwf/jwgZERyJICCDAAxTs3eXOW1tsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiMjMz28/069cvBiYGIGD6//8/MoFNDL8SvKYwf/jwgZEByBIGCDAAqR83M1ta/ucAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYGBg2M8EJBjoQTADMSPz////HwMEGABruwTRxWVztwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIZJREFUeNpiZGBgkFZRUckTEBDQYWJi4mIBEmZ8fHz6f//+Zf/z5w8D079///j////PDsQMIMACIoCCDDAAFoDJYhVgYkADhLVQQ4AMa6nhUiYWFpafQIGfMAFmJSUlrs+fPwsBJYQYGRlZGS5dusSuqqpqBxSIACpIYITqZwNiLpAOgAADABBQSostyhMHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiNDMz2//v379vHz58uHLnzp1JLL9+/WJgZGTk4uPj02diYjJjYQCC////gyh2oEp+FigHJsgAF4ABDAEmBjRAWAs1BMiwlhouhZsBlPjJwsLyE6wCGHTfv337dllBQeEuSDIBKBOhqqpqd+nSJXZGoAphoOBfIP4GxL8AAgwAD0RdoB6ph54AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg+M8EJBjoQTADMSPD////pQACDACI0wRH0uIsCAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiiItP+M/069cvBqZ///8zMP0HE//+Qbn/QKz//0Hcf5gSCAJDx39kif8MDBAu85PHjxkZgLJSAAEGAGF5RJzjY1IbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpijotP2M/069cvBqZ///8zMP0HE//+Qbn/QKz//0Hcf5gSCAJDx39kif8MDBAu85PHjxmZgbKPAQIMAEa5RStdv6aRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg2M8EJBjoQTADMSPz////HwMEGABsqwTTd4K/0AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNJREFUeNqkTrEKAjEMTWpKqyCKq+dBh26Cg+vpZ4ij39yPObhiE1MQhzqIGngheXkvCQLAcRhOl13f7621CzLGxG3XHXTgcs5AzOwB0RVmqEE18bN5EdISLNIQbxZpLSx/L/1M/PSpfLHUENF0L2WqpopZCGE9juPKOb9BRAsppWWM8azKqwpuqBdQi7nCK/AhwACtz1AKJyXHLwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJVJREFUeNqcjjEKwkAURF/WDxHBExjYamtv4DmsTO5qThA9QdKJWirJsv9bSEDTiJlmYJg3zAKogADkwEUOZVXGGB9d257r+ujcMAwAq01RbJ1zQdQMzMiyLFfVpZgZAKOLqfKpN/IVTBtmU0QnyIzR38Gsp/bv6AiklHoR6UVVSSk977fryXvfAVQisg8h7JqmWb8GAJDqY/rl9HS9AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUeNpijItP2P/79+9vjx89unLkyOFVTL9+/WIAAi5pGRl9JiYmVZZ///8zMAAxIyMj+79//zhY/oMEGEBiEJrl/79/DMgAogVFAF3F///oWv6haSHDUMICZLn0P6mGwjT8/fv3JwsLy0+wFiDn+7u3by7Ly8s/BkkmAGUiVFVV7S5dusTLCLRFGBSkQPwDiL8DBBgApSFphTgm62sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg+M8EJBjoQTADMSPD////pQACDACI0wRH0uIsCAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJZJREFUeNpiZGBgcLGxsS2WlZOzZmVl5WVhYmIykpaRsQNKcP369YuB5d+/f1wMjIxcf//9YwABFhDxD8qBC/xHF/j3/z+aAIaW/+ha/v2n2FDCAmS59D8JhjKxsLB8//P37zeQJhBmVlRUFP327ZsoOzuHBCMjIxvDpUuXBFVVVYOBKsuAChoYgTYwAhm8oFAHGQEQYABQ6FDZFd6uyQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNpijotP+K+lrV0swC9g9+jRo5dMv379YgACXmkZGTsmJiYjln///zMwADEjIyPXv3//uFj+gwQYQGIQmuX/v38MyACiBUUAXcX//+ha/qFpIcNQwgJkufQ/iYYygTSA8J+/f7+xsLB8ZwJp+f3795c3r18dkpeXv8kIlGwAynxTVFS8u3bt2n2MQFukgIIgg74B8WeAAAMAKAhm4pQzrFgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiZGBgUAGCyQICAtZMTEy8LEDCg4+Pz+7v379cf/78YWD69++fyP///7mAmAEEWEAEUJABBsACMFmsAkwMaICwFmoIkGEtNVzKxMLC8h0o8A0mwKykpMT7+fNnSaCEBCMjIxvDpUuXOFVVVYOBAmVABQ2MUP0cQMwHMhMgwAC+qEtf0TB9pwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiUlNT+8/0+/dvBiZGRkYGJgYggLAQBJoYNiX4dcDFmF+8eMHI/P///1sAAQYAKxcLUpcjeNUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNJREFUeNpiUFNT+8+gqKj4n4mRkZGBiQEIICwEgSaGTQl+HXAx5hcvXjAy/v//XwogwAB2Swj9RrJOegAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiZGBgcJGWli7m5ua2BrJ5WZiYmIw4ODjs/vz5w/X//38Gpn///nEBZUCYgZGRkYEJxADJwAALTIZ4ASYGNEATLdQQIMelLCws34EB9A0kCMLMioqKot++fRNlZ2eXAAqwMVy6dElQVVU1GKiyDKijgRGoHGQALzSgmQACDABfaR58r+agPwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiVFNT+8/AwPD569evR58+fdrL9Pv3b4Y/f/7wcnBw2DExMRkxMTIyMkAB179//7iYYLz///+DaRYkFUQKMDGgAZpooYYAOS4FCYAwMIC+sbCwfAebAQy6Lx8+fDgkLy9/E8RvAMqUqaqqBl+6dEmQEahUCqQIiL+BogMgwAAPLi475A3jcQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiZGBgUJGWlp7Mzc1tDWTzsjAxMXlwcHDY/fnzh+v///8MTP/+/RMBynABMQMjIyMDE4gBkoEBFpgM8QJMDGiAJlqoIUCOS1lYWL4DA+gbSBCEmZWUlHi/fv0qyc7OLgEUYGO4dOkSp6qqajBQZRlQRwMjNDw5gJgPZCZAgAEAjMsekNnyoBIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiVFNT+8/AwPD569evR58+fZrL8vv3bwZGRkZeDg4OOyYmJg8mIIcBCrj+/fsnwgTj/f//H0yzIKkgUoCJAQ3QRAs1BMhxKUgAhIEB9I2FheU72Axg0H358OHDIQUFhYsg9Q1AmW+Kiop3165du40RqFQKKPgHiD8B8Q+AAAMAvLgsezVKBIMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiMTMz+//v37/PHz58OHrnzp1cll+/fjEwMjLy8vHx2TExMXmwMADB////QRQXUKUIC5QDE2SAC8AAhgATAxogrIUaAmRYSw2Xws0ASnxjYWH5DlYBDLov3759O6KgoHARJNkAlClTVVUNvnTpEicjUIUUUPAPEH8C4h8AAQYAaEheCvo+JpcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFiklEQVRYCc1XbUxbZRQ+pS1toYUKjPFZBQaDZAiMkC1blG1ZnCZiZsyS7YfGHy5GEx0xfmXRHyZmMWp0OmNi9Jf+cEaNZGPOIm5jGWS4sYEY+RCGq3x25avf7e2H53l3by0DBzKa7CRP7nvf3nuep+c957zvVUWjUbobLOluEAENmpUKUbHxswDE4z21DOXPRPg+LCPEV9xzwFcWctVyz8kCQKZl6J5/6dXNFktRg9FofDCqIkOyVlvO8xSUpH5VlHxut/u8zTZy8tMP3r3C0wGGxIgsJ+i2QliEIsDwxltH9uUWWg5nZ2XeZynIp7ycbFKr1ZRhTmceopm5eQqHwzQ+aSfb6BjZHdN/TYyNvvP2m69/wz/7GBKLQZSWtCWFxEVB/8T+Jyvqd+76orS0pKp8QwmZzWk0O++ieZeXIpEIef3400Qpeh0lJSVRuimF7kk30Tw/MzA0TAODQz1tZ8888/3xr/r4MT9jyegsEiKLwPobXnz58CNlFRWfb6mtTivIzyPb+BT5AkH+aXkz6JKpMDebxsYnqLOr2znY13fw4/ePnOY3EZ3wrUu1lBCISHm28ZVHKyurv6zfVqfxh6Lk8niXZ1/iCVNqCuk1KmrruBTq7e1+6rOj7zXzY14WgsSO2QIhck4YHt93oGbHQ3tObt9SZ3b7JQqFFrwTe3mlA41GTUa9lto7L82da7E2/PDt11f5XV98ziilR/KSoDLStj5Q/0nNpk3mWZePgkFJ5ALyYbWAD/iCT/gGB0Mrc/LwZk8QA3lseK7xtQMbyzZUSdwyUAWrJb/1PfiCT/gGB/MZ4vlFQ4uPRlFxUaNOb6CAXA2KyrW4BlgMfIOD/X3H8DO3qCJladAx9fufPrg7NyenMBSOUpiXIhGAb3CAC5wMcMdavCjXvPz8XUlqDUVYeSINHOBiDpSzhxFR9hohxJhqrOKuJCKRSCHgEFw38wTckiIEV12yXm9B20ZiJdLAAS5wMoQGRYjYU1SkSsHpBLmRSAMHuPiCdiHyNF6IWpQcR4MzOZE6cDYQbYFJsCwLhAhiKRT0SVLIhNAl0kRPYa54DiUiWIuw2+kZ8wf85Xo9qipxxhwELmZAMoo8iBcizc44BnxebzkfdhKngj0zB4GLh+LQBDKxPnzF0S5w/drQRQ/vsuEwN7MEwstCbCPDv4JT5o41NITId6blx46quq1TRpNxfaKWx+/3k8PhmPrFeuoCOBmiVyhLI4Tw5NwfPVeOZ2RkHkrWJvPt2pvL6SJwsOc5xiIhKG0c4+aszU3NxaXlDRqNpthkMvHU2pnL5aLJ8bERcLBXCAGn+LASOSIf25A4TsZU6+nmo/Ypu4dP5Gu28cEXfLacOvEhOGQuHKj/FcKTMJQRQuX4s//3yx1tPx+7YbeHWc0dn0ngA77gE77BIXPFWriSI+JLiDuqEpWJzvbzVq6cpO07dr+QkZlpMK5ymdy8HDPT0772c63HLl+8YGUBEwxEPhYNHtOCM6uYUKnQVrEPrGNYCu8t3rznsb2HsnPyLKkpqZSswz61vAUDAfJ4PWSfHLdZTzR99Pf1a/jgsjFuMG5/eIZ7+bQGMTjKZTDyGAXbdu5++P7q2r1paeYMvUEvBGFP0srNT5IksYdAgN/nJ6dzbua37q6mjrOtP/H7o4xxxgxDVIqSG3wvbFFEMCuLQSKj1+Ogm8VYz1hXUVlTVVJWXpuVnbOR9yQtL1kOzxMvwSTvIZLDPjkwPNjf1dd7tYen8e+RmMgJLAeqZGUfWPxgzFgQxKDfIzqoZbMMiEtlQKiSZ+jOIMKJC6QoT8DFQBT+/ycnvxSzuOhAEBIEogCM0fVEC+ArKgCfgWjbIAYwvvOPcHYSM1kQDirIn3jEC0GHjgdSQfSJmKP/GPwDy9LPcQuXXBoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-disabled-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFRElEQVRYCc2X309bZRjH3x5O20MppQxcS4GhtCsQGKg4R5YtccFEoxmJJku48kajF+7CJUvmhVcmxpiY7GbeGP+AXalhUYcbYYm4sMFcNjdYurIJg/JjFEo5lEN7OPh8X87pWgu0uJ1kT/L0/HrP8/30eZ/3x7FsbGyw58GE5wECDGKhIBYyvS2O+ANwnBv3kVq4pjtPNWW8oJRb8rXTAQxx8aOTp6sCAX/QWeKsI12rVbJXkjBLKWvzxJSSV+TxcHgs9MO5b6fptmpA5QPaEUSHKKJg4udfft1cU1179IXKcve+mhrm8+5loiCwPW43PWZsIRZjqqaxyMwcm5icZI/nF2PT01MDX31x5g49BtD6TjBbgmRkQezq7q7sfOOtrsD+em9joJ653S4Wi8ksJieYRsIJRQEHc0gSEwjM7XRQGyeLU5t74TAL3X8w03elt6fn/HnKGAcCT0535YBkQFg/PXUm0NTc3HWwvc1e4/OxicgcU5JJLpzvR7LZ2D7fXjYZibChG7fWRu/e7fnu7Ddhei9FngOzFQiK0PrxyVPB1lfb3zt66KCgqBqTE4l82ls+dzocTBIF9se1Ie32Xzd++v7c2RA1TBEJijptWcNXz4Z4/MQJT/OB1ncPtbcJC9QFcVnm3YCu2K3jXcRALMREbFIXda1cEP0BCtN+5EjnOy+3tEgLcYUlqSt2K/7f9oiBWIiJ2NAgL8qEycwIhqj4yWenW4JBvxeVoGnqU0M8gVIZYiI2NKBFbsxBmxOaTgYou/9Ff4eNRkBSKawo6Z2CLakmGWJDg14aIVdJmxduZkbE7g8+rPdUectUGvWYE0xxig0NaBFIemY3TgBk9VbXviQIIu8SujbNoAEtEjCG87oBwuuj1OX00qzE68I0CgQmDa6VUScGCDIiSjapTKQxr9K8YaZBA1rQJOflYYAgI4LFIlg5AtWHmYbo0IImTqGVBcKHGrIhmAxC4aFFlgOCmyyZWkupqmrH4mWmAQJamRpGRrAaasvyyrKiKHaJxrqZRhoMWtAk5ytxFshidH4+kaittNmM2+bgJGgBhdZWICBT/wmHJv37GxqdTqc5BHpUgDx6ODYFTfJ0seAx0qNeuXzxUXQhSiv+5qbnyTqx+1V3u3cRGxp9vb9MQFPXTo8aUKF4lNGbw3fK3eUdNtrYmGHxeJxBA1rk0OQZySwG0Cm9v/aE/A1NDaIolrtcLrr17AwQszPTi9CgqACBJjc+TrH80RXI1shXLvVeGJyfe5yUaVPzrBY+xELMS7/9PAgNXUvTtTenV7oJ43VCx8T9kZHIQP/v1+lFLfEUuzOjThADsRATsaFBnq4POk/XCN/N0t5gne4hK8tDgwNhorUcPtb5+p7yCmvJ/+ymFeqOhcVo6mp/3/Xha3+GEVvXyPq82HbzTI0d5GXVdXVVbx9/v8Pj8ZUV00YYG5tCLEmT1iqNkNnZyNLFCz8OTo2P44NriRzZyNk8bwWCRQiORamYvJTcdfjYm4G21tcaS8tKi6ViiVltBEQVZhM3Rxd2X6iyVFJhyirNnEvLq7duD9+72n8ZWYiTIxOr5IV9TlBDWhn5dy5gMKqw0UV2SuBNB17x+ANBX4XHVyGKlqISp4vPfityXFbVjfXobCQ6Fg5FRv++OUvtUZRwZAFdzuvCKFC6TltORtJP6EQH4p+cdAkg9Asc58gYQI0VEqMOQvjHEMXwhBsAWTVB97NsRxC0zMgOBCEMBwQA4Xw/QUeMOhQ7HDCAggMQScDzbS0viPGmDoRLAEHcOGaCGPORceQEeCmf/Qt/gODdNKcAsQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-disabled-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpilJSU5GNjY/NmYWFR+fPnz51fv35tZeHl5fUXEhJS5uDgYPjx44f6+/fv2VmAArKioqIMrKysDL9//2ZgZGSUZQKqeAzUzsDMzMwAokF8JqCWTUBz7vz7948BRAP56wECDACARibFW62AbgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpilJSUlGZjY5vGwsLi8efPnx2/fv3KYuHl5Z0vJCTkysHBwfDjxw+/9+/f87MABSxFRUUZWFlZGX7//s3AyMhoyQRUcRyonYGZmZkBRIP4TEAtKUBzdvz7948BRAP5cQABBgC1gCaMj8SIGAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiVlBQ+OXr6/vP399fC8h2//jx4wEmfn7+c9euXXP48uUL+9WrVx15eHjOM6WlpZX/+fOHa926dRNBdFZWVgnj////2RgYGOSBmA+IPwHxQ4AAAwBD7SPhd4irzgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpilpeX/x8cHPzD399fW0lJyeXdu3dHAAIMAExLCKH400byAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiUVBQqLW1tT0IpL89fPiQ89ChQ05M/Pz8z69du6bw5csX5qtXryry8PA8Z0pLS9vz588f1nXr1nmC6KysrF2M////Z2ZgYBAAYnYg/gnEHwACDABY9SRUSyy5EAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpilJeXb3B2dt4jJyf3/dGjR5x79+51AQgwAEsRCN8VvtvtAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHVJREFUeNpilJeX52NgYPAGYhUgvgPEWxkVFBTigAx+Tk7OV9+/fxcDsr+wAAl5GRmZ84KCgt/fv3//5fHjx8ZM////Z5aSkvqioqLyRVpa+itQERMTkGDg4uL6w8PD8xdoxB8QHyzIBJRjZmb+zwRRwwAQYACJUxySG2T8dAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG5JREFUeNpilJeXl2ZgYJgGxB5AvAOIs5gYGRkXALEmFxfXVhANxMuYgDL2MjIye1VUVG4A6T3///+3ZgISrFJSUi+Agi+kpaVfAhUxg1QyALX+5OHh+cnJyfkTxAcLMjEx/WdmZv4PokF8gAADANpxGPrplMnhAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwxJREFUeNrUVUtrE1EUnlcmM0nTTJqEtiqhFMF2I4gIShduVGhdCKJ/oS5ciOC/UARBLUpFpRYKFbvRNpQKilsfUBdpG4htbEyTNPPIc5J5XO8ZJmFM0jZddOGBw+Tm3vvdc7/znXNJhBBxVEYRR2hHCs40fpAk2TpH2k47HMbAo+FwZHvTGlQz+9yI7uvr498urjwSfN4rHEOH3AzF1nSzrurGrlwsL9+YuHRHFMWqfYjZhgKntCQVgLlnM3OXV2MbSiqVQhgAlUolVK/XrS+M4X+Yh3Ww3klxE7MFnOrv7/fOLryfXNuIm9lsFqmqiqrVKqpUKqhcLltfGMP/MA/rnr6avTY4OOhpHNDAZFo4Zs5dGBs4PXLycTAgkB6Ph9A0bc+Eeb1ea9/5s2dmBEE4lU6nNWcOnGqhIpGI9/bde1MBX4/L7XYThmE0o+jkMM9xHBEWfL6HU9MvAoGAxw6yTYp0MBjsDfX2jLEsS5im2bXDASG/7+LQ0JDgFImTFhpfU+BcNE9RlLWpWwMZcyzNw348zHYEZxiGJwlkXesw4NYBiCBdLhdn10MbuFUwGuYRuITouzVYr+k6wjegnZw7wa3KK1VUtVarcZDQbg3rnyhV1RpOsuGsVmd4hq7r1d/pTAxr+VAJxfontrbTq1i2ql2t7eB4kbww9+aBKBcMXIldAReLRSK9K1bnXk/fh/17gufz+UIum02sfPr8UpRkBBv30znMS7KCotHok0KhsLW5uQngeifOzWQyWcaVtv3l4/K8LObL4+MTtwZCGgc6xkogGhKFqsXlT+zsSurS0uLUzx/forlcbluSpIqT89aE6plMRqJpen31+1fzV3w9fvX6zcnI8WMjPR6OZTC4jsFx0uvJ1J+1D+/mn8uyHMPAcfxVHC3YlqfdtBz9HKhiR0dHA+Fw+ITf749g/Q9g78WRszjyOk58AfuOoihJiDgWi0kgmkbbbWJ2AG/2c+gVw8PDfp7nA1BgdoFYqsImJRIJxabin35+EHjrS8R0eIn0g14i8r99/f8KMABYnUshETxaoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA1VJREFUSMe1lWtIVFEQx5fMB2WSRmQFIhQVGQjSm5JIJFRIyzQypOiDYBBZmq0PqKwwM0W38LX4WB9pobuWpi5ppZTiquuT1LW1NM0KMqIH2Zdp5jZXdu1eti99+DGcmTn/e87cc+YoqvrfK2RYhDggSxFXZCWyiq0r+x04T1JDTtSRBTwQb8QXCUAOsvVlvwfnOUp9ZKGwPeLCk7Yjocg5JB0pRMrZprM/lPM8eJ69nDgF3JBNSBByEalAhpA5BCyYYz/F45FAZCPvwn6h+GJkOeKFhCPZSB8JFXeMQ07LIGQ1dMPN2nbB0pj8/CEjkoEc5g+4iCUSxZcg65BDSA4yXWGchuymXihpHQT90BQYJj+DafaXYGlMfopTHua/RjJ5x1QiJ1Hcjk/AXuQKMlbWNQmp2ueg6zZD38ef8GL6BzyZ+A6N498ES2PyU5zyKnqmgHeqRHZwee0U/KfXI5FIfVX/DKTp2qG2xwxP33yFOtMXWShe3WmCjPousUT3uKyepEviy5BtSDIymd86DOpmI9SNzoJu+JNNKK+guQfy20ZI3MQ/2AdxJvEViD/XGm7gNks7xuD+4Id5Cp4Ngd/xaFjrvUuwNLaM3+00C/N49SpkP+mSuDsSglRSMLGkATSGSfxR7+bZFxENG/zDwSv4lGD3HI2yims6JyBJ0yiKV/BlcyfxNcgRpIaC5/O0UILilmwJioStJ+JhZ9QlwW4OiLCKF6N4bL5OFK/my7X6r5XH5msht20U1O3meQLPXhOEd0dfFeyBMylW8dzWEYgt0Emu3KrmyWV6SKszQE7r6Dw0Dkm6LQiTlYrTPKmaW56Wt1lNRogvegSqlpf/zIXCesjW90meFqtzXtk3AzG51ZBY/hgy9AM2UWqaIAEPgdw5F2+oL9/QV0VYx6hbGojDFaU1GGWhOOVpDBOyN1Syt5TihDj1AzitqoKE8mZI0XbA9YddgqUx+Sle+kdYtrfIdcUB2momdsGYvBo4maqGY5fvCJbG5OdS9Nrqigp+siz7uZJraFrQy0VMHFdyvmw/l3qJqHZh/PdVfH5r2KrYH8Z5Nl8iyzfUiXfhycfKDwnmmxfMYx+Ou3G+zTfUEjs+ps580dy5Vbjz2JnjdrKvPwD8N34D1L0Qnrdlo6IAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAs9JREFUSMdj+P//PwOtMMPQNxwLYARiJiBmBWIOIOYGYh4ozQEVZ4KqQwGEDIcZylM0aWlU/aJti1pW7rvQse7ILxAN4oPEoZbBLCHKcJBCDu+EHLX6xTt2Lj185f/hm0//X3/+8f/rr3/ANIgPEgfJg9RBfcJEyHCQAs7Q3GqLpuV7X++4cO//3fe//p998f3/wcff/m+//wVMg/ggcZA8SJ1HbKYOsgXYDAeFHZuAqIRE9YKtV3devP//6OMv/zff+ogTg+S3nr3zv3z2+j1AvcLQIGLEZjgzEPMlN04qWrj/wv+tt979X3/9LUEMUrdg//n/SY0T84H6eUGux2Y4GxCLF0xedmTpyTv/V11+CcezDlz57xyd+V9a3xJMg/jI8qvO3P0P0gfSDzIHm+GcQKxQPGPdh4WnHv1feu4ZHDtEZf5Xcw37r+2fBKZtwtNQ5BeefPgfqO8tSD/IHGyGg5KVWtGMdf8XAA1Hxjresf9N4sv+W6TVg2ktzygU+flAwwunr/0N1K8KMgeb4aDw0siesOTj9EM3/88+dheOvfJbwAZbZTaDaffcJhT56Qdv/M/qX/weqF8dZA5Ol8c1TDrdufnU/2kHb8IxiB9QPRlsMIjGJg/Sh8/l4DB3jc/rLJu39f+kvdeIxqVzt/x3jsluwRfm4NTCys5hGVM/6UHVkt3/e3deIogrFu74H1rWcQqo1wxfagGnc1DQqBhZJUQ3TPlQAnRR57ZzODFIHqROSlU7DKhPBV86Z4S6XhSI9cTkVaL88hrOZk1a8b9yyZ7/TeuO/2/ddBpMg/ggcZA8UF0EUL0OoRwKL1ug3tMFYhcT7/B+n7z6S2HV/Z8jG6b8B9EgPkgcJA81WIxQ2YJSKkJdAvKqKdQQPyAOhNIuUHEVqDqiSkX08pwX6ipQKgAVrRpQWgEqzktqeY6tJuKE5gNeKM1JUk005CpoACn7Zz8845ivAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-arrows-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAYAAAARx7TFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUCFtjcMlpNnDObv7mkt383xmKQWwwzgGK5zQbM/z//194zvrdM5AkwBikePrq7bOB8iIgRSCsXDt9+VaIZBNYUeWUJbuB4qogeZgihm8/fpintEy/ADItoXHqtW8/flrB5OCKgJjx4bNXQWmtM87defw8HMTHpgiE2YDYDYjZkcUBl+OOeCK3v4cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-arrows.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAPCAYAAAA2yOUNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANVJREFUKJFj+P//PwMMu2Q387jkNK8D0kLI4gzIHLfc1s1ARf/d8lp3Omc3M2MoAgo2ghQAaTAGsrtQFAEFQpAkkXE4WBFQwsAlp+U7zBSwJJR2hYgbgEwSBuIkIE7DgkHiwigOx4WpqAjkMKCDv7lkI3k/G+74b0BsDHb4nPW7ZyBJ/If5dPrq7bOB8iIwI5Vrpy/fCpFsAiuqnLJkN1BcFcVN3378ME9pmX4BZFpC49Rr3378tMLmcMaHz14FpbXOOHfn8XNQSDPi8h0bELsBMTuyOAC+nGWQKm0f4QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-disabled-right-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXlJREFUeNrslkFLAkEYht9d91hgrORCRKeCiqJDRGK2GIVYxw4d+kf9g/5FHax/YNShW9ohSINyRTNZ01zdmW1mV+3mbsVslz74mDnNM+837zcz0slZ/hRio8kyzzKnUEpxvLcpjNSxetFi6WX//smQFcdxUHi1hMEUWUJc01AsV5KuMkodYbAeW7vHRsaZHMAoRAdnuDASJixEZQSEhAEjUDiIsIno4Jw/UBYC7EuZTxkbjQYucxeghGDYkdJgjCgRZLJZqKrqq0wmhJdxfE6rUzg62B1BJMmbcPBhJg0tpiLIOrLbZ2R8diwbEzENO4l1D+J4+vSNNUTjM2hbfd81XOsPqX7x1iZYWFqEUauj8FDC/NwslldWUXvvBjyzkfWDGaRqdqGnkqyMEra3EjDMD7HWN1oW0noKz80O26TzPet7d2Pwpub7eqybP7uuvDMLo88I/p+Y35XQtjmjJfxbYPf7qFcrHHblfnjubq9FCuPWvWF5/inAAMMzdZSyHBqHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNq8ls9KG1EUxr9JZuGiKcaJNdCFSEoWCl1YqEpaaaoitILg1idw2Tfo2jfoW6jYRcCaukiqrUg2bUTI6KgYrY5ObDPJJHMn3juJ/0C8c9tOD5xkhsydX75zv3NmpNm57Af4GwbNLM2PsuM4mB4b9I1kWrX2/M7Bm83dw4DcaDTwQ7d8g8kBCV3RKPJaMeEqc5yGb7AavXeNflNOqAVz4HcwRoB9EIGsWhYWFhZRNk2hdYwjrCyVSqFQ2IZNbExMvIUkSSLKCAhxPOXq6hpUdRvs/pqmIZPJel7LOLJ7Qg94oaoq1r+tN09aYnK5HJSIglgsxl3POPKlsvtC13Wkl9NNyE3j0uOVzysIhR5CURROGS+VcWBd9N+/fzeDu7aHtin2S1VYtuNRGaeMZo1g67j+l9Z3lbEyEt/7jDFc6/PK+K+a2pMywzCQ/rQE2759HdvDYDCIV69HEA6HucoCTevfn51KGFPjySvXSy0Qi8nRYTyKdPCnCPHY1OVqHW3tnUgO9F/TaLx49hQPIlH3d09N3ZyNfIOclivoicdxeKJjs6DhSfdjxHv7cHReEd0zbwYpGiYSQwPuPEwMPsf+WVncjSKD+KBUwcvEEPZOfws9B6+mPhGAsSIUfpb+zPr/4+FJbJsxfvn+WmDX6zg5KjLYF/eF5/vGmp/Czml+pTl/IcAAabQiHJYP3UgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-right-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXJJREFUSMftlk9LAkEchl/30KlDoemCRUUopBQeQogSsYQOHTp0iM59jLoEnTr0EUztC/Qpgi5eoqBTFyt1tULR3HF3ppndJTrlWMx2aeHhN7uw8/Du/NnRTi+vmGKqnBPOmEYpxf5mWhk766lofDp8yD3HGmMMdy1TGdUeENF1cM+Bk4xSpgxiUbwR8Dad8mT+4MhsH/iU+ZjMhm1T5QiP5twIoWrsP0nmE26yIRhNA+VSCcVCAeceRY+LcgkNozG0Dy+Z+IzfEw5OYm87D3EFBAG3wXjZ3cpBDwUh04+7zobE75kWxkM6NlZXXAljjjibTmEiEkXXHEiMGZVLJnjt9hFPLCKxMMd9AcRmZ5BcWsYLfy7bhzf15ai3+8hm1pCMzSOfy6DWfpffRX4y9WsdE7ksF3XI6FPf3RvlFyexLDw0204d5b0vY+bHOrPx/4v5FQNCRDXUHwtMgvrTo5AVnQPPbeVaGfc3lVqr8XzGPUcfblj1AECuvN0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfBJREFUSIm9ls0rBGEcx7+7Bzk4eNlli7ylzUtJFGkRUY7KzdmFcuDAhULtycHf4LRecpBc1sHLgYi0JcqupS0WszteYmftrJnxzDPrLWWeofHUp9/M8+s33/k13+d5xjq1tK2YzAXBTUizyrKMnvZ60+hqqsl3FuSOEp1Jq6IoOOYTpnEhAHkOB4hOL+1MlhXTEF9k3Isg17I9JfY/UDHJAM+JBJaXVxATBEN172JG8Hq9OA0GSVyFJElGO5NIkczEzs4uzs7OYbEAoVAIW1vbzLWqjpXeqII6BE4D2N/bBxS8D5/PB3/Az1Sv6jB1xnERrK+tAxZ8HUR4c2OT5tk70yHPloOJoX64hwfgHhnQYup6fLCP5lmeo3WmgyAm4Y884oT7jjqv5vWekepMwn+hrTNGR/0Fan2WN+J5HosL85jzeL4wP+uh89FolK0zzfo/Y8/JQndnGzWg5Y2UM7s6WpBry9bfRVitH3tOIj3TjraG2g81MprqqpFhc9A8k/W1vVHfkbexOEqcTpSXFtH1VVaYD2dlFfinOFP9p2/G9pGv7gW4GhtQUVaM1mYXwncxAyaRjG/E4Yc4ml2NuCTR9CNGfJEQ5B5oNP2I+Q1JUVRjxPzfgoSIm/ClKjZDf3iODnZN4+Tw4JrnrqaJztgraPK+AKe0hD8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqUVLuO2kAUvcYGgs3yCi+zCYhiSzZK42xDScsPJKIhFV8Q8SF0NGxER4NQ/oBmU0SQIiQFQghjBApRADvYPJx7kb2CrDZiR7ow4/E5OvfM8TDwcDDNZvPa6XRmHA5HkmXZy91uJ+/3++Fms/maz+e7+I55AjheVKtVfyKReBeJRK5DoRB4vV4QBAFUVYXVagXz+Rxms1l3PB5/LBaLv20ca5PVajUxHo9/SKVSyXQ6DW63GxiGAcMwANUAz/OA5IDqYqjqJpvNfm61WjqBOfrJ5XJcIBB4j+CLcDgMmqad9Ift3M+j0SiYpnmh6/pbXFaoNQepKBQKUiwWe+Hz+QA3D6DHivaDwSCg6gyqvyE8KWHRRIn63263cO7w+/3gcrne4PTuQILjJRI9iQS9IeAl4YmEwR4F2ngKCQ00mLfbYbBPDYvnOO5sAswMndwfm8TEHMiLxeKKjD13LJdLyo9C+AOJoihdURSvKAvnDgwdyLL8hfAUNqbT6fyUJCmD5no9Hg/l4L81mUyg3+9/L5fLnxCvE4m5Xq9NJBhh0DK4dlHUHyNA1TAajdRGo3E7GAx+kT127M1er6dNp9NvGLoIuv7cPkaKPplIHhABKvhRr9dv2+32hFQQljn6EInQjSWUSqXXyWTyFXokYhZ4TCp+CZoyHA47lUqFfFCx1nTKxyT3GaJ2sJ5Z/5z1jF6mEBkW2LCePbwK/lHFWnPGuj+odlad3Cd/BRgAYjwouXetfmAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjNJREFUeNqMVEurUlEY3cfjO5PjO0UkCCKCiqLxnTnpktUwCidySRz5K/wJRgMnDmxkkdWooBo4bdCFi83UUkFS8/3W1pJjeL3FPR8s4Xj2t/Zaa3/7SOJsSYVCIWIwGA51Ot0dWZZvLJfL49Vq9XU+n7+PRCIFrFmfath9yGQy/kAg8MLpdN632+3CYrFsMB6PN+j1eqLdbr+t1+vPYrFYY59Eymaz1zwez2e/3+91uVxiOp2KxWKxgV6v38BkMolWqyUajUazUqncjcfjP6lKT4ZwOGxSFOUlVHi3C3eLRKzBYCDMZrPw+XxebPIcfz3kax1+dNFo9Aks3Fqv12I0Ggn4/y/4HlkJt9t9CPVP6YJK9AjxMQIUCE5oKQQt0COMRiNJciQxgOA2d9nK1lJcj76b7CeJDBtOWuEOWovrQaSwnyQSQurAioNetRY3nM1m3W0m6+FweIzADpi81ppMJgJ9J9sjXuLc3zkcjgOGpbV43LVa7RX7OWxGzMilVCr1AcN21WaznUvQ7/cFpvZTMpnk6fySKQfSVlDxDcN2D89WHN0muH+h2+2KTqfTyufzR+Vy+QedyeplWpVKpU6z2fwYDAavIODLbJAk6W+IzIB3Bwq+5HK5o2Kx+J2u2Cvt3CEGchFwJhKJR6FQ6IHVar2OWVBA8hvBn1Sr1TfpdPo11vBe9DnyFCHt2WXQFpXsAmDiHFAMMAWGavNYJTj7KdhTZVAJJNUyieYqTn1P/ggwAOPnK9ASMplRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNp8VF1IU1Ec/9+vbffO2aabk63JJvMrFEeiVj4EFhI99Bp90FM9SL1G0EsE0ktvgQlJD0kIRkT4YPQUBD0kCJImpuGcc6tdt7ldN+/u7rn3ds7YplPswu/cc+7//H7/j/M/l4LjD/Vkai7Emcw9NMv6aJrx6roW0xGKqkVl6emdq4t4j1FDOLwYfTZh97S23271untamhzgrK/DsEJSymPkYEvchY1YYim+sfZ24vFopsJjKmIPnr/2NPuDjwY6A77e9gBorAV2EQ2RPRWKwIJVECDocYGFY9ySxp5r6+1fWPgyVyBklgwdZ89zDrf37mBXwFbX4IKVHbkmP0nVQMKf4nje0NgEfW26rbCfv4WXLzEQiYS68XBsqKcjOGRpcIOkINAN/UTkixowFgF4xmjyhS6k5z9/jJJIWJNF6GeFOsgratV7JrUDM5PjsLq8CJ3dIbh+7z7YG10lm4oABFs9cGZ+EC+/03jgaIY7jSgTqDjsCqZfjUNUTIHd31V6T028qLHLGgsUzXoJn0TC6IYhGCUPqBpJMpuDeo8fWDMPSJEhLW7X2Ml+zOMJn4hQiiLLckHmWZatbmoJdkBaVoHGW4iQL9iJRQ7SRSo+NUUmp0ORdIxcZjchZbM4TFTFxcsj0Oxygq6h0nt45EqNXZIkyGUzIuET11piK7zi9gX8PC5u5SHz4eFLNUeNkHaQrijCn/D6EuGXmi26+iPb0t3XzZjMgpkXQNf1/yIR34bN1eXw7PjYJ0zPERFDQ6qBmydldTZ3AUVxvNV6Yp8QgVhkQ/724c07Kfk3gflKpe31VDyyL0Z+bwoOl0s3wE6uFVUqGQVqUYUcrkEiFoXNX8uRrzOT7+PrP6PYmCdc6tBFJPWxYTgGrt0MuQPtZ3jbKSfDchYcaUHeyyYT4bWV+dlpcovTJA1SJpIJdeQ3QIQsZTErhrnsgLSFUva8h1EoCxz/FRyJiivf8ooIORq14v0w4Z8AAwCwpYb8ccIJGgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvpJREFUeNp8VF1Ik1EYfr+//Tg3N3U457T5tygUc5YgdBlRCRZ00Q/VhTchdNOFN91EIN50HSLRRUGCSWKGo7wJgqikMIoiZ6nT+bPcj9v3uW/fz87pnDGnK+vA830c3vd53+e857wvA38v9vajwFnBYOxmeb6dZblWhLJfkK7PaqoydefamWfEB+0lMHs3fYNDNe4G37DXVdntqbRBhbUEykvNEJdkiIlpCEdTsLQRnVpbCF4futW3usPjdoLduPugxeVteutv8hxpdleCKGuwGhfhWzgGUkYFgeehweUAi8ngk7DhanPbsScfXwVSlMzTz0F/l9lRVTPS0Vjj1DHAu2C46HwxUc8pWYjEodpRCm1elzOT3h4mph4ClSphL/UP9B5qPNArKjokiHSM8T+RSiugZBFU2CxNdf7jyzMvJz5RJUaDqeSioumgIa2QPbWVgBdPR2HpZxC8jT44df4C2OyOnE3P6lBqFEAwmq+Q7WOWfEwsJ7RJMgmioQIC42OwKWXAXn84938+Nlpkj6VkYFi+lfKpEgFhbEc4Cyi7W4dURgOb2wu80Qy6IoMYWckp2FmY3jPGNsqnQVhFkZOqqpaxLFtwqq71goR5YDk+F6i6rh50fTcIQghURRYpn7KQtJWYy2QU4pQtoN3vJ2/EQtTpUG61wNGOjiI79ZeSW/OUT5VokeXF6bIKZ6eN4wqZjCYz+Ntaiq5az+6eV9pOw/rifIDyKYtZ+f55vaG96zTHG+wcCYQQ/i8kaRs2wqH3k/cGBgk/SoMQxRomj2fJ4fGeYFjGxJNSYYz2hSSJkEjEk2/GH95MRTfmqCguX2g9thba+hX6MVPmqm1keIMbY4aQIAdaA0VRQRRFiIRDH16P3u9fm/86Sx8z5TJ7GtFE4CTwdPZcPldV7ztptpY1cLxgJUpFWUwuRBaD0zOTIxPEZ4Vgk0ChIpg/xoCBwJYPVkFgyTcpreh2PjMl08ZT9x0FO/OEXk5emZDf0/lBeyKTz140T34LMAAJdqAwng0CqAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlxJREFUOMtjYMAETPWLtgW2rNg7p23NwbMd6478AtEgPkgcJM+AD2S2TZduXrF3y9LDV/4fvvn0//XnH/+//voHTIP4IHGQPEgdNv2MOd1zdZpW7Hu148K9/3ff//p/9sX3/wcff/u//f4XMA3ig8RB8iB1ac1T5EH64CaoG1ly1S7acWnnxfv/jz7+8n/zrY84MUh+69k7/6vmbd4B1MoGD4OcvgUZC/df+L/11rv/66+/JYhB6hbsP/8/t39hCiyMOIumrTqw9OSd/6suv4TjWQeu/HeOzvwvrW8JpkF8ZPlVZ+7+B+kD6QcZIlgyc/37hace/V967hkcO0Rl/ldzDfuv7Z8Epm3C01DkF558+L94xrq3IP0gQ8SKZqz7vwBoCDLW8Y79bxJf9t8irR5Ma3lGocjPBxpSOH3tb5B+kCES2ROXfph+6Ob/2cfuwrFXfgvYAKvMZjDtntuEIj/94I3/2ROWvAPpB7skvnHKyc7Np/5PO3gTjkH8gOrJYANANDZ5kD6YSwQ9kouby+Zt/T9p7zWicencLf/dEvLrYWHCyc7JrRtTP/l+1ZLd/3t3XiKIKxbu+B9W3nUCqFcTFjugeBZTM7WLim6Y8qEEaEPntnM4MUgepE5W08AXqE8EOS+xA7GCuKJakH9B0+msSSv+Vy7Z879p3fH/rZtOg2kQHyQOkgepA6qXQ06xDNA8wAmVsDLzi+ryzW+4EFbT/ymyYcp/EA3ig8RB8kAsC8QcKHkHCbBBnQjyqw0QuwOxF5S2gYqLoLsAG2CCukoQGn0SUFoQKo5RngAAHC8qpFnABTYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeNJREFUOMuVU7tLqnEYtigJpJJTS0JtDUHQpEPnDC7Oxz8haHNpqk1cxUkELwQuOnhbVI6oIFGCoiAYitfBQVDMS4LgcM7y9j4fvw+62Onrg4eX9/I8v4ff7/1Uqo/fWjKZ/J1Op2+z2Wwll8v9RUSOOvqq/31+v/+Ah5OVSoV6vR6Nx2NaLpdSRI46+phbxV8LBAInPPDUbDZpsVjQfD6n2WxGk8lEishRRx9zPp/v8I0rk8m0xVYf2+02TadTGo1GnwL9RqNB8Xj8D1M3ZI31YDB4WS6XaTgc0mAw+BKYK5VKxO4vZDfqcDicg3q/31eMVqtF4IEPEU0sFpt1u13p8pSi0+kQ88bgQ2QnGo0SRL4DiEQikX/gQ2SX7+S5Xq9LFpWiVqsR8ybgS074uR4KhQJBSCkwD57sRGOz2a4TiQRVq1XF4Ccmq9V6Jd+JWqvVHnk8ng4vkbSVXyGVSpHT6bxjrk5+nXVYMpvNJq/XO4Uj7MxnQB9zRqPxnHnbr7d2k7Gv1+t/ORyO+1AoRJlMhvL5PBWLRSkiRx19g8Hwk+f3Xm+sSqipRePYYrHc2O32gsvlmrvdbkJEjjr6jB/i4JV/9IawqBPDp4wzEY9Fffu9g5V/tHClEc+3K6JG1D+c/gLaLHWQM6f6bgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARxJREFUeNrcU7tuhDAQ9AtQQBQ5IQokCkDi/7+Fz4CChgiO8yNjb8idTiKPMpkCY+3s7uzY5uM4SimFEDJAHOABLMBa65zDV/jFOXYOF6J3tl9D9hnbHvAd7QPOeMZYrbWKomhdV8Q4h9p7AolGggkICUbFcbxtV20MO6by8zqHDZShuNagGuqjEL5cXqdpQiOywDcQEpkYBJxQ2CklEfJsiCnLcp7n201j2GCg4YyUWCKQPPWxKFUUxbK8bdfNoDW3UAL3JQJelyPH1KMJWZam6QtJJMaTs4L9Bn+VrZ4uxjAMy7LQNs/zvu9Pa8PjruvoAuCEmqb5RkmWZVVV4aeu6yRJvlJCAG/fd9yFH00JJW3bfj6z/3A67wIMAMmK0TcxpouqAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXdJREFUeNrcUs9PwjAYXbt2gIpHQzDGg1e8YkiEAzGRi/yB+Cdx8OTFRKPyQ4MSYWNs/bHV1y0SYoLEo74t/dr0fa/vaz/S7/c9zyt8AXPGGOfcdV1KKSEkTdMkg5SS2phaOBtgjMkTtNYZG1HbiI1v1BVPKRUsQpYYR0pFqas1zxNWyI5MldbSQk3e3pnLiyL0IQOjcIwBc0JoagxxHOTHgBDQfhqMWaG0Gy38KI4JJSgMxCS1haA+2IKHOIqFFEEQDsavVumgejR8vM8kcQNGeQq/ZRtj2VZa3NzeYWnZhWLp8Phk8jIMF0tcEM9AM+1EJzM/eHgehcsITJbXzj0PJ8w/pkJEWmnJpEtdofQ8WEymMyFVTmPr97Wzty+8Is6NhIjjEAO+dQJ1foO/ymbfeqjXux6ORvmyWq1etNsbtdHQ3e4VGsa+AOet5vkWJ5VK5axex6TRaJTL5Z+c5Gi1mr7vn9ZqUortVcJJp3OJrvo/r/MpwADuwwM0qCfRHAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrcUj1vwjAUjB0nLQSK0qUfKR1Yy1IGysgIKwsj/4g/lnZlZ0ViQGocx3bsnhOKKlpadWxPkf3i3L1378UkTdMwDM/egZgxFgSB7/uUUkKIMaasIKWkbjcO3glYa2uB1pq6CLt2Knw4oh54SinkZqgopaLU1zqoBQdUJY3SWjoozjmLotZms0EayOAYC2JCqLGWeB70AigK5MbOOp2L7XabC0EoQWMglsY1gv5gCx5ELgpZ4AwChtN+/yF9fuE8ryZgVajwOLa1ji0EKjSbDdR0ddvt9tNwuFqtsleOAQUVaJW71CWhXiuKIAaT1r1DOhg8du+7mHHO8yzLUArURvP8Mo7RUk1jH+d1l9zeXF/B9H6i1eywHgjU+w3+Kpsd3aHlcrler+vXXq+3WCxO5saw5/N5PV1c9Nls9oOTJEnG4zGCyWQSx/F3TmpMp9PdbjcajT5f9y+6hBP4gav/83feBBgAu4vyDSWkLFcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiWrpyHcP12/eZXr15x/T792+mX79+gfHPn0D86yeQhuFfcDmgOmZWLl6AAAMA0ScnvzgM/74AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNo8ybEJACAQBEG8/ltSbEILUMz99O8eRAOzZTblUtOYC9sMEQGSkAR3viYdfo36TyG01o8AAwDxoyq9365oKwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVZJREFUeNp8kr1OAkEUhe/8sLvCgIPgClYUGhKjhSE2FmJrYWFhbCzURKzUWuNrWPgcPoHhDeyMMTzBEmBlZ4R1x5nNYpDInuQkk5nv3ntyM6jZbMKUkDbWpnf3DyeU0kOM8ZZSqm4e6QxIL1tX667rPjKW32eMgeM4safhGDw7v6iXy8vtUqnMFzmHMAxhrC37/T+wGW277spTcanILdsG3/dhVjTpmrm+uW1lc9ldQigIIeA/0aSrRQg5NnWj0QjmaQJnhJQbhUhpeJwOc86d4TAoRFEExmkw6vV630EgPqUUTMdJhZWx/BJvg4HfyLFcKmzmhjKQz57nNWy9tnkitVrNrI50Oh/vlerqns5cNQWT/NM28O+foJS8IoSPFCjbsZ25sMkN3a7nE4JfdO2mlLISd8EojhCpCFDy61CSf0E7r13YbuycZizrQJ/XlIrv4EeAAQDMloUiXiKSSQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWZJREFUeNp8krtOAkEUhg/LKIRGwAZ8Agpbe9/AN5DCzkvvE6hPgb0WJDYW3qiNRhvUGBpZIZpw21mX3bnteGZZ0BDXk5xszuw3/znzz6SurhsaAELMZ611UwhePzo8qGMt43XzP4pU2+4go4ExBkEQgOu64HlfjW63s3Vcq9nxpmiDNXIccCgFISUsZjJQKpWgWFxeL5dX7jar1QoyxIgamCilohbTr4+ZyWYhny8UpFQnWK7F4yhLCAHz6fs+pAmBXC5X2d7ZqyK4YNQtie3/Ss45qDAEQtIbMWwRzgUkBZ4bGOerM9i0TYoQlT1vvBQf0sA8EeaT+enMDf6Psktd4/3L1GcihUyEB4MBKo/Pp7eZOLMBh6Nh6+bywngtItjYNB+9Xg/6/b7z+dHdxXL8A6sJbMYJWADUofg+6O17+23fttuvv2BNms2nyYtKgaND3RKcnT0+3J/iknHBxWTxdcO3AAMAyTPqDXZdVhcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAV5JREFUeNpiZEAFjEDMBMQs8xcvD2djZfNlZGLS/f//vzpMElkhS2tHt6qsrOxUAUEhBwEBAQZubm4GLi4usAIWZIV1jS3q0tIyhyWlpAWERUQZfv/+zfDj52+GL9/eoSgGWc0uKyc/U1RcXICdk4vh3fsPDOiABWoq64TJ09J4efmsmFlYGb58+cqADbBATWVjZmYJZWBiYvjx4ycDLgBTzPr56zctob//GX7+/IVfsaioGMfHz5/5/v77y/D311+8ihlfv3719/NnoEu/fuVhYWHBq/g/CH/79vXmu3fvjPn5+fEq/gfEf75++rz52bPnxhwcnDgVM0ODjvnalYu35RVV7f79+ycJirG/f/9iYGbkNAF076X/jMyBQA3s2DTAFIPczfDyxbPPLMzMB4HhrfP16zcJsCmMkOQDNACekBih7gc5mBeI+exdPGPYODk9//9nUAFikBgDQIABAM09iIFDDek1AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAW5JREFUeNp8ks1Kw0AQxydhU6sGxINUPVQUDz149e4b+ACCgl59AEEsehc8+AaFHvzAghfxIuLFIh4traalh0KaVpO0zYfm29mYlCKkA8Pu7Px2dvc/yxQvbgIA8NGrEPgVy7ZKu9tbJYzdaJ3mQ2OqQjNAA9M0Q1dVFfo99bHREPZO8ketaFO4ge1+KfApq2A5LkykJyGbXYL5hcWNleXV18P8cQ4ZQotSmDiOEx4Rj9TSU9Mwl8nM2q53ieF6dB2PtW0b/ruuG8CSFPA8nzs9O99BkKPVCU0mmev7wKW4TZwW6OHEspLhIGDAMH/WososQakSYc/3YKBpM9EjEbaSYZrTdGMwVGMcrCgKaq/XYp3H3lmSOqBrg7u4m4lqSJIE3W6nfl0sUK2dRFgURWi32/1WU9jH0BzCox00DANkWYaeqrzUa28Hwnv1YwQOyHO5/PejGKaPv65uf5u3Tw/3V7hEVdCoKFG74VeAAQDaxdSLiOs7LQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNJREFUeNo8iTEKADAIxEL9/0udRUSF9pYGMuQOdz/CzCQRQWZSVXQ3M8PuftXa338FGABp7SMpb2OFxQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUeNo8xtsJwAAIwECMr/0HcyJRS/vRwEGoKiLik5n/mxnujqryJiLcHbvLzNDdjwADAARbDu/0NmM1AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASVJREFUeNqcU8mugzAMzFpx58KR//8jbiAOoFZtD6AHElk6JEDdBam8iYSSGI/Hjs37vmfHMQV4j63nEdbaQxTG2vvtbq0RQkopAge+TB1jMeZ8ucBVyRkiIJqUD/p+Af68Xm8zC7AS4XiY6G8YnHNKY82gcgDhv2Ecx6Io3i+HESoiiyJcEV8UNU1T13XMhd5DzuL0Wp0lNZjpuaqqtm2xQfDoTK0iMMhVxQsRDYvK5XmeJMmmiFrnyjLO+BO7RNjDnGVZmqZlWX4QSc/CWi8pF++6jhLTaHCgqZkApfTppD9f7b3Y8biFolZUzRjrnDUG/uimZ+DdPtprLq3VNBlwOYfZ4iFfEQtyoCE3LheAMY26F0UY4n9Mv3PLO+A7V4rzhwADAFzx4BgPjY4eAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAY1JREFUeNqUk0tPwkAUhUvn0dJpBTHqVv0FsNWYaFzJX3ZlIgFZFgIbE6MxRCLBWA3Q0nY8bSXC4IOedjGZO/P13EcLV9dNLb9kHBJNMkoY1Qkhuq5Tx3FyIaIonLyNia4Z3OCcUUp1HaACjaIoF+XjdYT7ppE8nCWgQio6n883B028MSiWVYRMw2CMISlQEMoBisKAU2pZli0EQIbBUR3sf4H8IFi/8+Z5jZtGvX65vEm10CiaAqTUUWbnO+r7vkJx3c5tu43vKCFLIC3GOOMww3lWnV9BzVar1+tjgaNKiJUF46lYwqOUrIBms5XTtWrNNIuu60oplVBWDggZoeMokOJoppw+OjzY39vtdLpKaDr1hRCa1GIpNSkLCy1Aa59NdgmtVatKaDgaV7bL6HIUhpi+OI7/79qPGgxfdiolzGDaryQvLLIEk4Fc79of6vbvKuUSGkdo8n8hRcZkNpPk5OwCLjd8Yf9x8OzYYsu2l2uEzpDj0/M4j4IguH948rx3GLGFBQ4oKP+nAAMAB7f00otUtiAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXdJREFUeNqck0tuwjAURbHjT0iCxDbYAntgieyBEUJihsSk7QS1bAAxKNARJITExu513CIaaEV6FVmWX3J83ydkvV63muuQpunhYIw15hwEAaWUlGXZCJGfTsu3ZX7KpZBCcMYYpQARUhRFA0qePz2/4P52GMpQCu5ApBIzxjxIsdYuFq+gRFEbCqXknLukCEG0Aeh9s1FKRXGUxDFAUgpUB+ceRM/3tN1uh8Nh7XC3+0A6cQS18YTIrpKodMfRbDYbj8e4pxaCHRSFCy6qj311LlGmtb5+ezQazedzbHDhdQgFwsr97dzxGAt+gOD5GjQYDLrd7nQ6xb4WujQIBUbHUaC/QFC/3+/1epPJpBZCTs6XbRm3WvItHyWr1erBrmXZEU+SxJ1OgoKjzN7UV/tvHf0mdOmY5xjganwcApsLqwEIwgSlWVaURcDc/4UUObd+JhsMZDV7YEVKa1WqgHovLW+K7ff7f/z9Wmk4AMVa47pJ6acAAwDbUso/kA6gwAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT9JREFUeNqck0uLgzAUhfMSXAkdOiCi4Mb//39cua6MGxdK8+pJ0mZipjDjHEK10fvl3nuudJ5n60UIpZQUXuS8BGMMEGsNWFprKSUX4uNy4ZyfAoHDOMdyEkLgTkl1u82AnssonoyMjDHU1UeVUl/L8nm9/gcEAYQEHYoQsLZtK8vyRGlRKC0U6K9833d71DiOPzeDXLMjFc5xXyMoWhss7+a3Fq+u6+q6DokfXEv/G5ckZ8zViH6j2DR5/GJzmqZ1XYdhSI8RKRgPKA3tdkK70lfDPfbbtm2a5jV970Cvt62/WD9iB1BVVX3fwwHjlQbSdF7CY/h1v0ulpCgKkXgaDEkbfOhRPC3MkVIayxhH58eMYhYZ4gmKbPOU9svii8sC3sbnoJCOd8lZjjn6NTIHITYUhmahO5nlf9dDgAEAn/cvPZYArNYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYpJREFUeNqck01PwjAYx9eu2xLjNATjh2CRC+IBT/Kp5Woi8bCLBw9GphINRoMMonR9WVufbbhsxAPzn6Z76dNf/8/TloRhqLVWSslUy1QpCyFMrOYirutqbQBl2ylGhguhpNw/bGPbbgwyBkCaEIIxBkMsYcv5m986bsQinufBA1iQneM4NuAQNpR+LT/3Dlr/AUEPrI0vy1pTyhOKidMgteLN5MopKCu/1uuEc2Gq0Zej0flg4Pv+HyBQ+aFzX0CR0uOOIFwAqxodRY+TSXTW73e7JwihGgjqUn5kjhBSSjuucHLx5ffWylLK6/F4NpsNhxc1kF3ZGvCCKwJ7jNUcFbkHnU4QBFtDm9LWoiFeZ/VKEsY5qw4dtduQFNQoTSW0GqhMVeeCjVNpJqj2x3zB68ue9nrQb/3cgMyvslsiJRiGBopXq/f5ojgWO20/zC9ONrgQQnABW84pTW7v7hljDQ5kASrsCAGdjOPV1U24pkmzuwZzTV4aKO305fUhep48TXfPqNSPAAMAXbEphoLM6uIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX1JREFUeNqUk99ugjAUxtfSwtggGRn3voC7cZmXZpdGn8G38wV8D6/0xjvvJZnJUEoLtPuAiIpbJicN9M/Jr9/52pLlcqm1LoqCUotS4vu+53kP3YPZtq21ASrPcynldxy7rvvW7zuO0wlENpuNMaYWpZRKpUxFioXh8KMTi2y3W/zAAgiiABKJOCaJ6z6+DwYdSqu3BQhfsBhjlFL0wdrtojB87eBR3TNVVBRSVqp1FEVB8HKZPZ/Pp9NpEAS/gBDNQFe6QMkyR3IllUL/Mnu9Xq9Wq/F4PBqNauFnEOe8GZSKCCkKzW2F+SIvXWvtjJNdLBZwdjabXYEsyzor0ppeBLcZXGuBkP9ZRWuJtRSWuqBMl35xxlvZvV5vMpmEYVifzNXxZ1nWyMEalCdJEseHw+Ho+c9PrnvvqZlTgAJomko0xAMxjm3flvYnCKn1zYavuNlSSTRM4sndTylLQw2NHDBEKmQqGbNuvfsH9LXfm9NDgztCiMa1TvEjwADa4Bo+zuuFWwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQ5JREFUeNrUk9FuwyAMRbFxHvIn+f8PSpTkKe1DOilSUyhk16bTJjStm7SH7UpERj6+gCG0bVvbts6544NyzlUAxRjZ/UR/msaBhmHA91v0siwn03M6hDBNE4J5nhE/ofu+TykhQKfHcayyUs27rqtu59/0+9doqZp9ve7oIBE5cp7ZizDiikanLpeX/baLB8NKO0Ib0y1g2jTyTsPsdD7jfTQiMPNcChweChqeUg4hihXoWNcVqEAw8cVd7fGucD/McMuHXZPg/4n3u/cKizdrbNd7WxkFmVS5SLAK8gqa2Fgi3YnZG0xwR3wIxgPixwb0gIYWlfNpALok3vrwiUoWgZpa/Vd3VFzKOq8CDACjBLiBGK0ZHAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNrUU0tLw0AQ3sdkk2wa21qfrYoogjcPnvwP9Rd7sArV9iC1YKEtggcRRC1iiX1lk3WygaK9VMGDftnM7Ga++XYzk9CTs0vf96MoCg3Gk8nYYDRKDF7pk0kYqjBk5Cf402ytdbV6gfZb7JtWq93pdLrd+ewgCGq1Ok6azeZwOJzDPq1UsOo4UUo1GtczUZhZH5fLM935N/X+NfaXmsSRAh3ZrsU8Gzs5GAyfX17xi51lax2P3vuMxK7rWAiwKKP57MLaytL9w2P79o6YJoCRjN56TwK49KTrSlsI5DPGYh0rFe1sby4X8uf1qyD9G4J+T1hcSul5XgZHBkcCP+P76DyvsJg/OjxItDEfMxzHldJNlKWLwkII1CaEqkhxzgFgs1Tc2igCJ7FtC8exbTu5LcMFsDhnlFKIAR1mcuD7e7tgARcG+GoIDJgwNR4t0UTgJrgsra9CSkLgjngyZEzrlc4xQCysp87lsownajxV+kydJtD0JAYfAgwAo0qgTdQcI7EAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAU5JREFUeNrkkj1vgzAQhrF9/sB05v//gGSJlCE/IIK2azNkz5YiAflQAAN9baQkytC0W6Uewpzxc3f2vWa73S5N03Ech2B932N0zvXBrg5+1nXNo9/Yn6ZxoPl8jvFH9Hq9zvM8y7LndFVVy+USzmq1Qsue0LPZrGkaOG3bLhaLh1X2X9X5xuh+Upblfl9cmgvnnDGmlTKxkUSPNBq13W4/i8IYI6XkzD+dc5eywvQlsTcacry+vaPhSWLj2CKlD+B8GNH4Hqv14ZiEAE9/bDYQx1qbeNxqDVqBhmRQBzuBrnA8DYVOp3NsYgsw9iMSK+VpKO16J4Qgoq7rXNfR4XA0WhmjtfavDCyRFMIflAbCB5GCBMQn3AEVTKIkEQ/twDu1BQXGSKGI3xhonJ2CoaK/ZYzdblzwsRDJMYpwCsOFzyamTPfoNYBNOwn2JcAAJXXV9kM4kCMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUlJREFUeNqMkb1OwzAQxy+OExgZeAAk1IWhon0V1oqB12BkR0LiEUCCCioxQFmYIR2YWkqFBFKqxpQ25It8f5gzShADlWrrZ/vs+/vsO+n0vMObzQZ8zD8hTVNIkuSHOEaSGOeK5PdMoPW0gnDO7SzLQJIkWLYJfwDJI6gZ+L4PCqVLi4MgwGD8laRp1jZNE1RVWVos/OMwvJaZMRnUtxs7lNJ1qij47wzyPF/IeDyG6Tvr3XWvDoj2cB/NZ9PWRNctz3WAELIwomEYwBhz3l6G+2g6Mg78tnsz26zVLlbU1XrB8w2RkCzLgWOPoggsywJd12HKmDbsP+49P/VHqPOqFItZZEw9PDrelanSCsJoy3bcNe/Ls0M/GLmu3bk8O2mjjy9yhiR/6yPW4s1KiYrI5V6B5EKApCXFf8WtLqkQNi8vqBA2fAswAMMZzeG4WyTTAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpiXLpynZGR4as3737//v0LDH7+/AWEMAAR+wWUPX7iBECAAQBhgCfi/ZM1bwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUdJREFUeNqUUT1PwzAQvThplzIwsJUhA1kY+Av9EawVAzPwBxj5NxVi69iqG0qZS+gABCGQkihtonwotZMzvspBXZCKpeezfe+dz8/GZDqTjuNAkqbQNA0IIaCua+BcbNdCcOB0JurfHEXvxUMmpUxIZBgG7DuIr0bG1LSoqgosy9pbvNlsKLwxVWWUqpb/Iya+4HxsHvR6ixPHOTcZO6IC9CZEVK3hNiI20GC7RgjDEFareP7kPt4xz3uukmQ9jKJwXZYFMMb+vDGOY0L6/fV5Sw2Ytm3LuetG/eP+fcfqnkmQNhmiTVGuc8jyDIIgoBtd//318sP3l2SYMRgMiENW06O7V9c3F4yZQyU6zYvisCzLRBm0LIr8YTadjBSnUCipbituC1DPHY2ugqnPkH6IBApCA3ctlpqAOllpoaFzuAPaw48AAwDbB9BTAAnfJQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpi3LvvgKqq6oePH//+/fv79+8/f/78+vUbDED0HyAEC/75++fq1WsAAQYAbM4oZ81Xt6sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUpJREFUeNqUkbtKA0EUQO88drNJdjMJSSyUoGghmkJE1HJrsfKBGEtLn5Wf4FfY2lvYqaT3B8TCkPULEtiwI/uY8Y5sEUQxXjjMneGemTszxPd9+BYEoTkkR+eoHJMD/0EyaxZiI2xMzpAYSZDUbMLHRJPbJ6dnHcb4VhzHbfkhF6JI9qWUr1JG3e7T4x3WRDkxwba/xMNOZ67Vmr0ploq+UhqyTAGlFMJRCKMwhMFwCMPB4Lnfe7sKgn4PndCcxs4vLlc8z3sQ1WqNcwvwVCSBJEmg6DjAGINy2QXO+GaaZvca9P57ELzQpaVlB53bZnOqViqVQSkFv0W9XjeI6ZnWNU4F3dndO3Zdd9GrVLDVDP6KRqMBnlfZWF1bP6LY0oEQAtI0hUnD1Fu2vW2+pu3gvf4jFwoFM8xTQkjVPIjWemKZWxzrQXwKMAAaxXA5BvQ04AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVNJREFUeNpiZMAEjEDMBMWMUPwfiv9B8X+YQnRNLEDMCsRsQMyMpPkvEP8C4t9A/AdkCCOSRpAmtp7+SZEsrGye37591/7y7avy5y9f73/59PnGly+f9q1etmg9UM03KP4FcxZLcVmFgrq61mxuXh77v//+M/z584+BmYWZ4f3792D88uUrhjevXp28euls6fWrl+8C9XwGOYtlwuSpBgryiofEJCQ0eHj5GZiZWRiYmJgZ/v77C6SZGNjZ2Rn4+QWA/H8yzGwcQYwM//a/ef3qE7O5hSWXo7PrDikZGRlOLm6GX79+M/z9+xcr5uLiAtEcTMysGnduXtvB3NrRmyEsLBwjKirGAPQnTo3IBnz99k1aUET0PRMrK0sYUDPYRmIBSD07J6c30///DNrc3NwMv//8IVozyPb//xmVmBgZGQVYWFiAnP9Ea2ZlZQWp5wcIMAAiP6Ghx1+GGwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpifP36NRMTEzMYMCEBRjBgAIP/YPDv3z+AAAMArN8L7foJbfsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUeNokxsEJADAIA0Cise4/mBNJtNDe61BV58nMH5IR4e5mBmB3Z0ZSd18BBgDIAA7SuCPczwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scrollview-bottom-corner-color.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiPHPmDAPRgAWIjY2NiVTNxEAKGFU9qpoYABBgABtHAx0Ze9+BAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2rt3L5OTkxPTt2/fmP79+8f0//9/MI2M//79i5WNjY9sxokTJwBXtEPtiHmeoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpi2Lt370yG////z2T69u0bA9O/f/8YmIBcKAuN+Pv3Lx4uTjE0Q0+cOMEAEGAAD7lHUquXzXYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpi2Lt370ym////MyAR//79gxJoXDTi79+/eGSxGQC3AyDAAN4mR4fIJKx/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpi3Lt3LwsDA4M3EFsBsQDL////fWVlZT3k5eUZ2NnZGZiAAtYyMjIM//79Y/j27RsDC5DBC+LAAEgLAwjDBUCyKCrIFPj79y8dtNDEDGQBUBB+/vXrFwMsoJiAskefPHnC8PPnT7BKUBBufv78OQsQmwF18AEEGAD19p6n4TmfGAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpi3Lt370wGBoYPQHwMiLcy/v//f+bPnz8ZHj58yPD48eMdTN++fWP49+8fg4yMDANQ0poFxIEBIJuXBSgKFwCx0VWQJfD37186aKGJGRgCsAD6/fs3KIA+g1WAOM+ePQOpOMpy4sQJkIJPQHwKiDcDBBgAYcihtIbGbDIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUCFtj2rt3L9P////h+N+/f2CMzEbGf//+xRDDpgdqHgArhUbwsMigfwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUCFtj6tpwjCnS2Yzp2tufTP/+/Qfif0x/gRhM/wWx/0JoOBvGB9JoapD1gsy6eu4kADcbQ5oyd/JRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUeNpi6tpwbCZTpLMZA9O1tz8ZmP79+w8i/jEw/QURENZfMPcvjIXERYj9hepAU4xmFNj4q+dOMgAEGACr+UQz3IvZcgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADJJREFUeNpi6tpwbCbTv3//GJj+///PAGFhEH8ZmP7+xcb6C1UCZiEkEGLYzANZBBBgAL41RzPloL1CAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi7NpwjIWBgcEbiK2AWIDl379/vhpyEh6aClIMXOxsDCz///+3FpeQYHjyjYHhz5efDCAVvB9+ARUz/AMRYAEGEIYBsMBfdAE0FX8Z/v5FEgBx/gIFCaj4i24Gspa/f0Fa/qK5A9UMNBUQa/E5DOIXDFvwew7VUCagwOffv34xwFSCBI6/fPaU4ddPkOB/cCBvfPvqORMQmwF18AEEGADSXZ0uKgg45QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKdJREFUeNqUkEsKwjAQhv9Ktq7tXbyhN+gtdCF4goou3PlYiooPqCAWCm0zE2d8EWNBDPwQvnwzkyTq9dMEwEWSSobRNrdJUVZYrvdYbY6j1uJcYlcAnTiGc65rmB0qjfjM3BbAeC3dGwrBt0E+IC2hN9DDBsMDD8MreRp+Dwp7cJPB/GvsxxQO70H44/lkrYL8/oW2rpGdDgrGZj6bqHCVTCWDmwADABEdo9VXvegQAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUCFtj6tpwjOnfv39M////B9Oo+C/T37/o9F+wHIiGicH46PqBZgIAEU5GmoIeoQQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKJJREFUGFdj6dpwjI2BgaEOiBOAWJrl379/jRpyEhWaClIMXOxsDCz///9PFpeQYHjyjYHhz5efDCAVoh9+ARUz/AMRYAEGEIYBsMBfdAE0FX8Z/v5FEgBx/gIFCaj4i24Gspa/f0FaUMz4h24GmgqItfgcBvELhi34PYfp/de/f/0SZWZhgQssePnsaamIuCQDCysrOJBr3r56zgzEUUAFEgD4NZMFqr7d7gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUGNOVjzsKwlAQRU/kbUHM/tyGlZW4ilTWrkKwsfNTit+IWgmBJG/us/BDjAFxysOZe2ei4XgSgD2QAP1oe/MhywuW6wOrTTpoLa45uww6cUwIoeukQKFAAUhqO0m8RhLO6uDbsCownMnewKzRqICHUVl5GtUMq2eoyZB+1X60qH6H8cf75j2Szk4K+LLkcjoiKXHz2RQgBUZA7w6pZqOrnOa4eAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUGFdj2rt3LxsQtwDxEyD+z/T///9GGRmZamtra2knJycGkEAyUIDh379/DN++fWNgAjJEQZy/f/+CBUEqGJAxSAUDMiZXAGQDDNNOC03MQBEABsrrX79+oQTQ3CdPnjD8/PkTrqL++fPnfWfPnn1x4sQJBgBuoxapBuMd2gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUCJljmjx5MpOFhQUTIyMjEwjAaGTAzMyMk48uBzODh4eHae/evQACDwVlbTA8UgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjCquZyKRtbM7ExMjEBCWYmMEkkGYGsZmhNIgPZYNomDiSGmS9OqLsTEt3nwQA4LgFKynwVH4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJlJREFUGJVjCauZyMbAwFAHxAlALM3CxMTUKCQqXiEsLsHAwsrGwMLIyJgsJinDwMzCwgACIBWirGysDDAAEmAAYRQBZnQBFBXMzMwMzMwYWpiRBdBUgDjMmGYwo5nBjF8FM6otYENR3YHVWnwOI8r7r/nZGEW//2Ni+PPvP1hg7uuXLyq0FaUZONkhgVx/8/FLNiCOAuqQAAAUvBbWQgxxhgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKJJREFUGFeNj8ENAQEQRd/8GYvEdSVCogBuDjrRgDLsSQc6cKEJFShEspsNBSA4CdZKzPHlzf8zNstWd+AArIFljCZTrpdz/1jki1NZuGQiSVp0ewPMbB6SAaCkgaQ0JPEcSYRXwbfhL+DuhMt/G5J/hrqLcPc34NWVWuOjxat31Ne+Z9QZ/70fMtq6IanUOG0y7BhlkSNpHZvdHiAHtmaWPQB3Dxpmsh5qIwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHZJREFUGJVjmjx5MhsQtwDxEyD+z8TIyNgoKSlZbWRkJG1hYcEAEkiWlpZmYGdnZwCyGZiAQBTEAdIQDBJFxkxwGQQmS4CZmRmO6WgGNaxFwcBAeQ0NGHgAzX327BkDKysrAw8PD1hF/ePHj/sOHz78Yu/evQwAKaocei2dPwMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHpJREFUGJVjmjx58n8gfgLELUDMxmRhYcFgZGQkLSkpWc3IyNjIBCQY2NnZGaSlpRmA7GQmIGAAYZAgkBYFq0DGcBVImGQBZmZmBhimoxnUsBZDABoosAB6zcTDw8PAysrK8OzZM5DEAqa9e/cyHD58+MXjx4/7gCpqACrxHHpLd88mAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHRJREFUGFdj3Lt3738GBoanQLwAiJsY/wPBz58/GR4+fMjw+PHjDqZv374x/Pv3j0FGRoYBKJfMAuLAAJAtygIUhQuA2OgqyBL4+/cvHbTQxAwMAVgA/f79GxRAr8EqQJxnz56BVMxlOXHiBEjBCyBeBsT1APoAoYpapz15AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA5dJREFUWMPNmMtLG0Ecx2eDRopFGijUVCpeSnvxVKSn/geFXAIVLJ7EQntoCsWKPQqpLYgQjW9UtCD4QOv7GYOoSUWJokERUfGBDxRBQw/SMP19hxGs7K6JZiGBD4bZ33y/38zOzM7KOOcsHoiLEPEZJJpPc3Nz0sDAQBbxjngvwfcsXBsfH2eRcpsgSk9Pj214ePjX6OhoyO/386WlJb68vCzAd7ThGmpQiz5jY2NMj2iCKJ2dnS+HhoZ+z83N8Z2dHX5+fs5DoZD4e3Z2JrjahhrUog/6QoMCMjUiDWKiX/aJfuHF5uamMDk9PeXHx8e6oAa16IO+0IDWyMgIu04kQRDCtbi4yA8ODoTB0dFRVKAP+kIDWtCkUWJXuSmIqaOjw7GwsMBPTk744eHhnYAGtKAJ7cHBQXaJXhClqanpVV9f38X29jbf39+PCdCCJrTh0d/fz4BekMTu7m7/6uoq39vbiynQhDY8KBQDWkGUxsZG+9TUFN/d3TUEaMNDbgeaQRLb2to8wWBQDKURQBsecuTVg9hstoddXV1/sey2trYMAdrwkF6qQZSysrLXtLb5xsaGocADXvBUC5JQWVn5eWJigq+vrxsKPKqqqr7AUy2ImYJ883q9fG1tzVDgAS94qgVJKi8vL/F4PHxlZcVQ4AEveKoGKS0t/UrPBjGzjQQe8NIKYi4qKrLTTBaPdCOBB7y0bk1CZmZmBm3BYTwX8KAyAmjDA15ak1UhLG632zc5OckDgYAhQBse8NJavvgkFxYWfqDDDJ+fnzcEaMMDXg0NDZpbvJl4TDM6gE0Hp6xYAk1owwNe9fX12g89IiU/P/9NbW1tGMM4OzsbE6AFTWjDA151dXX6xwDiEc3qEjrI8JmZGXEovgvQgBY0oQ2PmpoaBnQPRsQ9Ir24uPhne3u72JJ9Pt+tQF9oQAuaUluprq5m4MajInGfyCgoKPhBszzc29vLp6eno4IOPlghYWhAS2qaaHtnl0R0eJYd07Ozs9/SThhsaWnhdLwT9xsHHDVwDTWoRZ+cnJxcORIiBAVjV4n4dUIOJe7rs7y8vI9Op9Prcrn+0NLjra2t/4E2XEMNaqnPcyJVapgqKirYdaJ6wZITGDPdSjy1WCwv7HZ7rsPhcBLfJU60Wa3WLNTI2hTZV6Fly9S41SunFE0mHshRSiOeSNJkm0XWiAA0QkyPO72Ey1AJcgNMkphlmxKNUNz9W+Ifu9qUIf+T8EoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-disabled-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCRJREFUeNrsWElLW1EUfi9DY4yCimgcUBtUuihtN666iYlBA6LYLOoPcOO09SeI2J0TKKIiCC1oF7oJiaXdZOFGbG2xZKGxzvMYM+f1fOl7ksQk5mkCLnrhkDfd833vO+eee15YjuOYpzDY/0TiEWFZNulJ09PTsvz8/FI6LCOT8JeDZH+Oj4+3S0pK/Mn60ul0oV+ZGNLz8/OvFArFW4lE8iI7O1uhUqluXwAv5HQ6Gblc7vH7/b89Ho+tqanpx+LiIpcqRdi5ubkKAm0lFSoKCwuZnJyc0POYGz5fuHZ+fs4cHBwwpI6DyH00mUwOq9Uak1BdXV1SRKCCnlR4V11dLSUiDL0tEwgEEr6dVCplZDIZiDB2uz1A6nwmdb5YLJY7ZAwGw71EQOJ9eXl5LVSA42AwKCoBKYQh4lBnc3PzK5H5ZDabI8jU19f/ezZeOGZnZ3VlZWW1paWlIZJQQQhFsoY5mAsf8AWfDQ0NbPgzt6RjkZiamqrMyMgw5eXlMV6vN6TEYww+4As+4dtoNLLCPWHEWjUSSkZTZWWlFLEWG45EeQOfFCoTnX4gNSISLVoRdnJy8jUl5fOsrCzRobjP4BO+gdHY2MgmUkRCy1Sbm5ubMiWiB3wDgw6/E0YgJpHm5mYlFaSqzMzMtBGBb2AAi1S6jkWE1Wq1GmIric7oVA9gAKulpWWV44EiiFDhUhPbtKkhDGDQCiqiw5/YHaKJIHFVWPfpJsJvBZk8ZvBOjlABCmXyfSX8sYPHiCjlEUSo8Lh9Pl/aFQEGsOISOTk52b+5uUk7EWAAKx6R4MLCwibtshxkE9MoiRlYJBcXFxywhPyIJsKtrq66qH/YuLy81FDjkxYiV1dXaKA2gCWsmDtEkK9bW1tLarUa9SQtRI6OjhhgAGtiYoKLt9cE+vr6VnZ3d7cohinfa+ATvoEBrER7Ddatm2QzU3Fro6LDkqVECbfbzTgcDoTfjFNghVfvaCK44xsbG7PTLmmhHqK+uLg41Gk9tm4cHh6CiAW+gTE6OsqFKxILAXddvb2939bW1pZ2dnYYl8v14HBgLnzAF3zCNzCi97N4PStOnpFl9fT0aKlvNVCrx6LLEjPOzs7Qq3Jk1v7+fpDAbusdGRm5ZdDe3n5/88yTUbW2tlbV1NQYCwoKikAGSzteuCA3lujp6SnCsbe8vGyemZlBOJwgMTw8HLGtd3R0JPc5weeREtbW1vZSo9G8oU4LHZxcqVRGPIwwXF9f+8g21tfXV8bHx3+hkPLh8A8NDd3pLTo7O5P/wOJzSU6mgFGXpdTr9UXUnavDPzm3t7f3bTbb/t7eHsA9vPlwb3BwMGaD09XVJfrbVyAEhaT8r4S/Lqw4JLqfLwP4DQ4MDCTssLq7ux/+Ec6DszFWXZAnxInZe57U3xJ/BRgARVYyv4nD3moAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-disabled-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGhJREFUeNpiVFNTE+Dk5IxiY2PT/vXr19Xv378vYxEVFU2QkpLS5OHhYfj69av+06dPOVmkpaWV5OXlGYCqGYCqGBgZGZWYgCrugQRYWFjAEiA+05cvXxb9+PHj6p8/fxhANJA/HyDAALRmJzIlcakAAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB1jUFNTk9bX199oamr6E0SD+AzW1ta7QkND/ycmJv4PCwv7D+QfYAAyPpeWlv6vq6v7D6LDw8N/MiQlJe0CCTQ1NYElkpOTwSrlysrKtoMkQDRQpRwAeJEtgtzX+HUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/spinner.gif
Content-Transfer-Encoding:base64

R0lGODlhEAAQAPQAAO7u7gAAAODg4IGBgdHR0UFBQXJycgAAAFJSUiEhIaGhobKyshISEpKSkgMDAzIyMmFhYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAAKAAEALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQACgACACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQACgADACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkEAAoABAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkEAAoABQAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkEAAoABgAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAAKAAcALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkEAAoACAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAAKAAkALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQACgAKACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQACgALACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-ascending.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK1JREFUeNpi/P//PwMhwITG59DX1+8B0bgUseTl5YUyMzMXJwMBkM+KTZHAvXv36kVFRRlevHhRCuQLoStiLS8vj/7z54+yoKAgw79//+QLCgoSYKbBFAleuXKlhJeXl4GDg4OBh4eH4datW3lAE8VgiliBbkkB6pYBKWBiYgIrBAKp9vZ2kNvYWEBuefv2rZ+qquoXfn5+TkZGRgZQsACt/f7u3TtvoPx0gAADAHykNUXFhlgVAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-descending.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANdJREFUeNpi/P//P4+JicnuX79+WTAyMjLAAFCcgY2N7cSZM2dcWYB8/rKysiOLFi2yYGVlhSv6/fs3Q0JCwkGQPEjRj7CwsOsXL1789OzZMz6Qaf/+/WOQl5d/HxISchMkzwQkPgLxBR8fn30g3SAAUgTk7wYyz4PkQYr+APEDS0vLjcrKyu///v3LoKam9sbU1HQzUPwhSJ4J6gSYabu/f//+39/ffzuQfxGIP8F9AcWCQBy2cuXKtUA6GIj5YXKMIAIKmIFYFoglgPgZED8BOQ8kARBgAHkkbCsrrUGyAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-highlighted-pressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNo8i8sNACAMQpH9p6oTGb2oB7Sx9kD4vFDMKufalEQAxHVB2SVEvvIczPfHlZ/fnY3ejgADAPV/LBeRV6LeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUeNpi/vT5C9OPHz+Z/v//z8TAwACmYRiZz8AAonHLo/M/fngHEGAAmHc1lNgXMmwAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-pressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiOHPmDBMDAwPT////cdIwjIuPRT3LkydPAAIMAGirLBgXU933AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNocw4kNwCAMADHd/qtlF74QfqgaS+a9x//e68857L1Za/k5J2MMeu+01jAzaq2oqi+lkHMmpeRjjIQQEJFPgAEAIdRCSGGFwR8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableviewselection.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAACXBIWXMAAAsTAAALEwEAmpwYAAAPU2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarVd5NNT/17+f2W2DsWYda7KF7LLvawyyFY2ZsTVmxhhEZElJaeGbRKlot6QokZISlbRIUigVXy1oQSIxvz/0/X6f5/c7z3nOc85z/3if1/ue+7r3de95n3PPG0CcTOVwmCgAiGfxuBRXB3JwSCgZ/xKwIAwSYAFaVFoix97X1wv+R5t9DggAQK8elcNhwv/NiNzgkFAARBcAJKOXsR0ASEYu4wAAkEzhcXgASAwASNJiqHQAJB0AdLkBFEcA5BwAEKOXcRMAECOX8T0AICbTonkAyAsAHIlFj2UB4CcAcDZ0RiINgKgLAHR6Ii0egHgAAOUQH8+mA4g9AwAtGofLAxD7BQDqwSGh5GXJUWgAywcAuMF/fJvnAOryAVSm//GpDwBIdQJUBf3jm6YAAgCI9OPEqDVGAACACDsAYF/z+dOaAPgigMVCPn+hks9fPAmAHgJoY9KSuMm/54UgDwH+t/tyz78NjQCgAEAZ4mEEiUAmUaXoEIw2VhqHxksSrAUYgieEJkUciEdFf4mzSeOSVKlJmSjZablUBYziQWV58nFVfbUWDVvNdi33Va06rrot+sqrSwzRRlvWPDUxNS03m7Zwsiy2+mRtY5Nie8UecbBzDHc65PzA5bObkLu2h4snzSvTu8Sned1bPxRlpb9XwObAnesrgm4G94dMh63YYLjRMZwakb6piHo68irtAX2AMR61ECMQKxGnsFmFqRm/mmXENueYJVhwjRJ1eKuSVJJlUyS3CG5ZTP2cNrj1fvrVjPPbDmZmZsVle+eYblfOFcz9uqNn55W8g7u259N3O+9RK0AVfNw7um/hgEKhadG6P8IPJhXvPlRT0nK4p3So7MtRgXLZY+rHTU64VARUhp+MOZVyeuuZvLMHzu05v7+qsLqopqi2/EJpXdHFgku59Vsbki4nXKE1rr/q1WTXbHRNrYXUsnR94sZAa+vNi22Hbm27Hd3uf2dth2aneOf83eF7LfdPd+1+wOsOeqj3cPZR9eONT8SetPewnyo/7evNebb62eu+gudWz8f7S194vFh4eXYgeFBwsHmI8UrqVffr1OFVw2/eHHhr93bq3dmR0FHiaOef28ZMxiben/5A/6j2cfBT2Xj4hNrE6GTN55Qvjl+JXz98a5o6MM2e8ftuMavzQ2dOb972Z8xC1SJxqYnPBwAxMAce3EbIyC6EjypCm6InMDewR3H78YcItQK9QmhhT5FC4hsxa/EjEjjJzVIPZcxla+Xk5NMVRpTslM+oiKjGqHVrGGjmrRxapaXN1WnXk9QPWF1sMGSktibY+KTJgBmYW1okW1ZY3Vs7ZaNi62sXbV/kUOd4z2nEeclVzs3M3deD4cnzyvIu8Dm+rt63ze8B5bn/WMBU4Oz6pWCREFKoRJjCBpWNCuHyEfKb5KnKkXI0KboEQyAKouajP8e8i30R1735OrMmvpy1j53FSUyI5volOvEMk5SShZPnU0a3PE29kXZ2a3H6jozYbRsyXbIMs+Vy0DmT24dy+3YM7/ya9ysfu1twj3iB4l7dfSb7bQ7YFboXhf1BPUgv5hzaWrLj8J7S/WUnjlQcrStvOdZx/NGJ5xWvKkdOTpz6eQZ9lnCOeF62SqvauMa61v0CpS74IuNSUn16Q+7lfVfKGquv3mi63dx97V3L2PXZVsJNUpvCLe3bVu1+dxgd3M70u1vv0e47dql0LT7o6b7wMO8R7bHtE+knH3ran5b3cp459cn1fXne1l/yIu6lzQBp4NXgpaG8VxGvjYfxw+/eXH675x11xGxUePTDn51jp99nf9j4ce0n8jh2fHKie7Lxc+WXgq9bvsVMhU77zrh/t5+1/GEyZzJv/nPtgvUvl0XfJSrfg88HACIYAA3OwjzijzSjdFDn0UboDgwdK4K9g8vE2xMECW8FrguWCWUJs0ToxA2i68UCxSmkYImNklSpOOlUmTzZwhXlcvXytxQ6FfuVPil/I8+pImpC6gQNkqboSmEtuVUC2hgdRGdad0JvSP/+6kaDcsMsI8YaR2N9E4LJO9M2swrzXAu6pYOVvNX3tX3WjTYHbVl2bvY6DojDkON1p6POKS4+rnpuQm5j7m0epZ4cLxdvBe9ZnwfrTvhu8fOgqFNm/e8HHAtMWO8QRAoaDW4IyQr1D1MMe7/h8sbscL8I5YgPmy5SUyOdaaK0l/STDGaUYdT36OaYzFifOIm4/s3lzNh47fivrCb2No5XAilhgHs6kcWzSRJIepZcmcLaYp6KSe1JK98an26dIZIxtK06My2Lkq2aPZNzb/vR3OQdrjsVds7kde+qzE/dTdmjXYAqGNjbsK94P/uAWyG5cL7o+R9NB4uLuYc8SlYexhweLr1RduxI0tGgcpNjksfhBKpCuJJ0UvKUzGn5M8pnlc/Jn5etkqqWrJGolbwgVSd7Uf6SfL1Ug8xl5StajXpX9ZqMmx2u+bVQryfe2NlafvNu2/CthXb1Ox4daZ2X7n68r9616UFl99wj/8cXe8SepvRO9+X3S7xoGEgYWvNqcXjhHWbUdaz6o+WE5Ze9003zdXw+wPLuAwDAmQIcjgAIUQTwcwUoWAuw0hxAahOArwhAgAWg9CUB+X4bEIf9f++PFWAJoZAO5XALRhAMooV4IRzkINKMDKNwKH1UICoDdRr1BDWPVkP7oTPQVeiXGALGHBODKcM8wqKx5th47EnsIE4K54vbg7uLJ+Bd8TvwdwkihPWEMsKIgJ4AT+COoJQgXbBBCC8UIdQkTBKOF74noiGyR2SaGES8JqohWi4mLLZV7Ks4S3ySFE/6KsGTmJfcLiUsdUBaRvqUjL7MNVlP2eEVyXKCcqfk7eVfKnAUJRSblUKUfimfIq8jL6lUqW5UI6l1qGdomGv80Gxemanlskpo1UvtUzqpuh56WvpY/eHVHQbnDHcbpaxhGG8w8TddZ+Zs7mLhbuljtWltrHWKTY5thV2z/ZDDZyeSs4VLtGuRW5X7aY8Dntlead4cn+R1Cb4JfgwKy58dkBlYsH5vUEnwhZDboT1hYxv44UoR1puCqDmRlbT7DHSUYTQ9piy2dzMwHeJ3sZ5w5BNiuVcSl5I2JTduEUllpT1JN8k4mSmetS2bv52ZO7kzPm8iP2b3lwLO3rn9uYVaRfUHPYv7SraVuh4JKGce31Fx9eTjM5hz5lUJNacvjFxa0RB15djV99fWXk9sfXxLpJ3acfUe0hXSffzReI91b35fywvSgN9Q9us7b6ZGZP50e0/5mDy+bTLjS9K30GnlmbHZ0jnd+bMLAr8oi+FLWXw+ABhCFByCDviGKCHuCA85jnQhsygyyguVhjqLeoZGo43QVHQRugM9j9HDbMIcwjzE4rEO2AzsdexPnAUuFXcDD3gnfD7+KUGBEENoEhAQCBWoFlgSDBK8JCQkxBC6JawhnC38TsRT5BqRTMwjzorGir4S8xPrELcUv0EyIV2RsJK4Jekm2SMVJjUmnSSDlzkmay77fAVHTkiuSt5bfkahTNFGcVzpmLKn8hz5okqcqrLqoFqFeqTGSo0JzYsrs7TWrVJc9UP7kc4Z3V16Ufquqw0M5AxxhjNGI2ueGrebtJleNmswb7Cot2y2al3baf3M5o3tJ3uMA9FxpZON8waXNNcSt1r3eo8qz2qvOu9mn7vrenz7/YYp3wKQQKX1ekHmwYEhvND8sMoNNze+jcBtUqJ6RsbR9tIbGEPR+BjT2Ki40s23mVMsbTaNU57wMBF4VknJyZdSplLN0xK21qb/2GabuTPrQY7Idp/cih1Tefq7duf371Eq4O59sJ98ILHw9h+iByOLb5eoHC4rszsyXl52PKJCqrL3VMEZ73Pq599X19UW1G26ZNagcHmmcaip+drl6+Wt2W3022F31nYa3yN3SXSLPJx7PNzT0dvYd65/z0vmoMcrm2HpN1Pvno3WjuV8WP9JaXx8suVL3jfvaeJM12zxnPdPkYXriyw+HwAsIAWuwAyyBklA6pEZlAlqC+oGGoV2Re9FP8coY5iYJiwOG4Q9j13A+eBO4/j4YPxFghghkfBUwFigXBAvyBUcFgoQuiNsLdwkoivSQDQmXhV1FH0gFi42Lb6bpEvqlkiWlJXsksqQNpB+K1MiS1khuaJfrlg+REFNYUrxmlKhMo28RkVIZUK1U+2Uep4GWzNspZeWzSp9bR0dVV01PSV9rdV6BmaGbkZha9jG+03Omj42+2GhbOlqlbi21nrMVslug/0Rh2EnXedMl2ducu48j14vDe99PhO+FL8a/xUBGYEfgtyDm0NVw4o2EsLTIqapUZEDdH/G42ifmJtxTptb4+1YjRy7hLZEW97dZJ+U3tSItE/pqRlzmXnZ8jn1ua47HufRds3vPlpgtPfZfm6hcNG1g5TixZKjpaSy5COD5b7Hbp0wrTh/UulU5RnNs1Xn9asaasxqr9fZXeyod294e4XbONuU1rzY8scNjdZzbdq3atr179R1GtytuU/sKugWesh9NPLEr+diL/EZs+9+v8aLrJfPB2WHgl8dft3/Ruot5V3eyIXR9j8Hx/gfpD6qfVIdV5lQnlT8vOLz4pfXX1u/lU/FTBtOT89c+h4/S57t+5E0Jzx3at54/uZPz59dCxYL537J/Er/dW9RajFy8cLiwpLr0oGll3w1PpPfyOcDLP+XAABA0JHNZHPJXo5O8P9r8cykv2qQAECYFemz7jf+wOH5BgCANAD8TEz2dwYAMQBELCrWxf03JtOpTp4AoACAGKTFOPoAgDAA4hXFdaEsc5HgOKqHLwAQARAWgxXov5wfSecwfb1+430cngMFAGQBkBOMROe/YprSYgKCfnO7uEmUQABQB0BebGZ7Un7X+kVnOP3WhiKwmD5ey3VRsrE89wAAkARA6YMLUIEL0cAAPfACR3D6fZKBCmRwBDZwgQGJ4AKjwIXov6PWwyhwIfbfWHoQBVTgQjIwIBE2wxhwIT4iNocL5H/LTgM2JAETGJAEXINqg48Gv/6OcQQ2MIEN/7A8/8PzV55/YmOBDuz/lp8JbOBGxOZw4+ujkg+zUy3Xx2A0MUYYE4wDxhpjg7EAMkYaIwd6GGOMOcYeY4uxwphgLB5NXJ34u87yfCL/7tPzL83AANZ/zIz2X9TA8v8dAAAnBnA0HwCg/dK5/3hrPMYWHgCAI5uTyo2NjuGR7TkcJkOX7M6i6euSjQwMLOBf/0ZN7hNwtO8AAAAgY0hSTQAAbZgAAHOOAADi5AAAhvsAAHXhAADNcwAAMq0AABrd66B7UwAAAD9JREFUeNpUirENgDAQxKLrKCiYi72Yjo3y9tOkIJVl2eN+3lznkTkr2ilcJEXH5eCvGTXYAUIZNNDR/QO+AQD8FEZFeDuoxQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAWCAIAAACOpGH9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jWLRqJ8OFq3cYPnz8zPD//3+qYKBZAMWVP/kpEKROAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAYAAADtlXTHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADdJREFUCB1jWHjqkTwDkIgHEftAxH+GRat3/Wc4f/XOf4Z3Hz79Z/jz9x+NCLDxYCthloOdoQAAdj5sTxjpYWAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAYAAADKO/UvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApdJREFUSMed1UtPE1EYBuAaMS7QhMiCxhjdqBtxqT/AG0tNcGGicaEu5EeoS9l7CySmBakhphIjJRHkqlQoNG2RAikU7CW2tbYULKD09vqe4TQ0k+l1kmc575zvnG++o+uaCejKOEAH6TAdpUbS0wk6SafKvXyIjlATnaWLdJVu0C26Q3eLBdRRvfzieWqh+/SEXlIv9dMQjWgFiK830Gm6RG30nMYpTFDTCjhG56iVntIXShu+raFjYBYd5jG8No/A0PsJXe8G0U3qEhpkwG3qpIBx2odOiw1v3g/j46AVo5MOTNkXYJ/zwOlegWvBi8JNrJcltMqAmMHqhaFvHAPD05hxLsGzGkQwFMWv3wnEE5tIbCSxsZlEYRl6uQeiBL8IMH0Yx8SUS3k5Gksgub2D3VQKmUwWuVwOOew9+RCximZ6SBNGmx89/V9hnXXDF4zgT3Ib6XRGeVHr0clGapLn/4xSxiGHsgIRsLX9F5lsFtqv74eITjxD92jUOPUDlhEbPN6AsgIRUO7RyVa+QI/oZ9eYGzbHkrJ5SgllI/ZCRF9coReiccyjDmUVya2donugFSL24zqZRMiQdU45xn+7qYoC8iHH6Sb1iZBJ+6JSijjGmkNsLg9i65vIVliKupy3IsTqXK4ppLFwYz/PemoqJ3/Ejylknl5RNla0dzUhhc021m3zYdEbrPqI821/TbZ92mJfVX64apqt8Ads2xtCfjg8waraXj0K2sUw6pnxYdkfrvgHLDaU4iYGza+FKxoF6vHYXDgeu1na8HwAoej6/lDKag8l9aBull3cLgd1podhg98DcK1F4A3FNcdjsSvjstxs0YgTFKnkyih1eT2Ql9creXlZSl1eWteovpZrVB1WV+pC/w9TNVqlMEGHagAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAYAAADKO/UvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUSMellUtPU1EQx0uAsEASIgubaHRj3IhbPwBG3ZpgjInGDW78FC71AygEEtMWITaGGiIlsdgioKVP+5CHaS21D9PW2lJqLUb6GP9Tz60V6eWWnuR3d/eXmTlzZlQ6Z+wMOA1OATUYAH2gB3SCDqCSgz93wG1wE1wDl8FFcA6cAMdAt5yMPxawAOaAHoyC+2AEXAUXRIS9oKuZhA4gCZbAI3APDIGzoF9E9a9k8rmJdECjf0VPZiw0PvOGxuddpFkNs6wEVsADMAzOg+P7RSrfRoi865/I7Q+Qzb1Bi+889NJkpacGM00YHaS1R1gWAxPglhD1N6am2skXKLdToGwuT1+/5SieSFNgK05O70eaN9tJ82KJNNYQizJCNCxS65WKrSKcKlOtUrlcoV97e1Qo7lI6k6vJlm0+mp6ti6IitSFR7O66ZP9hYalUpu+FIkXiKbK61mlq7i1pHVEWLYtiD4rr7zhQIkVXrlToR/FnTcQRaRc8UrH51q6IPupsKpEOizgiTs1oQaFtn0lc/4hoyJ5DJRwRp8Y14mLrLH6WpERDcmf3HSqRasTFDiIaw6JHasgx8UQGFEn48K19wfWbV/2SRC/emlqxhGvDKdneb0qSWXADnFQsqSClzHaenOjstiVWb1CSPGs9HXQzP4vXrnoko0curMEelEbF0a54MxSnSUekvWYzurfaa3tPAFE4aw9w5UgPMBhN0pSzPpwetjwK1sJJmv4jyCobSpW/QymR3ibzWkxKoXE8DsqOx1AiS75wikwfYgi/9nNZ1IBTuC4E/w/qJisjJSbYY1HES7Iro2F5GcXLHBONdLeV5SW3RtVK16jcQu9SstB/A7wYWu6etp7HAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdFJREFUOMuVlNtLAlEQxucp6CnoKQj6w4L+gKC3iqR66E5IN6Ky6EZKmYaR0c2yoMjMXNJASbtApUTZxbVVS9t1mnPKiDJcB/bt/M7MfOf7FmpbRiD71bXqoKF9DJq7J6FzwFDaN2quHplesk7MrgjT8+vyjNmGevq+gXoCGrvGoaPfUDw4YdEYFjbFZZsDd/aP0Sn4UTgJosd3jl7/xSdU3zbKb9cOG8umjOuuVfshHnlOMXgZwtBtBO8fovgUjWFUlFCMScg7MKBHZyqftWxd7zq9/HDkMYpSIompdBplWcFMJoMZ/Cw+knbIWESAy+H24VXoDl+kBL6/y/xgroL2fj3QSBrWgQHxxCvKioK5j39BtHTJqt35FLy44R0YkK+AJKx0HZ/yZflImL/AuuGwsi5SPPnvDn8geocAk/UtlUa1BQeCX2SjMVlVQ25vQHx8jqGicrQsFCgYovGsBY9HQlQxIZhdVEMkeQl5TSxIcv2CDcjRGmZQ1Y9LNgKKQhF1E1TbiELHDAt7zpPy6/BdWJVheTSGjTC3aIcDt6+CQFfeaGRD2KszcZA6FtOoTbSj+B1C5VcIf8Ud6AcCa9uHTJzSs8tQTfg2skIXeH7G/QMDueJzvPRB+QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbVJREFUOMudlNtLAlEQxs9T4FPgUyD0/wm9VRTVQ3ciuhGlRlakmF0oMjSxrCgyNS0VrLQLFEp00VzbLNRdp5kto6Jy7cDZp/3tN/PNfMsM8w6Yxjs1axf0JqtfM7VsGdDNq7uGjMqWngnW0DHG6tq0rLZVI10AYCx4dA6B8Bn4Q1Fw+49gc/cQVhwuMC6sccP6xcbOQaOiqXuc1b+DEsSleUhxPCRTabi9T0Hs+g6iFzHYD5yAzemBSbPd2ztqriLV+nbdG4QPKNAtFEAQRMjmcsBnnuEukZLgbXcQTIvrV33aORWBH9D3Qx/I5wV45DNwGbsBly9MoLd3xFzxK1RUF0QRnjIvEkiKWGrjn1DxEEiKVKrN6U6iOZUlIVKkUqlHMsew4FCXhIo9kjmnqIbjsMiC6JCrcRzHlisQlw1Rb1Si5+A4KxsSscTEQ5o2hy8b8gUjEfnl4bbQmuF+/suI8izHAXNoednDLXuN/BgVheyFvYrfxHfcIRUurLxoIODd84WrZ5acDMP4QwjFLyHksKRmVFAQ0K+dYx8h/Bx3fDGAtlpxMWuwaeXqhofhD0dS+Bz3V7HA8uslKDy0AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAADCAIAAAA2iEnWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUCB1jmTNnDicnJ4uMjIywsDALEEtKSgIALM0DDeT4y3sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAIAAADdv/LVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABRJREFUCB1jWLVqFZOWlhbDx48fARyiBVLivNzsAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAADCAIAAAA2iEnWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jWrp06Zw5c5jU1NRkZGSYJCUlhYWFAUybBRTduo1wAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7QOjdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1juHLlysePHwESGQVQhb5n0gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+P//PwAF/gL+n8otEwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7QOjdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j/Pjx4+PHjwETfwV+HAwP5QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1jvHLliqysLOPp06clJSUBLX0FglncIWUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAIAAAAW4yFwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUCB1j+P//P9OnT58AF6oF1hwiRUMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1j/vjxY0xMDHNOTs779+8BN9MH/68NXLgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAHCAYAAAArkDztAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGZJREFUCB0FwcsJg0AUAMAJ+9YPgUV4IIhevHizBhtIk2kjJeSYEtJGLpmJ5/t7Q0HFgA41UHDHhBmJFqiYsOPEgTUwYMaJBy70gQ6JA9fv8+rHcRSoaFjRb9smMwUKBjTITMuy+AM42wji1WBJjgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAHCAYAAADJTCeUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACZJREFUCB1jXnjqkTxzYGqhP4joBRELmaNcLRuY6+vrG5jb29sbAOK+DN7MoThrAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAHCAYAAAArkDztAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG9JREFUCB0FwbEKgmAYAMCDPrHJXWp27AFa2trber0eJdpa23QIhAaDH0IQS4m6i9O1XWPGhDdmfANb9Eh44oUhcMQDNW64Ywoc8MEZMKCPaC7GccyzzX6HGg3aqKpKSklHjhUKZFGWJeh+oMASiz+A7SOInCfK3QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCB1jWHjqkQIQxwPxfiD+f+XKlf8fP378DwDW+RK/bGv6kwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+P//PwAF/gL+n8otEwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1j+Pjx4/8rV678X3jqEQjvB+J4IFYAAP2REr8fi4n2AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUCFtjWHjqkTgQewDxZCD+cfr06f9Pnjz5zwDkCAKxKRDnAvFOkCQQgyU4gVgeiB2gkiCd60ASLEDMD5U0hRobBpJghEpyQo0F2SkDAHWKUDJqcdSvAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABpJREFUCB1j+Pjx43+GhacegYk9IFYciJAHAM/uDz+C0SZ2AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUCFtjePLkyf/Tp0//X3jq0Q8gngzEHkAszgAkYII7gTgXiE2BWBAksQ6qEiToAMTyQMwJkgiDajeFCvIDMQtIQgZkJkg7SCVIEIgZAdauUDJ/hcSRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUCB1j2rx58//Tp0//v379OpgG8Zn+////C4gZkPBfpl+/fh38/fs3AxI+wvT58+eUjx8/7vjw4QMDiP706VMcAOlpQfMaZOfrAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAIAAACZnPOkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUCB1j3rx5cxEYJCQk+Pn5AQA+dAbTLdUgHwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAExJREFUeNpMxbsNgDAMBcCH6wzg1amQWCGzUMEAKf1JZSMCdClOt9RaV2ZGKQW9d7TWQGOM+4PJQxFxZiYmF7n7rqqHiODfzLZXgAEAth07HqinDKIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi3Lx580wJCQkGHh4ehi9fvjC8ePGCASDAAFQeCLRojHkfAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpirKysFODi4opiZmbW/vv379Vv374tYxEWFk4QEhLSZGdnZ/j586f+u3fvOEGCquLi4gxA1QxAVQyMjIwqLLy8vCz8/PwMPDw8DKysrAzfv39nYmJjYwNzkDETUDkDOgYIMABjBxggiQuq/QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB1jqqyslG5ubt7Y1tb2E0SD+EzCwsLzpaWl/eTl5dlANJC/FCRoLyEhwQAUYADRQL4NEy8vLxs/Pz+DoKAgA4jm4+NjZmJjY2NgZWVFwUyMjIwM6BgAhF0QgRCnPUsAAAAASUVORK5CYII=
*/

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;25;Resources/alert-error.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-error.pngu;24;Resources/alert-info.png64;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-info.pngu;27;Resources/alert-warning.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-warning.pngu;33;Resources/button-bezel-center.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-center.pngu;42;Resources/button-bezel-disabled-center.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-center.pngu;40;Resources/button-bezel-disabled-left.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-left.pngu;41;Resources/button-bezel-disabled-right.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-right.pngu;45;Resources/button-bezel-highlighted-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-center.pngu;43;Resources/button-bezel-highlighted-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-left.pngu;44;Resources/button-bezel-highlighted-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-right.pngu;31;Resources/button-bezel-left.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-left.pngu;32;Resources/button-bezel-right.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-right.pngu;29;Resources/buttonbar-bezel.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-bezel.pngu;43;Resources/buttonbar-button-bezel-center.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-center.pngu;52;Resources/buttonbar-button-bezel-disabled-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-center.pngu;50;Resources/buttonbar-button-bezel-disabled-left.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-left.pngu;51;Resources/buttonbar-button-bezel-disabled-right.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-right.pngu;55;Resources/buttonbar-button-bezel-highlighted-center.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-center.pngu;53;Resources/buttonbar-button-bezel-highlighted-left.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-left.pngu;54;Resources/buttonbar-button-bezel-highlighted-right.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-right.pngu;41;Resources/buttonbar-button-bezel-left.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-left.pngu;42;Resources/buttonbar-button-bezel-right.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-right.pngu;38;Resources/buttonbar-resize-control.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-resize-control.pngu;38;Resources/check-box-image-disabled.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-disabled.pngu;41;Resources/check-box-image-highlighted.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-highlighted.pngu;44;Resources/check-box-image-mixed-disabled.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed-disabled.pngu;47;Resources/check-box-image-mixed-highlighted.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed-highlighted.pngu;35;Resources/check-box-image-mixed.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed.pngu;47;Resources/check-box-image-selected-disabled.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected-disabled.pngu;50;Resources/check-box-image-selected-highlighted.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected-highlighted.pngu;38;Resources/check-box-image-selected.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected.pngu;29;Resources/check-box-image.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image.pngu;41;Resources/default-button-bezel-center.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-center.pngu;50;Resources/default-button-bezel-disabled-center.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-center.pngu;48;Resources/default-button-bezel-disabled-left.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-left.pngu;49;Resources/default-button-bezel-disabled-right.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-right.pngu;53;Resources/default-button-bezel-highlighted-center.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-center.pngu;51;Resources/default-button-bezel-highlighted-left.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-left.pngu;52;Resources/default-button-bezel-highlighted-right.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-right.pngu;39;Resources/default-button-bezel-left.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-left.pngu;40;Resources/default-button-bezel-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-right.pngu;37;Resources/horizontal-track-center.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-center.pngu;46;Resources/horizontal-track-disabled-center.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-center.pngu;44;Resources/horizontal-track-disabled-left.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-left.pngu;45;Resources/horizontal-track-disabled-right.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-right.pngu;35;Resources/horizontal-track-left.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-left.pngu;36;Resources/horizontal-track-right.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-right.pngu;37;Resources/HUD/button-bezel-center.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-center.pngu;46;Resources/HUD/button-bezel-disabled-center.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-center.pngu;44;Resources/HUD/button-bezel-disabled-left.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-left.pngu;45;Resources/HUD/button-bezel-disabled-right.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-right.pngu;49;Resources/HUD/button-bezel-highlighted-center.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-center.pngu;47;Resources/HUD/button-bezel-highlighted-left.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-left.pngu;48;Resources/HUD/button-bezel-highlighted-right.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-right.pngu;35;Resources/HUD/button-bezel-left.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-left.pngu;36;Resources/HUD/button-bezel-right.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-right.pngu;45;Resources/HUD/default-button-bezel-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-center.pngu;54;Resources/HUD/default-button-bezel-disabled-center.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-center.pngu;52;Resources/HUD/default-button-bezel-disabled-left.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-left.pngu;53;Resources/HUD/default-button-bezel-disabled-right.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-right.pngu;57;Resources/HUD/default-button-bezel-highlighted-center.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-center.pngu;55;Resources/HUD/default-button-bezel-highlighted-left.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-left.pngu;56;Resources/HUD/default-button-bezel-highlighted-right.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-right.pngu;43;Resources/HUD/default-button-bezel-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-left.pngu;44;Resources/HUD/default-button-bezel-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-right.pngu;41;Resources/HUD/horizontal-track-center.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-center.pngu;50;Resources/HUD/horizontal-track-disabled-center.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-center.pngu;48;Resources/HUD/horizontal-track-disabled-left.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-left.pngu;49;Resources/HUD/horizontal-track-disabled-right.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-right.pngu;39;Resources/HUD/horizontal-track-left.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-left.pngu;40;Resources/HUD/horizontal-track-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-right.pngu;31;Resources/HUD/knob-disabled.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob-disabled.pngu;34;Resources/HUD/knob-highlighted.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob-highlighted.pngu;22;Resources/HUD/knob.png62;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob.pngu;46;Resources/HUD/scroller-down-arrow-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow-disabled.pngu;49;Resources/HUD/scroller-down-arrow-highlighted.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow-highlighted.pngu;37;Resources/HUD/scroller-down-arrow.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow.pngu;49;Resources/HUD/scroller-horizontal-knob-center.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-center.pngu;47;Resources/HUD/scroller-horizontal-knob-left.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-left.pngu;48;Resources/HUD/scroller-horizontal-knob-right.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-right.pngu;52;Resources/HUD/scroller-horizontal-track-disabled.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-track-disabled.pngu;43;Resources/HUD/scroller-horizontal-track.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-track.pngu;46;Resources/HUD/scroller-left-arrow-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow-disabled.pngu;49;Resources/HUD/scroller-left-arrow-highlighted.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow-highlighted.pngu;37;Resources/HUD/scroller-left-arrow.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow.pngu;47;Resources/HUD/scroller-right-arrow-disabled.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow-disabled.pngu;50;Resources/HUD/scroller-right-arrow-highlighted.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow-highlighted.pngu;38;Resources/HUD/scroller-right-arrow.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow.pngu;44;Resources/HUD/scroller-up-arrow-disabled.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow-disabled.pngu;47;Resources/HUD/scroller-up-arrow-highlighted.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow-highlighted.pngu;35;Resources/HUD/scroller-up-arrow.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow.pngu;47;Resources/HUD/scroller-vertical-knob-bottom.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-bottom.pngu;47;Resources/HUD/scroller-vertical-knob-center.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-center.pngu;44;Resources/HUD/scroller-vertical-knob-top.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-top.pngu;50;Resources/HUD/scroller-vertical-track-disabled.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-track-disabled.pngu;41;Resources/HUD/scroller-vertical-track.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-track.pngu;48;Resources/HUD/segmented-control-bezel-center.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-center.pngu;57;Resources/HUD/segmented-control-bezel-disabled-center.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-center.pngu;58;Resources/HUD/segmented-control-bezel-disabled-divider.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-divider.pngu;55;Resources/HUD/segmented-control-bezel-disabled-left.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-left.pngu;56;Resources/HUD/segmented-control-bezel-disabled-right.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-right.pngu;49;Resources/HUD/segmented-control-bezel-divider.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-divider.pngu;60;Resources/HUD/segmented-control-bezel-highlighted-center.png100;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-center.pngu;69;Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png109;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-center.pngu;70;Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.pngu;67;Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-left.pngu;73;Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.pngu;68;Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png108;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-right.pngu;61;Resources/HUD/segmented-control-bezel-highlighted-divider.png101;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-divider.pngu;58;Resources/HUD/segmented-control-bezel-highlighted-left.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-left.pngu;59;Resources/HUD/segmented-control-bezel-highlighted-right.png99;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-right.pngu;46;Resources/HUD/segmented-control-bezel-left.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-left.pngu;55;Resources/HUD/segmented-control-bezel-pushed-center.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-center.pngu;67;Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-center.pngu;65;Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-left.pngu;66;Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-right.pngu;53;Resources/HUD/segmented-control-bezel-pushed-left.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-left.pngu;54;Resources/HUD/segmented-control-bezel-pushed-right.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-right.pngu;47;Resources/HUD/segmented-control-bezel-right.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-right.pngu;39;Resources/HUD/slider-circular-bezel.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-bezel.pngu;48;Resources/HUD/slider-circular-disabled-bezel.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-disabled-bezel.pngu;47;Resources/HUD/slider-circular-disabled-knob.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-disabled-knob.pngu;38;Resources/HUD/slider-circular-knob.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-knob.pngu;39;Resources/HUD/vertical-track-bottom.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-bottom.pngu;39;Resources/HUD/vertical-track-center.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-center.pngu;48;Resources/HUD/vertical-track-disabled-bottom.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-bottom.pngu;48;Resources/HUD/vertical-track-disabled-center.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-center.pngu;45;Resources/HUD/vertical-track-disabled-top.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-top.pngu;36;Resources/HUD/vertical-track-top.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-top.pngu;27;Resources/knob-disabled.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/knob-disabled.pngu;30;Resources/knob-highlighted.png70;mhtml:Browser.environment/MHTMLData.txt!Resources/knob-highlighted.pngu;18;Resources/knob.png58;mhtml:Browser.environment/MHTMLData.txt!Resources/knob.pngu;36;Resources/popup-arrows-pullsdown.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-arrows-pullsdown.pngu;26;Resources/popup-arrows.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-arrows.pngu;50;Resources/popup-bezel-disabled-right-pullsdown.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-disabled-right-pullsdown.pngu;40;Resources/popup-bezel-disabled-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-disabled-right.pngu;41;Resources/popup-bezel-right-pullsdown.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-right-pullsdown.pngu;31;Resources/popup-bezel-right.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-right.pngu;34;Resources/radio-image-disabled.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-disabled.pngu;37;Resources/radio-image-highlighted.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-highlighted.pngu;43;Resources/radio-image-selected-disabled.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected-disabled.pngu;46;Resources/radio-image-selected-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected-highlighted.pngu;34;Resources/radio-image-selected.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected.pngu;25;Resources/radio-image.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image.pngu;42;Resources/scroller-down-arrow-disabled.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow-disabled.pngu;45;Resources/scroller-down-arrow-highlighted.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow-highlighted.pngu;33;Resources/scroller-down-arrow.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow.pngu;45;Resources/scroller-horizontal-knob-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-center.pngu;54;Resources/scroller-horizontal-knob-disabled-center.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-center.pngu;52;Resources/scroller-horizontal-knob-disabled-left.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-left.pngu;53;Resources/scroller-horizontal-knob-disabled-right.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-right.pngu;43;Resources/scroller-horizontal-knob-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-left.pngu;44;Resources/scroller-horizontal-knob-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-right.pngu;48;Resources/scroller-horizontal-track-disabled.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-track-disabled.pngu;39;Resources/scroller-horizontal-track.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-track.pngu;42;Resources/scroller-left-arrow-disabled.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow-disabled.pngu;45;Resources/scroller-left-arrow-highlighted.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow-highlighted.pngu;33;Resources/scroller-left-arrow.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow.pngu;43;Resources/scroller-right-arrow-disabled.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow-disabled.pngu;46;Resources/scroller-right-arrow-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow-highlighted.pngu;34;Resources/scroller-right-arrow.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow.pngu;40;Resources/scroller-up-arrow-disabled.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow-disabled.pngu;43;Resources/scroller-up-arrow-highlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow-highlighted.pngu;31;Resources/scroller-up-arrow.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow.pngu;43;Resources/scroller-vertical-knob-bottom.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-bottom.pngu;43;Resources/scroller-vertical-knob-center.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-center.pngu;52;Resources/scroller-vertical-knob-disabled-bottom.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-bottom.pngu;52;Resources/scroller-vertical-knob-disabled-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-center.pngu;49;Resources/scroller-vertical-knob-disabled-top.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-top.pngu;40;Resources/scroller-vertical-knob-top.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-top.pngu;46;Resources/scroller-vertical-track-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-track-disabled.pngu;37;Resources/scroller-vertical-track.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-track.pngu;44;Resources/scrollview-bottom-corner-color.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/scrollview-bottom-corner-color.pngu;44;Resources/segmented-control-bezel-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-center.pngu;53;Resources/segmented-control-bezel-disabled-center.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-center.pngu;54;Resources/segmented-control-bezel-disabled-divider.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-divider.pngu;51;Resources/segmented-control-bezel-disabled-left.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-left.pngu;52;Resources/segmented-control-bezel-disabled-right.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-right.pngu;45;Resources/segmented-control-bezel-divider.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-divider.pngu;56;Resources/segmented-control-bezel-highlighted-center.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-center.pngu;65;Resources/segmented-control-bezel-highlighted-disabled-center.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-center.pngu;66;Resources/segmented-control-bezel-highlighted-disabled-divider.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-divider.pngu;63;Resources/segmented-control-bezel-highlighted-disabled-left.png103;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-left.pngu;64;Resources/segmented-control-bezel-highlighted-disabled-right.png104;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-right.pngu;57;Resources/segmented-control-bezel-highlighted-divider.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-divider.pngu;54;Resources/segmented-control-bezel-highlighted-left.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-left.pngu;55;Resources/segmented-control-bezel-highlighted-right.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-right.pngu;42;Resources/segmented-control-bezel-left.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-left.pngu;51;Resources/segmented-control-bezel-pushed-center.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-center.pngu;63;Resources/segmented-control-bezel-pushed-highlighted-center.png103;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-center.pngu;61;Resources/segmented-control-bezel-pushed-highlighted-left.png101;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-left.pngu;62;Resources/segmented-control-bezel-pushed-highlighted-right.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-right.pngu;49;Resources/segmented-control-bezel-pushed-left.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-left.pngu;50;Resources/segmented-control-bezel-pushed-right.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-right.pngu;43;Resources/segmented-control-bezel-right.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-right.pngu;35;Resources/slider-circular-bezel.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-bezel.pngu;44;Resources/slider-circular-disabled-bezel.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-disabled-bezel.pngu;43;Resources/slider-circular-disabled-knob.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-disabled-knob.pngu;34;Resources/slider-circular-knob.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-knob.pngu;21;Resources/spinner.gif61;mhtml:Browser.environment/MHTMLData.txt!Resources/spinner.gifu;44;Resources/tableview-headerview-ascending.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-ascending.pngu;45;Resources/tableview-headerview-descending.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-descending.pngu;54;Resources/tableview-headerview-highlighted-pressed.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-highlighted-pressed.pngu;46;Resources/tableview-headerview-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-highlighted.pngu;42;Resources/tableview-headerview-pressed.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-pressed.pngu;34;Resources/tableview-headerview.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview.pngu;32;Resources/tableviewselection.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/tableviewselection.pngu;44;Resources/textfield-bezel-rounded-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-center.pngu;52;Resources/textfield-bezel-rounded-focused-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-center.pngu;50;Resources/textfield-bezel-rounded-focused-left.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-left.pngu;51;Resources/textfield-bezel-rounded-focused-right.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-right.pngu;42;Resources/textfield-bezel-rounded-left.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-left.pngu;43;Resources/textfield-bezel-rounded-right.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-right.pngu;38;Resources/textfield-bezel-square-0.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-0.pngu;38;Resources/textfield-bezel-square-1.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-1.pngu;38;Resources/textfield-bezel-square-2.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-2.pngu;38;Resources/textfield-bezel-square-3.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-3.pngu;38;Resources/textfield-bezel-square-4.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-4.pngu;38;Resources/textfield-bezel-square-5.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-5.pngu;38;Resources/textfield-bezel-square-6.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-6.pngu;38;Resources/textfield-bezel-square-7.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-7.pngu;38;Resources/textfield-bezel-square-8.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-8.pngu;46;Resources/textfield-bezel-square-focused-0.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-0.pngu;46;Resources/textfield-bezel-square-focused-1.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-1.pngu;46;Resources/textfield-bezel-square-focused-2.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-2.pngu;46;Resources/textfield-bezel-square-focused-3.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-3.pngu;46;Resources/textfield-bezel-square-focused-4.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-4.pngu;46;Resources/textfield-bezel-square-focused-5.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-5.pngu;46;Resources/textfield-bezel-square-focused-6.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-6.pngu;46;Resources/textfield-bezel-square-focused-7.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-7.pngu;46;Resources/textfield-bezel-square-focused-8.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-8.pngu;35;Resources/vertical-track-bottom.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-bottom.pngu;35;Resources/vertical-track-center.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-center.pngu;44;Resources/vertical-track-disabled-bottom.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-bottom.pngu;44;Resources/vertical-track-disabled-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-center.pngu;41;Resources/vertical-track-disabled-top.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-top.pngu;32;Resources/vertical-track-top.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-top.png

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/dataURLs.txt.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/CommonJS.environment/Aristo.blend.sj.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Info.plist.



>
1
280NPLIST;1.0;D;K;26;CPApplicationDelegateClassS;20;BKShowcaseControllerK;12;CPBundleNameS;12;Aristo.blendK;14;BKLearnMoreURLS;28;http://cappuccino.org/aristoK;22;BKLearnMoreButtonTitleS;16;Aristo Home PageK;16;CPPrincipalClassS;13;CPApplicationK;29;CPBundleInfoDictionaryVersiond;1;6K;18;CPBundleIdentifierS;21;com.280n.blend.AristoK;15;CPBundleVersionf;3;0.1K;19;CPBundlePackageTypeS;4;BLNDK;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;15;Aristo.blend.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;K;13;CPKeyedThemesA;S;17;Aristo.keyedthemeS;21;Aristo-HUD.keyedthemeE;E;

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/knob-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/knob-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/knob.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-track-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-track.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-track-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-track.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-bezel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-disabled-bezel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-disabled-knob.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-knob.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/alert-error.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/alert-info.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/alert-warning.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-bezel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-resize-control.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/knob-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/knob-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/knob.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-arrows-pullsdown.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-arrows.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-disabled-right-pullsdown.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-right-pullsdown.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-selected-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-selected-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-selected.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-track-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-track.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-track-disabled.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-track.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/scrollview-bottom-corner-color.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-divider.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-bezel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-disabled-bezel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-disabled-knob.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-knob.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/spinner.gif.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-ascending.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-descending.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-highlighted-pressed.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-pressed.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableviewselection.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-left.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-right.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-3.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-4.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-5.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-6.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-7.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-8.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-3.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-4.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-5.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-6.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-7.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-8.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-top.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPApplication/New.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPApplication/NewHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPApplication/Open.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPApplication/OpenHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPApplication/Save.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPApplication/SaveHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/closedHandCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/contextualMenuCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/disappearingItemCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/dragCopyCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/dragLinkCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/openHandCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/resizeDownCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/resizeLeftCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/resizeRightCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPCursor/resizeUpCursor.cur.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImage/CPImageNameColorPanel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewRightShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPImageView/CPImageViewTopShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldFind.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPSplitView/CPSplitViewVertical.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBackgroundCenter.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBorder.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBorderLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBorderRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelBackgroundCenter.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelBackgroundLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelBackgroundRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelSelectedCenter.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelSelectedLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelSelectedRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelsViewCenter.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelsViewLeft.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelsViewRight.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow3.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow4.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow5.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow6.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow7.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow8.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/CPWindowResizeIndicator.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/FIXME_ImageShadow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/GenericFile.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/HUDTheme/WindowClose.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/HUDTheme/WindowCloseActive.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPToolbarView/_CPToolbarViewBackground.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/action_button.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/brightness_bar.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/browser-leaf-highlighted.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/browser-leaf.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/browser-resize-control.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/color_well.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/empty.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/minus_button.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/plus_button.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/slider_button.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/slider_button_h.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/standardApplicationIcon.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/wheel.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/wheel_black.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/wheel_button.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/AppKit/Resources/wheel_button_h.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/BlendKit/Browser.environment/BlendKit.sj.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
@STATIC;1.0;p;22;BKShowcaseController.jt;15395;@STATIC;1.0;I;16;AppKit/CPTheme.jI;15;AppKit/CPView.jt;15334;
objj_executeFile("AppKit/CPTheme.j",NO);
objj_executeFile("AppKit/CPView.j",NO);
var _1=176;
var _2="BKLearnMoreToolbarItemIdentifier",_3="BKStateToolbarItemIdentifier",_4="BKBackgroundColorToolbarItemIdentifier";
var _5=objj_allocateClassPair(CPObject,"BKShowcaseController"),_6=_5.isa;
class_addIvars(_5,[new objj_ivar("_themeDescriptorClasses"),new objj_ivar("_themesCollectionView"),new objj_ivar("_themedObjectsCollectionView"),new objj_ivar("theWindow")]);
objj_registerClassPair(_5);
class_addMethods(_5,[new objj_method(sel_getUid("applicationDidFinishLaunching:"),function(_7,_8,_9){
with(_7){
_themeDescriptorClasses=objj_msgSend(BKThemeDescriptor,"allThemeDescriptorClasses");
theWindow=objj_msgSend(objj_msgSend(CPWindow,"alloc"),"initWithContentRect:styleMask:",CGRectMakeZero(),CPBorderlessBridgeWindowMask);
var _a=objj_msgSend(objj_msgSend(CPToolbar,"alloc"),"initWithIdentifier:","Toolbar");
objj_msgSend(_a,"setDelegate:",_7);
objj_msgSend(theWindow,"setToolbar:",_a);
var _b=objj_msgSend(theWindow,"contentView"),_c=objj_msgSend(_b,"bounds"),_d=objj_msgSend(objj_msgSend(CPSplitView,"alloc"),"initWithFrame:",_c);
objj_msgSend(_d,"setIsPaneSplitter:",YES);
objj_msgSend(_d,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
objj_msgSend(_b,"addSubview:",_d);
var _e=objj_msgSend(CPTextField,"labelWithTitle:","THEMES");
objj_msgSend(_e,"setFont:",objj_msgSend(CPFont,"boldSystemFontOfSize:",11));
objj_msgSend(_e,"setTextColor:",objj_msgSend(CPColor,"colorWithCalibratedRed:green:blue:alpha:",93/255,93/255,93/255,1));
objj_msgSend(_e,"setTextShadowColor:",objj_msgSend(CPColor,"colorWithCalibratedRed:green:blue:alpha:",225/255,255/255,255/255,0.7));
objj_msgSend(_e,"setTextShadowOffset:",CGSizeMake(0,1));
objj_msgSend(_e,"sizeToFit");
objj_msgSend(_e,"setFrameOrigin:",CGPointMake(5,4));
var _f=objj_msgSend(objj_msgSend(CPCollectionViewItem,"alloc"),"init");
objj_msgSend(_f,"setView:",objj_msgSend(objj_msgSend(BKThemeDescriptorCell,"alloc"),"init"));
_themesCollectionView=objj_msgSend(objj_msgSend(CPCollectionView,"alloc"),"initWithFrame:",CGRectMake(0,0,_1,CGRectGetHeight(_c)));
objj_msgSend(_themesCollectionView,"setDelegate:",_7);
objj_msgSend(_themesCollectionView,"setItemPrototype:",_f);
objj_msgSend(_themesCollectionView,"setMinItemSize:",CGSizeMake(20,36));
objj_msgSend(_themesCollectionView,"setMaxItemSize:",CGSizeMake(10000000,36));
objj_msgSend(_themesCollectionView,"setMaxNumberOfColumns:",1);
objj_msgSend(_themesCollectionView,"setContent:",_themeDescriptorClasses);
objj_msgSend(_themesCollectionView,"setAutoresizingMask:",CPViewWidthSizable);
objj_msgSend(_themesCollectionView,"setVerticalMargin:",0);
objj_msgSend(_themesCollectionView,"setSelectable:",YES);
objj_msgSend(_themesCollectionView,"setFrameOrigin:",CGPointMake(0,20));
objj_msgSend(_themesCollectionView,"setAutoresizingMask:",CPViewWidthSizable);
var _10=objj_msgSend(objj_msgSend(CPScrollView,"alloc"),"initWithFrame:",CGRectMake(0,0,_1,CGRectGetHeight(_c))),_b=objj_msgSend(_10,"contentView");
objj_msgSend(_10,"setAutohidesScrollers:",YES);
objj_msgSend(_10,"setDocumentView:",_themesCollectionView);
objj_msgSend(_b,"setBackgroundColor:",objj_msgSend(CPColor,"colorWithRed:green:blue:alpha:",212/255,221/255,230/255,1));
objj_msgSend(_b,"addSubview:",_e);
objj_msgSend(_d,"addSubview:",_10);
_themedObjectsCollectionView=objj_msgSend(objj_msgSend(CPCollectionView,"alloc"),"initWithFrame:",CGRectMake(0,0,CGRectGetWidth(_c)-_1-1,10));
var _11=objj_msgSend(objj_msgSend(CPCollectionViewItem,"alloc"),"init");
objj_msgSend(_11,"setView:",objj_msgSend(objj_msgSend(BKShowcaseCell,"alloc"),"init"));
objj_msgSend(_themedObjectsCollectionView,"setItemPrototype:",_11);
objj_msgSend(_themedObjectsCollectionView,"setVerticalMargin:",20);
objj_msgSend(_themedObjectsCollectionView,"setAutoresizingMask:",CPViewWidthSizable);
var _10=objj_msgSend(objj_msgSend(CPScrollView,"alloc"),"initWithFrame:",CGRectMake(_1+1,0,CGRectGetWidth(_c)-_1-1,CGRectGetHeight(_c)));
objj_msgSend(_10,"setHasHorizontalScroller:",NO);
objj_msgSend(_10,"setAutohidesScrollers:",YES);
objj_msgSend(_10,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
objj_msgSend(_10,"setDocumentView:",_themedObjectsCollectionView);
objj_msgSend(_d,"addSubview:",_10);
objj_msgSend(_themesCollectionView,"setSelectionIndexes:",objj_msgSend(CPIndexSet,"indexSetWithIndex:",0));
objj_msgSend(theWindow,"setFullPlatformWindow:",YES);
objj_msgSend(theWindow,"makeKeyAndOrderFront:",_7);
}
}),new objj_method(sel_getUid("collectionViewDidChangeSelection:"),function(_12,_13,_14){
with(_12){
var _15=_themeDescriptorClasses[objj_msgSend(objj_msgSend(_14,"selectionIndexes"),"firstIndex")],_16=objj_msgSend(_15,"itemSize");
_16.width=MAX(100,_16.width+20);
_16.height=MAX(100,_16.height+30);
objj_msgSend(_themedObjectsCollectionView,"setMinItemSize:",_16);
objj_msgSend(_themedObjectsCollectionView,"setMaxItemSize:",_16);
objj_msgSend(_themedObjectsCollectionView,"setContent:",objj_msgSend(_15,"themedShowcaseObjectTemplates"));
objj_msgSend(BKShowcaseCell,"setBackgroundColor:",objj_msgSend(_15,"showcaseBackgroundColor"));
}
}),new objj_method(sel_getUid("hasLearnMoreURL"),function(_17,_18){
with(_17){
return objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","BKLearnMoreURL");
}
}),new objj_method(sel_getUid("toolbarAllowedItemIdentifiers:"),function(_19,_1a,_1b){
with(_19){
return [_2,CPToolbarSpaceItemIdentifier,CPToolbarFlexibleSpaceItemIdentifier,_4,_3];
}
}),new objj_method(sel_getUid("toolbarDefaultItemIdentifiers:"),function(_1c,_1d,_1e){
with(_1c){
var _1f=[CPToolbarFlexibleSpaceItemIdentifier,_4,_3];
if(objj_msgSend(_1c,"hasLearnMoreURL")){
_1f=[_2].concat(_1f);
}
return _1f;
}
}),new objj_method(sel_getUid("toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:"),function(_20,_21,_22,_23,_24){
with(_20){
var _25=objj_msgSend(objj_msgSend(CPToolbarItem,"alloc"),"initWithItemIdentifier:",_23);
objj_msgSend(_25,"setTarget:",_20);
if(_23===_3){
var _26=objj_msgSend(CPPopUpButton,"buttonWithTitle:","Enabled");
objj_msgSend(_26,"addItemWithTitle:","Disabled");
objj_msgSend(_25,"setView:",_26);
objj_msgSend(_25,"setTarget:",nil);
objj_msgSend(_25,"setAction:",sel_getUid("changeState:"));
objj_msgSend(_25,"setLabel:","State");
var _27=CGRectGetWidth(objj_msgSend(_26,"frame"));
objj_msgSend(_25,"setMinSize:",CGSizeMake(_27+20,24));
objj_msgSend(_25,"setMaxSize:",CGSizeMake(_27+20,24));
}else{
if(_23===_4){
var _26=objj_msgSend(CPPopUpButton,"buttonWithTitle:","Window Background");
objj_msgSend(_26,"addItemWithTitle:","Light Checkers");
objj_msgSend(_26,"addItemWithTitle:","Dark Checkers");
objj_msgSend(_26,"addItemWithTitle:","White");
objj_msgSend(_26,"addItemWithTitle:","Black");
objj_msgSend(_26,"addItemWithTitle:","More Choices...");
var _28=objj_msgSend(_26,"itemArray");
objj_msgSend(_28[0],"setRepresentedObject:",objj_msgSend(BKThemeDescriptor,"windowBackgroundColor"));
objj_msgSend(_28[1],"setRepresentedObject:",objj_msgSend(BKThemeDescriptor,"lightCheckersColor"));
objj_msgSend(_28[2],"setRepresentedObject:",objj_msgSend(BKThemeDescriptor,"darkCheckersColor"));
objj_msgSend(_28[3],"setRepresentedObject:",objj_msgSend(CPColor,"whiteColor"));
objj_msgSend(_28[4],"setRepresentedObject:",objj_msgSend(CPColor,"blackColor"));
objj_msgSend(_25,"setView:",_26);
objj_msgSend(_25,"setTarget:",nil);
objj_msgSend(_25,"setAction:",sel_getUid("changeColor:"));
objj_msgSend(_25,"setLabel:","Background Color");
var _27=CGRectGetWidth(objj_msgSend(_26,"frame"));
objj_msgSend(_25,"setMinSize:",CGSizeMake(_27,24));
objj_msgSend(_25,"setMaxSize:",CGSizeMake(_27,24));
}else{
if(_23===_2){
var _29=objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","BKLearnMoreButtonTitle");
if(!_29){
_29=objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","CPBundleName")||"Home Page";
}
var _2a=objj_msgSend(CPButton,"buttonWithTitle:",_29);
objj_msgSend(theWindow,"setDefaultButton:",_2a);
objj_msgSend(_25,"setView:",_2a);
objj_msgSend(_25,"setLabel:","Learn More");
objj_msgSend(_25,"setTarget:",nil);
objj_msgSend(_25,"setAction:",sel_getUid("learnMore:"));
var _27=CGRectGetWidth(objj_msgSend(_2a,"frame"));
objj_msgSend(_25,"setMinSize:",CGSizeMake(_27,24));
objj_msgSend(_25,"setMaxSize:",CGSizeMake(_27,24));
}
}
}
return _25;
}
}),new objj_method(sel_getUid("learnMore:"),function(_2b,_2c,_2d){
with(_2b){
window.location.href=objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","BKLearnMoreURL");
}
}),new objj_method(sel_getUid("selectedThemeDescriptor"),function(_2e,_2f){
with(_2e){
return _themeDescriptorClasses[objj_msgSend(objj_msgSend(_themesCollectionView,"selectionIndexes"),"firstIndex")];
}
}),new objj_method(sel_getUid("changeState:"),function(_30,_31,_32){
with(_30){
var _33=objj_msgSend(objj_msgSend(_30,"selectedThemeDescriptor"),"themedShowcaseObjectTemplates"),_34=objj_msgSend(_33,"count");
while(_34--){
var _35=objj_msgSend(_33[_34],"valueForKey:","themedObject");
if(objj_msgSend(_35,"respondsToSelector:",sel_getUid("setEnabled:"))){
objj_msgSend(_35,"setEnabled:",objj_msgSend(_32,"title")==="Enabled"?YES:NO);
}
}
}
}),new objj_method(sel_getUid("changeColor:"),function(_36,_37,_38){
with(_36){
var _39=nil;
if(objj_msgSend(_38,"isKindOfClass:",objj_msgSend(CPColorPanel,"class"))){
_39=objj_msgSend(_38,"color");
}else{
if(objj_msgSend(_38,"titleOfSelectedItem")==="More Choices..."){
objj_msgSend(_38,"addItemWithTitle:","Other");
objj_msgSend(_38,"selectItemWithTitle:","Other");
objj_msgSend(CPApp,"orderFrontColorPanel:",_36);
}else{
_39=objj_msgSend(objj_msgSend(_38,"selectedItem"),"representedObject");
objj_msgSend(_38,"removeItemWithTitle:","Other");
}
}
if(_39){
objj_msgSend(objj_msgSend(_36,"selectedThemeDescriptor"),"setShowcaseBackgroundColor:",_39);
objj_msgSend(BKShowcaseCell,"setBackgroundColor:",_39);
}
}
})]);
var _3a=nil;
var _5=objj_allocateClassPair(CPView,"BKThemeDescriptorCell"),_6=_5.isa;
class_addIvars(_5,[new objj_ivar("_label")]);
objj_registerClassPair(_5);
class_addMethods(_5,[new objj_method(sel_getUid("setRepresentedObject:"),function(_3b,_3c,_3d){
with(_3b){
if(!_label){
_label=objj_msgSend(CPTextField,"labelWithTitle:","hello");
objj_msgSend(_label,"setFont:",objj_msgSend(CPFont,"systemFontOfSize:",11));
objj_msgSend(_label,"setFrame:",CGRectMake(10,0,CGRectGetWidth(objj_msgSend(_3b,"bounds"))-20,CGRectGetHeight(objj_msgSend(_3b,"bounds"))));
objj_msgSend(_label,"setVerticalAlignment:",CPCenterVerticalTextAlignment);
objj_msgSend(_label,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
objj_msgSend(_3b,"addSubview:",_label);
}
objj_msgSend(_label,"setStringValue:",objj_msgSend(_3d,"themeName")+" ("+objj_msgSend(objj_msgSend(_3d,"themedShowcaseObjectTemplates"),"count")+")");
}
}),new objj_method(sel_getUid("setSelected:"),function(_3e,_3f,_40){
with(_3e){
objj_msgSend(_3e,"setBackgroundColor:",_40?objj_msgSend(objj_msgSend(_3e,"class"),"selectionColor"):nil);
objj_msgSend(_label,"setTextShadowOffset:",_40?CGSizeMake(0,1):CGSizeMakeZero());
objj_msgSend(_label,"setTextShadowColor:",_40?objj_msgSend(CPColor,"blackColor"):nil);
objj_msgSend(_label,"setFont:",_40?objj_msgSend(CPFont,"boldSystemFontOfSize:",11):objj_msgSend(CPFont,"systemFontOfSize:",11));
objj_msgSend(_label,"setTextColor:",_40?objj_msgSend(CPColor,"whiteColor"):objj_msgSend(CPColor,"blackColor"));
}
})]);
class_addMethods(_6,[new objj_method(sel_getUid("selectionColor"),function(_41,_42){
with(_41){
if(!_3a){
_3a=objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPImage,"alloc"),"initWithContentsOfFile:size:",objj_msgSend(objj_msgSend(CPBundle,"bundleForClass:",objj_msgSend(BKThemeDescriptorCell,"class")),"pathForResource:","selection.png"),CGSizeMake(1,36)));
}
return _3a;
}
})]);
var _43=nil;
var _44="BKShowcaseCellBackgroundColorDidChangeNotification";
var _5=objj_allocateClassPair(CPView,"BKShowcaseCell"),_6=_5.isa;
class_addIvars(_5,[new objj_ivar("_backgroundView"),new objj_ivar("_view"),new objj_ivar("_label")]);
objj_registerClassPair(_5);
class_addMethods(_5,[new objj_method(sel_getUid("init"),function(_45,_46){
with(_45){
_45=objj_msgSendSuper({receiver:_45,super_class:objj_getClass("BKShowcaseCell").super_class},"init");
if(_45){
objj_msgSend(objj_msgSend(CPNotificationCenter,"defaultCenter"),"addObserver:selector:name:object:",_45,sel_getUid("showcaseBackgroundDidChange:"),_44,nil);
}
return _45;
}
}),new objj_method(sel_getUid("initWithCoder:"),function(_47,_48,_49){
with(_47){
_47=objj_msgSendSuper({receiver:_47,super_class:objj_getClass("BKShowcaseCell").super_class},"initWithCoder:",_49);
if(_47){
objj_msgSend(objj_msgSend(CPNotificationCenter,"defaultCenter"),"addObserver:selector:name:object:",_47,sel_getUid("showcaseBackgroundDidChange:"),_44,nil);
}
return _47;
}
}),new objj_method(sel_getUid("showcaseBackgroundDidChange:"),function(_4a,_4b,_4c){
with(_4a){
objj_msgSend(_backgroundView,"setBackgroundColor:",objj_msgSend(BKShowcaseCell,"backgroundColor"));
}
}),new objj_method(sel_getUid("setSelected:"),function(_4d,_4e,_4f){
with(_4d){
}
}),new objj_method(sel_getUid("setRepresentedObject:"),function(_50,_51,_52){
with(_50){
if(!_label){
_label=objj_msgSend(objj_msgSend(CPTextField,"alloc"),"initWithFrame:",CGRectMakeZero());
objj_msgSend(_label,"setAlignment:",CPCenterTextAlignment);
objj_msgSend(_label,"setAutoresizingMask:",CPViewMinYMargin|CPViewWidthSizable);
objj_msgSend(_label,"setFont:",objj_msgSend(CPFont,"boldSystemFontOfSize:",11));
objj_msgSend(_50,"addSubview:",_label);
}
objj_msgSend(_label,"setStringValue:",objj_msgSend(_52,"valueForKey:","label"));
objj_msgSend(_label,"sizeToFit");
objj_msgSend(_label,"setFrame:",CGRectMake(0,CGRectGetHeight(objj_msgSend(_50,"bounds"))-CGRectGetHeight(objj_msgSend(_label,"frame")),CGRectGetWidth(objj_msgSend(_50,"bounds")),CGRectGetHeight(objj_msgSend(_label,"frame"))));
if(!_backgroundView){
_backgroundView=objj_msgSend(objj_msgSend(CPView,"alloc"),"init");
objj_msgSend(_50,"addSubview:",_backgroundView);
}
objj_msgSend(_backgroundView,"setFrame:",CGRectMake(0,0,CGRectGetWidth(objj_msgSend(_50,"bounds")),CGRectGetMinY(objj_msgSend(_label,"frame"))));
objj_msgSend(_backgroundView,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
if(_view){
objj_msgSend(_view,"removeFromSuperview");
}
_view=objj_msgSend(_52,"valueForKey:","themedObject");
objj_msgSend(_view,"setTheme:",nil);
objj_msgSend(_view,"setAutoresizingMask:",CPViewMinXMargin|CPViewMaxXMargin|CPViewMinYMargin|CPViewMaxYMargin);
objj_msgSend(_view,"setFrameOrigin:",CGPointMake((CGRectGetWidth(objj_msgSend(_backgroundView,"bounds"))-CGRectGetWidth(objj_msgSend(_view,"frame")))/2,(CGRectGetHeight(objj_msgSend(_backgroundView,"bounds"))-CGRectGetHeight(objj_msgSend(_view,"frame")))/2));
objj_msgSend(_backgroundView,"addSubview:",_view);
objj_msgSend(_backgroundView,"setBackgroundColor:",objj_msgSend(BKShowcaseCell,"backgroundColor"));
}
})]);
class_addMethods(_6,[new objj_method(sel_getUid("setBackgroundColor:"),function(_53,_54,_55){
with(_53){
if(_43===_55){
return;
}
_43=_55;
objj_msgSend(objj_msgSend(CPNotificationCenter,"defaultCenter"),"postNotificationName:object:",_44,nil);
}
}),new objj_method(sel_getUid("backgroundColor"),function(_56,_57){
with(_56){
return _43;
}
})]);
p;19;BKThemeDescriptor.jt;7386;@STATIC;1.0;I;21;Foundation/CPObject.jt;7341;
objj_executeFile("Foundation/CPObject.j",NO);
var _1={},_2={},_3={},_4={},_5=nil,_6=nil,_7=nil;
var _8=objj_allocateClassPair(CPObject,"BKThemeDescriptor"),_9=_8.isa;
objj_registerClassPair(_8);
class_addMethods(_9,[new objj_method(sel_getUid("allThemeDescriptorClasses"),function(_a,_b){
with(_a){
var _c=[];
for(candidate in global){
var _d=objj_getClass(candidate),_e=class_getName(_d);
if(_e==="BKThemeDescriptor"){
continue;
}
var _f=_e.indexOf("ThemeDescriptor");
if((_f>=0)&&(_f===_e.length-"ThemeDescriptor".length)){
_c.push(_d);
}
}
objj_msgSend(_c,"sortUsingSelector:",sel_getUid("compare:"));
return _c;
}
}),new objj_method(sel_getUid("lightCheckersColor"),function(_10,_11){
with(_10){
if(!_5){
_5=objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPImage,"alloc"),"initWithContentsOfFile:size:",objj_msgSend(objj_msgSend(CPBundle,"bundleForClass:",objj_msgSend(BKThemeDescriptor,"class")),"pathForResource:","light-checkers.png"),CGSizeMake(12,12)));
}
return _5;
}
}),new objj_method(sel_getUid("darkCheckersColor"),function(_12,_13){
with(_12){
if(!_6){
_6=objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPImage,"alloc"),"initWithContentsOfFile:size:",objj_msgSend(objj_msgSend(CPBundle,"bundleForClass:",objj_msgSend(BKThemeDescriptor,"class")),"pathForResource:","dark-checkers.png"),CGSizeMake(12,12)));
}
return _6;
}
}),new objj_method(sel_getUid("windowBackgroundColor"),function(_14,_15){
with(_14){
return objj_msgSend(_CPStandardWindowView,"bodyBackgroundColor");
}
}),new objj_method(sel_getUid("defaultShowcaseBackgroundColor"),function(_16,_17){
with(_16){
return objj_msgSend(_CPStandardWindowView,"bodyBackgroundColor");
}
}),new objj_method(sel_getUid("showcaseBackgroundColor"),function(_18,_19){
with(_18){
var _1a=objj_msgSend(_18,"className");
if(!_4[_1a]){
_4[_1a]=objj_msgSend(_18,"defaultShowcaseBackgroundColor");
}
return _4[_1a];
}
}),new objj_method(sel_getUid("setShowcaseBackgroundColor:"),function(_1b,_1c,_1d){
with(_1b){
_4[objj_msgSend(_1b,"className")]=_1d;
}
}),new objj_method(sel_getUid("itemSize"),function(_1e,_1f){
with(_1e){
var _20=objj_msgSend(_1e,"className");
if(!_1[_20]){
objj_msgSend(_1e,"calculateThemedObjectTemplates");
}
return CGSizeMakeCopy(_1[_20]);
}
}),new objj_method(sel_getUid("themedObjectTemplates"),function(_21,_22){
with(_21){
var _23=objj_msgSend(_21,"className");
if(!_2[_23]){
objj_msgSend(_21,"calculateThemedObjectTemplates");
}
return _2[_23];
}
}),new objj_method(sel_getUid("themedShowcaseObjectTemplates"),function(_24,_25){
with(_24){
var _26=objj_msgSend(_24,"className");
if(!_3[_26]){
objj_msgSend(_24,"calculateThemedObjectTemplates");
}
return _3[_26];
}
}),new objj_method(sel_getUid("calculateThemedObjectTemplates"),function(_27,_28){
with(_27){
var _29=[],_2a=[],_2b=CGSizeMake(0,0),_2c=class_copyMethodList(objj_msgSend(_27,"class").isa),_2d=0,_2e=objj_msgSend(_2c,"count"),_2f=[];
if(objj_msgSend(_27,"respondsToSelector:",sel_getUid("themeShowcaseExcludes"))){
_2f=objj_msgSend(_27,"themeShowcaseExcludes");
}
for(;_2d<_2f.length;++_2d){
var _30=_2f[_2d].toLowerCase();
if(_30&&_30.indexOf("themed")!==0){
_2f[_2d]="themed"+_30;
}else{
_2f[_2d]=_30;
}
}
for(_2d=0;_2d<_2e;++_2d){
var _31=_2c[_2d],_32=method_getName(_31);
if(_32.indexOf("themed")!==0){
continue;
}
var _33=method_getImplementation(_31),_34=_33(_27,_32);
if(!_34){
continue;
}
var _35=objj_msgSend(objj_msgSend(BKThemedObjectTemplate,"alloc"),"init"),_36=objj_msgSend(_2f,"containsObject:",_32.toLowerCase());
objj_msgSend(_35,"setValue:forKey:",_34,"themedObject");
objj_msgSend(_35,"setValue:forKey:",BKLabelFromIdentifier(_32),"label");
objj_msgSend(_29,"addObject:",_35);
if(!_36){
if(objj_msgSend(_34,"isKindOfClass:",objj_msgSend(CPView,"class"))){
var _37=objj_msgSend(_34,"frame").size,_38=objj_msgSend(objj_msgSend(_35,"valueForKey:","label"),"sizeWithFont:",objj_msgSend(CPFont,"boldSystemFontOfSize:",12)).width+20;
if(_37.width>_2b.width){
_2b.width=_37.width;
}
if(_38>_2b.width){
_2b.width=_38;
}
if(_37.height>_2b.height){
_2b.height=_37.height;
}
}
objj_msgSend(_2a,"addObject:",_35);
}
}
var _39=objj_msgSend(_27,"className");
_1[_39]=_2b;
_2[_39]=_29;
_3[_39]=_2a;
}
}),new objj_method(sel_getUid("compare:"),function(_3a,_3b,_3c){
with(_3a){
return objj_msgSend(objj_msgSend(_3a,"themeName"),"compare:",objj_msgSend(_3c,"themeName"));
}
}),new objj_method(sel_getUid("registerThemeValues:forView:"),function(_3d,_3e,_3f,_40){
with(_3d){
for(var i=0;i<_3f.length;++i){
var _41=_3f[i],_42=_41[0],_43=_41[1],_44=_41[2];
if(_44){
objj_msgSend(_40,"setValue:forThemeAttribute:inState:",_43,_42,_44);
}else{
objj_msgSend(_40,"setValue:forThemeAttribute:",_43,_42);
}
}
}
}),new objj_method(sel_getUid("registerThemeValues:forView:inherit:"),function(_45,_46,_47,_48,_49){
with(_45){
if(_49){
var _4a=objj_msgSend(_45,"themeName"),_4b=_4a.indexOf("-");
if(_4b<0){
objj_msgSend(_45,"registerThemeValues:forView:",_49,_48);
}else{
var _4c=_4a.substr(_4b+1)+"/";
for(var i=0;i<_49.length;++i){
var _4d=_49[i],_4e=_4d[0],_4f=_4d[1],_50=_4d[2],_51=nil;
if(typeof (_4f)==="object"&&_4f.hasOwnProperty("isa")&&objj_msgSend(_4f,"isKindOfClass:",CPColor)&&(_51=objj_msgSend(_4f,"patternImage"))){
if(objj_msgSend(_51,"isThreePartImage")||objj_msgSend(_51,"isNinePartImage")){
var _52=objj_msgSend(_51,"imageSlices"),_53=[];
for(var _54=0;_54<_52.length;++_54){
var _55=_52[_54],_56=_4c+objj_msgSend(objj_msgSend(_55,"filename"),"lastPathComponent"),_57=objj_msgSend(_55,"size");
_53.push([_56,_57.width,_57.height]);
}
if(objj_msgSend(_51,"isThreePartImage")){
_4f=PatternColor(_53,objj_msgSend(_51,"isVertical"));
}else{
_4f=PatternColor(_53);
}
}else{
var _56=_4c+objj_msgSend(objj_msgSend(_51,"filename"),"lastPathComponent"),_57=objj_msgSend(_51,"size");
_4f=PatternColor(_56,_57.width,_57.height);
}
}
if(_50){
objj_msgSend(_48,"setValue:forThemeAttribute:inState:",_4f,_4e,_50);
}else{
objj_msgSend(_48,"setValue:forThemeAttribute:",_4f,_4e);
}
}
}
}
if(_47){
objj_msgSend(_45,"registerThemeValues:forView:",_47,_48);
}
}
})]);
BKLabelFromIdentifier=function(_58){
var _59=_58.substr("themed".length),_5a=0,_5b=_59.length,_5c="",_5d=null,_5e=YES;
for(;_5a<_5b;++_5a){
var _5f=_59.charAt(_5a),_60=/^[A-Z]/.test(_5f);
if(_60){
if(!_5e){
if(_5d===null){
_5c+=" "+_5f.toLowerCase();
}else{
_5c+=_5f;
}
}
_5d=_5f;
}else{
if(_5e&&_5d!==null){
_5c+=_5d;
}
_5c+=_5f;
_5d=null;
_5e=NO;
}
}
return _5c;
};
PatternIsVertical=YES,PatternIsHorizontal=NO;
PatternColor=function(){
if(arguments.length<3){
var _61=arguments[0],_62=[];
for(var i=0;i<_61.length;++i){
var _63=_61[i];
_62.push(_63?objj_msgSend(_CPCibCustomResource,"imageResourceWithName:size:",_63[0],CGSizeMake(_63[1],_63[2])):nil);
}
if(arguments.length==2){
return objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPThreePartImage,"alloc"),"initWithImageSlices:isVertical:",_62,arguments[1]));
}else{
return objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPNinePartImage,"alloc"),"initWithImageSlices:",_62));
}
}else{
if(arguments.length==3){
return objj_msgSend(CPColor,"colorWithPatternImage:",PatternImage(arguments[0],arguments[1],arguments[2]));
}else{
return nil;
}
}
};
PatternImage=function(_64,_65,_66){
return objj_msgSend(_CPCibCustomResource,"imageResourceWithName:size:",_64,CGSizeMake(_65,_66));
};
p;24;BKThemedObjectTemplate.jt;911;@STATIC;1.0;I;15;AppKit/CPView.jt;873;
objj_executeFile("AppKit/CPView.j",NO);
var _1=objj_allocateClassPair(CPView,"BKThemedObjectTemplate"),_2=_1.isa;
class_addIvars(_1,[new objj_ivar("_label"),new objj_ivar("_themedObject")]);
objj_registerClassPair(_1);
class_addMethods(_1,[new objj_method(sel_getUid("initWithCoder:"),function(_3,_4,_5){
with(_3){
_3=objj_msgSendSuper({receiver:_3,super_class:objj_getClass("BKThemedObjectTemplate").super_class},"init");
if(_3){
_label=objj_msgSend(_5,"decodeObjectForKey:","BKThemedObjectTemplateLabel");
_themedObject=objj_msgSend(_5,"decodeObjectForKey:","BKThemedObjectTemplateThemedObject");
}
return _3;
}
}),new objj_method(sel_getUid("encodeWithCoder:"),function(_6,_7,_8){
with(_6){
objj_msgSend(_8,"encodeObject:forKey:",_label,"BKThemedObjectTemplateLabel");
objj_msgSend(_8,"encodeObject:forKey:",_themedObject,"BKThemedObjectTemplateThemedObject");
}
})]);
p;17;BKThemeTemplate.jt;873;@STATIC;1.0;I;21;Foundation/CPObject.jt;829;
objj_executeFile("Foundation/CPObject.j",NO);
var _1=objj_allocateClassPair(CPObject,"BKThemeTemplate"),_2=_1.isa;
class_addIvars(_1,[new objj_ivar("_name"),new objj_ivar("_description")]);
objj_registerClassPair(_1);
class_addMethods(_1,[new objj_method(sel_getUid("initWithCoder:"),function(_3,_4,_5){
with(_3){
_3=objj_msgSendSuper({receiver:_3,super_class:objj_getClass("BKThemeTemplate").super_class},"init");
if(_3){
_name=objj_msgSend(_5,"decodeObjectForKey:","BKThemeTemplateName");
_description=objj_msgSend(_5,"decodeObjectForKey:","BKThemeTemplateDescription");
}
return _3;
}
}),new objj_method(sel_getUid("encodeWithCoder:"),function(_6,_7,_8){
with(_6){
objj_msgSend(_8,"encodeObject:forKey:",_name,"BKThemeTemplateName");
objj_msgSend(_8,"encodeObject:forKey:",_description,"BKThemeTemplateDescription");
}
})]);
p;10;BlendKit.jt;307;@STATIC;1.0;i;22;BKShowcaseController.ji;19;BKThemeDescriptor.ji;17;BKThemeTemplate.ji;24;BKThemedObjectTemplate.jt;187;
objj_executeFile("BKShowcaseController.j",YES);
objj_executeFile("BKThemeDescriptor.j",YES);
objj_executeFile("BKThemeTemplate.j",YES);
objj_executeFile("BKThemedObjectTemplate.j",YES);
e;

Added Site/Site/Frameworks/BlendKit/Browser.environment/MHTMLData.txt.







































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/dark-checkers.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUeNpi1NPTY0AFly5dQhNhYiACDEZFjJhCmP4dsr4DCDAAhJEDocvkWaYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/light-checkers.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAANIWlDQ1BJQ0MgUHJvZmlsZQAAeJyV13k0VW37B/Brn8ExHAcHx0E4MssUmUOGSFSmzCWZOZyTKZUyJIXIEIomiiZFiUSG6iFDSAoJRZmFEMlwfn/IU79nred913v/de1rrb33vfdan++9LgAOsiudTkUBgH9AcKCViQHF3sGRgusELLAACXiB7OoWRNe3sDCHf13zHYAAALTLu9Lp1CTCxYdqVScD7735OaO+Y5flv98HAACEQHsHRwBEDgB4vNbqbQDAc3CttgEAnsPB9GAAxBsAeNy8Xd0BkHAAkAu0sTIEQG4BAMFrrS4DAMLBtboeAAihbl7BAEgXABMxwN0nAAA3AcCk6+4R5AZAkAMAd/cgN38AQjIAKPj709wBCDUAIO1GDwwGIIwAgLy9gyNlbctO8QBb+AGYzX73DqcDlOQASO/63RN7DEByBchN/N2btQIEABBSa5CnijIAACB4AwBsH4MxKwmASwVYSWEwlnIZjJXrAOgegBqqW0hg6K//hSDNAP/teu2bfy00AoACQMSRfNRRdDgmHHuCKRIXzXySxYillvU02xl8HPtZQimnN1cKMYU7lec8bzopnS+TXCtAE8zekC10WbieEiKau/G6WKvEMcl8qTaZE7J3N3XIRyvcU+zefFr5ocpH1bNqper9mkla5dpDOmm6VXpj+hkGzw0nt2cZ15nMmF7d2Wg2vyt3d8ue1xavLduslm3u7H1n22HXad/liHF64Nyzr3d/n8vHA58O4t2euH/xGPQc8hr2HvEZ9eOlPvP/GjBJm6JPH/oWOBM0FzwX8j10/vBC2I8ji0d/HlsOXz6+EiET+S4aOYmKQZ/CxGJPM53BxTHHsySwnmVLxCexnyMkc6RwpnKlEc9zp/Nk8GaSLvBdJGfxZwtcEry84YrQVeFrIjmUXNHrG2+I5YnnS9yUuiV1W/qOzF3Zu+MF1Hty9+ULFYuUHmx+uLlY+dGWEtVStdL5x6Fl6k80yrUqtJ9urdxapVO1Wh1Ro/ds23P9FwZ/GdZiamPqtr80rjdpMG00bWJtSnhl1mzesruV0HrutUWb5RurdmJ76lvrdzYdeztJnZlddu/tux0/CHzI7nHude7b91H449VPLv0HBkQHcj8f/OI26D4kMZQ/7DniNeo9JjN2Z9x3wu8rdVJ+8v5UwDTtG31m88zD2cC5oO/B86rzpQuhP8IWj/w8sqS1VLF8bCV8VWe1isEAQMRQBNQ0uglzF5vGFI7zYrZhMWTdwiaFl2InE/g4yJxkLl6iJLc0jwavOWk/XxA5ib9QoElwVIhbWE3Ei3JB9KUYIq4jcUjygdSUjLQsdVOFPFpBXzFFqV9ZRiV2S6earDpdo1aLTzts6ytdkh5t23MDccNjRm3GwiZhOypNF802m3vsSt/dZkGwNLEKs86zeWvLarfN/pDDZcc6p6l9Ivv3uBw9kOtae3DUnddDz9Pe64T3NZ8a316/RX/ugE00I7r3ofDA5KDc4JKQ+tAPh8fC5o+ij3GFU47LnVCN2BZpFrUn2unkgRiPU9TY4NOBZyLjIuNPJsSdTU1MSMo6dzE5MyUl9VJa6vmM9AsZtzJvXrh/8VbW3ezCS08vP71Se/XVtbac9tz26+03PuR9yR++OXBr8PbUnW93pwom783cnyocL5p4MPywv3jgUXdJW2nD45qyx08Kyy9VpD6NrPSvcqo2q9n6TPY58fnii09/NdY+qkt7GVhv3aDWKNjIaOp+9ag5vsWxVax16HVx2/E329sJ7b1vr73z7VDpWOls7kp7v69bpnv2Q3lPdK9ZH09f38fbn4L6tQcwA42fz3/ZPyg1ODFUPhw1snOUd7R37MY4dUJ1YvVrw2TqlNO0+PTEt+KZ8FmTOeJc1/e8edqC5g/0j5eLKT+dlsSWvi6XrkSumjJIDAYAnETCUEfR2uhyzHGsHraaKQp3itmYuZYllvU0Wzx+J76JPZGQyJHEuYezlSuZmMqdxpPGa8P7lpTBl0G+wJ8lkC2YveGSkLNQr/BVkWuUHNGcjTli18VvSORJ5kvdlL4lc1vWR3Zs0x25Avl7CvcVC5WKNj9QfqhSvOWRaqlaqXqpRpjGD81yrXLtiq1PdSp1T+iu6lVvq9F/ZvDc8IVRzHbM9lrjOpOXO+pNG3Y2miWY481f7Wre3bKn1SLZktOyzeqNdbvN270dthl2JLtO+y6H947dTtnOgs49+3r3f3T5dOCTa85B0YMDbp/dv3gMeuZ7Sa4liO+Y312qHHXi/6XI7N8pUnZE48ji0Z/HlsKXj6+cWI1gREE06u8kwZ3BxTHHNcTvTGA7i0/EJ7Gf40jmTOH6O0tImXwXyL+yZMOfWZI7cN3thlieeL7kTcn1NCmQuyd/X+GPLFEp2VKq+li9TP2JRrlmhfZT7cqtVbrVun/kyPY645fG9SYNOxpNm8xehbZsbN392qLN4o1l+/F3sh22nXZd0d2KHxx7YvtUPsb1qw6c/eI+pD2cMuoz7vuVOkX7Fj/nOH9uMWHFisEAWDv7AACY1AAyNgHYZgFY5wLEbgKQcgEg3QKwYAew0QQUVhhQOnRAduqsnx+AACcIgQIYgAMEQTIUwQ+EgpghYcgtpAUZRnGgTFBRqErUMloHHYWuQy9jRDEOmHzMd6wx9hS2EDvFZMKUwzSE48U54yqZccyazDHM4yxaLDSWGlZ51kjWMjYCWxTbezwPPgA/wr6d/SR7P8GV8JwDzeHJMcFpyZnBucIVxzVD1CLmcatz53FP8bjwLPD68JaSNpFe8nmSceQ7/BL8h/nnBC4LmgjObrgmJC4ULowIl4j4UkQp3aLnN27cGCnGIdYqniKxV1JAckDqrrSh9G0ZA1ku2f5NxXKn5Z0VVBTxisNKf23OVY5Wcd9ioiqnxq22rD6kkalJ0KzRKtLO2Xpe54xuhN7hbYf0qQY+ht5G3tv9jANMgnccM43Zec4s2/z2rrLdDXt6LL5Z4ayFbTT2WtvS7ZLs7zu8dpx1Ju/T3e/pknygwnXEjc/dxOOIZ4EP2dfCL55aG4Ci6dOjDr0IYgo2C0kNEz9CO/o0nPW444mCCEaUTQzqlHPs4zPccYfi2xLTkxaTXVLq0hTPZ2UGXficZZ1de+X+NYmcy9f58jlvJt0m3Dl3L7NQqOjGQ/kSo9K2Mtcn3yr5qgpqDF4E13LUFdTvbIpvlm9pex3aXveO3inYVd8j2dv1Mb5f70vBkPuIyGj3V9sp0nTnTNacy8LEYslSBIPMYAAACliBD2RAD+whBNKhDPoQHKKEuCBJSDUyi5JFuaCyUG/RHOhd6LPoZgw7Zg8mHfMBS8H6YIuwP5gMmc4xvcdJ4EJwL5iJzO7MZSxsLM4s91kxrPtZH7GxsrmxVeN58XR8M7sseyL7BMGcUMjBzkHj6ODcxnmDi8AVyvWBaEx8wE3hTuVe5Qni+crryztGopJm+IL55slH+RH+swICAncENQXrNthuGBWKFOYXLhWxFBmjxIpKitZvDBDjE6sSd5PASzyTDJASkXojHSdjILMiW7EpXE5HbkG+WuGMoo2SqNLU5mrlFBXfLUaqwqpLau/Un2hc1ozS8tK226qjo6grqkfchtFH688YfDOcMhrfPmQ8azK+4/tOlBmPOd+uzbt19+yxsLL0szpinW3zcO8r2w92yw48jopOu50P7bu4v9Zl2JXloJKbt3uWR7XntLeMj4dvpt87f8GAvbRs+kigdFBocEOo0OGgsMajYseSwsdOOETUR6lF58UQTyWdJp7JiCcnZCeqJrUke6T8TEtMV88YvHAly/fS3isy17A5E9ef55XcvHg79q7bPedC4wcaxVtKFB7LP5GukKiUrlZ6pvdiR63lS2rDoaaU5mutT9v62hkdIl063e49CX3lnyY+8w8aDEeO3hr/Mikw7TlzZW5oQXoxYKl0FWEwAIAJOEEIDMABkqEI3qzbX3e/ph7DgXHAfMcaY7N+eV/FOTOLMMcwj7PYsNSwyrNeYiOwRbEt4APwI+zuBFfCZw5PjgnOIM4VrjgiiZjHrc7dyOPCs8Cb/Lfp3fxzvzxbCCPCJb8sW65J/uU4VMbgT8O/Bf/y+0azRqvot93fcv/d7X9S69XvQ/a1+Kfa0O5/uo2+86fcs8q/5WYwrdu9rLmu90baut8C4rrg4rJ1wxUn1xQ/61533DDaFP/qr+aMlrbXoW+E2uve0TuKOmO76rtDeyR7/fqMPsb36w2c/nzwS8Hg/FD7iMio35jpuPQE7qvtZP5U7LTXtx0zsrNss5Nzr78Xz2cs2CxM/IhZNPgp9XNoKWKZvHxlhWslZmVh9QYjgcEAWJuXAACA1ZBGpQVSzA2N/stw978uf2rI+jsQAMB7BOy1BgAiAGwAQ6ABFWgQCBQwB0MwAlib1QAAmDgBLtkBAFT/OBb5z+cGe4QFAwAY0uhHAn28vIMp+nQ61YNiSPOnhwR7BMpRTAPcFOQoykpK6gAA/webaQNyG2W/uAAAAClJREFUGJVjPHPmDAMqMDY2RhNhYiACDEZFjP///0cTOnv27MC6iXqKAKr3CHhmo7+yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/selection.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAIAAADHFsdbAAAPTmlDQ1BJQ0MgUHJvZmlsZQAAeAGtmHk4lN3/x89sDMZgrNlmrMkWsu/7Tva1bDNjN8YYRGRJaVHhIVFTESlLthKRlKjQIqRQKh4taEEi2+8enp7n+v6+13P9/vmd65r7vM7nvD+fz7nvc1/nzLkB4CEEUqmRcABAFIVOc7EyJXh5+xBYXwEUwABeoAPkAomxVBMnJ3tI8i9l8QWAMbsGlJix/kX0b2YsDUoIAEwREvCFbLExk4O22I3JCXQqHdKEMpkYGkiCOBliRZqbixnEVyDGhmxxM5ODtvghk+OJIUzflwCw4CikMAoArDMQG5LIsUSom5mXRIolRkGcAwDcNCoqGorPPQjZ5YhUGuTLvQqxNPO5QDVUghEA6PZCMUb/sUUsAVB7FACJ+X9s0iMA8HcDUOn5j23eZfNZwQSexgbvUtsMB8OYAoB6s7ExLwuNLQ+AtdyNjZXSjY21SwAgxgDoiCTG0eI3tdCNwB4D8H+1t+75Lw8ENDnMCcaDKDAB84fNwosQ3kh5lAALgpUPbcBGZr/IMctpij3HtcoTjZvmC+SfFQwWmhdOFEWK5eNFCBcklaVaZYxkO+VsdrQrWCm2KuN3Fqoi1Pbteq6hqcnQmtcx1y3Q+2xgaJhgdMMEZmps5md+2qLX8os1h428raUd0T7VodCxZfc7Z7jLdld7twj3wx4lnne8hr3nfbftUd1r5hfonxyQF1gedJPYSxohTwevhLKF8YaLRkhEykbtpKhFa1O1YnRoarEK9B1xEvFCCXz72PetJX5JGt3/KPlmytUD+ampaeHpDhmaB/GZ7JnfDvUfvpGVf+TgUdIxi+NS2fDsTycmT67kiOZq5u3+wy8/ruDY6erC1jP9RWPFX8+xMYTOS1/QuGhZ4lbqdym0LKF8/+Wsipwrx6+eqsytyqvOq2FcK6rNq8uuz2zY3xh3PeYGscnjpn2zcYvaLalWXOt628ztkfb2O3Udp+8euBfS6Xpfv0u2m6d7+cH4w9ZH5T3Heul9no+VHi8+qXq69xn3s87+6Of450MDGYM7B98MZb/QezE9XPTS9uXKq4oRr1H20ZYx8mv+131vEsd3jL99m/PO+N3c+4oJn0nsZPefB6Y0pmY+lH8kfZL6NPq5eNpvRmpmcrb6S8JXs2/Ybx+/N8/lzEcvOP/QWVT4qbCktGz0K3Slcg273ryxAc0/N9AGdHAPRoAdgW3A8xCaiBnkbdQ5llOsp9E1bAMcCIwdZy72LbcBz1leFr4I/seC2kI1wsIiyaIT4sb4yxKckqFSfTIqslnbx3bIydMUOpX4lN12FqiMqUnt8lK/pDGiBbR1deJ1S/Qe6s8ZShg5GYeY5JnWmj00n7BYtxK21rJxsiXb0e3THLIdL+xucOpw7nV54TrlNue+6LHuxemN8+H1Fd0jsVfUT8RfJEAkEB8kTOQn8ZLZgkHwcsiX0PdhL8P7Itoiq6MYlJPRadTYmBCac6w5XTVOPB4Tv5wwue954u2kiv0FyYdSwg7sSbVMU00XzkBkzB4cyxw6NH74W9bqUdQx9uM82WInFE9qnDLMMc61yfP9IzCfVEA9vb/w0JnjRaeKL54tOVfLaD3fdeHJxRclr0snLs2U/bqMqEBfwV4VqpSrUq82qLG55lLrVUeuj2tIbsy8fvJGcVPVzdvN91r6br1vnWpbbEffwXWI3pW/p9fpfJ/cRetOfrD/IfGRWY9Ez1pvf9+1x1lPiE+Nngk8+9jf+ZwxQB00HxIe+vqiY7jwZfgrwxHcyOvR+rGs1/5v1MdZx9+/vf7u+PvACa1JzOTHP7unyj+kf9z7Sf8zYRo1PTvTN9v0pfRr9rd930PnfOadFmx+mCzq/tRY0ljW/qW/YrBquea0Hrhhuzn/WKACiKACLMNcYS1wBfhVhBqiC0lCcaLus6SymqDZ0e/Y2tiLOdIwFE4Sdg+XB7c7jwvOi3cvtCKECyQKZgnlbmMIN4jcFe0WGxb/jP9OWJKESXFIo2VwslzbMXLCO9jkkQowhXnFGaUx5Uc7m1QYqmlq5F1m6soaaI33mh1aJdqZOiRdUz0RvR/6QwZNhvlGFGNrEwVTmOmYWZv5OYsES0crJWsO6ymbDtsiO6q9pYOow6Jj7+6LTvucbV2kXRZdH7mdd4/xMPXEeU56NXqn+bj6ivl+2HN9b7qfsz/e/2NAXWBikAWRi/iKdIkcGawa/COkJTQ1zDGcN3w4ghEZFiUf9Y3SHH2Aah+DixmhlcdS6IZxbHGD8aUJlH3aicjE/iTG/qhkgxTOlLEDValJaS7pkukLGQ8PnsuMP2R1WPTwQlbfkdKjicdcjstD68rIicaTBaeic6xzCbnLeS/+aM4vKKCdti3cfgZ5ZrzodvH5s3HnPBka5/kugIvwEkwp7hJfmWC5yGV8Bf6KCPQ28VfxVfPW8F3jrxWqE6kXaeBvFLyOvyHXpHRTqVm9xfSWc2tgW+ztw+2MOw86xu+udErft+1K6q5/8OmRdE9Ab2nf0hPXp3X93M8TBuaHjg7zvmwciRnb9XptfOU9ctJqquqT7ozu1xPzzcu1zPnf2vuYewKLJgBn/AHwFgPA2QqAbH0AtmtDe1UAAE6cALjpALgyH4D9uAdgpqfA7/1jG9AFPiAZMMBdaB9BwuRg9jAqLB/WAhuHs8CV4e7wFHg5/Bl8GSGFcEakICoRr5BopDYyFFmMfIJCoLRRUahLqFEWfhYnluMsD1jRrFash1gfoDnRHuhi9ASbEhud7T47PzuJvZGDlcOfoxmDw0RhHnLKcB7nnMd6Ym9xyXAxuDHc+7m/8VB4ZnFRuG+8dN5lvoP8GP4cAUGBMkFlwVtCdkLj2+KF2YXLRExEXolSxXjFWsS9xVfxZYTdhHWJSsm9UjipLukUGW2Zn7It21PlLHdw7HglX6aQqGirJKeMUh7f2aVyRfWYWsIusvoeDVfN3VoW2pY6NrqOegH6YQYJhhlGJcYtJmOmX8xxFjqWIVZ51pU25bY5dun2SQ5Ux/jdMU4xzmQXimu0W6p7tscJz0Kva973fPp9p/Zs+In7GwR4BmYElRIfkRHBqiGk0OKwgQgQaRp1hPKMKhITRrsRux4XEN+0jzORkvQsWSPlUipP2oH0jYORmbOHo7JmjoYe+5pNPbF0KjNXLq8h365gqPBAkdVZN0bkhUMlNy89vYy8ol0ZU11+baJ+W2PwjfM3P9zSb4ttf3qXszOw6+ZDWI9334Un0/0GA0eHWl/iRpzH0t/cfzs3Ifin9QeXT/HTB2ZTvsZ995nHL0wtFi0pLlessK26rPmtp22uH6ogGJwGXeA7TBxmA6PDLsB6YItwAtwengSvgA8iENB6EojIQ3QhlpFKyADkaeRjFCvKFJWCakP9YtFhSWS5zQpYzVmPsj5Hi6JD0c1sbGw+bFVs6+ye7PUcHBxkjrsYGUw65j2nHectLAGbhV3kCuN6ze3M3cWjy3Mbp4G7wavHe5fPmq+f35d/SiBOkFXwvJC20IttVGEO4UoRB5EF0WIxQ7Fp8fN4O/wSoU4iXBIvOSpVIh0ks11mRrZue5rc7h1iO37KP1G4rHhEKVjZaqeKirAqi+qC2sSu5+qdGh2a17UatRt1GnRb9Nr1uw0GDd8afTZBmmLNtpsbWuyxTLIqtK6xabCttKuyr3VocXywu99p2Hnc5bsbzF3cQ8lT28vdm+5z1Ld0z5297/xZAsQD7YLCiSdIjeSxENZQzbDg8KKIe5FzFPloIpUR8zgW0PXi4uPrE+YStZNi9tck/zxglHo4rTeD86BjZsmhuSzlI8eODh8Xz6ad6D1FyInNvfcHV35Qwb1CiTPFxcZnpxnFF/xL+EsHyrIvO1yRvvqhqrYmuzagXqtR9PpC01hzy63rbYz29A7SPd/7+t3qDwk9vH2cj5eejvd3DTQNXRk+/ipy1Pa14bjA27n3g5M1UxkfPT6LT0/Ptn7N+u4wj13oWSxYcvjFudK2Rtmcfx2QAG6ABdguWAysAbYA14Dvg99GwBFWiBOIF0g8MhLZjGJBeaKuolZYHFnKWTZYvVjr0NzoWPRzNnU2BjsrO419nMON4z7GANPMqcjZiFXH3uQy4+rl9uOe5zmGU8T18cbzCfH18KcIqAi8EywUctnGt21YuEDEW1RKdE7slngunkjYJcEhMSPZLVUmnSUTLeu73V7OcIeyvIKCpKKUkriy3E4lFS1VazXfXdHqpzQqNJ9q/dTB61rpxerXGEwZiRvvMTlrOm6uaJFqOWgtbEO3HbCXcTjpOOPk4lztus0txf2jp41Xi4+kb95etF+S/3xgcNAIyZX8NMQx9E64eUR7lDGliWoc0xFrRH8Q75gwkOif9Dk5MWUpNStdJKMh0+rQ0yzikeVj57LVTgyeouVi8m7luxSsFZ4rwhXHnx1lOJ2/e1Gz5Ool8bLSy7IVlVeVKxurtWraao3ruhpsGt/doDUtNie1rLX+cVum/UqH/N3qTuX7td0qD6ofYXuy+zge055MPHPurxvADkYOPRqWeZn26sWo0JjX6zNvht/yv3N5nzVxbbLzz9GpjY/8n6Q+S05LzOBnxb5s+7L29c239u+MudB51fn5hfofUYuExaGfcUuYpbJl9eU7v+x+9azorFxZFVxNXn24xr8WtHZtbWXdaj1n/dWG1EbkRhNz/rfOS8z9A7CbRUdG0wj2Zuabzf+/S1RkHHQm2yw46IqhBDnuhmomf6TSndygWgD6/YqNd7WAam7oOMQdHGZp8xcTSIHmdhCLQnaVpFAzR4gxENsH0yxdIIZ8YV7hgbZOEGMhppAp7q4QQ/FhydTIzTMuk09S6aZMvRDEF8mxFr81zUmhbp5/+fbQ4lzcIZaGNC8jou2YemauVRLZ/K+xwdGUSEd7yA7lhQuF0W2Y4+eDWBlYgkBAAyGADJSAPTAD5n9dCZCdALWjoV4yiIV0k5u63yqPzXbY//JSglZmZrz4TZ8IMAVxlH9YBg2K9Z/RiVDkOBAJ6eIATaVK5ZPK6t8aZtbIzcy/vez+y7IVbWuEW9owQIJUv+3M+Jt2ZvaohuD4M9GJuh6hSFmkGlIDaYo0QBoidQABKYAUBkpIdejfgQnSCKkH9ek8mbk58/dYtp5P0N/3afd7zNDIKX9b/ysrCIO+Y2ye36EnDVig9+McdCYHoLOe+YngPwudvA862wNgFk1NpIWFhNIJJtDXC7IiwYZCVFYkqKmo6ID/Af9GTe47ptE5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUklEQVQIHVWMsRGAQBACGXITExuyMMv7ov5A7nXGMTrYA3Beg8e+URZVpmQaZlV8tPxpA6xZtPHnyXS29HSQ3Fx90Yv3Pzq95ujN3n7zjm+eewN3s15bSuoFLgAAAABJRU5ErkJggg==
*/

Added Site/Site/Frameworks/BlendKit/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;27;Resources/dark-checkers.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/dark-checkers.pngu;28;Resources/light-checkers.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/light-checkers.pngu;23;Resources/selection.png63;mhtml:Browser.environment/MHTMLData.txt!Resources/selection.png

Added Site/Site/Frameworks/BlendKit/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site/Frameworks/BlendKit/Browser.environment/dataURLs.txt.



>
1
@STATIC;1.0;u;27;Resources/dark-checkers.png198;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUeNpi1NPTY0AFly5dQhNhYiACDEZFjJhCmP4dsr4DCDAAhJEDocvkWaYAAAAASUVORK5CYII=u;28;Resources/light-checkers.png4650;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAANIWlDQ1BJQ0MgUHJvZmlsZQAAeJyV13k0VW37B/Brn8ExHAcHx0E4MssUmUOGSFSmzCWZOZyTKZUyJIXIEIomiiZFiUSG6iFDSAoJRZmFEMlwfn/IU79nred913v/de1rrb33vfdan++9LgAOsiudTkUBgH9AcKCViQHF3sGRgusELLAACXiB7OoWRNe3sDCHf13zHYAAALTLu9Lp1CTCxYdqVScD7735OaO+Y5flv98HAACEQHsHRwBEDgB4vNbqbQDAc3CttgEAnsPB9GAAxBsAeNy8Xd0BkHAAkAu0sTIEQG4BAMFrrS4DAMLBtboeAAihbl7BAEgXABMxwN0nAAA3AcCk6+4R5AZAkAMAd/cgN38AQjIAKPj709wBCDUAIO1GDwwGIIwAgLy9gyNlbctO8QBb+AGYzX73DqcDlOQASO/63RN7DEByBchN/N2btQIEABBSa5CnijIAACB4AwBsH4MxKwmASwVYSWEwlnIZjJXrAOgegBqqW0hg6K//hSDNAP/teu2bfy00AoACQMSRfNRRdDgmHHuCKRIXzXySxYillvU02xl8HPtZQimnN1cKMYU7lec8bzopnS+TXCtAE8zekC10WbieEiKau/G6WKvEMcl8qTaZE7J3N3XIRyvcU+zefFr5ocpH1bNqper9mkla5dpDOmm6VXpj+hkGzw0nt2cZ15nMmF7d2Wg2vyt3d8ue1xavLduslm3u7H1n22HXad/liHF64Nyzr3d/n8vHA58O4t2euH/xGPQc8hr2HvEZ9eOlPvP/GjBJm6JPH/oWOBM0FzwX8j10/vBC2I8ji0d/HlsOXz6+EiET+S4aOYmKQZ/CxGJPM53BxTHHsySwnmVLxCexnyMkc6RwpnKlEc9zp/Nk8GaSLvBdJGfxZwtcEry84YrQVeFrIjmUXNHrG2+I5YnnS9yUuiV1W/qOzF3Zu+MF1Hty9+ULFYuUHmx+uLlY+dGWEtVStdL5x6Fl6k80yrUqtJ9urdxapVO1Wh1Ro/ds23P9FwZ/GdZiamPqtr80rjdpMG00bWJtSnhl1mzesruV0HrutUWb5RurdmJ76lvrdzYdeztJnZlddu/tux0/CHzI7nHude7b91H449VPLv0HBkQHcj8f/OI26D4kMZQ/7DniNeo9JjN2Z9x3wu8rdVJ+8v5UwDTtG31m88zD2cC5oO/B86rzpQuhP8IWj/w8sqS1VLF8bCV8VWe1isEAQMRQBNQ0uglzF5vGFI7zYrZhMWTdwiaFl2InE/g4yJxkLl6iJLc0jwavOWk/XxA5ib9QoElwVIhbWE3Ei3JB9KUYIq4jcUjygdSUjLQsdVOFPFpBXzFFqV9ZRiV2S6earDpdo1aLTzts6ytdkh5t23MDccNjRm3GwiZhOypNF802m3vsSt/dZkGwNLEKs86zeWvLarfN/pDDZcc6p6l9Ivv3uBw9kOtae3DUnddDz9Pe64T3NZ8a316/RX/ugE00I7r3ofDA5KDc4JKQ+tAPh8fC5o+ij3GFU47LnVCN2BZpFrUn2unkgRiPU9TY4NOBZyLjIuNPJsSdTU1MSMo6dzE5MyUl9VJa6vmM9AsZtzJvXrh/8VbW3ezCS08vP71Se/XVtbac9tz26+03PuR9yR++OXBr8PbUnW93pwom783cnyocL5p4MPywv3jgUXdJW2nD45qyx08Kyy9VpD6NrPSvcqo2q9n6TPY58fnii09/NdY+qkt7GVhv3aDWKNjIaOp+9ag5vsWxVax16HVx2/E329sJ7b1vr73z7VDpWOls7kp7v69bpnv2Q3lPdK9ZH09f38fbn4L6tQcwA42fz3/ZPyg1ODFUPhw1snOUd7R37MY4dUJ1YvVrw2TqlNO0+PTEt+KZ8FmTOeJc1/e8edqC5g/0j5eLKT+dlsSWvi6XrkSumjJIDAYAnETCUEfR2uhyzHGsHraaKQp3itmYuZYllvU0Wzx+J76JPZGQyJHEuYezlSuZmMqdxpPGa8P7lpTBl0G+wJ8lkC2YveGSkLNQr/BVkWuUHNGcjTli18VvSORJ5kvdlL4lc1vWR3Zs0x25Avl7CvcVC5WKNj9QfqhSvOWRaqlaqXqpRpjGD81yrXLtiq1PdSp1T+iu6lVvq9F/ZvDc8IVRzHbM9lrjOpOXO+pNG3Y2miWY481f7Wre3bKn1SLZktOyzeqNdbvN270dthl2JLtO+y6H947dTtnOgs49+3r3f3T5dOCTa85B0YMDbp/dv3gMeuZ7Sa4liO+Y312qHHXi/6XI7N8pUnZE48ji0Z/HlsKXj6+cWI1gREE06u8kwZ3BxTHHNcTvTGA7i0/EJ7Gf40jmTOH6O0tImXwXyL+yZMOfWZI7cN3thlieeL7kTcn1NCmQuyd/X+GPLFEp2VKq+li9TP2JRrlmhfZT7cqtVbrVun/kyPY645fG9SYNOxpNm8xehbZsbN392qLN4o1l+/F3sh22nXZd0d2KHxx7YvtUPsb1qw6c/eI+pD2cMuoz7vuVOkX7Fj/nOH9uMWHFisEAWDv7AACY1AAyNgHYZgFY5wLEbgKQcgEg3QKwYAew0QQUVhhQOnRAduqsnx+AACcIgQIYgAMEQTIUwQ+EgpghYcgtpAUZRnGgTFBRqErUMloHHYWuQy9jRDEOmHzMd6wx9hS2EDvFZMKUwzSE48U54yqZccyazDHM4yxaLDSWGlZ51kjWMjYCWxTbezwPPgA/wr6d/SR7P8GV8JwDzeHJMcFpyZnBucIVxzVD1CLmcatz53FP8bjwLPD68JaSNpFe8nmSceQ7/BL8h/nnBC4LmgjObrgmJC4ULowIl4j4UkQp3aLnN27cGCnGIdYqniKxV1JAckDqrrSh9G0ZA1ku2f5NxXKn5Z0VVBTxisNKf23OVY5Wcd9ioiqnxq22rD6kkalJ0KzRKtLO2Xpe54xuhN7hbYf0qQY+ht5G3tv9jANMgnccM43Zec4s2/z2rrLdDXt6LL5Z4ayFbTT2WtvS7ZLs7zu8dpx1Ju/T3e/pknygwnXEjc/dxOOIZ4EP2dfCL55aG4Ci6dOjDr0IYgo2C0kNEz9CO/o0nPW444mCCEaUTQzqlHPs4zPccYfi2xLTkxaTXVLq0hTPZ2UGXficZZ1de+X+NYmcy9f58jlvJt0m3Dl3L7NQqOjGQ/kSo9K2Mtcn3yr5qgpqDF4E13LUFdTvbIpvlm9pex3aXveO3inYVd8j2dv1Mb5f70vBkPuIyGj3V9sp0nTnTNacy8LEYslSBIPMYAAACliBD2RAD+whBNKhDPoQHKKEuCBJSDUyi5JFuaCyUG/RHOhd6LPoZgw7Zg8mHfMBS8H6YIuwP5gMmc4xvcdJ4EJwL5iJzO7MZSxsLM4s91kxrPtZH7GxsrmxVeN58XR8M7sseyL7BMGcUMjBzkHj6ODcxnmDi8AVyvWBaEx8wE3hTuVe5Qni+crryztGopJm+IL55slH+RH+swICAncENQXrNthuGBWKFOYXLhWxFBmjxIpKitZvDBDjE6sSd5PASzyTDJASkXojHSdjILMiW7EpXE5HbkG+WuGMoo2SqNLU5mrlFBXfLUaqwqpLau/Un2hc1ozS8tK226qjo6grqkfchtFH688YfDOcMhrfPmQ8azK+4/tOlBmPOd+uzbt19+yxsLL0szpinW3zcO8r2w92yw48jopOu50P7bu4v9Zl2JXloJKbt3uWR7XntLeMj4dvpt87f8GAvbRs+kigdFBocEOo0OGgsMajYseSwsdOOETUR6lF58UQTyWdJp7JiCcnZCeqJrUke6T8TEtMV88YvHAly/fS3isy17A5E9ef55XcvHg79q7bPedC4wcaxVtKFB7LP5GukKiUrlZ6pvdiR63lS2rDoaaU5mutT9v62hkdIl063e49CX3lnyY+8w8aDEeO3hr/Mikw7TlzZW5oQXoxYKl0FWEwAIAJOEEIDMABkqEI3qzbX3e/ph7DgXHAfMcaY7N+eV/FOTOLMMcwj7PYsNSwyrNeYiOwRbEt4APwI+zuBFfCZw5PjgnOIM4VrjgiiZjHrc7dyOPCs8Cb/Lfp3fxzvzxbCCPCJb8sW65J/uU4VMbgT8O/Bf/y+0azRqvot93fcv/d7X9S69XvQ/a1+Kfa0O5/uo2+86fcs8q/5WYwrdu9rLmu90baut8C4rrg4rJ1wxUn1xQ/61533DDaFP/qr+aMlrbXoW+E2uve0TuKOmO76rtDeyR7/fqMPsb36w2c/nzwS8Hg/FD7iMio35jpuPQE7qvtZP5U7LTXtx0zsrNss5Nzr78Xz2cs2CxM/IhZNPgp9XNoKWKZvHxlhWslZmVh9QYjgcEAWJuXAACA1ZBGpQVSzA2N/stw978uf2rI+jsQAMB7BOy1BgAiAGwAQ6ABFWgQCBQwB0MwAlib1QAAmDgBLtkBAFT/OBb5z+cGe4QFAwAY0uhHAn28vIMp+nQ61YNiSPOnhwR7BMpRTAPcFOQoykpK6gAA/webaQNyG2W/uAAAAClJREFUGJVjPHPmDAMqMDY2RhNhYiACDEZFjP///0cTOnv27MC6iXqKAKr3CHhmo7+yAAAAAElFTkSuQmCCu;23;Resources/selection.png5478;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAIAAADHFsdbAAAPTmlDQ1BJQ0MgUHJvZmlsZQAAeAGtmHk4lN3/x89sDMZgrNlmrMkWsu/7Tva1bDNjN8YYRGRJaVHhIVFTESlLthKRlKjQIqRQKh4taEEi2+8enp7n+v6+13P9/vmd65r7vM7nvD+fz7nvc1/nzLkB4CEEUqmRcABAFIVOc7EyJXh5+xBYXwEUwABeoAPkAomxVBMnJ3tI8i9l8QWAMbsGlJix/kX0b2YsDUoIAEwREvCFbLExk4O22I3JCXQqHdKEMpkYGkiCOBliRZqbixnEVyDGhmxxM5ODtvghk+OJIUzflwCw4CikMAoArDMQG5LIsUSom5mXRIolRkGcAwDcNCoqGorPPQjZ5YhUGuTLvQqxNPO5QDVUghEA6PZCMUb/sUUsAVB7FACJ+X9s0iMA8HcDUOn5j23eZfNZwQSexgbvUtsMB8OYAoB6s7ExLwuNLQ+AtdyNjZXSjY21SwAgxgDoiCTG0eI3tdCNwB4D8H+1t+75Lw8ENDnMCcaDKDAB84fNwosQ3kh5lAALgpUPbcBGZr/IMctpij3HtcoTjZvmC+SfFQwWmhdOFEWK5eNFCBcklaVaZYxkO+VsdrQrWCm2KuN3Fqoi1Pbteq6hqcnQmtcx1y3Q+2xgaJhgdMMEZmps5md+2qLX8os1h428raUd0T7VodCxZfc7Z7jLdld7twj3wx4lnne8hr3nfbftUd1r5hfonxyQF1gedJPYSxohTwevhLKF8YaLRkhEykbtpKhFa1O1YnRoarEK9B1xEvFCCXz72PetJX5JGt3/KPlmytUD+ampaeHpDhmaB/GZ7JnfDvUfvpGVf+TgUdIxi+NS2fDsTycmT67kiOZq5u3+wy8/ruDY6erC1jP9RWPFX8+xMYTOS1/QuGhZ4lbqdym0LKF8/+Wsipwrx6+eqsytyqvOq2FcK6rNq8uuz2zY3xh3PeYGscnjpn2zcYvaLalWXOt628ztkfb2O3Udp+8euBfS6Xpfv0u2m6d7+cH4w9ZH5T3Heul9no+VHi8+qXq69xn3s87+6Of450MDGYM7B98MZb/QezE9XPTS9uXKq4oRr1H20ZYx8mv+131vEsd3jL99m/PO+N3c+4oJn0nsZPefB6Y0pmY+lH8kfZL6NPq5eNpvRmpmcrb6S8JXs2/Ybx+/N8/lzEcvOP/QWVT4qbCktGz0K3Slcg273ryxAc0/N9AGdHAPRoAdgW3A8xCaiBnkbdQ5llOsp9E1bAMcCIwdZy72LbcBz1leFr4I/seC2kI1wsIiyaIT4sb4yxKckqFSfTIqslnbx3bIydMUOpX4lN12FqiMqUnt8lK/pDGiBbR1deJ1S/Qe6s8ZShg5GYeY5JnWmj00n7BYtxK21rJxsiXb0e3THLIdL+xucOpw7nV54TrlNue+6LHuxemN8+H1Fd0jsVfUT8RfJEAkEB8kTOQn8ZLZgkHwcsiX0PdhL8P7Itoiq6MYlJPRadTYmBCac6w5XTVOPB4Tv5wwue954u2kiv0FyYdSwg7sSbVMU00XzkBkzB4cyxw6NH74W9bqUdQx9uM82WInFE9qnDLMMc61yfP9IzCfVEA9vb/w0JnjRaeKL54tOVfLaD3fdeHJxRclr0snLs2U/bqMqEBfwV4VqpSrUq82qLG55lLrVUeuj2tIbsy8fvJGcVPVzdvN91r6br1vnWpbbEffwXWI3pW/p9fpfJ/cRetOfrD/IfGRWY9Ez1pvf9+1x1lPiE+Nngk8+9jf+ZwxQB00HxIe+vqiY7jwZfgrwxHcyOvR+rGs1/5v1MdZx9+/vf7u+PvACa1JzOTHP7unyj+kf9z7Sf8zYRo1PTvTN9v0pfRr9rd930PnfOadFmx+mCzq/tRY0ljW/qW/YrBquea0Hrhhuzn/WKACiKACLMNcYS1wBfhVhBqiC0lCcaLus6SymqDZ0e/Y2tiLOdIwFE4Sdg+XB7c7jwvOi3cvtCKECyQKZgnlbmMIN4jcFe0WGxb/jP9OWJKESXFIo2VwslzbMXLCO9jkkQowhXnFGaUx5Uc7m1QYqmlq5F1m6soaaI33mh1aJdqZOiRdUz0RvR/6QwZNhvlGFGNrEwVTmOmYWZv5OYsES0crJWsO6ymbDtsiO6q9pYOow6Jj7+6LTvucbV2kXRZdH7mdd4/xMPXEeU56NXqn+bj6ivl+2HN9b7qfsz/e/2NAXWBikAWRi/iKdIkcGawa/COkJTQ1zDGcN3w4ghEZFiUf9Y3SHH2Aah+DixmhlcdS6IZxbHGD8aUJlH3aicjE/iTG/qhkgxTOlLEDValJaS7pkukLGQ8PnsuMP2R1WPTwQlbfkdKjicdcjstD68rIicaTBaeic6xzCbnLeS/+aM4vKKCdti3cfgZ5ZrzodvH5s3HnPBka5/kugIvwEkwp7hJfmWC5yGV8Bf6KCPQ28VfxVfPW8F3jrxWqE6kXaeBvFLyOvyHXpHRTqVm9xfSWc2tgW+ztw+2MOw86xu+udErft+1K6q5/8OmRdE9Ab2nf0hPXp3X93M8TBuaHjg7zvmwciRnb9XptfOU9ctJqquqT7ozu1xPzzcu1zPnf2vuYewKLJgBn/AHwFgPA2QqAbH0AtmtDe1UAAE6cALjpALgyH4D9uAdgpqfA7/1jG9AFPiAZMMBdaB9BwuRg9jAqLB/WAhuHs8CV4e7wFHg5/Bl8GSGFcEakICoRr5BopDYyFFmMfIJCoLRRUahLqFEWfhYnluMsD1jRrFash1gfoDnRHuhi9ASbEhud7T47PzuJvZGDlcOfoxmDw0RhHnLKcB7nnMd6Ym9xyXAxuDHc+7m/8VB4ZnFRuG+8dN5lvoP8GP4cAUGBMkFlwVtCdkLj2+KF2YXLRExEXolSxXjFWsS9xVfxZYTdhHWJSsm9UjipLukUGW2Zn7It21PlLHdw7HglX6aQqGirJKeMUh7f2aVyRfWYWsIusvoeDVfN3VoW2pY6NrqOegH6YQYJhhlGJcYtJmOmX8xxFjqWIVZ51pU25bY5dun2SQ5Ux/jdMU4xzmQXimu0W6p7tscJz0Kva973fPp9p/Zs+In7GwR4BmYElRIfkRHBqiGk0OKwgQgQaRp1hPKMKhITRrsRux4XEN+0jzORkvQsWSPlUipP2oH0jYORmbOHo7JmjoYe+5pNPbF0KjNXLq8h365gqPBAkdVZN0bkhUMlNy89vYy8ol0ZU11+baJ+W2PwjfM3P9zSb4ttf3qXszOw6+ZDWI9334Un0/0GA0eHWl/iRpzH0t/cfzs3Ifin9QeXT/HTB2ZTvsZ995nHL0wtFi0pLlessK26rPmtp22uH6ogGJwGXeA7TBxmA6PDLsB6YItwAtwengSvgA8iENB6EojIQ3QhlpFKyADkaeRjFCvKFJWCakP9YtFhSWS5zQpYzVmPsj5Hi6JD0c1sbGw+bFVs6+ye7PUcHBxkjrsYGUw65j2nHectLAGbhV3kCuN6ze3M3cWjy3Mbp4G7wavHe5fPmq+f35d/SiBOkFXwvJC20IttVGEO4UoRB5EF0WIxQ7Fp8fN4O/wSoU4iXBIvOSpVIh0ks11mRrZue5rc7h1iO37KP1G4rHhEKVjZaqeKirAqi+qC2sSu5+qdGh2a17UatRt1GnRb9Nr1uw0GDd8afTZBmmLNtpsbWuyxTLIqtK6xabCttKuyr3VocXywu99p2Hnc5bsbzF3cQ8lT28vdm+5z1Ld0z5297/xZAsQD7YLCiSdIjeSxENZQzbDg8KKIe5FzFPloIpUR8zgW0PXi4uPrE+YStZNi9tck/zxglHo4rTeD86BjZsmhuSzlI8eODh8Xz6ad6D1FyInNvfcHV35Qwb1CiTPFxcZnpxnFF/xL+EsHyrIvO1yRvvqhqrYmuzagXqtR9PpC01hzy63rbYz29A7SPd/7+t3qDwk9vH2cj5eejvd3DTQNXRk+/ipy1Pa14bjA27n3g5M1UxkfPT6LT0/Ptn7N+u4wj13oWSxYcvjFudK2Rtmcfx2QAG6ABdguWAysAbYA14Dvg99GwBFWiBOIF0g8MhLZjGJBeaKuolZYHFnKWTZYvVjr0NzoWPRzNnU2BjsrO419nMON4z7GANPMqcjZiFXH3uQy4+rl9uOe5zmGU8T18cbzCfH18KcIqAi8EywUctnGt21YuEDEW1RKdE7slngunkjYJcEhMSPZLVUmnSUTLeu73V7OcIeyvIKCpKKUkriy3E4lFS1VazXfXdHqpzQqNJ9q/dTB61rpxerXGEwZiRvvMTlrOm6uaJFqOWgtbEO3HbCXcTjpOOPk4lztus0txf2jp41Xi4+kb95etF+S/3xgcNAIyZX8NMQx9E64eUR7lDGliWoc0xFrRH8Q75gwkOif9Dk5MWUpNStdJKMh0+rQ0yzikeVj57LVTgyeouVi8m7luxSsFZ4rwhXHnx1lOJ2/e1Gz5Ool8bLSy7IVlVeVKxurtWraao3ruhpsGt/doDUtNie1rLX+cVum/UqH/N3qTuX7td0qD6ofYXuy+zge055MPHPurxvADkYOPRqWeZn26sWo0JjX6zNvht/yv3N5nzVxbbLzz9GpjY/8n6Q+S05LzOBnxb5s+7L29c239u+MudB51fn5hfofUYuExaGfcUuYpbJl9eU7v+x+9azorFxZFVxNXn24xr8WtHZtbWXdaj1n/dWG1EbkRhNz/rfOS8z9A7CbRUdG0wj2Zuabzf+/S1RkHHQm2yw46IqhBDnuhmomf6TSndygWgD6/YqNd7WAam7oOMQdHGZp8xcTSIHmdhCLQnaVpFAzR4gxENsH0yxdIIZ8YV7hgbZOEGMhppAp7q4QQ/FhydTIzTMuk09S6aZMvRDEF8mxFr81zUmhbp5/+fbQ4lzcIZaGNC8jou2YemauVRLZ/K+xwdGUSEd7yA7lhQuF0W2Y4+eDWBlYgkBAAyGADJSAPTAD5n9dCZCdALWjoV4yiIV0k5u63yqPzXbY//JSglZmZrz4TZ8IMAVxlH9YBg2K9Z/RiVDkOBAJ6eIATaVK5ZPK6t8aZtbIzcy/vez+y7IVbWuEW9owQIJUv+3M+Jt2ZvaohuD4M9GJuh6hSFmkGlIDaYo0QBoidQABKYAUBkpIdejfgQnSCKkH9ek8mbk58/dYtp5P0N/3afd7zNDIKX9b/ysrCIO+Y2ye36EnDVig9+McdCYHoLOe+YngPwudvA862wNgFk1NpIWFhNIJJtDXC7IiwYZCVFYkqKmo6ID/Af9GTe47ptE5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAUklEQVQIHVWMsRGAQBACGXITExuyMMv7ov5A7nXGMTrYA3Beg8e+URZVpmQaZlV8tPxpA6xZtPHnyXS29HSQ3Fx90Yv3Pzq95ujN3n7zjm+eewN3s15bSuoFLgAAAABJRU5ErkJggg==e;

Added Site/Site/Frameworks/BlendKit/CommonJS.environment/BlendKit.sj.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
@STATIC;1.0;p;22;BKShowcaseController.jt;15395;@STATIC;1.0;I;16;AppKit/CPTheme.jI;15;AppKit/CPView.jt;15334;
objj_executeFile("AppKit/CPTheme.j",NO);
objj_executeFile("AppKit/CPView.j",NO);
var _1=176;
var _2="BKLearnMoreToolbarItemIdentifier",_3="BKStateToolbarItemIdentifier",_4="BKBackgroundColorToolbarItemIdentifier";
var _5=objj_allocateClassPair(CPObject,"BKShowcaseController"),_6=_5.isa;
class_addIvars(_5,[new objj_ivar("_themeDescriptorClasses"),new objj_ivar("_themesCollectionView"),new objj_ivar("_themedObjectsCollectionView"),new objj_ivar("theWindow")]);
objj_registerClassPair(_5);
class_addMethods(_5,[new objj_method(sel_getUid("applicationDidFinishLaunching:"),function(_7,_8,_9){
with(_7){
_themeDescriptorClasses=objj_msgSend(BKThemeDescriptor,"allThemeDescriptorClasses");
theWindow=objj_msgSend(objj_msgSend(CPWindow,"alloc"),"initWithContentRect:styleMask:",CGRectMakeZero(),CPBorderlessBridgeWindowMask);
var _a=objj_msgSend(objj_msgSend(CPToolbar,"alloc"),"initWithIdentifier:","Toolbar");
objj_msgSend(_a,"setDelegate:",_7);
objj_msgSend(theWindow,"setToolbar:",_a);
var _b=objj_msgSend(theWindow,"contentView"),_c=objj_msgSend(_b,"bounds"),_d=objj_msgSend(objj_msgSend(CPSplitView,"alloc"),"initWithFrame:",_c);
objj_msgSend(_d,"setIsPaneSplitter:",YES);
objj_msgSend(_d,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
objj_msgSend(_b,"addSubview:",_d);
var _e=objj_msgSend(CPTextField,"labelWithTitle:","THEMES");
objj_msgSend(_e,"setFont:",objj_msgSend(CPFont,"boldSystemFontOfSize:",11));
objj_msgSend(_e,"setTextColor:",objj_msgSend(CPColor,"colorWithCalibratedRed:green:blue:alpha:",93/255,93/255,93/255,1));
objj_msgSend(_e,"setTextShadowColor:",objj_msgSend(CPColor,"colorWithCalibratedRed:green:blue:alpha:",225/255,255/255,255/255,0.7));
objj_msgSend(_e,"setTextShadowOffset:",CGSizeMake(0,1));
objj_msgSend(_e,"sizeToFit");
objj_msgSend(_e,"setFrameOrigin:",CGPointMake(5,4));
var _f=objj_msgSend(objj_msgSend(CPCollectionViewItem,"alloc"),"init");
objj_msgSend(_f,"setView:",objj_msgSend(objj_msgSend(BKThemeDescriptorCell,"alloc"),"init"));
_themesCollectionView=objj_msgSend(objj_msgSend(CPCollectionView,"alloc"),"initWithFrame:",CGRectMake(0,0,_1,CGRectGetHeight(_c)));
objj_msgSend(_themesCollectionView,"setDelegate:",_7);
objj_msgSend(_themesCollectionView,"setItemPrototype:",_f);
objj_msgSend(_themesCollectionView,"setMinItemSize:",CGSizeMake(20,36));
objj_msgSend(_themesCollectionView,"setMaxItemSize:",CGSizeMake(10000000,36));
objj_msgSend(_themesCollectionView,"setMaxNumberOfColumns:",1);
objj_msgSend(_themesCollectionView,"setContent:",_themeDescriptorClasses);
objj_msgSend(_themesCollectionView,"setAutoresizingMask:",CPViewWidthSizable);
objj_msgSend(_themesCollectionView,"setVerticalMargin:",0);
objj_msgSend(_themesCollectionView,"setSelectable:",YES);
objj_msgSend(_themesCollectionView,"setFrameOrigin:",CGPointMake(0,20));
objj_msgSend(_themesCollectionView,"setAutoresizingMask:",CPViewWidthSizable);
var _10=objj_msgSend(objj_msgSend(CPScrollView,"alloc"),"initWithFrame:",CGRectMake(0,0,_1,CGRectGetHeight(_c))),_b=objj_msgSend(_10,"contentView");
objj_msgSend(_10,"setAutohidesScrollers:",YES);
objj_msgSend(_10,"setDocumentView:",_themesCollectionView);
objj_msgSend(_b,"setBackgroundColor:",objj_msgSend(CPColor,"colorWithRed:green:blue:alpha:",212/255,221/255,230/255,1));
objj_msgSend(_b,"addSubview:",_e);
objj_msgSend(_d,"addSubview:",_10);
_themedObjectsCollectionView=objj_msgSend(objj_msgSend(CPCollectionView,"alloc"),"initWithFrame:",CGRectMake(0,0,CGRectGetWidth(_c)-_1-1,10));
var _11=objj_msgSend(objj_msgSend(CPCollectionViewItem,"alloc"),"init");
objj_msgSend(_11,"setView:",objj_msgSend(objj_msgSend(BKShowcaseCell,"alloc"),"init"));
objj_msgSend(_themedObjectsCollectionView,"setItemPrototype:",_11);
objj_msgSend(_themedObjectsCollectionView,"setVerticalMargin:",20);
objj_msgSend(_themedObjectsCollectionView,"setAutoresizingMask:",CPViewWidthSizable);
var _10=objj_msgSend(objj_msgSend(CPScrollView,"alloc"),"initWithFrame:",CGRectMake(_1+1,0,CGRectGetWidth(_c)-_1-1,CGRectGetHeight(_c)));
objj_msgSend(_10,"setHasHorizontalScroller:",NO);
objj_msgSend(_10,"setAutohidesScrollers:",YES);
objj_msgSend(_10,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
objj_msgSend(_10,"setDocumentView:",_themedObjectsCollectionView);
objj_msgSend(_d,"addSubview:",_10);
objj_msgSend(_themesCollectionView,"setSelectionIndexes:",objj_msgSend(CPIndexSet,"indexSetWithIndex:",0));
objj_msgSend(theWindow,"setFullPlatformWindow:",YES);
objj_msgSend(theWindow,"makeKeyAndOrderFront:",_7);
}
}),new objj_method(sel_getUid("collectionViewDidChangeSelection:"),function(_12,_13,_14){
with(_12){
var _15=_themeDescriptorClasses[objj_msgSend(objj_msgSend(_14,"selectionIndexes"),"firstIndex")],_16=objj_msgSend(_15,"itemSize");
_16.width=MAX(100,_16.width+20);
_16.height=MAX(100,_16.height+30);
objj_msgSend(_themedObjectsCollectionView,"setMinItemSize:",_16);
objj_msgSend(_themedObjectsCollectionView,"setMaxItemSize:",_16);
objj_msgSend(_themedObjectsCollectionView,"setContent:",objj_msgSend(_15,"themedShowcaseObjectTemplates"));
objj_msgSend(BKShowcaseCell,"setBackgroundColor:",objj_msgSend(_15,"showcaseBackgroundColor"));
}
}),new objj_method(sel_getUid("hasLearnMoreURL"),function(_17,_18){
with(_17){
return objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","BKLearnMoreURL");
}
}),new objj_method(sel_getUid("toolbarAllowedItemIdentifiers:"),function(_19,_1a,_1b){
with(_19){
return [_2,CPToolbarSpaceItemIdentifier,CPToolbarFlexibleSpaceItemIdentifier,_4,_3];
}
}),new objj_method(sel_getUid("toolbarDefaultItemIdentifiers:"),function(_1c,_1d,_1e){
with(_1c){
var _1f=[CPToolbarFlexibleSpaceItemIdentifier,_4,_3];
if(objj_msgSend(_1c,"hasLearnMoreURL")){
_1f=[_2].concat(_1f);
}
return _1f;
}
}),new objj_method(sel_getUid("toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:"),function(_20,_21,_22,_23,_24){
with(_20){
var _25=objj_msgSend(objj_msgSend(CPToolbarItem,"alloc"),"initWithItemIdentifier:",_23);
objj_msgSend(_25,"setTarget:",_20);
if(_23===_3){
var _26=objj_msgSend(CPPopUpButton,"buttonWithTitle:","Enabled");
objj_msgSend(_26,"addItemWithTitle:","Disabled");
objj_msgSend(_25,"setView:",_26);
objj_msgSend(_25,"setTarget:",nil);
objj_msgSend(_25,"setAction:",sel_getUid("changeState:"));
objj_msgSend(_25,"setLabel:","State");
var _27=CGRectGetWidth(objj_msgSend(_26,"frame"));
objj_msgSend(_25,"setMinSize:",CGSizeMake(_27+20,24));
objj_msgSend(_25,"setMaxSize:",CGSizeMake(_27+20,24));
}else{
if(_23===_4){
var _26=objj_msgSend(CPPopUpButton,"buttonWithTitle:","Window Background");
objj_msgSend(_26,"addItemWithTitle:","Light Checkers");
objj_msgSend(_26,"addItemWithTitle:","Dark Checkers");
objj_msgSend(_26,"addItemWithTitle:","White");
objj_msgSend(_26,"addItemWithTitle:","Black");
objj_msgSend(_26,"addItemWithTitle:","More Choices...");
var _28=objj_msgSend(_26,"itemArray");
objj_msgSend(_28[0],"setRepresentedObject:",objj_msgSend(BKThemeDescriptor,"windowBackgroundColor"));
objj_msgSend(_28[1],"setRepresentedObject:",objj_msgSend(BKThemeDescriptor,"lightCheckersColor"));
objj_msgSend(_28[2],"setRepresentedObject:",objj_msgSend(BKThemeDescriptor,"darkCheckersColor"));
objj_msgSend(_28[3],"setRepresentedObject:",objj_msgSend(CPColor,"whiteColor"));
objj_msgSend(_28[4],"setRepresentedObject:",objj_msgSend(CPColor,"blackColor"));
objj_msgSend(_25,"setView:",_26);
objj_msgSend(_25,"setTarget:",nil);
objj_msgSend(_25,"setAction:",sel_getUid("changeColor:"));
objj_msgSend(_25,"setLabel:","Background Color");
var _27=CGRectGetWidth(objj_msgSend(_26,"frame"));
objj_msgSend(_25,"setMinSize:",CGSizeMake(_27,24));
objj_msgSend(_25,"setMaxSize:",CGSizeMake(_27,24));
}else{
if(_23===_2){
var _29=objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","BKLearnMoreButtonTitle");
if(!_29){
_29=objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","CPBundleName")||"Home Page";
}
var _2a=objj_msgSend(CPButton,"buttonWithTitle:",_29);
objj_msgSend(theWindow,"setDefaultButton:",_2a);
objj_msgSend(_25,"setView:",_2a);
objj_msgSend(_25,"setLabel:","Learn More");
objj_msgSend(_25,"setTarget:",nil);
objj_msgSend(_25,"setAction:",sel_getUid("learnMore:"));
var _27=CGRectGetWidth(objj_msgSend(_2a,"frame"));
objj_msgSend(_25,"setMinSize:",CGSizeMake(_27,24));
objj_msgSend(_25,"setMaxSize:",CGSizeMake(_27,24));
}
}
}
return _25;
}
}),new objj_method(sel_getUid("learnMore:"),function(_2b,_2c,_2d){
with(_2b){
window.location.href=objj_msgSend(objj_msgSend(CPBundle,"mainBundle"),"objectForInfoDictionaryKey:","BKLearnMoreURL");
}
}),new objj_method(sel_getUid("selectedThemeDescriptor"),function(_2e,_2f){
with(_2e){
return _themeDescriptorClasses[objj_msgSend(objj_msgSend(_themesCollectionView,"selectionIndexes"),"firstIndex")];
}
}),new objj_method(sel_getUid("changeState:"),function(_30,_31,_32){
with(_30){
var _33=objj_msgSend(objj_msgSend(_30,"selectedThemeDescriptor"),"themedShowcaseObjectTemplates"),_34=objj_msgSend(_33,"count");
while(_34--){
var _35=objj_msgSend(_33[_34],"valueForKey:","themedObject");
if(objj_msgSend(_35,"respondsToSelector:",sel_getUid("setEnabled:"))){
objj_msgSend(_35,"setEnabled:",objj_msgSend(_32,"title")==="Enabled"?YES:NO);
}
}
}
}),new objj_method(sel_getUid("changeColor:"),function(_36,_37,_38){
with(_36){
var _39=nil;
if(objj_msgSend(_38,"isKindOfClass:",objj_msgSend(CPColorPanel,"class"))){
_39=objj_msgSend(_38,"color");
}else{
if(objj_msgSend(_38,"titleOfSelectedItem")==="More Choices..."){
objj_msgSend(_38,"addItemWithTitle:","Other");
objj_msgSend(_38,"selectItemWithTitle:","Other");
objj_msgSend(CPApp,"orderFrontColorPanel:",_36);
}else{
_39=objj_msgSend(objj_msgSend(_38,"selectedItem"),"representedObject");
objj_msgSend(_38,"removeItemWithTitle:","Other");
}
}
if(_39){
objj_msgSend(objj_msgSend(_36,"selectedThemeDescriptor"),"setShowcaseBackgroundColor:",_39);
objj_msgSend(BKShowcaseCell,"setBackgroundColor:",_39);
}
}
})]);
var _3a=nil;
var _5=objj_allocateClassPair(CPView,"BKThemeDescriptorCell"),_6=_5.isa;
class_addIvars(_5,[new objj_ivar("_label")]);
objj_registerClassPair(_5);
class_addMethods(_5,[new objj_method(sel_getUid("setRepresentedObject:"),function(_3b,_3c,_3d){
with(_3b){
if(!_label){
_label=objj_msgSend(CPTextField,"labelWithTitle:","hello");
objj_msgSend(_label,"setFont:",objj_msgSend(CPFont,"systemFontOfSize:",11));
objj_msgSend(_label,"setFrame:",CGRectMake(10,0,CGRectGetWidth(objj_msgSend(_3b,"bounds"))-20,CGRectGetHeight(objj_msgSend(_3b,"bounds"))));
objj_msgSend(_label,"setVerticalAlignment:",CPCenterVerticalTextAlignment);
objj_msgSend(_label,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
objj_msgSend(_3b,"addSubview:",_label);
}
objj_msgSend(_label,"setStringValue:",objj_msgSend(_3d,"themeName")+" ("+objj_msgSend(objj_msgSend(_3d,"themedShowcaseObjectTemplates"),"count")+")");
}
}),new objj_method(sel_getUid("setSelected:"),function(_3e,_3f,_40){
with(_3e){
objj_msgSend(_3e,"setBackgroundColor:",_40?objj_msgSend(objj_msgSend(_3e,"class"),"selectionColor"):nil);
objj_msgSend(_label,"setTextShadowOffset:",_40?CGSizeMake(0,1):CGSizeMakeZero());
objj_msgSend(_label,"setTextShadowColor:",_40?objj_msgSend(CPColor,"blackColor"):nil);
objj_msgSend(_label,"setFont:",_40?objj_msgSend(CPFont,"boldSystemFontOfSize:",11):objj_msgSend(CPFont,"systemFontOfSize:",11));
objj_msgSend(_label,"setTextColor:",_40?objj_msgSend(CPColor,"whiteColor"):objj_msgSend(CPColor,"blackColor"));
}
})]);
class_addMethods(_6,[new objj_method(sel_getUid("selectionColor"),function(_41,_42){
with(_41){
if(!_3a){
_3a=objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPImage,"alloc"),"initWithContentsOfFile:size:",objj_msgSend(objj_msgSend(CPBundle,"bundleForClass:",objj_msgSend(BKThemeDescriptorCell,"class")),"pathForResource:","selection.png"),CGSizeMake(1,36)));
}
return _3a;
}
})]);
var _43=nil;
var _44="BKShowcaseCellBackgroundColorDidChangeNotification";
var _5=objj_allocateClassPair(CPView,"BKShowcaseCell"),_6=_5.isa;
class_addIvars(_5,[new objj_ivar("_backgroundView"),new objj_ivar("_view"),new objj_ivar("_label")]);
objj_registerClassPair(_5);
class_addMethods(_5,[new objj_method(sel_getUid("init"),function(_45,_46){
with(_45){
_45=objj_msgSendSuper({receiver:_45,super_class:objj_getClass("BKShowcaseCell").super_class},"init");
if(_45){
objj_msgSend(objj_msgSend(CPNotificationCenter,"defaultCenter"),"addObserver:selector:name:object:",_45,sel_getUid("showcaseBackgroundDidChange:"),_44,nil);
}
return _45;
}
}),new objj_method(sel_getUid("initWithCoder:"),function(_47,_48,_49){
with(_47){
_47=objj_msgSendSuper({receiver:_47,super_class:objj_getClass("BKShowcaseCell").super_class},"initWithCoder:",_49);
if(_47){
objj_msgSend(objj_msgSend(CPNotificationCenter,"defaultCenter"),"addObserver:selector:name:object:",_47,sel_getUid("showcaseBackgroundDidChange:"),_44,nil);
}
return _47;
}
}),new objj_method(sel_getUid("showcaseBackgroundDidChange:"),function(_4a,_4b,_4c){
with(_4a){
objj_msgSend(_backgroundView,"setBackgroundColor:",objj_msgSend(BKShowcaseCell,"backgroundColor"));
}
}),new objj_method(sel_getUid("setSelected:"),function(_4d,_4e,_4f){
with(_4d){
}
}),new objj_method(sel_getUid("setRepresentedObject:"),function(_50,_51,_52){
with(_50){
if(!_label){
_label=objj_msgSend(objj_msgSend(CPTextField,"alloc"),"initWithFrame:",CGRectMakeZero());
objj_msgSend(_label,"setAlignment:",CPCenterTextAlignment);
objj_msgSend(_label,"setAutoresizingMask:",CPViewMinYMargin|CPViewWidthSizable);
objj_msgSend(_label,"setFont:",objj_msgSend(CPFont,"boldSystemFontOfSize:",11));
objj_msgSend(_50,"addSubview:",_label);
}
objj_msgSend(_label,"setStringValue:",objj_msgSend(_52,"valueForKey:","label"));
objj_msgSend(_label,"sizeToFit");
objj_msgSend(_label,"setFrame:",CGRectMake(0,CGRectGetHeight(objj_msgSend(_50,"bounds"))-CGRectGetHeight(objj_msgSend(_label,"frame")),CGRectGetWidth(objj_msgSend(_50,"bounds")),CGRectGetHeight(objj_msgSend(_label,"frame"))));
if(!_backgroundView){
_backgroundView=objj_msgSend(objj_msgSend(CPView,"alloc"),"init");
objj_msgSend(_50,"addSubview:",_backgroundView);
}
objj_msgSend(_backgroundView,"setFrame:",CGRectMake(0,0,CGRectGetWidth(objj_msgSend(_50,"bounds")),CGRectGetMinY(objj_msgSend(_label,"frame"))));
objj_msgSend(_backgroundView,"setAutoresizingMask:",CPViewWidthSizable|CPViewHeightSizable);
if(_view){
objj_msgSend(_view,"removeFromSuperview");
}
_view=objj_msgSend(_52,"valueForKey:","themedObject");
objj_msgSend(_view,"setTheme:",nil);
objj_msgSend(_view,"setAutoresizingMask:",CPViewMinXMargin|CPViewMaxXMargin|CPViewMinYMargin|CPViewMaxYMargin);
objj_msgSend(_view,"setFrameOrigin:",CGPointMake((CGRectGetWidth(objj_msgSend(_backgroundView,"bounds"))-CGRectGetWidth(objj_msgSend(_view,"frame")))/2,(CGRectGetHeight(objj_msgSend(_backgroundView,"bounds"))-CGRectGetHeight(objj_msgSend(_view,"frame")))/2));
objj_msgSend(_backgroundView,"addSubview:",_view);
objj_msgSend(_backgroundView,"setBackgroundColor:",objj_msgSend(BKShowcaseCell,"backgroundColor"));
}
})]);
class_addMethods(_6,[new objj_method(sel_getUid("setBackgroundColor:"),function(_53,_54,_55){
with(_53){
if(_43===_55){
return;
}
_43=_55;
objj_msgSend(objj_msgSend(CPNotificationCenter,"defaultCenter"),"postNotificationName:object:",_44,nil);
}
}),new objj_method(sel_getUid("backgroundColor"),function(_56,_57){
with(_56){
return _43;
}
})]);
p;19;BKThemeDescriptor.jt;7386;@STATIC;1.0;I;21;Foundation/CPObject.jt;7341;
objj_executeFile("Foundation/CPObject.j",NO);
var _1={},_2={},_3={},_4={},_5=nil,_6=nil,_7=nil;
var _8=objj_allocateClassPair(CPObject,"BKThemeDescriptor"),_9=_8.isa;
objj_registerClassPair(_8);
class_addMethods(_9,[new objj_method(sel_getUid("allThemeDescriptorClasses"),function(_a,_b){
with(_a){
var _c=[];
for(candidate in global){
var _d=objj_getClass(candidate),_e=class_getName(_d);
if(_e==="BKThemeDescriptor"){
continue;
}
var _f=_e.indexOf("ThemeDescriptor");
if((_f>=0)&&(_f===_e.length-"ThemeDescriptor".length)){
_c.push(_d);
}
}
objj_msgSend(_c,"sortUsingSelector:",sel_getUid("compare:"));
return _c;
}
}),new objj_method(sel_getUid("lightCheckersColor"),function(_10,_11){
with(_10){
if(!_5){
_5=objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPImage,"alloc"),"initWithContentsOfFile:size:",objj_msgSend(objj_msgSend(CPBundle,"bundleForClass:",objj_msgSend(BKThemeDescriptor,"class")),"pathForResource:","light-checkers.png"),CGSizeMake(12,12)));
}
return _5;
}
}),new objj_method(sel_getUid("darkCheckersColor"),function(_12,_13){
with(_12){
if(!_6){
_6=objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPImage,"alloc"),"initWithContentsOfFile:size:",objj_msgSend(objj_msgSend(CPBundle,"bundleForClass:",objj_msgSend(BKThemeDescriptor,"class")),"pathForResource:","dark-checkers.png"),CGSizeMake(12,12)));
}
return _6;
}
}),new objj_method(sel_getUid("windowBackgroundColor"),function(_14,_15){
with(_14){
return objj_msgSend(_CPStandardWindowView,"bodyBackgroundColor");
}
}),new objj_method(sel_getUid("defaultShowcaseBackgroundColor"),function(_16,_17){
with(_16){
return objj_msgSend(_CPStandardWindowView,"bodyBackgroundColor");
}
}),new objj_method(sel_getUid("showcaseBackgroundColor"),function(_18,_19){
with(_18){
var _1a=objj_msgSend(_18,"className");
if(!_4[_1a]){
_4[_1a]=objj_msgSend(_18,"defaultShowcaseBackgroundColor");
}
return _4[_1a];
}
}),new objj_method(sel_getUid("setShowcaseBackgroundColor:"),function(_1b,_1c,_1d){
with(_1b){
_4[objj_msgSend(_1b,"className")]=_1d;
}
}),new objj_method(sel_getUid("itemSize"),function(_1e,_1f){
with(_1e){
var _20=objj_msgSend(_1e,"className");
if(!_1[_20]){
objj_msgSend(_1e,"calculateThemedObjectTemplates");
}
return CGSizeMakeCopy(_1[_20]);
}
}),new objj_method(sel_getUid("themedObjectTemplates"),function(_21,_22){
with(_21){
var _23=objj_msgSend(_21,"className");
if(!_2[_23]){
objj_msgSend(_21,"calculateThemedObjectTemplates");
}
return _2[_23];
}
}),new objj_method(sel_getUid("themedShowcaseObjectTemplates"),function(_24,_25){
with(_24){
var _26=objj_msgSend(_24,"className");
if(!_3[_26]){
objj_msgSend(_24,"calculateThemedObjectTemplates");
}
return _3[_26];
}
}),new objj_method(sel_getUid("calculateThemedObjectTemplates"),function(_27,_28){
with(_27){
var _29=[],_2a=[],_2b=CGSizeMake(0,0),_2c=class_copyMethodList(objj_msgSend(_27,"class").isa),_2d=0,_2e=objj_msgSend(_2c,"count"),_2f=[];
if(objj_msgSend(_27,"respondsToSelector:",sel_getUid("themeShowcaseExcludes"))){
_2f=objj_msgSend(_27,"themeShowcaseExcludes");
}
for(;_2d<_2f.length;++_2d){
var _30=_2f[_2d].toLowerCase();
if(_30&&_30.indexOf("themed")!==0){
_2f[_2d]="themed"+_30;
}else{
_2f[_2d]=_30;
}
}
for(_2d=0;_2d<_2e;++_2d){
var _31=_2c[_2d],_32=method_getName(_31);
if(_32.indexOf("themed")!==0){
continue;
}
var _33=method_getImplementation(_31),_34=_33(_27,_32);
if(!_34){
continue;
}
var _35=objj_msgSend(objj_msgSend(BKThemedObjectTemplate,"alloc"),"init"),_36=objj_msgSend(_2f,"containsObject:",_32.toLowerCase());
objj_msgSend(_35,"setValue:forKey:",_34,"themedObject");
objj_msgSend(_35,"setValue:forKey:",BKLabelFromIdentifier(_32),"label");
objj_msgSend(_29,"addObject:",_35);
if(!_36){
if(objj_msgSend(_34,"isKindOfClass:",objj_msgSend(CPView,"class"))){
var _37=objj_msgSend(_34,"frame").size,_38=objj_msgSend(objj_msgSend(_35,"valueForKey:","label"),"sizeWithFont:",objj_msgSend(CPFont,"boldSystemFontOfSize:",12)).width+20;
if(_37.width>_2b.width){
_2b.width=_37.width;
}
if(_38>_2b.width){
_2b.width=_38;
}
if(_37.height>_2b.height){
_2b.height=_37.height;
}
}
objj_msgSend(_2a,"addObject:",_35);
}
}
var _39=objj_msgSend(_27,"className");
_1[_39]=_2b;
_2[_39]=_29;
_3[_39]=_2a;
}
}),new objj_method(sel_getUid("compare:"),function(_3a,_3b,_3c){
with(_3a){
return objj_msgSend(objj_msgSend(_3a,"themeName"),"compare:",objj_msgSend(_3c,"themeName"));
}
}),new objj_method(sel_getUid("registerThemeValues:forView:"),function(_3d,_3e,_3f,_40){
with(_3d){
for(var i=0;i<_3f.length;++i){
var _41=_3f[i],_42=_41[0],_43=_41[1],_44=_41[2];
if(_44){
objj_msgSend(_40,"setValue:forThemeAttribute:inState:",_43,_42,_44);
}else{
objj_msgSend(_40,"setValue:forThemeAttribute:",_43,_42);
}
}
}
}),new objj_method(sel_getUid("registerThemeValues:forView:inherit:"),function(_45,_46,_47,_48,_49){
with(_45){
if(_49){
var _4a=objj_msgSend(_45,"themeName"),_4b=_4a.indexOf("-");
if(_4b<0){
objj_msgSend(_45,"registerThemeValues:forView:",_49,_48);
}else{
var _4c=_4a.substr(_4b+1)+"/";
for(var i=0;i<_49.length;++i){
var _4d=_49[i],_4e=_4d[0],_4f=_4d[1],_50=_4d[2],_51=nil;
if(typeof (_4f)==="object"&&_4f.hasOwnProperty("isa")&&objj_msgSend(_4f,"isKindOfClass:",CPColor)&&(_51=objj_msgSend(_4f,"patternImage"))){
if(objj_msgSend(_51,"isThreePartImage")||objj_msgSend(_51,"isNinePartImage")){
var _52=objj_msgSend(_51,"imageSlices"),_53=[];
for(var _54=0;_54<_52.length;++_54){
var _55=_52[_54],_56=_4c+objj_msgSend(objj_msgSend(_55,"filename"),"lastPathComponent"),_57=objj_msgSend(_55,"size");
_53.push([_56,_57.width,_57.height]);
}
if(objj_msgSend(_51,"isThreePartImage")){
_4f=PatternColor(_53,objj_msgSend(_51,"isVertical"));
}else{
_4f=PatternColor(_53);
}
}else{
var _56=_4c+objj_msgSend(objj_msgSend(_51,"filename"),"lastPathComponent"),_57=objj_msgSend(_51,"size");
_4f=PatternColor(_56,_57.width,_57.height);
}
}
if(_50){
objj_msgSend(_48,"setValue:forThemeAttribute:inState:",_4f,_4e,_50);
}else{
objj_msgSend(_48,"setValue:forThemeAttribute:",_4f,_4e);
}
}
}
}
if(_47){
objj_msgSend(_45,"registerThemeValues:forView:",_47,_48);
}
}
})]);
BKLabelFromIdentifier=function(_58){
var _59=_58.substr("themed".length),_5a=0,_5b=_59.length,_5c="",_5d=null,_5e=YES;
for(;_5a<_5b;++_5a){
var _5f=_59.charAt(_5a),_60=/^[A-Z]/.test(_5f);
if(_60){
if(!_5e){
if(_5d===null){
_5c+=" "+_5f.toLowerCase();
}else{
_5c+=_5f;
}
}
_5d=_5f;
}else{
if(_5e&&_5d!==null){
_5c+=_5d;
}
_5c+=_5f;
_5d=null;
_5e=NO;
}
}
return _5c;
};
PatternIsVertical=YES,PatternIsHorizontal=NO;
PatternColor=function(){
if(arguments.length<3){
var _61=arguments[0],_62=[];
for(var i=0;i<_61.length;++i){
var _63=_61[i];
_62.push(_63?objj_msgSend(_CPCibCustomResource,"imageResourceWithName:size:",_63[0],CGSizeMake(_63[1],_63[2])):nil);
}
if(arguments.length==2){
return objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPThreePartImage,"alloc"),"initWithImageSlices:isVertical:",_62,arguments[1]));
}else{
return objj_msgSend(CPColor,"colorWithPatternImage:",objj_msgSend(objj_msgSend(CPNinePartImage,"alloc"),"initWithImageSlices:",_62));
}
}else{
if(arguments.length==3){
return objj_msgSend(CPColor,"colorWithPatternImage:",PatternImage(arguments[0],arguments[1],arguments[2]));
}else{
return nil;
}
}
};
PatternImage=function(_64,_65,_66){
return objj_msgSend(_CPCibCustomResource,"imageResourceWithName:size:",_64,CGSizeMake(_65,_66));
};
p;24;BKThemedObjectTemplate.jt;911;@STATIC;1.0;I;15;AppKit/CPView.jt;873;
objj_executeFile("AppKit/CPView.j",NO);
var _1=objj_allocateClassPair(CPView,"BKThemedObjectTemplate"),_2=_1.isa;
class_addIvars(_1,[new objj_ivar("_label"),new objj_ivar("_themedObject")]);
objj_registerClassPair(_1);
class_addMethods(_1,[new objj_method(sel_getUid("initWithCoder:"),function(_3,_4,_5){
with(_3){
_3=objj_msgSendSuper({receiver:_3,super_class:objj_getClass("BKThemedObjectTemplate").super_class},"init");
if(_3){
_label=objj_msgSend(_5,"decodeObjectForKey:","BKThemedObjectTemplateLabel");
_themedObject=objj_msgSend(_5,"decodeObjectForKey:","BKThemedObjectTemplateThemedObject");
}
return _3;
}
}),new objj_method(sel_getUid("encodeWithCoder:"),function(_6,_7,_8){
with(_6){
objj_msgSend(_8,"encodeObject:forKey:",_label,"BKThemedObjectTemplateLabel");
objj_msgSend(_8,"encodeObject:forKey:",_themedObject,"BKThemedObjectTemplateThemedObject");
}
})]);
p;17;BKThemeTemplate.jt;873;@STATIC;1.0;I;21;Foundation/CPObject.jt;829;
objj_executeFile("Foundation/CPObject.j",NO);
var _1=objj_allocateClassPair(CPObject,"BKThemeTemplate"),_2=_1.isa;
class_addIvars(_1,[new objj_ivar("_name"),new objj_ivar("_description")]);
objj_registerClassPair(_1);
class_addMethods(_1,[new objj_method(sel_getUid("initWithCoder:"),function(_3,_4,_5){
with(_3){
_3=objj_msgSendSuper({receiver:_3,super_class:objj_getClass("BKThemeTemplate").super_class},"init");
if(_3){
_name=objj_msgSend(_5,"decodeObjectForKey:","BKThemeTemplateName");
_description=objj_msgSend(_5,"decodeObjectForKey:","BKThemeTemplateDescription");
}
return _3;
}
}),new objj_method(sel_getUid("encodeWithCoder:"),function(_6,_7,_8){
with(_6){
objj_msgSend(_8,"encodeObject:forKey:",_name,"BKThemeTemplateName");
objj_msgSend(_8,"encodeObject:forKey:",_description,"BKThemeTemplateDescription");
}
})]);
p;10;BlendKit.jt;307;@STATIC;1.0;i;22;BKShowcaseController.ji;19;BKThemeDescriptor.ji;17;BKThemeTemplate.ji;24;BKThemedObjectTemplate.jt;187;
objj_executeFile("BKShowcaseController.j",YES);
objj_executeFile("BKThemeDescriptor.j",YES);
objj_executeFile("BKThemeTemplate.j",YES);
objj_executeFile("BKThemedObjectTemplate.j",YES);
e;

Added Site/Site/Frameworks/BlendKit/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;17;com.280n.BlendKitK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;8;BlendKitK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;11;BlendKit.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;E;

Added Site/Site/Frameworks/BlendKit/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site/Frameworks/BlendKit/Resources/dark-checkers.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/BlendKit/Resources/light-checkers.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/BlendKit/Resources/selection.png.

cannot compute difference between binary files

Added Site/Site/Frameworks/Foundation/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;19;com.280n.FoundationK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;10;FoundationK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;4;ObjJE;K;18;CPBundleExecutableS;13;Foundation.sjK;36;CPBundleEnvironmentsWithImageSpritesA;E;E;

Added Site/Site/Frameworks/Foundation/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site/Frameworks/Foundation/ObjJ.environment/Foundation.sj.

more than 10,000 changes

Added Site/Site/Frameworks/Objective-J/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site/Frameworks/Objective-J/Objective-J.js.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
var ObjectiveJ={};
(function(_1,_2){
if(!this.JSON){
JSON={};
}
(function(){
function f(n){
return n<10?"0"+n:n;
};
if(typeof Date.prototype.toJSON!=="function"){
Date.prototype.toJSON=function(_3){
return this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z";
};
String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(_4){
return this.valueOf();
};
}
var cx=new RegExp("[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]","g");
var _5=new RegExp("[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]","g");
var _6,_7,_8={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\"":"\\\"","\\":"\\\\"},_9;
function _a(_b){
_5.lastIndex=0;
return _5.test(_b)?"\""+_b.replace(_5,function(a){
var c=_8[a];
return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4);
})+"\"":"\""+_b+"\"";
};
function _c(_d,_e){
var i,k,v,_f,_10=_6,_11,_12=_e[_d];
if(_12&&typeof _12==="object"&&typeof _12.toJSON==="function"){
_12=_12.toJSON(_d);
}
if(typeof _9==="function"){
_12=_9.call(_e,_d,_12);
}
switch(typeof _12){
case "string":
return _a(_12);
case "number":
return isFinite(_12)?String(_12):"null";
case "boolean":
case "null":
return String(_12);
case "object":
if(!_12){
return "null";
}
_6+=_7;
_11=[];
if(Object.prototype.toString.apply(_12)==="[object Array]"){
_f=_12.length;
for(i=0;i<_f;i+=1){
_11[i]=_c(i,_12)||"null";
}
v=_11.length===0?"[]":_6?"[\n"+_6+_11.join(",\n"+_6)+"\n"+_10+"]":"["+_11.join(",")+"]";
_6=_10;
return v;
}
if(_9&&typeof _9==="object"){
_f=_9.length;
for(i=0;i<_f;i+=1){
k=_9[i];
if(typeof k==="string"){
v=_c(k,_12);
if(v){
_11.push(_a(k)+(_6?": ":":")+v);
}
}
}
}else{
for(k in _12){
if(Object.hasOwnProperty.call(_12,k)){
v=_c(k,_12);
if(v){
_11.push(_a(k)+(_6?": ":":")+v);
}
}
}
}
v=_11.length===0?"{}":_6?"{\n"+_6+_11.join(",\n"+_6)+"\n"+_10+"}":"{"+_11.join(",")+"}";
_6=_10;
return v;
}
};
if(typeof JSON.stringify!=="function"){
JSON.stringify=function(_13,_14,_15){
var i;
_6="";
_7="";
if(typeof _15==="number"){
for(i=0;i<_15;i+=1){
_7+=" ";
}
}else{
if(typeof _15==="string"){
_7=_15;
}
}
_9=_14;
if(_14&&typeof _14!=="function"&&(typeof _14!=="object"||typeof _14.length!=="number")){
throw new Error("JSON.stringify");
}
return _c("",{"":_13});
};
}
if(typeof JSON.parse!=="function"){
JSON.parse=function(_16,_17){
var j;
function _18(_19,key){
var k,v,_1a=_19[key];
if(_1a&&typeof _1a==="object"){
for(k in _1a){
if(Object.hasOwnProperty.call(_1a,k)){
v=_18(_1a,k);
if(v!==_46){
_1a[k]=v;
}else{
delete _1a[k];
}
}
}
}
return _17.call(_19,key,_1a);
};
cx.lastIndex=0;
if(cx.test(_16)){
_16=_16.replace(cx,function(a){
return "\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4);
});
}
if(/^[\],:{}\s]*$/.test(_16.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){
j=eval("("+_16+")");
return typeof _17==="function"?_18({"":j},""):j;
}
throw new SyntaxError("JSON.parse");
};
}
}());
var _1b=new RegExp("([^%]+|%[\\+\\-\\ \\#0]*[0-9\\*]*(.[0-9\\*]+)?[hlL]?[cbBdieEfgGosuxXpn%@])","g");
var _1c=new RegExp("(%)([\\+\\-\\ \\#0]*)([0-9\\*]*)((.[0-9\\*]+)?)([hlL]?)([cbBdieEfgGosuxXpn%@])");
_2.sprintf=function(_1d){
var _1d=arguments[0],_1e=_1d.match(_1b),_1f=0,_20="",arg=1;
for(var i=0;i<_1e.length;i++){
var t=_1e[i];
if(_1d.substring(_1f,_1f+t.length)!=t){
return _20;
}
_1f+=t.length;
if(t.charAt(0)!="%"){
_20+=t;
}else{
var _21=t.match(_1c);
if(_21.length!=8||_21[0]!=t){
return _20;
}
var _22=_21[1],_23=_21[2],_24=_21[3],_25=_21[4],_26=_21[6],_27=_21[7];
var _28=null;
if(_24=="*"){
_28=arguments[arg++];
}else{
if(_24!=""){
_28=Number(_24);
}
}
var _29=null;
if(_25==".*"){
_29=arguments[arg++];
}else{
if(_25!=""){
_29=Number(_25.substring(1));
}
}
var _2a=(_23.indexOf("-")>=0);
var _2b=(_23.indexOf("0")>=0);
var _2c="";
if(RegExp("[bBdiufeExXo]").test(_27)){
var num=Number(arguments[arg++]);
var _2d="";
if(num<0){
_2d="-";
}else{
if(_23.indexOf("+")>=0){
_2d="+";
}else{
if(_23.indexOf(" ")>=0){
_2d=" ";
}
}
}
if(_27=="d"||_27=="i"||_27=="u"){
var _2e=String(Math.abs(Math.floor(num)));
_2c=_2f(_2d,"",_2e,"",_28,_2a,_2b);
}
if(_27=="f"){
var _2e=String((_29!=null)?Math.abs(num).toFixed(_29):Math.abs(num));
var _30=(_23.indexOf("#")>=0&&_2e.indexOf(".")<0)?".":"";
_2c=_2f(_2d,"",_2e,_30,_28,_2a,_2b);
}
if(_27=="e"||_27=="E"){
var _2e=String(Math.abs(num).toExponential(_29!=null?_29:21));
var _30=(_23.indexOf("#")>=0&&_2e.indexOf(".")<0)?".":"";
_2c=_2f(_2d,"",_2e,_30,_28,_2a,_2b);
}
if(_27=="x"||_27=="X"){
var _2e=String(Math.abs(num).toString(16));
var _31=(_23.indexOf("#")>=0&&num!=0)?"0x":"";
_2c=_2f(_2d,_31,_2e,"",_28,_2a,_2b);
}
if(_27=="b"||_27=="B"){
var _2e=String(Math.abs(num).toString(2));
var _31=(_23.indexOf("#")>=0&&num!=0)?"0b":"";
_2c=_2f(_2d,_31,_2e,"",_28,_2a,_2b);
}
if(_27=="o"){
var _2e=String(Math.abs(num).toString(8));
var _31=(_23.indexOf("#")>=0&&num!=0)?"0":"";
_2c=_2f(_2d,_31,_2e,"",_28,_2a,_2b);
}
if(RegExp("[A-Z]").test(_27)){
_2c=_2c.toUpperCase();
}else{
_2c=_2c.toLowerCase();
}
}else{
var _2c="";
if(_27=="%"){
_2c="%";
}else{
if(_27=="c"){
_2c=String(arguments[arg++]).charAt(0);
}else{
if(_27=="s"||_27=="@"){
_2c=String(arguments[arg++]);
}else{
if(_27=="p"||_27=="n"){
arg++;
_2c="";
}
}
}
}
_2c=_2f("","",_2c,"",_28,_2a,false);
}
_20+=_2c;
}
}
return _20;
};
function _2f(_32,_33,_34,_35,_36,_37,_38){
var _39=(_32.length+_33.length+_34.length+_35.length);
if(_37){
return _32+_33+_34+_35+pad(_36-_39," ");
}else{
if(_38){
return _32+_33+pad(_36-_39,"0")+_34+_35;
}else{
return pad(_36-_39," ")+_32+_33+_34+_35;
}
}
};
function pad(n,ch){
return Array(MAX(0,n)+1).join(ch);
};
CPLogDisable=false;
var _3a="Cappuccino";
var _3b=["fatal","error","warn","info","debug","trace"];
var _3c=_3b[3];
var _3d={};
for(var i=0;i<_3b.length;i++){
_3d[_3b[i]]=i;
}
var _3e={};
CPLogRegister=function(_3f,_40,_41){
CPLogRegisterRange(_3f,_3b[0],_40||_3b[_3b.length-1],_41);
};
CPLogRegisterRange=function(_42,_43,_44,_45){
var min=_3d[_43];
var max=_3d[_44];
if(min!==_46&&max!==_46&&min<=max){
for(var i=min;i<=max;i++){
CPLogRegisterSingle(_42,_3b[i],_45);
}
}
};
CPLogRegisterSingle=function(_47,_48,_49){
if(!_3e[_48]){
_3e[_48]=[];
}
for(var i=0;i<_3e[_48].length;i++){
if(_3e[_48][i][0]===_47){
_3e[_48][i][1]=_49;
return;
}
}
_3e[_48].push([_47,_49]);
};
CPLogUnregister=function(_4a){
for(var _4b in _3e){
for(var i=0;i<_3e[_4b].length;i++){
if(_3e[_4b][i][0]===_4a){
_3e[_4b].splice(i--,1);
}
}
}
};
function _4c(_4d,_4e,_4f){
if(_4f==_46){
_4f=_3a;
}
if(_4e==_46){
_4e=_3c;
}
var _50=(typeof _4d[0]=="string"&&_4d.length>1)?_2.sprintf.apply(null,_4d):String(_4d[0]);
if(_3e[_4e]){
for(var i=0;i<_3e[_4e].length;i++){
var _51=_3e[_4e][i];
_51[0](_50,_4e,_4f,_51[1]);
}
}
};
CPLog=function(){
_4c(arguments);
};
for(var i=0;i<_3b.length;i++){
CPLog[_3b[i]]=(function(_52){
return function(){
_4c(arguments,_52);
};
})(_3b[i]);
}
var _53=function(_54,_55,_56){
var now=new Date();
_55=(_55==null?"":" ["+CPLogColorize(_55,_55)+"]");
if(typeof _2.sprintf=="function"){
return _2.sprintf("%4d-%02d-%02d %02d:%02d:%02d.%03d %s%s: %s",now.getFullYear(),now.getMonth()+1,now.getDate(),now.getHours(),now.getMinutes(),now.getSeconds(),now.getMilliseconds(),_56,_55,_54);
}else{
return now+" "+_56+_55+": "+_54;
}
};
CPLogConsole=function(_57,_58,_59,_5a){
if(typeof console!="undefined"){
var _5b=(_5a||_53)(_57,_58,_59);
var _5c={"fatal":"error","error":"error","warn":"warn","info":"info","debug":"debug","trace":"debug"}[_58];
if(_5c&&console[_5c]){
console[_5c](_5b);
}else{
if(console.log){
console.log(_5b);
}
}
}
};
CPLogColorize=function(_5d,_5e){
return _5d;
};
CPLogAlert=function(_5f,_60,_61,_62){
if(typeof alert!="undefined"&&!CPLogDisable){
var _63=(_62||_53)(_5f,_60,_61);
CPLogDisable=!confirm(_63+"\n\n(Click cancel to stop log alerts)");
}
};
var _64=null;
CPLogPopup=function(_65,_66,_67,_68){
try{
if(CPLogDisable||window.open==_46){
return;
}
if(!_64||!_64.document){
_64=window.open("","_blank","width=600,height=400,status=no,resizable=yes,scrollbars=yes");
if(!_64){
CPLogDisable=!confirm(_65+"\n\n(Disable pop-up blocking for CPLog window; Click cancel to stop log alerts)");
return;
}
_69(_64);
}
var _6a=_64.document.createElement("div");
_6a.setAttribute("class",_66||"fatal");
var _6b=(_68||_53)(_65,_68?_66:null,_67);
_6a.appendChild(_64.document.createTextNode(_6b));
_64.log.appendChild(_6a);
if(_64.focusEnabled.checked){
_64.focus();
}
if(_64.blockEnabled.checked){
_64.blockEnabled.checked=_64.confirm(_6b+"\nContinue blocking?");
}
if(_64.scrollEnabled.checked){
_64.scrollToBottom();
}
}
catch(e){
}
};
var _6c="<style type=\"text/css\" media=\"screen\"> body{font:10px Monaco,Courier,\"Courier New\",monospace,mono;padding-top:15px;} div > .fatal,div > .error,div > .warn,div > .info,div > .debug,div > .trace{display:none;overflow:hidden;white-space:pre;padding:0px 5px 0px 5px;margin-top:2px;-moz-border-radius:5px;-webkit-border-radius:5px;} div[wrap=\"yes\"] > div{white-space:normal;} .fatal{background-color:#ffb2b3;} .error{background-color:#ffe2b2;} .warn{background-color:#fdffb2;} .info{background-color:#e4ffb2;} .debug{background-color:#a0e5a0;} .trace{background-color:#99b9ff;} .enfatal .fatal,.enerror .error,.enwarn .warn,.eninfo .info,.endebug .debug,.entrace .trace{display:block;} div#header{background-color:rgba(240,240,240,0.82);position:fixed;top:0px;left:0px;width:100%;border-bottom:1px solid rgba(0,0,0,0.33);text-align:center;} ul#enablers{display:inline-block;margin:1px 15px 0 15px;padding:2px 0 2px 0;} ul#enablers li{display:inline;padding:0px 5px 0px 5px;margin-left:4px;-moz-border-radius:5px;-webkit-border-radius:5px;} [enabled=\"no\"]{opacity:0.25;} ul#options{display:inline-block;margin:0 15px 0px 15px;padding:0 0px;} ul#options li{margin:0 0 0 0;padding:0 0 0 0;display:inline;} </style>";
function _69(_6d){
var doc=_6d.document;
doc.writeln("<html><head><title></title>"+_6c+"</head><body></body></html>");
doc.title=_3a+" Run Log";
var _6e=doc.getElementsByTagName("head")[0];
var _6f=doc.getElementsByTagName("body")[0];
var _70=window.location.protocol+"//"+window.location.host+window.location.pathname;
_70=_70.substring(0,_70.lastIndexOf("/")+1);
var div=doc.createElement("div");
div.setAttribute("id","header");
_6f.appendChild(div);
var ul=doc.createElement("ul");
ul.setAttribute("id","enablers");
div.appendChild(ul);
for(var i=0;i<_3b.length;i++){
var li=doc.createElement("li");
li.setAttribute("id","en"+_3b[i]);
li.setAttribute("class",_3b[i]);
li.setAttribute("onclick","toggle(this);");
li.setAttribute("enabled","yes");
li.appendChild(doc.createTextNode(_3b[i]));
ul.appendChild(li);
}
var ul=doc.createElement("ul");
ul.setAttribute("id","options");
div.appendChild(ul);
var _71={"focus":["Focus",false],"block":["Block",false],"wrap":["Wrap",false],"scroll":["Scroll",true],"close":["Close",true]};
for(o in _71){
var li=doc.createElement("li");
ul.appendChild(li);
_6d[o+"Enabled"]=doc.createElement("input");
_6d[o+"Enabled"].setAttribute("id",o);
_6d[o+"Enabled"].setAttribute("type","checkbox");
if(_71[o][1]){
_6d[o+"Enabled"].setAttribute("checked","checked");
}
li.appendChild(_6d[o+"Enabled"]);
var _72=doc.createElement("label");
_72.setAttribute("for",o);
_72.appendChild(doc.createTextNode(_71[o][0]));
li.appendChild(_72);
}
_6d.log=doc.createElement("div");
_6d.log.setAttribute("class","enerror endebug enwarn eninfo enfatal entrace");
_6f.appendChild(_6d.log);
_6d.toggle=function(_73){
var _74=(_73.getAttribute("enabled")=="yes")?"no":"yes";
_73.setAttribute("enabled",_74);
if(_74=="yes"){
_6d.log.className+=" "+_73.id;
}else{
_6d.log.className=_6d.log.className.replace(new RegExp("[\\s]*"+_73.id,"g"),"");
}
};
_6d.scrollToBottom=function(){
_6d.scrollTo(0,_6f.offsetHeight);
};
_6d.wrapEnabled.addEventListener("click",function(){
_6d.log.setAttribute("wrap",_6d.wrapEnabled.checked?"yes":"no");
},false);
_6d.addEventListener("keydown",function(e){
var e=e||_6d.event;
if(e.keyCode==75&&(e.ctrlKey||e.metaKey)){
while(_6d.log.firstChild){
_6d.log.removeChild(_6d.log.firstChild);
}
e.preventDefault();
}
},"false");
window.addEventListener("unload",function(){
if(_6d&&_6d.closeEnabled&&_6d.closeEnabled.checked){
CPLogDisable=true;
_6d.close();
}
},false);
_6d.addEventListener("unload",function(){
if(!CPLogDisable){
CPLogDisable=!confirm("Click cancel to stop logging");
}
},false);
};
CPLogDefault=(typeof window==="object"&&window.console)?CPLogConsole:CPLogPopup;
var _46;
if(typeof window!=="undefined"){
window.setNativeTimeout=window.setTimeout;
window.clearNativeTimeout=window.clearTimeout;
window.setNativeInterval=window.setInterval;
window.clearNativeInterval=window.clearInterval;
}
NO=false;
YES=true;
nil=null;
Nil=null;
NULL=null;
ABS=Math.abs;
ASIN=Math.asin;
ACOS=Math.acos;
ATAN=Math.atan;
ATAN2=Math.atan2;
SIN=Math.sin;
COS=Math.cos;
TAN=Math.tan;
EXP=Math.exp;
POW=Math.pow;
CEIL=Math.ceil;
FLOOR=Math.floor;
ROUND=Math.round;
MIN=Math.min;
MAX=Math.max;
RAND=Math.random;
SQRT=Math.sqrt;
E=Math.E;
LN2=Math.LN2;
LN10=Math.LN10;
LOG2E=Math.LOG2E;
LOG10E=Math.LOG10E;
PI=Math.PI;
PI2=Math.PI*2;
PI_2=Math.PI/2;
SQRT1_2=Math.SQRT1_2;
SQRT2=Math.SQRT2;
function _75(_76){
this._eventListenersForEventNames={};
this._owner=_76;
};
_75.prototype.addEventListener=function(_77,_78){
var _79=this._eventListenersForEventNames;
if(!_7a.call(_79,_77)){
var _7b=[];
_79[_77]=_7b;
}else{
var _7b=_79[_77];
}
var _7c=_7b.length;
while(_7c--){
if(_7b[_7c]===_78){
return;
}
}
_7b.push(_78);
};
_75.prototype.removeEventListener=function(_7d,_7e){
var _7f=this._eventListenersForEventNames;
if(!_7a.call(_7f,_7d)){
return;
}
var _80=_7f[_7d],_81=_80.length;
while(_81--){
if(_80[_81]===_7e){
return _80.splice(_81,1);
}
}
};
_75.prototype.dispatchEvent=function(_82){
var _83=_82.type,_84=this._eventListenersForEventNames;
if(_7a.call(_84,_83)){
var _85=this._eventListenersForEventNames[_83],_86=0,_87=_85.length;
for(;_86<_87;++_86){
_85[_86](_82);
}
}
var _88=(this._owner||this)["on"+_83];
if(_88){
_88(_82);
}
};
var _89=0,_8a=null,_8b=[];
function _8c(_8d){
var _8e=_89;
if(_8a===null){
window.setNativeTimeout(function(){
var _8f=_8b,_90=0,_91=_8b.length;
++_89;
_8a=null;
_8b=[];
for(;_90<_91;++_90){
_8f[_90]();
}
},0);
}
return function(){
var _92=arguments;
if(_89>_8e){
_8d.apply(this,_92);
}else{
_8b.push(function(){
_8d.apply(this,_92);
});
}
};
};
var _93=null;
if(window.ActiveXObject!==_46){
var _94=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP.6.0"],_95=_94.length;
while(_95--){
try{
var _96=_94[_95];
new ActiveXObject(_96);
_93=function(){
return new ActiveXObject(_96);
};
break;
}
catch(anException){
}
}
}
if(!_93){
_93=window.XMLHttpRequest;
}
CFHTTPRequest=function(){
this._isOpen=false;
this._requestHeaders={};
this._mimeType=null;
this._eventDispatcher=new _75(this);
this._nativeRequest=new _93();
var _97=this;
this._stateChangeHandler=function(){
_aa(_97);
};
this._nativeRequest.onreadystatechange=this._stateChangeHandler;
if(CFHTTPRequest.AuthenticationDelegate!==nil){
this._eventDispatcher.addEventListener("HTTP403",function(){
CFHTTPRequest.AuthenticationDelegate(_97);
});
}
};
CFHTTPRequest.UninitializedState=0;
CFHTTPRequest.LoadingState=1;
CFHTTPRequest.LoadedState=2;
CFHTTPRequest.InteractiveState=3;
CFHTTPRequest.CompleteState=4;
CFHTTPRequest.AuthenticationDelegate=nil;
CFHTTPRequest.prototype.status=function(){
try{
return this._nativeRequest.status||0;
}
catch(anException){
return 0;
}
};
CFHTTPRequest.prototype.statusText=function(){
try{
return this._nativeRequest.statusText||"";
}
catch(anException){
return "";
}
};
CFHTTPRequest.prototype.readyState=function(){
return this._nativeRequest.readyState;
};
CFHTTPRequest.prototype.success=function(){
var _98=this.status();
if(_98>=200&&_98<300){
return YES;
}
return _98===0&&this.responseText()&&this.responseText().length;
};
CFHTTPRequest.prototype.responseXML=function(){
var _99=this._nativeRequest.responseXML;
if(_99&&(_93===window.XMLHttpRequest)){
return _99;
}
return _9a(this.responseText());
};
CFHTTPRequest.prototype.responsePropertyList=function(){
var _9b=this.responseText();
if(CFPropertyList.sniffedFormatOfString(_9b)===CFPropertyList.FormatXML_v1_0){
return CFPropertyList.propertyListFromXML(this.responseXML());
}
return CFPropertyList.propertyListFromString(_9b);
};
CFHTTPRequest.prototype.responseText=function(){
return this._nativeRequest.responseText;
};
CFHTTPRequest.prototype.setRequestHeader=function(_9c,_9d){
this._requestHeaders[_9c]=_9d;
};
CFHTTPRequest.prototype.getResponseHeader=function(_9e){
return this._nativeRequest.getResponseHeader(_9e);
};
CFHTTPRequest.prototype.getAllResponseHeaders=function(){
return this._nativeRequest.getAllResponseHeaders();
};
CFHTTPRequest.prototype.overrideMimeType=function(_9f){
this._mimeType=_9f;
};
CFHTTPRequest.prototype.open=function(_a0,_a1,_a2,_a3,_a4){
this._isOpen=true;
this._URL=_a1;
this._async=_a2;
this._method=_a0;
this._user=_a3;
this._password=_a4;
return this._nativeRequest.open(_a0,_a1,_a2,_a3,_a4);
};
CFHTTPRequest.prototype.send=function(_a5){
if(!this._isOpen){
delete this._nativeRequest.onreadystatechange;
this._nativeRequest.open(this._method,this._URL,this._async,this._user,this._password);
this._nativeRequest.onreadystatechange=this._stateChangeHandler;
}
for(var i in this._requestHeaders){
if(this._requestHeaders.hasOwnProperty(i)){
this._nativeRequest.setRequestHeader(i,this._requestHeaders[i]);
}
}
if(this._mimeType&&"overrideMimeType" in this._nativeRequest){
this._nativeRequest.overrideMimeType(this._mimeType);
}
this._isOpen=false;
try{
return this._nativeRequest.send(_a5);
}
catch(anException){
this._eventDispatcher.dispatchEvent({type:"failure",request:this});
}
};
CFHTTPRequest.prototype.abort=function(){
this._isOpen=false;
return this._nativeRequest.abort();
};
CFHTTPRequest.prototype.addEventListener=function(_a6,_a7){
this._eventDispatcher.addEventListener(_a6,_a7);
};
CFHTTPRequest.prototype.removeEventListener=function(_a8,_a9){
this._eventDispatcher.removeEventListener(_a8,_a9);
};
function _aa(_ab){
var _ac=_ab._eventDispatcher;
_ac.dispatchEvent({type:"readystatechange",request:_ab});
var _ad=_ab._nativeRequest,_ae=["uninitialized","loading","loaded","interactive","complete"];
if(_ae[_ab.readyState()]==="complete"){
var _af="HTTP"+_ab.status();
_ac.dispatchEvent({type:_af,request:_ab});
var _b0=_ab.success()?"success":"failure";
_ac.dispatchEvent({type:_b0,request:_ab});
_ac.dispatchEvent({type:_ae[_ab.readyState()],request:_ab});
}else{
_ac.dispatchEvent({type:_ae[_ab.readyState()],request:_ab});
}
};
function _b1(_b2,_b3,_b4){
var _b5=new CFHTTPRequest();
if(_b2.pathExtension()==="plist"){
_b5.overrideMimeType("text/xml");
}
if(_2.asyncLoader){
_b5.onsuccess=_8c(_b3);
_b5.onfailure=_8c(_b4);
}else{
_b5.onsuccess=_b3;
_b5.onfailure=_b4;
}
_b5.open("GET",_b2.absoluteString(),_2.asyncLoader);
_b5.send("");
};
_2.asyncLoader=YES;
_2.Asynchronous=_8c;
_2.determineAndDispatchHTTPRequestEvents=_aa;
var _b6=0;
objj_generateObjectUID=function(){
return _b6++;
};
CFPropertyList=function(){
this._UID=objj_generateObjectUID();
};
CFPropertyList.DTDRE=/^\s*(?:<\?\s*xml\s+version\s*=\s*\"1.0\"[^>]*\?>\s*)?(?:<\!DOCTYPE[^>]*>\s*)?/i;
CFPropertyList.XMLRE=/^\s*(?:<\?\s*xml\s+version\s*=\s*\"1.0\"[^>]*\?>\s*)?(?:<\!DOCTYPE[^>]*>\s*)?<\s*plist[^>]*\>/i;
CFPropertyList.FormatXMLDTD="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">";
CFPropertyList.Format280NorthMagicNumber="280NPLIST";
CFPropertyList.FormatOpenStep=1,CFPropertyList.FormatXML_v1_0=100,CFPropertyList.FormatBinary_v1_0=200,CFPropertyList.Format280North_v1_0=-1000;
CFPropertyList.sniffedFormatOfString=function(_b7){
if(_b7.match(CFPropertyList.XMLRE)){
return CFPropertyList.FormatXML_v1_0;
}
if(_b7.substr(0,CFPropertyList.Format280NorthMagicNumber.length)===CFPropertyList.Format280NorthMagicNumber){
return CFPropertyList.Format280North_v1_0;
}
return NULL;
};
CFPropertyList.dataFromPropertyList=function(_b8,_b9){
var _ba=new CFMutableData();
_ba.setRawString(CFPropertyList.stringFromPropertyList(_b8,_b9));
return _ba;
};
CFPropertyList.stringFromPropertyList=function(_bb,_bc){
if(!_bc){
_bc=CFPropertyList.Format280North_v1_0;
}
var _bd=_be[_bc];
return _bd["start"]()+_bf(_bb,_bd)+_bd["finish"]();
};
function _bf(_c0,_c1){
var _c2=typeof _c0,_c3=_c0.valueOf(),_c4=typeof _c3;
if(_c2!==_c4){
_c2=_c4;
_c0=_c3;
}
if(_c0===YES||_c0===NO){
_c2="boolean";
}else{
if(_c2==="number"){
if(FLOOR(_c0)===_c0){
_c2="integer";
}else{
_c2="real";
}
}else{
if(_c2!=="string"){
if(_c0.slice){
_c2="array";
}else{
_c2="dictionary";
}
}
}
}
return _c1[_c2](_c0,_c1);
};
var _be={};
_be[CFPropertyList.FormatXML_v1_0]={"start":function(){
return CFPropertyList.FormatXMLDTD+"<plist version = \"1.0\">";
},"finish":function(){
return "</plist>";
},"string":function(_c5){
return "<string>"+_c6(_c5)+"</string>";
},"boolean":function(_c7){
return _c7?"<true/>":"<false/>";
},"integer":function(_c8){
return "<integer>"+_c8+"</integer>";
},"real":function(_c9){
return "<real>"+_c9+"</real>";
},"array":function(_ca,_cb){
var _cc=0,_cd=_ca.length,_ce="<array>";
for(;_cc<_cd;++_cc){
_ce+=_bf(_ca[_cc],_cb);
}
return _ce+"</array>";
},"dictionary":function(_cf,_d0){
var _d1=_cf._keys,_95=0,_d2=_d1.length,_d3="<dict>";
for(;_95<_d2;++_95){
var key=_d1[_95];
_d3+="<key>"+key+"</key>";
_d3+=_bf(_cf.valueForKey(key),_d0);
}
return _d3+"</dict>";
}};
var _d4="A",_d5="D",_d6="f",_d7="d",_d8="S",_d9="T",_da="F",_db="K",_dc="E";
_be[CFPropertyList.Format280North_v1_0]={"start":function(){
return CFPropertyList.Format280NorthMagicNumber+";1.0;";
},"finish":function(){
return "";
},"string":function(_dd){
return _d8+";"+_dd.length+";"+_dd;
},"boolean":function(_de){
return (_de?_d9:_da)+";";
},"integer":function(_df){
var _e0=""+_df;
return _d7+";"+_e0.length+";"+_e0;
},"real":function(_e1){
var _e2=""+_e1;
return _d6+";"+_e2.length+";"+_e2;
},"array":function(_e3,_e4){
var _e5=0,_e6=_e3.length,_e7=_d4+";";
for(;_e5<_e6;++_e5){
_e7+=_bf(_e3[_e5],_e4);
}
return _e7+_dc+";";
},"dictionary":function(_e8,_e9){
var _ea=_e8._keys,_95=0,_eb=_ea.length,_ec=_d5+";";
for(;_95<_eb;++_95){
var key=_ea[_95];
_ec+=_db+";"+key.length+";"+key;
_ec+=_bf(_e8.valueForKey(key),_e9);
}
return _ec+_dc+";";
}};
var _ed="xml",_ee="#document",_ef="plist",_f0="key",_f1="dict",_f2="array",_f3="string",_f4="true",_f5="false",_f6="real",_f7="integer",_f8="data";
var _f9=function(_fa,_fb,_fc){
var _fd=_fa;
_fd=(_fd.firstChild);
if(_fd!==NULL&&((_fd.nodeType)===8||(_fd.nodeType)===3)){
while((_fd=(_fd.nextSibling))&&((_fd.nodeType)===8||(_fd.nodeType)===3)){
}
}
if(_fd){
return _fd;
}
if((String(_fa.nodeName))===_f2||(String(_fa.nodeName))===_f1){
_fc.pop();
}else{
if(_fd===_fb){
return NULL;
}
_fd=_fa;
while((_fd=(_fd.nextSibling))&&((_fd.nodeType)===8||(_fd.nodeType)===3)){
}
if(_fd){
return _fd;
}
}
_fd=_fa;
while(_fd){
var _fe=_fd;
while((_fe=(_fe.nextSibling))&&((_fe.nodeType)===8||(_fe.nodeType)===3)){
}
if(_fe){
return _fe;
}
var _fd=(_fd.parentNode);
if(_fb&&_fd===_fb){
return NULL;
}
_fc.pop();
}
return NULL;
};
CFPropertyList.propertyListFromData=function(_ff,_100){
return CFPropertyList.propertyListFromString(_ff.rawString(),_100);
};
CFPropertyList.propertyListFromString=function(_101,_102){
if(!_102){
_102=CFPropertyList.sniffedFormatOfString(_101);
}
if(_102===CFPropertyList.FormatXML_v1_0){
return CFPropertyList.propertyListFromXML(_101);
}
if(_102===CFPropertyList.Format280North_v1_0){
return _103(_101);
}
return NULL;
};
var _d4="A",_d5="D",_d6="f",_d7="d",_d8="S",_d9="T",_da="F",_db="K",_dc="E";
function _103(_104){
var _105=new _106(_104),_107=NULL,key="",_108=NULL,_109=NULL,_10a=[],_10b=NULL;
while(_107=_105.getMarker()){
if(_107===_dc){
_10a.pop();
continue;
}
var _10c=_10a.length;
if(_10c){
_10b=_10a[_10c-1];
}
if(_107===_db){
key=_105.getString();
_107=_105.getMarker();
}
switch(_107){
case _d4:
_108=[];
_10a.push(_108);
break;
case _d5:
_108=new CFMutableDictionary();
_10a.push(_108);
break;
case _d6:
_108=parseFloat(_105.getString());
break;
case _d7:
_108=parseInt(_105.getString(),10);
break;
case _d8:
_108=_105.getString();
break;
case _d9:
_108=YES;
break;
case _da:
_108=NO;
break;
default:
throw new Error("*** "+_107+" marker not recognized in Plist.");
}
if(!_109){
_109=_108;
}else{
if(_10b){
if(_10b.slice){
_10b.push(_108);
}else{
_10b.setValueForKey(key,_108);
}
}
}
}
return _109;
};
function _c6(_10d){
return _10d.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
};
function _10e(_10f){
return _10f.replace(/&quot;/g,"\"").replace(/&apos;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&");
};
function _9a(_110){
if(window.DOMParser){
return (new window.DOMParser().parseFromString(_110,"text/xml").documentElement);
}else{
if(window.ActiveXObject){
XMLNode=new ActiveXObject("Microsoft.XMLDOM");
var _111=_110.match(CFPropertyList.DTDRE);
if(_111){
_110=_110.substr(_111[0].length);
}
XMLNode.loadXML(_110);
return XMLNode;
}
}
return NULL;
};
CFPropertyList.propertyListFromXML=function(_112){
var _113=_112;
if(_112.valueOf&&typeof _112.valueOf()==="string"){
_113=_9a(_112);
}
while(((String(_113.nodeName))===_ee)||((String(_113.nodeName))===_ed)){
_113=(_113.firstChild);
}
if(_113!==NULL&&((_113.nodeType)===8||(_113.nodeType)===3)){
while((_113=(_113.nextSibling))&&((_113.nodeType)===8||(_113.nodeType)===3)){
}
}
if(((_113.nodeType)===10)){
while((_113=(_113.nextSibling))&&((_113.nodeType)===8||(_113.nodeType)===3)){
}
}
if(!((String(_113.nodeName))===_ef)){
return NULL;
}
var key="",_114=NULL,_115=NULL,_116=_113,_117=[],_118=NULL;
while(_113=_f9(_113,_116,_117)){
var _119=_117.length;
if(_119){
_118=_117[_119-1];
}
if((String(_113.nodeName))===_f0){
key=((String((_113.firstChild).nodeValue)));
while((_113=(_113.nextSibling))&&((_113.nodeType)===8||(_113.nodeType)===3)){
}
}
switch(String((String(_113.nodeName)))){
case _f2:
_114=[];
_117.push(_114);
break;
case _f1:
_114=new CFMutableDictionary();
_117.push(_114);
break;
case _f6:
_114=parseFloat(((String((_113.firstChild).nodeValue))));
break;
case _f7:
_114=parseInt(((String((_113.firstChild).nodeValue))),10);
break;
case _f3:
if((_113.getAttribute("type")==="base64")){
_114=(_113.firstChild)?CFData.decodeBase64ToString(((String((_113.firstChild).nodeValue)))):"";
}else{
_114=_10e((_113.firstChild)?((String((_113.firstChild).nodeValue))):"");
}
break;
case _f4:
_114=YES;
break;
case _f5:
_114=NO;
break;
case _f8:
_114=new CFMutableData();
_114.bytes=(_113.firstChild)?CFData.decodeBase64ToArray(((String((_113.firstChild).nodeValue))),YES):[];
break;
default:
throw new Error("*** "+(String(_113.nodeName))+" tag not recognized in Plist.");
}
if(!_115){
_115=_114;
}else{
if(_118){
if(_118.slice){
_118.push(_114);
}else{
_118.setValueForKey(key,_114);
}
}
}
}
return _115;
};
kCFPropertyListOpenStepFormat=CFPropertyList.FormatOpenStep;
kCFPropertyListXMLFormat_v1_0=CFPropertyList.FormatXML_v1_0;
kCFPropertyListBinaryFormat_v1_0=CFPropertyList.FormatBinary_v1_0;
kCFPropertyList280NorthFormat_v1_0=CFPropertyList.Format280North_v1_0;
CFPropertyListCreate=function(){
return new CFPropertyList();
};
CFPropertyListCreateFromXMLData=function(data){
return CFPropertyList.propertyListFromData(data,CFPropertyList.FormatXML_v1_0);
};
CFPropertyListCreateXMLData=function(_11a){
return CFPropertyList.dataFromPropertyList(_11a,CFPropertyList.FormatXML_v1_0);
};
CFPropertyListCreateFrom280NorthData=function(data){
return CFPropertyList.propertyListFromData(data,CFPropertyList.Format280North_v1_0);
};
CFPropertyListCreate280NorthData=function(_11b){
return CFPropertyList.dataFromPropertyList(_11b,CFPropertyList.Format280North_v1_0);
};
CPPropertyListCreateFromData=function(data,_11c){
return CFPropertyList.propertyListFromData(data,_11c);
};
CPPropertyListCreateData=function(_11d,_11e){
return CFPropertyList.dataFromPropertyList(_11d,_11e);
};
CFDictionary=function(_11f){
this._keys=[];
this._count=0;
this._buckets={};
this._UID=objj_generateObjectUID();
};
var _120=Array.prototype.indexOf,_7a=Object.prototype.hasOwnProperty;
CFDictionary.prototype.copy=function(){
return this;
};
CFDictionary.prototype.mutableCopy=function(){
var _121=new CFMutableDictionary(),keys=this._keys,_122=this._count;
_121._keys=keys.slice();
_121._count=_122;
var _123=0,_124=this._buckets,_125=_121._buckets;
for(;_123<_122;++_123){
var key=keys[_123];
_125[key]=_124[key];
}
return _121;
};
CFDictionary.prototype.containsKey=function(aKey){
return _7a.apply(this._buckets,[aKey]);
};
CFDictionary.prototype.containsValue=function(_126){
var keys=this._keys,_127=this._buckets,_95=0,_128=keys.length;
for(;_95<_128;++_95){
if(_127[keys[_95]]===_126){
return YES;
}
}
return NO;
};
CFDictionary.prototype.count=function(){
return this._count;
};
CFDictionary.prototype.countOfKey=function(aKey){
return this.containsKey(aKey)?1:0;
};
CFDictionary.prototype.countOfValue=function(_129){
var keys=this._keys,_12a=this._buckets,_95=0,_12b=keys.length,_12c=0;
for(;_95<_12b;++_95){
if(_12a[keys[_95]]===_129){
++_12c;
}
}
return _12c;
};
CFDictionary.prototype.keys=function(){
return this._keys.slice();
};
CFDictionary.prototype.valueForKey=function(aKey){
var _12d=this._buckets;
if(!_7a.apply(_12d,[aKey])){
return nil;
}
return _12d[aKey];
};
CFDictionary.prototype.toString=function(){
var _12e="{\n",keys=this._keys,_95=0,_12f=this._count;
for(;_95<_12f;++_95){
var key=keys[_95];
_12e+="\t"+key+" = \""+String(this.valueForKey(key)).split("\n").join("\n\t")+"\"\n";
}
return _12e+"}";
};
CFMutableDictionary=function(_130){
CFDictionary.apply(this,[]);
};
CFMutableDictionary.prototype=new CFDictionary();
CFMutableDictionary.prototype.copy=function(){
return this.mutableCopy();
};
CFMutableDictionary.prototype.addValueForKey=function(aKey,_131){
if(this.containsKey(aKey)){
return;
}
++this._count;
this._keys.push(aKey);
this._buckets[aKey]=_131;
};
CFMutableDictionary.prototype.removeValueForKey=function(aKey){
var _132=-1;
if(_120){
_132=_120.call(this._keys,aKey);
}else{
var keys=this._keys,_95=0,_133=keys.length;
for(;_95<_133;++_95){
if(keys[_95]===aKey){
_132=_95;
break;
}
}
}
if(_132===-1){
return;
}
--this._count;
this._keys.splice(_132,1);
delete this._buckets[aKey];
};
CFMutableDictionary.prototype.removeAllValues=function(){
this._count=0;
this._keys=[];
this._buckets={};
};
CFMutableDictionary.prototype.replaceValueForKey=function(aKey,_134){
if(!this.containsKey(aKey)){
return;
}
this._buckets[aKey]=_134;
};
CFMutableDictionary.prototype.setValueForKey=function(aKey,_135){
if(_135===nil||_135===_46){
this.removeValueForKey(aKey);
}else{
if(this.containsKey(aKey)){
this.replaceValueForKey(aKey,_135);
}else{
this.addValueForKey(aKey,_135);
}
}
};
CFData=function(){
this._rawString=NULL;
this._propertyList=NULL;
this._propertyListFormat=NULL;
this._JSONObject=NULL;
this._bytes=NULL;
this._base64=NULL;
};
CFData.prototype.propertyList=function(){
if(!this._propertyList){
this._propertyList=CFPropertyList.propertyListFromString(this.rawString());
}
return this._propertyList;
};
CFData.prototype.JSONObject=function(){
if(!this._JSONObject){
try{
this._JSONObject=JSON.parse(this.rawString());
}
catch(anException){
}
}
return this._JSONObject;
};
CFData.prototype.rawString=function(){
if(this._rawString===NULL){
if(this._propertyList){
this._rawString=CFPropertyList.stringFromPropertyList(this._propertyList,this._propertyListFormat);
}else{
if(this._JSONObject){
this._rawString=JSON.stringify(this._JSONObject);
}else{
throw new Error("Can't convert data to string.");
}
}
}
return this._rawString;
};
CFData.prototype.bytes=function(){
return this._bytes;
};
CFData.prototype.base64=function(){
return this._base64;
};
CFMutableData=function(){
CFData.call(this);
};
CFMutableData.prototype=new CFData();
function _136(_137){
this._rawString=NULL;
this._propertyList=NULL;
this._propertyListFormat=NULL;
this._JSONObject=NULL;
this._bytes=NULL;
this._base64=NULL;
};
CFMutableData.prototype.setPropertyList=function(_138,_139){
_136(this);
this._propertyList=_138;
this._propertyListFormat=_139;
};
CFMutableData.prototype.setJSONObject=function(_13a){
_136(this);
this._JSONObject=_13a;
};
CFMutableData.prototype.setRawString=function(_13b){
_136(this);
this._rawString=_13b;
};
CFMutableData.prototype.setBytes=function(_13c){
_136(this);
this._bytes=_13c;
};
CFMutableData.prototype.setBase64String=function(_13d){
_136(this);
this._base64=_13d;
};
var _13e=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/","="],_13f=[];
for(var i=0;i<_13e.length;i++){
_13f[_13e[i].charCodeAt(0)]=i;
}
CFData.decodeBase64ToArray=function(_140,_141){
if(_141){
_140=_140.replace(/[^A-Za-z0-9\+\/\=]/g,"");
}
var pad=(_140[_140.length-1]=="="?1:0)+(_140[_140.length-2]=="="?1:0),_142=_140.length,_143=[];
var i=0;
while(i<_142){
var bits=(_13f[_140.charCodeAt(i++)]<<18)|(_13f[_140.charCodeAt(i++)]<<12)|(_13f[_140.charCodeAt(i++)]<<6)|(_13f[_140.charCodeAt(i++)]);
_143.push((bits&16711680)>>16);
_143.push((bits&65280)>>8);
_143.push(bits&255);
}
if(pad>0){
return _143.slice(0,-1*pad);
}
return _143;
};
CFData.encodeBase64Array=function(_144){
var pad=(3-(_144.length%3))%3,_145=_144.length+pad,_146=[];
if(pad>0){
_144.push(0);
}
if(pad>1){
_144.push(0);
}
var i=0;
while(i<_145){
var bits=(_144[i++]<<16)|(_144[i++]<<8)|(_144[i++]);
_146.push(_13e[(bits&16515072)>>18]);
_146.push(_13e[(bits&258048)>>12]);
_146.push(_13e[(bits&4032)>>6]);
_146.push(_13e[bits&63]);
}
if(pad>0){
_146[_146.length-1]="=";
_144.pop();
}
if(pad>1){
_146[_146.length-2]="=";
_144.pop();
}
return _146.join("");
};
CFData.decodeBase64ToString=function(_147,_148){
return CFData.bytesToString(CFData.decodeBase64ToArray(_147,_148));
};
CFData.decodeBase64ToUtf16String=function(_149,_14a){
return CFData.bytesToUtf16String(CFData.decodeBase64ToArray(_149,_14a));
};
CFData.bytesToString=function(_14b){
return String.fromCharCode.apply(NULL,_14b);
};
CFData.encodeBase64String=function(_14c){
var temp=[];
for(var i=0;i<_14c.length;i++){
temp.push(_14c.charCodeAt(i));
}
return CFData.encodeBase64Array(temp);
};
CFData.bytesToUtf16String=function(_14d){
var temp=[];
for(var i=0;i<_14d.length;i+=2){
temp.push(_14d[i+1]<<8|_14d[i]);
}
return String.fromCharCode.apply(NULL,temp);
};
CFData.encodeBase64Utf16String=function(_14e){
var temp=[];
for(var i=0;i<_14e.length;i++){
var c=_14e.charCodeAt(i);
temp.push(_14e.charCodeAt(i)&255);
temp.push((_14e.charCodeAt(i)&65280)>>8);
}
return CFData.encodeBase64Array(temp);
};
var _14f,_150,_151=0;
function _152(){
if(++_151!==1){
return;
}
_14f={};
_150={};
};
function _153(){
_151=MAX(_151-1,0);
if(_151!==0){
return;
}
delete _14f;
delete _150;
};
var _154=new RegExp("^"+"(?:"+"([^:/?#]+):"+")?"+"(?:"+"(//)"+"("+"(?:"+"("+"([^:@]*)"+":?"+"([^:@]*)"+")?"+"@"+")?"+"([^:/?#]*)"+"(?::(\\d*))?"+")"+")?"+"([^?#]*)"+"(?:\\?([^#]*))?"+"(?:#(.*))?");
var _155=["url","scheme","authorityRoot","authority","userInfo","user","password","domain","portNumber","path","queryString","fragment"];
function _156(aURL){
if(aURL._parts){
return aURL._parts;
}
var _157=aURL.string(),_158=_157.match(/^mhtml:/);
if(_158){
_157=_157.substr("mhtml:".length);
}
if(_151>0&&_7a.call(_150,_157)){
aURL._parts=_150[_157];
return aURL._parts;
}
aURL._parts={};
var _159=aURL._parts,_15a=_154.exec(_157),_95=_15a.length;
while(_95--){
_159[_155[_95]]=_15a[_95]||NULL;
}
_159.portNumber=parseInt(_159.portNumber,10);
if(isNaN(_159.portNumber)){
_159.portNumber=-1;
}
_159.pathComponents=[];
if(_159.path){
var _15b=_159.path.split("/"),_15c=_159.pathComponents,_95=0,_15d=_15b.length;
for(;_95<_15d;++_95){
var _15e=_15b[_95];
if(_15e){
_15c.push(_15e);
}else{
if(_95===0){
_15c.push("/");
}
}
}
_159.pathComponents=_15c;
}
if(_158){
_159.url="mhtml:"+_159.url;
_159.scheme="mhtml:"+_159.scheme;
}
if(_151>0){
_150[_157]=_159;
}
return _159;
};
CFURL=function(aURL,_15f){
aURL=aURL||"";
if(aURL instanceof CFURL){
if(!_15f){
return aURL;
}
var _160=aURL.baseURL();
if(_160){
_15f=new CFURL(_160.absoluteURL(),_15f);
}
aURL=aURL.string();
}
if(_151>0){
var _161=aURL+" "+(_15f&&_15f.UID()||"");
if(_7a.call(_14f,_161)){
return _14f[_161];
}
_14f[_161]=this;
}
if(aURL.match(/^data:/)){
var _162={},_95=_155.length;
while(_95--){
_162[_155[_95]]="";
}
_162.url=aURL;
_162.scheme="data";
_162.pathComponents=[];
this._parts=_162;
this._standardizedURL=this;
this._absoluteURL=this;
}
this._UID=objj_generateObjectUID();
this._string=aURL;
this._baseURL=_15f;
};
CFURL.prototype.UID=function(){
return this._UID;
};
var _163={};
CFURL.prototype.mappedURL=function(){
return _163[this.absoluteString()]||this;
};
CFURL.setMappedURLForURL=function(_164,_165){
_163[_164.absoluteString()]=_165;
};
CFURL.prototype.schemeAndAuthority=function(){
var _166="",_167=this.scheme();
if(_167){
_166+=_167+":";
}
var _168=this.authority();
if(_168){
_166+="//"+_168;
}
return _166;
};
CFURL.prototype.absoluteString=function(){
if(this._absoluteString===_46){
this._absoluteString=this.absoluteURL().string();
}
return this._absoluteString;
};
CFURL.prototype.toString=function(){
return this.absoluteString();
};
function _169(aURL){
aURL=aURL.standardizedURL();
var _16a=aURL.baseURL();
if(!_16a){
return aURL;
}
var _16b=((aURL)._parts||_156(aURL)),_16c,_16d=_16a.absoluteURL(),_16e=((_16d)._parts||_156(_16d));
if(_16b.scheme||_16b.authority){
_16c=_16b;
}else{
_16c={};
_16c.scheme=_16e.scheme;
_16c.authority=_16e.authority;
_16c.userInfo=_16e.userInfo;
_16c.user=_16e.user;
_16c.password=_16e.password;
_16c.domain=_16e.domain;
_16c.portNumber=_16e.portNumber;
_16c.queryString=_16b.queryString;
_16c.fragment=_16b.fragment;
var _16f=_16b.pathComponents;
if(_16f.length&&_16f[0]==="/"){
_16c.path=_16b.path;
_16c.pathComponents=_16f;
}else{
var _170=_16e.pathComponents,_171=_170.concat(_16f);
if(!_16a.hasDirectoryPath()&&_170.length){
_171.splice(_170.length-1,1);
}
if(_16f.length&&(_16f[0]===".."||_16f[0]===".")){
_172(_171,YES);
}
_16c.pathComponents=_171;
_16c.path=_173(_171,_16f.length<=0||aURL.hasDirectoryPath());
}
}
var _174=_175(_16c),_176=new CFURL(_174);
_176._parts=_16c;
_176._standardizedURL=_176;
_176._standardizedString=_174;
_176._absoluteURL=_176;
_176._absoluteString=_174;
return _176;
};
function _173(_177,_178){
var path=_177.join("/");
if(path.length&&path.charAt(0)==="/"){
path=path.substr(1);
}
if(_178){
path+="/";
}
return path;
};
function _172(_179,_17a){
var _17b=0,_17c=0,_17d=_179.length,_17e=_17a?_179:[],_17f=NO;
for(;_17b<_17d;++_17b){
var _180=_179[_17b];
if(_180===""){
continue;
}
if(_180==="."){
_17f=_17c===0;
continue;
}
if(_180!==".."||_17c===0||_17e[_17c-1]===".."){
_17e[_17c]=_180;
_17c++;
continue;
}
if(_17c>0&&_17e[_17c-1]!=="/"){
--_17c;
}
}
if(_17f&&_17c===0){
_17e[_17c++]=".";
}
_17e.length=_17c;
return _17e;
};
function _175(_181){
var _182="",_183=_181.scheme;
if(_183){
_182+=_183+":";
}
var _184=_181.authority;
if(_184){
_182+="//"+_184;
}
_182+=_181.path;
var _185=_181.queryString;
if(_185){
_182+="?"+_185;
}
var _186=_181.fragment;
if(_186){
_182+="#"+_186;
}
return _182;
};
CFURL.prototype.absoluteURL=function(){
if(this._absoluteURL===_46){
this._absoluteURL=_169(this);
}
return this._absoluteURL;
};
CFURL.prototype.standardizedURL=function(){
if(this._standardizedURL===_46){
var _187=((this)._parts||_156(this)),_188=_187.pathComponents,_189=_172(_188,NO);
var _18a=_173(_189,this.hasDirectoryPath());
if(_187.path===_18a){
this._standardizedURL=this;
}else{
var _18b=_18c(_187);
_18b.pathComponents=_189;
_18b.path=_18a;
var _18d=new CFURL(_175(_18b),this.baseURL());
_18d._parts=_18b;
_18d._standardizedURL=_18d;
this._standardizedURL=_18d;
}
}
return this._standardizedURL;
};
function _18c(_18e){
var _18f={},_190=_155.length;
while(_190--){
var _191=_155[_190];
_18f[_191]=_18e[_191];
}
return _18f;
};
CFURL.prototype.string=function(){
return this._string;
};
CFURL.prototype.authority=function(){
var _192=((this)._parts||_156(this)).authority;
if(_192){
return _192;
}
var _193=this.baseURL();
return _193&&_193.authority()||"";
};
CFURL.prototype.hasDirectoryPath=function(){
var _194=this._hasDirectoryPath;
if(_194===_46){
var path=this.path();
if(!path){
return NO;
}
if(path.charAt(path.length-1)==="/"){
return YES;
}
var _195=this.lastPathComponent();
_194=_195==="."||_195==="..";
this._hasDirectoryPath=_194;
}
return _194;
};
CFURL.prototype.hostName=function(){
return this.authority();
};
CFURL.prototype.fragment=function(){
return ((this)._parts||_156(this)).fragment;
};
CFURL.prototype.lastPathComponent=function(){
if(this._lastPathComponent===_46){
var _196=this.pathComponents(),_197=_196.length;
if(!_197){
this._lastPathComponent="";
}else{
this._lastPathComponent=_196[_197-1];
}
}
return this._lastPathComponent;
};
CFURL.prototype.path=function(){
return ((this)._parts||_156(this)).path;
};
CFURL.prototype.pathComponents=function(){
return ((this)._parts||_156(this)).pathComponents;
};
CFURL.prototype.pathExtension=function(){
var _198=this.lastPathComponent();
if(!_198){
return NULL;
}
_198=_198.replace(/^\.*/,"");
var _199=_198.lastIndexOf(".");
return _199<=0?"":_198.substring(_199+1);
};
CFURL.prototype.queryString=function(){
return ((this)._parts||_156(this)).queryString;
};
CFURL.prototype.scheme=function(){
var _19a=this._scheme;
if(_19a===_46){
_19a=((this)._parts||_156(this)).scheme;
if(!_19a){
var _19b=this.baseURL();
_19a=_19b&&_19b.scheme();
}
this._scheme=_19a;
}
return _19a;
};
CFURL.prototype.user=function(){
return ((this)._parts||_156(this)).user;
};
CFURL.prototype.password=function(){
return ((this)._parts||_156(this)).password;
};
CFURL.prototype.portNumber=function(){
return ((this)._parts||_156(this)).portNumber;
};
CFURL.prototype.domain=function(){
return ((this)._parts||_156(this)).domain;
};
CFURL.prototype.baseURL=function(){
return this._baseURL;
};
CFURL.prototype.asDirectoryPathURL=function(){
if(this.hasDirectoryPath()){
return this;
}
var _19c=this.lastPathComponent();
if(_19c!=="/"){
_19c="./"+_19c;
}
return new CFURL(_19c+"/",this);
};
function _19d(aURL){
if(!aURL._resourcePropertiesForKeys){
aURL._resourcePropertiesForKeys=new CFMutableDictionary();
}
return aURL._resourcePropertiesForKeys;
};
CFURL.prototype.resourcePropertyForKey=function(aKey){
return _19d(this).valueForKey(aKey);
};
CFURL.prototype.setResourcePropertyForKey=function(aKey,_19e){
_19d(this).setValueForKey(aKey,_19e);
};
CFURL.prototype.staticResourceData=function(){
var data=new CFMutableData();
data.setRawString(_19f.resourceAtURL(this).contents());
return data;
};
function _106(_1a0){
this._string=_1a0;
var _1a1=_1a0.indexOf(";");
this._magicNumber=_1a0.substr(0,_1a1);
this._location=_1a0.indexOf(";",++_1a1);
this._version=_1a0.substring(_1a1,this._location++);
};
_106.prototype.magicNumber=function(){
return this._magicNumber;
};
_106.prototype.version=function(){
return this._version;
};
_106.prototype.getMarker=function(){
var _1a2=this._string,_1a3=this._location;
if(_1a3>=_1a2.length){
return null;
}
var next=_1a2.indexOf(";",_1a3);
if(next<0){
return null;
}
var _1a4=_1a2.substring(_1a3,next);
if(_1a4==="e"){
return null;
}
this._location=next+1;
return _1a4;
};
_106.prototype.getString=function(){
var _1a5=this._string,_1a6=this._location;
if(_1a6>=_1a5.length){
return null;
}
var next=_1a5.indexOf(";",_1a6);
if(next<0){
return null;
}
var size=parseInt(_1a5.substring(_1a6,next),10),text=_1a5.substr(next+1,size);
this._location=next+1+size;
return text;
};
var _1a7=0,_1a8=1<<0,_1a9=1<<1,_1aa=1<<2,_1ab=1<<3,_1ac=1<<4;
var _1ad={},_1ae={},_1af=new Date().getTime(),_1b0=0,_1b1=0;
CFBundle=function(aURL){
aURL=_1b2(aURL).asDirectoryPathURL();
var _1b3=aURL.absoluteString(),_1b4=_1ad[_1b3];
if(_1b4){
return _1b4;
}
_1ad[_1b3]=this;
this._bundleURL=aURL;
this._resourcesDirectoryURL=new CFURL("Resources/",aURL);
this._staticResource=NULL;
this._isValid=NO;
this._loadStatus=_1a7;
this._loadRequests=[];
this._infoDictionary=new CFDictionary();
this._eventDispatcher=new _75(this);
};
CFBundle.environments=function(){
return ["Browser","ObjJ"];
};
CFBundle.bundleContainingURL=function(aURL){
aURL=new CFURL(".",_1b2(aURL));
var _1b5,_1b6=aURL.absoluteString();
while(!_1b5||_1b5!==_1b6){
var _1b7=_1ad[_1b6];
if(_1b7&&_1b7._isValid){
return _1b7;
}
aURL=new CFURL("..",aURL);
_1b5=_1b6;
_1b6=aURL.absoluteString();
}
return NULL;
};
CFBundle.mainBundle=function(){
return new CFBundle(_1b8);
};
function _1b9(_1ba,_1bb){
if(_1bb){
_1ae[_1ba.name]=_1bb;
}
};
CFBundle.bundleForClass=function(_1bc){
return _1ae[_1bc.name]||CFBundle.mainBundle();
};
CFBundle.prototype.bundleURL=function(){
return this._bundleURL;
};
CFBundle.prototype.resourcesDirectoryURL=function(){
return this._resourcesDirectoryURL;
};
CFBundle.prototype.resourceURL=function(_1bd,_1be,_1bf){
if(_1be){
_1bd=_1bd+"."+_1be;
}
if(_1bf){
_1bd=_1bf+"/"+_1bd;
}
var _1c0=(new CFURL(_1bd,this.resourcesDirectoryURL())).mappedURL();
return _1c0.absoluteURL();
};
CFBundle.prototype.mostEligibleEnvironmentURL=function(){
if(this._mostEligibleEnvironmentURL===_46){
this._mostEligibleEnvironmentURL=new CFURL(this.mostEligibleEnvironment()+".environment/",this.bundleURL());
}
return this._mostEligibleEnvironmentURL;
};
CFBundle.prototype.executableURL=function(){
if(this._executableURL===_46){
var _1c1=this.valueForInfoDictionaryKey("CPBundleExecutable");
if(!_1c1){
this._executableURL=NULL;
}else{
this._executableURL=new CFURL(_1c1,this.mostEligibleEnvironmentURL());
}
}
return this._executableURL;
};
CFBundle.prototype.infoDictionary=function(){
return this._infoDictionary;
};
CFBundle.prototype.valueForInfoDictionaryKey=function(aKey){
return this._infoDictionary.valueForKey(aKey);
};
CFBundle.prototype.hasSpritedImages=function(){
var _1c2=this._infoDictionary.valueForKey("CPBundleEnvironmentsWithImageSprites")||[],_95=_1c2.length,_1c3=this.mostEligibleEnvironment();
while(_95--){
if(_1c2[_95]===_1c3){
return YES;
}
}
return NO;
};
CFBundle.prototype.environments=function(){
return this._infoDictionary.valueForKey("CPBundleEnvironments")||["ObjJ"];
};
CFBundle.prototype.mostEligibleEnvironment=function(_1c4){
_1c4=_1c4||this.environments();
var _1c5=CFBundle.environments(),_95=0,_1c6=_1c5.length,_1c7=_1c4.length;
for(;_95<_1c6;++_95){
var _1c8=0,_1c9=_1c5[_95];
for(;_1c8<_1c7;++_1c8){
if(_1c9===_1c4[_1c8]){
return _1c9;
}
}
}
return NULL;
};
CFBundle.prototype.isLoading=function(){
return this._loadStatus&_1a8;
};
CFBundle.prototype.isLoaded=function(){
return this._loadStatus&_1ac;
};
CFBundle.prototype.load=function(_1ca){
if(this._loadStatus!==_1a7){
return;
}
this._loadStatus=_1a8|_1a9;
var self=this,_1cb=this.bundleURL(),_1cc=new CFURL("..",_1cb);
if(_1cc.absoluteString()===_1cb.absoluteString()){
_1cc=_1cc.schemeAndAuthority();
}
_19f.resolveResourceAtURL(_1cc,YES,function(_1cd){
var _1ce=_1cb.absoluteURL().lastPathComponent();
self._staticResource=_1cd._children[_1ce]||new _19f(_1cb,_1cd,YES,NO);
function _1cf(_1d0){
self._loadStatus&=~_1a9;
var _1d1=_1d0.request.responsePropertyList();
self._isValid=!!_1d1||CFBundle.mainBundle()===self;
if(_1d1){
self._infoDictionary=_1d1;
}
if(!self._infoDictionary){
_1d3(self,new Error("Could not load bundle at \""+path+"\""));
return;
}
if(self===CFBundle.mainBundle()&&self.valueForInfoDictionaryKey("CPApplicationSize")){
_1b1=self.valueForInfoDictionaryKey("CPApplicationSize").valueForKey("executable")||0;
}
_1d7(self,_1ca);
};
function _1d2(){
self._isValid=CFBundle.mainBundle()===self;
self._loadStatus=_1a7;
_1d3(self,new Error("Could not load bundle at \""+self.bundleURL()+"\""));
};
new _b1(new CFURL("Info.plist",self.bundleURL()),_1cf,_1d2);
});
};
function _1d3(_1d4,_1d5){
_1d6(_1d4._staticResource);
_1d4._eventDispatcher.dispatchEvent({type:"error",error:_1d5,bundle:_1d4});
};
function _1d7(_1d8,_1d9){
if(!_1d8.mostEligibleEnvironment()){
return _1da();
}
_1db(_1d8,_1dc,_1da);
_1dd(_1d8,_1dc,_1da);
if(_1d8._loadStatus===_1a8){
return _1dc();
}
function _1da(_1de){
var _1df=_1d8._loadRequests,_1e0=_1df.length;
while(_1e0--){
_1df[_1e0].abort();
}
this._loadRequests=[];
_1d8._loadStatus=_1a7;
_1d3(_1d8,_1de||new Error("Could not recognize executable code format in Bundle "+_1d8));
};
function _1dc(){
if((typeof CPApp==="undefined"||!CPApp||!CPApp._finishedLaunching)&&typeof OBJJ_PROGRESS_CALLBACK==="function"&&_1b1){
OBJJ_PROGRESS_CALLBACK(MAX(MIN(1,_1b0/_1b1),0),_1b1,_1d8.bundlePath());
}
if(_1d8._loadStatus===_1a8){
_1d8._loadStatus=_1ac;
}else{
return;
}
_1d6(_1d8._staticResource);
function _1e1(){
_1d8._eventDispatcher.dispatchEvent({type:"load",bundle:_1d8});
};
if(_1d9){
_1e2(_1d8,_1e1);
}else{
_1e1();
}
};
};
function _1db(_1e3,_1e4,_1e5){
var _1e6=_1e3.executableURL();
if(!_1e6){
return;
}
_1e3._loadStatus|=_1aa;
new _b1(_1e6,function(_1e7){
try{
_1b0+=_1e7.request.responseText().length;
_1e8(_1e3,_1e7.request.responseText(),_1e6);
_1e3._loadStatus&=~_1aa;
_1e4();
}
catch(anException){
_1e5(anException);
}
},_1e5);
};
function _1e9(_1ea){
return "mhtml:"+new CFURL("MHTMLTest.txt",_1ea.mostEligibleEnvironmentURL());
};
function _1eb(_1ec){
if(_1ed===_1ee){
return new CFURL("dataURLs.txt",_1ec.mostEligibleEnvironmentURL());
}
if(_1ed===_1ef||_1ed===_1f0){
return new CFURL("MHTMLPaths.txt",_1ec.mostEligibleEnvironmentURL());
}
return NULL;
};
function _1dd(_1f1,_1f2,_1f3){
if(!_1f1.hasSpritedImages()){
return;
}
_1f1._loadStatus|=_1ab;
if(!_1f4()){
return _1f5(_1e9(_1f1),function(){
_1dd(_1f1,_1f2,_1f3);
});
}
var _1f6=_1eb(_1f1);
if(!_1f6){
_1f1._loadStatus&=~_1ab;
return _1f2();
}
new _b1(_1f6,function(_1f7){
try{
_1b0+=_1f7.request.responseText().length;
_1e8(_1f1,_1f7.request.responseText(),_1f6);
_1f1._loadStatus&=~_1ab;
}
catch(anException){
_1f3(anException);
}
_1f2();
},_1f3);
};
var _1f8=[],_1ed=-1,_1f9=0,_1ee=1,_1ef=2,_1f0=3;
function _1f4(){
return _1ed!==-1;
};
function _1f5(_1fa,_1fb){
if(_1f4()){
return;
}
_1f8.push(_1fb);
if(_1f8.length>1){
return;
}
_1f8.push(function(){
var size=0,_1fc=CFBundle.mainBundle().valueForInfoDictionaryKey("CPApplicationSize");
if(!_1fc){
return;
}
switch(_1ed){
case _1ee:
size=_1fc.valueForKey("data");
break;
case _1ef:
case _1f0:
size=_1fc.valueForKey("mhtml");
break;
}
_1b1+=size;
});
_1fd([_1ee,"data:image/gif;base64,R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==",_1ef,_1fa+"!test",_1f0,_1fa+"?"+_1af+"!test"]);
};
function _1fe(){
var _1ff=_1f8.length;
while(_1ff--){
_1f8[_1ff]();
}
};
function _1fd(_200){
if(_200.length<2){
_1ed=_1f9;
_1fe();
return;
}
var _201=new Image();
_201.onload=function(){
if(_201.width===1&&_201.height===1){
_1ed=_200[0];
_1fe();
}else{
_201.onerror();
}
};
_201.onerror=function(){
_1fd(_200.slice(2));
};
_201.src=_200[1];
};
function _1e2(_202,_203){
var _204=[_202._staticResource];
function _205(_206){
for(;_206<_204.length;++_206){
var _207=_204[_206];
if(_207.isNotFound()){
continue;
}
if(_207.isFile()){
var _208=new _320(_207.URL());
if(_208.hasLoadedFileDependencies()){
_208.execute();
}else{
_208.loadFileDependencies(function(){
_205(_206);
});
return;
}
}else{
if(_207.URL().absoluteString()===_202.resourcesDirectoryURL().absoluteString()){
continue;
}
var _209=_207.children();
for(var name in _209){
if(_7a.call(_209,name)){
_204.push(_209[name]);
}
}
}
}
_203();
};
_205(0);
};
var _20a="@STATIC",_20b="p",_20c="u",_20d="c",_20e="t",_20f="I",_210="i";
function _1e8(_211,_212,_213){
var _214=new _106(_212);
if(_214.magicNumber()!==_20a){
throw new Error("Could not read static file: "+_213);
}
if(_214.version()!=="1.0"){
throw new Error("Could not read static file: "+_213);
}
var _215,_216=_211.bundleURL(),file=NULL;
while(_215=_214.getMarker()){
var text=_214.getString();
if(_215===_20b){
var _217=new CFURL(text,_216),_218=_19f.resourceAtURL(new CFURL(".",_217),YES);
file=new _19f(_217,_218,NO,YES);
}else{
if(_215===_20c){
var URL=new CFURL(text,_216),_219=_214.getString();
if(_219.indexOf("mhtml:")===0){
_219="mhtml:"+new CFURL(_219.substr("mhtml:".length),_216);
if(_1ed===_1f0){
var _21a=_219.indexOf("!"),_21b=_219.substring(0,_21a),_21c=_219.substring(_21a);
_219=_21b+"?"+_1af+_21c;
}
}
CFURL.setMappedURLForURL(URL,new CFURL(_219));
var _218=_19f.resourceAtURL(new CFURL(".",URL),YES);
new _19f(URL,_218,NO,YES);
}else{
if(_215===_20e){
file.write(text);
}
}
}
}
};
CFBundle.prototype.addEventListener=function(_21d,_21e){
this._eventDispatcher.addEventListener(_21d,_21e);
};
CFBundle.prototype.removeEventListener=function(_21f,_220){
this._eventDispatcher.removeEventListener(_21f,_220);
};
CFBundle.prototype.onerror=function(_221){
throw _221.error;
};
CFBundle.prototype.bundlePath=function(){
return this._bundleURL.absoluteURL().path();
};
CFBundle.prototype.path=function(){
CPLog.warn("CFBundle.prototype.path is deprecated, use CFBundle.prototype.bundlePath instead.");
return this.bundlePath.apply(this,arguments);
};
CFBundle.prototype.pathForResource=function(_222){
return this.resourceURL(_222).absoluteString();
};
var _223={};
function _19f(aURL,_224,_225,_226){
this._parent=_224;
this._eventDispatcher=new _75(this);
var name=aURL.absoluteURL().lastPathComponent()||aURL.schemeAndAuthority();
this._name=name;
this._URL=aURL;
this._isResolved=!!_226;
if(_225){
this._URL=this._URL.asDirectoryPathURL();
}
if(!_224){
_223[name]=this;
}
this._isDirectory=!!_225;
this._isNotFound=NO;
if(_224){
_224._children[name]=this;
}
if(_225){
this._children={};
}else{
this._contents="";
}
};
_19f.rootResources=function(){
return _223;
};
_2.StaticResource=_19f;
function _1d6(_227){
_227._isResolved=YES;
_227._eventDispatcher.dispatchEvent({type:"resolve",staticResource:_227});
};
_19f.prototype.resolve=function(){
if(this.isDirectory()){
var _228=new CFBundle(this.URL());
_228.onerror=function(){
};
_228.load(NO);
}else{
var self=this;
function _229(_22a){
self._contents=_22a.request.responseText();
_1d6(self);
};
function _22b(){
self._isNotFound=YES;
_1d6(self);
};
new _b1(this.URL(),_229,_22b);
}
};
_19f.prototype.name=function(){
return this._name;
};
_19f.prototype.URL=function(){
return this._URL;
};
_19f.prototype.contents=function(){
return this._contents;
};
_19f.prototype.children=function(){
return this._children;
};
_19f.prototype.parent=function(){
return this._parent;
};
_19f.prototype.isResolved=function(){
return this._isResolved;
};
_19f.prototype.write=function(_22c){
this._contents+=_22c;
};
function _22d(_22e){
var _22f=_22e.schemeAndAuthority(),_230=_223[_22f];
if(!_230){
_230=new _19f(new CFURL(_22f),NULL,YES,YES);
}
return _230;
};
_19f.resourceAtURL=function(aURL,_231){
aURL=_1b2(aURL).absoluteURL();
var _232=_22d(aURL),_233=aURL.pathComponents(),_95=0,_234=_233.length;
for(;_95<_234;++_95){
var name=_233[_95];
if(_7a.call(_232._children,name)){
_232=_232._children[name];
}else{
if(_231){
if(name!=="/"){
name="./"+name;
}
_232=new _19f(new CFURL(name,_232.URL()),_232,YES,YES);
}else{
throw new Error("Static Resource at "+aURL+" is not resolved (\""+name+"\")");
}
}
}
return _232;
};
_19f.prototype.resourceAtURL=function(aURL,_235){
return _19f.resourceAtURL(new CFURL(aURL,this.URL()),_235);
};
_19f.resolveResourceAtURL=function(aURL,_236,_237){
aURL=_1b2(aURL).absoluteURL();
_238(_22d(aURL),_236,aURL.pathComponents(),0,_237);
};
_19f.prototype.resolveResourceAtURL=function(aURL,_239,_23a){
_19f.resolveResourceAtURL(new CFURL(aURL,this.URL()).absoluteURL(),_239,_23a);
};
function _238(_23b,_23c,_23d,_23e,_23f){
var _240=_23d.length;
for(;_23e<_240;++_23e){
var name=_23d[_23e],_241=_7a.call(_23b._children,name)&&_23b._children[name];
if(!_241){
_241=new _19f(new CFURL(name,_23b.URL()),_23b,_23e+1<_240||_23c,NO);
_241.resolve();
}
if(!_241.isResolved()){
return _241.addEventListener("resolve",function(){
_238(_23b,_23c,_23d,_23e,_23f);
});
}
if(_241.isNotFound()){
return _23f(null,new Error("File not found: "+_23d.join("/")));
}
if((_23e+1<_240)&&_241.isFile()){
return _23f(null,new Error("File is not a directory: "+_23d.join("/")));
}
_23b=_241;
}
_23f(_23b);
};
function _242(aURL,_243,_244){
var _245=_19f.includeURLs(),_246=new CFURL(aURL,_245[_243]).absoluteURL();
_19f.resolveResourceAtURL(_246,NO,function(_247){
if(!_247){
if(_243+1<_245.length){
_242(aURL,_243+1,_244);
}else{
_244(NULL);
}
return;
}
_244(_247);
});
};
_19f.resolveResourceAtURLSearchingIncludeURLs=function(aURL,_248){
_242(aURL,0,_248);
};
_19f.prototype.addEventListener=function(_249,_24a){
this._eventDispatcher.addEventListener(_249,_24a);
};
_19f.prototype.removeEventListener=function(_24b,_24c){
this._eventDispatcher.removeEventListener(_24b,_24c);
};
_19f.prototype.isNotFound=function(){
return this._isNotFound;
};
_19f.prototype.isFile=function(){
return !this._isDirectory;
};
_19f.prototype.isDirectory=function(){
return this._isDirectory;
};
_19f.prototype.toString=function(_24d){
if(this.isNotFound()){
return "<file not found: "+this.name()+">";
}
var _24e=this.name();
if(this.isDirectory()){
var _24f=this._children;
for(var name in _24f){
if(_24f.hasOwnProperty(name)){
var _250=_24f[name];
if(_24d||!_250.isNotFound()){
_24e+="\n\t"+_24f[name].toString(_24d).split("\n").join("\n\t");
}
}
}
}
return _24e;
};
var _251=NULL;
_19f.includeURLs=function(){
if(_252){
return _252;
}
var _252=[];
if(!_1.OBJJ_INCLUDE_PATHS&&!_1.OBJJ_INCLUDE_URLS){
_252=["Frameworks","Frameworks/Debug"];
}else{
_252=(_1.OBJJ_INCLUDE_PATHS||[]).concat(_1.OBJJ_INCLUDE_URLS||[]);
}
var _253=_252.length;
while(_253--){
_252[_253]=new CFURL(_252[_253]).asDirectoryPathURL();
}
return _252;
};
var _254="accessors",_255="class",_256="end",_257="function",_258="implementation",_259="import",_25a="each",_25b="outlet",_25c="action",_25d="new",_25e="selector",_25f="super",_260="var",_261="in",_262="pragma",_263="mark",_264="=",_265="+",_266="-",_267=":",_268=",",_269=".",_26a="*",_26b=";",_26c="<",_26d="{",_26e="}",_26f=">",_270="[",_271="\"",_272="@",_273="#",_274="]",_275="?",_276="(",_277=")",_278=/^(?:(?:\s+$)|(?:\/(?:\/|\*)))/,_279=/^[+-]?\d+(([.]\d+)*([eE][+-]?\d+))?$/,_27a=/^[a-zA-Z_$](\w|$)*$/;
function _27b(_27c){
this._index=-1;
this._tokens=(_27c+"\n").match(/\/\/.*(\r|\n)?|\/\*(?:.|\n|\r)*?\*\/|\w+\b|[+-]?\d+(([.]\d+)*([eE][+-]?\d+))?|"[^"\\]*(\\[\s\S][^"\\]*)*"|'[^'\\]*(\\[\s\S][^'\\]*)*'|\s+|./g);
this._context=[];
return this;
};
_27b.prototype.push=function(){
this._context.push(this._index);
};
_27b.prototype.pop=function(){
this._index=this._context.pop();
};
_27b.prototype.peek=function(_27d){
if(_27d){
this.push();
var _27e=this.skip_whitespace();
this.pop();
return _27e;
}
return this._tokens[this._index+1];
};
_27b.prototype.next=function(){
return this._tokens[++this._index];
};
_27b.prototype.previous=function(){
return this._tokens[--this._index];
};
_27b.prototype.last=function(){
if(this._index<0){
return NULL;
}
return this._tokens[this._index-1];
};
_27b.prototype.skip_whitespace=function(_27f){
var _280;
if(_27f){
while((_280=this.previous())&&_278.test(_280)){
}
}else{
while((_280=this.next())&&_278.test(_280)){
}
}
return _280;
};
_2.Lexer=_27b;
function _281(){
this.atoms=[];
};
_281.prototype.toString=function(){
return this.atoms.join("");
};
_2.preprocess=function(_282,aURL,_283){
return new _284(_282,aURL,_283).executable();
};
_2.eval=function(_285){
return eval(_2.preprocess(_285).code());
};
var _284=function(_286,aURL,_287){
this._URL=new CFURL(aURL);
_286=_286.replace(/^#[^\n]+\n/,"\n");
this._currentSelector="";
this._currentClass="";
this._currentSuperClass="";
this._currentSuperMetaClass="";
this._buffer=new _281();
this._preprocessed=NULL;
this._dependencies=[];
this._tokens=new _27b(_286);
this._flags=_287;
this._classMethod=false;
this._executable=NULL;
this._classLookupTable={};
this._classVars={};
var _288=new objj_class();
for(var i in _288){
this._classVars[i]=1;
}
this.preprocess(this._tokens,this._buffer);
};
_284.prototype.setClassInfo=function(_289,_28a,_28b){
this._classLookupTable[_289]={superClassName:_28a,ivars:_28b};
};
_284.prototype.getClassInfo=function(_28c){
return this._classLookupTable[_28c];
};
_284.prototype.allIvarNamesForClassName=function(_28d){
var _28e={},_28f=this.getClassInfo(_28d);
while(_28f){
for(var i in _28f.ivars){
_28e[i]=1;
}
_28f=this.getClassInfo(_28f.superClassName);
}
return _28e;
};
_2.Preprocessor=_284;
_284.Flags={};
_284.Flags.IncludeDebugSymbols=1<<0;
_284.Flags.IncludeTypeSignatures=1<<1;
_284.prototype.executable=function(){
if(!this._executable){
this._executable=new _290(this._buffer.toString(),this._dependencies,this._URL);
}
return this._executable;
};
_284.prototype.accessors=function(_291){
var _292=_291.skip_whitespace(),_293={};
if(_292!=_276){
_291.previous();
return _293;
}
while((_292=_291.skip_whitespace())!=_277){
var name=_292,_294=true;
if(!/^\w+$/.test(name)){
throw new SyntaxError(this.error_message("*** @accessors attribute name not valid."));
}
if((_292=_291.skip_whitespace())==_264){
_294=_291.skip_whitespace();
if(!/^\w+$/.test(_294)){
throw new SyntaxError(this.error_message("*** @accessors attribute value not valid."));
}
if(name=="setter"){
if((_292=_291.next())!=_267){
throw new SyntaxError(this.error_message("*** @accessors setter attribute requires argument with \":\" at end of selector name."));
}
_294+=":";
}
_292=_291.skip_whitespace();
}
_293[name]=_294;
if(_292==_277){
break;
}
if(_292!=_268){
throw new SyntaxError(this.error_message("*** Expected ',' or ')' in @accessors attribute list."));
}
}
return _293;
};
_284.prototype.brackets=function(_295,_296){
var _297=[];
while(this.preprocess(_295,NULL,NULL,NULL,_297[_297.length]=[])){
}
if(_297[0].length===1){
_296.atoms[_296.atoms.length]="[";
_296.atoms[_296.atoms.length]=_297[0][0];
_296.atoms[_296.atoms.length]="]";
}else{
var _298=new _281();
if(_297[0][0].atoms[0]==_25f){
_296.atoms[_296.atoms.length]="objj_msgSendSuper(";
_296.atoms[_296.atoms.length]="{ receiver:self, super_class:"+(this._classMethod?this._currentSuperMetaClass:this._currentSuperClass)+" }";
}else{
_296.atoms[_296.atoms.length]="objj_msgSend(";
_296.atoms[_296.atoms.length]=_297[0][0];
}
_298.atoms[_298.atoms.length]=_297[0][1];
var _299=1,_29a=_297.length,_29b=new _281();
for(;_299<_29a;++_299){
var pair=_297[_299];
_298.atoms[_298.atoms.length]=pair[1];
_29b.atoms[_29b.atoms.length]=", "+pair[0];
}
_296.atoms[_296.atoms.length]=", \"";
_296.atoms[_296.atoms.length]=_298;
_296.atoms[_296.atoms.length]="\"";
_296.atoms[_296.atoms.length]=_29b;
_296.atoms[_296.atoms.length]=")";
}
};
_284.prototype.directive=function(_29c,_29d,_29e){
var _29f=_29d?_29d:new _281(),_2a0=_29c.next();
if(_2a0.charAt(0)==_271){
_29f.atoms[_29f.atoms.length]=_2a0;
}else{
if(_2a0===_255){
_29c.skip_whitespace();
return;
}else{
if(_2a0===_258){
this.implementation(_29c,_29f);
}else{
if(_2a0===_259){
this._import(_29c);
}else{
if(_2a0===_25e){
this.selector(_29c,_29f);
}
}
}
}
}
if(!_29d){
return _29f;
}
};
_284.prototype.hash=function(_2a1,_2a2){
var _2a3=_2a2?_2a2:new _281(),_2a4=_2a1.next();
if(_2a4===_262){
_2a4=_2a1.skip_whitespace();
if(_2a4===_263){
while((_2a4=_2a1.next()).indexOf("\n")<0){
}
}
}else{
throw new SyntaxError(this.error_message("*** Expected \"pragma\" to follow # but instead saw \""+_2a4+"\"."));
}
};
_284.prototype.implementation=function(_2a5,_2a6){
var _2a7=_2a6,_2a8="",_2a9=NO,_2aa=_2a5.skip_whitespace(),_2ab="Nil",_2ac=new _281(),_2ad=new _281();
if(!(/^\w/).test(_2aa)){
throw new Error(this.error_message("*** Expected class name, found \""+_2aa+"\"."));
}
this._currentSuperClass="objj_getClass(\""+_2aa+"\").super_class";
this._currentSuperMetaClass="objj_getMetaClass(\""+_2aa+"\").super_class";
this._currentClass=_2aa;
this._currentSelector="";
if((_2a8=_2a5.skip_whitespace())==_276){
_2a8=_2a5.skip_whitespace();
if(_2a8==_277){
throw new SyntaxError(this.error_message("*** Can't Have Empty Category Name for class \""+_2aa+"\"."));
}
if(_2a5.skip_whitespace()!=_277){
throw new SyntaxError(this.error_message("*** Improper Category Definition for class \""+_2aa+"\"."));
}
_2a7.atoms[_2a7.atoms.length]="{\nvar the_class = objj_getClass(\""+_2aa+"\")\n";
_2a7.atoms[_2a7.atoms.length]="if(!the_class) throw new SyntaxError(\"*** Could not find definition for class \\\""+_2aa+"\\\"\");\n";
_2a7.atoms[_2a7.atoms.length]="var meta_class = the_class.isa;";
}else{
if(_2a8==_267){
_2a8=_2a5.skip_whitespace();
if(!_27a.test(_2a8)){
throw new SyntaxError(this.error_message("*** Expected class name, found \""+_2a8+"\"."));
}
_2ab=_2a8;
_2a8=_2a5.skip_whitespace();
}
_2a7.atoms[_2a7.atoms.length]="{var the_class = objj_allocateClassPair("+_2ab+", \""+_2aa+"\"),\nmeta_class = the_class.isa;";
if(_2a8==_26d){
var _2ae={},_2af=0,_2b0=[],_2b1,_2b2={};
while((_2a8=_2a5.skip_whitespace())&&_2a8!=_26e){
if(_2a8===_272){
_2a8=_2a5.next();
if(_2a8===_254){
_2b1=this.accessors(_2a5);
}else{
if(_2a8!==_25b){
throw new SyntaxError(this.error_message("*** Unexpected '@' token in ivar declaration ('@"+_2a8+"')."));
}
}
}else{
if(_2a8==_26b){
if(_2af++===0){
_2a7.atoms[_2a7.atoms.length]="class_addIvars(the_class, [";
}else{
_2a7.atoms[_2a7.atoms.length]=", ";
}
var name=_2b0[_2b0.length-1];
_2a7.atoms[_2a7.atoms.length]="new objj_ivar(\""+name+"\")";
_2ae[name]=1;
_2b0=[];
if(_2b1){
_2b2[name]=_2b1;
_2b1=NULL;
}
}else{
_2b0.push(_2a8);
}
}
}
if(_2b0.length){
throw new SyntaxError(this.error_message("*** Expected ';' in ivar declaration, found '}'."));
}
if(_2af){
_2a7.atoms[_2a7.atoms.length]="]);\n";
}
if(!_2a8){
throw new SyntaxError(this.error_message("*** Expected '}'"));
}
this.setClassInfo(_2aa,_2ab==="Nil"?null:_2ab,_2ae);
var _2ae=this.allIvarNamesForClassName(_2aa);
for(ivar_name in _2b2){
var _2b3=_2b2[ivar_name],_2b4=_2b3["property"]||ivar_name;
var _2b5=_2b3["getter"]||_2b4,_2b6="(id)"+_2b5+"\n{\nreturn "+ivar_name+";\n}";
if(_2ac.atoms.length!==0){
_2ac.atoms[_2ac.atoms.length]=",\n";
}
_2ac.atoms[_2ac.atoms.length]=this.method(new _27b(_2b6),_2ae);
if(_2b3["readonly"]){
continue;
}
var _2b7=_2b3["setter"];
if(!_2b7){
var _2b8=_2b4.charAt(0)=="_"?1:0;
_2b7=(_2b8?"_":"")+"set"+_2b4.substr(_2b8,1).toUpperCase()+_2b4.substring(_2b8+1)+":";
}
var _2b9="(void)"+_2b7+"(id)newValue\n{\n";
if(_2b3["copy"]){
_2b9+="if ("+ivar_name+" !== newValue)\n"+ivar_name+" = [newValue copy];\n}";
}else{
_2b9+=ivar_name+" = newValue;\n}";
}
if(_2ac.atoms.length!==0){
_2ac.atoms[_2ac.atoms.length]=",\n";
}
_2ac.atoms[_2ac.atoms.length]=this.method(new _27b(_2b9),_2ae);
}
}else{
_2a5.previous();
}
_2a7.atoms[_2a7.atoms.length]="objj_registerClassPair(the_class);\n";
}
if(!_2ae){
var _2ae=this.allIvarNamesForClassName(_2aa);
}
while((_2a8=_2a5.skip_whitespace())){
if(_2a8==_265){
this._classMethod=true;
if(_2ad.atoms.length!==0){
_2ad.atoms[_2ad.atoms.length]=", ";
}
_2ad.atoms[_2ad.atoms.length]=this.method(_2a5,this._classVars);
}else{
if(_2a8==_266){
this._classMethod=false;
if(_2ac.atoms.length!==0){
_2ac.atoms[_2ac.atoms.length]=", ";
}
_2ac.atoms[_2ac.atoms.length]=this.method(_2a5,_2ae);
}else{
if(_2a8==_273){
this.hash(_2a5,_2a7);
}else{
if(_2a8==_272){
if((_2a8=_2a5.next())==_256){
break;
}else{
throw new SyntaxError(this.error_message("*** Expected \"@end\", found \"@"+_2a8+"\"."));
}
}
}
}
}
}
if(_2ac.atoms.length!==0){
_2a7.atoms[_2a7.atoms.length]="class_addMethods(the_class, [";
_2a7.atoms[_2a7.atoms.length]=_2ac;
_2a7.atoms[_2a7.atoms.length]="]);\n";
}
if(_2ad.atoms.length!==0){
_2a7.atoms[_2a7.atoms.length]="class_addMethods(meta_class, [";
_2a7.atoms[_2a7.atoms.length]=_2ad;
_2a7.atoms[_2a7.atoms.length]="]);\n";
}
_2a7.atoms[_2a7.atoms.length]="}";
this._currentClass="";
};
_284.prototype._import=function(_2ba){
var _2bb="",_2bc=_2ba.skip_whitespace(),_2bd=(_2bc!==_26c);
if(_2bc===_26c){
while((_2bc=_2ba.next())&&_2bc!==_26f){
_2bb+=_2bc;
}
if(!_2bc){
throw new SyntaxError(this.error_message("*** Unterminated import statement."));
}
}else{
if(_2bc.charAt(0)===_271){
_2bb=_2bc.substr(1,_2bc.length-2);
}else{
throw new SyntaxError(this.error_message("*** Expecting '<' or '\"', found \""+_2bc+"\"."));
}
}
this._buffer.atoms[this._buffer.atoms.length]="objj_executeFile(\"";
this._buffer.atoms[this._buffer.atoms.length]=_2bb;
this._buffer.atoms[this._buffer.atoms.length]=_2bd?"\", YES);":"\", NO);";
this._dependencies.push(new _2be(new CFURL(_2bb),_2bd));
};
_284.prototype.method=function(_2bf,_2c0){
var _2c1=new _281(),_2c2,_2c3="",_2c4=[],_2c5=[null];
_2c0=_2c0||{};
while((_2c2=_2bf.skip_whitespace())&&_2c2!==_26d&&_2c2!==_26b){
if(_2c2==_267){
var type="";
_2c3+=_2c2;
_2c2=_2bf.skip_whitespace();
if(_2c2==_276){
while((_2c2=_2bf.skip_whitespace())&&_2c2!=_277){
type+=_2c2;
}
_2c2=_2bf.skip_whitespace();
}
_2c5[_2c4.length+1]=type||null;
_2c4[_2c4.length]=_2c2;
if(_2c2 in _2c0){
throw new SyntaxError(this.error_message("*** Method ( "+_2c3+" ) uses a parameter name that is already in use ( "+_2c2+" )"));
}
}else{
if(_2c2==_276){
var type="";
while((_2c2=_2bf.skip_whitespace())&&_2c2!=_277){
type+=_2c2;
}
_2c5[0]=type||null;
}else{
if(_2c2==_268){
if((_2c2=_2bf.skip_whitespace())!=_269||_2bf.next()!=_269||_2bf.next()!=_269){
throw new SyntaxError(this.error_message("*** Argument list expected after ','."));
}
}else{
_2c3+=_2c2;
}
}
}
}
if(_2c2===_26b){
_2c2=_2bf.skip_whitespace();
if(_2c2!==_26d){
throw new SyntaxError(this.error_message("Invalid semi-colon in method declaration. "+"Semi-colons are allowed only to terminate the method signature, before the open brace."));
}
}
var _2c6=0,_2c7=_2c4.length;
_2c1.atoms[_2c1.atoms.length]="new objj_method(sel_getUid(\"";
_2c1.atoms[_2c1.atoms.length]=_2c3;
_2c1.atoms[_2c1.atoms.length]="\"), function";
this._currentSelector=_2c3;
if(this._flags&_284.Flags.IncludeDebugSymbols){
_2c1.atoms[_2c1.atoms.length]=" $"+this._currentClass+"__"+_2c3.replace(/:/g,"_");
}
_2c1.atoms[_2c1.atoms.length]="(self, _cmd";
for(;_2c6<_2c7;++_2c6){
_2c1.atoms[_2c1.atoms.length]=", ";
_2c1.atoms[_2c1.atoms.length]=_2c4[_2c6];
}
_2c1.atoms[_2c1.atoms.length]=")\n{ with(self)\n{";
_2c1.atoms[_2c1.atoms.length]=this.preprocess(_2bf,NULL,_26e,_26d);
_2c1.atoms[_2c1.atoms.length]="}\n}";
if(this._flags&_284.Flags.IncludeDebugSymbols){
_2c1.atoms[_2c1.atoms.length]=","+JSON.stringify(_2c5);
}
_2c1.atoms[_2c1.atoms.length]=")";
this._currentSelector="";
return _2c1;
};
_284.prototype.preprocess=function(_2c8,_2c9,_2ca,_2cb,_2cc){
var _2cd=_2c9?_2c9:new _281(),_2ce=0,_2cf="";
if(_2cc){
_2cc[0]=_2cd;
var _2d0=false,_2d1=[0,0,0];
}
while((_2cf=_2c8.next())&&((_2cf!==_2ca)||_2ce)){
if(_2cc){
if(_2cf===_275){
++_2d1[2];
}else{
if(_2cf===_26d){
++_2d1[0];
}else{
if(_2cf===_26e){
--_2d1[0];
}else{
if(_2cf===_276){
++_2d1[1];
}else{
if(_2cf===_277){
--_2d1[1];
}else{
if((_2cf===_267&&_2d1[2]--===0||(_2d0=(_2cf===_274)))&&_2d1[0]===0&&_2d1[1]===0){
_2c8.push();
var _2d2=_2d0?_2c8.skip_whitespace(true):_2c8.previous(),_2d3=_278.test(_2d2);
if(_2d3||_27a.test(_2d2)&&_278.test(_2c8.previous())){
_2c8.push();
var last=_2c8.skip_whitespace(true),_2d4=true,_2d5=false;
if(last==="+"||last==="-"){
if(_2c8.previous()!==last){
_2d4=false;
}else{
last=_2c8.skip_whitespace(true);
_2d5=true;
}
}
_2c8.pop();
_2c8.pop();
if(_2d4&&((!_2d5&&(last===_26e))||last===_277||last===_274||last===_269||_279.test(last)||last.charAt(last.length-1)==="\""||last.charAt(last.length-1)==="'"||_27a.test(last)&&!/^(new|return|case|var)$/.test(last))){
if(_2d3){
_2cc[1]=":";
}else{
_2cc[1]=_2d2;
if(!_2d0){
_2cc[1]+=":";
}
var _2ce=_2cd.atoms.length;
while(_2cd.atoms[_2ce--]!==_2d2){
}
_2cd.atoms.length=_2ce;
}
return !_2d0;
}
if(_2d0){
return NO;
}
}
_2c8.pop();
if(_2d0){
return NO;
}
}
}
}
}
}
}
_2d1[2]=MAX(_2d1[2],0);
}
if(_2cb){
if(_2cf===_2cb){
++_2ce;
}else{
if(_2cf===_2ca){
--_2ce;
}
}
}
if(_2cf===_257){
var _2d6="";
while((_2cf=_2c8.next())&&_2cf!==_276&&!(/^\w/).test(_2cf)){
_2d6+=_2cf;
}
if(_2cf===_276){
if(_2cb===_276){
++_2ce;
}
_2cd.atoms[_2cd.atoms.length]="function"+_2d6+"(";
if(_2cc){
++_2d1[1];
}
}else{
_2cd.atoms[_2cd.atoms.length]=_2cf+"= function";
}
}else{
if(_2cf==_272){
this.directive(_2c8,_2cd);
}else{
if(_2cf==_273){
this.hash(_2c8,_2cd);
}else{
if(_2cf==_270){
this.brackets(_2c8,_2cd);
}else{
_2cd.atoms[_2cd.atoms.length]=_2cf;
}
}
}
}
}
if(_2cc){
throw new SyntaxError(this.error_message("*** Expected ']' - Unterminated message send or array."));
}
if(!_2c9){
return _2cd;
}
};
_284.prototype.selector=function(_2d7,_2d8){
var _2d9=_2d8?_2d8:new _281();
_2d9.atoms[_2d9.atoms.length]="sel_getUid(\"";
if(_2d7.skip_whitespace()!=_276){
throw new SyntaxError(this.error_message("*** Expected '('"));
}
var _2da=_2d7.skip_whitespace();
if(_2da==_277){
throw new SyntaxError(this.error_message("*** Unexpected ')', can't have empty @selector()"));
}
_2d8.atoms[_2d8.atoms.length]=_2da;
var _2db,_2dc=true;
while((_2db=_2d7.next())&&_2db!=_277){
if(_2dc&&/^\d+$/.test(_2db)||!(/^(\w|$|\:)/.test(_2db))){
if(!(/\S/).test(_2db)){
if(_2d7.skip_whitespace()==_277){
break;
}else{
throw new SyntaxError(this.error_message("*** Unexpected whitespace in @selector()."));
}
}else{
throw new SyntaxError(this.error_message("*** Illegal character '"+_2db+"' in @selector()."));
}
}
_2d9.atoms[_2d9.atoms.length]=_2db;
_2dc=(_2db==_267);
}
_2d9.atoms[_2d9.atoms.length]="\")";
if(!_2d8){
return _2d9;
}
};
_284.prototype.error_message=function(_2dd){
return _2dd+" <Context File: "+this._URL+(this._currentClass?" Class: "+this._currentClass:"")+(this._currentSelector?" Method: "+this._currentSelector:"")+">";
};
function _2be(aURL,_2de){
this._URL=aURL;
this._isLocal=_2de;
};
_2.FileDependency=_2be;
_2be.prototype.URL=function(){
return this._URL;
};
_2be.prototype.isLocal=function(){
return this._isLocal;
};
_2be.prototype.toMarkedString=function(){
var _2df=this.URL().absoluteString();
return (this.isLocal()?_210:_20f)+";"+_2df.length+";"+_2df;
};
_2be.prototype.toString=function(){
return (this.isLocal()?"LOCAL: ":"STD: ")+this.URL();
};
var _2e0=0,_2e1=1,_2e2=2,_2e3=0;
function _290(_2e4,_2e5,aURL,_2e6){
if(arguments.length===0){
return this;
}
this._code=_2e4;
this._function=_2e6||NULL;
this._URL=_1b2(aURL||new CFURL("(Anonymous"+(_2e3++)+")"));
this._fileDependencies=_2e5;
if(_2e5.length){
this._fileDependencyStatus=_2e0;
this._fileDependencyCallbacks=[];
}else{
this._fileDependencyStatus=_2e2;
}
if(this._function){
return;
}
this.setCode(_2e4);
};
_2.Executable=_290;
_290.prototype.path=function(){
return this.URL().path();
};
_290.prototype.URL=function(){
return this._URL;
};
_290.prototype.functionParameters=function(){
var _2e7=["global","objj_executeFile","objj_importFile"];
return _2e7;
};
_290.prototype.functionArguments=function(){
var _2e8=[_1,this.fileExecuter(),this.fileImporter()];
return _2e8;
};
_290.prototype.execute=function(){
var _2e9=_2ea;
_2ea=CFBundle.bundleContainingURL(this.URL());
var _2eb=this._function.apply(_1,this.functionArguments());
_2ea=_2e9;
return _2eb;
};
_290.prototype.code=function(){
return this._code;
};
_290.prototype.setCode=function(code){
this._code=code;
var _2ec=this.functionParameters().join(",");
this._function=new Function(_2ec,code);
};
_290.prototype.fileDependencies=function(){
return this._fileDependencies;
};
_290.prototype.hasLoadedFileDependencies=function(){
return this._fileDependencyStatus===_2e2;
};
var _2ed=0,_2ee=[],_2ef={};
_290.prototype.loadFileDependencies=function(_2f0){
var _2f1=this._fileDependencyStatus;
if(_2f0){
if(_2f1===_2e2){
return _2f0();
}
this._fileDependencyCallbacks.push(_2f0);
}
if(_2f1===_2e0){
if(_2ed){
throw "Can't load";
}
_2f2(this);
}
};
function _2f2(_2f3){
_2ee.push(_2f3);
_2f3._fileDependencyStatus=_2e1;
var _2f4=_2f3.fileDependencies(),_95=0,_2f5=_2f4.length,_2f6=_2f3.referenceURL(),_2f7=_2f6.absoluteString(),_2f8=_2f3.fileExecutableSearcher();
_2ed+=_2f5;
for(;_95<_2f5;++_95){
var _2f9=_2f4[_95],_2fa=_2f9.isLocal(),URL=_2f9.URL(),_2fb=(_2fa&&(_2f7+" ")||"")+URL;
if(_2ef[_2fb]){
if(--_2ed===0){
_2fc();
}
continue;
}
_2ef[_2fb]=YES;
_2f8(URL,_2fa,_2fd);
}
};
function _2fd(_2fe){
--_2ed;
if(_2fe._fileDependencyStatus===_2e0){
_2f2(_2fe);
}else{
if(_2ed===0){
_2fc();
}
}
};
function _2fc(){
var _2ff=_2ee,_95=0,_300=_2ff.length;
_2ee=[];
for(;_95<_300;++_95){
_2ff[_95]._fileDependencyStatus=_2e2;
}
for(_95=0;_95<_300;++_95){
var _301=_2ff[_95],_302=_301._fileDependencyCallbacks,_303=0,_304=_302.length;
for(;_303<_304;++_303){
_302[_303]();
}
_301._fileDependencyCallbacks=[];
}
};
_290.prototype.referenceURL=function(){
if(this._referenceURL===_46){
this._referenceURL=new CFURL(".",this.URL());
}
return this._referenceURL;
};
_290.prototype.fileImporter=function(){
return _290.fileImporterForURL(this.referenceURL());
};
_290.prototype.fileExecuter=function(){
return _290.fileExecuterForURL(this.referenceURL());
};
_290.prototype.fileExecutableSearcher=function(){
return _290.fileExecutableSearcherForURL(this.referenceURL());
};
var _305={};
_290.fileExecuterForURL=function(aURL){
var _306=_1b2(aURL),_307=_306.absoluteString(),_308=_305[_307];
if(!_308){
_308=function(aURL,_309,_30a){
_290.fileExecutableSearcherForURL(_306)(aURL,_309,function(_30b){
if(!_30b.hasLoadedFileDependencies()){
throw "No executable loaded for file at URL "+aURL;
}
_30b.execute(_30a);
});
};
_305[_307]=_308;
}
return _308;
};
var _30c={};
_290.fileImporterForURL=function(aURL){
var _30d=_1b2(aURL),_30e=_30d.absoluteString(),_30f=_30c[_30e];
if(!_30f){
_30f=function(aURL,_310,_311){
_152();
_290.fileExecutableSearcherForURL(_30d)(aURL,_310,function(_312){
_312.loadFileDependencies(function(){
_312.execute();
_153();
if(_311){
_311();
}
});
});
};
_30c[_30e]=_30f;
}
return _30f;
};
var _313={},_314={};
_290.fileExecutableSearcherForURL=function(_315){
var _316=_315.absoluteString(),_317=_313[_316],_318={};
if(!_317){
_317=function(aURL,_319,_31a){
var _31b=(_319&&_315||"")+aURL,_31c=_314[_31b];
if(_31c){
return _31d(_31c);
}
var _31e=(aURL instanceof CFURL)&&aURL.scheme();
if(_319||_31e){
if(!_31e){
aURL=new CFURL(aURL,_315);
}
_19f.resolveResourceAtURL(aURL,NO,_31d);
}else{
_19f.resolveResourceAtURLSearchingIncludeURLs(aURL,_31d);
}
function _31d(_31f){
if(!_31f){
throw new Error("Could not load file at "+aURL);
}
_314[_31b]=_31f;
_31a(new _320(_31f.URL()));
};
};
_313[_316]=_317;
}
return _317;
};
var _321={};
function _320(aURL){
aURL=_1b2(aURL);
var _322=aURL.absoluteString(),_323=_321[_322];
if(_323){
return _323;
}
_321[_322]=this;
var _324=_19f.resourceAtURL(aURL).contents(),_325=NULL,_326=aURL.pathExtension();
if(_324.match(/^@STATIC;/)){
_325=_327(_324,aURL);
}else{
if(_326==="j"||!_326){
_325=_2.preprocess(_324,aURL,_284.Flags.IncludeDebugSymbols);
}else{
_325=new _290(_324,[],aURL);
}
}
_290.apply(this,[_325.code(),_325.fileDependencies(),aURL,_325._function]);
this._hasExecuted=NO;
};
_2.FileExecutable=_320;
_320.prototype=new _290();
_320.prototype.execute=function(_328){
if(this._hasExecuted&&!_328){
return;
}
this._hasExecuted=YES;
_290.prototype.execute.call(this);
};
_320.prototype.hasExecuted=function(){
return this._hasExecuted;
};
function _327(_329,aURL){
var _32a=new _106(_329);
var _32b=NULL,code="",_32c=[];
while(_32b=_32a.getMarker()){
var text=_32a.getString();
if(_32b===_20e){
code+=text;
}else{
if(_32b===_20f){
_32c.push(new _2be(new CFURL(text),NO));
}else{
if(_32b===_210){
_32c.push(new _2be(new CFURL(text),YES));
}
}
}
}
var fn=_320._lookupCachedFunction(aURL);
if(fn){
return new _290(code,_32c,aURL,fn);
}
return new _290(code,_32c,aURL);
};
var _32d={};
_320._cacheFunction=function(aURL,fn){
aURL=typeof aURL==="string"?aURL:aURL.absoluteString();
_32d[aURL]=fn;
};
_320._lookupCachedFunction=function(aURL){
aURL=typeof aURL==="string"?aURL:aURL.absoluteString();
return _32d[aURL];
};
var _32e=1,_32f=2,_330=4,_331=8;
objj_ivar=function(_332,_333){
this.name=_332;
this.type=_333;
};
objj_method=function(_334,_335,_336){
this.name=_334;
this.method_imp=_335;
this.types=_336;
};
objj_class=function(_337){
this.isa=NULL;
this.super_class=NULL;
this.sub_classes=[];
this.name=NULL;
this.info=0;
this.ivars=[];
this.method_list=[];
this.method_hash={};
this.method_store=function(){
};
this.method_dtable=this.method_store.prototype;
this.allocator=function(){
};
this._UID=-1;
};
objj_object=function(){
this.isa=NULL;
this._UID=-1;
};
class_getName=function(_338){
if(_338==Nil){
return "";
}
return _338.name;
};
class_isMetaClass=function(_339){
if(!_339){
return NO;
}
return ((_339.info&(_32f)));
};
class_getSuperclass=function(_33a){
if(_33a==Nil){
return Nil;
}
return _33a.super_class;
};
class_setSuperclass=function(_33b,_33c){
_33b.super_class=_33c;
_33b.isa.super_class=_33c.isa;
};
class_addIvar=function(_33d,_33e,_33f){
var _340=_33d.allocator.prototype;
if(typeof _340[_33e]!="undefined"){
return NO;
}
_33d.ivars.push(new objj_ivar(_33e,_33f));
_340[_33e]=NULL;
return YES;
};
class_addIvars=function(_341,_342){
var _343=0,_344=_342.length,_345=_341.allocator.prototype;
for(;_343<_344;++_343){
var ivar=_342[_343],name=ivar.name;
if(typeof _345[name]==="undefined"){
_341.ivars.push(ivar);
_345[name]=NULL;
}
}
};
class_copyIvarList=function(_346){
return _346.ivars.slice(0);
};
class_addMethod=function(_347,_348,_349,_34a){
if(_347.method_hash[_348]){
return NO;
}
var _34b=new objj_method(_348,_349,_34a);
_347.method_list.push(_34b);
_347.method_dtable[_348]=_34b;
if(!((_347.info&(_32f)))&&(((_347.info&(_32f)))?_347:_347.isa).isa===(((_347.info&(_32f)))?_347:_347.isa)){
class_addMethod((((_347.info&(_32f)))?_347:_347.isa),_348,_349,_34a);
}
return YES;
};
class_addMethods=function(_34c,_34d){
var _34e=0,_34f=_34d.length,_350=_34c.method_list,_351=_34c.method_dtable;
for(;_34e<_34f;++_34e){
var _352=_34d[_34e];
if(_34c.method_hash[_352.name]){
continue;
}
_350.push(_352);
_351[_352.name]=_352;
}
if(!((_34c.info&(_32f)))&&(((_34c.info&(_32f)))?_34c:_34c.isa).isa===(((_34c.info&(_32f)))?_34c:_34c.isa)){
class_addMethods((((_34c.info&(_32f)))?_34c:_34c.isa),_34d);
}
};
class_getInstanceMethod=function(_353,_354){
if(!_353||!_354){
return NULL;
}
var _355=_353.method_dtable[_354];
return _355?_355:NULL;
};
class_getClassMethod=function(_356,_357){
if(!_356||!_357){
return NULL;
}
var _358=(((_356.info&(_32f)))?_356:_356.isa).method_dtable[_357];
return _358?_358:NULL;
};
class_respondsToSelector=function(_359,_35a){
return class_getClassMethod(_359,_35a)!=NULL;
};
class_copyMethodList=function(_35b){
return _35b.method_list.slice(0);
};
class_replaceMethod=function(_35c,_35d,_35e){
if(!_35c||!_35d){
return NULL;
}
var _35f=_35c.method_dtable[_35d],_360=NULL;
if(_35f){
_360=_35f.method_imp;
}
_35f.method_imp=_35e;
return _360;
};
var _361=function(_362){
var meta=(((_362.info&(_32f)))?_362:_362.isa);
if((_362.info&(_32f))){
_362=objj_getClass(_362.name);
}
if(_362.super_class&&!((((_362.super_class.info&(_32f)))?_362.super_class:_362.super_class.isa).info&(_330))){
_361(_362.super_class);
}
if(!(meta.info&(_330))&&!(meta.info&(_331))){
meta.info=(meta.info|(_331))&~(0);
objj_msgSend(_362,"initialize");
meta.info=(meta.info|(_330))&~(_331);
}
};
var _363=new objj_method("forward",function(self,_364){
return objj_msgSend(self,"forward::",_364,arguments);
});
class_getMethodImplementation=function(_365,_366){
if(!((((_365.info&(_32f)))?_365:_365.isa).info&(_330))){
_361(_365);
}
var _367=_365.method_dtable[_366];
if(!_367){
_367=_363;
}
var _368=_367.method_imp;
return _368;
};
var _369={};
objj_allocateClassPair=function(_36a,_36b){
var _36c=new objj_class(_36b),_36d=new objj_class(_36b),_36e=_36c;
if(_36a){
_36e=_36a;
while(_36e.superclass){
_36e=_36e.superclass;
}
_36c.allocator.prototype=new _36a.allocator;
_36c.method_store.prototype=new _36a.method_store;
_36c.method_dtable=_36c.method_store.prototype;
_36d.method_store.prototype=new _36a.isa.method_store;
_36d.method_dtable=_36d.method_store.prototype;
_36c.super_class=_36a;
_36d.super_class=_36a.isa;
}else{
_36c.allocator.prototype=new objj_object();
}
_36c.isa=_36d;
_36c.name=_36b;
_36c.info=_32e;
_36c._UID=objj_generateObjectUID();
_36d.isa=_36e.isa;
_36d.name=_36b;
_36d.info=_32f;
_36d._UID=objj_generateObjectUID();
return _36c;
};
var _2ea=nil;
objj_registerClassPair=function(_36f){
_1[_36f.name]=_36f;
_369[_36f.name]=_36f;
_1b9(_36f,_2ea);
};
class_createInstance=function(_370){
if(!_370){
throw new Error("*** Attempting to create object with Nil class.");
}
var _371=new _370.allocator();
_371.isa=_370;
_371._UID=objj_generateObjectUID();
return _371;
};
var _372=function(){
};
_372.prototype.member=false;
with(new _372()){
member=true;
}
if(new _372().member){
var _373=class_createInstance;
class_createInstance=function(_374){
var _375=_373(_374);
if(_375){
var _376=_375.isa,_377=_376;
while(_376){
var _378=_376.ivars;
count=_378.length;
while(count--){
_375[_378[count].name]=NULL;
}
_376=_376.super_class;
}
_375.isa=_377;
}
return _375;
};
}
object_getClassName=function(_379){
if(!_379){
return "";
}
var _37a=_379.isa;
return _37a?class_getName(_37a):"";
};
objj_lookUpClass=function(_37b){
var _37c=_369[_37b];
return _37c?_37c:Nil;
};
objj_getClass=function(_37d){
var _37e=_369[_37d];
if(!_37e){
}
return _37e?_37e:Nil;
};
objj_getMetaClass=function(_37f){
var _380=objj_getClass(_37f);
return (((_380.info&(_32f)))?_380:_380.isa);
};
ivar_getName=function(_381){
return _381.name;
};
ivar_getTypeEncoding=function(_382){
return _382.type;
};
objj_msgSend=function(_383,_384){
if(_383==nil){
return nil;
}
var isa=_383.isa;
if(!((((isa.info&(_32f)))?isa:isa.isa).info&(_330))){
_361(isa);
}
var _385=isa.method_dtable[_384];
if(!_385){
_385=_363;
}
var _386=_385.method_imp;
switch(arguments.length){
case 2:
return _386(_383,_384);
case 3:
return _386(_383,_384,arguments[2]);
case 4:
return _386(_383,_384,arguments[2],arguments[3]);
}
return _386.apply(_383,arguments);
};
objj_msgSendSuper=function(_387,_388){
var _389=_387.super_class;
arguments[0]=_387.receiver;
if(!((((_389.info&(_32f)))?_389:_389.isa).info&(_330))){
_361(_389);
}
var _38a=_389.method_dtable[_388];
if(!_38a){
_38a=_363;
}
var _38b=_38a.method_imp;
return _38b.apply(_387.receiver,arguments);
};
method_getName=function(_38c){
return _38c.name;
};
method_getImplementation=function(_38d){
return _38d.method_imp;
};
method_setImplementation=function(_38e,_38f){
var _390=_38e.method_imp;
_38e.method_imp=_38f;
return _390;
};
method_exchangeImplementations=function(lhs,rhs){
var _391=method_getImplementation(lhs),_392=method_getImplementation(rhs);
method_setImplementation(lhs,_392);
method_setImplementation(rhs,_391);
};
sel_getName=function(_393){
return _393?_393:"<null selector>";
};
sel_getUid=function(_394){
return _394;
};
sel_isEqual=function(lhs,rhs){
return lhs===rhs;
};
sel_registerName=function(_395){
return _395;
};
objj_eval=function(_396){
var url=_2.pageURL;
var _397=_2.asyncLoader;
_2.asyncLoader=NO;
var _398=_2.preprocess(_396,url,0);
if(!_398.hasLoadedFileDependencies()){
_398.loadFileDependencies();
}
_1._objj_eval_scope={};
_1._objj_eval_scope.objj_executeFile=_290.fileExecuterForURL(url);
_1._objj_eval_scope.objj_importFile=_290.fileImporterForURL(url);
var code="with(_objj_eval_scope){"+_398._code+"\n//*/\n}";
var _399;
_399=eval(code);
_2.asyncLoader=_397;
return _399;
};
_2.objj_eval=objj_eval;
_152();
var _39a=new CFURL(window.location.href),_39b=document.getElementsByTagName("base"),_39c=_39b.length;
if(_39c>0){
var _39d=_39b[_39c-1],_39e=_39d&&_39d.getAttribute("href");
if(_39e){
_39a=new CFURL(_39e,_39a);
}
}
var _39f=new CFURL(window.OBJJ_MAIN_FILE||"main.j"),_1b8=new CFURL(".",new CFURL(_39f,_39a)).absoluteURL(),_3a0=new CFURL("..",_1b8).absoluteURL();
if(_1b8===_3a0){
_3a0=new CFURL(_3a0.schemeAndAuthority());
}
_19f.resourceAtURL(_3a0,YES);
_2.pageURL=_39a;
_2.bootstrap=function(){
_3a1();
};
function _3a1(){
_19f.resolveResourceAtURL(_1b8,YES,function(_3a2){
var _3a3=_19f.includeURLs(),_95=0,_3a4=_3a3.length;
for(;_95<_3a4;++_95){
_3a2.resourceAtURL(_3a3[_95],YES);
}
_290.fileImporterForURL(_1b8)(_39f.lastPathComponent(),YES,function(){
_153();
_3aa(function(){
var _3a5=window.location.hash.substring(1),args=[];
if(_3a5.length){
args=_3a5.split("/");
for(var i=0,_3a4=args.length;i<_3a4;i++){
args[i]=decodeURIComponent(args[i]);
}
}
var _3a6=window.location.search.substring(1).split("&"),_3a7=new CFMutableDictionary();
for(var i=0,_3a4=_3a6.length;i<_3a4;i++){
var _3a8=_3a6[i].split("=");
if(!_3a8[0]){
continue;
}
if(_3a8[1]==null){
_3a8[1]=true;
}
_3a7.setValueForKey(decodeURIComponent(_3a8[0]),decodeURIComponent(_3a8[1]));
}
main(args,_3a7);
});
});
});
};
var _3a9=NO;
function _3aa(_3ab){
if(_3a9){
return _3ab();
}
if(window.addEventListener){
window.addEventListener("load",_3ab,NO);
}else{
if(window.attachEvent){
window.attachEvent("onload",_3ab);
}
}
};
_3aa(function(){
_3a9=YES;
});
if(typeof OBJJ_AUTO_BOOTSTRAP==="undefined"||OBJJ_AUTO_BOOTSTRAP){
_2.bootstrap();
}
function _1b2(aURL){
if(aURL instanceof CFURL&&aURL.scheme()){
return aURL;
}
return new CFURL(aURL,_1b8);
};
objj_importFile=_290.fileImporterForURL(_1b8);
objj_executeFile=_290.fileExecuterForURL(_1b8);
objj_import=function(){
CPLog.warn("objj_import is deprecated, use objj_importFile instead");
objj_importFile.apply(this,arguments);
};
})(window,ObjectiveJ);

Added Site/Site/Info.plist.





























>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CPApplicationDelegateClass</key>
	<string>AppController</string>
	<key>CPBundleName </key>
	<string>Site</string>
	<key>CPPrincipalClass</key>
	<string>CPApplication</string>
	<key>Main cib file base name</key>
	<string>MainMenu.cib</string>
</dict>
</plist>

Added Site/Site/Resources/MainMenu.cib.

cannot compute difference between binary files

Added Site/Site/Resources/MainMenu.xib.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
	<data>
		<int key="IBDocument.SystemTarget">1050</int>
		<string key="IBDocument.SystemVersion">10H574</string>
		<string key="IBDocument.InterfaceBuilderVersion">823</string>
		<string key="IBDocument.AppKitVersion">1038.35</string>
		<string key="IBDocument.HIToolboxVersion">461.00</string>
		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
			<string key="NS.object.0">823</string>
		</object>
		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<integer value="372"/>
			<integer value="626"/>
			<integer value="525"/>
			<integer value="616"/>
		</object>
		<object class="NSArray" key="IBDocument.PluginDependencies">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
		</object>
		<object class="NSMutableDictionary" key="IBDocument.Metadata">
			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
			<integer value="1" key="NS.object.0"/>
		</object>
		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<object class="NSCustomObject" id="1021">
				<string key="NSClassName">NSApplication</string>
			</object>
			<object class="NSCustomObject" id="1014">
				<string key="NSClassName">FirstResponder</string>
			</object>
			<object class="NSCustomObject" id="1050">
				<string key="NSClassName">NSApplication</string>
			</object>
			<object class="NSWindowTemplate" id="972006081">
				<int key="NSWindowStyleMask">7</int>
				<int key="NSWindowBacking">2</int>
				<string key="NSWindowRect">{{335, 148}, {518, 602}}</string>
				<int key="NSWTFlags">1946157056</int>
				<string key="NSWindowTitle">Window</string>
				<string key="NSWindowClass">NSWindow</string>
				<nil key="NSViewClass"/>
				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
				<object class="NSView" key="NSWindowView" id="439893737">
					<reference key="NSNextResponder"/>
					<int key="NSvFlags">301</int>
					<object class="NSMutableArray" key="NSSubviews">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSButton" id="964234138">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{212, 43}, {96, 32}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="129364535">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Logout</string>
								<object class="NSFont" key="NSSupport" id="669127366">
									<string key="NSName">LucidaGrande</string>
									<double key="NSSize">13</double>
									<int key="NSfFlags">1044</int>
								</object>
								<reference key="NSControlView" ref="964234138"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">130</int>
								<reference key="NSAlternateImage" ref="669127366"/>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSTextField" id="30190966">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{99, 558}, {326, 29}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="844030812">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">FIRENET CONTROL PANEL</string>
								<object class="NSFont" key="NSSupport">
									<string key="NSName">LucidaGrande</string>
									<double key="NSSize">24</double>
									<int key="NSfFlags">16</int>
								</object>
								<reference key="NSControlView" ref="30190966"/>
								<object class="NSColor" key="NSBackgroundColor" id="504115682">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">controlColor</string>
									<object class="NSColor" key="NSColor" id="147748642">
										<int key="NSColorSpace">3</int>
										<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
									</object>
								</object>
								<object class="NSColor" key="NSTextColor" id="299432829">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">controlTextColor</string>
									<object class="NSColor" key="NSColor" id="1049774807">
										<int key="NSColorSpace">3</int>
										<bytes key="NSWhite">MAA</bytes>
									</object>
								</object>
							</object>
						</object>
						<object class="NSButton" id="169487653">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{39, 488}, {96, 32}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="213325534">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Debug</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="169487653"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSButton" id="306096530">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{212, 488}, {96, 32}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="1046497321">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Console</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="306096530"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSButton" id="231678936">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{212, 43}, {96, 32}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="946293288">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Logout</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="231678936"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">130</int>
								<reference key="NSAlternateImage" ref="669127366"/>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSTextField" id="585395037">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{177, 410}, {185, 44}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="357330612">
								<int key="NSCellFlags">-1542324672</int>
								<int key="NSCellFlags2">138417152</int>
								<string key="NSContents"/>
								<object class="NSFont" key="NSSupport">
									<string key="NSName">LucidaGrande</string>
									<double key="NSSize">36</double>
									<int key="NSfFlags">16</int>
								</object>
								<reference key="NSControlView" ref="585395037"/>
								<object class="NSColor" key="NSBackgroundColor" id="326084724">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">textBackgroundColor</string>
									<object class="NSColor" key="NSColor" id="1005281447">
										<int key="NSColorSpace">3</int>
										<bytes key="NSWhite">MQA</bytes>
									</object>
								</object>
								<object class="NSColor" key="NSTextColor">
									<int key="NSColorSpace">1</int>
									<bytes key="NSRGB">MCAxIDAAA</bytes>
								</object>
							</object>
						</object>
						<object class="NSButton" id="347764102">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{379, 488}, {98, 32}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="708153174">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">RunShow</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="347764102"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
					</object>
					<string key="NSFrameSize">{518, 602}</string>
					<reference key="NSSuperview"/>
					<object class="CIAdditionCompositing" key="NSViewCompositeFilter">
						<bool key="CIEnabled">YES</bool>
					</object>
				</object>
				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
			</object>
			<object class="NSCustomObject" id="635946545">
				<string key="NSClassName">AppController</string>
			</object>
			<object class="NSWindowTemplate" id="419802387">
				<int key="NSWindowStyleMask">1</int>
				<int key="NSWindowBacking">2</int>
				<string key="NSWindowRect">{{196, 317}, {136, 193}}</string>
				<int key="NSWTFlags">544736256</int>
				<string key="NSWindowTitle">Login</string>
				<string key="NSWindowClass">NSWindow</string>
				<nil key="NSViewClass"/>
				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
				<object class="NSView" key="NSWindowView" id="278068625">
					<reference key="NSNextResponder"/>
					<int key="NSvFlags">256</int>
					<object class="NSMutableArray" key="NSSubviews">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSTextField" id="319733861">
							<reference key="NSNextResponder" ref="278068625"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{28, 156}, {79, 17}}</string>
							<reference key="NSSuperview" ref="278068625"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="863710363">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">138413056</int>
								<string key="NSContents">CHALLENGE</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="319733861"/>
								<reference key="NSBackgroundColor" ref="504115682"/>
								<reference key="NSTextColor" ref="299432829"/>
							</object>
						</object>
						<object class="NSTextField" id="664791593">
							<reference key="NSNextResponder" ref="278068625"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{20, 126}, {96, 22}}</string>
							<reference key="NSSuperview" ref="278068625"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="42538560">
								<int key="NSCellFlags">-2075001280</int>
								<int key="NSCellFlags2">138413056</int>
								<string key="NSContents">chal</string>
								<reference key="NSSupport" ref="669127366"/>
								<string key="NSPlaceholderString">0000</string>
								<reference key="NSControlView" ref="664791593"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="326084724"/>
								<object class="NSColor" key="NSTextColor" id="590090252">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">textColor</string>
									<reference key="NSColor" ref="1049774807"/>
								</object>
							</object>
						</object>
						<object class="NSTextField" id="666823919">
							<reference key="NSNextResponder" ref="278068625"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{20, 71}, {96, 22}}</string>
							<reference key="NSSuperview" ref="278068625"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="199284080">
								<int key="NSCellFlags">-1804468672</int>
								<int key="NSCellFlags2">138413056</int>
								<string key="NSContents"/>
								<reference key="NSSupport" ref="669127366"/>
								<string key="NSPlaceholderString">0000</string>
								<reference key="NSControlView" ref="666823919"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="326084724"/>
								<reference key="NSTextColor" ref="590090252"/>
							</object>
						</object>
						<object class="NSTextField" id="858055910">
							<reference key="NSNextResponder" ref="278068625"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{34, 101}, {68, 17}}</string>
							<reference key="NSSuperview" ref="278068625"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="451724564">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">RESPONSE</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="858055910"/>
								<reference key="NSBackgroundColor" ref="504115682"/>
								<reference key="NSTextColor" ref="299432829"/>
							</object>
						</object>
						<object class="NSButton" id="198045570">
							<reference key="NSNextResponder" ref="278068625"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{36, 19}, {64, 27}}</string>
							<reference key="NSSuperview" ref="278068625"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="1037848479">
								<int key="NSCellFlags">-2080244224</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Login</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="198045570"/>
								<int key="NSButtonFlags">-2033434369</int>
								<int key="NSButtonFlags2">66</int>
								<string key="NSAlternateContents">Login</string>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">400</int>
								<int key="NSPeriodicInterval">75</int>
							</object>
						</object>
					</object>
					<string key="NSFrameSize">{136, 193}</string>
					<reference key="NSSuperview"/>
				</object>
				<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
			</object>
			<object class="NSWindowTemplate" id="921009746">
				<int key="NSWindowStyleMask">1</int>
				<int key="NSWindowBacking">2</int>
				<string key="NSWindowRect">{{350, 157}, {514, 533}}</string>
				<int key="NSWTFlags">611844096</int>
				<string key="NSWindowTitle">Debug</string>
				<string key="NSWindowClass">NSWindow</string>
				<nil key="NSViewClass"/>
				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
				<object class="NSView" key="NSWindowView" id="294386347">
					<nil key="NSNextResponder"/>
					<int key="NSvFlags">256</int>
					<object class="NSMutableArray" key="NSSubviews">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSTextField" id="700514039">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{177, 491}, {162, 22}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="609905672">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">FIRENET DEBUG</string>
								<object class="NSFont" key="NSSupport">
									<string key="NSName">LucidaGrande</string>
									<double key="NSSize">18</double>
									<int key="NSfFlags">16</int>
								</object>
								<reference key="NSControlView" ref="700514039"/>
								<reference key="NSBackgroundColor" ref="504115682"/>
								<reference key="NSTextColor" ref="299432829"/>
							</object>
						</object>
						<object class="NSTextField" id="871780284">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{110, 442}, {243, 22}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="356818024">
								<int key="NSCellFlags">-1804468671</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents"/>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="871780284"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="326084724"/>
								<reference key="NSTextColor" ref="590090252"/>
							</object>
						</object>
						<object class="NSTextField" id="643421344">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{67, 444}, {38, 17}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="309017586">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">CMD</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="643421344"/>
								<reference key="NSBackgroundColor" ref="504115682"/>
								<reference key="NSTextColor" ref="299432829"/>
							</object>
						</object>
						<object class="NSButton" id="449039323">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{208, 394}, {96, 32}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="599931772">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Send</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="449039323"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSTextField" id="150680607">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{97, 91}, {317, 265}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="238351070">
								<int key="NSCellFlags">-1805517311</int>
								<int key="NSCellFlags2">272629760</int>
								<string key="NSContents"/>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="150680607"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="326084724"/>
								<reference key="NSTextColor" ref="590090252"/>
							</object>
						</object>
						<object class="NSTextField" id="993171913">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{223, 364}, {65, 17}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="748459516">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">Response</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="993171913"/>
								<reference key="NSBackgroundColor" ref="504115682"/>
								<reference key="NSTextColor" ref="299432829"/>
							</object>
						</object>
						<object class="NSButton" id="209359286">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{393, 20}, {96, 32}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="676688807">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Done</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="209359286"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSButton" id="823239471">
							<reference key="NSNextResponder" ref="294386347"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{131, 403}, {63, 18}}</string>
							<reference key="NSSuperview" ref="294386347"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="890523279">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">0</int>
								<string key="NSContents">Post</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="823239471"/>
								<int key="NSButtonFlags">1211912703</int>
								<int key="NSButtonFlags2">2</int>
								<object class="NSCustomResource" key="NSNormalImage">
									<string key="NSClassName">NSImage</string>
									<string key="NSResourceName">NSSwitch</string>
								</object>
								<object class="NSButtonImageSource" key="NSAlternateImage">
									<string key="NSImageName">NSSwitch</string>
								</object>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
					</object>
					<string key="NSFrameSize">{514, 533}</string>
				</object>
				<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
			</object>
			<object class="NSWindowTemplate" id="350053890">
				<int key="NSWindowStyleMask">1</int>
				<int key="NSWindowBacking">2</int>
				<string key="NSWindowRect">{{351, 151}, {676, 539}}</string>
				<int key="NSWTFlags">611844096</int>
				<string key="NSWindowTitle">Console</string>
				<string key="NSWindowClass">NSWindow</string>
				<nil key="NSViewClass"/>
				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
				<string key="NSWindowContentMinSize">{520, 539}</string>
				<object class="NSView" key="NSWindowView" id="678553273">
					<reference key="NSNextResponder"/>
					<int key="NSvFlags">256</int>
					<object class="NSMutableArray" key="NSSubviews">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSButton" id="689819212">
							<reference key="NSNextResponder" ref="678553273"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{410, 12}, {96, 32}}</string>
							<reference key="NSSuperview" ref="678553273"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="195947403">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Done</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="689819212"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSScrollView" id="649276863">
							<reference key="NSNextResponder" ref="678553273"/>
							<int key="NSvFlags">301</int>
							<object class="NSMutableArray" key="NSSubviews">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSClipView" id="411900884">
									<reference key="NSNextResponder" ref="649276863"/>
									<int key="NSvFlags">2304</int>
									<object class="NSMutableArray" key="NSSubviews">
										<bool key="EncodedWithXMLCoder">YES</bool>
										<object class="NSCustomView" id="956596271">
											<reference key="NSNextResponder" ref="411900884"/>
											<int key="NSvFlags">274</int>
											<object class="NSMutableArray" key="NSSubviews">
												<bool key="EncodedWithXMLCoder">YES</bool>
												<object class="NSScrollView" id="818886645">
													<reference key="NSNextResponder" ref="956596271"/>
													<int key="NSvFlags">268</int>
													<object class="NSMutableArray" key="NSSubviews">
														<bool key="EncodedWithXMLCoder">YES</bool>
														<object class="NSClipView" id="363772501">
															<reference key="NSNextResponder" ref="818886645"/>
															<int key="NSvFlags">2304</int>
															<object class="NSMutableArray" key="NSSubviews">
																<bool key="EncodedWithXMLCoder">YES</bool>
																<object class="NSTableView" id="92569271">
																	<reference key="NSNextResponder" ref="363772501"/>
																	<int key="NSvFlags">256</int>
																	<string key="NSFrameSize">{535, 360}</string>
																	<reference key="NSSuperview" ref="363772501"/>
																	<bool key="NSEnabled">YES</bool>
																	<object class="NSTableHeaderView" key="NSHeaderView" id="337572320">
																		<reference key="NSNextResponder" ref="981548123"/>
																		<int key="NSvFlags">256</int>
																		<string key="NSFrameSize">{535, 17}</string>
																		<reference key="NSSuperview" ref="981548123"/>
																		<reference key="NSTableView" ref="92569271"/>
																	</object>
																	<object class="_NSCornerView" key="NSCornerView" id="848095358">
																		<reference key="NSNextResponder" ref="818886645"/>
																		<int key="NSvFlags">-2147483392</int>
																		<string key="NSFrame">{{379, 0}, {16, 17}}</string>
																		<reference key="NSSuperview" ref="818886645"/>
																	</object>
																	<object class="NSMutableArray" key="NSTableColumns">
																		<bool key="EncodedWithXMLCoder">YES</bool>
																		<object class="NSTableColumn" id="353303362">
																			<double key="NSWidth">64</double>
																			<double key="NSMinWidth">40</double>
																			<double key="NSMaxWidth">1000</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Node</string>
																				<object class="NSFont" key="NSSupport" id="26">
																					<string key="NSName">LucidaGrande</string>
																					<double key="NSSize">11</double>
																					<int key="NSfFlags">3100</int>
																				</object>
																				<object class="NSColor" key="NSBackgroundColor" id="129058387">
																					<int key="NSColorSpace">3</int>
																					<bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes>
																				</object>
																				<object class="NSColor" key="NSTextColor" id="403302131">
																					<int key="NSColorSpace">6</int>
																					<string key="NSCatalogName">System</string>
																					<string key="NSColorName">headerTextColor</string>
																					<reference key="NSColor" ref="1049774807"/>
																				</object>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="775331511">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<object class="NSColor" key="NSBackgroundColor" id="905628868">
																					<int key="NSColorSpace">6</int>
																					<string key="NSCatalogName">System</string>
																					<string key="NSColorName">controlBackgroundColor</string>
																					<reference key="NSColor" ref="147748642"/>
																				</object>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="562114356">
																			<double key="NSWidth">64</double>
																			<double key="NSMinWidth">40</double>
																			<double key="NSMaxWidth">1000</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Armed</string>
																				<reference key="NSSupport" ref="26"/>
																				<reference key="NSBackgroundColor" ref="129058387"/>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="222267018">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="943312951">
																			<double key="NSWidth">64</double>
																			<double key="NSMinWidth">10</double>
																			<double key="NSMaxWidth">3.4028234663852886e+38</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Ch 1</string>
																				<reference key="NSSupport" ref="26"/>
																				<object class="NSColor" key="NSBackgroundColor" id="807698255">
																					<int key="NSColorSpace">6</int>
																					<string key="NSCatalogName">System</string>
																					<string key="NSColorName">headerColor</string>
																					<reference key="NSColor" ref="1005281447"/>
																				</object>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="559021409">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="1063581806">
																			<double key="NSWidth">64</double>
																			<double key="NSMinWidth">10</double>
																			<double key="NSMaxWidth">3.4028234663852886e+38</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Ch 2</string>
																				<reference key="NSSupport" ref="26"/>
																				<reference key="NSBackgroundColor" ref="807698255"/>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="520474333">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="958847737">
																			<double key="NSWidth">64</double>
																			<double key="NSMinWidth">10</double>
																			<double key="NSMaxWidth">3.4028234663852886e+38</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Ch 3</string>
																				<reference key="NSSupport" ref="26"/>
																				<reference key="NSBackgroundColor" ref="807698255"/>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="586038519">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="126055648">
																			<double key="NSWidth">64</double>
																			<double key="NSMinWidth">10</double>
																			<double key="NSMaxWidth">3.4028234663852886e+38</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Ch 4</string>
																				<reference key="NSSupport" ref="26"/>
																				<reference key="NSBackgroundColor" ref="807698255"/>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="466825710">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="884109957">
																			<double key="NSWidth">68</double>
																			<double key="NSMinWidth">10</double>
																			<double key="NSMaxWidth">3.4028234663852886e+38</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">134219776</int>
																				<string key="NSContents">Ch 5</string>
																				<reference key="NSSupport" ref="26"/>
																				<reference key="NSBackgroundColor" ref="807698255"/>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="613042604">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																		<object class="NSTableColumn" id="676168961">
																			<double key="NSWidth">59</double>
																			<double key="NSMinWidth">10</double>
																			<double key="NSMaxWidth">3.4028234663852886e+38</double>
																			<object class="NSTableHeaderCell" key="NSHeaderCell">
																				<int key="NSCellFlags">75628096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Ch 6</string>
																				<reference key="NSSupport" ref="26"/>
																				<reference key="NSBackgroundColor" ref="807698255"/>
																				<reference key="NSTextColor" ref="403302131"/>
																			</object>
																			<object class="NSTextFieldCell" key="NSDataCell" id="733786161">
																				<int key="NSCellFlags">337772096</int>
																				<int key="NSCellFlags2">2048</int>
																				<string key="NSContents">Text Cell</string>
																				<reference key="NSSupport" ref="669127366"/>
																				<reference key="NSControlView" ref="92569271"/>
																				<reference key="NSBackgroundColor" ref="905628868"/>
																				<reference key="NSTextColor" ref="299432829"/>
																			</object>
																			<int key="NSResizingMask">3</int>
																			<bool key="NSIsResizeable">YES</bool>
																			<bool key="NSIsEditable">YES</bool>
																			<reference key="NSTableView" ref="92569271"/>
																		</object>
																	</object>
																	<double key="NSIntercellSpacingWidth">3</double>
																	<double key="NSIntercellSpacingHeight">2</double>
																	<reference key="NSBackgroundColor" ref="1005281447"/>
																	<object class="NSColor" key="NSGridColor">
																		<int key="NSColorSpace">6</int>
																		<string key="NSCatalogName">System</string>
																		<string key="NSColorName">gridColor</string>
																		<object class="NSColor" key="NSColor">
																			<int key="NSColorSpace">3</int>
																			<bytes key="NSWhite">MC41AA</bytes>
																		</object>
																	</object>
																	<double key="NSRowHeight">17</double>
																	<int key="NSTvFlags">373293056</int>
																	<reference key="NSDelegate"/>
																	<reference key="NSDataSource"/>
																	<int key="NSColumnAutoresizingStyle">4</int>
																	<int key="NSDraggingSourceMaskForLocal">15</int>
																	<int key="NSDraggingSourceMaskForNonLocal">0</int>
																	<bool key="NSAllowsTypeSelect">YES</bool>
																	<int key="NSTableViewDraggingDestinationStyle">0</int>
																</object>
															</object>
															<string key="NSFrame">{{1, 17}, {535, 360}}</string>
															<reference key="NSSuperview" ref="818886645"/>
															<reference key="NSNextKeyView" ref="92569271"/>
															<reference key="NSDocView" ref="92569271"/>
															<reference key="NSBGColor" ref="905628868"/>
															<int key="NScvFlags">4</int>
														</object>
														<object class="NSScroller" id="374643978">
															<reference key="NSNextResponder" ref="818886645"/>
															<int key="NSvFlags">-2147483392</int>
															<string key="NSFrame">{{379, 17}, {15, 365}}</string>
															<reference key="NSSuperview" ref="818886645"/>
															<reference key="NSTarget" ref="818886645"/>
															<string key="NSAction">_doScroller:</string>
															<double key="NSPercent">0.96052631578947367</double>
														</object>
														<object class="NSScroller" id="999089568">
															<reference key="NSNextResponder" ref="818886645"/>
															<int key="NSvFlags">-2147483392</int>
															<string key="NSFrame">{{1, 382}, {470, 15}}</string>
															<reference key="NSSuperview" ref="818886645"/>
															<int key="NSsFlags">1</int>
															<reference key="NSTarget" ref="818886645"/>
															<string key="NSAction">_doScroller:</string>
															<double key="NSPercent">0.99607072691552068</double>
														</object>
														<object class="NSClipView" id="981548123">
															<reference key="NSNextResponder" ref="818886645"/>
															<int key="NSvFlags">2304</int>
															<object class="NSMutableArray" key="NSSubviews">
																<bool key="EncodedWithXMLCoder">YES</bool>
																<reference ref="337572320"/>
															</object>
															<string key="NSFrame">{{1, 0}, {535, 17}}</string>
															<reference key="NSSuperview" ref="818886645"/>
															<reference key="NSNextKeyView" ref="337572320"/>
															<reference key="NSDocView" ref="337572320"/>
															<reference key="NSBGColor" ref="905628868"/>
															<int key="NScvFlags">4</int>
														</object>
														<reference ref="848095358"/>
													</object>
													<string key="NSFrame">{{0, 20}, {537, 378}}</string>
													<reference key="NSSuperview" ref="956596271"/>
													<reference key="NSNextKeyView" ref="363772501"/>
													<int key="NSsFlags">562</int>
													<reference key="NSVScroller" ref="374643978"/>
													<reference key="NSHScroller" ref="999089568"/>
													<reference key="NSContentView" ref="363772501"/>
													<reference key="NSHeaderClipView" ref="981548123"/>
													<reference key="NSCornerView" ref="848095358"/>
													<bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes>
												</object>
											</object>
											<string key="NSFrameSize">{557, 401}</string>
											<reference key="NSSuperview" ref="411900884"/>
											<string key="NSClassName">NSView</string>
										</object>
									</object>
									<string key="NSFrame">{{1, 1}, {557, 401}}</string>
									<reference key="NSSuperview" ref="649276863"/>
									<reference key="NSNextKeyView" ref="956596271"/>
									<reference key="NSDocView" ref="956596271"/>
									<reference key="NSBGColor" ref="504115682"/>
									<int key="NScvFlags">4</int>
								</object>
								<object class="NSScroller" id="222546445">
									<reference key="NSNextResponder" ref="649276863"/>
									<int key="NSvFlags">256</int>
									<string key="NSFrame">{{558, 1}, {15, 401}}</string>
									<reference key="NSSuperview" ref="649276863"/>
									<reference key="NSTarget" ref="649276863"/>
									<string key="NSAction">_doScroller:</string>
									<double key="NSCurValue">1</double>
									<double key="NSPercent">0.96363627910614014</double>
								</object>
								<object class="NSScroller" id="756872011">
									<reference key="NSNextResponder" ref="649276863"/>
									<int key="NSvFlags">256</int>
									<string key="NSFrame">{{1, 402}, {557, 15}}</string>
									<reference key="NSSuperview" ref="649276863"/>
									<int key="NSsFlags">1</int>
									<reference key="NSTarget" ref="649276863"/>
									<string key="NSAction">_doScroller:</string>
									<double key="NSPercent">0.50602412223815918</double>
								</object>
							</object>
							<string key="NSFrame">{{61, 69}, {574, 418}}</string>
							<reference key="NSSuperview" ref="678553273"/>
							<reference key="NSNextKeyView" ref="411900884"/>
							<int key="NSsFlags">50</int>
							<reference key="NSVScroller" ref="222546445"/>
							<reference key="NSHScroller" ref="756872011"/>
							<reference key="NSContentView" ref="411900884"/>
						</object>
					</object>
					<string key="NSFrameSize">{676, 539}</string>
					<reference key="NSSuperview"/>
				</object>
				<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
				<string key="NSMinSize">{520, 561}</string>
				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
			</object>
			<object class="NSWindowTemplate" id="350081707">
				<int key="NSWindowStyleMask">1</int>
				<int key="NSWindowBacking">2</int>
				<string key="NSWindowRect">{{382, 82}, {489, 587}}</string>
				<int key="NSWTFlags">611844096</int>
				<string key="NSWindowTitle">Run</string>
				<string key="NSWindowClass">NSWindow</string>
				<nil key="NSViewClass"/>
				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
				<object class="NSView" key="NSWindowView" id="508992537">
					<reference key="NSNextResponder"/>
					<int key="NSvFlags">256</int>
					<object class="NSMutableArray" key="NSSubviews">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSButton" id="464916642">
							<reference key="NSNextResponder" ref="508992537"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{379, 12}, {96, 32}}</string>
							<reference key="NSSuperview" ref="508992537"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="523637575">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Done</string>
								<reference key="NSSupport" ref="669127366"/>
								<reference key="NSControlView" ref="464916642"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
					</object>
					<string key="NSFrameSize">{489, 587}</string>
					<reference key="NSSuperview"/>
				</object>
				<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
			</object>
		</object>
		<object class="IBObjectContainer" key="IBDocument.Objects">
			<object class="NSMutableArray" key="connectionRecords">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">delegate</string>
						<reference key="source" ref="1021"/>
						<reference key="destination" ref="635946545"/>
					</object>
					<int key="connectionID">451</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">theWindow</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="972006081"/>
					</object>
					<int key="connectionID">459</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">loginWindow</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="419802387"/>
					</object>
					<int key="connectionID">536</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">loginChal</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="664791593"/>
					</object>
					<int key="connectionID">537</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">loginResp</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="666823919"/>
					</object>
					<int key="connectionID">539</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">mainbLogout</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="231678936"/>
					</object>
					<int key="connectionID">589</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">logoutButton:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="231678936"/>
					</object>
					<int key="connectionID">594</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">loginSend:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="198045570"/>
					</object>
					<int key="connectionID">596</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">debugWindow</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="921009746"/>
					</object>
					<int key="connectionID">597</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">debugShow:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="169487653"/>
					</object>
					<int key="connectionID">598</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">mainbDebug</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="169487653"/>
					</object>
					<int key="connectionID">599</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">mainbConsole</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="306096530"/>
					</object>
					<int key="connectionID">600</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">debugSend:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="449039323"/>
					</object>
					<int key="connectionID">602</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">debugDone:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="209359286"/>
					</object>
					<int key="connectionID">603</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">debugCmd</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="871780284"/>
					</object>
					<int key="connectionID">604</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">debugOutput</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="150680607"/>
					</object>
					<int key="connectionID">605</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">debugckPost</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="823239471"/>
					</object>
					<int key="connectionID">608</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">loginReady</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="585395037"/>
					</object>
					<int key="connectionID">614</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">consoleShow:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="306096530"/>
					</object>
					<int key="connectionID">619</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">consoleDone:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="689819212"/>
					</object>
					<int key="connectionID">620</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">consoleWindow</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="350053890"/>
					</object>
					<int key="connectionID">621</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">runWindow</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="350081707"/>
					</object>
					<int key="connectionID">630</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">mainbRun</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="347764102"/>
					</object>
					<int key="connectionID">631</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">runShow:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="347764102"/>
					</object>
					<int key="connectionID">632</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">runDone:</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="464916642"/>
					</object>
					<int key="connectionID">633</int>
				</object>
			</object>
			<object class="IBMutableOrderedSet" key="objectRecords">
				<object class="NSArray" key="orderedObjects">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<object class="IBObjectRecord">
						<int key="objectID">0</int>
						<object class="NSArray" key="object" id="1049">
							<bool key="EncodedWithXMLCoder">YES</bool>
						</object>
						<reference key="children" ref="1048"/>
						<nil key="parent"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">-2</int>
						<reference key="object" ref="1021"/>
						<reference key="parent" ref="1049"/>
						<string key="objectName">File's Owner</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">-1</int>
						<reference key="object" ref="1014"/>
						<reference key="parent" ref="1049"/>
						<string key="objectName">First Responder</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">-3</int>
						<reference key="object" ref="1050"/>
						<reference key="parent" ref="1049"/>
						<string key="objectName">Application</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">371</int>
						<reference key="object" ref="972006081"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="439893737"/>
						</object>
						<reference key="parent" ref="1049"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">372</int>
						<reference key="object" ref="439893737"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="306096530"/>
							<reference ref="964234138"/>
							<reference ref="231678936"/>
							<reference ref="169487653"/>
							<reference ref="30190966"/>
							<reference ref="585395037"/>
							<reference ref="347764102"/>
						</object>
						<reference key="parent" ref="972006081"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">450</int>
						<reference key="object" ref="635946545"/>
						<reference key="parent" ref="1049"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">524</int>
						<reference key="object" ref="419802387"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="278068625"/>
						</object>
						<reference key="parent" ref="1049"/>
						<string key="objectName">Login(Window)</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">525</int>
						<reference key="object" ref="278068625"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="666823919"/>
							<reference ref="858055910"/>
							<reference ref="664791593"/>
							<reference ref="319733861"/>
							<reference ref="198045570"/>
						</object>
						<reference key="parent" ref="419802387"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">526</int>
						<reference key="object" ref="198045570"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="1037848479"/>
						</object>
						<reference key="parent" ref="278068625"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">527</int>
						<reference key="object" ref="666823919"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="199284080"/>
						</object>
						<reference key="parent" ref="278068625"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">528</int>
						<reference key="object" ref="858055910"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="451724564"/>
						</object>
						<reference key="parent" ref="278068625"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">529</int>
						<reference key="object" ref="664791593"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="42538560"/>
						</object>
						<reference key="parent" ref="278068625"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">530</int>
						<reference key="object" ref="319733861"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="863710363"/>
						</object>
						<reference key="parent" ref="278068625"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">531</int>
						<reference key="object" ref="863710363"/>
						<reference key="parent" ref="319733861"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">532</int>
						<reference key="object" ref="42538560"/>
						<reference key="parent" ref="664791593"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">533</int>
						<reference key="object" ref="451724564"/>
						<reference key="parent" ref="858055910"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">534</int>
						<reference key="object" ref="199284080"/>
						<reference key="parent" ref="666823919"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">535</int>
						<reference key="object" ref="1037848479"/>
						<reference key="parent" ref="198045570"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">541</int>
						<reference key="object" ref="964234138"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="129364535"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">542</int>
						<reference key="object" ref="129364535"/>
						<reference key="parent" ref="964234138"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">559</int>
						<reference key="object" ref="30190966"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="844030812"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">560</int>
						<reference key="object" ref="844030812"/>
						<reference key="parent" ref="30190966"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">563</int>
						<reference key="object" ref="921009746"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="294386347"/>
						</object>
						<reference key="parent" ref="1049"/>
						<string key="objectName">Debug(Window)</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">564</int>
						<reference key="object" ref="294386347"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="700514039"/>
							<reference ref="871780284"/>
							<reference ref="643421344"/>
							<reference ref="449039323"/>
							<reference ref="150680607"/>
							<reference ref="993171913"/>
							<reference ref="209359286"/>
							<reference ref="823239471"/>
						</object>
						<reference key="parent" ref="921009746"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">565</int>
						<reference key="object" ref="700514039"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="609905672"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">566</int>
						<reference key="object" ref="609905672"/>
						<reference key="parent" ref="700514039"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">567</int>
						<reference key="object" ref="871780284"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="356818024"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">568</int>
						<reference key="object" ref="356818024"/>
						<reference key="parent" ref="871780284"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">569</int>
						<reference key="object" ref="643421344"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="309017586"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">570</int>
						<reference key="object" ref="309017586"/>
						<reference key="parent" ref="643421344"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">571</int>
						<reference key="object" ref="449039323"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="599931772"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">572</int>
						<reference key="object" ref="599931772"/>
						<reference key="parent" ref="449039323"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">573</int>
						<reference key="object" ref="150680607"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="238351070"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">574</int>
						<reference key="object" ref="238351070"/>
						<reference key="parent" ref="150680607"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">575</int>
						<reference key="object" ref="993171913"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="748459516"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">576</int>
						<reference key="object" ref="748459516"/>
						<reference key="parent" ref="993171913"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">577</int>
						<reference key="object" ref="209359286"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="676688807"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">578</int>
						<reference key="object" ref="676688807"/>
						<reference key="parent" ref="209359286"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">579</int>
						<reference key="object" ref="169487653"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="213325534"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">580</int>
						<reference key="object" ref="213325534"/>
						<reference key="parent" ref="169487653"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">581</int>
						<reference key="object" ref="306096530"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="1046497321"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">582</int>
						<reference key="object" ref="1046497321"/>
						<reference key="parent" ref="306096530"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">585</int>
						<reference key="object" ref="231678936"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="946293288"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">586</int>
						<reference key="object" ref="946293288"/>
						<reference key="parent" ref="231678936"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">606</int>
						<reference key="object" ref="823239471"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="890523279"/>
						</object>
						<reference key="parent" ref="294386347"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">607</int>
						<reference key="object" ref="890523279"/>
						<reference key="parent" ref="823239471"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">611</int>
						<reference key="object" ref="585395037"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="357330612"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">612</int>
						<reference key="object" ref="357330612"/>
						<reference key="parent" ref="585395037"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">615</int>
						<reference key="object" ref="350053890"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="678553273"/>
						</object>
						<reference key="parent" ref="1049"/>
						<string key="objectName">Console (Window)</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">616</int>
						<reference key="object" ref="678553273"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="689819212"/>
							<reference ref="649276863"/>
						</object>
						<reference key="parent" ref="350053890"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">617</int>
						<reference key="object" ref="689819212"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="195947403"/>
						</object>
						<reference key="parent" ref="678553273"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">618</int>
						<reference key="object" ref="195947403"/>
						<reference key="parent" ref="689819212"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">623</int>
						<reference key="object" ref="347764102"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="708153174"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">624</int>
						<reference key="object" ref="708153174"/>
						<reference key="parent" ref="347764102"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">626</int>
						<reference key="object" ref="350081707"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="508992537"/>
						</object>
						<reference key="parent" ref="1049"/>
						<string key="objectName">Run  (Window)</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">627</int>
						<reference key="object" ref="508992537"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="464916642"/>
						</object>
						<reference key="parent" ref="350081707"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">628</int>
						<reference key="object" ref="464916642"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="523637575"/>
						</object>
						<reference key="parent" ref="508992537"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">629</int>
						<reference key="object" ref="523637575"/>
						<reference key="parent" ref="464916642"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">644</int>
						<reference key="object" ref="649276863"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="222546445"/>
							<reference ref="756872011"/>
							<reference ref="956596271"/>
						</object>
						<reference key="parent" ref="678553273"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">645</int>
						<reference key="object" ref="222546445"/>
						<reference key="parent" ref="649276863"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">646</int>
						<reference key="object" ref="756872011"/>
						<reference key="parent" ref="649276863"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">647</int>
						<reference key="object" ref="956596271"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="818886645"/>
						</object>
						<reference key="parent" ref="649276863"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">648</int>
						<reference key="object" ref="818886645"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="374643978"/>
							<reference ref="999089568"/>
							<reference ref="92569271"/>
							<reference ref="337572320"/>
						</object>
						<reference key="parent" ref="956596271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">649</int>
						<reference key="object" ref="374643978"/>
						<reference key="parent" ref="818886645"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">650</int>
						<reference key="object" ref="999089568"/>
						<reference key="parent" ref="818886645"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">651</int>
						<reference key="object" ref="92569271"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="353303362"/>
							<reference ref="562114356"/>
							<reference ref="943312951"/>
							<reference ref="1063581806"/>
							<reference ref="958847737"/>
							<reference ref="126055648"/>
							<reference ref="884109957"/>
							<reference ref="676168961"/>
						</object>
						<reference key="parent" ref="818886645"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">652</int>
						<reference key="object" ref="337572320"/>
						<reference key="parent" ref="818886645"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">653</int>
						<reference key="object" ref="353303362"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="775331511"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">654</int>
						<reference key="object" ref="562114356"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="222267018"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">655</int>
						<reference key="object" ref="222267018"/>
						<reference key="parent" ref="562114356"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">656</int>
						<reference key="object" ref="775331511"/>
						<reference key="parent" ref="353303362"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">657</int>
						<reference key="object" ref="943312951"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="559021409"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">658</int>
						<reference key="object" ref="559021409"/>
						<reference key="parent" ref="943312951"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">659</int>
						<reference key="object" ref="1063581806"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="520474333"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">660</int>
						<reference key="object" ref="520474333"/>
						<reference key="parent" ref="1063581806"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">661</int>
						<reference key="object" ref="958847737"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="586038519"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">662</int>
						<reference key="object" ref="586038519"/>
						<reference key="parent" ref="958847737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">663</int>
						<reference key="object" ref="126055648"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="466825710"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">664</int>
						<reference key="object" ref="466825710"/>
						<reference key="parent" ref="126055648"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">665</int>
						<reference key="object" ref="884109957"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="613042604"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">666</int>
						<reference key="object" ref="613042604"/>
						<reference key="parent" ref="884109957"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">667</int>
						<reference key="object" ref="676168961"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="733786161"/>
						</object>
						<reference key="parent" ref="92569271"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">668</int>
						<reference key="object" ref="733786161"/>
						<reference key="parent" ref="676168961"/>
					</object>
				</object>
			</object>
			<object class="NSMutableDictionary" key="flattenedProperties">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<object class="NSArray" key="dict.sortedKeys">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<string>-3.IBPluginDependency</string>
					<string>371.IBEditorWindowLastContentRect</string>
					<string>371.IBPluginDependency</string>
					<string>371.IBWindowTemplateEditedContentRect</string>
					<string>371.NSWindowTemplate.visibleAtLaunch</string>
					<string>371.editorWindowContentRectSynchronizationRect</string>
					<string>371.windowTemplate.maxSize</string>
					<string>372.IBPluginDependency</string>
					<string>524.IBEditorWindowLastContentRect</string>
					<string>524.IBPluginDependency</string>
					<string>524.IBWindowTemplateEditedContentRect</string>
					<string>524.NSWindowTemplate.visibleAtLaunch</string>
					<string>524.WindowOrigin</string>
					<string>524.editorWindowContentRectSynchronizationRect</string>
					<string>525.IBPluginDependency</string>
					<string>526.IBPluginDependency</string>
					<string>526.IBViewBoundsToFrameTransform</string>
					<string>527.IBPluginDependency</string>
					<string>527.IBViewBoundsToFrameTransform</string>
					<string>528.IBPluginDependency</string>
					<string>528.IBViewBoundsToFrameTransform</string>
					<string>529.IBPluginDependency</string>
					<string>529.IBViewBoundsToFrameTransform</string>
					<string>530.IBPluginDependency</string>
					<string>530.IBViewBoundsToFrameTransform</string>
					<string>531.IBPluginDependency</string>
					<string>532.IBPluginDependency</string>
					<string>533.IBPluginDependency</string>
					<string>534.IBPluginDependency</string>
					<string>535.IBPluginDependency</string>
					<string>541.IBPluginDependency</string>
					<string>541.IBViewBoundsToFrameTransform</string>
					<string>542.IBPluginDependency</string>
					<string>559.IBPluginDependency</string>
					<string>559.IBViewBoundsToFrameTransform</string>
					<string>560.IBPluginDependency</string>
					<string>563.IBEditorWindowLastContentRect</string>
					<string>563.IBPluginDependency</string>
					<string>563.IBWindowTemplateEditedContentRect</string>
					<string>563.NSWindowTemplate.visibleAtLaunch</string>
					<string>564.IBPluginDependency</string>
					<string>565.IBPluginDependency</string>
					<string>565.IBViewBoundsToFrameTransform</string>
					<string>566.IBPluginDependency</string>
					<string>567.IBPluginDependency</string>
					<string>568.IBPluginDependency</string>
					<string>569.IBPluginDependency</string>
					<string>569.IBViewBoundsToFrameTransform</string>
					<string>570.IBPluginDependency</string>
					<string>571.IBPluginDependency</string>
					<string>571.IBViewBoundsToFrameTransform</string>
					<string>572.IBPluginDependency</string>
					<string>573.IBPluginDependency</string>
					<string>573.IBViewBoundsToFrameTransform</string>
					<string>574.IBPluginDependency</string>
					<string>575.IBPluginDependency</string>
					<string>575.IBViewBoundsToFrameTransform</string>
					<string>576.IBPluginDependency</string>
					<string>577.IBPluginDependency</string>
					<string>578.IBPluginDependency</string>
					<string>579.IBPluginDependency</string>
					<string>579.IBViewBoundsToFrameTransform</string>
					<string>580.IBPluginDependency</string>
					<string>581.IBPluginDependency</string>
					<string>581.IBViewBoundsToFrameTransform</string>
					<string>582.IBPluginDependency</string>
					<string>585.IBPluginDependency</string>
					<string>585.IBViewBoundsToFrameTransform</string>
					<string>586.IBPluginDependency</string>
					<string>606.IBPluginDependency</string>
					<string>606.IBViewBoundsToFrameTransform</string>
					<string>607.IBPluginDependency</string>
					<string>611.IBPluginDependency</string>
					<string>612.IBPluginDependency</string>
					<string>615.IBEditorWindowLastContentRect</string>
					<string>615.IBPluginDependency</string>
					<string>615.IBWindowTemplateEditedContentRect</string>
					<string>615.NSWindowTemplate.visibleAtLaunch</string>
					<string>615.windowTemplate.hasMinSize</string>
					<string>615.windowTemplate.minSize</string>
					<string>616.IBPluginDependency</string>
					<string>617.IBPluginDependency</string>
					<string>617.IBViewBoundsToFrameTransform</string>
					<string>618.IBPluginDependency</string>
					<string>623.IBPluginDependency</string>
					<string>624.IBPluginDependency</string>
					<string>626.IBEditorWindowLastContentRect</string>
					<string>626.IBPluginDependency</string>
					<string>626.IBWindowTemplateEditedContentRect</string>
					<string>626.NSWindowTemplate.visibleAtLaunch</string>
					<string>627.IBPluginDependency</string>
					<string>628.IBPluginDependency</string>
					<string>629.IBPluginDependency</string>
					<string>644.IBPluginDependency</string>
					<string>644.IBViewBoundsToFrameTransform</string>
					<string>645.IBPluginDependency</string>
					<string>646.IBPluginDependency</string>
					<string>647.IBPluginDependency</string>
					<string>648.IBPluginDependency</string>
					<string>648.IBViewBoundsToFrameTransform</string>
					<string>649.IBPluginDependency</string>
					<string>650.IBPluginDependency</string>
					<string>651.IBPluginDependency</string>
					<string>652.IBPluginDependency</string>
					<string>653.IBPluginDependency</string>
					<string>654.IBPluginDependency</string>
					<string>655.IBPluginDependency</string>
					<string>656.IBPluginDependency</string>
				</object>
				<object class="NSMutableArray" key="dict.values">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{373, 123}, {518, 602}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{373, 123}, {518, 602}}</string>
					<integer value="1"/>
					<string>{{33, 99}, {480, 360}}</string>
					<string>{3.40282e+38, 3.40282e+38}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{562, 220}, {136, 193}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{562, 220}, {136, 193}}</string>
					<integer value="1"/>
					<string>{196, 240}</string>
					<string>{{357, 418}, {480, 270}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCDAAAwngAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABBoAAAwpIAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCCAAAwsQAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABBoAAAwwAAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABB4AAAwxkAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDVAAAwpIAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABC2gAAxBJAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{365, 101}, {514, 533}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{365, 101}, {514, 533}}</string>
					<boolean value="NO"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDSgAAw/+AAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABChgAAw+cAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDNwAAw9OAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCwgAAw72AAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDZwAAw72AAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCHAAAxAGAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDQwAAxAGAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDVAAAwpIAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABC6gAAw9GAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{214, 174}, {676, 539}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{214, 174}, {676, 539}}</string>
					<boolean value="NO"/>
					<boolean value="YES"/>
					<string>{520, 539}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDz4AAwogAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{378, 101}, {489, 587}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{378, 101}, {489, 587}}</string>
					<boolean value="NO"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCdAAAw/KAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw8YAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
				</object>
			</object>
			<object class="NSMutableDictionary" key="unlocalizedProperties">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<reference key="dict.sortedKeys" ref="1049"/>
				<object class="NSMutableArray" key="dict.values">
					<bool key="EncodedWithXMLCoder">YES</bool>
				</object>
			</object>
			<nil key="activeLocalization"/>
			<object class="NSMutableDictionary" key="localizations">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<reference key="dict.sortedKeys" ref="1049"/>
				<object class="NSMutableArray" key="dict.values">
					<bool key="EncodedWithXMLCoder">YES</bool>
				</object>
			</object>
			<nil key="sourceID"/>
			<int key="maxID">668</int>
		</object>
		<object class="IBClassDescriber" key="IBDocument.Classes">
			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<object class="IBPartialClassDescription">
					<string key="className">AppController</string>
					<object class="NSMutableDictionary" key="actions">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSArray" key="dict.sortedKeys">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<string>consoleDone:</string>
							<string>consoleShow:</string>
							<string>debugDone:</string>
							<string>debugSend:</string>
							<string>debugShow:</string>
							<string>loginSend:</string>
							<string>logoutButton:</string>
							<string>runDone:</string>
							<string>runShow:</string>
						</object>
						<object class="NSMutableArray" key="dict.values">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
						</object>
					</object>
					<object class="NSMutableDictionary" key="actionInfosByName">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSArray" key="dict.sortedKeys">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<string>consoleDone:</string>
							<string>consoleShow:</string>
							<string>debugDone:</string>
							<string>debugSend:</string>
							<string>debugShow:</string>
							<string>loginSend:</string>
							<string>logoutButton:</string>
							<string>runDone:</string>
							<string>runShow:</string>
						</object>
						<object class="NSMutableArray" key="dict.values">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<object class="IBActionInfo">
								<string key="name">consoleDone:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">consoleShow:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">debugDone:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">debugSend:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">debugShow:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">loginSend:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">logoutButton:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">runDone:</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBActionInfo">
								<string key="name">runShow:</string>
								<string key="candidateClassName">id</string>
							</object>
						</object>
					</object>
					<object class="NSMutableDictionary" key="outlets">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSArray" key="dict.sortedKeys">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<string>consoleWindow</string>
							<string>debugCmd</string>
							<string>debugOutput</string>
							<string>debugWindow</string>
							<string>debugckPost</string>
							<string>loginChal</string>
							<string>loginReady</string>
							<string>loginResp</string>
							<string>loginWindow</string>
							<string>mainbConsole</string>
							<string>mainbDebug</string>
							<string>mainbLogout</string>
							<string>mainbRun</string>
							<string>runWindow</string>
							<string>theWindow</string>
						</object>
						<object class="NSMutableArray" key="dict.values">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<string>NSWindow</string>
							<string>id</string>
							<string>id</string>
							<string>NSWindow</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>NSWindow</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>id</string>
							<string>NSWindow</string>
							<string>NSWindow</string>
						</object>
					</object>
					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSArray" key="dict.sortedKeys">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<string>consoleWindow</string>
							<string>debugCmd</string>
							<string>debugOutput</string>
							<string>debugWindow</string>
							<string>debugckPost</string>
							<string>loginChal</string>
							<string>loginReady</string>
							<string>loginResp</string>
							<string>loginWindow</string>
							<string>mainbConsole</string>
							<string>mainbDebug</string>
							<string>mainbLogout</string>
							<string>mainbRun</string>
							<string>runWindow</string>
							<string>theWindow</string>
						</object>
						<object class="NSMutableArray" key="dict.values">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<object class="IBToOneOutletInfo">
								<string key="name">consoleWindow</string>
								<string key="candidateClassName">NSWindow</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">debugCmd</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">debugOutput</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">debugWindow</string>
								<string key="candidateClassName">NSWindow</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">debugckPost</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">loginChal</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">loginReady</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">loginResp</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">loginWindow</string>
								<string key="candidateClassName">NSWindow</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">mainbConsole</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">mainbDebug</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">mainbLogout</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">mainbRun</string>
								<string key="candidateClassName">id</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">runWindow</string>
								<string key="candidateClassName">NSWindow</string>
							</object>
							<object class="IBToOneOutletInfo">
								<string key="name">theWindow</string>
								<string key="candidateClassName">NSWindow</string>
							</object>
						</object>
					</object>
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
						<string key="majorKey">IBUserSource</string>
						<string key="minorKey"/>
					</object>
				</object>
			</object>
		</object>
		<int key="IBDocument.localizationMode">0</int>
		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
			<integer value="1050" key="NS.object.0"/>
		</object>
		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
			<integer value="3000" key="NS.object.0"/>
		</object>
		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
		<string key="IBDocument.LastKnownRelativeProjectPath">../Site.xcodeproj</string>
		<int key="IBDocument.defaultPropertyAccessControl">3</int>
		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
			<string key="NS.key.0">NSSwitch</string>
			<string key="NS.object.0">{15, 15}</string>
		</object>
	</data>
</archive>

Added Site/Site/Resources/spinner.gif.

cannot compute difference between binary files

Added Site/Site/Site.xcodeproj/default.pbxuser.

















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
// !$*UTF8*$!
{
	64200A3C0FD424DD005D41CE /* Project object */ = {
		activeBuildConfigurationName = Release;
		activeExecutable = 64200DD80FD4268D005D41CE /* Release (Safari) */;
		activeTarget = 64200DBC0FD42578005D41CE /* Untitled */;
		addToTargets = (
			64200DBC0FD42578005D41CE /* Untitled */,
		);
		codeSenseManager = 64200A410FD424DD005D41CE /* Code sense */;
		executables = (
			64200DD80FD4268D005D41CE /* Release */,
		);
		ignoreBreakpointsInProjectsDict = {
		};
		perUserDictionary = {
			PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
				PBXFileTableDataSourceColumnWidthsKey = (
					22,
					300,
					229,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXExecutablesDataSource_ActiveFlagID,
					PBXExecutablesDataSource_NameID,
					PBXExecutablesDataSource_CommentsID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					341,
					20,
					48,
					43,
					43,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
					PBXFileDataSource_Target_ColumnID,
				);
			};
			PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					301,
					60,
					20,
					48,
					43,
					43,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXTargetDataSource_PrimaryAttribute,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 265572455;
			PBXWorkspaceStateSaveDate = 265572455;
		};
		perUserProjectItems = {
			64200DC60FD425B7005D41CE /* PBXTextBookmark */ = 64200DC60FD425B7005D41CE /* PBXTextBookmark */;
			64200E0F0FD43007005D41CE /* PBXTextBookmark */ = 64200E0F0FD43007005D41CE /* PBXTextBookmark */;
			64200E100FD43007005D41CE /* PBXTextBookmark */ = 64200E100FD43007005D41CE /* PBXTextBookmark */;
			64C346B70FD450570036BAB2 /* PBXTextBookmark */ = 64C346B70FD450570036BAB2 /* PBXTextBookmark */;
			64C346BD0FD450680036BAB2 /* PBXTextBookmark */ = 64C346BD0FD450680036BAB2 /* PBXTextBookmark */;
		};
		sourceControlManager = 64200A400FD424DD005D41CE /* Source Control */;
		userBuildSettings = {
		};
	};
	64200A400FD424DD005D41CE /* Source Control */ = {
		isa = PBXSourceControlManager;
		fallbackIsa = XCSourceControlManager;
		isSCMEnabled = 0;
		scmConfiguration = {
		};
	};
	64200A410FD424DD005D41CE /* Code sense */ = {
		isa = PBXCodeSenseManager;
		indexTemplatePath = "";
	};
	64200A4A0FD4250F005D41CE /* main.j */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {960, 816}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{0, 316}";
			sepNavWindowFrame = "{{15, 215}, {1019, 958}}";
		};
	};
	64200A4C0FD4250F005D41CE /* index.html */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1230, 952}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{0, 418}";
		};
	};
	64200A4D0FD4250F005D41CE /* AppController.j */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {660, 308}}";
			sepNavSelRange = "{130, 0}";
			sepNavVisRange = "{0, 503}";
			sepNavWindowFrame = "{{61, 173}, {1019, 958}}";
		};
	};
	64200DBC0FD42578005D41CE /* Untitled */ = {
		activeExec = 0;
	};
	64200DC60FD425B7005D41CE /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 64200A4D0FD4250F005D41CE /* AppController.j */;
		name = "AppController.j: 1";
		rLen = 0;
		rLoc = 0;
		rType = 0;
		vrLen = 503;
		vrLoc = 0;
	};
	64200DD80FD4268D005D41CE /* Release (Safari) */ = {
		isa = PBXExecutable;
		activeArgIndices = (
			YES,
		);
		argumentStrings = (
			"-a \"$(BROWSER_APP_NAME)\" \"$(PROJECT_DIR)\"/\"$(INDEX_FILE)\"",
		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 0;
		configStateDict = {
			"PBXLSLaunchAction-0" = {
				PBXLSLaunchAction = 0;
				PBXLSLaunchStartAction = 1;
				PBXLSLaunchStdioStyle = 2;
				PBXLSLaunchStyle = 0;
				class = PBXLSRunLaunchConfig;
				commandLineArgs = (
				);
				displayName = "Executable Runner";
				environment = {
				};
				identifier = com.apple.Xcode.launch.runConfig;
				remoteHostInfo = "";
				startActionInfo = "";
			};
		};
		customDataFormattersEnabled = 1;
		dataTipCustomDataFormattersEnabled = 1;
		dataTipShowTypeColumn = 1;
		dataTipSortType = 0;
		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		launchableReference = 64200DD90FD4268D005D41CE /* open */;
		libgmallocEnabled = 0;
		name = "Site";
		savedGlobals = {
		};
		showTypeColumn = 0;
		sourceDirectories = (
		);
		startupPath = "<<ProjectDirectory>>";
	};
	64200DD90FD4268D005D41CE /* open */ = {
		isa = PBXFileReference;
		lastKnownFileType = "compiled.mach-o.executable";
		name = open;
		path = /usr/bin/open;
		sourceTree = "<absolute>";
	};
	64200E0F0FD43007005D41CE /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 64200A4C0FD4250F005D41CE /* index.html */;
		name = "index.html: 1";
		rLen = 0;
		rLoc = 0;
		rType = 0;
		vrLen = 418;
		vrLoc = 0;
	};
	64200E100FD43007005D41CE /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 64200A4C0FD4250F005D41CE /* index.html */;
		name = "index.html: 1";
		rLen = 0;
		rLoc = 0;
		rType = 0;
		vrLen = 418;
		vrLoc = 0;
	};
	64C346B70FD450570036BAB2 /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 64200A4D0FD4250F005D41CE /* AppController.j */;
		name = "AppController.j: 10";
		rLen = 0;
		rLoc = 130;
		rType = 0;
		vrLen = 503;
		vrLoc = 0;
	};
	64C346BD0FD450680036BAB2 /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 64200A4D0FD4250F005D41CE /* AppController.j */;
		name = "AppController.j: 10";
		rLen = 0;
		rLoc = 130;
		rType = 0;
		vrLen = 503;
		vrLoc = 0;
	};
}

Added Site/Site/Site.xcodeproj/jim.mode1v3.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>ActivePerspectiveName</key>
	<string>Project</string>
	<key>AllowedModules</key>
	<array>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXSmartGroupTreeModule</string>
			<key>Name</key>
			<string>Groups and Files Outline View</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXNavigatorGroup</string>
			<key>Name</key>
			<string>Editor</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCTaskListModule</string>
			<key>Name</key>
			<string>Task List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDetailModule</string>
			<key>Name</key>
			<string>File and Smart Group Detail Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXBuildResultsModule</string>
			<key>Name</key>
			<string>Detailed Build Results Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXProjectFindModule</string>
			<key>Name</key>
			<string>Project Batch Find Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCProjectFormatConflictsModule</string>
			<key>Name</key>
			<string>Project Format Conflicts List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXBookmarksModule</string>
			<key>Name</key>
			<string>Bookmarks Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXClassBrowserModule</string>
			<key>Name</key>
			<string>Class Browser</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXCVSModule</string>
			<key>Name</key>
			<string>Source Code Control Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXDebugBreakpointsModule</string>
			<key>Name</key>
			<string>Debug Breakpoints Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDockableInspector</string>
			<key>Name</key>
			<string>Inspector</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXOpenQuicklyModule</string>
			<key>Name</key>
			<string>Open Quickly Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugSessionModule</string>
			<key>Name</key>
			<string>Debugger</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugCLIModule</string>
			<key>Name</key>
			<string>Debug Console</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCSnapshotModule</string>
			<key>Name</key>
			<string>Snapshots Tool</string>
		</dict>
	</array>
	<key>BundlePath</key>
	<string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
	<key>Description</key>
	<string>DefaultDescriptionKey</string>
	<key>DockingSystemVisible</key>
	<false/>
	<key>Extension</key>
	<string>mode1v3</string>
	<key>FavBarConfig</key>
	<dict>
		<key>PBXProjectModuleGUID</key>
		<string>382DF98812944A5F006770C2</string>
		<key>XCBarModuleItemNames</key>
		<dict/>
		<key>XCBarModuleItems</key>
		<array/>
	</dict>
	<key>FirstTimeWindowDisplayed</key>
	<false/>
	<key>Identifier</key>
	<string>com.apple.perspectives.project.mode1v3</string>
	<key>MajorVersion</key>
	<integer>33</integer>
	<key>MinorVersion</key>
	<integer>0</integer>
	<key>Name</key>
	<string>Default</string>
	<key>Notifications</key>
	<array>
		<dict>
			<key>XCObserverAutoDisconnectKey</key>
			<true/>
			<key>XCObserverDefintionKey</key>
			<dict/>
			<key>XCObserverFactoryKey</key>
			<string>XCPerspectivesSpecificationIdentifier</string>
			<key>XCObserverGUIDKey</key>
			<string>XCObserverProjectIdentifier</string>
			<key>XCObserverNotificationKey</key>
			<string>PBXStatusBuildStateMessageNotification</string>
			<key>XCObserverTargetKey</key>
			<string>XCMainBuildResultsModuleGUID</string>
			<key>XCObserverTriggerKey</key>
			<string>awakenModuleWithObserver:</string>
			<key>XCObserverValidationKey</key>
			<dict/>
		</dict>
	</array>
	<key>OpenEditors</key>
	<array/>
	<key>PerspectiveWidths</key>
	<array>
		<integer>-1</integer>
		<integer>-1</integer>
	</array>
	<key>Perspectives</key>
	<array>
		<dict>
			<key>ChosenToolbarItems</key>
			<array>
				<string>active-target-popup</string>
				<string>active-buildstyle-popup</string>
				<string>action</string>
				<string>debugger-enable-breakpoints</string>
				<string>buildOrClean</string>
				<string>go-debug</string>
				<string>com.apple.ide.PBXToolbarStopButton</string>
				<string>servicesModulebreakpoints</string>
				<string>servicesModulefind</string>
				<string>NSToolbarFlexibleSpaceItem</string>
				<string>com.apple.pbx.toolbar.searchfield</string>
			</array>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProjectWithEditor</string>
			<key>Identifier</key>
			<string>perspective.project</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<true/>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>1CE0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>64200A3A0FD424DD005D41CE</string>
								<string>64200DB90FD42540005D41CE</string>
								<string>64200DBA0FD4254B005D41CE</string>
								<string>64200A470FD4250F005D41CE</string>
								<string>1C37FBAC04509CD000000102</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>3</integer>
									<integer>1</integer>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 486}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<true/>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 504}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>448 262 663 545 0 0 1280 1002 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>203pt</string>
				</dict>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20306471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CE0B20406471E060097A5F4</string>
										<key>PBXProjectModuleLabel</key>
										<string></string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {455, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>448 262 663 545 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20506471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 5}, {455, 499}}</string>
								<key>RubberWindowFrame</key>
								<string>448 262 663 545 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>499pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>455pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCModuleDock</string>
				<string>PBXNavigatorGroup</string>
				<string>XCDetailModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>386D68A81306A18500D46036</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>386D68A91306A18500D46036</string>
				<string>1CE0B20306471E060097A5F4</string>
				<string>1CE0B20506471E060097A5F4</string>
			</array>
			<key>ToolbarConfigUserDefaultsMinorVersion</key>
			<string>2</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.defaultV3</string>
		</dict>
		<dict>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProject</string>
			<key>Identifier</key>
			<string>perspective.morph</string>
			<key>IsVertical</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<integer>1</integer>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C08E77C0454961000C914BD</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>11E0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>29B97314FDCFA39411CA2CEA</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 337}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<integer>1</integer>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 355}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>373 269 690 397 0 0 1440 878 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Morph</string>
			<key>PreferredWidth</key>
			<integer>300</integer>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>11E0B1FE06471DED0097A5F4</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.default.shortV3</string>
		</dict>
	</array>
	<key>PerspectivesBarVisible</key>
	<false/>
	<key>PinnedNavigatorIdentifier</key>
	<string>38AFD52812EF715500A0094F</string>
	<key>ShelfIsVisible</key>
	<false/>
	<key>SourceDescription</key>
	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
	<key>StatusbarIsVisible</key>
	<true/>
	<key>TimeStamp</key>
	<real>319201659.179506</real>
	<key>ToolbarConfigUserDefaultsMinorVersion</key>
	<string>2</string>
	<key>ToolbarDisplayMode</key>
	<integer>1</integer>
	<key>ToolbarIsVisible</key>
	<true/>
	<key>ToolbarSizeMode</key>
	<integer>2</integer>
	<key>Type</key>
	<string>Perspectives</string>
	<key>UpdateMessage</key>
	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
	<key>WindowJustification</key>
	<integer>5</integer>
	<key>WindowOrderList</key>
	<array>
		<string>/Users/jschimpf/Public/Firenet/Site/Site/Site.xcodeproj</string>
	</array>
	<key>WindowString</key>
	<string>448 262 663 545 0 0 1280 1002 </string>
	<key>WindowToolsV3</key>
	<array>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.build</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528F0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {1093, 308}}</string>
								<key>RubberWindowFrame</key>
								<string>87 56 1093 590 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>308pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>XCMainBuildResultsModuleGUID</string>
								<key>PBXProjectModuleLabel</key>
								<string>Build Results</string>
								<key>XCBuildResultsTrigger_Collapse</key>
								<integer>1021</integer>
								<key>XCBuildResultsTrigger_Open</key>
								<integer>1010</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 313}, {1093, 236}}</string>
								<key>RubberWindowFrame</key>
								<string>87 56 1093 590 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXBuildResultsModule</string>
							<key>Proportion</key>
							<string>236pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>549pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Build Results</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBuildResultsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>382DF98412944A5D006770C2</string>
				<string>38AFD52B12EF723200A0094F</string>
				<string>1CD0528F0623707200166675</string>
				<string>XCMainBuildResultsModuleGUID</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.buildV3</string>
			<key>WindowContentMinSize</key>
			<string>486 300</string>
			<key>WindowString</key>
			<string>87 56 1093 590 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>382DF98412944A5D006770C2</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debugger</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>Debugger</key>
								<dict>
									<key>HorizontalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {316, 203}}</string>
											<string>{{316, 0}, {378, 203}}</string>
										</array>
									</dict>
									<key>VerticalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {694, 203}}</string>
											<string>{{0, 203}, {694, 178}}</string>
										</array>
									</dict>
								</dict>
								<key>LauncherConfigVersion</key>
								<string>8</string>
								<key>PBXProjectModuleGUID</key>
								<string>1C162984064C10D400B95A72</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debug - GLUTExamples (Underwater)</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>DebugConsoleVisible</key>
								<string>None</string>
								<key>DebugConsoleWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>DebugSTDIOWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>Frame</key>
								<string>{{0, 0}, {694, 381}}</string>
								<key>PBXDebugSessionStackFrameViewKey</key>
								<dict>
									<key>DebugVariablesTableConfiguration</key>
									<array>
										<string>Name</string>
										<real>120</real>
										<string>Value</string>
										<real>85</real>
										<string>Summary</string>
										<real>148</real>
									</array>
									<key>Frame</key>
									<string>{{316, 0}, {378, 203}}</string>
									<key>RubberWindowFrame</key>
									<string>229 227 694 422 0 0 1280 778 </string>
								</dict>
								<key>RubberWindowFrame</key>
								<string>229 227 694 422 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugSessionModule</string>
							<key>Proportion</key>
							<string>381pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>381pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugSessionModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1CD10A99069EF8BA00B06720</string>
				<string>38E3503712D2236900587B71</string>
				<string>1C162984064C10D400B95A72</string>
				<string>38E3503812D2236900587B71</string>
				<string>38E3503912D2236900587B71</string>
				<string>38E3503A12D2236900587B71</string>
				<string>38E3503B12D2236900587B71</string>
				<string>38E3503C12D2236900587B71</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugV3</string>
			<key>WindowString</key>
			<string>229 227 694 422 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1CD10A99069EF8BA00B06720</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.find</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Dock</key>
							<array>
								<dict>
									<key>ContentConfiguration</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CDD528C0622207200134675</string>
										<key>PBXProjectModuleLabel</key>
										<string>&lt;No Editor&gt;</string>
										<key>PBXSplitModuleInNavigatorKey</key>
										<dict>
											<key>Split0</key>
											<dict>
												<key>PBXProjectModuleGUID</key>
												<string>1CD0528D0623707200166675</string>
											</dict>
											<key>SplitCount</key>
											<string>1</string>
										</dict>
										<key>StatusBarVisibility</key>
										<integer>1</integer>
									</dict>
									<key>GeometryConfiguration</key>
									<dict>
										<key>Frame</key>
										<string>{{0, 0}, {781, 167}}</string>
										<key>RubberWindowFrame</key>
										<string>62 385 781 470 0 0 1440 878 </string>
									</dict>
									<key>Module</key>
									<string>PBXNavigatorGroup</string>
									<key>Proportion</key>
									<string>781pt</string>
								</dict>
							</array>
							<key>Proportion</key>
							<string>50%</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528E0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>Project Find</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{8, 0}, {773, 254}}</string>
								<key>RubberWindowFrame</key>
								<string>62 385 781 470 0 0 1440 878 </string>
							</dict>
							<key>Module</key>
							<string>PBXProjectFindModule</string>
							<key>Proportion</key>
							<string>50%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>428pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Find</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXProjectFindModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C530D57069F1CE1000CFCEE</string>
				<string>1C530D58069F1CE1000CFCEE</string>
				<string>1C530D59069F1CE1000CFCEE</string>
				<string>1CDD528C0622207200134675</string>
				<string>1C530D5A069F1CE1000CFCEE</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>1CD0528E0623707200166675</string>
			</array>
			<key>WindowString</key>
			<string>62 385 781 470 0 0 1440 878 </string>
			<key>WindowToolGUID</key>
			<string>1C530D57069F1CE1000CFCEE</string>
			<key>WindowToolIsVisible</key>
			<integer>0</integer>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>MENUSEPARATOR</string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debuggerConsole</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAAC065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debugger Console</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {650, 209}}</string>
								<key>RubberWindowFrame</key>
								<string>327 449 650 250 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugCLIModule</string>
							<key>Proportion</key>
							<string>209pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>209pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger Console</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugCLIModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAAD065D492600B07095</string>
				<string>38A3295612BFB3C0009A3052</string>
				<string>1C78EAAC065D492600B07095</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.consoleV3</string>
			<key>WindowString</key>
			<string>327 449 650 250 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1C78EAAD065D492600B07095</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.snapshots</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCSnapshotModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Snapshots</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCSnapshotModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<string>Yes</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.snapshots</string>
			<key>WindowString</key>
			<string>315 824 300 550 0 0 1440 878 </string>
			<key>WindowToolIsVisible</key>
			<string>Yes</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.scm</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAB2065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>&lt;No Editor&gt;</string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1C78EAB3065D492600B07095</string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<integer>1</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {452, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD052920623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>SCM</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ConsoleFrame</key>
								<string>{{0, 259}, {452, 0}}</string>
								<key>Frame</key>
								<string>{{0, 7}, {452, 259}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
								<key>TableConfiguration</key>
								<array>
									<string>Status</string>
									<real>30</real>
									<string>FileName</string>
									<real>199</real>
									<string>Path</string>
									<real>197.0950012207031</real>
								</array>
								<key>TableFrame</key>
								<string>{{0, 0}, {452, 250}}</string>
							</dict>
							<key>Module</key>
							<string>PBXCVSModule</string>
							<key>Proportion</key>
							<string>262pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>266pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>SCM</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXCVSModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAB4065D492600B07095</string>
				<string>1C78EAB5065D492600B07095</string>
				<string>1C78EAB2065D492600B07095</string>
				<string>1CD052920623707200166675</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.scm</string>
			<key>WindowString</key>
			<string>743 379 452 308 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.breakpoints</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXBottomSmartGroupGIDs</key>
								<array>
									<string>1C77FABC04509CD000000102</string>
								</array>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B1FE06471DED0097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Files</string>
								<key>PBXProjectStructureProvided</key>
								<string>no</string>
								<key>PBXSmartGroupTreeModuleColumnData</key>
								<dict>
									<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
									<array>
										<real>168</real>
									</array>
									<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
									<array>
										<string>MainColumn</string>
									</array>
								</dict>
								<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
								<dict>
									<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
									<array>
										<string>1C77FABC04509CD000000102</string>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
									<array>
										<array>
											<integer>0</integer>
										</array>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
									<string>{{0, 0}, {168, 350}}</string>
								</dict>
								<key>PBXTopSmartGroupGIDs</key>
								<array/>
								<key>XCIncludePerspectivesSwitch</key>
								<false/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {185, 368}}</string>
								<key>GroupTreeTableConfiguration</key>
								<array>
									<string>MainColumn</string>
									<real>168</real>
								</array>
								<key>RubberWindowFrame</key>
								<string>116 342 744 409 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXSmartGroupTreeModule</string>
							<key>Proportion</key>
							<string>185pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CA1AED706398EBD00589147</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{190, 0}, {554, 368}}</string>
								<key>RubberWindowFrame</key>
								<string>116 342 744 409 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>554pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>368pt</string>
				</dict>
			</array>
			<key>MajorVersion</key>
			<integer>3</integer>
			<key>MinorVersion</key>
			<integer>0</integer>
			<key>Name</key>
			<string>Breakpoints</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCDetailModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>38A329FF12C27FE2009A3052</string>
				<string>38A32A0012C27FE2009A3052</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>1CA1AED706398EBD00589147</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.breakpointsV3</string>
			<key>WindowString</key>
			<string>116 342 744 409 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>38A329FF12C27FE2009A3052</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.debugAnimator</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debug Visualizer</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXNavigatorGroup</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugAnimatorV3</string>
			<key>WindowString</key>
			<string>100 100 700 500 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.bookmarks</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXBookmarksModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Bookmarks</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBookmarksModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowString</key>
			<string>538 42 401 187 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.projectFormatConflicts</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCProjectFormatConflictsModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Format Conflicts</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCProjectFormatConflictsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowContentMinSize</key>
			<string>450 300</string>
			<key>WindowString</key>
			<string>50 850 472 307 0 0 1440 877</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.classBrowser</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>OptionsSetName</key>
								<string>Hierarchy, all classes</string>
								<key>PBXProjectModuleGUID</key>
								<string>1CA6456E063B45B4001379D8</string>
								<key>PBXProjectModuleLabel</key>
								<string>Class Browser - NSObject</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ClassesFrame</key>
								<string>{{0, 0}, {374, 96}}</string>
								<key>ClassesTreeTableConfiguration</key>
								<array>
									<string>PBXClassNameColumnIdentifier</string>
									<real>208</real>
									<string>PBXClassBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>Frame</key>
								<string>{{0, 0}, {630, 331}}</string>
								<key>MembersFrame</key>
								<string>{{0, 105}, {374, 395}}</string>
								<key>MembersTreeTableConfiguration</key>
								<array>
									<string>PBXMemberTypeIconColumnIdentifier</string>
									<real>22</real>
									<string>PBXMemberNameColumnIdentifier</string>
									<real>216</real>
									<string>PBXMemberTypeColumnIdentifier</string>
									<real>97</real>
									<string>PBXMemberBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>PBXModuleWindowStatusBarHidden2</key>
								<integer>1</integer>
								<key>RubberWindowFrame</key>
								<string>385 179 630 352 0 0 1440 878 </string>
							</dict>
							<key>Module</key>
							<string>PBXClassBrowserModule</string>
							<key>Proportion</key>
							<string>332pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>332pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Class Browser</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXClassBrowserModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C0AD2AF069F1E9B00FABCE6</string>
				<string>1C0AD2B0069F1E9B00FABCE6</string>
				<string>1CA6456E063B45B4001379D8</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.classbrowser</string>
			<key>WindowString</key>
			<string>385 179 630 352 0 0 1440 878 </string>
			<key>WindowToolGUID</key>
			<string>1C0AD2AF069F1E9B00FABCE6</string>
			<key>WindowToolIsVisible</key>
			<integer>0</integer>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.refactoring</string>
			<key>IncludeInToolsMenu</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{0, 0}, {500, 335}</string>
								<key>RubberWindowFrame</key>
								<string>{0, 0}, {500, 335}</string>
							</dict>
							<key>Module</key>
							<string>XCRefactoringModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Refactoring</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCRefactoringModule</string>
			</array>
			<key>WindowString</key>
			<string>200 200 500 356 0 0 1920 1200 </string>
		</dict>
	</array>
</dict>
</plist>

Added Site/Site/Site.xcodeproj/jim.pbxuser.





























































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
// !$*UTF8*$!
{
	38ECFB6512B50DC6008E1314 /* myAppUtils.j */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {607, 1806}}";
			sepNavSelRange = "{2427, 11}";
			sepNavVisRange = "{0, 780}";
			sepNavWindowFrame = "{{169, 50}, {654, 715}}";
		};
	};
	64200A3C0FD424DD005D41CE /* Project object */ = {
		activeBuildConfigurationName = Release;
		activeExecutable = 64200DD80FD4268D005D41CE /* Site */;
		activeTarget = 64200DBC0FD42578005D41CE /* Site */;
		addToTargets = (
			64200DBC0FD42578005D41CE /* Site */,
		);
		codeSenseManager = 64200A410FD424DD005D41CE /* Code sense */;
		executables = (
			64200DD80FD4268D005D41CE /* Site */,
		);
		ignoreBreakpointsInProjectsDict = {
		};
		perUserDictionary = {
			"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					20,
					198,
					20,
					99,
					99,
					29,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXBreakpointsDataSource_ActionID,
					PBXBreakpointsDataSource_TypeID,
					PBXBreakpointsDataSource_BreakpointID,
					PBXBreakpointsDataSource_UseID,
					PBXBreakpointsDataSource_LocationID,
					PBXBreakpointsDataSource_ConditionID,
					PBXBreakpointsDataSource_IgnoreCountID,
					PBXBreakpointsDataSource_ContinueID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
				PBXFileTableDataSourceColumnWidthsKey = (
					22,
					300,
					229,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXExecutablesDataSource_ActiveFlagID,
					PBXExecutablesDataSource_NameID,
					PBXExecutablesDataSource_CommentsID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					216,
					20,
					48,
					43,
					43,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
					PBXFileDataSource_Target_ColumnID,
				);
			};
			PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					176,
					60,
					20,
					48,
					43,
					43,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXTargetDataSource_PrimaryAttribute,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 319201659;
			PBXWorkspaceStateSaveDate = 319201659;
		};
		sourceControlManager = 64200A400FD424DD005D41CE /* Source Control */;
		userBuildSettings = {
		};
	};
	64200A400FD424DD005D41CE /* Source Control */ = {
		isa = PBXSourceControlManager;
		fallbackIsa = XCSourceControlManager;
		isSCMEnabled = 0;
		scmConfiguration = {
			repositoryNamesForRoots = {
				"" = "";
			};
		};
	};
	64200A410FD424DD005D41CE /* Code sense */ = {
		isa = PBXCodeSenseManager;
		indexTemplatePath = "";
	};
	64200A4A0FD4250F005D41CE /* main.j */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {972, 587}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{0, 313}";
			sepNavWindowFrame = "{{15, 63}, {1019, 715}}";
		};
	};
	64200A4C0FD4250F005D41CE /* index.html */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {1230, 952}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{0, 418}";
		};
	};
	64200A4D0FD4250F005D41CE /* AppController.j */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {678, 5474}}";
			sepNavSelRange = "{6478, 0}";
			sepNavVisRange = "{6113, 956}";
			sepNavWindowFrame = "{{169, 50}, {654, 715}}";
		};
	};
	64200DBC0FD42578005D41CE /* Site */ = {
		activeExec = 0;
	};
	64200DD80FD4268D005D41CE /* Site */ = {
		isa = PBXExecutable;
		activeArgIndices = (
			YES,
		);
		argumentStrings = (
			"-a \"$(BROWSER_APP_NAME)\" \"$(PROJECT_DIR)\"/\"$(INDEX_FILE)\"",
		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 0;
		configStateDict = {
			"PBXLSLaunchAction-0" = {
				PBXLSLaunchAction = 0;
				PBXLSLaunchStartAction = 1;
				PBXLSLaunchStdioStyle = 2;
				PBXLSLaunchStyle = 0;
				class = PBXLSRunLaunchConfig;
				commandLineArgs = (
				);
				displayName = "Executable Runner";
				environment = {
				};
				identifier = com.apple.Xcode.launch.runConfig;
				remoteHostInfo = "";
				startActionInfo = "";
			};
		};
		customDataFormattersEnabled = 1;
		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		launchableReference = 64200DD90FD4268D005D41CE /* open */;
		libgmallocEnabled = 0;
		name = Site;
		savedGlobals = {
		};
		sourceDirectories = (
		);
		startupPath = "<<ProjectDirectory>>";
	};
	64200DD90FD4268D005D41CE /* open */ = {
		isa = PBXFileReference;
		lastKnownFileType = "compiled.mach-o.executable";
		name = open;
		path = /usr/bin/open;
		sourceTree = "<absolute>";
	};
}

Added Site/Site/Site.xcodeproj/project.pbxproj.





























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 42;
	objects = {

/* Begin PBXAggregateTarget section */
		64200DBC0FD42578005D41CE /* Site */ = {
			isa = PBXAggregateTarget;
			buildConfigurationList = 64200DCB0FD425B7005D41CE /* Build configuration list for PBXAggregateTarget "Site" */;
			buildPhases = (
				64200DE70FD428F4005D41CE /* Build Application */,
			);
			dependencies = (
			);
			name = Site;
			productName = Site;
		};
/* End PBXAggregateTarget section */

/* Begin PBXFileReference section */
		38ECFB6512B50DC6008E1314 /* myAppUtils.j */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = myAppUtils.j; sourceTree = "<group>"; };
		641D44E00FD437FB00EACBFF /* Frameworks */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Frameworks; sourceTree = SOURCE_ROOT; };
		64200A490FD4250F005D41CE /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
		64200A4A0FD4250F005D41CE /* main.j */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.j; sourceTree = "<group>"; };
		64200A4B0FD4250F005D41CE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		64200A4C0FD4250F005D41CE /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = "<group>"; };
		64200A4D0FD4250F005D41CE /* AppController.j */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AppController.j; sourceTree = "<group>"; };
		64B168F30FD4E529001197CA /* index-debug.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "index-debug.html"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXGroup section */
		64200A3A0FD424DD005D41CE = {
			isa = PBXGroup;
			children = (
				64200DB90FD42540005D41CE /* Classes */,
				64200DBA0FD4254B005D41CE /* Others */,
				64200A470FD4250F005D41CE /* Resources */,
				641D44E00FD437FB00EACBFF /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		64200A470FD4250F005D41CE /* Resources */ = {
			isa = PBXGroup;
			children = (
				64200A490FD4250F005D41CE /* MainMenu.xib */,
			);
			path = Resources;
			sourceTree = "<group>";
		};
		64200DB90FD42540005D41CE /* Classes */ = {
			isa = PBXGroup;
			children = (
				64200A4D0FD4250F005D41CE /* AppController.j */,
				38ECFB6512B50DC6008E1314 /* myAppUtils.j */,
			);
			name = Classes;
			sourceTree = "<group>";
		};
		64200DBA0FD4254B005D41CE /* Others */ = {
			isa = PBXGroup;
			children = (
				64200A4A0FD4250F005D41CE /* main.j */,
				64200A4B0FD4250F005D41CE /* Info.plist */,
				64200A4C0FD4250F005D41CE /* index.html */,
				64B168F30FD4E529001197CA /* index-debug.html */,
			);
			name = Others;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXProject section */
		64200A3C0FD424DD005D41CE /* Project object */ = {
			isa = PBXProject;
			buildConfigurationList = 64200A3F0FD424DD005D41CE /* Build configuration list for PBXProject "Site" */;
			compatibilityVersion = "Xcode 2.4";
			hasScannedForEncodings = 0;
			knownRegions = (
				English,
				Japanese,
				French,
				German,
			);
			mainGroup = 64200A3A0FD424DD005D41CE;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				64200DBC0FD42578005D41CE /* Site */,
			);
		};
/* End PBXProject section */

/* Begin PBXShellScriptBuildPhase section */
		64200DE70FD428F4005D41CE /* Build Application */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Build Application";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "#!/bin/sh\n\n##################\n### CAPPUCCINO ###\n##################\n\n#validate cappuccino Frameworks path\nif test -d \"$CAPP_FRAMEWORKS_PATH\";\nthen\n\tcappFrameworksPath=$CAPP_FRAMEWORKS_PATH;\nelse\n\t#search for cappuccino frameworks with spotlight\n\tcappFrameworksPaths=$(mdfind \"kMDItemContentType == 'public.folder' && kMDItemDisplayName == 'Frameworks'\");\n\tcappFrameworksPath=\"/usr/local/narwhal/packages/cappuccino/Frameworks\";\n\tfor aCappFrameworksPath in $cappFrameworksPaths; do\n\t\tif test $aCappFrameworksPath -nt $cappFrameworksPath;\n\t\tthen\n\t\t\tif test ! -z \"$(echo $aCappFrameworksPath | awk '/cappuccino\\/Frameworks/')\";\n\t\t\tthen \n\t\t\t\tcappFrameworksPath=$aCappFrameworksPath;\n\t\t\telse\n\t\t\t\tif test ! -z \"$(echo $aCappFrameworksPath | awk '/objj\\/lib\\/Frameworks/')\";\n\t\t\t\tthen \n\t\t\t\t\tcappFrameworksPath=$aCappFrameworksPath;\n\t\t\t\tfi\n\t\t\tfi\n\t\tfi\n\tdone;\nfi\n\n#copy cappuccino frameworks\nif test -d $cappFrameworksPath;\nthen\n\trm -rf ./Frameworks;\n\tmkdir ./Frameworks;\n\n\tif test $LINK_FRAMEWORKS = \"YES\";\n\tthen\n\t\tif test $DEBUG = \"NO\"\n\t\tthen\n\t\t\tln -sf $cappFrameworksPath/* Frameworks;\n\t\t\trm -rf Frameworks/Debug;\n\t\telse\n\t\t\tln -sf $cappFrameworksPath/Debug/* Frameworks;\n\t\tfi\n\telse\n\t\tif test $DEBUG = \"NO\"\n\t\tthen\n\t\t\tcp -rf $cappFrameworksPath/* Frameworks;\n\t\t\trm -rf Frameworks/Debug;\n\t\telse\n\t\t\tcp -rf $cappFrameworksPath/Debug/* Frameworks;\n\t\tfi\n\tfi\t\n\techo \"Copy Cappuccino Frameworks from location '$cappFrameworksPath'\";\nfi\n\n#validate cappuccino bin path\nif test -d \"$CAPP_BIN_PATH\";\nthen\n\tcappBinPath=\"$CAPP_BIN_PATH\";\nelse\n\t#search for objj bin with spotlight\n\tcappBinPaths=$(mdfind \"kMDItemContentType == 'public.unix-executable' && kMDItemDisplayName == 'nib2cib'\");\n\tcappBinPath=\"/usr/local/narwhal/packages/cappuccino/bin\";\n\tfor aCappBinPath in $cappBinPaths; do\n\t\tif test $aCappBinPath -nt $cappBinPath;\n\t\tthen\n\t\t\tif test ! -z \"$(echo $aCappBinPath | awk '/cappuccino\\/bin/')\";\n\t\t\t\tthen \n\t\t\t\tcappBinPath=$aCappBinPath;\n\t\t\tfi\n\t\tfi\n\tdone;\n\tcappBinPath=$(echo $cappBinPath | sed -e 's/\\/nib2cib$//');\nfi\n\necho \"Cappuccino binary path is '$cappBinPath'\";\n\n#add cappuccino bin to profile\nPATH=${PATH}:$cappBinPath;\n\n\n##################\n### OBJECTIVE-J###\n##################\n\n# validate objj runtime path\nif test -d \"$OBJJ_RUNTIME_PATH\";\nthen\n\tobjjRuntimePath=\"$OBJJ_RUNTIME_PATH\";\nelse\n\tobjjRuntimePath=\"/usr/local/narwhal/packages/objective-j/Frameworks\";\n\t#search for cappuccino frameworks with spotlight\n\tobjjRuntimePaths=$(mdfind \"kMDItemContentType == 'public.folder' && kMDItemDisplayName == 'Frameworks'\");\n\tobjjRuntimePath=\"/usr/narwhal/packages/objective-j/Frameworks\";\n\tfor aObjjRuntimePath in $objjRuntimePaths; do\n\t\tif test $aObjjRuntimePath -nt $objjRuntimePath;\n\t\tthen\n\t\t\tif test ! -z \"$(echo $aObjjRuntimePath | awk '/objective-j\\/Frameworks/')\";\n\t\t\t\tthen \n\t\t\t\tobjjRuntimePath=$aObjjRuntimePath;\n\t\t\tfi\n\t\tfi\n\tdone;\nfi\n\n# copy the objective-j runtime\nif test -d $objjRuntimePath;\nthen\n\techo \"Copy Objective-J Frameworks from location '$objjRuntimePath'\";\n\tif test $LINK_FRAMEWORKS = \"YES\";\n\tthen\n\t\tif test $DEBUG = \"NO\"\n\t\tthen\n\t\t\tln -sf $objjRuntimePath/* Frameworks;\n\t\t\trm -rf Frameworks/Debug;\n\t\telse\n\t\t\tln -sf $objjRuntimePath/Debug/* Frameworks;\n\t\tfi\n\telse\n\t\tif test $DEBUG = \"NO\"\n\t\tthen\n\t\t\tcp -rf $objjRuntimePath/* Frameworks;\n\t\t\trm -rf Frameworks/Debug;\n\t\telse\n\t\t\tcp -rf $objjRuntimePath/Debug/* Frameworks;\n\t\tfi\n\tfi\nfi\n\n# validate objj bin path\nif test -d \"$OBJJ_BIN_PATH\";\nthen\n\tobjjBinPath=\"$OBJJ_BIN_PATH\";\nelse\n\t#search for objj bin with spotlight\n\tobjjBinPaths=$(mdfind \"kMDItemContentType == 'public.unix-executable' && kMDItemDisplayName == 'objj'\");\n\tobjjBinPath=\"/usr/local/narwhal/packages/objective-j/bin\";\n\tfor aObjjBinPath in $objjBinPaths; do\n\t\tif test $aObjjBinPath -nt $objjBinPath;\n\t\tthen\n\t\t\tif test ! -z \"$(echo $aObjjBinPath | awk '/objective-j\\/bin/')\";\n\t\t\t\tthen \n\t\t\t\tobjjBinPath=$aObjjBinPath;\n\t\t\tfi\n\t\tfi\n\tdone;\n\tobjjBinPath=$(echo $objjBinPath | sed -e 's/\\/objj$//');\nfi\n\necho \"Objective-J binary path is '$objjBinPath'\";\n\n#add objj bin to profile\nPATH=${PATH}:$objjBinPath;\n\n\n###############\n### NARWHAL ###\n###############\n\n#search for narwhal bin with spotlight\nnarwhalBinPaths=$(mdfind \"kMDItemContentType == 'public.unix-executable' && kMDItemDisplayName == 'narwhal'\");\nnarwhalBinPath=\"narwhalBin\";\nfor aNarwhalBin in $narwhalBinPaths; do\n\tif test $aNarwhalBin -nt $narwhalBinPath;\n\tthen\n\t\tif test ! -z \"$(echo $aNarwhalBin | awk '/narwhal\\/bin/')\";\n\t\t\tthen \n\t\t\tnarwhalBin=$aNarwhalBin;\n\t\tfi\n\tfi\ndone;\nnarwhalBin=$(echo $narwhalBin | sed -e 's/\\/narwhal$//');\nPATH=${PATH}:$narwhalBin;\necho \"NARWHAL binary path is '$narwhalBin'\";\n\n\n### Handle custom frameworks ###\n#copy custom frameworks or files to Frameworks\nif test -n \"$CUSTOM_FRAMEWORKS\";\nthen\n\tif test $LINK_FRAMEWORKS = \"YES\";\n\tthen\n\t\tln -sf $CUSTOM_FRAMEWORKS ./Frameworks/;\n\telse\n\t\tcp -rf $CUSTOM_FRAMEWORKS ./Frameworks/;\n\tfi\nfi\n\n\n###############\n### NIB2CIB ###\n###############\n\necho \"Check Interface Builder Files ....\";\n\n# for xib files\nxibFiles=$(find . -type f -name \"*.xib\");\nfor xibFile in $xibFiles; do\n cibFile=$(echo $xibFile | sed -e 's/\\.xib$/.cib/');\n test $xibFile -nt $cibFile && nib2cib $xibFile || echo \"- Interface Builder File '$cibFile' is up-to-date\";\ndone;\n\n# for nib files\nnibFiles=$(find . -type d -name \"*.nib\");\nfor nibFile in $nibFiles; do\n \tcibFile=$(echo $nibFile | sed -e 's/\\.nib$/.cib/');\n\ttest $nibFile -nt $cibFile && nib2cib $nibFile || echo \"- Interface Builder File \\'$cibFile\\' is up-to-date\";\ndone;\n\n\n#################\n### CORE DATA ###\n#################\n\nmomcBinPaths=$(mdfind \"kMDItemContentType == 'public.unix-executable' && kMDItemDisplayName == 'momc'\");\nmomcBin=\"momc\";\nfor aMomcBin in $momcBinPaths; do\n\tif test $aMomcBin -nt $momcBin;\n\tthen\n\t\tmomcBin=$(echo $aMomcBin | sed -e 's/\\momc$//');\n\tfi\ndone;\necho 'MOMC file location is '$momcBin'';\nPATH=${PATH}:momcBin;\n\nxcdmodels=$(find . -type d -name \"*.xcdatamodel\");\nfor xcdmodel in $xcdmodels; do\n\txccpdfile=$(echo $xcdmodel | sed -e 's/\\.xcdatamodel$/.cxcdatamodel/');\n\tmomc $xcdmodel $xccpdfile\n\tplutil -convert xml1 $xccpdfile\n\techo \"- Core Data Model '$xcdmodel' converted\";\ndone;";
		};
/* End PBXShellScriptBuildPhase section */

/* Begin XCBuildConfiguration section */
		64200A3E0FD424DD005D41CE /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BROWSER_APP_NAME = Safari.app;
				CAPP_BIN_PATH = /usr/local/narwhal/packages/cappuccino/bin;
				CAPP_FRAMEWORKS_PATH = /usr/local/narwhal/packages/cappuccino/Frameworks;
				CUSTOM_FRAMEWORKS = "";
				DEBUG = NO;
				INDEX_FILE = index.html;
				LINK_FRAMEWORKS = NO;
				OBJJ_BIN_PATH = "/usr/local/narwhal/packages/objective-j/bin";
				OBJJ_RUNTIME_PATH = "/usr/local/narwhal/packages/objective-j/Frameworks";
			};
			name = Release;
		};
		64200DBE0FD42578005D41CE /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				COPY_PHASE_STRIP = YES;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_ENABLE_FIX_AND_CONTINUE = NO;
				PRODUCT_NAME = Untitled;
				ZERO_LINK = NO;
			};
			name = Release;
		};
		64A306A10FD4E183000D6AD7 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BROWSER_APP_NAME = Safari.app;
				CAPP_BIN_PATH = /usr/local/narwhal/packages/cappuccino/bin;
				CAPP_FRAMEWORKS_PATH = /usr/local/narwhal/packages/cappuccino/Frameworks;
				CUSTOM_FRAMEWORKS = "";
				DEBUG = YES;
				INDEX_FILE = "index-debug.html";
				LINK_FRAMEWORKS = YES;
				OBJJ_BIN_PATH = "/usr/local/narwhal/packages/objective-j/bin";
				OBJJ_RUNTIME_PATH = "/usr/local/narwhal/packages/objective-j/Frameworks";
			};
			name = Debug;
		};
		64A306A20FD4E183000D6AD7 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				COPY_PHASE_STRIP = YES;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_ENABLE_FIX_AND_CONTINUE = NO;
				PRODUCT_NAME = Untitled;
				ZERO_LINK = NO;
			};
			name = Debug;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		64200A3F0FD424DD005D41CE /* Build configuration list for PBXProject "Site" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				64A306A10FD4E183000D6AD7 /* Debug */,
				64200A3E0FD424DD005D41CE /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		64200DCB0FD425B7005D41CE /* Build configuration list for PBXAggregateTarget "Site" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				64A306A20FD4E183000D6AD7 /* Debug */,
				64200DBE0FD42578005D41CE /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 64200A3C0FD424DD005D41CE /* Project object */;
}

Added Site/Site/index-debug.html.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<!--
 index-debug.html
 Untitled
 
 Created by Raphael Bartolome on 22.07.10.
 Copyright __MyCompanyName__ 2010. All rights reserved.
-->
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

        <title>Untitled</title>

        <script type = "text/javascript">
            OBJJ_MAIN_FILE = "main.j";
            OBJJ_INCLUDE_PATHS = ["Frameworks"];
        </script>
        
        <script src = "Frameworks/Objective-J/Objective-J.js" type = "text/javascript"></script>

        <style type = "text/css">
            body{margin:0; padding:0;}
            #container {position: absolute; top:50%; left:50%;}
            #content {width:800px; text-align:center; margin-left: -400px; height:50px; margin-top:-25px; line-height: 50px;}
            #content {font-family: "Helvetica", "Arial", sans-serif; font-size: 18px; color: black; text-shadow: 0px 1px 0px white; }
            #loadgraphic {margin-right: 0.2em; margin-bottom:-2px;}
        </style>

        <!--[if lt IE 7]>
        <STYLE type="text/css">
            #container { position: relative; top: 50%; }
            #content { position: relative;}
        </STYLE>
        <![endif]-->

    </head>

    <body style="">
        <div id="loadingcontainer" style=" background-color: #eeeeee; overflow:hidden; width:100%; height:100%; position: absolute; top: 0; left: 0;">
            <script type = "text/javascript">
                document.write("<div id='container'><p id='content'>" +
                               "<img id='loadgraphic' width='16' height='16' src='Resources/spinner.gif' /> " +
                               "Loading Untitled...</p></div>");
            </script>
    
            <noscript>
                <div id="container">
                    <div style="width: 440px; padding: 10px 25px 20px 25px; font-family: sans-serif; background-color: #ffffff; position: relative; left: -245px; top: -120px; text-align: center; -moz-border-radius: 20px; -webkit-border-radius: 20px; color: #555555">
                        <p style="line-height: 1.4em;">JavaScript is required for this site to work correctly but is either disabled or not supported by your browser.</p>
                        <p style="font-size:120%; padding:10px;"><a href="http://cappuccino.org/noscript">Show me how to enable JavaScript</a></p>
                        <p style="font-size:80%;">You may want to upgrade to a newer browser while you're at it:</p>
                        <ul style="margin:0;padding:0; text-align: center; font-size:80%;" >
                            <li style="display: inline;"><a href="http://www.apple.com/safari/download/">Safari</a></li>
                            <li style="display: inline;"><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
                            <li style="display: inline;"><a href="http://www.google.com/chrome/">Chrome</a></li>
                            <li style="display: inline;"><a href="http://www.opera.com/download/">Opera</a></li>
                            <li style="display: inline;"><a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer</a></li>
                        </ul>
                    </div>
                </div>
            </noscript>
        </div>
    </body>

</html>

Added Site/Site/index.html.









































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<!--
 index.html
 Site
 
 Created by Jim on 17/11/2010.
 Copyright __MyCompanyName__ 2010. All rights reserved.
-->
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

        <title>Site</title>

        <script type = "text/javascript">
            OBJJ_MAIN_FILE = "main.j";
        </script>
        
        <script src = "Frameworks/Objective-J/Objective-J.js" type = "text/javascript"></script>

        <style type = "text/css">
            body{margin:0; padding:0;}
            #container {position: absolute; top:50%; left:50%;}
            #content {width:800px; text-align:center; margin-left: -400px; height:50px; margin-top:-25px; line-height: 50px;}
            #content {font-family: "Helvetica", "Arial", sans-serif; font-size: 18px; color: black; text-shadow: 0px 1px 0px white; }
            #loadgraphic {margin-right: 0.2em; margin-bottom:-2px;}
        </style>

        <!--[if lt IE 7]>
        <STYLE type="text/css">
            #container { position: relative; top: 50%; }
            #content { position: relative;}
        </STYLE>
        <![endif]-->

    </head>

    <body style="">
        <div id="loadingcontainer" style=" background-color: #eeeeee; overflow:hidden; width:100%; height:100%; position: absolute; top: 0; left: 0;">
            <script type = "text/javascript">
                document.write("<div id='container'><p id='content'>" +
                               "<img id='loadgraphic' width='16' height='16' src='Resources/spinner.gif' /> " +
                               "Loading Site...</p></div>");
            </script>
    
            <noscript>
                <div id="container">
                    <div style="width: 440px; padding: 10px 25px 20px 25px; font-family: sans-serif; background-color: #ffffff; position: relative; left: -245px; top: -120px; text-align: center; -moz-border-radius: 20px; -webkit-border-radius: 20px; color: #555555">
                        <p style="line-height: 1.4em;">JavaScript is required for this site to work correctly but is either disabled or not supported by your browser.</p>
                        <p style="font-size:120%; padding:10px;"><a href="http://cappuccino.org/noscript">Show me how to enable JavaScript</a></p>
                        <p style="font-size:80%;">You may want to upgrade to a newer browser while you're at it:</p>
                        <ul style="margin:0;padding:0; text-align: center; font-size:80%;" >
                            <li style="display: inline;"><a href="http://www.apple.com/safari/download/">Safari</a></li>
                            <li style="display: inline;"><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
                            <li style="display: inline;"><a href="http://www.google.com/chrome/">Chrome</a></li>
                            <li style="display: inline;"><a href="http://www.opera.com/download/">Opera</a></li>
                            <li style="display: inline;"><a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer</a></li>
                        </ul>
                    </div>
                </div>
            </noscript>
        </div>
    </body>

</html>

Added Site/Site/main.j.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
 * main.j
 *  Site
 *
 *  Created by Jim on 17/11/2010.
 *  Copyright __MyCompanyName__ 2010. All rights reserved.
*/

@import <Foundation/Foundation.j>
@import <AppKit/AppKit.j>

@import "AppController.j"


CPLogRegister(CPLogPopup);

function main(args, namedArgs)
{
    CPApplicationMain(args, namedArgs);
}

Added Site/Site/myAppUtils.j.

































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
 *  myAppUtils.j
 *
 *	Utility functions for application
 *
 *  Created by Jim on 12/12/2010
 *  Copyright Pandora Products 2010. All rights reserved.
 *
 *	12-Dec-2010	Initial version
*/

@import <Foundation/CPObject.j>

@implementation myAppUtils : CPObject
{
	id parse_data;
	CPString response_data;
}

//-----------------------------------------------------------------------
/*
	(id)init	- Create object
	
	INPUT:	NONE
	
	OUTPUT:	created object
*/
//-----------------------------------------------------------------------

-(id)init
{
	self = [super init];
	
	return self;
}

//-----------------------------------------------------------------------
/*
	Objective J
	var getData(var url, var post )	- Get data from server via AJAX

	INPUT:	url		- URL location to get data
			post	- Boolean if true do POST, false do GET
			data	- Data for post (if any)

	OUTPUT:	TRUE if read OK
			Results available via
				getParse	- Parsed data
				getResponse	- Text response
*/
//-----------------------------------------------------------------------

-(Boolean)getData:(var)path PostState:(Boolean)post DataString:(var)data
{ 
	var client = new XMLHttpRequest();
	var representationOfDesiredState;
	var parse;
	var str;
	var rtnval = false;
	
	// (1) GET/POST ? If Post get extra data
	if( post )
	{
		client.open("POST",path,false);
		representationOfDesiredState = data;
	}
	else
	{
		client.open("GET", path, false);
		representationOfDesiredState = "";
	}

	// (2) Set up request
	client.setRequestHeader("Content-Type", "text/plain");
	client.send(representationOfDesiredState);

	// (3) Show result
	if (client.status == 200)
	{
		str = [[CPString alloc] initWithString:client.responseText];
		parse = [str objectFromJSON ];
		
		response_data = str;
		parse_data = parse;
		rtnval = true;
	}
	else
	{
		parse_data = nil;
		response_data = nil;
		rtnval = false;
	}
	
	return rtnval;
}

//-----------------------------------------------------------------------
/*
	(id)getParse	- Return JSON parsed response
	
	INTPUT:	NONE
	
	OUTPUT:	Parsed JSON object
*/
//-----------------------------------------------------------------------

-(id)getParse
{
	return parse_data;
}

//-----------------------------------------------------------------------
/*
	(CPString)getResponse	- Get response text
	
	INPUT:	NONE
	
	OUTPUT:	Text of response
*/
//-----------------------------------------------------------------------

-(CPString)getResponse
{
	return response_data;
}


@end

Added Site/Site_J/Buttons/abort.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/abort.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/arm.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/arm.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/black.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/black32.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/disarm.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/disarm.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/fire.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/fire.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/grey.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/grey.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/grey32.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/no_disarm.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/no_disarm.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/no_run.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/no_run.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/no_status.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/no_status.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/orange.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/orange.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/orange32.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/red.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/red.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/red32.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/rest_cmds.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/run.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/run.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/status.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/status.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/yellow.graffle.

cannot compute difference between binary files

Added Site/Site_J/Buttons/yellow.png.

cannot compute difference between binary files

Added Site/Site_J/Buttons/yellow32.png.

cannot compute difference between binary files

Added Site/Site_J/auto.js.

























































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
// *************************************************
//
// AUTOMATIC RUN	- Selection part
//
//	18-Nov-2011	[7f829d5df2] Initial Version
//	 9-Feb-2013 Handle programming failures
//
// *************************************************

//var FNET_Status;
var FNET_NET_MAX = 30;		// Maximum net size
var FNET_NET_MIN = 1;
var FNET_NET_CH	= 6;
//var AUTO_RUN = false;		// Initial arm state
//var FNET_Ready = new Array();
//var FNET_ReadyCount = 0;

// Select GLOBALS

var SHOW_LIST = new Array();
var SELECT_ROW = null;
var SHOW_SELECT = 0;
var SHOW_TIME = 0;



//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//-----------------------------------------------------------------------
/*
	AUTO PAGE Major function
	
	DIV = AUTO_RUN_BLOCK
	
	Set up for show selection
*/
//-----------------------------------------------------------------------

function AUTO_Operation()
{
	var path;
	var result;
	var outmsg;
	
	// Clear the area...
	$("#AUTO_RUN_BLOCK").replaceWith("<div id=\"AUTO_RUN_BLOCK\"><p><center>...Loading...</center></div>");
	
	// Send out a list command and use it to get the shows structure
	
	path = lcnURI + "firenet/program/list";
	result = FNET_getData(path,true,"",true );
	
	// Build the show table from the result
	// And await user selection
	
	AUTO_ShowList(result)
}

//-----------------------------------------------------------------------
/*
		Setup Handling
*/
//-----------------------------------------------------------------------

function AUTO_ShowList( shows )
{
	var hdr;
	var body;
	var output;
	
	// Set up SHOW_LIST & clear previous
	
	SHOW_LIST = shows.shows;
	SHOW_SELECT = 0;
	SHOW_TiME = 0;
	
	// Set up the header for this table
	
	hdr = AUTO_BuildShowHeader();
	body = AUTO_BuildShowBody(SHOW_LIST);
	
	// Add the table and a select button
	
	output = "<div id=\"AUTO_RUN_BLOCK\"><p><center>";
	output = output + "<h2><center>SHOW LIST</center></h2>";
	output = output + "<table id=\"SHOW_TABLE\" border=1 align=center>";
	output = output + hdr + body;
	output = output + "</table></center>";
	output = output + "<p><center><button type=\"submit\" name=\"AUTO_SEL\" id=\"AUTO_SEL\">";
	output = output + "Select Show</button></center></div>";

	$("#AUTO_RUN_BLOCK").replaceWith( output );	
	
	// Set up event handlers
	
	$('#AUTO_SEL').click(AUTO_SEL_Handler);
}

//-----------------------------------------------------------------------
/*
		EVENT HANDLERS (for show slection)
*/
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
	--ROW SELECTION --
	
	AUTO_TBL_Handler(tblid)	- Handle press in table
	
	INPUT:	ID of button N##C#
	
	OUTPUT:	NONE
	
*/
//-----------------------------------------------------------------------

function AUTO_TBL_Handler(row)
{
	// Clear previous one
	
	if( SELECT_ROW != null )
	{
		$(SELECT_ROW).removeAttr("style");
    }
	
	// Select new row
	
	$(row).attr("style","background-color: #FF0000;");
    SELECT_ROW = row;
}

//-----------------------------------------------------------------------
/*
	-- BUTTON EVENT Select button --
	
	AUTO_TBL_Handler(tblid)	- Handle press in table
	
	INPUT:	ID of button N##C#
	
	OUTPUT:	NONE

*/
//-----------------------------------------------------------------------

function AUTO_SEL_Handler(tblid)
{
	var parts;
	var path;
	var result;
	
	// Is there a row selected, if not just bail
	
	if( SELECT_ROW != null )
	{
		// Pull out the ROW ID into the selected show
		
		parts = parseInt( SELECT_ROW.id ) - 1;	// Zero based array...
		SELECT_SHOW = SHOW_LIST[parts];
		
		// Calculate the show time
		
		parts = SELECT_SHOW.time.split(":");
		switch( parts.length )
		{
			case 0:		SHOW_TIME = 0;
						break;
						
			case 1:		SHOW_TIME = parseInt(parts[0]);
						break;
						
			case 2:		SHOW_TIME = 60 * parseInt(parts[0]);
						SHOW_TIME = SHOW_TIME + parseInt(parts[1]);
						break;
						
			case 3:		SHOW_TIME = 3600 * parseInt(parts[0]);
						SHOW_TIME = SHOW_TIME + 60 * parseInt(parts[1]);
						SHOW_TIME = SHOW_TIME + parseInt(parts[2]);
						break;
						
			default:	SHOW_TIME = 0;		// Something wrong...
						break;
		}
		
		// Next select the show 
		
		path = lcnURI + "firenet/program/set/" + SELECT_ROW.id;
		result = FNET_getData(path,true,"",true);
		if( result.STATUS == "OK" )
		{
			// Now program the nodes but first reset ALL of them
			
			$("#AUTO_RUN_BLOCK").replaceWith("<div id=\"AUTO_RUN_BLOCK\"><p><center><h2>...Programming nodes...</h2></center></div>");
			path = lcnURI + "firenet/program/pgm";
			result = FNET_getData(path,true,"",true);
			if( result.STATUS == "OK" )
			{
				$("#AUTO_RUN_BLOCK").replaceWith("<div id=\"AUTO_RUN_BLOCK\"><p><center>...READY...</center></div>");
				AUTO_RunOperation();
			}
			else
			{
				// Failed to program so go back to start
				outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center><h1>PGM FAILED...</h1></center>";
				outmsg = outmsg + "<p><h4><center>" + result.STATUS + "</center></h3></div>";
				$("#AUTO_RUN_BLOCK").replaceWith(outmsg);
				SHOW_SELECT = 0;
				SHOW_TIME = 0;
				SELECT_ROW = null;
				// Reset all nodes before returning
				path = lcnURI + "firenet/program/abort";
				result = FNET_getData(path,true,"",true);
				
				setTimeout(AUTO_Operation,5000)
            }
		}
		else
		{
			// Failed to load program so go back to start
			outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center><h1>PGM LOAD FAILED...</h1></center>";
			outmsg = outmsg + "<p><h4><center>" + result.STATUS + "</center></h3></div>";
			$("#AUTO_RUN_BLOCK").replaceWith(outmsg);
			SHOW_SELECT = 0;
			SHOW_TIME = 0;
			SELECT_ROW = null;
			
			// Reset all nodes before returning
			path = lcnURI + "firenet/program/abort";
			result = FNET_getData(path,true,"",true);

			setTimeout(AUTO_Operation,5000)
		}

	}
	
}

//-----------------------------------------------------------------------
/*
	AUTO_BuildShowHeader()
	
	INPUT:	NONE
	
	OUTPUT:	Return table header structure
*/
//-----------------------------------------------------------------------

function AUTO_BuildShowHeader()
{
	var tablehdr;
	var i;
	
	tablehdr = "<tr align=center>";
	tablehdr = tablehdr + "<th>#</th>";
	tablehdr = tablehdr + "<th>Show</th>";
	tablehdr = tablehdr + "<th>Time</th>";
	tablehdr = tablehdr + "<th>Nodes</th>";
	tablehdr = tablehdr + "</tr>";
	
	return tablehdr;
}
//-----------------------------------------------------------------------
/*
	AUTO_BuildShowBody(inventory)
	
	INPUT:	NONE
	
	OUTPUT:	Return table body structure
*/
//-----------------------------------------------------------------------

function AUTO_BuildShowBody( shows )
{
	var output = "";
	var i,j;
	var row;
	
	// Build each row
	
	for( i=0; i<100; i++ )
	{
		if( shows[i] != null )
		{
			j = i + 1;
			row = "<tr id=\"" + j + "\" onclick=\"AUTO_TBL_Handler(this);\">";
			
			row = row + "<td>" + j + "</td>";
			row = row + "<td>" + shows[i].show + "</td>";
			row = row + "<td>" + shows[i].time + "</td>";
			row = row + "<td>" + shows[i].nodes + "</td>"
			row = row + "</tr>";
		
			output = output + row;
		}
		else
			break;
	}
	
	return output;
}

Added Site/Site_J/autorest.js.





























>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Get the status
	// Clear the map [2fbacd1fdc]
	path = lcnURI + "firenet/status/C";
	result = FNET_getData(path,false,"" ,true);
	
	// Display the status
	result = AUTO_BuildTblFullStatus( result );
	outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center>" + result + AUTO_AddButtons();
	outmsg = outmsg + "</center></div>";
	$("#AUTO_RUN_BLOCK").replaceWith(outmsg);
	
	// Set up event handler
	
	$('input').click(AUTOEVENT_Handler);	

Added Site/Site_J/autorun.js.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
// *************************************************
//
// AUTOMATIC RUN	- Operation part
//
//	18-Nov-2011	[7f829d5df2] Initial Version
//
// *************************************************

// RUN Variables

var AUTO_RUN = false;
var AUTO_ARM = false;
var AUTO_RUN_TIME = 0;
var AUTO_RUN_START = 0;

//-----------------------------------------------------------------------
/*
	AUTO_RunOperation()	- Read network status and bring up major buttons
*/
//-----------------------------------------------------------------------

function AUTO_RunOperation()
{
var path;
	var result;
	var outmsg;
	
	// Clear the area...
	if( AUTO_RUN != true )
		$("#AUTO_RUN_BLOCK").replaceWith("<div id=\"AUTO_RUN_BLOCK\"><p><center>...Loading...</center></div>");
	
	// Get the status
	// Clear the map
	path = lcnURI + "firenet/status/C";
	result = FNET_getData(path,false,"" ,true);
	
	// Build the RUN display
	result = AUTO_BuildTblFullStatus( result );
	
	outmsg = AUTO_NewRunBlock( result );
	
	// Replace block
	
	$("#AUTO_RUN_BLOCK").replaceWith(outmsg);
	
	// Set up event handler
	
	$('input').click(AUTOEVENT_Handler);
}

//-----------------------------------------------------------------------
/*
		EVENT HANDLER (for ALL input fields)
*/
//-----------------------------------------------------------------------

function AUTOEVENT_Handler()
{	
	// Extract the ID
	// MANARM and MANFIRE are handled by special routines
	
	switch( this.id )
	{
		case "AUTOARM":		AUTOARM_Handler();
							break;

		case "AUTORUN":		AUTORUN_Handler();
							break;
							
		case "AUTOABORT":	AUTOABORT_Handler();
							break;
												
		case "AUTOSTATUS":	AUTOSTATUS_Handler();
							break;
		
		default:			break;
	}
}

//-----------------------------------------------------------------------
/*
		EVENT ARM Button - Send out message to ARM or DISARM all nodes
*/
//-----------------------------------------------------------------------

function AUTOARM_Handler()
{
	
	var path;
	var result;
	
	if( AUTO_RUN == false )
	{
		// Depending on FIRE status send an ARM or disarm command
		
		if( AUTO_ARM )
		{
			// Send a DISARM command
			
			path = lcnURI + "firenet/arm/0/D";
			AUTO_ARM=false;
		}
		else
		{
			// Send an ARM command
			
			path = lcnURI + "firenet/arm/0/A";
			AUTO_ARM=true;
		}
		
		// Output a message to show what we are doing
		
		outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center><h1>Processing...</h1></center></div>";
		$("#AUTO_RUN_BLOCK").replaceWith(outmsg);
		
		// Send the command then update the status
		// Allow network to settle before doing status
		
		result = FNET_getData(path,true,"" );
		
		setTimeout(AUTO_RunOperation,1000);
	}
}

//-----------------------------------------------------------------------
/*
		EVENT RUN Button - Do RUN or ABORT
*/
//-----------------------------------------------------------------------

function AUTORUN_Handler()
{
	
	var path;
	var result;
	
	if( AUTO_ARM == true )
	{
		if( AUTO_RUN == false )
		{
	
			// Depending on FIRE status send an ARM or disarm command	
			// Send (1) ARM
			//		(2) SYNC
			//		(3) ZP
			
			AUTO_RUN = true;
			
			// Output a message to show what we are doing
				
			outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center><h1>Processing...</h1></center></div>";
			$("#AUTO_RUN_BLOCK").replaceWith(outmsg);
		
			// Send the command then update the status
			// Allow network to settle before doing status
			FNET_SLEEP( 2000 );
			AUTO_RunOperation();
			
			// Now start running
			
			path = lcnURI + "firenet/program/start";
			result = FNET_getData(path,true,"",true );
			if( result.STATUS == "OK" )
			{
				AUTO_RUN_START = FNET_NOWMS();
				AUTO_RUN=true;	// SUCCESS
				AUTO_RUN_TIME = 0;	
				setTimeout(AUTO_RunMonitor,1000);
			}
			else
			{
				// FAILURE ----
				AUTO_RUN = false;
				AUTO_RunOperation();
			}
		}
		else
		{
			var path;
			var result;
			
			// Send an ABORT command
			
			path = lcnURI + "firenet/program/abort";
			result = FNET_getData(path,true,"" );
			
			// Output a message to show what we are doing
			
			outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center><h1>DONE...</h1></center></div>";
            $("#AUTO_RUN_BLOCK").replaceWith(outmsg);	
            
			// Send the command then update the status
			// Allow network to settle before doing status
			
			AUTO_RUN = false;
			AUTO_ARM = false;
			SHOW_SELECT = 0;
			SHOW_TIME = 0;
			SELECT_ROW = null;
			AUTO_RUN_TIME = 0;
			setTimeout(AUTO_Operation,500);
		}
	}
}

//-----------------------------------------------------------------------
/*
		RUN MONITOR
		
		This routine runs every 100 ms and does:
		
		(1) Updates time graph
		(2) Does a status check and updated fired pieces on display
*/
//-----------------------------------------------------------------------

function AUTO_RunMonitor()
{
	var plotval;
	var plotline;
	var outmsg;
	var elapsed;
	var runtime;
	var result;

	// (1) If not running the bail
	
	if( AUTO_RUN )
	{
		// (2) Update time and graph
		
		elapsed = FNET_NOWMS() - AUTO_RUN_START;
		elapsed = elapsed/1000.0;
		
		AUTO_RUN_TIME = elapsed;
		
		plotval = 100.0 * AUTO_RUN_TIME/SHOW_TIME
		plotline = [[1,plotval]];
		
		$.plot( $('#AUTO_PLOT_BLOCK'), [
				{ label: "SHOW", data:plotline, bars:{show:true }}
										],
			{ 	yaxis:{max:100.0, min:0 }, 
				xaxis:{ max:2,min:1, ticks:[[1.5, "SHOW"]] },
				legend: {show: false}
			}
		);
		
		// Send and receive STATUS message
		
		path = lcnURI + "firenet/program/status";
		result = FNET_getData(path,true,"",true );
		AUTO_StatusMsgHdlr( result );
			
		if( AUTO_RUN_TIME >= SHOW_TIME )
		{
			// End the show, update the screen and reset the boxes
			AUTO_RUN = false;
			outmsg = "<div id=\"AUTO_RUN_BLOCK\"><center><h1>DONE...</h1></center></div>";
            $("#AUTO_RUN_BLOCK").replaceWith(outmsg);
            
            path = lcnURI + "firenet/program/abort";
			result = FNET_getData(path,true,"" );

			AUTO_RUN = false;
			AUTO_ARM = false;       
            SHOW_SELECT = 0;
            SHOW_TIME = 0;
            SELECT_ROW = null;
            AUTO_RUN_TIME = 0;
            setTimeout(AUTO_Operation,500);
		}
		else
			setTimeout(AUTO_RunMonitor,1000);
	}
}

//-----------------------------------------------------------------------
/*
		EVENT STATUS Button - Update status display
*/
//-----------------------------------------------------------------------

function AUTOSTATUS_Handler()
{
	
	if( AUTO_RUN == false )
	{
		// Just update status and table
		
		AUTO_RunOperation();
		FNET_ReadyCount = 0;
	}
}


//-----------------------------------------------------------------------
/*
	-- STATUS HANDLER --
	
	AUTO_StatusMsgHdlr(status)	- Handle status message
	
	INPUT:	status message of the form:
				status.STATUS	- Status value
				status.FIRED	- Array of fired nodes
	
	OUTPUT:	NONE
	
		(a) Extract node and channel #
		(b) Set channel(s) as fired
		(c) Update table
*/
//-----------------------------------------------------------------------

function AUTO_StatusMsgHdlr(status)
{
	
	var n;
	var ch;
	var i;
	var node;
	var cmd;
	var result;
	var fire_list;
	
	// (1) If no fired list then bail
	
	if( status.FIRED != null )
	{
		fire_list = status.FIRED;
		
		// (2) Loop through list and marked fired
		
		for( i=0; i<fire_list.length; i++ )
		{
			n = parseInt(fire_list[i].FROM);
			ch = parseInt(fire_list[i].CH) + 1;
			
			// Mark as fired
			
			node = FNET_Status[n];
			node.UNFIRED[ch] = "0";
			node.FIRED[ch] = "1";
		}
	
		// Update the table
		
		AUTO_UpdateTable();
	}
}

//-----------------------------------------------------------------------
/*
	-- SUPPORT FUNCTIONS ---
*/
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
	AUTO_BuildStatusTable()
	
	INPUT:	NONE
	
	OUTPUT:	Build table with current FNET value
*/
//-----------------------------------------------------------------------

function AUTO_BuildStatusTable()
{
	var result;
		
	// Add on the table
	
	result = "<div id=\"AUTO_TABLE\" >";
	result = result +  "<table id=\"AUTO_TABLE_TBL\" border=1 >";
	result = result + AUTO_BuildHeader();
	result = result + AUTO_BuildFullBody(FNET_Status);
	result = result + "</table>";
	result = result + "</div>";
	
	
	return result;
}

//-----------------------------------------------------------------------
/*
	AUTO_UpdateTable()
	
	INPUT:	FNET_Status	- Updated
	
	OUTPUT:	NONE
			Table update with new status values
*/
//-----------------------------------------------------------------------

function AUTO_UpdateTable()
{
	var result;
		
	// Add on the table
	
	result = AUTO_BuildStatusTable();	
	
	// & update
	
	$("#AUTO_TABLE").replaceWith(result);
}

//-----------------------------------------------------------------------
//				-- DISPLAY FUNCTIONS --
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
	AUTO_BuildTblFullStatus( fnetstatus )
	
	INPUT:	fnetstatus	- Firenet whole net status structure
	
	OUTPUT:	Table structure showing network status
*/
//-----------------------------------------------------------------------

function AUTO_BuildTblFullStatus( fnetstatus )
{
	var rtnval = "** FAILED **";
	var i;
	var indx;
	
	// (1) Check status and return FAIL if bad
	
	if( fnetstatus.STATUS == "SUCCESS" )
	{
		FNET_Status = new Array(FNET_NET_MAX);
		
		for( i=FNET_NET_MIN; i<= FNET_NET_MAX; i++ )
		{
			indx = i + "";
			FNET_Status[i] = fnetstatus[indx]
		}
		
		rtnval = AUTO_BuildStatusTable();
	}
	
	return rtnval;
}
		
//-----------------------------------------------------------------------
/*
	AUTO_BuildHeader()
	
	INPUT:	NONE
	
	OUTPUT:	Return table header structure
*/
//-----------------------------------------------------------------------

function AUTO_BuildHeader()
{
	var tablehdr;
	var i;
	
	tablehdr = "<tr align=center>";
	tablehdr = tablehdr + "<th>Node</th>";
	tablehdr = tablehdr + "<th>Arm</th>";
	for( i=FNET_NET_MIN; i<=FNET_NET_CH; i++ )
	{
		tablehdr = tablehdr + "<th>Ch " + i + "</th>";
	}
	tablehdr = tablehdr + "<th>---</th>";
	tablehdr = tablehdr + "<th>Node</th>";
	tablehdr = tablehdr + "<th>Arm</th>";
	for( i=FNET_NET_MIN; i<=FNET_NET_CH; i++ )
	{
		tablehdr = tablehdr + "<th>Ch " + i + "</th>";
	}
	tablehdr = tablehdr + "</tr>";
	
	return tablehdr;
}

//-----------------------------------------------------------------------
/*
	AUTO_BuildTblFullBody( fnetstatus )
	
	INPUT:	fnetstatus	- Array with node present in the network defined
							Array size = FNET_NET_MAX
	
	OUTPUT:	Table structure showing network status
*/
//-----------------------------------------------------------------------

function AUTO_BuildFullBody( fnetstatus )
{
	var i;
	var pass = 0;
	var result = "";
	var node;
	var row = "";
	
	// Build the table as two columns of nodes
	
	for( i=FNET_NET_MIN; i<=FNET_NET_MAX; i++ )
	{
		// Get a node
		
		node = FNET_Status[i];
		if( node != null )
		{
			// Build node element of the row
			
			row = AUTO_BuildNode( i,node );
			
			if( pass == 0 )
			{
				// First part of the row
				result = result + "<tr align=center> " + row;
				pass = pass + 1;
			}
			else
			{
				// End of a row
				pass = 0;	// Start a new row
				result = result + "<td>---</td>" + row;
				result = result + "</tr>\r";
			}
		}
	}
		
	// If we come out here with pass == 1 then we have to 
	// end a row
	
	if( pass == 1 )
	{
		result = result + "</tr>\r";
	}
	
	return result;	
}

//-----------------------------------------------------------------------
/*
	AUTO_BuildNode( n,node )
	
	INPUT:	n		- Node #
			node	- Data for a single node
					node.ARMED	- A/D
					node
	
	OUTPUT:	Turn node array into an row in an HTML array
			with cell indexes in ARMED of N#
			with cell indexs in CHANNELS of N#C#
			
	Rules:	ARMED	- D		All Channels shown as GREY		Buttons/grey32.png
	
			ARMED	- A		Fired channel  BLACK			Buttons/yblack2.png
							Unfired not present	- GREY		Buttons/grey32.png
							Unfired present		- YELLOW	Buttons/orange32.png
	Return data is just the node data not the <tr></tr> and not 
					the <td>---</td> in the middle
*/
//-----------------------------------------------------------------------

function AUTO_BuildNode( n,node )
{
	var result = "";
	var armed=false;
	var i;
	var part;
	
	// Do the NODE #
	
	result = "<td>" + n + "</td>";
	
	// Now do the ARMED stuff
	
	result = result + "<td><a><img id=\"NODE" + n + "A\" src=\"";
	if( node.ARMED == "1" )
	{
		armed = true;
	}
		
	if( armed )
		result = result + "Buttons/red32.png";
	else
		result = result + "Buttons/black32.png";
		
	
	result = result + "\" /></a></td>";
	
	// Do the nodes
	
	for( i=1; i<= FNET_NET_CH; i++ )
	{
		part = "<td><a><input type=\"image\" id=\"N";
		part = part + parseInt(n/10);
		part = part + n%10 + "C" + i + "\" src=\"";
		if( armed == false )
		{
			part = part + "Buttons/grey32.png";
		}
		else
		{
			if( node.FIRED[i] == "1" )
			{
				part = part + "Buttons/black32.png";
			}
			else
			{
				switch( node.UNFIRED[i] )
				{
					case "1":	part = part + "Buttons/orange32.png";	// Ready node
								break;
					
					case "2":	part = part + "Buttons/red32.png";		// Selected node
								break;
								
					default:	part = part + "Buttons/grey32.png";		// Unknown node
								break;
				}
			}		
		}
		
		result = result + part;
		result = result + "\" /></a></td>";
	}
	
	return result;
}

//-----------------------------------------------------------------------
/*
	function AUTO_AddButtons()
	
	INPUT:	NONE
	
	OUTPUT:	Return ARM, RUN & ABORT
*/
//-----------------------------------------------------------------------

function AUTO_AddButtons()
{
	var rtnval;
	
	// Add STATUS, ARM, RUN-ABORT buttons on display
	
	rtnval = "<center>";
	//rtnval = "";
	rtnval = "<div id=\"AUTO_BUTTON_BLOCK\">";
	
	// Status button
	
	if( AUTO_RUN )
		rtnval = rtnval +  "<input id=\"AUTOSTATUS\"  type=\"image\" src=\"Buttons/no_status.png\" />";
	else
		rtnval = rtnval +  "<input id=\"AUTOSTATUS\"  type=\"image\" src=\"Buttons/status.png\" />";
	
	// ARM button
	
	if( AUTO_ARM )
	{
		if( AUTO_RUN )
			rtnval = rtnval +  "<input id=\"AUTOARM\"  type=\"image\" src=\"Buttons/no_disarm.png\" />";
		else
			rtnval = rtnval +  "<input id=\"AUTOARM\"  type=\"image\" src=\"Buttons/disarm.png\" />";
	}
	else
		rtnval = rtnval + "<input id=\"AUTOARM\" type=\"image\" src=\"Buttons/arm.png\" />";
		
	// RUN/ABORT button
	
	if( AUTO_ARM )
	{
		if( AUTO_RUN )
			rtnval = rtnval +  "<input id=\"AUTORUN\"  type=\"image\" src=\"Buttons/abort.png\" />";
		else
			rtnval = rtnval +  "<input id=\"AUTORUN\"  type=\"image\" src=\"Buttons/run.png\" />";
	}
	else
		rtnval = rtnval +  "<input id=\"AUTORUN\"  type=\"image\" src=\"Buttons/no_run.png\" />";

	rtnval = rtnval + "</center>";
	rtnval = rtnval + "</div>";
	
	return rtnval;
}

//-----------------------------------------------------------------------
/*
	AUTO_RemoveReady( n,ch )	- Remove channel from ready list
	
	INPUT:	n	- Node #
			ch	- Channel
			
	OUTPUT:	If this value is in ready list, remove it
*/
//-----------------------------------------------------------------------

function AUTO_RemoveReady( n,ch )
{
	var i;
	
	// Scan through the list and remove matching element
	
	for( i=0; i<FNET_ReadyCount; i++ )
	{
		if( FNET_Ready[i].NODE == n && FNET_Ready[i].CH == ch )
		{
			FNET_Ready.splice(i,1);	// Remove element
			FNET_ReadyCount = FNET_ReadyCount - 1;
			break;
		}
	}
}

function AUTO_NewRunBlock( table )
{
	var outmsg;
	
	// Build the RUN display

	// Outer auto run block with status & buttons
	
	outmsg = "<div id=\"AUTO_RUN_BLOCK\">"
	
	// Add Table
	
	outmsg = outmsg + table;
	
	// Add Graph
	
	outmsg = outmsg + "<div id=\"AUTO_PLOT_BLOCK\" ></div>";
	
	// Buttons

	outmsg = outmsg + AUTO_AddButtons();
	
	// Close AUTO_RUN_BLOCK
	
	outmsg = outmsg + "</div>";
	
	return outmsg;
}

Added Site/Site_J/index.html.



































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xthml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
	<head>
		<meta http-equiv="Content-Type" 
		content="text/html; charset=utf-8" />
		<title>FIRENET</title>
		
		<!-- CSS Sheets for the page -->
		<link href="style.css" rel="stylesheet" type="text/css"/>
		
		<!-- SCRIPT AREA ---------------------------- -->
		<script type="text/javascript" src="jquery.js"></script> 
		<script type="text/javascript" src="jquery.flot.js"></script>
		<script type="text/javascript" src="support.js"> </script> 
		<script type="text/javascript" src="manual.js"> </script>
		<script type="text/javascript" src="auto.js"> </script>
		<script type="text/javascript" src="autorun.js"> </script>
		<script type="text/javascript" src="inventory.js"> </script>
		<script type="text/javascript" src="indexjava.js"> </script>  
		 
	</head>                                                                 
 	<body>
 		<!-- HTML AREA ----------------------------- -->
 		
 		<!-- Header area -->
 		
 		<div id="header" class="outline">
 			<center><h2>FIRENET</h2></center>
 			<center><h3>Pandora Products</h3></center>
 		</div>
 		
 		<!-- Navigation area -->
 		
 		<div id="mainnav" class="outline">
 			<center><h3>Controls<h3></center>
 				<a id="LOGIN_LINK" class="nudged">Login</a>
 			<p>
 				<a id="RUN_DEBUG" class="nudged">Debug</a>
 			<p>
 				<a id="RUN_INV" class="nudged">Inventory</a>
 			<p>
 				<a id="RUN_MAN" class="nudged">Manual</a>
 			<p>
 				<a id="RUN_AUTO" class="nudged">Auto</a> 
 			<p>
 				<a id="LOGOUT_LINK" class="nudged">Logout</a>
 		</div>
 		
 		<!-- Control area -->
 		
 		<div id="maincntl" class="outline">
 			<center><h2>Operation<h2></center>
 			
 			<!-- IDLE TEXT -->
 			<div id="IDLE" >
				<p  class="nudged">
					The <strong>FIRENET</strong>  system is a networked firing system.
					It uses an RS-485 network between each node. Each node is capabible
					of firing up to 6 pieces. The network is then connected to a computer controller which
					is a web server using a RESTful control interface to the network.  The user interface is
					a web page (i.e. this one) and you control the firing from here.
				</p>
				<p  class="nudged">
					The nodes have built in monitering capability that can check if a piece is 
					wired correctly and when it is fired.  In addition the nodes can be synchronized
					so pieces can be fired simultaneously by multiple nodes.
				</p>
				<p class="nudged">
					<center><h3><strong>NOTE: You must login in before any use of the system</strong></h3></center>
				</p>
			</div>
			
			<!-- RUN TEXT -->
			<div id="RUN">
				<center><h2>- RUN -</h2></center>
			</div>
			
			<!-- DEBUG Text -->
			<div id="DEBUG_RUN">
				<center><h2>-- DEBUG --</h2></center>
				<center><h3>Command</h3></center>
				<center><input type="text" name="DEBUG_CMD" id="DEBUG_CMD" /></center>
				<br />
				<center><input type="checkbox" name="DEBUG_POST" id="DEBUG_POST" />Post</center>
				<br />
				<center><input type="submit" name="DEBUG_SUB" id="DEBUG_SUB" /></center>
				<center>
					<textarea id="DEBUG_OUTPUT" cols=64 rows=8>Debug Result</textarea>
				</center>
			</div>
			
			<!-- MANUAL Text -->
			<div id="MANUAL_RUN">
				<div id="MANUAL_RUN_BLOCK">
					<center><h2>-- MANUAL --</h2></center>
				</div>
			</div>
			
			<!-- INVENTORY Text -->
			<div id="INV_RUN">
				<center><h2>-- INVENTORY --</h2></center>
				<div id="INV_RUN_BLOCK">
					<center><h2>-- PROCESSING --</h2></center>
				</div>
			</div>
			
			<!-- LOGIN TEXT -->
			<div id="LOGIN">
				<center><h2>- LOGIN -</h2></center>
				<center><h3>Enter a Response for the Challenge</h3></center>
				<center>Challenge</center>
				<center><input type="text" name="LOGIN_CHAL" id="LOGIN_CHAL" /></center>
				<p>
				<center>Response</center>
				<center><input type="text" name="LOGIN_RESP" id="LOGIN_RESP" /></center>
				<p>
				<center><input type="submit" name="LOGIN_SUB" id="LOGIN_SUB" /></center>
			</div>	
			
			<!-- AUTO Text -->
			<div id="AUTO_RUN">
				<div id="AUTO_RUN_BLOCK">
					<center><h2>-- AUTO --</h2></center>
				</div>
			</div>	
 		</div>
 	</body>                                                                 
 </html>

Added Site/Site_J/indexjava.js.



















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
// *************************************************
//
// INDEX PAGE JAVA SCRIPT
//
//	12-Feb-2011	Initial Version
//	13-Feb-2011	Added REST code & login actions
//	 9-Mar-2011 Added disable/enable login actions
//	14-May-2011 Add Inventory page
//	18-Nov-2011 [7f829d5df2] Add Auto operation
//
// *************************************************

// Main handler document control


var login_action = false;	// SET FALSE to disable LOGIN
var lcnURI;

// Get location for REST TARGETS

lcnURI = window.location.protocol + "//" + window.location.hostname + ":"
				+ window.location.port + "/rest/";

//-----------------------------------------------------------------------
/*
	ready section (main) Run when document ready

	Look for main link presses here
	Cycles between IDLE - LOGIN - RUN states
*/
//-----------------------------------------------------------------------

$(document).ready
(	

	function() 
	{
		
		// Run first to startup
		
		FNET_swToIdle();

	   // *************************
	   // Page Actions
	   
		$("#LOGIN_LINK").click			// Login
		(
			function() 
			{ 

				FNET_swToLogin();
				if( login_action )
				{
					if ( login_prep() === false )
					{
						FNET_swToIdle();	// FAILURE
					}
				}
				else
					FNET_swToRun();			// Run with no login
			}
		);
		
			
		$("#LOGOUT_LINK").click			// Logout
		(
			function() 
			{ 
				logout_action();
				FNET_swToIdle();
			}
		);
		
		// Login Submit action
		
		$("#LOGIN_SUB").click			// Login SUBMIT
		(
			function() 
			{ 
				if( login_check() )
				{
					FNET_swToRun();		// Success
				}
				else
				{
					FNET_swToIdle();	// FAILURE 
				}
			}
		);
	
		
		$("#RUN_DEBUG").click			// DEBUG
		(
			function()
			{
				DEBUG_SwToDebug();
			}
		);
		
		$("#DEBUG_SUB").click
		(
			function()
			{
				DEBUG_Action();
			}
		);
		
		$("#RUN_MAN").click				// MANUAL RUN
		(
			function()
			{
				MANUAL_SwToManual();
			}
		);

		$("#RUN_INV").click				// INVENTORY RUN
		(
			function()
			{
				INV_SwToInv();
			}
		);
		
		
		$("#RUN_AUTO").click			// AUTO RUN
		(
			function()
			{
				AUTO_SwToAuto();
			}
		);
	}
); 

//-----------------------------------------------------------------------
/*
	login_prep()	- Get Login challenge

	INPUT:	NONE

	OUTPUT:	Sets Challenge field if ready, returns true
			false if problem
			
	NOTE: Also does a LOGOUT first
*/
//-----------------------------------------------------------------------

function login_prep()
{
	var path;
	var result;
	
	// Logout if we haven't
	path = lcnURI + "admin/login/logout";
	result = FNET_getData(path,true,"" );
	
	// Get the Challenge
	path = lcnURI + "admin/login/request";
	result = FNET_getData(path,false,"",true );
	if ( result !== null && result.CHAL !== null)
	{
		$('input[name="LOGIN_CHAL"]').val(result.CHAL);
		result = true;
	}
	else
	{
		result = false;	// FAILURE
	}
}

//-----------------------------------------------------------------------
/*
	login_check()	- Send the log in response

	INPUT:	NONE
			Reads LOGIN_RESP field

	OUTPUT:	If challenge correct returns true
			false if problem
			
*/
//-----------------------------------------------------------------------

function login_check()
{
	var path;
	var result;
	
	// Return the challenge
	// Note upper case it
	result = $('input[name="LOGIN_RESP"]').val();
	result = result.toUpperCase();
	
	path = lcnURI + "admin/login/response/" + result;
	result = FNET_getData(path,true,"" ,true);
	
	if ( result !== null && result.LOGIN === "OK" )
	{
		$('input[name="LOGIN_CHAL"]').val("");
		$('input[name="LOGIN_RESP"]').val("");
		result = true;
	}
	else
	{
		result = false;	// FAILURE
	}
	
	return result;
}

//-----------------------------------------------------------------------
/*
	logout_action()	- logout

	INPUT:	Sends LOGOUT message

	OUTPUT:	true if success
			false if not			
*/
//-----------------------------------------------------------------------

function logout_action()
{
	var path;
	var result;
	
	// Send a DISARM command to the array
	
	path = lcnURI + "firenet/arm/0/D";
	result = FNET_getData(path,true,"" );
	
	// Logout 
	path = lcnURI + "admin/login/logout";
	result = FNET_getData(path,true,"" ,true);
	
	
	if ( result !== null && result.LOGOUT === "OK" )
	{
		result = true;
	}
	else
	{
		result = false;	// FAILURE
	}
}

//-----------------------------------------------------------------------
/*
	DEBUG_Action()	- Do DEBUG operation

	INPUT:	Sends current command

	OUTPUT:	NONE			
*/
//-----------------------------------------------------------------------

function DEBUG_Action()
{
	var path;
	var result;
	var post_state = $('#DEBUG_POST:checked').val();
	
	if( post_state === undefined )
		post_state = "off";
	if( post_state == "on" )
		post_state = true;
	else
		post_state = false;
	
	// Get the user input and upper case it
	result = $('input[name="DEBUG_CMD"]').val();
	result = result.toUpperCase();
	
	path = lcnURI +  result;
	result = FNET_getData(path,post_state,"",false );
	
	var textarea = jQuery('textarea#DEBUG_OUTPUT');
	
	textarea.val(result);
}

Added Site/Site_J/inventory.js.



















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
// *************************************************
//
// INVENTORY PAGE
//
//	11-May-2011	Initial Version
//
// *************************************************

var FNET_IStatus;
var FNET_Inventory;
var FNET_NET_MAX = 30;		// Maximum net size
var FNET_NET_MIN = 1;

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//-----------------------------------------------------------------------
/*
	INVENTORY PAGE Major function
	
	DIV = INV_RUN_BLOCK
	
	(1) On entrance replace MANUAL_RUN with
			... Loading ....
			And read status
*/
//-----------------------------------------------------------------------

function INVENTORY_Operation()
{
	var path;
	var result;
	var outmsg;
	
	// Clear the area...
	$("#INV_RUN_BLOCK").replaceWith("<div id=\"INV_RUN_BLOCK\"><p><center>...Loading...</center></div>");
	
//	path = "http://localhost:5010";
//	FNET_IStatus = FNET_getData(path,false,"",false);
	
	// Get the status
	// Clear the map [2fbacd1fdc]
	path = lcnURI + "firenet/status/C";
	FNET_IStatus = FNET_getData(path,false,"",true);

	// Build the inventory
	
	INVENTORY_Handler();
		
}

//-----------------------------------------------------------------------
/*
		Update inventory Information
*/
//-----------------------------------------------------------------------

function INVENTORY_Handler()
{
	var i;
	var indx;
	var hdr;
	var body;
	var output;
	
	// Create a new inventory array
	
	FNET_Inventory = new Array();
	
	// Scan through each node and get the inventory information
	
	for( i=FNET_NET_MIN; i<= FNET_NET_MAX; i++ )
	{
		indx = i + "";
		if( FNET_IStatus[indx] != null )
		{
			FNET_Inventory[i] = INVENTORY_NodeData( indx );
		}
	}
	
	// Now build the table for this run
	
	hdr = INVENTORY_BuildHeader();
	body = INVENTORY_BuildBody( FNET_Inventory );
	
	output = "<div id=\"INV_RUN_BLOCK\"><p><center>";
	output = output + "<table id=\"MANUAL_TABLE\" border=1 align=center>";
	output = output + hdr + body;
	output = output + "</table></center></div>";
	$("#INV_RUN_BLOCK").replaceWith( output );	
}

//-----------------------------------------------------------------------
/*
	-- SUPPORT FUNCTIONS ---
*/
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
		Get inventory information on 1 NODE
*/
//-----------------------------------------------------------------------
function INVENTORY_NodeData( node )
{
	var path;
	var result;
	var n;
	var output = new Array();
	
	// (1) Get the version information
	
	path = lcnURI + "firenet/version/" + node;
	result = INV_getData(path,false,"",true);
	
	output.VERSION = result.VERSION;
	
	// (2) Get the Firing time data
	
	path = lcnURI + "firenet/literal/" + node + "/T";
	result = INV_getData(path,true,"",true);
	
	result = result.DATA;
	n = result.length;
	output.FT = result.substring( n-4);

	// (3) Get the Backoff time data
	
	path = lcnURI + "firenet/literal/" + node + "/B";
	result = INV_getData(path,true,"",true);
	
	result = result.DATA;
	n = result.length;
	output.BACKOFF = result.substring( n-4);

	// (4) Get the Test mode data
	
	path = lcnURI + "firenet/literal/" + node + "/M";
	result = INV_getData(path,true,"",true);
	
	result = result.DATA;
	n = result.length;
	output.TEST = result.substring( n-1);
	
	
	return output;
}

function INV_getData( path, postState,data,flag )
{
	var count = 3;
	var result;
	
	while( count > 0 )
	{
		result = FNET_getData( path, postState,data,flag );
		if( result.STATUS == "XMIT" )
			break;
			
		FNET_SLEEP( 100 );
		count = count - 1
		
		result.DATA = "";
	}
	
	return result;
}
		
//-----------------------------------------------------------------------
//				-- DISPLAY FUNCTIONS --
//-----------------------------------------------------------------------

//-----------------------------------------------------------------------
/*
	INVENTORY_BuildHeader()
	
	INPUT:	NONE
	
	OUTPUT:	Return table header structure
*/
//-----------------------------------------------------------------------

function INVENTORY_BuildHeader()
{
	var tablehdr;
	var i;
	
	tablehdr = "<tr align=center>";
	tablehdr = tablehdr + "<th>Node</th>";
	tablehdr = tablehdr + "<th>Version</th>";
	tablehdr = tablehdr + "<th>Firing Time</th>";
	tablehdr = tablehdr + "<th>Backoff</th>";
	tablehdr = tablehdr + "<th>Test Mode</th>";
	tablehdr = tablehdr + "</tr>";
	
	return tablehdr;
}

//-----------------------------------------------------------------------
/*
	INVENTORY_BuildBody(inventory)
	
	INPUT:	NONE
	
	OUTPUT:	Return table body structure
*/
//-----------------------------------------------------------------------

function INVENTORY_BuildBody( inventory )
{
	var output = "";
	var i;
	
	// Build each row
	
	for( i=FNET_NET_MIN; i<= FNET_NET_MAX; i++ )
	{
		if( inventory[i] != null )
		{
			row = "<tr>";
			
			row = row + "<td>" + i + "</td>";
			row = row + "<td>" + inventory[i].VERSION + "</td>";
			row = row + "<td>" + inventory[i].FT + "</td>";
			row = row + "<td>" + inventory[i].BACKOFF + "</td>"
			row = row + "<td>" + inventory[i].TEST + "</td>"
			row = row + "</tr>";
		
			output = output + row;
		}
	}
	
	return output;
}

Added Site/Site_J/jquery.flot.js.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
/* Javascript plotting library for jQuery, version 0.8.2.

Copyright (c) 2007-2013 IOLA and Ole Laursen.
Licensed under the MIT license.

*/

// first an inline dependency, jquery.colorhelpers.js, we inline it here
// for convenience

/* Plugin for jQuery for working with colors.
 *
 * Version 1.1.
 *
 * Inspiration from jQuery color animation plugin by John Resig.
 *
 * Released under the MIT license by Ole Laursen, October 2009.
 *
 * Examples:
 *
 *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
 *   var c = $.color.extract($("#mydiv"), 'background-color');
 *   console.log(c.r, c.g, c.b, c.a);
 *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
 *
 * Note that .scale() and .add() return the same modified object
 * instead of making a new one.
 *
 * V. 1.1: Fix error handling so e.g. parsing an empty string does
 * produce a color rather than just crashing.
 */
(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);

// the actual Flot code
(function($) {

	// Cache the prototype hasOwnProperty for faster access

	var hasOwnProperty = Object.prototype.hasOwnProperty;

	///////////////////////////////////////////////////////////////////////////
	// The Canvas object is a wrapper around an HTML5 <canvas> tag.
	//
	// @constructor
	// @param {string} cls List of classes to apply to the canvas.
	// @param {element} container Element onto which to append the canvas.
	//
	// Requiring a container is a little iffy, but unfortunately canvas
	// operations don't work unless the canvas is attached to the DOM.

	function Canvas(cls, container) {

		var element = container.children("." + cls)[0];

		if (element == null) {

			element = document.createElement("canvas");
			element.className = cls;

			$(element).css({ direction: "ltr", position: "absolute", left: 0, top: 0 })
				.appendTo(container);

			// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas

			if (!element.getContext) {
				if (window.G_vmlCanvasManager) {
					element = window.G_vmlCanvasManager.initElement(element);
				} else {
					throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");
				}
			}
		}

		this.element = element;

		var context = this.context = element.getContext("2d");

		// Determine the screen's ratio of physical to device-independent
		// pixels.  This is the ratio between the canvas width that the browser
		// advertises and the number of pixels actually present in that space.

		// The iPhone 4, for example, has a device-independent width of 320px,
		// but its screen is actually 640px wide.  It therefore has a pixel
		// ratio of 2, while most normal devices have a ratio of 1.

		var devicePixelRatio = window.devicePixelRatio || 1,
			backingStoreRatio =
				context.webkitBackingStorePixelRatio ||
				context.mozBackingStorePixelRatio ||
				context.msBackingStorePixelRatio ||
				context.oBackingStorePixelRatio ||
				context.backingStorePixelRatio || 1;

		this.pixelRatio = devicePixelRatio / backingStoreRatio;

		// Size the canvas to match the internal dimensions of its container

		this.resize(container.width(), container.height());

		// Collection of HTML div layers for text overlaid onto the canvas

		this.textContainer = null;
		this.text = {};

		// Cache of text fragments and metrics, so we can avoid expensively
		// re-calculating them when the plot is re-rendered in a loop.

		this._textCache = {};
	}

	// Resizes the canvas to the given dimensions.
	//
	// @param {number} width New width of the canvas, in pixels.
	// @param {number} width New height of the canvas, in pixels.

	Canvas.prototype.resize = function(width, height) {

		if (width <= 0 || height <= 0) {
			throw new Error("Invalid dimensions for plot, width = " + width + ", height = " + height);
		}

		var element = this.element,
			context = this.context,
			pixelRatio = this.pixelRatio;

		// Resize the canvas, increasing its density based on the display's
		// pixel ratio; basically giving it more pixels without increasing the
		// size of its element, to take advantage of the fact that retina
		// displays have that many more pixels in the same advertised space.

		// Resizing should reset the state (excanvas seems to be buggy though)

		if (this.width != width) {
			element.width = width * pixelRatio;
			element.style.width = width + "px";
			this.width = width;
		}

		if (this.height != height) {
			element.height = height * pixelRatio;
			element.style.height = height + "px";
			this.height = height;
		}

		// Save the context, so we can reset in case we get replotted.  The
		// restore ensure that we're really back at the initial state, and
		// should be safe even if we haven't saved the initial state yet.

		context.restore();
		context.save();

		// Scale the coordinate space to match the display density; so even though we
		// may have twice as many pixels, we still want lines and other drawing to
		// appear at the same size; the extra pixels will just make them crisper.

		context.scale(pixelRatio, pixelRatio);
	};

	// Clears the entire canvas area, not including any overlaid HTML text

	Canvas.prototype.clear = function() {
		this.context.clearRect(0, 0, this.width, this.height);
	};

	// Finishes rendering the canvas, including managing the text overlay.

	Canvas.prototype.render = function() {

		var cache = this._textCache;

		// For each text layer, add elements marked as active that haven't
		// already been rendered, and remove those that are no longer active.

		for (var layerKey in cache) {
			if (hasOwnProperty.call(cache, layerKey)) {

				var layer = this.getTextLayer(layerKey),
					layerCache = cache[layerKey];

				layer.hide();

				for (var styleKey in layerCache) {
					if (hasOwnProperty.call(layerCache, styleKey)) {
						var styleCache = layerCache[styleKey];
						for (var key in styleCache) {
							if (hasOwnProperty.call(styleCache, key)) {

								var positions = styleCache[key].positions;

								for (var i = 0, position; position = positions[i]; i++) {
									if (position.active) {
										if (!position.rendered) {
											layer.append(position.element);
											position.rendered = true;
										}
									} else {
										positions.splice(i--, 1);
										if (position.rendered) {
											position.element.detach();
										}
									}
								}

								if (positions.length == 0) {
									delete styleCache[key];
								}
							}
						}
					}
				}

				layer.show();
			}
		}
	};

	// Creates (if necessary) and returns the text overlay container.
	//
	// @param {string} classes String of space-separated CSS classes used to
	//     uniquely identify the text layer.
	// @return {object} The jQuery-wrapped text-layer div.

	Canvas.prototype.getTextLayer = function(classes) {

		var layer = this.text[classes];

		// Create the text layer if it doesn't exist

		if (layer == null) {

			// Create the text layer container, if it doesn't exist

			if (this.textContainer == null) {
				this.textContainer = $("<div class='flot-text'></div>")
					.css({
						position: "absolute",
						top: 0,
						left: 0,
						bottom: 0,
						right: 0,
						'font-size': "smaller",
						color: "#545454"
					})
					.insertAfter(this.element);
			}

			layer = this.text[classes] = $("<div></div>")
				.addClass(classes)
				.css({
					position: "absolute",
					top: 0,
					left: 0,
					bottom: 0,
					right: 0
				})
				.appendTo(this.textContainer);
		}

		return layer;
	};

	// Creates (if necessary) and returns a text info object.
	//
	// The object looks like this:
	//
	// {
	//     width: Width of the text's wrapper div.
	//     height: Height of the text's wrapper div.
	//     element: The jQuery-wrapped HTML div containing the text.
	//     positions: Array of positions at which this text is drawn.
	// }
	//
	// The positions array contains objects that look like this:
	//
	// {
	//     active: Flag indicating whether the text should be visible.
	//     rendered: Flag indicating whether the text is currently visible.
	//     element: The jQuery-wrapped HTML div containing the text.
	//     x: X coordinate at which to draw the text.
	//     y: Y coordinate at which to draw the text.
	// }
	//
	// Each position after the first receives a clone of the original element.
	//
	// The idea is that that the width, height, and general 'identity' of the
	// text is constant no matter where it is placed; the placements are a
	// secondary property.
	//
	// Canvas maintains a cache of recently-used text info objects; getTextInfo
	// either returns the cached element or creates a new entry.
	//
	// @param {string} layer A string of space-separated CSS classes uniquely
	//     identifying the layer containing this text.
	// @param {string} text Text string to retrieve info for.
	// @param {(string|object)=} font Either a string of space-separated CSS
	//     classes or a font-spec object, defining the text's font and style.
	// @param {number=} angle Angle at which to rotate the text, in degrees.
	//     Angle is currently unused, it will be implemented in the future.
	// @param {number=} width Maximum width of the text before it wraps.
	// @return {object} a text info object.

	Canvas.prototype.getTextInfo = function(layer, text, font, angle, width) {

		var textStyle, layerCache, styleCache, info;

		// Cast the value to a string, in case we were given a number or such

		text = "" + text;

		// If the font is a font-spec object, generate a CSS font definition

		if (typeof font === "object") {
			textStyle = font.style + " " + font.variant + " " + font.weight + " " + font.size + "px/" + font.lineHeight + "px " + font.family;
		} else {
			textStyle = font;
		}

		// Retrieve (or create) the cache for the text's layer and styles

		layerCache = this._textCache[layer];

		if (layerCache == null) {
			layerCache = this._textCache[layer] = {};
		}

		styleCache = layerCache[textStyle];

		if (styleCache == null) {
			styleCache = layerCache[textStyle] = {};
		}

		info = styleCache[text];

		// If we can't find a matching element in our cache, create a new one

		if (info == null) {

			var element = $("<div></div>").html(text)
				.css({
					position: "absolute",
					'max-width': width,
					top: -9999
				})
				.appendTo(this.getTextLayer(layer));

			if (typeof font === "object") {
				element.css({
					font: textStyle,
					color: font.color
				});
			} else if (typeof font === "string") {
				element.addClass(font);
			}

			info = styleCache[text] = {
				width: element.outerWidth(true),
				height: element.outerHeight(true),
				element: element,
				positions: []
			};

			element.detach();
		}

		return info;
	};

	// Adds a text string to the canvas text overlay.
	//
	// The text isn't drawn immediately; it is marked as rendering, which will
	// result in its addition to the canvas on the next render pass.
	//
	// @param {string} layer A string of space-separated CSS classes uniquely
	//     identifying the layer containing this text.
	// @param {number} x X coordinate at which to draw the text.
	// @param {number} y Y coordinate at which to draw the text.
	// @param {string} text Text string to draw.
	// @param {(string|object)=} font Either a string of space-separated CSS
	//     classes or a font-spec object, defining the text's font and style.
	// @param {number=} angle Angle at which to rotate the text, in degrees.
	//     Angle is currently unused, it will be implemented in the future.
	// @param {number=} width Maximum width of the text before it wraps.
	// @param {string=} halign Horizontal alignment of the text; either "left",
	//     "center" or "right".
	// @param {string=} valign Vertical alignment of the text; either "top",
	//     "middle" or "bottom".

	Canvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {

		var info = this.getTextInfo(layer, text, font, angle, width),
			positions = info.positions;

		// Tweak the div's position to match the text's alignment

		if (halign == "center") {
			x -= info.width / 2;
		} else if (halign == "right") {
			x -= info.width;
		}

		if (valign == "middle") {
			y -= info.height / 2;
		} else if (valign == "bottom") {
			y -= info.height;
		}

		// Determine whether this text already exists at this position.
		// If so, mark it for inclusion in the next render pass.

		for (var i = 0, position; position = positions[i]; i++) {
			if (position.x == x && position.y == y) {
				position.active = true;
				return;
			}
		}

		// If the text doesn't exist at this position, create a new entry

		// For the very first position we'll re-use the original element,
		// while for subsequent ones we'll clone it.

		position = {
			active: true,
			rendered: false,
			element: positions.length ? info.element.clone() : info.element,
			x: x,
			y: y
		};

		positions.push(position);

		// Move the element to its final position within the container

		position.element.css({
			top: Math.round(y),
			left: Math.round(x),
			'text-align': halign	// In case the text wraps
		});
	};

	// Removes one or more text strings from the canvas text overlay.
	//
	// If no parameters are given, all text within the layer is removed.
	//
	// Note that the text is not immediately removed; it is simply marked as
	// inactive, which will result in its removal on the next render pass.
	// This avoids the performance penalty for 'clear and redraw' behavior,
	// where we potentially get rid of all text on a layer, but will likely
	// add back most or all of it later, as when redrawing axes, for example.
	//
	// @param {string} layer A string of space-separated CSS classes uniquely
	//     identifying the layer containing this text.
	// @param {number=} x X coordinate of the text.
	// @param {number=} y Y coordinate of the text.
	// @param {string=} text Text string to remove.
	// @param {(string|object)=} font Either a string of space-separated CSS
	//     classes or a font-spec object, defining the text's font and style.
	// @param {number=} angle Angle at which the text is rotated, in degrees.
	//     Angle is currently unused, it will be implemented in the future.

	Canvas.prototype.removeText = function(layer, x, y, text, font, angle) {
		if (text == null) {
			var layerCache = this._textCache[layer];
			if (layerCache != null) {
				for (var styleKey in layerCache) {
					if (hasOwnProperty.call(layerCache, styleKey)) {
						var styleCache = layerCache[styleKey];
						for (var key in styleCache) {
							if (hasOwnProperty.call(styleCache, key)) {
								var positions = styleCache[key].positions;
								for (var i = 0, position; position = positions[i]; i++) {
									position.active = false;
								}
							}
						}
					}
				}
			}
		} else {
			var positions = this.getTextInfo(layer, text, font, angle).positions;
			for (var i = 0, position; position = positions[i]; i++) {
				if (position.x == x && position.y == y) {
					position.active = false;
				}
			}
		}
	};

	///////////////////////////////////////////////////////////////////////////
	// The top-level container for the entire plot.

    function Plot(placeholder, data_, options_, plugins) {
        // data is on the form:
        //   [ series1, series2 ... ]
        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]
        // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }

        var series = [],
            options = {
                // the color theme used for graphs
                colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1, // number of colums in legend table
                    labelFormatter: null, // fn: string -> string
                    labelBoxBorderColor: "#ccc", // border color for the little label boxes
                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph
                    position: "ne", // position of default legend container within plot
                    margin: 5, // distance from grid edge to default legend container within plot
                    backgroundColor: null, // null means auto-detect
                    backgroundOpacity: 0.85, // set to 0 to avoid background
                    sorted: null    // default to no legend sorting
                },
                xaxis: {
                    show: null, // null = auto-detect, true = always, false = never
                    position: "bottom", // or "top"
                    mode: null, // null or "time"
                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }
                    color: null, // base color, labels, ticks
                    tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"
                    transform: null, // null or f: number -> number to transform axis
                    inverseTransform: null, // if transform is set, this should be the inverse function
                    min: null, // min. value to show, null means set automatically
                    max: null, // max. value to show, null means set automatically
                    autoscaleMargin: null, // margin in % to add if auto-setting min/max
                    ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
                    tickFormatter: null, // fn: number -> string
                    labelWidth: null, // size of tick labels in pixels
                    labelHeight: null,
                    reserveSpace: null, // whether to reserve space even if axis isn't shown
                    tickLength: null, // size in pixels of ticks, or "full" for whole line
                    alignTicksWithAxis: null, // axis number or null for no sync
                    tickDecimals: null, // no. of decimals, null means auto
                    tickSize: null, // number or [number, "unit"]
                    minTickSize: null // number or [number, "unit"]
                },
                yaxis: {
                    autoscaleMargin: 0.02,
                    position: "left" // or "right"
                },
                xaxes: [],
                yaxes: [],
                series: {
                    points: {
                        show: false,
                        radius: 3,
                        lineWidth: 2, // in pixels
                        fill: true,
                        fillColor: "#ffffff",
                        symbol: "circle" // or callback
                    },
                    lines: {
                        // we don't put in show: false so we can see
                        // whether lines were actively disabled
                        lineWidth: 2, // in pixels
                        fill: false,
                        fillColor: null,
                        steps: false
                        // Omit 'zero', so we can later default its value to
                        // match that of the 'fill' option.
                    },
                    bars: {
                        show: false,
                        lineWidth: 2, // in pixels
                        barWidth: 1, // in units of the x axis
                        fill: true,
                        fillColor: null,
                        align: "left", // "left", "right", or "center"
                        horizontal: false,
                        zero: true
                    },
                    shadowSize: 3,
                    highlightColor: null
                },
                grid: {
                    show: true,
                    aboveData: false,
                    color: "#545454", // primary color used for outline and labels
                    backgroundColor: null, // null for transparent, else color
                    borderColor: null, // set if different from the grid color
                    tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"
                    margin: 0, // distance from the canvas edge to the grid
                    labelMargin: 5, // in pixels
                    axisMargin: 8, // in pixels
                    borderWidth: 2, // in pixels
                    minBorderMargin: null, // in pixels, null means taken from points radius
                    markings: null, // array of ranges or fn: axes -> array of ranges
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,
                    // interactive stuff
                    clickable: false,
                    hoverable: false,
                    autoHighlight: true, // highlight in case mouse is near
                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item
                },
                interaction: {
                    redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow
                },
                hooks: {}
            },
        surface = null,     // the canvas for the plot itself
        overlay = null,     // canvas for interactive stuff on top of plot
        eventHolder = null, // jQuery object that events should be bound to
        ctx = null, octx = null,
        xaxes = [], yaxes = [],
        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
        plotWidth = 0, plotHeight = 0,
        hooks = {
            processOptions: [],
            processRawData: [],
            processDatapoints: [],
            processOffset: [],
            drawBackground: [],
            drawSeries: [],
            draw: [],
            bindEvents: [],
            drawOverlay: [],
            shutdown: []
        },
        plot = this;

        // public functions
        plot.setData = setData;
        plot.setupGrid = setupGrid;
        plot.draw = draw;
        plot.getPlaceholder = function() { return placeholder; };
        plot.getCanvas = function() { return surface.element; };
        plot.getPlotOffset = function() { return plotOffset; };
        plot.width = function () { return plotWidth; };
        plot.height = function () { return plotHeight; };
        plot.offset = function () {
            var o = eventHolder.offset();
            o.left += plotOffset.left;
            o.top += plotOffset.top;
            return o;
        };
        plot.getData = function () { return series; };
        plot.getAxes = function () {
            var res = {}, i;
            $.each(xaxes.concat(yaxes), function (_, axis) {
                if (axis)
                    res[axis.direction + (axis.n != 1 ? axis.n : "") + "axis"] = axis;
            });
            return res;
        };
        plot.getXAxes = function () { return xaxes; };
        plot.getYAxes = function () { return yaxes; };
        plot.c2p = canvasToAxisCoords;
        plot.p2c = axisToCanvasCoords;
        plot.getOptions = function () { return options; };
        plot.highlight = highlight;
        plot.unhighlight = unhighlight;
        plot.triggerRedrawOverlay = triggerRedrawOverlay;
        plot.pointOffset = function(point) {
            return {
                left: parseInt(xaxes[axisNumber(point, "x") - 1].p2c(+point.x) + plotOffset.left, 10),
                top: parseInt(yaxes[axisNumber(point, "y") - 1].p2c(+point.y) + plotOffset.top, 10)
            };
        };
        plot.shutdown = shutdown;
        plot.destroy = function () {
            shutdown();
            placeholder.removeData("plot").empty();

            series = [];
            options = null;
            surface = null;
            overlay = null;
            eventHolder = null;
            ctx = null;
            octx = null;
            xaxes = [];
            yaxes = [];
            hooks = null;
            highlights = [];
            plot = null;
        };
        plot.resize = function () {
        	var width = placeholder.width(),
        		height = placeholder.height();
            surface.resize(width, height);
            overlay.resize(width, height);
        };

        // public attributes
        plot.hooks = hooks;

        // initialize
        initPlugins(plot);
        parseOptions(options_);
        setupCanvases();
        setData(data_);
        setupGrid();
        draw();
        bindEvents();


        function executeHooks(hook, args) {
            args = [plot].concat(args);
            for (var i = 0; i < hook.length; ++i)
                hook[i].apply(this, args);
        }

        function initPlugins() {

            // References to key classes, allowing plugins to modify them

            var classes = {
                Canvas: Canvas
            };

            for (var i = 0; i < plugins.length; ++i) {
                var p = plugins[i];
                p.init(plot, classes);
                if (p.options)
                    $.extend(true, options, p.options);
            }
        }

        function parseOptions(opts) {

            $.extend(true, options, opts);

            // $.extend merges arrays, rather than replacing them.  When less
            // colors are provided than the size of the default palette, we
            // end up with those colors plus the remaining defaults, which is
            // not expected behavior; avoid it by replacing them here.

            if (opts && opts.colors) {
            	options.colors = opts.colors;
            }

            if (options.xaxis.color == null)
                options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();
            if (options.yaxis.color == null)
                options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();

            if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility
                options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;
            if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility
                options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;

            if (options.grid.borderColor == null)
                options.grid.borderColor = options.grid.color;
            if (options.grid.tickColor == null)
                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();

            // Fill in defaults for axis options, including any unspecified
            // font-spec fields, if a font-spec was provided.

            // If no x/y axis options were provided, create one of each anyway,
            // since the rest of the code assumes that they exist.

            var i, axisOptions, axisCount,
                fontSize = placeholder.css("font-size"),
                fontSizeDefault = fontSize ? +fontSize.replace("px", "") : 13,
                fontDefaults = {
                    style: placeholder.css("font-style"),
                    size: Math.round(0.8 * fontSizeDefault),
                    variant: placeholder.css("font-variant"),
                    weight: placeholder.css("font-weight"),
                    family: placeholder.css("font-family")
                };

            axisCount = options.xaxes.length || 1;
            for (i = 0; i < axisCount; ++i) {

                axisOptions = options.xaxes[i];
                if (axisOptions && !axisOptions.tickColor) {
                    axisOptions.tickColor = axisOptions.color;
                }

                axisOptions = $.extend(true, {}, options.xaxis, axisOptions);
                options.xaxes[i] = axisOptions;

                if (axisOptions.font) {
                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);
                    if (!axisOptions.font.color) {
                        axisOptions.font.color = axisOptions.color;
                    }
                    if (!axisOptions.font.lineHeight) {
                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);
                    }
                }
            }

            axisCount = options.yaxes.length || 1;
            for (i = 0; i < axisCount; ++i) {

                axisOptions = options.yaxes[i];
                if (axisOptions && !axisOptions.tickColor) {
                    axisOptions.tickColor = axisOptions.color;
                }

                axisOptions = $.extend(true, {}, options.yaxis, axisOptions);
                options.yaxes[i] = axisOptions;

                if (axisOptions.font) {
                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);
                    if (!axisOptions.font.color) {
                        axisOptions.font.color = axisOptions.color;
                    }
                    if (!axisOptions.font.lineHeight) {
                        axisOptions.font.lineHeight = Math.round(axisOptions.font.size * 1.15);
                    }
                }
            }

            // backwards compatibility, to be removed in future
            if (options.xaxis.noTicks && options.xaxis.ticks == null)
                options.xaxis.ticks = options.xaxis.noTicks;
            if (options.yaxis.noTicks && options.yaxis.ticks == null)
                options.yaxis.ticks = options.yaxis.noTicks;
            if (options.x2axis) {
                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);
                options.xaxes[1].position = "top";
            }
            if (options.y2axis) {
                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);
                options.yaxes[1].position = "right";
            }
            if (options.grid.coloredAreas)
                options.grid.markings = options.grid.coloredAreas;
            if (options.grid.coloredAreasColor)
                options.grid.markingsColor = options.grid.coloredAreasColor;
            if (options.lines)
                $.extend(true, options.series.lines, options.lines);
            if (options.points)
                $.extend(true, options.series.points, options.points);
            if (options.bars)
                $.extend(true, options.series.bars, options.bars);
            if (options.shadowSize != null)
                options.series.shadowSize = options.shadowSize;
            if (options.highlightColor != null)
                options.series.highlightColor = options.highlightColor;

            // save options on axes for future reference
            for (i = 0; i < options.xaxes.length; ++i)
                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];
            for (i = 0; i < options.yaxes.length; ++i)
                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];

            // add hooks from options
            for (var n in hooks)
                if (options.hooks[n] && options.hooks[n].length)
                    hooks[n] = hooks[n].concat(options.hooks[n]);

            executeHooks(hooks.processOptions, [options]);
        }

        function setData(d) {
            series = parseData(d);
            fillInSeriesOptions();
            processData();
        }

        function parseData(d) {
            var res = [];
            for (var i = 0; i < d.length; ++i) {
                var s = $.extend(true, {}, options.series);

                if (d[i].data != null) {
                    s.data = d[i].data; // move the data instead of deep-copy
                    delete d[i].data;

                    $.extend(true, s, d[i]);

                    d[i].data = s.data;
                }
                else
                    s.data = d[i];
                res.push(s);
            }

            return res;
        }

        function axisNumber(obj, coord) {
            var a = obj[coord + "axis"];
            if (typeof a == "object") // if we got a real axis, extract number
                a = a.n;
            if (typeof a != "number")
                a = 1; // default to first axis
            return a;
        }

        function allAxes() {
            // return flat array without annoying null entries
            return $.grep(xaxes.concat(yaxes), function (a) { return a; });
        }

        function canvasToAxisCoords(pos) {
            // return an object with x/y corresponding to all used axes
            var res = {}, i, axis;
            for (i = 0; i < xaxes.length; ++i) {
                axis = xaxes[i];
                if (axis && axis.used)
                    res["x" + axis.n] = axis.c2p(pos.left);
            }

            for (i = 0; i < yaxes.length; ++i) {
                axis = yaxes[i];
                if (axis && axis.used)
                    res["y" + axis.n] = axis.c2p(pos.top);
            }

            if (res.x1 !== undefined)
                res.x = res.x1;
            if (res.y1 !== undefined)
                res.y = res.y1;

            return res;
        }

        function axisToCanvasCoords(pos) {
            // get canvas coords from the first pair of x/y found in pos
            var res = {}, i, axis, key;

            for (i = 0; i < xaxes.length; ++i) {
                axis = xaxes[i];
                if (axis && axis.used) {
                    key = "x" + axis.n;
                    if (pos[key] == null && axis.n == 1)
                        key = "x";

                    if (pos[key] != null) {
                        res.left = axis.p2c(pos[key]);
                        break;
                    }
                }
            }

            for (i = 0; i < yaxes.length; ++i) {
                axis = yaxes[i];
                if (axis && axis.used) {
                    key = "y" + axis.n;
                    if (pos[key] == null && axis.n == 1)
                        key = "y";

                    if (pos[key] != null) {
                        res.top = axis.p2c(pos[key]);
                        break;
                    }
                }
            }

            return res;
        }

        function getOrCreateAxis(axes, number) {
            if (!axes[number - 1])
                axes[number - 1] = {
                    n: number, // save the number for future reference
                    direction: axes == xaxes ? "x" : "y",
                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)
                };

            return axes[number - 1];
        }

        function fillInSeriesOptions() {

            var neededColors = series.length, maxIndex = -1, i;

            // Subtract the number of series that already have fixed colors or
            // color indexes from the number that we still need to generate.

            for (i = 0; i < series.length; ++i) {
                var sc = series[i].color;
                if (sc != null) {
                    neededColors--;
                    if (typeof sc == "number" && sc > maxIndex) {
                        maxIndex = sc;
                    }
                }
            }

            // If any of the series have fixed color indexes, then we need to
            // generate at least as many colors as the highest index.

            if (neededColors <= maxIndex) {
                neededColors = maxIndex + 1;
            }

            // Generate all the colors, using first the option colors and then
            // variations on those colors once they're exhausted.

            var c, colors = [], colorPool = options.colors,
                colorPoolSize = colorPool.length, variation = 0;

            for (i = 0; i < neededColors; i++) {

                c = $.color.parse(colorPool[i % colorPoolSize] || "#666");

                // Each time we exhaust the colors in the pool we adjust
                // a scaling factor used to produce more variations on
                // those colors. The factor alternates negative/positive
                // to produce lighter/darker colors.

                // Reset the variation after every few cycles, or else
                // it will end up producing only white or black colors.

                if (i % colorPoolSize == 0 && i) {
                    if (variation >= 0) {
                        if (variation < 0.5) {
                            variation = -variation - 0.2;
                        } else variation = 0;
                    } else variation = -variation;
                }

                colors[i] = c.scale('rgb', 1 + variation);
            }

            // Finalize the series options, filling in their colors

            var colori = 0, s;
            for (i = 0; i < series.length; ++i) {
                s = series[i];

                // assign colors
                if (s.color == null) {
                    s.color = colors[colori].toString();
                    ++colori;
                }
                else if (typeof s.color == "number")
                    s.color = colors[s.color].toString();

                // turn on lines automatically in case nothing is set
                if (s.lines.show == null) {
                    var v, show = true;
                    for (v in s)
                        if (s[v] && s[v].show) {
                            show = false;
                            break;
                        }
                    if (show)
                        s.lines.show = true;
                }

                // If nothing was provided for lines.zero, default it to match
                // lines.fill, since areas by default should extend to zero.

                if (s.lines.zero == null) {
                    s.lines.zero = !!s.lines.fill;
                }

                // setup axes
                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, "x"));
                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, "y"));
            }
        }

        function processData() {
            var topSentry = Number.POSITIVE_INFINITY,
                bottomSentry = Number.NEGATIVE_INFINITY,
                fakeInfinity = Number.MAX_VALUE,
                i, j, k, m, length,
                s, points, ps, x, y, axis, val, f, p,
                data, format;

            function updateAxis(axis, min, max) {
                if (min < axis.datamin && min != -fakeInfinity)
                    axis.datamin = min;
                if (max > axis.datamax && max != fakeInfinity)
                    axis.datamax = max;
            }

            $.each(allAxes(), function (_, axis) {
                // init axis
                axis.datamin = topSentry;
                axis.datamax = bottomSentry;
                axis.used = false;
            });

            for (i = 0; i < series.length; ++i) {
                s = series[i];
                s.datapoints = { points: [] };

                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);
            }

            // first pass: clean and copy data
            for (i = 0; i < series.length; ++i) {
                s = series[i];

                data = s.data;
                format = s.datapoints.format;

                if (!format) {
                    format = [];
                    // find out how to copy
                    format.push({ x: true, number: true, required: true });
                    format.push({ y: true, number: true, required: true });

                    if (s.bars.show || (s.lines.show && s.lines.fill)) {
                        var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));
                        format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });
                        if (s.bars.horizontal) {
                            delete format[format.length - 1].y;
                            format[format.length - 1].x = true;
                        }
                    }

                    s.datapoints.format = format;
                }

                if (s.datapoints.pointsize != null)
                    continue; // already filled in

                s.datapoints.pointsize = format.length;

                ps = s.datapoints.pointsize;
                points = s.datapoints.points;

                var insertSteps = s.lines.show && s.lines.steps;
                s.xaxis.used = s.yaxis.used = true;

                for (j = k = 0; j < data.length; ++j, k += ps) {
                    p = data[j];

                    var nullify = p == null;
                    if (!nullify) {
                        for (m = 0; m < ps; ++m) {
                            val = p[m];
                            f = format[m];

                            if (f) {
                                if (f.number && val != null) {
                                    val = +val; // convert to number
                                    if (isNaN(val))
                                        val = null;
                                    else if (val == Infinity)
                                        val = fakeInfinity;
                                    else if (val == -Infinity)
                                        val = -fakeInfinity;
                                }

                                if (val == null) {
                                    if (f.required)
                                        nullify = true;

                                    if (f.defaultValue != null)
                                        val = f.defaultValue;
                                }
                            }

                            points[k + m] = val;
                        }
                    }

                    if (nullify) {
                        for (m = 0; m < ps; ++m) {
                            val = points[k + m];
                            if (val != null) {
                                f = format[m];
                                // extract min/max info
                                if (f.autoscale !== false) {
                                    if (f.x) {
                                        updateAxis(s.xaxis, val, val);
                                    }
                                    if (f.y) {
                                        updateAxis(s.yaxis, val, val);
                                    }
                                }
                            }
                            points[k + m] = null;
                        }
                    }
                    else {
                        // a little bit of line specific stuff that
                        // perhaps shouldn't be here, but lacking
                        // better means...
                        if (insertSteps && k > 0
                            && points[k - ps] != null
                            && points[k - ps] != points[k]
                            && points[k - ps + 1] != points[k + 1]) {
                            // copy the point to make room for a middle point
                            for (m = 0; m < ps; ++m)
                                points[k + ps + m] = points[k + m];

                            // middle point has same y
                            points[k + 1] = points[k - ps + 1];

                            // we've added a point, better reflect that
                            k += ps;
                        }
                    }
                }
            }

            // give the hooks a chance to run
            for (i = 0; i < series.length; ++i) {
                s = series[i];

                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);
            }

            // second pass: find datamax/datamin for auto-scaling
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                points = s.datapoints.points;
                ps = s.datapoints.pointsize;
                format = s.datapoints.format;

                var xmin = topSentry, ymin = topSentry,
                    xmax = bottomSentry, ymax = bottomSentry;

                for (j = 0; j < points.length; j += ps) {
                    if (points[j] == null)
                        continue;

                    for (m = 0; m < ps; ++m) {
                        val = points[j + m];
                        f = format[m];
                        if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)
                            continue;

                        if (f.x) {
                            if (val < xmin)
                                xmin = val;
                            if (val > xmax)
                                xmax = val;
                        }
                        if (f.y) {
                            if (val < ymin)
                                ymin = val;
                            if (val > ymax)
                                ymax = val;
                        }
                    }
                }

                if (s.bars.show) {
                    // make sure we got room for the bar on the dancing floor
                    var delta;

                    switch (s.bars.align) {
                        case "left":
                            delta = 0;
                            break;
                        case "right":
                            delta = -s.bars.barWidth;
                            break;
                        default:
                            delta = -s.bars.barWidth / 2;
                    }

                    if (s.bars.horizontal) {
                        ymin += delta;
                        ymax += delta + s.bars.barWidth;
                    }
                    else {
                        xmin += delta;
                        xmax += delta + s.bars.barWidth;
                    }
                }

                updateAxis(s.xaxis, xmin, xmax);
                updateAxis(s.yaxis, ymin, ymax);
            }

            $.each(allAxes(), function (_, axis) {
                if (axis.datamin == topSentry)
                    axis.datamin = null;
                if (axis.datamax == bottomSentry)
                    axis.datamax = null;
            });
        }

        function setupCanvases() {

            // Make sure the placeholder is clear of everything except canvases
            // from a previous plot in this container that we'll try to re-use.

            placeholder.css("padding", 0) // padding messes up the positioning
                .children().filter(function(){
                    return !$(this).hasClass("flot-overlay") && !$(this).hasClass('flot-base');
                }).remove();

            if (placeholder.css("position") == 'static')
                placeholder.css("position", "relative"); // for positioning labels and overlay

            surface = new Canvas("flot-base", placeholder);
            overlay = new Canvas("flot-overlay", placeholder); // overlay canvas for interactive features

            ctx = surface.context;
            octx = overlay.context;

            // define which element we're listening for events on
            eventHolder = $(overlay.element).unbind();

            // If we're re-using a plot object, shut down the old one

            var existing = placeholder.data("plot");

            if (existing) {
                existing.shutdown();
                overlay.clear();
            }

            // save in case we get replotted
            placeholder.data("plot", plot);
        }

        function bindEvents() {
            // bind events
            if (options.grid.hoverable) {
                eventHolder.mousemove(onMouseMove);

                // Use bind, rather than .mouseleave, because we officially
                // still support jQuery 1.2.6, which doesn't define a shortcut
                // for mouseenter or mouseleave.  This was a bug/oversight that
                // was fixed somewhere around 1.3.x.  We can return to using
                // .mouseleave when we drop support for 1.2.6.

                eventHolder.bind("mouseleave", onMouseLeave);
            }

            if (options.grid.clickable)
                eventHolder.click(onClick);

            executeHooks(hooks.bindEvents, [eventHolder]);
        }

        function shutdown() {
            if (redrawTimeout)
                clearTimeout(redrawTimeout);

            eventHolder.unbind("mousemove", onMouseMove);
            eventHolder.unbind("mouseleave", onMouseLeave);
            eventHolder.unbind("click", onClick);

            executeHooks(hooks.shutdown, [eventHolder]);
        }

        function setTransformationHelpers(axis) {
            // set helper functions on the axis, assumes plot area
            // has been computed already

            function identity(x) { return x; }

            var s, m, t = axis.options.transform || identity,
                it = axis.options.inverseTransform;

            // precompute how much the axis is scaling a point
            // in canvas space
            if (axis.direction == "x") {
                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));
                m = Math.min(t(axis.max), t(axis.min));
            }
            else {
                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));
                s = -s;
                m = Math.max(t(axis.max), t(axis.min));
            }

            // data point to canvas coordinate
            if (t == identity) // slight optimization
                axis.p2c = function (p) { return (p - m) * s; };
            else
                axis.p2c = function (p) { return (t(p) - m) * s; };
            // canvas coordinate to data point
            if (!it)
                axis.c2p = function (c) { return m + c / s; };
            else
                axis.c2p = function (c) { return it(m + c / s); };
        }

        function measureTickLabels(axis) {

            var opts = axis.options,
                ticks = axis.ticks || [],
                labelWidth = opts.labelWidth || 0,
                labelHeight = opts.labelHeight || 0,
                maxWidth = labelWidth || (axis.direction == "x" ? Math.floor(surface.width / (ticks.length || 1)) : null),
                legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",
                layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,
                font = opts.font || "flot-tick-label tickLabel";

            for (var i = 0; i < ticks.length; ++i) {

                var t = ticks[i];

                if (!t.label)
                    continue;

                var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);

                labelWidth = Math.max(labelWidth, info.width);
                labelHeight = Math.max(labelHeight, info.height);
            }

            axis.labelWidth = opts.labelWidth || labelWidth;
            axis.labelHeight = opts.labelHeight || labelHeight;
        }

        function allocateAxisBoxFirstPhase(axis) {
            // find the bounding box of the axis by looking at label
            // widths/heights and ticks, make room by diminishing the
            // plotOffset; this first phase only looks at one
            // dimension per axis, the other dimension depends on the
            // other axes so will have to wait

            var lw = axis.labelWidth,
                lh = axis.labelHeight,
                pos = axis.options.position,
                isXAxis = axis.direction === "x",
                tickLength = axis.options.tickLength,
                axisMargin = options.grid.axisMargin,
                padding = options.grid.labelMargin,
                innermost = true,
                outermost = true,
                first = true,
                found = false;

            // Determine the axis's position in its direction and on its side

            $.each(isXAxis ? xaxes : yaxes, function(i, a) {
                if (a && a.reserveSpace) {
                    if (a === axis) {
                        found = true;
                    } else if (a.options.position === pos) {
                        if (found) {
                            outermost = false;
                        } else {
                            innermost = false;
                        }
                    }
                    if (!found) {
                        first = false;
                    }
                }
            });

            // The outermost axis on each side has no margin

            if (outermost) {
                axisMargin = 0;
            }

            // The ticks for the first axis in each direction stretch across

            if (tickLength == null) {
                tickLength = first ? "full" : 5;
            }

            if (!isNaN(+tickLength))
                padding += +tickLength;

            if (isXAxis) {
                lh += padding;

                if (pos == "bottom") {
                    plotOffset.bottom += lh + axisMargin;
                    axis.box = { top: surface.height - plotOffset.bottom, height: lh };
                }
                else {
                    axis.box = { top: plotOffset.top + axisMargin, height: lh };
                    plotOffset.top += lh + axisMargin;
                }
            }
            else {
                lw += padding;

                if (pos == "left") {
                    axis.box = { left: plotOffset.left + axisMargin, width: lw };
                    plotOffset.left += lw + axisMargin;
                }
                else {
                    plotOffset.right += lw + axisMargin;
                    axis.box = { left: surface.width - plotOffset.right, width: lw };
                }
            }

             // save for future reference
            axis.position = pos;
            axis.tickLength = tickLength;
            axis.box.padding = padding;
            axis.innermost = innermost;
        }

        function allocateAxisBoxSecondPhase(axis) {
            // now that all axis boxes have been placed in one
            // dimension, we can set the remaining dimension coordinates
            if (axis.direction == "x") {
                axis.box.left = plotOffset.left - axis.labelWidth / 2;
                axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;
            }
            else {
                axis.box.top = plotOffset.top - axis.labelHeight / 2;
                axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;
            }
        }

        function adjustLayoutForThingsStickingOut() {
            // possibly adjust plot offset to ensure everything stays
            // inside the canvas and isn't clipped off

            var minMargin = options.grid.minBorderMargin,
                axis, i;

            // check stuff from the plot (FIXME: this should just read
            // a value from the series, otherwise it's impossible to
            // customize)
            if (minMargin == null) {
                minMargin = 0;
                for (i = 0; i < series.length; ++i)
                    minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));
            }

            var margins = {
                left: minMargin,
                right: minMargin,
                top: minMargin,
                bottom: minMargin
            };

            // check axis labels, note we don't check the actual
            // labels but instead use the overall width/height to not
            // jump as much around with replots
            $.each(allAxes(), function (_, axis) {
                if (axis.reserveSpace && axis.ticks && axis.ticks.length) {
                    var lastTick = axis.ticks[axis.ticks.length - 1];
                    if (axis.direction === "x") {
                        margins.left = Math.max(margins.left, axis.labelWidth / 2);
                        if (lastTick.v <= axis.max) {
                            margins.right = Math.max(margins.right, axis.labelWidth / 2);
                        }
                    } else {
                        margins.bottom = Math.max(margins.bottom, axis.labelHeight / 2);
                        if (lastTick.v <= axis.max) {
                            margins.top = Math.max(margins.top, axis.labelHeight / 2);
                        }
                    }
                }
            });

            plotOffset.left = Math.ceil(Math.max(margins.left, plotOffset.left));
            plotOffset.right = Math.ceil(Math.max(margins.right, plotOffset.right));
            plotOffset.top = Math.ceil(Math.max(margins.top, plotOffset.top));
            plotOffset.bottom = Math.ceil(Math.max(margins.bottom, plotOffset.bottom));
        }

        function setupGrid() {
            var i, axes = allAxes(), showGrid = options.grid.show;

            // Initialize the plot's offset from the edge of the canvas

            for (var a in plotOffset) {
                var margin = options.grid.margin || 0;
                plotOffset[a] = typeof margin == "number" ? margin : margin[a] || 0;
            }

            executeHooks(hooks.processOffset, [plotOffset]);

            // If the grid is visible, add its border width to the offset

            for (var a in plotOffset) {
                if(typeof(options.grid.borderWidth) == "object") {
                    plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;
                }
                else {
                    plotOffset[a] += showGrid ? options.grid.borderWidth : 0;
                }
            }

            // init axes
            $.each(axes, function (_, axis) {
                axis.show = axis.options.show;
                if (axis.show == null)
                    axis.show = axis.used; // by default an axis is visible if it's got data

                axis.reserveSpace = axis.show || axis.options.reserveSpace;

                setRange(axis);
            });

            if (showGrid) {

                var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });

                $.each(allocatedAxes, function (_, axis) {
                    // make the ticks
                    setupTickGeneration(axis);
                    setTicks(axis);
                    snapRangeToTicks(axis, axis.ticks);
                    // find labelWidth/Height for axis
                    measureTickLabels(axis);
                });

                // with all dimensions calculated, we can compute the
                // axis bounding boxes, start from the outside
                // (reverse order)
                for (i = allocatedAxes.length - 1; i >= 0; --i)
                    allocateAxisBoxFirstPhase(allocatedAxes[i]);

                // make sure we've got enough space for things that
                // might stick out
                adjustLayoutForThingsStickingOut();

                $.each(allocatedAxes, function (_, axis) {
                    allocateAxisBoxSecondPhase(axis);
                });
            }

            plotWidth = surface.width - plotOffset.left - plotOffset.right;
            plotHeight = surface.height - plotOffset.bottom - plotOffset.top;

            // now we got the proper plot dimensions, we can compute the scaling
            $.each(axes, function (_, axis) {
                setTransformationHelpers(axis);
            });

            if (showGrid) {
                drawAxisLabels();
            }

            insertLegend();
        }

        function setRange(axis) {
            var opts = axis.options,
                min = +(opts.min != null ? opts.min : axis.datamin),
                max = +(opts.max != null ? opts.max : axis.datamax),
                delta = max - min;

            if (delta == 0.0) {
                // degenerate case
                var widen = max == 0 ? 1 : 0.01;

                if (opts.min == null)
                    min -= widen;
                // always widen max if we couldn't widen min to ensure we
                // don't fall into min == max which doesn't work
                if (opts.max == null || opts.min != null)
                    max += widen;
            }
            else {
                // consider autoscaling
                var margin = opts.autoscaleMargin;
                if (margin != null) {
                    if (opts.min == null) {
                        min -= delta * margin;
                        // make sure we don't go below zero if all values
                        // are positive
                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)
                            min = 0;
                    }
                    if (opts.max == null) {
                        max += delta * margin;
                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)
                            max = 0;
                    }
                }
            }
            axis.min = min;
            axis.max = max;
        }

        function setupTickGeneration(axis) {
            var opts = axis.options;

            // estimate number of ticks
            var noTicks;
            if (typeof opts.ticks == "number" && opts.ticks > 0)
                noTicks = opts.ticks;
            else
                // heuristic based on the model a*sqrt(x) fitted to
                // some data points that seemed reasonable
                noTicks = 0.3 * Math.sqrt(axis.direction == "x" ? surface.width : surface.height);

            var delta = (axis.max - axis.min) / noTicks,
                dec = -Math.floor(Math.log(delta) / Math.LN10),
                maxDec = opts.tickDecimals;

            if (maxDec != null && dec > maxDec) {
                dec = maxDec;
            }

            var magn = Math.pow(10, -dec),
                norm = delta / magn, // norm is between 1.0 and 10.0
                size;

            if (norm < 1.5) {
                size = 1;
            } else if (norm < 3) {
                size = 2;
                // special case for 2.5, requires an extra decimal
                if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
                    size = 2.5;
                    ++dec;
                }
            } else if (norm < 7.5) {
                size = 5;
            } else {
                size = 10;
            }

            size *= magn;

            if (opts.minTickSize != null && size < opts.minTickSize) {
                size = opts.minTickSize;
            }

            axis.delta = delta;
            axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);
            axis.tickSize = opts.tickSize || size;

            // Time mode was moved to a plug-in in 0.8, but since so many people use this
            // we'll add an especially friendly make sure they remembered to include it.

            if (opts.mode == "time" && !axis.tickGenerator) {
                throw new Error("Time mode requires the flot.time plugin.");
            }

            // Flot supports base-10 axes; any other mode else is handled by a plug-in,
            // like flot.time.js.

            if (!axis.tickGenerator) {

                axis.tickGenerator = function (axis) {

                    var ticks = [],
                        start = floorInBase(axis.min, axis.tickSize),
                        i = 0,
                        v = Number.NaN,
                        prev;

                    do {
                        prev = v;
                        v = start + i * axis.tickSize;
                        ticks.push(v);
                        ++i;
                    } while (v < axis.max && v != prev);
                    return ticks;
                };

				axis.tickFormatter = function (value, axis) {

					var factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;
					var formatted = "" + Math.round(value * factor) / factor;

					// If tickDecimals was specified, ensure that we have exactly that
					// much precision; otherwise default to the value's own precision.

					if (axis.tickDecimals != null) {
						var decimal = formatted.indexOf(".");
						var precision = decimal == -1 ? 0 : formatted.length - decimal - 1;
						if (precision < axis.tickDecimals) {
							return (precision ? formatted : formatted + ".") + ("" + factor).substr(1, axis.tickDecimals - precision);
						}
					}

                    return formatted;
                };
            }

            if ($.isFunction(opts.tickFormatter))
                axis.tickFormatter = function (v, axis) { return "" + opts.tickFormatter(v, axis); };

            if (opts.alignTicksWithAxis != null) {
                var otherAxis = (axis.direction == "x" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];
                if (otherAxis && otherAxis.used && otherAxis != axis) {
                    // consider snapping min/max to outermost nice ticks
                    var niceTicks = axis.tickGenerator(axis);
                    if (niceTicks.length > 0) {
                        if (opts.min == null)
                            axis.min = Math.min(axis.min, niceTicks[0]);
                        if (opts.max == null && niceTicks.length > 1)
                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);
                    }

                    axis.tickGenerator = function (axis) {
                        // copy ticks, scaled to this axis
                        var ticks = [], v, i;
                        for (i = 0; i < otherAxis.ticks.length; ++i) {
                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);
                            v = axis.min + v * (axis.max - axis.min);
                            ticks.push(v);
                        }
                        return ticks;
                    };

                    // we might need an extra decimal since forced
                    // ticks don't necessarily fit naturally
                    if (!axis.mode && opts.tickDecimals == null) {
                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),
                            ts = axis.tickGenerator(axis);

                        // only proceed if the tick interval rounded
                        // with an extra decimal doesn't give us a
                        // zero at end
                        if (!(ts.length > 1 && /\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))
                            axis.tickDecimals = extraDec;
                    }
                }
            }
        }

        function setTicks(axis) {
            var oticks = axis.options.ticks, ticks = [];
            if (oticks == null || (typeof oticks == "number" && oticks > 0))
                ticks = axis.tickGenerator(axis);
            else if (oticks) {
                if ($.isFunction(oticks))
                    // generate the ticks
                    ticks = oticks(axis);
                else
                    ticks = oticks;
            }

            // clean up/labelify the supplied ticks, copy them over
            var i, v;
            axis.ticks = [];
            for (i = 0; i < ticks.length; ++i) {
                var label = null;
                var t = ticks[i];
                if (typeof t == "object") {
                    v = +t[0];
                    if (t.length > 1)
                        label = t[1];
                }
                else
                    v = +t;
                if (label == null)
                    label = axis.tickFormatter(v, axis);
                if (!isNaN(v))
                    axis.ticks.push({ v: v, label: label });
            }
        }

        function snapRangeToTicks(axis, ticks) {
            if (axis.options.autoscaleMargin && ticks.length > 0) {
                // snap to ticks
                if (axis.options.min == null)
                    axis.min = Math.min(axis.min, ticks[0].v);
                if (axis.options.max == null && ticks.length > 1)
                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);
            }
        }

        function draw() {

            surface.clear();

            executeHooks(hooks.drawBackground, [ctx]);

            var grid = options.grid;

            // draw background, if any
            if (grid.show && grid.backgroundColor)
                drawBackground();

            if (grid.show && !grid.aboveData) {
                drawGrid();
            }

            for (var i = 0; i < series.length; ++i) {
                executeHooks(hooks.drawSeries, [ctx, series[i]]);
                drawSeries(series[i]);
            }

            executeHooks(hooks.draw, [ctx]);

            if (grid.show && grid.aboveData) {
                drawGrid();
            }

            surface.render();

            // A draw implies that either the axes or data have changed, so we
            // should probably update the overlay highlights as well.

            triggerRedrawOverlay();
        }

        function extractRange(ranges, coord) {
            var axis, from, to, key, axes = allAxes();

            for (var i = 0; i < axes.length; ++i) {
                axis = axes[i];
                if (axis.direction == coord) {
                    key = coord + axis.n + "axis";
                    if (!ranges[key] && axis.n == 1)
                        key = coord + "axis"; // support x1axis as xaxis
                    if (ranges[key]) {
                        from = ranges[key].from;
                        to = ranges[key].to;
                        break;
                    }
                }
            }

            // backwards-compat stuff - to be removed in future
            if (!ranges[key]) {
                axis = coord == "x" ? xaxes[0] : yaxes[0];
                from = ranges[coord + "1"];
                to = ranges[coord + "2"];
            }

            // auto-reverse as an added bonus
            if (from != null && to != null && from > to) {
                var tmp = from;
                from = to;
                to = tmp;
            }

            return { from: from, to: to, axis: axis };
        }

        function drawBackground() {
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
            ctx.fillRect(0, 0, plotWidth, plotHeight);
            ctx.restore();
        }

        function drawGrid() {
            var i, axes, bw, bc;

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            // draw markings
            var markings = options.grid.markings;
            if (markings) {
                if ($.isFunction(markings)) {
                    axes = plot.getAxes();
                    // xmin etc. is backwards compatibility, to be
                    // removed in the future
                    axes.xmin = axes.xaxis.min;
                    axes.xmax = axes.xaxis.max;
                    axes.ymin = axes.yaxis.min;
                    axes.ymax = axes.yaxis.max;

                    markings = markings(axes);
                }

                for (i = 0; i < markings.length; ++i) {
                    var m = markings[i],
                        xrange = extractRange(m, "x"),
                        yrange = extractRange(m, "y");

                    // fill in missing
                    if (xrange.from == null)
                        xrange.from = xrange.axis.min;
                    if (xrange.to == null)
                        xrange.to = xrange.axis.max;
                    if (yrange.from == null)
                        yrange.from = yrange.axis.min;
                    if (yrange.to == null)
                        yrange.to = yrange.axis.max;

                    // clip
                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||
                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)
                        continue;

                    xrange.from = Math.max(xrange.from, xrange.axis.min);
                    xrange.to = Math.min(xrange.to, xrange.axis.max);
                    yrange.from = Math.max(yrange.from, yrange.axis.min);
                    yrange.to = Math.min(yrange.to, yrange.axis.max);

                    if (xrange.from == xrange.to && yrange.from == yrange.to)
                        continue;

                    // then draw
                    xrange.from = xrange.axis.p2c(xrange.from);
                    xrange.to = xrange.axis.p2c(xrange.to);
                    yrange.from = yrange.axis.p2c(yrange.from);
                    yrange.to = yrange.axis.p2c(yrange.to);

                    if (xrange.from == xrange.to || yrange.from == yrange.to) {
                        // draw line
                        ctx.beginPath();
                        ctx.strokeStyle = m.color || options.grid.markingsColor;
                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
                        ctx.moveTo(xrange.from, yrange.from);
                        ctx.lineTo(xrange.to, yrange.to);
                        ctx.stroke();
                    }
                    else {
                        // fill area
                        ctx.fillStyle = m.color || options.grid.markingsColor;
                        ctx.fillRect(xrange.from, yrange.to,
                                     xrange.to - xrange.from,
                                     yrange.from - yrange.to);
                    }
                }
            }

            // draw the ticks
            axes = allAxes();
            bw = options.grid.borderWidth;

            for (var j = 0; j < axes.length; ++j) {
                var axis = axes[j], box = axis.box,
                    t = axis.tickLength, x, y, xoff, yoff;
                if (!axis.show || axis.ticks.length == 0)
                    continue;

                ctx.lineWidth = 1;

                // find the edges
                if (axis.direction == "x") {
                    x = 0;
                    if (t == "full")
                        y = (axis.position == "top" ? 0 : plotHeight);
                    else
                        y = box.top - plotOffset.top + (axis.position == "top" ? box.height : 0);
                }
                else {
                    y = 0;
                    if (t == "full")
                        x = (axis.position == "left" ? 0 : plotWidth);
                    else
                        x = box.left - plotOffset.left + (axis.position == "left" ? box.width : 0);
                }

                // draw tick bar
                if (!axis.innermost) {
                    ctx.strokeStyle = axis.options.color;
                    ctx.beginPath();
                    xoff = yoff = 0;
                    if (axis.direction == "x")
                        xoff = plotWidth + 1;
                    else
                        yoff = plotHeight + 1;

                    if (ctx.lineWidth == 1) {
                        if (axis.direction == "x") {
                            y = Math.floor(y) + 0.5;
                        } else {
                            x = Math.floor(x) + 0.5;
                        }
                    }

                    ctx.moveTo(x, y);
                    ctx.lineTo(x + xoff, y + yoff);
                    ctx.stroke();
                }

                // draw ticks

                ctx.strokeStyle = axis.options.tickColor;

                ctx.beginPath();
                for (i = 0; i < axis.ticks.length; ++i) {
                    var v = axis.ticks[i].v;

                    xoff = yoff = 0;

                    if (isNaN(v) || v < axis.min || v > axis.max
                        // skip those lying on the axes if we got a border
                        || (t == "full"
                            && ((typeof bw == "object" && bw[axis.position] > 0) || bw > 0)
                            && (v == axis.min || v == axis.max)))
                        continue;

                    if (axis.direction == "x") {
                        x = axis.p2c(v);
                        yoff = t == "full" ? -plotHeight : t;

                        if (axis.position == "top")
                            yoff = -yoff;
                    }
                    else {
                        y = axis.p2c(v);
                        xoff = t == "full" ? -plotWidth : t;

                        if (axis.position == "left")
                            xoff = -xoff;
                    }

                    if (ctx.lineWidth == 1) {
                        if (axis.direction == "x")
                            x = Math.floor(x) + 0.5;
                        else
                            y = Math.floor(y) + 0.5;
                    }

                    ctx.moveTo(x, y);
                    ctx.lineTo(x + xoff, y + yoff);
                }

                ctx.stroke();
            }


            // draw border
            if (bw) {
                // If either borderWidth or borderColor is an object, then draw the border
                // line by line instead of as one rectangle
                bc = options.grid.borderColor;
                if(typeof bw == "object" || typeof bc == "object") {
                    if (typeof bw !== "object") {
                        bw = {top: bw, right: bw, bottom: bw, left: bw};
                    }
                    if (typeof bc !== "object") {
                        bc = {top: bc, right: bc, bottom: bc, left: bc};
                    }

                    if (bw.top > 0) {
                        ctx.strokeStyle = bc.top;
                        ctx.lineWidth = bw.top;
                        ctx.beginPath();
                        ctx.moveTo(0 - bw.left, 0 - bw.top/2);
                        ctx.lineTo(plotWidth, 0 - bw.top/2);
                        ctx.stroke();
                    }

                    if (bw.right > 0) {
                        ctx.strokeStyle = bc.right;
                        ctx.lineWidth = bw.right;
                        ctx.beginPath();
                        ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);
                        ctx.lineTo(plotWidth + bw.right / 2, plotHeight);
                        ctx.stroke();
                    }

                    if (bw.bottom > 0) {
                        ctx.strokeStyle = bc.bottom;
                        ctx.lineWidth = bw.bottom;
                        ctx.beginPath();
                        ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);
                        ctx.lineTo(0, plotHeight + bw.bottom / 2);
                        ctx.stroke();
                    }

                    if (bw.left > 0) {
                        ctx.strokeStyle = bc.left;
                        ctx.lineWidth = bw.left;
                        ctx.beginPath();
                        ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);
                        ctx.lineTo(0- bw.left/2, 0);
                        ctx.stroke();
                    }
                }
                else {
                    ctx.lineWidth = bw;
                    ctx.strokeStyle = options.grid.borderColor;
                    ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);
                }
            }

            ctx.restore();
        }

        function drawAxisLabels() {

            $.each(allAxes(), function (_, axis) {
                var box = axis.box,
                    legacyStyles = axis.direction + "Axis " + axis.direction + axis.n + "Axis",
                    layer = "flot-" + axis.direction + "-axis flot-" + axis.direction + axis.n + "-axis " + legacyStyles,
                    font = axis.options.font || "flot-tick-label tickLabel",
                    tick, x, y, halign, valign;

                // Remove text before checking for axis.show and ticks.length;
                // otherwise plugins, like flot-tickrotor, that draw their own
                // tick labels will end up with both theirs and the defaults.

                surface.removeText(layer);

                if (!axis.show || axis.ticks.length == 0)
                    return;

                for (var i = 0; i < axis.ticks.length; ++i) {

                    tick = axis.ticks[i];
                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)
                        continue;

                    if (axis.direction == "x") {
                        halign = "center";
                        x = plotOffset.left + axis.p2c(tick.v);
                        if (axis.position == "bottom") {
                            y = box.top + box.padding;
                        } else {
                            y = box.top + box.height - box.padding;
                            valign = "bottom";
                        }
                    } else {
                        valign = "middle";
                        y = plotOffset.top + axis.p2c(tick.v);
                        if (axis.position == "left") {
                            x = box.left + box.width - box.padding;
                            halign = "right";
                        } else {
                            x = box.left + box.padding;
                        }
                    }

                    surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);
                }
            });
        }

        function drawSeries(series) {
            if (series.lines.show)
                drawSeriesLines(series);
            if (series.bars.show)
                drawSeriesBars(series);
            if (series.points.show)
                drawSeriesPoints(series);
        }

        function drawSeriesLines(series) {
            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {
                var points = datapoints.points,
                    ps = datapoints.pointsize,
                    prevx = null, prevy = null;

                ctx.beginPath();
                for (var i = ps; i < points.length; i += ps) {
                    var x1 = points[i - ps], y1 = points[i - ps + 1],
                        x2 = points[i], y2 = points[i + 1];

                    if (x1 == null || x2 == null)
                        continue;

                    // clip with ymin
                    if (y1 <= y2 && y1 < axisy.min) {
                        if (y2 < axisy.min)
                            continue;   // line segment is outside
                        // compute new intersection point
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 <= y1 && y2 < axisy.min) {
                        if (y1 < axisy.min)
                            continue;
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                    // clip with ymax
                    if (y1 >= y2 && y1 > axisy.max) {
                        if (y2 > axisy.max)
                            continue;
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 >= y1 && y2 > axisy.max) {
                        if (y1 > axisy.max)
                            continue;
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }

                    // clip with xmin
                    if (x1 <= x2 && x1 < axisx.min) {
                        if (x2 < axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 <= x1 && x2 < axisx.min) {
                        if (x1 < axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                    // clip with xmax
                    if (x1 >= x2 && x1 > axisx.max) {
                        if (x2 > axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 >= x1 && x2 > axisx.max) {
                        if (x1 > axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (x1 != prevx || y1 != prevy)
                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);

                    prevx = x2;
                    prevy = y2;
                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);
                }
                ctx.stroke();
            }

            function plotLineArea(datapoints, axisx, axisy) {
                var points = datapoints.points,
                    ps = datapoints.pointsize,
                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),
                    i = 0, top, areaOpen = false,
                    ypos = 1, segmentStart = 0, segmentEnd = 0;

                // we process each segment in two turns, first forward
                // direction to sketch out top, then once we hit the
                // end we go backwards to sketch the bottom
                while (true) {
                    if (ps > 0 && i > points.length + ps)
                        break;

                    i += ps; // ps is negative if going backwards

                    var x1 = points[i - ps],
                        y1 = points[i - ps + ypos],
                        x2 = points[i], y2 = points[i + ypos];

                    if (areaOpen) {
                        if (ps > 0 && x1 != null && x2 == null) {
                            // at turning point
                            segmentEnd = i;
                            ps = -ps;
                            ypos = 2;
                            continue;
                        }

                        if (ps < 0 && i == segmentStart + ps) {
                            // done with the reverse sweep
                            ctx.fill();
                            areaOpen = false;
                            ps = -ps;
                            ypos = 1;
                            i = segmentStart = segmentEnd + ps;
                            continue;
                        }
                    }

                    if (x1 == null || x2 == null)
                        continue;

                    // clip x values

                    // clip with xmin
                    if (x1 <= x2 && x1 < axisx.min) {
                        if (x2 < axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 <= x1 && x2 < axisx.min) {
                        if (x1 < axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                    // clip with xmax
                    if (x1 >= x2 && x1 > axisx.max) {
                        if (x2 > axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 >= x1 && x2 > axisx.max) {
                        if (x1 > axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (!areaOpen) {
                        // open area
                        ctx.beginPath();
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
                        areaOpen = true;
                    }

                    // now first check the case where both is outside
                    if (y1 >= axisy.max && y2 >= axisy.max) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
                        continue;
                    }
                    else if (y1 <= axisy.min && y2 <= axisy.min) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
                        continue;
                    }

                    // else it's a bit more complicated, there might
                    // be a flat maxed out rectangle first, then a
                    // triangular cutout or reverse; to find these
                    // keep track of the current x values
                    var x1old = x1, x2old = x2;

                    // clip the y values, without shortcutting, we
                    // go through all cases in turn

                    // clip with ymin
                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                    // clip with ymax
                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }

                    // if the x value was changed we got a rectangle
                    // to fill
                    if (x1 != x1old) {
                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));
                        // it goes to (x1, y1), but we fill that below
                    }

                    // fill triangular section, this sometimes result
                    // in redundant points if (x1, y1) hasn't changed
                    // from previous line to, but we just ignore that
                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));

                    // fill the other rectangle if it's there
                    if (x2 != x2old) {
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));
                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));
                    }
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            var lw = series.lines.lineWidth,
                sw = series.shadowSize;
            // FIXME: consider another form of shadow when filling is turned on
            if (lw > 0 && sw > 0) {
                // draw shadow as a thick and thin line with transparency
                ctx.lineWidth = sw;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                // position shadow at angle from the mid of line
                var angle = Math.PI/18;
                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);
                ctx.lineWidth = sw/2;
                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);
            if (fillStyle) {
                ctx.fillStyle = fillStyle;
                plotLineArea(series.datapoints, series.xaxis, series.yaxis);
            }

            if (lw > 0)
                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawSeriesPoints(series) {
            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {
                var points = datapoints.points, ps = datapoints.pointsize;

                for (var i = 0; i < points.length; i += ps) {
                    var x = points[i], y = points[i + 1];
                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
                        continue;

                    ctx.beginPath();
                    x = axisx.p2c(x);
                    y = axisy.p2c(y) + offset;
                    if (symbol == "circle")
                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);
                    else
                        symbol(ctx, x, y, radius, shadow);
                    ctx.closePath();

                    if (fillStyle) {
                        ctx.fillStyle = fillStyle;
                        ctx.fill();
                    }
                    ctx.stroke();
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            var lw = series.points.lineWidth,
                sw = series.shadowSize,
                radius = series.points.radius,
                symbol = series.points.symbol;

            // If the user sets the line width to 0, we change it to a very 
            // small value. A line width of 0 seems to force the default of 1.
            // Doing the conditional here allows the shadow setting to still be 
            // optional even with a lineWidth of 0.

            if( lw == 0 )
                lw = 0.0001;

            if (lw > 0 && sw > 0) {
                // draw shadow in two steps
                var w = sw / 2;
                ctx.lineWidth = w;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotPoints(series.datapoints, radius, null, w + w/2, true,
                           series.xaxis, series.yaxis, symbol);

                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotPoints(series.datapoints, radius, null, w/2, true,
                           series.xaxis, series.yaxis, symbol);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            plotPoints(series.datapoints, radius,
                       getFillStyle(series.points, series.color), 0, false,
                       series.xaxis, series.yaxis, symbol);
            ctx.restore();
        }

        function drawBar(x, y, b, barLeft, barRight, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {
            var left, right, bottom, top,
                drawLeft, drawRight, drawTop, drawBottom,
                tmp;

            // in horizontal mode, we start the bar from the left
            // instead of from the bottom so it appears to be
            // horizontal rather than vertical
            if (horizontal) {
                drawBottom = drawRight = drawTop = true;
                drawLeft = false;
                left = b;
                right = x;
                top = y + barLeft;
                bottom = y + barRight;

                // account for negative bars
                if (right < left) {
                    tmp = right;
                    right = left;
                    left = tmp;
                    drawLeft = true;
                    drawRight = false;
                }
            }
            else {
                drawLeft = drawRight = drawTop = true;
                drawBottom = false;
                left = x + barLeft;
                right = x + barRight;
                bottom = b;
                top = y;

                // account for negative bars
                if (top < bottom) {
                    tmp = top;
                    top = bottom;
                    bottom = tmp;
                    drawBottom = true;
                    drawTop = false;
                }
            }

            // clip
            if (right < axisx.min || left > axisx.max ||
                top < axisy.min || bottom > axisy.max)
                return;

            if (left < axisx.min) {
                left = axisx.min;
                drawLeft = false;
            }

            if (right > axisx.max) {
                right = axisx.max;
                drawRight = false;
            }

            if (bottom < axisy.min) {
                bottom = axisy.min;
                drawBottom = false;
            }

            if (top > axisy.max) {
                top = axisy.max;
                drawTop = false;
            }

            left = axisx.p2c(left);
            bottom = axisy.p2c(bottom);
            right = axisx.p2c(right);
            top = axisy.p2c(top);

            // fill the bar
            if (fillStyleCallback) {
                c.fillStyle = fillStyleCallback(bottom, top);
                c.fillRect(left, top, right - left, bottom - top)
            }

            // draw outline
            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {
                c.beginPath();

                // FIXME: inline moveTo is buggy with excanvas
                c.moveTo(left, bottom);
                if (drawLeft)
                    c.lineTo(left, top);
                else
                    c.moveTo(left, top);
                if (drawTop)
                    c.lineTo(right, top);
                else
                    c.moveTo(right, top);
                if (drawRight)
                    c.lineTo(right, bottom);
                else
                    c.moveTo(right, bottom);
                if (drawBottom)
                    c.lineTo(left, bottom);
                else
                    c.moveTo(left, bottom);
                c.stroke();
            }
        }

        function drawSeriesBars(series) {
            function plotBars(datapoints, barLeft, barRight, fillStyleCallback, axisx, axisy) {
                var points = datapoints.points, ps = datapoints.pointsize;

                for (var i = 0; i < points.length; i += ps) {
                    if (points[i] == null)
                        continue;
                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            // FIXME: figure out a way to add shadows (for instance along the right edge)
            ctx.lineWidth = series.bars.lineWidth;
            ctx.strokeStyle = series.color;

            var barLeft;

            switch (series.bars.align) {
                case "left":
                    barLeft = 0;
                    break;
                case "right":
                    barLeft = -series.bars.barWidth;
                    break;
                default:
                    barLeft = -series.bars.barWidth / 2;
            }

            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, fillStyleCallback, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function getFillStyle(filloptions, seriesColor, bottom, top) {
            var fill = filloptions.fill;
            if (!fill)
                return null;

            if (filloptions.fillColor)
                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);

            var c = $.color.parse(seriesColor);
            c.a = typeof fill == "number" ? fill : 0.4;
            c.normalize();
            return c.toString();
        }

        function insertLegend() {

            if (options.legend.container != null) {
                $(options.legend.container).html("");
            } else {
                placeholder.find(".legend").remove();
            }

            if (!options.legend.show) {
                return;
            }

            var fragments = [], entries = [], rowStarted = false,
                lf = options.legend.labelFormatter, s, label;

            // Build a list of legend entries, with each having a label and a color

            for (var i = 0; i < series.length; ++i) {
                s = series[i];
                if (s.label) {
                    label = lf ? lf(s.label, s) : s.label;
                    if (label) {
                        entries.push({
                            label: label,
                            color: s.color
                        });
                    }
                }
            }

            // Sort the legend using either the default or a custom comparator

            if (options.legend.sorted) {
                if ($.isFunction(options.legend.sorted)) {
                    entries.sort(options.legend.sorted);
                } else if (options.legend.sorted == "reverse") {
                	entries.reverse();
                } else {
                    var ascending = options.legend.sorted != "descending";
                    entries.sort(function(a, b) {
                        return a.label == b.label ? 0 : (
                            (a.label < b.label) != ascending ? 1 : -1   // Logical XOR
                        );
                    });
                }
            }

            // Generate markup for the list of entries, in their final order

            for (var i = 0; i < entries.length; ++i) {

                var entry = entries[i];

                if (i % options.legend.noColumns == 0) {
                    if (rowStarted)
                        fragments.push('</tr>');
                    fragments.push('<tr>');
                    rowStarted = true;
                }

                fragments.push(
                    '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden"></div></div></td>' +
                    '<td class="legendLabel">' + entry.label + '</td>'
                );
            }

            if (rowStarted)
                fragments.push('</tr>');

            if (fragments.length == 0)
                return;

            var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';
            if (options.legend.container != null)
                $(options.legend.container).html(table);
            else {
                var pos = "",
                    p = options.legend.position,
                    m = options.legend.margin;
                if (m[0] == null)
                    m = [m, m];
                if (p.charAt(0) == "n")
                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
                else if (p.charAt(0) == "s")
                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
                if (p.charAt(1) == "e")
                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
                else if (p.charAt(1) == "w")
                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
                var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);
                if (options.legend.backgroundOpacity != 0.0) {
                    // put in the transparent background
                    // separately to avoid blended labels and
                    // label boxes
                    var c = options.legend.backgroundColor;
                    if (c == null) {
                        c = options.grid.backgroundColor;
                        if (c && typeof c == "string")
                            c = $.color.parse(c);
                        else
                            c = $.color.extract(legend, 'background-color');
                        c.a = 1;
                        c = c.toString();
                    }
                    var div = legend.children();
                    $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
                }
            }
        }


        // interactive features

        var highlights = [],
            redrawTimeout = null;

        // returns the data item the mouse is over, or null if none is found
        function findNearbyItem(mouseX, mouseY, seriesFilter) {
            var maxDistance = options.grid.mouseActiveRadius,
                smallestDistance = maxDistance * maxDistance + 1,
                item = null, foundPoint = false, i, j, ps;

            for (i = series.length - 1; i >= 0; --i) {
                if (!seriesFilter(series[i]))
                    continue;

                var s = series[i],
                    axisx = s.xaxis,
                    axisy = s.yaxis,
                    points = s.datapoints.points,
                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster
                    my = axisy.c2p(mouseY),
                    maxx = maxDistance / axisx.scale,
                    maxy = maxDistance / axisy.scale;

                ps = s.datapoints.pointsize;
                // with inverse transforms, we can't use the maxx/maxy
                // optimization, sadly
                if (axisx.options.inverseTransform)
                    maxx = Number.MAX_VALUE;
                if (axisy.options.inverseTransform)
                    maxy = Number.MAX_VALUE;

                if (s.lines.show || s.points.show) {
                    for (j = 0; j < points.length; j += ps) {
                        var x = points[j], y = points[j + 1];
                        if (x == null)
                            continue;

                        // For points and lines, the cursor must be within a
                        // certain distance to the data point
                        if (x - mx > maxx || x - mx < -maxx ||
                            y - my > maxy || y - my < -maxy)
                            continue;

                        // We have to calculate distances in pixels, not in
                        // data units, because the scales of the axes may be different
                        var dx = Math.abs(axisx.p2c(x) - mouseX),
                            dy = Math.abs(axisy.p2c(y) - mouseY),
                            dist = dx * dx + dy * dy; // we save the sqrt

                        // use <= to ensure last point takes precedence
                        // (last generally means on top of)
                        if (dist < smallestDistance) {
                            smallestDistance = dist;
                            item = [i, j / ps];
                        }
                    }
                }

                if (s.bars.show && !item) { // no other point can be nearby

                    var barLeft, barRight;

                    switch (s.bars.align) {
                        case "left":
                            barLeft = 0;
                            break;
                        case "right":
                            barLeft = -s.bars.barWidth;
                            break;
                        default:
                            barLeft = -s.bars.barWidth / 2;
                    }

                    barRight = barLeft + s.bars.barWidth;

                    for (j = 0; j < points.length; j += ps) {
                        var x = points[j], y = points[j + 1], b = points[j + 2];
                        if (x == null)
                            continue;

                        // for a bar graph, the cursor must be inside the bar
                        if (series[i].bars.horizontal ?
                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&
                             my >= y + barLeft && my <= y + barRight) :
                            (mx >= x + barLeft && mx <= x + barRight &&
                             my >= Math.min(b, y) && my <= Math.max(b, y)))
                                item = [i, j / ps];
                    }
                }
            }

            if (item) {
                i = item[0];
                j = item[1];
                ps = series[i].datapoints.pointsize;

                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),
                         dataIndex: j,
                         series: series[i],
                         seriesIndex: i };
            }

            return null;
        }

        function onMouseMove(e) {
            if (options.grid.hoverable)
                triggerClickHoverEvent("plothover", e,
                                       function (s) { return s["hoverable"] != false; });
        }

        function onMouseLeave(e) {
            if (options.grid.hoverable)
                triggerClickHoverEvent("plothover", e,
                                       function (s) { return false; });
        }

        function onClick(e) {
            triggerClickHoverEvent("plotclick", e,
                                   function (s) { return s["clickable"] != false; });
        }

        // trigger click or hover event (they send the same parameters
        // so we share their code)
        function triggerClickHoverEvent(eventname, event, seriesFilter) {
            var offset = eventHolder.offset(),
                canvasX = event.pageX - offset.left - plotOffset.left,
                canvasY = event.pageY - offset.top - plotOffset.top,
            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });

            pos.pageX = event.pageX;
            pos.pageY = event.pageY;

            var item = findNearbyItem(canvasX, canvasY, seriesFilter);

            if (item) {
                // fill in mouse pos for any listeners out there
                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);
                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);
            }

            if (options.grid.autoHighlight) {
                // clear auto-highlights
                for (var i = 0; i < highlights.length; ++i) {
                    var h = highlights[i];
                    if (h.auto == eventname &&
                        !(item && h.series == item.series &&
                          h.point[0] == item.datapoint[0] &&
                          h.point[1] == item.datapoint[1]))
                        unhighlight(h.series, h.point);
                }

                if (item)
                    highlight(item.series, item.datapoint, eventname);
            }

            placeholder.trigger(eventname, [ pos, item ]);
        }

        function triggerRedrawOverlay() {
            var t = options.interaction.redrawOverlayInterval;
            if (t == -1) {      // skip event queue
                drawOverlay();
                return;
            }

            if (!redrawTimeout)
                redrawTimeout = setTimeout(drawOverlay, t);
        }

        function drawOverlay() {
            redrawTimeout = null;

            // draw highlights
            octx.save();
            overlay.clear();
            octx.translate(plotOffset.left, plotOffset.top);

            var i, hi;
            for (i = 0; i < highlights.length; ++i) {
                hi = highlights[i];

                if (hi.series.bars.show)
                    drawBarHighlight(hi.series, hi.point);
                else
                    drawPointHighlight(hi.series, hi.point);
            }
            octx.restore();

            executeHooks(hooks.drawOverlay, [octx]);
        }

        function highlight(s, point, auto) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number") {
                var ps = s.datapoints.pointsize;
                point = s.datapoints.points.slice(ps * point, ps * (point + 1));
            }

            var i = indexOfHighlight(s, point);
            if (i == -1) {
                highlights.push({ series: s, point: point, auto: auto });

                triggerRedrawOverlay();
            }
            else if (!auto)
                highlights[i].auto = false;
        }

        function unhighlight(s, point) {
            if (s == null && point == null) {
                highlights = [];
                triggerRedrawOverlay();
                return;
            }

            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number") {
                var ps = s.datapoints.pointsize;
                point = s.datapoints.points.slice(ps * point, ps * (point + 1));
            }

            var i = indexOfHighlight(s, point);
            if (i != -1) {
                highlights.splice(i, 1);

                triggerRedrawOverlay();
            }
        }

        function indexOfHighlight(s, p) {
            for (var i = 0; i < highlights.length; ++i) {
                var h = highlights[i];
                if (h.series == s && h.point[0] == p[0]
                    && h.point[1] == p[1])
                    return i;
            }
            return -1;
        }

        function drawPointHighlight(series, point) {
            var x = point[0], y = point[1],
                axisx = series.xaxis, axisy = series.yaxis,
                highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();

            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
                return;

            var pointRadius = series.points.radius + series.points.lineWidth / 2;
            octx.lineWidth = pointRadius;
            octx.strokeStyle = highlightColor;
            var radius = 1.5 * pointRadius;
            x = axisx.p2c(x);
            y = axisy.p2c(y);

            octx.beginPath();
            if (series.points.symbol == "circle")
                octx.arc(x, y, radius, 0, 2 * Math.PI, false);
            else
                series.points.symbol(octx, x, y, radius, false);
            octx.closePath();
            octx.stroke();
        }

        function drawBarHighlight(series, point) {
            var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),
                fillStyle = highlightColor,
                barLeft;

            switch (series.bars.align) {
                case "left":
                    barLeft = 0;
                    break;
                case "right":
                    barLeft = -series.bars.barWidth;
                    break;
                default:
                    barLeft = -series.bars.barWidth / 2;
            }

            octx.lineWidth = series.bars.lineWidth;
            octx.strokeStyle = highlightColor;

            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,
                    function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);
        }

        function getColorOrGradient(spec, bottom, top, defaultColor) {
            if (typeof spec == "string")
                return spec;
            else {
                // assume this is a gradient spec; IE currently only
                // supports a simple vertical gradient properly, so that's
                // what we support too
                var gradient = ctx.createLinearGradient(0, top, 0, bottom);

                for (var i = 0, l = spec.colors.length; i < l; ++i) {
                    var c = spec.colors[i];
                    if (typeof c != "string") {
                        var co = $.color.parse(defaultColor);
                        if (c.brightness != null)
                            co = co.scale('rgb', c.brightness);
                        if (c.opacity != null)
                            co.a *= c.opacity;
                        c = co.toString();
                    }
                    gradient.addColorStop(i / (l - 1), c);
                }

                return gradient;
            }
        }
    }

    // Add the plot function to the top level of the jQuery object

    $.plot = function(placeholder, data, options) {
        //var t0 = new Date();
        var plot = new Plot($(placeholder), data, options, $.plot.plugins);
        //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime()));
        return plot;
    };

    $.plot.version = "0.8.2";

    $.plot.plugins = [];

    // Also add the plot function as a chainable property

    $.fn.plot = function(data, options) {
        return this.each(function() {
            $.plot(this, data, options);
        });
    };

    // round to nearby lower multiple of base
    function floorInBase(n, base) {
        return base * Math.floor(n / base);
    }

})(jQuery);

Added Site/Site_J/jquery.js.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
/*!
 * jQuery JavaScript Library v2.1.0
 * http://jquery.com/
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 *
 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 *
 * Date: 2014-01-23T21:10Z
 */

(function( global, factory ) {

	if ( typeof module === "object" && typeof module.exports === "object" ) {
		// For CommonJS and CommonJS-like environments where a proper window is present,
		// execute the factory and get jQuery
		// For environments that do not inherently posses a window with a document
		// (such as Node.js), expose a jQuery-making factory as module.exports
		// This accentuates the need for the creation of a real window
		// e.g. var jQuery = require("jquery")(window);
		// See ticket #14549 for more info
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( "jQuery requires a window with a document" );
				}
				return factory( w );
			};
	} else {
		factory( global );
	}

// Pass this if window is not defined yet
}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {

// Can't do this because several apps including ASP.NET trace
// the stack via arguments.caller.callee and Firefox dies if
// you try to trace through "use strict" call chains. (#13335)
// Support: Firefox 18+
//

var arr = [];

var slice = arr.slice;

var concat = arr.concat;

var push = arr.push;

var indexOf = arr.indexOf;

var class2type = {};

var toString = class2type.toString;

var hasOwn = class2type.hasOwnProperty;

var trim = "".trim;

var support = {};



var
	// Use the correct document accordingly with window argument (sandbox)
	document = window.document,

	version = "2.1.0",

	// Define a local copy of jQuery
	jQuery = function( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		// Need init if jQuery is called (just allow error to be thrown if not included)
		return new jQuery.fn.init( selector, context );
	},

	// Matches dashed string for camelizing
	rmsPrefix = /^-ms-/,
	rdashAlpha = /-([\da-z])/gi,

	// Used by jQuery.camelCase as callback to replace()
	fcamelCase = function( all, letter ) {
		return letter.toUpperCase();
	};

jQuery.fn = jQuery.prototype = {
	// The current version of jQuery being used
	jquery: version,

	constructor: jQuery,

	// Start with an empty selector
	selector: "",

	// The default length of a jQuery object is 0
	length: 0,

	toArray: function() {
		return slice.call( this );
	},

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
		return num != null ?

			// Return a 'clean' array
			( num < 0 ? this[ num + this.length ] : this[ num ] ) :

			// Return just the object
			slice.call( this );
	},

	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems ) {

		// Build a new jQuery matched element set
		var ret = jQuery.merge( this.constructor(), elems );

		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;
		ret.context = this.context;

		// Return the newly-formed element set
		return ret;
	},

	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function( elem, i ) {
			return callback.call( elem, i, elem );
		}));
	},

	slice: function() {
		return this.pushStack( slice.apply( this, arguments ) );
	},

	first: function() {
		return this.eq( 0 );
	},

	last: function() {
		return this.eq( -1 );
	},

	eq: function( i ) {
		var len = this.length,
			j = +i + ( i < 0 ? len : 0 );
		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
	},

	end: function() {
		return this.prevObject || this.constructor(null);
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: push,
	sort: arr.sort,
	splice: arr.splice
};

jQuery.extend = jQuery.fn.extend = function() {
	var options, name, src, copy, copyIsArray, clone,
		target = arguments[0] || {},
		i = 1,
		length = arguments.length,
		deep = false;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;

		// skip the boolean and the target
		target = arguments[ i ] || {};
		i++;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
		target = {};
	}

	// extend jQuery itself if only one argument is passed
	if ( i === length ) {
		target = this;
		i--;
	}

	for ( ; i < length; i++ ) {
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null ) {
			// Extend the base object
			for ( name in options ) {
				src = target[ name ];
				copy = options[ name ];

				// Prevent never-ending loop
				if ( target === copy ) {
					continue;
				}

				// Recurse if we're merging plain objects or arrays
				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
					if ( copyIsArray ) {
						copyIsArray = false;
						clone = src && jQuery.isArray(src) ? src : [];

					} else {
						clone = src && jQuery.isPlainObject(src) ? src : {};
					}

					// Never move original objects, clone them
					target[ name ] = jQuery.extend( deep, clone, copy );

				// Don't bring in undefined values
				} else if ( copy !== undefined ) {
					target[ name ] = copy;
				}
			}
		}
	}

	// Return the modified object
	return target;
};

jQuery.extend({
	// Unique for each copy of jQuery on the page
	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),

	// Assume jQuery is ready without the ready module
	isReady: true,

	error: function( msg ) {
		throw new Error( msg );
	},

	noop: function() {},

	// See test/unit/core.js for details concerning isFunction.
	// Since version 1.3, DOM methods and functions like alert
	// aren't supported. They return false on IE (#2968).
	isFunction: function( obj ) {
		return jQuery.type(obj) === "function";
	},

	isArray: Array.isArray,

	isWindow: function( obj ) {
		return obj != null && obj === obj.window;
	},

	isNumeric: function( obj ) {
		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
		// subtraction forces infinities to NaN
		return obj - parseFloat( obj ) >= 0;
	},

	isPlainObject: function( obj ) {
		// Not plain objects:
		// - Any object or value whose internal [[Class]] property is not "[object Object]"
		// - DOM nodes
		// - window
		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
			return false;
		}

		// Support: Firefox <20
		// The try/catch suppresses exceptions thrown when attempting to access
		// the "constructor" property of certain host objects, ie. |window.location|
		// https://bugzilla.mozilla.org/show_bug.cgi?id=814622
		try {
			if ( obj.constructor &&
					!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
				return false;
			}
		} catch ( e ) {
			return false;
		}

		// If the function hasn't returned already, we're confident that
		// |obj| is a plain object, created by {} or constructed with new Object
		return true;
	},

	isEmptyObject: function( obj ) {
		var name;
		for ( name in obj ) {
			return false;
		}
		return true;
	},

	type: function( obj ) {
		if ( obj == null ) {
			return obj + "";
		}
		// Support: Android < 4.0, iOS < 6 (functionish RegExp)
		return typeof obj === "object" || typeof obj === "function" ?
			class2type[ toString.call(obj) ] || "object" :
			typeof obj;
	},

	// Evaluates a script in a global context
	globalEval: function( code ) {
		var script,
			indirect = eval;

		code = jQuery.trim( code );

		if ( code ) {
			// If the code includes a valid, prologue position
			// strict mode pragma, execute code by injecting a
			// script tag into the document.
			if ( code.indexOf("use strict") === 1 ) {
				script = document.createElement("script");
				script.text = code;
				document.head.appendChild( script ).parentNode.removeChild( script );
			} else {
			// Otherwise, avoid the DOM node creation, insertion
			// and removal by using an indirect global eval
				indirect( code );
			}
		}
	},

	// Convert dashed to camelCase; used by the css and data modules
	// Microsoft forgot to hump their vendor prefix (#9572)
	camelCase: function( string ) {
		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
	},

	nodeName: function( elem, name ) {
		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
	},

	// args is for internal usage only
	each: function( obj, callback, args ) {
		var value,
			i = 0,
			length = obj.length,
			isArray = isArraylike( obj );

		if ( args ) {
			if ( isArray ) {
				for ( ; i < length; i++ ) {
					value = callback.apply( obj[ i ], args );

					if ( value === false ) {
						break;
					}
				}
			} else {
				for ( i in obj ) {
					value = callback.apply( obj[ i ], args );

					if ( value === false ) {
						break;
					}
				}
			}

		// A special, fast, case for the most common use of each
		} else {
			if ( isArray ) {
				for ( ; i < length; i++ ) {
					value = callback.call( obj[ i ], i, obj[ i ] );

					if ( value === false ) {
						break;
					}
				}
			} else {
				for ( i in obj ) {
					value = callback.call( obj[ i ], i, obj[ i ] );

					if ( value === false ) {
						break;
					}
				}
			}
		}

		return obj;
	},

	trim: function( text ) {
		return text == null ? "" : trim.call( text );
	},

	// results is for internal usage only
	makeArray: function( arr, results ) {
		var ret = results || [];

		if ( arr != null ) {
			if ( isArraylike( Object(arr) ) ) {
				jQuery.merge( ret,
					typeof arr === "string" ?
					[ arr ] : arr
				);
			} else {
				push.call( ret, arr );
			}
		}

		return ret;
	},

	inArray: function( elem, arr, i ) {
		return arr == null ? -1 : indexOf.call( arr, elem, i );
	},

	merge: function( first, second ) {
		var len = +second.length,
			j = 0,
			i = first.length;

		for ( ; j < len; j++ ) {
			first[ i++ ] = second[ j ];
		}

		first.length = i;

		return first;
	},

	grep: function( elems, callback, invert ) {
		var callbackInverse,
			matches = [],
			i = 0,
			length = elems.length,
			callbackExpect = !invert;

		// Go through the array, only saving the items
		// that pass the validator function
		for ( ; i < length; i++ ) {
			callbackInverse = !callback( elems[ i ], i );
			if ( callbackInverse !== callbackExpect ) {
				matches.push( elems[ i ] );
			}
		}

		return matches;
	},

	// arg is for internal usage only
	map: function( elems, callback, arg ) {
		var value,
			i = 0,
			length = elems.length,
			isArray = isArraylike( elems ),
			ret = [];

		// Go through the array, translating each of the items to their new values
		if ( isArray ) {
			for ( ; i < length; i++ ) {
				value = callback( elems[ i ], i, arg );

				if ( value != null ) {
					ret.push( value );
				}
			}

		// Go through every key on the object,
		} else {
			for ( i in elems ) {
				value = callback( elems[ i ], i, arg );

				if ( value != null ) {
					ret.push( value );
				}
			}
		}

		// Flatten any nested arrays
		return concat.apply( [], ret );
	},

	// A global GUID counter for objects
	guid: 1,

	// Bind a function to a context, optionally partially applying any
	// arguments.
	proxy: function( fn, context ) {
		var tmp, args, proxy;

		if ( typeof context === "string" ) {
			tmp = fn[ context ];
			context = fn;
			fn = tmp;
		}

		// Quick check to determine if target is callable, in the spec
		// this throws a TypeError, but we will just return undefined.
		if ( !jQuery.isFunction( fn ) ) {
			return undefined;
		}

		// Simulated bind
		args = slice.call( arguments, 2 );
		proxy = function() {
			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
		};

		// Set the guid of unique handler to the same of original handler, so it can be removed
		proxy.guid = fn.guid = fn.guid || jQuery.guid++;

		return proxy;
	},

	now: Date.now,

	// jQuery.support is not used in Core but other projects attach their
	// properties to it so it needs to exist.
	support: support
});

// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
	class2type[ "[object " + name + "]" ] = name.toLowerCase();
});

function isArraylike( obj ) {
	var length = obj.length,
		type = jQuery.type( obj );

	if ( type === "function" || jQuery.isWindow( obj ) ) {
		return false;
	}

	if ( obj.nodeType === 1 && length ) {
		return true;
	}

	return type === "array" || length === 0 ||
		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
}
var Sizzle =
/*!
 * Sizzle CSS Selector Engine v1.10.16
 * http://sizzlejs.com/
 *
 * Copyright 2013 jQuery Foundation, Inc. and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 *
 * Date: 2014-01-13
 */
(function( window ) {

var i,
	support,
	Expr,
	getText,
	isXML,
	compile,
	outermostContext,
	sortInput,
	hasDuplicate,

	// Local document vars
	setDocument,
	document,
	docElem,
	documentIsHTML,
	rbuggyQSA,
	rbuggyMatches,
	matches,
	contains,

	// Instance-specific data
	expando = "sizzle" + -(new Date()),
	preferredDoc = window.document,
	dirruns = 0,
	done = 0,
	classCache = createCache(),
	tokenCache = createCache(),
	compilerCache = createCache(),
	sortOrder = function( a, b ) {
		if ( a === b ) {
			hasDuplicate = true;
		}
		return 0;
	},

	// General-purpose constants
	strundefined = typeof undefined,
	MAX_NEGATIVE = 1 << 31,

	// Instance methods
	hasOwn = ({}).hasOwnProperty,
	arr = [],
	pop = arr.pop,
	push_native = arr.push,
	push = arr.push,
	slice = arr.slice,
	// Use a stripped-down indexOf if we can't use a native one
	indexOf = arr.indexOf || function( elem ) {
		var i = 0,
			len = this.length;
		for ( ; i < len; i++ ) {
			if ( this[i] === elem ) {
				return i;
			}
		}
		return -1;
	},

	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",

	// Regular expressions

	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
	whitespace = "[\\x20\\t\\r\\n\\f]",
	// http://www.w3.org/TR/css3-syntax/#characters
	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",

	// Loosely modeled on CSS identifier characters
	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
	identifier = characterEncoding.replace( "w", "w#" ),

	// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
		"*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",

	// Prefer arguments quoted,
	//   then not containing pseudos/brackets,
	//   then attribute selectors/non-parenthetical expressions,
	//   then anything else
	// These preferences are here to reduce the number of selectors
	//   needing tokenize in the PSEUDO preFilter
	pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",

	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),

	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),

	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),

	rpseudo = new RegExp( pseudos ),
	ridentifier = new RegExp( "^" + identifier + "$" ),

	matchExpr = {
		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
		"ATTR": new RegExp( "^" + attributes ),
		"PSEUDO": new RegExp( "^" + pseudos ),
		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
		// For use in libraries implementing .is()
		// We use this for POS matching in `select`
		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
	},

	rinputs = /^(?:input|select|textarea|button)$/i,
	rheader = /^h\d$/i,

	rnative = /^[^{]+\{\s*\[native \w/,

	// Easily-parseable/retrievable ID or TAG or CLASS selectors
	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,

	rsibling = /[+~]/,
	rescape = /'|\\/g,

	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
	funescape = function( _, escaped, escapedWhitespace ) {
		var high = "0x" + escaped - 0x10000;
		// NaN means non-codepoint
		// Support: Firefox
		// Workaround erroneous numeric interpretation of +"0x"
		return high !== high || escapedWhitespace ?
			escaped :
			high < 0 ?
				// BMP codepoint
				String.fromCharCode( high + 0x10000 ) :
				// Supplemental Plane codepoint (surrogate pair)
				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
	};

// Optimize for push.apply( _, NodeList )
try {
	push.apply(
		(arr = slice.call( preferredDoc.childNodes )),
		preferredDoc.childNodes
	);
	// Support: Android<4.0
	// Detect silently failing push.apply
	arr[ preferredDoc.childNodes.length ].nodeType;
} catch ( e ) {
	push = { apply: arr.length ?

		// Leverage slice if possible
		function( target, els ) {
			push_native.apply( target, slice.call(els) );
		} :

		// Support: IE<9
		// Otherwise append directly
		function( target, els ) {
			var j = target.length,
				i = 0;
			// Can't trust NodeList.length
			while ( (target[j++] = els[i++]) ) {}
			target.length = j - 1;
		}
	};
}

function Sizzle( selector, context, results, seed ) {
	var match, elem, m, nodeType,
		// QSA vars
		i, groups, old, nid, newContext, newSelector;

	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
		setDocument( context );
	}

	context = context || document;
	results = results || [];

	if ( !selector || typeof selector !== "string" ) {
		return results;
	}

	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
		return [];
	}

	if ( documentIsHTML && !seed ) {

		// Shortcuts
		if ( (match = rquickExpr.exec( selector )) ) {
			// Speed-up: Sizzle("#ID")
			if ( (m = match[1]) ) {
				if ( nodeType === 9 ) {
					elem = context.getElementById( m );
					// Check parentNode to catch when Blackberry 4.6 returns
					// nodes that are no longer in the document (jQuery #6963)
					if ( elem && elem.parentNode ) {
						// Handle the case where IE, Opera, and Webkit return items
						// by name instead of ID
						if ( elem.id === m ) {
							results.push( elem );
							return results;
						}
					} else {
						return results;
					}
				} else {
					// Context is not a document
					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
						contains( context, elem ) && elem.id === m ) {
						results.push( elem );
						return results;
					}
				}

			// Speed-up: Sizzle("TAG")
			} else if ( match[2] ) {
				push.apply( results, context.getElementsByTagName( selector ) );
				return results;

			// Speed-up: Sizzle(".CLASS")
			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
				push.apply( results, context.getElementsByClassName( m ) );
				return results;
			}
		}

		// QSA path
		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
			nid = old = expando;
			newContext = context;
			newSelector = nodeType === 9 && selector;

			// qSA works strangely on Element-rooted queries
			// We can work around this by specifying an extra ID on the root
			// and working up from there (Thanks to Andrew Dupont for the technique)
			// IE 8 doesn't work on object elements
			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
				groups = tokenize( selector );

				if ( (old = context.getAttribute("id")) ) {
					nid = old.replace( rescape, "\\$&" );
				} else {
					context.setAttribute( "id", nid );
				}
				nid = "[id='" + nid + "'] ";

				i = groups.length;
				while ( i-- ) {
					groups[i] = nid + toSelector( groups[i] );
				}
				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
				newSelector = groups.join(",");
			}

			if ( newSelector ) {
				try {
					push.apply( results,
						newContext.querySelectorAll( newSelector )
					);
					return results;
				} catch(qsaError) {
				} finally {
					if ( !old ) {
						context.removeAttribute("id");
					}
				}
			}
		}
	}

	// All others
	return select( selector.replace( rtrim, "$1" ), context, results, seed );
}

/**
 * Create key-value caches of limited size
 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
 *	deleting the oldest entry
 */
function createCache() {
	var keys = [];

	function cache( key, value ) {
		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
		if ( keys.push( key + " " ) > Expr.cacheLength ) {
			// Only keep the most recent entries
			delete cache[ keys.shift() ];
		}
		return (cache[ key + " " ] = value);
	}
	return cache;
}

/**
 * Mark a function for special use by Sizzle
 * @param {Function} fn The function to mark
 */
function markFunction( fn ) {
	fn[ expando ] = true;
	return fn;
}

/**
 * Support testing using an element
 * @param {Function} fn Passed the created div and expects a boolean result
 */
function assert( fn ) {
	var div = document.createElement("div");

	try {
		return !!fn( div );
	} catch (e) {
		return false;
	} finally {
		// Remove from its parent by default
		if ( div.parentNode ) {
			div.parentNode.removeChild( div );
		}
		// release memory in IE
		div = null;
	}
}

/**
 * Adds the same handler for all of the specified attrs
 * @param {String} attrs Pipe-separated list of attributes
 * @param {Function} handler The method that will be applied
 */
function addHandle( attrs, handler ) {
	var arr = attrs.split("|"),
		i = attrs.length;

	while ( i-- ) {
		Expr.attrHandle[ arr[i] ] = handler;
	}
}

/**
 * Checks document order of two siblings
 * @param {Element} a
 * @param {Element} b
 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
 */
function siblingCheck( a, b ) {
	var cur = b && a,
		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
			( ~b.sourceIndex || MAX_NEGATIVE ) -
			( ~a.sourceIndex || MAX_NEGATIVE );

	// Use IE sourceIndex if available on both nodes
	if ( diff ) {
		return diff;
	}

	// Check if b follows a
	if ( cur ) {
		while ( (cur = cur.nextSibling) ) {
			if ( cur === b ) {
				return -1;
			}
		}
	}

	return a ? 1 : -1;
}

/**
 * Returns a function to use in pseudos for input types
 * @param {String} type
 */
function createInputPseudo( type ) {
	return function( elem ) {
		var name = elem.nodeName.toLowerCase();
		return name === "input" && elem.type === type;
	};
}

/**
 * Returns a function to use in pseudos for buttons
 * @param {String} type
 */
function createButtonPseudo( type ) {
	return function( elem ) {
		var name = elem.nodeName.toLowerCase();
		return (name === "input" || name === "button") && elem.type === type;
	};
}

/**
 * Returns a function to use in pseudos for positionals
 * @param {Function} fn
 */
function createPositionalPseudo( fn ) {
	return markFunction(function( argument ) {
		argument = +argument;
		return markFunction(function( seed, matches ) {
			var j,
				matchIndexes = fn( [], seed.length, argument ),
				i = matchIndexes.length;

			// Match elements found at the specified indexes
			while ( i-- ) {
				if ( seed[ (j = matchIndexes[i]) ] ) {
					seed[j] = !(matches[j] = seed[j]);
				}
			}
		});
	});
}

/**
 * Checks a node for validity as a Sizzle context
 * @param {Element|Object=} context
 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
 */
function testContext( context ) {
	return context && typeof context.getElementsByTagName !== strundefined && context;
}

// Expose support vars for convenience
support = Sizzle.support = {};

/**
 * Detects XML nodes
 * @param {Element|Object} elem An element or a document
 * @returns {Boolean} True iff elem is a non-HTML XML node
 */
isXML = Sizzle.isXML = function( elem ) {
	// documentElement is verified for cases where it doesn't yet exist
	// (such as loading iframes in IE - #4833)
	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
	return documentElement ? documentElement.nodeName !== "HTML" : false;
};

/**
 * Sets document-related variables once based on the current document
 * @param {Element|Object} [doc] An element or document object to use to set the document
 * @returns {Object} Returns the current document
 */
setDocument = Sizzle.setDocument = function( node ) {
	var hasCompare,
		doc = node ? node.ownerDocument || node : preferredDoc,
		parent = doc.defaultView;

	// If no document and documentElement is available, return
	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
		return document;
	}

	// Set our document
	document = doc;
	docElem = doc.documentElement;

	// Support tests
	documentIsHTML = !isXML( doc );

	// Support: IE>8
	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
	// IE6-8 do not support the defaultView property so parent will be undefined
	if ( parent && parent !== parent.top ) {
		// IE11 does not have attachEvent, so all must suffer
		if ( parent.addEventListener ) {
			parent.addEventListener( "unload", function() {
				setDocument();
			}, false );
		} else if ( parent.attachEvent ) {
			parent.attachEvent( "onunload", function() {
				setDocument();
			});
		}
	}

	/* Attributes
	---------------------------------------------------------------------- */

	// Support: IE<8
	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
	support.attributes = assert(function( div ) {
		div.className = "i";
		return !div.getAttribute("className");
	});

	/* getElement(s)By*
	---------------------------------------------------------------------- */

	// Check if getElementsByTagName("*") returns only elements
	support.getElementsByTagName = assert(function( div ) {
		div.appendChild( doc.createComment("") );
		return !div.getElementsByTagName("*").length;
	});

	// Check if getElementsByClassName can be trusted
	support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
		div.innerHTML = "<div class='a'></div><div class='a i'></div>";

		// Support: Safari<4
		// Catch class over-caching
		div.firstChild.className = "i";
		// Support: Opera<10
		// Catch gEBCN failure to find non-leading classes
		return div.getElementsByClassName("i").length === 2;
	});

	// Support: IE<10
	// Check if getElementById returns elements by name
	// The broken getElementById methods don't pick up programatically-set names,
	// so use a roundabout getElementsByName test
	support.getById = assert(function( div ) {
		docElem.appendChild( div ).id = expando;
		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
	});

	// ID find and filter
	if ( support.getById ) {
		Expr.find["ID"] = function( id, context ) {
			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
				var m = context.getElementById( id );
				// Check parentNode to catch when Blackberry 4.6 returns
				// nodes that are no longer in the document #6963
				return m && m.parentNode ? [m] : [];
			}
		};
		Expr.filter["ID"] = function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				return elem.getAttribute("id") === attrId;
			};
		};
	} else {
		// Support: IE6/7
		// getElementById is not reliable as a find shortcut
		delete Expr.find["ID"];

		Expr.filter["ID"] =  function( id ) {
			var attrId = id.replace( runescape, funescape );
			return function( elem ) {
				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
				return node && node.value === attrId;
			};
		};
	}

	// Tag
	Expr.find["TAG"] = support.getElementsByTagName ?
		function( tag, context ) {
			if ( typeof context.getElementsByTagName !== strundefined ) {
				return context.getElementsByTagName( tag );
			}
		} :
		function( tag, context ) {
			var elem,
				tmp = [],
				i = 0,
				results = context.getElementsByTagName( tag );

			// Filter out possible comments
			if ( tag === "*" ) {
				while ( (elem = results[i++]) ) {
					if ( elem.nodeType === 1 ) {
						tmp.push( elem );
					}
				}

				return tmp;
			}
			return results;
		};

	// Class
	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
			return context.getElementsByClassName( className );
		}
	};

	/* QSA/matchesSelector
	---------------------------------------------------------------------- */

	// QSA and matchesSelector support

	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
	rbuggyMatches = [];

	// qSa(:focus) reports false when true (Chrome 21)
	// We allow this because of a bug in IE8/9 that throws an error
	// whenever `document.activeElement` is accessed on an iframe
	// So, we allow :focus to pass through QSA all the time to avoid the IE error
	// See http://bugs.jquery.com/ticket/13378
	rbuggyQSA = [];

	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
		// Build QSA regex
		// Regex strategy adopted from Diego Perini
		assert(function( div ) {
			// Select is set to empty string on purpose
			// This is to test IE's treatment of not explicitly
			// setting a boolean content attribute,
			// since its presence should be enough
			// http://bugs.jquery.com/ticket/12359
			div.innerHTML = "<select t=''><option selected=''></option></select>";

			// Support: IE8, Opera 10-12
			// Nothing should be selected when empty strings follow ^= or $= or *=
			if ( div.querySelectorAll("[t^='']").length ) {
				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
			}

			// Support: IE8
			// Boolean attributes and "value" are not treated correctly
			if ( !div.querySelectorAll("[selected]").length ) {
				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
			}

			// Webkit/Opera - :checked should return selected option elements
			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
			// IE8 throws error here and will not see later tests
			if ( !div.querySelectorAll(":checked").length ) {
				rbuggyQSA.push(":checked");
			}
		});

		assert(function( div ) {
			// Support: Windows 8 Native Apps
			// The type and name attributes are restricted during .innerHTML assignment
			var input = doc.createElement("input");
			input.setAttribute( "type", "hidden" );
			div.appendChild( input ).setAttribute( "name", "D" );

			// Support: IE8
			// Enforce case-sensitivity of name attribute
			if ( div.querySelectorAll("[name=d]").length ) {
				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
			}

			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
			// IE8 throws error here and will not see later tests
			if ( !div.querySelectorAll(":enabled").length ) {
				rbuggyQSA.push( ":enabled", ":disabled" );
			}

			// Opera 10-11 does not throw on post-comma invalid pseudos
			div.querySelectorAll("*,:x");
			rbuggyQSA.push(",.*:");
		});
	}

	if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||
		docElem.mozMatchesSelector ||
		docElem.oMatchesSelector ||
		docElem.msMatchesSelector) )) ) {

		assert(function( div ) {
			// Check to see if it's possible to do matchesSelector
			// on a disconnected node (IE 9)
			support.disconnectedMatch = matches.call( div, "div" );

			// This should fail with an exception
			// Gecko does not error, returns false instead
			matches.call( div, "[s!='']:x" );
			rbuggyMatches.push( "!=", pseudos );
		});
	}

	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );

	/* Contains
	---------------------------------------------------------------------- */
	hasCompare = rnative.test( docElem.compareDocumentPosition );

	// Element contains another
	// Purposefully does not implement inclusive descendent
	// As in, an element does not contain itself
	contains = hasCompare || rnative.test( docElem.contains ) ?
		function( a, b ) {
			var adown = a.nodeType === 9 ? a.documentElement : a,
				bup = b && b.parentNode;
			return a === bup || !!( bup && bup.nodeType === 1 && (
				adown.contains ?
					adown.contains( bup ) :
					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
			));
		} :
		function( a, b ) {
			if ( b ) {
				while ( (b = b.parentNode) ) {
					if ( b === a ) {
						return true;
					}
				}
			}
			return false;
		};

	/* Sorting
	---------------------------------------------------------------------- */

	// Document order sorting
	sortOrder = hasCompare ?
	function( a, b ) {

		// Flag for duplicate removal
		if ( a === b ) {
			hasDuplicate = true;
			return 0;
		}

		// Sort on method existence if only one input has compareDocumentPosition
		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
		if ( compare ) {
			return compare;
		}

		// Calculate position if both inputs belong to the same document
		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
			a.compareDocumentPosition( b ) :

			// Otherwise we know they are disconnected
			1;

		// Disconnected nodes
		if ( compare & 1 ||
			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {

			// Choose the first element that is related to our preferred document
			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
				return -1;
			}
			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
				return 1;
			}

			// Maintain original order
			return sortInput ?
				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
				0;
		}

		return compare & 4 ? -1 : 1;
	} :
	function( a, b ) {
		// Exit early if the nodes are identical
		if ( a === b ) {
			hasDuplicate = true;
			return 0;
		}

		var cur,
			i = 0,
			aup = a.parentNode,
			bup = b.parentNode,
			ap = [ a ],
			bp = [ b ];

		// Parentless nodes are either documents or disconnected
		if ( !aup || !bup ) {
			return a === doc ? -1 :
				b === doc ? 1 :
				aup ? -1 :
				bup ? 1 :
				sortInput ?
				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
				0;

		// If the nodes are siblings, we can do a quick check
		} else if ( aup === bup ) {
			return siblingCheck( a, b );
		}

		// Otherwise we need full lists of their ancestors for comparison
		cur = a;
		while ( (cur = cur.parentNode) ) {
			ap.unshift( cur );
		}
		cur = b;
		while ( (cur = cur.parentNode) ) {
			bp.unshift( cur );
		}

		// Walk down the tree looking for a discrepancy
		while ( ap[i] === bp[i] ) {
			i++;
		}

		return i ?
			// Do a sibling check if the nodes have a common ancestor
			siblingCheck( ap[i], bp[i] ) :

			// Otherwise nodes in our document sort first
			ap[i] === preferredDoc ? -1 :
			bp[i] === preferredDoc ? 1 :
			0;
	};

	return doc;
};

Sizzle.matches = function( expr, elements ) {
	return Sizzle( expr, null, null, elements );
};

Sizzle.matchesSelector = function( elem, expr ) {
	// Set document vars if needed
	if ( ( elem.ownerDocument || elem ) !== document ) {
		setDocument( elem );
	}

	// Make sure that attribute selectors are quoted
	expr = expr.replace( rattributeQuotes, "='$1']" );

	if ( support.matchesSelector && documentIsHTML &&
		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {

		try {
			var ret = matches.call( elem, expr );

			// IE 9's matchesSelector returns false on disconnected nodes
			if ( ret || support.disconnectedMatch ||
					// As well, disconnected nodes are said to be in a document
					// fragment in IE 9
					elem.document && elem.document.nodeType !== 11 ) {
				return ret;
			}
		} catch(e) {}
	}

	return Sizzle( expr, document, null, [elem] ).length > 0;
};

Sizzle.contains = function( context, elem ) {
	// Set document vars if needed
	if ( ( context.ownerDocument || context ) !== document ) {
		setDocument( context );
	}
	return contains( context, elem );
};

Sizzle.attr = function( elem, name ) {
	// Set document vars if needed
	if ( ( elem.ownerDocument || elem ) !== document ) {
		setDocument( elem );
	}

	var fn = Expr.attrHandle[ name.toLowerCase() ],
		// Don't get fooled by Object.prototype properties (jQuery #13807)
		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
			fn( elem, name, !documentIsHTML ) :
			undefined;

	return val !== undefined ?
		val :
		support.attributes || !documentIsHTML ?
			elem.getAttribute( name ) :
			(val = elem.getAttributeNode(name)) && val.specified ?
				val.value :
				null;
};

Sizzle.error = function( msg ) {
	throw new Error( "Syntax error, unrecognized expression: " + msg );
};

/**
 * Document sorting and removing duplicates
 * @param {ArrayLike} results
 */
Sizzle.uniqueSort = function( results ) {
	var elem,
		duplicates = [],
		j = 0,
		i = 0;

	// Unless we *know* we can detect duplicates, assume their presence
	hasDuplicate = !support.detectDuplicates;
	sortInput = !support.sortStable && results.slice( 0 );
	results.sort( sortOrder );

	if ( hasDuplicate ) {
		while ( (elem = results[i++]) ) {
			if ( elem === results[ i ] ) {
				j = duplicates.push( i );
			}
		}
		while ( j-- ) {
			results.splice( duplicates[ j ], 1 );
		}
	}

	// Clear input after sorting to release objects
	// See https://github.com/jquery/sizzle/pull/225
	sortInput = null;

	return results;
};

/**
 * Utility function for retrieving the text value of an array of DOM nodes
 * @param {Array|Element} elem
 */
getText = Sizzle.getText = function( elem ) {
	var node,
		ret = "",
		i = 0,
		nodeType = elem.nodeType;

	if ( !nodeType ) {
		// If no nodeType, this is expected to be an array
		while ( (node = elem[i++]) ) {
			// Do not traverse comment nodes
			ret += getText( node );
		}
	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
		// Use textContent for elements
		// innerText usage removed for consistency of new lines (jQuery #11153)
		if ( typeof elem.textContent === "string" ) {
			return elem.textContent;
		} else {
			// Traverse its children
			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
				ret += getText( elem );
			}
		}
	} else if ( nodeType === 3 || nodeType === 4 ) {
		return elem.nodeValue;
	}
	// Do not include comment or processing instruction nodes

	return ret;
};

Expr = Sizzle.selectors = {

	// Can be adjusted by the user
	cacheLength: 50,

	createPseudo: markFunction,

	match: matchExpr,

	attrHandle: {},

	find: {},

	relative: {
		">": { dir: "parentNode", first: true },
		" ": { dir: "parentNode" },
		"+": { dir: "previousSibling", first: true },
		"~": { dir: "previousSibling" }
	},

	preFilter: {
		"ATTR": function( match ) {
			match[1] = match[1].replace( runescape, funescape );

			// Move the given value to match[3] whether quoted or unquoted
			match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );

			if ( match[2] === "~=" ) {
				match[3] = " " + match[3] + " ";
			}

			return match.slice( 0, 4 );
		},

		"CHILD": function( match ) {
			/* matches from matchExpr["CHILD"]
				1 type (only|nth|...)
				2 what (child|of-type)
				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
				4 xn-component of xn+y argument ([+-]?\d*n|)
				5 sign of xn-component
				6 x of xn-component
				7 sign of y-component
				8 y of y-component
			*/
			match[1] = match[1].toLowerCase();

			if ( match[1].slice( 0, 3 ) === "nth" ) {
				// nth-* requires argument
				if ( !match[3] ) {
					Sizzle.error( match[0] );
				}

				// numeric x and y parameters for Expr.filter.CHILD
				// remember that false/true cast respectively to 0/1
				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );

			// other types prohibit arguments
			} else if ( match[3] ) {
				Sizzle.error( match[0] );
			}

			return match;
		},

		"PSEUDO": function( match ) {
			var excess,
				unquoted = !match[5] && match[2];

			if ( matchExpr["CHILD"].test( match[0] ) ) {
				return null;
			}

			// Accept quoted arguments as-is
			if ( match[3] && match[4] !== undefined ) {
				match[2] = match[4];

			// Strip excess characters from unquoted arguments
			} else if ( unquoted && rpseudo.test( unquoted ) &&
				// Get excess from tokenize (recursively)
				(excess = tokenize( unquoted, true )) &&
				// advance to the next closing parenthesis
				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {

				// excess is a negative index
				match[0] = match[0].slice( 0, excess );
				match[2] = unquoted.slice( 0, excess );
			}

			// Return only captures needed by the pseudo filter method (type and argument)
			return match.slice( 0, 3 );
		}
	},

	filter: {

		"TAG": function( nodeNameSelector ) {
			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
			return nodeNameSelector === "*" ?
				function() { return true; } :
				function( elem ) {
					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
				};
		},

		"CLASS": function( className ) {
			var pattern = classCache[ className + " " ];

			return pattern ||
				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
				classCache( className, function( elem ) {
					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
				});
		},

		"ATTR": function( name, operator, check ) {
			return function( elem ) {
				var result = Sizzle.attr( elem, name );

				if ( result == null ) {
					return operator === "!=";
				}
				if ( !operator ) {
					return true;
				}

				result += "";

				return operator === "=" ? result === check :
					operator === "!=" ? result !== check :
					operator === "^=" ? check && result.indexOf( check ) === 0 :
					operator === "*=" ? check && result.indexOf( check ) > -1 :
					operator === "$=" ? check && result.slice( -check.length ) === check :
					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
					false;
			};
		},

		"CHILD": function( type, what, argument, first, last ) {
			var simple = type.slice( 0, 3 ) !== "nth",
				forward = type.slice( -4 ) !== "last",
				ofType = what === "of-type";

			return first === 1 && last === 0 ?

				// Shortcut for :nth-*(n)
				function( elem ) {
					return !!elem.parentNode;
				} :

				function( elem, context, xml ) {
					var cache, outerCache, node, diff, nodeIndex, start,
						dir = simple !== forward ? "nextSibling" : "previousSibling",
						parent = elem.parentNode,
						name = ofType && elem.nodeName.toLowerCase(),
						useCache = !xml && !ofType;

					if ( parent ) {

						// :(first|last|only)-(child|of-type)
						if ( simple ) {
							while ( dir ) {
								node = elem;
								while ( (node = node[ dir ]) ) {
									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
										return false;
									}
								}
								// Reverse direction for :only-* (if we haven't yet done so)
								start = dir = type === "only" && !start && "nextSibling";
							}
							return true;
						}

						start = [ forward ? parent.firstChild : parent.lastChild ];

						// non-xml :nth-child(...) stores cache data on `parent`
						if ( forward && useCache ) {
							// Seek `elem` from a previously-cached index
							outerCache = parent[ expando ] || (parent[ expando ] = {});
							cache = outerCache[ type ] || [];
							nodeIndex = cache[0] === dirruns && cache[1];
							diff = cache[0] === dirruns && cache[2];
							node = nodeIndex && parent.childNodes[ nodeIndex ];

							while ( (node = ++nodeIndex && node && node[ dir ] ||

								// Fallback to seeking `elem` from the start
								(diff = nodeIndex = 0) || start.pop()) ) {

								// When found, cache indexes on `parent` and break
								if ( node.nodeType === 1 && ++diff && node === elem ) {
									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
									break;
								}
							}

						// Use previously-cached element index if available
						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
							diff = cache[1];

						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
						} else {
							// Use the same loop as above to seek `elem` from the start
							while ( (node = ++nodeIndex && node && node[ dir ] ||
								(diff = nodeIndex = 0) || start.pop()) ) {

								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
									// Cache the index of each encountered element
									if ( useCache ) {
										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
									}

									if ( node === elem ) {
										break;
									}
								}
							}
						}

						// Incorporate the offset, then check against cycle size
						diff -= last;
						return diff === first || ( diff % first === 0 && diff / first >= 0 );
					}
				};
		},

		"PSEUDO": function( pseudo, argument ) {
			// pseudo-class names are case-insensitive
			// http://www.w3.org/TR/selectors/#pseudo-classes
			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
			// Remember that setFilters inherits from pseudos
			var args,
				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
					Sizzle.error( "unsupported pseudo: " + pseudo );

			// The user may use createPseudo to indicate that
			// arguments are needed to create the filter function
			// just as Sizzle does
			if ( fn[ expando ] ) {
				return fn( argument );
			}

			// But maintain support for old signatures
			if ( fn.length > 1 ) {
				args = [ pseudo, pseudo, "", argument ];
				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
					markFunction(function( seed, matches ) {
						var idx,
							matched = fn( seed, argument ),
							i = matched.length;
						while ( i-- ) {
							idx = indexOf.call( seed, matched[i] );
							seed[ idx ] = !( matches[ idx ] = matched[i] );
						}
					}) :
					function( elem ) {
						return fn( elem, 0, args );
					};
			}

			return fn;
		}
	},

	pseudos: {
		// Potentially complex pseudos
		"not": markFunction(function( selector ) {
			// Trim the selector passed to compile
			// to avoid treating leading and trailing
			// spaces as combinators
			var input = [],
				results = [],
				matcher = compile( selector.replace( rtrim, "$1" ) );

			return matcher[ expando ] ?
				markFunction(function( seed, matches, context, xml ) {
					var elem,
						unmatched = matcher( seed, null, xml, [] ),
						i = seed.length;

					// Match elements unmatched by `matcher`
					while ( i-- ) {
						if ( (elem = unmatched[i]) ) {
							seed[i] = !(matches[i] = elem);
						}
					}
				}) :
				function( elem, context, xml ) {
					input[0] = elem;
					matcher( input, null, xml, results );
					return !results.pop();
				};
		}),

		"has": markFunction(function( selector ) {
			return function( elem ) {
				return Sizzle( selector, elem ).length > 0;
			};
		}),

		"contains": markFunction(function( text ) {
			return function( elem ) {
				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
			};
		}),

		// "Whether an element is represented by a :lang() selector
		// is based solely on the element's language value
		// being equal to the identifier C,
		// or beginning with the identifier C immediately followed by "-".
		// The matching of C against the element's language value is performed case-insensitively.
		// The identifier C does not have to be a valid language name."
		// http://www.w3.org/TR/selectors/#lang-pseudo
		"lang": markFunction( function( lang ) {
			// lang value must be a valid identifier
			if ( !ridentifier.test(lang || "") ) {
				Sizzle.error( "unsupported lang: " + lang );
			}
			lang = lang.replace( runescape, funescape ).toLowerCase();
			return function( elem ) {
				var elemLang;
				do {
					if ( (elemLang = documentIsHTML ?
						elem.lang :
						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {

						elemLang = elemLang.toLowerCase();
						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
					}
				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
				return false;
			};
		}),

		// Miscellaneous
		"target": function( elem ) {
			var hash = window.location && window.location.hash;
			return hash && hash.slice( 1 ) === elem.id;
		},

		"root": function( elem ) {
			return elem === docElem;
		},

		"focus": function( elem ) {
			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
		},

		// Boolean properties
		"enabled": function( elem ) {
			return elem.disabled === false;
		},

		"disabled": function( elem ) {
			return elem.disabled === true;
		},

		"checked": function( elem ) {
			// In CSS3, :checked should return both checked and selected elements
			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
			var nodeName = elem.nodeName.toLowerCase();
			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
		},

		"selected": function( elem ) {
			// Accessing this property makes selected-by-default
			// options in Safari work properly
			if ( elem.parentNode ) {
				elem.parentNode.selectedIndex;
			}

			return elem.selected === true;
		},

		// Contents
		"empty": function( elem ) {
			// http://www.w3.org/TR/selectors/#empty-pseudo
			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
			//   but not by others (comment: 8; processing instruction: 7; etc.)
			// nodeType < 6 works because attributes (2) do not appear as children
			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
				if ( elem.nodeType < 6 ) {
					return false;
				}
			}
			return true;
		},

		"parent": function( elem ) {
			return !Expr.pseudos["empty"]( elem );
		},

		// Element/input types
		"header": function( elem ) {
			return rheader.test( elem.nodeName );
		},

		"input": function( elem ) {
			return rinputs.test( elem.nodeName );
		},

		"button": function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return name === "input" && elem.type === "button" || name === "button";
		},

		"text": function( elem ) {
			var attr;
			return elem.nodeName.toLowerCase() === "input" &&
				elem.type === "text" &&

				// Support: IE<8
				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
		},

		// Position-in-collection
		"first": createPositionalPseudo(function() {
			return [ 0 ];
		}),

		"last": createPositionalPseudo(function( matchIndexes, length ) {
			return [ length - 1 ];
		}),

		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
			return [ argument < 0 ? argument + length : argument ];
		}),

		"even": createPositionalPseudo(function( matchIndexes, length ) {
			var i = 0;
			for ( ; i < length; i += 2 ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		}),

		"odd": createPositionalPseudo(function( matchIndexes, length ) {
			var i = 1;
			for ( ; i < length; i += 2 ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		}),

		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
			var i = argument < 0 ? argument + length : argument;
			for ( ; --i >= 0; ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		}),

		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
			var i = argument < 0 ? argument + length : argument;
			for ( ; ++i < length; ) {
				matchIndexes.push( i );
			}
			return matchIndexes;
		})
	}
};

Expr.pseudos["nth"] = Expr.pseudos["eq"];

// Add button/input type pseudos
for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
	Expr.pseudos[ i ] = createInputPseudo( i );
}
for ( i in { submit: true, reset: true } ) {
	Expr.pseudos[ i ] = createButtonPseudo( i );
}

// Easy API for creating new setFilters
function setFilters() {}
setFilters.prototype = Expr.filters = Expr.pseudos;
Expr.setFilters = new setFilters();

function tokenize( selector, parseOnly ) {
	var matched, match, tokens, type,
		soFar, groups, preFilters,
		cached = tokenCache[ selector + " " ];

	if ( cached ) {
		return parseOnly ? 0 : cached.slice( 0 );
	}

	soFar = selector;
	groups = [];
	preFilters = Expr.preFilter;

	while ( soFar ) {

		// Comma and first run
		if ( !matched || (match = rcomma.exec( soFar )) ) {
			if ( match ) {
				// Don't consume trailing commas as valid
				soFar = soFar.slice( match[0].length ) || soFar;
			}
			groups.push( (tokens = []) );
		}

		matched = false;

		// Combinators
		if ( (match = rcombinators.exec( soFar )) ) {
			matched = match.shift();
			tokens.push({
				value: matched,
				// Cast descendant combinators to space
				type: match[0].replace( rtrim, " " )
			});
			soFar = soFar.slice( matched.length );
		}

		// Filters
		for ( type in Expr.filter ) {
			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
				(match = preFilters[ type ]( match ))) ) {
				matched = match.shift();
				tokens.push({
					value: matched,
					type: type,
					matches: match
				});
				soFar = soFar.slice( matched.length );
			}
		}

		if ( !matched ) {
			break;
		}
	}

	// Return the length of the invalid excess
	// if we're just parsing
	// Otherwise, throw an error or return tokens
	return parseOnly ?
		soFar.length :
		soFar ?
			Sizzle.error( selector ) :
			// Cache the tokens
			tokenCache( selector, groups ).slice( 0 );
}

function toSelector( tokens ) {
	var i = 0,
		len = tokens.length,
		selector = "";
	for ( ; i < len; i++ ) {
		selector += tokens[i].value;
	}
	return selector;
}

function addCombinator( matcher, combinator, base ) {
	var dir = combinator.dir,
		checkNonElements = base && dir === "parentNode",
		doneName = done++;

	return combinator.first ?
		// Check against closest ancestor/preceding element
		function( elem, context, xml ) {
			while ( (elem = elem[ dir ]) ) {
				if ( elem.nodeType === 1 || checkNonElements ) {
					return matcher( elem, context, xml );
				}
			}
		} :

		// Check against all ancestor/preceding elements
		function( elem, context, xml ) {
			var oldCache, outerCache,
				newCache = [ dirruns, doneName ];

			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
			if ( xml ) {
				while ( (elem = elem[ dir ]) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						if ( matcher( elem, context, xml ) ) {
							return true;
						}
					}
				}
			} else {
				while ( (elem = elem[ dir ]) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						outerCache = elem[ expando ] || (elem[ expando ] = {});
						if ( (oldCache = outerCache[ dir ]) &&
							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {

							// Assign to newCache so results back-propagate to previous elements
							return (newCache[ 2 ] = oldCache[ 2 ]);
						} else {
							// Reuse newcache so results back-propagate to previous elements
							outerCache[ dir ] = newCache;

							// A match means we're done; a fail means we have to keep checking
							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
								return true;
							}
						}
					}
				}
			}
		};
}

function elementMatcher( matchers ) {
	return matchers.length > 1 ?
		function( elem, context, xml ) {
			var i = matchers.length;
			while ( i-- ) {
				if ( !matchers[i]( elem, context, xml ) ) {
					return false;
				}
			}
			return true;
		} :
		matchers[0];
}

function condense( unmatched, map, filter, context, xml ) {
	var elem,
		newUnmatched = [],
		i = 0,
		len = unmatched.length,
		mapped = map != null;

	for ( ; i < len; i++ ) {
		if ( (elem = unmatched[i]) ) {
			if ( !filter || filter( elem, context, xml ) ) {
				newUnmatched.push( elem );
				if ( mapped ) {
					map.push( i );
				}
			}
		}
	}

	return newUnmatched;
}

function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
	if ( postFilter && !postFilter[ expando ] ) {
		postFilter = setMatcher( postFilter );
	}
	if ( postFinder && !postFinder[ expando ] ) {
		postFinder = setMatcher( postFinder, postSelector );
	}
	return markFunction(function( seed, results, context, xml ) {
		var temp, i, elem,
			preMap = [],
			postMap = [],
			preexisting = results.length,

			// Get initial elements from seed or context
			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),

			// Prefilter to get matcher input, preserving a map for seed-results synchronization
			matcherIn = preFilter && ( seed || !selector ) ?
				condense( elems, preMap, preFilter, context, xml ) :
				elems,

			matcherOut = matcher ?
				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?

					// ...intermediate processing is necessary
					[] :

					// ...otherwise use results directly
					results :
				matcherIn;

		// Find primary matches
		if ( matcher ) {
			matcher( matcherIn, matcherOut, context, xml );
		}

		// Apply postFilter
		if ( postFilter ) {
			temp = condense( matcherOut, postMap );
			postFilter( temp, [], context, xml );

			// Un-match failing elements by moving them back to matcherIn
			i = temp.length;
			while ( i-- ) {
				if ( (elem = temp[i]) ) {
					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
				}
			}
		}

		if ( seed ) {
			if ( postFinder || preFilter ) {
				if ( postFinder ) {
					// Get the final matcherOut by condensing this intermediate into postFinder contexts
					temp = [];
					i = matcherOut.length;
					while ( i-- ) {
						if ( (elem = matcherOut[i]) ) {
							// Restore matcherIn since elem is not yet a final match
							temp.push( (matcherIn[i] = elem) );
						}
					}
					postFinder( null, (matcherOut = []), temp, xml );
				}

				// Move matched elements from seed to results to keep them synchronized
				i = matcherOut.length;
				while ( i-- ) {
					if ( (elem = matcherOut[i]) &&
						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {

						seed[temp] = !(results[temp] = elem);
					}
				}
			}

		// Add elements to results, through postFinder if defined
		} else {
			matcherOut = condense(
				matcherOut === results ?
					matcherOut.splice( preexisting, matcherOut.length ) :
					matcherOut
			);
			if ( postFinder ) {
				postFinder( null, results, matcherOut, xml );
			} else {
				push.apply( results, matcherOut );
			}
		}
	});
}

function matcherFromTokens( tokens ) {
	var checkContext, matcher, j,
		len = tokens.length,
		leadingRelative = Expr.relative[ tokens[0].type ],
		implicitRelative = leadingRelative || Expr.relative[" "],
		i = leadingRelative ? 1 : 0,

		// The foundational matcher ensures that elements are reachable from top-level context(s)
		matchContext = addCombinator( function( elem ) {
			return elem === checkContext;
		}, implicitRelative, true ),
		matchAnyContext = addCombinator( function( elem ) {
			return indexOf.call( checkContext, elem ) > -1;
		}, implicitRelative, true ),
		matchers = [ function( elem, context, xml ) {
			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
				(checkContext = context).nodeType ?
					matchContext( elem, context, xml ) :
					matchAnyContext( elem, context, xml ) );
		} ];

	for ( ; i < len; i++ ) {
		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
		} else {
			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );

			// Return special upon seeing a positional matcher
			if ( matcher[ expando ] ) {
				// Find the next relative operator (if any) for proper handling
				j = ++i;
				for ( ; j < len; j++ ) {
					if ( Expr.relative[ tokens[j].type ] ) {
						break;
					}
				}
				return setMatcher(
					i > 1 && elementMatcher( matchers ),
					i > 1 && toSelector(
						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
					).replace( rtrim, "$1" ),
					matcher,
					i < j && matcherFromTokens( tokens.slice( i, j ) ),
					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
					j < len && toSelector( tokens )
				);
			}
			matchers.push( matcher );
		}
	}

	return elementMatcher( matchers );
}

function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
	var bySet = setMatchers.length > 0,
		byElement = elementMatchers.length > 0,
		superMatcher = function( seed, context, xml, results, outermost ) {
			var elem, j, matcher,
				matchedCount = 0,
				i = "0",
				unmatched = seed && [],
				setMatched = [],
				contextBackup = outermostContext,
				// We must always have either seed elements or outermost context
				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
				// Use integer dirruns iff this is the outermost matcher
				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
				len = elems.length;

			if ( outermost ) {
				outermostContext = context !== document && context;
			}

			// Add elements passing elementMatchers directly to results
			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
			// Support: IE<9, Safari
			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
				if ( byElement && elem ) {
					j = 0;
					while ( (matcher = elementMatchers[j++]) ) {
						if ( matcher( elem, context, xml ) ) {
							results.push( elem );
							break;
						}
					}
					if ( outermost ) {
						dirruns = dirrunsUnique;
					}
				}

				// Track unmatched elements for set filters
				if ( bySet ) {
					// They will have gone through all possible matchers
					if ( (elem = !matcher && elem) ) {
						matchedCount--;
					}

					// Lengthen the array for every element, matched or not
					if ( seed ) {
						unmatched.push( elem );
					}
				}
			}

			// Apply set filters to unmatched elements
			matchedCount += i;
			if ( bySet && i !== matchedCount ) {
				j = 0;
				while ( (matcher = setMatchers[j++]) ) {
					matcher( unmatched, setMatched, context, xml );
				}

				if ( seed ) {
					// Reintegrate element matches to eliminate the need for sorting
					if ( matchedCount > 0 ) {
						while ( i-- ) {
							if ( !(unmatched[i] || setMatched[i]) ) {
								setMatched[i] = pop.call( results );
							}
						}
					}

					// Discard index placeholder values to get only actual matches
					setMatched = condense( setMatched );
				}

				// Add matches to results
				push.apply( results, setMatched );

				// Seedless set matches succeeding multiple successful matchers stipulate sorting
				if ( outermost && !seed && setMatched.length > 0 &&
					( matchedCount + setMatchers.length ) > 1 ) {

					Sizzle.uniqueSort( results );
				}
			}

			// Override manipulation of globals by nested matchers
			if ( outermost ) {
				dirruns = dirrunsUnique;
				outermostContext = contextBackup;
			}

			return unmatched;
		};

	return bySet ?
		markFunction( superMatcher ) :
		superMatcher;
}

compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
	var i,
		setMatchers = [],
		elementMatchers = [],
		cached = compilerCache[ selector + " " ];

	if ( !cached ) {
		// Generate a function of recursive functions that can be used to check each element
		if ( !group ) {
			group = tokenize( selector );
		}
		i = group.length;
		while ( i-- ) {
			cached = matcherFromTokens( group[i] );
			if ( cached[ expando ] ) {
				setMatchers.push( cached );
			} else {
				elementMatchers.push( cached );
			}
		}

		// Cache the compiled function
		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
	}
	return cached;
};

function multipleContexts( selector, contexts, results ) {
	var i = 0,
		len = contexts.length;
	for ( ; i < len; i++ ) {
		Sizzle( selector, contexts[i], results );
	}
	return results;
}

function select( selector, context, results, seed ) {
	var i, tokens, token, type, find,
		match = tokenize( selector );

	if ( !seed ) {
		// Try to minimize operations if there is only one group
		if ( match.length === 1 ) {

			// Take a shortcut and set the context if the root selector is an ID
			tokens = match[0] = match[0].slice( 0 );
			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
					support.getById && context.nodeType === 9 && documentIsHTML &&
					Expr.relative[ tokens[1].type ] ) {

				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
				if ( !context ) {
					return results;
				}
				selector = selector.slice( tokens.shift().value.length );
			}

			// Fetch a seed set for right-to-left matching
			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
			while ( i-- ) {
				token = tokens[i];

				// Abort if we hit a combinator
				if ( Expr.relative[ (type = token.type) ] ) {
					break;
				}
				if ( (find = Expr.find[ type ]) ) {
					// Search, expanding context for leading sibling combinators
					if ( (seed = find(
						token.matches[0].replace( runescape, funescape ),
						rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
					)) ) {

						// If seed is empty or no tokens remain, we can return early
						tokens.splice( i, 1 );
						selector = seed.length && toSelector( tokens );
						if ( !selector ) {
							push.apply( results, seed );
							return results;
						}

						break;
					}
				}
			}
		}
	}

	// Compile and execute a filtering function
	// Provide `match` to avoid retokenization if we modified the selector above
	compile( selector, match )(
		seed,
		context,
		!documentIsHTML,
		results,
		rsibling.test( selector ) && testContext( context.parentNode ) || context
	);
	return results;
}

// One-time assignments

// Sort stability
support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;

// Support: Chrome<14
// Always assume duplicates if they aren't passed to the comparison function
support.detectDuplicates = !!hasDuplicate;

// Initialize against the default document
setDocument();

// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
// Detached nodes confoundingly follow *each other*
support.sortDetached = assert(function( div1 ) {
	// Should return 1, but returns 4 (following)
	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
});

// Support: IE<8
// Prevent attribute/property "interpolation"
// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
if ( !assert(function( div ) {
	div.innerHTML = "<a href='#'></a>";
	return div.firstChild.getAttribute("href") === "#" ;
}) ) {
	addHandle( "type|href|height|width", function( elem, name, isXML ) {
		if ( !isXML ) {
			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
		}
	});
}

// Support: IE<9
// Use defaultValue in place of getAttribute("value")
if ( !support.attributes || !assert(function( div ) {
	div.innerHTML = "<input/>";
	div.firstChild.setAttribute( "value", "" );
	return div.firstChild.getAttribute( "value" ) === "";
}) ) {
	addHandle( "value", function( elem, name, isXML ) {
		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
			return elem.defaultValue;
		}
	});
}

// Support: IE<9
// Use getAttributeNode to fetch booleans when getAttribute lies
if ( !assert(function( div ) {
	return div.getAttribute("disabled") == null;
}) ) {
	addHandle( booleans, function( elem, name, isXML ) {
		var val;
		if ( !isXML ) {
			return elem[ name ] === true ? name.toLowerCase() :
					(val = elem.getAttributeNode( name )) && val.specified ?
					val.value :
				null;
		}
	});
}

return Sizzle;

})( window );



jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.pseudos;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;



var rneedsContext = jQuery.expr.match.needsContext;

var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);



var risSimple = /^.[^:#\[\.,]*$/;

// Implement the identical functionality for filter and not
function winnow( elements, qualifier, not ) {
	if ( jQuery.isFunction( qualifier ) ) {
		return jQuery.grep( elements, function( elem, i ) {
			/* jshint -W018 */
			return !!qualifier.call( elem, i, elem ) !== not;
		});

	}

	if ( qualifier.nodeType ) {
		return jQuery.grep( elements, function( elem ) {
			return ( elem === qualifier ) !== not;
		});

	}

	if ( typeof qualifier === "string" ) {
		if ( risSimple.test( qualifier ) ) {
			return jQuery.filter( qualifier, elements, not );
		}

		qualifier = jQuery.filter( qualifier, elements );
	}

	return jQuery.grep( elements, function( elem ) {
		return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
	});
}

jQuery.filter = function( expr, elems, not ) {
	var elem = elems[ 0 ];

	if ( not ) {
		expr = ":not(" + expr + ")";
	}

	return elems.length === 1 && elem.nodeType === 1 ?
		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
			return elem.nodeType === 1;
		}));
};

jQuery.fn.extend({
	find: function( selector ) {
		var i,
			len = this.length,
			ret = [],
			self = this;

		if ( typeof selector !== "string" ) {
			return this.pushStack( jQuery( selector ).filter(function() {
				for ( i = 0; i < len; i++ ) {
					if ( jQuery.contains( self[ i ], this ) ) {
						return true;
					}
				}
			}) );
		}

		for ( i = 0; i < len; i++ ) {
			jQuery.find( selector, self[ i ], ret );
		}

		// Needed because $( selector, context ) becomes $( context ).find( selector )
		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
		ret.selector = this.selector ? this.selector + " " + selector : selector;
		return ret;
	},
	filter: function( selector ) {
		return this.pushStack( winnow(this, selector || [], false) );
	},
	not: function( selector ) {
		return this.pushStack( winnow(this, selector || [], true) );
	},
	is: function( selector ) {
		return !!winnow(
			this,

			// If this is a positional/relative selector, check membership in the returned set
			// so $("p:first").is("p:last") won't return true for a doc with two "p".
			typeof selector === "string" && rneedsContext.test( selector ) ?
				jQuery( selector ) :
				selector || [],
			false
		).length;
	}
});


// Initialize a jQuery object


// A central reference to the root jQuery(document)
var rootjQuery,

	// A simple way to check for HTML strings
	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
	// Strict HTML recognition (#11290: must start with <)
	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

	init = jQuery.fn.init = function( selector, context ) {
		var match, elem;

		// HANDLE: $(""), $(null), $(undefined), $(false)
		if ( !selector ) {
			return this;
		}

		// Handle HTML strings
		if ( typeof selector === "string" ) {
			if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
				// Assume that strings that start and end with <> are HTML and skip the regex check
				match = [ null, selector, null ];

			} else {
				match = rquickExpr.exec( selector );
			}

			// Match html or make sure no context is specified for #id
			if ( match && (match[1] || !context) ) {

				// HANDLE: $(html) -> $(array)
				if ( match[1] ) {
					context = context instanceof jQuery ? context[0] : context;

					// scripts is true for back-compat
					// Intentionally let the error be thrown if parseHTML is not present
					jQuery.merge( this, jQuery.parseHTML(
						match[1],
						context && context.nodeType ? context.ownerDocument || context : document,
						true
					) );

					// HANDLE: $(html, props)
					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
						for ( match in context ) {
							// Properties of context are called as methods if possible
							if ( jQuery.isFunction( this[ match ] ) ) {
								this[ match ]( context[ match ] );

							// ...and otherwise set as attributes
							} else {
								this.attr( match, context[ match ] );
							}
						}
					}

					return this;

				// HANDLE: $(#id)
				} else {
					elem = document.getElementById( match[2] );

					// Check parentNode to catch when Blackberry 4.6 returns
					// nodes that are no longer in the document #6963
					if ( elem && elem.parentNode ) {
						// Inject the element directly into the jQuery object
						this.length = 1;
						this[0] = elem;
					}

					this.context = document;
					this.selector = selector;
					return this;
				}

			// HANDLE: $(expr, $(...))
			} else if ( !context || context.jquery ) {
				return ( context || rootjQuery ).find( selector );

			// HANDLE: $(expr, context)
			// (which is just equivalent to: $(context).find(expr)
			} else {
				return this.constructor( context ).find( selector );
			}

		// HANDLE: $(DOMElement)
		} else if ( selector.nodeType ) {
			this.context = this[0] = selector;
			this.length = 1;
			return this;

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( jQuery.isFunction( selector ) ) {
			return typeof rootjQuery.ready !== "undefined" ?
				rootjQuery.ready( selector ) :
				// Execute immediately if ready is not present
				selector( jQuery );
		}

		if ( selector.selector !== undefined ) {
			this.selector = selector.selector;
			this.context = selector.context;
		}

		return jQuery.makeArray( selector, this );
	};

// Give the init function the jQuery prototype for later instantiation
init.prototype = jQuery.fn;

// Initialize central reference
rootjQuery = jQuery( document );


var rparentsprev = /^(?:parents|prev(?:Until|All))/,
	// methods guaranteed to produce a unique set when starting from a unique set
	guaranteedUnique = {
		children: true,
		contents: true,
		next: true,
		prev: true
	};

jQuery.extend({
	dir: function( elem, dir, until ) {
		var matched = [],
			truncate = until !== undefined;

		while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
			if ( elem.nodeType === 1 ) {
				if ( truncate && jQuery( elem ).is( until ) ) {
					break;
				}
				matched.push( elem );
			}
		}
		return matched;
	},

	sibling: function( n, elem ) {
		var matched = [];

		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType === 1 && n !== elem ) {
				matched.push( n );
			}
		}

		return matched;
	}
});

jQuery.fn.extend({
	has: function( target ) {
		var targets = jQuery( target, this ),
			l = targets.length;

		return this.filter(function() {
			var i = 0;
			for ( ; i < l; i++ ) {
				if ( jQuery.contains( this, targets[i] ) ) {
					return true;
				}
			}
		});
	},

	closest: function( selectors, context ) {
		var cur,
			i = 0,
			l = this.length,
			matched = [],
			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
				jQuery( selectors, context || this.context ) :
				0;

		for ( ; i < l; i++ ) {
			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
				// Always skip document fragments
				if ( cur.nodeType < 11 && (pos ?
					pos.index(cur) > -1 :

					// Don't pass non-elements to Sizzle
					cur.nodeType === 1 &&
						jQuery.find.matchesSelector(cur, selectors)) ) {

					matched.push( cur );
					break;
				}
			}
		}

		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
	},

	// Determine the position of an element within
	// the matched set of elements
	index: function( elem ) {

		// No argument, return index in parent
		if ( !elem ) {
			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
		}

		// index in selector
		if ( typeof elem === "string" ) {
			return indexOf.call( jQuery( elem ), this[ 0 ] );
		}

		// Locate the position of the desired element
		return indexOf.call( this,

			// If it receives a jQuery object, the first element is used
			elem.jquery ? elem[ 0 ] : elem
		);
	},

	add: function( selector, context ) {
		return this.pushStack(
			jQuery.unique(
				jQuery.merge( this.get(), jQuery( selector, context ) )
			)
		);
	},

	addBack: function( selector ) {
		return this.add( selector == null ?
			this.prevObject : this.prevObject.filter(selector)
		);
	}
});

function sibling( cur, dir ) {
	while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
	return cur;
}

jQuery.each({
	parent: function( elem ) {
		var parent = elem.parentNode;
		return parent && parent.nodeType !== 11 ? parent : null;
	},
	parents: function( elem ) {
		return jQuery.dir( elem, "parentNode" );
	},
	parentsUntil: function( elem, i, until ) {
		return jQuery.dir( elem, "parentNode", until );
	},
	next: function( elem ) {
		return sibling( elem, "nextSibling" );
	},
	prev: function( elem ) {
		return sibling( elem, "previousSibling" );
	},
	nextAll: function( elem ) {
		return jQuery.dir( elem, "nextSibling" );
	},
	prevAll: function( elem ) {
		return jQuery.dir( elem, "previousSibling" );
	},
	nextUntil: function( elem, i, until ) {
		return jQuery.dir( elem, "nextSibling", until );
	},
	prevUntil: function( elem, i, until ) {
		return jQuery.dir( elem, "previousSibling", until );
	},
	siblings: function( elem ) {
		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
	},
	children: function( elem ) {
		return jQuery.sibling( elem.firstChild );
	},
	contents: function( elem ) {
		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
	}
}, function( name, fn ) {
	jQuery.fn[ name ] = function( until, selector ) {
		var matched = jQuery.map( this, fn, until );

		if ( name.slice( -5 ) !== "Until" ) {
			selector = until;
		}

		if ( selector && typeof selector === "string" ) {
			matched = jQuery.filter( selector, matched );
		}

		if ( this.length > 1 ) {
			// Remove duplicates
			if ( !guaranteedUnique[ name ] ) {
				jQuery.unique( matched );
			}

			// Reverse order for parents* and prev-derivatives
			if ( rparentsprev.test( name ) ) {
				matched.reverse();
			}
		}

		return this.pushStack( matched );
	};
});
var rnotwhite = (/\S+/g);



// String to Object options format cache
var optionsCache = {};

// Convert String-formatted options into Object-formatted ones and store in cache
function createOptions( options ) {
	var object = optionsCache[ options ] = {};
	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
		object[ flag ] = true;
	});
	return object;
}

/*
 * Create a callback list using the following parameters:
 *
 *	options: an optional list of space-separated options that will change how
 *			the callback list behaves or a more traditional option object
 *
 * By default a callback list will act like an event callback list and can be
 * "fired" multiple times.
 *
 * Possible options:
 *
 *	once:			will ensure the callback list can only be fired once (like a Deferred)
 *
 *	memory:			will keep track of previous values and will call any callback added
 *					after the list has been fired right away with the latest "memorized"
 *					values (like a Deferred)
 *
 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
 *
 *	stopOnFalse:	interrupt callings when a callback returns false
 *
 */
jQuery.Callbacks = function( options ) {

	// Convert options from String-formatted to Object-formatted if needed
	// (we check in cache first)
	options = typeof options === "string" ?
		( optionsCache[ options ] || createOptions( options ) ) :
		jQuery.extend( {}, options );

	var // Last fire value (for non-forgettable lists)
		memory,
		// Flag to know if list was already fired
		fired,
		// Flag to know if list is currently firing
		firing,
		// First callback to fire (used internally by add and fireWith)
		firingStart,
		// End of the loop when firing
		firingLength,
		// Index of currently firing callback (modified by remove if needed)
		firingIndex,
		// Actual callback list
		list = [],
		// Stack of fire calls for repeatable lists
		stack = !options.once && [],
		// Fire callbacks
		fire = function( data ) {
			memory = options.memory && data;
			fired = true;
			firingIndex = firingStart || 0;
			firingStart = 0;
			firingLength = list.length;
			firing = true;
			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
					memory = false; // To prevent further calls using add
					break;
				}
			}
			firing = false;
			if ( list ) {
				if ( stack ) {
					if ( stack.length ) {
						fire( stack.shift() );
					}
				} else if ( memory ) {
					list = [];
				} else {
					self.disable();
				}
			}
		},
		// Actual Callbacks object
		self = {
			// Add a callback or a collection of callbacks to the list
			add: function() {
				if ( list ) {
					// First, we save the current length
					var start = list.length;
					(function add( args ) {
						jQuery.each( args, function( _, arg ) {
							var type = jQuery.type( arg );
							if ( type === "function" ) {
								if ( !options.unique || !self.has( arg ) ) {
									list.push( arg );
								}
							} else if ( arg && arg.length && type !== "string" ) {
								// Inspect recursively
								add( arg );
							}
						});
					})( arguments );
					// Do we need to add the callbacks to the
					// current firing batch?
					if ( firing ) {
						firingLength = list.length;
					// With memory, if we're not firing then
					// we should call right away
					} else if ( memory ) {
						firingStart = start;
						fire( memory );
					}
				}
				return this;
			},
			// Remove a callback from the list
			remove: function() {
				if ( list ) {
					jQuery.each( arguments, function( _, arg ) {
						var index;
						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
							list.splice( index, 1 );
							// Handle firing indexes
							if ( firing ) {
								if ( index <= firingLength ) {
									firingLength--;
								}
								if ( index <= firingIndex ) {
									firingIndex--;
								}
							}
						}
					});
				}
				return this;
			},
			// Check if a given callback is in the list.
			// If no argument is given, return whether or not list has callbacks attached.
			has: function( fn ) {
				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
			},
			// Remove all callbacks from the list
			empty: function() {
				list = [];
				firingLength = 0;
				return this;
			},
			// Have the list do nothing anymore
			disable: function() {
				list = stack = memory = undefined;
				return this;
			},
			// Is it disabled?
			disabled: function() {
				return !list;
			},
			// Lock the list in its current state
			lock: function() {
				stack = undefined;
				if ( !memory ) {
					self.disable();
				}
				return this;
			},
			// Is it locked?
			locked: function() {
				return !stack;
			},
			// Call all callbacks with the given context and arguments
			fireWith: function( context, args ) {
				if ( list && ( !fired || stack ) ) {
					args = args || [];
					args = [ context, args.slice ? args.slice() : args ];
					if ( firing ) {
						stack.push( args );
					} else {
						fire( args );
					}
				}
				return this;
			},
			// Call all the callbacks with the given arguments
			fire: function() {
				self.fireWith( this, arguments );
				return this;
			},
			// To know if the callbacks have already been called at least once
			fired: function() {
				return !!fired;
			}
		};

	return self;
};


jQuery.extend({

	Deferred: function( func ) {
		var tuples = [
				// action, add listener, listener list, final state
				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
				[ "notify", "progress", jQuery.Callbacks("memory") ]
			],
			state = "pending",
			promise = {
				state: function() {
					return state;
				},
				always: function() {
					deferred.done( arguments ).fail( arguments );
					return this;
				},
				then: function( /* fnDone, fnFail, fnProgress */ ) {
					var fns = arguments;
					return jQuery.Deferred(function( newDefer ) {
						jQuery.each( tuples, function( i, tuple ) {
							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
							// deferred[ done | fail | progress ] for forwarding actions to newDefer
							deferred[ tuple[1] ](function() {
								var returned = fn && fn.apply( this, arguments );
								if ( returned && jQuery.isFunction( returned.promise ) ) {
									returned.promise()
										.done( newDefer.resolve )
										.fail( newDefer.reject )
										.progress( newDefer.notify );
								} else {
									newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
								}
							});
						});
						fns = null;
					}).promise();
				},
				// Get a promise for this deferred
				// If obj is provided, the promise aspect is added to the object
				promise: function( obj ) {
					return obj != null ? jQuery.extend( obj, promise ) : promise;
				}
			},
			deferred = {};

		// Keep pipe for back-compat
		promise.pipe = promise.then;

		// Add list-specific methods
		jQuery.each( tuples, function( i, tuple ) {
			var list = tuple[ 2 ],
				stateString = tuple[ 3 ];

			// promise[ done | fail | progress ] = list.add
			promise[ tuple[1] ] = list.add;

			// Handle state
			if ( stateString ) {
				list.add(function() {
					// state = [ resolved | rejected ]
					state = stateString;

				// [ reject_list | resolve_list ].disable; progress_list.lock
				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
			}

			// deferred[ resolve | reject | notify ]
			deferred[ tuple[0] ] = function() {
				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
				return this;
			};
			deferred[ tuple[0] + "With" ] = list.fireWith;
		});

		// Make the deferred a promise
		promise.promise( deferred );

		// Call given func if any
		if ( func ) {
			func.call( deferred, deferred );
		}

		// All done!
		return deferred;
	},

	// Deferred helper
	when: function( subordinate /* , ..., subordinateN */ ) {
		var i = 0,
			resolveValues = slice.call( arguments ),
			length = resolveValues.length,

			// the count of uncompleted subordinates
			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,

			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),

			// Update function for both resolve and progress values
			updateFunc = function( i, contexts, values ) {
				return function( value ) {
					contexts[ i ] = this;
					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
					if ( values === progressValues ) {
						deferred.notifyWith( contexts, values );
					} else if ( !( --remaining ) ) {
						deferred.resolveWith( contexts, values );
					}
				};
			},

			progressValues, progressContexts, resolveContexts;

		// add listeners to Deferred subordinates; treat others as resolved
		if ( length > 1 ) {
			progressValues = new Array( length );
			progressContexts = new Array( length );
			resolveContexts = new Array( length );
			for ( ; i < length; i++ ) {
				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
					resolveValues[ i ].promise()
						.done( updateFunc( i, resolveContexts, resolveValues ) )
						.fail( deferred.reject )
						.progress( updateFunc( i, progressContexts, progressValues ) );
				} else {
					--remaining;
				}
			}
		}

		// if we're not waiting on anything, resolve the master
		if ( !remaining ) {
			deferred.resolveWith( resolveContexts, resolveValues );
		}

		return deferred.promise();
	}
});


// The deferred used on DOM ready
var readyList;

jQuery.fn.ready = function( fn ) {
	// Add the callback
	jQuery.ready.promise().done( fn );

	return this;
};

jQuery.extend({
	// Is the DOM ready to be used? Set to true once it occurs.
	isReady: false,

	// A counter to track how many items to wait for before
	// the ready event fires. See #6781
	readyWait: 1,

	// Hold (or release) the ready event
	holdReady: function( hold ) {
		if ( hold ) {
			jQuery.readyWait++;
		} else {
			jQuery.ready( true );
		}
	},

	// Handle when the DOM is ready
	ready: function( wait ) {

		// Abort if there are pending holds or we're already ready
		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
			return;
		}

		// Remember that the DOM is ready
		jQuery.isReady = true;

		// If a normal DOM Ready event fired, decrement, and wait if need be
		if ( wait !== true && --jQuery.readyWait > 0 ) {
			return;
		}

		// If there are functions bound, to execute
		readyList.resolveWith( document, [ jQuery ] );

		// Trigger any bound ready events
		if ( jQuery.fn.trigger ) {
			jQuery( document ).trigger("ready").off("ready");
		}
	}
});

/**
 * The ready event handler and self cleanup method
 */
function completed() {
	document.removeEventListener( "DOMContentLoaded", completed, false );
	window.removeEventListener( "load", completed, false );
	jQuery.ready();
}

jQuery.ready.promise = function( obj ) {
	if ( !readyList ) {

		readyList = jQuery.Deferred();

		// Catch cases where $(document).ready() is called after the browser event has already occurred.
		// we once tried to use readyState "interactive" here, but it caused issues like the one
		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
		if ( document.readyState === "complete" ) {
			// Handle it asynchronously to allow scripts the opportunity to delay ready
			setTimeout( jQuery.ready );

		} else {

			// Use the handy event callback
			document.addEventListener( "DOMContentLoaded", completed, false );

			// A fallback to window.onload, that will always work
			window.addEventListener( "load", completed, false );
		}
	}
	return readyList.promise( obj );
};

// Kick off the DOM ready check even if the user does not
jQuery.ready.promise();




// Multifunctional method to get and set values of a collection
// The value/s can optionally be executed if it's a function
var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
	var i = 0,
		len = elems.length,
		bulk = key == null;

	// Sets many values
	if ( jQuery.type( key ) === "object" ) {
		chainable = true;
		for ( i in key ) {
			jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
		}

	// Sets one value
	} else if ( value !== undefined ) {
		chainable = true;

		if ( !jQuery.isFunction( value ) ) {
			raw = true;
		}

		if ( bulk ) {
			// Bulk operations run against the entire set
			if ( raw ) {
				fn.call( elems, value );
				fn = null;

			// ...except when executing function values
			} else {
				bulk = fn;
				fn = function( elem, key, value ) {
					return bulk.call( jQuery( elem ), value );
				};
			}
		}

		if ( fn ) {
			for ( ; i < len; i++ ) {
				fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
			}
		}
	}

	return chainable ?
		elems :

		// Gets
		bulk ?
			fn.call( elems ) :
			len ? fn( elems[0], key ) : emptyGet;
};


/**
 * Determines whether an object can have data
 */
jQuery.acceptData = function( owner ) {
	// Accepts only:
	//  - Node
	//    - Node.ELEMENT_NODE
	//    - Node.DOCUMENT_NODE
	//  - Object
	//    - Any
	/* jshint -W018 */
	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
};


function Data() {
	// Support: Android < 4,
	// Old WebKit does not have Object.preventExtensions/freeze method,
	// return new empty object instead with no [[set]] accessor
	Object.defineProperty( this.cache = {}, 0, {
		get: function() {
			return {};
		}
	});

	this.expando = jQuery.expando + Math.random();
}

Data.uid = 1;
Data.accepts = jQuery.acceptData;

Data.prototype = {
	key: function( owner ) {
		// We can accept data for non-element nodes in modern browsers,
		// but we should not, see #8335.
		// Always return the key for a frozen object.
		if ( !Data.accepts( owner ) ) {
			return 0;
		}

		var descriptor = {},
			// Check if the owner object already has a cache key
			unlock = owner[ this.expando ];

		// If not, create one
		if ( !unlock ) {
			unlock = Data.uid++;

			// Secure it in a non-enumerable, non-writable property
			try {
				descriptor[ this.expando ] = { value: unlock };
				Object.defineProperties( owner, descriptor );

			// Support: Android < 4
			// Fallback to a less secure definition
			} catch ( e ) {
				descriptor[ this.expando ] = unlock;
				jQuery.extend( owner, descriptor );
			}
		}

		// Ensure the cache object
		if ( !this.cache[ unlock ] ) {
			this.cache[ unlock ] = {};
		}

		return unlock;
	},
	set: function( owner, data, value ) {
		var prop,
			// There may be an unlock assigned to this node,
			// if there is no entry for this "owner", create one inline
			// and set the unlock as though an owner entry had always existed
			unlock = this.key( owner ),
			cache = this.cache[ unlock ];

		// Handle: [ owner, key, value ] args
		if ( typeof data === "string" ) {
			cache[ data ] = value;

		// Handle: [ owner, { properties } ] args
		} else {
			// Fresh assignments by object are shallow copied
			if ( jQuery.isEmptyObject( cache ) ) {
				jQuery.extend( this.cache[ unlock ], data );
			// Otherwise, copy the properties one-by-one to the cache object
			} else {
				for ( prop in data ) {
					cache[ prop ] = data[ prop ];
				}
			}
		}
		return cache;
	},
	get: function( owner, key ) {
		// Either a valid cache is found, or will be created.
		// New caches will be created and the unlock returned,
		// allowing direct access to the newly created
		// empty data object. A valid owner object must be provided.
		var cache = this.cache[ this.key( owner ) ];

		return key === undefined ?
			cache : cache[ key ];
	},
	access: function( owner, key, value ) {
		var stored;
		// In cases where either:
		//
		//   1. No key was specified
		//   2. A string key was specified, but no value provided
		//
		// Take the "read" path and allow the get method to determine
		// which value to return, respectively either:
		//
		//   1. The entire cache object
		//   2. The data stored at the key
		//
		if ( key === undefined ||
				((key && typeof key === "string") && value === undefined) ) {

			stored = this.get( owner, key );

			return stored !== undefined ?
				stored : this.get( owner, jQuery.camelCase(key) );
		}

		// [*]When the key is not a string, or both a key and value
		// are specified, set or extend (existing objects) with either:
		//
		//   1. An object of properties
		//   2. A key and value
		//
		this.set( owner, key, value );

		// Since the "set" path can have two possible entry points
		// return the expected data based on which path was taken[*]
		return value !== undefined ? value : key;
	},
	remove: function( owner, key ) {
		var i, name, camel,
			unlock = this.key( owner ),
			cache = this.cache[ unlock ];

		if ( key === undefined ) {
			this.cache[ unlock ] = {};

		} else {
			// Support array or space separated string of keys
			if ( jQuery.isArray( key ) ) {
				// If "name" is an array of keys...
				// When data is initially created, via ("key", "val") signature,
				// keys will be converted to camelCase.
				// Since there is no way to tell _how_ a key was added, remove
				// both plain key and camelCase key. #12786
				// This will only penalize the array argument path.
				name = key.concat( key.map( jQuery.camelCase ) );
			} else {
				camel = jQuery.camelCase( key );
				// Try the string as a key before any manipulation
				if ( key in cache ) {
					name = [ key, camel ];
				} else {
					// If a key with the spaces exists, use it.
					// Otherwise, create an array by matching non-whitespace
					name = camel;
					name = name in cache ?
						[ name ] : ( name.match( rnotwhite ) || [] );
				}
			}

			i = name.length;
			while ( i-- ) {
				delete cache[ name[ i ] ];
			}
		}
	},
	hasData: function( owner ) {
		return !jQuery.isEmptyObject(
			this.cache[ owner[ this.expando ] ] || {}
		);
	},
	discard: function( owner ) {
		if ( owner[ this.expando ] ) {
			delete this.cache[ owner[ this.expando ] ];
		}
	}
};
var data_priv = new Data();

var data_user = new Data();



/*
	Implementation Summary

	1. Enforce API surface and semantic compatibility with 1.9.x branch
	2. Improve the module's maintainability by reducing the storage
		paths to a single mechanism.
	3. Use the same single mechanism to support "private" and "user" data.
	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
	5. Avoid exposing implementation details on user objects (eg. expando properties)
	6. Provide a clear path for implementation upgrade to WeakMap in 2014
*/
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
	rmultiDash = /([A-Z])/g;

function dataAttr( elem, key, data ) {
	var name;

	// If nothing was found internally, try to fetch any
	// data from the HTML5 data-* attribute
	if ( data === undefined && elem.nodeType === 1 ) {
		name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
		data = elem.getAttribute( name );

		if ( typeof data === "string" ) {
			try {
				data = data === "true" ? true :
					data === "false" ? false :
					data === "null" ? null :
					// Only convert to a number if it doesn't change the string
					+data + "" === data ? +data :
					rbrace.test( data ) ? jQuery.parseJSON( data ) :
					data;
			} catch( e ) {}

			// Make sure we set the data so it isn't changed later
			data_user.set( elem, key, data );
		} else {
			data = undefined;
		}
	}
	return data;
}

jQuery.extend({
	hasData: function( elem ) {
		return data_user.hasData( elem ) || data_priv.hasData( elem );
	},

	data: function( elem, name, data ) {
		return data_user.access( elem, name, data );
	},

	removeData: function( elem, name ) {
		data_user.remove( elem, name );
	},

	// TODO: Now that all calls to _data and _removeData have been replaced
	// with direct calls to data_priv methods, these can be deprecated.
	_data: function( elem, name, data ) {
		return data_priv.access( elem, name, data );
	},

	_removeData: function( elem, name ) {
		data_priv.remove( elem, name );
	}
});

jQuery.fn.extend({
	data: function( key, value ) {
		var i, name, data,
			elem = this[ 0 ],
			attrs = elem && elem.attributes;

		// Gets all values
		if ( key === undefined ) {
			if ( this.length ) {
				data = data_user.get( elem );

				if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
					i = attrs.length;
					while ( i-- ) {
						name = attrs[ i ].name;

						if ( name.indexOf( "data-" ) === 0 ) {
							name = jQuery.camelCase( name.slice(5) );
							dataAttr( elem, name, data[ name ] );
						}
					}
					data_priv.set( elem, "hasDataAttrs", true );
				}
			}

			return data;
		}

		// Sets multiple values
		if ( typeof key === "object" ) {
			return this.each(function() {
				data_user.set( this, key );
			});
		}

		return access( this, function( value ) {
			var data,
				camelKey = jQuery.camelCase( key );

			// The calling jQuery object (element matches) is not empty
			// (and therefore has an element appears at this[ 0 ]) and the
			// `value` parameter was not undefined. An empty jQuery object
			// will result in `undefined` for elem = this[ 0 ] which will
			// throw an exception if an attempt to read a data cache is made.
			if ( elem && value === undefined ) {
				// Attempt to get data from the cache
				// with the key as-is
				data = data_user.get( elem, key );
				if ( data !== undefined ) {
					return data;
				}

				// Attempt to get data from the cache
				// with the key camelized
				data = data_user.get( elem, camelKey );
				if ( data !== undefined ) {
					return data;
				}

				// Attempt to "discover" the data in
				// HTML5 custom data-* attrs
				data = dataAttr( elem, camelKey, undefined );
				if ( data !== undefined ) {
					return data;
				}

				// We tried really hard, but the data doesn't exist.
				return;
			}

			// Set the data...
			this.each(function() {
				// First, attempt to store a copy or reference of any
				// data that might've been store with a camelCased key.
				var data = data_user.get( this, camelKey );

				// For HTML5 data-* attribute interop, we have to
				// store property names with dashes in a camelCase form.
				// This might not apply to all properties...*
				data_user.set( this, camelKey, value );

				// *... In the case of properties that might _actually_
				// have dashes, we need to also store a copy of that
				// unchanged property.
				if ( key.indexOf("-") !== -1 && data !== undefined ) {
					data_user.set( this, key, value );
				}
			});
		}, null, value, arguments.length > 1, null, true );
	},

	removeData: function( key ) {
		return this.each(function() {
			data_user.remove( this, key );
		});
	}
});


jQuery.extend({
	queue: function( elem, type, data ) {
		var queue;

		if ( elem ) {
			type = ( type || "fx" ) + "queue";
			queue = data_priv.get( elem, type );

			// Speed up dequeue by getting out quickly if this is just a lookup
			if ( data ) {
				if ( !queue || jQuery.isArray( data ) ) {
					queue = data_priv.access( elem, type, jQuery.makeArray(data) );
				} else {
					queue.push( data );
				}
			}
			return queue || [];
		}
	},

	dequeue: function( elem, type ) {
		type = type || "fx";

		var queue = jQuery.queue( elem, type ),
			startLength = queue.length,
			fn = queue.shift(),
			hooks = jQuery._queueHooks( elem, type ),
			next = function() {
				jQuery.dequeue( elem, type );
			};

		// If the fx queue is dequeued, always remove the progress sentinel
		if ( fn === "inprogress" ) {
			fn = queue.shift();
			startLength--;
		}

		if ( fn ) {

			// Add a progress sentinel to prevent the fx queue from being
			// automatically dequeued
			if ( type === "fx" ) {
				queue.unshift( "inprogress" );
			}

			// clear up the last queue stop function
			delete hooks.stop;
			fn.call( elem, next, hooks );
		}

		if ( !startLength && hooks ) {
			hooks.empty.fire();
		}
	},

	// not intended for public consumption - generates a queueHooks object, or returns the current one
	_queueHooks: function( elem, type ) {
		var key = type + "queueHooks";
		return data_priv.get( elem, key ) || data_priv.access( elem, key, {
			empty: jQuery.Callbacks("once memory").add(function() {
				data_priv.remove( elem, [ type + "queue", key ] );
			})
		});
	}
});

jQuery.fn.extend({
	queue: function( type, data ) {
		var setter = 2;

		if ( typeof type !== "string" ) {
			data = type;
			type = "fx";
			setter--;
		}

		if ( arguments.length < setter ) {
			return jQuery.queue( this[0], type );
		}

		return data === undefined ?
			this :
			this.each(function() {
				var queue = jQuery.queue( this, type, data );

				// ensure a hooks for this queue
				jQuery._queueHooks( this, type );

				if ( type === "fx" && queue[0] !== "inprogress" ) {
					jQuery.dequeue( this, type );
				}
			});
	},
	dequeue: function( type ) {
		return this.each(function() {
			jQuery.dequeue( this, type );
		});
	},
	clearQueue: function( type ) {
		return this.queue( type || "fx", [] );
	},
	// Get a promise resolved when queues of a certain type
	// are emptied (fx is the type by default)
	promise: function( type, obj ) {
		var tmp,
			count = 1,
			defer = jQuery.Deferred(),
			elements = this,
			i = this.length,
			resolve = function() {
				if ( !( --count ) ) {
					defer.resolveWith( elements, [ elements ] );
				}
			};

		if ( typeof type !== "string" ) {
			obj = type;
			type = undefined;
		}
		type = type || "fx";

		while ( i-- ) {
			tmp = data_priv.get( elements[ i ], type + "queueHooks" );
			if ( tmp && tmp.empty ) {
				count++;
				tmp.empty.add( resolve );
			}
		}
		resolve();
		return defer.promise( obj );
	}
});
var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;

var cssExpand = [ "Top", "Right", "Bottom", "Left" ];

var isHidden = function( elem, el ) {
		// isHidden might be called from jQuery#filter function;
		// in that case, element will be second argument
		elem = el || elem;
		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
	};

var rcheckableType = (/^(?:checkbox|radio)$/i);



(function() {
	var fragment = document.createDocumentFragment(),
		div = fragment.appendChild( document.createElement( "div" ) );

	// #11217 - WebKit loses check when the name is after the checked attribute
	div.innerHTML = "<input type='radio' checked='checked' name='t'/>";

	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
	// old WebKit doesn't clone checked state correctly in fragments
	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;

	// Make sure textarea (and checkbox) defaultValue is properly cloned
	// Support: IE9-IE11+
	div.innerHTML = "<textarea>x</textarea>";
	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
})();
var strundefined = typeof undefined;



support.focusinBubbles = "onfocusin" in window;


var
	rkeyEvent = /^key/,
	rmouseEvent = /^(?:mouse|contextmenu)|click/,
	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;

function returnTrue() {
	return true;
}

function returnFalse() {
	return false;
}

function safeActiveElement() {
	try {
		return document.activeElement;
	} catch ( err ) { }
}

/*
 * Helper functions for managing events -- not part of the public interface.
 * Props to Dean Edwards' addEvent library for many of the ideas.
 */
jQuery.event = {

	global: {},

	add: function( elem, types, handler, data, selector ) {

		var handleObjIn, eventHandle, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = data_priv.get( elem );

		// Don't attach events to noData or text/comment nodes (but allow plain objects)
		if ( !elemData ) {
			return;
		}

		// Caller can pass in an object of custom data in lieu of the handler
		if ( handler.handler ) {
			handleObjIn = handler;
			handler = handleObjIn.handler;
			selector = handleObjIn.selector;
		}

		// Make sure that the handler has a unique ID, used to find/remove it later
		if ( !handler.guid ) {
			handler.guid = jQuery.guid++;
		}

		// Init the element's event structure and main handler, if this is the first
		if ( !(events = elemData.events) ) {
			events = elemData.events = {};
		}
		if ( !(eventHandle = elemData.handle) ) {
			eventHandle = elemData.handle = function( e ) {
				// Discard the second event of a jQuery.event.trigger() and
				// when an event is called after a page has unloaded
				return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
			};
		}

		// Handle multiple events separated by a space
		types = ( types || "" ).match( rnotwhite ) || [ "" ];
		t = types.length;
		while ( t-- ) {
			tmp = rtypenamespace.exec( types[t] ) || [];
			type = origType = tmp[1];
			namespaces = ( tmp[2] || "" ).split( "." ).sort();

			// There *must* be a type, no attaching namespace-only handlers
			if ( !type ) {
				continue;
			}

			// If event changes its type, use the special event handlers for the changed type
			special = jQuery.event.special[ type ] || {};

			// If selector defined, determine special event api type, otherwise given type
			type = ( selector ? special.delegateType : special.bindType ) || type;

			// Update special based on newly reset type
			special = jQuery.event.special[ type ] || {};

			// handleObj is passed to all event handlers
			handleObj = jQuery.extend({
				type: type,
				origType: origType,
				data: data,
				handler: handler,
				guid: handler.guid,
				selector: selector,
				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
				namespace: namespaces.join(".")
			}, handleObjIn );

			// Init the event handler queue if we're the first
			if ( !(handlers = events[ type ]) ) {
				handlers = events[ type ] = [];
				handlers.delegateCount = 0;

				// Only use addEventListener if the special events handler returns false
				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
					if ( elem.addEventListener ) {
						elem.addEventListener( type, eventHandle, false );
					}
				}
			}

			if ( special.add ) {
				special.add.call( elem, handleObj );

				if ( !handleObj.handler.guid ) {
					handleObj.handler.guid = handler.guid;
				}
			}

			// Add to the element's handler list, delegates in front
			if ( selector ) {
				handlers.splice( handlers.delegateCount++, 0, handleObj );
			} else {
				handlers.push( handleObj );
			}

			// Keep track of which events have ever been used, for event optimization
			jQuery.event.global[ type ] = true;
		}

	},

	// Detach an event or set of events from an element
	remove: function( elem, types, handler, selector, mappedTypes ) {

		var j, origCount, tmp,
			events, t, handleObj,
			special, handlers, type, namespaces, origType,
			elemData = data_priv.hasData( elem ) && data_priv.get( elem );

		if ( !elemData || !(events = elemData.events) ) {
			return;
		}

		// Once for each type.namespace in types; type may be omitted
		types = ( types || "" ).match( rnotwhite ) || [ "" ];
		t = types.length;
		while ( t-- ) {
			tmp = rtypenamespace.exec( types[t] ) || [];
			type = origType = tmp[1];
			namespaces = ( tmp[2] || "" ).split( "." ).sort();

			// Unbind all events (on this namespace, if provided) for the element
			if ( !type ) {
				for ( type in events ) {
					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
				}
				continue;
			}

			special = jQuery.event.special[ type ] || {};
			type = ( selector ? special.delegateType : special.bindType ) || type;
			handlers = events[ type ] || [];
			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );

			// Remove matching events
			origCount = j = handlers.length;
			while ( j-- ) {
				handleObj = handlers[ j ];

				if ( ( mappedTypes || origType === handleObj.origType ) &&
					( !handler || handler.guid === handleObj.guid ) &&
					( !tmp || tmp.test( handleObj.namespace ) ) &&
					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
					handlers.splice( j, 1 );

					if ( handleObj.selector ) {
						handlers.delegateCount--;
					}
					if ( special.remove ) {
						special.remove.call( elem, handleObj );
					}
				}
			}

			// Remove generic event handler if we removed something and no more handlers exist
			// (avoids potential for endless recursion during removal of special event handlers)
			if ( origCount && !handlers.length ) {
				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
					jQuery.removeEvent( elem, type, elemData.handle );
				}

				delete events[ type ];
			}
		}

		// Remove the expando if it's no longer used
		if ( jQuery.isEmptyObject( events ) ) {
			delete elemData.handle;
			data_priv.remove( elem, "events" );
		}
	},

	trigger: function( event, data, elem, onlyHandlers ) {

		var i, cur, tmp, bubbleType, ontype, handle, special,
			eventPath = [ elem || document ],
			type = hasOwn.call( event, "type" ) ? event.type : event,
			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];

		cur = tmp = elem = elem || document;

		// Don't do events on text and comment nodes
		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
			return;
		}

		// focus/blur morphs to focusin/out; ensure we're not firing them right now
		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
			return;
		}

		if ( type.indexOf(".") >= 0 ) {
			// Namespaced trigger; create a regexp to match event type in handle()
			namespaces = type.split(".");
			type = namespaces.shift();
			namespaces.sort();
		}
		ontype = type.indexOf(":") < 0 && "on" + type;

		// Caller can pass in a jQuery.Event object, Object, or just an event type string
		event = event[ jQuery.expando ] ?
			event :
			new jQuery.Event( type, typeof event === "object" && event );

		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
		event.isTrigger = onlyHandlers ? 2 : 3;
		event.namespace = namespaces.join(".");
		event.namespace_re = event.namespace ?
			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
			null;

		// Clean up the event in case it is being reused
		event.result = undefined;
		if ( !event.target ) {
			event.target = elem;
		}

		// Clone any incoming data and prepend the event, creating the handler arg list
		data = data == null ?
			[ event ] :
			jQuery.makeArray( data, [ event ] );

		// Allow special events to draw outside the lines
		special = jQuery.event.special[ type ] || {};
		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
			return;
		}

		// Determine event propagation path in advance, per W3C events spec (#9951)
		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {

			bubbleType = special.delegateType || type;
			if ( !rfocusMorph.test( bubbleType + type ) ) {
				cur = cur.parentNode;
			}
			for ( ; cur; cur = cur.parentNode ) {
				eventPath.push( cur );
				tmp = cur;
			}

			// Only add window if we got to document (e.g., not plain obj or detached DOM)
			if ( tmp === (elem.ownerDocument || document) ) {
				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
			}
		}

		// Fire handlers on the event path
		i = 0;
		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {

			event.type = i > 1 ?
				bubbleType :
				special.bindType || type;

			// jQuery handler
			handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
			if ( handle ) {
				handle.apply( cur, data );
			}

			// Native handler
			handle = ontype && cur[ ontype ];
			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
				event.result = handle.apply( cur, data );
				if ( event.result === false ) {
					event.preventDefault();
				}
			}
		}
		event.type = type;

		// If nobody prevented the default action, do it now
		if ( !onlyHandlers && !event.isDefaultPrevented() ) {

			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
				jQuery.acceptData( elem ) ) {

				// Call a native DOM method on the target with the same name name as the event.
				// Don't do default actions on window, that's where global variables be (#6170)
				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {

					// Don't re-trigger an onFOO event when we call its FOO() method
					tmp = elem[ ontype ];

					if ( tmp ) {
						elem[ ontype ] = null;
					}

					// Prevent re-triggering of the same event, since we already bubbled it above
					jQuery.event.triggered = type;
					elem[ type ]();
					jQuery.event.triggered = undefined;

					if ( tmp ) {
						elem[ ontype ] = tmp;
					}
				}
			}
		}

		return event.result;
	},

	dispatch: function( event ) {

		// Make a writable jQuery.Event from the native event object
		event = jQuery.event.fix( event );

		var i, j, ret, matched, handleObj,
			handlerQueue = [],
			args = slice.call( arguments ),
			handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
			special = jQuery.event.special[ event.type ] || {};

		// Use the fix-ed jQuery.Event rather than the (read-only) native event
		args[0] = event;
		event.delegateTarget = this;

		// Call the preDispatch hook for the mapped type, and let it bail if desired
		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
			return;
		}

		// Determine handlers
		handlerQueue = jQuery.event.handlers.call( this, event, handlers );

		// Run delegates first; they may want to stop propagation beneath us
		i = 0;
		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
			event.currentTarget = matched.elem;

			j = 0;
			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {

				// Triggered event must either 1) have no namespace, or
				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {

					event.handleObj = handleObj;
					event.data = handleObj.data;

					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
							.apply( matched.elem, args );

					if ( ret !== undefined ) {
						if ( (event.result = ret) === false ) {
							event.preventDefault();
							event.stopPropagation();
						}
					}
				}
			}
		}

		// Call the postDispatch hook for the mapped type
		if ( special.postDispatch ) {
			special.postDispatch.call( this, event );
		}

		return event.result;
	},

	handlers: function( event, handlers ) {
		var i, matches, sel, handleObj,
			handlerQueue = [],
			delegateCount = handlers.delegateCount,
			cur = event.target;

		// Find delegate handlers
		// Black-hole SVG <use> instance trees (#13180)
		// Avoid non-left-click bubbling in Firefox (#3861)
		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {

			for ( ; cur !== this; cur = cur.parentNode || this ) {

				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
				if ( cur.disabled !== true || event.type !== "click" ) {
					matches = [];
					for ( i = 0; i < delegateCount; i++ ) {
						handleObj = handlers[ i ];

						// Don't conflict with Object.prototype properties (#13203)
						sel = handleObj.selector + " ";

						if ( matches[ sel ] === undefined ) {
							matches[ sel ] = handleObj.needsContext ?
								jQuery( sel, this ).index( cur ) >= 0 :
								jQuery.find( sel, this, null, [ cur ] ).length;
						}
						if ( matches[ sel ] ) {
							matches.push( handleObj );
						}
					}
					if ( matches.length ) {
						handlerQueue.push({ elem: cur, handlers: matches });
					}
				}
			}
		}

		// Add the remaining (directly-bound) handlers
		if ( delegateCount < handlers.length ) {
			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
		}

		return handlerQueue;
	},

	// Includes some event props shared by KeyEvent and MouseEvent
	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),

	fixHooks: {},

	keyHooks: {
		props: "char charCode key keyCode".split(" "),
		filter: function( event, original ) {

			// Add which for key events
			if ( event.which == null ) {
				event.which = original.charCode != null ? original.charCode : original.keyCode;
			}

			return event;
		}
	},

	mouseHooks: {
		props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
		filter: function( event, original ) {
			var eventDoc, doc, body,
				button = original.button;

			// Calculate pageX/Y if missing and clientX/Y available
			if ( event.pageX == null && original.clientX != null ) {
				eventDoc = event.target.ownerDocument || document;
				doc = eventDoc.documentElement;
				body = eventDoc.body;

				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
			}

			// Add which for click: 1 === left; 2 === middle; 3 === right
			// Note: button is not normalized, so don't use it
			if ( !event.which && button !== undefined ) {
				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
			}

			return event;
		}
	},

	fix: function( event ) {
		if ( event[ jQuery.expando ] ) {
			return event;
		}

		// Create a writable copy of the event object and normalize some properties
		var i, prop, copy,
			type = event.type,
			originalEvent = event,
			fixHook = this.fixHooks[ type ];

		if ( !fixHook ) {
			this.fixHooks[ type ] = fixHook =
				rmouseEvent.test( type ) ? this.mouseHooks :
				rkeyEvent.test( type ) ? this.keyHooks :
				{};
		}
		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;

		event = new jQuery.Event( originalEvent );

		i = copy.length;
		while ( i-- ) {
			prop = copy[ i ];
			event[ prop ] = originalEvent[ prop ];
		}

		// Support: Cordova 2.5 (WebKit) (#13255)
		// All events should have a target; Cordova deviceready doesn't
		if ( !event.target ) {
			event.target = document;
		}

		// Support: Safari 6.0+, Chrome < 28
		// Target should not be a text node (#504, #13143)
		if ( event.target.nodeType === 3 ) {
			event.target = event.target.parentNode;
		}

		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
	},

	special: {
		load: {
			// Prevent triggered image.load events from bubbling to window.load
			noBubble: true
		},
		focus: {
			// Fire native event if possible so blur/focus sequence is correct
			trigger: function() {
				if ( this !== safeActiveElement() && this.focus ) {
					this.focus();
					return false;
				}
			},
			delegateType: "focusin"
		},
		blur: {
			trigger: function() {
				if ( this === safeActiveElement() && this.blur ) {
					this.blur();
					return false;
				}
			},
			delegateType: "focusout"
		},
		click: {
			// For checkbox, fire native event so checked state will be right
			trigger: function() {
				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
					this.click();
					return false;
				}
			},

			// For cross-browser consistency, don't fire native .click() on links
			_default: function( event ) {
				return jQuery.nodeName( event.target, "a" );
			}
		},

		beforeunload: {
			postDispatch: function( event ) {

				// Support: Firefox 20+
				// Firefox doesn't alert if the returnValue field is not set.
				if ( event.result !== undefined ) {
					event.originalEvent.returnValue = event.result;
				}
			}
		}
	},

	simulate: function( type, elem, event, bubble ) {
		// Piggyback on a donor event to simulate a different one.
		// Fake originalEvent to avoid donor's stopPropagation, but if the
		// simulated event prevents default then we do the same on the donor.
		var e = jQuery.extend(
			new jQuery.Event(),
			event,
			{
				type: type,
				isSimulated: true,
				originalEvent: {}
			}
		);
		if ( bubble ) {
			jQuery.event.trigger( e, null, elem );
		} else {
			jQuery.event.dispatch.call( elem, e );
		}
		if ( e.isDefaultPrevented() ) {
			event.preventDefault();
		}
	}
};

jQuery.removeEvent = function( elem, type, handle ) {
	if ( elem.removeEventListener ) {
		elem.removeEventListener( type, handle, false );
	}
};

jQuery.Event = function( src, props ) {
	// Allow instantiation without the 'new' keyword
	if ( !(this instanceof jQuery.Event) ) {
		return new jQuery.Event( src, props );
	}

	// Event object
	if ( src && src.type ) {
		this.originalEvent = src;
		this.type = src.type;

		// Events bubbling up the document may have been marked as prevented
		// by a handler lower down the tree; reflect the correct value.
		this.isDefaultPrevented = src.defaultPrevented ||
				// Support: Android < 4.0
				src.defaultPrevented === undefined &&
				src.getPreventDefault && src.getPreventDefault() ?
			returnTrue :
			returnFalse;

	// Event type
	} else {
		this.type = src;
	}

	// Put explicitly provided properties onto the event object
	if ( props ) {
		jQuery.extend( this, props );
	}

	// Create a timestamp if incoming event doesn't have one
	this.timeStamp = src && src.timeStamp || jQuery.now();

	// Mark it as fixed
	this[ jQuery.expando ] = true;
};

// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse,

	preventDefault: function() {
		var e = this.originalEvent;

		this.isDefaultPrevented = returnTrue;

		if ( e && e.preventDefault ) {
			e.preventDefault();
		}
	},
	stopPropagation: function() {
		var e = this.originalEvent;

		this.isPropagationStopped = returnTrue;

		if ( e && e.stopPropagation ) {
			e.stopPropagation();
		}
	},
	stopImmediatePropagation: function() {
		this.isImmediatePropagationStopped = returnTrue;
		this.stopPropagation();
	}
};

// Create mouseenter/leave events using mouseover/out and event-time checks
// Support: Chrome 15+
jQuery.each({
	mouseenter: "mouseover",
	mouseleave: "mouseout"
}, function( orig, fix ) {
	jQuery.event.special[ orig ] = {
		delegateType: fix,
		bindType: fix,

		handle: function( event ) {
			var ret,
				target = this,
				related = event.relatedTarget,
				handleObj = event.handleObj;

			// For mousenter/leave call the handler if related is outside the target.
			// NB: No relatedTarget if the mouse left/entered the browser window
			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
				event.type = handleObj.origType;
				ret = handleObj.handler.apply( this, arguments );
				event.type = fix;
			}
			return ret;
		}
	};
});

// Create "bubbling" focus and blur events
// Support: Firefox, Chrome, Safari
if ( !support.focusinBubbles ) {
	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

		// Attach a single capturing handler on the document while someone wants focusin/focusout
		var handler = function( event ) {
				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
			};

		jQuery.event.special[ fix ] = {
			setup: function() {
				var doc = this.ownerDocument || this,
					attaches = data_priv.access( doc, fix );

				if ( !attaches ) {
					doc.addEventListener( orig, handler, true );
				}
				data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
			},
			teardown: function() {
				var doc = this.ownerDocument || this,
					attaches = data_priv.access( doc, fix ) - 1;

				if ( !attaches ) {
					doc.removeEventListener( orig, handler, true );
					data_priv.remove( doc, fix );

				} else {
					data_priv.access( doc, fix, attaches );
				}
			}
		};
	});
}

jQuery.fn.extend({

	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
		var origFn, type;

		// Types can be a map of types/handlers
		if ( typeof types === "object" ) {
			// ( types-Object, selector, data )
			if ( typeof selector !== "string" ) {
				// ( types-Object, data )
				data = data || selector;
				selector = undefined;
			}
			for ( type in types ) {
				this.on( type, selector, data, types[ type ], one );
			}
			return this;
		}

		if ( data == null && fn == null ) {
			// ( types, fn )
			fn = selector;
			data = selector = undefined;
		} else if ( fn == null ) {
			if ( typeof selector === "string" ) {
				// ( types, selector, fn )
				fn = data;
				data = undefined;
			} else {
				// ( types, data, fn )
				fn = data;
				data = selector;
				selector = undefined;
			}
		}
		if ( fn === false ) {
			fn = returnFalse;
		} else if ( !fn ) {
			return this;
		}

		if ( one === 1 ) {
			origFn = fn;
			fn = function( event ) {
				// Can use an empty set, since event contains the info
				jQuery().off( event );
				return origFn.apply( this, arguments );
			};
			// Use same guid so caller can remove using origFn
			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
		}
		return this.each( function() {
			jQuery.event.add( this, types, fn, data, selector );
		});
	},
	one: function( types, selector, data, fn ) {
		return this.on( types, selector, data, fn, 1 );
	},
	off: function( types, selector, fn ) {
		var handleObj, type;
		if ( types && types.preventDefault && types.handleObj ) {
			// ( event )  dispatched jQuery.Event
			handleObj = types.handleObj;
			jQuery( types.delegateTarget ).off(
				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
				handleObj.selector,
				handleObj.handler
			);
			return this;
		}
		if ( typeof types === "object" ) {
			// ( types-object [, selector] )
			for ( type in types ) {
				this.off( type, selector, types[ type ] );
			}
			return this;
		}
		if ( selector === false || typeof selector === "function" ) {
			// ( types [, fn] )
			fn = selector;
			selector = undefined;
		}
		if ( fn === false ) {
			fn = returnFalse;
		}
		return this.each(function() {
			jQuery.event.remove( this, types, fn, selector );
		});
	},

	trigger: function( type, data ) {
		return this.each(function() {
			jQuery.event.trigger( type, data, this );
		});
	},
	triggerHandler: function( type, data ) {
		var elem = this[0];
		if ( elem ) {
			return jQuery.event.trigger( type, data, elem, true );
		}
	}
});


var
	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
	rtagName = /<([\w:]+)/,
	rhtml = /<|&#?\w+;/,
	rnoInnerhtml = /<(?:script|style|link)/i,
	// checked="checked" or checked
	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
	rscriptType = /^$|\/(?:java|ecma)script/i,
	rscriptTypeMasked = /^true\/(.*)/,
	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,

	// We have to close these tags to support XHTML (#13200)
	wrapMap = {

		// Support: IE 9
		option: [ 1, "<select multiple='multiple'>", "</select>" ],

		thead: [ 1, "<table>", "</table>" ],
		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],

		_default: [ 0, "", "" ]
	};

// Support: IE 9
wrapMap.optgroup = wrapMap.option;

wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;

// Support: 1.x compatibility
// Manipulating tables requires a tbody
function manipulationTarget( elem, content ) {
	return jQuery.nodeName( elem, "table" ) &&
		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?

		elem.getElementsByTagName("tbody")[0] ||
			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
		elem;
}

// Replace/restore the type attribute of script elements for safe DOM manipulation
function disableScript( elem ) {
	elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
	return elem;
}
function restoreScript( elem ) {
	var match = rscriptTypeMasked.exec( elem.type );

	if ( match ) {
		elem.type = match[ 1 ];
	} else {
		elem.removeAttribute("type");
	}

	return elem;
}

// Mark scripts as having already been evaluated
function setGlobalEval( elems, refElements ) {
	var i = 0,
		l = elems.length;

	for ( ; i < l; i++ ) {
		data_priv.set(
			elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
		);
	}
}

function cloneCopyEvent( src, dest ) {
	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;

	if ( dest.nodeType !== 1 ) {
		return;
	}

	// 1. Copy private data: events, handlers, etc.
	if ( data_priv.hasData( src ) ) {
		pdataOld = data_priv.access( src );
		pdataCur = data_priv.set( dest, pdataOld );
		events = pdataOld.events;

		if ( events ) {
			delete pdataCur.handle;
			pdataCur.events = {};

			for ( type in events ) {
				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
					jQuery.event.add( dest, type, events[ type ][ i ] );
				}
			}
		}
	}

	// 2. Copy user data
	if ( data_user.hasData( src ) ) {
		udataOld = data_user.access( src );
		udataCur = jQuery.extend( {}, udataOld );

		data_user.set( dest, udataCur );
	}
}

function getAll( context, tag ) {
	var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
			context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
			[];

	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
		jQuery.merge( [ context ], ret ) :
		ret;
}

// Support: IE >= 9
function fixInput( src, dest ) {
	var nodeName = dest.nodeName.toLowerCase();

	// Fails to persist the checked state of a cloned checkbox or radio button.
	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
		dest.checked = src.checked;

	// Fails to return the selected option to the default selected state when cloning options
	} else if ( nodeName === "input" || nodeName === "textarea" ) {
		dest.defaultValue = src.defaultValue;
	}
}

jQuery.extend({
	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
		var i, l, srcElements, destElements,
			clone = elem.cloneNode( true ),
			inPage = jQuery.contains( elem.ownerDocument, elem );

		// Support: IE >= 9
		// Fix Cloning issues
		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
				!jQuery.isXMLDoc( elem ) ) {

			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
			destElements = getAll( clone );
			srcElements = getAll( elem );

			for ( i = 0, l = srcElements.length; i < l; i++ ) {
				fixInput( srcElements[ i ], destElements[ i ] );
			}
		}

		// Copy the events from the original to the clone
		if ( dataAndEvents ) {
			if ( deepDataAndEvents ) {
				srcElements = srcElements || getAll( elem );
				destElements = destElements || getAll( clone );

				for ( i = 0, l = srcElements.length; i < l; i++ ) {
					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
				}
			} else {
				cloneCopyEvent( elem, clone );
			}
		}

		// Preserve script evaluation history
		destElements = getAll( clone, "script" );
		if ( destElements.length > 0 ) {
			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
		}

		// Return the cloned set
		return clone;
	},

	buildFragment: function( elems, context, scripts, selection ) {
		var elem, tmp, tag, wrap, contains, j,
			fragment = context.createDocumentFragment(),
			nodes = [],
			i = 0,
			l = elems.length;

		for ( ; i < l; i++ ) {
			elem = elems[ i ];

			if ( elem || elem === 0 ) {

				// Add nodes directly
				if ( jQuery.type( elem ) === "object" ) {
					// Support: QtWebKit
					// jQuery.merge because push.apply(_, arraylike) throws
					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );

				// Convert non-html into a text node
				} else if ( !rhtml.test( elem ) ) {
					nodes.push( context.createTextNode( elem ) );

				// Convert html into DOM nodes
				} else {
					tmp = tmp || fragment.appendChild( context.createElement("div") );

					// Deserialize a standard representation
					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
					wrap = wrapMap[ tag ] || wrapMap._default;
					tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];

					// Descend through wrappers to the right content
					j = wrap[ 0 ];
					while ( j-- ) {
						tmp = tmp.lastChild;
					}

					// Support: QtWebKit
					// jQuery.merge because push.apply(_, arraylike) throws
					jQuery.merge( nodes, tmp.childNodes );

					// Remember the top-level container
					tmp = fragment.firstChild;

					// Fixes #12346
					// Support: Webkit, IE
					tmp.textContent = "";
				}
			}
		}

		// Remove wrapper from fragment
		fragment.textContent = "";

		i = 0;
		while ( (elem = nodes[ i++ ]) ) {

			// #4087 - If origin and destination elements are the same, and this is
			// that element, do not do anything
			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
				continue;
			}

			contains = jQuery.contains( elem.ownerDocument, elem );

			// Append to fragment
			tmp = getAll( fragment.appendChild( elem ), "script" );

			// Preserve script evaluation history
			if ( contains ) {
				setGlobalEval( tmp );
			}

			// Capture executables
			if ( scripts ) {
				j = 0;
				while ( (elem = tmp[ j++ ]) ) {
					if ( rscriptType.test( elem.type || "" ) ) {
						scripts.push( elem );
					}
				}
			}
		}

		return fragment;
	},

	cleanData: function( elems ) {
		var data, elem, events, type, key, j,
			special = jQuery.event.special,
			i = 0;

		for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
			if ( jQuery.acceptData( elem ) ) {
				key = elem[ data_priv.expando ];

				if ( key && (data = data_priv.cache[ key ]) ) {
					events = Object.keys( data.events || {} );
					if ( events.length ) {
						for ( j = 0; (type = events[j]) !== undefined; j++ ) {
							if ( special[ type ] ) {
								jQuery.event.remove( elem, type );

							// This is a shortcut to avoid jQuery.event.remove's overhead
							} else {
								jQuery.removeEvent( elem, type, data.handle );
							}
						}
					}
					if ( data_priv.cache[ key ] ) {
						// Discard any remaining `private` data
						delete data_priv.cache[ key ];
					}
				}
			}
			// Discard any remaining `user` data
			delete data_user.cache[ elem[ data_user.expando ] ];
		}
	}
});

jQuery.fn.extend({
	text: function( value ) {
		return access( this, function( value ) {
			return value === undefined ?
				jQuery.text( this ) :
				this.empty().each(function() {
					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
						this.textContent = value;
					}
				});
		}, null, value, arguments.length );
	},

	append: function() {
		return this.domManip( arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.appendChild( elem );
			}
		});
	},

	prepend: function() {
		return this.domManip( arguments, function( elem ) {
			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
				var target = manipulationTarget( this, elem );
				target.insertBefore( elem, target.firstChild );
			}
		});
	},

	before: function() {
		return this.domManip( arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this );
			}
		});
	},

	after: function() {
		return this.domManip( arguments, function( elem ) {
			if ( this.parentNode ) {
				this.parentNode.insertBefore( elem, this.nextSibling );
			}
		});
	},

	remove: function( selector, keepData /* Internal Use Only */ ) {
		var elem,
			elems = selector ? jQuery.filter( selector, this ) : this,
			i = 0;

		for ( ; (elem = elems[i]) != null; i++ ) {
			if ( !keepData && elem.nodeType === 1 ) {
				jQuery.cleanData( getAll( elem ) );
			}

			if ( elem.parentNode ) {
				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
					setGlobalEval( getAll( elem, "script" ) );
				}
				elem.parentNode.removeChild( elem );
			}
		}

		return this;
	},

	empty: function() {
		var elem,
			i = 0;

		for ( ; (elem = this[i]) != null; i++ ) {
			if ( elem.nodeType === 1 ) {

				// Prevent memory leaks
				jQuery.cleanData( getAll( elem, false ) );

				// Remove any remaining nodes
				elem.textContent = "";
			}
		}

		return this;
	},

	clone: function( dataAndEvents, deepDataAndEvents ) {
		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;

		return this.map(function() {
			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
		});
	},

	html: function( value ) {
		return access( this, function( value ) {
			var elem = this[ 0 ] || {},
				i = 0,
				l = this.length;

			if ( value === undefined && elem.nodeType === 1 ) {
				return elem.innerHTML;
			}

			// See if we can take a shortcut and just use innerHTML
			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {

				value = value.replace( rxhtmlTag, "<$1></$2>" );

				try {
					for ( ; i < l; i++ ) {
						elem = this[ i ] || {};

						// Remove element nodes and prevent memory leaks
						if ( elem.nodeType === 1 ) {
							jQuery.cleanData( getAll( elem, false ) );
							elem.innerHTML = value;
						}
					}

					elem = 0;

				// If using innerHTML throws an exception, use the fallback method
				} catch( e ) {}
			}

			if ( elem ) {
				this.empty().append( value );
			}
		}, null, value, arguments.length );
	},

	replaceWith: function() {
		var arg = arguments[ 0 ];

		// Make the changes, replacing each context element with the new content
		this.domManip( arguments, function( elem ) {
			arg = this.parentNode;

			jQuery.cleanData( getAll( this ) );

			if ( arg ) {
				arg.replaceChild( elem, this );
			}
		});

		// Force removal if there was no new content (e.g., from empty arguments)
		return arg && (arg.length || arg.nodeType) ? this : this.remove();
	},

	detach: function( selector ) {
		return this.remove( selector, true );
	},

	domManip: function( args, callback ) {

		// Flatten any nested arrays
		args = concat.apply( [], args );

		var fragment, first, scripts, hasScripts, node, doc,
			i = 0,
			l = this.length,
			set = this,
			iNoClone = l - 1,
			value = args[ 0 ],
			isFunction = jQuery.isFunction( value );

		// We can't cloneNode fragments that contain checked, in WebKit
		if ( isFunction ||
				( l > 1 && typeof value === "string" &&
					!support.checkClone && rchecked.test( value ) ) ) {
			return this.each(function( index ) {
				var self = set.eq( index );
				if ( isFunction ) {
					args[ 0 ] = value.call( this, index, self.html() );
				}
				self.domManip( args, callback );
			});
		}

		if ( l ) {
			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
			first = fragment.firstChild;

			if ( fragment.childNodes.length === 1 ) {
				fragment = first;
			}

			if ( first ) {
				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
				hasScripts = scripts.length;

				// Use the original fragment for the last item instead of the first because it can end up
				// being emptied incorrectly in certain situations (#8070).
				for ( ; i < l; i++ ) {
					node = fragment;

					if ( i !== iNoClone ) {
						node = jQuery.clone( node, true, true );

						// Keep references to cloned scripts for later restoration
						if ( hasScripts ) {
							// Support: QtWebKit
							// jQuery.merge because push.apply(_, arraylike) throws
							jQuery.merge( scripts, getAll( node, "script" ) );
						}
					}

					callback.call( this[ i ], node, i );
				}

				if ( hasScripts ) {
					doc = scripts[ scripts.length - 1 ].ownerDocument;

					// Reenable scripts
					jQuery.map( scripts, restoreScript );

					// Evaluate executable scripts on first document insertion
					for ( i = 0; i < hasScripts; i++ ) {
						node = scripts[ i ];
						if ( rscriptType.test( node.type || "" ) &&
							!data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {

							if ( node.src ) {
								// Optional AJAX dependency, but won't run scripts if not present
								if ( jQuery._evalUrl ) {
									jQuery._evalUrl( node.src );
								}
							} else {
								jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
							}
						}
					}
				}
			}
		}

		return this;
	}
});

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function( name, original ) {
	jQuery.fn[ name ] = function( selector ) {
		var elems,
			ret = [],
			insert = jQuery( selector ),
			last = insert.length - 1,
			i = 0;

		for ( ; i <= last; i++ ) {
			elems = i === last ? this : this.clone( true );
			jQuery( insert[ i ] )[ original ]( elems );

			// Support: QtWebKit
			// .get() because push.apply(_, arraylike) throws
			push.apply( ret, elems.get() );
		}

		return this.pushStack( ret );
	};
});


var iframe,
	elemdisplay = {};

/**
 * Retrieve the actual display of a element
 * @param {String} name nodeName of the element
 * @param {Object} doc Document object
 */
// Called only from within defaultDisplay
function actualDisplay( name, doc ) {
	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),

		// getDefaultComputedStyle might be reliably used only on attached element
		display = window.getDefaultComputedStyle ?

			// Use of this method is a temporary fix (more like optmization) until something better comes along,
			// since it was removed from specification and supported only in FF
			window.getDefaultComputedStyle( elem[ 0 ] ).display : jQuery.css( elem[ 0 ], "display" );

	// We don't have any data stored on the element,
	// so use "detach" method as fast way to get rid of the element
	elem.detach();

	return display;
}

/**
 * Try to determine the default display value of an element
 * @param {String} nodeName
 */
function defaultDisplay( nodeName ) {
	var doc = document,
		display = elemdisplay[ nodeName ];

	if ( !display ) {
		display = actualDisplay( nodeName, doc );

		// If the simple way fails, read from inside an iframe
		if ( display === "none" || !display ) {

			// Use the already-created iframe if possible
			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );

			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
			doc = iframe[ 0 ].contentDocument;

			// Support: IE
			doc.write();
			doc.close();

			display = actualDisplay( nodeName, doc );
			iframe.detach();
		}

		// Store the correct default display
		elemdisplay[ nodeName ] = display;
	}

	return display;
}
var rmargin = (/^margin/);

var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );

var getStyles = function( elem ) {
		return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
	};



function curCSS( elem, name, computed ) {
	var width, minWidth, maxWidth, ret,
		style = elem.style;

	computed = computed || getStyles( elem );

	// Support: IE9
	// getPropertyValue is only needed for .css('filter') in IE9, see #12537
	if ( computed ) {
		ret = computed.getPropertyValue( name ) || computed[ name ];
	}

	if ( computed ) {

		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
			ret = jQuery.style( elem, name );
		}

		// Support: iOS < 6
		// A tribute to the "awesome hack by Dean Edwards"
		// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
		// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
		if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {

			// Remember the original values
			width = style.width;
			minWidth = style.minWidth;
			maxWidth = style.maxWidth;

			// Put in the new values to get a computed value out
			style.minWidth = style.maxWidth = style.width = ret;
			ret = computed.width;

			// Revert the changed values
			style.width = width;
			style.minWidth = minWidth;
			style.maxWidth = maxWidth;
		}
	}

	return ret !== undefined ?
		// Support: IE
		// IE returns zIndex value as an integer.
		ret + "" :
		ret;
}


function addGetHookIf( conditionFn, hookFn ) {
	// Define the hook, we'll check on the first run if it's really needed.
	return {
		get: function() {
			if ( conditionFn() ) {
				// Hook not needed (or it's not possible to use it due to missing dependency),
				// remove it.
				// Since there are no other hooks for marginRight, remove the whole object.
				delete this.get;
				return;
			}

			// Hook needed; redefine it so that the support test is not executed again.

			return (this.get = hookFn).apply( this, arguments );
		}
	};
}


(function() {
	var pixelPositionVal, boxSizingReliableVal,
		// Support: Firefox, Android 2.3 (Prefixed box-sizing versions).
		divReset = "padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;" +
			"-moz-box-sizing:content-box;box-sizing:content-box",
		docElem = document.documentElement,
		container = document.createElement( "div" ),
		div = document.createElement( "div" );

	div.style.backgroundClip = "content-box";
	div.cloneNode( true ).style.backgroundClip = "";
	support.clearCloneStyle = div.style.backgroundClip === "content-box";

	container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;" +
		"margin-top:1px";
	container.appendChild( div );

	// Executing both pixelPosition & boxSizingReliable tests require only one layout
	// so they're executed at the same time to save the second computation.
	function computePixelPositionAndBoxSizingReliable() {
		// Support: Firefox, Android 2.3 (Prefixed box-sizing versions).
		div.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
			"box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;" +
			"position:absolute;top:1%";
		docElem.appendChild( container );

		var divStyle = window.getComputedStyle( div, null );
		pixelPositionVal = divStyle.top !== "1%";
		boxSizingReliableVal = divStyle.width === "4px";

		docElem.removeChild( container );
	}

	// Use window.getComputedStyle because jsdom on node.js will break without it.
	if ( window.getComputedStyle ) {
		jQuery.extend(support, {
			pixelPosition: function() {
				// This test is executed only once but we still do memoizing
				// since we can use the boxSizingReliable pre-computing.
				// No need to check if the test was already performed, though.
				computePixelPositionAndBoxSizingReliable();
				return pixelPositionVal;
			},
			boxSizingReliable: function() {
				if ( boxSizingReliableVal == null ) {
					computePixelPositionAndBoxSizingReliable();
				}
				return boxSizingReliableVal;
			},
			reliableMarginRight: function() {
				// Support: Android 2.3
				// Check if div with explicit width and no margin-right incorrectly
				// gets computed margin-right based on width of container. (#3333)
				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
				// This support function is only executed once so no memoizing is needed.
				var ret,
					marginDiv = div.appendChild( document.createElement( "div" ) );
				marginDiv.style.cssText = div.style.cssText = divReset;
				marginDiv.style.marginRight = marginDiv.style.width = "0";
				div.style.width = "1px";
				docElem.appendChild( container );

				ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );

				docElem.removeChild( container );

				// Clean up the div for other support tests.
				div.innerHTML = "";

				return ret;
			}
		});
	}
})();


// A method for quickly swapping in/out CSS properties to get correct calculations.
jQuery.swap = function( elem, options, callback, args ) {
	var ret, name,
		old = {};

	// Remember the old values, and insert the new ones
	for ( name in options ) {
		old[ name ] = elem.style[ name ];
		elem.style[ name ] = options[ name ];
	}

	ret = callback.apply( elem, args || [] );

	// Revert the old values
	for ( name in options ) {
		elem.style[ name ] = old[ name ];
	}

	return ret;
};


var
	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),

	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
	cssNormalTransform = {
		letterSpacing: 0,
		fontWeight: 400
	},

	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];

// return a css property mapped to a potentially vendor prefixed property
function vendorPropName( style, name ) {

	// shortcut for names that are not vendor prefixed
	if ( name in style ) {
		return name;
	}

	// check for vendor prefixed names
	var capName = name[0].toUpperCase() + name.slice(1),
		origName = name,
		i = cssPrefixes.length;

	while ( i-- ) {
		name = cssPrefixes[ i ] + capName;
		if ( name in style ) {
			return name;
		}
	}

	return origName;
}

function setPositiveNumber( elem, value, subtract ) {
	var matches = rnumsplit.exec( value );
	return matches ?
		// Guard against undefined "subtract", e.g., when used as in cssHooks
		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
		value;
}

function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
	var i = extra === ( isBorderBox ? "border" : "content" ) ?
		// If we already have the right measurement, avoid augmentation
		4 :
		// Otherwise initialize for horizontal or vertical properties
		name === "width" ? 1 : 0,

		val = 0;

	for ( ; i < 4; i += 2 ) {
		// both box models exclude margin, so add it if we want it
		if ( extra === "margin" ) {
			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
		}

		if ( isBorderBox ) {
			// border-box includes padding, so remove it if we want content
			if ( extra === "content" ) {
				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
			}

			// at this point, extra isn't border nor margin, so remove border
			if ( extra !== "margin" ) {
				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
			}
		} else {
			// at this point, extra isn't content, so add padding
			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );

			// at this point, extra isn't content nor padding, so add border
			if ( extra !== "padding" ) {
				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
			}
		}
	}

	return val;
}

function getWidthOrHeight( elem, name, extra ) {

	// Start with offset property, which is equivalent to the border-box value
	var valueIsBorderBox = true,
		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
		styles = getStyles( elem ),
		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";

	// some non-html elements return undefined for offsetWidth, so check for null/undefined
	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
	if ( val <= 0 || val == null ) {
		// Fall back to computed then uncomputed css if necessary
		val = curCSS( elem, name, styles );
		if ( val < 0 || val == null ) {
			val = elem.style[ name ];
		}

		// Computed unit is not pixels. Stop here and return.
		if ( rnumnonpx.test(val) ) {
			return val;
		}

		// we need the check for style in case a browser which returns unreliable values
		// for getComputedStyle silently falls back to the reliable elem.style
		valueIsBorderBox = isBorderBox &&
			( support.boxSizingReliable() || val === elem.style[ name ] );

		// Normalize "", auto, and prepare for extra
		val = parseFloat( val ) || 0;
	}

	// use the active box-sizing model to add/subtract irrelevant styles
	return ( val +
		augmentWidthOrHeight(
			elem,
			name,
			extra || ( isBorderBox ? "border" : "content" ),
			valueIsBorderBox,
			styles
		)
	) + "px";
}

function showHide( elements, show ) {
	var display, elem, hidden,
		values = [],
		index = 0,
		length = elements.length;

	for ( ; index < length; index++ ) {
		elem = elements[ index ];
		if ( !elem.style ) {
			continue;
		}

		values[ index ] = data_priv.get( elem, "olddisplay" );
		display = elem.style.display;
		if ( show ) {
			// Reset the inline display of this element to learn if it is
			// being hidden by cascaded rules or not
			if ( !values[ index ] && display === "none" ) {
				elem.style.display = "";
			}

			// Set elements which have been overridden with display: none
			// in a stylesheet to whatever the default browser style is
			// for such an element
			if ( elem.style.display === "" && isHidden( elem ) ) {
				values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
			}
		} else {

			if ( !values[ index ] ) {
				hidden = isHidden( elem );

				if ( display && display !== "none" || !hidden ) {
					data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css(elem, "display") );
				}
			}
		}
	}

	// Set the display of most of the elements in a second loop
	// to avoid the constant reflow
	for ( index = 0; index < length; index++ ) {
		elem = elements[ index ];
		if ( !elem.style ) {
			continue;
		}
		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
			elem.style.display = show ? values[ index ] || "" : "none";
		}
	}

	return elements;
}

jQuery.extend({
	// Add in style property hooks for overriding the default
	// behavior of getting and setting a style property
	cssHooks: {
		opacity: {
			get: function( elem, computed ) {
				if ( computed ) {
					// We should always get a number back from opacity
					var ret = curCSS( elem, "opacity" );
					return ret === "" ? "1" : ret;
				}
			}
		}
	},

	// Don't automatically add "px" to these possibly-unitless properties
	cssNumber: {
		"columnCount": true,
		"fillOpacity": true,
		"fontWeight": true,
		"lineHeight": true,
		"opacity": true,
		"order": true,
		"orphans": true,
		"widows": true,
		"zIndex": true,
		"zoom": true
	},

	// Add in properties whose names you wish to fix before
	// setting or getting the value
	cssProps: {
		// normalize float css property
		"float": "cssFloat"
	},

	// Get and set the style property on a DOM Node
	style: function( elem, name, value, extra ) {
		// Don't set styles on text and comment nodes
		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
			return;
		}

		// Make sure that we're working with the right name
		var ret, type, hooks,
			origName = jQuery.camelCase( name ),
			style = elem.style;

		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );

		// gets hook for the prefixed version
		// followed by the unprefixed version
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

		// Check if we're setting a value
		if ( value !== undefined ) {
			type = typeof value;

			// convert relative number strings (+= or -=) to relative numbers. #7345
			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
				// Fixes bug #9237
				type = "number";
			}

			// Make sure that null and NaN values aren't set. See: #7116
			if ( value == null || value !== value ) {
				return;
			}

			// If a number was passed in, add 'px' to the (except for certain CSS properties)
			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
				value += "px";
			}

			// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
			// but it would mean to define eight (for every problematic property) identical functions
			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
				style[ name ] = "inherit";
			}

			// If a hook was provided, use that value, otherwise just set the specified value
			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
				// Support: Chrome, Safari
				// Setting style to blank string required to delete "style: x !important;"
				style[ name ] = "";
				style[ name ] = value;
			}

		} else {
			// If a hook was provided get the non-computed value from there
			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
				return ret;
			}

			// Otherwise just get the value from the style object
			return style[ name ];
		}
	},

	css: function( elem, name, extra, styles ) {
		var val, num, hooks,
			origName = jQuery.camelCase( name );

		// Make sure that we're working with the right name
		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );

		// gets hook for the prefixed version
		// followed by the unprefixed version
		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];

		// If a hook was provided get the computed value from there
		if ( hooks && "get" in hooks ) {
			val = hooks.get( elem, true, extra );
		}

		// Otherwise, if a way to get the computed value exists, use that
		if ( val === undefined ) {
			val = curCSS( elem, name, styles );
		}

		//convert "normal" to computed value
		if ( val === "normal" && name in cssNormalTransform ) {
			val = cssNormalTransform[ name ];
		}

		// Return, converting to number if forced or a qualifier was provided and val looks numeric
		if ( extra === "" || extra ) {
			num = parseFloat( val );
			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
		}
		return val;
	}
});

jQuery.each([ "height", "width" ], function( i, name ) {
	jQuery.cssHooks[ name ] = {
		get: function( elem, computed, extra ) {
			if ( computed ) {
				// certain elements can have dimension info if we invisibly show them
				// however, it must have a current display style that would benefit from this
				return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
					jQuery.swap( elem, cssShow, function() {
						return getWidthOrHeight( elem, name, extra );
					}) :
					getWidthOrHeight( elem, name, extra );
			}
		},

		set: function( elem, value, extra ) {
			var styles = extra && getStyles( elem );
			return setPositiveNumber( elem, value, extra ?
				augmentWidthOrHeight(
					elem,
					name,
					extra,
					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
					styles
				) : 0
			);
		}
	};
});

// Support: Android 2.3
jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
	function( elem, computed ) {
		if ( computed ) {
			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
			// Work around by temporarily setting element display to inline-block
			return jQuery.swap( elem, { "display": "inline-block" },
				curCSS, [ elem, "marginRight" ] );
		}
	}
);

// These hooks are used by animate to expand properties
jQuery.each({
	margin: "",
	padding: "",
	border: "Width"
}, function( prefix, suffix ) {
	jQuery.cssHooks[ prefix + suffix ] = {
		expand: function( value ) {
			var i = 0,
				expanded = {},

				// assumes a single number if not a string
				parts = typeof value === "string" ? value.split(" ") : [ value ];

			for ( ; i < 4; i++ ) {
				expanded[ prefix + cssExpand[ i ] + suffix ] =
					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
			}

			return expanded;
		}
	};

	if ( !rmargin.test( prefix ) ) {
		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
	}
});

jQuery.fn.extend({
	css: function( name, value ) {
		return access( this, function( elem, name, value ) {
			var styles, len,
				map = {},
				i = 0;

			if ( jQuery.isArray( name ) ) {
				styles = getStyles( elem );
				len = name.length;

				for ( ; i < len; i++ ) {
					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
				}

				return map;
			}

			return value !== undefined ?
				jQuery.style( elem, name, value ) :
				jQuery.css( elem, name );
		}, name, value, arguments.length > 1 );
	},
	show: function() {
		return showHide( this, true );
	},
	hide: function() {
		return showHide( this );
	},
	toggle: function( state ) {
		if ( typeof state === "boolean" ) {
			return state ? this.show() : this.hide();
		}

		return this.each(function() {
			if ( isHidden( this ) ) {
				jQuery( this ).show();
			} else {
				jQuery( this ).hide();
			}
		});
	}
});


function Tween( elem, options, prop, end, easing ) {
	return new Tween.prototype.init( elem, options, prop, end, easing );
}
jQuery.Tween = Tween;

Tween.prototype = {
	constructor: Tween,
	init: function( elem, options, prop, end, easing, unit ) {
		this.elem = elem;
		this.prop = prop;
		this.easing = easing || "swing";
		this.options = options;
		this.start = this.now = this.cur();
		this.end = end;
		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
	},
	cur: function() {
		var hooks = Tween.propHooks[ this.prop ];

		return hooks && hooks.get ?
			hooks.get( this ) :
			Tween.propHooks._default.get( this );
	},
	run: function( percent ) {
		var eased,
			hooks = Tween.propHooks[ this.prop ];

		if ( this.options.duration ) {
			this.pos = eased = jQuery.easing[ this.easing ](
				percent, this.options.duration * percent, 0, 1, this.options.duration
			);
		} else {
			this.pos = eased = percent;
		}
		this.now = ( this.end - this.start ) * eased + this.start;

		if ( this.options.step ) {
			this.options.step.call( this.elem, this.now, this );
		}

		if ( hooks && hooks.set ) {
			hooks.set( this );
		} else {
			Tween.propHooks._default.set( this );
		}
		return this;
	}
};

Tween.prototype.init.prototype = Tween.prototype;

Tween.propHooks = {
	_default: {
		get: function( tween ) {
			var result;

			if ( tween.elem[ tween.prop ] != null &&
				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
				return tween.elem[ tween.prop ];
			}

			// passing an empty string as a 3rd parameter to .css will automatically
			// attempt a parseFloat and fallback to a string if the parse fails
			// so, simple values such as "10px" are parsed to Float.
			// complex values such as "rotate(1rad)" are returned as is.
			result = jQuery.css( tween.elem, tween.prop, "" );
			// Empty strings, null, undefined and "auto" are converted to 0.
			return !result || result === "auto" ? 0 : result;
		},
		set: function( tween ) {
			// use step hook for back compat - use cssHook if its there - use .style if its
			// available and use plain properties where available
			if ( jQuery.fx.step[ tween.prop ] ) {
				jQuery.fx.step[ tween.prop ]( tween );
			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
			} else {
				tween.elem[ tween.prop ] = tween.now;
			}
		}
	}
};

// Support: IE9
// Panic based approach to setting things on disconnected nodes

Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
	set: function( tween ) {
		if ( tween.elem.nodeType && tween.elem.parentNode ) {
			tween.elem[ tween.prop ] = tween.now;
		}
	}
};

jQuery.easing = {
	linear: function( p ) {
		return p;
	},
	swing: function( p ) {
		return 0.5 - Math.cos( p * Math.PI ) / 2;
	}
};

jQuery.fx = Tween.prototype.init;

// Back Compat <1.8 extension point
jQuery.fx.step = {};




var
	fxNow, timerId,
	rfxtypes = /^(?:toggle|show|hide)$/,
	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
	rrun = /queueHooks$/,
	animationPrefilters = [ defaultPrefilter ],
	tweeners = {
		"*": [ function( prop, value ) {
			var tween = this.createTween( prop, value ),
				target = tween.cur(),
				parts = rfxnum.exec( value ),
				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),

				// Starting value computation is required for potential unit mismatches
				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
				scale = 1,
				maxIterations = 20;

			if ( start && start[ 3 ] !== unit ) {
				// Trust units reported by jQuery.css
				unit = unit || start[ 3 ];

				// Make sure we update the tween properties later on
				parts = parts || [];

				// Iteratively approximate from a nonzero starting point
				start = +target || 1;

				do {
					// If previous iteration zeroed out, double until we get *something*
					// Use a string for doubling factor so we don't accidentally see scale as unchanged below
					scale = scale || ".5";

					// Adjust and apply
					start = start / scale;
					jQuery.style( tween.elem, prop, start + unit );

				// Update scale, tolerating zero or NaN from tween.cur()
				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
			}

			// Update tween properties
			if ( parts ) {
				start = tween.start = +start || +target || 0;
				tween.unit = unit;
				// If a +=/-= token was provided, we're doing a relative animation
				tween.end = parts[ 1 ] ?
					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
					+parts[ 2 ];
			}

			return tween;
		} ]
	};

// Animations created synchronously will run synchronously
function createFxNow() {
	setTimeout(function() {
		fxNow = undefined;
	});
	return ( fxNow = jQuery.now() );
}

// Generate parameters to create a standard animation
function genFx( type, includeWidth ) {
	var which,
		i = 0,
		attrs = { height: type };

	// if we include width, step value is 1 to do all cssExpand values,
	// if we don't include width, step value is 2 to skip over Left and Right
	includeWidth = includeWidth ? 1 : 0;
	for ( ; i < 4 ; i += 2 - includeWidth ) {
		which = cssExpand[ i ];
		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
	}

	if ( includeWidth ) {
		attrs.opacity = attrs.width = type;
	}

	return attrs;
}

function createTween( value, prop, animation ) {
	var tween,
		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
		index = 0,
		length = collection.length;
	for ( ; index < length; index++ ) {
		if ( (tween = collection[ index ].call( animation, prop, value )) ) {

			// we're done with this property
			return tween;
		}
	}
}

function defaultPrefilter( elem, props, opts ) {
	/* jshint validthis: true */
	var prop, value, toggle, tween, hooks, oldfire, display,
		anim = this,
		orig = {},
		style = elem.style,
		hidden = elem.nodeType && isHidden( elem ),
		dataShow = data_priv.get( elem, "fxshow" );

	// handle queue: false promises
	if ( !opts.queue ) {
		hooks = jQuery._queueHooks( elem, "fx" );
		if ( hooks.unqueued == null ) {
			hooks.unqueued = 0;
			oldfire = hooks.empty.fire;
			hooks.empty.fire = function() {
				if ( !hooks.unqueued ) {
					oldfire();
				}
			};
		}
		hooks.unqueued++;

		anim.always(function() {
			// doing this makes sure that the complete handler will be called
			// before this completes
			anim.always(function() {
				hooks.unqueued--;
				if ( !jQuery.queue( elem, "fx" ).length ) {
					hooks.empty.fire();
				}
			});
		});
	}

	// height/width overflow pass
	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
		// Make sure that nothing sneaks out
		// Record all 3 overflow attributes because IE9-10 do not
		// change the overflow attribute when overflowX and
		// overflowY are set to the same value
		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];

		// Set display property to inline-block for height/width
		// animations on inline elements that are having width/height animated
		display = jQuery.css( elem, "display" );
		// Get default display if display is currently "none"
		if ( display === "none" ) {
			display = defaultDisplay( elem.nodeName );
		}
		if ( display === "inline" &&
				jQuery.css( elem, "float" ) === "none" ) {

			style.display = "inline-block";
		}
	}

	if ( opts.overflow ) {
		style.overflow = "hidden";
		anim.always(function() {
			style.overflow = opts.overflow[ 0 ];
			style.overflowX = opts.overflow[ 1 ];
			style.overflowY = opts.overflow[ 2 ];
		});
	}

	// show/hide pass
	for ( prop in props ) {
		value = props[ prop ];
		if ( rfxtypes.exec( value ) ) {
			delete props[ prop ];
			toggle = toggle || value === "toggle";
			if ( value === ( hidden ? "hide" : "show" ) ) {

				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
					hidden = true;
				} else {
					continue;
				}
			}
			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
		}
	}

	if ( !jQuery.isEmptyObject( orig ) ) {
		if ( dataShow ) {
			if ( "hidden" in dataShow ) {
				hidden = dataShow.hidden;
			}
		} else {
			dataShow = data_priv.access( elem, "fxshow", {} );
		}

		// store state if its toggle - enables .stop().toggle() to "reverse"
		if ( toggle ) {
			dataShow.hidden = !hidden;
		}
		if ( hidden ) {
			jQuery( elem ).show();
		} else {
			anim.done(function() {
				jQuery( elem ).hide();
			});
		}
		anim.done(function() {
			var prop;

			data_priv.remove( elem, "fxshow" );
			for ( prop in orig ) {
				jQuery.style( elem, prop, orig[ prop ] );
			}
		});
		for ( prop in orig ) {
			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );

			if ( !( prop in dataShow ) ) {
				dataShow[ prop ] = tween.start;
				if ( hidden ) {
					tween.end = tween.start;
					tween.start = prop === "width" || prop === "height" ? 1 : 0;
				}
			}
		}
	}
}

function propFilter( props, specialEasing ) {
	var index, name, easing, value, hooks;

	// camelCase, specialEasing and expand cssHook pass
	for ( index in props ) {
		name = jQuery.camelCase( index );
		easing = specialEasing[ name ];
		value = props[ index ];
		if ( jQuery.isArray( value ) ) {
			easing = value[ 1 ];
			value = props[ index ] = value[ 0 ];
		}

		if ( index !== name ) {
			props[ name ] = value;
			delete props[ index ];
		}

		hooks = jQuery.cssHooks[ name ];
		if ( hooks && "expand" in hooks ) {
			value = hooks.expand( value );
			delete props[ name ];

			// not quite $.extend, this wont overwrite keys already present.
			// also - reusing 'index' from above because we have the correct "name"
			for ( index in value ) {
				if ( !( index in props ) ) {
					props[ index ] = value[ index ];
					specialEasing[ index ] = easing;
				}
			}
		} else {
			specialEasing[ name ] = easing;
		}
	}
}

function Animation( elem, properties, options ) {
	var result,
		stopped,
		index = 0,
		length = animationPrefilters.length,
		deferred = jQuery.Deferred().always( function() {
			// don't match elem in the :animated selector
			delete tick.elem;
		}),
		tick = function() {
			if ( stopped ) {
				return false;
			}
			var currentTime = fxNow || createFxNow(),
				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
				temp = remaining / animation.duration || 0,
				percent = 1 - temp,
				index = 0,
				length = animation.tweens.length;

			for ( ; index < length ; index++ ) {
				animation.tweens[ index ].run( percent );
			}

			deferred.notifyWith( elem, [ animation, percent, remaining ]);

			if ( percent < 1 && length ) {
				return remaining;
			} else {
				deferred.resolveWith( elem, [ animation ] );
				return false;
			}
		},
		animation = deferred.promise({
			elem: elem,
			props: jQuery.extend( {}, properties ),
			opts: jQuery.extend( true, { specialEasing: {} }, options ),
			originalProperties: properties,
			originalOptions: options,
			startTime: fxNow || createFxNow(),
			duration: options.duration,
			tweens: [],
			createTween: function( prop, end ) {
				var tween = jQuery.Tween( elem, animation.opts, prop, end,
						animation.opts.specialEasing[ prop ] || animation.opts.easing );
				animation.tweens.push( tween );
				return tween;
			},
			stop: function( gotoEnd ) {
				var index = 0,
					// if we are going to the end, we want to run all the tweens
					// otherwise we skip this part
					length = gotoEnd ? animation.tweens.length : 0;
				if ( stopped ) {
					return this;
				}
				stopped = true;
				for ( ; index < length ; index++ ) {
					animation.tweens[ index ].run( 1 );
				}

				// resolve when we played the last frame
				// otherwise, reject
				if ( gotoEnd ) {
					deferred.resolveWith( elem, [ animation, gotoEnd ] );
				} else {
					deferred.rejectWith( elem, [ animation, gotoEnd ] );
				}
				return this;
			}
		}),
		props = animation.props;

	propFilter( props, animation.opts.specialEasing );

	for ( ; index < length ; index++ ) {
		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
		if ( result ) {
			return result;
		}
	}

	jQuery.map( props, createTween, animation );

	if ( jQuery.isFunction( animation.opts.start ) ) {
		animation.opts.start.call( elem, animation );
	}

	jQuery.fx.timer(
		jQuery.extend( tick, {
			elem: elem,
			anim: animation,
			queue: animation.opts.queue
		})
	);

	// attach callbacks from options
	return animation.progress( animation.opts.progress )
		.done( animation.opts.done, animation.opts.complete )
		.fail( animation.opts.fail )
		.always( animation.opts.always );
}

jQuery.Animation = jQuery.extend( Animation, {

	tweener: function( props, callback ) {
		if ( jQuery.isFunction( props ) ) {
			callback = props;
			props = [ "*" ];
		} else {
			props = props.split(" ");
		}

		var prop,
			index = 0,
			length = props.length;

		for ( ; index < length ; index++ ) {
			prop = props[ index ];
			tweeners[ prop ] = tweeners[ prop ] || [];
			tweeners[ prop ].unshift( callback );
		}
	},

	prefilter: function( callback, prepend ) {
		if ( prepend ) {
			animationPrefilters.unshift( callback );
		} else {
			animationPrefilters.push( callback );
		}
	}
});

jQuery.speed = function( speed, easing, fn ) {
	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
		complete: fn || !fn && easing ||
			jQuery.isFunction( speed ) && speed,
		duration: speed,
		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
	};

	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;

	// normalize opt.queue - true/undefined/null -> "fx"
	if ( opt.queue == null || opt.queue === true ) {
		opt.queue = "fx";
	}

	// Queueing
	opt.old = opt.complete;

	opt.complete = function() {
		if ( jQuery.isFunction( opt.old ) ) {
			opt.old.call( this );
		}

		if ( opt.queue ) {
			jQuery.dequeue( this, opt.queue );
		}
	};

	return opt;
};

jQuery.fn.extend({
	fadeTo: function( speed, to, easing, callback ) {

		// show any hidden elements after setting opacity to 0
		return this.filter( isHidden ).css( "opacity", 0 ).show()

			// animate to the value specified
			.end().animate({ opacity: to }, speed, easing, callback );
	},
	animate: function( prop, speed, easing, callback ) {
		var empty = jQuery.isEmptyObject( prop ),
			optall = jQuery.speed( speed, easing, callback ),
			doAnimation = function() {
				// Operate on a copy of prop so per-property easing won't be lost
				var anim = Animation( this, jQuery.extend( {}, prop ), optall );

				// Empty animations, or finishing resolves immediately
				if ( empty || data_priv.get( this, "finish" ) ) {
					anim.stop( true );
				}
			};
			doAnimation.finish = doAnimation;

		return empty || optall.queue === false ?
			this.each( doAnimation ) :
			this.queue( optall.queue, doAnimation );
	},
	stop: function( type, clearQueue, gotoEnd ) {
		var stopQueue = function( hooks ) {
			var stop = hooks.stop;
			delete hooks.stop;
			stop( gotoEnd );
		};

		if ( typeof type !== "string" ) {
			gotoEnd = clearQueue;
			clearQueue = type;
			type = undefined;
		}
		if ( clearQueue && type !== false ) {
			this.queue( type || "fx", [] );
		}

		return this.each(function() {
			var dequeue = true,
				index = type != null && type + "queueHooks",
				timers = jQuery.timers,
				data = data_priv.get( this );

			if ( index ) {
				if ( data[ index ] && data[ index ].stop ) {
					stopQueue( data[ index ] );
				}
			} else {
				for ( index in data ) {
					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
						stopQueue( data[ index ] );
					}
				}
			}

			for ( index = timers.length; index--; ) {
				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
					timers[ index ].anim.stop( gotoEnd );
					dequeue = false;
					timers.splice( index, 1 );
				}
			}

			// start the next in the queue if the last step wasn't forced
			// timers currently will call their complete callbacks, which will dequeue
			// but only if they were gotoEnd
			if ( dequeue || !gotoEnd ) {
				jQuery.dequeue( this, type );
			}
		});
	},
	finish: function( type ) {
		if ( type !== false ) {
			type = type || "fx";
		}
		return this.each(function() {
			var index,
				data = data_priv.get( this ),
				queue = data[ type + "queue" ],
				hooks = data[ type + "queueHooks" ],
				timers = jQuery.timers,
				length = queue ? queue.length : 0;

			// enable finishing flag on private data
			data.finish = true;

			// empty the queue first
			jQuery.queue( this, type, [] );

			if ( hooks && hooks.stop ) {
				hooks.stop.call( this, true );
			}

			// look for any active animations, and finish them
			for ( index = timers.length; index--; ) {
				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
					timers[ index ].anim.stop( true );
					timers.splice( index, 1 );
				}
			}

			// look for any animations in the old queue and finish them
			for ( index = 0; index < length; index++ ) {
				if ( queue[ index ] && queue[ index ].finish ) {
					queue[ index ].finish.call( this );
				}
			}

			// turn off finishing flag
			delete data.finish;
		});
	}
});

jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
	var cssFn = jQuery.fn[ name ];
	jQuery.fn[ name ] = function( speed, easing, callback ) {
		return speed == null || typeof speed === "boolean" ?
			cssFn.apply( this, arguments ) :
			this.animate( genFx( name, true ), speed, easing, callback );
	};
});

// Generate shortcuts for custom animations
jQuery.each({
	slideDown: genFx("show"),
	slideUp: genFx("hide"),
	slideToggle: genFx("toggle"),
	fadeIn: { opacity: "show" },
	fadeOut: { opacity: "hide" },
	fadeToggle: { opacity: "toggle" }
}, function( name, props ) {
	jQuery.fn[ name ] = function( speed, easing, callback ) {
		return this.animate( props, speed, easing, callback );
	};
});

jQuery.timers = [];
jQuery.fx.tick = function() {
	var timer,
		i = 0,
		timers = jQuery.timers;

	fxNow = jQuery.now();

	for ( ; i < timers.length; i++ ) {
		timer = timers[ i ];
		// Checks the timer has not already been removed
		if ( !timer() && timers[ i ] === timer ) {
			timers.splice( i--, 1 );
		}
	}

	if ( !timers.length ) {
		jQuery.fx.stop();
	}
	fxNow = undefined;
};

jQuery.fx.timer = function( timer ) {
	jQuery.timers.push( timer );
	if ( timer() ) {
		jQuery.fx.start();
	} else {
		jQuery.timers.pop();
	}
};

jQuery.fx.interval = 13;

jQuery.fx.start = function() {
	if ( !timerId ) {
		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
	}
};

jQuery.fx.stop = function() {
	clearInterval( timerId );
	timerId = null;
};

jQuery.fx.speeds = {
	slow: 600,
	fast: 200,
	// Default speed
	_default: 400
};


// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
jQuery.fn.delay = function( time, type ) {
	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
	type = type || "fx";

	return this.queue( type, function( next, hooks ) {
		var timeout = setTimeout( next, time );
		hooks.stop = function() {
			clearTimeout( timeout );
		};
	});
};


(function() {
	var input = document.createElement( "input" ),
		select = document.createElement( "select" ),
		opt = select.appendChild( document.createElement( "option" ) );

	input.type = "checkbox";

	// Support: iOS 5.1, Android 4.x, Android 2.3
	// Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
	support.checkOn = input.value !== "";

	// Must access the parent to make an option select properly
	// Support: IE9, IE10
	support.optSelected = opt.selected;

	// Make sure that the options inside disabled selects aren't marked as disabled
	// (WebKit marks them as disabled)
	select.disabled = true;
	support.optDisabled = !opt.disabled;

	// Check if an input maintains its value after becoming a radio
	// Support: IE9, IE10
	input = document.createElement( "input" );
	input.value = "t";
	input.type = "radio";
	support.radioValue = input.value === "t";
})();


var nodeHook, boolHook,
	attrHandle = jQuery.expr.attrHandle;

jQuery.fn.extend({
	attr: function( name, value ) {
		return access( this, jQuery.attr, name, value, arguments.length > 1 );
	},

	removeAttr: function( name ) {
		return this.each(function() {
			jQuery.removeAttr( this, name );
		});
	}
});

jQuery.extend({
	attr: function( elem, name, value ) {
		var hooks, ret,
			nType = elem.nodeType;

		// don't get/set attributes on text, comment and attribute nodes
		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}

		// Fallback to prop when attributes are not supported
		if ( typeof elem.getAttribute === strundefined ) {
			return jQuery.prop( elem, name, value );
		}

		// All attributes are lowercase
		// Grab necessary hook if one is defined
		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
			name = name.toLowerCase();
			hooks = jQuery.attrHooks[ name ] ||
				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
		}

		if ( value !== undefined ) {

			if ( value === null ) {
				jQuery.removeAttr( elem, name );

			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
				return ret;

			} else {
				elem.setAttribute( name, value + "" );
				return value;
			}

		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
			return ret;

		} else {
			ret = jQuery.find.attr( elem, name );

			// Non-existent attributes return null, we normalize to undefined
			return ret == null ?
				undefined :
				ret;
		}
	},

	removeAttr: function( elem, value ) {
		var name, propName,
			i = 0,
			attrNames = value && value.match( rnotwhite );

		if ( attrNames && elem.nodeType === 1 ) {
			while ( (name = attrNames[i++]) ) {
				propName = jQuery.propFix[ name ] || name;

				// Boolean attributes get special treatment (#10870)
				if ( jQuery.expr.match.bool.test( name ) ) {
					// Set corresponding property to false
					elem[ propName ] = false;
				}

				elem.removeAttribute( name );
			}
		}
	},

	attrHooks: {
		type: {
			set: function( elem, value ) {
				if ( !support.radioValue && value === "radio" &&
					jQuery.nodeName( elem, "input" ) ) {
					// Setting the type on a radio button after the value resets the value in IE6-9
					// Reset value to default in case type is set after value during creation
					var val = elem.value;
					elem.setAttribute( "type", value );
					if ( val ) {
						elem.value = val;
					}
					return value;
				}
			}
		}
	}
});

// Hooks for boolean attributes
boolHook = {
	set: function( elem, value, name ) {
		if ( value === false ) {
			// Remove boolean attributes when set to false
			jQuery.removeAttr( elem, name );
		} else {
			elem.setAttribute( name, name );
		}
		return name;
	}
};
jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
	var getter = attrHandle[ name ] || jQuery.find.attr;

	attrHandle[ name ] = function( elem, name, isXML ) {
		var ret, handle;
		if ( !isXML ) {
			// Avoid an infinite loop by temporarily removing this function from the getter
			handle = attrHandle[ name ];
			attrHandle[ name ] = ret;
			ret = getter( elem, name, isXML ) != null ?
				name.toLowerCase() :
				null;
			attrHandle[ name ] = handle;
		}
		return ret;
	};
});




var rfocusable = /^(?:input|select|textarea|button)$/i;

jQuery.fn.extend({
	prop: function( name, value ) {
		return access( this, jQuery.prop, name, value, arguments.length > 1 );
	},

	removeProp: function( name ) {
		return this.each(function() {
			delete this[ jQuery.propFix[ name ] || name ];
		});
	}
});

jQuery.extend({
	propFix: {
		"for": "htmlFor",
		"class": "className"
	},

	prop: function( elem, name, value ) {
		var ret, hooks, notxml,
			nType = elem.nodeType;

		// don't get/set properties on text, comment and attribute nodes
		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
			return;
		}

		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

		if ( notxml ) {
			// Fix name and attach hooks
			name = jQuery.propFix[ name ] || name;
			hooks = jQuery.propHooks[ name ];
		}

		if ( value !== undefined ) {
			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
				ret :
				( elem[ name ] = value );

		} else {
			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
				ret :
				elem[ name ];
		}
	},

	propHooks: {
		tabIndex: {
			get: function( elem ) {
				return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
					elem.tabIndex :
					-1;
			}
		}
	}
});

// Support: IE9+
// Selectedness for an option in an optgroup can be inaccurate
if ( !support.optSelected ) {
	jQuery.propHooks.selected = {
		get: function( elem ) {
			var parent = elem.parentNode;
			if ( parent && parent.parentNode ) {
				parent.parentNode.selectedIndex;
			}
			return null;
		}
	};
}

jQuery.each([
	"tabIndex",
	"readOnly",
	"maxLength",
	"cellSpacing",
	"cellPadding",
	"rowSpan",
	"colSpan",
	"useMap",
	"frameBorder",
	"contentEditable"
], function() {
	jQuery.propFix[ this.toLowerCase() ] = this;
});




var rclass = /[\t\r\n\f]/g;

jQuery.fn.extend({
	addClass: function( value ) {
		var classes, elem, cur, clazz, j, finalValue,
			proceed = typeof value === "string" && value,
			i = 0,
			len = this.length;

		if ( jQuery.isFunction( value ) ) {
			return this.each(function( j ) {
				jQuery( this ).addClass( value.call( this, j, this.className ) );
			});
		}

		if ( proceed ) {
			// The disjunction here is for better compressibility (see removeClass)
			classes = ( value || "" ).match( rnotwhite ) || [];

			for ( ; i < len; i++ ) {
				elem = this[ i ];
				cur = elem.nodeType === 1 && ( elem.className ?
					( " " + elem.className + " " ).replace( rclass, " " ) :
					" "
				);

				if ( cur ) {
					j = 0;
					while ( (clazz = classes[j++]) ) {
						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
							cur += clazz + " ";
						}
					}

					// only assign if different to avoid unneeded rendering.
					finalValue = jQuery.trim( cur );
					if ( elem.className !== finalValue ) {
						elem.className = finalValue;
					}
				}
			}
		}

		return this;
	},

	removeClass: function( value ) {
		var classes, elem, cur, clazz, j, finalValue,
			proceed = arguments.length === 0 || typeof value === "string" && value,
			i = 0,
			len = this.length;

		if ( jQuery.isFunction( value ) ) {
			return this.each(function( j ) {
				jQuery( this ).removeClass( value.call( this, j, this.className ) );
			});
		}
		if ( proceed ) {
			classes = ( value || "" ).match( rnotwhite ) || [];

			for ( ; i < len; i++ ) {
				elem = this[ i ];
				// This expression is here for better compressibility (see addClass)
				cur = elem.nodeType === 1 && ( elem.className ?
					( " " + elem.className + " " ).replace( rclass, " " ) :
					""
				);

				if ( cur ) {
					j = 0;
					while ( (clazz = classes[j++]) ) {
						// Remove *all* instances
						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
							cur = cur.replace( " " + clazz + " ", " " );
						}
					}

					// only assign if different to avoid unneeded rendering.
					finalValue = value ? jQuery.trim( cur ) : "";
					if ( elem.className !== finalValue ) {
						elem.className = finalValue;
					}
				}
			}
		}

		return this;
	},

	toggleClass: function( value, stateVal ) {
		var type = typeof value;

		if ( typeof stateVal === "boolean" && type === "string" ) {
			return stateVal ? this.addClass( value ) : this.removeClass( value );
		}

		if ( jQuery.isFunction( value ) ) {
			return this.each(function( i ) {
				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
			});
		}

		return this.each(function() {
			if ( type === "string" ) {
				// toggle individual class names
				var className,
					i = 0,
					self = jQuery( this ),
					classNames = value.match( rnotwhite ) || [];

				while ( (className = classNames[ i++ ]) ) {
					// check each className given, space separated list
					if ( self.hasClass( className ) ) {
						self.removeClass( className );
					} else {
						self.addClass( className );
					}
				}

			// Toggle whole class name
			} else if ( type === strundefined || type === "boolean" ) {
				if ( this.className ) {
					// store className if set
					data_priv.set( this, "__className__", this.className );
				}

				// If the element has a class name or if we're passed "false",
				// then remove the whole classname (if there was one, the above saved it).
				// Otherwise bring back whatever was previously saved (if anything),
				// falling back to the empty string if nothing was stored.
				this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
			}
		});
	},

	hasClass: function( selector ) {
		var className = " " + selector + " ",
			i = 0,
			l = this.length;
		for ( ; i < l; i++ ) {
			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
				return true;
			}
		}

		return false;
	}
});




var rreturn = /\r/g;

jQuery.fn.extend({
	val: function( value ) {
		var hooks, ret, isFunction,
			elem = this[0];

		if ( !arguments.length ) {
			if ( elem ) {
				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];

				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
					return ret;
				}

				ret = elem.value;

				return typeof ret === "string" ?
					// handle most common string cases
					ret.replace(rreturn, "") :
					// handle cases where value is null/undef or number
					ret == null ? "" : ret;
			}

			return;
		}

		isFunction = jQuery.isFunction( value );

		return this.each(function( i ) {
			var val;

			if ( this.nodeType !== 1 ) {
				return;
			}

			if ( isFunction ) {
				val = value.call( this, i, jQuery( this ).val() );
			} else {
				val = value;
			}

			// Treat null/undefined as ""; convert numbers to string
			if ( val == null ) {
				val = "";

			} else if ( typeof val === "number" ) {
				val += "";

			} else if ( jQuery.isArray( val ) ) {
				val = jQuery.map( val, function( value ) {
					return value == null ? "" : value + "";
				});
			}

			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];

			// If set returns undefined, fall back to normal setting
			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
				this.value = val;
			}
		});
	}
});

jQuery.extend({
	valHooks: {
		select: {
			get: function( elem ) {
				var value, option,
					options = elem.options,
					index = elem.selectedIndex,
					one = elem.type === "select-one" || index < 0,
					values = one ? null : [],
					max = one ? index + 1 : options.length,
					i = index < 0 ?
						max :
						one ? index : 0;

				// Loop through all the selected options
				for ( ; i < max; i++ ) {
					option = options[ i ];

					// IE6-9 doesn't update selected after form reset (#2551)
					if ( ( option.selected || i === index ) &&
							// Don't return options that are disabled or in a disabled optgroup
							( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {

						// Get the specific value for the option
						value = jQuery( option ).val();

						// We don't need an array for one selects
						if ( one ) {
							return value;
						}

						// Multi-Selects return an array
						values.push( value );
					}
				}

				return values;
			},

			set: function( elem, value ) {
				var optionSet, option,
					options = elem.options,
					values = jQuery.makeArray( value ),
					i = options.length;

				while ( i-- ) {
					option = options[ i ];
					if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
						optionSet = true;
					}
				}

				// force browsers to behave consistently when non-matching value is set
				if ( !optionSet ) {
					elem.selectedIndex = -1;
				}
				return values;
			}
		}
	}
});

// Radios and checkboxes getter/setter
jQuery.each([ "radio", "checkbox" ], function() {
	jQuery.valHooks[ this ] = {
		set: function( elem, value ) {
			if ( jQuery.isArray( value ) ) {
				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
			}
		}
	};
	if ( !support.checkOn ) {
		jQuery.valHooks[ this ].get = function( elem ) {
			// Support: Webkit
			// "" is returned instead of "on" if a value isn't specified
			return elem.getAttribute("value") === null ? "on" : elem.value;
		};
	}
});




// Return jQuery for attributes-only inclusion


jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

	// Handle event binding
	jQuery.fn[ name ] = function( data, fn ) {
		return arguments.length > 0 ?
			this.on( name, null, data, fn ) :
			this.trigger( name );
	};
});

jQuery.fn.extend({
	hover: function( fnOver, fnOut ) {
		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
	},

	bind: function( types, data, fn ) {
		return this.on( types, null, data, fn );
	},
	unbind: function( types, fn ) {
		return this.off( types, null, fn );
	},

	delegate: function( selector, types, data, fn ) {
		return this.on( types, selector, data, fn );
	},
	undelegate: function( selector, types, fn ) {
		// ( namespace ) or ( selector, types [, fn] )
		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
	}
});


var nonce = jQuery.now();

var rquery = (/\?/);



// Support: Android 2.3
// Workaround failure to string-cast null input
jQuery.parseJSON = function( data ) {
	return JSON.parse( data + "" );
};


// Cross-browser xml parsing
jQuery.parseXML = function( data ) {
	var xml, tmp;
	if ( !data || typeof data !== "string" ) {
		return null;
	}

	// Support: IE9
	try {
		tmp = new DOMParser();
		xml = tmp.parseFromString( data, "text/xml" );
	} catch ( e ) {
		xml = undefined;
	}

	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
		jQuery.error( "Invalid XML: " + data );
	}
	return xml;
};


var
	// Document location
	ajaxLocParts,
	ajaxLocation,

	rhash = /#.*$/,
	rts = /([?&])_=[^&]*/,
	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
	// #7653, #8125, #8152: local protocol detection
	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
	rnoContent = /^(?:GET|HEAD)$/,
	rprotocol = /^\/\//,
	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,

	/* Prefilters
	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
	 * 2) These are called:
	 *    - BEFORE asking for a transport
	 *    - AFTER param serialization (s.data is a string if s.processData is true)
	 * 3) key is the dataType
	 * 4) the catchall symbol "*" can be used
	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
	 */
	prefilters = {},

	/* Transports bindings
	 * 1) key is the dataType
	 * 2) the catchall symbol "*" can be used
	 * 3) selection will start with transport dataType and THEN go to "*" if needed
	 */
	transports = {},

	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
	allTypes = "*/".concat("*");

// #8138, IE may throw an exception when accessing
// a field from window.location if document.domain has been set
try {
	ajaxLocation = location.href;
} catch( e ) {
	// Use the href attribute of an A element
	// since IE will modify it given document.location
	ajaxLocation = document.createElement( "a" );
	ajaxLocation.href = "";
	ajaxLocation = ajaxLocation.href;
}

// Segment location into parts
ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];

// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {

	// dataTypeExpression is optional and defaults to "*"
	return function( dataTypeExpression, func ) {

		if ( typeof dataTypeExpression !== "string" ) {
			func = dataTypeExpression;
			dataTypeExpression = "*";
		}

		var dataType,
			i = 0,
			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];

		if ( jQuery.isFunction( func ) ) {
			// For each dataType in the dataTypeExpression
			while ( (dataType = dataTypes[i++]) ) {
				// Prepend if requested
				if ( dataType[0] === "+" ) {
					dataType = dataType.slice( 1 ) || "*";
					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );

				// Otherwise append
				} else {
					(structure[ dataType ] = structure[ dataType ] || []).push( func );
				}
			}
		}
	};
}

// Base inspection function for prefilters and transports
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {

	var inspected = {},
		seekingTransport = ( structure === transports );

	function inspect( dataType ) {
		var selected;
		inspected[ dataType ] = true;
		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
				options.dataTypes.unshift( dataTypeOrTransport );
				inspect( dataTypeOrTransport );
				return false;
			} else if ( seekingTransport ) {
				return !( selected = dataTypeOrTransport );
			}
		});
		return selected;
	}

	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
}

// A special extend for ajax options
// that takes "flat" options (not to be deep extended)
// Fixes #9887
function ajaxExtend( target, src ) {
	var key, deep,
		flatOptions = jQuery.ajaxSettings.flatOptions || {};

	for ( key in src ) {
		if ( src[ key ] !== undefined ) {
			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
		}
	}
	if ( deep ) {
		jQuery.extend( true, target, deep );
	}

	return target;
}

/* Handles responses to an ajax request:
 * - finds the right dataType (mediates between content-type and expected dataType)
 * - returns the corresponding response
 */
function ajaxHandleResponses( s, jqXHR, responses ) {

	var ct, type, finalDataType, firstDataType,
		contents = s.contents,
		dataTypes = s.dataTypes;

	// Remove auto dataType and get content-type in the process
	while ( dataTypes[ 0 ] === "*" ) {
		dataTypes.shift();
		if ( ct === undefined ) {
			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
		}
	}

	// Check if we're dealing with a known content-type
	if ( ct ) {
		for ( type in contents ) {
			if ( contents[ type ] && contents[ type ].test( ct ) ) {
				dataTypes.unshift( type );
				break;
			}
		}
	}

	// Check to see if we have a response for the expected dataType
	if ( dataTypes[ 0 ] in responses ) {
		finalDataType = dataTypes[ 0 ];
	} else {
		// Try convertible dataTypes
		for ( type in responses ) {
			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
				finalDataType = type;
				break;
			}
			if ( !firstDataType ) {
				firstDataType = type;
			}
		}
		// Or just use first one
		finalDataType = finalDataType || firstDataType;
	}

	// If we found a dataType
	// We add the dataType to the list if needed
	// and return the corresponding response
	if ( finalDataType ) {
		if ( finalDataType !== dataTypes[ 0 ] ) {
			dataTypes.unshift( finalDataType );
		}
		return responses[ finalDataType ];
	}
}

/* Chain conversions given the request and the original response
 * Also sets the responseXXX fields on the jqXHR instance
 */
function ajaxConvert( s, response, jqXHR, isSuccess ) {
	var conv2, current, conv, tmp, prev,
		converters = {},
		// Work with a copy of dataTypes in case we need to modify it for conversion
		dataTypes = s.dataTypes.slice();

	// Create converters map with lowercased keys
	if ( dataTypes[ 1 ] ) {
		for ( conv in s.converters ) {
			converters[ conv.toLowerCase() ] = s.converters[ conv ];
		}
	}

	current = dataTypes.shift();

	// Convert to each sequential dataType
	while ( current ) {

		if ( s.responseFields[ current ] ) {
			jqXHR[ s.responseFields[ current ] ] = response;
		}

		// Apply the dataFilter if provided
		if ( !prev && isSuccess && s.dataFilter ) {
			response = s.dataFilter( response, s.dataType );
		}

		prev = current;
		current = dataTypes.shift();

		if ( current ) {

		// There's only work to do if current dataType is non-auto
			if ( current === "*" ) {

				current = prev;

			// Convert response if prev dataType is non-auto and differs from current
			} else if ( prev !== "*" && prev !== current ) {

				// Seek a direct converter
				conv = converters[ prev + " " + current ] || converters[ "* " + current ];

				// If none found, seek a pair
				if ( !conv ) {
					for ( conv2 in converters ) {

						// If conv2 outputs current
						tmp = conv2.split( " " );
						if ( tmp[ 1 ] === current ) {

							// If prev can be converted to accepted input
							conv = converters[ prev + " " + tmp[ 0 ] ] ||
								converters[ "* " + tmp[ 0 ] ];
							if ( conv ) {
								// Condense equivalence converters
								if ( conv === true ) {
									conv = converters[ conv2 ];

								// Otherwise, insert the intermediate dataType
								} else if ( converters[ conv2 ] !== true ) {
									current = tmp[ 0 ];
									dataTypes.unshift( tmp[ 1 ] );
								}
								break;
							}
						}
					}
				}

				// Apply converter (if not an equivalence)
				if ( conv !== true ) {

					// Unless errors are allowed to bubble, catch and return them
					if ( conv && s[ "throws" ] ) {
						response = conv( response );
					} else {
						try {
							response = conv( response );
						} catch ( e ) {
							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
						}
					}
				}
			}
		}
	}

	return { state: "success", data: response };
}

jQuery.extend({

	// Counter for holding the number of active queries
	active: 0,

	// Last-Modified header cache for next request
	lastModified: {},
	etag: {},

	ajaxSettings: {
		url: ajaxLocation,
		type: "GET",
		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
		global: true,
		processData: true,
		async: true,
		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
		/*
		timeout: 0,
		data: null,
		dataType: null,
		username: null,
		password: null,
		cache: null,
		throws: false,
		traditional: false,
		headers: {},
		*/

		accepts: {
			"*": allTypes,
			text: "text/plain",
			html: "text/html",
			xml: "application/xml, text/xml",
			json: "application/json, text/javascript"
		},

		contents: {
			xml: /xml/,
			html: /html/,
			json: /json/
		},

		responseFields: {
			xml: "responseXML",
			text: "responseText",
			json: "responseJSON"
		},

		// Data converters
		// Keys separate source (or catchall "*") and destination types with a single space
		converters: {

			// Convert anything to text
			"* text": String,

			// Text to html (true = no transformation)
			"text html": true,

			// Evaluate text as a json expression
			"text json": jQuery.parseJSON,

			// Parse text as xml
			"text xml": jQuery.parseXML
		},

		// For options that shouldn't be deep extended:
		// you can add your own custom options here if
		// and when you create one that shouldn't be
		// deep extended (see ajaxExtend)
		flatOptions: {
			url: true,
			context: true
		}
	},

	// Creates a full fledged settings object into target
	// with both ajaxSettings and settings fields.
	// If target is omitted, writes into ajaxSettings.
	ajaxSetup: function( target, settings ) {
		return settings ?

			// Building a settings object
			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :

			// Extending ajaxSettings
			ajaxExtend( jQuery.ajaxSettings, target );
	},

	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
	ajaxTransport: addToPrefiltersOrTransports( transports ),

	// Main method
	ajax: function( url, options ) {

		// If url is an object, simulate pre-1.5 signature
		if ( typeof url === "object" ) {
			options = url;
			url = undefined;
		}

		// Force options to be an object
		options = options || {};

		var transport,
			// URL without anti-cache param
			cacheURL,
			// Response headers
			responseHeadersString,
			responseHeaders,
			// timeout handle
			timeoutTimer,
			// Cross-domain detection vars
			parts,
			// To know if global events are to be dispatched
			fireGlobals,
			// Loop variable
			i,
			// Create the final options object
			s = jQuery.ajaxSetup( {}, options ),
			// Callbacks context
			callbackContext = s.context || s,
			// Context for global events is callbackContext if it is a DOM node or jQuery collection
			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
				jQuery( callbackContext ) :
				jQuery.event,
			// Deferreds
			deferred = jQuery.Deferred(),
			completeDeferred = jQuery.Callbacks("once memory"),
			// Status-dependent callbacks
			statusCode = s.statusCode || {},
			// Headers (they are sent all at once)
			requestHeaders = {},
			requestHeadersNames = {},
			// The jqXHR state
			state = 0,
			// Default abort message
			strAbort = "canceled",
			// Fake xhr
			jqXHR = {
				readyState: 0,

				// Builds headers hashtable if needed
				getResponseHeader: function( key ) {
					var match;
					if ( state === 2 ) {
						if ( !responseHeaders ) {
							responseHeaders = {};
							while ( (match = rheaders.exec( responseHeadersString )) ) {
								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
							}
						}
						match = responseHeaders[ key.toLowerCase() ];
					}
					return match == null ? null : match;
				},

				// Raw string
				getAllResponseHeaders: function() {
					return state === 2 ? responseHeadersString : null;
				},

				// Caches the header
				setRequestHeader: function( name, value ) {
					var lname = name.toLowerCase();
					if ( !state ) {
						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
						requestHeaders[ name ] = value;
					}
					return this;
				},

				// Overrides response content-type header
				overrideMimeType: function( type ) {
					if ( !state ) {
						s.mimeType = type;
					}
					return this;
				},

				// Status-dependent callbacks
				statusCode: function( map ) {
					var code;
					if ( map ) {
						if ( state < 2 ) {
							for ( code in map ) {
								// Lazy-add the new callback in a way that preserves old ones
								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
							}
						} else {
							// Execute the appropriate callbacks
							jqXHR.always( map[ jqXHR.status ] );
						}
					}
					return this;
				},

				// Cancel the request
				abort: function( statusText ) {
					var finalText = statusText || strAbort;
					if ( transport ) {
						transport.abort( finalText );
					}
					done( 0, finalText );
					return this;
				}
			};

		// Attach deferreds
		deferred.promise( jqXHR ).complete = completeDeferred.add;
		jqXHR.success = jqXHR.done;
		jqXHR.error = jqXHR.fail;

		// Remove hash character (#7531: and string promotion)
		// Add protocol if not provided (prefilters might expect it)
		// Handle falsy url in the settings object (#10093: consistency with old signature)
		// We also use the url parameter if available
		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );

		// Alias method option to type as per ticket #12004
		s.type = options.method || options.type || s.method || s.type;

		// Extract dataTypes list
		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];

		// A cross-domain request is in order when we have a protocol:host:port mismatch
		if ( s.crossDomain == null ) {
			parts = rurl.exec( s.url.toLowerCase() );
			s.crossDomain = !!( parts &&
				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
			);
		}

		// Convert data if not already a string
		if ( s.data && s.processData && typeof s.data !== "string" ) {
			s.data = jQuery.param( s.data, s.traditional );
		}

		// Apply prefilters
		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );

		// If request was aborted inside a prefilter, stop there
		if ( state === 2 ) {
			return jqXHR;
		}

		// We can fire global events as of now if asked to
		fireGlobals = s.global;

		// Watch for a new set of requests
		if ( fireGlobals && jQuery.active++ === 0 ) {
			jQuery.event.trigger("ajaxStart");
		}

		// Uppercase the type
		s.type = s.type.toUpperCase();

		// Determine if request has content
		s.hasContent = !rnoContent.test( s.type );

		// Save the URL in case we're toying with the If-Modified-Since
		// and/or If-None-Match header later on
		cacheURL = s.url;

		// More options handling for requests with no content
		if ( !s.hasContent ) {

			// If data is available, append data to url
			if ( s.data ) {
				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
				// #9682: remove data so that it's not used in an eventual retry
				delete s.data;
			}

			// Add anti-cache in url if needed
			if ( s.cache === false ) {
				s.url = rts.test( cacheURL ) ?

					// If there is already a '_' parameter, set its value
					cacheURL.replace( rts, "$1_=" + nonce++ ) :

					// Otherwise add one to the end
					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
			}
		}

		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
		if ( s.ifModified ) {
			if ( jQuery.lastModified[ cacheURL ] ) {
				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
			}
			if ( jQuery.etag[ cacheURL ] ) {
				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
			}
		}

		// Set the correct header, if data is being sent
		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
			jqXHR.setRequestHeader( "Content-Type", s.contentType );
		}

		// Set the Accepts header for the server, depending on the dataType
		jqXHR.setRequestHeader(
			"Accept",
			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
				s.accepts[ "*" ]
		);

		// Check for headers option
		for ( i in s.headers ) {
			jqXHR.setRequestHeader( i, s.headers[ i ] );
		}

		// Allow custom headers/mimetypes and early abort
		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
			// Abort if not done already and return
			return jqXHR.abort();
		}

		// aborting is no longer a cancellation
		strAbort = "abort";

		// Install callbacks on deferreds
		for ( i in { success: 1, error: 1, complete: 1 } ) {
			jqXHR[ i ]( s[ i ] );
		}

		// Get transport
		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );

		// If no transport, we auto-abort
		if ( !transport ) {
			done( -1, "No Transport" );
		} else {
			jqXHR.readyState = 1;

			// Send global event
			if ( fireGlobals ) {
				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
			}
			// Timeout
			if ( s.async && s.timeout > 0 ) {
				timeoutTimer = setTimeout(function() {
					jqXHR.abort("timeout");
				}, s.timeout );
			}

			try {
				state = 1;
				transport.send( requestHeaders, done );
			} catch ( e ) {
				// Propagate exception as error if not done
				if ( state < 2 ) {
					done( -1, e );
				// Simply rethrow otherwise
				} else {
					throw e;
				}
			}
		}

		// Callback for when everything is done
		function done( status, nativeStatusText, responses, headers ) {
			var isSuccess, success, error, response, modified,
				statusText = nativeStatusText;

			// Called once
			if ( state === 2 ) {
				return;
			}

			// State is "done" now
			state = 2;

			// Clear timeout if it exists
			if ( timeoutTimer ) {
				clearTimeout( timeoutTimer );
			}

			// Dereference transport for early garbage collection
			// (no matter how long the jqXHR object will be used)
			transport = undefined;

			// Cache response headers
			responseHeadersString = headers || "";

			// Set readyState
			jqXHR.readyState = status > 0 ? 4 : 0;

			// Determine if successful
			isSuccess = status >= 200 && status < 300 || status === 304;

			// Get response data
			if ( responses ) {
				response = ajaxHandleResponses( s, jqXHR, responses );
			}

			// Convert no matter what (that way responseXXX fields are always set)
			response = ajaxConvert( s, response, jqXHR, isSuccess );

			// If successful, handle type chaining
			if ( isSuccess ) {

				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
				if ( s.ifModified ) {
					modified = jqXHR.getResponseHeader("Last-Modified");
					if ( modified ) {
						jQuery.lastModified[ cacheURL ] = modified;
					}
					modified = jqXHR.getResponseHeader("etag");
					if ( modified ) {
						jQuery.etag[ cacheURL ] = modified;
					}
				}

				// if no content
				if ( status === 204 || s.type === "HEAD" ) {
					statusText = "nocontent";

				// if not modified
				} else if ( status === 304 ) {
					statusText = "notmodified";

				// If we have data, let's convert it
				} else {
					statusText = response.state;
					success = response.data;
					error = response.error;
					isSuccess = !error;
				}
			} else {
				// We extract error from statusText
				// then normalize statusText and status for non-aborts
				error = statusText;
				if ( status || !statusText ) {
					statusText = "error";
					if ( status < 0 ) {
						status = 0;
					}
				}
			}

			// Set data for the fake xhr object
			jqXHR.status = status;
			jqXHR.statusText = ( nativeStatusText || statusText ) + "";

			// Success/Error
			if ( isSuccess ) {
				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
			} else {
				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
			}

			// Status-dependent callbacks
			jqXHR.statusCode( statusCode );
			statusCode = undefined;

			if ( fireGlobals ) {
				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
					[ jqXHR, s, isSuccess ? success : error ] );
			}

			// Complete
			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );

			if ( fireGlobals ) {
				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
				// Handle the global AJAX counter
				if ( !( --jQuery.active ) ) {
					jQuery.event.trigger("ajaxStop");
				}
			}
		}

		return jqXHR;
	},

	getJSON: function( url, data, callback ) {
		return jQuery.get( url, data, callback, "json" );
	},

	getScript: function( url, callback ) {
		return jQuery.get( url, undefined, callback, "script" );
	}
});

jQuery.each( [ "get", "post" ], function( i, method ) {
	jQuery[ method ] = function( url, data, callback, type ) {
		// shift arguments if data argument was omitted
		if ( jQuery.isFunction( data ) ) {
			type = type || callback;
			callback = data;
			data = undefined;
		}

		return jQuery.ajax({
			url: url,
			type: method,
			dataType: type,
			data: data,
			success: callback
		});
	};
});

// Attach a bunch of functions for handling common AJAX events
jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
	jQuery.fn[ type ] = function( fn ) {
		return this.on( type, fn );
	};
});


jQuery._evalUrl = function( url ) {
	return jQuery.ajax({
		url: url,
		type: "GET",
		dataType: "script",
		async: false,
		global: false,
		"throws": true
	});
};


jQuery.fn.extend({
	wrapAll: function( html ) {
		var wrap;

		if ( jQuery.isFunction( html ) ) {
			return this.each(function( i ) {
				jQuery( this ).wrapAll( html.call(this, i) );
			});
		}

		if ( this[ 0 ] ) {

			// The elements to wrap the target around
			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );

			if ( this[ 0 ].parentNode ) {
				wrap.insertBefore( this[ 0 ] );
			}

			wrap.map(function() {
				var elem = this;

				while ( elem.firstElementChild ) {
					elem = elem.firstElementChild;
				}

				return elem;
			}).append( this );
		}

		return this;
	},

	wrapInner: function( html ) {
		if ( jQuery.isFunction( html ) ) {
			return this.each(function( i ) {
				jQuery( this ).wrapInner( html.call(this, i) );
			});
		}

		return this.each(function() {
			var self = jQuery( this ),
				contents = self.contents();

			if ( contents.length ) {
				contents.wrapAll( html );

			} else {
				self.append( html );
			}
		});
	},

	wrap: function( html ) {
		var isFunction = jQuery.isFunction( html );

		return this.each(function( i ) {
			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
		});
	},

	unwrap: function() {
		return this.parent().each(function() {
			if ( !jQuery.nodeName( this, "body" ) ) {
				jQuery( this ).replaceWith( this.childNodes );
			}
		}).end();
	}
});


jQuery.expr.filters.hidden = function( elem ) {
	// Support: Opera <= 12.12
	// Opera reports offsetWidths and offsetHeights less than zero on some elements
	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
};
jQuery.expr.filters.visible = function( elem ) {
	return !jQuery.expr.filters.hidden( elem );
};




var r20 = /%20/g,
	rbracket = /\[\]$/,
	rCRLF = /\r?\n/g,
	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
	rsubmittable = /^(?:input|select|textarea|keygen)/i;

function buildParams( prefix, obj, traditional, add ) {
	var name;

	if ( jQuery.isArray( obj ) ) {
		// Serialize array item.
		jQuery.each( obj, function( i, v ) {
			if ( traditional || rbracket.test( prefix ) ) {
				// Treat each array item as a scalar.
				add( prefix, v );

			} else {
				// Item is non-scalar (array or object), encode its numeric index.
				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
			}
		});

	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
		// Serialize object item.
		for ( name in obj ) {
			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
		}

	} else {
		// Serialize scalar item.
		add( prefix, obj );
	}
}

// Serialize an array of form elements or a set of
// key/values into a query string
jQuery.param = function( a, traditional ) {
	var prefix,
		s = [],
		add = function( key, value ) {
			// If value is a function, invoke it and return its value
			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
		};

	// Set traditional to true for jQuery <= 1.3.2 behavior.
	if ( traditional === undefined ) {
		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
	}

	// If an array was passed in, assume that it is an array of form elements.
	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
		// Serialize the form elements
		jQuery.each( a, function() {
			add( this.name, this.value );
		});

	} else {
		// If traditional, encode the "old" way (the way 1.3.2 or older
		// did it), otherwise encode params recursively.
		for ( prefix in a ) {
			buildParams( prefix, a[ prefix ], traditional, add );
		}
	}

	// Return the resulting serialization
	return s.join( "&" ).replace( r20, "+" );
};

jQuery.fn.extend({
	serialize: function() {
		return jQuery.param( this.serializeArray() );
	},
	serializeArray: function() {
		return this.map(function() {
			// Can add propHook for "elements" to filter or add form elements
			var elements = jQuery.prop( this, "elements" );
			return elements ? jQuery.makeArray( elements ) : this;
		})
		.filter(function() {
			var type = this.type;

			// Use .is( ":disabled" ) so that fieldset[disabled] works
			return this.name && !jQuery( this ).is( ":disabled" ) &&
				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
				( this.checked || !rcheckableType.test( type ) );
		})
		.map(function( i, elem ) {
			var val = jQuery( this ).val();

			return val == null ?
				null :
				jQuery.isArray( val ) ?
					jQuery.map( val, function( val ) {
						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
					}) :
					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
		}).get();
	}
});


jQuery.ajaxSettings.xhr = function() {
	try {
		return new XMLHttpRequest();
	} catch( e ) {}
};

var xhrId = 0,
	xhrCallbacks = {},
	xhrSuccessStatus = {
		// file protocol always yields status code 0, assume 200
		0: 200,
		// Support: IE9
		// #1450: sometimes IE returns 1223 when it should be 204
		1223: 204
	},
	xhrSupported = jQuery.ajaxSettings.xhr();

// Support: IE9
// Open requests must be manually aborted on unload (#5280)
if ( window.ActiveXObject ) {
	jQuery( window ).on( "unload", function() {
		for ( var key in xhrCallbacks ) {
			xhrCallbacks[ key ]();
		}
	});
}

support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
support.ajax = xhrSupported = !!xhrSupported;

jQuery.ajaxTransport(function( options ) {
	var callback;

	// Cross domain only allowed if supported through XMLHttpRequest
	if ( support.cors || xhrSupported && !options.crossDomain ) {
		return {
			send: function( headers, complete ) {
				var i,
					xhr = options.xhr(),
					id = ++xhrId;

				xhr.open( options.type, options.url, options.async, options.username, options.password );

				// Apply custom fields if provided
				if ( options.xhrFields ) {
					for ( i in options.xhrFields ) {
						xhr[ i ] = options.xhrFields[ i ];
					}
				}

				// Override mime type if needed
				if ( options.mimeType && xhr.overrideMimeType ) {
					xhr.overrideMimeType( options.mimeType );
				}

				// X-Requested-With header
				// For cross-domain requests, seeing as conditions for a preflight are
				// akin to a jigsaw puzzle, we simply never set it to be sure.
				// (it can always be set on a per-request basis or even using ajaxSetup)
				// For same-domain requests, won't change header if already provided.
				if ( !options.crossDomain && !headers["X-Requested-With"] ) {
					headers["X-Requested-With"] = "XMLHttpRequest";
				}

				// Set headers
				for ( i in headers ) {
					xhr.setRequestHeader( i, headers[ i ] );
				}

				// Callback
				callback = function( type ) {
					return function() {
						if ( callback ) {
							delete xhrCallbacks[ id ];
							callback = xhr.onload = xhr.onerror = null;

							if ( type === "abort" ) {
								xhr.abort();
							} else if ( type === "error" ) {
								complete(
									// file: protocol always yields status 0; see #8605, #14207
									xhr.status,
									xhr.statusText
								);
							} else {
								complete(
									xhrSuccessStatus[ xhr.status ] || xhr.status,
									xhr.statusText,
									// Support: IE9
									// Accessing binary-data responseText throws an exception
									// (#11426)
									typeof xhr.responseText === "string" ? {
										text: xhr.responseText
									} : undefined,
									xhr.getAllResponseHeaders()
								);
							}
						}
					};
				};

				// Listen to events
				xhr.onload = callback();
				xhr.onerror = callback("error");

				// Create the abort callback
				callback = xhrCallbacks[ id ] = callback("abort");

				// Do send the request
				// This may raise an exception which is actually
				// handled in jQuery.ajax (so no try/catch here)
				xhr.send( options.hasContent && options.data || null );
			},

			abort: function() {
				if ( callback ) {
					callback();
				}
			}
		};
	}
});




// Install script dataType
jQuery.ajaxSetup({
	accepts: {
		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
	},
	contents: {
		script: /(?:java|ecma)script/
	},
	converters: {
		"text script": function( text ) {
			jQuery.globalEval( text );
			return text;
		}
	}
});

// Handle cache's special case and crossDomain
jQuery.ajaxPrefilter( "script", function( s ) {
	if ( s.cache === undefined ) {
		s.cache = false;
	}
	if ( s.crossDomain ) {
		s.type = "GET";
	}
});

// Bind script tag hack transport
jQuery.ajaxTransport( "script", function( s ) {
	// This transport only deals with cross domain requests
	if ( s.crossDomain ) {
		var script, callback;
		return {
			send: function( _, complete ) {
				script = jQuery("<script>").prop({
					async: true,
					charset: s.scriptCharset,
					src: s.url
				}).on(
					"load error",
					callback = function( evt ) {
						script.remove();
						callback = null;
						if ( evt ) {
							complete( evt.type === "error" ? 404 : 200, evt.type );
						}
					}
				);
				document.head.appendChild( script[ 0 ] );
			},
			abort: function() {
				if ( callback ) {
					callback();
				}
			}
		};
	}
});




var oldCallbacks = [],
	rjsonp = /(=)\?(?=&|$)|\?\?/;

// Default jsonp settings
jQuery.ajaxSetup({
	jsonp: "callback",
	jsonpCallback: function() {
		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
		this[ callback ] = true;
		return callback;
	}
});

// Detect, normalize options and install callbacks for jsonp requests
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {

	var callbackName, overwritten, responseContainer,
		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
			"url" :
			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
		);

	// Handle iff the expected data type is "jsonp" or we have a parameter to set
	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {

		// Get callback name, remembering preexisting value associated with it
		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
			s.jsonpCallback() :
			s.jsonpCallback;

		// Insert callback into url or form data
		if ( jsonProp ) {
			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
		} else if ( s.jsonp !== false ) {
			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
		}

		// Use data converter to retrieve json after script execution
		s.converters["script json"] = function() {
			if ( !responseContainer ) {
				jQuery.error( callbackName + " was not called" );
			}
			return responseContainer[ 0 ];
		};

		// force json dataType
		s.dataTypes[ 0 ] = "json";

		// Install callback
		overwritten = window[ callbackName ];
		window[ callbackName ] = function() {
			responseContainer = arguments;
		};

		// Clean-up function (fires after converters)
		jqXHR.always(function() {
			// Restore preexisting value
			window[ callbackName ] = overwritten;

			// Save back as free
			if ( s[ callbackName ] ) {
				// make sure that re-using the options doesn't screw things around
				s.jsonpCallback = originalSettings.jsonpCallback;

				// save the callback name for future use
				oldCallbacks.push( callbackName );
			}

			// Call if it was a function and we have a response
			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
				overwritten( responseContainer[ 0 ] );
			}

			responseContainer = overwritten = undefined;
		});

		// Delegate to script
		return "script";
	}
});




// data: string of html
// context (optional): If specified, the fragment will be created in this context, defaults to document
// keepScripts (optional): If true, will include scripts passed in the html string
jQuery.parseHTML = function( data, context, keepScripts ) {
	if ( !data || typeof data !== "string" ) {
		return null;
	}
	if ( typeof context === "boolean" ) {
		keepScripts = context;
		context = false;
	}
	context = context || document;

	var parsed = rsingleTag.exec( data ),
		scripts = !keepScripts && [];

	// Single tag
	if ( parsed ) {
		return [ context.createElement( parsed[1] ) ];
	}

	parsed = jQuery.buildFragment( [ data ], context, scripts );

	if ( scripts && scripts.length ) {
		jQuery( scripts ).remove();
	}

	return jQuery.merge( [], parsed.childNodes );
};


// Keep a copy of the old load method
var _load = jQuery.fn.load;

/**
 * Load a url into a page
 */
jQuery.fn.load = function( url, params, callback ) {
	if ( typeof url !== "string" && _load ) {
		return _load.apply( this, arguments );
	}

	var selector, type, response,
		self = this,
		off = url.indexOf(" ");

	if ( off >= 0 ) {
		selector = url.slice( off );
		url = url.slice( 0, off );
	}

	// If it's a function
	if ( jQuery.isFunction( params ) ) {

		// We assume that it's the callback
		callback = params;
		params = undefined;

	// Otherwise, build a param string
	} else if ( params && typeof params === "object" ) {
		type = "POST";
	}

	// If we have elements to modify, make the request
	if ( self.length > 0 ) {
		jQuery.ajax({
			url: url,

			// if "type" variable is undefined, then "GET" method will be used
			type: type,
			dataType: "html",
			data: params
		}).done(function( responseText ) {

			// Save response for use in complete callback
			response = arguments;

			self.html( selector ?

				// If a selector was specified, locate the right elements in a dummy div
				// Exclude scripts to avoid IE 'Permission Denied' errors
				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :

				// Otherwise use the full result
				responseText );

		}).complete( callback && function( jqXHR, status ) {
			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
		});
	}

	return this;
};




jQuery.expr.filters.animated = function( elem ) {
	return jQuery.grep(jQuery.timers, function( fn ) {
		return elem === fn.elem;
	}).length;
};




var docElem = window.document.documentElement;

/**
 * Gets a window from an element
 */
function getWindow( elem ) {
	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
}

jQuery.offset = {
	setOffset: function( elem, options, i ) {
		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
			position = jQuery.css( elem, "position" ),
			curElem = jQuery( elem ),
			props = {};

		// Set position first, in-case top/left are set even on static elem
		if ( position === "static" ) {
			elem.style.position = "relative";
		}

		curOffset = curElem.offset();
		curCSSTop = jQuery.css( elem, "top" );
		curCSSLeft = jQuery.css( elem, "left" );
		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
			( curCSSTop + curCSSLeft ).indexOf("auto") > -1;

		// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
		if ( calculatePosition ) {
			curPosition = curElem.position();
			curTop = curPosition.top;
			curLeft = curPosition.left;

		} else {
			curTop = parseFloat( curCSSTop ) || 0;
			curLeft = parseFloat( curCSSLeft ) || 0;
		}

		if ( jQuery.isFunction( options ) ) {
			options = options.call( elem, i, curOffset );
		}

		if ( options.top != null ) {
			props.top = ( options.top - curOffset.top ) + curTop;
		}
		if ( options.left != null ) {
			props.left = ( options.left - curOffset.left ) + curLeft;
		}

		if ( "using" in options ) {
			options.using.call( elem, props );

		} else {
			curElem.css( props );
		}
	}
};

jQuery.fn.extend({
	offset: function( options ) {
		if ( arguments.length ) {
			return options === undefined ?
				this :
				this.each(function( i ) {
					jQuery.offset.setOffset( this, options, i );
				});
		}

		var docElem, win,
			elem = this[ 0 ],
			box = { top: 0, left: 0 },
			doc = elem && elem.ownerDocument;

		if ( !doc ) {
			return;
		}

		docElem = doc.documentElement;

		// Make sure it's not a disconnected DOM node
		if ( !jQuery.contains( docElem, elem ) ) {
			return box;
		}

		// If we don't have gBCR, just use 0,0 rather than error
		// BlackBerry 5, iOS 3 (original iPhone)
		if ( typeof elem.getBoundingClientRect !== strundefined ) {
			box = elem.getBoundingClientRect();
		}
		win = getWindow( doc );
		return {
			top: box.top + win.pageYOffset - docElem.clientTop,
			left: box.left + win.pageXOffset - docElem.clientLeft
		};
	},

	position: function() {
		if ( !this[ 0 ] ) {
			return;
		}

		var offsetParent, offset,
			elem = this[ 0 ],
			parentOffset = { top: 0, left: 0 };

		// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
		if ( jQuery.css( elem, "position" ) === "fixed" ) {
			// We assume that getBoundingClientRect is available when computed position is fixed
			offset = elem.getBoundingClientRect();

		} else {
			// Get *real* offsetParent
			offsetParent = this.offsetParent();

			// Get correct offsets
			offset = this.offset();
			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
				parentOffset = offsetParent.offset();
			}

			// Add offsetParent borders
			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
		}

		// Subtract parent offsets and element margins
		return {
			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
		};
	},

	offsetParent: function() {
		return this.map(function() {
			var offsetParent = this.offsetParent || docElem;

			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
				offsetParent = offsetParent.offsetParent;
			}

			return offsetParent || docElem;
		});
	}
});

// Create scrollLeft and scrollTop methods
jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
	var top = "pageYOffset" === prop;

	jQuery.fn[ method ] = function( val ) {
		return access( this, function( elem, method, val ) {
			var win = getWindow( elem );

			if ( val === undefined ) {
				return win ? win[ prop ] : elem[ method ];
			}

			if ( win ) {
				win.scrollTo(
					!top ? val : window.pageXOffset,
					top ? val : window.pageYOffset
				);

			} else {
				elem[ method ] = val;
			}
		}, method, val, arguments.length, null );
	};
});

// Add the top/left cssHooks using jQuery.fn.position
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
// getComputedStyle returns percent when specified for top/left/bottom/right
// rather than make the css module depend on the offset module, we just check for it here
jQuery.each( [ "top", "left" ], function( i, prop ) {
	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
		function( elem, computed ) {
			if ( computed ) {
				computed = curCSS( elem, prop );
				// if curCSS returns percentage, fallback to offset
				return rnumnonpx.test( computed ) ?
					jQuery( elem ).position()[ prop ] + "px" :
					computed;
			}
		}
	);
});


// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
		// margin is only for outerHeight, outerWidth
		jQuery.fn[ funcName ] = function( margin, value ) {
			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );

			return access( this, function( elem, type, value ) {
				var doc;

				if ( jQuery.isWindow( elem ) ) {
					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
					// isn't a whole lot we can do. See pull request at this URL for discussion:
					// https://github.com/jquery/jquery/pull/764
					return elem.document.documentElement[ "client" + name ];
				}

				// Get document width or height
				if ( elem.nodeType === 9 ) {
					doc = elem.documentElement;

					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
					// whichever is greatest
					return Math.max(
						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
						elem.body[ "offset" + name ], doc[ "offset" + name ],
						doc[ "client" + name ]
					);
				}

				return value === undefined ?
					// Get width or height on the element, requesting but not forcing parseFloat
					jQuery.css( elem, type, extra ) :

					// Set width or height on the element
					jQuery.style( elem, type, value, extra );
			}, type, chainable ? margin : undefined, chainable, null );
		};
	});
});


// The number of elements contained in the matched element set
jQuery.fn.size = function() {
	return this.length;
};

jQuery.fn.andSelf = jQuery.fn.addBack;




// Register as a named AMD module, since jQuery can be concatenated with other
// files that may use define, but not via a proper concatenation script that
// understands anonymous AMD modules. A named AMD is safest and most robust
// way to register. Lowercase jquery is used because AMD module names are
// derived from file names, and jQuery is normally delivered in a lowercase
// file name. Do this after creating the global so that if an AMD module wants
// to call noConflict to hide this version of jQuery, it will work.
if ( typeof define === "function" && define.amd ) {
	define( "jquery", [], function() {
		return jQuery;
	});
}




var
	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,

	// Map over the $ in case of overwrite
	_$ = window.$;

jQuery.noConflict = function( deep ) {
	if ( window.$ === jQuery ) {
		window.$ = _$;
	}

	if ( deep && window.jQuery === jQuery ) {
		window.jQuery = _jQuery;
	}

	return jQuery;
};

// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
	window.jQuery = window.$ = jQuery;
}




return jQuery;

}));

Added Site/Site_J/manual.js.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
// *************************************************
//
// MANUAL FIRING PAGE
//
//	 8-Mar-2011	Initial Version
//	16-Apr-2011 Add status display
//	17-Apr-2011 Add STATUS button
//	17-Apr-2011 Fix ARM state [bb3b3f5bb8]
//	17-Apr-2011 Toggle button state [13d5136c97]
//	 8-May-2011 [2fbacd1fdc] Clear status map on entry
//	11-May-2011	Allow network to settle before doing status
//	19-Nov-2011 Add a fix to show armed if any node is armed
//
// *************************************************

var FNET_Status;
var FNET_NET_MAX = 30;		// Maximum net size
var FNET_NET_MIN = 1;
var FNET_NET_CH	= 6;
var FNET_ARMED = false;		// Initial arm state
var FNET_Ready = new Array();
var FNET_ReadyCount = 0;


//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//-----------------------------------------------------------------------
/*
	MANUAL PAGE Major function
	
	DIV = MANUAL_RUN_BLOCK
	
	(1) On entrance replace MANUAL_RUN with
			... Loading ....
			And read status
*/
//-----------------------------------------------------------------------

function MANUAL_Operation()
{
	var path;
	var result;
	var outmsg;
	
	// Clear the area...
	$("#MANUAL_RUN_BLOCK").replaceWith("<div id=\"MANUAL_RUN_BLOCK\"><p><center>...Loading...</center></div>");
	
	// Get the status
	// Clear the map [2fbacd1fdc]
	path = lcnURI + "firenet/status/C";
	result = FNET_getData(path,false,"" ,true);
	
	// Display the status
	result = MANUAL_BuildTblFullStatus( result );
	outmsg = "<div id=\"MANUAL_RUN_BLOCK\"><center>" + result + MANUAL_AddButtons();
	outmsg = outmsg + "</center></div>";
	$("#MANUAL_RUN_BLOCK").replaceWith(outmsg);
	
	// Set up event handler
	
	$('input').click(MANEVENT_Handler);
}
//-----------------------------------------------------------------------
/*
		EVENT HANDLER (for ALL input fields)
*/
//-----------------------------------------------------------------------

function MANEVENT_Handler()
{	
	// Extract the ID
	// MANARM and MANFIRE are handled by special routines
	
	switch( this.id )
	{
		case "MANARM":	MANARM_Handler();
						break;
						
		case "MANFIRE":	MANFIRE_Handler();
						break;
						
		case "MANSTATUS":	MANSTATUS_Handler();
						break;
		
		// Rest of table is handled here
		default:	MANTABLE_Handler( this.id );
					break;
	}
}

//-----------------------------------------------------------------------
/*
		EVENT ARM Button - Send out message to ARM or DISARM all nodes
*/
//-----------------------------------------------------------------------

function MANARM_Handler()
{
	
	var path;
	var result;

	// Depending on FIRE status send an ARM or disarm command
	
	if( FNET_ARMED )
	{
		// Send a DISARM command
		
		path = lcnURI + "firenet/arm/0/D";
		FNET_ARMED=false;
	}
	else
	{
		// Send an ARM command
		
		path = lcnURI + "firenet/arm/0/A";
		FNET_ARMED=true;
	}
	
	// Output a message to show what we are doing
	
	outmsg = "<div id=\"MANUAL_RUN_BLOCK\"><center><h1>Processing...</h1></center></div>";
	$("#MANUAL_RUN_BLOCK").replaceWith(outmsg);
	
	// Send the command then update the status
	// Allow network to settle before doing status
	
	result = FNET_getData(path,true,"" );
	
	setTimeout(MANUAL_Operation,500);
}

//-----------------------------------------------------------------------
/*
		EVENT FIRE Button - Fire all ready channels
*/
//-----------------------------------------------------------------------

function MANFIRE_Handler()
{
	var n;
	var ch;
	var i;
	var node;
	var cmd;
	var result;
	
	// Handle Fire, if not armed or non selected then
	// bail
	
	if( FNET_ARMED && FNET_ReadyCount > 0 )
	{
		// Loop through and fire each of these also
		// set their status to fired
		
		for( i=0; i<FNET_ReadyCount; i++ )
		{
			n = FNET_Ready[i].NODE;
			ch = FNET_Ready[i].CH;
			
			// Build a fire command
			
			cmd = path = lcnURI + "firenet/fire/" + n + "/" + ch;
			result = FNET_getData(path,true,"" ,true);
			
			if( result )
			{
				// Update the status, mark as fired and remove UNFIRED
				
				node = FNET_Status[n];
				
				node.UNFIRED[ch] = "0";
				node.FIRED[ch] = "1";
			}
		}
		
		// Update the display and keep going
		
		MANUAL_UpdateTable();
	}
	
	// Clear all ready nodes
	
	FNET_ReadyCount = 0;
}

//-----------------------------------------------------------------------
/*
		EVENT STATUS Button - Update status display
*/
//-----------------------------------------------------------------------

function MANSTATUS_Handler()
{
	
	// Just update status and table
	
	MANUAL_Operation();
	FNET_ReadyCount = 0;
}


//-----------------------------------------------------------------------
/*
	-- BUTTON EVENT --
	
	MANTABLE_Handler(tblid)	- Handle channel button press
	
	INPUT:	ID of button N##C#
	
	OUTPUT:	NONE
	
		(a) Extract node and channel #
		(b) Add this to the FNET_Ready array
		(c) Determine no other firing in that node
			If so clear and set this node fire 
*/
//-----------------------------------------------------------------------

function MANTABLE_Handler(tblid)
{
	var n;
	var ch;
	var i,j;
	var node;
	var rdy;
	
	// Only run if armed already
	
	if( FNET_ARMED )
	{
		// First extract NODE and CHANNEL
		//	 12 4
		//	 VV V
		//	N##C#
		
		n = parseInt(tblid.slice(1,3),10);
		ch = parseInt(tblid.slice(4,5),10);
		
		// Get the node object
		
		node = FNET_Status[n];
		
		// Clear any other ready values on this node
		
		for( i=1; i<= FNET_NET_CH; i++ )
		{
			if( node.UNFIRED[i] == "2" )
			{
				MANUAL_RemoveReady( n,i );
				node.UNFIRED[i] = "1" 	// & remove ready status
				break;
			}
		}
		
		// If this is the same channel as selected then just exit
		// as user wanted to turn that one off
		// Otherwise add this guy in
		
		if( i != ch )
		{
			// If this node hasn't been fired update it
			
			if( node.FIRED[ch] == "0" )
			{
				// Handle depending on current state
				
				switch(  node.UNFIRED[ch] )
				{
					case "1":	// Unfired and to be made ready
								node.UNFIRED[ch] = "2";
						
								// Add this into the count array of ready items
								
								rdy = new Object();
								rdy.NODE = n;
								rdy.CH = ch;
								
								FNET_Ready[FNET_ReadyCount] = rdy;
								FNET_ReadyCount = FNET_ReadyCount + 1;
								break;
												
					default:	// Just ignore this...
								break;
				}
			}
		}
				
		// Update the table
		
		MANUAL_UpdateTable();
	}
}

//-----------------------------------------------------------------------
/*
	-- SUPPORT FUNCTIONS ---
*/
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
	MANUAL_UpdateTable()
	
	INPUT:	FNET_Status	- Updated
	
	OUTPUT:	NONE
			Table update with new status values
*/
//-----------------------------------------------------------------------

function MANUAL_UpdateTable()
{
	var result;
	
	// Build the new DIV header
	
	result = "<div id=\"MANUAL_RUN_BLOCK\"><center>";
	
	// Add on the table
	
	result = result +  "<table id=\"MANUAL_TABLE\" border=1 align=center>";
	result = result + MANUAL_BuildHeader();
	result = result + MANUAL_BuildFullBody(FNET_Status);
	result = result + "</table>";
	
	// Put on the buttons
	
	result = result + MANUAL_AddButtons();
	
	// Close the DIV
	
	result = result + "</center></div>";
	
	// & update
	
	$("#MANUAL_RUN_BLOCK").replaceWith(result);
	$('input').click(MANEVENT_Handler);
}

//-----------------------------------------------------------------------
//				-- DISPLAY FUNCTIONS --
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
	MANUAL_BuildTblFullStatus( fnetstatus )
	
	INPUT:	fnetstatus	- Firenet whole net status structure
	
	OUTPUT:	Table structure showing network status
*/
//-----------------------------------------------------------------------

function MANUAL_BuildTblFullStatus( fnetstatus )
{
	var rtnval = "** FAILED **";
	var i;
	var indx;
	
	// (1) Check status and return FAIL if bad
	
	if( fnetstatus.STATUS == "SUCCESS" )
	{
		FNET_Status = new Array(FNET_NET_MAX);
		
		for( i=FNET_NET_MIN; i<= FNET_NET_MAX; i++ )
		{
			indx = i + "";
			FNET_Status[i] = fnetstatus[indx]
		}
		
		rtnval =  "<table id=\"MANUAL_TABLE\" border=1 align=center>";
		rtnval = rtnval + MANUAL_BuildHeader();
		rtnval = rtnval + MANUAL_BuildFullBody(FNET_Status);
		rtnval = rtnval + "</table>";
	}
	
	return rtnval;
}
		
//-----------------------------------------------------------------------
/*
	MANUAL_BuildHeader()
	
	INPUT:	NONE
	
	OUTPUT:	Return table header structure
*/
//-----------------------------------------------------------------------

function MANUAL_BuildHeader()
{
	var tablehdr;
	var i;
	
	tablehdr = "<tr align=center>";
	tablehdr = tablehdr + "<th>Node</th>";
	tablehdr = tablehdr + "<th>Arm</th>";
	for( i=FNET_NET_MIN; i<=FNET_NET_CH; i++ )
	{
		tablehdr = tablehdr + "<th>Ch " + i + "</th>";
	}
	tablehdr = tablehdr + "<th>---</th>";
	tablehdr = tablehdr + "<th>Node</th>";
	tablehdr = tablehdr + "<th>Arm</th>";
	for( i=FNET_NET_MIN; i<=FNET_NET_CH; i++ )
	{
		tablehdr = tablehdr + "<th>Ch " + i + "</th>";
	}
	tablehdr = tablehdr + "</tr>";
	
	return tablehdr;
}

//-----------------------------------------------------------------------
/*
	MANUAL_BuildTblFullBody( fnetstatus )
	
	INPUT:	fnetstatus	- Array with node present in the network defined
							Array size = FNET_NET_MAX
	
	OUTPUT:	Table structure showing network status
*/
//-----------------------------------------------------------------------

function MANUAL_BuildFullBody( fnetstatus )
{
	var i;
	var pass = 0;
	var result = "";
	var node;
	var row = "";
	
	// Build the table as two columns of nodes
	
	for( i=FNET_NET_MIN; i<=FNET_NET_MAX; i++ )
	{
		// Get a node
		
		node = FNET_Status[i];
		if( node != null )
		{
			// Build node element of the row
			
			row = MANUAL_BuildNode( i,node );
			
			if( pass == 0 )
			{
				// First part of the row
				result = result + "<tr align=center> " + row;
				pass = pass + 1;
			}
			else
			{
				// End of a row
				pass = 0;	// Start a new row
				result = result + "<td>---</td>" + row;
				result = result + "</tr>\r";
			}
		}
	}
		
	// If we come out here with pass == 1 then we have to 
	// end a row
	
	if( pass == 1 )
	{
		result = result + "</tr>\r";
	}
	
	return result;	
}

//-----------------------------------------------------------------------
/*
	MANUAL_BuildNode( n,node )
	
	INPUT:	n		- Node #
			node	- Data for a single node
					node.ARMED	- A/D
					node
	
	OUTPUT:	Turn node array into an row in an HTML array
			with cell indexes in ARMED of N#
			with cell indexs in CHANNELS of N#C#
			
	Rules:	ARMED	- D		All Channels shown as GREY		Buttons/grey32.png
	
			ARMED	- A		Fired channel  BLACK			Buttons/yblack2.png
							Unfired not present	- GREY		Buttons/grey32.png
							Unfired present		- YELLOW	Buttons/orange32.png
	Return data is just the node data not the <tr></tr> and not 
					the <td>---</td> in the middle
*/
//-----------------------------------------------------------------------

function MANUAL_BuildNode( n,node )
{
	var result = "";
	var armed=false;
	var i;
	var part;
	
	// Do the NODE #
	
	result = "<td>" + n + "</td>";
	
	// Now do the ARMED stuff
	
	result = result + "<td><a><img id=\"NODE" + n + "A\" src=\"";
	if( node.ARMED == "1" )
	{
		armed = true;
		FNET_ARMED = true;
	}
		
	if( armed )
		result = result + "Buttons/red32.png";
	else
		result = result + "Buttons/black32.png";
		
	
	result = result + "\" /></a></td>";
	
	// Do the nodes
	
	for( i=1; i<= FNET_NET_CH; i++ )
	{
		part = "<td><a><input type=\"image\" id=\"N";
		part = part + parseInt(n/10);
		part = part + n%10 + "C" + i + "\" src=\"";
		if( armed == false )
		{
			part = part + "Buttons/grey32.png";
		}
		else
		{
			if( node.FIRED[i] == "1" )
			{
				part = part + "Buttons/black32.png";
			}
			else
			{
				switch( node.UNFIRED[i] )
				{
					case "1":	part = part + "Buttons/orange32.png";	// Ready node
								break;
					
					case "2":	part = part + "Buttons/red32.png";		// Selected node
								break;
								
					default:	part = part + "Buttons/grey32.png";		// Unknown node
								break;
				}
			}		
		}
		
		result = result + part;
		result = result + "\" /></a></td>";
	}
	
	return result;
}

//-----------------------------------------------------------------------
/*
	function MANUAL_AddButtons()
	
	INPUT:	NONE
	
	OUTPUT:	Return ARM & Fire buttons
*/
//-----------------------------------------------------------------------

function MANUAL_AddButtons()
{
	var rtnval;
	
	// Add ARM ,FIRE and STATUS buttons on display
	
	rtnval = "<b><p>";
	
	// Status button
	
	rtnval = rtnval +  "<input id=\"MANSTATUS\"  type=\"image\" src=\"Buttons/status.png\" />";
	
	// ARM button changes depending on state
	
	if( FNET_ARMED )
		rtnval = rtnval + "<input id=\"MANARM\" type=\"image\" src=\"Buttons/disarm.png\" />";
	else
		rtnval = rtnval + "<input id=\"MANARM\" type=\"image\" src=\"Buttons/arm.png\" />";
	
	// Add FIRE button and close
	
	rtnval = rtnval +  "<input id=\"MANFIRE\"  type=\"image\" src=\"Buttons/fire.png\" />";
	rtnval = rtnval + "</p>";
	
	return rtnval;
}

//-----------------------------------------------------------------------
/*
	MANUAL_RemoveReady( n,ch )	- Remove channel from ready list
	
	INPUT:	n	- Node #
			ch	- Channel
			
	OUTPUT:	If this value is in ready list, remove it
*/
//-----------------------------------------------------------------------

function MANUAL_RemoveReady( n,ch )
{
	var i;
	
	// Scan through the list and remove matching element
	
	for( i=0; i<FNET_ReadyCount; i++ )
	{
		if( FNET_Ready[i].NODE == n && FNET_Ready[i].CH == ch )
		{
			FNET_Ready.splice(i,1);	// Remove element
			FNET_ReadyCount = FNET_ReadyCount - 1;
			break;
		}
	}
}

Added Site/Site_J/style.css.















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
	CSS for Firenet
*/

/* ************ CSS CLASSES ********** */

.outline {
			border-width: 2px;
			border-style: solid;
			border-color: black;
		}
		
.nudged {
			position: relative;
			left: 10px;
		}

/* ************ CSS Objects ********** */

#header {
			background-color: #FF0000;
			color: black;
			float:top
			width: 99%;
			height: 5%;
			border: outline;
		}

#mainnav {
			background-color: #FFFFFF;
			color: black;
			font-weight: bold;
			float: left;
			width: 10%;
			height: 400px;
		}


#maincntl {
			background-color: #F0F0F0;
			color: black;
			float: right;
			width: 89%;
			height: 400px;
		}

/*  AUTO RUN BLOCK CONTROLS */

div#AUTO_PLOT_BLOCK {
			background-color: #F0F0F0;
			color: black;
			float: left;
			width: 80px;
			height: 250px;
		}

div#AUTO_TABLE {
			background-color: #F0F0F0;
			color: black;
			float: right;
			width: 680px;
			height: 250px;
		}

div#AUTO_BUTTON_BLOCK {
			background-color: #F0F0F0;
			color: black;
			float: right;
			width: 680px;
			height: 80px;
		}

Added Site/Site_J/support.js.













































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
// *************************************************
//
// Support Functions
//
//	13-Feb-2011	Initial Version
//	14-May-2011 Add inventory page
//	18-Nov-2011 [7f829d5df2] Add Auto operation
//	14-Jan-2012 Add try/catch on XHTTP send
// *************************************************

var SLEEP_HOLD = false;

//-----------------------------------------------------------------------
/*
	FNET_getData( path, postState,data,flag )	- Get data from server via AJAX

	INPUT:	path		- URL location to get data
			postState	- Boolean if true do POST, false do GET
			data		- Data for post (if any)
			flag		- If TRUE return JSON parsed data
					  	If FALSE just return data

	OUTPUT:	Returned data if OK
			null if failure
*/
//-----------------------------------------------------------------------

function FNET_getData( path, postState,data,flag )
{ 
	var client = new XMLHttpRequest();
	var representationOfDesiredState;
	var parse;
	var str;
	var rtnval = false;
	
	// (1) GET/POST ? If Post get extra data
	if( postState )
	{
		client.open("POST",path,false);
		representationOfDesiredState = data;
	}
	else
	{
		client.open("GET", path, false);
		representationOfDesiredState = "";
	}

	// (2) Set up request
	client.setRequestHeader("Content-Type", "text/plain");
	
	// (2a) Handle errors in communication here
	try {
	
		client.send(representationOfDesiredState);
	}
	catch( err )
	{
		// Failure, return NULL
		
		client.status = 400;	// Bad request
	}

	// (3) Show result
	if (client.status == 200)
	{
		str = client.responseText;
		
		// Return JSON parse or TEXT ?
		// Handle parse failure
		
		if( flag  )
		{
			try {
			
				rtnval = JSON.parse(str);
			}
			catch(err)
			{
				rtnval = null;	// Handle failure
			}
		}
		else
			rtnval = str;
	}
	else
	{

		rtnval = null;
	}
	
	return rtnval;
}

// State switches

// *************************************************
function FNET_swToIdle()
{
	// (1) Disappear all the RUN and LOGIN objects
	
	$("#RUN").hide();
	$("#LOGIN").hide();
	$("#DEBUG_RUN").hide();
	$("#MANUAL_RUN" ).hide();
	$("#INV_RUN").hide();
	$("#AUTO_RUN").hide();
	$("#LOGOUT_LINK").hide();
	$("#RUN_DEBUG").hide();
	$("#RUN_MAN").hide();
	$("#RUN_AUTO").hide();
	$("#RUN_INV").hide();
	
	// (2) Make the IDLE objects appear
	
	$("#IDLE").show();
	$("#LOGIN_LINK").show();
}
	
// *************************************************
function FNET_swToRun()
{
	// (1) Disappear all the IDLE and LOGIN objects
	
	$("#IDLE").hide();
	$("#LOGIN").hide();
	$("#LOGIN_LINK").hide();
	
	// (2) Make the RUN stuff appear
	
	$("#RUN").show();
	$("#LOGOUT_LINK").show();
	$("#RUN_DEBUG").show();
	$("#RUN_MAN").show();
	$("#RUN_AUTO").show();
	$("#RUN_INV").show();
}
	
// *************************************************
function FNET_swToLogin()
{
	// (1) Disappear all the IDLE and RUN objects
	
	$("#IDLE").hide();
	$("#RUN" ).hide();
	$("#LOGIN_LINK").hide();
	$("#LOGOUT_LINK").hide();
	$("#RUN_DEBUG").hide();
	$("#RUN_MAN").hide();
	$("#RUN_INV").hide();
	$("#RUN_AUTO").hide();
	$("#DEBUG_RUN").hide();
	$("#MANUAL_RUN" ).hide();
	$("#AUTO_RUN").hide();
	$("#INV_RUN").hide();
	
	// (2) Make the LOGIN stuff appear
	
	$("#LOGIN").show();
}

// *************************************************
function DEBUG_SwToDebug()
{
	// (1) Disappear other run things
	
	$("#RUN" ).hide();
	$("#MANUAL_RUN" ).hide();
	$("#DEBUG_RUN").hide();
	$("#MANUAL_RUN" ).hide();
	$("#AUTO_RUN").hide();
	$("#INV_RUN").hide();
	
	// (2) Make the DEBUG stuff appear
	
	$("#DEBUG_RUN").show();
}

// *************************************************
function RUN_toRunIdle()
{
	// (1) Disappear all the other run objects
	
	$("#DEBUG_RUN").hide();
	$("#DEBUG_RUN" ).hide();
	$("#AUTO_RUN" ).hide();
	$("#INV_RUN").hide();
	
	// (2) Make the run stuff appear
	
	$("#RUN" ).show();
}

// *************************************************
function MANUAL_SwToManual()
{
	// (1) Disappear other run things
	
	$("#RUN" ).hide();
	$("#DEBUG_RUN" ).hide();
	$("#AUTO_RUN" ).hide();
	$("#INV_RUN").hide();
	
	// (2) Make the MANUAL stuff appear
	
	$("#MANUAL_RUN").show();
	
	MANUAL_Operation();
	
}

// *************************************************
function AUTO_SwToAuto()
{
	var path;
	var result;
	
	// (1) Disappear other run things
	
	$("#RUN" ).hide();
	$("#DEBUG_RUN" ).hide();
	$("#MANUAL_RUN" ).hide();
	$("#INV_RUN").hide();
	
	// (2) Make the AUTO stuff appear
	
	$("#AUTO_RUN").show();
	
		// RESET all the nodes
	
	path = lcnURI + "firenet/literal/0/X";
	AUTO_RUN=false;
	result = FNET_getData(path,true,"" );
	
	FNET_SLEEP( 5000 );
	
	AUTO_Operation()
	
}

// *************************************************
function INV_SwToInv()
{
	// (1) Disappear other run things
	
	$("#RUN" ).hide();
	$("#DEBUG_RUN" ).hide();
	$("#MANUAL_RUN" ).hide();
	$("#AUTO_RUN").hide();
	
	
	// (2) Make the INV stuff appear & run it
	
	$("#INV_RUN").show();
	
	INVENTORY_Operation();
	
}

// *********************************************
/*
	FNET_SLEEP( delay )	- Sleep function
	
	INPUT:	delay	- Sleep time in ms
	
	OUTPUT:	NONE
	
	Wait delay ms and return
	
	17-De-2011 Fix to actually work !
			   Make local loop not use
			   selTimeout()
*/
// *********************************************

function FNET_SLEEP( st )
{
	var target;
	var now;
	
	SLEEP_HOLD = false;
	target = FNET_NOWMS() + st;
	while( SLEEP_HOLD == false )
	{
		now = FNET_NOWMS();
		if( now >= target )
			SLEEP_HOLD = true;
	}
}

// *********************************************
/*
	FNET_NOWMS()	- Current time in ms
	
	INPUT:	NONE
	
	OUTPUT:	Reutun time since Jan 1 1970 in ms
	
*/
// *********************************************

function FNET_NOWMS()
{
	var now;

	now = new Date();
	now = Date.UTC(now.getUTCFullYear(),now.getUTCMonth(),now.getUTCDay(),
				now.getUTCHours(),now.getUTCMinutes(),now.getUTCSeconds(),
				now.getUTCMilliseconds());
	return now;
}

Added Site/Site_W/excanvas.min.js.



>
1
if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};

Added Site/Site_W/flot/API.txt.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
Flot Reference
--------------

Consider a call to the plot function:

   var plot = $.plot(placeholder, data, options)

The placeholder is a jQuery object or DOM element or jQuery expression
that the plot will be put into. This placeholder needs to have its
width and height set as explained in the README (go read that now if
you haven't, it's short). The plot will modify some properties of the
placeholder so it's recommended you simply pass in a div that you
don't use for anything else. Make sure you check any fancy styling
you apply to the div, e.g. background images have been reported to be a
problem on IE 7.

The format of the data is documented below, as is the available
options. The "plot" object returned has some methods you can call.
These are documented separately below.

Note that in general Flot gives no guarantees if you change any of the
objects you pass in to the plot function or get out of it since
they're not necessarily deep-copied.


Data Format
-----------

The data is an array of data series:

  [ series1, series2, ... ]

A series can either be raw data or an object with properties. The raw
data format is an array of points:

  [ [x1, y1], [x2, y2], ... ]

E.g.

  [ [1, 3], [2, 14.01], [3.5, 3.14] ]

Note that to simplify the internal logic in Flot both the x and y
values must be numbers (even if specifying time series, see below for
how to do this). This is a common problem because you might retrieve
data from the database and serialize them directly to JSON without
noticing the wrong type. If you're getting mysterious errors, double
check that you're inputting numbers and not strings.

If a null is specified as a point or if one of the coordinates is null
or couldn't be converted to a number, the point is ignored when
drawing. As a special case, a null value for lines is interpreted as a
line segment end, i.e. the points before and after the null value are
not connected.

Lines and points take two coordinates. For bars, you can specify a
third coordinate which is the bottom of the bar (defaults to 0).

The format of a single series object is as follows:

  {
    color: color or number
    data: rawdata
    label: string
    lines: specific lines options
    bars: specific bars options
    points: specific points options
    xaxis: 1 or 2
    yaxis: 1 or 2
    clickable: boolean
    hoverable: boolean
    shadowSize: number
  }

You don't have to specify any of them except the data, the rest are
options that will get default values. Typically you'd only specify
label and data, like this:

  {
    label: "y = 3",
    data: [[0, 3], [10, 3]]
  }

The label is used for the legend, if you don't specify one, the series
will not show up in the legend.

If you don't specify color, the series will get a color from the
auto-generated colors. The color is either a CSS color specification
(like "rgb(255, 100, 123)") or an integer that specifies which of
auto-generated colors to select, e.g. 0 will get color no. 0, etc.

The latter is mostly useful if you let the user add and remove series,
in which case you can hard-code the color index to prevent the colors
from jumping around between the series.

The "xaxis" and "yaxis" options specify which axis to use, specify 2
to get the secondary axis (x axis at top or y axis to the right).
E.g., you can use this to make a dual axis plot by specifying
{ yaxis: 2 } for one data series.

"clickable" and "hoverable" can be set to false to disable
interactivity for specific series if interactivity is turned on in
the plot, see below.

The rest of the options are all documented below as they are the same
as the default options passed in via the options parameter in the plot
commmand. When you specify them for a specific data series, they will
override the default options for the plot for that data series.

Here's a complete example of a simple data specification:

  [ { label: "Foo", data: [ [10, 1], [17, -14], [30, 5] ] },
    { label: "Bar", data: [ [11, 13], [19, 11], [30, -7] ] } ]


Plot Options
------------

All options are completely optional. They are documented individually
below, to change them you just specify them in an object, e.g.

  var options = {
    series: {
      lines: { show: true },
      points: { show: true }
    }
  };

  $.plot(placeholder, data, options);


Customizing the legend
======================

  legend: {
    show: boolean
    labelFormatter: null or (fn: string, series object -> string)
    labelBoxBorderColor: color
    noColumns: number
    position: "ne" or "nw" or "se" or "sw"
    margin: number of pixels or [x margin, y margin]
    backgroundColor: null or color
    backgroundOpacity: number between 0 and 1
    container: null or jQuery object/DOM element/jQuery expression
  }

The legend is generated as a table with the data series labels and
small label boxes with the color of the series. If you want to format
the labels in some way, e.g. make them to links, you can pass in a
function for "labelFormatter". Here's an example that makes them
clickable:

  labelFormatter: function(label, series) {
    // series is the series object for the label
    return '<a href="#' + label + '">' + label + '</a>';
  }

"noColumns" is the number of columns to divide the legend table into.
"position" specifies the overall placement of the legend within the
plot (top-right, top-left, etc.) and margin the distance to the plot
edge (this can be either a number or an array of two numbers like [x,
y]). "backgroundColor" and "backgroundOpacity" specifies the
background. The default is a partly transparent auto-detected
background.

If you want the legend to appear somewhere else in the DOM, you can
specify "container" as a jQuery object/expression to put the legend
table into. The "position" and "margin" etc. options will then be
ignored. Note that Flot will overwrite the contents of the container.


Customizing the axes
====================

  xaxis, yaxis, x2axis, y2axis: {
    mode: null or "time"
    min: null or number
    max: null or number
    autoscaleMargin: null or number
    
    labelWidth: null or number
    labelHeight: null or number

    transform: null or fn: number -> number
    inverseTransform: null or fn: number -> number
    
    ticks: null or number or ticks array or (fn: range -> ticks array)
    tickSize: number or array
    minTickSize: number or array
    tickFormatter: (fn: number, object -> string) or string
    tickDecimals: null or number
  }

All axes have the same kind of options. The "mode" option
determines how the data is interpreted, the default of null means as
decimal numbers. Use "time" for time series data, see the next section.

The options "min"/"max" are the precise minimum/maximum value on the
scale. If you don't specify either of them, a value will automatically
be chosen based on the minimum/maximum data values.

The "autoscaleMargin" is a bit esoteric: it's the fraction of margin
that the scaling algorithm will add to avoid that the outermost points
ends up on the grid border. Note that this margin is only applied
when a min or max value is not explicitly set. If a margin is
specified, the plot will furthermore extend the axis end-point to the
nearest whole tick. The default value is "null" for the x axis and
0.02 for the y axis which seems appropriate for most cases.

"labelWidth" and "labelHeight" specifies a fixed size of the tick
labels in pixels. They're useful in case you need to align several
plots.

"transform" and "inverseTransform" are callbacks you can put in to
change the way the data is drawn. You can design a function to
compress or expand certain parts of the axis non-linearly, e.g.
suppress weekends or compress far away points with a logarithm or some
other means. When Flot draws the plot, each value is first put through
the transform function. Here's an example, the x axis can be turned
into a natural logarithm axis with the following code:

  xaxis: {
    transform: function (v) { return Math.log(v); },
    inverseTransform: function (v) { return Math.exp(v); }
  }

Note that for finding extrema, Flot assumes that the transform
function does not reorder values (monotonicity is assumed).

The inverseTransform is simply the inverse of the transform function
(so v == inverseTransform(transform(v)) for all relevant v). It is
required for converting from canvas coordinates to data coordinates,
e.g. for a mouse interaction where a certain pixel is clicked. If you
don't use any interactive features of Flot, you may not need it.


The rest of the options deal with the ticks.

If you don't specify any ticks, a tick generator algorithm will make
some for you. The algorithm has two passes. It first estimates how
many ticks would be reasonable and uses this number to compute a nice
round tick interval size. Then it generates the ticks.

You can specify how many ticks the algorithm aims for by setting
"ticks" to a number. The algorithm always tries to generate reasonably
round tick values so even if you ask for three ticks, you might get
five if that fits better with the rounding. If you don't want any
ticks at all, set "ticks" to 0 or an empty array.

Another option is to skip the rounding part and directly set the tick
interval size with "tickSize". If you set it to 2, you'll get ticks at
2, 4, 6, etc. Alternatively, you can specify that you just don't want
ticks at a size less than a specific tick size with "minTickSize".
Note that for time series, the format is an array like [2, "month"],
see the next section.

If you want to completely override the tick algorithm, you can specify
an array for "ticks", either like this:

  ticks: [0, 1.2, 2.4]

Or like this where the labels are also customized:

  ticks: [[0, "zero"], [1.2, "one mark"], [2.4, "two marks"]]

You can mix the two if you like.
  
For extra flexibility you can specify a function as the "ticks"
parameter. The function will be called with an object with the axis
min and max and should return a ticks array. Here's a simplistic tick
generator that spits out intervals of pi, suitable for use on the x
axis for trigonometric functions:

  function piTickGenerator(axis) {
    var res = [], i = Math.floor(axis.min / Math.PI);
    do {
      var v = i * Math.PI;
      res.push([v, i + "\u03c0"]);
      ++i;
    } while (v < axis.max);
    
    return res;
  }


You can control how the ticks look like with "tickDecimals", the
number of decimals to display (default is auto-detected).

Alternatively, for ultimate control over how ticks look like you can
provide a function to "tickFormatter". The function is passed two
parameters, the tick value and an "axis" object with information, and
should return a string. The default formatter looks like this:

  function formatter(val, axis) {
    return val.toFixed(axis.tickDecimals);
  }

The axis object has "min" and "max" with the range of the axis,
"tickDecimals" with the number of decimals to round the value to and
"tickSize" with the size of the interval between ticks as calculated
by the automatic axis scaling algorithm (or specified by you). Here's
an example of a custom formatter:

  function suffixFormatter(val, axis) {
    if (val > 1000000)
      return (val / 1000000).toFixed(axis.tickDecimals) + " MB";
    else if (val > 1000)
      return (val / 1000).toFixed(axis.tickDecimals) + " kB";
    else
      return val.toFixed(axis.tickDecimals) + " B";
  }

Time series data
================

Time series are a bit more difficult than scalar data because
calendars don't follow a simple base 10 system. For many cases, Flot
abstracts most of this away, but it can still be a bit difficult to
get the data into Flot. So we'll first discuss the data format.

The time series support in Flot is based on Javascript timestamps,
i.e. everywhere a time value is expected or handed over, a Javascript
timestamp number is used. This is a number, not a Date object. A
Javascript timestamp is the number of milliseconds since January 1,
1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's
in milliseconds, so remember to multiply by 1000!

You can see a timestamp like this

  alert((new Date()).getTime())

Normally you want the timestamps to be displayed according to a
certain time zone, usually the time zone in which the data has been
produced. However, Flot always displays timestamps according to UTC.
It has to as the only alternative with core Javascript is to interpret
the timestamps according to the time zone that the visitor is in,
which means that the ticks will shift unpredictably with the time zone
and daylight savings of each visitor.

So given that there's no good support for custom time zones in
Javascript, you'll have to take care of this server-side.

The easiest way to think about it is to pretend that the data
production time zone is UTC, even if it isn't. So if you have a
datapoint at 2002-02-20 08:00, you can generate a timestamp for eight
o'clock UTC even if it really happened eight o'clock UTC+0200.

In PHP you can get an appropriate timestamp with
'strtotime("2002-02-20 UTC") * 1000', in Python with
'calendar.timegm(datetime_object.timetuple()) * 1000', in .NET with
something like:

  public static int GetJavascriptTimestamp(System.DateTime input)
  {
    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks);
    System.DateTime time = input.Subtract(span);
    return (long)(time.Ticks / 10000);
  }

Javascript also has some support for parsing date strings, so it is
possible to generate the timestamps manually client-side.

If you've already got the real UTC timestamp, it's too late to use the
pretend trick described above. But you can fix up the timestamps by
adding the time zone offset, e.g. for UTC+0200 you would add 2 hours
to the UTC timestamp you got. Then it'll look right on the plot. Most
programming environments have some means of getting the timezone
offset for a specific date (note that you need to get the offset for
each individual timestamp to account for daylight savings).

Once you've gotten the timestamps into the data and specified "time"
as the axis mode, Flot will automatically generate relevant ticks and
format them. As always, you can tweak the ticks via the "ticks" option
- just remember that the values should be timestamps (numbers), not
Date objects.

Tick generation and formatting can also be controlled separately
through the following axis options:

  minTickSize: array
  timeformat: null or format string
  monthNames: null or array of size 12 of strings
  twelveHourClock: boolean

Here "timeformat" is a format string to use. You might use it like
this:

  xaxis: {
    mode: "time"
    timeformat: "%y/%m/%d"
  }
  
This will result in tick labels like "2000/12/24". The following
specifiers are supported

  %h: hours
  %H: hours (left-padded with a zero)
  %M: minutes (left-padded with a zero)
  %S: seconds (left-padded with a zero)
  %d: day of month (1-31)
  %m: month (1-12)
  %y: year (four digits)
  %b: month name (customizable)
  %p: am/pm, additionally switches %h/%H to 12 hour instead of 24
  %P: AM/PM (uppercase version of %p)

You can customize the month names with the "monthNames" option. For
instance, for Danish you might specify:

  monthNames: ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]

If you set "twelveHourClock" to true, the autogenerated timestamps
will use 12 hour AM/PM timestamps instead of 24 hour.
  
The format string and month names are used by a very simple built-in
format function that takes a date object, a format string (and
optionally an array of month names) and returns the formatted string.
If needed, you can access it as $.plot.formatDate(date, formatstring,
monthNames) or even replace it with another more advanced function
from a date library if you're feeling adventurous.

If everything else fails, you can control the formatting by specifying
a custom tick formatter function as usual. Here's a simple example
which will format December 24 as 24/12:

  tickFormatter: function (val, axis) {
    var d = new Date(val);
    return d.getUTCDate() + "/" + (d.getUTCMonth() + 1);
  }

Note that for the time mode "tickSize" and "minTickSize" are a bit
special in that they are arrays on the form "[value, unit]" where unit
is one of "second", "minute", "hour", "day", "month" and "year". So
you can specify

  minTickSize: [1, "month"]

to get a tick interval size of at least 1 month and correspondingly,
if axis.tickSize is [2, "day"] in the tick formatter, the ticks have
been produced with two days in-between.



Customizing the data series
===========================

  series: {
    lines, points, bars: {
      show: boolean
      lineWidth: number
      fill: boolean or number
      fillColor: null or color/gradient
    }

    points: {
      radius: number
    }

    bars: {
      barWidth: number
      align: "left" or "center"
      horizontal: boolean
    }

    lines: {
      steps: boolean
    }

    shadowSize: number
  }
  
  colors: [ color1, color2, ... ]

The options inside "series: {}" are copied to each of the series. So
you can specify that all series should have bars by putting it in the
global options, or override it for individual series by specifying
bars in a particular the series object in the array of data.
  
The most important options are "lines", "points" and "bars" that
specify whether and how lines, points and bars should be shown for
each data series. In case you don't specify anything at all, Flot will
default to showing lines (you can turn this off with
lines: { show: false}). You can specify the various types
independently of each other, and Flot will happily draw each of them
in turn (this is probably only useful for lines and points), e.g.

  var options = {
    series: {
      lines: { show: true, fill: true, fillColor: "rgba(255, 255, 255, 0.8)" },
      points: { show: true, fill: false }
    }
  };

"lineWidth" is the thickness of the line or outline in pixels. You can
set it to 0 to prevent a line or outline from being drawn; this will
also hide the shadow.

"fill" is whether the shape should be filled. For lines, this produces
area graphs. You can use "fillColor" to specify the color of the fill.
If "fillColor" evaluates to false (default for everything except
points which are filled with white), the fill color is auto-set to the
color of the data series. You can adjust the opacity of the fill by
setting fill to a number between 0 (fully transparent) and 1 (fully
opaque).

For bars, fillColor can be a gradient, see the gradient documentation
below. "barWidth" is the width of the bars in units of the x axis (or
the y axis if "horizontal" is true), contrary to most other measures
that are specified in pixels. For instance, for time series the unit
is milliseconds so 24 * 60 * 60 * 1000 produces bars with the width of
a day. "align" specifies whether a bar should be left-aligned
(default) or centered on top of the value it represents. When
"horizontal" is on, the bars are drawn horizontally, i.e. from the y
axis instead of the x axis; note that the bar end points are still
defined in the same way so you'll probably want to swap the
coordinates if you've been plotting vertical bars first.

For lines, "steps" specifies whether two adjacent data points are
connected with a straight (possibly diagonal) line or with first a
horizontal and then a vertical line. Note that this transforms the
data by adding extra points.

"shadowSize" is the default size of shadows in pixels. Set it to 0 to
remove shadows.

The "colors" array specifies a default color theme to get colors for
the data series from. You can specify as many colors as you like, like
this:

  colors: ["#d18b2c", "#dba255", "#919733"]

If there are more data series than colors, Flot will try to generate
extra colors by lightening and darkening colors in the theme.


Customizing the grid
====================

  grid: {
    show: boolean
    aboveData: boolean
    color: color
    backgroundColor: color/gradient or null
    tickColor: color
    labelMargin: number
    markings: array of markings or (fn: axes -> array of markings)
    borderWidth: number
    borderColor: color or null
    clickable: boolean
    hoverable: boolean
    autoHighlight: boolean
    mouseActiveRadius: number
  }

The grid is the thing with the axes and a number of ticks. "color" is
the color of the grid itself whereas "backgroundColor" specifies the
background color inside the grid area. The default value of null means
that the background is transparent. You can also set a gradient, see
the gradient documentation below.

You can turn off the whole grid including tick labels by setting
"show" to false. "aboveData" determines whether the grid is drawn on
above the data or below (below is default).

"tickColor" is the color of the ticks and "labelMargin" is the spacing
between tick labels and the grid. Note that you can style the tick
labels with CSS, e.g. to change the color. They have class "tickLabel".
"borderWidth" is the width of the border around the plot. Set it to 0
to disable the border. You can also set "borderColor" if you want the
border to have a different color than the grid lines.

"markings" is used to draw simple lines and rectangular areas in the
background of the plot. You can either specify an array of ranges on
the form { xaxis: { from, to }, yaxis: { from, to } } (secondary axis
coordinates with x2axis/y2axis) or with a function that returns such
an array given the axes for the plot in an object as the first
parameter.

You can set the color of markings by specifying "color" in the ranges
object. Here's an example array:

  markings: [ { xaxis: { from: 0, to: 2 }, yaxis: { from: 10, to: 10 }, color: "#bb0000" }, ... ]

If you leave out one of the values, that value is assumed to go to the
border of the plot. So for example if you only specify { xaxis: {
from: 0, to: 2 } } it means an area that extends from the top to the
bottom of the plot in the x range 0-2.

A line is drawn if from and to are the same, e.g.

  markings: [ { yaxis: { from: 1, to: 1 } }, ... ]

would draw a line parallel to the x axis at y = 1. You can control the
line width with "lineWidth" in the range object.

An example function might look like this:

  markings: function (axes) {
    var markings = [];
    for (var x = Math.floor(axes.xaxis.min); x < axes.xaxis.max; x += 2)
      markings.push({ xaxis: { from: x, to: x + 1 } });
    return markings;
  }


If you set "clickable" to true, the plot will listen for click events
on the plot area and fire a "plotclick" event on the placeholder with
a position and a nearby data item object as parameters. The coordinates
are available both in the unit of the axes (not in pixels) and in
global screen coordinates.

Likewise, if you set "hoverable" to true, the plot will listen for
mouse move events on the plot area and fire a "plothover" event with
the same parameters as the "plotclick" event. If "autoHighlight" is
true (the default), nearby data items are highlighted automatically.
If needed, you can disable highlighting and control it yourself with
the highlight/unhighlight plot methods described elsewhere.

You can use "plotclick" and "plothover" events like this:

    $.plot($("#placeholder"), [ d ], { grid: { clickable: true } });

    $("#placeholder").bind("plotclick", function (event, pos, item) {
        alert("You clicked at " + pos.x + ", " + pos.y);
        // secondary axis coordinates if present are in pos.x2, pos.y2,
        // if you need global screen coordinates, they are pos.pageX, pos.pageY

        if (item) {
          highlight(item.series, item.datapoint);
          alert("You clicked a point!");
        }
    });

The item object in this example is either null or a nearby object on the form:

  item: {
      datapoint: the point, e.g. [0, 2]
      dataIndex: the index of the point in the data array
      series: the series object
      seriesIndex: the index of the series
      pageX, pageY: the global screen coordinates of the point
  }

For instance, if you have specified the data like this 

    $.plot($("#placeholder"), [ { label: "Foo", data: [[0, 10], [7, 3]] } ], ...);

and the mouse is near the point (7, 3), "datapoint" is [7, 3],
"dataIndex" will be 1, "series" is a normalized series object with
among other things the "Foo" label in series.label and the color in
series.color, and "seriesIndex" is 0. Note that plugins and options
that transform the data can shift the indexes from what you specified
in the original data array.

If you use the above events to update some other information and want
to clear out that info in case the mouse goes away, you'll probably
also need to listen to "mouseout" events on the placeholder div.

"mouseActiveRadius" specifies how far the mouse can be from an item
and still activate it. If there are two or more points within this
radius, Flot chooses the closest item. For bars, the top-most bar
(from the latest specified data series) is chosen.

If you want to disable interactivity for a specific data series, you
can set "hoverable" and "clickable" to false in the options for that
series, like this { data: [...], label: "Foo", clickable: false }.


Specifying gradients
====================

A gradient is specified like this:

  { colors: [ color1, color2, ... ] }

For instance, you might specify a background on the grid going from
black to gray like this:

  grid: {
    backgroundColor: { colors: ["#000", "#999"] }
  }

For the series you can specify the gradient as an object that
specifies the scaling of the brightness and the opacity of the series
color, e.g.

  { colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ] }

where the first color simply has its alpha scaled, whereas the second
is also darkened. For instance, for bars the following makes the bars
gradually disappear, without outline:

  bars: {
      show: true,
      lineWidth: 0,
      fill: true,
      fillColor: { colors: [ { opacity: 0.8 }, { opacity: 0.1 } ] }
  }
  
Flot currently only supports vertical gradients drawn from top to
bottom because that's what works with IE.


Plot Methods
------------

The Plot object returned from the plot function has some methods you
can call:

  - highlight(series, datapoint)

    Highlight a specific datapoint in the data series. You can either
    specify the actual objects, e.g. if you got them from a
    "plotclick" event, or you can specify the indices, e.g.
    highlight(1, 3) to highlight the fourth point in the second series
    (remember, zero-based indexing).

  
  - unhighlight(series, datapoint) or unhighlight()

    Remove the highlighting of the point, same parameters as
    highlight.

    If you call unhighlight with no parameters, e.g. as
    plot.unhighlight(), all current highlights are removed.


  - setData(data)

    You can use this to reset the data used. Note that axis scaling,
    ticks, legend etc. will not be recomputed (use setupGrid() to do
    that). You'll probably want to call draw() afterwards.

    You can use this function to speed up redrawing a small plot if
    you know that the axes won't change. Put in the new data with
    setData(newdata), call draw(), and you're good to go. Note that
    for large datasets, almost all the time is consumed in draw()
    plotting the data so in this case don't bother.

    
  - setupGrid()

    Recalculate and set axis scaling, ticks, legend etc.

    Note that because of the drawing model of the canvas, this
    function will immediately redraw (actually reinsert in the DOM)
    the labels and the legend, but not the actual tick lines because
    they're drawn on the canvas. You need to call draw() to get the
    canvas redrawn.
    
  - draw()

    Redraws the plot canvas.

  - triggerRedrawOverlay()

    Schedules an update of an overlay canvas used for drawing
    interactive things like a selection and point highlights. This
    is mostly useful for writing plugins. The redraw doesn't happen
    immediately, instead a timer is set to catch multiple successive
    redraws (e.g. from a mousemove).

  - width()/height()

    Gets the width and height of the plotting area inside the grid.
    This is smaller than the canvas or placeholder dimensions as some
    extra space is needed (e.g. for labels).

  - offset()

    Returns the offset of the plotting area inside the grid relative
    to the document, useful for instance for calculating mouse
    positions (event.pageX/Y minus this offset is the pixel position
    inside the plot).

  - pointOffset({ x: xpos, y: ypos })

    Returns the calculated offset of the data point at (x, y) in data
    space within the placeholder div. If you are working with dual axes, you
    can specify the x and y axis references, e.g. 

      o = pointOffset({ x: xpos, y: ypos, xaxis: 2, yaxis: 2 })
      // o.left and o.top now contains the offset within the div
  

There are also some members that let you peek inside the internal
workings of Flot which is useful in some cases. Note that if you change
something in the objects returned, you're changing the objects used by
Flot to keep track of its state, so be careful.

  - getData()

    Returns an array of the data series currently used in normalized
    form with missing settings filled in according to the global
    options. So for instance to find out what color Flot has assigned
    to the data series, you could do this:

      var series = plot.getData();
      for (var i = 0; i < series.length; ++i)
        alert(series[i].color);

    A notable other interesting field besides color is datapoints
    which has a field "points" with the normalized data points in a
    flat array (the field "pointsize" is the increment in the flat
    array to get to the next point so for a dataset consisting only of
    (x,y) pairs it would be 2).

  - getAxes()

    Gets an object with the axes settings as { xaxis, yaxis, x2axis,
    y2axis }.

    Various things are stuffed inside an axis object, e.g. you could
    use getAxes().xaxis.ticks to find out what the ticks are for the
    xaxis. Two other useful attributes are p2c and c2p, functions for
    transforming from data point space to the canvas plot space and
    back. Both returns values that are offset with the plot offset.
 
  - getPlaceholder()

    Returns placeholder that the plot was put into. This can be useful
    for plugins for adding DOM elements or firing events.

  - getCanvas()

    Returns the canvas used for drawing in case you need to hack on it
    yourself. You'll probably need to get the plot offset too.
  
  - getPlotOffset()

    Gets the offset that the grid has within the canvas as an object
    with distances from the canvas edges as "left", "right", "top",
    "bottom". I.e., if you draw a circle on the canvas with the center
    placed at (left, top), its center will be at the top-most, left
    corner of the grid.

  - getOptions()

    Gets the options for the plot, in a normalized format with default
    values filled in.
    

Hooks
=====

In addition to the public methods, the Plot object also has some hooks
that can be used to modify the plotting process. You can install a
callback function at various points in the process, the function then
gets access to the internal data structures in Flot.

Here's an overview of the phases Flot goes through:

  1. Plugin initialization, parsing options
  
  2. Constructing the canvases used for drawing

  3. Set data: parsing data specification, calculating colors,
     copying raw data points into internal format,
     normalizing them, finding max/min for axis auto-scaling

  4. Grid setup: calculating axis spacing, ticks, inserting tick
     labels, the legend

  5. Draw: drawing the grid, drawing each of the series in turn

  6. Setting up event handling for interactive features

  7. Responding to events, if any

Each hook is simply a function which is put in the appropriate array.
You can add them through the "hooks" option, and they are also available
after the plot is constructed as the "hooks" attribute on the returned
plot object, e.g.

  // define a simple draw hook
  function hellohook(plot, canvascontext) { alert("hello!"); };

  // pass it in, in an array since we might want to specify several
  var plot = $.plot(placeholder, data, { hooks: { draw: [hellohook] } });

  // we can now find it again in plot.hooks.draw[0] unless a plugin
  // has added other hooks

The available hooks are described below. All hook callbacks get the
plot object as first parameter. You can find some examples of defined
hooks in the plugins bundled with Flot.

 - processOptions  [phase 1]

   function(plot, options)
   
   Called after Flot has parsed and merged options. Useful in the
   instance where customizations beyond simple merging of default
   values is needed. A plugin might use it to detect that it has been
   enabled and then turn on or off other options.

 
 - processRawData  [phase 3]

   function(plot, series, data, datapoints)
 
   Called before Flot copies and normalizes the raw data for the given
   series. If the function fills in datapoints.points with normalized
   points and sets datapoints.pointsize to the size of the points,
   Flot will skip the copying/normalization step for this series.
   
   In any case, you might be interested in setting datapoints.format,
   an array of objects for specifying how a point is normalized and
   how it interferes with axis scaling.

   The default format array for points is something along the lines of:

     [
       { x: true, number: true, required: true },
       { y: true, number: true, required: true }
     ]

   The first object means that for the first coordinate it should be
   taken into account when scaling the x axis, that it must be a
   number, and that it is required - so if it is null or cannot be
   converted to a number, the whole point will be zeroed out with
   nulls. Beyond these you can also specify "defaultValue", a value to
   use if the coordinate is null. This is for instance handy for bars
   where one can omit the third coordinate (the bottom of the bar)
   which then defaults to 0.


 - processDatapoints  [phase 3]

   function(plot, series, datapoints)
 
   Called after normalization of the given series but before finding
   min/max of the data points. This hook is useful for implementing data
   transformations. "datapoints" contains the normalized data points in
   a flat array as datapoints.points with the size of a single point
   given in datapoints.pointsize. Here's a simple transform that
   multiplies all y coordinates by 2:

     function multiply(plot, series, datapoints) {
         var points = datapoints.points, ps = datapoints.pointsize;
         for (var i = 0; i < points.length; i += ps)
             points[i + 1] *= 2;
     }

   Note that you must leave datapoints in a good condition as Flot
   doesn't check it or do any normalization on it afterwards.


 - draw  [phase 5]

   function(plot, canvascontext)
 
   Hook for drawing on the canvas. Called after the grid is drawn
   (unless it's disabled) and the series have been plotted (in case
   any points, lines or bars have been turned on). For examples of how
   to draw things, look at the source code.
   
 
 - bindEvents  [phase 6]

   function(plot, eventHolder)

   Called after Flot has setup its event handlers. Should set any
   necessary event handlers on eventHolder, a jQuery object with the
   canvas, e.g.

     function (plot, eventHolder) {
         eventHolder.mousedown(function (e) {
             alert("You pressed the mouse at " + e.pageX + " " + e.pageY);
         });
     }

   Interesting events include click, mousemove, mouseup/down. You can
   use all jQuery events. Usually, the event handlers will update the
   state by drawing something (add a drawOverlay hook and call
   triggerRedrawOverlay) or firing an externally visible event for
   user code. See the crosshair plugin for an example.
     
   Currently, eventHolder actually contains both the static canvas
   used for the plot itself and the overlay canvas used for
   interactive features because some versions of IE get the stacking
   order wrong. The hook only gets one event, though (either for the
   overlay or for the static canvas).


 - drawOverlay  [phase 7]

   function (plot, canvascontext)

   The drawOverlay hook is used for interactive things that need a
   canvas to draw on. The model currently used by Flot works the way
   that an extra overlay canvas is positioned on top of the static
   canvas. This overlay is cleared and then completely redrawn
   whenever something interesting happens. This hook is called when
   the overlay canvas is to be redrawn.

   "canvascontext" is the 2D context of the overlay canvas. You can
   use this to draw things. You'll most likely need some of the
   metrics computed by Flot, e.g. plot.width()/plot.height(). See the
   crosshair plugin for an example.


   
Plugins
-------

Plugins extend the functionality of Flot. To use a plugin, simply
include its Javascript file after Flot in the HTML page.

If you're worried about download size/latency, you can concatenate all
the plugins you use, and Flot itself for that matter, into one big file
(make sure you get the order right), then optionally run it through a
Javascript minifier such as YUI Compressor.

Here's a brief explanation of how the plugin plumbings work:

Each plugin registers itself in the global array $.plot.plugins. When
you make a new plot object with $.plot, Flot goes through this array
calling the "init" function of each plugin and merging default options
from its "option" attribute. The init function gets a reference to the
plot object created and uses this to register hooks and add new public
methods if needed.

See the PLUGINS.txt file for details on how to write a plugin. As the
above description hints, it's actually pretty easy.

Added Site/Site_W/flot/FAQ.txt.















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Frequently asked questions
--------------------------

Q: How much data can Flot cope with?

A: Flot will happily draw everything you send to it so the answer
depends on the browser. The excanvas emulation used for IE (built with
VML) makes IE by far the slowest browser so be sure to test with that
if IE users are in your target group.

1000 points is not a problem, but as soon as you start having more
points than the pixel width, you should probably start thinking about
downsampling/aggregation as this is near the resolution limit of the
chart anyway. If you downsample server-side, you also save bandwidth.


Q: Flot isn't working when I'm using JSON data as source!

A: Actually, Flot loves JSON data, you just got the format wrong.
Double check that you're not inputting strings instead of numbers,
like [["0", "-2.13"], ["5", "4.3"]]. This is most common mistake, and
the error might not show up immediately because Javascript can do some
conversion automatically.


Q: Can I export the graph?

A: This is a limitation of the canvas technology. There's a hook in
the canvas object for getting an image out, but you won't get the tick
labels. And it's not likely to be supported by IE. At this point, your
best bet is probably taking a screenshot, e.g. with PrtScn.


Q: The bars are all tiny in time mode?

A: It's not really possible to determine the bar width automatically.
So you have to set the width with the barWidth option which is NOT in
pixels, but in the units of the x axis (or the y axis for horizontal
bars). For time mode that's milliseconds so the default value of 1
makes the bars 1 millisecond wide.


Q: Can I use Flot with libraries like Mootools or Prototype?

A: Yes, Flot supports it out of the box and it's easy! Just use jQuery
instead of $, e.g. call jQuery.plot instead of $.plot and use
jQuery(something) instead of $(something). As a convenience, you can
put in a DOM element for the graph placeholder where the examples and
the API documentation are using jQuery objects.

Depending on how you include jQuery, you may have to add one line of
code to prevent jQuery from overwriting functions from the other
libraries, see the documentation in jQuery ("Using jQuery with other
libraries") for details.


Q: Flot doesn't work with [widget framework xyz]!

A: The problem is most likely within the framework, or your use of the
framework.

The only non-standard thing used by Flot is the canvas tag; otherwise
it is simply a series of absolute positioned divs within the
placeholder tag you put in. If this is not working, it's probably
because the framework you're using is doing something weird with the
DOM. As a last resort, you might try replotting and see if it helps.

If you find there's a specific thing we can do to Flot to help, feel
free to submit a bug report. Otherwise, you're welcome to ask for help
on the mailing list, but please don't submit a bug report to Flot -
try the framework instead.

Added Site/Site_W/flot/LICENSE.txt.













































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Copyright (c) 2007-2009 IOLA and Ole Laursen

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

Added Site/Site_W/flot/Makefile.































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Makefile for generating minified files

YUICOMPRESSOR_PATH=../yuicompressor-2.3.5.jar

# if you need another compressor path, just copy the above line to a
# file called Makefile.local, customize it and you're good to go
-include Makefile.local

.PHONY: all

# we cheat and process all .js files instead of listing them
all: $(patsubst %.js,%.min.js,$(filter-out %.min.js,$(wildcard *.js)))

%.min.js: %.js
	java -jar $(YUICOMPRESSOR_PATH) $< -o $@

Added Site/Site_W/flot/NEWS.txt.









































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
Flot 0.6
--------

API changes:

1. Selection support has been moved to a plugin. Thus if you're
passing selection: { mode: something }, you MUST include the file
jquery.flot.selection.js after jquery.flot.js. This reduces the size
of base Flot and makes it easier to customize the selection as well as
improving code clarity. The change is based on patch from andershol.

2. In the global options specified in the $.plot command,
"lines", "points", "bars" and "shadowSize" have been moved to a
sub-object called "series", i.e.

  $.plot(placeholder, data, { lines: { show: true }})

should be changed to

  $.plot(placeholder, data, { series: { lines: { show: true }}})

All future series-specific options will go into this sub-object to
simplify plugin writing. Backward-compatibility code is in place, so
old code should not break.

3. "plothover" no longer provides the original data point, but instead
a normalized one, since there may be no corresponding original point.

4. Due to a bug in previous versions of jQuery, you now need at least
jQuery 1.2.6. But if you can, try jQuery 1.3.2 as it got some
improvements in event handling speed.


Changes:

- Added support for disabling interactivity for specific data series
  (request from Ronald Schouten and Steve Upton).

- Flot now calls $() on the placeholder and optional legend container
  passed in so you can specify DOM elements or CSS expressions to make
  it easier to use Flot with libraries like Prototype or Mootools or
  through raw JSON from Ajax responses.

- A new "plotselecting" event is now emitted while the user is making
  a selection.

- The "plothover" event is now emitted immediately instead of at most
  10 times per second, you'll have to put in a setTimeout yourself if
  you're doing something really expensive on this event.

- The built-in date formatter can now be accessed as
  $.plot.formatDate(...) (suggestion by Matt Manela) and even
  replaced.

- Added "borderColor" option to the grid (patch from Amaury Chamayou
  and patch from Mike R. Williamson).

- Added support for gradient backgrounds for the grid, take a look at
  the "setting options" example (based on patch from Amaury Chamayou,
  issue 90).

- Gradient bars (suggestion by stefpet).
  
- Added a "plotunselected" event which is triggered when the selection
  is removed, see "selection" example (suggestion by Meda Ugo);

- The option legend.margin can now specify horizontal and vertical
  margins independently (suggestion by someone who's annoyed).

- Data passed into Flot is now copied to a new canonical format to
  enable further processing before it hits the drawing routines. As a
  side-effect, this should make Flot more robust in the face of bad
  data (and fixes issue 112).

- Step-wise charting: line charts have a new option "steps" that when
  set to true connects the points with horizontal/vertical steps
  instead of diagonal lines.

- The legend labelFormatter now passes the series in addition to just
  the label (suggestion by Vincent Lemeltier).

- Horizontal bars (based on patch by Jason LeBrun).

- Support for partial bars by specifying a third coordinate, i.e. they
  don't have to start from the axis. This can be used to make stacked
  bars.

- New option to disable the (grid.show).

- Added pointOffset method for converting a point in data space to an
  offset within the placeholder.
  
- Plugin system: register an init method in the $.flot.plugins array
  to get started, see PLUGINS.txt for details on how to write plugins
  (it's easy). There are also some extra methods to enable access to
  internal state.

- Hooks: you can register functions that are called while Flot is
  crunching the data and doing the plot. This can be used to modify
  Flot without changing the source, useful for writing plugins. Some
  hooks are defined, more are likely to come.
  
- Threshold plugin: you can set a threshold and a color, and the data
  points below that threshold will then get the color. Useful for
  marking data below 0, for instance.

- Stack plugin: you can specify a stack key for each series to have
  them summed. This is useful for drawing additive/cumulative graphs
  with bars and (currently unfilled) lines.

- Crosshairs plugin: trace the mouse position on the axes, enable with
  crosshair: { mode: "x"} (see the new tracking example for a use).

- Image plugin: plot prerendered images.

- Navigation plugin for panning and zooming a plot.

- More configurable grid.

- Axis transformation support, useful for non-linear plots, e.g. log
  axes and compressed time axes (like omitting weekends).

- Support for twelve-hour date formatting (patch by Forrest Aldridge).

- The color parsing code in Flot has been cleaned up and split out so
  it's now available as a separate jQuery plugin. It's included inline
  in the Flot source to make dependency managing easier. This also
  makes it really easy to use the color helpers in Flot plugins.

Bug fixes:

- Fixed two corner-case bugs when drawing filled curves (report and
  analysis by Joshua Varner).
- Fix auto-adjustment code when setting min to 0 for an axis where the
  dataset is completely flat on that axis (report by chovy).
- Fixed a bug with passing in data from getData to setData when the
  secondary axes are used (issue 65, reported by nperelman).
- Fixed so that it is possible to turn lines off when no other chart
  type is shown (based on problem reported by Glenn Vanderburg), and
  fixed so that setting lineWidth to 0 also hides the shadow (based on
  problem reported by Sergio Nunes).
- Updated mousemove position expression to the latest from jQuery (bug
  reported by meyuchas).
- Use CSS borders instead of background in legend (fix printing issue 25
  and 45).
- Explicitly convert axis min/max to numbers.
- Fixed a bug with drawing marking lines with different colors
  (reported by Khurram).
- Fixed a bug with returning y2 values in the selection event (fix
  by exists, issue 75).
- Only set position relative on placeholder if it hasn't already a
  position different from static (reported by kyberneticist, issue 95).
- Don't round markings to prevent sub-pixel problems (reported by Dan
  Lipsitt).
- Make the grid border act similarly to a regular CSS border, i.e.
  prevent it from overlapping the plot itself. This also fixes a
  problem with anti-aliasing when the width is 1 pixel (reported by
  Anthony Ettinger).
- Imported version 3 of excanvas and fixed two issues with the newer
  version. Hopefully, this will make Flot work with IE8 (nudge by
  Fabien Menager, further analysis by Booink, issue 133).
- Changed the shadow code for lines to hopefully look a bit better
  with vertical lines.
- Round tick positions to avoid possible problems with fractions
  (suggestion by Fred, issue 130).
- Made the heuristic for determining how many ticks to aim for a bit
  smarter.
- Fix for uneven axis margins (report and patch by Paul Kienzle) and
  snapping to ticks (concurrent report and patch by lifthrasiir).
- Fixed bug with slicing in findNearbyItems (patch by zollman).
- Make heuristic for x axis label widths more dynamic (patch by
  rickinhethuis).
- Make sure points on top take precedence when finding nearby points
  when hovering (reported by didroe, issue 224).

Flot 0.5
--------

Backwards API change summary: Timestamps are now in UTC. Also
"selected" event -> becomes "plotselected" with new data, the
parameters for setSelection are now different (but backwards
compatibility hooks are in place), coloredAreas becomes markings with
a new interface (but backwards compatibility hooks are in place).


Interactivity: added a new "plothover" event and this and the
"plotclick" event now returns the closest data item (based on patch by
/david, patch by Mark Byers for bar support). See the revamped
"interacting with the data" example for some hints on what you can do.

Highlighting: you can now highlight points and datapoints are
autohighlighted when you hover over them (if hovering is turned on).

Support for dual axis has been added (based on patch by someone who's
annoyed and /david). For each data series you can specify which axes
it belongs to, and there are two more axes, x2axis and y2axis, to
customize. This affects the "selected" event which has been renamed to
"plotselected" and spews out { xaxis: { from: -10, to: 20 } ... },
setSelection in which the parameters are on a new form (backwards
compatible hooks are in place so old code shouldn't break) and
markings (formerly coloredAreas).

Timestamps in time mode are now displayed according to
UTC instead of the time zone of the visitor. This affects the way the
timestamps should be input; you'll probably have to offset the
timestamps according to your local time zone. It also affects any
custom date handling code (which basically now should use the
equivalent UTC date mehods, e.g. .setUTCMonth() instead of
.setMonth().

Added support for specifying the size of tick labels (axis.labelWidth,
axis.labelHeight). Useful for specifying a max label size to keep
multiple plots aligned.

Markings, previously coloredAreas, are now specified as ranges on the
axes, like { xaxis: { from: 0, to: 10 }}. Furthermore with markings
you can now draw horizontal/vertical lines by setting from and to to
the same coordinate (idea from line support patch by by Ryan Funduk).

The "fill" option can now be a number that specifies the opacity of
the fill.

You can now specify a coordinate as null (like [2, null]) and Flot
will take the other coordinate into account when scaling the axes
(based on patch by joebno).

New option for bars "align". Set it to "center" to center the bars on
the value they represent.

setSelection now takes a second parameter which you can use to prevent
the method from firing the "plotselected" handler. 

Using the "container" option in legend now overwrites the container
element instead of just appending to it (fixes infinite legend bug,
reported by several people, fix by Brad Dewey).

Fixed a bug in calculating spacing around the plot (reported by
timothytoe). Fixed a bug in finding max values for all-negative data
sets. Prevent the possibility of eternal looping in tick calculations.
Fixed a bug when borderWidth is set to 0 (reported by
Rob/sanchothefat). Fixed a bug with drawing bars extending below 0
(reported by James Hewitt, patch by Ryan Funduk). Fixed a
bug with line widths of bars (reported by MikeM). Fixed a bug with
'nw' and 'sw' legend positions. Improved the handling of axis
auto-scaling with bars. Fixed a bug with multi-line x-axis tick
labels (reported by Luca Ciano). IE-fix help by Savage Zhang.


Flot 0.4
--------

API changes: deprecated axis.noTicks in favor of just specifying the
number as axis.ticks. So "xaxis: { noTicks: 10 }" becomes
"xaxis: { ticks: 10 }"

Time series support. Specify axis.mode: "time", put in Javascript
timestamps as data, and Flot will automatically spit out sensible
ticks. Take a look at the two new examples. The format can be
customized with axis.timeformat and axis.monthNames, or if that fails
with axis.tickFormatter.

Support for colored background areas via grid.coloredAreas. Specify an
array of { x1, y1, x2, y2 } objects or a function that returns these
given { xmin, xmax, ymin, ymax }.

More members on the plot object (report by Chris Davies and others).
"getData" for inspecting the assigned settings on data series (e.g.
color) and "setData", "setupGrid" and "draw" for updating the contents
without a total replot.

The default number of ticks to aim for is now dependent on the size of
the plot in pixels. Support for customizing tick interval sizes
directly with axis.minTickSize and axis.tickSize.

Cleaned up the automatic axis scaling algorithm and fixed how it
interacts with ticks. Also fixed a couple of tick-related corner case
bugs (one reported by mainstreetmark, another reported by timothytoe).

The option axis.tickFormatter now takes a function with two
parameters, the second parameter is an optional object with
information about the axis. It has min, max, tickDecimals, tickSize.

Added support for segmented lines (based on patch from Michael
MacDonald) and for ignoring null and bad values (suggestion from Nick
Konidaris and joshwaihi). 

Added support for changing the border width (joebno and safoo).
Label colors can be changed via CSS by selecting the tickLabel class.

Fixed a bug in handling single-item bar series (reported by Emil
Filipov). Fixed erratic behaviour when interacting with the plot
with IE 7 (reported by Lau Bech Lauritzen). Prevent IE/Safari text
selection when selecting stuff on the canvas.



Flot 0.3
--------

This is mostly a quick-fix release because jquery.js wasn't included
in the previous zip/tarball.

Support clicking on the plot. Turn it on with grid: { clickable: true },
then you get a "plotclick" event on the graph placeholder with the
position in units of the plot.

Fixed a bug in dealing with data where min = max, thanks to Michael
Messinides.

Include jquery.js in the zip/tarball.


Flot 0.2
--------

Added support for putting a background behind the default legend. The
default is the partly transparent background color. Added
backgroundColor and backgroundOpacity to the legend options to control
this.

The ticks options can now be a callback function that takes one
parameter, an object with the attributes min and max. The function
should return a ticks array.

Added labelFormatter option in legend, useful for turning the legend
labels into links.

Fixed a couple of bugs.

The API should now be fully documented.

Patch from Guy Fraser to make parts of the code smaller.

API changes: Moved labelMargin option to grid from x/yaxis.


Flot 0.1
--------

First public release.

Added Site/Site_W/flot/PLUGINS.txt.



















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Writing plugins
---------------

To make a new plugin, create an init function and a set of options (if
needed), stuff it into an object and put it in the $.plot.plugins
array. For example:

  function myCoolPluginInit(plot) { plot.coolstring = "Hello!" };
  var myCoolOptions = { coolstuff: { show: true } }
  $.plot.plugins.push({ init: myCoolPluginInit, options: myCoolOptions });

  // now when $.plot is called, the returned object will have the
  // attribute "coolstring"

Now, given that the plugin might run in many different places, it's
a good idea to avoid leaking names. We can avoid this by wrapping the
above lines in an anonymous function which we call immediately, like
this: (function () { inner code ... })(). To make it even more robust
in case $ is not bound to jQuery but some other Javascript library, we
can write it as

  (function ($) {
    // plugin definition
    // ...
  })(jQuery);

Here is a simple debug plugin which alerts each of the series in the
plot. It has a single option that control whether it is enabled and
how much info to output:

  (function ($) {
    function init(plot) {
      var debugLevel = 1;
    
      function checkDebugEnabled(plot, options) {
        if (options.debug) {
          debugLevel = options.debug;
            
          plot.hooks.processDatapoints.push(alertSeries);
        }
      }

      function alertSeries(plot, series, datapoints) {
        var msg = "series " + series.label;
        if (debugLevel > 1)
          msg += " with " + series.data.length + " points";
        alert(msg);
      }
    
      plot.hooks.processOptions.push(checkDebugEnabled);
    }

    var options = { debug: 0 };
    
    $.plot.plugins.push({
        init: init,
        options: options,
        name: "simpledebug",
        version: "0.1"
    });
  })(jQuery);

We also define "name" and "version". It's not used by Flot, but might
be helpful for other plugins in resolving dependencies.
  
Put the above in a file named "jquery.flot.debug.js", include it in an
HTML page and then it can be used with:

  $.plot($("#placeholder"), [...], { debug: 2 });

This simple plugin illustrates a couple of points:

 - It uses the anonymous function trick to avoid name pollution.
 - It can be enabled/disabled through an option.
 - Variables in the init function can be used to store plot-specific
   state between the hooks.

 
Options guidelines
==================
   
Plugins should always support appropriate options to enable/disable
them because the plugin user may have several plots on the same page
where only one should use the plugin.

If the plugin needs series-specific options, you can put them in
"series" in the options object, e.g.

  var options = {
    series: {
      downsample: {
        algorithm: null,
        maxpoints: 1000
      }
    }
  }

Then they will be copied by Flot into each series, providing the
defaults in case the plugin user doesn't specify any. Again, in most
cases it's probably a good idea if the plugin is turned off rather
than on per default, just like most of the powerful features in Flot.

Think hard and long about naming the options. These names are going to
be public API, and code is going to depend on them if the plugin is
successful.

Added Site/Site_W/flot/README.txt.



































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
About
-----

Flot is a Javascript plotting library for jQuery. Read more at the
website:

  http://code.google.com/p/flot/

Take a look at the examples linked from above, they should give a good
impression of what Flot can do and the source code of the examples is
probably the fastest way to learn how to use Flot.
  

Installation
------------

Just include the Javascript file after you've included jQuery.

Note that you need to get a version of Excanvas (e.g. the one bundled
with Flot) which is canvas emulation on Internet Explorer. You can
include the excanvas script like this:

  <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.pack.js"></script><![endif]-->

If it's not working on your development IE 6.0, check that it has
support for VML which excanvas is relying on. It appears that some
stripped down versions used for test environments on virtual machines
lack the VML support.
  
Also note that you need at least jQuery 1.2.6 (but at least jQuery
1.3.2 is recommended for interactive charts because of performance
improvements in event handling).


Basic usage
-----------

Create a placeholder div to put the graph in:

   <div id="placeholder"></div>

You need to set the width and height of this div, otherwise the plot
library doesn't know how to scale the graph. You can do it inline like
this:

   <div id="placeholder" style="width:600px;height:300px"></div>

You can also do it with an external stylesheet. Make sure that the
placeholder isn't within something with a display:none CSS property -
in that case, Flot has trouble measuring label dimensions which
results in garbled looks and might have trouble measuring the
placeholder dimensions which is fatal (it'll throw an exception).

Then when the div is ready in the DOM, which is usually on document
ready, run the plot function:

  $.plot($("#placeholder"), data, options);

Here, data is an array of data series and options is an object with
settings if you want to customize the plot. Take a look at the
examples for some ideas of what to put in or look at the reference
in the file "API.txt". Here's a quick example that'll draw a line from
(0, 0) to (1, 1):

  $.plot($("#placeholder"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } });

The plot function immediately draws the chart and then returns a plot
object with a couple of methods.


What's with the name?
---------------------

First: it's pronounced with a short o, like "plot". Not like "flawed".

So "Flot" rhymes with "plot".

And if you look up "flot" in a Danish-to-English dictionary, some up
the words that come up are "good-looking", "attractive", "stylish",
"smart", "impressive", "extravagant". One of the main goals with Flot
is pretty looks.

Added Site/Site_W/flot/examples/ajax.html.































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Example of loading data dynamically with AJAX. Percentage change in GDP (source: <a href="http://epp.eurostat.ec.europa.eu/tgm/table.do?tab=table&init=1&plugin=1&language=en&pcode=tsieb020">Eurostat</a>). Click the buttons below.</p>

    <p>The data is fetched over HTTP, in this case directly from text
    files. Usually the URL would point to some web server handler
    (e.g. a PHP page or Java/.NET/Python/Ruby on Rails handler) that
    extracts it from a database and serializes it to JSON.</p>

    <p>
      <input class="fetchSeries" type="button" value="First dataset"> -
      <a href="data-eu-gdp-growth.json">data</a> -
      <span></span>
    </p>

    <p>
      <input class="fetchSeries" type="button" value="Second dataset"> -
      <a href="data-japan-gdp-growth.json">data</a> -
      <span></span>
    </p>

    <p>
      <input class="fetchSeries" type="button" value="Third dataset"> -
      <a href="data-usa-gdp-growth.json">data</a> -
      <span></span>
    </p>

    <p>If you combine AJAX with setTimeout, you can poll the server
       for new data.</p>

    <p>
      <input class="dataUpdate" type="button" value="Poll for data">
    </p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var options = {
        lines: { show: true },
        points: { show: true },
        xaxis: { tickDecimals: 0, tickSize: 1 }
    };
    var data = [];
    var placeholder = $("#placeholder");
    
    $.plot(placeholder, data, options);

    
    // fetch one series, adding to what we got
    var alreadyFetched = {};
    
    $("input.fetchSeries").click(function () {
        var button = $(this);
        
        // find the URL in the link right next to us 
        var dataurl = button.siblings('a').attr('href');

        // then fetch the data with jQuery
        function onDataReceived(series) {
            // extract the first coordinate pair so you can see that
            // data is now an ordinary Javascript object
            var firstcoordinate = '(' + series.data[0][0] + ', ' + series.data[0][1] + ')';

            button.siblings('span').text('Fetched ' + series.label + ', first point: ' + firstcoordinate);

            // let's add it to our current data
            if (!alreadyFetched[series.label]) {
                alreadyFetched[series.label] = true;
                data.push(series);
            }
            
            // and plot all we got
            $.plot(placeholder, data, options);
         }
        
        $.ajax({
            url: dataurl,
            method: 'GET',
            dataType: 'json',
            success: onDataReceived
        });
    });


    // initiate a recurring data update
    $("input.dataUpdate").click(function () {
        // reset data
        data = [];
        alreadyFetched = {};
        
        $.plot(placeholder, data, options);

        var iteration = 0;
        
        function fetchData() {
            ++iteration;

            function onDataReceived(series) {
                // we get all the data in one go, if we only got partial
                // data, we could merge it with what we already got
                data = [ series ];
                
                $.plot($("#placeholder"), data, options);
            }
        
            $.ajax({
                // usually, we'll just call the same URL, a script
                // connected to a database, but in this case we only
                // have static example files so we need to modify the
                // URL
                url: "data-eu-gdp-growth-" + iteration + ".json",
                method: 'GET',
                dataType: 'json',
                success: onDataReceived
            });
            
            if (iteration < 5)
                setTimeout(fetchData, 1000);
            else {
                data = [];
                alreadyFetched = {};
            }
        }

        setTimeout(fetchData, 1000);
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/annotating.html.























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Flot has support for simple background decorations such as
    lines and rectangles. They can be useful for marking up certain
    areas. You can easily add any HTML you need with standard DOM
    manipulation, e.g. for labels. For drawing custom shapes there is
    also direct access to the canvas.</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    // generate a dataset
    var d1 = [];
    for (var i = 0; i < 20; ++i)
        d1.push([i, Math.sin(i)]);
    
    var data = [{ data: d1, label: "Pressure", color: "#333" }];

    // setup background areas
    var markings = [
        { color: '#f6f6f6', yaxis: { from: 1 } },
        { color: '#f6f6f6', yaxis: { to: -1 } },
        { color: '#000', lineWidth: 1, xaxis: { from: 2, to: 2 } },
        { color: '#000', lineWidth: 1, xaxis: { from: 8, to: 8 } }
    ];
    
    var placeholder = $("#placeholder");
    
    // plot it
    var plot = $.plot(placeholder, data, {
        bars: { show: true, barWidth: 0.5, fill: 0.9 },
        xaxis: { ticks: [], autoscaleMargin: 0.02 },
        yaxis: { min: -2, max: 2 },
        grid: { markings: markings }
    });

    // add labels
    var o;

    o = plot.pointOffset({ x: 2, y: -1.2});
    // we just append it to the placeholder which Flot already uses
    // for positioning
    placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">Warming up</div>');

    o = plot.pointOffset({ x: 8, y: -1.2});
    placeholder.append('<div style="position:absolute;left:' + (o.left + 4) + 'px;top:' + o.top + 'px;color:#666;font-size:smaller">Actual measurements</div>');

    // draw a little arrow on top of the last label to demonstrate
    // canvas drawing
    var ctx = plot.getCanvas().getContext("2d");
    ctx.beginPath();
    o.left += 4;
    ctx.moveTo(o.left, o.top);
    ctx.lineTo(o.left, o.top - 10);
    ctx.lineTo(o.left + 10, o.top - 5);
    ctx.lineTo(o.left, o.top);
    ctx.fillStyle = "#000";
    ctx.fill();
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/arrow-down.gif.

cannot compute difference between binary files

Added Site/Site_W/flot/examples/arrow-left.gif.

cannot compute difference between binary files

Added Site/Site_W/flot/examples/arrow-right.gif.

cannot compute difference between binary files

Added Site/Site_W/flot/examples/arrow-up.gif.

cannot compute difference between binary files

Added Site/Site_W/flot/examples/basic.html.













































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Simple example. You don't need to specify much to get an
       attractive look. Put in a placeholder, make sure you set its
       dimensions (otherwise the plot library will barf) and call the
       plot function with the data. The axes are automatically
       scaled.</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var d1 = [];
    for (var i = 0; i < 14; i += 0.5)
        d1.push([i, Math.sin(i)]);

    var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];

    // a null signifies separate line segments
    var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];
    
    $.plot($("#placeholder"), [ d1, d2, d3 ]);
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/data-eu-gdp-growth-1.json.









>
>
>
>
1
2
3
4
{
    label: 'Europe (EU27)',
    data: [[1999, 3.0], [2000, 3.9]]
}

Added Site/Site_W/flot/examples/data-eu-gdp-growth-2.json.









>
>
>
>
1
2
3
4
{
    label: 'Europe (EU27)',
    data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2]]
}

Added Site/Site_W/flot/examples/data-eu-gdp-growth-3.json.









>
>
>
>
1
2
3
4
{
    label: 'Europe (EU27)',
    data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5]]
}

Added Site/Site_W/flot/examples/data-eu-gdp-growth-4.json.









>
>
>
>
1
2
3
4
{
    label: 'Europe (EU27)',
    data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]]
}

Added Site/Site_W/flot/examples/data-eu-gdp-growth-5.json.









>
>
>
>
1
2
3
4
{
    label: 'Europe (EU27)',
    data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]]
}

Added Site/Site_W/flot/examples/data-eu-gdp-growth.json.









>
>
>
>
1
2
3
4
{
    label: 'Europe (EU27)',
    data: [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]]
}

Added Site/Site_W/flot/examples/data-japan-gdp-growth.json.









>
>
>
>
1
2
3
4
{
    label: 'Japan',
    data: [[1999, -0.1], [2000, 2.9], [2001, 0.2], [2002, 0.3], [2003, 1.4], [2004, 2.7], [2005, 1.9], [2006, 2.0], [2007, 2.3], [2008, -0.7]]
}

Added Site/Site_W/flot/examples/data-usa-gdp-growth.json.









>
>
>
>
1
2
3
4
{
    label: 'USA',
    data: [[1999, 4.4], [2000, 3.7], [2001, 0.8], [2002, 1.6], [2003, 2.5], [2004, 3.6], [2005, 2.9], [2006, 2.8], [2007, 2.0], [2008, 1.1]]
}

Added Site/Site_W/flot/examples/dual-axis.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Dual axis support showing the raw oil price in US $/barrel of
    crude oil (left axis) vs. the exchange rate from US $ to € (right
    axis).</p>

    <p>As illustrated, you can put in secondary y and x axes if you
    need to. For each data series, simply specify the axis number.</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var oilprices = [[1167692400000,61.05], [1167778800000,58.32], [1167865200000,57.35], [1167951600000,56.31], [1168210800000,55.55], [1168297200000,55.64], [1168383600000,54.02], [1168470000000,51.88], [1168556400000,52.99], [1168815600000,52.99], [1168902000000,51.21], [1168988400000,52.24], [1169074800000,50.48], [1169161200000,51.99], [1169420400000,51.13], [1169506800000,55.04], [1169593200000,55.37], [1169679600000,54.23], [1169766000000,55.42], [1170025200000,54.01], [1170111600000,56.97], [1170198000000,58.14], [1170284400000,58.14], [1170370800000,59.02], [1170630000000,58.74], [1170716400000,58.88], [1170802800000,57.71], [1170889200000,59.71], [1170975600000,59.89], [1171234800000,57.81], [1171321200000,59.06], [1171407600000,58.00], [1171494000000,57.99], [1171580400000,59.39], [1171839600000,59.39], [1171926000000,58.07], [1172012400000,60.07], [1172098800000,61.14], [1172444400000,61.39], [1172530800000,61.46], [1172617200000,61.79], [1172703600000,62.00], [1172790000000,60.07], [1173135600000,60.69], [1173222000000,61.82], [1173308400000,60.05], [1173654000000,58.91], [1173740400000,57.93], [1173826800000,58.16], [1173913200000,57.55], [1173999600000,57.11], [1174258800000,56.59], [1174345200000,59.61], [1174518000000,61.69], [1174604400000,62.28], [1174860000000,62.91], [1174946400000,62.93], [1175032800000,64.03], [1175119200000,66.03], [1175205600000,65.87], [1175464800000,64.64], [1175637600000,64.38], [1175724000000,64.28], [1175810400000,64.28], [1176069600000,61.51], [1176156000000,61.89], [1176242400000,62.01], [1176328800000,63.85], [1176415200000,63.63], [1176674400000,63.61], [1176760800000,63.10], [1176847200000,63.13], [1176933600000,61.83], [1177020000000,63.38], [1177279200000,64.58], [1177452000000,65.84], [1177538400000,65.06], [1177624800000,66.46], [1177884000000,64.40], [1178056800000,63.68], [1178143200000,63.19], [1178229600000,61.93], [1178488800000,61.47], [1178575200000,61.55], [1178748000000,61.81], [1178834400000,62.37], [1179093600000,62.46], [1179180000000,63.17], [1179266400000,62.55], [1179352800000,64.94], [1179698400000,66.27], [1179784800000,65.50], [1179871200000,65.77], [1179957600000,64.18], [1180044000000,65.20], [1180389600000,63.15], [1180476000000,63.49], [1180562400000,65.08], [1180908000000,66.30], [1180994400000,65.96], [1181167200000,66.93], [1181253600000,65.98], [1181599200000,65.35], [1181685600000,66.26], [1181858400000,68.00], [1182117600000,69.09], [1182204000000,69.10], [1182290400000,68.19], [1182376800000,68.19], [1182463200000,69.14], [1182722400000,68.19], [1182808800000,67.77], [1182895200000,68.97], [1182981600000,69.57], [1183068000000,70.68], [1183327200000,71.09], [1183413600000,70.92], [1183586400000,71.81], [1183672800000,72.81], [1183932000000,72.19], [1184018400000,72.56], [1184191200000,72.50], [1184277600000,74.15], [1184623200000,75.05], [1184796000000,75.92], [1184882400000,75.57], [1185141600000,74.89], [1185228000000,73.56], [1185314400000,75.57], [1185400800000,74.95], [1185487200000,76.83], [1185832800000,78.21], [1185919200000,76.53], [1186005600000,76.86], [1186092000000,76.00], [1186437600000,71.59], [1186696800000,71.47], [1186956000000,71.62], [1187042400000,71.00], [1187301600000,71.98], [1187560800000,71.12], [1187647200000,69.47], [1187733600000,69.26], [1187820000000,69.83], [1187906400000,71.09], [1188165600000,71.73], [1188338400000,73.36], [1188511200000,74.04], [1188856800000,76.30], [1189116000000,77.49], [1189461600000,78.23], [1189548000000,79.91], [1189634400000,80.09], [1189720800000,79.10], [1189980000000,80.57], [1190066400000,81.93], [1190239200000,83.32], [1190325600000,81.62], [1190584800000,80.95], [1190671200000,79.53], [1190757600000,80.30], [1190844000000,82.88], [1190930400000,81.66], [1191189600000,80.24], [1191276000000,80.05], [1191362400000,79.94], [1191448800000,81.44], [1191535200000,81.22], [1191794400000,79.02], [1191880800000,80.26], [1191967200000,80.30], [1192053600000,83.08], [1192140000000,83.69], [1192399200000,86.13], [1192485600000,87.61], [1192572000000,87.40], [1192658400000,89.47], [1192744800000,88.60], [1193004000000,87.56], [1193090400000,87.56], [1193176800000,87.10], [1193263200000,91.86], [1193612400000,93.53], [1193698800000,94.53], [1193871600000,95.93], [1194217200000,93.98], [1194303600000,96.37], [1194476400000,95.46], [1194562800000,96.32], [1195081200000,93.43], [1195167600000,95.10], [1195426800000,94.64], [1195513200000,95.10], [1196031600000,97.70], [1196118000000,94.42], [1196204400000,90.62], [1196290800000,91.01], [1196377200000,88.71], [1196636400000,88.32], [1196809200000,90.23], [1196982000000,88.28], [1197241200000,87.86], [1197327600000,90.02], [1197414000000,92.25], [1197586800000,90.63], [1197846000000,90.63], [1197932400000,90.49], [1198018800000,91.24], [1198105200000,91.06], [1198191600000,90.49], [1198710000000,96.62], [1198796400000,96.00], [1199142000000,99.62], [1199314800000,99.18], [1199401200000,95.09], [1199660400000,96.33], [1199833200000,95.67], [1200351600000,91.90], [1200438000000,90.84], [1200524400000,90.13], [1200610800000,90.57], [1200956400000,89.21], [1201042800000,86.99], [1201129200000,89.85], [1201474800000,90.99], [1201561200000,91.64], [1201647600000,92.33], [1201734000000,91.75], [1202079600000,90.02], [1202166000000,88.41], [1202252400000,87.14], [1202338800000,88.11], [1202425200000,91.77], [1202770800000,92.78], [1202857200000,93.27], [1202943600000,95.46], [1203030000000,95.46], [1203289200000,101.74], [1203462000000,98.81], [1203894000000,100.88], [1204066800000,99.64], [1204153200000,102.59], [1204239600000,101.84], [1204498800000,99.52], [1204585200000,99.52], [1204671600000,104.52], [1204758000000,105.47], [1204844400000,105.15], [1205103600000,108.75], [1205276400000,109.92], [1205362800000,110.33], [1205449200000,110.21], [1205708400000,105.68], [1205967600000,101.84], [1206313200000,100.86], [1206399600000,101.22], [1206486000000,105.90], [1206572400000,107.58], [1206658800000,105.62], [1206914400000,101.58], [1207000800000,100.98], [1207173600000,103.83], [1207260000000,106.23], [1207605600000,108.50], [1207778400000,110.11], [1207864800000,110.14], [1208210400000,113.79], [1208296800000,114.93], [1208383200000,114.86], [1208728800000,117.48], [1208815200000,118.30], [1208988000000,116.06], [1209074400000,118.52], [1209333600000,118.75], [1209420000000,113.46], [1209592800000,112.52], [1210024800000,121.84], [1210111200000,123.53], [1210197600000,123.69], [1210543200000,124.23], [1210629600000,125.80], [1210716000000,126.29], [1211148000000,127.05], [1211320800000,129.07], [1211493600000,132.19], [1211839200000,128.85], [1212357600000,127.76], [1212703200000,138.54], [1212962400000,136.80], [1213135200000,136.38], [1213308000000,134.86], [1213653600000,134.01], [1213740000000,136.68], [1213912800000,135.65], [1214172000000,134.62], [1214258400000,134.62], [1214344800000,134.62], [1214431200000,139.64], [1214517600000,140.21], [1214776800000,140.00], [1214863200000,140.97], [1214949600000,143.57], [1215036000000,145.29], [1215381600000,141.37], [1215468000000,136.04], [1215727200000,146.40], [1215986400000,145.18], [1216072800000,138.74], [1216159200000,134.60], [1216245600000,129.29], [1216332000000,130.65], [1216677600000,127.95], [1216850400000,127.95], [1217282400000,122.19], [1217455200000,124.08], [1217541600000,125.10], [1217800800000,121.41], [1217887200000,119.17], [1217973600000,118.58], [1218060000000,120.02], [1218405600000,114.45], [1218492000000,113.01], [1218578400000,116.00], [1218751200000,113.77], [1219010400000,112.87], [1219096800000,114.53], [1219269600000,114.98], [1219356000000,114.98], [1219701600000,116.27], [1219788000000,118.15], [1219874400000,115.59], [1219960800000,115.46], [1220306400000,109.71], [1220392800000,109.35], [1220565600000,106.23], [1220824800000,106.34]];
    var exchangerates = [[1167606000000,0.7580], [1167692400000,0.7580], [1167778800000,0.75470], [1167865200000,0.75490], [1167951600000,0.76130], [1168038000000,0.76550], [1168124400000,0.76930], [1168210800000,0.76940], [1168297200000,0.76880], [1168383600000,0.76780], [1168470000000,0.77080], [1168556400000,0.77270], [1168642800000,0.77490], [1168729200000,0.77410], [1168815600000,0.77410], [1168902000000,0.77320], [1168988400000,0.77270], [1169074800000,0.77370], [1169161200000,0.77240], [1169247600000,0.77120], [1169334000000,0.7720], [1169420400000,0.77210], [1169506800000,0.77170], [1169593200000,0.77040], [1169679600000,0.7690], [1169766000000,0.77110], [1169852400000,0.7740], [1169938800000,0.77450], [1170025200000,0.77450], [1170111600000,0.7740], [1170198000000,0.77160], [1170284400000,0.77130], [1170370800000,0.76780], [1170457200000,0.76880], [1170543600000,0.77180], [1170630000000,0.77180], [1170716400000,0.77280], [1170802800000,0.77290], [1170889200000,0.76980], [1170975600000,0.76850], [1171062000000,0.76810], [1171148400000,0.7690], [1171234800000,0.7690], [1171321200000,0.76980], [1171407600000,0.76990], [1171494000000,0.76510], [1171580400000,0.76130], [1171666800000,0.76160], [1171753200000,0.76140], [1171839600000,0.76140], [1171926000000,0.76070], [1172012400000,0.76020], [1172098800000,0.76110], [1172185200000,0.76220], [1172271600000,0.76150], [1172358000000,0.75980], [1172444400000,0.75980], [1172530800000,0.75920], [1172617200000,0.75730], [1172703600000,0.75660], [1172790000000,0.75670], [1172876400000,0.75910], [1172962800000,0.75820], [1173049200000,0.75850], [1173135600000,0.76130], [1173222000000,0.76310], [1173308400000,0.76150], [1173394800000,0.760], [1173481200000,0.76130], [1173567600000,0.76270], [1173654000000,0.76270], [1173740400000,0.76080], [1173826800000,0.75830], [1173913200000,0.75750], [1173999600000,0.75620], [1174086000000,0.7520], [1174172400000,0.75120], [1174258800000,0.75120], [1174345200000,0.75170], [1174431600000,0.7520], [1174518000000,0.75110], [1174604400000,0.7480], [1174690800000,0.75090], [1174777200000,0.75310], [1174860000000,0.75310], [1174946400000,0.75270], [1175032800000,0.74980], [1175119200000,0.74930], [1175205600000,0.75040], [1175292000000,0.750], [1175378400000,0.74910], [1175464800000,0.74910], [1175551200000,0.74850], [1175637600000,0.74840], [1175724000000,0.74920], [1175810400000,0.74710], [1175896800000,0.74590], [1175983200000,0.74770], [1176069600000,0.74770], [1176156000000,0.74830], [1176242400000,0.74580], [1176328800000,0.74480], [1176415200000,0.7430], [1176501600000,0.73990], [1176588000000,0.73950], [1176674400000,0.73950], [1176760800000,0.73780], [1176847200000,0.73820], [1176933600000,0.73620], [1177020000000,0.73550], [1177106400000,0.73480], [1177192800000,0.73610], [1177279200000,0.73610], [1177365600000,0.73650], [1177452000000,0.73620], [1177538400000,0.73310], [1177624800000,0.73390], [1177711200000,0.73440], [1177797600000,0.73270], [1177884000000,0.73270], [1177970400000,0.73360], [1178056800000,0.73330], [1178143200000,0.73590], [1178229600000,0.73590], [1178316000000,0.73720], [1178402400000,0.7360], [1178488800000,0.7360], [1178575200000,0.7350], [1178661600000,0.73650], [1178748000000,0.73840], [1178834400000,0.73950], [1178920800000,0.74130], [1179007200000,0.73970], [1179093600000,0.73960], [1179180000000,0.73850], [1179266400000,0.73780], [1179352800000,0.73660], [1179439200000,0.740], [1179525600000,0.74110], [1179612000000,0.74060], [1179698400000,0.74050], [1179784800000,0.74140], [1179871200000,0.74310], [1179957600000,0.74310], [1180044000000,0.74380], [1180130400000,0.74430], [1180216800000,0.74430], [1180303200000,0.74430], [1180389600000,0.74340], [1180476000000,0.74290], [1180562400000,0.74420], [1180648800000,0.7440], [1180735200000,0.74390], [1180821600000,0.74370], [1180908000000,0.74370], [1180994400000,0.74290], [1181080800000,0.74030], [1181167200000,0.73990], [1181253600000,0.74180], [1181340000000,0.74680], [1181426400000,0.7480], [1181512800000,0.7480], [1181599200000,0.7490], [1181685600000,0.74940], [1181772000000,0.75220], [1181858400000,0.75150], [1181944800000,0.75020], [1182031200000,0.74720], [1182117600000,0.74720], [1182204000000,0.74620], [1182290400000,0.74550], [1182376800000,0.74490], [1182463200000,0.74670], [1182549600000,0.74580], [1182636000000,0.74270], [1182722400000,0.74270], [1182808800000,0.7430], [1182895200000,0.74290], [1182981600000,0.7440], [1183068000000,0.7430], [1183154400000,0.74220], [1183240800000,0.73880], [1183327200000,0.73880], [1183413600000,0.73690], [1183500000000,0.73450], [1183586400000,0.73450], [1183672800000,0.73450], [1183759200000,0.73520], [1183845600000,0.73410], [1183932000000,0.73410], [1184018400000,0.7340], [1184104800000,0.73240], [1184191200000,0.72720], [1184277600000,0.72640], [1184364000000,0.72550], [1184450400000,0.72580], [1184536800000,0.72580], [1184623200000,0.72560], [1184709600000,0.72570], [1184796000000,0.72470], [1184882400000,0.72430], [1184968800000,0.72440], [1185055200000,0.72350], [1185141600000,0.72350], [1185228000000,0.72350], [1185314400000,0.72350], [1185400800000,0.72620], [1185487200000,0.72880], [1185573600000,0.73010], [1185660000000,0.73370], [1185746400000,0.73370], [1185832800000,0.73240], [1185919200000,0.72970], [1186005600000,0.73170], [1186092000000,0.73150], [1186178400000,0.72880], [1186264800000,0.72630], [1186351200000,0.72630], [1186437600000,0.72420], [1186524000000,0.72530], [1186610400000,0.72640], [1186696800000,0.7270], [1186783200000,0.73120], [1186869600000,0.73050], [1186956000000,0.73050], [1187042400000,0.73180], [1187128800000,0.73580], [1187215200000,0.74090], [1187301600000,0.74540], [1187388000000,0.74370], [1187474400000,0.74240], [1187560800000,0.74240], [1187647200000,0.74150], [1187733600000,0.74190], [1187820000000,0.74140], [1187906400000,0.73770], [1187992800000,0.73550], [1188079200000,0.73150], [1188165600000,0.73150], [1188252000000,0.7320], [1188338400000,0.73320], [1188424800000,0.73460], [1188511200000,0.73280], [1188597600000,0.73230], [1188684000000,0.7340], [1188770400000,0.7340], [1188856800000,0.73360], [1188943200000,0.73510], [1189029600000,0.73460], [1189116000000,0.73210], [1189202400000,0.72940], [1189288800000,0.72660], [1189375200000,0.72660], [1189461600000,0.72540], [1189548000000,0.72420], [1189634400000,0.72130], [1189720800000,0.71970], [1189807200000,0.72090], [1189893600000,0.7210], [1189980000000,0.7210], [1190066400000,0.7210], [1190152800000,0.72090], [1190239200000,0.71590], [1190325600000,0.71330], [1190412000000,0.71050], [1190498400000,0.70990], [1190584800000,0.70990], [1190671200000,0.70930], [1190757600000,0.70930], [1190844000000,0.70760], [1190930400000,0.7070], [1191016800000,0.70490], [1191103200000,0.70120], [1191189600000,0.70110], [1191276000000,0.70190], [1191362400000,0.70460], [1191448800000,0.70630], [1191535200000,0.70890], [1191621600000,0.70770], [1191708000000,0.70770], [1191794400000,0.70770], [1191880800000,0.70910], [1191967200000,0.71180], [1192053600000,0.70790], [1192140000000,0.70530], [1192226400000,0.7050], [1192312800000,0.70550], [1192399200000,0.70550], [1192485600000,0.70450], [1192572000000,0.70510], [1192658400000,0.70510], [1192744800000,0.70170], [1192831200000,0.70], [1192917600000,0.69950], [1193004000000,0.69940], [1193090400000,0.70140], [1193176800000,0.70360], [1193263200000,0.70210], [1193349600000,0.70020], [1193436000000,0.69670], [1193522400000,0.6950], [1193612400000,0.6950], [1193698800000,0.69390], [1193785200000,0.6940], [1193871600000,0.69220], [1193958000000,0.69190], [1194044400000,0.69140], [1194130800000,0.68940], [1194217200000,0.68910], [1194303600000,0.69040], [1194390000000,0.6890], [1194476400000,0.68340], [1194562800000,0.68230], [1194649200000,0.68070], [1194735600000,0.68150], [1194822000000,0.68150], [1194908400000,0.68470], [1194994800000,0.68590], [1195081200000,0.68220], [1195167600000,0.68270], [1195254000000,0.68370], [1195340400000,0.68230], [1195426800000,0.68220], [1195513200000,0.68220], [1195599600000,0.67920], [1195686000000,0.67460], [1195772400000,0.67350], [1195858800000,0.67310], [1195945200000,0.67420], [1196031600000,0.67440], [1196118000000,0.67390], [1196204400000,0.67310], [1196290800000,0.67610], [1196377200000,0.67610], [1196463600000,0.67850], [1196550000000,0.68180], [1196636400000,0.68360], [1196722800000,0.68230], [1196809200000,0.68050], [1196895600000,0.67930], [1196982000000,0.68490], [1197068400000,0.68330], [1197154800000,0.68250], [1197241200000,0.68250], [1197327600000,0.68160], [1197414000000,0.67990], [1197500400000,0.68130], [1197586800000,0.68090], [1197673200000,0.68680], [1197759600000,0.69330], [1197846000000,0.69330], [1197932400000,0.69450], [1198018800000,0.69440], [1198105200000,0.69460], [1198191600000,0.69640], [1198278000000,0.69650], [1198364400000,0.69560], [1198450800000,0.69560], [1198537200000,0.6950], [1198623600000,0.69480], [1198710000000,0.69280], [1198796400000,0.68870], [1198882800000,0.68240], [1198969200000,0.67940], [1199055600000,0.67940], [1199142000000,0.68030], [1199228400000,0.68550], [1199314800000,0.68240], [1199401200000,0.67910], [1199487600000,0.67830], [1199574000000,0.67850], [1199660400000,0.67850], [1199746800000,0.67970], [1199833200000,0.680], [1199919600000,0.68030], [1200006000000,0.68050], [1200092400000,0.6760], [1200178800000,0.6770], [1200265200000,0.6770], [1200351600000,0.67360], [1200438000000,0.67260], [1200524400000,0.67640], [1200610800000,0.68210], [1200697200000,0.68310], [1200783600000,0.68420], [1200870000000,0.68420], [1200956400000,0.68870], [1201042800000,0.69030], [1201129200000,0.68480], [1201215600000,0.68240], [1201302000000,0.67880], [1201388400000,0.68140], [1201474800000,0.68140], [1201561200000,0.67970], [1201647600000,0.67690], [1201734000000,0.67650], [1201820400000,0.67330], [1201906800000,0.67290], [1201993200000,0.67580], [1202079600000,0.67580], [1202166000000,0.6750], [1202252400000,0.6780], [1202338800000,0.68330], [1202425200000,0.68560], [1202511600000,0.69030], [1202598000000,0.68960], [1202684400000,0.68960], [1202770800000,0.68820], [1202857200000,0.68790], [1202943600000,0.68620], [1203030000000,0.68520], [1203116400000,0.68230], [1203202800000,0.68130], [1203289200000,0.68130], [1203375600000,0.68220], [1203462000000,0.68020], [1203548400000,0.68020], [1203634800000,0.67840], [1203721200000,0.67480], [1203807600000,0.67470], [1203894000000,0.67470], [1203980400000,0.67480], [1204066800000,0.67330], [1204153200000,0.6650], [1204239600000,0.66110], [1204326000000,0.65830], [1204412400000,0.6590], [1204498800000,0.6590], [1204585200000,0.65810], [1204671600000,0.65780], [1204758000000,0.65740], [1204844400000,0.65320], [1204930800000,0.65020], [1205017200000,0.65140], [1205103600000,0.65140], [1205190000000,0.65070], [1205276400000,0.6510], [1205362800000,0.64890], [1205449200000,0.64240], [1205535600000,0.64060], [1205622000000,0.63820], [1205708400000,0.63820], [1205794800000,0.63410], [1205881200000,0.63440], [1205967600000,0.63780], [1206054000000,0.64390], [1206140400000,0.64780], [1206226800000,0.64810], [1206313200000,0.64810], [1206399600000,0.64940], [1206486000000,0.64380], [1206572400000,0.63770], [1206658800000,0.63290], [1206745200000,0.63360], [1206831600000,0.63330], [1206914400000,0.63330], [1207000800000,0.6330], [1207087200000,0.63710], [1207173600000,0.64030], [1207260000000,0.63960], [1207346400000,0.63640], [1207432800000,0.63560], [1207519200000,0.63560], [1207605600000,0.63680], [1207692000000,0.63570], [1207778400000,0.63540], [1207864800000,0.6320], [1207951200000,0.63320], [1208037600000,0.63280], [1208124000000,0.63310], [1208210400000,0.63420], [1208296800000,0.63210], [1208383200000,0.63020], [1208469600000,0.62780], [1208556000000,0.63080], [1208642400000,0.63240], [1208728800000,0.63240], [1208815200000,0.63070], [1208901600000,0.62770], [1208988000000,0.62690], [1209074400000,0.63350], [1209160800000,0.63920], [1209247200000,0.640], [1209333600000,0.64010], [1209420000000,0.63960], [1209506400000,0.64070], [1209592800000,0.64230], [1209679200000,0.64290], [1209765600000,0.64720], [1209852000000,0.64850], [1209938400000,0.64860], [1210024800000,0.64670], [1210111200000,0.64440], [1210197600000,0.64670], [1210284000000,0.65090], [1210370400000,0.64780], [1210456800000,0.64610], [1210543200000,0.64610], [1210629600000,0.64680], [1210716000000,0.64490], [1210802400000,0.6470], [1210888800000,0.64610], [1210975200000,0.64520], [1211061600000,0.64220], [1211148000000,0.64220], [1211234400000,0.64250], [1211320800000,0.64140], [1211407200000,0.63660], [1211493600000,0.63460], [1211580000000,0.6350], [1211666400000,0.63460], [1211752800000,0.63460], [1211839200000,0.63430], [1211925600000,0.63460], [1212012000000,0.63790], [1212098400000,0.64160], [1212184800000,0.64420], [1212271200000,0.64310], [1212357600000,0.64310], [1212444000000,0.64350], [1212530400000,0.6440], [1212616800000,0.64730], [1212703200000,0.64690], [1212789600000,0.63860], [1212876000000,0.63560], [1212962400000,0.6340], [1213048800000,0.63460], [1213135200000,0.6430], [1213221600000,0.64520], [1213308000000,0.64670], [1213394400000,0.65060], [1213480800000,0.65040], [1213567200000,0.65030], [1213653600000,0.64810], [1213740000000,0.64510], [1213826400000,0.6450], [1213912800000,0.64410], [1213999200000,0.64140], [1214085600000,0.64090], [1214172000000,0.64090], [1214258400000,0.64280], [1214344800000,0.64310], [1214431200000,0.64180], [1214517600000,0.63710], [1214604000000,0.63490], [1214690400000,0.63330], [1214776800000,0.63340], [1214863200000,0.63380], [1214949600000,0.63420], [1215036000000,0.6320], [1215122400000,0.63180], [1215208800000,0.6370], [1215295200000,0.63680], [1215381600000,0.63680], [1215468000000,0.63830], [1215554400000,0.63710], [1215640800000,0.63710], [1215727200000,0.63550], [1215813600000,0.6320], [1215900000000,0.62770], [1215986400000,0.62760], [1216072800000,0.62910], [1216159200000,0.62740], [1216245600000,0.62930], [1216332000000,0.63110], [1216418400000,0.6310], [1216504800000,0.63120], [1216591200000,0.63120], [1216677600000,0.63040], [1216764000000,0.62940], [1216850400000,0.63480], [1216936800000,0.63780], [1217023200000,0.63680], [1217109600000,0.63680], [1217196000000,0.63680], [1217282400000,0.6360], [1217368800000,0.6370], [1217455200000,0.64180], [1217541600000,0.64110], [1217628000000,0.64350], [1217714400000,0.64270], [1217800800000,0.64270], [1217887200000,0.64190], [1217973600000,0.64460], [1218060000000,0.64680], [1218146400000,0.64870], [1218232800000,0.65940], [1218319200000,0.66660], [1218405600000,0.66660], [1218492000000,0.66780], [1218578400000,0.67120], [1218664800000,0.67050], [1218751200000,0.67180], [1218837600000,0.67840], [1218924000000,0.68110], [1219010400000,0.68110], [1219096800000,0.67940], [1219183200000,0.68040], [1219269600000,0.67810], [1219356000000,0.67560], [1219442400000,0.67350], [1219528800000,0.67630], [1219615200000,0.67620], [1219701600000,0.67770], [1219788000000,0.68150], [1219874400000,0.68020], [1219960800000,0.6780], [1220047200000,0.67960], [1220133600000,0.68170], [1220220000000,0.68170], [1220306400000,0.68320], [1220392800000,0.68770], [1220479200000,0.69120], [1220565600000,0.69140], [1220652000000,0.70090], [1220738400000,0.70120], [1220824800000,0.7010], [1220911200000,0.70050]];

    $.plot($("#placeholder"),
           [ { data: oilprices, label: "Oil price ($)" },
             { data: exchangerates, label: "USD/EUR exchange rate", yaxis: 2 }],
           { 
             xaxis: { mode: 'time' },
             yaxis: { min: 0 },
             y2axis: { tickFormatter: function (v, axis) { return v.toFixed(axis.tickDecimals) +"€" }},
             legend: { position: 'sw' } });
});
</script>
 </body>
</html>

Added Site/Site_W/flot/examples/graph-types.html.























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px"></div>

    <p>Flot supports lines, points, filled areas, bars and any
    combinations of these, in the same plot and even on the same data
    series.</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var d1 = [];
    for (var i = 0; i < 14; i += 0.5)
        d1.push([i, Math.sin(i)]);

    var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];

    var d3 = [];
    for (var i = 0; i < 14; i += 0.5)
        d3.push([i, Math.cos(i)]);

    var d4 = [];
    for (var i = 0; i < 14; i += 0.1)
        d4.push([i, Math.sqrt(i * 10)]);
    
    var d5 = [];
    for (var i = 0; i < 14; i += 0.5)
        d5.push([i, Math.sqrt(i)]);

    var d6 = [];
    for (var i = 0; i < 14; i += 0.5 + Math.random())
        d6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]);
                        
    $.plot($("#placeholder"), [
        {
            data: d1,
            lines: { show: true, fill: true }
        },
        {
            data: d2,
            bars: { show: true }
        },
        {
            data: d3,
            points: { show: true }
        },
        {
            data: d4,
            lines: { show: true }
        },
        {
            data: d5,
            lines: { show: true },
            points: { show: true }
        },
        {
            data: d6,
            lines: { show: true, steps: true }
        }
    ]);
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/hs-2004-27-a-large_web.jpg.

cannot compute difference between binary files

Added Site/Site_W/flot/examples/image.html.



























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.image.js"></script>
 </head>
 <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:400px;height:400px;"></div>

    <p>The Cat's Eye Nebula (<a href="http://hubblesite.org/gallery/album/nebula/pr2004027a/">picture from Hubble</a>).</p>
    
    <p>With the image plugin, you can plot images. This is for example
    useful for getting ticks on complex prerendered visualizations.
    Instead of inputting data points, you put in the images and where
    their two opposite corners are supposed to be in plot space.</p>

    <p>Images represent a little further complication because you need
    to make sure they are loaded before you can use them (Flot skips
    incomplete images). The plugin comes with a couple of helpers
    for doing that.</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var data = [ [ ["hs-2004-27-a-large_web.jpg", -10, -10, 10, 10] ] ];
    var options = {
            series: { images: { show: true } },
            xaxis: { min: -8, max: 4 },
            yaxis: { min: -8, max: 4 }
    };

    $.plot.image.loadDataImages(data, options, function () {
        $.plot($("#placeholder"), data, options);
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/index.html.























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
 <body>
    <h1>Flot Examples</h1>

    <p>Here are some examples for <a href="http://code.google.com/p/flot/">Flot</a>, the Javascript charting library for jQuery:</p>

    <ul>
      <li><a href="basic.html">Basic example</a></li>
      <li><a href="graph-types.html">Different graph types</a></li>
      <li><a href="setting-options.html">Setting various options</a> and <a href="annotating.html">annotating a chart</a></li>
      <li><a href="ajax.html">Updating graphs with AJAX</a></li>
    </ul>

    <p>Being interactive:</p>
    
    <ul>
      <li><a href="turning-series.html">Turning series on/off</a></li>
      <li><a href="selection.html">Rectangular selection support and zooming</a> and <a href="zooming.html">zooming with overview</a></li> (both with selection plugin)
      <li><a href="interacting.html">Interacting with the data points</a></li>
      <li><a href="navigate.html">Panning and zooming</a> (with navigation plugin)</li>
    </ul>

    <p>Some more esoteric features:</p>
    
    <ul>
      <li><a href="time.html">Plotting time series</a> and <a href="visitors.html">visitors per day with zooming and weekends</a> (with selection plugin)</li>
      <li><a href="dual-axis.html">Dual axis support</a></li>
      <li><a href="thresholding.html">Thresholding the data</a> (with threshold plugin)</li>
      <li><a href="stacking.html">Stacked charts</a> (with stacking plugin)</li>
      <li><a href="tracking.html">Tracking curves with crosshair</a> (with crosshair plugin)</li>
      <li><a href="image.html">Plotting prerendered images</a> (with image plugin)</li>
    </ul>
 </body>
</html>

Added Site/Site_W/flot/examples/interacting.html.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px"></div>

    <p>One of the goals of Flot is to support user interactions. Try
    pointing and clicking on the points.</p>

    <p id="hoverdata">Mouse hovers at
    (<span id="x">0</span>, <span id="y">0</span>). <span id="clickdata"></span></p>

    <p>A tooltip is easy to build with a bit of jQuery code and the
    data returned from the plot.</p>

    <p><input id="enableTooltip" type="checkbox">Enable tooltip</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var sin = [], cos = [];
    for (var i = 0; i < 14; i += 0.5) {
        sin.push([i, Math.sin(i)]);
        cos.push([i, Math.cos(i)]);
    }

    var plot = $.plot($("#placeholder"),
           [ { data: sin, label: "sin(x)"}, { data: cos, label: "cos(x)" } ], {
               series: {
                   lines: { show: true },
                   points: { show: true }
               },
               grid: { hoverable: true, clickable: true },
               yaxis: { min: -1.2, max: 1.2 }
             });

    function showTooltip(x, y, contents) {
        $('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }

    var previousPoint = null;
    $("#placeholder").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));

        if ($("#enableTooltip:checked").length > 0) {
            if (item) {
                if (previousPoint != item.datapoint) {
                    previousPoint = item.datapoint;
                    
                    $("#tooltip").remove();
                    var x = item.datapoint[0].toFixed(2),
                        y = item.datapoint[1].toFixed(2);
                    
                    showTooltip(item.pageX, item.pageY,
                                item.series.label + " of " + x + " = " + y);
                }
            }
            else {
                $("#tooltip").remove();
                previousPoint = null;            
            }
        }
    });

    $("#placeholder").bind("plotclick", function (event, pos, item) {
        if (item) {
            $("#clickdata").text("You clicked point " + item.dataIndex + " in " + item.series.label + ".");
            plot.highlight(item.series, item.datapoint);
        }
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/layout.css.













>
>
>
>
>
>
1
2
3
4
5
6
body {
  font-family: sans-serif;
  font-size: 16px;
  margin: 50px;
  max-width: 800px;
}

Added Site/Site_W/flot/examples/navigate.html.













































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.navigate.js"></script>
    <style>
    #placeholder .button {
        position: absolute;
        cursor: pointer;
    }
    #placeholder div.button {
        font-size: smaller;
        color: #999;
        background-color: #eee;
        padding: 2px;
    }
    .message {
        padding-left: 50px;
        font-size: smaller;
    }
    </style>
 </head>
 <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p class="message"></p>

    <p>With the navigate plugin it is easy to add panning and zooming.
    Drag to pan, double click to zoom (or use the mouse scrollwheel).</p>

    <p>The plugin fires events (useful for synchronizing several
    plots) and adds a couple of public methods so you can easily build
    a little user interface around it, like the little buttons at the
    top right in the plot.</p>
    

<script id="source" language="javascript" type="text/javascript">
$(function () {
    // generate data set from a parametric function with a fractal
    // look
    function sumf(f, t, m) {
        var res = 0;
        for (var i = 1; i < m; ++i)
            res += f(i * i * t) / (i * i);
        return res;
    }
    
    var d1 = [];
    for (var t = 0; t <= 2 * Math.PI; t += 0.01)
        d1.push([sumf(Math.cos, t, 10), sumf(Math.sin, t, 10)]);
    var data = [ d1 ];

    
    var placeholder = $("#placeholder");
    var options = {
        series: { lines: { show: true }, shadowSize: 0 },
        xaxis: { zoomRange: [0.1, 10], panRange: [-10, 10] },
        yaxis: { zoomRange: [0.1, 10], panRange: [-10, 10] },
        zoom: {
            interactive: true
        },
        pan: {
            interactive: true
        }
    };

    var plot = $.plot(placeholder, data, options);

    // show pan/zoom messages to illustrate events 
    placeholder.bind('plotpan', function (event, plot) {
        var axes = plot.getAxes();
        $(".message").html("Panning to x: "  + axes.xaxis.min.toFixed(2)
                           + " &ndash; " + axes.xaxis.max.toFixed(2)
                           + " and y: " + axes.yaxis.min.toFixed(2)
                           + " &ndash; " + axes.yaxis.max.toFixed(2));
    });

    placeholder.bind('plotzoom', function (event, plot) {
        var axes = plot.getAxes();
        $(".message").html("Zooming to x: "  + axes.xaxis.min.toFixed(2)
                           + " &ndash; " + axes.xaxis.max.toFixed(2)
                           + " and y: " + axes.yaxis.min.toFixed(2)
                           + " &ndash; " + axes.yaxis.max.toFixed(2));
    });

    // add zoom out button 
    $('<div class="button" style="right:20px;top:20px">zoom out</div>').appendTo(placeholder).click(function (e) {
        e.preventDefault();
        plot.zoomOut();
    });

    // and add panning buttons
    
    // little helper for taking the repetitive work out of placing
    // panning arrows
    function addArrow(dir, right, top, offset) {
        $('<img class="button" src="arrow-' + dir + '.gif" style="right:' + right + 'px;top:' + top + 'px">').appendTo(placeholder).click(function (e) {
            e.preventDefault();
            plot.pan(offset);
        });
    }

    addArrow('left', 55, 60, { left: -100 });
    addArrow('right', 25, 60, { left: 100 });
    addArrow('up', 40, 45, { top: -100 });
    addArrow('down', 40, 75, { top: 100 });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/selection.html.





































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.selection.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px"></div>

    <p>1000 kg. CO<sub>2</sub> emissions per year per capita for various countries (source: <a href="http://en.wikipedia.org/wiki/List_of_countries_by_carbon_dioxide_emissions_per_capita">Wikipedia</a>).</p>

    <p>Flot supports selections through the selection plugin.
       You can enable rectangular selection
       or one-dimensional selection if the user should only be able to
       select on one axis. Try left-click and drag on the plot above
       where selection on the x axis is enabled.</p>

    <p>You selected: <span id="selection"></span></p>

    <p>The plot command returns a plot object you can use to control
       the selection. Click the buttons below.</p>

    <p><input id="clearSelection" type="button" value="Clear selection" />
       <input id="setSelection" type="button" value="Select year 1994" /></p>

    <p>Selections are really useful for zooming. Just replot the
       chart with min and max values for the axes set to the values
       in the "plotselected" event triggered. Enable the checkbox
       below and select a region again.</p>

    <p><input id="zoom" type="checkbox">Zoom to selection.</input></p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var data = [
        {
            label: "United States",
            data: [[1990, 18.9], [1991, 18.7], [1992, 18.4], [1993, 19.3], [1994, 19.5], [1995, 19.3], [1996, 19.4], [1997, 20.2], [1998, 19.8], [1999, 19.9], [2000, 20.4], [2001, 20.1], [2002, 20.0], [2003, 19.8], [2004, 20.4]]
        },
        {
            label: "Russia", 
            data: [[1992, 13.4], [1993, 12.2], [1994, 10.6], [1995, 10.2], [1996, 10.1], [1997, 9.7], [1998, 9.5], [1999, 9.7], [2000, 9.9], [2001, 9.9], [2002, 9.9], [2003, 10.3], [2004, 10.5]]
        },
        {
            label: "United Kingdom",
            data: [[1990, 10.0], [1991, 11.3], [1992, 9.9], [1993, 9.6], [1994, 9.5], [1995, 9.5], [1996, 9.9], [1997, 9.3], [1998, 9.2], [1999, 9.2], [2000, 9.5], [2001, 9.6], [2002, 9.3], [2003, 9.4], [2004, 9.79]]
        },
        {
            label: "Germany",
            data: [[1990, 12.4], [1991, 11.2], [1992, 10.8], [1993, 10.5], [1994, 10.4], [1995, 10.2], [1996, 10.5], [1997, 10.2], [1998, 10.1], [1999, 9.6], [2000, 9.7], [2001, 10.0], [2002, 9.7], [2003, 9.8], [2004, 9.79]]
        },
        {
            label: "Denmark",
 	    data: [[1990, 9.7], [1991, 12.1], [1992, 10.3], [1993, 11.3], [1994, 11.7], [1995, 10.6], [1996, 12.8], [1997, 10.8], [1998, 10.3], [1999, 9.4], [2000, 8.7], [2001, 9.0], [2002, 8.9], [2003, 10.1], [2004, 9.80]]
        },
        {
            label: "Sweden",
            data: [[1990, 5.8], [1991, 6.0], [1992, 5.9], [1993, 5.5], [1994, 5.7], [1995, 5.3], [1996, 6.1], [1997, 5.4], [1998, 5.4], [1999, 5.1], [2000, 5.2], [2001, 5.4], [2002, 6.2], [2003, 5.9], [2004, 5.89]]
        },
        {
            label: "Norway",
            data: [[1990, 8.3], [1991, 8.3], [1992, 7.8], [1993, 8.3], [1994, 8.4], [1995, 5.9], [1996, 6.4], [1997, 6.7], [1998, 6.9], [1999, 7.6], [2000, 7.4], [2001, 8.1], [2002, 12.5], [2003, 9.9], [2004, 19.0]]
        }
    ];

    var options = {
        series: {
            lines: { show: true },
            points: { show: true }
        },
        legend: { noColumns: 2 },
        xaxis: { tickDecimals: 0 },
        yaxis: { min: 0 },
        selection: { mode: "x" }
    };

    var placeholder = $("#placeholder");

    placeholder.bind("plotselected", function (event, ranges) {
        $("#selection").text(ranges.xaxis.from.toFixed(1) + " to " + ranges.xaxis.to.toFixed(1));

        var zoom = $("#zoom").attr("checked");
        if (zoom)
            plot = $.plot(placeholder, data,
                          $.extend(true, {}, options, {
                              xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }
                          }));
    });

    placeholder.bind("plotunselected", function (event) {
        $("#selection").text("");
    });
    
    var plot = $.plot(placeholder, data, options);

    $("#clearSelection").click(function () {
        plot.clearSelection();
    });

    $("#setSelection").click(function () {
        plot.setSelection({ x1: 1994, x2: 1995 });
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/setting-options.html.



































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px"></div>

    <p>There are plenty of options you can set to control the precise
    looks of your plot. You can control the axes, the legend, the
    default graph type, the look of grid, etc.</p>

    <p>The idea is that Flot goes to great lengths to provide <b>sensible
    defaults</b> which you can then customize as needed for your
    particular application. If you've found a use case where the
    defaults can be improved, please don't hesitate to give your
    feedback.</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var d1 = [];
    for (var i = 0; i < Math.PI * 2; i += 0.25)
        d1.push([i, Math.sin(i)]);
    
    var d2 = [];
    for (var i = 0; i < Math.PI * 2; i += 0.25)
        d2.push([i, Math.cos(i)]);

    var d3 = [];
    for (var i = 0; i < Math.PI * 2; i += 0.1)
        d3.push([i, Math.tan(i)]);
    
    $.plot($("#placeholder"), [
        { label: "sin(x)",  data: d1},
        { label: "cos(x)",  data: d2},
        { label: "tan(x)",  data: d3}
    ], {
        series: {
            lines: { show: true },
            points: { show: true }
        },
        xaxis: {
            ticks: [0, [Math.PI/2, "\u03c0/2"], [Math.PI, "\u03c0"], [Math.PI * 3/2, "3\u03c0/2"], [Math.PI * 2, "2\u03c0"]]
        },
        yaxis: {
            ticks: 10,
            min: -2,
            max: 2
        },
        grid: {
            backgroundColor: { colors: ["#fff", "#eee"] }
        }
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/stacking.html.



























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.stack.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>With the stack plugin, you can have Flot stack the
    series. This is useful if you wish to display both a total and the
    constituents it is made of. The only requirement is that you provide
    the input sorted on x.</p>

    <p class="stackControls">
    <input type="button" value="With stacking">
    <input type="button" value="Without stacking">
    </p>

    <p class="graphControls">
    <input type="button" value="Bars">
    <input type="button" value="Lines">
    <input type="button" value="Lines with steps">
    </p>

<script id="source">
$(function () {
    var d1 = [];
    for (var i = 0; i <= 10; i += 1)
        d1.push([i, parseInt(Math.random() * 30)]);

    var d2 = [];
    for (var i = 0; i <= 10; i += 1)
        d2.push([i, parseInt(Math.random() * 30)]);

    var d3 = [];
    for (var i = 0; i <= 10; i += 1)
        d3.push([i, parseInt(Math.random() * 30)]);

    var stack = 0, bars = true, lines = false, steps = false;
    
    function plotWithOptions() {
        $.plot($("#placeholder"), [ d1, d2, d3 ], {
            series: {
                stack: stack,
                lines: { show: lines, steps: steps },
                bars: { show: bars, barWidth: 0.6 }
            }
        });
    }

    plotWithOptions();
    
    $(".stackControls input").click(function (e) {
        e.preventDefault();
        stack = $(this).val() == "With stacking" ? true : null;
        plotWithOptions();
    });
    $(".graphControls input").click(function (e) {
        e.preventDefault();
        bars = $(this).val().indexOf("Bars") != -1;
        lines = $(this).val().indexOf("Lines") != -1;
        steps = $(this).val().indexOf("steps") != -1;
        plotWithOptions();
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/thresholding.html.













































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.threshold.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>With the threshold plugin, you can apply a specific color to
    the part of a data series below a threshold. This is can be useful
    for highlighting negative values, e.g. when displaying net results
    or what's in stock.</p>

    <p class="controls">
    <input type="button" value="Threshold at 5">
    <input type="button" value="Threshold at 0">
    <input type="button" value="Threshold at -2.5">
    </p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var d1 = [];
    for (var i = 0; i <= 60; i += 1)
        d1.push([i, parseInt(Math.random() * 30 - 10)]);

    function plotWithOptions(t) {
        $.plot($("#placeholder"), [ {
            data: d1,
            color: "rgb(30, 180, 20)",
            threshold: { below: t, color: "rgb(200, 20, 30)" },
            lines: { steps: true }
        } ]);
    }

    plotWithOptions(0);
    
    $(".controls input").click(function (e) {
        e.preventDefault();
        var t = parseFloat($(this).val().replace('Threshold at ', ''));
        plotWithOptions(t);
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/time.html.















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Monthly mean atmospheric CO<sub>2</sub> in PPM at Mauna Loa, Hawaii (source: <a href="http://www.esrl.noaa.gov/gmd/ccgg/trends/">NOAA/ESRL</a>).</p>

    <p>If you tell Flot that an axis represents time, the data will
      be interpreted as timestamps and the ticks adjusted and
      formatted accordingly.</p>

    <p>Zoom to: <button id="whole">Whole period</button>
      <button id="nineties">1990-2000</button>
      <button id="ninetynine">1999</button></p>

    <p>The timestamps must be specified as Javascript timestamps, as
      milliseconds since January 1, 1970 00:00. This is like Unix
      timestamps, but in milliseconds instead of seconds (remember to
      multiply with 1000!).</p>

    <p>As an extra caveat, the timestamps are interpreted according to
      UTC to avoid having the graph shift with each visitor's local
      time zone. So you might have to add your local time zone offset
      to the timestamps or simply pretend that the data was produced
      in UTC instead of your local time zone.</p>

<script id="source">
$(function () {
    var d = [[-373597200000, 315.71], [-370918800000, 317.45], [-368326800000, 317.50], [-363056400000, 315.86], [-360378000000, 314.93], [-357699600000, 313.19], [-352429200000, 313.34], [-349837200000, 314.67], [-347158800000, 315.58], [-344480400000, 316.47], [-342061200000, 316.65], [-339382800000, 317.71], [-336790800000, 318.29], [-334112400000, 318.16], [-331520400000, 316.55], [-328842000000, 314.80], [-326163600000, 313.84], [-323571600000, 313.34], [-320893200000, 314.81], [-318301200000, 315.59], [-315622800000, 316.43], [-312944400000, 316.97], [-310438800000, 317.58], [-307760400000, 319.03], [-305168400000, 320.03], [-302490000000, 319.59], [-299898000000, 318.18], [-297219600000, 315.91], [-294541200000, 314.16], [-291949200000, 313.83], [-289270800000, 315.00], [-286678800000, 316.19], [-284000400000, 316.89], [-281322000000, 317.70], [-278902800000, 318.54], [-276224400000, 319.48], [-273632400000, 320.58], [-270954000000, 319.78], [-268362000000, 318.58], [-265683600000, 316.79], [-263005200000, 314.99], [-260413200000, 315.31], [-257734800000, 316.10], [-255142800000, 317.01], [-252464400000, 317.94], [-249786000000, 318.56], [-247366800000, 319.69], [-244688400000, 320.58], [-242096400000, 321.01], [-239418000000, 320.61], [-236826000000, 319.61], [-234147600000, 317.40], [-231469200000, 316.26], [-228877200000, 315.42], [-226198800000, 316.69], [-223606800000, 317.69], [-220928400000, 318.74], [-218250000000, 319.08], [-215830800000, 319.86], [-213152400000, 321.39], [-210560400000, 322.24], [-207882000000, 321.47], [-205290000000, 319.74], [-202611600000, 317.77], [-199933200000, 316.21], [-197341200000, 315.99], [-194662800000, 317.07], [-192070800000, 318.36], [-189392400000, 319.57], [-178938000000, 322.23], [-176259600000, 321.89], [-173667600000, 320.44], [-170989200000, 318.70], [-168310800000, 316.70], [-165718800000, 316.87], [-163040400000, 317.68], [-160448400000, 318.71], [-157770000000, 319.44], [-155091600000, 320.44], [-152672400000, 320.89], [-149994000000, 322.13], [-147402000000, 322.16], [-144723600000, 321.87], [-142131600000, 321.21], [-139453200000, 318.87], [-136774800000, 317.81], [-134182800000, 317.30], [-131504400000, 318.87], [-128912400000, 319.42], [-126234000000, 320.62], [-123555600000, 321.59], [-121136400000, 322.39], [-118458000000, 323.70], [-115866000000, 324.07], [-113187600000, 323.75], [-110595600000, 322.40], [-107917200000, 320.37], [-105238800000, 318.64], [-102646800000, 318.10], [-99968400000, 319.79], [-97376400000, 321.03], [-94698000000, 322.33], [-92019600000, 322.50], [-89600400000, 323.04], [-86922000000, 324.42], [-84330000000, 325.00], [-81651600000, 324.09], [-79059600000, 322.55], [-76381200000, 320.92], [-73702800000, 319.26], [-71110800000, 319.39], [-68432400000, 320.72], [-65840400000, 321.96], [-63162000000, 322.57], [-60483600000, 323.15], [-57978000000, 323.89], [-55299600000, 325.02], [-52707600000, 325.57], [-50029200000, 325.36], [-47437200000, 324.14], [-44758800000, 322.11], [-42080400000, 320.33], [-39488400000, 320.25], [-36810000000, 321.32], [-34218000000, 322.90], [-31539600000, 324.00], [-28861200000, 324.42], [-26442000000, 325.64], [-23763600000, 326.66], [-21171600000, 327.38], [-18493200000, 326.70], [-15901200000, 325.89], [-13222800000, 323.67], [-10544400000, 322.38], [-7952400000, 321.78], [-5274000000, 322.85], [-2682000000, 324.12], [-3600000, 325.06], [2674800000, 325.98], [5094000000, 326.93], [7772400000, 328.13], [10364400000, 328.07], [13042800000, 327.66], [15634800000, 326.35], [18313200000, 324.69], [20991600000, 323.10], [23583600000, 323.07], [26262000000, 324.01], [28854000000, 325.13], [31532400000, 326.17], [34210800000, 326.68], [36630000000, 327.18], [39308400000, 327.78], [41900400000, 328.92], [44578800000, 328.57], [47170800000, 327.37], [49849200000, 325.43], [52527600000, 323.36], [55119600000, 323.56], [57798000000, 324.80], [60390000000, 326.01], [63068400000, 326.77], [65746800000, 327.63], [68252400000, 327.75], [70930800000, 329.72], [73522800000, 330.07], [76201200000, 329.09], [78793200000, 328.05], [81471600000, 326.32], [84150000000, 324.84], [86742000000, 325.20], [89420400000, 326.50], [92012400000, 327.55], [94690800000, 328.54], [97369200000, 329.56], [99788400000, 330.30], [102466800000, 331.50], [105058800000, 332.48], [107737200000, 332.07], [110329200000, 330.87], [113007600000, 329.31], [115686000000, 327.51], [118278000000, 327.18], [120956400000, 328.16], [123548400000, 328.64], [126226800000, 329.35], [128905200000, 330.71], [131324400000, 331.48], [134002800000, 332.65], [136594800000, 333.16], [139273200000, 332.06], [141865200000, 330.99], [144543600000, 329.17], [147222000000, 327.41], [149814000000, 327.20], [152492400000, 328.33], [155084400000, 329.50], [157762800000, 330.68], [160441200000, 331.41], [162860400000, 331.85], [165538800000, 333.29], [168130800000, 333.91], [170809200000, 333.40], [173401200000, 331.78], [176079600000, 329.88], [178758000000, 328.57], [181350000000, 328.46], [184028400000, 329.26], [189298800000, 331.71], [191977200000, 332.76], [194482800000, 333.48], [197161200000, 334.78], [199753200000, 334.78], [202431600000, 334.17], [205023600000, 332.78], [207702000000, 330.64], [210380400000, 328.95], [212972400000, 328.77], [215650800000, 330.23], [218242800000, 331.69], [220921200000, 332.70], [223599600000, 333.24], [226018800000, 334.96], [228697200000, 336.04], [231289200000, 336.82], [233967600000, 336.13], [236559600000, 334.73], [239238000000, 332.52], [241916400000, 331.19], [244508400000, 331.19], [247186800000, 332.35], [249778800000, 333.47], [252457200000, 335.11], [255135600000, 335.26], [257554800000, 336.60], [260233200000, 337.77], [262825200000, 338.00], [265503600000, 337.99], [268095600000, 336.48], [270774000000, 334.37], [273452400000, 332.27], [276044400000, 332.41], [278722800000, 333.76], [281314800000, 334.83], [283993200000, 336.21], [286671600000, 336.64], [289090800000, 338.12], [291769200000, 339.02], [294361200000, 339.02], [297039600000, 339.20], [299631600000, 337.58], [302310000000, 335.55], [304988400000, 333.89], [307580400000, 334.14], [310258800000, 335.26], [312850800000, 336.71], [315529200000, 337.81], [318207600000, 338.29], [320713200000, 340.04], [323391600000, 340.86], [325980000000, 341.47], [328658400000, 341.26], [331250400000, 339.29], [333928800000, 337.60], [336607200000, 336.12], [339202800000, 336.08], [341881200000, 337.22], [344473200000, 338.34], [347151600000, 339.36], [349830000000, 340.51], [352249200000, 341.57], [354924000000, 342.56], [357516000000, 343.01], [360194400000, 342.47], [362786400000, 340.71], [365464800000, 338.52], [368143200000, 336.96], [370738800000, 337.13], [373417200000, 338.58], [376009200000, 339.89], [378687600000, 340.93], [381366000000, 341.69], [383785200000, 342.69], [389052000000, 344.30], [391730400000, 343.43], [394322400000, 341.88], [397000800000, 339.89], [399679200000, 337.95], [402274800000, 338.10], [404953200000, 339.27], [407545200000, 340.67], [410223600000, 341.42], [412902000000, 342.68], [415321200000, 343.46], [417996000000, 345.10], [420588000000, 345.76], [423266400000, 345.36], [425858400000, 343.91], [428536800000, 342.05], [431215200000, 340.00], [433810800000, 340.12], [436489200000, 341.33], [439081200000, 342.94], [441759600000, 343.87], [444438000000, 344.60], [446943600000, 345.20], [452210400000, 347.36], [454888800000, 346.74], [457480800000, 345.41], [460159200000, 343.01], [462837600000, 341.23], [465433200000, 341.52], [468111600000, 342.86], [470703600000, 344.41], [473382000000, 345.09], [476060400000, 345.89], [478479600000, 347.49], [481154400000, 348.00], [483746400000, 348.75], [486424800000, 348.19], [489016800000, 346.54], [491695200000, 344.63], [494373600000, 343.03], [496969200000, 342.92], [499647600000, 344.24], [502239600000, 345.62], [504918000000, 346.43], [507596400000, 346.94], [510015600000, 347.88], [512690400000, 349.57], [515282400000, 350.35], [517960800000, 349.72], [520552800000, 347.78], [523231200000, 345.86], [525909600000, 344.84], [528505200000, 344.32], [531183600000, 345.67], [533775600000, 346.88], [536454000000, 348.19], [539132400000, 348.55], [541551600000, 349.52], [544226400000, 351.12], [546818400000, 351.84], [549496800000, 351.49], [552088800000, 349.82], [554767200000, 347.63], [557445600000, 346.38], [560041200000, 346.49], [562719600000, 347.75], [565311600000, 349.03], [567990000000, 350.20], [570668400000, 351.61], [573174000000, 352.22], [575848800000, 353.53], [578440800000, 354.14], [581119200000, 353.62], [583711200000, 352.53], [586389600000, 350.41], [589068000000, 348.84], [591663600000, 348.94], [594342000000, 350.04], [596934000000, 351.29], [599612400000, 352.72], [602290800000, 353.10], [604710000000, 353.65], [607384800000, 355.43], [609976800000, 355.70], [612655200000, 355.11], [615247200000, 353.79], [617925600000, 351.42], [620604000000, 349.81], [623199600000, 350.11], [625878000000, 351.26], [628470000000, 352.63], [631148400000, 353.64], [633826800000, 354.72], [636246000000, 355.49], [638920800000, 356.09], [641512800000, 357.08], [644191200000, 356.11], [646783200000, 354.70], [649461600000, 352.68], [652140000000, 351.05], [654735600000, 351.36], [657414000000, 352.81], [660006000000, 354.22], [662684400000, 354.85], [665362800000, 355.66], [667782000000, 357.04], [670456800000, 358.40], [673048800000, 359.00], [675727200000, 357.99], [678319200000, 356.00], [680997600000, 353.78], [683676000000, 352.20], [686271600000, 352.22], [688950000000, 353.70], [691542000000, 354.98], [694220400000, 356.09], [696898800000, 356.85], [699404400000, 357.73], [702079200000, 358.91], [704671200000, 359.45], [707349600000, 359.19], [709941600000, 356.72], [712620000000, 354.79], [715298400000, 352.79], [717894000000, 353.20], [720572400000, 354.15], [723164400000, 355.39], [725842800000, 356.77], [728521200000, 357.17], [730940400000, 358.26], [733615200000, 359.16], [736207200000, 360.07], [738885600000, 359.41], [741477600000, 357.44], [744156000000, 355.30], [746834400000, 353.87], [749430000000, 354.04], [752108400000, 355.27], [754700400000, 356.70], [757378800000, 358.00], [760057200000, 358.81], [762476400000, 359.68], [765151200000, 361.13], [767743200000, 361.48], [770421600000, 360.60], [773013600000, 359.20], [775692000000, 357.23], [778370400000, 355.42], [780966000000, 355.89], [783644400000, 357.41], [786236400000, 358.74], [788914800000, 359.73], [791593200000, 360.61], [794012400000, 361.58], [796687200000, 363.05], [799279200000, 363.62], [801957600000, 363.03], [804549600000, 361.55], [807228000000, 358.94], [809906400000, 357.93], [812502000000, 357.80], [815180400000, 359.22], [817772400000, 360.44], [820450800000, 361.83], [823129200000, 362.95], [825634800000, 363.91], [828309600000, 364.28], [830901600000, 364.94], [833580000000, 364.70], [836172000000, 363.31], [838850400000, 361.15], [841528800000, 359.40], [844120800000, 359.34], [846802800000, 360.62], [849394800000, 361.96], [852073200000, 362.81], [854751600000, 363.87], [857170800000, 364.25], [859845600000, 366.02], [862437600000, 366.46], [865116000000, 365.32], [867708000000, 364.07], [870386400000, 361.95], [873064800000, 360.06], [875656800000, 360.49], [878338800000, 362.19], [880930800000, 364.12], [883609200000, 364.99], [886287600000, 365.82], [888706800000, 366.95], [891381600000, 368.42], [893973600000, 369.33], [896652000000, 368.78], [899244000000, 367.59], [901922400000, 365.84], [904600800000, 363.83], [907192800000, 364.18], [909874800000, 365.34], [912466800000, 366.93], [915145200000, 367.94], [917823600000, 368.82], [920242800000, 369.46], [922917600000, 370.77], [925509600000, 370.66], [928188000000, 370.10], [930780000000, 369.08], [933458400000, 366.66], [936136800000, 364.60], [938728800000, 365.17], [941410800000, 366.51], [944002800000, 367.89], [946681200000, 369.04], [949359600000, 369.35], [951865200000, 370.38], [954540000000, 371.63], [957132000000, 371.32], [959810400000, 371.53], [962402400000, 369.75], [965080800000, 368.23], [967759200000, 366.87], [970351200000, 366.94], [973033200000, 368.27], [975625200000, 369.64], [978303600000, 370.46], [980982000000, 371.44], [983401200000, 372.37], [986076000000, 373.33], [988668000000, 373.77], [991346400000, 373.09], [993938400000, 371.51], [996616800000, 369.55], [999295200000, 368.12], [1001887200000, 368.38], [1004569200000, 369.66], [1007161200000, 371.11], [1009839600000, 372.36], [1012518000000, 373.09], [1014937200000, 373.81], [1017612000000, 374.93], [1020204000000, 375.58], [1022882400000, 375.44], [1025474400000, 373.86], [1028152800000, 371.77], [1030831200000, 370.73], [1033423200000, 370.50], [1036105200000, 372.18], [1038697200000, 373.70], [1041375600000, 374.92], [1044054000000, 375.62], [1046473200000, 376.51], [1049148000000, 377.75], [1051740000000, 378.54], [1054418400000, 378.20], [1057010400000, 376.68], [1059688800000, 374.43], [1062367200000, 373.11], [1064959200000, 373.10], [1067641200000, 374.77], [1070233200000, 375.97], [1072911600000, 377.03], [1075590000000, 377.87], [1078095600000, 378.88], [1080770400000, 380.42], [1083362400000, 380.62], [1086040800000, 379.70], [1088632800000, 377.43], [1091311200000, 376.32], [1093989600000, 374.19], [1096581600000, 374.47], [1099263600000, 376.15], [1101855600000, 377.51], [1104534000000, 378.43], [1107212400000, 379.70], [1109631600000, 380.92], [1112306400000, 382.18], [1114898400000, 382.45], [1117576800000, 382.14], [1120168800000, 380.60], [1122847200000, 378.64], [1125525600000, 376.73], [1128117600000, 376.84], [1130799600000, 378.29], [1133391600000, 380.06], [1136070000000, 381.40], [1138748400000, 382.20], [1141167600000, 382.66], [1143842400000, 384.69], [1146434400000, 384.94], [1149112800000, 384.01], [1151704800000, 382.14], [1154383200000, 380.31], [1157061600000, 378.81], [1159653600000, 379.03], [1162335600000, 380.17], [1164927600000, 381.85], [1167606000000, 382.94], [1170284400000, 383.86], [1172703600000, 384.49], [1175378400000, 386.37], [1177970400000, 386.54], [1180648800000, 385.98], [1183240800000, 384.36], [1185919200000, 381.85], [1188597600000, 380.74], [1191189600000, 381.15], [1193871600000, 382.38], [1196463600000, 383.94], [1199142000000, 385.44]]; 

    $.plot($("#placeholder"), [d], { xaxis: { mode: "time" } });

    $("#whole").click(function () {
        $.plot($("#placeholder"), [d], { xaxis: { mode: "time" } });
    });

    $("#nineties").click(function () {
        $.plot($("#placeholder"), [d], {
            xaxis: {
                mode: "time",
                min: (new Date("1990/01/01")).getTime(),
                max: (new Date("2000/01/01")).getTime()
            }
        });
    });

    $("#ninetynine").click(function () {
        $.plot($("#placeholder"), [d], {
            xaxis: {
                mode: "time",
                minTickSize: [1, "month"],
                min: (new Date("1999/01/01")).getTime(),
                max: (new Date("2000/01/01")).getTime()
            }
        });
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/tracking.html.































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.crosshair.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px"></div>

    <p>You can add crosshairs that'll track the mouse position, either
    on both axes or as here on only one.</p>

    <p>If you combine it with listening on hover events, you can use
    it to track the intersection on the curves by interpolating
    the data points (look at the legend).</p>

    <p id="hoverdata"></p>

<script id="source" language="javascript" type="text/javascript">
var plot;
$(function () {
    var sin = [], cos = [];
    for (var i = 0; i < 14; i += 0.1) {
        sin.push([i, Math.sin(i)]);
        cos.push([i, Math.cos(i)]);
    }

    plot = $.plot($("#placeholder"),
                      [ { data: sin, label: "sin(x) = -0.00"},
                        { data: cos, label: "cos(x) = -0.00" } ], {
                            series: {
                                lines: { show: true }
                            },
                            crosshair: { mode: "x" },
                            grid: { hoverable: true, autoHighlight: false },
                            yaxis: { min: -1.2, max: 1.2 }
                        });
    var legends = $("#placeholder .legendLabel");
    legends.each(function () {
        // fix the widths so they don't jump around
        $(this).css('width', $(this).width());
    });

    var updateLegendTimeout = null;
    var latestPosition = null;
    
    function updateLegend() {
        updateLegendTimeout = null;
        
        var pos = latestPosition;
        
        var axes = plot.getAxes();
        if (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max ||
            pos.y < axes.yaxis.min || pos.y > axes.yaxis.max)
            return;

        var i, j, dataset = plot.getData();
        for (i = 0; i < dataset.length; ++i) {
            var series = dataset[i];

            // find the nearest points, x-wise
            for (j = 0; j < series.data.length; ++j)
                if (series.data[j][0] > pos.x)
                    break;
            
            // now interpolate
            var y, p1 = series.data[j - 1], p2 = series.data[j];
            if (p1 == null)
                y = p2[1];
            else if (p2 == null)
                y = p1[1];
            else
                y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]);

            legends.eq(i).text(series.label.replace(/=.*/, "= " + y.toFixed(2)));
        }
    }
    
    $("#placeholder").bind("plothover",  function (event, pos, item) {
        latestPosition = pos;
        if (!updateLegendTimeout)
            updateLegendTimeout = setTimeout(updateLegend, 50);
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/turning-series.html.





































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Here is an example with real data: military budgets for
        various countries in constant (2005) million US dollars (source: <a href="http://www.sipri.org/">SIPRI</a>).</p>

    <p>Since all data is available client-side, it's pretty easy to
       make the plot interactive. Try turning countries on/off with the
       checkboxes below.</p>

    <p id="choices">Show:</p>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var datasets = {
        "usa": {
            label: "USA",
            data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]
        },        
        "russia": {
            label: "Russia",
            data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]
        },
        "uk": {
            label: "UK",
            data: [[1988, 62982], [1989, 62027], [1990, 60696], [1991, 62348], [1992, 58560], [1993, 56393], [1994, 54579], [1995, 50818], [1996, 50554], [1997, 48276], [1998, 47691], [1999, 47529], [2000, 47778], [2001, 48760], [2002, 50949], [2003, 57452], [2004, 60234], [2005, 60076], [2006, 59213]]
        },
        "germany": {
            label: "Germany",
            data: [[1988, 55627], [1989, 55475], [1990, 58464], [1991, 55134], [1992, 52436], [1993, 47139], [1994, 43962], [1995, 43238], [1996, 42395], [1997, 40854], [1998, 40993], [1999, 41822], [2000, 41147], [2001, 40474], [2002, 40604], [2003, 40044], [2004, 38816], [2005, 38060], [2006, 36984]]
        },
        "denmark": {
            label: "Denmark",
            data: [[1988, 3813], [1989, 3719], [1990, 3722], [1991, 3789], [1992, 3720], [1993, 3730], [1994, 3636], [1995, 3598], [1996, 3610], [1997, 3655], [1998, 3695], [1999, 3673], [2000, 3553], [2001, 3774], [2002, 3728], [2003, 3618], [2004, 3638], [2005, 3467], [2006, 3770]]
        },
        "sweden": {
            label: "Sweden",
            data: [[1988, 6402], [1989, 6474], [1990, 6605], [1991, 6209], [1992, 6035], [1993, 6020], [1994, 6000], [1995, 6018], [1996, 3958], [1997, 5780], [1998, 5954], [1999, 6178], [2000, 6411], [2001, 5993], [2002, 5833], [2003, 5791], [2004, 5450], [2005, 5521], [2006, 5271]]
        },
        "norway": {
            label: "Norway",
            data: [[1988, 4382], [1989, 4498], [1990, 4535], [1991, 4398], [1992, 4766], [1993, 4441], [1994, 4670], [1995, 4217], [1996, 4275], [1997, 4203], [1998, 4482], [1999, 4506], [2000, 4358], [2001, 4385], [2002, 5269], [2003, 5066], [2004, 5194], [2005, 4887], [2006, 4891]]
        }
    };

    // hard-code color indices to prevent them from shifting as
    // countries are turned on/off
    var i = 0;
    $.each(datasets, function(key, val) {
        val.color = i;
        ++i;
    });
    
    // insert checkboxes 
    var choiceContainer = $("#choices");
    $.each(datasets, function(key, val) {
        choiceContainer.append('<br/><input type="checkbox" name="' + key +
                               '" checked="checked" id="id' + key + '">' +
                               '<label for="id' + key + '">'
                                + val.label + '</label>');
    });
    choiceContainer.find("input").click(plotAccordingToChoices);

    
    function plotAccordingToChoices() {
        var data = [];

        choiceContainer.find("input:checked").each(function () {
            var key = $(this).attr("name");
            if (key && datasets[key])
                data.push(datasets[key]);
        });

        if (data.length > 0)
            $.plot($("#placeholder"), data, {
                yaxis: { min: 0 },
                xaxis: { tickDecimals: 0 }
            });
    }

    plotAccordingToChoices();
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/visitors.html.





















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.selection.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div id="placeholder" style="width:600px;height:300px;"></div>

    <p>Visitors per day to the Flot homepage. Weekends are colored. Try zooming.
      The plot below shows an overview.</p>

    <div id="overview" style="margin-left:50px;margin-top:20px;width:400px;height:50px"></div>

<script id="source">
$(function () {
    var d = [[1196463600000, 0], [1196550000000, 0], [1196636400000, 0], [1196722800000, 77], [1196809200000, 3636], [1196895600000, 3575], [1196982000000, 2736], [1197068400000, 1086], [1197154800000, 676], [1197241200000, 1205], [1197327600000, 906], [1197414000000, 710], [1197500400000, 639], [1197586800000, 540], [1197673200000, 435], [1197759600000, 301], [1197846000000, 575], [1197932400000, 481], [1198018800000, 591], [1198105200000, 608], [1198191600000, 459], [1198278000000, 234], [1198364400000, 1352], [1198450800000, 686], [1198537200000, 279], [1198623600000, 449], [1198710000000, 468], [1198796400000, 392], [1198882800000, 282], [1198969200000, 208], [1199055600000, 229], [1199142000000, 177], [1199228400000, 374], [1199314800000, 436], [1199401200000, 404], [1199487600000, 253], [1199574000000, 218], [1199660400000, 476], [1199746800000, 462], [1199833200000, 448], [1199919600000, 442], [1200006000000, 403], [1200092400000, 204], [1200178800000, 194], [1200265200000, 327], [1200351600000, 374], [1200438000000, 507], [1200524400000, 546], [1200610800000, 482], [1200697200000, 283], [1200783600000, 221], [1200870000000, 483], [1200956400000, 523], [1201042800000, 528], [1201129200000, 483], [1201215600000, 452], [1201302000000, 270], [1201388400000, 222], [1201474800000, 439], [1201561200000, 559], [1201647600000, 521], [1201734000000, 477], [1201820400000, 442], [1201906800000, 252], [1201993200000, 236], [1202079600000, 525], [1202166000000, 477], [1202252400000, 386], [1202338800000, 409], [1202425200000, 408], [1202511600000, 237], [1202598000000, 193], [1202684400000, 357], [1202770800000, 414], [1202857200000, 393], [1202943600000, 353], [1203030000000, 364], [1203116400000, 215], [1203202800000, 214], [1203289200000, 356], [1203375600000, 399], [1203462000000, 334], [1203548400000, 348], [1203634800000, 243], [1203721200000, 126], [1203807600000, 157], [1203894000000, 288]];

    // first correct the timestamps - they are recorded as the daily
    // midnights in UTC+0100, but Flot always displays dates in UTC
    // so we have to add one hour to hit the midnights in the plot
    for (var i = 0; i < d.length; ++i)
      d[i][0] += 60 * 60 * 1000;

    // helper for returning the weekends in a period
    function weekendAreas(axes) {
        var markings = [];
        var d = new Date(axes.xaxis.min);
        // go to the first Saturday
        d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7))
        d.setUTCSeconds(0);
        d.setUTCMinutes(0);
        d.setUTCHours(0);
        var i = d.getTime();
        do {
            // when we don't set yaxis, the rectangle automatically
            // extends to infinity upwards and downwards
            markings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } });
            i += 7 * 24 * 60 * 60 * 1000;
        } while (i < axes.xaxis.max);

        return markings;
    }
    
    var options = {
        xaxis: { mode: "time" },
        selection: { mode: "x" },
        grid: { markings: weekendAreas }
    };
    
    var plot = $.plot($("#placeholder"), [d], options);
    
    var overview = $.plot($("#overview"), [d], {
        series: {
            lines: { show: true, lineWidth: 1 },
            shadowSize: 0
        },
        xaxis: { ticks: [], mode: "time" },
        yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },
        selection: { mode: "x" }
    });

    // now connect the two
    
    $("#placeholder").bind("plotselected", function (event, ranges) {
        // do the zooming
        plot = $.plot($("#placeholder"), [d],
                      $.extend(true, {}, options, {
                          xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }
                      }));

        // don't fire event on the overview to prevent eternal loop
        overview.setSelection(ranges, true);
    });
    
    $("#overview").bind("plotselected", function (event, ranges) {
        plot.setSelection(ranges);
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/examples/zooming.html.





































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css"></link>
    <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../jquery.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.flot.selection.js"></script>
 </head>
    <body>
    <h1>Flot Examples</h1>

    <div style="float:left">
      <div id="placeholder" style="width:500px;height:300px"></div>
    </div>
    
    <div id="miniature" style="float:left;margin-left:20px;margin-top:50px">
      <div id="overview" style="width:166px;height:100px"></div>

      <p id="overviewLegend" style="margin-left:10px"></p>
    </div>

    <p style="clear:left"> The selection support makes 
      pretty advanced zooming schemes possible. With a few lines of code,
      the small overview plot to the right has been connected to the large
      plot. Try selecting a rectangle on either of them.</p>

<script id="source">
$(function () {
    // setup plot
    function getData(x1, x2) {
        var d = [];
        for (var i = 0; i <= 100; ++i) {
            var x = x1 + i * (x2 - x1) / 100;
            d.push([x, Math.sin(x * Math.sin(x))]);
        }

        return [
            { label: "sin(x sin(x))", data: d }
        ];
    }

    var options = {
        legend: { show: false },
        series: {
            lines: { show: true },
            points: { show: true }
        },
        yaxis: { ticks: 10 },
        selection: { mode: "xy" }
    };

    var startData = getData(0, 3 * Math.PI);
    
    var plot = $.plot($("#placeholder"), startData, options);

    // setup overview
    var overview = $.plot($("#overview"), startData, {
        legend: { show: true, container: $("#overviewLegend") },
        series: {
            lines: { show: true, lineWidth: 1 },
            shadowSize: 0
        },
        xaxis: { ticks: 4 },
        yaxis: { ticks: 3, min: -2, max: 2 },
        grid: { color: "#999" },
        selection: { mode: "xy" }
    });

    // now connect the two
    
    $("#placeholder").bind("plotselected", function (event, ranges) {
        // clamp the zooming to prevent eternal zoom
        if (ranges.xaxis.to - ranges.xaxis.from < 0.00001)
            ranges.xaxis.to = ranges.xaxis.from + 0.00001;
        if (ranges.yaxis.to - ranges.yaxis.from < 0.00001)
            ranges.yaxis.to = ranges.yaxis.from + 0.00001;
        
        // do the zooming
        plot = $.plot($("#placeholder"), getData(ranges.xaxis.from, ranges.xaxis.to),
                      $.extend(true, {}, options, {
                          xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to },
                          yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to }
                      }));
        
        // don't fire event on the overview to prevent eternal loop
        overview.setSelection(ranges, true);
    });
    $("#overview").bind("plotselected", function (event, ranges) {
        plot.setSelection(ranges);
    });
});
</script>

 </body>
</html>

Added Site/Site_W/flot/excanvas.js.







































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
// Copyright 2006 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


// Known Issues:
//
// * Patterns only support repeat.
// * Radial gradient are not implemented. The VML version of these look very
//   different from the canvas one.
// * Clipping paths are not implemented.
// * Coordsize. The width and height attribute have higher priority than the
//   width and height style values which isn't correct.
// * Painting mode isn't implemented.
// * Canvas width/height should is using content-box by default. IE in
//   Quirks mode will draw the canvas using border-box. Either change your
//   doctype to HTML5
//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
//   or use Box Sizing Behavior from WebFX
//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
// * Non uniform scaling does not correctly scale strokes.
// * Filling very large shapes (above 5000 points) is buggy.
// * Optimize. There is always room for speed improvements.

// Only add this code if we do not already have a canvas implementation
if (!document.createElement('canvas').getContext) {

(function() {

  // alias some functions to make (compiled) code shorter
  var m = Math;
  var mr = m.round;
  var ms = m.sin;
  var mc = m.cos;
  var abs = m.abs;
  var sqrt = m.sqrt;

  // this is used for sub pixel precision
  var Z = 10;
  var Z2 = Z / 2;

  /**
   * This funtion is assigned to the <canvas> elements as element.getContext().
   * @this {HTMLElement}
   * @return {CanvasRenderingContext2D_}
   */
  function getContext() {
    return this.context_ ||
        (this.context_ = new CanvasRenderingContext2D_(this));
  }

  var slice = Array.prototype.slice;

  /**
   * Binds a function to an object. The returned function will always use the
   * passed in {@code obj} as {@code this}.
   *
   * Example:
   *
   *   g = bind(f, obj, a, b)
   *   g(c, d) // will do f.call(obj, a, b, c, d)
   *
   * @param {Function} f The function to bind the object to
   * @param {Object} obj The object that should act as this when the function
   *     is called
   * @param {*} var_args Rest arguments that will be used as the initial
   *     arguments when the function is called
   * @return {Function} A new function that has bound this
   */
  function bind(f, obj, var_args) {
    var a = slice.call(arguments, 2);
    return function() {
      return f.apply(obj, a.concat(slice.call(arguments)));
    };
  }

  function encodeHtmlAttribute(s) {
    return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
  }

  function addNamespacesAndStylesheet(doc) {
    // create xmlns
    if (!doc.namespaces['g_vml_']) {
      doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',
                         '#default#VML');

    }
    if (!doc.namespaces['g_o_']) {
      doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',
                         '#default#VML');
    }

    // Setup default CSS.  Only add one style sheet per document
    if (!doc.styleSheets['ex_canvas_']) {
      var ss = doc.createStyleSheet();
      ss.owningElement.id = 'ex_canvas_';
      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
          // default size is 300x150 in Gecko and Opera
          'text-align:left;width:300px;height:150px}';
    }
  }

  // Add namespaces and stylesheet at startup.
  addNamespacesAndStylesheet(document);

  var G_vmlCanvasManager_ = {
    init: function(opt_doc) {
      if (/MSIE/.test(navigator.userAgent) && !window.opera) {
        var doc = opt_doc || document;
        // Create a dummy element so that IE will allow canvas elements to be
        // recognized.
        doc.createElement('canvas');
        doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
      }
    },

    init_: function(doc) {
      // find all canvas elements
      var els = doc.getElementsByTagName('canvas');
      for (var i = 0; i < els.length; i++) {
        this.initElement(els[i]);
      }
    },

    /**
     * Public initializes a canvas element so that it can be used as canvas
     * element from now on. This is called automatically before the page is
     * loaded but if you are creating elements using createElement you need to
     * make sure this is called on the element.
     * @param {HTMLElement} el The canvas element to initialize.
     * @return {HTMLElement} the element that was created.
     */
    initElement: function(el) {
      if (!el.getContext) {
        el.getContext = getContext;

        // Add namespaces and stylesheet to document of the element.
        addNamespacesAndStylesheet(el.ownerDocument);

        // Remove fallback content. There is no way to hide text nodes so we
        // just remove all childNodes. We could hide all elements and remove
        // text nodes but who really cares about the fallback content.
        el.innerHTML = '';

        // do not use inline function because that will leak memory
        el.attachEvent('onpropertychange', onPropertyChange);
        el.attachEvent('onresize', onResize);

        var attrs = el.attributes;
        if (attrs.width && attrs.width.specified) {
          // TODO: use runtimeStyle and coordsize
          // el.getContext().setWidth_(attrs.width.nodeValue);
          el.style.width = attrs.width.nodeValue + 'px';
        } else {
          el.width = el.clientWidth;
        }
        if (attrs.height && attrs.height.specified) {
          // TODO: use runtimeStyle and coordsize
          // el.getContext().setHeight_(attrs.height.nodeValue);
          el.style.height = attrs.height.nodeValue + 'px';
        } else {
          el.height = el.clientHeight;
        }
        //el.getContext().setCoordsize_()
      }
      return el;
    }
  };

  function onPropertyChange(e) {
    var el = e.srcElement;

    switch (e.propertyName) {
      case 'width':
        el.getContext().clearRect();
        el.style.width = el.attributes.width.nodeValue + 'px';
        // In IE8 this does not trigger onresize.
        el.firstChild.style.width =  el.clientWidth + 'px';
        break;
      case 'height':
        el.getContext().clearRect();
        el.style.height = el.attributes.height.nodeValue + 'px';
        el.firstChild.style.height = el.clientHeight + 'px';
        break;
    }
  }

  function onResize(e) {
    var el = e.srcElement;
    if (el.firstChild) {
      el.firstChild.style.width =  el.clientWidth + 'px';
      el.firstChild.style.height = el.clientHeight + 'px';
    }
  }

  G_vmlCanvasManager_.init();

  // precompute "00" to "FF"
  var decToHex = [];
  for (var i = 0; i < 16; i++) {
    for (var j = 0; j < 16; j++) {
      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
    }
  }

  function createMatrixIdentity() {
    return [
      [1, 0, 0],
      [0, 1, 0],
      [0, 0, 1]
    ];
  }

  function matrixMultiply(m1, m2) {
    var result = createMatrixIdentity();

    for (var x = 0; x < 3; x++) {
      for (var y = 0; y < 3; y++) {
        var sum = 0;

        for (var z = 0; z < 3; z++) {
          sum += m1[x][z] * m2[z][y];
        }

        result[x][y] = sum;
      }
    }
    return result;
  }

  function copyState(o1, o2) {
    o2.fillStyle     = o1.fillStyle;
    o2.lineCap       = o1.lineCap;
    o2.lineJoin      = o1.lineJoin;
    o2.lineWidth     = o1.lineWidth;
    o2.miterLimit    = o1.miterLimit;
    o2.shadowBlur    = o1.shadowBlur;
    o2.shadowColor   = o1.shadowColor;
    o2.shadowOffsetX = o1.shadowOffsetX;
    o2.shadowOffsetY = o1.shadowOffsetY;
    o2.strokeStyle   = o1.strokeStyle;
    o2.globalAlpha   = o1.globalAlpha;
    o2.font          = o1.font;
    o2.textAlign     = o1.textAlign;
    o2.textBaseline  = o1.textBaseline;
    o2.arcScaleX_    = o1.arcScaleX_;
    o2.arcScaleY_    = o1.arcScaleY_;
    o2.lineScale_    = o1.lineScale_;
  }

  var colorData = {
    aliceblue: '#F0F8FF',
    antiquewhite: '#FAEBD7',
    aquamarine: '#7FFFD4',
    azure: '#F0FFFF',
    beige: '#F5F5DC',
    bisque: '#FFE4C4',
    black: '#000000',
    blanchedalmond: '#FFEBCD',
    blueviolet: '#8A2BE2',
    brown: '#A52A2A',
    burlywood: '#DEB887',
    cadetblue: '#5F9EA0',
    chartreuse: '#7FFF00',
    chocolate: '#D2691E',
    coral: '#FF7F50',
    cornflowerblue: '#6495ED',
    cornsilk: '#FFF8DC',
    crimson: '#DC143C',
    cyan: '#00FFFF',
    darkblue: '#00008B',
    darkcyan: '#008B8B',
    darkgoldenrod: '#B8860B',
    darkgray: '#A9A9A9',
    darkgreen: '#006400',
    darkgrey: '#A9A9A9',
    darkkhaki: '#BDB76B',
    darkmagenta: '#8B008B',
    darkolivegreen: '#556B2F',
    darkorange: '#FF8C00',
    darkorchid: '#9932CC',
    darkred: '#8B0000',
    darksalmon: '#E9967A',
    darkseagreen: '#8FBC8F',
    darkslateblue: '#483D8B',
    darkslategray: '#2F4F4F',
    darkslategrey: '#2F4F4F',
    darkturquoise: '#00CED1',
    darkviolet: '#9400D3',
    deeppink: '#FF1493',
    deepskyblue: '#00BFFF',
    dimgray: '#696969',
    dimgrey: '#696969',
    dodgerblue: '#1E90FF',
    firebrick: '#B22222',
    floralwhite: '#FFFAF0',
    forestgreen: '#228B22',
    gainsboro: '#DCDCDC',
    ghostwhite: '#F8F8FF',
    gold: '#FFD700',
    goldenrod: '#DAA520',
    grey: '#808080',
    greenyellow: '#ADFF2F',
    honeydew: '#F0FFF0',
    hotpink: '#FF69B4',
    indianred: '#CD5C5C',
    indigo: '#4B0082',
    ivory: '#FFFFF0',
    khaki: '#F0E68C',
    lavender: '#E6E6FA',
    lavenderblush: '#FFF0F5',
    lawngreen: '#7CFC00',
    lemonchiffon: '#FFFACD',
    lightblue: '#ADD8E6',
    lightcoral: '#F08080',
    lightcyan: '#E0FFFF',
    lightgoldenrodyellow: '#FAFAD2',
    lightgreen: '#90EE90',
    lightgrey: '#D3D3D3',
    lightpink: '#FFB6C1',
    lightsalmon: '#FFA07A',
    lightseagreen: '#20B2AA',
    lightskyblue: '#87CEFA',
    lightslategray: '#778899',
    lightslategrey: '#778899',
    lightsteelblue: '#B0C4DE',
    lightyellow: '#FFFFE0',
    limegreen: '#32CD32',
    linen: '#FAF0E6',
    magenta: '#FF00FF',
    mediumaquamarine: '#66CDAA',
    mediumblue: '#0000CD',
    mediumorchid: '#BA55D3',
    mediumpurple: '#9370DB',
    mediumseagreen: '#3CB371',
    mediumslateblue: '#7B68EE',
    mediumspringgreen: '#00FA9A',
    mediumturquoise: '#48D1CC',
    mediumvioletred: '#C71585',
    midnightblue: '#191970',
    mintcream: '#F5FFFA',
    mistyrose: '#FFE4E1',
    moccasin: '#FFE4B5',
    navajowhite: '#FFDEAD',
    oldlace: '#FDF5E6',
    olivedrab: '#6B8E23',
    orange: '#FFA500',
    orangered: '#FF4500',
    orchid: '#DA70D6',
    palegoldenrod: '#EEE8AA',
    palegreen: '#98FB98',
    paleturquoise: '#AFEEEE',
    palevioletred: '#DB7093',
    papayawhip: '#FFEFD5',
    peachpuff: '#FFDAB9',
    peru: '#CD853F',
    pink: '#FFC0CB',
    plum: '#DDA0DD',
    powderblue: '#B0E0E6',
    rosybrown: '#BC8F8F',
    royalblue: '#4169E1',
    saddlebrown: '#8B4513',
    salmon: '#FA8072',
    sandybrown: '#F4A460',
    seagreen: '#2E8B57',
    seashell: '#FFF5EE',
    sienna: '#A0522D',
    skyblue: '#87CEEB',
    slateblue: '#6A5ACD',
    slategray: '#708090',
    slategrey: '#708090',
    snow: '#FFFAFA',
    springgreen: '#00FF7F',
    steelblue: '#4682B4',
    tan: '#D2B48C',
    thistle: '#D8BFD8',
    tomato: '#FF6347',
    turquoise: '#40E0D0',
    violet: '#EE82EE',
    wheat: '#F5DEB3',
    whitesmoke: '#F5F5F5',
    yellowgreen: '#9ACD32'
  };


  function getRgbHslContent(styleString) {
    var start = styleString.indexOf('(', 3);
    var end = styleString.indexOf(')', start + 1);
    var parts = styleString.substring(start + 1, end).split(',');
    // add alpha if needed
    if (parts.length == 4 && styleString.substr(3, 1) == 'a') {
      alpha = Number(parts[3]);
    } else {
      parts[3] = 1;
    }
    return parts;
  }

  function percent(s) {
    return parseFloat(s) / 100;
  }

  function clamp(v, min, max) {
    return Math.min(max, Math.max(min, v));
  }

  function hslToRgb(parts){
    var r, g, b;
    h = parseFloat(parts[0]) / 360 % 360;
    if (h < 0)
      h++;
    s = clamp(percent(parts[1]), 0, 1);
    l = clamp(percent(parts[2]), 0, 1);
    if (s == 0) {
      r = g = b = l; // achromatic
    } else {
      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
      var p = 2 * l - q;
      r = hueToRgb(p, q, h + 1 / 3);
      g = hueToRgb(p, q, h);
      b = hueToRgb(p, q, h - 1 / 3);
    }

    return '#' + decToHex[Math.floor(r * 255)] +
        decToHex[Math.floor(g * 255)] +
        decToHex[Math.floor(b * 255)];
  }

  function hueToRgb(m1, m2, h) {
    if (h < 0)
      h++;
    if (h > 1)
      h--;

    if (6 * h < 1)
      return m1 + (m2 - m1) * 6 * h;
    else if (2 * h < 1)
      return m2;
    else if (3 * h < 2)
      return m1 + (m2 - m1) * (2 / 3 - h) * 6;
    else
      return m1;
  }

  function processStyle(styleString) {
    var str, alpha = 1;

    styleString = String(styleString);
    if (styleString.charAt(0) == '#') {
      str = styleString;
    } else if (/^rgb/.test(styleString)) {
      var parts = getRgbHslContent(styleString);
      var str = '#', n;
      for (var i = 0; i < 3; i++) {
        if (parts[i].indexOf('%') != -1) {
          n = Math.floor(percent(parts[i]) * 255);
        } else {
          n = Number(parts[i]);
        }
        str += decToHex[clamp(n, 0, 255)];
      }
      alpha = parts[3];
    } else if (/^hsl/.test(styleString)) {
      var parts = getRgbHslContent(styleString);
      str = hslToRgb(parts);
      alpha = parts[3];
    } else {
      str = colorData[styleString] || styleString;
    }
    return {color: str, alpha: alpha};
  }

  var DEFAULT_STYLE = {
    style: 'normal',
    variant: 'normal',
    weight: 'normal',
    size: 10,
    family: 'sans-serif'
  };

  // Internal text style cache
  var fontStyleCache = {};

  function processFontStyle(styleString) {
    if (fontStyleCache[styleString]) {
      return fontStyleCache[styleString];
    }

    var el = document.createElement('div');
    var style = el.style;
    try {
      style.font = styleString;
    } catch (ex) {
      // Ignore failures to set to invalid font.
    }

    return fontStyleCache[styleString] = {
      style: style.fontStyle || DEFAULT_STYLE.style,
      variant: style.fontVariant || DEFAULT_STYLE.variant,
      weight: style.fontWeight || DEFAULT_STYLE.weight,
      size: style.fontSize || DEFAULT_STYLE.size,
      family: style.fontFamily || DEFAULT_STYLE.family
    };
  }

  function getComputedStyle(style, element) {
    var computedStyle = {};

    for (var p in style) {
      computedStyle[p] = style[p];
    }

    // Compute the size
    var canvasFontSize = parseFloat(element.currentStyle.fontSize),
        fontSize = parseFloat(style.size);

    if (typeof style.size == 'number') {
      computedStyle.size = style.size;
    } else if (style.size.indexOf('px') != -1) {
      computedStyle.size = fontSize;
    } else if (style.size.indexOf('em') != -1) {
      computedStyle.size = canvasFontSize * fontSize;
    } else if(style.size.indexOf('%') != -1) {
      computedStyle.size = (canvasFontSize / 100) * fontSize;
    } else if (style.size.indexOf('pt') != -1) {
      computedStyle.size = fontSize / .75;
    } else {
      computedStyle.size = canvasFontSize;
    }

    // Different scaling between normal text and VML text. This was found using
    // trial and error to get the same size as non VML text.
    computedStyle.size *= 0.981;

    return computedStyle;
  }

  function buildStyle(style) {
    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +
        style.size + 'px ' + style.family;
  }

  function processLineCap(lineCap) {
    switch (lineCap) {
      case 'butt':
        return 'flat';
      case 'round':
        return 'round';
      case 'square':
      default:
        return 'square';
    }
  }

  /**
   * This class implements CanvasRenderingContext2D interface as described by
   * the WHATWG.
   * @param {HTMLElement} surfaceElement The element that the 2D context should
   * be associated with
   */
  function CanvasRenderingContext2D_(surfaceElement) {
    this.m_ = createMatrixIdentity();

    this.mStack_ = [];
    this.aStack_ = [];
    this.currentPath_ = [];

    // Canvas context properties
    this.strokeStyle = '#000';
    this.fillStyle = '#000';

    this.lineWidth = 1;
    this.lineJoin = 'miter';
    this.lineCap = 'butt';
    this.miterLimit = Z * 1;
    this.globalAlpha = 1;
    this.font = '10px sans-serif';
    this.textAlign = 'left';
    this.textBaseline = 'alphabetic';
    this.canvas = surfaceElement;

    var el = surfaceElement.ownerDocument.createElement('div');
    el.style.width =  surfaceElement.clientWidth + 'px';
    el.style.height = surfaceElement.clientHeight + 'px';
    el.style.overflow = 'hidden';
    el.style.position = 'absolute';
    surfaceElement.appendChild(el);

    this.element_ = el;
    this.arcScaleX_ = 1;
    this.arcScaleY_ = 1;
    this.lineScale_ = 1;
  }

  var contextPrototype = CanvasRenderingContext2D_.prototype;
  contextPrototype.clearRect = function() {
    if (this.textMeasureEl_) {
      this.textMeasureEl_.removeNode(true);
      this.textMeasureEl_ = null;
    }
    this.element_.innerHTML = '';
  };

  contextPrototype.beginPath = function() {
    // TODO: Branch current matrix so that save/restore has no effect
    //       as per safari docs.
    this.currentPath_ = [];
  };

  contextPrototype.moveTo = function(aX, aY) {
    var p = this.getCoords_(aX, aY);
    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
    this.currentX_ = p.x;
    this.currentY_ = p.y;
  };

  contextPrototype.lineTo = function(aX, aY) {
    var p = this.getCoords_(aX, aY);
    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});

    this.currentX_ = p.x;
    this.currentY_ = p.y;
  };

  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
                                            aCP2x, aCP2y,
                                            aX, aY) {
    var p = this.getCoords_(aX, aY);
    var cp1 = this.getCoords_(aCP1x, aCP1y);
    var cp2 = this.getCoords_(aCP2x, aCP2y);
    bezierCurveTo(this, cp1, cp2, p);
  };

  // Helper function that takes the already fixed cordinates.
  function bezierCurveTo(self, cp1, cp2, p) {
    self.currentPath_.push({
      type: 'bezierCurveTo',
      cp1x: cp1.x,
      cp1y: cp1.y,
      cp2x: cp2.x,
      cp2y: cp2.y,
      x: p.x,
      y: p.y
    });
    self.currentX_ = p.x;
    self.currentY_ = p.y;
  }

  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
    // the following is lifted almost directly from
    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes

    var cp = this.getCoords_(aCPx, aCPy);
    var p = this.getCoords_(aX, aY);

    var cp1 = {
      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
    };
    var cp2 = {
      x: cp1.x + (p.x - this.currentX_) / 3.0,
      y: cp1.y + (p.y - this.currentY_) / 3.0
    };

    bezierCurveTo(this, cp1, cp2, p);
  };

  contextPrototype.arc = function(aX, aY, aRadius,
                                  aStartAngle, aEndAngle, aClockwise) {
    aRadius *= Z;
    var arcType = aClockwise ? 'at' : 'wa';

    var xStart = aX + mc(aStartAngle) * aRadius - Z2;
    var yStart = aY + ms(aStartAngle) * aRadius - Z2;

    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;

    // IE won't render arches drawn counter clockwise if xStart == xEnd.
    if (xStart == xEnd && !aClockwise) {
      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
                       // that can be represented in binary
    }

    var p = this.getCoords_(aX, aY);
    var pStart = this.getCoords_(xStart, yStart);
    var pEnd = this.getCoords_(xEnd, yEnd);

    this.currentPath_.push({type: arcType,
                           x: p.x,
                           y: p.y,
                           radius: aRadius,
                           xStart: pStart.x,
                           yStart: pStart.y,
                           xEnd: pEnd.x,
                           yEnd: pEnd.y});

  };

  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
    this.moveTo(aX, aY);
    this.lineTo(aX + aWidth, aY);
    this.lineTo(aX + aWidth, aY + aHeight);
    this.lineTo(aX, aY + aHeight);
    this.closePath();
  };

  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
    var oldPath = this.currentPath_;
    this.beginPath();

    this.moveTo(aX, aY);
    this.lineTo(aX + aWidth, aY);
    this.lineTo(aX + aWidth, aY + aHeight);
    this.lineTo(aX, aY + aHeight);
    this.closePath();
    this.stroke();

    this.currentPath_ = oldPath;
  };

  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
    var oldPath = this.currentPath_;
    this.beginPath();

    this.moveTo(aX, aY);
    this.lineTo(aX + aWidth, aY);
    this.lineTo(aX + aWidth, aY + aHeight);
    this.lineTo(aX, aY + aHeight);
    this.closePath();
    this.fill();

    this.currentPath_ = oldPath;
  };

  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
    var gradient = new CanvasGradient_('gradient');
    gradient.x0_ = aX0;
    gradient.y0_ = aY0;
    gradient.x1_ = aX1;
    gradient.y1_ = aY1;
    return gradient;
  };

  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
                                                   aX1, aY1, aR1) {
    var gradient = new CanvasGradient_('gradientradial');
    gradient.x0_ = aX0;
    gradient.y0_ = aY0;
    gradient.r0_ = aR0;
    gradient.x1_ = aX1;
    gradient.y1_ = aY1;
    gradient.r1_ = aR1;
    return gradient;
  };

  contextPrototype.drawImage = function(image, var_args) {
    var dx, dy, dw, dh, sx, sy, sw, sh;

    // to find the original width we overide the width and height
    var oldRuntimeWidth = image.runtimeStyle.width;
    var oldRuntimeHeight = image.runtimeStyle.height;
    image.runtimeStyle.width = 'auto';
    image.runtimeStyle.height = 'auto';

    // get the original size
    var w = image.width;
    var h = image.height;

    // and remove overides
    image.runtimeStyle.width = oldRuntimeWidth;
    image.runtimeStyle.height = oldRuntimeHeight;

    if (arguments.length == 3) {
      dx = arguments[1];
      dy = arguments[2];
      sx = sy = 0;
      sw = dw = w;
      sh = dh = h;
    } else if (arguments.length == 5) {
      dx = arguments[1];
      dy = arguments[2];
      dw = arguments[3];
      dh = arguments[4];
      sx = sy = 0;
      sw = w;
      sh = h;
    } else if (arguments.length == 9) {
      sx = arguments[1];
      sy = arguments[2];
      sw = arguments[3];
      sh = arguments[4];
      dx = arguments[5];
      dy = arguments[6];
      dw = arguments[7];
      dh = arguments[8];
    } else {
      throw Error('Invalid number of arguments');
    }

    var d = this.getCoords_(dx, dy);

    var w2 = sw / 2;
    var h2 = sh / 2;

    var vmlStr = [];

    var W = 10;
    var H = 10;

    // For some reason that I've now forgotten, using divs didn't work
    vmlStr.push(' <g_vml_:group',
                ' coordsize="', Z * W, ',', Z * H, '"',
                ' coordorigin="0,0"' ,
                ' style="width:', W, 'px;height:', H, 'px;position:absolute;');

    // If filters are necessary (rotation exists), create them
    // filters are bog-slow, so only create them if abbsolutely necessary
    // The following check doesn't account for skews (which don't exist
    // in the canvas spec (yet) anyway.

    if (this.m_[0][0] != 1 || this.m_[0][1] ||
        this.m_[1][1] != 1 || this.m_[1][0]) {
      var filter = [];

      // Note the 12/21 reversal
      filter.push('M11=', this.m_[0][0], ',',
                  'M12=', this.m_[1][0], ',',
                  'M21=', this.m_[0][1], ',',
                  'M22=', this.m_[1][1], ',',
                  'Dx=', mr(d.x / Z), ',',
                  'Dy=', mr(d.y / Z), '');

      // Bounding box calculation (need to minimize displayed area so that
      // filters don't waste time on unused pixels.
      var max = d;
      var c2 = this.getCoords_(dx + dw, dy);
      var c3 = this.getCoords_(dx, dy + dh);
      var c4 = this.getCoords_(dx + dw, dy + dh);

      max.x = m.max(max.x, c2.x, c3.x, c4.x);
      max.y = m.max(max.y, c2.y, c3.y, c4.y);

      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
                  filter.join(''), ", sizingmethod='clip');");

    } else {
      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
    }

    vmlStr.push(' ">' ,
                '<g_vml_:image src="', image.src, '"',
                ' style="width:', Z * dw, 'px;',
                ' height:', Z * dh, 'px"',
                ' cropleft="', sx / w, '"',
                ' croptop="', sy / h, '"',
                ' cropright="', (w - sx - sw) / w, '"',
                ' cropbottom="', (h - sy - sh) / h, '"',
                ' />',
                '</g_vml_:group>');

    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
  };

  contextPrototype.stroke = function(aFill) {
    var W = 10;
    var H = 10;
    // Divide the shape into chunks if it's too long because IE has a limit
    // somewhere for how long a VML shape can be. This simple division does
    // not work with fills, only strokes, unfortunately.
    var chunkSize = 5000;

    var min = {x: null, y: null};
    var max = {x: null, y: null};

    for (var j = 0; j < this.currentPath_.length; j += chunkSize) {
      var lineStr = [];
      var lineOpen = false;

      lineStr.push('<g_vml_:shape',
                   ' filled="', !!aFill, '"',
                   ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
                   ' coordorigin="0,0"',
                   ' coordsize="', Z * W, ',', Z * H, '"',
                   ' stroked="', !aFill, '"',
                   ' path="');

      var newSeq = false;

      for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {
        if (i % chunkSize == 0 && i > 0) { // move into position for next chunk
          lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));
        }

        var p = this.currentPath_[i];
        var c;

        switch (p.type) {
          case 'moveTo':
            c = p;
            lineStr.push(' m ', mr(p.x), ',', mr(p.y));
            break;
          case 'lineTo':
            lineStr.push(' l ', mr(p.x), ',', mr(p.y));
            break;
          case 'close':
            lineStr.push(' x ');
            p = null;
            break;
          case 'bezierCurveTo':
            lineStr.push(' c ',
                         mr(p.cp1x), ',', mr(p.cp1y), ',',
                         mr(p.cp2x), ',', mr(p.cp2y), ',',
                         mr(p.x), ',', mr(p.y));
            break;
          case 'at':
          case 'wa':
            lineStr.push(' ', p.type, ' ',
                         mr(p.x - this.arcScaleX_ * p.radius), ',',
                         mr(p.y - this.arcScaleY_ * p.radius), ' ',
                         mr(p.x + this.arcScaleX_ * p.radius), ',',
                         mr(p.y + this.arcScaleY_ * p.radius), ' ',
                         mr(p.xStart), ',', mr(p.yStart), ' ',
                         mr(p.xEnd), ',', mr(p.yEnd));
            break;
        }
  
  
        // TODO: Following is broken for curves due to
        //       move to proper paths.
  
        // Figure out dimensions so we can do gradient fills
        // properly
        if (p) {
          if (min.x == null || p.x < min.x) {
            min.x = p.x;
          }
          if (max.x == null || p.x > max.x) {
            max.x = p.x;
          }
          if (min.y == null || p.y < min.y) {
            min.y = p.y;
          }
          if (max.y == null || p.y > max.y) {
            max.y = p.y;
          }
        }
      }
      lineStr.push(' ">');
  
      if (!aFill) {
        appendStroke(this, lineStr);
      } else {
        appendFill(this, lineStr, min, max);
      }
  
      lineStr.push('</g_vml_:shape>');
  
      this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
    }
  };

  function appendStroke(ctx, lineStr) {
    var a = processStyle(ctx.strokeStyle);
    var color = a.color;
    var opacity = a.alpha * ctx.globalAlpha;
    var lineWidth = ctx.lineScale_ * ctx.lineWidth;

    // VML cannot correctly render a line if the width is less than 1px.
    // In that case, we dilute the color to make the line look thinner.
    if (lineWidth < 1) {
      opacity *= lineWidth;
    }

    lineStr.push(
      '<g_vml_:stroke',
      ' opacity="', opacity, '"',
      ' joinstyle="', ctx.lineJoin, '"',
      ' miterlimit="', ctx.miterLimit, '"',
      ' endcap="', processLineCap(ctx.lineCap), '"',
      ' weight="', lineWidth, 'px"',
      ' color="', color, '" />'
    );
  }

  function appendFill(ctx, lineStr, min, max) {
    var fillStyle = ctx.fillStyle;
    var arcScaleX = ctx.arcScaleX_;
    var arcScaleY = ctx.arcScaleY_;
    var width = max.x - min.x;
    var height = max.y - min.y;
    if (fillStyle instanceof CanvasGradient_) {
      // TODO: Gradients transformed with the transformation matrix.
      var angle = 0;
      var focus = {x: 0, y: 0};

      // additional offset
      var shift = 0;
      // scale factor for offset
      var expansion = 1;

      if (fillStyle.type_ == 'gradient') {
        var x0 = fillStyle.x0_ / arcScaleX;
        var y0 = fillStyle.y0_ / arcScaleY;
        var x1 = fillStyle.x1_ / arcScaleX;
        var y1 = fillStyle.y1_ / arcScaleY;
        var p0 = ctx.getCoords_(x0, y0);
        var p1 = ctx.getCoords_(x1, y1);
        var dx = p1.x - p0.x;
        var dy = p1.y - p0.y;
        angle = Math.atan2(dx, dy) * 180 / Math.PI;

        // The angle should be a non-negative number.
        if (angle < 0) {
          angle += 360;
        }

        // Very small angles produce an unexpected result because they are
        // converted to a scientific notation string.
        if (angle < 1e-6) {
          angle = 0;
        }
      } else {
        var p0 = ctx.getCoords_(fillStyle.x0_, fillStyle.y0_);
        focus = {
          x: (p0.x - min.x) / width,
          y: (p0.y - min.y) / height
        };

        width  /= arcScaleX * Z;
        height /= arcScaleY * Z;
        var dimension = m.max(width, height);
        shift = 2 * fillStyle.r0_ / dimension;
        expansion = 2 * fillStyle.r1_ / dimension - shift;
      }

      // We need to sort the color stops in ascending order by offset,
      // otherwise IE won't interpret it correctly.
      var stops = fillStyle.colors_;
      stops.sort(function(cs1, cs2) {
        return cs1.offset - cs2.offset;
      });

      var length = stops.length;
      var color1 = stops[0].color;
      var color2 = stops[length - 1].color;
      var opacity1 = stops[0].alpha * ctx.globalAlpha;
      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;

      var colors = [];
      for (var i = 0; i < length; i++) {
        var stop = stops[i];
        colors.push(stop.offset * expansion + shift + ' ' + stop.color);
      }

      // When colors attribute is used, the meanings of opacity and o:opacity2
      // are reversed.
      lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
                   ' method="none" focus="100%"',
                   ' color="', color1, '"',
                   ' color2="', color2, '"',
                   ' colors="', colors.join(','), '"',
                   ' opacity="', opacity2, '"',
                   ' g_o_:opacity2="', opacity1, '"',
                   ' angle="', angle, '"',
                   ' focusposition="', focus.x, ',', focus.y, '" />');
    } else if (fillStyle instanceof CanvasPattern_) {
      if (width && height) {
        var deltaLeft = -min.x;
        var deltaTop = -min.y;
        lineStr.push('<g_vml_:fill',
                     ' position="',
                     deltaLeft / width * arcScaleX * arcScaleX, ',',
                     deltaTop / height * arcScaleY * arcScaleY, '"',
                     ' type="tile"',
                     // TODO: Figure out the correct size to fit the scale.
                     //' size="', w, 'px ', h, 'px"',
                     ' src="', fillStyle.src_, '" />');
       }
    } else {
      var a = processStyle(ctx.fillStyle);
      var color = a.color;
      var opacity = a.alpha * ctx.globalAlpha;
      lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
                   '" />');
    }
  }

  contextPrototype.fill = function() {
    this.stroke(true);
  };

  contextPrototype.closePath = function() {
    this.currentPath_.push({type: 'close'});
  };

  /**
   * @private
   */
  contextPrototype.getCoords_ = function(aX, aY) {
    var m = this.m_;
    return {
      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
    };
  };

  contextPrototype.save = function() {
    var o = {};
    copyState(this, o);
    this.aStack_.push(o);
    this.mStack_.push(this.m_);
    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
  };

  contextPrototype.restore = function() {
    if (this.aStack_.length) {
      copyState(this.aStack_.pop(), this);
      this.m_ = this.mStack_.pop();
    }
  };

  function matrixIsFinite(m) {
    return isFinite(m[0][0]) && isFinite(m[0][1]) &&
        isFinite(m[1][0]) && isFinite(m[1][1]) &&
        isFinite(m[2][0]) && isFinite(m[2][1]);
  }

  function setM(ctx, m, updateLineScale) {
    if (!matrixIsFinite(m)) {
      return;
    }
    ctx.m_ = m;

    if (updateLineScale) {
      // Get the line scale.
      // Determinant of this.m_ means how much the area is enlarged by the
      // transformation. So its square root can be used as a scale factor
      // for width.
      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
      ctx.lineScale_ = sqrt(abs(det));
    }
  }

  contextPrototype.translate = function(aX, aY) {
    var m1 = [
      [1,  0,  0],
      [0,  1,  0],
      [aX, aY, 1]
    ];

    setM(this, matrixMultiply(m1, this.m_), false);
  };

  contextPrototype.rotate = function(aRot) {
    var c = mc(aRot);
    var s = ms(aRot);

    var m1 = [
      [c,  s, 0],
      [-s, c, 0],
      [0,  0, 1]
    ];

    setM(this, matrixMultiply(m1, this.m_), false);
  };

  contextPrototype.scale = function(aX, aY) {
    this.arcScaleX_ *= aX;
    this.arcScaleY_ *= aY;
    var m1 = [
      [aX, 0,  0],
      [0,  aY, 0],
      [0,  0,  1]
    ];

    setM(this, matrixMultiply(m1, this.m_), true);
  };

  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
    var m1 = [
      [m11, m12, 0],
      [m21, m22, 0],
      [dx,  dy,  1]
    ];

    setM(this, matrixMultiply(m1, this.m_), true);
  };

  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
    var m = [
      [m11, m12, 0],
      [m21, m22, 0],
      [dx,  dy,  1]
    ];

    setM(this, m, true);
  };

  /**
   * The text drawing function.
   * The maxWidth argument isn't taken in account, since no browser supports
   * it yet.
   */
  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {
    var m = this.m_,
        delta = 1000,
        left = 0,
        right = delta,
        offset = {x: 0, y: 0},
        lineStr = [];

    var fontStyle = getComputedStyle(processFontStyle(this.font),
                                     this.element_);

    var fontStyleString = buildStyle(fontStyle);

    var elementStyle = this.element_.currentStyle;
    var textAlign = this.textAlign.toLowerCase();
    switch (textAlign) {
      case 'left':
      case 'center':
      case 'right':
        break;
      case 'end':
        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
        break;
      case 'start':
        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
        break;
      default:
        textAlign = 'left';
    }

    // 1.75 is an arbitrary number, as there is no info about the text baseline
    switch (this.textBaseline) {
      case 'hanging':
      case 'top':
        offset.y = fontStyle.size / 1.75;
        break;
      case 'middle':
        break;
      default:
      case null:
      case 'alphabetic':
      case 'ideographic':
      case 'bottom':
        offset.y = -fontStyle.size / 2.25;
        break;
    }

    switch(textAlign) {
      case 'right':
        left = delta;
        right = 0.05;
        break;
      case 'center':
        left = right = delta / 2;
        break;
    }

    var d = this.getCoords_(x + offset.x, y + offset.y);

    lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',
                 ' coordsize="100 100" coordorigin="0 0"',
                 ' filled="', !stroke, '" stroked="', !!stroke,
                 '" style="position:absolute;width:1px;height:1px;">');

    if (stroke) {
      appendStroke(this, lineStr);
    } else {
      // TODO: Fix the min and max params.
      appendFill(this, lineStr, {x: -left, y: 0},
                 {x: right, y: fontStyle.size});
    }

    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +
                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';

    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);

    lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',
                 ' offset="', skewOffset, '" origin="', left ,' 0" />',
                 '<g_vml_:path textpathok="true" />',
                 '<g_vml_:textpath on="true" string="',
                 encodeHtmlAttribute(text),
                 '" style="v-text-align:', textAlign,
                 ';font:', encodeHtmlAttribute(fontStyleString),
                 '" /></g_vml_:line>');

    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  };

  contextPrototype.fillText = function(text, x, y, maxWidth) {
    this.drawText_(text, x, y, maxWidth, false);
  };

  contextPrototype.strokeText = function(text, x, y, maxWidth) {
    this.drawText_(text, x, y, maxWidth, true);
  };

  contextPrototype.measureText = function(text) {
    if (!this.textMeasureEl_) {
      var s = '<span style="position:absolute;' +
          'top:-20000px;left:0;padding:0;margin:0;border:none;' +
          'white-space:pre;"></span>';
      this.element_.insertAdjacentHTML('beforeEnd', s);
      this.textMeasureEl_ = this.element_.lastChild;
    }
    var doc = this.element_.ownerDocument;
    this.textMeasureEl_.innerHTML = '';
    this.textMeasureEl_.style.font = this.font;
    // Don't use innerHTML or innerText because they allow markup/whitespace.
    this.textMeasureEl_.appendChild(doc.createTextNode(text));
    return {width: this.textMeasureEl_.offsetWidth};
  };

  /******** STUBS ********/
  contextPrototype.clip = function() {
    // TODO: Implement
  };

  contextPrototype.arcTo = function() {
    // TODO: Implement
  };

  contextPrototype.createPattern = function(image, repetition) {
    return new CanvasPattern_(image, repetition);
  };

  // Gradient / Pattern Stubs
  function CanvasGradient_(aType) {
    this.type_ = aType;
    this.x0_ = 0;
    this.y0_ = 0;
    this.r0_ = 0;
    this.x1_ = 0;
    this.y1_ = 0;
    this.r1_ = 0;
    this.colors_ = [];
  }

  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
    aColor = processStyle(aColor);
    this.colors_.push({offset: aOffset,
                       color: aColor.color,
                       alpha: aColor.alpha});
  };

  function CanvasPattern_(image, repetition) {
    assertImageIsValid(image);
    switch (repetition) {
      case 'repeat':
      case null:
      case '':
        this.repetition_ = 'repeat';
        break
      case 'repeat-x':
      case 'repeat-y':
      case 'no-repeat':
        this.repetition_ = repetition;
        break;
      default:
        throwException('SYNTAX_ERR');
    }

    this.src_ = image.src;
    this.width_ = image.width;
    this.height_ = image.height;
  }

  function throwException(s) {
    throw new DOMException_(s);
  }

  function assertImageIsValid(img) {
    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
      throwException('TYPE_MISMATCH_ERR');
    }
    if (img.readyState != 'complete') {
      throwException('INVALID_STATE_ERR');
    }
  }

  function DOMException_(s) {
    this.code = this[s];
    this.message = s +': DOM Exception ' + this.code;
  }
  var p = DOMException_.prototype = new Error;
  p.INDEX_SIZE_ERR = 1;
  p.DOMSTRING_SIZE_ERR = 2;
  p.HIERARCHY_REQUEST_ERR = 3;
  p.WRONG_DOCUMENT_ERR = 4;
  p.INVALID_CHARACTER_ERR = 5;
  p.NO_DATA_ALLOWED_ERR = 6;
  p.NO_MODIFICATION_ALLOWED_ERR = 7;
  p.NOT_FOUND_ERR = 8;
  p.NOT_SUPPORTED_ERR = 9;
  p.INUSE_ATTRIBUTE_ERR = 10;
  p.INVALID_STATE_ERR = 11;
  p.SYNTAX_ERR = 12;
  p.INVALID_MODIFICATION_ERR = 13;
  p.NAMESPACE_ERR = 14;
  p.INVALID_ACCESS_ERR = 15;
  p.VALIDATION_ERR = 16;
  p.TYPE_MISMATCH_ERR = 17;

  // set up externs
  G_vmlCanvasManager = G_vmlCanvasManager_;
  CanvasRenderingContext2D = CanvasRenderingContext2D_;
  CanvasGradient = CanvasGradient_;
  CanvasPattern = CanvasPattern_;
  DOMException = DOMException_;
})();

} // if

Added Site/Site_W/flot/excanvas.min.js.



>
1
if(!document.createElement("canvas").getContext){(function(){var z=Math;var K=z.round;var J=z.sin;var U=z.cos;var b=z.abs;var k=z.sqrt;var D=10;var F=D/2;function T(){return this.context_||(this.context_=new W(this))}var O=Array.prototype.slice;function G(i,j,m){var Z=O.call(arguments,2);return function(){return i.apply(j,Z.concat(O.call(arguments)))}}function AD(Z){return String(Z).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function r(i){if(!i.namespaces.g_vml_){i.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML")}if(!i.namespaces.g_o_){i.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML")}if(!i.styleSheets.ex_canvas_){var Z=i.createStyleSheet();Z.owningElement.id="ex_canvas_";Z.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}r(document);var E={init:function(Z){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var i=Z||document;i.createElement("canvas");i.attachEvent("onreadystatechange",G(this.init_,this,i))}},init_:function(m){var j=m.getElementsByTagName("canvas");for(var Z=0;Z<j.length;Z++){this.initElement(j[Z])}},initElement:function(i){if(!i.getContext){i.getContext=T;r(i.ownerDocument);i.innerHTML="";i.attachEvent("onpropertychange",S);i.attachEvent("onresize",w);var Z=i.attributes;if(Z.width&&Z.width.specified){i.style.width=Z.width.nodeValue+"px"}else{i.width=i.clientWidth}if(Z.height&&Z.height.specified){i.style.height=Z.height.nodeValue+"px"}else{i.height=i.clientHeight}}return i}};function S(i){var Z=i.srcElement;switch(i.propertyName){case"width":Z.getContext().clearRect();Z.style.width=Z.attributes.width.nodeValue+"px";Z.firstChild.style.width=Z.clientWidth+"px";break;case"height":Z.getContext().clearRect();Z.style.height=Z.attributes.height.nodeValue+"px";Z.firstChild.style.height=Z.clientHeight+"px";break}}function w(i){var Z=i.srcElement;if(Z.firstChild){Z.firstChild.style.width=Z.clientWidth+"px";Z.firstChild.style.height=Z.clientHeight+"px"}}E.init();var I=[];for(var AC=0;AC<16;AC++){for(var AB=0;AB<16;AB++){I[AC*16+AB]=AC.toString(16)+AB.toString(16)}}function V(){return[[1,0,0],[0,1,0],[0,0,1]]}function d(m,j){var i=V();for(var Z=0;Z<3;Z++){for(var AF=0;AF<3;AF++){var p=0;for(var AE=0;AE<3;AE++){p+=m[Z][AE]*j[AE][AF]}i[Z][AF]=p}}return i}function Q(i,Z){Z.fillStyle=i.fillStyle;Z.lineCap=i.lineCap;Z.lineJoin=i.lineJoin;Z.lineWidth=i.lineWidth;Z.miterLimit=i.miterLimit;Z.shadowBlur=i.shadowBlur;Z.shadowColor=i.shadowColor;Z.shadowOffsetX=i.shadowOffsetX;Z.shadowOffsetY=i.shadowOffsetY;Z.strokeStyle=i.strokeStyle;Z.globalAlpha=i.globalAlpha;Z.font=i.font;Z.textAlign=i.textAlign;Z.textBaseline=i.textBaseline;Z.arcScaleX_=i.arcScaleX_;Z.arcScaleY_=i.arcScaleY_;Z.lineScale_=i.lineScale_}var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function g(i){var m=i.indexOf("(",3);var Z=i.indexOf(")",m+1);var j=i.substring(m+1,Z).split(",");if(j.length==4&&i.substr(3,1)=="a"){alpha=Number(j[3])}else{j[3]=1}return j}function C(Z){return parseFloat(Z)/100}function N(i,j,Z){return Math.min(Z,Math.max(j,i))}function c(AF){var j,i,Z;h=parseFloat(AF[0])/360%360;if(h<0){h++}s=N(C(AF[1]),0,1);l=N(C(AF[2]),0,1);if(s==0){j=i=Z=l}else{var m=l<0.5?l*(1+s):l+s-l*s;var AE=2*l-m;j=A(AE,m,h+1/3);i=A(AE,m,h);Z=A(AE,m,h-1/3)}return"#"+I[Math.floor(j*255)]+I[Math.floor(i*255)]+I[Math.floor(Z*255)]}function A(i,Z,j){if(j<0){j++}if(j>1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" <g_vml_:group",' coordsize="',D*Z,",",D*AE,'"',' coordorigin="0,0"',' style="width:',Z,"px;height:",AE,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var p=[];p.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",K(AW.x/D),",","Dy=",K(AW.y/D),"");var AS=AW;var AR=this.getCoords_(AH+AJ,AF);var AP=this.getCoords_(AH,AF+AV);var AL=this.getCoords_(AH+AJ,AF+AV);AS.x=z.max(AS.x,AR.x,AP.x,AL.x);AS.y=z.max(AS.y,AR.y,AP.y,AL.y);AU.push("padding:0 ",K(AS.x/D),"px ",K(AS.y/D),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",p.join(""),", sizingmethod='clip');")}else{AU.push("top:",K(AW.y/D),"px;left:",K(AW.x/D),"px;")}AU.push(' ">','<g_vml_:image src="',AO.src,'"',' style="width:',D*AJ,"px;"," height:",D*AV,'px"',' cropleft="',AM/AG,'"',' croptop="',AK/AT,'"',' cropright="',(AG-AM-AQ)/AG,'"',' cropbottom="',(AT-AK-AX)/AT,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AH<this.currentPath_.length;AH+=AE){var AK=[];var AF=false;AK.push("<g_vml_:shape",' filled="',!!AM,'"',' style="position:absolute;width:',m,"px;height:",AN,'px;"',' coordorigin="0,0"',' coordsize="',D*m,",",D*AN,'"',' stroked="',!AM,'"',' path="');var AO=false;for(var AI=AH;AI<Math.min(AH+AE,this.currentPath_.length);AI++){if(AI%AE==0&&AI>0){AK.push(" m ",K(this.currentPath_[AI-1].x),",",K(this.currentPath_[AI-1].y))}var Z=this.currentPath_[AI];var AJ;switch(Z.type){case"moveTo":AJ=Z;AK.push(" m ",K(Z.x),",",K(Z.y));break;case"lineTo":AK.push(" l ",K(Z.x),",",K(Z.y));break;case"close":AK.push(" x ");Z=null;break;case"bezierCurveTo":AK.push(" c ",K(Z.cp1x),",",K(Z.cp1y),",",K(Z.cp2x),",",K(Z.cp2y),",",K(Z.x),",",K(Z.y));break;case"at":case"wa":AK.push(" ",Z.type," ",K(Z.x-this.arcScaleX_*Z.radius),",",K(Z.y-this.arcScaleY_*Z.radius)," ",K(Z.x+this.arcScaleX_*Z.radius),",",K(Z.y+this.arcScaleY_*Z.radius)," ",K(Z.xStart),",",K(Z.yStart)," ",K(Z.xEnd),",",K(Z.yEnd));break}if(Z){if(AG.x==null||Z.x<AG.x){AG.x=Z.x}if(AL.x==null||Z.x>AL.x){AL.x=Z.x}if(AG.y==null||Z.y<AG.y){AG.y=Z.y}if(AL.y==null||Z.y>AL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("<g_vml_:stroke",' opacity="',p,'"',' joinstyle="',j.lineJoin,'"',' miterlimit="',j.miterLimit,'"',' endcap="',t(j.lineCap),'"',' weight="',Z,'px"',' color="',m,'" />')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae<AN;Ae++){var AM=AS[Ae];Ab.push(AM.offset*AK+AU+" "+AM.color)}AG.push('<g_vml_:fill type="',AH.type_,'"',' method="none" focus="100%"',' color="',AR,'"',' color2="',AQ,'"',' colors="',Ab.join(","),'"',' opacity="',AV,'"',' g_o_:opacity2="',AW,'"',' angle="',AL,'"',' focusposition="',Ac.x,",",Ac.y,'" />')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("<g_vml_:fill",' position="',AF/Z*AY*AY,",",AZ/m*AX*AX,'"',' type="tile"',' src="',AH.src_,'" />')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('<g_vml_:fill color="',AT,'" opacity="',Ad,'" />')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('<g_vml_:line from="',-i,' 0" to="',AP,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!AG,'" stroked="',!!AG,'" style="position:absolute;width:1px;height:1px;">');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('<g_vml_:skew on="t" matrix="',AL,'" ',' offset="',AJ,'" origin="',i,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',AD(AK),'" style="v-text-align:',p,";font:",AD(j),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()};

Added Site/Site_W/flot/jquery.colorhelpers.js.





























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/* Plugin for jQuery for working with colors.
 * 
 * Version 1.0.
 * 
 * Inspiration from jQuery color animation plugin by John Resig.
 *
 * Released under the MIT license by Ole Laursen, October 2009.
 *
 * Examples:
 *
 *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
 *   var c = $.color.extract($("#mydiv"), 'background-color');
 *   console.log(c.r, c.g, c.b, c.a);
 *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
 *
 * Note that .scale() and .add() work in-place instead of returning
 * new objects.
 */ 

(function() {
    jQuery.color = {};

    // construct color object with some convenient chainable helpers
    jQuery.color.make = function (r, g, b, a) {
        var o = {};
        o.r = r || 0;
        o.g = g || 0;
        o.b = b || 0;
        o.a = a != null ? a : 1;

        o.add = function (c, d) {
            for (var i = 0; i < c.length; ++i)
                o[c.charAt(i)] += d;
            return o.normalize();
        };
        
        o.scale = function (c, f) {
            for (var i = 0; i < c.length; ++i)
                o[c.charAt(i)] *= f;
            return o.normalize();
        };
        
        o.toString = function () {
            if (o.a >= 1.0) {
                return "rgb("+[o.r, o.g, o.b].join(",")+")";
            } else {
                return "rgba("+[o.r, o.g, o.b, o.a].join(",")+")";
            }
        };

        o.normalize = function () {
            function clamp(min, value, max) {
                return value < min ? min: (value > max ? max: value);
            }
            
            o.r = clamp(0, parseInt(o.r), 255);
            o.g = clamp(0, parseInt(o.g), 255);
            o.b = clamp(0, parseInt(o.b), 255);
            o.a = clamp(0, o.a, 1);
            return o;
        };

        o.clone = function () {
            return jQuery.color.make(o.r, o.b, o.g, o.a);
        };

        return o.normalize();
    }

    // extract CSS color property from element, going up in the DOM
    // if it's "transparent"
    jQuery.color.extract = function (elem, css) {
        var c;
        do {
            c = elem.css(css).toLowerCase();
            // keep going until we find an element that has color, or
            // we hit the body
            if (c != '' && c != 'transparent')
                break;
            elem = elem.parent();
        } while (!jQuery.nodeName(elem.get(0), "body"));

        // catch Safari's way of signalling transparent
        if (c == "rgba(0, 0, 0, 0)")
            c = "transparent";
        
        return jQuery.color.parse(c);
    }
    
    // parse CSS color string (like "rgb(10, 32, 43)" or "#fff"),
    // returns color object
    jQuery.color.parse = function (str) {
        var res, m = jQuery.color.make;

        // Look for rgb(num,num,num)
        if (res = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))
            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10));
        
        // Look for rgba(num,num,num,num)
        if (res = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4]));
            
        // Look for rgb(num%,num%,num%)
        if (res = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))
            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55);

        // Look for rgba(num%,num%,num%,num)
        if (res = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4]));
        
        // Look for #a0b1c2
        if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))
            return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16));

        // Look for #fff
        if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))
            return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16));

        // Otherwise, we're most likely dealing with a named color
        var name = jQuery.trim(str).toLowerCase();
        if (name == "transparent")
            return m(255, 255, 255, 0);
        else {
            res = lookupColors[name];
            return m(res[0], res[1], res[2]);
        }
    }
    
    var lookupColors = {
        aqua:[0,255,255],
        azure:[240,255,255],
        beige:[245,245,220],
        black:[0,0,0],
        blue:[0,0,255],
        brown:[165,42,42],
        cyan:[0,255,255],
        darkblue:[0,0,139],
        darkcyan:[0,139,139],
        darkgrey:[169,169,169],
        darkgreen:[0,100,0],
        darkkhaki:[189,183,107],
        darkmagenta:[139,0,139],
        darkolivegreen:[85,107,47],
        darkorange:[255,140,0],
        darkorchid:[153,50,204],
        darkred:[139,0,0],
        darksalmon:[233,150,122],
        darkviolet:[148,0,211],
        fuchsia:[255,0,255],
        gold:[255,215,0],
        green:[0,128,0],
        indigo:[75,0,130],
        khaki:[240,230,140],
        lightblue:[173,216,230],
        lightcyan:[224,255,255],
        lightgreen:[144,238,144],
        lightgrey:[211,211,211],
        lightpink:[255,182,193],
        lightyellow:[255,255,224],
        lime:[0,255,0],
        magenta:[255,0,255],
        maroon:[128,0,0],
        navy:[0,0,128],
        olive:[128,128,0],
        orange:[255,165,0],
        pink:[255,192,203],
        purple:[128,0,128],
        violet:[128,0,128],
        red:[255,0,0],
        silver:[192,192,192],
        white:[255,255,255],
        yellow:[255,255,0]
    };    
})();

Added Site/Site_W/flot/jquery.colorhelpers.min.js.



>
1
(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]+=H}return F.normalize()};F.scale=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]*=H}return F.normalize()};F.toString=function(){if(F.a>=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return J<I?I:(J>H?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})();

Added Site/Site_W/flot/jquery.flot.crosshair.js.

























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
Flot plugin for showing a crosshair, thin lines, when the mouse hovers
over the plot.

  crosshair: {
    mode: null or "x" or "y" or "xy"
    color: color
    lineWidth: number
  }

Set the mode to one of "x", "y" or "xy". The "x" mode enables a
vertical crosshair that lets you trace the values on the x axis, "y"
enables a horizontal crosshair and "xy" enables them both. "color" is
the color of the crosshair (default is "rgba(170, 0, 0, 0.80)"),
"lineWidth" is the width of the drawn lines (default is 1).

The plugin also adds four public methods:

  - setCrosshair(pos)

    Set the position of the crosshair. Note that this is cleared if
    the user moves the mouse. "pos" should be on the form { x: xpos,
    y: ypos } (or x2 and y2 if you're using the secondary axes), which
    is coincidentally the same format as what you get from a "plothover"
    event. If "pos" is null, the crosshair is cleared.

  - clearCrosshair()

    Clear the crosshair.

  - lockCrosshair(pos)

    Cause the crosshair to lock to the current location, no longer
    updating if the user moves the mouse. Optionally supply a position
    (passed on to setCrosshair()) to move it to.

    Example usage:
      var myFlot = $.plot( $("#graph"), ..., { crosshair: { mode: "x" } } };
      $("#graph").bind("plothover", function (evt, position, item) {
        if (item) {
          // Lock the crosshair to the data point being hovered
          myFlot.lockCrosshair({ x: item.datapoint[0], y: item.datapoint[1] });
        }
        else {
          // Return normal crosshair operation
          myFlot.unlockCrosshair();
        }
      });

  - unlockCrosshair()

    Free the crosshair to move again after locking it.
*/

(function ($) {
    var options = {
        crosshair: {
            mode: null, // one of null, "x", "y" or "xy",
            color: "rgba(170, 0, 0, 0.80)",
            lineWidth: 1
        }
    };
    
    function init(plot) {
        // position of crosshair in pixels
        var crosshair = { x: -1, y: -1, locked: false };

        plot.setCrosshair = function setCrosshair(pos) {
            if (!pos)
                crosshair.x = -1;
            else {
                var axes = plot.getAxes();
                
                crosshair.x = Math.max(0, Math.min(pos.x != null ? axes.xaxis.p2c(pos.x) : axes.x2axis.p2c(pos.x2), plot.width()));
                crosshair.y = Math.max(0, Math.min(pos.y != null ? axes.yaxis.p2c(pos.y) : axes.y2axis.p2c(pos.y2), plot.height()));
            }
            
            plot.triggerRedrawOverlay();
        };
        
        plot.clearCrosshair = plot.setCrosshair; // passes null for pos
        
        plot.lockCrosshair = function lockCrosshair(pos) {
            if (pos)
                plot.setCrosshair(pos);
            crosshair.locked = true;
        }

        plot.unlockCrosshair = function unlockCrosshair() {
            crosshair.locked = false;
        }

        plot.hooks.bindEvents.push(function (plot, eventHolder) {
            if (!plot.getOptions().crosshair.mode)
                return;

            eventHolder.mouseout(function () {
                if (crosshair.x != -1) {
                    crosshair.x = -1;
                    plot.triggerRedrawOverlay();
                }
            });
            
            eventHolder.mousemove(function (e) {
                if (plot.getSelection && plot.getSelection()) {
                    crosshair.x = -1; // hide the crosshair while selecting
                    return;
                }
                
                if (crosshair.locked)
                    return;
                
                var offset = plot.offset();
                crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));
                crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));
                plot.triggerRedrawOverlay();
            });
        });

        plot.hooks.drawOverlay.push(function (plot, ctx) {
            var c = plot.getOptions().crosshair;
            if (!c.mode)
                return;

            var plotOffset = plot.getPlotOffset();
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            if (crosshair.x != -1) {
                ctx.strokeStyle = c.color;
                ctx.lineWidth = c.lineWidth;
                ctx.lineJoin = "round";

                ctx.beginPath();
                if (c.mode.indexOf("x") != -1) {
                    ctx.moveTo(crosshair.x, 0);
                    ctx.lineTo(crosshair.x, plot.height());
                }
                if (c.mode.indexOf("y") != -1) {
                    ctx.moveTo(0, crosshair.y);
                    ctx.lineTo(plot.width(), crosshair.y);
                }
                ctx.stroke();
            }
            ctx.restore();
        });
    }
    
    $.plot.plugins.push({
        init: init,
        options: options,
        name: 'crosshair',
        version: '1.0'
    });
})(jQuery);

Added Site/Site_W/flot/jquery.flot.crosshair.min.js.



>
1
(function(B){var A={crosshair:{mode:null,color:"rgba(170, 0, 0, 0.80)",lineWidth:1}};function C(G){var H={x:-1,y:-1,locked:false};G.setCrosshair=function D(J){if(!J){H.x=-1}else{var I=G.getAxes();H.x=Math.max(0,Math.min(J.x!=null?I.xaxis.p2c(J.x):I.x2axis.p2c(J.x2),G.width()));H.y=Math.max(0,Math.min(J.y!=null?I.yaxis.p2c(J.y):I.y2axis.p2c(J.y2),G.height()))}G.triggerRedrawOverlay()};G.clearCrosshair=G.setCrosshair;G.lockCrosshair=function E(I){if(I){G.setCrosshair(I)}H.locked=true};G.unlockCrosshair=function F(){H.locked=false};G.hooks.bindEvents.push(function(J,I){if(!J.getOptions().crosshair.mode){return }I.mouseout(function(){if(H.x!=-1){H.x=-1;J.triggerRedrawOverlay()}});I.mousemove(function(K){if(J.getSelection&&J.getSelection()){H.x=-1;return }if(H.locked){return }var L=J.offset();H.x=Math.max(0,Math.min(K.pageX-L.left,J.width()));H.y=Math.max(0,Math.min(K.pageY-L.top,J.height()));J.triggerRedrawOverlay()})});G.hooks.drawOverlay.push(function(K,I){var L=K.getOptions().crosshair;if(!L.mode){return }var J=K.getPlotOffset();I.save();I.translate(J.left,J.top);if(H.x!=-1){I.strokeStyle=L.color;I.lineWidth=L.lineWidth;I.lineJoin="round";I.beginPath();if(L.mode.indexOf("x")!=-1){I.moveTo(H.x,0);I.lineTo(H.x,K.height())}if(L.mode.indexOf("y")!=-1){I.moveTo(0,H.y);I.lineTo(K.width(),H.y)}I.stroke()}I.restore()})}B.plot.plugins.push({init:C,options:A,name:"crosshair",version:"1.0"})})(jQuery);

Added Site/Site_W/flot/jquery.flot.image.js.



























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
/*
Flot plugin for plotting images, e.g. useful for putting ticks on a
prerendered complex visualization.

The data syntax is [[image, x1, y1, x2, y2], ...] where (x1, y1) and
(x2, y2) are where you intend the two opposite corners of the image to
end up in the plot. Image must be a fully loaded Javascript image (you
can make one with new Image()). If the image is not complete, it's
skipped when plotting.

There are two helpers included for retrieving images. The easiest work
the way that you put in URLs instead of images in the data (like
["myimage.png", 0, 0, 10, 10]), then call $.plot.image.loadData(data,
options, callback) where data and options are the same as you pass in
to $.plot. This loads the images, replaces the URLs in the data with
the corresponding images and calls "callback" when all images are
loaded (or failed loading). In the callback, you can then call $.plot
with the data set. See the included example.

A more low-level helper, $.plot.image.load(urls, callback) is also
included. Given a list of URLs, it calls callback with an object
mapping from URL to Image object when all images are loaded or have
failed loading.

Options for the plugin are

  series: {
      images: {
          show: boolean
          anchor: "corner" or "center"
          alpha: [0,1]
      }
  }

which can be specified for a specific series

  $.plot($("#placeholder"), [{ data: [ ... ], images: { ... } ])

Note that because the data format is different from usual data points,
you can't use images with anything else in a specific data series.

Setting "anchor" to "center" causes the pixels in the image to be
anchored at the corner pixel centers inside of at the pixel corners,
effectively letting half a pixel stick out to each side in the plot.


A possible future direction could be support for tiling for large
images (like Google Maps).

*/

(function ($) {
    var options = {
        series: {
            images: {
                show: false,
                alpha: 1,
                anchor: "corner" // or "center"
            }
        }
    };

    $.plot.image = {};

    $.plot.image.loadDataImages = function (series, options, callback) {
        var urls = [], points = [];

        var defaultShow = options.series.images.show;
        
        $.each(series, function (i, s) {
            if (!(defaultShow || s.images.show))
                return;
            
            if (s.data)
                s = s.data;

            $.each(s, function (i, p) {
                if (typeof p[0] == "string") {
                    urls.push(p[0]);
                    points.push(p);
                }
            });
        });

        $.plot.image.load(urls, function (loadedImages) {
            $.each(points, function (i, p) {
                var url = p[0];
                if (loadedImages[url])
                    p[0] = loadedImages[url];
            });

            callback();
        });
    }
    
    $.plot.image.load = function (urls, callback) {
        var missing = urls.length, loaded = {};
        if (missing == 0)
            callback({});

        $.each(urls, function (i, url) {
            var handler = function () {
                --missing;
                
                loaded[url] = this;
                
                if (missing == 0)
                    callback(loaded);
            };

            $('<img />').load(handler).error(handler).attr('src', url);
        });
    }
    
    function draw(plot, ctx) {
        var plotOffset = plot.getPlotOffset();
        
        $.each(plot.getData(), function (i, series) {
            var points = series.datapoints.points,
                ps = series.datapoints.pointsize;
            
            for (var i = 0; i < points.length; i += ps) {
                var img = points[i],
                    x1 = points[i + 1], y1 = points[i + 2],
                    x2 = points[i + 3], y2 = points[i + 4],
                    xaxis = series.xaxis, yaxis = series.yaxis,
                    tmp;

                // actually we should check img.complete, but it
                // appears to be a somewhat unreliable indicator in
                // IE6 (false even after load event)
                if (!img || img.width <= 0 || img.height <= 0)
                    continue;

                if (x1 > x2) {
                    tmp = x2;
                    x2 = x1;
                    x1 = tmp;
                }
                if (y1 > y2) {
                    tmp = y2;
                    y2 = y1;
                    y1 = tmp;
                }
                
                // if the anchor is at the center of the pixel, expand the 
                // image by 1/2 pixel in each direction
                if (series.images.anchor == "center") {
                    tmp = 0.5 * (x2-x1) / (img.width - 1);
                    x1 -= tmp;
                    x2 += tmp;
                    tmp = 0.5 * (y2-y1) / (img.height - 1);
                    y1 -= tmp;
                    y2 += tmp;
                }
                
                // clip
                if (x1 == x2 || y1 == y2 ||
                    x1 >= xaxis.max || x2 <= xaxis.min ||
                    y1 >= yaxis.max || y2 <= yaxis.min)
                    continue;

                var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height;
                if (x1 < xaxis.min) {
                    sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1);
                    x1 = xaxis.min;
                }

                if (x2 > xaxis.max) {
                    sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1);
                    x2 = xaxis.max;
                }

                if (y1 < yaxis.min) {
                    sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1);
                    y1 = yaxis.min;
                }

                if (y2 > yaxis.max) {
                    sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1);
                    y2 = yaxis.max;
                }
                
                x1 = xaxis.p2c(x1);
                x2 = xaxis.p2c(x2);
                y1 = yaxis.p2c(y1);
                y2 = yaxis.p2c(y2);
                
                // the transformation may have swapped us
                if (x1 > x2) {
                    tmp = x2;
                    x2 = x1;
                    x1 = tmp;
                }
                if (y1 > y2) {
                    tmp = y2;
                    y2 = y1;
                    y1 = tmp;
                }

                tmp = ctx.globalAlpha;
                ctx.globalAlpha *= series.images.alpha;
                ctx.drawImage(img,
                              sx1, sy1, sx2 - sx1, sy2 - sy1,
                              x1 + plotOffset.left, y1 + plotOffset.top,
                              x2 - x1, y2 - y1);
                ctx.globalAlpha = tmp;
            }
        });
    }

    function processRawData(plot, series, data, datapoints) {
        if (!series.images.show)
            return;

        // format is Image, x1, y1, x2, y2 (opposite corners)
        datapoints.format = [
            { required: true },
            { x: true, number: true, required: true },
            { y: true, number: true, required: true },
            { x: true, number: true, required: true },
            { y: true, number: true, required: true }
        ];
    }
    
    function init(plot) {
        plot.hooks.processRawData.push(processRawData);
        plot.hooks.draw.push(draw);
    }
    
    $.plot.plugins.push({
        init: init,
        options: options,
        name: 'image',
        version: '1.1'
    });
})(jQuery);

Added Site/Site_W/flot/jquery.flot.image.min.js.



>
1
(function(D){var B={series:{images:{show:false,alpha:1,anchor:"corner"}}};D.plot.image={};D.plot.image.loadDataImages=function(G,F,K){var J=[],H=[];var I=F.series.images.show;D.each(G,function(L,M){if(!(I||M.images.show)){return }if(M.data){M=M.data}D.each(M,function(N,O){if(typeof O[0]=="string"){J.push(O[0]);H.push(O)}})});D.plot.image.load(J,function(L){D.each(H,function(N,O){var M=O[0];if(L[M]){O[0]=L[M]}});K()})};D.plot.image.load=function(H,I){var G=H.length,F={};if(G==0){I({})}D.each(H,function(K,J){var L=function(){--G;F[J]=this;if(G==0){I(F)}};D("<img />").load(L).error(L).attr("src",J)})};function A(H,F){var G=H.getPlotOffset();D.each(H.getData(),function(O,P){var X=P.datapoints.points,I=P.datapoints.pointsize;for(var O=0;O<X.length;O+=I){var Q=X[O],M=X[O+1],V=X[O+2],K=X[O+3],T=X[O+4],W=P.xaxis,S=P.yaxis,N;if(!Q||Q.width<=0||Q.height<=0){continue}if(M>K){N=K;K=M;M=N}if(V>T){N=T;T=V;V=N}if(P.images.anchor=="center"){N=0.5*(K-M)/(Q.width-1);M-=N;K+=N;N=0.5*(T-V)/(Q.height-1);V-=N;T+=N}if(M==K||V==T||M>=W.max||K<=W.min||V>=S.max||T<=S.min){continue}var L=0,U=0,J=Q.width,R=Q.height;if(M<W.min){L+=(J-L)*(W.min-M)/(K-M);M=W.min}if(K>W.max){J+=(J-L)*(W.max-K)/(K-M);K=W.max}if(V<S.min){R+=(U-R)*(S.min-V)/(T-V);V=S.min}if(T>S.max){U+=(U-R)*(S.max-T)/(T-V);T=S.max}M=W.p2c(M);K=W.p2c(K);V=S.p2c(V);T=S.p2c(T);if(M>K){N=K;K=M;M=N}if(V>T){N=T;T=V;V=N}N=F.globalAlpha;F.globalAlpha*=P.images.alpha;F.drawImage(Q,L,U,J-L,R-U,M+G.left,V+G.top,K-M,T-V);F.globalAlpha=N}})}function C(I,F,G,H){if(!F.images.show){return }H.format=[{required:true},{x:true,number:true,required:true},{y:true,number:true,required:true},{x:true,number:true,required:true},{y:true,number:true,required:true}]}function E(F){F.hooks.processRawData.push(C);F.hooks.draw.push(A)}D.plot.plugins.push({init:E,options:B,name:"image",version:"1.1"})})(jQuery);

Added Site/Site_W/flot/jquery.flot.js.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
/* Javascript plotting library for jQuery, v. 0.6.
 *
 * Released under the MIT license by IOLA, December 2007.
 *
 */

// first an inline dependency, jquery.colorhelpers.js, we inline it here
// for convenience

/* Plugin for jQuery for working with colors.
 * 
 * Version 1.0.
 * 
 * Inspiration from jQuery color animation plugin by John Resig.
 *
 * Released under the MIT license by Ole Laursen, October 2009.
 *
 * Examples:
 *
 *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
 *   var c = $.color.extract($("#mydiv"), 'background-color');
 *   console.log(c.r, c.g, c.b, c.a);
 *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
 *
 * Note that .scale() and .add() work in-place instead of returning
 * new objects.
 */ 
(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]+=H}return F.normalize()};F.scale=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]*=H}return F.normalize()};F.toString=function(){if(F.a>=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return J<I?I:(J>H?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})();

// the actual Flot code
(function($) {
    function Plot(placeholder, data_, options_, plugins) {
        // data is on the form:
        //   [ series1, series2 ... ]
        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]
        // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }
        
        var series = [],
            options = {
                // the color theme used for graphs
                colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1, // number of colums in legend table
                    labelFormatter: null, // fn: string -> string
                    labelBoxBorderColor: "#ccc", // border color for the little label boxes
                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph
                    position: "ne", // position of default legend container within plot
                    margin: 5, // distance from grid edge to default legend container within plot
                    backgroundColor: null, // null means auto-detect
                    backgroundOpacity: 0.85 // set to 0 to avoid background
                },
                xaxis: {
                    mode: null, // null or "time"
                    transform: null, // null or f: number -> number to transform axis
                    inverseTransform: null, // if transform is set, this should be the inverse function
                    min: null, // min. value to show, null means set automatically
                    max: null, // max. value to show, null means set automatically
                    autoscaleMargin: null, // margin in % to add if auto-setting min/max
                    ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
                    tickFormatter: null, // fn: number -> string
                    labelWidth: null, // size of tick labels in pixels
                    labelHeight: null,
                    
                    // mode specific options
                    tickDecimals: null, // no. of decimals, null means auto
                    tickSize: null, // number or [number, "unit"]
                    minTickSize: null, // number or [number, "unit"]
                    monthNames: null, // list of names of months
                    timeformat: null, // format string to use
                    twelveHourClock: false // 12 or 24 time in time mode
                },
                yaxis: {
                    autoscaleMargin: 0.02
                },
                x2axis: {
                    autoscaleMargin: null
                },
                y2axis: {
                    autoscaleMargin: 0.02
                },
                series: {
                    points: {
                        show: false,
                        radius: 3,
                        lineWidth: 2, // in pixels
                        fill: true,
                        fillColor: "#ffffff"
                    },
                    lines: {
                        // we don't put in show: false so we can see
                        // whether lines were actively disabled 
                        lineWidth: 2, // in pixels
                        fill: false,
                        fillColor: null,
                        steps: false
                    },
                    bars: {
                        show: false,
                        lineWidth: 2, // in pixels
                        barWidth: 1, // in units of the x axis
                        fill: true,
                        fillColor: null,
                        align: "left", // or "center" 
                        horizontal: false // when horizontal, left is now top
                    },
                    shadowSize: 3
                },
                grid: {
                    show: true,
                    aboveData: false,
                    color: "#545454", // primary color used for outline and labels
                    backgroundColor: null, // null for transparent, else color
                    tickColor: "rgba(0,0,0,0.15)", // color used for the ticks
                    labelMargin: 5, // in pixels
                    borderWidth: 2, // in pixels
                    borderColor: null, // set if different from the grid color
                    markings: null, // array of ranges or fn: axes -> array of ranges
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,
                    // interactive stuff
                    clickable: false,
                    hoverable: false,
                    autoHighlight: true, // highlight in case mouse is near
                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item
                },
                hooks: {}
            },
        canvas = null,      // the canvas for the plot itself
        overlay = null,     // canvas for interactive stuff on top of plot
        eventHolder = null, // jQuery object that events should be bound to
        ctx = null, octx = null,
        axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} },
        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
        canvasWidth = 0, canvasHeight = 0,
        plotWidth = 0, plotHeight = 0,
        hooks = {
            processOptions: [],
            processRawData: [],
            processDatapoints: [],
            draw: [],
            bindEvents: [],
            drawOverlay: []
        },
        plot = this;

        // public functions
        plot.setData = setData;
        plot.setupGrid = setupGrid;
        plot.draw = draw;
        plot.getPlaceholder = function() { return placeholder; };
        plot.getCanvas = function() { return canvas; };
        plot.getPlotOffset = function() { return plotOffset; };
        plot.width = function () { return plotWidth; };
        plot.height = function () { return plotHeight; };
        plot.offset = function () {
            var o = eventHolder.offset();
            o.left += plotOffset.left;
            o.top += plotOffset.top;
            return o;
        };
        plot.getData = function() { return series; };
        plot.getAxes = function() { return axes; };
        plot.getOptions = function() { return options; };
        plot.highlight = highlight;
        plot.unhighlight = unhighlight;
        plot.triggerRedrawOverlay = triggerRedrawOverlay;
        plot.pointOffset = function(point) {
            return { left: parseInt(axisSpecToRealAxis(point, "xaxis").p2c(+point.x) + plotOffset.left),
                     top: parseInt(axisSpecToRealAxis(point, "yaxis").p2c(+point.y) + plotOffset.top) };
        };
        

        // public attributes
        plot.hooks = hooks;
        
        // initialize
        initPlugins(plot);
        parseOptions(options_);
        constructCanvas();
        setData(data_);
        setupGrid();
        draw();
        bindEvents();


        function executeHooks(hook, args) {
            args = [plot].concat(args);
            for (var i = 0; i < hook.length; ++i)
                hook[i].apply(this, args);
        }

        function initPlugins() {
            for (var i = 0; i < plugins.length; ++i) {
                var p = plugins[i];
                p.init(plot);
                if (p.options)
                    $.extend(true, options, p.options);
            }
        }
        
        function parseOptions(opts) {
            $.extend(true, options, opts);
            if (options.grid.borderColor == null)
                options.grid.borderColor = options.grid.color;
            // backwards compatibility, to be removed in future
            if (options.xaxis.noTicks && options.xaxis.ticks == null)
                options.xaxis.ticks = options.xaxis.noTicks;
            if (options.yaxis.noTicks && options.yaxis.ticks == null)
                options.yaxis.ticks = options.yaxis.noTicks;
            if (options.grid.coloredAreas)
                options.grid.markings = options.grid.coloredAreas;
            if (options.grid.coloredAreasColor)
                options.grid.markingsColor = options.grid.coloredAreasColor;
            if (options.lines)
                $.extend(true, options.series.lines, options.lines);
            if (options.points)
                $.extend(true, options.series.points, options.points);
            if (options.bars)
                $.extend(true, options.series.bars, options.bars);
            if (options.shadowSize)
                options.series.shadowSize = options.shadowSize;

            for (var n in hooks)
                if (options.hooks[n] && options.hooks[n].length)
                    hooks[n] = hooks[n].concat(options.hooks[n]);

            executeHooks(hooks.processOptions, [options]);
        }

        function setData(d) {
            series = parseData(d);
            fillInSeriesOptions();
            processData();
        }
        
        function parseData(d) {
            var res = [];
            for (var i = 0; i < d.length; ++i) {
                var s = $.extend(true, {}, options.series);

                if (d[i].data) {
                    s.data = d[i].data; // move the data instead of deep-copy
                    delete d[i].data;

                    $.extend(true, s, d[i]);

                    d[i].data = s.data;
                }
                else
                    s.data = d[i];
                res.push(s);
            }

            return res;
        }
        
        function axisSpecToRealAxis(obj, attr) {
            var a = obj[attr];
            if (!a || a == 1)
                return axes[attr];
            if (typeof a == "number")
                return axes[attr.charAt(0) + a + attr.slice(1)];
            return a; // assume it's OK
        }
        
        function fillInSeriesOptions() {
            var i;
            
            // collect what we already got of colors
            var neededColors = series.length,
                usedColors = [],
                assignedColors = [];
            for (i = 0; i < series.length; ++i) {
                var sc = series[i].color;
                if (sc != null) {
                    --neededColors;
                    if (typeof sc == "number")
                        assignedColors.push(sc);
                    else
                        usedColors.push($.color.parse(series[i].color));
                }
            }
            
            // we might need to generate more colors if higher indices
            // are assigned
            for (i = 0; i < assignedColors.length; ++i) {
                neededColors = Math.max(neededColors, assignedColors[i] + 1);
            }

            // produce colors as needed
            var colors = [], variation = 0;
            i = 0;
            while (colors.length < neededColors) {
                var c;
                if (options.colors.length == i) // check degenerate case
                    c = $.color.make(100, 100, 100);
                else
                    c = $.color.parse(options.colors[i]);

                // vary color if needed
                var sign = variation % 2 == 1 ? -1 : 1;
                c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2)

                // FIXME: if we're getting to close to something else,
                // we should probably skip this one
                colors.push(c);
                
                ++i;
                if (i >= options.colors.length) {
                    i = 0;
                    ++variation;
                }
            }

            // fill in the options
            var colori = 0, s;
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                
                // assign colors
                if (s.color == null) {
                    s.color = colors[colori].toString();
                    ++colori;
                }
                else if (typeof s.color == "number")
                    s.color = colors[s.color].toString();

                // turn on lines automatically in case nothing is set
                if (s.lines.show == null) {
                    var v, show = true;
                    for (v in s)
                        if (s[v].show) {
                            show = false;
                            break;
                        }
                    if (show)
                        s.lines.show = true;
                }

                // setup axes
                s.xaxis = axisSpecToRealAxis(s, "xaxis");
                s.yaxis = axisSpecToRealAxis(s, "yaxis");
            }
        }
        
        function processData() {
            var topSentry = Number.POSITIVE_INFINITY,
                bottomSentry = Number.NEGATIVE_INFINITY,
                i, j, k, m, length,
                s, points, ps, x, y, axis, val, f, p;

            for (axis in axes) {
                axes[axis].datamin = topSentry;
                axes[axis].datamax = bottomSentry;
                axes[axis].used = false;
            }

            function updateAxis(axis, min, max) {
                if (min < axis.datamin)
                    axis.datamin = min;
                if (max > axis.datamax)
                    axis.datamax = max;
            }

            for (i = 0; i < series.length; ++i) {
                s = series[i];
                s.datapoints = { points: [] };
                
                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);
            }
            
            // first pass: clean and copy data
            for (i = 0; i < series.length; ++i) {
                s = series[i];

                var data = s.data, format = s.datapoints.format;

                if (!format) {
                    format = [];
                    // find out how to copy
                    format.push({ x: true, number: true, required: true });
                    format.push({ y: true, number: true, required: true });

                    if (s.bars.show)
                        format.push({ y: true, number: true, required: false, defaultValue: 0 });
                    
                    s.datapoints.format = format;
                }

                if (s.datapoints.pointsize != null)
                    continue; // already filled in

                if (s.datapoints.pointsize == null)
                    s.datapoints.pointsize = format.length;
                
                ps = s.datapoints.pointsize;
                points = s.datapoints.points;

                insertSteps = s.lines.show && s.lines.steps;
                s.xaxis.used = s.yaxis.used = true;
                
                for (j = k = 0; j < data.length; ++j, k += ps) {
                    p = data[j];

                    var nullify = p == null;
                    if (!nullify) {
                        for (m = 0; m < ps; ++m) {
                            val = p[m];
                            f = format[m];

                            if (f) {
                                if (f.number && val != null) {
                                    val = +val; // convert to number
                                    if (isNaN(val))
                                        val = null;
                                }

                                if (val == null) {
                                    if (f.required)
                                        nullify = true;
                                    
                                    if (f.defaultValue != null)
                                        val = f.defaultValue;
                                }
                            }
                            
                            points[k + m] = val;
                        }
                    }
                    
                    if (nullify) {
                        for (m = 0; m < ps; ++m) {
                            val = points[k + m];
                            if (val != null) {
                                f = format[m];
                                // extract min/max info
                                if (f.x)
                                    updateAxis(s.xaxis, val, val);
                                if (f.y)
                                    updateAxis(s.yaxis, val, val);
                            }
                            points[k + m] = null;
                        }
                    }
                    else {
                        // a little bit of line specific stuff that
                        // perhaps shouldn't be here, but lacking
                        // better means...
                        if (insertSteps && k > 0
                            && points[k - ps] != null
                            && points[k - ps] != points[k]
                            && points[k - ps + 1] != points[k + 1]) {
                            // copy the point to make room for a middle point
                            for (m = 0; m < ps; ++m)
                                points[k + ps + m] = points[k + m];

                            // middle point has same y
                            points[k + 1] = points[k - ps + 1];

                            // we've added a point, better reflect that
                            k += ps;
                        }
                    }
                }
            }

            // give the hooks a chance to run
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                
                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);
            }

            // second pass: find datamax/datamin for auto-scaling
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                points = s.datapoints.points,
                ps = s.datapoints.pointsize;

                var xmin = topSentry, ymin = topSentry,
                    xmax = bottomSentry, ymax = bottomSentry;
                
                for (j = 0; j < points.length; j += ps) {
                    if (points[j] == null)
                        continue;

                    for (m = 0; m < ps; ++m) {
                        val = points[j + m];
                        f = format[m];
                        if (!f)
                            continue;
                        
                        if (f.x) {
                            if (val < xmin)
                                xmin = val;
                            if (val > xmax)
                                xmax = val;
                        }
                        if (f.y) {
                            if (val < ymin)
                                ymin = val;
                            if (val > ymax)
                                ymax = val;
                        }
                    }
                }
                
                if (s.bars.show) {
                    // make sure we got room for the bar on the dancing floor
                    var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2;
                    if (s.bars.horizontal) {
                        ymin += delta;
                        ymax += delta + s.bars.barWidth;
                    }
                    else {
                        xmin += delta;
                        xmax += delta + s.bars.barWidth;
                    }
                }
                
                updateAxis(s.xaxis, xmin, xmax);
                updateAxis(s.yaxis, ymin, ymax);
            }

            for (axis in axes) {
                if (axes[axis].datamin == topSentry)
                    axes[axis].datamin = null;
                if (axes[axis].datamax == bottomSentry)
                    axes[axis].datamax = null;
            }
        }

        function constructCanvas() {
            function makeCanvas(width, height) {
                var c = document.createElement('canvas');
                c.width = width;
                c.height = height;
                if ($.browser.msie) // excanvas hack
                    c = window.G_vmlCanvasManager.initElement(c);
                return c;
            }
            
            canvasWidth = placeholder.width();
            canvasHeight = placeholder.height();
            placeholder.html(""); // clear placeholder
            if (placeholder.css("position") == 'static')
                placeholder.css("position", "relative"); // for positioning labels and overlay

            if (canvasWidth <= 0 || canvasHeight <= 0)
                throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;

            if ($.browser.msie) // excanvas hack
                window.G_vmlCanvasManager.init_(document); // make sure everything is setup
            
            // the canvas
            canvas = $(makeCanvas(canvasWidth, canvasHeight)).appendTo(placeholder).get(0);
            ctx = canvas.getContext("2d");

            // overlay canvas for interactive features
            overlay = $(makeCanvas(canvasWidth, canvasHeight)).css({ position: 'absolute', left: 0, top: 0 }).appendTo(placeholder).get(0);
            octx = overlay.getContext("2d");
            octx.stroke();
        }

        function bindEvents() {
            // we include the canvas in the event holder too, because IE 7
            // sometimes has trouble with the stacking order
            eventHolder = $([overlay, canvas]);

            // bind events
            if (options.grid.hoverable)
                eventHolder.mousemove(onMouseMove);

            if (options.grid.clickable)
                eventHolder.click(onClick);

            executeHooks(hooks.bindEvents, [eventHolder]);
        }

        function setupGrid() {
            function setTransformationHelpers(axis, o) {
                function identity(x) { return x; }
                
                var s, m, t = o.transform || identity,
                    it = o.inverseTransform;
                    
                // add transformation helpers
                if (axis == axes.xaxis || axis == axes.x2axis) {
                    // precompute how much the axis is scaling a point
                    // in canvas space
                    s = axis.scale = plotWidth / (t(axis.max) - t(axis.min));
                    m = t(axis.min);

                    // data point to canvas coordinate
                    if (t == identity) // slight optimization
                        axis.p2c = function (p) { return (p - m) * s; };
                    else
                        axis.p2c = function (p) { return (t(p) - m) * s; };
                    // canvas coordinate to data point
                    if (!it)
                        axis.c2p = function (c) { return m + c / s; };
                    else
                        axis.c2p = function (c) { return it(m + c / s); };
                }
                else {
                    s = axis.scale = plotHeight / (t(axis.max) - t(axis.min));
                    m = t(axis.max);
                    
                    if (t == identity)
                        axis.p2c = function (p) { return (m - p) * s; };
                    else
                        axis.p2c = function (p) { return (m - t(p)) * s; };
                    if (!it)
                        axis.c2p = function (c) { return m - c / s; };
                    else
                        axis.c2p = function (c) { return it(m - c / s); };
                }
            }

            function measureLabels(axis, axisOptions) {
                var i, labels = [], l;
                
                axis.labelWidth = axisOptions.labelWidth;
                axis.labelHeight = axisOptions.labelHeight;

                if (axis == axes.xaxis || axis == axes.x2axis) {
                    // to avoid measuring the widths of the labels, we
                    // construct fixed-size boxes and put the labels inside
                    // them, we don't need the exact figures and the
                    // fixed-size box content is easy to center
                    if (axis.labelWidth == null)
                        axis.labelWidth = canvasWidth / (axis.ticks.length > 0 ? axis.ticks.length : 1);

                    // measure x label heights
                    if (axis.labelHeight == null) {
                        labels = [];
                        for (i = 0; i < axis.ticks.length; ++i) {
                            l = axis.ticks[i].label;
                            if (l)
                                labels.push('<div class="tickLabel" style="float:left;width:' + axis.labelWidth + 'px">' + l + '</div>');
                        }
                        
                        if (labels.length > 0) {
                            var dummyDiv = $('<div style="position:absolute;top:-10000px;width:10000px;font-size:smaller">'
                                             + labels.join("") + '<div style="clear:left"></div></div>').appendTo(placeholder);
                            axis.labelHeight = dummyDiv.height();
                            dummyDiv.remove();
                        }
                    }
                }
                else if (axis.labelWidth == null || axis.labelHeight == null) {
                    // calculate y label dimensions
                    for (i = 0; i < axis.ticks.length; ++i) {
                        l = axis.ticks[i].label;
                        if (l)
                            labels.push('<div class="tickLabel">' + l + '</div>');
                    }
                    
                    if (labels.length > 0) {
                        var dummyDiv = $('<div style="position:absolute;top:-10000px;font-size:smaller">'
                                         + labels.join("") + '</div>').appendTo(placeholder);
                        if (axis.labelWidth == null)
                            axis.labelWidth = dummyDiv.width();
                        if (axis.labelHeight == null)
                            axis.labelHeight = dummyDiv.find("div").height();
                        dummyDiv.remove();
                    }
                    
                }

                if (axis.labelWidth == null)
                    axis.labelWidth = 0;
                if (axis.labelHeight == null)
                    axis.labelHeight = 0;
            }
            
            function setGridSpacing() {
                // get the most space needed around the grid for things
                // that may stick out
                var maxOutset = options.grid.borderWidth;
                for (i = 0; i < series.length; ++i)
                    maxOutset = Math.max(maxOutset, 2 * (series[i].points.radius + series[i].points.lineWidth/2));
                
                plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset;
                
                var margin = options.grid.labelMargin + options.grid.borderWidth;
                
                if (axes.xaxis.labelHeight > 0)
                    plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + margin);
                if (axes.yaxis.labelWidth > 0)
                    plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + margin);
                if (axes.x2axis.labelHeight > 0)
                    plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + margin);
                if (axes.y2axis.labelWidth > 0)
                    plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + margin);
            
                plotWidth = canvasWidth - plotOffset.left - plotOffset.right;
                plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;
            }
            
            var axis;
            for (axis in axes)
                setRange(axes[axis], options[axis]);
            
            if (options.grid.show) {
                for (axis in axes) {
                    prepareTickGeneration(axes[axis], options[axis]);
                    setTicks(axes[axis], options[axis]);
                    measureLabels(axes[axis], options[axis]);
                }

                setGridSpacing();
            }
            else {
                plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0;
                plotWidth = canvasWidth;
                plotHeight = canvasHeight;
            }
            
            for (axis in axes)
                setTransformationHelpers(axes[axis], options[axis]);

            if (options.grid.show)
                insertLabels();
            
            insertLegend();
        }
        
        function setRange(axis, axisOptions) {
            var min = +(axisOptions.min != null ? axisOptions.min : axis.datamin),
                max = +(axisOptions.max != null ? axisOptions.max : axis.datamax),
                delta = max - min;

            if (delta == 0.0) {
                // degenerate case
                var widen = max == 0 ? 1 : 0.01;

                if (axisOptions.min == null)
                    min -= widen;
                // alway widen max if we couldn't widen min to ensure we
                // don't fall into min == max which doesn't work
                if (axisOptions.max == null || axisOptions.min != null)
                    max += widen;
            }
            else {
                // consider autoscaling
                var margin = axisOptions.autoscaleMargin;
                if (margin != null) {
                    if (axisOptions.min == null) {
                        min -= delta * margin;
                        // make sure we don't go below zero if all values
                        // are positive
                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)
                            min = 0;
                    }
                    if (axisOptions.max == null) {
                        max += delta * margin;
                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)
                            max = 0;
                    }
                }
            }
            axis.min = min;
            axis.max = max;
        }

        function prepareTickGeneration(axis, axisOptions) {
            // estimate number of ticks
            var noTicks;
            if (typeof axisOptions.ticks == "number" && axisOptions.ticks > 0)
                noTicks = axisOptions.ticks;
            else if (axis == axes.xaxis || axis == axes.x2axis)
                 // heuristic based on the model a*sqrt(x) fitted to
                 // some reasonable data points
                noTicks = 0.3 * Math.sqrt(canvasWidth);
            else
                noTicks = 0.3 * Math.sqrt(canvasHeight);
            
            var delta = (axis.max - axis.min) / noTicks,
                size, generator, unit, formatter, i, magn, norm;

            if (axisOptions.mode == "time") {
                // pretty handling of time
                
                // map of app. size of time units in milliseconds
                var timeUnitSize = {
                    "second": 1000,
                    "minute": 60 * 1000,
                    "hour": 60 * 60 * 1000,
                    "day": 24 * 60 * 60 * 1000,
                    "month": 30 * 24 * 60 * 60 * 1000,
                    "year": 365.2425 * 24 * 60 * 60 * 1000
                };


                // the allowed tick sizes, after 1 year we use
                // an integer algorithm
                var spec = [
                    [1, "second"], [2, "second"], [5, "second"], [10, "second"],
                    [30, "second"], 
                    [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
                    [30, "minute"], 
                    [1, "hour"], [2, "hour"], [4, "hour"],
                    [8, "hour"], [12, "hour"],
                    [1, "day"], [2, "day"], [3, "day"],
                    [0.25, "month"], [0.5, "month"], [1, "month"],
                    [2, "month"], [3, "month"], [6, "month"],
                    [1, "year"]
                ];

                var minSize = 0;
                if (axisOptions.minTickSize != null) {
                    if (typeof axisOptions.tickSize == "number")
                        minSize = axisOptions.tickSize;
                    else
                        minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
                }

                for (i = 0; i < spec.length - 1; ++i)
                    if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]
                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
                       && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)
                        break;
                size = spec[i][0];
                unit = spec[i][1];
                
                // special-case the possibility of several years
                if (unit == "year") {
                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
                    norm = (delta / timeUnitSize.year) / magn;
                    if (norm < 1.5)
                        size = 1;
                    else if (norm < 3)
                        size = 2;
                    else if (norm < 7.5)
                        size = 5;
                    else
                        size = 10;

                    size *= magn;
                }

                if (axisOptions.tickSize) {
                    size = axisOptions.tickSize[0];
                    unit = axisOptions.tickSize[1];
                }
                
                generator = function(axis) {
                    var ticks = [],
                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],
                        d = new Date(axis.min);
                    
                    var step = tickSize * timeUnitSize[unit];

                    if (unit == "second")
                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));
                    if (unit == "minute")
                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));
                    if (unit == "hour")
                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));
                    if (unit == "month")
                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));
                    if (unit == "year")
                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));
                    
                    // reset smaller components
                    d.setUTCMilliseconds(0);
                    if (step >= timeUnitSize.minute)
                        d.setUTCSeconds(0);
                    if (step >= timeUnitSize.hour)
                        d.setUTCMinutes(0);
                    if (step >= timeUnitSize.day)
                        d.setUTCHours(0);
                    if (step >= timeUnitSize.day * 4)
                        d.setUTCDate(1);
                    if (step >= timeUnitSize.year)
                        d.setUTCMonth(0);


                    var carry = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = d.getTime();
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        if (unit == "month") {
                            if (tickSize < 1) {
                                // a bit complicated - we'll divide the month
                                // up but we need to take care of fractions
                                // so we don't end up in the middle of a day
                                d.setUTCDate(1);
                                var start = d.getTime();
                                d.setUTCMonth(d.getUTCMonth() + 1);
                                var end = d.getTime();
                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
                                carry = d.getUTCHours();
                                d.setUTCHours(0);
                            }
                            else
                                d.setUTCMonth(d.getUTCMonth() + tickSize);
                        }
                        else if (unit == "year") {
                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);
                        }
                        else
                            d.setTime(v + step);
                    } while (v < axis.max && v != prev);

                    return ticks;
                };

                formatter = function (v, axis) {
                    var d = new Date(v);

                    // first check global format
                    if (axisOptions.timeformat != null)
                        return $.plot.formatDate(d, axisOptions.timeformat, axisOptions.monthNames);
                    
                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
                    var span = axis.max - axis.min;
                    var suffix = (axisOptions.twelveHourClock) ? " %p" : "";
                    
                    if (t < timeUnitSize.minute)
                        fmt = "%h:%M:%S" + suffix;
                    else if (t < timeUnitSize.day) {
                        if (span < 2 * timeUnitSize.day)
                            fmt = "%h:%M" + suffix;
                        else
                            fmt = "%b %d %h:%M" + suffix;
                    }
                    else if (t < timeUnitSize.month)
                        fmt = "%b %d";
                    else if (t < timeUnitSize.year) {
                        if (span < timeUnitSize.year)
                            fmt = "%b";
                        else
                            fmt = "%b %y";
                    }
                    else
                        fmt = "%y";
                    
                    return $.plot.formatDate(d, fmt, axisOptions.monthNames);
                };
            }
            else {
                // pretty rounding of base-10 numbers
                var maxDec = axisOptions.tickDecimals;
                var dec = -Math.floor(Math.log(delta) / Math.LN10);
                if (maxDec != null && dec > maxDec)
                    dec = maxDec;

                magn = Math.pow(10, -dec);
                norm = delta / magn; // norm is between 1.0 and 10.0
                
                if (norm < 1.5)
                    size = 1;
                else if (norm < 3) {
                    size = 2;
                    // special case for 2.5, requires an extra decimal
                    if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
                        size = 2.5;
                        ++dec;
                    }
                }
                else if (norm < 7.5)
                    size = 5;
                else
                    size = 10;

                size *= magn;
                
                if (axisOptions.minTickSize != null && size < axisOptions.minTickSize)
                    size = axisOptions.minTickSize;

                if (axisOptions.tickSize != null)
                    size = axisOptions.tickSize;

                axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);

                generator = function (axis) {
                    var ticks = [];

                    // spew out all possible ticks
                    var start = floorInBase(axis.min, axis.tickSize),
                        i = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = start + i * axis.tickSize;
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        ++i;
                    } while (v < axis.max && v != prev);
                    return ticks;
                };

                formatter = function (v, axis) {
                    return v.toFixed(axis.tickDecimals);
                };
            }

            axis.tickSize = unit ? [size, unit] : size;
            axis.tickGenerator = generator;
            if ($.isFunction(axisOptions.tickFormatter))
                axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
            else
                axis.tickFormatter = formatter;
        }
        
        function setTicks(axis, axisOptions) {
            axis.ticks = [];

            if (!axis.used)
                return;
            
            if (axisOptions.ticks == null)
                axis.ticks = axis.tickGenerator(axis);
            else if (typeof axisOptions.ticks == "number") {
                if (axisOptions.ticks > 0)
                    axis.ticks = axis.tickGenerator(axis);
            }
            else if (axisOptions.ticks) {
                var ticks = axisOptions.ticks;

                if ($.isFunction(ticks))
                    // generate the ticks
                    ticks = ticks({ min: axis.min, max: axis.max });
                
                // clean up the user-supplied ticks, copy them over
                var i, v;
                for (i = 0; i < ticks.length; ++i) {
                    var label = null;
                    var t = ticks[i];
                    if (typeof t == "object") {
                        v = t[0];
                        if (t.length > 1)
                            label = t[1];
                    }
                    else
                        v = t;
                    if (label == null)
                        label = axis.tickFormatter(v, axis);
                    axis.ticks[i] = { v: v, label: label };
                }
            }

            if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) {
                // snap to ticks
                if (axisOptions.min == null)
                    axis.min = Math.min(axis.min, axis.ticks[0].v);
                if (axisOptions.max == null && axis.ticks.length > 1)
                    axis.max = Math.max(axis.max, axis.ticks[axis.ticks.length - 1].v);
            }
        }
      
        function draw() {
            ctx.clearRect(0, 0, canvasWidth, canvasHeight);

            var grid = options.grid;
            
            if (grid.show && !grid.aboveData)
                drawGrid();

            for (var i = 0; i < series.length; ++i)
                drawSeries(series[i]);

            executeHooks(hooks.draw, [ctx]);
            
            if (grid.show && grid.aboveData)
                drawGrid();
        }

        function extractRange(ranges, coord) {
            var firstAxis = coord + "axis",
                secondaryAxis = coord + "2axis",
                axis, from, to, reverse;

            if (ranges[firstAxis]) {
                axis = axes[firstAxis];
                from = ranges[firstAxis].from;
                to = ranges[firstAxis].to;
            }
            else if (ranges[secondaryAxis]) {
                axis = axes[secondaryAxis];
                from = ranges[secondaryAxis].from;
                to = ranges[secondaryAxis].to;
            }
            else {
                // backwards-compat stuff - to be removed in future
                axis = axes[firstAxis];
                from = ranges[coord + "1"];
                to = ranges[coord + "2"];
            }

            // auto-reverse as an added bonus
            if (from != null && to != null && from > to)
                return { from: to, to: from, axis: axis };
            
            return { from: from, to: to, axis: axis };
        }
        
        function drawGrid() {
            var i;
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            // draw background, if any
            if (options.grid.backgroundColor) {
                ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
                ctx.fillRect(0, 0, plotWidth, plotHeight);
            }

            // draw markings
            var markings = options.grid.markings;
            if (markings) {
                if ($.isFunction(markings))
                    // xmin etc. are backwards-compatible, to be removed in future
                    markings = markings({ xmin: axes.xaxis.min, xmax: axes.xaxis.max, ymin: axes.yaxis.min, ymax: axes.yaxis.max, xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis });

                for (i = 0; i < markings.length; ++i) {
                    var m = markings[i],
                        xrange = extractRange(m, "x"),
                        yrange = extractRange(m, "y");

                    // fill in missing
                    if (xrange.from == null)
                        xrange.from = xrange.axis.min;
                    if (xrange.to == null)
                        xrange.to = xrange.axis.max;
                    if (yrange.from == null)
                        yrange.from = yrange.axis.min;
                    if (yrange.to == null)
                        yrange.to = yrange.axis.max;

                    // clip
                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||
                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)
                        continue;

                    xrange.from = Math.max(xrange.from, xrange.axis.min);
                    xrange.to = Math.min(xrange.to, xrange.axis.max);
                    yrange.from = Math.max(yrange.from, yrange.axis.min);
                    yrange.to = Math.min(yrange.to, yrange.axis.max);

                    if (xrange.from == xrange.to && yrange.from == yrange.to)
                        continue;

                    // then draw
                    xrange.from = xrange.axis.p2c(xrange.from);
                    xrange.to = xrange.axis.p2c(xrange.to);
                    yrange.from = yrange.axis.p2c(yrange.from);
                    yrange.to = yrange.axis.p2c(yrange.to);
                    
                    if (xrange.from == xrange.to || yrange.from == yrange.to) {
                        // draw line
                        ctx.beginPath();
                        ctx.strokeStyle = m.color || options.grid.markingsColor;
                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
                        //ctx.moveTo(Math.floor(xrange.from), yrange.from);
                        //ctx.lineTo(Math.floor(xrange.to), yrange.to);
                        ctx.moveTo(xrange.from, yrange.from);
                        ctx.lineTo(xrange.to, yrange.to);
                        ctx.stroke();
                    }
                    else {
                        // fill area
                        ctx.fillStyle = m.color || options.grid.markingsColor;
                        ctx.fillRect(xrange.from, yrange.to,
                                     xrange.to - xrange.from,
                                     yrange.from - yrange.to);
                    }
                }
            }
            
            // draw the inner grid
            ctx.lineWidth = 1;
            ctx.strokeStyle = options.grid.tickColor;
            ctx.beginPath();
            var v, axis = axes.xaxis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axes.xaxis.max)
                    continue;   // skip those lying on the axes

                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight);
            }

            axis = axes.yaxis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axis.max)
                    continue;

                ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }

            axis = axes.x2axis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axis.max)
                    continue;
    
                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5);
            }

            axis = axes.y2axis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axis.max)
                    continue;

                ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }
            
            ctx.stroke();
            
            if (options.grid.borderWidth) {
                // draw border
                var bw = options.grid.borderWidth;
                ctx.lineWidth = bw;
                ctx.strokeStyle = options.grid.borderColor;
                ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);
            }

            ctx.restore();
        }

        function insertLabels() {
            placeholder.find(".tickLabels").remove();
            
            var html = ['<div class="tickLabels" style="font-size:smaller;color:' + options.grid.color + '">'];

            function addLabels(axis, labelGenerator) {
                for (var i = 0; i < axis.ticks.length; ++i) {
                    var tick = axis.ticks[i];
                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)
                        continue;
                    html.push(labelGenerator(tick, axis));
                }
            }

            var margin = options.grid.labelMargin + options.grid.borderWidth;
            
            addLabels(axes.xaxis, function (tick, axis) {
                return '<div style="position:absolute;top:' + (plotOffset.top + plotHeight + margin) + 'px;left:' + Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
            });
            
            
            addLabels(axes.yaxis, function (tick, axis) {
                return '<div style="position:absolute;top:' + Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;right:' + (plotOffset.right + plotWidth + margin) + 'px;width:' + axis.labelWidth + 'px;text-align:right" class="tickLabel">' + tick.label + "</div>";
            });
            
            addLabels(axes.x2axis, function (tick, axis) {
                return '<div style="position:absolute;bottom:' + (plotOffset.bottom + plotHeight + margin) + 'px;left:' + Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
            });
            
            addLabels(axes.y2axis, function (tick, axis) {
                return '<div style="position:absolute;top:' + Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;left:' + (plotOffset.left + plotWidth + margin) +'px;width:' + axis.labelWidth + 'px;text-align:left" class="tickLabel">' + tick.label + "</div>";
            });

            html.push('</div>');
            
            placeholder.append(html.join(""));
        }

        function drawSeries(series) {
            if (series.lines.show)
                drawSeriesLines(series);
            if (series.bars.show)
                drawSeriesBars(series);
            if (series.points.show)
                drawSeriesPoints(series);
        }
        
        function drawSeriesLines(series) {
            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {
                var points = datapoints.points,
                    ps = datapoints.pointsize,
                    prevx = null, prevy = null;
                
                ctx.beginPath();
                for (var i = ps; i < points.length; i += ps) {
                    var x1 = points[i - ps], y1 = points[i - ps + 1],
                        x2 = points[i], y2 = points[i + 1];
                    
                    if (x1 == null || x2 == null)
                        continue;

                    // clip with ymin
                    if (y1 <= y2 && y1 < axisy.min) {
                        if (y2 < axisy.min)
                            continue;   // line segment is outside
                        // compute new intersection point
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 <= y1 && y2 < axisy.min) {
                        if (y1 < axisy.min)
                            continue;
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                    // clip with ymax
                    if (y1 >= y2 && y1 > axisy.max) {
                        if (y2 > axisy.max)
                            continue;
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 >= y1 && y2 > axisy.max) {
                        if (y1 > axisy.max)
                            continue;
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }

                    // clip with xmin
                    if (x1 <= x2 && x1 < axisx.min) {
                        if (x2 < axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 <= x1 && x2 < axisx.min) {
                        if (x1 < axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                    // clip with xmax
                    if (x1 >= x2 && x1 > axisx.max) {
                        if (x2 > axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 >= x1 && x2 > axisx.max) {
                        if (x1 > axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (x1 != prevx || y1 != prevy)
                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
                    
                    prevx = x2;
                    prevy = y2;
                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);
                }
                ctx.stroke();
            }

            function plotLineArea(datapoints, axisx, axisy) {
                var points = datapoints.points,
                    ps = datapoints.pointsize,
                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),
                    top, lastX = 0, areaOpen = false;
                
                for (var i = ps; i < points.length; i += ps) {
                    var x1 = points[i - ps], y1 = points[i - ps + 1],
                        x2 = points[i], y2 = points[i + 1];
                    
                    if (areaOpen && x1 != null && x2 == null) {
                        // close area
                        ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                        ctx.fill();
                        areaOpen = false;
                        continue;
                    }

                    if (x1 == null || x2 == null)
                        continue;

                    // clip x values
                    
                    // clip with xmin
                    if (x1 <= x2 && x1 < axisx.min) {
                        if (x2 < axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 <= x1 && x2 < axisx.min) {
                        if (x1 < axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                    // clip with xmax
                    if (x1 >= x2 && x1 > axisx.max) {
                        if (x2 > axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 >= x1 && x2 > axisx.max) {
                        if (x1 > axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (!areaOpen) {
                        // open area
                        ctx.beginPath();
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
                        areaOpen = true;
                    }
                    
                    // now first check the case where both is outside
                    if (y1 >= axisy.max && y2 >= axisy.max) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
                        lastX = x2;
                        continue;
                    }
                    else if (y1 <= axisy.min && y2 <= axisy.min) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
                        lastX = x2;
                        continue;
                    }
                    
                    // else it's a bit more complicated, there might
                    // be two rectangles and two triangles we need to fill
                    // in; to find these keep track of the current x values
                    var x1old = x1, x2old = x2;

                    // and clip the y values, without shortcutting
                    
                    // clip with ymin
                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                    // clip with ymax
                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }


                    // if the x value was changed we got a rectangle
                    // to fill
                    if (x1 != x1old) {
                        if (y1 <= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(top));
                    }
                    
                    // fill the triangles
                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));

                    // fill the other rectangle if it's there
                    if (x2 != x2old) {
                        if (y2 <= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top));
                    }

                    lastX = Math.max(x2, x2old);
                }

                if (areaOpen) {
                    ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                    ctx.fill();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            var lw = series.lines.lineWidth,
                sw = series.shadowSize;
            // FIXME: consider another form of shadow when filling is turned on
            if (lw > 0 && sw > 0) {
                // draw shadow as a thick and thin line with transparency
                ctx.lineWidth = sw;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                // position shadow at angle from the mid of line
                var angle = Math.PI/18;
                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);
                ctx.lineWidth = sw/2;
                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);
            if (fillStyle) {
                ctx.fillStyle = fillStyle;
                plotLineArea(series.datapoints, series.xaxis, series.yaxis);
            }

            if (lw > 0)
                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawSeriesPoints(series) {
            function plotPoints(datapoints, radius, fillStyle, offset, circumference, axisx, axisy) {
                var points = datapoints.points, ps = datapoints.pointsize;
                
                for (var i = 0; i < points.length; i += ps) {
                    var x = points[i], y = points[i + 1];
                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
                        continue;
                    
                    ctx.beginPath();
                    ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, circumference, false);
                    if (fillStyle) {
                        ctx.fillStyle = fillStyle;
                        ctx.fill();
                    }
                    ctx.stroke();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            var lw = series.lines.lineWidth,
                sw = series.shadowSize,
                radius = series.points.radius;
            if (lw > 0 && sw > 0) {
                // draw shadow in two steps
                var w = sw / 2;
                ctx.lineWidth = w;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotPoints(series.datapoints, radius, null, w + w/2, Math.PI,
                           series.xaxis, series.yaxis);

                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotPoints(series.datapoints, radius, null, w/2, Math.PI,
                           series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            plotPoints(series.datapoints, radius,
                       getFillStyle(series.points, series.color), 0, 2 * Math.PI,
                       series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal) {
            var left, right, bottom, top,
                drawLeft, drawRight, drawTop, drawBottom,
                tmp;

            if (horizontal) {
                drawBottom = drawRight = drawTop = true;
                drawLeft = false;
                left = b;
                right = x;
                top = y + barLeft;
                bottom = y + barRight;

                // account for negative bars
                if (right < left) {
                    tmp = right;
                    right = left;
                    left = tmp;
                    drawLeft = true;
                    drawRight = false;
                }
            }
            else {
                drawLeft = drawRight = drawTop = true;
                drawBottom = false;
                left = x + barLeft;
                right = x + barRight;
                bottom = b;
                top = y;

                // account for negative bars
                if (top < bottom) {
                    tmp = top;
                    top = bottom;
                    bottom = tmp;
                    drawBottom = true;
                    drawTop = false;
                }
            }
           
            // clip
            if (right < axisx.min || left > axisx.max ||
                top < axisy.min || bottom > axisy.max)
                return;
            
            if (left < axisx.min) {
                left = axisx.min;
                drawLeft = false;
            }

            if (right > axisx.max) {
                right = axisx.max;
                drawRight = false;
            }

            if (bottom < axisy.min) {
                bottom = axisy.min;
                drawBottom = false;
            }
            
            if (top > axisy.max) {
                top = axisy.max;
                drawTop = false;
            }

            left = axisx.p2c(left);
            bottom = axisy.p2c(bottom);
            right = axisx.p2c(right);
            top = axisy.p2c(top);
            
            // fill the bar
            if (fillStyleCallback) {
                c.beginPath();
                c.moveTo(left, bottom);
                c.lineTo(left, top);
                c.lineTo(right, top);
                c.lineTo(right, bottom);
                c.fillStyle = fillStyleCallback(bottom, top);
                c.fill();
            }

            // draw outline
            if (drawLeft || drawRight || drawTop || drawBottom) {
                c.beginPath();

                // FIXME: inline moveTo is buggy with excanvas
                c.moveTo(left, bottom + offset);
                if (drawLeft)
                    c.lineTo(left, top + offset);
                else
                    c.moveTo(left, top + offset);
                if (drawTop)
                    c.lineTo(right, top + offset);
                else
                    c.moveTo(right, top + offset);
                if (drawRight)
                    c.lineTo(right, bottom + offset);
                else
                    c.moveTo(right, bottom + offset);
                if (drawBottom)
                    c.lineTo(left, bottom + offset);
                else
                    c.moveTo(left, bottom + offset);
                c.stroke();
            }
        }
        
        function drawSeriesBars(series) {
            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {
                var points = datapoints.points, ps = datapoints.pointsize;
                
                for (var i = 0; i < points.length; i += ps) {
                    if (points[i] == null)
                        continue;
                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal);
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            // FIXME: figure out a way to add shadows (for instance along the right edge)
            ctx.lineWidth = series.bars.lineWidth;
            ctx.strokeStyle = series.color;
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function getFillStyle(filloptions, seriesColor, bottom, top) {
            var fill = filloptions.fill;
            if (!fill)
                return null;

            if (filloptions.fillColor)
                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);
            
            var c = $.color.parse(seriesColor);
            c.a = typeof fill == "number" ? fill : 0.4;
            c.normalize();
            return c.toString();
        }
        
        function insertLegend() {
            placeholder.find(".legend").remove();

            if (!options.legend.show)
                return;
            
            var fragments = [], rowStarted = false,
                lf = options.legend.labelFormatter, s, label;
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                label = s.label;
                if (!label)
                    continue;
                
                if (i % options.legend.noColumns == 0) {
                    if (rowStarted)
                        fragments.push('</tr>');
                    fragments.push('<tr>');
                    rowStarted = true;
                }

                if (lf)
                    label = lf(label, s);
                
                fragments.push(
                    '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden"></div></div></td>' +
                    '<td class="legendLabel">' + label + '</td>');
            }
            if (rowStarted)
                fragments.push('</tr>');
            
            if (fragments.length == 0)
                return;

            var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';
            if (options.legend.container != null)
                $(options.legend.container).html(table);
            else {
                var pos = "",
                    p = options.legend.position,
                    m = options.legend.margin;
                if (m[0] == null)
                    m = [m, m];
                if (p.charAt(0) == "n")
                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
                else if (p.charAt(0) == "s")
                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
                if (p.charAt(1) == "e")
                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
                else if (p.charAt(1) == "w")
                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
                var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);
                if (options.legend.backgroundOpacity != 0.0) {
                    // put in the transparent background
                    // separately to avoid blended labels and
                    // label boxes
                    var c = options.legend.backgroundColor;
                    if (c == null) {
                        c = options.grid.backgroundColor;
                        if (c && typeof c == "string")
                            c = $.color.parse(c);
                        else
                            c = $.color.extract(legend, 'background-color');
                        c.a = 1;
                        c = c.toString();
                    }
                    var div = legend.children();
                    $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
                }
            }
        }


        // interactive features
        
        var highlights = [],
            redrawTimeout = null;
        
        // returns the data item the mouse is over, or null if none is found
        function findNearbyItem(mouseX, mouseY, seriesFilter) {
            var maxDistance = options.grid.mouseActiveRadius,
                smallestDistance = maxDistance * maxDistance + 1,
                item = null, foundPoint = false, i, j;

            for (i = 0; i < series.length; ++i) {
                if (!seriesFilter(series[i]))
                    continue;
                
                var s = series[i],
                    axisx = s.xaxis,
                    axisy = s.yaxis,
                    points = s.datapoints.points,
                    ps = s.datapoints.pointsize,
                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster
                    my = axisy.c2p(mouseY),
                    maxx = maxDistance / axisx.scale,
                    maxy = maxDistance / axisy.scale;

                if (s.lines.show || s.points.show) {
                    for (j = 0; j < points.length; j += ps) {
                        var x = points[j], y = points[j + 1];
                        if (x == null)
                            continue;
                        
                        // For points and lines, the cursor must be within a
                        // certain distance to the data point
                        if (x - mx > maxx || x - mx < -maxx ||
                            y - my > maxy || y - my < -maxy)
                            continue;

                        // We have to calculate distances in pixels, not in
                        // data units, because the scales of the axes may be different
                        var dx = Math.abs(axisx.p2c(x) - mouseX),
                            dy = Math.abs(axisy.p2c(y) - mouseY),
                            dist = dx * dx + dy * dy; // we save the sqrt

                        // use <= to ensure last point takes precedence
                        // (last generally means on top of)
                        if (dist <= smallestDistance) {
                            smallestDistance = dist;
                            item = [i, j / ps];
                        }
                    }
                }
                    
                if (s.bars.show && !item) { // no other point can be nearby
                    var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2,
                        barRight = barLeft + s.bars.barWidth;
                    
                    for (j = 0; j < points.length; j += ps) {
                        var x = points[j], y = points[j + 1], b = points[j + 2];
                        if (x == null)
                            continue;
  
                        // for a bar graph, the cursor must be inside the bar
                        if (series[i].bars.horizontal ? 
                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) && 
                             my >= y + barLeft && my <= y + barRight) :
                            (mx >= x + barLeft && mx <= x + barRight &&
                             my >= Math.min(b, y) && my <= Math.max(b, y)))
                                item = [i, j / ps];
                    }
                }
            }

            if (item) {
                i = item[0];
                j = item[1];
                ps = series[i].datapoints.pointsize;
                
                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),
                         dataIndex: j,
                         series: series[i],
                         seriesIndex: i };
            }
            
            return null;
        }

        function onMouseMove(e) {
            if (options.grid.hoverable)
                triggerClickHoverEvent("plothover", e,
                                       function (s) { return s["hoverable"] != false; });
        }
        
        function onClick(e) {
            triggerClickHoverEvent("plotclick", e,
                                   function (s) { return s["clickable"] != false; });
        }

        // trigger click or hover event (they send the same parameters
        // so we share their code)
        function triggerClickHoverEvent(eventname, event, seriesFilter) {
            var offset = eventHolder.offset(),
                pos = { pageX: event.pageX, pageY: event.pageY },
                canvasX = event.pageX - offset.left - plotOffset.left,
                canvasY = event.pageY - offset.top - plotOffset.top;

            if (axes.xaxis.used)
                pos.x = axes.xaxis.c2p(canvasX);
            if (axes.yaxis.used)
                pos.y = axes.yaxis.c2p(canvasY);
            if (axes.x2axis.used)
                pos.x2 = axes.x2axis.c2p(canvasX);
            if (axes.y2axis.used)
                pos.y2 = axes.y2axis.c2p(canvasY);

            var item = findNearbyItem(canvasX, canvasY, seriesFilter);

            if (item) {
                // fill in mouse pos for any listeners out there
                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);
                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);
            }

            if (options.grid.autoHighlight) {
                // clear auto-highlights
                for (var i = 0; i < highlights.length; ++i) {
                    var h = highlights[i];
                    if (h.auto == eventname &&
                        !(item && h.series == item.series && h.point == item.datapoint))
                        unhighlight(h.series, h.point);
                }
                
                if (item)
                    highlight(item.series, item.datapoint, eventname);
            }
            
            placeholder.trigger(eventname, [ pos, item ]);
        }

        function triggerRedrawOverlay() {
            if (!redrawTimeout)
                redrawTimeout = setTimeout(drawOverlay, 30);
        }

        function drawOverlay() {
            redrawTimeout = null;

            // draw highlights
            octx.save();
            octx.clearRect(0, 0, canvasWidth, canvasHeight);
            octx.translate(plotOffset.left, plotOffset.top);
            
            var i, hi;
            for (i = 0; i < highlights.length; ++i) {
                hi = highlights[i];

                if (hi.series.bars.show)
                    drawBarHighlight(hi.series, hi.point);
                else
                    drawPointHighlight(hi.series, hi.point);
            }
            octx.restore();
            
            executeHooks(hooks.drawOverlay, [octx]);
        }
        
        function highlight(s, point, auto) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i == -1) {
                highlights.push({ series: s, point: point, auto: auto });

                triggerRedrawOverlay();
            }
            else if (!auto)
                highlights[i].auto = false;
        }
            
        function unhighlight(s, point) {
            if (s == null && point == null) {
                highlights = [];
                triggerRedrawOverlay();
            }
            
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i != -1) {
                highlights.splice(i, 1);

                triggerRedrawOverlay();
            }
        }
        
        function indexOfHighlight(s, p) {
            for (var i = 0; i < highlights.length; ++i) {
                var h = highlights[i];
                if (h.series == s && h.point[0] == p[0]
                    && h.point[1] == p[1])
                    return i;
            }
            return -1;
        }
        
        function drawPointHighlight(series, point) {
            var x = point[0], y = point[1],
                axisx = series.xaxis, axisy = series.yaxis;
            
            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
                return;
            
            var pointRadius = series.points.radius + series.points.lineWidth / 2;
            octx.lineWidth = pointRadius;
            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();
            var radius = 1.5 * pointRadius;
            octx.beginPath();
            octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, false);
            octx.stroke();
        }

        function drawBarHighlight(series, point) {
            octx.lineWidth = series.bars.lineWidth;
            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();
            var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString();
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,
                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal);
        }

        function getColorOrGradient(spec, bottom, top, defaultColor) {
            if (typeof spec == "string")
                return spec;
            else {
                // assume this is a gradient spec; IE currently only
                // supports a simple vertical gradient properly, so that's
                // what we support too
                var gradient = ctx.createLinearGradient(0, top, 0, bottom);
                
                for (var i = 0, l = spec.colors.length; i < l; ++i) {
                    var c = spec.colors[i];
                    if (typeof c != "string") {
                        c = $.color.parse(defaultColor).scale('rgb', c.brightness);
                        c.a *= c.opacity;
                        c = c.toString();
                    }
                    gradient.addColorStop(i / (l - 1), c);
                }
                
                return gradient;
            }
        }
    }

    $.plot = function(placeholder, data, options) {
        var plot = new Plot($(placeholder), data, options, $.plot.plugins);
        /*var t0 = new Date();
        var t1 = new Date();
        var tstr = "time used (msecs): " + (t1.getTime() - t0.getTime())
        if (window.console)
            console.log(tstr);
        else
            alert(tstr);*/
        return plot;
    };

    $.plot.plugins = [];

    // returns a string with the date d formatted according to fmt
    $.plot.formatDate = function(d, fmt, monthNames) {
        var leftPad = function(n) {
            n = "" + n;
            return n.length == 1 ? "0" + n : n;
        };
        
        var r = [];
        var escape = false;
        var hours = d.getUTCHours();
        var isAM = hours < 12;
        if (monthNames == null)
            monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

        if (fmt.search(/%p|%P/) != -1) {
            if (hours > 12) {
                hours = hours - 12;
            } else if (hours == 0) {
                hours = 12;
            }
        }
        for (var i = 0; i < fmt.length; ++i) {
            var c = fmt.charAt(i);
            
            if (escape) {
                switch (c) {
                case 'h': c = "" + hours; break;
                case 'H': c = leftPad(hours); break;
                case 'M': c = leftPad(d.getUTCMinutes()); break;
                case 'S': c = leftPad(d.getUTCSeconds()); break;
                case 'd': c = "" + d.getUTCDate(); break;
                case 'm': c = "" + (d.getUTCMonth() + 1); break;
                case 'y': c = "" + d.getUTCFullYear(); break;
                case 'b': c = "" + monthNames[d.getUTCMonth()]; break;
                case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;
                case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;
                }
                r.push(c);
                escape = false;
            }
            else {
                if (c == "%")
                    escape = true;
                else
                    r.push(c);
            }
        }
        return r.join("");
    };
    
    // round to nearby lower multiple of base
    function floorInBase(n, base) {
        return base * Math.floor(n / base);
    }
    
})(jQuery);

Added Site/Site_W/flot/jquery.flot.min.js.

cannot compute difference between binary files

Added Site/Site_W/flot/jquery.flot.navigate.js.

































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
/*
Flot plugin for adding panning and zooming capabilities to a plot.

The default behaviour is double click and scrollwheel up/down to zoom
in, drag to pan. The plugin defines plot.zoom({ center }),
plot.zoomOut() and plot.pan(offset) so you easily can add custom
controls. It also fires a "plotpan" and "plotzoom" event when
something happens, useful for synchronizing plots.

Example usage:

  plot = $.plot(...);
  
  // zoom default amount in on the pixel (100, 200) 
  plot.zoom({ center: { left: 10, top: 20 } });

  // zoom out again
  plot.zoomOut({ center: { left: 10, top: 20 } });

  // pan 100 pixels to the left and 20 down
  plot.pan({ left: -100, top: 20 })


Options:

  zoom: {
    interactive: false
    trigger: "dblclick" // or "click" for single click
    amount: 1.5         // 2 = 200% (zoom in), 0.5 = 50% (zoom out)
  }
  
  pan: {
    interactive: false
  }

  xaxis, yaxis, x2axis, y2axis: {
    zoomRange: null  // or [number, number] (min range, max range)
    panRange: null   // or [number, number] (min, max)
  }
  
"interactive" enables the built-in drag/click behaviour. "amount" is
the amount to zoom the viewport relative to the current range, so 1 is
100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out).

"zoomRange" is the interval in which zooming can happen, e.g. with
zoomRange: [1, 100] the zoom will never scale the axis so that the
difference between min and max is smaller than 1 or larger than 100.
You can set either of them to null to ignore.

"panRange" confines the panning to stay within a range, e.g. with
panRange: [-10, 20] panning stops at -10 in one end and at 20 in the
other. Either can be null.
*/


// First two dependencies, jquery.event.drag.js and
// jquery.mousewheel.js, we put them inline here to save people the
// effort of downloading them.

/*
jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)  
Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt
*/
(function(E){E.fn.drag=function(L,K,J){if(K){this.bind("dragstart",L)}if(J){this.bind("dragend",J)}return !L?this.trigger("drag"):this.bind("drag",K?K:L)};var A=E.event,B=A.special,F=B.drag={not:":input",distance:0,which:1,dragging:false,setup:function(J){J=E.extend({distance:F.distance,which:F.which,not:F.not},J||{});J.distance=I(J.distance);A.add(this,"mousedown",H,J);if(this.attachEvent){this.attachEvent("ondragstart",D)}},teardown:function(){A.remove(this,"mousedown",H);if(this===F.dragging){F.dragging=F.proxy=false}G(this,true);if(this.detachEvent){this.detachEvent("ondragstart",D)}}};B.dragstart=B.dragend={setup:function(){},teardown:function(){}};function H(L){var K=this,J,M=L.data||{};if(M.elem){K=L.dragTarget=M.elem;L.dragProxy=F.proxy||K;L.cursorOffsetX=M.pageX-M.left;L.cursorOffsetY=M.pageY-M.top;L.offsetX=L.pageX-L.cursorOffsetX;L.offsetY=L.pageY-L.cursorOffsetY}else{if(F.dragging||(M.which>0&&L.which!=M.which)||E(L.target).is(M.not)){return }}switch(L.type){case"mousedown":E.extend(M,E(K).offset(),{elem:K,target:L.target,pageX:L.pageX,pageY:L.pageY});A.add(document,"mousemove mouseup",H,M);G(K,false);F.dragging=null;return false;case !F.dragging&&"mousemove":if(I(L.pageX-M.pageX)+I(L.pageY-M.pageY)<M.distance){break}L.target=M.target;J=C(L,"dragstart",K);if(J!==false){F.dragging=K;F.proxy=L.dragProxy=E(J||K)[0]}case"mousemove":if(F.dragging){J=C(L,"drag",K);if(B.drop){B.drop.allowed=(J!==false);B.drop.handler(L)}if(J!==false){break}L.type="mouseup"}case"mouseup":A.remove(document,"mousemove mouseup",H);if(F.dragging){if(B.drop){B.drop.handler(L)}C(L,"dragend",K)}G(K,true);F.dragging=F.proxy=M.elem=false;break}return true}function C(M,K,L){M.type=K;var J=E.event.handle.call(L,M);return J===false?false:J||M.result}function I(J){return Math.pow(J,2)}function D(){return(F.dragging===false)}function G(K,J){if(!K){return }K.unselectable=J?"off":"on";K.onselectstart=function(){return J};if(K.style){K.style.MozUserSelect=J?"":"none"}}})(jQuery);


/* jquery.mousewheel.min.js
 * Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);




(function ($) {
    var options = {
        xaxis: {
            zoomRange: null, // or [number, number] (min range, max range)
            panRange: null // or [number, number] (min, max)
        },
        zoom: {
            interactive: false,
            trigger: "dblclick", // or "click" for single click
            amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out)
        },
        pan: {
            interactive: false
        }
    };

    function init(plot) {
        function bindEvents(plot, eventHolder) {
            var o = plot.getOptions();
            if (o.zoom.interactive) {
                function clickHandler(e, zoomOut) {
                    var c = plot.offset();
                    c.left = e.pageX - c.left;
                    c.top = e.pageY - c.top;
                    if (zoomOut)
                        plot.zoomOut({ center: c });
                    else
                        plot.zoom({ center: c });
                }
                
                eventHolder[o.zoom.trigger](clickHandler);

                eventHolder.mousewheel(function (e, delta) {
                    clickHandler(e, delta < 0);
                    return false;
                });
            }
            if (o.pan.interactive) {
                var prevCursor = 'default', pageX = 0, pageY = 0;
                
                eventHolder.bind("dragstart", { distance: 10 }, function (e) {
                    if (e.which != 1)  // only accept left-click
                        return false;
                    eventHolderCursor = eventHolder.css('cursor');
                    eventHolder.css('cursor', 'move');
                    pageX = e.pageX;
                    pageY = e.pageY;
                });
                eventHolder.bind("drag", function (e) {
                    // unused at the moment, but we need it here to
                    // trigger the dragstart/dragend events
                });
                eventHolder.bind("dragend", function (e) {
                    eventHolder.css('cursor', prevCursor);
                    plot.pan({ left: pageX - e.pageX,
                               top: pageY - e.pageY });
                });
            }
        }

        plot.zoomOut = function (args) {
            if (!args)
                args = {};
            
            if (!args.amount)
                args.amount = plot.getOptions().zoom.amount

            args.amount = 1 / args.amount;
            plot.zoom(args);
        }
        
        plot.zoom = function (args) {
            if (!args)
                args = {};
            
            var axes = plot.getAxes(),
                options = plot.getOptions(),
                c = args.center,
                amount = args.amount ? args.amount : options.zoom.amount,
                w = plot.width(), h = plot.height();

            if (!c)
                c = { left: w / 2, top: h / 2 };
                
            var xf = c.left / w,
                x1 = c.left - xf * w / amount,
                x2 = c.left + (1 - xf) * w / amount,
                yf = c.top / h,
                y1 = c.top - yf * h / amount,
                y2 = c.top + (1 - yf) * h / amount;

            function scaleAxis(min, max, name) {
                var axis = axes[name],
                    axisOptions = options[name];
                
                if (!axis.used)
                    return;
                    
                min = axis.c2p(min);
                max = axis.c2p(max);
                if (max < min) { // make sure min < max
                    var tmp = min
                    min = max;
                    max = tmp;
                }

                var range = max - min, zr = axisOptions.zoomRange;
                if (zr &&
                    ((zr[0] != null && range < zr[0]) ||
                     (zr[1] != null && range > zr[1])))
                    return;
            
                axisOptions.min = min;
                axisOptions.max = max;
            }

            scaleAxis(x1, x2, 'xaxis');
            scaleAxis(x1, x2, 'x2axis');
            scaleAxis(y1, y2, 'yaxis');
            scaleAxis(y1, y2, 'y2axis');
            
            plot.setupGrid();
            plot.draw();
            
            if (!args.preventEvent)
                plot.getPlaceholder().trigger("plotzoom", [ plot ]);
        }

        plot.pan = function (args) {
            var l = +args.left, t = +args.top,
                axes = plot.getAxes(), options = plot.getOptions();

            if (isNaN(l))
                l = 0;
            if (isNaN(t))
                t = 0;

            function panAxis(delta, name) {
                var axis = axes[name],
                    axisOptions = options[name],
                    min, max;
                
                if (!axis.used)
                    return;

                min = axis.c2p(axis.p2c(axis.min) + delta),
                max = axis.c2p(axis.p2c(axis.max) + delta);

                var pr = axisOptions.panRange;
                if (pr) {
                    // check whether we hit the wall
                    if (pr[0] != null && pr[0] > min) {
                        delta = pr[0] - min;
                        min += delta;
                        max += delta;
                    }
                    
                    if (pr[1] != null && pr[1] < max) {
                        delta = pr[1] - max;
                        min += delta;
                        max += delta;
                    }
                }
                
                axisOptions.min = min;
                axisOptions.max = max;
            }

            panAxis(l, 'xaxis');
            panAxis(l, 'x2axis');
            panAxis(t, 'yaxis');
            panAxis(t, 'y2axis');
            
            plot.setupGrid();
            plot.draw();
            
            if (!args.preventEvent)
                plot.getPlaceholder().trigger("plotpan", [ plot ]);
        }
        
        plot.hooks.bindEvents.push(bindEvents);
    }
    
    $.plot.plugins.push({
        init: init,
        options: options,
        name: 'navigate',
        version: '1.1'
    });
})(jQuery);

Added Site/Site_W/flot/jquery.flot.navigate.min.js.



>
1
(function(R){R.fn.drag=function(A,B,C){if(B){this.bind("dragstart",A)}if(C){this.bind("dragend",C)}return !A?this.trigger("drag"):this.bind("drag",B?B:A)};var M=R.event,L=M.special,Q=L.drag={not:":input",distance:0,which:1,dragging:false,setup:function(A){A=R.extend({distance:Q.distance,which:Q.which,not:Q.not},A||{});A.distance=N(A.distance);M.add(this,"mousedown",O,A);if(this.attachEvent){this.attachEvent("ondragstart",J)}},teardown:function(){M.remove(this,"mousedown",O);if(this===Q.dragging){Q.dragging=Q.proxy=false}P(this,true);if(this.detachEvent){this.detachEvent("ondragstart",J)}}};L.dragstart=L.dragend={setup:function(){},teardown:function(){}};function O(A){var B=this,C,D=A.data||{};if(D.elem){B=A.dragTarget=D.elem;A.dragProxy=Q.proxy||B;A.cursorOffsetX=D.pageX-D.left;A.cursorOffsetY=D.pageY-D.top;A.offsetX=A.pageX-A.cursorOffsetX;A.offsetY=A.pageY-A.cursorOffsetY}else{if(Q.dragging||(D.which>0&&A.which!=D.which)||R(A.target).is(D.not)){return }}switch(A.type){case"mousedown":R.extend(D,R(B).offset(),{elem:B,target:A.target,pageX:A.pageX,pageY:A.pageY});M.add(document,"mousemove mouseup",O,D);P(B,false);Q.dragging=null;return false;case !Q.dragging&&"mousemove":if(N(A.pageX-D.pageX)+N(A.pageY-D.pageY)<D.distance){break}A.target=D.target;C=K(A,"dragstart",B);if(C!==false){Q.dragging=B;Q.proxy=A.dragProxy=R(C||B)[0]}case"mousemove":if(Q.dragging){C=K(A,"drag",B);if(L.drop){L.drop.allowed=(C!==false);L.drop.handler(A)}if(C!==false){break}A.type="mouseup"}case"mouseup":M.remove(document,"mousemove mouseup",O);if(Q.dragging){if(L.drop){L.drop.handler(A)}K(A,"dragend",B)}P(B,true);Q.dragging=Q.proxy=D.elem=false;break}return true}function K(D,B,A){D.type=B;var C=R.event.handle.call(A,D);return C===false?false:C||D.result}function N(A){return Math.pow(A,2)}function J(){return(Q.dragging===false)}function P(A,B){if(!A){return }A.unselectable=B?"off":"on";A.onselectstart=function(){return B};if(A.style){A.style.MozUserSelect=B?"":"none"}}})(jQuery);(function(C){var B=["DOMMouseScroll","mousewheel"];C.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var D=B.length;D;){this.addEventListener(B[--D],A,false)}}else{this.onmousewheel=A}},teardown:function(){if(this.removeEventListener){for(var D=B.length;D;){this.removeEventListener(B[--D],A,false)}}else{this.onmousewheel=null}}};C.fn.extend({mousewheel:function(D){return D?this.bind("mousewheel",D):this.trigger("mousewheel")},unmousewheel:function(D){return this.unbind("mousewheel",D)}});function A(E){var G=[].slice.call(arguments,1),D=0,F=true;E=C.event.fix(E||window.event);E.type="mousewheel";if(E.wheelDelta){D=E.wheelDelta/120}if(E.detail){D=-E.detail/3}G.unshift(E,D);return C.event.handle.apply(this,G)}})(jQuery);(function(B){var A={xaxis:{zoomRange:null,panRange:null},zoom:{interactive:false,trigger:"dblclick",amount:1.5},pan:{interactive:false}};function C(D){function E(J,F){var K=J.getOptions();if(K.zoom.interactive){function L(N,M){var O=J.offset();O.left=N.pageX-O.left;O.top=N.pageY-O.top;if(M){J.zoomOut({center:O})}else{J.zoom({center:O})}}F[K.zoom.trigger](L);F.mousewheel(function(M,N){L(M,N<0);return false})}if(K.pan.interactive){var I="default",H=0,G=0;F.bind("dragstart",{distance:10},function(M){if(M.which!=1){return false}eventHolderCursor=F.css("cursor");F.css("cursor","move");H=M.pageX;G=M.pageY});F.bind("drag",function(M){});F.bind("dragend",function(M){F.css("cursor",I);J.pan({left:H-M.pageX,top:G-M.pageY})})}}D.zoomOut=function(F){if(!F){F={}}if(!F.amount){F.amount=D.getOptions().zoom.amount}F.amount=1/F.amount;D.zoom(F)};D.zoom=function(M){if(!M){M={}}var L=D.getAxes(),S=D.getOptions(),N=M.center,J=M.amount?M.amount:S.zoom.amount,R=D.width(),I=D.height();if(!N){N={left:R/2,top:I/2}}var Q=N.left/R,G=N.left-Q*R/J,F=N.left+(1-Q)*R/J,H=N.top/I,P=N.top-H*I/J,O=N.top+(1-H)*I/J;function K(X,T,V){var Y=L[V],a=S[V];if(!Y.used){return }X=Y.c2p(X);T=Y.c2p(T);if(T<X){var W=X;X=T;T=W}var U=T-X,Z=a.zoomRange;if(Z&&((Z[0]!=null&&U<Z[0])||(Z[1]!=null&&U>Z[1]))){return }a.min=X;a.max=T}K(G,F,"xaxis");K(G,F,"x2axis");K(P,O,"yaxis");K(P,O,"y2axis");D.setupGrid();D.draw();if(!M.preventEvent){D.getPlaceholder().trigger("plotzoom",[D])}};D.pan=function(I){var F=+I.left,J=+I.top,K=D.getAxes(),H=D.getOptions();if(isNaN(F)){F=0}if(isNaN(J)){J=0}function G(R,M){var O=K[M],Q=H[M],N,L;if(!O.used){return }N=O.c2p(O.p2c(O.min)+R),L=O.c2p(O.p2c(O.max)+R);var P=Q.panRange;if(P){if(P[0]!=null&&P[0]>N){R=P[0]-N;N+=R;L+=R}if(P[1]!=null&&P[1]<L){R=P[1]-L;N+=R;L+=R}}Q.min=N;Q.max=L}G(F,"xaxis");G(F,"x2axis");G(J,"yaxis");G(J,"y2axis");D.setupGrid();D.draw();if(!I.preventEvent){D.getPlaceholder().trigger("plotpan",[D])}};D.hooks.bindEvents.push(E)}B.plot.plugins.push({init:C,options:A,name:"navigate",version:"1.1"})})(jQuery);

Added Site/Site_W/flot/jquery.flot.selection.js.























































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
/*
Flot plugin for selecting regions.

The plugin defines the following options:

  selection: {
    mode: null or "x" or "y" or "xy",
    color: color
  }

You enable selection support by setting the mode to one of "x", "y" or
"xy". In "x" mode, the user will only be able to specify the x range,
similarly for "y" mode. For "xy", the selection becomes a rectangle
where both ranges can be specified. "color" is color of the selection.

When selection support is enabled, a "plotselected" event will be emitted
on the DOM element you passed into the plot function. The event
handler gets one extra parameter with the ranges selected on the axes,
like this:

  placeholder.bind("plotselected", function(event, ranges) {
    alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to)
    // similar for yaxis, secondary axes are in x2axis
    // and y2axis if present
  });

The "plotselected" event is only fired when the user has finished
making the selection. A "plotselecting" event is fired during the
process with the same parameters as the "plotselected" event, in case
you want to know what's happening while it's happening,

A "plotunselected" event with no arguments is emitted when the user
clicks the mouse to remove the selection.

The plugin allso adds the following methods to the plot object:

- setSelection(ranges, preventEvent)

  Set the selection rectangle. The passed in ranges is on the same
  form as returned in the "plotselected" event. If the selection
  mode is "x", you should put in either an xaxis (or x2axis) object,
  if the mode is "y" you need to put in an yaxis (or y2axis) object
  and both xaxis/x2axis and yaxis/y2axis if the selection mode is
  "xy", like this:

    setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });

  setSelection will trigger the "plotselected" event when called. If
  you don't want that to happen, e.g. if you're inside a
  "plotselected" handler, pass true as the second parameter.
  
- clearSelection(preventEvent)

  Clear the selection rectangle. Pass in true to avoid getting a
  "plotunselected" event.

- getSelection()

  Returns the current selection in the same format as the
  "plotselected" event. If there's currently no selection, the
  function returns null.

*/

(function ($) {
    function init(plot) {
        var selection = {
                first: { x: -1, y: -1}, second: { x: -1, y: -1},
                show: false,
                active: false
            };

        // FIXME: The drag handling implemented here should be
        // abstracted out, there's some similar code from a library in
        // the navigation plugin, this should be massaged a bit to fit
        // the Flot cases here better and reused. Doing this would
        // make this plugin much slimmer.
        var savedhandlers = {};

        function onMouseMove(e) {
            if (selection.active) {
                plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]);

                updateSelection(e);
            }
        }

        function onMouseDown(e) {
            if (e.which != 1)  // only accept left-click
                return;
            
            // cancel out any text selections
            document.body.focus();

            // prevent text selection and drag in old-school browsers
            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {
                savedhandlers.onselectstart = document.onselectstart;
                document.onselectstart = function () { return false; };
            }
            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {
                savedhandlers.ondrag = document.ondrag;
                document.ondrag = function () { return false; };
            }

            setSelectionPos(selection.first, e);

            selection.active = true;
            
            $(document).one("mouseup", onMouseUp);
        }

        function onMouseUp(e) {
            // revert drag stuff for old-school browsers
            if (document.onselectstart !== undefined)
                document.onselectstart = savedhandlers.onselectstart;
            if (document.ondrag !== undefined)
                document.ondrag = savedhandlers.ondrag;

            // no more draggy-dee-drag
            selection.active = false;
            updateSelection(e);

            if (selectionIsSane())
                triggerSelectedEvent();
            else {
                // this counts as a clear
                plot.getPlaceholder().trigger("plotunselected", [ ]);
                plot.getPlaceholder().trigger("plotselecting", [ null ]);
            }

            return false;
        }

        function getSelection() {
            if (!selectionIsSane())
                return null;

            var x1 = Math.min(selection.first.x, selection.second.x),
                x2 = Math.max(selection.first.x, selection.second.x),
                y1 = Math.max(selection.first.y, selection.second.y),
                y2 = Math.min(selection.first.y, selection.second.y);

            var r = {};
            var axes = plot.getAxes();
            if (axes.xaxis.used)
                r.xaxis = { from: axes.xaxis.c2p(x1), to: axes.xaxis.c2p(x2) };
            if (axes.x2axis.used)
                r.x2axis = { from: axes.x2axis.c2p(x1), to: axes.x2axis.c2p(x2) };
            if (axes.yaxis.used)
                r.yaxis = { from: axes.yaxis.c2p(y1), to: axes.yaxis.c2p(y2) };
            if (axes.y2axis.used)
                r.y2axis = { from: axes.y2axis.c2p(y1), to: axes.y2axis.c2p(y2) };
            return r;
        }

        function triggerSelectedEvent() {
            var r = getSelection();

            plot.getPlaceholder().trigger("plotselected", [ r ]);

            // backwards-compat stuff, to be removed in future
            var axes = plot.getAxes();
            if (axes.xaxis.used && axes.yaxis.used)
                plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);
        }

        function clamp(min, value, max) {
            return value < min? min: (value > max? max: value);
        }

        function setSelectionPos(pos, e) {
            var o = plot.getOptions();
            var offset = plot.getPlaceholder().offset();
            var plotOffset = plot.getPlotOffset();
            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());
            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());

            if (o.selection.mode == "y")
                pos.x = pos == selection.first? 0: plot.width();

            if (o.selection.mode == "x")
                pos.y = pos == selection.first? 0: plot.height();
        }

        function updateSelection(pos) {
            if (pos.pageX == null)
                return;

            setSelectionPos(selection.second, pos);
            if (selectionIsSane()) {
                selection.show = true;
                plot.triggerRedrawOverlay();
            }
            else
                clearSelection(true);
        }

        function clearSelection(preventEvent) {
            if (selection.show) {
                selection.show = false;
                plot.triggerRedrawOverlay();
                if (!preventEvent)
                    plot.getPlaceholder().trigger("plotunselected", [ ]);
            }
        }

        function setSelection(ranges, preventEvent) {
            var axis, range, axes = plot.getAxes();
            var o = plot.getOptions();

            if (o.selection.mode == "y") {
                selection.first.x = 0;
                selection.second.x = plot.width();
            }
            else {
                axis = ranges["xaxis"]? axes["xaxis"]: (ranges["x2axis"]? axes["x2axis"]: axes["xaxis"]);
                range = ranges["xaxis"] || ranges["x2axis"] || { from:ranges["x1"], to:ranges["x2"] }
                selection.first.x = axis.p2c(Math.min(range.from, range.to));
                selection.second.x = axis.p2c(Math.max(range.from, range.to));
            }

            if (o.selection.mode == "x") {
                selection.first.y = 0;
                selection.second.y = plot.height();
            }
            else {
                axis = ranges["yaxis"]? axes["yaxis"]: (ranges["y2axis"]? axes["y2axis"]: axes["yaxis"]);
                range = ranges["yaxis"] || ranges["y2axis"] || { from:ranges["y1"], to:ranges["y2"] }
                selection.first.y = axis.p2c(Math.min(range.from, range.to));
                selection.second.y = axis.p2c(Math.max(range.from, range.to));
            }

            selection.show = true;
            plot.triggerRedrawOverlay();
            if (!preventEvent)
                triggerSelectedEvent();
        }

        function selectionIsSane() {
            var minSize = 5;
            return Math.abs(selection.second.x - selection.first.x) >= minSize &&
                Math.abs(selection.second.y - selection.first.y) >= minSize;
        }

        plot.clearSelection = clearSelection;
        plot.setSelection = setSelection;
        plot.getSelection = getSelection;

        plot.hooks.bindEvents.push(function(plot, eventHolder) {
            var o = plot.getOptions();
            if (o.selection.mode != null)
                eventHolder.mousemove(onMouseMove);

            if (o.selection.mode != null)
                eventHolder.mousedown(onMouseDown);
        });


        plot.hooks.drawOverlay.push(function (plot, ctx) {
            // draw selection
            if (selection.show && selectionIsSane()) {
                var plotOffset = plot.getPlotOffset();
                var o = plot.getOptions();

                ctx.save();
                ctx.translate(plotOffset.left, plotOffset.top);

                var c = $.color.parse(o.selection.color);

                ctx.strokeStyle = c.scale('a', 0.8).toString();
                ctx.lineWidth = 1;
                ctx.lineJoin = "round";
                ctx.fillStyle = c.scale('a', 0.4).toString();

                var x = Math.min(selection.first.x, selection.second.x),
                    y = Math.min(selection.first.y, selection.second.y),
                    w = Math.abs(selection.second.x - selection.first.x),
                    h = Math.abs(selection.second.y - selection.first.y);

                ctx.fillRect(x, y, w, h);
                ctx.strokeRect(x, y, w, h);

                ctx.restore();
            }
        });
    }

    $.plot.plugins.push({
        init: init,
        options: {
            selection: {
                mode: null, // one of null, "x", "y" or "xy"
                color: "#e8cfac"
            }
        },
        name: 'selection',
        version: '1.0'
    });
})(jQuery);

Added Site/Site_W/flot/jquery.flot.selection.min.js.



>
1
(function(A){function B(J){var O={first:{x:-1,y:-1},second:{x:-1,y:-1},show:false,active:false};var L={};function D(Q){if(O.active){J.getPlaceholder().trigger("plotselecting",[F()]);K(Q)}}function M(Q){if(Q.which!=1){return }document.body.focus();if(document.onselectstart!==undefined&&L.onselectstart==null){L.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!==undefined&&L.ondrag==null){L.ondrag=document.ondrag;document.ondrag=function(){return false}}C(O.first,Q);O.active=true;A(document).one("mouseup",I)}function I(Q){if(document.onselectstart!==undefined){document.onselectstart=L.onselectstart}if(document.ondrag!==undefined){document.ondrag=L.ondrag}O.active=false;K(Q);if(E()){H()}else{J.getPlaceholder().trigger("plotunselected",[]);J.getPlaceholder().trigger("plotselecting",[null])}return false}function F(){if(!E()){return null}var R=Math.min(O.first.x,O.second.x),Q=Math.max(O.first.x,O.second.x),T=Math.max(O.first.y,O.second.y),S=Math.min(O.first.y,O.second.y);var U={};var V=J.getAxes();if(V.xaxis.used){U.xaxis={from:V.xaxis.c2p(R),to:V.xaxis.c2p(Q)}}if(V.x2axis.used){U.x2axis={from:V.x2axis.c2p(R),to:V.x2axis.c2p(Q)}}if(V.yaxis.used){U.yaxis={from:V.yaxis.c2p(T),to:V.yaxis.c2p(S)}}if(V.y2axis.used){U.y2axis={from:V.y2axis.c2p(T),to:V.y2axis.c2p(S)}}return U}function H(){var Q=F();J.getPlaceholder().trigger("plotselected",[Q]);var R=J.getAxes();if(R.xaxis.used&&R.yaxis.used){J.getPlaceholder().trigger("selected",[{x1:Q.xaxis.from,y1:Q.yaxis.from,x2:Q.xaxis.to,y2:Q.yaxis.to}])}}function G(R,S,Q){return S<R?R:(S>Q?Q:S)}function C(U,R){var T=J.getOptions();var S=J.getPlaceholder().offset();var Q=J.getPlotOffset();U.x=G(0,R.pageX-S.left-Q.left,J.width());U.y=G(0,R.pageY-S.top-Q.top,J.height());if(T.selection.mode=="y"){U.x=U==O.first?0:J.width()}if(T.selection.mode=="x"){U.y=U==O.first?0:J.height()}}function K(Q){if(Q.pageX==null){return }C(O.second,Q);if(E()){O.show=true;J.triggerRedrawOverlay()}else{P(true)}}function P(Q){if(O.show){O.show=false;J.triggerRedrawOverlay();if(!Q){J.getPlaceholder().trigger("plotunselected",[])}}}function N(R,Q){var T,S,U=J.getAxes();var V=J.getOptions();if(V.selection.mode=="y"){O.first.x=0;O.second.x=J.width()}else{T=R.xaxis?U.xaxis:(R.x2axis?U.x2axis:U.xaxis);S=R.xaxis||R.x2axis||{from:R.x1,to:R.x2};O.first.x=T.p2c(Math.min(S.from,S.to));O.second.x=T.p2c(Math.max(S.from,S.to))}if(V.selection.mode=="x"){O.first.y=0;O.second.y=J.height()}else{T=R.yaxis?U.yaxis:(R.y2axis?U.y2axis:U.yaxis);S=R.yaxis||R.y2axis||{from:R.y1,to:R.y2};O.first.y=T.p2c(Math.min(S.from,S.to));O.second.y=T.p2c(Math.max(S.from,S.to))}O.show=true;J.triggerRedrawOverlay();if(!Q){H()}}function E(){var Q=5;return Math.abs(O.second.x-O.first.x)>=Q&&Math.abs(O.second.y-O.first.y)>=Q}J.clearSelection=P;J.setSelection=N;J.getSelection=F;J.hooks.bindEvents.push(function(R,Q){var S=R.getOptions();if(S.selection.mode!=null){Q.mousemove(D)}if(S.selection.mode!=null){Q.mousedown(M)}});J.hooks.drawOverlay.push(function(T,Y){if(O.show&&E()){var R=T.getPlotOffset();var Q=T.getOptions();Y.save();Y.translate(R.left,R.top);var U=A.color.parse(Q.selection.color);Y.strokeStyle=U.scale("a",0.8).toString();Y.lineWidth=1;Y.lineJoin="round";Y.fillStyle=U.scale("a",0.4).toString();var W=Math.min(O.first.x,O.second.x),V=Math.min(O.first.y,O.second.y),X=Math.abs(O.second.x-O.first.x),S=Math.abs(O.second.y-O.first.y);Y.fillRect(W,V,X,S);Y.strokeRect(W,V,X,S);Y.restore()}})}A.plot.plugins.push({init:B,options:{selection:{mode:null,color:"#e8cfac"}},name:"selection",version:"1.0"})})(jQuery);

Added Site/Site_W/flot/jquery.flot.stack.js.

















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
Flot plugin for stacking data sets, i.e. putting them on top of each
other, for accumulative graphs. Note that the plugin assumes the data
is sorted on x. Also note that stacking a mix of positive and negative
values in most instances doesn't make sense (so it looks weird).

Two or more series are stacked when their "stack" attribute is set to
the same key (which can be any number or string or just "true"). To
specify the default stack, you can set

  series: {
    stack: null or true or key (number/string)
  }

or specify it for a specific series

  $.plot($("#placeholder"), [{ data: [ ... ], stack: true ])
  
The stacking order is determined by the order of the data series in
the array (later series end up on top of the previous).

Internally, the plugin modifies the datapoints in each series, adding
an offset to the y value. For line series, extra data points are
inserted through interpolation. For bar charts, the second y value is
also adjusted.
*/

(function ($) {
    var options = {
        series: { stack: null } // or number/string
    };
    
    function init(plot) {
        function findMatchingSeries(s, allseries) {
            var res = null
            for (var i = 0; i < allseries.length; ++i) {
                if (s == allseries[i])
                    break;
                
                if (allseries[i].stack == s.stack)
                    res = allseries[i];
            }
            
            return res;
        }
        
        function stackData(plot, s, datapoints) {
            if (s.stack == null)
                return;

            var other = findMatchingSeries(s, plot.getData());
            if (!other)
                return;
            
            var ps = datapoints.pointsize,
                points = datapoints.points,
                otherps = other.datapoints.pointsize,
                otherpoints = other.datapoints.points,
                newpoints = [],
                px, py, intery, qx, qy, bottom,
                withlines = s.lines.show, withbars = s.bars.show,
                withsteps = withlines && s.lines.steps,
                i = 0, j = 0, l;

            while (true) {
                if (i >= points.length)
                    break;

                l = newpoints.length;

                if (j >= otherpoints.length
                    || otherpoints[j] == null
                    || points[i] == null) {
                    // degenerate cases
                    for (m = 0; m < ps; ++m)
                        newpoints.push(points[i + m]);
                    i += ps;
                }
                else {
                    // cases where we actually got two points
                    px = points[i];
                    py = points[i + 1];
                    qx = otherpoints[j];
                    qy = otherpoints[j + 1];
                    bottom = 0;

                    if (px == qx) {
                        for (m = 0; m < ps; ++m)
                            newpoints.push(points[i + m]);

                        newpoints[l + 1] += qy;
                        bottom = qy;
                        
                        i += ps;
                        j += otherps;
                    }
                    else if (px > qx) {
                        // we got past point below, might need to
                        // insert interpolated extra point
                        if (withlines && i > 0 && points[i - ps] != null) {
                            intery = py + (points[i - ps + 1] - py) * (qx - px) / (points[i - ps] - px);
                            newpoints.push(qx);
                            newpoints.push(intery + qy)
                            for (m = 2; m < ps; ++m)
                                newpoints.push(points[i + m]);
                            bottom = qy; 
                        }

                        j += otherps;
                    }
                    else {
                        for (m = 0; m < ps; ++m)
                            newpoints.push(points[i + m]);
                        
                        // we might be able to interpolate a point below,
                        // this can give us a better y
                        if (withlines && j > 0 && otherpoints[j - ps] != null)
                            bottom = qy + (otherpoints[j - ps + 1] - qy) * (px - qx) / (otherpoints[j - ps] - qx);

                        newpoints[l + 1] += bottom;
                        
                        i += ps;
                    }
                    
                    if (l != newpoints.length && withbars)
                        newpoints[l + 2] += bottom;
                }

                // maintain the line steps invariant
                if (withsteps && l != newpoints.length && l > 0
                    && newpoints[l] != null
                    && newpoints[l] != newpoints[l - ps]
                    && newpoints[l + 1] != newpoints[l - ps + 1]) {
                    for (m = 0; m < ps; ++m)
                        newpoints[l + ps + m] = newpoints[l + m];
                    newpoints[l + 1] = newpoints[l - ps + 1];
                }
            }
            
            datapoints.points = newpoints;
        }
        
        plot.hooks.processDatapoints.push(stackData);
    }
    
    $.plot.plugins.push({
        init: init,
        options: options,
        name: 'stack',
        version: '1.0'
    });
})(jQuery);

Added Site/Site_W/flot/jquery.flot.stack.min.js.



>
1
(function(B){var A={series:{stack:null}};function C(F){function D(J,I){var H=null;for(var G=0;G<I.length;++G){if(J==I[G]){break}if(I[G].stack==J.stack){H=I[G]}}return H}function E(W,P,G){if(P.stack==null){return }var L=D(P,W.getData());if(!L){return }var T=G.pointsize,Y=G.points,H=L.datapoints.pointsize,S=L.datapoints.points,N=[],R,Q,I,a,Z,M,O=P.lines.show,K=P.bars.show,J=O&&P.lines.steps,X=0,V=0,U;while(true){if(X>=Y.length){break}U=N.length;if(V>=S.length||S[V]==null||Y[X]==null){for(m=0;m<T;++m){N.push(Y[X+m])}X+=T}else{R=Y[X];Q=Y[X+1];a=S[V];Z=S[V+1];M=0;if(R==a){for(m=0;m<T;++m){N.push(Y[X+m])}N[U+1]+=Z;M=Z;X+=T;V+=H}else{if(R>a){if(O&&X>0&&Y[X-T]!=null){I=Q+(Y[X-T+1]-Q)*(a-R)/(Y[X-T]-R);N.push(a);N.push(I+Z);for(m=2;m<T;++m){N.push(Y[X+m])}M=Z}V+=H}else{for(m=0;m<T;++m){N.push(Y[X+m])}if(O&&V>0&&S[V-T]!=null){M=Z+(S[V-T+1]-Z)*(R-a)/(S[V-T]-a)}N[U+1]+=M;X+=T}}if(U!=N.length&&K){N[U+2]+=M}}if(J&&U!=N.length&&U>0&&N[U]!=null&&N[U]!=N[U-T]&&N[U+1]!=N[U-T+1]){for(m=0;m<T;++m){N[U+T+m]=N[U+m]}N[U+1]=N[U-T+1]}}G.points=N}F.hooks.processDatapoints.push(E)}B.plot.plugins.push({init:C,options:A,name:"stack",version:"1.0"})})(jQuery);

Added Site/Site_W/flot/jquery.flot.threshold.js.















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
Flot plugin for thresholding data. Controlled through the option
"threshold" in either the global series options

  series: {
    threshold: {
      below: number
      color: colorspec
    }
  }

or in a specific series

  $.plot($("#placeholder"), [{ data: [ ... ], threshold: { ... }}])

The data points below "below" are drawn with the specified color. This
makes it easy to mark points below 0, e.g. for budget data.

Internally, the plugin works by splitting the data into two series,
above and below the threshold. The extra series below the threshold
will have its label cleared and the special "originSeries" attribute
set to the original series. You may need to check for this in hover
events.
*/

(function ($) {
    var options = {
        series: { threshold: null } // or { below: number, color: color spec}
    };
    
    function init(plot) {
        function thresholdData(plot, s, datapoints) {
            if (!s.threshold)
                return;
            
            var ps = datapoints.pointsize, i, x, y, p, prevp,
                thresholded = $.extend({}, s); // note: shallow copy

            thresholded.datapoints = { points: [], pointsize: ps };
            thresholded.label = null;
            thresholded.color = s.threshold.color;
            thresholded.threshold = null;
            thresholded.originSeries = s;
            thresholded.data = [];

            var below = s.threshold.below,
                origpoints = datapoints.points,
                addCrossingPoints = s.lines.show;

            threspoints = [];
            newpoints = [];

            for (i = 0; i < origpoints.length; i += ps) {
                x = origpoints[i]
                y = origpoints[i + 1];

                prevp = p;
                if (y < below)
                    p = threspoints;
                else
                    p = newpoints;

                if (addCrossingPoints && prevp != p && x != null
                    && i > 0 && origpoints[i - ps] != null) {
                    var interx = (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]) * (below - y) + x;
                    prevp.push(interx);
                    prevp.push(below);
                    for (m = 2; m < ps; ++m)
                        prevp.push(origpoints[i + m]);
                    
                    p.push(null); // start new segment
                    p.push(null);
                    for (m = 2; m < ps; ++m)
                        p.push(origpoints[i + m]);
                    p.push(interx);
                    p.push(below);
                    for (m = 2; m < ps; ++m)
                        p.push(origpoints[i + m]);
                }

                p.push(x);
                p.push(y);
            }

            datapoints.points = newpoints;
            thresholded.datapoints.points = threspoints;
            
            if (thresholded.datapoints.points.length > 0)
                plot.getData().push(thresholded);
                
            // FIXME: there are probably some edge cases left in bars
        }
        
        plot.hooks.processDatapoints.push(thresholdData);
    }
    
    $.plot.plugins.push({
        init: init,
        options: options,
        name: 'threshold',
        version: '1.0'
    });
})(jQuery);

Added Site/Site_W/flot/jquery.flot.threshold.min.js.



>
1
(function(B){var A={series:{threshold:null}};function C(D){function E(L,S,M){if(!S.threshold){return }var F=M.pointsize,I,O,N,G,K,H=B.extend({},S);H.datapoints={points:[],pointsize:F};H.label=null;H.color=S.threshold.color;H.threshold=null;H.originSeries=S;H.data=[];var P=S.threshold.below,Q=M.points,R=S.lines.show;threspoints=[];newpoints=[];for(I=0;I<Q.length;I+=F){O=Q[I];N=Q[I+1];K=G;if(N<P){G=threspoints}else{G=newpoints}if(R&&K!=G&&O!=null&&I>0&&Q[I-F]!=null){var J=(O-Q[I-F])/(N-Q[I-F+1])*(P-N)+O;K.push(J);K.push(P);for(m=2;m<F;++m){K.push(Q[I+m])}G.push(null);G.push(null);for(m=2;m<F;++m){G.push(Q[I+m])}G.push(J);G.push(P);for(m=2;m<F;++m){G.push(Q[I+m])}}G.push(O);G.push(N)}M.points=newpoints;H.datapoints.points=threspoints;if(H.datapoints.points.length>0){L.getData().push(H)}}D.hooks.processDatapoints.push(E)}B.plot.plugins.push({init:C,options:A,name:"threshold",version:"1.0"})})(jQuery);

Added Site/Site_W/flot/jquery.js.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
/*!
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){

var 
	// Will speed up references to window, and allows munging its name.
	window = this,
	// Will speed up references to undefined, and allows munging its name.
	undefined,
	// Map over jQuery in case of overwrite
	_jQuery = window.jQuery,
	// Map over the $ in case of overwrite
	_$ = window.$,

	jQuery = window.jQuery = window.$ = function( selector, context ) {
		// The jQuery object is actually just the init constructor 'enhanced'
		return new jQuery.fn.init( selector, context );
	},

	// A simple way to check for HTML strings or ID strings
	// (both of which we optimize for)
	quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
	// Is it a simple selector
	isSimple = /^.[^:#\[\.,]*$/;

jQuery.fn = jQuery.prototype = {
	init: function( selector, context ) {
		// Make sure that a selection was provided
		selector = selector || document;

		// Handle $(DOMElement)
		if ( selector.nodeType ) {
			this[0] = selector;
			this.length = 1;
			this.context = selector;
			return this;
		}
		// Handle HTML strings
		if ( typeof selector === "string" ) {
			// Are we dealing with HTML string or an ID?
			var match = quickExpr.exec( selector );

			// Verify a match, and that no context was specified for #id
			if ( match && (match[1] || !context) ) {

				// HANDLE: $(html) -> $(array)
				if ( match[1] )
					selector = jQuery.clean( [ match[1] ], context );

				// HANDLE: $("#id")
				else {
					var elem = document.getElementById( match[3] );

					// Handle the case where IE and Opera return items
					// by name instead of ID
					if ( elem && elem.id != match[3] )
						return jQuery().find( selector );

					// Otherwise, we inject the element directly into the jQuery object
					var ret = jQuery( elem || [] );
					ret.context = document;
					ret.selector = selector;
					return ret;
				}

			// HANDLE: $(expr, [context])
			// (which is just equivalent to: $(content).find(expr)
			} else
				return jQuery( context ).find( selector );

		// HANDLE: $(function)
		// Shortcut for document ready
		} else if ( jQuery.isFunction( selector ) )
			return jQuery( document ).ready( selector );

		// Make sure that old selector state is passed along
		if ( selector.selector && selector.context ) {
			this.selector = selector.selector;
			this.context = selector.context;
		}

		return this.setArray(jQuery.isArray( selector ) ?
			selector :
			jQuery.makeArray(selector));
	},

	// Start with an empty selector
	selector: "",

	// The current version of jQuery being used
	jquery: "1.3.2",

	// The number of elements contained in the matched element set
	size: function() {
		return this.length;
	},

	// Get the Nth element in the matched element set OR
	// Get the whole matched element set as a clean array
	get: function( num ) {
		return num === undefined ?

			// Return a 'clean' array
			Array.prototype.slice.call( this ) :

			// Return just the object
			this[ num ];
	},

	// Take an array of elements and push it onto the stack
	// (returning the new matched element set)
	pushStack: function( elems, name, selector ) {
		// Build a new jQuery matched element set
		var ret = jQuery( elems );

		// Add the old object onto the stack (as a reference)
		ret.prevObject = this;

		ret.context = this.context;

		if ( name === "find" )
			ret.selector = this.selector + (this.selector ? " " : "") + selector;
		else if ( name )
			ret.selector = this.selector + "." + name + "(" + selector + ")";

		// Return the newly-formed element set
		return ret;
	},

	// Force the current matched set of elements to become
	// the specified array of elements (destroying the stack in the process)
	// You should use pushStack() in order to do this, but maintain the stack
	setArray: function( elems ) {
		// Resetting the length to 0, then using the native Array push
		// is a super-fast way to populate an object with array-like properties
		this.length = 0;
		Array.prototype.push.apply( this, elems );

		return this;
	},

	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	// Determine the position of an element within
	// the matched set of elements
	index: function( elem ) {
		// Locate the position of the desired element
		return jQuery.inArray(
			// If it receives a jQuery object, the first element is used
			elem && elem.jquery ? elem[0] : elem
		, this );
	},

	attr: function( name, value, type ) {
		var options = name;

		// Look for the case where we're accessing a style value
		if ( typeof name === "string" )
			if ( value === undefined )
				return this[0] && jQuery[ type || "attr" ]( this[0], name );

			else {
				options = {};
				options[ name ] = value;
			}

		// Check to see if we're setting style values
		return this.each(function(i){
			// Set all the styles
			for ( name in options )
				jQuery.attr(
					type ?
						this.style :
						this,
					name, jQuery.prop( this, options[ name ], type, i, name )
				);
		});
	},

	css: function( key, value ) {
		// ignore negative width and height values
		if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
			value = undefined;
		return this.attr( key, value, "curCSS" );
	},

	text: function( text ) {
		if ( typeof text !== "object" && text != null )
			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );

		var ret = "";

		jQuery.each( text || this, function(){
			jQuery.each( this.childNodes, function(){
				if ( this.nodeType != 8 )
					ret += this.nodeType != 1 ?
						this.nodeValue :
						jQuery.fn.text( [ this ] );
			});
		});

		return ret;
	},

	wrapAll: function( html ) {
		if ( this[0] ) {
			// The elements to wrap the target around
			var wrap = jQuery( html, this[0].ownerDocument ).clone();

			if ( this[0].parentNode )
				wrap.insertBefore( this[0] );

			wrap.map(function(){
				var elem = this;

				while ( elem.firstChild )
					elem = elem.firstChild;

				return elem;
			}).append(this);
		}

		return this;
	},

	wrapInner: function( html ) {
		return this.each(function(){
			jQuery( this ).contents().wrapAll( html );
		});
	},

	wrap: function( html ) {
		return this.each(function(){
			jQuery( this ).wrapAll( html );
		});
	},

	append: function() {
		return this.domManip(arguments, true, function(elem){
			if (this.nodeType == 1)
				this.appendChild( elem );
		});
	},

	prepend: function() {
		return this.domManip(arguments, true, function(elem){
			if (this.nodeType == 1)
				this.insertBefore( elem, this.firstChild );
		});
	},

	before: function() {
		return this.domManip(arguments, false, function(elem){
			this.parentNode.insertBefore( elem, this );
		});
	},

	after: function() {
		return this.domManip(arguments, false, function(elem){
			this.parentNode.insertBefore( elem, this.nextSibling );
		});
	},

	end: function() {
		return this.prevObject || jQuery( [] );
	},

	// For internal use only.
	// Behaves like an Array's method, not like a jQuery method.
	push: [].push,
	sort: [].sort,
	splice: [].splice,

	find: function( selector ) {
		if ( this.length === 1 ) {
			var ret = this.pushStack( [], "find", selector );
			ret.length = 0;
			jQuery.find( selector, this[0], ret );
			return ret;
		} else {
			return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
				return jQuery.find( selector, elem );
			})), "find", selector );
		}
	},

	clone: function( events ) {
		// Do the clone
		var ret = this.map(function(){
			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
				// IE copies events bound via attachEvent when
				// using cloneNode. Calling detachEvent on the
				// clone will also remove the events from the orignal
				// In order to get around this, we use innerHTML.
				// Unfortunately, this means some modifications to
				// attributes in IE that are actually only stored
				// as properties will not be copied (such as the
				// the name attribute on an input).
				var html = this.outerHTML;
				if ( !html ) {
					var div = this.ownerDocument.createElement("div");
					div.appendChild( this.cloneNode(true) );
					html = div.innerHTML;
				}

				return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
			} else
				return this.cloneNode(true);
		});

		// Copy the events from the original to the clone
		if ( events === true ) {
			var orig = this.find("*").andSelf(), i = 0;

			ret.find("*").andSelf().each(function(){
				if ( this.nodeName !== orig[i].nodeName )
					return;

				var events = jQuery.data( orig[i], "events" );

				for ( var type in events ) {
					for ( var handler in events[ type ] ) {
						jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
					}
				}

				i++;
			});
		}

		// Return the cloned set
		return ret;
	},

	filter: function( selector ) {
		return this.pushStack(
			jQuery.isFunction( selector ) &&
			jQuery.grep(this, function(elem, i){
				return selector.call( elem, i );
			}) ||

			jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
				return elem.nodeType === 1;
			}) ), "filter", selector );
	},

	closest: function( selector ) {
		var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
			closer = 0;

		return this.map(function(){
			var cur = this;
			while ( cur && cur.ownerDocument ) {
				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
					jQuery.data(cur, "closest", closer);
					return cur;
				}
				cur = cur.parentNode;
				closer++;
			}
		});
	},

	not: function( selector ) {
		if ( typeof selector === "string" )
			// test special case where just one selector is passed in
			if ( isSimple.test( selector ) )
				return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
			else
				selector = jQuery.multiFilter( selector, this );

		var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
		return this.filter(function() {
			return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
		});
	},

	add: function( selector ) {
		return this.pushStack( jQuery.unique( jQuery.merge(
			this.get(),
			typeof selector === "string" ?
				jQuery( selector ) :
				jQuery.makeArray( selector )
		)));
	},

	is: function( selector ) {
		return !!selector && jQuery.multiFilter( selector, this ).length > 0;
	},

	hasClass: function( selector ) {
		return !!selector && this.is( "." + selector );
	},

	val: function( value ) {
		if ( value === undefined ) {			
			var elem = this[0];

			if ( elem ) {
				if( jQuery.nodeName( elem, 'option' ) )
					return (elem.attributes.value || {}).specified ? elem.value : elem.text;
				
				// We need to handle select boxes special
				if ( jQuery.nodeName( elem, "select" ) ) {
					var index = elem.selectedIndex,
						values = [],
						options = elem.options,
						one = elem.type == "select-one";

					// Nothing was selected
					if ( index < 0 )
						return null;

					// Loop through all the selected options
					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
						var option = options[ i ];

						if ( option.selected ) {
							// Get the specifc value for the option
							value = jQuery(option).val();

							// We don't need an array for one selects
							if ( one )
								return value;

							// Multi-Selects return an array
							values.push( value );
						}
					}

					return values;				
				}

				// Everything else, we just grab the value
				return (elem.value || "").replace(/\r/g, "");

			}

			return undefined;
		}

		if ( typeof value === "number" )
			value += '';

		return this.each(function(){
			if ( this.nodeType != 1 )
				return;

			if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
				this.checked = (jQuery.inArray(this.value, value) >= 0 ||
					jQuery.inArray(this.name, value) >= 0);

			else if ( jQuery.nodeName( this, "select" ) ) {
				var values = jQuery.makeArray(value);

				jQuery( "option", this ).each(function(){
					this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
						jQuery.inArray( this.text, values ) >= 0);
				});

				if ( !values.length )
					this.selectedIndex = -1;

			} else
				this.value = value;
		});
	},

	html: function( value ) {
		return value === undefined ?
			(this[0] ?
				this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
				null) :
			this.empty().append( value );
	},

	replaceWith: function( value ) {
		return this.after( value ).remove();
	},

	eq: function( i ) {
		return this.slice( i, +i + 1 );
	},

	slice: function() {
		return this.pushStack( Array.prototype.slice.apply( this, arguments ),
			"slice", Array.prototype.slice.call(arguments).join(",") );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function(elem, i){
			return callback.call( elem, i, elem );
		}));
	},

	andSelf: function() {
		return this.add( this.prevObject );
	},

	domManip: function( args, table, callback ) {
		if ( this[0] ) {
			var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
				scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
				first = fragment.firstChild;

			if ( first )
				for ( var i = 0, l = this.length; i < l; i++ )
					callback.call( root(this[i], first), this.length > 1 || i > 0 ?
							fragment.cloneNode(true) : fragment );
		
			if ( scripts )
				jQuery.each( scripts, evalScript );
		}

		return this;
		
		function root( elem, cur ) {
			return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
				(elem.getElementsByTagName("tbody")[0] ||
				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
				elem;
		}
	}
};

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

function evalScript( i, elem ) {
	if ( elem.src )
		jQuery.ajax({
			url: elem.src,
			async: false,
			dataType: "script"
		});

	else
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

	if ( elem.parentNode )
		elem.parentNode.removeChild( elem );
}

function now(){
	return +new Date;
}

jQuery.extend = jQuery.fn.extend = function() {
	// copy reference to target object
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !jQuery.isFunction(target) )
		target = {};

	// extend jQuery itself if only one argument is passed
	if ( length == i ) {
		target = this;
		--i;
	}

	for ( ; i < length; i++ )
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null )
			// Extend the base object
			for ( var name in options ) {
				var src = target[ name ], copy = options[ name ];

				// Prevent never-ending loop
				if ( target === copy )
					continue;

				// Recurse if we're merging object values
				if ( deep && copy && typeof copy === "object" && !copy.nodeType )
					target[ name ] = jQuery.extend( deep, 
						// Never move original objects, clone them
						src || ( copy.length != null ? [ ] : { } )
					, copy );

				// Don't bring in undefined values
				else if ( copy !== undefined )
					target[ name ] = copy;

			}

	// Return the modified object
	return target;
};

// exclude the following css properties to add px
var	exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
	// cache defaultView
	defaultView = document.defaultView || {},
	toString = Object.prototype.toString;

jQuery.extend({
	noConflict: function( deep ) {
		window.$ = _$;

		if ( deep )
			window.jQuery = _jQuery;

		return jQuery;
	},

	// See test/unit/core.js for details concerning isFunction.
	// Since version 1.3, DOM methods and functions like alert
	// aren't supported. They return false on IE (#2968).
	isFunction: function( obj ) {
		return toString.call(obj) === "[object Function]";
	},

	isArray: function( obj ) {
		return toString.call(obj) === "[object Array]";
	},

	// check if an element is in a (or is an) XML document
	isXMLDoc: function( elem ) {
		return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
			!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
	},

	// Evalulates a script in a global context
	globalEval: function( data ) {
		if ( data && /\S/.test(data) ) {
			// Inspired by code by Andrea Giammarchi
			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
			var head = document.getElementsByTagName("head")[0] || document.documentElement,
				script = document.createElement("script");

			script.type = "text/javascript";
			if ( jQuery.support.scriptEval )
				script.appendChild( document.createTextNode( data ) );
			else
				script.text = data;

			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
			// This arises when a base node is used (#2709).
			head.insertBefore( script, head.firstChild );
			head.removeChild( script );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
	},

	// args is for internal usage only
	each: function( object, callback, args ) {
		var name, i = 0, length = object.length;

		if ( args ) {
			if ( length === undefined ) {
				for ( name in object )
					if ( callback.apply( object[ name ], args ) === false )
						break;
			} else
				for ( ; i < length; )
					if ( callback.apply( object[ i++ ], args ) === false )
						break;

		// A special, fast, case for the most common use of each
		} else {
			if ( length === undefined ) {
				for ( name in object )
					if ( callback.call( object[ name ], name, object[ name ] ) === false )
						break;
			} else
				for ( var value = object[0];
					i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
		}

		return object;
	},

	prop: function( elem, value, type, i, name ) {
		// Handle executable functions
		if ( jQuery.isFunction( value ) )
			value = value.call( elem, i );

		// Handle passing in a number to a CSS property
		return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
			value + "px" :
			value;
	},

	className: {
		// internal only, use addClass("class")
		add: function( elem, classNames ) {
			jQuery.each((classNames || "").split(/\s+/), function(i, className){
				if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
					elem.className += (elem.className ? " " : "") + className;
			});
		},

		// internal only, use removeClass("class")
		remove: function( elem, classNames ) {
			if (elem.nodeType == 1)
				elem.className = classNames !== undefined ?
					jQuery.grep(elem.className.split(/\s+/), function(className){
						return !jQuery.className.has( classNames, className );
					}).join(" ") :
					"";
		},

		// internal only, use hasClass("class")
		has: function( elem, className ) {
			return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
		}
	},

	// A method for quickly swapping in/out CSS properties to get correct calculations
	swap: function( elem, options, callback ) {
		var old = {};
		// Remember the old values, and insert the new ones
		for ( var name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}

		callback.call( elem );

		// Revert the old values
		for ( var name in options )
			elem.style[ name ] = old[ name ];
	},

	css: function( elem, name, force, extra ) {
		if ( name == "width" || name == "height" ) {
			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];

			function getWH() {
				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;

				if ( extra === "border" )
					return;

				jQuery.each( which, function() {
					if ( !extra )
						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
					if ( extra === "margin" )
						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
					else
						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
				});
			}

			if ( elem.offsetWidth !== 0 )
				getWH();
			else
				jQuery.swap( elem, props, getWH );

			return Math.max(0, Math.round(val));
		}

		return jQuery.curCSS( elem, name, force );
	},

	curCSS: function( elem, name, force ) {
		var ret, style = elem.style;

		// We need to handle opacity special in IE
		if ( name == "opacity" && !jQuery.support.opacity ) {
			ret = jQuery.attr( style, "opacity" );

			return ret == "" ?
				"1" :
				ret;
		}

		// Make sure we're using the right name for getting the float value
		if ( name.match( /float/i ) )
			name = styleFloat;

		if ( !force && style && style[ name ] )
			ret = style[ name ];

		else if ( defaultView.getComputedStyle ) {

			// Only "float" is needed here
			if ( name.match( /float/i ) )
				name = "float";

			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();

			var computedStyle = defaultView.getComputedStyle( elem, null );

			if ( computedStyle )
				ret = computedStyle.getPropertyValue( name );

			// We should always get a number back from opacity
			if ( name == "opacity" && ret == "" )
				ret = "1";

		} else if ( elem.currentStyle ) {
			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
				return letter.toUpperCase();
			});

			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

			// From the awesome hack by Dean Edwards
			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291

			// If we're not dealing with a regular pixel number
			// but a number that has a weird ending, we need to convert it to pixels
			if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
				// Remember the original values
				var left = style.left, rsLeft = elem.runtimeStyle.left;

				// Put in the new values to get a computed value out
				elem.runtimeStyle.left = elem.currentStyle.left;
				style.left = ret || 0;
				ret = style.pixelLeft + "px";

				// Revert the changed values
				style.left = left;
				elem.runtimeStyle.left = rsLeft;
			}
		}

		return ret;
	},

	clean: function( elems, context, fragment ) {
		context = context || document;

		// !context.createElement fails in IE with an error but returns typeof 'object'
		if ( typeof context.createElement === "undefined" )
			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;

		// If a single string is passed in and it's a single tag
		// just do a createElement and skip the rest
		if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
			var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
			if ( match )
				return [ context.createElement( match[1] ) ];
		}

		var ret = [], scripts = [], div = context.createElement("div");

		jQuery.each(elems, function(i, elem){
			if ( typeof elem === "number" )
				elem += '';

			if ( !elem )
				return;

			// Convert html string into DOM nodes
			if ( typeof elem === "string" ) {
				// Fix "XHTML"-style tags in all browsers
				elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
						all :
						front + "></" + tag + ">";
				});

				// Trim whitespace, otherwise indexOf won't work as expected
				var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();

				var wrap =
					// option or optgroup
					!tags.indexOf("<opt") &&
					[ 1, "<select multiple='multiple'>", "</select>" ] ||

					!tags.indexOf("<leg") &&
					[ 1, "<fieldset>", "</fieldset>" ] ||

					tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
					[ 1, "<table>", "</table>" ] ||

					!tags.indexOf("<tr") &&
					[ 2, "<table><tbody>", "</tbody></table>" ] ||

				 	// <thead> matched above
					(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
					[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||

					!tags.indexOf("<col") &&
					[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||

					// IE can't serialize <link> and <script> tags normally
					!jQuery.support.htmlSerialize &&
					[ 1, "div<div>", "</div>" ] ||

					[ 0, "", "" ];

				// Go to html and back, then peel off extra wrappers
				div.innerHTML = wrap[1] + elem + wrap[2];

				// Move to the right depth
				while ( wrap[0]-- )
					div = div.lastChild;

				// Remove IE's autoinserted <tbody> from table fragments
				if ( !jQuery.support.tbody ) {

					// String was a <table>, *may* have spurious <tbody>
					var hasBody = /<tbody/i.test(elem),
						tbody = !tags.indexOf("<table") && !hasBody ?
							div.firstChild && div.firstChild.childNodes :

						// String was a bare <thead> or <tfoot>
						wrap[1] == "<table>" && !hasBody ?
							div.childNodes :
							[];

					for ( var j = tbody.length - 1; j >= 0 ; --j )
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
							tbody[ j ].parentNode.removeChild( tbody[ j ] );

					}

				// IE completely kills leading whitespace when innerHTML is used
				if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
					div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
				
				elem = jQuery.makeArray( div.childNodes );
			}

			if ( elem.nodeType )
				ret.push( elem );
			else
				ret = jQuery.merge( ret, elem );

		});

		if ( fragment ) {
			for ( var i = 0; ret[i]; i++ ) {
				if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
				} else {
					if ( ret[i].nodeType === 1 )
						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
					fragment.appendChild( ret[i] );
				}
			}
			
			return scripts;
		}

		return ret;
	},

	attr: function( elem, name, value ) {
		// don't set attributes on text and comment nodes
		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
			return undefined;

		var notxml = !jQuery.isXMLDoc( elem ),
			// Whether we are setting (or getting)
			set = value !== undefined;

		// Try to normalize/fix the name
		name = notxml && jQuery.props[ name ] || name;

		// Only do all the following if this is a node (faster for style)
		// IE elem.getAttribute passes even for style
		if ( elem.tagName ) {

			// These attributes require special treatment
			var special = /href|src|style/.test( name );

			// Safari mis-reports the default selected property of a hidden option
			// Accessing the parent's selectedIndex property fixes it
			if ( name == "selected" && elem.parentNode )
				elem.parentNode.selectedIndex;

			// If applicable, access the attribute via the DOM 0 way
			if ( name in elem && notxml && !special ) {
				if ( set ){
					// We can't allow the type property to be changed (since it causes problems in IE)
					if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
						throw "type property can't be changed";

					elem[ name ] = value;
				}

				// browsers index elements by id/name on forms, give priority to attributes.
				if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
					return elem.getAttributeNode( name ).nodeValue;

				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
				if ( name == "tabIndex" ) {
					var attributeNode = elem.getAttributeNode( "tabIndex" );
					return attributeNode && attributeNode.specified
						? attributeNode.value
						: elem.nodeName.match(/(button|input|object|select|textarea)/i)
							? 0
							: elem.nodeName.match(/^(a|area)$/i) && elem.href
								? 0
								: undefined;
				}

				return elem[ name ];
			}

			if ( !jQuery.support.style && notxml &&  name == "style" )
				return jQuery.attr( elem.style, "cssText", value );

			if ( set )
				// convert the value to a string (all browsers do this but IE) see #1070
				elem.setAttribute( name, "" + value );

			var attr = !jQuery.support.hrefNormalized && notxml && special
					// Some attributes require a special call on IE
					? elem.getAttribute( name, 2 )
					: elem.getAttribute( name );

			// Non-existent attributes return null, we normalize to undefined
			return attr === null ? undefined : attr;
		}

		// elem is actually elem.style ... set the style

		// IE uses filters for opacity
		if ( !jQuery.support.opacity && name == "opacity" ) {
			if ( set ) {
				// IE has trouble with opacity if it does not have layout
				// Force it by setting the zoom level
				elem.zoom = 1;

				// Set the alpha filter to set the opacity
				elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
					(parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
			}

			return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
				(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
				"";
		}

		name = name.replace(/-([a-z])/ig, function(all, letter){
			return letter.toUpperCase();
		});

		if ( set )
			elem[ name ] = value;

		return elem[ name ];
	},

	trim: function( text ) {
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},

	makeArray: function( array ) {
		var ret = [];

		if( array != null ){
			var i = array.length;
			// The window, strings (and functions) also have 'length'
			if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
				ret[0] = array;
			else
				while( i )
					ret[--i] = array[i];
		}

		return ret;
	},

	inArray: function( elem, array ) {
		for ( var i = 0, length = array.length; i < length; i++ )
		// Use === because on IE, window == document
			if ( array[ i ] === elem )
				return i;

		return -1;
	},

	merge: function( first, second ) {
		// We have to loop this way because IE & Opera overwrite the length
		// expando of getElementsByTagName
		var i = 0, elem, pos = first.length;
		// Also, we need to make sure that the correct elements are being returned
		// (IE returns comment nodes in a '*' query)
		if ( !jQuery.support.getAll ) {
			while ( (elem = second[ i++ ]) != null )
				if ( elem.nodeType != 8 )
					first[ pos++ ] = elem;

		} else
			while ( (elem = second[ i++ ]) != null )
				first[ pos++ ] = elem;

		return first;
	},

	unique: function( array ) {
		var ret = [], done = {};

		try {

			for ( var i = 0, length = array.length; i < length; i++ ) {
				var id = jQuery.data( array[ i ] );

				if ( !done[ id ] ) {
					done[ id ] = true;
					ret.push( array[ i ] );
				}
			}

		} catch( e ) {
			ret = array;
		}

		return ret;
	},

	grep: function( elems, callback, inv ) {
		var ret = [];

		// Go through the array, only saving the items
		// that pass the validator function
		for ( var i = 0, length = elems.length; i < length; i++ )
			if ( !inv != !callback( elems[ i ], i ) )
				ret.push( elems[ i ] );

		return ret;
	},

	map: function( elems, callback ) {
		var ret = [];

		// Go through the array, translating each of the items to their
		// new value (or values).
		for ( var i = 0, length = elems.length; i < length; i++ ) {
			var value = callback( elems[ i ], i );

			if ( value != null )
				ret[ ret.length ] = value;
		}

		return ret.concat.apply( [], ret );
	}
});

// Use of jQuery.browser is deprecated.
// It's included for backwards compatibility and plugins,
// although they should work to migrate away.

var userAgent = navigator.userAgent.toLowerCase();

// Figure out what browser is being used
jQuery.browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

jQuery.each({
	parent: function(elem){return elem.parentNode;},
	parents: function(elem){return jQuery.dir(elem,"parentNode");},
	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
	children: function(elem){return jQuery.sibling(elem.firstChild);},
	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
	jQuery.fn[ name ] = function( selector ) {
		var ret = jQuery.map( this, fn );

		if ( selector && typeof selector == "string" )
			ret = jQuery.multiFilter( selector, ret );

		return this.pushStack( jQuery.unique( ret ), name, selector );
	};
});

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function(name, original){
	jQuery.fn[ name ] = function( selector ) {
		var ret = [], insert = jQuery( selector );

		for ( var i = 0, l = insert.length; i < l; i++ ) {
			var elems = (i > 0 ? this.clone(true) : this).get();
			jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
			ret = ret.concat( elems );
		}

		return this.pushStack( ret, name, selector );
	};
});

jQuery.each({
	removeAttr: function( name ) {
		jQuery.attr( this, name, "" );
		if (this.nodeType == 1)
			this.removeAttribute( name );
	},

	addClass: function( classNames ) {
		jQuery.className.add( this, classNames );
	},

	removeClass: function( classNames ) {
		jQuery.className.remove( this, classNames );
	},

	toggleClass: function( classNames, state ) {
		if( typeof state !== "boolean" )
			state = !jQuery.className.has( this, classNames );
		jQuery.className[ state ? "add" : "remove" ]( this, classNames );
	},

	remove: function( selector ) {
		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
			// Prevent memory leaks
			jQuery( "*", this ).add([this]).each(function(){
				jQuery.event.remove(this);
				jQuery.removeData(this);
			});
			if (this.parentNode)
				this.parentNode.removeChild( this );
		}
	},

	empty: function() {
		// Remove element nodes and prevent memory leaks
		jQuery(this).children().remove();

		// Remove any remaining nodes
		while ( this.firstChild )
			this.removeChild( this.firstChild );
	}
}, function(name, fn){
	jQuery.fn[ name ] = function(){
		return this.each( fn, arguments );
	};
});

// Helper function used by the dimensions and offset modules
function num(elem, prop) {
	return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
}
var expando = "jQuery" + now(), uuid = 0, windowData = {};

jQuery.extend({
	cache: {},

	data: function( elem, name, data ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		// Compute a unique ID for the element
		if ( !id )
			id = elem[ expando ] = ++uuid;

		// Only generate the data cache if we're
		// trying to access or manipulate it
		if ( name && !jQuery.cache[ id ] )
			jQuery.cache[ id ] = {};

		// Prevent overriding the named cache with undefined values
		if ( data !== undefined )
			jQuery.cache[ id ][ name ] = data;

		// Return the named cache data, or the ID for the element
		return name ?
			jQuery.cache[ id ][ name ] :
			id;
	},

	removeData: function( elem, name ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		// If we want to remove a specific section of the element's data
		if ( name ) {
			if ( jQuery.cache[ id ] ) {
				// Remove the section of cache data
				delete jQuery.cache[ id ][ name ];

				// If we've removed all the data, remove the element's cache
				name = "";

				for ( name in jQuery.cache[ id ] )
					break;

				if ( !name )
					jQuery.removeData( elem );
			}

		// Otherwise, we want to remove all of the element's data
		} else {
			// Clean up the element expando
			try {
				delete elem[ expando ];
			} catch(e){
				// IE has trouble directly removing the expando
				// but it's ok with using removeAttribute
				if ( elem.removeAttribute )
					elem.removeAttribute( expando );
			}

			// Completely remove the data cache
			delete jQuery.cache[ id ];
		}
	},
	queue: function( elem, type, data ) {
		if ( elem ){
	
			type = (type || "fx") + "queue";
	
			var q = jQuery.data( elem, type );
	
			if ( !q || jQuery.isArray(data) )
				q = jQuery.data( elem, type, jQuery.makeArray(data) );
			else if( data )
				q.push( data );
	
		}
		return q;
	},

	dequeue: function( elem, type ){
		var queue = jQuery.queue( elem, type ),
			fn = queue.shift();
		
		if( !type || type === "fx" )
			fn = queue[0];
			
		if( fn !== undefined )
			fn.call(elem);
	}
});

jQuery.fn.extend({
	data: function( key, value ){
		var parts = key.split(".");
		parts[1] = parts[1] ? "." + parts[1] : "";

		if ( value === undefined ) {
			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);

			if ( data === undefined && this.length )
				data = jQuery.data( this[0], key );

			return data === undefined && parts[1] ?
				this.data( parts[0] ) :
				data;
		} else
			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
				jQuery.data( this, key, value );
			});
	},

	removeData: function( key ){
		return this.each(function(){
			jQuery.removeData( this, key );
		});
	},
	queue: function(type, data){
		if ( typeof type !== "string" ) {
			data = type;
			type = "fx";
		}

		if ( data === undefined )
			return jQuery.queue( this[0], type );

		return this.each(function(){
			var queue = jQuery.queue( this, type, data );
			
			 if( type == "fx" && queue.length == 1 )
				queue[0].call(this);
		});
	},
	dequeue: function(type){
		return this.each(function(){
			jQuery.dequeue( this, type );
		});
	}
});/*!
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
	done = 0,
	toString = Object.prototype.toString;

var Sizzle = function(selector, context, results, seed) {
	results = results || [];
	context = context || document;

	if ( context.nodeType !== 1 && context.nodeType !== 9 )
		return [];
	
	if ( !selector || typeof selector !== "string" ) {
		return results;
	}

	var parts = [], m, set, checkSet, check, mode, extra, prune = true;
	
	// Reset the position of the chunker regexp (start from head)
	chunker.lastIndex = 0;
	
	while ( (m = chunker.exec(selector)) !== null ) {
		parts.push( m[1] );
		
		if ( m[2] ) {
			extra = RegExp.rightContext;
			break;
		}
	}

	if ( parts.length > 1 && origPOS.exec( selector ) ) {
		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
			set = posProcess( parts[0] + parts[1], context );
		} else {
			set = Expr.relative[ parts[0] ] ?
				[ context ] :
				Sizzle( parts.shift(), context );

			while ( parts.length ) {
				selector = parts.shift();

				if ( Expr.relative[ selector ] )
					selector += parts.shift();

				set = posProcess( selector, set );
			}
		}
	} else {
		var ret = seed ?
			{ expr: parts.pop(), set: makeArray(seed) } :
			Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
		set = Sizzle.filter( ret.expr, ret.set );

		if ( parts.length > 0 ) {
			checkSet = makeArray(set);
		} else {
			prune = false;
		}

		while ( parts.length ) {
			var cur = parts.pop(), pop = cur;

			if ( !Expr.relative[ cur ] ) {
				cur = "";
			} else {
				pop = parts.pop();
			}

			if ( pop == null ) {
				pop = context;
			}

			Expr.relative[ cur ]( checkSet, pop, isXML(context) );
		}
	}

	if ( !checkSet ) {
		checkSet = set;
	}

	if ( !checkSet ) {
		throw "Syntax error, unrecognized expression: " + (cur || selector);
	}

	if ( toString.call(checkSet) === "[object Array]" ) {
		if ( !prune ) {
			results.push.apply( results, checkSet );
		} else if ( context.nodeType === 1 ) {
			for ( var i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
					results.push( set[i] );
				}
			}
		} else {
			for ( var i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
					results.push( set[i] );
				}
			}
		}
	} else {
		makeArray( checkSet, results );
	}

	if ( extra ) {
		Sizzle( extra, context, results, seed );

		if ( sortOrder ) {
			hasDuplicate = false;
			results.sort(sortOrder);

			if ( hasDuplicate ) {
				for ( var i = 1; i < results.length; i++ ) {
					if ( results[i] === results[i-1] ) {
						results.splice(i--, 1);
					}
				}
			}
		}
	}

	return results;
};

Sizzle.matches = function(expr, set){
	return Sizzle(expr, null, null, set);
};

Sizzle.find = function(expr, context, isXML){
	var set, match;

	if ( !expr ) {
		return [];
	}

	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
		var type = Expr.order[i], match;
		
		if ( (match = Expr.match[ type ].exec( expr )) ) {
			var left = RegExp.leftContext;

			if ( left.substr( left.length - 1 ) !== "\\" ) {
				match[1] = (match[1] || "").replace(/\\/g, "");
				set = Expr.find[ type ]( match, context, isXML );
				if ( set != null ) {
					expr = expr.replace( Expr.match[ type ], "" );
					break;
				}
			}
		}
	}

	if ( !set ) {
		set = context.getElementsByTagName("*");
	}

	return {set: set, expr: expr};
};

Sizzle.filter = function(expr, set, inplace, not){
	var old = expr, result = [], curLoop = set, match, anyFound,
		isXMLFilter = set && set[0] && isXML(set[0]);

	while ( expr && set.length ) {
		for ( var type in Expr.filter ) {
			if ( (match = Expr.match[ type ].exec( expr )) != null ) {
				var filter = Expr.filter[ type ], found, item;
				anyFound = false;

				if ( curLoop == result ) {
					result = [];
				}

				if ( Expr.preFilter[ type ] ) {
					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

					if ( !match ) {
						anyFound = found = true;
					} else if ( match === true ) {
						continue;
					}
				}

				if ( match ) {
					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
						if ( item ) {
							found = filter( item, match, i, curLoop );
							var pass = not ^ !!found;

							if ( inplace && found != null ) {
								if ( pass ) {
									anyFound = true;
								} else {
									curLoop[i] = false;
								}
							} else if ( pass ) {
								result.push( item );
								anyFound = true;
							}
						}
					}
				}

				if ( found !== undefined ) {
					if ( !inplace ) {
						curLoop = result;
					}

					expr = expr.replace( Expr.match[ type ], "" );

					if ( !anyFound ) {
						return [];
					}

					break;
				}
			}
		}

		// Improper expression
		if ( expr == old ) {
			if ( anyFound == null ) {
				throw "Syntax error, unrecognized expression: " + expr;
			} else {
				break;
			}
		}

		old = expr;
	}

	return curLoop;
};

var Expr = Sizzle.selectors = {
	order: [ "ID", "NAME", "TAG" ],
	match: {
		ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
		CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
		TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
		PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
	},
	attrMap: {
		"class": "className",
		"for": "htmlFor"
	},
	attrHandle: {
		href: function(elem){
			return elem.getAttribute("href");
		}
	},
	relative: {
		"+": function(checkSet, part, isXML){
			var isPartStr = typeof part === "string",
				isTag = isPartStr && !/\W/.test(part),
				isPartStrNotTag = isPartStr && !isTag;

			if ( isTag && !isXML ) {
				part = part.toUpperCase();
			}

			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
				if ( (elem = checkSet[i]) ) {
					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

					checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
						elem || false :
						elem === part;
				}
			}

			if ( isPartStrNotTag ) {
				Sizzle.filter( part, checkSet, true );
			}
		},
		">": function(checkSet, part, isXML){
			var isPartStr = typeof part === "string";

			if ( isPartStr && !/\W/.test(part) ) {
				part = isXML ? part : part.toUpperCase();

				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
					var elem = checkSet[i];
					if ( elem ) {
						var parent = elem.parentNode;
						checkSet[i] = parent.nodeName === part ? parent : false;
					}
				}
			} else {
				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
					var elem = checkSet[i];
					if ( elem ) {
						checkSet[i] = isPartStr ?
							elem.parentNode :
							elem.parentNode === part;
					}
				}

				if ( isPartStr ) {
					Sizzle.filter( part, checkSet, true );
				}
			}
		},
		"": function(checkSet, part, isXML){
			var doneName = done++, checkFn = dirCheck;

			if ( !part.match(/\W/) ) {
				var nodeCheck = part = isXML ? part : part.toUpperCase();
				checkFn = dirNodeCheck;
			}

			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
		},
		"~": function(checkSet, part, isXML){
			var doneName = done++, checkFn = dirCheck;

			if ( typeof part === "string" && !part.match(/\W/) ) {
				var nodeCheck = part = isXML ? part : part.toUpperCase();
				checkFn = dirNodeCheck;
			}

			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
		}
	},
	find: {
		ID: function(match, context, isXML){
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				return m ? [m] : [];
			}
		},
		NAME: function(match, context, isXML){
			if ( typeof context.getElementsByName !== "undefined" ) {
				var ret = [], results = context.getElementsByName(match[1]);

				for ( var i = 0, l = results.length; i < l; i++ ) {
					if ( results[i].getAttribute("name") === match[1] ) {
						ret.push( results[i] );
					}
				}

				return ret.length === 0 ? null : ret;
			}
		},
		TAG: function(match, context){
			return context.getElementsByTagName(match[1]);
		}
	},
	preFilter: {
		CLASS: function(match, curLoop, inplace, result, not, isXML){
			match = " " + match[1].replace(/\\/g, "") + " ";

			if ( isXML ) {
				return match;
			}

			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
				if ( elem ) {
					if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
						if ( !inplace )
							result.push( elem );
					} else if ( inplace ) {
						curLoop[i] = false;
					}
				}
			}

			return false;
		},
		ID: function(match){
			return match[1].replace(/\\/g, "");
		},
		TAG: function(match, curLoop){
			for ( var i = 0; curLoop[i] === false; i++ ){}
			return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
		},
		CHILD: function(match){
			if ( match[1] == "nth" ) {
				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
					match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

				// calculate the numbers (first)n+(last) including if they are negative
				match[2] = (test[1] + (test[2] || 1)) - 0;
				match[3] = test[3] - 0;
			}

			// TODO: Move to normal caching system
			match[0] = done++;

			return match;
		},
		ATTR: function(match, curLoop, inplace, result, not, isXML){
			var name = match[1].replace(/\\/g, "");
			
			if ( !isXML && Expr.attrMap[name] ) {
				match[1] = Expr.attrMap[name];
			}

			if ( match[2] === "~=" ) {
				match[4] = " " + match[4] + " ";
			}

			return match;
		},
		PSEUDO: function(match, curLoop, inplace, result, not){
			if ( match[1] === "not" ) {
				// If we're dealing with a complex expression, or a simple one
				if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
					match[3] = Sizzle(match[3], null, null, curLoop);
				} else {
					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
					if ( !inplace ) {
						result.push.apply( result, ret );
					}
					return false;
				}
			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
				return true;
			}
			
			return match;
		},
		POS: function(match){
			match.unshift( true );
			return match;
		}
	},
	filters: {
		enabled: function(elem){
			return elem.disabled === false && elem.type !== "hidden";
		},
		disabled: function(elem){
			return elem.disabled === true;
		},
		checked: function(elem){
			return elem.checked === true;
		},
		selected: function(elem){
			// Accessing this property makes selected-by-default
			// options in Safari work properly
			elem.parentNode.selectedIndex;
			return elem.selected === true;
		},
		parent: function(elem){
			return !!elem.firstChild;
		},
		empty: function(elem){
			return !elem.firstChild;
		},
		has: function(elem, i, match){
			return !!Sizzle( match[3], elem ).length;
		},
		header: function(elem){
			return /h\d/i.test( elem.nodeName );
		},
		text: function(elem){
			return "text" === elem.type;
		},
		radio: function(elem){
			return "radio" === elem.type;
		},
		checkbox: function(elem){
			return "checkbox" === elem.type;
		},
		file: function(elem){
			return "file" === elem.type;
		},
		password: function(elem){
			return "password" === elem.type;
		},
		submit: function(elem){
			return "submit" === elem.type;
		},
		image: function(elem){
			return "image" === elem.type;
		},
		reset: function(elem){
			return "reset" === elem.type;
		},
		button: function(elem){
			return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
		},
		input: function(elem){
			return /input|select|textarea|button/i.test(elem.nodeName);
		}
	},
	setFilters: {
		first: function(elem, i){
			return i === 0;
		},
		last: function(elem, i, match, array){
			return i === array.length - 1;
		},
		even: function(elem, i){
			return i % 2 === 0;
		},
		odd: function(elem, i){
			return i % 2 === 1;
		},
		lt: function(elem, i, match){
			return i < match[3] - 0;
		},
		gt: function(elem, i, match){
			return i > match[3] - 0;
		},
		nth: function(elem, i, match){
			return match[3] - 0 == i;
		},
		eq: function(elem, i, match){
			return match[3] - 0 == i;
		}
	},
	filter: {
		PSEUDO: function(elem, match, i, array){
			var name = match[1], filter = Expr.filters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			} else if ( name === "contains" ) {
				return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
			} else if ( name === "not" ) {
				var not = match[3];

				for ( var i = 0, l = not.length; i < l; i++ ) {
					if ( not[i] === elem ) {
						return false;
					}
				}

				return true;
			}
		},
		CHILD: function(elem, match){
			var type = match[1], node = elem;
			switch (type) {
				case 'only':
				case 'first':
					while (node = node.previousSibling)  {
						if ( node.nodeType === 1 ) return false;
					}
					if ( type == 'first') return true;
					node = elem;
				case 'last':
					while (node = node.nextSibling)  {
						if ( node.nodeType === 1 ) return false;
					}
					return true;
				case 'nth':
					var first = match[2], last = match[3];

					if ( first == 1 && last == 0 ) {
						return true;
					}
					
					var doneName = match[0],
						parent = elem.parentNode;
	
					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
						var count = 0;
						for ( node = parent.firstChild; node; node = node.nextSibling ) {
							if ( node.nodeType === 1 ) {
								node.nodeIndex = ++count;
							}
						} 
						parent.sizcache = doneName;
					}
					
					var diff = elem.nodeIndex - last;
					if ( first == 0 ) {
						return diff == 0;
					} else {
						return ( diff % first == 0 && diff / first >= 0 );
					}
			}
		},
		ID: function(elem, match){
			return elem.nodeType === 1 && elem.getAttribute("id") === match;
		},
		TAG: function(elem, match){
			return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
		},
		CLASS: function(elem, match){
			return (" " + (elem.className || elem.getAttribute("class")) + " ")
				.indexOf( match ) > -1;
		},
		ATTR: function(elem, match){
			var name = match[1],
				result = Expr.attrHandle[ name ] ?
					Expr.attrHandle[ name ]( elem ) :
					elem[ name ] != null ?
						elem[ name ] :
						elem.getAttribute( name ),
				value = result + "",
				type = match[2],
				check = match[4];

			return result == null ?
				type === "!=" :
				type === "=" ?
				value === check :
				type === "*=" ?
				value.indexOf(check) >= 0 :
				type === "~=" ?
				(" " + value + " ").indexOf(check) >= 0 :
				!check ?
				value && result !== false :
				type === "!=" ?
				value != check :
				type === "^=" ?
				value.indexOf(check) === 0 :
				type === "$=" ?
				value.substr(value.length - check.length) === check :
				type === "|=" ?
				value === check || value.substr(0, check.length + 1) === check + "-" :
				false;
		},
		POS: function(elem, match, i, array){
			var name = match[2], filter = Expr.setFilters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			}
		}
	}
};

var origPOS = Expr.match.POS;

for ( var type in Expr.match ) {
	Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
}

var makeArray = function(array, results) {
	array = Array.prototype.slice.call( array );

	if ( results ) {
		results.push.apply( results, array );
		return results;
	}
	
	return array;
};

// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
try {
	Array.prototype.slice.call( document.documentElement.childNodes );

// Provide a fallback method if it does not work
} catch(e){
	makeArray = function(array, results) {
		var ret = results || [];

		if ( toString.call(array) === "[object Array]" ) {
			Array.prototype.push.apply( ret, array );
		} else {
			if ( typeof array.length === "number" ) {
				for ( var i = 0, l = array.length; i < l; i++ ) {
					ret.push( array[i] );
				}
			} else {
				for ( var i = 0; array[i]; i++ ) {
					ret.push( array[i] );
				}
			}
		}

		return ret;
	};
}

var sortOrder;

if ( document.documentElement.compareDocumentPosition ) {
	sortOrder = function( a, b ) {
		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( "sourceIndex" in document.documentElement ) {
	sortOrder = function( a, b ) {
		var ret = a.sourceIndex - b.sourceIndex;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( document.createRange ) {
	sortOrder = function( a, b ) {
		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
		aRange.selectNode(a);
		aRange.collapse(true);
		bRange.selectNode(b);
		bRange.collapse(true);
		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
}

// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
	// We're going to inject a fake input element with a specified name
	var form = document.createElement("form"),
		id = "script" + (new Date).getTime();
	form.innerHTML = "<input name='" + id + "'/>";

	// Inject it into the root element, check its status, and remove it quickly
	var root = document.documentElement;
	root.insertBefore( form, root.firstChild );

	// The workaround has to do additional checks after a getElementById
	// Which slows things down for other browsers (hence the branching)
	if ( !!document.getElementById( id ) ) {
		Expr.find.ID = function(match, context, isXML){
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
			}
		};

		Expr.filter.ID = function(elem, match){
			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
			return elem.nodeType === 1 && node && node.nodeValue === match;
		};
	}

	root.removeChild( form );
})();

(function(){
	// Check to see if the browser returns only elements
	// when doing getElementsByTagName("*")

	// Create a fake element
	var div = document.createElement("div");
	div.appendChild( document.createComment("") );

	// Make sure no comments are found
	if ( div.getElementsByTagName("*").length > 0 ) {
		Expr.find.TAG = function(match, context){
			var results = context.getElementsByTagName(match[1]);

			// Filter out possible comments
			if ( match[1] === "*" ) {
				var tmp = [];

				for ( var i = 0; results[i]; i++ ) {
					if ( results[i].nodeType === 1 ) {
						tmp.push( results[i] );
					}
				}

				results = tmp;
			}

			return results;
		};
	}

	// Check to see if an attribute returns normalized href attributes
	div.innerHTML = "<a href='#'></a>";
	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
			div.firstChild.getAttribute("href") !== "#" ) {
		Expr.attrHandle.href = function(elem){
			return elem.getAttribute("href", 2);
		};
	}
})();

if ( document.querySelectorAll ) (function(){
	var oldSizzle = Sizzle, div = document.createElement("div");
	div.innerHTML = "<p class='TEST'></p>";

	// Safari can't handle uppercase or unicode characters when
	// in quirks mode.
	if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
		return;
	}
	
	Sizzle = function(query, context, extra, seed){
		context = context || document;

		// Only use querySelectorAll on non-XML documents
		// (ID selectors don't work in non-HTML documents)
		if ( !seed && context.nodeType === 9 && !isXML(context) ) {
			try {
				return makeArray( context.querySelectorAll(query), extra );
			} catch(e){}
		}
		
		return oldSizzle(query, context, extra, seed);
	};

	Sizzle.find = oldSizzle.find;
	Sizzle.filter = oldSizzle.filter;
	Sizzle.selectors = oldSizzle.selectors;
	Sizzle.matches = oldSizzle.matches;
})();

if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
	var div = document.createElement("div");
	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

	// Opera can't find a second classname (in 9.6)
	if ( div.getElementsByClassName("e").length === 0 )
		return;

	// Safari caches class attributes, doesn't catch changes (in 3.2)
	div.lastChild.className = "e";

	if ( div.getElementsByClassName("e").length === 1 )
		return;

	Expr.order.splice(1, 0, "CLASS");
	Expr.find.CLASS = function(match, context, isXML) {
		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
			return context.getElementsByClassName(match[1]);
		}
	};
})();

function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	var sibDir = dir == "previousSibling" && !isXML;
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];
		if ( elem ) {
			if ( sibDir && elem.nodeType === 1 ){
				elem.sizcache = doneName;
				elem.sizset = i;
			}
			elem = elem[dir];
			var match = false;

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 && !isXML ){
					elem.sizcache = doneName;
					elem.sizset = i;
				}

				if ( elem.nodeName === cur ) {
					match = elem;
					break;
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	var sibDir = dir == "previousSibling" && !isXML;
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];
		if ( elem ) {
			if ( sibDir && elem.nodeType === 1 ) {
				elem.sizcache = doneName;
				elem.sizset = i;
			}
			elem = elem[dir];
			var match = false;

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 ) {
					if ( !isXML ) {
						elem.sizcache = doneName;
						elem.sizset = i;
					}
					if ( typeof cur !== "string" ) {
						if ( elem === cur ) {
							match = true;
							break;
						}

					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
						match = elem;
						break;
					}
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

var contains = document.compareDocumentPosition ?  function(a, b){
	return a.compareDocumentPosition(b) & 16;
} : function(a, b){
	return a !== b && (a.contains ? a.contains(b) : true);
};

var isXML = function(elem){
	return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
		!!elem.ownerDocument && isXML( elem.ownerDocument );
};

var posProcess = function(selector, context){
	var tmpSet = [], later = "", match,
		root = context.nodeType ? [context] : context;

	// Position selectors must be done after the filter
	// And so must :not(positional) so we move all PSEUDOs to the end
	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
		later += match[0];
		selector = selector.replace( Expr.match.PSEUDO, "" );
	}

	selector = Expr.relative[selector] ? selector + "*" : selector;

	for ( var i = 0, l = root.length; i < l; i++ ) {
		Sizzle( selector, root[i], tmpSet );
	}

	return Sizzle.filter( later, tmpSet );
};

// EXPOSE
jQuery.find = Sizzle;
jQuery.filter = Sizzle.filter;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;

Sizzle.selectors.filters.hidden = function(elem){
	return elem.offsetWidth === 0 || elem.offsetHeight === 0;
};

Sizzle.selectors.filters.visible = function(elem){
	return elem.offsetWidth > 0 || elem.offsetHeight > 0;
};

Sizzle.selectors.filters.animated = function(elem){
	return jQuery.grep(jQuery.timers, function(fn){
		return elem === fn.elem;
	}).length;
};

jQuery.multiFilter = function( expr, elems, not ) {
	if ( not ) {
		expr = ":not(" + expr + ")";
	}

	return Sizzle.matches(expr, elems);
};

jQuery.dir = function( elem, dir ){
	var matched = [], cur = elem[dir];
	while ( cur && cur != document ) {
		if ( cur.nodeType == 1 )
			matched.push( cur );
		cur = cur[dir];
	}
	return matched;
};

jQuery.nth = function(cur, result, dir, elem){
	result = result || 1;
	var num = 0;

	for ( ; cur; cur = cur[dir] )
		if ( cur.nodeType == 1 && ++num == result )
			break;

	return cur;
};

jQuery.sibling = function(n, elem){
	var r = [];

	for ( ; n; n = n.nextSibling ) {
		if ( n.nodeType == 1 && n != elem )
			r.push( n );
	}

	return r;
};

return;

window.Sizzle = Sizzle;

})();
/*
 * A number of helper functions used for managing events.
 * Many of the ideas behind this code originated from
 * Dean Edwards' addEvent library.
 */
jQuery.event = {

	// Bind an event to an element
	// Original by Dean Edwards
	add: function(elem, types, handler, data) {
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		// For whatever reason, IE has trouble passing the window object
		// around, causing it to be cloned in the process
		if ( elem.setInterval && elem != window )
			elem = window;

		// Make sure that the function being executed has a unique ID
		if ( !handler.guid )
			handler.guid = this.guid++;

		// if data is passed, bind to handler
		if ( data !== undefined ) {
			// Create temporary function pointer to original handler
			var fn = handler;

			// Create unique handler function, wrapped around original handler
			handler = this.proxy( fn );

			// Store data in unique handler
			handler.data = data;
		}

		// Init the element's event structure
		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
				// Handle the second event of a trigger and when
				// an event is called after a page has unloaded
				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
					jQuery.event.handle.apply(arguments.callee.elem, arguments) :
					undefined;
			});
		// Add elem as a property of the handle function
		// This is to prevent a memory leak with non-native
		// event in IE.
		handle.elem = elem;

		// Handle multiple events separated by a space
		// jQuery(...).bind("mouseover mouseout", fn);
		jQuery.each(types.split(/\s+/), function(index, type) {
			// Namespaced event handlers
			var namespaces = type.split(".");
			type = namespaces.shift();
			handler.type = namespaces.slice().sort().join(".");

			// Get the current list of functions bound to this event
			var handlers = events[type];
			
			if ( jQuery.event.specialAll[type] )
				jQuery.event.specialAll[type].setup.call(elem, data, namespaces);

			// Init the event handler queue
			if (!handlers) {
				handlers = events[type] = {};

				// Check for a special event handler
				// Only use addEventListener/attachEvent if the special
				// events handler returns false
				if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
					// Bind the global event handler to the element
					if (elem.addEventListener)
						elem.addEventListener(type, handle, false);
					else if (elem.attachEvent)
						elem.attachEvent("on" + type, handle);
				}
			}

			// Add the function to the element's handler list
			handlers[handler.guid] = handler;

			// Keep track of which events have been used, for global triggering
			jQuery.event.global[type] = true;
		});

		// Nullify elem to prevent memory leaks in IE
		elem = null;
	},

	guid: 1,
	global: {},

	// Detach an event or set of events from an element
	remove: function(elem, types, handler) {
		// don't do events on text and comment nodes
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		var events = jQuery.data(elem, "events"), ret, index;

		if ( events ) {
			// Unbind all events for the element
			if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
				for ( var type in events )
					this.remove( elem, type + (types || "") );
			else {
				// types is actually an event object here
				if ( types.type ) {
					handler = types.handler;
					types = types.type;
				}

				// Handle multiple events seperated by a space
				// jQuery(...).unbind("mouseover mouseout", fn);
				jQuery.each(types.split(/\s+/), function(index, type){
					// Namespaced event handlers
					var namespaces = type.split(".");
					type = namespaces.shift();
					var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");

					if ( events[type] ) {
						// remove the given handler for the given type
						if ( handler )
							delete events[type][handler.guid];

						// remove all handlers for the given type
						else
							for ( var handle in events[type] )
								// Handle the removal of namespaced events
								if ( namespace.test(events[type][handle].type) )
									delete events[type][handle];
									
						if ( jQuery.event.specialAll[type] )
							jQuery.event.specialAll[type].teardown.call(elem, namespaces);

						// remove generic event handler if no more handlers exist
						for ( ret in events[type] ) break;
						if ( !ret ) {
							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {
								if (elem.removeEventListener)
									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
								else if (elem.detachEvent)
									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
							}
							ret = null;
							delete events[type];
						}
					}
				});
			}

			// Remove the expando if it's no longer used
			for ( ret in events ) break;
			if ( !ret ) {
				var handle = jQuery.data( elem, "handle" );
				if ( handle ) handle.elem = null;
				jQuery.removeData( elem, "events" );
				jQuery.removeData( elem, "handle" );
			}
		}
	},

	// bubbling is internal
	trigger: function( event, data, elem, bubbling ) {
		// Event object or event type
		var type = event.type || event;

		if( !bubbling ){
			event = typeof event === "object" ?
				// jQuery.Event object
				event[expando] ? event :
				// Object literal
				jQuery.extend( jQuery.Event(type), event ) :
				// Just the event type (string)
				jQuery.Event(type);

			if ( type.indexOf("!") >= 0 ) {
				event.type = type = type.slice(0, -1);
				event.exclusive = true;
			}

			// Handle a global trigger
			if ( !elem ) {
				// Don't bubble custom events when global (to avoid too much overhead)
				event.stopPropagation();
				// Only trigger if we've ever bound an event for it
				if ( this.global[type] )
					jQuery.each( jQuery.cache, function(){
						if ( this.events && this.events[type] )
							jQuery.event.trigger( event, data, this.handle.elem );
					});
			}

			// Handle triggering a single element

			// don't do events on text and comment nodes
			if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
				return undefined;
			
			// Clean up in case it is reused
			event.result = undefined;
			event.target = elem;
			
			// Clone the incoming data, if any
			data = jQuery.makeArray(data);
			data.unshift( event );
		}

		event.currentTarget = elem;

		// Trigger the event, it is assumed that "handle" is a function
		var handle = jQuery.data(elem, "handle");
		if ( handle )
			handle.apply( elem, data );

		// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
		if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
			event.result = false;

		// Trigger the native events (except for clicks on links)
		if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
			this.triggered = true;
			try {
				elem[ type ]();
			// prevent IE from throwing an error for some hidden elements
			} catch (e) {}
		}

		this.triggered = false;

		if ( !event.isPropagationStopped() ) {
			var parent = elem.parentNode || elem.ownerDocument;
			if ( parent )
				jQuery.event.trigger(event, data, parent, true);
		}
	},

	handle: function(event) {
		// returned undefined or false
		var all, handlers;

		event = arguments[0] = jQuery.event.fix( event || window.event );
		event.currentTarget = this;
		
		// Namespaced event handlers
		var namespaces = event.type.split(".");
		event.type = namespaces.shift();

		// Cache this now, all = true means, any handler
		all = !namespaces.length && !event.exclusive;
		
		var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");

		handlers = ( jQuery.data(this, "events") || {} )[event.type];

		for ( var j in handlers ) {
			var handler = handlers[j];

			// Filter the functions by class
			if ( all || namespace.test(handler.type) ) {
				// Pass in a reference to the handler function itself
				// So that we can later remove it
				event.handler = handler;
				event.data = handler.data;

				var ret = handler.apply(this, arguments);

				if( ret !== undefined ){
					event.result = ret;
					if ( ret === false ) {
						event.preventDefault();
						event.stopPropagation();
					}
				}

				if( event.isImmediatePropagationStopped() )
					break;

			}
		}
	},

	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),

	fix: function(event) {
		if ( event[expando] )
			return event;

		// store a copy of the original event object
		// and "clone" to set read-only properties
		var originalEvent = event;
		event = jQuery.Event( originalEvent );

		for ( var i = this.props.length, prop; i; ){
			prop = this.props[ --i ];
			event[ prop ] = originalEvent[ prop ];
		}

		// Fix target property, if necessary
		if ( !event.target )
			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

		// check if target is a textnode (safari)
		if ( event.target.nodeType == 3 )
			event.target = event.target.parentNode;

		// Add relatedTarget, if necessary
		if ( !event.relatedTarget && event.fromElement )
			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

		// Calculate pageX/Y if missing and clientX/Y available
		if ( event.pageX == null && event.clientX != null ) {
			var doc = document.documentElement, body = document.body;
			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
			event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
		}

		// Add which for key events
		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
			event.which = event.charCode || event.keyCode;

		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
		if ( !event.metaKey && event.ctrlKey )
			event.metaKey = event.ctrlKey;

		// Add which for click: 1 == left; 2 == middle; 3 == right
		// Note: button is not normalized, so don't use it
		if ( !event.which && event.button )
			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

		return event;
	},

	proxy: function( fn, proxy ){
		proxy = proxy || function(){ return fn.apply(this, arguments); };
		// Set the guid of unique handler to the same of original handler, so it can be removed
		proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
		// So proxy can be declared as an argument
		return proxy;
	},

	special: {
		ready: {
			// Make sure the ready event is setup
			setup: bindReady,
			teardown: function() {}
		}
	},
	
	specialAll: {
		live: {
			setup: function( selector, namespaces ){
				jQuery.event.add( this, namespaces[0], liveHandler );
			},
			teardown:  function( namespaces ){
				if ( namespaces.length ) {
					var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
					
					jQuery.each( (jQuery.data(this, "events").live || {}), function(){
						if ( name.test(this.type) )
							remove++;
					});
					
					if ( remove < 1 )
						jQuery.event.remove( this, namespaces[0], liveHandler );
				}
			}
		}
	}
};

jQuery.Event = function( src ){
	// Allow instantiation without the 'new' keyword
	if( !this.preventDefault )
		return new jQuery.Event(src);
	
	// Event object
	if( src && src.type ){
		this.originalEvent = src;
		this.type = src.type;
	// Event type
	}else
		this.type = src;

	// timeStamp is buggy for some events on Firefox(#3843)
	// So we won't rely on the native value
	this.timeStamp = now();
	
	// Mark it as fixed
	this[expando] = true;
};

function returnFalse(){
	return false;
}
function returnTrue(){
	return true;
}

// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
	preventDefault: function() {
		this.isDefaultPrevented = returnTrue;

		var e = this.originalEvent;
		if( !e )
			return;
		// if preventDefault exists run it on the original event
		if (e.preventDefault)
			e.preventDefault();
		// otherwise set the returnValue property of the original event to false (IE)
		e.returnValue = false;
	},
	stopPropagation: function() {
		this.isPropagationStopped = returnTrue;

		var e = this.originalEvent;
		if( !e )
			return;
		// if stopPropagation exists run it on the original event
		if (e.stopPropagation)
			e.stopPropagation();
		// otherwise set the cancelBubble property of the original event to true (IE)
		e.cancelBubble = true;
	},
	stopImmediatePropagation:function(){
		this.isImmediatePropagationStopped = returnTrue;
		this.stopPropagation();
	},
	isDefaultPrevented: returnFalse,
	isPropagationStopped: returnFalse,
	isImmediatePropagationStopped: returnFalse
};
// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function(event) {
	// Check if mouse(over|out) are still within the same parent element
	var parent = event.relatedTarget;
	// Traverse up the tree
	while ( parent && parent != this )
		try { parent = parent.parentNode; }
		catch(e) { parent = this; }
	
	if( parent != this ){
		// set the correct event type
		event.type = event.data;
		// handle event if we actually just moused on to a non sub-element
		jQuery.event.handle.apply( this, arguments );
	}
};
	
jQuery.each({ 
	mouseover: 'mouseenter', 
	mouseout: 'mouseleave'
}, function( orig, fix ){
	jQuery.event.special[ fix ] = {
		setup: function(){
			jQuery.event.add( this, orig, withinElement, fix );
		},
		teardown: function(){
			jQuery.event.remove( this, orig, withinElement );
		}
	};			   
});

jQuery.fn.extend({
	bind: function( type, data, fn ) {
		return type == "unload" ? this.one(type, data, fn) : this.each(function(){
			jQuery.event.add( this, type, fn || data, fn && data );
		});
	},

	one: function( type, data, fn ) {
		var one = jQuery.event.proxy( fn || data, function(event) {
			jQuery(this).unbind(event, one);
			return (fn || data).apply( this, arguments );
		});
		return this.each(function(){
			jQuery.event.add( this, type, one, fn && data);
		});
	},

	unbind: function( type, fn ) {
		return this.each(function(){
			jQuery.event.remove( this, type, fn );
		});
	},

	trigger: function( type, data ) {
		return this.each(function(){
			jQuery.event.trigger( type, data, this );
		});
	},

	triggerHandler: function( type, data ) {
		if( this[0] ){
			var event = jQuery.Event(type);
			event.preventDefault();
			event.stopPropagation();
			jQuery.event.trigger( event, data, this[0] );
			return event.result;
		}		
	},

	toggle: function( fn ) {
		// Save reference to arguments for access in closure
		var args = arguments, i = 1;

		// link all the functions, so any of them can unbind this click handler
		while( i < args.length )
			jQuery.event.proxy( fn, args[i++] );

		return this.click( jQuery.event.proxy( fn, function(event) {
			// Figure out which function to execute
			this.lastToggle = ( this.lastToggle || 0 ) % i;

			// Make sure that clicks stop
			event.preventDefault();

			// and execute the function
			return args[ this.lastToggle++ ].apply( this, arguments ) || false;
		}));
	},

	hover: function(fnOver, fnOut) {
		return this.mouseenter(fnOver).mouseleave(fnOut);
	},

	ready: function(fn) {
		// Attach the listeners
		bindReady();

		// If the DOM is already ready
		if ( jQuery.isReady )
			// Execute the function immediately
			fn.call( document, jQuery );

		// Otherwise, remember the function for later
		else
			// Add the function to the wait list
			jQuery.readyList.push( fn );

		return this;
	},
	
	live: function( type, fn ){
		var proxy = jQuery.event.proxy( fn );
		proxy.guid += this.selector + type;

		jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );

		return this;
	},
	
	die: function( type, fn ){
		jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
		return this;
	}
});

function liveHandler( event ){
	var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
		stop = true,
		elems = [];

	jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
		if ( check.test(fn.type) ) {
			var elem = jQuery(event.target).closest(fn.data)[0];
			if ( elem )
				elems.push({ elem: elem, fn: fn });
		}
	});

	elems.sort(function(a,b) {
		return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
	});
	
	jQuery.each(elems, function(){
		if ( this.fn.call(this.elem, event, this.fn.data) === false )
			return (stop = false);
	});

	return stop;
}

function liveConvert(type, selector){
	return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
}

jQuery.extend({
	isReady: false,
	readyList: [],
	// Handle when the DOM is ready
	ready: function() {
		// Make sure that the DOM is not already loaded
		if ( !jQuery.isReady ) {
			// Remember that the DOM is ready
			jQuery.isReady = true;

			// If there are functions bound, to execute
			if ( jQuery.readyList ) {
				// Execute all of them
				jQuery.each( jQuery.readyList, function(){
					this.call( document, jQuery );
				});

				// Reset the list of functions
				jQuery.readyList = null;
			}

			// Trigger any bound ready events
			jQuery(document).triggerHandler("ready");
		}
	}
});

var readyBound = false;

function bindReady(){
	if ( readyBound ) return;
	readyBound = true;

	// Mozilla, Opera and webkit nightlies currently support this event
	if ( document.addEventListener ) {
		// Use the handy event callback
		document.addEventListener( "DOMContentLoaded", function(){
			document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
			jQuery.ready();
		}, false );

	// If IE event model is used
	} else if ( document.attachEvent ) {
		// ensure firing before onload,
		// maybe late but safe also for iframes
		document.attachEvent("onreadystatechange", function(){
			if ( document.readyState === "complete" ) {
				document.detachEvent( "onreadystatechange", arguments.callee );
				jQuery.ready();
			}
		});

		// If IE and not an iframe
		// continually check to see if the document is ready
		if ( document.documentElement.doScroll && window == window.top ) (function(){
			if ( jQuery.isReady ) return;

			try {
				// If IE is used, use the trick by Diego Perini
				// http://javascript.nwbox.com/IEContentLoaded/
				document.documentElement.doScroll("left");
			} catch( error ) {
				setTimeout( arguments.callee, 0 );
				return;
			}

			// and execute any waiting functions
			jQuery.ready();
		})();
	}

	// A fallback to window.onload, that will always work
	jQuery.event.add( window, "load", jQuery.ready );
}

jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
	"mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
	"change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){

	// Handle event binding
	jQuery.fn[name] = function(fn){
		return fn ? this.bind(name, fn) : this.trigger(name);
	};
});

// Prevent memory leaks in IE
// And prevent errors on refresh with events like mouseover in other browsers
// Window isn't included so as not to unbind existing unload events
jQuery( window ).bind( 'unload', function(){ 
	for ( var id in jQuery.cache )
		// Skip the window
		if ( id != 1 && jQuery.cache[ id ].handle )
			jQuery.event.remove( jQuery.cache[ id ].handle.elem );
}); 
(function(){

	jQuery.support = {};

	var root = document.documentElement,
		script = document.createElement("script"),
		div = document.createElement("div"),
		id = "script" + (new Date).getTime();

	div.style.display = "none";
	div.innerHTML = '   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';

	var all = div.getElementsByTagName("*"),
		a = div.getElementsByTagName("a")[0];

	// Can't get basic test support
	if ( !all || !all.length || !a ) {
		return;
	}

	jQuery.support = {
		// IE strips leading whitespace when .innerHTML is used
		leadingWhitespace: div.firstChild.nodeType == 3,
		
		// Make sure that tbody elements aren't automatically inserted
		// IE will insert them into empty tables
		tbody: !div.getElementsByTagName("tbody").length,
		
		// Make sure that you can get all elements in an <object> element
		// IE 7 always returns no results
		objectAll: !!div.getElementsByTagName("object")[0]
			.getElementsByTagName("*").length,
		
		// Make sure that link elements get serialized correctly by innerHTML
		// This requires a wrapper element in IE
		htmlSerialize: !!div.getElementsByTagName("link").length,
		
		// Get the style information from getAttribute
		// (IE uses .cssText insted)
		style: /red/.test( a.getAttribute("style") ),
		
		// Make sure that URLs aren't manipulated
		// (IE normalizes it by default)
		hrefNormalized: a.getAttribute("href") === "/a",
		
		// Make sure that element opacity exists
		// (IE uses filter instead)
		opacity: a.style.opacity === "0.5",
		
		// Verify style float existence
		// (IE uses styleFloat instead of cssFloat)
		cssFloat: !!a.style.cssFloat,

		// Will be defined later
		scriptEval: false,
		noCloneEvent: true,
		boxModel: null
	};
	
	script.type = "text/javascript";
	try {
		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
	} catch(e){}

	root.insertBefore( script, root.firstChild );
	
	// Make sure that the execution of code works by injecting a script
	// tag with appendChild/createTextNode
	// (IE doesn't support this, fails, and uses .text instead)
	if ( window[ id ] ) {
		jQuery.support.scriptEval = true;
		delete window[ id ];
	}

	root.removeChild( script );

	if ( div.attachEvent && div.fireEvent ) {
		div.attachEvent("onclick", function(){
			// Cloning a node shouldn't copy over any
			// bound event handlers (IE does this)
			jQuery.support.noCloneEvent = false;
			div.detachEvent("onclick", arguments.callee);
		});
		div.cloneNode(true).fireEvent("onclick");
	}

	// Figure out if the W3C box model works as expected
	// document.body must exist before we can do this
	jQuery(function(){
		var div = document.createElement("div");
		div.style.width = div.style.paddingLeft = "1px";

		document.body.appendChild( div );
		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
		document.body.removeChild( div ).style.display = 'none';
	});
})();

var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";

jQuery.props = {
	"for": "htmlFor",
	"class": "className",
	"float": styleFloat,
	cssFloat: styleFloat,
	styleFloat: styleFloat,
	readonly: "readOnly",
	maxlength: "maxLength",
	cellspacing: "cellSpacing",
	rowspan: "rowSpan",
	tabindex: "tabIndex"
};
jQuery.fn.extend({
	// Keep a copy of the old load
	_load: jQuery.fn.load,

	load: function( url, params, callback ) {
		if ( typeof url !== "string" )
			return this._load( url );

		var off = url.indexOf(" ");
		if ( off >= 0 ) {
			var selector = url.slice(off, url.length);
			url = url.slice(0, off);
		}

		// Default to a GET request
		var type = "GET";

		// If the second parameter was provided
		if ( params )
			// If it's a function
			if ( jQuery.isFunction( params ) ) {
				// We assume that it's the callback
				callback = params;
				params = null;

			// Otherwise, build a param string
			} else if( typeof params === "object" ) {
				params = jQuery.param( params );
				type = "POST";
			}

		var self = this;

		// Request the remote document
		jQuery.ajax({
			url: url,
			type: type,
			dataType: "html",
			data: params,
			complete: function(res, status){
				// If successful, inject the HTML into all the matched elements
				if ( status == "success" || status == "notmodified" )
					// See if a selector was specified
					self.html( selector ?
						// Create a dummy div to hold the results
						jQuery("<div/>")
							// inject the contents of the document in, removing the scripts
							// to avoid any 'Permission Denied' errors in IE
							.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))

							// Locate the specified elements
							.find(selector) :

						// If not, just inject the full result
						res.responseText );

				if( callback )
					self.each( callback, [res.responseText, status, res] );
			}
		});
		return this;
	},

	serialize: function() {
		return jQuery.param(this.serializeArray());
	},
	serializeArray: function() {
		return this.map(function(){
			return this.elements ? jQuery.makeArray(this.elements) : this;
		})
		.filter(function(){
			return this.name && !this.disabled &&
				(this.checked || /select|textarea/i.test(this.nodeName) ||
					/text|hidden|password|search/i.test(this.type));
		})
		.map(function(i, elem){
			var val = jQuery(this).val();
			return val == null ? null :
				jQuery.isArray(val) ?
					jQuery.map( val, function(val, i){
						return {name: elem.name, value: val};
					}) :
					{name: elem.name, value: val};
		}).get();
	}
});

// Attach a bunch of functions for handling common AJAX events
jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
	jQuery.fn[o] = function(f){
		return this.bind(o, f);
	};
});

var jsc = now();

jQuery.extend({
  
	get: function( url, data, callback, type ) {
		// shift arguments if data argument was ommited
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = null;
		}

		return jQuery.ajax({
			type: "GET",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	getScript: function( url, callback ) {
		return jQuery.get(url, null, callback, "script");
	},

	getJSON: function( url, data, callback ) {
		return jQuery.get(url, data, callback, "json");
	},

	post: function( url, data, callback, type ) {
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = {};
		}

		return jQuery.ajax({
			type: "POST",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	ajaxSetup: function( settings ) {
		jQuery.extend( jQuery.ajaxSettings, settings );
	},

	ajaxSettings: {
		url: location.href,
		global: true,
		type: "GET",
		contentType: "application/x-www-form-urlencoded",
		processData: true,
		async: true,
		/*
		timeout: 0,
		data: null,
		username: null,
		password: null,
		*/
		// Create the request object; Microsoft failed to properly
		// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
		// This function can be overriden by calling jQuery.ajaxSetup
		xhr:function(){
			return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
		},
		accepts: {
			xml: "application/xml, text/xml",
			html: "text/html",
			script: "text/javascript, application/javascript",
			json: "application/json, text/javascript",
			text: "text/plain",
			_default: "*/*"
		}
	},

	// Last-Modified header cache for next request
	lastModified: {},

	ajax: function( s ) {
		// Extend the settings, but re-extend 's' so that it can be
		// checked again later (in the test suite, specifically)
		s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));

		var jsonp, jsre = /=\?(&|$)/g, status, data,
			type = s.type.toUpperCase();

		// convert data if not already a string
		if ( s.data && s.processData && typeof s.data !== "string" )
			s.data = jQuery.param(s.data);

		// Handle JSONP Parameter Callbacks
		if ( s.dataType == "jsonp" ) {
			if ( type == "GET" ) {
				if ( !s.url.match(jsre) )
					s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
			} else if ( !s.data || !s.data.match(jsre) )
				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
			s.dataType = "json";
		}

		// Build temporary JSONP function
		if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
			jsonp = "jsonp" + jsc++;

			// Replace the =? sequence both in the query string and the data
			if ( s.data )
				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

			// We need to make sure
			// that a JSONP style response is executed properly
			s.dataType = "script";

			// Handle JSONP-style loading
			window[ jsonp ] = function(tmp){
				data = tmp;
				success();
				complete();
				// Garbage collect
				window[ jsonp ] = undefined;
				try{ delete window[ jsonp ]; } catch(e){}
				if ( head )
					head.removeChild( script );
			};
		}

		if ( s.dataType == "script" && s.cache == null )
			s.cache = false;

		if ( s.cache === false && type == "GET" ) {
			var ts = now();
			// try replacing _= if it is there
			var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
			// if nothing was replaced, add timestamp to the end
			s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
		}

		// If data is available, append data to url for get requests
		if ( s.data && type == "GET" ) {
			s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;

			// IE likes to send both get and post data, prevent this
			s.data = null;
		}

		// Watch for a new set of requests
		if ( s.global && ! jQuery.active++ )
			jQuery.event.trigger( "ajaxStart" );

		// Matches an absolute URL, and saves the domain
		var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );

		// If we're requesting a remote document
		// and trying to load JSON or Script with a GET
		if ( s.dataType == "script" && type == "GET" && parts
			&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){

			var head = document.getElementsByTagName("head")[0];
			var script = document.createElement("script");
			script.src = s.url;
			if (s.scriptCharset)
				script.charset = s.scriptCharset;

			// Handle Script loading
			if ( !jsonp ) {
				var done = false;

				// Attach handlers for all browsers
				script.onload = script.onreadystatechange = function(){
					if ( !done && (!this.readyState ||
							this.readyState == "loaded" || this.readyState == "complete") ) {
						done = true;
						success();
						complete();

						// Handle memory leak in IE
						script.onload = script.onreadystatechange = null;
						head.removeChild( script );
					}
				};
			}

			head.appendChild(script);

			// We handle everything using the script element injection
			return undefined;
		}

		var requestDone = false;

		// Create the request object
		var xhr = s.xhr();

		// Open the socket
		// Passing null username, generates a login popup on Opera (#2865)
		if( s.username )
			xhr.open(type, s.url, s.async, s.username, s.password);
		else
			xhr.open(type, s.url, s.async);

		// Need an extra try/catch for cross domain requests in Firefox 3
		try {
			// Set the correct header, if data is being sent
			if ( s.data )
				xhr.setRequestHeader("Content-Type", s.contentType);

			// Set the If-Modified-Since header, if ifModified mode.
			if ( s.ifModified )
				xhr.setRequestHeader("If-Modified-Since",
					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );

			// Set header so the called script knows that it's an XMLHttpRequest
			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

			// Set the Accepts header for the server, depending on the dataType
			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
				s.accepts[ s.dataType ] + ", */*" :
				s.accepts._default );
		} catch(e){}

		// Allow custom headers/mimetypes and early abort
		if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
			// Handle the global AJAX counter
			if ( s.global && ! --jQuery.active )
				jQuery.event.trigger( "ajaxStop" );
			// close opended socket
			xhr.abort();
			return false;
		}

		if ( s.global )
			jQuery.event.trigger("ajaxSend", [xhr, s]);

		// Wait for a response to come back
		var onreadystatechange = function(isTimeout){
			// The request was aborted, clear the interval and decrement jQuery.active
			if (xhr.readyState == 0) {
				if (ival) {
					// clear poll interval
					clearInterval(ival);
					ival = null;
					// Handle the global AJAX counter
					if ( s.global && ! --jQuery.active )
						jQuery.event.trigger( "ajaxStop" );
				}
			// The transfer is complete and the data is available, or the request timed out
			} else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
				requestDone = true;

				// clear poll interval
				if (ival) {
					clearInterval(ival);
					ival = null;
				}

				status = isTimeout == "timeout" ? "timeout" :
					!jQuery.httpSuccess( xhr ) ? "error" :
					s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
					"success";

				if ( status == "success" ) {
					// Watch for, and catch, XML document parse errors
					try {
						// process the data (runs the xml through httpData regardless of callback)
						data = jQuery.httpData( xhr, s.dataType, s );
					} catch(e) {
						status = "parsererror";
					}
				}

				// Make sure that the request was successful or notmodified
				if ( status == "success" ) {
					// Cache Last-Modified header, if ifModified mode.
					var modRes;
					try {
						modRes = xhr.getResponseHeader("Last-Modified");
					} catch(e) {} // swallow exception thrown by FF if header is not available

					if ( s.ifModified && modRes )
						jQuery.lastModified[s.url] = modRes;

					// JSONP handles its own success callback
					if ( !jsonp )
						success();
				} else
					jQuery.handleError(s, xhr, status);

				// Fire the complete handlers
				complete();

				if ( isTimeout )
					xhr.abort();

				// Stop memory leaks
				if ( s.async )
					xhr = null;
			}
		};

		if ( s.async ) {
			// don't attach the handler to the request, just poll it instead
			var ival = setInterval(onreadystatechange, 13);

			// Timeout checker
			if ( s.timeout > 0 )
				setTimeout(function(){
					// Check to see if the request is still happening
					if ( xhr && !requestDone )
						onreadystatechange( "timeout" );
				}, s.timeout);
		}

		// Send the data
		try {
			xhr.send(s.data);
		} catch(e) {
			jQuery.handleError(s, xhr, null, e);
		}

		// firefox 1.5 doesn't fire statechange for sync requests
		if ( !s.async )
			onreadystatechange();

		function success(){
			// If a local callback was specified, fire it and pass it the data
			if ( s.success )
				s.success( data, status );

			// Fire the global callback
			if ( s.global )
				jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
		}

		function complete(){
			// Process result
			if ( s.complete )
				s.complete(xhr, status);

			// The request was completed
			if ( s.global )
				jQuery.event.trigger( "ajaxComplete", [xhr, s] );

			// Handle the global AJAX counter
			if ( s.global && ! --jQuery.active )
				jQuery.event.trigger( "ajaxStop" );
		}

		// return XMLHttpRequest to allow aborting the request etc.
		return xhr;
	},

	handleError: function( s, xhr, status, e ) {
		// If a local callback was specified, fire it
		if ( s.error ) s.error( xhr, status, e );

		// Fire the global callback
		if ( s.global )
			jQuery.event.trigger( "ajaxError", [xhr, s, e] );
	},

	// Counter for holding the number of active queries
	active: 0,

	// Determines if an XMLHttpRequest was successful or not
	httpSuccess: function( xhr ) {
		try {
			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
			return !xhr.status && location.protocol == "file:" ||
				( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
		} catch(e){}
		return false;
	},

	// Determines if an XMLHttpRequest returns NotModified
	httpNotModified: function( xhr, url ) {
		try {
			var xhrRes = xhr.getResponseHeader("Last-Modified");

			// Firefox always returns 200. check Last-Modified date
			return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
		} catch(e){}
		return false;
	},

	httpData: function( xhr, type, s ) {
		var ct = xhr.getResponseHeader("content-type"),
			xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
			data = xml ? xhr.responseXML : xhr.responseText;

		if ( xml && data.documentElement.tagName == "parsererror" )
			throw "parsererror";
			
		// Allow a pre-filtering function to sanitize the response
		// s != null is checked to keep backwards compatibility
		if( s && s.dataFilter )
			data = s.dataFilter( data, type );

		// The filter can actually parse the response
		if( typeof data === "string" ){

			// If the type is "script", eval it in global context
			if ( type == "script" )
				jQuery.globalEval( data );

			// Get the JavaScript object, if JSON is used.
			if ( type == "json" )
				data = window["eval"]("(" + data + ")");
		}
		
		return data;
	},

	// Serialize an array of form elements or a set of
	// key/values into a query string
	param: function( a ) {
		var s = [ ];

		function add( key, value ){
			s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
		};

		// If an array was passed in, assume that it is an array
		// of form elements
		if ( jQuery.isArray(a) || a.jquery )
			// Serialize the form elements
			jQuery.each( a, function(){
				add( this.name, this.value );
			});

		// Otherwise, assume that it's an object of key/value pairs
		else
			// Serialize the key/values
			for ( var j in a )
				// If the value is an array then the key names need to be repeated
				if ( jQuery.isArray(a[j]) )
					jQuery.each( a[j], function(){
						add( j, this );
					});
				else
					add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );

		// Return the resulting serialization
		return s.join("&").replace(/%20/g, "+");
	}

});
var elemdisplay = {},
	timerId,
	fxAttrs = [
		// height animations
		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
		// width animations
		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
		// opacity animations
		[ "opacity" ]
	];

function genFx( type, num ){
	var obj = {};
	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
		obj[ this ] = type;
	});
	return obj;
}

jQuery.fn.extend({
	show: function(speed,callback){
		if ( speed ) {
			return this.animate( genFx("show", 3), speed, callback);
		} else {
			for ( var i = 0, l = this.length; i < l; i++ ){
				var old = jQuery.data(this[i], "olddisplay");
				
				this[i].style.display = old || "";
				
				if ( jQuery.css(this[i], "display") === "none" ) {
					var tagName = this[i].tagName, display;
					
					if ( elemdisplay[ tagName ] ) {
						display = elemdisplay[ tagName ];
					} else {
						var elem = jQuery("<" + tagName + " />").appendTo("body");
						
						display = elem.css("display");
						if ( display === "none" )
							display = "block";
						
						elem.remove();
						
						elemdisplay[ tagName ] = display;
					}
					
					jQuery.data(this[i], "olddisplay", display);
				}
			}

			// Set the display of the elements in a second loop
			// to avoid the constant reflow
			for ( var i = 0, l = this.length; i < l; i++ ){
				this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
			}
			
			return this;
		}
	},

	hide: function(speed,callback){
		if ( speed ) {
			return this.animate( genFx("hide", 3), speed, callback);
		} else {
			for ( var i = 0, l = this.length; i < l; i++ ){
				var old = jQuery.data(this[i], "olddisplay");
				if ( !old && old !== "none" )
					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
			}

			// Set the display of the elements in a second loop
			// to avoid the constant reflow
			for ( var i = 0, l = this.length; i < l; i++ ){
				this[i].style.display = "none";
			}

			return this;
		}
	},

	// Save the old toggle function
	_toggle: jQuery.fn.toggle,

	toggle: function( fn, fn2 ){
		var bool = typeof fn === "boolean";

		return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
			this._toggle.apply( this, arguments ) :
			fn == null || bool ?
				this.each(function(){
					var state = bool ? fn : jQuery(this).is(":hidden");
					jQuery(this)[ state ? "show" : "hide" ]();
				}) :
				this.animate(genFx("toggle", 3), fn, fn2);
	},

	fadeTo: function(speed,to,callback){
		return this.animate({opacity: to}, speed, callback);
	},

	animate: function( prop, speed, easing, callback ) {
		var optall = jQuery.speed(speed, easing, callback);

		return this[ optall.queue === false ? "each" : "queue" ](function(){
		
			var opt = jQuery.extend({}, optall), p,
				hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
				self = this;
	
			for ( p in prop ) {
				if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
					return opt.complete.call(this);

				if ( ( p == "height" || p == "width" ) && this.style ) {
					// Store display property
					opt.display = jQuery.css(this, "display");

					// Make sure that nothing sneaks out
					opt.overflow = this.style.overflow;
				}
			}

			if ( opt.overflow != null )
				this.style.overflow = "hidden";

			opt.curAnim = jQuery.extend({}, prop);

			jQuery.each( prop, function(name, val){
				var e = new jQuery.fx( self, opt, name );

				if ( /toggle|show|hide/.test(val) )
					e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
				else {
					var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
						start = e.cur(true) || 0;

					if ( parts ) {
						var end = parseFloat(parts[2]),
							unit = parts[3] || "px";

						// We need to compute starting value
						if ( unit != "px" ) {
							self.style[ name ] = (end || 1) + unit;
							start = ((end || 1) / e.cur(true)) * start;
							self.style[ name ] = start + unit;
						}

						// If a +=/-= token was provided, we're doing a relative animation
						if ( parts[1] )
							end = ((parts[1] == "-=" ? -1 : 1) * end) + start;

						e.custom( start, end, unit );
					} else
						e.custom( start, val, "" );
				}
			});

			// For JS strict compliance
			return true;
		});
	},

	stop: function(clearQueue, gotoEnd){
		var timers = jQuery.timers;

		if (clearQueue)
			this.queue([]);

		this.each(function(){
			// go in reverse order so anything added to the queue during the loop is ignored
			for ( var i = timers.length - 1; i >= 0; i-- )
				if ( timers[i].elem == this ) {
					if (gotoEnd)
						// force the next step to be the last
						timers[i](true);
					timers.splice(i, 1);
				}
		});

		// start the next in the queue if the last step wasn't forced
		if (!gotoEnd)
			this.dequeue();

		return this;
	}

});

// Generate shortcuts for custom animations
jQuery.each({
	slideDown: genFx("show", 1),
	slideUp: genFx("hide", 1),
	slideToggle: genFx("toggle", 1),
	fadeIn: { opacity: "show" },
	fadeOut: { opacity: "hide" }
}, function( name, props ){
	jQuery.fn[ name ] = function( speed, callback ){
		return this.animate( props, speed, callback );
	};
});

jQuery.extend({

	speed: function(speed, easing, fn) {
		var opt = typeof speed === "object" ? speed : {
			complete: fn || !fn && easing ||
				jQuery.isFunction( speed ) && speed,
			duration: speed,
			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
		};

		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;

		// Queueing
		opt.old = opt.complete;
		opt.complete = function(){
			if ( opt.queue !== false )
				jQuery(this).dequeue();
			if ( jQuery.isFunction( opt.old ) )
				opt.old.call( this );
		};

		return opt;
	},

	easing: {
		linear: function( p, n, firstNum, diff ) {
			return firstNum + diff * p;
		},
		swing: function( p, n, firstNum, diff ) {
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
		}
	},

	timers: [],

	fx: function( elem, options, prop ){
		this.options = options;
		this.elem = elem;
		this.prop = prop;

		if ( !options.orig )
			options.orig = {};
	}

});

jQuery.fx.prototype = {

	// Simple function for setting a style value
	update: function(){
		if ( this.options.step )
			this.options.step.call( this.elem, this.now, this );

		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

		// Set display property to block for height/width animations
		if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
			this.elem.style.display = "block";
	},

	// Get the current size
	cur: function(force){
		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
			return this.elem[ this.prop ];

		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
	},

	// Start an animation from one number to another
	custom: function(from, to, unit){
		this.startTime = now();
		this.start = from;
		this.end = to;
		this.unit = unit || this.unit || "px";
		this.now = this.start;
		this.pos = this.state = 0;

		var self = this;
		function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;

		if ( t() && jQuery.timers.push(t) && !timerId ) {
			timerId = setInterval(function(){
				var timers = jQuery.timers;

				for ( var i = 0; i < timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval( timerId );
					timerId = undefined;
				}
			}, 13);
		}
	},

	// Simple 'show' function
	show: function(){
		// Remember where we started, so that we can go back to it later
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.show = true;

		// Begin the animation
		// Make sure that we start at a small width/height to avoid any
		// flash of content
		this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());

		// Start by showing the element
		jQuery(this.elem).show();
	},

	// Simple 'hide' function
	hide: function(){
		// Remember where we started, so that we can go back to it later
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.hide = true;

		// Begin the animation
		this.custom(this.cur(), 0);
	},

	// Each step of an animation
	step: function(gotoEnd){
		var t = now();

		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
			this.now = this.end;
			this.pos = this.state = 1;
			this.update();

			this.options.curAnim[ this.prop ] = true;

			var done = true;
			for ( var i in this.options.curAnim )
				if ( this.options.curAnim[i] !== true )
					done = false;

			if ( done ) {
				if ( this.options.display != null ) {
					// Reset the overflow
					this.elem.style.overflow = this.options.overflow;

					// Reset the display
					this.elem.style.display = this.options.display;
					if ( jQuery.css(this.elem, "display") == "none" )
						this.elem.style.display = "block";
				}

				// Hide the element if the "hide" operation was done
				if ( this.options.hide )
					jQuery(this.elem).hide();

				// Reset the properties, if the item has been hidden or shown
				if ( this.options.hide || this.options.show )
					for ( var p in this.options.curAnim )
						jQuery.attr(this.elem.style, p, this.options.orig[p]);
					
				// Execute the complete function
				this.options.complete.call( this.elem );
			}

			return false;
		} else {
			var n = t - this.startTime;
			this.state = n / this.options.duration;

			// Perform the easing function, defaults to swing
			this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
			this.now = this.start + ((this.end - this.start) * this.pos);

			// Perform the next step of the animation
			this.update();
		}

		return true;
	}

};

jQuery.extend( jQuery.fx, {
	speeds:{
		slow: 600,
 		fast: 200,
 		// Default speed
 		_default: 400
	},
	step: {

		opacity: function(fx){
			jQuery.attr(fx.elem.style, "opacity", fx.now);
		},

		_default: function(fx){
			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
			else
				fx.elem[ fx.prop ] = fx.now;
		}
	}
});
if ( document.documentElement["getBoundingClientRect"] )
	jQuery.fn.offset = function() {
		if ( !this[0] ) return { top: 0, left: 0 };
		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
		var box  = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
			top  = box.top  + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
			left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
		return { top: top, left: left };
	};
else 
	jQuery.fn.offset = function() {
		if ( !this[0] ) return { top: 0, left: 0 };
		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
		jQuery.offset.initialized || jQuery.offset.initialize();

		var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
			body = doc.body, defaultView = doc.defaultView,
			prevComputedStyle = defaultView.getComputedStyle(elem, null),
			top = elem.offsetTop, left = elem.offsetLeft;

		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
			computedStyle = defaultView.getComputedStyle(elem, null);
			top -= elem.scrollTop, left -= elem.scrollLeft;
			if ( elem === offsetParent ) {
				top += elem.offsetTop, left += elem.offsetLeft;
				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
					top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
					left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
			}
			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
				top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
				left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
			prevComputedStyle = computedStyle;
		}

		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
			top  += body.offsetTop,
			left += body.offsetLeft;

		if ( prevComputedStyle.position === "fixed" )
			top  += Math.max(docElem.scrollTop, body.scrollTop),
			left += Math.max(docElem.scrollLeft, body.scrollLeft);

		return { top: top, left: left };
	};

jQuery.offset = {
	initialize: function() {
		if ( this.initialized ) return;
		var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
			html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';

		rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
		for ( prop in rules ) container.style[prop] = rules[prop];

		container.innerHTML = html;
		body.insertBefore(container, body.firstChild);
		innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;

		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);

		innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);

		body.style.marginTop = '1px';
		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
		body.style.marginTop = bodyMarginTop;

		body.removeChild(container);
		this.initialized = true;
	},

	bodyOffset: function(body) {
		jQuery.offset.initialized || jQuery.offset.initialize();
		var top = body.offsetTop, left = body.offsetLeft;
		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
			top  += parseInt( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0,
			left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
		return { top: top, left: left };
	}
};


jQuery.fn.extend({
	position: function() {
		var left = 0, top = 0, results;

		if ( this[0] ) {
			// Get *real* offsetParent
			var offsetParent = this.offsetParent(),

			// Get correct offsets
			offset       = this.offset(),
			parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();

			// Subtract element margins
			// note: when an element has margin: auto the offsetLeft and marginLeft 
			// are the same in Safari causing offset.left to incorrectly be 0
			offset.top  -= num( this, 'marginTop'  );
			offset.left -= num( this, 'marginLeft' );

			// Add offsetParent borders
			parentOffset.top  += num( offsetParent, 'borderTopWidth'  );
			parentOffset.left += num( offsetParent, 'borderLeftWidth' );

			// Subtract the two offsets
			results = {
				top:  offset.top  - parentOffset.top,
				left: offset.left - parentOffset.left
			};
		}

		return results;
	},

	offsetParent: function() {
		var offsetParent = this[0].offsetParent || document.body;
		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
			offsetParent = offsetParent.offsetParent;
		return jQuery(offsetParent);
	}
});


// Create scrollLeft and scrollTop methods
jQuery.each( ['Left', 'Top'], function(i, name) {
	var method = 'scroll' + name;
	
	jQuery.fn[ method ] = function(val) {
		if (!this[0]) return null;

		return val !== undefined ?

			// Set the scroll offset
			this.each(function() {
				this == window || this == document ?
					window.scrollTo(
						!i ? val : jQuery(window).scrollLeft(),
						 i ? val : jQuery(window).scrollTop()
					) :
					this[ method ] = val;
			}) :

			// Return the scroll offset
			this[0] == window || this[0] == document ?
				self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
					jQuery.boxModel && document.documentElement[ method ] ||
					document.body[ method ] :
				this[0][ method ];
	};
});
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
jQuery.each([ "Height", "Width" ], function(i, name){

	var tl = i ? "Left"  : "Top",  // top or left
		br = i ? "Right" : "Bottom", // bottom or right
		lower = name.toLowerCase();

	// innerHeight and innerWidth
	jQuery.fn["inner" + name] = function(){
		return this[0] ?
			jQuery.css( this[0], lower, false, "padding" ) :
			null;
	};

	// outerHeight and outerWidth
	jQuery.fn["outer" + name] = function(margin) {
		return this[0] ?
			jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
			null;
	};
	
	var type = name.toLowerCase();

	jQuery.fn[ type ] = function( size ) {
		// Get window width or height
		return this[0] == window ?
			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
			document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
			document.body[ "client" + name ] :

			// Get document width or height
			this[0] == document ?
				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
				Math.max(
					document.documentElement["client" + name],
					document.body["scroll" + name], document.documentElement["scroll" + name],
					document.body["offset" + name], document.documentElement["offset" + name]
				) :

				// Get or set width or height on the element
				size === undefined ?
					// Get width or height on the element
					(this.length ? jQuery.css( this[0], type ) : null) :

					// Set the width or height on the element (default to pixels if value is unitless)
					this.css( type, typeof size === "string" ? size : size + "px" );
	};

});
})();

Added Site/Site_W/flot/jquery.min.js.

cannot compute difference between binary files

Added Site/Site_W/gtest.html.









































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<html>
	<head>
		<!-- CSS Sheets for the page -->
		<link href="style.css" rel="stylesheet" type="text/css"/>
		
		<script language="javascript" type="text/javascript" src="jquery.js"></script>
		<script language="javascript" type="text/javascript" src="json2.js"></script>		
		<!--[if IE]>
			<script language="javascript" type="text/javascript" src="excanvas.min.js"></script>
		<![endif]-->		
		<script language="javascript" type="text/javascript" src="jquery.flot.js"></script>
		<script language="javascript" type="text/javascript" src="scriptgraph.js"> </script>
	</head>
	
	<body>
		<div id="BUTTON">
			<form>
				<input type="button" value="Start count!" onClick="doTimer()">
				<input type="text" id="txt">
			</form>
			<p>Click on the button above. The input field will count forever, starting at 0.</p>
		</div>
		<center><h2>Active Graph</h2></center>
		<center>
			<div id="maincntl" class="outline">
				<center><h1> MAIN STUFF </h1></center>
				This is main text stuff and will just be a fill here of
				things and stuff....
				<div id="plotleft" class="nudged">
					<div id="PLOT" style="height:200px;width:50px; ">
					</div>
				</div>
			</div>
		</center>
	</body>
</html>

Added Site/Site_W/images/0.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/1.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/2.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/3.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/4.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/5.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/6.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/7.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/8.jpg.

cannot compute difference between binary files

Added Site/Site_W/images/9.jpg.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/MIT-LICENSE.txt.











































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Title: MIT License

Copyright (c) 2009 - 2010 Chris Leonello

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Added Site/Site_W/jpqplot/README.txt.



















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Title: jqPlot Readme

Pure JavaScript plotting plugin for jQuery.

Copyright (c) 2009 - 2010 Chris Leonello
jqPlot is currently available for use in all personal or commercial projects 
under both the MIT and GPL version 2.0 licenses. This means that you can 
choose the license that best suits your project and use it accordingly. 

Although not required, the author would appreciate an email letting him 
know of any substantial use of jqPlot.  You can reach the author at: 
chris at jqplot  or see http://www.jqplot.com/info.php .

If you are feeling kind and generous, consider supporting the project by
making a donation at: http://www.jqplot.com/donate.php .

jqPlot includes date instance methods and printf/sprintf functions by other authors:

Date instance methods:

    author Ken Snyder (ken d snyder at gmail dot com)
    date 2008-09-10
    version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
    license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)

JavaScript printf/sprintf functions.

    version 2007.04.27
    author Ash Searle
    http://hexmen.com/blog/2007/03/printf-sprintf/
    http://hexmen.com/js/sprintf.js
    The author (Ash Searle) has placed this code in the public domain:
    "This code is unrestricted: you are free to use it however you like."

To learn how to use jqPlot, start with the Basic Unsage Instructions below.  Then read the
usage.txt and jqPlotOptions.txt files included with the distribution.

The jqPlot home page is at <http://www.jqplot.com/>.

Downloads can be found at <http://bitbucket.org/cleonello/jqplot/downloads/>.

The mailing list is at <http://groups.google.com/group/jqplot-users>.

Examples and unit tests are at <http://www.jqplot.com/tests/>.

Documentation is at <http://www.jqplot.com/docs/>.

The project page and source code are at <http://www.bitbucket.org/cleonello/jqplot/>.

Bugs, issues, feature requests: <http://www.bitbucket.org/cleonello/jqplot/issues/>.

Basic Usage Instructions:

jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.1 is included in 
the distribution.  To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and 
optionally the excanvas script for IE support in your web page...

> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
> <script language="javascript" type="text/javascript" src="jquery-1.4.2.min.js"></script>
> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />

For usage instructions, see <jqPlot Usage> in usage.txt.  For available options, see
<jqPlot Options> in jqPlotOptions.txt.

Building from source:

To build a distribution from source you need to have ant <http://ant.apache.org> 
installed.  There are 6 targets: clean, dist, min, tests, docs and all.  Use

> ant -p

to get a description of the various build targets. 

Added Site/Site_W/jpqplot/changes.txt.











































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
Title: Change Log

0.9.7:

* Added Mekko chart plot type with enhanced legend and axes support.
* Implemented vertical waterfall charts.  Can create waterfall plot as
  option to bar chart.  See examples folder of distribution.
* Enhanced plot labels for waterfall style.
* Enhanced bar plots so you can now color each bar of a series 
  independently with the "varyBarColor" option.
* Refactored series drawing so that each series and series shadow drawn
  on it's own canvas.  Allows series to be redrawn independently of each other.
* Added additional default series colors.
* Aded useNegativeColors option to turn off negative color array and use 
  only seriesColors array to define all bar/filled line colors.
* Fix css for cursor legend.
* Modified shape renderer so rectangles can be stroked and filled.
* Refactored date methods out of dateAxisRenderer so that date formatter 
  and methods can be accesses outside of dateAxisRenderer plugin.
* Fixed #132, now trigger series change event on plot target instead of drag canvas.
* Fixes issue #116 where some source files had mix of tabs and spaces 
  for indentation.  Should have been all spaces.
* Fixed issue #126, some links broken in docs section of web site.
* Fixed issue #90, trendline plugin incompatibility with pie renderer.
* Updated samples in examples folder of distribution to include navigation 
  links if web server is set up to process .html files with php.


0.9.6:

* New, easier to use, replot() method for placing plots in tabs, accordions,
  resizable containers or for changing plot parameters programmatically.
* Updated legend renderer for pie charts to draw swatches which will
  print correctly.
* Fixed issue #118 with patch from taum so autoscale option will
  honor tickInterval and numberTicks options
* Fix to plot diameter calculation for initially hidden plots.
* Added examples for making plots in jQuery UI tabs and accordions.
* Fixed issue #120 where pie chart with single slice not displaying
  correctly in IE and Chrome


0.9.5.2:

* Fixed #102 where double clicking on plot that has zoom enabled, but
  has not been zoomed resulted in error.
* Fixed bug where candlestick coloring options not working.
* Added option to turn individual series labels off in the legend.


0.9.5.1:

* Fixed bug where tooltip not working with OHLC and candlestick charts.
* Added additional marker styles: plus, X and dash.


0.9.5:

* Implemented "zoomProxy".  zoomProxy allows zooming one plot from another 
  such as an overview plot.
* Zooming can now be constrained to just x or y axis.
* Enhanced cursor plugin with vertical "dataTracking" line.  This is a line
  at the cursor location with a readout of data points at the line location
  which are displayed in the chart legend.
* Changed cursor tooltip format string.  Now one format string is used for
  entire tooptip.
* Added mechanisms to specify plot size when plot target is hidden or plot
  height/width otherwise cannot be determined from markup.
* Added $.jqplot.config object to specify jqplot wide configuraiton options.
  These include enablePlugins to globally set the default plugin state on/off
  and defaultHeight/defaultWidth to specify default plot height/width.
* Added fillToZero option which forces filled charts to fill to zero as opposed
  to axis minimum.  Thus negative filled bar/line values will fill upwards to
  zero axis value.
* Added option to disable stacking on individual lines.
* Changed targetId property of the plot object so it now includes a "#" before
  the id string.
* Improved tick and body sizing of Open Hi Low Close and candlestick charts.
* Removed lots of web site related files from the repository.  This means that,
  if working from the sources, user's won't be able to build the jqplot web
  site and the docs/tests that are hosted on that site.  The minified and
  compressed  distribution packages will build fine.
* Lots of examples were added to a separate examples directory to better show
  functionality of jqPlot for local testing with the distribution.
* Many various bug fixes and other minor enhancements.


0.9.4:

* Implemented axis labels.  Labels can be rendered in div tags or as canvas 
  elements supporting rotated text.
* Improved rotated axis label positioning so labels will start or end at a
  tick position.
* Fixed bug where an empty data series would hang plot rendering.
* completed issue #66 for misc. improvements to documentation.
* Fixed issue #64 where the same ID's were assigned to cursor and highlighter
  elements.
* Added option to legend to encode special HTML characters.
* Fixed undesirable behavior where point labels for points off the plot
  were being rendered.
* Added edgeTolerance option to point label renderer to control rendering of 
  labels near plot edges.


0.9.3:

* Preliminary support for axis labels.  Currently rendered into DIV tags,
  so no ratated label support.  This feature is currently expreimental.
* Fixed bug #52, needed space in tick div tag between style and class declarations 
  or plot failed in certain application doctypes.
* Fixed issue #54, miter style line join for chart lines causing spikes at steep 
  changes in slope.  Changed miter style to round.
* Added examples for new autoscaling algorithm.
* Fixed bug #57, category axis labels disappear on redraw()
* Improved algorithm which controlled maximum number of labels that would display
  on a category axis.
* Fixed bug #45 where null values causing errors in plotData and gridData.
* Fixed issue #60 where seriesColors option was not working.


0.9.2:

* Fixed bug #45 where a plot could crash if series had different numbers of points.
* Fixed issue #50, added option to turn off sorting of series data. 
* Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option.

0.9.1:

* Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render.
* Fixed bug #41 where pie and bar charts not rendered correctly on redraw().
* Fixed bug #11, filled stacked line plots not rendering correctly in IE.
* Fixed bug #42 where stacked charts not rendering with string date axis ticks.
* Fixed bug in redraw() method where axes ticks were not reset.
* Fixed "jqplotPreRedrawEvent" that should have been named "jqplotPostRedraw" event.

0.9.0:

* Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts.
* Added support for arbitrary labels on the data points.
* Enhanced highlighter plugin to allow custom formatting control of entire tooltip.
* Enhanced highlighter to support multiple y values in a data point.
* Fixed bug #38 where series with a single point with a negative value would fail.
* Improvements to examples to show what plugins to include.
* Expanded documentation for some of the plugins.

0.8.5:

* Added zooming ability with double click or single click options to reset zoom.
* Modified default tick spacing algorithm for date axes to give more space to ticks.
* Fixed bug #2 where tickInterval wasn't working properly.
* Added neighborThreshold option to control how close mouse must be to 
  point to trigger neighbor detection.
* Added double click event handler on plot.

0.8.0:

* Support for up to 9 y axes.
* Added option to control padding at max/min bounds of axes separately.
* Closed issue #21, added options to control grid line color and width.
* Closed issue #20, added options to filled line charts to stoke above 
  fill and customize fill color and transparency.
* Improved structure of on line documentation to make usage and options 
  docs default.
* Added much documentation on options and css styling.

0.7.1:

* Bug fix release
* Fixed bug #6, missing semi-colons messing up some javascript compressors.
* Fixed bug #13 where 2D ticks array of [values, labels] would fail to 
  renderer with DateAxisRenderer.
* Fixes bug #16 where pie renderer overwriting options for all plot types 
  and crashing non pie plots.
* Fixes bug #17 constrainTo dragable option mispelled as "contstrainTo".  
  Fixed dragable color issue when used with trend lines.

0.7.0:

* Pie chart support
* Enabled tooltipLocation option in highlighter. 
* Highlighter Tooltip will account for mark size and highlight size when 
  positioning itself. 
* Added ability to show just x, y or both axes in highlighter tooltip.
* Added customization of separator between axes values in highlighter tooltip.
* Modified how shadows are drawn for lines, bars and markers.  Now drawn first, 
  so they are always behind the object.
* Adjustments to shadow parameters on lines to account for new shadow positioning.
* Added a ColorGenerator class to robustly return next available color 
  for a plot with wrap around to first color at end.
* Udates to docs about css file.
* Fixed bug with String x values in series and IE error on sorting (Category Axis).
* Added cursor changes in dragable plugin when cursor near dragable point.

0.6.6b:

* Added excanvas.js and excanvas.min.js to compressed distributions.
* Added example/test html pages I had locally into repository and to 
  compressed distributions.

0.6.6a:

* Removed absolute positioning from dom element and put back into css file.
* Duplicate of 0.6.6 with a suffix to unambiguously differentiate between 
  previously posted 0.6.6 release.

0.6.6:

* Fixed bug #5, trend line plugin failing when no trend line options specified.
* Added absolute position css spec to axis tick dom element.
* Enhancement to category axes, more intuitive handling of series with 
  missing data values.

0.6.5:

* Fixed bug #4, series of unequal data length not rendering correctly.  
  This is a bugfix release only.

0.6.4:

* Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y 
  values are euqal) or single value data series would crash.

0.6.3:

* Support for stacked line (a.k.a. area) and stacked bar (horizontal and 
  vertical) charts.
* Refactored barRenderer to use default shape and shadow renderers.
* Added info (contacts & support information) page to web site.

0.6.2:

* This is a minor upgrade to docs and build only.  No functionality has changed.
* Ant build script generates entire site, examples, tests and distribution.
* Improvements to documentation.

0.6.1:

* New sprintf implementation from Ash Searle that implements %g.
* Fix to sprintf e/f formats.
* Created new format specifier, %p and %P to preserve significance.
* Modified p/P format to better display larger numbers.
* Fixed and simplified significant digits calculation for sprintf.
* Added option to have cursor tooltip follow the mouse or not.
* Added options to change size of highlight.
* Updates to handle dates like '6-May-09'.
* Mods to improve look of web site.
* Updates to documentation.
* Added license and copyright statement to source files.

0.6.0:

* Added rotated text support.  Uses native canvas text functionality in 
  browsers that support it or draws text on canvas with Hershey font
* metrics for non-supporting browsers.
* Removed lots of lint in js code.
* Moved tick css from js code into css file.
* Fix to tick positioning css.  y axis ticks were positioned to wrong side of axis div.
* Refactored axis tick renderer instantiation into the axes renderers themselves.


For chnages prior to 0.6.0 release, please see change log at http://bitbucket.org/cleonello/jqplot/changesets/

Added Site/Site_W/jpqplot/copyright.txt.



































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */

Added Site/Site_W/jpqplot/docs/files/MIT-LICENSE-txt.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>MIT License</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="MIT_License"></a>MIT License</div><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Copyright &copy; 2009</td><td class=CDLDescription>2010 Chris Leonello</td></tr></table><p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &ldquo;Software&rdquo;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p><p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p><p>THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.&nbsp; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile id=MSelected>MIT License</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/changes-txt.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Change Log</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="Change_Log"></a>Change Log</div><div class=CBody><h4 class=CHeading>0.9.7</h4><ul><li>Added Mekko chart plot type with enhanced legend and axes support.</li><li>Implemented vertical waterfall charts.&nbsp;  Can create waterfall plot as option to bar chart.&nbsp;  See examples folder of distribution.</li><li>Enhanced plot labels for waterfall style.</li><li>Enhanced bar plots so you can now color each bar of a series independently with the &ldquo;varyBarColor&rdquo; option.</li><li>Refactored series drawing so that each series and series shadow drawn on it&rsquo;s own canvas.&nbsp;  Allows series to be redrawn independently of each other.</li><li>Added additional default series colors.</li><li>Aded useNegativeColors option to turn off negative color array and use only seriesColors array to define all bar/filled line colors.</li><li>Fix css for cursor legend.</li><li>Modified shape renderer so rectangles can be stroked and filled.</li><li>Refactored date methods out of dateAxisRenderer so that date formatter and methods can be accesses outside of dateAxisRenderer plugin.</li><li>Fixed #132, now trigger series change event on plot target instead of drag canvas.</li><li>Fixes issue #116 where some source files had mix of tabs and spaces for indentation.&nbsp;  Should have been all spaces.</li><li>Fixed issue #126, some links broken in docs section of web site.</li><li>Fixed issue #90, trendline plugin incompatibility with pie renderer.</li><li>Updated samples in examples folder of distribution to include navigation links if web server is set up to process .html files with php.</li></ul><h4 class=CHeading>0.9.6</h4><ul><li>New, easier to use, replot() method for placing plots in tabs, accordions, resizable containers or for changing plot parameters programmatically.</li><li>Updated legend renderer for pie charts to draw swatches which will print correctly.</li><li>Fixed issue #118 with patch from taum so autoscale option will honor tickInterval and numberTicks options</li><li>Fix to plot diameter calculation for initially hidden plots.</li><li>Added examples for making plots in jQuery UI tabs and accordions.</li><li>Fixed issue #120 where pie chart with single slice not displaying correctly in IE and Chrome</li></ul><h4 class=CHeading>0.9.5.2</h4><ul><li>Fixed #102 where double clicking on plot that has zoom enabled, but has not been zoomed resulted in error.</li><li>Fixed bug where candlestick coloring options not working.</li><li>Added option to turn individual series labels off in the legend.</li></ul><h4 class=CHeading>0.9.5.1</h4><ul><li>Fixed bug where tooltip not working with OHLC and candlestick charts.</li><li>Added additional marker styles: plus, X and dash.</li></ul><h4 class=CHeading>0.9.5</h4><ul><li>Implemented &ldquo;zoomProxy&rdquo;.&nbsp;  zoomProxy allows zooming one plot from another such as an overview plot.</li><li>Zooming can now be constrained to just x or y axis.</li><li>Enhanced cursor plugin with vertical &ldquo;dataTracking&rdquo; line.&nbsp;  This is a line at the cursor location with a readout of data points at the line location which are displayed in the chart legend.</li><li>Changed cursor tooltip format string.&nbsp;  Now one format string is used for entire tooptip.</li><li>Added mechanisms to specify plot size when plot target is hidden or plot height/width otherwise cannot be determined from markup.</li><li>Added $.jqplot.config object to specify jqplot wide configuraiton options.&nbsp; These include enablePlugins to globally set the default plugin state on/off and defaultHeight/defaultWidth to specify default plot height/width.</li><li>Added fillToZero option which forces filled charts to fill to zero as opposed to axis minimum.&nbsp;  Thus negative filled bar/line values will fill upwards to zero axis value.</li><li>Added option to disable stacking on individual lines.</li><li>Changed targetId property of the plot object so it now includes a &ldquo;#&rdquo; before the id string.</li><li>Improved tick and body sizing of Open Hi Low Close and candlestick charts.</li><li>Removed lots of web site related files from the repository.&nbsp;  This means that, if working from the sources, user&rsquo;s won&rsquo;t be able to build the jqplot web site and the docs/tests that are hosted on that site.&nbsp;  The minified and compressed  distribution packages will build fine.</li><li>Lots of examples were added to a separate examples directory to better show functionality of jqPlot for local testing with the distribution.</li><li>Many various bug fixes and other minor enhancements.</li></ul><h4 class=CHeading>0.9.4</h4><ul><li>Implemented axis labels.&nbsp;  Labels can be rendered in div tags or as canvas elements supporting rotated text.</li><li>Improved rotated axis label positioning so labels will start or end at a tick position.</li><li>Fixed bug where an empty data series would hang plot rendering.</li><li>completed issue #66 for misc. improvements to documentation.</li><li>Fixed issue #64 where the same ID&rsquo;s were assigned to cursor and highlighter elements.</li><li>Added option to legend to encode special HTML characters.</li><li>Fixed undesirable behavior where point labels for points off the plot were being rendered.</li><li>Added edgeTolerance option to point label renderer to control rendering of labels near plot edges.</li></ul><h4 class=CHeading>0.9.3</h4><ul><li>Preliminary support for axis labels.&nbsp;  Currently rendered into DIV tags, so no ratated label support.&nbsp;  This feature is currently expreimental.</li><li>Fixed bug #52, needed space in tick div tag between style and class declarations or plot failed in certain application doctypes.</li><li>Fixed issue #54, miter style line join for chart lines causing spikes at steep changes in slope.&nbsp;  Changed miter style to round.</li><li>Added examples for new autoscaling algorithm.</li><li>Fixed bug #57, category axis labels disappear on redraw()</li><li>Improved algorithm which controlled maximum number of labels that would display on a category axis.</li><li>Fixed bug #45 where null values causing errors in plotData and gridData.</li><li>Fixed issue #60 where seriesColors option was not working.</li></ul><h4 class=CHeading>0.9.2</h4><ul><li>Fixed bug #45 where a plot could crash if series had different numbers of points.</li><li>Fixed issue #50, added option to turn off sorting of series data.</li><li>Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option.</li></ul><h4 class=CHeading>0.9.1</h4><ul><li>Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render.</li><li>Fixed bug #41 where pie and bar charts not rendered correctly on redraw().</li><li>Fixed bug #11, filled stacked line plots not rendering correctly in IE.</li><li>Fixed bug #42 where stacked charts not rendering with string date axis ticks.</li><li>Fixed bug in redraw() method where axes ticks were not reset.</li><li>Fixed &ldquo;jqplotPreRedrawEvent&rdquo; that should have been named &ldquo;jqplotPostRedraw&rdquo; event.</li></ul><h4 class=CHeading>0.9.0</h4><ul><li>Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts.</li><li>Added support for arbitrary labels on the data points.</li><li>Enhanced highlighter plugin to allow custom formatting control of entire tooltip.</li><li>Enhanced highlighter to support multiple y values in a data point.</li><li>Fixed bug #38 where series with a single point with a negative value would fail.</li><li>Improvements to examples to show what plugins to include.</li><li>Expanded documentation for some of the plugins.</li></ul><h4 class=CHeading>0.8.5</h4><ul><li>Added zooming ability with double click or single click options to reset zoom.</li><li>Modified default tick spacing algorithm for date axes to give more space to ticks.</li><li>Fixed bug #2 where tickInterval wasn&rsquo;t working properly.</li><li>Added neighborThreshold option to control how close mouse must be to point to trigger neighbor detection.</li><li>Added double click event handler on plot.</li></ul><h4 class=CHeading>0.8.0</h4><ul><li>Support for up to 9 y axes.</li><li>Added option to control padding at max/min bounds of axes separately.</li><li>Closed issue #21, added options to control grid line color and width.</li><li>Closed issue #20, added options to filled line charts to stoke above fill and customize fill color and transparency.</li><li>Improved structure of on line documentation to make usage and options docs default.</li><li>Added much documentation on options and css styling.</li></ul><h4 class=CHeading>0.7.1</h4><ul><li>Bug fix release</li><li>Fixed bug #6, missing semi-colons messing up some javascript compressors.</li><li>Fixed bug #13 where 2D ticks array of [values, labels] would fail to renderer with DateAxisRenderer.</li><li>Fixes bug #16 where pie renderer overwriting options for all plot types and crashing non pie plots.</li><li>Fixes bug #17 constrainTo dragable option mispelled as &ldquo;contstrainTo&rdquo;.&nbsp; Fixed dragable color issue when used with trend lines.</li></ul><h4 class=CHeading>0.7.0</h4><ul><li>Pie chart support</li><li>Enabled tooltipLocation option in highlighter.</li><li>Highlighter Tooltip will account for mark size and highlight size when positioning itself.</li><li>Added ability to show just x, y or both axes in highlighter tooltip.</li><li>Added customization of separator between axes values in highlighter tooltip.</li><li>Modified how shadows are drawn for lines, bars and markers.&nbsp;  Now drawn first, so they are always behind the object.</li><li>Adjustments to shadow parameters on lines to account for new shadow positioning.</li><li>Added a ColorGenerator class to robustly return next available color for a plot with wrap around to first color at end.</li><li>Udates to docs about css file.</li><li>Fixed bug with String x values in series and IE error on sorting (Category Axis).</li><li>Added cursor changes in dragable plugin when cursor near dragable point.</li></ul><h4 class=CHeading>0.6.6b</h4><ul><li>Added excanvas.js and excanvas.min.js to compressed distributions.</li><li>Added example/test html pages I had locally into repository and to compressed distributions.</li></ul><h4 class=CHeading>0.6.6a</h4><ul><li>Removed absolute positioning from dom element and put back into css file.</li><li>Duplicate of 0.6.6 with a suffix to unambiguously differentiate between previously posted 0.6.6 release.</li></ul><h4 class=CHeading>0.6.6</h4><ul><li>Fixed bug #5, trend line plugin failing when no trend line options specified.</li><li>Added absolute position css spec to axis tick dom element.</li><li>Enhancement to category axes, more intuitive handling of series with missing data values.</li></ul><h4 class=CHeading>0.6.5</h4><ul><li>Fixed bug #4, series of unequal data length not rendering correctly.&nbsp; This is a bugfix release only.</li></ul><h4 class=CHeading>0.6.4</h4><ul><li>Fixed bug (issue #1 in tracker) where flat line data series (all x and/or y values are euqal) or single value data series would crash.</li></ul><h4 class=CHeading>0.6.3</h4><ul><li>Support for stacked line (a.k.a. area) and stacked bar (horizontal and vertical) charts.</li><li>Refactored barRenderer to use default shape and shadow renderers.</li><li>Added info (contacts &amp; support information) page to web site.</li></ul><h4 class=CHeading>0.6.2</h4><ul><li>This is a minor upgrade to docs and build only.&nbsp;  No functionality has changed.</li><li>Ant build script generates entire site, examples, tests and distribution.</li><li>Improvements to documentation.</li></ul><h4 class=CHeading>0.6.1</h4><ul><li>New sprintf implementation from Ash Searle that implements %g.</li><li>Fix to sprintf e/f formats.</li><li>Created new format specifier, %p and %P to preserve significance.</li><li>Modified p/P format to better display larger numbers.</li><li>Fixed and simplified significant digits calculation for sprintf.</li><li>Added option to have cursor tooltip follow the mouse or not.</li><li>Added options to change size of highlight.</li><li>Updates to handle dates like &lsquo;6-May-09&rsquo;.</li><li>Mods to improve look of web site.</li><li>Updates to documentation.</li><li>Added license and copyright statement to source files.</li></ul><h4 class=CHeading>0.6.0</h4><ul><li>Added rotated text support.&nbsp;  Uses native canvas text functionality in browsers that support it or draws text on canvas with Hershey font</li><li>metrics for non-supporting browsers.</li><li>Removed lots of lint in js code.</li><li>Moved tick css from js code into css file.</li><li>Fix to tick positioning css.&nbsp;  y axis ticks were positioned to wrong side of axis div.</li><li>Refactored axis tick renderer instantiation into the axes renderers themselves.</li></ul><p>For chnages prior to 0.6.0 release, please see change log at <a href="http://bitbucket.org/cleonello/jqplot/changesets/" class=LURL target=_top>http://bitbucket.org/cleonello/jqplot/changesets/</a></p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile id=MSelected>Change Log</div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/gpl-2-0-txt.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>GPL Version 2</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="GPL_Version_2"></a>GPL Version 2</div><div class=CBody><p>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</p><p>Copyright &copy; 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</p><p>Preamble</p><p>The licenses for most software are designed to take away your freedom to share and change it.&nbsp;  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.&nbsp;  This General Public License applies to most of the Free Software Foundation&rsquo;s software and to any other program whose authors commit to using it.&nbsp;  (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.)&nbsp;  You can apply it to your programs, too.</p><p>When we speak of free software, we are referring to freedom, not price.&nbsp;  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.</p><p>To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights.&nbsp; These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.</p><p>For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have.&nbsp;  You must make sure that they, too, receive or can get the source code.&nbsp;  And you must show them these terms so they know their rights.</p><p>We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.</p><p>Also, for each author&rsquo;s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.&nbsp;  If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors&rsquo; reputations.</p><p>Finally, any free program is threatened constantly by software patents.&nbsp;  We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.&nbsp;  To prevent this, we have made it clear that any patent must be licensed for everyone&rsquo;s free use or not licensed at all.</p><p>The precise terms and conditions for copying, distribution and modification follow.</p><p>GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</p><p>0.&nbsp; This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License.&nbsp;  The &ldquo;Program&rdquo;, below, refers to any such program or work, and a &ldquo;work based on the Program&rdquo; means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language.&nbsp;  (Hereinafter, translation is included without limitation in the term &ldquo;modification&rdquo;.)&nbsp;  Each licensee is addressed as &ldquo;you&rdquo;.</p><p>Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.&nbsp;  The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program).&nbsp; Whether that is true depends on what the Program does.</p><p>1.&nbsp; You may copy and distribute verbatim copies of the Program&rsquo;s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.</p><p>You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.</p><p>2.&nbsp; You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:</p><p>a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.</p><p>b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.</p><p>c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License.&nbsp;  (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)</p><p>These requirements apply to the modified work as a whole.&nbsp;  If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.&nbsp;  But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.</p><p>Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.</p><p>In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.</p><p>3.&nbsp; You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:</p><p>a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</p><p>b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,</p><p>c) Accompany it with the information you received as to the offer to distribute corresponding source code.&nbsp;  (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)</p><p>The source code for a work means the preferred form of the work for making modifications to it.&nbsp;  For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.&nbsp;  However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.</p><p>If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.</p><p>4.&nbsp; You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.&nbsp;  Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.&nbsp; However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.</p><p>5.&nbsp; You are not required to accept this License, since you have not signed it.&nbsp;  However, nothing else grants you permission to modify or distribute the Program or its derivative works.&nbsp;  These actions are prohibited by law if you do not accept this License.&nbsp;  Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.</p><p>6.&nbsp; Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions.&nbsp;  You may not impose any further restrictions on the recipients&rsquo; exercise of the rights granted herein.&nbsp; You are not responsible for enforcing compliance by third parties to this License.</p><p>7.&nbsp; If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.&nbsp;  If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all.&nbsp;  For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.</p><p>If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.</p><p>It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices.&nbsp;  Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.</p><p>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.</p><p>8.&nbsp; If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.&nbsp;  In such case, this License incorporates the limitation as if written in the body of this License.</p><p>9.&nbsp; The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.&nbsp;  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</p><p>Each version is given a distinguishing version number.&nbsp;  If the Program specifies a version number of this License which applies to it and &ldquo;any later version&rdquo;, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation.&nbsp;  If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</p><p>10.&nbsp; If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission.&nbsp;  For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.&nbsp;  Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.</p><p>NO WARRANTY</p><p>11.&nbsp; BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.&nbsp;  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.&nbsp;  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.&nbsp;  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p><p>12.&nbsp; IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile id=MSelected>GPL License</div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/images/background.jpg.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/basicline.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/basiclogaxis.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/basiclogoptions.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/basicoptions.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/dualaxis.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/logo.jpg.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navdocs.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navdocsover.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navdownload.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navdownloadover.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navexamples.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navexamplesover.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navhome.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/navhomeover.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/new.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/sample3.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/images/samplesm.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/jqPlotCssStyling-txt.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>jqPlot CSS Customization</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_CSS_Customization"></a>jqPlot CSS Customization</div><div class=CBody><p>Much of the styling of jqPlot is done by css.&nbsp;  The jqPlot css file is, unremarkably, jquery.jqplot.css and resides in the same directory as jqPlot itself.</p><p>There exist some styling related javascript properties on the plot objects themselves (like fontStyle, fontSize, etc.).&nbsp;  These can be set with the options object at plot creation.&nbsp; Generally, setting these options is <b>NOT</b> the preferred way to customize the look of the plot.&nbsp;  Use the css file instead.&nbsp;  <b>These options are deprecated and may disappear</b>.&nbsp;  The exceptions are certain background and color options which control attributes of something renderered on a canvas.&nbsp;  This would be line color, grid background, etc.&nbsp;  These must be set by the options object.&nbsp;  For a list of available options, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a>.</p><p>Objects in the plot that can be customized by css are given a css class like &ldquo;.jqplot-*&rdquo;.&nbsp; For example, the plot title will have a &ldquo;.jqplot-title&rdquo; class, the axes &ldquo;.jqplot-axis&rdquo;, etc.</p><p>Currently assigned classes in jqPlot are as follows:</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>.jqplot-target</td><td class=CDLDescription>Styles for the plot target div.&nbsp;  These will be cascaded down to all plot elements according to css rules.</td></tr><tr><td class=CDLEntry>.jqplot-axis</td><td class=CDLDescription>Styles for all axes</td></tr><tr><td class=CDLEntry>.jqplot-xaxis</td><td class=CDLDescription>Styles applied to the primary x axis only.</td></tr><tr><td class=CDLEntry>.jqplot-yaxis</td><td class=CDLDescription>Styles applied to the primary y axis only.</td></tr><tr><td class=CDLEntry>.jqplot-x2axis, .jqplot-x3axis, ...</td><td class=CDLDescription>Styles applied to the 2nd, 3rd, etc. x axis only.</td></tr><tr><td class=CDLEntry>.jqplot-y2axis, .jqplot-y3axis, ...</td><td class=CDLDescription>Styles applied to the 2nd, 3rd, etc.y axis only.</td></tr><tr><td class=CDLEntry>.jqplot-axis-tick</td><td class=CDLDescription>Styles applied to all axis ticks</td></tr><tr><td class=CDLEntry>.jqplot-xaxis-tick</td><td class=CDLDescription>Styles applied to primary x axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-x2axis-tick</td><td class=CDLDescription>Styles applied to secondary x axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-yaxis-tick</td><td class=CDLDescription>Styles applied to primary y axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-y2axis-tick</td><td class=CDLDescription>Styles applied to secondary y axis ticks only.</td></tr><tr><td class=CDLEntry>table.jqplot-table-legend</td><td class=CDLDescription>Styles applied to the legend box table.</td></tr><tr><td class=CDLEntry>.jqplot-title</td><td class=CDLDescription>Styles applied to the title.</td></tr><tr><td class=CDLEntry>.jqplot-cursor-tooltip</td><td class=CDLDescription>Styles applied to the cursor tooltip</td></tr><tr><td class=CDLEntry>.jqplot-highlighter-tooltip</td><td class=CDLDescription>Styles applied to the highlighter tooltip.</td></tr><tr><td class=CDLEntry>div.jqplot-table-legend-swatch</td><td class=CDLDescription>the div element used for the colored swatch on the legend.</td></tr></table><p>Note that axes will be assigned 2 classes like: class=&rdquo;.jqplot-axis .jqplot-xaxis&rdquo;.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqPlot CSS Customization</div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqPlotOptions-txt.html.









































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>jqPlot Options</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Options"></a>jqPlot Options</div><div class=CBody><p><b>This document is out of date.&nbsp;  While the options described here should still be relavent and valid, it has not been updated for many new options.&nbsp;  Sorry for this inconvenience.</b></p><p>This document describes the options available to jqPlot.&nbsp;  These are set with the third argument to the $.jqplot(&lsquo;target&rsquo;, data, options) function.&nbsp; Options are using the following convention:</p><blockquote><pre>property: default, // notes</pre></blockquote><p>This document is not complete!&nbsp;  Not all options are shown!&nbsp;  Also, Options marked with * in the notes are post 0.7.1 additions.&nbsp; They will be available in the next release.&nbsp;  Further information about the options can be found in the online API documentation.&nbsp;  For details on how the options relate to the API documentation, see the <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Options Tutorial</a> in the optionsTutorial.txt file.</p><blockquote><pre>options =
{
    seriesColors: [ &quot;#4bb2c5&quot;, &quot;#c5b47f&quot;, &quot;#EAA228&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;,
        &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;],  // colors that will
         // be assigned to the series.  If there are more series than colors, colors
         // will wrap around and start at the beginning again.

    stackSeries: false, // if true, will create a stack plot.
                        // Currently supported by line and bar graphs.

    title: '',      // Title for the plot.  Can also be specified as an object like:

    title: {
        text: '',   // title for the plot,
        show: true,
    },

    axesDefaults: {
        show: false,    // wether or not to renderer the axis.  Determined automatically.
        min: null,      // minimum numerical value of the axis.  Determined automatically.
        max: null,      // maximum numverical value of the axis.  Determined automatically.
        pad: 1.2,       // a factor multiplied by the data range on the axis to give the
                        // axis range so that data points don't fall on the edges of the axis.
        ticks: [],      // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...]
                        // array of ticks to use.  Computed automatically.
        numberTicks: undefined,
        renderer: $.jqplot.LinearAxisRenderer,  // renderer to use to draw the axis,
        rendererOptions: {},    // options to pass to the renderer.  LinearAxisRenderer
                                // has no options,
        tickOptions: {
            mark: 'outside',    // Where to put the tick mark on the axis
                                // 'outside', 'inside' or 'cross',
            showMark: true,
            showGridline: true, // wether to draw a gridline (across the whole grid) at this tick,
            markSize: 4,        // length the tick will extend beyond the grid in pixels.  For
                                // 'cross', length will be added above and below the grid boundary,
            show: true,         // wether to show the tick (mark and label),
            showLabel: true,    // wether to show the text label at the tick,
            formatString: '',   // format string to use with the axis tick formatter
        }
        showTicks: true,        // wether or not to show the tick labels,
        showTickMarks: true,    // wether or not to show the tick marks
    },

    axes: {
        xaxis: {
            // same options as axesDefaults
        },
        yaxis: {
            // same options as axesDefaults
        },
        x2axis: {
            // same options as axesDefaults
        },
        y2axis: {
            // same options as axesDefaults
        }
    },

    seriesDefaults: {
        show: true,     // wether to render the series.
        xaxis: 'xaxis', // either 'xaxis' or 'x2axis'.
        yaxis: 'yaxis', // either 'yaxis' or 'y2axis'.
        label: '',      // label to use in the legend for this line.
        color: '',      // CSS color spec to use for the line.  Determined automatically.
        lineWidth: 2.5, // Width of the line in pixels.
        shadow: true,   // show shadow or not.
        shadowAngle: 45,    // angle (degrees) of the shadow, clockwise from x axis.
        shadowOffset: 1.25, // offset from the line of the shadow.
        shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each
                            // stroke offset by shadowOffset from the last.
        shadowAlpha: 0.1,   // Opacity of the shadow.
        showLine: true,     // whether to render the line segments or not.
        showMarker: true,   // render the data point markers or not.
        fill: false,        // fill under the line,
        fillAndStroke: false,       // *stroke a line at top of fill area.
        fillColor: undefined,       // *custom fill color for filled lines (default is line color).
        fillAlpha: undefined,       // *custom alpha to apply to fillColor.
        renderer: $.jqplot.LineRenderer],    // renderer used to draw the series.
        rendererOptions: {}, // options passed to the renderer.  LineRenderer has no options.
        markerRenderer: $.jqplot.MarkerRenderer,    // renderer to use to draw the data
                                                    // point markers.
        markerOptions: {
            show: true,             // wether to show data point markers.
            style: 'filledCircle',  // circle, diamond, square, filledCircle.
                                    // filledDiamond or filledSquare.
            lineWidth: 2,       // width of the stroke drawing the marker.
            size: 9,            // size (diameter, edge length, etc.) of the marker.
            color: '#666666'    // color of marker, set to color of line by default.
            shadow: true,       // wether to draw shadow on marker or not.
            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
            shadowOffset: 1,    // offset from the line of the shadow,
            shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each stroke
                                // offset by shadowOffset from the last.
            shadowAlpha: 0.07   // Opacity of the shadow
        }
    },

    series:[
        {Each series has same options as seriesDefaults},
        {You can override each series individually here}
    ],

    legend: {
        show: false,
        location: 'ne',     // compass direction, nw, n, ne, e, se, s, sw, w.
        xoffset: 12,        // pixel offset of the legend box from the x (or x2) axis.
        yoffset: 12,        // pixel offset of the legend box from the y (or y2) axis.
    },

    grid: {
        drawGridLines: true,        // wether to draw lines across the grid or not.
        gridLineColor: '#cccccc'    // *Color of the grid lines.
        background: '#fffdf6',      // CSS color spec for background color of grid.
        borderColor: '#999999',     // CSS color spec for border around grid.
        borderWidth: 2.0,           // pixel width of border around grid.
        shadow: true,               // draw a shadow for grid.
        shadowAngle: 45,            // angle of the shadow.  Clockwise from x axis.
        shadowOffset: 1.5,          // offset from the line of the shadow.
        shadowWidth: 3,             // width of the stroke for the shadow.
        shadowDepth: 3,             // Number of strokes to make when drawing shadow.
                                    // Each stroke offset by shadowOffset from the last.
        shadowAlpha: 0.07           // Opacity of the shadow
        renderer: $.jqplot.CanvasGridRenderer,  // renderer to use to draw the grid.
        rendererOptions: {}         // options to pass to the renderer.  Note, the default
                                    // CanvasGridRenderer takes no additional options.
    },

    // Plugin and renderer options.

    // BarRenderer.
    // With BarRenderer, you can specify additional options in the rendererOptions object
    // on the series or on the seriesDefaults object.  Note, some options are respecified
    // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits.

    seriesDefaults: {
        rendererOptions: {
            barPadding: 8,      // number of pixels between adjacent bars in the same
                                // group (same category or bin).
            barMargin: 10,      // number of pixels between adjacent groups of bars.
            barDirection: 'vertical', // vertical or horizontal.
            barWidth: null,     // width of the bars.  null to calculate automatically.
            shadowOffset: 2,    // offset from the bar edge to stroke the shadow.
            shadowDepth: 5,     // nuber of strokes to make for the shadow.
            shadowAlpha: 0.8,   // transparency of the shadow.
        }
    },

    // Cursor
    // Options are passed to the cursor plugin through the &quot;cursor&quot; object at the top
    // level of the options object.

    cursor: {
        style: 'crosshair',     // A CSS spec for the cursor type to change the
                                // cursor to when over plot.
        show: true,
        showTooltip: true,      // show a tooltip showing cursor position.
        followMouse: false,     // wether tooltip should follow the mouse or be stationary.
        tooltipLocation: 'se',  // location of the tooltip either relative to the mouse
                                // (followMouse=true) or relative to the plot.  One of
                                // the compass directions, n, ne, e, se, etc.
        tooltipOffset: 6,       // pixel offset of the tooltip from the mouse or the axes.
        showTooltipGridPosition: false,     // show the grid pixel coordinates of the mouse
                                            // in the tooltip.
        showTooltipUnitPosition: true,      // show the coordinates in data units of the mouse
                                            // in the tooltip.
        tooltipFormatString: '%.4P',    // sprintf style format string for tooltip values.
        useAxesFormatters: true,        // wether to use the same formatter and formatStrings
                                        // as used by the axes, or to use the formatString
                                        // specified on the cursor with sprintf.
        tooltipAxesGroups: [],  // show only specified axes groups in tooltip.  Would specify like:
                                // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']].  By default, all axes
                                // combinations with for the series in the plot are shown.

    },

    // Dragable
    // Dragable options are specified with the &quot;dragable&quot; object at the top level
    // of the options object.

    dragable: {
        color: undefined,       // custom color to use for the dragged point and dragged line
                                // section. default will use a transparent variant of the line color.
        constrainTo: 'none',    // Constrain dragging motion to an axis: 'x', 'y', or 'none'.
    },

    // Highlighter
    // Highlighter options are specified with the &quot;highlighter&quot; object at the top level
    // of the options object.

    highlighter: {
        lineWidthAdjust: 2.5,   // pixels to add to the size line stroking the data point marker
                                // when showing highlight.  Only affects non filled data point markers.
        sizeAdjust: 5,          // pixels to add to the size of filled markers when drawing highlight.
        showTooltip: true,      // show a tooltip with data point values.
        tooltipLocation: 'nw',  // location of tooltip: n, ne, e, se, s, sw, w, nw.
        fadeTooltip: true,      // use fade effect to show/hide tooltip.
        tooltipFadeSpeed: &quot;fast&quot;// slow, def, fast, or a number of milliseconds.
        tooltipOffset: 2,       // pixel offset of tooltip from the highlight.
        tooltipAxes: 'both',    // which axis values to display in the tooltip, x, y or both.
        tooltipSeparator: ', '  // separator between values in the tooltip.
        useAxesFormatters: true // use the same format string and formatters as used in the axes to
                                // display values in the tooltip.
        tooltipFormatString: '%.5P' // sprintf format string for the tooltip.  only used if
                                    // useAxesFormatters is false.  Will use sprintf formatter with
                                    // this string, not the axes formatters.
    },

    // LogAxisRenderer
    // LogAxisRenderer add 2 options to the axes object.  These options are specified directly on
    // the axes or axesDefaults object.

    axesDefaults: {
        base: 10,                   // the logarithmic base.
        tickDistribution: 'even',   // 'even' or 'power'.  'even' will produce with even visiual (pixel)
                                    // spacing on the axis.  'power' will produce ticks spaced by
                                    // increasing powers of the log base.
    },

    // PieRenderer
    // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object.

    seriesDefaults: {
        rendererOptions: {
            diameter: undefined, // diameter of pie, auto computed by default.
            padding: 20,        // padding between pie and neighboring legend or plot margin.
            sliceMargin: 0,     // gap between slices.
            fill: true,         // render solid (filled) slices.
            shadowOffset: 2,    // offset of the shadow from the chart.
            shadowDepth: 5,     // Number of strokes to make when drawing shadow.  Each stroke
                                // offset by shadowOffset from the last.
            shadowAlpha: 0.07   // Opacity of the shadow
        }
    },

    // Trendline
    // Trendline takes options on the trendline object of the series or seriesDefaults object.

    seriesDefaults: {
        trendline: {
            show: true,         // show the trend line
            color: '#666666',   // CSS color spec for the trend line.
            label: '',          // label for the trend line.
            type: 'linear',     // 'linear', 'exponential' or 'exp'
            shadow: true,       // show the trend line shadow.
            lineWidth: 1.5,     // width of the trend line.
            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
            shadowOffset: 1.5,  // offset from the line of the shadow.
            shadowDepth: 3,     // Number of strokes to make when drawing shadow.
                                // Each stroke offset by shadowOffset from the last.
            shadowAlpha: 0.07   // Opacity of the shadow
        }
    }
}</pre></blockquote></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqPlot Options</div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-axisLabelRenderer-js.html.































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.AxisLabelRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.AxisLabelRenderer"></a>$.jqplot.<wbr>AxisLabelRenderer</div><div class=CBody><p>Renderer to place labels on the axes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer" >$.jqplot.<wbr>AxisLabelRenderer</a></td><td class=SDescription>Renderer to place labels on the axes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.label" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">label</a></td><td class=SDescription>The text or html for the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.escapeHTML" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">escapeHTML</a></td><td class=SDescription>true to escape HTML entities in the label.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>The text or html for the label.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote><p>true to escape HTML entities in the label.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>AxisLabelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-axisTickRenderer-js.html.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.AxisTickRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.AxisTickRenderer"></a>$.jqplot.<wbr>AxisTickRenderer</div><div class=CBody><p>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer" >$.jqplot.<wbr>AxisTickRenderer</a></td><td class=SDescription>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.mark" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">mark</a></td><td class=SDescription>tick mark on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showMark" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showMark</a></td><td class=SDescription>wether or not to show the mark on the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showGridline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showGridline</a></td><td class=SDescription>wether or not to draw the gridline on the grid at this tick.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.isMinorTick" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isMinorTick</a></td><td class=SDescription>if this is a minor tick.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.size" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">size</a></td><td class=SDescription>Length of the tick beyond the grid in pixels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.markSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">markSize</a></td><td class=SDescription>Length of the tick marks in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.show" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showLabel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.formatter" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.prefix" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">prefix</a></td><td class=SDescription>string appended to the tick label if no formatString is specified.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.formatString" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.fontFamily" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">fontFamily</a></td><td class=SDescription>css spec for the font-family css attribute.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.fontSize" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">fontSize</a></td><td class=SDescription>css spec for the font-size css attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.textColor" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.mark"></a>mark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote><p>tick mark on the axis.&nbsp;  One of &lsquo;inside&rsquo;, &lsquo;outside&rsquo;, &lsquo;cross&rsquo;, &lsquo;&rsquo; or null.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showMark"></a>showMark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote><p>wether or not to show the mark on the axis.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showGridline"></a>showGridline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote><p>wether or not to draw the gridline on the grid at this tick.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.isMinorTick"></a>isMinorTick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote><p>if this is a minor tick.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote><p>Length of the tick beyond the grid in pixels.&nbsp; DEPRECATED: This has been superceeded by markSize</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.markSize"></a>markSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote><p>Length of the tick marks in pixels.&nbsp;  For &lsquo;cross&rsquo; style, length will be stoked above and below axis, so total length will be twice this.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).&nbsp; Setting this to false requires more testing.&nbsp;  It is recommended to set showLabel and showMark to false instead.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp;  sprintf by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.prefix"></a>prefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote><p>string appended to the tick label if no formatString is specified.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css spec for the font-family css attribute.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css spec for the font-size css attribute.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile id=MSelected>AxisTickRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>string appended to the tick label if no formatString is specified.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-canvasGridRenderer-js.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.CanvasGridRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasGridRenderer"></a>$.jqplot.<wbr>CanvasGridRenderer</div><div class=CBody><p>The default jqPlot grid renderer, creating a grid on a canvas element.&nbsp; The renderer has no additional options beyond the <a href="jqplot-core-js.html#Grid" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Grid</a> class.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>CanvasGridRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-core-js.html.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/files/jqplot-divTitleRenderer-js.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.DivTitleRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DivTitleRenderer"></a>$.jqplot.<wbr>DivTitleRenderer</div><div class=CBody><p>The default title renderer for jqPlot.&nbsp;  This class has no options beyond the <a href="jqplot-core-js.html#Title" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Title</a> class.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>DivTitleRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-lineRenderer-js.html.











































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.LineRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LineRenderer"></a>$.jqplot.<wbr>LineRenderer</div><div class=CBody><p>The default line renderer for jqPlot, this class has no options beyond the <a href="jqplot-core-js.html#Series" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">Series</a> class.&nbsp; Draws series as a line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LineRenderer" >$.jqplot.<wbr>LineRenderer</a></td><td class=SDescription>The default line renderer for jqPlot, this class has no options beyond the <a href="jqplot-core-js.html#Series" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Series</a> class. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightMouseOver" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">highlightMouseOver</a></td><td class=SDescription>True to highlight area on a filled plot when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightMouseDown" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over an area on a filled plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightColor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">highlightColor</a></td><td class=SDescription>color to use when highlighting an area on a filled plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.setGridData" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.makeGridData" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight area on a filled plot when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over an area on a filled plot.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightColor"></a>highlightColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote><p>color to use when highlighting an area on a filled plot.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp; Called with scope of a series.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp;  This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Line Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-linearAxisRenderer-js.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.LinearAxisRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LinearAxisRenderer"></a>$.jqplot.<wbr>LinearAxisRenderer</div><div class=CBody><p>The default jqPlot axis renderer, creating a numeric axis.&nbsp; The renderer has no additional options beyond the <a href="jqplot-core-js.html#Axis" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Axis</a> object.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>LinearAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-markerRenderer-js.html.



































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.MarkerRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MarkerRenderer"></a>$.jqplot.<wbr>MarkerRenderer</div><div class=CBody><p>The default jqPlot marker renderer, rendering the points on the line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MarkerRenderer" >$.jqplot.<wbr>MarkerRenderer</a></td><td class=SDescription>The default jqPlot marker renderer, rendering the points on the line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>wether or not to show the marker.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.style" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">style</a></td><td class=SDescription>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.lineWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">lineWidth</a></td><td class=SDescription>size of the line for non-filled markers.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.size" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">size</a></td><td class=SDescription>Size of the marker (diameter or circle, length of edge of square, etc.)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.color" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">color</a></td><td class=SDescription>color of marker. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadow" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadow</a></td><td class=SDescription>wether or not to draw a shadow on the line</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowAngle" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowOffset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowDepth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowAlpha" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">shadowRenderer</a></td><td class=SDescription>Renderer that will draws the shadows on the marker.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shapeRenderer" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">shapeRenderer</a></td><td class=SDescription>Renderer that will draw the marker.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the marker.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.style"></a>style</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote><p>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote><p>size of the line for non-filled markers.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote><p>Size of the marker (diameter or circle, length of edge of square, etc.)</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote><p>color of marker.&nbsp;  Will be set to color of series by default on init.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>wether or not to draw a shadow on the line</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Shadow angle in degrees</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote><p>Shadow offset from line in pixels</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp;  0 = transparent.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowRenderer"></a>shadowRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote><p>Renderer that will draws the shadows on the marker.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shapeRenderer"></a>shapeRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote><p>Renderer that will draw the marker.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>MarkerRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-shadowRenderer-js.html.



























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.shadowRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.shadowRenderer"></a>$.jqplot.<wbr>shadowRenderer</div><div class=CBody><p>The default jqPlot shadow renderer, rendering shadows behind shapes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.shadowRenderer" >$.jqplot.<wbr>shadowRenderer</a></td><td class=SDescription>The default jqPlot shadow renderer, rendering shadows behind shapes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shadowRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.angle" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">angle</a></td><td class=SDescription>Angle of the shadow in degrees. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.offset" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">offset</a></td><td class=SDescription>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.alpha" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">alpha</a></td><td class=SDescription>alpha transparency of shadow stroke.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">lineWidth</a></td><td class=SDescription>width of the shadow line stroke.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineJoin" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">lineJoin</a></td><td class=SDescription>How line segments of the shadow are joined.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineCap" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">lineCap</a></td><td class=SDescription>how ends of the shadow line are rendered.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.fill" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fill</a></td><td class=SDescription>whether to fill the shape.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.depth" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">depth</a></td><td class=SDescription>how many times the shadow is stroked. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.isarc" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">isarc</a></td><td class=SDescription>wether the shadow is an arc or not.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.draw" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">draw</a></td><td class=SDescription>draws an transparent black (i.e. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote><p>Angle of the shadow in degrees.&nbsp;  Measured counter-clockwise from the x axis.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote><p>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.alpha"></a>alpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote><p>alpha transparency of shadow stroke.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>width of the shadow line stroke.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote><p>How line segments of the shadow are joined.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>how ends of the shadow line are rendered.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>whether to fill the shape.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.depth"></a>depth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote><p>how many times the shadow is stroked.&nbsp;  Each stroke will be offset by offset at angle degrees.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.isarc"></a>isarc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote><p>wether the shadow is an arc or not.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>draws an transparent black (i.e. gray) shadow.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>ctx</td><td class=CDLDescription>canvas drawing context</td></tr><tr><td class=CDLEntry>points</td><td class=CDLDescription>array of points or [x, y, radius, start angle (rad), end angle (rad)]</td></tr></table></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>ShadowRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-shapeRenderer-js.html.































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.shapeRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.shapeRenderer"></a>$.jqplot.<wbr>shapeRenderer</div><div class=CBody><p>The default jqPlot shape renderer.&nbsp;  Given a set of points will plot them and either stroke a line (fill = false) or fill them (fill = true).&nbsp; If a filled shape is desired, closePath = true must also be set to close the shape.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.shapeRenderer" >$.jqplot.<wbr>shapeRenderer</a></td><td class=SDescription>The default jqPlot shape renderer. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shapeRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.lineJoin" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">lineJoin</a></td><td class=SDescription>How line segments of the shadow are joined.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.lineCap" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">lineCap</a></td><td class=SDescription>how ends of the shadow line are rendered.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fill" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">fill</a></td><td class=SDescription>whether to fill the shape.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.isarc" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isarc</a></td><td class=SDescription>wether the shadow is an arc or not.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fillRect" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">fillRect</a></td><td class=SDescription>true to draw shape as a filled rectangle.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.strokeRect" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">strokeRect</a></td><td class=SDescription>true to draw shape as a stroked rectangle.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.clearRect" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">clearRect</a></td><td class=SDescription>true to cear a rectangle.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.strokeStyle" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">strokeStyle</a></td><td class=SDescription>css color spec for the stoke style</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fillStyle" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">fillStyle</a></td><td class=SDescription>css color spec for the fill style.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shapeRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.draw" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">draw</a></td><td class=SDescription>draws the shape.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote><p>How line segments of the shadow are joined.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>how ends of the shadow line are rendered.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>whether to fill the shape.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.isarc"></a>isarc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote><p>wether the shadow is an arc or not.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fillRect"></a>fillRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote><p>true to draw shape as a filled rectangle.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.strokeRect"></a>strokeRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote><p>true to draw shape as a stroked rectangle.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.clearRect"></a>clearRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote><p>true to cear a rectangle.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.strokeStyle"></a>strokeStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote><p>css color spec for the stoke style</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fillStyle"></a>fillStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote><p>css color spec for the fill style.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>draws the shape.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>ctx</td><td class=CDLDescription>canvas drawing context</td></tr><tr><td class=CDLEntry>points</td><td class=CDLDescription>array of points for shapes or [x, y, width, height] for rectangles or [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.</td></tr></table></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>ShapeRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/jqplot-themeEngine-js.html.





























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.ThemeEngine</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.ThemeEngine"></a>$.jqplot.<wbr>ThemeEngine</div><div class=CBody><p>Theme Engine provides a programatic way to change some of the  more common jqplot styling options such as fonts, colors and grid options.&nbsp; A theme engine instance is created with each plot.&nbsp;  The theme engine manages a collection of themes which can be modified, added to, or applied to the plot.</p><p>The themeEngine class is not instantiated directly.&nbsp; When a plot is initialized, the current plot options are scanned an a default theme named &ldquo;Default&rdquo; is created.&nbsp;  This theme is used as the basis for other themes added to the theme engine and is always available.</p><p>A theme is a simple javascript object with styling parameters for various entities of the plot.&nbsp;  A theme has the form:</p><blockquote><pre>{
    _name:f &quot;Default&quot;,
    target: {
        backgroundColor: &quot;transparent&quot;
    },
    legend: {
        textColor: null,
        fontFamily: null,
        fontSize: null,
        border: null,
        background: null
    },
    title: {
        textColor: &quot;rgb(102, 102, 102)&quot;,
        fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;,
        fontSize: &quot;19.2px&quot;,
        textAlign: &quot;center&quot;
    },
    seriesStyles: {},
    series: [{
        color: &quot;#4bb2c5&quot;,
        lineWidth: 2.5,
        shadow: true,
        fillColor: &quot;#4bb2c5&quot;,
        showMarker: true,
        markerOptions: {
            color: &quot;#4bb2c5&quot;,
            show: true,
            style: 'filledCircle',
            lineWidth: 1.5,
            size: 4,
            shadow: true
        }
    }],
    grid: {
        drawGridlines: true,
        gridLineColor: &quot;#cccccc&quot;,
        gridLineWidth: 1,
        backgroundColor: &quot;#fffdf6&quot;,
        borderColor: &quot;#999999&quot;,
        borderWidth: 2,
        shadow: true
    },
    axesStyles: {
        label: {},
        ticks: {}
    },
    axes: {
        xaxis: {
            borderColor: &quot;#999999&quot;,
            borderWidth: 2,
            ticks: {
                show: true,
                showGridline: true,
                showLabel: true,
                showMark: true,
                size: 4,
                textColor: &quot;&quot;,
                whiteSpace: &quot;nowrap&quot;,
                fontSize: &quot;12px&quot;,
                fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;
            },
            label: {
                textColor: &quot;rgb(102, 102, 102)&quot;,
                whiteSpace: &quot;normal&quot;,
                fontSize: &quot;14.6667px&quot;,
                fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;,
                fontWeight: &quot;400&quot;
            }
        },
        yaxis: {
            borderColor: &quot;#999999&quot;,
            borderWidth: 2,
            ticks: {
                show: true,
                showGridline: true,
                showLabel: true,
                showMark: true,
                size: 4,
                textColor: &quot;&quot;,
                whiteSpace: &quot;nowrap&quot;,
                fontSize: &quot;12px&quot;,
                fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;
            },
            label: {
                textColor: null,
                whiteSpace: null,
                fontSize: null,
                fontFamily: null,
                fontWeight: null
            }
        },
        x2axis: {...
        },
        ...
        y9axis: {...
        }
    }
}</pre></blockquote><p>&rdquo;seriesStyles&rdquo; is a style object that will be applied to all series in the plot.&nbsp; It will forcibly override any styles applied on the individual series.&nbsp;  &ldquo;axesStyles&rdquo; is a style object that will be applied to all axes in the plot.&nbsp;  It will also forcibly override any styles on the individual axes.</p><p>The example shown above has series options for a line series.&nbsp;  Options for other series types are shown below:</p><h4 class=CHeading>Bar Series</h4><blockquote><pre>{
    color: &quot;#4bb2c5&quot;,
    seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
    lineWidth: 2.5,
    shadow: true,
    barPadding: 2,
    barMargin: 10,
    barWidth: 15.09375,
    highlightColors: [&quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;]
}</pre></blockquote><h4 class=CHeading>Pie Series</h4><blockquote><pre>{
    seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
    padding: 20,
    sliceMargin: 0,
    fill: true,
    shadow: true,
    startAngle: 0,
    lineWidth: 2.5,
    highlightColors: [&quot;rgb(129,201,214)&quot;, &quot;rgb(240,189,104)&quot;, &quot;rgb(214,202,165)&quot;, &quot;rgb(137,180,158)&quot;, &quot;rgb(168,180,137)&quot;, &quot;rgb(180,174,89)&quot;, &quot;rgb(180,113,161)&quot;, &quot;rgb(129,141,236)&quot;, &quot;rgb(227,205,120)&quot;, &quot;rgb(255,138,76)&quot;, &quot;rgb(76,169,219)&quot;, &quot;rgb(215,126,190)&quot;, &quot;rgb(220,232,135)&quot;, &quot;rgb(200,167,96)&quot;, &quot;rgb(103,202,235)&quot;, &quot;rgb(208,154,215)&quot;]
}</pre></blockquote><h4 class=CHeading>Funnel Series</h4><blockquote><pre>{
    color: &quot;#4bb2c5&quot;,
    lineWidth: 2,
    shadow: true,
    padding: {
        top: 20,
        right: 20,
        bottom: 20,
        left: 20
    },
    sectionMargin: 6,
    seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
    highlightColors: [&quot;rgb(147,208,220)&quot;, &quot;rgb(242,199,126)&quot;, &quot;rgb(220,210,178)&quot;, &quot;rgb(154,191,172)&quot;, &quot;rgb(180,191,154)&quot;, &quot;rgb(191,186,112)&quot;, &quot;rgb(191,133,174)&quot;, &quot;rgb(147,157,238)&quot;, &quot;rgb(231,212,139)&quot;, &quot;rgb(255,154,102)&quot;, &quot;rgb(102,181,224)&quot;, &quot;rgb(221,144,199)&quot;, &quot;rgb(225,235,152)&quot;, &quot;rgb(200,167,96)&quot;, &quot;rgb(124,210,238)&quot;, &quot;rgb(215,169,221)&quot;]
}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.ThemeEngine" >$.jqplot.<wbr>ThemeEngine</a></td><td class=SDescription>Theme Engine provides a programatic way to change some of the  more common jqplot styling options such as fonts, colors and grid options. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.ThemeEngine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.themes" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">themes</a></td><td class=SDescription>hash of themes managed by the theme engine. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.activeTheme" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">activeTheme</a></td><td class=SDescription>Pointer to currently active theme</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.ThemeEngine.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.get" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">get</a></td><td class=SDescription>Get and return the named theme or the active theme if no name given.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.getThemeNames" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">getThemeNames</a></td><td class=SDescription>Return the list of theme names in this manager in alpha-numerical order.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.getThemes" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">getThemes</a></td><td class=SDescription>Return a list of themes in alpha-numerical order by name.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.remove" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">remove</a></td><td class=SDescription>Remove the given theme from the themeEngine.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.newTheme" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">newTheme</a></td><td class=SDescription>Create a new theme based on the default theme, adding it the themeEngine.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.rename" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">rename</a></td><td class=SDescription>Rename a theme.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.copy" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">copy</a></td><td class=SDescription>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.themes"></a>themes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote><p>hash of themes managed by the theme engine.&nbsp; Indexed by theme name.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.activeTheme"></a>activeTheme</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote><p>Pointer to currently active theme</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.methods"></a>methods</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.get"></a>get</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get and return the named theme or the active theme if no name given.</p><h4 class=CHeading>parameter</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of theme to get.</td></tr></table><h4 class=CHeading>returns</h4><p>Theme instance of given name.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.getThemeNames"></a>getThemeNames</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote><p>Return the list of theme names in this manager in alpha-numerical order.</p><h4 class=CHeading>parameter</h4><p>None</p><h4 class=CHeading>returns</h4><p>A the list of theme names in this manager in alpha-numerical order.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.getThemes"></a>getThemes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote><p>Return a list of themes in alpha-numerical order by name.</p><h4 class=CHeading>parameter</h4><p>None</p><h4 class=CHeading>returns</h4><p>A list of themes in alpha-numerical order by name.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.remove"></a>remove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Remove the given theme from the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of the theme to remove.</td></tr></table><h4 class=CHeading>returns</h4><p>true on success, false on failure.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.newTheme"></a>newTheme</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a new theme based on the default theme, adding it the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of the new theme.</td></tr><tr><td class=CDLEntry>obj</td><td class=CDLDescription>optional object of styles to be applied to this new theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.rename"></a>rename</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Rename a theme.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>oldName</td><td class=CDLDescription>current name of the theme.</td></tr><tr><td class=CDLEntry>newName</td><td class=CDLDescription>desired name of the theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.copy"></a>copy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sourceName</td><td class=CDLDescription>name of the existing theme.</td></tr><tr><td class=CDLEntry>targetName</td><td class=CDLDescription>name of the copy.</td></tr><tr><td class=CDLEntry>obj</td><td class=CDLDescription>optional object of style parameter to apply to the new theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>ThemeEngine</div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([2, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/optionsTutorial-txt.html.















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Options Tutorial</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="Options_Tutorial"></a>Options Tutorial</div><div class=CBody><p>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself.&nbsp;  For a listing of options available to jqPlot, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>The key to effectively using jqPlot is understanding jqPlot&rsquo;s options.&nbsp;  The online documentation is API documentation.&nbsp;  While it explains what attributes and methods various objects posses, it doesn&rsquo;t explain how to use or set those attributes through options.&nbsp;  This tutorial will help explain that.</p><p>Lets assume you are creating a plot like this:</p><blockquote><pre>chart = $.jqplot('chart', dataSeries, optionsObj);</pre></blockquote><p>First, note that you shouldn&rsquo;t try to directly set attributes on the &ldquo;chart&rdquo; object (like chart.grid.shadow) after your call to $.jqplot().&nbsp; At best this won&rsquo;t do anything **(see below).&nbsp; You should pass options in via the &ldquo;optionsObj&rdquo;.</p><p>the optionsObj really represents the plot object (jqPlot object, not to be confused with the $.jqplot function which will create a jqPlot object).&nbsp;  Attributes you specify on that object will be merged with attributes in the jqPlot object.&nbsp;  The axes, legend, series, etc. are attributes on the jqPlot object.&nbsp;  The jqPlot/optionsObj object looks something like (only some attributes shown):</p><blockquote><pre>jqPlot-|
       |-seriesColors
       |-textColor
       |-fontFamily
       |-fontSize
       |-stackSeries
       |-series(Array)-|
       |               |-Series1-|
       |               |         |-lineWidth
       |               |         |-shadow
       |               |         |-showLine
       |               |         |-showMarker
       |               |         |-color
       |               |-Series2...
       |               |-...
       |               |-SeriesN
       |
       |-grid(Object)-|
       |              |-drawGridLines
       |              |-background
       |              |-borderColor
       |              |-borderWidth
       |              |-shadow
       |
       |-title(Object)-|
       |               |-text
       |               |-show
       |               |-fontFamily
       |               |-fontSize
       |               |-textAlign
       |               |-textColor
       |
       |-axes(Object)-|
       |              |-xais-|
       |              |      |-min
       |              |      |-max
       |              |      |-numberTicks
       |              |      |-showTicks
       |              |      |-showTickMarks
       |              |      |-pad
       |
       | ... and so on</pre></blockquote><p>The optionsObj should follow the same construction as if it were a jqPlot object (with some exceptions/shortcuts I&rsquo;ll mention in a moment).&nbsp;  So generally, when you see something like &ldquo;this.drawGridLines&rdquo; in the grid properties in the docs, just replace &ldquo;this&rdquo; with &ldquo;grid&rdquo; in your options object.&nbsp;  So it becomes optionsObj.grid.drawGridLines.&nbsp;  Do likewise with the other objects in the plot, replacing &ldquo;this&rdquo;, with the respective attribute on the plot like &ldquo;legend&rdquo; or &ldquo;title&rdquo;.&nbsp;  Series and Axes are handled a little different, because series is an array and axes has 4 distinct children &ldquo;xaxis&rdquo;, &ldquo;yaxis&rdquo;, &ldquo;x2axis&rdquo; and &ldquo;y2axis&rdquo;.</p><p>So, to remove the shadow from the grid and change the grid border size you would do:</p><blockquote><pre>optionObj = {grid:{shadow:false, borderWidth:9.0}};</pre></blockquote><p>To do the same as above but also make all the text in the plot red you would do:</p><blockquote><pre>optionObj = {
   textColor:&quot;#ff0000&quot;,
   grid:{shadow:false, borderWidth:9.0}
}</pre></blockquote><p>Here is a more deeply nested example.&nbsp; Say you want to specify a min and max on your y axis and use a specific color for your second series.&nbsp;  That would look like:</p><blockquote><pre>optionsObj = {
   axes:{yaxis:{min:5, max:230}},
   series:[{},{color:&quot;#33ff66&quot;}]
}</pre></blockquote><p>Note that series options are an array in order of the series data you sent in to your plot.&nbsp;  To get to the second series, you have to put an object (even if empty) in place of the first series.</p><p>There is a handy shortcut to assign options to all axes or all series at one go.&nbsp;  Use axesDefaults and seriesDefaults.&nbsp;  So, if you wanted both x and y axes to start at 0 and you wanted all series to not show markers, you could do:</p><blockquote><pre>optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}</pre></blockquote><p>Another shortcut is for the plot title.&nbsp;  Normally, you would assign options to the title as an object.&nbsp;  If you specify a title option as a string, it will assign that to the title.text property automatically.&nbsp; So these two are equivalent:</p><blockquote><pre>optionsObj = {title:{text:&quot;My Plot&quot;}}</pre></blockquote><p>and</p><blockquote><pre>optionsObj = {title:&quot;My Plot&quot;}</pre></blockquote><p>Where things need more explaination is with renderers, plugins and their options.&nbsp;  Briefly, what&rsquo;s  renderer, what&rsquo;s a plugin.</p><p>A renderer is an object that is used to draw something and gets attached to an existing object in the plot in order to draw it.&nbsp;  A plugin does more than just provide drawing functionality to an object.&nbsp;  It will do more like calculate a trend line, change the cursor, provide event driven functionality, etc.&nbsp;  I consider renderers plugins, but plugins don&rsquo;t have to be renderers.</p><p>So, how do you use renderers, plugins, and specify their options?&nbsp; Some common renderes are for bar charts and category axes.&nbsp;  If you want to render your series as a bar chart with each set of bars showing up in a category on the x axis, you do:</p><blockquote><pre>optionsObj = {
   seriesDefaults:{renderer:$.jqplot.BarRenderer},
   axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
}</pre></blockquote><p>This replaces the default renderer used for all series in the plot with a bar renderer and the x axis default renderer (but not any other axis) with a category renderer.</p><p>Now, how would I assign options to those renderers?&nbsp;  The renderer&rsquo;s attributes may not be present in the pre-existing jqPlot object, they may be specific to the renderer.&nbsp;  This is done through the &ldquo;rendererOptions&rdquo; option on the appropriate object.&nbsp; So, if I wanted my bars to be 25 pixels wide, I would do:</p><blockquote><pre>optionsObj = {
   seriesDefaults:{
       renderer:$.jqplot.BarRenderer},
       rendererOptions:{
           barWidth:25
       },
   axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
}</pre></blockquote><p>Again, this is using the &ldquo;seriesDefaults&rdquo; option, which will apply options to all series in the plot.&nbsp;  You could do the same on any particular series in the plot through the &ldquo;series&rdquo; options array.</p><p>Plugins are free to add their own options.&nbsp;  For example, the highlighter plugin has it&rsquo;s own set of options that are unique to it.&nbsp; As a result, it responds to options placed in the &ldquo;highlighter&rdquo; attribute of your options object.&nbsp;  So, if I wanted to change the highlighter tooltip to fade in and out slowly and be positioned directly above the point I&rsquo;m highlighting:</p><blockquote><pre>optionsObj = {
    highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
}</pre></blockquote><p>Other plugins, like dragable and trendlines, add their options in with the series.&nbsp;  This is because both of those plugins can have different options for different series in the plot.&nbsp;  So, if you wanted to specify the color of the dragable and constrain it to drag only on the x axis as well as specify the color of the trend line you could do:</p><blockquote><pre>series:[{
    dragable: {
        color: '#ff3366',
        constrainTo: 'x'
    },
    trendline: {
        color: '#cccccc'
    }
}]</pre></blockquote><p>This would apply those options to the first series only.&nbsp;  If you had 2 series and wanted to turn off dragging and trend lines on the second series, you could do:</p><blockquote><pre>series:[{
    dragable: {
        color: '#ff3366',
        constrainTo: 'x'
    },
    trendline: {
        color: '#cccccc'
    }
}, {
   isDragable: false,
   trendline:{
       show: false
   }
}]</pre></blockquote><p>Note, series dragability is turned off with the &ldquo;isDragable&rdquo; option directly on the series itself, not with a suboption of &ldquo;dragable&rdquo;.&nbsp;  This may be improved in the future.</p><p>I hope this is helpful.&nbsp; A few key points to remember:</p><ul><li>When you see &ldquo;this&rdquo; in the api docs, you generally replace it with the name of the object (in lowercase) you are looking at in your options object.</li><li>seriesDefaults and axesDefaults are convenient shortcuts.</li><li>to assign options to a renderer, generally use the &ldquo;rendererOptions&rdquo;</li><li>plugins may add their own options attribute, like &ldquo;highlighter&rdquo; or &ldquo;cursor&rdquo;.</li></ul><p>** Note:  you can set attributes after the plot is created (like plot.grid.shadow = false), but you&rsquo;ll have to issue the appropriate calls to possibly reinitialize and redraw the plot.&nbsp;  jqPlot can definitely handle this to change the plot after creation (this is how the dragable plugin updates the plot data and the trend line plugin recomputes itself when data changes).&nbsp;  This hasn&rsquo;t been documented yet, however.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile id=MSelected>Options Tutorial</div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html.



























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.BezierCurveRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BezierCurveRenderer.js"></a>$.jqplot.<wbr>BezierCurveRenderer.js</div><div class=CBody><p>Renderer which draws lines as stacked bezier curves.&nbsp; Data for the line will not be specified as an array of [x, y] data point values, but as a an array of [start piont, bezier curve] So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]].</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js" >$.jqplot.<wbr>BezierCurveRenderer.js</a></td><td class=SDescription>Renderer which draws lines as stacked bezier curves. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.setGridData" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp; Called with scope of a series.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp;  This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>BezierCurveRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-barRenderer-js.html.







































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.BarRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BarRenderer"></a>$.jqplot.<wbr>BarRenderer</div><div class=CBody><p>A plugin renderer for jqPlot to draw a bar plot.&nbsp; Draws series as a line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BarRenderer" >$.jqplot.<wbr>BarRenderer</a></td><td class=SDescription>A plugin renderer for jqPlot to draw a bar plot. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BarRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.barPadding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">barPadding</a></td><td class=SDescription>Number of pixels between adjacent bars at the same axis value.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.barMargin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">barMargin</a></td><td class=SDescription>Number of pixels between groups of bars at adjacent axis values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.barDirection" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">barDirection</a></td><td class=SDescription>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.barWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">barWidth</a></td><td class=SDescription>Width of the bar in pixels (auto by devaul). </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowOffset" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowDepth" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowAlpha" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.waterfall" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">waterfall</a></td><td class=SDescription>true to enable waterfall plot.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.groups" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">groups</a></td><td class=SDescription>group bars into this many groups</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.varyBarColor" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">varyBarColor</a></td><td class=SDescription>true to color each bar of a series separately rather than have every bar of a given series the same color. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightMouseOver" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightMouseDown" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightColors" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a bar.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barPadding"></a>barPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote><p>Number of pixels between adjacent bars at the same axis value.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barMargin"></a>barMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote><p>Number of pixels between groups of bars at adjacent axis values.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barDirection"></a>barDirection</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote><p>&rsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barWidth"></a>barWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote><p>Width of the bar in pixels (auto by devaul).&nbsp;  null = calculated automatically.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.waterfall"></a>waterfall</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote><p>true to enable waterfall plot.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.groups"></a>groups</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote><p>group bars into this many groups</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.varyBarColor"></a>varyBarColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote><p>true to color each bar of a series separately rather than have every bar of a given series the same color.&nbsp; If used for non-stacked multiple series bar plots, user should specify a separate &lsquo;seriesColors&rsquo; array for each series.&nbsp; Otherwise, each series will set their bars to the same color array.&nbsp; This option has no Effect for stacked bar charts and is disabled.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a bar.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile id=MSelected>BarRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-blockRenderer-js.html.











































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.BlockRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BlockRenderer"></a>$.jqplot.<wbr>BlockRenderer</div><div class=CBody><p>Plugin renderer to draw a x-y block chart.&nbsp;  A Block chart has data points displayed as colored squares with a text label inside.&nbsp;  Data must be supplied in the form:</p><blockquote><pre>[[x1, y1, &quot;label 1&quot;, {css}], [x2, y2, &quot;label 2&quot;, {css}], ...]</pre></blockquote><p>The label and css object are optional.&nbsp;  If the label is ommitted, the box will collapse unless a css height and/or width is specified.</p><p>The css object is an object specifying css properties such as:</p><blockquote><pre>{background:'#4f98a5', border:'3px solid gray', padding:'1px'}</pre></blockquote><p>Note that css properties specified with the data point override defaults specified with the series.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BlockRenderer" >$.jqplot.<wbr>BlockRenderer</a></td><td class=SDescription>Plugin renderer to draw a x-y block chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BlockRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.css" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">css</a></td><td class=SDescription>default css styles that will be applied to all data blocks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BlockRenderer.escapeHtml" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">escapeHtml</a></td><td class=SDescription>true to escape html in the box label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.insertBreaks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">insertBreaks</a></td><td class=SDescription>true to turn spaces in data block label into html breaks &lt;br /&gt;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BlockRenderer.varyBlockColors" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">varyBlockColors</a></td><td class=SDescription>true to vary the color of each block in this series according to the seriesColors array. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BlockRenderer.Methods" >Methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.moveBlock" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">moveBlock</a></td><td class=SDescription>Moves an individual block. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.css"></a>css</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote><p>default css styles that will be applied to all data blocks. these values will be overridden by css styles supplied with the individulal data points.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>true to escape html in the box label.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.insertBreaks"></a>insertBreaks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote><p>true to turn spaces in data block label into html breaks &lt;br /&gt;.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.varyBlockColors"></a>varyBlockColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote><p>true to vary the color of each block in this series according to the seriesColors array.&nbsp;  False to set each block to the color specified on this series.&nbsp;  This has no effect if a css background color option is specified in the renderer css options.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.Methods"></a>Methods</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.moveBlock"></a>moveBlock</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Moves an individual block.&nbsp;  More efficient than redrawing the whole series by calling plot.drawSeries().&nbsp; Properties: idx - the 0 based index of the block or point in this series. x - the x coordinate in data units (value on x axis) to move the block to. y - the y coordinate in data units (value on the y axis) to move the block to. duration - optional parameter to create an animated movement.&nbsp;  Can be a number (higher is slower animation) or &lsquo;fast&rsquo;, &lsquo;normal&rsquo; or &lsquo;slow&rsquo;.&nbsp;  If not provided, the element is moved without any animation.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>BlockRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html.















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.BubbleRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BubbleRenderer"></a>$.jqplot.<wbr>BubbleRenderer</div><div class=CBody><p>Plugin renderer to draw a bubble chart.&nbsp;  A Bubble chart has data points displayed as colored circles with an optional text label inside.&nbsp;  To use the bubble renderer, you must include the bubble renderer like:</p><blockquote><pre>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../src/plugins/jqplot.bubbleRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Data must be supplied in the form:</p><blockquote><pre>[[x1, y1, r1, &lt;label or {label:'text', color:color}&gt;], ...]</pre></blockquote><p>where the label or options object is optional.</p><p>Note that all bubble colors will be the same unless the &ldquo;varyBubbleColors&rdquo; option is set to true.&nbsp;  Colors can be specified in the data array or in the seriesColors array option on the series.&nbsp;  If no colors are defined, the default jqPlot series of 16 colors are used.&nbsp;  Colors are automatically cycled around again if there are more bubbles than colors.</p><p>Bubbles are autoscaled by default to fit within the chart area while maintaining relative sizes.&nbsp;  If the &ldquo;autoscaleBubbles&rdquo; option is set to false, the r(adius) values in the data array a treated as literal pixel values for the radii of the bubbles.</p><p>Properties are passed into the bubble renderer in the rendererOptions object of the series options like:</p><blockquote><pre>seriesDefaults: {
    renderer: $.jqplot.BubbleRenderer,
    rendererOptions: {
        bubbleAlpha: 0.7,
        varyBubbleColors: false
    }
}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BubbleRenderer" >$.jqplot.<wbr>BubbleRenderer</a></td><td class=SDescription>Plugin renderer to draw a bubble chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.varyBubbleColors" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">varyBubbleColors</a></td><td class=SDescription>True to vary the color of each bubble in this series according to the seriesColors array. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">autoscaleBubbles</a></td><td class=SDescription>True to scale the bubble radius based on plot size. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">autoscaleMultiplier</a></td><td class=SDescription>Multiplier the bubble size if autoscaleBubbles is true.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">autoscalePointsFactor</a></td><td class=SDescription>Factor which decreases bubble size based on how many bubbles on on the chart. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.escapeHtml" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">escapeHtml</a></td><td class=SDescription>True to escape html in bubble label text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightMouseOver" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">highlightMouseOver</a></td><td class=SDescription>True to highlight bubbles when moused over. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightMouseDown" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a bubble. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightColors" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightColors</a></td><td class=SDescription>An array of colors to use when highlighting a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.bubbleAlpha" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">bubbleAlpha</a></td><td class=SDescription>Alpha transparency to apply to all bubbles in this series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightAlpha" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">highlightAlpha</a></td><td class=SDescription>Alpha transparency to apply when highlighting bubble. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.bubbleGradients" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">bubbleGradients</a></td><td class=SDescription>True to color the bubbles with gradient fills instead of flat colors. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.showLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">showLabels</a></td><td class=SDescription>True to show labels on bubbles (if any), false to not show.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.varyBubbleColors"></a>varyBubbleColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote><p>True to vary the color of each bubble in this series according to the seriesColors array.&nbsp;  False to set each bubble to the color specified on this series.&nbsp;  This has no effect if a css background color option is specified in the renderer css options.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscaleBubbles"></a>autoscaleBubbles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote><p>True to scale the bubble radius based on plot size.&nbsp; False will use the radius value as provided as a raw pixel value for bubble radius.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscaleMultiplier"></a>autoscaleMultiplier</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote><p>Multiplier the bubble size if autoscaleBubbles is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscalePointsFactor"></a>autoscalePointsFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote><p>Factor which decreases bubble size based on how many bubbles on on the chart.&nbsp; 0 means no adjustment for number of bubbles.&nbsp;  Negative values will decrease size of bubbles as more bubbles are added.&nbsp;  Values between 0 and -0.2 should work well.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote><p>True to escape html in bubble label text.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight bubbles when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a bubble.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>An array of colors to use when highlighting a slice.&nbsp;  Calculated automatically if not supplied.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.bubbleAlpha"></a>bubbleAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote><p>Alpha transparency to apply to all bubbles in this series.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightAlpha"></a>highlightAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote><p>Alpha transparency to apply when highlighting bubble.&nbsp; Set to value of bubbleAlpha by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.bubbleGradients"></a>bubbleGradients</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote><p>True to color the bubbles with gradient fills instead of flat colors.&nbsp; NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills. will be ignored in IE.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.showLabels"></a>showLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote><p>True to show labels on bubbles (if any), false to not show.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>BubbleRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html.































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.CanvasAxisLabelRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasAxisLabelRenderer"></a>$.jqplot.<wbr>CanvasAxisLabelRenderer</div><div class=CBody><p>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.&nbsp;  This renderer uses a separate rendering engine to draw the text on the canvas.&nbsp;  Two modes of rendering the text are available.&nbsp; If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.&nbsp; You do so by setting the &ldquo;enableFontSupport&rdquo; option to true.</p><p>Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.&nbsp;  Even if the &ldquo;enableFontSupport&rdquo; option is true non-supporting browsers will still render with the Hershey font.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer" >$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td><td class=SDescription>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.angle" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">angle</a></td><td class=SDescription>angle of text, measured clockwise from x axis.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.show" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.label" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">label</a></td><td class=SDescription>label for the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">fontFamily</a></td><td class=SDescription>CSS spec for the font-family css attribute. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">fontSize</a></td><td class=SDescription>CSS spec for font size.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fontWeight</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fontStretch</a></td><td class=SDescription>Multiplier to condense or expand font width. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">enableFontSupport</a></td><td class=SDescription>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">pt2px</a></td><td class=SDescription>Point to pixel scaling factor, used for computing height of bounding box around a label. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote><p>angle of text, measured clockwise from x axis.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>label for the axis.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote><p>CSS spec for the font-family css attribute.&nbsp; Applies only to browsers supporting native font rendering in the canvas tag.&nbsp;  Currently Mozilla 3.5 and Safari 4.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote><p>CSS spec for font size.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontWeight"></a>fontWeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>CSS spec for fontWeight:  normal, bold, bolder, lighter or a number 100</td><td class=CDLDescription>900</td></tr></table></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontStretch"></a>fontStretch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote><p>Multiplier to condense or expand font width.&nbsp; Applies only to browsers which don&rsquo;t support canvas native font rendering.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.enableFontSupport"></a>enableFontSupport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote><p>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.&nbsp; If true, label will be drawn with canvas tag native support for fonts.&nbsp; If false, label will be drawn with Hershey font metrics.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.pt2px"></a>pt2px</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote><p>Point to pixel scaling factor, used for computing height of bounding box around a label.&nbsp;  The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.&nbsp;  Leave as null to use default.&nbsp;  If tops of letters appear clipped, increase this.&nbsp;  If bounding box seems too big, decrease.&nbsp; This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>CanvasAxisLabelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html.































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.CanvasAxisTickRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasAxisTickRenderer"></a>$.jqplot.<wbr>CanvasAxisTickRenderer</div><div class=CBody><p>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.&nbsp;  This renderer uses a separate rendering engine to draw the text on the canvas.&nbsp;  Two modes of rendering the text are available.&nbsp; If the browser has native font support for canvas fonts (currently Mozila 3.5 and Safari 4), you can enable text rendering with the canvas fillText method.&nbsp; You do so by setting the &ldquo;enableFontSupport&rdquo; option to true.</p><p>Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.&nbsp;  Even if the &ldquo;enableFontSupport&rdquo; option is true non-supporting browsers will still render with the Hershey font.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer" >$.jqplot.<wbr>CanvasAxisTickRenderer</a></td><td class=SDescription>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.mark" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">mark</a></td><td class=SDescription>tick mark on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showMark" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showMark</a></td><td class=SDescription>wether or not to show the mark on the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showGridline</a></td><td class=SDescription>wether or not to draw the gridline on the grid at this tick.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isMinorTick</a></td><td class=SDescription>if this is a minor tick.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.angle" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">angle</a></td><td class=SDescription>angle of text, measured clockwise from x axis.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.markSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">markSize</a></td><td class=SDescription>Length of the tick marks in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.show" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">labelPosition</a></td><td class=SDescription>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.formatter" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.formatString" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.prefix" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">prefix</a></td><td class=SDescription>string appended to the tick label if no formatString is specified.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">fontFamily</a></td><td class=SDescription>css spec for the font-family css attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">fontSize</a></td><td class=SDescription>CSS spec for font size.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">fontWeight</a></td><td class=SDescription>CSS spec for fontWeight</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">fontStretch</a></td><td class=SDescription>Multiplier to condense or expand font width. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.textColor" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">enableFontSupport</a></td><td class=SDescription>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">pt2px</a></td><td class=SDescription>Point to pixel scaling factor, used for computing height of bounding box around a label. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.mark"></a>mark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote><p>tick mark on the axis.&nbsp;  One of &lsquo;inside&rsquo;, &lsquo;outside&rsquo;, &lsquo;cross&rsquo;, &lsquo;&rsquo; or null.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showMark"></a>showMark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote><p>wether or not to show the mark on the axis.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showGridline"></a>showGridline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote><p>wether or not to draw the gridline on the grid at this tick.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.isMinorTick"></a>isMinorTick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote><p>if this is a minor tick.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote><p>angle of text, measured clockwise from x axis.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.markSize"></a>markSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote><p>Length of the tick marks in pixels.&nbsp;  For &lsquo;cross&rsquo; style, length will be stoked above and below axis, so total length will be twice this.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.labelPosition"></a>labelPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote><p>&rsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;.&nbsp; Whether tick label should be positioned so the start, middle, or end of the tick mark.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; The default $.jqplot.DefaultTickFormatter uses sprintf.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.prefix"></a>prefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote><p>string appended to the tick label if no formatString is specified.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote><p>css spec for the font-family css attribute.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote><p>CSS spec for font size.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontWeight"></a>fontWeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote><p>CSS spec for fontWeight</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontStretch"></a>fontStretch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote><p>Multiplier to condense or expand font width.&nbsp; Applies only to browsers which don&rsquo;t support canvas native font rendering.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.enableFontSupport"></a>enableFontSupport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote><p>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.&nbsp; If true, tick label will be drawn with canvas tag native support for fonts.&nbsp; If false, tick label will be drawn with Hershey font metrics.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.pt2px"></a>pt2px</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote><p>Point to pixel scaling factor, used for computing height of bounding box around a label.&nbsp;  The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.&nbsp;  Leave as null to use default.&nbsp;  If tops of letters appear clipped, increase this.&nbsp;  If bounding box seems too big, decrease.&nbsp; This is an issue only with the native font renderering capabilities of Mozilla 3.5 and Safari 4 since they do not provide a method to determine the font height.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>CanvasAxisTickRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>string appended to the tick label if no formatString is specified.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.CategoryAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CategoryAxisRenderer"></a>$.jqplot.<wbr>CategoryAxisRenderer</div><div class=CBody><p>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.categoryAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer" >$.jqplot.<wbr>CategoryAxisRenderer</a></td><td class=SDescription>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">sortMergedLabels</a></td><td class=SDescription>True to sort tick labels when labels are created by merging x axis values from multiple series. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">$.jqplot.AxisTickRenderer</a>. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.sortMergedLabels"></a>sortMergedLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote><p>True to sort tick labels when labels are created by merging x axis values from multiple series.&nbsp;  That is, say you have two series like:</p><blockquote><pre>line1 = [[2006, 4],            [2008, 9], [2009, 16]];
line2 = [[2006, 3], [2007, 7], [2008, 6]];</pre></blockquote><p>If no label array is specified, tick labels will be collected from the x values of the series.&nbsp;  With sortMergedLabels set to true, tick labels will be:</p><blockquote><pre>[2006, 2007, 2008, 2009]</pre></blockquote><p>With sortMergedLabels set to false, tick labels will be:</p><blockquote><pre>[2006, 2008, 2009, 2007]</pre></blockquote><p>Note, this property is specified on the renderOptions for the axes when creating a plot:</p><blockquote><pre>axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}</pre></blockquote></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt2', 'link3')" onMouseOut="HideTip('tt2')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>CategoryAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt2"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-ciParser-js.html.















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.ciParser</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.ciParser"></a>$.jqplot.<wbr>ciParser</div><div class=CBody><p>Data Renderer which converts a custom JSON data object into jqPlot data format.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>data</td><td class=CDLDescription>JSON encoded string or object.</td></tr><tr><td class=CDLEntry>plot</td><td class=CDLDescription>reference to jqPlot Plot object.</td></tr></table><h4 class=CHeading>Returns</h4><p>data array in jqPlot format.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>ciParser</div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-cursor-js.html.























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.Cursor</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Cursor"></a>$.jqplot.<wbr>Cursor</div><div class=CBody><p>Plugin class representing the cursor as displayed on the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Cursor" >$.jqplot.<wbr>Cursor</a></td><td class=SDescription>Plugin class representing the cursor as displayed on the plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Cursor.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.style" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">style</a></td><td class=SDescription>CSS spec for cursor style</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.show" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">show</a></td><td class=SDescription>wether to show the cursor or not.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltip" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showTooltip</a></td><td class=SDescription>show a cursor position tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.followMouse" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">followMouse</a></td><td class=SDescription>Tooltip follows the mouse, it is not at a fixed location. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipLocation" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">tooltipLocation</a></td><td class=SDescription>Where to position tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipOffset" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the grid boudaries or cursor center.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipGridPosition" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">showTooltipGridPosition</a></td><td class=SDescription>show the grid pixel coordinates of the mouse.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipUnitPosition" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showTooltipUnitPosition</a></td><td class=SDescription>show the unit (data) coordinates of the mouse.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipDataPosition" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">showTooltipDataPosition</a></td><td class=SDescription>Used with showVerticalLine to show intersecting data points in the tooltip.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipFormatString" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">tooltipFormatString</a></td><td class=SDescription>sprintf format string for the tooltip. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.useAxesFormatters" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">useAxesFormatters</a></td><td class=SDescription>Use the x and y axes formatters to format the text in the tooltip.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipAxisGroups" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">tooltipAxisGroups</a></td><td class=SDescription>Show position for the specified axes. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.zoom" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">zoom</a></td><td class=SDescription>Enable plot zooming.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.clickReset" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">clickReset</a></td><td class=SDescription>Will reset plot zoom if single click on plot without drag.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.dblClickReset" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dblClickReset</a></td><td class=SDescription>Will reset plot zoom if double click on plot without drag.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showVerticalLine" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">showVerticalLine</a></td><td class=SDescription>draw a vertical line across the plot which follows the cursor. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showHorizontalLine" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">showHorizontalLine</a></td><td class=SDescription>draw a horizontal line across the plot which follows the cursor.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.constrainZoomTo" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">constrainZoomTo</a></td><td class=SDescription>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.intersectionThreshold" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">intersectionThreshold</a></td><td class=SDescription>pixel distance from data point or marker to consider cursor lines intersecting with point. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showCursorLegend" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">showCursorLegend</a></td><td class=SDescription>Replace the plot legend with an enhanced legend displaying intersection information.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.cursorLegendFormatString" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">cursorLegendFormatString</a></td><td class=SDescription>Format string used in the cursor legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.constrainOutsideZoom" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">constrainOutsideZoom</a></td><td class=SDescription>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipOutsideZoom" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">showTooltipOutsideZoom</a></td><td class=SDescription>True will keep updating the tooltip when zooming of the grid.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Cursor.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">$.jqplot.<wbr>Cursor.<wbr>zoomProxy</a></td><td class=SDescription>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.style"></a>style</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote><p>CSS spec for cursor style</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>wether to show the cursor or not.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltip"></a>showTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote><p>show a cursor position tooltip.&nbsp;  Location of the tooltip will be controlled by followMouse and tooltipLocation.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.followMouse"></a>followMouse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote><p>Tooltip follows the mouse, it is not at a fixed location.&nbsp; Tooltip will show on the grid at the location given by tooltipLocation, offset from the grid edge by tooltipOffset.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote><p>Where to position tooltip.&nbsp;  If followMouse is true, this is relative to the cursor, otherwise, it is relative to the grid.&nbsp; One of &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote><p>Pixel offset of tooltip from the grid boudaries or cursor center.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipGridPosition"></a>showTooltipGridPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote><p>show the grid pixel coordinates of the mouse.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipUnitPosition"></a>showTooltipUnitPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote><p>show the unit (data) coordinates of the mouse.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipDataPosition"></a>showTooltipDataPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote><p>Used with showVerticalLine to show intersecting data points in the tooltip.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote><p>sprintf format string for the tooltip.&nbsp; Uses Ash Searle&rsquo;s javascript sprintf implementation found here: <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> See <a href="http://perldoc.perl.org/functions/sprintf.html" class=LURL target=_top>http://perldoc.perl.org/functions/sprintf.html</a> for reference Note, if showTooltipDataPosition is true, the default tooltipFormatString will be set to the cursorLegendFormatString, not the default given here.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.useAxesFormatters"></a>useAxesFormatters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote><p>Use the x and y axes formatters to format the text in the tooltip.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipAxisGroups"></a>tooltipAxisGroups</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote><p>Show position for the specified axes.&nbsp; This is an array like [[&lsquo;xaxis&rsquo;, &lsquo;yaxis&rsquo;], [&lsquo;xaxis&rsquo;, &lsquo;y2axis&rsquo;]] Default is to compute automatically for all visible axes.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.zoom"></a>zoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote><p>Enable plot zooming.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.clickReset"></a>clickReset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote><p>Will reset plot zoom if single click on plot without drag.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.dblClickReset"></a>dblClickReset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote><p>Will reset plot zoom if double click on plot without drag.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showVerticalLine"></a>showVerticalLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote><p>draw a vertical line across the plot which follows the cursor.&nbsp; When the line is near a data point, a special legend and/or tooltip can be updated with the data values.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showHorizontalLine"></a>showHorizontalLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote><p>draw a horizontal line across the plot which follows the cursor.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.constrainZoomTo"></a>constrainZoomTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote><p>&rsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.intersectionThreshold"></a>intersectionThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote><p>pixel distance from data point or marker to consider cursor lines intersecting with point.&nbsp; If data point markers are not shown, this should be &gt;= 1 or will often miss point intersections.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showCursorLegend"></a>showCursorLegend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote><p>Replace the plot legend with an enhanced legend displaying intersection information.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.cursorLegendFormatString"></a>cursorLegendFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote><p>Format string used in the cursor legend.&nbsp;  If showTooltipDataPosition is true, this will also be the default format string used by tooltipFormatString.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.constrainOutsideZoom"></a>constrainOutsideZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote><p>True to limit actual zoom area to edges of grid, even when zooming outside of plot area.&nbsp;  That is, can&rsquo;t zoom out by mousing outside plot.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipOutsideZoom"></a>showTooltipOutsideZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote><p>True will keep updating the tooltip when zooming of the grid.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.methods"></a>methods</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy"></a>$.jqplot.<wbr>Cursor.<wbr>zoomProxy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. controllerPlot will not actually zoom, but acts as an overview plot.&nbsp;  Note, the zoom options must be set to true for zoomProxy to work.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile id=MSelected>Cursor</div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.DateAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DateAxisRenderer"></a>$.jqplot.<wbr>DateAxisRenderer</div><div class=CBody><p>A plugin for a jqPlot to render an axis as a series of date values.&nbsp; This renderer has no options beyond those supplied by the <a href="../jqplot-core-js.html#Axis" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">Axis</a> class.&nbsp; It supplies it&rsquo;s own tick formatter, so the tickOptions.formatter option should not be overridden.</p><p>Thanks to Ken Synder for his enhanced Date instance methods which are included with this code <a href="http://kendsnyder.com/sandbox/date/" class=LURL target=_top>http://kendsnyder.com/sandbox/date/</a>.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.dateAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}</pre></blockquote><p>Dates can be passed into the axis in almost any recognizable value and will be parsed.&nbsp;  They will be rendered on the axis in the format specified by tickOptions.formatString.&nbsp;  e.g. tickOptions.formatString = &lsquo;%Y-%m-%d&rsquo;.</p><p>Accecptable format codes are:</p><blockquote><pre>Code    Result                  Description
            == Years ==
%Y      2008                Four-digit year
%y      08                  Two-digit year
            == Months ==
%m      09                  Two-digit month
%#m     9                   One or two-digit month
%B      September           Full month name
%b      Sep                 Abbreviated month name
            == Days ==
%d      05                  Two-digit day of month
%#d     5                   One or two-digit day of month
%e      5                   One or two-digit day of month
%A      Sunday              Full name of the day of the week
%a      Sun                 Abbreviated name of the day of the week
%w      0                   Number of the day of the week (0 = Sunday, 6 = Saturday)
%o      th                  The ordinal suffix string following the day of the month
            == Hours ==
%H      23                  Hours in 24-hour format (two digits)
%#H     3                   Hours in 24-hour integer format (one or two digits)
%I      11                  Hours in 12-hour format (two digits)
%#I     3                   Hours in 12-hour integer format (one or two digits)
%p      PM                  AM or PM
            == Minutes ==
%M      09                  Minutes (two digits)
%#M     9                   Minutes (one or two digits)
            == Seconds ==
%S      02                  Seconds (two digits)
%#S     2                   Seconds (one or two digits)
%s      1206567625723       Unix timestamp (Seconds past 1970-01-01 00:00:00)
            == Milliseconds ==
%N      008                 Milliseconds (three digits)
%#N     8                   Milliseconds (one to three digits)
            == Timezone ==
%O      360                 difference in minutes between local time and GMT
%Z      Mountain Standard Time  Name of timezone as reported by browser
%G      -06:00              Hours and minutes between GMT
            == Shortcuts ==
%F      2008-03-26          %Y-%m-%d
%T      05:06:30            %H:%M:%S
%X      05:06:30            %H:%M:%S
%x      03/26/08            %m/%d/%y
%D      03/26/08            %m/%d/%y
%#c     Wed Mar 26 15:31:00 2008  %a %b %e %H:%M:%S %Y
%v      3-Sep-2008          %e-%b-%Y
%R      15:31               %H:%M
%r      3:31:00 PM          %I:%M:%S %p
            == Characters ==
%n      \n                  Newline
%t      \t                  Tab
%%      %                   Percent Symbol</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer" >$.jqplot.<wbr>DateAxisRenderer</a></td><td class=SDescription>A plugin for a jqPlot to render an axis as a series of date values. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt1', 'link3')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile id=MSelected>DateAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt2"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-donutRenderer-js.html.





































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.DonutRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DonutRenderer"></a>$.jqplot.<wbr>DonutRenderer</div><div class=CBody><p>Plugin renderer to draw a donut chart. x values, if present, will be used as slice labels. y values give slice size.</p><p>To use this renderer, you need to include the donut renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.donutRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp;  For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
    seriesDefaults: {
        renderer:$.jqplot.DonutRenderer,
        rendererOptions:{
             sliceMargin: 2,
             innerDiameter: 110,
             startAngle: -90
         }
     }
});</pre></blockquote><p>A donut plot will trigger events on the plot target according to user interaction.&nbsp;  All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when user mouseing over a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a slice, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a slice if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.DonutRenderer" >$.jqplot.<wbr>DonutRenderer</a></td><td class=SDescription>Plugin renderer to draw a donut chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DonutRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the donut, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.innerDiameter" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">innerDiameter</a></td><td class=SDescription>Inner diameter of teh donut, auto calculated by default. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.thickness" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">thickness</a></td><td class=SDescription>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.padding" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">padding</a></td><td class=SDescription>padding between the donut and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.sliceMargin" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">sliceMargin</a></td><td class=SDescription>angular spacing between donut slices in degrees.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.ringMargin" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">ringMargin</a></td><td class=SDescription>pixel distance between rings, or multiple series in a donut plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.fill" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fill</a></td><td class=SDescription>true or false, wether to fil the slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowOffset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowAlpha" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowDepth" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightMouseOver" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightMouseDown" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightColors" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabels" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.showDataLabels" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelFormatString" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelThreshold" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">dataLabelPositionFactor</a></td><td class=SDescription>A Multiplier (0-1) of the pie radius which controls position of label on slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelNudge" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">dataLabelNudge</a></td><td class=SDescription>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.startAngle" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">startAngle</a></td><td class=SDescription>Angle to start drawing donut in degrees. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer" >$.jqplot.<wbr>DonutLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to donut plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberRows" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberColumns" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the donut, auto computed by default</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.innerDiameter"></a>innerDiameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote><p>Inner diameter of teh donut, auto calculated by default.&nbsp; If specified will override thickness value.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.thickness"></a>thickness</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote><p>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote><p>padding between the donut and plot edges, legend, etc.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.sliceMargin"></a>sliceMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote><p>angular spacing between donut slices in degrees.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.ringMargin"></a>ringMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote><p>pixel distance between rings, or multiple series in a donut plot. null will compute ringMargin based on sliceMargin.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fil the slices.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp;  If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelPositionFactor"></a>dataLabelPositionFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.5</td></tr></table></blockquote><p>A Multiplier (0-1) of the pie radius which controls position of label on slice.&nbsp; Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelNudge"></a>dataLabelNudge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote><p>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.startAngle"></a>startAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote><p>Angle to start drawing donut in degrees.&nbsp; According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.&nbsp; 90 = on the negaive y axis.&nbsp; 180 or - 180 = on the negative x axis.</p></div></div></div>

<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.DonutLegendRenderer"></a>$.jqplot.<wbr>DonutLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to donut plots.&nbsp;  Set by default when user creates a donut plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberRows" id=link23 onMouseOver="ShowTip(event, 'tt21', 'link23')" onMouseOut="HideTip('tt21')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberColumns" id=link24 onMouseOver="ShowTip(event, 'tt22', 'link24')" onMouseOut="HideTip('tt22')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>DonutRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of teh donut, auto calculated by default. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.5</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-dragable-js.html.



























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.Dragable</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Dragable"></a>$.jqplot.<wbr>Dragable</div><div class=CBody><p>Plugin to make plotted points dragable by the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Dragable" >$.jqplot.<wbr>Dragable</a></td><td class=SDescription>Plugin to make plotted points dragable by the user.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Dragable.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Dragable.color" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">color</a></td><td class=SDescription>CSS color spec for the dragged point (and adjacent line segment or bar).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Dragable.constrainTo" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">constrainTo</a></td><td class=SDescription>Constrain dragging motion to an axis or to none. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote><p>CSS color spec for the dragged point (and adjacent line segment or bar).</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.constrainTo"></a>constrainTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote><p>Constrain dragging motion to an axis or to none.&nbsp; Allowable values are &lsquo;none&rsquo;, &lsquo;x&rsquo;, &lsquo;y&rsquo;</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Dragable</div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html.



































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>/Users/cleonell/Sites/lib/jqplot/build/plugins/jqplot.enhancedLegendRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.enhancedLegendRenderer.js"></a>jqplot.<wbr>enhancedLegendRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.enhancedLegendRenderer.js" >jqplot.<wbr>enhancedLegendRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#numberRows" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#numberColumns" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#seriesToggle" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">seriesToggle</a></td><td class=SDescription>false to not enable series on/off toggling on the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#disableIEFading" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">disableIEFading</a></td><td class=SDescription>true to toggle series with a show/hide method only and not allow fading in/out. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="seriesToggle"></a>seriesToggle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote><p>false to not enable series on/off toggling on the legend. true or a fadein/fadeout speed (number of milliseconds or &lsquo;fast&rsquo;, &lsquo;normal&rsquo;, &lsquo;slow&rsquo;) to enable show/hide of series on click of legend item.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="disableIEFading"></a>disableIEFading</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote><p>true to toggle series with a show/hide method only and not allow fading in/out.&nbsp; This is to overcome poor performance of fade in some versions of IE.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile id=MSelected>EnhancedLegendRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-funnelRenderer-js.html.















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.FunnelRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.FunnelRenderer"></a>$.jqplot.<wbr>FunnelRenderer</div><div class=CBody><p>Plugin renderer to draw a funnel chart. x values, if present, will be used as labels. y values give area size.</p><p>Funnel charts will draw a single series only.</p><p>To use this renderer, you need to include the funnel renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.funnelRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp;  For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
    seriesDefaults: {
        renderer:$.jqplot.FunnelRenderer,
        rendererOptions:{
             sectionMargin: 12,
             widthRatio: 0.3
         }
     }
});</pre></blockquote><p>IMPORTANT</p><p><b>The funnel renderer will reorder data in descending order</b> so the largest value in the data set is first and displayed on top of the funnel.&nbsp;  Data will then be displayed in descending order down the funnel.&nbsp;  The area of each funnel section will correspond to the value of each data point relative to the sum of all values.&nbsp;  That is section area is proportional to section value divided by sum of all section values.</p><p>If your data is not in descending order when passed into the plot, <b>it will be reordered</b> when stored in the series.data property.&nbsp;  A copy of the unordered data is kept in the series._unorderedData property.</p><p>A funnel plot will trigger events on the plot target according to user interaction.&nbsp;  All events return the event object, the series index, the point (section) index, and the point data for the appropriate section.&nbsp; <b>Note</b> the point index will referr to the ordered data, not the original unordered data.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when mousing over a section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a section, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a section if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.FunnelRenderer" >$.jqplot.<wbr>FunnelRenderer</a></td><td class=SDescription>Plugin renderer to draw a funnel chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.padding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">padding</a></td><td class=SDescription>padding between the funnel and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.sectionMargin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">sectionMargin</a></td><td class=SDescription>spacing between funnel sections in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.fill" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">fill</a></td><td class=SDescription>true or false, wether to fill the areas.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowOffset" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowAlpha" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowDepth" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightMouseOver" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseOver</a></td><td class=SDescription>True to highlight area when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightMouseDown" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a area. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightColors" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">highlightColors</a></td><td class=SDescription>array of colors to use when highlighting an area.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.widthRatio" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">widthRatio</a></td><td class=SDescription>The ratio of the width of the top of the funnel to the bottom. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.lineWidth" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">lineWidth</a></td><td class=SDescription>width of line if areas are stroked and not filled.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.showDataLabels" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer" >$.jqplot.<wbr>FunnelLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to funnel plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberRows" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberColumns" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote><p>padding between the funnel and plot edges, legend, etc.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.sectionMargin"></a>sectionMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote><p>spacing between funnel sections in pixels.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fill the areas.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight area when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a area.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a area.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>array of colors to use when highlighting an area.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.widthRatio"></a>widthRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote><p>The ratio of the width of the top of the funnel to the bottom. a ratio of 0 will make an upside down pyramid.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote><p>width of line if areas are stroked and not filled.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp;  If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>

<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.FunnelLegendRenderer"></a>$.jqplot.<wbr>FunnelLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to funnel plots.&nbsp;  Set by default when the user creates a funnel plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberRows" id=link18 onMouseOver="ShowTip(event, 'tt16', 'link18')" onMouseOut="HideTip('tt16')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberColumns" id=link19 onMouseOver="ShowTip(event, 'tt17', 'link19')" onMouseOut="HideTip('tt17')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>FunnelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-highlighter-js.html.

































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.Highlighter</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Highlighter"></a>$.jqplot.<wbr>Highlighter</div><div class=CBody><p>Plugin which will highlight data points when they are moused over.</p><p>To use this plugin, include the js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.highlighter.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>A tooltip providing information about the data point is enabled by default.&nbsp; To disable the tooltip, set &ldquo;showTooltip&rdquo; to false.</p><p>You can control what data is displayed in the tooltip with various options.&nbsp;  The &ldquo;tooltipAxes&rdquo; option controls wether the x, y or both data values are displayed.</p><p>Some chart types (e.g. hi-low-close) have more than one y value per data point.&nbsp; To display the additional values in the tooltip, set the &ldquo;yvalues&rdquo; option to the desired number of y values present (3 for a hlc chart).</p><p>By default, data values will be formatted with the same formatting specifiers as used to format the axis ticks.&nbsp;  A custom format code can be supplied with the tooltipFormatString option.&nbsp;  This will apply to all values in the tooltip.</p><p>For more complete control, the &ldquo;formatString&rdquo; option can be set.&nbsp;  This Allows conplete control over tooltip formatting.&nbsp;  Values are passed to the format string in an order determined by the &ldquo;tooltipAxes&rdquo; and &ldquo;yvalues&rdquo; options.&nbsp;  So, if you have a hi-low-close chart and you just want to display the hi-low-close values in the tooltip, you could set a formatString like:</p><blockquote><pre>highlighter: {
    tooltipAxes: 'y',
    yvalues: 3,
    formatString:'&lt;table class=&quot;jqplot-highlighter&quot;&gt;
        &lt;tr&gt;&lt;td&gt;hi:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;low:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;close:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;'
}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Highlighter" >$.jqplot.<wbr>Highlighter</a></td><td class=SDescription>Plugin which will highlight data points when they are moused over.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Highlighter.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>true to show the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.markerRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">markerRenderer</a></td><td class=SDescription>Renderer used to draw the marker of the highlighted point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.showMarker" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showMarker</a></td><td class=SDescription>true to show the marker</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.lineWidthAdjust" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">lineWidthAdjust</a></td><td class=SDescription>Pixels to add to the lineWidth of the highlight.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.sizeAdjust" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">sizeAdjust</a></td><td class=SDescription>Pixels to add to the overall size of the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.showTooltip" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">showTooltip</a></td><td class=SDescription>Show a tooltip with data point values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipLocation" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">tooltipLocation</a></td><td class=SDescription>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.fadeTooltip" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fadeTooltip</a></td><td class=SDescription>true = fade in/out tooltip, flase = show/hide tooltip</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipFadeSpeed" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">tooltipFadeSpeed</a></td><td class=SDescription>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipOffset" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the highlight.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipAxes" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">tooltipAxes</a></td><td class=SDescription>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.useAxesFormatters" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">useAxesFormatters</a></td><td class=SDescription>Use the x and y axes formatters to format the text in the tooltip.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipFormatString" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">tooltipFormatString</a></td><td class=SDescription>sprintf format string for the tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.formatString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">formatString</a></td><td class=SDescription>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.yvalues" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">yvalues</a></td><td class=SDescription>Number of y values to expect in the data point array. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.bringSeriesToFront" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">bringSeriesToFront</a></td><td class=SDescription>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>true to show the highlight.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Renderer used to draw the marker of the highlighted point.&nbsp; Renderer will assimilate attributes from the data point being highlighted, so no attributes need set on the renderer directly.&nbsp; Default is to turn off shadow drawing on the highlighted point.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.showMarker"></a>showMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote><p>true to show the marker</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.lineWidthAdjust"></a>lineWidthAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote><p>Pixels to add to the lineWidth of the highlight.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.sizeAdjust"></a>sizeAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote><p>Pixels to add to the overall size of the highlight.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.showTooltip"></a>showTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote><p>Show a tooltip with data point values.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote><p>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.fadeTooltip"></a>fadeTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote><p>true = fade in/out tooltip, flase = show/hide tooltip</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipFadeSpeed"></a>tooltipFadeSpeed</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote><p>&rsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote><p>Pixel offset of tooltip from the highlight.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipAxes"></a>tooltipAxes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote><p>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.useAxesFormatters"></a>useAxesFormatters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote><p>Use the x and y axes formatters to format the text in the tooltip.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote><p>sprintf format string for the tooltip.&nbsp; Uses Ash Searle&rsquo;s javascript sprintf implementation found here: <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> See <a href="http://perldoc.perl.org/functions/sprintf.html" class=LURL target=_top>http://perldoc.perl.org/functions/sprintf.html</a> for reference.&nbsp; Additional &ldquo;p&rdquo; and &ldquo;P&rdquo; format specifiers added by Chris Leonello.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote><p>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.&nbsp;  So, you could have a tooltip like: &lsquo;Date: %s, number of cats: %d&rsquo; to format the whole tooltip at one go.&nbsp; If useAxesFormatters is true, values will be formatted according to Axes formatters and you can populate your tooltip string with %s placeholders.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.yvalues"></a>yvalues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote><p>Number of y values to expect in the data point array.&nbsp; Typically this is 1.&nbsp;  Certain plots, like OHLC, will have more y values in each data point array.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.bringSeriesToFront"></a>bringSeriesToFront</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote><p>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Highlighter</div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html.



























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.LogAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LogAxisRenderer"></a>$.jqplot.<wbr>LogAxisRenderer</div><div class=CBody><p>A plugin for a jqPlot to render a logarithmic axis.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.logAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer" >$.jqplot.<wbr>LogAxisRenderer</a></td><td class=SDescription>A plugin for a jqPlot to render a logarithmic axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.axisDefaults" >axisDefaults</a></td><td class=SDescription>Default properties which will be applied directly to the series.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.Properties" >Properties</a></td><td class=SDescription>Properties</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.axisDefaults"></a>axisDefaults</h3><div class=CBody><p>Default properties which will be applied directly to the series.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.Properties"></a>Properties</h3><div class=CBody><p>Properties</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>/ base</td><td class=CDLDescription>the logarithmic base, commonly 2, 10 or Math.E</td></tr><tr><td class=CDLEntry>tickDistribution</td><td class=CDLDescription>&rsquo;even&rsquo; or &lsquo;power&rsquo;.&nbsp;  &lsquo;even&rsquo; gives equal pixel spacing of the ticks on the plot.&nbsp;  &lsquo;power&rsquo; gives ticks in powers of 10.</td></tr></table></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile id=MSelected>LogAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html.



































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.MekkoAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MekkoAxisRenderer"></a>$.jqplot.<wbr>MekkoAxisRenderer</div><div class=CBody><p>An axis renderer for a Mekko chart.&nbsp; Should be used with a Mekko chart where the mekkoRenderer is used on the series.&nbsp; Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick for each series scaled to the sum of all the y values.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer" >$.jqplot.<wbr>MekkoAxisRenderer</a></td><td class=SDescription>An axis renderer for a Mekko chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.tickMode" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">tickMode</a></td><td class=SDescription>How to space the ticks on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">barLabelRenderer</a></td><td class=SDescription>renderer to use to draw labels under each bar.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabels" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">barLabels</a></td><td class=SDescription>array of labels to put under each bar.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">barLabelOptions</a></td><td class=SDescription>options object to pass to the bar label renderer.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.tickMode"></a>tickMode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote><p>How to space the ticks on the axis.&nbsp; &lsquo;bar&rsquo; will place a tick at the width of each bar.&nbsp; This is the default for the x axis.&nbsp; &lsquo;even&rsquo; will place ticks at even intervals.&nbsp;  This is the default for x2 axis and y axis.&nbsp;  y axis cannot be changed.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabelRenderer"></a>barLabelRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote><p>renderer to use to draw labels under each bar.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabels"></a>barLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote><p>array of labels to put under each bar.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabelOptions"></a>barLabelOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote><p>options object to pass to the bar label renderer.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>MekkoAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html.





























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.MekkoRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MekkoRenderer"></a>$.jqplot.<wbr>MekkoRenderer</div><div class=CBody><p>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. the <a href="jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">$.jqplot.MekkoAxisRenderer</a> should be used with mekko charts.&nbsp;  The mekko renderer overrides the default legend renderer with it&rsquo;s own $.jqplot.MekkoLegendRenderer which allows more flexibility to specify number of rows and columns in the legend.</p><p>Data is specified per bar in the chart.&nbsp;  You can specify data as an array of y values, or as an array of [label, value] pairs.&nbsp;  Note that labels are used only on the first series.&nbsp; Labels on subsequent series are ignored:</p><blockquote><pre>bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
bar2 = [15,6,9,13,6];
bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];</pre></blockquote><p>If you want to place labels for each bar under the axis, you use the barLabels option on the axes.&nbsp;  The bar labels can be styled with the &ldquo;.jqplot-mekko-barLabel&rdquo; css class.</p><blockquote><pre>barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
axes:{xaxis:{barLabels:barLabels}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MekkoRenderer" >$.jqplot.<wbr>MekkoRenderer</a></td><td class=SDescription>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.borderColor" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">borderColor</a></td><td class=SDescription>color of the borders between areas on the chart</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.showBorders" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showBorders</a></td><td class=SDescription>True to draw borders lines between areas on the chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.setGridData" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.makeGridData" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer" >$.jqplot.<wbr>MekkoLegendRenderer</a></td><td class=SDescription>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberRows" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberColumns" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote><p>color of the borders between areas on the chart</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.showBorders"></a>showBorders</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote><p>True to draw borders lines between areas on the chart.&nbsp; False will draw borders lines with the same color as the area.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp;  Will convert user data into appropriate rectangles.&nbsp; Called with scope of a series.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp;  This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>

<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.MekkoLegendRenderer"></a>$.jqplot.<wbr>MekkoLegendRenderer</h2><div class=CBody><p>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberRows" id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberColumns" id=link9 onMouseOver="ShowTip(event, 'tt6', 'link9')" onMouseOut="HideTip('tt6')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>MekkoRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt7"><div class=CClass>An axis renderer for a Mekko chart. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html.















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.MeterGaugeRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MeterGaugeRenderer"></a>$.jqplot.<wbr>MeterGaugeRenderer</div><div class=CBody><p>Plugin renderer to draw a meter gauge chart.</p><p>Data consists of a single series with 1 data point to position the gauge needle.</p><p>To use this renderer, you need to include the meter gauge renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.meterGaugeRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp;  For example:</p><blockquote><pre>plot0 = $.jqplot('chart0',[[18]],{
    title: 'Network Speed',
    seriesDefaults: {
        renderer: $.jqplot.MeterGaugeRenderer,
        rendererOptions: {
            label: 'MB/s'
        }
    }
});</pre></blockquote><p>A meterGauge plot does not support events.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer" >$.jqplot.<wbr>MeterGaugeRenderer</a></td><td class=SDescription>Plugin renderer to draw a meter gauge chart.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the meterGauge, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.padding" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">padding</a></td><td class=SDescription>padding between the meterGauge and plot edges, auto calculated by default.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.background" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">background</a></td><td class=SDescription>background color of the inside of the gauge.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ringColor" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">ringColor</a></td><td class=SDescription>color of the outer ring, hub, and needle of the gauge.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickColor" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">tickColor</a></td><td class=SDescription>color of the tick marks around the gauge.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ringWidth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">ringWidth</a></td><td class=SDescription>width of the ring around the gauge. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.min" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">min</a></td><td class=SDescription>Minimum value on the gauge. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.max" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">max</a></td><td class=SDescription>Maximum value on the gauge. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ticks" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">ticks</a></td><td class=SDescription>Array of tick values. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.showTicks" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">showTicks</a></td><td class=SDescription>true to show ticks around gauge.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">showTickLabels</a></td><td class=SDescription>true to show tick labels next to ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.label" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">label</a></td><td class=SDescription>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">labelHeightAdjust</a></td><td class=SDescription>Number of Pixels to offset the label up (-) or down (+) from its default position.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.labelPosition" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">labelPosition</a></td><td class=SDescription>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervals" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">intervals</a></td><td class=SDescription>Array of ranges to be drawn around the gauge. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalColors" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">intervalColors</a></td><td class=SDescription>Array of colors to use for the intervals.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">intervalInnerRadius</a></td><td class=SDescription>Radius of the inner circle of the interval ring.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">intervalOuterRadius</a></td><td class=SDescription>Radius of the outer circle of the interval ring.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">tickSpacing</a></td><td class=SDescription>Degrees between ticks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.hubRadius" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">hubRadius</a></td><td class=SDescription>Radius of the hub at the bottom center of gauge which the needle attaches to. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickPadding" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">tickPadding</a></td><td class=SDescription>padding of the tick marks to the outer ring and the tick labels to marks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.needleThickness" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')">needleThickness</a></td><td class=SDescription>Maximum thickness the needle. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.needlePad" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')">needlePad</a></td><td class=SDescription>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')">pegNeedle</a></td><td class=SDescription>True will stop needle just below/above the  min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the meterGauge, auto computed by default</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote><p>padding between the meterGauge and plot edges, auto calculated by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote><p>background color of the inside of the gauge.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ringColor"></a>ringColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote><p>color of the outer ring, hub, and needle of the gauge.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickColor"></a>tickColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote><p>color of the tick marks around the gauge.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ringWidth"></a>ringWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote><p>width of the ring around the gauge.&nbsp;  Auto computed by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.min"></a>min</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote><p>Minimum value on the gauge.&nbsp;  Auto computed by default</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.max"></a>max</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote><p>Maximum value on the gauge.&nbsp; Auto computed by default</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ticks"></a>ticks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote><p>Array of tick values.&nbsp; Auto computed by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.showTicks"></a>showTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote><p>true to show ticks around gauge.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.showTickLabels"></a>showTickLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote><p>true to show tick labels next to ticks.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote><p>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.labelHeightAdjust"></a>labelHeightAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote><p>Number of Pixels to offset the label up (-) or down (+) from its default position.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.labelPosition"></a>labelPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote><p>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervals"></a>intervals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote><p>Array of ranges to be drawn around the gauge.&nbsp; Array of form:</p><blockquote><pre>[value1, value2, ...]</pre></blockquote><p>indicating the values for the first, second, ... intervals.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalColors"></a>intervalColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote><p>Array of colors to use for the intervals.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalInnerRadius"></a>intervalInnerRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote><p>Radius of the inner circle of the interval ring.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalOuterRadius"></a>intervalOuterRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote><p>Radius of the outer circle of the interval ring.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickSpacing"></a>tickSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote><p>Degrees between ticks.&nbsp;  This is a target number, if incompatible span and ticks are supplied, a suitable spacing close to this value will be computed.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.hubRadius"></a>hubRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote><p>Radius of the hub at the bottom center of gauge which the needle attaches to.&nbsp; Auto computed by default</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickPadding"></a>tickPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote><p>padding of the tick marks to the outer ring and the tick labels to marks.&nbsp; Auto computed by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.needleThickness"></a>needleThickness</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote><p>Maximum thickness the needle.&nbsp;  Auto computed by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.needlePad"></a>needlePad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote><p>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.pegNeedle"></a>pegNeedle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote><p>True will stop needle just below/above the  min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>MeterGaugeRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the  min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html.



































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.OHLCRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.OHLCRenderer"></a>$.jqplot.<wbr>OHLCRenderer</div><div class=CBody><p>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</p><p>To use this plugin, include the renderer js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.ohlcRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>You will most likely want to use a date axis renderer for the x axis also, so include the date axis render js file also:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.dateAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><h4 class=CHeading>Then you set the renderer in the series options on your plot</h4><blockquote><pre>series: [{renderer:$.jqplot.OHLCRenderer}]</pre></blockquote><p>For OHLC and candlestick charts, data should be specified like so:</p><blockquote><pre>dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]</pre></blockquote><p>If the data array has only 4 values per point instead of 5, the renderer will create a Hi Low Close chart instead.&nbsp;  In that case, data should be supplied like:</p><blockquote><pre>dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]</pre></blockquote><p>To generate a candlestick chart instead of an OHLC chart, set the &ldquo;candlestick&rdquo; option to true:</p><blockquote><pre>series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.OHLCRenderer" >$.jqplot.<wbr>OHLCRenderer</a></td><td class=SDescription>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.candleStick" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">candleStick</a></td><td class=SDescription>true to render chart as candleStick. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.tickLength" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tickLength</a></td><td class=SDescription>length of the line in pixels indicating open and close price. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.bodyWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">bodyWidth</a></td><td class=SDescription>width of the candlestick body in pixels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.openColor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">openColor</a></td><td class=SDescription>color of the open price tick mark. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.closeColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">closeColor</a></td><td class=SDescription>color of the close price tick mark. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.wickColor" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">wickColor</a></td><td class=SDescription>color of the hi-lo line thorugh the candlestick body. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.fillUpBody" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fillUpBody</a></td><td class=SDescription>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.fillDownBody" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fillDownBody</a></td><td class=SDescription>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.upBodyColor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">upBodyColor</a></td><td class=SDescription>Color of candlestick body of an &ldquo;up&rdquo; day. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.downBodyColor" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">downBodyColor</a></td><td class=SDescription>Color of candlestick body on a &ldquo;down&rdquo; day. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.hlc" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">hlc</a></td><td class=SDescription>true if is a hi-low-close chart (no open price). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.lineWidth" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">lineWidth</a></td><td class=SDescription>Width of the hi-low line and open/close ticks.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.candleStick"></a>candleStick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote><p>true to render chart as candleStick.&nbsp; Must have an open price, cannot be a hlc chart.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.tickLength"></a>tickLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote><p>length of the line in pixels indicating open and close price.&nbsp; Default will auto calculate based on plot width and number of points displayed.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.bodyWidth"></a>bodyWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote><p>width of the candlestick body in pixels.&nbsp;  Default will auto calculate based on plot width and number of candlesticks displayed.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.openColor"></a>openColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote><p>color of the open price tick mark.&nbsp;  Default is series color.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.closeColor"></a>closeColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote><p>color of the close price tick mark.&nbsp;  Default is series color.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.wickColor"></a>wickColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote><p>color of the hi-lo line thorugh the candlestick body.&nbsp; Default is the series color.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.fillUpBody"></a>fillUpBody</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote><p>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.fillDownBody"></a>fillDownBody</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote><p>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.upBodyColor"></a>upBodyColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote><p>Color of candlestick body of an &ldquo;up&rdquo; day.&nbsp;  Default is series color.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.downBodyColor"></a>downBodyColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote><p>Color of candlestick body on a &ldquo;down&rdquo; day.&nbsp;  Default is series color.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.hlc"></a>hlc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote><p>true if is a hi-low-close chart (no open price).&nbsp; This is determined automatically from the series data.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>Width of the hi-low line and open/close ticks.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>OHLCRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-pieRenderer-js.html.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.PieRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.PieRenderer"></a>$.jqplot.<wbr>PieRenderer</div><div class=CBody><p>Plugin renderer to draw a pie chart. x values, if present, will be used as slice labels. y values give slice size.</p><p>To use this renderer, you need to include the pie renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.pieRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp;  For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
    seriesDefaults: {
        renderer:$.jqplot.PieRenderer,
        rendererOptions:{
             sliceMargin: 2,
             startAngle: -90
         }
     }
});</pre></blockquote><p>A pie plot will trigger events on the plot target according to user interaction.&nbsp;  All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when user mouseing over a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a slice, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a slice if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.PieRenderer" >$.jqplot.<wbr>PieRenderer</a></td><td class=SDescription>Plugin renderer to draw a pie chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PieRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the pie, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.padding" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">padding</a></td><td class=SDescription>padding between the pie and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.sliceMargin" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">sliceMargin</a></td><td class=SDescription>angular spacing between pie slices in degrees.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.fill" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">fill</a></td><td class=SDescription>true or false, wether to fil the slices.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowOffset" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowAlpha" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowDepth" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightMouseOver" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightMouseDown" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightColors" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabels" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.showDataLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelFormatString" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelThreshold" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dataLabelPositionFactor</a></td><td class=SDescription>A Multiplier (0-1) of the pie radius which controls position of label on slice. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelNudge" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dataLabelNudge</a></td><td class=SDescription>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelCenterOn" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">dataLabelCenterOn</a></td><td class=SDescription>True to center the data label at its position. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.startAngle" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">startAngle</a></td><td class=SDescription>Angle to start drawing pie in degrees. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer" >$.jqplot.<wbr>PieLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to pie plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberRows" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberColumns" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the pie, auto computed by default</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote><p>padding between the pie and plot edges, legend, etc.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.sliceMargin"></a>sliceMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote><p>angular spacing between pie slices in degrees.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fil the slices.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp;  If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelPositionFactor"></a>dataLabelPositionFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote><p>A Multiplier (0-1) of the pie radius which controls position of label on slice.&nbsp; Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelNudge"></a>dataLabelNudge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote><p>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelCenterOn"></a>dataLabelCenterOn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote><p>True to center the data label at its position.&nbsp; False to set the inside facing edge of the label at its position.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.startAngle"></a>startAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote><p>Angle to start drawing pie in degrees.&nbsp; According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.&nbsp; 90 = on the negaive y axis.&nbsp; 180 or - 180 = on the negative x axis.</p></div></div></div>

<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.PieLegendRenderer"></a>$.jqplot.<wbr>PieLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to pie plots.&nbsp;  Set by default when user creates a pie plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberRows" id=link21 onMouseOver="ShowTip(event, 'tt19', 'link21')" onMouseOut="HideTip('tt19')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberColumns" id=link22 onMouseOver="ShowTip(event, 'tt20', 'link22')" onMouseOut="HideTip('tt20')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp;  0 or null for unlimited.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>PieRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-pointLabels-js.html.

















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.PointLabels</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.PointLabels"></a>$.jqplot.<wbr>PointLabels</div><div class=CBody><p>Plugin for putting labels at the data points.</p><p>To use this plugin, include the js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.pointLabels.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>By default, the last value in the data ponit array in the data series is used for the label.&nbsp;  For most series renderers, extra data can be added to the data point arrays and the last value will be used as the label.</p><p>For instance, this series:</p><blockquote><pre>[[1,4], [3,5], [7,2]]</pre></blockquote><p>Would, by default, use the y values in the labels.&nbsp; Extra data can be added to the series like so:</p><blockquote><pre>[[1,4,'mid'], [3 5,'hi'], [7,2,'low']]</pre></blockquote><p>And now the point labels would be &lsquo;mid&rsquo;, &lsquo;low&rsquo;, and &lsquo;hi&rsquo;.</p><p>Options to the point labels and a custom labels array can be passed into the &ldquo;pointLabels&rdquo; option on the series option like so:</p><blockquote><pre>series:[{pointLabels:{
   labels:['mid', 'hi', 'low'],
   location:'se',
   ypadding: 12
   }
}]</pre></blockquote><p>A custom labels array in the options takes precendence over any labels in the series data.&nbsp;  If you have a custom labels array in the options, but still want to use values from the series array as labels, set the &ldquo;labelsFromSeries&rdquo; option to true.</p><p>By default, html entities (&lt;, &gt;, etc.) are escaped in point labels.&nbsp; If you want to include actual html markup in the labels, set the &ldquo;escapeHTML&rdquo; option to false.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.PointLabels" >$.jqplot.<wbr>PointLabels</a></td><td class=SDescription>Plugin for putting labels at the data points.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PointLabels.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>show the labels or not.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.location" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">location</a></td><td class=SDescription>compass location where to position the label around the point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.labelsFromSeries" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">labelsFromSeries</a></td><td class=SDescription>true to use labels within data point arrays.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.seriesLabelIndex" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">seriesLabelIndex</a></td><td class=SDescription>array index for location of labels within data point arrays. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.labels" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">labels</a></td><td class=SDescription>array of arrays of labels, one array for each series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.stackedValue" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">stackedValue</a></td><td class=SDescription>true to display value as stacked in a stacked plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.ypadding" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">ypadding</a></td><td class=SDescription>vertical padding in pixels between point and label</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.xpadding" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">xpadding</a></td><td class=SDescription>horizontal padding in pixels between point and label</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.escapeHTML" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">escapeHTML</a></td><td class=SDescription>true to escape html entities in the labels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.edgeTolerance" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">edgeTolerance</a></td><td class=SDescription>Number of pixels that the label must be away from an axis boundary in order to be drawn. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.formatter" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.formatString" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.hideZeros" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">hideZeros</a></td><td class=SDescription>true to not show a label for a value which is 0.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>show the labels or not.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.location"></a>location</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote><p>compass location where to position the label around the point.&nbsp; &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.labelsFromSeries"></a>labelsFromSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote><p>true to use labels within data point arrays.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.seriesLabelIndex"></a>seriesLabelIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote><p>array index for location of labels within data point arrays. if null, will use the last element of the data point array.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.labels"></a>labels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote><p>array of arrays of labels, one array for each series.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.stackedValue"></a>stackedValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote><p>true to display value as stacked in a stacked plot. no effect if labels is specified.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.ypadding"></a>ypadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote><p>vertical padding in pixels between point and label</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.xpadding"></a>xpadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote><p>horizontal padding in pixels between point and label</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote><p>true to escape html entities in the labels.&nbsp; If you want to include markup in the labels, set to false.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.edgeTolerance"></a>edgeTolerance</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote><p>Number of pixels that the label must be away from an axis boundary in order to be drawn.&nbsp;  Negative values will allow overlap with the grid boundaries.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp;  sprintf by default.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.hideZeros"></a>hideZeros</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote><p>true to not show a label for a value which is 0.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>PointLabels</div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/plugins/jqplot-trendline-js.html.







































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>$.jqplot.Trendline</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Trendline"></a>$.jqplot.<wbr>Trendline</div><div class=CBody><p>Plugin which will automatically compute and draw trendlines for plotted data.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Trendline" >$.jqplot.<wbr>Trendline</a></td><td class=SDescription>Plugin which will automatically compute and draw trendlines for plotted data.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Trendline.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>Wether or not to show the trend line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.color" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">color</a></td><td class=SDescription>CSS color spec for the trend line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.renderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">renderer</a></td><td class=SDescription>Renderer to use to draw the trend line. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.rendererOptions" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">rendererOptions</a></td><td class=SDescription>Options to pass to the line renderer. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.label" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">label</a></td><td class=SDescription>Label for the trend line to use in the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.type" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">type</a></td><td class=SDescription>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadow" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadow</a></td><td class=SDescription>true or false, wether or not to show the shadow.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.markerRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">markerRenderer</a></td><td class=SDescription>Renderer to use to draw markers on the line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.lineWidth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">lineWidth</a></td><td class=SDescription>Width of the trend line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.shadowAngle" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowAngle</a></td><td class=SDescription>Angle of the shadow on the trend line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadowOffset" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">shadowOffset</a></td><td class=SDescription>pixel offset for each stroke of the shadow.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.shadowAlpha" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">shadowAlpha</a></td><td class=SDescription>Alpha transparency of the shadow.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadowDepth" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">shadowDepth</a></td><td class=SDescription>number of strokes to make of the shadow.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.Properties"></a>Properties</h3></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>Wether or not to show the trend line.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote><p>CSS color spec for the trend line.&nbsp; By default this wil be the same color as the primary line.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote><p>Renderer to use to draw the trend line.&nbsp; The data series that is plotted may not be rendered as a line.&nbsp; Therefore, we use our own line renderer here to draw a trend line.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote><p>Options to pass to the line renderer.&nbsp; By default, markers are not shown on trend lines.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>Label for the trend line to use in the legend.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.type"></a>type</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote><p>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>true or false, wether or not to show the shadow.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote><p>Renderer to use to draw markers on the line.&nbsp; I think this is wrong.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>Width of the trend line.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Angle of the shadow on the trend line.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote><p>pixel offset for each stroke of the shadow.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>Alpha transparency of the shadow.</p></div></div></div>

<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>number of strokes to make of the shadow.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile id=MSelected>Trendline</div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([3, 4], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/files/usage-txt.html.





















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>jqPlot Usage</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Usage"></a>jqPlot Usage</div><div class=CBody><h4 class=CHeading>Usage Documentation</h4><h4 class=CHeading>Introduction</h4><p>jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages.</p><p>The jqPlot home page is at <a href="http://www.jqplot.com/" class=LURL target=_top>http://www.jqplot.com/</a>.</p><p>The project page and downloads are at <a href="http://www.bitbucket.org/cleonello/jqplot/" class=LURL target=_top>http://www.bitbucket.org/cleonello/jqplot/</a>.</p><p>Below are a few examples to demonstrate jqPlot usage.&nbsp;  These plots are shown as static images.&nbsp; Many more examples of dynamically rendered plots can be seen on the test and examples pages here: <a href="../../tests/" class=LURL target=_top>../../tests/</a>.</p><h4 class=CHeading>Include the Files</h4><p>jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.1 is included in the distribution.&nbsp; To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas script for IE support in your web page:</p><blockquote><pre>&lt;!--[if IE]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery-1.4.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;</pre></blockquote><h4 class=CHeading>Add a plot container</h4><p>Add a container (target) to your web page where you want your plot to show up.&nbsp; Be sure to give your target a width and a height:</p><blockquote><pre>&lt;div id=&quot;chartdiv&quot; style=&quot;height:400px;width:300px; &quot;&gt;&lt;/div&gt;</pre></blockquote><h4 class=CHeading>Create a plot</h4><p>Then, create the actual plot by calling the $.jqplot plugin with the id of your target and some data:</p><blockquote><pre>$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);</pre></blockquote><p>Which will produce a chart like:</p><img src="images/basicline.png" width="416" height="317"><h4 class=CHeading>Plot Options</h4><p>You can customize the plot by passing options to the $.jqplot function.&nbsp;  Options are described in <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.&nbsp;  An example of options usage:</p><blockquote><pre>$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
{ title:'Exponential Line',
  axes:{yaxis:{min:-10, max:240}},
  series:[{color:'#5FAB78'}]
});</pre></blockquote><p>Which will produce a plot like:</p><img src="images/basicoptions.png" width="417" height="315"><h4 class=CHeading>Using Plugins</h4><p>You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html after you include the jqPlot plugin.&nbsp;  Here is how to include the log axis plugin:</p><blockquote><pre>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;
&lt;!--[if IE]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery-1.4.2.min.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jqplot.logAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Important note:  For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly enable plugins via either the { show: true } plugin option to the plot or by using the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation.&nbsp; Only plugins that can be immediately active upon loading are affected.&nbsp;  This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.</p><p>Here is a the same $.jqplot call but with a log y axis:</p><blockquote><pre>$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
{ title:'Exponential Line',
  axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}},
  series:[{color:'#5FAB78'}]
});</pre></blockquote><p>Which produces a plot like:</p><img src="images/basiclogaxis.png" width="416" height="312"><p>You can further customize with options specific to the log axis plugin:</p><blockquote><pre>$.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
{ title:'Exponential Line',
  axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}},
  series:[{color:'#5FAB78'}]
});</pre></blockquote><p>Which makes a plot like:</p><img src="images/basiclogoptions.png" width="416" height="310"><p>For a full list of options, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>You can add as many plugins as you wish.&nbsp;  Order is generally not important.&nbsp; Some plugins, like the highlighter plugin which highlights data points near the mouse,  don&rsquo;t need any extra options or setup to function.&nbsp;  Highlighter does have additional options which the user can set.</p><p>Other plugins, the barRenderer for example, provide functionality the must be specified in the chart options object.&nbsp;  To render a series as a bar graph with the bar renderer, you would first include the plugin after jqPlot:</p><blockquote><pre>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.barRenderer.min.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Then you would create a chart like:</p><blockquote><pre>$.jqplot('chartdiv',  [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});</pre></blockquote><p>Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series.</p></div></div></div>

</div><!--Content-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile id=MSelected>Usage</div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index.html.



>
1
<html><head><meta http-equiv="Refresh" CONTENT="0; URL=files/usage-txt.html"></head></html>

Added Site/Site_W/jpqplot/docs/index/Classes.html.





















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Class Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; D &middot; E &middot; F &middot; <a href="#G">G</a> &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; <a href="#L">L</a> &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; <a href="#S">S</a> &middot; <a href="#T">T</a> &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="Symbols"></a>$#!</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>$.jqplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>$.jqplot.<wbr>BarRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>$.jqplot.<wbr>ciParser</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>$.jqplot.<wbr>Cursor</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>$.jqplot.<wbr>Dragable</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>$.jqplot.<wbr>Highlighter</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>$.jqplot.<wbr>LineRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" id=link31 onMouseOver="ShowTip(event, 'tt31', 'link31')" onMouseOut="HideTip('tt31')" class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" id=link32 onMouseOver="ShowTip(event, 'tt32', 'link32')" onMouseOut="HideTip('tt32')" class=ISymbol>$.jqplot.<wbr>PieRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" id=link33 onMouseOver="ShowTip(event, 'tt33', 'link33')" onMouseOut="HideTip('tt33')" class=ISymbol>$.jqplot.<wbr>PointLabels</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" id=link34 onMouseOver="ShowTip(event, 'tt34', 'link34')" onMouseOut="HideTip('tt34')" class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" id=link35 onMouseOver="ShowTip(event, 'tt35', 'link35')" onMouseOut="HideTip('tt35')" class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" id=link36 onMouseOver="ShowTip(event, 'tt36', 'link36')" onMouseOut="HideTip('tt36')" class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" id=link37 onMouseOver="ShowTip(event, 'tt37', 'link37')" onMouseOut="HideTip('tt37')" class=ISymbol>$.jqplot.<wbr>Trendline</a></td></tr><tr><td class=IHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis" id=link38 onMouseOver="ShowTip(event, 'tt38', 'link38')" onMouseOut="HideTip('tt38')" class=ISymbol>Axis</a></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid" id=link39 onMouseOver="ShowTip(event, 'tt39', 'link39')" onMouseOut="HideTip('tt39')" class=ISymbol>Grid</a></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" id=link40 onMouseOver="ShowTip(event, 'tt40', 'link40')" onMouseOut="HideTip('tt40')" class=ISymbol>jqPlot</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend" id=link41 onMouseOver="ShowTip(event, 'tt41', 'link41')" onMouseOut="HideTip('tt41')" class=ISymbol>Legend</a></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series" id=link42 onMouseOver="ShowTip(event, 'tt42', 'link42')" onMouseOut="HideTip('tt42')" class=ISymbol>Series</a></td></tr><tr><td class=IHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title" id=link43 onMouseOver="ShowTip(event, 'tt43', 'link43')" onMouseOut="HideTip('tt43')" class=ISymbol>Title</a></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>jQuery function called by the user to create a plot.</div></div><div class=CToolTip id="tt2"><div class=CClass>Renderer to place labels on the axes.</div></div><div class=CToolTip id="tt3"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt4"><div class=CClass>A plugin renderer for jqPlot to draw a bar plot. </div></div><div class=CToolTip id="tt5"><div class=CClass>Renderer which draws lines as stacked bezier curves. </div></div><div class=CToolTip id="tt6"><div class=CClass>Plugin renderer to draw a x-y block chart. </div></div><div class=CToolTip id="tt7"><div class=CClass>Plugin renderer to draw a bubble chart. </div></div><div class=CToolTip id="tt8"><div class=CClass>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt9"><div class=CClass>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt10"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt11"><div class=CClass>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</div></div><div class=CToolTip id="tt12"><div class=CClass>Data Renderer which converts a custom JSON data object into jqPlot data format.</div></div><div class=CToolTip id="tt13"><div class=CClass>Plugin class representing the cursor as displayed on the plot.</div></div><div class=CToolTip id="tt14"><div class=CClass>A plugin for a jqPlot to render an axis as a series of date values. </div></div><div class=CToolTip id="tt15"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt16"><div class=CClass>Legend Renderer specific to donut plots. </div></div><div class=CToolTip id="tt17"><div class=CClass>Plugin renderer to draw a donut chart. </div></div><div class=CToolTip id="tt18"><div class=CClass>Plugin to make plotted points dragable by the user.</div></div><div class=CToolTip id="tt19"><div class=CClass>Legend Renderer specific to funnel plots. </div></div><div class=CToolTip id="tt20"><div class=CClass>Plugin renderer to draw a funnel chart. </div></div><div class=CToolTip id="tt21"><div class=CClass>Plugin which will highlight data points when they are moused over.</div></div><div class=CToolTip id="tt22"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis. </div></div><div class=CToolTip id="tt23"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt24"><div class=CClass>A plugin for a jqPlot to render a logarithmic axis.</div></div><div class=CToolTip id="tt25"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt26"><div class=CClass>An axis renderer for a Mekko chart. </div></div><div class=CToolTip id="tt27"><div class=CClass>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</div></div><div class=CToolTip id="tt28"><div class=CClass>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </div></div><div class=CToolTip id="tt29"><div class=CClass>Plugin renderer to draw a meter gauge chart.</div></div><div class=CToolTip id="tt30"><div class=CClass>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</div></div><div class=CToolTip id="tt31"><div class=CClass>Legend Renderer specific to pie plots. </div></div><div class=CToolTip id="tt32"><div class=CClass>Plugin renderer to draw a pie chart. </div></div><div class=CToolTip id="tt33"><div class=CClass>Plugin for putting labels at the data points.</div></div><div class=CToolTip id="tt34"><div class=CClass>The default jqPlot shadow renderer, rendering shadows behind shapes.</div></div><div class=CToolTip id="tt35"><div class=CClass>The default jqPlot shape renderer. </div></div><div class=CToolTip id="tt36"><div class=CClass>Theme Engine provides a programatic way to change some of the  more common jqplot styling options such as fonts, colors and grid options. </div></div><div class=CToolTip id="tt37"><div class=CClass>Plugin which will automatically compute and draw trendlines for plotted data.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt38"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt39"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt40"><div class=CClass>Plot object returned by call to $.jqplot. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt41"><div class=CClass>Legend object. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt42"><div class=CClass>An individual data series object. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt43"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Classes</div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Files.html.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>File Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js"  class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></td></tr></table>
<!--START_ND_TOOLTIPS-->
<!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Files</div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Functions.html.





































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Function Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; <a href="#C">C</a> &middot; <a href="#D">D</a> &middot; E &middot; F &middot; <a href="#G">G</a> &middot; H &middot; <a href="#I">I</a> &middot; J &middot; K &middot; L &middot; <a href="#M">M</a> &middot; <a href="#N">N</a> &middot; O &middot; P &middot; Q &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>draw</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>init</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>makeGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.makeGridData" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>setGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.setGridData" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt15"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.reInitialize = function ()</td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Reset the specified axes min, max, numberTicks and tickInterval properties to null or reset these properties on all axes if no list of axes is provided.</div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt26"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt28"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Functions</div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/General.html.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General2.html#F">F</a> &middot; <a href="General2.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General3.html#I">I</a> &middot; <a href="General3.html#J">J</a> &middot; K &middot; <a href="General3.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General4.html#N">N</a> &middot; <a href="General4.html#O">O</a> &middot; <a href="General4.html#P">P</a> &middot; Q &middot; <a href="General4.html#R">R</a> &middot; <a href="General5.html#S">S</a> &middot; <a href="General6.html#T">T</a> &middot; <a href="General6.html#U">U</a> &middot; <a href="General6.html#V">V</a> &middot; <a href="General6.html#W">W</a> &middot; <a href="General6.html#X">X</a> &middot; <a href="General6.html#Y">Y</a> &middot; <a href="General6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="Symbols"></a>$#!</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>$.jqplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>$.jqplot.<wbr>BarRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>$.jqplot.<wbr>ciParser</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>$.jqplot.<wbr>Cursor</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>$.jqplot.<wbr>Dragable</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>$.jqplot.<wbr>Highlighter</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>$.jqplot.<wbr>LineRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" id=link31 onMouseOver="ShowTip(event, 'tt31', 'link31')" onMouseOut="HideTip('tt31')" class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" id=link32 onMouseOver="ShowTip(event, 'tt32', 'link32')" onMouseOut="HideTip('tt32')" class=ISymbol>$.jqplot.<wbr>PieRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" id=link33 onMouseOver="ShowTip(event, 'tt33', 'link33')" onMouseOut="HideTip('tt33')" class=ISymbol>$.jqplot.<wbr>PointLabels</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" id=link34 onMouseOver="ShowTip(event, 'tt34', 'link34')" onMouseOut="HideTip('tt34')" class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" id=link35 onMouseOver="ShowTip(event, 'tt35', 'link35')" onMouseOut="HideTip('tt35')" class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" id=link36 onMouseOver="ShowTip(event, 'tt36', 'link36')" onMouseOut="HideTip('tt36')" class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" id=link37 onMouseOver="ShowTip(event, 'tt37', 'link37')" onMouseOut="HideTip('tt37')" class=ISymbol>$.jqplot.<wbr>Trendline</a></td></tr><tr><td class=IHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" id=link38 onMouseOver="ShowTip(event, 'tt38', 'link38')" onMouseOut="HideTip('tt38')" class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" id=link39 onMouseOver="ShowTip(event, 'tt39', 'link39')" onMouseOut="HideTip('tt39')" class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" id=link40 onMouseOver="ShowTip(event, 'tt40', 'link40')" onMouseOut="HideTip('tt40')" class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>angle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" id=link41 onMouseOver="ShowTip(event, 'tt41', 'link41')" onMouseOut="HideTip('tt41')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" id=link42 onMouseOver="ShowTip(event, 'tt42', 'link42')" onMouseOut="HideTip('tt42')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" id=link43 onMouseOver="ShowTip(event, 'tt43', 'link43')" onMouseOut="HideTip('tt43')" class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" id=link44 onMouseOver="ShowTip(event, 'tt44', 'link44')" onMouseOut="HideTip('tt44')" class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link45 onMouseOver="ShowTip(event, 'tt45', 'link45')" onMouseOut="HideTip('tt45')" class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link46 onMouseOver="ShowTip(event, 'tt46', 'link46')" onMouseOut="HideTip('tt46')" class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link47 onMouseOver="ShowTip(event, 'tt47', 'link47')" onMouseOut="HideTip('tt47')" class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Available_Options" id=link48 onMouseOver="ShowTip(event, 'tt48', 'link48')" onMouseOut="HideTip('tt48')" class=ISymbol>Available Options</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" id=link49 onMouseOver="ShowTip(event, 'tt49', 'link49')" onMouseOut="HideTip('tt49')" class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" id=link50 onMouseOver="ShowTip(event, 'tt50', 'link50')" onMouseOut="HideTip('tt50')" class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis" id=link51 onMouseOver="ShowTip(event, 'tt51', 'link51')" onMouseOut="HideTip('tt51')" class=ISymbol>Axis</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" id=link52 onMouseOver="ShowTip(event, 'tt52', 'link52')" onMouseOut="HideTip('tt52')" class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>background</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" id=link53 onMouseOver="ShowTip(event, 'tt53', 'link53')" onMouseOut="HideTip('tt53')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" id=link54 onMouseOver="ShowTip(event, 'tt54', 'link54')" onMouseOut="HideTip('tt54')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" id=link55 onMouseOver="ShowTip(event, 'tt55', 'link55')" onMouseOut="HideTip('tt55')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" id=link56 onMouseOver="ShowTip(event, 'tt56', 'link56')" onMouseOut="HideTip('tt56')" class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link57 onMouseOver="ShowTip(event, 'tt57', 'link57')" onMouseOut="HideTip('tt57')" class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link58 onMouseOver="ShowTip(event, 'tt58', 'link58')" onMouseOut="HideTip('tt58')" class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" id=link59 onMouseOver="ShowTip(event, 'tt59', 'link59')" onMouseOut="HideTip('tt59')" class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" id=link60 onMouseOver="ShowTip(event, 'tt60', 'link60')" onMouseOut="HideTip('tt60')" class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" id=link61 onMouseOver="ShowTip(event, 'tt61', 'link61')" onMouseOut="HideTip('tt61')" class=ISymbol>barPadding</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" id=link62 onMouseOver="ShowTip(event, 'tt62', 'link62')" onMouseOut="HideTip('tt62')" class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" id=link63 onMouseOver="ShowTip(event, 'tt63', 'link63')" onMouseOut="HideTip('tt63')" class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" id=link64 onMouseOver="ShowTip(event, 'tt64', 'link64')" onMouseOut="HideTip('tt64')" class=ISymbol>border</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" id=link65 onMouseOver="ShowTip(event, 'tt65', 'link65')" onMouseOut="HideTip('tt65')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" id=link66 onMouseOver="ShowTip(event, 'tt66', 'link66')" onMouseOut="HideTip('tt66')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" id=link67 onMouseOver="ShowTip(event, 'tt67', 'link67')" onMouseOut="HideTip('tt67')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderWidth</span><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" id=link68 onMouseOver="ShowTip(event, 'tt68', 'link68')" onMouseOut="HideTip('tt68')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" id=link69 onMouseOver="ShowTip(event, 'tt69', 'link69')" onMouseOut="HideTip('tt69')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" id=link70 onMouseOver="ShowTip(event, 'tt70', 'link70')" onMouseOut="HideTip('tt70')" class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" id=link71 onMouseOver="ShowTip(event, 'tt71', 'link71')" onMouseOut="HideTip('tt71')" class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" id=link72 onMouseOver="ShowTip(event, 'tt72', 'link72')" onMouseOut="HideTip('tt72')" class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" id=link73 onMouseOver="ShowTip(event, 'tt73', 'link73')" onMouseOut="HideTip('tt73')" class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" id=link74 onMouseOver="ShowTip(event, 'tt74', 'link74')" onMouseOut="HideTip('tt74')" class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/changes-txt.html#Change_Log"  class=ISymbol>Change Log</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Changes" id=link75 onMouseOver="ShowTip(event, 'tt75', 'link75')" onMouseOut="HideTip('tt75')" class=ISymbol>Changes</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" id=link76 onMouseOver="ShowTip(event, 'tt76', 'link76')" onMouseOut="HideTip('tt76')" class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" id=link77 onMouseOver="ShowTip(event, 'tt77', 'link77')" onMouseOut="HideTip('tt77')" class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" id=link78 onMouseOver="ShowTip(event, 'tt78', 'link78')" onMouseOut="HideTip('tt78')" class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>color</span><div class=ISubIndex><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" id=link79 onMouseOver="ShowTip(event, 'tt79', 'link79')" onMouseOut="HideTip('tt79')" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" id=link80 onMouseOver="ShowTip(event, 'tt80', 'link80')" onMouseOut="HideTip('tt80')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" id=link81 onMouseOver="ShowTip(event, 'tt81', 'link81')" onMouseOut="HideTip('tt81')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" id=link82 onMouseOver="ShowTip(event, 'tt82', 'link82')" onMouseOut="HideTip('tt82')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" id=link83 onMouseOver="ShowTip(event, 'tt83', 'link83')" onMouseOut="HideTip('tt83')" class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" id=link84 onMouseOver="ShowTip(event, 'tt84', 'link84')" onMouseOut="HideTip('tt84')" class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" id=link85 onMouseOver="ShowTip(event, 'tt85', 'link85')" onMouseOut="HideTip('tt85')" class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" id=link86 onMouseOver="ShowTip(event, 'tt86', 'link86')" onMouseOut="HideTip('tt86')" class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#CopyrightLicense"  class=ISymbol>Copyright&amp;License</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" id=link87 onMouseOver="ShowTip(event, 'tt87', 'link87')" onMouseOut="HideTip('tt87')" class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" id=link88 onMouseOver="ShowTip(event, 'tt88', 'link88')" onMouseOut="HideTip('tt88')" class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CClass>jQuery function called by the user to create a plot.</div></div><div class=CToolTip id="tt2"><div class=CClass>Renderer to place labels on the axes.</div></div><div class=CToolTip id="tt3"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt4"><div class=CClass>A plugin renderer for jqPlot to draw a bar plot. </div></div><div class=CToolTip id="tt5"><div class=CClass>Renderer which draws lines as stacked bezier curves. </div></div><div class=CToolTip id="tt6"><div class=CClass>Plugin renderer to draw a x-y block chart. </div></div><div class=CToolTip id="tt7"><div class=CClass>Plugin renderer to draw a bubble chart. </div></div><div class=CToolTip id="tt8"><div class=CClass>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt9"><div class=CClass>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt10"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt11"><div class=CClass>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</div></div><div class=CToolTip id="tt12"><div class=CClass>Data Renderer which converts a custom JSON data object into jqPlot data format.</div></div><div class=CToolTip id="tt13"><div class=CClass>Plugin class representing the cursor as displayed on the plot.</div></div><div class=CToolTip id="tt14"><div class=CClass>A plugin for a jqPlot to render an axis as a series of date values. </div></div><div class=CToolTip id="tt15"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt16"><div class=CClass>Legend Renderer specific to donut plots. </div></div><div class=CToolTip id="tt17"><div class=CClass>Plugin renderer to draw a donut chart. </div></div><div class=CToolTip id="tt18"><div class=CClass>Plugin to make plotted points dragable by the user.</div></div><div class=CToolTip id="tt19"><div class=CClass>Legend Renderer specific to funnel plots. </div></div><div class=CToolTip id="tt20"><div class=CClass>Plugin renderer to draw a funnel chart. </div></div><div class=CToolTip id="tt21"><div class=CClass>Plugin which will highlight data points when they are moused over.</div></div><div class=CToolTip id="tt22"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis. </div></div><div class=CToolTip id="tt23"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt24"><div class=CClass>A plugin for a jqPlot to render a logarithmic axis.</div></div><div class=CToolTip id="tt25"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt26"><div class=CClass>An axis renderer for a Mekko chart. </div></div><div class=CToolTip id="tt27"><div class=CClass>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</div></div><div class=CToolTip id="tt28"><div class=CClass>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </div></div><div class=CToolTip id="tt29"><div class=CClass>Plugin renderer to draw a meter gauge chart.</div></div><div class=CToolTip id="tt30"><div class=CClass>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</div></div><div class=CToolTip id="tt31"><div class=CClass>Legend Renderer specific to pie plots. </div></div><div class=CToolTip id="tt32"><div class=CClass>Plugin renderer to draw a pie chart. </div></div><div class=CToolTip id="tt33"><div class=CClass>Plugin for putting labels at the data points.</div></div><div class=CToolTip id="tt34"><div class=CClass>The default jqPlot shadow renderer, rendering shadows behind shapes.</div></div><div class=CToolTip id="tt35"><div class=CClass>The default jqPlot shape renderer. </div></div><div class=CToolTip id="tt36"><div class=CClass>Theme Engine provides a programatic way to change some of the  more common jqplot styling options such as fonts, colors and grid options. </div></div><div class=CToolTip id="tt37"><div class=CClass>Plugin which will automatically compute and draw trendlines for plotted data.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt38"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt39"><div class=CHook>called at the end of legend draw, so plugins can add rows to the legend table.</div></div><div class=CToolTip id="tt40"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>Autoscale the axis min and max values to provide sensible tick spacing. </div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt48"><div class=CGeneric>See jqPlot Options for a list of options available thorugh the options object (not complete yet!)</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt50"><div class=CProperty>default options that will be applied to all axes. </div></div><div class=CToolTip id="tt51"><div class=CClass>An individual axis object. </div></div><div class=CToolTip id="tt52"><div class=CProperty>Default properties which will be applied directly to the series.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt53"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt54"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt55"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt56"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt61"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt62"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt69"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Not implemented. </div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt75"><div class=CGeneric>See Change Log</div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt86"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/General2.html.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General.html#C">C</a> &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General3.html#I">I</a> &middot; <a href="General3.html#J">J</a> &middot; K &middot; <a href="General3.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General4.html#N">N</a> &middot; <a href="General4.html#O">O</a> &middot; <a href="General4.html#P">P</a> &middot; Q &middot; <a href="General4.html#R">R</a> &middot; <a href="General5.html#S">S</a> &middot; <a href="General6.html#T">T</a> &middot; <a href="General6.html#U">U</a> &middot; <a href="General6.html#V">V</a> &middot; <a href="General6.html#W">W</a> &middot; <a href="General6.html#X">X</a> &middot; <a href="General6.html#Y">Y</a> &middot; <a href="General6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" id=link89 onMouseOver="ShowTip(event, 'tt89', 'link89')" onMouseOut="HideTip('tt89')" class=ISymbol>data</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" id=link90 onMouseOver="ShowTip(event, 'tt90', 'link90')" onMouseOut="HideTip('tt90')" class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" id=link91 onMouseOver="ShowTip(event, 'tt91', 'link91')" onMouseOut="HideTip('tt91')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link92 onMouseOver="ShowTip(event, 'tt92', 'link92')" onMouseOut="HideTip('tt92')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" id=link93 onMouseOver="ShowTip(event, 'tt93', 'link93')" onMouseOut="HideTip('tt93')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelNudge</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" id=link94 onMouseOver="ShowTip(event, 'tt94', 'link94')" onMouseOut="HideTip('tt94')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" id=link95 onMouseOver="ShowTip(event, 'tt95', 'link95')" onMouseOut="HideTip('tt95')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelPositionFactor</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link96 onMouseOver="ShowTip(event, 'tt96', 'link96')" onMouseOut="HideTip('tt96')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link97 onMouseOver="ShowTip(event, 'tt97', 'link97')" onMouseOut="HideTip('tt97')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" id=link98 onMouseOver="ShowTip(event, 'tt98', 'link98')" onMouseOut="HideTip('tt98')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" id=link99 onMouseOver="ShowTip(event, 'tt99', 'link99')" onMouseOut="HideTip('tt99')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" id=link100 onMouseOver="ShowTip(event, 'tt100', 'link100')" onMouseOut="HideTip('tt100')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelThreshold</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" id=link101 onMouseOver="ShowTip(event, 'tt101', 'link101')" onMouseOut="HideTip('tt101')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link102 onMouseOver="ShowTip(event, 'tt102', 'link102')" onMouseOut="HideTip('tt102')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" id=link103 onMouseOver="ShowTip(event, 'tt103', 'link103')" onMouseOut="HideTip('tt103')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" id=link104 onMouseOver="ShowTip(event, 'tt104', 'link104')" onMouseOut="HideTip('tt104')" class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" id=link105 onMouseOver="ShowTip(event, 'tt105', 'link105')" onMouseOut="HideTip('tt105')" class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" id=link106 onMouseOver="ShowTip(event, 'tt106', 'link106')" onMouseOut="HideTip('tt106')" class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>diameter</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" id=link107 onMouseOver="ShowTip(event, 'tt107', 'link107')" onMouseOut="HideTip('tt107')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" id=link108 onMouseOver="ShowTip(event, 'tt108', 'link108')" onMouseOut="HideTip('tt108')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" id=link109 onMouseOver="ShowTip(event, 'tt109', 'link109')" onMouseOut="HideTip('tt109')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" id=link110 onMouseOver="ShowTip(event, 'tt110', 'link110')" onMouseOut="HideTip('tt110')" class=ISymbol>disableIEFading</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" id=link111 onMouseOver="ShowTip(event, 'tt111', 'link111')" onMouseOut="HideTip('tt111')" class=ISymbol>disableStack</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" id=link112 onMouseOver="ShowTip(event, 'tt112', 'link112')" onMouseOut="HideTip('tt112')" class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>draw</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" id=link113 onMouseOver="ShowTip(event, 'tt113', 'link113')" onMouseOut="HideTip('tt113')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" id=link114 onMouseOver="ShowTip(event, 'tt114', 'link114')" onMouseOut="HideTip('tt114')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" id=link115 onMouseOver="ShowTip(event, 'tt115', 'link115')" onMouseOut="HideTip('tt115')" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" id=link116 onMouseOver="ShowTip(event, 'tt116', 'link116')" onMouseOut="HideTip('tt116')" class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" id=link117 onMouseOver="ShowTip(event, 'tt117', 'link117')" onMouseOut="HideTip('tt117')" class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" id=link118 onMouseOver="ShowTip(event, 'tt118', 'link118')" onMouseOut="HideTip('tt118')" class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" id=link119 onMouseOver="ShowTip(event, 'tt119', 'link119')" onMouseOut="HideTip('tt119')" class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>enableFontSupport</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link120 onMouseOver="ShowTip(event, 'tt120', 'link120')" onMouseOut="HideTip('tt120')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link121 onMouseOver="ShowTip(event, 'tt121', 'link121')" onMouseOut="HideTip('tt121')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHtml</span><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" id=link122 onMouseOver="ShowTip(event, 'tt122', 'link122')" onMouseOut="HideTip('tt122')" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" id=link123 onMouseOver="ShowTip(event, 'tt123', 'link123')" onMouseOut="HideTip('tt123')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHTML</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" id=link124 onMouseOver="ShowTip(event, 'tt124', 'link124')" onMouseOut="HideTip('tt124')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" id=link125 onMouseOver="ShowTip(event, 'tt125', 'link125')" onMouseOut="HideTip('tt125')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" id=link126 onMouseOver="ShowTip(event, 'tt126', 'link126')" onMouseOut="HideTip('tt126')" class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" id=link127 onMouseOver="ShowTip(event, 'tt127', 'link127')" onMouseOut="HideTip('tt127')" class=ISymbol>fadeTooltip</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fill</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" id=link128 onMouseOver="ShowTip(event, 'tt128', 'link128')" onMouseOut="HideTip('tt128')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" id=link129 onMouseOver="ShowTip(event, 'tt129', 'link129')" onMouseOut="HideTip('tt129')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" id=link130 onMouseOver="ShowTip(event, 'tt130', 'link130')" onMouseOut="HideTip('tt130')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" id=link131 onMouseOver="ShowTip(event, 'tt131', 'link131')" onMouseOut="HideTip('tt131')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" id=link132 onMouseOver="ShowTip(event, 'tt132', 'link132')" onMouseOut="HideTip('tt132')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" id=link133 onMouseOver="ShowTip(event, 'tt133', 'link133')" onMouseOut="HideTip('tt133')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" id=link134 onMouseOver="ShowTip(event, 'tt134', 'link134')" onMouseOut="HideTip('tt134')" class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" id=link135 onMouseOver="ShowTip(event, 'tt135', 'link135')" onMouseOut="HideTip('tt135')" class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" id=link136 onMouseOver="ShowTip(event, 'tt136', 'link136')" onMouseOut="HideTip('tt136')" class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillColor" id=link137 onMouseOver="ShowTip(event, 'tt137', 'link137')" onMouseOut="HideTip('tt137')" class=ISymbol>fillColor</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" id=link138 onMouseOver="ShowTip(event, 'tt138', 'link138')" onMouseOut="HideTip('tt138')" class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" id=link139 onMouseOver="ShowTip(event, 'tt139', 'link139')" onMouseOut="HideTip('tt139')" class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" id=link140 onMouseOver="ShowTip(event, 'tt140', 'link140')" onMouseOut="HideTip('tt140')" class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" id=link141 onMouseOver="ShowTip(event, 'tt141', 'link141')" onMouseOut="HideTip('tt141')" class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" id=link142 onMouseOver="ShowTip(event, 'tt142', 'link142')" onMouseOut="HideTip('tt142')" class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" id=link143 onMouseOver="ShowTip(event, 'tt143', 'link143')" onMouseOut="HideTip('tt143')" class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" id=link144 onMouseOver="ShowTip(event, 'tt144', 'link144')" onMouseOut="HideTip('tt144')" class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontFamily</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" id=link145 onMouseOver="ShowTip(event, 'tt145', 'link145')" onMouseOut="HideTip('tt145')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link146 onMouseOver="ShowTip(event, 'tt146', 'link146')" onMouseOut="HideTip('tt146')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link147 onMouseOver="ShowTip(event, 'tt147', 'link147')" onMouseOut="HideTip('tt147')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" id=link148 onMouseOver="ShowTip(event, 'tt148', 'link148')" onMouseOut="HideTip('tt148')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" id=link149 onMouseOver="ShowTip(event, 'tt149', 'link149')" onMouseOut="HideTip('tt149')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" id=link150 onMouseOver="ShowTip(event, 'tt150', 'link150')" onMouseOut="HideTip('tt150')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link151 onMouseOver="ShowTip(event, 'tt151', 'link151')" onMouseOut="HideTip('tt151')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link152 onMouseOver="ShowTip(event, 'tt152', 'link152')" onMouseOut="HideTip('tt152')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" id=link153 onMouseOver="ShowTip(event, 'tt153', 'link153')" onMouseOut="HideTip('tt153')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" id=link154 onMouseOver="ShowTip(event, 'tt154', 'link154')" onMouseOut="HideTip('tt154')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" id=link155 onMouseOver="ShowTip(event, 'tt155', 'link155')" onMouseOut="HideTip('tt155')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontStretch</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link156 onMouseOver="ShowTip(event, 'tt156', 'link156')" onMouseOut="HideTip('tt156')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link157 onMouseOver="ShowTip(event, 'tt157', 'link157')" onMouseOut="HideTip('tt157')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontWeight</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link158 onMouseOver="ShowTip(event, 'tt158', 'link158')" onMouseOut="HideTip('tt158')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link159 onMouseOver="ShowTip(event, 'tt159', 'link159')" onMouseOut="HideTip('tt159')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatString</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" id=link160 onMouseOver="ShowTip(event, 'tt160', 'link160')" onMouseOut="HideTip('tt160')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" id=link161 onMouseOver="ShowTip(event, 'tt161', 'link161')" onMouseOut="HideTip('tt161')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" id=link162 onMouseOver="ShowTip(event, 'tt162', 'link162')" onMouseOut="HideTip('tt162')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" id=link163 onMouseOver="ShowTip(event, 'tt163', 'link163')" onMouseOut="HideTip('tt163')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatter</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" id=link164 onMouseOver="ShowTip(event, 'tt164', 'link164')" onMouseOut="HideTip('tt164')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" id=link165 onMouseOver="ShowTip(event, 'tt165', 'link165')" onMouseOut="HideTip('tt165')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" id=link166 onMouseOver="ShowTip(event, 'tt166', 'link166')" onMouseOut="HideTip('tt166')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Functions</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.Functions"  class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Functions"  class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Functions"  class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Functions"  class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" id=link167 onMouseOver="ShowTip(event, 'tt167', 'link167')" onMouseOut="HideTip('tt167')" class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" id=link168 onMouseOver="ShowTip(event, 'tt168', 'link168')" onMouseOut="HideTip('tt168')" class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" id=link169 onMouseOver="ShowTip(event, 'tt169', 'link169')" onMouseOut="HideTip('tt169')" class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/gpl-2-0-txt.html#GPL_Version_2" id=link170 onMouseOver="ShowTip(event, 'tt170', 'link170')" onMouseOut="HideTip('tt170')" class=ISymbol>GPL Version 2</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" id=link171 onMouseOver="ShowTip(event, 'tt171', 'link171')" onMouseOut="HideTip('tt171')" class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid" id=link172 onMouseOver="ShowTip(event, 'tt172', 'link172')" onMouseOut="HideTip('tt172')" class=ISymbol>Grid</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" id=link173 onMouseOver="ShowTip(event, 'tt173', 'link173')" onMouseOut="HideTip('tt173')" class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" id=link174 onMouseOver="ShowTip(event, 'tt174', 'link174')" onMouseOut="HideTip('tt174')" class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" id=link175 onMouseOver="ShowTip(event, 'tt175', 'link175')" onMouseOut="HideTip('tt175')" class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt90"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt94"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt96"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.5</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt104"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt105"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt108"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt109"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><div class=CToolTip id="tt111"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt113"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><div class=CToolTip id="tt114"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><div class=CToolTip id="tt115"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt116"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt118"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt120"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt125"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><div class=CToolTip id="tt126"><div class=CHook>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt129"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt132"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt136"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt137"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt138"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt139"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt140"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt141"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt142"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt143"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt144"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt145"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt146"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt147"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt148"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt149"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt150"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt151"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt152"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt153"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt154"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt155"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt156"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt157"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt158"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt159"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt160"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt161"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt162"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt163"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt164"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt165"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt166"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt167"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt168"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt169"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><div class=CToolTip id="tt170"><div class=CSection>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</div></div><div class=CToolTip id="tt171"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt172"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><div class=CToolTip id="tt173"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt174"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt175"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/General3.html.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General2.html#F">F</a> &middot; <a href="General2.html#G">G</a> &middot; <a href="#H">H</a> &middot; <a href="#I">I</a> &middot; <a href="#J">J</a> &middot; K &middot; <a href="#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General4.html#N">N</a> &middot; <a href="General4.html#O">O</a> &middot; <a href="General4.html#P">P</a> &middot; Q &middot; <a href="General4.html#R">R</a> &middot; <a href="General5.html#S">S</a> &middot; <a href="General6.html#T">T</a> &middot; <a href="General6.html#U">U</a> &middot; <a href="General6.html#V">V</a> &middot; <a href="General6.html#W">W</a> &middot; <a href="General6.html#X">X</a> &middot; <a href="General6.html#Y">Y</a> &middot; <a href="General6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" id=link176 onMouseOver="ShowTip(event, 'tt176', 'link176')" onMouseOut="HideTip('tt176')" class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" id=link177 onMouseOver="ShowTip(event, 'tt177', 'link177')" onMouseOut="HideTip('tt177')" class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" id=link178 onMouseOver="ShowTip(event, 'tt178', 'link178')" onMouseOut="HideTip('tt178')" class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightColors</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" id=link179 onMouseOver="ShowTip(event, 'tt179', 'link179')" onMouseOut="HideTip('tt179')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" id=link180 onMouseOver="ShowTip(event, 'tt180', 'link180')" onMouseOut="HideTip('tt180')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" id=link181 onMouseOver="ShowTip(event, 'tt181', 'link181')" onMouseOut="HideTip('tt181')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" id=link182 onMouseOver="ShowTip(event, 'tt182', 'link182')" onMouseOut="HideTip('tt182')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" id=link183 onMouseOver="ShowTip(event, 'tt183', 'link183')" onMouseOut="HideTip('tt183')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseDown</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" id=link184 onMouseOver="ShowTip(event, 'tt184', 'link184')" onMouseOut="HideTip('tt184')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" id=link185 onMouseOver="ShowTip(event, 'tt185', 'link185')" onMouseOut="HideTip('tt185')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" id=link186 onMouseOver="ShowTip(event, 'tt186', 'link186')" onMouseOut="HideTip('tt186')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" id=link187 onMouseOver="ShowTip(event, 'tt187', 'link187')" onMouseOut="HideTip('tt187')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" id=link188 onMouseOver="ShowTip(event, 'tt188', 'link188')" onMouseOut="HideTip('tt188')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" id=link189 onMouseOver="ShowTip(event, 'tt189', 'link189')" onMouseOut="HideTip('tt189')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseOver</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" id=link190 onMouseOver="ShowTip(event, 'tt190', 'link190')" onMouseOut="HideTip('tt190')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" id=link191 onMouseOver="ShowTip(event, 'tt191', 'link191')" onMouseOut="HideTip('tt191')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" id=link192 onMouseOver="ShowTip(event, 'tt192', 'link192')" onMouseOut="HideTip('tt192')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" id=link193 onMouseOver="ShowTip(event, 'tt193', 'link193')" onMouseOut="HideTip('tt193')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" id=link194 onMouseOver="ShowTip(event, 'tt194', 'link194')" onMouseOut="HideTip('tt194')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" id=link195 onMouseOver="ShowTip(event, 'tt195', 'link195')" onMouseOut="HideTip('tt195')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" id=link196 onMouseOver="ShowTip(event, 'tt196', 'link196')" onMouseOut="HideTip('tt196')" class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.Hooks"  class=ISymbol>Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" id=link197 onMouseOver="ShowTip(event, 'tt197', 'link197')" onMouseOut="HideTip('tt197')" class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.index" id=link198 onMouseOver="ShowTip(event, 'tt198', 'link198')" onMouseOut="HideTip('tt198')" class=ISymbol>index</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" id=link199 onMouseOver="ShowTip(event, 'tt199', 'link199')" onMouseOut="HideTip('tt199')" class=ISymbol>init</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" id=link200 onMouseOver="ShowTip(event, 'tt200', 'link200')" onMouseOut="HideTip('tt200')" class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" id=link201 onMouseOver="ShowTip(event, 'tt201', 'link201')" onMouseOut="HideTip('tt201')" class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" id=link202 onMouseOver="ShowTip(event, 'tt202', 'link202')" onMouseOut="HideTip('tt202')" class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" id=link203 onMouseOver="ShowTip(event, 'tt203', 'link203')" onMouseOut="HideTip('tt203')" class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link204 onMouseOver="ShowTip(event, 'tt204', 'link204')" onMouseOut="HideTip('tt204')" class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link205 onMouseOver="ShowTip(event, 'tt205', 'link205')" onMouseOut="HideTip('tt205')" class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" id=link206 onMouseOver="ShowTip(event, 'tt206', 'link206')" onMouseOut="HideTip('tt206')" class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Introduction" id=link207 onMouseOver="ShowTip(event, 'tt207', 'link207')" onMouseOut="HideTip('tt207')" class=ISymbol>Introduction</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isarc</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" id=link208 onMouseOver="ShowTip(event, 'tt208', 'link208')" onMouseOut="HideTip('tt208')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" id=link209 onMouseOver="ShowTip(event, 'tt209', 'link209')" onMouseOut="HideTip('tt209')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isMinorTick</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" id=link210 onMouseOver="ShowTip(event, 'tt210', 'link210')" onMouseOut="HideTip('tt210')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link211 onMouseOver="ShowTip(event, 'tt211', 'link211')" onMouseOut="HideTip('tt211')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" id=link212 onMouseOver="ShowTip(event, 'tt212', 'link212')" onMouseOut="HideTip('tt212')" class=ISymbol>jqPlot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot_Charts" id=link213 onMouseOver="ShowTip(event, 'tt213', 'link213')" onMouseOut="HideTip('tt213')" class=ISymbol>jqPlot Charts</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqPlotCssStyling-txt.html#jqPlot_CSS_Customization" id=link214 onMouseOver="ShowTip(event, 'tt214', 'link214')" onMouseOut="HideTip('tt214')" class=ISymbol>jqPlot CSS Customization</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqPlotOptions-txt.html#jqPlot_Options" id=link215 onMouseOver="ShowTip(event, 'tt215', 'link215')" onMouseOut="HideTip('tt215')" class=ISymbol>jqPlot Options</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks"  class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/usage-txt.html#jqPlot_Usage"  class=ISymbol>jqPlot Usage</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js"  class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>label</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" id=link216 onMouseOver="ShowTip(event, 'tt216', 'link216')" onMouseOut="HideTip('tt216')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" id=link217 onMouseOver="ShowTip(event, 'tt217', 'link217')" onMouseOut="HideTip('tt217')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" id=link218 onMouseOver="ShowTip(event, 'tt218', 'link218')" onMouseOut="HideTip('tt218')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" id=link219 onMouseOver="ShowTip(event, 'tt219', 'link219')" onMouseOut="HideTip('tt219')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" id=link220 onMouseOver="ShowTip(event, 'tt220', 'link220')" onMouseOut="HideTip('tt220')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" id=link221 onMouseOver="ShowTip(event, 'tt221', 'link221')" onMouseOut="HideTip('tt221')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link222 onMouseOver="ShowTip(event, 'tt222', 'link222')" onMouseOut="HideTip('tt222')" class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" id=link223 onMouseOver="ShowTip(event, 'tt223', 'link223')" onMouseOut="HideTip('tt223')" class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labelPosition</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link224 onMouseOver="ShowTip(event, 'tt224', 'link224')" onMouseOut="HideTip('tt224')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" id=link225 onMouseOver="ShowTip(event, 'tt225', 'link225')" onMouseOut="HideTip('tt225')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" id=link226 onMouseOver="ShowTip(event, 'tt226', 'link226')" onMouseOut="HideTip('tt226')" class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labels</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" id=link227 onMouseOver="ShowTip(event, 'tt227', 'link227')" onMouseOut="HideTip('tt227')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" id=link228 onMouseOver="ShowTip(event, 'tt228', 'link228')" onMouseOut="HideTip('tt228')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" id=link229 onMouseOver="ShowTip(event, 'tt229', 'link229')" onMouseOut="HideTip('tt229')" class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" id=link230 onMouseOver="ShowTip(event, 'tt230', 'link230')" onMouseOut="HideTip('tt230')" class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend" id=link231 onMouseOver="ShowTip(event, 'tt231', 'link231')" onMouseOut="HideTip('tt231')" class=ISymbol>Legend</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineCap</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" id=link232 onMouseOver="ShowTip(event, 'tt232', 'link232')" onMouseOut="HideTip('tt232')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" id=link233 onMouseOver="ShowTip(event, 'tt233', 'link233')" onMouseOut="HideTip('tt233')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineJoin</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" id=link234 onMouseOver="ShowTip(event, 'tt234', 'link234')" onMouseOut="HideTip('tt234')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" id=link235 onMouseOver="ShowTip(event, 'tt235', 'link235')" onMouseOut="HideTip('tt235')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" id=link236 onMouseOver="ShowTip(event, 'tt236', 'link236')" onMouseOut="HideTip('tt236')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" id=link237 onMouseOver="ShowTip(event, 'tt237', 'link237')" onMouseOut="HideTip('tt237')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" id=link238 onMouseOver="ShowTip(event, 'tt238', 'link238')" onMouseOut="HideTip('tt238')" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" id=link239 onMouseOver="ShowTip(event, 'tt239', 'link239')" onMouseOut="HideTip('tt239')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" id=link240 onMouseOver="ShowTip(event, 'tt240', 'link240')" onMouseOut="HideTip('tt240')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" id=link241 onMouseOver="ShowTip(event, 'tt241', 'link241')" onMouseOut="HideTip('tt241')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" id=link242 onMouseOver="ShowTip(event, 'tt242', 'link242')" onMouseOut="HideTip('tt242')" class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>location</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" id=link243 onMouseOver="ShowTip(event, 'tt243', 'link243')" onMouseOut="HideTip('tt243')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" id=link244 onMouseOver="ShowTip(event, 'tt244', 'link244')" onMouseOut="HideTip('tt244')" class=IParent>Legend</a></div></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt176"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><div class=CToolTip id="tt177"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt178"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt179"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt180"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt181"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt182"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt183"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt184"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt185"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt186"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt187"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt188"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt189"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt190"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt191"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt192"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt193"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt194"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt195"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt196"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt197"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt198"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt199"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><div class=CToolTip id="tt200"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of teh donut, auto calculated by default. </div></div><div class=CToolTip id="tt201"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt202"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt203"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt204"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt205"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt206"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt207"><div class=CGeneric>jqPlot requires jQuery (1.4+ required for certain features). </div></div><div class=CToolTip id="tt208"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt209"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt210"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt211"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt212"><div class=CClass>Plot object returned by call to $.jqplot. </div></div><div class=CToolTip id="tt213"><div class=CSection>Pure JavaScript plotting plugin for jQuery.</div></div><div class=CToolTip id="tt214"><div class=CSection>Much of the styling of jqPlot is done by css. </div></div><div class=CToolTip id="tt215"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt216"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt217"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt218"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt219"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt220"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt221"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt222"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt223"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt224"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt225"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt226"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt227"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt228"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt229"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt230"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt231"><div class=CClass>Legend object. </div></div><div class=CToolTip id="tt232"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt233"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt234"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt235"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt236"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt237"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt238"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks.</div></div><div class=CToolTip id="tt239"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt240"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt241"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt242"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt243"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt244"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/General4.html.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/docs/index/General5.html.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General2.html#F">F</a> &middot; <a href="General2.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General3.html#I">I</a> &middot; <a href="General3.html#J">J</a> &middot; K &middot; <a href="General3.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General4.html#N">N</a> &middot; <a href="General4.html#O">O</a> &middot; <a href="General4.html#P">P</a> &middot; Q &middot; <a href="General4.html#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="General6.html#T">T</a> &middot; <a href="General6.html#U">U</a> &middot; <a href="General6.html#V">V</a> &middot; <a href="General6.html#W">W</a> &middot; <a href="General6.html#X">X</a> &middot; <a href="General6.html#Y">Y</a> &middot; <a href="General6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" id=link342 onMouseOver="ShowTip(event, 'tt342', 'link342')" onMouseOut="HideTip('tt342')" class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" id=link343 onMouseOver="ShowTip(event, 'tt343', 'link343')" onMouseOut="HideTip('tt343')" class=ISymbol>series</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series" id=link344 onMouseOver="ShowTip(event, 'tt344', 'link344')" onMouseOut="HideTip('tt344')" class=ISymbol>Series</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" id=link345 onMouseOver="ShowTip(event, 'tt345', 'link345')" onMouseOut="HideTip('tt345')" class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" id=link346 onMouseOver="ShowTip(event, 'tt346', 'link346')" onMouseOut="HideTip('tt346')" class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" id=link347 onMouseOver="ShowTip(event, 'tt347', 'link347')" onMouseOut="HideTip('tt347')" class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" id=link348 onMouseOver="ShowTip(event, 'tt348', 'link348')" onMouseOut="HideTip('tt348')" class=ISymbol>seriesToggle</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>setGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" id=link349 onMouseOver="ShowTip(event, 'tt349', 'link349')" onMouseOut="HideTip('tt349')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.setGridData" id=link350 onMouseOver="ShowTip(event, 'tt350', 'link350')" onMouseOut="HideTip('tt350')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" id=link351 onMouseOver="ShowTip(event, 'tt351', 'link351')" onMouseOut="HideTip('tt351')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadow</span><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" id=link352 onMouseOver="ShowTip(event, 'tt352', 'link352')" onMouseOut="HideTip('tt352')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" id=link353 onMouseOver="ShowTip(event, 'tt353', 'link353')" onMouseOut="HideTip('tt353')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" id=link354 onMouseOver="ShowTip(event, 'tt354', 'link354')" onMouseOut="HideTip('tt354')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadow" id=link355 onMouseOver="ShowTip(event, 'tt355', 'link355')" onMouseOut="HideTip('tt355')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAlpha</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" id=link356 onMouseOver="ShowTip(event, 'tt356', 'link356')" onMouseOut="HideTip('tt356')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" id=link357 onMouseOver="ShowTip(event, 'tt357', 'link357')" onMouseOut="HideTip('tt357')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" id=link358 onMouseOver="ShowTip(event, 'tt358', 'link358')" onMouseOut="HideTip('tt358')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" id=link359 onMouseOver="ShowTip(event, 'tt359', 'link359')" onMouseOut="HideTip('tt359')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link360 onMouseOver="ShowTip(event, 'tt360', 'link360')" onMouseOut="HideTip('tt360')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" id=link361 onMouseOver="ShowTip(event, 'tt361', 'link361')" onMouseOut="HideTip('tt361')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" id=link362 onMouseOver="ShowTip(event, 'tt362', 'link362')" onMouseOut="HideTip('tt362')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" id=link363 onMouseOver="ShowTip(event, 'tt363', 'link363')" onMouseOut="HideTip('tt363')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" id=link364 onMouseOver="ShowTip(event, 'tt364', 'link364')" onMouseOut="HideTip('tt364')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAngle</span><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" id=link365 onMouseOver="ShowTip(event, 'tt365', 'link365')" onMouseOut="HideTip('tt365')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" id=link366 onMouseOver="ShowTip(event, 'tt366', 'link366')" onMouseOut="HideTip('tt366')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" id=link367 onMouseOver="ShowTip(event, 'tt367', 'link367')" onMouseOut="HideTip('tt367')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" id=link368 onMouseOver="ShowTip(event, 'tt368', 'link368')" onMouseOut="HideTip('tt368')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" id=link369 onMouseOver="ShowTip(event, 'tt369', 'link369')" onMouseOut="HideTip('tt369')" class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowDepth</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" id=link370 onMouseOver="ShowTip(event, 'tt370', 'link370')" onMouseOut="HideTip('tt370')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" id=link371 onMouseOver="ShowTip(event, 'tt371', 'link371')" onMouseOut="HideTip('tt371')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" id=link372 onMouseOver="ShowTip(event, 'tt372', 'link372')" onMouseOut="HideTip('tt372')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" id=link373 onMouseOver="ShowTip(event, 'tt373', 'link373')" onMouseOut="HideTip('tt373')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link374 onMouseOver="ShowTip(event, 'tt374', 'link374')" onMouseOut="HideTip('tt374')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" id=link375 onMouseOver="ShowTip(event, 'tt375', 'link375')" onMouseOut="HideTip('tt375')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" id=link376 onMouseOver="ShowTip(event, 'tt376', 'link376')" onMouseOut="HideTip('tt376')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" id=link377 onMouseOver="ShowTip(event, 'tt377', 'link377')" onMouseOut="HideTip('tt377')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" id=link378 onMouseOver="ShowTip(event, 'tt378', 'link378')" onMouseOut="HideTip('tt378')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" id=link379 onMouseOver="ShowTip(event, 'tt379', 'link379')" onMouseOut="HideTip('tt379')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" id=link380 onMouseOver="ShowTip(event, 'tt380', 'link380')" onMouseOut="HideTip('tt380')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" id=link381 onMouseOver="ShowTip(event, 'tt381', 'link381')" onMouseOut="HideTip('tt381')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" id=link382 onMouseOver="ShowTip(event, 'tt382', 'link382')" onMouseOut="HideTip('tt382')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link383 onMouseOver="ShowTip(event, 'tt383', 'link383')" onMouseOut="HideTip('tt383')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" id=link384 onMouseOver="ShowTip(event, 'tt384', 'link384')" onMouseOut="HideTip('tt384')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" id=link385 onMouseOver="ShowTip(event, 'tt385', 'link385')" onMouseOut="HideTip('tt385')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" id=link386 onMouseOver="ShowTip(event, 'tt386', 'link386')" onMouseOut="HideTip('tt386')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" id=link387 onMouseOver="ShowTip(event, 'tt387', 'link387')" onMouseOut="HideTip('tt387')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" id=link388 onMouseOver="ShowTip(event, 'tt388', 'link388')" onMouseOut="HideTip('tt388')" class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" id=link389 onMouseOver="ShowTip(event, 'tt389', 'link389')" onMouseOut="HideTip('tt389')" class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" id=link390 onMouseOver="ShowTip(event, 'tt390', 'link390')" onMouseOut="HideTip('tt390')" class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>show</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" id=link391 onMouseOver="ShowTip(event, 'tt391', 'link391')" onMouseOut="HideTip('tt391')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" id=link392 onMouseOver="ShowTip(event, 'tt392', 'link392')" onMouseOut="HideTip('tt392')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" id=link393 onMouseOver="ShowTip(event, 'tt393', 'link393')" onMouseOut="HideTip('tt393')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" id=link394 onMouseOver="ShowTip(event, 'tt394', 'link394')" onMouseOut="HideTip('tt394')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" id=link395 onMouseOver="ShowTip(event, 'tt395', 'link395')" onMouseOut="HideTip('tt395')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" id=link396 onMouseOver="ShowTip(event, 'tt396', 'link396')" onMouseOut="HideTip('tt396')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" id=link397 onMouseOver="ShowTip(event, 'tt397', 'link397')" onMouseOut="HideTip('tt397')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" id=link398 onMouseOver="ShowTip(event, 'tt398', 'link398')" onMouseOut="HideTip('tt398')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" id=link399 onMouseOver="ShowTip(event, 'tt399', 'link399')" onMouseOut="HideTip('tt399')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" id=link400 onMouseOver="ShowTip(event, 'tt400', 'link400')" onMouseOut="HideTip('tt400')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" id=link401 onMouseOver="ShowTip(event, 'tt401', 'link401')" onMouseOut="HideTip('tt401')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" id=link402 onMouseOver="ShowTip(event, 'tt402', 'link402')" onMouseOut="HideTip('tt402')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" id=link403 onMouseOver="ShowTip(event, 'tt403', 'link403')" onMouseOut="HideTip('tt403')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" id=link404 onMouseOver="ShowTip(event, 'tt404', 'link404')" onMouseOut="HideTip('tt404')" class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" id=link405 onMouseOver="ShowTip(event, 'tt405', 'link405')" onMouseOut="HideTip('tt405')" class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showDataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" id=link406 onMouseOver="ShowTip(event, 'tt406', 'link406')" onMouseOut="HideTip('tt406')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" id=link407 onMouseOver="ShowTip(event, 'tt407', 'link407')" onMouseOut="HideTip('tt407')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" id=link408 onMouseOver="ShowTip(event, 'tt408', 'link408')" onMouseOut="HideTip('tt408')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showGridline</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" id=link409 onMouseOver="ShowTip(event, 'tt409', 'link409')" onMouseOut="HideTip('tt409')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link410 onMouseOver="ShowTip(event, 'tt410', 'link410')" onMouseOut="HideTip('tt410')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" id=link411 onMouseOver="ShowTip(event, 'tt411', 'link411')" onMouseOut="HideTip('tt411')" class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabel</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" id=link412 onMouseOver="ShowTip(event, 'tt412', 'link412')" onMouseOut="HideTip('tt412')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link413 onMouseOver="ShowTip(event, 'tt413', 'link413')" onMouseOut="HideTip('tt413')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link414 onMouseOver="ShowTip(event, 'tt414', 'link414')" onMouseOut="HideTip('tt414')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" id=link415 onMouseOver="ShowTip(event, 'tt415', 'link415')" onMouseOut="HideTip('tt415')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" id=link416 onMouseOver="ShowTip(event, 'tt416', 'link416')" onMouseOut="HideTip('tt416')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" id=link417 onMouseOver="ShowTip(event, 'tt417', 'link417')" onMouseOut="HideTip('tt417')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" id=link418 onMouseOver="ShowTip(event, 'tt418', 'link418')" onMouseOut="HideTip('tt418')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" id=link419 onMouseOver="ShowTip(event, 'tt419', 'link419')" onMouseOut="HideTip('tt419')" class=ISymbol>showLine</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" id=link420 onMouseOver="ShowTip(event, 'tt420', 'link420')" onMouseOut="HideTip('tt420')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" id=link421 onMouseOver="ShowTip(event, 'tt421', 'link421')" onMouseOut="HideTip('tt421')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMarker</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" id=link422 onMouseOver="ShowTip(event, 'tt422', 'link422')" onMouseOut="HideTip('tt422')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" id=link423 onMouseOver="ShowTip(event, 'tt423', 'link423')" onMouseOut="HideTip('tt423')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" id=link424 onMouseOver="ShowTip(event, 'tt424', 'link424')" onMouseOut="HideTip('tt424')" class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" id=link425 onMouseOver="ShowTip(event, 'tt425', 'link425')" onMouseOut="HideTip('tt425')" class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link426 onMouseOver="ShowTip(event, 'tt426', 'link426')" onMouseOut="HideTip('tt426')" class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" id=link427 onMouseOver="ShowTip(event, 'tt427', 'link427')" onMouseOut="HideTip('tt427')" class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTicks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" id=link428 onMouseOver="ShowTip(event, 'tt428', 'link428')" onMouseOut="HideTip('tt428')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" id=link429 onMouseOver="ShowTip(event, 'tt429', 'link429')" onMouseOut="HideTip('tt429')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" id=link430 onMouseOver="ShowTip(event, 'tt430', 'link430')" onMouseOut="HideTip('tt430')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" id=link431 onMouseOver="ShowTip(event, 'tt431', 'link431')" onMouseOut="HideTip('tt431')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" id=link432 onMouseOver="ShowTip(event, 'tt432', 'link432')" onMouseOut="HideTip('tt432')" class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" id=link433 onMouseOver="ShowTip(event, 'tt433', 'link433')" onMouseOut="HideTip('tt433')" class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" id=link434 onMouseOver="ShowTip(event, 'tt434', 'link434')" onMouseOut="HideTip('tt434')" class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" id=link435 onMouseOver="ShowTip(event, 'tt435', 'link435')" onMouseOut="HideTip('tt435')" class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" id=link436 onMouseOver="ShowTip(event, 'tt436', 'link436')" onMouseOut="HideTip('tt436')" class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>size</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" id=link437 onMouseOver="ShowTip(event, 'tt437', 'link437')" onMouseOut="HideTip('tt437')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" id=link438 onMouseOver="ShowTip(event, 'tt438', 'link438')" onMouseOut="HideTip('tt438')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" id=link439 onMouseOver="ShowTip(event, 'tt439', 'link439')" onMouseOut="HideTip('tt439')" class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>sliceMargin</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" id=link440 onMouseOver="ShowTip(event, 'tt440', 'link440')" onMouseOut="HideTip('tt440')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" id=link441 onMouseOver="ShowTip(event, 'tt441', 'link441')" onMouseOut="HideTip('tt441')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" id=link442 onMouseOver="ShowTip(event, 'tt442', 'link442')" onMouseOut="HideTip('tt442')" class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link443 onMouseOver="ShowTip(event, 'tt443', 'link443')" onMouseOut="HideTip('tt443')" class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" id=link444 onMouseOver="ShowTip(event, 'tt444', 'link444')" onMouseOut="HideTip('tt444')" class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" id=link445 onMouseOver="ShowTip(event, 'tt445', 'link445')" onMouseOut="HideTip('tt445')" class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>startAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" id=link446 onMouseOver="ShowTip(event, 'tt446', 'link446')" onMouseOut="HideTip('tt446')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" id=link447 onMouseOver="ShowTip(event, 'tt447', 'link447')" onMouseOut="HideTip('tt447')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" id=link448 onMouseOver="ShowTip(event, 'tt448', 'link448')" onMouseOut="HideTip('tt448')" class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" id=link449 onMouseOver="ShowTip(event, 'tt449', 'link449')" onMouseOut="HideTip('tt449')" class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>style</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" id=link450 onMouseOver="ShowTip(event, 'tt450', 'link450')" onMouseOut="HideTip('tt450')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" id=link451 onMouseOver="ShowTip(event, 'tt451', 'link451')" onMouseOut="HideTip('tt451')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" id=link452 onMouseOver="ShowTip(event, 'tt452', 'link452')" onMouseOut="HideTip('tt452')" class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt342"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt343"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt344"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt345"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt346"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, gridPadding: {top:10, right:10, bottom:23, left:10}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt347"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt348"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt349"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt350"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.LineRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt351"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt352"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt353"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt354"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt355"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt356"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt357"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt358"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt359"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt360"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt361"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt362"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt363"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt364"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt365"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt366"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt367"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt368"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt369"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt370"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt371"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt372"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt373"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt374"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt375"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt376"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><div class=CToolTip id="tt377"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt378"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt379"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt380"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt381"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt382"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt383"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt384"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt385"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt386"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt387"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt388"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt389"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt390"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><div class=CToolTip id="tt391"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt392"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt393"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt394"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt395"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt396"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt397"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt398"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt399"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt400"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt401"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt402"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt403"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt404"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt405"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt406"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt407"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt408"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt409"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt410"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt411"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt412"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt413"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt414"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt415"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt416"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt417"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><div class=CToolTip id="tt418"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the  legend.</div></div><div class=CToolTip id="tt419"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt420"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt421"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt422"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt423"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt424"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt425"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt426"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt427"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt428"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt429"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt430"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt431"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt432"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt433"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt434"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt435"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt436"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt437"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt438"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt439"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt440"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt441"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt442"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt443"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt444"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt445"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt446"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt447"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt448"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt449"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt450"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt451"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt452"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/General6.html.





















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General2.html#F">F</a> &middot; <a href="General2.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General3.html#I">I</a> &middot; <a href="General3.html#J">J</a> &middot; K &middot; <a href="General3.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General4.html#N">N</a> &middot; <a href="General4.html#O">O</a> &middot; <a href="General4.html#P">P</a> &middot; Q &middot; <a href="General4.html#R">R</a> &middot; <a href="General5.html#S">S</a> &middot; <a href="#T">T</a> &middot; <a href="#U">U</a> &middot; <a href="#V">V</a> &middot; <a href="#W">W</a> &middot; <a href="#X">X</a> &middot; <a href="#Y">Y</a> &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.text" id=link453 onMouseOver="ShowTip(event, 'tt453', 'link453')" onMouseOut="HideTip('tt453')" class=ISymbol>text</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" id=link454 onMouseOver="ShowTip(event, 'tt454', 'link454')" onMouseOut="HideTip('tt454')" class=ISymbol>textAlign</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>textColor</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" id=link455 onMouseOver="ShowTip(event, 'tt455', 'link455')" onMouseOut="HideTip('tt455')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link456 onMouseOver="ShowTip(event, 'tt456', 'link456')" onMouseOut="HideTip('tt456')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" id=link457 onMouseOver="ShowTip(event, 'tt457', 'link457')" onMouseOut="HideTip('tt457')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" id=link458 onMouseOver="ShowTip(event, 'tt458', 'link458')" onMouseOut="HideTip('tt458')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" id=link459 onMouseOver="ShowTip(event, 'tt459', 'link459')" onMouseOut="HideTip('tt459')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" id=link460 onMouseOver="ShowTip(event, 'tt460', 'link460')" onMouseOut="HideTip('tt460')" class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" id=link461 onMouseOver="ShowTip(event, 'tt461', 'link461')" onMouseOut="HideTip('tt461')" class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" id=link462 onMouseOver="ShowTip(event, 'tt462', 'link462')" onMouseOut="HideTip('tt462')" class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" id=link463 onMouseOver="ShowTip(event, 'tt463', 'link463')" onMouseOut="HideTip('tt463')" class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" id=link464 onMouseOver="ShowTip(event, 'tt464', 'link464')" onMouseOut="HideTip('tt464')" class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" id=link465 onMouseOver="ShowTip(event, 'tt465', 'link465')" onMouseOut="HideTip('tt465')" class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" id=link466 onMouseOver="ShowTip(event, 'tt466', 'link466')" onMouseOut="HideTip('tt466')" class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" id=link467 onMouseOver="ShowTip(event, 'tt467', 'link467')" onMouseOut="HideTip('tt467')" class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" id=link468 onMouseOver="ShowTip(event, 'tt468', 'link468')" onMouseOut="HideTip('tt468')" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" id=link469 onMouseOver="ShowTip(event, 'tt469', 'link469')" onMouseOut="HideTip('tt469')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.tickRenderer" id=link470 onMouseOver="ShowTip(event, 'tt470', 'link470')" onMouseOut="HideTip('tt470')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" id=link471 onMouseOver="ShowTip(event, 'tt471', 'link471')" onMouseOut="HideTip('tt471')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>ticks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" id=link472 onMouseOver="ShowTip(event, 'tt472', 'link472')" onMouseOut="HideTip('tt472')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" id=link473 onMouseOver="ShowTip(event, 'tt473', 'link473')" onMouseOut="HideTip('tt473')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickSpacing</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link474 onMouseOver="ShowTip(event, 'tt474', 'link474')" onMouseOut="HideTip('tt474')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" id=link475 onMouseOver="ShowTip(event, 'tt475', 'link475')" onMouseOut="HideTip('tt475')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" id=link476 onMouseOver="ShowTip(event, 'tt476', 'link476')" onMouseOut="HideTip('tt476')" class=ISymbol>title</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title" id=link477 onMouseOver="ShowTip(event, 'tt477', 'link477')" onMouseOut="HideTip('tt477')" class=ISymbol>Title</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" id=link478 onMouseOver="ShowTip(event, 'tt478', 'link478')" onMouseOut="HideTip('tt478')" class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" id=link479 onMouseOver="ShowTip(event, 'tt479', 'link479')" onMouseOut="HideTip('tt479')" class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" id=link480 onMouseOver="ShowTip(event, 'tt480', 'link480')" onMouseOut="HideTip('tt480')" class=ISymbol>tooltipFadeSpeed</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" id=link481 onMouseOver="ShowTip(event, 'tt481', 'link481')" onMouseOut="HideTip('tt481')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" id=link482 onMouseOver="ShowTip(event, 'tt482', 'link482')" onMouseOut="HideTip('tt482')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipLocation</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" id=link483 onMouseOver="ShowTip(event, 'tt483', 'link483')" onMouseOut="HideTip('tt483')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" id=link484 onMouseOver="ShowTip(event, 'tt484', 'link484')" onMouseOut="HideTip('tt484')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" id=link485 onMouseOver="ShowTip(event, 'tt485', 'link485')" onMouseOut="HideTip('tt485')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" id=link486 onMouseOver="ShowTip(event, 'tt486', 'link486')" onMouseOut="HideTip('tt486')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" id=link487 onMouseOver="ShowTip(event, 'tt487', 'link487')" onMouseOut="HideTip('tt487')" class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></td></tr><tr><td class=IHeading><a name="U"></a>U</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" id=link488 onMouseOver="ShowTip(event, 'tt488', 'link488')" onMouseOut="HideTip('tt488')" class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Usage" id=link489 onMouseOver="ShowTip(event, 'tt489', 'link489')" onMouseOut="HideTip('tt489')" class=ISymbol>Usage</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>useAxesFormatters</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" id=link490 onMouseOver="ShowTip(event, 'tt490', 'link490')" onMouseOut="HideTip('tt490')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" id=link491 onMouseOver="ShowTip(event, 'tt491', 'link491')" onMouseOut="HideTip('tt491')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" id=link492 onMouseOver="ShowTip(event, 'tt492', 'link492')" onMouseOut="HideTip('tt492')" class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" id=link493 onMouseOver="ShowTip(event, 'tt493', 'link493')" onMouseOut="HideTip('tt493')" class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" id=link494 onMouseOver="ShowTip(event, 'tt494', 'link494')" onMouseOut="HideTip('tt494')" class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" id=link495 onMouseOver="ShowTip(event, 'tt495', 'link495')" onMouseOut="HideTip('tt495')" class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" id=link496 onMouseOver="ShowTip(event, 'tt496', 'link496')" onMouseOut="HideTip('tt496')" class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Version" id=link497 onMouseOver="ShowTip(event, 'tt497', 'link497')" onMouseOut="HideTip('tt497')" class=ISymbol>Version</a></td></tr><tr><td class=IHeading><a name="W"></a>W</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" id=link498 onMouseOver="ShowTip(event, 'tt498', 'link498')" onMouseOut="HideTip('tt498')" class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" id=link499 onMouseOver="ShowTip(event, 'tt499', 'link499')" onMouseOut="HideTip('tt499')" class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" id=link500 onMouseOver="ShowTip(event, 'tt500', 'link500')" onMouseOut="HideTip('tt500')" class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=IHeading><a name="X"></a>X</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.xaxis" id=link501 onMouseOver="ShowTip(event, 'tt501', 'link501')" onMouseOut="HideTip('tt501')" class=ISymbol>xaxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" id=link502 onMouseOver="ShowTip(event, 'tt502', 'link502')" onMouseOut="HideTip('tt502')" class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" id=link503 onMouseOver="ShowTip(event, 'tt503', 'link503')" onMouseOut="HideTip('tt503')" class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=IHeading><a name="Y"></a>Y</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.yaxis" id=link504 onMouseOver="ShowTip(event, 'tt504', 'link504')" onMouseOut="HideTip('tt504')" class=ISymbol>yaxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" id=link505 onMouseOver="ShowTip(event, 'tt505', 'link505')" onMouseOut="HideTip('tt505')" class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" id=link506 onMouseOver="ShowTip(event, 'tt506', 'link506')" onMouseOut="HideTip('tt506')" class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" id=link507 onMouseOver="ShowTip(event, 'tt507', 'link507')" onMouseOut="HideTip('tt507')" class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" id=link508 onMouseOver="ShowTip(event, 'tt508', 'link508')" onMouseOut="HideTip('tt508')" class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link509 onMouseOver="ShowTip(event, 'tt509', 'link509')" onMouseOut="HideTip('tt509')" class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt453"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt454"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt455"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt456"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt457"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt458"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt459"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt460"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt461"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt462"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt463"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt464"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt465"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt466"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt467"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt468"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt469"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt470"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt471"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt472"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt473"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt474"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt475"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt476"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt477"><div class=CClass>Plot Title object. </div></div><div class=CToolTip id="tt478"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt479"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt480"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt481"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt482"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt483"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt484"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt485"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt486"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt487"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt488"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt489"><div class=CGeneric>See jqPlot Usage</div></div><div class=CToolTip id="tt490"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt491"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt492"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt493"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt494"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt495"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt496"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt497"><div class=CGeneric>0.9.7r635</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt498"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt499"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt500"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt501"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt502"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt503"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt504"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt505"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt506"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt507"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt508"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><div class=CToolTip id="tt509"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Hooks.html.





























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Hook Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Hook Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; D &middot; <a href="#E">E</a> &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks"  class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CHook>called at the end of legend draw, so plugins can add rows to the legend table.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt2"><div class=CHook>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt3"><div class=CHook>called after plot draw.</div></div><div class=CToolTip id="tt4"><div class=CHook>called after each series is drawn.</div></div><div class=CToolTip id="tt5"><div class=CHook>called after series shadows are drawn.</div></div><div class=CToolTip id="tt6"><div class=CHook>called after initialization.</div></div><div class=CToolTip id="tt7"><div class=CHook>called after user options are parsed.</div></div><div class=CToolTip id="tt8"><div class=CHook>called after series related options are parsed.</div></div><div class=CToolTip id="tt9"><div class=CHook>called after series is initialized.</div></div><div class=CToolTip id="tt10"><div class=CHook>called before plot draw.</div></div><div class=CToolTip id="tt11"><div class=CHook>called before the legend is drawn.</div></div><div class=CToolTip id="tt12"><div class=CHook>called before each series is drawn.</div></div><div class=CToolTip id="tt13"><div class=CHook>called before series shadows are drawn.</div></div><div class=CToolTip id="tt14"><div class=CHook>called before initialization.</div></div><div class=CToolTip id="tt15"><div class=CHook>called before user options are parsed.</div></div><div class=CToolTip id="tt16"><div class=CHook>called before series related options are parsed.</div></div><div class=CToolTip id="tt17"><div class=CHook>called before series is initialized.</div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Hooks</div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Properties.html.





































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="#C">C</a> &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties2.html#G">G</a> &middot; <a href="Properties2.html#H">H</a> &middot; <a href="Properties2.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties2.html#L">L</a> &middot; <a href="Properties3.html#M">M</a> &middot; <a href="Properties3.html#N">N</a> &middot; <a href="Properties3.html#O">O</a> &middot; <a href="Properties3.html#P">P</a> &middot; Q &middot; <a href="Properties3.html#R">R</a> &middot; <a href="Properties4.html#S">S</a> &middot; <a href="Properties5.html#T">T</a> &middot; <a href="Properties5.html#U">U</a> &middot; <a href="Properties5.html#V">V</a> &middot; <a href="Properties5.html#W">W</a> &middot; <a href="Properties5.html#X">X</a> &middot; <a href="Properties5.html#Y">Y</a> &middot; <a href="Properties5.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>angle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>background</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>barPadding</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>border</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderWidth</span><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" id=link31 onMouseOver="ShowTip(event, 'tt31', 'link31')" onMouseOut="HideTip('tt31')" class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" id=link32 onMouseOver="ShowTip(event, 'tt32', 'link32')" onMouseOut="HideTip('tt32')" class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" id=link33 onMouseOver="ShowTip(event, 'tt33', 'link33')" onMouseOut="HideTip('tt33')" class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" id=link34 onMouseOver="ShowTip(event, 'tt34', 'link34')" onMouseOut="HideTip('tt34')" class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" id=link35 onMouseOver="ShowTip(event, 'tt35', 'link35')" onMouseOut="HideTip('tt35')" class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" id=link36 onMouseOver="ShowTip(event, 'tt36', 'link36')" onMouseOut="HideTip('tt36')" class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" id=link37 onMouseOver="ShowTip(event, 'tt37', 'link37')" onMouseOut="HideTip('tt37')" class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>color</span><div class=ISubIndex><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" id=link38 onMouseOver="ShowTip(event, 'tt38', 'link38')" onMouseOut="HideTip('tt38')" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" id=link39 onMouseOver="ShowTip(event, 'tt39', 'link39')" onMouseOut="HideTip('tt39')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" id=link40 onMouseOver="ShowTip(event, 'tt40', 'link40')" onMouseOut="HideTip('tt40')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" id=link41 onMouseOver="ShowTip(event, 'tt41', 'link41')" onMouseOut="HideTip('tt41')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" id=link42 onMouseOver="ShowTip(event, 'tt42', 'link42')" onMouseOut="HideTip('tt42')" class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" id=link43 onMouseOver="ShowTip(event, 'tt43', 'link43')" onMouseOut="HideTip('tt43')" class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" id=link44 onMouseOver="ShowTip(event, 'tt44', 'link44')" onMouseOut="HideTip('tt44')" class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" id=link45 onMouseOver="ShowTip(event, 'tt45', 'link45')" onMouseOut="HideTip('tt45')" class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" id=link46 onMouseOver="ShowTip(event, 'tt46', 'link46')" onMouseOut="HideTip('tt46')" class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" id=link47 onMouseOver="ShowTip(event, 'tt47', 'link47')" onMouseOut="HideTip('tt47')" class=ISymbol>data</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" id=link48 onMouseOver="ShowTip(event, 'tt48', 'link48')" onMouseOut="HideTip('tt48')" class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" id=link49 onMouseOver="ShowTip(event, 'tt49', 'link49')" onMouseOut="HideTip('tt49')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link50 onMouseOver="ShowTip(event, 'tt50', 'link50')" onMouseOut="HideTip('tt50')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" id=link51 onMouseOver="ShowTip(event, 'tt51', 'link51')" onMouseOut="HideTip('tt51')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelNudge</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" id=link52 onMouseOver="ShowTip(event, 'tt52', 'link52')" onMouseOut="HideTip('tt52')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" id=link53 onMouseOver="ShowTip(event, 'tt53', 'link53')" onMouseOut="HideTip('tt53')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelPositionFactor</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link54 onMouseOver="ShowTip(event, 'tt54', 'link54')" onMouseOut="HideTip('tt54')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link55 onMouseOver="ShowTip(event, 'tt55', 'link55')" onMouseOut="HideTip('tt55')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" id=link56 onMouseOver="ShowTip(event, 'tt56', 'link56')" onMouseOut="HideTip('tt56')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" id=link57 onMouseOver="ShowTip(event, 'tt57', 'link57')" onMouseOut="HideTip('tt57')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" id=link58 onMouseOver="ShowTip(event, 'tt58', 'link58')" onMouseOut="HideTip('tt58')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelThreshold</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" id=link59 onMouseOver="ShowTip(event, 'tt59', 'link59')" onMouseOut="HideTip('tt59')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link60 onMouseOver="ShowTip(event, 'tt60', 'link60')" onMouseOut="HideTip('tt60')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" id=link61 onMouseOver="ShowTip(event, 'tt61', 'link61')" onMouseOut="HideTip('tt61')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" id=link62 onMouseOver="ShowTip(event, 'tt62', 'link62')" onMouseOut="HideTip('tt62')" class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" id=link63 onMouseOver="ShowTip(event, 'tt63', 'link63')" onMouseOut="HideTip('tt63')" class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" id=link64 onMouseOver="ShowTip(event, 'tt64', 'link64')" onMouseOut="HideTip('tt64')" class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>diameter</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" id=link65 onMouseOver="ShowTip(event, 'tt65', 'link65')" onMouseOut="HideTip('tt65')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" id=link66 onMouseOver="ShowTip(event, 'tt66', 'link66')" onMouseOut="HideTip('tt66')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" id=link67 onMouseOver="ShowTip(event, 'tt67', 'link67')" onMouseOut="HideTip('tt67')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" id=link68 onMouseOver="ShowTip(event, 'tt68', 'link68')" onMouseOut="HideTip('tt68')" class=ISymbol>disableIEFading</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" id=link69 onMouseOver="ShowTip(event, 'tt69', 'link69')" onMouseOut="HideTip('tt69')" class=ISymbol>disableStack</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" id=link70 onMouseOver="ShowTip(event, 'tt70', 'link70')" onMouseOut="HideTip('tt70')" class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" id=link71 onMouseOver="ShowTip(event, 'tt71', 'link71')" onMouseOut="HideTip('tt71')" class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" id=link72 onMouseOver="ShowTip(event, 'tt72', 'link72')" onMouseOut="HideTip('tt72')" class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" id=link73 onMouseOver="ShowTip(event, 'tt73', 'link73')" onMouseOut="HideTip('tt73')" class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>enableFontSupport</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link74 onMouseOver="ShowTip(event, 'tt74', 'link74')" onMouseOut="HideTip('tt74')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link75 onMouseOver="ShowTip(event, 'tt75', 'link75')" onMouseOut="HideTip('tt75')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHtml</span><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" id=link76 onMouseOver="ShowTip(event, 'tt76', 'link76')" onMouseOut="HideTip('tt76')" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" id=link77 onMouseOver="ShowTip(event, 'tt77', 'link77')" onMouseOut="HideTip('tt77')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHTML</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" id=link78 onMouseOver="ShowTip(event, 'tt78', 'link78')" onMouseOut="HideTip('tt78')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" id=link79 onMouseOver="ShowTip(event, 'tt79', 'link79')" onMouseOut="HideTip('tt79')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>Autoscale the axis min and max values to provide sensible tick spacing. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt11"><div class=CProperty>default options that will be applied to all axes. </div></div><div class=CToolTip id="tt12"><div class=CProperty>Default properties which will be applied directly to the series.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt28"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt29"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt30"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Not implemented. </div></div><div class=CToolTip id="tt31"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><div class=CToolTip id="tt32"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt33"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt34"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt35"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt36"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt37"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt38"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt40"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt51"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt52"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt53"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt54"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.5</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt55"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt56"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt61"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt62"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><div class=CToolTip id="tt69"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Properties2.html.





































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties.html#D">D</a> &middot; <a href="Properties.html#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; <a href="#I">I</a> &middot; J &middot; K &middot; <a href="#L">L</a> &middot; <a href="Properties3.html#M">M</a> &middot; <a href="Properties3.html#N">N</a> &middot; <a href="Properties3.html#O">O</a> &middot; <a href="Properties3.html#P">P</a> &middot; Q &middot; <a href="Properties3.html#R">R</a> &middot; <a href="Properties4.html#S">S</a> &middot; <a href="Properties5.html#T">T</a> &middot; <a href="Properties5.html#U">U</a> &middot; <a href="Properties5.html#V">V</a> &middot; <a href="Properties5.html#W">W</a> &middot; <a href="Properties5.html#X">X</a> &middot; <a href="Properties5.html#Y">Y</a> &middot; <a href="Properties5.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" id=link80 onMouseOver="ShowTip(event, 'tt80', 'link80')" onMouseOut="HideTip('tt80')" class=ISymbol>fadeTooltip</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fill</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" id=link81 onMouseOver="ShowTip(event, 'tt81', 'link81')" onMouseOut="HideTip('tt81')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" id=link82 onMouseOver="ShowTip(event, 'tt82', 'link82')" onMouseOut="HideTip('tt82')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" id=link83 onMouseOver="ShowTip(event, 'tt83', 'link83')" onMouseOut="HideTip('tt83')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" id=link84 onMouseOver="ShowTip(event, 'tt84', 'link84')" onMouseOut="HideTip('tt84')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" id=link85 onMouseOver="ShowTip(event, 'tt85', 'link85')" onMouseOut="HideTip('tt85')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" id=link86 onMouseOver="ShowTip(event, 'tt86', 'link86')" onMouseOut="HideTip('tt86')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" id=link87 onMouseOver="ShowTip(event, 'tt87', 'link87')" onMouseOut="HideTip('tt87')" class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" id=link88 onMouseOver="ShowTip(event, 'tt88', 'link88')" onMouseOut="HideTip('tt88')" class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" id=link89 onMouseOver="ShowTip(event, 'tt89', 'link89')" onMouseOut="HideTip('tt89')" class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillColor" id=link90 onMouseOver="ShowTip(event, 'tt90', 'link90')" onMouseOut="HideTip('tt90')" class=ISymbol>fillColor</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" id=link91 onMouseOver="ShowTip(event, 'tt91', 'link91')" onMouseOut="HideTip('tt91')" class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" id=link92 onMouseOver="ShowTip(event, 'tt92', 'link92')" onMouseOut="HideTip('tt92')" class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" id=link93 onMouseOver="ShowTip(event, 'tt93', 'link93')" onMouseOut="HideTip('tt93')" class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" id=link94 onMouseOver="ShowTip(event, 'tt94', 'link94')" onMouseOut="HideTip('tt94')" class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" id=link95 onMouseOver="ShowTip(event, 'tt95', 'link95')" onMouseOut="HideTip('tt95')" class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" id=link96 onMouseOver="ShowTip(event, 'tt96', 'link96')" onMouseOut="HideTip('tt96')" class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" id=link97 onMouseOver="ShowTip(event, 'tt97', 'link97')" onMouseOut="HideTip('tt97')" class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontFamily</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" id=link98 onMouseOver="ShowTip(event, 'tt98', 'link98')" onMouseOut="HideTip('tt98')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link99 onMouseOver="ShowTip(event, 'tt99', 'link99')" onMouseOut="HideTip('tt99')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link100 onMouseOver="ShowTip(event, 'tt100', 'link100')" onMouseOut="HideTip('tt100')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" id=link101 onMouseOver="ShowTip(event, 'tt101', 'link101')" onMouseOut="HideTip('tt101')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" id=link102 onMouseOver="ShowTip(event, 'tt102', 'link102')" onMouseOut="HideTip('tt102')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" id=link103 onMouseOver="ShowTip(event, 'tt103', 'link103')" onMouseOut="HideTip('tt103')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link104 onMouseOver="ShowTip(event, 'tt104', 'link104')" onMouseOut="HideTip('tt104')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link105 onMouseOver="ShowTip(event, 'tt105', 'link105')" onMouseOut="HideTip('tt105')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" id=link106 onMouseOver="ShowTip(event, 'tt106', 'link106')" onMouseOut="HideTip('tt106')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" id=link107 onMouseOver="ShowTip(event, 'tt107', 'link107')" onMouseOut="HideTip('tt107')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" id=link108 onMouseOver="ShowTip(event, 'tt108', 'link108')" onMouseOut="HideTip('tt108')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontStretch</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link109 onMouseOver="ShowTip(event, 'tt109', 'link109')" onMouseOut="HideTip('tt109')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link110 onMouseOver="ShowTip(event, 'tt110', 'link110')" onMouseOut="HideTip('tt110')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontWeight</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link111 onMouseOver="ShowTip(event, 'tt111', 'link111')" onMouseOut="HideTip('tt111')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link112 onMouseOver="ShowTip(event, 'tt112', 'link112')" onMouseOut="HideTip('tt112')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatString</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" id=link113 onMouseOver="ShowTip(event, 'tt113', 'link113')" onMouseOut="HideTip('tt113')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" id=link114 onMouseOver="ShowTip(event, 'tt114', 'link114')" onMouseOut="HideTip('tt114')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" id=link115 onMouseOver="ShowTip(event, 'tt115', 'link115')" onMouseOut="HideTip('tt115')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" id=link116 onMouseOver="ShowTip(event, 'tt116', 'link116')" onMouseOut="HideTip('tt116')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatter</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" id=link117 onMouseOver="ShowTip(event, 'tt117', 'link117')" onMouseOut="HideTip('tt117')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" id=link118 onMouseOver="ShowTip(event, 'tt118', 'link118')" onMouseOut="HideTip('tt118')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" id=link119 onMouseOver="ShowTip(event, 'tt119', 'link119')" onMouseOut="HideTip('tt119')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" id=link120 onMouseOver="ShowTip(event, 'tt120', 'link120')" onMouseOut="HideTip('tt120')" class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" id=link121 onMouseOver="ShowTip(event, 'tt121', 'link121')" onMouseOut="HideTip('tt121')" class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" id=link122 onMouseOver="ShowTip(event, 'tt122', 'link122')" onMouseOut="HideTip('tt122')" class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" id=link123 onMouseOver="ShowTip(event, 'tt123', 'link123')" onMouseOut="HideTip('tt123')" class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" id=link124 onMouseOver="ShowTip(event, 'tt124', 'link124')" onMouseOut="HideTip('tt124')" class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" id=link125 onMouseOver="ShowTip(event, 'tt125', 'link125')" onMouseOut="HideTip('tt125')" class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" id=link126 onMouseOver="ShowTip(event, 'tt126', 'link126')" onMouseOut="HideTip('tt126')" class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightColors</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" id=link127 onMouseOver="ShowTip(event, 'tt127', 'link127')" onMouseOut="HideTip('tt127')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" id=link128 onMouseOver="ShowTip(event, 'tt128', 'link128')" onMouseOut="HideTip('tt128')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" id=link129 onMouseOver="ShowTip(event, 'tt129', 'link129')" onMouseOut="HideTip('tt129')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" id=link130 onMouseOver="ShowTip(event, 'tt130', 'link130')" onMouseOut="HideTip('tt130')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" id=link131 onMouseOver="ShowTip(event, 'tt131', 'link131')" onMouseOut="HideTip('tt131')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseDown</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" id=link132 onMouseOver="ShowTip(event, 'tt132', 'link132')" onMouseOut="HideTip('tt132')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" id=link133 onMouseOver="ShowTip(event, 'tt133', 'link133')" onMouseOut="HideTip('tt133')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" id=link134 onMouseOver="ShowTip(event, 'tt134', 'link134')" onMouseOut="HideTip('tt134')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" id=link135 onMouseOver="ShowTip(event, 'tt135', 'link135')" onMouseOut="HideTip('tt135')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" id=link136 onMouseOver="ShowTip(event, 'tt136', 'link136')" onMouseOut="HideTip('tt136')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" id=link137 onMouseOver="ShowTip(event, 'tt137', 'link137')" onMouseOut="HideTip('tt137')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseOver</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" id=link138 onMouseOver="ShowTip(event, 'tt138', 'link138')" onMouseOut="HideTip('tt138')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" id=link139 onMouseOver="ShowTip(event, 'tt139', 'link139')" onMouseOut="HideTip('tt139')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" id=link140 onMouseOver="ShowTip(event, 'tt140', 'link140')" onMouseOut="HideTip('tt140')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" id=link141 onMouseOver="ShowTip(event, 'tt141', 'link141')" onMouseOut="HideTip('tt141')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" id=link142 onMouseOver="ShowTip(event, 'tt142', 'link142')" onMouseOut="HideTip('tt142')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" id=link143 onMouseOver="ShowTip(event, 'tt143', 'link143')" onMouseOut="HideTip('tt143')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" id=link144 onMouseOver="ShowTip(event, 'tt144', 'link144')" onMouseOut="HideTip('tt144')" class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" id=link145 onMouseOver="ShowTip(event, 'tt145', 'link145')" onMouseOut="HideTip('tt145')" class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.index" id=link146 onMouseOver="ShowTip(event, 'tt146', 'link146')" onMouseOut="HideTip('tt146')" class=ISymbol>index</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" id=link147 onMouseOver="ShowTip(event, 'tt147', 'link147')" onMouseOut="HideTip('tt147')" class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" id=link148 onMouseOver="ShowTip(event, 'tt148', 'link148')" onMouseOut="HideTip('tt148')" class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" id=link149 onMouseOver="ShowTip(event, 'tt149', 'link149')" onMouseOut="HideTip('tt149')" class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" id=link150 onMouseOver="ShowTip(event, 'tt150', 'link150')" onMouseOut="HideTip('tt150')" class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link151 onMouseOver="ShowTip(event, 'tt151', 'link151')" onMouseOut="HideTip('tt151')" class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link152 onMouseOver="ShowTip(event, 'tt152', 'link152')" onMouseOut="HideTip('tt152')" class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" id=link153 onMouseOver="ShowTip(event, 'tt153', 'link153')" onMouseOut="HideTip('tt153')" class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isarc</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" id=link154 onMouseOver="ShowTip(event, 'tt154', 'link154')" onMouseOut="HideTip('tt154')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" id=link155 onMouseOver="ShowTip(event, 'tt155', 'link155')" onMouseOut="HideTip('tt155')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isMinorTick</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" id=link156 onMouseOver="ShowTip(event, 'tt156', 'link156')" onMouseOut="HideTip('tt156')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link157 onMouseOver="ShowTip(event, 'tt157', 'link157')" onMouseOut="HideTip('tt157')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>label</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" id=link158 onMouseOver="ShowTip(event, 'tt158', 'link158')" onMouseOut="HideTip('tt158')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" id=link159 onMouseOver="ShowTip(event, 'tt159', 'link159')" onMouseOut="HideTip('tt159')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" id=link160 onMouseOver="ShowTip(event, 'tt160', 'link160')" onMouseOut="HideTip('tt160')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" id=link161 onMouseOver="ShowTip(event, 'tt161', 'link161')" onMouseOut="HideTip('tt161')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" id=link162 onMouseOver="ShowTip(event, 'tt162', 'link162')" onMouseOut="HideTip('tt162')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" id=link163 onMouseOver="ShowTip(event, 'tt163', 'link163')" onMouseOut="HideTip('tt163')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link164 onMouseOver="ShowTip(event, 'tt164', 'link164')" onMouseOut="HideTip('tt164')" class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" id=link165 onMouseOver="ShowTip(event, 'tt165', 'link165')" onMouseOut="HideTip('tt165')" class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labelPosition</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link166 onMouseOver="ShowTip(event, 'tt166', 'link166')" onMouseOut="HideTip('tt166')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" id=link167 onMouseOver="ShowTip(event, 'tt167', 'link167')" onMouseOut="HideTip('tt167')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" id=link168 onMouseOver="ShowTip(event, 'tt168', 'link168')" onMouseOut="HideTip('tt168')" class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labels</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" id=link169 onMouseOver="ShowTip(event, 'tt169', 'link169')" onMouseOut="HideTip('tt169')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" id=link170 onMouseOver="ShowTip(event, 'tt170', 'link170')" onMouseOut="HideTip('tt170')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" id=link171 onMouseOver="ShowTip(event, 'tt171', 'link171')" onMouseOut="HideTip('tt171')" class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" id=link172 onMouseOver="ShowTip(event, 'tt172', 'link172')" onMouseOut="HideTip('tt172')" class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineCap</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" id=link173 onMouseOver="ShowTip(event, 'tt173', 'link173')" onMouseOut="HideTip('tt173')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" id=link174 onMouseOver="ShowTip(event, 'tt174', 'link174')" onMouseOut="HideTip('tt174')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineJoin</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" id=link175 onMouseOver="ShowTip(event, 'tt175', 'link175')" onMouseOut="HideTip('tt175')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" id=link176 onMouseOver="ShowTip(event, 'tt176', 'link176')" onMouseOut="HideTip('tt176')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" id=link177 onMouseOver="ShowTip(event, 'tt177', 'link177')" onMouseOut="HideTip('tt177')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" id=link178 onMouseOver="ShowTip(event, 'tt178', 'link178')" onMouseOut="HideTip('tt178')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" id=link179 onMouseOver="ShowTip(event, 'tt179', 'link179')" onMouseOut="HideTip('tt179')" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" id=link180 onMouseOver="ShowTip(event, 'tt180', 'link180')" onMouseOut="HideTip('tt180')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" id=link181 onMouseOver="ShowTip(event, 'tt181', 'link181')" onMouseOut="HideTip('tt181')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" id=link182 onMouseOver="ShowTip(event, 'tt182', 'link182')" onMouseOut="HideTip('tt182')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" id=link183 onMouseOver="ShowTip(event, 'tt183', 'link183')" onMouseOut="HideTip('tt183')" class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>location</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" id=link184 onMouseOver="ShowTip(event, 'tt184', 'link184')" onMouseOut="HideTip('tt184')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" id=link185 onMouseOver="ShowTip(event, 'tt185', 'link185')" onMouseOut="HideTip('tt185')" class=IParent>Legend</a></div></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt86"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt90"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt94"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt96"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt104"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt105"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt108"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt109"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt111"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt115"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt116"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt120"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><div class=CToolTip id="tt125"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt129"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt132"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt136"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt137"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt138"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt139"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt140"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt141"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt142"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt143"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt144"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt145"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt146"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt147"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of teh donut, auto calculated by default. </div></div><div class=CToolTip id="tt148"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt149"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt150"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt151"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt152"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt153"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt154"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt155"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt156"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt157"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt158"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt159"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt160"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt161"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt162"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt163"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt164"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt165"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt166"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt167"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt168"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt169"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt170"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt171"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt172"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt173"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt174"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt175"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt176"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt177"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt178"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt179"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks.</div></div><div class=CToolTip id="tt180"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt181"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt182"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt183"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt184"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt185"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Properties3.html.





































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties.html#D">D</a> &middot; <a href="Properties.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties2.html#G">G</a> &middot; <a href="Properties2.html#H">H</a> &middot; <a href="Properties2.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties2.html#L">L</a> &middot; <a href="#M">M</a> &middot; <a href="#N">N</a> &middot; <a href="#O">O</a> &middot; <a href="#P">P</a> &middot; Q &middot; <a href="#R">R</a> &middot; <a href="Properties4.html#S">S</a> &middot; <a href="Properties5.html#T">T</a> &middot; <a href="Properties5.html#U">U</a> &middot; <a href="Properties5.html#V">V</a> &middot; <a href="Properties5.html#W">W</a> &middot; <a href="Properties5.html#X">X</a> &middot; <a href="Properties5.html#Y">Y</a> &middot; <a href="Properties5.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" id=link186 onMouseOver="ShowTip(event, 'tt186', 'link186')" onMouseOut="HideTip('tt186')" class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" id=link187 onMouseOver="ShowTip(event, 'tt187', 'link187')" onMouseOut="HideTip('tt187')" class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" id=link188 onMouseOver="ShowTip(event, 'tt188', 'link188')" onMouseOut="HideTip('tt188')" class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" id=link189 onMouseOver="ShowTip(event, 'tt189', 'link189')" onMouseOut="HideTip('tt189')" class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>mark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" id=link190 onMouseOver="ShowTip(event, 'tt190', 'link190')" onMouseOut="HideTip('tt190')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" id=link191 onMouseOver="ShowTip(event, 'tt191', 'link191')" onMouseOut="HideTip('tt191')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" id=link192 onMouseOver="ShowTip(event, 'tt192', 'link192')" onMouseOut="HideTip('tt192')" class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markerRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" id=link193 onMouseOver="ShowTip(event, 'tt193', 'link193')" onMouseOut="HideTip('tt193')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" id=link194 onMouseOver="ShowTip(event, 'tt194', 'link194')" onMouseOut="HideTip('tt194')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" id=link195 onMouseOver="ShowTip(event, 'tt195', 'link195')" onMouseOut="HideTip('tt195')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" id=link196 onMouseOver="ShowTip(event, 'tt196', 'link196')" onMouseOut="HideTip('tt196')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" id=link197 onMouseOver="ShowTip(event, 'tt197', 'link197')" onMouseOut="HideTip('tt197')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>max</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" id=link198 onMouseOver="ShowTip(event, 'tt198', 'link198')" onMouseOut="HideTip('tt198')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" id=link199 onMouseOver="ShowTip(event, 'tt199', 'link199')" onMouseOut="HideTip('tt199')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>min</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" id=link200 onMouseOver="ShowTip(event, 'tt200', 'link200')" onMouseOut="HideTip('tt200')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" id=link201 onMouseOver="ShowTip(event, 'tt201', 'link201')" onMouseOut="HideTip('tt201')" class=IParent>Axis</a></div></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" id=link202 onMouseOver="ShowTip(event, 'tt202', 'link202')" onMouseOut="HideTip('tt202')" class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" id=link203 onMouseOver="ShowTip(event, 'tt203', 'link203')" onMouseOut="HideTip('tt203')" class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" id=link204 onMouseOver="ShowTip(event, 'tt204', 'link204')" onMouseOut="HideTip('tt204')" class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberColumns</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" id=link205 onMouseOver="ShowTip(event, 'tt205', 'link205')" onMouseOut="HideTip('tt205')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" id=link206 onMouseOver="ShowTip(event, 'tt206', 'link206')" onMouseOut="HideTip('tt206')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" id=link207 onMouseOver="ShowTip(event, 'tt207', 'link207')" onMouseOut="HideTip('tt207')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" id=link208 onMouseOver="ShowTip(event, 'tt208', 'link208')" onMouseOut="HideTip('tt208')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" id=link209 onMouseOver="ShowTip(event, 'tt209', 'link209')" onMouseOut="HideTip('tt209')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberRows</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" id=link210 onMouseOver="ShowTip(event, 'tt210', 'link210')" onMouseOut="HideTip('tt210')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" id=link211 onMouseOver="ShowTip(event, 'tt211', 'link211')" onMouseOut="HideTip('tt211')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" id=link212 onMouseOver="ShowTip(event, 'tt212', 'link212')" onMouseOut="HideTip('tt212')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" id=link213 onMouseOver="ShowTip(event, 'tt213', 'link213')" onMouseOut="HideTip('tt213')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" id=link214 onMouseOver="ShowTip(event, 'tt214', 'link214')" onMouseOut="HideTip('tt214')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" id=link215 onMouseOver="ShowTip(event, 'tt215', 'link215')" onMouseOut="HideTip('tt215')" class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" id=link216 onMouseOver="ShowTip(event, 'tt216', 'link216')" onMouseOut="HideTip('tt216')" class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" id=link217 onMouseOver="ShowTip(event, 'tt217', 'link217')" onMouseOut="HideTip('tt217')" class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" id=link218 onMouseOver="ShowTip(event, 'tt218', 'link218')" onMouseOut="HideTip('tt218')" class=ISymbol>pad</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>padding</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" id=link219 onMouseOver="ShowTip(event, 'tt219', 'link219')" onMouseOut="HideTip('tt219')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" id=link220 onMouseOver="ShowTip(event, 'tt220', 'link220')" onMouseOut="HideTip('tt220')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" id=link221 onMouseOver="ShowTip(event, 'tt221', 'link221')" onMouseOut="HideTip('tt221')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" id=link222 onMouseOver="ShowTip(event, 'tt222', 'link222')" onMouseOut="HideTip('tt222')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" id=link223 onMouseOver="ShowTip(event, 'tt223', 'link223')" onMouseOut="HideTip('tt223')" class=ISymbol>padMax</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" id=link224 onMouseOver="ShowTip(event, 'tt224', 'link224')" onMouseOut="HideTip('tt224')" class=ISymbol>padMin</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link225 onMouseOver="ShowTip(event, 'tt225', 'link225')" onMouseOut="HideTip('tt225')" class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" id=link226 onMouseOver="ShowTip(event, 'tt226', 'link226')" onMouseOut="HideTip('tt226')" class=ISymbol>placement</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" id=link227 onMouseOver="ShowTip(event, 'tt227', 'link227')" onMouseOut="HideTip('tt227')" class=ISymbol>predraw</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>prefix</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" id=link228 onMouseOver="ShowTip(event, 'tt228', 'link228')" onMouseOut="HideTip('tt228')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" id=link229 onMouseOver="ShowTip(event, 'tt229', 'link229')" onMouseOut="HideTip('tt229')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>pt2px</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link230 onMouseOver="ShowTip(event, 'tt230', 'link230')" onMouseOut="HideTip('tt230')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link231 onMouseOver="ShowTip(event, 'tt231', 'link231')" onMouseOut="HideTip('tt231')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>renderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" id=link232 onMouseOver="ShowTip(event, 'tt232', 'link232')" onMouseOut="HideTip('tt232')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" id=link233 onMouseOver="ShowTip(event, 'tt233', 'link233')" onMouseOut="HideTip('tt233')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" id=link234 onMouseOver="ShowTip(event, 'tt234', 'link234')" onMouseOut="HideTip('tt234')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" id=link235 onMouseOver="ShowTip(event, 'tt235', 'link235')" onMouseOut="HideTip('tt235')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" id=link236 onMouseOver="ShowTip(event, 'tt236', 'link236')" onMouseOut="HideTip('tt236')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>rendererOptions</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" id=link237 onMouseOver="ShowTip(event, 'tt237', 'link237')" onMouseOut="HideTip('tt237')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" id=link238 onMouseOver="ShowTip(event, 'tt238', 'link238')" onMouseOut="HideTip('tt238')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" id=link239 onMouseOver="ShowTip(event, 'tt239', 'link239')" onMouseOut="HideTip('tt239')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" id=link240 onMouseOver="ShowTip(event, 'tt240', 'link240')" onMouseOut="HideTip('tt240')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" id=link241 onMouseOver="ShowTip(event, 'tt241', 'link241')" onMouseOut="HideTip('tt241')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" id=link242 onMouseOver="ShowTip(event, 'tt242', 'link242')" onMouseOut="HideTip('tt242')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" id=link243 onMouseOver="ShowTip(event, 'tt243', 'link243')" onMouseOut="HideTip('tt243')" class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" id=link244 onMouseOver="ShowTip(event, 'tt244', 'link244')" onMouseOut="HideTip('tt244')" class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" id=link245 onMouseOver="ShowTip(event, 'tt245', 'link245')" onMouseOut="HideTip('tt245')" class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" id=link246 onMouseOver="ShowTip(event, 'tt246', 'link246')" onMouseOut="HideTip('tt246')" class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt186"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt187"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt188"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt189"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt190"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt191"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt192"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt193"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt194"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt195"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt196"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt197"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt198"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt199"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max=null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt200"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt201"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min=null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt202"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt203"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt204"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt205"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt206"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt207"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt208"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt209"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt210"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt211"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt212"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt213"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt214"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt215"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt216"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt217"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt218"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt219"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt220"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt221"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt222"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt223"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt224"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt225"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the  min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><div class=CToolTip id="tt226"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt227"><div class=CProperty>Wether to draw the legend before the series or not. </div></div><div class=CToolTip id="tt228"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>string appended to the tick label if no formatString is specified.</div></div><div class=CToolTip id="tt229"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>string appended to the tick label if no formatString is specified.</div></div><div class=CToolTip id="tt230"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><div class=CToolTip id="tt231"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt232"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt233"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt234"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt235"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt236"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt237"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt238"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt239"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt240"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt241"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt242"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt243"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt244"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt245"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt246"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Properties4.html.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties.html#D">D</a> &middot; <a href="Properties.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties2.html#G">G</a> &middot; <a href="Properties2.html#H">H</a> &middot; <a href="Properties2.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties2.html#L">L</a> &middot; <a href="Properties3.html#M">M</a> &middot; <a href="Properties3.html#N">N</a> &middot; <a href="Properties3.html#O">O</a> &middot; <a href="Properties3.html#P">P</a> &middot; Q &middot; <a href="Properties3.html#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="Properties5.html#T">T</a> &middot; <a href="Properties5.html#U">U</a> &middot; <a href="Properties5.html#V">V</a> &middot; <a href="Properties5.html#W">W</a> &middot; <a href="Properties5.html#X">X</a> &middot; <a href="Properties5.html#Y">Y</a> &middot; <a href="Properties5.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" id=link247 onMouseOver="ShowTip(event, 'tt247', 'link247')" onMouseOut="HideTip('tt247')" class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" id=link248 onMouseOver="ShowTip(event, 'tt248', 'link248')" onMouseOut="HideTip('tt248')" class=ISymbol>series</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" id=link249 onMouseOver="ShowTip(event, 'tt249', 'link249')" onMouseOut="HideTip('tt249')" class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" id=link250 onMouseOver="ShowTip(event, 'tt250', 'link250')" onMouseOut="HideTip('tt250')" class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" id=link251 onMouseOver="ShowTip(event, 'tt251', 'link251')" onMouseOut="HideTip('tt251')" class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" id=link252 onMouseOver="ShowTip(event, 'tt252', 'link252')" onMouseOut="HideTip('tt252')" class=ISymbol>seriesToggle</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadow</span><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" id=link253 onMouseOver="ShowTip(event, 'tt253', 'link253')" onMouseOut="HideTip('tt253')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" id=link254 onMouseOver="ShowTip(event, 'tt254', 'link254')" onMouseOut="HideTip('tt254')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" id=link255 onMouseOver="ShowTip(event, 'tt255', 'link255')" onMouseOut="HideTip('tt255')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadow" id=link256 onMouseOver="ShowTip(event, 'tt256', 'link256')" onMouseOut="HideTip('tt256')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAlpha</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" id=link257 onMouseOver="ShowTip(event, 'tt257', 'link257')" onMouseOut="HideTip('tt257')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" id=link258 onMouseOver="ShowTip(event, 'tt258', 'link258')" onMouseOut="HideTip('tt258')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" id=link259 onMouseOver="ShowTip(event, 'tt259', 'link259')" onMouseOut="HideTip('tt259')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" id=link260 onMouseOver="ShowTip(event, 'tt260', 'link260')" onMouseOut="HideTip('tt260')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link261 onMouseOver="ShowTip(event, 'tt261', 'link261')" onMouseOut="HideTip('tt261')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" id=link262 onMouseOver="ShowTip(event, 'tt262', 'link262')" onMouseOut="HideTip('tt262')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" id=link263 onMouseOver="ShowTip(event, 'tt263', 'link263')" onMouseOut="HideTip('tt263')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" id=link264 onMouseOver="ShowTip(event, 'tt264', 'link264')" onMouseOut="HideTip('tt264')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" id=link265 onMouseOver="ShowTip(event, 'tt265', 'link265')" onMouseOut="HideTip('tt265')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAngle</span><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" id=link266 onMouseOver="ShowTip(event, 'tt266', 'link266')" onMouseOut="HideTip('tt266')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" id=link267 onMouseOver="ShowTip(event, 'tt267', 'link267')" onMouseOut="HideTip('tt267')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" id=link268 onMouseOver="ShowTip(event, 'tt268', 'link268')" onMouseOut="HideTip('tt268')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" id=link269 onMouseOver="ShowTip(event, 'tt269', 'link269')" onMouseOut="HideTip('tt269')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" id=link270 onMouseOver="ShowTip(event, 'tt270', 'link270')" onMouseOut="HideTip('tt270')" class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowDepth</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" id=link271 onMouseOver="ShowTip(event, 'tt271', 'link271')" onMouseOut="HideTip('tt271')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" id=link272 onMouseOver="ShowTip(event, 'tt272', 'link272')" onMouseOut="HideTip('tt272')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" id=link273 onMouseOver="ShowTip(event, 'tt273', 'link273')" onMouseOut="HideTip('tt273')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" id=link274 onMouseOver="ShowTip(event, 'tt274', 'link274')" onMouseOut="HideTip('tt274')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link275 onMouseOver="ShowTip(event, 'tt275', 'link275')" onMouseOut="HideTip('tt275')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" id=link276 onMouseOver="ShowTip(event, 'tt276', 'link276')" onMouseOut="HideTip('tt276')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" id=link277 onMouseOver="ShowTip(event, 'tt277', 'link277')" onMouseOut="HideTip('tt277')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" id=link278 onMouseOver="ShowTip(event, 'tt278', 'link278')" onMouseOut="HideTip('tt278')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" id=link279 onMouseOver="ShowTip(event, 'tt279', 'link279')" onMouseOut="HideTip('tt279')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" id=link280 onMouseOver="ShowTip(event, 'tt280', 'link280')" onMouseOut="HideTip('tt280')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" id=link281 onMouseOver="ShowTip(event, 'tt281', 'link281')" onMouseOut="HideTip('tt281')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" id=link282 onMouseOver="ShowTip(event, 'tt282', 'link282')" onMouseOut="HideTip('tt282')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" id=link283 onMouseOver="ShowTip(event, 'tt283', 'link283')" onMouseOut="HideTip('tt283')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link284 onMouseOver="ShowTip(event, 'tt284', 'link284')" onMouseOut="HideTip('tt284')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" id=link285 onMouseOver="ShowTip(event, 'tt285', 'link285')" onMouseOut="HideTip('tt285')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" id=link286 onMouseOver="ShowTip(event, 'tt286', 'link286')" onMouseOut="HideTip('tt286')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" id=link287 onMouseOver="ShowTip(event, 'tt287', 'link287')" onMouseOut="HideTip('tt287')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" id=link288 onMouseOver="ShowTip(event, 'tt288', 'link288')" onMouseOut="HideTip('tt288')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" id=link289 onMouseOver="ShowTip(event, 'tt289', 'link289')" onMouseOut="HideTip('tt289')" class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" id=link290 onMouseOver="ShowTip(event, 'tt290', 'link290')" onMouseOut="HideTip('tt290')" class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" id=link291 onMouseOver="ShowTip(event, 'tt291', 'link291')" onMouseOut="HideTip('tt291')" class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>show</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" id=link292 onMouseOver="ShowTip(event, 'tt292', 'link292')" onMouseOut="HideTip('tt292')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" id=link293 onMouseOver="ShowTip(event, 'tt293', 'link293')" onMouseOut="HideTip('tt293')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" id=link294 onMouseOver="ShowTip(event, 'tt294', 'link294')" onMouseOut="HideTip('tt294')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" id=link295 onMouseOver="ShowTip(event, 'tt295', 'link295')" onMouseOut="HideTip('tt295')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" id=link296 onMouseOver="ShowTip(event, 'tt296', 'link296')" onMouseOut="HideTip('tt296')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" id=link297 onMouseOver="ShowTip(event, 'tt297', 'link297')" onMouseOut="HideTip('tt297')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" id=link298 onMouseOver="ShowTip(event, 'tt298', 'link298')" onMouseOut="HideTip('tt298')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" id=link299 onMouseOver="ShowTip(event, 'tt299', 'link299')" onMouseOut="HideTip('tt299')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" id=link300 onMouseOver="ShowTip(event, 'tt300', 'link300')" onMouseOut="HideTip('tt300')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" id=link301 onMouseOver="ShowTip(event, 'tt301', 'link301')" onMouseOut="HideTip('tt301')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" id=link302 onMouseOver="ShowTip(event, 'tt302', 'link302')" onMouseOut="HideTip('tt302')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" id=link303 onMouseOver="ShowTip(event, 'tt303', 'link303')" onMouseOut="HideTip('tt303')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" id=link304 onMouseOver="ShowTip(event, 'tt304', 'link304')" onMouseOut="HideTip('tt304')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" id=link305 onMouseOver="ShowTip(event, 'tt305', 'link305')" onMouseOut="HideTip('tt305')" class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" id=link306 onMouseOver="ShowTip(event, 'tt306', 'link306')" onMouseOut="HideTip('tt306')" class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showDataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" id=link307 onMouseOver="ShowTip(event, 'tt307', 'link307')" onMouseOut="HideTip('tt307')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" id=link308 onMouseOver="ShowTip(event, 'tt308', 'link308')" onMouseOut="HideTip('tt308')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" id=link309 onMouseOver="ShowTip(event, 'tt309', 'link309')" onMouseOut="HideTip('tt309')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showGridline</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" id=link310 onMouseOver="ShowTip(event, 'tt310', 'link310')" onMouseOut="HideTip('tt310')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link311 onMouseOver="ShowTip(event, 'tt311', 'link311')" onMouseOut="HideTip('tt311')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" id=link312 onMouseOver="ShowTip(event, 'tt312', 'link312')" onMouseOut="HideTip('tt312')" class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabel</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" id=link313 onMouseOver="ShowTip(event, 'tt313', 'link313')" onMouseOut="HideTip('tt313')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link314 onMouseOver="ShowTip(event, 'tt314', 'link314')" onMouseOut="HideTip('tt314')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link315 onMouseOver="ShowTip(event, 'tt315', 'link315')" onMouseOut="HideTip('tt315')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" id=link316 onMouseOver="ShowTip(event, 'tt316', 'link316')" onMouseOut="HideTip('tt316')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" id=link317 onMouseOver="ShowTip(event, 'tt317', 'link317')" onMouseOut="HideTip('tt317')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" id=link318 onMouseOver="ShowTip(event, 'tt318', 'link318')" onMouseOut="HideTip('tt318')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" id=link319 onMouseOver="ShowTip(event, 'tt319', 'link319')" onMouseOut="HideTip('tt319')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" id=link320 onMouseOver="ShowTip(event, 'tt320', 'link320')" onMouseOut="HideTip('tt320')" class=ISymbol>showLine</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" id=link321 onMouseOver="ShowTip(event, 'tt321', 'link321')" onMouseOut="HideTip('tt321')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" id=link322 onMouseOver="ShowTip(event, 'tt322', 'link322')" onMouseOut="HideTip('tt322')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMarker</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" id=link323 onMouseOver="ShowTip(event, 'tt323', 'link323')" onMouseOut="HideTip('tt323')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" id=link324 onMouseOver="ShowTip(event, 'tt324', 'link324')" onMouseOut="HideTip('tt324')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" id=link325 onMouseOver="ShowTip(event, 'tt325', 'link325')" onMouseOut="HideTip('tt325')" class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" id=link326 onMouseOver="ShowTip(event, 'tt326', 'link326')" onMouseOut="HideTip('tt326')" class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link327 onMouseOver="ShowTip(event, 'tt327', 'link327')" onMouseOut="HideTip('tt327')" class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" id=link328 onMouseOver="ShowTip(event, 'tt328', 'link328')" onMouseOut="HideTip('tt328')" class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTicks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" id=link329 onMouseOver="ShowTip(event, 'tt329', 'link329')" onMouseOut="HideTip('tt329')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" id=link330 onMouseOver="ShowTip(event, 'tt330', 'link330')" onMouseOut="HideTip('tt330')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" id=link331 onMouseOver="ShowTip(event, 'tt331', 'link331')" onMouseOut="HideTip('tt331')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" id=link332 onMouseOver="ShowTip(event, 'tt332', 'link332')" onMouseOut="HideTip('tt332')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" id=link333 onMouseOver="ShowTip(event, 'tt333', 'link333')" onMouseOut="HideTip('tt333')" class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" id=link334 onMouseOver="ShowTip(event, 'tt334', 'link334')" onMouseOut="HideTip('tt334')" class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" id=link335 onMouseOver="ShowTip(event, 'tt335', 'link335')" onMouseOut="HideTip('tt335')" class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" id=link336 onMouseOver="ShowTip(event, 'tt336', 'link336')" onMouseOut="HideTip('tt336')" class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" id=link337 onMouseOver="ShowTip(event, 'tt337', 'link337')" onMouseOut="HideTip('tt337')" class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>size</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" id=link338 onMouseOver="ShowTip(event, 'tt338', 'link338')" onMouseOut="HideTip('tt338')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" id=link339 onMouseOver="ShowTip(event, 'tt339', 'link339')" onMouseOut="HideTip('tt339')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" id=link340 onMouseOver="ShowTip(event, 'tt340', 'link340')" onMouseOut="HideTip('tt340')" class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>sliceMargin</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" id=link341 onMouseOver="ShowTip(event, 'tt341', 'link341')" onMouseOut="HideTip('tt341')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" id=link342 onMouseOver="ShowTip(event, 'tt342', 'link342')" onMouseOut="HideTip('tt342')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" id=link343 onMouseOver="ShowTip(event, 'tt343', 'link343')" onMouseOut="HideTip('tt343')" class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link344 onMouseOver="ShowTip(event, 'tt344', 'link344')" onMouseOut="HideTip('tt344')" class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" id=link345 onMouseOver="ShowTip(event, 'tt345', 'link345')" onMouseOut="HideTip('tt345')" class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" id=link346 onMouseOver="ShowTip(event, 'tt346', 'link346')" onMouseOut="HideTip('tt346')" class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>startAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" id=link347 onMouseOver="ShowTip(event, 'tt347', 'link347')" onMouseOut="HideTip('tt347')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" id=link348 onMouseOver="ShowTip(event, 'tt348', 'link348')" onMouseOut="HideTip('tt348')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" id=link349 onMouseOver="ShowTip(event, 'tt349', 'link349')" onMouseOut="HideTip('tt349')" class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" id=link350 onMouseOver="ShowTip(event, 'tt350', 'link350')" onMouseOut="HideTip('tt350')" class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>style</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" id=link351 onMouseOver="ShowTip(event, 'tt351', 'link351')" onMouseOut="HideTip('tt351')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" id=link352 onMouseOver="ShowTip(event, 'tt352', 'link352')" onMouseOut="HideTip('tt352')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" id=link353 onMouseOver="ShowTip(event, 'tt353', 'link353')" onMouseOut="HideTip('tt353')" class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt247"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt248"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt249"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt250"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, gridPadding: {top:10, right:10, bottom:23, left:10}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt251"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt252"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt253"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt254"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt255"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt256"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt257"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt258"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt259"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt260"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt261"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt262"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt263"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt264"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt265"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt266"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt267"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt268"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt269"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt270"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt271"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt272"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt273"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt274"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt275"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt276"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt277"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><div class=CToolTip id="tt278"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt279"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt280"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt281"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt282"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt283"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt284"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt285"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt286"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt287"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt288"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt289"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt290"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt291"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><div class=CToolTip id="tt292"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt293"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt294"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt295"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt296"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt297"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt298"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt299"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt300"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt301"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt302"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt303"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt304"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt305"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt306"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt307"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt308"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt309"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt310"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt311"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt312"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt313"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt314"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt315"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt316"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt317"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt318"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><div class=CToolTip id="tt319"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the  legend.</div></div><div class=CToolTip id="tt320"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt321"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt322"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt323"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt324"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt325"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt326"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt327"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt328"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt329"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt330"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt331"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt332"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt333"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt334"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt335"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt336"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt337"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt338"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt339"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt340"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt341"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt342"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt343"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt344"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt345"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt346"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt347"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt348"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt349"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt350"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt351"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt352"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt353"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/index/Properties5.html.





















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties.html#D">D</a> &middot; <a href="Properties.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties2.html#G">G</a> &middot; <a href="Properties2.html#H">H</a> &middot; <a href="Properties2.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties2.html#L">L</a> &middot; <a href="Properties3.html#M">M</a> &middot; <a href="Properties3.html#N">N</a> &middot; <a href="Properties3.html#O">O</a> &middot; <a href="Properties3.html#P">P</a> &middot; Q &middot; <a href="Properties3.html#R">R</a> &middot; <a href="Properties4.html#S">S</a> &middot; <a href="#T">T</a> &middot; <a href="#U">U</a> &middot; <a href="#V">V</a> &middot; <a href="#W">W</a> &middot; <a href="#X">X</a> &middot; <a href="#Y">Y</a> &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.text" id=link354 onMouseOver="ShowTip(event, 'tt354', 'link354')" onMouseOut="HideTip('tt354')" class=ISymbol>text</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" id=link355 onMouseOver="ShowTip(event, 'tt355', 'link355')" onMouseOut="HideTip('tt355')" class=ISymbol>textAlign</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>textColor</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" id=link356 onMouseOver="ShowTip(event, 'tt356', 'link356')" onMouseOut="HideTip('tt356')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link357 onMouseOver="ShowTip(event, 'tt357', 'link357')" onMouseOut="HideTip('tt357')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" id=link358 onMouseOver="ShowTip(event, 'tt358', 'link358')" onMouseOut="HideTip('tt358')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" id=link359 onMouseOver="ShowTip(event, 'tt359', 'link359')" onMouseOut="HideTip('tt359')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" id=link360 onMouseOver="ShowTip(event, 'tt360', 'link360')" onMouseOut="HideTip('tt360')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" id=link361 onMouseOver="ShowTip(event, 'tt361', 'link361')" onMouseOut="HideTip('tt361')" class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" id=link362 onMouseOver="ShowTip(event, 'tt362', 'link362')" onMouseOut="HideTip('tt362')" class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" id=link363 onMouseOver="ShowTip(event, 'tt363', 'link363')" onMouseOut="HideTip('tt363')" class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" id=link364 onMouseOver="ShowTip(event, 'tt364', 'link364')" onMouseOut="HideTip('tt364')" class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" id=link365 onMouseOver="ShowTip(event, 'tt365', 'link365')" onMouseOut="HideTip('tt365')" class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" id=link366 onMouseOver="ShowTip(event, 'tt366', 'link366')" onMouseOut="HideTip('tt366')" class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" id=link367 onMouseOver="ShowTip(event, 'tt367', 'link367')" onMouseOut="HideTip('tt367')" class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" id=link368 onMouseOver="ShowTip(event, 'tt368', 'link368')" onMouseOut="HideTip('tt368')" class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" id=link369 onMouseOver="ShowTip(event, 'tt369', 'link369')" onMouseOut="HideTip('tt369')" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" id=link370 onMouseOver="ShowTip(event, 'tt370', 'link370')" onMouseOut="HideTip('tt370')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.tickRenderer" id=link371 onMouseOver="ShowTip(event, 'tt371', 'link371')" onMouseOut="HideTip('tt371')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" id=link372 onMouseOver="ShowTip(event, 'tt372', 'link372')" onMouseOut="HideTip('tt372')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>ticks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" id=link373 onMouseOver="ShowTip(event, 'tt373', 'link373')" onMouseOut="HideTip('tt373')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" id=link374 onMouseOver="ShowTip(event, 'tt374', 'link374')" onMouseOut="HideTip('tt374')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickSpacing</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link375 onMouseOver="ShowTip(event, 'tt375', 'link375')" onMouseOut="HideTip('tt375')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" id=link376 onMouseOver="ShowTip(event, 'tt376', 'link376')" onMouseOut="HideTip('tt376')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" id=link377 onMouseOver="ShowTip(event, 'tt377', 'link377')" onMouseOut="HideTip('tt377')" class=ISymbol>title</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" id=link378 onMouseOver="ShowTip(event, 'tt378', 'link378')" onMouseOut="HideTip('tt378')" class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" id=link379 onMouseOver="ShowTip(event, 'tt379', 'link379')" onMouseOut="HideTip('tt379')" class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" id=link380 onMouseOver="ShowTip(event, 'tt380', 'link380')" onMouseOut="HideTip('tt380')" class=ISymbol>tooltipFadeSpeed</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" id=link381 onMouseOver="ShowTip(event, 'tt381', 'link381')" onMouseOut="HideTip('tt381')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" id=link382 onMouseOver="ShowTip(event, 'tt382', 'link382')" onMouseOut="HideTip('tt382')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipLocation</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" id=link383 onMouseOver="ShowTip(event, 'tt383', 'link383')" onMouseOut="HideTip('tt383')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" id=link384 onMouseOver="ShowTip(event, 'tt384', 'link384')" onMouseOut="HideTip('tt384')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" id=link385 onMouseOver="ShowTip(event, 'tt385', 'link385')" onMouseOut="HideTip('tt385')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" id=link386 onMouseOver="ShowTip(event, 'tt386', 'link386')" onMouseOut="HideTip('tt386')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" id=link387 onMouseOver="ShowTip(event, 'tt387', 'link387')" onMouseOut="HideTip('tt387')" class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></td></tr><tr><td class=IHeading><a name="U"></a>U</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" id=link388 onMouseOver="ShowTip(event, 'tt388', 'link388')" onMouseOut="HideTip('tt388')" class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>useAxesFormatters</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" id=link389 onMouseOver="ShowTip(event, 'tt389', 'link389')" onMouseOut="HideTip('tt389')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" id=link390 onMouseOver="ShowTip(event, 'tt390', 'link390')" onMouseOut="HideTip('tt390')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" id=link391 onMouseOver="ShowTip(event, 'tt391', 'link391')" onMouseOut="HideTip('tt391')" class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" id=link392 onMouseOver="ShowTip(event, 'tt392', 'link392')" onMouseOut="HideTip('tt392')" class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" id=link393 onMouseOver="ShowTip(event, 'tt393', 'link393')" onMouseOut="HideTip('tt393')" class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" id=link394 onMouseOver="ShowTip(event, 'tt394', 'link394')" onMouseOut="HideTip('tt394')" class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" id=link395 onMouseOver="ShowTip(event, 'tt395', 'link395')" onMouseOut="HideTip('tt395')" class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="W"></a>W</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" id=link396 onMouseOver="ShowTip(event, 'tt396', 'link396')" onMouseOut="HideTip('tt396')" class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" id=link397 onMouseOver="ShowTip(event, 'tt397', 'link397')" onMouseOut="HideTip('tt397')" class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" id=link398 onMouseOver="ShowTip(event, 'tt398', 'link398')" onMouseOut="HideTip('tt398')" class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=IHeading><a name="X"></a>X</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.xaxis" id=link399 onMouseOver="ShowTip(event, 'tt399', 'link399')" onMouseOut="HideTip('tt399')" class=ISymbol>xaxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" id=link400 onMouseOver="ShowTip(event, 'tt400', 'link400')" onMouseOut="HideTip('tt400')" class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" id=link401 onMouseOver="ShowTip(event, 'tt401', 'link401')" onMouseOut="HideTip('tt401')" class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=IHeading><a name="Y"></a>Y</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.yaxis" id=link402 onMouseOver="ShowTip(event, 'tt402', 'link402')" onMouseOut="HideTip('tt402')" class=ISymbol>yaxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" id=link403 onMouseOver="ShowTip(event, 'tt403', 'link403')" onMouseOut="HideTip('tt403')" class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" id=link404 onMouseOver="ShowTip(event, 'tt404', 'link404')" onMouseOut="HideTip('tt404')" class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" id=link405 onMouseOver="ShowTip(event, 'tt405', 'link405')" onMouseOut="HideTip('tt405')" class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" id=link406 onMouseOver="ShowTip(event, 'tt406', 'link406')" onMouseOut="HideTip('tt406')" class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt354"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt355"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt356"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt357"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt358"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt359"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt360"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt361"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt362"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt363"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt364"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt365"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt366"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt367"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt368"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt369"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt370"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt371"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt372"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt373"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt374"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt375"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt376"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt377"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt378"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt379"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt380"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt381"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt382"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt383"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt384"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt385"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt386"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt387"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt388"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt389"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt390"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt391"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt392"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt393"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt394"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt395"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt396"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt397"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt398"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt399"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt400"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt401"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt402"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt403"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt404"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt405"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><!--END_ND_TOOLTIPS-->


<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt406"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><!--END_ND_TOOLTIPS-->

</div><!--Index-->


<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated November 4th, 2010&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">AxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">DivTitleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">LinearAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">MarkerRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">ShapeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">ShadowRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">AxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">ThemeEngine</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">BezierCurveRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">EnhancedLegendRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->


<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/javascript/main.js.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
// This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
// Natural Docs is licensed under the GPL


//
//  Browser Styles
// ____________________________________________________________________________

var agt=navigator.userAgent.toLowerCase();
var browserType;
var browserVer;

if (agt.indexOf("opera") != -1)
    {
    browserType = "Opera";

    if (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1)
        {  browserVer = "Opera7";  }
    else if (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1)
        {  browserVer = "Opera8";  }
    else if (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1)
        {  browserVer = "Opera9";  }
    }

else if (agt.indexOf("applewebkit") != -1)
    {
    browserType = "Safari";

    if (agt.indexOf("version/3") != -1)
        {  browserVer = "Safari3";  }
    else if (agt.indexOf("safari/4") != -1)
        {  browserVer = "Safari2";  }
    }

else if (agt.indexOf("khtml") != -1)
    {
    browserType = "Konqueror";
    }

else if (agt.indexOf("msie") != -1)
    {
    browserType = "IE";

    if (agt.indexOf("msie 6") != -1)
        {  browserVer = "IE6";  }
    else if (agt.indexOf("msie 7") != -1)
        {  browserVer = "IE7";  }
    }

else if (agt.indexOf("gecko") != -1)
    {
    browserType = "Firefox";

    if (agt.indexOf("rv:1.7") != -1)
        {  browserVer = "Firefox1";  }
    else if (agt.indexOf("rv:1.8)") != -1 || agt.indexOf("rv:1.8.0") != -1)
        {  browserVer = "Firefox15";  }
    else if (agt.indexOf("rv:1.8.1") != -1)
        {  browserVer = "Firefox2";  }
    }


//
//  Support Functions
// ____________________________________________________________________________


function GetXPosition(item)
    {
    var position = 0;

    if (item.offsetWidth != null)
        {
        while (item != document.body && item != null)
            {
            position += item.offsetLeft;
            item = item.offsetParent;
            };
        };

    return position;
    };


function GetYPosition(item)
    {
    var position = 0;

    if (item.offsetWidth != null)
        {
        while (item != document.body && item != null)
            {
            position += item.offsetTop;
            item = item.offsetParent;
            };
        };

    return position;
    };


function MoveToPosition(item, x, y)
    {
    // Opera 5 chokes on the px extension, so it can use the Microsoft one instead.

    if (item.style.left != null)
        {
        item.style.left = x + "px";
        item.style.top = y + "px";
        }
    else if (item.style.pixelLeft != null)
        {
        item.style.pixelLeft = x;
        item.style.pixelTop = y;
        };
    };


//
//  Menu
// ____________________________________________________________________________


function ToggleMenu(id)
    {
    if (!window.document.getElementById)
        {  return;  };

    var display = window.document.getElementById(id).style.display;

    if (display == "none")
        {  display = "block";  }
    else
        {  display = "none";  }

    window.document.getElementById(id).style.display = display;
    }

function HideAllBut(ids, max)
    {
    if (document.getElementById)
        {
        ids.sort( function(a,b) { return a - b; } );
        var number = 1;

        while (number < max)
            {
            if (ids.length > 0 && number == ids[0])
                {  ids.shift();  }
            else
                {
                document.getElementById("MGroupContent" + number).style.display = "none";
                };

            number++;
            };
        };
    }


//
//  Tooltips
// ____________________________________________________________________________


var tooltipTimer = 0;

function ShowTip(event, tooltipID, linkID)
    {
    if (tooltipTimer)
        {  clearTimeout(tooltipTimer);  };

    var docX = event.clientX + window.pageXOffset;
    var docY = event.clientY + window.pageYOffset;

    var showCommand = "ReallyShowTip('" + tooltipID + "', '" + linkID + "', " + docX + ", " + docY + ")";

    tooltipTimer = setTimeout(showCommand, 1000);
    }

function ReallyShowTip(tooltipID, linkID, docX, docY)
    {
    tooltipTimer = 0;

    var tooltip;
    var link;

    if (document.getElementById)
        {
        tooltip = document.getElementById(tooltipID);
        link = document.getElementById(linkID);
        }
/*    else if (document.all)
        {
        tooltip = eval("document.all['" + tooltipID + "']");
        link = eval("document.all['" + linkID + "']");
        }
*/
    if (tooltip)
        {
        var left = GetXPosition(link);
        var top = GetYPosition(link);
        top += link.offsetHeight;


        // The fallback method is to use the mouse X and Y relative to the document.  We use a separate if and test if its a number
        // in case some browser snuck through the above if statement but didn't support everything.

        if (!isFinite(top) || top == 0)
            {
            left = docX;
            top = docY;
            }

        // Some spacing to get it out from under the cursor.

        top += 10;

        // Make sure the tooltip doesnt get smushed by being too close to the edge, or in some browsers, go off the edge of the
        // page.  We do it here because Konqueror does get offsetWidth right even if it doesnt get the positioning right.

        if (tooltip.offsetWidth != null)
            {
            var width = tooltip.offsetWidth;
            var docWidth = document.body.clientWidth;

            if (left + width > docWidth)
                {  left = docWidth - width - 1;  }

            // If there's a horizontal scroll bar we could go past zero because it's using the page width, not the window width.
            if (left < 0)
                {  left = 0;  };
            }

        MoveToPosition(tooltip, left, top);
        tooltip.style.visibility = "visible";
        }
    }

function HideTip(tooltipID)
    {
    if (tooltipTimer)
        {
        clearTimeout(tooltipTimer);
        tooltipTimer = 0;
        }

    var tooltip;

    if (document.getElementById)
        {  tooltip = document.getElementById(tooltipID); }
    else if (document.all)
        {  tooltip = eval("document.all['" + tooltipID + "']");  }

    if (tooltip)
        {  tooltip.style.visibility = "hidden";  }
    }


//
//  Blockquote fix for IE
// ____________________________________________________________________________


function NDOnLoad()
    {
    if (browserVer == "IE6")
        {
        var scrollboxes = document.getElementsByTagName('blockquote');

        if (scrollboxes.item(0))
            {
            NDDoResize();
            window.onresize=NDOnResize;
            };
        };
    };


var resizeTimer = 0;

function NDOnResize()
    {
    if (resizeTimer != 0)
        {  clearTimeout(resizeTimer);  };

    resizeTimer = setTimeout(NDDoResize, 250);
    };


function NDDoResize()
    {
    var scrollboxes = document.getElementsByTagName('blockquote');

    var i;
    var item;

    i = 0;
    while (item = scrollboxes.item(i))
        {
        item.style.width = 100;
        i++;
        };

    i = 0;
    while (item = scrollboxes.item(i))
        {
        item.style.width = item.parentNode.offsetWidth;
        i++;
        };

    clearTimeout(resizeTimer);
    resizeTimer = 0;
    }



/* ________________________________________________________________________________________________________

    Class: SearchPanel
    ________________________________________________________________________________________________________

    A class handling everything associated with the search panel.

    Parameters:

        name - The name of the global variable that will be storing this instance.  Is needed to be able to set timeouts.
        mode - The mode the search is going to work in.  Pass <NaturalDocs::Builder::Base->CommandLineOption()>, so the
                   value will be something like "HTML" or "FramedHTML".

    ________________________________________________________________________________________________________
*/


function SearchPanel(name, mode, resultsPath)
    {
    if (!name || !mode || !resultsPath)
        {  alert("Incorrect parameters to SearchPanel.");  };


    // Group: Variables
    // ________________________________________________________________________

    /*
        var: name
        The name of the global variable that will be storing this instance of the class.
    */
    this.name = name;

    /*
        var: mode
        The mode the search is going to work in, such as "HTML" or "FramedHTML".
    */
    this.mode = mode;

    /*
        var: resultsPath
        The relative path from the current HTML page to the results page directory.
    */
    this.resultsPath = resultsPath;

    /*
        var: keyTimeout
        The timeout used between a keystroke and when a search is performed.
    */
    this.keyTimeout = 0;

    /*
        var: keyTimeoutLength
        The length of <keyTimeout> in thousandths of a second.
    */
    this.keyTimeoutLength = 500;

    /*
        var: lastSearchValue
        The last search string executed, or an empty string if none.
    */
    this.lastSearchValue = "";

    /*
        var: lastResultsPage
        The last results page.  The value is only relevant if <lastSearchValue> is set.
    */
    this.lastResultsPage = "";

    /*
        var: deactivateTimeout

        The timeout used between when a control is deactivated and when the entire panel is deactivated.  Is necessary
        because a control may be deactivated in favor of another control in the same panel, in which case it should stay
        active.
    */
    this.deactivateTimout = 0;

    /*
        var: deactivateTimeoutLength
        The length of <deactivateTimeout> in thousandths of a second.
    */
    this.deactivateTimeoutLength = 200;




    // Group: DOM Elements
    // ________________________________________________________________________


    // Function: DOMSearchField
    this.DOMSearchField = function()
        {  return document.getElementById("MSearchField");  };

    // Function: DOMSearchType
    this.DOMSearchType = function()
        {  return document.getElementById("MSearchType");  };

    // Function: DOMPopupSearchResults
    this.DOMPopupSearchResults = function()
        {  return document.getElementById("MSearchResults");  };

    // Function: DOMPopupSearchResultsWindow
    this.DOMPopupSearchResultsWindow = function()
        {  return document.getElementById("MSearchResultsWindow");  };

    // Function: DOMSearchPanel
    this.DOMSearchPanel = function()
        {  return document.getElementById("MSearchPanel");  };




    // Group: Event Handlers
    // ________________________________________________________________________


    /*
        Function: OnSearchFieldFocus
        Called when focus is added or removed from the search field.
    */
    this.OnSearchFieldFocus = function(isActive)
        {
        this.Activate(isActive);
        };


    /*
        Function: OnSearchFieldChange
        Called when the content of the search field is changed.
    */
    this.OnSearchFieldChange = function()
        {
        if (this.keyTimeout)
            {
            clearTimeout(this.keyTimeout);
            this.keyTimeout = 0;
            };

        var searchValue = this.DOMSearchField().value.replace(/ +/g, "");

        if (searchValue != this.lastSearchValue)
            {
            if (searchValue != "")
                {
                this.keyTimeout = setTimeout(this.name + ".Search()", this.keyTimeoutLength);
                }
            else
                {
                if (this.mode == "HTML")
                    {  this.DOMPopupSearchResultsWindow().style.display = "none";  };
                this.lastSearchValue = "";
                };
            };
        };


    /*
        Function: OnSearchTypeFocus
        Called when focus is added or removed from the search type.
    */
    this.OnSearchTypeFocus = function(isActive)
        {
        this.Activate(isActive);
        };


    /*
        Function: OnSearchTypeChange
        Called when the search type is changed.
    */
    this.OnSearchTypeChange = function()
        {
        var searchValue = this.DOMSearchField().value.replace(/ +/g, "");

        if (searchValue != "")
            {
            this.Search();
            };
        };



    // Group: Action Functions
    // ________________________________________________________________________


    /*
        Function: CloseResultsWindow
        Closes the results window.
    */
    this.CloseResultsWindow = function()
        {
        this.DOMPopupSearchResultsWindow().style.display = "none";
        this.Activate(false, true);
        };


    /*
        Function: Search
        Performs a search.
    */
    this.Search = function()
        {
        this.keyTimeout = 0;

        var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
        var searchTopic = this.DOMSearchType().value;

        var pageExtension = searchValue.substr(0,1);

        if (pageExtension.match(/^[a-z]/i))
            {  pageExtension = pageExtension.toUpperCase();  }
        else if (pageExtension.match(/^[0-9]/))
            {  pageExtension = 'Numbers';  }
        else
            {  pageExtension = "Symbols";  };

        var resultsPage;
        var resultsPageWithSearch;
        var hasResultsPage;

        // indexSectionsWithContent is defined in searchdata.js
        if (indexSectionsWithContent[searchTopic][pageExtension] == true)
            {
            resultsPage = this.resultsPath + '/' + searchTopic + pageExtension + '.html';
            resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
            hasResultsPage = true;
            }
        else
            {
            resultsPage = this.resultsPath + '/NoResults.html';
            resultsPageWithSearch = resultsPage;
            hasResultsPage = false;
            };

        var resultsFrame;
        if (this.mode == "HTML")
            {  resultsFrame = window.frames.MSearchResults;  }
        else if (this.mode == "FramedHTML")
            {  resultsFrame = window.top.frames['Content'];  };


        if (resultsPage != this.lastResultsPage ||

            // Bug in IE.  If everything becomes hidden in a run, none of them will be able to be reshown in the next for some
            // reason.  It counts the right number of results, and you can even read the display as "block" after setting it, but it
            // just doesn't work in IE 6 or IE 7.  So if we're on the right page but the previous search had no results, reload the
            // page anyway to get around the bug.
            (browserType == "IE" && hasResultsPage &&
            	(!resultsFrame.searchResults || resultsFrame.searchResults.lastMatchCount == 0)) )

            {
            resultsFrame.location.href = resultsPageWithSearch;
            }

        // So if the results page is right and there's no IE bug, reperform the search on the existing page.  We have to check if there
        // are results because NoResults.html doesn't have any JavaScript, and it would be useless to do anything on that page even
        // if it did.
        else if (hasResultsPage)
            {
            // We need to check if this exists in case the frame is present but didn't finish loading.
            if (resultsFrame.searchResults)
                {  resultsFrame.searchResults.Search(searchValue);  }

            // Otherwise just reload instead of waiting.
            else
                {  resultsFrame.location.href = resultsPageWithSearch;  };
            };


        var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();

        if (this.mode == "HTML" && domPopupSearchResultsWindow.style.display != "block")
            {
            var domSearchType = this.DOMSearchType();

            var left = GetXPosition(domSearchType);
            var top = GetYPosition(domSearchType) + domSearchType.offsetHeight;

            MoveToPosition(domPopupSearchResultsWindow, left, top);
            domPopupSearchResultsWindow.style.display = 'block';
            };


        this.lastSearchValue = searchValue;
        this.lastResultsPage = resultsPage;
        };



    // Group: Activation Functions
    // Functions that handle whether the entire panel is active or not.
    // ________________________________________________________________________


    /*
        Function: Activate

        Activates or deactivates the search panel, resetting things to their default values if necessary.  You can call this on every
        control's OnBlur() and it will handle not deactivating the entire panel when focus is just switching between them transparently.

        Parameters:

            isActive - Whether you're activating or deactivating the panel.
            ignoreDeactivateDelay - Set if you're positive the action will deactivate the panel and thus want to skip the delay.
    */
    this.Activate = function(isActive, ignoreDeactivateDelay)
        {
        // We want to ignore isActive being false while the results window is open.
        if (isActive || (this.mode == "HTML" && this.DOMPopupSearchResultsWindow().style.display == "block"))
            {
            if (this.inactivateTimeout)
                {
                clearTimeout(this.inactivateTimeout);
                this.inactivateTimeout = 0;
                };

            this.DOMSearchPanel().className = 'MSearchPanelActive';

            var searchField = this.DOMSearchField();

            if (searchField.value == 'Search')
                 {  searchField.value = "";  }
            }
        else if (!ignoreDeactivateDelay)
            {
            this.inactivateTimeout = setTimeout(this.name + ".InactivateAfterTimeout()", this.inactivateTimeoutLength);
            }
        else
            {
            this.InactivateAfterTimeout();
            };
        };


    /*
        Function: InactivateAfterTimeout

        Called by <inactivateTimeout>, which is set by <Activate()>.  Inactivation occurs on a timeout because a control may
        receive OnBlur() when focus is really transferring to another control in the search panel.  In this case we don't want to
        actually deactivate the panel because not only would that cause a visible flicker but it could also reset the search value.
        So by doing it on a timeout instead, there's a short period where the second control's OnFocus() can cancel the deactivation.
    */
    this.InactivateAfterTimeout = function()
        {
        this.inactivateTimeout = 0;

        this.DOMSearchPanel().className = 'MSearchPanelInactive';
        this.DOMSearchField().value = "Search";

	    this.lastSearchValue = "";
	    this.lastResultsPage = "";
        };
    };




/* ________________________________________________________________________________________________________

   Class: SearchResults
   _________________________________________________________________________________________________________

   The class that handles everything on the search results page.
   _________________________________________________________________________________________________________
*/


function SearchResults(name, mode)
    {
    /*
        var: mode
        The mode the search is going to work in, such as "HTML" or "FramedHTML".
    */
    this.mode = mode;

    /*
        var: lastMatchCount
        The number of matches from the last run of <Search()>.
    */
    this.lastMatchCount = 0;


    /*
        Function: Toggle
        Toggles the visibility of the passed element ID.
    */
    this.Toggle = function(id)
        {
        if (this.mode == "FramedHTML")
            {  return;  };

        var parentElement = document.getElementById(id);

        var element = parentElement.firstChild;

        while (element && element != parentElement)
            {
            if (element.nodeName == 'DIV' && element.className == 'ISubIndex')
                {
                if (element.style.display == 'block')
                    {  element.style.display = "none";  }
                else
                    {  element.style.display = 'block';  }
                };

            if (element.nodeName == 'DIV' && element.hasChildNodes())
                {  element = element.firstChild;  }
            else if (element.nextSibling)
                {  element = element.nextSibling;  }
            else
                {
                do
                    {
                    element = element.parentNode;
                    }
                while (element && element != parentElement && !element.nextSibling);

                if (element && element != parentElement)
                    {  element = element.nextSibling;  };
                };
            };
        };


    /*
        Function: Search

        Searches for the passed string.  If there is no parameter, it takes it from the URL query.

        Always returns true, since other documents may try to call it and that may or may not be possible.
    */
    this.Search = function(search)
        {
        if (!search)
            {
            search = window.location.search;
            search = search.substring(1);  // Remove the leading ?
            search = unescape(search);
            };

        search = search.replace(/^ +/, "");
        search = search.replace(/ +$/, "");
        search = search.toLowerCase();

        if (search.match(/[^a-z0-9]/)) // Just a little speedup so it doesn't have to go through the below unnecessarily.
            {
            search = search.replace(/\_/g, "_und");
            search = search.replace(/\ +/gi, "_spc");
            search = search.replace(/\~/g, "_til");
            search = search.replace(/\!/g, "_exc");
            search = search.replace(/\@/g, "_att");
            search = search.replace(/\#/g, "_num");
            search = search.replace(/\$/g, "_dol");
            search = search.replace(/\%/g, "_pct");
            search = search.replace(/\^/g, "_car");
            search = search.replace(/\&/g, "_amp");
            search = search.replace(/\*/g, "_ast");
            search = search.replace(/\(/g, "_lpa");
            search = search.replace(/\)/g, "_rpa");
            search = search.replace(/\-/g, "_min");
            search = search.replace(/\+/g, "_plu");
            search = search.replace(/\=/g, "_equ");
            search = search.replace(/\{/g, "_lbc");
            search = search.replace(/\}/g, "_rbc");
            search = search.replace(/\[/g, "_lbk");
            search = search.replace(/\]/g, "_rbk");
            search = search.replace(/\:/g, "_col");
            search = search.replace(/\;/g, "_sco");
            search = search.replace(/\"/g, "_quo");
            search = search.replace(/\'/g, "_apo");
            search = search.replace(/\</g, "_lan");
            search = search.replace(/\>/g, "_ran");
            search = search.replace(/\,/g, "_com");
            search = search.replace(/\./g, "_per");
            search = search.replace(/\?/g, "_que");
            search = search.replace(/\//g, "_sla");
            search = search.replace(/[^a-z0-9\_]i/gi, "_zzz");
            };

        var resultRows = document.getElementsByTagName("div");
        var matches = 0;

        var i = 0;
        while (i < resultRows.length)
            {
            var row = resultRows.item(i);

            if (row.className == "SRResult")
                {
                var rowMatchName = row.id.toLowerCase();
                rowMatchName = rowMatchName.replace(/^sr\d*_/, '');

                if (search.length <= rowMatchName.length && rowMatchName.substr(0, search.length) == search)
                    {
                    row.style.display = "block";
                    matches++;
                    }
                else
                    {  row.style.display = "none";  };
                };

            i++;
            };

        document.getElementById("Searching").style.display="none";

        if (matches == 0)
            {  document.getElementById("NoMatches").style.display="block";  }
        else
            {  document.getElementById("NoMatches").style.display="none";  }

        this.lastMatchCount = matches;

        return true;
        };
    };

Added Site/Site_W/jpqplot/docs/javascript/searchdata.js.













































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
var indexSectionsWithContent = {
   "General": {
      "Symbols": true,
      "Numbers": false,
      "A": true,
      "B": true,
      "C": true,
      "D": true,
      "E": true,
      "F": true,
      "G": true,
      "H": true,
      "I": true,
      "J": true,
      "K": false,
      "L": true,
      "M": true,
      "N": true,
      "O": true,
      "P": true,
      "Q": false,
      "R": true,
      "S": true,
      "T": true,
      "U": true,
      "V": true,
      "W": true,
      "X": true,
      "Y": true,
      "Z": true
      },
   "Functions": {
      "Symbols": false,
      "Numbers": false,
      "A": false,
      "B": false,
      "C": true,
      "D": true,
      "E": false,
      "F": false,
      "G": true,
      "H": false,
      "I": true,
      "J": false,
      "K": false,
      "L": false,
      "M": true,
      "N": true,
      "O": false,
      "P": false,
      "Q": false,
      "R": true,
      "S": true,
      "T": false,
      "U": false,
      "V": false,
      "W": false,
      "X": false,
      "Y": false,
      "Z": true
      },
   "Files": {
      "Symbols": false,
      "Numbers": false,
      "A": false,
      "B": false,
      "C": false,
      "D": false,
      "E": false,
      "F": false,
      "G": false,
      "H": false,
      "I": false,
      "J": true,
      "K": false,
      "L": false,
      "M": false,
      "N": false,
      "O": false,
      "P": false,
      "Q": false,
      "R": false,
      "S": false,
      "T": false,
      "U": false,
      "V": false,
      "W": false,
      "X": false,
      "Y": false,
      "Z": false
      },
   "Classes": {
      "Symbols": true,
      "Numbers": false,
      "A": true,
      "B": false,
      "C": false,
      "D": false,
      "E": false,
      "F": false,
      "G": true,
      "H": false,
      "I": false,
      "J": true,
      "K": false,
      "L": true,
      "M": false,
      "N": false,
      "O": false,
      "P": false,
      "Q": false,
      "R": false,
      "S": true,
      "T": true,
      "U": false,
      "V": false,
      "W": false,
      "X": false,
      "Y": false,
      "Z": false
      },
   "Hooks": {
      "Symbols": false,
      "Numbers": false,
      "A": true,
      "B": false,
      "C": false,
      "D": false,
      "E": true,
      "F": false,
      "G": false,
      "H": false,
      "I": false,
      "J": true,
      "K": false,
      "L": false,
      "M": false,
      "N": false,
      "O": false,
      "P": true,
      "Q": false,
      "R": false,
      "S": false,
      "T": false,
      "U": false,
      "V": false,
      "W": false,
      "X": false,
      "Y": false,
      "Z": false
      },
   "Properties": {
      "Symbols": false,
      "Numbers": false,
      "A": true,
      "B": true,
      "C": true,
      "D": true,
      "E": true,
      "F": true,
      "G": true,
      "H": true,
      "I": true,
      "J": false,
      "K": false,
      "L": true,
      "M": true,
      "N": true,
      "O": true,
      "P": true,
      "Q": false,
      "R": true,
      "S": true,
      "T": true,
      "U": true,
      "V": true,
      "W": true,
      "X": true,
      "Y": true,
      "Z": true
      }
   }

Added Site/Site_W/jpqplot/docs/search/ClassesA.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Axis><div class=IEntry><a href="../files/jqplot-core-js.html#Axis" target=_parent class=ISymbol>Axis</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/ClassesG.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Grid><div class=IEntry><a href="../files/jqplot-core-js.html#Grid" target=_parent class=ISymbol>Grid</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/ClassesJ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" target=_parent class=ISymbol>jqPlot</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/ClassesL.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Legend><div class=IEntry><a href="../files/jqplot-core-js.html#Legend" target=_parent class=ISymbol>Legend</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/ClassesS.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Series><div class=IEntry><a href="../files/jqplot-core-js.html#Series" target=_parent class=ISymbol>Series</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/ClassesSymbols.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__dol_perjqplot><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" target=_parent class=ISymbol>$.jqplot</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisLabelRenderer><div class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisTickRenderer><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBarRenderer><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BarRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBezierCurveRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" target=_parent class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBlockRenderer><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBubbleRenderer><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisTickRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasGridRenderer><div class=IEntry><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCategoryAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perciParser><div class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" target=_parent class=ISymbol>$.jqplot.<wbr>ciParser</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCursor><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" target=_parent class=ISymbol>$.jqplot.<wbr>Cursor</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDateAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDivTitleRenderer><div class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDragable><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" target=_parent class=ISymbol>$.jqplot.<wbr>Dragable</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perHighlighter><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" target=_parent class=ISymbol>$.jqplot.<wbr>Highlighter</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLinearAxisRenderer><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLineRenderer><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LineRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLogAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMarkerRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMeterGaugeRenderer><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perOHLCRenderer><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPointLabels><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" target=_parent class=ISymbol>$.jqplot.<wbr>PointLabels</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershadowRenderer><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershapeRenderer><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perThemeEngine><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" target=_parent class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></div></div><div class=SRResult id=SR__dol_perjqplot_perTrendline><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" target=_parent class=ISymbol>$.jqplot.<wbr>Trendline</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/ClassesT.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Title><div class=IEntry><a href="../files/jqplot-core-js.html#Title" target=_parent class=ISymbol>Title</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FilesJ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqplot_perenhancedLegendRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsC.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsD.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_draw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_draw')" class=ISymbol>draw</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR_drawSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" target=_parent class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsG.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_get><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" target=_parent class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemeNames><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" target=_parent class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" target=_parent class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsI.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_init><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" target=_parent class=ISymbol>init</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsM.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeGridData')" class=ISymbol>makeGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_moveBlock><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" target=_parent class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_moveSeriesToBack><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" target=_parent class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_moveSeriesToFront><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" target=_parent class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsN.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_newTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" target=_parent class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsR.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_redraw><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" target=_parent class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_reInitialize><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" target=_parent class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" target=_parent class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_rename><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" target=_parent class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_replot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" target=_parent class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_resetAxesScale><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" target=_parent class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restoreOriginalSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" target=_parent class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restorePreviousSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" target=_parent class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsS.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_setGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridData')" class=ISymbol>setGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/FunctionsZ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoomProxy><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" target=_parent class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralA.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activeTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" target=_parent class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_addLegendRowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" target=_parent class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_alpha><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" target=_parent class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_angle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_angle')" class=ISymbol>angle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></div></div><div class=SRResult id=SR_autoscale><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" target=_parent class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_autoscaleBubbles><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" target=_parent class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscaleMultiplier><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" target=_parent class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscalePointsFactor><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" target=_parent class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_Available_spcOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Available_Options" target=_parent class=ISymbol>Available Options</a></div></div><div class=SRResult id=SR_axes><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" target=_parent class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" target=_parent class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_Axis><div class=IEntry><a href="../files/jqplot-core-js.html#Axis" target=_parent class=ISymbol>Axis</a></div></div><div class=SRResult id=SR_axisDefaults><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" target=_parent class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralB.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_background><div class=IEntry><a href="javascript:searchResults.Toggle('SR_background')" class=ISymbol>background</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_barDirection><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" target=_parent class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barLabelOptions><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" target=_parent class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" target=_parent class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabels><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" target=_parent class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barMargin><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" target=_parent class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barPadding><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" target=_parent class=ISymbol>barPadding</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barWidth><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" target=_parent class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_bodyWidth><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" target=_parent class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" target=_parent class=ISymbol>border</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderColor')" class=ISymbol>borderColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_borderWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderWidth')" class=ISymbol>borderWidth</a><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_breakOnNull><div class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" target=_parent class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_bringSeriesToFront><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" target=_parent class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_bubbleAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" target=_parent class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_bubbleGradients><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" target=_parent class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralC.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_candleStick><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" target=_parent class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Change_spcLog><div class=IEntry><a href="../files/changes-txt.html#Change_Log" target=_parent class=ISymbol>Change Log</a></div></div><div class=SRResult id=SR_Changes><div class=IEntry><a href="../files/jqplot-core-js.html#Changes" target=_parent class=ISymbol>Changes</a></div></div><div class=SRResult id=SR_clearRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" target=_parent class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_clickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" target=_parent class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_closeColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" target=_parent class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_color><div class=IEntry><a href="javascript:searchResults.Toggle('SR_color')" class=ISymbol>color</a><div class=ISubIndex><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_constrainOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" target=_parent class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_constrainTo><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" target=_parent class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></div></div><div class=SRResult id=SR_constrainZoomTo><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" target=_parent class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_Copyright_ampLicense><div class=IEntry><a href="../files/jqplot-core-js.html#CopyrightLicense" target=_parent class=ISymbol>Copyright&amp;License</a></div></div><div class=SRResult id=SR_css><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" target=_parent class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_cursorLegendFormatString><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" target=_parent class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralD.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" target=_parent class=ISymbol>data</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataLabelCenterOn><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" target=_parent class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></div></div><div class=SRResult id=SR_dataLabelFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelFormatString')" class=ISymbol>dataLabelFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelNudge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelNudge')" class=ISymbol>dataLabelNudge</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelPositionFactor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelPositionFactor')" class=ISymbol>dataLabelPositionFactor</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabels')" class=ISymbol>dataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelThreshold><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelThreshold')" class=ISymbol>dataLabelThreshold</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dblClickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" target=_parent class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_defaultAxisStart><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" target=_parent class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_depth><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" target=_parent class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_diameter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_diameter')" class=ISymbol>diameter</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_disableIEFading><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" target=_parent class=ISymbol>disableIEFading</a></div></div><div class=SRResult id=SR_disableStack><div class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" target=_parent class=ISymbol>disableStack</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_downBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" target=_parent class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_draw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_draw')" class=ISymbol>draw</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR_drawBorder><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" target=_parent class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" target=_parent class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" target=_parent class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralE.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_edgeTolerance><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" target=_parent class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_enableFontSupport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enableFontSupport')" class=ISymbol>enableFontSupport</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_escapeHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escapeHtml')" class=ISymbol>escapeHtml</a><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a></div></div></div><div class=SRResult id=SR2_escapeHTML><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_escapeHTML')" class=ISymbol>escapeHTML</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_eventListenerHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" target=_parent class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralF.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeTooltip><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" target=_parent class=ISymbol>fadeTooltip</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillAlpha><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" target=_parent class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" target=_parent class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" target=_parent class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillColor><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillColor" target=_parent class=ISymbol>fillColor</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillDownBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" target=_parent class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_fillRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" target=_parent class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" target=_parent class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillToValue><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" target=_parent class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillToZero><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" target=_parent class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillUpBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" target=_parent class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_followMouse><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" target=_parent class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_fontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontFamily')" class=ISymbol>fontFamily</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontSize')" class=ISymbol>fontSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontStretch><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontStretch')" class=ISymbol>fontStretch</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_fontWeight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontWeight')" class=ISymbol>fontWeight</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_formatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatString')" class=ISymbol>formatString</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_formatter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatter')" class=ISymbol>formatter</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Functions')" class=ISymbol>Functions</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.Functions" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralG.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_get><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" target=_parent class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemeNames><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" target=_parent class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" target=_parent class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_GPL_spcVersion_spc2><div class=IEntry><a href="../files/gpl-2-0-txt.html#GPL_Version_2" target=_parent class=ISymbol>GPL Version 2</a></div></div><div class=SRResult id=SR_grid><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" target=_parent class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Grid><div class=IEntry><a href="../files/jqplot-core-js.html#Grid" target=_parent class=ISymbol>Grid</a></div></div><div class=SRResult id=SR_gridLineColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" target=_parent class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_gridLineWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" target=_parent class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_groups><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" target=_parent class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralH.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hideZeros><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" target=_parent class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_highlightAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" target=_parent class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_highlightColors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightColors')" class=ISymbol>highlightColors</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseDown')" class=ISymbol>highlightMouseDown</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseOver><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseOver')" class=ISymbol>highlightMouseOver</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_hlc><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" target=_parent class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Hooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.Hooks" target=_parent class=ISymbol>Hooks</a>, <span class=IParent>$.jqplot</span></div></div><div class=SRResult id=SR_hubRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" target=_parent class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralI.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_index><div class=IEntry><a href="../files/jqplot-core-js.html#Series.index" target=_parent class=ISymbol>index</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_init><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" target=_parent class=ISymbol>init</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_innerDiameter><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" target=_parent class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_insertBreaks><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" target=_parent class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_intersectionThreshold><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" target=_parent class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_intervalColors><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" target=_parent class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalInnerRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" target=_parent class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalOuterRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" target=_parent class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervals><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" target=_parent class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_Introduction><div class=IEntry><a href="../files/jqplot-core-js.html#Introduction" target=_parent class=ISymbol>Introduction</a></div></div><div class=SRResult id=SR_isarc><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isarc')" class=ISymbol>isarc</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_isMinorTick><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isMinorTick')" class=ISymbol>isMinorTick</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralJ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" target=_parent class=ISymbol>jqPlot</a></div></div><div class=SRResult id=SR_jqPlot_spcCharts><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot_Charts" target=_parent class=ISymbol>jqPlot Charts</a></div></div><div class=SRResult id=SR_jqPlot_spcCSS_spcCustomization><div class=IEntry><a href="../files/jqPlotCssStyling-txt.html#jqPlot_CSS_Customization" target=_parent class=ISymbol>jqPlot CSS Customization</a></div></div><div class=SRResult id=SR_jqPlot_spcOptions><div class=IEntry><a href="../files/jqPlotOptions-txt.html#jqPlot_Options" target=_parent class=ISymbol>jqPlot Options</a></div></div><div class=SRResult id=SR_jqPlot_spcPugin_spcHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" target=_parent class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></div></div><div class=SRResult id=SR_jqPlot_spcUsage><div class=IEntry><a href="../files/usage-txt.html#jqPlot_Usage" target=_parent class=ISymbol>jqPlot Usage</a></div></div><div class=SRResult id=SR_jqplot_perenhancedLegendRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralL.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="javascript:searchResults.Toggle('SR_label')" class=ISymbol>label</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_labelHeightAdjust><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" target=_parent class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_labelOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" target=_parent class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labelPosition><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelPosition')" class=ISymbol>labelPosition</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div></div><div class=SRResult id=SR_labelRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" target=_parent class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labels')" class=ISymbol>labels</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_labelsFromSeries><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" target=_parent class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_legend><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" target=_parent class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Legend><div class=IEntry><a href="../files/jqplot-core-js.html#Legend" target=_parent class=ISymbol>Legend</a></div></div><div class=SRResult id=SR_lineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineCap')" class=ISymbol>lineCap</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_lineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineJoin')" class=ISymbol>lineJoin</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_lineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineWidth')" class=ISymbol>lineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidthAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" target=_parent class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_location><div class=IEntry><a href="javascript:searchResults.Toggle('SR_location')" class=ISymbol>location</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" target=_parent class=IParent>Legend</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralM.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeGridData')" class=ISymbol>makeGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" target=_parent class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" target=_parent class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_markerOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" target=_parent class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_markerRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markerRenderer')" class=ISymbol>markerRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_markSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markSize')" class=ISymbol>markSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="javascript:searchResults.Toggle('SR_max')" class=ISymbol>max</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_methods><div class=IEntry><a href="javascript:searchResults.Toggle('SR_methods')" class=ISymbol>methods</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.methods" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.methods" target=_parent class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/jqplot-core-js.html#jqPlot.methods" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR2_Methods><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Methods" target=_parent class=ISymbol>Methods</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="javascript:searchResults.Toggle('SR_min')" class=ISymbol>min</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_MIT_spcLicense><div class=IEntry><a href="../files/MIT-LICENSE-txt.html#MIT_License" target=_parent class=ISymbol>MIT License</a></div></div><div class=SRResult id=SR_moveBlock><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" target=_parent class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_moveSeriesToBack><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" target=_parent class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_moveSeriesToFront><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" target=_parent class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralN.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_needlePad><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" target=_parent class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_needleThickness><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" target=_parent class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_neighborThreshold><div class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" target=_parent class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_newTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" target=_parent class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_numberColumns><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberColumns')" class=ISymbol>numberColumns</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberRows><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberRows')" class=ISymbol>numberRows</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" target=_parent class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralO.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_openColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" target=_parent class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Options_spcTutorial><div class=IEntry><a href="../files/optionsTutorial-txt.html#Options_Tutorial" target=_parent class=ISymbol>Options Tutorial</a></div></div><div class=SRResult id=SR_Options_spcUsage><div class=IEntry><a href="../files/jqplot-core-js.html#Options_Usage" target=_parent class=ISymbol>Options Usage</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralP.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pad><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" target=_parent class=ISymbol>pad</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_padding')" class=ISymbol>padding</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_padMax><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" target=_parent class=ISymbol>padMax</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padMin><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" target=_parent class=ISymbol>padMin</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_pegNeedle><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" target=_parent class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_placement><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" target=_parent class=ISymbol>placement</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_postDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" target=_parent class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" target=_parent class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" target=_parent class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" target=_parent class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" target=_parent class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" target=_parent class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" target=_parent class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_predraw><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" target=_parent class=ISymbol>predraw</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_preDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" target=_parent class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawLegendHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" target=_parent class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" target=_parent class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" target=_parent class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefix')" class=ISymbol>prefix</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_preInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" target=_parent class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" target=_parent class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" target=_parent class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" target=_parent class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_Properties><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Properties')" class=ISymbol>Properties</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#Properties" target=_parent class=IParent>Global</a><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.Properties" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.Properties" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.Properties" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.Properties" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.Properties" target=_parent class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.Properties" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.Properties" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.Properties" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#jqPlot.Properties" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.Properties" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.Properties" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.Properties" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_pt2px><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pt2px')" class=ISymbol>pt2px</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralR.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_redraw><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" target=_parent class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_reInitialize><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" target=_parent class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" target=_parent class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_rename><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" target=_parent class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_renderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_renderer')" class=ISymbol>renderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_rendererOptions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rendererOptions')" class=ISymbol>rendererOptions</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_replot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" target=_parent class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_resetAxesScale><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" target=_parent class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restoreOriginalSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" target=_parent class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restorePreviousSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" target=_parent class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_ringColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" target=_parent class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_ringMargin><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" target=_parent class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_ringWidth><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" target=_parent class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_rowSpacing><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" target=_parent class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralS.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_sectionMargin><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" target=_parent class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div><div class=SRResult id=SR_series><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" target=_parent class=ISymbol>series</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Series><div class=IEntry><a href="../files/jqplot-core-js.html#Series" target=_parent class=ISymbol>Series</a></div></div><div class=SRResult id=SR_seriesColors><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" target=_parent class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" target=_parent class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesLabelIndex><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" target=_parent class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_seriesToggle><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" target=_parent class=ISymbol>seriesToggle</a></div></div><div class=SRResult id=SR_setGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridData')" class=ISymbol>setGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_shadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadow')" class=ISymbol>shadow</a><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadow" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAlpha')" class=ISymbol>shadowAlpha</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAngle')" class=ISymbol>shadowAngle</a><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" target=_parent class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shadowDepth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowDepth')" class=ISymbol>shadowDepth</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowOffset')" class=ISymbol>shadowOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" target=_parent class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_shadowWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" target=_parent class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shapeRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" target=_parent class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_showBorders><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" target=_parent class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></div></div><div class=SRResult id=SR_showCursorLegend><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" target=_parent class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showDataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showDataLabels')" class=ISymbol>showDataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_showGridline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showGridline')" class=ISymbol>showGridline</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" target=_parent class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabel')" class=ISymbol>showLabel</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabels')" class=ISymbol>showLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_showLine><div class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" target=_parent class=ISymbol>showLine</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_showMark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMark')" class=ISymbol>showMark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMarker')" class=ISymbol>showMarker</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showMinorTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" target=_parent class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showSwatch><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" target=_parent class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_showTickLabels><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" target=_parent class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_showTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" target=_parent class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTicks')" class=ISymbol>showTicks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_showTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTooltip')" class=ISymbol>showTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_showTooltipDataPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" target=_parent class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipGridPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" target=_parent class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" target=_parent class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipUnitPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" target=_parent class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" target=_parent class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="javascript:searchResults.Toggle('SR_size')" class=ISymbol>size</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_sizeAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" target=_parent class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_sliceMargin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sliceMargin')" class=ISymbol>sliceMargin</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_sortData><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" target=_parent class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_sortMergedLabels><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" target=_parent class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></div></div><div class=SRResult id=SR_stackedValue><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" target=_parent class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_stackSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" target=_parent class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_startAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startAngle')" class=ISymbol>startAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_strokeRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" target=_parent class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_strokeStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" target=_parent class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_syncTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" target=_parent class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralSymbols.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__dol_perjqplot><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" target=_parent class=ISymbol>$.jqplot</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisLabelRenderer><div class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisTickRenderer><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBarRenderer><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BarRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBezierCurveRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" target=_parent class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBlockRenderer><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBubbleRenderer><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisTickRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasGridRenderer><div class=IEntry><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCategoryAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perciParser><div class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" target=_parent class=ISymbol>$.jqplot.<wbr>ciParser</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCursor><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" target=_parent class=ISymbol>$.jqplot.<wbr>Cursor</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDateAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDivTitleRenderer><div class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDragable><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" target=_parent class=ISymbol>$.jqplot.<wbr>Dragable</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perHighlighter><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" target=_parent class=ISymbol>$.jqplot.<wbr>Highlighter</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLinearAxisRenderer><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLineRenderer><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LineRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLogAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMarkerRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMeterGaugeRenderer><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perOHLCRenderer><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPointLabels><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" target=_parent class=ISymbol>$.jqplot.<wbr>PointLabels</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershadowRenderer><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershapeRenderer><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perThemeEngine><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" target=_parent class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></div></div><div class=SRResult id=SR__dol_perjqplot_perTrendline><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" target=_parent class=ISymbol>$.jqplot.<wbr>Trendline</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralT.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_text><div class=IEntry><a href="../files/jqplot-core-js.html#Title.text" target=_parent class=ISymbol>text</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textAlign><div class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" target=_parent class=ISymbol>textAlign</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textColor')" class=ISymbol>textColor</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_themes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" target=_parent class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_thickness><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" target=_parent class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_tickColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" target=_parent class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickInterval><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" target=_parent class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickLength><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" target=_parent class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_tickMode><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" target=_parent class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_tickOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" target=_parent class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickPadding><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" target=_parent class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickRenderer')" class=ISymbol>tickRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_ticks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ticks')" class=ISymbol>ticks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_tickSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickSpacing')" class=ISymbol>tickSpacing</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" target=_parent class=ISymbol>title</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Title><div class=IEntry><a href="../files/jqplot-core-js.html#Title" target=_parent class=ISymbol>Title</a></div></div><div class=SRResult id=SR_tooltipAxes><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" target=_parent class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipAxisGroups><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" target=_parent class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_tooltipFadeSpeed><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" target=_parent class=ISymbol>tooltipFadeSpeed</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFormatString')" class=ISymbol>tooltipFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipLocation')" class=ISymbol>tooltipLocation</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipOffset')" class=ISymbol>tooltipOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" target=_parent class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralU.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_upBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" target=_parent class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Usage><div class=IEntry><a href="../files/jqplot-core-js.html#Usage" target=_parent class=ISymbol>Usage</a></div></div><div class=SRResult id=SR_useAxesFormatters><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useAxesFormatters')" class=ISymbol>useAxesFormatters</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_useNegativeColors><div class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" target=_parent class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_useSeriesColor><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" target=_parent class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralV.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_varyBarColor><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" target=_parent class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_varyBlockColors><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" target=_parent class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_varyBubbleColors><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" target=_parent class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_Version><div class=IEntry><a href="../files/jqplot-core-js.html#Version" target=_parent class=ISymbol>Version</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralW.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_waterfall><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" target=_parent class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_wickColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" target=_parent class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_widthRatio><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" target=_parent class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralX.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_xaxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.xaxis" target=_parent class=ISymbol>xaxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_xoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" target=_parent class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_xpadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" target=_parent class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralY.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_yaxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.yaxis" target=_parent class=ISymbol>yaxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_yoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" target=_parent class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_ypadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" target=_parent class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_yvalues><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" target=_parent class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/GeneralZ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_zoomProxy><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" target=_parent class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/HooksA.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_addLegendRowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" target=_parent class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/HooksE.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_eventListenerHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" target=_parent class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/HooksJ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot_spcPugin_spcHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" target=_parent class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/HooksP.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_postDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" target=_parent class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" target=_parent class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" target=_parent class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" target=_parent class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" target=_parent class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" target=_parent class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" target=_parent class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" target=_parent class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawLegendHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" target=_parent class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" target=_parent class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" target=_parent class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" target=_parent class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" target=_parent class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" target=_parent class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" target=_parent class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/NoResults.html.































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=NoMatches>No Matches</div></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesA.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activeTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" target=_parent class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_alpha><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" target=_parent class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_angle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_angle')" class=ISymbol>angle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></div></div><div class=SRResult id=SR_autoscale><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" target=_parent class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_autoscaleBubbles><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" target=_parent class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscaleMultiplier><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" target=_parent class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscalePointsFactor><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" target=_parent class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_axes><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" target=_parent class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" target=_parent class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axisDefaults><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" target=_parent class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesB.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_background><div class=IEntry><a href="javascript:searchResults.Toggle('SR_background')" class=ISymbol>background</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_barDirection><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" target=_parent class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barLabelOptions><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" target=_parent class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" target=_parent class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabels><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" target=_parent class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barMargin><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" target=_parent class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barPadding><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" target=_parent class=ISymbol>barPadding</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barWidth><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" target=_parent class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_bodyWidth><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" target=_parent class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" target=_parent class=ISymbol>border</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderColor')" class=ISymbol>borderColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_borderWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderWidth')" class=ISymbol>borderWidth</a><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_breakOnNull><div class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" target=_parent class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_bringSeriesToFront><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" target=_parent class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_bubbleAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" target=_parent class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_bubbleGradients><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" target=_parent class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesC.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_candleStick><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" target=_parent class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_clearRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" target=_parent class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_clickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" target=_parent class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_closeColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" target=_parent class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_color><div class=IEntry><a href="javascript:searchResults.Toggle('SR_color')" class=ISymbol>color</a><div class=ISubIndex><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_constrainOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" target=_parent class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_constrainTo><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" target=_parent class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></div></div><div class=SRResult id=SR_constrainZoomTo><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" target=_parent class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_css><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" target=_parent class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_cursorLegendFormatString><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" target=_parent class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesD.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_data><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" target=_parent class=ISymbol>data</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataLabelCenterOn><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" target=_parent class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></div></div><div class=SRResult id=SR_dataLabelFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelFormatString')" class=ISymbol>dataLabelFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelNudge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelNudge')" class=ISymbol>dataLabelNudge</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelPositionFactor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelPositionFactor')" class=ISymbol>dataLabelPositionFactor</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabels')" class=ISymbol>dataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelThreshold><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelThreshold')" class=ISymbol>dataLabelThreshold</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dblClickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" target=_parent class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_defaultAxisStart><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" target=_parent class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_depth><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" target=_parent class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_diameter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_diameter')" class=ISymbol>diameter</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_disableIEFading><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" target=_parent class=ISymbol>disableIEFading</a></div></div><div class=SRResult id=SR_disableStack><div class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" target=_parent class=ISymbol>disableStack</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_downBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" target=_parent class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_drawBorder><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" target=_parent class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" target=_parent class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesE.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_edgeTolerance><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" target=_parent class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_enableFontSupport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enableFontSupport')" class=ISymbol>enableFontSupport</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_escapeHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escapeHtml')" class=ISymbol>escapeHtml</a><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a></div></div></div><div class=SRResult id=SR2_escapeHTML><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_escapeHTML')" class=ISymbol>escapeHTML</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesF.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeTooltip><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" target=_parent class=ISymbol>fadeTooltip</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillAlpha><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" target=_parent class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" target=_parent class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" target=_parent class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillColor><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillColor" target=_parent class=ISymbol>fillColor</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillDownBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" target=_parent class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_fillRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" target=_parent class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" target=_parent class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillToValue><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" target=_parent class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillToZero><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" target=_parent class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillUpBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" target=_parent class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_followMouse><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" target=_parent class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_fontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontFamily')" class=ISymbol>fontFamily</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontSize')" class=ISymbol>fontSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontStretch><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontStretch')" class=ISymbol>fontStretch</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_fontWeight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontWeight')" class=ISymbol>fontWeight</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_formatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatString')" class=ISymbol>formatString</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_formatter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatter')" class=ISymbol>formatter</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesG.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_grid><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" target=_parent class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_gridLineColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" target=_parent class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_gridLineWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" target=_parent class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_groups><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" target=_parent class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesH.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hideZeros><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" target=_parent class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_highlightAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" target=_parent class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_highlightColors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightColors')" class=ISymbol>highlightColors</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseDown')" class=ISymbol>highlightMouseDown</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseOver><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseOver')" class=ISymbol>highlightMouseOver</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_hlc><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" target=_parent class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_hubRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" target=_parent class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesI.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_index><div class=IEntry><a href="../files/jqplot-core-js.html#Series.index" target=_parent class=ISymbol>index</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_innerDiameter><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" target=_parent class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_insertBreaks><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" target=_parent class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_intersectionThreshold><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" target=_parent class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_intervalColors><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" target=_parent class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalInnerRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" target=_parent class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalOuterRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" target=_parent class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervals><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" target=_parent class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_isarc><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isarc')" class=ISymbol>isarc</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_isMinorTick><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isMinorTick')" class=ISymbol>isMinorTick</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesL.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="javascript:searchResults.Toggle('SR_label')" class=ISymbol>label</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_labelHeightAdjust><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" target=_parent class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_labelOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" target=_parent class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labelPosition><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelPosition')" class=ISymbol>labelPosition</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div></div><div class=SRResult id=SR_labelRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" target=_parent class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labels')" class=ISymbol>labels</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_labelsFromSeries><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" target=_parent class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_legend><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" target=_parent class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_lineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineCap')" class=ISymbol>lineCap</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_lineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineJoin')" class=ISymbol>lineJoin</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_lineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineWidth')" class=ISymbol>lineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidthAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" target=_parent class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_location><div class=IEntry><a href="javascript:searchResults.Toggle('SR_location')" class=ISymbol>location</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" target=_parent class=IParent>Legend</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesM.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" target=_parent class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" target=_parent class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_markerOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" target=_parent class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_markerRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markerRenderer')" class=ISymbol>markerRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_markSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markSize')" class=ISymbol>markSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="javascript:searchResults.Toggle('SR_max')" class=ISymbol>max</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="javascript:searchResults.Toggle('SR_min')" class=ISymbol>min</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" target=_parent class=IParent>Axis</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesN.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_needlePad><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" target=_parent class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_needleThickness><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" target=_parent class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_neighborThreshold><div class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" target=_parent class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_numberColumns><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberColumns')" class=ISymbol>numberColumns</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberRows><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberRows')" class=ISymbol>numberRows</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" target=_parent class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesO.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_openColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" target=_parent class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesP.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pad><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" target=_parent class=ISymbol>pad</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_padding')" class=ISymbol>padding</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_padMax><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" target=_parent class=ISymbol>padMax</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padMin><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" target=_parent class=ISymbol>padMin</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_pegNeedle><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" target=_parent class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_placement><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" target=_parent class=ISymbol>placement</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_predraw><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" target=_parent class=ISymbol>predraw</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefix')" class=ISymbol>prefix</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_pt2px><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pt2px')" class=ISymbol>pt2px</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesR.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_renderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_renderer')" class=ISymbol>renderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_rendererOptions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rendererOptions')" class=ISymbol>rendererOptions</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_ringColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" target=_parent class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_ringMargin><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" target=_parent class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_ringWidth><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" target=_parent class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_rowSpacing><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" target=_parent class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesS.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_sectionMargin><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" target=_parent class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div><div class=SRResult id=SR_series><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" target=_parent class=ISymbol>series</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesColors><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" target=_parent class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" target=_parent class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesLabelIndex><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" target=_parent class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_seriesToggle><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" target=_parent class=ISymbol>seriesToggle</a></div></div><div class=SRResult id=SR_shadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadow')" class=ISymbol>shadow</a><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadow" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAlpha')" class=ISymbol>shadowAlpha</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAngle')" class=ISymbol>shadowAngle</a><div class=ISubIndex><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" target=_parent class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shadowDepth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowDepth')" class=ISymbol>shadowDepth</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowOffset')" class=ISymbol>shadowOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" target=_parent class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_shadowWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" target=_parent class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shapeRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" target=_parent class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_showBorders><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" target=_parent class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></div></div><div class=SRResult id=SR_showCursorLegend><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" target=_parent class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showDataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showDataLabels')" class=ISymbol>showDataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_showGridline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showGridline')" class=ISymbol>showGridline</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" target=_parent class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabel')" class=ISymbol>showLabel</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabels')" class=ISymbol>showLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_showLine><div class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" target=_parent class=ISymbol>showLine</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_showMark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMark')" class=ISymbol>showMark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMarker')" class=ISymbol>showMarker</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showMinorTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" target=_parent class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showSwatch><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" target=_parent class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_showTickLabels><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" target=_parent class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_showTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" target=_parent class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTicks')" class=ISymbol>showTicks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_showTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTooltip')" class=ISymbol>showTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_showTooltipDataPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" target=_parent class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipGridPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" target=_parent class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" target=_parent class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipUnitPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" target=_parent class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" target=_parent class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="javascript:searchResults.Toggle('SR_size')" class=ISymbol>size</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_sizeAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" target=_parent class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_sliceMargin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sliceMargin')" class=ISymbol>sliceMargin</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_sortData><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" target=_parent class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_sortMergedLabels><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" target=_parent class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></div></div><div class=SRResult id=SR_stackedValue><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" target=_parent class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_stackSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" target=_parent class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_startAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startAngle')" class=ISymbol>startAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_strokeRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" target=_parent class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_strokeStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" target=_parent class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_syncTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" target=_parent class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesT.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_text><div class=IEntry><a href="../files/jqplot-core-js.html#Title.text" target=_parent class=ISymbol>text</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textAlign><div class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" target=_parent class=ISymbol>textAlign</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textColor')" class=ISymbol>textColor</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_themes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" target=_parent class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_thickness><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" target=_parent class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_tickColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" target=_parent class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickInterval><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" target=_parent class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickLength><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" target=_parent class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_tickMode><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" target=_parent class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_tickOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" target=_parent class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickPadding><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" target=_parent class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickRenderer')" class=ISymbol>tickRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_ticks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ticks')" class=ISymbol>ticks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_tickSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickSpacing')" class=ISymbol>tickSpacing</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" target=_parent class=ISymbol>title</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_tooltipAxes><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" target=_parent class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipAxisGroups><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" target=_parent class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_tooltipFadeSpeed><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" target=_parent class=ISymbol>tooltipFadeSpeed</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFormatString')" class=ISymbol>tooltipFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipLocation')" class=ISymbol>tooltipLocation</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipOffset')" class=ISymbol>tooltipOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" target=_parent class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesU.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_upBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" target=_parent class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_useAxesFormatters><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useAxesFormatters')" class=ISymbol>useAxesFormatters</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_useNegativeColors><div class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" target=_parent class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_useSeriesColor><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" target=_parent class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesV.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_varyBarColor><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" target=_parent class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_varyBlockColors><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" target=_parent class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_varyBubbleColors><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" target=_parent class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesW.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_waterfall><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" target=_parent class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_wickColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" target=_parent class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_widthRatio><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" target=_parent class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesX.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_xaxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.xaxis" target=_parent class=ISymbol>xaxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_xoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" target=_parent class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_xpadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" target=_parent class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesY.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_yaxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.yaxis" target=_parent class=ISymbol>yaxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_yoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" target=_parent class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_ypadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" target=_parent class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_yvalues><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" target=_parent class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/search/PropertiesZ.html.









































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.4 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav"  href="../../tests/"><span>&gt;</span>Examples</a><a class="nav"  href="../../docs/"><span>&gt;</span>Docs</a><a class="nav"  href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav"  href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
document.getElementById("Loading").style.display="none";
document.getElementById("NoMatches").style.display="none";
var searchResults = new SearchResults("searchResults", "HTML");
searchResults.Search();
--></script></div><script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>

Added Site/Site_W/jpqplot/docs/styles/1.css.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
/*
   IMPORTANT: If you're editing this file in the output directory of one of
   your projects, your changes will be overwritten the next time you run
   Natural Docs.  Instead, copy this file to your project directory, make your
   changes, and you can use it with -s.  Even better would be to make a CSS
   file in your project directory with only your changes, which you can then
   use with -s [original style] [your changes].

   On the other hand, if you're editing this file in the Natural Docs styles
   directory, the changes will automatically be applied to all your projects
   that use this style the next time Natural Docs is run on them.

   This file is part of Natural Docs, which is Copyright (C) 2003-2008 Greg Valure
   Natural Docs is licensed under the GPL
*/

body {
    font: 10pt Verdana, Arial, sans-serif;
    color: #000000;
    margin: 0; padding: 0;
    }

.ContentPage,
.IndexPage,
.FramedMenuPage {
    background-color: #E8E8E8;
    }
.FramedContentPage,
.FramedIndexPage,
.FramedSearchResultsPage,
.PopupSearchResultsPage {
    background-color: #FFFFFF;
    }


a:link,
a:visited { color: #900000; text-decoration: none }
a:hover { color: #900000; text-decoration: underline }
a:active { color: #FF0000; text-decoration: underline }

td {
    vertical-align: top }

img { border: 0;  }


/*
    Comment out this line to use web-style paragraphs (blank line between
    paragraphs, no indent) instead of print-style paragraphs (no blank line,
    indented.)
*/
p {
    text-indent: 5ex; margin: 0 }


/*  Opera doesn't break with just wbr, but will if you add this.  */
.Opera wbr:after {
	content: "\00200B";
	}


/*  Blockquotes are used as containers for things that may need to scroll.  */
blockquote {
    padding: 0;
    margin: 0;
    overflow: auto;
    }


.Firefox1 blockquote {
    padding-bottom: .5em;
    }

/*  Turn off scrolling when printing.  */
@media print {
    blockquote {
        overflow: visible;
        }
    .IE blockquote {
        width: auto;
        }
    }



#Menu {
    font-size: 9pt;
    padding: 10px 0 0 0;
    }
.ContentPage #Menu,
.IndexPage #Menu {
    position: absolute;
    top: 0;
    left: 0;
    width: 31ex;
    overflow: hidden;
    }
.ContentPage .Firefox #Menu,
.IndexPage .Firefox #Menu {
    width: 27ex;
    }


    .MTitle {
        font-size: 16pt; font-weight: bold; font-variant: small-caps;
        text-align: center;
        padding: 5px 10px 15px 10px;
        border-bottom: 1px dotted #000000;
        margin-bottom: 15px }

    .MSubTitle {
        font-size: 9pt; font-weight: normal; font-variant: normal;
        margin-top: 1ex; margin-bottom: 5px }


    .MEntry a:link,
    .MEntry a:hover,
    .MEntry a:visited { color: #606060; margin-right: 0 }
    .MEntry a:active { color: #A00000; margin-right: 0 }


    .MGroup {
        font-variant: small-caps; font-weight: bold;
        margin: 1em 0 1em 10px;
        }

    .MGroupContent {
        font-variant: normal; font-weight: normal }

    .MGroup a:link,
    .MGroup a:hover,
    .MGroup a:visited { color: #545454; margin-right: 10px }
    .MGroup a:active { color: #A00000; margin-right: 10px }


    .MFile,
    .MText,
    .MLink,
    .MIndex {
        padding: 1px 17px 2px 10px;
        margin: .25em 0 .25em 0;
        }

    .MText {
        font-size: 8pt; font-style: italic }

    .MLink {
        font-style: italic }

    #MSelected {
        color: #000000; background-color: #FFFFFF;
        /*  Replace padding with border.  */
        padding: 0 10px 0 10px;
        border-width: 1px 2px 2px 0; border-style: solid; border-color: #000000;
        margin-right: 5px;
        }

    /*  Close off the left side when its in a group.  */
    .MGroup #MSelected {
        padding-left: 9px; border-left-width: 1px }

    /*  A treat for Mozilla users.  Blatantly non-standard.  Will be replaced with CSS 3 attributes when finalized/supported.  */
    .Firefox #MSelected {
        -moz-border-radius-topright: 10px;
        -moz-border-radius-bottomright: 10px }
    .Firefox .MGroup #MSelected {
        -moz-border-radius-topleft: 10px;
        -moz-border-radius-bottomleft: 10px }


    #MSearchPanel {
        padding: 0px 6px;
        margin: .25em 0;
        }


    #MSearchField {
        font: italic 9pt Verdana, sans-serif;
        color: #606060;
        background-color: #E8E8E8;
        border: none;
        padding: 2px 4px;
        width: 100%;
        }
    /* Only Opera gets it right. */
    .Firefox #MSearchField,
    .IE #MSearchField,
    .Safari #MSearchField {
        width: 94%;
        }
    .Opera9 #MSearchField,
    .Konqueror #MSearchField {
        width: 97%;
        }
    .FramedMenuPage .Firefox #MSearchField,
    .FramedMenuPage .Safari #MSearchField,
    .FramedMenuPage .Konqueror #MSearchField {
        width: 98%;
        }

    /* Firefox doesn't do this right in frames without #MSearchPanel added on.
        It's presence doesn't hurt anything other browsers. */
    #MSearchPanel.MSearchPanelInactive:hover #MSearchField {
        background-color: #FFFFFF;
        border: 1px solid #C0C0C0;
        padding: 1px 3px;
        }
    .MSearchPanelActive #MSearchField {
        background-color: #FFFFFF;
        border: 1px solid #C0C0C0;
        font-style: normal;
        padding: 1px 3px;
        }

    #MSearchType {
        visibility: hidden;
        font: 8pt Verdana, sans-serif;
        width: 98%;
        padding: 0;
        border: 1px solid #C0C0C0;
        }
    .MSearchPanelActive #MSearchType,
    /*  As mentioned above, Firefox doesn't do this right in frames without #MSearchPanel added on. */
    #MSearchPanel.MSearchPanelInactive:hover #MSearchType,
    #MSearchType:focus {
        visibility: visible;
        color: #606060;
        }
    #MSearchType option#MSearchEverything {
        font-weight: bold;
        }

    .Opera8 .MSearchPanelInactive:hover,
    .Opera8 .MSearchPanelActive {
        margin-left: -1px;
        }


    iframe#MSearchResults {
        width: 60ex;
        height: 15em;
        }
    #MSearchResultsWindow {
        display: none;
        position: absolute;
        left: 0; top: 0;
        border: 1px solid #000000;
        background-color: #E8E8E8;
        }
    #MSearchResultsWindowClose {
        font-weight: bold;
        font-size: 8pt;
        display: block;
        padding: 2px 5px;
        }
    #MSearchResultsWindowClose:link,
    #MSearchResultsWindowClose:visited {
        color: #000000;
        text-decoration: none;
        }
    #MSearchResultsWindowClose:active,
    #MSearchResultsWindowClose:hover {
        color: #800000;
        text-decoration: none;
        background-color: #F4F4F4;
        }




#Content {
    padding-bottom: 15px;
    }

.ContentPage #Content {
    border-width: 0 0 1px 1px;
    border-style: solid;
    border-color: #000000;
    background-color: #FFFFFF;
    font-size: 9pt;  /* To make 31ex match the menu's 31ex. */
    margin-left: 31ex;
    }
.ContentPage .Firefox #Content {
    margin-left: 27ex;
    }



    .CTopic {
        font-size: 10pt;
        margin-bottom: 3em;
        }


    .CTitle {
        font-size: 12pt; font-weight: bold;
        border-width: 0 0 1px 0; border-style: solid; border-color: #A0A0A0;
        margin: 0 15px .5em 15px }

    .CGroup .CTitle {
        font-size: 16pt; font-variant: small-caps;
        padding-left: 15px; padding-right: 15px;
        border-width: 0 0 2px 0; border-color: #000000;
        margin-left: 0; margin-right: 0 }

    .CClass .CTitle,
    .CInterface .CTitle,
    .CDatabase .CTitle,
    .CDatabaseTable .CTitle,
    .CSection .CTitle {
        font-size: 18pt;
        color: #FFFFFF; background-color: #A0A0A0;
        padding: 10px 15px 10px 15px;
        border-width: 2px 0; border-color: #000000;
        margin-left: 0; margin-right: 0 }

    #MainTopic .CTitle {
        font-size: 20pt;
        color: #FFFFFF; background-color: #7070C0;
        padding: 10px 15px 10px 15px;
        border-width: 0 0 3px 0; border-color: #000000;
        margin-left: 0; margin-right: 0 }

    .CBody {
        margin-left: 15px; margin-right: 15px }


    .CToolTip {
        position: absolute; visibility: hidden;
        left: 0; top: 0;
        background-color: #FFFFE0;
        padding: 5px;
        border-width: 1px 2px 2px 1px; border-style: solid; border-color: #000000;
        font-size: 8pt;
        }

    .Opera .CToolTip {
        max-width: 98%;
        }

    /*  Scrollbars would be useless.  */
    .CToolTip blockquote {
        overflow: hidden;
        }
    .IE6 .CToolTip blockquote {
        overflow: visible;
        }

    .CHeading {
        font-weight: bold; font-size: 10pt;
        margin: 1.5em 0 .5em 0;
        }

    .CBody pre {
        font: 10pt "Courier New", Courier, monospace;
        margin: 1em 0;
        }

    .CBody ul {
        /*  I don't know why CBody's margin doesn't apply, but it's consistent across browsers so whatever.
             Reapply it here as padding.  */
        padding-left: 15px; padding-right: 15px;
        margin: .5em 5ex .5em 5ex;
        }

    .CDescriptionList {
        margin: .5em 5ex 0 5ex }

        .CDLEntry {
            font: 10pt "Courier New", Courier, monospace; color: #808080;
            padding-bottom: .25em;
            white-space: nowrap }

        .CDLDescription {
            font-size: 10pt;  /*  For browsers that don't inherit correctly, like Opera 5.  */
            padding-bottom: .5em; padding-left: 5ex }


    .CTopic img {
        text-align: center;
        display: block;
        margin: 1em auto;
        }
    .CImageCaption {
        font-variant: small-caps;
        font-size: 8pt;
        color: #808080;
        text-align: center;
        position: relative;
        top: 1em;
        }

    .CImageLink {
        color: #808080;
        font-style: italic;
        }
    a.CImageLink:link,
    a.CImageLink:visited,
    a.CImageLink:hover { color: #808080 }





.Prototype {
    font: 10pt "Courier New", Courier, monospace;
    padding: 5px 3ex;
    border-width: 1px; border-style: solid;
    margin: 0 5ex 1.5em 5ex;
    }

    .Prototype td {
        font-size: 10pt;
        }

    .PDefaultValue,
    .PDefaultValuePrefix,
    .PTypePrefix {
        color: #8F8F8F;
        }
    .PTypePrefix {
        text-align: right;
        }
    .PAfterParameters {
        vertical-align: bottom;
        }

    .IE .Prototype table {
        padding: 0;
        }

    .CFunction .Prototype {
        background-color: #F4F4F4; border-color: #D0D0D0 }
    .CProperty .Prototype {
        background-color: #F4F4FF; border-color: #C0C0E8 }
    .CVariable .Prototype {
        background-color: #FFFFF0; border-color: #E0E0A0 }

    .CClass .Prototype {
        border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0;
        background-color: #F4F4F4;
        }
    .CInterface .Prototype {
        border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0D0;
        background-color: #F4F4FF;
        }

    .CDatabaseIndex .Prototype,
    .CConstant .Prototype {
        background-color: #D0D0D0; border-color: #000000 }
    .CType .Prototype,
    .CEnumeration .Prototype {
        background-color: #FAF0F0; border-color: #E0B0B0;
        }
    .CDatabaseTrigger .Prototype,
    .CEvent .Prototype,
    .CDelegate .Prototype {
        background-color: #F0FCF0; border-color: #B8E4B8 }

    .CToolTip .Prototype {
        margin: 0 0 .5em 0;
        white-space: nowrap;
        }





.Summary {
    margin: 1.5em 5ex 0 5ex }

    .STitle {
        font-size: 12pt; font-weight: bold;
        margin-bottom: .5em }


    .SBorder {
        background-color: #FFFFF0;
        padding: 15px;
        border: 1px solid #C0C060 }

    /* In a frame IE 6 will make them too long unless you set the width to 100%.  Without frames it will be correct without a width
        or slightly too long (but not enough to scroll) with a width.  This arbitrary weirdness simply astounds me.  IE 7 has the same
        problem with frames, haven't tested it without.  */
    .FramedContentPage .IE .SBorder {
        width: 100% }

    /*  A treat for Mozilla users.  Blatantly non-standard.  Will be replaced with CSS 3 attributes when finalized/supported.  */
    .Firefox .SBorder {
        -moz-border-radius: 20px }


    .STable {
        font-size: 9pt; width: 100% }

    .SEntry {
        width: 30% }
    .SDescription {
        width: 70% }


    .SMarked {
        background-color: #F8F8D8 }

    .SDescription { padding-left: 2ex }
    .SIndent1 .SEntry { padding-left: 1.5ex }   .SIndent1 .SDescription { padding-left: 3.5ex }
    .SIndent2 .SEntry { padding-left: 3.0ex }   .SIndent2 .SDescription { padding-left: 5.0ex }
    .SIndent3 .SEntry { padding-left: 4.5ex }   .SIndent3 .SDescription { padding-left: 6.5ex }
    .SIndent4 .SEntry { padding-left: 6.0ex }   .SIndent4 .SDescription { padding-left: 8.0ex }
    .SIndent5 .SEntry { padding-left: 7.5ex }   .SIndent5 .SDescription { padding-left: 9.5ex }

    .SDescription a { color: #800000}
    .SDescription a:active { color: #A00000 }

    .SGroup td {
        padding-top: .5em; padding-bottom: .25em }

    .SGroup .SEntry {
        font-weight: bold; font-variant: small-caps }

    .SGroup .SEntry a { color: #800000 }
    .SGroup .SEntry a:active { color: #F00000 }


    .SMain td,
    .SClass td,
    .SDatabase td,
    .SDatabaseTable td,
    .SSection td {
        font-size: 10pt;
        padding-bottom: .25em }

    .SClass td,
    .SDatabase td,
    .SDatabaseTable td,
    .SSection td {
        padding-top: 1em }

    .SMain .SEntry,
    .SClass .SEntry,
    .SDatabase .SEntry,
    .SDatabaseTable .SEntry,
    .SSection .SEntry {
        font-weight: bold;
        }

    .SMain .SEntry a,
    .SClass .SEntry a,
    .SDatabase .SEntry a,
    .SDatabaseTable .SEntry a,
    .SSection .SEntry a { color: #000000 }

    .SMain .SEntry a:active,
    .SClass .SEntry a:active,
    .SDatabase .SEntry a:active,
    .SDatabaseTable .SEntry a:active,
    .SSection .SEntry a:active { color: #A00000 }





.ClassHierarchy {
    margin: 0 15px 1em 15px }

    .CHEntry {
        border-width: 1px 2px 2px 1px; border-style: solid; border-color: #A0A0A0;
        margin-bottom: 3px;
        padding: 2px 2ex;
        font-size: 10pt;
        background-color: #F4F4F4; color: #606060;
        }

    .Firefox .CHEntry {
        -moz-border-radius: 4px;
        }

    .CHCurrent .CHEntry {
        font-weight: bold;
        border-color: #000000;
        color: #000000;
        }

    .CHChildNote .CHEntry {
        font-style: italic;
        font-size: 8pt;
        }

    .CHIndent {
        margin-left: 3ex;
        }

    .CHEntry a:link,
    .CHEntry a:visited,
    .CHEntry a:hover {
        color: #606060;
        }
    .CHEntry a:active {
        color: #800000;
        }





#Index {
    background-color: #FFFFFF;
    }

/*  As opposed to .PopupSearchResultsPage #Index  */
.IndexPage #Index,
.FramedIndexPage #Index,
.FramedSearchResultsPage #Index {
    padding: 15px;
    }

.IndexPage #Index {
    border-width: 0 0 1px 1px;
    border-style: solid;
    border-color: #000000;
    font-size: 9pt;  /* To make 27ex match the menu's 27ex. */
    margin-left: 27ex;
    }


    .IPageTitle {
        font-size: 20pt; font-weight: bold;
        color: #FFFFFF; background-color: #7070C0;
        padding: 10px 15px 10px 15px;
        border-width: 0 0 3px 0; border-color: #000000; border-style: solid;
        margin: -15px -15px 0 -15px }

    .FramedSearchResultsPage .IPageTitle {
        margin-bottom: 15px;
        }

    .INavigationBar {
        font-size: 10pt;
        text-align: center;
        background-color: #FFFFF0;
        padding: 5px;
        border-bottom: solid 1px black;
        margin: 0 -15px 15px -15px;
        }

    .INavigationBar a {
        font-weight: bold }

    .IHeading {
        font-size: 16pt; font-weight: bold;
        padding: 2.5em 0 .5em 0;
        text-align: center;
        width: 3.5ex;
        }
    #IFirstHeading {
        padding-top: 0;
        }

    .IEntry {
        font-size: 10pt;
        padding-left: 1ex;
        }
    .PopupSearchResultsPage .IEntry {
        font-size: 8pt;
        padding: 1px 5px;
        }
    .PopupSearchResultsPage .Opera9 .IEntry,
    .FramedSearchResultsPage .Opera9 .IEntry {
        text-align: left;
        }
    .FramedSearchResultsPage .IEntry {
        padding: 0;
        }

    .ISubIndex {
        padding-left: 3ex; padding-bottom: .5em }
    .PopupSearchResultsPage .ISubIndex {
        display: none;
        }

    /*  While it may cause some entries to look like links when they aren't, I found it's much easier to read the
         index if everything's the same color.  */
    .ISymbol {
        font-weight: bold; color: #900000  }

    .IndexPage .ISymbolPrefix,
    .FramedIndexPage .ISymbolPrefix {
        font-size: 10pt;
        text-align: right;
        color: #C47C7C;
        background-color: #F8F8F8;
        border-right: 3px solid #E0E0E0;
        border-left: 1px solid #E0E0E0;
        padding: 0 1px 0 2px;
        }
    .PopupSearchResultsPage .ISymbolPrefix,
    .FramedSearchResultsPage .ISymbolPrefix {
        color: #900000;
        }
    .PopupSearchResultsPage .ISymbolPrefix {
        font-size: 8pt;
        }

    .IndexPage #IFirstSymbolPrefix,
    .FramedIndexPage #IFirstSymbolPrefix {
        border-top: 1px solid #E0E0E0;
        }
    .IndexPage #ILastSymbolPrefix,
    .FramedIndexPage #ILastSymbolPrefix {
        border-bottom: 1px solid #E0E0E0;
        }
    .IndexPage #IOnlySymbolPrefix,
    .FramedIndexPage #IOnlySymbolPrefix {
        border-top: 1px solid #E0E0E0;
        border-bottom: 1px solid #E0E0E0;
        }

    a.IParent,
    a.IFile {
        display: block;
        }

    .PopupSearchResultsPage .SRStatus {
        padding: 2px 5px;
        font-size: 8pt;
        font-style: italic;
        }
    .FramedSearchResultsPage .SRStatus {
        font-size: 10pt;
        font-style: italic;
        }

    .SRResult {
        display: none;
        }



#Footer {
    font-size: 8pt;
    color: #989898;
    text-align: right;
    }

#Footer p {
    text-indent: 0;
    margin-bottom: .5em;
    }

.ContentPage #Footer,
.IndexPage #Footer {
    text-align: right;
    margin: 2px;
    }

.FramedMenuPage #Footer {
    text-align: center;
    margin: 5em 10px 10px 10px;
    padding-top: 1em;
    border-top: 1px solid #C8C8C8;
    }

    #Footer a:link,
    #Footer a:hover,
    #Footer a:visited { color: #989898 }
    #Footer a:active { color: #A00000 }

Added Site/Site_W/jpqplot/docs/styles/2.css.





























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
html, body {
  height: 100%;
}

/*
div.Firefox {
  height: 100%;
}
*/

.MTitle {
    font-variant: normal;
}

.MLink {
    font-style: normal;
}

.CBody {
margin-left: 30px;
margin-right: 30px;
}

p {
   text-indent: 0;
   margin-bottom: 1em;
   }

.CBody p {
/*
    padding-top: 4px;
    padding-bottom: 4px;
*/
}

#Menu {
  margin-top: 94px;
  border: 0px;
}

body.ContentPage {
  background-image: url('../../images/background.jpg');
  background-color: #818181;
	background-position: left top;
	background-repeat: repeat-x;
}

.MGroup a:link,
.MGroup a:hover,
.MGroup a:visited { color: #bfbfbf; margin-right: 10px }
.MGroup a:active { color: #f58f07; margin-right: 10px }


.MEntry a:link,
.MEntry a:hover,
.MEntry a:visited { color: #bfbfbf; margin-right: 0 }
.MEntry a:active { color: #f58f07; margin-right: 0 }

#Footer {
  color: #bfbfbf;
}

#Footer a:link, #Footer a:hover, #Footer a:visited {
  color: #5c93f0;
}

#MainTopic div.CTitle.logo {
	color: #292929;
	font-size: 0px;
	font-style: normal;
	font-weight: normal;
	border-width: 0px;
	padding: 0px;
	margin: 0px;
	background-position: left top;
	background-repeat: no-repeat;
	background-image: url('../../images/logo.jpg');
	background-color: #292929;
	height: 94px;
	position: relative;

}

#MainTopic h1.CTitle a {
  display: none;
}


#MainTopic div.CBody p:first-child {
  margin-top: 24px;
}

.ContentPage #Content {
  border: 0px;
/*   height: 100%; */
}

#IPageLogo {
	width: 780px;
	color: #292929;
	font-style: normal;
	font-weight: normal;
	border-width: 0px;
	padding: 0px;
	margin: 0px;
	background-position: left top;
	background-repeat: no-repeat;
	background-image: url('../../images/logo.jpg');
	background-color: #292929;
	height: 94px;
	position: relative;
	left: 27ex;
}

#Menu, #IPageLogo {
    font-size: 9pt;
}

body.IndexPage {
  background-image: url('../../images/background.jpg');
}

/*#IPageLogo:hover {
    cursor: pointer;
}*/

.IPageTitle {
  background-color:#FFFFF0;
  color: #333333;
  border: 0px;
}



div.nav {
    position:relative;
    top: 70px;
  text-align: right;
}

a.nav span {
    font-size: 11px;
    position: relative;
    bottom: 2px;
}

a.nav:visited {
    text-decoration: none;
    border: 0px;
  color: #aaaaaa;
}

a.nav, a.nav:link {
    border: 0px;
    text-decoration: none;
  font-family: Tahoma, "Helvetica Neue", "Trebuchet MS", Verdana, Arial, sans-serif;
  font-size: 16px;
  color: #aaaaaa; 
  margin-right: 11px;
}

a.nav:hover {
    text-decoration: none;
    border: 0px;
    color: #E0771C;
}

a.nav:active {
    text-decoration: none;
    border: 0px;
  color: #E0771C;
}


Added Site/Site_W/jpqplot/docs/styles/main.css.





>
>
1
2
@import URL("1.css");
@import URL("2.css");

Added Site/Site_W/jpqplot/examples/OHLC.html.



























































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>OHLC Charts</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
 <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>


  <style type="text/css">
    .jqplot-target {
        margin-bottom: 2em;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 4em;
        
    }
    
    p {
        margin: 2em 0;
    }
    
    .note {
        font-size: 0.8em;
    }
  </style>

  <!-- END: load jqplot -->
    
<script class="common" type="text/javascript">
    $.jqplot.config.enablePlugins = true;
    
    ohlc = [['07/06/09', 138.7, 139.68, 135.18, 135.4],
    ['06/29/09', 143.46, 144.66, 139.79, 140.02],
    ['06/22/09', 140.67, 143.56, 132.88, 142.44],
    ['06/15/09', 136.01, 139.5, 134.53, 139.48],
    ['06/08/09', 143.82, 144.56, 136.04, 136.97],
    ['06/01/09', 136.47, 146.4, 136, 144.67],
    ['05/26/09', 124.76, 135.9, 124.55, 135.81],
    ['05/18/09', 123.73, 129.31, 121.57, 122.5],
    ['05/11/09', 127.37, 130.96, 119.38, 122.42],
    ['05/04/09', 128.24, 133.5, 126.26, 129.19],
    ['04/27/09', 122.9, 127.95, 122.66, 127.24],
    ['04/20/09', 121.73, 127.2, 118.6, 123.9],
    ['04/13/09', 120.01, 124.25, 115.76, 123.42],
    ['04/06/09', 114.94, 120, 113.28, 119.57],
    ['03/30/09', 104.51, 116.13, 102.61, 115.99],
    ['03/23/09', 102.71, 109.98, 101.75, 106.85],
    ['03/16/09', 96.53, 103.48, 94.18, 101.59],
    ['03/09/09', 84.18, 97.2, 82.57, 95.93],
    ['03/02/09', 88.12, 92.77, 82.33, 85.3],
    ['02/23/09', 91.65, 92.92, 86.51, 89.31],
    ['02/17/09', 96.87, 97.04, 89, 91.2],
    ['02/09/09', 100, 103, 95.77, 99.16],
    ['02/02/09', 89.1, 100, 88.9, 99.72],
    ['01/26/09', 88.86, 95, 88.3, 90.13],
    ['01/20/09', 81.93, 90, 78.2, 88.36],
    ['01/12/09', 90.46, 90.99, 80.05, 82.33],
    ['01/05/09', 93.17, 97.17, 90.04, 90.58],
    ['12/29/08', 86.52, 91.04, 84.72, 90.75],
    ['12/22/08', 90.02, 90.03, 84.55, 85.81],
    ['12/15/08', 95.99, 96.48, 88.02, 90],
    ['12/08/08', 97.28, 103.6, 92.53, 98.27],
    ['12/01/08', 91.3, 96.23, 86.5, 94],
    ['11/24/08', 85.21, 95.25, 84.84, 92.67],
    ['11/17/08', 88.48, 91.58, 79.14, 82.58],    
    ['11/10/08', 100.17, 100.4, 86.02, 90.24],
    ['11/03/08', 105.93, 111.79, 95.72, 98.24],
    ['10/27/08', 95.07, 112.19, 91.86, 107.59],
    ['10/20/08', 99.78, 101.25, 90.11, 96.38],
    ['10/13/08', 104.55, 116.4, 85.89, 97.4],
    ['10/06/08', 91.96, 101.5, 85, 96.8],
    ['09/29/08', 119.62, 119.68, 94.65, 97.07],
    ['09/22/08', 139.94, 140.25, 123, 128.24],
    ['09/15/08', 142.03, 147.69, 120.68, 140.91],
    ['09/08/08', 164.57, 164.89, 146, 148.94]
    ];
    
    ohlc_b = [['07/06/09', 138.7, 139.68, 135.18, 135.4, 'j'],
    ['06/29/09', 143.46, 144.66, 139.79, 140.02, 'q'],
    ['06/22/09', 140.67, 143.56, 132.88, 142.44, 'p'],
    ['06/15/09', 136.01, 139.5, 134.53, 139.48, 'l'],
    ['06/08/09', 143.82, 144.56, 136.04, 136.97, 'o'],
    ['06/01/09', 136.47, 146.4, 136, 144.67, 't'],
    ['05/26/09', 124.76, 135.9, 124.55, 135.81, '_'],
    ['05/18/09', 123.73, 129.31, 121.57, 122.5, 'c'],
    ['05/11/09', 127.37, 130.96, 119.38, 122.42, 'h'],
    ['05/04/09', 128.24, 133.5, 126.26, 129.19, 'a'],
    ['04/27/09', 122.9, 127.95, 122.66, 127.24, 'r'],
    ['04/20/09', 121.73, 127.2, 118.6, 123.9, 't'],
    ['04/13/09', 120.01, 124.25, 115.76, 123.42, 's']
    ];     
    
    hlc = [['07/06/09', 139.68, 135.18, 135.4],
    ['06/29/09', 144.66, 139.79, 140.02],
    ['06/22/09', 143.56, 132.88, 142.44],
    ['06/15/09', 139.5, 134.53, 139.48],
    ['06/08/09', 144.56, 136.04, 136.97],
    ['06/01/09', 146.4, 136, 144.67],
    ['05/26/09', 135.9, 124.55, 135.81],
    ['05/18/09', 129.31, 121.57, 122.5],
    ['05/11/09', 130.96, 119.38, 122.42],
    ['05/04/09', 133.5, 126.26, 129.19],
    ['04/27/09', 127.95, 122.66, 127.24],
    ['04/20/09', 127.2, 118.6, 123.9],
    ['04/13/09', 124.25, 115.76, 123.42],
    ['04/06/09', 120, 113.28, 119.57],
    ['03/30/09', 116.13, 102.61, 115.99],
    ['03/23/09',  109.98, 101.75, 106.85],
    ['03/16/09', 103.48, 94.18, 101.59],
    ['03/09/09', 97.2, 82.57, 95.93],
    ['03/02/09', 92.77, 82.33, 85.3],
    ['02/23/09', 92.92, 86.51, 89.31],
    ['02/17/09', 97.04, 89, 91.2],
    ['02/09/09', 103, 95.77, 99.16],
    ['02/02/09', 100, 88.9, 99.72],
    ['01/26/09', 95, 88.3, 90.13],
    ['01/20/09', 90, 78.2, 88.36],
    ['01/12/09', 90.99, 80.05, 82.33],
    ['01/05/09', 97.17, 90.04, 90.58],
    ['12/29/08', 91.04, 84.72, 90.75],
    ['12/22/08', 90.03, 84.55, 85.81],
    ['12/15/08', 96.48, 88.02, 90],
    ['12/08/08', 103.6, 92.53, 98.27],
    ['12/01/08', 96.23, 86.5, 94],
    ['11/24/08', 95.25, 84.84, 92.67],
    ['11/17/08', 91.58, 79.14, 82.58],  
    ['11/10/08', 100.4, 86.02, 90.24],
    ['11/03/08', 111.79, 95.72, 98.24],
    ['10/27/08', 112.19, 91.86, 107.59],
    ['10/20/08', 101.25, 90.11, 96.38],
    ['10/13/08', 116.4, 85.89, 97.4],
    ['10/06/08', 101.5, 85, 96.8],
    ['09/29/08', 119.68, 94.65, 97.07],
    ['09/22/08', 140.25, 123, 128.24],
    ['09/15/08', 147.69, 120.68, 140.91],
    ['09/08/08', 164.89, 146, 148.94]
    ];
    
</script>

<script class="code" type="text/javascript">$(document).ready(function(){       
    plot1 = $.jqplot('chart1',[ohlc],{
      title: 'Chart',
      axesDefaults:{},
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{formatString:'%y.%m'}
          },
          yaxis: {
              tickOptions:{formatString:'%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{}}],
      cursor:{
          zoom:true,
          tooltipOffset: 10,
          tooltipLocation: 'nw'
      }
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){  
    plot2 = $.jqplot('chart2',[ohlc],{
      title: 'Chart',
      axesDefaults:{},
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{formatString:'%y.%m'}
          },
          yaxis: {
              tickOptions:{formatString:'%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
      cursor:{
          zoom:true,
          tooltipOffset: 10,
          tooltipLocation: 'nw'
      },
      highlighter: {
          showMarker:false,
          tooltipAxes: 'xy',
          yvalues: 4,
          formatString:'<table class="jqplot-highlighter"> \
          <tr><td>date:</td><td>%s</td></tr> \
          <tr><td>open:</td><td>%s</td></tr> \
          <tr><td>hi:</td><td>%s</td></tr> \
          <tr><td>low:</td><td>%s</td></tr> \
          <tr><td>close:</td><td>%s</td></tr></table>'
      }
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){  
    plot2b = $.jqplot('chart2b',[ohlc_b],{
      title: 'Chart',
      axesDefaults:{},
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{formatString:'%y.%m'}
          },
          yaxis: {
              tickOptions:{formatString:'%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
      cursor:{
          zoom:true,
          tooltipOffset: 10,
          tooltipLocation: 'nw'
      },
      highlighter: {
          showMarker:false,
          tooltipAxes: 'xy',
          yvalues: 5,
          formatString:'<table class="jqplot-highlighter"> \
          <tr><td>date:</td><td>%s</td></tr> \
          <tr><td>open:</td><td>%s</td></tr> \
          <tr><td>hi:</td><td>%s</td></tr> \
          <tr><td>low:</td><td>%s</td></tr> \
          <tr><td>close:</td><td>%s</td></tr> \
          <tr><td>letter:</td><td>%s</td></tr></table>'
      }
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){ 
    plot3 = $.jqplot('chart3',[hlc],{
      title: 'Chart',
      axesDefaults:{},
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{formatString:'%Y.%m'}
          },
          yaxis: {
              tickOptions:{formatString:'%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{}}],
      cursor:{
          zoom:true,
          tooltipOffset: 10,
          tooltipLocation: 'nw'
      }
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){ 
    var catOHLC = [[1, 138.7, 139.68, 135.18, 135.4],
    [2, 143.46, 144.66, 139.79, 140.02],
    [3, 140.67, 143.56, 132.88, 142.44],
    [4, 136.01, 139.5, 134.53, 139.48],
    [5, 143.82, 144.56, 136.04, 136.97],
    [6, 136.47, 146.4, 136, 144.67],
    [7, 124.76, 135.9, 124.55, 135.81],
    [8, 123.73, 129.31, 121.57, 122.5]];
    
    var ticks = ['Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue'];
        
    plot4 = $.jqplot('chart4',[catOHLC],{
      axes: {
          xaxis: {
              renderer:$.jqplot.CategoryAxisRenderer,
              ticks:ticks
          },
          yaxis: {
              tickOptions:{formatString:'$%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}]
    });
});</script>


<script type="text/javascript">
    $(document).ready(function(){
        
        $('script.code').each(function(index) {
            $('pre.code').eq(index).text($(this).html());
        });
        $('script.common').each(function(index) {
            $('pre.common').eq(index).html($(this).html());
        });
        $(document).unload(function() {$('*').unbind(); });
    });
</script> 

  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" class="code" style="margin:20px;height:240px; width:640px;"></div>
<pre class="code"></pre>
<div id="chart2" class="code" style="margin:20px;height:240px; width:640px;"></div>
<pre class="code"></pre>
<div id="chart2b" class="code" style="margin:20px;height:240px; width:640px;"></div>
<pre class="code"></pre>
<div id="chart3" class="code" style="margin:20px;height:240px; width:640px;"></div>
<pre class="code"></pre>
<div id="chart4" class="code" style="margin:20px;height:320px; width:500px;"></div>
<pre class="code"></pre>
<p>The examples below use the folowing code:</p>
<pre class="common"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/OHLC2.html.



































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Open Hi Low Close and Canclestick Charts</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
<!--  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
-->

  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">
  
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
    
    var ohlc = [['07/06/09', 138.7, 139.68, 135.18, 135.4],
    ['06/29/09', 143.46, 144.66, 139.79, 140.02],
    ['06/22/09', 140.67, 143.56, 132.88, 142.44],
    ['06/15/09', 136.01, 139.5, 134.53, 139.48],
    ['06/08/09', 143.82, 144.56, 136.04, 136.97],
    ['06/01/09', 136.47, 146.4, 136, 144.67],
    ['05/26/09', 124.76, 135.9, 124.55, 135.81],
    ['05/18/09', 123.73, 129.31, 121.57, 122.5],
    ['05/11/09', 127.37, 130.96, 119.38, 122.42],
    ['05/04/09', 128.24, 133.5, 126.26, 129.19],
    ['04/27/09', 122.9, 127.95, 122.66, 127.24],
    ['04/20/09', 121.73, 127.2, 118.6, 123.9],
    ['04/13/09', 120.01, 124.25, 115.76, 123.42],
    ['04/06/09', 114.94, 120, 113.28, 119.57],
    ['03/30/09', 104.51, 116.13, 102.61, 115.99],
    ['03/23/09', 102.71, 109.98, 101.75, 106.85],
    ['03/16/09', 96.53, 103.48, 94.18, 101.59],
    ['03/09/09', 84.18, 97.2, 82.57, 95.93],
    ['03/02/09', 88.12, 92.77, 82.33, 85.3],
    ['02/23/09', 91.65, 92.92, 86.51, 89.31],
    ['02/17/09', 96.87, 97.04, 89, 91.2],
    ['02/09/09', 100, 103, 95.77, 99.16],
    ['02/02/09', 89.1, 100, 88.9, 99.72],
    ['01/26/09', 88.86, 95, 88.3, 90.13],
    ['01/20/09', 81.93, 90, 78.2, 88.36],
    ['01/12/09', 90.46, 90.99, 80.05, 82.33],
    ['01/05/09', 93.17, 97.17, 90.04, 90.58],
    ['12/29/08', 86.52, 91.04, 84.72, 90.75],
    ['12/22/08', 90.02, 90.03, 84.55, 85.81],
    ['12/15/08', 95.99, 96.48, 88.02, 90],
    ['12/08/08', 97.28, 103.6, 92.53, 98.27],
    ['12/01/08', 91.3, 96.23, 86.5, 94],
    ['11/24/08', 85.21, 95.25, 84.84, 92.67],
    ['11/17/08', 88.48, 91.58, 79.14, 82.58],    
    ['11/10/08', 100.17, 100.4, 86.02, 90.24],
    ['11/03/08', 105.93, 111.79, 95.72, 98.24],
    ['10/27/08', 95.07, 112.19, 91.86, 107.59],
    ['10/20/08', 99.78, 101.25, 90.11, 96.38],
    ['10/13/08', 104.55, 116.4, 85.89, 97.4],
    ['10/06/08', 91.96, 101.5, 85, 96.8],
    ['09/29/08', 119.62, 119.68, 94.65, 97.07],
    ['09/22/08', 139.94, 140.25, 123, 128.24],
    ['09/15/08', 142.03, 147.69, 120.68, 140.91],
    ['09/08/08', 164.57, 164.89, 146, 148.94]
    ];
     
    var hlc = [['07/06/09', 139.68, 135.18, 135.4],
    ['06/29/09', 144.66, 139.79, 140.02],
    ['06/22/09', 143.56, 132.88, 142.44],
    ['06/15/09', 139.5, 134.53, 139.48],
    ['06/08/09', 144.56, 136.04, 136.97],
    ['06/01/09', 146.4, 136, 144.67],
    ['05/26/09', 135.9, 124.55, 135.81],
    ['05/18/09', 129.31, 121.57, 122.5],
    ['05/11/09', 130.96, 119.38, 122.42],
    ['05/04/09', 133.5, 126.26, 129.19],
    ['04/27/09', 127.95, 122.66, 127.24],
    ['04/20/09', 127.2, 118.6, 123.9],
    ['04/13/09', 124.25, 115.76, 123.42],
    ['04/06/09', 120, 113.28, 119.57],
    ['03/30/09', 116.13, 102.61, 115.99],
    ['03/23/09',  109.98, 101.75, 106.85],
    ['03/16/09', 103.48, 94.18, 101.59],
    ['03/09/09', 97.2, 82.57, 95.93],
    ['03/02/09', 92.77, 82.33, 85.3],
    ['02/23/09', 92.92, 86.51, 89.31],
    ['02/17/09', 97.04, 89, 91.2],
    ['02/09/09', 103, 95.77, 99.16],
    ['02/02/09', 100, 88.9, 99.72],
    ['01/26/09', 95, 88.3, 90.13],
    ['01/20/09', 90, 78.2, 88.36],
    ['01/12/09', 90.99, 80.05, 82.33],
    ['01/05/09', 97.17, 90.04, 90.58],
    ['12/29/08', 91.04, 84.72, 90.75],
    ['12/22/08', 90.03, 84.55, 85.81],
    ['12/15/08', 96.48, 88.02, 90],
    ['12/08/08', 103.6, 92.53, 98.27],
    ['12/01/08', 96.23, 86.5, 94],
    ['11/24/08', 95.25, 84.84, 92.67],
    ['11/17/08', 91.58, 79.14, 82.58],  
    ['11/10/08', 100.4, 86.02, 90.24],
    ['11/03/08', 111.79, 95.72, 98.24],
    ['10/27/08', 112.19, 91.86, 107.59],
    ['10/20/08', 101.25, 90.11, 96.38],
    ['10/13/08', 116.4, 85.89, 97.4],
    ['10/06/08', 101.5, 85, 96.8],
    ['09/29/08', 119.68, 94.65, 97.07],
    ['09/22/08', 140.25, 123, 128.24],
    ['09/15/08', 147.69, 120.68, 140.91],
    ['09/08/08', 164.89, 146, 148.94]
    ];
       

    var ticks = ['08/01/08', '12/01/08', '04/01/09', '08/01/09'];
    
    plot1 = $.jqplot('chart1',[ohlc],{
      title: 'Chart',
      axesDefaults:{},
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{formatString:'%y.%m.%d'}, 
              min: "08-01-1908",
              tickInterval: "60 days",
              ticks: ticks
          },
          yaxis: {
              tickOptions:{formatString:'%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
      cursor:{
          zoom:true,
          tooltipOffset: 10,
          tooltipLocation: 'nw'
      },
      highlighter: {
          showMarker:false,
          tooltipAxes: 'xy',
          yvalues: 4,
          formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'
      }
    });
        
    plot2 = $.jqplot('chart2',[ohlc],{
      title: 'Chart',
      axesDefaults:{},
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickOptions:{formatString:'%y.%m'}
          },
          yaxis: {
              tickOptions:{formatString:'%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true, fillUpBody:true, upBodyColor:'#aa3333', downBodyColor:'#3333aa'}}],
      cursor:{
          zoom:true,
          tooltipOffset: 10,
          tooltipLocation: 'nw'
      },
      highlighter: {
          showMarker:false,
          tooltipAxes: 'xy',
          yvalues: 4,
          formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'
      }
    });
    
});


</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" style="margin:20px;height:240px; width:640px;"></div>
<div id="chart2" style="margin:20px;height:240px; width:640px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/area.html.























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Theming Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.donutRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.funnelRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <!-- END: load jqplot -->

<style type="text/css">
.jqplot-target {
    margin: 30px;
}
</style>

<script language="javascript" type="text/javascript">
$(document).ready(function(){

    l2 = [11, 9, 5, 12, 14];
    l3 = [4, 8, 5, 3, 6];
    l4 = [12, 6, 13, 11, 2];
    l5 = [4, -3, 3, 6, 2, -2];    

    
    plot1b = $.jqplot('chart1b',[l2, l3, l4],{
       stackSeries: true,
       showMarker: false,
       seriesDefaults: {
           fill: true
       },
       axes: {
           xaxis: {
               renderer: $.jqplot.CategoryAxisRenderer,
               ticks: ["Mon", "Tue", "Wed", "Thr", "Fri"]
           }
       }
    });
    
    plot1c = $.jqplot('chart1c',[l5],{
       stackSeries: true,
       showMarker: false,
       seriesDefaults: {
           fill: true,
           fillToZero: true,
           rendererOptions: {
               highlightMouseDown: true
           }
       }
    });

    $('#chart1c').bind('jqplotDataClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info1c').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart1b').bind('jqplotDataHighlight', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info1b').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart1b').bind('jqplotDataUnhighlight', 
        function (ev) {
            $('#info1b').html('Nothing');
        }
    );
});


</script>
  </head>
  <body>
<?php include "nav.inc"; ?>

<p>Area charts support highlighting and mouse events by default.  The options and handlers and callbacks are essentially the same as with bar, pie, donut and funnel charts.  One notable exception for area charts is that no data point index will be provided to the callback and the entire data set for the highlighted area will be returned.  This is because the area is not associated with one particular data point, but with the entire data set of the series.</p>

<div><span>Moused Over: </span><span id="info1b">Nothing</span></div>

<div id="chart1b" class="plot" style="width:400px;height:260px;"></div>

<p>For the chart below, mouseover has been disabled and click handling is enabled by setting "highlightMouseDown: true".  For "fillToZero" area charts that have both negative and positive values as shown below, clicking in either the positive of negative regions will generate the same result.</p> 

<div><span>You Clicked: </span><span id="info1c">Nothing yet</span></div>

<div id="chart1c" class="plot" style="width:400px;height:260px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/axisLabel.html.

















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.js"></script>
	
	<style type="text/css">
    .jqplot-y2axis { margin-left: 4px; }
    .jqplot { margin: 70px;}
    table.jqplot-table-legend { border: 0px;}

	</style>
	

    <script type="text/javascript" language="javascript"><!--
        $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
            l1 = [[2011,1200], [2039,1200]];
            l2 = [[2011,0], [2039,800]];
            l3 = [[2011,0], [2039,400]];

            plot1 = $.jqplot('chart1', [l1,l2,l3], {
                grid: { 
                    background:'#ffffff',
                    // turn off the border.  Note, should set
                    // borderColor as well due to way axes shares color
                    // defaults with the grid.
                    borderWidth:0,
                    borderColor:'#ffffff',
                    shadow:true,
                    // give a wide shadow
                    shadowWidth: 10,
                    shadowOffset: 3,
                    shadowDepth: 8,
                    // use new shadowColor option to give a custom lighter color 
                    // because the high shadowDepth will make it look too dark.
                    shadowColor: 'rgba(230, 230, 230, 0.07)'
                },
                legend: {
                    renderer: $.jqplot.EnhancedLegendRenderer,
                    show:true,
                    location: 's',
                    placement:'outside',
                    yoffset: 30,
                    rendererOptions:{
                        numberRows: 2
                    }
                },
                stackSeries:true,
                // use the new fillToValue option to make filled series "hover" above the x axis.
                seriesDefaults:{fill:true, fillToZero:true, fillToValue: 100, yaxis:'y2axis'},
                series:[{label:'oil'}, {label:'renewables'}, {label:'wind and water'}],
                axesDefaults: {
                    showTickMarks:false, 
                    tickOptions: {
                        formatString: '%d'
                    }
                },
                axes:{ 
                    xaxis: {
                        borderWidth:2,
                        borderColor:'#999999',
                        ticks:[2010, 2040],
                        tickOptions:{
                            showGridline: false
                        }
                    },
                    y2axis:{
                        borderWidth:0,
                        borderColor:'#ffffff',
                        autoscale: true,
                        min:0,
                        max: 3000,
                        numberTicks:4,
                        labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                        label:'energy use'
                    },
                    x2axis: {
                        borderWidth:0,
                        borderColor:'#ffffff'
                    },
                    yaxis: {
                        borderWidth:2,
                        borderColor: '#999999'
                    }
                }
            });
            
            // Going to post process the css position of the y2axis label so it appears on the left side of the grid.
            // Can't specify this in a css rule because jqPlot figures out the correct position of the label and then
            // sets the style attributes on the label itself.  This will override those element style attributes.
            // Note, this fails in IE for some reason, probably due to VML emulated canvas elements.
            var r = plot1._width - plot1._gridPadding.left - 5;
            r = r+'px';
            $('.jqplot-y2axis-label').css({top:'10px', right:r});
        });
    -->
    </script>

</head>
<body>
<?php include "nav.inc"; ?>
		<div class="jqplot" id="chart1" style="height:300px;width:400px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/axisLabelsRotatedText.html.







































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
	
	<style type="text/css">
	  .jqplot-point-label {white-space: nowrap;}
/*    .jqplot-yaxis-label {font-size: 14pt;}*/
/*    .jqplot-yaxis-tick {font-size: 7pt;}*/
    .jqplot { margin: 70px;}
	</style>
	
	
		<script type="text/javascript" language="javascript"><!--
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
	line1 = [6.5, 9.2, 14, 19.65, 26.4, 35, 51];
	line2 = [['1/1/2008', 42], ['2/14/2008', 56], ['3/7/2008', 39], ['4/22/2008', 81]];

	plot1 = $.jqplot('chart1', [line1], {
	    legend: {show:false},
	    axes:{
	      xaxis:{
	        autoscale: true,
          tickOptions:{
            // formatString:'%.4f', 
            angle: -30
          },
          // tickRenderer:$.jqplot.CanvasAxisTickRenderer,
	        label:'Core Motor Amperage', 
          labelOptions:{
            // fontFamily:'Helvetica',
            fontSize: '13pt'
          },
          labelRenderer: $.jqplot.CanvasAxisLabelRenderer
	      }, 
	      yaxis:{
          autoscale: true,
          renderer:$.jqplot.LogAxisRenderer,
          tickOptions:{
            formatString:'%.2f', 
            labelPosition: 'middle', 
            angle:-30
          },
          tickRenderer:$.jqplot.CanvasAxisTickRenderer,
          labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
          labelOptions:{
            // fontFamily:'Helvetica',
            fontSize: '13pt'
          },
	        label:'Core Motor Voltage'
	      }
	    }
	});
	
	plot2 = $.jqplot('chart2', [line2], {
	  axes: {
	    xaxis: {
	      autoscale: true,
	      renderer: $.jqplot.DateAxisRenderer,
	      label: 'Incliment Occurrance',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
	      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
	      tickOptions: {
          // labelPosition: 'middle',
          angle: 15
	      }
	      
	    },
	    yaxis: {
	      label: 'Incliment Factor',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer
	    }
	  }
	});

line3 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp Marketing Gimmick', 9], ['HDTV Receiver', 15], ['8 Track Control Module', 12], ['SSPFM (Sealed Sludge Pump Fourier Modulator)', 3], ['Transcender/Spice Rack', 6], ['Hair Spray Rear View Mirror Danger Indicator', 18]];

	plot3 = $.jqplot('chart3', [line3], {
	  series:[{renderer:$.jqplot.BarRenderer}],
	  axes: {
	    xaxis: {
	      renderer: $.jqplot.CategoryAxisRenderer,
	      label: 'Warranty Concern',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
	      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
	      tickOptions: {
          angle: -30
	      }
	      
	    },
	    yaxis: {
	      autoscale:true,
	      label: 'Occurance',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer
	    }
	  }
	});
	
	
});
			-->
		</script>
		
</head>
<body>
<?php include "nav.inc"; ?>
		<div class="jqplot" id="chart1"></div>
		<div class="jqplot" id="chart2"></div>
		<div class="jqplot" id="chart3"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/axisLabelsRotatedText2.html.























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
	
	<style type="text/css">
	  .jqplot-point-label {white-space: nowrap;}
/*    .jqplot-yaxis-label {font-size: 14pt;}*/
/*    .jqplot-yaxis-tick {font-size: 7pt;}*/
    .jqplot { margin: 30px 30px 60px 50px;}
/*    .jqplot-xaxis { margin-top: 10px;}
    .jqplot-xaxis-tick {padding-top: 0px;}
    .jqplot-yaxis {margin-right: 10px;}
    .jqplot-yaxis-tick {padding-right: 0px;}*/
	</style>
	
	
		<script type="text/javascript" language="javascript"><!--
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

line = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15], ['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3], ['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];
line2 = [['Nickle', 28], ['Aluminum', 13], ['Xenon', 54], ['Silver', 47], ['Sulfer', 16], ['Silicon', 14], ['Vanadium', 23]];

  plot1 = $.jqplot('chart1', [line], {
    title: 'Concern vs. Occurrance',
    series:[{renderer:$.jqplot.BarRenderer}],
    axes: {
      xaxis: {
        renderer: $.jqplot.CategoryAxisRenderer,
          label: 'Warranty Concern',
        // labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
        tickRenderer: $.jqplot.CanvasAxisTickRenderer,
        tickOptions: {
          enableFontSupport: true,
            angle: -30
        }
        
      },
      yaxis: {
        autoscale:true,
          label: 'Occurance',
        // labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
        tickRenderer: $.jqplot.CanvasAxisTickRenderer,
        tickOptions: {
          enableFontSupport: true,
            angle: -30
        }
      }
    }
  });

	plot2 = $.jqplot('chart2', [line, line2], {
    // title: 'Concern vs. Occurrance',
	  series:[{renderer:$.jqplot.BarRenderer}, {xaxis:'x2axis', yaxis:'y2axis'}],
	  axes: {
	    xaxis: {
	      renderer: $.jqplot.CategoryAxisRenderer,
        label: 'Warranty Concern',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
	      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
	      tickOptions: {
          angle: 30
	      }
	    },
	    x2axis: {
	      renderer: $.jqplot.CategoryAxisRenderer,
        label: 'Metal',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
	      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
	      tickOptions: {
          angle: 30
	      }
	    },
	    yaxis: {
	      autoscale:true,
        label: 'Occurance',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
	      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
	      tickOptions: {
          angle: 30
	      }
	    },
	    y2axis: {
	      autoscale:true,
        label: 'Number',
	      labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
	      tickRenderer: $.jqplot.CanvasAxisTickRenderer,
	      tickOptions: {
          angle: 30
	      }
	    }
	  }
	});

  plot3 = $.jqplot('chart3', [line], {
    title: 'Concern vs. Occurrance',
    series:[{renderer:$.jqplot.BarRenderer}],
    axes: {
      xaxis: {
        renderer: $.jqplot.CategoryAxisRenderer,
          label: 'Warranty Concern',
        labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
        tickRenderer: $.jqplot.CanvasAxisTickRenderer,
        tickOptions: {
          labelPosition:'middle',
            angle: -30
        }
        
      },
      yaxis: {
        autoscale:true,
          label: 'Occurance',
        labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
        tickRenderer: $.jqplot.CanvasAxisTickRenderer,
        tickOptions: {
          labelPosition:'middle',
            angle: -30
        }
      }
    }
  });
	
	
});
			-->
		</script>
		
</head>
<body>
<?php include "nav.inc"; ?>
		<div class="jqplot" id="chart1" class="graph"></div>
		<div class="jqplot" id="chart2" class="graph"></div>
		<div class="jqplot" id="chart3" class="graph"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/barLinePieStack.html.













































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Multiple Chart types on same page</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 1.1em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    l1 = [2, 3, 1, 4, 3];
    l2 = [1, 4, 3, 2, 5];
    
    
    plot1 = $.jqplot('chart1', [l1, l2], {
      title:'Stacked Filled Line Plot with Transparency (transparency not supported in IE6)',
        stackSeries: true,
        grid:{background:'#fefbf3', borderWidth:2.5},
        seriesDefaults: {fill: true, showMarker: false, shadow: false},
        axes:{xaxis:{pad:1.0, numberTicks:5, autoscale:false}, yaxis:{min:0, max:12, numberTicks:5}},
        series:[{color:'rgba(68, 124, 147, 0.7)'}, {color:'rgba(150, 35, 90, 0.7)'}]
    });
    
    
    
    line1=[['2008-09-30', 4], ['2008-10-30', 6.5], ['2008-11-30', 5.7], ['2008-12-30', 9], ['2009-01-30', 8.2]];
     
    plot2 = $.jqplot('chart2', [line1], {
        title:'Rotated Axis Text',
        axes:{
            xaxis:{
                renderer:$.jqplot.DateAxisRenderer, 
                min:'August 30, 2008', 
                tickInterval:'1 month',
                rendererOptions:{
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer},
                    tickOptions:{formatString:'%b %#d, %Y', fontSize:'10pt', fontFamily:'Tahoma', angle:-40, fontWeight:'normal', fontStretch:1}
            }
        },
        series:[{lineWidth:4, markerOptions:{style:'square'}}]
    });
    
     line1 = [[4, 1], [4, 2], [3, 3], [16, 4]];
     line2 = [[3, 1], [7, 2], [4, 3], [3.125, 4]];
     plot3 = $.jqplot('chart3', [line1, line2], {
         stackSeries: true,
         legend: {
             show: true,
             location: 'se'
         },
         title: 'Unit Sales: Acme Decoy Division',
         seriesDefaults: {
             renderer: $.jqplot.BarRenderer,
             rendererOptions: {
                 barDirection: 'horizontal',
                 barPadding: 6,
                 barMargin: 40
             }
         },
         series: [{
             label: '1st Qtr'
         },
         {
             label: '2nd Qtr'
         }],
         axes: {
             yaxis: {
                 renderer: $.jqplot.CategoryAxisRenderer,
                 ticks: ['Q1', 'Q2', 'Q3', 'Q4']
             },
             xaxis: {min: 0, max: 20, numberTicks:5}
         }
     });
     
     line1 = [4, 2, 9, 16];
     line2 = [3, 7, 6.25, 3.125];
     plot3b = $.jqplot('chart3b', [line1, line2], {
         stackSeries: true,
         legend: {
             show: true,
             location: 'nw'
         },
         title: 'Unit Sales: Acme Decoy Division',
         seriesDefaults: {
             renderer: $.jqplot.BarRenderer,
             rendererOptions: {
                 barPadding: 6,
                 barMargin: 40
             }
         },
         series: [{
             label: '1st Qtr'
         },
         {
             label: '2nd Qtr'
         }],
         axes: {
             xaxis: {
                 renderer: $.jqplot.CategoryAxisRenderer,
                 ticks: ['Q1', 'Q2', 'Q3', 'Q4']
             },
             yaxis: {min: 0, max: 20, numberTicks:5}
         }
     });  
     
     line1 = [4, 2, 9, 16];
     line2 = [3, 7, 6.25, 3.125];
     plot3c = $.jqplot('chart3c', [line1, line2], {
         legend: {
             show: true,
             location: 'nw'
         },
         title: 'Unit Sales: Acme Decoy Division',
         seriesDefaults: {
             renderer: $.jqplot.BarRenderer,
             rendererOptions: {
                 barPadding: 6,
                 barMargin: 20
             }
         },
         series: [{
             label: '1st Qtr'
         },
         {
             label: '2nd Qtr'
         }],
         axes: {
             xaxis: {
                 renderer: $.jqplot.CategoryAxisRenderer,
                 ticks: ['Q1', 'Q2', 'Q3', 'Q4']
             },
             yaxis: {min: 0, max: 20, numberTicks:5}
         }
     });   
   
   line1 = [['frogs', 3], ['buzzards', 7], ['deer', 2.5], ['turkeys', 6], ['moles', 5], ['ground hogs', 4]];
   line2 = [3, 7, 2.5, 6, 5, 4];
   
   plot4 = $.jqplot('chart4', [line1], {
     title: 'Pie Chart with Legend and sliceMargin',
     seriesDefaults:{renderer:$.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}}, 
     legend:{show:true}
   });
   
     l1 = [2.2, 3, .6, 4.8, 3];
     l2 = [1, 4, 3, 2, 5.7];
  
  
    plot5 = $.jqplot('chart5', [l1, l2]);

  
    plot6 = $.jqplot('chart6', [[3,7,3,2,9,11,8]], {
      axes:{xaxis:{numberTicks:5}}
    });

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart3" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart3b" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart3c" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart4" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart5" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
    <div id="chart6" style="margin-top:20px; margin-left:50px; width:360px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/barMissingValues.html.

































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

line1 = [[2006, 4],            [2008, 9], [2009, 16]];
line2 = [[2006, 3], [2007, 7], [2008, 6]];
line3 = [[2006, 5], [2007, 1], [2008, 3], [2009, 7]];
line4 = [[2006, 2], [2007, 5], [2008, 4], [2009, 9]];

plot1 = $.jqplot('chart1', [line1, line2, line3, line4], {
    seriesDefaults:{renderer:$.jqplot.BarRenderer, rendererOptions:{barPadding:10, barMargin:10}},
    legend: {show:true, location: 'nw'},
    axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}, yaxis:{min:0, max:20, numberTicks:6}}
    });


s1 = [4, 3, 9, 16, 12, 8];
s2 = [null, null, null, 3, 7, 6];

ticks = [2006, 2007, 2008, 2009, 2010, 2011];

plot2 = $.jqplot('chart2', [s1, s2], {
    seriesDefaults:{},
    legend: {show:true, location: 'nw'},
    axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, ticks:ticks}, yaxis:{min:0, max:20, numberTicks:6}}
    });

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/barTest.html.























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Bar Charts</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.js"></script>
  <!-- END: load jquery -->
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
  <!-- END: load jqplot -->

  <style type="text/css">
    .jqplot-target {
        margin-bottom: 2em;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 4em;
        
    }
    
    p {
        margin: 2em 0;
    }
    
    .note {
        font-size: 0.8em;
    }
  </style>
  
  <script class="code" type="text/javascript">$(document).ready(function(){
        var s1 = [2, 6, 7, 10];
        var ticks = ['a', 'b', 'c', 'd'];
        
        plot1 = $.jqplot('chart1', [s1], {
            seriesDefaults:{
                renderer:$.jqplot.BarRenderer,
                pointLabels: { show: true }
            },
            axes: {
                xaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer,
                    ticks: ticks
                }
            },
            highlighter: { show: false }
        });
    
        $('#chart1').bind('jqplotDataClick', 
            function (ev, seriesIndex, pointIndex, data) {
                $('#info1').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
            }
        );
    });</script>
    
  <script class="code" type="text/javascript">$(document).ready(function(){
        var s1 = [2, 6, 7, 10];
        var s2 = [7, 5, 3, 2];
        var ticks = ['a', 'b', 'c', 'd'];
        
        plot2 = $.jqplot('chart2', [s1, s2], {
            seriesDefaults: {
                renderer:$.jqplot.BarRenderer,
                pointLabels: { show: true }
            },
            axes: {
                xaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer,
                    ticks: ticks
                }
            }
        });
    
        $('#chart2').bind('jqplotDataHighlight', 
            function (ev, seriesIndex, pointIndex, data) {
                $('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
            }
        );
            
        $('#chart2').bind('jqplotDataUnhighlight', 
            function (ev) {
                $('#info2').html('Nothing');
            }
        );
    });</script>
    
  <script class="code" type="text/javascript">$(document).ready(function(){
        plot2b = $.jqplot('chart2b', [[[2,1], [4,2], [6,3], [3,4]], [[5,1], [1,2], [3,3], [4,4]], [[4,1], [7,2], [1,3], [2,4]]], {
            seriesDefaults: {
                renderer:$.jqplot.BarRenderer,
                pointLabels: { show: true, location: 'e', edgeTolerance: -15 },
                shadowAngle: 135,
                rendererOptions: {
                    barDirection: 'horizontal'
                }
            },
            axes: {
                yaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer
                }
            }
        });
    
        $('#chart2b').bind('jqplotDataHighlight', 
            function (ev, seriesIndex, pointIndex, data) {
                $('#info2b').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data+ ', pageX: '+ev.pageX+', pageY: '+ev.pageY);
            }
        );    
        $('#chart2b').bind('jqplotDataClick', 
            function (ev, seriesIndex, pointIndex, data) {
                $('#info2c').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data+ ', pageX: '+ev.pageX+', pageY: '+ev.pageY);
            }
        );
            
        $('#chart2b').bind('jqplotDataUnhighlight', 
            function (ev) {
                $('#info2b').html('Nothing');
            }
        );
    });</script>
    
  <script class="code" type="text/javascript">$(document).ready(function(){
        var s1 = [2, 6, 7, 10];
        var s2 = [7, 5, 3, 2];
        var s3 = [14, 9, 3, 8];
        plot3 = $.jqplot('chart3', [s1, s2, s3], {
            stackSeries: true,
            captureRightClick: true,
            seriesDefaults:{
                renderer:$.jqplot.BarRenderer,
                rendererOptions: {
                    highlightMouseDown: true    
                },
                pointLabels: {show: true}
            },
            legend: {
                show: true,
                location: 'e',
                placement: 'outside'
            }      
        });
    
        $('#chart3').bind('jqplotDataRightClick', 
            function (ev, seriesIndex, pointIndex, data) {
                $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
            }
        ); 
    });</script>
    
  <script class="code" type="text/javascript">$(document).ready(function(){
        plot4 = $.jqplot('chart4', [[[2,1], [6,2], [7,3], [10,4]], [[7,1], [5,2],[3,3],[2,4]], [[14,1], [9,2], [9,3], [8,4]]], {
            stackSeries: true,
            captureRightClick: true,
            seriesDefaults:{
                renderer:$.jqplot.BarRenderer,
                shadowAngle: 135,
                rendererOptions: {
                    barDirection: 'horizontal',
                    highlightMouseDown: true    
                },
                pointLabels: {show: true, formatString: '%d'}
            },
            legend: {
                show: true,
                location: 'e',
                placement: 'outside'
            },
            axes: {
                yaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer
                }
            }
        });
    });</script>
    
  <script class="code" type="text/javascript">$(document).ready(function(){
        plot5 = $.jqplot('chart5', [[[2,1], [null,2], [7,3], [10,4]]], {
            captureRightClick: true,
            seriesDefaults:{
                renderer:$.jqplot.BarRenderer,
                shadowAngle: 135,
                rendererOptions: {
                    barDirection: 'horizontal',
                    highlightMouseDown: true    
                },
                pointLabels: {show: true, formatString: '%d'}
            },
            legend: {
                show: true,
                location: 'e',
                placement: 'outside'
            },
            axes: {
                yaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer
                }
            }
        });
    });</script>

  <script class="code" type="text/javascript">$(document).ready(function(){
        plot6 = $.jqplot('chart6', [[1,2,3,4]], {seriesDefaults:{renderer:$.jqplot.PieRenderer}});
    });</script> 
  
    <script type="text/javascript">    
        $(document).ready(function(){
            $('script.code').each(function(index) {
                $('pre.code').eq(index).text($(this).html());
            });
            $('script.common').each(function(index) {
                $('pre.common').eq(index).html($(this).html());
            });
            $(document).unload(function() {$('*').unbind(); });
        });
    </script> 
    
  </head>
  <body>
<?php include "nav.inc"; ?>
    <p>To create bar plots, you have to include the "jqplot.barRenderer.js" file in your source.</p>

    <p>Below is a default bar plot.  Bars will highlight on mouseover.  Events are triggered when you mouseover a bar and also when you click on a bar.  Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values. When series data is assigned as a 1-dimensional array as in this example, jqPlot automatically converts it into a 2-dimensional array for plotting.  So a series defined as [2, 6, 7, 10] will become [[1,2], [2,6], [3,7], [4,10]].<p>
    
    <div><span>You Clicked: </span><span id="info1">Nothing yet</span></div>
        
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
<pre class="code"></pre>

    <p>The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a bar even if highlighting is turned off.  This event will fire continuously as the user mouses over the bar.  'jqplotDataHighlight' fires only once when the user first passes over the bar.  Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a bar (if highlighting is enabled).<p>

    <div><span>Moused Over: </span><span id="info2">Nothing</span></div>
    
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
<pre class="code"></pre>
    
    <div><span>Moused Over: </span><span id="info2b">Nothing</span></div>
    <div><span>Clicked: </span><span id="info2c">Nothing</span></div>
    
    <div id="chart2b" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
<pre class="code"></pre>
    
    <p>The next example has the plot's 'captureRightClick' option set to true.  This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a bar.  Here, the 'highlightMouseDown' option is also set to true.  This will highlight a slice on mouse down instead of on move over.  Highlighting will occur for either left or right click.</p>

    <div><span>You Right Clicked: </span><span id="info3">Nothing yet</span></div>
    
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
<pre class="code"></pre>
    
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
<pre class="code"></pre>
    
    <div id="chart5" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
<pre class="code"></pre>
        
<p>A pie chart is added to test for incompatibilities.</p>
        <div id="chart6" style="margin-top:20px; margin-left:20px; width:300px; height:200px;"></div>
<pre class="code"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/barTest2.html.





















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <!-- Use Compatibility mode in IE -->
  <title>Bar Charts</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->

  <style type="text/css">
    .jqplot-target {
        margin-bottom: 2em;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 4em;
        
    }
    
    p {
        margin: 2em 0;
    }
    
    .note {
        font-size: 0.8em;
    }
  </style>
  
  <script class="code" type="text/javascript">
    $(document).ready(function(){
        var s1 = [2, 6, 7, 10];
        var ticks = ['a', 'b', 'c', 'd'];
        
        plot1 = $.jqplot('chart1', [s1], {
            seriesDefaults:{
                renderer:$.jqplot.BarRenderer
            },
            axes: {
                xaxis: {
                    renderer: $.jqplot.CategoryAxisRenderer,
                    ticks: ticks
                }
            }
        });
    });
  </script>
    
  </head>
  <body>
<?php include "nav.inc"; ?>
        
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>

  </body>
</html>

Added Site/Site_W/jpqplot/examples/bezierCurve.html.

































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!DOCTYPE html>

<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.bezierCurveRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>

<style type="text/css">
p { margin-top:30px;}
</style>		

<script type="text/javascript" language="javascript">

$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
    
    var line1 = [[0, 1], [2, 2, 4, .5, 6, 0]];
    var line2 = [[0, 5], [2, 6, 5, 1, 6, .5]];
    var line3 = [[0, 6], [3, 9, 4, 8, 6, 3]];
    var line4 = [[0, 7], [2, 9, 4, 8, 6, 6]];
    var line5 = [[0, 8], [3, 9, 4, 8, 6, 8]];

    plot1 = $.jqplot("chart1", [line1,line2, line3, line4, line5], {
           seriesDefaults: {renderer:$.jqplot.BezierCurveRenderer},
           legend:{show:true}
    });
    
    var s1 = [[0, 1], [2, 2], [4, .5], [6, 0]];
    var s2 = [[0, 5], [2, 6], [5, 1], [6, .5]];
    var s3 = [[0, 6], [3, 9], [4, 8], [6, 3]];
    var s4 = [[0, 7], [2, 9], [4, 8], [6, 6]];
    var s5 = [[0, 8], [3, 9], [4, 8], [6, 8]];

    plot2 = $.jqplot("chart2", [s1,s2, s3, s4, s5], {
           seriesDefaults: {renderer:$.jqplot.BezierCurveRenderer},
           legend:{show:true}
    });
    
    var s1 = [['01/01/2010', 1], ['02/01/2010', 2], ['03/01/2010', .5], ['04/01/2010', 0]];
    var s2 = [['01/01/2010', 5], ['02/01/2010', 6], ['03/01/2010', 1], ['04/01/2010', .5]];
    var s3 = [['01/01/2010', 6], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 3]];
    var s4 = [['01/01/2010', 7], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 6]];
    var s5 = [['01/01/2010', 8], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 8]];

    plot3 = $.jqplot("chart3", [s1,s2, s3, s4, s5], {
           seriesDefaults: {renderer:$.jqplot.BezierCurveRenderer},
           axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer, numberTicks:4}},
           legend:{show:true}
    });
});

             
</script>
</head>
<body>
<?php include "nav.inc"; ?>
<p>The Bezier curve renderer can distinguish between two different input data formats.  This first example has the data passed in as 2 data points, the second one defining the Bezier curve to the end point.  With this format, non-default axes renderers will require specifying the minimum and maximum on the axes.</p>
<pre>
    [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]];
</pre>
<div id="chart1" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
<p>This second example has the data broken out into 4 points, which will be assembled to define the Bezier Curve.  With this format, any axes renderer can be used without explicitly specifying the minimum and maximum.</p>
<pre>
    [[xstart, ystart], [cp1x, cp1y], [cp2x, cp2y], [xend, yend]];
</pre>
<div id="chart2" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
<p> Here is an example using a date axis renderer with Bezier curves.  The data looks like:</p>
<pre>
    [['01/01/2010', 6], ['02/01/2010', 9], ['03/01/2010', 8], ['04/01/2010', 3]]
</pre>

<div id="chart3" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
 
<p>Note that jqPlot converts the datetime strings into timestamps internally, so further explicit modification of the x value (date value) of series data points will have to be with integer time stamp data.  So, you would do something like:</p>

<pre>
    plot3.series[2].data
    [[1262322000000, 6], [1265000400000, 9], [1267419600000, 8], [1270094400000, 3]]
    plot3.series[2].data[1][0] = 1265900400000
    plot3.drawSeries(2)
</pre>
</body>


</html>

Added Site/Site_W/jpqplot/examples/blockPlot.html.











































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.blockRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
  <!-- END: load jqplot -->


<script language="javascript" type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

   s1 = [[0.9, 120, 'Vernors'], [1.8, 140, 'Fanta'], [3.2, 90, 'Barqs', {background:'#ddbb33'}], [4.1, 140, 'Arizon Iced Tea'], [4.5, 91, 'Red Bull'], [6.8, 17, 'Go Girl']];
   s2 = [[1.3, 44, 'Pepsi'], [2.1, 170, 'Sierra Mist'], [2.6, 66, 'Moutain Dew'], [4, 52, 'Sobe'], [5.4, 16, 'Amp'], [6, 48, 'Aquafina']];
   s3 = [[1, 59, 'Coca-Cola', {background:'rgb(250, 160, 160)'}], [2, 50, 'Ambasa'], [3, 90, 'Mello Yello'], [4, 90, 'Sprite'], [5, 71, 'Squirt'], [5, 155, 'Youki']];

    plot1 = $.jqplot('chart1',[s1, s2, s3],{
        seriesDefaults:{
            renderer:$.jqplot.BlockRenderer
        }, 
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true
		},
        series: [
           {},
           {rendererOptions: {
               css:{background:'#A1EED6'}
           }},
           {rendererOptions: {
               css:{background:'#D3E4A0'}
           }}
        ],
        axes: {
            xaxis: {
                min:0,
                max: 8
            },
            yaxis: {
                min:0,
                max: 200
            }
        }
    });

   s1 = [[0.9, 120, 'Vernors'], [1.8, 140, 'Fanta'], [3.2, 90, 'Barqs'], [4.1, 140, 'Arizon Iced Tea'], [4.5, 91, 'Red Bull'], [6.8, 17, 'Go Girl']];
   s2 = [[1.3, 44, 'Pepsi'], [2.1, 170, 'Sierra Mist'], [2.6, 66, 'Moutain Dew'], [4, 52, 'Sobe'], [5.4, 16, 'Amp'], [6, 48, 'Aquafina']];
   s3 = [[1, 59, 'Coca-Cola'], [2, 50, 'Sprite'], [3, 90, 'Mello Yello'], [4, 90, 'Ambasa'], [5, 71, 'Squirt'], [5, 155, 'Youki']];

    plot2 = $.jqplot('chart2',[s1, s2, s3],{
        seriesDefaults:{
            renderer:$.jqplot.BlockRenderer,
            rendererOptions: {
                varyBlockColors: true
            },
            pointLabels:{
                show: false
            }
        }, 
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true,
           showSwatches: false
		},
        series: [{label: 'Independent Brands'}, {label: 'Pepsi Brands'}, {label: 'Coke Brands'}],
        axes: {
            xaxis: {
                min:0,
                max: 8
            },
            yaxis: {
                min:0,
                max: 200
            }
        }
    });
   
 });
 
 function move(dir, val) {
     val = parseFloat(val);
     var sidx = parseInt($('#seriesId').val());
     var pidx = parseInt($('#pointId').val());
     var duration = $('#duration').val();
     var x = plot1.series[sidx].data[pidx][0];
     var y = plot1.series[sidx].data[pidx][1];
     (dir == 'x') ? x += val : y += val; 
     plot1.series[sidx].moveBlock(pidx, x, y, duration);
 }
 
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>Below is an example block plot.  This plot also uses the Enhanced Legend Renderer plugin.  Clicking on an item in the legend will toggle display of the appropriate series.</p>
    <div id="chart1" class="plot" style="width:500px;height:300px;margin-bottom:30px;"></div>
<p>Blocks can be moved by selecting the series, the point, and an optional duration parameter.  If specified, duration will animate the movement.  Duration is either a number in milliseconds, or the keywords 'fast' or 'slow'.  Higher numbers will cause a slower animation.</p>
    Series: <select id="seriesId">
        <option value="0" selected>First</option>
        <option value="1">Second</option>
        <option value="2">Third</option>
    </select>
    Point: <select id="pointId">
        <option value="0" selected>first</option>
        <option value="1">second</option>
        <option value="2">third</option>
        <option value="3">fourth</option>
        <option value="4">fifth</option>
        <option value="5">six</option>
    </select>
    Duration: <select id="duration">
        <option value="" selected>None</option>
        <option value="150">100</option>
        <option value="fast">fast</option>
        <option value="300">300</option>
        <option value="300">400</option>
        <option value="300">500</option>
        <option value="slow">slow</option>
        <option value="900">700</option>
        <option value="900">800</option>
        <option value="900">900</option>
    </select>
    X: <button id="mxval" type="button" value="-0.5" onclick="move('x', -1);">-1</button> <button id="pxval" type="button" value="-0.5" onclick="move('x', 0.5);">0.5</button>
    Y: <button id="myval" type="button" name="myval" value="-10" onclick="move('y', -30);">-30</button> <button id="pyval" type="button" name="pyval" value="10" onclick="move('y', 15);">15</button>
    
    
    <p>This second chart is like the first except the "varyBlockColors" renderer option is set to true.  This will vary the color of each block in a series separately.  This allows displaying a third dimension to the data such as grouping beverage products by producer and by category such as "cola", "tea", "energy drink", etc.</p>
    
    <p>Also, the legend has it's "showSwathces" option set to false, since the blocks of each series will be of varying color and won't correspond to one swatch color.  This still enables the user to show and hide the series by clicking on a label in the legend.</p>
    
    <div id="chart2" class="plot" style="width:500px;height:300px;margin-bottom:30px;"></div>
    
  </body>
</html>

Added Site/Site_W/jpqplot/examples/breakOnNull.html.











































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Break On Null Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>


  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">
  
$(document).ready(function(){

   s1 = [null, 13, 43, null, 18, 25, 26, 41, 42, null, null, null, 37, 29, 27, 19]; 

   plot1 = $.jqplot('chart1',[s1],{ 
       title: 'breakOnNull true', 
        series:[ 
            {breakOnNull: true} 
        ],
        axes: {
            xaxis: {
                min: 0,
                max:18,
                tickInterval: 2
            }
        }
   });
       
});


</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" style="margin:20px;height:300px; width:600px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/bubbleChart2.html.



























































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Bubble Chart Examples</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.bubbleRenderer.js"></script>
  <!-- END: load jqplot -->

  <style type="text/css">
    .jqplot-target {
        margin-bottom: 2em;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 4em;
        clear: both;
        
    }
    
    p {
        margin: 2em 0;
    }
    
    .note {
        font-size: 0.8em;
    }
    
    #tooltip1b {
        font-size: 12px;
        color: rgb(15%, 15%, 15%);
        padding:2px;
        background-color: rgba(95%, 95%, 95%, 0.8);
    }
    
    #legend1b {
        font-size: 12px;
        border: 1px solid #cdcdcd;
        border-collapse: collapse;
    }
    #legend1b td, #legend1b th {
        border: 1px solid #cdcdcd;
        padding: 1px 4px;
    }
  </style>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
    
    var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"], 
    [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"], 
    [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
    
    plot1 = $.jqplot('chart1',[arr],{
        title: 'Transparent Bubbles',
        seriesDefaults:{
            renderer: $.jqplot.BubbleRenderer,
            rendererOptions: {
                bubbleAlpha: 0.6,
                highlightAlpha: 0.8
            },
            shadow: true,
            shadowAlpha: 0.05
        }
    });    
});</script>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
    
    var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"], 
    [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"], 
    [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
    
    plot1b = $.jqplot('chart1b',[arr],{
        title: 'Tooltip and Custom Legend Highlighting',
        seriesDefaults:{
            renderer: $.jqplot.BubbleRenderer,
            rendererOptions: {
                bubbleAlpha: 0.6,
                highlightAlpha: 0.8,
                showLabels: false
            },
            shadow: true,
            shadowAlpha: 0.05
        }
    });
    
    // Legend is a simple table in the html.
    // Now populate it with the labels from each data value.
    $.each(arr, function(index, val) {
        $('#legend1b').append('<tr><td>'+val[3]+'</td><td>'+val[2]+'</td></tr>');
    });
    
    // Now bind function to the highlight event to show the tooltip
    // and highlight the row in the legend. 
    $('#chart1b').bind('jqplotDataHighlight', 
        function (ev, seriesIndex, pointIndex, data, radius) {    
            var chart_left = $('#chart1b').offset().left,
                chart_top = $('#chart1b').offset().top,
                x = plot1b.axes.xaxis.u2p(data[0]),  // convert x axis unita to pixels on grid
                y = plot1b.axes.yaxis.u2p(data[1]);  // convert y axis units to pixels on grid
            var color = 'rgb(50%,50%,100%)';
            $('#tooltip1b').css({left:chart_left+x+radius+5, top:chart_top+y});
            $('#tooltip1b').html('<span style="font-size:14px;font-weight:bold;color:'+color+';">'+data[3]+'</span><br />'+'x: '+data[0]+'<br />'+'y: '+data[1]+'<br />'+'r: '+data[2]);
            $('#tooltip1b').show();
            $('#legend1b tr').css('background-color', '#ffffff');
            $('#legend1b tr').eq(pointIndex+1).css('background-color', color);
        });
    
    // Bind a function to the unhighlight event to clean up after highlighting.
    $('#chart1b').bind('jqplotDataUnhighlight', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#tooltip1b').empty();
            $('#tooltip1b').hide();
            $('#legend1b tr').css('background-color', '#ffffff');
        });
});</script>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
    
    var arr = [[11, 123, 1236, {label:"Acura", color:'sandybrown'}], 
    [45, 92, 1067, {label:"Alfa Romeo", color:'skyblue'}], 
    [24, 104, 1176, {label:"AM General", color:"salmon"}], [50, 23, 610, {color:"papayawhip"}], 
    [18, 17, 539, "Audi"], [7, 89, 864], [2, 13, 1026, "Bugatti"]];
    
    plot1c = $.jqplot('chart1c',[arr],{
        title: 'Bubble Data Customizations',
        seriesDefaults:{
            renderer: $.jqplot.BubbleRenderer
        }
    });
    
});</script>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){

    var arr = [[11, 123, 1236, "Acura"], [45, 92, 1067, "Alfa Romeo"], 
    [24, 104, 1176, "AM General"], [50, 23, 610, "Aston Martin Lagonda"], 
    [18, 17, 539, "Audi"], [7, 89, 864, "BMW"], [2, 13, 1026, "Bugatti"]];
    
    plot2 = $.jqplot('chart2',[arr],{
        title: 'Bubble Gradient Fills<sup>*</sup>',
        seriesDefaults:{
            renderer: $.jqplot.BubbleRenderer,
            rendererOptions: {
                bubbleGradients: true
            },
            shadow: true
        }
    });
    
});</script>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
    
    var arr = [[44, 66, 897, "Acura"], [25, 40, 1119, "Alfa Romeo"], [2, 33, 1197, "AM General"], 
    [4, 132, 896, "Aston Martin Lagonda"], [2, 129, 314, "Audi"], [14, 47, 612, "BMW"], 
    [45, 112, 719, "Bugatti"], [11, 38, 785, "Buick"], [15, 39, 367, "Cadillac"], 
    [6, 133, 726, "Chevrolet"], [48, 84, 1082, "Citroen"], [40, 18, 1047, "DaimlerChrysler Corporation"], 
    [24, 107, 1065, "Daewoo Motor Co."], [27, 92, 792, "Delorean Motor Company"], [1, 78, 803, "Dodge"], 
    [5, 149, 320, "Ferrari"], [11, 127, 497, "Fiat"], [14, 18, 805, "Ford Motor Company"], 
    [9, 101, 394, "General Motors"], [16, 57, 338, "GMC"], [19, 89, 977, "Holden"], 
    [35, 78, 464, "Honda"], [18, 130, 364, "Hummer"], [37, 20, 699, "Hyundai"], 
    [33, 140, 457, "Infiniti"], [12, 122, 533, "Isuzu"], [25, 67, 767, "Jaguar Cars"], 
    [0, 7, 481, "Jeep"], [38, 36, 611, "Jensen Motors"], [43, 91, 943, "Kia"], [45, 21, 569, "Laforza"]];
    
    plot3 = $.jqplot('chart3',[arr],{
        title: 'Bubble Auto Scaling Options',
        seriesDefaults:{
            renderer: $.jqplot.BubbleRenderer,
            rendererOptions: {
                autoscalePointsFactor: -0.15,
                autoscaleMultiplier: 0.85,
                highlightMouseDown: true,
                bubbleAlpha: 0.7
            },
            shadow: true,
            shadowAlpha: 0.05
        }
    });
    
});</script>


<script type="text/javascript">
    $(document).ready(function(){
        
        $('script.code').each(function(index) {
            $('pre.code').eq(index).text($(this).html());
        })
        $(document).unload(function() {$('*').unbind(); });
    });
</script> 

  </head>
  <body>
<?php include "nav.inc"; ?>
<p>Bubble charts represent 3 dimensional data.  Data is passed in to a bubble chart as a series of [x, y, radius, &lt;label or object&gt;].  The optional fourth element of the data point can either be either a label string or an object having 'label' and/or 'color' properties to assign to the bubble.</p>

<p>By default, all bubbles are scaled according to the size of the plot area.  The radius value in the data point will be adjusted to fit the bubbles in the chart.  If the "autoscaleBubbles" option is set to false, the radius value in the data will be taken as a literal pixel value for the radius of the points.</p>

<p>The below chart show basic customization of bubble appearance with the "bubbleAlpha" and "highlightAlpha" options.</p>

<div id="chart1" class="plot" style="width:460px;height:340px;"></div>
<pre class="code"></pre>

<div style="position:absolute;z-index:99;display:none;" id="tooltip1b"></div>

<table><tr>
    <td><div id="chart1b" class="plot" style="width:460px;height:340px;"></div></td>
    <td><div style="height:340px;"><table id="legend1b"><tr><th>Company</th><th>R Value</th></tr></table></div></td>
</tr></table>
<pre class="code"></pre>

<p>Below is a basic bubble chart showing usage of the optional label and color properties passed in with the data.</p>

<div id="chart1c" class="plot" style="width:460px;height:340px;"></div>
<pre class="code"></pre>

<p>The next chart uses the "bubbleGradients: true" option to specify gradient fills on the bubbles.  Radial gradients are not supported in IE<sup>*</sup> and will be automatically disabled.</p>  

<div id="chart2" class="plot" style="width:460px;height:340px;"></div>

<p class="note"><sup>*</sup>Radial gradients are not supported in IE because they are not supported in the excanvas emulation layer used by jqPlot to render charts in IE.  jqPlot renders charts using the HTML canvas element which is supported by nearly every browser except IE.  Excanvas translates the canvas rendering to VML rendering for IE, but unfortunately does not properly handle radial gradients.</p>

<pre class="code"></pre>

<p>The following bubble chart shows the "autoscalePointsFactor" and "autoscaleMultiplier" options which can be used to control bubble scaling.  The "autoscalePointsFactor" options controls bubble scaling with the number of points on the plot.  A negative value will decrease bubble size and number of bubbles increases.  The "autoscaleMultiplier" will makes all bubbles larger or smaller for values greater  or less than 1.0.</p>

<p>This chart also demonstrates some of the highlighting options.  Bubble highlighting is controlled with the "highlightMouseOver" and "highlightMouseDown" boolean options.  Here the "highlightMouseDown: true" option is set which causes the plot to highlight on mousedown (click).  This automatically sets the "highlightMouseOver" option to false.</p>

<p>Events are also trigger with plot interaction.  Specifically, "jqplotDataHighlight", "jqplotDataUnhighlight", "jqplotDataClick" and "jqplotDataRightClick" events are triggered.  Handlers are passed an event object, the series index, the point index, and the bubble data.</p>

<div id="chart3" class="plot" style="width:600px;height:400px;"></div>
<pre class="code"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/bubblechart.html.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Bubble Chart Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.bubbleRenderer.js"></script>
  <!-- END: load jqplot -->


<script language="javascript" type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
      
var makes = ['Acura', 'Alfa Romeo', 'AM General', 'Aston Martin Lagonda Ltd.', 'Audi', 'BMW', 'Bugatti', 'Buick', 'Cadillac', 'Chevrolet', 'Citroen', 'DaimlerChrysler Corporation', 'Daewoo Motor Co.', 'Delorean Motor Company', 'Dodge', 'Ferrari', 'Fiat', 'Ford Motor Company', 'General Motors', 'GMC', 'Holden', 'Honda', 'Hummer', 'Hyundai', 'Infiniti', 'Isuzu', 'Jaguar Cars', 'Jeep', 'Jensen Motors', 'Kia', 'Laforza', 'Lamborghini', 'Lancia', 'Land Rover', 'Lincoln', 'Lotus Cars', 'Lexus', 'Maserati', 'Mazda', 'Mercedes-Benz', 'Mercury', 'MG', 'Minelli', 'The Mini Cooper', 'Mistubishi', 'Morgan Motor Co.', 'Mosler Automotive', 'Nissan', 'NUMMI ', 'Oldsmobile', 'Opel', 'Packard', 'Panoz', 'Peugeot', 'Pontiac', 'Porsche', 'Proton', 'PSA Peugeot Citroen', 'Renault', 'Rolls-Royce', 'Rover Cars', 'Saab', 'Saturn', 'Shelby American', 'Skoda', 'Spectre Cars', 'Studebaker Motor Company', 'Subaru', 'Suzuki', 'Th!nk', 'Toyota', 'Toyota Motor Manufacturing - Georgetown, KY', 'TVR', 'Vauxhall', 'Volkswagen', 'Volvo', 'Zimmer Motor Cars'];

var arr = []
var l = 3 + Math.ceil(Math.random()*(makes.length-20));
for (var i=0; i<7; i++) {
    arr.push([Math.round(Math.random() * 50), Math.round(Math.random() * 150), Math.round(400 + Math.random() * 900), makes[i]]);
}


   s1 = [[0.6, 2.6, 12, 'Ford'], [0.5, 3, 16, 'GM'], [1.3, 2, 17, 'VW'], [1.2, 1.2, 13, 'Mini'], [2.7, 1.5, 5], [1.7, 1.2, 4], [1.6, 2.9, 3], [0.3, 0.6, 2], [1.3, 2.2, 10, 'Franklin'], [1.1, 1.3, 13, 'Nissan'], [1, 1, 12, 'Chrysler'], [2, 2.5, 11, 'Audi']];
   // s1 = [[0.6, 2.6, 12, 'Ford'], [0.5, 3, 16, 'GM'], [1.1, 1.3, 10, 'Nissan'], [1, 1, 20, 'Chrysler']];
   // s1 = [[23, 42, 1983], [12, 13, 4324, {label:'Ford', color:'indianred'}], [20, 58, 3900], [32, 29, 3425], [44, 55, 878]];

   plot1 = $.jqplot('chart1',[arr],{
       sortData: false,
       title: 'Bubble Test',
       seriesDefaults:{
           renderer: $.jqplot.BubbleRenderer,
           rendererOptions: {
               autoscalePointsFactor: -.15,
               // autoscaleMultiplier: 0.7,
               // autoscaleBubbles: false,
               // highlightMouseDown: false
               // varyBubbleColors: false
               bubbleAlpha: 0.6,
               highlightAlpha: 0.8
           },
           highlightMouseDown: true,
           shadow: true,
           shadowAlpha: 0.05
       },
       axesDefaults: {
           // pad: 1.4
       }
   });
   
 });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" class="plot" style="width:600px;height:400px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/catchError.html.











































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <!-- END: load jqplot -->


<script language="javascript" type="text/javascript">
$(document).ready(function(){

    // First, turn on error handling
    $.jqplot.config.catchErrors = true;

   plot1 = $.jqplot('chart1',[[]],{});
   
   // Second plot will use these customizations to the plot target for error display.
   $.jqplot.config.errorMessage = 'A Plot Error has Occurred';
   $.jqplot.config.errorBackground = '#fbeddf';
   $.jqplot.config.errorBorder = '2px solid #aaaaaa';
   $.jqplot.config.errorFontFamily = 'Courier New';
   $.jqplot.config.errorFontSize = '16pt';
   
   plot2 = $.jqplot('chart2',[],{
       axes: {
           xaxis: {
               renderer: $.jqplot.BarRenderer.js
           }
       }
   });
   
 });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" class="plot" style="width:500px;height:300px;"></div>
<div id="chart2" class="plot" style="width:500px;height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/categoryHorizontalBar.html.



































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
		<title>Test 3</title>
		
		<!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
		  
		<link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
		
		<!-- BEGIN: load jquery -->
		<script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
		<!-- END: load jquery -->
		
		<!-- BEGIN: load jqplot -->
		<script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
		<!-- END: load jqplot -->

	<script type="text/javascript" language="javascript">
	  
	$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    line1 = [[2,4], [1,6], [3,2], [4,9], [5,16]];
    plot1 = $.jqplot('chart', [line1], {    
        series: [{label: '1st Qtr'}],
        axes: {
            xaxis: {
                ticks:['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday'],
                renderer: $.jqplot.CategoryAxisRenderer
            }
        }
    });

    line1 = [[4, 1], [2, 2], [9, 3], [16, 4]];
    line2 = [[3, 1], [7, 2], [6.25, 3], [3.125, 4]];
    plot2 = $.jqplot('chart2', [line1, line2], {
        stackSeries: true,
        legend: {
            show: true,
            location: 'se'
        },
        title: 'Unit Sales: Acme Decoy Division',
        seriesDefaults: {
            renderer: $.jqplot.BarRenderer,
            rendererOptions: {
                barDirection: 'horizontal',
                barPadding: 6,
                barMargin: 40
            }
        },
        series: [{
            label: '1st Qtr'
        },
        {
            label: '2nd Qtr'
        }],
        axes: {
            yaxis: {
                renderer: $.jqplot.CategoryAxisRenderer,
                ticks: ['Q1', 'Q2', 'Q3', 'Q4']
            },
            xaxis: {min: 0, max: 20, numberTicks:5}
        }
    });

});

	</script>

	</head>
	<body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:400px; height:240px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:320px; height:270px;"></div>

	</body>
</html>

Added Site/Site_W/jpqplot/examples/categoryVsLinearAxes.html.





















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-legend {
      font-size: 0.75em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;


line1 = [['1/1/2006', 5], ['2/1/2006', 1], ['3/1/2006', 3], ['4/1/2006', 7]];
line2 = [['1/1/2006', 2], ['2/1/2006', 6], ['3/1/2006', 4], ['4/1/2006', 3]];

plot1 = $.jqplot('chart1', [line1, line2], {
  legend: {show:true, location: 'nw', yoffset: 6},
  axes:{
    xaxis:{
      renderer:$.jqplot.DateAxisRenderer, 
      tickOptions:{
        formatString:'%m.%y'}, 
      ticks:['12/1/2005', '1/1/2006', '2/1/2006', '3/1/2006', '4/1/2006', '5/1/2006']
    }
  }
});


line1 = [5, 1, 3, 7];
line2 = [2, 6, 4, 3];

plot2 = $.jqplot('chart2', [line1, line2], {
  legend: {show:true, location: 'nw', yoffset: 6},
  axes:{
    xaxis:{
      renderer:$.jqplot.CategoryAxisRenderer, 
      ticks:['01.06', '02.06', '03.06', '04.06']
    }
  }
});


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:200px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:200px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/chartInTable.html.



































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<html>
<head>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="../excanvas.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
    <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
    <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />

<script language="javascript" type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
  $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]],
  { title:'Chart within Table Cell',
    axes:{yaxis:{min:-10, max:240}},
    series:[{color:'#5FAB78'}]
  });
});
</script>
</head>
<body>
<?php include "nav.inc"; ?>
    <table>
        <tr>
            <td>
                <div id="chartdiv" style="height: 400px; width: 300px;">
                </div>

            </td>
        </tr>
    </table>
</body>
</html>

Added Site/Site_W/jpqplot/examples/ciParser.html.































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Data Renderers, AJAX and JSON Data</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.json2.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ciParser.js"></script>
  
  <style type="text/css">
    div.jqplot-target {
        margin: 20px;
    }
  </style>

  <!-- END: load jqplot -->

<script class="code" type="text/javascript">$(document).ready(function(){  
    
    var jsonstr = '{"PriceTicks": [{"Price":5.5,"TickDate":"\/Date(1283745600000)\/"}, \
            {"Price":6.8,"TickDate":"\/Date(1283832000000)\/"}, \
            {"Price":7.1,"TickDate":"\/Date(1283918400000)\/"}], \
        "PriceBars": [{"BarDate":"\/Date(1283745600000)\/","Close":10.0,"High":15.0,"Low":8.0,"Open":9.0}, \
            {"BarDate":"\/Date(1283832000000)\/","Close":10.6,"High":14.3,"Low":9.1,"Open":12.5}, \
            {"BarDate":"\/Date(1283918400000)\/","Close":12.0,"High":13.0,"Low":9.0,"Open":9.8}]}';

    plot3 = $.jqplot('chart3', jsonstr, {
      title:'Custom JSON Format, JSON Encoded String',
      dataRenderer: $.jqplot.ciParser,
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickInterval: '1 day',
              tickOptions:{formatString:'%y/%m/%d'},
              min: '2010/09/05',
              max: '2010/09/09'
          }
      },
      series: [{}, {renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){ 
    
    var jsonobj = {"PriceTicks":[
            {"Price":5.5,"TickDate":"\/Date(1283745600000)\/"},
            {"Price":6.8,"TickDate":"\/Date(1283832000000)\/"},
            {"Price":7.1,"TickDate":"\/Date(1283918400000)\/"}],
        "PriceBars":[
            {"BarDate":"\/Date(1283745600000)\/","Close":10.0,"High":15.0,"Low":8.0,"Open":9.0},
            {"BarDate":"\/Date(1283832000000)\/","Close":10.6,"High":14.3,"Low":9.1,"Open":12.5},
            {"BarDate":"\/Date(1283918400000)\/","Close":12.0,"High":13.0,"Low":9.0,"Open":9.8}]
    };
  
    plot4 = $.jqplot('chart4', jsonobj, {
      title:'Custom JSON Format, JSON Object',
      dataRenderer: $.jqplot.ciParser,
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickInterval: '1 day',
              tickOptions:{formatString:'%y/%m/%d'},
              min: '2010/09/05',
              max: '2010/09/09'
          }
      },
      series: [{}, {renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
    });
});</script>
  
<script type="text/javascript">    
    $(document).ready(function(){
        $('script.code').each(function(index) {
            $('pre.code').eq(index).text($(this).html());
        });
        $('script.common').each(function(index) {
            $('pre.common').eq(index).html($(this).html());
        });
        $(document).unload(function() {$('*').unbind(); });
    });
</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
<p>JSON data formatted according the the City Index API spec can be read in directly by jqPlot thorugh the use of the dataRenderer option and a custom ciParser data renderer.  The ciParser data renderer will translate either a JSON encoded string or JSON object.</p>

<p>To use the the ciParser, include the <code>jqplot.json2.js</code> and <code>jqplot.ciParser.js</code> files.  Specify the <code>$.jqplot.ciParser</code> as the renderer in the plot's "dataRenderer" option.  The City Index JSON data can then be passed into the jqplot function as shown in the examples below:</p>

<p>Here, a stringified JSON data objects is passed into the jqplot function.</p>
<div id="chart3" style="height:200px; width:400px;"></div>
<pre class="code"></pre>
<p>This example uses the same City Index data format, but passes in a JSON object instead of a string.</p>
<div id="chart4" style="height:200px; width:400px;"></div>
<pre class="code"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/customHighlighterCursorTrendline.html.

















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
   <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dragable.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.trendline.js"></script>
  <!-- END: load jqplot -->

  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="test" class="plot" style="width:500px;height:300px;"></div>
<script language="javascript" type="text/javascript"><!--

    $.jqplot.config.enablePlugins = true;
    
   s1 = [['23-May-08',1],['24-May-08',4],['25-May-08',2],['26-May-08',
6]];


   plot1 = $.jqplot('test',[s1],{
       title: 'Highlighting, Dragging, Cursor and Trend Line',
       axes: {
           xaxis: {
               renderer: $.jqplot.DateAxisRenderer,
               tickOptions: {
                   formatString: '%b %#d, %Y'
               },
               numberTicks: 4
           },
           yaxis: {
               tickOptions: {
                   formatString: '$%.2f'
               }
           }
       },
       highlighter: {
           sizeAdjust: 10,
           tooltipLocation: 'n',
           tooltipAxes: 'y',
           tooltipFormatString: '<b><i><span style="color:red;">hello</span></i></b> %.2f',
           useAxesFormatters: false
       },
       cursor: {
           show: true
       }
   });
--></script>

  </body>
</html>

Added Site/Site_W/jpqplot/examples/customPieTests.html.



















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-legend {
      font-size: 1em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;


line1 = [['<frogs> & lizards', 3], ['buzzards & gizzards', 7], ['deer & beef', 2.5], ['turkeys & vulures', 6], ['moles & voles', 5], ['ground hogs & beets', 4]];
line2 = [3, 7, 2.5, 6, 5, 4];

plot1 = $.jqplot('chart1', [line1], {
  seriesColors:['#dd3333', '#d465f1', '#aa2211', '#3377aa', '#6699bb', '#9933aa'],
  title: 'Default Pie Chart with Custom Colors',
  seriesDefaults:{renderer:$.jqplot.PieRenderer}
});

plot2 = $.jqplot('chart2', [line1], {
  title: 'Pie Chart with Legend and sliceMargin',
  seriesDefaults:{renderer:$.jqplot.PieRenderer, rendererOptions:{sliceMargin:8}}, 
  legend:{show:true, escapeHtml:true}
});

plot3 = $.jqplot('chart3', [line1], {
  title: 'Pie Chart without the Filling',
  series:[{renderer:$.jqplot.PieRenderer, rendererOptions:{sliceMargin:8, fill:false, shadow:false, lineWidth:5}}], 
  legend:{show:true, location: 'w'}
});
 
plot3 = $.jqplot('chart4', [line2], {
  title: 'Not a Pie Chart that should render O.K. alongside a Pie Chart', 
  seriesColors:['#dd3333', '#33dd33'],
  legend:{show:true, location: 'n'}
});


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/dataLabels.html.

































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.funnelRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <!-- END: load jqplot -->

  <style type="text/css">
    #code {
        font: 10pt "Andale Mono", Monaco, "Courier New", sans-serif ;
        white-space: pre;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 3em;
        
    }
    
    p {
        margin: 2em 0;
    }
  </style>
  
<script id="example_1" type="text/javascript">$(document).ready(function(){
    s1 = [['Sony',7], ['Samsumg',13.3], ['LG',14.7], ['Vizio',5.2], ['Insignia', 1.2]];
        
    plot1 = $.jqplot('chart1', [s1], {
        grid: {
            drawBorder: false, 
            drawGridlines: false,
            background: '#ffffff',
            shadow:false
        },
        axesDefaults: {
            
        },
        seriesDefaults:{
            renderer:$.jqplot.PieRenderer,
            rendererOptions: {
                showDataLabels: true,
                // dataLabelCenterOn: false,   // This is an expreimental feature.
                dataLabelPositionFactor: 0.6,
                dataLabelNudge: 0,
                dataLabels: ['Longer', 'B', 'C', 'Longer', 'None']
            }
        },
        legend: {
            show: true,
            placement: 'outside'
        }
    }); 
});
</script>
  
<script id="example_2" type="text/javascript">$(document).ready(function(){
    s1 = [['Sony',7], ['Samsumg',13.3], ['LG',14.7], ['Vizio',5.2], ['Insignia', 1.2]];
        
    plot2 = $.jqplot('chart2', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.PieRenderer,
            rendererOptions: {
                showDataLabels: true,
                dataLabelThreshold: 1,
                dataLabelFormatString: '%.1f%%'
            }
        },
        legend: {
            show: true,
            placement: 'outside'
        }
    }); 
});
</script>
  
<script id="example_3" type="text/javascript">$(document).ready(function(){
    s1 = [['Sony',7], ['Samsumg',13.3], ['LG',14.7], ['Vizio',5.2], ['Insignia', 1.2]];
        
    plot3 = $.jqplot('chart3', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.FunnelRenderer,
            rendererOptions: {
                showDataLabels: true,
                dataLabels: 'label'
            }
        }
    });
});
</script>
  
<script id="example_4" type="text/javascript">$(document).ready(function(){
    s1 = [['Sony',7], ['Samsumg',13.3], ['LG',14.7], ['Vizio',5.2], ['Insignia', 1.2]];
        
    plot4 = $.jqplot('chart4', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.FunnelRenderer,
            rendererOptions: {
                showDataLabels: true,
                dataLabels: ['47 years', '28 years', '22 years', '14 years', '7 years']
            }
        },
        legend: {
            show: true,
            placement: 'outside'
        }
    });
});
</script>

<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_1').html($('#example_1').html());
        $('#code_2').html($('#example_2').html());
        $('#code_3').html($('#example_3').html());
        $('#code_4').html($('#example_4').html());
        $(document).unload(function() {$('*').unbind(); });

    });
</script> 
    
  </head>
  <body>
<?php include "nav.inc"; ?>

    <p>Data labels can be automatically added to pie chart and donut chart slices as well as funnel chart areas.  what labels are displayed is controlled by the series "dataLabel" option.  There are 4 types of data labels to display:<p>
    <ul>
        <li>"label" - label of the point.
        <li>"value" - value of the point.
        <li>"percent" - percent of the whole (pie/donut/funnel) of the point.
        <li>Array - custom array of data point labels, one for each point.
    </ul>
        
    <p>Formatting of labels is controlled through the series "dataLabelsFormatString" option.  By default, the format string will be set based on the label type:
     <ul>
        <li>"label" - '%s', raw string.
        <li>"value" - '%d', integer format.
        <li>"percent" - '%d%%', integer with % sign appended.
        <li>Array - '%s', raw string.
    </ul>       
  
    <p>The following examples will clarify usage as well as other options.  By default, data labels are turned off.  They are enabled by setting the "showDataLabels: true" option.  Below is the default configuration for a pie chart:</p>
               
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <pre id="code_1"></pre>
 
    <p>Notice that no data label was shown for "Insignia".  This is because the area of its slice is less than the "dataLabelThreshold" (3% by default).  The threshold is applicable no matter what type of label we used.  We can change the threshold and the format string for the label in the following example:<p>

    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <pre id="code_2"></pre>
    
    <p>Data labels function similarly for funnel and donut plots.  Here is a funnel plot with the "dataLabels" option set to display the point label.  Note that the label for "Insignia" is not displayed because Insignia represents less than 3% of the overall chart area, which is below the dataLabelThreshold:<p>
    
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <pre id="code_3"></pre>
    
    <p>The last example shows usage of a custom dataLabels array.  Again, labels for small sections will not be displayed unless the "dataLabelThreshold" is reduced (it is set to 3 percent by default).</p>
    
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <pre id="code_4"></pre>
    
 
  </body>
</html>

Added Site/Site_W/jpqplot/examples/dataRenderer.html.







































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Data Renderers, AJAX and JSON Data</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.json2.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ciParser.js"></script>
  
  <style type="text/css">
    div.jqplot-target {
        margin: 20px;
    }
  </style>

  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">

var cos = function(data, plot) {
    for (var i=0; i<data.length; i++) {
        for (var j=0; j<data[i].length; j++) {
            data[i][j] = Math.cos(data[i][j]);
        }
    }
    return data;
};

var ajaxdata = function(url, plot, options) {
    var ret = $.ajax({
        async: false,
        url: url
    });
    return $.parseJSON(ret.responseText);
};
</script>

<script class="code" type="text/javascript">$(document).ready(function(){     
    
    var sineRenderer = function(data, plot) {
        for (var i=0; i<data.length; i++) {
            for (var j=0; j<data[i].length; j++) {
                data[i][j] = Math.sin(data[i][j]);
            }
        }
        return data;
    };

    var line1 = [-3.5, -3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5];

    plo1t = $.jqplot('chart1',[line1],{
        title: 'Sine Data Renderer',
        dataRenderer: sineRenderer
    });
});</script>
  
<script class="code" type="text/javascript">$(document).ready(function(){
    
    var ajaxDataRenderer = function(url, plot) {
        var ret = null;
        $.ajax({
            // have to use synchronous here, else returns before data is fetched
            async: false,
            url: url,
            dataType:'json',
            success: function(data) {
                ret = data;
            }
        });
        return ret;
    };
 
    var jsonurl = "./jsondata.txt";

    plo12 = $.jqplot('chart2', jsonurl,{
        title: 'AJAX JSON Data Renderer',
        dataRenderer: ajaxDataRenderer
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){ 
     
    var jsonstr = '{"PriceTicks": [{"Price":5.5,"TickDate":"\/Date(1283745600000)\/"}, \
            {"Price":6.8,"TickDate":"\/Date(1283832000000)\/"}, \
            {"Price":7.1,"TickDate":"\/Date(1283918400000)\/"}], \
        "PriceBars": [{"BarDate":"\/Date(1283745600000)\/","Close":10.0,"High":15.0,"Low":8.0,"Open":9.0}, \
            {"BarDate":"\/Date(1283832000000)\/","Close":10.6,"High":14.3,"Low":9.1,"Open":12.5}, \
            {"BarDate":"\/Date(1283918400000)\/","Close":12.0,"High":13.0,"Low":9.0,"Open":9.8}]}';

    plot3 = $.jqplot('chart3', jsonstr, {
      title:'Custom JSON Format, JSON Encoded String',
      dataRenderer: $.jqplot.ciParser,
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickInterval: '1 day',
              tickOptions:{formatString:'%y/%m/%d'},
              min: '2010/09/05',
              max: '2010/09/09'
          }
      },
      series: [{}, {renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){ 
    
    var jsonobj = {"PriceTicks":[
            {"Price":5.5,"TickDate":"\/Date(1283745600000)\/"},
            {"Price":6.8,"TickDate":"\/Date(1283832000000)\/"},
            {"Price":7.1,"TickDate":"\/Date(1283918400000)\/"}],
        "PriceBars":[
            {"BarDate":"\/Date(1283745600000)\/","Close":10.0,"High":15.0,"Low":8.0,"Open":9.0},
            {"BarDate":"\/Date(1283832000000)\/","Close":10.6,"High":14.3,"Low":9.1,"Open":12.5},
            {"BarDate":"\/Date(1283918400000)\/","Close":12.0,"High":13.0,"Low":9.0,"Open":9.8}]
    };
  
    plot4 = $.jqplot('chart4', jsonobj, {
      title:'Custom JSON Format, JSON Object',
      dataRenderer: $.jqplot.ciParser,
      axes: {
          xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              tickInterval: '1 day',
              tickOptions:{formatString:'%y/%m/%d'},
              min: '2010/09/05',
              max: '2010/09/09'
          }
      },
      series: [{}, {renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
    });
});</script>
  
<script type="text/javascript">    
    $(document).ready(function(){
        $('script.code').each(function(index) {
            $('pre.code').eq(index).text($(this).html());
        });
        $('script.common').each(function(index) {
            $('pre.common').eq(index).html($(this).html());
        });
        $(document).unload(function() {$('*').unbind(); });
    });
</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
<p>The "dataRenderer" plot options allows you to specify a data preprocessor for your plot.  This enables jqPlot to accept data in any arbitrary format (e.g. AJAX data soruces, JSON strings, etc.).  Below are some examples illustrating how to use dataRenderers.</p>

<p>In this simple example, we create a dataRenderer which takes an array of x values and returns an array of [x, sin(x)] value pairs. Data renderers are passes the plot data and a reference to the plot as arguments.</p>
<div id="chart1" style="height:200px; width:400px;"></div>
<pre class="code"></pre>
<p>An example of how to use a dataRenderer to fetch data from a server via an AJAX callback.  Here the "data" passed into the plot is actually the url of the data source.</p>
<div id="chart2" style="height:200px; width:400px;"></div>
<pre class="code"></pre>
<p>This example uses a more complicated dataRenderer that has been encapsulated as a jqplot plugin and loaded separately.  This plugin accepts JSON data objects or strings formatted according to the City Index data format and returns jqPlot formatted data.  This example uses a JSON encoded string.</p>
<div id="chart3" style="height:200px; width:400px;"></div>
<pre class="code"></pre>
<p>This example uses the same City Index data format, but passes in a JSON object instead of a string.</p>
<div id="chart4" style="height:200px; width:400px;"></div>
<pre class="code"></pre>

<p>There is a third argument passed to the data renderer, dataRendererOptions.  It was not used in these examples, but can be set as a separate option on the plot to pass additional arguments into the renderer if needed.</p>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/dataTracking.html.























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
	
	<style type="text/css">
	  .jqplot-cursor-legend {
	    width: 160px;
	    font-family: "Courier New";
	    font-size: 0.85em;
	  }
	  
	  td.jqplot-cursor-legend-swatch {
	    width: 1.3em;
	  }
	  
	  div.jqplot-cursor-legend-swatch {
/*      width: 15px;*/
	  }
	</style>
	
	<script type="text/javascript" language="javascript">
		$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
		  
var InPr = [[0.0,85.0],[10.0,87.4],[20.0,90.0],[30.0,91.3],[40.0,93.5],[50.0,94.1],[60.0,95.4],[70.0,95.8],[80.0,96.1],[90.0,97.6],[100.0,97.4],[110.0,97.7],[120.0,97.9],[130.0,98.3],[140.0,97.9],[150.0,98.4],[160.0,99.8],[170.0,100.5],[180.0,100.4],[190.0,100.3],[200.0,102.9],[210.0,104.1],[220.0,104.4],[230.0,103.9],[240.0,104.4],[250.0,104.0],[260.0,103.9],[270.0,103.5],[280.0,105.4],[290.0,105.7],[300.0,105.7],[310.0,105.3],[320.0,105.0],[330.0,105.1],[340.0,105.0],[350.0,105.1],[360.0,104.7],[370.0,104.4],[380.0,104.3],[390.0,105.7],[400.0,106.4],[410.0,105.7],[420.0,105.4],[430.0,105.7],[440.0,105.7],[450.0,105.9],[460.0,105.3],[470.0,105.7],[480.0,105.8],[490.0,105.4],[500.0,105.4],[510.0,105.4],[520.0,105.6],[530.0,104.9],[540.0,104.8],[550.0,105.2],[560.0,105.2],[570.0,105.1],[580.0,104.8],[590.0,104.6],[600.0,104.3],[610.0,104.2],[620.0,104.1],[630.0,104.7],[640.0,104.6],[650.0,104.7],[660.0,104.6],[670.0,104.4],[680.0,106.8],[690.0,106.6],
[700.0,106.3],[710.0,107.1],[720.0,106.2],[730.0,106.1],[740.0,106.7],[750.0,106.5],[760.0,106.8],[770.0,106.7],[780.0,106.6],[790.0,106.7],[800.0,106.8],[810.0,106.4],[820.0,106.7],[830.0,106.5],[840.0,106.9],[850.0,106.7],[860.0,106.7],[870.0,106.8],[880.0,107.1],[890.0,106.6],[900.0,106.8],[910.0,106.9],[920.0,106.8],[930.0,107.3],[940.0,106.9],[950.0,106.5],[960.0,107.2],[970.0,107.0],[980.0,106.9],[990.0,107.2],[1000.0,107.7],[1010.0,107.6],[1020.0,107.1],[1030.0,107.6],[1040.0,107.2],[1050.0,107.2],[1060.0,107.5],[1070.0,107.7],[1080.0,107.3],[1090.0,107.0],[1100.0,107.7],[1110.0,107.0],[1120.0,107.8],[1130.0,107.8],[1140.0,107.7],[1150.0,107.4],[1160.0,107.8],[1170.0,107.8],[1180.0,107.6],[1190.0,107.7],[1200.0,107.4],[1210.0,108.0],[1220.0,372.6],[1230.0,90.4],[1240.0,125.0],[1250.0,110.4],[1260.0,108.5],[1270.0,109.7],[1280.0,108.9],[1290.0,109.6],[1300.0,110.2],[1310.0,110.0],[1320.0,110.7],[1330.0,110.3],[1340.0,110.6],[1350.0,110.5],
[1360.0,110.8],[1370.0,110.6],[1380.0,111.0],[1390.0,113.0],[1400.0,112.1],[1410.0,112.3],[1420.0,112.3],[1430.0,137.6],[1440.0,179.0],[1450.0,216.9],[1460.0,399.2],[1470.0,433.6],[1480.0,203.5],[1490.0,223.3],[1500.0,229.8],[1510.0,416.9],[1520.0,198.8],[1530.0,208.7],[1540.0,172.0],[1550.0,145.7],[1560.0,119.2],[1570.0,104.8],[1580.0,100.1],[1590.0,97.7],[1600.0,97.2],[1610.0,98.8],[1620.0,98.1],[1630.0,98.1],[1640.0,98.8],[1650.0,98.7],[1660.0,98.5],[1670.0,98.8],[1680.0,98.2],[1690.0,98.2],[1700.0,97.7],[1710.0,98.1],[1720.0,97.1],[1730.0,97.6],[1740.0,97.7],[1750.0,97.4],[1760.0,97.6],[1770.0,98.0],[1780.0,97.6],[1790.0,97.7],[1800.0,97.8],[1810.0,97.6],[1820.0,97.9],
[1830.0,97.9],[1840.0,97.8],[1850.0,97.7],[1860.0,97.7],[1870.0,97.7],[1880.0,97.4],[1890.0,97.3],[1900.0,97.2],[1910.0,96.9],[1920.0,97.2],[1930.0,97.4],[1940.0,97.7],[1950.0,97.1],[1960.0,97.1],[1970.0,96.6],[1980.0,96.7],[1990.0,96.5],[2000.0,97.2],[2010.0,96.6],[2020.0,96.4],[2030.0,96.7],[2040.0,96.8],[2050.0,96.6],[2060.0,96.6],[2070.0,96.5],[2080.0,96.6],[2090.0,96.4],[2100.0,96.6],[2110.0,96.5],[2120.0,96.2],[2130.0,96.2],[2140.0,96.5],[2150.0,96.0],[2160.0,96.2],[2170.0,96.3],[2180.0,96.4],[2190.0,97.0],[2200.0,96.8],[2210.0,96.5],[2220.0,96.6],[2230.0,96.1],[2240.0,96.1],[2250.0,96.6],[2260.0,96.5],[2270.0,96.6],[2280.0,96.4],[2290.0,96.5],[2300.0,96.6],[2310.0,96.9],[2320.0,96.8],[2330.0,96.9],[2340.0,97.2],[2350.0,96.6],[2360.0,97.3],[2370.0,97.4],[2380.0,97.1],[2390.0,97.1],[2400.0,96.8],[2410.0,97.0],[2420.0,97.1],[2430.0,97.1],[2440.0,97.0],[2450.0,97.1],[2460.0,97.1],[2470.0,97.5],[2480.0,96.9],[2490.0,96.8],[2500.0,96.8],[2510.0,97.0],[2520.0,96.7],[2530.0,97.0],[2540.0,97.1],[2550.0,97.2],[2560.0,97.1],[2570.0,97.1],[2580.0,97.1],[2590.0,96.8],[2600.0,97.2],[2610.0,97.1],[2620.0,97.3],[2630.0,97.1],[2640.0,97.1],[2650.0,97.1],[2660.0,97.0],[2670.0,96.8],[2680.0,97.3],[2690.0,97.4],[2700.0,97.3],[2710.0,97.2],[2720.0,97.1],[2730.0,97.2],[2740.0,97.1],[2750.0,97.1],[2760.0,97.1],[2770.0,96.8],[2780.0,96.4],[2790.0,96.6],[2800.0,96.6]];
var OutPr = [[0.0,1788.1],[10.0,1803.3],[20.0,1807.3],[30.0,1813.5],[40.0,1822.0],[50.0,1820.3],[60.0,1823.7],[70.0,1823.7],[80.0,1825.3],[90.0,1831.0],[100.0,1832.1],[110.0,1834.4],[120.0,1834.4],[130.0,1831.5],[140.0,1832.7],[150.0,1834.4],[160.0,1831.5],[170.0,1832.1],[180.0,1830.4],[190.0,1831.0],[200.0,1830.4],[210.0,1829.3],[220.0,1829.9],[230.0,1828.2],[240.0,1831.0],[250.0,1828.7],[260.0,1827.0],[270.0,1829.3],[280.0,1826.5],[290.0,1824.8],[300.0,1824.2],[310.0,1823.7],[320.0,1823.7],[330.0,1823.7],[340.0,1825.3],[350.0,1822.0],[360.0,1820.3],[370.0,1818.0],[380.0,1819.1],[390.0,1816.3],[400.0,1820.8],[410.0,1820.8],[420.0,1819.7],[430.0,1820.3],[440.0,1819.7],[450.0,1819.1],
[460.0,1819.1],[470.0,1821.4],[480.0,1821.4],[490.0,1818.0],[500.0,1816.9],[510.0,1819.1],[520.0,1818.6],[530.0,1816.9],[540.0,1816.9],[550.0,1815.2],[560.0,1814.1],[570.0,1814.6],[580.0,1811.2],[590.0,1814.1],[600.0,1813.5],[610.0,1812.4],[620.0,1809.0],[630.0,1813.5],[640.0,1811.8],[650.0,1815.8],[660.0,1816.3],[670.0,1815.2],[680.0,1815.2],[690.0,1815.8],[700.0,1816.3],[710.0,1818.6],[720.0,1816.9],[730.0,1814.6],[740.0,1816.3],[750.0,1814.1],[760.0,1812.9],[770.0,1812.9],[780.0,1811.2],[790.0,1812.4],[800.0,1815.2],[810.0,1812.4],[820.0,1813.5],[830.0,1811.8],[840.0,1811.2],[850.0,1812.9],[860.0,1809.0],[870.0,1811.2],[880.0,1816.9],[890.0,1815.2],[900.0,1813.5],[910.0,1812.9],
[920.0,1815.8],[930.0,1819.1],[940.0,1818.0],[950.0,1816.3],[960.0,1818.0],[970.0,1815.2],[980.0,1818.6],[990.0,1815.2],[1000.0,1822.5],[1010.0,1822.5],[1020.0,1816.9],[1030.0,1816.3],[1040.0,1817.4],[1050.0,1816.9],[1060.0,1811.8],[1070.0,1818.6],[1080.0,1818.6],[1090.0,1815.2],[1100.0,1816.9],[1110.0,1815.8],[1120.0,1815.8],[1130.0,1816.9],[1140.0,1815.2],[1150.0,1815.2],[1160.0,1818.0],[1170.0,1817.4],[1180.0,1818.0],[1190.0,1819.1],[1200.0,1817.4],[1210.0,1822.5],[1220.0,1313.9],[1230.0,1694.5],[1240.0,1891.3],[1250.0,1813.5],[1260.0,1827.0],[1270.0,1831.5],[1280.0,1827.6],[1290.0,1832.1],[1300.0,1831.5],[1310.0,1829.9],[1320.0,1834.4],[1330.0,1831.0],[1340.0,1827.6],
[1350.0,1829.3],[1360.0,1832.1],[1370.0,1834.9],[1380.0,1834.9],[1390.0,1839.4],[1400.0,1830.4],[1410.0,1832.7],[1420.0,1833.8],[1430.0,1847.9],[1440.0,1770.6],[1450.0,1668.0],[1460.0,1279.5],[1470.0,1138.5],[1480.0,1724.4],[1490.0,1571.0],[1500.0,1740.8],[1510.0,1326.8],[1520.0,1661.2],[1530.0,1859.2],[1540.0,1851.8],[1550.0,1885.7],[1560.0,1876.1],[1570.0,1860.3],[1580.0,1870.5],[1590.0,1851.8],[1600.0,1853.5],[1610.0,1863.7],[1620.0,1854.1],[1630.0,1855.8],[1640.0,1858.6],[1650.0,1857.5],[1660.0,1858.6],[1670.0,1841.7],[1680.0,1824.2],[1690.0,1817.4],[1700.0,1813.5],[1710.0,1814.6],[1720.0,1809.0],[1730.0,1806.2],[1740.0,1803.9],[1750.0,1804.5],[1760.0,1798.8],[1770.0,1793.8],[1780.0,1792.1],[1790.0,1793.2],[1800.0,1792.6],[1810.0,1787.0],[1820.0,1787.0],[1830.0,1786.4],[1840.0,1788.1],[1850.0,1784.7],
[1860.0,1781.4],[1870.0,1780.2],[1880.0,1777.4],[1890.0,1775.7],[1900.0,1775.2],[1910.0,1775.2],[1920.0,1776.8],[1930.0,1778.0],[1940.0,1775.7],[1950.0,1769.5],[1960.0,1769.5],[1970.0,1768.4],[1980.0,1771.2],[1990.0,1770.1],[2000.0,1769.5],[2010.0,1767.8],[2020.0,1764.4],[2030.0,1764.4],[2040.0,1765.0],[2050.0,1762.7],[2060.0,1765.6],[2070.0,1763.9],[2080.0,1762.2],[2090.0,1759.9],[2100.0,1759.9],[2110.0,1762.2],[2120.0,1762.7],[2130.0,1762.2],[2140.0,1762.7],[2150.0,1759.4],[2160.0,1761.1],[2170.0,1761.6],[2180.0,1763.3],[2190.0,1765.0],[2200.0,1768.4],[2210.0,1763.3],[2220.0,1762.7],[2230.0,1759.9],[2240.0,1762.7],[2250.0,1764.4],[2260.0,1765.6],[2270.0,1766.7],[2280.0,1763.3],[2290.0,1763.3],[2300.0,1763.9],[2310.0,1762.7],[2320.0,1762.7],[2330.0,1767.3],[2340.0,1767.8],[2350.0,1765.6],[2360.0,1766.1],
[2370.0,1766.7],[2380.0,1766.7],[2390.0,1765.0],[2400.0,1765.0],[2410.0,1765.0],[2420.0,1765.0],[2430.0,1765.6],[2440.0,1765.6],[2450.0,1763.3],[2460.0,1767.8],[2470.0,1767.8],[2480.0,1765.0],[2490.0,1761.6],[2500.0,1761.6],[2510.0,1762.7],[2520.0,1763.3],[2530.0,1763.3],[2540.0,1763.9],[2550.0,1765.0],[2560.0,1766.1],[2570.0,1765.6],[2580.0,1766.7],[2590.0,1765.6],[2600.0,1768.4],[2610.0,1766.7],[2620.0,1764.4],[2630.0,1764.4],[2640.0,1766.1],[2650.0,1766.1],[2660.0,1766.1],[2670.0,1763.9],[2680.0,1765.6],[2690.0,1765.6],[2700.0,1765.6],[2710.0,1765.0],[2720.0,1765.6],[2730.0,1766.1],[2740.0,1767.3],[2750.0,1766.7],[2760.0,1762.2],[2770.0,1754.9],[2780.0,1750.9],[2790.0,1750.3],[2800.0,1748.1]];
var ERPM = [[0.0,1503.],[10.0,3006.],[20.0,3005.],[30.0,1505.],[40.0,1505.],[50.0,3015.],[60.0,1503.],[70.0,3006.],[80.0,3006.],[90.0,1503.],[100.0,1503.],[110.0,1503.],[120.0,1500.],[130.0,1503.],[140.0,752.],[150.0,1503.],[160.0,1503.],[170.0,1503.],[180.0,1505.],[190.0,1503.],[200.0,1503.],[210.0,3006.],[220.0,1503.],[230.0,1503.],[240.0,1502.],[250.0,1503.],[260.0,3005.],[270.0,1500.],[280.0,1502.],[290.0,1502.],[300.0,1502.],[310.0,752.],[320.0,1502.],[330.0,1502.],[340.0,1504.],[350.0,1502.],[360.0,1502.],[370.0,1501.],[380.0,1502.],[390.0,501.],[400.0,1501.],[410.0,501.],[420.0,751.],[430.0,751.],[440.0,1503.],[450.0,750.],[460.0,1501.],[470.0,1503.],[480.0,501.],[490.0,1501.],[500.0,1501.],[510.0,501.],[520.0,1501.],[530.0,751.],[540.0,1501.],[550.0,1501.],[560.0,1501.],[570.0,1501.],[580.0,1504.],[590.0,1504.],
[600.0,1502.],[610.0,751.],[620.0,1501.],[630.0,1501.],[640.0,1501.],[650.0,1501.],[660.0,1504.],[670.0,1502.],[680.0,751.],[690.0,751.],[700.0,1501.],[710.0,751.],[720.0,1501.],[730.0,1502.],[740.0,1502.],[750.0,751.],[760.0,376.],[770.0,1502.],[780.0,1501.],[790.0,1502.],[800.0,1499.],[810.0,1499.],[820.0,750.],[830.0,1499.],[840.0,501.],[850.0,300.],[860.0,1504.],[870.0,751.],[880.0,1502.],[890.0,1502.],[900.0,1502.],[910.0,751.],[920.0,501.],[930.0,1502.],[940.0,751.],[950.0,1502.],[960.0,501.],[970.0,1504.],[980.0,751.],[990.0,1502.],[1000.0,751.],[1010.0,1502.],[1020.0,500.],[1030.0,751.],[1040.0,1502.],[1050.0,751.],[1060.0,1502.],[1070.0,1502.],[1080.0,751.],[1090.0,751.],[1100.0,1502.],[1110.0,750.],[1120.0,1502.],[1130.0,375.],[1140.0,1502.],[1150.0,300.],[1160.0,375.],[1170.0,1499.],[1180.0,300.],
[1190.0,375.],[1200.0,1502.],[1210.0,373.],[1220.0,368.],[1230.0,502.],[1240.0,495.],[1250.0,1475.],[1260.0,1468.],[1270.0,732.],[1280.0,1461.],[1290.0,1458.],[1300.0,1456.],[1310.0,1456.],[1320.0,1451.],[1330.0,1453.],[1340.0,1453.],[1350.0,726.],[1360.0,1451.],[1370.0,1451.],[1380.0,1451.],[1390.0,1451.],[1400.0,1449.],[1410.0,1449.],[1420.0,1449.],[1430.0,1944.],[1440.0,1197.],[1450.0,786.],[1460.0,0.],[1470.0,0.],[1480.0,1079.],[1490.0,1070.],[1500.0,1085.],[1510.0,923.],[1520.0,1121.],[1530.0,1293.],[1540.0,1762.],[1550.0,367.],[1560.0,352.],[1570.0,186.],[1580.0,892.],[1590.0,892.],[1600.0,892.],[1610.0,892.],[1620.0,892.],[1630.0,892.],[1640.0,892.],[1650.0,892.],[1660.0,892.],[1670.0,892.],[1680.0,0.],[1690.0,0.],[1700.0,0.],[1710.0,0.],[1720.0,0.],[1730.0,0.],[1740.0,0.],[1750.0,0.],[1760.0,0.],
[1770.0,0.],[1780.0,0.],[1790.0,0.],[1800.0,0.],[1810.0,0.],[1820.0,0.],[1830.0,0.],[1840.0,0.],[1850.0,0.],[1860.0,0.],[1870.0,0.],[1880.0,0.],[1890.0,0.],[1900.0,0.],[1910.0,0.],[1920.0,0.],[1930.0,0.],[1940.0,0.],[1950.0,0.],[1960.0,0.],[1970.0,0.],[1980.0,0.],[1990.0,0.],[2000.0,0.],[2010.0,0.],[2020.0,0.],[2030.0,0.],[2040.0,0.],[2050.0,0.],[2060.0,0.],[2070.0,0.],[2080.0,0.],[2090.0,0.],[2100.0,0.],[2110.0,0.],[2120.0,0.],[2130.0,0.],[2140.0,0.],[2150.0,0.],[2160.0,0.],[2170.0,0.],[2180.0,0.],[2190.0,0.],[2200.0,0.],[2210.0,0.],[2220.0,0.],[2230.0,0.],[2240.0,0.],[2250.0,0.],[2260.0,0.],[2270.0,0.],[2280.0,0.],[2290.0,0.],[2300.0,0.],[2310.0,0.],[2320.0,0.],[2330.0,0.],[2340.0,0.],[2350.0,0.],[2360.0,0.],[2370.0,0.],[2380.0,0.],[2390.0,0.],[2400.0,0.],[2410.0,0.],[2420.0,0.],[2430.0,0.],[2440.0,0.],
[2450.0,0.],[2460.0,0.],[2470.0,0.],[2480.0,0.],[2490.0,0.],[2500.0,0.],[2510.0,0.],[2520.0,0.],[2530.0,0.],[2540.0,0.],[2550.0,0.],[2560.0,0.],[2570.0,0.],[2580.0,0.],[2590.0,0.],[2600.0,0.],[2610.0,0.],[2620.0,0.],[2630.0,0.],[2640.0,0.],[2650.0,0.],[2660.0,0.],[2670.0,0.],[2680.0,0.],[2690.0,0.],[2700.0,0.],[2710.0,0.],[2720.0,0.],[2730.0,0.],[2740.0,0.],[2750.0,0.],[2760.0,0.],[2770.0,0.],[2780.0,0.],[2790.0,0.],[2800.0,0.]];		  

		  line0 = [-4, -7, 9, 16, 3, 5, -2, 1, -6, -3, -2, 8];
		  line1 = [[2, 5], [5, 7], [5.2, 11]];
      
      plot1 = $.jqplot('chart1', [InPr, OutPr, ERPM], {
        seriesDefaults:{neighborThreshold:0, showMarker: false},
        series:[
          {label:'P In'},
          {label:'P Out', yaxis:'y2axis'},
          {label:'RPM', yaxis:'y3axis'},
        ],
        cursor:{
          showVerticalLine:true,
          showTooltip: true,
          followMouse: true,
          showTooltipDataPosition:true,
          zoom:true,
          intersectionThreshold:6,
          tooltipFormatString: '%s x:%s, y:%s'
        },
        legend:{
          location:'nw',
          xoffset: 310,
          yoffset: 100
        },
        axesDefaults:{tickOptions:{formatString:"%i"}, autoscale:false, useSeriesColor:true}
          
      }); 
      
    });
</script>
		
</head>
<body>
<?php include "nav.inc"; ?>
<div class="jqPlot" id="chart1" style="height:320px; width:600px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/donutTest.html.



















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Donut Chart Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.donutRenderer.js"></script>
  <!-- END: load jqplot -->

  <script type="text/javascript" src="donutTest.js"></script>
  <style type="text/css">
    #code {
        font: 10pt "Andale Mono", Monaco, "Courier New", sans-serif ;
        white-space: pre;
    }
  </style>
  
    <script type="text/javascript">    
    $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
        $('#code').load('donutTest.js');
        $('#code').dialog({
			height: 'auto',
			width: 600,
			modal: true,
			autoOpen: false,
			resizable: true,
			draggable: true,
			show: 'fold'
		});

    });
    </script> 
    
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="code"></div>
    <p>To create donut plots, you have to include the "jqplot.donutRenderer.js" file in your source.  You can view the javascript that generated these plots by clicking the "View Code" button below.</p>
    <button id="seecode" onclick="$('#code').dialog('open');">View Code</button>

    <p>Below is a default donut plot.  Slices will highlight on mouseover.  Events are triggered when you mouseover a slice and also when you click on a slice.  Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values.<p>
    
    <div><span>You Clicked: </span><span id="info1">Nothing yet</span></div>
        
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>

    <p>Below is a customized donut plot with 2 series.  Renderer options for sliceMargin, innerDiameter, and startAngle have been specified.  Here We capture the 'jqplotDataHighlight' event and display the currently highlighted series index, point index and data values.<p>
    
    <p>The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a slice even if highlighting is turned off.  This event will fire continuously as the user mouses over the slice.  'jqplotDataHighlight' fires only once when the user first passes over the slice.  Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a slice (if highlighting is enabled).<p>

    <div><span>Moused Over: </span><span id="info2">Nothing</span></div>
    
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <p>The next example has the plot's 'captureRightClick' option set to true.  This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a slice.  Note, click highlighting is the same for both right and left clicks, although separate events are triggered.<p>

    <div><span>You Right Clicked: </span><span id="info3">Nothing yet</span></div>
    
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <p>The fourth example shows a plot with no sliceMargin and with the shadow turned on.</p>
    
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <p style="margin-top:40px;">The last example shows a donut with all of the default colors.  Mouse over to see the default highlight colors.  Series colors can be specified with the "seriesColors" option on the plot or on the series.  The highlight colors are specified with the 'highlightColors' option on the series renderer.</p>
    
        <div id="chart5" style="margin-top:20px; margin-left:20px; width:400px; height:400px;"></div>
        
<p>A simple line chart is added to test for imcompatabilities.</p>
        <div id="chart6" style="margin-top:20px; margin-left:20px; width:100px; height:100px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/donutTest.js.

































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
$(document).ready(function(){

    $.jqplot.config.enablePlugins = true;

    s1 = [['a',2], ['b',8], ['c',14], ['d',20]];
    s2 = [['a', 4], ['b', 12], ['c', 6], ['d', 3]];
    s3 = [['a', 2], ['b', 1], ['c', 3], ['d', 3]];
    s4 = [['a', 4], ['b', 3], ['c', 2], ['d', 1]];
    
    s5 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
    
    plot1 = $.jqplot('chart1', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.DonutRenderer
        },
        legend: {show:true}
    });
    
    plot2 = $.jqplot('chart2', [s1, s2], {
        seriesDefaults: {
            renderer:$.jqplot.DonutRenderer,
            rendererOptions:{
                sliceMargin: 2,
                innerDiameter: 110,
                startAngle: -90
            }
        }
    });

    plot3 = $.jqplot('chart3', [s1, s2, s3], {
        captureRightClick: true,
        seriesDefaults:{
            renderer:$.jqplot.DonutRenderer,
            shadow: false,
            rendererOptions:{
                innerDiameter: 110,
                startAngle: -90,
                sliceMargin: 2,
                highlightMouseDown: true
            }
        },
        legend: {
            show: true,
            location: 'e',
            placement: 'outside'
        }      
    });

    plot4 = $.jqplot('chart4', [s1, s2, s3, s4], {
        seriesDefaults:{
            renderer:$.jqplot.DonutRenderer
        },
        legend: {
            show: true,
            location: 's',
            placement: 'outside',
            rendererOptions:{
                numberRows: 1
            }
        }
    });

    plot5 = $.jqplot('chart5', [s5], {
        seriesDefaults:{
            renderer:$.jqplot.DonutRenderer
        }
    });
    
    plot6 = $.jqplot('chart6', [[1,2,3,4]]);
    
    $('#chart1').bind('jqplotDataClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info1').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart2').bind('jqplotDataHighlight', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart2').bind('jqplotDataUnhighlight', 
        function (ev) {
            $('#info2').html('Nothing');
        }
    ); 
    
    $('#chart3').bind('jqplotDataRightClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );  
    
    $(document).unload(function() {$('*').unbind(); });
});

Added Site/Site_W/jpqplot/examples/examples.css.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
body {
    margin:20px;
    font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
}

div.nav {
    margin-bottom:10px;
}

pre.code-block{
    background: #D8F4DC;
    border: 1px solid rgb(200, 200, 200);
    padding-top: 1em;
    padding-left: 3em;
    padding-bottom: 1em;
    margin-top: 1em;
    margin-bottom: 3em;
    
}
    
pre.code {
    background: #D8F4DC;
    border: 1px solid rgb(200, 200, 200);
    padding-top: 1em;
    padding-left: 3em;
    padding-bottom: 1em;
    margin-top: 1em;
    margin-bottom: 4em;
    
}
    
p {
    margin: 2em 0;
}

Added Site/Site_W/jpqplot/examples/fillToZero.html.





























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <!-- // <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script> -->
	
	<style type="text/css">
	  div.jqplot {
	    margin: 40px;
	  }
	</style>
	
	<script type="text/javascript" language="javascript">
		$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
		  line0a = [[-8.69, -5],[465.234, 48]];
		  line0 = [-4, -7, 9, 16, 3, 5, -2, 1, -6, -3, -2, 8];
		  line1 = [4, -7, 9, 16];
      line2 = [3, -3, 6.25, 3.125];
      line3 = [8, -5, 6, 22];
      line4 = [12, 5, 8, 15];		  
      line5 = [4, 3, 9, 16];
      line6 = [3, 7, 6.25, 3.125];
      line7 = [8, 5, 6, 22];
      
      plot1 = $.jqplot('chart1', [line0], {
        legend: {show: false, location: 'nw'},
        // stackSeries:true,
        seriesDefaults: {
          fill:true, 
          fillToZero: true,
          showMarker: false},
        series: [
          {label: 'Traps Division'}
        ],
        axes: {
            xaxis: {
                renderer:$.jqplot.CategoryAxisRenderer,
                ticks:[1900,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010], 
                tickOptions:{showGridline:false, formatString:'%d'}
            }, 
            // yaxis: {min: -5, max: 25, numberTicks:7}
            yaxis:{autoscale:true}
        }
      });
      
      plot1b = $.jqplot('chart1b', [line0a], {
        legend: {show: false, location: 'nw'},
        seriesDefaults: {
          fill:true, 
          fillToZero: true,
          showMarker: false},
        series: [
          {label: 'Traps Division'}
        ],
        axes: {
          xaxis:{autoscale:true, pad:1.4},
            yaxis:{pad:1.1, autoscale:true, tickOptions:{formatString:'%.2f'}}
        }
      });
      
      plot2 = $.jqplot('chart2', [line1, line2], {
        legend: {show: false, location: 'nw'},
        seriesDefaults: {fill:true, fillToZero:true, showMarker: false, renderer:$.jqplot.BarRenderer},
        series: [
          {label: 'Traps Division'}, 
          {label: 'Decoy Division'}
        ],
        axes: {
            xaxis: {
                renderer:$.jqplot.CategoryAxisRenderer,
                ticks:[2006,2007,2008,2009], 
                tickOptions:{formatString:'%d'}
            }, 
            // yaxis: {min: -5, max: 25, numberTicks:7}
            yaxis:{autoscale:true}
        }
      });
      
      plot3 = $.jqplot('chart3', [line5, line6, line7], {
        stackSeries: true,
        legend: {show: true, location: 'nw'},
        seriesDefaults: {fill:true, 
          // fillToZero:true, 
          showMarker: false, renderer:$.jqplot.BarRenderer, rendererOptions:{barMargin:30}},
        series: [
          {label: 'Traps Division'}, 
          {label: 'Decoy Division'},
          {label: 'Bonuses', renderer:$.jqplot.LineRenderer, disableStack:true, fill:false}
        ],
        axes: {
            xaxis: {
                renderer:$.jqplot.CategoryAxisRenderer,
                ticks:[2006,2007,2008,2009], 
                tickOptions:{formatString:'%d'}
            }, 
            // yaxis: {min: -5, max: 25, numberTicks:7}
            yaxis:{autoscale:true}
        }
      });  
    });
</script>
		
</head>
<body>
<?php include "nav.inc"; ?>
<div class="jqPlot" id="chart1" style="height:320px; width:420px;"></div>
<div class="jqPlot" id="chart1b" style="height:320px; width:420px;"></div>
<div class="jqPlot" id="chart2" style="height:320px; width:420px;"></div>
<div class="jqPlot" id="chart3" style="height:320px; width:420px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/filledLine.html.





























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 1.1em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    var l1 = [2, 3, 1, 4, 3];
    var l2 = [1, 4, 3, 2, 5];


    plot1 = $.jqplot('chart', [l1, l2], {
      title:'Stacked Filled Line Plot with Transparency (transparency not supported in IE6)',
        stackSeries: true,
        grid:{background:'#fefbf3', borderWidth:2.5},
        seriesDefaults: {fill: true, showMarker: false, shadow: false},
        axes:{xaxis:{pad:1.0, numberTicks:5}, yaxis:{min:0, max:12, numberTicks:5}},
        series:[{color:'rgba(68, 124, 147, 0.7)'}, {color:'rgba(150, 35, 90, 0.7)'}]
    });
    


    plot2 = $.jqplot('chart2', [l2], {
      title:'Default Filled Line Plot',
        axes:{xaxis:{pad:1.0}},
        seriesDefaults: {fill: true}
    });

    plot2 = $.jqplot('chart3', [l2], {
      title:'Filled Line Plot with Stroked Line and Custom Fill Transparency (transparency not supported in IE6)',
        axes:{xaxis:{pad:1.0}},
        seriesDefaults: {fill: true, fillAndStroke: true, fillAlpha:0.5, shadow:false}
    });

    plot3 = $.jqplot('chart4', [l2], {
      title:'Filled Line Plot with Stroked Line and Custom Fill Color',
        axes:{xaxis:{pad:1.0}},
        seriesDefaults: {showMarker:false, fill: true, fillAndStroke: true, fillColor:"rgb(220,202,110)", shadow:false}
    });


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/filledLineCategoryAxis.html.

































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
    
line1 = [4, 2, 9, 16];
line2 = [3, 7, 6, 3];
line3 = [5, 1, 5, 4];

plot3 = $.jqplot('chart', [line1, line2, line3], {
    stackSeries: true,
    legend: {
        show: true,
        location: 'nw'
    },
    title: 'Acme Company Unit Sales',
    seriesDefaults: {
        fill: true,
        showMarker: false
    },
    series: [{
        label: 'Traps Division'
    },
    {
        label: 'Decoy Division',
        fill: true
    },
    {
        label: 'Harmony Division'
    }],
    axes: {
        xaxis: {
                        renderer: $.jqplot.CategoryAxisRenderer,
            ticks: ['a', 'b', 'c', 'd'],
            tickOptions: {
                formatString: '%s'
            }
        },
        yaxis: {
            min: 0,
            max: 30
        }
    }

});

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/funnelTest.html.





































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.funnelRenderer.js"></script>
  <!-- END: load jqplot -->

  <script type="text/javascript" src="funnelTest.js"></script>
  <style type="text/css">
    #code {
        font: 10pt "Andale Mono", Monaco, "Courier New", sans-serif ;
        white-space: pre;
    }
  </style>
  
    <script type="text/javascript">    
    $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
        $('#code').load('funnelTest.js');
        $('#code').dialog({
			height: 'auto',
			width: 600,
			modal: true,
			autoOpen: false,
			resizable: true,
			draggable: true,
			show: 'fold'
		});

    });
    </script> 
    
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="code"></div>
    <p>To create donut plots, you have to include the "jqplot.funnelRenderer.js" file in your source.  You can view the javascript that generated these plots by clicking the "View Code" button below.</p>
    <button id="seecode" onclick="$('#code').dialog('open');">View Code</button>

    <p>Below is a default funnel plot.  Sections will highlight on mouseover.  Events are triggered when you mouseover a section and also when you click on a section.  Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values.<p>
    
    <div><span>You Clicked: </span><span id="info1">Nothing yet</span></div>
               
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
 
    <p>Below is a customized funnel plot.  Renderer options for sectionMargin and widthRatio have been set.  Here We capture the 'jqplotDataHighlight' event and display the currently highlighted series index, point index and data values.<p>
    
    <p>The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a slice even if highlighting is turned off.  This event will fire continuously as the user mouses over the slice.  'jqplotDataHighlight' fires only once when the user first passes over the slice.  Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a slice (if highlighting is enabled).<p>

    <div><span>Moused Over: </span><span id="info2">Nothing</span></div>

    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <p>The next example has the plot's 'captureRightClick' option set to true.  This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a slice.  Note, click highlighting is the same for both right and left clicks, although separate events are triggered.  Here the series 'highlightMouseDown' option is set to true to highlight sections when a mouse down event occurs on them.  This automatically disables highlighting on mouseover.<p>

    <div><span>You Right Clicked: </span><span id="info3">Nothing yet</span></div>
    
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
<p>A small chart to test for plugin compatabiity.</p>
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:200px; height:100px;"></div>
 
  </body>
</html>

Added Site/Site_W/jpqplot/examples/funnelTest.js.





















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
$(document).ready(function(){

    s1 = [['Sony',7], ['Samsumg',13], ['LG',14], ['Vizio',5]];
    s2 = [['a', 4], ['b', 12], ['c', 6], ['d', 3]];
    s3 = [['a', 2], ['b', 1], ['c', 3], ['d', 3]];
    s4 = [['a', 4], ['b', 3], ['c', 2], ['d', 1]];
    
    s5 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
    
    plot1 = $.jqplot('chart1', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.FunnelRenderer
        }
    }); 
    
    plot2 = $.jqplot('chart2', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.FunnelRenderer,
            rendererOptions: {
                widthRatio: 0.5,
                sectionMargin: 0
            }
        },
        legend: {
            show:true,
            location: 'e'
        }
    });  
    
    plot3 = $.jqplot('chart3', [s1], {
        captureRightClick: true,
        seriesDefaults:{
            renderer:$.jqplot.FunnelRenderer,
            rendererOptions: {
                widthRatio: 0.2,
                sectionMargin: 0,
                highlightMouseDown: true
            }
        },
        legend: {
            show:true,
            location: 'e',
            placement: 'outside'
        }
    });
    
    plot4 = $.jqplot('chart4', [[1,2,3,4]]);
    
    $('#chart1').bind('jqplotDataClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info1').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart2').bind('jqplotDataHighlight', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart2').bind('jqplotDataUnhighlight', 
        function (ev) {
            $('#info2').html('Nothing');
        }
    ); 
    
    $('#chart3').bind('jqplotDataRightClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    ); 
    
    $(document).unload(function() {$('*').unbind(); });
});

Added Site/Site_W/jpqplot/examples/gridCustomization.html.

















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 1.1em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    var l1 = [[1,2], [4,5], [8,9], [15,16], [18,40]];
    var l2 = [[2,1], [5,4], [12,7], [16,12], [19,29]];


    plot1 = $.jqplot('chart', [l1, l2], {
      title:'Plot with Grid Customization',
      // axes:{xaxis:{tickInterval:2, min:0, max:19}},
      // axes:{xaxis:{tickInterval:2}},
      axes:{xaxis:{tickInterval:2, min:0},
        yaxis:{renderer:$.jqplot.LogAxisRenderer}},
      grid:{background:'#dfdfdf', gridLineColor:'#accf9b', borderWidth:2.5}
    });


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/hiddenPlot.html.

















































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Plots in Hidden Containers</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <style type="text/css">
    .ui-tabs-nav, .ui-accordion-header {
      font-size: 12px;
    }
    
    .ui-tabs-panel, .ui-accordion-content {
      font-size: 14px;
    }
    
    .jqplot-target {
      font-size: 18px;
    }
    
    body > table {
      width: 700px;
      margin-left:auto;
      margin-right: auto;
    }
    body > table, body > table > tr, body > table > td {
      width: 700px;
      border none;
    }
    
    td>p {
      font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;
      font-size: 14px;
    }
  </style>
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.ohlcRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  <!-- END: load jqplot -->
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
    
    $.jqplot.config.enablePlugins = false;

    l1 = [18, 36, 14, 11];
    l2 = [[2, 14], [7, 2], [8,5]];
    l3 = [4, 7, 9, 2, 11, 5, 9, 13, 8, 7];
    l4 = [['peech',3], ['cabbage', 2], ['bean', 4], ['orange', 5]];

    // plot will size to the "data-width" and "data-height" attributes
    var options = {
      title: "I was hidden",
      lengend:{show:true},
      series:[{},{yaxis:'y2axis'}, {yaxis:'y3axis'}],
      cursor:{show:true, zoom:true},
      axesDefaults:{useSeriesColor:true}
    }
    
    
		$("#tabs").tabs();
		$("#accordion").accordion();
		
    plot1 = $.jqplot('chart1', [l1, l2, l3],  options);
    
    plot2 = $.jqplot('chart2', [l4], {
      height: 200,
      width: 300,
      series:[{renderer:$.jqplot.PieRenderer}],
      legend:{show:true}
    });
    
    var catOHLC = [[1, 138.7, 139.68, 135.18, 135.4],
    [2, 143.46, 144.66, 139.79, 140.02],
    [3, 140.67, 143.56, 132.88, 142.44],
    [4, 136.01, 139.5, 134.53, 139.48],
    [5, 143.82, 144.56, 136.04, 136.97],
    [6, 136.47, 146.4, 136, 144.67],
    [7, 124.76, 135.9, 124.55, 135.81],
    [8, 123.73, 129.31, 121.57, 122.5]];
    
    var ticks = ['Tue', 'Wed', 'Thu', 'Fri', 'Mon', 'Tue', 'Wed', 'Thr'];
        
    plot3 = $.jqplot('chart3',[catOHLC],{
      grid:{ drawGridlines:true},
      title: 'A CandleStick Chart',
      axes: {
          xaxis: {
              renderer:$.jqplot.CategoryAxisRenderer,
              ticks:ticks
          },
          yaxis: {
              tickOptions:{formatString:'$%.2f'}
          }
      },
      series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}]
    });
    
    $('#tabs').bind('tabsshow', function(event, ui) {
      if (ui.index == 1 && plot1._drawCount == 0) {
        plot1.replot();
      }
      else if (ui.index == 2 && plot2._drawCount == 0) {
        plot2.replot();
      }
    });
    
    $('#accordion').bind('accordionchange', function(event, ui) {
      var index = $(this).find("h3").index ( ui.newHeader[0] );
      if (index == 1) {
        plot3.replot();
      }
    });

  });
  
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <table><tr><td>
      <p>This page demonstrates using plots within containers that are initially hidden.  Examples are shown for jQuery UI tabs and Accordions</p>
  <div id="tabs">
  	<ul>
  		<li><a href="#tabs-1">Tab 1</a></li>
  		<li><a href="#tabs-2">Tab 2</a></li>
  		<li><a href="#tabs-3">Tab 3</a></li>
  	</ul>
  	<div id="tabs-1">
  	  <p>Tab 2 and tab 3 contain plots which are initially hidden.  Using a combination of alternate sizing specification and the plots "replot" method the plots are properly displayed when their containers are shown.</p>
  	  <p>The alternate sizing specifications for setting plot height and width are needed because a hidden element (or child of a hidden element) has no size.  The first example in tab 2 uses custom "data-height" and "data-width" attributes on the plot target element to specify height.  The second example uses "width" and "height" properties specified on the options object passed into the $.jqplot() function.</p>
    
    <p>The default size is 300px wide by 400px high. The default setting can be overriden by specifying different values to the $.jqplot.config.defaultHeight and $.jqplot.config.defaultWidth properties.  Height and width values are taken in this order of prececence:</p>
      
      <ol>
        <li>The css properties if available and plot is not hidden with display:none.</li>
        <li>Options object passed into the $.jqplot() function.</li>
        <li>Custom data-height and data-width attributes on the plot target.</li>
        <li>The config defaults.</li>
      </ol>
  	  
  	  <p>Here is how the replot method can be used to bind to the "tabsshow" event of the UI tabs:</p>
  	    
<pre>
    $('#tabs').bind('tabsshow', function(event, ui) {
      if (ui.index == 1) {
        plot1.replot();
      }
      else if (ui.index == 2) {
        plot2.replot();
      }
    });
</pre>

<p>The ui.index property is the index of the tab that was shown. </p>
  	</div>
  	
  	<div id="tabs-2">
  		<p>This plot was in an initially hidden container.  It's hieght and width are set by the "data-height" and "data-width" properties of the plot container.</p>
        <div id="chart1" data-height="260px" data-width="480px" style="margin-top:20px; margin-left:20px;"></div>
  	</div>
  	
  	<div id="tabs-3">
  		<p>This plot is in an initially hidden container.  It's height and width are set by the 'height' and 'width' properties of the options object passed into the plot constructor.</p>
        <div id="chart2" style="margin-top:20px; margin-left:20px;"></div>
  	</div>
  	
  </div> 
  
<div id="accordion" style="margin-top:50px">
  
	<h3><a href="#">Section 1</a></h3>
	<div>
		<p>Secion 2 contains a plot.  Sizing plots in hidden accordion sections is very similar to sizing in a tab widget.  Because of the default animation on accordions, however, the plot will not draw itself until the entire accordion panel is shown.</p>
		
		<p>Binidng to the accordion "accordionchange" event is also similar as with tabs:</p>
		
		<pre>
    $('#accordion').bind('accordionchange', function(event, ui) {
      var index = $(this).find("h3").index ( ui.newHeader[0] );
      if (index == 1) {
        plot3.replot();
      }
    });
    </pre>
	</div>
	
	<h3><a href="#">Section 2</a></h3>
	<div>
		<p>
		This plot also has it's height and width set with the data-height and data-width attributes.  Note, if you want the accordian widget to properly size itself </em>before</em> the plot is shown, you must also specify a css height and width on the plot target.
		</p>
		<div id="chart3" data-height="200" data-width="400" style="width:400px; height: 200px; margin-top: 20px; margin-left: 20px"></div>
	</div>
	
</div>
</td></tr></table>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/highlighter.html.































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Highlighter Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <!-- END: load jqplot -->


<script language="javascript" type="text/javascript">

$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
   s1 = [['23-May-08',1],['24-May-08',4],['25-May-08',2],['26-May-08',
6]];

    s2 = [3,5,7,4,8];
    s3 = [9,11,15,8,15];
    s4 = [8,7,12,18,4];
    s5 = [13,17,21,19,11];
    l1 = [];
    l2 = [];
    l3 = [];
    
    for (var i=0; i<100; i++) {
        l1.push(Math.random()*7);
        l2.push(Math.random()*13);
        l3.push(Math.random()*2);
    }


   plot1 = $.jqplot('chart1',[s1],{
       title: 'Highlighting',
       axes: {
           xaxis: {
               renderer: $.jqplot.DateAxisRenderer,
               tickOptions: {
                   formatString: '%b %#d, %Y'
               },
               numberTicks: 4
           },
           yaxis: {
               tickOptions: {
                   formatString: '$%.2f'
               }
           }
       },
       highlighter: {
           sizeAdjust: 10,
           tooltipLocation: 'n',
           useAxesFormatters: false,
           formatString: 'Hello %s dayglow %d'
       },
       cursor: {
           show: true,
           zoom: true
       }
   });
   
   plot2 = $.jqplot('chart2', [s2, s3, s4, s5], { highlighter: { bringSeriesToFront: true, tooltipLocation: 'e', tooltipOffset: 0, formatString: '<div class="jqplot-highlighter"><span>#seriesLabel#</span>%s: <strong>%s</strong></div>' } });
   plot3 = $.jqplot('chart3', [s2, s3], { highlighter: { bringSeriesToFront: true, tooltipLocation: 'e', tooltipOffset: 0, formatString: '<div class="jqplot-highlighter"><span>#seriesLabel#</span>%s: <strong>%s</strong></div>' } });
   plot4 = $.jqplot('chart4', [s2, s3, s4], { highlighter: { bringSeriesToFront: true, tooltipLocation: 'e', tooltipOffset: 0, formatString: '<div class="jqplot-highlighter"><span>#seriesLabel#</span>%s: <strong>%s</strong></div>' } });
   plot5 = $.jqplot('chart5', [l1, l2, l3], { seriesDefaults:{neighborThreshold:0, showMarker:false}, highlighter: { bringSeriesToFront: true, tooltipLocation: 'e', tooltipOffset: 0, formatString: '<div class="jqplot-highlighter"><span>#seriesLabel#</span>%s: <strong>%s</strong></div>' } });
   
});

</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" class="plot" style="width:500px;height:300px;"></div>
<div id="chart2" class="plot" style="width:500px;height:300px;"></div>
<div id="chart3" class="plot" style="width:500px;height:300px;"></div>
<div id="chart4" class="plot" style="width:500px;height:300px;"></div>
<div id="chart5" class="plot" style="width:500px;height:300px;"></div>



  </body>
</html>

Added Site/Site_W/jpqplot/examples/highlighter2.html.































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Highlighter Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <!-- END: load jqplot -->


<script language="javascript" type="text/javascript">

$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

// function that is run when the mouse moves inside of the plot.
    function myMove (ev, gridpos, datapos, neighbor, plot) {
        if (neighbor == null) {
            $('#myToolTip').fadeOut().empty();
            isShowing = false;
        }
        if (neighbor != null) {
            if ($('#myToolTip').is(':hidden')) {
                var d = new Date();
                var myText = d.getSeconds();   // could be any function pulling data from anywhere.  
                $('#myToolTip').html(myText).css({left:gridpos.x, top:gridpos.y}).fadeIn();
            }
        }
    }
    
// Here is how you attach the custom callback to the mouse move event on the plot.
$.jqplot.eventListenerHooks.push(['jqplotMouseMove', myMove]);

   s1 = [3, 7, 4, 9, 11, 12];

   plot1 = $.jqplot('chart1',[s1],{
       title: 'Highlighting'
   });
   
   $('#chart1').append('<div id="myToolTip" style="position:absolute;display:none;background:#E5DACA;padding:4px;"></div>');
   
});

</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>This page demonstrates creating your own custom highlighter by attaching a callback to the 'jqplotMouseMove' event.</p>
<div id="chart1" class="plot" style="width:500px;height:300px;"></div>

  </body>
</html>

Added Site/Site_W/jpqplot/examples/horizontalLine.html.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Horizontal Line (const. y values)</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

line1 = [[1244337000000, 10], [1244337300000, 10], [1244337600000, 10], [1244337900000, 10], [1244338200000, 10]];
plot2 = $.jqplot('chart', [line1], {
    title: 'A Horizontal Line',
    axes: {
        xaxis: {
            renderer: $.jqplot.DateAxisRenderer,
            numberTicks: 5
        }
    },
    series:[{},{lineWidth:1, color:'#999999', showMarker:false}]
});


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/intticks.html.





































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Enhanced Tick Algorithm</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <!-- END: load jqplot -->
<style type="text/css">
.jqplot-target {
    margin-bottom: 30px;
}
</style>
<script language="javascript" type="text/javascript">
$(document).ready(function(){

   // s1 = [[0, 1], [1,3]];
   // 
   // plot1 = $.jqplot('chart1',[s1],{
   //     seriesDefaults: {renderer: $.jqplot.BarRenderer},
   //     axes: {
   //         xaxis: {
   //             renderer: $.jqplot.CategoryAxisRenderer
   //         },
   //         yaxis: {
   //             // autoscale: true,
   //             tickOptions: {
   //                 formatString: '%d'
   //             }
   //         }
   //     },
   //     legend: {show: true}
   // });
   // 
   // s1 = [[0, 1]];
   // 
   // plot2 = $.jqplot('chart2',[s1],{
   //     seriesDefaults: {renderer: $.jqplot.BarRenderer},
   //     axes: {
   //         xaxis: {
   //             renderer: $.jqplot.CategoryAxisRenderer
   //         },
   //         yaxis: {
   //             // autoscale: true,
   //             tickOptions: {
   //                 formatString: '%d'
   //             }
   //         }
   //     },
   //     legend: {show: true}
   // });
   // 
   // s1 = [3,1.5,2,0.5,2,1,2.5];
   // 
   // plot3 = $.jqplot('chart3',[s1],{
   //     axes: {
   //         yaxis: {
   //             tickOptions: {
   //                 formatString: '%d'
   //             }
   //         }
   //     },
   //     title: 'Default Tick Renderer',
   //     legend: {show: true}
   // });
   // 
   // s1 = [3,1.5,2,0.5,2,1,2.5];
   // 
   // plot4 = $.jqplot('chart4',[s1],{
   //     axes: {
   //         yaxis: {
   //             tickRenderer: $.jqplot.CanvasAxisTickRenderer,
   //             tickOptions: {
   //                 formatString: '%d',
   //                 angle: -30
   //             }
   //         }
   //     },
   //     title: 'Canvas Tick Renderer',
   //     legend: {show: true}
   // });
   // 
   // s1 = [.4,.3,.5,.1,.6,.2];
   // 
   // plot5 = $.jqplot('chart5',[s1],{
   //     axes: {
   //         yaxis: {
   //             tickOptions: {
   //                 formatString: '%d'
   //             }
   //         }
   //     },
   //     legend: {show: true}
   // });
   // 
   // s1 = [[0, 1]];
   // 
   // plot6 = $.jqplot('chart6',[s1],{
   //     seriesDefaults: {renderer: $.jqplot.BarRenderer},
   //     axes: {
   //         xaxis: {
   //             renderer: $.jqplot.CategoryAxisRenderer
   //         },
   //         yaxis: {
   //             // autoscale: true,
   //             tickOptions: {
   //                 formatString: '%d'
   //             },
   //             tickInterval: 1,
   //             min: 0
   //         }
   //     },
   //     legend: {show: true}
   // });
   // 
   s1 = [3,1.5,2,0.5,2,1,2.5];

   plot7 = $.jqplot('chart7',[s1],{
       axes: {
           yaxis: {
               min: 0,
               tickOptions: {
                   formatString: '%d',
                   numberTicks: 6
               }
           }
       },
   });
   
   s1 = [3,1.5,2,0.5,2,1,2.5];

   plot8 = $.jqplot('chart8',[s1],{
       axes: {
           yaxis: {
               min: 0,
               max: 6,
               tickOptions: {
                   formatString: '%d'
               }
           }
       }
   });
   
 });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>Tests of enhancements to axis tick generation algorithm.  Axis now checks to see if the tick interval (delta between ticks) is less than the precision of the tick format string.  If it is, it will try to increase the tick interval, number of ticks or change the axis minimum or maximum so that it is at least as great as the tick label precision.</p>

<p>Note, if the user has specified the axis tickInterval, numberTicks, min or max options, the algorithm may not be able to produce the desired ticks.</p>

<p>This helps in situations where the user wants to display ticks formatted as integer values on a plot with a very small range.  For example, a plot with a y axis range from 0 to 2 and 6 ticks will have a tickInterval of 0.4 and ticks like [0, 0.4, 0.8, 1.2, 1.6, 2].  When formatted as integers, the plot displays ticks like [0, 0, 1, 1, 2, 2].  The new algorithm will try to adjust the number of ticks or the axis minimum or maximum to generate ticks like [0, 1, 2].</p>

<div id="chart1" class="plot" style="width:400px;height:300px;"></div>
<div id="chart2" class="plot" style="width:400px;height:300px;"></div>
<div id="chart3" class="plot" style="width:400px;height:300px;"></div>
<div id="chart4" class="plot" style="width:400px;height:300px;"></div>
<div id="chart5" class="plot" style="width:400px;height:300px;"></div>
<div id="chart6" class="plot" style="width:400px;height:300px;"></div>
<div id="chart7" class="plot" style="width:400px;height:300px;"></div>
<div id="chart8" class="plot" style="width:400px;height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/

/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }


/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }


/* Icons
----------------------------------*/

/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }


/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }


/*
* jQuery UI CSS Framework
* Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
*/


/* Component containers
----------------------------------*/
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
.ui-widget-content a { color: #333333; }
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }

/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
.ui-widget :active { outline: none; }

/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }

/* Icons
----------------------------------*/

/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }

/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }


/* Misc visuals
----------------------------------*/

/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }

/* Overlays */
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Accordion
----------------------------------*/
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
/* IE7-/Win - Fix extra vertical space in lists */
.ui-accordion a { zoom: 1; }
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete
----------------------------------*/
.ui-autocomplete { position: absolute; cursor: default; }	
.ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; }

/* workarounds */
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */

/* Menu
----------------------------------*/
.ui-menu {
	list-style:none;
	padding: 2px;
	margin: 0;
	display:block;
}
.ui-menu .ui-menu {
	margin-top: -3px;
}
.ui-menu .ui-menu-item {
	margin:0;
	padding: 0;
	zoom: 1;
	float: left;
	clear: left;
	width: 100%;
}
.ui-menu .ui-menu-item a {
	text-decoration:none;
	display:block;
	padding:.2em .4em;
	line-height:1.5;
	zoom:1;
}
.ui-menu .ui-menu-item a.ui-state-hover,
.ui-menu .ui-menu-item a.ui-state-active {
	font-weight: normal;
	margin: -1px;
}
/* Button
----------------------------------*/

.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
.ui-button-icons-only { width: 3.4em; } 
button.ui-button-icons-only { width: 3.7em; } 

/*button text element */
.ui-button .ui-button-text { display: block; line-height: 1.4;  }
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
.ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
/* no icon support for input elements, provide padding by default */
input.ui-button { padding: .4em 1em; }

/*button icon element(s) */
.ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
.ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }

/*button sets*/
.ui-buttonset { margin-right: 7px; }
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }

/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */





/* Dialog
----------------------------------*/
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative;  }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } 
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Slider
----------------------------------*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }

.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }

.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
----------------------------------*/
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
/* Datepicker
----------------------------------*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month, 
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }

/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }

/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }

/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
    display: none; /*sorry for IE5*/
    display/**/: block; /*sorry for IE5*/
    position: absolute; /*must have*/
    z-index: -1; /*must have*/
    filter: mask(); /*must have*/
    top: -4px; /*must have*/
    left: -4px; /*must have*/
    width: 200px; /*must have*/
    height: 200px; /*must have*/
}/* Progressbar
----------------------------------*/
.ui-progressbar { height:2em; text-align: left; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }

Added Site/Site_W/jpqplot/examples/jquery-ui/js/jquery-1.4.2.min.js.





















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);

Added Site/Site_W/jpqplot/examples/jquery-ui/js/jquery-ui-1.8.1.custom.min.js.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
/*!
 * jQuery UI 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
jQuery.ui||function(c){c.ui={version:"1.8.1",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")=="hidden")return false;
b=b&&b=="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,f,g){return c.ui.isOverAxis(a,d,f)&&c.ui.isOverAxis(b,e,g)},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,
PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none")},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||
/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==
undefined)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b=="absolute"||b=="relative"||b=="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b||"area"==b?a.href||!isNaN(d):!isNaN(d))&&
!c(a)["area"==b?"parents":"closest"](":hidden").length},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}})}(jQuery);
;/*!
 * jQuery UI Widget 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Widget
 */
(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype=
b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g=
b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();
this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f,
h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=
b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*!
 * jQuery UI Mouse 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Mouse
 *
 * Depends:
 *	jquery.ui.widget.js
 */
(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&
this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();
return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.browser.safari||a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&
this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-
a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
;/*
 * jQuery UI Position 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Position
 */
(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h=
0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+=
g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k,
elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"?
-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position=
"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery);
;/*
 * jQuery UI Draggable 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,
b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&
a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),
10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+
this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+
Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-
this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=
this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.1"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");
if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;
c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=
1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;
this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=
this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=
d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;
if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!=
"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-
b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&
o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=
p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&
(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
;/*
 * jQuery UI Droppable 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Droppables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.mouse.js
 *	jquery.ui.draggable.js
 */
(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.1"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
switch(c){case "fit":return i<e&&g<k&&j<f&&h<l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=i&&
e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
;/*
 * jQuery UI Resizable 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Resizables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.resizable",d.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");d.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&d.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(d('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!d(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var e=0;e<c.length;e++){var g=d.trim(c[e]),f=d('<div class="ui-resizable-handle '+("ui-resizable-"+g)+'"></div>');/sw|se|ne|nw/.test(g)&&f.css({zIndex:++a.zIndex});"se"==g&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[g]=".ui-resizable-"+g;this.element.append(f)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
String)this.handles[i]=d(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=d(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}d(this.handles[i])}};this._renderAxis(this.element);this._handles=d(".ui-resizable-handle",this.element).disableSelection();
this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();d(this.element).addClass("ui-resizable-autohide").hover(function(){d(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){d(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){d(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(d(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
e=this.element;this.resizing=true;this.documentScroll={top:d(document).scrollTop(),left:d(document).scrollLeft()};if(e.is(".ui-draggable")||/absolute/.test(e.css("position")))e.css({position:"absolute",top:c.top,left:c.left});d.browser.opera&&/relative/.test(e.css("position"))&&e.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var g=m(this.helper.css("top"));if(a.containment){c+=d(a.containment).scrollLeft()||0;g+=d(a.containment).scrollTop()||0}this.offset=
this.helper.offset();this.position={left:c,top:g};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:c,top:g};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
this.originalSize.width/this.originalSize.height||1;a=d(".ui-resizable-"+this.axis).css("cursor");d("body").css("cursor",a=="auto"?this.axis+"-resize":a);e.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,e=this._change[this.axis];if(!e)return false;c=e.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var e=this._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName);e=g&&d.ui.hasScroll(e[0],"left")?0:c.sizeDiff.height;
g={width:c.size.width-(g?0:c.sizeDiff.width),height:c.size.height-e};e=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var f=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(d.extend(g,{top:f,left:e}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}d("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",
b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,e=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(e=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(e=="nw"){b.top=
a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,e=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,g=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,f=k(b.width)&&a.minWidth&&a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(f)b.width=a.minWidth;if(h)b.height=a.minHeight;if(e)b.width=a.maxWidth;if(g)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,
l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(f&&l)b.left=i-a.minWidth;if(e&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(g&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var e=[c.css("borderTopWidth"),
c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],g=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=d.map(e,function(f,h){f=parseInt(f,10)||0;h=parseInt(g[h],10)||0;return f+h})}d.browser.msie&&(d(b).is(":hidden")||d(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=
this.element.offset();if(this._helper){this.helper=this.helper||d('<div style="overflow:hidden;"></div>');var a=d.browser.msie&&d.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+
a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return d.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return d.extend(this._change.n.apply(this,
arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return d.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){d.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});d.extend(d.ui.resizable,
{version:"1.8.1"});d.ui.plugin.add("resizable","alsoResize",{start:function(){var b=d(this).data("resizable").options,a=function(c){d(c).each(function(){d(this).data("resizable-alsoresize",{width:parseInt(d(this).width(),10),height:parseInt(d(this).height(),10),left:parseInt(d(this).css("left"),10),top:parseInt(d(this).css("top"),10)})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else d.each(b.alsoResize,function(c){a(c)});
else a(b.alsoResize)},resize:function(){var b=d(this).data("resizable"),a=b.options,c=b.originalSize,e=b.originalPosition,g={height:b.size.height-c.height||0,width:b.size.width-c.width||0,top:b.position.top-e.top||0,left:b.position.left-e.left||0},f=function(h,i){d(h).each(function(){var j=d(this),l=d(this).data("resizable-alsoresize"),p={};d.each((i&&i.length?i:["width","height","top","left"])||["width","height","top","left"],function(n,o){if((n=(l[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(/relative/.test(j.css("position"))&&
d.browser.opera){b._revertToRelativePosition=true;j.css({position:"absolute",top:"auto",left:"auto"})}j.css(p)})};typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?d.each(a.alsoResize,function(h,i){f(h,i)}):f(a.alsoResize)},stop:function(){var b=d(this).data("resizable");if(b._revertToRelativePosition&&d.browser.opera){b._revertToRelativePosition=false;el.css({position:"relative"})}d(this).removeData("resizable-alsoresize-start")}});d.ui.plugin.add("resizable","animate",{stop:function(b){var a=
d(this).data("resizable"),c=a.options,e=a._proportionallyResizeElements,g=e.length&&/textarea/i.test(e[0].nodeName),f=g&&d.ui.hasScroll(e[0],"left")?0:a.sizeDiff.height;g={width:a.size.width-(g?0:a.sizeDiff.width),height:a.size.height-f};f=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(d.extend(g,h&&f?{top:h,left:f}:{}),{duration:c.animateDuration,easing:c.animateEasing,
step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};e&&e.length&&d(e[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});d.ui.plugin.add("resizable","containment",{start:function(){var b=d(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof d?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
d(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:d(document),left:0,top:0,width:d(document).width(),height:d(document).height()||document.body.parentNode.scrollHeight}}else{var e=d(a),g=[];d(["Top","Right","Left","Bottom"]).each(function(i,j){g[i]=m(e.css("padding"+j))});b.containerOffset=e.offset();b.containerPosition=e.position();b.containerSize={height:e.innerHeight()-g[3],width:e.innerWidth()-g[1]};c=b.containerOffset;
var f=b.containerSize.height,h=b.containerSize.width;h=d.ui.hasScroll(a,"left")?a.scrollWidth:h;f=d.ui.hasScroll(a)?a.scrollHeight:f;b.parentData={element:a,left:c.left,top:c.top,width:h,height:f}}}},resize:function(b){var a=d(this).data("resizable"),c=a.options,e=a.containerOffset,g=a.position;b=a._aspectRatio||b.shiftKey;var f={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))f=e;if(g.left<(a._helper?e.left:0)){a.size.width+=a._helper?a.position.left-e.left:
a.position.left-f.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?e.left:0}if(g.top<(a._helper?e.top:0)){a.size.height+=a._helper?a.position.top-e.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?e.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-f.left:a.offset.left-f.left)+a.sizeDiff.width);e=Math.abs((a._helper?a.offset.top-f.top:a.offset.top-
e.top)+a.sizeDiff.height);g=a.containerElement.get(0)==a.element.parent().get(0);f=/relative|absolute/.test(a.containerElement.css("position"));if(g&&f)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(e+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-e;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=d(this).data("resizable"),a=b.options,c=b.containerOffset,e=b.containerPosition,
g=b.containerElement,f=d(b.helper),h=f.offset(),i=f.outerWidth()-b.sizeDiff.width;f=f.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f});b._helper&&!a.animate&&/static/.test(g.css("position"))&&d(this).css({left:h.left-e.left-c.left,width:i,height:f})}});d.ui.plugin.add("resizable","ghost",{start:function(){var b=d(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=d(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=d(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});d.ui.plugin.add("resizable","grid",{resize:function(){var b=
d(this).data("resizable"),a=b.options,c=b.size,e=b.originalSize,g=b.originalPosition,f=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-e.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-e.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a}else if(/^(ne)$/.test(f)){b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}else{if(/^(sw)$/.test(f)){b.size.width=e.width+h;b.size.height=
e.height+a}else{b.size.width=e.width+h;b.size.height=e.height+a;b.position.top=g.top-a}b.position.left=g.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
;/*
 * jQuery UI Selectable 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Selectables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(d.options.filter,d.element[0]);f.each(function(){var c=e(this),b=c.offset();e.data(this,"selectable-item",{element:this,$element:c,left:b.left,top:b.top,right:b.left+c.outerWidth(),bottom:b.top+c.outerHeight(),startselected:false,selected:c.hasClass("ui-selected"),
selecting:c.hasClass("ui-selecting"),unselecting:c.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},
_mouseStart:function(d){var f=this;this.opos=[d.pageX,d.pageY];if(!this.options.disabled){var c=this.options;this.selectees=e(c.filter,this.element[0]);this._trigger("start",d);e(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});c.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!d.metaKey){b.$element.removeClass("ui-selected");
b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",d,{unselecting:b.element})}});e(d.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){b.$element.removeClass("ui-unselecting").addClass("ui-selecting");b.unselecting=false;b.selecting=true;b.selected=true;f._trigger("selecting",d,{selecting:b.element});return false}})}},_mouseDrag:function(d){var f=this;this.dragged=true;if(!this.options.disabled){var c=this.options,
b=this.opos[0],g=this.opos[1],h=d.pageX,i=d.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(c.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(c.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",d,{selecting:a.element})}}else{if(a.selecting)if(d.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",d,{unselecting:a.element})}if(a.selected)if(!d.metaKey&&
!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",d,{unselecting:a.element})}}}});return false}},_mouseStop:function(d){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var c=e.data(this,"selectable-item");c.$element.removeClass("ui-unselecting");c.unselecting=false;c.startselected=false;f._trigger("unselected",d,{unselected:c.element})});e(".ui-selecting",this.element[0]).each(function(){var c=
e.data(this,"selectable-item");c.$element.removeClass("ui-selecting").addClass("ui-selected");c.selecting=false;c.selected=true;c.startselected=true;f._trigger("selected",d,{selected:c.element})});this._trigger("stop",d);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.1"})})(jQuery);
;/*
 * jQuery UI Sortable 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");
this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(self,
arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=
c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,
{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();
if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",
a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+
this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+
b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+
"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,
c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==
document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp();this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",
null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):
d(this.domPosition.parent).prepend(this.currentItem);return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},
_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/
2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=
d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=
this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?
h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),
b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?
i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,
c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=
this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-
parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],
this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=
1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",
a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==
this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;
if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=
d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-
this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+
this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;
if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-
this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+
(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&
this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||
this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",
g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",
this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=
0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.1"})})(jQuery);
;/*
 * jQuery UI Accordion 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Accordion
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()==location.href.toLowerCase()}},_create:function(){var a=this.options,b=this;this.running=0;this.element.addClass("ui-accordion ui-widget ui-helper-reset");
this.element[0].nodeName=="UL"&&this.element.children("li").addClass("ui-accordion-li-fix");this.headers=this.element.find(a.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c(this).removeClass("ui-state-focus")});
this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");if(a.navigation){var d=this.element.find("a").filter(a.navigationFilter);if(d.length){var f=d.closest(".ui-accordion-header");this.active=f.length?f:d.closest(".ui-accordion-content").prev()}}this.active=this._findActive(this.active||a.active).toggleClass("ui-state-default").toggleClass("ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");this.active.next().addClass("ui-accordion-content-active");
this._createIcons();this.resize();this.element.attr("role","tablist");this.headers.attr("role","tab").bind("keydown",function(g){return b._keydown(g)}).next().attr("role","tabpanel");this.headers.not(this.active||"").attr("aria-expanded","false").attr("tabIndex","-1").next().hide();this.active.length?this.active.attr("aria-expanded","true").attr("tabIndex","0"):this.headers.eq(0).attr("tabIndex","0");c.browser.safari||this.headers.find("a").attr("tabIndex","-1");a.event&&this.headers.bind(a.event+
".accordion",function(g){b._clickHandler.call(b,g,this);g.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("<span/>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.find(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role").unbind(".accordion").removeData("accordion");
this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active");if(a.autoHeight||a.fillHeight)b.css("height",
"");return this},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();b&&this._createIcons()}},_keydown:function(a){var b=c.ui.keyCode;if(!(this.options.disabled||a.altKey||a.ctrlKey)){var d=this.headers.length,f=this.headers.index(a.target),g=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:g=this.headers[(f+1)%d];break;case b.LEFT:case b.UP:g=this.headers[(f-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},
a.target);a.preventDefault()}if(g){c(a.target).attr("tabIndex","-1");c(g).attr("tabIndex","0");g.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,
b-c(this).innerHeight()+c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a=="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=
this.options;if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]==this.active[0];d.active=d.collapsible&&b?false:c(".ui-accordion-header",this.element).index(a);if(!(this.running||!d.collapsible&&b)){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").find(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);
a.next().addClass("ui-accordion-content-active")}e=a.next();f=this.active.next();g={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):e,oldContent:f};d=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(e,f,g,b,d)}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").find(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
this.active.next().addClass("ui-accordion-content-active");var f=this.active.next(),g={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:f},e=this.active=c([]);this._toggle(e,f,g)}},_toggle:function(a,b,d,f,g){var e=this.options,k=this;this.toShow=a;this.toHide=b;this.data=d;var i=function(){if(k)return k._completed.apply(k,arguments)};this._trigger("changestart",null,this.data);this.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&f?{toShow:c([]),
toHide:b,complete:i,down:g,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:i,down:g,autoHeight:e.autoHeight||e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;f=c.ui.accordion.animations;var h=e.duration,j=e.animated;if(j&&!f[j]&&!c.easing[j])j="slide";f[j]||(f[j]=function(l){this.slide(l,{easing:j,
duration:h||700})});f[j](d)}else{if(e.collapsible&&f)a.toggle();else{b.hide();a.show()}i(true)}b.prev().attr("aria-expanded","false").attr("tabIndex","-1").blur();a.prev().attr("aria-expanded","true").attr("tabIndex","0").focus()},_completed:function(a){var b=this.options;this.running=a?0:--this.running;if(!this.running){b.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,
{version:"1.8.1",animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),f=0,g={},e={},k;b=a.toShow;k=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(i,h){e[h]="hide";i=(""+c.css(a.toShow[0],
h)).match(/^([\d+-.]+)(.*)$/);g[h]={value:i[1],unit:i[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(e,{step:function(i,h){if(h.prop=="height")f=h.end-h.start===0?0:(h.now-h.start)/(h.end-h.start);a.toShow[0].style[h.prop]=f*g[h.prop].value+g[h.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css("width",k);a.toShow.css({overflow:d});a.complete()}})}else a.toHide.animate({height:"hide"},
a);else a.toShow.animate({height:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
;/*
 * jQuery UI Autocomplete 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Autocomplete
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 */
(function(e){e.widget("ui.autocomplete",{options:{minLength:1,delay:300},_create:function(){var a=this,b=this.element[0].ownerDocument;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){var d=e.ui.keyCode;switch(c.keyCode){case d.PAGE_UP:a._move("previousPage",c);break;case d.PAGE_DOWN:a._move("nextPage",c);break;case d.UP:a._move("previous",c);c.preventDefault();
break;case d.DOWN:a._move("next",c);c.preventDefault();break;case d.ENTER:a.menu.active&&c.preventDefault();case d.TAB:if(!a.menu.active)return;a.menu.select(c);break;case d.ESCAPE:a.element.val(a.term);a.close(c);break;case d.LEFT:case d.RIGHT:case d.SHIFT:case d.CONTROL:case d.ALT:break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){a.search(null,c)},a.options.delay);break}}).bind("focus.autocomplete",function(){a.selectedItem=null;a.previous=a.element.val()}).bind("blur.autocomplete",
function(c){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=e("<ul></ul>").addClass("ui-autocomplete").appendTo("body",b).menu({focus:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("focus",null,{item:d})&&/^key/.test(c.originalEvent.type)&&a.element.val(d.value)},selected:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("select",
c,{item:d})&&a.element.val(d.value);a.close(c);c=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=c}a.selectedItem=d},blur:function(){a.menu.element.is(":visible")&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource()},_initSource:function(){var a,b;if(e.isArray(this.options.source)){a=this.options.source;this.source=function(c,d){d(e.ui.autocomplete.filter(a,c.term))}}else if(typeof this.options.source==="string"){b=this.options.source;this.source=function(c,d){e.getJSON(b,c,d)}}else this.source=this.options.source},search:function(a,b){a=
a!=null?a:this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search")!==false)return this._search(a)},_search:function(a){this.term=this.element.addClass("ui-autocomplete-loading").val();this.source({term:a},this.response)},_response:function(a){if(a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);
if(this.menu.element.is(":visible")){this._trigger("close",a);this.menu.element.hide();this.menu.deactivate()}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return e.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return e.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+
1),c;this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();this.menu.element.show().position({my:"left top",at:"left bottom",of:this.element,collision:"none"});a=b.width("").width();c=this.element.width();b.width(Math.max(a,c))},_renderMenu:function(a,b){var c=this;e.each(b,function(d,f){c._renderItem(a,f)})},_renderItem:function(a,b){return e("<li></li>").data("item.autocomplete",b).append("<a>"+b.label+"</a>").appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&
/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")},filter:function(a,b){var c=new RegExp(e.ui.autocomplete.escapeRegex(b),"i");return e.grep(a,function(d){return c.test(d.label||d.value||d)})}})})(jQuery);
(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(e(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
-1).mouseenter(function(b){a.activate(b,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var c=b.offset().top-this.element.offset().top,d=this.element.attr("scrollTop"),f=this.element.height();if(c<0)this.element.attr("scrollTop",d+c);else c>f&&this.element.attr("scrollTop",d+c-f+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prev().length},last:function(){return this.active&&!this.active.next().length},move:function(a,b,c){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);a.length?this.activate(c,a):this.activate(c,this.element.children(b))}else this.activate(c,this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active||
this.last())this.activate(a,this.element.children(":first"));else{var b=this.active.offset().top,c=this.element.height(),d=this.element.children("li").filter(function(){var f=e(this).offset().top-b-c+e(this).height();return f<10&&f>-10});d.length||(d=this.element.children(":last"));this.activate(a,d)}else this.activate(a,this.element.children(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(":last"));
else{var b=this.active.offset().top,c=this.element.height();result=this.element.children("li").filter(function(){var d=e(this).offset().top-b+c-e(this).height();return d<10&&d>-10});result.length||(result=this.element.children(":first"));this.activate(a,result)}else this.activate(a,this.element.children(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})})(jQuery);
;/*
 * jQuery UI Button 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Button
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,e=a([]);if(c)e=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return e};a.widget("ui.button",{options:{text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",i);this._determineButtonType();
this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",e="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",
function(){c.disabled||a(this).removeClass(e)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",
function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var f=b.element[0];h(f).not(f).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",
function(f){if(c.disabled)return false;if(f.keyCode==a.ui.keyCode.SPACE||f.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(f){f.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?
"input":"button";if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var b=this.element.is(":checked");b&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());
this.hasTitle||this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement,c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),
d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":""));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon");this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});
a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset");this._init()},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
;/*
 * jQuery UI Dialog 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *  jquery.ui.button.js
 *	jquery.ui.draggable.js
 *	jquery.ui.mouse.js
 *	jquery.ui.position.js
 *	jquery.ui.resizable.js
 */
(function(c){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");var a=this,b=a.options,d=b.title||a.originalTitle||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",
c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
f[0]&&e.shiftKey){g.focus(1);return false}}});c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,
function(g,f){g=c('<button type="button"></button>').text(g).click(function(){f.apply(b.element[0],arguments)}).appendTo(e);c.fn.button&&g.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");
b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===undefined?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");
a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",
f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0];a=a||c.ui.dialog.prototype.options.position;if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(e,g){if(+b[e]===b[e]){d[e]=b[e];b[e]=
g}})}else if(typeof a==="object"){if("left"in a){b[0]="left";d[0]=a.left}else if("right"in a){b[0]="right";d[0]=-a.right}if("top"in a){b[1]="top";d[1]=a.top}else if("bottom"in a){b[1]="bottom";d[1]=-a.bottom}}(a=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position({my:b.join(" "),at:b.join(" "),offset:d.join(" "),of:window,collision:"fit",using:function(e){var g=c(this).css(e).offset().top;g<0&&c(this).css("top",e.top-g)}});a||this.uiDialog.hide()},_setOption:function(a,
b){var d=this,e=d.uiDialog,g=e.is(":data(resizable)"),f=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":b?d._makeDraggable():e.draggable("destroy");break;
case "height":f=true;break;case "maxHeight":g&&e.resizable("option","maxHeight",b);f=true;break;case "maxWidth":g&&e.resizable("option","maxWidth",b);f=true;break;case "minHeight":g&&e.resizable("option","minHeight",b);f=true;break;case "minWidth":g&&e.resizable("option","minWidth",b);f=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",
d.uiDialogTitlebar).html(""+(b||"&#160;"));break;case "width":f=true;break}c.Widget.prototype._setOption.apply(d,arguments);f&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height-b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",
this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.1",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&
c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&
b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,
document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,
height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
;/*
 * jQuery UI Slider 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Slider
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");a.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
this.range=d([]);if(a.range){if(a.range===true){this.range=d("<div></div>");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length<a.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();
else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),g,h,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");g=b._start(c,f);if(g===false)return}break}i=b.options.step;g=b.options.values&&b.options.values.length?(h=b.values(f)):(h=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=g+(b._valueMax()-b._valueMin())/5;break;case d.ui.keyCode.PAGE_DOWN:h=g-(b._valueMax()-b._valueMin())/5;break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(g===
b._valueMax())return;h=g+i;break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(g===b._valueMin())return;h=g-i;break}b._slide(c,f,h);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,g,h,i;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c={x:b.pageX,y:b.pageY};e=this._normValueFromMouse(c);f=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(j){var k=Math.abs(e-h.values(j));if(f>k){f=k;g=d(this);i=j}});if(a.range===true&&this.values(1)===a.min){i+=1;g=d(this.handles[i])}if(this._start(b,
i)===false)return false;this._mouseSliding=true;h._handleIndex=i;g.addClass("ui-state-active").focus();a=g.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-g.width()/2,top:b.pageY-a.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};e=this._normValueFromMouse(c);this._slide(b,i,e);return this._animateOff=true},_mouseStart:function(){return true},
_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;
if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=
this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c<e))c=e;if(c!==this.values(a)){e=this.values();e[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:e});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],
value:c});b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
this._trimAlignValue(b);this._refreshValue();this._change(null,0)}return this._value()},values:function(b,a){var c,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):this.value();
else return this._values()},_setOption:function(b,a){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<this._valueMin())return this._valueMin();if(b>this._valueMax())return this._valueMax();var a=this.options.step,c=b%a;b=b-c;if(c>=a/2)b+=a;return parseFloat(b.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,a=this.options,c=this,
e=!this._animateOff?a.animate:false,f,g={},h,i,j,k;if(this.options.values&&this.options.values.length)this.handles.each(function(l){f=(c.values(l)-c._valueMin())/(c._valueMax()-c._valueMin())*100;g[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](g,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(l===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);if(l===1)c.range[e?"animate":"css"]({width:f-h+"%"},{queue:false,duration:a.animate})}else{if(l===
0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(l===1)c.range[e?"animate":"css"]({height:f-h+"%"},{queue:false,duration:a.animate})}h=f});else{i=this.value();j=this._valueMin();k=this._valueMax();f=k!==j?(i-j)/(k-j)*100:0;g[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](g,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?
"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.1"})})(jQuery);
;/*
 * jQuery UI Tabs 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function(d){var s=0,u=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&&e==this.options.selected||
this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+ ++s},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++u);return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c=
d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]||
(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected=
this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass":
"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs",
function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show",
null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs",
function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g,
j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",
function(){return false})},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,
"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",
true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide");
this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=c}),function(h){return h>=c?--h:h});this._tabify();this._trigger("remove",
null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this},
select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing");
if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}},
abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.1"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate=
function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k<a.anchors.length?k:0)},c);i&&i.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(i){i.clientX&&a.rotate(null)}:function(){t=b.selected;h()});if(c){this.element.bind("tabsshow",h);this.anchors.bind(b.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(b.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
;/*
 * jQuery UI Datepicker 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	jquery.ui.core.js
 */
(function(d){function J(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
minDate:null,maxDate:null,duration:"_default",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}function E(a,b){d.extend(a,
b);for(var c in b)if(b[c]==null||b[c]==undefined)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.1"}});var y=(new Date).getTime();d.extend(J.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=
f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id)a.id="dp"+ ++this.uuid;var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){a="dp"+ ++this.uuid;this._dialogInput=d('<input type="text" id="'+a+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor==Date?
this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);
d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},
_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=
d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&
!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass,b.dpDiv).add(d("td."+d.datepicker._currentClass,b.dpDiv));c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();
return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||
a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,
a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));
var c=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);return a.ctrlKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||
a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);
d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&
d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,
h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover");
this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");
this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),
k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"];
a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():
"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&
!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;
b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){a=this._getInst(d(a)[0]);
a.input&&a._selectingMonthYear&&!d.browser.msie&&a.input.focus();a._selectingMonthYear=!a._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,
"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||
this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;
for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+
s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,w,G){p=o(p)?G:w;for(w=0;w<p.length;w++)if(b.substr(s,p[w].length)==p[w]){s+=p[w].length;return w+1}throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(j)if(a.charAt(z)=="'"&&!o("'"))j=false;else r();else switch(a.charAt(z)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":k=m("m");break;case "M":k=n("M",i,g);break;
case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else j=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){k=1;l=u;do{e=this._getDaysInMonth(c,k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,
k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?
c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+1<a.length&&a.charAt(j+1)==o)&&j++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},k=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var j=0;j<a.length;j++)if(u)if(a.charAt(j)=="'"&&!i("'"))u=false;else l+=a.charAt(j);else switch(a.charAt(j)){case "d":l+=g("d",b.getDate(),2);break;
case "D":l+=k("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=k("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(j)}return l},_possibleChars:function(a){for(var b="",c=false,
e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),
e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},
_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,k=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,j=u.exec(h);j;){switch(j[2]||"d"){case "d":case "D":g+=parseInt(j[1],10);break;case "w":case "W":g+=parseInt(j[1],
10)*7;break;case "m":case "M":l+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break;case "y":case "Y":k+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break}j=u.exec(h)}return new Date(k,l,g)};if(b=(b=b==null?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):b)&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&n<j?j:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a));
n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+k+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+k+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
y+".datepicker._gotoToday('#"+a.id+"');\">"+k+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),G=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var K=this._getDefaultDate(a),H="",C=0;C<i[0];C++){for(var L=
"",D=0;D<i[1];D++){var M=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?
f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=k?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var N=0;N<A;N++){x+="<tr>";var O=!k?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,I=B&&!G||!F[0]||j&&q<j||o&&q>o;O+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==M.getTime()&&g==a.selectedMonth&&
a._keyEvent||K.getTime()==q.getTime()&&K.getTime()==M.getTime()?" "+this._dayOverClass:"")+(I?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!w?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!B||w)&&F[2]?' title="'+F[2]+'"':"")+(I?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!w?"&#xa0;":I?'<span class="ui-state-default">'+q.getDate()+
"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=O+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");L+=x}H+=L}H+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
"");a._keyEvent=false;return H},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='<div class="ui-datepicker-title">',o="";if(h||!k)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+
a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(j+=o+(h||!(k&&l)?"&#xa0;":""));if(h||!l)j+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,
i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)j+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";j+="</select>"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?"&#xa0;":"")+o;j+="</div>";return j},_adjustInstDate:function(a,b,c){var e=
a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));
return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new J;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.1";window["DP_jQuery_"+y]=d})(jQuery);
;/*
 * jQuery UI Progressbar 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Progressbar
 *
 * Depends:
 *   jquery.ui.core.js
 *   jquery.ui.widget.js
 */
(function(b){b.widget("ui.progressbar",{options:{value:0},_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===undefined)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){switch(a){case "value":this.options.value=c;this._refreshValue();this._trigger("change");break}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;if(a<this._valueMin())a=this._valueMin();if(a>this._valueMax())a=this._valueMax();return a},
_valueMin:function(){return 0},_valueMax:function(){return 100},_refreshValue:function(){var a=this.value();this.valueDiv[a===this._valueMax()?"addClass":"removeClass"]("ui-corner-right").width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.1"})})(jQuery);
;/*
 * jQuery UI Effects 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/
 */
jQuery.effects||function(f){function k(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return l.transparent;return l[f.trim(c).toLowerCase()]}function q(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return k(b)}function m(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function n(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in r||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function s(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function j(c,a,b,d){if(typeof c=="object"){d=
a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(f.isFunction(b)){d=b;b=null}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:f.fx.speeds[b]||f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=q(b.elem,a);b.end=k(b.end);b.colorInit=
true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var l={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,
183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,
165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},o=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,d){if(f.isFunction(b)){d=b;b=null}return this.each(function(){var e=f(this),g=e.attr("style")||" ",h=n(m.call(this)),p,t=e.attr("className");f.each(o,function(u,
i){c[i]&&e[i+"Class"](c[i])});p=n(m.call(this));e.attr("className",t);e.animate(s(h,p),a,b,function(){f.each(o,function(u,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)})})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?
f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===undefined?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.1",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==
null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();
var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});
c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=j.apply(this,arguments);a={options:a[1],duration:a[2],callback:a[3]};var b=f.effects[c];return b&&!f.fx.off?b.call(this,a):this},_show:f.fn.show,show:function(c){if(!c||
typeof c=="number"||f.fx.speeds[c])return this._show.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(!c||typeof c=="number"||f.fx.speeds[c])return this._hide.apply(this,arguments);else{var a=j.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(!c||typeof c=="number"||f.fx.speeds[c]||typeof c=="boolean"||f.isFunction(c))return this.__toggle.apply(this,
arguments);else{var a=j.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,
a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+
b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,
10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*
a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,
a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==undefined)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==undefined)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,
a,b,d,e,g){if(g==undefined)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,
d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
;/*
 * jQuery UI Effects Blind 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Blind
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","left"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,g);b.effects.removeWrapper(a);
c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
;/*
 * jQuery UI Effects Bounce 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Bounce
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","left"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
;/*
 * jQuery UI Effects Clip 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Clip
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","left","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,c/2)}var h={};h[g.size]=
f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Drop 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","left","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e=="show"?1:
0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Explode 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Explode
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
;/*
 * jQuery UI Effects Fold 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Fold
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","left"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],10)/100*
f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
;/*
 * jQuery UI Effects Highlight 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Highlight
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Pulsate 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Pulsate
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
;/*
 * jQuery UI Effects Scale 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Scale
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","left","width","height","overflow","opacity"],g=["position","top","left","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=c.effects.setMode(a,
b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};if(m=="box"||m=="both"){if(d.from.y!=
d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);a.css("overflow","hidden").css(a.from);
if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);child.to=c.effects.setTransition(child,
f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,n?e:g);c.effects.removeWrapper(a);b.callback&&
b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Shake 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Shake
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","left"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=(h=="pos"?"-=":"+=")+
e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
;/*
 * jQuery UI Effects Slide 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Slide
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","left"],e=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(e=="show")a.css(f,b=="pos"?-g:g);var i={};i[f]=(e=="show"?b=="pos"?
"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Transfer 1.8.1
 *
 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
b.dequeue()})})}})(jQuery);
;

Added Site/Site_W/jpqplot/examples/jsondata.txt.



>
1
[[1, 3, 2, 4, 6, 9]]

Added Site/Site_W/jpqplot/examples/legendLabels.html.



























































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->

<style type="text/css">
    div.plot {
        margin-bottom: 70px;
    }
/*    div.jqplot-table-legend-swatch {
    width: 0px;
    height: 0px;
    border-width: 3px 4px;
    }
    td.jqplot-table-legend > div {
        padding: 1px;
        border: 1px solid #dedede;
    }*/
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 3em;
        
    }
    
    p {
        margin: 2em 0;
    }
    
    #chart2 .jqplot-table-legend {
/*        margin-left: 10px;*/
    }
</style>

<script id="example_1" type="text/javascript">$(document).ready(function(){

   s1 = [1,6,9,8];
   s2 = [4,3,1,2];
   s3 = [6,2,4,1];
   s4 = [1,2,3,4];
   s5 = [4,3,2,1];
   s6 = [8,2,6,3];

   plot1 = $.jqplot('chart1',[s1, s2, s3, s4, s5, s6],{
       stackSeries: true,
        seriesDefaults: {
            fill: true,
            showMarker: false
        },
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true,
           labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
           rendererOptions:{
               numberColumns:3
           }
		},
		axes: {
		    xaxis:{min:1, max:4},
		    yaxis:{min:0, max:35}
		}
   });
});
</script>
  
<script id="example_2" type="text/javascript">$(document).ready(function(){
    plot2 = $.jqplot('chart2',[s1, s2, s3, s4, s5, s6],{
        stackSeries: true,
        seriesDefaults: {
            renderer: $.jqplot.BarRenderer
        },
        legend:{
            renderer: $.jqplot.EnhancedLegendRenderer,
            show:true,
            showLabels: true,
            labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
            rendererOptions:{
                numberColumns:1,
                seriesToggle: 900,
                disableIEFading: false
            },
            placement:'outside',
            shrinkGrid: true
        },
        axes: {
            xaxis:{renderer: $.jqplot.CategoryAxisRenderer},
            yaxis:{min:0, max:35}
        }
    });
});
</script>
  
<script id="example_3" type="text/javascript">$(document).ready(function(){
   plot3 = $.jqplot('chart3',[s1, s2, s3, s4, s5, s6],{
       stackSeries: true,
        seriesDefaults: {
            fill: false,
            showMarker: false
        },
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true,
           showSwatches: false,
           labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
           rendererOptions:{
               numberRows:1
           },
           placement:'outside',
           location:'s',
           marginTop: '30px'
		},
		axes: {
		    xaxis:{min:1, max:4},
		    yaxis:{min:0, max:35}
		}
   });
});
</script>
  
<script id="example_4" type="text/javascript">$(document).ready(function(){
    plot4 = $.jqplot('chart4', [[['A',25],['B',14],['C',7],['D', 13],['E', 11],['F',35]]], {
      seriesDefaults:{
          renderer:$.jqplot.PieRenderer
      },
      legend:{
          show:true, 
          rendererOptions:{
              numberColumns:2
          }
      }      
    });
   
 });
</script>

<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_1').html($('#example_1').html());
        $('#code_2').html($('#example_2').html());
        $('#code_3').html($('#example_3').html());
        $('#code_4').html($('#example_4').html());
        $(document).unload(function() {$('*').unbind(); });

    });
</script> 
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>The following charts demonstrate some options of the EnhancedLegendRendrer. Some of the enhancements are:</p>
<ul>
    <li>Control of number of rows and/or columns.</li>
    <li>Clickable swatches and labels to toggle series on/off.</li>
    <li>Placement of legend inside or outside of the plot (this has since been added to the default legend functionality).</li>
    <li>Ability to hide legend swatches and or labels.</li>
</ul>

<p>The first plot has legend labels in 3 columns.  They are clickable.</p>

<div id="chart1" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_1"></pre>
    
<p>The second chart has legend labels in 2 columns placed outside of the plot.  The showLabels option is false, but the labels are still clickable.</p>
<p>The legend renderer's "seriesToggle" option has been set to 900 to produce a slow, 900 ms fade.  You can set this to a number or to 'fast', 'normal' or 'slow'.</p>
<p>Also, the disableIEFading option is set to false to allow fading on IE (as opposed to simple show/hide).  In IE, series will be toggled with a show()/hide() method by default as opposed to fadeIn()/fadeOut() because of poor performance on some machines.</p>
<div id="chart2" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_2"></pre>

<p>The third plot has legend labels in 1 row outside and below the chart area.  The showSwatches option is false, but the labels are still clickable.</p>
<div id="chart3" class="plot" style="width:500px;height:300px;"></div>


    <pre id="code_3"></pre>
<p>The fourth chart is a pie plot.  Pie plots use their own legend renderer, since a pie plot is only 1 series.  The pie legend renderer has also been updated to handle custom rows/columns, although it is not clickable.</p>
<div id="chart4" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_4"></pre>
    
  </body>
</html>

Added Site/Site_W/jpqplot/examples/legendLabels2.html.









































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->

<style type="text/css">
    div.plot {
        margin-bottom: 70px;
    }
    
    p {
        margin: 2em 0;
    }
    
    .jqplot-target {
        border: 1px solid #cccccc;
    }
</style>

<script id="example_1" type="text/javascript">$(document).ready(function(){
   s1 = [1,6,9,8];
   s2 = [4,3,1,2];
   s3 = [6,2,4,1];
   s4 = [1,2,3,4];
   s5 = [4,3,2,1];
   s6 = [8,2,6,3];

   plot1 = $.jqplot('chart1',[s1, s2, s3, s4, s5, s6],{
       stackSeries: true,
        seriesDefaults: {
            fill: true,
            showMarker: false,
        },
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true,
           labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
           rendererOptions:{
               numberRows: 1
           },
           placement: 'outsideGrid',
           location: 's'
		},
		axes: {
		    xaxis:{min:1, max:4},
		    yaxis:{min:0, max:35}
		}
   });
});
</script>
  
<script id="example_2" type="text/javascript">$(document).ready(function(){
    plot2 = $.jqplot('chart2',[s1, s2, s3, s4, s5, s6],{
        stackSeries: true,
        title: 'Precipitation Potential',
        seriesDefaults: {
            renderer: $.jqplot.BarRenderer
        },
        legend:{
            renderer: $.jqplot.EnhancedLegendRenderer,
            show:true,
            showLabels: true,
            labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
            rendererOptions:{
                numberColumns:1,
                seriesToggle: 900,
                disableIEFading: false
            },
            placement:'outsideGrid',
            marginLeft: '25px',
            marginTop: '0px'
        },
        axes: {
            xaxis:{renderer: $.jqplot.CategoryAxisRenderer},
            yaxis:{min:0, max:35}
        }
    });
});
</script>
  
<script id="example_3" type="text/javascript">$(document).ready(function(){
    plot3 = $.jqplot('chart3',[s1, s2, s3, s4, s5, s6],{
        stackSeries: true,
        seriesDefaults: {
            fill: false,
            showMarker: false
        },
        series : [
            {yaxis: 'y2axis'},
            {yaxis: 'y3axis'}
        ],
        legend:{
            renderer: $.jqplot.EnhancedLegendRenderer,
            show:true,
            labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
            rendererOptions:{
                numberColumns:1
            },
            placement:'outsideGrid',
            location: 'e',
            marginLeft: '0px'  // the y3 axis will already pad itself, don't need extra margin.
        },
        axes: {
            xaxis:{min:1, max:4},
            yaxis:{min:0, max:35}
        }
    });
});
</script>

<script id="example_4" type="text/javascript">$(document).ready(function(){
   plot4 = $.jqplot('chart4',[s1, s2, s3, s4, s5, s6],{
       stackSeries: true,
       title: 'Progressive Projection',
        seriesDefaults: {
            fill: true,
            showMarker: false,
        },
        series: [
            {xaxis: 'x2axis'}
        ],
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true,
           labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
           rendererOptions:{
               numberRows: 1
           },
           placement: 'outsideGrid',
           location: 's'
		},
		axes: {
		    xaxis:{min:1, max:4, label: 'Dilution Count'},
		    x2axis:{min:1, max:4},
		    yaxis:{min:0, max:35}
		}
   });
});
</script>

<script id="example_5" type="text/javascript">$(document).ready(function(){
   plot5 = $.jqplot('chart5',[s1, s2, s3, s4, s5, s6],{
       stackSeries: true,
       title: 'Progressive Projection',
        seriesDefaults: {
            fill: true,
            showMarker: false,
        },
        series: [
            {xaxis: 'x2axis'}
        ],
       legend:{
           renderer: $.jqplot.EnhancedLegendRenderer,
           show:true,
           labels:['Fog', 'Rain', 'Frost', 'Sleet', 'Hail', 'Snow'],
           rendererOptions:{
               numberRows: 1
           },
           placement: 'outsideGrid',
           location: 'n'
		},
		axes: {
		    xaxis:{min:1, max:4},
		    x2axis:{min:1, max:4},
		    yaxis:{min:0, max:35}
		}
   });
});
</script>

<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_1').html($('#example_1').html());
        $('#code_2').html($('#example_2').html());
        $('#code_3').html($('#example_3').html());
        $('#code_4').html($('#example_4').html());
        $('#code_5').html($('#example_5').html());
        $(document).unload(function() {$('*').unbind(); });

    });
</script> 
  </head>
  <body>
<?php include "nav.inc"; ?>

<p>This example demonstrates how to use the legend "location: 'outsideGrid'" option.  This option will place the legend outside of the grid but inside of the plot target.  It will shrink the grid to accommodate the plot target.  Borders have been added to the plot target container elements to clarify how the legend is drawn in each case.</p>

<div id="chart1" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_1" class="code-block"></pre>
    
<div id="chart2" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_2" class="code-block"></pre>

<div id="chart3" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_3" class="code-block"></pre>

<div id="chart4" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_4" class="code-block"></pre>

<div id="chart5" class="plot" style="width:500px;height:300px;"></div>

    <pre id="code_5" class="code-block"></pre>
    
  </body>
</html>

Added Site/Site_W/jpqplot/examples/liz.zip.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/examples/markerStyles.html.

























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	
	<script type="text/javascript" language="javascript">
		$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
		  
    var l1 = [2,5,8,1,9,7];
    var l2 = [9,13,11];
    var l3 = [7,6,5,3,2,5];
    var l4 = [15, 12, 19, 14, 9, 15];


    plot = $.jqplot('chart1', [l1, l2, l3, l4], { 
        series: [
          {markerOptions:{style:'x'}},
          {markerOptions:{style:'dash'}},
          {markerOptions:{style:'plus'}}], 
        legend:{show:true}
    });
});
</script>
		
</head>
<body>
<?php include "nav.inc"; ?>

<div class="jqPlot" id="chart1" style="height:380px; width:480px;"></div>

</body>


</html>

Added Site/Site_W/jpqplot/examples/mekkoChart.html.



















































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.mekkoRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.mekkoAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    body {
        margin: 15px;
        font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    }
    
    p {
        margin-top: 20px;
        margin-bottom: 20px;
    }
    
    .jqplot-target {
        margin: 60px;
    }
    
    pre {
        padding: 10px;
        background-color: #efead9;
        margin: 10px;
    }
    .jqplot-axis {
      font-size: 0.8em;
    }
    
    .jqplot-mekko-barLabel {
        font-size: 1em;
    }
    
    #chart2 .jqplot-axis {
        font-size: 0.7em;
    }
    
    #chart3 .jqplot-title {
        padding-bottom: 40px;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
    bar2 = [15,6,9,13,6];
    bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
    barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];

    plot1 = $.jqplot('chart1', [bar1, bar2, bar3], {
        title: 'Revenue Breakdown per Character',
        seriesDefaults:{renderer:$.jqplot.MekkoRenderer},
        legend:{show:true},
        axesDefaults:{
            renderer:$.jqplot.MekkoAxisRenderer
        },
        axes:{
            xaxis:{ 
                barLabels:barLabels,
                tickOptions:{formatString:'$%dM'}
            }
        }
    });

    plot2 = $.jqplot('chart2', [bar1, bar2, bar3], {
        title: 'Revenue Breakdown per Character',
        seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {borderColor: '#dddddd'}},
        legend:{
            show:true, 
            rendererOptions:{placement: "insideGrid"}, 
            location:'e'
        },
        axesDefaults:{
            renderer:$.jqplot.MekkoAxisRenderer, 
            tickOptions:{}
        },
        axes:{
            xaxis:{
                barLabels:barLabels,
                max: 175,
                tickOptions:{formatString:'$%dM'}
            }, 
            x2axis:{
                show:true, 
                tickMode:'even', 
                max: 175,
                tickOptions:{formatString:'$%dM'}
            }
        }
    });

    var legendLabels = ['hotels', 'rides', 'buses', 'instruments', 'totes'];
    
    plot3 = $.jqplot('chart3', [bar1, bar2, bar3], {
        title: 'Revenue Breakdown per Character',
        seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {showBorders: false}},
        legend:{
            show:true, 
            location: 'n',
            labels: legendLabels,
            rendererOptions:{numberRows: 1, placement: "outside"}
        },
        axesDefaults:{
            renderer:$.jqplot.MekkoAxisRenderer, 
            tickOptions:{showGridline:false}
        },
        axes:{
            xaxis:{
                tickMode:"bar", 
                tickOptions:{formatString:'$%dM'}
            }
        }
    });

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
      
      <p>Mekko charts make a number of customizations to the series, axes and legend.  You can create a Mekko chart by including the renderers:</p>
<pre>
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../src/plugins/jqplot.mekkoRenderer.js&quot;&gt;&lt;/script&gt;
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../src/plugins/jqplot.mekkoAxisRenderer.js&quot;&gt;&lt;/script&gt;
</pre>
  
  <p>Data is specified per bar in the chart.  You can specify data as an array of y values, or as an array of [label, value] pairs.  Note that labels are used only on the first series.  Labels on subsequent series are ignored:</p>
<pre>
bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
bar2 = [15,6,9,13,6];
bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
</pre>

  <p>If you want to place labels for each bar under the axis, you use the barLabels option on the axes.  The bar labels can be styled with the ".jqplot-mekko-barLabel" css class.</p>
<pre>
barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
axes:{xaxis:{barLabels:barLabels}}
</pre>

    <div id="chart1" style="width:500px; height:300px;"></div>
    
    <p>You can add a secondary x axes, and the tick spacing of the axes can be separately controlled with the "tickMode" option.  "bar" will produce tics at bar boundaries, "even" will produce evenly spaced ticks.  If you set the axes max greater than the sum of the data range (the maximum x value), the plot will be padded.  Note that you should set the max on both axes to the same value.</p>

<pre>
axes:{
    xaxis:{
        barLabels:barLabels,
        max: 175
    }, 
    x2axis:{
        show:true, 
        tickMode:'even', 
        max: 175
    }
}
</pre>

    <p>Here the borders between chart areas have been given a custom color using the "borderColor" option on the series renderer.</p>
    
<pre>
    seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {borderColor: '#dddddd'}}
</pre>

    <p>Additionally, the legend can be placed "outside" (the default for a mekko chart) or "inside" of the grid area with the "placement" option on the legend renderer.</p>

<pre>
legend:{
    show:true, 
    rendererOptions:{placement: "insideGrid"}, 
    location:'e'
},
</pre>
    
    <div id="chart2" style="width:500px; height:300px;"></div>
    
    <p>Legend labels can be specified independently of the series with the "labels" option on the legend.  These will override any labels specified with the series. There are also options to control the number of rows and number of columns in the legend as well as placement.</p>
    
    <p>Here the legend is positioned to the "north" and set to render 1 row tall (number of columns determined automatically).  Note that an extra css specification was added to pad the bottom of the title of this chart to give room for the legend above the plot.</p>
    
<pre>
legendLabels = ['hotels', 'rides', 'buses', 'instruments', 'totes'];

legend:{
    show:true, 
    location: 'n',
    labels: legendLabels,
    rendererOptions:{numberRows: 1, placement: "outside"}
},    
</pre>

    <p>Also, the borders between the chart areas have been turned off with the "showBorders: false" option.</p>
    
<pre>
    seriesDefaults:{renderer:$.jqplot.MekkoRenderer, rendererOptions: {showBorders: false}}
</pre>

    <div id="chart3" style="width:500px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/meterGauge.html.









































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.meterGaugeRenderer.js"></script>
  <!-- END: load jqplot -->

<style type="text/css">

.plot {
    margin-bottom: 30px;
    margin-left: auto;
    margin-right: auto;
}

#chart0 .jqplot-meterGauge-label {
    font-size: 10pt;
}

#chart1 .jqplot-meterGauge-tick {
    font-size: 6pt;
}

#chart2 .jqplot-meterGauge-tick {
    font-size: 8pt;
}

#chart3 .jqplot-meterGauge-tick, #chart0 .jqplot-meterGauge-tic {
    font-size: 10pt;
}

#chart4 .jqplot-meterGauge-tick, #chart4 .jqplot-meterGauge-label {
    font-size: 12pt;
}
</style>

<script type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

   s1 = [1];

   plot0 = $.jqplot('chart0',[s1],{
       title: 'Network Speed',
       // title: {
       //     text: 'Network Speed',
       //     location: 'n'
       // },
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               label: 'MB/s'
           }
       }
   });

   plot1 = $.jqplot('chart1',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               showTickLabels: false,
               intervals:[2,3,4],
               intervalColors:['#66cc66', '#E7E658', '#cc6666']
           }
       }
   });

   s1 = [322];
   plot3 = $.jqplot('chart3',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               min: 100,
               max: 500,
               intervals:[200, 300, 400, 500],
               intervalColors:['#66cc66', '#93b75f', '#E7E658', '#cc6666']
           }
       }
   });

   s1 = [52200];
   plot4 = $.jqplot('chart4',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               label: 'Metric Tons per Year',
               labelPosition: 'bottom',
               labelHeightAdjust: -5,
               intervalOuterRadius: 85,
               ticks: [10000, 30000, 50000, 70000],
               intervals:[22000, 55000, 70000],
               intervalColors:['#66cc66', '#E7E658', '#cc6666']
           }
       }
   });
   
 });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>

<p>A meter gauge plot shows a data value in a speedometer style gauge.  The "series" in consists of a single data value that positions the needle on the gauge.  The span of the gauge will be automatically determined, or can be set with the "min" and "max" values in the "rendererOptions" of the series.  The plot below also specifies a chart title and a "label" for the gauge.</p>

<div id="chart0" class="plot" style="width:250px;height:170px;"></div>

<p>For small gauges, it can be desirable to turn off the tick labels by setting the "showTickLabels" option in the rendererOptions to false.  Also, colored interval bands can be specified.  The interval ranges are specified as an array of values the "intervals" option and custom colors for each interval can be specified with the "intervalColors" option.</p>

<div id="chart1" class="plot" style="width:120px;height:70px;"></div>

<p>The inner and outer radii of the interval band will automatically adjust when tick Labels are turned on.  Also, the gauge minimum and maximum can be specified with the "min" and "max" options in the rendererOptions.</p>

<div id="chart3" class="plot" style="width:300px;height:180px;"></div>

<p>The inner and outer radii of the interval band can also be specified with the "intervalInnerRadius" and "intervalOuterRadius" options.  In the plot below, the "labelPosition" option was set to "bottom" to put the gauge label below the plot.  The "labelHeightAdjust" option was set to -5 to raise the label slightly (5 pixels) to place it closer to the gauge.</p>
<p>The gauge automatically resizes to best fit the container.  The font size of the tick labels and gauge labels do not size to the container, however.  The font size of the tick labels can be controlled by styling the css ".jqplot-meterGauge-ticks" class and the gauge label by the "jqplot-meterGauge-label" class.</p>
<div id="chart4" class="plot" style="width:500px;height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/meterGauge2.html.





























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.meterGaugeRenderer.js"></script>
  <!-- END: load jqplot -->

<style type="text/css">

.plot {
    margin-bottom: 30px;
    margin-left: auto;
    margin-right: auto;
}

#chart0 .jqplot-meterGauge-label {
    font-size: 10pt;
}

#chart1 .jqplot-meterGauge-tick {
    font-size: 6pt;
}

#chart2 .jqplot-meterGauge-tick {
    font-size: 8pt;
}

#chart3 .jqplot-meterGauge-tick, #chart0 .jqplot-meterGauge-tic {
    font-size: 10pt;
}

#chart4 .jqplot-meterGauge-tick, #chart4 .jqplot-meterGauge-label {
    font-size: 12pt;
}

#chart5 .jqplot-meterGauge-tick, #chart5 .jqplot-meterGauge-label {
    font-size: 9pt;
}
</style>

<!-- <script type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

   s1 = [1];

   plot0 = $.jqplot('chart0',[s1],{
       title: 'Network Speed',
       // title: {
       //     text: 'Network Speed',
       //     location: 'n'
       // },
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               label: 'MB/s'
           }
       }
   });

   plot1 = $.jqplot('chart1',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               showTickLabels: false,
               intervals:[2,3,4],
               intervalColors:['#66cc66', '#E7E658', '#cc6666']
           }
       }
   });

   s1 = [666];
   plot3 = $.jqplot('chart3',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               min: 100,
               max: 500,
               intervals:[200, 300, 400, 500],
               intervalColors:['#66cc66', '#93b75f', '#E7E658', '#cc6666']
           }
       }
   });

   s1 = [52200];
   plot4 = $.jqplot('chart4',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               label: 'Metric Tons per Year',
               labelPosition: 'bottom',
               labelHeightAdjust: -5,
               // intervalOuterRadius: 85,
               ticks: [10000, 30000, 50000, 70000],
               intervals:[22000, 55000, 70000],
               intervalColors:['#66cc66', '#E7E658', '#cc6666']
           }
       }
   });  
 });
</script> -->


 
<script id = "example_5" type="text/javascript">$(document).ready(function(){
   s1 = [0];
   plot5 = $.jqplot('chart5',[s1],{
       seriesDefaults: {
           renderer: $.jqplot.MeterGaugeRenderer,
           rendererOptions: {
               label: 'Line Chart',
               labelPosition: 'bottom',
               intervalOuterRadius: 120,
               ticks: [0, 10000, 20000, 30000, 40000, 50000],
               intervals:[10000, 40000, 50000],
               intervalColors:['#cc6666', '#E7E658', '#66cc66']
           }
       }
   });
});</script> 
<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_5').html($('#example_5').html());
        $(document).unload(function() {$('*').unbind(); });

    });
</script> 
  </head>
  <body>
<?php include "nav.inc"; ?>

<!-- <div id="chart0" class="plot" style="width:250px;height:170px;"></div>

<div id="chart1" class="plot" style="width:120px;height:70px;"></div>

<div id="chart3" class="plot" style="width:300px;height:180px;"></div>

<div id="chart4" class="plot" style="width:500px;height:300px;"></div> -->

<div id="chart5" class="plot" style="width:372px;height:225px;"></div>

    <pre id="code_5" class="code-block"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/minMaxLines.html.



























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Horizontal Bar with Vertical lines Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>

  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

      line1 = [[1,1], [4,2], [9,3], [16,4]]; 
      line2 = [[25,1], [12.5,2], [6.25,3], [3.125,4]];
      min = [[2, 0.6], [2, 4.4]];
      max = [[15, 0.6], [15, 4.4]];
      plot = $.jqplot('chart', [line1, line2, min, max], 
      {legend:{show:true, location:'ne'}, 
      title:'Horizontally Oriented Bar Chart',  
      series:[
        {
          label:'Cats', 
          renderer:$.jqplot.BarRenderer, 
          rendererOptions:{barDirection:'horizontal', barPadding: 6, barMargin:15}, 
          shadowAngle:135
        }, 
        {
          label:'Dogs', 
          renderer:$.jqplot.BarRenderer, 
          rendererOptions:{barDirection:'horizontal', barPadding: 6, barMargin:15}, 
          shadowAngle:135
        }, 
        {showMarker: false, label:'min'}, 
        {showMarker: false, label:'max'}
      ], 
      axes:{xaxis:{min:0}, yaxis:{renderer:$.jqplot.CategoryAxisRenderer, ticks:['Once', 'Twice', 'Three Times', 'More']}}});
      
});
</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart" style="height:300; width:500;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/missingValues.html.















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Null Value Handling</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css">
    .jqplot-target {
        margin-bottom: 2em;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 4em;
        
    }
    
    p {
        margin: 2em 0;
    }
    
    .note {
        font-size: 0.8em;
    }
  </style>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
    s1 = [23, 53, 13, null, 18, 25, 26, 41, 42, null, null, null, 37, 29, 27, 19];

    plot1 = $.jqplot('chart1',[s1],{
        title: 'Default Line, ignore nulls'
    });
});</script>

<script class="code" language="javascript" type="text/javascript">$(document).ready(function(){
   s1 = [23, 53, 13, null, 18, 25, 26, 41, 42, null, null, null, 37, 29, 27, 19];

   plot1b = $.jqplot('chart1b',[s1],{
       title: 'breakOnNull true, Nulls Break Line',
        series:[
            {breakOnNull: true}
        ]
   });
});</script>

    
<script class="code" type="text/javascript">$(document).ready(function(){
    plot2 = $.jqplot('chart2', [[[1,2], [2,null], [3,7], [4,10]]], {
        captureRightClick: true,
        seriesDefaults:{
            renderer:$.jqplot.BarRenderer
        },
        axes: {
            xaxis: {
                renderer: $.jqplot.CategoryAxisRenderer
            }
        }
    });
});</script>

    
<script class="code" type="text/javascript">$(document).ready(function(){
    plot2b = $.jqplot('chart2b', [[[1,2], [2,null], [3,7], [4,10]]], {
        captureRightClick: true,
        seriesDefaults:{
            renderer:$.jqplot.BarRenderer,
            breakOnNull: true
        },
        axes: {
            xaxis: {
                renderer: $.jqplot.CategoryAxisRenderer
            }
        }
    });
});</script>

    <script type="text/javascript">    
        $(document).ready(function(){
            $('script.code').each(function(index) {
                $('pre.code').eq(index).text($(this).html());
            });
            $('script.common').each(function(index) {
                $('pre.common').eq(index).html($(this).html());
            });
            $(document).unload(function() {$('*').unbind(); });
        });
    </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
<pre class="code"></pre>
    <div id="chart1b" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
<pre class="code"></pre>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
<pre class="code"></pre>
    <div id="chart2b" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
<pre class="code"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/multiAxesRotatedText.html.













































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>untitled</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	
	<script type="text/javascript">

  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;	
line1 = [['Cup Holder Pinion Bob', 7], ['Generic Fog Lamp', 9], ['HDTV Receiver', 15], 
['8 Track Control Module', 12], [' Sludge Pump Fourier Modulator', 3], 
['Transcender/Spice Rack', 6], ['Hair Spray Danger Indicator', 18]];

line2 = [['Nickle', 28], ['Aluminum', 13], ['Xenon', 54], ['Silver', 47], 
['Sulfer', 16], ['Silicon', 14], ['Vanadium', 23]];

plot2 = $.jqplot('chart2', [line1, line2], {
  series:[{renderer:$.jqplot.BarRenderer}, {xaxis:'x2axis', yaxis:'y2axis'}],
  axesDefaults: {
      tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
      tickOptions: {
        angle: 30
      }
  },
  axes: {
    xaxis: {
      renderer: $.jqplot.CategoryAxisRenderer
    },
    x2axis: {
      renderer: $.jqplot.CategoryAxisRenderer
    },
    yaxis: {
      autoscale:true
    },
    y2axis: {
      autoscale:true
    }
  }
});

});

</script>
</head>
<body>
<?php include "nav.inc"; ?>

<div class="jqPlot" id="chart2" style="height:320px; width:480px;"></div>


</body>
</html>

Added Site/Site_W/jpqplot/examples/multipleBarColors.html.











































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
	
	<style type="text/css">
	  .jqplot-point-label {white-space: nowrap;}
	  p {
	    margin: 20px;
	    font-family:Arial,Helvetica,Sans-serif;
	  }
	</style>
	
	
		<script type="text/javascript" language="javascript"><!--
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
         line1 = [[4,'Nissan'],[6,'Porche'],[2,'Acura'],[5,'Aston Martin'],[6,'Rolls Royce']];
         line2 = [5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5,5,-5];

         plot1 = $.jqplot('chart1', [line1], {
            title:'Default Colors',
             seriesDefaults:{
               renderer:$.jqplot.BarRenderer, 
               rendererOptions:{
                 barWidth:25, 
                 barPadding:-25, 
                 barMargin:25, 
                 barDirection: 'horizontal',
                 varyBarColor: true
               }, 
               shadow:false
             },
             legend: {show:false},
             axes:{
                 xaxis:{min:0, tickOptions: {formatString: '%.0f',showGridLine: false}},
                 yaxis:{show: true, renderer: $.jqplot.CategoryAxisRenderer,
                            tickOptions: {show: true, showLabel: true},
                            showTicks: true}
                 }
         });

         plot2 = $.jqplot('chart2', [line1], {
            title:'Custom Colors',
            seriesColors:['#85802b', '#00749F', '#85802b', '#85802b', '#85802b'],
             seriesDefaults:{
               renderer:$.jqplot.BarRenderer, 
               rendererOptions:{
                 barWidth:25, 
                 barPadding:-25, 
                 barMargin:25, 
                 barDirection: 'horizontal',
                 varyBarColor: true
               }, 
               shadow:false
             },
             legend: {show:false},
             axes:{
                 xaxis:{min:0, tickOptions: {formatString: '%.0f',showGridLine: false}},
                 yaxis:{show: true, renderer: $.jqplot.CategoryAxisRenderer,
                            tickOptions: {show: true, showLabel: true},
                            showTicks: true}
                 }
         });

         plot3 = $.jqplot('chart3', [line2], {
            title:'All Default Positive and Negative Colors Colors',
             seriesDefaults:{
               renderer:$.jqplot.BarRenderer, 
               rendererOptions:{
                 barMargin:2, 
                 varyBarColor: true,
                 fillToZero: true
               }
             },
             legend: {show:false},
             axes:{
                 yaxis:{
                   
                   tickOptions: {
                     showGridLine: false
                   }
                 },
                 xaxis:{
                   renderer: $.jqplot.CategoryAxisRenderer
                }
            }
         });

         plot4 = $.jqplot('chart4', [line2], {
            title:'All Colors, useNegativeColors Turned Off',
             seriesDefaults:{
               renderer:$.jqplot.BarRenderer, 
               rendererOptions:{
                 barMargin:2, 
                 varyBarColor: true,
                 fillToZero: true,
                 useNegativeColors: false
               }
             },
             legend: {show:false},
             axes:{
                 yaxis:{
                   
                   tickOptions: {
                     showGridLine: false
                   }
                 },
                 xaxis:{
                   renderer: $.jqplot.CategoryAxisRenderer
                }
            }
         });
  });
			-->
		</script>
		
</head>
<body>
<?php include "nav.inc"; ?>
    <p>Individual bars can now have different colors.  This is achieved by setting the "varyBarColor" option to true in the series rendererOptions.  The default is to assign each bar a different color from the default "seriesColors" array.  You can customize the seriesColors array to assign whatever colors you like to the bars.</p>
		<div id="chart1" style="width:500px;height:250px;margin:20px;"></div>
		<div id="chart2" style="width:500px;height:250px;margin:20px;"></div>
  
    <p>Bars and filled series are colored differently for positive and negative values by default.  Negative values will be a slightly darker and less saturated than their positive counterparts for visual effect.  This applies to only bar and filled line charts by default.</p>
		
		<div id="chart3" style="width:700px;height:250px;margin:20px;"></div>
    
    <p>If you want to use only the colors defined in the "seriesColors" array and not colors from the "negativeSeriesColors" array, set the "useNegativeColors" option to false.  This way negative values and positive values will pull their colors from the same color array.</p>
    
    <p>Note that there are only 16 colors defined in the default color arrays.  Color arrays will cylcle through colors continuously when the last color is used.</p>
    
		<div id="chart4" style="width:700px;height:250px;margin:20px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/multipleLines.html.































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Multiple lines Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>

  <!-- END: load jqplot -->
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    l1 = [18, 36, 14, 11];
    l2 = [[2, 14], [7, 2], [8,5]];
    l3 = [4, 7, 9, 2, 11, 5, 9, 13, 8, 7];

    $.jqplot('chart1', [l1, l2, l3], {
      legend:{show:true},
      series:[
        {showLabel:true},
        {showLabel:true},
        {showLabel:false}
      ]
    });

  });
  
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/multipleYAxes.html.











































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 1.1em;
    }
    
    .jqplot-y6axis-tick {
      padding-right: 0px;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    var l1 = [2, 3, 1, 4, 3];
    var l2 = [1, 4, 3, 2, 2.5];
    var l3 = [14, 24, 18, 8, 22];
    var l4 = [102, 104, 153, 122, 138];
    var l5 = [843, 777, 754, 724, 722];


    plot1 = $.jqplot('chart', [l1, l3, l4, l5], {
      title:'Default Multiply y axes',
        series:[{}, {yaxis:'y2axis'}, {yaxis:'y3axis'}, {yaxis:'y4axis'}, {yaxis:'y5axis'}, {yaxis:'y6axis'}],
      highlighter:{bringSeriesToFront:true}
    });


    plot2 = $.jqplot('chart2', [l1, l2, l3, l4, l5], {
      title:'Customized Multiply y axes',
        series:[{}, {yaxis:'y2axis'}, {yaxis:'y3axis'}, {yaxis:'y4axis'}, {yaxis:'y5axis'}, {yaxis:'y6axis'}],
        axesDefaults:{useSeriesColor: true},
        axes:{y2axis:{padMax:2}, y3axis:{padMax:2.5}, y4axis:{padMin:2}, y5axis:{padMin:2.3}},
        grid:{gridLineWidth:1.0, borderWidth:2.5, shadow:false},
      highlighter:{bringSeriesToFront:true}
    });
    
    plot3 = $.jqplot('chart3', [l1, l3, l4, l5], {
      axesDefaults:{show:false},
      gridPadding: {top:0, bottom:0, left:0, right:44},
      highlighter:{bringSeriesToFront:true}
    });
    
    plot4 = $.jqplot('chart4', [l1, l3, l4, l5], {
      axesDefaults:{show:false},
      axes:{xaxis:{show:false}, yaxis:{show:false}},
      highlighter:{bringSeriesToFront:true}
    });


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:700px; height:300px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:700px; height:300px;"></div>
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:700px; height:300px;"></div>
    <div id="chart4" style="margin-top:20px; margin-left:20px; width:700px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/nav.inc.







































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<div class="nav">
  <?php
    $dh  = opendir('./');
    while (false !== ($filename = readdir($dh))) {
        if (preg_match('/.*\.html$/', $filename)) {
          $files[] = $filename;
        }
    }
    $fcount = count($files);
    $parts = explode("/", $_SERVER['SCRIPT_NAME']);
    $curfile = end($parts);
    $prevfile = '';
    $nextfile = '';
    // echo $fcount, $curfile;
    // print_r($files);
    
    for ($i=0; $i<$fcount; $i++) {
      if ($curfile == $files[$i]) {
        $prevfile = $files[$i-1];
        $nextfile = $files[$i+1];
        if ($i == 0) {
          $prevfile = $files[$fcount-1];
          $nextfile = $files[1];
        }
        elseif ($i == $fcount-1) {
          $prevfile = $files[$i-1];
          $nextfile = $files[0];
        }
      }  
    }
    
    echo '<a href="'.$prevfile.'">Previous</a> <a href="./">Examples</a> <a href="'.$nextfile.'">Next</a>';
    
  ?>
</div>

Added Site/Site_W/jpqplot/examples/pieTest.html.















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <!-- END: load jqplot -->

  <style type="text/css">
  div.jqplot-target { margin-bottom: 45px; }
  </style>
  
<script class="code" type="text/javascript">$(document).ready(function(){
    plot1 = $.jqplot('pie1', [[['a',25],['b',14],['c',7]]], {
        gridPadding: {top:0, bottom:38, left:0, right:0},
      seriesDefaults:{renderer:$.jqplot.PieRenderer, trendline:{show:false}, rendererOptions: { padding: 8, showDataLabels: true}},
                  legend:{
                      show:true, 
                      placement: 'outside', 
                      rendererOptions: {
                          numberRows: 1
                      }, 
                      location:'s',
                      marginTop: '15px'
                  }       
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){
    plot2 = $.jqplot('pie2', [[['a',25],['b',14],['c',7]]], {
      seriesDefaults:{renderer:$.jqplot.PieRenderer, trendline:{show:true}},
      legend:{show:true}    
    });
});</script>

<script class="code" type="text/javascript">$(document).ready(function(){    
    plot3 = $.jqplot('pie3', [[['a',1],['b',0],['c',7]]], {
      seriesDefaults:{renderer:$.jqplot.PieRenderer, rendererOptions:{sliceMargin: 4, startAngle: -90}, trendline:{show:true}},
      legend:{show:true}      
    });
});</script>
 
<script class="code" type="text/javascript">$(document).ready(function(){   
    plot4 = $.jqplot('pie4', [[["a",0],["b",1],["c",.01]]], {
      seriesDefaults:{renderer:$.jqplot.PieRenderer, rendererOptions:{sliceMargin: 0},  trendline:{show:true}},
      legend:{show:true}      
    });
});</script> 
  
<script class="code" type="text/javascript">$(document).ready(function(){  
    plot5 = $.jqplot('pie5', [[["none",23],["error",0],["click",5],["impression",25]]], {
      seriesDefaults:{renderer:$.jqplot.PieRenderer},
      legend:{show:true}      
    });   
});</script>
  
<script class="code" type="text/javascript">$(document).ready(function(){  
    plot6 = $.jqplot('pie6', [[["none",0],["error",0],["click",0],["impression",0]]], {
      seriesDefaults:{renderer:$.jqplot.PieRenderer},
      legend:{show:true}      
    });   
});</script>

  
<script type="text/javascript">    
    $(document).ready(function(){
        $('script.code').each(function(index) {
            $('pre.code').eq(index).text($(this).html());
        });
        $(document).unload(function() {$('*').unbind(); });
    });
</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
    <p>This page tests for 3 conditions.  Plotting pies with a slice that begins at 0 and ends at and near 2*pi (360 degrees), disabling the trendline plugin on pies, and plotting a pie that has a 0 value (or a very small value relative to other values) in the data set.</p>
    <div id="pie1" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
<pre class="code"></pre>
    <div id="pie2" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
<pre class="code"></pre>
    <div id="pie3" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
<pre class="code"></pre>
    <div id="pie4" style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
<pre class="code"></pre>
    <div id="pie5" style="margin-top:20px; margin-left:20px; width:400px; height:240px;"></div>
<pre class="code"></pre>
    <div id="pie6" style="margin-top:20px; margin-left:20px; width:400px; height:240px;"></div>
<pre class="code"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/pieTest2.html.

















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Pie Chart Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
  <!-- END: load jqplot -->

  <script type="text/javascript" src="pieTest2.js"></script>
  <style type="text/css">
    #code {
        font: 10pt "Andale Mono", Monaco, "Courier New", sans-serif ;
        white-space: pre;
    }
  </style>
  
    <script type="text/javascript">    
    $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
        $('#code').load('pieTest2.js');
        $('#code').dialog({
			height: 'auto',
			width: 600,
			modal: true,
			autoOpen: false,
			resizable: true,
			draggable: true,
			show: 'fold'
		});

    });
    </script> 
    
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="code"></div>
    <p>To create pie plots, you have to include the "jqplot.pieRenderer.js" file in your source.  You can view the javascript that generated these plots by clicking the "View Code" button below.</p>
    <button id="seecode" onclick="$('#code').dialog('open');">View Code</button>

    <p>Below is a default pie plot.  Slices will highlight on mouseover.  Events are triggered when you mouseover a slice and also when you click on a slice.  Here We capture the 'jqplotDataClick' event and display the clicked series index, point index and data values.<p>
    
    <div><span>You Clicked: </span><span id="info1">Nothing yet</span></div>
        
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>

    <p>Below is a customized customized pie plot where options for sliceMargin and startAngle have been specified.  Here We capture the 'jqplotDataHighlight' event and display the currently highlighted series index, point index and data values.<p>
    
    <p>The plot target also fires a 'jqplotDataMouseOver' when the cursor is moused over a slice even if highlighting is turned off.  This event will fire continuously as the user mouses over the slice.  'jqplotDataHighlight' fires only once when the user first passes over the slice.  Additionally, a 'jqplotDataUnhighlight' event is fired when the user moves out of a slice (if highlighting is enabled).<p>

    <div><span>Moused Over: </span><span id="info2">Nothing</span></div>
    
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <p>The next example has the plot's 'captureRightClick' option set to true.  This causes the plot to fire a 'jqplotRightClick' event the the user clicks the right mouse button over a slice.<p>
        
    <p>The 'highlightMouseDown' option is also set to true.  This will highlight a slice on mouse down instead of on move over.  Highlighting will occur for either left or right click.</p>

    <div><span>You Right Clicked: </span><span id="info3">Nothing yet</span></div>
    
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <p style="margin-top:40px;">The last example shows a pie with all of the default colors.  Mouse over to see the default highlight colors.  Series colors can be specified with the "seriesColors" option on the plot.  The highlight colors are specified with the 'highlightColors' option on the series renderer.</p>
    
        <div id="chart5" style="margin-top:20px; margin-left:20px; width:400px; height:400px;"></div>
        
<p>A simple line chart is added to test for imcompatabilities.</p>
        <div id="chart6" style="margin-top:20px; margin-left:20px; width:160px; height:100px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/pieTest2.js.

































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
$(document).ready(function(){

    $.jqplot.config.enablePlugins = true;

    s1 = [['a',2], ['b',6], ['c',7], ['d',10]];
    s2 = [['a', 4], ['b', 7], ['c', 6], ['d', 3]];
    s3 = [['a', 2], ['b', 1], ['c', 3], ['d', 3]];
    s4 = [['a', 4], ['b', 3], ['c', 2], ['d', 1]];
    
    s5 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
    
    plot1 = $.jqplot('chart1', [s1], {
        seriesDefaults:{
            renderer:$.jqplot.PieRenderer
        },
        legend: {show:true}
    });
    
    plot2 = $.jqplot('chart2', [s2], {
        seriesDefaults: {
            renderer:$.jqplot.PieRenderer,
            rendererOptions:{
                sliceMargin: 4,
                startAngle: -90
            }
        }
    });

    plot3 = $.jqplot('chart3', [s3], {
        captureRightClick: true,
        seriesDefaults:{
            renderer:$.jqplot.PieRenderer,
            shadow: false,
            rendererOptions:{
                startAngle: 90,
                sliceMargin: 4,
                highlightMouseDown: true
            }
        },
        legend: {
            show: true,
            location: 'e',
            placement: 'outside'
        }      
    });

    plot5 = $.jqplot('chart5', [s5], {
        seriesDefaults:{
            renderer:$.jqplot.PieRenderer
        }
    });
    
    plot6 = $.jqplot('chart6', [[1,2,3,4]]);
    
    $('#chart1').bind('jqplotDataClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info1').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart2').bind('jqplotDataHighlight', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info2').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );
    
    $('#chart2').bind('jqplotDataUnhighlight', 
        function (ev) {
            $('#info2').html('Nothing');
        }
    ); 
    
    $('#chart3').bind('jqplotDataRightClick', 
        function (ev, seriesIndex, pointIndex, data) {
            $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
        }
    );  
    
    $(document).unload(function() {$('*').unbind(); });
});

Added Site/Site_W/jpqplot/examples/pieTest3.html.









































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <!-- END: load jqplot -->

  <style type="text/css">
    #code {
        font: 10pt "Andale Mono", Monaco, "Courier New", sans-serif ;
        white-space: pre;
    }
    
    pre {
        background: #D8F4DC;
        border: 1px solid rgb(200, 200, 200);
        padding-top: 1em;
        padding-left: 3em;
        padding-bottom: 1em;
        margin-top: 1em;
        margin-bottom: 3em;
        
    }
    
    p {
        margin: 2em 0;
    }
  </style>
  
<script id="example_1" type="text/javascript">$(document).ready(function(){
    s1 = [['Sony',7], ['Samsumg',13.3], ['LG',14.7], ['Vizio',5.2], ['Insignia', 1.2]];
        
    plot1 = $.jqplot('chart1', [s1], {
        grid: {
            drawBorder: false, 
            drawGridlines: false,
            background: '#ffffff',
            shadow:false
        },
        axesDefaults: {
            
        },
        seriesDefaults:{
            renderer:$.jqplot.PieRenderer,
            rendererOptions: {
                showDataLabels: true
            }
        },
        legend: {
            show: true,
            rendererOptions: {
                numberRows: 1
            },
            location: 's'
        }
    }); 
});
</script>

<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_1').html($('#example_1').html());
        $(document).unload(function() {$('*').unbind(); });

    });
</script> 
    
  </head>
  <body>
<?php include "nav.inc"; ?>


               
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:300px; height:300px;"></div>
    
    <pre id="code_1"></pre>
 
    
 
  </body>
</html>

Added Site/Site_W/jpqplot/examples/pointLabels.html.





























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <title>Zooming with Point Labels</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>

  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">
  
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
  var line1 = [[-12,7, null],[-3,14, null],[2,-1, '<'],[7,-1, '<'],[11,11, null], [13, -1, '<']];
    plot = $.jqplot('chart', [line1],
      {
        title: 'Plot with Zooming with Point Labels', 
        seriesDefaults: {showMarker:false, pointLabels:{location:'s', ypadding:2}},
        cursor: {tooltipLocation:'sw', zoom:true},
        axesDefaults:{useSeriesColor: true},
        axes:{yaxis:{pad: 1.3}}
      }
    );
    
    pop1980 = [7071, 2968, 3005, 1595, 789];
    pop1990 = [7322, 3485, 2783, 1630, 983];
    pop2000 = [8008, 3694, 2896, 1974, 1322];
    ticks = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix"];
    
    plot2 = $.jqplot('chart2',[pop1980, pop1990, pop2000],{
       title: 'City Population (thousands)',
       legend: {
           show: true
       },
       seriesDefaults: {
           renderer: $.jqplot.BarRenderer,
           pointLabels: {
               location: 's'
           }
       },
       series: [
          {label: '1980'},
          {label: '1990'},
          {label: '2000'},
          {label: '2008 (est)'}
       ],
       axes: {
           xaxis: {
               label: 'City',
               renderer: $.jqplot.CategoryAxisRenderer,
               ticks: ticks
           },
           yaxis: {
               max: 9000,
               min: 500,
               tickOptions: {
                   formatString: '%d'
                }
           }
       }
    });
});
</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
    <p>Click and drag to zoom.  Double click on plot or click "Reset Zoom" button to reset zoom.</p>
<div id="chart" style="height:300px; width:600px;"></div>
<div style="padding-top:20px">
<button value="reset" type="button" onclick="$.jqplot.Cursor.resetZoom(plot)">Reset Zoom</button>


<div id="chart2" style="height:300px; width:600px;"></div>
</div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/pointLabels2.html.































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
  <!-- END: load jqplot -->


<script language="javascript" type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

   s1 = [[0, 300, '<img height="30px" width="30px" src="../images/new.png"/>'], [1, 150, '<img height="30px" width="30px" src="../images/new.png"/>'], [2, 35, '<img height="30px" width="30px" src="../images/new.png"/>']];

   plot1 = $.jqplot('chart1',[s1],{
       title: 'Simple Test',
       legend: {show: true},
       seriesDefaults: {
           pointLabels: {
              show: true,
              escapeHTML: false,
              ypadding: -15 
           }
       }
   });
   
 });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" class="plot" style="width:500px;height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/prefix.html.





















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    div.plot {
        margin-bottom: 70px;
    }
    
    p {
        margin: 2em 0;
    }
</style>
  <script id="example_1" type="text/javascript" language="javascript">$(document).ready(function(){
    data = [ [25,100], [26,0], [27,100], [28,0], [29,0], [30,300], [31,300]];
    plot1 = $.jqplot('chartdiv', [data], {
        title: 'test',
    	axes: {
    		xaxis: {renderer: $.jqplot.CategoryAxisRenderer},
    		yaxis: {min:0, tickOptions:{prefix: '$'}}
    	},
    	seriesDefaults: {
    		color: '#F90',
    		renderer: $.jqplot.BarRenderer,
    		shadow: false
    	}
    });
  });
  </script>
  
  <script id="example_2" type="text/javascript" language="javascript">$(document).ready(function(){
    $.jqplot.config.defaultTickFormatString = '$%d';
    
    data = [ [25,100], [26,0], [27,100], [28,0], [29,0], [30,300], [31,300]];
    ticks = [0, 100, 200, 300, 400];
    plot1 = $.jqplot('chartdiv2', [data], {
        title: 'test',
    	axes: {
    		xaxis: {renderer: $.jqplot.CategoryAxisRenderer},
    		yaxis: {min:0, ticks: ticks}
    	},
    	seriesDefaults: {
    		color: '#F90',
    		renderer: $.jqplot.BarRenderer,
    		shadow: false
    	}
    });
  });
  </script>
<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_1').html($('#example_1').html());
        $('#code_2').html($('#example_2').html());
        $(document).unload(function() {$('*').unbind(); });

    });
</script> 
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>Example of the "prefix" axis tick option.  This option adds a prefix to the tick label if and only if no formatString option is specified.</p>
    <div id="chartdiv" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
    <pre id="code_1" class="code-block"></pre>
    
    <p>A new configuration option, $.jqplot.config.defaultTickFormatString, has been added as well.  When no user formatString is specified, linear axes previously used a hard coded '%.1f' default format string.  The config option controls this default format string.  This allows an alternative way to format tick labels, with or without a prefix, if no formatString option is specified.</p>
    <div id="chartdiv2" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
    <pre id="code_2" class="code-block"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/resizablePlot.html.













































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE html>

<html lang="en">
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Plots in Hidden Containers</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <style type="text/css">
  body {
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    margin: 2em;
  }
  
  p, pre {
    margin: 1.5em;
  }
  
  	#resizable1, #resizable2 { 
      width: 400px; 
      height: 300px;
      margin-top: 2em;
      margin-bottom: 2em;
  	}
	
    
    .jqplot-target {
      font-size: 16px;
    }
    
    .ui-resizable-helper {
      border: 2px solid gray;
    }
  </style>
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.trendline.js"></script>
  
  <link type="text/css" href="jquery-ui/css/ui-lightness/jquery-ui-1.8.1.custom.css" rel="Stylesheet" />	
  <script type="text/javascript" src="jquery-ui/js/jquery-ui-1.8.1.custom.min.js"></script>

  <!-- END: load jqplot -->
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
    
    $.jqplot.config.enablePlugins = false;

    l1 = [18, 36, 41, 93, 100, 115, 133, 129, 119, 107, 91, 146, 169];
    l2 = [[8, 66], [13, 46], [22,14]];
    l3 = [[3.3, 7], [9.5, 22], [12.1, 37], [18.6, 95], [24, 102]];

    var options = {
      title: "Lines",
      legend:{show:true, location:'se'},
      seriesDefaults:{trendline:{show:true, type:"exp"}},
      axes:{yaxis:{renderer:$.jqplot.LogAxisRenderer}}
    }
    
    
    $("#resizable1").resizable({delay:20});
    $("#resizable2").resizable({delay:20, helper:'ui-resizable-helper'});
    

    $('#resizable1').bind('resize', function(event, ui) {
        plot1.replot();
    });
    
    $('#resizable2').bind('resizestop', function(event, ui) {
        $('#chart2').height($('#resizable2').height()*0.96);
        $('#chart2').width($('#resizable2').width()*0.96);
        plot2.replot({resetAxes:true});
    });
	
    plot1 = $.jqplot('chart1', [l1, l3],  options);
    plot2 = $.jqplot('chart2', [l1, l3],  options);

  });
  
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    
<p>Plot targets can be placed inside of resizable containers for dynamic plot sizing.  The examples here use the jQuery UI package for resizing functionality.</p>

    <table><tr>
      <td>
<div id="resizable1" class="ui-widget-content">
    <div id="chart1" style="height:96%; width:96%;"></div>
</div>
</td>
<td>

<p>The first plot has good resize performance in Firefox, Safari and other canvas enabled browsers.  The plot will resize dynamically with the container.  IE performance will be slow since IE doesn't natively support the canvas element.</p>

<p>Resizing is handled by binding a handler to the 'resize' event. The handler function replots the plot during resize.  Here, the plot targets's height and width must be specified as a percentage of the container and the container must be visible.</p>

<p>The event handler looks like:</p>
<pre>
    $('#resizable1').bind('resize', function(event, ui) {
        plot1.replot();
    });
</pre>
</td>
</tr></table>
<table><tr>
  <td>

<div id="resizable2" class="ui-widget-content">
    <div id="chart2" style="height:288px; width:384px;"></div>
</div>
</td>
<td>
<p>The second plot uses an alternative sizing method that is more responsive in all browsers, especially IE.  The differnece?  First, the plot target is given a static height and width that will fit inside the resizable container.  Then, instead of resizing dynamically with the container, the plots replot() method is called at the end of the resize.  When resizing is done, the plot targets hieght and width are set to a percentage of the container's and then the replot method is called.</p>

<p>Also, an options object is passed into the replot method.  It contains a single option, resetAxes, which, if true, resets all axes so the min, max, numberTicks and tickInterval are recalculated.</p>
<pre>
    $('#resizable2').bind('resizestop', function(event, ui) {
        $('#chart2').height($('#resizable2').height()*0.96);
        $('#chart2').width($('#resizable2').width()*0.96);
        plot2.replot({resetAxes:true});
    });
</pre>

<p>You can also pass in option objects to reset specific axes like:</p>

<pre>
    {resetAxes:['yaxis', 'y2axis']};
    
    or
    
    {resetAxes:{yaxis:true, y2axis:true}};
</pre>

</td></tr></table>
       
  </body>
</html>

Added Site/Site_W/jpqplot/examples/rotatedTickLabels.html.



























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
		<title>jqPlot Test 2</title>
		
		<!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
		  
		<link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
		
		<!-- BEGIN: load jquery -->
		<script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
		<!-- END: load jquery -->
		
		<!-- BEGIN: load jqplot -->
		<script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
		<!-- to render rotated axis ticks, include both the canvasText and canvasAxisTick renderers -->
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
		<!-- END: load jqplot -->

<style type="text/css" media="screen">
  .jqplot-axis-tick {

  }
</style>

	<script type="text/javascript" language="javascript">
	  
	$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
	
	line1=[['2008-09-30', 4], ['2008-10-30', 6.5], ['2008-11-30', 5.7], ['2008-12-30', 9], ['2009-01-30', 8.2]];
	
    plot1 = $.jqplot('chart', [line1], {
        title:'Rotated Axis Text',
        axes:{
            xaxis:{
                renderer:$.jqplot.DateAxisRenderer, 
                min:'August 30, 2008', 
                tickInterval:'1 month',
                rendererOptions:{
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer},
                    tickOptions:{formatString:'%b %#d, %Y', fontSize:'10pt', fontFamily:'Tahoma', angle:-40, fontWeight:'normal', fontStretch:1}
            }
        },
        series:[{lineWidth:4, markerOptions:{style:'square'}}]
    });
	
	});
	</script>

	</head>
	<body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:60px; width:500px; height:300px;"></div>

	</body>
</html>

Added Site/Site_W/jpqplot/examples/rotatedTickLabelsZoom.html.









































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
		<title>jqPlot Test 2</title>
		
		<!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
		  
		<link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
		
		<!-- BEGIN: load jquery -->
		<script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
		<!-- END: load jquery -->
		
		<!-- BEGIN: load jqplot -->
		<script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
		<!-- to render rotated axis ticks, include both the canvasText and canvasAxisTick renderers -->
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
		<script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
		<!-- END: load jqplot -->

<style type="text/css" media="screen">
  .jqplot-axis-tick {

  }
</style>

	<script type="text/javascript" language="javascript">
	  
	$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
	
	line1=[['2008-09-30', 4], ['2008-10-30', 6.5], ['2008-11-30', 5.7], ['2008-12-30', 9], ['2009-01-30', 8.2], ['2009-02-28', 7.6], ['2009-03-30', 11.4], ['2009-04-30', 16.2], ['2009-05-30', 21.8], ['2009-06-30', 19.3], ['2009-07-30', 29.7], ['2009-08-30', 36.7], ['2009-09-30', 38.7], ['2009-10-30', 33.7], ['2009-11-30', 49.7], ['2009-12-30', 62.7]];
	
    plot1 = $.jqplot('chart', [line1], {
        title:'Rotated Axis Text',
        axes:{
            xaxis:{
                renderer:$.jqplot.DateAxisRenderer, 
                min:'August 30, 2008', 
                tickInterval:'1 month',
                rendererOptions:{
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer},
                    tickOptions:{formatString:'%b %#d, %Y', fontSize:'10pt', fontFamily:'Tahoma', angle:-40, fontWeight:'normal', fontStretch:1}
            },
            yaxis:{
                rendererOptions:{
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer},
                    tickOptions:{formatString:'%.5f', fontSize:'10pt', fontFamily:'Tahoma', angle:30, fontWeight:'normal', fontStretch:1}
            }
        },
        series:[{lineWidth:4, markerOptions:{style:'square'}}],
        cursor:{zoom:true}
    });
	
	});
	</script>

	</head>
	<body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:60px; width:500px; height:300px;"></div>

	</body>
</html>

Added Site/Site_W/jpqplot/examples/seriesCanvasReorder.html.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 1.1em;
    }
    select, input {
        margin-right: 15px;
    }
    #chart1 {
        margin-bottom: 40px;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    var l1 = [3, 4, 1, 4, 2];
    var l2 = [2, 5, 1, 4, 2];
    var l3 = [1, 6, 1, 4, 2];


    plot1 = $.jqplot('chart1', [l1, l2, l3], {
        legend:{show:true, renderer:$.jqplot.EnhancedLegendRenderer},
        seriesDefaults: {lineWidth:4},
        series:[{label:'lions'}, {label:'tigers'}, {label:'bears'}],
        seriesColors:['#cc6666', '#66cc66', '#6666cc'],
        highlighter: {bringSeriesToFront: true}
    });

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>

    <p>When lines overlap each other it can be difficult to tell what is going on with the series below the top.  The highlighter plugin, the enhancedLegendRenderer plugin and special methods of plot help with this situation.</p>
    
    <p>The highlighter plugin has been enhanced with a "bringSeriesToFront" option which will bring the series of the highlighted point to the front when a data point is highlighted.  Note, however, when highlighting a point which coincides with multiple series, highlighter will detect this as the top most series and no highlighting effect will be noticed.</p>
    
    <p>The enhancedLegendRenderer plugin enabled clickable legend labels which will show/hide series.  This functionality can be disabled by setting the "seriesToggle" option on the legend renderer to false.  You can also change the fade duration of the series by setting the seriesToggle option to a millisecond value like 450, or the 'slow' or 'fast' keywords.</p>
    
    <p>On IE, series are simple toggled without the fading.  This avoids some erratic behaviour with fading elements on IE.  IE fading can be re-enabled be setting the disableIEFading option to false.</p>
    
    <p> The plot object has 4 methods which can bring a series forward or push it backward on the stack.  Click the buttons below to bring individual series to the front.  The "Last Order" button will toggle the current series order with the last displayed series order.  The "Original" button will reset the series to display in the order when the plot was created.</p>
    
    
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
    
    <button onclick="plot1.moveSeriesToFront(0);">Lions</button> 
    <button onclick="plot1.moveSeriesToFront(1);">Tigers</button> 
    <button onclick="plot1.moveSeriesToFront(2);">Bears</button> 
    
    <button onclick="plot1.restorePreviousSeriesOrder();">Last Order</button> 
    <button onclick="plot1.restoreOriginalSeriesOrder();">Original Order</button>
    
    <p>The 4 methods to achieve this effect are:</p>
    
<pre>
    plot.moveSeriesToFront(series index);
    plot.restorePreviousSeriesOrder();
    plot.restoreOriginalSeriesOrder();
    plot.moveSeriesToBack(series index);
</pre>

<p>moveSeriesToBack is not demonstrated here, but is available.</p>
    
  </body>
</html>

Added Site/Site_W/jpqplot/examples/seriesUpdate.html.























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 1.1em;
    }
    select, input {
        margin-right: 15px;
    }
    #chart1 {
        margin-bottom: 40px;
    }
  </style>
  <script type="text/javascript" language="javascript">
    
    function updatePoint() {
        var f = document.forms[0];
        var seriesIndex = f.seriesId.selectedIndex;
        var series = plot1.series[seriesIndex];
        var data = series.data[f.pointId.selectedIndex];
        var xval = parseFloat(f.xvalue.value);
        var yval = parseFloat(f.yvalue.value);
        data[0] = xval;
        data[1] = yval;
        plot1.drawSeries({}, seriesIndex);
        return false;
    }
    
    function updateSeries() {
        plot1.series[2].data = [[1,4], [2,6], [3,4], [4,1], [5,7]];
        plot1.drawSeries({}, 2);
        return false;
    }
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    var l1 = [2, 3, 1, 4, 3];
    var l2 = [1, 4, 3, 2, 5];
    var l3 = [7, 9, 11, 6, 8];


    plot1 = $.jqplot('chart1', [l1, l2, l3], {
        legend:{show:true},
        series:[{label:'lions'}, {label:'tigers'}, {label:'bears'}]
    });

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>This example demonstrates how to update a point in a series and then redraw just that series.  You can select a series, a point and change it's x and y value with the form below the chart.</p>

    <div id="chart1" style="margin-top:20px; margin-left:20px; width:360px; height:300px;"></div>
    
    <form action="#" onsubmit="return updatePoint();">
        Series: <select name="seriesId">
            <option value="0">lions</option>
            <option value="1">tigers</option>
            <option value="2">bears</option>
        </select>
        Point: <select name="pointId">
            <option value="0">first</option>
            <option value="1">second</option>
            <option value="2">third</option>
            <option value="3">fourth</option>
            <option value="4">fifth</option>
        </select>
        X: <input type="text" size="3" name="xvalue" />
        Y: <input type="text" size="3" name="yvalue" />
        <input type="submit" name="submit" value="Update" />
    </form>

<p>The mechanism to update data in a series and then redraw the series is simple.  update the data in the "plot.series[seriesIndex].data[dataIndex]" and then redraw just that series with "plot.drawSeries(options, seriesIndex);"  Here is the relavent code which updates the series on this chart:</p>

<pre>
    var f = document.forms[0];
    var seriesIndex = f.seriesId.selectedIndex;
    var series = plot1.series[seriesIndex];
    var data = series.data[f.pointId.selectedIndex];
    var xval = parseFloat(f.xvalue.value);
    var yval = parseFloat(f.yvalue.value);
    data[0] = xval;
    data[1] = yval;
    plot1.drawSeries({}, seriesIndex);
</pre>

<p>You can also update an entire series dataset at once and redraw the series like so:</p>

<pre>
    plot1.series[2].data = [[1,4], [2,6], [3,4], [4,1], [5,7]];
    plot1.drawSeries({}, 2);
</pre>

<p> You can test this by clicking the button below.  You should see the entire "bears" line drop lower on the chart.</p>
<button onclick="return updateSeries();">Update Series</button>


<p> Note that the redrawSeries method does not do any axes scaling or redraw any other elements on the chart.  It is intended to be a lightweight method to redraw just one series.  Also note, if no series Index is passed in as the second parameter to drawSeries, it will redraw all series without rescaling or redrawing other plot elements.</p>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/shadowTests.html.











































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-legend {
      font-size: 0.75em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

var cosPoints1 = [];
var cosPoints2 = [];
var cosPoints3 = [];
var cosPoints4 = [];
for (var i = 0; i < 2 * Math.PI; i += 0.1) {
    cosPoints1.push([i, Math.cos(i)]);
    cosPoints2.push([i, Math.cos(i)+1]);
    cosPoints3.push([i, Math.cos(i)+2]);
    cosPoints4.push([i, Math.cos(i)+3]);
}
plot = $.jqplot('chart', [cosPoints1, cosPoints2, cosPoints3, cosPoints4], {
    title: 'New Shadow Algorithm',
    seriesDefaults:{showMarker: false},
    series: [{lineWidth: 1.5}, {lineWidth: 2.5}, {lineWidth: 5}, {lineWidth: 8}]
});


line1 = [1, 4, 9, 16];
line2 = [25, 12.5, 6.25, 3.125];
line3 = [2, 7, 15, 30];
plot2 = $.jqplot('chart2', [line1, line2, line3], {
    stackSeries: true,
    legend: {
        show: true,
        location: 'nw',
        xoffset: 55
    },
    title: 'Bar Chart with Shadows',
    seriesDefaults: {
        renderer: $.jqplot.BarRenderer,
        rendererOptions: {
            barPadding: 2,
            barMargin: 40
        }
    },
    series: [{
        label: 'Profits'
    },
    {
        label: 'Expenses'
    },
    {
        label: 'Sales'
    }],
    axes: {
        xaxis: {
            renderer: $.jqplot.CategoryAxisRenderer,
            ticks: ['1st Qtr', '2nd Qtr', '3rd Qtr', '4th Qtr']
        }
    }
});



line1 = [1, 4, 3, 2];
line2 = [7, 1, 2, 1];
line3 = [2, 7, 1, 3];
plot3 = $.jqplot('chart3', [line1, line2, line3], {
    legend: {
        show: true,
        location: 'nw',
        xoffset: 55
    },
    title: 'Bar Chart with Shadows',
    seriesDefaults: {
        renderer: $.jqplot.BarRenderer,
        rendererOptions: {
            barPadding: 10,
            barMargin: 10
        }
    },
    series: [{
        label: 'Profits'
    },
    {
        label: 'Expenses'
    },
    {
        label: 'Sales'
    }],
    axes: {
        xaxis: {
            renderer: $.jqplot.CategoryAxisRenderer,
            ticks: ['1st Qtr', '2nd Qtr', '3rd Qtr', '4th Qtr']
        },
        yaxis: {min:0}
    }
});

  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:400px; height:400px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:400px; height:400px;"></div>
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:400px; height:400px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/singlePoint.html.













































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Single Negative Point</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>

  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">
  
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
    
    line1 = [-2];
    plot = $.jqplot('chart',[line1],{
    title: 'Rotated Text with Canvas Axis',
      axesDefaults:{tickOptions:{formatString:'%.2f'}},
    axes: {
        xaxis: {
            rendererOptions: {
                tickRenderer: $.jqplot.CanvasAxisTickRenderer
            },
            tickOptions: {
                angle: -40
            }
        }
    },
    series: [{
        markerOptions: {
            size: 12
        }
    }],
    
    cursor:{
        zoom:true,
        tooltipOffset: 10,
        tooltipLocation: 'nw'
    },
    
    highlighter: {
        sizeAdjust: 6
    }
  });
    
});


</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart" style="height:200px; width:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/sparkLine.html.

































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Sparkline Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>

  <!-- END: load jqplot -->
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

    myvalues = [1242573966, 14400, 1242573966, 5000, 1242573966, 0];

    $.jqplot('curr_sparkline', [myvalues], { 
      gridPadding: {top:0, right:0, bottom:0, left:0}, 
      axes: { 
        xaxis: { showTicks: false, showTickMarks: false }, 
        yaxis: { showTicks: false, showTickMarks: false } }, 
        title: { text: '', show: false }, 
        series: [
        {lineWidth: 1, markerOptions: { show: true, style: 'filledCircle',  lineWidth: .5, size: 2, color: '#666666', shadow: false} }
        ], 
        grid: { drawGridLines: false, gridLineColor: '#fffdf6', background: '#fffdf6',  borderColor: '#999999', borderWidth: 1, shadow: false } 
    });

  });
  
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="curr_sparkline" style="margin-top:20px; margin-left:20px; width:100px; height:40px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/stackedBar2.html.

















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.enhancedLegendRenderer.js"></script>
		
		 

<script type="text/javascript" language="javascript">
  
 $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

		
var line1 = [6.75, 14, 10.75, 5.125, 10];
var line2 = [4.88, 9.63, 7.25, 15.5, 11.75];

var tickers = ['2008-03-01', '2008-04-01', '2008-05-01', '2008-06-01', '2008-07-01'];
		
		plot1 = $.jqplot('chart1', [line1, line2], {
			stackSeries: true,
			legend: {
                renderer: $.jqplot.EnhancedLegendRenderer,
				show: true,
				location: 'ne'
			},
			title: 'Data per month stack by user',
			seriesDefaults: {
				renderer: $.jqplot.BarRenderer,
				rendererOptions: {
                    // barPadding: 6,
          // barMargin: 15,
          barWidth: 20
				}
        // shadowAngle: 135
			},
			series: [{
				label: 'User1'
			},
			{
				label: 'User2'
			}],
			axes: {
				xaxis: {
					renderer: $.jqplot.CategoryAxisRenderer,
          ticks: tickers         
				},
				yaxis: {
					min: 0
				}
			}	
		});
		
    line1 = [20, 10];
    line2 = [80, 90];
    plot2 = $.jqplot('chart2', [line1, line2], {
        grid:{drawGridlines:false},
        stackSeries: true, 
        seriesColors: ["#82BC24","#363636"],
        seriesDefaults: {
            renderer: $.jqplot.BarRenderer,
            rendererOptions:{barMargin: 25}, 
            pointLabels:{stackedValue: true},
            yaxis:'y2axis'
        },
        series:[
            {pointLabels:{ypadding: -15}},
            {pointLabels:{ypadding:9000}}
        ],
        axes: {
            xaxis:{renderer:$.jqplot.CategoryAxisRenderer},
            y2axis:{ticks:[0, 100], tickOptions:{formatString:'%d\%'}}
        }
    });

});




</script>
</head>
<body>
<?php include "nav.inc"; ?>
<div id="chart1" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
<div id="chart2" class='plot' style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/stackedBar3.html.

























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
		
		 

<script type="text/javascript" language="javascript">
  
 $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;		
    line1 = [20, 10];
    line2 = [80, 90];
    plot2 = $.jqplot('chart2', [line1, line2], {
        grid:{
            drawGridlines:true,
            background: '#ffffff',
            borderWidth: 0,
            shadow: false
        },
        stackSeries: true, 
        seriesColors: ["#82BC24","#363636"],
        seriesDefaults: {
            renderer: $.jqplot.BarRenderer,
            rendererOptions:{barMargin: 25}, 
            pointLabels:{stackedValue: true},
            yaxis:'y2axis',
            shadow: false
        },
        series:[
            {pointLabels:{ypadding: -15}},
            {pointLabels:{ypadding:9000}}   // this hack will push the labels for the top series off of the page so they don't appear.
        ],
        axes: {
            xaxis:{
                ticks:[2010, 2040], 
                renderer:$.jqplot.CategoryAxisRenderer, 
                tickOptions:{
                    showGridline:false, 
                    markSize:0
                }
            },
            y2axis:{
                ticks:[0, 100], 
                tickOptions:{formatString:'%d\%'}
            }
        }
    });
});




</script>
</head>
<body>
<?php include "nav.inc"; ?>
<div id="chart2" class='plot' style="margin-top:20px; margin-left:20px; width:200px; height:200px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/stackedBarCategoryVsLinearAxes.html.



















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
		
<script type="text/javascript" language="javascript">
  
 $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
    var line1 = [6.75, 14, 10.75, 5.125, 10];
    var line2 = [1, 4, 5, 2, 2];

    var line3 = [[1204347600000, 6.75] , [1207022400000, 14], [1209614400000, 10.75], [1212292800000, 5.125], [1214884800000, 10]];
    var line4 = [[1204347600000, 1] , [1207022400000, 4], [1209614400000, 5], [1212292800000, 2], [1214884800000, 2]];

    var tickers = ['2008-03-01', '2008-04-01', '2008-05-01', '2008-06-01', '2008-07-01'];
    plot1 = $.jqplot('chart1', [line1, line2], {
     stackSeries: true,
     legend: {
       show: true,
       location: 'ne'
     },
     title: 'Data per month stack by user',
     seriesDefaults: {
       renderer: $.jqplot.BarRenderer,
       rendererOptions: {
          barWidth: 20
       },
        shadowAngle: 135
     },
     series: [{
       label: 'User1'
     },
     {
       label: 'User2'
     }],
     axes: {
        xaxis: {
         renderer: $.jqplot.CategoryAxisRenderer,
                  ticks: tickers,
                 rendererOptions: {
                   tickRenderer: $.jqplot.CanvasAxisTickRenderer
                 },
         tickOptions: {
           angle: -30
         }
        },
       yaxis: {
         min: 0
       }
     } 
    });
		
		
    plot2 = $.jqplot('chart2', [line3, line4], {
    	stackSeries: true,
    	legend: {
    		show: true,
    		location: 'ne'
    	},
    	title: 'Data per month stack by user',
    	seriesDefaults: {
    		renderer: $.jqplot.BarRenderer,
    		rendererOptions: {
          barWidth: 20
    		},
        shadowAngle: 135
    	},
    	series: [{
    		label: 'User1'
    	},
    	{
    		label: 'User2'
    	}],
    	axes: {
         xaxis: {
         renderer: $.jqplot.DateAxisRenderer,
         rendererOptions: {
           tickRenderer: $.jqplot.CanvasAxisTickRenderer
         },
         tickInterval: '1 month',
         tickOptions: {
           formatString: '%b %Y',
           fontSize: '10pt',
           fontFamily: 'Tahoma',
           angle: -30
         }
        },
    		yaxis: {
    			min: 0
    		}
    	}	
    });	    
    
});

</script>
</head>
<body>
<?php include "nav.inc"; ?>

<div id="chart1" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
<div id="chart2" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
<div id="chart3" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
 
</body>
</html>

Added Site/Site_W/jpqplot/examples/stackedCategoryAxis.html.



















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!DOCTYPE html>

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <!-- END: load jqplot -->
<style type="text/css">
div.plot {
    margin-top: 40px;
}

.jqplot-xaxis-label {
    font-size: 12pt;
}

.jqplot-xaxis-groupLabel {
    font-size: 12pt;
}

</style>

<script language="javascript" type="text/javascript">
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

line1 = [20, 10, 20, 30, 40, 50];
line2 = [80, 90, 80, 70, 60, 50];
xticks = ['2010', '2040', '2010', '2040', '2010', '2040'];
plot1 = $.jqplot('chart1', [line1, line2], {
    stackSeries: true,
    grid:{
        drawGridlines:true,
        background: '#ffffff',
        borderWidth: 0,
        shadow: false
    },
    seriesDefaults:{
        renderer:$.jqplot.BarRenderer,
        yaxis: 'y2axis',
        rendererOptions: {
            groups: 3,
            barWidth: 35
        } 
    },
    series:[
        {color:'#73C3E8'},
        {color:'#333'}
    ],
    axes:{
        xaxis:{
            renderer:$.jqplot.CategoryAxisRenderer,
            ticks: xticks,
            rendererOptions: {
                groupLabels:['Onshore', 'Coastal', 'Offshore']
            }, 
            tickOptions:{
                showGridline:false, 
                markSize:0
            }
        },
        y2axis: {
                ticks:[0, 100], 
                tickOptions:{formatString:'%d\%'}
        }
    }
});
   
 });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<div id="chart1" class="plot" style="width:400px;height:330px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/stackedFilledLine.html.



























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

line1 = [[2006, 4], [2007, 2], [2008, 9], [2009, 16]];
line2 = [[2006, 3], [2007, 7], [2008, 6], [2009, 3]];
line3 = [[2006, 5], [2007, 1], [2008, 5], [2009, 4]];
plot3 = $.jqplot('chart', [line1, line2, line3], {
    stackSeries: true,
    legend: {
        show: true,
        location: 'nw'
    },
    title: 'Acme Company Unit Sales',
    seriesDefaults: {
        fill: true,
        showMarker: false
    },
    series: [{
        label: 'Traps Division'
    },
    {
        label: 'Decoy Division',
        fill: true
    },
    {
        label: 'Harmony Division'
    }],
    axes: {
        xaxis: {
            ticks: [2006, 2007, 2008, 2009],
            tickOptions: {
                formatString: '%d'
            }
        },
        yaxis: {
            min: 0,
            max: 30
        }
    }
});


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/stackedLine.html.

















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
		
		 

<script type="text/javascript" language="javascript">

$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
var line1 = [['04-05-2006',4], ['04-06-2006',5],['05-03-2006',9], ['05-15-2006',6]];
var line2 = [['04-05-2006',1], ['04-06-2006',2],['05-03-2006',6], ['05-15-2006',1]];
plot1 = $.jqplot("chart4", [line1,line2], {
       stackSeries: true,
       legend: {show: true, location: 'nw'},
       title: 'Test Results',
       seriesDefaults: {fill:true, showMarker:false},
       series: [{label: 'Traps'},{label:'Decoy'}],
       axes: {
               xaxis: {renderer:$.jqplot.DateAxisRenderer,
                       rendererOptions:{tickRenderer:$.jqplot.CanvasAxisTickRenderer},
                       tickOptions:{
                               formatString:'%b %#d, %Y',
                               fontSize:'10pt',
                               fontFamily:'Tahoma',
                               angle:-30
                       }
               }
       }
});
});

             
</script>
</head>
<body>
<?php include "nav.inc"; ?>
<div id="chart4" class='plot' style="margin-top:20px; margin-left:20px; width:400px; height:300px;"></div>
 
</body>


</html>

Added Site/Site_W/jpqplot/examples/test2.html.

































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html>

<html lang="en">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Simple Test</title>
 <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->

 <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />

 <!-- BEGIN: load jquery -->
 <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
 <!-- END: load jquery -->

 <!-- BEGIN: load jqplot -->
 <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
 <script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>
 <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
 <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
 <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>

 <!-- END: load jqplot -->
 <style type="text/css" media="screen">
   .jqplot-axis {
     font-size: 0.85em;
   }
 </style>
 
 <script type="text/javascript" language="javascript">

 $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
  var goog = [["2009/6/22 2:12",425.32],["2009/6/22 9:11",420.09],["2009/6/22 9:13",424.84],["2009/6/22 9:14",444.32],["2009/6/22 10:15",417.23],["2009/6/22 12:15",393.5]];

  plot = $.jqplot('chart', [goog], {
     title: 'Google, Inc.',
     series: [{
         label: 'Google, Inc.',
         neighborThreshold: -1
     }],
     axes: {
         xaxis: {
           renderer:$.jqplot.DateAxisRenderer,
           min:'2009/6/22 1:00',
           tickInterval: "1 hours", 
           tickOptions:{formatString:"%H:%M"}
         },
         yaxis: {
             renderer: $.jqplot.LogAxisRenderer,
             tickOptions:{formatString:'$%.2f'}
         }
     },
     cursor:{zoom:true, showTooltip:false, clickReset:true}
  });
 });
 </script>
 </head>
 <body>
<?php include "nav.inc"; ?>
   <div id="chart" style="margin-top:20px; margin-left:20px; width:1000px; height:300px;"></div>
   <div style="padding-top:20px"><button value="reset" type="button" onclick="$.jqplot.Cursor.resetZoom(plot)">Zoom Out</button></div>
 </body>
</html>

Added Site/Site_W/jpqplot/examples/theming.html.







































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
<!DOCTYPE html>

<html lang="en">
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Theming Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <!-- <link rel="stylesheet" type="text/css" href="../themes/jqplot.brass.css" /> -->
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pieRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.donutRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.funnelRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.js"></script>
  <!-- END: load jqplot -->

<style type="text/css">
.jqplot-target {
    margin: 30px;
}
</style>

<script language="javascript" type="text/javascript">
$(document).ready(function(){

    l1 = [['Seoul', 1], ['Paris', 7], ['Singapore',3], ['Hong  Kong',5], ['Chicago', 2], ['New York', 9]];
    l2 = [11, 9, 5, 12, 14];
    l3 = [4, 8, 5, 3, 6];
    l4 = [12, 6, 13, 11, 2];
    l5 = [4, -3, 3, 6, 2, -2];

    pop1980 = [7071639, 2968528, 3005072, 1595138, 789704, 1688210, 785940, 904599];
    pop1990 = [7322564, 3485398, 2783726, 1630553, 983403, 1585577, 935933, 1006877];
    pop2000 = [8008654, 3694644, 2896051, 1974152, 1322025, 1517550, 1160005, 1188603];
    pop2008 = [8363710, 3833995, 2853114, 2242193, 1567924, 1447395, 1351305, 1279910];

    ticks = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix", "Philadelphia", "San Antonio", "Dallas"];

    plot1 = $.jqplot('chart1',[l2],{
       title: 'Line Chart',
       highlighter: {
           show:true
       },
       cursor: {
           show: true,
           zoom: true
       },
       axes: {
           xaxis: {
               label: 'Sample'
           }
       }
    });
    
    plot1b = $.jqplot('chart1b',[l2, l3, l4],{
       stackSeries: true,
       showMarker: false,
       seriesDefaults: {
           fill: true
       }
    });

    plot2 = $.jqplot('chart2',[pop1980, pop1990, pop2000, pop2008],{
       title: 'City Population',
       legend: {
           show: true
       },
       seriesDefaults: {
           renderer: $.jqplot.BarRenderer,
           rendererOptions: {
               barPadding: 2
           }
       },
       series: [
          {label: '1980'},
          {label: '1990'},
          {label: '2000'},
          {label: '2008 (est)'}
       ],
       axes: {
           xaxis: {
               label: 'City',
               renderer: $.jqplot.CategoryAxisRenderer,
               tickRenderer: $.jqplot.CanvasAxisTickRenderer,
               labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
               ticks: ticks,
               tickOptions: {
                   angle: -30
                }
           },
           yaxis: {
               tickRenderer: $.jqplot.CanvasAxisTickRenderer,
               max: 9000000,
               min: 0,
               tickOptions: {
                   formatString: '%d',
                   angle: -30
                }
           }
       }
    });
    
    plot3 = $.jqplot('chart3',[l1],{
       title: 'Global City Index',
       legend: {
           show: true,
           rendererOptions: {
               // numberColumns: 2,
               fontSize: '10pt'
           }
        },
       seriesDefaults: {
           renderer: $.jqplot.FunnelRenderer
       }
    });
        
    plot5 = $.jqplot('chart5',[l1],{
       title: 'Pie Chart',
       seriesDefaults: {
           renderer: $.jqplot.PieRenderer
       },
       legend: {
           show: true
       }
    });
        
    e1 = plot1.themeEngine;
    brass = e1.copy('Default', 'brass');
    brass.title.fontFamily = 'Copperplate, Impact';
    brass.grid.backgroundColor = "rgb(216, 198, 114)";
    brass.grid.drawGridlines = false;
    brass.series[0].lineWidth = 6.5;
    brass.series[0].markerOptions.show = false;
    // brass.axes.xaxis.ticks.fontFamily = "Copperplate, Impact";
    brass.axesStyles.label.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
    brass.axesStyles.ticks.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
    brass.axesStyles.label.fontSize = '14pt';
    
    temp = {
        grid: {
            backgroundColor: "#593D2B",
            gridLineColor: '#E8E8E8',
            gridLineWidth: 3
        },
        title: {
            fontFamily: '"Comic Sans MS", cursive',
            fontSize: '18pt',
            textColor: '#C7CC4E'
        },
        seriesStyles: {
            color: "#DBBCAF",
            lineWidth: 8,
            markerOptions: {
                show: false
            }
        },
        axes: {
            xaxis: {
                label: {
                    fontFamily: '"Comic Sans MS", cursive',
                    textColor: '#C7CC4E'
                }
            }
        }
    };
    
    chocolate = plot1.themeEngine.copy('Default', 'chocolate', temp);
    
    gabe = {
        series: [
            {color: 'rgba(216, 159, 60, 0.6)'},
            {color: 'rgba(159, 216, 60, 0.6)'},
            {color: 'rgba(60, 159, 216, 0.6)'},
        ],
        grid: {
            backgroundColor: '#DEA493'
        }
    }
    
    gabe = plot1b.themeEngine.newTheme('gabe', gabe);
    
    oldstyle = {
        title: {
            fontFamily: 'Times New Roman',
            textColor: 'black'
        },
        axesStyles: {
           borderWidth: 0,
           ticks: {
               fontSize: '12pt',
               fontFamily: 'Times New Roman',
               textColor: 'black'
           },
           label: {
               fontFamily: 'Times New Roman',
               textColor: 'black'
           }
        },
        grid: {
            backgroundColor: 'white',
            borderWidth: 0,
            gridLineColor: 'black',
            gridLineWidth: 2,
            borderColor: 'black'
        },
        series: [
            {color: 'red', highlightColors: ['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'purple', 'red', 'silver', 'teal', 'white', 'yellow']},
            {color: 'green', highlightColors: []},
            {color: 'blue', highlightColors: []},
            {color: 'yellow', highlightColors: 'rgb(255, 245, 185)'}
        ],
        legend: {
            background: 'white',
            textColor: 'black',
            fontFamily: 'Times New Roman',
            border: '1px solid black'
        }
    };
    
    plot2.themeEngine.newTheme('oldstyle', oldstyle);
    
    temp = {
        seriesStyles: {
            seriesColors: ['red', 'orange', 'yellow', 'green', 'blue', 'indigo'],
            highlightColors: ['lightpink', 'lightsalmon', 'lightyellow', 'lightgreen', 'lightblue', 'mediumslateblue']
        },
        legend: {
            fontSize: '8pt'
        },
        title: {
            fontSize: '18pt'
        },
        grid: {
            backgroundColor: 'rgb(211, 233, 195)'
        }
    };
    
    plot3.themeEngine.newTheme('uma', temp);
    plot5.themeEngine.newTheme('uma', temp);
    
});

function switch1() {
    var th = $('#p1switcher').val();
    plot1.activateTheme(th);
}

function switch1b() {
    var th = $('#p1bswitcher').val();
    plot1b.activateTheme(th);
}

function switch2() {
    var th = $('#p2switcher').val();
    plot2.activateTheme(th);
}

function switch3() {
    var th = $('#p3switcher').val();
    plot3.activateTheme(th);
}

function switch5() {
    var th = $('#p5switcher').val();
    plot5.activateTheme(th);
}

function switch35() {
    var th = $('#p35switcher').val();
    plot3.activateTheme(th);
    plot5.activateTheme(th);
}


</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
<p>jqPlot has basic theming support for commonly styled atributes of plot elements.  Upon creation, each plot will have a "themeEngine" that controls modificaition, adding, removing and activating of plot themes.  In addition, each plot will have a "Default" theme which corresponds to the styling of the plot at plot creation.<p>
    
<p>Creation of new themes is easy.  A "style" object is created with properties for the various plot elements to be styles.  Attached to each of those is an ojbect with the actual styling properties.  A simple style object might look like:</p>

<pre>
    gabe = {
        series: [
            {color: 'rgba(216, 159, 60, 0.4)'},
            {color: 'rgba(159, 216, 60, 0.4)'},
            {color: 'rgba(60, 159, 216, 0.4)'},
        ],
        grid: {
            backgroundColor: '#DEA493'
        }
    }
</pre>

<p>This new style would then be added to the plot's themeEngine as a new theme.  it can then be activated by calling the plot's <code>activateTheme</code> method.</p>
<pre>
    plot1b.themeEngine.newTheme('gabe', gabe);
    plot1b.activateTheme('gabe');
</pre>
    
<div id="chart1b" class="plot" style="width:400px;height:260px;"></div>
<p>Select Theme for area plot:
<select id="p1bswitcher" onchange="switch1b();">
    <option value="Default" selected>Default</option>
    <option value="gabe">gabe</option>
</select>
</p>

<p>Themes can be reused between plots.  Here a style object is created and assigned to two different plots.  For convenience, the theme is given the same name when added to each plot's themeEngine.  Since each plot keeps it's own copy of the theme, the names do not need to be the same.  Also note that themes are added as deep copies by value and not by reference.  This avoids strange behavior due to the cascading nature of css related styles.</p>

<pre>
    temp = {
        seriesStyles: {
            seriesColors: ['red', 'orange', 'yellow', 'green', 'blue', 'indigo'],
            highlightColors: ['lightpink', 'lightsalmon', 'lightyellow', 'lightgreen', 'lightblue', 'mediumslateblue']
        },
        legend: {
            fontSize: '8pt'
        },
        title: {
            fontSize: '18pt'
        },
        grid: {
            backgroundColor: 'rgb(211, 233, 195)'
        }
    };
    
    plot3.themeEngine.newTheme('uma', temp);
    plot5.themeEngine.newTheme('uma', temp);
</pre>

<p>Select Theme for funnel and pie charts at same time:
<select id="p35switcher" onchange="switch35();">
    <option value="Default" selected>Default</option>
    <option value="uma">uma</option>
</select>
</p>

<div id="chart3" class="plot" style="width:400px;height:320px;"></div>

<p>Select Theme for funnel plot:
<select id="p3switcher" onchange="switch3();">
    <option value="Default" selected>Default</option>
    <option value="uma">uma</option>
</select>
</p>

<div id="chart5" class="plot" style="width:400px;height:260px;"></div>

<p>Select Theme for pie chart:
<select id="p5switcher" onchange="switch5();">
    <option value="Default" selected>Default</option>
    <option value="uma">uma</option>
</select>
</p>

<p>There are various was to create and edit themes for a plot.  Below are two different methods for creating additional themes for a line plot and adding them to the plots themeEngine.  Here the <code>axesStyles</code> property is used to supply styling to all axes at one time.  A similar property, <code>seriesStyles</code>, exists for styling all series of a plot at one time. Note, neither of these methods is as straightforward as using the <code>newTheme()</code> method of the plots themeEngine, but are included for illustrative purposes.</p>

<pre> 
    e1 = plot1.themeEngine;
    brass = e1.copy('Default', 'brass');
    brass.title.fontFamily = 'Copperplate, Impact';
    brass.grid.backgroundColor = "rgb(216, 198, 114)";
    brass.grid.drawGridlines = false;
    brass.series[0].lineWidth = 6.5;
    brass.series[0].markerOptions.show = false;
    brass.axesStyles.label.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
    brass.axesStyles.ticks.fontFamily = "Copperplate, 'Copperplate Gothic Light', Impact";
    brass.axesStyles.label.fontSize = '14pt';
    
    temp = {
        grid: {
            backgroundColor: "#593D2B",
            gridLineColor: '#E8E8E8',
            gridLineWidth: 3
        },
        title: {
            fontFamily: '"Comic Sans MS", cursive',
            fontSize: '18pt',
            textColor: '#C7CC4E'
        },
        seriesStyles: {
            color: "#DBBCAF",
            lineWidth: 8,
            markerOptions: {
                show: false
            }
        },
        axes: {
            xaxis: {
                label: {
                    fontFamily: '"Comic Sans MS", cursive',
                    textColor: '#C7CC4E'
                }
            }
        }
    };
    
    chocolate = plot1.themeEngine.copy('Default', 'chocolate', temp);
</pre>

<div id="chart1" class="plot" style="width:400px;height:260px;"></div>

<p>Select theme for line chart:
<select id="p1switcher" onchange="switch1();">
    <option value="Default" selected>Default</option>
    <option value="brass">brass</option>
    <option value="chocolate">chocolate</option>
</select>
</p>

<p>The example below shows more extensive use of the various styling options to give the chart a rather ugly and dated appearence.  Note that, for bar (and funnel, pie and donut charts), <code>highlightColors</code> can be specified as an array of colors which will be applied to each bar individually, as a single string giving a color to apply to all bars, or as an empty array which will force jqPlot to auto calculate highlight colors based on the current bar color.<p>
    
<pre>
    oldstyle = {
        title: {
            fontFamily: 'Times New Roman',
            textColor: 'black'
        },
        axesStyles: {
           borderWidth: 0,
           ticks: {
               fontSize: '12pt',
               fontFamily: 'Times New Roman',
               textColor: 'black'
           },
           label: {
               fontFamily: 'Times New Roman',
               textColor: 'black'
           }
        },
        grid: {
            backgroundColor: 'white',
            borderWidth: 0,
            gridLineColor: 'black',
            gridLineWidth: 2,
            borderColor: 'black'
        },
        series: [
            {color: 'red', highlightColors: ['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'purple', 'red', 'silver', 'teal', 'white', 'yellow']},
            {color: 'green', highlightColors: []},
            {color: 'blue', highlightColors: []},
            {color: 'yellow', highlightColors: 'rgb(255, 245, 185)'}
        ],
        legend: {
            background: 'white',
            textColor: 'black',
            fontFamily: 'Times New Roman',
            border: '1px solid black'
        }
    };
    
    plot2.themeEngine.newTheme('oldstyle', oldstyle);
</pre>

<div id="chart2" class="plot" style="width:760px;height:360px;"></div>

<p>Select theme for bar chart:
<select id="p2switcher" onchange="switch2();">
    <option value="Default" selected>Default</option>
    <option value="oldstyle">oldstyle</option>
</select>
</p>

  </body>
</html>

Added Site/Site_W/jpqplot/examples/trendlineDragableCustomization.html.































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dragable.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.trendline.js"></script>
  <!-- END: load jqplot -->

<script language="javascript" type="text/javascript">
  
  $(document).ready(function(){
      // $.jqplot.config.enablePlugins = true;

    s1 = [['23-May-08',1],['24-May-08',4],['25-May-08',2],['26-May-08', 6]];
    s2 = [['23-May-08',2],['24-May-08',3],['25-May-08',7],['26-May-08', 4]];

    mp = $.jqplot('chart1',[s1, s2],{
            title: 'mytitle',
            legend:{show:true},
            axes: {
                xaxis: {
                    renderer: $.jqplot.DateAxisRenderer, 
                    tickOptions: {
                        formatString: '%H:%S'
                    },
                    numberTicks: 12
                },
                yaxis: {
                    tickOptions: {
                        formatString: '%.2f'
                    }
                }
            },
            series:[{
              markerOptions:{style:'diamond'},
              dragable: {
                  color: '#ff3366',
                  constrainTo: 'x'
              },
              isDragable: true,
              trendline: {
                  show:true,
                  label: 'trendline 1',
                    color: '#cccccc'
              }
            }, 
            {
              isDragable: false,
              trendline: {
                  show:true
              }
            }
            ],
            legend: {show:true}
      });
  });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:500px; height:400px;"></div>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:300px; height:200px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/verticalLine.html.









































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

line1 = [['June 6, 2009', 2], ['June 7, 2009', 33], ['June 8, 2009', 14], ['June 9, 2009', 19]];
today = [['2009/06/08', 2], ['2009/06/08', 33]];
plot2 = $.jqplot('chart', [line1, today], {
    title: 'Date Data with line at today',
    axes: {
        xaxis: {
            renderer: $.jqplot.DateAxisRenderer,
            numberTicks: 5
        }
    },
    series:[{},{lineWidth:1, color:'#999999', showMarker:false}]
});


  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:500px; height:300px;"></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/waterfall.html.















































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Waterfall Chart</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.barRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasAxisTickRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.pointLabels.js"></script>
  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-title {
      font-size: 16px;
    }
	  p {
	    margin: 20px;
	    font-family:Arial,Helvetica,Sans-serif;
	  }
  </style>

<script id="example_1" type="text/javascript">$(document).ready(function(){
    var line1 = [14, 3, 4, -3, 5, 2, -3, -7];
    var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];


    plot1 = $.jqplot('chart1', [line1], {
        title: 'Crop Yield Charnge, 2008 to 2009',
        seriesDefaults:{
            renderer:$.jqplot.BarRenderer, 
            rendererOptions:{
                waterfall:true,
                varyBarColor: true
            },
            pointLabels: {
                hideZeros: true
            },
            yaxis:'y2axis'
        },
        axes:{
            xaxis:{
                renderer:$.jqplot.CategoryAxisRenderer, 
                ticks:ticks,
                tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                tickOptions: {
                    angle: -90,
                    fontSize: '10pt',
                    showMark: false,
                    showGridline: false
                }
            },
            y2axis: {
                min: 0,
                tickInterval: 5
            }
        }
    });
});</script>


<script id="example_2" type="text/javascript">$(document).ready(function(){

    var line1 = [14, 3, 4, -3, 5, 2, -3, -7];
    var ticks = ['2008', 'Apricots', 'Tomatoes', 'Potatoes', 'Rhubarb', 'Squash', 'Grapes', 'Peanuts', '2009'];
    plot2 = $.jqplot('chart2', [line1], {
        title: 'Crop Yield Charnge, 2008 to 2009',
        seriesColors:['#333333', '#999999', '#3EA140', '#3EA140', '#3EA140', '#783F16', '#783F16', '#783F16', '#333333'],
        seriesDefaults:{
            renderer:$.jqplot.BarRenderer, 
            rendererOptions:{
                waterfall:true,
                varyBarColor: true,
                useNegativeColors: false
            },
            pointLabels: {
                hideZeros: true
            },
            yaxis:'y2axis'
        },
        axes:{
            xaxis:{
                renderer:$.jqplot.CategoryAxisRenderer, 
                ticks:ticks,
                tickRenderer: $.jqplot.CanvasAxisTickRenderer,
                tickOptions: {
                    angle: -90,
                    fontSize: '10pt',
                    showMark: false,
                    showGridline: false
                }
            },
            y2axis: {
                min: 0,
                tickInterval: 5
            }
        }
    });
});</script>

<script type="text/javascript">
    $(document).ready(function(){
        
        $('#code_1').html($('#example_1').text());
        $('#code_2').html($('#example_2').text());
        $(document).unload(function() {$('*').unbind(); });

    });
</script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <p>Waterfall chart using default bar colors.</p>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
    <pre id="code_1" class="code-block"></pre>
    <p>Waterfall chart using custom colors and "useNegativeColors" set to "false".</p>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:350px; height:350px;"></div>
    <pre id="code_2" class="code-block"></pre>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/zoom1.html.



























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<!DOCTYPE html>

<html>
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
	
	<style type="text/css">
	  .jqplot-cursor-legend {
	    width: 160px;
	    font-family: "Courier New";
	    font-size: 0.85em;
	  }
	  
	  td.jqplot-cursor-legend-swatch {
	    width: 1.3em;
	  }
	  
	  div.jqplot-cursor-legend-swatch {
/*      width: 15px;*/
	  }
	</style>
	
	<script type="text/javascript" language="javascript">
		$(document).ready(function(){
      // $.jqplot.config.enablePlugins = true;
		  
    var goog = [["6/22/2009",425.32],
    ["6/8/2009",424.84],
    ["5/26/2009",417.23],
    ["5/11/2009",390],
    ["4/27/2009",393.69],
    ["4/13/2009",392.24],
    ["3/30/2009",369.78],
    ["3/16/2009",330.16],
    ["3/2/2009",308.57],
    ["2/17/2009",346.45],
    ["2/2/2009",371.28],
    ["1/20/2009",324.7],
    ["1/5/2009",315.07],
    ["12/22/2008",300.36],
    ["12/8/2008",315.76],
    ["11/24/2008",292.96],
    ["11/10/2008",310.02],
    ["10/27/2008",359.36],
    ["10/13/2008",372.54],
    ["9/29/2008",386.91],
    ["9/15/2008",449.15],
    ["9/2/2008",444.25],
    ["8/25/2008",463.29],
    ["8/11/2008",510.15],
    ["7/28/2008",467.86],
    ["7/14/2008",481.32],
    ["6/30/2008",537],
    ["6/16/2008",546.43],
    ["6/2/2008",567],
    ["5/19/2008",544.62],
    ["5/5/2008",573.2],
    ["4/21/2008",544.06],
    ["4/7/2008",457.45],
    ["3/24/2008",438.08],
    ["3/10/2008",437.92],
    ["2/25/2008",471.18],
    ["2/11/2008",529.64],
    ["1/28/2008",515.9],
    ["1/14/2008",600.25],
    ["12/31/2007",657],
    ["12/17/2007",696.69],
    ["12/3/2007",714.87],
    ["11/19/2007",676.7],
    ["11/5/2007",663.97],
    ["10/22/2007",674.6],
    ["10/8/2007",637.39],
    ["9/24/2007",567.27],
    ["9/10/2007",528.75],
    ["8/27/2007",515.25]];


    plot = $.jqplot('chart1', [goog], { 
        // title: 'Google, Inc.', 
        series: [{ 
            // label: 'Google, Inc.', 
            neighborThreshold: -1 
        }], 
        axes: { 
            xaxis: { 
                renderer:$.jqplot.DateAxisRenderer, 
                min:'August 1, 2007', 
                tickInterval: '4 months', 
                tickOptions:{formatString:'%Y/%#m/%#d'} 
            }, 
            yaxis: { 
                renderer: $.jqplot.LogAxisRenderer, 
                tickOptions:{formatString:'$%.2f'} 
            } 
        }, 
        cursor:{show:true, zoom:true} 
    });
});
</script>
		
</head>
<body>
<?php include "nav.inc"; ?>

<div class="jqPlot" id="chart1" style="height:300px; width:400px;"></div>

<button onclick="plot.resetZoom()">Reset</button>
</body>


</html>

Added Site/Site_W/jpqplot/examples/zoom2.html.



















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html>
<html>
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-axis{
      font-size: 0.75em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

// line2 = [25, 12.5, 6.25, 3.125, ];
var goog = [["6/22/2009",425.32],["6/15/2009",420.09],["6/8/2009",424.84],["6/1/2009",444.32],["5/26/2009",417.23],["5/18/2009",393.5],["5/11/2009",390],["5/4/2009",407.33],["4/27/2009",393.69],["4/20/2009",389.49],["4/13/2009",392.24],["4/6/2009",372.5],["3/30/2009",369.78],["3/23/2009",347.7],["3/16/2009",330.16],
["3/9/2009",324.42],["3/2/2009",308.57],["2/23/2009",337.99],["2/17/2009",346.45],["2/9/2009",357.68],["2/2/2009",371.28],["1/26/2009",338.53],["1/20/2009",324.7],["1/12/2009",299.67],["1/5/2009",315.07],["12/29/2008",321.32],["12/22/2008",300.36],["12/15/2008",310.17],["12/8/2008",315.76],["12/1/2008",283.99],["11/24/2008",292.96],["11/17/2008",262.43],["11/10/2008",310.02],["11/3/2008",331.14],["10/27/2008",359.36],["10/20/2008",339.29],["10/13/2008",372.54],["10/6/2008",332],["9/29/2008",386.91],["9/22/2008",431.04],["9/15/2008",449.15],["9/8/2008",437.66],["9/2/2008",444.25],["8/25/2008",463.29],
["8/18/2008",490.59],["8/11/2008",510.15],["8/4/2008",495.01],["7/28/2008",467.86],["7/21/2008",491.98],["7/14/2008",481.32],["7/7/2008",533.8],["6/30/2008",537],["6/23/2008",528.07],["6/16/2008",546.43],["6/9/2008",571.51],["6/2/2008",567],["5/27/2008",585.8],["5/19/2008",544.62],["5/12/2008",580.07],["5/5/2008",573.2],["4/28/2008",581.29],["4/21/2008",544.06],["4/14/2008",539.41],["4/7/2008",457.45],["3/31/2008",471.09],["3/24/2008",438.08],["3/17/2008",433.55],["3/10/2008",437.92],["3/3/2008",433.35],["2/25/2008",471.18],["2/19/2008",507.8],["2/11/2008",529.64],["2/4/2008",516.69],["1/28/2008",515.9],
["1/22/2008",566.4],["1/14/2008",600.25],["1/7/2008",638.25],["12/31/2007",657],["12/24/2007",702.53],["12/17/2007",696.69],["12/10/2007",689.96],["12/3/2007",714.87],["11/26/2007",693],["11/19/2007",676.7],["11/12/2007",633.63],["11/5/2007",663.97],["10/29/2007",711.25],["10/22/2007",674.6],["10/15/2007",644.71],["10/8/2007",637.39],["10/1/2007",594.05],["9/24/2007",567.27],["9/17/2007",560.1],["9/10/2007",528.75],["9/4/2007",519.35],["8/27/2007",515.25],["8/20/2007",515]];
plot = $.jqplot('chart', [goog], {
    title: 'Google, Inc.',
    series: [{
        // label: 'Google, Inc.',
        neighborThreshold: 0
    }],
    axes: {
        xaxis: {
          renderer:$.jqplot.DateAxisRenderer,
          min:'August 1, 2007',
          tickInterval: "3 months",
          tickOptions:{formatString:"%Y/%#m/%#d"}
        },
        yaxis: {
            renderer: $.jqplot.LogAxisRenderer,
            tickOptions:{formatString:'$%.2f'}
        }
    },
    cursor:{zoom:true},
    highlighter:{show:true}
});
  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>
    <div id="chart" style="margin-top:20px; margin-left:20px; width:600px; height:300px;"></div>
    <div style="padding-top:20px"><button value="reset" type="button" onclick="plot.resetZoom();">Zoom Out</button></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/zoom3.html.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!DOCTYPE html>
<html lang="en">
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Zoom plugin with multiple Y Axes</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>

  <!-- END: load jqplot -->
<script language="javascript" type="text/javascript">
  
$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
  // var line1 = [[-12,7],[-3,14],[2,-2],[7,-11],[11,11]];
  // var line2 = [[-12,22],[-3,42],[2,36],[7,18],[11,27]];
  // var line3 = [[-8,44], [0,21], [3,66], [10,19], [12,32]];
var InPr = [[0.0,85.0],[10.0,87.4],[20.0,90.0],[30.0,91.3],[40.0,93.5],[50.0,94.1],[60.0,95.4],[70.0,95.8],[80.0,96.1],[90.0,97.6],[100.0,97.4],[110.0,97.7],[120.0,97.9],[130.0,98.3],[140.0,97.9],[150.0,98.4],[160.0,99.8],[170.0,100.5],[180.0,100.4],[190.0,100.3],[200.0,102.9],[210.0,104.1],[220.0,104.4],[230.0,103.9],[240.0,104.4],[250.0,104.0],[260.0,103.9],[270.0,103.5],[280.0,105.4],[290.0,105.7],[300.0,105.7],[310.0,105.3],[320.0,105.0],[330.0,105.1],[340.0,105.0],[350.0,105.1],[360.0,104.7],[370.0,104.4],[380.0,104.3],[390.0,105.7],[400.0,106.4],[410.0,105.7],[420.0,105.4],[430.0,105.7],[440.0,105.7],[450.0,105.9],[460.0,105.3],[470.0,105.7],[480.0,105.8],[490.0,105.4],[500.0,105.4],[510.0,105.4],[520.0,105.6],[530.0,104.9],[540.0,104.8],[550.0,105.2],[560.0,105.2],[570.0,105.1],[580.0,104.8],[590.0,104.6],[600.0,104.3],[610.0,104.2],[620.0,104.1],[630.0,104.7],[640.0,104.6],[650.0,104.7],[660.0,104.6],[670.0,104.4],[680.0,106.8],[690.0,106.6],
[700.0,106.3],[710.0,107.1],[720.0,106.2],[730.0,106.1],[740.0,106.7],[750.0,106.5],[760.0,106.8],[770.0,106.7],[780.0,106.6],[790.0,106.7],[800.0,106.8],[810.0,106.4],[820.0,106.7],[830.0,106.5],[840.0,106.9],[850.0,106.7],[860.0,106.7],[870.0,106.8],[880.0,107.1],[890.0,106.6],[900.0,106.8],[910.0,106.9],[920.0,106.8],[930.0,107.3],[940.0,106.9],[950.0,106.5],[960.0,107.2],[970.0,107.0],[980.0,106.9],[990.0,107.2],[1000.0,107.7],[1010.0,107.6],[1020.0,107.1],[1030.0,107.6],[1040.0,107.2],[1050.0,107.2],[1060.0,107.5],[1070.0,107.7],[1080.0,107.3],[1090.0,107.0],[1100.0,107.7],[1110.0,107.0],[1120.0,107.8],[1130.0,107.8],[1140.0,107.7],[1150.0,107.4],[1160.0,107.8],[1170.0,107.8],[1180.0,107.6],[1190.0,107.7],[1200.0,107.4],[1210.0,108.0],[1220.0,372.6],[1230.0,90.4],[1240.0,125.0],[1250.0,110.4],[1260.0,108.5],[1270.0,109.7],[1280.0,108.9],[1290.0,109.6],[1300.0,110.2],[1310.0,110.0],[1320.0,110.7],[1330.0,110.3],[1340.0,110.6],[1350.0,110.5],
[1360.0,110.8],[1370.0,110.6],[1380.0,111.0],[1390.0,113.0],[1400.0,112.1],[1410.0,112.3],[1420.0,112.3],[1430.0,137.6],[1440.0,179.0],[1450.0,216.9],[1460.0,399.2],[1470.0,433.6],[1480.0,203.5],[1490.0,223.3],[1500.0,229.8],[1510.0,416.9],[1520.0,198.8],[1530.0,208.7],[1540.0,172.0],[1550.0,145.7],[1560.0,119.2],[1570.0,104.8],[1580.0,100.1],[1590.0,97.7],[1600.0,97.2],[1610.0,98.8],[1620.0,98.1],[1630.0,98.1],[1640.0,98.8],[1650.0,98.7],[1660.0,98.5],[1670.0,98.8],[1680.0,98.2],[1690.0,98.2],[1700.0,97.7],[1710.0,98.1],[1720.0,97.1],[1730.0,97.6],[1740.0,97.7],[1750.0,97.4],[1760.0,97.6],[1770.0,98.0],[1780.0,97.6],[1790.0,97.7],[1800.0,97.8],[1810.0,97.6],[1820.0,97.9],
[1830.0,97.9],[1840.0,97.8],[1850.0,97.7],[1860.0,97.7],[1870.0,97.7],[1880.0,97.4],[1890.0,97.3],[1900.0,97.2],[1910.0,96.9],[1920.0,97.2],[1930.0,97.4],[1940.0,97.7],[1950.0,97.1],[1960.0,97.1],[1970.0,96.6],[1980.0,96.7],[1990.0,96.5],[2000.0,97.2],[2010.0,96.6],[2020.0,96.4],[2030.0,96.7],[2040.0,96.8],[2050.0,96.6],[2060.0,96.6],[2070.0,96.5],[2080.0,96.6],[2090.0,96.4],[2100.0,96.6],[2110.0,96.5],[2120.0,96.2],[2130.0,96.2],[2140.0,96.5],[2150.0,96.0],[2160.0,96.2],[2170.0,96.3],[2180.0,96.4],[2190.0,97.0],[2200.0,96.8],[2210.0,96.5],[2220.0,96.6],[2230.0,96.1],[2240.0,96.1],[2250.0,96.6],[2260.0,96.5],[2270.0,96.6],[2280.0,96.4],[2290.0,96.5],[2300.0,96.6],[2310.0,96.9],[2320.0,96.8],[2330.0,96.9],[2340.0,97.2],[2350.0,96.6],[2360.0,97.3],[2370.0,97.4],[2380.0,97.1],[2390.0,97.1],[2400.0,96.8],[2410.0,97.0],[2420.0,97.1],[2430.0,97.1],[2440.0,97.0],[2450.0,97.1],[2460.0,97.1],[2470.0,97.5],[2480.0,96.9],[2490.0,96.8],[2500.0,96.8],[2510.0,97.0],[2520.0,96.7],[2530.0,97.0],[2540.0,97.1],[2550.0,97.2],[2560.0,97.1],[2570.0,97.1],[2580.0,97.1],[2590.0,96.8],[2600.0,97.2],[2610.0,97.1],[2620.0,97.3],[2630.0,97.1],[2640.0,97.1],[2650.0,97.1],[2660.0,97.0],[2670.0,96.8],[2680.0,97.3],[2690.0,97.4],[2700.0,97.3],[2710.0,97.2],[2720.0,97.1],[2730.0,97.2],[2740.0,97.1],[2750.0,97.1],[2760.0,97.1],[2770.0,96.8],[2780.0,96.4],[2790.0,96.6],[2800.0,96.6]];
var OutPr = [[0.0,1788.1],[10.0,1803.3],[20.0,1807.3],[30.0,1813.5],[40.0,1822.0],[50.0,1820.3],[60.0,1823.7],[70.0,1823.7],[80.0,1825.3],[90.0,1831.0],[100.0,1832.1],[110.0,1834.4],[120.0,1834.4],[130.0,1831.5],[140.0,1832.7],[150.0,1834.4],[160.0,1831.5],[170.0,1832.1],[180.0,1830.4],[190.0,1831.0],[200.0,1830.4],[210.0,1829.3],[220.0,1829.9],[230.0,1828.2],[240.0,1831.0],[250.0,1828.7],[260.0,1827.0],[270.0,1829.3],[280.0,1826.5],[290.0,1824.8],[300.0,1824.2],[310.0,1823.7],[320.0,1823.7],[330.0,1823.7],[340.0,1825.3],[350.0,1822.0],[360.0,1820.3],[370.0,1818.0],[380.0,1819.1],[390.0,1816.3],[400.0,1820.8],[410.0,1820.8],[420.0,1819.7],[430.0,1820.3],[440.0,1819.7],[450.0,1819.1],
[460.0,1819.1],[470.0,1821.4],[480.0,1821.4],[490.0,1818.0],[500.0,1816.9],[510.0,1819.1],[520.0,1818.6],[530.0,1816.9],[540.0,1816.9],[550.0,1815.2],[560.0,1814.1],[570.0,1814.6],[580.0,1811.2],[590.0,1814.1],[600.0,1813.5],[610.0,1812.4],[620.0,1809.0],[630.0,1813.5],[640.0,1811.8],[650.0,1815.8],[660.0,1816.3],[670.0,1815.2],[680.0,1815.2],[690.0,1815.8],[700.0,1816.3],[710.0,1818.6],[720.0,1816.9],[730.0,1814.6],[740.0,1816.3],[750.0,1814.1],[760.0,1812.9],[770.0,1812.9],[780.0,1811.2],[790.0,1812.4],[800.0,1815.2],[810.0,1812.4],[820.0,1813.5],[830.0,1811.8],[840.0,1811.2],[850.0,1812.9],[860.0,1809.0],[870.0,1811.2],[880.0,1816.9],[890.0,1815.2],[900.0,1813.5],[910.0,1812.9],
[920.0,1815.8],[930.0,1819.1],[940.0,1818.0],[950.0,1816.3],[960.0,1818.0],[970.0,1815.2],[980.0,1818.6],[990.0,1815.2],[1000.0,1822.5],[1010.0,1822.5],[1020.0,1816.9],[1030.0,1816.3],[1040.0,1817.4],[1050.0,1816.9],[1060.0,1811.8],[1070.0,1818.6],[1080.0,1818.6],[1090.0,1815.2],[1100.0,1816.9],[1110.0,1815.8],[1120.0,1815.8],[1130.0,1816.9],[1140.0,1815.2],[1150.0,1815.2],[1160.0,1818.0],[1170.0,1817.4],[1180.0,1818.0],[1190.0,1819.1],[1200.0,1817.4],[1210.0,1822.5],[1220.0,1313.9],[1230.0,1694.5],[1240.0,1891.3],[1250.0,1813.5],[1260.0,1827.0],[1270.0,1831.5],[1280.0,1827.6],[1290.0,1832.1],[1300.0,1831.5],[1310.0,1829.9],[1320.0,1834.4],[1330.0,1831.0],[1340.0,1827.6],
[1350.0,1829.3],[1360.0,1832.1],[1370.0,1834.9],[1380.0,1834.9],[1390.0,1839.4],[1400.0,1830.4],[1410.0,1832.7],[1420.0,1833.8],[1430.0,1847.9],[1440.0,1770.6],[1450.0,1668.0],[1460.0,1279.5],[1470.0,1138.5],[1480.0,1724.4],[1490.0,1571.0],[1500.0,1740.8],[1510.0,1326.8],[1520.0,1661.2],[1530.0,1859.2],[1540.0,1851.8],[1550.0,1885.7],[1560.0,1876.1],[1570.0,1860.3],[1580.0,1870.5],[1590.0,1851.8],[1600.0,1853.5],[1610.0,1863.7],[1620.0,1854.1],[1630.0,1855.8],[1640.0,1858.6],[1650.0,1857.5],[1660.0,1858.6],[1670.0,1841.7],[1680.0,1824.2],[1690.0,1817.4],[1700.0,1813.5],[1710.0,1814.6],[1720.0,1809.0],[1730.0,1806.2],[1740.0,1803.9],[1750.0,1804.5],[1760.0,1798.8],[1770.0,1793.8],[1780.0,1792.1],[1790.0,1793.2],[1800.0,1792.6],[1810.0,1787.0],[1820.0,1787.0],[1830.0,1786.4],[1840.0,1788.1],[1850.0,1784.7],
[1860.0,1781.4],[1870.0,1780.2],[1880.0,1777.4],[1890.0,1775.7],[1900.0,1775.2],[1910.0,1775.2],[1920.0,1776.8],[1930.0,1778.0],[1940.0,1775.7],[1950.0,1769.5],[1960.0,1769.5],[1970.0,1768.4],[1980.0,1771.2],[1990.0,1770.1],[2000.0,1769.5],[2010.0,1767.8],[2020.0,1764.4],[2030.0,1764.4],[2040.0,1765.0],[2050.0,1762.7],[2060.0,1765.6],[2070.0,1763.9],[2080.0,1762.2],[2090.0,1759.9],[2100.0,1759.9],[2110.0,1762.2],[2120.0,1762.7],[2130.0,1762.2],[2140.0,1762.7],[2150.0,1759.4],[2160.0,1761.1],[2170.0,1761.6],[2180.0,1763.3],[2190.0,1765.0],[2200.0,1768.4],[2210.0,1763.3],[2220.0,1762.7],[2230.0,1759.9],[2240.0,1762.7],[2250.0,1764.4],[2260.0,1765.6],[2270.0,1766.7],[2280.0,1763.3],[2290.0,1763.3],[2300.0,1763.9],[2310.0,1762.7],[2320.0,1762.7],[2330.0,1767.3],[2340.0,1767.8],[2350.0,1765.6],[2360.0,1766.1],
[2370.0,1766.7],[2380.0,1766.7],[2390.0,1765.0],[2400.0,1765.0],[2410.0,1765.0],[2420.0,1765.0],[2430.0,1765.6],[2440.0,1765.6],[2450.0,1763.3],[2460.0,1767.8],[2470.0,1767.8],[2480.0,1765.0],[2490.0,1761.6],[2500.0,1761.6],[2510.0,1762.7],[2520.0,1763.3],[2530.0,1763.3],[2540.0,1763.9],[2550.0,1765.0],[2560.0,1766.1],[2570.0,1765.6],[2580.0,1766.7],[2590.0,1765.6],[2600.0,1768.4],[2610.0,1766.7],[2620.0,1764.4],[2630.0,1764.4],[2640.0,1766.1],[2650.0,1766.1],[2660.0,1766.1],[2670.0,1763.9],[2680.0,1765.6],[2690.0,1765.6],[2700.0,1765.6],[2710.0,1765.0],[2720.0,1765.6],[2730.0,1766.1],[2740.0,1767.3],[2750.0,1766.7],[2760.0,1762.2],[2770.0,1754.9],[2780.0,1750.9],[2790.0,1750.3],[2800.0,1748.1]];
var ERPM = [[0.0,1503.],[10.0,3006.],[20.0,3005.],[30.0,1505.],[40.0,1505.],[50.0,3015.],[60.0,1503.],[70.0,3006.],[80.0,3006.],[90.0,1503.],[100.0,1503.],[110.0,1503.],[120.0,1500.],[130.0,1503.],[140.0,752.],[150.0,1503.],[160.0,1503.],[170.0,1503.],[180.0,1505.],[190.0,1503.],[200.0,1503.],[210.0,3006.],[220.0,1503.],[230.0,1503.],[240.0,1502.],[250.0,1503.],[260.0,3005.],[270.0,1500.],[280.0,1502.],[290.0,1502.],[300.0,1502.],[310.0,752.],[320.0,1502.],[330.0,1502.],[340.0,1504.],[350.0,1502.],[360.0,1502.],[370.0,1501.],[380.0,1502.],[390.0,501.],[400.0,1501.],[410.0,501.],[420.0,751.],[430.0,751.],[440.0,1503.],[450.0,750.],[460.0,1501.],[470.0,1503.],[480.0,501.],[490.0,1501.],[500.0,1501.],[510.0,501.],[520.0,1501.],[530.0,751.],[540.0,1501.],[550.0,1501.],[560.0,1501.],[570.0,1501.],[580.0,1504.],[590.0,1504.],
[600.0,1502.],[610.0,751.],[620.0,1501.],[630.0,1501.],[640.0,1501.],[650.0,1501.],[660.0,1504.],[670.0,1502.],[680.0,751.],[690.0,751.],[700.0,1501.],[710.0,751.],[720.0,1501.],[730.0,1502.],[740.0,1502.],[750.0,751.],[760.0,376.],[770.0,1502.],[780.0,1501.],[790.0,1502.],[800.0,1499.],[810.0,1499.],[820.0,750.],[830.0,1499.],[840.0,501.],[850.0,300.],[860.0,1504.],[870.0,751.],[880.0,1502.],[890.0,1502.],[900.0,1502.],[910.0,751.],[920.0,501.],[930.0,1502.],[940.0,751.],[950.0,1502.],[960.0,501.],[970.0,1504.],[980.0,751.],[990.0,1502.],[1000.0,751.],[1010.0,1502.],[1020.0,500.],[1030.0,751.],[1040.0,1502.],[1050.0,751.],[1060.0,1502.],[1070.0,1502.],[1080.0,751.],[1090.0,751.],[1100.0,1502.],[1110.0,750.],[1120.0,1502.],[1130.0,375.],[1140.0,1502.],[1150.0,300.],[1160.0,375.],[1170.0,1499.],[1180.0,300.],
[1190.0,375.],[1200.0,1502.],[1210.0,373.],[1220.0,368.],[1230.0,502.],[1240.0,495.],[1250.0,1475.],[1260.0,1468.],[1270.0,732.],[1280.0,1461.],[1290.0,1458.],[1300.0,1456.],[1310.0,1456.],[1320.0,1451.],[1330.0,1453.],[1340.0,1453.],[1350.0,726.],[1360.0,1451.],[1370.0,1451.],[1380.0,1451.],[1390.0,1451.],[1400.0,1449.],[1410.0,1449.],[1420.0,1449.],[1430.0,1944.],[1440.0,1197.],[1450.0,786.],[1460.0,0.],[1470.0,0.],[1480.0,1079.],[1490.0,1070.],[1500.0,1085.],[1510.0,923.],[1520.0,1121.],[1530.0,1293.],[1540.0,1762.],[1550.0,367.],[1560.0,352.],[1570.0,186.],[1580.0,892.],[1590.0,892.],[1600.0,892.],[1610.0,892.],[1620.0,892.],[1630.0,892.],[1640.0,892.],[1650.0,892.],[1660.0,892.],[1670.0,892.],[1680.0,0.],[1690.0,0.],[1700.0,0.],[1710.0,0.],[1720.0,0.],[1730.0,0.],[1740.0,0.],[1750.0,0.],[1760.0,0.],
[1770.0,0.],[1780.0,0.],[1790.0,0.],[1800.0,0.],[1810.0,0.],[1820.0,0.],[1830.0,0.],[1840.0,0.],[1850.0,0.],[1860.0,0.],[1870.0,0.],[1880.0,0.],[1890.0,0.],[1900.0,0.],[1910.0,0.],[1920.0,0.],[1930.0,0.],[1940.0,0.],[1950.0,0.],[1960.0,0.],[1970.0,0.],[1980.0,0.],[1990.0,0.],[2000.0,0.],[2010.0,0.],[2020.0,0.],[2030.0,0.],[2040.0,0.],[2050.0,0.],[2060.0,0.],[2070.0,0.],[2080.0,0.],[2090.0,0.],[2100.0,0.],[2110.0,0.],[2120.0,0.],[2130.0,0.],[2140.0,0.],[2150.0,0.],[2160.0,0.],[2170.0,0.],[2180.0,0.],[2190.0,0.],[2200.0,0.],[2210.0,0.],[2220.0,0.],[2230.0,0.],[2240.0,0.],[2250.0,0.],[2260.0,0.],[2270.0,0.],[2280.0,0.],[2290.0,0.],[2300.0,0.],[2310.0,0.],[2320.0,0.],[2330.0,0.],[2340.0,0.],[2350.0,0.],[2360.0,0.],[2370.0,0.],[2380.0,0.],[2390.0,0.],[2400.0,0.],[2410.0,0.],[2420.0,0.],[2430.0,0.],[2440.0,0.],
[2450.0,0.],[2460.0,0.],[2470.0,0.],[2480.0,0.],[2490.0,0.],[2500.0,0.],[2510.0,0.],[2520.0,0.],[2530.0,0.],[2540.0,0.],[2550.0,0.],[2560.0,0.],[2570.0,0.],[2580.0,0.],[2590.0,0.],[2600.0,0.],[2610.0,0.],[2620.0,0.],[2630.0,0.],[2640.0,0.],[2650.0,0.],[2660.0,0.],[2670.0,0.],[2680.0,0.],[2690.0,0.],[2700.0,0.],[2710.0,0.],[2720.0,0.],[2730.0,0.],[2740.0,0.],[2750.0,0.],[2760.0,0.],[2770.0,0.],[2780.0,0.],[2790.0,0.],[2800.0,0.]];

    plot = $.jqplot('chart', [InPr, OutPr, ERPM],
      {
        // Title:'Plot with Zooming and 3 Y Axes',
        seriesDefaults: {showMarker:false},
        series:[{},{yaxis:'y2axis'}, {yaxis:'y3axis'}],
        cursor: {tooltipLocation:'sw', zoom:true, showTooltipGridPosition:true},
        axesDefaults:{useSeriesColor: true},
        axes:{xaxis:{min:0, max:1600}, yaxis:{min:0, max:600}, 
        y2axis:{min:1000, max:2000, numberTicks:9, tickOptions:{showGridline:false}}, 
        y3axis:{}}
      }
    );
});
</script>

  </head>
  <body>
<?php include "nav.inc"; ?>
    <p>Click and drag to zoom.  Double click on plot or click "Reset Zoom" button to reset zoom.</p>
    <div id="chart" style="height:300px; width:600px;"></div>
<div style="padding-top:20px;">
<button value="reset" type="button" onclick="plot.resetZoom();">Zoom Out</button>
</div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/zoomOptions.html.











































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<!DOCTYPE html>
<html>
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Simple Test</title>
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>
  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.logAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.dateAxisRenderer.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.highlighter.js"></script>

  <!-- END: load jqplot -->
  <style type="text/css" media="screen">
    .jqplot-axis {
      font-size: 0.85em;
    }
    .jqplot-axis{
      font-size: 0.75em;
    }
  </style>
  <script type="text/javascript" language="javascript">
  
  $(document).ready(function(){
      $.jqplot.config.enablePlugins = true;

var goog = [["6/22/2009",425.32],["6/15/2009",420.09],["6/8/2009",424.84],["6/1/2009",444.32],["5/26/2009",417.23],["5/18/2009",393.5],["5/11/2009",390],["5/4/2009",407.33],["4/27/2009",393.69],["4/20/2009",389.49],["4/13/2009",392.24],["4/6/2009",372.5],["3/30/2009",369.78],["3/23/2009",347.7],["3/16/2009",330.16],
["3/9/2009",324.42],["3/2/2009",308.57],["2/23/2009",337.99],["2/17/2009",346.45],["2/9/2009",357.68],["2/2/2009",371.28],["1/26/2009",338.53],["1/20/2009",324.7],["1/12/2009",299.67],["1/5/2009",315.07],["12/29/2008",321.32],["12/22/2008",300.36],["12/15/2008",310.17],["12/8/2008",315.76],["12/1/2008",283.99],["11/24/2008",292.96],["11/17/2008",262.43],["11/10/2008",310.02],["11/3/2008",331.14],["10/27/2008",359.36],["10/20/2008",339.29],["10/13/2008",372.54],["10/6/2008",332],["9/29/2008",386.91],["9/22/2008",431.04],["9/15/2008",449.15],["9/8/2008",437.66],["9/2/2008",444.25],["8/25/2008",463.29],
["8/18/2008",490.59],["8/11/2008",510.15],["8/4/2008",495.01],["7/28/2008",467.86],["7/21/2008",491.98],["7/14/2008",481.32],["7/7/2008",533.8],["6/30/2008",537],["6/23/2008",528.07],["6/16/2008",546.43],["6/9/2008",571.51],["6/2/2008",567],["5/27/2008",585.8],["5/19/2008",544.62],["5/12/2008",580.07],["5/5/2008",573.2],["4/28/2008",581.29],["4/21/2008",544.06],["4/14/2008",539.41],["4/7/2008",457.45],["3/31/2008",471.09],["3/24/2008",438.08],["3/17/2008",433.55],["3/10/2008",437.92],["3/3/2008",433.35],["2/25/2008",471.18],["2/19/2008",507.8],["2/11/2008",529.64],["2/4/2008",516.69],["1/28/2008",515.9],
["1/22/2008",566.4],["1/14/2008",600.25],["1/7/2008",638.25],["12/31/2007",657],["12/24/2007",702.53],["12/17/2007",696.69],["12/10/2007",689.96],["12/3/2007",714.87],["11/26/2007",693],["11/19/2007",676.7],["11/12/2007",633.63],["11/5/2007",663.97],["10/29/2007",711.25],["10/22/2007",674.6],["10/15/2007",644.71],["10/8/2007",637.39],["10/1/2007",594.05],["9/24/2007",567.27],["9/17/2007",560.1],["9/10/2007",528.75],["9/4/2007",519.35],["8/27/2007",515.25],["8/20/2007",515]];


    var opts = {
        title: 'Google, Inc.',
        series: [{
            neighborThreshold: 0
        }],
        axes: {
            xaxis: {
              renderer:$.jqplot.DateAxisRenderer,
              min:'August 1, 2007',
              tickInterval: "6 months",
              tickOptions:{formatString:"%Y/%#m/%#d"}
            },
            yaxis: {
                renderer: $.jqplot.LogAxisRenderer,
                tickOptions:{formatString:'$%.2f'}
            }
        },
        cursor:{zoom:true},
        highlighter:{show:true}
    };

    plot1 = $.jqplot('chart1', [goog], opts);

    opts.cursor = {zoom:true, constrainOutsideZoom: false};

    plot2 = $.jqplot('chart2', [goog], opts);

    opts.cursor = {zoom:true, showTooltip:true, followMouse: true, showTooltipOutsideZoom: true, constrainOutsideZoom: false};
    
    plot3 = $.jqplot('chart3', [goog], opts);
  });
  </script>
  </head>
  <body>
<?php include "nav.inc"; ?>

<p>Zooming has been enhanced to maintain plot zoom while the mouse moves over the entire document, not just the plot.  Two new options have been added to the cursor plugin to further enhance zooming:</p>

<dl>
   <dt>constrainOutsideZoom</dt>
    <dd>True to limit the resulting zoom area to the edges of grid, even if the cursor is outside of the grid.  That is, you can't expand the axis ranges by moving the cursor outside of the plot area when this is true.  If set to false, you can effectively zoom out by mousing outside of the plot region.  Default false.</dd>
    <dt>showTooltipOutsideZoom</dt>
    <dd>True to keep showing and updating the tooltip even when the cursor is outside of the plot area.  Not applicable if zoomOutsidePlot is false.  Default false</dd>
</dl>

<p>The fist plot demonstrates the default functionality where you can move the mouse off of the plot while zooming but the actual area zoomed will not extend beyond the axes.</p>
    <div id="chart1" style="margin-top:20px; margin-left:20px; width:400px; height:200px;"></div>
    <div style="padding-top:20px"><button value="reset" type="button" onclick="plot1.resetZoom();">Reset Zoom</button></div>

<p>The second plot sets constrainOutsideZoom to false, so zooming will not only function when the mouse is outside of the plot, but the zoom range will be extended to the mouse position outside of the grid.</p>
    <div id="chart2" style="margin-top:20px; margin-left:20px; width:400px; height:200px;"></div>
    <div style="padding-top:20px"><button value="reset" type="button" onclick="plot2.resetZoom();">Reset Zoom</button></div>

<p>The third plot is like the third, but showTooltipOutsideZoom is true and the tooltip is set to follow the mouse, so you have an idea of what your range is while zooming.</p>
    <div id="chart3" style="margin-top:20px; margin-left:20px; width:400px; height:200px;"></div>
    <div style="padding-top:20px"><button value="reset" type="button" onclick="plot3.resetZoom();">Reset Zoom</button></div>
  </body>
</html>

Added Site/Site_W/jpqplot/examples/zoomProxy.html.

























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<!DOCTYPE html>
<html>
<head>
  <!-- Use Compatibility mode in IE -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <link rel="stylesheet" type="text/css" href="../jquery.jqplot.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  
  <!--[if IE]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
  <!-- BEGIN: load jquery -->
  <script language="javascript" type="text/javascript" src="../jquery-1.4.2.min.js"></script>

  <!-- END: load jquery -->
  
  <!-- BEGIN: load jqplot -->
  <script language="javascript" type="text/javascript" src="../jquery.jqplot.js"></script>
  <script language="javascript" type="text/javascript" src="../plugins/jqplot.cursor.js"></script>
	
	<style type="text/css">
	  .jqplot-cursor-legend {
	    width: 160px;
	    font-family: "Courier New";
	    font-size: 0.8em;
	  }
	  
	  td.jqplot-cursor-legend-swatch {
	    width: 1.3em;
	  }
	  
	  div.jqplot-cursor-legend-swatch {
/*      width: 15px;*/
	  }
	</style>
	
	<script type="text/javascript" language="javascript">
		$(document).ready(function(){
      $.jqplot.config.enablePlugins = true;
		  
var InPr = [[0.0,85.0],[10.0,87.4],[20.0,90.0],[30.0,91.3],[40.0,93.5],[50.0,94.1],[60.0,95.4],[70.0,95.8],[80.0,96.1],[90.0,97.6],[100.0,97.4],[110.0,97.7],[120.0,97.9],[130.0,98.3],[140.0,97.9],[150.0,98.4],[160.0,99.8],[170.0,100.5],[180.0,100.4],[190.0,100.3],[200.0,102.9],[210.0,104.1],[220.0,104.4],[230.0,103.9],[240.0,104.4],[250.0,104.0],[260.0,103.9],[270.0,103.5],[280.0,105.4],[290.0,105.7],[300.0,105.7],[310.0,105.3],[320.0,105.0],[330.0,105.1],[340.0,105.0],[350.0,105.1],[360.0,104.7],[370.0,104.4],[380.0,104.3],[390.0,105.7],[400.0,106.4],[410.0,105.7],[420.0,105.4],[430.0,105.7],[440.0,105.7],[450.0,105.9],[460.0,105.3],[470.0,105.7],[480.0,105.8],[490.0,105.4],[500.0,105.4],[510.0,105.4],[520.0,105.6],[530.0,104.9],[540.0,104.8],[550.0,105.2],[560.0,105.2],[570.0,105.1],[580.0,104.8],[590.0,104.6],[600.0,104.3],[610.0,104.2],[620.0,104.1],[630.0,104.7],[640.0,104.6],[650.0,104.7],[660.0,104.6],[670.0,104.4],[680.0,106.8],[690.0,106.6],
[700.0,106.3],[710.0,107.1],[720.0,106.2],[730.0,106.1],[740.0,106.7],[750.0,106.5],[760.0,106.8],[770.0,106.7],[780.0,106.6],[790.0,106.7],[800.0,106.8],[810.0,106.4],[820.0,106.7],[830.0,106.5],[840.0,106.9],[850.0,106.7],[860.0,106.7],[870.0,106.8],[880.0,107.1],[890.0,106.6],[900.0,106.8],[910.0,106.9],[920.0,106.8],[930.0,107.3],[940.0,106.9],[950.0,106.5],[960.0,107.2],[970.0,107.0],[980.0,106.9],[990.0,107.2],[1000.0,107.7],[1010.0,107.6],[1020.0,107.1],[1030.0,107.6],[1040.0,107.2],[1050.0,107.2],[1060.0,107.5],[1070.0,107.7],[1080.0,107.3],[1090.0,107.0],[1100.0,107.7],[1110.0,107.0],[1120.0,107.8],[1130.0,107.8],[1140.0,107.7],[1150.0,107.4],[1160.0,107.8],[1170.0,107.8],[1180.0,107.6],[1190.0,107.7],[1200.0,107.4],[1210.0,108.0],[1220.0,372.6],[1230.0,90.4],[1240.0,125.0],[1250.0,110.4],[1260.0,108.5],[1270.0,109.7],[1280.0,108.9],[1290.0,109.6],[1300.0,110.2],[1310.0,110.0],[1320.0,110.7],[1330.0,110.3],[1340.0,110.6],[1350.0,110.5],
[1360.0,110.8],[1370.0,110.6],[1380.0,111.0],[1390.0,113.0],[1400.0,112.1],[1410.0,112.3],[1420.0,112.3],[1430.0,137.6],[1440.0,179.0],[1450.0,216.9],[1460.0,399.2],[1470.0,433.6],[1480.0,203.5],[1490.0,223.3],[1500.0,229.8],[1510.0,416.9],[1520.0,198.8],[1530.0,208.7],[1540.0,172.0],[1550.0,145.7],[1560.0,119.2],[1570.0,104.8],[1580.0,100.1],[1590.0,97.7],[1600.0,97.2],[1610.0,98.8],[1620.0,98.1],[1630.0,98.1],[1640.0,98.8],[1650.0,98.7],[1660.0,98.5],[1670.0,98.8],[1680.0,98.2],[1690.0,98.2],[1700.0,97.7],[1710.0,98.1],[1720.0,97.1],[1730.0,97.6],[1740.0,97.7],[1750.0,97.4],[1760.0,97.6],[1770.0,98.0],[1780.0,97.6],[1790.0,97.7],[1800.0,97.8],[1810.0,97.6],[1820.0,97.9],
[1830.0,97.9],[1840.0,97.8],[1850.0,97.7],[1860.0,97.7],[1870.0,97.7],[1880.0,97.4],[1890.0,97.3],[1900.0,97.2],[1910.0,96.9],[1920.0,97.2],[1930.0,97.4],[1940.0,97.7],[1950.0,97.1],[1960.0,97.1],[1970.0,96.6],[1980.0,96.7],[1990.0,96.5],[2000.0,97.2],[2010.0,96.6],[2020.0,96.4],[2030.0,96.7],[2040.0,96.8],[2050.0,96.6],[2060.0,96.6],[2070.0,96.5],[2080.0,96.6],[2090.0,96.4],[2100.0,96.6],[2110.0,96.5],[2120.0,96.2],[2130.0,96.2],[2140.0,96.5],[2150.0,96.0],[2160.0,96.2],[2170.0,96.3],[2180.0,96.4],[2190.0,97.0],[2200.0,96.8],[2210.0,96.5],[2220.0,96.6],[2230.0,96.1],[2240.0,96.1],[2250.0,96.6],[2260.0,96.5],[2270.0,96.6],[2280.0,96.4],[2290.0,96.5],[2300.0,96.6],[2310.0,96.9],[2320.0,96.8],[2330.0,96.9],[2340.0,97.2],[2350.0,96.6],[2360.0,97.3],[2370.0,97.4],[2380.0,97.1],[2390.0,97.1],[2400.0,96.8],[2410.0,97.0],[2420.0,97.1],[2430.0,97.1],[2440.0,97.0],[2450.0,97.1],[2460.0,97.1],[2470.0,97.5],[2480.0,96.9],[2490.0,96.8],[2500.0,96.8],[2510.0,97.0],[2520.0,96.7],[2530.0,97.0],[2540.0,97.1],[2550.0,97.2],[2560.0,97.1],[2570.0,97.1],[2580.0,97.1],[2590.0,96.8],[2600.0,97.2],[2610.0,97.1],[2620.0,97.3],[2630.0,97.1],[2640.0,97.1],[2650.0,97.1],[2660.0,97.0],[2670.0,96.8],[2680.0,97.3],[2690.0,97.4],[2700.0,97.3],[2710.0,97.2],[2720.0,97.1],[2730.0,97.2],[2740.0,97.1],[2750.0,97.1],[2760.0,97.1],[2770.0,96.8],[2780.0,96.4],[2790.0,96.6],[2800.0,96.6]];
var OutPr = [[0.0,1788.1],[10.0,1803.3],[20.0,1807.3],[30.0,1813.5],[40.0,1822.0],[50.0,1820.3],[60.0,1823.7],[70.0,1823.7],[80.0,1825.3],[90.0,1831.0],[100.0,1832.1],[110.0,1834.4],[120.0,1834.4],[130.0,1831.5],[140.0,1832.7],[150.0,1834.4],[160.0,1831.5],[170.0,1832.1],[180.0,1830.4],[190.0,1831.0],[200.0,1830.4],[210.0,1829.3],[220.0,1829.9],[230.0,1828.2],[240.0,1831.0],[250.0,1828.7],[260.0,1827.0],[270.0,1829.3],[280.0,1826.5],[290.0,1824.8],[300.0,1824.2],[310.0,1823.7],[320.0,1823.7],[330.0,1823.7],[340.0,1825.3],[350.0,1822.0],[360.0,1820.3],[370.0,1818.0],[380.0,1819.1],[390.0,1816.3],[400.0,1820.8],[410.0,1820.8],[420.0,1819.7],[430.0,1820.3],[440.0,1819.7],[450.0,1819.1],
[460.0,1819.1],[470.0,1821.4],[480.0,1821.4],[490.0,1818.0],[500.0,1816.9],[510.0,1819.1],[520.0,1818.6],[530.0,1816.9],[540.0,1816.9],[550.0,1815.2],[560.0,1814.1],[570.0,1814.6],[580.0,1811.2],[590.0,1814.1],[600.0,1813.5],[610.0,1812.4],[620.0,1809.0],[630.0,1813.5],[640.0,1811.8],[650.0,1815.8],[660.0,1816.3],[670.0,1815.2],[680.0,1815.2],[690.0,1815.8],[700.0,1816.3],[710.0,1818.6],[720.0,1816.9],[730.0,1814.6],[740.0,1816.3],[750.0,1814.1],[760.0,1812.9],[770.0,1812.9],[780.0,1811.2],[790.0,1812.4],[800.0,1815.2],[810.0,1812.4],[820.0,1813.5],[830.0,1811.8],[840.0,1811.2],[850.0,1812.9],[860.0,1809.0],[870.0,1811.2],[880.0,1816.9],[890.0,1815.2],[900.0,1813.5],[910.0,1812.9],
[920.0,1815.8],[930.0,1819.1],[940.0,1818.0],[950.0,1816.3],[960.0,1818.0],[970.0,1815.2],[980.0,1818.6],[990.0,1815.2],[1000.0,1822.5],[1010.0,1822.5],[1020.0,1816.9],[1030.0,1816.3],[1040.0,1817.4],[1050.0,1816.9],[1060.0,1811.8],[1070.0,1818.6],[1080.0,1818.6],[1090.0,1815.2],[1100.0,1816.9],[1110.0,1815.8],[1120.0,1815.8],[1130.0,1816.9],[1140.0,1815.2],[1150.0,1815.2],[1160.0,1818.0],[1170.0,1817.4],[1180.0,1818.0],[1190.0,1819.1],[1200.0,1817.4],[1210.0,1822.5],[1220.0,1313.9],[1230.0,1694.5],[1240.0,1891.3],[1250.0,1813.5],[1260.0,1827.0],[1270.0,1831.5],[1280.0,1827.6],[1290.0,1832.1],[1300.0,1831.5],[1310.0,1829.9],[1320.0,1834.4],[1330.0,1831.0],[1340.0,1827.6],
[1350.0,1829.3],[1360.0,1832.1],[1370.0,1834.9],[1380.0,1834.9],[1390.0,1839.4],[1400.0,1830.4],[1410.0,1832.7],[1420.0,1833.8],[1430.0,1847.9],[1440.0,1770.6],[1450.0,1668.0],[1460.0,1279.5],[1470.0,1138.5],[1480.0,1724.4],[1490.0,1571.0],[1500.0,1740.8],[1510.0,1326.8],[1520.0,1661.2],[1530.0,1859.2],[1540.0,1851.8],[1550.0,1885.7],[1560.0,1876.1],[1570.0,1860.3],[1580.0,1870.5],[1590.0,1851.8],[1600.0,1853.5],[1610.0,1863.7],[1620.0,1854.1],[1630.0,1855.8],[1640.0,1858.6],[1650.0,1857.5],[1660.0,1858.6],[1670.0,1841.7],[1680.0,1824.2],[1690.0,1817.4],[1700.0,1813.5],[1710.0,1814.6],[1720.0,1809.0],[1730.0,1806.2],[1740.0,1803.9],[1750.0,1804.5],[1760.0,1798.8],[1770.0,1793.8],[1780.0,1792.1],[1790.0,1793.2],[1800.0,1792.6],[1810.0,1787.0],[1820.0,1787.0],[1830.0,1786.4],[1840.0,1788.1],[1850.0,1784.7],
[1860.0,1781.4],[1870.0,1780.2],[1880.0,1777.4],[1890.0,1775.7],[1900.0,1775.2],[1910.0,1775.2],[1920.0,1776.8],[1930.0,1778.0],[1940.0,1775.7],[1950.0,1769.5],[1960.0,1769.5],[1970.0,1768.4],[1980.0,1771.2],[1990.0,1770.1],[2000.0,1769.5],[2010.0,1767.8],[2020.0,1764.4],[2030.0,1764.4],[2040.0,1765.0],[2050.0,1762.7],[2060.0,1765.6],[2070.0,1763.9],[2080.0,1762.2],[2090.0,1759.9],[2100.0,1759.9],[2110.0,1762.2],[2120.0,1762.7],[2130.0,1762.2],[2140.0,1762.7],[2150.0,1759.4],[2160.0,1761.1],[2170.0,1761.6],[2180.0,1763.3],[2190.0,1765.0],[2200.0,1768.4],[2210.0,1763.3],[2220.0,1762.7],[2230.0,1759.9],[2240.0,1762.7],[2250.0,1764.4],[2260.0,1765.6],[2270.0,1766.7],[2280.0,1763.3],[2290.0,1763.3],[2300.0,1763.9],[2310.0,1762.7],[2320.0,1762.7],[2330.0,1767.3],[2340.0,1767.8],[2350.0,1765.6],[2360.0,1766.1],
[2370.0,1766.7],[2380.0,1766.7],[2390.0,1765.0],[2400.0,1765.0],[2410.0,1765.0],[2420.0,1765.0],[2430.0,1765.6],[2440.0,1765.6],[2450.0,1763.3],[2460.0,1767.8],[2470.0,1767.8],[2480.0,1765.0],[2490.0,1761.6],[2500.0,1761.6],[2510.0,1762.7],[2520.0,1763.3],[2530.0,1763.3],[2540.0,1763.9],[2550.0,1765.0],[2560.0,1766.1],[2570.0,1765.6],[2580.0,1766.7],[2590.0,1765.6],[2600.0,1768.4],[2610.0,1766.7],[2620.0,1764.4],[2630.0,1764.4],[2640.0,1766.1],[2650.0,1766.1],[2660.0,1766.1],[2670.0,1763.9],[2680.0,1765.6],[2690.0,1765.6],[2700.0,1765.6],[2710.0,1765.0],[2720.0,1765.6],[2730.0,1766.1],[2740.0,1767.3],[2750.0,1766.7],[2760.0,1762.2],[2770.0,1754.9],[2780.0,1750.9],[2790.0,1750.3],[2800.0,1748.1]];
var ERPM = [[0.0,1503.],[10.0,3006.],[20.0,3005.],[30.0,1505.],[40.0,1505.],[50.0,3015.],[60.0,1503.],[70.0,3006.],[80.0,3006.],[90.0,1503.],[100.0,1503.],[110.0,1503.],[120.0,1500.],[130.0,1503.],[140.0,752.],[150.0,1503.],[160.0,1503.],[170.0,1503.],[180.0,1505.],[190.0,1503.],[200.0,1503.],[210.0,3006.],[220.0,1503.],[230.0,1503.],[240.0,1502.],[250.0,1503.],[260.0,3005.],[270.0,1500.],[280.0,1502.],[290.0,1502.],[300.0,1502.],[310.0,752.],[320.0,1502.],[330.0,1502.],[340.0,1504.],[350.0,1502.],[360.0,1502.],[370.0,1501.],[380.0,1502.],[390.0,501.],[400.0,1501.],[410.0,501.],[420.0,751.],[430.0,751.],[440.0,1503.],[450.0,750.],[460.0,1501.],[470.0,1503.],[480.0,501.],[490.0,1501.],[500.0,1501.],[510.0,501.],[520.0,1501.],[530.0,751.],[540.0,1501.],[550.0,1501.],[560.0,1501.],[570.0,1501.],[580.0,1504.],[590.0,1504.],
[600.0,1502.],[610.0,751.],[620.0,1501.],[630.0,1501.],[640.0,1501.],[650.0,1501.],[660.0,1504.],[670.0,1502.],[680.0,751.],[690.0,751.],[700.0,1501.],[710.0,751.],[720.0,1501.],[730.0,1502.],[740.0,1502.],[750.0,751.],[760.0,376.],[770.0,1502.],[780.0,1501.],[790.0,1502.],[800.0,1499.],[810.0,1499.],[820.0,750.],[830.0,1499.],[840.0,501.],[850.0,300.],[860.0,1504.],[870.0,751.],[880.0,1502.],[890.0,1502.],[900.0,1502.],[910.0,751.],[920.0,501.],[930.0,1502.],[940.0,751.],[950.0,1502.],[960.0,501.],[970.0,1504.],[980.0,751.],[990.0,1502.],[1000.0,751.],[1010.0,1502.],[1020.0,500.],[1030.0,751.],[1040.0,1502.],[1050.0,751.],[1060.0,1502.],[1070.0,1502.],[1080.0,751.],[1090.0,751.],[1100.0,1502.],[1110.0,750.],[1120.0,1502.],[1130.0,375.],[1140.0,1502.],[1150.0,300.],[1160.0,375.],[1170.0,1499.],[1180.0,300.],
[1190.0,375.],[1200.0,1502.],[1210.0,373.],[1220.0,368.],[1230.0,502.],[1240.0,495.],[1250.0,1475.],[1260.0,1468.],[1270.0,732.],[1280.0,1461.],[1290.0,1458.],[1300.0,1456.],[1310.0,1456.],[1320.0,1451.],[1330.0,1453.],[1340.0,1453.],[1350.0,726.],[1360.0,1451.],[1370.0,1451.],[1380.0,1451.],[1390.0,1451.],[1400.0,1449.],[1410.0,1449.],[1420.0,1449.],[1430.0,1944.],[1440.0,1197.],[1450.0,786.],[1460.0,0.],[1470.0,0.],[1480.0,1079.],[1490.0,1070.],[1500.0,1085.],[1510.0,923.],[1520.0,1121.],[1530.0,1293.],[1540.0,1762.],[1550.0,367.],[1560.0,352.],[1570.0,186.],[1580.0,892.],[1590.0,892.],[1600.0,892.],[1610.0,892.],[1620.0,892.],[1630.0,892.],[1640.0,892.],[1650.0,892.],[1660.0,892.],[1670.0,892.],[1680.0,0.],[1690.0,0.],[1700.0,0.],[1710.0,0.],[1720.0,0.],[1730.0,0.],[1740.0,0.],[1750.0,0.],[1760.0,0.],
[1770.0,0.],[1780.0,0.],[1790.0,0.],[1800.0,0.],[1810.0,0.],[1820.0,0.],[1830.0,0.],[1840.0,0.],[1850.0,0.],[1860.0,0.],[1870.0,0.],[1880.0,0.],[1890.0,0.],[1900.0,0.],[1910.0,0.],[1920.0,0.],[1930.0,0.],[1940.0,0.],[1950.0,0.],[1960.0,0.],[1970.0,0.],[1980.0,0.],[1990.0,0.],[2000.0,0.],[2010.0,0.],[2020.0,0.],[2030.0,0.],[2040.0,0.],[2050.0,0.],[2060.0,0.],[2070.0,0.],[2080.0,0.],[2090.0,0.],[2100.0,0.],[2110.0,0.],[2120.0,0.],[2130.0,0.],[2140.0,0.],[2150.0,0.],[2160.0,0.],[2170.0,0.],[2180.0,0.],[2190.0,0.],[2200.0,0.],[2210.0,0.],[2220.0,0.],[2230.0,0.],[2240.0,0.],[2250.0,0.],[2260.0,0.],[2270.0,0.],[2280.0,0.],[2290.0,0.],[2300.0,0.],[2310.0,0.],[2320.0,0.],[2330.0,0.],[2340.0,0.],[2350.0,0.],[2360.0,0.],[2370.0,0.],[2380.0,0.],[2390.0,0.],[2400.0,0.],[2410.0,0.],[2420.0,0.],[2430.0,0.],[2440.0,0.],
[2450.0,0.],[2460.0,0.],[2470.0,0.],[2480.0,0.],[2490.0,0.],[2500.0,0.],[2510.0,0.],[2520.0,0.],[2530.0,0.],[2540.0,0.],[2550.0,0.],[2560.0,0.],[2570.0,0.],[2580.0,0.],[2590.0,0.],[2600.0,0.],[2610.0,0.],[2620.0,0.],[2630.0,0.],[2640.0,0.],[2650.0,0.],[2660.0,0.],[2670.0,0.],[2680.0,0.],[2690.0,0.],[2700.0,0.],[2710.0,0.],[2720.0,0.],[2730.0,0.],[2740.0,0.],[2750.0,0.],[2760.0,0.],[2770.0,0.],[2780.0,0.],[2790.0,0.],[2800.0,0.]];		  

		  line0 = [-4, -7, 9, 16, 3, 5, -2, 1, -6, -3, -2, 8];
		  line1 = [[2, 5], [5, 7], [5.2, 11]];
      
      targetPlot = $.jqplot('chart1', [InPr, OutPr, ERPM], {
        seriesDefaults:{neighborThreshold:0, showMarker: false},
        series:[
          {label:'P In'},
          {label:'P Out', yaxis:'y2axis'},
          {label:'RPM', yaxis:'y3axis'},
        ],
        cursor:{
          zoom:true,
          showTooltip:false
        },
        legend:{
          location:'nw',
          xoffset: 270,
          yoffset: 100
        },
        axesDefaults:{tickOptions:{formatString:"%d"}, autoscale:false, useSeriesColor:true}
          
      }); 
      
      controllerPlot = $.jqplot('chart2', [InPr, OutPr, ERPM], {
        seriesDefaults:{neighborThreshold:0, showMarker: false},
        series:[
          {label:'P In'},
          {label:'P Out', yaxis:'y2axis'},
          {label:'RPM', yaxis:'y3axis'},
        ],
        cursor:{
          showTooltip: false,
          zoom:true,
          constrainZoomTo: 'x'
        },
        axesDefaults:{tickOptions:{formatString:"%d"}, autoscale:false, useSeriesColor:true}
      });
      
      $.jqplot.Cursor.zoomProxy(targetPlot, controllerPlot);
      
    });
</script>
		
</head>
<body>
<?php include "nav.inc"; ?>
<div class="jqPlot" id="chart1" style="height:320px; width:600px;"></div>
<div class="jqPlot" id="chart2" style="margin-top: 30px; height:100px; width:600px;"></div>
<button value="reset" onclick="controllerPlot.resetZoom();">Reset</button>
 
</body>


</html>

Added Site/Site_W/jpqplot/excanvas.js.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
// Copyright 2006 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


// Known Issues:
//
// * Patterns only support repeat.
// * Radial gradient are not implemented. The VML version of these look very
//   different from the canvas one.
// * Clipping paths are not implemented.
// * Coordsize. The width and height attribute have higher priority than the
//   width and height style values which isn't correct.
// * Painting mode isn't implemented.
// * Canvas width/height should is using content-box by default. IE in
//   Quirks mode will draw the canvas using border-box. Either change your
//   doctype to HTML5
//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
//   or use Box Sizing Behavior from WebFX
//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
// * Non uniform scaling does not correctly scale strokes.
// * Optimize. There is always room for speed improvements.

// Only add this code if we do not already have a canvas implementation
if (!document.createElement('canvas').getContext) {

(function() {

  // alias some functions to make (compiled) code shorter
  var m = Math;
  var mr = m.round;
  var ms = m.sin;
  var mc = m.cos;
  var abs = m.abs;
  var sqrt = m.sqrt;

  // this is used for sub pixel precision
  var Z = 10;
  var Z2 = Z / 2;

  var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];

  /**
   * This funtion is assigned to the <canvas> elements as element.getContext().
   * @this {HTMLElement}
   * @return {CanvasRenderingContext2D_}
   */
  function getContext() {
    return this.context_ ||
        (this.context_ = new CanvasRenderingContext2D_(this));
  }

  var slice = Array.prototype.slice;

  /**
   * Binds a function to an object. The returned function will always use the
   * passed in {@code obj} as {@code this}.
   *
   * Example:
   *
   *   g = bind(f, obj, a, b)
   *   g(c, d) // will do f.call(obj, a, b, c, d)
   *
   * @param {Function} f The function to bind the object to
   * @param {Object} obj The object that should act as this when the function
   *     is called
   * @param {*} var_args Rest arguments that will be used as the initial
   *     arguments when the function is called
   * @return {Function} A new function that has bound this
   */
  function bind(f, obj, var_args) {
    var a = slice.call(arguments, 2);
    return function() {
      return f.apply(obj, a.concat(slice.call(arguments)));
    };
  }

  function encodeHtmlAttribute(s) {
    return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
  }

  function addNamespace(doc, prefix, urn) {
    if (!doc.namespaces[prefix]) {
      doc.namespaces.add(prefix, urn, '#default#VML');
    }
  }

  function addNamespacesAndStylesheet(doc) {
    addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
    addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');

    // Setup default CSS.  Only add one style sheet per document
    if (!doc.styleSheets['ex_canvas_']) {
      var ss = doc.createStyleSheet();
      ss.owningElement.id = 'ex_canvas_';
      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
          // default size is 300x150 in Gecko and Opera
          'text-align:left;width:300px;height:150px}';
    }
  }

  // Add namespaces and stylesheet at startup.
  addNamespacesAndStylesheet(document);

  var G_vmlCanvasManager_ = {
    init: function(opt_doc) {
      var doc = opt_doc || document;
      // Create a dummy element so that IE will allow canvas elements to be
      // recognized.
      doc.createElement('canvas');
      doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
    },

    init_: function(doc) {
      // find all canvas elements
      var els = doc.getElementsByTagName('canvas');
      for (var i = 0; i < els.length; i++) {
        this.initElement(els[i]);
      }
    },

    /**
     * Public initializes a canvas element so that it can be used as canvas
     * element from now on. This is called automatically before the page is
     * loaded but if you are creating elements using createElement you need to
     * make sure this is called on the element.
     * @param {HTMLElement} el The canvas element to initialize.
     * @return {HTMLElement} the element that was created.
     */
    initElement: function(el) {
      if (!el.getContext) {
        el.getContext = getContext;

        // Add namespaces and stylesheet to document of the element.
        addNamespacesAndStylesheet(el.ownerDocument);

        // Remove fallback content. There is no way to hide text nodes so we
        // just remove all childNodes. We could hide all elements and remove
        // text nodes but who really cares about the fallback content.
        el.innerHTML = '';

        // do not use inline function because that will leak memory
        el.attachEvent('onpropertychange', onPropertyChange);
        el.attachEvent('onresize', onResize);

        var attrs = el.attributes;
        if (attrs.width && attrs.width.specified) {
          // TODO: use runtimeStyle and coordsize
          // el.getContext().setWidth_(attrs.width.nodeValue);
          el.style.width = attrs.width.nodeValue + 'px';
        } else {
          el.width = el.clientWidth;
        }
        if (attrs.height && attrs.height.specified) {
          // TODO: use runtimeStyle and coordsize
          // el.getContext().setHeight_(attrs.height.nodeValue);
          el.style.height = attrs.height.nodeValue + 'px';
        } else {
          el.height = el.clientHeight;
        }
        //el.getContext().setCoordsize_()
      }
      return el;
    }
  };

  function onPropertyChange(e) {
    var el = e.srcElement;

    switch (e.propertyName) {
      case 'width':
        el.getContext().clearRect();
        el.style.width = el.attributes.width.nodeValue + 'px';
        // In IE8 this does not trigger onresize.
        el.firstChild.style.width =  el.clientWidth + 'px';
        break;
      case 'height':
        el.getContext().clearRect();
        el.style.height = el.attributes.height.nodeValue + 'px';
        el.firstChild.style.height = el.clientHeight + 'px';
        break;
    }
  }

  function onResize(e) {
    var el = e.srcElement;
    if (el.firstChild) {
      el.firstChild.style.width =  el.clientWidth + 'px';
      el.firstChild.style.height = el.clientHeight + 'px';
    }
  }

  G_vmlCanvasManager_.init();

  // precompute "00" to "FF"
  var decToHex = [];
  for (var i = 0; i < 16; i++) {
    for (var j = 0; j < 16; j++) {
      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
    }
  }

  function createMatrixIdentity() {
    return [
      [1, 0, 0],
      [0, 1, 0],
      [0, 0, 1]
    ];
  }

  function matrixMultiply(m1, m2) {
    var result = createMatrixIdentity();

    for (var x = 0; x < 3; x++) {
      for (var y = 0; y < 3; y++) {
        var sum = 0;

        for (var z = 0; z < 3; z++) {
          sum += m1[x][z] * m2[z][y];
        }

        result[x][y] = sum;
      }
    }
    return result;
  }

  function copyState(o1, o2) {
    o2.fillStyle     = o1.fillStyle;
    o2.lineCap       = o1.lineCap;
    o2.lineJoin      = o1.lineJoin;
    o2.lineWidth     = o1.lineWidth;
    o2.miterLimit    = o1.miterLimit;
    o2.shadowBlur    = o1.shadowBlur;
    o2.shadowColor   = o1.shadowColor;
    o2.shadowOffsetX = o1.shadowOffsetX;
    o2.shadowOffsetY = o1.shadowOffsetY;
    o2.strokeStyle   = o1.strokeStyle;
    o2.globalAlpha   = o1.globalAlpha;
    o2.font          = o1.font;
    o2.textAlign     = o1.textAlign;
    o2.textBaseline  = o1.textBaseline;
    o2.arcScaleX_    = o1.arcScaleX_;
    o2.arcScaleY_    = o1.arcScaleY_;
    o2.lineScale_    = o1.lineScale_;
  }

  var colorData = {
    aliceblue: '#F0F8FF',
    antiquewhite: '#FAEBD7',
    aquamarine: '#7FFFD4',
    azure: '#F0FFFF',
    beige: '#F5F5DC',
    bisque: '#FFE4C4',
    black: '#000000',
    blanchedalmond: '#FFEBCD',
    blueviolet: '#8A2BE2',
    brown: '#A52A2A',
    burlywood: '#DEB887',
    cadetblue: '#5F9EA0',
    chartreuse: '#7FFF00',
    chocolate: '#D2691E',
    coral: '#FF7F50',
    cornflowerblue: '#6495ED',
    cornsilk: '#FFF8DC',
    crimson: '#DC143C',
    cyan: '#00FFFF',
    darkblue: '#00008B',
    darkcyan: '#008B8B',
    darkgoldenrod: '#B8860B',
    darkgray: '#A9A9A9',
    darkgreen: '#006400',
    darkgrey: '#A9A9A9',
    darkkhaki: '#BDB76B',
    darkmagenta: '#8B008B',
    darkolivegreen: '#556B2F',
    darkorange: '#FF8C00',
    darkorchid: '#9932CC',
    darkred: '#8B0000',
    darksalmon: '#E9967A',
    darkseagreen: '#8FBC8F',
    darkslateblue: '#483D8B',
    darkslategray: '#2F4F4F',
    darkslategrey: '#2F4F4F',
    darkturquoise: '#00CED1',
    darkviolet: '#9400D3',
    deeppink: '#FF1493',
    deepskyblue: '#00BFFF',
    dimgray: '#696969',
    dimgrey: '#696969',
    dodgerblue: '#1E90FF',
    firebrick: '#B22222',
    floralwhite: '#FFFAF0',
    forestgreen: '#228B22',
    gainsboro: '#DCDCDC',
    ghostwhite: '#F8F8FF',
    gold: '#FFD700',
    goldenrod: '#DAA520',
    grey: '#808080',
    greenyellow: '#ADFF2F',
    honeydew: '#F0FFF0',
    hotpink: '#FF69B4',
    indianred: '#CD5C5C',
    indigo: '#4B0082',
    ivory: '#FFFFF0',
    khaki: '#F0E68C',
    lavender: '#E6E6FA',
    lavenderblush: '#FFF0F5',
    lawngreen: '#7CFC00',
    lemonchiffon: '#FFFACD',
    lightblue: '#ADD8E6',
    lightcoral: '#F08080',
    lightcyan: '#E0FFFF',
    lightgoldenrodyellow: '#FAFAD2',
    lightgreen: '#90EE90',
    lightgrey: '#D3D3D3',
    lightpink: '#FFB6C1',
    lightsalmon: '#FFA07A',
    lightseagreen: '#20B2AA',
    lightskyblue: '#87CEFA',
    lightslategray: '#778899',
    lightslategrey: '#778899',
    lightsteelblue: '#B0C4DE',
    lightyellow: '#FFFFE0',
    limegreen: '#32CD32',
    linen: '#FAF0E6',
    magenta: '#FF00FF',
    mediumaquamarine: '#66CDAA',
    mediumblue: '#0000CD',
    mediumorchid: '#BA55D3',
    mediumpurple: '#9370DB',
    mediumseagreen: '#3CB371',
    mediumslateblue: '#7B68EE',
    mediumspringgreen: '#00FA9A',
    mediumturquoise: '#48D1CC',
    mediumvioletred: '#C71585',
    midnightblue: '#191970',
    mintcream: '#F5FFFA',
    mistyrose: '#FFE4E1',
    moccasin: '#FFE4B5',
    navajowhite: '#FFDEAD',
    oldlace: '#FDF5E6',
    olivedrab: '#6B8E23',
    orange: '#FFA500',
    orangered: '#FF4500',
    orchid: '#DA70D6',
    palegoldenrod: '#EEE8AA',
    palegreen: '#98FB98',
    paleturquoise: '#AFEEEE',
    palevioletred: '#DB7093',
    papayawhip: '#FFEFD5',
    peachpuff: '#FFDAB9',
    peru: '#CD853F',
    pink: '#FFC0CB',
    plum: '#DDA0DD',
    powderblue: '#B0E0E6',
    rosybrown: '#BC8F8F',
    royalblue: '#4169E1',
    saddlebrown: '#8B4513',
    salmon: '#FA8072',
    sandybrown: '#F4A460',
    seagreen: '#2E8B57',
    seashell: '#FFF5EE',
    sienna: '#A0522D',
    skyblue: '#87CEEB',
    slateblue: '#6A5ACD',
    slategray: '#708090',
    slategrey: '#708090',
    snow: '#FFFAFA',
    springgreen: '#00FF7F',
    steelblue: '#4682B4',
    tan: '#D2B48C',
    thistle: '#D8BFD8',
    tomato: '#FF6347',
    turquoise: '#40E0D0',
    violet: '#EE82EE',
    wheat: '#F5DEB3',
    whitesmoke: '#F5F5F5',
    yellowgreen: '#9ACD32'
  };


  function getRgbHslContent(styleString) {
    var start = styleString.indexOf('(', 3);
    var end = styleString.indexOf(')', start + 1);
    var parts = styleString.substring(start + 1, end).split(',');
    // add alpha if needed
    if (parts.length != 4 || styleString.charAt(3) != 'a') {
      parts[3] = 1;
    }
    return parts;
  }

  function percent(s) {
    return parseFloat(s) / 100;
  }

  function clamp(v, min, max) {
    return Math.min(max, Math.max(min, v));
  }

  function hslToRgb(parts){
    var r, g, b, h, s, l;
    h = parseFloat(parts[0]) / 360 % 360;
    if (h < 0)
      h++;
    s = clamp(percent(parts[1]), 0, 1);
    l = clamp(percent(parts[2]), 0, 1);
    if (s == 0) {
      r = g = b = l; // achromatic
    } else {
      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
      var p = 2 * l - q;
      r = hueToRgb(p, q, h + 1 / 3);
      g = hueToRgb(p, q, h);
      b = hueToRgb(p, q, h - 1 / 3);
    }

    return '#' + decToHex[Math.floor(r * 255)] +
        decToHex[Math.floor(g * 255)] +
        decToHex[Math.floor(b * 255)];
  }

  function hueToRgb(m1, m2, h) {
    if (h < 0)
      h++;
    if (h > 1)
      h--;

    if (6 * h < 1)
      return m1 + (m2 - m1) * 6 * h;
    else if (2 * h < 1)
      return m2;
    else if (3 * h < 2)
      return m1 + (m2 - m1) * (2 / 3 - h) * 6;
    else
      return m1;
  }

  var processStyleCache = {};

  function processStyle(styleString) {
    if (styleString in processStyleCache) {
      return processStyleCache[styleString];
    }

    var str, alpha = 1;

    styleString = String(styleString);
    if (styleString.charAt(0) == '#') {
      str = styleString;
    } else if (/^rgb/.test(styleString)) {
      var parts = getRgbHslContent(styleString);
      var str = '#', n;
      for (var i = 0; i < 3; i++) {
        if (parts[i].indexOf('%') != -1) {
          n = Math.floor(percent(parts[i]) * 255);
        } else {
          n = +parts[i];
        }
        str += decToHex[clamp(n, 0, 255)];
      }
      alpha = +parts[3];
    } else if (/^hsl/.test(styleString)) {
      var parts = getRgbHslContent(styleString);
      str = hslToRgb(parts);
      alpha = parts[3];
    } else {
      str = colorData[styleString] || styleString;
    }
    return processStyleCache[styleString] = {color: str, alpha: alpha};
  }

  var DEFAULT_STYLE = {
    style: 'normal',
    variant: 'normal',
    weight: 'normal',
    size: 10,
    family: 'sans-serif'
  };

  // Internal text style cache
  var fontStyleCache = {};

  function processFontStyle(styleString) {
    if (fontStyleCache[styleString]) {
      return fontStyleCache[styleString];
    }

    var el = document.createElement('div');
    var style = el.style;
    try {
      style.font = styleString;
    } catch (ex) {
      // Ignore failures to set to invalid font.
    }

    return fontStyleCache[styleString] = {
      style: style.fontStyle || DEFAULT_STYLE.style,
      variant: style.fontVariant || DEFAULT_STYLE.variant,
      weight: style.fontWeight || DEFAULT_STYLE.weight,
      size: style.fontSize || DEFAULT_STYLE.size,
      family: style.fontFamily || DEFAULT_STYLE.family
    };
  }

  function getComputedStyle(style, element) {
    var computedStyle = {};

    for (var p in style) {
      computedStyle[p] = style[p];
    }

    // Compute the size
    var canvasFontSize = parseFloat(element.currentStyle.fontSize),
        fontSize = parseFloat(style.size);

    if (typeof style.size == 'number') {
      computedStyle.size = style.size;
    } else if (style.size.indexOf('px') != -1) {
      computedStyle.size = fontSize;
    } else if (style.size.indexOf('em') != -1) {
      computedStyle.size = canvasFontSize * fontSize;
    } else if(style.size.indexOf('%') != -1) {
      computedStyle.size = (canvasFontSize / 100) * fontSize;
    } else if (style.size.indexOf('pt') != -1) {
      computedStyle.size = fontSize / .75;
    } else {
      computedStyle.size = canvasFontSize;
    }

    // Different scaling between normal text and VML text. This was found using
    // trial and error to get the same size as non VML text.
    computedStyle.size *= 0.981;

    return computedStyle;
  }

  function buildStyle(style) {
    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +
        style.size + 'px ' + style.family;
  }

  var lineCapMap = {
    'butt': 'flat',
    'round': 'round'
  };

  function processLineCap(lineCap) {
    return lineCapMap[lineCap] || 'square';
  }

  /**
   * This class implements CanvasRenderingContext2D interface as described by
   * the WHATWG.
   * @param {HTMLElement} canvasElement The element that the 2D context should
   * be associated with
   */
  function CanvasRenderingContext2D_(canvasElement) {
    this.m_ = createMatrixIdentity();

    this.mStack_ = [];
    this.aStack_ = [];
    this.currentPath_ = [];

    // Canvas context properties
    this.strokeStyle = '#000';
    this.fillStyle = '#000';

    this.lineWidth = 1;
    this.lineJoin = 'miter';
    this.lineCap = 'butt';
    this.miterLimit = Z * 1;
    this.globalAlpha = 1;
    this.font = '10px sans-serif';
    this.textAlign = 'left';
    this.textBaseline = 'alphabetic';
    this.canvas = canvasElement;

    var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +
        canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
    var el = canvasElement.ownerDocument.createElement('div');
    el.style.cssText = cssText;
    canvasElement.appendChild(el);

    var overlayEl = el.cloneNode(false);
    // Use a non transparent background.
    overlayEl.style.backgroundColor = 'red';
    overlayEl.style.filter = 'alpha(opacity=0)';
    canvasElement.appendChild(overlayEl);

    this.element_ = el;
    this.arcScaleX_ = 1;
    this.arcScaleY_ = 1;
    this.lineScale_ = 1;
  }

  var contextPrototype = CanvasRenderingContext2D_.prototype;
  contextPrototype.clearRect = function() {
    if (this.textMeasureEl_) {
      this.textMeasureEl_.removeNode(true);
      this.textMeasureEl_ = null;
    }
    this.element_.innerHTML = '';
  };

  contextPrototype.beginPath = function() {
    // TODO: Branch current matrix so that save/restore has no effect
    //       as per safari docs.
    this.currentPath_ = [];
  };

  contextPrototype.moveTo = function(aX, aY) {
    var p = getCoords(this, aX, aY);
    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
    this.currentX_ = p.x;
    this.currentY_ = p.y;
  };

  contextPrototype.lineTo = function(aX, aY) {
    var p = getCoords(this, aX, aY);
    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});

    this.currentX_ = p.x;
    this.currentY_ = p.y;
  };

  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
                                            aCP2x, aCP2y,
                                            aX, aY) {
    var p = getCoords(this, aX, aY);
    var cp1 = getCoords(this, aCP1x, aCP1y);
    var cp2 = getCoords(this, aCP2x, aCP2y);
    bezierCurveTo(this, cp1, cp2, p);
  };

  // Helper function that takes the already fixed cordinates.
  function bezierCurveTo(self, cp1, cp2, p) {
    self.currentPath_.push({
      type: 'bezierCurveTo',
      cp1x: cp1.x,
      cp1y: cp1.y,
      cp2x: cp2.x,
      cp2y: cp2.y,
      x: p.x,
      y: p.y
    });
    self.currentX_ = p.x;
    self.currentY_ = p.y;
  }

  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
    // the following is lifted almost directly from
    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes

    var cp = getCoords(this, aCPx, aCPy);
    var p = getCoords(this, aX, aY);

    var cp1 = {
      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
    };
    var cp2 = {
      x: cp1.x + (p.x - this.currentX_) / 3.0,
      y: cp1.y + (p.y - this.currentY_) / 3.0
    };

    bezierCurveTo(this, cp1, cp2, p);
  };

  contextPrototype.arc = function(aX, aY, aRadius,
                                  aStartAngle, aEndAngle, aClockwise) {
    aRadius *= Z;
    var arcType = aClockwise ? 'at' : 'wa';

    var xStart = aX + mc(aStartAngle) * aRadius - Z2;
    var yStart = aY + ms(aStartAngle) * aRadius - Z2;

    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;

    // IE won't render arches drawn counter clockwise if xStart == xEnd.
    if (xStart == xEnd && !aClockwise) {
      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
                       // that can be represented in binary
    }

    var p = getCoords(this, aX, aY);
    var pStart = getCoords(this, xStart, yStart);
    var pEnd = getCoords(this, xEnd, yEnd);

    this.currentPath_.push({type: arcType,
                           x: p.x,
                           y: p.y,
                           radius: aRadius,
                           xStart: pStart.x,
                           yStart: pStart.y,
                           xEnd: pEnd.x,
                           yEnd: pEnd.y});

  };

  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
    this.moveTo(aX, aY);
    this.lineTo(aX + aWidth, aY);
    this.lineTo(aX + aWidth, aY + aHeight);
    this.lineTo(aX, aY + aHeight);
    this.closePath();
  };

  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
    var oldPath = this.currentPath_;
    this.beginPath();

    this.moveTo(aX, aY);
    this.lineTo(aX + aWidth, aY);
    this.lineTo(aX + aWidth, aY + aHeight);
    this.lineTo(aX, aY + aHeight);
    this.closePath();
    this.stroke();

    this.currentPath_ = oldPath;
  };

  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
    var oldPath = this.currentPath_;
    this.beginPath();

    this.moveTo(aX, aY);
    this.lineTo(aX + aWidth, aY);
    this.lineTo(aX + aWidth, aY + aHeight);
    this.lineTo(aX, aY + aHeight);
    this.closePath();
    this.fill();

    this.currentPath_ = oldPath;
  };

  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
    var gradient = new CanvasGradient_('gradient');
    gradient.x0_ = aX0;
    gradient.y0_ = aY0;
    gradient.x1_ = aX1;
    gradient.y1_ = aY1;
    return gradient;
  };

  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
                                                   aX1, aY1, aR1) {
    var gradient = new CanvasGradient_('gradientradial');
    gradient.x0_ = aX0;
    gradient.y0_ = aY0;
    gradient.r0_ = aR0;
    gradient.x1_ = aX1;
    gradient.y1_ = aY1;
    gradient.r1_ = aR1;
    return gradient;
  };

  contextPrototype.drawImage = function(image, var_args) {
    var dx, dy, dw, dh, sx, sy, sw, sh;

    // to find the original width we overide the width and height
    var oldRuntimeWidth = image.runtimeStyle.width;
    var oldRuntimeHeight = image.runtimeStyle.height;
    image.runtimeStyle.width = 'auto';
    image.runtimeStyle.height = 'auto';

    // get the original size
    var w = image.width;
    var h = image.height;

    // and remove overides
    image.runtimeStyle.width = oldRuntimeWidth;
    image.runtimeStyle.height = oldRuntimeHeight;

    if (arguments.length == 3) {
      dx = arguments[1];
      dy = arguments[2];
      sx = sy = 0;
      sw = dw = w;
      sh = dh = h;
    } else if (arguments.length == 5) {
      dx = arguments[1];
      dy = arguments[2];
      dw = arguments[3];
      dh = arguments[4];
      sx = sy = 0;
      sw = w;
      sh = h;
    } else if (arguments.length == 9) {
      sx = arguments[1];
      sy = arguments[2];
      sw = arguments[3];
      sh = arguments[4];
      dx = arguments[5];
      dy = arguments[6];
      dw = arguments[7];
      dh = arguments[8];
    } else {
      throw Error('Invalid number of arguments');
    }

    var d = getCoords(this, dx, dy);

    var w2 = sw / 2;
    var h2 = sh / 2;

    var vmlStr = [];

    var W = 10;
    var H = 10;

    // For some reason that I've now forgotten, using divs didn't work
    vmlStr.push(' <g_vml_:group',
                ' coordsize="', Z * W, ',', Z * H, '"',
                ' coordorigin="0,0"' ,
                ' style="width:', W, 'px;height:', H, 'px;position:absolute;');

    // If filters are necessary (rotation exists), create them
    // filters are bog-slow, so only create them if abbsolutely necessary
    // The following check doesn't account for skews (which don't exist
    // in the canvas spec (yet) anyway.

    if (this.m_[0][0] != 1 || this.m_[0][1] ||
        this.m_[1][1] != 1 || this.m_[1][0]) {
      var filter = [];

      // Note the 12/21 reversal
      filter.push('M11=', this.m_[0][0], ',',
                  'M12=', this.m_[1][0], ',',
                  'M21=', this.m_[0][1], ',',
                  'M22=', this.m_[1][1], ',',
                  'Dx=', mr(d.x / Z), ',',
                  'Dy=', mr(d.y / Z), '');

      // Bounding box calculation (need to minimize displayed area so that
      // filters don't waste time on unused pixels.
      var max = d;
      var c2 = getCoords(this, dx + dw, dy);
      var c3 = getCoords(this, dx, dy + dh);
      var c4 = getCoords(this, dx + dw, dy + dh);

      max.x = m.max(max.x, c2.x, c3.x, c4.x);
      max.y = m.max(max.y, c2.y, c3.y, c4.y);

      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
                  filter.join(''), ", sizingmethod='clip');");

    } else {
      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
    }

    vmlStr.push(' ">' ,
                '<g_vml_:image src="', image.src, '"',
                ' style="width:', Z * dw, 'px;',
                ' height:', Z * dh, 'px"',
                ' cropleft="', sx / w, '"',
                ' croptop="', sy / h, '"',
                ' cropright="', (w - sx - sw) / w, '"',
                ' cropbottom="', (h - sy - sh) / h, '"',
                ' />',
                '</g_vml_:group>');

    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
  };

  contextPrototype.stroke = function(aFill) {
    var lineStr = [];
    var lineOpen = false;

    var W = 10;
    var H = 10;

    lineStr.push('<g_vml_:shape',
                 ' filled="', !!aFill, '"',
                 ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
                 ' coordorigin="0,0"',
                 ' coordsize="', Z * W, ',', Z * H, '"',
                 ' stroked="', !aFill, '"',
                 ' path="');

    var newSeq = false;
    var min = {x: null, y: null};
    var max = {x: null, y: null};

    for (var i = 0; i < this.currentPath_.length; i++) {
      var p = this.currentPath_[i];
      var c;

      switch (p.type) {
        case 'moveTo':
          c = p;
          lineStr.push(' m ', mr(p.x), ',', mr(p.y));
          break;
        case 'lineTo':
          lineStr.push(' l ', mr(p.x), ',', mr(p.y));
          break;
        case 'close':
          lineStr.push(' x ');
          p = null;
          break;
        case 'bezierCurveTo':
          lineStr.push(' c ',
                       mr(p.cp1x), ',', mr(p.cp1y), ',',
                       mr(p.cp2x), ',', mr(p.cp2y), ',',
                       mr(p.x), ',', mr(p.y));
          break;
        case 'at':
        case 'wa':
          lineStr.push(' ', p.type, ' ',
                       mr(p.x - this.arcScaleX_ * p.radius), ',',
                       mr(p.y - this.arcScaleY_ * p.radius), ' ',
                       mr(p.x + this.arcScaleX_ * p.radius), ',',
                       mr(p.y + this.arcScaleY_ * p.radius), ' ',
                       mr(p.xStart), ',', mr(p.yStart), ' ',
                       mr(p.xEnd), ',', mr(p.yEnd));
          break;
      }


      // TODO: Following is broken for curves due to
      //       move to proper paths.

      // Figure out dimensions so we can do gradient fills
      // properly
      if (p) {
        if (min.x == null || p.x < min.x) {
          min.x = p.x;
        }
        if (max.x == null || p.x > max.x) {
          max.x = p.x;
        }
        if (min.y == null || p.y < min.y) {
          min.y = p.y;
        }
        if (max.y == null || p.y > max.y) {
          max.y = p.y;
        }
      }
    }
    lineStr.push(' ">');

    if (!aFill) {
      appendStroke(this, lineStr);
    } else {
      appendFill(this, lineStr, min, max);
    }

    lineStr.push('</g_vml_:shape>');

    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  };

  function appendStroke(ctx, lineStr) {
    var a = processStyle(ctx.strokeStyle);
    var color = a.color;
    var opacity = a.alpha * ctx.globalAlpha;
    var lineWidth = ctx.lineScale_ * ctx.lineWidth;

    // VML cannot correctly render a line if the width is less than 1px.
    // In that case, we dilute the color to make the line look thinner.
    if (lineWidth < 1) {
      opacity *= lineWidth;
    }

    lineStr.push(
      '<g_vml_:stroke',
      ' opacity="', opacity, '"',
      ' joinstyle="', ctx.lineJoin, '"',
      ' miterlimit="', ctx.miterLimit, '"',
      ' endcap="', processLineCap(ctx.lineCap), '"',
      ' weight="', lineWidth, 'px"',
      ' color="', color, '" />'
    );
  }

  function appendFill(ctx, lineStr, min, max) {
    var fillStyle = ctx.fillStyle;
    var arcScaleX = ctx.arcScaleX_;
    var arcScaleY = ctx.arcScaleY_;
    var width = max.x - min.x;
    var height = max.y - min.y;
    if (fillStyle instanceof CanvasGradient_) {
      // TODO: Gradients transformed with the transformation matrix.
      var angle = 0;
      var focus = {x: 0, y: 0};

      // additional offset
      var shift = 0;
      // scale factor for offset
      var expansion = 1;

      if (fillStyle.type_ == 'gradient') {
        var x0 = fillStyle.x0_ / arcScaleX;
        var y0 = fillStyle.y0_ / arcScaleY;
        var x1 = fillStyle.x1_ / arcScaleX;
        var y1 = fillStyle.y1_ / arcScaleY;
        var p0 = getCoords(ctx, x0, y0);
        var p1 = getCoords(ctx, x1, y1);
        var dx = p1.x - p0.x;
        var dy = p1.y - p0.y;
        angle = Math.atan2(dx, dy) * 180 / Math.PI;

        // The angle should be a non-negative number.
        if (angle < 0) {
          angle += 360;
        }

        // Very small angles produce an unexpected result because they are
        // converted to a scientific notation string.
        if (angle < 1e-6) {
          angle = 0;
        }
      } else {
        var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
        focus = {
          x: (p0.x - min.x) / width,
          y: (p0.y - min.y) / height
        };

        width  /= arcScaleX * Z;
        height /= arcScaleY * Z;
        var dimension = m.max(width, height);
        shift = 2 * fillStyle.r0_ / dimension;
        expansion = 2 * fillStyle.r1_ / dimension - shift;
      }

      // We need to sort the color stops in ascending order by offset,
      // otherwise IE won't interpret it correctly.
      var stops = fillStyle.colors_;
      stops.sort(function(cs1, cs2) {
        return cs1.offset - cs2.offset;
      });

      var length = stops.length;
      var color1 = stops[0].color;
      var color2 = stops[length - 1].color;
      var opacity1 = stops[0].alpha * ctx.globalAlpha;
      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;

      var colors = [];
      for (var i = 0; i < length; i++) {
        var stop = stops[i];
        colors.push(stop.offset * expansion + shift + ' ' + stop.color);
      }

      // When colors attribute is used, the meanings of opacity and o:opacity2
      // are reversed.
      lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
                   ' method="none" focus="100%"',
                   ' color="', color1, '"',
                   ' color2="', color2, '"',
                   ' colors="', colors.join(','), '"',
                   ' opacity="', opacity2, '"',
                   ' g_o_:opacity2="', opacity1, '"',
                   ' angle="', angle, '"',
                   ' focusposition="', focus.x, ',', focus.y, '" />');
    } else if (fillStyle instanceof CanvasPattern_) {
      if (width && height) {
        var deltaLeft = -min.x;
        var deltaTop = -min.y;
        lineStr.push('<g_vml_:fill',
                     ' position="',
                     deltaLeft / width * arcScaleX * arcScaleX, ',',
                     deltaTop / height * arcScaleY * arcScaleY, '"',
                     ' type="tile"',
                     // TODO: Figure out the correct size to fit the scale.
                     //' size="', w, 'px ', h, 'px"',
                     ' src="', fillStyle.src_, '" />');
       }
    } else {
      var a = processStyle(ctx.fillStyle);
      var color = a.color;
      var opacity = a.alpha * ctx.globalAlpha;
      lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
                   '" />');
    }
  }

  contextPrototype.fill = function() {
    this.stroke(true);
  };

  contextPrototype.closePath = function() {
    this.currentPath_.push({type: 'close'});
  };

  function getCoords(ctx, aX, aY) {
    var m = ctx.m_;
    return {
      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
    };
  };

  contextPrototype.save = function() {
    var o = {};
    copyState(this, o);
    this.aStack_.push(o);
    this.mStack_.push(this.m_);
    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
  };

  contextPrototype.restore = function() {
    if (this.aStack_.length) {
      copyState(this.aStack_.pop(), this);
      this.m_ = this.mStack_.pop();
    }
  };

  function matrixIsFinite(m) {
    return isFinite(m[0][0]) && isFinite(m[0][1]) &&
        isFinite(m[1][0]) && isFinite(m[1][1]) &&
        isFinite(m[2][0]) && isFinite(m[2][1]);
  }

  function setM(ctx, m, updateLineScale) {
    if (!matrixIsFinite(m)) {
      return;
    }
    ctx.m_ = m;

    if (updateLineScale) {
      // Get the line scale.
      // Determinant of this.m_ means how much the area is enlarged by the
      // transformation. So its square root can be used as a scale factor
      // for width.
      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
      ctx.lineScale_ = sqrt(abs(det));
    }
  }

  contextPrototype.translate = function(aX, aY) {
    var m1 = [
      [1,  0,  0],
      [0,  1,  0],
      [aX, aY, 1]
    ];

    setM(this, matrixMultiply(m1, this.m_), false);
  };

  contextPrototype.rotate = function(aRot) {
    var c = mc(aRot);
    var s = ms(aRot);

    var m1 = [
      [c,  s, 0],
      [-s, c, 0],
      [0,  0, 1]
    ];

    setM(this, matrixMultiply(m1, this.m_), false);
  };

  contextPrototype.scale = function(aX, aY) {
    this.arcScaleX_ *= aX;
    this.arcScaleY_ *= aY;
    var m1 = [
      [aX, 0,  0],
      [0,  aY, 0],
      [0,  0,  1]
    ];

    setM(this, matrixMultiply(m1, this.m_), true);
  };

  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
    var m1 = [
      [m11, m12, 0],
      [m21, m22, 0],
      [dx,  dy,  1]
    ];

    setM(this, matrixMultiply(m1, this.m_), true);
  };

  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
    var m = [
      [m11, m12, 0],
      [m21, m22, 0],
      [dx,  dy,  1]
    ];

    setM(this, m, true);
  };

  /**
   * The text drawing function.
   * The maxWidth argument isn't taken in account, since no browser supports
   * it yet.
   */
  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {
    var m = this.m_,
        delta = 1000,
        left = 0,
        right = delta,
        offset = {x: 0, y: 0},
        lineStr = [];

    var fontStyle = getComputedStyle(processFontStyle(this.font),
                                     this.element_);

    var fontStyleString = buildStyle(fontStyle);

    var elementStyle = this.element_.currentStyle;
    var textAlign = this.textAlign.toLowerCase();
    switch (textAlign) {
      case 'left':
      case 'center':
      case 'right':
        break;
      case 'end':
        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
        break;
      case 'start':
        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
        break;
      default:
        textAlign = 'left';
    }

    // 1.75 is an arbitrary number, as there is no info about the text baseline
    switch (this.textBaseline) {
      case 'hanging':
      case 'top':
        offset.y = fontStyle.size / 1.75;
        break;
      case 'middle':
        break;
      default:
      case null:
      case 'alphabetic':
      case 'ideographic':
      case 'bottom':
        offset.y = -fontStyle.size / 2.25;
        break;
    }

    switch(textAlign) {
      case 'right':
        left = delta;
        right = 0.05;
        break;
      case 'center':
        left = right = delta / 2;
        break;
    }

    var d = getCoords(this, x + offset.x, y + offset.y);

    lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',
                 ' coordsize="100 100" coordorigin="0 0"',
                 ' filled="', !stroke, '" stroked="', !!stroke,
                 '" style="position:absolute;width:1px;height:1px;">');

    if (stroke) {
      appendStroke(this, lineStr);
    } else {
      // TODO: Fix the min and max params.
      appendFill(this, lineStr, {x: -left, y: 0},
                 {x: right, y: fontStyle.size});
    }

    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +
                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';

    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);

    lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',
                 ' offset="', skewOffset, '" origin="', left ,' 0" />',
                 '<g_vml_:path textpathok="true" />',
                 '<g_vml_:textpath on="true" string="',
                 encodeHtmlAttribute(text),
                 '" style="v-text-align:', textAlign,
                 ';font:', encodeHtmlAttribute(fontStyleString),
                 '" /></g_vml_:line>');

    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  };

  contextPrototype.fillText = function(text, x, y, maxWidth) {
    this.drawText_(text, x, y, maxWidth, false);
  };

  contextPrototype.strokeText = function(text, x, y, maxWidth) {
    this.drawText_(text, x, y, maxWidth, true);
  };

  contextPrototype.measureText = function(text) {
    if (!this.textMeasureEl_) {
      var s = '<span style="position:absolute;' +
          'top:-20000px;left:0;padding:0;margin:0;border:none;' +
          'white-space:pre;"></span>';
      this.element_.insertAdjacentHTML('beforeEnd', s);
      this.textMeasureEl_ = this.element_.lastChild;
    }
    var doc = this.element_.ownerDocument;
    this.textMeasureEl_.innerHTML = '';
    this.textMeasureEl_.style.font = this.font;
    // Don't use innerHTML or innerText because they allow markup/whitespace.
    this.textMeasureEl_.appendChild(doc.createTextNode(text));
    return {width: this.textMeasureEl_.offsetWidth};
  };

  /******** STUBS ********/
  contextPrototype.clip = function() {
    // TODO: Implement
  };

  contextPrototype.arcTo = function() {
    // TODO: Implement
  };

  contextPrototype.createPattern = function(image, repetition) {
    return new CanvasPattern_(image, repetition);
  };

  // Gradient / Pattern Stubs
  function CanvasGradient_(aType) {
    this.type_ = aType;
    this.x0_ = 0;
    this.y0_ = 0;
    this.r0_ = 0;
    this.x1_ = 0;
    this.y1_ = 0;
    this.r1_ = 0;
    this.colors_ = [];
  }

  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
    aColor = processStyle(aColor);
    this.colors_.push({offset: aOffset,
                       color: aColor.color,
                       alpha: aColor.alpha});
  };

  function CanvasPattern_(image, repetition) {
    assertImageIsValid(image);
    switch (repetition) {
      case 'repeat':
      case null:
      case '':
        this.repetition_ = 'repeat';
        break
      case 'repeat-x':
      case 'repeat-y':
      case 'no-repeat':
        this.repetition_ = repetition;
        break;
      default:
        throwException('SYNTAX_ERR');
    }

    this.src_ = image.src;
    this.width_ = image.width;
    this.height_ = image.height;
  }

  function throwException(s) {
    throw new DOMException_(s);
  }

  function assertImageIsValid(img) {
    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
      throwException('TYPE_MISMATCH_ERR');
    }
    if (img.readyState != 'complete') {
      throwException('INVALID_STATE_ERR');
    }
  }

  function DOMException_(s) {
    this.code = this[s];
    this.message = s +': DOM Exception ' + this.code;
  }
  var p = DOMException_.prototype = new Error;
  p.INDEX_SIZE_ERR = 1;
  p.DOMSTRING_SIZE_ERR = 2;
  p.HIERARCHY_REQUEST_ERR = 3;
  p.WRONG_DOCUMENT_ERR = 4;
  p.INVALID_CHARACTER_ERR = 5;
  p.NO_DATA_ALLOWED_ERR = 6;
  p.NO_MODIFICATION_ALLOWED_ERR = 7;
  p.NOT_FOUND_ERR = 8;
  p.NOT_SUPPORTED_ERR = 9;
  p.INUSE_ATTRIBUTE_ERR = 10;
  p.INVALID_STATE_ERR = 11;
  p.SYNTAX_ERR = 12;
  p.INVALID_MODIFICATION_ERR = 13;
  p.NAMESPACE_ERR = 14;
  p.INVALID_ACCESS_ERR = 15;
  p.VALIDATION_ERR = 16;
  p.TYPE_MISMATCH_ERR = 17;

  // set up externs
  G_vmlCanvasManager = G_vmlCanvasManager_;
  CanvasRenderingContext2D = CanvasRenderingContext2D_;
  CanvasGradient = CanvasGradient_;
  CanvasPattern = CanvasPattern_;
  DOMException = DOMException_;
})();

} // if

Added Site/Site_W/jpqplot/excanvas.min.js.







































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
document.createElement("canvas").getContext||function(){function Z(){return this.context_||(this.context_=new C(this))}function $(a,b){var c=P.call(arguments,2);return function(){return a.apply(b,c.concat(P.call(arguments)))}}function Q(a){return String(a).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function R(a,b,c){a.namespaces[b]||a.namespaces.add(b,c,"#default#VML")}function S(a){R(a,"g_vml_","urn:schemas-microsoft-com:vml");R(a,"g_o_","urn:schemas-microsoft-com:office:office");if(!a.styleSheets.ex_canvas_){a=
a.createStyleSheet();a.owningElement.id="ex_canvas_";a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function aa(a){var b=a.srcElement;switch(a.propertyName){case "width":b.getContext().clearRect();b.style.width=b.attributes.width.nodeValue+"px";b.firstChild.style.width=b.clientWidth+"px";break;case "height":b.getContext().clearRect();b.style.height=b.attributes.height.nodeValue+"px";b.firstChild.style.height=b.clientHeight+"px";break}}function ba(a){a=
a.srcElement;if(a.firstChild){a.firstChild.style.width=a.clientWidth+"px";a.firstChild.style.height=a.clientHeight+"px"}}function D(){return[[1,0,0],[0,1,0],[0,0,1]]}function u(a,b){for(var c=D(),d=0;d<3;d++)for(var e=0;e<3;e++){for(var f=0,h=0;h<3;h++)f+=a[d][h]*b[h][e];c[d][e]=f}return c}function T(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=a.shadowOffsetX;
b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.globalAlpha=a.globalAlpha;b.font=a.font;b.textAlign=a.textAlign;b.textBaseline=a.textBaseline;b.arcScaleX_=a.arcScaleX_;b.arcScaleY_=a.arcScaleY_;b.lineScale_=a.lineScale_}function U(a){var b=a.indexOf("(",3),c=a.indexOf(")",b+1);b=a.substring(b+1,c).split(",");if(b.length!=4||a.charAt(3)!="a")b[3]=1;return b}function E(a){return parseFloat(a)/100}function F(a,b,c){return Math.min(c,Math.max(b,a))}function ca(a){var b,c;c=parseFloat(a[0])/
360%360;c<0&&c++;b=F(E(a[1]),0,1);a=F(E(a[2]),0,1);if(b==0)b=a=c=a;else{var d=a<0.5?a*(1+b):a+b-a*b,e=2*a-d;b=G(e,d,c+1/3);a=G(e,d,c);c=G(e,d,c-1/3)}return"#"+v[Math.floor(b*255)]+v[Math.floor(a*255)]+v[Math.floor(c*255)]}function G(a,b,c){c<0&&c++;c>1&&c--;return 6*c<1?a+(b-a)*6*c:2*c<1?b:3*c<2?a+(b-a)*(2/3-c)*6:a}function H(a){if(a in I)return I[a];var b,c=1;a=String(a);if(a.charAt(0)=="#")b=a;else if(/^rgb/.test(a)){c=U(a);b="#";for(var d,e=0;e<3;e++){d=c[e].indexOf("%")!=-1?Math.floor(E(c[e])*
255):+c[e];b+=v[F(d,0,255)]}c=+c[3]}else if(/^hsl/.test(a)){c=U(a);b=ca(c);c=c[3]}else b=da[a]||a;return I[a]={color:b,alpha:c}}function ea(a){if(J[a])return J[a];var b=document.createElement("div").style;try{b.font=a}catch(c){}return J[a]={style:b.fontStyle||w.style,variant:b.fontVariant||w.variant,weight:b.fontWeight||w.weight,size:b.fontSize||w.size,family:b.fontFamily||w.family}}function fa(a,b){var c={};for(var d in a)c[d]=a[d];b=parseFloat(b.currentStyle.fontSize);d=parseFloat(a.size);c.size=
typeof a.size=="number"?a.size:a.size.indexOf("px")!=-1?d:a.size.indexOf("em")!=-1?b*d:a.size.indexOf("%")!=-1?b/100*d:a.size.indexOf("pt")!=-1?d/0.75:b;c.size*=0.981;return c}function ga(a){return a.style+" "+a.variant+" "+a.weight+" "+a.size+"px "+a.family}function ha(a){return ia[a]||"square"}function C(a){this.m_=D();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.fillStyle=this.strokeStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=l*1;this.globalAlpha=
1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=a;var b="width:"+a.clientWidth+"px;height:"+a.clientHeight+"px;overflow:hidden;position:absolute",c=a.ownerDocument.createElement("div");c.style.cssText=b;a.appendChild(c);b=c.cloneNode(false);b.style.backgroundColor="red";b.style.filter="alpha(opacity=0)";a.appendChild(b);this.element_=c;this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}function V(a,b,c,d){a.currentPath_.push({type:"bezierCurveTo",cp1x:b.x,
cp1y:b.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y});a.currentX_=d.x;a.currentY_=d.y}function W(a,b){var c=H(a.strokeStyle),d=c.color;c=c.alpha*a.globalAlpha;var e=a.lineScale_*a.lineWidth;if(e<1)c*=e;b.push("<g_vml_:stroke",' opacity="',c,'"',' joinstyle="',a.lineJoin,'"',' miterlimit="',a.miterLimit,'"',' endcap="',ha(a.lineCap),'"',' weight="',e,'px"',' color="',d,'" />')}function X(a,b,c,d){var e=a.fillStyle,f=a.arcScaleX_,h=a.arcScaleY_,j=d.x-c.x,m=d.y-c.y;if(e instanceof x){var k=0;d={x:0,y:0};var q=0,
o=1;if(e.type_=="gradient"){k=e.x1_/f;c=e.y1_/h;var n=p(a,e.x0_/f,e.y0_/h);k=p(a,k,c);k=Math.atan2(k.x-n.x,k.y-n.y)*180/Math.PI;if(k<0)k+=360;if(k<1.0E-6)k=0}else{n=p(a,e.x0_,e.y0_);d={x:(n.x-c.x)/j,y:(n.y-c.y)/m};j/=f*l;m/=h*l;o=r.max(j,m);q=2*e.r0_/o;o=2*e.r1_/o-q}f=e.colors_;f.sort(function(A,ja){return A.offset-ja.offset});h=f.length;n=f[0].color;c=f[h-1].color;j=f[0].alpha*a.globalAlpha;a=f[h-1].alpha*a.globalAlpha;m=[];for(var s=0;s<h;s++){var y=f[s];m.push(y.offset*o+q+" "+y.color)}b.push('<g_vml_:fill type="',
e.type_,'"',' method="none" focus="100%"',' color="',n,'"',' color2="',c,'"',' colors="',m.join(","),'"',' opacity="',a,'"',' g_o_:opacity2="',j,'"',' angle="',k,'"',' focusposition="',d.x,",",d.y,'" />')}else if(e instanceof K)j&&m&&b.push("<g_vml_:fill",' position="',-c.x/j*f*f,",",-c.y/m*h*h,'"',' type="tile"',' src="',e.src_,'" />');else{e=H(a.fillStyle);b.push('<g_vml_:fill color="',e.color,'" opacity="',e.alpha*a.globalAlpha,'" />')}}function p(a,b,c){a=a.m_;return{x:l*(b*a[0][0]+c*a[1][0]+
a[2][0])-t,y:l*(b*a[0][1]+c*a[1][1]+a[2][1])-t}}function ka(a){return isFinite(a[0][0])&&isFinite(a[0][1])&&isFinite(a[1][0])&&isFinite(a[1][1])&&isFinite(a[2][0])&&isFinite(a[2][1])}function z(a,b,c){if(ka(b)){a.m_=b;if(c)a.lineScale_=la(ma(b[0][0]*b[1][1]-b[0][1]*b[1][0]))}}function x(a){this.type_=a;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}function K(a,b){na(a);switch(b){case "repeat":case null:case "":this.repetition_="repeat";break;case "repeat-x":case "repeat-y":case "no-repeat":this.repetition_=
b;break;default:L("SYNTAX_ERR")}this.src_=a.src;this.width_=a.width;this.height_=a.height}function L(a){throw new M(a);}function na(a){if(!a||a.nodeType!=1||a.tagName!="IMG")L("TYPE_MISMATCH_ERR");a.readyState!="complete"&&L("INVALID_STATE_ERR")}function M(a){this.code=this[a];this.message=a+": DOM Exception "+this.code}var r=Math,i=r.round,N=r.sin,O=r.cos,ma=r.abs,la=r.sqrt,l=10,t=l/2;navigator.userAgent.match(/MSIE ([\d.]+)?/);var P=Array.prototype.slice;S(document);var Y={init:function(a){a=a||
document;a.createElement("canvas");a.attachEvent("onreadystatechange",$(this.init_,this,a))},init_:function(a){a=a.getElementsByTagName("canvas");for(var b=0;b<a.length;b++)this.initElement(a[b])},initElement:function(a){if(!a.getContext){a.getContext=Z;S(a.ownerDocument);a.innerHTML="";a.attachEvent("onpropertychange",aa);a.attachEvent("onresize",ba);var b=a.attributes;if(b.width&&b.width.specified)a.style.width=b.width.nodeValue+"px";else a.width=a.clientWidth;if(b.height&&b.height.specified)a.style.height=
b.height.nodeValue+"px";else a.height=a.clientHeight}return a}};Y.init();for(var v=[],g=0;g<16;g++)for(var B=0;B<16;B++)v[g*16+B]=g.toString(16)+B.toString(16);var da={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",
cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",
firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",
lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",
mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",
skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},I={},w={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"},J={},ia={butt:"flat",round:"round"};g=C.prototype;g.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=
null}this.element_.innerHTML=""};g.beginPath=function(){this.currentPath_=[]};g.moveTo=function(a,b){a=p(this,a,b);this.currentPath_.push({type:"moveTo",x:a.x,y:a.y});this.currentX_=a.x;this.currentY_=a.y};g.lineTo=function(a,b){a=p(this,a,b);this.currentPath_.push({type:"lineTo",x:a.x,y:a.y});this.currentX_=a.x;this.currentY_=a.y};g.bezierCurveTo=function(a,b,c,d,e,f){e=p(this,e,f);a=p(this,a,b);c=p(this,c,d);V(this,a,c,e)};g.quadraticCurveTo=function(a,b,c,d){a=p(this,a,b);c=p(this,c,d);d={x:this.currentX_+
2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)};V(this,d,{x:d.x+(c.x-this.currentX_)/3,y:d.y+(c.y-this.currentY_)/3},c)};g.arc=function(a,b,c,d,e,f){c*=l;var h=f?"at":"wa",j=a+O(d)*c-t,m=b+N(d)*c-t;d=a+O(e)*c-t;e=b+N(e)*c-t;if(j==d&&!f)j+=0.125;a=p(this,a,b);j=p(this,j,m);d=p(this,d,e);this.currentPath_.push({type:h,x:a.x,y:a.y,radius:c,xStart:j.x,yStart:j.y,xEnd:d.x,yEnd:d.y})};g.rect=function(a,b,c,d){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);
this.closePath()};g.strokeRect=function(a,b,c,d){var e=this.currentPath_;this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.stroke();this.currentPath_=e};g.fillRect=function(a,b,c,d){var e=this.currentPath_;this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.fill();this.currentPath_=e};g.createLinearGradient=function(a,b,c,d){var e=new x("gradient");e.x0_=a;e.y0_=b;e.x1_=
c;e.y1_=d;return e};g.createRadialGradient=function(a,b,c,d,e,f){var h=new x("gradientradial");h.x0_=a;h.y0_=b;h.r0_=c;h.x1_=d;h.y1_=e;h.r1_=f;return h};g.drawImage=function(a){var b,c,d,e,f,h,j,m;d=a.runtimeStyle.width;e=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var k=a.width,q=a.height;a.runtimeStyle.width=d;a.runtimeStyle.height=e;if(arguments.length==3){b=arguments[1];c=arguments[2];f=h=0;j=d=k;m=e=q}else if(arguments.length==5){b=arguments[1];c=arguments[2];
d=arguments[3];e=arguments[4];f=h=0;j=k;m=q}else if(arguments.length==9){f=arguments[1];h=arguments[2];j=arguments[3];m=arguments[4];b=arguments[5];c=arguments[6];d=arguments[7];e=arguments[8]}else throw Error("Invalid number of arguments");var o=p(this,b,c),n=[];n.push(" <g_vml_:group",' coordsize="',l*10,",",l*10,'"',' coordorigin="0,0"',' style="width:',10,"px;height:",10,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var s=[];s.push("M11=",this.m_[0][0],
",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",i(o.x/l),",","Dy=",i(o.y/l),"");var y=p(this,b+d,c),A=p(this,b,c+e);b=p(this,b+d,c+e);o.x=r.max(o.x,y.x,A.x,b.x);o.y=r.max(o.y,y.y,A.y,b.y);n.push("padding:0 ",i(o.x/l),"px ",i(o.y/l),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",s.join(""),", sizingmethod='clip');")}else n.push("top:",i(o.y/l),"px;left:",i(o.x/l),"px;");n.push(' ">','<g_vml_:image src="',a.src,'"',' style="width:',l*d,"px;"," height:",
l*e,'px"',' cropleft="',f/k,'"',' croptop="',h/q,'"',' cropright="',(k-f-j)/k,'"',' cropbottom="',(q-h-m)/q,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",n.join(""))};g.stroke=function(a){var b=[];b.push("<g_vml_:shape",' filled="',!!a,'"',' style="position:absolute;width:',10,"px;height:",10,'px;"',' coordorigin="0,0"',' coordsize="',l*10,",",l*10,'"',' stroked="',!a,'"',' path="');for(var c={x:null,y:null},d={x:null,y:null},e=0;e<this.currentPath_.length;e++){var f=this.currentPath_[e];
switch(f.type){case "moveTo":b.push(" m ",i(f.x),",",i(f.y));break;case "lineTo":b.push(" l ",i(f.x),",",i(f.y));break;case "close":b.push(" x ");f=null;break;case "bezierCurveTo":b.push(" c ",i(f.cp1x),",",i(f.cp1y),",",i(f.cp2x),",",i(f.cp2y),",",i(f.x),",",i(f.y));break;case "at":case "wa":b.push(" ",f.type," ",i(f.x-this.arcScaleX_*f.radius),",",i(f.y-this.arcScaleY_*f.radius)," ",i(f.x+this.arcScaleX_*f.radius),",",i(f.y+this.arcScaleY_*f.radius)," ",i(f.xStart),",",i(f.yStart)," ",i(f.xEnd),
",",i(f.yEnd));break}if(f){if(c.x==null||f.x<c.x)c.x=f.x;if(d.x==null||f.x>d.x)d.x=f.x;if(c.y==null||f.y<c.y)c.y=f.y;if(d.y==null||f.y>d.y)d.y=f.y}}b.push(' ">');a?X(this,b,c,d):W(this,b);b.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",b.join(""))};g.fill=function(){this.stroke(true)};g.closePath=function(){this.currentPath_.push({type:"close"})};g.save=function(){var a={};T(this,a);this.aStack_.push(a);this.mStack_.push(this.m_);this.m_=u(D(),this.m_)};g.restore=function(){if(this.aStack_.length){T(this.aStack_.pop(),
this);this.m_=this.mStack_.pop()}};g.translate=function(a,b){z(this,u([[1,0,0],[0,1,0],[a,b,1]],this.m_),false)};g.rotate=function(a){var b=O(a);a=N(a);z(this,u([[b,a,0],[-a,b,0],[0,0,1]],this.m_),false)};g.scale=function(a,b){this.arcScaleX_*=a;this.arcScaleY_*=b;z(this,u([[a,0,0],[0,b,0],[0,0,1]],this.m_),true)};g.transform=function(a,b,c,d,e,f){z(this,u([[a,b,0],[c,d,0],[e,f,1]],this.m_),true)};g.setTransform=function(a,b,c,d,e,f){z(this,[[a,b,0],[c,d,0],[e,f,1]],true)};g.drawText_=function(a,
b,c,d,e){var f=this.m_;d=0;var h=1E3,j={x:0,y:0},m=[],k=fa(ea(this.font),this.element_),q=ga(k),o=this.element_.currentStyle,n=this.textAlign.toLowerCase();switch(n){case "left":case "center":case "right":break;case "end":n=o.direction=="ltr"?"right":"left";break;case "start":n=o.direction=="rtl"?"right":"left";break;default:n="left"}switch(this.textBaseline){case "hanging":case "top":j.y=k.size/1.75;break;case "middle":break;default:case null:case "alphabetic":case "ideographic":case "bottom":j.y=
-k.size/2.25;break}switch(n){case "right":d=1E3;h=0.05;break;case "center":d=h=500;break}b=p(this,b+j.x,c+j.y);m.push('<g_vml_:line from="',-d,' 0" to="',h,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!e,'" stroked="',!!e,'" style="position:absolute;width:1px;height:1px;">');e?W(this,m):X(this,m,{x:-d,y:0},{x:h,y:k.size});e=f[0][0].toFixed(3)+","+f[1][0].toFixed(3)+","+f[0][1].toFixed(3)+","+f[1][1].toFixed(3)+",0,0";b=i(b.x/l)+","+i(b.y/l);m.push('<g_vml_:skew on="t" matrix="',
e,'" ',' offset="',b,'" origin="',d,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',Q(a),'" style="v-text-align:',n,";font:",Q(q),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",m.join(""))};g.fillText=function(a,b,c,d){this.drawText_(a,b,c,d,false)};g.strokeText=function(a,b,c,d){this.drawText_(a,b,c,d,true)};g.measureText=function(a){if(!this.textMeasureEl_){this.element_.insertAdjacentHTML("beforeEnd",'<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>');
this.textMeasureEl_=this.element_.lastChild}var b=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(b.createTextNode(a));return{width:this.textMeasureEl_.offsetWidth}};g.clip=function(){};g.arcTo=function(){};g.createPattern=function(a,b){return new K(a,b)};x.prototype.addColorStop=function(a,b){b=H(b);this.colors_.push({offset:a,color:b.color,alpha:b.alpha})};g=M.prototype=new Error;g.INDEX_SIZE_ERR=1;g.DOMSTRING_SIZE_ERR=
2;g.HIERARCHY_REQUEST_ERR=3;g.WRONG_DOCUMENT_ERR=4;g.INVALID_CHARACTER_ERR=5;g.NO_DATA_ALLOWED_ERR=6;g.NO_MODIFICATION_ALLOWED_ERR=7;g.NOT_FOUND_ERR=8;g.NOT_SUPPORTED_ERR=9;g.INUSE_ATTRIBUTE_ERR=10;g.INVALID_STATE_ERR=11;g.SYNTAX_ERR=12;g.INVALID_MODIFICATION_ERR=13;g.NAMESPACE_ERR=14;g.INVALID_ACCESS_ERR=15;g.VALIDATION_ERR=16;g.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=Y;CanvasRenderingContext2D=C;CanvasGradient=x;CanvasPattern=K;DOMException=M}();

Added Site/Site_W/jpqplot/gpl-2.0.txt.

















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
Title: GPL Version 2

           GNU GENERAL PUBLIC LICENSE
		       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

		    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

			    NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

Added Site/Site_W/jpqplot/jqPlotCssStyling.txt.











































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Title: jqPlot CSS Customization

Much of the styling of jqPlot is done by css.  The jqPlot css file is, unremarkably, 
jquery.jqplot.css and resides in the same directory as jqPlot itself.

There exist some styling related javascript properties on the plot objects themselves
(like fontStyle, fontSize, etc.).  These can be set with the options object at plot creation.  
Generally, setting these options is *NOT* the preferred way to customize the look of the
plot.  Use the css file instead.  *These options are deprecated and may disappear*.  The
exceptions are certain background and color options which control attributes of something
renderered on a canvas.  This would be line color, grid background, etc.  These must
be set by the options object.  For a list of available options, see <jqPlot Options>.

Objects in the plot that can be customized by css are given a css class like ".jqplot-*".
For example, the plot title will have a ".jqplot-title" class, the axes ".jqplot-axis", etc.

Currently assigned classes in jqPlot 
are as follows:

.jqplot-target - Styles for the plot target div.  These will be cascaded down 
to all plot elements according to css rules.

.jqplot-axis - Styles for all axes

.jqplot-xaxis - Styles applied to the primary x axis only.

.jqplot-yaxis - Styles applied to the primary y axis only.

.jqplot-x2axis, .jqplot-x3axis, ... - Styles applied to the 2nd, 3rd, etc. x axis only.

.jqplot-y2axis, .jqplot-y3axis, ... - Styles applied to the 2nd, 3rd, etc.y axis only.

.jqplot-axis-tick - Styles applied to all axis ticks

.jqplot-xaxis-tick - Styles applied to primary x axis ticks only.

.jqplot-x2axis-tick - Styles applied to secondary x axis ticks only.

.jqplot-yaxis-tick - Styles applied to primary y axis ticks only.

.jqplot-y2axis-tick - Styles applied to secondary y axis ticks only.

table.jqplot-table-legend - Styles applied to the legend box table.

.jqplot-title - Styles applied to the title.

.jqplot-cursor-tooltip - Styles applied to the cursor tooltip

.jqplot-highlighter-tooltip - Styles applied to the highlighter tooltip.

div.jqplot-table-legend-swatch - the div element used for the colored swatch on the legend.

Note that axes will be assigned 2 classes like: class=".jqplot-axis .jqplot-xaxis".

Added Site/Site_W/jpqplot/jqPlotOptions.txt.









































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
Title: jqPlot Options

**This document is out of date.  While the options described here should still be 
relavent and valid, it has not been updated for many new options.  Sorry for
this inconvenience.**

This document describes the options available to jqPlot.  These are set with the 
third argument to the $.jqplot('target', data, options) function. Options are 
using the following convention:

{{{ 
property: default, // notes 
}}}

This document is not complete!  Not all options are shown!  Also, Options marked 
with ** in the notes are post 0.7.1 additions. They will be available in the next 
release.  Further information about the options can be found in the online API 
documentation.  For details on how the options relate to the API documentation,
see the <Options Tutorial> in the optionsTutorial.txt file.

{{{
options = 
{
    seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12", 
        "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],  // colors that will 
         // be assigned to the series.  If there are more series than colors, colors
         // will wrap around and start at the beginning again.

    stackSeries: false, // if true, will create a stack plot.  
                        // Currently supported by line and bar graphs.

    title: '',      // Title for the plot.  Can also be specified as an object like:

    title: {
        text: '',   // title for the plot,
        show: true,
    },

    axesDefaults: {
        show: false,    // wether or not to renderer the axis.  Determined automatically.
        min: null,      // minimum numerical value of the axis.  Determined automatically.
        max: null,      // maximum numverical value of the axis.  Determined automatically.
        pad: 1.2,       // a factor multiplied by the data range on the axis to give the 
                        // axis range so that data points don't fall on the edges of the axis.
        ticks: [],      // a 1D [val1, val2, ...], or 2D [[val, label], [val, label], ...] 
                        // array of ticks to use.  Computed automatically.
        numberTicks: undefined,
        renderer: $.jqplot.LinearAxisRenderer,  // renderer to use to draw the axis,
        rendererOptions: {},    // options to pass to the renderer.  LinearAxisRenderer 
                                // has no options,
        tickOptions: {
            mark: 'outside',    // Where to put the tick mark on the axis
                                // 'outside', 'inside' or 'cross',
            showMark: true,
            showGridline: true, // wether to draw a gridline (across the whole grid) at this tick,
            markSize: 4,        // length the tick will extend beyond the grid in pixels.  For
                                // 'cross', length will be added above and below the grid boundary,
            show: true,         // wether to show the tick (mark and label),
            showLabel: true,    // wether to show the text label at the tick,
            formatString: '',   // format string to use with the axis tick formatter
        }
        showTicks: true,        // wether or not to show the tick labels,
        showTickMarks: true,    // wether or not to show the tick marks
    },
    
    axes: {
        xaxis: {
            // same options as axesDefaults
        },
        yaxis: {
            // same options as axesDefaults
        },
        x2axis: {
            // same options as axesDefaults
        },
        y2axis: {
            // same options as axesDefaults
        }
    },
    
    seriesDefaults: {
        show: true,     // wether to render the series.
        xaxis: 'xaxis', // either 'xaxis' or 'x2axis'.
        yaxis: 'yaxis', // either 'yaxis' or 'y2axis'.
        label: '',      // label to use in the legend for this line.
        color: '',      // CSS color spec to use for the line.  Determined automatically.
        lineWidth: 2.5, // Width of the line in pixels.
        shadow: true,   // show shadow or not.
        shadowAngle: 45,    // angle (degrees) of the shadow, clockwise from x axis.
        shadowOffset: 1.25, // offset from the line of the shadow.
        shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each 
                            // stroke offset by shadowOffset from the last.
        shadowAlpha: 0.1,   // Opacity of the shadow.
        showLine: true,     // whether to render the line segments or not.
        showMarker: true,   // render the data point markers or not.
        fill: false,        // fill under the line,
        fillAndStroke: false,       // **stroke a line at top of fill area.
        fillColor: undefined,       // **custom fill color for filled lines (default is line color).
        fillAlpha: undefined,       // **custom alpha to apply to fillColor.
        renderer: $.jqplot.LineRenderer],    // renderer used to draw the series.
        rendererOptions: {}, // options passed to the renderer.  LineRenderer has no options.
        markerRenderer: $.jqplot.MarkerRenderer,    // renderer to use to draw the data 
                                                    // point markers.
        markerOptions: { 
            show: true,             // wether to show data point markers.
            style: 'filledCircle',  // circle, diamond, square, filledCircle.
                                    // filledDiamond or filledSquare.
            lineWidth: 2,       // width of the stroke drawing the marker.
            size: 9,            // size (diameter, edge length, etc.) of the marker.
            color: '#666666'    // color of marker, set to color of line by default.
            shadow: true,       // wether to draw shadow on marker or not.
            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
            shadowOffset: 1,    // offset from the line of the shadow,
            shadowDepth: 3,     // Number of strokes to make when drawing shadow.  Each stroke 
                                // offset by shadowOffset from the last.
            shadowAlpha: 0.07   // Opacity of the shadow
        }
    },

    series:[
        {Each series has same options as seriesDefaults},
        {You can override each series individually here}
    ],
    
    legend: {
        show: false,
        location: 'ne',     // compass direction, nw, n, ne, e, se, s, sw, w.
        xoffset: 12,        // pixel offset of the legend box from the x (or x2) axis.
        yoffset: 12,        // pixel offset of the legend box from the y (or y2) axis.
    },
    
    grid: {
        drawGridLines: true,        // wether to draw lines across the grid or not.
        gridLineColor: '#cccccc'    // **Color of the grid lines.
        background: '#fffdf6',      // CSS color spec for background color of grid.
        borderColor: '#999999',     // CSS color spec for border around grid.
        borderWidth: 2.0,           // pixel width of border around grid.
        shadow: true,               // draw a shadow for grid.
        shadowAngle: 45,            // angle of the shadow.  Clockwise from x axis.
        shadowOffset: 1.5,          // offset from the line of the shadow.
        shadowWidth: 3,             // width of the stroke for the shadow.
        shadowDepth: 3,             // Number of strokes to make when drawing shadow.  
                                    // Each stroke offset by shadowOffset from the last.
        shadowAlpha: 0.07           // Opacity of the shadow
        renderer: $.jqplot.CanvasGridRenderer,  // renderer to use to draw the grid.
        rendererOptions: {}         // options to pass to the renderer.  Note, the default
                                    // CanvasGridRenderer takes no additional options.
    },                              
    
    // Plugin and renderer options.
    
    // BarRenderer. 
    // With BarRenderer, you can specify additional options in the rendererOptions object
    // on the series or on the seriesDefaults object.  Note, some options are respecified 
    // (like shadowDepth) to override lineRenderer defaults from which BarRenderer inherits.
    
    seriesDefaults: {
        rendererOptions: {
            barPadding: 8,      // number of pixels between adjacent bars in the same 
                                // group (same category or bin).
            barMargin: 10,      // number of pixels between adjacent groups of bars.
            barDirection: 'vertical', // vertical or horizontal.
            barWidth: null,     // width of the bars.  null to calculate automatically.
            shadowOffset: 2,    // offset from the bar edge to stroke the shadow.
            shadowDepth: 5,     // nuber of strokes to make for the shadow.
            shadowAlpha: 0.8,   // transparency of the shadow.
        }
    },
    
    // Cursor
    // Options are passed to the cursor plugin through the "cursor" object at the top
    // level of the options object.
    
    cursor: {
        style: 'crosshair',     // A CSS spec for the cursor type to change the 
                                // cursor to when over plot.
        show: true, 
        showTooltip: true,      // show a tooltip showing cursor position.
        followMouse: false,     // wether tooltip should follow the mouse or be stationary.
        tooltipLocation: 'se',  // location of the tooltip either relative to the mouse 
                                // (followMouse=true) or relative to the plot.  One of
                                // the compass directions, n, ne, e, se, etc.
        tooltipOffset: 6,       // pixel offset of the tooltip from the mouse or the axes.
        showTooltipGridPosition: false,     // show the grid pixel coordinates of the mouse
                                            // in the tooltip.
        showTooltipUnitPosition: true,      // show the coordinates in data units of the mouse 
                                            // in the tooltip.
        tooltipFormatString: '%.4P',    // sprintf style format string for tooltip values.
        useAxesFormatters: true,        // wether to use the same formatter and formatStrings
                                        // as used by the axes, or to use the formatString
                                        // specified on the cursor with sprintf.
        tooltipAxesGroups: [],  // show only specified axes groups in tooltip.  Would specify like:
                                // [['xaxis', 'yaxis'], ['xaxis', 'y2axis']].  By default, all axes
                                // combinations with for the series in the plot are shown.
        
    },
    
    // Dragable
    // Dragable options are specified with the "dragable" object at the top level
    // of the options object.
    
    dragable: {
        color: undefined,       // custom color to use for the dragged point and dragged line
                                // section. default will use a transparent variant of the line color.
        constrainTo: 'none',    // Constrain dragging motion to an axis: 'x', 'y', or 'none'.
    },
    
    // Highlighter
    // Highlighter options are specified with the "highlighter" object at the top level
    // of the options object.
    
    highlighter: {
        lineWidthAdjust: 2.5,   // pixels to add to the size line stroking the data point marker
                                // when showing highlight.  Only affects non filled data point markers.
        sizeAdjust: 5,          // pixels to add to the size of filled markers when drawing highlight.
        showTooltip: true,      // show a tooltip with data point values.
        tooltipLocation: 'nw',  // location of tooltip: n, ne, e, se, s, sw, w, nw.
        fadeTooltip: true,      // use fade effect to show/hide tooltip.
        tooltipFadeSpeed: "fast"// slow, def, fast, or a number of milliseconds.
        tooltipOffset: 2,       // pixel offset of tooltip from the highlight.
        tooltipAxes: 'both',    // which axis values to display in the tooltip, x, y or both.
        tooltipSeparator: ', '  // separator between values in the tooltip.
        useAxesFormatters: true // use the same format string and formatters as used in the axes to
                                // display values in the tooltip.
        tooltipFormatString: '%.5P' // sprintf format string for the tooltip.  only used if
                                    // useAxesFormatters is false.  Will use sprintf formatter with
                                    // this string, not the axes formatters.
    },
    
    // LogAxisRenderer
    // LogAxisRenderer add 2 options to the axes object.  These options are specified directly on
    // the axes or axesDefaults object.
    
    axesDefaults: {
        base: 10,                   // the logarithmic base.
        tickDistribution: 'even',   // 'even' or 'power'.  'even' will produce with even visiual (pixel)
                                    // spacing on the axis.  'power' will produce ticks spaced by 
                                    // increasing powers of the log base.
    },
    
    // PieRenderer
    // PieRenderer accepts options from the rendererOptions object of the series or seriesDefaults object.
    
    seriesDefaults: {
        rendererOptions: {
            diameter: undefined, // diameter of pie, auto computed by default.
            padding: 20,        // padding between pie and neighboring legend or plot margin.
            sliceMargin: 0,     // gap between slices.
            fill: true,         // render solid (filled) slices.
            shadowOffset: 2,    // offset of the shadow from the chart.
            shadowDepth: 5,     // Number of strokes to make when drawing shadow.  Each stroke 
                                // offset by shadowOffset from the last.
            shadowAlpha: 0.07   // Opacity of the shadow
        }
    },
    
    // Trendline
    // Trendline takes options on the trendline object of the series or seriesDefaults object.
    
    seriesDefaults: {
        trendline: {
            show: true,         // show the trend line
            color: '#666666',   // CSS color spec for the trend line.
            label: '',          // label for the trend line.
            type: 'linear',     // 'linear', 'exponential' or 'exp'
            shadow: true,       // show the trend line shadow.
            lineWidth: 1.5,     // width of the trend line.
            shadowAngle: 45,    // angle of the shadow.  Clockwise from x axis.
            shadowOffset: 1.5,  // offset from the line of the shadow.
            shadowDepth: 3,     // Number of strokes to make when drawing shadow.  
                                // Each stroke offset by shadowOffset from the last.
            shadowAlpha: 0.07   // Opacity of the shadow    
        }
    }
}
}}}

Added Site/Site_W/jpqplot/jquery-1.4.1.min.js.

















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*!
 * jQuery JavaScript Library v1.4.1
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Mon Jan 25 19:43:33 2010 -0500
 */
(function(z,v){function la(){if(!c.isReady){try{r.documentElement.doScroll("left")}catch(a){setTimeout(la,1);return}c.ready()}}function Ma(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,i){var j=a.length;if(typeof b==="object"){for(var n in b)X(a,n,b[n],f,e,d);return a}if(d!==v){f=!i&&f&&c.isFunction(d);for(n=0;n<j;n++)e(a[n],b,f?d.call(a[n],n,e(a[n],b)):d,i);return a}return j?
e(a[0],b):null}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function ma(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function na(a){var b,d=[],f=[],e=arguments,i,j,n,o,m,s,x=c.extend({},c.data(this,"events").live);if(!(a.button&&a.type==="click")){for(o in x){j=x[o];if(j.live===a.type||j.altLive&&c.inArray(a.type,j.altLive)>-1){i=j.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete x[o]}i=c(a.target).closest(f,
a.currentTarget);m=0;for(s=i.length;m<s;m++)for(o in x){j=x[o];n=i[m].elem;f=null;if(i[m].selector===j.selector){if(j.live==="mouseenter"||j.live==="mouseleave")f=c(a.relatedTarget).closest(j.selector)[0];if(!f||f!==n)d.push({elem:n,fn:j})}}m=0;for(s=d.length;m<s;m++){i=d[m];a.currentTarget=i.elem;a.data=i.fn.data;if(i.fn.apply(i.elem,e)===false){b=false;break}}return b}}function oa(a,b){return"live."+(a?a+".":"")+b.replace(/\./g,"`").replace(/ /g,"&")}function pa(a){return!a||!a.parentNode||a.parentNode.nodeType===
11}function qa(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var i in f)for(var j in f[i])c.event.add(this,i,f[i][j],f[i][j].data)}}})}function ra(a,b,d){var f,e,i;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&a[0].indexOf("<option")<0&&(c.support.checkClone||!sa.test(a[0]))){e=true;if(i=c.fragments[a[0]])if(i!==1)f=i}if(!f){b=b&&b[0]?b[0].ownerDocument||b[0]:r;f=b.createDocumentFragment();
c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=i?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(ta.concat.apply([],ta.slice(0,b)),function(){d[this]=a});return d}function ua(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Na=z.jQuery,Oa=z.$,r=z.document,S,Pa=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent,
va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:r;if(a=Ta.exec(a))if(c.isPlainObject(b)){a=[r.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ra([d[1]],
[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=r.getElementById(d[2])){if(b.id!==d[2])return S.find(a);this.length=1;this[0]=b}this.context=r;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=r;a=r.getElementsByTagName(a)}else return!b||b.jquery?(b||S).find(a):c(b).find(a);else if(c.isFunction(a))return S.ready(a);if(a.selector!==v){this.selector=a.selector;this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a,
this)},selector:"",jquery:"1.4.1",length:0,size:function(){return this.length},toArray:function(){return Q.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length=0;ba.apply(this,a);return this},each:function(a,b){return c.each(this,
a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(r,c);else P&&P.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};
c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(i in e){j=a[i];n=e[i];if(a!==n)if(f&&n&&(c.isPlainObject(n)||c.isArray(n))){j=j&&(c.isPlainObject(j)||c.isArray(j))?j:c.isArray(n)?[]:{};a[i]=c.extend(f,j,n)}else if(n!==v)a[i]=n}return a};c.extend({noConflict:function(a){z.$=
Oa;if(a)z.jQuery=Na;return c},isReady:false,ready:function(){if(!c.isReady){if(!r.body)return setTimeout(c.ready,13);c.isReady=true;if(P){for(var a,b=0;a=P[b++];)a.call(r,c);P=null}c.fn.triggerHandler&&c(r).triggerHandler("ready")}},bindReady:function(){if(!va){va=true;if(r.readyState==="complete")return c.ready();if(r.addEventListener){r.addEventListener("DOMContentLoaded",L,false);z.addEventListener("load",c.ready,false)}else if(r.attachEvent){r.attachEvent("onreadystatechange",L);z.attachEvent("onload",
c.ready);var a=false;try{a=z.frameElement==null}catch(b){}r.documentElement.doScroll&&a&&la()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,"isPrototypeOf"))return false;var b;for(b in a);return b===v||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;
return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return z.JSON&&z.JSON.parse?z.JSON.parse(a):(new Function("return "+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Ra.test(a)){var b=r.getElementsByTagName("head")[0]||
r.documentElement,d=r.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(r.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,i=a.length,j=i===v||c.isFunction(a);if(d)if(j)for(f in a){if(b.apply(a[f],d)===false)break}else for(;e<i;){if(b.apply(a[e++],d)===false)break}else if(j)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=
a[0];e<i&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Sa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==
v;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,i=a.length;e<i;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,i=0,j=a.length;i<j;i++){e=b(a[i],i,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=v}else if(b&&!c.isFunction(b)){d=b;b=v}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},
uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});O=c.uaMatch(O);if(O.browser){c.browser[O.browser]=true;c.browser.version=O.version}if(c.browser.webkit)c.browser.safari=true;if(wa)c.inArray=function(a,b){return wa.call(b,a)};S=c(r);if(r.addEventListener)L=function(){r.removeEventListener("DOMContentLoaded",
L,false);c.ready()};else if(r.attachEvent)L=function(){if(r.readyState==="complete"){r.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=r.documentElement,b=r.createElement("script"),d=r.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support=
{leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};
b.type="text/javascript";try{b.appendChild(r.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b,a.firstChild);if(z[f]){c.support.scriptEval=true;delete z[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function n(){c.support.noCloneEvent=false;d.detachEvent("onclick",n)});d.cloneNode(true).fireEvent("onclick")}d=r.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=r.createDocumentFragment();a.appendChild(d.firstChild);
c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var n=r.createElement("div");n.style.width=n.style.paddingLeft="1px";r.body.appendChild(n);c.boxModel=c.support.boxModel=n.offsetWidth===2;r.body.removeChild(n).style.display="none"});a=function(n){var o=r.createElement("div");n="on"+n;var m=n in o;if(!m){o.setAttribute(n,"return;");m=typeof o[n]==="function"}return m};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props=
{"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ua=0,xa={},Va={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var f=a[G],e=c.cache;if(!b&&!f)return null;f||(f=++Ua);if(typeof b==="object"){a[G]=f;e=e[f]=c.extend(true,
{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});if(d!==v){a[G]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[G]}catch(i){a.removeAttribute&&a.removeAttribute(G)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,
a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===v){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===v&&this.length)f=c.data(this[0],a);return f===v&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);
return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===v)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||
a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=
c(this);m.addClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className)for(var i=" "+e.className+" ",j=0,n=b.length;j<n;j++){if(i.indexOf(" "+b[j]+" ")<0)e.className+=" "+b[j]}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var m=c(this);m.removeClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string"||a===v)for(var b=(a||"").split(ca),
d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var i=(" "+e.className+" ").replace(ya," "),j=0,n=b.length;j<n;j++)i=i.replace(" "+b[j]+" "," ");e.className=i.substring(1,i.length-1)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var i=c(this);i.toggleClass(a.call(this,e,i.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,i=0,j=c(this),n=b,o=
a.split(ca);e=o[i++];){n=f?n:!j.hasClass(e);j[n?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(ya," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===v){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||
{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i<d;i++){var j=e[i];if(j.selected){a=c(j).val();if(b)return a;f.push(a)}}return f}if(za.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Wa,"")}return v}var n=c.isFunction(a);return this.each(function(o){var m=c(this),s=a;if(this.nodeType===1){if(n)s=a.call(this,o,m.val());
if(typeof s==="number")s+="";if(c.isArray(s)&&za.test(this.type))this.checked=c.inArray(m.val(),s)>=0;else if(c.nodeName(this,"select")){var x=c.makeArray(s);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),x)>=0});if(!x.length)this.selectedIndex=-1}else this.value=s}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return v;if(f&&b in c.attrFn)return c(a)[b](d);
f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==v;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Xa.test(b);if(b in a&&f&&!i){if(e){b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=
""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?v:a}return c.style(a,b,d)}});var ab=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==z&&!a.frameElement)a=z;if(!d.guid)d.guid=c.guid++;if(f!==v){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j=
function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var n,o=0;n=b[o++];){var m=n.split(".");n=m.shift();if(o>1){d=c.proxy(d);if(f!==v)d.data=f}d.type=m.slice(0).sort().join(".");var s=e[n],x=this.special[n]||{};if(!s){s=e[n]={};if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)}if(x.add)if((m=x.add.call(a,
d,f,m,s))&&c.isFunction(m)){m.guid=m.guid||d.guid;m.data=m.data||d.data;m.type=m.type||d.type;d=m}s[d.guid]=d;this.global[n]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/);for(var n=0;i=b[n++];){var o=i.split(".");i=o.shift();var m=!o.length,s=c.map(o.slice(0).sort(),ab);s=new RegExp("(^|\\.)"+
s.join("\\.(?:.*\\.)?")+"(\\.|$)");var x=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);for(e in f[i])break;if(!e){if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(A=c.data(a,"handle"))A.elem=null;c.removeData(a,
"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return v;a.result=v;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,
b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(i){}if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){d=a.target;var j;if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){try{if(d[e]){if(j=d["on"+e])d["on"+e]=null;this.triggered=true;d[e]()}}catch(n){}if(j)d["on"+e]=j;this.triggered=false}}},handle:function(a){var b,
d;a=arguments[0]=c.event.fix(a||z.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==v){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||r;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=r.documentElement;d=r.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;b.liveProxy=a;c.event.add(this,b.live,na,b)},remove:function(a){if(a.length){var b=
0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],na)}},special:{}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};
c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y};var Aa=function(a){for(var b=
a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ba=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ba:Aa,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ba:Aa)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this,
"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var da=/textarea|input|select/i;function Ca(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ea(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Ca(d);if(a.type!=="focusout"||
d.type!=="radio")c.data(d,"_change_data",e);if(!(f===v||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}}c.event.special.change={filters:{focusout:ea,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)},beforeactivate:function(a){a=
a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))}},setup:function(a,b,d){for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)},remove:function(a,b){for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)}};var T=c.event.special.change.filters}r.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,
f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){e=f;f=v}var j=b==="one"?c.proxy(e,function(n){c(this).unbind(n,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a,
b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+
a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e){var i,j=0;if(c.isFunction(f)){e=f;f=v}for(d=(d||"").split(/\s+/);(i=d[j++])!=null;){i=i==="focus"?"focusin":i==="blur"?"focusout":i==="hover"?d.push("mouseleave")&&"mouseenter":i;b==="live"?c(this.context).bind(oa(i,this.selector),{data:f,selector:this.selector,
live:i},e):c(this.context).unbind(oa(i,this.selector),e?{guid:e.guid+this.selector+i}:null)}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});z.attachEvent&&!z.addEventListener&&z.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g){for(var h="",k,l=0;g[l];l++){k=g[l];if(k.nodeType===3||k.nodeType===4)h+=k.nodeValue;else if(k.nodeType!==8)h+=a(k.childNodes)}return h}function b(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===k){y=l[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=k;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}l[q]=y}}}function d(g,h,k,l,q,p){q=0;for(var u=l.length;q<u;q++){var t=l[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===
k){y=l[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=k;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(o.filter(h,[t]).length>0){y=t;break}}t=t[g]}l[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;[0,0].sort(function(){n=false;return 0});var o=function(g,h,k,l){k=k||[];var q=h=h||r;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||
typeof g!=="string")return k;for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){I=u[3];p.push(u[1]);if(u[2]){R=u[3];break}}if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){g=p.shift();if(m.relative[g])g+=p.shift();t=fa(g,t)}else{if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){u=o.find(p.shift(),h,M);h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]}if(h){u=
l?{expr:p.pop(),set:A(l)}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=u.expr?o.filter(u.expr,u.set):u.set;if(p.length>0)y=A(t);else H=false;for(;p.length;){var D=p.pop();u=D;if(m.relative[D])u=p.pop();else D="";if(u==null)u=h;m.relative[D](y,u,M)}}else y=[]}y||(y=t);y||o.error(D||g);if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&
y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);if(R){o(R,q,k,l);o.uniqueSort(k)}return k};o.uniqueSort=function(g){if(C){j=n;g.sort(C);if(j)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};o.matches=function(g,h){return o(g,null,null,h)};o.find=function(g,h,k){var l,q;if(!g)return[];for(var p=0,u=m.order.length;p<u;p++){var t=m.order[p];if(q=m.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");l=m.find[t](q,
h,k);if(l!=null){g=g.replace(m.match[t],"");break}}}}l||(l=h.getElementsByTagName("*"));return{set:l,expr:g}};o.filter=function(g,h,k,l){for(var q=g,p=[],u=h,t,y,R=h&&h[0]&&w(h[0]);g&&h.length;){for(var H in m.filter)if((t=m.leftMatch[H].exec(g))!=null&&t[2]){var M=m.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(u===p)p=[];if(m.preFilter[H])if(t=m.preFilter[H](t,u,k,p,l,R)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=u[U])!=null;U++)if(D){I=M(D,t,U,u);var Da=
l^!!I;if(k&&I!=null)if(Da)y=true;else u[U]=false;else if(Da){p.push(D);y=true}}if(I!==v){k||(u=p);g=g.replace(m.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)o.error(g);else break;q=g}return u};o.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var m=o.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,h){var k=typeof h==="string",l=k&&!/\W/.test(h);k=k&&!l;if(l)h=h.toLowerCase();l=0;for(var q=g.length,
p;l<q;l++)if(p=g[l]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[l]=k||p&&p.nodeName.toLowerCase()===h?p||false:p===h}k&&o.filter(h,g,true)},">":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var l=0,q=g.length;l<q;l++){var p=g[l];if(p){k=p.parentNode;g[l]=k.nodeName.toLowerCase()===h?k:false}}}else{l=0;for(q=g.length;l<q;l++)if(p=g[l])g[l]=k?p.parentNode:p.parentNode===h;k&&o.filter(h,g,true)}},"":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=
h=h.toLowerCase();q=b}q("parentNode",h,l,g,p,k)},"~":function(g,h,k){var l=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,l,g,p,k)}},find:{ID:function(g,h,k){if(typeof h.getElementById!=="undefined"&&!k)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var k=[];h=h.getElementsByName(g[1]);for(var l=0,q=h.length;l<q;l++)h[l].getAttribute("name")===g[1]&&k.push(h[l]);return k.length===0?null:k}},
TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,k,l,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var u;(u=h[p])!=null;p++)if(u)if(q^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))k||l.push(u);else if(k)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&
"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,l,q,p){h=g[1].replace(/\\/g,"");if(!p&&m.attrMap[h])g[1]=m.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,l,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);else{g=o.filter(g[3],h,k,true^q);k||l.push.apply(l,g);return false}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);
return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!o(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===
g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,h){return h===0},last:function(g,h,k,l){return h===l.length-1},even:function(g,h){return h%2===
0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return h<k[3]-0},gt:function(g,h,k){return h>k[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,l){var q=h[1],p=m.filters[q];if(p)return p(g,k,h,l);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=h[3];k=0;for(l=h.length;k<l;k++)if(h[k]===g)return false;return true}else o.error("Syntax error, unrecognized expression: "+
q)},CHILD:function(g,h){var k=h[1],l=g;switch(k){case "only":case "first":for(;l=l.previousSibling;)if(l.nodeType===1)return false;if(k==="first")return true;l=g;case "last":for(;l=l.nextSibling;)if(l.nodeType===1)return false;return true;case "nth":k=h[2];var q=h[3];if(k===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var u=0;for(l=p.firstChild;l;l=l.nextSibling)if(l.nodeType===1)l.nodeIndex=++u;p.sizcache=h}g=g.nodeIndex-q;return k===0?g===0:g%k===0&&g/k>=
0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var l=h[2];h=h[4];return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="?
k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,l){var q=m.setFilters[h[2]];if(q)return q(g,k,h,l)}}},s=m.match.POS;for(var x in m.match){m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){return"\\"+(h-0+1)}))}var A=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};
try{Array.prototype.slice.call(r.documentElement.childNodes,0)}catch(B){A=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,l=g.length;k<l;k++)h.push(g[k]);else for(k=0;g[k];k++)h.push(g[k]);return h}}var C;if(r.documentElement.compareDocumentPosition)C=function(g,h){if(!g.compareDocumentPosition||!h.compareDocumentPosition){if(g==h)j=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===
h?0:1;if(g===0)j=true;return g};else if("sourceIndex"in r.documentElement)C=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)j=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)j=true;return g};else if(r.createRange)C=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)j=true;return g.ownerDocument?-1:1}var k=g.ownerDocument.createRange(),l=h.ownerDocument.createRange();k.setStart(g,0);k.setEnd(g,0);l.setStart(h,0);l.setEnd(h,0);g=k.compareBoundaryPoints(Range.START_TO_END,
l);if(g===0)j=true;return g};(function(){var g=r.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var k=r.documentElement;k.insertBefore(g,k.firstChild);if(r.getElementById(h)){m.find.ID=function(l,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]};m.filter.ID=function(l,q){var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id");
return l.nodeType===1&&p&&p.nodeValue===q}}k.removeChild(g);k=g=null})();(function(){var g=r.createElement("div");g.appendChild(r.createComment(""));if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);k=h}return k};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){return h.getAttribute("href",
2)};g=null})();r.querySelectorAll&&function(){var g=o,h=r.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){o=function(l,q,p,u){q=q||r;if(!u&&q.nodeType===9&&!w(q))try{return A(q.querySelectorAll(l),p)}catch(t){}return g(l,q,p,u)};for(var k in g)o[k]=g[k];h=null}}();(function(){var g=r.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){m.order.splice(1,0,"CLASS");m.find.CLASS=function(h,k,l){if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])};g=null}}})();var E=r.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g,h){return g!==h&&(g.contains?g.contains(h):true)},w=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},fa=function(g,h){var k=[],
l="",q;for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){l+=q[0];g=g.replace(m.match.PSEUDO,"")}g=m.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)o(g,h[q],k);return o.filter(l,k)};c.find=o;c.expr=o.selectors;c.expr[":"]=c.expr.filters;c.unique=o.uniqueSort;c.getText=a;c.isXMLDoc=w;c.contains=E})();var bb=/Until$/,cb=/^(?:parents|prevUntil|prevAll)/,db=/,/;Q=Array.prototype.slice;var Ea=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,i){return!!b.call(e,i,e)===d});else if(b.nodeType)return c.grep(a,
function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Qa.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;c.find(a,this[f],b);if(f>0)for(var i=d;i<b.length;i++)for(var j=0;j<d;j++)if(b[j]===b[i]){b.splice(i--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=
0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ea(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ea(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i={},j;if(f&&a.length){e=0;for(var n=a.length;e<n;e++){j=a[e];i[j]||(i[j]=c.expr.match.POS.test(j)?c(j,b||this.context):j)}for(;f&&f.ownerDocument&&f!==b;){for(j in i){e=i[j];if(e.jquery?e.index(f)>
-1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(m,s){for(;s&&s.ownerDocument&&s!==b;){if(o?o.index(s)>-1:c(s).is(a))return s;s=s.parentNode}return null})},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),
a);return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},
nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);bb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):
e;if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();return this.pushStack(e,a,Q.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==
b&&d.push(a);return d}});var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/<tbody/i,gb=/<|&\w+;/,sa=/checked\s*(?:[^=]|=\s*.checked.)/i,Ia=function(a,b,d){return eb.test(d)?a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],
col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));return c.getText(this)},
wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?
d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,
false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&
!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){qa(this,b);qa(this.find("*"),b.find("*"))}return b},html:function(a){if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;else if(typeof a==="string"&&!/<script/i.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(Ha.exec(a)||
["",""])[1].toLowerCase()]){a=a.replace(Ga,Ia);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var i=c(this),j=i.html();i.empty().append(function(){return a.call(this,e,j)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,
b,f))});else a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(s){return c.nodeName(s,"table")?s.getElementsByTagName("tbody")[0]||s.appendChild(s.ownerDocument.createElement("tbody")):s}var e,i,j=a[0],n=[];if(!c.support.checkClone&&arguments.length===3&&typeof j===
"string"&&sa.test(j))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(j))return this.each(function(s){var x=c(this);a[0]=j.call(this,s,b?x.html():v);x.domManip(a,b,d)});if(this[0]){e=a[0]&&a[0].parentNode&&a[0].parentNode.nodeType===11?{fragment:a[0].parentNode}:ra(a,this,n);if(i=e.fragment.firstChild){b=b&&c.nodeName(i,"tr");for(var o=0,m=this.length;o<m;o++)d.call(b?f(this[o],i):this[o],e.cacheable||this.length>1||o>0?e.fragment.cloneNode(true):e.fragment)}n&&c.each(n,
Ma)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);for(var e=0,i=d.length;e<i;e++){var j=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),j);f=f.concat(j)}return this.pushStack(f,a,d.selector)}});c.each({remove:function(a,b){if(!a||c.filter(a,[this]).length){if(!b&&this.nodeType===1){c.cleanData(this.getElementsByTagName("*"));c.cleanData([this])}this.parentNode&&
this.parentNode.removeChild(this)}},empty:function(){for(this.nodeType===1&&c.cleanData(this.getElementsByTagName("*"));this.firstChild;)this.removeChild(this.firstChild)}},function(a,b){c.fn[a]=function(){return this.each(b,arguments)}});c.extend({clean:function(a,b,d,f){b=b||r;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||r;var e=[];c.each(a,function(i,j){if(typeof j==="number")j+="";if(j){if(typeof j==="string"&&!gb.test(j))j=b.createTextNode(j);else if(typeof j===
"string"){j=j.replace(Ga,Ia);var n=(Ha.exec(j)||["",""])[1].toLowerCase(),o=F[n]||F._default,m=o[0];i=b.createElement("div");for(i.innerHTML=o[1]+j+o[2];m--;)i=i.lastChild;if(!c.support.tbody){m=fb.test(j);n=n==="table"&&!m?i.firstChild&&i.firstChild.childNodes:o[1]==="<table>"&&!m?i.childNodes:[];for(o=n.length-1;o>=0;--o)c.nodeName(n[o],"tbody")&&!n[o].childNodes.length&&n[o].parentNode.removeChild(n[o])}!c.support.leadingWhitespace&&V.test(j)&&i.insertBefore(b.createTextNode(V.exec(j)[0]),i.firstChild);
j=c.makeArray(i.childNodes)}if(j.nodeType)e.push(j);else e=c.merge(e,j)}});if(d)for(a=0;e[a];a++)if(f&&c.nodeName(e[a],"script")&&(!e[a].type||e[a].type.toLowerCase()==="text/javascript"))f.push(e[a].parentNode?e[a].parentNode.removeChild(e[a]):e[a]);else{e[a].nodeType===1&&e.splice.apply(e,[a+1,0].concat(c.makeArray(e[a].getElementsByTagName("script"))));d.appendChild(e[a])}return e},cleanData:function(a){for(var b=0,d;(d=a[b])!=null;b++){c.event.remove(d);c.removeData(d)}}});var hb=/z-?index|font-?weight|opacity|zoom|line-?height/i,
Ja=/alpha\([^)]*\)/,Ka=/opacity=([^)]*)/,ga=/float/i,ha=/-([a-z])/ig,ib=/([A-Z])/g,jb=/^-?\d+(?:px)?$/i,kb=/^-?\d/,lb={position:"absolute",visibility:"hidden",display:"block"},mb=["Left","Right"],nb=["Top","Bottom"],ob=r.defaultView&&r.defaultView.getComputedStyle,La=c.support.cssFloat?"cssFloat":"styleFloat",ia=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===v)return c.curCSS(d,f);if(typeof e==="number"&&!hb.test(f))e+="px";c.style(d,f,e)})};
c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return v;if((b==="width"||b==="height")&&parseFloat(d)<0)d=v;var f=a.style||a,e=d!==v;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=Ja.test(a)?a.replace(Ja,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Ka.exec(f.filter)[1])/100+"":""}if(ga.test(b))b=La;b=b.replace(ha,ia);if(e)f[b]=d;return f[b]},css:function(a,
b,d,f){if(b==="width"||b==="height"){var e,i=b==="width"?mb:nb;function j(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(i,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,"border"+this+"Width",true))||0})}a.offsetWidth!==0?j():c.swap(a,lb,j);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&
a.currentStyle){f=Ka.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ga.test(b))b=La;if(!d&&e&&e[b])f=e[b];else if(ob){if(ga.test(b))b="float";b=b.replace(ib,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ha,ia);f=a.currentStyle[b]||a.currentStyle[d];if(!jb.test(f)&&kb.test(f)){b=e.left;var i=a.runtimeStyle.left;a.runtimeStyle.left=
a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=i}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var pb=
J(),qb=/<script(.|\s)*?\/script>/gi,rb=/select|textarea/i,sb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ja=/\?/,tb=/(\?|&)_=.*?(&|$)/,ub=/^(\w+:)?\/\/([^\/?#]+)/,vb=/%20/g;c.fn.extend({_load:c.fn.load,load:function(a,b,d){if(typeof a!=="string")return this._load(a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=
c.param(b,c.ajaxSettings.traditional);f="POST"}var i=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(j,n){if(n==="success"||n==="notmodified")i.html(e?c("<div />").append(j.responseText.replace(qb,"")).find(e):j.responseText);d&&i.each(d,[j.responseText,n,j])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&
(this.checked||rb.test(this.nodeName)||sb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,
b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:z.XMLHttpRequest&&(z.location.protocol!=="file:"||!z.ActiveXObject)?function(){return new z.XMLHttpRequest}:
function(){try{return new z.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&e.success.call(o,n,j,w);e.global&&f("ajaxSuccess",[w,e])}function d(){e.complete&&e.complete.call(o,w,j);e.global&&f("ajaxComplete",[w,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}
function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),i,j,n,o=a&&a.context||e,m=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(m==="GET")N.test(e.url)||(e.url+=(ja.test(e.url)?"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||
N.test(e.url))){i=e.jsonpCallback||"jsonp"+pb++;if(e.data)e.data=(e.data+"").replace(N,"="+i+"$1");e.url=e.url.replace(N,"="+i+"$1");e.dataType="script";z[i]=z[i]||function(q){n=q;b();d();z[i]=v;try{delete z[i]}catch(p){}A&&A.removeChild(B)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===false&&m==="GET"){var s=J(),x=e.url.replace(tb,"$1_="+s+"$2");e.url=x+(x===e.url?(ja.test(e.url)?"&":"?")+"_="+s:"")}if(e.data&&m==="GET")e.url+=(ja.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&
c.event.trigger("ajaxStart");s=(s=ub.exec(e.url))&&(s[1]&&s[1]!==location.protocol||s[2]!==location.host);if(e.dataType==="script"&&m==="GET"&&s){var A=r.getElementsByTagName("head")[0]||r.documentElement,B=r.createElement("script");B.src=e.url;if(e.scriptCharset)B.charset=e.scriptCharset;if(!i){var C=false;B.onload=B.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;b();d();B.onload=B.onreadystatechange=null;A&&B.parentNode&&
A.removeChild(B)}}}A.insertBefore(B,A.firstChild);return v}var E=false,w=e.xhr();if(w){e.username?w.open(m,e.url,e.async,e.username,e.password):w.open(m,e.url,e.async);try{if(e.data||a&&a.contentType)w.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[e.url]);c.etag[e.url]&&w.setRequestHeader("If-None-Match",c.etag[e.url])}s||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",
e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(fa){}if(e.beforeSend&&e.beforeSend.call(o,w,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");w.abort();return false}e.global&&f("ajaxSend",[w,e]);var g=w.onreadystatechange=function(q){if(!w||w.readyState===0||q==="abort"){E||d();E=true;if(w)w.onreadystatechange=c.noop}else if(!E&&w&&(w.readyState===4||q==="timeout")){E=true;w.onreadystatechange=c.noop;j=q==="timeout"?"timeout":!c.httpSuccess(w)?
"error":e.ifModified&&c.httpNotModified(w,e.url)?"notmodified":"success";var p;if(j==="success")try{n=c.httpData(w,e.dataType,e)}catch(u){j="parsererror";p=u}if(j==="success"||j==="notmodified")i||b();else c.handleError(e,w,j,p);d();q==="timeout"&&w.abort();if(e.async)w=null}};try{var h=w.abort;w.abort=function(){w&&h.call(w);g("abort")}}catch(k){}e.async&&e.timeout>0&&setTimeout(function(){w&&!E&&g("timeout")},e.timeout);try{w.send(m==="POST"||m==="PUT"||m==="DELETE"?e.data:null)}catch(l){c.handleError(e,
w,null,l);d()}e.async||g();return w}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=
f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(j,n){if(c.isArray(n))c.each(n,
function(o,m){b?f(j,m):d(j+"["+(typeof m==="object"||c.isArray(m)?o:"")+"]",m)});else!b&&n!=null&&typeof n==="object"?c.each(n,function(o,m){d(j+"["+o+"]",m)}):f(j,n)}function f(j,n){n=c.isFunction(n)?n():n;e[e.length]=encodeURIComponent(j)+"="+encodeURIComponent(n)}var e=[];if(b===v)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var i in a)d(i,a[i]);return e.join("&").replace(vb,"+")}});var ka={},wb=/toggle|show|hide/,xb=/^([+-]=)?([\d+-.]+)(.*)$/,
W,ta=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(ka[d])f=ka[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();
ka[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&
c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var i=c.extend({},e),j,n=this.nodeType===1&&c(this).is(":hidden"),
o=this;for(j in a){var m=j.replace(ha,ia);if(j!==m){a[m]=a[j];delete a[j];j=m}if(a[j]==="hide"&&n||a[j]==="show"&&!n)return i.complete.call(this);if((j==="height"||j==="width")&&this.style){i.display=c.css(this,"display");i.overflow=this.style.overflow}if(c.isArray(a[j])){(i.specialEasing=i.specialEasing||{})[j]=a[j][1];a[j]=a[j][0]}}if(i.overflow!=null)this.style.overflow="hidden";i.curAnim=c.extend({},a);c.each(a,function(s,x){var A=new c.fx(o,i,s);if(wb.test(x))A[x==="toggle"?n?"show":"hide":x](a);
else{var B=xb.exec(x),C=A.cur(true)||0;if(B){x=parseFloat(B[2]);var E=B[3]||"px";if(E!=="px"){o.style[s]=(x||1)+E;C=(x||1)/A.cur(true)*C;o.style[s]=C+E}if(B[1])x=(B[1]==="-="?-1:1)*x+C;A.custom(C,x,E)}else A.custom(C,x,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",
1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration==="number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,
b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==
null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(i){return e.step(i)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop===
"width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=
this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=
c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=
null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in r.documentElement?function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),
f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=
b,e=b.ownerDocument,i,j=e.documentElement,n=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var o=b.offsetTop,m=b.offsetLeft;(b=b.parentNode)&&b!==n&&b!==j;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;i=e?e.getComputedStyle(b,null):b.currentStyle;o-=b.scrollTop;m-=b.scrollLeft;if(b===d){o+=b.offsetTop;m+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){o+=parseFloat(i.borderTopWidth)||
0;m+=parseFloat(i.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&i.overflow!=="visible"){o+=parseFloat(i.borderTopWidth)||0;m+=parseFloat(i.borderLeftWidth)||0}f=i}if(f.position==="relative"||f.position==="static"){o+=n.offsetTop;m+=n.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){o+=Math.max(j.scrollTop,n.scrollTop);m+=Math.max(j.scrollLeft,n.scrollLeft)}return{top:o,left:m}};c.offset={initialize:function(){var a=r.body,b=r.createElement("div"),
d,f,e,i=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);
d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i;a.removeChild(b);c.offset.initialize=c.noop},
bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),i=parseInt(c.curCSS(a,"top",true),10)||0,j=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,d,e);d={top:b.top-e.top+i,left:b.left-
e.left+j};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=
this.offsetParent||r.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],i;if(!e)return null;if(f!==v)return this.each(function(){if(i=ua(this))i.scrollTo(!a?f:c(i).scrollLeft(),a?f:c(i).scrollTop());else this[d]=f});else return(i=ua(e))?"pageXOffset"in i?i[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&i.document.documentElement[d]||i.document.body[d]:e[d]}});
c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(i){var j=c(this);j[d](f.call(this,i,j[d]()))});return"scrollTo"in e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||
e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===v?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});z.jQuery=z.$=c})(window);

Added Site/Site_W/jpqplot/jquery-1.4.2.min.js.





















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);

Added Site/Site_W/jpqplot/jquery.jqplot.css.









































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
/*rules for the plot target div.  These will be cascaded down to all plot elements according to css rules*/
.jqplot-target {
    position: relative;
    color: #666666;
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    font-size: 1em;
/*    height: 300px;
    width: 400px;*/
}

/*rules applied to all axes*/
.jqplot-axis {
    font-size: 0.75em;
}

.jqplot-xaxis {
    margin-top: 10px;
}

.jqplot-x2axis {
    margin-bottom: 10px;
}

.jqplot-yaxis {
    margin-right: 10px;
}

.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis {
    margin-left: 10px;
    margin-right: 10px;
}

/*rules applied to all axis tick divs*/
.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick {
    position: absolute;
}


.jqplot-xaxis-tick {
    top: 0px;
    /* initial position untill tick is drawn in proper place */
    left: 15px;
/*    padding-top: 10px;*/
    vertical-align: top;
}

.jqplot-x2axis-tick {
    bottom: 0px;
    /* initial position untill tick is drawn in proper place */
    left: 15px;
/*    padding-bottom: 10px;*/
    vertical-align: bottom;
}

.jqplot-yaxis-tick {
    right: 0px;
    /* initial position untill tick is drawn in proper place */
    top: 15px;
/*    padding-right: 10px;*/
    text-align: right;
}

.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick {
    left: 0px;
    /* initial position untill tick is drawn in proper place */
    top: 15px;
/*    padding-left: 10px;*/
/*    padding-right: 15px;*/
    text-align: left;
}

.jqplot-meterGauge-tick {
    font-size: 0.75em;
    color: #999999;
}

.jqplot-meterGauge-label {
    font-size: 1em;
    color: #999999;
}
.jqplot-xaxis-label {
    margin-top: 10px;
    font-size: 11pt;
    position: absolute;
}

.jqplot-x2axis-label {
    margin-bottom: 10px;
    font-size: 11pt;
    position: absolute;
}

.jqplot-yaxis-label {
    margin-right: 10px;
/*    text-align: center;*/
    font-size: 11pt;
    position: absolute;
}

.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label {
/*    text-align: center;*/
    font-size: 11pt;
    position: absolute;
}

table.jqplot-table-legend {
    margin-top: 12px;
    margin-bottom: 12px;
    margin-left: 12px;
    margin-right: 12px;
}

table.jqplot-table-legend, table.jqplot-cursor-legend {
    background-color: rgba(255,255,255,0.6);
    border: 1px solid #cccccc;
    position: absolute;
    font-size: 0.75em;
}

td.jqplot-table-legend {
    vertical-align:middle;
}

td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active {
    cursor: pointer;
}

td.jqplot-table-legend > div {
    border: 1px solid #cccccc;
    padding:1px;
}

div.jqplot-table-legend-swatch {
    width:0px;
    height:0px;
    border-top-width: 5px;
    border-bottom-width: 5px;
    border-left-width: 6px;
    border-right-width: 6px;
    border-top-style: solid;
    border-bottom-style: solid;
    border-left-style: solid;
    border-right-style: solid;
}

.jqplot-title {
    top: 0px;
    left: 0px;
    padding-bottom: 0.5em;
    font-size: 1.2em;
}

table.jqplot-cursor-tooltip {
    border: 1px solid #cccccc;
    font-size: 0.75em;
}


.jqplot-cursor-tooltip {
    border: 1px solid #cccccc;
    font-size: 0.75em;
    white-space: nowrap;
    background: rgba(208,208,208,0.5);
    padding: 1px;
}

.jqplot-highlighter-tooltip {
    border: 1px solid #cccccc;
    font-size: 0.75em;
    white-space: nowrap;
    background: rgba(208,208,208,0.5);
    padding: 1px;
}

.jqplot-point-label {
    font-size: 0.75em;
    z-index: 2;
}
      
td.jqplot-cursor-legend-swatch {
vertical-align:middle;
text-align:center;
}

div.jqplot-cursor-legend-swatch {
width:1.2em;
height:0.7em;
}

.jqplot-error {
/*   Styles added to the plot target container when there is an error go here.*/
    text-align: center;
}

.jqplot-error-message {
/*    Styling of the custom error message div goes here.*/
    position: relative;
    top: 46%;
    display: inline-block;
}

div.jqplot-bubble-label {
    font-size: 0.8em;
/*    background: rgba(90%, 90%, 90%, 0.15);*/
    padding-left: 2px;
    padding-right: 2px;
    color: rgb(20%, 20%, 20%);
}

div.jqplot-bubble-label.jqplot-bubble-label-highlight {
    background: rgba(90%, 90%, 90%, 0.7);
}

Added Site/Site_W/jpqplot/jquery.jqplot.js.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
/**
 * Title: jqPlot Charts
 * 
 * Pure JavaScript plotting plugin for jQuery.
 * 
 * About: Version
 * 
 * 0.9.7r635 
 * 
 * About: Copyright & License
 * 
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly.
 * 
 * See <GPL Version 2> and <MIT License> contained within this distribution for further information. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php.  This is, of course, not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php.
 * 
 * jqPlot includes `date instance methods and printf/sprintf functions by other authors:
 * 
 * Date instance methods:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 * 
 * About: Introduction
 * 
 * jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.1 is included in the distribution.  
 * To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally 
 * the excanvas script for IE support in your web page:
 * 
 * > <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
 * > <script language="javascript" type="text/javascript" src="jquery-1.4.2.min.js"></script>
 * > <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
 * > <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
 * 
 * jqPlot can be customized by overriding the defaults of any of the objects which make
 * up the plot. The general usage of jqplot is:
 * 
 * > chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject});
 * 
 * The options available to jqplot are detailed in <jqPlot Options> in the jqPlotOptions.txt file.
 * 
 * An actual call to $.jqplot() may look like the 
 * examples below:
 * 
 * > chart = $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);
 * 
 * or
 * 
 * > dataArray = [34,12,43,55,77];
 * > chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}});
 * 
 * For more inforrmation, see <jqPlot Usage>.
 * 
 * About: Usage
 * 
 * See <jqPlot Usage>
 * 
 * About: Available Options 
 * 
 * See <jqPlot Options> for a list of options available thorugh the options object (not complete yet!)
 * 
 * About: Options Usage
 * 
 * See <Options Tutorial>
 * 
 * About: Changes
 * 
 * See <Change Log>
 * 
 */

(function($) {
    // make sure undefined is undefined
    var undefined;

    /**
     * Class: $.jqplot
     * jQuery function called by the user to create a plot.
     *  
     * Parameters:
     * target - ID of target element to render the plot into.
     * data - an array of data series.
     * options - user defined options object.  See the individual classes for available options.
     * 
     * Properties:
     * config - object to hold configuration information for jqPlot plot object.
     * 
     * attributes:
     * enablePlugins - False to disable plugins by default.  Plugins must then be explicitly 
     *   enabled in the individual plot options.  Default: false.
     *   This property sets the "show" property of certain plugins to true or false.
     *   Only plugins that can be immediately active upon loading are affected.  This includes
     *   non-renderer plugins like cursor, dragable, highlighter, and trendline.
     * defaultHeight - Default height for plots where no css height specification exists.  This
     *   is a jqplot wide default.
     * defaultWidth - Default height for plots where no css height specification exists.  This
     *   is a jqplot wide default.
     */

    $.jqplot = function(target, data, options) {
        var _data, _options;
        
        if (options == null) {
            if (data instanceof Array) {
                _data = data;
                _options = null;   
            }
            
            else if (data.constructor == Object) {
                _data = null;
                _options = data;
            }
        }
        else {
            _data = data;
            _options = options;
        }
        var plot = new jqPlot();
        // remove any error class that may be stuck on target.
        $('#'+target).removeClass('jqplot-error');
        
        if ($.jqplot.config.catchErrors) {
            try {
                plot.init(target, _data, _options);
                plot.draw();
                plot.themeEngine.init.call(plot);
                return plot;
            }
            catch(e) {
                var msg = $.jqplot.config.errorMessage || e.message;
                $('#'+target).append('<div class="jqplot-error-message">'+msg+'</div>');
                $('#'+target).addClass('jqplot-error');
                document.getElementById(target).style.background = $.jqplot.config.errorBackground;
                document.getElementById(target).style.border = $.jqplot.config.errorBorder;
                document.getElementById(target).style.fontFamily = $.jqplot.config.errorFontFamily;
                document.getElementById(target).style.fontSize = $.jqplot.config.errorFontSize;
                document.getElementById(target).style.fontStyle = $.jqplot.config.errorFontStyle;
                document.getElementById(target).style.fontWeight = $.jqplot.config.errorFontWeight;
            }
        }
        else {        
            plot.init(target, _data, _options);
            plot.draw();
            plot.themeEngine.init.call(plot);
            return plot;
        }
    };
        
    $.jqplot.debug = 1;
    $.jqplot.config = {
        debug:1,
        enablePlugins:false,
        defaultHeight:300,
        defaultWidth:400,
        UTCAdjust:false,
        timezoneOffset: new Date(new Date().getTimezoneOffset() * 60000),
        errorMessage: '',
        errorBackground: '',
        errorBorder: '',
        errorFontFamily: '',
        errorFontSize: '',
        errorFontStyle: '',
        errorFontWeight: '',
        catchErrors: false,
        defaultTickFormatString: "%.1f"
    };
    
    $.jqplot.enablePlugins = $.jqplot.config.enablePlugins;
    
    // canvas related tests taken from modernizer:
    // Copyright © 2009–2010 Faruk Ates.
    // http://www.modernizr.com
    
    $.jqplot.support_canvas = function() {
        return !!document.createElement('canvas').getContext;
    };
            
    $.jqplot.support_canvas_text = function() {
        return !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function');
    };
    
    $.jqplot.use_excanvas = ($.browser.msie && !$.jqplot.support_canvas()) ? true : false;
    
    /**
     * 
     * Hooks: jqPlot Pugin Hooks
     * 
     * $.jqplot.preInitHooks - called before initialization.
     * $.jqplot.postInitHooks - called after initialization.
     * $.jqplot.preParseOptionsHooks - called before user options are parsed.
     * $.jqplot.postParseOptionsHooks - called after user options are parsed.
     * $.jqplot.preDrawHooks - called before plot draw.
     * $.jqplot.postDrawHooks - called after plot draw.
     * $.jqplot.preDrawSeriesHooks - called before each series is drawn.
     * $.jqplot.postDrawSeriesHooks - called after each series is drawn.
     * $.jqplot.preDrawLegendHooks - called before the legend is drawn.
     * $.jqplot.addLegendRowHooks - called at the end of legend draw, so plugins
     *     can add rows to the legend table.
     * $.jqplot.preSeriesInitHooks - called before series is initialized.
     * $.jqplot.postSeriesInitHooks - called after series is initialized.
     * $.jqplot.preParseSeriesOptionsHooks - called before series related options
     *     are parsed.
     * $.jqplot.postParseSeriesOptionsHooks - called after series related options
     *     are parsed.
     * $.jqplot.eventListenerHooks - called at the end of plot drawing, binds
     *     listeners to the event canvas which lays on top of the grid area.
     * $.jqplot.preDrawSeriesShadowHooks - called before series shadows are drawn.
     * $.jqplot.postDrawSeriesShadowHooks - called after series shadows are drawn.
     * 
     */
    
    $.jqplot.preInitHooks = [];
    $.jqplot.postInitHooks = [];
    $.jqplot.preParseOptionsHooks = [];
    $.jqplot.postParseOptionsHooks = [];
    $.jqplot.preDrawHooks = [];
    $.jqplot.postDrawHooks = [];
    $.jqplot.preDrawSeriesHooks = [];
    $.jqplot.postDrawSeriesHooks = [];
    $.jqplot.preDrawLegendHooks = [];
    $.jqplot.addLegendRowHooks = [];
    $.jqplot.preSeriesInitHooks = [];
    $.jqplot.postSeriesInitHooks = [];
    $.jqplot.preParseSeriesOptionsHooks = [];
    $.jqplot.postParseSeriesOptionsHooks = [];
    $.jqplot.eventListenerHooks = [];
    $.jqplot.preDrawSeriesShadowHooks = [];
    $.jqplot.postDrawSeriesShadowHooks = [];

    // A superclass holding some common properties and methods.
    $.jqplot.ElemContainer = function() {
        this._elem;
        this._plotWidth;
        this._plotHeight;
        this._plotDimensions = {height:null, width:null};
    };
    
    $.jqplot.ElemContainer.prototype.createElement = function(el, offsets, clss, cssopts, attrib) {
        this._offsets = offsets;
        var klass = clss || 'jqplot';
        var elem = document.createElement(el);
        this._elem = $(elem);
        this._elem.addClass(klass);
        this._elem.css(cssopts);
        this._elem.attr(attrib);
        return this._elem;
    };
    
    $.jqplot.ElemContainer.prototype.getWidth = function() {
        if (this._elem) {
            return this._elem.outerWidth(true);
        }
        else {
            return null;
        }
    };
    
    $.jqplot.ElemContainer.prototype.getHeight = function() {
        if (this._elem) {
            return this._elem.outerHeight(true);
        }
        else {
            return null;
        }
    };
    
    $.jqplot.ElemContainer.prototype.getPosition = function() {
        if (this._elem) {
            return this._elem.position();
        }
        else {
            return {top:null, left:null, bottom:null, right:null};
        }
    };
    
    $.jqplot.ElemContainer.prototype.getTop = function() {
        return this.getPosition().top;
    };
    
    $.jqplot.ElemContainer.prototype.getLeft = function() {
        return this.getPosition().left;
    };
    
    $.jqplot.ElemContainer.prototype.getBottom = function() {
        return this._elem.css('bottom');
    };
    
    $.jqplot.ElemContainer.prototype.getRight = function() {
        return this._elem.css('right');
    };
    

    /**
     * Class: Axis
     * An individual axis object.  Cannot be instantiated directly, but created
     * by the Plot oject.  Axis properties can be set or overriden by the 
     * options passed in from the user.
     * 
     */
    function Axis(name) {
        $.jqplot.ElemContainer.call(this);
        // Group: Properties
        //
        // Axes options are specified within an axes object at the top level of the 
        // plot options like so:
        // > {
        // >    axes: {
        // >        xaxis: {min: 5},
        // >        yaxis: {min: 2, max: 8, numberTicks:4},
        // >        x2axis: {pad: 1.5},
        // >        y2axis: {ticks:[22, 44, 66, 88]}
        // >        }
        // > }
        // There are 4 axes, 'xaxis', 'yaxis', 'x2axis', 'y2axis'.  Any or all of 
        // which may be specified.
        this.name = name;
        this._series = [];
        // prop: show
        // Wether to display the axis on the graph.
        this.show = false;
        // prop: tickRenderer
        // A class of a rendering engine for creating the ticks labels displayed on the plot, 
        // See <$.jqplot.AxisTickRenderer>.
        this.tickRenderer = $.jqplot.AxisTickRenderer;
        // prop: tickOptions
        // Options that will be passed to the tickRenderer, see <$.jqplot.AxisTickRenderer> options.
        this.tickOptions = {};
        // prop: labelRenderer
        // A class of a rendering engine for creating an axis label.
        this.labelRenderer = $.jqplot.AxisLabelRenderer;
        // prop: labelOptions
        // Options passed to the label renderer.
        this.labelOptions = {};
        // prop: label
        // Label for the axis
        this.label = null;
        // prop: showLabel
        // true to show the axis label.
        this.showLabel = true;
        // prop: min
        // minimum value of the axis (in data units, not pixels).
        this.min=null;
        // prop: max
        // maximum value of the axis (in data units, not pixels).
        this.max=null;
        // prop: autoscale
        // Autoscale the axis min and max values to provide sensible tick spacing.
        // If axis min or max are set, autoscale will be turned off.
        // The numberTicks, tickInterval and pad options do work with 
        // autoscale, although tickInterval has not been tested yet.
        // padMin and padMax do nothing when autoscale is on.
        this.autoscale = false;
        // prop: pad
        // Padding to extend the range above and below the data bounds.
        // The data range is multiplied by this factor to determine minimum and maximum axis bounds.
        // A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0.
        this.pad = 1.2;
        // prop: padMax
        // Padding to extend the range above data bounds.
        // The top of the data range is multiplied by this factor to determine maximum axis bounds.
        // A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0.
        this.padMax = null;
        // prop: padMin
        // Padding to extend the range below data bounds.
        // The bottom of the data range is multiplied by this factor to determine minimum axis bounds.
        // A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0.
        this.padMin = null;
        // prop: ticks
        // 1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.
        // If no label is specified, the value is formatted into an appropriate label.
        this.ticks = [];
        // prop: numberTicks
        // Desired number of ticks.  Default is to compute automatically.
        this.numberTicks;
        // prop: tickInterval
        // number of units between ticks.  Mutually exclusive with numberTicks.
        this.tickInterval;
        // prop: renderer
        // A class of a rendering engine that handles tick generation, 
        // scaling input data to pixel grid units and drawing the axis element.
        this.renderer = $.jqplot.LinearAxisRenderer;
        // prop: rendererOptions
        // renderer specific options.  See <$.jqplot.LinearAxisRenderer> for options.
        this.rendererOptions = {};
        // prop: showTicks
        // Wether to show the ticks (both marks and labels) or not.
        // Will not override showMark and showLabel options if specified on the ticks themselves.
        this.showTicks = true;
        // prop: showTickMarks
        // Wether to show the tick marks (line crossing grid) or not.
        // Overridden by showTicks and showMark option of tick itself.
        this.showTickMarks = true;
        // prop: showMinorTicks
        // Wether or not to show minor ticks.  This is renderer dependent.
        // The default <$.jqplot.LinearAxisRenderer> does not have minor ticks.
        this.showMinorTicks = true;
        // prop: useSeriesColor
        // Use the color of the first series associated with this axis for the
        // tick marks and line bordering this axis.
        this.useSeriesColor = false;
        // prop: borderWidth
        // width of line stroked at the border of the axis.  Defaults
        // to the width of the grid boarder.
        this.borderWidth = null;
        // prop: borderColor
        // color of the border adjacent to the axis.  Defaults to grid border color.
        this.borderColor = null;
        // minimum and maximum values on the axis.
        this._dataBounds = {min:null, max:null};
        // pixel position from the top left of the min value and max value on the axis.
        this._offsets = {min:null, max:null};
        this._ticks=[];
        this._label = null;
        // prop: syncTicks
        // true to try and synchronize tick spacing across multiple axes so that ticks and
        // grid lines line up.  This has an impact on autoscaling algorithm, however.
        // In general, autoscaling an individual axis will work better if it does not
        // have to sync ticks.
        this.syncTicks = null;
        // prop: tickSpacing
        // Approximate pixel spacing between ticks on graph.  Used during autoscaling.
        // This number will be an upper bound, actual spacing will be less.
        this.tickSpacing = 75;
        // Properties to hold the original values for min, max, ticks, tickInterval and numberTicks
        // so they can be restored if altered by plugins.
        this._min = null;
        this._max = null;
        this._tickInterval = null;
        this._numberTicks = null;
        this.__ticks = null;
    }
    
    Axis.prototype = new $.jqplot.ElemContainer();
    Axis.prototype.constructor = Axis;
    
    Axis.prototype.init = function() {
        this.renderer = new this.renderer();
        // set the axis name
        this.tickOptions.axis = this.name;
        // if showMark or showLabel tick options not specified, use value of axis option.
        // showTicks overrides showTickMarks.
        if (this.tickOptions.showMark == null) {
            this.tickOptions.showMark = this.showTicks;
        }
        if (this.tickOptions.showMark == null) {
            this.tickOptions.showMark = this.showTickMarks;
        }
        if (this.tickOptions.showLabel == null) {
            this.tickOptions.showLabel = this.showTicks;
        }
        
        if (this.label == null || this.label == '') {
            this.showLabel = false;
        }
        else {
            this.labelOptions.label = this.label;
        }
        if (this.showLabel == false) {
            this.labelOptions.show = false;
        }
        // set the default padMax, padMin if not specified
        // special check, if no padding desired, padding
        // should be set to 1.0
        if (this.pad == 0) {
            this.pad = 1.0;
        }
        if (this.padMax == 0) {
            this.padMax = 1.0;
        }
        if (this.padMin == 0) {
            this.padMin = 1.0;
        }
        if (this.padMax == null) {
            this.padMax = (this.pad-1)/2 + 1;
        }
        if (this.padMin == null) {
            this.padMin = (this.pad-1)/2 + 1;
        }
        // now that padMin and padMax are correctly set, reset pad in case user has supplied 
        // padMin and/or padMax
        this.pad = this.padMax + this.padMin - 1;
        if (this.min != null || this.max != null) {
            this.autoscale = false;
        }
        // if not set, sync ticks for y axes but not x by default.
        if (this.syncTicks == null && this.name.indexOf('y') > -1) {
            this.syncTicks = true;
        }
        else if (this.syncTicks == null){
            this.syncTicks = false;
        }
        this.renderer.init.call(this, this.rendererOptions);
        
    };
    
    Axis.prototype.draw = function(ctx) {
        return this.renderer.draw.call(this, ctx);
        
    };
    
    Axis.prototype.set = function() {
        this.renderer.set.call(this);
    };
    
    Axis.prototype.pack = function(pos, offsets) {
        if (this.show) {
            this.renderer.pack.call(this, pos, offsets);
        }
        // these properties should all be available now.
        if (this._min == null) {
            this._min = this.min;
            this._max = this.max;
            this._tickInterval = this.tickInterval;
            this._numberTicks = this.numberTicks;
            this.__ticks = this._ticks;
        }
    };
    
    // reset the axis back to original values if it has been scaled, zoomed, etc.
    Axis.prototype.reset = function() {
        this.renderer.reset.call(this);
    };
    
    Axis.prototype.resetScale = function() {
        this.min = null;
        this.max = null;
        this.numberTicks = null;
        this.tickInterval = null;
    };

    /**
     * Class: Legend
     * Legend object.  Cannot be instantiated directly, but created
     * by the Plot oject.  Legend properties can be set or overriden by the 
     * options passed in from the user.
     */
    function Legend(options) {
        $.jqplot.ElemContainer.call(this);
        // Group: Properties
        
        // prop: show
        // Wether to display the legend on the graph.
        this.show = false;
        // prop: location
        // Placement of the legend.  one of the compass directions: nw, n, ne, e, se, s, sw, w
        this.location = 'ne';
        // prop: labels
        // Array of labels to use.  By default the renderer will look for labels on the series.
        // Labels specified in this array will override labels specified on the series.
        this.labels = [];
        // prop: showLabels
        // true to show the label text on the  legend.
        this.showLabels = true;
        // prop: showSwatch
        // true to show the color swatches on the legend.
        this.showSwatches = true;
        // prop: placement
        // "insideGrid" places legend inside the grid area of the plot.
        // "outsideGrid" places the legend outside the grid but inside the plot container, 
        // shrinking the grid to accomodate the legend.
        // "inside" synonym for "insideGrid", 
        // "outside" places the legend ouside the grid area, but does not shrink the grid which
        // can cause the legend to overflow the plot container.
        this.placement = "insideGrid";
        // prop: xoffset
        // DEPRECATED.  Set the margins on the legend using the marginTop, marginLeft, etc. 
        // properties or via CSS margin styling of the .jqplot-table-legend class.
        this.xoffset = 0;
        // prop: yoffset
        // DEPRECATED.  Set the margins on the legend using the marginTop, marginLeft, etc. 
        // properties or via CSS margin styling of the .jqplot-table-legend class.
        this.yoffset = 0;
        // prop: border
        // css spec for the border around the legend box.
        this.border;
        // prop: background
        // css spec for the background of the legend box.
        this.background;
        // prop: textColor
        // css color spec for the legend text.
        this.textColor;
        // prop: fontFamily
        // css font-family spec for the legend text.
        this.fontFamily; 
        // prop: fontSize
        // css font-size spec for the legend text.
        this.fontSize ;
        // prop: rowSpacing
        // css padding-top spec for the rows in the legend.
        this.rowSpacing = '0.5em';
        // renderer
        // A class that will create a DOM object for the legend,
        // see <$.jqplot.TableLegendRenderer>.
        this.renderer = $.jqplot.TableLegendRenderer;
        // prop: rendererOptions
        // renderer specific options passed to the renderer.
        this.rendererOptions = {};
        // prop: predraw
        // Wether to draw the legend before the series or not.
        // Used with series specific legend renderers for pie, donut, mekko charts, etc.
        this.preDraw = false;
        // prop: marginTop
        // CSS margin for the legend DOM element. This will set an element 
        // CSS style for the margin which will override any style sheet setting.
        // The default will be taken from the stylesheet.
        this.marginTop = null;
        // prop: marginRight
        // CSS margin for the legend DOM element. This will set an element 
        // CSS style for the margin which will override any style sheet setting.
        // The default will be taken from the stylesheet.
        this.marginRight = null;
        // prop: marginBottom
        // CSS margin for the legend DOM element. This will set an element 
        // CSS style for the margin which will override any style sheet setting.
        // The default will be taken from the stylesheet.
        this.marginBottom = null;
        // prop: marginLeft
        // CSS margin for the legend DOM element. This will set an element 
        // CSS style for the margin which will override any style sheet setting.
        // The default will be taken from the stylesheet.
        this.marginLeft = null;
        
        this.escapeHtml = false;
        this._series = [];
        
        $.extend(true, this, options);
    }
    
    Legend.prototype = new $.jqplot.ElemContainer();
    Legend.prototype.constructor = Legend;
    
    Legend.prototype.setOptions = function(options) {
        $.extend(true, this, options);
        
        // Try to emulate deprecated behaviour
        // if user has specified xoffset or yoffset, copy these to
        // the margin properties.
        
        if (this.placement ==  'inside') this.placement = 'insideGrid';
        
        if (this.xoffset >0) {
            if (this.placement == 'insideGrid') {
                switch (this.location) {
                    case 'nw':
                    case 'w':
                    case 'sw':
                        if (this.marginLeft == null) {
                            this.marginLeft = this.xoffset + 'px';
                        }
                        this.marginRight = '0px';
                        break;
                    case 'ne':
                    case 'e':
                    case 'se':
                    default:
                        if (this.marginRight == null) {
                            this.marginRight = this.xoffset + 'px';
                        }
                        this.marginLeft = '0px';
                        break;
                }
            }
            else if (this.placement == 'outside') {
                switch (this.location) {
                    case 'nw':
                    case 'w':
                    case 'sw':
                        if (this.marginRight == null) {
                            this.marginRight = this.xoffset + 'px';
                        }
                        this.marginLeft = '0px';
                        break;
                    case 'ne':
                    case 'e':
                    case 'se':
                    default:
                        if (this.marginLeft == null) {
                            this.marginLeft = this.xoffset + 'px';
                        }
                        this.marginRight = '0px';
                        break;
                }
            }
            this.xoffset = 0;
        }
        
        if (this.yoffset >0) {
            if (this.placement == 'outside') {
                switch (this.location) {
                    case 'sw':
                    case 's':
                    case 'se':
                        if (this.marginTop == null) {
                            this.marginTop = this.yoffset + 'px';
                        }
                        this.marginBottom = '0px';
                        break;
                    case 'ne':
                    case 'n':
                    case 'nw':
                    default:
                        if (this.marginBottom == null) {
                            this.marginBottom = this.yoffset + 'px';
                        }
                        this.marginTop = '0px';
                        break;
                }
            }
            else if (this.placement == 'insideGrid') {
                switch (this.location) {
                    case 'sw':
                    case 's':
                    case 'se':
                        if (this.marginBottom == null) {
                            this.marginBottom = this.yoffset + 'px';
                        }
                        this.marginTop = '0px';
                        break;
                    case 'ne':
                    case 'n':
                    case 'nw':
                    default:
                        if (this.marginTop == null) {
                            this.marginTop = this.yoffset + 'px';
                        }
                        this.marginBottom = '0px';
                        break;
                }
            }
            this.yoffset = 0;
        }
        
        // TO-DO:
        // Handle case where offsets are < 0.
        //
    };
    
    Legend.prototype.init = function() {
        this.renderer = new this.renderer();
        this.renderer.init.call(this, this.rendererOptions);
    };
    
    Legend.prototype.draw = function(offsets) {
        for (var i=0; i<$.jqplot.preDrawLegendHooks.length; i++){
            $.jqplot.preDrawLegendHooks[i].call(this, offsets);
        }
        return this.renderer.draw.call(this, offsets);
    };
    
    Legend.prototype.pack = function(offsets) {
        this.renderer.pack.call(this, offsets);
    };

    /**
     * Class: Title
     * Plot Title object.  Cannot be instantiated directly, but created
     * by the Plot oject.  Title properties can be set or overriden by the 
     * options passed in from the user.
     * 
     * Parameters:
     * text - text of the title.
     */
    function Title(text) {
        $.jqplot.ElemContainer.call(this);
        // Group: Properties
        
        // prop: text
        // text of the title;
        this.text = text;
        // prop: show
        // wether or not to show the title
        this.show = true;
        // prop: fontFamily
        // css font-family spec for the text.
        this.fontFamily;
        // prop: fontSize
        // css font-size spec for the text.
        this.fontSize ;
        // prop: textAlign
        // css text-align spec for the text.
        this.textAlign;
        // prop: textColor
        // css color spec for the text.
        this.textColor;
        // prop: renderer
        // A class for creating a DOM element for the title,
        // see <$.jqplot.DivTitleRenderer>.
        this.renderer = $.jqplot.DivTitleRenderer;
        // prop: rendererOptions
        // renderer specific options passed to the renderer.
        this.rendererOptions = {};   
    }
    
    Title.prototype = new $.jqplot.ElemContainer();
    Title.prototype.constructor = Title;
    
    Title.prototype.init = function() {
        this.renderer = new this.renderer();
        this.renderer.init.call(this, this.rendererOptions);
    };
    
    Title.prototype.draw = function(width) {
        return this.renderer.draw.call(this, width);
    };
    
    Title.prototype.pack = function() {
        this.renderer.pack.call(this);
    };


    /**
     * Class: Series
     * An individual data series object.  Cannot be instantiated directly, but created
     * by the Plot oject.  Series properties can be set or overriden by the 
     * options passed in from the user.
     */
    function Series() {
        $.jqplot.ElemContainer.call(this);
        // Group: Properties
        // Properties will be assigned from a series array at the top level of the
        // options.  If you had two series and wanted to change the color and line
        // width of the first and set the second to use the secondary y axis with
        // no shadow and supply custom labels for each:
        // > {
        // >    series:[
        // >        {color: '#ff4466', lineWidth: 5, label:'good line'},
        // >        {yaxis: 'y2axis', shadow: false, label:'bad line'}
        // >    ]
        // > }
        
        // prop: show
        // wether or not to draw the series.
        this.show = true;
        // prop: xaxis
        // which x axis to use with this series, either 'xaxis' or 'x2axis'.
        this.xaxis = 'xaxis';
        this._xaxis;
        // prop: yaxis
        // which y axis to use with this series, either 'yaxis' or 'y2axis'.
        this.yaxis = 'yaxis';
        this._yaxis;
        this.gridBorderWidth = 2.0;
        // prop: renderer
        // A class of a renderer which will draw the series, 
        // see <$.jqplot.LineRenderer>.
        this.renderer = $.jqplot.LineRenderer;
        // prop: rendererOptions
        // Options to pass on to the renderer.
        this.rendererOptions = {};
        this.data = [];
        this.gridData = [];
        // prop: label
        // Line label to use in the legend.
        this.label = '';
        // prop: showLabel
        // true to show label for this series in the legend.
        this.showLabel = true;
        // prop: color
        // css color spec for the series
        this.color;
        // prop: lineWidth
        // width of the line in pixels.  May have different meanings depending on renderer.
        this.lineWidth = 2.5;
        // prop: shadow
        // wether or not to draw a shadow on the line
        this.shadow = true;
        // prop: shadowAngle
        // Shadow angle in degrees
        this.shadowAngle = 45;
        // prop: shadowOffset
        // Shadow offset from line in pixels
        this.shadowOffset = 1.25;
        // prop: shadowDepth
        // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
        this.shadowDepth = 3;
        // prop: shadowAlpha
        // Alpha channel transparency of shadow.  0 = transparent.
        this.shadowAlpha = '0.1';
        // prop: breakOnNull
        // Not implemented. wether line segments should be be broken at null value.
        // False will join point on either side of line.
        this.breakOnNull = false;
        // prop: markerRenderer
        // A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points,
        // see <$.jqplot.MarkerRenderer>.
        this.markerRenderer = $.jqplot.MarkerRenderer;
        // prop: markerOptions
        // renderer specific options to pass to the markerRenderer,
        // see <$.jqplot.MarkerRenderer>.
        this.markerOptions = {};
        // prop: showLine
        // wether to actually draw the line or not.  Series will still be renderered, even if no line is drawn.
        this.showLine = true;
        // prop: showMarker
        // wether or not to show the markers at the data points.
        this.showMarker = true;
        // prop: index
        // 0 based index of this series in the plot series array.
        this.index;
        // prop: fill
        // true or false, wether to fill under lines or in bars.
        // May not be implemented in all renderers.
        this.fill = false;
        // prop: fillColor
        // CSS color spec to use for fill under line.  Defaults to line color.
        this.fillColor;
        // prop: fillAlpha
        // Alpha transparency to apply to the fill under the line.
        // Use this to adjust alpha separate from fill color.
        this.fillAlpha;
        // prop: fillAndStroke
        // If true will stroke the line (with color this.color) as well as fill under it.
        // Applies only when fill is true.
        this.fillAndStroke = false;
        // prop: disableStack
        // true to not stack this series with other series in the plot.
        // To render properly, non-stacked series must come after any stacked series
        // in the plot's data series array.  So, the plot's data series array would look like:
        // > [stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...]
        // disableStack will put a gap in the stacking order of series, and subsequent
        // stacked series will not fill down through the non-stacked series and will
        // most likely not stack properly on top of the non-stacked series.
        this.disableStack = false;
        // _stack is set by the Plot if the plot is a stacked chart.
        // will stack lines or bars on top of one another to build a "mountain" style chart.
        // May not be implemented in all renderers.
        this._stack = false;
        // prop: neighborThreshold
        // how close or far (in pixels) the cursor must be from a point marker to detect the point.
        this.neighborThreshold = 4;
        // prop: fillToZero
        // true will force bar and filled series to fill toward zero on the fill Axis.
        this.fillToZero = false;
        // prop: fillToValue
        // fill a filled series to this value on the fill axis.
        // Works in conjunction with fillToZero, so that must be true.
        this.fillToValue = 0;
        // prop: fillAxis
        // Either 'x' or 'y'.  Which axis to fill the line toward if fillToZero is true.
        // 'y' means fill up/down to 0 on the y axis for this series.
        this.fillAxis = 'y';
        // prop: useNegativeColors
        // true to color negative values differently in filled and bar charts.
        this.useNegativeColors = true;
        this._stackData = [];
        // _plotData accounts for stacking.  If plots not stacked, _plotData and data are same.  If
        // stacked, _plotData is accumulation of stacking data.
        this._plotData = [];
        // _plotValues hold the individual x and y values that will be plotted for this series.
        this._plotValues = {x:[], y:[]};
        // statistics about the intervals between data points.  Used for auto scaling.
        this._intervals = {x:{}, y:{}};
        // data from the previous series, for stacked charts.
        this._prevPlotData = [];
        this._prevGridData = [];
        this._stackAxis = 'y';
        this._primaryAxis = '_xaxis';
        // give each series a canvas to draw on.  This should allow for redrawing speedups.
        this.canvas = new $.jqplot.GenericCanvas();
        this.shadowCanvas = new $.jqplot.GenericCanvas();
        this.plugins = {};
        // sum of y values in this series.
        this._sumy = 0;
        this._sumx = 0;
    }
    
    Series.prototype = new $.jqplot.ElemContainer();
    Series.prototype.constructor = Series;
    
    Series.prototype.init = function(index, gridbw, plot) {
        // weed out any null values in the data.
        this.index = index;
        this.gridBorderWidth = gridbw;
        var d = this.data;
        var temp = [], i;
        for (i=0; i<d.length; i++) {
            if (! this.breakOnNull) {
                if (d[i] == null || d[i][0] == null || d[i][1] == null) {
                    continue;
                }
                else {
                    temp.push(d[i]);
                }
            }
            else {
                // TODO: figure out what to do with null values
                // probably involve keeping nulls in data array
                // and then updating renderers to break line
                // when it hits null value.
                // For now, just keep value.
                temp.push(d[i]);
            }
        }
        this.data = temp;
        if (!this.fillColor) {
            this.fillColor = this.color;
        }
        if (this.fillAlpha) {
            var comp = $.jqplot.normalize2rgb(this.fillColor);
            var comp = $.jqplot.getColorComponents(comp);
            this.fillColor = 'rgba('+comp[0]+','+comp[1]+','+comp[2]+','+this.fillAlpha+')';
        }
        this.renderer = new this.renderer();
        this.renderer.init.call(this, this.rendererOptions, plot);
        this.markerRenderer = new this.markerRenderer();
        if (!this.markerOptions.color) {
            this.markerOptions.color = this.color;
        }
        if (this.markerOptions.show == null) {
            this.markerOptions.show = this.showMarker;
        }
        this.showMarker = this.markerOptions.show;
        // the markerRenderer is called within it's own scaope, don't want to overwrite series options!!
        this.markerRenderer.init(this.markerOptions);
    };
    
    // data - optional data point array to draw using this series renderer
    // gridData - optional grid data point array to draw using this series renderer
    // stackData - array of cumulative data for stacked plots.
    Series.prototype.draw = function(sctx, opts, plot) {
        var options = (opts == undefined) ? {} : opts;
        sctx = (sctx == undefined) ? this.canvas._ctx : sctx;
        // hooks get called even if series not shown
        // we don't clear canvas here, it would wipe out all other series as well.
        for (var j=0; j<$.jqplot.preDrawSeriesHooks.length; j++) {
            $.jqplot.preDrawSeriesHooks[j].call(this, sctx, options);
        }
        if (this.show) {
            this.renderer.setGridData.call(this, plot);
            if (!options.preventJqPlotSeriesDrawTrigger) {
                $(sctx.canvas).trigger('jqplotSeriesDraw', [this.data, this.gridData]);
            }
            var data = [];
            if (options.data) {
                data = options.data;
            }
            else if (!this._stack) {
                data = this.data;
            }
            else {
                data = this._plotData;
            }
            var gridData = options.gridData || this.renderer.makeGridData.call(this, data, plot);
            this.renderer.draw.call(this, sctx, gridData, options, plot);
        }
        
        for (var j=0; j<$.jqplot.postDrawSeriesHooks.length; j++) {
            $.jqplot.postDrawSeriesHooks[j].call(this, sctx, options);
        }
    };
    
    Series.prototype.drawShadow = function(sctx, opts, plot) {
        var options = (opts == undefined) ? {} : opts;
        sctx = (sctx == undefined) ? this.shadowCanvas._ctx : sctx;
        // hooks get called even if series not shown
        // we don't clear canvas here, it would wipe out all other series as well.
        for (var j=0; j<$.jqplot.preDrawSeriesShadowHooks.length; j++) {
            $.jqplot.preDrawSeriesShadowHooks[j].call(this, sctx, options);
        }
        if (this.shadow) {
            this.renderer.setGridData.call(this, plot);

            var data = [];
            if (options.data) {
                data = options.data;
            }
            else if (!this._stack) {
                data = this.data;
            }
            else {
                data = this._plotData;
            }
            var gridData = options.gridData || this.renderer.makeGridData.call(this, data, plot);
        
            this.renderer.drawShadow.call(this, sctx, gridData, options);
        }
        
        for (var j=0; j<$.jqplot.postDrawSeriesShadowHooks.length; j++) {
            $.jqplot.postDrawSeriesShadowHooks[j].call(this, sctx, options);
        }
        
    };
    
    // toggles series display on plot, e.g. show/hide series
    Series.prototype.toggleDisplay = function(ev) {
        var s, speed;
        if (ev.data.series) {
            s = ev.data.series;
        }
        else {
            s = this;
        }
        if (ev.data.speed) {
            speed = ev.data.speed;
        }
        if (speed) {
            if (s.canvas._elem.is(':hidden')) {
                if (s.shadowCanvas._elem) {
                    s.shadowCanvas._elem.fadeIn(speed);
                }
                s.canvas._elem.fadeIn(speed);
                s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).fadeIn(speed);
            }
            else {
                if (s.shadowCanvas._elem) {
                    s.shadowCanvas._elem.fadeOut(speed);
                }
                s.canvas._elem.fadeOut(speed);
                s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).fadeOut(speed);
            }
        }
        else {
            if (s.canvas._elem.is(':hidden')) {
                if (s.shadowCanvas._elem) {
                    s.shadowCanvas._elem.show();
                }
                s.canvas._elem.show();
                s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).show();
            }
            else {
                if (s.shadowCanvas._elem) {
                    s.shadowCanvas._elem.hide();
                }
                s.canvas._elem.hide();
                s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).hide();
            }
        }
    };
    


    /**
     * Class: Grid
     * 
     * Object representing the grid on which the plot is drawn.  The grid in this
     * context is the area bounded by the axes, the area which will contain the series.
     * Note, the series are drawn on their own canvas.
     * The Grid object cannot be instantiated directly, but is created by the Plot oject.  
     * Grid properties can be set or overriden by the options passed in from the user.
     */
    function Grid() {
        $.jqplot.ElemContainer.call(this);
        // Group: Properties
        
        // prop: drawGridlines
        // wether to draw the gridlines on the plot.
        this.drawGridlines = true;
        // prop: gridLineColor
        // color of the grid lines.
        this.gridLineColor = '#cccccc';
        // prop: gridLineWidth
        // width of the grid lines.
        this.gridLineWidth = 1.0;
        // prop: background
        // css spec for the background color.
        this.background = '#fffdf6';
        // prop: borderColor
        // css spec for the color of the grid border.
        this.borderColor = '#999999';
        // prop: borderWidth
        // width of the border in pixels.
        this.borderWidth = 2.0;
        // prop: drawBorder
        // True to draw border around grid.
        this.drawBorder = true;
        // prop: shadow
        // wether to show a shadow behind the grid.
        this.shadow = true;
        // prop: shadowAngle
        // shadow angle in degrees
        this.shadowAngle = 45;
        // prop: shadowOffset
        // Offset of each shadow stroke from the border in pixels
        this.shadowOffset = 1.5;
        // prop: shadowWidth
        // width of the stoke for the shadow
        this.shadowWidth = 3;
        // prop: shadowDepth
        // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
        this.shadowDepth = 3;
        // prop: shadowColor
        // an optional css color spec for the shadow in 'rgba(n, n, n, n)' form
        this.shadowColor = null;
        // prop: shadowAlpha
        // Alpha channel transparency of shadow.  0 = transparent.
        this.shadowAlpha = '0.07';
        this._left;
        this._top;
        this._right;
        this._bottom;
        this._width;
        this._height;
        this._axes = [];
        // prop: renderer
        // Instance of a renderer which will actually render the grid,
        // see <$.jqplot.CanvasGridRenderer>.
        this.renderer = $.jqplot.CanvasGridRenderer;
        // prop: rendererOptions
        // Options to pass on to the renderer,
        // see <$.jqplot.CanvasGridRenderer>.
        this.rendererOptions = {};
        this._offsets = {top:null, bottom:null, left:null, right:null};
    }
    
    Grid.prototype = new $.jqplot.ElemContainer();
    Grid.prototype.constructor = Grid;
    
    Grid.prototype.init = function() {
        this.renderer = new this.renderer();
        this.renderer.init.call(this, this.rendererOptions);
    };
    
    Grid.prototype.createElement = function(offsets) {
        this._offsets = offsets;
        return this.renderer.createElement.call(this);
    };
    
    Grid.prototype.draw = function() {
        this.renderer.draw.call(this);
    };
    
    $.jqplot.GenericCanvas = function() {
        $.jqplot.ElemContainer.call(this);
        this._ctx;  
    };
    
    $.jqplot.GenericCanvas.prototype = new $.jqplot.ElemContainer();
    $.jqplot.GenericCanvas.prototype.constructor = $.jqplot.GenericCanvas;
    
    $.jqplot.GenericCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
        this._offsets = offsets;
        var klass = 'jqplot';
        if (clss != undefined) {
            klass = clss;
        }
        var elem;
        // if this canvas already has a dom element, don't make a new one.
        if (this._elem) {
            elem = this._elem.get(0);
        }
        else {
            elem = document.createElement('canvas');
        }
        // if new plotDimensions supplied, use them.
        if (plotDimensions != undefined) {
            this._plotDimensions = plotDimensions;
        }
        
        elem.width = this._plotDimensions.width - this._offsets.left - this._offsets.right;
        elem.height = this._plotDimensions.height - this._offsets.top - this._offsets.bottom;
        this._elem = $(elem);
        this._elem.css({ position: 'absolute', left: this._offsets.left, top: this._offsets.top });
        
        this._elem.addClass(klass);
        if ($.jqplot.use_excanvas) {
            window.G_vmlCanvasManager.init_(document);
            elem = window.G_vmlCanvasManager.initElement(elem);
        }
        return this._elem;
    };
    
    $.jqplot.GenericCanvas.prototype.setContext = function() {
        this._ctx = this._elem.get(0).getContext("2d");
        return this._ctx;
    };
    
    $.jqplot.HooksManager = function () {
        this.hooks =[];
    };
    
    $.jqplot.HooksManager.prototype.addOnce = function(fn) {
        var havehook = false, i;
        for (i=0; i<this.hooks.length; i++) {
            if (this.hooks[i][0] == fn) {
                havehook = true;
            }
        }
        if (!havehook) {
            this.hooks.push(fn);
        }
    };
    
    $.jqplot.HooksManager.prototype.add = function(fn) {
        this.hooks.push(fn);
    };
    
    $.jqplot.EventListenerManager = function () {
        this.hooks =[];
    };
    
    $.jqplot.EventListenerManager.prototype.addOnce = function(ev, fn) {
        var havehook = false, h, i;
        for (i=0; i<this.hooks.length; i++) {
            h = this.hooks[i];
            if (h[0] == ev && h[1] == fn) {
                havehook = true;
            }
        }
        if (!havehook) {
            this.hooks.push([ev, fn]);
        }
    };
    
    $.jqplot.EventListenerManager.prototype.add = function(ev, fn) {
        this.hooks.push([ev, fn]);
    };

    /**
     * Class: jqPlot
     * Plot object returned by call to $.jqplot.  Handles parsing user options,
     * creating sub objects (Axes, legend, title, series) and rendering the plot.
     */
    function jqPlot() {
        // Group: Properties
        // These properties are specified at the top of the options object
        // like so:
        // > {
        // >     axesDefaults:{min:0},
        // >     series:[{color:'#6633dd'}],
        // >     title: 'A Plot'
        // > }
        //
        // prop: data
        // user's data.  Data should *NOT* be specified in the options object,
        // but be passed in as the second argument to the $.jqplot() function.
        // The data property is described here soley for reference. 
        // The data should be in the form of an array of 2D or 1D arrays like
        // > [ [[x1, y1], [x2, y2],...], [y1, y2, ...] ].
        this.data = [];
        // prop dataRenderer
        // A callable which can be used to preprocess data passed into the plot.
        // Will be called with 2 arguments, the plot data and a reference to the plot.
        this.dataRenderer;
        // prop dataRendererOptions
        // Options that will be passed to the dataRenderer.
        // Can be of any type.
        this.dataRendererOptions;
        // The id of the dom element to render the plot into
        this.targetId = null;
        // the jquery object for the dom target.
        this.target = null; 
        this.defaults = {
            // prop: axesDefaults
            // default options that will be applied to all axes.
            // see <Axis> for axes options.
            axesDefaults: {},
            axes: {xaxis:{}, yaxis:{}, x2axis:{}, y2axis:{}, y3axis:{}, y4axis:{}, y5axis:{}, y6axis:{}, y7axis:{}, y8axis:{}, y9axis:{}},
            // prop: seriesDefaults
            // default options that will be applied to all series.
            // see <Series> for series options.
            seriesDefaults: {},
            gridPadding: {top:10, right:10, bottom:23, left:10},
            series:[]
        };
        // prop: series
        // Array of series object options.
        // see <Series> for series specific options.
        this.series = [];
        // prop: axes
        // up to 4 axes are supported, each with it's own options, 
        // See <Axis> for axis specific options.
        this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis')};
        // prop: grid
        // See <Grid> for grid specific options.
        this.grid = new Grid();
        // prop: legend
        // see <$.jqplot.TableLegendRenderer>
        this.legend = new Legend();
        this.baseCanvas = new $.jqplot.GenericCanvas();
        // array of series indicies. Keep track of order
        // which series canvases are displayed, lowest
        // to highest, back to front.
        this.seriesStack = [];
        this.previousSeriesStack = [];
        this.eventCanvas = new $.jqplot.GenericCanvas();
        this._width = null;
        this._height = null; 
        this._plotDimensions = {height:null, width:null};
        this._gridPadding = {top:10, right:10, bottom:10, left:10};
        // a shortcut for axis syncTicks options.  Not implemented yet.
        this.syncXTicks = true;
        // a shortcut for axis syncTicks options.  Not implemented yet.
        this.syncYTicks = true;
        // prop: seriesColors
        // Ann array of CSS color specifications that will be applied, in order,
        // to the series in the plot.  Colors will wrap around so, if their
        // are more series than colors, colors will be reused starting at the
        // beginning.  For pie charts, this specifies the colors of the slices.
        this.seriesColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"];
        this.negativeSeriesColors = [ "#498991", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621", "#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381", "#959E5C", "#C7AF7B", "#478396", "#907294"];
        // prop: sortData
        // false to not sort the data passed in by the user.
        // Many bar, stakced and other graphs as well as many plugins depend on
        // having sorted data.
        this.sortData = true;
        var seriesColorsIndex = 0;
        // prop textColor
        // css spec for the css color attribute.  Default for the entire plot.
        this.textColor;
        // prop; fontFamily
        // css spec for the font-family attribute.  Default for the entire plot.
        this.fontFamily;
        // prop: fontSize
        // css spec for the font-size attribute.  Default for the entire plot.
        this.fontSize;
        // prop: title
        // Title object.  See <Title> for specific options.  As a shortcut, you
        // can specify the title option as just a string like: title: 'My Plot'
        // and this will create a new title object with the specified text.
        this.title = new Title();
        // container to hold all of the merged options.  Convienence for plugins.
        this.options = {};
        // prop: stackSeries
        // true or false, creates a stack or "mountain" plot.
        // Not all series renderers may implement this option.
        this.stackSeries = false;
        // prop: defaultAxisStart
        // 1-D data series are internally converted into 2-D [x,y] data point arrays
        // by jqPlot.  This is the default starting value for the missing x or y value.
        // The added data will be a monotonically increasing series (e.g. [1, 2, 3, ...])
        // starting at this value.
        this.defaultAxisStart = 1;
        // array to hold the cumulative stacked series data.
        // used to ajust the individual series data, which won't have access to other
        // series data.
        this._stackData = [];
        // array that holds the data to be plotted. This will be the series data
        // merged with the the appropriate data from _stackData according to the stackAxis.
        this._plotData = [];
        // Namespece to hold plugins.  Generally non-renderer plugins add themselves to here.
        this.plugins = {};
        // Count how many times the draw method has been called while the plot is visible.
        // Mostly used to test if plot has never been dran (=0), has been successfully drawn
        // into a visible container once (=1) or draw more than once into a visible container.
        // Can use this in tests to see if plot has been visibly drawn at least one time.
        // After plot has been visibly drawn once, it generally doesn't need redrawn if its
        // container is hidden and shown.
        this._drawCount = 0;
        // this.doCustomEventBinding = true;
        // prop: drawIfHidden
        // True to execute the draw method even if the plot target is hidden.
        // Generally, this should be false.  Most plot elements will not be sized/
        // positioned correclty if renderered into a hidden container.  To render into
        // a hidden container, call the replot method when the container is shown.
        this.drawIfHidden = false;
        // true to intercept right click events and fire a 'jqplotRightClick' event.
        // this will also block the context menu.
        this.captureRightClick = false;
        this.themeEngine = new $.jqplot.ThemeEngine();
        // sum of y values for all series in plot.
        // used in mekko chart.
        this._sumy = 0;
        this._sumx = 0;
        this.preInitHooks = new $.jqplot.HooksManager();
        this.postInitHooks = new $.jqplot.HooksManager();
        this.preParseOptionsHooks = new $.jqplot.HooksManager();
        this.postParseOptionsHooks = new $.jqplot.HooksManager();
        this.preDrawHooks = new $.jqplot.HooksManager();
        this.postDrawHooks = new $.jqplot.HooksManager();
        this.preDrawSeriesHooks = new $.jqplot.HooksManager();
        this.postDrawSeriesHooks = new $.jqplot.HooksManager();
        this.preDrawLegendHooks = new $.jqplot.HooksManager();
        this.addLegendRowHooks = new $.jqplot.HooksManager();
        this.preSeriesInitHooks = new $.jqplot.HooksManager();
        this.postSeriesInitHooks = new $.jqplot.HooksManager();
        this.preParseSeriesOptionsHooks = new $.jqplot.HooksManager();
        this.postParseSeriesOptionsHooks = new $.jqplot.HooksManager();
        this.eventListenerHooks = new $.jqplot.EventListenerManager();
        this.preDrawSeriesShadowHooks = new $.jqplot.HooksManager();
        this.postDrawSeriesShadowHooks = new $.jqplot.HooksManager();
        
        this.colorGenerator = $.jqplot.ColorGenerator;
        
        // Group: methods
        //
        // method: init
        // sets the plot target, checks data and applies user
        // options to plot.
        this.init = function(target, data, options) {
            for (var i=0; i<$.jqplot.preInitHooks.length; i++) {
                $.jqplot.preInitHooks[i].call(this, target, data, options);
            }

            for (var i=0; i<this.preInitHooks.hooks.length; i++) {
                this.preInitHooks.hooks[i].call(this, target, data, options);
            }
            
            this.targetId = '#'+target;
            this.target = $('#'+target);
            // remove any error class that may be stuck on target.
            this.target.removeClass('jqplot-error');
            if (!this.target.get(0)) {
                throw "No plot target specified";
            }
            
            // make sure the target is positioned by some means and set css
            if (this.target.css('position') == 'static') {
                this.target.css('position', 'relative');
            }
            if (!this.target.hasClass('jqplot-target')) {
                this.target.addClass('jqplot-target');
            }
            
            // if no height or width specified, use a default.
            if (!this.target.height()) {
                var h;
                if (options && options.height) {
                    h = parseInt(options.height, 10);
                }
                else if (this.target.attr('data-height')) {
                    h = parseInt(this.target.attr('data-height'), 10);
                }
                else {
                    h = parseInt($.jqplot.config.defaultHeight, 10);
                }
                this._height = h;
                this.target.css('height', h+'px');
            }
            else {
                this._height = this.target.height();
            }
            if (!this.target.width()) {
                var w;
                if (options && options.width) {
                    w = parseInt(options.width, 10);
                }
                else if (this.target.attr('data-width')) {
                    w = parseInt(this.target.attr('data-width'), 10);
                }
                else {
                    w = parseInt($.jqplot.config.defaultWidth, 10);
                }
                this._width = w;
                this.target.css('width', w+'px');
            }
            else {
                this._width = this.target.width();
            }
            
            this._plotDimensions.height = this._height;
            this._plotDimensions.width = this._width;
            this.grid._plotDimensions = this._plotDimensions;
            this.title._plotDimensions = this._plotDimensions;
            this.baseCanvas._plotDimensions = this._plotDimensions;
            this.eventCanvas._plotDimensions = this._plotDimensions;
            this.legend._plotDimensions = this._plotDimensions;
            if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
                throw "Canvas dimension not set";
            }
            
            if (options.dataRenderer && typeof(options.dataRenderer) == "function") {
                if (options.dataRendererOptions) {
                    this.dataRendererOptions = options.dataRendererOptions;
                }
                this.dataRenderer = options.dataRenderer;
                data = this.dataRenderer(data, this, this.dataRendererOptions);
            }
            
            if (data == null) {
                throw{
                    name: "DataError",
                    message: "No data to plot."
                };
            }
            
            if (data.constructor != Array || data.length == 0 || data[0].constructor != Array || data[0].length == 0) {
                throw{
                    name: "DataError",
                    message: "No data to plot."
                };
            }
            
            this.data = data;
            
            this.parseOptions(options);
            
            if (this.textColor) {
                this.target.css('color', this.textColor);
            }
            if (this.fontFamily) {
                this.target.css('font-family', this.fontFamily);
            }
            if (this.fontSize) {
                this.target.css('font-size', this.fontSize);
            }
            
            this.title.init();
            this.legend.init();
            this._sumy = 0;
            this._sumx = 0;
            for (var i=0; i<this.series.length; i++) {
                // set default stacking order for series canvases
                this.seriesStack.push(i);
                this.previousSeriesStack.push(i);
                this.series[i].shadowCanvas._plotDimensions = this._plotDimensions;
                this.series[i].canvas._plotDimensions = this._plotDimensions;
                for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) {
                    $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, data, this.options.seriesDefaults, this.options.series[i], this);
                }
                for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) {
                    this.preSeriesInitHooks.hooks[j].call(this.series[i], target, data, this.options.seriesDefaults, this.options.series[i], this);
                }
                this.populatePlotData(this.series[i], i);
                this.series[i]._plotDimensions = this._plotDimensions;
                this.series[i].init(i, this.grid.borderWidth, this);
                for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) {
                    $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, data, this.options.seriesDefaults, this.options.series[i], this);
                }
                for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) {
                    this.postSeriesInitHooks.hooks[j].call(this.series[i], target, data, this.options.seriesDefaults, this.options.series[i], this);
                }
                this._sumy += this.series[i]._sumy;
                this._sumx += this.series[i]._sumx;
            }

            for (var name in this.axes) {
                this.axes[name]._plotDimensions = this._plotDimensions;
                this.axes[name].init();
            }
            
            if (this.sortData) {
                sortData(this.series);
            }
            this.grid.init();
            this.grid._axes = this.axes;
            
            this.legend._series = this.series;

            for (var i=0; i<$.jqplot.postInitHooks.length; i++) {
                $.jqplot.postInitHooks[i].call(this, target, data, options);
            }

            for (var i=0; i<this.postInitHooks.hooks.length; i++) {
                this.postInitHooks.hooks[i].call(this, target, data, options);
            }
        };  
        
        // method: resetAxesScale
        // Reset the specified axes min, max, numberTicks and tickInterval properties to null
        // or reset these properties on all axes if no list of axes is provided.
        //
        // Parameters:
        // axes - Boolean to reset or not reset all axes or an array or object of axis names to reset.
        this.resetAxesScale = function(axes) {
            var ax = (axes != undefined) ? axes : this.axes;
            if (ax === true) {
                ax = this.axes;
            }
            if (ax.constructor === Array) {
                for (var i = 0; i < ax.length; i++) {
                    this.axes[ax[i]].resetScale();
                }
            }
            else if (ax.constructor === Object) {
                for (var name in ax) {
                    this.axes[name].resetScale();
                }
            }
        };
        // method: reInitialize
        // reinitialize plot for replotting.
        // not called directly.
        this.reInitialize = function () {
            // Plot should be visible and have a height and width.
            // If plot doesn't have height and width for some
            // reason, set it by other means.  Plot must not have
            // a display:none attribute, however.
            if (!this.target.height()) {
                var h;
                if (options && options.height) {
                    h = parseInt(options.height, 10);
                }
                else if (this.target.attr('data-height')) {
                    h = parseInt(this.target.attr('data-height'), 10);
                }
                else {
                    h = parseInt($.jqplot.config.defaultHeight, 10);
                }
                this._height = h;
                this.target.css('height', h+'px');
            }
            else {
                this._height = this.target.height();
            }
            if (!this.target.width()) {
                var w;
                if (options && options.width) {
                    w = parseInt(options.width, 10);
                }
                else if (this.target.attr('data-width')) {
                    w = parseInt(this.target.attr('data-width'), 10);
                }
                else {
                    w = parseInt($.jqplot.config.defaultWidth, 10);
                }
                this._width = w;
                this.target.css('width', w+'px');
            }
            else {
                this._width = this.target.width();
            }
            
            if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
                throw "Target dimension not set";
            }
            
            this._plotDimensions.height = this._height;
            this._plotDimensions.width = this._width;
            this.grid._plotDimensions = this._plotDimensions;
            this.title._plotDimensions = this._plotDimensions;
            this.baseCanvas._plotDimensions = this._plotDimensions;
            this.eventCanvas._plotDimensions = this._plotDimensions;
            this.legend._plotDimensions = this._plotDimensions;
            
            for (var n in this.axes) {
                this.axes[n]._plotWidth = this._width;
                this.axes[n]._plotHeight = this._height;
            }
            
            this.title._plotWidth = this._width;
            
            if (this.textColor) {
                this.target.css('color', this.textColor);
            }
            if (this.fontFamily) {
                this.target.css('font-family', this.fontFamily);
            }
            if (this.fontSize) {
                this.target.css('font-size', this.fontSize);
            }
            
            this._sumy = 0;
            this._sumx = 0;
            for (var i=0; i<this.series.length; i++) {
                this.populatePlotData(this.series[i], i);
                this.series[i]._plotDimensions = this._plotDimensions;
                this.series[i].canvas._plotDimensions = this._plotDimensions;
                //this.series[i].init(i, this.grid.borderWidth);
                this._sumy += this.series[i]._sumy;
                this._sumx += this.series[i]._sumx;
            }
            
            for (var name in this.axes) {
                this.axes[name]._plotDimensions = this._plotDimensions;
                this.axes[name]._ticks = [];
                this.axes[name].renderer.init.call(this.axes[name], {});
            }
            
            if (this.sortData) {
                sortData(this.series);
            }
            
            this.grid._axes = this.axes;
            
            this.legend._series = this.series;
        };
        
        // sort the series data in increasing order.
        function sortData(series) {
            var d, sd, pd, ppd, ret;
            for (var i=0; i<series.length; i++) {
                // d = series[i].data;
                // sd = series[i]._stackData;
                // pd = series[i]._plotData;
                // ppd = series[i]._prevPlotData;
                var check;
                var bat = [series[i].data, series[i]._stackData, series[i]._plotData, series[i]._prevPlotData];
                for (var n=0; n<4; n++) {
                    check = true;
                    d = bat[n];
                    if (series[i]._stackAxis == 'x') {
                        for (var j = 0; j < d.length; j++) {
                            if (typeof(d[j][1]) != "number") {
                                check = false;
                                break;
                            }
                        }
                        if (check) {
                            d.sort(function(a,b) { return a[1] - b[1]; });
                            // sd.sort(function(a,b) { return a[1] - b[1]; });
                            // pd.sort(function(a,b) { return a[1] - b[1]; });
                            // ppd.sort(function(a,b) { return a[1] - b[1]; });
                        }
                    }
                    else {
                        for (var j = 0; j < d.length; j++) {
                            if (typeof(d[j][0]) != "number") {
                                check = false;
                                break;
                            }
                        }
                        if (check) {
                            d.sort(function(a,b) { return a[0] - b[0]; });
                            // sd.sort(function(a,b) { return a[0] - b[0]; });
                            // pd.sort(function(a,b) { return a[0] - b[0]; });
                            // ppd.sort(function(a,b) { return a[0] - b[0]; });
                        }
                    }
                }
               
            }
        }
        
        // populate the _stackData and _plotData arrays for the plot and the series.
        this.populatePlotData = function(series, index) {
            // if a stacked chart, compute the stacked data
            this._plotData = [];
            this._stackData = [];
            series._stackData = [];
            series._plotData = [];
            var plotValues = {x:[], y:[]};
            if (this.stackSeries && !series.disableStack) {
                series._stack = true;
                var sidx = series._stackAxis == 'x' ? 0 : 1;
                var idx = sidx ? 0 : 1;
                // push the current data into stackData
                //this._stackData.push(this.series[i].data);
                var temp = $.extend(true, [], series.data);
                // create the data that will be plotted for this series
                var plotdata = $.extend(true, [], series.data);
                // for first series, nothing to add to stackData.
                for (var j=0; j<index; j++) {
                    var cd = this.series[j].data;
                    for (var k=0; k<cd.length; k++) {
                        temp[k][0] += cd[k][0];
                        temp[k][1] += cd[k][1];
                        // only need to sum up the stack axis column of data
                        plotdata[k][sidx] += cd[k][sidx];
                    }
                }
                for (var i=0; i<plotdata.length; i++) {
                    plotValues.x.push(plotdata[i][0]);
                    plotValues.y.push(plotdata[i][1]);
                }
                this._plotData.push(plotdata);
                this._stackData.push(temp);
                series._stackData = temp;
                series._plotData = plotdata;
                series._plotValues = plotValues;
            }
            else {
                for (var i=0; i<series.data.length; i++) {
                    plotValues.x.push(series.data[i][0]);
                    plotValues.y.push(series.data[i][1]);
                }
                this._stackData.push(series.data);
                this.series[index]._stackData = series.data;
                this._plotData.push(series.data);
                series._plotData = series.data;
                series._plotValues = plotValues;
            }
            if (index>0) {
                series._prevPlotData = this.series[index-1]._plotData;
            }
            series._sumy = 0;
            series._sumx = 0;
            for (i=series.data.length-1; i>-1; i--) {
                series._sumy += series.data[i][1];
                series._sumx += series.data[i][0];
            }
        };
        
        // function to safely return colors from the color array and wrap around at the end.
        this.getNextSeriesColor = (function(t) {
            var idx = 0;
            var sc = t.seriesColors;
            
            return function () { 
                if (idx < sc.length) {
                    return sc[idx++];
                }
                else {
                    idx = 0;
                    return sc[idx++];
                }
            };
        })(this);
    
        this.parseOptions = function(options){
            for (var i=0; i<this.preParseOptionsHooks.hooks.length; i++) {
                this.preParseOptionsHooks.hooks[i].call(this, options);
            }
            for (var i=0; i<$.jqplot.preParseOptionsHooks.length; i++) {
                $.jqplot.preParseOptionsHooks[i].call(this, options);
            }
            this.options = $.extend(true, {}, this.defaults, options);
            this.stackSeries = this.options.stackSeries;
            if (this.options.seriesColors) {
                this.seriesColors = this.options.seriesColors;
            }
            if (this.options.negativeSeriesColors) {
                this.negativeSeriesColors = this.options.negativeSeriesColors;
            }
            if (this.options.captureRightClick) {
                this.captureRightClick = this.options.captureRightClick;
            }
            this.defaultAxisStart = (options && options.defaultAxisStart != null) ? options.defaultAxisStart : this.defaultAxisStart;
            var cg = new this.colorGenerator(this.seriesColors);
            // this._gridPadding = this.options.gridPadding;
            $.extend(true, this._gridPadding, this.options.gridPadding);
            this.sortData = (this.options.sortData != null) ? this.options.sortData : this.sortData;
            for (var n in this.axes) {
                var axis = this.axes[n];
                $.extend(true, axis, this.options.axesDefaults, this.options.axes[n]);
                axis._plotWidth = this._width;
                axis._plotHeight = this._height;
            }
            if (this.data.length == 0) {
                this.data = [];
                for (var i=0; i<this.options.series.length; i++) {
                    this.data.push(this.options.series.data);
                }    
            }
                
            var normalizeData = function(data, dir, start) {
                // return data as an array of point arrays,
                // in form [[x1,y1...], [x2,y2...], ...]
                var temp = [];
                var i;
                dir = dir || 'vertical';
                if (!(data[0] instanceof Array)) {
                    // we have a series of scalars.  One line with just y values.
                    // turn the scalar list of data into a data array of form:
                    // [[1, data[0]], [2, data[1]], ...]
                    for (i=0; i<data.length; i++) {
                        if (dir == 'vertical') {
                            temp.push([start + i, data[i]]);   
                        }
                        else {
                            temp.push([data[i], start+i]);
                        }
                    }
                }            
                else {
                    // we have a properly formatted data series, copy it.
                    $.extend(true, temp, data);
                }
                return temp;
            };

            for (var i=0; i<this.data.length; i++) { 
                var temp = new Series();
                for (var j=0; j<$.jqplot.preParseSeriesOptionsHooks.length; j++) {
                    $.jqplot.preParseSeriesOptionsHooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]);
                }
                for (var j=0; j<this.preParseSeriesOptionsHooks.hooks.length; j++) {
                    this.preParseSeriesOptionsHooks.hooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]);
                }
                $.extend(true, temp, {seriesColors:this.seriesColors, negativeSeriesColors:this.negativeSeriesColors}, this.options.seriesDefaults, this.options.series[i]);
                var dir = 'vertical';
                if (temp.renderer.constructor == $.jqplot.barRenderer && temp.rendererOptions && temp.rendererOptions.barDirection == 'horizontal') {
                    dir = 'horizontal';
                }
                temp.data = normalizeData(this.data[i], dir, this.defaultAxisStart);
                switch (temp.xaxis) {
                    case 'xaxis':
                        temp._xaxis = this.axes.xaxis;
                        break;
                    case 'x2axis':
                        temp._xaxis = this.axes.x2axis;
                        break;
                    default:
                        break;
                }
                temp._yaxis = this.axes[temp.yaxis];
                temp._xaxis._series.push(temp);
                temp._yaxis._series.push(temp);
                if (temp.show) {
                    temp._xaxis.show = true;
                    temp._yaxis.show = true;
                }

                // parse the renderer options and apply default colors if not provided
                if (!temp.color && temp.show != false) {
                    temp.color = cg.next();
                }
                if (!temp.label) {
                    temp.label = 'Series '+ (i+1).toString();
                }
                // temp.rendererOptions.show = temp.show;
                // $.extend(true, temp.renderer, {color:this.seriesColors[i]}, this.rendererOptions);
                this.series.push(temp);  
                for (var j=0; j<$.jqplot.postParseSeriesOptionsHooks.length; j++) {
                    $.jqplot.postParseSeriesOptionsHooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]);
                }
                for (var j=0; j<this.postParseSeriesOptionsHooks.hooks.length; j++) {
                    this.postParseSeriesOptionsHooks.hooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]);
                }
            }
            
            // copy the grid and title options into this object.
            $.extend(true, this.grid, this.options.grid);
            // if axis border properties aren't set, set default.
            for (var n in this.axes) {
                var axis = this.axes[n];
                if (axis.borderWidth == null) {
                    axis.borderWidth =this.grid.borderWidth;
                }
                if (axis.borderColor == null) {
                    if (n != 'xaxis' && n != 'x2axis' && axis.useSeriesColor === true && axis.show) {
                        axis.borderColor = axis._series[0].color;
                    }
                    else {
                        axis.borderColor = this.grid.borderColor;
                    }
                }
            }
            
            if (typeof this.options.title == 'string') {
                this.title.text = this.options.title;
            }
            else if (typeof this.options.title == 'object') {
                $.extend(true, this.title, this.options.title);
            }
            this.title._plotWidth = this._width;
            this.legend.setOptions(this.options.legend);
            
            for (var i=0; i<$.jqplot.postParseOptionsHooks.length; i++) {
                $.jqplot.postParseOptionsHooks[i].call(this, options);
            }
            for (var i=0; i<this.postParseOptionsHooks.hooks.length; i++) {
                this.postParseOptionsHooks.hooks[i].call(this, options);
            }
        };
        
        // method: replot
        // Does a reinitialization of the plot followed by
        // a redraw.  Method could be used to interactively
        // change plot characteristics and then replot.
        //
        // Parameters:
        // options - Options used for replotting.
        //
        // Properties:
        // clear - false to not clear (empty) the plot container before replotting (default: true).
        // resetAxes - true to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves.
        //             optionally pass in list of axes to reset (e.g. ['xaxis', 'y2axis']) (default: false).
        this.replot = function(options) {
            var opts = (options != undefined) ? options : {};
            var clear = (opts.clear != undefined) ? opts.clear : true;
            var resetAxes = (opts.resetAxes != undefined) ? opts.resetAxes : false;
            this.target.trigger('jqplotPreReplot');
            if (clear) {
                this.target.empty();
            }
            if (resetAxes) {
                this.resetAxesScale(resetAxes);
            }
            this.reInitialize();
            this.draw();
            this.target.trigger('jqplotPostReplot');
        };
        
        // method: redraw
        // Empties the plot target div and redraws the plot.
        // This enables plot data and properties to be changed
        // and then to comletely clear the plot and redraw.
        // redraw *will not* reinitialize any plot elements.
        // That is, axes will not be autoscaled and defaults
        // will not be reapplied to any plot elements.  redraw
        // is used primarily with zooming. 
        //
        // Parameters:
        // clear - false to not clear (empty) the plot container before redrawing (default: true).
        this.redraw = function(clear) {
            clear = (clear != null) ? clear : true;
            this.target.trigger('jqplotPreRedraw');
            if (clear) {
                this.target.empty();
            }
             for (var ax in this.axes) {
                this.axes[ax]._ticks = [];
            }
            for (var i=0; i<this.series.length; i++) {
                this.populatePlotData(this.series[i], i);
            }
            this._sumy = 0;
            this._sumx = 0;
            for (i=0; i<this.series.length; i++) {
                this._sumy += this.series[i]._sumy;
                this._sumx += this.series[i]._sumx;
            }
            this.draw();
            this.target.trigger('jqplotPostRedraw');
        };
        
        // method: draw
        // Draws all elements of the plot into the container.
        // Does not clear the container before drawing.
        this.draw = function(){
            if (this.drawIfHidden || this.target.is(':visible')) {
                this.target.trigger('jqplotPreDraw');
                var i, j;
                for (i=0; i<$.jqplot.preDrawHooks.length; i++) {
                    $.jqplot.preDrawHooks[i].call(this);
                }
                for (i=0; i<this.preDrawHooks.hooks.length; i++) {
                    this.preDrawHooks.hooks[i].call(this);
                }
                // create an underlying canvas to be used for special features.
                this.target.append(this.baseCanvas.createElement({left:0, right:0, top:0, bottom:0}, 'jqplot-base-canvas'));
                this.baseCanvas.setContext();
                this.target.append(this.title.draw());
                this.title.pack({top:0, left:0});
                
                // make room  for the legend between the grid and the edge.
                var legendElem = this.legend.draw();
                
                var gridPadding = {top:0, left:0, bottom:0, right:0};
                
                if (this.legend.placement == "outsideGrid") {
                    // temporarily append the legend to get dimensions
                    this.target.append(legendElem);
                    switch (this.legend.location) {
                        case 'n':
                            gridPadding.top += this.legend.getHeight();
                            break;
                        case 's':
                            gridPadding.bottom += this.legend.getHeight();
                            break;
                        case 'ne':
                        case 'e':
                        case 'se':
                            gridPadding.right += this.legend.getWidth();
                            break;
                        case 'nw':
                        case 'w':
                        case 'sw':
                            gridPadding.left += this.legend.getWidth();
                            break;
                        default:  // same as 'ne'
                            gridPadding.right += this.legend.getWidth();
                            break;
                    }
                    legendElem = legendElem.detach();
                }
                
                var ax = this.axes;
                for (var name in ax) {
                    this.target.append(ax[name].draw(this.baseCanvas._ctx));
                    ax[name].set();
                }
                if (ax.yaxis.show) {
                    gridPadding.left += ax.yaxis.getWidth();
                }
                var ra = ['y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
                var rapad = [0, 0, 0, 0, 0, 0, 0, 0];
                var gpr = 0;
                var n;
                for (n=0; n<8; n++) {
                    if (ax[ra[n]].show) {
                        gpr += ax[ra[n]].getWidth();
                        rapad[n] = gpr;
                    }
                }
                gridPadding.right += gpr;
                if (ax.x2axis.show) {
                    gridPadding.top += ax.x2axis.getHeight();
                }
                if (this.title.show) {
                    gridPadding.top += this.title.getHeight();
                }
                if (ax.xaxis.show) {
                    gridPadding.bottom += ax.xaxis.getHeight();
                }
                
                // end of gridPadding adjustments.
                var arr = ['top', 'bottom', 'left', 'right'];
                for (var n in arr) {
                    if (gridPadding[arr[n]]) {
                        this._gridPadding[arr[n]] = gridPadding[arr[n]];
                    }
                }
                
                var legendPadding = (this.legend.placement == 'outsideGrid') ? {top:this.title.getHeight(), left: 0, right: 0, bottom: 0} : this._gridPadding;
            
                ax.xaxis.pack({position:'absolute', bottom:this._gridPadding.bottom - ax.xaxis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right});
                ax.yaxis.pack({position:'absolute', top:0, left:this._gridPadding.left - ax.yaxis.getWidth(), height:this._height}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
                ax.x2axis.pack({position:'absolute', top:this._gridPadding.top - ax.x2axis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right});
                for (i=8; i>0; i--) {
                    ax[ra[i-1]].pack({position:'absolute', top:0, right:this._gridPadding.right - rapad[i-1]}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
                }
                // ax.y2axis.pack({position:'absolute', top:0, right:0}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
            
                this.target.append(this.grid.createElement(this._gridPadding));
                this.grid.draw();
                
                // put the shadow canvases behind the series canvases so shadows don't overlap on stacked bars.
                for (i=0; i<this.series.length; i++) {
                    // draw series in order of stacking.  This affects only
                    // order in which canvases are added to dom.
                    j = this.seriesStack[i];
                    this.target.append(this.series[j].shadowCanvas.createElement(this._gridPadding, 'jqplot-series-shadowCanvas'));
                    this.series[j].shadowCanvas.setContext();
                    this.series[j].shadowCanvas._elem.data('seriesIndex', j);
                }
                
                for (i=0; i<this.series.length; i++) {
                    // draw series in order of stacking.  This affects only
                    // order in which canvases are added to dom.
                    j = this.seriesStack[i];
                    this.target.append(this.series[j].canvas.createElement(this._gridPadding, 'jqplot-series-canvas'));
                    this.series[j].canvas.setContext();
                    this.series[j].canvas._elem.data('seriesIndex', j);
                }
                // Need to use filled canvas to capture events in IE.
                // Also, canvas seems to block selection of other elements in document on FF.
                this.target.append(this.eventCanvas.createElement(this._gridPadding, 'jqplot-event-canvas'));
                this.eventCanvas.setContext();
                this.eventCanvas._ctx.fillStyle = 'rgba(0,0,0,0)';
                this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width, this.eventCanvas._ctx.canvas.height);
            
                // bind custom event handlers to regular events.
                this.bindCustomEvents();
            
                // draw legend before series if the series needs to know the legend dimensions.
                if (this.legend.preDraw) {  
                    this.eventCanvas._elem.before(legendElem);
                    this.legend.pack(legendPadding);
                    if (this.legend._elem) {
                        this.drawSeries({legendInfo:{location:this.legend.location, placement:this.legend.placement, width:this.legend.getWidth(), height:this.legend.getHeight(), xoffset:this.legend.xoffset, yoffset:this.legend.yoffset}});
                    }
                    else {
                        this.drawSeries();
                    }
                }
                else {  // draw series before legend
                    this.drawSeries();
                    $(this.series[this.series.length-1].canvas._elem).after(legendElem);
                    this.legend.pack(legendPadding);                
                }
            
                // register event listeners on the overlay canvas
                for (var i=0; i<$.jqplot.eventListenerHooks.length; i++) {
                    // in the handler, this will refer to the eventCanvas dom element.
                    // make sure there are references back into plot objects.
                    this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]);
                }
            
                // register event listeners on the overlay canvas
                for (var i=0; i<this.eventListenerHooks.hooks.length; i++) {
                    // in the handler, this will refer to the eventCanvas dom element.
                    // make sure there are references back into plot objects.
                    this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[i][0], {plot:this}, this.eventListenerHooks.hooks[i][1]);
                }

                for (var i=0; i<$.jqplot.postDrawHooks.length; i++) {
                    $.jqplot.postDrawHooks[i].call(this);
                }

                for (var i=0; i<this.postDrawHooks.hooks.length; i++) {
                    this.postDrawHooks.hooks[i].call(this);
                }
            
                if (this.target.is(':visible')) {
                    this._drawCount += 1;
                }
            
                this.target.trigger('jqplotPostDraw', [this]);
            }
        };
        
        this.bindCustomEvents = function() {
            this.eventCanvas._elem.bind('click', {plot:this}, this.onClick);
            this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick);
            this.eventCanvas._elem.bind('mousedown', {plot:this}, this.onMouseDown);
            this.eventCanvas._elem.bind('mousemove', {plot:this}, this.onMouseMove);
            this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter);
            this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave);
            if (this.captureRightClick) {
                this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onRightClick);
                this.eventCanvas._elem.get(0).oncontextmenu = function() {
					return false;
				};
            }
            else {
                this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onMouseUp);
            }
        };
        
        function getEventPosition(ev) {
            var plot = ev.data.plot;
            var go = plot.eventCanvas._elem.offset();
            var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
            var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null};
            var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
            var ax = plot.axes;
            var n, axis;
            for (n=11; n>0; n--) {
                axis = an[n-1];
                if (ax[axis].show) {
                    dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]);
                }
            }

            return {offsets:go, gridPos:gridPos, dataPos:dataPos};
        }
        
        
        // function to check if event location is over a area area
        function checkIntersection(gridpos, plot) {
            var series = plot.series;
            var i, j, k, s, r, x, y, theta, sm, sa, minang, maxang;
            var d0, d, p, pp, points, bw;
            var threshold, t;
            for (k=plot.seriesStack.length-1; k>=0; k--) {
                i = plot.seriesStack[k];
                s = series[i];
                switch (s.renderer.constructor) {
                    case $.jqplot.BarRenderer:
                        x = gridpos.x;
                        y = gridpos.y;
                        for (j=s.gridData.length-1; j>=0; j--) {
                            points = s._barPoints[j];
                            if (x>points[0][0] && x<points[2][0] && y>points[2][1] && y<points[0][1]) {
                                return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]};
                            }
                        }
                        break;
                    
                    case $.jqplot.DonutRenderer:
                        sa = s.startAngle/180*Math.PI;
                        x = gridpos.x - s._center[0];
                        y = gridpos.y - s._center[1];
                        r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
                        if (x > 0 && -y >= 0) {
                            theta = 2*Math.PI - Math.atan(-y/x);
                        }
                        else if (x > 0 && -y < 0) {
                            theta = -Math.atan(-y/x);
                        }
                        else if (x < 0) {
                            theta = Math.PI - Math.atan(-y/x);
                        }
                        else if (x == 0 && -y > 0) {
                            theta = 3*Math.PI/2;
                        }
                        else if (x == 0 && -y < 0) {
                            theta = Math.PI/2;
                        }
                        else if (x == 0 && y == 0) {
                            theta = 0;
                        }
                        if (sa) {
                            theta -= sa;
                            if (theta < 0) {
                                theta += 2*Math.PI;
                            }
                            else if (theta > 2*Math.PI) {
                                theta -= 2*Math.PI;
                            }
                        }
            
                        sm = s.sliceMargin/180*Math.PI;
                        if (r < s._radius && r > s._innerRadius) {
                            for (j=0; j<s.gridData.length; j++) {
                                minang = (j>0) ? s.gridData[j-1][1]+sm : sm;
                                maxang = s.gridData[j][1];
                                if (theta > minang && theta < maxang) {
                                    return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]};
                                }
                            }
                        }
                        break;
                        
                    case $.jqplot.PieRenderer:
                        sa = s.startAngle/180*Math.PI;
                        x = gridpos.x - s._center[0];
                        y = gridpos.y - s._center[1];
                        r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
                        if (x > 0 && -y >= 0) {
                            theta = 2*Math.PI - Math.atan(-y/x);
                        }
                        else if (x > 0 && -y < 0) {
                            theta = -Math.atan(-y/x);
                        }
                        else if (x < 0) {
                            theta = Math.PI - Math.atan(-y/x);
                        }
                        else if (x == 0 && -y > 0) {
                            theta = 3*Math.PI/2;
                        }
                        else if (x == 0 && -y < 0) {
                            theta = Math.PI/2;
                        }
                        else if (x == 0 && y == 0) {
                            theta = 0;
                        }
                        if (sa) {
                            theta -= sa;
                            if (theta < 0) {
                                theta += 2*Math.PI;
                            }
                            else if (theta > 2*Math.PI) {
                                theta -= 2*Math.PI;
                            }
                        }
            
                        sm = s.sliceMargin/180*Math.PI;
                        if (r < s._radius) {
                            for (j=0; j<s.gridData.length; j++) {
                                minang = (j>0) ? s.gridData[j-1][1]+sm : sm;
                                maxang = s.gridData[j][1];
                                if (theta > minang && theta < maxang) {
                                    return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]};
                                }
                            }
                        }
                        break;
                        
                    case $.jqplot.BubbleRenderer:
                        x = gridpos.x;
                        y = gridpos.y;
                        var ret = null;
                        
                        if (s.show) {
                            for (var j=0; j<s.gridData.length; j++) {
                                p = s.gridData[j];
                                d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
                                if (d <= p[2] && (d <= d0 || d0 == null)) {
                                   d0 = d;
                                   ret = {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                }
                            }
                            if (ret != null) return ret;
                        }
                        break;
                        
                    case $.jqplot.FunnelRenderer:
                        x = gridpos.x;
                        y = gridpos.y;
                        var v = s._vertices,
                            vfirst = v[0],
                            vlast = v[v.length-1],
                            lex,
                            rex;
    
                        // equations of right and left sides, returns x, y values given height of section (y value and 2 points)
    
                        function findedge (l, p1 , p2) {
                            var m = (p1[1] - p2[1])/(p1[0] - p2[0]);
                            var b = p1[1] - m*p1[0];
                            var y = l + p1[1];
        
                            return [(y - b)/m, y];
                        }
    
                        // check each section
                        lex = findedge(y, vfirst[0], vlast[3]);
                        rex = findedge(y, vfirst[1], vlast[2]);
                        for (j=0; j<v.length; j++) {
                            cv = v[j];
                            if (y >= cv[0][1] && y <= cv[3][1] && x >= lex[0] && x <= rex[0]) {
                                return {seriesIndex:s.index, pointIndex:j, gridData:null, data:s.data[j]};
                            }
                        }         
                        break;           
                    
                    case $.jqplot.LineRenderer:
                        x = gridpos.x;
                        y = gridpos.y;
                        r = s.renderer;
                        if (s.show) {
                            if (s.fill) {
                                // first check if it is in bounding box
                                var inside = false;
                                if (x>s._boundingBox[0][0] && x<s._boundingBox[1][0] && y>s._boundingBox[1][1] && y<s._boundingBox[0][1]) { 
                                    // now check the crossing number   
                                    
                                    var numPoints = s._areaPoints.length;
                                    var ii;
                                    var j = numPoints-1;

                                    for(var ii=0; ii < numPoints; ii++) { 
                                    	var vertex1 = [s._areaPoints[ii][0], s._areaPoints[ii][1]];
                                    	var vertex2 = [s._areaPoints[j][0], s._areaPoints[j][1]];

                                    	if (vertex1[1] < y && vertex2[1] >= y || vertex2[1] < y && vertex1[1] >= y)	 {
                                    		if (vertex1[0] + (y - vertex1[1]) / (vertex2[1] - vertex1[1]) * (vertex2[0] - vertex1[0]) < x) {
                                    			inside = !inside;
                                    		}
                                    	}

                                    	j = ii;
                                    }        
                                }
                                if (inside) {
                                    return {seriesIndex:i, pointIndex:null, gridData:s.gridData, data:s.data, points:s._areaPoints};
                                }
                                break;
                                
                            }
                            else {
                                t = s.markerRenderer.size/2+s.neighborThreshold;
                                threshold = (t > 0) ? t : 0;
                                for (var j=0; j<s.gridData.length; j++) {
                                    p = s.gridData[j];
                                    // neighbor looks different to OHLC chart.
                                    if (r.constructor == $.jqplot.OHLCRenderer) {
                                        if (r.candleStick) {
                                            var yp = s._yaxis.series_u2p;
                                            if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
                                                return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                            }
                                        }
                                        // if an open hi low close chart
                                        else if (!r.hlc){
                                            var yp = s._yaxis.series_u2p;
                                            if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
                                                return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                            }
                                        }
                                        // a hi low close chart
                                        else {
                                            var yp = s._yaxis.series_u2p;
                                            if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) {
                                                return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                            }
                                        }
                            
                                    }
                                    else if (p[0] != null && p[1] != null){
                                        d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
                                        if (d <= threshold && (d <= d0 || d0 == null)) {
                                           d0 = d;
                                           return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                        }
                                    }
                                } 
                            }
                        }
                        break;
                        
                    default:
                        x = gridpos.x;
                        y = gridpos.y;
                        r = s.renderer;
                        if (s.show) {
                            t = s.markerRenderer.size/2+s.neighborThreshold;
                            threshold = (t > 0) ? t : 0;
                            for (var j=0; j<s.gridData.length; j++) {
                                p = s.gridData[j];
                                // neighbor looks different to OHLC chart.
                                if (r.constructor == $.jqplot.OHLCRenderer) {
                                    if (r.candleStick) {
                                        var yp = s._yaxis.series_u2p;
                                        if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
                                            return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                        }
                                    }
                                    // if an open hi low close chart
                                    else if (!r.hlc){
                                        var yp = s._yaxis.series_u2p;
                                        if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
                                            return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                        }
                                    }
                                    // a hi low close chart
                                    else {
                                        var yp = s._yaxis.series_u2p;
                                        if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) {
                                            return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                        }
                                    }
                            
                                }
                                else {
                                    d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
                                    if (d <= threshold && (d <= d0 || d0 == null)) {
                                       d0 = d;
                                       return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
                                    }
                                }
                            } 
                        }
                        break;
                }
            }
            
            return null;
        }
        
        
        
        this.onClick = function(ev) {
            // Event passed in is normalized and will have data attribute.
            // Event passed out is unnormalized.
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var neighbor = checkIntersection(positions.gridPos, p);
            var evt = jQuery.Event('jqplotClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
        };
        
        this.onDblClick = function(ev) {
            // Event passed in is normalized and will have data attribute.
            // Event passed out is unnormalized.
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var neighbor = checkIntersection(positions.gridPos, p);
            var evt = jQuery.Event('jqplotDblClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
        };
        
        this.onMouseDown = function(ev) {
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var neighbor = checkIntersection(positions.gridPos, p);
            var evt = jQuery.Event('jqplotMouseDown');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
        };
        
        this.onMouseUp = function(ev) {
            var positions = getEventPosition(ev);
            var evt = jQuery.Event('jqplotMouseUp');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, ev.data.plot]);
        };
        
        this.onRightClick = function(ev) {
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var neighbor = checkIntersection(positions.gridPos, p);
            if (p.captureRightClick) {
                if (ev.which == 3) {
                var evt = jQuery.Event('jqplotRightClick');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                    $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
                }
                else {
                var evt = jQuery.Event('jqplotMouseUp');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                    $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
                }
            }
        };
        
        this.onMouseMove = function(ev) {
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var neighbor = checkIntersection(positions.gridPos, p);
            var evt = jQuery.Event('jqplotMouseMove');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
        };
        
        this.onMouseEnter = function(ev) {
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var evt = jQuery.Event('jqplotMouseEnter');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]);
        };
        
        this.onMouseLeave = function(ev) {
            var positions = getEventPosition(ev);
            var p = ev.data.plot;
            var evt = jQuery.Event('jqplotMouseLeave');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]);
        };
        
        // method: drawSeries
        // Redraws all or just one series on the plot.  No axis scaling
        // is performed and no other elements on the plot are redrawn.
        // options is an options object to pass on to the series renderers.
        // It can be an empty object {}.  idx is the series index
        // to redraw if only one series is to be redrawn.
        this.drawSeries = function(options, idx){
            var i, series, ctx;
            // if only one argument passed in and it is a number, use it ad idx.
            idx = (typeof(options) == "number" && idx == null) ? options : idx;
            options = (typeof(options) == "object") ? options : {};
            // draw specified series
            if (idx != undefined) {
                series = this.series[idx];
                ctx = series.shadowCanvas._ctx;
                ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
                series.drawShadow(ctx, options, this);
                ctx = series.canvas._ctx;
                ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
                series.draw(ctx, options, this);
                if (series.renderer.constructor == $.jqplot.BezierCurveRenderer) {
                    if (idx < this.series.length - 1) {
                        this.drawSeries(idx+1); 
                    }
                }
            }
            
            else {
                // if call series drawShadow method first, in case all series shadows
                // should be drawn before any series.  This will ensure, like for 
                // stacked bar plots, that shadows don't overlap series.
                for (i=0; i<this.series.length; i++) {
                    // first clear the canvas
                    series = this.series[i];
                    ctx = series.shadowCanvas._ctx;
                    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
                    series.drawShadow(ctx, options, this);
                    ctx = series.canvas._ctx;
                    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
                    series.draw(ctx, options, this);
                }
            }
        };
        
        // method: moveSeriesToFront
        // This method requires jQuery 1.4+
        // Moves the specified series canvas in front of all other series canvases.
        // This effectively "draws" the specified series on top of all other series,
        // although it is performed through DOM manipulation, no redrawing is performed.
        //
        // Parameters:
        // idx - 0 based index of the series to move.  This will be the index of the series
        // as it was first passed into the jqplot function.
        this.moveSeriesToFront = function (idx) { 
            idx = parseInt(idx, 10);
            var stackIndex = $.inArray(idx, this.seriesStack);
            // if already in front, return
            if (stackIndex == -1) {
                return;
            }
            if (stackIndex == this.seriesStack.length -1) {
                this.previousSeriesStack = this.seriesStack.slice(0);
                return;
            }
            var opidx = this.seriesStack[this.seriesStack.length -1];
            var serelem = this.series[idx].canvas._elem.detach();
            var shadelem = this.series[idx].shadowCanvas._elem.detach();
            this.series[opidx].shadowCanvas._elem.after(shadelem);
            this.series[opidx].canvas._elem.after(serelem);
            this.previousSeriesStack = this.seriesStack.slice(0);
            this.seriesStack.splice(stackIndex, 1);
            this.seriesStack.push(idx);
        };
        
        // method: moveSeriesToBack
        // This method requires jQuery 1.4+
        // Moves the specified series canvas behind all other series canvases.
        //
        // Parameters:
        // idx - 0 based index of the series to move.  This will be the index of the series
        // as it was first passed into the jqplot function.
        this.moveSeriesToBack = function (idx) {
            idx = parseInt(idx, 10);
            var stackIndex = $.inArray(idx, this.seriesStack);
            // if already in back, return
            if (stackIndex == 0 || stackIndex == -1) {
                return;
            }
            var opidx = this.seriesStack[0];
            var serelem = this.series[idx].canvas._elem.detach();
            var shadelem = this.series[idx].shadowCanvas._elem.detach();
            this.series[opidx].shadowCanvas._elem.before(shadelem);
            this.series[opidx].canvas._elem.before(serelem);
            this.previousSeriesStack = this.seriesStack.slice(0);
            this.seriesStack.splice(stackIndex, 1);
            this.seriesStack.unshift(idx);
        };
        
        // method: restorePreviousSeriesOrder
        // This method requires jQuery 1.4+
        // Restore the series canvas order to its previous state.
        // Useful to put a series back where it belongs after moving
        // it to the front.
        this.restorePreviousSeriesOrder = function () {
            var i, j, serelem, shadelem, temp;
            // if no change, return.
            if (this.seriesStack == this.previousSeriesStack) {
                return;
            }
            for (i=1; i<this.previousSeriesStack.length; i++) {
                move = this.previousSeriesStack[i];
                keep = this.previousSeriesStack[i-1];
                serelem = this.series[move].canvas._elem.detach();
                shadelem = this.series[move].shadowCanvas._elem.detach();
                this.series[keep].shadowCanvas._elem.after(shadelem);
                this.series[keep].canvas._elem.after(serelem);
            }
            temp = this.seriesStack.slice(0);
            this.seriesStack = this.previousSeriesStack.slice(0);
            this.previousSeriesStack = temp;
        };
        
        // method: restoreOriginalSeriesOrder
        // This method requires jQuery 1.4+
        // Restore the series canvas order to its original order
        // when the plot was created.
        this.restoreOriginalSeriesOrder = function () {
            var i, j, arr=[];
            for (i=0; i<this.series.length; i++) {
                arr.push(i);
            }
            if (this.seriesStack == arr) {
                return;
            }
            this.previousSeriesStack = this.seriesStack.slice(0);
            this.seriesStack = arr;
            for (i=1; i<this.seriesStack.length; i++) {
                serelem = this.series[i].canvas._elem.detach();
                shadelem = this.series[i].shadowCanvas._elem.detach();
                this.series[i-1].shadowCanvas._elem.after(shadelem);
                this.series[i-1].canvas._elem.after(serelem);
            }
        };
        
        this.activateTheme = function (name) {
            this.themeEngine.activate(this, name);
        };
    }
    
    
    // conpute a highlight color or array of highlight colors from given colors.
    $.jqplot.computeHighlightColors  = function(colors) {
        var ret;
        if (typeof(colors) == "array") {
            ret = [];
            for (var i=0; i<colors.length; i++){
                var rgba = $.jqplot.getColorComponents(colors[i]);
                var newrgb = [rgba[0], rgba[1], rgba[2]];
                var sum = newrgb[0] + newrgb[1] + newrgb[2];
                for (var j=0; j<3; j++) {
                    // when darkening, lowest color component can be is 60.
                    newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
                    newrgb[j] = parseInt(newrgb[j], 10);
                }
                ret.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
            }
        }
        else {
            var rgba = $.jqplot.getColorComponents(colors);
            var newrgb = [rgba[0], rgba[1], rgba[2]];
            var sum = newrgb[0] + newrgb[1] + newrgb[2];
            for (var j=0; j<3; j++) {
                // when darkening, lowest color component can be is 60.
                newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
                newrgb[j] = parseInt(newrgb[j], 10);
            }
            ret = 'rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')';
        }
        return ret;
    };
        
   $.jqplot.ColorGenerator = function(colors) {
        var idx = 0;
        
        this.next = function () { 
            if (idx < colors.length) {
                return colors[idx++];
            }
            else {
                idx = 0;
                return colors[idx++];
            }
        };
        
        this.previous = function () { 
            if (idx > 0) {
                return colors[idx--];
            }
            else {
                idx = colors.length-1;
                return colors[idx];
            }
        };
        
        // get a color by index without advancing pointer.
        this.get = function(i) {
            var idx = i - colors.length * Math.floor(i/colors.length);
            return colors[idx];
        };
        
        this.setColors = function(c) {
            colors = c;
        };
        
        this.reset = function() {
            idx = 0;
        };
    };

    // convert a hex color string to rgb string.
    // h - 3 or 6 character hex string, with or without leading #
    // a - optional alpha
    $.jqplot.hex2rgb = function(h, a) {
        h = h.replace('#', '');
        if (h.length == 3) {
            h = h[0]+h[0]+h[1]+h[1]+h[2]+h[2];
        }
        var rgb;
        rgb = 'rgba('+parseInt(h.slice(0,2), 16)+', '+parseInt(h.slice(2,4), 16)+', '+parseInt(h.slice(4,6), 16);
        if (a) {
            rgb += ', '+a;
        }
        rgb += ')';
        return rgb;
    };
    
    // convert an rgb color spec to a hex spec.  ignore any alpha specification.
    $.jqplot.rgb2hex = function(s) {
        var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;
        var m = s.match(pat);
        var h = '#';
        for (i=1; i<4; i++) {
            var temp;
            if (m[i].search(/%/) != -1) {
                temp = parseInt(255*m[i]/100, 10).toString(16);
                if (temp.length == 1) {
                    temp = '0'+temp;
                }
            }
            else {
                temp = parseInt(m[i], 10).toString(16);
                if (temp.length == 1) {
                    temp = '0'+temp;
                }
            }
            h += temp;
        }
        return h;
    };
    
    // given a css color spec, return an rgb css color spec
    $.jqplot.normalize2rgb = function(s, a) {
        if (s.search(/^ *rgba?\(/) != -1) {
            return s; 
        }
        else if (s.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/) != -1) {
            return $.jqplot.hex2rgb(s, a);
        }
        else {
            throw 'invalid color spec';
        }
    };
    
    // extract the r, g, b, a color components out of a css color spec.
    $.jqplot.getColorComponents = function(s) {
        // check to see if a color keyword.
        s = $.jqplot.colorKeywordMap[s] || s;
        var rgb = $.jqplot.normalize2rgb(s);
        var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;
        var m = rgb.match(pat);
        var ret = [];
        for (i=1; i<4; i++) {
            if (m[i].search(/%/) != -1) {
                ret[i-1] = parseInt(255*m[i]/100, 10);
            }
            else {
                ret[i-1] = parseInt(m[i], 10);
            }
        }
        ret[3] = parseFloat(m[4]) ? parseFloat(m[4]) : 1.0;
        return ret;
    };
    
    $.jqplot.colorKeywordMap = {aliceblue: 'rgb(240, 248, 255)', antiquewhite: 'rgb(250, 235, 215)', aqua: 'rgb( 0, 255, 255)', aquamarine: 'rgb(127, 255, 212)', azure: 'rgb(240, 255, 255)', beige: 'rgb(245, 245, 220)', bisque: 'rgb(255, 228, 196)', black: 'rgb( 0, 0, 0)', blanchedalmond: 'rgb(255, 235, 205)', blue: 'rgb( 0, 0, 255)', blueviolet: 'rgb(138, 43, 226)', brown: 'rgb(165, 42, 42)', burlywood: 'rgb(222, 184, 135)', cadetblue: 'rgb( 95, 158, 160)', chartreuse: 'rgb(127, 255, 0)', chocolate: 'rgb(210, 105, 30)', coral: 'rgb(255, 127, 80)', cornflowerblue: 'rgb(100, 149, 237)', cornsilk: 'rgb(255, 248, 220)', crimson: 'rgb(220, 20, 60)', cyan: 'rgb( 0, 255, 255)', darkblue: 'rgb( 0, 0, 139)', darkcyan: 'rgb( 0, 139, 139)', darkgoldenrod: 'rgb(184, 134, 11)', darkgray: 'rgb(169, 169, 169)', darkgreen: 'rgb( 0, 100, 0)', darkgrey: 'rgb(169, 169, 169)', darkkhaki: 'rgb(189, 183, 107)', darkmagenta: 'rgb(139, 0, 139)', darkolivegreen: 'rgb( 85, 107, 47)', darkorange: 'rgb(255, 140, 0)', darkorchid: 'rgb(153, 50, 204)', darkred: 'rgb(139, 0, 0)', darksalmon: 'rgb(233, 150, 122)', darkseagreen: 'rgb(143, 188, 143)', darkslateblue: 'rgb( 72, 61, 139)', darkslategray: 'rgb( 47, 79, 79)', darkslategrey: 'rgb( 47, 79, 79)', darkturquoise: 'rgb( 0, 206, 209)', darkviolet: 'rgb(148, 0, 211)', deeppink: 'rgb(255, 20, 147)', deepskyblue: 'rgb( 0, 191, 255)', dimgray: 'rgb(105, 105, 105)', dimgrey: 'rgb(105, 105, 105)', dodgerblue: 'rgb( 30, 144, 255)', firebrick: 'rgb(178, 34, 34)', floralwhite: 'rgb(255, 250, 240)', forestgreen: 'rgb( 34, 139, 34)', fuchsia: 'rgb(255, 0, 255)', gainsboro: 'rgb(220, 220, 220)', ghostwhite: 'rgb(248, 248, 255)', gold: 'rgb(255, 215, 0)', goldenrod: 'rgb(218, 165, 32)', gray: 'rgb(128, 128, 128)', grey: 'rgb(128, 128, 128)', green: 'rgb( 0, 128, 0)', greenyellow: 'rgb(173, 255, 47)', honeydew: 'rgb(240, 255, 240)', hotpink: 'rgb(255, 105, 180)', indianred: 'rgb(205, 92, 92)', indigo: 'rgb( 75, 0, 130)', ivory: 'rgb(255, 255, 240)', khaki: 'rgb(240, 230, 140)', lavender: 'rgb(230, 230, 250)', lavenderblush: 'rgb(255, 240, 245)', lawngreen: 'rgb(124, 252, 0)', lemonchiffon: 'rgb(255, 250, 205)', lightblue: 'rgb(173, 216, 230)', lightcoral: 'rgb(240, 128, 128)', lightcyan: 'rgb(224, 255, 255)', lightgoldenrodyellow: 'rgb(250, 250, 210)', lightgray: 'rgb(211, 211, 211)', lightgreen: 'rgb(144, 238, 144)', lightgrey: 'rgb(211, 211, 211)', lightpink: 'rgb(255, 182, 193)', lightsalmon: 'rgb(255, 160, 122)', lightseagreen: 'rgb( 32, 178, 170)', lightskyblue: 'rgb(135, 206, 250)', lightslategray: 'rgb(119, 136, 153)', lightslategrey: 'rgb(119, 136, 153)', lightsteelblue: 'rgb(176, 196, 222)', lightyellow: 'rgb(255, 255, 224)', lime: 'rgb( 0, 255, 0)', limegreen: 'rgb( 50, 205, 50)', linen: 'rgb(250, 240, 230)', magenta: 'rgb(255, 0, 255)', maroon: 'rgb(128, 0, 0)', mediumaquamarine: 'rgb(102, 205, 170)', mediumblue: 'rgb( 0, 0, 205)', mediumorchid: 'rgb(186, 85, 211)', mediumpurple: 'rgb(147, 112, 219)', mediumseagreen: 'rgb( 60, 179, 113)', mediumslateblue: 'rgb(123, 104, 238)', mediumspringgreen: 'rgb( 0, 250, 154)', mediumturquoise: 'rgb( 72, 209, 204)', mediumvioletred: 'rgb(199, 21, 133)', midnightblue: 'rgb( 25, 25, 112)', mintcream: 'rgb(245, 255, 250)', mistyrose: 'rgb(255, 228, 225)', moccasin: 'rgb(255, 228, 181)', navajowhite: 'rgb(255, 222, 173)', navy: 'rgb( 0, 0, 128)', oldlace: 'rgb(253, 245, 230)', olive: 'rgb(128, 128, 0)', olivedrab: 'rgb(107, 142, 35)', orange: 'rgb(255, 165, 0)', orangered: 'rgb(255, 69, 0)', orchid: 'rgb(218, 112, 214)', palegoldenrod: 'rgb(238, 232, 170)', palegreen: 'rgb(152, 251, 152)', paleturquoise: 'rgb(175, 238, 238)', palevioletred: 'rgb(219, 112, 147)', papayawhip: 'rgb(255, 239, 213)', peachpuff: 'rgb(255, 218, 185)', peru: 'rgb(205, 133, 63)', pink: 'rgb(255, 192, 203)', plum: 'rgb(221, 160, 221)', powderblue: 'rgb(176, 224, 230)', purple: 'rgb(128, 0, 128)', red: 'rgb(255, 0, 0)', rosybrown: 'rgb(188, 143, 143)', royalblue: 'rgb( 65, 105, 225)', saddlebrown: 'rgb(139, 69, 19)', salmon: 'rgb(250, 128, 114)', sandybrown: 'rgb(244, 164, 96)', seagreen: 'rgb( 46, 139, 87)', seashell: 'rgb(255, 245, 238)', sienna: 'rgb(160, 82, 45)', silver: 'rgb(192, 192, 192)', skyblue: 'rgb(135, 206, 235)', slateblue: 'rgb(106, 90, 205)', slategray: 'rgb(112, 128, 144)', slategrey: 'rgb(112, 128, 144)', snow: 'rgb(255, 250, 250)', springgreen: 'rgb( 0, 255, 127)', steelblue: 'rgb( 70, 130, 180)', tan: 'rgb(210, 180, 140)', teal: 'rgb( 0, 128, 128)', thistle: 'rgb(216, 191, 216)', tomato: 'rgb(255, 99, 71)', turquoise: 'rgb( 64, 224, 208)', violet: 'rgb(238, 130, 238)', wheat: 'rgb(245, 222, 179)', white: 'rgb(255, 255, 255)', whitesmoke: 'rgb(245, 245, 245)', yellow: 'rgb(255, 255, 0)', yellowgreen: 'rgb(154, 205, 50)'};
        
    // Convienence function that won't hang IE.
    $.jqplot.log = function() {
        if (window.console && $.jqplot.debug) {
           if (arguments.length == 1) {
               console.log (arguments[0]);
            }
           else {
               console.log(arguments);
            }
        }
    };
    var log = $.jqplot.log;
    

    // class: $.jqplot.AxisLabelRenderer
    // Renderer to place labels on the axes.
    $.jqplot.AxisLabelRenderer = function(options) {
        // Group: Properties
        $.jqplot.ElemContainer.call(this);
        // name of the axis associated with this tick
        this.axis;
        // prop: show
        // wether or not to show the tick (mark and label).
        this.show = true;
        // prop: label
        // The text or html for the label.
        this.label = '';
        this.fontFamily = null;
        this.fontSize = null;
        this.textColor = null;
        this._elem;
        // prop: escapeHTML
        // true to escape HTML entities in the label.
        this.escapeHTML = false;
        
        $.extend(true, this, options);
    };
    
    $.jqplot.AxisLabelRenderer.prototype = new $.jqplot.ElemContainer();
    $.jqplot.AxisLabelRenderer.prototype.constructor = $.jqplot.AxisLabelRenderer;
    
    $.jqplot.AxisLabelRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
    };
    
    $.jqplot.AxisLabelRenderer.prototype.draw = function() {
        this._elem = $('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');
        
        if (Number(this.label)) {
            this._elem.css('white-space', 'nowrap');
        }
        
        if (!this.escapeHTML) {
            this._elem.html(this.label);
        }
        else {
            this._elem.text(this.label);
        }
        if (this.fontFamily) {
            this._elem.css('font-family', this.fontFamily);
        }
        if (this.fontSize) {
            this._elem.css('font-size', this.fontSize);
        }
        if (this.textColor) {
            this._elem.css('color', this.textColor);
        }
        
        return this._elem;
    };
    
    $.jqplot.AxisLabelRenderer.prototype.pack = function() {
    };

    // class: $.jqplot.AxisTickRenderer
    // A "tick" object showing the value of a tick/gridline on the plot.
    $.jqplot.AxisTickRenderer = function(options) {
        // Group: Properties
        $.jqplot.ElemContainer.call(this);
        // prop: mark
        // tick mark on the axis.  One of 'inside', 'outside', 'cross', '' or null.
        this.mark = 'outside';
        // name of the axis associated with this tick
        this.axis;
        // prop: showMark
        // wether or not to show the mark on the axis.
        this.showMark = true;
        // prop: showGridline
        // wether or not to draw the gridline on the grid at this tick.
        this.showGridline = true;
        // prop: isMinorTick
        // if this is a minor tick.
        this.isMinorTick = false;
        // prop: size
        // Length of the tick beyond the grid in pixels.
        // DEPRECATED: This has been superceeded by markSize
        this.size = 4;
        // prop:  markSize
        // Length of the tick marks in pixels.  For 'cross' style, length
        // will be stoked above and below axis, so total length will be twice this.
        this.markSize = 6;
        // prop: show
        // wether or not to show the tick (mark and label).
        // Setting this to false requires more testing.  It is recommended
        // to set showLabel and showMark to false instead.
        this.show = true;
        // prop: showLabel
        // wether or not to show the label.
        this.showLabel = true;
        this.label = '';
        this.value = null;
        this._styles = {};
        // prop: formatter
        // A class of a formatter for the tick text.  sprintf by default.
        this.formatter = $.jqplot.DefaultTickFormatter;
        // prop: prefix
        // string appended to the tick label if no formatString is specified.
        this.prefix = '';
        // prop: formatString
        // string passed to the formatter.
        this.formatString = '';
        // prop: fontFamily
        // css spec for the font-family css attribute.
        this.fontFamily;
        // prop: fontSize
        // css spec for the font-size css attribute.
        this.fontSize;
        // prop: textColor
        // css spec for the color attribute.
        this.textColor;
        this._elem;
        
        $.extend(true, this, options);
    };
    
    $.jqplot.AxisTickRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
    };
    
    $.jqplot.AxisTickRenderer.prototype = new $.jqplot.ElemContainer();
    $.jqplot.AxisTickRenderer.prototype.constructor = $.jqplot.AxisTickRenderer;
    
    $.jqplot.AxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) {
        this.value = value;
        this.axis = axisName;
        if (isMinor) {
            this.isMinorTick = true;
        }
        return this;
    };
    
    $.jqplot.AxisTickRenderer.prototype.draw = function() {
        if (!this.label) {
            this.label = this.formatter(this.formatString, this.value);
        }
        // add prefix if needed
        if (this.prefix && !this.formatString) {
            this.label = this.prefix + this.label;
        }
        style ='style="position:absolute;';
        if (Number(this.label)) {
            style +='white-space:nowrap;';
        }
        style += '"';
        this._elem = $('<div '+style+' class="jqplot-'+this.axis+'-tick">'+this.label+'</div>');
        for (var s in this._styles) {
            this._elem.css(s, this._styles[s]);
        }
        if (this.fontFamily) {
            this._elem.css('font-family', this.fontFamily);
        }
        if (this.fontSize) {
            this._elem.css('font-size', this.fontSize);
        }
        if (this.textColor) {
            this._elem.css('color', this.textColor);
        }
        return this._elem;
    };
        
    $.jqplot.DefaultTickFormatter = function (format, val) {
        if (typeof val == 'number') {
            if (!format) {
                format = $.jqplot.config.defaultTickFormatString;
            }
            return $.jqplot.sprintf(format, val);
        }
        else {
            return String(val);
        }
    };
    
    $.jqplot.AxisTickRenderer.prototype.pack = function() {
    };
     
    // Class: $.jqplot.CanvasGridRenderer
    // The default jqPlot grid renderer, creating a grid on a canvas element.
    // The renderer has no additional options beyond the <Grid> class.
    $.jqplot.CanvasGridRenderer = function(){
        this.shadowRenderer = new $.jqplot.ShadowRenderer();
    };
    
    // called with context of Grid object
    $.jqplot.CanvasGridRenderer.prototype.init = function(options) {
        this._ctx;
        $.extend(true, this, options);
        // set the shadow renderer options
        var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor};
        this.renderer.shadowRenderer.init(sopts);
    };
    
    // called with context of Grid.
    $.jqplot.CanvasGridRenderer.prototype.createElement = function() {
        var elem = document.createElement('canvas');
        var w = this._plotDimensions.width;
        var h = this._plotDimensions.height;
        elem.width = w;
        elem.height = h;
        this._elem = $(elem);
        this._elem.addClass('jqplot-grid-canvas');
        this._elem.css({ position: 'absolute', left: 0, top: 0 });
        if ($.jqplot.use_excanvas) {
            window.G_vmlCanvasManager.init_(document);
        }
        if ($.jqplot.use_excanvas) {
            elem = window.G_vmlCanvasManager.initElement(elem);
        }
        this._top = this._offsets.top;
        this._bottom = h - this._offsets.bottom;
        this._left = this._offsets.left;
        this._right = w - this._offsets.right;
        this._width = this._right - this._left;
        this._height = this._bottom - this._top;
        return this._elem;
    };
    
    $.jqplot.CanvasGridRenderer.prototype.draw = function() {
        this._ctx = this._elem.get(0).getContext("2d");
        var ctx = this._ctx;
        var axes = this._axes;
        // Add the grid onto the grid canvas.  This is the bottom most layer.
        ctx.save();
        ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height);
        ctx.fillStyle = this.backgroundColor || this.background;
        ctx.fillRect(this._left, this._top, this._width, this._height);
        
        if (this.drawGridlines) {
            ctx.save();
            ctx.lineJoin = 'miter';
            ctx.lineCap = 'butt';
            ctx.lineWidth = this.gridLineWidth;
            ctx.strokeStyle = this.gridLineColor;
            var b, e;
            var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis'];
            for (var i=4; i>0; i--) {
                var name = ax[i-1];
                var axis = axes[name];
                var ticks = axis._ticks;
                if (axis.show) {
                    for (var j=ticks.length; j>0; j--) {
                        var t = ticks[j-1];
                        if (t.show) {
                            var pos = Math.round(axis.u2p(t.value)) + 0.5;
                            switch (name) {
                                case 'xaxis':
                                    // draw the grid line
                                    if (t.showGridline) {
                                        drawLine(pos, this._top, pos, this._bottom);
                                    }
                                    
                                    // draw the mark
                                    if (t.showMark && t.mark) {
                                        s = t.markSize;
                                        m = t.mark;
                                        var pos = Math.round(axis.u2p(t.value)) + 0.5;
                                        switch (m) {
                                            case 'outside':
                                                b = this._bottom;
                                                e = this._bottom+s;
                                                break;
                                            case 'inside':
                                                b = this._bottom-s;
                                                e = this._bottom;
                                                break;
                                            case 'cross':
                                                b = this._bottom-s;
                                                e = this._bottom+s;
                                                break;
                                            default:
                                                b = this._bottom;
                                                e = this._bottom+s;
                                                break;
                                        }
                                        // draw the shadow
                                        if (this.shadow) {
                                            this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
                                        }
                                        // draw the line
                                        drawLine(pos, b, pos, e);
                                    }
                                    break;
                                case 'yaxis':
                                    // draw the grid line
                                    if (t.showGridline) {
                                        drawLine(this._right, pos, this._left, pos);
                                    }
                                    // draw the mark
                                    if (t.showMark && t.mark) {
                                        s = t.markSize;
                                        m = t.mark;
                                        var pos = Math.round(axis.u2p(t.value)) + 0.5;
                                        switch (m) {
                                            case 'outside':
                                                b = this._left-s;
                                                e = this._left;
                                                break;
                                            case 'inside':
                                                b = this._left;
                                                e = this._left+s;
                                                break;
                                            case 'cross':
                                                b = this._left-s;
                                                e = this._left+s;
                                                break;
                                            default:
                                                b = this._left-s;
                                                e = this._left;
                                                break;
                                                }
                                        // draw the shadow
                                        if (this.shadow) {
                                            this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
                                        }
                                        drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
                                    }
                                    break;
                                case 'x2axis':
                                    // draw the grid line
                                    if (t.showGridline) {
                                        drawLine(pos, this._bottom, pos, this._top);
                                    }
                                    // draw the mark
                                    if (t.showMark && t.mark) {
                                        s = t.markSize;
                                        m = t.mark;
                                        var pos = Math.round(axis.u2p(t.value)) + 0.5;
                                        switch (m) {
                                            case 'outside':
                                                b = this._top-s;
                                                e = this._top;
                                                break;
                                            case 'inside':
                                                b = this._top;
                                                e = this._top+s;
                                                break;
                                            case 'cross':
                                                b = this._top-s;
                                                e = this._top+s;
                                                break;
                                            default:
                                                b = this._top-s;
                                                e = this._top;
                                                break;
                                                }
                                        // draw the shadow
                                        if (this.shadow) {
                                            this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
                                        }
                                        drawLine(pos, b, pos, e);
                                    }
                                    break;
                                case 'y2axis':
                                    // draw the grid line
                                    if (t.showGridline) {
                                        drawLine(this._left, pos, this._right, pos);
                                    }
                                    // draw the mark
                                    if (t.showMark && t.mark) {
                                        s = t.markSize;
                                        m = t.mark;
                                        var pos = Math.round(axis.u2p(t.value)) + 0.5;
                                        switch (m) {
                                            case 'outside':
                                                b = this._right;
                                                e = this._right+s;
                                                break;
                                            case 'inside':
                                                b = this._right-s;
                                                e = this._right;
                                                break;
                                            case 'cross':
                                                b = this._right-s;
                                                e = this._right+s;
                                                break;
                                            default:
                                                b = this._right;
                                                e = this._right+s;
                                                break;
                                                }
                                        // draw the shadow
                                        if (this.shadow) {
                                            this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
                                        }
                                        drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
                                    }
                                    break;
                                default:
                                    break;
                            }
                        }
                    }
                }
            }
            // Now draw grid lines for additional y axes
            ax = ['y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
            for (var i=7; i>0; i--) {
                var axis = axes[ax[i-1]];
                var ticks = axis._ticks;
                if (axis.show) {
                    var tn = ticks[axis.numberTicks-1];
                    var t0 = ticks[0];
                    var left = axis.getLeft();
                    var points = [[left, tn.getTop() + tn.getHeight()/2], [left, t0.getTop() + t0.getHeight()/2 + 1.0]];
                    // draw the shadow
                    if (this.shadow) {
                        this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', fill:false, closePath:false});
                    }
                    // draw the line
                    drawLine(points[0][0], points[0][1], points[1][0], points[1][1], {lineCap:'butt', strokeStyle:axis.borderColor, lineWidth:axis.borderWidth});
                    // draw the tick marks
                    for (var j=ticks.length; j>0; j--) {
                        var t = ticks[j-1];
                        s = t.markSize;
                        m = t.mark;
                        var pos = Math.round(axis.u2p(t.value)) + 0.5;
                        if (t.showMark && t.mark) {
                            switch (m) {
                                case 'outside':
                                    b = left;
                                    e = left+s;
                                    break;
                                case 'inside':
                                    b = left-s;
                                    e = left;
                                    break;
                                case 'cross':
                                    b = left-s;
                                    e = left+s;
                                    break;
                                default:
                                    b = left;
                                    e = left+s;
                                    break;
                            }
                            points = [[b,pos], [e,pos]];
                            // draw the shadow
                            if (this.shadow) {
                                this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
                            }
                            // draw the line
                            drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
                        }
                    }
                }
            }
            
            ctx.restore();
        }
        
        function drawLine(bx, by, ex, ey, opts) {
            ctx.save();
            opts = opts || {};
            if (opts.lineWidth == null || opts.lineWidth != 0){
                $.extend(true, ctx, opts);
                ctx.beginPath();
                ctx.moveTo(bx, by);
                ctx.lineTo(ex, ey);
                ctx.stroke();
                ctx.restore();
            }
        }
        
        if (this.shadow) {
            var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]];
            this.renderer.shadowRenderer.draw(ctx, points);
        }
        // Now draw border around grid.  Use axis border definitions. start at
        // upper left and go clockwise.
        if (this.borderWidth != 0 && this.drawBorder) {
            drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
            drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
            drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
            drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
        }
        // ctx.lineWidth = this.borderWidth;
        // ctx.strokeStyle = this.borderColor;
        // ctx.strokeRect(this._left, this._top, this._width, this._height);
        
    
        ctx.restore();
    };
   
    /**
     * Date instance methods
     *
     * @author Ken Snyder (ken d snyder at gmail dot com)
     * @date 2008-09-10
     * @version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
     * @license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
     *
     * @contributions Chris Leonello
     * @comment Bug fix to 12 hour time and additions to handle milliseconds and 
     * @comment 24 hour time without am/pm suffix
     *
     */
 
    // begin by creating a scope for utility variables
    
    //
    // pre-calculate the number of milliseconds in a day
    //  
    
    var day = 24 * 60 * 60 * 1000;
    //
    // function to add leading zeros
    //
    var zeroPad = function(number, digits) {
        number = String(number);
        while (number.length < digits) {
            number = '0' + number;
        }
        return number;
    };
    //
    // set up integers and functions for adding to a date or subtracting two dates
    //
    var multipliers = {
        millisecond: 1,
        second: 1000,
        minute: 60 * 1000,
        hour: 60 * 60 * 1000,
        day: day,
        week: 7 * day,
        month: {
            // add a number of months
            add: function(d, number) {
                // add any years needed (increments of 12)
                multipliers.year.add(d, Math[number > 0 ? 'floor' : 'ceil'](number / 12));
                // ensure that we properly wrap betwen December and January
                var prevMonth = d.getMonth() + (number % 12);
                if (prevMonth == 12) {
                    prevMonth = 0;
                    d.setYear(d.getFullYear() + 1);
                } else if (prevMonth == -1) {
                    prevMonth = 11;
                    d.setYear(d.getFullYear() - 1);
                }
                d.setMonth(prevMonth);
            },
            // get the number of months between two Date objects (decimal to the nearest day)
            diff: function(d1, d2) {
                // get the number of years
                var diffYears = d1.getFullYear() - d2.getFullYear();
                // get the number of remaining months
                var diffMonths = d1.getMonth() - d2.getMonth() + (diffYears * 12);
                // get the number of remaining days
                var diffDays = d1.getDate() - d2.getDate();
                // return the month difference with the days difference as a decimal
                return diffMonths + (diffDays / 30);
            }
        },
        year: {
            // add a number of years
            add: function(d, number) {
                d.setYear(d.getFullYear() + Math[number > 0 ? 'floor' : 'ceil'](number));
            },
            // get the number of years between two Date objects (decimal to the nearest day)
            diff: function(d1, d2) {
                return multipliers.month.diff(d1, d2) / 12;
            }
        }        
    };
    //
    // alias each multiplier with an 's' to allow 'year' and 'years' for example
    //
    for (var unit in multipliers) {
        if (unit.substring(unit.length - 1) != 's') { // IE will iterate newly added properties :|
            multipliers[unit + 's'] = multipliers[unit];
        }
    }
    //
    // take a date instance and a format code and return the formatted value
    //
    var format = function(d, code) {
            if (Date.prototype.strftime.formatShortcuts[code]) {
                    // process any shortcuts recursively
                    return d.strftime(Date.prototype.strftime.formatShortcuts[code]);
            } else {
                    // get the format code function and toPaddedString() argument
                    var getter = (Date.prototype.strftime.formatCodes[code] || '').split('.');
                    var nbr = d['get' + getter[0]] ? d['get' + getter[0]]() : '';
                    // run toPaddedString() if specified
                    if (getter[1]) {
                        nbr = zeroPad(nbr, getter[1]);
                    }
                    // prepend the leading character
                    return nbr;
            }       
    };
    //
    // Add methods to Date instances
    //
    var instanceMethods = {
        //
        // Return a date one day ahead (or any other unit)
        //
        // @param string unit
        // units: year | month | day | week | hour | minute | second | millisecond
        // @return object Date
        //
        succ: function(unit) {
            return this.clone().add(1, unit);
        },
        //
        // Add an arbitrary amount to the currently stored date
        //
        // @param integer/float number      
        // @param string unit
        // @return object Date (chainable)      
        //
        add: function(number, unit) {
            var factor = multipliers[unit] || multipliers.day;
            if (typeof factor == 'number') {
                this.setTime(this.getTime() + (factor * number));
            } else {
                factor.add(this, number);
            }
            return this;
        },
        //
        // Find the difference between the current and another date
        //
        // @param string/object dateObj
        // @param string unit
        // @param boolean allowDecimal
        // @return integer/float
        //
        diff: function(dateObj, unit, allowDecimal) {
            // ensure we have a Date object
            dateObj = Date.create(dateObj);
            if (dateObj === null) {
                return null;
            }
            // get the multiplying factor integer or factor function
            var factor = multipliers[unit] || multipliers.day;
            if (typeof factor == 'number') {
                // multiply
                var unitDiff = (this.getTime() - dateObj.getTime()) / factor;
            } else {
                // run function
                var unitDiff = factor.diff(this, dateObj);
            }
            // if decimals are not allowed, round toward zero
            return (allowDecimal ? unitDiff : Math[unitDiff > 0 ? 'floor' : 'ceil'](unitDiff));          
        },
        //
        // Convert a date to a string using traditional strftime format codes
        //
        // @param string formatStr
        // @return string
        //
        strftime: function(formatStr) {
            // default the format string to year-month-day
            var source = formatStr || '%Y-%m-%d', result = '', match;
            // Account for display of time in local time or as UTC time
            // var val = ($.jqplot.comfig.convertUTCtoLocaltime) ? this : 
            // replace each format code
            while (source.length > 0) {
                if (match = source.match(Date.prototype.strftime.formatCodes.matcher)) {
                    result += source.slice(0, match.index);
                    result += (match[1] || '') + format(this, match[2]);
                    source = source.slice(match.index + match[0].length);
                } else {
                    result += source;
                    source = '';
                }
            }
            return result;
        },
        //
        // Return a proper two-digit year integer
        //
        // @return integer
        //
        getShortYear: function() {
            return this.getYear() % 100;
        },
        //
        // Get the number of the current month, 1-12
        //
        // @return integer
        //
        getMonthNumber: function() {
            return this.getMonth() + 1;
        },
        //
        // Get the name of the current month
        //
        // @return string
        //
        getMonthName: function() {
            return Date.MONTHNAMES[this.getMonth()];
        },
        //
        // Get the abbreviated name of the current month
        //
        // @return string
        //
        getAbbrMonthName: function() {
            return Date.ABBR_MONTHNAMES[this.getMonth()];
        },
        //
        // Get the name of the current week day
        //
        // @return string
        //      
        getDayName: function() {
            return Date.DAYNAMES[this.getDay()];
        },
        //
        // Get the abbreviated name of the current week day
        //
        // @return string
        //      
        getAbbrDayName: function() {
            return Date.ABBR_DAYNAMES[this.getDay()];
        },
        //
        // Get the ordinal string associated with the day of the month (i.e. st, nd, rd, th)
        //
        // @return string
        //      
        getDayOrdinal: function() {
            return Date.ORDINALNAMES[this.getDate() % 10];
        },
        //
        // Get the current hour on a 12-hour scheme
        //
        // @return integer
        //
        getHours12: function() {
            var hours = this.getHours();
            return hours > 12 ? hours - 12 : (hours == 0 ? 12 : hours);
        },
        //
        // Get the AM or PM for the current time
        //
        // @return string
        //
        getAmPm: function() {
            return this.getHours() >= 12 ? 'PM' : 'AM';
        },
        //
        // Get the current date as a Unix timestamp
        //
        // @return integer
        //
        getUnix: function() {
            return Math.round(this.getTime() / 1000, 0);
        },
        //
        // Get the GMT offset in hours and minutes (e.g. +06:30)
        //
        // @return string
        //
        getGmtOffset: function() {
            // divide the minutes offset by 60
            var hours = this.getTimezoneOffset() / 60;
            // decide if we are ahead of or behind GMT
            var prefix = hours < 0 ? '+' : '-';
            // remove the negative sign if any
            hours = Math.abs(hours);
            // add the +/- to the padded number of hours to : to the padded minutes
            return prefix + zeroPad(Math.floor(hours), 2) + ':' + zeroPad((hours % 1) * 60, 2);
        },
        //
        // Get the browser-reported name for the current timezone (e.g. MDT, Mountain Daylight Time)
        //
        // @return string
        //
        getTimezoneName: function() {
            var match = /(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());
            return match[1] || match[2] || 'GMT' + this.getGmtOffset();
        },
        //
        // Convert the current date to an 8-digit integer (%Y%m%d)
        //
        // @return int
        //
        toYmdInt: function() {
            return (this.getFullYear() * 10000) + (this.getMonthNumber() * 100) + this.getDate();
        },  
        //
        // Create a copy of a date object
        //
        // @return object
        //       
        clone: function() {
                return new Date(this.getTime());
        }
    };
    for (var name in instanceMethods) {
        Date.prototype[name] = instanceMethods[name];
    }
    //
    // Add static methods to the date object
    //
    var staticMethods = {
        //
        // The heart of the date functionality: returns a date object if given a convertable value
        //
        // @param string/object/integer date
        // @return object Date
        //
        create: function(date) {
            // If the passed value is already a date object, return it
            if (date instanceof Date) {
                return date;
            }
            // if (typeof date == 'number') return new Date(date);
            // If the passed value is an integer, interpret it as a javascript timestamp
            if (typeof date == 'number') {
                return new Date(date);
            }
            // If the passed value is a string, attempt to parse it using Date.parse()
            var parsable = String(date).replace(/^\s*(.+)\s*$/, '$1'), i = 0, length = Date.create.patterns.length, pattern;
            var current = parsable;
            while (i < length) {
                ms = Date.parse(current);
                if (!isNaN(ms)) {
                    return new Date(ms);
                }
                pattern = Date.create.patterns[i];
                if (typeof pattern == 'function') {
                    obj = pattern(current);
                    if (obj instanceof Date) {
                        return obj;
                    }
                } else {
                    current = parsable.replace(pattern[0], pattern[1]);
                }
                i++;
            }
            return NaN;
        },
        //
        // constants representing month names, day names, and ordinal names
        // (same names as Ruby Date constants)
        //
        MONTHNAMES          : 'January February March April May June July August September October November December'.split(' '),
        ABBR_MONTHNAMES : 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '),
        DAYNAMES                : 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '),
        ABBR_DAYNAMES       : 'Sun Mon Tue Wed Thu Fri Sat'.split(' '),
        ORDINALNAMES        : 'th st nd rd th th th th th th'.split(' '),
        //
        // Shortcut for full ISO-8601 date conversion
        //
        ISO: '%Y-%m-%dT%H:%M:%S.%N%G',
        //
        // Shortcut for SQL-type formatting
        //
        SQL: '%Y-%m-%d %H:%M:%S',
        //
        // Setter method for month, day, and ordinal names for i18n
        //
        // @param object newNames
        //
        daysInMonth: function(year, month) {
            if (month == 2) {
                return new Date(year, 1, 29).getDate() == 29 ? 29 : 28;
            }
            return [undefined,31,undefined,31,30,31,30,31,31,30,31,30,31][month];
        }
    };
    for (var name in staticMethods) {
        Date[name] = staticMethods[name];
    }
    //
    // format codes for strftime
    //
    // each code must be an array where the first member is the name of a Date.prototype function
    // and optionally a second member indicating the number to pass to Number#toPaddedString()
    //
    Date.prototype.strftime.formatCodes = {
        //
        // 2-part regex matcher for format codes
        //
        // first match must be the character before the code (to account for escaping)
        // second match must be the format code character(s)
        //
        matcher: /()%(#?(%|[a-z]))/i,
        // year
        Y: 'FullYear',
        y: 'ShortYear.2',
        // month
        m: 'MonthNumber.2',
        '#m': 'MonthNumber',
        B: 'MonthName',
        b: 'AbbrMonthName',
        // day
        d: 'Date.2',
        '#d': 'Date',
        e: 'Date',
        A: 'DayName',
        a: 'AbbrDayName',
        w: 'Day',
        o: 'DayOrdinal',
        // hours
        H: 'Hours.2',
        '#H': 'Hours',
        I: 'Hours12.2',
        '#I': 'Hours12',
        p: 'AmPm',
        // minutes
        M: 'Minutes.2',
        '#M': 'Minutes',
        // seconds
        S: 'Seconds.2',
        '#S': 'Seconds',
        s: 'Unix',
        // milliseconds
        N: 'Milliseconds.3',
        '#N': 'Milliseconds',
        // timezone
        O: 'TimezoneOffset',
        Z: 'TimezoneName',
        G: 'GmtOffset'  
    };
    //
    // shortcuts that will be translated into their longer version
    //
    // be sure that format shortcuts do not refer to themselves: this will cause an infinite loop
    //
    Date.prototype.strftime.formatShortcuts = {
        // date
        F: '%Y-%m-%d',
        // time
        T: '%H:%M:%S',
        X: '%H:%M:%S',
        // local format date
        x: '%m/%d/%y',
        D: '%m/%d/%y',
        // local format extended
        '#c': '%a %b %e %H:%M:%S %Y',
        // local format short
        v: '%e-%b-%Y',
        R: '%H:%M',
        r: '%I:%M:%S %p',
        // tab and newline
        t: '\t',
        n: '\n',
        '%': '%'
    };
    //
    // A list of conversion patterns (array arguments sent directly to gsub)
    // Add, remove or splice a patterns to customize date parsing ability
    //
    Date.create.patterns = [
        [/-/g, '/'], // US-style time with dashes => Parsable US-style time
        [/st|nd|rd|th/g, ''], // remove st, nd, rd and th        
        [/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/, '$2/$1/$3'], // World time => Parsable US-style time
        [/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/, '$2/$3/$1'], // ISO-style time => Parsable US-style time
        function(str) { // 12-hour or 24 hour time with milliseconds
            // var match = str.match(/^(?:(.+)\s+)?([1-9]|1[012])(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d))?\s*(am|pm)\s*$/i);
            var match = str.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);
            //                   opt. date      hour       opt. minute     opt. second       opt. msec   opt. am or pm
            if (match) {
                if (match[1]) {
                    var d = Date.create(match[1]);
                    if (isNaN(d)) {
                        return;
                    }
                } else {
                    var d = new Date();
                    d.setMilliseconds(0);
                }
                var hour = parseFloat(match[2]);
                if (match[6]) {
                    hour = match[6].toLowerCase() == 'am' ? (hour == 12 ? 0 : hour) : (hour == 12 ? 12 : hour + 12);
                }
                d.setHours(hour, parseInt(match[3] || 0, 10), parseInt(match[4] || 0, 10), ((parseFloat(match[5] || 0)) || 0)*1000);
                return d;
            }
            else {
                return str;
            }
        },
        function(str) { // ISO timestamp with time zone.
            var match = str.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);
            if (match) {
                if (match[1]) {
                    var d = Date.create(match[1]);
                    if (isNaN(d)) {
                        return;
                    }
                } else {
                    var d = new Date();
                    d.setMilliseconds(0);
                }
                var hour = parseFloat(match[2]);
                d.setHours(hour, parseInt(match[3], 10), parseInt(match[4], 10), parseFloat(match[5])*1000);
                return d;
            }
            else {
                    return str;
            }
        },
        function(str) {
            var match = str.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);
            if (match) {
                var d = new Date();
                var y = parseFloat(String(d.getFullYear()).slice(2,4));
                var cent = parseInt(String(d.getFullYear())/100, 10)*100;
                var centoffset = 1;
                var m1 = parseFloat(match[1]);
                var m3 = parseFloat(match[3]);
                var ny, nd, nm;
                if (m1 > 31) { // first number is a year
                    nd = match[3];
                    if (m1 < y+centoffset) { // if less than 1 year out, assume it is this century.
                        ny = cent + m1;
                    }
                    else {
                        ny = cent - 100 + m1;
                    }
                }
                
                else { // last number is the year
                    nd = match[1];
                    if (m3 < y+centoffset) { // if less than 1 year out, assume it is this century.
                        ny = cent + m3;
                    }
                    else {
                        ny = cent - 100 + m3;
                    }
                }
                
                var nm = $.inArray(match[2], Date.ABBR_MONTHNAMES);
                
                if (nm == -1) {
                    nm = $.inArray(match[2], Date.MONTHNAMES);
                }
            
                d.setFullYear(ny, nm, nd);
                d.setHours(0,0,0,0);
                return d;
            }
            
            else {
                return str;
            }
        }        
    ];
    
    if ($.jqplot.config.debug) {
        $.date = Date.create;
    }

    // Class: $.jqplot.DivTitleRenderer
    // The default title renderer for jqPlot.  This class has no options beyond the <Title> class. 
    $.jqplot.DivTitleRenderer = function() {
    };
    
    $.jqplot.DivTitleRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
    };
    
    $.jqplot.DivTitleRenderer.prototype.draw = function() {
        var r = this.renderer;
        if (!this.text) {
            this.show = false;
            this._elem = $('<div class="jqplot-title" style="height:0px;width:0px;"></div>');
        }
        else if (this.text) {
            var color;
            if (this.color) {
                color = this.color;
            }
            else if (this.textColor) {
                color = this.textColor;
            }
            // don't trust that a stylesheet is present, set the position.
            var styletext = 'position:absolute;top:0px;left:0px;';
            styletext += (this._plotWidth) ? 'width:'+this._plotWidth+'px;' : '';
            styletext += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            styletext += (this.textAlign) ? 'text-align:'+this.textAlign+';' : 'text-align:center;';
            styletext += (color) ? 'color:'+color+';' : '';
            styletext += (this.paddingBottom) ? 'padding-bottom:'+this.paddingBottom+';' : '';
            this._elem = $('<div class="jqplot-title" style="'+styletext+'">'+this.text+'</div>');
            if (this.fontFamily) {
                this._elem.css('font-family', this.fontFamily);
            }
        }
        
        return this._elem;
    };
    
    $.jqplot.DivTitleRenderer.prototype.pack = function() {
        // nothing to do here
    };
  
    // Class: $.jqplot.LineRenderer
    // The default line renderer for jqPlot, this class has no options beyond the <Series> class.
    // Draws series as a line.
    $.jqplot.LineRenderer = function(){
        this.shapeRenderer = new $.jqplot.ShapeRenderer();
        this.shadowRenderer = new $.jqplot.ShadowRenderer();
    };
    
    // called with scope of series.
    $.jqplot.LineRenderer.prototype.init = function(options, plot) {
        options = options || {};
        var lopts = {highlightMouseOver: options.highlightMouseOver, highlightMouseDown: options.highlightMouseDown, highlightColor: options.highlightColor};
        
        delete (options.highlightMouseOver);
        delete (options.highlightMouseDown);
        delete (options.highlightColor);
        
        $.extend(true, this.renderer, options);
        // set the shape renderer options
        var opts = {lineJoin:'round', lineCap:'round', fill:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.fillColor, lineWidth:this.lineWidth, closePath:this.fill};
        this.renderer.shapeRenderer.init(opts);
        // set the shadow renderer options
        // scale the shadowOffset to the width of the line.
        if (this.lineWidth > 2.5) {
            var shadow_offset = this.shadowOffset* (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6);
            // var shadow_offset = this.shadowOffset;
        }
        // for skinny lines, don't make such a big shadow.
        else {
            var shadow_offset = this.shadowOffset*Math.atan((this.lineWidth/2.5))/0.785398163;
        }
        var sopts = {lineJoin:'round', lineCap:'round', fill:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.lineWidth, closePath:this.fill};
        this.renderer.shadowRenderer.init(sopts);
        this._areaPoints = [];
        this._boundingBox = [[],[]];
        
        if (!this.isTrendline && this.fill) {
        
            // prop: highlightMouseOver
            // True to highlight area on a filled plot when moused over.
            // This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.
            this.highlightMouseOver = true;
            // prop: highlightMouseDown
            // True to highlight when a mouse button is pressed over an area on a filled plot.
            // This will be disabled if highlightMouseOver is true.
            this.highlightMouseDown = false;
            // prop: highlightColor
            // color to use when highlighting an area on a filled plot.
            this.highlightColor = null;
            // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
            if (lopts.highlightMouseDown && lopts.highlightMouseOver == null) {
                lopts.highlightMouseOver = false;
            }
        
            $.extend(true, this, {highlightMouseOver: lopts.highlightMouseOver, highlightMouseDown: lopts.highlightMouseDown, highlightColor: lopts.highlightColor});
            
            if (!this.highlightColor) {
                this.highlightColor = $.jqplot.computeHighlightColors(this.fillColor);
            }
            // turn off traditional highlighter
            if (this.highlighter) {
                this.highlighter.show = false;
            }
            plot.postInitHooks.addOnce(postInit);
            plot.postDrawHooks.addOnce(postPlotDraw);
            plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
            plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
            plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
            plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
            plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
        }

    };
    
    // Method: setGridData
    // converts the user data values to grid coordinates and stores them
    // in the gridData array.
    // Called with scope of a series.
    $.jqplot.LineRenderer.prototype.setGridData = function(plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var data = this._plotData;
        var pdata = this._prevPlotData;
        this.gridData = [];
        this._prevGridData = [];
        for (var i=0; i<this.data.length; i++) {
            // if not a line series or if no nulls in data, push the converted point onto the array.
            if (data[i][0] != null && data[i][1] != null) {
                this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]);
            }
            // else if there is a null, preserve it.
            else if (data[i][0] == null) {
                this.gridData.push([null, yp.call(this._yaxis, data[i][1])]);
            }
            else if (data[i][1] == null) {
                this.gridData.push([xp.call(this._xaxis, data[i][0]), null]);
            }
            // if not a line series or if no nulls in data, push the converted point onto the array.
            if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] != null) {
                this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), yp.call(this._yaxis, pdata[i][1])]);
            }
            // else if there is a null, preserve it.
            else if (pdata[i] != null && pdata[i][0] == null) {
                this._prevGridData.push([null, yp.call(this._yaxis, pdata[i][1])]);
            }  
            else if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] == null) {
                this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), null]);
            }
        }
    };
    
    // Method: makeGridData
    // converts any arbitrary data values to grid coordinates and
    // returns them.  This method exists so that plugins can use a series'
    // linerenderer to generate grid data points without overwriting the
    // grid data associated with that series.
    // Called with scope of a series.
    $.jqplot.LineRenderer.prototype.makeGridData = function(data, plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var gd = [];
        var pgd = [];
        for (var i=0; i<data.length; i++) {
            // if not a line series or if no nulls in data, push the converted point onto the array.
            if (data[i][0] != null && data[i][1] != null) {
                gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]);
            }
            // else if there is a null, preserve it.
            else if (data[i][0] == null) {
                gd.push([null, yp.call(this._yaxis, data[i][1])]);
            }
            else if (data[i][1] == null) {
                gd.push([xp.call(this._xaxis, data[i][0]), null]);
            }
        }
        return gd;
    };
    

    // called within scope of series.
    $.jqplot.LineRenderer.prototype.draw = function(ctx, gd, options) {
        var i;
        var opts = (options != undefined) ? options : {};
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke;
        var xmin, ymin, xmax, ymax;
        ctx.save();
        if (gd.length) {
            if (showLine) {
                // if we fill, we'll have to add points to close the curve.
                if (fill) {
                    if (this.fillToZero) {
                        // have to break line up into shapes at axis crossings
                        var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
                        var negativeColor = negativeColors.get(this.index);
                        if (! this.useNegativeColors) {
                            negativeColor = opts.fillStyle;
                        }
                        var isnegative = false;
                        var posfs = opts.fillStyle;
                    
                        // if stoking line as well as filling, get a copy of line data.
                        if (fillAndStroke) {
                            var fasgd = gd.slice(0);
                        }
                        // if not stacked, fill down to axis
                        if (this.index == 0 || !this._stack) {
                        
                            var tempgd = [];
                            this._areaPoints = [];
                            var pyzero = this._yaxis.series_u2p(this.fillToValue);
                            var pxzero = this._xaxis.series_u2p(this.fillToValue);
                            
                            if (this.fillAxis == 'y') {
                                tempgd.push([gd[0][0], pyzero]);
                                this._areaPoints.push([gd[0][0], pyzero]);
                                
                                for (var i=0; i<gd.length-1; i++) {
                                    tempgd.push(gd[i]);
                                    this._areaPoints.push(gd[i]);
                                    // do we have an axis crossing?
                                    if (this._plotData[i][1] * this._plotData[i+1][1] < 0) {
                                        if (this._plotData[i][1] < 0) {
                                            isnegative = true;
                                            opts.fillStyle = negativeColor;
                                        }
                                        else {
                                            isnegative = false;
                                            opts.fillStyle = posfs;
                                        }
                                        
                                        var xintercept = gd[i][0] + (gd[i+1][0] - gd[i][0]) * (pyzero-gd[i][1])/(gd[i+1][1] - gd[i][1]);
                                        tempgd.push([xintercept, pyzero]);
                                        this._areaPoints.push([xintercept, pyzero]);
                                        // now draw this shape and shadow.
                                        if (shadow) {
                                            this.renderer.shadowRenderer.draw(ctx, tempgd, opts);
                                        }
                                        this.renderer.shapeRenderer.draw(ctx, tempgd, opts);
                                        // now empty temp array and continue
                                        tempgd = [[xintercept, pyzero]];
                                        // this._areaPoints = [[xintercept, pyzero]];
                                    }   
                                }
                                if (this._plotData[gd.length-1][1] < 0) {
                                    isnegative = true;
                                    opts.fillStyle = negativeColor;
                                }
                                else {
                                    isnegative = false;
                                    opts.fillStyle = posfs;
                                }
                                tempgd.push(gd[gd.length-1]);
                                this._areaPoints.push(gd[gd.length-1]);
                                tempgd.push([gd[gd.length-1][0], pyzero]); 
                                this._areaPoints.push([gd[gd.length-1][0], pyzero]); 
                            }
                            // now draw this shape and shadow.
                            if (shadow) {
                                this.renderer.shadowRenderer.draw(ctx, tempgd, opts);
                            }
                            this.renderer.shapeRenderer.draw(ctx, tempgd, opts);
                            
                            
                            // var gridymin = this._yaxis.series_u2p(0);
                            // // IE doesn't return new length on unshift
                            // gd.unshift([gd[0][0], gridymin]);
                            // len = gd.length;
                            // gd.push([gd[len - 1][0], gridymin]);                   
                        }
                        // if stacked, fill to line below 
                        else {
                            var prev = this._prevGridData;
                            for (var i=prev.length; i>0; i--) {
                                gd.push(prev[i-1]);
                                // this._areaPoints.push(prev[i-1]);
                            }
                            if (shadow) {
                                this.renderer.shadowRenderer.draw(ctx, gd, opts);
                            }
                            this._areaPoints = gd;
                            this.renderer.shapeRenderer.draw(ctx, gd, opts);
                        }
                    }
                    /////////////////////////
                    // Not filled to zero
                    ////////////////////////
                    else {                    
                        // if stoking line as well as filling, get a copy of line data.
                        if (fillAndStroke) {
                            var fasgd = gd.slice(0);
                        }
                        // if not stacked, fill down to axis
                        if (this.index == 0 || !this._stack) {
                            // var gridymin = this._yaxis.series_u2p(this._yaxis.min) - this.gridBorderWidth / 2;
                            var gridymin = ctx.canvas.height;
                            // IE doesn't return new length on unshift
                            gd.unshift([gd[0][0], gridymin]);
                            len = gd.length;
                            gd.push([gd[len - 1][0], gridymin]);                   
                        }
                        // if stacked, fill to line below 
                        else {
                            var prev = this._prevGridData;
                            for (var i=prev.length; i>0; i--) {
                                gd.push(prev[i-1]);
                            }
                        }
                        this._areaPoints = gd;
                        
                        if (shadow) {
                            this.renderer.shadowRenderer.draw(ctx, gd, opts);
                        }
            
                        this.renderer.shapeRenderer.draw(ctx, gd, opts);                        
                    }
                    if (fillAndStroke) {
                        var fasopts = $.extend(true, {}, opts, {fill:false, closePath:false});
                        this.renderer.shapeRenderer.draw(ctx, fasgd, fasopts);
                        //////////
                        // TODO: figure out some way to do shadows nicely
                        // if (shadow) {
                        //     this.renderer.shadowRenderer.draw(ctx, fasgd, fasopts);
                        // }
                        // now draw the markers
                        if (this.markerRenderer.show) {
                            for (i=0; i<fasgd.length; i++) {
                                this.markerRenderer.draw(fasgd[i][0], fasgd[i][1], ctx, opts.markerOptions);
                            }
                        }
                    }
                }
                else {
                    if (shadow) {
                        this.renderer.shadowRenderer.draw(ctx, gd, opts);
                    }
    
                    this.renderer.shapeRenderer.draw(ctx, gd, opts);
                }
            }
            // calculate the bounding box
            var xmin = xmax = ymin = ymax = null;
            for (i=0; i<this._areaPoints.length; i++) {
                var p = this._areaPoints[i];
                if (xmin > p[0] || xmin == null) {
                    xmin = p[0];
                }
                if (ymax < p[1] || ymax == null) {
                    ymax = p[1];
                }
                if (xmax < p[0] || xmax == null) {
                    xmax = p[0];
                }
                if (ymin > p[1] || ymin == null) {
                    ymin = p[1];
                }
            }
            this._boundingBox = [[xmin, ymax], [xmax, ymin]];
        
            // now draw the markers
            if (this.markerRenderer.show && !fill) {
                for (i=0; i<gd.length; i++) {
                    if (gd[i][0] != null && gd[i][1] != null) {
                        this.markerRenderer.draw(gd[i][0], gd[i][1], ctx, opts.markerOptions);
                    }
                }
            }
        }
        
        ctx.restore();
    };  
    
    $.jqplot.LineRenderer.prototype.drawShadow = function(ctx, gd, options) {
        // This is a no-op, shadows drawn with lines.
    };
    
    // called with scope of plot.
    // make sure to not leave anything highlighted.
    function postInit(target, data, options) {
        for (i=0; i<this.series.length; i++) {
            if (this.series[i].renderer.constructor == $.jqplot.LineRenderer) {
                // don't allow mouseover and mousedown at same time.
                if (this.series[i].highlightMouseOver) {
                    this.series[i].highlightMouseDown = false;
                }
            }
        }
        this.target.bind('mouseout', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
    }  
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    function postPlotDraw() {
        this.plugins.lineRenderer = {highlightedSeriesIndex:null};
        this.plugins.lineRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
        
        this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-lineRenderer-highlight-canvas', this._plotDimensions));
        var hctx = this.plugins.lineRenderer.highlightCanvas.setContext();
    } 
    
    function highlight (plot, sidx, pidx, points) {
        var s = plot.series[sidx];
        var canvas = plot.plugins.lineRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        s._highlightedPoint = pidx;
        plot.plugins.lineRenderer.highlightedSeriesIndex = sidx;
        var opts = {fillStyle: s.highlightColor};
        s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
    }
    
    function unhighlight (plot) {
        var canvas = plot.plugins.lineRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        for (var i=0; i<plot.series.length; i++) {
            plot.series[i]._highlightedPoint = null;
        }
        plot.plugins.lineRenderer.highlightedSeriesIndex = null;
        plot.target.trigger('jqplotDataUnhighlight');
    }
    
    
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt1 = jQuery.Event('jqplotDataMouseOver');
            evt1.pageX = ev.pageX;
            evt1.pageY = ev.pageY;
            plot.target.trigger(evt1, ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
        var idx = plot.plugins.lineRenderer.highlightedSeriesIndex;
        if (idx != null && plot.series[idx].highlightMouseDown) {
            unhighlight(plot);
        }
    }
    
    function handleClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt = jQuery.Event('jqplotDataClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var idx = plot.plugins.lineRenderer.highlightedSeriesIndex;
            if (idx != null && plot.series[idx].highlightMouseDown) {
                unhighlight(plot);
            }
            var evt = jQuery.Event('jqplotDataRightClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    
    // class: $.jqplot.LinearAxisRenderer
    // The default jqPlot axis renderer, creating a numeric axis.
    // The renderer has no additional options beyond the <Axis> object.
    $.jqplot.LinearAxisRenderer = function() {
    };
    
    // called with scope of axis object.
    $.jqplot.LinearAxisRenderer.prototype.init = function(options){
        $.extend(true, this, options);
        var db = this._dataBounds;
        // Go through all the series attached to this axis and find
        // the min/max bounds for this axis.
        for (var i=0; i<this._series.length; i++) {
            var s = this._series[i];
            var d = s._plotData;
            
            for (var j=0; j<d.length; j++) { 
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) {
                        db.min = d[j][0];
                    }
                    if ((d[j][0] != null && d[j][0] > db.max) || db.max == null) {
                        db.max = d[j][0];
                    }
                }              
                else {
                    if ((d[j][1] != null && d[j][1] < db.min) || db.min == null) {
                        db.min = d[j][1];
                    }
                    if ((d[j][1] != null && d[j][1] > db.max) || db.max == null) {
                        db.max = d[j][1];
                    }
                }              
            }
        }
    };
    
    // called with scope of axis
    $.jqplot.LinearAxisRenderer.prototype.draw = function(ctx) {
        if (this.show) {
            // populate the axis label and value properties.
            // createTicks is a method on the renderer, but
            // call it within the scope of the axis.
            this.renderer.createTicks.call(this);
            // fill a div with axes labels in the right direction.
            // Need to pregenerate each axis to get it's bounds and
            // position it and the labels correctly on the plot.
            var dim=0;
            var temp;
            // Added for theming.
            if (this._elem) {
                this._elem.empty();
            }
            
            this._elem = $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');
            
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                this._elem.width(this._plotDimensions.width);
            }
            else {
                this._elem.height(this._plotDimensions.height);
            }
            
            // create a _label object.
            this.labelOptions.axis = this.name;
            this._label = new this.labelRenderer(this.labelOptions);
            if (this._label.show) {
                var elem = this._label.draw(ctx);
                elem.appendTo(this._elem);
            }
    
            var t = this._ticks;
            for (var i=0; i<t.length; i++) {
                var tick = t[i];
                if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
                    var elem = tick.draw(ctx);
                    elem.appendTo(this._elem);
                }
            }
        }
        return this._elem;
    };
    
    // called with scope of an axis
    $.jqplot.LinearAxisRenderer.prototype.reset = function() {
        this.min = this._min;
        this.max = this._max;
        this.tickInterval = this._tickInterval;
        this.numberTicks = this._numberTicks;
        // this._ticks = this.__ticks;
    };
    
    // called with scope of axis
    $.jqplot.LinearAxisRenderer.prototype.set = function() { 
        var dim = 0;
        var temp;
        var w = 0;
        var h = 0;
        var lshow = (this._label == null) ? false : this._label.show;
        if (this.show) {
            var t = this._ticks;
            for (var i=0; i<t.length; i++) {
                var tick = t[i];
                if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        temp = tick._elem.outerHeight(true);
                    }
                    else {
                        temp = tick._elem.outerWidth(true);
                    }
                    if (temp > dim) {
                        dim = temp;
                    }
                }
            }
            
            if (lshow) {
                w = this._label._elem.outerWidth(true);
                h = this._label._elem.outerHeight(true); 
            }
            if (this.name == 'xaxis') {
                dim = dim + h;
                this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
            }
            else if (this.name == 'x2axis') {
                dim = dim + h;
                this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
            }
            else if (this.name == 'yaxis') {
                dim = dim + w;
                this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
                if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
                    this._label._elem.css('width', w+'px');
                }
            }
            else {
                dim = dim + w;
                this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
                if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
                    this._label._elem.css('width', w+'px');
                }
            }
        }  
    };    
    
    // called with scope of axis
    $.jqplot.LinearAxisRenderer.prototype.createTicks = function() {
        // we're are operating on an axis here
        var ticks = this._ticks;
        var userTicks = this.ticks;
        var name = this.name;
        // databounds were set on axis initialization.
        var db = this._dataBounds;
        var dim, interval;
        var min, max;
        var pos1, pos2;
        var tt, i;
        // get a copy of user's settings for min/max.
        var userMin = this.min;
        var userMax = this.max;
        var userNT = this.numberTicks;
        var userTI = this.tickInterval;
        
        // if we already have ticks, use them.
        // ticks must be in order of increasing value.
        
        if (userTicks.length) {
            // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
            for (i=0; i<userTicks.length; i++){
                var ut = userTicks[i];
                var t = new this.tickRenderer(this.tickOptions);
                if (ut.constructor == Array) {
                    t.value = ut[0];
                    t.label = ut[1];
                    t.setTick(ut[0], this.name);
                    this._ticks.push(t);
                }
                
                else {
                    t.value = ut;
                    t.setTick(ut, this.name);
                    this._ticks.push(t);
                }
            }
            this.numberTicks = userTicks.length;
            this.min = this._ticks[0].value;
            this.max = this._ticks[this.numberTicks-1].value;
            this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
        }
        
        // we don't have any ticks yet, let's make some!
        else {
            if (name == 'xaxis' || name == 'x2axis') {
                dim = this._plotDimensions.width;
            }
            else {
                dim = this._plotDimensions.height;
            }
            
            // if min, max and number of ticks specified, user can't specify interval.
            if (!this.autoscale && this.min != null && this.max != null && this.numberTicks != null) {
                this.tickInterval = null;
            }
            
            // if max, min, and interval specified and interval won't fit, ignore interval.
            // if (this.min != null && this.max != null && this.tickInterval != null) {
            //     if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) {
            //         this.tickInterval = null;
            //     }
            // }
        
            min = ((this.min != null) ? this.min : db.min);
            max = ((this.max != null) ? this.max : db.max);
            
            // if min and max are same, space them out a bit
            if (min == max) {
                var adj = 0.05;
                if (min > 0) {
                    adj = Math.max(Math.log(min)/Math.LN10, 0.05);
                }
                min -= adj;
                max += adj;
            }

            var range = max - min;
            var rmin, rmax;
            var temp;
            
            // autoscale.  Can't autoscale if min or max is supplied.
            // Will use numberTicks and tickInterval if supplied.  Ticks
            // across multiple axes may not line up depending on how
            // bars are to be plotted.
            if (this.autoscale && this.min == null && this.max == null) {
                var rrange, ti, margin;
                var forceMinZero = false;
                var forceZeroLine = false;
                var intervals = {min:null, max:null, average:null, stddev:null};
                // if any series are bars, or if any are fill to zero, and if this
                // is the axis to fill toward, check to see if we can start axis at zero.
                for (var i=0; i<this._series.length; i++) {
                    var s = this._series[i];
                    var faname = (s.fillAxis == 'x') ? s._xaxis.name : s._yaxis.name;
                    // check to see if this is the fill axis
                    if (this.name == faname) {
                        var vals = s._plotValues[s.fillAxis];
                        var vmin = vals[0];
                        var vmax = vals[0];
                        for (var j=1; j<vals.length; j++) {
                            if (vals[j] < vmin) {
                                vmin = vals[j];
                            }
                            else if (vals[j] > vmax) {
                                vmax = vals[j];
                            }
                        }
                        var dp = (vmax - vmin) / vmax;
                        // is this sries a bar?
                        if (s.renderer.constructor == $.jqplot.BarRenderer) {
                            // if no negative values and could also check range.
                            if (vmin >= 0 && (s.fillToZero || dp > 0.1)) {
                                forceMinZero = true;
                            }
                            else {
                                forceMinZero = false;
                                if (s.fill && s.fillToZero && vmin < 0 && vmax > 0) {
                                    forceZeroLine = true;
                                }
                                else {
                                    forceZeroLine = false;
                                }
                            }
                        }
                        
                        // if not a bar and filling, use appropriate method.
                        else if (s.fill) {
                            if (vmin >= 0 && (s.fillToZero || dp > 0.1)) {
                                forceMinZero = true;
                            }
                            else if (vmin < 0 && vmax > 0 && s.fillToZero) {
                                forceMinZero = false;
                                forceZeroLine = true;
                            }
                            else {
                                forceMinZero = false;
                                forceZeroLine = false;
                            }
                        }
                        
                        // if not a bar and not filling, only change existing state
                        // if it doesn't make sense
                        else if (vmin < 0) {
                            forceMinZero = false;
                        }
                    }
                }
                
                // check if we need make axis min at 0.
                if (forceMinZero) {
                    // compute number of ticks
                    this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
                    this.min = 0;
                    userMin = 0;
                    // what order is this range?
                    // what tick interval does that give us?
                    ti = max/(this.numberTicks-1);
                    temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
                    if (ti/temp == parseInt(ti/temp, 10)) {
                        ti += temp;
                    }
                    this.tickInterval = Math.ceil(ti/temp) * temp;
                    this.max = this.tickInterval * (this.numberTicks - 1);
                }
                
                // check if we need to make sure there is a tick at 0.
                else if (forceZeroLine) {
                    // compute number of ticks
                    this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
                    var ntmin = Math.ceil(Math.abs(min)/range*(this.numberTicks-1));
                    var ntmax = this.numberTicks - 1  - ntmin;
                    ti = Math.max(Math.abs(min/ntmin), Math.abs(max/ntmax));
                    temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
                    this.tickInterval = Math.ceil(ti/temp) * temp;
                    this.max = this.tickInterval * ntmax;
                    this.min = -this.tickInterval * ntmin;                  
                }
                
                // if nothing else, do autoscaling which will try to line up ticks across axes.
                else {  
                    if (this.numberTicks == null){
                        if (this.tickInterval) {
                            this.numberTicks = 3 + Math.ceil(range / this.tickInterval);
                        }
                        else {
                            this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
                        }
                    }
            
                    if (this.tickInterval == null) {
                        // get a tick interval
                        ti = range/(this.numberTicks - 1);

                        if (ti < 1) {
                            temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
                        }
                        else {
                            temp = 1;
                        }
                        this.tickInterval = Math.ceil(ti*temp*this.pad)/temp;
                    }
                    else {
                        temp = 1 / this.tickInterval;
                    }
                    
                    // try to compute a nicer, more even tick interval
                    // temp = Math.pow(10, Math.floor(Math.log(ti)/Math.LN10));
                    // this.tickInterval = Math.ceil(ti/temp) * temp;
                    rrange = this.tickInterval * (this.numberTicks - 1);
                    margin = (rrange - range)/2;
       
                    if (this.min == null) {
                        this.min = Math.floor(temp*(min-margin))/temp;
                    }
                    if (this.max == null) {
                        this.max = this.min + rrange;
                    }
                }
            }
            
            // Use the default algorithm which pads each axis to make the chart
            // centered nicely on the grid.
            else {
                rmin = (this.min != null) ? this.min : min - range*(this.padMin - 1);
                rmax = (this.max != null) ? this.max : max + range*(this.padMax - 1);
                this.min = rmin;
                this.max = rmax;
                range = this.max - this.min;
    
                if (this.numberTicks == null){
                    // if tickInterval is specified by user, we will ignore computed maximum.
                    // max will be equal or greater to fit even # of ticks.
                    if (this.tickInterval != null) {
                        this.numberTicks = Math.ceil((this.max - this.min)/this.tickInterval)+1;
                        this.max = this.min + this.tickInterval*(this.numberTicks-1);
                    }
                    else if (dim > 100) {
                        this.numberTicks = parseInt(3+(dim-100)/75, 10);
                    }
                    else {
                        this.numberTicks = 2;
                    }
                }
            
                if (this.tickInterval == null) {
                    this.tickInterval = range / (this.numberTicks-1);
                }
            }
            
            if (this.renderer.constructor == $.jqplot.LinearAxisRenderer) {
                // fix for misleading tick display with small range and low precision.
                range = this.max - this.min;
                // figure out precision
                var temptick = new this.tickRenderer(this.tickOptions);
                // use the tick formatString or, the default.
                var fs = temptick.formatString || $.jqplot.config.defaultTickFormatString; 
                var fs = fs.match($.jqplot.sprintf.regex)[0];
                var precision = 0;
                if (fs) {
                    if (fs.search(/[fFeEgGpP]/) > -1) {
                        var m = fs.match(/\%\.(\d{0,})?[eEfFgGpP]/);
                        if (m) precision = parseInt(m[1], 10);
                        else precision = 6;
                    }
                    else if (fs.search(/[di]/) > -1) {
                        precision = 0;
                    }
                    // fact will be <= 1;
                    var fact = Math.pow(10, -precision);
                    if (this.tickInterval < fact) {
                        // need to correct underrange
                        if (userNT == null && userTI == null) {
                            this.tickInterval = fact;
                            if (userMax == null && userMin == null) {
                                // this.min = Math.floor((this._dataBounds.min - this.tickInterval)/fact) * fact;
                                this.min = Math.floor(this._dataBounds.min/fact) * fact;
                                if (this.min == this._dataBounds.min) {
                                    this.min = this._dataBounds.min - this.tickInterval;
                                }
                                // this.max = Math.ceil((this._dataBounds.max + this.tickInterval)/fact) * fact;
                                this.max = Math.ceil(this._dataBounds.max/fact) * fact;
                                if (this.max == this._dataBounds.max) {
                                    this.max = this._dataBounds.max + this.tickInterval;
                                }
                                var n = (this.max - this.min)/this.tickInterval;
                                n = n.toFixed(11);
                                n = Math.ceil(n);
                                this.numberTicks = n + 1;
                            }
                            else if (userMax == null) {
                                // add one tick for top of range.
                                var n = (this._dataBounds.max - this.min) / this.tickInterval;
                                n = n.toFixed(11);
                                this.numberTicks = Math.ceil(n) + 2;
                                this.max = this.min + this.tickInterval * (this.numberTicks-1);
                            }
                            else if (userMin == null) {
                                // add one tick for bottom of range.
                                var n = (this.max - this._dataBounds.min) / this.tickInterval;
                                n = n.toFixed(11);
                                this.numberTicks = Math.ceil(n) + 2;
                                this.min = this.max - this.tickInterval * (this.numberTicks-1);
                            }
                            else {
                                // calculate a number of ticks so max is within axis scale
                                this.numberTicks = Math.ceil((userMax - userMin)/this.tickInterval) + 1;
                                // if user's min and max don't fit evenly in ticks, adjust.
                                // This takes care of cases such as user min set to 0, max set to 3.5 but tick
                                // format string set to %d (integer ticks)
                                this.min =  Math.floor(userMin*Math.pow(10, precision))/Math.pow(10, precision);
                                this.max =  Math.ceil(userMax*Math.pow(10, precision))/Math.pow(10, precision);
                                // this.max = this.min + this.tickInterval*(this.numberTicks-1);
                                this.numberTicks = Math.ceil((this.max - this.min)/this.tickInterval) + 1;
                            }
                        }
                    }
                }
            }
            
            

            for (var i=0; i<this.numberTicks; i++){
                tt = this.min + i * this.tickInterval;
                var t = new this.tickRenderer(this.tickOptions);
                // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);

                t.setTick(tt, this.name);
                this._ticks.push(t);
            }
        }
    };
    
    // called with scope of axis
    $.jqplot.LinearAxisRenderer.prototype.pack = function(pos, offsets) {
        var ticks = this._ticks;
        var max = this.max;
        var min = this.min;
        var offmax = offsets.max;
        var offmin = offsets.min;
        var lshow = (this._label == null) ? false : this._label.show;
        
        for (var p in pos) {
            this._elem.css(p, pos[p]);
        }
        
        this._offsets = offsets;
        // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
        var pixellength = offmax - offmin;
        var unitlength = max - min;
        
        // point to unit and unit to point conversions references to Plot DOM element top left corner.
        this.p2u = function(p){
            return (p - offmin) * unitlength / pixellength + min;
        };
        
        this.u2p = function(u){
            return (u - min) * pixellength / unitlength + offmin;
        };
                
        if (this.name == 'xaxis' || this.name == 'x2axis'){
            this.series_u2p = function(u){
                return (u - min) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return p * unitlength / pixellength + min;
            };
        }
        
        else {
            this.series_u2p = function(u){
                return (u - max) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return p * unitlength / pixellength + max;
            };
        }
        
        if (this.show) {
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {
                        var shim;
                        
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            // will need to adjust auto positioning based on which axis this is.
                            var temp = (this.name == 'xaxis') ? 1 : -1;
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                    if (temp * t.angle < 0) {
                                        shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    }
                                    // position at start
                                    else {
                                        shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'end':
                                    shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                case 'start':
                                    shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    break;
                                case 'middle':
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                default:
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getWidth()/2;
                        }
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('left', val);
                        t.pack();
                    }
                }
                if (lshow) {
                    var w = this._label._elem.outerWidth(true);
                    this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
                    if (this.name == 'xaxis') {
                        this._label._elem.css('bottom', '0px');
                    }
                    else {
                        this._label._elem.css('top', '0px');
                    }
                    this._label.pack();
                }
            }
            else {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {                        
                        var shim;
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            // will need to adjust auto positioning based on which axis this is.
                            var temp = (this.name == 'yaxis') ? 1 : -1;
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                case 'end':
                                    if (temp * t.angle < 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'start':
                                    if (t.angle > 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'middle':
                                    // if (t.angle > 0) {
                                    //     shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    // }
                                    // else {
                                    //     shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    // }
                                    shim = -t.getHeight()/2;
                                    break;
                                default:
                                    shim = -t.getHeight()/2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getHeight()/2;
                        }
                        
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('top', val);
                        t.pack();
                    }
                }
                if (lshow) {
                    var h = this._label._elem.outerHeight(true);
                    this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
                    if (this.name == 'yaxis') {
                        this._label._elem.css('left', '0px');
                    }
                    else {
                        this._label._elem.css('right', '0px');
                    }   
                    this._label.pack();
                }
            }
        }
    };


    // class: $.jqplot.MarkerRenderer
    // The default jqPlot marker renderer, rendering the points on the line.
    $.jqplot.MarkerRenderer = function(options){
        // Group: Properties
        
        // prop: show
        // wether or not to show the marker.
        this.show = true;
        // prop: style
        // One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
        this.style = 'filledCircle';
        // prop: lineWidth
        // size of the line for non-filled markers.
        this.lineWidth = 2;
        // prop: size
        // Size of the marker (diameter or circle, length of edge of square, etc.)
        this.size = 9.0;
        // prop: color
        // color of marker.  Will be set to color of series by default on init.
        this.color = '#666666';
        // prop: shadow
        // wether or not to draw a shadow on the line
        this.shadow = true;
        // prop: shadowAngle
        // Shadow angle in degrees
        this.shadowAngle = 45;
        // prop: shadowOffset
        // Shadow offset from line in pixels
        this.shadowOffset = 1;
        // prop: shadowDepth
        // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
        this.shadowDepth = 3;
        // prop: shadowAlpha
        // Alpha channel transparency of shadow.  0 = transparent.
        this.shadowAlpha = '0.07';
        // prop: shadowRenderer
        // Renderer that will draws the shadows on the marker.
        this.shadowRenderer = new $.jqplot.ShadowRenderer();
        // prop: shapeRenderer
        // Renderer that will draw the marker.
        this.shapeRenderer = new $.jqplot.ShapeRenderer();
        
        $.extend(true, this, options);
    };
    
    $.jqplot.MarkerRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
        var sdopt = {angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, lineWidth:this.lineWidth, depth:this.shadowDepth, closePath:true};
        if (this.style.indexOf('filled') != -1) {
            sdopt.fill = true;
        }
        if (this.style.indexOf('ircle') != -1) {
            sdopt.isarc = true;
            sdopt.closePath = false;
        }
        this.shadowRenderer.init(sdopt);
        
        var shopt = {fill:false, isarc:false, strokeStyle:this.color, fillStyle:this.color, lineWidth:this.lineWidth, closePath:true};
        if (this.style.indexOf('filled') != -1) {
            shopt.fill = true;
        }
        if (this.style.indexOf('ircle') != -1) {
            shopt.isarc = true;
            shopt.closePath = false;
        }
        this.shapeRenderer.init(shopt);
    };
    
    $.jqplot.MarkerRenderer.prototype.drawDiamond = function(x, y, ctx, fill, options) {
        var stretch = 1.2;
        var dx = this.size/2/stretch;
        var dy = this.size/2*stretch;
        var points = [[x-dx, y], [x, y+dy], [x+dx, y], [x, y-dy]];
        if (this.shadow) {
            this.shadowRenderer.draw(ctx, points);
        }
        this.shapeRenderer.draw(ctx, points, options);

        // ctx.restore();
    };
    
    $.jqplot.MarkerRenderer.prototype.drawPlus = function(x, y, ctx, fill, options) {
        var stretch = 1.0;
        var dx = this.size/2*stretch;
        var dy = this.size/2*stretch;
        var points1 = [[x, y-dy], [x, y+dy]];
        var points2 = [[x+dx, y], [x-dx, y]];
        var opts = $.extend(true, {}, this.options, {closePath:false});
        if (this.shadow) {
            this.shadowRenderer.draw(ctx, points1, {closePath:false});
            this.shadowRenderer.draw(ctx, points2, {closePath:false});
        }
        this.shapeRenderer.draw(ctx, points1, opts);
        this.shapeRenderer.draw(ctx, points2, opts);

        // ctx.restore();
    };
    
    $.jqplot.MarkerRenderer.prototype.drawX = function(x, y, ctx, fill, options) {
        var stretch = 1.0;
        var dx = this.size/2*stretch;
        var dy = this.size/2*stretch;
        var opts = $.extend(true, {}, this.options, {closePath:false});
        var points1 = [[x-dx, y-dy], [x+dx, y+dy]];
        var points2 = [[x-dx, y+dy], [x+dx, y-dy]];
        if (this.shadow) {
            this.shadowRenderer.draw(ctx, points1, {closePath:false});
            this.shadowRenderer.draw(ctx, points2, {closePath:false});
        }
        this.shapeRenderer.draw(ctx, points1, opts);
        this.shapeRenderer.draw(ctx, points2, opts);

        // ctx.restore();
    };
    
    $.jqplot.MarkerRenderer.prototype.drawDash = function(x, y, ctx, fill, options) {
        var stretch = 1.0;
        var dx = this.size/2*stretch;
        var dy = this.size/2*stretch;
        var points = [[x-dx, y], [x+dx, y]];
        if (this.shadow) {
            this.shadowRenderer.draw(ctx, points);
        }
        this.shapeRenderer.draw(ctx, points, options);

        // ctx.restore();
    };
    
    $.jqplot.MarkerRenderer.prototype.drawSquare = function(x, y, ctx, fill, options) {
        var stretch = 1.0;
        var dx = this.size/2/stretch;
        var dy = this.size/2*stretch;
        var points = [[x-dx, y-dy], [x-dx, y+dy], [x+dx, y+dy], [x+dx, y-dy]];
        if (this.shadow) {
            this.shadowRenderer.draw(ctx, points);
        }
        this.shapeRenderer.draw(ctx, points, options);

        // ctx.restore();
    };
    
    $.jqplot.MarkerRenderer.prototype.drawCircle = function(x, y, ctx, fill, options) {
        var radius = this.size/2;
        var end = 2*Math.PI;
        var points = [x, y, radius, 0, end, true];
        if (this.shadow) {
            this.shadowRenderer.draw(ctx, points);
        }
        this.shapeRenderer.draw(ctx, points, options);
        
        // ctx.restore();
    };
    
    $.jqplot.MarkerRenderer.prototype.draw = function(x, y, ctx, options) {
        options = options || {};
        // hack here b/c shape renderer uses canvas based color style options
        // and marker uses css style names.
        if (options.show == null || options.show != false) {
            if (options.color && !options.fillStyle) {
                options.fillStyle = options.color;
            }
            if (options.color && !options.strokeStyle) {
                options.strokeStyle = options.color;
            }
            switch (this.style) {
                case 'diamond':
                    this.drawDiamond(x,y,ctx, false, options);
                    break;
                case 'filledDiamond':
                    this.drawDiamond(x,y,ctx, true, options);
                    break;
                case 'circle':
                    this.drawCircle(x,y,ctx, false, options);
                    break;
                case 'filledCircle':
                    this.drawCircle(x,y,ctx, true, options);
                    break;
                case 'square':
                    this.drawSquare(x,y,ctx, false, options);
                    break;
                case 'filledSquare':
                    this.drawSquare(x,y,ctx, true, options);
                    break;
                case 'x':
                    this.drawX(x,y,ctx, true, options);
                    break;
                case 'plus':
                    this.drawPlus(x,y,ctx, true, options);
                    break;
                case 'dash':
                    this.drawDash(x,y,ctx, true, options);
                    break;
                default:
                    this.drawDiamond(x,y,ctx, false, options);
                    break;
            }
        }
    };
    
    // class: $.jqplot.shadowRenderer
    // The default jqPlot shadow renderer, rendering shadows behind shapes.
    $.jqplot.ShadowRenderer = function(options){ 
        // Group: Properties
        
        // prop: angle
        // Angle of the shadow in degrees.  Measured counter-clockwise from the x axis.
        this.angle = 45;
        // prop: offset
        // Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
        this.offset = 1;
        // prop: alpha
        // alpha transparency of shadow stroke.
        this.alpha = 0.07;
        // prop: lineWidth
        // width of the shadow line stroke.
        this.lineWidth = 1.5;
        // prop: lineJoin
        // How line segments of the shadow are joined.
        this.lineJoin = 'miter';
        // prop: lineCap
        // how ends of the shadow line are rendered.
        this.lineCap = 'round';
        // prop; closePath
        // whether line path segment is closed upon itself.
        this.closePath = false;
        // prop: fill
        // whether to fill the shape.
        this.fill = false;
        // prop: depth
        // how many times the shadow is stroked.  Each stroke will be offset by offset at angle degrees.
        this.depth = 3;
        this.strokeStyle = 'rgba(0,0,0,0.1)';
        // prop: isarc
        // wether the shadow is an arc or not.
        this.isarc = false;
        
        $.extend(true, this, options);
    };
    
    $.jqplot.ShadowRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
    };
    
    // function: draw
    // draws an transparent black (i.e. gray) shadow.
    //
    // ctx - canvas drawing context
    // points - array of points or [x, y, radius, start angle (rad), end angle (rad)]
    $.jqplot.ShadowRenderer.prototype.draw = function(ctx, points, options) {
        ctx.save();
        var opts = (options != null) ? options : {};
        var fill = (opts.fill != null) ? opts.fill : this.fill;
        var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
        var offset = (opts.offset != null) ? opts.offset : this.offset;
        var alpha = (opts.alpha != null) ? opts.alpha : this.alpha;
        var depth = (opts.depth != null) ? opts.depth : this.depth;
        var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
        ctx.lineWidth = (opts.lineWidth != null) ? opts.lineWidth : this.lineWidth;
        ctx.lineJoin = (opts.lineJoin != null) ? opts.lineJoin : this.lineJoin;
        ctx.lineCap = (opts.lineCap != null) ? opts.lineCap : this.lineCap;
        ctx.strokeStyle = opts.strokeStyle || this.strokeStyle || 'rgba(0,0,0,'+alpha+')';
        ctx.fillStyle = opts.fillStyle || this.fillStyle || 'rgba(0,0,0,'+alpha+')';
        for (var j=0; j<depth; j++) {
            ctx.translate(Math.cos(this.angle*Math.PI/180)*offset, Math.sin(this.angle*Math.PI/180)*offset);
            ctx.beginPath();
            if (isarc) {
                ctx.arc(points[0], points[1], points[2], points[3], points[4], true);                
            }
            else {
                var move = true;
                for (var i=0; i<points.length; i++) {
                    // skip to the first non-null point and move to it.
                    if (points[i][0] != null && points[i][1] != null) {
                        if (move) {
                            ctx.moveTo(points[i][0], points[i][1]);
                            move = false;
                        }
                        else {
                            ctx.lineTo(points[i][0], points[i][1]);
                        }
                    }
                    else {
                        move = true;
                    }
                }
                
            }
            if (closePath) {
                ctx.closePath();
            }
            if (fill) {
                ctx.fill();
            }
            else {
                ctx.stroke();
            }
        }
        ctx.restore();
    };
    
    // class: $.jqplot.shapeRenderer
    // The default jqPlot shape renderer.  Given a set of points will
    // plot them and either stroke a line (fill = false) or fill them (fill = true).
    // If a filled shape is desired, closePath = true must also be set to close
    // the shape.
    $.jqplot.ShapeRenderer = function(options){
        
        this.lineWidth = 1.5;
        // prop: lineJoin
        // How line segments of the shadow are joined.
        this.lineJoin = 'miter';
        // prop: lineCap
        // how ends of the shadow line are rendered.
        this.lineCap = 'round';
        // prop; closePath
        // whether line path segment is closed upon itself.
        this.closePath = false;
        // prop: fill
        // whether to fill the shape.
        this.fill = false;
        // prop: isarc
        // wether the shadow is an arc or not.
        this.isarc = false;
        // prop: fillRect
        // true to draw shape as a filled rectangle.
        this.fillRect = false;
        // prop: strokeRect
        // true to draw shape as a stroked rectangle.
        this.strokeRect = false;
        // prop: clearRect
        // true to cear a rectangle.
        this.clearRect = false;
        // prop: strokeStyle
        // css color spec for the stoke style
        this.strokeStyle = '#999999';
        // prop: fillStyle
        // css color spec for the fill style.
        this.fillStyle = '#999999'; 
        
        $.extend(true, this, options);
    };
    
    $.jqplot.ShapeRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
    };
    
    // function: draw
    // draws the shape.
    //
    // ctx - canvas drawing context
    // points - array of points for shapes or 
    // [x, y, width, height] for rectangles or
    // [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs.
    $.jqplot.ShapeRenderer.prototype.draw = function(ctx, points, options) {
        ctx.save();
        var opts = (options != null) ? options : {};
        var fill = (opts.fill != null) ? opts.fill : this.fill;
        var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
        var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
        var strokeRect = (opts.strokeRect != null) ? opts.strokeRect : this.strokeRect;
        var clearRect = (opts.clearRect != null) ? opts.clearRect : this.clearRect;
        var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
        ctx.lineWidth = opts.lineWidth || this.lineWidth;
        ctx.lineJoin = opts.lineJoing || this.lineJoin;
        ctx.lineCap = opts.lineCap || this.lineCap;
        ctx.strokeStyle = (opts.strokeStyle || opts.color) || this.strokeStyle;
        ctx.fillStyle = opts.fillStyle || this.fillStyle;
        ctx.beginPath();
        if (isarc) {
            ctx.arc(points[0], points[1], points[2], points[3], points[4], true);   
            if (closePath) {
                ctx.closePath();
            }
            if (fill) {
                ctx.fill();
            }
            else {
                ctx.stroke();
            }
            ctx.restore();
            return;
        }
        else if (clearRect) {
            ctx.clearRect(points[0], points[1], points[2], points[3]);
            ctx.restore();
            return;
        }
        else if (fillRect || strokeRect) {
            if (fillRect) {
                ctx.fillRect(points[0], points[1], points[2], points[3]);
            }
            if (strokeRect) {
                ctx.strokeRect(points[0], points[1], points[2], points[3]);
                ctx.restore();
                return;
            }
        }
        else {
            var move = true;
            for (var i=0; i<points.length; i++) {
                // skip to the first non-null point and move to it.
                if (points[i][0] != null && points[i][1] != null) {
                    if (move) {
                        ctx.moveTo(points[i][0], points[i][1]);
                        move = false;
                    }
                    else {
                        ctx.lineTo(points[i][0], points[i][1]);
                    }
                }
                else {
                    move = true;
                }
            }
            if (closePath) {
                ctx.closePath();
            }
            if (fill) {
                ctx.fill();
            }
            else {
                ctx.stroke();
            }
        }
        ctx.restore();
    };
    
    // class $.jqplot.TableLegendRenderer
    // The default legend renderer for jqPlot.
    $.jqplot.TableLegendRenderer = function(){
        //
    };
    
    $.jqplot.TableLegendRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
    };
        
    $.jqplot.TableLegendRenderer.prototype.addrow = function (label, color, pad, reverse) {
        var rs = (pad) ? this.rowSpacing : '0';
        if (reverse){
            var tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
        }
        else{
            var tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
        }
        if (this.showSwatches) {
            $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
            '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+
            '</div></td>').appendTo(tr);
        }
        if (this.showLabels) {
            var elem = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
            elem.appendTo(tr);
            if (this.escapeHtml) {
                elem.text(label);
            }
            else {
                elem.html(label);
            }
        }
    };
    
    // called with scope of legend
    $.jqplot.TableLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            // make a table.  one line label per row.
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
            ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
            ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
            ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
        
            var pad = false, 
                reverse = false;
            for (var i = 0; i< series.length; i++) {
                s = series[i];
                if (s._stack || s.renderer.constructor == $.jqplot.BezierCurveRenderer){
                    reverse = true;
                }
                if (s.show && s.showLabel) {
                    var lt = this.labels[i] || s.label.toString();
                    if (lt) {
                        var color = s.color;
                        if (reverse && i < series.length - 1){
                            pad = true;
                        }
                        else if (reverse && i == series.length - 1){
                            pad = false;
                        }
                        this.renderer.addrow.call(this, lt, color, pad, reverse);
                        pad = true;
                    }
                    // let plugins add more rows to legend.  Used by trend line plugin.
                    for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) {
                        var item = $.jqplot.addLegendRowHooks[j].call(this, s);
                        if (item) {
                            this.renderer.addrow.call(this, item.label, item.color, pad);
                            pad = true;
                        } 
                    }
                }
            }
        }
        return this._elem;
    };
    
    $.jqplot.TableLegendRenderer.prototype.pack = function(offsets) {
        if (this.show) {       
            if (this.placement == 'insideGrid') {
                switch (this.location) {
                    case 'nw':
                        var a = offsets.left;
                        var b = offsets.top;
                        this._elem.css('left', a);
                        this._elem.css('top', b);
                        break;
                    case 'n':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = offsets.top;
                        this._elem.css('left', a);
                        this._elem.css('top', b);
                        break;
                    case 'ne':
                        var a = offsets.right;
                        var b = offsets.top;
                        this._elem.css({right:a, top:b});
                        break;
                    case 'e':
                        var a = offsets.right;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({right:a, top:b});
                        break;
                    case 'se':
                        var a = offsets.right;
                        var b = offsets.bottom;
                        this._elem.css({right:a, bottom:b});
                        break;
                    case 's':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = offsets.bottom;
                        this._elem.css({left:a, bottom:b});
                        break;
                    case 'sw':
                        var a = offsets.left;
                        var b = offsets.bottom;
                        this._elem.css({left:a, bottom:b});
                        break;
                    case 'w':
                        var a = offsets.left;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({left:a, top:b});
                        break;
                    default:  // same as 'se'
                        var a = offsets.right;
                        var b = offsets.bottom;
                        this._elem.css({right:a, bottom:b});
                        break;
                }
                
            }
            else if (this.placement == 'outside'){
                switch (this.location) {
                    case 'nw':
                        var a = this._plotDimensions.width - offsets.left;
                        var b = offsets.top;
                        this._elem.css('right', a);
                        this._elem.css('top', b);
                        break;
                    case 'n':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = this._plotDimensions.height - offsets.top;
                        this._elem.css('left', a);
                        this._elem.css('bottom', b);
                        break;
                    case 'ne':
                        var a = this._plotDimensions.width - offsets.right;
                        var b = offsets.top;
                        this._elem.css({left:a, top:b});
                        break;
                    case 'e':
                        var a = this._plotDimensions.width - offsets.right;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({left:a, top:b});
                        break;
                    case 'se':
                        var a = this._plotDimensions.width - offsets.right;
                        var b = offsets.bottom;
                        this._elem.css({left:a, bottom:b});
                        break;
                    case 's':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = this._plotDimensions.height - offsets.bottom;
                        this._elem.css({left:a, top:b});
                        break;
                    case 'sw':
                        var a = this._plotDimensions.width - offsets.left;
                        var b = offsets.bottom;
                        this._elem.css({right:a, bottom:b});
                        break;
                    case 'w':
                        var a = this._plotDimensions.width - offsets.left;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({right:a, top:b});
                        break;
                    default:  // same as 'se'
                        var a = offsets.right;
                        var b = offsets.bottom;
                        this._elem.css({right:a, bottom:b});
                        break;
                }
            }
            else {
                switch (this.location) {
                    case 'nw':
                        this._elem.css({left:0, top:offsets.top});
                        break;
                    case 'n':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        this._elem.css({left: a, top:offsets.top});
                        break;
                    case 'ne':
                        this._elem.css({right:0, top:offsets.top});
                        break;
                    case 'e':
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({right:offsets.right, top:b});
                        break;
                    case 'se':
                        this._elem.css({right:offsets.right, bottom:offsets.bottom});
                        break;
                    case 's':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        this._elem.css({left: a, bottom:offsets.bottom});
                        break;
                    case 'sw':
                        this._elem.css({left:offsets.left, bottom:offsets.bottom});
                        break;
                    case 'w':
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({left:offsets.left, top:b});
                        break;
                    default:  // same as 'se'
                        this._elem.css({right:offsets.right, bottom:offsets.bottom});
                        break;
                }
            }
        } 
    };

    /**
     * Class: $.jqplot.ThemeEngine
     * Theme Engine provides a programatic way to change some of the  more
     * common jqplot styling options such as fonts, colors and grid options.
     * A theme engine instance is created with each plot.  The theme engine
     * manages a collection of themes which can be modified, added to, or 
     * applied to the plot.
     * 
     * The themeEngine class is not instantiated directly.
     * When a plot is initialized, the current plot options are scanned
     * an a default theme named "Default" is created.  This theme is
     * used as the basis for other themes added to the theme engine and
     * is always available.
     * 
     * A theme is a simple javascript object with styling parameters for
     * various entities of the plot.  A theme has the form:
     * 
     * 
     * > {
     * >     _name:f "Default",
     * >     target: {
     * >         backgroundColor: "transparent"
     * >     },
     * >     legend: {
     * >         textColor: null,
     * >         fontFamily: null,
     * >         fontSize: null,
     * >         border: null,
     * >         background: null
     * >     },
     * >     title: {
     * >         textColor: "rgb(102, 102, 102)",
     * >         fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
     * >         fontSize: "19.2px",
     * >         textAlign: "center"
     * >     },
     * >     seriesStyles: {},
     * >     series: [{
     * >         color: "#4bb2c5",
     * >         lineWidth: 2.5,
     * >         shadow: true,
     * >         fillColor: "#4bb2c5",
     * >         showMarker: true,
     * >         markerOptions: {
     * >             color: "#4bb2c5",
     * >             show: true,
     * >             style: 'filledCircle',
     * >             lineWidth: 1.5,
     * >             size: 4,
     * >             shadow: true
     * >         }
     * >     }],
     * >     grid: {
     * >         drawGridlines: true,
     * >         gridLineColor: "#cccccc",
     * >         gridLineWidth: 1,
     * >         backgroundColor: "#fffdf6",
     * >         borderColor: "#999999",
     * >         borderWidth: 2,
     * >         shadow: true
     * >     },
     * >     axesStyles: {
     * >         label: {},
     * >         ticks: {}
     * >     },
     * >     axes: {
     * >         xaxis: {
     * >             borderColor: "#999999",
     * >             borderWidth: 2,
     * >             ticks: {
     * >                 show: true,
     * >                 showGridline: true,
     * >                 showLabel: true,
     * >                 showMark: true,
     * >                 size: 4,
     * >                 textColor: "",
     * >                 whiteSpace: "nowrap",
     * >                 fontSize: "12px",
     * >                 fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
     * >             },
     * >             label: {
     * >                 textColor: "rgb(102, 102, 102)",
     * >                 whiteSpace: "normal",
     * >                 fontSize: "14.6667px",
     * >                 fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif",
     * >                 fontWeight: "400"
     * >             }
     * >         },
     * >         yaxis: {
     * >             borderColor: "#999999",
     * >             borderWidth: 2,
     * >             ticks: {
     * >                 show: true,
     * >                 showGridline: true,
     * >                 showLabel: true,
     * >                 showMark: true,
     * >                 size: 4,
     * >                 textColor: "",
     * >                 whiteSpace: "nowrap",
     * >                 fontSize: "12px",
     * >                 fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif"
     * >             },
     * >             label: {
     * >                 textColor: null,
     * >                 whiteSpace: null,
     * >                 fontSize: null,
     * >                 fontFamily: null,
     * >                 fontWeight: null
     * >             }
     * >         },
     * >         x2axis: {...
     * >         },
     * >         ...
     * >         y9axis: {...
     * >         }
     * >     }
     * > }
     * 
     * "seriesStyles" is a style object that will be applied to all series in the plot.
     * It will forcibly override any styles applied on the individual series.  "axesStyles" is
     * a style object that will be applied to all axes in the plot.  It will also forcibly
     * override any styles on the individual axes.
     * 
     * The example shown above has series options for a line series.  Options for other
     * series types are shown below:
     * 
     * Bar Series:
     * 
     * > {
     * >     color: "#4bb2c5",
     * >     seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
     * >     lineWidth: 2.5,
     * >     shadow: true,
     * >     barPadding: 2,
     * >     barMargin: 10,
     * >     barWidth: 15.09375,
     * >     highlightColors: ["rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)"]
     * > }
     * 
     * Pie Series:
     * 
     * > {
     * >     seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
     * >     padding: 20,
     * >     sliceMargin: 0,
     * >     fill: true,
     * >     shadow: true,
     * >     startAngle: 0,
     * >     lineWidth: 2.5,
     * >     highlightColors: ["rgb(129,201,214)", "rgb(240,189,104)", "rgb(214,202,165)", "rgb(137,180,158)", "rgb(168,180,137)", "rgb(180,174,89)", "rgb(180,113,161)", "rgb(129,141,236)", "rgb(227,205,120)", "rgb(255,138,76)", "rgb(76,169,219)", "rgb(215,126,190)", "rgb(220,232,135)", "rgb(200,167,96)", "rgb(103,202,235)", "rgb(208,154,215)"]
     * > }
     * 
     * Funnel Series:
     * 
     * > {
     * >     color: "#4bb2c5",
     * >     lineWidth: 2,
     * >     shadow: true,
     * >     padding: {
     * >         top: 20,
     * >         right: 20,
     * >         bottom: 20,
     * >         left: 20
     * >     },
     * >     sectionMargin: 6,
     * >     seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
     * >     highlightColors: ["rgb(147,208,220)", "rgb(242,199,126)", "rgb(220,210,178)", "rgb(154,191,172)", "rgb(180,191,154)", "rgb(191,186,112)", "rgb(191,133,174)", "rgb(147,157,238)", "rgb(231,212,139)", "rgb(255,154,102)", "rgb(102,181,224)", "rgb(221,144,199)", "rgb(225,235,152)", "rgb(200,167,96)", "rgb(124,210,238)", "rgb(215,169,221)"]
     * > }
     * 
     */
    $.jqplot.ThemeEngine = function(){
        // Group: Properties
        //
        // prop: themes
        // hash of themes managed by the theme engine.  
        // Indexed by theme name.
        this.themes = {};
        // prop: activeTheme
        // Pointer to currently active theme
        this.activeTheme=null;
        
    };
    
    // called with scope of plot
    $.jqplot.ThemeEngine.prototype.init = function() {
        // get the Default theme from the current plot settings.
        var th = new $.jqplot.Theme({_name:'Default'});
        var n, i;
        
        for (n in th.target) {
            if (n == "textColor") {
                th.target[n] = this.target.css('color');
            }
            else {
                th.target[n] = this.target.css(n);
            }
        }
        
        if (this.title.show && this.title._elem) {
            for (n in th.title) {
                if (n == "textColor") {
                    th.title[n] = this.title._elem.css('color');
                }
                else {
                    th.title[n] = this.title._elem.css(n);
                }
            }
        }
        
        for (n in th.grid) {
            th.grid[n] = this.grid[n];
        }
        if (th.grid.backgroundColor == null && this.grid.background != null) {
            th.grid.backgroundColor = this.grid.background;
        }
        if (this.legend.show && this.legend._elem) {
            for (n in th.legend) {
                if (n == 'textColor') {
                    th.legend[n] = this.legend._elem.css('color');
                }
                else {
                    th.legend[n] = this.legend._elem.css(n);
                }
            }
        }
        var s;
        
        for (i=0; i<this.series.length; i++) {
            s = this.series[i];
            if (s.renderer.constructor == $.jqplot.LineRenderer) {
                th.series.push(new LineSeriesProperties());
            }
            else if (s.renderer.constructor == $.jqplot.BarRenderer) {
                th.series.push(new BarSeriesProperties());
            }
            else if (s.renderer.constructor == $.jqplot.PieRenderer) {
                th.series.push(new PieSeriesProperties());
            }
            else if (s.renderer.constructor == $.jqplot.DonutRenderer) {
                th.series.push(new DonutSeriesProperties());
            }
            else if (s.renderer.constructor == $.jqplot.FunnelRenderer) {
                th.series.push(new FunnelSeriesProperties());
            }
            else if (s.renderer.constructor == $.jqplot.MeterGaugeRenderer) {
                th.series.push(new MeterSeriesProperties());
            }
            else {
                th.series.push({});
            }
            for (n in th.series[i]) {
                th.series[i][n] = s[n];
            }
        }
        var a, ax;
        for (n in this.axes) {
            ax = this.axes[n];
            a = th.axes[n] = new AxisProperties();
            a.borderColor = ax.borderColor;
            a.borderWidth = ax.borderWidth;
            if (ax._ticks && ax._ticks[0]) {
                for (nn in a.ticks) {
                    if (ax._ticks[0].hasOwnProperty(nn)) {
                        a.ticks[nn] = ax._ticks[0][nn];
                    }
                    else if (ax._ticks[0]._elem){
                        a.ticks[nn] = ax._ticks[0]._elem.css(nn);
                    }
                }
            }
            if (ax._label && ax._label.show) {
                for (nn in a.label) {
                    // a.label[nn] = ax._label._elem.css(nn);
                    if (ax._label[nn]) {
                        a.label[nn] = ax._label[nn];
                    }
                    else if (ax._label._elem){
                        if (nn == 'textColor') {
                            a.label[nn] = ax._label._elem.css('color');
                        }
                        else {
                            a.label[nn] = ax._label._elem.css(nn);
                        }
                    }
                }
            }
        }
        this.themeEngine._add(th);
        this.themeEngine.activeTheme  = this.themeEngine.themes[th._name];
    };
    /**
     * Group: methods
     * 
     * method: get
     * 
     * Get and return the named theme or the active theme if no name given.
     * 
     * parameter:
     * 
     * name - name of theme to get.
     * 
     * returns:
     * 
     * Theme instance of given name.
     */   
    $.jqplot.ThemeEngine.prototype.get = function(name) {
        if (!name) {
            // return the active theme
            return this.activeTheme;
        }
        else {
            return this.themes[name];
        }
    };
    
    function numericalOrder(a,b) { return a-b; }
    
    /**
     * method: getThemeNames
     * 
     * Return the list of theme names in this manager in alpha-numerical order.
     * 
     * parameter:
     * 
     * None
     * 
     * returns:
     * 
     * A the list of theme names in this manager in alpha-numerical order.
     */       
    $.jqplot.ThemeEngine.prototype.getThemeNames = function() {
        var tn = [];
        for (var n in this.themes) {
            tn.push(n);
        }
        return tn.sort(numericalOrder);
    };

    /**
     * method: getThemes
     * 
     * Return a list of themes in alpha-numerical order by name.
     * 
     * parameter:
     * 
     * None
     * 
     * returns:
     * 
     * A list of themes in alpha-numerical order by name.
     */ 
    $.jqplot.ThemeEngine.prototype.getThemes = function() {
        var tn = [];
        var themes = [];
        for (var n in this.themes) {
            tn.push(n);
        }
        tn.sort(numericalOrder);
        for (var i=0; i<tn.length; i++) {
            themes.push(this.themes[tn[i]]);
        }
        return themes;
    };
    
    $.jqplot.ThemeEngine.prototype.activate = function(plot, name) {
        // sometimes need to redraw whole plot.
        var redrawPlot = false;
        if (!name && this.activeTheme && this.activeTheme._name) {
            name = this.activeTheme._name;
        }
        if (!this.themes.hasOwnProperty(name)) {
            throw new Error("No theme of that name");
        }
        else {
            var th = this.themes[name];
            this.activeTheme = th;
            var val, checkBorderColor = false, checkBorderWidth = false;
            var arr = ['xaxis', 'x2axis', 'yaxis', 'y2axis'];
            
            for (i=0; i<arr.length; i++) {
                var ax = arr[i];
                if (th.axesStyles.borderColor != null) {
                    plot.axes[ax].borderColor = th.axesStyles.borderColor;
                }
                if (th.axesStyles.borderWidth != null) {
                    plot.axes[ax].borderWidth = th.axesStyles.borderWidth;
                }
            }
            
            for (axname in plot.axes) {
                var axis = plot.axes[axname];
                if (axis.show) {
                    var thaxis = th.axes[axname] || {};
                    var thaxstyle = th.axesStyles;
                    var thax = $.jqplot.extend(true, {}, thaxis, thaxstyle);
                    val = (th.axesStyles.borderColor != null) ? th.axesStyles.borderColor : thax.borderColor;
                    if (thax.borderColor != null) {
                        axis.borderColor = thax.borderColor;
                        redrawPlot = true;
                    }
                    val = (th.axesStyles.borderWidth != null) ? th.axesStyles.borderWidth : thax.borderWidth;
                    if (thax.borderWidth != null) {
                        axis.borderWidth = thax.borderWidth;
                        redrawPlot = true;
                    }
                    if (axis._ticks && axis._ticks[0]) {
                        for (nn in thax.ticks) {
                            // val = null;
                            // if (th.axesStyles.ticks && th.axesStyles.ticks[nn] != null) {
                            //     val = th.axesStyles.ticks[nn];
                            // }
                            // else if (thax.ticks[nn] != null){
                            //     val = thax.ticks[nn]
                            // }
                            val = thax.ticks[nn];
                            if (val != null) {
                                axis.tickOptions[nn] = val;
                                axis._ticks = [];
                                redrawPlot = true;
                            }
                        }
                    }
                    if (axis._label && axis._label.show) {
                        for (nn in thax.label) {
                            // val = null;
                            // if (th.axesStyles.label && th.axesStyles.label[nn] != null) {
                            //     val = th.axesStyles.label[nn];
                            // }
                            // else if (thax.label && thax.label[nn] != null){
                            //     val = thax.label[nn]
                            // }
                            val = thax.label[nn];
                            if (val != null) {
                                axis.labelOptions[nn] = val;
                                redrawPlot = true;
                            }
                        }
                    }
                    
                }
            }            
            
            for (var n in th.grid) {
                if (th.grid[n] != null) {
                    plot.grid[n] = th.grid[n];
                }
            }
            if (!redrawPlot) {
                plot.grid.draw();
            }
            
            if (plot.legend.show) { 
                for (n in th.legend) {
                    if (th.legend[n] != null) {
                        plot.legend[n] = th.legend[n];
                    }
                }
            }
            if (plot.title.show) {
                for (n in th.title) {
                    if (th.title[n] != null) {
                        plot.title[n] = th.title[n];
                    }
                }
            }
            
            var i;
            for (i=0; i<th.series.length; i++) {
                var opts = {};
                var redrawSeries = false;
                for (n in th.series[i]) {
                    val = (th.seriesStyles[n] != null) ? th.seriesStyles[n] : th.series[i][n];
                    if (val != null) {
                        opts[n] = val;
                        if (n == 'color') {
                            plot.series[i].renderer.shapeRenderer.fillStyle = val;
                            plot.series[i].renderer.shapeRenderer.strokeStyle = val;
                            plot.series[i][n] = val;
                        }
                        else if (n == 'lineWidth') {
                            plot.series[i].renderer.shapeRenderer.lineWidth = val;
                            plot.series[i][n] = val;
                        }
                        else if (n == 'markerOptions') {
                            merge (plot.series[i].markerOptions, val);
                            merge (plot.series[i].markerRenderer, val);
                        }
                        else {
                            plot.series[i][n] = val;
                        }
                        redrawPlot = true;
                    }
                }
            }
            
            if (redrawPlot) {
                plot.target.empty();
                plot.draw();
            }
            
            for (n in th.target) {
                if (th.target[n] != null) {
                    plot.target.css(n, th.target[n]);
                }
            }
        }
        
    };
    
    $.jqplot.ThemeEngine.prototype._add = function(theme, name) {
        if (name) {
            theme._name = name;
        }
        if (!theme._name) {
            theme._name = Date.parse(new Date());
        }
        if (!this.themes.hasOwnProperty(theme._name)) {
            this.themes[theme._name] = theme;
        }
        else {
            throw new Error("jqplot.ThemeEngine Error: Theme already in use");
        }
    };
    
    // method remove
    // Delete the named theme, return true on success, false on failure.
    

    /**
     * method: remove
     * 
     * Remove the given theme from the themeEngine.
     * 
     * parameters:
     * 
     * name - name of the theme to remove.
     * 
     * returns:
     * 
     * true on success, false on failure.
     */
    $.jqplot.ThemeEngine.prototype.remove = function(name) {
        if (name == 'Default') {
            return false;
        }
        return delete this.themes[name];
    };

    /**
     * method: newTheme
     * 
     * Create a new theme based on the default theme, adding it the themeEngine.
     * 
     * parameters:
     * 
     * name - name of the new theme.
     * obj - optional object of styles to be applied to this new theme.
     * 
     * returns:
     * 
     * new Theme object.
     */
    $.jqplot.ThemeEngine.prototype.newTheme = function(name, obj) {
        if (typeof(name) == 'object') {
            obj = obj || name;
            name = null;
        }
        if (obj && obj._name) {
            name = obj._name;
        }
        else {
            name = name || Date.parse(new Date());
        }
        // var th = new $.jqplot.Theme(name);
        var th = this.copy(this.themes['Default']._name, name);
        $.jqplot.extend(th, obj);
        return th;
    };
    
    // function clone(obj) {
    //     return eval(obj.toSource());
    // }
    
    function clone(obj){
        if(obj == null || typeof(obj) != 'object'){
            return obj;
        }
    
        var temp = new obj.constructor();
        for(var key in obj){
            temp[key] = clone(obj[key]);
        }   
        return temp;
    }
    
    $.jqplot.clone = clone;
    
    function merge(obj1, obj2) {
        if (obj2 ==  null || typeof(obj2) != 'object') {
            return;
        }
        for (var key in obj2) {
            if (key == 'highlightColors') {
                obj1[key] = clone(obj2[key]);
            }
            if (obj2[key] != null && typeof(obj2[key]) == 'object') {
                if (!obj1.hasOwnProperty(key)) {
                    obj1[key] = {};
                }
                merge(obj1[key], obj2[key]);
            }
            else {
                obj1[key] = obj2[key];
            }
        }
    }
    
    $.jqplot.merge = merge;
    
        // Use the jQuery 1.3.2 extend function since behaviour in jQuery 1.4 seems problematic
    $.jqplot.extend = function() {
    	// copy reference to target object
    	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

    	// Handle a deep copy situation
    	if ( typeof target === "boolean" ) {
    		deep = target;
    		target = arguments[1] || {};
    		// skip the boolean and the target
    		i = 2;
    	}

    	// Handle case when target is a string or something (possible in deep copy)
    	if ( typeof target !== "object" && !toString.call(target) === "[object Function]" ) {
    	    target = {};
    	}

    	for ( ; i < length; i++ ){
    		// Only deal with non-null/undefined values
    		if ( (options = arguments[ i ]) != null ) {
    			// Extend the base object
    			for ( var name in options ) {
    				var src = target[ name ], copy = options[ name ];

    				// Prevent never-ending loop
    				if ( target === copy ) {
    					continue;
    				}

    				// Recurse if we're merging object values
    				if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
    					target[ name ] = $.jqplot.extend( deep, 
    						// Never move original objects, clone them
    						src || ( copy.length != null ? [ ] : { } )
    					, copy );
                    }
    				// Don't bring in undefined values
    				else if ( copy !== undefined ) {
    					target[ name ] = copy;
    				}
    			}
    		}
        }
    	// Return the modified object
    	return target;
    };

    /**
     * method: rename
     * 
     * Rename a theme.
     * 
     * parameters:
     * 
     * oldName - current name of the theme.
     * newName - desired name of the theme.
     * 
     * returns:
     * 
     * new Theme object.
     */
    $.jqplot.ThemeEngine.prototype.rename = function (oldName, newName) {
        if (oldName == 'Default' || newName == 'Default') {
            throw new Error ("jqplot.ThemeEngine Error: Cannot rename from/to Default");
        }
        if (this.themes.hasOwnProperty(newName)) {
            throw new Error ("jqplot.ThemeEngine Error: New name already in use.");
        }
        else if (this.themes.hasOwnProperty(oldName)) {
            var th = this.copy (oldName, newName);
            this.remove(oldName);
            return th;
        }
        throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid");
    };

    /**
     * method: copy
     * 
     * Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
     * 
     * parameters:
     * 
     * sourceName - name of the existing theme.
     * targetName - name of the copy.
     * obj - optional object of style parameter to apply to the new theme.
     * 
     * returns:
     * 
     * new Theme object.
     */
    $.jqplot.ThemeEngine.prototype.copy = function (sourceName, targetName, obj) {
        if (targetName == 'Default') {
            throw new Error ("jqplot.ThemeEngine Error: Cannot copy over Default theme");
        }
        if (!this.themes.hasOwnProperty(sourceName)) {
            var s = "jqplot.ThemeEngine Error: Source name invalid";
            throw new Error(s);
        }
        if (this.themes.hasOwnProperty(targetName)) {
            var s = "jqplot.ThemeEngine Error: Target name invalid";
            throw new Error(s);
        }
        else {
            var th = clone(this.themes[sourceName]);
            th._name = targetName;
            $.jqplot.extend(true, th, obj);
            this._add(th);
            return th;
        }
    };
    
    
    $.jqplot.Theme = function(name, obj) {
        if (typeof(name) == 'object') {
            obj = obj || name;
            name = null;
        }
        name = name || Date.parse(new Date());
        this._name = name;
        this.target = {
            backgroundColor: null
        };
        this.legend = {
            textColor: null,
            fontFamily: null,
            fontSize: null,
            border: null,
            background: null
        };
        this.title = {
            textColor: null,
            fontFamily: null,
            fontSize: null,
            textAlign: null
        };
        this.seriesStyles = {};
        this.series = [];
        this.grid = {
            drawGridlines: null,
            gridLineColor: null,
            gridLineWidth: null,
            backgroundColor: null,
            borderColor: null,
            borderWidth: null,
            shadow: null
        };
        this.axesStyles = {label:{}, ticks:{}};
        this.axes = {};
        if (typeof(obj) == 'string') {
            this._name = obj;
        }
        else if(typeof(obj) == 'object') {
            $.jqplot.extend(true, this, obj);
        }
    };
    
    var AxisProperties = function() {
        this.borderColor = null;
        this.borderWidth = null;
        this.ticks = new AxisTicks();
        this.label = new AxisLabel();
    };
    
    var AxisTicks = function() {
        this.show = null;
        this.showGridline = null;
        this.showLabel = null;
        this.showMark = null;
        this.size = null;
        this.textColor = null;
        this.whiteSpace = null;
        this.fontSize = null;
        this.fontFamily = null;
    };
    
    var AxisLabel = function() {
        this.textColor = null;
        this.whiteSpace = null;
        this.fontSize = null;
        this.fontFamily = null;
        this.fontWeight = null;
    };
    
    var LineSeriesProperties = function() {
        this.color=null;
        this.lineWidth=null;
        this.shadow=null;
        this.fillColor=null;
        this.showMarker=null;
        this.markerOptions = new MarkerOptions();
    };
    
    var MarkerOptions = function() {
        this.show = null;
        this.style = null;
        this.lineWidth = null;
        this.size = null;
        this.color = null;
        this.shadow = null;
    };
    
    var BarSeriesProperties = function() {
        this.color=null;
        this.seriesColors=null;
        this.lineWidth=null;
        this.shadow=null;
        this.barPadding=null;
        this.barMargin=null;
        this.barWidth=null;
        this.highlightColors=null;
    };
    
    var PieSeriesProperties = function() {
        this.seriesColors=null;
        this.padding=null;
        this.sliceMargin=null;
        this.fill=null;
        this.shadow=null;
        this.startAngle=null;
        this.lineWidth=null;
        this.highlightColors=null;
    };
    
    var DonutSeriesProperties = function() {
        this.seriesColors=null;
        this.padding=null;
        this.sliceMargin=null;
        this.fill=null;
        this.shadow=null;
        this.startAngle=null;
        this.lineWidth=null;
        this.innerDiameter=null;
        this.thickness=null;
        this.ringMargin=null;
        this.highlightColors=null;
    };
    
    var FunnelSeriesProperties = function() {
        this.color=null;
        this.lineWidth=null;
        this.shadow=null;
        this.padding=null;
        this.sectionMargin=null;
        this.seriesColors=null;
        this.highlightColors=null;
    };
    
    var MeterSeriesProperties = function() {
        this.padding=null;
        this.backgroundColor=null;
        this.ringColor=null;
        this.tickColor=null;
        this.ringWidth=null;
        this.intervalColors=null;
        this.intervalInnerRadius=null;
        this.intervalOuterRadius=null;
        this.hubRadius=null;
        this.needleThickness=null;
        this.needlePad=null;
    };
        

      
    /**
     * JavaScript printf/sprintf functions.
     * 
     * This code has been adapted from the publicly available sprintf methods
     * by Ash Searle. His original header follows:
     *
     *     This code is unrestricted: you are free to use it however you like.
     *     
     *     The functions should work as expected, performing left or right alignment,
     *     truncating strings, outputting numbers with a required precision etc.
     *
     *     For complex cases, these functions follow the Perl implementations of
     *     (s)printf, allowing arguments to be passed out-of-order, and to set the
     *     precision or length of the output based on arguments instead of fixed
     *     numbers.
     *
     *     See http://perldoc.perl.org/functions/sprintf.html for more information.
     *
     *     Implemented:
     *     - zero and space-padding
     *     - right and left-alignment,
     *     - base X prefix (binary, octal and hex)
     *     - positive number prefix
     *     - (minimum) width
     *     - precision / truncation / maximum width
     *     - out of order arguments
     *
     *     Not implemented (yet):
     *     - vector flag
     *     - size (bytes, words, long-words etc.)
     *     
     *     Will not implement:
     *     - %n or %p (no pass-by-reference in JavaScript)
     *
     *     @version 2007.04.27
     *     @author Ash Searle 
     * 
     * You can see the original work and comments on his blog:
     * http://hexmen.com/blog/2007/03/printf-sprintf/
     * http://hexmen.com/js/sprintf.js
     */
     
     /**
      * @Modifications 2009.05.26
      * @author Chris Leonello
      * 
      * Added %p %P specifier
      * Acts like %g or %G but will not add more significant digits to the output than present in the input.
      * Example:
      * Format: '%.3p', Input: 0.012, Output: 0.012
      * Format: '%.3g', Input: 0.012, Output: 0.0120
      * Format: '%.4p', Input: 12.0, Output: 12.0
      * Format: '%.4g', Input: 12.0, Output: 12.00
      * Format: '%.4p', Input: 4.321e-5, Output: 4.321e-5
      * Format: '%.4g', Input: 4.321e-5, Output: 4.3210e-5
      */
    $.jqplot.sprintf = function() {
        function pad(str, len, chr, leftJustify) {
            var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
            return leftJustify ? str + padding : padding + str;

        }

        function justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace) {
            var diff = minWidth - value.length;
            if (diff > 0) {
                var spchar = ' ';
                if (htmlSpace) { spchar = '&nbsp;'; }
                if (leftJustify || !zeroPad) {
                    value = pad(value, minWidth, spchar, leftJustify);
                } else {
                    value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
                }
            }
            return value;
        }

        function formatBaseX(value, base, prefix, leftJustify, minWidth, precision, zeroPad, htmlSpace) {
            // Note: casts negative numbers to positive ones
            var number = value >>> 0;
            prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
            value = prefix + pad(number.toString(base), precision || 0, '0', false);
            return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
        }

        function formatString(value, leftJustify, minWidth, precision, zeroPad, htmlSpace) {
            if (precision != null) {
                value = value.slice(0, precision);
            }
            return justify(value, '', leftJustify, minWidth, zeroPad, htmlSpace);
        }

        var a = arguments, i = 0, format = a[i++];

        return format.replace($.jqplot.sprintf.regex, function(substring, valueIndex, flags, minWidth, _, precision, type) {
            if (substring == '%%') { return '%'; }

            // parse flags
            var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, htmlSpace = false;
                for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
                case ' ': positivePrefix = ' '; break;
                case '+': positivePrefix = '+'; break;
                case '-': leftJustify = true; break;
                case '0': zeroPad = true; break;
                case '#': prefixBaseX = true; break;
                case '&': htmlSpace = true; break;
            }

            // parameters may be null, undefined, empty-string or real valued
            // we want to ignore null, undefined and empty-string values

            if (!minWidth) {
                minWidth = 0;
            } 
            else if (minWidth == '*') {
                minWidth = +a[i++];
            } 
            else if (minWidth.charAt(0) == '*') {
                minWidth = +a[minWidth.slice(1, -1)];
            } 
            else {
                minWidth = +minWidth;
            }

            // Note: undocumented perl feature:
            if (minWidth < 0) {
                minWidth = -minWidth;
                leftJustify = true;
            }

            if (!isFinite(minWidth)) {
                throw new Error('$.jqplot.sprintf: (minimum-)width must be finite');
            }

            if (!precision) {
                precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
            } 
            else if (precision == '*') {
                precision = +a[i++];
            } 
            else if (precision.charAt(0) == '*') {
                precision = +a[precision.slice(1, -1)];
            } 
            else {
                precision = +precision;
            }

            // grab value using valueIndex if required?
            var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];

            switch (type) {
            case 's': {
                if (value == null) {
                    return '';
                }
                return formatString(String(value), leftJustify, minWidth, precision, zeroPad, htmlSpace);
            }
            case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad, htmlSpace);
            case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad,htmlSpace);
            case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
            case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
            case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace).toUpperCase();
            case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
            case 'i': {
              var number = parseInt(+value, 10);
              if (isNaN(number)) {
                return '';
              }
              var prefix = number < 0 ? '-' : positivePrefix;
              value = prefix + pad(String(Math.abs(number)), precision, '0', false);
              return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
                  }
            case 'd': {
              var number = Math.round(+value);
              if (isNaN(number)) {
                return '';
              }
              var prefix = number < 0 ? '-' : positivePrefix;
              value = prefix + pad(String(Math.abs(number)), precision, '0', false);
              return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
                  }
            case 'e':
            case 'E':
            case 'f':
            case 'F':
            case 'g':
            case 'G':
                      {
                      var number = +value;
                      if (isNaN(number)) {
                          return '';
                      }
                      var prefix = number < 0 ? '-' : positivePrefix;
                      var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
                      var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
                      value = prefix + Math.abs(number)[method](precision);
                      return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
                  }
            case 'p':
            case 'P':
            {
                // make sure number is a number
                var number = +value;
                if (isNaN(number)) {
                    return '';
                }
                var prefix = number < 0 ? '-' : positivePrefix;

                var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/);
                var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length;
                var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0;
                
                if (Math.abs(number) < 1) {
                    if (sd + zeros  <= precision) {
                        value = prefix + Math.abs(number).toPrecision(sd);
                    }
                    else {
                        if (sd  <= precision - 1) {
                            value = prefix + Math.abs(number).toExponential(sd-1);
                        }
                        else {
                            value = prefix + Math.abs(number).toExponential(precision-1);
                        }
                    }
                }
                else {
                    var prec = (sd <= precision) ? sd : precision;
                    value = prefix + Math.abs(number).toPrecision(prec);
                }
                var textTransform = ['toString', 'toUpperCase']['pP'.indexOf(type) % 2];
                return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
            }
            case 'n': return '';
            default: return substring;
            }
        });
    };
    
    $.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0& ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;

})(jQuery);  

Added Site/Site_W/jpqplot/jquery.jqplot.min.css.



>
1
.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em;}.jqplot-axis{font-size:.75em;}.jqplot-xaxis{margin-top:10px;}.jqplot-x2axis{margin-bottom:10px;}.jqplot-yaxis{margin-right:10px;}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis{margin-left:10px;margin-right:10px;}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{position:absolute;}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top;}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom;}.jqplot-yaxis-tick{right:0;top:15px;text-align:right;}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left;}.jqplot-meterGauge-tick{font-size:.75em;color:#999;}.jqplot-meterGauge-label{font-size:1em;color:#999;}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute;}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute;}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute;}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;position:absolute;}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em;}td.jqplot-table-legend{vertical-align:middle;}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer;}td.jqplot-table-legend>div{border:1px solid #ccc;padding:1px;}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid;}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em;}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-highlighter-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-point-label{font-size:.75em;z-index:2;}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center;}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em;}.jqplot-error{text-align:center;}.jqplot-error-message{position:relative;top:46%;display:inline-block;}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%);}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7);}

Added Site/Site_W/jpqplot/jquery.jqplot.min.js.

cannot compute difference between binary files

Added Site/Site_W/jpqplot/optionsTutorial.txt.































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
Title: Options Tutorial

This document will help you understand how jqPlot's options
relate to the API documentation and the jqPlot object
itself.  For a listing of options available to jqPlot,
see <jqPlot Options> in the jqPlotOptions.txt file.

The key to effectively using jqPlot is understanding jqPlot's
options.  The online documentation is API documentation.  While
it explains what attributes and methods various objects posses,
it doesn't explain how to use or set those attributes through 
options.  This tutorial will help explain that.

Lets assume you are creating a plot 
like this:

> chart = $.jqplot('chart', dataSeries, optionsObj);

First, note that you shouldn't try to directly set attributes on the
"chart" object (like chart.grid.shadow) after your call to $.jqplot().  
At best this won't do anything **(see below). You should pass options in via
the "optionsObj".

the optionsObj really represents the plot object (jqPlot object, not
to be confused with the $.jqplot function which will create a jqPlot
object).  Attributes you specify on that object will be merged with
attributes in the jqPlot object.  The axes, legend, series, etc. are
attributes on the jqPlot object.  The jqPlot/optionsObj object looks
something like (only some attributes shown):

> jqPlot-|
>        |-seriesColors
>        |-textColor
>        |-fontFamily
>        |-fontSize
>        |-stackSeries
>        |-series(Array)-|
>        |               |-Series1-|
>        |               |         |-lineWidth
>        |               |         |-shadow
>        |               |         |-showLine
>        |               |         |-showMarker
>        |               |         |-color
>        |               |-Series2...
>        |               |-...
>        |               |-SeriesN
>        |
>        |-grid(Object)-|
>        |              |-drawGridLines
>        |              |-background
>        |              |-borderColor
>        |              |-borderWidth
>        |              |-shadow
>        |
>        |-title(Object)-|
>        |               |-text
>        |               |-show
>        |               |-fontFamily
>        |               |-fontSize
>        |               |-textAlign
>        |               |-textColor
>        |
>        |-axes(Object)-|
>        |              |-xais-|
>        |              |      |-min
>        |              |      |-max
>        |              |      |-numberTicks
>        |              |      |-showTicks
>        |              |      |-showTickMarks
>        |              |      |-pad
>        |
>        | ... and so on
 
The optionsObj should follow the same construction as if it were a
jqPlot object (with some exceptions/shortcuts I'll mention in a
moment).  So generally, when you see something like
"this.drawGridLines" in the grid properties in the docs, just replace
"this" with "grid" in your options object.  So it becomes
optionsObj.grid.drawGridLines.  Do likewise with the other objects in
the plot, replacing "this", with the respective attribute on the plot
like "legend" or "title".  Series and Axes are handled a little
different, because series is an array and axes has 4 distinct children
"xaxis", "yaxis", "x2axis" and "y2axis".

So, to remove the shadow from the grid and change the grid border size
you would do:

> optionObj = {grid:{shadow:false, borderWidth:9.0}};

To do the same as above but also make all the text in the plot red you
would do:

> optionObj = {
>    textColor:"#ff0000",
>    grid:{shadow:false, borderWidth:9.0}
> }

Here is a more deeply nested example. Say you want to specify a min
and max on your y axis and use a specific color for your second
series.  That would look like:

> optionsObj = {
>    axes:{yaxis:{min:5, max:230}},
>    series:[{},{color:"#33ff66"}]
> }

Note that series options are an array in order of the series data you
sent in to your plot.  To get to the second series, you have to put an
object (even if empty) in place of the first series.

There is a handy shortcut to assign options to all axes or all series
at one go.  Use axesDefaults and seriesDefaults.  So, if you wanted
both x and y axes to start at 0 and you wanted all series to not show
markers, you could do:

> optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}

Another shortcut is for the plot title.  Normally, you would assign
options to the title as an object.  If you specify a title option as a
string, it will assign that to the title.text property automatically.
So these two are equivalent:

> optionsObj = {title:{text:"My Plot"}}

and

> optionsObj = {title:"My Plot"}

Where things need more explaination is with renderers, plugins and
their options.  Briefly, what's  renderer, what's a plugin.

A renderer is an object that is used to draw something and gets
attached to an existing object in the plot in order to draw it.  A
plugin does more than just provide drawing functionality to an
object.  It will do more like calculate a trend line, change the
cursor, provide event driven functionality, etc.  I consider renderers
plugins, but plugins don't have to be renderers.

So, how do you use renderers, plugins, and specify their options?
Some common renderes are for bar charts and category axes.  If you
want to render your series as a bar chart with each set of bars
showing up in a category on the x axis, you do:

> optionsObj = {
>    seriesDefaults:{renderer:$.jqplot.BarRenderer},
>    axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
> }

This replaces the default renderer used for all series in the plot
with a bar renderer and the x axis default renderer (but not any other
axis) with a category renderer.

Now, how would I assign options to those renderers?  The renderer's
attributes may not be present in the pre-existing jqPlot object, they
may be specific to the renderer.  This is done through the
"rendererOptions" option on the appropriate object. So, if I wanted my
bars to be 25 pixels wide, I would do:


> optionsObj = {
>    seriesDefaults:{
>        renderer:$.jqplot.BarRenderer},
>        rendererOptions:{
>            barWidth:25
>        },
>    axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
> }

Again, this is using the "seriesDefaults" option, which will apply
options to all series in the plot.  You could do the same on any
particular series in the plot through the "series" options array.

Plugins are free to add their own options.  For example, the
highlighter plugin has it's own set of options that are unique to it.
As a result, it responds to options placed in the "highlighter"
attribute of your options object.  So, if I wanted to change the
highlighter tooltip to fade in and out slowly and be positioned
directly above the point I'm highlighting:

> optionsObj = {
>     highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
> }

Other plugins, like dragable and trendlines, add their options in with
the series.  This is because both of those plugins can have different
options for different series in the plot.  So, if you wanted to specify the
color of the dragable and constrain it to drag only on the x axis as well
as specify the color of the trend line you could do:

> series:[{
>     dragable: {
>         color: '#ff3366',
>         constrainTo: 'x'
>     },
>     trendline: {
>         color: '#cccccc'
>     }
> }]

This would apply those options to the first series only.  If you had 2 series
and wanted to turn off dragging and trend lines on the second series, you could do:

> series:[{
>     dragable: {
>         color: '#ff3366',
>         constrainTo: 'x'
>     },
>     trendline: {
>         color: '#cccccc'
>     }
> }, {
>    isDragable: false,
>    trendline:{
>        show: false
>    }
> }]

Note, series dragability is turned off with the "isDragable" option directly on 
the series itself, not with a suboption of "dragable".  This may be improved 
in the future.

I hope this is helpful. 
A few key points to remember:

- When you see "this" in the api docs, you generally replace it with
the name of the object (in lowercase) you are looking at in your
options object.
- seriesDefaults and axesDefaults are convenient shortcuts.
- to assign options to a renderer, generally use the "rendererOptions"
- plugins may add their own options attribute, like "highlighter" or
"cursor".

** Note:  you can set attributes after the plot is created (like
plot.grid.shadow = false), but you'll have to issue the appropriate
calls to possibly reinitialize and redraw the plot.  jqPlot can
definitely handle this to change the plot after creation (this is how
the dragable plugin updates the plot data and the trend line plugin
recomputes itself when data changes).  This hasn't been documented
yet, however.

Added Site/Site_W/jpqplot/plugins/jqplot.BezierCurveRenderer.js.

























































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    // Class: $.jqplot.BezierCurveRenderer.js
    // Renderer which draws lines as stacked bezier curves.
    // Data for the line will not be specified as an array of
    // [x, y] data point values, but as a an array of [start piont, bezier curve]
    // So, the line is specified as: [[xstart, ystart], [cp1x, cp1y, cp2x, cp2y, xend, yend]].
    $.jqplot.BezierCurveRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.BezierCurveRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.BezierCurveRenderer.prototype.constructor = $.jqplot.BezierCurveRenderer;

    
    // Method: setGridData
    // converts the user data values to grid coordinates and stores them
    // in the gridData array.
    // Called with scope of a series.
    $.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        // this._plotData should be same as this.data
        var data = this.data;
        this.gridData = [];
        this._prevGridData = [];
        // if seriesIndex = 0, fill to x axis.
        // if seriesIndex > 0, fill to previous series data.
        var idx = this.index;
        if (data.length == 2) {
            if (idx == 0) {
                this.gridData = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),  
                        xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
                    [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)],
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
                ];
            }
            else {
                var psd = plot.series[idx-1].data;
                this.gridData = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),  
                        xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
                    [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])],
                    [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]), 
                        xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),  
                        xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
                ];
            }
        }
        else {
            if (idx == 0) {
                this.gridData = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),  
                        xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
                    [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)],
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
                ];
            }
            else {
                var psd = plot.series[idx-1].data;
                this.gridData = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),  
                        xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
                    [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])],
                    [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]), 
                        xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),  
                        xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
                ];
            }
        }
    };
    
    // Method: makeGridData
    // converts any arbitrary data values to grid coordinates and
    // returns them.  This method exists so that plugins can use a series'
    // linerenderer to generate grid data points without overwriting the
    // grid data associated with that series.
    // Called with scope of a series.
    $.jqplot.BezierCurveRenderer.prototype.makeGridData = function(data, plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var gd = [];
        var pgd = [];
        // if seriesIndex = 0, fill to x axis.
        // if seriesIndex > 0, fill to previous series data.
        var idx = this.index;
        if (data.length == 2) {
            if (idx == 0) {
                gd = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),  
                        xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
                    [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)],
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
                ];
            }
            else {
                var psd = plot.series[idx-1].data;
                gd = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),  
                        xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
                    [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])],
                    [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]), 
                        xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),  
                        xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
                ];
            }
        }
        else {
            if (idx == 0) {
                gd = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),  
                        xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
                    [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)],
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
                ];
            }
            else {
                var psd = plot.series[idx-1].data;
                gd = [
                    [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])], 
                    [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]), 
                        xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),  
                        xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
                    [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])],
                    [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]), 
                        xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),  
                        xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
                ];
            }
        }
        return gd;
    };
    

    // called within scope of series.
    $.jqplot.BezierCurveRenderer.prototype.draw = function(ctx, gd, options) {
        var i;
        ctx.save();
        if (gd.length) {
            if (this.showLine) {
                ctx.save();
                var opts = (options != null) ? options : {};
                ctx.fillStyle = opts.fillStyle || this.color;
                ctx.beginPath();
                ctx.moveTo(gd[0][0], gd[0][1]);
                ctx.bezierCurveTo(gd[1][0], gd[1][1], gd[1][2], gd[1][3], gd[1][4], gd[1][5]);
                ctx.lineTo(gd[2][0], gd[2][1]);
                if (gd[3].length == 2) {
                    ctx.lineTo(gd[3][0], gd[3][1]);
                }
                else {
                    ctx.bezierCurveTo(gd[3][0], gd[3][1], gd[3][2], gd[3][3], gd[3][4], gd[3][5]);
                }
                ctx.closePath();
                ctx.fill();
                ctx.restore();
            }
        }
        
        ctx.restore();
    };  
    
    $.jqplot.BezierCurveRenderer.prototype.drawShadow = function(ctx, gd, options) {
        // This is a no-op, shadows drawn with lines.
    };
    
    $.jqplot.BezierAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.BezierAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.BezierAxisRenderer.prototype.constructor = $.jqplot.BezierAxisRenderer;
        
    
    // Axes on a plot with Bezier Curves
    $.jqplot.BezierAxisRenderer.prototype.init = function(options){
        $.extend(true, this, options);
        var db = this._dataBounds;
        // Go through all the series attached to this axis and find
        // the min/max bounds for this axis.
        for (var i=0; i<this._series.length; i++) {
            var s = this._series[i];
            var d = s.data;  
            if (d.length == 4) {
                for (var j=0; j<d.length; j++) { 
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        if (d[j][0] < db.min || db.min == null) {
                            db.min = d[j][0];
                        }
                        if (d[j][0] > db.max || db.max == null) {
                            db.max = d[j][0];
                        }
                    }              
                    else {
                        if (d[j][1] < db.min || db.min == null) {
                            db.min = d[j][1];
                        }
                        if (d[j][1] > db.max || db.max == null) {
                            db.max = d[j][1];
                        }
                    }              
                }
            }          
            else {    
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    if (d[0][0] < db.min || db.min == null) {
                        db.min = d[0][0];
                    }
                    if (d[0][0] > db.max || db.max == null) {
                        db.max = d[0][0];
                    }
                    for (var j=0; j<5; j+=2) {
                        if (d[1][j] < db.min || db.min == null) {
                            db.min = d[1][j];
                        }
                        if (d[1][j] > db.max || db.max == null) {
                            db.max = d[1][j];
                        }
                    }
                }              
                else {
                    if (d[0][1] < db.min || db.min == null) {
                        db.min = d[0][1];
                    }
                    if (d[0][1] > db.max || db.max == null) {
                        db.max = d[0][1];
                    }
                    for (var j=1; j<6; j+=2) {
                        if (d[1][j] < db.min || db.min == null) {
                            db.min = d[1][j];
                        }
                        if (d[1][j] > db.max || db.max == null) {
                            db.max = d[1][j];
                        }
                    }
                }           
            }
        }
    };
    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = $.extend(true, {pad:0}, options.axesDefaults);
        options.legend = $.extend(true, {placement:'outside'}, options.legend);
        // only set these if there is a pie series
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.BezierCurveRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.BezierCurveRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.BezierAxisRenderer;
        }
    }
    
    $.jqplot.preInitHooks.push(preInit);
    
})(jQuery);    

Added Site/Site_W/jpqplot/plugins/jqplot.BezierCurveRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(b){b.jqplot.BezierCurveRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.BezierCurveRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.BezierCurveRenderer.prototype.constructor=b.jqplot.BezierCurveRenderer;b.jqplot.BezierCurveRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var g=this._yaxis.series_u2p;var f=this.data;this.gridData=[];this._prevGridData=[];var d=this.index;if(f.length==2){if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,f[1][4]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,c[1][4]),g.call(this._yaxis,c[1][5])],[e.call(this._xaxis,c[1][2]),g.call(this._yaxis,c[1][3]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}else{if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,f[3][1]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,c[3][0]),g.call(this._yaxis,c[3][1])],[e.call(this._xaxis,c[2][0]),g.call(this._yaxis,c[2][1]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}};b.jqplot.BezierCurveRenderer.prototype.makeGridData=function(g,i){var f=this._xaxis.series_u2p;var h=this._yaxis.series_u2p;var e=[];var j=[];var d=this.index;if(g.length==2){if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,g[1][4]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,c[1][4]),h.call(this._yaxis,c[1][5])],[f.call(this._xaxis,c[1][2]),h.call(this._yaxis,c[1][3]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}else{if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,g[3][1]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,c[3][0]),h.call(this._yaxis,c[3][1])],[f.call(this._xaxis,c[2][0]),h.call(this._yaxis,c[2][1]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}return e};b.jqplot.BezierCurveRenderer.prototype.draw=function(c,g,d){var e;c.save();if(g.length){if(this.showLine){c.save();var f=(d!=null)?d:{};c.fillStyle=f.fillStyle||this.color;c.beginPath();c.moveTo(g[0][0],g[0][1]);c.bezierCurveTo(g[1][0],g[1][1],g[1][2],g[1][3],g[1][4],g[1][5]);c.lineTo(g[2][0],g[2][1]);if(g[3].length==2){c.lineTo(g[3][0],g[3][1])}else{c.bezierCurveTo(g[3][0],g[3][1],g[3][2],g[3][3],g[3][4],g[3][5])}c.closePath();c.fill();c.restore()}}c.restore()};b.jqplot.BezierCurveRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.BezierAxisRenderer=function(){b.jqplot.LinearAxisRenderer.call(this)};b.jqplot.BezierAxisRenderer.prototype=new b.jqplot.LinearAxisRenderer();b.jqplot.BezierAxisRenderer.prototype.constructor=b.jqplot.BezierAxisRenderer;b.jqplot.BezierAxisRenderer.prototype.init=function(f){b.extend(true,this,f);var c=this._dataBounds;for(var g=0;g<this._series.length;g++){var h=this._series[g];var k=h.data;if(k.length==4){for(var e=0;e<k.length;e++){if(this.name=="xaxis"||this.name=="x2axis"){if(k[e][0]<c.min||c.min==null){c.min=k[e][0]}if(k[e][0]>c.max||c.max==null){c.max=k[e][0]}}else{if(k[e][1]<c.min||c.min==null){c.min=k[e][1]}if(k[e][1]>c.max||c.max==null){c.max=k[e][1]}}}}else{if(this.name=="xaxis"||this.name=="x2axis"){if(k[0][0]<c.min||c.min==null){c.min=k[0][0]}if(k[0][0]>c.max||c.max==null){c.max=k[0][0]}for(var e=0;e<5;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}else{if(k[0][1]<c.min||c.min==null){c.min=k[0][1]}if(k[0][1]>c.max||c.max==null){c.max=k[0][1]}for(var e=1;e<6;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}}}};function a(g,f,d){d=d||{};d.axesDefaults=b.extend(true,{pad:0},d.axesDefaults);d.legend=b.extend(true,{placement:"outside"},d.legend);var c=false;if(d.seriesDefaults.renderer==b.jqplot.BezierCurveRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.BezierCurveRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.BezierAxisRenderer}}b.jqplot.preInitHooks.push(a)})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.barRenderer.js.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    
    // Class: $.jqplot.BarRenderer
    // A plugin renderer for jqPlot to draw a bar plot.
    // Draws series as a line.
    
    $.jqplot.BarRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.BarRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.BarRenderer.prototype.constructor = $.jqplot.BarRenderer;
    
    // called with scope of series.
    $.jqplot.BarRenderer.prototype.init = function(options, plot) {
        // Group: Properties
        //
        // prop: barPadding
        // Number of pixels between adjacent bars at the same axis value.
        this.barPadding = 8;
        // prop: barMargin
        // Number of pixels between groups of bars at adjacent axis values.
        this.barMargin = 10;
        // prop: barDirection
        // 'vertical' = up and down bars, 'horizontal' = side to side bars
        this.barDirection = 'vertical';
        // prop: barWidth
        // Width of the bar in pixels (auto by devaul).  null = calculated automatically.
        this.barWidth = null;
        // prop: shadowOffset
        // offset of the shadow from the slice and offset of 
        // each succesive stroke of the shadow from the last.
        this.shadowOffset = 2;
        // prop: shadowDepth
        // number of strokes to apply to the shadow, 
        // each stroke offset shadowOffset from the last.
        this.shadowDepth = 5;
        // prop: shadowAlpha
        // transparency of the shadow (0 = transparent, 1 = opaque)
        this.shadowAlpha = 0.08;
        // prop: waterfall
        // true to enable waterfall plot.
        this.waterfall = false;
        // prop: groups
        // group bars into this many groups
        this.groups = 1;
        // prop: varyBarColor
        // true to color each bar of a series separately rather than
        // have every bar of a given series the same color.
        // If used for non-stacked multiple series bar plots, user should
        // specify a separate 'seriesColors' array for each series.
        // Otherwise, each series will set their bars to the same color array.
        // This option has no Effect for stacked bar charts and is disabled.
        this.varyBarColor = false;
        // prop: highlightMouseOver
        // True to highlight slice when moused over.
        // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
        this.highlightMouseOver = true;
        // prop: highlightMouseDown
        // True to highlight when a mouse button is pressed over a slice.
        // This will be disabled if highlightMouseOver is true.
        this.highlightMouseDown = false;
        // prop: highlightColors
        // an array of colors to use when highlighting a bar.
        this.highlightColors = [];
        
        // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
        if (options.highlightMouseDown && options.highlightMouseOver == null) {
            options.highlightMouseOver = false;
        }
        
        $.extend(true, this, options);
        // fill is still needed to properly draw the legend.
        // bars have to be filled.
        this.fill = true;
        
        if (this.waterfall) {
            this.fillToZero = false;
            this.disableStack = true;
        }
        
        if (this.barDirection == 'vertical' ) {
            this._primaryAxis = '_xaxis';
            this._stackAxis = 'y';
            this.fillAxis = 'y';
        }
        else {
            this._primaryAxis = '_yaxis';
            this._stackAxis = 'x';
            this.fillAxis = 'x';
        }
        // index of the currenty highlighted point, if any
        this._highlightedPoint = null;
        // total number of values for all bar series, total number of bar series, and position of this series
        this._plotSeriesInfo = null;
        // Array of actual data colors used for each data point.
        this._dataColors = [];
        this._barPoints = [];
        
        // set the shape renderer options
        var opts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill};
        this.renderer.shapeRenderer.init(opts);
        // set the shadow renderer options
        var sopts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill};
        this.renderer.shadowRenderer.init(sopts);
        
        plot.postInitHooks.addOnce(postInit);
        plot.postDrawHooks.addOnce(postPlotDraw);
        plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
        plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
        plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
        plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
        plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); 
    };
    
    // called with scope of series
    function barPreInit(target, data, seriesDefaults, options) {
        if (this.rendererOptions.barDirection == 'horizontal') {
            this._stackAxis = 'x';
            this._primaryAxis = '_yaxis';
        }
        if (this.rendererOptions.waterfall == true) {
            this._data = $.extend(true, [], this.data);
            var sum = 0;
            var pos = (!this.rendererOptions.barDirection || this.rendererOptions.barDirection == 'vertical') ? 1 : 0;
            for(var i=0; i<this.data.length; i++) {
                sum += this.data[i][pos];
                if (i>0) {
                    this.data[i][pos] += this.data[i-1][pos];
                }
            }
            this.data[this.data.length] = (pos == 1) ? [this.data.length+1, sum] : [sum, this.data.length+1];
            this._data[this._data.length] = (pos == 1) ? [this._data.length+1, sum] : [sum, this._data.length+1];
        }
        if (this.rendererOptions.groups > 1) {
            this.breakOnNull = true;
            var l = this.data.length;
            var skip = parseInt(l/this.rendererOptions.groups, 10);
            var count = 0;
            for (var i=skip; i<l; i+=skip) {
                this.data.splice(i+count, 0, [null, null]);
                count++;
            }
            for (i=0; i<this.data.length; i++) {
                if (this._primaryAxis == '_xaxis') {
                    this.data[i][0] = i+1;
                }
                else {
                    this.data[i][1] = i+1;
                }
            }
        }
    }
    
    $.jqplot.preSeriesInitHooks.push(barPreInit);
    
    // needs to be called with scope of series, not renderer.
    $.jqplot.BarRenderer.prototype.calcSeriesNumbers = function() {
        var nvals = 0;
        var nseries = 0;
        var paxis = this[this._primaryAxis];
        var s, series, pos;
        // loop through all series on this axis
        for (var i=0; i < paxis._series.length; i++) {
            series = paxis._series[i];
            if (series === this) {
                pos = i;
            }
            // is the series rendered as a bar?
            if (series.renderer.constructor == $.jqplot.BarRenderer) {
                // gridData may not be computed yet, use data length insted
                nvals += series.data.length;
                nseries += 1;
            }
        }
        // return total number of values for all bar series, total number of bar series, and position of this series
        return [nvals, nseries, pos];
    };

    $.jqplot.BarRenderer.prototype.setBarWidth = function() {
        // need to know how many data values we have on the approprate axis and figure it out.
        var i;
        var nvals = 0;
        var nseries = 0;
        var paxis = this[this._primaryAxis];
        var s, series, pos;
        var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
        nvals = temp[0];
        nseries = temp[1];
        var nticks = paxis.numberTicks;
        var nbins = (nticks-1)/2;
        // so, now we have total number of axis values.
        if (paxis.name == 'xaxis' || paxis.name == 'x2axis') {
            if (this._stack) {
                this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals * nseries - this.barMargin;
            }
            else {
                this.barWidth = ((paxis._offsets.max - paxis._offsets.min)/nbins  - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
                // this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding - this.barMargin/nseries;
            }
        }
        else {
            if (this._stack) {
                this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals * nseries - this.barMargin;
            }
            else {
                this.barWidth = ((paxis._offsets.min - paxis._offsets.max)/nbins  - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
                // this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding - this.barMargin/nseries;
            }
        }
        return [nvals, nseries];
    };

    function computeHighlightColors (colors) {
        var ret = [];
        for (var i=0; i<colors.length; i++){
            var rgba = $.jqplot.getColorComponents(colors[i]);
            var newrgb = [rgba[0], rgba[1], rgba[2]];
            var sum = newrgb[0] + newrgb[1] + newrgb[2];
            for (var j=0; j<3; j++) {
                // when darkening, lowest color component can be is 60.
                newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
                newrgb[j] = parseInt(newrgb[j], 10);
            }
            ret.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
        }
        return ret;
    }
    
    $.jqplot.BarRenderer.prototype.draw = function(ctx, gridData, options) {
        var i;
        var opts = (options != undefined) ? options : {};
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var xaxis = this.xaxis;
        var yaxis = this.yaxis;
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var pointx, pointy, nvals, nseries, pos;
        // clear out data colors.
        this._dataColors = [];
        this._barPoints = [];
        
        if (this.barWidth == null) {
            this.renderer.setBarWidth.call(this);
        }
        
        var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
        nvals = temp[0];
        nseries = temp[1];
        pos = temp[2];
        
        if (this._stack) {
            this._barNudge = 0;
        }
        else {
            this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
        }
        if (showLine) {
            var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
            var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors);
            var negativeColor = negativeColors.get(this.index);
            if (! this.useNegativeColors) {
                negativeColor = opts.fillStyle;
            }
            var positiveColor = opts.fillStyle;
            
            if (this.barDirection == 'vertical') {
                for (var i=0; i<gridData.length; i++) {
                    if (this.data[i][1] == null) {
                        continue;
                    }
                    points = [];
                    var base = gridData[i][0] + this._barNudge;
                    var ystart;
                    
                    // stacked
                    if (this._stack && this._prevGridData.length) {
                        ystart = this._prevGridData[i][1];
                    }
                    // not stacked and first series in stack
                    else {
                        if (this.fillToZero) {
                            ystart = this._yaxis.series_u2p(0);
                        }
                        else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
                            ystart = this.gridData[i-1][1];
                        }
                        else {
                            ystart = ctx.canvas.height;
                        }
                    }
                    if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
                        if (this.varyBarColor && !this._stack) {
                            if (this.useNegativeColors) {
                                opts.fillStyle = negativeColors.next();
                            }
                            else {
                                opts.fillStyle = positiveColors.next();
                            }
                        }
                        else {
                            opts.fillStyle = negativeColor;
                        }
                    }
                    else {
                        if (this.varyBarColor && !this._stack) {
                            opts.fillStyle = positiveColors.next();
                        }
                        else {
                            opts.fillStyle = positiveColor;
                        }
                    }
                    
                    points.push([base-this.barWidth/2, ystart]);
                    points.push([base-this.barWidth/2, gridData[i][1]]);
                    points.push([base+this.barWidth/2, gridData[i][1]]);
                    points.push([base+this.barWidth/2, ystart]);
                    this._barPoints.push(points);
                    // now draw the shadows if not stacked.
                    // for stacked plots, they are predrawn by drawShadow
                    if (shadow && !this._stack) {
                        var sopts = $.extend(true, {}, opts);
                        // need to get rid of fillStyle on shadow.
                        delete sopts.fillStyle;
                        this.renderer.shadowRenderer.draw(ctx, points, sopts);
                    }
                    var clr = opts.fillStyle || this.color;
                    this._dataColors.push(clr);
                    this.renderer.shapeRenderer.draw(ctx, points, opts); 
                }
            }
            
            else if (this.barDirection == 'horizontal'){
                for (var i=0; i<gridData.length; i++) {
                    if (this.data[i][0] == null) {
                        continue;
                    }
                    points = [];
                    var base = gridData[i][1] - this._barNudge;
                    var xstart;
                    
                    if (this._stack && this._prevGridData.length) {
                        xstart = this._prevGridData[i][0];
                    }
                    // not stacked and first series in stack
                    else {
                        if (this.fillToZero) {
                            xstart = this._xaxis.series_u2p(0);
                        }
                        else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
                            xstart = this.gridData[i-1][1];
                        }
                        else {
                            xstart = 0;
                        }
                    }
                    if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
                        if (this.varyBarColor && !this._stack) {
                            if (this.useNegativeColors) {
                                opts.fillStyle = negativeColors.next();
                            }
                            else {
                                opts.fillStyle = positiveColors.next();
                            }
                        }
                    }
                    else {
                        if (this.varyBarColor && !this._stack) {
                            opts.fillStyle = positiveColors.next();
                        }
                        else {
                            opts.fillStyle = positiveColor;
                        }                    
                    }
                    
                    points.push([xstart, base+this.barWidth/2]);
                    points.push([xstart, base-this.barWidth/2]);
                    points.push([gridData[i][0], base-this.barWidth/2]);
                    points.push([gridData[i][0], base+this.barWidth/2]);
                    this._barPoints.push(points);
                    // now draw the shadows if not stacked.
                    // for stacked plots, they are predrawn by drawShadow
                    if (shadow && !this._stack) {
                        var sopts = $.extend(true, {}, opts);
                        delete sopts.fillStyle;
                        this.renderer.shadowRenderer.draw(ctx, points, sopts);
                    }
                    var clr = opts.fillStyle || this.color;
                    this._dataColors.push(clr);
                    this.renderer.shapeRenderer.draw(ctx, points, opts); 
                }  
            }
        }                
        
        if (this.highlightColors.length == 0) {
            this.highlightColors = computeHighlightColors(this._dataColors);
        }
        
        else if (typeof(this.highlightColors) == 'string') {
            var temp = this.highlightColors;
            this.highlightColors = [];
            for (var i=0; i<this._dataColors.length; i++) {
                this.highlightColors.push(temp);
            }
        }
        
    };
    
     
    // for stacked plots, shadows will be pre drawn by drawShadow.
    $.jqplot.BarRenderer.prototype.drawShadow = function(ctx, gridData, options) {
        var i;
        var opts = (options != undefined) ? options : {};
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var xaxis = this.xaxis;
        var yaxis = this.yaxis;
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var pointx, pointy, nvals, nseries, pos;
        
        if (this._stack && this.shadow) {
            if (this.barWidth == null) {
                this.renderer.setBarWidth.call(this);
            }
        
            var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
            nvals = temp[0];
            nseries = temp[1];
            pos = temp[2];
        
            if (this._stack) {
                this._barNudge = 0;
            }
            else {
                this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
            }
            if (showLine) {
            
                if (this.barDirection == 'vertical') {
                    for (var i=0; i<gridData.length; i++) {
                        if (this.data[i][1] == null) {
                            continue;
                        }
                        points = [];
                        var base = gridData[i][0] + this._barNudge;
                        var ystart;
                    
                        if (this._stack && this._prevGridData.length) {
                            ystart = this._prevGridData[i][1];
                        }
                        else {
                            if (this.fillToZero) {
                                ystart = this._yaxis.series_u2p(0);
                            }
                            else {
                                ystart = ctx.canvas.height;
                            }
                        }
                    
                        points.push([base-this.barWidth/2, ystart]);
                        points.push([base-this.barWidth/2, gridData[i][1]]);
                        points.push([base+this.barWidth/2, gridData[i][1]]);
                        points.push([base+this.barWidth/2, ystart]);
                        this.renderer.shadowRenderer.draw(ctx, points, opts);
                    }
                }
            
                else if (this.barDirection == 'horizontal'){
                    for (var i=0; i<gridData.length; i++) {
                        if (this.data[i][0] == null) {
                            continue;
                        }
                        points = [];
                        var base = gridData[i][1] - this._barNudge;
                        var xstart;
                    
                        if (this._stack && this._prevGridData.length) {
                            xstart = this._prevGridData[i][0];
                        }
                        else {
                            xstart = 0;
                        }
                    
                        points.push([xstart, base+this.barWidth/2]);
                        points.push([gridData[i][0], base+this.barWidth/2]);
                        points.push([gridData[i][0], base-this.barWidth/2]);
                        points.push([xstart, base-this.barWidth/2]);
                        this.renderer.shadowRenderer.draw(ctx, points, opts);
                    }  
                }
            }   
            
        }
    };
    
    function postInit(target, data, options) {
        for (i=0; i<this.series.length; i++) {
            if (this.series[i].renderer.constructor == $.jqplot.BarRenderer) {
                // don't allow mouseover and mousedown at same time.
                if (this.series[i].highlightMouseOver) {
                    this.series[i].highlightMouseDown = false;
                }
            }
        }
        this.target.bind('mouseout', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
    }
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    function postPlotDraw() {
        this.plugins.barRenderer = {highlightedSeriesIndex:null};
        this.plugins.barRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
        
        this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-barRenderer-highlight-canvas', this._plotDimensions));
        var hctx = this.plugins.barRenderer.highlightCanvas.setContext();
    }   
    
    function highlight (plot, sidx, pidx, points) {
        var s = plot.series[sidx];
        var canvas = plot.plugins.barRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        s._highlightedPoint = pidx;
        plot.plugins.barRenderer.highlightedSeriesIndex = sidx;
        var opts = {fillStyle: s.highlightColors[pidx]};
        s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
    }
    
    function unhighlight (plot) {
        var canvas = plot.plugins.barRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        for (var i=0; i<plot.series.length; i++) {
            plot.series[i]._highlightedPoint = null;
        }
        plot.plugins.barRenderer.highlightedSeriesIndex = null;
        plot.target.trigger('jqplotDataUnhighlight');
    }
    
    
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt1 = jQuery.Event('jqplotDataMouseOver');
            evt1.pageX = ev.pageX;
            evt1.pageY = ev.pageY;
            plot.target.trigger(evt1, ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
        var idx = plot.plugins.barRenderer.highlightedSeriesIndex;
        if (idx != null && plot.series[idx].highlightMouseDown) {
            unhighlight(plot);
        }
    }
    
    function handleClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt = jQuery.Event('jqplotDataClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var idx = plot.plugins.barRenderer.highlightedSeriesIndex;
            if (idx != null && plot.series[idx].highlightMouseDown) {
                unhighlight(plot);
            }
            var evt = jQuery.Event('jqplotDataRightClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    
})(jQuery);    

Added Site/Site_W/jpqplot/plugins/jqplot.barRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(d){d.jqplot.BarRenderer=function(){d.jqplot.LineRenderer.call(this)};d.jqplot.BarRenderer.prototype=new d.jqplot.LineRenderer();d.jqplot.BarRenderer.prototype.constructor=d.jqplot.BarRenderer;d.jqplot.BarRenderer.prototype.init=function(o,q){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.groups=1;this.varyBarColor=false;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];if(o.highlightMouseDown&&o.highlightMouseOver==null){o.highlightMouseOver=false}d.extend(true,this,o);this.fill=true;if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}this._highlightedPoint=null;this._plotSeriesInfo=null;this._dataColors=[];this._barPoints=[];var p={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(p);var n={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(n);q.postInitHooks.addOnce(h);q.postDrawHooks.addOnce(j);q.eventListenerHooks.addOnce("jqplotMouseMove",b);q.eventListenerHooks.addOnce("jqplotMouseDown",a);q.eventListenerHooks.addOnce("jqplotMouseUp",l);q.eventListenerHooks.addOnce("jqplotClick",e);q.eventListenerHooks.addOnce("jqplotRightClick",m)};function g(t,p,o,w){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=d.extend(true,[],this.data);var s=0;var u=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection=="vertical")?1:0;for(var q=0;q<this.data.length;q++){s+=this.data[q][u];if(q>0){this.data[q][u]+=this.data[q-1][u]}}this.data[this.data.length]=(u==1)?[this.data.length+1,s]:[s,this.data.length+1];this._data[this._data.length]=(u==1)?[this._data.length+1,s]:[s,this._data.length+1]}if(this.rendererOptions.groups>1){this.breakOnNull=true;var n=this.data.length;var v=parseInt(n/this.rendererOptions.groups,10);var r=0;for(var q=v;q<n;q+=v){this.data.splice(q+r,0,[null,null]);r++}for(q=0;q<this.data.length;q++){if(this._primaryAxis=="_xaxis"){this.data[q][0]=q+1}else{this.data[q][1]=q+1}}}}d.jqplot.preSeriesInitHooks.push(g);d.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var r=0;var t=0;var q=this[this._primaryAxis];var p,o,u;for(var n=0;n<q._series.length;n++){o=q._series[n];if(o===this){u=n}if(o.renderer.constructor==d.jqplot.BarRenderer){r+=o.data.length;t+=1}}return[r,t,u]};d.jqplot.BarRenderer.prototype.setBarWidth=function(){var q;var n=0;var o=0;var t=this[this._primaryAxis];var x,r,v;var w=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);n=w[0];o=w[1];var u=t.numberTicks;var p=(u-1)/2;if(t.name=="xaxis"||t.name=="x2axis"){if(this._stack){this.barWidth=(t._offsets.max-t._offsets.min)/n*o-this.barMargin}else{this.barWidth=((t._offsets.max-t._offsets.min)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}else{if(this._stack){this.barWidth=(t._offsets.min-t._offsets.max)/n*o-this.barMargin}else{this.barWidth=((t._offsets.min-t._offsets.max)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}return[n,o]};function f(o){var q=[];for(var s=0;s<o.length;s++){var r=d.jqplot.getColorComponents(o[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var p=0;p<3;p++){n[p]=(t>570)?n[p]*0.8:n[p]+0.3*(255-n[p]);n[p]=parseInt(n[p],10)}q.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}return q}d.jqplot.BarRenderer.prototype.draw=function(E,J,q){var G;var A=(q!=undefined)?q:{};var v=(A.shadow!=undefined)?A.shadow:this.shadow;var M=(A.showLine!=undefined)?A.showLine:this.showLine;var F=(A.fill!=undefined)?A.fill:this.fill;var p=this.xaxis;var H=this.yaxis;var y=this._xaxis.series_u2p;var I=this._yaxis.series_u2p;var D,C,x,w,s;this._dataColors=[];this._barPoints=[];if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var L=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);x=L[0];w=L[1];s=L[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(w/2-0.5)+s)*(this.barWidth+this.barPadding)}if(M){var u=new d.jqplot.ColorGenerator(this.negativeSeriesColors);var B=new d.jqplot.ColorGenerator(this.seriesColors);var K=u.get(this.index);if(!this.useNegativeColors){K=A.fillStyle}var t=A.fillStyle;if(this.barDirection=="vertical"){for(var G=0;G<J.length;G++){if(this.data[G][1]==null){continue}points=[];var r=J[G][0]+this._barNudge;var o;if(this._stack&&this._prevGridData.length){o=this._prevGridData[G][1]}else{if(this.fillToZero){o=this._yaxis.series_u2p(0)}else{if(this.waterfall&&G>0&&G<this.gridData.length-1){o=this.gridData[G-1][1]}else{o=E.canvas.height}}}if((this.fillToZero&&this._plotData[G][1]<0)||(this.waterfall&&this._data[G][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=K}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}points.push([r-this.barWidth/2,o]);points.push([r-this.barWidth/2,J[G][1]]);points.push([r+this.barWidth/2,J[G][1]]);points.push([r+this.barWidth/2,o]);this._barPoints.push(points);if(v&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,points,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,points,A)}}else{if(this.barDirection=="horizontal"){for(var G=0;G<J.length;G++){if(this.data[G][0]==null){continue}points=[];var r=J[G][1]-this._barNudge;var N;if(this._stack&&this._prevGridData.length){N=this._prevGridData[G][0]}else{if(this.fillToZero){N=this._xaxis.series_u2p(0)}else{if(this.waterfall&&G>0&&G<this.gridData.length-1){N=this.gridData[G-1][1]}else{N=0}}}if((this.fillToZero&&this._plotData[G][1]<0)||(this.waterfall&&this._data[G][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}points.push([N,r+this.barWidth/2]);points.push([N,r-this.barWidth/2]);points.push([J[G][0],r-this.barWidth/2]);points.push([J[G][0],r+this.barWidth/2]);this._barPoints.push(points);if(v&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,points,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,points,A)}}}}if(this.highlightColors.length==0){this.highlightColors=f(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){var L=this.highlightColors;this.highlightColors=[];for(var G=0;G<this._dataColors.length;G++){this.highlightColors.push(L)}}}};d.jqplot.BarRenderer.prototype.drawShadow=function(z,E,p){var B;var w=(p!=undefined)?p:{};var s=(w.shadow!=undefined)?w.shadow:this.shadow;var G=(w.showLine!=undefined)?w.showLine:this.showLine;var A=(w.fill!=undefined)?w.fill:this.fill;var o=this.xaxis;var C=this.yaxis;var v=this._xaxis.series_u2p;var D=this._yaxis.series_u2p;var y,x,u,t,r;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var F=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);u=F[0];t=F[1];r=F[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(t/2-0.5)+r)*(this.barWidth+this.barPadding)}if(G){if(this.barDirection=="vertical"){for(var B=0;B<E.length;B++){if(this.data[B][1]==null){continue}points=[];var q=E[B][0]+this._barNudge;var n;if(this._stack&&this._prevGridData.length){n=this._prevGridData[B][1]}else{if(this.fillToZero){n=this._yaxis.series_u2p(0)}else{n=z.canvas.height}}points.push([q-this.barWidth/2,n]);points.push([q-this.barWidth/2,E[B][1]]);points.push([q+this.barWidth/2,E[B][1]]);points.push([q+this.barWidth/2,n]);this.renderer.shadowRenderer.draw(z,points,w)}}else{if(this.barDirection=="horizontal"){for(var B=0;B<E.length;B++){if(this.data[B][0]==null){continue}points=[];var q=E[B][1]-this._barNudge;var H;if(this._stack&&this._prevGridData.length){H=this._prevGridData[B][0]}else{H=0}points.push([H,q+this.barWidth/2]);points.push([E[B][0],q+this.barWidth/2]);points.push([E[B][0],q-this.barWidth/2]);points.push([H,q-this.barWidth/2]);this.renderer.shadowRenderer.draw(z,points,w)}}}}}};function h(p,o,n){for(i=0;i<this.series.length;i++){if(this.series[i].renderer.constructor==d.jqplot.BarRenderer){if(this.series[i].highlightMouseOver){this.series[i].highlightMouseDown=false}}}this.target.bind("mouseout",{plot:this},function(q){k(q.data.plot)})}function j(){this.plugins.barRenderer={highlightedSeriesIndex:null};this.plugins.barRenderer.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-barRenderer-highlight-canvas",this._plotDimensions));var n=this.plugins.barRenderer.highlightCanvas.setContext()}function c(u,t,q,p){var o=u.series[t];var n=u.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=q;u.plugins.barRenderer.highlightedSeriesIndex=t;var r={fillStyle:o.highlightColors[q]};o.renderer.shapeRenderer.draw(n._ctx,p,r)}function k(p){var n=p.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.barRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.barRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);c(s,t.seriesIndex,t.pointIndex,t.points)}}else{if(t==null){k(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.barRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);c(r,s.seriesIndex,s.pointIndex,s.points)}}else{if(s==null){k(r)}}}function l(p,o,s,r,q){var n=q.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){k(q)}}function e(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){k(s)}var o=jQuery.Event("jqplotDataRightClick");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.blockRenderer.js.



























































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.BlockRenderer
     * Plugin renderer to draw a x-y block chart.  A Block chart has data points displayed as
     * colored squares with a text label inside.  Data must be supplied in the form:
     * 
     * > [[x1, y1, "label 1", {css}], [x2, y2, "label 2", {css}], ...]
     * 
     * The label and css object are optional.  If the label is ommitted, the
     * box will collapse unless a css height and/or width is specified.
     * 
     * The css object is an object specifying css properties 
     * such as:
     * 
     * > {background:'#4f98a5', border:'3px solid gray', padding:'1px'}
     * 
     * Note that css properties specified with the data point override defaults
     * specified with the series.
     * 
     */
    $.jqplot.BlockRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.BlockRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.BlockRenderer.prototype.constructor = $.jqplot.BlockRenderer;
    
    // called with scope of a series
    $.jqplot.BlockRenderer.prototype.init = function(options) {
        // Group: Properties
        //
        // prop: css
        // default css styles that will be applied to all data blocks.
        // these values will be overridden by css styles supplied with the
        // individulal data points.
        this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'};
        // prop: escapeHtml
        // true to escape html in the box label.
        this.escapeHtml = false;
        // prop: insertBreaks
        // true to turn spaces in data block label into html breaks <br />.
        this.insertBreaks = true;
        // prop: varyBlockColors
        // true to vary the color of each block in this series according to
        // the seriesColors array.  False to set each block to the color
        // specified on this series.  This has no effect if a css background color
        // option is specified in the renderer css options.
        this.varyBlockColors = false;
        $.extend(true, this, options);
        if (this.css.backgroundColor) {
            this.color = this.css.backgroundColor;
        }
        else if (this.css.background) {
            this.color = this.css.background;
        }
        else if (!this.varyBlockColors) {
            this.css.background = this.color;
        }
        this.canvas = new $.jqplot.BlockCanvas();
        this.shadowCanvas =  new $.jqplot.BlockCanvas();
        this.canvas._plotDimensions = this._plotDimensions;
        this.shadowCanvas._plotDimensions = this._plotDimensions;
        
        // group: Methods 
        //
        // Method: moveBlock
        // Moves an individual block.  More efficient than redrawing
        // the whole series by calling plot.drawSeries().
        // Properties:
        // idx - the 0 based index of the block or point in this series.
        // x - the x coordinate in data units (value on x axis) to move the block to.
        // y - the y coordinate in data units (value on the y axis) to move the block to.
        // duration - optional parameter to create an animated movement.  Can be a
        // number (higher is slower animation) or 'fast', 'normal' or 'slow'.  If not
        // provided, the element is moved without any animation.
        this.moveBlock = function (idx, x, y, duration) {
            // update plotData, stackData, data and gridData
            // x and y are in data coordinates.
            var el = this.canvas._elem.children(':eq('+idx+')');
            this.data[idx][0] = x;
            this.data[idx][1] = y;
            this._plotData[idx][0] = x;
            this._plotData[idx][1] = y;
            this._stackData[idx][0] = x;
            this._stackData[idx][1] = y;
            this.gridData[idx][0] = this._xaxis.series_u2p(x);
            this.gridData[idx][1] = this._yaxis.series_u2p(y);
            var w = el.outerWidth();
            var h = el.outerHeight();
            var left = this.gridData[idx][0] - w/2 + 'px';
            var top = this.gridData[idx][1] - h/2 + 'px';
            if (duration) {
                if (parseInt(duration, 10)) {
                    duration = parseInt(duration, 10);
                }
                el.animate({left:left, top:top}, duration);
            }
            else {
                el.css({left:left, top:top});
            }
            el = null;
        };
    };
    
    // called with scope of series
    $.jqplot.BlockRenderer.prototype.draw = function (ctx, gd, options) {
        if (this.plugins.pointLabels) {
            this.plugins.pointLabels.show = false;
        }
        var i, el, d, gd, t, css, w, h, left, top;
        var opts = (options != undefined) ? options : {};
        var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
        this.canvas._elem.empty();
        for (i=0; i<this.gridData.length; i++) {
            d = this.data[i];
            gd = this.gridData[i];
            t = '';
            css = {};
            if (typeof d[2] == 'string') {
                t = d[2];
            }
            else if (typeof d[2] == 'object') {
                css = d[2];
            }
            if (typeof d[3] ==  'object') {
                css = d[3];
            }
            if (this.insertBreaks){ 
                t = t.replace(/ /g, '<br />');
            }
            css = $.extend(true, {}, this.css, css);
            // create a div
            el = $('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');
            this.canvas._elem.append(el);
            // set text
            this.escapeHtml ? el.text(t) : el.html(t);
            // style it
            // remove styles we don't want overridden.
            delete css.position;
            delete css.marginRight;
            delete css.marginLeft;
            if (!css.background && !css.backgroundColor && !css.backgroundImage){ 
                css.background = colorGenerator.next();
            }
            el.css(css);
            w = el.outerWidth();
            h = el.outerHeight();
            left = gd[0] - w/2 + 'px';
            top = gd[1] - h/2 + 'px';
            el.css({left:left, top:top});
            el = null;
        }
    };
    
    $.jqplot.BlockCanvas = function() {
        $.jqplot.ElemContainer.call(this);
        this._ctx;  
    };
    
    $.jqplot.BlockCanvas.prototype = new $.jqplot.ElemContainer();
    $.jqplot.BlockCanvas.prototype.constructor = $.jqplot.BlockCanvas;
    
    $.jqplot.BlockCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
        this._offsets = offsets;
        var klass = 'jqplot-blockCanvas';
        if (clss != undefined) {
            klass = clss;
        }
        var elem;
        // if this canvas already has a dom element, don't make a new one.
        if (this._elem) {
            elem = this._elem.get(0);
        }
        else {
            elem = document.createElement('div');
        }
        // if new plotDimensions supplied, use them.
        if (plotDimensions != undefined) {
            this._plotDimensions = plotDimensions;
        }
        
        var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px';
        var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px';
        this._elem = $(elem);
        this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top });
        
        this._elem.addClass(klass);
        return this._elem;
    };
    
    $.jqplot.BlockCanvas.prototype.setContext = function() {
        this._ctx = {
            canvas:{
                width:0,
                height:0
            },
            clearRect:function(){return null;}
        };
        return this._ctx;
    };
    
})(jQuery);
    
    

Added Site/Site_W/jpqplot/plugins/jqplot.blockRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.BlockRenderer=function(){a.jqplot.LineRenderer.call(this)};a.jqplot.BlockRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.BlockRenderer.prototype.constructor=a.jqplot.BlockRenderer;a.jqplot.BlockRenderer.prototype.init=function(b){this.css={padding:"2px",border:"1px solid #999",textAlign:"center"};this.escapeHtml=false;this.insertBreaks=true;this.varyBlockColors=false;a.extend(true,this,b);if(this.css.backgroundColor){this.color=this.css.backgroundColor}else{if(this.css.background){this.color=this.css.background}else{if(!this.varyBlockColors){this.css.background=this.color}}}this.canvas=new a.jqplot.BlockCanvas();this.shadowCanvas=new a.jqplot.BlockCanvas();this.canvas._plotDimensions=this._plotDimensions;this.shadowCanvas._plotDimensions=this._plotDimensions;this.moveBlock=function(l,j,i,e){var c=this.canvas._elem.children(":eq("+l+")");this.data[l][0]=j;this.data[l][1]=i;this._plotData[l][0]=j;this._plotData[l][1]=i;this._stackData[l][0]=j;this._stackData[l][1]=i;this.gridData[l][0]=this._xaxis.series_u2p(j);this.gridData[l][1]=this._yaxis.series_u2p(i);var k=c.outerWidth();var f=c.outerHeight();var d=this.gridData[l][0]-k/2+"px";var g=this.gridData[l][1]-f/2+"px";if(e){if(parseInt(e,10)){e=parseInt(e,10)}c.animate({left:d,top:g},e)}else{c.css({left:d,top:g})}c=null}};a.jqplot.BlockRenderer.prototype.draw=function(q,o,r){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var f,c,l,o,p,k,n,g,e,m;var b=(r!=undefined)?r:{};var j=new a.jqplot.ColorGenerator(this.seriesColors);this.canvas._elem.empty();for(f=0;f<this.gridData.length;f++){l=this.data[f];o=this.gridData[f];p="";k={};if(typeof l[2]=="string"){p=l[2]}else{if(typeof l[2]=="object"){k=l[2]}}if(typeof l[3]=="object"){k=l[3]}if(this.insertBreaks){p=p.replace(/ /g,"<br />")}k=a.extend(true,{},this.css,k);c=a('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');this.canvas._elem.append(c);this.escapeHtml?c.text(p):c.html(p);delete k.position;delete k.marginRight;delete k.marginLeft;if(!k.background&&!k.backgroundColor&&!k.backgroundImage){k.background=j.next()}c.css(k);n=c.outerWidth();g=c.outerHeight();e=o[0]-n/2+"px";m=o[1]-g/2+"px";c.css({left:e,top:m});c=null}};a.jqplot.BlockCanvas=function(){a.jqplot.ElemContainer.call(this);this._ctx};a.jqplot.BlockCanvas.prototype=new a.jqplot.ElemContainer();a.jqplot.BlockCanvas.prototype.constructor=a.jqplot.BlockCanvas;a.jqplot.BlockCanvas.prototype.createElement=function(i,e,c){this._offsets=i;var b="jqplot-blockCanvas";if(e!=undefined){b=e}var g;if(this._elem){g=this._elem.get(0)}else{g=document.createElement("div")}if(c!=undefined){this._plotDimensions=c}var d=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var f=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=a(g);this._elem.css({position:"absolute",width:d,height:f,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(b);return this._elem};a.jqplot.BlockCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.bubbleRenderer.js.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    var arrayMax = function( array ){
        return Math.max.apply( Math, array );
    };
    var arrayMin = function( array ){
        return Math.min.apply( Math, array );
    };

    /**
     * Class: $.jqplot.BubbleRenderer
     * Plugin renderer to draw a bubble chart.  A Bubble chart has data points displayed as
     * colored circles with an optional text label inside.  To use
     * the bubble renderer, you must include the bubble renderer like:
     * 
     * > <script language="javascript" type="text/javascript" src="../src/plugins/jqplot.bubbleRenderer.js"></script>
     * 
     * Data must be supplied in 
     * the form:
     * 
     * > [[x1, y1, r1, <label or {label:'text', color:color}>], ...]
     * 
     * where the label or options 
     * object is optional.  
     * 
     * Note that all bubble colors will be the same
     * unless the "varyBubbleColors" option is set to true.  Colors can be specified in the data array
     * or in the seriesColors array option on the series.  If no colors are defined, the default jqPlot
     * series of 16 colors are used.  Colors are automatically cycled around again if there are more
     * bubbles than colors.
     * 
     * Bubbles are autoscaled by default to fit within the chart area while maintaining 
     * relative sizes.  If the "autoscaleBubbles" option is set to false, the r(adius) values
     * in the data array a treated as literal pixel values for the radii of the bubbles.
     * 
     * Properties are passed into the bubble renderer in the rendererOptions object of
     * the series options like:
     * 
     * > seriesDefaults: {
     * >     renderer: $.jqplot.BubbleRenderer,
     * >     rendererOptions: {
     * >         bubbleAlpha: 0.7,
     * >         varyBubbleColors: false
     * >     }
     * > }
     * 
     */
    $.jqplot.BubbleRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.BubbleRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.BubbleRenderer.prototype.constructor = $.jqplot.BubbleRenderer;
    
    // called with scope of a series
    $.jqplot.BubbleRenderer.prototype.init = function(options, plot) {
        // Group: Properties
        //
        // prop: varyBubbleColors
        // True to vary the color of each bubble in this series according to
        // the seriesColors array.  False to set each bubble to the color
        // specified on this series.  This has no effect if a css background color
        // option is specified in the renderer css options.
        this.varyBubbleColors = true;
        // prop: autoscaleBubbles
        // True to scale the bubble radius based on plot size.
        // False will use the radius value as provided as a raw pixel value for
        // bubble radius.
        this.autoscaleBubbles = true;
        // prop: autoscaleMultiplier
        // Multiplier the bubble size if autoscaleBubbles is true.
        this.autoscaleMultiplier = 1.0;
        // prop: autoscalePointsFactor
        // Factor which decreases bubble size based on how many bubbles on on the chart.
        // 0 means no adjustment for number of bubbles.  Negative values will decrease
        // size of bubbles as more bubbles are added.  Values between 0 and -0.2
        // should work well.
        this.autoscalePointsFactor = -0.07;
        // prop: escapeHtml
        // True to escape html in bubble label text.
        this.escapeHtml = true;
        // prop: highlightMouseOver
        // True to highlight bubbles when moused over.
        // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
        this.highlightMouseOver = true;
        // prop: highlightMouseDown
        // True to highlight when a mouse button is pressed over a bubble.
        // This will be disabled if highlightMouseOver is true.
        this.highlightMouseDown = false;
        // prop: highlightColors
        // An array of colors to use when highlighting a slice.  Calculated automatically
        // if not supplied.
        this.highlightColors = [];
        // prop: bubbleAlpha
        // Alpha transparency to apply to all bubbles in this series.
        this.bubbleAlpha = 1.0;
        // prop: highlightAlpha
        // Alpha transparency to apply when highlighting bubble.
        // Set to value of bubbleAlpha by default.
        this.highlightAlpha = null;
        // prop: bubbleGradients
        // True to color the bubbles with gradient fills instead of flat colors.
        // NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills.
        // will be ignored in IE.
        this.bubbleGradients = false;
        // prop: showLabels
        // True to show labels on bubbles (if any), false to not show.
        this.showLabels = true;
        // array of [point index, radius] which will be sorted in descending order to plot 
        // largest points below smaller points.
        this.radii = [];
        this.maxRadius = 0;
        // index of the currenty highlighted point, if any
        this._highlightedPoint = null;
        // array of jQuery labels.
        this.labels = [];
        this.bubbleCanvases = [];
        
        // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
        if (options.highlightMouseDown && options.highlightMouseOver == null) {
            options.highlightMouseOver = false;
        }
        
        $.extend(true, this, options);
        
        if (this.highlightAlpha == null) {
            this.highlightAlpha = this.bubbleAlpha;
            if (this.bubbleGradients) {
                this.highlightAlpha = 0.35;
            }
        }
        
        this.autoscaleMultiplier = this.autoscaleMultiplier * Math.pow(this.data.length, this.autoscalePointsFactor);
        
        // index of the currenty highlighted point, if any
        this._highlightedPoint = null;
        
        // adjust the series colors for options colors passed in with data or for alpha.
        // note, this can leave undefined holes in the seriesColors array.
        for (var i=0; i<this.data.length; i++) {
            var color = null;
            var d = this.data[i];
            this.maxRadius = Math.max(this.maxRadius, d[2]);
            if (d[3]) {
                if (typeof(d[3]) == 'object') {
                    color = d[3]['color'];
                }
            }
            
            if (color == null) {
                if (this.seriesColors[i] != null) {
                    color = this.seriesColors[i];
                }
            }
            
            if (color && this.bubbleAlpha < 1.0) {
                comps = $.jqplot.getColorComponents(color);
                color = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', '+this.bubbleAlpha+')';
            }
            
            if (color) {
                this.seriesColors[i] = color;
            }
        }
        
        if (!this.varyBubbleColors) {
            this.seriesColors = [this.color];
        }
        
        this.colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
        
        // set highlight colors if none provided
        if (this.highlightColors.length == 0) {
            for (var i=0; i<this.seriesColors.length; i++){
                var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
                var newrgb = [rgba[0], rgba[1], rgba[2]];
                var sum = newrgb[0] + newrgb[1] + newrgb[2];
                for (var j=0; j<3; j++) {
                    // when darkening, lowest color component can be is 60.
                    newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
                    newrgb[j] = parseInt(newrgb[j], 10);
                }
                this.highlightColors.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+', '+this.highlightAlpha+')');
            }
        }
        
        this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors);
        
        var sopts = {fill:true, isarc:true, angle:this.shadowAngle, alpha:this.shadowAlpha, closePath:true};
        
        this.renderer.shadowRenderer.init(sopts);
        
        this.canvas = new $.jqplot.DivCanvas();
        this.canvas._plotDimensions = this._plotDimensions;
        
        plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
        plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
        plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
        plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
        plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
        plot.postDrawHooks.addOnce(postPlotDraw);
        
    };
    

    // converts the user data values to grid coordinates and stores them
    // in the gridData array.
    // Called with scope of a series.
    $.jqplot.BubbleRenderer.prototype.setGridData = function(plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var data = this._plotData;
        this.gridData = [];
        var radii = [];
        this.radii = [];
        var dim = Math.min(plot._height, plot._width);
        for (var i=0; i<this.data.length; i++) {
            if (data[i] != null) {
                this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]);
                this.radii.push([i, data[i][2]]);
                radii.push(data[i][2]);
            }
        }
        var r, val, maxr = this.maxRadius = arrayMax(radii);
        var l = this.gridData.length;
        if (this.autoscaleBubbles) {
            for (var i=0; i<l; i++) {
                val = radii[i]/maxr;
                r = this.autoscaleMultiplier * dim / 6;
                this.gridData[i][2] = r * val;
            }
        }
        
        this.radii.sort(function(a, b) { return b[1] - a[1]; });
    };
    
    // converts any arbitrary data values to grid coordinates and
    // returns them.  This method exists so that plugins can use a series'
    // linerenderer to generate grid data points without overwriting the
    // grid data associated with that series.
    // Called with scope of a series.
    $.jqplot.BubbleRenderer.prototype.makeGridData = function(data, plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var gd = [];
        var radii = [];
        this.radii = [];
        var dim = Math.min(plot._height, plot._width);
        for (var i=0; i<data.length; i++) {
            if (data[i] != null) {
                gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]);
                radii.push(data[i][2]);
                this.radii.push([i, data[i][2]]);
            }
        }
        var r, val, maxr = this.maxRadius = arrayMax(radii);
        var l = this.gridData.length;
        if (this.autoscaleBubbles) {
            for (var i=0; i<l; i++) {
                val = radii[i]/maxr;
                r = this.autoscaleMultiplier * dim / 6;
                gd[i][2] = r * val;
            }
        }
        this.radii.sort(function(a, b) { return b[1] - a[1]; });
        return gd;
    };
    
    // called with scope of series
    $.jqplot.BubbleRenderer.prototype.draw = function (ctx, gd, options) {
        if (this.plugins.pointLabels) {
            this.plugins.pointLabels.show = false;
        }
        var opts = (options != undefined) ? options : {};
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        this.canvas._elem.empty();
        for (var i=0; i<this.radii.length; i++) {
            var idx = this.radii[i][0];
            var t=null;
            var color = null;
            var el = tel = null;
            var d = this.data[idx];
            var gd = this.gridData[idx];
            if (d[3]) {
                if (typeof(d[3]) == 'object') {
                    t = d[3]['label'];
                }
                else if (typeof(d[3]) == 'string') {
                    t = d[3];
                }
            }
            
            // color = (this.varyBubbleColors) ? this.colorGenerator.get(idx) : this.color;
            color = this.colorGenerator.get(idx);
            
            // If we're drawing a shadow, expand the canvas dimensions to accomodate.
            var canvasRadius = gd[2];
            var offset, depth;
            if (this.shadow) {
                offset = (0.7 + gd[2]/40).toFixed(1);
                depth = 1 + Math.ceil(gd[2]/15);
                canvasRadius += offset*depth;
            }
            this.bubbleCanvases[idx] = new $.jqplot.BubbleCanvas();
            this.canvas._elem.append(this.bubbleCanvases[idx].createElement(gd[0], gd[1], canvasRadius));
            this.bubbleCanvases[idx].setContext();
            var ctx = this.bubbleCanvases[idx]._ctx;
            var x = ctx.canvas.width/2;
            var y = ctx.canvas.height/2;
            if (this.shadow) {
                this.renderer.shadowRenderer.draw(ctx, [x, y, gd[2], 0, 2*Math.PI], {offset: offset, depth: depth});
            }
            this.bubbleCanvases[idx].draw(gd[2], color, this.bubbleGradients, this.shadowAngle/180*Math.PI);
            
            // now draw label.
            if (t && this.showLabels) {
                tel = $('<div style="position:absolute;" class="jqplot-bubble-label"></div>');
                if (this.escapeHtml) {
                    tel.text(t);
                }
                else {
                    tel.html(t);
                }
                this.canvas._elem.append(tel);
                var h = $(tel).outerHeight();
                var w = $(tel).outerWidth();
                var top = gd[1] - 0.5*h;
                var left = gd[0] - 0.5*w;
                tel.css({top: top, left: left});
                this.labels[idx] = $(tel);
            }
        }
    };

    
    $.jqplot.DivCanvas = function() {
        $.jqplot.ElemContainer.call(this);
        this._ctx;  
    };
    
    $.jqplot.DivCanvas.prototype = new $.jqplot.ElemContainer();
    $.jqplot.DivCanvas.prototype.constructor = $.jqplot.DivCanvas;
    
    $.jqplot.DivCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
        this._offsets = offsets;
        var klass = 'jqplot-DivCanvas';
        if (clss != undefined) {
            klass = clss;
        }
        var elem;
        // if this canvas already has a dom element, don't make a new one.
        if (this._elem) {
            elem = this._elem.get(0);
        }
        else {
            elem = document.createElement('div');
        }
        // if new plotDimensions supplied, use them.
        if (plotDimensions != undefined) {
            this._plotDimensions = plotDimensions;
        }
        
        var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px';
        var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px';
        this._elem = $(elem);
        this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top });
        
        this._elem.addClass(klass);
        return this._elem;
    };
    
    $.jqplot.DivCanvas.prototype.setContext = function() {
        this._ctx = {
            canvas:{
                width:0,
                height:0
            },
            clearRect:function(){return null;}
        };
        return this._ctx;
    };
    
    $.jqplot.BubbleCanvas = function() {
        $.jqplot.ElemContainer.call(this);
        this._ctx;
    };
    
    $.jqplot.BubbleCanvas.prototype = new $.jqplot.ElemContainer();
    $.jqplot.BubbleCanvas.prototype.constructor = $.jqplot.BubbleCanvas;
    
    // initialize with the x,y pont of bubble center and the bubble radius.
    $.jqplot.BubbleCanvas.prototype.createElement = function(x, y, r) {     
        var klass = 'jqplot-bubble-point';

        var elem;
        // if this canvas already has a dom element, don't make a new one.
        if (this._elem) {
            elem = this._elem.get(0);
        }
        else {
            elem = document.createElement('canvas');
        }
        
        elem.width = (r != null) ? 2*r : elem.width;
        elem.height = (r != null) ? 2*r : elem.height;
        this._elem = $(elem);
        var l = (x != null && r != null) ? x - r : this._elem.css('left');
        var t = (y != null && r != null) ? y - r : this._elem.css('top');
        this._elem.css({ position: 'absolute', left: l, top: t });
        
        this._elem.addClass(klass);
        if ($.jqplot.use_excanvas) {
            window.G_vmlCanvasManager.init_(document);
            elem = window.G_vmlCanvasManager.initElement(elem);
        }
        
        return this._elem;
    };
    
    $.jqplot.BubbleCanvas.prototype.draw = function(r, color, gradients, angle) {
        var ctx = this._ctx;
        // r = Math.floor(r*1.04);
        // var x = Math.round(ctx.canvas.width/2);
        // var y = Math.round(ctx.canvas.height/2);
        var x = ctx.canvas.width/2;
        var y = ctx.canvas.height/2;
        ctx.save();
        if (gradients && !$.browser.msie) {
            r = r*1.04;
            var comps = $.jqplot.getColorComponents(color);
            var colorinner = 'rgba('+Math.round(comps[0]+0.8*(255-comps[0]))+', '+Math.round(comps[1]+0.8*(255-comps[1]))+', '+Math.round(comps[2]+0.8*(255-comps[2]))+', '+comps[3]+')';
            var colorend = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', 0)';
            // var rinner = Math.round(0.35 * r);
            // var xinner = Math.round(x - Math.cos(angle) * 0.33 * r);
            // var yinner = Math.round(y - Math.sin(angle) * 0.33 * r);
            var rinner = 0.35 * r;
            var xinner = x - Math.cos(angle) * 0.33 * r;
            var yinner = y - Math.sin(angle) * 0.33 * r;
            var radgrad = ctx.createRadialGradient(xinner, yinner, rinner, x, y, r);
            radgrad.addColorStop(0, colorinner);
            radgrad.addColorStop(0.93, color);
            radgrad.addColorStop(0.96, colorend);
            radgrad.addColorStop(1, colorend);
            // radgrad.addColorStop(.98, colorend);
            ctx.fillStyle = radgrad;
            ctx.fillRect(0,0, ctx.canvas.width, ctx.canvas.height);
        }
        else {
            ctx.fillStyle = color;
            ctx.strokeStyle = color;
            ctx.lineWidth = 1;
            ctx.beginPath();
            var ang = 2*Math.PI;
            ctx.arc(x, y, r, 0, ang, 0);
            ctx.closePath();
            ctx.fill();
        }
        ctx.restore();
    };
    
    $.jqplot.BubbleCanvas.prototype.setContext = function() {
        this._ctx = this._elem.get(0).getContext("2d");
        return this._ctx;
    };
    
    $.jqplot.BubbleAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.BubbleAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.BubbleAxisRenderer.prototype.constructor = $.jqplot.BubbleAxisRenderer;
        
    // called with scope of axis object.
    $.jqplot.BubbleAxisRenderer.prototype.init = function(options){
        $.extend(true, this, options);
        var db = this._dataBounds;
        var minsidx=minpidx=maxsids=maxpidx=maxr=minr=minMaxRadius=maxMaxRadius=maxMult=minMult=0;
        // Go through all the series attached to this axis and find
        // the min/max bounds for this axis.
        for (var i=0; i<this._series.length; i++) {
            var s = this._series[i];
            var d = s._plotData;
            
            for (var j=0; j<d.length; j++) { 
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    if (d[j][0] < db.min || db.min == null) {
                        db.min = d[j][0];
                        minsidx=i;
                        minpidx=j;
                        minr = d[j][2];
                        minMaxRadius = s.maxRadius;
                        minMult = s.autoscaleMultiplier;
                    }
                    if (d[j][0] > db.max || db.max == null) {
                        db.max = d[j][0];
                        maxsidx=i;
                        maxpidx=j;
                        maxr = d[j][2];
                        maxMaxRadius = s.maxRadius;
                        maxMult = s.autoscaleMultiplier;
                    }
                }              
                else {
                    if (d[j][1] < db.min || db.min == null) {
                        db.min = d[j][1];
                        minsidx=i;
                        minpidx=j;
                        minr = d[j][2];
                        minMaxRadius = s.maxRadius;
                        minMult = s.autoscaleMultiplier;
                    }
                    if (d[j][1] > db.max || db.max == null) {
                        db.max = d[j][1];
                        maxsidx=i;
                        maxpidx=j;
                        maxr = d[j][2];
                        maxMaxRadius = s.maxRadius;
                        maxMult = s.autoscaleMultiplier;
                    }
                }              
            }
        }
        
        var minRatio = minr/minMaxRadius;
        var maxRatio = maxr/maxMaxRadius;
        
        // need to estimate the effect of the radius on total axis span and adjust axis accordingly.
        var span = db.max - db.min;
        // var dim = (this.name == 'xaxis' || this.name == 'x2axis') ? this._plotDimensions.width : this._plotDimensions.height;
        var dim = Math.min(this._plotDimensions.width, this._plotDimensions.height);
        
        var minfact = minRatio * minMult/3 * span;
        var maxfact = maxRatio * maxMult/3 * span;
        db.max += maxfact;
        db.min -= minfact;
    };
    
    function highlight (plot, sidx, pidx) {
        plot.plugins.bubbleRenderer.highlightLabelCanvas.empty();
        var s = plot.series[sidx];
        var canvas = plot.plugins.bubbleRenderer.highlightCanvas;
        var ctx = canvas._ctx;
        ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
        s._highlightedPoint = pidx;
        plot.plugins.bubbleRenderer.highlightedSeriesIndex = sidx;
        
        var color = s.highlightColorGenerator.get(pidx);
        var x = s.gridData[pidx][0],
            y = s.gridData[pidx][1],
            r = s.gridData[pidx][2];
        ctx.save();
        ctx.fillStyle = color;
        ctx.strokeStyle = color;
        ctx.lineWidth = 1;
        ctx.beginPath();
        ctx.arc(x, y, r, 0, 2*Math.PI, 0);
        ctx.closePath();
        ctx.fill();
        ctx.restore();        
        // bring label to front
        if (s.labels[pidx]) {
            plot.plugins.bubbleRenderer.highlightLabel = s.labels[pidx].clone();
            plot.plugins.bubbleRenderer.highlightLabel.appendTo(plot.plugins.bubbleRenderer.highlightLabelCanvas);
            plot.plugins.bubbleRenderer.highlightLabel.addClass('jqplot-bubble-label-highlight');
        }
    }
    
    function unhighlight (plot) {
        var canvas = plot.plugins.bubbleRenderer.highlightCanvas;
        var sidx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
        plot.plugins.bubbleRenderer.highlightLabelCanvas.empty();
        canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        for (var i=0; i<plot.series.length; i++) {
            plot.series[i]._highlightedPoint = null;
        }
        plot.plugins.bubbleRenderer.highlightedSeriesIndex = null;
        plot.target.trigger('jqplotDataUnhighlight');
    }
    
 
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var si = neighbor.seriesIndex;
            var pi = neighbor.pointIndex;
            var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
            var evt1 = jQuery.Event('jqplotDataMouseOver');
            evt1.pageX = ev.pageX;
            evt1.pageY = ev.pageY;
            plot.target.trigger(evt1, ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    } 
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var si = neighbor.seriesIndex;
            var pi = neighbor.pointIndex;
            var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
            if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
        var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
        if (idx != null && plot.series[idx].highlightMouseDown) {
            unhighlight(plot);
        }
    }
    
    function handleClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var si = neighbor.seriesIndex;
            var pi = neighbor.pointIndex;
            var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
            var evt = jQuery.Event('jqplotDataClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var si = neighbor.seriesIndex;
            var pi = neighbor.pointIndex;
            var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
            var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
            if (idx != null && plot.series[idx].highlightMouseDown) {
                unhighlight(plot);
            }
            var evt = jQuery.Event('jqplotDataRightClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    function postPlotDraw() {
        this.plugins.bubbleRenderer = {highlightedSeriesIndex:null};
        this.plugins.bubbleRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
        this.plugins.bubbleRenderer.highlightLabel = null;
        this.plugins.bubbleRenderer.highlightLabelCanvas = $('<div style="position:absolute;"></div>');
        var top = this._gridPadding.top;
        var left = this._gridPadding.left;
        var width = this._plotDimensions.width - this._gridPadding.left - this._gridPadding.right;
        var height = this._plotDimensions.height - this._gridPadding.top - this._gridPadding.bottom;
        this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:top, left:left, width:width+'px', height:height+'px'});

        this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-bubbleRenderer-highlight-canvas', this._plotDimensions));
        this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);
        
        var hctx = this.plugins.bubbleRenderer.highlightCanvas.setContext();
    }

    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = options.axesDefaults || {};
        options.seriesDefaults = options.seriesDefaults || {};
        // only set these if there is a Bubble series
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.BubbleRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.BubbleRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.BubbleAxisRenderer;
            options.sortData = false;
        }
    }
    
    $.jqplot.preInitHooks.push(preInit);
    
})(jQuery);
    
    

Added Site/Site_W/jpqplot/plugins/jqplot.bubbleRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(f){var d=function(m){return Math.max.apply(Math,m)};var j=function(m){return Math.min.apply(Math,m)};f.jqplot.BubbleRenderer=function(){f.jqplot.LineRenderer.call(this)};f.jqplot.BubbleRenderer.prototype=new f.jqplot.LineRenderer();f.jqplot.BubbleRenderer.prototype.constructor=f.jqplot.BubbleRenderer;f.jqplot.BubbleRenderer.prototype.init=function(v,s){this.varyBubbleColors=true;this.autoscaleBubbles=true;this.autoscaleMultiplier=1;this.autoscalePointsFactor=-0.07;this.escapeHtml=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.bubbleAlpha=1;this.highlightAlpha=null;this.bubbleGradients=false;this.showLabels=true;this.radii=[];this.maxRadius=0;this._highlightedPoint=null;this.labels=[];this.bubbleCanvases=[];if(v.highlightMouseDown&&v.highlightMouseOver==null){v.highlightMouseOver=false}f.extend(true,this,v);if(this.highlightAlpha==null){this.highlightAlpha=this.bubbleAlpha;if(this.bubbleGradients){this.highlightAlpha=0.35}}this.autoscaleMultiplier=this.autoscaleMultiplier*Math.pow(this.data.length,this.autoscalePointsFactor);this._highlightedPoint=null;for(var q=0;q<this.data.length;q++){var o=null;var u=this.data[q];this.maxRadius=Math.max(this.maxRadius,u[2]);if(u[3]){if(typeof(u[3])=="object"){o=u[3]["color"]}}if(o==null){if(this.seriesColors[q]!=null){o=this.seriesColors[q]}}if(o&&this.bubbleAlpha<1){comps=f.jqplot.getColorComponents(o);o="rgba("+comps[0]+", "+comps[1]+", "+comps[2]+", "+this.bubbleAlpha+")"}if(o){this.seriesColors[q]=o}}if(!this.varyBubbleColors){this.seriesColors=[this.color]}this.colorGenerator=new f.jqplot.ColorGenerator(this.seriesColors);if(this.highlightColors.length==0){for(var q=0;q<this.seriesColors.length;q++){var n=f.jqplot.getColorComponents(this.seriesColors[q]);var t=[n[0],n[1],n[2]];var r=t[0]+t[1]+t[2];for(var p=0;p<3;p++){t[p]=(r>570)?t[p]*0.8:t[p]+0.3*(255-t[p]);t[p]=parseInt(t[p],10)}this.highlightColors.push("rgba("+t[0]+","+t[1]+","+t[2]+", "+this.highlightAlpha+")")}}this.highlightColorGenerator=new f.jqplot.ColorGenerator(this.highlightColors);var m={fill:true,isarc:true,angle:this.shadowAngle,alpha:this.shadowAlpha,closePath:true};this.renderer.shadowRenderer.init(m);this.canvas=new f.jqplot.DivCanvas();this.canvas._plotDimensions=this._plotDimensions;s.eventListenerHooks.addOnce("jqplotMouseMove",a);s.eventListenerHooks.addOnce("jqplotMouseDown",b);s.eventListenerHooks.addOnce("jqplotMouseUp",k);s.eventListenerHooks.addOnce("jqplotClick",g);s.eventListenerHooks.addOnce("jqplotRightClick",l);s.postDrawHooks.addOnce(h)};f.jqplot.BubbleRenderer.prototype.setGridData=function(w){var q=this._xaxis.series_u2p;var m=this._yaxis.series_u2p;var t=this._plotData;this.gridData=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<this.data.length;u++){if(t[u]!=null){this.gridData.push([q.call(this._xaxis,t[u][0]),m.call(this._yaxis,t[u][1]),t[u][2]]);this.radii.push([u,t[u][2]]);s.push(t[u][2])}}var n,o,x=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/x;n=this.autoscaleMultiplier*v/6;this.gridData[u][2]=n*o}}this.radii.sort(function(y,r){return r[1]-y[1]})};f.jqplot.BubbleRenderer.prototype.makeGridData=function(t,w){var q=this._xaxis.series_u2p;var n=this._yaxis.series_u2p;var x=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<t.length;u++){if(t[u]!=null){x.push([q.call(this._xaxis,t[u][0]),n.call(this._yaxis,t[u][1]),t[u][2]]);s.push(t[u][2]);this.radii.push([u,t[u][2]])}}var m,o,y=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/y;m=this.autoscaleMultiplier*v/6;x[u][2]=m*o}}this.radii.sort(function(z,r){return r[1]-z[1]});return x};f.jqplot.BubbleRenderer.prototype.draw=function(C,I,n){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var z=(n!=undefined)?n:{};var q=(z.shadow!=undefined)?z.shadow:this.shadow;this.canvas._elem.empty();for(var F=0;F<this.radii.length;F++){var B=this.radii[F][0];var v=null;var E=null;var m=tel=null;var H=this.data[B];var I=this.gridData[B];if(H[3]){if(typeof(H[3])=="object"){v=H[3]["label"]}else{if(typeof(H[3])=="string"){v=H[3]}}}E=this.colorGenerator.get(B);var D=I[2];var p,J;if(this.shadow){p=(0.7+I[2]/40).toFixed(1);J=1+Math.ceil(I[2]/15);D+=p*J}this.bubbleCanvases[B]=new f.jqplot.BubbleCanvas();this.canvas._elem.append(this.bubbleCanvases[B].createElement(I[0],I[1],D));this.bubbleCanvases[B].setContext();var C=this.bubbleCanvases[B]._ctx;var s=C.canvas.width/2;var r=C.canvas.height/2;if(this.shadow){this.renderer.shadowRenderer.draw(C,[s,r,I[2],0,2*Math.PI],{offset:p,depth:J})}this.bubbleCanvases[B].draw(I[2],E,this.bubbleGradients,this.shadowAngle/180*Math.PI);if(v&&this.showLabels){tel=f('<div style="position:absolute;" class="jqplot-bubble-label"></div>');if(this.escapeHtml){tel.text(v)}else{tel.html(v)}this.canvas._elem.append(tel);var G=f(tel).outerHeight();var u=f(tel).outerWidth();var A=I[1]-0.5*G;var o=I[0]-0.5*u;tel.css({top:A,left:o});this.labels[B]=f(tel)}}};f.jqplot.DivCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.DivCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.DivCanvas.prototype.constructor=f.jqplot.DivCanvas;f.jqplot.DivCanvas.prototype.createElement=function(s,p,n){this._offsets=s;var m="jqplot-DivCanvas";if(p!=undefined){m=p}var r;if(this._elem){r=this._elem.get(0)}else{r=document.createElement("div")}if(n!=undefined){this._plotDimensions=n}var o=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var q=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=f(r);this._elem.css({position:"absolute",width:o,height:q,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(m);return this._elem};f.jqplot.DivCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx};f.jqplot.BubbleCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.BubbleCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.BubbleCanvas.prototype.constructor=f.jqplot.BubbleCanvas;f.jqplot.BubbleCanvas.prototype.createElement=function(n,u,s){var m="jqplot-bubble-point";var q;if(this._elem){q=this._elem.get(0)}else{q=document.createElement("canvas")}q.width=(s!=null)?2*s:q.width;q.height=(s!=null)?2*s:q.height;this._elem=f(q);var o=(n!=null&&s!=null)?n-s:this._elem.css("left");var p=(u!=null&&s!=null)?u-s:this._elem.css("top");this._elem.css({position:"absolute",left:o,top:p});this._elem.addClass(m);if(f.jqplot.use_excanvas){window.G_vmlCanvasManager.init_(document);q=window.G_vmlCanvasManager.initElement(q)}return this._elem};f.jqplot.BubbleCanvas.prototype.draw=function(m,s,v,p){var D=this._ctx;var B=D.canvas.width/2;var z=D.canvas.height/2;D.save();if(v&&!f.browser.msie){m=m*1.04;var o=f.jqplot.getColorComponents(s);var u="rgba("+Math.round(o[0]+0.8*(255-o[0]))+", "+Math.round(o[1]+0.8*(255-o[1]))+", "+Math.round(o[2]+0.8*(255-o[2]))+", "+o[3]+")";var t="rgba("+o[0]+", "+o[1]+", "+o[2]+", 0)";var C=0.35*m;var A=B-Math.cos(p)*0.33*m;var n=z-Math.sin(p)*0.33*m;var w=D.createRadialGradient(A,n,C,B,z,m);w.addColorStop(0,u);w.addColorStop(0.93,s);w.addColorStop(0.96,t);w.addColorStop(1,t);D.fillStyle=w;D.fillRect(0,0,D.canvas.width,D.canvas.height)}else{D.fillStyle=s;D.strokeStyle=s;D.lineWidth=1;D.beginPath();var q=2*Math.PI;D.arc(B,z,m,0,q,0);D.closePath();D.fill()}D.restore()};f.jqplot.BubbleCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};f.jqplot.BubbleAxisRenderer=function(){f.jqplot.LinearAxisRenderer.call(this)};f.jqplot.BubbleAxisRenderer.prototype=new f.jqplot.LinearAxisRenderer();f.jqplot.BubbleAxisRenderer.prototype.constructor=f.jqplot.BubbleAxisRenderer;f.jqplot.BubbleAxisRenderer.prototype.init=function(z){f.extend(true,this,z);var x=this._dataBounds;var t=minpidx=maxsids=maxpidx=maxr=minr=minMaxRadius=maxMaxRadius=maxMult=minMult=0;for(var o=0;o<this._series.length;o++){var y=this._series[o];var u=y._plotData;for(var n=0;n<u.length;n++){if(this.name=="xaxis"||this.name=="x2axis"){if(u[n][0]<x.min||x.min==null){x.min=u[n][0];t=o;minpidx=n;minr=u[n][2];minMaxRadius=y.maxRadius;minMult=y.autoscaleMultiplier}if(u[n][0]>x.max||x.max==null){x.max=u[n][0];maxsidx=o;maxpidx=n;maxr=u[n][2];maxMaxRadius=y.maxRadius;maxMult=y.autoscaleMultiplier}}else{if(u[n][1]<x.min||x.min==null){x.min=u[n][1];t=o;minpidx=n;minr=u[n][2];minMaxRadius=y.maxRadius;minMult=y.autoscaleMultiplier}if(u[n][1]>x.max||x.max==null){x.max=u[n][1];maxsidx=o;maxpidx=n;maxr=u[n][2];maxMaxRadius=y.maxRadius;maxMult=y.autoscaleMultiplier}}}}var r=minr/minMaxRadius;var m=maxr/maxMaxRadius;var w=x.max-x.min;var q=Math.min(this._plotDimensions.width,this._plotDimensions.height);var v=r*minMult/3*w;var p=m*maxMult/3*w;x.max+=p;x.min-=v};function e(p,v,q){p.plugins.bubbleRenderer.highlightLabelCanvas.empty();var z=p.series[v];var n=p.plugins.bubbleRenderer.highlightCanvas;var w=n._ctx;w.clearRect(0,0,w.canvas.width,w.canvas.height);z._highlightedPoint=q;p.plugins.bubbleRenderer.highlightedSeriesIndex=v;var o=z.highlightColorGenerator.get(q);var u=z.gridData[q][0],t=z.gridData[q][1],m=z.gridData[q][2];w.save();w.fillStyle=o;w.strokeStyle=o;w.lineWidth=1;w.beginPath();w.arc(u,t,m,0,2*Math.PI,0);w.closePath();w.fill();w.restore();if(z.labels[q]){p.plugins.bubbleRenderer.highlightLabel=z.labels[q].clone();p.plugins.bubbleRenderer.highlightLabel.appendTo(p.plugins.bubbleRenderer.highlightLabelCanvas);p.plugins.bubbleRenderer.highlightLabel.addClass("jqplot-bubble-label-highlight")}}function i(p){var m=p.plugins.bubbleRenderer.highlightCanvas;var o=p.plugins.bubbleRenderer.highlightedSeriesIndex;p.plugins.bubbleRenderer.highlightLabelCanvas.empty();m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<p.series.length;n++){p.series[n]._highlightedPoint=null}p.plugins.bubbleRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function a(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataMouseOver");t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);if(r.series[q[0]].highlightMouseOver&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var u=jQuery.Event("jqplotDataHighlight");u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q);e(r,q[0],q[1])}}else{if(v==null){i(r)}}}function b(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];if(r.series[q[0]].highlightMouseDown&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var t=jQuery.Event("jqplotDataHighlight");t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);e(r,q[0],q[1])}}else{if(u==null){i(r)}}}function k(o,n,r,q,p){var m=p.plugins.bubbleRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function g(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataClick");t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q)}}function l(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=r.plugins.bubbleRenderer.highlightedSeriesIndex;if(t!=null&&r.series[t].highlightMouseDown){i(r)}var u=jQuery.Event("jqplotDataRightClick");u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q)}}function h(){this.plugins.bubbleRenderer={highlightedSeriesIndex:null};this.plugins.bubbleRenderer.highlightCanvas=new f.jqplot.GenericCanvas();this.plugins.bubbleRenderer.highlightLabel=null;this.plugins.bubbleRenderer.highlightLabelCanvas=f('<div style="position:absolute;"></div>');var q=this._gridPadding.top;var p=this._gridPadding.left;var n=this._plotDimensions.width-this._gridPadding.left-this._gridPadding.right;var m=this._plotDimensions.height-this._gridPadding.top-this._gridPadding.bottom;this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:q,left:p,width:n+"px",height:m+"px"});this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-bubbleRenderer-highlight-canvas",this._plotDimensions));this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);var o=this.plugins.bubbleRenderer.highlightCanvas.setContext()}function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==f.jqplot.BubbleRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==f.jqplot.BubbleRenderer){m=true}}}}if(m){n.axesDefaults.renderer=f.jqplot.BubbleAxisRenderer;n.sortData=false}}f.jqplot.preInitHooks.push(c)})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.canvasAxisLabelRenderer.js.























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
    * Class: $.jqplot.CanvasAxisLabelRenderer
    * Renderer to draw axis labels with a canvas element to support advanced
    * featrues such as rotated text.  This renderer uses a separate rendering engine
    * to draw the text on the canvas.  Two modes of rendering the text are available.
    * If the browser has native font support for canvas fonts (currently Mozila 3.5
    * and Safari 4), you can enable text rendering with the canvas fillText method.
    * You do so by setting the "enableFontSupport" option to true. 
    * 
    * Browsers lacking native font support will have the text drawn on the canvas
    * using the Hershey font metrics.  Even if the "enableFontSupport" option is true
    * non-supporting browsers will still render with the Hershey font.
    * 
    */
    $.jqplot.CanvasAxisLabelRenderer = function(options) {
        // Group: Properties
        
        // prop: angle
        // angle of text, measured clockwise from x axis.
        this.angle = 0;
        // name of the axis associated with this tick
        this.axis;
        // prop: show
        // wether or not to show the tick (mark and label).
        this.show = true;
        // prop: showLabel
        // wether or not to show the label.
        this.showLabel = true;
        // prop: label
        // label for the axis.
        this.label = '';
        // prop: fontFamily
        // CSS spec for the font-family css attribute.
        // Applies only to browsers supporting native font rendering in the
        // canvas tag.  Currently Mozilla 3.5 and Safari 4.
        this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
        // prop: fontSize
        // CSS spec for font size.
        this.fontSize = '11pt';
        // prop: fontWeight
        // CSS spec for fontWeight:  normal, bold, bolder, lighter or a number 100 - 900
        this.fontWeight = 'normal';
        // prop: fontStretch
        // Multiplier to condense or expand font width.  
        // Applies only to browsers which don't support canvas native font rendering.
        this.fontStretch = 1.0;
        // prop: textColor
        // css spec for the color attribute.
        this.textColor = '#666666';
        // prop: enableFontSupport
        // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
        // If true, label will be drawn with canvas tag native support for fonts.
        // If false, label will be drawn with Hershey font metrics.
        this.enableFontSupport = true;
        // prop: pt2px
        // Point to pixel scaling factor, used for computing height of bounding box
        // around a label.  The labels text renderer has a default setting of 1.4, which 
        // should be suitable for most fonts.  Leave as null to use default.  If tops of
        // letters appear clipped, increase this.  If bounding box seems too big, decrease.
        // This is an issue only with the native font renderering capabilities of Mozilla
        // 3.5 and Safari 4 since they do not provide a method to determine the font height.
        this.pt2px = null;
        
        this._elem;
        this._ctx;
        this._plotWidth;
        this._plotHeight;
        this._plotDimensions = {height:null, width:null};
        
        $.extend(true, this, options);
        
        if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') {
            this.angle = -90;
        }
        
        var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
        if (this.pt2px) {
            ropts.pt2px = this.pt2px;
        }
        
        if (this.enableFontSupport) {
            
            function support_canvas_text() {
                return !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function');
            }
            
            if (support_canvas_text()) {
                this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
            }
            
            else {
                this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); 
            }
        }
        else {
            this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); 
        }
    };
    
    $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
        this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
    };
    
    // return width along the x axis
    // will check first to see if an element exists.
    // if not, will return the computed text box width.
    $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) {
        if (this._elem) {
         return this._elem.outerWidth(true);
        }
        else {
            var tr = this._textRenderer;
            var l = tr.getWidth(ctx);
            var h = tr.getHeight(ctx);
            var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
            return w;
        }
    };
    
    // return height along the y axis.
    $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) {
        if (this._elem) {
         return this._elem.outerHeight(true);
        }
        else {
            var tr = this._textRenderer;
            var l = tr.getWidth(ctx);
            var h = tr.getHeight(ctx);
            var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
            return w;
        }
    };
    
    $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() {
        var a = this.angle * Math.PI/180;
        return a;
    };
    
    $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx) {
        // create a canvas here, but can't draw on it untill it is appended
        // to dom for IE compatability.
        var domelem = document.createElement('canvas');
        this._textRenderer.setText(this.label, ctx);
        var w = this.getWidth(ctx);
        var h = this.getHeight(ctx);
        domelem.width = w;
        domelem.height = h;
        domelem.style.width = w;
        domelem.style.height = h;
        // domelem.style.textAlign = 'center';
        domelem.style.position = 'absolute';
        this._domelem = domelem;
        this._elem = $(domelem);
        this._elem.addClass('jqplot-'+this.axis+'-label');
        
        return this._elem;
    };
    
    $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() {
        if ($.jqplot.use_excanvas) {
            window.G_vmlCanvasManager.init_(document);
            this._domelem = window.G_vmlCanvasManager.initElement(this._domelem);
        }
        var ctx = this._elem.get(0).getContext("2d");
        this._textRenderer.draw(ctx, this.label);
    };
    
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){function d(){return !!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}if(d()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c){var e=document.createElement("canvas");this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.position="absolute";this._domelem=e;this._elem=a(e);this._elem.addClass("jqplot-"+this.axis+"-label");return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){if(a.jqplot.use_excanvas){window.G_vmlCanvasManager.init_(document);this._domelem=window.G_vmlCanvasManager.initElement(this._domelem)}var b=this._elem.get(0).getContext("2d");this._textRenderer.draw(b,this.label)}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.canvasAxisTickRenderer.js.





































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
    *  Class: $.jqplot.CanvasAxisTickRenderer
    * Renderer to draw axis ticks with a canvas element to support advanced
    * featrues such as rotated text.  This renderer uses a separate rendering engine
    * to draw the text on the canvas.  Two modes of rendering the text are available.
    * If the browser has native font support for canvas fonts (currently Mozila 3.5
    * and Safari 4), you can enable text rendering with the canvas fillText method.
    * You do so by setting the "enableFontSupport" option to true. 
    * 
    * Browsers lacking native font support will have the text drawn on the canvas
    * using the Hershey font metrics.  Even if the "enableFontSupport" option is true
    * non-supporting browsers will still render with the Hershey font.
    */
    $.jqplot.CanvasAxisTickRenderer = function(options) {
        // Group: Properties
        
        // prop: mark
        // tick mark on the axis.  One of 'inside', 'outside', 'cross', '' or null.
        this.mark = 'outside';
        // prop: showMark
        // wether or not to show the mark on the axis.
        this.showMark = true;
        // prop: showGridline
        // wether or not to draw the gridline on the grid at this tick.
        this.showGridline = true;
        // prop: isMinorTick
        // if this is a minor tick.
        this.isMinorTick = false;
        // prop: angle
        // angle of text, measured clockwise from x axis.
        this.angle = 0;
        // prop:  markSize
        // Length of the tick marks in pixels.  For 'cross' style, length
        // will be stoked above and below axis, so total length will be twice this.
        this.markSize = 4;
        // prop: show
        // wether or not to show the tick (mark and label).
        this.show = true;
        // prop: showLabel
        // wether or not to show the label.
        this.showLabel = true;
        // prop: labelPosition
        // 'auto', 'start', 'middle' or 'end'.
        // Whether tick label should be positioned so the start, middle, or end
        // of the tick mark.
        this.labelPosition = 'auto';
        this.label = '';
        this.value = null;
        this._styles = {};
        // prop: formatter
        // A class of a formatter for the tick text.
        // The default $.jqplot.DefaultTickFormatter uses sprintf.
        this.formatter = $.jqplot.DefaultTickFormatter;
        // prop: formatString
        // string passed to the formatter.
        this.formatString = '';
        // prop: prefix
        // string appended to the tick label if no formatString is specified.
        this.prefix = '';
        // prop: fontFamily
        // css spec for the font-family css attribute.
        this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
        // prop: fontSize
        // CSS spec for font size.
        this.fontSize = '10pt';
        // prop: fontWeight
        // CSS spec for fontWeight
        this.fontWeight = 'normal';
        // prop: fontStretch
        // Multiplier to condense or expand font width.  
        // Applies only to browsers which don't support canvas native font rendering.
        this.fontStretch = 1.0;
        // prop: textColor
        // css spec for the color attribute.
        this.textColor = '#666666';
        // prop: enableFontSupport
        // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
        // If true, tick label will be drawn with canvas tag native support for fonts.
        // If false, tick label will be drawn with Hershey font metrics.
        this.enableFontSupport = true;
        // prop: pt2px
        // Point to pixel scaling factor, used for computing height of bounding box
        // around a label.  The labels text renderer has a default setting of 1.4, which 
        // should be suitable for most fonts.  Leave as null to use default.  If tops of
        // letters appear clipped, increase this.  If bounding box seems too big, decrease.
        // This is an issue only with the native font renderering capabilities of Mozilla
        // 3.5 and Safari 4 since they do not provide a method to determine the font height.
        this.pt2px = null;
        
        this._elem;
        this._ctx;
        this._plotWidth;
        this._plotHeight;
        this._plotDimensions = {height:null, width:null};
        
        $.extend(true, this, options);
        
        var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
        if (this.pt2px) {
            ropts.pt2px = this.pt2px;
        }
        
        if (this.enableFontSupport) {
            
            function support_canvas_text() {
                return !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function');
            }
            
            if (support_canvas_text()) {
                this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
            }
            
            else {
                this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); 
            }
        }
        else {
            this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); 
        }
    };
    
    $.jqplot.CanvasAxisTickRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
        this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
    };
    
    // return width along the x axis
    // will check first to see if an element exists.
    // if not, will return the computed text box width.
    $.jqplot.CanvasAxisTickRenderer.prototype.getWidth = function(ctx) {
        if (this._elem) {
         return this._elem.outerWidth(true);
        }
        else {
            var tr = this._textRenderer;
            var l = tr.getWidth(ctx);
            var h = tr.getHeight(ctx);
            var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
            return w;
        }
    };
    
    // return height along the y axis.
    $.jqplot.CanvasAxisTickRenderer.prototype.getHeight = function(ctx) {
        if (this._elem) {
         return this._elem.outerHeight(true);
        }
        else {
            var tr = this._textRenderer;
            var l = tr.getWidth(ctx);
            var h = tr.getHeight(ctx);
            var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
            return w;
        }
    };
    
    $.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad = function() {
        var a = this.angle * Math.PI/180;
        return a;
    };
    
    
    $.jqplot.CanvasAxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) {
        this.value = value;
        if (isMinor) {
            this.isMinorTick = true;
        }
        return this;
    };
    
    $.jqplot.CanvasAxisTickRenderer.prototype.draw = function(ctx) {
        if (!this.label) {
            this.label = this.formatter(this.formatString, this.value);
        }
        // add prefix if needed
        if (this.prefix && !this.formatString) {
            this.label = this.prefix + this.label;
        }
        // create a canvas here, but can't draw on it untill it is appended
        // to dom for IE compatability.
        var domelem = document.createElement('canvas');
        this._textRenderer.setText(this.label, ctx);
        var w = this.getWidth(ctx);
        var h = this.getHeight(ctx);
        domelem.width = w;
        domelem.height = h;
        domelem.style.width = w;
        domelem.style.height = h;
        domelem.style.textAlign = 'left';
        domelem.style.position = 'absolute';
        this._domelem = domelem;
        this._elem = $(domelem);
        this._elem.css(this._styles);
        this._elem.addClass('jqplot-'+this.axis+'-tick');
        
        return this._elem;
    };
    
    $.jqplot.CanvasAxisTickRenderer.prototype.pack = function() {
        if ($.jqplot.use_excanvas) {
            window.G_vmlCanvasManager.init_(document);
            this._domelem = window.G_vmlCanvasManager.initElement(this._domelem);
        }
        var ctx = this._elem.get(0).getContext("2d");
        this._textRenderer.draw(ctx, this.label);
    };
    
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.canvasAxisTickRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){function d(){return !!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}if(d()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c){if(!this.label){this.label=this.formatter(this.formatString,this.value)}if(this.prefix&&!this.formatString){this.label=this.prefix+this.label}var e=document.createElement("canvas");this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";this._domelem=e;this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){if(a.jqplot.use_excanvas){window.G_vmlCanvasManager.init_(document);this._domelem=window.G_vmlCanvasManager.initElement(this._domelem)}var b=this._elem.get(0).getContext("2d");this._textRenderer.draw(b,this.label)}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.canvasTextRenderer.js.

















































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {    
    // This code is a modified version of the canvastext.js code, copyright below:
    //
    // This code is released to the public domain by Jim Studt, 2007.
    // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
    //
    $.jqplot.CanvasTextRenderer = function(options){
        this.fontStyle = 'normal';  // normal, italic, oblique [not implemented]
        this.fontVariant = 'normal';    // normal, small caps [not implemented]
        this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900
        this.fontSize = '10px'; 
        this.fontFamily = 'sans-serif';
        this.fontStretch = 1.0;
        this.fillStyle = '#666666';
        this.angle = 0;
        this.textAlign = 'start';
        this.textBaseline = 'alphabetic';
        this.text;
        this.width;
        this.height;
        this.pt2px = 1.28;

        $.extend(true, this, options);
        this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
        this.setHeight();
    };
    
    $.jqplot.CanvasTextRenderer.prototype.init = function(options) {
        $.extend(true, this, options);
        this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
        this.setHeight();
    };
    
    // convert css spec into point size
    // returns float
    $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) {
        sz = String(sz);
        n = parseFloat(sz);
        if (sz.indexOf('px') > -1) {
            return n/this.pt2px;
        }
        else if (sz.indexOf('pt') > -1) {
            return n;
        }
        else if (sz.indexOf('em') > -1) {
            return n*12;
        }
        else if (sz.indexOf('%') > -1) {
            return n*12/100;
        }
        // default to pixels;
        else {
            return n/this.pt2px;
        }
    };
    
    
    $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) {
        // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
        // return values adjusted for Hershey font.
        if (Number(w)) {
            return w/400;
        }
        else {
            switch (w) {
                case 'normal':
                    return 1;
                    break;
                case 'bold':
                    return 1.75;
                    break;
                case 'bolder':
                    return 2.25;
                    break;
                case 'lighter':
                    return 0.75;
                    break;
                default:
                    return 1;
                    break;
             }   
        }
    };
    
    $.jqplot.CanvasTextRenderer.prototype.getText = function() {
        return this.text;
    };
    
    $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) {
        this.text = t;
        this.setWidth(ctx);
        return this;
    };
    
    $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) {
        return this.width;
    };
    
    $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) {
        if (!w) {
            this.width = this.measure(ctx, this.text);
        }
        else {
            this.width = w;   
        }
        return this;
    };
    
    // return height in pixels.
    $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) {
        return this.height;
    };
    
    // w - height in pt
    // set heigh in px
    $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) {
        if (!w) {
            //height = this.fontSize /0.75;
            this.height = this.normalizedFontSize * this.pt2px;
        }
        else {
            this.height = w;   
        }
        return this;
    };

    $.jqplot.CanvasTextRenderer.prototype.letter = function (ch)
    {
        return this.letters[ch];
    };

    $.jqplot.CanvasTextRenderer.prototype.ascent = function()
    {
        return this.normalizedFontSize;
    };

    $.jqplot.CanvasTextRenderer.prototype.descent = function()
    {
        return 7.0*this.normalizedFontSize/25.0;
    };

    $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str)
    {
        var total = 0;
        var len = str.length;
 
        for ( i = 0; i < len; i++) {
            var c = this.letter(str.charAt(i));
            if (c) {
                total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch;
            }
        }
        return total;
    };

    $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str)
    {
        var x = 0;
        // leave room at bottom for descenders.
        var y = this.height*0.72;
         var total = 0;
         var len = str.length;
         var mag = this.normalizedFontSize / 25.0;

         ctx.save();
         var tx, ty;
         
         // 1st quadrant
         if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
             tx = 0;
             ty = -Math.sin(this.angle) * this.width;
         }
         // 4th quadrant
         else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
             tx = Math.sin(this.angle) * this.height;
             ty = 0;
         }
         // 2nd quadrant
         else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
             tx = -Math.cos(this.angle) * this.width;
             ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
         }
         // 3rd quadrant
         else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
             tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
             ty = -Math.cos(this.angle) * this.height;
         }
         
         ctx.strokeStyle = this.fillStyle;
         ctx.fillStyle = this.fillStyle;
         ctx.translate(tx, ty);
         ctx.rotate(this.angle);
         ctx.lineCap = "round";
         // multiplier was 2.0
         var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20;
         ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight);
         
         for ( var i = 0; i < len; i++) {
            var c = this.letter( str.charAt(i));
            if ( !c) {
                continue;
            }

            ctx.beginPath();

            var penUp = 1;
            var needStroke = 0;
            for ( var j = 0; j < c.points.length; j++) {
              var a = c.points[j];
              if ( a[0] == -1 && a[1] == -1) {
                  penUp = 1;
                  continue;
              }
              if ( penUp) {
                  ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
                  penUp = false;
              } else {
                  ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
              }
            }
            ctx.stroke();
            x += c.width*mag*this.fontStretch;
         }
         ctx.restore();
         return total;
    };

    $.jqplot.CanvasTextRenderer.prototype.letters = {
         ' ': { width: 16, points: [] },
         '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
         '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
         '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
         '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
         '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
         '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
         '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
         '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
         ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
         '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
         '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] },
         ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
         '-': { width: 18, points: [[6,9],[12,9]] },
         '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
         '/': { width: 22, points: [[20,25],[2,-7]] },
         '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
         '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
         '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
         '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
         '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
         '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
         '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
         '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
         '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
         '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
         ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
         ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
         '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
         '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] },
         '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
         '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
         '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
         'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
         'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
         'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
         'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
         'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
         'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
         'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
         'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
         'I': { width: 8, points: [[4,21],[4,0]] },
         'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
         'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
         'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
         'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
         'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
         'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
         'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
         'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
         'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
         'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
         'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
         'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
         'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
         'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
         'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
         'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
         'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
         '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
         '\\': { width: 14, points: [[0,21],[14,-3]] },
         ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
         '^': { width: 16, points: [[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]] },
         '_': { width: 16, points: [[0,-2],[16,-2]] },
         '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
         'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
         'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
         'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
         'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
         'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
         'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
         'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
         'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
         'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
         'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
         'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
         'l': { width: 8, points: [[4,21],[4,0]] },
         'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
         'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
         'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
         'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
         'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
         'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
         's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
         't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
         'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
         'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
         'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
         'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
         'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
         'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
         '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
         '|': { width: 8, points: [[4,25],[4,-7]] },
         '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
         '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] }
     };
     
    $.jqplot.CanvasFontRenderer = function(options) {
        options = options || {};
        if (!options.pt2px) {
            options.pt2px = 1.5;
        }
        $.jqplot.CanvasTextRenderer.call(this, options);
    };
    
    $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({});
    $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer;

    $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str)
    {
        // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
        var fstyle = this.fontSize+' '+this.fontFamily;
        ctx.save();
        ctx.font = fstyle;
        var w = ctx.measureText(str).width;
        ctx.restore();
        return w;
    };

    $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str)
    {
        var x = 0;
        // leave room at bottom for descenders.
        var y = this.height*0.72;
        //var y = 12;

         ctx.save();
         var tx, ty;
         
         // 1st quadrant
         if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
             tx = 0;
             ty = -Math.sin(this.angle) * this.width;
         }
         // 4th quadrant
         else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
             tx = Math.sin(this.angle) * this.height;
             ty = 0;
         }
         // 2nd quadrant
         else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
             tx = -Math.cos(this.angle) * this.width;
             ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
         }
         // 3rd quadrant
         else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
             tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
             ty = -Math.cos(this.angle) * this.height;
         }
         ctx.strokeStyle = this.fillStyle;
         ctx.fillStyle = this.fillStyle;
        // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
        var fstyle = this.fontSize+' '+this.fontFamily;
         ctx.font = fstyle;
         ctx.translate(tx, ty);
         ctx.rotate(this.angle);
         ctx.fillText(str, x, y);
         // ctx.strokeText(str, x, y);

         ctx.restore();
    };
    
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.canvasTextRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.CanvasTextRenderer=function(b){this.fontStyle="normal";this.fontVariant="normal";this.fontWeight="normal";this.fontSize="10px";this.fontFamily="sans-serif";this.fontStretch=1;this.fillStyle="#666666";this.angle=0;this.textAlign="start";this.textBaseline="alphabetic";this.text;this.width;this.height;this.pt2px=1.28;a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.init=function(b){a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.normalizeFontSize=function(b){b=String(b);n=parseFloat(b);if(b.indexOf("px")>-1){return n/this.pt2px}else{if(b.indexOf("pt")>-1){return n}else{if(b.indexOf("em")>-1){return n*12}else{if(b.indexOf("%")>-1){return n*12/100}else{return n/this.pt2px}}}}};a.jqplot.CanvasTextRenderer.prototype.fontWeight2Float=function(b){if(Number(b)){return b/400}else{switch(b){case"normal":return 1;break;case"bold":return 1.75;break;case"bolder":return 2.25;break;case"lighter":return 0.75;break;default:return 1;break}}};a.jqplot.CanvasTextRenderer.prototype.getText=function(){return this.text};a.jqplot.CanvasTextRenderer.prototype.setText=function(c,b){this.text=c;this.setWidth(b);return this};a.jqplot.CanvasTextRenderer.prototype.getWidth=function(b){return this.width};a.jqplot.CanvasTextRenderer.prototype.setWidth=function(c,b){if(!b){this.width=this.measure(c,this.text)}else{this.width=b}return this};a.jqplot.CanvasTextRenderer.prototype.getHeight=function(b){return this.height};a.jqplot.CanvasTextRenderer.prototype.setHeight=function(b){if(!b){this.height=this.normalizedFontSize*this.pt2px}else{this.height=b}return this};a.jqplot.CanvasTextRenderer.prototype.letter=function(b){return this.letters[b]};a.jqplot.CanvasTextRenderer.prototype.ascent=function(){return this.normalizedFontSize};a.jqplot.CanvasTextRenderer.prototype.descent=function(){return 7*this.normalizedFontSize/25};a.jqplot.CanvasTextRenderer.prototype.measure=function(d,f){var e=0;var b=f.length;for(i=0;i<b;i++){var g=this.letter(f.charAt(i));if(g){e+=g.width*this.normalizedFontSize/25*this.fontStretch}}return e};a.jqplot.CanvasTextRenderer.prototype.draw=function(t,o){var s=0;var p=this.height*0.72;var q=0;var l=o.length;var k=this.normalizedFontSize/25;t.save();var h,f;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){h=0;f=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){h=Math.sin(this.angle)*this.height;f=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){h=-Math.cos(this.angle)*this.width;f=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){h=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;f=-Math.cos(this.angle)*this.height}}}}t.strokeStyle=this.fillStyle;t.fillStyle=this.fillStyle;t.translate(h,f);t.rotate(this.angle);t.lineCap="round";var u=(this.normalizedFontSize>30)?2:2+(30-this.normalizedFontSize)/20;t.lineWidth=u*k*this.fontWeight2Float(this.fontWeight);for(var g=0;g<l;g++){var m=this.letter(o.charAt(g));if(!m){continue}t.beginPath();var e=1;var b=0;for(var d=0;d<m.points.length;d++){var r=m.points[d];if(r[0]==-1&&r[1]==-1){e=1;continue}if(e){t.moveTo(s+r[0]*k*this.fontStretch,p-r[1]*k);e=false}else{t.lineTo(s+r[0]*k*this.fontStretch,p-r[1]*k)}}t.stroke();s+=m.width*k*this.fontStretch}t.restore();return q};a.jqplot.CanvasTextRenderer.prototype.letters={" ":{width:16,points:[]},"!":{width:10,points:[[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},'"':{width:16,points:[[4,21],[4,14],[-1,-1],[12,21],[12,14]]},"#":{width:21,points:[[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]]},"$":{width:20,points:[[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},"%":{width:24,points:[[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]]},"&":{width:26,points:[[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]]},"'":{width:10,points:[[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]]},"(":{width:14,points:[[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]]},")":{width:14,points:[[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]]},"*":{width:16,points:[[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]]},"+":{width:26,points:[[13,18],[13,0],[-1,-1],[4,9],[22,9]]},",":{width:10,points:[[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"-":{width:18,points:[[6,9],[12,9]]},".":{width:10,points:[[5,2],[4,1],[5,0],[6,1],[5,2]]},"/":{width:22,points:[[20,25],[2,-7]]},"0":{width:20,points:[[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]]},"1":{width:20,points:[[6,17],[8,18],[11,21],[11,0]]},"2":{width:20,points:[[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]]},"3":{width:20,points:[[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"4":{width:20,points:[[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]]},"5":{width:20,points:[[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"6":{width:20,points:[[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]]},"7":{width:20,points:[[17,21],[7,0],[-1,-1],[3,21],[17,21]]},"8":{width:20,points:[[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]]},"9":{width:20,points:[[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]]},":":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},";":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"<":{width:24,points:[[20,18],[4,9],[20,0]]},"=":{width:26,points:[[4,12],[22,12],[-1,-1],[4,6],[22,6]]},">":{width:24,points:[[4,18],[20,9],[4,0]]},"?":{width:18,points:[[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]]},"@":{width:27,points:[[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]]},A:{width:18,points:[[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]]},B:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]]},C:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]]},D:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]]},E:{width:19,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]]},F:{width:18,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]]},G:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]]},H:{width:22,points:[[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]]},I:{width:8,points:[[4,21],[4,0]]},J:{width:16,points:[[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]]},K:{width:21,points:[[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]]},L:{width:17,points:[[4,21],[4,0],[-1,-1],[4,0],[16,0]]},M:{width:24,points:[[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]]},N:{width:22,points:[[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]]},O:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]]},P:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]]},Q:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]]},R:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]]},S:{width:20,points:[[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},T:{width:16,points:[[8,21],[8,0],[-1,-1],[1,21],[15,21]]},U:{width:22,points:[[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]]},V:{width:18,points:[[1,21],[9,0],[-1,-1],[17,21],[9,0]]},W:{width:24,points:[[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]]},X:{width:20,points:[[3,21],[17,0],[-1,-1],[17,21],[3,0]]},Y:{width:18,points:[[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]]},Z:{width:20,points:[[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]]},"[":{width:14,points:[[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]]},"\\":{width:14,points:[[0,21],[14,-3]]},"]":{width:14,points:[[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]]},"^":{width:16,points:[[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]]},_:{width:16,points:[[0,-2],[16,-2]]},"`":{width:10,points:[[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},a:{width:19,points:[[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},b:{width:19,points:[[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},c:{width:18,points:[[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},d:{width:19,points:[[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},e:{width:18,points:[[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},f:{width:12,points:[[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]]},g:{width:19,points:[[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},h:{width:19,points:[[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},i:{width:8,points:[[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]]},j:{width:10,points:[[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]]},k:{width:17,points:[[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]]},l:{width:8,points:[[4,21],[4,0]]},m:{width:30,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]]},n:{width:19,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},o:{width:19,points:[[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]]},p:{width:19,points:[[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},q:{width:19,points:[[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},r:{width:13,points:[[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]]},s:{width:17,points:[[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]]},t:{width:12,points:[[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]]},u:{width:19,points:[[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]]},v:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0]]},w:{width:22,points:[[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]]},x:{width:17,points:[[3,14],[14,0],[-1,-1],[14,14],[3,0]]},y:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]]},z:{width:17,points:[[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]]},"{":{width:14,points:[[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]]},"|":{width:8,points:[[4,25],[4,-7]]},"}":{width:14,points:[[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]]},"~":{width:24,points:[[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]]}};a.jqplot.CanvasFontRenderer=function(b){b=b||{};if(!b.pt2px){b.pt2px=1.5}a.jqplot.CanvasTextRenderer.call(this,b)};a.jqplot.CanvasFontRenderer.prototype=new a.jqplot.CanvasTextRenderer({});a.jqplot.CanvasFontRenderer.prototype.constructor=a.jqplot.CanvasFontRenderer;a.jqplot.CanvasFontRenderer.prototype.measure=function(c,e){var d=this.fontSize+" "+this.fontFamily;c.save();c.font=d;var b=c.measureText(e).width;c.restore();return b};a.jqplot.CanvasFontRenderer.prototype.draw=function(e,g){var c=0;var h=this.height*0.72;e.save();var d,b;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){d=0;b=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){d=Math.sin(this.angle)*this.height;b=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){d=-Math.cos(this.angle)*this.width;b=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){d=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;b=-Math.cos(this.angle)*this.height}}}}e.strokeStyle=this.fillStyle;e.fillStyle=this.fillStyle;var f=this.fontSize+" "+this.fontFamily;e.font=f;e.translate(d,b);e.rotate(this.angle);e.fillText(g,c,h);e.restore()}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.categoryAxisRenderer.js.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {   
    /**
    *  class: $.jqplot.CategoryAxisRenderer
    *  A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.
    *  
    *  To use this renderer, include the plugin in your source
    *  > <script type="text/javascript" language="javascript" src="plugins/jqplot.categoryAxisRenderer.js"></script>
    *  
    *  and supply the appropriate options to your plot
    *  
    *  > {axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}
    **/
    $.jqplot.CategoryAxisRenderer = function(options) {
        $.jqplot.LinearAxisRenderer.call(this);
        // prop: sortMergedLabels
        // True to sort tick labels when labels are created by merging
        // x axis values from multiple series.  That is, say you have
        // two series like:
        // > line1 = [[2006, 4],            [2008, 9], [2009, 16]];
        // > line2 = [[2006, 3], [2007, 7], [2008, 6]];
        // If no label array is specified, tick labels will be collected
        // from the x values of the series.  With sortMergedLabels
        // set to true, tick labels will be:
        // > [2006, 2007, 2008, 2009]
        // With sortMergedLabels set to false, tick labels will be:
        // > [2006, 2008, 2009, 2007]
        //
        // Note, this property is specified on the renderOptions for the 
        // axes when creating a plot:
        // > axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}
        this.sortMergedLabels = false;
    };
    
    $.jqplot.CategoryAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.CategoryAxisRenderer.prototype.constructor = $.jqplot.CategoryAxisRenderer;
    
    $.jqplot.CategoryAxisRenderer.prototype.init = function(options){
        this.groups = 1;
        this.groupLabels = [];
        this._groupLabels = [];
        this._grouped = false;
        this._barsPerGroup = null;
        // prop: tickRenderer
        // A class of a rendering engine for creating the ticks labels displayed on the plot, 
        // See <$.jqplot.AxisTickRenderer>.
        // this.tickRenderer = $.jqplot.AxisTickRenderer;
        // this.labelRenderer = $.jqplot.AxisLabelRenderer;
        $.extend(true, this, {tickOptions:{formatString:'%d'}}, options);
        var db = this._dataBounds;
        // Go through all the series attached to this axis and find
        // the min/max bounds for this axis.
        for (var i=0; i<this._series.length; i++) {
            var s = this._series[i];
            if (s.groups) {
                this.groups = s.groups;
            }
            var d = s.data;
            
            for (var j=0; j<d.length; j++) { 
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    if (d[j][0] < db.min || db.min == null) {
                        db.min = d[j][0];
                    }
                    if (d[j][0] > db.max || db.max == null) {
                        db.max = d[j][0];
                    }
                }              
                else {
                    if (d[j][1] < db.min || db.min == null) {
                        db.min = d[j][1];
                    }
                    if (d[j][1] > db.max || db.max == null) {
                        db.max = d[j][1];
                    }
                }              
            }
        }
        
        if (this.groupLabels.length) {
            this.groups = this.groupLabels.length;
        }
    };
 

    $.jqplot.CategoryAxisRenderer.prototype.createTicks = function() {
        // we're are operating on an axis here
        var ticks = this._ticks;
        var userTicks = this.ticks;
        var name = this.name;
        // databounds were set on axis initialization.
        var db = this._dataBounds;
        var dim, interval;
        var min, max;
        var pos1, pos2;
        var tt, i;

        // if we already have ticks, use them.
        if (userTicks.length) {
            // adjust with blanks if we have groups
            if (this.groups > 1 && !this._grouped) {
                var l = userTicks.length;
                var skip = parseInt(l/this.groups, 10);
                var count = 0;
                for (var i=skip; i<l; i+=skip) {
                    userTicks.splice(i+count, 0, ' ');
                    count++;
                }
                this._grouped = true;
            }
            this.min = 0.5;
            this.max = userTicks.length + 0.5;
            var range = this.max - this.min;
            this.numberTicks = 2*userTicks.length + 1;
            for (i=0; i<userTicks.length; i++){
                tt = this.min + 2 * i * range / (this.numberTicks-1);
                // need a marker before and after the tick
                var t = new this.tickRenderer(this.tickOptions);
                t.showLabel = false;
                // t.showMark = true;
                t.setTick(tt, this.name);
                this._ticks.push(t);
                var t = new this.tickRenderer(this.tickOptions);
                t.label = userTicks[i];
                // t.showLabel = true;
                t.showMark = false;
                t.showGridline = false;
                t.setTick(tt+0.5, this.name);
                this._ticks.push(t);
            }
            // now add the last tick at the end
            var t = new this.tickRenderer(this.tickOptions);
            t.showLabel = false;
            // t.showMark = true;
            t.setTick(tt+1, this.name);
            this._ticks.push(t);
        }

        // we don't have any ticks yet, let's make some!
        else {
            if (name == 'xaxis' || name == 'x2axis') {
                dim = this._plotDimensions.width;
            }
            else {
                dim = this._plotDimensions.height;
            }
            
            // if min, max and number of ticks specified, user can't specify interval.
            if (this.min != null && this.max != null && this.numberTicks != null) {
                this.tickInterval = null;
            }
            
            // if max, min, and interval specified and interval won't fit, ignore interval.
            if (this.min != null && this.max != null && this.tickInterval != null) {
                if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) {
                    this.tickInterval = null;
                }
            }
        
            // find out how many categories are in the lines and collect labels
            var labels = [];
            var numcats = 0;
            var min = 0.5;
            var max, val;
            var isMerged = false;
            for (var i=0; i<this._series.length; i++) {
                var s = this._series[i];
                for (var j=0; j<s.data.length; j++) {
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        val = s.data[j][0];
                    }
                    else {
                        val = s.data[j][1];
                    }
                    if ($.inArray(val, labels) == -1) {
                        isMerged = true;
                        numcats += 1;      
                        labels.push(val);
                    }
                }
            }
            
            if (isMerged && this.sortMergedLabels) {
                labels.sort(function(a,b) { return a - b; });
            }
            
            // keep a reference to these tick labels to use for redrawing plot (see bug #57)
            this.ticks = labels;
            
            // now bin the data values to the right lables.
            for (var i=0; i<this._series.length; i++) {
                var s = this._series[i];
                for (var j=0; j<s.data.length; j++) {
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        val = s.data[j][0];
                    }
                    else {
                        val = s.data[j][1];
                    }
                    // for category axis, force the values into category bins.
                    // we should have the value in the label array now.
                    var idx = $.inArray(val, labels)+1;
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        s.data[j][0] = idx;
                    }
                    else {
                        s.data[j][1] = idx;
                    }
                }
            }
            
            // adjust with blanks if we have groups
            if (this.groups > 1 && !this._grouped) {
                var l = labels.length;
                var skip = parseInt(l/this.groups, 10);
                var count = 0;
                for (var i=skip; i<l; i+=skip+1) {
                    labels[i] = ' ';
                }
                this._grouped = true;
            }
        
            max = numcats + 0.5;
            if (this.numberTicks == null) {
                this.numberTicks = 2*numcats + 1;
            }

            var range = max - min;
            this.min = min;
            this.max = max;
            var track = 0;
            
            // todo: adjust this so more ticks displayed.
            var maxVisibleTicks = parseInt(3+dim/20, 10);
            var skip = parseInt(numcats/maxVisibleTicks, 10);

            if (this.tickInterval == null) {

                this.tickInterval = range / (this.numberTicks-1);

            }
            // if tickInterval is specified, we will ignore any computed maximum.
            for (var i=0; i<this.numberTicks; i++){
                tt = this.min + i * this.tickInterval;
                var t = new this.tickRenderer(this.tickOptions);
                // if even tick, it isn't a category, it's a divider
                if (i/2 == parseInt(i/2, 10)) {
                    t.showLabel = false;
                    t.showMark = true;
                }
                else {
                    if (skip>0 && track<skip) {
                        t.showLabel = false;
                        track += 1;
                    }
                    else {
                        t.showLabel = true;
                        track = 0;
                    } 
                    t.label = t.formatter(t.formatString, labels[(i-1)/2]);
                    t.showMark = false;
                    t.showGridline = false;
                }
                t.setTick(tt, this.name);
                this._ticks.push(t);
            }
        }
        
    };
    
    // called with scope of axis
    $.jqplot.CategoryAxisRenderer.prototype.draw = function(ctx) {
        if (this.show) {
            // populate the axis label and value properties.
            // createTicks is a method on the renderer, but
            // call it within the scope of the axis.
            this.renderer.createTicks.call(this);
            // fill a div with axes labels in the right direction.
            // Need to pregenerate each axis to get it's bounds and
            // position it and the labels correctly on the plot.
            var dim=0;
            var temp;
            // Added for theming.
            if (this._elem) {
                this._elem.empty();
            }
            
            this._elem = this._elem || $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');
            
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                this._elem.width(this._plotDimensions.width);
            }
            else {
                this._elem.height(this._plotDimensions.height);
            }
            
            // create a _label object.
            this.labelOptions.axis = this.name;
            this._label = new this.labelRenderer(this.labelOptions);
            if (this._label.show) {
                var elem = this._label.draw(ctx);
                elem.appendTo(this._elem);
            }
    
            var t = this._ticks;
            for (var i=0; i<t.length; i++) {
                var tick = t[i];
                if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
                    var elem = tick.draw(ctx);
                    elem.appendTo(this._elem);
                }
            }
        
            this._groupLabels = [];
            // now make group labels
            for (var i=0; i<this.groupLabels.length; i++)
            {
                var elem = $('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');
                elem.html(this.groupLabels[i]);
                this._groupLabels.push(elem);
                elem.appendTo(this._elem);
            }
        }
        return this._elem;
    };
    
    // called with scope of axis
    $.jqplot.CategoryAxisRenderer.prototype.set = function() { 
        var dim = 0;
        var temp;
        var w = 0;
        var h = 0;
        var lshow = (this._label == null) ? false : this._label.show;
        if (this.show) {
            var t = this._ticks;
            for (var i=0; i<t.length; i++) {
                var tick = t[i];
                if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        temp = tick._elem.outerHeight(true);
                    }
                    else {
                        temp = tick._elem.outerWidth(true);
                    }
                    if (temp > dim) {
                        dim = temp;
                    }
                }
            }
            
            var dim2 = 0;
            for (var i=0; i<this._groupLabels.length; i++) {
                var l = this._groupLabels[i];
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    temp = l.outerHeight(true);
                }
                else {
                    temp = l.outerWidth(true);
                }
                if (temp > dim2) {
                    dim2 = temp;
                }
            }
            
            if (lshow) {
                w = this._label._elem.outerWidth(true);
                h = this._label._elem.outerHeight(true); 
            }
            if (this.name == 'xaxis') {
                dim += dim2 + h;
                this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
            }
            else if (this.name == 'x2axis') {
                dim += dim2 + h;
                this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
            }
            else if (this.name == 'yaxis') {
                dim += dim2 + w;
                this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
                if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
                    this._label._elem.css('width', w+'px');
                }
            }
            else {
                dim += dim2 + w;
                this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
                if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
                    this._label._elem.css('width', w+'px');
                }
            }
        }  
    };
    
    // called with scope of axis
    $.jqplot.CategoryAxisRenderer.prototype.pack = function(pos, offsets) {
        var ticks = this._ticks;
        var max = this.max;
        var min = this.min;
        var offmax = offsets.max;
        var offmin = offsets.min;
        var lshow = (this._label == null) ? false : this._label.show;
        
        for (var p in pos) {
            this._elem.css(p, pos[p]);
        }
        
        this._offsets = offsets;
        // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
        var pixellength = offmax - offmin;
        var unitlength = max - min;
        
        // point to unit and unit to point conversions references to Plot DOM element top left corner.
        this.p2u = function(p){
            return (p - offmin) * unitlength / pixellength + min;
        };
        
        this.u2p = function(u){
            return (u - min) * pixellength / unitlength + offmin;
        };
                
        if (this.name == 'xaxis' || this.name == 'x2axis'){
            this.series_u2p = function(u){
                return (u - min) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return p * unitlength / pixellength + min;
            };
        }
        
        else {
            this.series_u2p = function(u){
                return (u - max) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return p * unitlength / pixellength + max;
            };
        }
        
        if (this.show) {
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {
                        var shim;
                        
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            // will need to adjust auto positioning based on which axis this is.
                            var temp = (this.name == 'xaxis') ? 1 : -1;
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                    if (temp * t.angle < 0) {
                                        shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    }
                                    // position at start
                                    else {
                                        shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'end':
                                    shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                case 'start':
                                    shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    break;
                                case 'middle':
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                default:
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getWidth()/2;
                        }
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('left', val);
                        t.pack();
                    }
                }
                
                var labeledge=['bottom', 0];
                if (lshow) {
                    var w = this._label._elem.outerWidth(true);
                    this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
                    if (this.name == 'xaxis') {
                        this._label._elem.css('bottom', '0px');
                        labeledge = ['bottom', this._label._elem.outerHeight(true)];
                    }
                    else {
                        this._label._elem.css('top', '0px');
                        labeledge = ['top', this._label._elem.outerHeight(true)];
                    }
                    this._label.pack();
                }
                
                // draw the group labels
                var step = parseInt(this._ticks.length/this.groups, 10);
                for (i=0; i<this._groupLabels.length; i++) {
                    var mid = 0;
                    var count = 0;
                    for (var j=i*step; j<=(i+1)*step; j++) {
                        if (this._ticks[j]._elem && this._ticks[j].label != " ") {
                            var t = this._ticks[j]._elem;
                            var p = t.position();
                            mid += p.left + t.outerWidth(true)/2;
                            count++;
                        }
                    }
                    mid = mid/count;
                    this._groupLabels[i].css({'left':(mid - this._groupLabels[i].outerWidth(true)/2)});
                    this._groupLabels[i].css(labeledge[0], labeledge[1]);
                }
            }
            else {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {                        
                        var shim;
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            // will need to adjust auto positioning based on which axis this is.
                            var temp = (this.name == 'yaxis') ? 1 : -1;
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                case 'end':
                                    if (temp * t.angle < 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'start':
                                    if (t.angle > 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'middle':
                                    // if (t.angle > 0) {
                                    //     shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    // }
                                    // else {
                                    //     shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    // }
                                    shim = -t.getHeight()/2;
                                    break;
                                default:
                                    shim = -t.getHeight()/2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getHeight()/2;
                        }
                        
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('top', val);
                        t.pack();
                    }
                }
                
                var labeledge=['left', 0];
                if (lshow) {
                    var h = this._label._elem.outerHeight(true);
                    this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
                    if (this.name == 'yaxis') {
                        this._label._elem.css('left', '0px');
                        labeledge = ['left', this._label._elem.outerWidth(true)];
                    }
                    else {
                        this._label._elem.css('right', '0px');
                        labeledge = ['right', this._label._elem.outerWidth(true)];
                    }   
                    this._label.pack();
                }
                
                // draw the group labels, position top here, do left after label position.
                var step = parseInt(this._ticks.length/this.groups, 10);
                for (i=0; i<this._groupLabels.length; i++) {
                    var mid = 0;
                    var count = 0;
                    for (var j=i*step; j<=(i+1)*step; j++) {
                        if (this._ticks[j]._elem && this._ticks[j].label != " ") {
                            var t = this._ticks[j]._elem;
                            var p = t.position();
                            mid += p.top + t.outerHeight()/2;
                            count++;
                        }
                    }
                    mid = mid/count;
                    this._groupLabels[i].css({'top':mid - this._groupLabels[i].outerHeight()/2});
                    this._groupLabels[i].css(labeledge[0], labeledge[1]);
                    
                }
            }
        }
    };    
    
    
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.categoryAxisRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.CategoryAxisRenderer=function(b){a.jqplot.LinearAxisRenderer.call(this);this.sortMergedLabels=false};a.jqplot.CategoryAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.CategoryAxisRenderer.prototype.constructor=a.jqplot.CategoryAxisRenderer;a.jqplot.CategoryAxisRenderer.prototype.init=function(e){this.groups=1;this.groupLabels=[];this._groupLabels=[];this._grouped=false;this._barsPerGroup=null;a.extend(true,this,{tickOptions:{formatString:"%d"}},e);var b=this._dataBounds;for(var f=0;f<this._series.length;f++){var g=this._series[f];if(g.groups){this.groups=g.groups}var h=g.data;for(var c=0;c<h.length;c++){if(this.name=="xaxis"||this.name=="x2axis"){if(h[c][0]<b.min||b.min==null){b.min=h[c][0]}if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]<b.min||b.min==null){b.min=h[c][1]}if(h[c][1]>b.max||b.max==null){b.max=h[c][1]}}}}if(this.groupLabels.length){this.groups=this.groupLabels.length}};a.jqplot.CategoryAxisRenderer.prototype.createTicks=function(){var D=this._ticks;var z=this.ticks;var F=this.name;var C=this._dataBounds;var v,A;var q,w;var d,c;var b,x;if(z.length){if(this.groups>1&&!this._grouped){var r=z.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p){z.splice(x+e,0," ");e++}this._grouped=true}this.min=0.5;this.max=z.length+0.5;var m=this.max-this.min;this.numberTicks=2*z.length+1;for(x=0;x<z.length;x++){b=this.min+2*x*m/(this.numberTicks-1);var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b,this.name);this._ticks.push(h);var h=new this.tickRenderer(this.tickOptions);h.label=z[x];h.showMark=false;h.showGridline=false;h.setTick(b+0.5,this.name);this._ticks.push(h)}var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b+1,this.name);this._ticks.push(h)}else{if(F=="xaxis"||F=="x2axis"){v=this._plotDimensions.width}else{v=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.min!=null&&this.max!=null&&this.tickInterval!=null){if(parseInt((this.max-this.min)/this.tickInterval,10)!=(this.max-this.min)/this.tickInterval){this.tickInterval=null}}var y=[];var B=0;var q=0.5;var w,E;var f=false;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}if(a.inArray(E,y)==-1){f=true;B+=1;y.push(E)}}}if(f&&this.sortMergedLabels){y.sort(function(l,j){return l-j})}this.ticks=y;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}var n=a.inArray(E,y)+1;if(this.name=="xaxis"||this.name=="x2axis"){k.data[u][0]=n}else{k.data[u][1]=n}}}if(this.groups>1&&!this._grouped){var r=y.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p+1){y[x]=" "}this._grouped=true}w=B+0.5;if(this.numberTicks==null){this.numberTicks=2*B+1}var m=w-q;this.min=q;this.max=w;var o=0;var g=parseInt(3+v/20,10);var p=parseInt(B/g,10);if(this.tickInterval==null){this.tickInterval=m/(this.numberTicks-1)}for(var x=0;x<this.numberTicks;x++){b=this.min+x*this.tickInterval;var h=new this.tickRenderer(this.tickOptions);if(x/2==parseInt(x/2,10)){h.showLabel=false;h.showMark=true}else{if(p>0&&o<p){h.showLabel=false;o+=1}else{h.showLabel=true;o=0}h.label=h.formatter(h.formatString,y[(x-1)/2]);h.showMark=false;h.showGridline=false}h.setTick(b,this.name);this._ticks.push(h)}}};a.jqplot.CategoryAxisRenderer.prototype.draw=function(b){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;if(this._elem){this._elem.empty()}this._elem=this._elem||a('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b);g.appendTo(this._elem)}var f=this._ticks;for(var e=0;e<f.length;e++){var d=f[e];if(d.showLabel&&(!d.isMinorTick||this.showMinorTicks)){var g=d.draw(b);g.appendTo(this._elem)}}this._groupLabels=[];for(var e=0;e<this.groupLabels.length;e++){var g=a('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');g.html(this.groupLabels[e]);this._groupLabels.push(g);g.appendTo(this._elem)}}return this._elem};a.jqplot.CategoryAxisRenderer.prototype.set=function(){var e=0;var m;var k=0;var f=0;var d=(this._label==null)?false:this._label.show;if(this.show){var n=this._ticks;for(var c=0;c<n.length;c++){var g=n[c];if(g.showLabel&&(!g.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){m=g._elem.outerHeight(true)}else{m=g._elem.outerWidth(true)}if(m>e){e=m}}}var j=0;for(var c=0;c<this._groupLabels.length;c++){var b=this._groupLabels[c];if(this.name=="xaxis"||this.name=="x2axis"){m=b.outerHeight(true)}else{m=b.outerWidth(true)}if(m>j){j=m}}if(d){k=this._label._elem.outerWidth(true);f=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){e+=j+k;this._elem.css({width:e+"px",left:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}else{e+=j+k;this._elem.css({width:e+"px",right:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}}}}};a.jqplot.CategoryAxisRenderer.prototype.pack=function(e,c){var B=this._ticks;var v=this.max;var s=this.min;var n=c.max;var l=c.min;var q=(this._label==null)?false:this._label.show;for(var r in e){this._elem.css(r,e[r])}this._offsets=c;var g=n-l;var k=v-s;this.p2u=function(h){return(h-l)*k/g+s};this.u2p=function(h){return(h-s)*g/k+l};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(h-s)*g/k};this.series_p2u=function(h){return h*k/g+s}}else{this.series_u2p=function(h){return(h-v)*g/k};this.series_p2u=function(h){return h*k/g+v}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(i=0;i<B.length;i++){var o=B[i];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var z=(this.name=="xaxis")?1:-1;switch(o.labelPosition){case"auto":if(z*o.angle<0){b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2}else{b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2}break;case"end":b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;case"start":b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2;break;case"middle":b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;default:b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break}}else{b=-o.getWidth()/2}var C=this.u2p(o.value)+b+"px";o._elem.css("left",C);o.pack()}}var y=["bottom",0];if(q){var m=this._label._elem.outerWidth(true);this._label._elem.css("left",l+g/2-m/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px");y=["bottom",this._label._elem.outerHeight(true)]}else{this._label._elem.css("top","0px");y=["top",this._label._elem.outerHeight(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(i=0;i<this._groupLabels.length;i++){var A=0;var f=0;for(var u=i*d;u<=(i+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();A+=r.left+o.outerWidth(true)/2;f++}}A=A/f;this._groupLabels[i].css({left:(A-this._groupLabels[i].outerWidth(true)/2)});this._groupLabels[i].css(y[0],y[1])}}else{for(i=0;i<B.length;i++){var o=B[i];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var z=(this.name=="yaxis")?1:-1;switch(o.labelPosition){case"auto":case"end":if(z*o.angle<0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"start":if(o.angle>0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"middle":b=-o.getHeight()/2;break;default:b=-o.getHeight()/2;break}}else{b=-o.getHeight()/2}var C=this.u2p(o.value)+b+"px";o._elem.css("top",C);o.pack()}}var y=["left",0];if(q){var x=this._label._elem.outerHeight(true);this._label._elem.css("top",n-g/2-x/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px");y=["left",this._label._elem.outerWidth(true)]}else{this._label._elem.css("right","0px");y=["right",this._label._elem.outerWidth(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(i=0;i<this._groupLabels.length;i++){var A=0;var f=0;for(var u=i*d;u<=(i+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();A+=r.top+o.outerHeight()/2;f++}}A=A/f;this._groupLabels[i].css({top:A-this._groupLabels[i].outerHeight()/2});this._groupLabels[i].css(y[0],y[1])}}}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.ciParser.js.





















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.ciParser
     * Data Renderer which converts a custom JSON data object into jqPlot data format.
     * 
     * Parameters:
     * data - JSON encoded string or object.
     * plot - reference to jqPlot Plot object.
     * 
     * Returns:
     * data array in jqPlot format.
     * 
     */
    $.jqplot.ciParser = function (data, plot) {
        var ret = [],
            line,
            i, j, k, kk;
    
         if (typeof(data) == "string") {
             data =  $.jqplot.JSON.parse(data, handleStrings);
         }
 
         else if (typeof(data) == "object") {
             for (k in data) {
                 for (i=0; i<data[k].length; i++) {
                     for (kk in data[k][i]) {
                         data[k][i][kk] = handleStrings(kk, data[k][i][kk]);
                     }
                 }
             }
         }
 
         else return null;
 
         // function handleStrings
         // Checks any JSON encoded strings to see if they are
         // encoded dates.  If so, pull out the timestamp.
         // Expects dates to be represented by js timestamps.
 
         function handleStrings(key, value) {
            var a;
            if (value != null) {
                if (value.toString().indexOf('Date') >= 0) {
                    //here we will try to extract the ticks from the Date string in the "value" fields of JSON returned data
                    a = /^\/Date\((-?[0-9]+)\)\/$/.exec(value);
                    if (a) {
                        return parseInt(a[1], 10);
                    }
                }
                return value;
            }
         }
 
        for (var prop in data) {
            line = [];
            temp = data[prop];
            switch (prop) {
                case "PriceTicks":
                    for (i=0; i<temp.length; i++) {
                        line.push([temp[i]['TickDate'], temp[i]['Price']]);
                    }
                    break;
                case "PriceBars":
                    for (i=0; i<temp.length; i++) {
                        line.push([temp[i]['BarDate'], temp[i]['Open'], temp[i]['High'], temp[i]['Low'], temp[i]['Close']]);
                    }
                    break;
            }
            ret.push(line);
        }
        return ret;
    };
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.ciParser.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.ciParser=function(g,l){var m=[],n,h,f,e,c;if(typeof(g)=="string"){g=a.jqplot.JSON.parse(g,d)}else{if(typeof(g)=="object"){for(e in g){for(h=0;h<g[e].length;h++){for(c in g[e][h]){g[e][h][c]=d(c,g[e][h][c])}}}}else{return null}}function d(j,k){var i;if(k!=null){if(k.toString().indexOf("Date")>=0){i=/^\/Date\((-?[0-9]+)\)\/$/.exec(k);if(i){return parseInt(i[1],10)}}return k}}for(var b in g){n=[];temp=g[b];switch(b){case"PriceTicks":for(h=0;h<temp.length;h++){n.push([temp[h]["TickDate"],temp[h]["Price"]])}break;case"PriceBars":for(h=0;h<temp.length;h++){n.push([temp[h]["BarDate"],temp[h]["Open"],temp[h]["High"],temp[h]["Low"],temp[h]["Close"]])}break}m.push(n)}return m}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.cursor.js.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    
    /**
     * Class: $.jqplot.Cursor
     * Plugin class representing the cursor as displayed on the plot.
     */
    $.jqplot.Cursor = function(options) {
        // Group: Properties
        //
        // prop: style
        // CSS spec for cursor style
        this.style = 'crosshair';
        this.previousCursor = 'auto';
        // prop: show
        // wether to show the cursor or not.
        this.show = $.jqplot.config.enablePlugins;
        // prop: showTooltip
        // show a cursor position tooltip.  Location of the tooltip
        // will be controlled by followMouse and tooltipLocation.
        this.showTooltip = true;
        // prop: followMouse
        // Tooltip follows the mouse, it is not at a fixed location.
        // Tooltip will show on the grid at the location given by
        // tooltipLocation, offset from the grid edge by tooltipOffset.
        this.followMouse = false;
        // prop: tooltipLocation
        // Where to position tooltip.  If followMouse is true, this is
        // relative to the cursor, otherwise, it is relative to the grid.
        // One of 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
        this.tooltipLocation = 'se';
        // prop: tooltipOffset
        // Pixel offset of tooltip from the grid boudaries or cursor center.
        this.tooltipOffset = 6;
        // prop: showTooltipGridPosition
        // show the grid pixel coordinates of the mouse.
        this.showTooltipGridPosition = false;
        // prop: showTooltipUnitPosition
        // show the unit (data) coordinates of the mouse.
        this.showTooltipUnitPosition = true;
        // prop: showTooltipDataPosition
        // Used with showVerticalLine to show intersecting data points in the tooltip.
        this.showTooltipDataPosition = false;
        // prop: tooltipFormatString
        // sprintf format string for the tooltip.
        // Uses Ash Searle's javascript sprintf implementation
        // found here: http://hexmen.com/blog/2007/03/printf-sprintf/
        // See http://perldoc.perl.org/functions/sprintf.html for reference
        // Note, if showTooltipDataPosition is true, the default tooltipFormatString
        // will be set to the cursorLegendFormatString, not the default given here.
        this.tooltipFormatString = '%.4P, %.4P';
        // prop: useAxesFormatters
        // Use the x and y axes formatters to format the text in the tooltip.
        this.useAxesFormatters = true;
        // prop: tooltipAxisGroups
        // Show position for the specified axes.
        // This is an array like [['xaxis', 'yaxis'], ['xaxis', 'y2axis']]
        // Default is to compute automatically for all visible axes.
        this.tooltipAxisGroups = [];
        // prop: zoom
        // Enable plot zooming.
        this.zoom = false;
        // zoomProxy and zoomTarget properties are not directly set by user.  
        // They Will be set through call to zoomProxy method.
        this.zoomProxy = false;
        this.zoomTarget = false;
        // prop: clickReset
        // Will reset plot zoom if single click on plot without drag.
        this.clickReset = false;
        // prop: dblClickReset
        // Will reset plot zoom if double click on plot without drag.
        this.dblClickReset = true;
        // prop: showVerticalLine
        // draw a vertical line across the plot which follows the cursor.
        // When the line is near a data point, a special legend and/or tooltip can
        // be updated with the data values.
        this.showVerticalLine = false;
        // prop: showHorizontalLine
        // draw a horizontal line across the plot which follows the cursor.
        this.showHorizontalLine = false;
        // prop: constrainZoomTo
        // 'none', 'x' or 'y'
        this.constrainZoomTo = 'none';
        // // prop: autoscaleConstraint
        // // when a constrained axis is specified, true will
        // // auatoscale the adjacent axis.
        // this.autoscaleConstraint = true;
        this.shapeRenderer = new $.jqplot.ShapeRenderer();
        this._zoom = {start:[], end:[], started: false, zooming:false, isZoomed:false, axes:{start:{}, end:{}}, gridpos:{}, datapos:{}};
        this._tooltipElem;
        this.zoomCanvas;
        this.cursorCanvas;
        // prop: intersectionThreshold
        // pixel distance from data point or marker to consider cursor lines intersecting with point.
        // If data point markers are not shown, this should be >= 1 or will often miss point intersections.
        this.intersectionThreshold = 2;
        // prop: showCursorLegend
        // Replace the plot legend with an enhanced legend displaying intersection information.
        this.showCursorLegend = false;
        // prop: cursorLegendFormatString
        // Format string used in the cursor legend.  If showTooltipDataPosition is true,
        // this will also be the default format string used by tooltipFormatString.
        this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString;
        // whether the cursor is over the grid or not.
        this._oldHandlers = {onselectstart: null, ondrag: null, onmousedown: null};
        // prop: constrainOutsideZoom
        // True to limit actual zoom area to edges of grid, even when zooming
        // outside of plot area.  That is, can't zoom out by mousing outside plot.
        this.constrainOutsideZoom = true;
        // prop: showTooltipOutsideZoom
        // True will keep updating the tooltip when zooming of the grid.
        this.showTooltipOutsideZoom = false;
        // true if mouse is over grid, false if not.
        this.onGrid = false;
        $.extend(true, this, options);
    };
    
    $.jqplot.Cursor.cursorLegendFormatString = '%s x:%s, y:%s';
    
    // called with scope of plot
    $.jqplot.Cursor.init = function (target, data, opts){
        // add a cursor attribute to the plot
        var options = opts || {};
        this.plugins.cursor = new $.jqplot.Cursor(options.cursor);
        var c = this.plugins.cursor;

        if (c.show) {
            $.jqplot.eventListenerHooks.push(['jqplotMouseEnter', handleMouseEnter]);
            $.jqplot.eventListenerHooks.push(['jqplotMouseLeave', handleMouseLeave]);
            $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMouseMove]);
            
            if (c.showCursorLegend) {              
                opts.legend = opts.legend || {};
                opts.legend.renderer =  $.jqplot.CursorLegendRenderer;
                opts.legend.formatString = this.plugins.cursor.cursorLegendFormatString;
                opts.legend.show = true;
            }
            
            if (c.zoom) {
                $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleMouseDown]);
                
                if (c.clickReset) {
                    $.jqplot.eventListenerHooks.push(['jqplotClick', handleClick]);
                }
                
                if (c.dblClickReset) {
                    $.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]);
                }             
            }
    
            this.resetZoom = function() {
                var axes = this.axes;
                if (!c.zoomProxy) {
                    for (var ax in axes) {
                        axes[ax].reset();
                    }
                    this.redraw();
                }
                else {
                    var ctx = this.plugins.cursor.zoomCanvas._ctx;
                    ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
                }
                this.plugins.cursor._zoom.isZoomed = false;
                this.target.trigger('jqplotResetZoom', [this, this.plugins.cursor]);
            };
            

            if (c.showTooltipDataPosition) {
                c.showTooltipUnitPosition = false;
                c.showTooltipGridPosition = false;
                if (options.cursor.tooltipFormatString == undefined) {
                    c.tooltipFormatString = $.jqplot.Cursor.cursorLegendFormatString;
                }
            }
        }
    };
    
    // called with context of plot
    $.jqplot.Cursor.postDraw = function() {
        var c = this.plugins.cursor;
        // if (c.zoom) {
        c.zoomCanvas = new $.jqplot.GenericCanvas();
        this.eventCanvas._elem.before(c.zoomCanvas.createElement(this._gridPadding, 'jqplot-zoom-canvas', this._plotDimensions));
        var zctx = c.zoomCanvas.setContext();
        // }
        c._tooltipElem = $('<div class="jqplot-cursor-tooltip" style="position:absolute;display:none"></div>');
        c.zoomCanvas._elem.before(c._tooltipElem);
        if (c.showVerticalLine || c.showHorizontalLine) {
            c.cursorCanvas = new $.jqplot.GenericCanvas();
            this.eventCanvas._elem.before(c.cursorCanvas.createElement(this._gridPadding, 'jqplot-cursor-canvas', this._plotDimensions));
            var zctx = c.cursorCanvas.setContext();
        }

        // if we are showing the positions in unit coordinates, and no axes groups
        // were specified, create a default set.
        if (c.showTooltipUnitPosition){
            if (c.tooltipAxisGroups.length === 0) {
                var series = this.series;
                var s;
                var temp = [];
                for (var i=0; i<series.length; i++) {
                    s = series[i];
                    var ax = s.xaxis+','+s.yaxis;
                    if ($.inArray(ax, temp) == -1) {
                        temp.push(ax);
                    }
                }
                for (var i=0; i<temp.length; i++) {
                    c.tooltipAxisGroups.push(temp[i].split(','));
                }
            }
        }
    };
    
    // Group: methods
    //
    // method: $.jqplot.Cursor.zoomProxy
    // links targetPlot to controllerPlot so that plot zooming of
    // targetPlot will be controlled by zooming on the controllerPlot.
    // controllerPlot will not actually zoom, but acts as an
    // overview plot.  Note, the zoom options must be set to true for
    // zoomProxy to work.
    $.jqplot.Cursor.zoomProxy = function(targetPlot, controllerPlot) {
        var tc = targetPlot.plugins.cursor;
        var cc = controllerPlot.plugins.cursor;
        tc.zoomTarget = true;
        tc.zoom = true;
        tc.style = 'auto';
        tc.dblClickReset = false;
        cc.zoom = true;
        cc.zoomProxy = true;
              
        controllerPlot.target.bind('jqplotZoom', plotZoom);
        controllerPlot.target.bind('jqplotResetZoom', plotReset);

        function plotZoom(ev, gridpos, datapos, plot, cursor) {
            tc.doZoom(gridpos, datapos, targetPlot, cursor);
        } 

        function plotReset(ev, plot, cursor) {
            targetPlot.resetZoom();
        }
    };
    
    $.jqplot.Cursor.prototype.resetZoom = function(plot, cursor) {
        var axes = plot.axes;
        var cax = cursor._zoom.axes;
        if (!plot.plugins.cursor.zoomProxy && cursor._zoom.isZoomed) {
            for (var ax in axes) {
                axes[ax]._ticks = [];
                axes[ax].min = cax[ax].min;
                axes[ax].max = cax[ax].max;
                axes[ax].numberTicks = cax[ax].numberTicks; 
                axes[ax].tickInterval = cax[ax].tickInterval;
                // for date axes
                axes[ax].daTickInterval = cax[ax].daTickInterval;
            }
            plot.redraw();
            cursor._zoom.isZoomed = false;
        }
        else {
            var ctx = cursor.zoomCanvas._ctx;
            ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
        }
        plot.target.trigger('jqplotResetZoom', [plot, cursor]);
    };
    
    $.jqplot.Cursor.resetZoom = function(plot) {
        plot.resetZoom();
    };
    
    $.jqplot.Cursor.prototype.doZoom = function (gridpos, datapos, plot, cursor) {
        var c = cursor;
        var axes = plot.axes;
        var zaxes = c._zoom.axes;
        var start = zaxes.start;
        var end = zaxes.end;
        var min, max;
        var ctx = plot.plugins.cursor.zoomCanvas._ctx;
        // don't zoom is zoom area is too small (in pixels)
        if ((c.constrainZoomTo == 'none' && Math.abs(gridpos.x - c._zoom.start[0]) > 6 && Math.abs(gridpos.y - c._zoom.start[1]) > 6) || (c.constrainZoomTo == 'x' && Math.abs(gridpos.x - c._zoom.start[0]) > 6) ||  (c.constrainZoomTo == 'y' && Math.abs(gridpos.y - c._zoom.start[1]) > 6)) {
            if (!plot.plugins.cursor.zoomProxy) {
                for (var ax in datapos) {
                    // make a copy of the original axes to revert back.
                    if (c._zoom.axes[ax] == undefined) {
                        c._zoom.axes[ax] = {};
                        c._zoom.axes[ax].numberTicks = axes[ax].numberTicks;
                        c._zoom.axes[ax].tickInterval = axes[ax].tickInterval;
                        // for date axes...
                        c._zoom.axes[ax].daTickInterval = axes[ax].daTickInterval;
                        c._zoom.axes[ax].min = axes[ax].min;
                        c._zoom.axes[ax].max = axes[ax].max;
                    }
                    if ((c.constrainZoomTo == 'none') || (c.constrainZoomTo == 'x' && ax.charAt(0) == 'x') || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'y')) {   
                        dp = datapos[ax];
                        if (dp != null) {           
                            if (dp > start[ax]) { 
                                axes[ax].min = start[ax];
                                axes[ax].max = dp;
                            }
                            else {
                                span = start[ax] - dp;
                                axes[ax].max = start[ax];
                                axes[ax].min = dp;
                            }
                            axes[ax].tickInterval = null;
                            // for date axes...
                            axes[ax].daTickInterval = null;
                            axes[ax]._ticks = [];
                        }
                    }
                            
                    // if ((c.constrainZoomTo == 'x' && ax.charAt(0) == 'y' && c.autoscaleConstraint) || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'x' && c.autoscaleConstraint)) {
                    //     dp = datapos[ax];
                    //     if (dp != null) {
                    //         axes[ax].max == null;
                    //         axes[ax].min = null;
                    //     }
                    // }
                }
                ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
                plot.redraw();
                c._zoom.isZoomed = true;
            }
            plot.target.trigger('jqplotZoom', [gridpos, datapos, plot, cursor]);
        }
    };
    
    $.jqplot.preInitHooks.push($.jqplot.Cursor.init);
    $.jqplot.postDrawHooks.push($.jqplot.Cursor.postDraw);
    
    function updateTooltip(gridpos, datapos, plot) {
        var c = plot.plugins.cursor;
        var s = '';
        var addbr = false;
        if (c.showTooltipGridPosition) {
            s = gridpos.x+', '+gridpos.y;
            addbr = true;
        }
        if (c.showTooltipUnitPosition) {
            var g;
            for (var i=0; i<c.tooltipAxisGroups.length; i++) {
                g = c.tooltipAxisGroups[i];
                if (addbr) {
                    s += '<br />';
                }
                if (c.useAxesFormatters) {
                    var xf = plot.axes[g[0]]._ticks[0].formatter;
                    var yf = plot.axes[g[1]]._ticks[0].formatter;
                    var xfstr = plot.axes[g[0]]._ticks[0].formatString;
                    var yfstr = plot.axes[g[1]]._ticks[0].formatString;
                    s += xf(xfstr, datapos[g[0]]) + ', '+ yf(yfstr, datapos[g[1]]);
                }
                else {
                    s += $.jqplot.sprintf(c.tooltipFormatString, datapos[g[0]], datapos[g[1]]);
                }
                addbr = true;
            }
        }
        
        if (c.showTooltipDataPosition) {
            var series = plot.series; 
            var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y);
            var addbr = false;
        
            for (var i = 0; i< series.length; i++) {
                if (series[i].show) {
                    var idx = series[i].index;
                    var label = series[i].label.toString();
                    var cellid = $.inArray(idx, ret.indices);
                    var sx = undefined;
                    var sy = undefined;
                    if (cellid != -1) {
                        var data = ret.data[cellid].data;
                        if (c.useAxesFormatters) {
                            var xf = series[i]._xaxis._ticks[0].formatter;
                            var yf = series[i]._yaxis._ticks[0].formatter;
                            var xfstr = series[i]._xaxis._ticks[0].formatString;
                            var yfstr = series[i]._yaxis._ticks[0].formatString;
                            sx = xf(xfstr, data[0]);
                            sy = yf(yfstr, data[1]);
                        }
                        else {
                            sx = data[0];
                            sy = data[1];
                        }
                        if (addbr) {
                            s += '<br />';
                        }
                        s += $.jqplot.sprintf(c.tooltipFormatString, label, sx, sy);
                        addbr = true;
                    }
                }
            }
            
        }
        c._tooltipElem.html(s);
    }
    
    function moveLine(gridpos, plot) {
        var c = plot.plugins.cursor;
        var ctx = c.cursorCanvas._ctx;
        ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
        if (c.showVerticalLine) {
            c.shapeRenderer.draw(ctx, [[gridpos.x, 0], [gridpos.x, ctx.canvas.height]]);
        }
        if (c.showHorizontalLine) {
            c.shapeRenderer.draw(ctx, [[0, gridpos.y], [ctx.canvas.width, gridpos.y]]);
        }
        var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y);
        if (c.showCursorLegend) {
            var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label');
            for (var i=0; i<cells.length; i++) {
                var idx = $(cells[i]).data('seriesIndex');
                var series = plot.series[idx];
                var label = series.label.toString();
                var cellid = $.inArray(idx, ret.indices);
                var sx = undefined;
                var sy = undefined;
                if (cellid != -1) {
                    var data = ret.data[cellid].data;
                    if (c.useAxesFormatters) {
                        var xf = series._xaxis._ticks[0].formatter;
                        var yf = series._yaxis._ticks[0].formatter;
                        var xfstr = series._xaxis._ticks[0].formatString;
                        var yfstr = series._yaxis._ticks[0].formatString;
                        sx = xf(xfstr, data[0]);
                        sy = yf(yfstr, data[1]);
                    }
                    else {
                        sx = data[0];
                        sy = data[1];
                    }
                }
                if (plot.legend.escapeHtml) {
                    $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy));
                }
                else {
                    $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy));
                }
            }        
        }
    }
        
    function getIntersectingPoints(plot, x, y) {
        var ret = {indices:[], data:[]};
        var s, i, d0, d, j, r;
        var threshold;
        var c = plot.plugins.cursor;
        for (var i=0; i<plot.series.length; i++) {
            s = plot.series[i];
            r = s.renderer;
            if (s.show) {
                threshold = c.intersectionThreshold;
                if (s.showMarker) {
                    threshold += s.markerRenderer.size/2;
                }
                for (var j=0; j<s.gridData.length; j++) {
                    p = s.gridData[j];
                    // check vertical line
                    if (c.showVerticalLine) {
                        if (Math.abs(x-p[0]) <= threshold) {
                            ret.indices.push(i);
                            ret.data.push({seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]});
                        }
                    }
                } 
            }
        }
        return ret;
    }
    
    function moveTooltip(gridpos, plot) {
        var c = plot.plugins.cursor;  
        var elem = c._tooltipElem;
        switch (c.tooltipLocation) {
            case 'nw':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
                break;
            case 'n':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
                var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
                break;
            case 'ne':
                var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
                break;
            case 'e':
                var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
                break;
            case 'se':
                var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
                break;
            case 's':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
                var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
                break;
            case 'sw':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
                break;
            case 'w':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
                break;
            default:
                var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
                var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
                break;
        }
            
        c._tooltipElem.css('left', x);
        c._tooltipElem.css('top', y);
    }
    
    function positionTooltip(plot) { 
        // fake a grid for positioning
        var grid = plot._gridPadding; 
        var c = plot.plugins.cursor;
        var elem = c._tooltipElem;  
        switch (c.tooltipLocation) {
            case 'nw':
                var a = grid.left + c.tooltipOffset;
                var b = grid.top + c.tooltipOffset;
                elem.css('left', a);
                elem.css('top', b);
                break;
            case 'n':
                var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2;
                var b = grid.top + c.tooltipOffset;
                elem.css('left', a);
                elem.css('top', b);
                break;
            case 'ne':
                var a = grid.right + c.tooltipOffset;
                var b = grid.top + c.tooltipOffset;
                elem.css({right:a, top:b});
                break;
            case 'e':
                var a = grid.right + c.tooltipOffset;
                var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2;
                elem.css({right:a, top:b});
                break;
            case 'se':
                var a = grid.right + c.tooltipOffset;
                var b = grid.bottom + c.tooltipOffset;
                elem.css({right:a, bottom:b});
                break;
            case 's':
                var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2;
                var b = grid.bottom + c.tooltipOffset;
                elem.css({left:a, bottom:b});
                break;
            case 'sw':
                var a = grid.left + c.tooltipOffset;
                var b = grid.bottom + c.tooltipOffset;
                elem.css({left:a, bottom:b});
                break;
            case 'w':
                var a = grid.left + c.tooltipOffset;
                var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2;
                elem.css({left:a, top:b});
                break;
            default:  // same as 'se'
                var a = grid.right - c.tooltipOffset;
                var b = grid.bottom + c.tooltipOffset;
                elem.css({right:a, bottom:b});
                break;
        }
    }
    
    function handleClick (ev, gridpos, datapos, neighbor, plot) {
        ev.preventDefault();
        ev.stopImmediatePropagation();
        var c = plot.plugins.cursor;
        if (c.clickReset) {
            c.resetZoom(plot, c);
        }
        var sel = window.getSelection;
        if (document.selection && document.selection.empty)
        {
            document.selection.empty();
        }
        else if (sel && !sel().isCollapsed) {
            sel().collapse();
        }
        return false;
    }
    
    function handleDblClick (ev, gridpos, datapos, neighbor, plot) {
        ev.preventDefault();
        ev.stopImmediatePropagation();
        var c = plot.plugins.cursor;
        if (c.dblClickReset) {
            c.resetZoom(plot, c);
        }
        var sel = window.getSelection;
        if (document.selection && document.selection.empty)
        {
            document.selection.empty();
        }
        else if (sel && !sel().isCollapsed) {
            sel().collapse();
        }
        return false;
    }
    
    function handleMouseLeave(ev, gridpos, datapos, neighbor, plot) {
        var c = plot.plugins.cursor;
        c.onGrid = false;
        if (c.show) {
            $(ev.target).css('cursor', c.previousCursor);
            if (c.showTooltip && !(c._zoom.zooming && c.showTooltipOutsideZoom && !c.constrainOutsideZoom)) {
                c._tooltipElem.hide();
            }
            if (c.zoom) {
                c._zoom.gridpos = gridpos;
                c._zoom.datapos = datapos;
            }
            if (c.showVerticalLine || c.showHorizontalLine) {
                var ctx = c.cursorCanvas._ctx;
                ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
            }
            if (c.showCursorLegend) {
                var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label');
                for (var i=0; i<cells.length; i++) {
                    var idx = $(cells[i]).data('seriesIndex');
                    var series = plot.series[idx];
                    var label = series.label.toString();
                    if (plot.legend.escapeHtml) {
                        $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined));
                    }
                    else {
                        $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined));
                    }
                
                }        
            }
        }
    }
    
    function handleMouseEnter(ev, gridpos, datapos, neighbor, plot) {
        var c = plot.plugins.cursor;
        c.onGrid = true;
        if (c.show) {
            c.previousCursor = ev.target.style.cursor;
            ev.target.style.cursor = c.style;
            if (c.showTooltip) {
                updateTooltip(gridpos, datapos, plot);
                if (c.followMouse) {
                    moveTooltip(gridpos, plot);
                }
                else {
                    positionTooltip(plot);
                }
                c._tooltipElem.show();
            }
            if (c.showVerticalLine || c.showHorizontalLine) {
                moveLine(gridpos, plot);
            }
        }

    }    
    
    function handleMouseMove(ev, gridpos, datapos, neighbor, plot) {
        var c = plot.plugins.cursor;
        var ctx = c.zoomCanvas._ctx;
        if (c.show) {
            if (c.showTooltip) {
                updateTooltip(gridpos, datapos, plot);
                if (c.followMouse) {
                    moveTooltip(gridpos, plot);
                }
            }
            if (c.showVerticalLine || c.showHorizontalLine) {
                moveLine(gridpos, plot);
            }
        }
    }
            
    function getEventPosition(ev) {
        var plot = ev.data.plot;
        var go = plot.eventCanvas._elem.offset();
        var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
        var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null};
        var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
        var ax = plot.axes;
        var n, axis;
        for (n=11; n>0; n--) {
            axis = an[n-1];
            if (ax[axis].show) {
                dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]);
            }
        }

        return {offsets:go, gridPos:gridPos, dataPos:dataPos};
    }    
    
    function handleZoomMove(ev) {
        var plot = ev.data.plot;
        var c = plot.plugins.cursor;
        // don't do anything if not on grid.
        if (c.show && c.zoom && c._zoom.started && !c.zoomTarget) {
            var ctx = c.zoomCanvas._ctx;
            var positions = getEventPosition(ev);
            var gridpos = positions.gridPos;
            var datapos = positions.dataPos;
            c._zoom.gridpos = gridpos;
            c._zoom.datapos = datapos;
            c._zoom.zooming = true;
            var xpos = gridpos.x;
            var ypos = gridpos.y;
            var height = ctx.canvas.height;
            var width = ctx.canvas.width;
            if (c.showTooltip && !c.onGrid && c.showTooltipOutsideZoom) {
                updateTooltip(gridpos, datapos, plot);
                if (c.followMouse) {
                    moveTooltip(gridpos, plot);
                }
            }
            if (c.constrainZoomTo == 'x') {
                c._zoom.end = [xpos, height];
            }
            else if (c.constrainZoomTo == 'y') {
                c._zoom.end = [width, ypos];
            }
            else {
                c._zoom.end = [xpos, ypos];
            }
            var sel = window.getSelection;
            if (document.selection && document.selection.empty)
            {
                document.selection.empty();
            }
            else if (sel && !sel().isCollapsed) {
                sel().collapse();
            }
            drawZoomBox.call(c);
        }
    }
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        var c = plot.plugins.cursor;
        $(document).one('mouseup.jqplot_cursor', {plot:plot}, handleMouseUp);
        var axes = plot.axes;
        if (document.onselectstart != undefined) {
            c._oldHandlers.onselectstart = document.onselectstart;
            document.onselectstart = function () { return false; };
        }
        if (document.ondrag != undefined) {
            c._oldHandlers.ondrag = document.ondrag;
            document.ondrag = function () { return false; };
        }
        if (document.onmousedown != undefined) {
            c._oldHandlers.onmousedown = document.onmousedown;
            document.onmousedown = function () { return false; };
        }
        if (c.zoom) {
            if (!c.zoomProxy) {
                var ctx = c.zoomCanvas._ctx;
                ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
            }
            if (c.constrainZoomTo == 'x') {
                c._zoom.start = [gridpos.x, 0];
            }
            else if (c.constrainZoomTo == 'y') {
                c._zoom.start = [0, gridpos.y];
            }
            else {
                c._zoom.start = [gridpos.x, gridpos.y];
            }
            c._zoom.started = true;
            for (var ax in datapos) {
                // get zoom starting position.
                c._zoom.axes.start[ax] = datapos[ax];
            }  
            $(document).bind('mousemove.jqplotCursor', {plot:plot}, handleZoomMove);              
        }
    }
    
    function handleMouseUp(ev) {
        var plot = ev.data.plot;
        var c = plot.plugins.cursor;
        if (c.zoom && c._zoom.zooming && !c.zoomTarget) {
            var xpos = c._zoom.gridpos.x;
            var ypos = c._zoom.gridpos.y;
            var datapos = c._zoom.datapos;
            var height = c.zoomCanvas._ctx.canvas.height;
            var width = c.zoomCanvas._ctx.canvas.width;
            var axes = plot.axes;
            
            if (c.constrainOutsideZoom && !c.onGrid) {
                if (xpos < 0) { xpos = 0; }
                else if (xpos > width) { xpos = width; }
                if (ypos < 0) { ypos = 0; }
                else if (ypos > height) { ypos = height; }
                
                for (var axis in datapos) {
                    if (datapos[axis]) {
                        if (axis.charAt(0) == 'x') {
                            datapos[axis] = axes[axis].series_p2u(xpos);
                        }
                        else {
                            datapos[axis] = axes[axis].series_p2u(ypos);
                        }
                    }
                }
            }
            
            if (c.constrainZoomTo == 'x') {
                ypos = height;
            }
            else if (c.constrainZoomTo == 'y') {
                xpos = width;
            }
            c._zoom.end = [xpos, ypos];
            c._zoom.gridpos = {x:xpos, y:ypos};
            
            c.doZoom(c._zoom.gridpos, datapos, plot, c);
        }
        c._zoom.started = false;
        c._zoom.zooming = false;
        
        $(document).unbind('mousemove.jqplotCursor', handleZoomMove);
        
        if (document.onselectstart != undefined && c._oldHandlers.onselectstart != null){
            document.onselectstart = c._oldHandlers.onselectstart;
            c._oldHandlers.onselectstart = null;
        }
        if (document.ondrag != undefined && c._oldHandlers.ondrag != null){
            document.ondrag = c._oldHandlers.ondrag;
            c._oldHandlers.ondrag = null;
        }
        if (document.onmousedown != undefined && c._oldHandlers.onmousedown != null){
            document.onmousedown = c._oldHandlers.onmousedown;
            c._oldHandlers.onmousedown = null;
        }

    }
    
    function drawZoomBox() {
        var start = this._zoom.start;
        var end = this._zoom.end;
        var ctx = this.zoomCanvas._ctx;
        var l, t, h, w;
        if (end[0] > start[0]) {
            l = start[0];
            w = end[0] - start[0];
        }
        else {
            l = end[0];
            w = start[0] - end[0];
        }
        if (end[1] > start[1]) {
            t = start[1];
            h = end[1] - start[1];
        }
        else {
            t = end[1];
            h = start[1] - end[1];
        }
        ctx.fillStyle = 'rgba(0,0,0,0.2)';
        ctx.strokeStyle = '#999999';
        ctx.lineWidth = 1.0;
        ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
        ctx.fillRect(0,0,ctx.canvas.width, ctx.canvas.height);
        ctx.clearRect(l, t, w, h);
        // IE won't show transparent fill rect, so stroke a rect also.
        ctx.strokeRect(l,t,w,h);
    }
    
    $.jqplot.CursorLegendRenderer = function(options) {
        $.jqplot.TableLegendRenderer.call(this, options);
        this.formatString = '%s';
    };
    
    $.jqplot.CursorLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
    $.jqplot.CursorLegendRenderer.prototype.constructor = $.jqplot.CursorLegendRenderer;
    
    // called in context of a Legend
    $.jqplot.CursorLegendRenderer.prototype.draw = function() {
        if (this.show) {
            var series = this._series;
            // make a table.  one line label per row.
            this._elem = $('<table class="jqplot-legend jqplot-cursor-legend" style="position:absolute"></table>');
        
            var pad = false;
            for (var i = 0; i< series.length; i++) {
                s = series[i];
                if (s.show) {
                    var lt = $.jqplot.sprintf(this.formatString, s.label.toString());
                    if (lt) {
                        var color = s.color;
                        if (s._stack && !s.fill) {
                            color = '';
                        }
                        addrow.call(this, lt, color, pad, i);
                        pad = true;
                    }
                    // let plugins add more rows to legend.  Used by trend line plugin.
                    for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) {
                        var item = $.jqplot.addLegendRowHooks[j].call(this, s);
                        if (item) {
                            addrow.call(this, item.label, item.color, pad);
                            pad = true;
                        } 
                    }
                }
            }
        }
        
        function addrow(label, color, pad, idx) {
            var rs = (pad) ? this.rowSpacing : '0';
            var tr = $('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);
            tr.data('seriesIndex', idx);
            $('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+rs+';">'+
                '<div style="border:1px solid #cccccc;padding:0.2em;">'+
                '<div class="jqplot-cursor-legend-swatch" style="background-color:'+color+';"></div>'+
                '</div></td>').appendTo(tr);
            var td = $('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+rs+';"></td>');
            td.appendTo(tr);
            td.data('seriesIndex', idx);
            if (this.escapeHtml) {
                td.text(label);
            }
            else {
                td.html(label);
            }
        }
        return this._elem;
    };
    
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.cursor.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(j){j.jqplot.Cursor=function(r){this.style="crosshair";this.previousCursor="auto";this.show=j.jqplot.config.enablePlugins;this.showTooltip=true;this.followMouse=false;this.tooltipLocation="se";this.tooltipOffset=6;this.showTooltipGridPosition=false;this.showTooltipUnitPosition=true;this.showTooltipDataPosition=false;this.tooltipFormatString="%.4P, %.4P";this.useAxesFormatters=true;this.tooltipAxisGroups=[];this.zoom=false;this.zoomProxy=false;this.zoomTarget=false;this.clickReset=false;this.dblClickReset=true;this.showVerticalLine=false;this.showHorizontalLine=false;this.constrainZoomTo="none";this.shapeRenderer=new j.jqplot.ShapeRenderer();this._zoom={start:[],end:[],started:false,zooming:false,isZoomed:false,axes:{start:{},end:{}},gridpos:{},datapos:{}};this._tooltipElem;this.zoomCanvas;this.cursorCanvas;this.intersectionThreshold=2;this.showCursorLegend=false;this.cursorLegendFormatString=j.jqplot.Cursor.cursorLegendFormatString;this._oldHandlers={onselectstart:null,ondrag:null,onmousedown:null};this.constrainOutsideZoom=true;this.showTooltipOutsideZoom=false;this.onGrid=false;j.extend(true,this,r)};j.jqplot.Cursor.cursorLegendFormatString="%s x:%s, y:%s";j.jqplot.Cursor.init=function(v,u,t){var r=t||{};this.plugins.cursor=new j.jqplot.Cursor(r.cursor);var w=this.plugins.cursor;if(w.show){j.jqplot.eventListenerHooks.push(["jqplotMouseEnter",b]);j.jqplot.eventListenerHooks.push(["jqplotMouseLeave",f]);j.jqplot.eventListenerHooks.push(["jqplotMouseMove",i]);if(w.showCursorLegend){t.legend=t.legend||{};t.legend.renderer=j.jqplot.CursorLegendRenderer;t.legend.formatString=this.plugins.cursor.cursorLegendFormatString;t.legend.show=true}if(w.zoom){j.jqplot.eventListenerHooks.push(["jqplotMouseDown",a]);if(w.clickReset){j.jqplot.eventListenerHooks.push(["jqplotClick",k])}if(w.dblClickReset){j.jqplot.eventListenerHooks.push(["jqplotDblClick",c])}}this.resetZoom=function(){var z=this.axes;if(!w.zoomProxy){for(var y in z){z[y].reset()}this.redraw()}else{var x=this.plugins.cursor.zoomCanvas._ctx;x.clearRect(0,0,x.canvas.width,x.canvas.height)}this.plugins.cursor._zoom.isZoomed=false;this.target.trigger("jqplotResetZoom",[this,this.plugins.cursor])};if(w.showTooltipDataPosition){w.showTooltipUnitPosition=false;w.showTooltipGridPosition=false;if(r.cursor.tooltipFormatString==undefined){w.tooltipFormatString=j.jqplot.Cursor.cursorLegendFormatString}}}};j.jqplot.Cursor.postDraw=function(){var y=this.plugins.cursor;y.zoomCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(y.zoomCanvas.createElement(this._gridPadding,"jqplot-zoom-canvas",this._plotDimensions));var x=y.zoomCanvas.setContext();y._tooltipElem=j('<div class="jqplot-cursor-tooltip" style="position:absolute;display:none"></div>');y.zoomCanvas._elem.before(y._tooltipElem);if(y.showVerticalLine||y.showHorizontalLine){y.cursorCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(y.cursorCanvas.createElement(this._gridPadding,"jqplot-cursor-canvas",this._plotDimensions));var x=y.cursorCanvas.setContext()}if(y.showTooltipUnitPosition){if(y.tooltipAxisGroups.length===0){var u=this.series;var v;var r=[];for(var t=0;t<u.length;t++){v=u[t];var w=v.xaxis+","+v.yaxis;if(j.inArray(w,r)==-1){r.push(w)}}for(var t=0;t<r.length;t++){y.tooltipAxisGroups.push(r[t].split(","))}}}};j.jqplot.Cursor.zoomProxy=function(x,t){var r=x.plugins.cursor;var w=t.plugins.cursor;r.zoomTarget=true;r.zoom=true;r.style="auto";r.dblClickReset=false;w.zoom=true;w.zoomProxy=true;t.target.bind("jqplotZoom",v);t.target.bind("jqplotResetZoom",u);function v(z,y,B,A,C){r.doZoom(y,B,x,C)}function u(y,z,A){x.resetZoom()}};j.jqplot.Cursor.prototype.resetZoom=function(w,x){var v=w.axes;var u=x._zoom.axes;if(!w.plugins.cursor.zoomProxy&&x._zoom.isZoomed){for(var t in v){v[t]._ticks=[];v[t].min=u[t].min;v[t].max=u[t].max;v[t].numberTicks=u[t].numberTicks;v[t].tickInterval=u[t].tickInterval;v[t].daTickInterval=u[t].daTickInterval}w.redraw();x._zoom.isZoomed=false}else{var r=x.zoomCanvas._ctx;r.clearRect(0,0,r.canvas.width,r.canvas.height)}w.target.trigger("jqplotResetZoom",[w,x])};j.jqplot.Cursor.resetZoom=function(r){r.resetZoom()};j.jqplot.Cursor.prototype.doZoom=function(y,v,z,D){var B=D;var A=z.axes;var t=B._zoom.axes;var u=t.start;var w=t.end;var x,C;var E=z.plugins.cursor.zoomCanvas._ctx;if((B.constrainZoomTo=="none"&&Math.abs(y.x-B._zoom.start[0])>6&&Math.abs(y.y-B._zoom.start[1])>6)||(B.constrainZoomTo=="x"&&Math.abs(y.x-B._zoom.start[0])>6)||(B.constrainZoomTo=="y"&&Math.abs(y.y-B._zoom.start[1])>6)){if(!z.plugins.cursor.zoomProxy){for(var r in v){if(B._zoom.axes[r]==undefined){B._zoom.axes[r]={};B._zoom.axes[r].numberTicks=A[r].numberTicks;B._zoom.axes[r].tickInterval=A[r].tickInterval;B._zoom.axes[r].daTickInterval=A[r].daTickInterval;B._zoom.axes[r].min=A[r].min;B._zoom.axes[r].max=A[r].max}if((B.constrainZoomTo=="none")||(B.constrainZoomTo=="x"&&r.charAt(0)=="x")||(B.constrainZoomTo=="y"&&r.charAt(0)=="y")){dp=v[r];if(dp!=null){if(dp>u[r]){A[r].min=u[r];A[r].max=dp}else{span=u[r]-dp;A[r].max=u[r];A[r].min=dp}A[r].tickInterval=null;A[r].daTickInterval=null;A[r]._ticks=[]}}}E.clearRect(0,0,E.canvas.width,E.canvas.height);z.redraw();B._zoom.isZoomed=true}z.target.trigger("jqplotZoom",[y,v,z,D])}};j.jqplot.preInitHooks.push(j.jqplot.Cursor.init);j.jqplot.postDrawHooks.push(j.jqplot.Cursor.postDraw);function e(F,t,C){var H=C.plugins.cursor;var x="";var L=false;if(H.showTooltipGridPosition){x=F.x+", "+F.y;L=true}if(H.showTooltipUnitPosition){var E;for(var D=0;D<H.tooltipAxisGroups.length;D++){E=H.tooltipAxisGroups[D];if(L){x+="<br />"}if(H.useAxesFormatters){var B=C.axes[E[0]]._ticks[0].formatter;var r=C.axes[E[1]]._ticks[0].formatter;var I=C.axes[E[0]]._ticks[0].formatString;var w=C.axes[E[1]]._ticks[0].formatString;x+=B(I,t[E[0]])+", "+r(w,t[E[1]])}else{x+=j.jqplot.sprintf(H.tooltipFormatString,t[E[0]],t[E[1]])}L=true}}if(H.showTooltipDataPosition){var v=C.series;var K=d(C,F.x,F.y);var L=false;for(var D=0;D<v.length;D++){if(v[D].show){var z=v[D].index;var u=v[D].label.toString();var G=j.inArray(z,K.indices);var A=undefined;var y=undefined;if(G!=-1){var J=K.data[G].data;if(H.useAxesFormatters){var B=v[D]._xaxis._ticks[0].formatter;var r=v[D]._yaxis._ticks[0].formatter;var I=v[D]._xaxis._ticks[0].formatString;var w=v[D]._yaxis._ticks[0].formatString;A=B(I,J[0]);y=r(w,J[1])}else{A=J[0];y=J[1]}if(L){x+="<br />"}x+=j.jqplot.sprintf(H.tooltipFormatString,u,A,y);L=true}}}}H._tooltipElem.html(x)}function g(E,C){var G=C.plugins.cursor;var B=G.cursorCanvas._ctx;B.clearRect(0,0,B.canvas.width,B.canvas.height);if(G.showVerticalLine){G.shapeRenderer.draw(B,[[E.x,0],[E.x,B.canvas.height]])}if(G.showHorizontalLine){G.shapeRenderer.draw(B,[[0,E.y],[B.canvas.width,E.y]])}var I=d(C,E.x,E.y);if(G.showCursorLegend){var t=j(C.targetId+" td.jqplot-cursor-legend-label");for(var D=0;D<t.length;D++){var x=j(t[D]).data("seriesIndex");var v=C.series[x];var u=v.label.toString();var F=j.inArray(x,I.indices);var z=undefined;var y=undefined;if(F!=-1){var J=I.data[F].data;if(G.useAxesFormatters){var A=v._xaxis._ticks[0].formatter;var r=v._yaxis._ticks[0].formatter;var H=v._xaxis._ticks[0].formatString;var w=v._yaxis._ticks[0].formatString;z=A(H,J[0]);y=r(w,J[1])}else{z=J[0];y=J[1]}}if(C.legend.escapeHtml){j(t[D]).text(j.jqplot.sprintf(G.cursorLegendFormatString,u,z,y))}else{j(t[D]).html(j.jqplot.sprintf(G.cursorLegendFormatString,u,z,y))}}}}function d(A,F,E){var B={indices:[],data:[]};var G,w,u,C,v,t;var z;var D=A.plugins.cursor;for(var w=0;w<A.series.length;w++){G=A.series[w];t=G.renderer;if(G.show){z=D.intersectionThreshold;if(G.showMarker){z+=G.markerRenderer.size/2}for(var v=0;v<G.gridData.length;v++){p=G.gridData[v];if(D.showVerticalLine){if(Math.abs(F-p[0])<=z){B.indices.push(w);B.data.push({seriesIndex:w,pointIndex:v,gridData:p,data:G.data[v]})}}}}}return B}function n(t,v){var z=v.plugins.cursor;var u=z._tooltipElem;switch(z.tooltipLocation){case"nw":var r=t.x+v._gridPadding.left-u.outerWidth(true)-z.tooltipOffset;var w=t.y+v._gridPadding.top-z.tooltipOffset-u.outerHeight(true);break;case"n":var r=t.x+v._gridPadding.left-u.outerWidth(true)/2;var w=t.y+v._gridPadding.top-z.tooltipOffset-u.outerHeight(true);break;case"ne":var r=t.x+v._gridPadding.left+z.tooltipOffset;var w=t.y+v._gridPadding.top-z.tooltipOffset-u.outerHeight(true);break;case"e":var r=t.x+v._gridPadding.left+z.tooltipOffset;var w=t.y+v._gridPadding.top-u.outerHeight(true)/2;break;case"se":var r=t.x+v._gridPadding.left+z.tooltipOffset;var w=t.y+v._gridPadding.top+z.tooltipOffset;break;case"s":var r=t.x+v._gridPadding.left-u.outerWidth(true)/2;var w=t.y+v._gridPadding.top+z.tooltipOffset;break;case"sw":var r=t.x+v._gridPadding.left-u.outerWidth(true)-z.tooltipOffset;var w=t.y+v._gridPadding.top+z.tooltipOffset;break;case"w":var r=t.x+v._gridPadding.left-u.outerWidth(true)-z.tooltipOffset;var w=t.y+v._gridPadding.top-u.outerHeight(true)/2;break;default:var r=t.x+v._gridPadding.left+z.tooltipOffset;var w=t.y+v._gridPadding.top+z.tooltipOffset;break}z._tooltipElem.css("left",r);z._tooltipElem.css("top",w)}function m(w){var u=w._gridPadding;var x=w.plugins.cursor;var v=x._tooltipElem;switch(x.tooltipLocation){case"nw":var t=u.left+x.tooltipOffset;var r=u.top+x.tooltipOffset;v.css("left",t);v.css("top",r);break;case"n":var t=(u.left+(w._plotDimensions.width-u.right))/2-v.outerWidth(true)/2;var r=u.top+x.tooltipOffset;v.css("left",t);v.css("top",r);break;case"ne":var t=u.right+x.tooltipOffset;var r=u.top+x.tooltipOffset;v.css({right:t,top:r});break;case"e":var t=u.right+x.tooltipOffset;var r=(u.top+(w._plotDimensions.height-u.bottom))/2-v.outerHeight(true)/2;v.css({right:t,top:r});break;case"se":var t=u.right+x.tooltipOffset;var r=u.bottom+x.tooltipOffset;v.css({right:t,bottom:r});break;case"s":var t=(u.left+(w._plotDimensions.width-u.right))/2-v.outerWidth(true)/2;var r=u.bottom+x.tooltipOffset;v.css({left:t,bottom:r});break;case"sw":var t=u.left+x.tooltipOffset;var r=u.bottom+x.tooltipOffset;v.css({left:t,bottom:r});break;case"w":var t=u.left+x.tooltipOffset;var r=(u.top+(w._plotDimensions.height-u.bottom))/2-v.outerHeight(true)/2;v.css({left:t,top:r});break;default:var t=u.right-x.tooltipOffset;var r=u.bottom+x.tooltipOffset;v.css({right:t,bottom:r});break}}function k(t,r,x,w,v){t.preventDefault();t.stopImmediatePropagation();var y=v.plugins.cursor;if(y.clickReset){y.resetZoom(v,y)}var u=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(u&&!u().isCollapsed){u().collapse()}}return false}function c(t,r,x,w,v){t.preventDefault();t.stopImmediatePropagation();var y=v.plugins.cursor;if(y.dblClickReset){y.resetZoom(v,y)}var u=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(u&&!u().isCollapsed){u().collapse()}}return false}function f(y,v,r,B,w){var x=w.plugins.cursor;x.onGrid=false;if(x.show){j(y.target).css("cursor",x.previousCursor);if(x.showTooltip&&!(x._zoom.zooming&&x.showTooltipOutsideZoom&&!x.constrainOutsideZoom)){x._tooltipElem.hide()}if(x.zoom){x._zoom.gridpos=v;x._zoom.datapos=r}if(x.showVerticalLine||x.showHorizontalLine){var D=x.cursorCanvas._ctx;D.clearRect(0,0,D.canvas.width,D.canvas.height)}if(x.showCursorLegend){var C=j(w.targetId+" td.jqplot-cursor-legend-label");for(var u=0;u<C.length;u++){var A=j(C[u]).data("seriesIndex");var t=w.series[A];var z=t.label.toString();if(w.legend.escapeHtml){j(C[u]).text(j.jqplot.sprintf(x.cursorLegendFormatString,z,undefined,undefined))}else{j(C[u]).html(j.jqplot.sprintf(x.cursorLegendFormatString,z,undefined,undefined))}}}}}function b(t,r,w,v,u){var x=u.plugins.cursor;x.onGrid=true;if(x.show){x.previousCursor=t.target.style.cursor;t.target.style.cursor=x.style;if(x.showTooltip){e(r,w,u);if(x.followMouse){n(r,u)}else{m(u)}x._tooltipElem.show()}if(x.showVerticalLine||x.showHorizontalLine){g(r,u)}}}function i(u,t,x,w,v){var y=v.plugins.cursor;var r=y.zoomCanvas._ctx;if(y.show){if(y.showTooltip){e(t,x,v);if(y.followMouse){n(t,v)}}if(y.showVerticalLine||y.showHorizontalLine){g(t,v)}}}function o(A){var z=A.data.plot;var v=z.eventCanvas._elem.offset();var y={x:A.pageX-v.left,y:A.pageY-v.top};var w={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null};var x=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var r=z.axes;var t,u;for(t=11;t>0;t--){u=x[t-1];if(r[u].show){w[u]=r[u].series_p2u(y[u.charAt(0)])}}return{offsets:v,gridPos:y,dataPos:w}}function h(B){var z=B.data.plot;var A=z.plugins.cursor;if(A.show&&A.zoom&&A._zoom.started&&!A.zoomTarget){var D=A.zoomCanvas._ctx;var x=o(B);var y=x.gridPos;var v=x.dataPos;A._zoom.gridpos=y;A._zoom.datapos=v;A._zoom.zooming=true;var w=y.x;var u=y.y;var C=D.canvas.height;var r=D.canvas.width;if(A.showTooltip&&!A.onGrid&&A.showTooltipOutsideZoom){e(y,v,z);if(A.followMouse){n(y,z)}}if(A.constrainZoomTo=="x"){A._zoom.end=[w,C]}else{if(A.constrainZoomTo=="y"){A._zoom.end=[r,u]}else{A._zoom.end=[w,u]}}var t=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(t&&!t().isCollapsed){t().collapse()}}l.call(A)}}function a(y,u,t,z,v){var x=v.plugins.cursor;j(document).one("mouseup.jqplot_cursor",{plot:v},q);var w=v.axes;if(document.onselectstart!=undefined){x._oldHandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!=undefined){x._oldHandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}if(document.onmousedown!=undefined){x._oldHandlers.onmousedown=document.onmousedown;document.onmousedown=function(){return false}}if(x.zoom){if(!x.zoomProxy){var A=x.zoomCanvas._ctx;A.clearRect(0,0,A.canvas.width,A.canvas.height)}if(x.constrainZoomTo=="x"){x._zoom.start=[u.x,0]}else{if(x.constrainZoomTo=="y"){x._zoom.start=[0,u.y]}else{x._zoom.start=[u.x,u.y]}}x._zoom.started=true;for(var r in t){x._zoom.axes.start[r]=t[r]}j(document).bind("mousemove.jqplotCursor",{plot:v},h)}}function q(A){var x=A.data.plot;var z=x.plugins.cursor;if(z.zoom&&z._zoom.zooming&&!z.zoomTarget){var w=z._zoom.gridpos.x;var t=z._zoom.gridpos.y;var v=z._zoom.datapos;var B=z.zoomCanvas._ctx.canvas.height;var r=z.zoomCanvas._ctx.canvas.width;var y=x.axes;if(z.constrainOutsideZoom&&!z.onGrid){if(w<0){w=0}else{if(w>r){w=r}}if(t<0){t=0}else{if(t>B){t=B}}for(var u in v){if(v[u]){if(u.charAt(0)=="x"){v[u]=y[u].series_p2u(w)}else{v[u]=y[u].series_p2u(t)}}}}if(z.constrainZoomTo=="x"){t=B}else{if(z.constrainZoomTo=="y"){w=r}}z._zoom.end=[w,t];z._zoom.gridpos={x:w,y:t};z.doZoom(z._zoom.gridpos,v,x,z)}z._zoom.started=false;z._zoom.zooming=false;j(document).unbind("mousemove.jqplotCursor",h);if(document.onselectstart!=undefined&&z._oldHandlers.onselectstart!=null){document.onselectstart=z._oldHandlers.onselectstart;z._oldHandlers.onselectstart=null}if(document.ondrag!=undefined&&z._oldHandlers.ondrag!=null){document.ondrag=z._oldHandlers.ondrag;z._oldHandlers.ondrag=null}if(document.onmousedown!=undefined&&z._oldHandlers.onmousedown!=null){document.onmousedown=z._oldHandlers.onmousedown;z._oldHandlers.onmousedown=null}}function l(){var A=this._zoom.start;var x=this._zoom.end;var v=this.zoomCanvas._ctx;var u,y,z,r;if(x[0]>A[0]){u=A[0];r=x[0]-A[0]}else{u=x[0];r=A[0]-x[0]}if(x[1]>A[1]){y=A[1];z=x[1]-A[1]}else{y=x[1];z=A[1]-x[1]}v.fillStyle="rgba(0,0,0,0.2)";v.strokeStyle="#999999";v.lineWidth=1;v.clearRect(0,0,v.canvas.width,v.canvas.height);v.fillRect(0,0,v.canvas.width,v.canvas.height);v.clearRect(u,y,r,z);v.strokeRect(u,y,r,z)}j.jqplot.CursorLegendRenderer=function(r){j.jqplot.TableLegendRenderer.call(this,r);this.formatString="%s"};j.jqplot.CursorLegendRenderer.prototype=new j.jqplot.TableLegendRenderer();j.jqplot.CursorLegendRenderer.prototype.constructor=j.jqplot.CursorLegendRenderer;j.jqplot.CursorLegendRenderer.prototype.draw=function(){if(this.show){var w=this._series;this._elem=j('<table class="jqplot-legend jqplot-cursor-legend" style="position:absolute"></table>');var z=false;for(var v=0;v<w.length;v++){s=w[v];if(s.show){var r=j.jqplot.sprintf(this.formatString,s.label.toString());if(r){var t=s.color;if(s._stack&&!s.fill){t=""}x.call(this,r,t,z,v);z=true}for(var u=0;u<j.jqplot.addLegendRowHooks.length;u++){var y=j.jqplot.addLegendRowHooks[u].call(this,s);if(y){x.call(this,y.label,y.color,z);z=true}}}}}function x(D,C,F,A){var B=(F)?this.rowSpacing:"0";var E=j('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);E.data("seriesIndex",A);j('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+B+';"><div style="border:1px solid #cccccc;padding:0.2em;"><div class="jqplot-cursor-legend-swatch" style="background-color:'+C+';"></div></div></td>').appendTo(E);var G=j('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+B+';"></td>');G.appendTo(E);G.data("seriesIndex",A);if(this.escapeHtml){G.text(D)}else{G.html(D)}}return this._elem}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.dateAxisRenderer.js.



















































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {  
    /**
     * Class: $.jqplot.DateAxisRenderer
     * A plugin for a jqPlot to render an axis as a series of date values.
     * This renderer has no options beyond those supplied by the <Axis> class.
     * It supplies it's own tick formatter, so the tickOptions.formatter option
     * should not be overridden.
     * 
     * Thanks to Ken Synder for his enhanced Date instance methods which are
     * included with this code <http://kendsnyder.com/sandbox/date/>.
     * 
     * To use this renderer, include the plugin in your source
     * > <script type="text/javascript" language="javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>
     * 
     * and supply the appropriate options to your plot
     * 
     * > {axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}
     * 
     * Dates can be passed into the axis in almost any recognizable value and 
     * will be parsed.  They will be rendered on the axis in the format
     * specified by tickOptions.formatString.  e.g. tickOptions.formatString = '%Y-%m-%d'.
     * 
     * Accecptable format codes 
     * are:
     * 
     * > Code    Result                  Description
     * >             == Years ==
     * > %Y      2008                Four-digit year
     * > %y      08                  Two-digit year
     * >             == Months ==
     * > %m      09                  Two-digit month
     * > %#m     9                   One or two-digit month
     * > %B      September           Full month name
     * > %b      Sep                 Abbreviated month name
     * >             == Days ==
     * > %d      05                  Two-digit day of month
     * > %#d     5                   One or two-digit day of month
     * > %e      5                   One or two-digit day of month
     * > %A      Sunday              Full name of the day of the week
     * > %a      Sun                 Abbreviated name of the day of the week
     * > %w      0                   Number of the day of the week (0 = Sunday, 6 = Saturday)
     * > %o      th                  The ordinal suffix string following the day of the month
     * >             == Hours ==
     * > %H      23                  Hours in 24-hour format (two digits)
     * > %#H     3                   Hours in 24-hour integer format (one or two digits)
     * > %I      11                  Hours in 12-hour format (two digits)
     * > %#I     3                   Hours in 12-hour integer format (one or two digits)
     * > %p      PM                  AM or PM
     * >             == Minutes ==
     * > %M      09                  Minutes (two digits)
     * > %#M     9                   Minutes (one or two digits)
     * >             == Seconds ==
     * > %S      02                  Seconds (two digits)
     * > %#S     2                   Seconds (one or two digits)
     * > %s      1206567625723       Unix timestamp (Seconds past 1970-01-01 00:00:00)
     * >             == Milliseconds ==
     * > %N      008                 Milliseconds (three digits)
     * > %#N     8                   Milliseconds (one to three digits)
     * >             == Timezone ==
     * > %O      360                 difference in minutes between local time and GMT
     * > %Z      Mountain Standard Time  Name of timezone as reported by browser
     * > %G      -06:00              Hours and minutes between GMT
     * >             == Shortcuts ==
     * > %F      2008-03-26          %Y-%m-%d
     * > %T      05:06:30            %H:%M:%S
     * > %X      05:06:30            %H:%M:%S
     * > %x      03/26/08            %m/%d/%y
     * > %D      03/26/08            %m/%d/%y
     * > %#c     Wed Mar 26 15:31:00 2008  %a %b %e %H:%M:%S %Y
     * > %v      3-Sep-2008          %e-%b-%Y
     * > %R      15:31               %H:%M
     * > %r      3:31:00 PM          %I:%M:%S %p
     * >             == Characters ==
     * > %n      \n                  Newline
     * > %t      \t                  Tab
     * > %%      %                   Percent Symbol 
     */
    $.jqplot.DateAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.DateAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.DateAxisRenderer.prototype.constructor = $.jqplot.DateAxisRenderer;
    
    $.jqplot.DateTickFormatter = function(format, val) {
        if (!format) {
            format = '%Y/%m/%d';
        }
        return Date.create(val).strftime(format);
    };
    
    $.jqplot.DateAxisRenderer.prototype.init = function(options){
        // prop: tickRenderer
        // A class of a rendering engine for creating the ticks labels displayed on the plot, 
        // See <$.jqplot.AxisTickRenderer>.
        // this.tickRenderer = $.jqplot.AxisTickRenderer;
        // this.labelRenderer = $.jqplot.AxisLabelRenderer;
        this.tickOptions.formatter = $.jqplot.DateTickFormatter;
        this.daTickInterval = null;
        this._daTickInterval = null;
        $.extend(true, this, options);
        var db = this._dataBounds;
        // Go through all the series attached to this axis and find
        // the min/max bounds for this axis.
        for (var i=0; i<this._series.length; i++) {
            var s = this._series[i];
            var d = s.data;
            var pd = s._plotData;
            var sd = s._stackData;
            
            for (var j=0; j<d.length; j++) { 
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    d[j][0] = Date.create(d[j][0]).getTime();
                    pd[j][0] = Date.create(d[j][0]).getTime();
                    sd[j][0] = Date.create(d[j][0]).getTime();
                    if (d[j][0] < db.min || db.min == null) {
                        db.min = d[j][0];
                    }
                    if (d[j][0] > db.max || db.max == null) {
                        db.max = d[j][0];
                    }
                }              
                else {
                    d[j][1] = Date.create(d[j][1]).getTime();
                    pd[j][1] = Date.create(d[j][1]).getTime();
                    sd[j][1] = Date.create(d[j][1]).getTime();
                    if (d[j][1] < db.min || db.min == null) {
                        db.min = d[j][1];
                    }
                    if (d[j][1] > db.max || db.max == null) {
                        db.max = d[j][1];
                    }
                }              
            }
        }
    };
    
    // called with scope of an axis
    $.jqplot.DateAxisRenderer.prototype.reset = function() {
        this.min = this._min;
        this.max = this._max;
        this.tickInterval = this._tickInterval;
        this.numberTicks = this._numberTicks;
        this.daTickInterval = this._daTickInterval;
        // this._ticks = this.__ticks;
    };
    
    $.jqplot.DateAxisRenderer.prototype.createTicks = function() {
        // we're are operating on an axis here
        var ticks = this._ticks;
        var userTicks = this.ticks;
        var name = this.name;
        // databounds were set on axis initialization.
        var db = this._dataBounds;
        var dim, interval;
        var min, max;
        var pos1, pos2;
        var tt, i;
        
        // if we already have ticks, use them.
        // ticks must be in order of increasing value.
        
        if (userTicks.length) {
            // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
            for (i=0; i<userTicks.length; i++){
                var ut = userTicks[i];
                var t = new this.tickRenderer(this.tickOptions);
                if (ut.constructor == Array) {
                    t.value = Date.create(ut[0]).getTime();
                    t.label = ut[1];
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(t.value, this.name);
                    this._ticks.push(t);
                }
                
                else {
                    t.value = Date.create(ut).getTime();
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(t.value, this.name);
                    this._ticks.push(t);
                }
            }
            this.numberTicks = userTicks.length;
            this.min = this._ticks[0].value;
            this.max = this._ticks[this.numberTicks-1].value;
            this.daTickInterval = [(this.max - this.min) / (this.numberTicks - 1)/1000, 'seconds'];
        }
        
        // we don't have any ticks yet, let's make some!
        else {
            if (name == 'xaxis' || name == 'x2axis') {
                dim = this._plotDimensions.width;
            }
            else {
                dim = this._plotDimensions.height;
            }
            
            // if min, max and number of ticks specified, user can't specify interval.
            if (this.min != null && this.max != null && this.numberTicks != null) {
                this.tickInterval = null;
            }
            
            // if user specified a tick interval, convert to usable.
            if (this.tickInterval != null)
            {
                // if interval is a number or can be converted to one, use it.
                // Assume it is in SECONDS!!!
                if (Number(this.tickInterval)) {
                    this.daTickInterval = [Number(this.tickInterval), 'seconds'];
                }
                // else, parse out something we can build from.
                else if (typeof this.tickInterval == "string") {
                    var parts = this.tickInterval.split(' ');
                    if (parts.length == 1) {
                        this.daTickInterval = [1, parts[0]];
                    }
                    else if (parts.length == 2) {
                        this.daTickInterval = [parts[0], parts[1]];
                    }
                }
            }
        
            min = ((this.min != null) ? Date.create(this.min).getTime() : db.min);
            max = ((this.max != null) ? Date.create(this.max).getTime() : db.max);
            
            // if min and max are same, space them out a bit
            if (min == max) {
                var adj = 24*60*60*500;  // 1/2 day
                min -= adj;
                max += adj;
            }

            var range = max - min;
            var rmin, rmax;
        
            rmin = (this.min != null) ? Date.create(this.min).getTime() : min - range/2*(this.padMin - 1);
            rmax = (this.max != null) ? Date.create(this.max).getTime() : max + range/2*(this.padMax - 1);
            this.min = rmin;
            this.max = rmax;
            range = this.max - this.min;
    
            if (this.numberTicks == null){
                // if tickInterval is specified by user, we will ignore computed maximum.
                // max will be equal or greater to fit even # of ticks.
                if (this.daTickInterval != null) {
                    var nc = Date.create(this.max).diff(this.min, this.daTickInterval[1], true);
                    this.numberTicks = Math.ceil(nc/this.daTickInterval[0]) +1;
                    // this.max = Date.create(this.min).add(this.numberTicks-1, this.daTickInterval[1]).getTime();
                    this.max = Date.create(this.min).add((this.numberTicks-1) * this.daTickInterval[0], this.daTickInterval[1]).getTime();
                }
                else if (dim > 200) {
                    this.numberTicks = parseInt(3+(dim-200)/100, 10);
                }
                else {
                    this.numberTicks = 2;
                }
            }
    
            if (this.daTickInterval == null) {
                this.daTickInterval = [range / (this.numberTicks-1)/1000, 'seconds'];
            }
            for (var i=0; i<this.numberTicks; i++){
                var min = Date.create(this.min);
                tt = min.add(i*this.daTickInterval[0], this.daTickInterval[1]).getTime();
                var t = new this.tickRenderer(this.tickOptions);
                // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
                if (!this.showTicks) {
                    t.showLabel = false;
                    t.showMark = false;
                }
                else if (!this.showTickMarks) {
                    t.showMark = false;
                }
                t.setTick(tt, this.name);
                this._ticks.push(t);
            }
        }
        if (this._daTickInterval == null) {
            this._daTickInterval = this.daTickInterval;    
        }
    };
   
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.dateAxisRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.DateAxisRenderer=function(){a.jqplot.LinearAxisRenderer.call(this)};a.jqplot.DateAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.DateAxisRenderer.prototype.constructor=a.jqplot.DateAxisRenderer;a.jqplot.DateTickFormatter=function(b,c){if(!b){b="%Y/%m/%d"}return Date.create(c).strftime(b)};a.jqplot.DateAxisRenderer.prototype.init=function(f){this.tickOptions.formatter=a.jqplot.DateTickFormatter;this.daTickInterval=null;this._daTickInterval=null;a.extend(true,this,f);var c=this._dataBounds;for(var g=0;g<this._series.length;g++){var h=this._series[g];var l=h.data;var b=h._plotData;var k=h._stackData;for(var e=0;e<l.length;e++){if(this.name=="xaxis"||this.name=="x2axis"){l[e][0]=Date.create(l[e][0]).getTime();b[e][0]=Date.create(l[e][0]).getTime();k[e][0]=Date.create(l[e][0]).getTime();if(l[e][0]<c.min||c.min==null){c.min=l[e][0]}if(l[e][0]>c.max||c.max==null){c.max=l[e][0]}}else{l[e][1]=Date.create(l[e][1]).getTime();b[e][1]=Date.create(l[e][1]).getTime();k[e][1]=Date.create(l[e][1]).getTime();if(l[e][1]<c.min||c.min==null){c.min=l[e][1]}if(l[e][1]>c.max||c.max==null){c.max=l[e][1]}}}}};a.jqplot.DateAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks;this.daTickInterval=this._daTickInterval};a.jqplot.DateAxisRenderer.prototype.createTicks=function(){var v=this._ticks;var r=this.ticks;var w=this.name;var u=this._dataBounds;var o,s;var m,p;var d,c;var b,q;if(r.length){for(q=0;q<r.length;q++){var f=r[q];var h=new this.tickRenderer(this.tickOptions);if(f.constructor==Array){h.value=Date.create(f[0]).getTime();h.label=f[1];if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(h.value,this.name);this._ticks.push(h)}else{h.value=Date.create(f).getTime();if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(h.value,this.name);this._ticks.push(h)}}this.numberTicks=r.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.daTickInterval=[(this.max-this.min)/(this.numberTicks-1)/1000,"seconds"]}else{if(w=="xaxis"||w=="x2axis"){o=this._plotDimensions.width}else{o=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.tickInterval!=null){if(Number(this.tickInterval)){this.daTickInterval=[Number(this.tickInterval),"seconds"]}else{if(typeof this.tickInterval=="string"){var k=this.tickInterval.split(" ");if(k.length==1){this.daTickInterval=[1,k[0]]}else{if(k.length==2){this.daTickInterval=[k[0],k[1]]}}}}}m=((this.min!=null)?Date.create(this.min).getTime():u.min);p=((this.max!=null)?Date.create(this.max).getTime():u.max);if(m==p){var g=24*60*60*500;m-=g;p+=g}var j=p-m;var l,n;l=(this.min!=null)?Date.create(this.min).getTime():m-j/2*(this.padMin-1);n=(this.max!=null)?Date.create(this.max).getTime():p+j/2*(this.padMax-1);this.min=l;this.max=n;j=this.max-this.min;if(this.numberTicks==null){if(this.daTickInterval!=null){var e=Date.create(this.max).diff(this.min,this.daTickInterval[1],true);this.numberTicks=Math.ceil(e/this.daTickInterval[0])+1;this.max=Date.create(this.min).add((this.numberTicks-1)*this.daTickInterval[0],this.daTickInterval[1]).getTime()}else{if(o>200){this.numberTicks=parseInt(3+(o-200)/100,10)}else{this.numberTicks=2}}}if(this.daTickInterval==null){this.daTickInterval=[j/(this.numberTicks-1)/1000,"seconds"]}for(var q=0;q<this.numberTicks;q++){var m=Date.create(this.min);b=m.add(q*this.daTickInterval[0],this.daTickInterval[1]).getTime();var h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}if(this._daTickInterval==null){this._daTickInterval=this.daTickInterval}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.donutRenderer.js.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.DonutRenderer
     * Plugin renderer to draw a donut chart.
     * x values, if present, will be used as slice labels.
     * y values give slice size.
     * 
     * To use this renderer, you need to include the 
     * donut renderer plugin, for example:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.donutRenderer.js"></script>
     * 
     * Properties described here are passed into the $.jqplot function
     * as options on the series renderer.  For example:
     * 
     * > plot2 = $.jqplot('chart2', [s1, s2], {
     * >     seriesDefaults: {
     * >         renderer:$.jqplot.DonutRenderer,
     * >         rendererOptions:{
     * >              sliceMargin: 2,
     * >              innerDiameter: 110,
     * >              startAngle: -90
     * >          }
     * >      }
     * > });
     * 
     * A donut plot will trigger events on the plot target
     * according to user interaction.  All events return the event object,
     * the series index, the point (slice) index, and the point data for 
     * the appropriate slice.
     * 
     * 'jqplotDataMouseOver' - triggered when user mouseing over a slice.
     * 'jqplotDataHighlight' - triggered the first time user mouses over a slice,
     * if highlighting is enabled.
     * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of
     * a highlighted slice.
     * 'jqplotDataClick' - triggered when the user clicks on a slice.
     * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if
     * the "captureRightClick" option is set to true on the plot.
     */
    $.jqplot.DonutRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.DonutRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.DonutRenderer.prototype.constructor = $.jqplot.DonutRenderer;
    
    // called with scope of a series
    $.jqplot.DonutRenderer.prototype.init = function(options, plot) {
        // Group: Properties
        //
        // prop: diameter
        // Outer diameter of the donut, auto computed by default
        this.diameter = null;
        // prop: innerDiameter
        // Inner diameter of teh donut, auto calculated by default.
        // If specified will override thickness value.
        this.innerDiameter = null;
        // prop: thickness
        // thickness of the donut, auto computed by default
        // Overridden by if innerDiameter is specified.
        this.thickness = null;
        // prop: padding
        // padding between the donut and plot edges, legend, etc.
        this.padding = 20;
        // prop: sliceMargin
        // angular spacing between donut slices in degrees.
        this.sliceMargin = 0;
        // prop: ringMargin
        // pixel distance between rings, or multiple series in a donut plot.
        // null will compute ringMargin based on sliceMargin.
        this.ringMargin = null;
        // prop: fill
        // true or false, wether to fil the slices.
        this.fill = true;
        // prop: shadowOffset
        // offset of the shadow from the slice and offset of 
        // each succesive stroke of the shadow from the last.
        this.shadowOffset = 2;
        // prop: shadowAlpha
        // transparency of the shadow (0 = transparent, 1 = opaque)
        this.shadowAlpha = 0.07;
        // prop: shadowDepth
        // number of strokes to apply to the shadow, 
        // each stroke offset shadowOffset from the last.
        this.shadowDepth = 5;
        // prop: highlightMouseOver
        // True to highlight slice when moused over.
        // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
        this.highlightMouseOver = true;
        // prop: highlightMouseDown
        // True to highlight when a mouse button is pressed over a slice.
        // This will be disabled if highlightMouseOver is true.
        this.highlightMouseDown = false;
        // prop: highlightColors
        // an array of colors to use when highlighting a slice.
        this.highlightColors = [];
        // prop: dataLabels
        // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
        // Defaults to percentage of each pie slice.
        this.dataLabels = 'percent';
        // prop: showDataLabels
        // true to show data labels on slices.
        this.showDataLabels = false;
        // prop: dataLabelFormatString
        // Format string for data labels.  If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
        this.dataLabelFormatString = null;
        // prop: dataLabelThreshold
        // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed.
        // This applies to all label types, not just to percentage labels.
        this.dataLabelThreshold = 3;
        // prop: dataLabelPositionFactor
        // A Multiplier (0-1) of the pie radius which controls position of label on slice.
        // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.
        this.dataLabelPositionFactor = 0.5;
        // prop: dataLabelNudge
        // Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
        this.dataLabelNudge = 0;
        // prop: startAngle
        // Angle to start drawing donut in degrees.  
        // According to orientation of canvas coordinate system:
        // 0 = on the positive x axis
        // -90 = on the positive y axis.
        // 90 = on the negaive y axis.
        // 180 or - 180 = on the negative x axis.
        this.startAngle = 0;
        this.tickRenderer = $.jqplot.DonutTickRenderer;
        // Used as check for conditions where donut shouldn't be drawn.
        this._drawData = true;
        
        // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
        if (options.highlightMouseDown && options.highlightMouseOver == null) {
            options.highlightMouseOver = false;
        }
        
        $.extend(true, this, options);
        if (this.diameter != null) {
            this.diameter = this.diameter - this.sliceMargin;
        }
        this._diameter = null;
        this._innerDiameter = null;
        this._radius = null;
        this._innerRadius = null;
        this._thickness = null;
        // references to the previous series in the plot to properly calculate diameters
        // and thicknesses of nested rings.
        this._previousSeries = [];
        this._numberSeries = 1;
        // array of [start,end] angles arrays, one for each slice.  In radians.
        this._sliceAngles = [];
        // index of the currenty highlighted point, if any
        this._highlightedPoint = null;
        
        // set highlight colors if none provided
        if (this.highlightColors.length == 0) {
            for (var i=0; i<this.seriesColors.length; i++){
                var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
                var newrgb = [rgba[0], rgba[1], rgba[2]];
                var sum = newrgb[0] + newrgb[1] + newrgb[2];
                for (var j=0; j<3; j++) {
                    // when darkening, lowest color component can be is 60.
                    newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
                    newrgb[j] = parseInt(newrgb[j], 10);
                }
                this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
            }
        }
        
        plot.postParseOptionsHooks.addOnce(postParseOptions);
        plot.postInitHooks.addOnce(postInit);
        plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
        plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
        plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
        plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
        plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
        plot.postDrawHooks.addOnce(postPlotDraw);
        
        
    };
    
    $.jqplot.DonutRenderer.prototype.setGridData = function(plot) {
        // set gridData property.  This will hold angle in radians of each data point.
        var stack = [];
        var td = [];
        var sa = this.startAngle/180*Math.PI;
        var tot = 0;
        // don't know if we have any valid data yet, so set plot to not draw.
        this._drawData = false;
        for (var i=0; i<this.data.length; i++){
            if (this.data[i][1] != 0) {
                // we have data, O.K. to draw.
                this._drawData = true;
            }
            stack.push(this.data[i][1]);
            td.push([this.data[i][0]]);
            if (i>0) {
                stack[i] += stack[i-1];
            }
            tot += this.data[i][1];
        }
        var fact = Math.PI*2/stack[stack.length - 1];
        
        for (var i=0; i<stack.length; i++) {
            td[i][1] = stack[i] * fact;
            td[i][2] = this.data[i][1]/tot;
        }
        this.gridData = td;
    };
    
    $.jqplot.DonutRenderer.prototype.makeGridData = function(data, plot) {
        var stack = [];
        var td = [];
        var tot = 0;
        var sa = this.startAngle/180*Math.PI;
        // don't know if we have any valid data yet, so set plot to not draw.
        this._drawData = false;
        for (var i=0; i<data.length; i++){
            if (this.data[i][1] != 0) {
                // we have data, O.K. to draw.
                this._drawData = true;
            }
            stack.push(data[i][1]);
            td.push([data[i][0]]);
            if (i>0) {
                stack[i] += stack[i-1];
            }
            tot += data[i][1];
        }
        var fact = Math.PI*2/stack[stack.length - 1];
        
        for (var i=0; i<stack.length; i++) {
            td[i][1] = stack[i] * fact;
            td[i][2] = data[i][1]/tot;
        }
        return td;
    };
    
    $.jqplot.DonutRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) {
        var r = this._diameter / 2;
        var ri = r - this._thickness;
        var fill = this.fill;
        // var lineWidth = this.lineWidth;
        ctx.save();
        ctx.translate(this._center[0], this._center[1]);
        // ctx.translate(this.sliceMargin*Math.cos((ang1+ang2)/2), this.sliceMargin*Math.sin((ang1+ang2)/2));
        
        if (isShadow) {
            for (var i=0; i<this.shadowDepth; i++) {
                ctx.save();
                ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
                doDraw();
            }
        }
        
        else {
            doDraw();
        }
        
        function doDraw () {
            // Fix for IE and Chrome that can't seem to draw circles correctly.
            // ang2 should always be <= 2 pi since that is the way the data is converted.
             if (ang2 > 6.282 + this.startAngle) {
                ang2 = 6.282 + this.startAngle;
                if (ang1 > ang2) {
                    ang1 = 6.281 + this.startAngle;
                }
            }
            // Fix for IE, where it can't seem to handle 0 degree angles.  Also avoids
            // ugly line on unfilled donuts.
            if (ang1 >= ang2) {
                return;
            }
            ctx.beginPath();  
            ctx.fillStyle = color;
            ctx.strokeStyle = color;
            // ctx.lineWidth = lineWidth;
            ctx.arc(0, 0, r, ang1, ang2, false);
            ctx.lineTo(ri*Math.cos(ang2), ri*Math.sin(ang2));
            ctx.arc(0,0, ri, ang2, ang1, true);
            ctx.closePath();
            if (fill) {
                ctx.fill();
            }
            else {
                ctx.stroke();
            }
        }
        
        if (isShadow) {
            for (var i=0; i<this.shadowDepth; i++) {
                ctx.restore();
            }
        }
        
        ctx.restore();
    };
    
    // called with scope of series
    $.jqplot.DonutRenderer.prototype.draw = function (ctx, gd, options, plot) {
        var i;
        var opts = (options != undefined) ? options : {};
        // offset and direction of offset due to legend placement
        var offx = 0;
        var offy = 0;
        var trans = 1;
        // var colorGenerator = new this.colorGenerator(this.seriesColors);
        if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
            var li = options.legendInfo;
            switch (li.location) {
                case 'nw':
                    offx = li.width + li.xoffset;
                    break;
                case 'w':
                    offx = li.width + li.xoffset;
                    break;
                case 'sw':
                    offx = li.width + li.xoffset;
                    break;
                case 'ne':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'e':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'se':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'n':
                    offy = li.height + li.yoffset;
                    break;
                case 's':
                    offy = li.height + li.yoffset;
                    trans = -1;
                    break;
                default:
                    break;
            }
        }
        
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var cw = ctx.canvas.width;
        var ch = ctx.canvas.height;
        var w = cw - offx - 2 * this.padding;
        var h = ch - offy - 2 * this.padding;
        var mindim = Math.min(w,h);
        var d = mindim;
        var ringmargin =  (this.ringMargin == null) ? this.sliceMargin * 2.0 : this.ringMargin;
        
        for (var i=0; i<this._previousSeries.length; i++) {
            d -= 2.0 * this._previousSeries[i]._thickness + 2.0 * ringmargin;
        }
        this._diameter = this.diameter || d;
        if (this.innerDiameter != null) {
            var od = (this._numberSeries > 1 && this.index > 0) ? this._previousSeries[0]._diameter : this._diameter;
            this._thickness = this.thickness || (od - this.innerDiameter - 2.0*ringmargin*this._numberSeries) / this._numberSeries/2.0;
        }
        else {
            this._thickness = this.thickness || mindim / 2 / (this._numberSeries + 1) * 0.85;
        }

        var r = this._radius = this._diameter/2;
        this._innerRadius = this._radius - this._thickness;
        var sa = this.startAngle / 180 * Math.PI;
        this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
        
        if (this.shadow) {
            var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
            for (var i=0; i<gd.length; i++) {
                var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
                // Adjust ang1 and ang2 for sliceMargin
                ang1 += this.sliceMargin/180*Math.PI;
                this.renderer.drawSlice.call (this, ctx, ang1, gd[i][1]+sa, shadowColor, true);
            }
            
        }
        for (var i=0; i<gd.length; i++) {
            var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
            // Adjust ang1 and ang2 for sliceMargin
            ang1 += this.sliceMargin/180*Math.PI;
            var ang2 = gd[i][1] + sa;
            this._sliceAngles.push([ang1, ang2]);
            this.renderer.drawSlice.call (this, ctx, ang1, ang2, this.seriesColors[i], false);
            
            if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) {
                var fstr, avgang = (ang1+ang2)/2, label;
                
                if (this.dataLabels == 'label') {
                    fstr = this.dataLabelFormatString || '%s';
                    label = $.jqplot.sprintf(fstr, gd[i][0]);
                }
                else if (this.dataLabels == 'value') {
                    fstr = this.dataLabelFormatString || '%d';
                    label = $.jqplot.sprintf(fstr, gd[i][1]);
                }
                else if (this.dataLabels == 'percent') {
                    fstr = this.dataLabelFormatString || '%d%%';
                    label = $.jqplot.sprintf(fstr, gd[i][2]*100);
                }
                else if (this.dataLabels.constructor == Array) {
                    fstr = this.dataLabelFormatString || '%s';
                    label = $.jqplot.sprintf(fstr, this.dataLabels[i]);
                }
                
                var fact = this._innerRadius + this._thickness * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
                
                var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left;
                var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top;
                
                var labelelem = $('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem);
                x -= labelelem.width()/2;
                y -= labelelem.height()/2;
                x = Math.round(x);
                y = Math.round(y);
                labelelem.css({left: x, top: y});
            }
        }
               
    };
    
    $.jqplot.DonutAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.DonutAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.DonutAxisRenderer.prototype.constructor = $.jqplot.DonutAxisRenderer;
        
    
    // There are no traditional axes on a donut chart.  We just need to provide
    // dummy objects with properties so the plot will render.
    // called with scope of axis object.
    $.jqplot.DonutAxisRenderer.prototype.init = function(options){
        //
        this.tickRenderer = $.jqplot.DonutTickRenderer;
        $.extend(true, this, options);
        // I don't think I'm going to need _dataBounds here.
        // have to go Axis scaling in a way to fit chart onto plot area
        // and provide u2p and p2u functionality for mouse cursor, etc.
        // for convienence set _dataBounds to 0 and 100 and
        // set min/max to 0 and 100.
        this._dataBounds = {min:0, max:100};
        this.min = 0;
        this.max = 100;
        this.showTicks = false;
        this.ticks = [];
        this.showMark = false;
        this.show = false; 
    };
    
    
    
    
    $.jqplot.DonutLegendRenderer = function(){
        $.jqplot.TableLegendRenderer.call(this);
    };
    
    $.jqplot.DonutLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
    $.jqplot.DonutLegendRenderer.prototype.constructor = $.jqplot.DonutLegendRenderer;
    
    /**
     * Class: $.jqplot.DonutLegendRenderer
     * Legend Renderer specific to donut plots.  Set by default
     * when user creates a donut plot.
     */
    $.jqplot.DonutLegendRenderer.prototype.init = function(options) {
        // Group: Properties
        //
        // prop: numberRows
        // Maximum number of rows in the legend.  0 or null for unlimited.
        this.numberRows = null;
        // prop: numberColumns
        // Maximum number of columns in the legend.  0 or null for unlimited.
        this.numberColumns = null;
        $.extend(true, this, options);
    };
    
    // called with context of legend
    $.jqplot.DonutLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
            ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
            ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
            ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
            // Donut charts legends don't go by number of series, but by number of data points
            // in the series.  Refactor things here for that.
            
            var pad = false, 
                reverse = false,
                nr, nc;
            var s = series[0];
            var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
            
            if (s.show) {
                var pd = s.data;
                if (this.numberRows) {
                    nr = this.numberRows;
                    if (!this.numberColumns){
                        nc = Math.ceil(pd.length/nr);
                    }
                    else{
                        nc = this.numberColumns;
                    }
                }
                else if (this.numberColumns) {
                    nc = this.numberColumns;
                    nr = Math.ceil(pd.length/this.numberColumns);
                }
                else {
                    nr = pd.length;
                    nc = 1;
                }
                
                var i, j, tr, td1, td2, lt, rs, color;
                var idx = 0;    
                
                for (i=0; i<nr; i++) {
                    if (reverse){
                        tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
                    }
                    else{
                        tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
                    }
                    for (j=0; j<nc; j++) {
                        if (idx < pd.length){
                            lt = this.labels[idx] || pd[idx][0].toString();
                            color = colorGenerator.next();
                            if (!reverse){
                                if (i>0){
                                    pad = true;
                                }
                                else{
                                    pad = false;
                                }
                            }
                            else{
                                if (i == nr -1){
                                    pad = false;
                                }
                                else{
                                    pad = true;
                                }
                            }
                            rs = (pad) ? this.rowSpacing : '0';
                
                            td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
                                '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
                                '</div></td>');
                            td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
                            if (this.escapeHtml){
                                td2.text(lt);
                            }
                            else {
                                td2.html(lt);
                            }
                            if (reverse) {
                                td2.prependTo(tr);
                                td1.prependTo(tr);
                            }
                            else {
                                td1.appendTo(tr);
                                td2.appendTo(tr);
                            }
                            pad = true;
                        }
                        idx++;
                    }   
                }
            }
        }
        return this._elem;                
    };
    
    // $.jqplot.DonutLegendRenderer.prototype.pack = function(offsets) {
    //     if (this.show) {
    //         // fake a grid for positioning
    //         var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};        
    //         if (this.placement == 'insideGrid') {
    //             switch (this.location) {
    //                 case 'nw':
    //                     var a = grid._left + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'n':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'ne':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 case 'e':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 case 'se':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //                 case 's':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 'sw':
    //                     var a = grid._left + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 'w':
    //                     var a = grid._left + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 default:  // same as 'se'
    //                     var a = grid._right - this.xoffset;
    //                     var b = grid._bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //             }
    //             
    //         }
    //         else {
    //             switch (this.location) {
    //                 case 'nw':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('right', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'n':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = this._plotDimensions.height - grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('bottom', b);
    //                     break;
    //                 case 'ne':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'e':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'se':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 's':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'sw':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //                 case 'w':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 default:  // same as 'se'
    //                     var a = grid._right - this.xoffset;
    //                     var b = grid._bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //             }
    //         }
    //     } 
    // };
    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = options.axesDefaults || {};
        options.legend = options.legend || {};
        options.seriesDefaults = options.seriesDefaults || {};
        // only set these if there is a donut series
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.DonutRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.DonutRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.DonutAxisRenderer;
            options.legend.renderer = $.jqplot.DonutLegendRenderer;
            options.legend.preDraw = true;
            options.seriesDefaults.pointLabels = {show: false};
        }
    }
    
    // called with scope of plot.
    function postInit(target, data, options) {
        // if multiple series, add a reference to the previous one so that
        // donut rings can nest.
        for (var i=1; i<this.series.length; i++) {
            if (!this.series[i]._previousSeries.length){
                for (var j=0; j<i; j++) {
                    if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer && this.series[j].renderer.constructor == $.jqplot.DonutRenderer) {
                        this.series[i]._previousSeries.push(this.series[j]);
                    }
                }
            }
        }
        for (i=0; i<this.series.length; i++) {
            if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer) {
                this.series[i]._numberSeries = this.series.length;
                // don't allow mouseover and mousedown at same time.
                if (this.series[i].highlightMouseOver) {
                    this.series[i].highlightMouseDown = false;
                }
            }
        }
        this.target.bind('mouseout', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
    }
    
    var postParseOptionsRun = false;
    // called with scope of plot
    function postParseOptions(options) {
        for (var i=0; i<this.series.length; i++) {
            this.series[i].seriesColors = this.seriesColors;
            this.series[i].colorGenerator = this.colorGenerator;
        }
    }
    
    function highlight (plot, sidx, pidx) {
        var s = plot.series[sidx];
        var canvas = plot.plugins.donutRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        s._highlightedPoint = pidx;
        plot.plugins.donutRenderer.highlightedSeriesIndex = sidx;
        s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColors[pidx], false);
    }
    
    function unhighlight (plot) {
        var canvas = plot.plugins.donutRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        for (var i=0; i<plot.series.length; i++) {
            plot.series[i]._highlightedPoint = null;
        }
        plot.plugins.donutRenderer.highlightedSeriesIndex = null;
        plot.target.trigger('jqplotDataUnhighlight');
    }
 
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt1 = jQuery.Event('jqplotDataMouseOver');
            evt1.pageX = ev.pageX;
            evt1.pageY = ev.pageY;
            plot.target.trigger(evt1, ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    } 
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
        var idx = plot.plugins.donutRenderer.highlightedSeriesIndex;
        if (idx != null && plot.series[idx].highlightMouseDown) {
            unhighlight(plot);
        }
    }
    
    function handleClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt = jQuery.Event('jqplotDataClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var idx = plot.plugins.donutRenderer.highlightedSeriesIndex;
            if (idx != null && plot.series[idx].highlightMouseDown) {
                unhighlight(plot);
            }
            var evt = jQuery.Event('jqplotDataRightClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }    
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    function postPlotDraw() {
        this.plugins.donutRenderer = {highlightedSeriesIndex:null};
        this.plugins.donutRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
        // do we have any data labels?  if so, put highlight canvas before those
        // Fix for broken jquery :first selector with canvas (VML) elements.
        var labels = $(this.targetId+' .jqplot-data-label');
        if (labels.length) {
            $(labels[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions));
        }
        // else put highlight canvas before event canvas.
        else {
            this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions));
        }
        var hctx = this.plugins.donutRenderer.highlightCanvas.setContext();
    }
    
    $.jqplot.preInitHooks.push(preInit);
    
    $.jqplot.DonutTickRenderer = function() {
        $.jqplot.AxisTickRenderer.call(this);
    };
    
    $.jqplot.DonutTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
    $.jqplot.DonutTickRenderer.prototype.constructor = $.jqplot.DonutTickRenderer;
    
})(jQuery);
    
    

Added Site/Site_W/jpqplot/plugins/jqplot.donutRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(e){e.jqplot.DonutRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.DonutRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.DonutRenderer.prototype.constructor=e.jqplot.DonutRenderer;e.jqplot.DonutRenderer.prototype.init=function(p,t){this.diameter=null;this.innerDiameter=null;this.thickness=null;this.padding=20;this.sliceMargin=0;this.ringMargin=null;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.5;this.dataLabelNudge=0;this.startAngle=0;this.tickRenderer=e.jqplot.DonutTickRenderer;this._drawData=true;if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null;this._innerDiameter=null;this._radius=null;this._innerRadius=null;this._thickness=null;this._previousSeries=[];this._numberSeries=1;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var n=[q[0],q[1],q[2]];var s=n[0]+n[1]+n[2];for(var o=0;o<3;o++){n[o]=(s>570)?n[o]*0.8:n[o]+0.3*(255-n[o]);n[o]=parseInt(n[o],10)}this.highlightColors.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}}t.postParseOptionsHooks.addOnce(l);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",b);t.eventListenerHooks.addOnce("jqplotMouseDown",a);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",m);t.postDrawHooks.addOnce(h)};e.jqplot.DonutRenderer.prototype.setGridData=function(s){var o=[];var t=[];var n=this.startAngle/180*Math.PI;var r=0;this._drawData=false;for(var q=0;q<this.data.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(this.data[q][1]);t.push([this.data[q][0]]);if(q>0){o[q]+=o[q-1]}r+=this.data[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){t[q][1]=o[q]*p;t[q][2]=this.data[q][1]/r}this.gridData=t};e.jqplot.DonutRenderer.prototype.makeGridData=function(s,t){var o=[];var u=[];var r=0;var n=this.startAngle/180*Math.PI;this._drawData=false;for(var q=0;q<s.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(s[q][1]);u.push([s[q][0]]);if(q>0){o[q]+=o[q-1]}r+=s[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){u[q][1]=o[q]*p;u[q][2]=s[q][1]/r}return u};e.jqplot.DonutRenderer.prototype.drawSlice=function(x,u,t,p,s){var n=this._diameter/2;var v=n-this._thickness;var w=this.fill;x.save();x.translate(this._center[0],this._center[1]);if(s){for(var q=0;q<this.shadowDepth;q++){x.save();x.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));o()}}else{o()}function o(){if(t>6.282+this.startAngle){t=6.282+this.startAngle;if(u>t){u=6.281+this.startAngle}}if(u>=t){return}x.beginPath();x.fillStyle=p;x.strokeStyle=p;x.arc(0,0,n,u,t,false);x.lineTo(v*Math.cos(t),v*Math.sin(t));x.arc(0,0,v,t,u,true);x.closePath();if(w){x.fill()}else{x.stroke()}}if(s){for(var q=0;q<this.shadowDepth;q++){x.restore()}}x.restore()};e.jqplot.DonutRenderer.prototype.draw=function(N,V,t,P){var Q;var J=(t!=undefined)?t:{};var q=0;var p=0;var u=1;if(t.legendInfo&&t.legendInfo.placement=="insideGrid"){var I=t.legendInfo;switch(I.location){case"nw":q=I.width+I.xoffset;break;case"w":q=I.width+I.xoffset;break;case"sw":q=I.width+I.xoffset;break;case"ne":q=I.width+I.xoffset;u=-1;break;case"e":q=I.width+I.xoffset;u=-1;break;case"se":q=I.width+I.xoffset;u=-1;break;case"n":p=I.height+I.yoffset;break;case"s":p=I.height+I.yoffset;u=-1;break;default:break}}var B=(J.shadow!=undefined)?J.shadow:this.shadow;var W=(J.showLine!=undefined)?J.showLine:this.showLine;var O=(J.fill!=undefined)?J.fill:this.fill;var s=N.canvas.width;var H=N.canvas.height;var G=s-q-2*this.padding;var R=H-p-2*this.padding;var v=Math.min(G,R);var T=v;var X=(this.ringMargin==null)?this.sliceMargin*2:this.ringMargin;for(var Q=0;Q<this._previousSeries.length;Q++){T-=2*this._previousSeries[Q]._thickness+2*X}this._diameter=this.diameter||T;if(this.innerDiameter!=null){var M=(this._numberSeries>1&&this.index>0)?this._previousSeries[0]._diameter:this._diameter;this._thickness=this.thickness||(M-this.innerDiameter-2*X*this._numberSeries)/this._numberSeries/2}else{this._thickness=this.thickness||v/2/(this._numberSeries+1)*0.85}var K=this._radius=this._diameter/2;this._innerRadius=this._radius-this._thickness;var o=this.startAngle/180*Math.PI;this._center=[(s-u*q)/2+u*q,(H-u*p)/2+u*p];if(this.shadow){var L="rgba(0,0,0,"+this.shadowAlpha+")";for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;this.renderer.drawSlice.call(this,N,A,V[Q][1]+o,L,true)}}for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;var z=V[Q][1]+o;this._sliceAngles.push([A,z]);this.renderer.drawSlice.call(this,N,A,z,this.seriesColors[Q],false);if(this.showDataLabels&&V[Q][2]*100>=this.dataLabelThreshold){var S,U=(A+z)/2,C;if(this.dataLabels=="label"){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,V[Q][0])}else{if(this.dataLabels=="value"){S=this.dataLabelFormatString||"%d";C=e.jqplot.sprintf(S,V[Q][1])}else{if(this.dataLabels=="percent"){S=this.dataLabelFormatString||"%d%%";C=e.jqplot.sprintf(S,V[Q][2]*100)}else{if(this.dataLabels.constructor==Array){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,this.dataLabels[Q])}}}}var n=this._innerRadius+this._thickness*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var F=this._center[0]+Math.cos(U)*n+this.canvas._offsets.left;var E=this._center[1]+Math.sin(U)*n+this.canvas._offsets.top;var D=e('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">'+C+"</span>").insertBefore(P.eventCanvas._elem);F-=D.width()/2;E-=D.height()/2;F=Math.round(F);E=Math.round(E);D.css({left:F,top:E})}}};e.jqplot.DonutAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.DonutAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.DonutAxisRenderer.prototype.constructor=e.jqplot.DonutAxisRenderer;e.jqplot.DonutAxisRenderer.prototype.init=function(n){this.tickRenderer=e.jqplot.DonutTickRenderer;e.extend(true,this,n);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.DonutLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.DonutLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.DonutLegendRenderer.prototype.constructor=e.jqplot.DonutLegendRenderer;e.jqplot.DonutLegendRenderer.prototype.init=function(n){this.numberRows=null;this.numberColumns=null;e.extend(true,this,n)};e.jqplot.DonutLegendRenderer.prototype.draw=function(){var q=this;if(this.show){var y=this._series;var B="position:absolute;";B+=(this.background)?"background:"+this.background+";":"";B+=(this.border)?"border:"+this.border+";":"";B+=(this.fontSize)?"font-size:"+this.fontSize+";":"";B+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";B+=(this.textColor)?"color:"+this.textColor+";":"";B+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";B+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";B+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";B+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+B+'"></table>');var F=false,x=false,n,v;var z=y[0];var o=new e.jqplot.ColorGenerator(z.seriesColors);if(z.show){var G=z.data;if(this.numberRows){n=this.numberRows;if(!this.numberColumns){v=Math.ceil(G.length/n)}else{v=this.numberColumns}}else{if(this.numberColumns){v=this.numberColumns;n=Math.ceil(G.length/this.numberColumns)}else{n=G.length;v=1}}var E,D,p,t,r,u,w,C;var A=0;for(E=0;E<n;E++){if(x){p=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(D=0;D<v;D++){if(A<G.length){u=this.labels[A]||G[A][0].toString();C=o.next();if(!x){if(E>0){F=true}else{F=false}}else{if(E==n-1){F=false}else{F=true}}w=(F)?this.rowSpacing:"0";t=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+w+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+C+';"></div></div></td>');r=e('<td class="jqplot-table-legend" style="padding-top:'+w+';"></td>');if(this.escapeHtml){r.text(u)}else{r.html(u)}if(x){r.prependTo(p);t.prependTo(p)}else{t.appendTo(p);r.appendTo(p)}F=true}A++}}}}return this._elem};function c(r,q,o){o=o||{};o.axesDefaults=o.axesDefaults||{};o.legend=o.legend||{};o.seriesDefaults=o.seriesDefaults||{};var n=false;if(o.seriesDefaults.renderer==e.jqplot.DonutRenderer){n=true}else{if(o.series){for(var p=0;p<o.series.length;p++){if(o.series[p].renderer==e.jqplot.DonutRenderer){n=true}}}}if(n){o.axesDefaults.renderer=e.jqplot.DonutAxisRenderer;o.legend.renderer=e.jqplot.DonutLegendRenderer;o.legend.preDraw=true;o.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=1;p<this.series.length;p++){if(!this.series[p]._previousSeries.length){for(var n=0;n<p;n++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer&&this.series[n].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._previousSeries.push(this.series[n])}}}}for(p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._numberSeries=this.series.length;if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}this.target.bind("mouseout",{plot:this},function(s){i(s.data.plot)})}var k=false;function l(n){for(var o=0;o<this.series.length;o++){this.series[o].seriesColors=this.seriesColors;this.series[o].colorGenerator=this.colorGenerator}}function d(r,q,p){var o=r.series[q];var n=r.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=p;r.plugins.donutRenderer.highlightedSeriesIndex=q;o.renderer.drawSlice.call(o,n._ctx,o._sliceAngles[p][0],o._sliceAngles[p][1],o.highlightColors[p],false)}function i(p){var n=p.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.donutRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.donutRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);d(s,p[0],p[1])}}else{if(t==null){i(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.donutRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function j(p,o,s,r,q){var n=q.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){i(q)}}function f(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){i(s)}var o=jQuery.Event("jqplotDataRightClick");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function h(){this.plugins.donutRenderer={highlightedSeriesIndex:null};this.plugins.donutRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var o=e(this.targetId+" .jqplot-data-label");if(o.length){e(o[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions))}else{this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions))}var n=this.plugins.donutRenderer.highlightCanvas.setContext()}e.jqplot.preInitHooks.push(c);e.jqplot.DonutTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.DonutTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.DonutTickRenderer.prototype.constructor=e.jqplot.DonutTickRenderer})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.dragable.js.





























































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    
    /**
     * Class: $.jqplot.Dragable
     * Plugin to make plotted points dragable by the user.
     */
    $.jqplot.Dragable = function(options) {
        // Group: Properties
        this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false});
        this.shapeRenderer = new $.jqplot.ShapeRenderer();
        this.isDragging = false;
        this.isOver = false;
        this._ctx;
        this._elem;
        this._point;
        this._gridData;
        // prop: color
        // CSS color spec for the dragged point (and adjacent line segment or bar).
        this.color;
        // prop: constrainTo
        // Constrain dragging motion to an axis or to none.
        // Allowable values are 'none', 'x', 'y'
        this.constrainTo = 'none';  // 'x', 'y', or 'none';
        $.extend(true, this, options);
    };
    
    function DragCanvas() {
        $.jqplot.GenericCanvas.call(this);
        this.isDragging = false;
        this.isOver = false;
        this._neighbor;
        this._cursors = [];
    }
    
    DragCanvas.prototype = new $.jqplot.GenericCanvas();
    DragCanvas.prototype.constructor = DragCanvas;
    
    
    // called within scope of series
    $.jqplot.Dragable.parseOptions = function (defaults, opts) {
        var options = opts || {};
        this.plugins.dragable = new $.jqplot.Dragable(options.dragable);
        // since this function is called before series options are parsed,
        // we can set this here and it will be overridden if needed.
        this.isDragable = $.jqplot.config.enablePlugins;
    };
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    // add a new DragCanvas object to the plot plugins to handle drawing on this new canvas.
    $.jqplot.Dragable.postPlotDraw = function() {
        this.plugins.dragable = {previousCursor:'auto', isOver:false};
        this.plugins.dragable.dragCanvas = new DragCanvas();
        
        this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding, 'jqplot-dragable-canvas', this._plotDimensions));
        var dctx = this.plugins.dragable.dragCanvas.setContext();
    };
    
    //$.jqplot.preInitHooks.push($.jqplot.Dragable.init);
    $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Dragable.parseOptions);
    $.jqplot.postDrawHooks.push($.jqplot.Dragable.postPlotDraw);
    $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
    $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleDown]);
    $.jqplot.eventListenerHooks.push(['jqplotMouseUp', handleUp]);

    
    function initDragPoint(plot, neighbor) {
        var s = plot.series[neighbor.seriesIndex];
        var drag = s.plugins.dragable;
        
        // first, init the mark renderer for the dragged point
        var smr = s.markerRenderer;
        var mr = drag.markerRenderer;
        mr.style = smr.style;
        mr.lineWidth = smr.lineWidth + 2.5;
        mr.size = smr.size + 5;
        if (!drag.color) {
            var rgba = $.jqplot.getColorComponents(smr.color);
            var newrgb = [rgba[0], rgba[1], rgba[2]];
            var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
            drag.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
        }
        mr.color = drag.color;
        mr.init();

        var start = (neighbor.pointIndex > 0) ? neighbor.pointIndex - 1 : 0;
        var end = neighbor.pointIndex+2;
        drag._gridData = s.gridData.slice(start, end);
    }
    
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (plot.plugins.dragable.dragCanvas.isDragging) {
            var dc = plot.plugins.dragable.dragCanvas;
            var dp = dc._neighbor;
            var s = plot.series[dp.seriesIndex];
            var drag = s.plugins.dragable;
            var gd = s.gridData;
            
            // compute the new grid position with any constraints.
            var x = (drag.constrainTo == 'y') ? dp.gridData[0] : gridpos.x;
            var y = (drag.constrainTo == 'x') ? dp.gridData[1] : gridpos.y;
            
            // compute data values for any listeners.
            var xu = s._xaxis.series_p2u(x);
            var yu = s._yaxis.series_p2u(y);
            
            // clear the canvas then redraw effect at new position.
            var ctx = dc._ctx;
            ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
            
            // adjust our gridData for the new mouse position
            if (dp.pointIndex > 0) {
                drag._gridData[1] = [x, y];
            }
            else {
                drag._gridData[0] = [x, y];
            }
            plot.series[dp.seriesIndex].draw(dc._ctx, {gridData:drag._gridData, shadow:false, preventJqPlotSeriesDrawTrigger:true, color:drag.color, markerOptions:{color:drag.color, shadow:false}, trendline:{show:false}});
            plot.target.trigger('jqplotSeriesPointChange', [dp.seriesIndex, dp.pointIndex, [xu,yu], [x,y]]);
        }
        else if (neighbor != null) {
            var series = plot.series[neighbor.seriesIndex];
            if (series.isDragable) {
                var dc = plot.plugins.dragable.dragCanvas;
                if (!dc.isOver) {
                    dc._cursors.push(ev.target.style.cursor);
                    ev.target.style.cursor = "pointer";
                }
                dc.isOver = true;
            }
        }
        else if (neighbor == null) {
            var dc = plot.plugins.dragable.dragCanvas;
            if (dc.isOver) {
                ev.target.style.cursor = dc._cursors.pop();
                dc.isOver = false;
            }
        }
    }
    
    function handleDown(ev, gridpos, datapos, neighbor, plot) {
        var dc = plot.plugins.dragable.dragCanvas;
        dc._cursors.push(ev.target.style.cursor);
        if (neighbor != null) {
            var s = plot.series[neighbor.seriesIndex];
            var drag = s.plugins.dragable;
            if (s.isDragable && !dc.isDragging) {
                dc._neighbor = neighbor;
                dc.isDragging = true;
                initDragPoint(plot, neighbor);
                drag.markerRenderer.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], dc._ctx);
                ev.target.style.cursor = "move";
                plot.target.trigger('jqlotDragStart', [neighbor.seriesIndex, neighbor.pointIndex, gridpos, datapos]);
            }
        }
        // Just in case of a hickup, we'll clear the drag canvas and reset.
        else {
           var ctx = dc._ctx;
           ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
           dc.isDragging = false;
        }
    }
    
    function handleUp(ev, gridpos, datapos, neighbor, plot) {
        if (plot.plugins.dragable.dragCanvas.isDragging) {
            var dc = plot.plugins.dragable.dragCanvas;
            // clear the canvas
            var ctx = dc._ctx;
            ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
            dc.isDragging = false;
            // redraw the series canvas at the new point.
            var dp = dc._neighbor;
            var s = plot.series[dp.seriesIndex];
            var drag = s.plugins.dragable;
            // compute the new grid position with any constraints.
            var x = (drag.constrainTo == 'y') ? dp.data[0] : datapos[s.xaxis];
            var y = (drag.constrainTo == 'x') ? dp.data[1] : datapos[s.yaxis];
            // var x = datapos[s.xaxis];
            // var y = datapos[s.yaxis];
            s.data[dp.pointIndex][0] = x;
            s.data[dp.pointIndex][1] = y;
            plot.drawSeries({preventJqPlotSeriesDrawTrigger:true}, dp.seriesIndex);
            dc._neighbor = null;
            ev.target.style.cursor = dc._cursors.pop();
            plot.target.trigger('jqlotDragStop', [gridpos, datapos]);
        }
    }
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.dragable.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(d){d.jqplot.Dragable=function(g){this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.shapeRenderer=new d.jqplot.ShapeRenderer();this.isDragging=false;this.isOver=false;this._ctx;this._elem;this._point;this._gridData;this.color;this.constrainTo="none";d.extend(true,this,g)};function b(){d.jqplot.GenericCanvas.call(this);this.isDragging=false;this.isOver=false;this._neighbor;this._cursors=[]}b.prototype=new d.jqplot.GenericCanvas();b.prototype.constructor=b;d.jqplot.Dragable.parseOptions=function(i,h){var g=h||{};this.plugins.dragable=new d.jqplot.Dragable(g.dragable);this.isDragable=d.jqplot.config.enablePlugins};d.jqplot.Dragable.postPlotDraw=function(){this.plugins.dragable={previousCursor:"auto",isOver:false};this.plugins.dragable.dragCanvas=new b();this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding,"jqplot-dragable-canvas",this._plotDimensions));var g=this.plugins.dragable.dragCanvas.setContext()};d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Dragable.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Dragable.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",e]);d.jqplot.eventListenerHooks.push(["jqplotMouseDown",c]);d.jqplot.eventListenerHooks.push(["jqplotMouseUp",a]);function f(n,p){var q=n.series[p.seriesIndex];var m=q.plugins.dragable;var h=q.markerRenderer;var i=m.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+2.5;i.size=h.size+5;if(!m.color){var l=d.jqplot.getColorComponents(h.color);var o=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);m.color="rgba("+o[0]+","+o[1]+","+o[2]+","+k+")"}i.color=m.color;i.init();var g=(p.pointIndex>0)?p.pointIndex-1:0;var j=p.pointIndex+2;m._gridData=q.gridData.slice(g,j)}function e(o,l,h,t,m){if(m.plugins.dragable.dragCanvas.isDragging){var u=m.plugins.dragable.dragCanvas;var i=u._neighbor;var w=m.series[i.seriesIndex];var k=w.plugins.dragable;var r=w.gridData;var p=(k.constrainTo=="y")?i.gridData[0]:l.x;var n=(k.constrainTo=="x")?i.gridData[1]:l.y;var g=w._xaxis.series_p2u(p);var q=w._yaxis.series_p2u(n);var v=u._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);if(i.pointIndex>0){k._gridData[1]=[p,n]}else{k._gridData[0]=[p,n]}m.series[i.seriesIndex].draw(u._ctx,{gridData:k._gridData,shadow:false,preventJqPlotSeriesDrawTrigger:true,color:k.color,markerOptions:{color:k.color,shadow:false},trendline:{show:false}});m.target.trigger("jqplotSeriesPointChange",[i.seriesIndex,i.pointIndex,[g,q],[p,n]])}else{if(t!=null){var j=m.series[t.seriesIndex];if(j.isDragable){var u=m.plugins.dragable.dragCanvas;if(!u.isOver){u._cursors.push(o.target.style.cursor);o.target.style.cursor="pointer"}u.isOver=true}}else{if(t==null){var u=m.plugins.dragable.dragCanvas;if(u.isOver){o.target.style.cursor=u._cursors.pop();u.isOver=false}}}}}function c(k,i,g,l,j){var m=j.plugins.dragable.dragCanvas;m._cursors.push(k.target.style.cursor);if(l!=null){var o=j.series[l.seriesIndex];var h=o.plugins.dragable;if(o.isDragable&&!m.isDragging){m._neighbor=l;m.isDragging=true;f(j,l);h.markerRenderer.draw(o.gridData[l.pointIndex][0],o.gridData[l.pointIndex][1],m._ctx);k.target.style.cursor="move";j.target.trigger("jqlotDragStart",[l.seriesIndex,l.pointIndex,i,g])}}else{var n=m._ctx;n.clearRect(0,0,n.canvas.width,n.canvas.height);m.isDragging=false}}function a(m,j,g,o,k){if(k.plugins.dragable.dragCanvas.isDragging){var p=k.plugins.dragable.dragCanvas;var q=p._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);p.isDragging=false;var h=p._neighbor;var r=k.series[h.seriesIndex];var i=r.plugins.dragable;var n=(i.constrainTo=="y")?h.data[0]:g[r.xaxis];var l=(i.constrainTo=="x")?h.data[1]:g[r.yaxis];r.data[h.pointIndex][0]=n;r.data[h.pointIndex][1]=l;k.drawSeries({preventJqPlotSeriesDrawTrigger:true},h.seriesIndex);p._neighbor=null;m.target.style.cursor=p._cursors.pop();k.target.trigger("jqlotDragStop",[j,g])}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.enhancedLegendRenderer.js.





















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    // class $.jqplot.EnhancedLegendRenderer
    // Legend renderer which can specify the number of rows and/or columns in the legend.
    $.jqplot.EnhancedLegendRenderer = function(){
        $.jqplot.TableLegendRenderer.call(this);
    };
    
    $.jqplot.EnhancedLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
    $.jqplot.EnhancedLegendRenderer.prototype.constructor = $.jqplot.EnhancedLegendRenderer;
    
    // called with scope of legend.
    $.jqplot.EnhancedLegendRenderer.prototype.init = function(options) {
        // prop: numberRows
        // Maximum number of rows in the legend.  0 or null for unlimited.
        this.numberRows = null;
        // prop: numberColumns
        // Maximum number of columns in the legend.  0 or null for unlimited.
        this.numberColumns = null;
        // prop: seriesToggle
        // false to not enable series on/off toggling on the legend.
        // true or a fadein/fadeout speed (number of milliseconds or 'fast', 'normal', 'slow') 
        // to enable show/hide of series on click of legend item.
        this.seriesToggle = 'normal';
        // prop: disableIEFading
        // true to toggle series with a show/hide method only and not allow fading in/out.  
        // This is to overcome poor performance of fade in some versions of IE.
        this.disableIEFading = true;
        $.extend(true, this, options);
        
        if (this.seriesToggle) {
            $.jqplot.postDrawHooks.push(postDraw);
        }
    };
    
    // called with scope of legend
    $.jqplot.EnhancedLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
            ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
            ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
            ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
            if (this.seriesToggle) {
                this._elem.css('z-index', '3');
            }
        
            var pad = false, 
                reverse = false,
                nr, nc;
            if (this.numberRows) {
                nr = this.numberRows;
                if (!this.numberColumns){
                    nc = Math.ceil(series.length/nr);
                }
                else{
                    nc = this.numberColumns;
                }
            }
            else if (this.numberColumns) {
                nc = this.numberColumns;
                nr = Math.ceil(series.length/this.numberColumns);
            }
            else {
                nr = series.length;
                nc = 1;
            }
                
            var i, j, tr, td1, td2, lt, rs;
            var idx = 0;
            // check to see if we need to reverse
            for (i=series.length-1; i>=0; i--) {
                if (series[i]._stack || series[i].renderer.constructor == $.jqplot.BezierCurveRenderer){
                    reverse = true;
                }
            }    
                
            for (i=0; i<nr; i++) {
                if (reverse){
                    tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
                }
                else{
                    tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
                }
                for (j=0; j<nc; j++) {
                    if (idx < series.length && series[idx].show && series[idx].showLabel){
                        s = series[idx];
                        lt = this.labels[idx] || s.label.toString();
                        if (lt) {
                            var color = s.color;
                            if (!reverse){
                                if (i>0){
                                    pad = true;
                                }
                                else{
                                    pad = false;
                                }
                            }
                            else{
                                if (i == nr -1){
                                    pad = false;
                                }
                                else{
                                    pad = true;
                                }
                            }
                            rs = (pad) ? this.rowSpacing : '0';
                    
                            td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
                                '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+
                                '</div></td>');
                            td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
                            if (this.escapeHtml){
                                td2.text(lt);
                            }
                            else {
                                td2.html(lt);
                            }
                            if (reverse) {
                                if (this.showLabels) {td2.prependTo(tr);}
                                if (this.showSwatches) {td1.prependTo(tr);}
                            }
                            else {
                                if (this.showSwatches) {td1.appendTo(tr);}
                                if (this.showLabels) {td2.appendTo(tr);}
                            }
                            
                            if (this.seriesToggle) {
                                var speed;
                                if (typeof(this.seriesToggle) == 'string' || typeof(this.seriesToggle) == 'number') {
                                    if (!$.browser.msie || !this.disableIEFading) {
                                        speed = this.seriesToggle;
                                    }
                                } 
                                if (this.showSwatches) {
                                    td1.bind('click', {series:s, speed:speed}, s.toggleDisplay);
                                    td1.addClass('jqplot-seriesToggle');
                                }
                                if (this.showLabels)  {
                                    td2.bind('click', {series:s, speed:speed}, s.toggleDisplay);
                                    td2.addClass('jqplot-seriesToggle');
                                }
                            }
                            
                            pad = true;
                        }
                    }
                    idx++;
                }   
            }
        }
        return this._elem;
    };
    
    // called with scope of plot.
    postDraw = function () {
        if (this.legend.renderer.constructor == $.jqplot.EnhancedLegendRenderer && this.legend.seriesToggle){
            var e = this.legend._elem.detach();
            this.eventCanvas._elem.after(e);
        }
    };
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.enhancedLegendRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.EnhancedLegendRenderer=function(){a.jqplot.TableLegendRenderer.call(this)};a.jqplot.EnhancedLegendRenderer.prototype=new a.jqplot.TableLegendRenderer();a.jqplot.EnhancedLegendRenderer.prototype.constructor=a.jqplot.EnhancedLegendRenderer;a.jqplot.EnhancedLegendRenderer.prototype.init=function(b){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.disableIEFading=true;a.extend(true,this,b);if(this.seriesToggle){a.jqplot.postDrawHooks.push(postDraw)}};a.jqplot.EnhancedLegendRenderer.prototype.draw=function(){var t=this;if(this.show){var m=this._series;var u="position:absolute;";u+=(this.background)?"background:"+this.background+";":"";u+=(this.border)?"border:"+this.border+";":"";u+=(this.fontSize)?"font-size:"+this.fontSize+";":"";u+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";u+=(this.textColor)?"color:"+this.textColor+";":"";u+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";u+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";u+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";u+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=a('<table class="jqplot-table-legend" style="'+u+'"></table>');if(this.seriesToggle){this._elem.css("z-index","3")}var d=false,o=false,q,l;if(this.numberRows){q=this.numberRows;if(!this.numberColumns){l=Math.ceil(m.length/q)}else{l=this.numberColumns}}else{if(this.numberColumns){l=this.numberColumns;q=Math.ceil(m.length/this.numberColumns)}else{q=m.length;l=1}}var n,k,p,e,c,h,g;var r=0;for(n=m.length-1;n>=0;n--){if(m[n]._stack||m[n].renderer.constructor==a.jqplot.BezierCurveRenderer){o=true}}for(n=0;n<q;n++){if(o){p=a('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=a('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(k=0;k<l;k++){if(r<m.length&&m[r].show&&m[r].showLabel){s=m[r];h=this.labels[r]||s.label.toString();if(h){var f=s.color;if(!o){if(n>0){d=true}else{d=false}}else{if(n==q-1){d=false}else{d=true}}g=(d)?this.rowSpacing:"0";e=a('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+g+';"><div><div class="jqplot-table-legend-swatch" style="background-color:'+f+";border-color:"+f+';"></div></div></td>');c=a('<td class="jqplot-table-legend" style="padding-top:'+g+';"></td>');if(this.escapeHtml){c.text(h)}else{c.html(h)}if(o){if(this.showLabels){c.prependTo(p)}if(this.showSwatches){e.prependTo(p)}}else{if(this.showSwatches){e.appendTo(p)}if(this.showLabels){c.appendTo(p)}}if(this.seriesToggle){var b;if(typeof(this.seriesToggle)=="string"||typeof(this.seriesToggle)=="number"){if(!a.browser.msie||!this.disableIEFading){b=this.seriesToggle}}if(this.showSwatches){e.bind("click",{series:s,speed:b},s.toggleDisplay);e.addClass("jqplot-seriesToggle")}if(this.showLabels){c.bind("click",{series:s,speed:b},s.toggleDisplay);c.addClass("jqplot-seriesToggle")}}d=true}}r++}}}return this._elem};postDraw=function(){if(this.legend.renderer.constructor==a.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var b=this.legend._elem.detach();this.eventCanvas._elem.after(b)}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.funnelRenderer.js.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.FunnelRenderer
     * Plugin renderer to draw a funnel chart.
     * x values, if present, will be used as labels.
     * y values give area size.
     * 
     * Funnel charts will draw a single series
     * only.
     * 
     * To use this renderer, you need to include the 
     * funnel renderer plugin, for example:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.funnelRenderer.js"></script>
     * 
     * Properties described here are passed into the $.jqplot function
     * as options on the series renderer.  For example:
     * 
     * > plot2 = $.jqplot('chart2', [s1, s2], {
     * >     seriesDefaults: {
     * >         renderer:$.jqplot.FunnelRenderer,
     * >         rendererOptions:{
     * >              sectionMargin: 12,
     * >              widthRatio: 0.3
     * >          }
     * >      }
     * > });
     * 
     * IMPORTANT
     * 
     * *The funnel renderer will reorder data in descending order* so the largest value in
     * the data set is first and displayed on top of the funnel.  Data will then
     * be displayed in descending order down the funnel.  The area of each funnel
     * section will correspond to the value of each data point relative to the sum
     * of all values.  That is section area is proportional to section value divided by 
     * sum of all section values.
     * 
     * If your data is not in descending order when passed into the plot, *it will be
     * reordered* when stored in the series.data property.  A copy of the unordered
     * data is kept in the series._unorderedData property.
     * 
     * A funnel plot will trigger events on the plot target
     * according to user interaction.  All events return the event object,
     * the series index, the point (section) index, and the point data for 
     * the appropriate section. *Note* the point index will referr to the ordered
     * data, not the original unordered data.
     * 
     * 'jqplotDataMouseOver' - triggered when mousing over a section.
     * 'jqplotDataHighlight' - triggered the first time user mouses over a section,
     * if highlighting is enabled.
     * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of
     * a highlighted section.
     * 'jqplotDataClick' - triggered when the user clicks on a section.
     * 'jqplotDataRightClick' - tiggered when the user right clicks on a section if
     * the "captureRightClick" option is set to true on the plot.
     */
    $.jqplot.FunnelRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.FunnelRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.FunnelRenderer.prototype.constructor = $.jqplot.FunnelRenderer;
    
    // called with scope of a series
    $.jqplot.FunnelRenderer.prototype.init = function(options, plot) {
        // Group: Properties
        //
        // prop: padding
        // padding between the funnel and plot edges, legend, etc.
        this.padding = {top: 20, right: 20, bottom: 20, left: 20};
        // prop: sectionMargin
        // spacing between funnel sections in pixels.
        this.sectionMargin = 6;
        // prop: fill
        // true or false, wether to fill the areas.
        this.fill = true;
        // prop: shadowOffset
        // offset of the shadow from the area and offset of 
        // each succesive stroke of the shadow from the last.
        this.shadowOffset = 2;
        // prop: shadowAlpha
        // transparency of the shadow (0 = transparent, 1 = opaque)
        this.shadowAlpha = 0.07;
        // prop: shadowDepth
        // number of strokes to apply to the shadow, 
        // each stroke offset shadowOffset from the last.
        this.shadowDepth = 5;
        // prop: highlightMouseOver
        // True to highlight area when moused over.
        // This must be false to enable highlightMouseDown to highlight when clicking on a area.
        this.highlightMouseOver = true;
        // prop: highlightMouseDown
        // True to highlight when a mouse button is pressed over a area.
        // This will be disabled if highlightMouseOver is true.
        this.highlightMouseDown = false;
        // prop: highlightColors
        // array of colors to use when highlighting an area.
        this.highlightColors = [];
        // prop: widthRatio
        // The ratio of the width of the top of the funnel to the bottom.
        // a ratio of 0 will make an upside down pyramid. 
        this.widthRatio = 0.2;
        // prop: lineWidth
        // width of line if areas are stroked and not filled.
        this.lineWidth = 2;
        // prop: dataLabels
        // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
        // Defaults to percentage of each pie slice.
        this.dataLabels = 'percent';
        // prop: showDataLabels
        // true to show data labels on slices.
        this.showDataLabels = false;
        // prop: dataLabelFormatString
        // Format string for data labels.  If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
        this.dataLabelFormatString = null;
        // prop: dataLabelThreshold
        // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed.
        // This applies to all label types, not just to percentage labels.
        this.dataLabelThreshold = 3;
        
        this.tickRenderer = $.jqplot.FunnelTickRenderer;
        
        // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
        if (options.highlightMouseDown && options.highlightMouseOver == null) {
            options.highlightMouseOver = false;
        }
        
        $.extend(true, this, options);
        
        // index of the currenty highlighted point, if any
        this._highlightedPoint = null;
        
        // lengths of bases, or horizontal sides of areas of trapezoid.
        this._bases = [];
        // total area
        this._atot;
        // areas of segments.
        this._areas = [];
        // vertical lengths of segments.
        this._lengths = [];
        // angle of the funnel to vertical.
        this._angle;
        this._dataIndices = [];
        
        // sort data
        this._unorderedData = $.extend(true, [], this.data);
        var idxs = $.extend(true, [], this.data);
        for (var i=0; i<idxs.length; i++) {
            idxs[i].push(i);
        }
        this.data.sort( function (a, b) { return b[1] - a[1]; } );
        idxs.sort( function (a, b) { return b[1] - a[1]; });
        for (var i=0; i<idxs.length; i++) {
            this._dataIndices.push(idxs[i][2]);
        }
        
        // set highlight colors if none provided
        if (this.highlightColors.length == 0) {
            for (var i=0; i<this.seriesColors.length; i++){
                var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
                var newrgb = [rgba[0], rgba[1], rgba[2]];
                var sum = newrgb[0] + newrgb[1] + newrgb[2];
                for (var j=0; j<3; j++) {
                    // when darkening, lowest color component can be is 60.
                    newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.4 * (255 - newrgb[j]);
                    newrgb[j] = parseInt(newrgb[j], 10);
                }
                this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
            }
        }

        plot.postParseOptionsHooks.addOnce(postParseOptions);
        plot.postInitHooks.addOnce(postInit);
        plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
        plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
        plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
        plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
        plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
        plot.postDrawHooks.addOnce(postPlotDraw);        
        
    };
    
    // gridData will be of form [label, percentage of total]
    $.jqplot.FunnelRenderer.prototype.setGridData = function(plot) {
        // set gridData property.  This will hold angle in radians of each data point.
        var sum = 0;
        var td = [];
        for (var i=0; i<this.data.length; i++){
            sum += this.data[i][1];
            td.push([this.data[i][0], this.data[i][1]]);
        }
        
        // normalize y values, so areas are proportional.
        for (var i=0; i<td.length; i++) {
            td[i][1] = td[i][1]/sum;
        }
        
        this._bases = new Array(td.length + 1);
        this._lengths = new Array(td.length);
        
        this.gridData = td;
    };
    
    $.jqplot.FunnelRenderer.prototype.makeGridData = function(data, plot) {
        // set gridData property.  This will hold angle in radians of each data point.
        var sum = 0;
        var td = [];
        for (var i=0; i<this.data.length; i++){
            sum += this.data[i][1];
            td.push([this.data[i][0], this.data[i][1]]);
        }
        
        // normalize y values, so areas are proportional.
        for (var i=0; i<td.length; i++) {
            td[i][1] = td[i][1]/sum;
        }
        
        this._bases = new Array(td.length + 1);
        this._lengths = new Array(td.length);
        
        return td;
    };
    
    $.jqplot.FunnelRenderer.prototype.drawSection = function (ctx, vertices, color, isShadow) {
        var fill = this.fill;
        var lineWidth = this.lineWidth;
        ctx.save();
        
        if (isShadow) {
            for (var i=0; i<this.shadowDepth; i++) {
                ctx.save();
                ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
                doDraw();
            }
        }
        
        else {
            doDraw();
        }
        
        function doDraw () {
            ctx.beginPath();  
            ctx.fillStyle = color;
            ctx.strokeStyle = color;
            ctx.lineWidth = lineWidth;
            ctx.moveTo(vertices[0][0], vertices[0][1]);
            for (var i=1; i<4; i++) {
                ctx.lineTo(vertices[i][0], vertices[i][1]);
            }
            ctx.closePath();
            if (fill) {
                ctx.fill();
            }
            else {
                ctx.stroke();
            }
        }
        
        if (isShadow) {
            for (var i=0; i<this.shadowDepth; i++) {
                ctx.restore();
            }
        }
        
        ctx.restore();
    };
    
    // called with scope of series
    $.jqplot.FunnelRenderer.prototype.draw = function (ctx, gd, options, plot) {
        var i;
        var opts = (options != undefined) ? options : {};
        // offset and direction of offset due to legend placement
        var offx = 0;
        var offy = 0;
        var trans = 1;
        this._areas = [];
        // var colorGenerator = new this.colorGenerator(this.seriesColors);
        if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
            var li = options.legendInfo;
            switch (li.location) {
                case 'nw':
                    offx = li.width + li.xoffset;
                    break;
                case 'w':
                    offx = li.width + li.xoffset;
                    break;
                case 'sw':
                    offx = li.width + li.xoffset;
                    break;
                case 'ne':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'e':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'se':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'n':
                    offy = li.height + li.yoffset;
                    break;
                case 's':
                    offy = li.height + li.yoffset;
                    trans = -1;
                    break;
                default:
                    break;
            }
        }
        
        var loff = (trans==1) ? this.padding.left + offx : this.padding.left;
        var toff = (trans==1) ? this.padding.top + offy : this.padding.top;
        var roff = (trans==-1) ? this.padding.right + offx : this.padding.right;
        var boff = (trans==-1) ? this.padding.bottom + offy : this.padding.bottom;
        
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var cw = ctx.canvas.width;
        var ch = ctx.canvas.height;
        this._bases[0] = cw - loff - roff;
        var ltot = this._length = ch - toff - boff;

        var hend = this._bases[0]*this.widthRatio;
        this._atot = ltot/2 * (this._bases[0] + this._bases[0]*this.widthRatio);

        this._angle = Math.atan((this._bases[0] - hend)/2/ltot);

        for (i=0; i<gd.length; i++) {
            this._areas.push(gd[i][1] * this._atot);
        }

        
        var guess, err, count, lsum=0;
        var tolerance = 0.0001;

        for (i=0; i<this._areas.length; i++) {
            guess = this._areas[i]/this._bases[i];
            err = 999999;
            this._lengths[i] = guess;
            count = 0;
            while (err > this._lengths[i]*tolerance && count < 100) {
                this._lengths[i] = this._areas[i]/(this._bases[i] - this._lengths[i] * Math.tan(this._angle));
                err = Math.abs(this._lengths[i] - guess);
                this._bases[i+1] = this._bases[i] - (2*this._lengths[i]*Math.tan(this._angle));
                guess = this._lengths[i];
                count++;
            }
            lsum += this._lengths[i];
        }
        
        // figure out vertices of each section
        this._vertices = new Array(gd.length);
        
        // these are 4 coners of entire trapezoid
        var p0 = [loff, toff],
            p1 = [loff+this._bases[0], toff],
            p2 = [loff + (this._bases[0] - this._bases[this._bases.length-1])/2, toff + this._length],
            p3 = [p2[0] + this._bases[this._bases.length-1], p2[1]];
            
        // equations of right and left sides, returns x, y values given height of section (y value)
        function findleft (l) {
            var m = (p0[1] - p2[1])/(p0[0] - p2[0]);
            var b = p0[1] - m*p0[0];
            var y = l + p0[1];
            
            return [(y - b)/m, y];
        }
        
        function findright (l) {
            var m = (p1[1] - p3[1])/(p1[0] - p3[0]);
            var b = p1[1] - m*p1[0];
            var y = l + p1[1];
            
            return [(y - b)/m, y];
        }
        
        var x = offx, y = offy;
        var h=0, adj=0;
        
        for (i=0; i<gd.length; i++) {
            this._vertices[i] = new Array();
            var v = this._vertices[i];
            var sm = this.sectionMargin;
            if (i == 0) {
                adj = 0;
            }
            if (i == 1) {
                adj = sm/3;
            }
            else if (i > 0 && i < gd.length-1) {
                adj = sm/2;
            }
            else if (i == gd.length -1) {
                adj = 2*sm/3;
            }
            v.push(findleft(h+adj));
            v.push(findright(h+adj));
            h += this._lengths[i];
            if (i == 0) {
                adj = -2*sm/3;
            }
            else if (i > 0 && i < gd.length-1) {
                adj = -sm/2;
            }
            else if (i == gd.length - 1) {
                adj = 0;
            }
            v.push(findright(h+adj));
            v.push(findleft(h+adj));
            
        }

        if (this.shadow) {
            var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
            for (var i=0; i<gd.length; i++) {
                this.renderer.drawSection.call (this, ctx, this._vertices[i], shadowColor, true);
            }
            
        }
        for (var i=0; i<gd.length; i++) {
            var v = this._vertices[i];
            this.renderer.drawSection.call (this, ctx, v, this.seriesColors[i]);
            
            if (this.showDataLabels && gd[i][1]*100 >= this.dataLabelThreshold) {
                var fstr, label;
                
                if (this.dataLabels == 'label') {
                    fstr = this.dataLabelFormatString || '%s';
                    label = $.jqplot.sprintf(fstr, gd[i][0]);
                }
                else if (this.dataLabels == 'value') {
                    fstr = this.dataLabelFormatString || '%d';
                    label = $.jqplot.sprintf(fstr, this.data[i][1]);
                }
                else if (this.dataLabels == 'percent') {
                    fstr = this.dataLabelFormatString || '%d%%';
                    label = $.jqplot.sprintf(fstr, gd[i][1]*100);
                }
                else if (this.dataLabels.constructor == Array) {
                    fstr = this.dataLabelFormatString || '%s';
                    label = $.jqplot.sprintf(fstr, this.dataLabels[this._dataIndices[i]]);
                }
                
                var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
                
                var x = (v[0][0] + v[1][0])/2 + this.canvas._offsets.left;
                var y = (v[1][1] + v[2][1])/2 + this.canvas._offsets.top;
                
                var labelelem = $('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem);
                x -= labelelem.width()/2;
                y -= labelelem.height()/2;
                x = Math.round(x);
                y = Math.round(y);
                labelelem.css({left: x, top: y});
            }
            
        }
               
    };
    
    $.jqplot.FunnelAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.FunnelAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.FunnelAxisRenderer.prototype.constructor = $.jqplot.FunnelAxisRenderer;
        
    
    // There are no traditional axes on a funnel chart.  We just need to provide
    // dummy objects with properties so the plot will render.
    // called with scope of axis object.
    $.jqplot.FunnelAxisRenderer.prototype.init = function(options){
        //
        this.tickRenderer = $.jqplot.FunnelTickRenderer;
        $.extend(true, this, options);
        // I don't think I'm going to need _dataBounds here.
        // have to go Axis scaling in a way to fit chart onto plot area
        // and provide u2p and p2u functionality for mouse cursor, etc.
        // for convienence set _dataBounds to 0 and 100 and
        // set min/max to 0 and 100.
        this._dataBounds = {min:0, max:100};
        this.min = 0;
        this.max = 100;
        this.showTicks = false;
        this.ticks = [];
        this.showMark = false;
        this.show = false; 
    };
    
    
    
    /**
     * Class: $.jqplot.FunnelLegendRenderer
     * Legend Renderer specific to funnel plots.  Set by default
     * when the user creates a funnel plot.
     */
    $.jqplot.FunnelLegendRenderer = function(){
        $.jqplot.TableLegendRenderer.call(this);
    };
    
    $.jqplot.FunnelLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
    $.jqplot.FunnelLegendRenderer.prototype.constructor = $.jqplot.FunnelLegendRenderer;
    
    $.jqplot.FunnelLegendRenderer.prototype.init = function(options) {
        // Group: Properties
        //
        // prop: numberRows
        // Maximum number of rows in the legend.  0 or null for unlimited.
        this.numberRows = null;
        // prop: numberColumns
        // Maximum number of columns in the legend.  0 or null for unlimited.
        this.numberColumns = null;
        $.extend(true, this, options);
    };
    
    // called with context of legend
    $.jqplot.FunnelLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
            ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
            ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
            ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
            // Funnel charts legends don't go by number of series, but by number of data points
            // in the series.  Refactor things here for that.
            
            var pad = false, 
                reverse = false,
                nr, nc;
            var s = series[0];
            var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
            
            if (s.show) {
                var pd = s.data;
                if (this.numberRows) {
                    nr = this.numberRows;
                    if (!this.numberColumns){
                        nc = Math.ceil(pd.length/nr);
                    }
                    else{
                        nc = this.numberColumns;
                    }
                }
                else if (this.numberColumns) {
                    nc = this.numberColumns;
                    nr = Math.ceil(pd.length/this.numberColumns);
                }
                else {
                    nr = pd.length;
                    nc = 1;
                }
                
                var i, j, tr, td1, td2, lt, rs, color;
                var idx = 0;    
                
                for (i=0; i<nr; i++) {
                    if (reverse){
                        tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
                    }
                    else{
                        tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
                    }
                    for (j=0; j<nc; j++) {
                        if (idx < pd.length){
                            lt = this.labels[idx] || pd[idx][0].toString();
                            color = colorGenerator.next();
                            if (!reverse){
                                if (i>0){
                                    pad = true;
                                }
                                else{
                                    pad = false;
                                }
                            }
                            else{
                                if (i == nr -1){
                                    pad = false;
                                }
                                else{
                                    pad = true;
                                }
                            }
                            rs = (pad) ? this.rowSpacing : '0';
                
                            td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
                                '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
                                '</div></td>');
                            td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
                            if (this.escapeHtml){
                                td2.text(lt);
                            }
                            else {
                                td2.html(lt);
                            }
                            if (reverse) {
                                td2.prependTo(tr);
                                td1.prependTo(tr);
                            }
                            else {
                                td1.appendTo(tr);
                                td2.appendTo(tr);
                            }
                            pad = true;
                        }
                        idx++;
                    }   
                }
            }
        }
        return this._elem;                
    };
    
    // $.jqplot.FunnelLegendRenderer.prototype.pack = function(offsets) {
    //     if (this.show) {
    //         // fake a grid for positioning
    //         var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};        
    //         if (this.placement == 'insideGrid') {
    //             switch (this.location) {
    //                 case 'nw':
    //                     var a = grid._left + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'n':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'ne':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 case 'e':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 case 'se':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //                 case 's':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 'sw':
    //                     var a = grid._left + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 'w':
    //                     var a = grid._left + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 default:  // same as 'se'
    //                     var a = grid._right - this.xoffset;
    //                     var b = grid._bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //             }
    //             
    //         }
    //         else {
    //             switch (this.location) {
    //                 case 'nw':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('right', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'n':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = this._plotDimensions.height - grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('bottom', b);
    //                     break;
    //                 case 'ne':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'e':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'se':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 's':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'sw':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //                 case 'w':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 default:  // same as 'se'
    //                     var a = grid._right - this.xoffset;
    //                     var b = grid._bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //             }
    //         }
    //     } 
    // };
    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = options.axesDefaults || {};
        options.legend = options.legend || {};
        options.seriesDefaults = options.seriesDefaults || {};
        // only set these if there is a funnel series
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.FunnelRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.FunnelRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.FunnelAxisRenderer;
            options.legend.renderer = $.jqplot.FunnelLegendRenderer;
            options.legend.preDraw = true;
            options.sortData = false;
            options.seriesDefaults.pointLabels = {show: false};
        }
    }
    
    function postInit(target, data, options) {
        // if multiple series, add a reference to the previous one so that
        // funnel rings can nest.
        for (i=0; i<this.series.length; i++) {
            if (this.series[i].renderer.constructor == $.jqplot.FunnelRenderer) {
                // don't allow mouseover and mousedown at same time.
                if (this.series[i].highlightMouseOver) {
                    this.series[i].highlightMouseDown = false;
                }
            }
        }
        this.target.bind('mouseout', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
    }
    
    // called with scope of plot
    function postParseOptions(options) {
        for (var i=0; i<this.series.length; i++) {
            this.series[i].seriesColors = this.seriesColors;
            this.series[i].colorGenerator = this.colorGenerator;
        }
    }
    
    function highlight (plot, sidx, pidx) {
        var s = plot.series[sidx];
        var canvas = plot.plugins.funnelRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        s._highlightedPoint = pidx;
        plot.plugins.funnelRenderer.highlightedSeriesIndex = sidx;
        s.renderer.drawSection.call(s, canvas._ctx, s._vertices[pidx], s.highlightColors[pidx], false);
    }
    
    function unhighlight (plot) {
        var canvas = plot.plugins.funnelRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        for (var i=0; i<plot.series.length; i++) {
            plot.series[i]._highlightedPoint = null;
        }
        plot.plugins.funnelRenderer.highlightedSeriesIndex = null;
        plot.target.trigger('jqplotDataUnhighlight');
    }
    
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt1 = jQuery.Event('jqplotDataMouseOver');
            evt1.pageX = ev.pageX;
            evt1.pageY = ev.pageY;
            plot.target.trigger(evt1, ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
        var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex;
        if (idx != null && plot.series[idx].highlightMouseDown) {
            unhighlight(plot);
        }
    }
    
    function handleClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt = jQuery.Event('jqplotDataClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex;
            if (idx != null && plot.series[idx].highlightMouseDown) {
                unhighlight(plot);
            }
            var evt = jQuery.Event('jqplotDataRightClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    function postPlotDraw() {
        this.plugins.funnelRenderer = {};
        this.plugins.funnelRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
        
        // do we have any data labels?  if so, put highlight canvas before those
        var labels = $(this.targetId+' .jqplot-data-label');
        if (labels.length) {
            $(labels[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions));
        }
        // else put highlight canvas before event canvas.
        else {
            this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions));
        }
        var hctx = this.plugins.funnelRenderer.highlightCanvas.setContext();
    }
    
    $.jqplot.preInitHooks.push(preInit);
    
    $.jqplot.FunnelTickRenderer = function() {
        $.jqplot.AxisTickRenderer.call(this);
    };
    
    $.jqplot.FunnelTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
    $.jqplot.FunnelTickRenderer.prototype.constructor = $.jqplot.FunnelTickRenderer;
    
})(jQuery);
    
    

Added Site/Site_W/jpqplot/plugins/jqplot.funnelRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(e){e.jqplot.FunnelRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.FunnelRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.FunnelRenderer.prototype.constructor=e.jqplot.FunnelRenderer;e.jqplot.FunnelRenderer.prototype.init=function(q,u){this.padding={top:20,right:20,bottom:20,left:20};this.sectionMargin=6;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.widthRatio=0.2;this.lineWidth=2;this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.tickRenderer=e.jqplot.FunnelTickRenderer;if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);this._highlightedPoint=null;this._bases=[];this._atot;this._areas=[];this._lengths=[];this._angle;this._dataIndices=[];this._unorderedData=e.extend(true,[],this.data);var p=e.extend(true,[],this.data);for(var s=0;s<p.length;s++){p[s].push(s)}this.data.sort(function(w,v){return v[1]-w[1]});p.sort(function(w,v){return v[1]-w[1]});for(var s=0;s<p.length;s++){this._dataIndices.push(p[s][2])}if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var o=0;o<3;o++){n[o]=(t>570)?n[o]*0.8:n[o]+0.4*(255-n[o]);n[o]=parseInt(n[o],10)}this.highlightColors.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}}u.postParseOptionsHooks.addOnce(l);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",a);u.eventListenerHooks.addOnce("jqplotMouseDown",b);u.eventListenerHooks.addOnce("jqplotMouseUp",k);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",m);u.postDrawHooks.addOnce(h)};e.jqplot.FunnelRenderer.prototype.setGridData=function(p){var o=0;var q=[];for(var n=0;n<this.data.length;n++){o+=this.data[n][1];q.push([this.data[n][0],this.data[n][1]])}for(var n=0;n<q.length;n++){q[n][1]=q[n][1]/o}this._bases=new Array(q.length+1);this._lengths=new Array(q.length);this.gridData=q};e.jqplot.FunnelRenderer.prototype.makeGridData=function(p,q){var o=0;var r=[];for(var n=0;n<this.data.length;n++){o+=this.data[n][1];r.push([this.data[n][0],this.data[n][1]])}for(var n=0;n<r.length;n++){r[n][1]=r[n][1]/o}this._bases=new Array(r.length+1);this._lengths=new Array(r.length);return r};e.jqplot.FunnelRenderer.prototype.drawSection=function(o,q,p,t){var u=this.fill;var n=this.lineWidth;o.save();if(t){for(var s=0;s<this.shadowDepth;s++){o.save();o.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));r()}}else{r()}function r(){o.beginPath();o.fillStyle=p;o.strokeStyle=p;o.lineWidth=n;o.moveTo(q[0][0],q[0][1]);for(var v=1;v<4;v++){o.lineTo(q[v][0],q[v][1])}o.closePath();if(u){o.fill()}else{o.stroke()}}if(t){for(var s=0;s<this.shadowDepth;s++){o.restore()}}o.restore()};e.jqplot.FunnelRenderer.prototype.draw=function(H,C,K,q){var Z;var M=(K!=undefined)?K:{};var z=0;var w=0;var S=1;this._areas=[];if(K.legendInfo&&K.legendInfo.placement=="insideGrid"){var P=K.legendInfo;switch(P.location){case"nw":z=P.width+P.xoffset;break;case"w":z=P.width+P.xoffset;break;case"sw":z=P.width+P.xoffset;break;case"ne":z=P.width+P.xoffset;S=-1;break;case"e":z=P.width+P.xoffset;S=-1;break;case"se":z=P.width+P.xoffset;S=-1;break;case"n":w=P.height+P.yoffset;break;case"s":w=P.height+P.yoffset;S=-1;break;default:break}}var u=(S==1)?this.padding.left+z:this.padding.left;var G=(S==1)?this.padding.top+w:this.padding.top;var N=(S==-1)?this.padding.right+z:this.padding.right;var p=(S==-1)?this.padding.bottom+w:this.padding.bottom;var Q=(M.shadow!=undefined)?M.shadow:this.shadow;var r=(M.showLine!=undefined)?M.showLine:this.showLine;var D=(M.fill!=undefined)?M.fill:this.fill;var I=H.canvas.width;var O=H.canvas.height;this._bases[0]=I-u-N;var J=this._length=O-G-p;var s=this._bases[0]*this.widthRatio;this._atot=J/2*(this._bases[0]+this._bases[0]*this.widthRatio);this._angle=Math.atan((this._bases[0]-s)/2/J);for(Z=0;Z<C.length;Z++){this._areas.push(C[Z][1]*this._atot)}var F,ab,X,R=0;var o=0.0001;for(Z=0;Z<this._areas.length;Z++){F=this._areas[Z]/this._bases[Z];ab=999999;this._lengths[Z]=F;X=0;while(ab>this._lengths[Z]*o&&X<100){this._lengths[Z]=this._areas[Z]/(this._bases[Z]-this._lengths[Z]*Math.tan(this._angle));ab=Math.abs(this._lengths[Z]-F);this._bases[Z+1]=this._bases[Z]-(2*this._lengths[Z]*Math.tan(this._angle));F=this._lengths[Z];X++}R+=this._lengths[Z]}this._vertices=new Array(C.length);var af=[u,G],ae=[u+this._bases[0],G],ad=[u+(this._bases[0]-this._bases[this._bases.length-1])/2,G+this._length],ac=[ad[0]+this._bases[this._bases.length-1],ad[1]];function W(ah){var x=(af[1]-ad[1])/(af[0]-ad[0]);var v=af[1]-x*af[0];var ai=ah+af[1];return[(ai-v)/x,ai]}function E(ah){var x=(ae[1]-ac[1])/(ae[0]-ac[0]);var v=ae[1]-x*ae[0];var ai=ah+ae[1];return[(ai-v)/x,ai]}var U=z,T=w;var aa=0,n=0;for(Z=0;Z<C.length;Z++){this._vertices[Z]=new Array();var V=this._vertices[Z];var B=this.sectionMargin;if(Z==0){n=0}if(Z==1){n=B/3}else{if(Z>0&&Z<C.length-1){n=B/2}else{if(Z==C.length-1){n=2*B/3}}}V.push(W(aa+n));V.push(E(aa+n));aa+=this._lengths[Z];if(Z==0){n=-2*B/3}else{if(Z>0&&Z<C.length-1){n=-B/2}else{if(Z==C.length-1){n=0}}}V.push(E(aa+n));V.push(W(aa+n))}if(this.shadow){var ag="rgba(0,0,0,"+this.shadowAlpha+")";for(var Z=0;Z<C.length;Z++){this.renderer.drawSection.call(this,H,this._vertices[Z],ag,true)}}for(var Z=0;Z<C.length;Z++){var V=this._vertices[Z];this.renderer.drawSection.call(this,H,V,this.seriesColors[Z]);if(this.showDataLabels&&C[Z][1]*100>=this.dataLabelThreshold){var L,Y;if(this.dataLabels=="label"){L=this.dataLabelFormatString||"%s";Y=e.jqplot.sprintf(L,C[Z][0])}else{if(this.dataLabels=="value"){L=this.dataLabelFormatString||"%d";Y=e.jqplot.sprintf(L,this.data[Z][1])}else{if(this.dataLabels=="percent"){L=this.dataLabelFormatString||"%d%%";Y=e.jqplot.sprintf(L,C[Z][1]*100)}else{if(this.dataLabels.constructor==Array){L=this.dataLabelFormatString||"%s";Y=e.jqplot.sprintf(L,this.dataLabels[this._dataIndices[Z]])}}}}var t=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var U=(V[0][0]+V[1][0])/2+this.canvas._offsets.left;var T=(V[1][1]+V[2][1])/2+this.canvas._offsets.top;var A=e('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">'+Y+"</span>").insertBefore(q.eventCanvas._elem);U-=A.width()/2;T-=A.height()/2;U=Math.round(U);T=Math.round(T);A.css({left:U,top:T})}}};e.jqplot.FunnelAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.FunnelAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.FunnelAxisRenderer.prototype.constructor=e.jqplot.FunnelAxisRenderer;e.jqplot.FunnelAxisRenderer.prototype.init=function(n){this.tickRenderer=e.jqplot.FunnelTickRenderer;e.extend(true,this,n);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.FunnelLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.FunnelLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.FunnelLegendRenderer.prototype.constructor=e.jqplot.FunnelLegendRenderer;e.jqplot.FunnelLegendRenderer.prototype.init=function(n){this.numberRows=null;this.numberColumns=null;e.extend(true,this,n)};e.jqplot.FunnelLegendRenderer.prototype.draw=function(){var q=this;if(this.show){var y=this._series;var B="position:absolute;";B+=(this.background)?"background:"+this.background+";":"";B+=(this.border)?"border:"+this.border+";":"";B+=(this.fontSize)?"font-size:"+this.fontSize+";":"";B+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";B+=(this.textColor)?"color:"+this.textColor+";":"";B+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";B+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";B+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";B+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+B+'"></table>');var F=false,x=false,n,v;var z=y[0];var o=new e.jqplot.ColorGenerator(z.seriesColors);if(z.show){var G=z.data;if(this.numberRows){n=this.numberRows;if(!this.numberColumns){v=Math.ceil(G.length/n)}else{v=this.numberColumns}}else{if(this.numberColumns){v=this.numberColumns;n=Math.ceil(G.length/this.numberColumns)}else{n=G.length;v=1}}var E,D,p,t,r,u,w,C;var A=0;for(E=0;E<n;E++){if(x){p=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(D=0;D<v;D++){if(A<G.length){u=this.labels[A]||G[A][0].toString();C=o.next();if(!x){if(E>0){F=true}else{F=false}}else{if(E==n-1){F=false}else{F=true}}w=(F)?this.rowSpacing:"0";t=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+w+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+C+';"></div></div></td>');r=e('<td class="jqplot-table-legend" style="padding-top:'+w+';"></td>');if(this.escapeHtml){r.text(u)}else{r.html(u)}if(x){r.prependTo(p);t.prependTo(p)}else{t.appendTo(p);r.appendTo(p)}F=true}A++}}}}return this._elem};function c(r,q,o){o=o||{};o.axesDefaults=o.axesDefaults||{};o.legend=o.legend||{};o.seriesDefaults=o.seriesDefaults||{};var n=false;if(o.seriesDefaults.renderer==e.jqplot.FunnelRenderer){n=true}else{if(o.series){for(var p=0;p<o.series.length;p++){if(o.series[p].renderer==e.jqplot.FunnelRenderer){n=true}}}}if(n){o.axesDefaults.renderer=e.jqplot.FunnelAxisRenderer;o.legend.renderer=e.jqplot.FunnelLegendRenderer;o.legend.preDraw=true;o.sortData=false;o.seriesDefaults.pointLabels={show:false}}}function g(p,o,n){for(i=0;i<this.series.length;i++){if(this.series[i].renderer.constructor==e.jqplot.FunnelRenderer){if(this.series[i].highlightMouseOver){this.series[i].highlightMouseDown=false}}}this.target.bind("mouseout",{plot:this},function(q){j(q.data.plot)})}function l(n){for(var o=0;o<this.series.length;o++){this.series[o].seriesColors=this.seriesColors;this.series[o].colorGenerator=this.colorGenerator}}function d(r,q,p){var o=r.series[q];var n=r.plugins.funnelRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=p;r.plugins.funnelRenderer.highlightedSeriesIndex=q;o.renderer.drawSection.call(o,n._ctx,o._vertices[p],o.highlightColors[p],false)}function j(p){var n=p.plugins.funnelRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.funnelRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.funnelRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);d(s,p[0],p[1])}}else{if(t==null){j(s)}}}function b(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.funnelRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);d(r,o[0],o[1])}}else{if(s==null){j(r)}}}function k(p,o,s,r,q){var n=q.plugins.funnelRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){j(q)}}function f(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.funnelRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){j(s)}var o=jQuery.Event("jqplotDataRightClick");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function h(){this.plugins.funnelRenderer={};this.plugins.funnelRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var o=e(this.targetId+" .jqplot-data-label");if(o.length){e(o[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions))}else{this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions))}var n=this.plugins.funnelRenderer.highlightCanvas.setContext()}e.jqplot.preInitHooks.push(c);e.jqplot.FunnelTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.FunnelTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.FunnelTickRenderer.prototype.constructor=e.jqplot.FunnelTickRenderer})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.highlighter.js.













































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
    
    /**
     * Class: $.jqplot.Highlighter
     * Plugin which will highlight data points when they are moused over.
     * 
     * To use this plugin, include the js
     * file in your source:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.highlighter.js"></script>
     * 
     * A tooltip providing information about the data point is enabled by default.
     * To disable the tooltip, set "showTooltip" to false.
     * 
     * You can control what data is displayed in the tooltip with various
     * options.  The "tooltipAxes" option controls wether the x, y or both
     * data values are displayed.
     * 
     * Some chart types (e.g. hi-low-close) have more than one y value per
     * data point. To display the additional values in the tooltip, set the
     * "yvalues" option to the desired number of y values present (3 for a hlc chart).
     * 
     * By default, data values will be formatted with the same formatting
     * specifiers as used to format the axis ticks.  A custom format code
     * can be supplied with the tooltipFormatString option.  This will apply 
     * to all values in the tooltip.  
     * 
     * For more complete control, the "formatString" option can be set.  This
     * Allows conplete control over tooltip formatting.  Values are passed to
     * the format string in an order determined by the "tooltipAxes" and "yvalues"
     * options.  So, if you have a hi-low-close chart and you just want to display 
     * the hi-low-close values in the tooltip, you could set a formatString like:
     * 
     * > highlighter: {
     * >     tooltipAxes: 'y',
     * >     yvalues: 3,
     * >     formatString:'<table class="jqplot-highlighter">
     * >         <tr><td>hi:</td><td>%s</td></tr>
     * >         <tr><td>low:</td><td>%s</td></tr>
     * >         <tr><td>close:</td><td>%s</td></tr></table>'
     * > }
     * 
     */
    $.jqplot.Highlighter = function(options) {
        // Group: Properties
        //
        //prop: show
        // true to show the highlight.
        this.show = $.jqplot.config.enablePlugins;
        // prop: markerRenderer
        // Renderer used to draw the marker of the highlighted point.
        // Renderer will assimilate attributes from the data point being highlighted,
        // so no attributes need set on the renderer directly.
        // Default is to turn off shadow drawing on the highlighted point.
        this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false});
        // prop: showMarker
        // true to show the marker
        this.showMarker  = true;
        // prop: lineWidthAdjust
        // Pixels to add to the lineWidth of the highlight.
        this.lineWidthAdjust = 2.5;
        // prop: sizeAdjust
        // Pixels to add to the overall size of the highlight.
        this.sizeAdjust = 5;
        // prop: showTooltip
        // Show a tooltip with data point values.
        this.showTooltip = true;
        // prop: tooltipLocation
        // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
        this.tooltipLocation = 'nw';
        // prop: fadeTooltip
        // true = fade in/out tooltip, flase = show/hide tooltip
        this.fadeTooltip = true;
        // prop: tooltipFadeSpeed
        // 'slow', 'def', 'fast', or number of milliseconds.
        this.tooltipFadeSpeed = "fast";
        // prop: tooltipOffset
        // Pixel offset of tooltip from the highlight.
        this.tooltipOffset = 2;
        // prop: tooltipAxes
        // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx'
        // 'both' and 'xy' are equivalent, 'yx' reverses order of labels.
        this.tooltipAxes = 'both';
        // prop; tooltipSeparator
        // String to use to separate x and y axes in tooltip.
        this.tooltipSeparator = ', ';
        // prop: useAxesFormatters
        // Use the x and y axes formatters to format the text in the tooltip.
        this.useAxesFormatters = true;
        // prop: tooltipFormatString
        // sprintf format string for the tooltip.
        // Uses Ash Searle's javascript sprintf implementation
        // found here: http://hexmen.com/blog/2007/03/printf-sprintf/
        // See http://perldoc.perl.org/functions/sprintf.html for reference.
        // Additional "p" and "P" format specifiers added by Chris Leonello.
        this.tooltipFormatString = '%.5P';
        // prop: formatString
        // alternative to tooltipFormatString
        // will format the whole tooltip text, populating with x, y values as
        // indicated by tooltipAxes option.  So, you could have a tooltip like:
        // 'Date: %s, number of cats: %d' to format the whole tooltip at one go.
        // If useAxesFormatters is true, values will be formatted according to
        // Axes formatters and you can populate your tooltip string with 
        // %s placeholders.
        this.formatString = null;
        // prop: yvalues
        // Number of y values to expect in the data point array.
        // Typically this is 1.  Certain plots, like OHLC, will
        // have more y values in each data point array.
        this.yvalues = 1;
        // prop: bringSeriesToFront
        // This option requires jQuery 1.4+
        // True to bring the series of the highlighted point to the front
        // of other series.
        this.bringSeriesToFront = false;
        this._tooltipElem;
        this.isHighlighting = false;

        $.extend(true, this, options);
    };
    
    // axis.renderer.tickrenderer.formatter
    
    // called with scope of plot
    $.jqplot.Highlighter.init = function (target, data, opts){
        var options = opts || {};
        // add a highlighter attribute to the plot
        this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter);
    };
    
    // called within scope of series
    $.jqplot.Highlighter.parseOptions = function (defaults, options) {
        // Add a showHighlight option to the series 
        // and set it to true by default.
        this.showHighlight = true;
    };
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    $.jqplot.Highlighter.postPlotDraw = function() {
        this.plugins.highlighter.highlightCanvas = new $.jqplot.GenericCanvas();
        
        this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding, 'jqplot-highlight-canvas', this._plotDimensions));
        var hctx = this.plugins.highlighter.highlightCanvas.setContext();
        
        var p = this.plugins.highlighter;
        p._tooltipElem = $('<div class="jqplot-highlighter-tooltip" style="position:absolute;display:none"></div>');
        this.eventCanvas._elem.before(p._tooltipElem);
    };
    
    $.jqplot.preInitHooks.push($.jqplot.Highlighter.init);
    $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions);
    $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw);
    
    function draw(plot, neighbor) {
        var hl = plot.plugins.highlighter;
        var s = plot.series[neighbor.seriesIndex];
        var smr = s.markerRenderer;
        var mr = hl.markerRenderer;
        mr.style = smr.style;
        mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust;
        mr.size = smr.size + hl.sizeAdjust;
        var rgba = $.jqplot.getColorComponents(smr.color);
        var newrgb = [rgba[0], rgba[1], rgba[2]];
        var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
        mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
        mr.init();
        mr.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], hl.highlightCanvas._ctx);
    }
    
    function showTooltip(plot, series, neighbor) {
        // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}
        // gridData should be x,y pixel coords on the grid.
        // add the plot._gridPadding to that to get x,y in the target.
        var hl = plot.plugins.highlighter;
        var elem = hl._tooltipElem;
        if (hl.useAxesFormatters) {
            var xf = series._xaxis._ticks[0].formatter;
            var yf = series._yaxis._ticks[0].formatter;
            var xfstr = series._xaxis._ticks[0].formatString;
            var yfstr = series._yaxis._ticks[0].formatString;
            var str;
            var xstr = xf(xfstr, neighbor.data[0]);
            var ystrs = [];
            for (var i=1; i<hl.yvalues+1; i++) {
                ystrs.push(yf(yfstr, neighbor.data[i]));
            }
            if (hl.formatString) {
                switch (hl.tooltipAxes) {
                    case 'both':
                    case 'xy':
                        ystrs.unshift(xstr);
                        ystrs.unshift(hl.formatString);
                        str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
                        break;
                    case 'yx':
                        ystrs.push(xstr);
                        ystrs.unshift(hl.formatString);
                        str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
                        break;
                    case 'x':
                        str = $.jqplot.sprintf.apply($.jqplot.sprintf, [hl.formatString, xstr]);
                        break;
                    case 'y':
                        ystrs.unshift(hl.formatString);
                        str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
                        break;
                    default: // same as xy
                        ystrs.unshift(xstr);
                        ystrs.unshift(hl.formatString);
                        str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
                        break;
                } 
            }
            else {
                switch (hl.tooltipAxes) {
                    case 'both':
                    case 'xy':
                        str = xstr;
                        for (var i=0; i<ystrs.length; i++) {
                            str += hl.tooltipSeparator + ystrs[i];
                        }
                        break;
                    case 'yx':
                        str = '';
                        for (var i=0; i<ystrs.length; i++) {
                            str += ystrs[i] + hl.tooltipSeparator;
                        }
                        str += xstr;
                        break;
                    case 'x':
                        str = xstr;
                        break;
                    case 'y':
                        str = '';
                        for (var i=0; i<ystrs.length; i++) {
                            str += ystrs[i] + hl.tooltipSeparator;
                        }
                        break;
                    default: // same as 'xy'
                        str = xstr;
                        for (var i=0; i<ystrs.length; i++) {
                            str += hl.tooltipSeparator + ystrs[i];
                        }
                        break;
                    
                }                
            }
        }
        else {
            var str;
            if (hl.tooltipAxes == 'both' || hl.tooltipAxes == 'xy') {
                str = $.jqplot.sprintf(hl.tooltipFormatString, neighbor.data[0]) + hl.tooltipSeparator + $.jqplot.sprintf(hl.tooltipFormatString, neighbor.data[1]);
            }
            else if (hl.tooltipAxes == 'yx') {
                str = $.jqplot.sprintf(hl.tooltipFormatString, neighbor.data[1]) + hl.tooltipSeparator + $.jqplot.sprintf(hl.tooltipFormatString, neighbor.data[0]);
            }
            else if (hl.tooltipAxes == 'x') {
                str = $.jqplot.sprintf(hl.tooltipFormatString, neighbor.data[0]);
            }
            else if (hl.tooltipAxes == 'y') {
                str = $.jqplot.sprintf(hl.tooltipFormatString, neighbor.data[1]);
            } 
        }
        elem.html(str);
        var gridpos = {x:neighbor.gridData[0], y:neighbor.gridData[1]};
        var ms = 0;
        var fact = 0.707;
        if (series.markerRenderer.show == true) { 
            ms = (series.markerRenderer.size + hl.sizeAdjust)/2;
        }
        switch (hl.tooltipLocation) {
            case 'nw':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - hl.tooltipOffset - fact * ms;
                var y = gridpos.y + plot._gridPadding.top - hl.tooltipOffset - elem.outerHeight(true) - fact * ms;
                break;
            case 'n':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
                var y = gridpos.y + plot._gridPadding.top - hl.tooltipOffset - elem.outerHeight(true) - ms;
                break;
            case 'ne':
                var x = gridpos.x + plot._gridPadding.left + hl.tooltipOffset + fact * ms;
                var y = gridpos.y + plot._gridPadding.top - hl.tooltipOffset - elem.outerHeight(true) - fact * ms;
                break;
            case 'e':
                var x = gridpos.x + plot._gridPadding.left + hl.tooltipOffset + ms;
                var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
                break;
            case 'se':
                var x = gridpos.x + plot._gridPadding.left + hl.tooltipOffset + fact * ms;
                var y = gridpos.y + plot._gridPadding.top + hl.tooltipOffset + fact * ms;
                break;
            case 's':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
                var y = gridpos.y + plot._gridPadding.top + hl.tooltipOffset + ms;
                break;
            case 'sw':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - hl.tooltipOffset - fact * ms;
                var y = gridpos.y + plot._gridPadding.top + hl.tooltipOffset + fact * ms;
                break;
            case 'w':
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - hl.tooltipOffset - ms;
                var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
                break;
            default: // same as 'nw'
                var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - hl.tooltipOffset - fact * ms;
                var y = gridpos.y + plot._gridPadding.top - hl.tooltipOffset - elem.outerHeight(true) - fact * ms;
                break;
        }
        elem.css('left', x);
        elem.css('top', y);
        if (hl.fadeTooltip) {
            // Fix for stacked up animations.  Thnanks Trevor!
            elem.stop(true,true).fadeIn(hl.tooltipFadeSpeed);
        }
        else {
            elem.show();
        }
        
    }
    
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        var hl = plot.plugins.highlighter;
        var c = plot.plugins.cursor;
        if (hl.show) {
            if (neighbor == null && hl.isHighlighting) {
               var ctx = hl.highlightCanvas._ctx;
               ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
                if (hl.fadeTooltip) {
                    hl._tooltipElem.fadeOut(hl.tooltipFadeSpeed);
                }
                else {
                    hl._tooltipElem.hide();
                }
                if (hl.bringSeriesToFront) {
                    plot.restorePreviousSeriesOrder();
                }
               hl.isHighlighting = false;
            
            }
            if (neighbor != null && plot.series[neighbor.seriesIndex].showHighlight && !hl.isHighlighting) {
                hl.isHighlighting = true;
                if (hl.showMarker) {
                    draw(plot, neighbor);
                }
                if (hl.showTooltip && (!c || !c._zoom.started)) {
                    showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor);
                }
                if (hl.bringSeriesToFront) {
                    plot.moveSeriesToFront(neighbor.seriesIndex);
                }
            }
        }
    }
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.highlighter.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(b){b.jqplot.eventListenerHooks.push(["jqplotMouseMove",c]);b.jqplot.Highlighter=function(e){this.show=b.jqplot.config.enablePlugins;this.markerRenderer=new b.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;b.extend(true,this,e)};b.jqplot.Highlighter.init=function(h,g,f){var e=f||{};this.plugins.highlighter=new b.jqplot.Highlighter(e.highlighter)};b.jqplot.Highlighter.parseOptions=function(f,e){this.showHighlight=true};b.jqplot.Highlighter.postPlotDraw=function(){this.plugins.highlighter.highlightCanvas=new b.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions));var f=this.plugins.highlighter.highlightCanvas.setContext();var e=this.plugins.highlighter;e._tooltipElem=b('<div class="jqplot-highlighter-tooltip" style="position:absolute;display:none"></div>');this.eventCanvas._elem.before(e._tooltipElem)};b.jqplot.preInitHooks.push(b.jqplot.Highlighter.init);b.jqplot.preParseSeriesOptionsHooks.push(b.jqplot.Highlighter.parseOptions);b.jqplot.postDrawHooks.push(b.jqplot.Highlighter.postPlotDraw);function a(j,l){var g=j.plugins.highlighter;var m=j.series[l.seriesIndex];var e=m.markerRenderer;var f=g.markerRenderer;f.style=e.style;f.lineWidth=e.lineWidth+g.lineWidthAdjust;f.size=e.size+g.sizeAdjust;var i=b.jqplot.getColorComponents(e.color);var k=[i[0],i[1],i[2]];var h=(i[3]>=0.6)?i[3]*0.6:i[3]*(2-i[3]);f.color="rgba("+k[0]+","+k[1]+","+k[2]+","+h+")";f.init();f.draw(m.gridData[l.pointIndex][0],m.gridData[l.pointIndex][1],g.highlightCanvas._ctx)}function d(s,m,j){var g=s.plugins.highlighter;var v=g._tooltipElem;if(g.useAxesFormatters){var q=m._xaxis._ticks[0].formatter;var e=m._yaxis._ticks[0].formatter;var w=m._xaxis._ticks[0].formatString;var n=m._yaxis._ticks[0].formatString;var r;var o=q(w,j.data[0]);var h=[];for(var t=1;t<g.yvalues+1;t++){h.push(e(n,j.data[t]))}if(g.formatString){switch(g.tooltipAxes){case"both":case"xy":h.unshift(o);h.unshift(g.formatString);r=b.jqplot.sprintf.apply(b.jqplot.sprintf,h);break;case"yx":h.push(o);h.unshift(g.formatString);r=b.jqplot.sprintf.apply(b.jqplot.sprintf,h);break;case"x":r=b.jqplot.sprintf.apply(b.jqplot.sprintf,[g.formatString,o]);break;case"y":h.unshift(g.formatString);r=b.jqplot.sprintf.apply(b.jqplot.sprintf,h);break;default:h.unshift(o);h.unshift(g.formatString);r=b.jqplot.sprintf.apply(b.jqplot.sprintf,h);break}}else{switch(g.tooltipAxes){case"both":case"xy":r=o;for(var t=0;t<h.length;t++){r+=g.tooltipSeparator+h[t]}break;case"yx":r="";for(var t=0;t<h.length;t++){r+=h[t]+g.tooltipSeparator}r+=o;break;case"x":r=o;break;case"y":r="";for(var t=0;t<h.length;t++){r+=h[t]+g.tooltipSeparator}break;default:r=o;for(var t=0;t<h.length;t++){r+=g.tooltipSeparator+h[t]}break}}}else{var r;if(g.tooltipAxes=="both"||g.tooltipAxes=="xy"){r=b.jqplot.sprintf(g.tooltipFormatString,j.data[0])+g.tooltipSeparator+b.jqplot.sprintf(g.tooltipFormatString,j.data[1])}else{if(g.tooltipAxes=="yx"){r=b.jqplot.sprintf(g.tooltipFormatString,j.data[1])+g.tooltipSeparator+b.jqplot.sprintf(g.tooltipFormatString,j.data[0])}else{if(g.tooltipAxes=="x"){r=b.jqplot.sprintf(g.tooltipFormatString,j.data[0])}else{if(g.tooltipAxes=="y"){r=b.jqplot.sprintf(g.tooltipFormatString,j.data[1])}}}}}v.html(r);var u={x:j.gridData[0],y:j.gridData[1]};var p=0;var f=0.707;if(m.markerRenderer.show==true){p=(m.markerRenderer.size+g.sizeAdjust)/2}switch(g.tooltipLocation){case"nw":var l=u.x+s._gridPadding.left-v.outerWidth(true)-g.tooltipOffset-f*p;var k=u.y+s._gridPadding.top-g.tooltipOffset-v.outerHeight(true)-f*p;break;case"n":var l=u.x+s._gridPadding.left-v.outerWidth(true)/2;var k=u.y+s._gridPadding.top-g.tooltipOffset-v.outerHeight(true)-p;break;case"ne":var l=u.x+s._gridPadding.left+g.tooltipOffset+f*p;var k=u.y+s._gridPadding.top-g.tooltipOffset-v.outerHeight(true)-f*p;break;case"e":var l=u.x+s._gridPadding.left+g.tooltipOffset+p;var k=u.y+s._gridPadding.top-v.outerHeight(true)/2;break;case"se":var l=u.x+s._gridPadding.left+g.tooltipOffset+f*p;var k=u.y+s._gridPadding.top+g.tooltipOffset+f*p;break;case"s":var l=u.x+s._gridPadding.left-v.outerWidth(true)/2;var k=u.y+s._gridPadding.top+g.tooltipOffset+p;break;case"sw":var l=u.x+s._gridPadding.left-v.outerWidth(true)-g.tooltipOffset-f*p;var k=u.y+s._gridPadding.top+g.tooltipOffset+f*p;break;case"w":var l=u.x+s._gridPadding.left-v.outerWidth(true)-g.tooltipOffset-p;var k=u.y+s._gridPadding.top-v.outerHeight(true)/2;break;default:var l=u.x+s._gridPadding.left-v.outerWidth(true)-g.tooltipOffset-f*p;var k=u.y+s._gridPadding.top-g.tooltipOffset-v.outerHeight(true)-f*p;break}v.css("left",l);v.css("top",k);if(g.fadeTooltip){v.stop(true,true).fadeIn(g.tooltipFadeSpeed)}else{v.show()}}function c(h,g,k,j,i){var e=i.plugins.highlighter;var l=i.plugins.cursor;if(e.show){if(j==null&&e.isHighlighting){var f=e.highlightCanvas._ctx;f.clearRect(0,0,f.canvas.width,f.canvas.height);if(e.fadeTooltip){e._tooltipElem.fadeOut(e.tooltipFadeSpeed)}else{e._tooltipElem.hide()}if(e.bringSeriesToFront){i.restorePreviousSeriesOrder()}e.isHighlighting=false}if(j!=null&&i.series[j.seriesIndex].showHighlight&&!e.isHighlighting){e.isHighlighting=true;if(e.showMarker){a(i,j)}if(e.showTooltip&&(!l||!l._zoom.started)){d(i,i.series[j.seriesIndex],j)}if(e.bringSeriesToFront){i.moveSeriesToFront(j.seriesIndex)}}}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.json2.js.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
/*
    2010-11-01 Chris Leonello
    
    Slightly modified version of the original json2.js to put JSON
    functions under the $.jqplot namespace.
    
    licensing and orignal comments follow:
    
    http://www.JSON.org/json2.js
    2010-08-25
    
    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html


    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.


    This file creates a global JSON object containing two methods: stringify
    and parse.

        $.jqplot.JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array of strings.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or '&nbsp;'),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the value

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 ? '0' + n : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array of strings, then it will be
            used to select the members to be serialized. It filters the results
            such that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            $.jqplot.JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = $.jqplot.JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });
            // text is '["Date(---current time---)"]'


        $.jqplot.JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = $.jqplot.JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = $.jqplot.JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.
*/

(function($) {

    $.jqplot.JSON = window.JSON;

    if (!window.JSON) {
        $.jqplot.JSON = {};
    }
    
    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function (key) {

            return isFinite(this.valueOf()) ?
                   this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z' : null;
        };

        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;


    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }


    function str(key, holder) {

// Produce a string from holder[key].

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

// What happens next depends on the value's type.

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

            return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

        case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

            if (!value) {
                return 'null';
            }

// Make an array to hold the partial results of stringifying this object value.

            gap += indent;
            partial = [];

// Is the value an array?

            if (Object.prototype.toString.apply(value) === '[object Array]') {

// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

// If the replacer is an array, use it to select the members to be stringified.

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

// Otherwise, iterate through all of the keys in the object.

                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

// If the JSON object does not yet have a stringify method, give it one.

    if (typeof $.jqplot.JSON.stringify !== 'function') {
        $.jqplot.JSON.stringify = function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

            var i;
            gap = '';
            indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

// If the space parameter is a string, it will be used as the indent string.

            } else if (typeof space === 'string') {
                indent = space;
            }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('$.jqplot.JSON.stringify');
            }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

            return str('', {'': value});
        };
    }


// If the JSON object does not yet have a parse method, give it one.

    if (typeof $.jqplot.JSON.parse !== 'function') {
        $.jqplot.JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

            text = String(text);
            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }

// If the text is not JSON parseable, then a SyntaxError is thrown.

            throw new SyntaxError('$.jqplot.JSON.parse');
        };
    }
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.json2.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function($){$.jqplot.JSON=window.JSON;if(!window.JSON){$.jqplot.JSON={}}function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof $.jqplot.JSON.stringify!=="function"){$.jqplot.JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("$.jqplot.JSON.stringify")}return str("",{"":value})}}if(typeof $.jqplot.JSON.parse!=="function"){$.jqplot.JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("$.jqplot.JSON.parse")}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.logAxisRenderer.js.





































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */ 
(function($) {
    /**
    *  class: $.jqplot.LogAxisRenderer
    *  A plugin for a jqPlot to render a logarithmic axis.
    * 
    *  To use this renderer, include the plugin in your source
    *  > <script type="text/javascript" language="javascript" src="plugins/jqplot.logAxisRenderer.js"></script>
    *  
    *  and supply the appropriate options to your plot
    *  
    *  > {axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}
    **/ 
    $.jqplot.LogAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
        // prop: axisDefaults
        // Default properties which will be applied directly to the series.
        //
        // Group: Properties
        //
        // Properties
        //
        /// base - the logarithmic base, commonly 2, 10 or Math.E
        // tickDistribution - 'even' or 'power'.  'even' gives equal pixel
        // spacing of the ticks on the plot.  'power' gives ticks in powers
        // of 10.
        this.axisDefaults = {
            base : 10,
            tickDistribution :'even'
        };
    };
    
    $.jqplot.LogAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.LogAxisRenderer.prototype.constructor = $.jqplot.LogAxisRenderer;
    
    $.jqplot.LogAxisRenderer.prototype.init = function(options) {
        // prop: tickRenderer
        // A class of a rendering engine for creating the ticks labels displayed on the plot, 
        // See <$.jqplot.AxisTickRenderer>.
        // this.tickRenderer = $.jqplot.AxisTickRenderer;
        // this.labelRenderer = $.jqplot.AxisLabelRenderer;
        $.extend(true, this.renderer, options);
        for (var d in this.renderer.axisDefaults) {
            if (this[d] == null) {
                this[d] = this.renderer.axisDefaults[d];
            }
        }
        var db = this._dataBounds;
        // Go through all the series attached to this axis and find
        // the min/max bounds for this axis.
        for (var i=0; i<this._series.length; i++) {
            var s = this._series[i];
            var d = s.data;
            
            for (var j=0; j<d.length; j++) { 
                if (this.name == 'xaxis' || this.name == 'x2axis') {
                    if (d[j][0] > db.max || db.max == null) {
                        db.max = d[j][0];
                    }
                    if (d[j][0] > db.max || db.max == null) {
                        db.max = d[j][0];
                    }
                }              
                else {
                    if (d[j][1] < db.min || db.min == null) {
                        db.min = d[j][1];
                    }
                    if (d[j][1] > db.max || db.max == null) {
                        db.max = d[j][1];
                    }
                }              
            }
        }
    };
    
    $.jqplot.LogAxisRenderer.prototype.createTicks = function() {
        // we're are operating on an axis here
        var ticks = this._ticks;
        var userTicks = this.ticks;
        var name = this.name;
        var db = this._dataBounds;
        var dim, interval;
        var min, max;
        var pos1, pos2;
        var tt, i;

        // if we already have ticks, use them.
        // ticks must be in order of increasing value.
        if (userTicks.length) {
            // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
            for (i=0; i<userTicks.length; i++){
                var ut = userTicks[i];
                var t = new this.tickRenderer(this.tickOptions);
                if (ut.constructor == Array) {
                    t.value = ut[0];
                    t.label = ut[1];
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(ut[0], this.name);
                    this._ticks.push(t);
                }
                
                else {
                    t.value = ut;
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(ut, this.name);
                    this._ticks.push(t);
                }
            }
            this.numberTicks = userTicks.length;
            this.min = this._ticks[0].value;
            this.max = this._ticks[this.numberTicks-1].value;
        }
        
        // we don't have any ticks yet, let's make some!
        else {
            if (name == 'xaxis' || name == 'x2axis') {
                dim = this._plotDimensions.width;
            }
            else {
                dim = this._plotDimensions.height;
            }
        
            min = ((this.min != null) ? this.min : db.min);
            max = ((this.max != null) ? this.max : db.max);
            
            // if min and max are same, space them out a bit
            if (min == max) {
                var adj = 0.05;
                min = min*(1-adj);
                max = max*(1+adj);
            }
            
            // perform some checks
            if (this.min != null && this.min <= 0) {
                throw('log axis minimum must be greater than 0');
            }
            if (this.max != null && this.max <= 0) {
                throw('log axis maximum must be greater than 0');
            }
            // if (this.pad >1.99) this.pad = 1.99;
            var range = max - min;
            var rmin, rmax;

            if (this.tickDistribution == 'even') {                    
                rmin = (this.min != null) ? this.min : min - min*((this.padMin-1)/2);
                rmax = (this.max != null) ? this.max : max + max*((this.padMax-1)/2);
                this.min = rmin;
                this.max = rmax;
                range = this.max - this.min;            
        
                if (this.numberTicks == null){
                    if (dim > 100) {
                        this.numberTicks = parseInt(3+(dim-100)/75, 10);
                    }
                    else {
                        this.numberTicks = 2;
                    }
                }
    
                var u = Math.pow(this.base, (1/(this.numberTicks-1)*Math.log(this.max/this.min)/Math.log(this.base)));
                for (var i=0; i<this.numberTicks; i++){
                    tt = this.min * Math.pow(u, i);
                    var t = new this.tickRenderer(this.tickOptions);
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(tt, this.name);
                    this._ticks.push(t);
                }
                
            }
            
            else if (this.tickDistribution == 'power'){
                // for power distribution, open up range to get a nice power of axis.renderer.base.
                // power distribution won't respect the user's min/max settings.
                rmin = Math.pow(this.base, Math.ceil(Math.log(min*(2-this.padMin))/Math.log(this.base))-1);
                rmax = Math.pow(this.base, Math.floor(Math.log(max*this.padMax)/Math.log(this.base))+1);
                this.min = rmin;
                this.max = rmax;
                range = this.max - this.min;            
        
                var fittedTicks = 0;
                var minorTicks = 0;
                if (this.numberTicks == null){
                    if (dim > 100) {
                        this.numberTicks = Math.round(Math.log(this.max/this.min)/Math.log(this.base) + 1);
                        if (this.numberTicks < 2) {
                            this.numberTicks = 2;
                        }
                        fittedTicks = parseInt(3+(dim-100)/75, 10);
                    }
                    else {
                        this.numberTicks = 2;
                        fittedTicks = 2;
                    }
                    // if we don't have enough ticks, add some intermediate ticks
                    // how many to have between major ticks.
                    if (this.numberTicks < fittedTicks-1) {
                        minorTicks = Math.floor(fittedTicks/this.numberTicks);
                    }
                }

                for (var i=0; i<this.numberTicks; i++){
                    tt = Math.pow(this.base, i - this.numberTicks + 1) * this.max;
                    var t = new this.tickRenderer(this.tickOptions);
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(tt, this.name);
                    this._ticks.push(t);
            
                    if (minorTicks && i<this.numberTicks-1) {
                        var tt1 = Math.pow(this.base, i - this.numberTicks + 2) * this.max;
                        var spread = tt1 - tt;
                        var interval = tt1 / (minorTicks+1);
                        for (var j=minorTicks-1; j>=0; j--) {
                            var val = tt1-interval*(j+1);
                            var t = new this.tickRenderer(this.tickOptions);
                            if (!this.showTicks) {
                                t.showLabel = false;
                                t.showMark = false;
                            }
                            else if (!this.showTickMarks) {
                                t.showMark = false;
                            }
                            t.setTick(val, this.name);
                            this._ticks.push(t);
                        }
                    }       
                }                    
            }       
        }
    };
    
    $.jqplot.LogAxisRenderer.prototype.pack = function(pos, offsets) {
        var lb = parseInt(this.base, 10);
        var ticks = this._ticks;
        var trans = function (v) { return Math.log(v)/Math.log(lb); };
        var invtrans = function (v) { return Math.pow(Math.E, (Math.log(lb)*v)); };
        max = trans(this.max);
        min = trans(this.min);
        var offmax = offsets.max;
        var offmin = offsets.min;
        var lshow = (this._label == null) ? false : this._label.show;
        
        for (var p in pos) {
            this._elem.css(p, pos[p]);
        }
        
        this._offsets = offsets;
        // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
        var pixellength = offmax - offmin;
        var unitlength = max - min;
        
        // point to unit and unit to point conversions references to Plot DOM element top left corner.
        this.p2u = function(p){
            return invtrans((p - offmin) * unitlength / pixellength + min);
        };
        
        this.u2p = function(u){
            return (trans(u) - min) * pixellength / unitlength + offmin;
        };
        
        if (this.name == 'xaxis' || this.name == 'x2axis'){
            this.series_u2p = function(u){
                return (trans(u) - min) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return invtrans(p * unitlength / pixellength + min);
            };
        }
        // yaxis is max at top of canvas.
        else {
            this.series_u2p = function(u){
                return (trans(u) - max) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return invtrans(p * unitlength / pixellength + max);
            };
        }
        
        if (this.show) {
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {
                        var shim;
                        
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                    if (t.angle < 0) {
                                        shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    }
                                    // position at start
                                    else {
                                        shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'end':
                                    shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                case 'start':
                                    shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    break;
                                case 'middle':
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                default:
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getWidth()/2;
                        }
                        // var shim = t.getWidth()/2;
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('left', val);
                        t.pack();
                    }
                }
                if (lshow) {
                    var w = this._label._elem.outerWidth(true);
                    this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
                    if (this.name == 'xaxis') {
                        this._label._elem.css('bottom', '0px');
                    }
                    else {
                        this._label._elem.css('top', '0px');
                    }
                    this._label.pack();
                }
            }
            else {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {                        
                        var shim;
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                case 'end':
                                    if (t.angle < 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'start':
                                    if (t.angle > 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'middle':
                                    // if (t.angle > 0) {
                                    //     shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    // }
                                    // else {
                                    //     shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    // }
                                    shim = -t.getHeight()/2;
                                    break;
                                default:
                                    shim = -t.getHeight()/2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getHeight()/2;
                        }
                        
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('top', val);
                        t.pack();
                    }
                }
                if (lshow) {
                    var h = this._label._elem.outerHeight(true);
                    this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
                    if (this.name == 'yaxis') {
                        this._label._elem.css('left', '0px');
                    }
                    else {
                        this._label._elem.css('right', '0px');
                    }   
                    this._label.pack();
                }
            }
        }        
    };
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.logAxisRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.LogAxisRenderer=function(){a.jqplot.LinearAxisRenderer.call(this);this.axisDefaults={base:10,tickDistribution:"even"}};a.jqplot.LogAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.LogAxisRenderer.prototype.constructor=a.jqplot.LogAxisRenderer;a.jqplot.LogAxisRenderer.prototype.init=function(e){a.extend(true,this.renderer,e);for(var h in this.renderer.axisDefaults){if(this[h]==null){this[h]=this.renderer.axisDefaults[h]}}var b=this._dataBounds;for(var f=0;f<this._series.length;f++){var g=this._series[f];var h=g.data;for(var c=0;c<h.length;c++){if(this.name=="xaxis"||this.name=="x2axis"){if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]<b.min||b.min==null){b.min=h[c][1]}if(h[c][1]>b.max||b.max==null){b.max=h[c][1]}}}}};a.jqplot.LogAxisRenderer.prototype.createTicks=function(){var A=this._ticks;var x=this.ticks;var D=this.name;var z=this._dataBounds;var s,y;var o,v;var e,d;var b,w;if(x.length){for(w=0;w<x.length;w++){var f=x[w];var k=new this.tickRenderer(this.tickOptions);if(f.constructor==Array){k.value=f[0];k.label=f[1];if(!this.showTicks){k.showLabel=false;k.showMark=false}else{if(!this.showTickMarks){k.showMark=false}}k.setTick(f[0],this.name);this._ticks.push(k)}else{k.value=f;if(!this.showTicks){k.showLabel=false;k.showMark=false}else{if(!this.showTickMarks){k.showMark=false}}k.setTick(f,this.name);this._ticks.push(k)}}this.numberTicks=x.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value}else{if(D=="xaxis"||D=="x2axis"){s=this._plotDimensions.width}else{s=this._plotDimensions.height}o=((this.min!=null)?this.min:z.min);v=((this.max!=null)?this.max:z.max);if(o==v){var g=0.05;o=o*(1-g);v=v*(1+g)}if(this.min!=null&&this.min<=0){throw ("log axis minimum must be greater than 0")}if(this.max!=null&&this.max<=0){throw ("log axis maximum must be greater than 0")}var l=v-o;var n,r;if(this.tickDistribution=="even"){n=(this.min!=null)?this.min:o-o*((this.padMin-1)/2);r=(this.max!=null)?this.max:v+v*((this.padMax-1)/2);this.min=n;this.max=r;l=this.max-this.min;if(this.numberTicks==null){if(s>100){this.numberTicks=parseInt(3+(s-100)/75,10)}else{this.numberTicks=2}}var h=Math.pow(this.base,(1/(this.numberTicks-1)*Math.log(this.max/this.min)/Math.log(this.base)));for(var w=0;w<this.numberTicks;w++){b=this.min*Math.pow(h,w);var k=new this.tickRenderer(this.tickOptions);if(!this.showTicks){k.showLabel=false;k.showMark=false}else{if(!this.showTickMarks){k.showMark=false}}k.setTick(b,this.name);this._ticks.push(k)}}else{if(this.tickDistribution=="power"){n=Math.pow(this.base,Math.ceil(Math.log(o*(2-this.padMin))/Math.log(this.base))-1);r=Math.pow(this.base,Math.floor(Math.log(v*this.padMax)/Math.log(this.base))+1);this.min=n;this.max=r;l=this.max-this.min;var q=0;var c=0;if(this.numberTicks==null){if(s>100){this.numberTicks=Math.round(Math.log(this.max/this.min)/Math.log(this.base)+1);if(this.numberTicks<2){this.numberTicks=2}q=parseInt(3+(s-100)/75,10)}else{this.numberTicks=2;q=2}if(this.numberTicks<q-1){c=Math.floor(q/this.numberTicks)}}for(var w=0;w<this.numberTicks;w++){b=Math.pow(this.base,w-this.numberTicks+1)*this.max;var k=new this.tickRenderer(this.tickOptions);if(!this.showTicks){k.showLabel=false;k.showMark=false}else{if(!this.showTickMarks){k.showMark=false}}k.setTick(b,this.name);this._ticks.push(k);if(c&&w<this.numberTicks-1){var m=Math.pow(this.base,w-this.numberTicks+2)*this.max;var B=m-b;var y=m/(c+1);for(var p=c-1;p>=0;p--){var C=m-y*(p+1);var k=new this.tickRenderer(this.tickOptions);if(!this.showTicks){k.showLabel=false;k.showMark=false}else{if(!this.showTickMarks){k.showMark=false}}k.setTick(C,this.name);this._ticks.push(k)}}}}}}};a.jqplot.LogAxisRenderer.prototype.pack=function(n,j){var d=parseInt(this.base,10);var q=this._ticks;var v=function(h){return Math.log(h)/Math.log(d)};var b=function(h){return Math.pow(Math.E,(Math.log(d)*h))};max=v(this.max);min=v(this.min);var g=j.max;var u=j.min;var l=(this._label==null)?false:this._label.show;for(var c in n){this._elem.css(c,n[c])}this._offsets=j;var f=g-u;var s=max-min;this.p2u=function(h){return b((h-u)*s/f+min)};this.u2p=function(h){return(v(h)-min)*f/s+u};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(v(h)-min)*f/s};this.series_p2u=function(h){return b(h*s/f+min)}}else{this.series_u2p=function(h){return(v(h)-max)*f/s};this.series_p2u=function(h){return b(h*s/f+max)}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(i=0;i<q.length;i++){var r=q[i];if(r.show&&r.showLabel){var k;if(r.constructor==a.jqplot.CanvasAxisTickRenderer&&r.angle){switch(r.labelPosition){case"auto":if(r.angle<0){k=-r.getWidth()+r._textRenderer.height*Math.sin(-r._textRenderer.angle)/2}else{k=-r._textRenderer.height*Math.sin(r._textRenderer.angle)/2}break;case"end":k=-r.getWidth()+r._textRenderer.height*Math.sin(-r._textRenderer.angle)/2;break;case"start":k=-r._textRenderer.height*Math.sin(r._textRenderer.angle)/2;break;case"middle":k=-r.getWidth()/2+r._textRenderer.height*Math.sin(-r._textRenderer.angle)/2;break;default:k=-r.getWidth()/2+r._textRenderer.height*Math.sin(-r._textRenderer.angle)/2;break}}else{k=-r.getWidth()/2}var e=this.u2p(r.value)+k+"px";r._elem.css("left",e);r.pack()}}if(l){var o=this._label._elem.outerWidth(true);this._label._elem.css("left",u+f/2-o/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(i=0;i<q.length;i++){var r=q[i];if(r.show&&r.showLabel){var k;if(r.constructor==a.jqplot.CanvasAxisTickRenderer&&r.angle){switch(r.labelPosition){case"auto":case"end":if(r.angle<0){k=-r._textRenderer.height*Math.cos(-r._textRenderer.angle)/2}else{k=-r.getHeight()+r._textRenderer.height*Math.cos(r._textRenderer.angle)/2}break;case"start":if(r.angle>0){k=-r._textRenderer.height*Math.cos(-r._textRenderer.angle)/2}else{k=-r.getHeight()+r._textRenderer.height*Math.cos(r._textRenderer.angle)/2}break;case"middle":k=-r.getHeight()/2;break;default:k=-r.getHeight()/2;break}}else{k=-r.getHeight()/2}var e=this.u2p(r.value)+k+"px";r._elem.css("top",e);r.pack()}}if(l){var m=this._label._elem.outerHeight(true);this._label._elem.css("top",g-f/2-m/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.mekkoAxisRenderer.js.







































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    // class: $.jqplot.MekkoAxisRenderer
    // An axis renderer for a Mekko chart.
    // Should be used with a Mekko chart where the mekkoRenderer is used on the series.
    // Displays the Y axis as a range from 0 to 1 (0 to 100%) and the x axis with a tick
    // for each series scaled to the sum of all the y values.
    $.jqplot.MekkoAxisRenderer = function() {
    };
    
    // called with scope of axis object.
    $.jqplot.MekkoAxisRenderer.prototype.init = function(options){
        // prop: tickMode
        // How to space the ticks on the axis.
        // 'bar' will place a tick at the width of each bar.  
        // This is the default for the x axis.
        // 'even' will place ticks at even intervals.  This is
        // the default for x2 axis and y axis.  y axis cannot be changed.
        this.tickMode;
        // prop: barLabelRenderer
        // renderer to use to draw labels under each bar.
        this.barLabelRenderer = $.jqplot.AxisLabelRenderer;
        // prop: barLabels
        // array of labels to put under each bar.
        this.barLabels = this.barLabels || [];
        // prop: barLabelOptions
        // options object to pass to the bar label renderer.
        this.barLabelOptions = {};
        this.tickOptions = $.extend(true, {showGridline:false}, this.tickOptions);
        this._barLabels = [];
        $.extend(true, this, options);
        if (this.name == 'yaxis') {
            this.tickOptions.formatString = this.tickOptions.formatString || "%d\%";
        }
        var db = this._dataBounds;
        db.min = 0;
        // for y axes, scale always go from 0 to 1 (0 to 100%)
        if (this.name == 'yaxis' || this.name == 'y2axis') {
            db.max = 100;
            this.tickMode = 'even';
        }
        // For x axes, scale goes from 0 to sum of all y values.
        else if (this.name == 'xaxis'){
            this.tickMode = (this.tickMode == null) ? 'bar' : this.tickMode;
            for (var i=0; i<this._series.length; i++) {
                db.max += this._series[i]._sumy;
            }
        }
        else if (this.name == 'x2axis'){
            this.tickMode = (this.tickMode == null) ? 'even' : this.tickMode;
            for (var i=0; i<this._series.length; i++) {
                db.max += this._series[i]._sumy;
            }
        }
    };
    
    // called with scope of axis
    $.jqplot.MekkoAxisRenderer.prototype.draw = function(ctx) {
        if (this.show) {
            // populate the axis label and value properties.
            // createTicks is a method on the renderer, but
            // call it within the scope of the axis.
            this.renderer.createTicks.call(this);
            // fill a div with axes labels in the right direction.
            // Need to pregenerate each axis to get it's bounds and
            // position it and the labels correctly on the plot.
            var dim=0;
            var temp;
            
            this._elem = $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');
            
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                this._elem.width(this._plotDimensions.width);
            }
            else {
                this._elem.height(this._plotDimensions.height);
            }
            
            // draw the axis label
            // create a _label object.
            this.labelOptions.axis = this.name;
            this._label = new this.labelRenderer(this.labelOptions);
            if (this._label.show) {
                var elem = this._label.draw(ctx);
                elem.appendTo(this._elem);
            }
            
            var t, tick, elem;
            if (this.showTicks) {
                t = this._ticks;
                for (var i=0; i<t.length; i++) {
                    tick = t[i];
                    if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
                        elem = tick.draw(ctx);
                        elem.appendTo(this._elem);
                    }
                }
            }
            
            // draw the series labels
            for (i=0; i<this.barLabels.length; i++) {
                this.barLabelOptions.axis = this.name;
                this.barLabelOptions.label = this.barLabels[i];
                this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));
                if (this.tickMode != 'bar') {
                    this._barLabels[i].show = false;
                }
                if (this._barLabels[i].show) {
                    var elem = this._barLabels[i].draw(ctx);
                    elem.removeClass('jqplot-'+this.name+'-label');
                    elem.addClass('jqplot-'+this.name+'-tick');
                    elem.addClass('jqplot-mekko-barLabel');
                    elem.appendTo(this._elem);
                }   
            }
            
        }
        return this._elem;
    };
    
    // called with scope of an axis
    $.jqplot.MekkoAxisRenderer.prototype.reset = function() {
        this.min = this._min;
        this.max = this._max;
        this.tickInterval = this._tickInterval;
        this.numberTicks = this._numberTicks;
        // this._ticks = this.__ticks;
    };
    
    // called with scope of axis
    $.jqplot.MekkoAxisRenderer.prototype.set = function() { 
        var dim = 0;
        var temp;
        var w = 0;
        var h = 0;
        var lshow = (this._label == null) ? false : this._label.show;
        if (this.show && this.showTicks) {
            var t = this._ticks;
            for (var i=0; i<t.length; i++) {
                var tick = t[i];
                if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
                    if (this.name == 'xaxis' || this.name == 'x2axis') {
                        temp = tick._elem.outerHeight(true);
                    }
                    else {
                        temp = tick._elem.outerWidth(true);
                    }
                    if (temp > dim) {
                        dim = temp;
                    }
                }
            }
            
            if (lshow) {
                w = this._label._elem.outerWidth(true);
                h = this._label._elem.outerHeight(true); 
            }
            if (this.name == 'xaxis') {
                dim = dim + h;
                this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
            }
            else if (this.name == 'x2axis') {
                dim = dim + h;
                this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
            }
            else if (this.name == 'yaxis') {
                dim = dim + w;
                this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
                if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
                    this._label._elem.css('width', w+'px');
                }
            }
            else {
                dim = dim + w;
                this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
                if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
                    this._label._elem.css('width', w+'px');
                }
            }
        }  
    };    
    
    // called with scope of axis
    $.jqplot.MekkoAxisRenderer.prototype.createTicks = function() {
        // we're are operating on an axis here
        var ticks = this._ticks;
        var userTicks = this.ticks;
        var name = this.name;
        // databounds were set on axis initialization.
        var db = this._dataBounds;
        var dim, interval;
        var min, max;
        var pos1, pos2;
        var t, tt, i, j;
        
        // if we already have ticks, use them.
        // ticks must be in order of increasing value.
        
        if (userTicks.length) {
            // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
            for (i=0; i<userTicks.length; i++){
                var ut = userTicks[i];
                var t = new this.tickRenderer(this.tickOptions);
                if (ut.constructor == Array) {
                    t.value = ut[0];
                    t.label = ut[1];
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(ut[0], this.name);
                    this._ticks.push(t);
                }
                
                else {
                    t.value = ut;
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(ut, this.name);
                    this._ticks.push(t);
                }
            }
            this.numberTicks = userTicks.length;
            this.min = this._ticks[0].value;
            this.max = this._ticks[this.numberTicks-1].value;
            this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
        }
        
        // we don't have any ticks yet, let's make some!
        else {
            if (name == 'xaxis' || name == 'x2axis') {
                dim = this._plotDimensions.width;
            }
            else {
                dim = this._plotDimensions.height;
            }
            
            // if min, max and number of ticks specified, user can't specify interval.
            if (this.min != null && this.max != null && this.numberTicks != null) {
                this.tickInterval = null;
            }
        
            min = (this.min != null) ? this.min : db.min;
            max = (this.max != null) ? this.max : db.max;
            
            // if min and max are same, space them out a bit.+
            if (min == max) {
                var adj = 0.05;
                if (min > 0) {
                    adj = Math.max(Math.log(min)/Math.LN10, 0.05);
                }
                min -= adj;
                max += adj;
            }

            var range = max - min;
            var rmin, rmax;
            var temp, prev, curr;
            var ynumticks = [3,5,6,11,21];
            
            // yaxis divide ticks in nice intervals from 0 to 1.
            if (this.name == 'yaxis' || this.name == 'y2axis') { 
                this.min = 0;
                this.max = 100; 
                // user didn't specify number of ticks.
                if (!this.numberTicks){
                    if (this.tickInterval) {
                        this.numberTicks = 3 + Math.ceil(range / this.tickInterval);
                    }
                    else {
                        temp = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
                        for (i=0; i<ynumticks.length; i++) {
                            curr = temp/ynumticks[i];
                            if (curr == 1) {
                                this.numberTicks = ynumticks[i];
                                break;
                            }
                            else if (curr > 1) {
                                prev = curr;
                                continue;
                            }
                            else if (curr < 1) {
                                // was prev or is curr closer to one?
                                if (Math.abs(prev - 1) < Math.abs(curr - 1)) {
                                    this.numberTicks = ynumticks[i-1];
                                    break;
                                }
                                else {
                                    this.numberTicks = ynumticks[i];
                                    break;
                                }
                            }
                            else if (i == ynumticks.length -1) {
                                this.numberTicks = ynumticks[i];
                            }
                        }
                        this.tickInterval = range / (this.numberTicks - 1);
                    }
                }
                
                // user did specify number of ticks.
                else {
                    this.tickInterval = range / (this.numberTicks - 1);
                }

                for (var i=0; i<this.numberTicks; i++){
                    tt = this.min + i * this.tickInterval;
                    t = new this.tickRenderer(this.tickOptions);
                    // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(tt, this.name);
                    this._ticks.push(t);
                }
            }
            
            // for x axes, have number ot ticks equal to number of series and ticks placed
            // at sum of y values for each series.
            else if (this.tickMode == 'bar') {
                this.min = 0;
                this.numberTicks = this._series.length + 1;
                t = new this.tickRenderer(this.tickOptions);
                if (!this.showTicks) {
                    t.showLabel = false;
                    t.showMark = false;
                }
                else if (!this.showTickMarks) {
                    t.showMark = false;
                }
                t.setTick(0, this.name);
                this._ticks.push(t);
                
                temp = 0;

                for (i=1; i<this.numberTicks; i++){
                    temp += this._series[i-1]._sumy;
                    t = new this.tickRenderer(this.tickOptions);
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(temp, this.name);
                    this._ticks.push(t);
                }
                this.max = this.max || temp;
                
                // if user specified a max and it is greater than sum, add a tick
                if (this.max > temp) {
                     t = new this.tickRenderer(this.tickOptions);
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(this.max, this.name);
                    this._ticks.push(t);
                    
                }
            }
            
            else if (this.tickMode == 'even') {
                this.min = 0;
                this.max = this.max || db.max;
                // get a desired number of ticks
                var nt = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
                range = this.max - this.min;
                this.numberTicks = nt;
                this.tickInterval = range / (this.numberTicks - 1);

                for (i=0; i<this.numberTicks; i++){
                    tt = this.min + i * this.tickInterval;
                    t = new this.tickRenderer(this.tickOptions);
                    // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
                    if (!this.showTicks) {
                        t.showLabel = false;
                        t.showMark = false;
                    }
                    else if (!this.showTickMarks) {
                        t.showMark = false;
                    }
                    t.setTick(tt, this.name);
                    this._ticks.push(t);
                }
                
            }
        }
    };
    
    // called with scope of axis
    $.jqplot.MekkoAxisRenderer.prototype.pack = function(pos, offsets) {
        var ticks = this._ticks;
        var max = this.max;
        var min = this.min;
        var offmax = offsets.max;
        var offmin = offsets.min;
        var lshow = (this._label == null) ? false : this._label.show;
        
        for (var p in pos) {
            this._elem.css(p, pos[p]);
        }
        
        this._offsets = offsets;
        // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
        var pixellength = offmax - offmin;
        var unitlength = max - min;
        
        // point to unit and unit to point conversions references to Plot DOM element top left corner.
        this.p2u = function(p){
            return (p - offmin) * unitlength / pixellength + min;
        };
        
        this.u2p = function(u){
            return (u - min) * pixellength / unitlength + offmin;
        };
                
        if (this.name == 'xaxis' || this.name == 'x2axis'){
            this.series_u2p = function(u){
                return (u - min) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return p * unitlength / pixellength + min;
            };
        }
        
        else {
            this.series_u2p = function(u){
                return (u - max) * pixellength / unitlength;
            };
            this.series_p2u = function(p){
                return p * unitlength / pixellength + max;
            };
        }
        
        if (this.show) {
            if (this.name == 'xaxis' || this.name == 'x2axis') {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {
                        var shim;
                        
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            // will need to adjust auto positioning based on which axis this is.
                            var temp = (this.name == 'xaxis') ? 1 : -1;
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                    if (temp * t.angle < 0) {
                                        shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    }
                                    // position at start
                                    else {
                                        shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'end':
                                    shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                case 'start':
                                    shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
                                    break;
                                case 'middle':
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                                default:
                                    shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getWidth()/2;
                        }
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('left', val);
                        t.pack();
                    }
                }
                var w;
                if (lshow) {
                    w = this._label._elem.outerWidth(true);
                    this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
                    if (this.name == 'xaxis') {
                        this._label._elem.css('bottom', '0px');
                    }
                    else {
                        this._label._elem.css('top', '0px');
                    }
                    this._label.pack();
                }
                // now show the labels under the bars.
                var b, l, r;
                for (i=0; i<this.barLabels.length; i++) {
                    b = this._barLabels[i];
                    if (b.show) {
                        w = b.getWidth();
                        l = this._ticks[i].getLeft() + this._ticks[i].getWidth();
                        r = this._ticks[i+1].getLeft();
                        b._elem.css('left', (r+l-w)/2+'px');
                        b._elem.css('top', this._ticks[i]._elem.css('top'));
                        b.pack();
                    }
                }
            }
            else {
                for (i=0; i<ticks.length; i++) {
                    var t = ticks[i];
                    if (t.show && t.showLabel) {                        
                        var shim;
                        if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
                            // will need to adjust auto positioning based on which axis this is.
                            var temp = (this.name == 'yaxis') ? 1 : -1;
                            switch (t.labelPosition) {
                                case 'auto':
                                    // position at end
                                case 'end':
                                    if (temp * t.angle < 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'start':
                                    if (t.angle > 0) {
                                        shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
                                    }
                                    else {
                                        shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
                                    }
                                    break;
                                case 'middle':
                                    shim = -t.getHeight()/2;
                                    break;
                                default:
                                    shim = -t.getHeight()/2;
                                    break;
                            }
                        }
                        else {
                            shim = -t.getHeight()/2;
                        }
                        
                        var val = this.u2p(t.value) + shim + 'px';
                        t._elem.css('top', val);
                        t.pack();
                    }
                }
                if (lshow) {
                    var h = this._label._elem.outerHeight(true);
                    this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
                    if (this.name == 'yaxis') {
                        this._label._elem.css('left', '0px');
                    }
                    else {
                        this._label._elem.css('right', '0px');
                    }   
                    this._label.pack();
                }
            }
        }
    };
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.mekkoAxisRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.MekkoAxisRenderer=function(){};a.jqplot.MekkoAxisRenderer.prototype.init=function(c){this.tickMode;this.barLabelRenderer=a.jqplot.AxisLabelRenderer;this.barLabels=this.barLabels||[];this.barLabelOptions={};this.tickOptions=a.extend(true,{showGridline:false},this.tickOptions);this._barLabels=[];a.extend(true,this,c);if(this.name=="yaxis"){this.tickOptions.formatString=this.tickOptions.formatString||"%d%"}var b=this._dataBounds;b.min=0;if(this.name=="yaxis"||this.name=="y2axis"){b.max=100;this.tickMode="even"}else{if(this.name=="xaxis"){this.tickMode=(this.tickMode==null)?"bar":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}else{if(this.name=="x2axis"){this.tickMode=(this.tickMode==null)?"even":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}}}};a.jqplot.MekkoAxisRenderer.prototype.draw=function(b){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;this._elem=a('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b);g.appendTo(this._elem)}var f,e,g;if(this.showTicks){f=this._ticks;for(var d=0;d<f.length;d++){e=f[d];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){g=e.draw(b);g.appendTo(this._elem)}}}for(d=0;d<this.barLabels.length;d++){this.barLabelOptions.axis=this.name;this.barLabelOptions.label=this.barLabels[d];this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));if(this.tickMode!="bar"){this._barLabels[d].show=false}if(this._barLabels[d].show){var g=this._barLabels[d].draw(b);g.removeClass("jqplot-"+this.name+"-label");g.addClass("jqplot-"+this.name+"-tick");g.addClass("jqplot-mekko-barLabel");g.appendTo(this._elem)}}}return this._elem};a.jqplot.MekkoAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};a.jqplot.MekkoAxisRenderer.prototype.set=function(){var k=0;var d;var c=0;var j=0;var b=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var g=this._ticks;for(var f=0;f<g.length;f++){var e=g[f];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){d=e._elem.outerHeight(true)}else{d=e._elem.outerWidth(true)}if(d>k){k=d}}}if(b){c=this._label._elem.outerWidth(true);j=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){k=k+j;this._elem.css({height:k+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){k=k+j;this._elem.css({height:k+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){k=k+c;this._elem.css({width:k+"px",left:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}else{k=k+c;this._elem.css({width:k+"px",right:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}}}}};a.jqplot.MekkoAxisRenderer.prototype.createTicks=function(){var z=this._ticks;var w=this.ticks;var B=this.name;var y=this._dataBounds;var p,x;var n,r;var d,c;var h,b,s,q;if(w.length){for(s=0;s<w.length;s++){var e=w[s];var h=new this.tickRenderer(this.tickOptions);if(e.constructor==Array){h.value=e[0];h.label=e[1];if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e[0],this.name);this._ticks.push(h)}else{h.value=e;if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e,this.name);this._ticks.push(h)}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(B=="xaxis"||B=="x2axis"){p=this._plotDimensions.width}else{p=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}n=(this.min!=null)?this.min:y.min;r=(this.max!=null)?this.max:y.max;if(n==r){var g=0.05;if(n>0){g=Math.max(Math.log(n)/Math.LN10,0.05)}n-=g;r+=g}var k=r-n;var m,o;var v,l,u;var f=[3,5,6,11,21];if(this.name=="yaxis"||this.name=="y2axis"){this.min=0;this.max=100;if(!this.numberTicks){if(this.tickInterval){this.numberTicks=3+Math.ceil(k/this.tickInterval)}else{v=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);for(s=0;s<f.length;s++){u=v/f[s];if(u==1){this.numberTicks=f[s];break}else{if(u>1){l=u;continue}else{if(u<1){if(Math.abs(l-1)<Math.abs(u-1)){this.numberTicks=f[s-1];break}else{this.numberTicks=f[s];break}}else{if(s==f.length-1){this.numberTicks=f[s]}}}}}this.tickInterval=k/(this.numberTicks-1)}}else{this.tickInterval=k/(this.numberTicks-1)}for(var s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}else{if(this.tickMode=="bar"){this.min=0;this.numberTicks=this._series.length+1;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(0,this.name);this._ticks.push(h);v=0;for(s=1;s<this.numberTicks;s++){v+=this._series[s-1]._sumy;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(v,this.name);this._ticks.push(h)}this.max=this.max||v;if(this.max>v){h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(this.max,this.name);this._ticks.push(h)}}else{if(this.tickMode=="even"){this.min=0;this.max=this.max||y.max;var A=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);k=this.max-this.min;this.numberTicks=A;this.tickInterval=k/(this.numberTicks-1);for(s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}}}}};a.jqplot.MekkoAxisRenderer.prototype.pack=function(e,d){var B=this._ticks;var x=this.max;var v=this.min;var m=d.max;var j=d.min;var o=(this._label==null)?false:this._label.show;for(var s in e){this._elem.css(s,e[s])}this._offsets=d;var f=m-j;var g=x-v;this.p2u=function(b){return(b-j)*g/f+v};this.u2p=function(b){return(b-v)*f/g+j};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(b){return(b-v)*f/g};this.series_p2u=function(b){return b*g/f+v}}else{this.series_u2p=function(b){return(b-x)*f/g};this.series_p2u=function(b){return b*g/f+x}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(i=0;i<B.length;i++){var n=B[i];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var z=(this.name=="xaxis")?1:-1;switch(n.labelPosition){case"auto":if(z*n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var C=this.u2p(n.value)+c+"px";n._elem.css("left",C);n.pack()}}var k;if(o){k=this._label._elem.outerWidth(true);this._label._elem.css("left",j+f/2-k/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}var A,u,q;for(i=0;i<this.barLabels.length;i++){A=this._barLabels[i];if(A.show){k=A.getWidth();u=this._ticks[i].getLeft()+this._ticks[i].getWidth();q=this._ticks[i+1].getLeft();A._elem.css("left",(q+u-k)/2+"px");A._elem.css("top",this._ticks[i]._elem.css("top"));A.pack()}}}else{for(i=0;i<B.length;i++){var n=B[i];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var z=(this.name=="yaxis")?1:-1;switch(n.labelPosition){case"auto":case"end":if(z*n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var C=this.u2p(n.value)+c+"px";n._elem.css("top",C);n.pack()}}if(o){var y=this._label._elem.outerHeight(true);this._label._elem.css("top",m-f/2-y/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.mekkoRenderer.js.







































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.MekkoRenderer
     * Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph.
     * the <$.jqplot.MekkoAxisRenderer> should be used with mekko charts.  The mekko renderer
     * overrides the default legend renderer with it's own $.jqplot.MekkoLegendRenderer
     * which allows more flexibility to specify number of rows and columns in the legend.
     * 
     * Data is specified per bar in the chart.  You can specify data as an array of y values, or as 
     * an array of [label, value] pairs.  Note that labels are used only on the first series.  
     * Labels on subsequent series are ignored:
     * 
     * > bar1 = [['shirts', 8],['hats', 14],['shoes', 6],['gloves', 16],['dolls', 12]];
     * > bar2 = [15,6,9,13,6];
     * > bar3 = [['grumpy',4],['sneezy',2],['happy',7],['sleepy',9],['doc',7]];
     * 
     * If you want to place labels for each bar under the axis, you use the barLabels option on 
     * the axes.  The bar labels can be styled with the ".jqplot-mekko-barLabel" css class.
     * 
     * > barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
     * > axes:{xaxis:{barLabels:barLabels}}
     * 
     */
    
    
    $.jqplot.MekkoRenderer = function(){
        this.shapeRenderer = new $.jqplot.ShapeRenderer();
        // prop: borderColor
        // color of the borders between areas on the chart
        this.borderColor = null;
        // prop: showBorders
        // True to draw borders lines between areas on the chart.
        // False will draw borders lines with the same color as the area.
        this.showBorders = true;
    };
    
    // called with scope of series.
    $.jqplot.MekkoRenderer.prototype.init = function(options, plot) {
        this.fill = false;
        this.fillRect = true;
        this.strokeRect = true;
        this.shadow = false;
        // width of bar on x axis.
        this._xwidth = 0;
        this._xstart = 0;
        $.extend(true, this.renderer, options);
        // set the shape renderer options
        var opts = {lineJoin:'miter', lineCap:'butt', isarc:false, fillRect:this.fillRect, strokeRect:this.strokeRect};
        this.renderer.shapeRenderer.init(opts);
        plot.axes.x2axis._series.push(this);
    };
    
    // Method: setGridData
    // converts the user data values to grid coordinates and stores them
    // in the gridData array.  Will convert user data into appropriate
    // rectangles.
    // Called with scope of a series.
    $.jqplot.MekkoRenderer.prototype.setGridData = function(plot) {
        // recalculate the grid data
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var data = this._plotData;
        this.gridData = [];
        // figure out width on x axis.
        // this._xwidth = this._sumy / plot._sumy * this.canvas.getWidth();
        this._xwidth = xp(this._sumy) - xp(0);
        if (this.index>0) {
            this._xstart = plot.series[this.index-1]._xstart + plot.series[this.index-1]._xwidth;
        }
        var totheight = this.canvas.getHeight();
        var sumy = 0;
        var cury;
        var curheight;
        for (var i=0; i<data.length; i++) {
            if (data[i] != null) {
                sumy += data[i][1];
                cury = totheight - (sumy / this._sumy * totheight);
                curheight = data[i][1] / this._sumy * totheight;
                this.gridData.push([this._xstart, cury, this._xwidth, curheight]);
            }
        }
    };
    
    // Method: makeGridData
    // converts any arbitrary data values to grid coordinates and
    // returns them.  This method exists so that plugins can use a series'
    // linerenderer to generate grid data points without overwriting the
    // grid data associated with that series.
    // Called with scope of a series.
    $.jqplot.MekkoRenderer.prototype.makeGridData = function(data, plot) {
        // recalculate the grid data
        // figure out width on x axis.
        var xp = this._xaxis.series_u2p;
        var totheight = this.canvas.getHeight();
        var sumy = 0;
        var cury;
        var curheight;
        var gd = [];
        for (var i=0; i<data.length; i++) {
            if (data[i] != null) {
                sumy += data[i][1];
                cury = totheight - (sumy / this._sumy * totheight);
                curheight = data[i][1] / this._sumy * totheight;
                gd.push([this._xstart, cury, this._xwidth, curheight]);
            }
        }
        return gd;
    };
    

    // called within scope of series.
    $.jqplot.MekkoRenderer.prototype.draw = function(ctx, gd, options) {
        var i;
        var opts = (options != undefined) ? options : {};
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
        ctx.save();
        if (gd.length) {
            if (showLine) {
                for (i=0; i<gd.length; i++){
                    opts.fillStyle = colorGenerator.next();
                    if (this.renderer.showBorders) {
                        opts.strokeStyle = this.renderer.borderColor;
                    }
                    else {
                        opts.strokeStyle = opts.fillStyle;
                    }
                    this.renderer.shapeRenderer.draw(ctx, gd[i], opts);
                }
            }
        }
        
        ctx.restore();
    };  
    
    $.jqplot.MekkoRenderer.prototype.drawShadow = function(ctx, gd, options) {
        // This is a no-op, no shadows on mekko charts.
    };
    
    /**
     * Class: $.jqplot.MekkoLegendRenderer
     * Legend renderer used by mekko charts with options for 
     * controlling number or rows and columns as well as placement
     * outside of plot area.
     * 
     */
    $.jqplot.MekkoLegendRenderer = function(){
        //
    };
    
    $.jqplot.MekkoLegendRenderer.prototype.init = function(options) {
        // prop: numberRows
        // Maximum number of rows in the legend.  0 or null for unlimited.
        this.numberRows = null;
        // prop: numberColumns
        // Maximum number of columns in the legend.  0 or null for unlimited.
        this.numberColumns = null;
        // this will override the placement option on the Legend object
        this.placement = "outside";
        $.extend(true, this, options);
    };
    
    // called with scope of legend
    $.jqplot.MekkoLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
            // Mekko charts  legends don't go by number of series, but by number of data points
            // in the series.  Refactor things here for that.
            
            var pad = false, 
                reverse = true,    // mekko charts are always stacked, so reverse
                nr, nc;
            var s = series[0];
            var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
            
            if (s.show) {
                var pd = s.data;
                if (this.numberRows) {
                    nr = this.numberRows;
                    if (!this.numberColumns){
                        nc = Math.ceil(pd.length/nr);
                    }
                    else{
                        nc = this.numberColumns;
                    }
                }
                else if (this.numberColumns) {
                    nc = this.numberColumns;
                    nr = Math.ceil(pd.length/this.numberColumns);
                }
                else {
                    nr = pd.length;
                    nc = 1;
                }
                
                var i, j, tr, td1, td2, lt, rs, color;
                var idx = 0;    
                
                for (i=0; i<nr; i++) {
                    if (reverse){
                        tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
                    }
                    else{
                        tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
                    }
                    for (j=0; j<nc; j++) {
                        if (idx < pd.length) {
                            lt = this.labels[idx] || pd[idx][0].toString();
                            color = colorGenerator.next();
                            if (!reverse){
                                if (i>0){
                                    pad = true;
                                }
                                else{
                                    pad = false;
                                }
                            }
                            else{
                                if (i == nr -1){
                                    pad = false;
                                }
                                else{
                                    pad = true;
                                }
                            }
                            rs = (pad) ? this.rowSpacing : '0';
                
                            td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
                                '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
                                '</div></td>');
                            td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
                            if (this.escapeHtml){
                                td2.text(lt);
                            }
                            else {
                                td2.html(lt);
                            }
                            if (reverse) {
                                td2.prependTo(tr);
                                td1.prependTo(tr);
                            }
                            else {
                                td1.appendTo(tr);
                                td2.appendTo(tr);
                            }
                            pad = true;
                        }
                        idx++;
                    }   
                }
            }
        }
        return this._elem;
    };
    
    $.jqplot.MekkoLegendRenderer.prototype.pack = function(offsets) {
        if (this.show) {
            // fake a grid for positioning
            var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};        
            if (this.placement == 'insideGrid') {
                switch (this.location) {
                    case 'nw':
                        var a = grid._left + this.xoffset;
                        var b = grid._top + this.yoffset;
                        this._elem.css('left', a);
                        this._elem.css('top', b);
                        break;
                    case 'n':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = grid._top + this.yoffset;
                        this._elem.css('left', a);
                        this._elem.css('top', b);
                        break;
                    case 'ne':
                        var a = offsets.right + this.xoffset;
                        var b = grid._top + this.yoffset;
                        this._elem.css({right:a, top:b});
                        break;
                    case 'e':
                        var a = offsets.right + this.xoffset;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({right:a, top:b});
                        break;
                    case 'se':
                        var a = offsets.right + this.xoffset;
                        var b = offsets.bottom + this.yoffset;
                        this._elem.css({right:a, bottom:b});
                        break;
                    case 's':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = offsets.bottom + this.yoffset;
                        this._elem.css({left:a, bottom:b});
                        break;
                    case 'sw':
                        var a = grid._left + this.xoffset;
                        var b = offsets.bottom + this.yoffset;
                        this._elem.css({left:a, bottom:b});
                        break;
                    case 'w':
                        var a = grid._left + this.xoffset;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({left:a, top:b});
                        break;
                    default:  // same as 'se'
                        var a = grid._right - this.xoffset;
                        var b = grid._bottom + this.yoffset;
                        this._elem.css({right:a, bottom:b});
                        break;
                }
                
            }
            else {
                switch (this.location) {
                    case 'nw':
                        var a = this._plotDimensions.width - grid._left + this.xoffset;
                        var b = grid._top + this.yoffset;
                        this._elem.css('right', a);
                        this._elem.css('top', b);
                        break;
                    case 'n':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = this._plotDimensions.height - grid._top + this.yoffset;
                        this._elem.css('left', a);
                        this._elem.css('bottom', b);
                        break;
                    case 'ne':
                        var a = this._plotDimensions.width - offsets.right + this.xoffset;
                        var b = grid._top + this.yoffset;
                        this._elem.css({left:a, top:b});
                        break;
                    case 'e':
                        var a = this._plotDimensions.width - offsets.right + this.xoffset;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({left:a, top:b});
                        break;
                    case 'se':
                        var a = this._plotDimensions.width - offsets.right + this.xoffset;
                        var b = offsets.bottom + this.yoffset;
                        this._elem.css({left:a, bottom:b});
                        break;
                    case 's':
                        var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
                        var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
                        this._elem.css({left:a, top:b});
                        break;
                    case 'sw':
                        var a = this._plotDimensions.width - grid._left + this.xoffset;
                        var b = offsets.bottom + this.yoffset;
                        this._elem.css({right:a, bottom:b});
                        break;
                    case 'w':
                        var a = this._plotDimensions.width - grid._left + this.xoffset;
                        var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
                        this._elem.css({right:a, top:b});
                        break;
                    default:  // same as 'se'
                        var a = grid._right - this.xoffset;
                        var b = grid._bottom + this.yoffset;
                        this._elem.css({right:a, bottom:b});
                        break;
                }
            }
        } 
    };
    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = options.axesDefaults || {};
        options.legend = options.legend || {};
        options.seriesDefaults = options.seriesDefaults || {};
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.MekkoRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.MekkoRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.MekkoAxisRenderer;
            options.legend.renderer = $.jqplot.MekkoLegendRenderer;
            options.legend.preDraw = true;
        }
    }
    
    $.jqplot.preInitHooks.push(preInit);
    
})(jQuery);    

Added Site/Site_W/jpqplot/plugins/jqplot.mekkoRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(b){b.jqplot.MekkoRenderer=function(){this.shapeRenderer=new b.jqplot.ShapeRenderer();this.borderColor=null;this.showBorders=true};b.jqplot.MekkoRenderer.prototype.init=function(c,e){this.fill=false;this.fillRect=true;this.strokeRect=true;this.shadow=false;this._xwidth=0;this._xstart=0;b.extend(true,this.renderer,c);var d={lineJoin:"miter",lineCap:"butt",isarc:false,fillRect:this.fillRect,strokeRect:this.strokeRect};this.renderer.shapeRenderer.init(d);e.axes.x2axis._series.push(this)};b.jqplot.MekkoRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var c=this._yaxis.series_u2p;var g=this._plotData;this.gridData=[];this._xwidth=e(this._sumy)-e(0);if(this.index>0){this._xstart=h.series[this.index-1]._xstart+h.series[this.index-1]._xwidth}var l=this.canvas.getHeight();var d=0;var k;var j;for(var f=0;f<g.length;f++){if(g[f]!=null){d+=g[f][1];k=l-(d/this._sumy*l);j=g[f][1]/this._sumy*l;this.gridData.push([this._xstart,k,this._xwidth,j])}}};b.jqplot.MekkoRenderer.prototype.makeGridData=function(f,g){var d=this._xaxis.series_u2p;var l=this.canvas.getHeight();var c=0;var j;var h;var k=[];for(var e=0;e<f.length;e++){if(f[e]!=null){c+=f[e][1];j=l-(c/this._sumy*l);h=f[e][1]/this._sumy*l;k.push([this._xstart,j,this._xwidth,h])}}return k};b.jqplot.MekkoRenderer.prototype.draw=function(c,h,d){var e;var g=(d!=undefined)?d:{};var f=(g.showLine!=undefined)?g.showLine:this.showLine;var j=new b.jqplot.ColorGenerator(this.seriesColors);c.save();if(h.length){if(f){for(e=0;e<h.length;e++){g.fillStyle=j.next();if(this.renderer.showBorders){g.strokeStyle=this.renderer.borderColor}else{g.strokeStyle=g.fillStyle}this.renderer.shapeRenderer.draw(c,h[e],g)}}}c.restore()};b.jqplot.MekkoRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.MekkoLegendRenderer=function(){};b.jqplot.MekkoLegendRenderer.prototype.init=function(c){this.numberRows=null;this.numberColumns=null;this.placement="outside";b.extend(true,this,c)};b.jqplot.MekkoLegendRenderer.prototype.draw=function(){var f=this;if(this.show){var o=this._series;var r="position:absolute;";r+=(this.background)?"background:"+this.background+";":"";r+=(this.border)?"border:"+this.border+";":"";r+=(this.fontSize)?"font-size:"+this.fontSize+";":"";r+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";r+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=b('<table class="jqplot-table-legend" style="'+r+'"></table>');var w=false,n=true,c,l;var p=o[0];var d=new b.jqplot.ColorGenerator(p.seriesColors);if(p.show){var x=p.data;if(this.numberRows){c=this.numberRows;if(!this.numberColumns){l=Math.ceil(x.length/c)}else{l=this.numberColumns}}else{if(this.numberColumns){l=this.numberColumns;c=Math.ceil(x.length/this.numberColumns)}else{c=x.length;l=1}}var v,u,e,h,g,k,m,t;var q=0;for(v=0;v<c;v++){if(n){e=b('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{e=b('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(u=0;u<l;u++){if(q<x.length){k=this.labels[q]||x[q][0].toString();t=d.next();if(!n){if(v>0){w=true}else{w=false}}else{if(v==c-1){w=false}else{w=true}}m=(w)?this.rowSpacing:"0";h=b('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+m+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+t+';"></div></div></td>');g=b('<td class="jqplot-table-legend" style="padding-top:'+m+';"></td>');if(this.escapeHtml){g.text(k)}else{g.html(k)}if(n){g.prependTo(e);h.prependTo(e)}else{h.appendTo(e);g.appendTo(e)}w=true}q++}}}}return this._elem};b.jqplot.MekkoLegendRenderer.prototype.pack=function(f){if(this.show){var e={_top:f.top,_left:f.left,_right:f.right,_bottom:this._plotDimensions.height-f.bottom};if(this.placement=="insideGrid"){switch(this.location){case"nw":var d=e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"ne":var d=f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({right:d,top:c});break;case"e":var d=f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;case"se":var d=f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"sw":var d=e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"w":var d=e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}else{switch(this.location){case"nw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("right",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-e._top+this.yoffset;this._elem.css("left",d);this._elem.css("bottom",c);break;case"ne":var d=this._plotDimensions.width-f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({left:d,top:c});break;case"e":var d=this._plotDimensions.width-f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;case"se":var d=this._plotDimensions.width-f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-f.bottom+this.yoffset;this._elem.css({left:d,top:c});break;case"sw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"w":var d=this._plotDimensions.width-e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}}};function a(g,f,d){d=d||{};d.axesDefaults=d.axesDefaults||{};d.legend=d.legend||{};d.seriesDefaults=d.seriesDefaults||{};var c=false;if(d.seriesDefaults.renderer==b.jqplot.MekkoRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.MekkoRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.MekkoAxisRenderer;d.legend.renderer=b.jqplot.MekkoLegendRenderer;d.legend.preDraw=true}}b.jqplot.preInitHooks.push(a)})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.meterGaugeRenderer.js.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.MeterGaugeRenderer
     * Plugin renderer to draw a meter gauge chart.
     * 
     * Data consists of a single series with 1 data point to position the gauge needle.
     * 
     * To use this renderer, you need to include the 
     * meter gauge renderer plugin, for example:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.meterGaugeRenderer.js"></script>
     * 
     * Properties described here are passed into the $.jqplot function
     * as options on the series renderer.  For example:
     * 
     * > plot0 = $.jqplot('chart0',[[18]],{
     * >     title: 'Network Speed',
     * >     seriesDefaults: {
     * >         renderer: $.jqplot.MeterGaugeRenderer,
     * >         rendererOptions: {
     * >             label: 'MB/s'
     * >         }
     * >     }
     * > });
     * 
     * A meterGauge plot does not support events.
     */
    $.jqplot.MeterGaugeRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.MeterGaugeRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.MeterGaugeRenderer.prototype.constructor = $.jqplot.MeterGaugeRenderer;
    
    // called with scope of a series
    $.jqplot.MeterGaugeRenderer.prototype.init = function(options) {
        // Group: Properties
        //
        // prop: diameter
        // Outer diameter of the meterGauge, auto computed by default
        this.diameter = null;
        // prop: padding
        // padding between the meterGauge and plot edges, auto
        // calculated by default.
        this.padding = null;
        // prop: shadowOffset
        // offset of the shadow from the gauge ring and offset of 
        // each succesive stroke of the shadow from the last.
        this.shadowOffset = 2;
        // prop: shadowAlpha
        // transparency of the shadow (0 = transparent, 1 = opaque)
        this.shadowAlpha = 0.07;
        // prop: shadowDepth
        // number of strokes to apply to the shadow, 
        // each stroke offset shadowOffset from the last.
        this.shadowDepth = 4;
        // prop: background
        // background color of the inside of the gauge.
        this.background = "#efefef";
        // prop: ringColor
        // color of the outer ring, hub, and needle of the gauge.
        this.ringColor = "#BBC6D0";
        // needle color not implemented yet.
        this.needleColor = "#C3D3E5";
        // prop: tickColor
        // color of the tick marks around the gauge.
        this.tickColor = "989898";
        // prop: ringWidth
        // width of the ring around the gauge.  Auto computed by default.
        this.ringWidth = null;
        // prop: min
        // Minimum value on the gauge.  Auto computed by default
        this.min;
        // prop: max
        // Maximum value on the gauge. Auto computed by default
        this.max;
        // prop: ticks
        // Array of tick values. Auto computed by default.
        this.ticks = [];
        // prop: showTicks
        // true to show ticks around gauge.
        this.showTicks = true;
        // prop: showTickLabels
        // true to show tick labels next to ticks.
        this.showTickLabels = true;
        // prop: label
        // A gauge label like 'kph' or 'Volts'
        this.label = null;
        // prop: labelHeightAdjust
        // Number of Pixels to offset the label up (-) or down (+) from its default position.
        this.labelHeightAdjust = 0;
        // prop: labelPosition
        // Where to position the label, either 'inside' or 'bottom'.
        this.labelPosition = 'inside';
        // prop: intervals
        // Array of ranges to be drawn around the gauge.
        // Array of form:
        // > [value1, value2, ...]
        // indicating the values for the first, second, ... intervals.
        this.intervals = [];
        // prop: intervalColors
        // Array of colors to use for the intervals.
        this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"];
        // prop: intervalInnerRadius
        // Radius of the inner circle of the interval ring.
        this.intervalInnerRadius =  null;
        // prop: intervalOuterRadius
        // Radius of the outer circle of the interval ring.
        this.intervalOuterRadius = null;
        this.tickRenderer = $.jqplot.MeterGaugeTickRenderer;
        // ticks spaced every 1, 2, 2.5, 5, 10, 20, .1, .2, .25, .5, etc.
        this.tickPositions = [1, 2, 2.5, 5, 10];
        // prop: tickSpacing
        // Degrees between ticks.  This is a target number, if 
        // incompatible span and ticks are supplied, a suitable
        // spacing close to this value will be computed.
        this.tickSpacing = 30;
        this.numberMinorTicks = null;
        // prop: hubRadius
        // Radius of the hub at the bottom center of gauge which the needle attaches to.
        // Auto computed by default
        this.hubRadius = null;
        // prop: tickPadding
        // padding of the tick marks to the outer ring and the tick labels to marks.
        // Auto computed by default.
        this.tickPadding = null;
        // prop: needleThickness
        // Maximum thickness the needle.  Auto computed by default.
        this.needleThickness = null;
        // prop: needlePad
        // Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
        this.needlePad = 6;
        // prop: pegNeedle
        // True will stop needle just below/above the  min/max values if data is below/above min/max,
        // as if the meter is "pegged".
        this.pegNeedle = true;
        
        $.extend(true, this, options);
        this.type = null;
        this.numberTicks = null;
        this.tickInterval = null;
        // span, the sweep (in degrees) from min to max.  This gauge is 
        // a semi-circle.
        this.span = 180;
        // get rid of this nonsense
        // this.innerSpan = this.span;
        if (this.type == 'circular') {
            this.semiCircular = false;
        }
        else if (this.type != 'circular') {
            this.semiCircular = true;
        }
        else {
            this.semiCircular = (this.span <= 180) ? true : false;
        }
        this._tickPoints = [];
        // reference to label element.
        this._labelElm = null;
        
        // start the gauge at the beginning of the span
        this.startAngle = (90 + (360 - this.span)/2) * Math.PI/180;
        this.endAngle = (90 - (360 - this.span)/2) * Math.PI/180;
        
        this.setmin = !!(this.min == null);
        this.setmax = !!(this.max == null);
        
        // if given intervals and is an array of values, create labels and colors.
        if (this.intervals.length) {
            if (this.intervals[0].length == null || this.intervals.length == 1) {
                for (var i=0; i<this.intervals.length; i++) {
                    this.intervals[i] = [this.intervals[i], this.intervals[i], this.intervalColors[i]];
                }
            }
            else if (this.intervals[0].length == 2) {
                for (i=0; i<this.intervals.length; i++) {
                    this.intervals[i] = [this.intervals[i][0], this.intervals[i][1], this.intervalColors[i]];
                }
            }
        }
        
        // compute min, max and ticks if not supplied:
        if (this.ticks.length) {
            if (this.ticks[0].length == null || this.ticks[0].length == 1) {
                for (var i=0; i<this.ticks.length; i++) {
                    this.ticks[i] = [this.ticks[i], this.ticks[i]];
                }
            }
            this.min = (this.min == null) ? this.ticks[0][0] : this.min;
            this.max = (this.max == null) ? this.ticks[this.ticks.length-1][0] : this.max;
            this.setmin = false;
            this.setmax = false;
            this.numberTicks = this.ticks.length;
            this.tickInterval = this.ticks[1][0] - this.ticks[0][0];
            this.tickFactor = Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));
            // use the first interal to calculate minor ticks;
            this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
            if (!this.numberMinorTicks) {
                this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
            }
            if (!this.numberMinorTicks) {
                this.numberMinorTicks = 1;
            }
        }
        
        else if (this.intervals.length) {
            this.min = (this.min == null) ? 0 : this.min;
            this.setmin = false;
            if (this.max == null) {
                if (this.intervals[this.intervals.length-1][0] >= this.data[0][1]) {
                    this.max = this.intervals[this.intervals.length-1][0];
                    this.setmax = false;
                }
            }
            else {
                this.setmax = false;
            }
        }
        
        else {
            // no ticks and no intervals supplied, put needle in middle
            this.min = (this.min == null) ? 0 : this.min;
            this.setmin = false;
            if (this.max == null) {
                this.max = this.data[0][1] * 1.25;
                this.setmax = true;
            }
            else {
                this.setmax = false;
            }
        }
    };
    
    $.jqplot.MeterGaugeRenderer.prototype.setGridData = function(plot) {
        // set gridData property.  This will hold angle in radians of each data point.
        var stack = [];
        var td = [];
        var sa = this.startAngle;
        for (var i=0; i<this.data.length; i++){
            stack.push(this.data[i][1]);
            td.push([this.data[i][0]]);
            if (i>0) {
                stack[i] += stack[i-1];
            }
        }
        var fact = Math.PI*2/stack[stack.length - 1];
        
        for (var i=0; i<stack.length; i++) {
            td[i][1] = stack[i] * fact;
        }
        this.gridData = td;
    };
    
    $.jqplot.MeterGaugeRenderer.prototype.makeGridData = function(data, plot) {
        var stack = [];
        var td = [];
        var sa = this.startAngle;
        for (var i=0; i<data.length; i++){
            stack.push(data[i][1]);
            td.push([data[i][0]]);
            if (i>0) {
                stack[i] += stack[i-1];
            }
        }
        var fact = Math.PI*2/stack[stack.length - 1];
        
        for (var i=0; i<stack.length; i++) {
            td[i][1] = stack[i] * fact;
        }
        return td;
    };

        
    function getnmt(pos, interval, fact) {
        var temp;
        for (i=pos.length-1; i>=0; i--) {
            temp = interval/(pos[i] * Math.pow(10, fact));
            if (temp == 4 || temp == 5) {
                return temp - 1;
            }
        }
        return null;
    }
    
    // called with scope of series
    $.jqplot.MeterGaugeRenderer.prototype.draw = function (ctx, gd, options) {
        var i;
        var opts = (options != undefined) ? options : {};
        // offset and direction of offset due to legend placement
        var offx = 0;
        var offy = 0;
        var trans = 1;
        if (options.legendInfo && options.legendInfo.placement == 'inside') {
            var li = options.legendInfo;
            switch (li.location) {
                case 'nw':
                    offx = li.width + li.xoffset;
                    break;
                case 'w':
                    offx = li.width + li.xoffset;
                    break;
                case 'sw':
                    offx = li.width + li.xoffset;
                    break;
                case 'ne':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'e':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'se':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'n':
                    offy = li.height + li.yoffset;
                    break;
                case 's':
                    offy = li.height + li.yoffset;
                    trans = -1;
                    break;
                default:
                    break;
            }
        }
        
        
            
        // pre-draw so can get it's dimensions.
        if (this.label) {
            this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>');
            this.canvas._elem.after(this._labelElem);
        }
        
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var cw = ctx.canvas.width;
        var ch = ctx.canvas.height;
        if (this.padding == null) {
            this.padding = Math.round(Math.min(cw, ch)/30);
        }
        var w = cw - offx - 2 * this.padding;
        var h = ch - offy - 2 * this.padding;
        if (this.labelPosition == 'bottom' && this.label) {
            h -= this._labelElem.outerHeight(true);
        }
        var mindim = Math.min(w,h);
        var d = mindim;
            
        if (!this.diameter) {
            if (this.semiCircular) {
                if ( w >= 2*h) {
                    if (!this.ringWidth) {
                        this.ringWidth = 2*h/35;
                    }
                    this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
                    this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad;
                    this.diameter = 2 * (h - 2*this.innerPad);
                }
                else {
                    if (!this.ringWidth) {
                        this.ringWidth = w/35;
                    }
                    this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
                    this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad;
                    this.diameter = w - 2*this.innerPad;
                }
                // center taking into account legend and over draw for gauge bottom below hub.
                // this will be center of hub.
                this._center = [(cw - trans * offx)/2 + trans * offx,  (ch + trans*offy - this.padding - this.ringWidth - this.innerPad)];
            }
            else {
                if (!this.ringWidth) {
                    this.ringWidth = d/35;
                }
                this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
                this.innerPad = 0;
                this.diameter = d - this.ringWidth;
                // center in middle of canvas taking into account legend.
                // will be center of hub.
                this._center = [(cw-trans*offx)/2 + trans * offx, (ch-trans*offy)/2 + trans * offy];
            }
        }
        
        if (this._labelElem && this.labelPosition == 'bottom') {
            this._center[1] -= this._labelElem.outerHeight(true);
        }
        
        this._radius = this.diameter/2;
        
        this.tickSpacing = 6000/this.diameter;
        
        if (!this.hubRadius) {
            this.hubRadius = this.diameter/18;
        }
        
        this.shadowOffset = 0.5 + this.ringWidth/9;
        this.shadowWidth = this.ringWidth*1;
        
        this.tickPadding = 3 + Math.pow(this.diameter/20, 0.7);
        this.tickOuterRadius = this._radius - this.ringWidth/2 - this.tickPadding;
        this.tickLength = (this.showTicks) ? this._radius/13 : 0;
        
        if (this.ticks.length == 0) {
            // no ticks, lets make some.
            var max = this.max,
                min = this.min,
                setmax = this.setmax,
                setmin = this.setmin,
                ti = (max - min) * this.tickSpacing / this.span;
            var tf = Math.floor(parseFloat((Math.log(ti)/Math.log(10)).toFixed(11)));
            var tp = (ti/Math.pow(10, tf));
            (tp > 2 && tp <= 2.5) ? tp = 2.5 : tp = Math.ceil(tp);
            var t = this.tickPositions;
            var tpindex, nt;
    
            for (i=0; i<t.length; i++) {
                if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) { 
                    ti = t[i]*Math.pow(10, tf);
                    tpindex = i;
                }
            }
        
            for (i=0; i<t.length; i++) {
                if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) { 
                    ti = t[i]*Math.pow(10, tf);
                    nt = Math.ceil((max - min) / ti);
                }
            }
        
            // both max and min are free
            if (setmax && setmin) {
                var tmin = (min > 0) ? min - min % ti : min - min % ti - ti;
                if (!this.forceZero) {
                    var diff = Math.min(min - tmin, 0.8*ti);
                    var ntp = Math.floor(diff/t[tpindex]);
                    if (ntp > 1) {
                        tmin = tmin + t[tpindex] * (ntp-1);
                        if (parseInt(tmin, 10) != tmin && parseInt(tmin-t[tpindex], 10) == tmin-t[tpindex]) {
                            tmin = tmin - t[tpindex];
                        }
                    }
                }
                if (min == tmin) {
                    min -= ti;
                }
                else {
                    // tmin should always be lower than dataMin
                    if (min - tmin > 0.23*ti) {
                        min = tmin;
                    }
                    else {
                        min = tmin -ti;
                        nt += 1;
                    }
                }
                nt += 1;
                var tmax = min + (nt - 1) * ti;
                if (max >= tmax) { 
                    tmax += ti;
                    nt += 1;
                }
                // now tmax should always be mroe than dataMax
                if (tmax - max < 0.23*ti) { 
                    tmax += ti;
                    nt += 1;
                }
                this.max = max = tmax;
                this.min = min;    

                this.tickInterval = ti;
                this.numberTicks = nt;
                var it;
                for (i=0; i<nt; i++) {
                    it = parseFloat((min+i*ti).toFixed(11));
                    this.ticks.push([it, it]);
                }
                this.max = this.ticks[nt-1][1];
            
                this.tickFactor = tf;      
                // determine number of minor ticks

                this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);     
        
                if (!this.numberMinorTicks) {
                    this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
                }
            }
            // max is free, min is fixed
            else if (setmax) {
                var tmax = min + (nt - 1) * ti;
                if (max >= tmax) {
                    max = tmax + ti;
                    nt += 1;
                }
                else {
                    max = tmax;
                }

                this.tickInterval = this.tickInterval || ti;
                this.numberTicks = this.numberTicks || nt;
                var it;
                for (i=0; i<this.numberTicks; i++) {
                    it = parseFloat((min+i*this.tickInterval).toFixed(11));
                    this.ticks.push([it, it]);
                }
                this.max = this.ticks[this.numberTicks-1][1];
            
                this.tickFactor = tf;
                // determine number of minor ticks
                this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
        
                if (!this.numberMinorTicks) {
                    this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
                }
            }
            
            // not setting max or min
            if (!setmax && !setmin) {
                var range = this.max - this.min;
                tf = Math.floor(parseFloat((Math.log(range)/Math.log(10)).toFixed(11))) - 1;
                var nticks = [5,6,4,7,3,8,9,10,2], res, numticks, nonSigDigits=0, sigRange;
                // check to see how many zeros are at the end of the range
                if (range > 1) {
                    var rstr = String(range);
                    if (rstr.search(/\./) == -1) {
                         var pos = rstr.search(/0+$/);
                         nonSigDigits = (pos > 0) ? rstr.length - pos - 1 : 0;
                    }
                }
                sigRange = range/Math.pow(10, nonSigDigits);
                for (i=0; i<nticks.length; i++) {
                    res = sigRange/(nticks[i]-1);
                    if (res == parseInt(res, 10)) {
                        this.numberTicks = nticks[i];
                        this.tickInterval = range/(this.numberTicks-1);
                        this.tickFactor = tf+1;
                        break;
                    }
                }
                var it;
                for (i=0; i<this.numberTicks; i++) {
                    it = parseFloat((this.min+i*this.tickInterval).toFixed(11));
                    this.ticks.push([it, it]);
                }
                // determine number of minor ticks
                this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
        
                if (!this.numberMinorTicks) {
                    this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
                }
                
                if (!this.numberMinorTicks) {
                    this.numberMinorTicks = 1;
                    var nums = [4, 5, 3, 6, 2];
                    for (i=0; i<5; i++) {
                        temp = this.tickInterval/nums[i];
                        if (temp == parseInt(temp)) {
                            this.numberMinorTicks = nums[i]-1;
                            break;
                        }
                    }
                }
            }
        }
        

        var r = this._radius,
            sa = this.startAngle,
            ea = this.endAngle,       
            pi = Math.PI,
            hpi = Math.PI/2;
            
        if (this.semiCircular) {
            var overAngle = Math.atan(this.innerPad/r),
                outersa = this.outerStartAngle = sa - overAngle,
                outerea = this.outerEndAngle = ea + overAngle,
                hubsa = this.hubStartAngle = sa - Math.atan(this.innerPad/this.hubRadius*2),
                hubea = this.hubEndAngle = ea + Math.atan(this.innerPad/this.hubRadius*2);

            ctx.save();            
            
            ctx.translate(this._center[0], this._center[1]);
            ctx.lineJoin = "round";
            ctx.lineCap = "round";
            
            // draw the innerbackground
            ctx.save();
            ctx.beginPath();  
            ctx.fillStyle = this.background;
            ctx.arc(0, 0, r, outersa, outerea, false);
            ctx.closePath();
            ctx.fill();
            ctx.restore();
            
            // draw the shadow
            // the outer ring.
            var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
            ctx.save();
            for (var i=0; i<this.shadowDepth; i++) {
                ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
                ctx.beginPath();  
                ctx.strokeStyle = shadowColor;
                ctx.lineWidth = this.shadowWidth;
                ctx.arc(0 ,0, r, outersa, outerea, false);
                ctx.closePath();
                ctx.stroke();
            }
            ctx.restore();
            
            // the inner hub.
            ctx.save();
            var tempd = parseInt((this.shadowDepth+1)/2, 10);
            for (var i=0; i<tempd; i++) {
                ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
                ctx.beginPath();  
                ctx.fillStyle = shadowColor;
                ctx.arc(0 ,0, this.hubRadius, hubsa, hubea, false);
                ctx.closePath();
                ctx.fill();
            }
            ctx.restore();
            
            // draw the outer ring.
            ctx.save();
            ctx.beginPath();  
            ctx.strokeStyle = this.ringColor;
            ctx.lineWidth = this.ringWidth;
            ctx.arc(0 ,0, r, outersa, outerea, false);
            ctx.closePath();
            ctx.stroke();
            ctx.restore();
            
            // draw the hub
            
            ctx.save();
            ctx.beginPath();  
            ctx.fillStyle = this.ringColor;
            ctx.arc(0 ,0, this.hubRadius,hubsa, hubea, false);
            ctx.closePath();
            ctx.fill();
            ctx.restore();
            
            // draw the ticks
            if (this.showTicks) {
                ctx.save();
                var orad = this.tickOuterRadius,
                    tl = this.tickLength,
                    mtl = tl/2,
                    nmt = this.numberMinorTicks,
                    ts = this.span * Math.PI / 180 / (this.ticks.length-1),
                    mts = ts/(nmt + 1);
                
                for (i = 0; i<this.ticks.length; i++) {
                    ctx.beginPath();
                    ctx.lineWidth = 1.5 + this.diameter/360;
                    ctx.strokeStyle = this.ringColor;
                    var wps = ts*i+sa;
                    ctx.moveTo(-orad * Math.cos(ts*i+sa), orad * Math.sin(ts*i+sa));
                    ctx.lineTo(-(orad-tl) * Math.cos(ts*i+sa), (orad - tl) * Math.sin(ts*i+sa));
                    this._tickPoints.push([(orad-tl) * Math.cos(ts*i+sa) + this._center[0] + this.canvas._offsets.left, (orad - tl) * Math.sin(ts*i+sa) + this._center[1] + this.canvas._offsets.top, ts*i+sa]);
                    ctx.stroke();
                    ctx.lineWidth = 1.0 + this.diameter/440;
                    if (i<this.ticks.length-1) {
                        for (var j=1; j<=nmt; j++) {
                            ctx.beginPath();
                            ctx.moveTo(-orad * Math.cos(ts*i+mts*j+sa), orad * Math.sin(ts*i+mts*j+sa));
                            ctx.lineTo(-(orad-mtl) * Math.cos(ts*i+mts*j+sa), (orad-mtl) * Math.sin(ts*i+mts*j+sa));
                            ctx.stroke();
                        }   
                    }
                }
                ctx.restore();
            }
            
            // draw the tick labels
            if (this.showTickLabels) {
                var elem, l, t, ew, dim, maxdim=0;
                var tp = this.tickPadding * (1 - 1/(this.diameter/80+1));
                for (i=0; i<this.ticks.length; i++) {
                    elem = $('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[i][1]+'</div>');
                    this.canvas._elem.after(elem);
                    ew = elem.outerWidth(true);
                    eh = elem.outerHeight(true);
                    l = this._tickPoints[i][0] - ew * (this._tickPoints[i][2]-Math.PI)/Math.PI - tp * Math.cos(this._tickPoints[i][2]);
                    t = this._tickPoints[i][1] - eh/2 + eh/2 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) + tp/3 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) ;
                    // t = this._tickPoints[i][1] - eh/2 - eh/2 * Math.sin(this._tickPoints[i][2]) - tp/2 * Math.sin(this._tickPoints[i][2]);
                    elem.css({left:l, top:t});
                    dim  = ew*Math.cos(this._tickPoints[i][2]) + eh*Math.sin(Math.PI/2+this._tickPoints[i][2]/2);
                    maxdim = (dim > maxdim) ? dim : maxdim;
                }
            }
            
            // draw the gauge label
            if (this.label && this.labelPosition == 'inside') {
                var l = this._center[0] + this.canvas._offsets.left;
                var tp = this.tickPadding * (1 - 1/(this.diameter/80+1));
                var t = 0.5*(this._center[1] + this.canvas._offsets.top - this.hubRadius) + 0.5*(this._center[1] + this.canvas._offsets.top - this.tickOuterRadius + this.tickLength + tp) + this.labelHeightAdjust;
                // this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>');
                // this.canvas._elem.after(this._labelElem);
                l -= this._labelElem.outerWidth(true)/2;
                t -= this._labelElem.outerHeight(true)/2;
                this._labelElem.css({left:l, top:t});
            }
            
            else if (this.label && this.labelPosition == 'bottom') {
                var l = this._center[0] + this.canvas._offsets.left - this._labelElem.outerWidth(true)/2;
                var t = this._center[1] + this.canvas._offsets.top + this.innerPad + + this.ringWidth + this.padding + this.labelHeightAdjust;
                this._labelElem.css({left:l, top:t});
                
            }
            
            // draw the intervals
            
            ctx.save();
            var inner = this.intervalInnerRadius || this.hubRadius * 1.5;
            if (this.intervalOuterRadius == null) {
                if (this.showTickLabels) {
                    var outer = (this.tickOuterRadius - this.tickLength - this.tickPadding - this.diameter/8);
                }
                else {
                    var outer = (this.tickOuterRadius - this.tickLength - this.diameter/16);
                }
            }
            else {
                var outer = this.intervalOuterRadius;
            }
            var range = this.max - this.min;
            var intrange = this.intervals[this.intervals.length-1] - this.min;
            var start, end, span = this.span*Math.PI/180;
            for (i=0; i<this.intervals.length; i++) {
                start = (i == 0) ? sa : sa + (this.intervals[i-1][0] - this.min)*span/range;
                if (start < 0) {
                    start = 0;
                }
                end = sa + (this.intervals[i][0] - this.min)*span/range;
                if (end < 0) {
                    end = 0;
                }
                ctx.beginPath();
                ctx.fillStyle = this.intervals[i][2];
                ctx.arc(0, 0, inner, start, end, false);
                ctx.lineTo(outer*Math.cos(end), outer*Math.sin(end));
                ctx.arc(0, 0, outer, end, start, true);
                ctx.lineTo(inner*Math.cos(start), inner*Math.sin(start));
                ctx.closePath();
                ctx.fill();
            }
            ctx.restore();
            
            // draw the needle
            var datapoint = this.data[0][1];
            var dataspan = this.max - this.min;
            if (this.pegNeedle) {
                if (this.data[0][1] > this.max + dataspan*3/this.span) {
                    datapoint = this.max + dataspan*3/this.span;
                }
                if (this.data[0][1] < this.min - dataspan*3/this.span) {
                    datapoint = this.min - dataspan*3/this.span;
                }
            }
            var dataang = (datapoint - this.min)/dataspan * this.span * Math.PI/180 + this.startAngle;
            
            
            ctx.save();
            ctx.beginPath();
            ctx.fillStyle = this.ringColor;
            ctx.strokeStyle = this.ringColor;
            this.needleLength = (this.tickOuterRadius - this.tickLength) * 0.85;
            this.needleThickness = (this.needleThickness < 2) ? 2 : this.needleThickness;
            var endwidth = this.needleThickness * 0.4;

            
            var dl = this.needleLength/10;
            var dt = (this.needleThickness - endwidth)/10;
            var templ;
            for (var i=0; i<10; i++) {
                templ = this.needleThickness - i*dt;
                ctx.moveTo(dl*i*Math.cos(dataang), dl*i*Math.sin(dataang));
                ctx.lineWidth = templ;
                ctx.lineTo(dl*(i+1)*Math.cos(dataang), dl*(i+1)*Math.sin(dataang));
                ctx.stroke();
            }
            
            ctx.restore();
        }
        else {
            this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
        }               
    };
    
    $.jqplot.MeterGaugeAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.MeterGaugeAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.MeterGaugeAxisRenderer.prototype.constructor = $.jqplot.MeterGaugeAxisRenderer;
        
    
    // There are no traditional axes on a gauge chart.  We just need to provide
    // dummy objects with properties so the plot will render.
    // called with scope of axis object.
    $.jqplot.MeterGaugeAxisRenderer.prototype.init = function(options){
        //
        this.tickRenderer = $.jqplot.MeterGaugeTickRenderer;
        $.extend(true, this, options);
        // I don't think I'm going to need _dataBounds here.
        // have to go Axis scaling in a way to fit chart onto plot area
        // and provide u2p and p2u functionality for mouse cursor, etc.
        // for convienence set _dataBounds to 0 and 100 and
        // set min/max to 0 and 100.
        this._dataBounds = {min:0, max:100};
        this.min = 0;
        this.max = 100;
        this.showTicks = false;
        this.ticks = [];
        this.showMark = false;
        this.show = false; 
    };
    
    $.jqplot.MeterGaugeLegendRenderer = function(){
        $.jqplot.TableLegendRenderer.call(this);
    };
    
    $.jqplot.MeterGaugeLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
    $.jqplot.MeterGaugeLegendRenderer.prototype.constructor = $.jqplot.MeterGaugeLegendRenderer;
    
    /**
     * Class: $.jqplot.MeterGaugeLegendRenderer
     *Meter gauges don't typically have a legend, this overrides the default legend renderer.
     */
    $.jqplot.MeterGaugeLegendRenderer.prototype.init = function(options) {

        // Maximum number of rows in the legend.  0 or null for unlimited.
        this.numberRows = null;
        // Maximum number of columns in the legend.  0 or null for unlimited.
        this.numberColumns = null;
        $.extend(true, this, options);
    };
    
    // called with context of legend
    $.jqplot.MeterGaugeLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
            ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
            ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
            ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
            // MeterGauge charts legends don't go by number of series, but by number of data points
            // in the series.  Refactor things here for that.
            
            var pad = false, 
                reverse = false,
                nr, nc;
            var s = series[0];
            
            if (s.show) {
                var pd = s.data;
                if (this.numberRows) {
                    nr = this.numberRows;
                    if (!this.numberColumns){
                        nc = Math.ceil(pd.length/nr);
                    }
                    else{
                        nc = this.numberColumns;
                    }
                }
                else if (this.numberColumns) {
                    nc = this.numberColumns;
                    nr = Math.ceil(pd.length/this.numberColumns);
                }
                else {
                    nr = pd.length;
                    nc = 1;
                }
                
                var i, j, tr, td1, td2, lt, rs, color;
                var idx = 0;    
                
                for (i=0; i<nr; i++) {
                    if (reverse){
                        tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
                    }
                    else{
                        tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
                    }
                    for (j=0; j<nc; j++) {
                        if (idx < pd.length){
                            lt = this.labels[idx] || pd[idx][0].toString();
                            color = colorGenerator.next();
                            if (!reverse){
                                if (i>0){
                                    pad = true;
                                }
                                else{
                                    pad = false;
                                }
                            }
                            else{
                                if (i == nr -1){
                                    pad = false;
                                }
                                else{
                                    pad = true;
                                }
                            }
                            rs = (pad) ? this.rowSpacing : '0';
                
                            td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
                                '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
                                '</div></td>');
                            td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
                            if (this.escapeHtml){
                                td2.text(lt);
                            }
                            else {
                                td2.html(lt);
                            }
                            if (reverse) {
                                td2.prependTo(tr);
                                td1.prependTo(tr);
                            }
                            else {
                                td1.appendTo(tr);
                                td2.appendTo(tr);
                            }
                            pad = true;
                        }
                        idx++;
                    }   
                }
            }
        }
        return this._elem;                
    };
    
    // $.jqplot.MeterGaugeLegendRenderer.prototype.pack = function(offsets) {
    //     if (this.show) {
    //         // fake a grid for positioning
    //         var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};        
    //         if (this.placement == 'insideGrid') {
    //             switch (this.location) {
    //                 case 'nw':
    //                     var a = grid._left + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'n':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'ne':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 case 'e':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 case 'se':
    //                     var a = offsets.right + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //                 case 's':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 'sw':
    //                     var a = grid._left + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 'w':
    //                     var a = grid._left + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 default:  // same as 'se'
    //                     var a = grid._right - this.xoffset;
    //                     var b = grid._bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //             }
    //             
    //         }
    //         else {
    //             switch (this.location) {
    //                 case 'nw':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css('right', a);
    //                     this._elem.css('top', b);
    //                     break;
    //                 case 'n':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = this._plotDimensions.height - grid._top + this.yoffset;
    //                     this._elem.css('left', a);
    //                     this._elem.css('bottom', b);
    //                     break;
    //                 case 'ne':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = grid._top + this.yoffset;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'e':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'se':
    //                     var a = this._plotDimensions.width - offsets.right + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, bottom:b});
    //                     break;
    //                 case 's':
    //                     var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
    //                     var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
    //                     this._elem.css({left:a, top:b});
    //                     break;
    //                 case 'sw':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = offsets.bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //                 case 'w':
    //                     var a = this._plotDimensions.width - grid._left + this.xoffset;
    //                     var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
    //                     this._elem.css({right:a, top:b});
    //                     break;
    //                 default:  // same as 'se'
    //                     var a = grid._right - this.xoffset;
    //                     var b = grid._bottom + this.yoffset;
    //                     this._elem.css({right:a, bottom:b});
    //                     break;
    //             }
    //         }
    //     } 
    // };
    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = options.axesDefaults || {};
        options.legend = options.legend || {};
        options.seriesDefaults = options.seriesDefaults || {};
        options.grid = options.grid || {};
        options.gridPadding = options.gridPadding || {};
           
        // only set these if there is a gauge series
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.MeterGaugeRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.MeterGaugeRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.MeterGaugeAxisRenderer;
            options.legend.renderer = $.jqplot.MeterGaugeLegendRenderer;
            options.legend.preDraw = true;
            options.grid.background = options.grid.background || 'white';
            options.grid.drawGridlines = false;
            options.grid.borderWidth = (options.grid.borderWidth != null) ? options.grid.borderWidth : 0;
            options.grid.shadow = (options.grid.shadow != null) ? options.grid.shadow : false;
            options.gridPadding.top = (options.gridPadding.top != null) ? options.gridPadding.top : 0;
            options.gridPadding.bottom = (options.gridPadding.bottom != null) ? options.gridPadding.bottom : 0;
            options.gridPadding.left = (options.gridPadding.left != null) ? options.gridPadding.left : 0;
            options.gridPadding.right = (options.gridPadding.right != null) ? options.gridPadding.right : 0;
        }
    }
    
    // called with scope of plot
    function postParseOptions(options) {
        //
    }
    
    $.jqplot.preInitHooks.push(preInit);
    $.jqplot.postParseOptionsHooks.push(postParseOptions);
    
    $.jqplot.MeterGaugeTickRenderer = function() {
        $.jqplot.AxisTickRenderer.call(this);
    };
    
    $.jqplot.MeterGaugeTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
    $.jqplot.MeterGaugeTickRenderer.prototype.constructor = $.jqplot.MeterGaugeTickRenderer;
    
})(jQuery);
    
    

Added Site/Site_W/jpqplot/plugins/jqplot.meterGaugeRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(c){c.jqplot.MeterGaugeRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.MeterGaugeRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.MeterGaugeRenderer.prototype.constructor=c.jqplot.MeterGaugeRenderer;c.jqplot.MeterGaugeRenderer.prototype.init=function(e){this.diameter=null;this.padding=null;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=4;this.background="#efefef";this.ringColor="#BBC6D0";this.needleColor="#C3D3E5";this.tickColor="989898";this.ringWidth=null;this.min;this.max;this.ticks=[];this.showTicks=true;this.showTickLabels=true;this.label=null;this.labelHeightAdjust=0;this.labelPosition="inside";this.intervals=[];this.intervalColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;this.tickPositions=[1,2,2.5,5,10];this.tickSpacing=30;this.numberMinorTicks=null;this.hubRadius=null;this.tickPadding=null;this.needleThickness=null;this.needlePad=6;this.pegNeedle=true;c.extend(true,this,e);this.type=null;this.numberTicks=null;this.tickInterval=null;this.span=180;if(this.type=="circular"){this.semiCircular=false}else{if(this.type!="circular"){this.semiCircular=true}else{this.semiCircular=(this.span<=180)?true:false}}this._tickPoints=[];this._labelElm=null;this.startAngle=(90+(360-this.span)/2)*Math.PI/180;this.endAngle=(90-(360-this.span)/2)*Math.PI/180;this.setmin=!!(this.min==null);this.setmax=!!(this.max==null);if(this.intervals.length){if(this.intervals[0].length==null||this.intervals.length==1){for(var f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f],this.intervals[f],this.intervalColors[f]]}}else{if(this.intervals[0].length==2){for(f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f][0],this.intervals[f][1],this.intervalColors[f]]}}}}if(this.ticks.length){if(this.ticks[0].length==null||this.ticks[0].length==1){for(var f=0;f<this.ticks.length;f++){this.ticks[f]=[this.ticks[f],this.ticks[f]]}}this.min=(this.min==null)?this.ticks[0][0]:this.min;this.max=(this.max==null)?this.ticks[this.ticks.length-1][0]:this.max;this.setmin=false;this.setmax=false;this.numberTicks=this.ticks.length;this.tickInterval=this.ticks[1][0]-this.ticks[0][0];this.tickFactor=Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1}}else{if(this.intervals.length){this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){if(this.intervals[this.intervals.length-1][0]>=this.data[0][1]){this.max=this.intervals[this.intervals.length-1][0];this.setmax=false}}else{this.setmax=false}}else{this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){this.max=this.data[0][1]*1.25;this.setmax=true}else{this.setmax=false}}}};c.jqplot.MeterGaugeRenderer.prototype.setGridData=function(j){var f=[];var k=[];var e=this.startAngle;for(var h=0;h<this.data.length;h++){f.push(this.data[h][1]);k.push([this.data[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){k[h][1]=f[h]*g}this.gridData=k};c.jqplot.MeterGaugeRenderer.prototype.makeGridData=function(j,k){var f=[];var l=[];var e=this.startAngle;for(var h=0;h<j.length;h++){f.push(j[h][1]);l.push([j[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){l[h][1]=f[h]*g}return l};function b(h,f,g){var e;for(i=h.length-1;i>=0;i--){e=f/(h[i]*Math.pow(10,g));if(e==4||e==5){return e-1}}return null}c.jqplot.MeterGaugeRenderer.prototype.draw=function(W,aA,an){var Z;var aK=(an!=undefined)?an:{};var ah=0;var ag=0;var aq=1;if(an.legendInfo&&an.legendInfo.placement=="inside"){var aG=an.legendInfo;switch(aG.location){case"nw":ah=aG.width+aG.xoffset;break;case"w":ah=aG.width+aG.xoffset;break;case"sw":ah=aG.width+aG.xoffset;break;case"ne":ah=aG.width+aG.xoffset;aq=-1;break;case"e":ah=aG.width+aG.xoffset;aq=-1;break;case"se":ah=aG.width+aG.xoffset;aq=-1;break;case"n":ag=aG.height+aG.yoffset;break;case"s":ag=aG.height+aG.yoffset;aq=-1;break;default:break}}if(this.label){this._labelElem=c('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+"</div>");this.canvas._elem.after(this._labelElem)}var k=(aK.shadow!=undefined)?aK.shadow:this.shadow;var M=(aK.showLine!=undefined)?aK.showLine:this.showLine;var H=(aK.fill!=undefined)?aK.fill:this.fill;var J=W.canvas.width;var R=W.canvas.height;if(this.padding==null){this.padding=Math.round(Math.min(J,R)/30)}var P=J-ah-2*this.padding;var aa=R-ag-2*this.padding;if(this.labelPosition=="bottom"&&this.label){aa-=this._labelElem.outerHeight(true)}var K=Math.min(P,aa);var ac=K;if(!this.diameter){if(this.semiCircular){if(P>=2*aa){if(!this.ringWidth){this.ringWidth=2*aa/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=2*(aa-2*this.innerPad)}else{if(!this.ringWidth){this.ringWidth=P/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=P-2*this.innerPad}this._center=[(J-aq*ah)/2+aq*ah,(R+aq*ag-this.padding-this.ringWidth-this.innerPad)]}else{if(!this.ringWidth){this.ringWidth=ac/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=0;this.diameter=ac-this.ringWidth;this._center=[(J-aq*ah)/2+aq*ah,(R-aq*ag)/2+aq*ag]}}if(this._labelElem&&this.labelPosition=="bottom"){this._center[1]-=this._labelElem.outerHeight(true)}this._radius=this.diameter/2;this.tickSpacing=6000/this.diameter;if(!this.hubRadius){this.hubRadius=this.diameter/18}this.shadowOffset=0.5+this.ringWidth/9;this.shadowWidth=this.ringWidth*1;this.tickPadding=3+Math.pow(this.diameter/20,0.7);this.tickOuterRadius=this._radius-this.ringWidth/2-this.tickPadding;this.tickLength=(this.showTicks)?this._radius/13:0;if(this.ticks.length==0){var z=this.max,aJ=this.min,p=this.setmax,aE=this.setmin,ar=(z-aJ)*this.tickSpacing/this.span;var au=Math.floor(parseFloat((Math.log(ar)/Math.log(10)).toFixed(11)));var am=(ar/Math.pow(10,au));(am>2&&am<=2.5)?am=2.5:am=Math.ceil(am);var S=this.tickPositions;var ay,aj;for(Z=0;Z<S.length;Z++){if(am==S[Z]||Z&&S[Z-1]<am&&am<S[Z]){ar=S[Z]*Math.pow(10,au);ay=Z}}for(Z=0;Z<S.length;Z++){if(am==S[Z]||Z&&S[Z-1]<am&&am<S[Z]){ar=S[Z]*Math.pow(10,au);aj=Math.ceil((z-aJ)/ar)}}if(p&&aE){var aN=(aJ>0)?aJ-aJ%ar:aJ-aJ%ar-ar;if(!this.forceZero){var C=Math.min(aJ-aN,0.8*ar);var n=Math.floor(C/S[ay]);if(n>1){aN=aN+S[ay]*(n-1);if(parseInt(aN,10)!=aN&&parseInt(aN-S[ay],10)==aN-S[ay]){aN=aN-S[ay]}}}if(aJ==aN){aJ-=ar}else{if(aJ-aN>0.23*ar){aJ=aN}else{aJ=aN-ar;aj+=1}}aj+=1;var D=aJ+(aj-1)*ar;if(z>=D){D+=ar;aj+=1}if(D-z<0.23*ar){D+=ar;aj+=1}this.max=z=D;this.min=aJ;this.tickInterval=ar;this.numberTicks=aj;var N;for(Z=0;Z<aj;Z++){N=parseFloat((aJ+Z*ar).toFixed(11));this.ticks.push([N,N])}this.max=this.ticks[aj-1][1];this.tickFactor=au;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}else{if(p){var D=aJ+(aj-1)*ar;if(z>=D){z=D+ar;aj+=1}else{z=D}this.tickInterval=this.tickInterval||ar;this.numberTicks=this.numberTicks||aj;var N;for(Z=0;Z<this.numberTicks;Z++){N=parseFloat((aJ+Z*this.tickInterval).toFixed(11));this.ticks.push([N,N])}this.max=this.ticks[this.numberTicks-1][1];this.tickFactor=au;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}}if(!p&&!aE){var O=this.max-this.min;au=Math.floor(parseFloat((Math.log(O)/Math.log(10)).toFixed(11)))-1;var aL=[5,6,4,7,3,8,9,10,2],U,B,at=0,L;if(O>1){var aH=String(O);if(aH.search(/\./)==-1){var aD=aH.search(/0+$/);at=(aD>0)?aH.length-aD-1:0}}L=O/Math.pow(10,at);for(Z=0;Z<aL.length;Z++){U=L/(aL[Z]-1);if(U==parseInt(U,10)){this.numberTicks=aL[Z];this.tickInterval=O/(this.numberTicks-1);this.tickFactor=au+1;break}}var N;for(Z=0;Z<this.numberTicks;Z++){N=parseFloat((this.min+Z*this.tickInterval).toFixed(11));this.ticks.push([N,N])}this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1;var aF=[4,5,3,6,2];for(Z=0;Z<5;Z++){temp=this.tickInterval/aF[Z];if(temp==parseInt(temp)){this.numberMinorTicks=aF[Z]-1;break}}}}}var T=this._radius,aC=this.startAngle,g=this.endAngle,G=Math.PI,e=Math.PI/2;if(this.semiCircular){var x=Math.atan(this.innerPad/T),ab=this.outerStartAngle=aC-x,az=this.outerEndAngle=g+x,A=this.hubStartAngle=aC-Math.atan(this.innerPad/this.hubRadius*2),ae=this.hubEndAngle=g+Math.atan(this.innerPad/this.hubRadius*2);W.save();W.translate(this._center[0],this._center[1]);W.lineJoin="round";W.lineCap="round";W.save();W.beginPath();W.fillStyle=this.background;W.arc(0,0,T,ab,az,false);W.closePath();W.fill();W.restore();var ai="rgba(0,0,0,"+this.shadowAlpha+")";W.save();for(var Z=0;Z<this.shadowDepth;Z++){W.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));W.beginPath();W.strokeStyle=ai;W.lineWidth=this.shadowWidth;W.arc(0,0,T,ab,az,false);W.closePath();W.stroke()}W.restore();W.save();var ax=parseInt((this.shadowDepth+1)/2,10);for(var Z=0;Z<ax;Z++){W.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));W.beginPath();W.fillStyle=ai;W.arc(0,0,this.hubRadius,A,ae,false);W.closePath();W.fill()}W.restore();W.save();W.beginPath();W.strokeStyle=this.ringColor;W.lineWidth=this.ringWidth;W.arc(0,0,T,ab,az,false);W.closePath();W.stroke();W.restore();W.save();W.beginPath();W.fillStyle=this.ringColor;W.arc(0,0,this.hubRadius,A,ae,false);W.closePath();W.fill();W.restore();if(this.showTicks){W.save();var f=this.tickOuterRadius,ao=this.tickLength,u=ao/2,E=this.numberMinorTicks,al=this.span*Math.PI/180/(this.ticks.length-1),o=al/(E+1);for(Z=0;Z<this.ticks.length;Z++){W.beginPath();W.lineWidth=1.5+this.diameter/360;W.strokeStyle=this.ringColor;var ad=al*Z+aC;W.moveTo(-f*Math.cos(al*Z+aC),f*Math.sin(al*Z+aC));W.lineTo(-(f-ao)*Math.cos(al*Z+aC),(f-ao)*Math.sin(al*Z+aC));this._tickPoints.push([(f-ao)*Math.cos(al*Z+aC)+this._center[0]+this.canvas._offsets.left,(f-ao)*Math.sin(al*Z+aC)+this._center[1]+this.canvas._offsets.top,al*Z+aC]);W.stroke();W.lineWidth=1+this.diameter/440;if(Z<this.ticks.length-1){for(var X=1;X<=E;X++){W.beginPath();W.moveTo(-f*Math.cos(al*Z+o*X+aC),f*Math.sin(al*Z+o*X+aC));W.lineTo(-(f-u)*Math.cos(al*Z+o*X+aC),(f-u)*Math.sin(al*Z+o*X+aC));W.stroke()}}}W.restore()}if(this.showTickLabels){var I,V,S,aM,F,m=0;var am=this.tickPadding*(1-1/(this.diameter/80+1));for(Z=0;Z<this.ticks.length;Z++){I=c('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[Z][1]+"</div>");this.canvas._elem.after(I);aM=I.outerWidth(true);eh=I.outerHeight(true);V=this._tickPoints[Z][0]-aM*(this._tickPoints[Z][2]-Math.PI)/Math.PI-am*Math.cos(this._tickPoints[Z][2]);S=this._tickPoints[Z][1]-eh/2+eh/2*Math.pow(Math.abs((Math.sin(this._tickPoints[Z][2]))),0.5)+am/3*Math.pow(Math.abs((Math.sin(this._tickPoints[Z][2]))),0.5);I.css({left:V,top:S});F=aM*Math.cos(this._tickPoints[Z][2])+eh*Math.sin(Math.PI/2+this._tickPoints[Z][2]/2);m=(F>m)?F:m}}if(this.label&&this.labelPosition=="inside"){var V=this._center[0]+this.canvas._offsets.left;var am=this.tickPadding*(1-1/(this.diameter/80+1));var S=0.5*(this._center[1]+this.canvas._offsets.top-this.hubRadius)+0.5*(this._center[1]+this.canvas._offsets.top-this.tickOuterRadius+this.tickLength+am)+this.labelHeightAdjust;V-=this._labelElem.outerWidth(true)/2;S-=this._labelElem.outerHeight(true)/2;this._labelElem.css({left:V,top:S})}else{if(this.label&&this.labelPosition=="bottom"){var V=this._center[0]+this.canvas._offsets.left-this._labelElem.outerWidth(true)/2;var S=this._center[1]+this.canvas._offsets.top+this.innerPad+ +this.ringWidth+this.padding+this.labelHeightAdjust;this._labelElem.css({left:V,top:S})}}W.save();var av=this.intervalInnerRadius||this.hubRadius*1.5;if(this.intervalOuterRadius==null){if(this.showTickLabels){var af=(this.tickOuterRadius-this.tickLength-this.tickPadding-this.diameter/8)}else{var af=(this.tickOuterRadius-this.tickLength-this.diameter/16)}}else{var af=this.intervalOuterRadius}var O=this.max-this.min;var aB=this.intervals[this.intervals.length-1]-this.min;var y,Y,s=this.span*Math.PI/180;for(Z=0;Z<this.intervals.length;Z++){y=(Z==0)?aC:aC+(this.intervals[Z-1][0]-this.min)*s/O;if(y<0){y=0}Y=aC+(this.intervals[Z][0]-this.min)*s/O;if(Y<0){Y=0}W.beginPath();W.fillStyle=this.intervals[Z][2];W.arc(0,0,av,y,Y,false);W.lineTo(af*Math.cos(Y),af*Math.sin(Y));W.arc(0,0,af,Y,y,true);W.lineTo(av*Math.cos(y),av*Math.sin(y));W.closePath();W.fill()}W.restore();var aw=this.data[0][1];var Q=this.max-this.min;if(this.pegNeedle){if(this.data[0][1]>this.max+Q*3/this.span){aw=this.max+Q*3/this.span}if(this.data[0][1]<this.min-Q*3/this.span){aw=this.min-Q*3/this.span}}var ak=(aw-this.min)/Q*this.span*Math.PI/180+this.startAngle;W.save();W.beginPath();W.fillStyle=this.ringColor;W.strokeStyle=this.ringColor;this.needleLength=(this.tickOuterRadius-this.tickLength)*0.85;this.needleThickness=(this.needleThickness<2)?2:this.needleThickness;var aI=this.needleThickness*0.4;var v=this.needleLength/10;var q=(this.needleThickness-aI)/10;var ap;for(var Z=0;Z<10;Z++){ap=this.needleThickness-Z*q;W.moveTo(v*Z*Math.cos(ak),v*Z*Math.sin(ak));W.lineWidth=ap;W.lineTo(v*(Z+1)*Math.cos(ak),v*(Z+1)*Math.sin(ak));W.stroke()}W.restore()}else{this._center=[(J-aq*ah)/2+aq*ah,(R-aq*ag)/2+aq*ag]}};c.jqplot.MeterGaugeAxisRenderer=function(){c.jqplot.LinearAxisRenderer.call(this)};c.jqplot.MeterGaugeAxisRenderer.prototype=new c.jqplot.LinearAxisRenderer();c.jqplot.MeterGaugeAxisRenderer.prototype.constructor=c.jqplot.MeterGaugeAxisRenderer;c.jqplot.MeterGaugeAxisRenderer.prototype.init=function(e){this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;c.extend(true,this,e);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};c.jqplot.MeterGaugeLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.MeterGaugeLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.MeterGaugeLegendRenderer.prototype.constructor=c.jqplot.MeterGaugeLegendRenderer;c.jqplot.MeterGaugeLegendRenderer.prototype.init=function(e){this.numberRows=null;this.numberColumns=null;c.extend(true,this,e)};c.jqplot.MeterGaugeLegendRenderer.prototype.draw=function(){var g=this;if(this.show){var p=this._series;var t="position:absolute;";t+=(this.background)?"background:"+this.background+";":"";t+=(this.border)?"border:"+this.border+";":"";t+=(this.fontSize)?"font-size:"+this.fontSize+";":"";t+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";t+=(this.textColor)?"color:"+this.textColor+";":"";t+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";t+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";t+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";t+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+t+'"></table>');var x=false,o=false,e,m;var q=p[0];if(q.show){var y=q.data;if(this.numberRows){e=this.numberRows;if(!this.numberColumns){m=Math.ceil(y.length/e)}else{m=this.numberColumns}}else{if(this.numberColumns){m=this.numberColumns;e=Math.ceil(y.length/this.numberColumns)}else{e=y.length;m=1}}var w,v,f,k,h,l,n,u;var r=0;for(w=0;w<e;w++){if(o){f=c('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{f=c('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(v=0;v<m;v++){if(r<y.length){l=this.labels[r]||y[r][0].toString();u=colorGenerator.next();if(!o){if(w>0){x=true}else{x=false}}else{if(w==e-1){x=false}else{x=true}}n=(x)?this.rowSpacing:"0";k=c('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+n+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+u+';"></div></div></td>');h=c('<td class="jqplot-table-legend" style="padding-top:'+n+';"></td>');if(this.escapeHtml){h.text(l)}else{h.html(l)}if(o){h.prependTo(f);k.prependTo(f)}else{k.appendTo(f);h.appendTo(f)}x=true}r++}}}}return this._elem};function a(j,h,f){f=f||{};f.axesDefaults=f.axesDefaults||{};f.legend=f.legend||{};f.seriesDefaults=f.seriesDefaults||{};f.grid=f.grid||{};f.gridPadding=f.gridPadding||{};var e=false;if(f.seriesDefaults.renderer==c.jqplot.MeterGaugeRenderer){e=true}else{if(f.series){for(var g=0;g<f.series.length;g++){if(f.series[g].renderer==c.jqplot.MeterGaugeRenderer){e=true}}}}if(e){f.axesDefaults.renderer=c.jqplot.MeterGaugeAxisRenderer;f.legend.renderer=c.jqplot.MeterGaugeLegendRenderer;f.legend.preDraw=true;f.grid.background=f.grid.background||"white";f.grid.drawGridlines=false;f.grid.borderWidth=(f.grid.borderWidth!=null)?f.grid.borderWidth:0;f.grid.shadow=(f.grid.shadow!=null)?f.grid.shadow:false;f.gridPadding.top=(f.gridPadding.top!=null)?f.gridPadding.top:0;f.gridPadding.bottom=(f.gridPadding.bottom!=null)?f.gridPadding.bottom:0;f.gridPadding.left=(f.gridPadding.left!=null)?f.gridPadding.left:0;f.gridPadding.right=(f.gridPadding.right!=null)?f.gridPadding.right:0}}function d(e){}c.jqplot.preInitHooks.push(a);c.jqplot.postParseOptionsHooks.push(d);c.jqplot.MeterGaugeTickRenderer=function(){c.jqplot.AxisTickRenderer.call(this)};c.jqplot.MeterGaugeTickRenderer.prototype=new c.jqplot.AxisTickRenderer();c.jqplot.MeterGaugeTickRenderer.prototype.constructor=c.jqplot.MeterGaugeTickRenderer})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.ohlcRenderer.js.















































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.OHLCRenderer
     * jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.
     * 
     * To use this plugin, include the renderer js file in 
     * your source:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.ohlcRenderer.js"></script>
     * 
     * You will most likely want to use a date axis renderer
     * for the x axis also, so include the date axis render js file also:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.dateAxisRenderer.js"></script>
     * 
     * Then you set the renderer in the series options on your plot:
     * 
     * > series: [{renderer:$.jqplot.OHLCRenderer}]
     * 
     * For OHLC and candlestick charts, data should be specified
     * like so:
     * 
     * > dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]
     * 
     * If the data array has only 4 values per point instead of 5,
     * the renderer will create a Hi Low Close chart instead.  In that case,
     * data should be supplied like:
     * 
     * > dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]
     * 
     * To generate a candlestick chart instead of an OHLC chart,
     * set the "candlestick" option to true:
     * 
     * > series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],
     * 
     */
    $.jqplot.OHLCRenderer = function(){
        // subclass line renderer to make use of some of it's methods.
        $.jqplot.LineRenderer.call(this);
        // prop: candleStick
        // true to render chart as candleStick.
        // Must have an open price, cannot be a hlc chart.
        this.candleStick = false;
        // prop: tickLength
        // length of the line in pixels indicating open and close price.
        // Default will auto calculate based on plot width and 
        // number of points displayed.
        this.tickLength = 'auto';
        // prop: bodyWidth
        // width of the candlestick body in pixels.  Default will auto calculate
        // based on plot width and number of candlesticks displayed.
        this.bodyWidth = 'auto';
        // prop: openColor
        // color of the open price tick mark.  Default is series color.
        this.openColor = null;
        // prop: closeColor
        // color of the close price tick mark.  Default is series color.
        this.closeColor = null;
        // prop: wickColor
        // color of the hi-lo line thorugh the candlestick body.
        // Default is the series color.
        this.wickColor = null;
        // prop: fillUpBody
        // true to render an "up" day (close price greater than open price)
        // with a filled candlestick body.
        this.fillUpBody = false;
        // prop: fillDownBody
        // true to render a "down" day (close price lower than open price)
        // with a filled candlestick body.
        this.fillDownBody = true;
        // prop: upBodyColor
        // Color of candlestick body of an "up" day.  Default is series color.
        this.upBodyColor = null;
        // prop: downBodyColor
        // Color of candlestick body on a "down" day.  Default is series color.
        this.downBodyColor = null;
        // prop: hlc
        // true if is a hi-low-close chart (no open price).
        // This is determined automatically from the series data.
        this.hlc = false;
        this._tickLength;
        this._bodyWidth;
    };
    
    $.jqplot.OHLCRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.OHLCRenderer.prototype.constructor = $.jqplot.OHLCRenderer;
    
    // called with scope of series.
    $.jqplot.OHLCRenderer.prototype.init = function(options) {
        // prop: lineWidth
        // Width of the hi-low line and open/close ticks.
        this.lineWidth = 1.5;
        $.jqplot.LineRenderer.prototype.init.call(this, options);
        // set the yaxis data bounds here to account for hi and low values
        var db = this._yaxis._dataBounds;
        var d = this._plotData;
        // if data points have less than 5 values, force a hlc chart.
        if (d[0].length < 5) {
            this.renderer.hlc = true;

            for (var j=0; j<d.length; j++) { 
                if (d[j][2] < db.min || db.min == null) {
                    db.min = d[j][2];
                }
                if (d[j][1] > db.max || db.max == null) {
                    db.max = d[j][1];
                }             
            }
        }
        else {
            for (var j=0; j<d.length; j++) { 
                if (d[j][3] < db.min || db.min == null) {
                    db.min = d[j][3];
                }
                if (d[j][2] > db.max || db.max == null) {
                    db.max = d[j][2];
                }             
            }
        }
        
    };
    
    // called within scope of series.
    $.jqplot.OHLCRenderer.prototype.draw = function(ctx, gd, options) {
        var d = this.data;
        var xmin = this._xaxis.min;
        var xmax = this._xaxis.max;
        // index of last value below range of plot.
        var xminidx = 0;
        // index of first value above range of plot.
        var xmaxidx = d.length;
        var xp = this._xaxis.series_u2p;
        var yp = this._yaxis.series_u2p;
        var i, prevColor, ops, b, h, w, a, points;
        var o;
        var r = this.renderer;
        var opts = (options != undefined) ? options : {};
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke;
        r.bodyWidth = (opts.bodyWidth != undefined) ? opts.bodyWidth : r.bodyWidth;
        r.tickLength = (opts.tickLength != undefined) ? opts.tickLength : r.tickLength;
        ctx.save();
        if (this.show) {
            var x, open, hi, low, close;
            // need to get widths based on number of points shown,
            // not on total number of points.  Use the results 
            // to speed up drawing in next step.
            for (var i=0; i<d.length; i++) {
                if (d[i][0] < xmin) {
                    xminidx = i;
                }
                else if (d[i][0] < xmax) {
                    xmaxidx = i+1;
                }
            }
            
            if (r.candleStick) {
                if (typeof(r.bodyWidth) == 'number') {
                    r._bodyWidth = r.bodyWidth;
                }
                else {
                    r._bodyWidth = Math.min(20, ctx.canvas.width/(xmaxidx - xminidx)/2);
                }
            }
            else {
                if (typeof(r.tickLength) == 'number') {
                    r._tickLength = r.tickLength;
                }
                else {
                    r._tickLength = Math.min(10, ctx.canvas.width/(xmaxidx - xminidx)/4);
                }
            }
            
            for (var i=xminidx; i<xmaxidx; i++) {
                x = xp(d[i][0]);
                if (r.hlc) {
                    open = null;
                    hi = yp(d[i][1]);
                    low = yp(d[i][2]);
                    close = yp(d[i][3]);
                }
                else {
                    open = yp(d[i][1]);
                    hi = yp(d[i][2]);
                    low = yp(d[i][3]);
                    close = yp(d[i][4]);
                }
                o = {};
                if (r.candleStick && !r.hlc) {
                    w = r._bodyWidth;
                    a = x - w/2;
                    // draw candle
                    // determine if candle up or down
                    // up, remember grid coordinates increase downward
                    if (close < open) {
                        // draw wick
                        if (r.wickColor) {
                            o.color = r.wickColor;
                        }
                        else if (r.downBodyColor) {
                            o.color = r.upBodyColor;
                        }
                        ops = $.extend(true, {}, opts, o);
                        r.shapeRenderer.draw(ctx, [[x, hi], [x, close]], ops); 
                        r.shapeRenderer.draw(ctx, [[x, open], [x, low]], ops); 
                        o = {};
                        b = close;
                        h = open - close;
                        // if color specified, use it
                        if (r.fillUpBody) {
                            o.fillRect = true;
                        }
                        else {
                            o.strokeRect = true;
                            w = w - this.lineWidth;
                            a = x - w/2;
                        }
                        if (r.upBodyColor) {
                            o.color = r.upBodyColor;
                            o.fillStyle = r.upBodyColor;
                        }
                        points = [a, b, w, h];
                    }
                    // down
                    else if (close >  open) {
                        // draw wick
                        if (r.wickColor) {
                            o.color = r.wickColor;
                        }
                        else if (r.downBodyColor) {
                            o.color = r.downBodyColor;
                        }
                        ops = $.extend(true, {}, opts, o);
                        r.shapeRenderer.draw(ctx, [[x, hi], [x, open]], ops); 
                        r.shapeRenderer.draw(ctx, [[x, close], [x, low]], ops);
                         
                        o = {};
                        
                        b = open;
                        h = close - open;
                        // if color specified, use it
                        if (r.fillDownBody) {
                            o.fillRect = true;
                        }
                        else {
                            o.strokeRect = true;
                            w = w - this.lineWidth;
                            a = x - w/2;
                        }
                        if (r.downBodyColor) {
                            o.color = r.downBodyColor;
                            o.fillStyle = r.downBodyColor;
                        }
                        points = [a, b, w, h];
                    }
                    // even, open = close
                    else  {
                        // draw wick
                        if (r.wickColor) {
                            o.color = r.wickColor;
                        }
                        ops = $.extend(true, {}, opts, o);
                        r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], ops); 
                        o = {};
                        o.fillRect = false;
                        o.strokeRect = false;
                        a = [x - w/2, open];
                        b = [x + w/2, close];
                        w = null;
                        h = null;
                        points = [a, b];
                    }
                    ops = $.extend(true, {}, opts, o);
                    r.shapeRenderer.draw(ctx, points, ops);
                }
                else {
                    prevColor = opts.color;
                    if (r.openColor) {
                        opts.color = r.openColor;
                    }
                    // draw open tick
                    if (!r.hlc) {
                        r.shapeRenderer.draw(ctx, [[x-r._tickLength, open], [x, open]], opts);    
                    }
                    opts.color = prevColor;
                    // draw wick
                    if (r.wickColor) {
                        opts.color = r.wickColor;
                    }
                    r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], opts); 
                    opts.color  = prevColor;
                    // draw close tick
                    if (r.closeColor) {
                        opts.color = r.closeColor;
                    }
                    r.shapeRenderer.draw(ctx, [[x, close], [x+r._tickLength, close]], opts); 
                    opts.color = prevColor;
                }
            }
        }
        
        ctx.restore();
    };  
    
    $.jqplot.OHLCRenderer.prototype.drawShadow = function(ctx, gd, options) {
        // This is a no-op, shadows drawn with lines.
    };
    
    // called with scope of plot.
    $.jqplot.OHLCRenderer.checkOptions = function(target, data, options) {
        // provide some sensible highlighter options by default
        // These aren't good for hlc, only for ohlc or candlestick
        if (!options.highlighter) {
            options.highlighter = {
                showMarker:false,
                tooltipAxes: 'y',
                yvalues: 4,
                formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'
            };
        }
    };
    
    //$.jqplot.preInitHooks.push($.jqplot.OHLCRenderer.checkOptions);
    
})(jQuery);    

Added Site/Site_W/jpqplot/plugins/jqplot.ohlcRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(a){a.jqplot.OHLCRenderer=function(){a.jqplot.LineRenderer.call(this);this.candleStick=false;this.tickLength="auto";this.bodyWidth="auto";this.openColor=null;this.closeColor=null;this.wickColor=null;this.fillUpBody=false;this.fillDownBody=true;this.upBodyColor=null;this.downBodyColor=null;this.hlc=false;this._tickLength;this._bodyWidth};a.jqplot.OHLCRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.OHLCRenderer.prototype.constructor=a.jqplot.OHLCRenderer;a.jqplot.OHLCRenderer.prototype.init=function(e){this.lineWidth=1.5;a.jqplot.LineRenderer.prototype.init.call(this,e);var b=this._yaxis._dataBounds;var f=this._plotData;if(f[0].length<5){this.renderer.hlc=true;for(var c=0;c<f.length;c++){if(f[c][2]<b.min||b.min==null){b.min=f[c][2]}if(f[c][1]>b.max||b.max==null){b.max=f[c][1]}}}else{for(var c=0;c<f.length;c++){if(f[c][3]<b.min||b.min==null){b.min=f[c][3]}if(f[c][2]>b.max||b.max==null){b.max=f[c][2]}}}};a.jqplot.OHLCRenderer.prototype.draw=function(z,J,g){var G=this.data;var u=this._xaxis.min;var y=this._xaxis.max;var k=0;var H=G.length;var n=this._xaxis.series_u2p;var F=this._yaxis.series_u2p;var C,D,e,I,E,m,K,B;var v;var t=this.renderer;var q=(g!=undefined)?g:{};var j=(q.shadow!=undefined)?q.shadow:this.shadow;var A=(q.fill!=undefined)?q.fill:this.fill;var c=(q.fillAndStroke!=undefined)?q.fillAndStroke:this.fillAndStroke;t.bodyWidth=(q.bodyWidth!=undefined)?q.bodyWidth:t.bodyWidth;t.tickLength=(q.tickLength!=undefined)?q.tickLength:t.tickLength;z.save();if(this.show){var l,p,f,L,s;for(var C=0;C<G.length;C++){if(G[C][0]<u){k=C}else{if(G[C][0]<y){H=C+1}}}if(t.candleStick){if(typeof(t.bodyWidth)=="number"){t._bodyWidth=t.bodyWidth}else{t._bodyWidth=Math.min(20,z.canvas.width/(H-k)/2)}}else{if(typeof(t.tickLength)=="number"){t._tickLength=t.tickLength}else{t._tickLength=Math.min(10,z.canvas.width/(H-k)/4)}}for(var C=k;C<H;C++){l=n(G[C][0]);if(t.hlc){p=null;f=F(G[C][1]);L=F(G[C][2]);s=F(G[C][3])}else{p=F(G[C][1]);f=F(G[C][2]);L=F(G[C][3]);s=F(G[C][4])}v={};if(t.candleStick&&!t.hlc){m=t._bodyWidth;K=l-m/2;if(s<p){if(t.wickColor){v.color=t.wickColor}else{if(t.downBodyColor){v.color=t.upBodyColor}}e=a.extend(true,{},q,v);t.shapeRenderer.draw(z,[[l,f],[l,s]],e);t.shapeRenderer.draw(z,[[l,p],[l,L]],e);v={};I=s;E=p-s;if(t.fillUpBody){v.fillRect=true}else{v.strokeRect=true;m=m-this.lineWidth;K=l-m/2}if(t.upBodyColor){v.color=t.upBodyColor;v.fillStyle=t.upBodyColor}B=[K,I,m,E]}else{if(s>p){if(t.wickColor){v.color=t.wickColor}else{if(t.downBodyColor){v.color=t.downBodyColor}}e=a.extend(true,{},q,v);t.shapeRenderer.draw(z,[[l,f],[l,p]],e);t.shapeRenderer.draw(z,[[l,s],[l,L]],e);v={};I=p;E=s-p;if(t.fillDownBody){v.fillRect=true}else{v.strokeRect=true;m=m-this.lineWidth;K=l-m/2}if(t.downBodyColor){v.color=t.downBodyColor;v.fillStyle=t.downBodyColor}B=[K,I,m,E]}else{if(t.wickColor){v.color=t.wickColor}e=a.extend(true,{},q,v);t.shapeRenderer.draw(z,[[l,f],[l,L]],e);v={};v.fillRect=false;v.strokeRect=false;K=[l-m/2,p];I=[l+m/2,s];m=null;E=null;B=[K,I]}}e=a.extend(true,{},q,v);t.shapeRenderer.draw(z,B,e)}else{D=q.color;if(t.openColor){q.color=t.openColor}if(!t.hlc){t.shapeRenderer.draw(z,[[l-t._tickLength,p],[l,p]],q)}q.color=D;if(t.wickColor){q.color=t.wickColor}t.shapeRenderer.draw(z,[[l,f],[l,L]],q);q.color=D;if(t.closeColor){q.color=t.closeColor}t.shapeRenderer.draw(z,[[l,s],[l+t._tickLength,s]],q);q.color=D}}}z.restore()};a.jqplot.OHLCRenderer.prototype.drawShadow=function(b,d,c){};a.jqplot.OHLCRenderer.checkOptions=function(d,c,b){if(!b.highlighter){b.highlighter={showMarker:false,tooltipAxes:"y",yvalues:4,formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><tr><td>hi:</td><td>%s</td></tr><tr><td>low:</td><td>%s</td></tr><tr><td>close:</td><td>%s</td></tr></table>'}}}})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.pieRenderer.js.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    /**
     * Class: $.jqplot.PieRenderer
     * Plugin renderer to draw a pie chart.
     * x values, if present, will be used as slice labels.
     * y values give slice size.
     * 
     * To use this renderer, you need to include the 
     * pie renderer plugin, for example:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.pieRenderer.js"></script>
     * 
     * Properties described here are passed into the $.jqplot function
     * as options on the series renderer.  For example:
     * 
     * > plot2 = $.jqplot('chart2', [s1, s2], {
     * >     seriesDefaults: {
     * >         renderer:$.jqplot.PieRenderer,
     * >         rendererOptions:{
     * >              sliceMargin: 2,
     * >              startAngle: -90
     * >          }
     * >      }
     * > });
     * 
     * A pie plot will trigger events on the plot target
     * according to user interaction.  All events return the event object,
     * the series index, the point (slice) index, and the point data for 
     * the appropriate slice.
     * 
     * 'jqplotDataMouseOver' - triggered when user mouseing over a slice.
     * 'jqplotDataHighlight' - triggered the first time user mouses over a slice,
     * if highlighting is enabled.
     * 'jqplotDataUnhighlight' - triggered when a user moves the mouse out of
     * a highlighted slice.
     * 'jqplotDataClick' - triggered when the user clicks on a slice.
     * 'jqplotDataRightClick' - tiggered when the user right clicks on a slice if
     * the "captureRightClick" option is set to true on the plot.
     */
    $.jqplot.PieRenderer = function(){
        $.jqplot.LineRenderer.call(this);
    };
    
    $.jqplot.PieRenderer.prototype = new $.jqplot.LineRenderer();
    $.jqplot.PieRenderer.prototype.constructor = $.jqplot.PieRenderer;
    
    // called with scope of a series
    $.jqplot.PieRenderer.prototype.init = function(options, plot) {
        // Group: Properties
        //
        // prop: diameter
        // Outer diameter of the pie, auto computed by default
        this.diameter = null;
        // prop: padding
        // padding between the pie and plot edges, legend, etc.
        this.padding = 20;
        // prop: sliceMargin
        // angular spacing between pie slices in degrees.
        this.sliceMargin = 0;
        // prop: fill
        // true or false, wether to fil the slices.
        this.fill = true;
        // prop: shadowOffset
        // offset of the shadow from the slice and offset of 
        // each succesive stroke of the shadow from the last.
        this.shadowOffset = 2;
        // prop: shadowAlpha
        // transparency of the shadow (0 = transparent, 1 = opaque)
        this.shadowAlpha = 0.07;
        // prop: shadowDepth
        // number of strokes to apply to the shadow, 
        // each stroke offset shadowOffset from the last.
        this.shadowDepth = 5;
        // prop: highlightMouseOver
        // True to highlight slice when moused over.
        // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
        this.highlightMouseOver = true;
        // prop: highlightMouseDown
        // True to highlight when a mouse button is pressed over a slice.
        // This will be disabled if highlightMouseOver is true.
        this.highlightMouseDown = false;
        // prop: highlightColors
        // an array of colors to use when highlighting a slice.
        this.highlightColors = [];
        // prop: dataLabels
        // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
        // Defaults to percentage of each pie slice.
        this.dataLabels = 'percent';
        // prop: showDataLabels
        // true to show data labels on slices.
        this.showDataLabels = false;
        // prop: dataLabelFormatString
        // Format string for data labels.  If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
        this.dataLabelFormatString = null;
        // prop: dataLabelThreshold
        // Threshhold in percentage (0 - 100) of pie area, below which no label will be displayed.
        // This applies to all label types, not just to percentage labels.
        this.dataLabelThreshold = 3;
        // prop: dataLabelPositionFactor
        // A Multiplier (0-1) of the pie radius which controls position of label on slice.
        // Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.
        this.dataLabelPositionFactor = 0.52;
        // prop: dataLabelNudge
        // Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
        this.dataLabelNudge = 2;
        // prop: dataLabelCenterOn
        // True to center the data label at its position.
        // False to set the inside facing edge of the label at its position.
        this.dataLabelCenterOn = true;
        // prop: startAngle
        // Angle to start drawing pie in degrees.  
        // According to orientation of canvas coordinate system:
        // 0 = on the positive x axis
        // -90 = on the positive y axis.
        // 90 = on the negaive y axis.
        // 180 or - 180 = on the negative x axis.
        this.startAngle = 0;
        this.tickRenderer = $.jqplot.PieTickRenderer;
        // Used as check for conditions where pie shouldn't be drawn.
        this._drawData = true;
        
        // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
        if (options.highlightMouseDown && options.highlightMouseOver == null) {
            options.highlightMouseOver = false;
        }
        
        $.extend(true, this, options);
        if (this.diameter != null) {
            this.diameter = this.diameter - this.sliceMargin;
        }
        this._diameter = null;
        this._radius = null;
        // array of [start,end] angles arrays, one for each slice.  In radians.
        this._sliceAngles = [];
        // index of the currenty highlighted point, if any
        this._highlightedPoint = null;
        
        // set highlight colors if none provided
        if (this.highlightColors.length == 0) {
            for (var i=0; i<this.seriesColors.length; i++){
                var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
                var newrgb = [rgba[0], rgba[1], rgba[2]];
                var sum = newrgb[0] + newrgb[1] + newrgb[2];
                for (var j=0; j<3; j++) {
                    // when darkening, lowest color component can be is 60.
                    newrgb[j] = (sum > 570) ?  newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
                    newrgb[j] = parseInt(newrgb[j], 10);
                }
                this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
            }
        }
        
        this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors);
        
        plot.postParseOptionsHooks.addOnce(postParseOptions);
        plot.postInitHooks.addOnce(postInit);
        plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
        plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
        plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
        plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
        plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
        plot.postDrawHooks.addOnce(postPlotDraw);
    };
    
    $.jqplot.PieRenderer.prototype.setGridData = function(plot) {
        // set gridData property.  This will hold angle in radians of each data point.
        var stack = [];
        var td = [];
        var sa = this.startAngle/180*Math.PI;
        var tot = 0;
        // don't know if we have any valid data yet, so set plot to not draw.
        this._drawData = false;
        for (var i=0; i<this.data.length; i++){
            if (this.data[i][1] != 0) {
                // we have data, O.K. to draw.
                this._drawData = true;
            }
            stack.push(this.data[i][1]);
            td.push([this.data[i][0]]);
            if (i>0) {
                stack[i] += stack[i-1];
            }
            tot += this.data[i][1];
        }
        var fact = Math.PI*2/stack[stack.length - 1];
        
        for (var i=0; i<stack.length; i++) {
            td[i][1] = stack[i] * fact;
            td[i][2] = this.data[i][1]/tot;
        }
        this.gridData = td;
    };
    
    $.jqplot.PieRenderer.prototype.makeGridData = function(data, plot) {
        var stack = [];
        var td = [];
        var tot = 0;
        var sa = this.startAngle/180*Math.PI;
        // don't know if we have any valid data yet, so set plot to not draw.
        this._drawData = false;
        for (var i=0; i<data.length; i++){
            if (this.data[i][1] != 0) {
                // we have data, O.K. to draw.
                this._drawData = true;
            }
            stack.push(data[i][1]);
            td.push([data[i][0]]);
            if (i>0) {
                stack[i] += stack[i-1];
            }
            tot += data[i][1];
        }
        var fact = Math.PI*2/stack[stack.length - 1];
        
        for (var i=0; i<stack.length; i++) {
            td[i][1] = stack[i] * fact;
            td[i][2] = data[i][1]/tot;
        }
        return td;
    };
    
    $.jqplot.PieRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) {
        if (this._drawData) {
            var r = this._diameter / 2;
            var fill = this.fill;
            var lineWidth = this.lineWidth;
            ctx.save();
            ctx.translate(this._center[0], this._center[1]);
            ctx.translate(this.sliceMargin*Math.cos((ang1+ang2)/2), this.sliceMargin*Math.sin((ang1+ang2)/2));
    
            if (isShadow) {
                for (var i=0; i<this.shadowDepth; i++) {
                    ctx.save();
                    ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
                    doDraw();
                }
            }
    
            else {
                doDraw();
            }
        }
    
        function doDraw () {
            // Fix for IE and Chrome that can't seem to draw circles correctly.
            // ang2 should always be <= 2 pi since that is the way the data is converted.
             if (ang2 > 6.282 + this.startAngle) {
                ang2 = 6.282 + this.startAngle;
                if (ang1 > ang2) {
                    ang1 = 6.281 + this.startAngle;
                }
            }
            // Fix for IE, where it can't seem to handle 0 degree angles.  Also avoids
            // ugly line on unfilled pies.
            if (ang1 >= ang2) {
                return;
            }            
        
            ctx.beginPath();  
            ctx.fillStyle = color;
            ctx.strokeStyle = color;
            ctx.lineWidth = lineWidth;
            ctx.arc(0, 0, r, ang1, ang2, false);
            ctx.lineTo(0,0);
            ctx.closePath();
        
            if (fill) {
                ctx.fill();
            }
            else {
                ctx.stroke();
            }
        }
        
        if (isShadow) {
            for (var i=0; i<this.shadowDepth; i++) {
                ctx.restore();
            }
        }
        
        ctx.restore();
    };
    
    // called with scope of series
    $.jqplot.PieRenderer.prototype.draw = function (ctx, gd, options, plot) {
        var i;
        var opts = (options != undefined) ? options : {};
        // offset and direction of offset due to legend placement
        var offx = 0;
        var offy = 0;
        var trans = 1;
        var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
        if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
            var li = options.legendInfo;
            switch (li.location) {
                case 'nw':
                    offx = li.width + li.xoffset;
                    break;
                case 'w':
                    offx = li.width + li.xoffset;
                    break;
                case 'sw':
                    offx = li.width + li.xoffset;
                    break;
                case 'ne':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'e':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'se':
                    offx = li.width + li.xoffset;
                    trans = -1;
                    break;
                case 'n':
                    offy = li.height + li.yoffset;
                    break;
                case 's':
                    offy = li.height + li.yoffset;
                    trans = -1;
                    break;
                default:
                    break;
            }
        }
        
        var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
        var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
        var fill = (opts.fill != undefined) ? opts.fill : this.fill;
        var cw = ctx.canvas.width;
        var ch = ctx.canvas.height;
        var w = cw - offx - 2 * this.padding;
        var h = ch - offy - 2 * this.padding;
        var mindim = Math.min(w,h);
        var d = mindim;
        // this._diameter = this.diameter || d;
        this._diameter = this.diameter  || d - this.sliceMargin;

        var r = this._radius = this._diameter/2;
        var sa = this.startAngle / 180 * Math.PI;
        this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
        
        if (this.shadow) {
            var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
            for (var i=0; i<gd.length; i++) {
                var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
                // Adjust ang1 and ang2 for sliceMargin
                ang1 += this.sliceMargin/180*Math.PI;
                this.renderer.drawSlice.call (this, ctx, ang1, gd[i][1]+sa, shadowColor, true);
            }
            
        }
        for (var i=0; i<gd.length; i++) {
            var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
            // Adjust ang1 and ang2 for sliceMargin
            ang1 += this.sliceMargin/180*Math.PI;
            var ang2 = gd[i][1] + sa;
            this._sliceAngles.push([ang1, ang2]);
                      
            this.renderer.drawSlice.call (this, ctx, ang1, ang2, colorGenerator.next(), false);
        
            if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) {
                var fstr, avgang = (ang1+ang2)/2, label;
            
                if (this.dataLabels == 'label') {
                    fstr = this.dataLabelFormatString || '%s';
                    label = $.jqplot.sprintf(fstr, gd[i][0]);
                }
                else if (this.dataLabels == 'value') {
                    fstr = this.dataLabelFormatString || '%d';
                    label = $.jqplot.sprintf(fstr, this.data[i][1]);
                }
                else if (this.dataLabels == 'percent') {
                    fstr = this.dataLabelFormatString || '%d%%';
                    label = $.jqplot.sprintf(fstr, gd[i][2]*100);
                }
                else if (this.dataLabels.constructor == Array) {
                    fstr = this.dataLabelFormatString || '%s';
                    label = $.jqplot.sprintf(fstr, this.dataLabels[i]);
                }
            
                var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
            
                var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left;
                var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top;
            
                var labelelem = $('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">' + label + '</div>').insertBefore(plot.eventCanvas._elem);
                if (this.dataLabelCenterOn) {
                    x -= labelelem.width()/2;
                    y -= labelelem.height()/2;
                }
                else {
                    x -= labelelem.width() * Math.sin(avgang/2);
                    y -= labelelem.height()/2;
                }
                x = Math.round(x);
                y = Math.round(y);
                labelelem.css({left: x, top: y});
            }
        }
               
    };
    
    $.jqplot.PieAxisRenderer = function() {
        $.jqplot.LinearAxisRenderer.call(this);
    };
    
    $.jqplot.PieAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
    $.jqplot.PieAxisRenderer.prototype.constructor = $.jqplot.PieAxisRenderer;
        
    
    // There are no traditional axes on a pie chart.  We just need to provide
    // dummy objects with properties so the plot will render.
    // called with scope of axis object.
    $.jqplot.PieAxisRenderer.prototype.init = function(options){
        //
        this.tickRenderer = $.jqplot.PieTickRenderer;
        $.extend(true, this, options);
        // I don't think I'm going to need _dataBounds here.
        // have to go Axis scaling in a way to fit chart onto plot area
        // and provide u2p and p2u functionality for mouse cursor, etc.
        // for convienence set _dataBounds to 0 and 100 and
        // set min/max to 0 and 100.
        this._dataBounds = {min:0, max:100};
        this.min = 0;
        this.max = 100;
        this.showTicks = false;
        this.ticks = [];
        this.showMark = false;
        this.show = false; 
    };
    
    
    
    
    $.jqplot.PieLegendRenderer = function(){
        $.jqplot.TableLegendRenderer.call(this);
    };
    
    $.jqplot.PieLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
    $.jqplot.PieLegendRenderer.prototype.constructor = $.jqplot.PieLegendRenderer;
    
    /**
     * Class: $.jqplot.PieLegendRenderer
     * Legend Renderer specific to pie plots.  Set by default
     * when user creates a pie plot.
     */
    $.jqplot.PieLegendRenderer.prototype.init = function(options) {
        // Group: Properties
        //
        // prop: numberRows
        // Maximum number of rows in the legend.  0 or null for unlimited.
        this.numberRows = null;
        // prop: numberColumns
        // Maximum number of columns in the legend.  0 or null for unlimited.
        this.numberColumns = null;
        $.extend(true, this, options);
    };
    
    // called with context of legend
    $.jqplot.PieLegendRenderer.prototype.draw = function() {
        var legend = this;
        if (this.show) {
            var series = this._series;
            var ss = 'position:absolute;';
            ss += (this.background) ? 'background:'+this.background+';' : '';
            ss += (this.border) ? 'border:'+this.border+';' : '';
            ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
            ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
            ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
            ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
            ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
            ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
            ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
            this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
            // Pie charts legends don't go by number of series, but by number of data points
            // in the series.  Refactor things here for that.
            
            var pad = false, 
                reverse = false,
                nr, nc;
            var s = series[0];
            var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
            
            if (s.show) {
                var pd = s.data;
                if (this.numberRows) {
                    nr = this.numberRows;
                    if (!this.numberColumns){
                        nc = Math.ceil(pd.length/nr);
                    }
                    else{
                        nc = this.numberColumns;
                    }
                }
                else if (this.numberColumns) {
                    nc = this.numberColumns;
                    nr = Math.ceil(pd.length/this.numberColumns);
                }
                else {
                    nr = pd.length;
                    nc = 1;
                }
                
                var i, j, tr, td1, td2, lt, rs, color;
                var idx = 0;    
                
                for (i=0; i<nr; i++) {
                    if (reverse){
                        tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
                    }
                    else{
                        tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
                    }
                    for (j=0; j<nc; j++) {
                        if (idx < pd.length){
                            lt = this.labels[idx] || pd[idx][0].toString();
                            color = colorGenerator.next();
                            if (!reverse){
                                if (i>0){
                                    pad = true;
                                }
                                else{
                                    pad = false;
                                }
                            }
                            else{
                                if (i == nr -1){
                                    pad = false;
                                }
                                else{
                                    pad = true;
                                }
                            }
                            rs = (pad) ? this.rowSpacing : '0';
                
                            td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
                                '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
                                '</div></td>');
                            td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
                            if (this.escapeHtml){
                                td2.text(lt);
                            }
                            else {
                                td2.html(lt);
                            }
                            if (reverse) {
                                td2.prependTo(tr);
                                td1.prependTo(tr);
                            }
                            else {
                                td1.appendTo(tr);
                                td2.appendTo(tr);
                            }
                            pad = true;
                        }
                        idx++;
                    }   
                }
            }
        }
        return this._elem;                
    };
    
    $.jqplot.PieRenderer.prototype.handleMove = function(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            plot.target.trigger('jqplotDataMouseOver', ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                plot.target.trigger('jqplotDataHighlight', ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    };
    
    
    // this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]);
    
    // setup default renderers for axes and legend so user doesn't have to
    // called with scope of plot
    function preInit(target, data, options) {
        options = options || {};
        options.axesDefaults = options.axesDefaults || {};
        options.legend = options.legend || {};
        options.seriesDefaults = options.seriesDefaults || {};
        // only set these if there is a pie series
        var setopts = false;
        if (options.seriesDefaults.renderer == $.jqplot.PieRenderer) {
            setopts = true;
        }
        else if (options.series) {
            for (var i=0; i < options.series.length; i++) {
                if (options.series[i].renderer == $.jqplot.PieRenderer) {
                    setopts = true;
                }
            }
        }
        
        if (setopts) {
            options.axesDefaults.renderer = $.jqplot.PieAxisRenderer;
            options.legend.renderer = $.jqplot.PieLegendRenderer;
            options.legend.preDraw = true;
            options.seriesDefaults.pointLabels = {show: false};
        }
    }
    
    function postInit(target, data, options) {
        for (i=0; i<this.series.length; i++) {
            if (this.series[i].renderer.constructor == $.jqplot.PieRenderer) {
                // don't allow mouseover and mousedown at same time.
                if (this.series[i].highlightMouseOver) {
                    this.series[i].highlightMouseDown = false;
                }
            }
        }
        this.target.bind('mouseout', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
    }
    
    // called with scope of plot
    function postParseOptions(options) {
        for (var i=0; i<this.series.length; i++) {
            this.series[i].seriesColors = this.seriesColors;
            this.series[i].colorGenerator = this.colorGenerator;
        }
    }
    
    function highlight (plot, sidx, pidx) {
        var s = plot.series[sidx];
        var canvas = plot.plugins.pieRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        s._highlightedPoint = pidx;
        plot.plugins.pieRenderer.highlightedSeriesIndex = sidx;
        s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColorGenerator.get(pidx), false);
    }
    
    function unhighlight (plot) {
        var canvas = plot.plugins.pieRenderer.highlightCanvas;
        canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
        for (var i=0; i<plot.series.length; i++) {
            plot.series[i]._highlightedPoint = null;
        }
        plot.plugins.pieRenderer.highlightedSeriesIndex = null;
        plot.target.trigger('jqplotDataUnhighlight');
    }
 
    function handleMove(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt1 = jQuery.Event('jqplotDataMouseOver');
            evt1.pageX = ev.pageX;
            evt1.pageY = ev.pageY;
            plot.target.trigger(evt1, ins);
            if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    } 
    
    function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
                var evt = jQuery.Event('jqplotDataHighlight');
                evt.pageX = ev.pageX;
                evt.pageY = ev.pageY;
                plot.target.trigger(evt, ins);
                highlight (plot, ins[0], ins[1]);
            }
        }
        else if (neighbor == null) {
            unhighlight (plot);
        }
    }
    
    function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
        var idx = plot.plugins.pieRenderer.highlightedSeriesIndex;
        if (idx != null && plot.series[idx].highlightMouseDown) {
            unhighlight(plot);
        }
    }
    
    function handleClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var evt = jQuery.Event('jqplotDataClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }
    
    function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
        if (neighbor) {
            var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
            var idx = plot.plugins.pieRenderer.highlightedSeriesIndex;
            if (idx != null && plot.series[idx].highlightMouseDown) {
                unhighlight(plot);
            }
            var evt = jQuery.Event('jqplotDataRightClick');
            evt.pageX = ev.pageX;
            evt.pageY = ev.pageY;
            plot.target.trigger(evt, ins);
        }
    }    
    
    // called within context of plot
    // create a canvas which we can draw on.
    // insert it before the eventCanvas, so eventCanvas will still capture events.
    function postPlotDraw() {
        this.plugins.pieRenderer = {highlightedSeriesIndex:null};
        this.plugins.pieRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
        
        // do we have any data labels?  if so, put highlight canvas before those
        var labels = $(this.targetId+' .jqplot-data-label');
        if (labels.length) {
            $(labels[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions));
        }
        // else put highlight canvas before event canvas.
        else {
            this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions));
        }
        
        var hctx = this.plugins.pieRenderer.highlightCanvas.setContext();
    }
    
    $.jqplot.preInitHooks.push(preInit);
    
    $.jqplot.PieTickRenderer = function() {
        $.jqplot.AxisTickRenderer.call(this);
    };
    
    $.jqplot.PieTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
    $.jqplot.PieTickRenderer.prototype.constructor = $.jqplot.PieTickRenderer;
    
})(jQuery);
    
    

Added Site/Site_W/jpqplot/plugins/jqplot.pieRenderer.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(p,t){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var n=[q[0],q[1],q[2]];var s=n[0]+n[1]+n[2];for(var o=0;o<3;o++){n[o]=(s>570)?n[o]*0.8:n[o]+0.3*(255-n[o]);n[o]=parseInt(n[o],10)}this.highlightColors.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);t.postParseOptionsHooks.addOnce(l);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",k);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",m);t.postDrawHooks.addOnce(h)};e.jqplot.PieRenderer.prototype.setGridData=function(s){var o=[];var t=[];var n=this.startAngle/180*Math.PI;var r=0;this._drawData=false;for(var q=0;q<this.data.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(this.data[q][1]);t.push([this.data[q][0]]);if(q>0){o[q]+=o[q-1]}r+=this.data[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){t[q][1]=o[q]*p;t[q][2]=this.data[q][1]/r}this.gridData=t};e.jqplot.PieRenderer.prototype.makeGridData=function(s,t){var o=[];var u=[];var r=0;var n=this.startAngle/180*Math.PI;this._drawData=false;for(var q=0;q<s.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(s[q][1]);u.push([s[q][0]]);if(q>0){o[q]+=o[q-1]}r+=s[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){u[q][1]=o[q]*p;u[q][2]=s[q][1]/r}return u};e.jqplot.PieRenderer.prototype.drawSlice=function(x,v,u,p,s){if(this._drawData){var n=this._diameter/2;var w=this.fill;var t=this.lineWidth;x.save();x.translate(this._center[0],this._center[1]);x.translate(this.sliceMargin*Math.cos((v+u)/2),this.sliceMargin*Math.sin((v+u)/2));if(s){for(var q=0;q<this.shadowDepth;q++){x.save();x.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));o()}}else{o()}}function o(){if(u>6.282+this.startAngle){u=6.282+this.startAngle;if(v>u){v=6.281+this.startAngle}}if(v>=u){return}x.beginPath();x.fillStyle=p;x.strokeStyle=p;x.lineWidth=t;x.arc(0,0,n,v,u,false);x.lineTo(0,0);x.closePath();if(w){x.fill()}else{x.stroke()}}if(s){for(var q=0;q<this.shadowDepth;q++){x.restore()}}x.restore()};e.jqplot.PieRenderer.prototype.draw=function(N,V,u,P){var Q;var K=(u!=undefined)?u:{};var s=0;var q=0;var v=1;var n=new e.jqplot.ColorGenerator(this.seriesColors);if(u.legendInfo&&u.legendInfo.placement=="insideGrid"){var J=u.legendInfo;switch(J.location){case"nw":s=J.width+J.xoffset;break;case"w":s=J.width+J.xoffset;break;case"sw":s=J.width+J.xoffset;break;case"ne":s=J.width+J.xoffset;v=-1;break;case"e":s=J.width+J.xoffset;v=-1;break;case"se":s=J.width+J.xoffset;v=-1;break;case"n":q=J.height+J.yoffset;break;case"s":q=J.height+J.yoffset;v=-1;break;default:break}}var C=(K.shadow!=undefined)?K.shadow:this.shadow;var W=(K.showLine!=undefined)?K.showLine:this.showLine;var O=(K.fill!=undefined)?K.fill:this.fill;var t=N.canvas.width;var I=N.canvas.height;var H=t-s-2*this.padding;var R=I-q-2*this.padding;var z=Math.min(H,R);var T=z;this._diameter=this.diameter||T-this.sliceMargin;var L=this._radius=this._diameter/2;var p=this.startAngle/180*Math.PI;this._center=[(t-v*s)/2+v*s,(I-v*q)/2+v*q];if(this.shadow){var M="rgba(0,0,0,"+this.shadowAlpha+")";for(var Q=0;Q<V.length;Q++){var B=(Q==0)?p:V[Q-1][1]+p;B+=this.sliceMargin/180*Math.PI;this.renderer.drawSlice.call(this,N,B,V[Q][1]+p,M,true)}}for(var Q=0;Q<V.length;Q++){var B=(Q==0)?p:V[Q-1][1]+p;B+=this.sliceMargin/180*Math.PI;var A=V[Q][1]+p;this._sliceAngles.push([B,A]);this.renderer.drawSlice.call(this,N,B,A,n.next(),false);if(this.showDataLabels&&V[Q][2]*100>=this.dataLabelThreshold){var S,U=(B+A)/2,D;if(this.dataLabels=="label"){S=this.dataLabelFormatString||"%s";D=e.jqplot.sprintf(S,V[Q][0])}else{if(this.dataLabels=="value"){S=this.dataLabelFormatString||"%d";D=e.jqplot.sprintf(S,this.data[Q][1])}else{if(this.dataLabels=="percent"){S=this.dataLabelFormatString||"%d%%";D=e.jqplot.sprintf(S,V[Q][2]*100)}else{if(this.dataLabels.constructor==Array){S=this.dataLabelFormatString||"%s";D=e.jqplot.sprintf(S,this.dataLabels[Q])}}}}var o=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var G=this._center[0]+Math.cos(U)*o+this.canvas._offsets.left;var F=this._center[1]+Math.sin(U)*o+this.canvas._offsets.top;var E=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+D+"</div>").insertBefore(P.eventCanvas._elem);if(this.dataLabelCenterOn){G-=E.width()/2;F-=E.height()/2}else{G-=E.width()*Math.sin(U/2);F-=E.height()/2}G=Math.round(G);F=Math.round(F);E.css({left:G,top:F})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(n){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,n);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(n){this.numberRows=null;this.numberColumns=null;e.extend(true,this,n)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var q=this;if(this.show){var y=this._series;var B="position:absolute;";B+=(this.background)?"background:"+this.background+";":"";B+=(this.border)?"border:"+this.border+";":"";B+=(this.fontSize)?"font-size:"+this.fontSize+";":"";B+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";B+=(this.textColor)?"color:"+this.textColor+";":"";B+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";B+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";B+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";B+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+B+'"></table>');var F=false,x=false,n,v;var z=y[0];var o=new e.jqplot.ColorGenerator(z.seriesColors);if(z.show){var G=z.data;if(this.numberRows){n=this.numberRows;if(!this.numberColumns){v=Math.ceil(G.length/n)}else{v=this.numberColumns}}else{if(this.numberColumns){v=this.numberColumns;n=Math.ceil(G.length/this.numberColumns)}else{n=G.length;v=1}}var E,D,p,t,r,u,w,C;var A=0;for(E=0;E<n;E++){if(x){p=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(D=0;D<v;D++){if(A<G.length){u=this.labels[A]||G[A][0].toString();C=o.next();if(!x){if(E>0){F=true}else{F=false}}else{if(E==n-1){F=false}else{F=true}}w=(F)?this.rowSpacing:"0";t=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+w+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+C+';"></div></div></td>');r=e('<td class="jqplot-table-legend" style="padding-top:'+w+';"></td>');if(this.escapeHtml){r.text(u)}else{r.html(u)}if(x){r.prependTo(p);t.prependTo(p)}else{t.appendTo(p);r.appendTo(p)}F=true}A++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];q.target.trigger("jqplotDataMouseOver",n);if(q.series[n[0]].highlightMouseOver&&!(n[0]==q.plugins.pieRenderer.highlightedSeriesIndex&&n[1]==q.series[n[0]]._highlightedPoint)){q.target.trigger("jqplotDataHighlight",n);d(q,n[0],n[1])}}else{if(r==null){j(q)}}};function c(r,q,o){o=o||{};o.axesDefaults=o.axesDefaults||{};o.legend=o.legend||{};o.seriesDefaults=o.seriesDefaults||{};var n=false;if(o.seriesDefaults.renderer==e.jqplot.PieRenderer){n=true}else{if(o.series){for(var p=0;p<o.series.length;p++){if(o.series[p].renderer==e.jqplot.PieRenderer){n=true}}}}if(n){o.axesDefaults.renderer=e.jqplot.PieAxisRenderer;o.legend.renderer=e.jqplot.PieLegendRenderer;o.legend.preDraw=true;o.seriesDefaults.pointLabels={show:false}}}function g(p,o,n){for(i=0;i<this.series.length;i++){if(this.series[i].renderer.constructor==e.jqplot.PieRenderer){if(this.series[i].highlightMouseOver){this.series[i].highlightMouseDown=false}}}this.target.bind("mouseout",{plot:this},function(q){j(q.data.plot)})}function l(n){for(var o=0;o<this.series.length;o++){this.series[o].seriesColors=this.seriesColors;this.series[o].colorGenerator=this.colorGenerator}}function d(r,q,p){var o=r.series[q];var n=r.plugins.pieRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=p;r.plugins.pieRenderer.highlightedSeriesIndex=q;o.renderer.drawSlice.call(o,n._ctx,o._sliceAngles[p][0],o._sliceAngles[p][1],o.highlightColorGenerator.get(p),false)}function j(p){var n=p.plugins.pieRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.pieRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);d(s,p[0],p[1])}}else{if(t==null){j(s)}}}function b(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);d(r,o[0],o[1])}}else{if(s==null){j(r)}}}function k(p,o,s,r,q){var n=q.plugins.pieRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){j(q)}}function f(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.pieRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){j(s)}var o=jQuery.Event("jqplotDataRightClick");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function h(){this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var o=e(this.targetId+" .jqplot-data-label");if(o.length){e(o[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions))}var n=this.plugins.pieRenderer.highlightCanvas.setContext()}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.pointLabels.js.











































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    
    /**
     * Class: $.jqplot.PointLabels
     * Plugin for putting labels at the data points.
     * 
     * To use this plugin, include the js
     * file in your source:
     * 
     * > <script type="text/javascript" src="plugins/jqplot.pointLabels.js"></script>
     * 
     * By default, the last value in the data ponit array in the data series is used
     * for the label.  For most series renderers, extra data can be added to the 
     * data point arrays and the last value will be used as the label.
     * 
     * For instance, 
     * this series:
     * 
     * > [[1,4], [3,5], [7,2]]
     * 
     * Would, by default, use the y values in the labels.
     * Extra data can be added to the series like so:
     * 
     * > [[1,4,'mid'], [3 5,'hi'], [7,2,'low']]
     * 
     * And now the point labels would be 'mid', 'low', and 'hi'.
     * 
     * Options to the point labels and a custom labels array can be passed into the
     * "pointLabels" option on the series option like so:
     * 
     * > series:[{pointLabels:{
     * >    labels:['mid', 'hi', 'low'],
     * >    location:'se',
     * >    ypadding: 12
     * >    }
     * > }]
     * 
     * A custom labels array in the options takes precendence over any labels
     * in the series data.  If you have a custom labels array in the options,
     * but still want to use values from the series array as labels, set the
     * "labelsFromSeries" option to true.
     * 
     * By default, html entities (<, >, etc.) are escaped in point labels.  
     * If you want to include actual html markup in the labels, 
     * set the "escapeHTML" option to false.
     * 
     */
    $.jqplot.PointLabels = function(options) {
        // Group: Properties
        //
        // prop: show
        // show the labels or not.
        this.show = $.jqplot.config.enablePlugins;
        // prop: location
        // compass location where to position the label around the point.
        // 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
        this.location = 'n';
        // prop: labelsFromSeries
        // true to use labels within data point arrays.
        this.labelsFromSeries = false;
        // prop: seriesLabelIndex
        // array index for location of labels within data point arrays.
        // if null, will use the last element of the data point array.
        this.seriesLabelIndex = null;
        // prop: labels
        // array of arrays of labels, one array for each series.
        this.labels = [];
        // actual labels that will get displayed.
        // needed to preserve user specified labels in labels array.
        this._labels = [];
        // prop: stackedValue
        // true to display value as stacked in a stacked plot.
        // no effect if labels is specified.
        this.stackedValue = false;
        // prop: ypadding
        // vertical padding in pixels between point and label
        this.ypadding = 6;
        // prop: xpadding
        // horizontal padding in pixels between point and label
        this.xpadding = 6;
        // prop: escapeHTML
        // true to escape html entities in the labels.
        // If you want to include markup in the labels, set to false.
        this.escapeHTML = true;
        // prop: edgeTolerance
        // Number of pixels that the label must be away from an axis
        // boundary in order to be drawn.  Negative values will allow overlap
        // with the grid boundaries.
        this.edgeTolerance = -5;
        // prop: formatter
        // A class of a formatter for the tick text.  sprintf by default.
        this.formatter = $.jqplot.DefaultTickFormatter;
        // prop: formatString
        // string passed to the formatter.
        this.formatString = '';
        // prop: hideZeros
        // true to not show a label for a value which is 0.
        this.hideZeros = false;
        this._elems = [];
        
        $.extend(true, this, options);
    };
    
    var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
    var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7};
    var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];
    
    // called with scope of a series
    $.jqplot.PointLabels.init = function (target, data, seriesDefaults, opts){
        var options = $.extend(true, {}, seriesDefaults, opts);
        options.pointLabels = options.pointLabels || {};
        if (this.renderer.constructor == $.jqplot.BarRenderer && this.barDirection == 'horizontal' && !options.pointLabels.location) {
            options.pointLabels.location = 'e';
        }
        // add a pointLabels attribute to the series plugins
        this.plugins.pointLabels = new $.jqplot.PointLabels(options.pointLabels);
        this.plugins.pointLabels.setLabels.call(this);
    };
    
    // called with scope of series
    $.jqplot.PointLabels.prototype.setLabels = function() {   
        var p = this.plugins.pointLabels; 
        var labelIdx;
        if (p.seriesLabelIndex != null) {
            labelIdx = p.seriesLabelIndex;
        }
        else if (this.renderer.constructor == $.jqplot.BarRenderer && this.barDirection == 'horizontal') {
            labelIdx = 0;
        }
        else {
            labelIdx = this._plotData[0].length -1;
        }
        p._labels = [];
        if (p.labels.length == 0 || p.labelsFromSeries) {    
            if (p.stackedValue) {
                if (this._plotData.length && this._plotData[0].length){
                    // var idx = p.seriesLabelIndex || this._plotData[0].length -1;
                    for (var i=0; i<this._plotData.length; i++) {
                        p._labels.push(this._plotData[i][labelIdx]);
                    }
                }
            }
            else {
                var d = this.data;
                if (this.renderer.constructor == $.jqplot.BarRenderer && this.waterfall) {
                    d = this._data;
                }
                if (d.length && d[0].length) {
                    // var idx = p.seriesLabelIndex || d[0].length -1;
                    for (var i=0; i<d.length; i++) {
                        p._labels.push(d[i][labelIdx]);
                    }
                }
            }
        }
        else if (p.labels.length){
            p._labels = p.labels;
        }
    };
    
    $.jqplot.PointLabels.prototype.xOffset = function(elem, location, padding) {
        location = location || this.location;
        padding = padding || this.xpadding;
        var offset;
        
        switch (location) {
            case 'nw':
                offset = -elem.outerWidth(true) - this.xpadding;
                break;
            case 'n':
                offset = -elem.outerWidth(true)/2;
                break;
            case 'ne':
                offset =  this.xpadding;
                break;
            case 'e':
                offset = this.xpadding;
                break;
            case 'se':
                offset = this.xpadding;
                break;
            case 's':
                offset = -elem.outerWidth(true)/2;
                break;
            case 'sw':
                offset = -elem.outerWidth(true) - this.xpadding;
                break;
            case 'w':
                offset = -elem.outerWidth(true) - this.xpadding;
                break;
            default: // same as 'nw'
                offset = -elem.outerWidth(true) - this.xpadding;
                break;
        }
        return offset; 
    };
    
    $.jqplot.PointLabels.prototype.yOffset = function(elem, location, padding) {
        location = location || this.location;
        padding = padding || this.xpadding;
        var offset;
        
        switch (location) {
            case 'nw':
                offset = -elem.outerHeight(true) - this.ypadding;
                break;
            case 'n':
                offset = -elem.outerHeight(true) - this.ypadding;
                break;
            case 'ne':
                offset = -elem.outerHeight(true) - this.ypadding;
                break;
            case 'e':
                offset = -elem.outerHeight(true)/2;
                break;
            case 'se':
                offset = this.ypadding;
                break;
            case 's':
                offset = this.ypadding;
                break;
            case 'sw':
                offset = this.ypadding;
                break;
            case 'w':
                offset = -elem.outerHeight(true)/2;
                break;
            default: // same as 'nw'
                offset = -elem.outerHeight(true) - this.ypadding;
                break;
        }
        return offset; 
    };
    
    // called with scope of series
    $.jqplot.PointLabels.draw = function (sctx, options) {
        var p = this.plugins.pointLabels;
        // set labels again in case they have changed.
        p.setLabels.call(this);
        // remove any previous labels
        for (var i=0; i<p._elems.length; i++) {
            p._elems[i].remove();
        }
        if (p.show) {
            var ax = '_'+this._stackAxis+'axis';
        
            if (!p.formatString) {
                p.formatString = this[ax]._ticks[0].formatString;
                p.formatter = this[ax]._ticks[0].formatter;
            }
        
            var pd = this._plotData;
            var xax = this._xaxis;
            var yax = this._yaxis;

            for (var i=p._labels.length-1; i>=0; i--) {
                var label = p._labels[i];
                
                if (p.hideZeros && parseInt(p._labels[i], 10) == 0) {
                    label = '';
                }
                
                if (label != null) {
                    label = p.formatter(p.formatString, label);
                } 
                var elem = $('<div class="jqplot-point-label jqplot-series-'+this.index+' jqplot-point-'+i+'" style="position:absolute"></div>');
                elem.insertAfter(sctx.canvas);
                p._elems.push(elem);
                if (p.escapeHTML) {
                    elem.text(label);
                }
                else {
                    elem.html(label);
                }
                var location = p.location;
                if (this.waterfall && parseInt(label, 10) < 0) {
                    location = oppositeLocations[locationIndicies[location]];
                }
                var ell = xax.u2p(pd[i][0]) + p.xOffset(elem, location);
                var elt = yax.u2p(pd[i][1]) + p.yOffset(elem, location);
                if (this.renderer.constructor == $.jqplot.BarRenderer) {
                    if (this.barDirection == "vertical") {
                        ell += this._barNudge;
                    }
                    else {
                        elt -= this._barNudge;
                    }
                }
                elem.css('left', ell);
                elem.css('top', elt);
                var elr = ell + $(elem).width();
                var elb = elt + $(elem).height();
                var et = p.edgeTolerance;
                var scl = $(sctx.canvas).position().left;
                var sct = $(sctx.canvas).position().top;
                var scr = sctx.canvas.width + scl;
                var scb = sctx.canvas.height + sct;
                // if label is outside of allowed area, remove it
                if (ell - et < scl || elt - et < sct || elr + et > scr || elb + et > scb) {
                    $(elem).detach();
                }
            }
        }
    };
    
    $.jqplot.postSeriesInitHooks.push($.jqplot.PointLabels.init);
    $.jqplot.postDrawSeriesHooks.push($.jqplot.PointLabels.draw);
})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.pointLabels.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(c){c.jqplot.PointLabels=function(e){this.show=c.jqplot.config.enablePlugins;this.location="n";this.labelsFromSeries=false;this.seriesLabelIndex=null;this.labels=[];this._labels=[];this.stackedValue=false;this.ypadding=6;this.xpadding=6;this.escapeHTML=true;this.edgeTolerance=-5;this.formatter=c.jqplot.DefaultTickFormatter;this.formatString="";this.hideZeros=false;this._elems=[];c.extend(true,this,e)};var a=["nw","n","ne","e","se","s","sw","w"];var d={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];c.jqplot.PointLabels.init=function(i,h,f,g){var e=c.extend(true,{},f,g);e.pointLabels=e.pointLabels||{};if(this.renderer.constructor==c.jqplot.BarRenderer&&this.barDirection=="horizontal"&&!e.pointLabels.location){e.pointLabels.location="e"}this.plugins.pointLabels=new c.jqplot.PointLabels(e.pointLabels);this.plugins.pointLabels.setLabels.call(this)};c.jqplot.PointLabels.prototype.setLabels=function(){var f=this.plugins.pointLabels;var h;if(f.seriesLabelIndex!=null){h=f.seriesLabelIndex}else{if(this.renderer.constructor==c.jqplot.BarRenderer&&this.barDirection=="horizontal"){h=0}else{h=this._plotData[0].length-1}}f._labels=[];if(f.labels.length==0||f.labelsFromSeries){if(f.stackedValue){if(this._plotData.length&&this._plotData[0].length){for(var e=0;e<this._plotData.length;e++){f._labels.push(this._plotData[e][h])}}}else{var g=this.data;if(this.renderer.constructor==c.jqplot.BarRenderer&&this.waterfall){g=this._data}if(g.length&&g[0].length){for(var e=0;e<g.length;e++){f._labels.push(g[e][h])}}}}else{if(f.labels.length){f._labels=f.labels}}};c.jqplot.PointLabels.prototype.xOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerWidth(true)-this.xpadding;break;case"n":h=-f.outerWidth(true)/2;break;case"ne":h=this.xpadding;break;case"e":h=this.xpadding;break;case"se":h=this.xpadding;break;case"s":h=-f.outerWidth(true)/2;break;case"sw":h=-f.outerWidth(true)-this.xpadding;break;case"w":h=-f.outerWidth(true)-this.xpadding;break;default:h=-f.outerWidth(true)-this.xpadding;break}return h};c.jqplot.PointLabels.prototype.yOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerHeight(true)-this.ypadding;break;case"n":h=-f.outerHeight(true)-this.ypadding;break;case"ne":h=-f.outerHeight(true)-this.ypadding;break;case"e":h=-f.outerHeight(true)/2;break;case"se":h=this.ypadding;break;case"s":h=this.ypadding;break;case"sw":h=this.ypadding;break;case"w":h=-f.outerHeight(true)/2;break;default:h=-f.outerHeight(true)-this.ypadding;break}return h};c.jqplot.PointLabels.draw=function(t,h){var r=this.plugins.pointLabels;r.setLabels.call(this);for(var s=0;s<r._elems.length;s++){r._elems[s].remove()}if(r.show){var o="_"+this._stackAxis+"axis";if(!r.formatString){r.formatString=this[o]._ticks[0].formatString;r.formatter=this[o]._ticks[0].formatter}var z=this._plotData;var w=this._xaxis;var n=this._yaxis;for(var s=r._labels.length-1;s>=0;s--){var m=r._labels[s];if(r.hideZeros&&parseInt(r._labels[s],10)==0){m=""}if(m!=null){m=r.formatter(r.formatString,m)}var v=c('<div class="jqplot-point-label jqplot-series-'+this.index+" jqplot-point-"+s+'" style="position:absolute"></div>');v.insertAfter(t.canvas);r._elems.push(v);if(r.escapeHTML){v.text(m)}else{v.html(m)}var f=r.location;if(this.waterfall&&parseInt(m,10)<0){f=b[d[f]]}var l=w.u2p(z[s][0])+r.xOffset(v,f);var g=n.u2p(z[s][1])+r.yOffset(v,f);if(this.renderer.constructor==c.jqplot.BarRenderer){if(this.barDirection=="vertical"){l+=this._barNudge}else{g-=this._barNudge}}v.css("left",l);v.css("top",g);var j=l+c(v).width();var q=g+c(v).height();var y=r.edgeTolerance;var e=c(t.canvas).position().left;var u=c(t.canvas).position().top;var x=t.canvas.width+e;var k=t.canvas.height+u;if(l-y<e||g-y<u||j+y>x||q+y>k){c(v).detach()}}}};c.jqplot.postSeriesInitHooks.push(c.jqplot.PointLabels.init);c.jqplot.postDrawSeriesHooks.push(c.jqplot.PointLabels.draw)})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.trendline.js.

































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT and GPL version 2.0 licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * The author would appreciate an email letting him know of any substantial
 * use of jqPlot.  You can reach the author at: chris at jqplot dot com 
 * or see http://www.jqplot.com/info.php .  This is, of course, 
 * not required.
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * Thanks for using jqPlot!
 * 
 */
(function($) {
    
    /**
     * Class: $.jqplot.Trendline
     * Plugin which will automatically compute and draw trendlines for plotted data.
     */
    $.jqplot.Trendline = function() {
        // Group: Properties
        
        // prop: show
        // Wether or not to show the trend line.
        this.show = $.jqplot.config.enablePlugins;
        // prop: color
        // CSS color spec for the trend line.
        // By default this wil be the same color as the primary line.
        this.color = '#666666';
        // prop: renderer
        // Renderer to use to draw the trend line.
        // The data series that is plotted may not be rendered as a line.
        // Therefore, we use our own line renderer here to draw a trend line.
        this.renderer = new $.jqplot.LineRenderer();
        // prop: rendererOptions
        // Options to pass to the line renderer.
        // By default, markers are not shown on trend lines.
        this.rendererOptions = {marker:{show:false}};
        // prop: label
        // Label for the trend line to use in the legend.
        this.label = '';
        // prop: type
        // Either 'exponential', 'exp', or 'linear'.
        this.type = 'linear';
        // prop: shadow
        // true or false, wether or not to show the shadow.
        this.shadow = true;
        // prop: markerRenderer
        // Renderer to use to draw markers on the line.
        // I think this is wrong.
        this.markerRenderer = {show:false};
        // prop: lineWidth
        // Width of the trend line.
        this.lineWidth = 1.5;
        // prop: shadowAngle
        // Angle of the shadow on the trend line.
        this.shadowAngle = 45;
        // prop: shadowOffset
        // pixel offset for each stroke of the shadow.
        this.shadowOffset = 1.0;
        // prop: shadowAlpha
        // Alpha transparency of the shadow.
        this.shadowAlpha = 0.07;
        // prop: shadowDepth
        // number of strokes to make of the shadow.
        this.shadowDepth = 3;
        this.isTrendline = true;
        
    };
    
    $.jqplot.postSeriesInitHooks.push(parseTrendLineOptions);
    $.jqplot.postDrawSeriesHooks.push(drawTrendline);
    $.jqplot.addLegendRowHooks.push(addTrendlineLegend);
    
    // called witin scope of the legend object
    // current series passed in
    // must return null or an object {label:label, color:color}
    function addTrendlineLegend(series) {
        var lt = series.trendline.label.toString();
        var ret = null;
        if (this.renderer.constructor != $.jqplot.PieRenderer && series.trendline.show && lt) {
            ret = {label:lt, color:series.trendline.color};
        }
        return ret;
    }

    // called within scope of a series
    function parseTrendLineOptions (target, data, seriesDefaults, options, plot) {
        if (this.renderer.constructor == $.jqplot.LineRenderer) {
            this.trendline = new $.jqplot.Trendline();
            options = options || {};
            $.extend(true, this.trendline, {color:this.color}, seriesDefaults.trendline, options.trendline);
            this.trendline.renderer.init.call(this.trendline, null);
        }
    }
    
    // called within scope of series object
    function drawTrendline(sctx, options) {
        // if we have options, merge trendline options in with precedence
        options = $.extend(true, {}, this.trendline, options);

        if (options.show && this.renderer.constructor != $.jqplot.PieRenderer) {
            var fit;
            // this.renderer.setGridData.call(this);
            var data = options.data || this.data;
            fit = fitData(data, this.trendline.type);
            var gridData = options.gridData || this.renderer.makeGridData.call(this, fit.data);
            this.trendline.renderer.draw.call(this.trendline, sctx, gridData, {showLine:true, shadow:this.trendline.shadow});
        }
    }
    
    function regression(x, y, typ)  {
        var type = (typ == null) ? 'linear' : typ;
        var N = x.length;
        var slope;
        var intercept;  
        var SX = 0;
        var SY = 0;
        var SXX = 0;
        var SXY = 0;
        var SYY = 0;
        var Y = [];
        var X = [];
    
        if (type == 'linear') {
            X = x;
            Y = y;
        }
        else if (type == 'exp' || type == 'exponential') {
            for ( var i=0; i<y.length; i++) {
                // ignore points <= 0, log undefined.
                if (y[i] <= 0) {
                    N--;
                }
                else {
                    X.push(x[i]);
                    Y.push(Math.log(y[i]));
                }
            }
        }

        for ( var i = 0; i < N; i++) {
            SX = SX + X[i];
            SY = SY + Y[i];
            SXY = SXY + X[i]* Y[i];
            SXX = SXX + X[i]* X[i];
            SYY = SYY + Y[i]* Y[i];
        }

        slope = (N*SXY - SX*SY)/(N*SXX - SX*SX);
        intercept = (SY - slope*SX)/N;

        return [slope, intercept];
    }

    function linearRegression(X,Y) {
        var ret;
        ret = regression(X,Y,'linear');
        return [ret[0],ret[1]];
    }

    function expRegression(X,Y) {
        var ret;
        var x = X;
        var y = Y;
        ret = regression(x, y,'exp');
        var base = Math.exp(ret[0]);
        var coeff = Math.exp(ret[1]);
        return [base, coeff];
    }

    function fitData(data, typ) {
        var type = (typ == null) ?  'linear' : typ;
        var ret;
        var res;
        var x = [];
        var y = [];
        var ypred = [];
        
        for (i=0; i<data.length; i++){
            if (data[i] != null && data[i][0] != null && data[i][1] != null) {
                x.push(data[i][0]);
                y.push(data[i][1]);
            }
        }
        
        if (type == 'linear') {
            ret = linearRegression(x,y);
            for ( var i=0; i<x.length; i++){
                res = ret[0]*x[i] + ret[1];
                ypred.push([x[i], res]);
            }
        }
        else if (type == 'exp' || type == 'exponential') {
            ret = expRegression(x,y);
            for ( var i=0; i<x.length; i++){
                res = ret[1]*Math.pow(ret[0],x[i]);
                ypred.push([x[i], res]);
            }
        }
        return {data: ypred, slope: ret[0], intercept: ret[1]};
    } 

})(jQuery);

Added Site/Site_W/jpqplot/plugins/jqplot.trendline.min.js.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * Copyright (c) 2009 - 2010 Chris Leonello
 * jqPlot is currently available for use in all personal or commercial projects 
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 * choose the license that best suits your project and use it accordingly. 
 *
 * Although not required, the author would appreciate an email letting him 
 * know of any substantial use of jqPlot.  You can reach the author at: 
 * chris at jqplot  or see http://www.jqplot.com/info.php .
 *
 * If you are feeling kind and generous, consider supporting the project by
 * making a donation at: http://www.jqplot.com/donate.php .
 *
 * jqPlot includes date instance methods and printf/sprintf functions by other authors:
 *
 * Date instance methods contained in jqplot.dateMethods.js:
 *
 *     author Ken Snyder (ken d snyder at gmail dot com)
 *     date 2008-09-10
 *     version 2.0.2 (http://kendsnyder.com/sandbox/date/)     
 *     license Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
 *
 * JavaScript printf/sprintf functions contained in jqplot.sprintf.js:
 *
 *     version 2007.04.27
 *     author Ash Searle
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 *     http://hexmen.com/js/sprintf.js
 *     The author (Ash Searle) has placed this code in the public domain:
 *     "This code is unrestricted: you are free to use it however you like."
 * 
 */
(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3;this.isTrendline=true};f.jqplot.postSeriesInitHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var i=k.trendline.label.toString();var j=null;if(this.renderer.constructor!=f.jqplot.PieRenderer&&k.trendline.show&&i){j={label:i,color:k.trendline.color}}return j}function e(m,k,j,i,l){if(this.renderer.constructor==f.jqplot.LineRenderer){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(i.show&&this.renderer.constructor!=f.jqplot.PieRenderer){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery);

Added Site/Site_W/jpqplot/usage.txt.



























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Title: jqPlot Usage

Usage Documentation:

Introduction:

jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages. 

The jqPlot home page is at <http://www.jqplot.com/>.  

The project page and downloads are at <http://www.bitbucket.org/cleonello/jqplot/>.

Below are a few examples to demonstrate jqPlot usage.  These plots are shown as static images.  
Many more examples of dynamically rendered plots can be seen on the test and examples pages here: <../../tests/>.

Include the Files:

jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.1 is included in the distribution.  
To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas 
script for IE support in your web page:

> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
> <script language="javascript" type="text/javascript" src="jquery-1.4.2.min.js"></script>
> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />

Add a plot container:

Add a container (target) to your web page where you want your plot to show up.
Be sure to give your target a width and a height:

> <div id="chartdiv" style="height:400px;width:300px; "></div> 

Create a plot:

Then, create the actual plot by calling the 
$.jqplot plugin with the id of your target and some data:

> $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);

Which will produce a 
chart like:

(see images/basicline.png)

Plot Options:

You can customize the plot by passing options to the $.jqplot function.  Options are described in 
<jqPlot Options> in the jqPlotOptions.txt file.  An example of options usage:

> $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]], 
> { title:'Exponential Line', 
>   axes:{yaxis:{min:-10, max:240}}, 
>   series:[{color:'#5FAB78'}]
> });

Which will produce 
a plot like:

(see images/basicoptions.png)

Using Plugins:

You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html 
after you include the jqPlot plugin.  Here is how to include the log axis plugin:

> <link rel="stylesheet" type="text/css" href="jquery.jqplot.css" />
> <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
> <script language="javascript" type="text/javascript" src="jquery-1.4.2.min.js"></script>
> <script language="javascript" type="text/javascript" src="jquery.jqplot.min.js"></script>
> <script language="javascript" type="text/javascript" src="jqplot.logAxisRenderer.js"></script>

Important note:  For jqplot builds r529 and above (0.9.7r529 and higher), you must explicitly 
enable plugins via either the { show: true } plugin option to the plot or by using 
the $.jqplot.config.enablePlugins = true; config options set on the page before plot creation.
Only plugins that can be immediately active upon loading are affected.  This includes 
non-renderer plugins like cursor, dragable, highlighter, and trendline.

Here is a the same $.jqplot call 
but with a log y axis:

> $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]], 
> { title:'Exponential Line', 
>   axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer}}, 
>   series:[{color:'#5FAB78'}]
> });

Which produces 
a plot like:

(see images/basiclogaxis.png)

You can further customize with options specific 
to the log axis plugin:

> $.jqplot('chartdiv',  [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]], 
> { title:'Exponential Line', 
>   axes:{yaxis:{renderer: $.jqplot.LogAxisRenderer, tickDistribution:'power'}}, 
>   series:[{color:'#5FAB78'}]
> });

Which makes a 
plot like:

(see images/basiclogoptions.png)

For a full list of options, see <jqPlot Options> in the jqPlotOptions.txt file.

You can add as many plugins as you wish.  Order is generally not important.  
Some plugins, like the highlighter plugin which highlights data points near the 
mouse,  don't need any extra options or setup to function.  Highlighter does have 
additional options which the user can set.

Other plugins, the barRenderer for example, provide functionality the must be specified 
in the chart options object.  To render a series as a bar graph with the bar renderer, 
you would first include the plugin after jqPlot:

> <script language="javascript" type="text/javascript" src="plugins/jqplot.barRenderer.min.js"></script>

Then you would create 
a chart like:

> $.jqplot('chartdiv',  [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});

Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series.

Added Site/Site_W/jquery.flot.js.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
/* Javascript plotting library for jQuery, v. 0.6.
 *
 * Released under the MIT license by IOLA, December 2007.
 *
 */

// first an inline dependency, jquery.colorhelpers.js, we inline it here
// for convenience

/* Plugin for jQuery for working with colors.
 * 
 * Version 1.0.
 * 
 * Inspiration from jQuery color animation plugin by John Resig.
 *
 * Released under the MIT license by Ole Laursen, October 2009.
 *
 * Examples:
 *
 *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
 *   var c = $.color.extract($("#mydiv"), 'background-color');
 *   console.log(c.r, c.g, c.b, c.a);
 *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
 *
 * Note that .scale() and .add() work in-place instead of returning
 * new objects.
 */ 
(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]+=H}return F.normalize()};F.scale=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]*=H}return F.normalize()};F.toString=function(){if(F.a>=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return J<I?I:(J>H?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})();

// the actual Flot code
(function($) {
    function Plot(placeholder, data_, options_, plugins) {
        // data is on the form:
        //   [ series1, series2 ... ]
        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]
        // or { data: [ [x1, y1], [x2, y2], ... ], label: "some label", ... }
        
        var series = [],
            options = {
                // the color theme used for graphs
                colors: ["#FF0000", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1, // number of colums in legend table
                    labelFormatter: null, // fn: string -> string
                    labelBoxBorderColor: "#ccc", // border color for the little label boxes
                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph
                    position: "ne", // position of default legend container within plot
                    margin: 5, // distance from grid edge to default legend container within plot
                    backgroundColor: null, // null means auto-detect
                    backgroundOpacity: 0.85 // set to 0 to avoid background
                },
                xaxis: {
                    mode: null, // null or "time"
                    transform: null, // null or f: number -> number to transform axis
                    inverseTransform: null, // if transform is set, this should be the inverse function
                    min: null, // min. value to show, null means set automatically
                    max: null, // max. value to show, null means set automatically
                    autoscaleMargin: null, // margin in % to add if auto-setting min/max
                    ticks: null, // either [1, 3] or [[1, "a"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks
                    tickFormatter: null, // fn: number -> string
                    labelWidth: null, // size of tick labels in pixels
                    labelHeight: null,
                    
                    // mode specific options
                    tickDecimals: null, // no. of decimals, null means auto
                    tickSize: null, // number or [number, "unit"]
                    minTickSize: null, // number or [number, "unit"]
                    monthNames: null, // list of names of months
                    timeformat: null, // format string to use
                    twelveHourClock: false // 12 or 24 time in time mode
                },
                yaxis: {
                    autoscaleMargin: 0.02
                },
                x2axis: {
                    autoscaleMargin: null
                },
                y2axis: {
                    autoscaleMargin: 0.02
                },
                series: {
                    points: {
                        show: false,
                        radius: 3,
                        lineWidth: 2, // in pixels
                        fill: true,
                        fillColor: "#ffffff"
                    },
                    lines: {
                        // we don't put in show: false so we can see
                        // whether lines were actively disabled 
                        lineWidth: 2, // in pixels
                        fill: false,
                        fillColor: null,
                        steps: false
                    },
                    bars: {
                        show: false,
                        lineWidth: 2, // in pixels
                        barWidth: 1, // in units of the x axis
                        fill: true,
                        fillColor: null,
                        align: "left", // or "center" 
                        horizontal: false // when horizontal, left is now top
                    },
                    shadowSize: 3
                },
                grid: {
                    show: true,
                    aboveData: false,
                    color: "#545454", // primary color used for outline and labels
                    backgroundColor: null, // null for transparent, else color
                    tickColor: "rgba(0,0,0,0.15)", // color used for the ticks
                    labelMargin: 5, // in pixels
                    borderWidth: 2, // in pixels
                    borderColor: null, // set if different from the grid color
                    markings: null, // array of ranges or fn: axes -> array of ranges
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,
                    // interactive stuff
                    clickable: false,
                    hoverable: false,
                    autoHighlight: true, // highlight in case mouse is near
                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item
                },
                hooks: {}
            },
        canvas = null,      // the canvas for the plot itself
        overlay = null,     // canvas for interactive stuff on top of plot
        eventHolder = null, // jQuery object that events should be bound to
        ctx = null, octx = null,
        axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} },
        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
        canvasWidth = 0, canvasHeight = 0,
        plotWidth = 0, plotHeight = 0,
        hooks = {
            processOptions: [],
            processRawData: [],
            processDatapoints: [],
            draw: [],
            bindEvents: [],
            drawOverlay: []
        },
        plot = this;

        // public functions
        plot.setData = setData;
        plot.setupGrid = setupGrid;
        plot.draw = draw;
        plot.getPlaceholder = function() { return placeholder; };
        plot.getCanvas = function() { return canvas; };
        plot.getPlotOffset = function() { return plotOffset; };
        plot.width = function () { return plotWidth; };
        plot.height = function () { return plotHeight; };
        plot.offset = function () {
            var o = eventHolder.offset();
            o.left += plotOffset.left;
            o.top += plotOffset.top;
            return o;
        };
        plot.getData = function() { return series; };
        plot.getAxes = function() { return axes; };
        plot.getOptions = function() { return options; };
        plot.highlight = highlight;
        plot.unhighlight = unhighlight;
        plot.triggerRedrawOverlay = triggerRedrawOverlay;
        plot.pointOffset = function(point) {
            return { left: parseInt(axisSpecToRealAxis(point, "xaxis").p2c(+point.x) + plotOffset.left),
                     top: parseInt(axisSpecToRealAxis(point, "yaxis").p2c(+point.y) + plotOffset.top) };
        };
        

        // public attributes
        plot.hooks = hooks;
        
        // initialize
        initPlugins(plot);
        parseOptions(options_);
        constructCanvas();
        setData(data_);
        setupGrid();
        draw();
        bindEvents();


        function executeHooks(hook, args) {
            args = [plot].concat(args);
            for (var i = 0; i < hook.length; ++i)
                hook[i].apply(this, args);
        }

        function initPlugins() {
            for (var i = 0; i < plugins.length; ++i) {
                var p = plugins[i];
                p.init(plot);
                if (p.options)
                    $.extend(true, options, p.options);
            }
        }
        
        function parseOptions(opts) {
            $.extend(true, options, opts);
            if (options.grid.borderColor == null)
                options.grid.borderColor = options.grid.color;
            // backwards compatibility, to be removed in future
            if (options.xaxis.noTicks && options.xaxis.ticks == null)
                options.xaxis.ticks = options.xaxis.noTicks;
            if (options.yaxis.noTicks && options.yaxis.ticks == null)
                options.yaxis.ticks = options.yaxis.noTicks;
            if (options.grid.coloredAreas)
                options.grid.markings = options.grid.coloredAreas;
            if (options.grid.coloredAreasColor)
                options.grid.markingsColor = options.grid.coloredAreasColor;
            if (options.lines)
                $.extend(true, options.series.lines, options.lines);
            if (options.points)
                $.extend(true, options.series.points, options.points);
            if (options.bars)
                $.extend(true, options.series.bars, options.bars);
            if (options.shadowSize)
                options.series.shadowSize = options.shadowSize;

            for (var n in hooks)
                if (options.hooks[n] && options.hooks[n].length)
                    hooks[n] = hooks[n].concat(options.hooks[n]);

            executeHooks(hooks.processOptions, [options]);
        }

        function setData(d) {
            series = parseData(d);
            fillInSeriesOptions();
            processData();
        }
        
        function parseData(d) {
            var res = [];
            for (var i = 0; i < d.length; ++i) {
                var s = $.extend(true, {}, options.series);

                if (d[i].data) {
                    s.data = d[i].data; // move the data instead of deep-copy
                    delete d[i].data;

                    $.extend(true, s, d[i]);

                    d[i].data = s.data;
                }
                else
                    s.data = d[i];
                res.push(s);
            }

            return res;
        }
        
        function axisSpecToRealAxis(obj, attr) {
            var a = obj[attr];
            if (!a || a == 1)
                return axes[attr];
            if (typeof a == "number")
                return axes[attr.charAt(0) + a + attr.slice(1)];
            return a; // assume it's OK
        }
        
        function fillInSeriesOptions() {
            var i;
            
            // collect what we already got of colors
            var neededColors = series.length,
                usedColors = [],
                assignedColors = [];
            for (i = 0; i < series.length; ++i) {
                var sc = series[i].color;
                if (sc != null) {
                    --neededColors;
                    if (typeof sc == "number")
                        assignedColors.push(sc);
                    else
                        usedColors.push($.color.parse(series[i].color));
                }
            }
            
            // we might need to generate more colors if higher indices
            // are assigned
            for (i = 0; i < assignedColors.length; ++i) {
                neededColors = Math.max(neededColors, assignedColors[i] + 1);
            }

            // produce colors as needed
            var colors = [], variation = 0;
            i = 0;
            while (colors.length < neededColors) {
                var c;
                if (options.colors.length == i) // check degenerate case
                    c = $.color.make(100, 100, 100);
                else
                    c = $.color.parse(options.colors[i]);

                // vary color if needed
                var sign = variation % 2 == 1 ? -1 : 1;
                c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2)

                // FIXME: if we're getting to close to something else,
                // we should probably skip this one
                colors.push(c);
                
                ++i;
                if (i >= options.colors.length) {
                    i = 0;
                    ++variation;
                }
            }

            // fill in the options
            var colori = 0, s;
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                
                // assign colors
                if (s.color == null) {
                    s.color = colors[colori].toString();
                    ++colori;
                }
                else if (typeof s.color == "number")
                    s.color = colors[s.color].toString();

                // turn on lines automatically in case nothing is set
                if (s.lines.show == null) {
                    var v, show = true;
                    for (v in s)
                        if (s[v].show) {
                            show = false;
                            break;
                        }
                    if (show)
                        s.lines.show = true;
                }

                // setup axes
                s.xaxis = axisSpecToRealAxis(s, "xaxis");
                s.yaxis = axisSpecToRealAxis(s, "yaxis");
            }
        }
        
        function processData() {
            var topSentry = Number.POSITIVE_INFINITY,
                bottomSentry = Number.NEGATIVE_INFINITY,
                i, j, k, m, length,
                s, points, ps, x, y, axis, val, f, p;

            for (axis in axes) {
                axes[axis].datamin = topSentry;
                axes[axis].datamax = bottomSentry;
                axes[axis].used = false;
            }

            function updateAxis(axis, min, max) {
                if (min < axis.datamin)
                    axis.datamin = min;
                if (max > axis.datamax)
                    axis.datamax = max;
            }

            for (i = 0; i < series.length; ++i) {
                s = series[i];
                s.datapoints = { points: [] };
                
                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);
            }
            
            // first pass: clean and copy data
            for (i = 0; i < series.length; ++i) {
                s = series[i];

                var data = s.data, format = s.datapoints.format;

                if (!format) {
                    format = [];
                    // find out how to copy
                    format.push({ x: true, number: true, required: true });
                    format.push({ y: true, number: true, required: true });

                    if (s.bars.show)
                        format.push({ y: true, number: true, required: false, defaultValue: 0 });
                    
                    s.datapoints.format = format;
                }

                if (s.datapoints.pointsize != null)
                    continue; // already filled in

                if (s.datapoints.pointsize == null)
                    s.datapoints.pointsize = format.length;
                
                ps = s.datapoints.pointsize;
                points = s.datapoints.points;

                insertSteps = s.lines.show && s.lines.steps;
                s.xaxis.used = s.yaxis.used = true;
                
                for (j = k = 0; j < data.length; ++j, k += ps) {
                    p = data[j];

                    var nullify = p == null;
                    if (!nullify) {
                        for (m = 0; m < ps; ++m) {
                            val = p[m];
                            f = format[m];

                            if (f) {
                                if (f.number && val != null) {
                                    val = +val; // convert to number
                                    if (isNaN(val))
                                        val = null;
                                }

                                if (val == null) {
                                    if (f.required)
                                        nullify = true;
                                    
                                    if (f.defaultValue != null)
                                        val = f.defaultValue;
                                }
                            }
                            
                            points[k + m] = val;
                        }
                    }
                    
                    if (nullify) {
                        for (m = 0; m < ps; ++m) {
                            val = points[k + m];
                            if (val != null) {
                                f = format[m];
                                // extract min/max info
                                if (f.x)
                                    updateAxis(s.xaxis, val, val);
                                if (f.y)
                                    updateAxis(s.yaxis, val, val);
                            }
                            points[k + m] = null;
                        }
                    }
                    else {
                        // a little bit of line specific stuff that
                        // perhaps shouldn't be here, but lacking
                        // better means...
                        if (insertSteps && k > 0
                            && points[k - ps] != null
                            && points[k - ps] != points[k]
                            && points[k - ps + 1] != points[k + 1]) {
                            // copy the point to make room for a middle point
                            for (m = 0; m < ps; ++m)
                                points[k + ps + m] = points[k + m];

                            // middle point has same y
                            points[k + 1] = points[k - ps + 1];

                            // we've added a point, better reflect that
                            k += ps;
                        }
                    }
                }
            }

            // give the hooks a chance to run
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                
                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);
            }

            // second pass: find datamax/datamin for auto-scaling
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                points = s.datapoints.points,
                ps = s.datapoints.pointsize;

                var xmin = topSentry, ymin = topSentry,
                    xmax = bottomSentry, ymax = bottomSentry;
                
                for (j = 0; j < points.length; j += ps) {
                    if (points[j] == null)
                        continue;

                    for (m = 0; m < ps; ++m) {
                        val = points[j + m];
                        f = format[m];
                        if (!f)
                            continue;
                        
                        if (f.x) {
                            if (val < xmin)
                                xmin = val;
                            if (val > xmax)
                                xmax = val;
                        }
                        if (f.y) {
                            if (val < ymin)
                                ymin = val;
                            if (val > ymax)
                                ymax = val;
                        }
                    }
                }
                
                if (s.bars.show) {
                    // make sure we got room for the bar on the dancing floor
                    var delta = s.bars.align == "left" ? 0 : -s.bars.barWidth/2;
                    if (s.bars.horizontal) {
                        ymin += delta;
                        ymax += delta + s.bars.barWidth;
                    }
                    else {
                        xmin += delta;
                        xmax += delta + s.bars.barWidth;
                    }
                }
                
                updateAxis(s.xaxis, xmin, xmax);
                updateAxis(s.yaxis, ymin, ymax);
            }

            for (axis in axes) {
                if (axes[axis].datamin == topSentry)
                    axes[axis].datamin = null;
                if (axes[axis].datamax == bottomSentry)
                    axes[axis].datamax = null;
            }
        }

        function constructCanvas() {
            function makeCanvas(width, height) {
                var c = document.createElement('canvas');
                c.width = width;
                c.height = height;
                if ($.browser.msie) // excanvas hack
                    c = window.G_vmlCanvasManager.initElement(c);
                return c;
            }
            
            canvasWidth = placeholder.width();
            canvasHeight = placeholder.height();
            placeholder.html(""); // clear placeholder
            if (placeholder.css("position") == 'static')
                placeholder.css("position", "relative"); // for positioning labels and overlay

            if (canvasWidth <= 0 || canvasHeight <= 0)
                throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;

            if ($.browser.msie) // excanvas hack
                window.G_vmlCanvasManager.init_(document); // make sure everything is setup
            
            // the canvas
            canvas = $(makeCanvas(canvasWidth, canvasHeight)).appendTo(placeholder).get(0);
            ctx = canvas.getContext("2d");

            // overlay canvas for interactive features
            overlay = $(makeCanvas(canvasWidth, canvasHeight)).css({ position: 'absolute', left: 0, top: 0 }).appendTo(placeholder).get(0);
            octx = overlay.getContext("2d");
            octx.stroke();
        }

        function bindEvents() {
            // we include the canvas in the event holder too, because IE 7
            // sometimes has trouble with the stacking order
            eventHolder = $([overlay, canvas]);

            // bind events
            if (options.grid.hoverable)
                eventHolder.mousemove(onMouseMove);

            if (options.grid.clickable)
                eventHolder.click(onClick);

            executeHooks(hooks.bindEvents, [eventHolder]);
        }

        function setupGrid() {
            function setTransformationHelpers(axis, o) {
                function identity(x) { return x; }
                
                var s, m, t = o.transform || identity,
                    it = o.inverseTransform;
                    
                // add transformation helpers
                if (axis == axes.xaxis || axis == axes.x2axis) {
                    // precompute how much the axis is scaling a point
                    // in canvas space
                    s = axis.scale = plotWidth / (t(axis.max) - t(axis.min));
                    m = t(axis.min);

                    // data point to canvas coordinate
                    if (t == identity) // slight optimization
                        axis.p2c = function (p) { return (p - m) * s; };
                    else
                        axis.p2c = function (p) { return (t(p) - m) * s; };
                    // canvas coordinate to data point
                    if (!it)
                        axis.c2p = function (c) { return m + c / s; };
                    else
                        axis.c2p = function (c) { return it(m + c / s); };
                }
                else {
                    s = axis.scale = plotHeight / (t(axis.max) - t(axis.min));
                    m = t(axis.max);
                    
                    if (t == identity)
                        axis.p2c = function (p) { return (m - p) * s; };
                    else
                        axis.p2c = function (p) { return (m - t(p)) * s; };
                    if (!it)
                        axis.c2p = function (c) { return m - c / s; };
                    else
                        axis.c2p = function (c) { return it(m - c / s); };
                }
            }

            function measureLabels(axis, axisOptions) {
                var i, labels = [], l;
                
                axis.labelWidth = axisOptions.labelWidth;
                axis.labelHeight = axisOptions.labelHeight;

                if (axis == axes.xaxis || axis == axes.x2axis) {
                    // to avoid measuring the widths of the labels, we
                    // construct fixed-size boxes and put the labels inside
                    // them, we don't need the exact figures and the
                    // fixed-size box content is easy to center
                    if (axis.labelWidth == null)
                        axis.labelWidth = canvasWidth / (axis.ticks.length > 0 ? axis.ticks.length : 1);

                    // measure x label heights
                    if (axis.labelHeight == null) {
                        labels = [];
                        for (i = 0; i < axis.ticks.length; ++i) {
                            l = axis.ticks[i].label;
                            if (l)
                                labels.push('<div class="tickLabel" style="float:left;width:' + axis.labelWidth + 'px">' + l + '</div>');
                        }
                        
                        if (labels.length > 0) {
                            var dummyDiv = $('<div style="position:absolute;top:-10000px;width:10000px;font-size:smaller">'
                                             + labels.join("") + '<div style="clear:left"></div></div>').appendTo(placeholder);
                            axis.labelHeight = dummyDiv.height();
                            dummyDiv.remove();
                        }
                    }
                }
                else if (axis.labelWidth == null || axis.labelHeight == null) {
                    // calculate y label dimensions
                    for (i = 0; i < axis.ticks.length; ++i) {
                        l = axis.ticks[i].label;
                        if (l)
                            labels.push('<div class="tickLabel">' + l + '</div>');
                    }
                    
                    if (labels.length > 0) {
                        var dummyDiv = $('<div style="position:absolute;top:-10000px;font-size:smaller">'
                                         + labels.join("") + '</div>').appendTo(placeholder);
                        if (axis.labelWidth == null)
                            axis.labelWidth = dummyDiv.width();
                        if (axis.labelHeight == null)
                            axis.labelHeight = dummyDiv.find("div").height();
                        dummyDiv.remove();
                    }
                    
                }

                if (axis.labelWidth == null)
                    axis.labelWidth = 0;
                if (axis.labelHeight == null)
                    axis.labelHeight = 0;
            }
            
            function setGridSpacing() {
                // get the most space needed around the grid for things
                // that may stick out
                var maxOutset = options.grid.borderWidth;
                for (i = 0; i < series.length; ++i)
                    maxOutset = Math.max(maxOutset, 2 * (series[i].points.radius + series[i].points.lineWidth/2));
                
                plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset;
                
                var margin = options.grid.labelMargin + options.grid.borderWidth;
                
                if (axes.xaxis.labelHeight > 0)
                    plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + margin);
                if (axes.yaxis.labelWidth > 0)
                    plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + margin);
                if (axes.x2axis.labelHeight > 0)
                    plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + margin);
                if (axes.y2axis.labelWidth > 0)
                    plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + margin);
            
                plotWidth = canvasWidth - plotOffset.left - plotOffset.right;
                plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;
            }
            
            var axis;
            for (axis in axes)
                setRange(axes[axis], options[axis]);
            
            if (options.grid.show) {
                for (axis in axes) {
                    prepareTickGeneration(axes[axis], options[axis]);
                    setTicks(axes[axis], options[axis]);
                    measureLabels(axes[axis], options[axis]);
                }

                setGridSpacing();
            }
            else {
                plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0;
                plotWidth = canvasWidth;
                plotHeight = canvasHeight;
            }
            
            for (axis in axes)
                setTransformationHelpers(axes[axis], options[axis]);

            if (options.grid.show)
                insertLabels();
            
            insertLegend();
        }
        
        function setRange(axis, axisOptions) {
            var min = +(axisOptions.min != null ? axisOptions.min : axis.datamin),
                max = +(axisOptions.max != null ? axisOptions.max : axis.datamax),
                delta = max - min;

            if (delta == 0.0) {
                // degenerate case
                var widen = max == 0 ? 1 : 0.01;

                if (axisOptions.min == null)
                    min -= widen;
                // alway widen max if we couldn't widen min to ensure we
                // don't fall into min == max which doesn't work
                if (axisOptions.max == null || axisOptions.min != null)
                    max += widen;
            }
            else {
                // consider autoscaling
                var margin = axisOptions.autoscaleMargin;
                if (margin != null) {
                    if (axisOptions.min == null) {
                        min -= delta * margin;
                        // make sure we don't go below zero if all values
                        // are positive
                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)
                            min = 0;
                    }
                    if (axisOptions.max == null) {
                        max += delta * margin;
                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)
                            max = 0;
                    }
                }
            }
            axis.min = min;
            axis.max = max;
        }

        function prepareTickGeneration(axis, axisOptions) {
            // estimate number of ticks
            var noTicks;
            if (typeof axisOptions.ticks == "number" && axisOptions.ticks > 0)
                noTicks = axisOptions.ticks;
            else if (axis == axes.xaxis || axis == axes.x2axis)
                 // heuristic based on the model a*sqrt(x) fitted to
                 // some reasonable data points
                noTicks = 0.3 * Math.sqrt(canvasWidth);
            else
                noTicks = 0.3 * Math.sqrt(canvasHeight);
            
            var delta = (axis.max - axis.min) / noTicks,
                size, generator, unit, formatter, i, magn, norm;

            if (axisOptions.mode == "time") {
                // pretty handling of time
                
                // map of app. size of time units in milliseconds
                var timeUnitSize = {
                    "second": 1000,
                    "minute": 60 * 1000,
                    "hour": 60 * 60 * 1000,
                    "day": 24 * 60 * 60 * 1000,
                    "month": 30 * 24 * 60 * 60 * 1000,
                    "year": 365.2425 * 24 * 60 * 60 * 1000
                };


                // the allowed tick sizes, after 1 year we use
                // an integer algorithm
                var spec = [
                    [1, "second"], [2, "second"], [5, "second"], [10, "second"],
                    [30, "second"], 
                    [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
                    [30, "minute"], 
                    [1, "hour"], [2, "hour"], [4, "hour"],
                    [8, "hour"], [12, "hour"],
                    [1, "day"], [2, "day"], [3, "day"],
                    [0.25, "month"], [0.5, "month"], [1, "month"],
                    [2, "month"], [3, "month"], [6, "month"],
                    [1, "year"]
                ];

                var minSize = 0;
                if (axisOptions.minTickSize != null) {
                    if (typeof axisOptions.tickSize == "number")
                        minSize = axisOptions.tickSize;
                    else
                        minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
                }

                for (i = 0; i < spec.length - 1; ++i)
                    if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]
                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
                       && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)
                        break;
                size = spec[i][0];
                unit = spec[i][1];
                
                // special-case the possibility of several years
                if (unit == "year") {
                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
                    norm = (delta / timeUnitSize.year) / magn;
                    if (norm < 1.5)
                        size = 1;
                    else if (norm < 3)
                        size = 2;
                    else if (norm < 7.5)
                        size = 5;
                    else
                        size = 10;

                    size *= magn;
                }

                if (axisOptions.tickSize) {
                    size = axisOptions.tickSize[0];
                    unit = axisOptions.tickSize[1];
                }
                
                generator = function(axis) {
                    var ticks = [],
                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],
                        d = new Date(axis.min);
                    
                    var step = tickSize * timeUnitSize[unit];

                    if (unit == "second")
                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));
                    if (unit == "minute")
                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));
                    if (unit == "hour")
                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));
                    if (unit == "month")
                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));
                    if (unit == "year")
                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));
                    
                    // reset smaller components
                    d.setUTCMilliseconds(0);
                    if (step >= timeUnitSize.minute)
                        d.setUTCSeconds(0);
                    if (step >= timeUnitSize.hour)
                        d.setUTCMinutes(0);
                    if (step >= timeUnitSize.day)
                        d.setUTCHours(0);
                    if (step >= timeUnitSize.day * 4)
                        d.setUTCDate(1);
                    if (step >= timeUnitSize.year)
                        d.setUTCMonth(0);


                    var carry = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = d.getTime();
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        if (unit == "month") {
                            if (tickSize < 1) {
                                // a bit complicated - we'll divide the month
                                // up but we need to take care of fractions
                                // so we don't end up in the middle of a day
                                d.setUTCDate(1);
                                var start = d.getTime();
                                d.setUTCMonth(d.getUTCMonth() + 1);
                                var end = d.getTime();
                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
                                carry = d.getUTCHours();
                                d.setUTCHours(0);
                            }
                            else
                                d.setUTCMonth(d.getUTCMonth() + tickSize);
                        }
                        else if (unit == "year") {
                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);
                        }
                        else
                            d.setTime(v + step);
                    } while (v < axis.max && v != prev);

                    return ticks;
                };

                formatter = function (v, axis) {
                    var d = new Date(v);

                    // first check global format
                    if (axisOptions.timeformat != null)
                        return $.plot.formatDate(d, axisOptions.timeformat, axisOptions.monthNames);
                    
                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
                    var span = axis.max - axis.min;
                    var suffix = (axisOptions.twelveHourClock) ? " %p" : "";
                    
                    if (t < timeUnitSize.minute)
                        fmt = "%h:%M:%S" + suffix;
                    else if (t < timeUnitSize.day) {
                        if (span < 2 * timeUnitSize.day)
                            fmt = "%h:%M" + suffix;
                        else
                            fmt = "%b %d %h:%M" + suffix;
                    }
                    else if (t < timeUnitSize.month)
                        fmt = "%b %d";
                    else if (t < timeUnitSize.year) {
                        if (span < timeUnitSize.year)
                            fmt = "%b";
                        else
                            fmt = "%b %y";
                    }
                    else
                        fmt = "%y";
                    
                    return $.plot.formatDate(d, fmt, axisOptions.monthNames);
                };
            }
            else {
                // pretty rounding of base-10 numbers
                var maxDec = axisOptions.tickDecimals;
                var dec = -Math.floor(Math.log(delta) / Math.LN10);
                if (maxDec != null && dec > maxDec)
                    dec = maxDec;

                magn = Math.pow(10, -dec);
                norm = delta / magn; // norm is between 1.0 and 10.0
                
                if (norm < 1.5)
                    size = 1;
                else if (norm < 3) {
                    size = 2;
                    // special case for 2.5, requires an extra decimal
                    if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {
                        size = 2.5;
                        ++dec;
                    }
                }
                else if (norm < 7.5)
                    size = 5;
                else
                    size = 10;

                size *= magn;
                
                if (axisOptions.minTickSize != null && size < axisOptions.minTickSize)
                    size = axisOptions.minTickSize;

                if (axisOptions.tickSize != null)
                    size = axisOptions.tickSize;

                axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);

                generator = function (axis) {
                    var ticks = [];

                    // spew out all possible ticks
                    var start = floorInBase(axis.min, axis.tickSize),
                        i = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = start + i * axis.tickSize;
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        ++i;
                    } while (v < axis.max && v != prev);
                    return ticks;
                };

                formatter = function (v, axis) {
                    return v.toFixed(axis.tickDecimals);
                };
            }

            axis.tickSize = unit ? [size, unit] : size;
            axis.tickGenerator = generator;
            if ($.isFunction(axisOptions.tickFormatter))
                axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
            else
                axis.tickFormatter = formatter;
        }
        
        function setTicks(axis, axisOptions) {
            axis.ticks = [];

            if (!axis.used)
                return;
            
            if (axisOptions.ticks == null)
                axis.ticks = axis.tickGenerator(axis);
            else if (typeof axisOptions.ticks == "number") {
                if (axisOptions.ticks > 0)
                    axis.ticks = axis.tickGenerator(axis);
            }
            else if (axisOptions.ticks) {
                var ticks = axisOptions.ticks;

                if ($.isFunction(ticks))
                    // generate the ticks
                    ticks = ticks({ min: axis.min, max: axis.max });
                
                // clean up the user-supplied ticks, copy them over
                var i, v;
                for (i = 0; i < ticks.length; ++i) {
                    var label = null;
                    var t = ticks[i];
                    if (typeof t == "object") {
                        v = t[0];
                        if (t.length > 1)
                            label = t[1];
                    }
                    else
                        v = t;
                    if (label == null)
                        label = axis.tickFormatter(v, axis);
                    axis.ticks[i] = { v: v, label: label };
                }
            }

            if (axisOptions.autoscaleMargin != null && axis.ticks.length > 0) {
                // snap to ticks
                if (axisOptions.min == null)
                    axis.min = Math.min(axis.min, axis.ticks[0].v);
                if (axisOptions.max == null && axis.ticks.length > 1)
                    axis.max = Math.max(axis.max, axis.ticks[axis.ticks.length - 1].v);
            }
        }
      
        function draw() {
            ctx.clearRect(0, 0, canvasWidth, canvasHeight);

            var grid = options.grid;
            
            if (grid.show && !grid.aboveData)
                drawGrid();

            for (var i = 0; i < series.length; ++i)
                drawSeries(series[i]);

            executeHooks(hooks.draw, [ctx]);
            
            if (grid.show && grid.aboveData)
                drawGrid();
        }

        function extractRange(ranges, coord) {
            var firstAxis = coord + "axis",
                secondaryAxis = coord + "2axis",
                axis, from, to, reverse;

            if (ranges[firstAxis]) {
                axis = axes[firstAxis];
                from = ranges[firstAxis].from;
                to = ranges[firstAxis].to;
            }
            else if (ranges[secondaryAxis]) {
                axis = axes[secondaryAxis];
                from = ranges[secondaryAxis].from;
                to = ranges[secondaryAxis].to;
            }
            else {
                // backwards-compat stuff - to be removed in future
                axis = axes[firstAxis];
                from = ranges[coord + "1"];
                to = ranges[coord + "2"];
            }

            // auto-reverse as an added bonus
            if (from != null && to != null && from > to)
                return { from: to, to: from, axis: axis };
            
            return { from: from, to: to, axis: axis };
        }
        
        function drawGrid() {
            var i;
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            // draw background, if any
            if (options.grid.backgroundColor) {
                ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
                ctx.fillRect(0, 0, plotWidth, plotHeight);
            }

            // draw markings
            var markings = options.grid.markings;
            if (markings) {
                if ($.isFunction(markings))
                    // xmin etc. are backwards-compatible, to be removed in future
                    markings = markings({ xmin: axes.xaxis.min, xmax: axes.xaxis.max, ymin: axes.yaxis.min, ymax: axes.yaxis.max, xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis });

                for (i = 0; i < markings.length; ++i) {
                    var m = markings[i],
                        xrange = extractRange(m, "x"),
                        yrange = extractRange(m, "y");

                    // fill in missing
                    if (xrange.from == null)
                        xrange.from = xrange.axis.min;
                    if (xrange.to == null)
                        xrange.to = xrange.axis.max;
                    if (yrange.from == null)
                        yrange.from = yrange.axis.min;
                    if (yrange.to == null)
                        yrange.to = yrange.axis.max;

                    // clip
                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||
                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)
                        continue;

                    xrange.from = Math.max(xrange.from, xrange.axis.min);
                    xrange.to = Math.min(xrange.to, xrange.axis.max);
                    yrange.from = Math.max(yrange.from, yrange.axis.min);
                    yrange.to = Math.min(yrange.to, yrange.axis.max);

                    if (xrange.from == xrange.to && yrange.from == yrange.to)
                        continue;

                    // then draw
                    xrange.from = xrange.axis.p2c(xrange.from);
                    xrange.to = xrange.axis.p2c(xrange.to);
                    yrange.from = yrange.axis.p2c(yrange.from);
                    yrange.to = yrange.axis.p2c(yrange.to);
                    
                    if (xrange.from == xrange.to || yrange.from == yrange.to) {
                        // draw line
                        ctx.beginPath();
                        ctx.strokeStyle = m.color || options.grid.markingsColor;
                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
                        //ctx.moveTo(Math.floor(xrange.from), yrange.from);
                        //ctx.lineTo(Math.floor(xrange.to), yrange.to);
                        ctx.moveTo(xrange.from, yrange.from);
                        ctx.lineTo(xrange.to, yrange.to);
                        ctx.stroke();
                    }
                    else {
                        // fill area
                        ctx.fillStyle = m.color || options.grid.markingsColor;
                        ctx.fillRect(xrange.from, yrange.to,
                                     xrange.to - xrange.from,
                                     yrange.from - yrange.to);
                    }
                }
            }
            
            // draw the inner grid
            ctx.lineWidth = 1;
            ctx.strokeStyle = options.grid.tickColor;
            ctx.beginPath();
            var v, axis = axes.xaxis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axes.xaxis.max)
                    continue;   // skip those lying on the axes

                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight);
            }

            axis = axes.yaxis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axis.max)
                    continue;

                ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }

            axis = axes.x2axis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axis.max)
                    continue;
    
                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5);
            }

            axis = axes.y2axis;
            for (i = 0; i < axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v <= axis.min || v >= axis.max)
                    continue;

                ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }
            
            ctx.stroke();
            
            if (options.grid.borderWidth) {
                // draw border
                var bw = options.grid.borderWidth;
                ctx.lineWidth = bw;
                ctx.strokeStyle = options.grid.borderColor;
                ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);
            }

            ctx.restore();
        }

        function insertLabels() {
            placeholder.find(".tickLabels").remove();
            
            var html = ['<div class="tickLabels" style="font-size:smaller;color:' + options.grid.color + '">'];

            function addLabels(axis, labelGenerator) {
                for (var i = 0; i < axis.ticks.length; ++i) {
                    var tick = axis.ticks[i];
                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)
                        continue;
                    html.push(labelGenerator(tick, axis));
                }
            }

            var margin = options.grid.labelMargin + options.grid.borderWidth;
            
            addLabels(axes.xaxis, function (tick, axis) {
                return '<div style="position:absolute;top:' + (plotOffset.top + plotHeight + margin) + 'px;left:' + Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
            });
            
            
            addLabels(axes.yaxis, function (tick, axis) {
                return '<div style="position:absolute;top:' + Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;right:' + (plotOffset.right + plotWidth + margin) + 'px;width:' + axis.labelWidth + 'px;text-align:right" class="tickLabel">' + tick.label + "</div>";
            });
            
            addLabels(axes.x2axis, function (tick, axis) {
                return '<div style="position:absolute;bottom:' + (plotOffset.bottom + plotHeight + margin) + 'px;left:' + Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel">' + tick.label + "</div>";
            });
            
            addLabels(axes.y2axis, function (tick, axis) {
                return '<div style="position:absolute;top:' + Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;left:' + (plotOffset.left + plotWidth + margin) +'px;width:' + axis.labelWidth + 'px;text-align:left" class="tickLabel">' + tick.label + "</div>";
            });

            html.push('</div>');
            
            placeholder.append(html.join(""));
        }

        function drawSeries(series) {
            if (series.lines.show)
                drawSeriesLines(series);
            if (series.bars.show)
                drawSeriesBars(series);
            if (series.points.show)
                drawSeriesPoints(series);
        }
        
        function drawSeriesLines(series) {
            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {
                var points = datapoints.points,
                    ps = datapoints.pointsize,
                    prevx = null, prevy = null;
                
                ctx.beginPath();
                for (var i = ps; i < points.length; i += ps) {
                    var x1 = points[i - ps], y1 = points[i - ps + 1],
                        x2 = points[i], y2 = points[i + 1];
                    
                    if (x1 == null || x2 == null)
                        continue;

                    // clip with ymin
                    if (y1 <= y2 && y1 < axisy.min) {
                        if (y2 < axisy.min)
                            continue;   // line segment is outside
                        // compute new intersection point
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 <= y1 && y2 < axisy.min) {
                        if (y1 < axisy.min)
                            continue;
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                    // clip with ymax
                    if (y1 >= y2 && y1 > axisy.max) {
                        if (y2 > axisy.max)
                            continue;
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 >= y1 && y2 > axisy.max) {
                        if (y1 > axisy.max)
                            continue;
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }

                    // clip with xmin
                    if (x1 <= x2 && x1 < axisx.min) {
                        if (x2 < axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 <= x1 && x2 < axisx.min) {
                        if (x1 < axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                    // clip with xmax
                    if (x1 >= x2 && x1 > axisx.max) {
                        if (x2 > axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 >= x1 && x2 > axisx.max) {
                        if (x1 > axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (x1 != prevx || y1 != prevy)
                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);
                    
                    prevx = x2;
                    prevy = y2;
                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);
                }
                ctx.stroke();
            }

            function plotLineArea(datapoints, axisx, axisy) {
                var points = datapoints.points,
                    ps = datapoints.pointsize,
                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),
                    top, lastX = 0, areaOpen = false;
                
                for (var i = ps; i < points.length; i += ps) {
                    var x1 = points[i - ps], y1 = points[i - ps + 1],
                        x2 = points[i], y2 = points[i + 1];
                    
                    if (areaOpen && x1 != null && x2 == null) {
                        // close area
                        ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                        ctx.fill();
                        areaOpen = false;
                        continue;
                    }

                    if (x1 == null || x2 == null)
                        continue;

                    // clip x values
                    
                    // clip with xmin
                    if (x1 <= x2 && x1 < axisx.min) {
                        if (x2 < axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 <= x1 && x2 < axisx.min) {
                        if (x1 < axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                    // clip with xmax
                    if (x1 >= x2 && x1 > axisx.max) {
                        if (x2 > axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 >= x1 && x2 > axisx.max) {
                        if (x1 > axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (!areaOpen) {
                        // open area
                        ctx.beginPath();
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
                        areaOpen = true;
                    }
                    
                    // now first check the case where both is outside
                    if (y1 >= axisy.max && y2 >= axisy.max) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
                        lastX = x2;
                        continue;
                    }
                    else if (y1 <= axisy.min && y2 <= axisy.min) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
                        lastX = x2;
                        continue;
                    }
                    
                    // else it's a bit more complicated, there might
                    // be two rectangles and two triangles we need to fill
                    // in; to find these keep track of the current x values
                    var x1old = x1, x2old = x2;

                    // and clip the y values, without shortcutting
                    
                    // clip with ymin
                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                    // clip with ymax
                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }


                    // if the x value was changed we got a rectangle
                    // to fill
                    if (x1 != x1old) {
                        if (y1 <= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(top));
                    }
                    
                    // fill the triangles
                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));

                    // fill the other rectangle if it's there
                    if (x2 != x2old) {
                        if (y2 <= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top));
                    }

                    lastX = Math.max(x2, x2old);
                }

                if (areaOpen) {
                    ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                    ctx.fill();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            var lw = series.lines.lineWidth,
                sw = series.shadowSize;
            // FIXME: consider another form of shadow when filling is turned on
            if (lw > 0 && sw > 0) {
                // draw shadow as a thick and thin line with transparency
                ctx.lineWidth = sw;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                // position shadow at angle from the mid of line
                var angle = Math.PI/18;
                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);
                ctx.lineWidth = sw/2;
                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);
            if (fillStyle) {
                ctx.fillStyle = fillStyle;
                plotLineArea(series.datapoints, series.xaxis, series.yaxis);
            }

            if (lw > 0)
                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawSeriesPoints(series) {
            function plotPoints(datapoints, radius, fillStyle, offset, circumference, axisx, axisy) {
                var points = datapoints.points, ps = datapoints.pointsize;
                
                for (var i = 0; i < points.length; i += ps) {
                    var x = points[i], y = points[i + 1];
                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
                        continue;
                    
                    ctx.beginPath();
                    ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, circumference, false);
                    if (fillStyle) {
                        ctx.fillStyle = fillStyle;
                        ctx.fill();
                    }
                    ctx.stroke();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            var lw = series.lines.lineWidth,
                sw = series.shadowSize,
                radius = series.points.radius;
            if (lw > 0 && sw > 0) {
                // draw shadow in two steps
                var w = sw / 2;
                ctx.lineWidth = w;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotPoints(series.datapoints, radius, null, w + w/2, Math.PI,
                           series.xaxis, series.yaxis);

                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotPoints(series.datapoints, radius, null, w/2, Math.PI,
                           series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            plotPoints(series.datapoints, radius,
                       getFillStyle(series.points, series.color), 0, 2 * Math.PI,
                       series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal) {
            var left, right, bottom, top,
                drawLeft, drawRight, drawTop, drawBottom,
                tmp;

            if (horizontal) {
                drawBottom = drawRight = drawTop = true;
                drawLeft = false;
                left = b;
                right = x;
                top = y + barLeft;
                bottom = y + barRight;

                // account for negative bars
                if (right < left) {
                    tmp = right;
                    right = left;
                    left = tmp;
                    drawLeft = true;
                    drawRight = false;
                }
            }
            else {
                drawLeft = drawRight = drawTop = true;
                drawBottom = false;
                left = x + barLeft;
                right = x + barRight;
                bottom = b;
                top = y;

                // account for negative bars
                if (top < bottom) {
                    tmp = top;
                    top = bottom;
                    bottom = tmp;
                    drawBottom = true;
                    drawTop = false;
                }
            }
           
            // clip
            if (right < axisx.min || left > axisx.max ||
                top < axisy.min || bottom > axisy.max)
                return;
            
            if (left < axisx.min) {
                left = axisx.min;
                drawLeft = false;
            }

            if (right > axisx.max) {
                right = axisx.max;
                drawRight = false;
            }

            if (bottom < axisy.min) {
                bottom = axisy.min;
                drawBottom = false;
            }
            
            if (top > axisy.max) {
                top = axisy.max;
                drawTop = false;
            }

            left = axisx.p2c(left);
            bottom = axisy.p2c(bottom);
            right = axisx.p2c(right);
            top = axisy.p2c(top);
            
            // fill the bar
            if (fillStyleCallback) {
                c.beginPath();
                c.moveTo(left, bottom);
                c.lineTo(left, top);
                c.lineTo(right, top);
                c.lineTo(right, bottom);
                c.fillStyle = fillStyleCallback(bottom, top);
                c.fill();
            }

            // draw outline
            if (drawLeft || drawRight || drawTop || drawBottom) {
                c.beginPath();

                // FIXME: inline moveTo is buggy with excanvas
                c.moveTo(left, bottom + offset);
                if (drawLeft)
                    c.lineTo(left, top + offset);
                else
                    c.moveTo(left, top + offset);
                if (drawTop)
                    c.lineTo(right, top + offset);
                else
                    c.moveTo(right, top + offset);
                if (drawRight)
                    c.lineTo(right, bottom + offset);
                else
                    c.moveTo(right, bottom + offset);
                if (drawBottom)
                    c.lineTo(left, bottom + offset);
                else
                    c.moveTo(left, bottom + offset);
                c.stroke();
            }
        }
        
        function drawSeriesBars(series) {
            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {
                var points = datapoints.points, ps = datapoints.pointsize;
                
                for (var i = 0; i < points.length; i += ps) {
                    if (points[i] == null)
                        continue;
                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal);
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            // FIXME: figure out a way to add shadows (for instance along the right edge)
            ctx.lineWidth = series.bars.lineWidth;
            ctx.strokeStyle = series.color;
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;
            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function getFillStyle(filloptions, seriesColor, bottom, top) {
            var fill = filloptions.fill;
            if (!fill)
                return null;

            if (filloptions.fillColor)
                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);
            
            var c = $.color.parse(seriesColor);
            c.a = typeof fill == "number" ? fill : 0.4;
            c.normalize();
            return c.toString();
        }
        
        function insertLegend() {
            placeholder.find(".legend").remove();

            if (!options.legend.show)
                return;
            
            var fragments = [], rowStarted = false,
                lf = options.legend.labelFormatter, s, label;
            for (i = 0; i < series.length; ++i) {
                s = series[i];
                label = s.label;
                if (!label)
                    continue;
                
                if (i % options.legend.noColumns == 0) {
                    if (rowStarted)
                        fragments.push('</tr>');
                    fragments.push('<tr>');
                    rowStarted = true;
                }

                if (lf)
                    label = lf(label, s);
                
                fragments.push(
                    '<td class="legendColorBox"><div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"><div style="width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden"></div></div></td>' +
                    '<td class="legendLabel">' + label + '</td>');
            }
            if (rowStarted)
                fragments.push('</tr>');
            
            if (fragments.length == 0)
                return;

            var table = '<table style="font-size:smaller;color:' + options.grid.color + '">' + fragments.join("") + '</table>';
            if (options.legend.container != null)
                $(options.legend.container).html(table);
            else {
                var pos = "",
                    p = options.legend.position,
                    m = options.legend.margin;
                if (m[0] == null)
                    m = [m, m];
                if (p.charAt(0) == "n")
                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
                else if (p.charAt(0) == "s")
                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
                if (p.charAt(1) == "e")
                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
                else if (p.charAt(1) == "w")
                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
                var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);
                if (options.legend.backgroundOpacity != 0.0) {
                    // put in the transparent background
                    // separately to avoid blended labels and
                    // label boxes
                    var c = options.legend.backgroundColor;
                    if (c == null) {
                        c = options.grid.backgroundColor;
                        if (c && typeof c == "string")
                            c = $.color.parse(c);
                        else
                            c = $.color.extract(legend, 'background-color');
                        c.a = 1;
                        c = c.toString();
                    }
                    var div = legend.children();
                    $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
                }
            }
        }


        // interactive features
        
        var highlights = [],
            redrawTimeout = null;
        
        // returns the data item the mouse is over, or null if none is found
        function findNearbyItem(mouseX, mouseY, seriesFilter) {
            var maxDistance = options.grid.mouseActiveRadius,
                smallestDistance = maxDistance * maxDistance + 1,
                item = null, foundPoint = false, i, j;

            for (i = 0; i < series.length; ++i) {
                if (!seriesFilter(series[i]))
                    continue;
                
                var s = series[i],
                    axisx = s.xaxis,
                    axisy = s.yaxis,
                    points = s.datapoints.points,
                    ps = s.datapoints.pointsize,
                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster
                    my = axisy.c2p(mouseY),
                    maxx = maxDistance / axisx.scale,
                    maxy = maxDistance / axisy.scale;

                if (s.lines.show || s.points.show) {
                    for (j = 0; j < points.length; j += ps) {
                        var x = points[j], y = points[j + 1];
                        if (x == null)
                            continue;
                        
                        // For points and lines, the cursor must be within a
                        // certain distance to the data point
                        if (x - mx > maxx || x - mx < -maxx ||
                            y - my > maxy || y - my < -maxy)
                            continue;

                        // We have to calculate distances in pixels, not in
                        // data units, because the scales of the axes may be different
                        var dx = Math.abs(axisx.p2c(x) - mouseX),
                            dy = Math.abs(axisy.p2c(y) - mouseY),
                            dist = dx * dx + dy * dy; // we save the sqrt

                        // use <= to ensure last point takes precedence
                        // (last generally means on top of)
                        if (dist <= smallestDistance) {
                            smallestDistance = dist;
                            item = [i, j / ps];
                        }
                    }
                }
                    
                if (s.bars.show && !item) { // no other point can be nearby
                    var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2,
                        barRight = barLeft + s.bars.barWidth;
                    
                    for (j = 0; j < points.length; j += ps) {
                        var x = points[j], y = points[j + 1], b = points[j + 2];
                        if (x == null)
                            continue;
  
                        // for a bar graph, the cursor must be inside the bar
                        if (series[i].bars.horizontal ? 
                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) && 
                             my >= y + barLeft && my <= y + barRight) :
                            (mx >= x + barLeft && mx <= x + barRight &&
                             my >= Math.min(b, y) && my <= Math.max(b, y)))
                                item = [i, j / ps];
                    }
                }
            }

            if (item) {
                i = item[0];
                j = item[1];
                ps = series[i].datapoints.pointsize;
                
                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),
                         dataIndex: j,
                         series: series[i],
                         seriesIndex: i };
            }
            
            return null;
        }

        function onMouseMove(e) {
            if (options.grid.hoverable)
                triggerClickHoverEvent("plothover", e,
                                       function (s) { return s["hoverable"] != false; });
        }
        
        function onClick(e) {
            triggerClickHoverEvent("plotclick", e,
                                   function (s) { return s["clickable"] != false; });
        }

        // trigger click or hover event (they send the same parameters
        // so we share their code)
        function triggerClickHoverEvent(eventname, event, seriesFilter) {
            var offset = eventHolder.offset(),
                pos = { pageX: event.pageX, pageY: event.pageY },
                canvasX = event.pageX - offset.left - plotOffset.left,
                canvasY = event.pageY - offset.top - plotOffset.top;

            if (axes.xaxis.used)
                pos.x = axes.xaxis.c2p(canvasX);
            if (axes.yaxis.used)
                pos.y = axes.yaxis.c2p(canvasY);
            if (axes.x2axis.used)
                pos.x2 = axes.x2axis.c2p(canvasX);
            if (axes.y2axis.used)
                pos.y2 = axes.y2axis.c2p(canvasY);

            var item = findNearbyItem(canvasX, canvasY, seriesFilter);

            if (item) {
                // fill in mouse pos for any listeners out there
                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);
                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);
            }

            if (options.grid.autoHighlight) {
                // clear auto-highlights
                for (var i = 0; i < highlights.length; ++i) {
                    var h = highlights[i];
                    if (h.auto == eventname &&
                        !(item && h.series == item.series && h.point == item.datapoint))
                        unhighlight(h.series, h.point);
                }
                
                if (item)
                    highlight(item.series, item.datapoint, eventname);
            }
            
            placeholder.trigger(eventname, [ pos, item ]);
        }

        function triggerRedrawOverlay() {
            if (!redrawTimeout)
                redrawTimeout = setTimeout(drawOverlay, 30);
        }

        function drawOverlay() {
            redrawTimeout = null;

            // draw highlights
            octx.save();
            octx.clearRect(0, 0, canvasWidth, canvasHeight);
            octx.translate(plotOffset.left, plotOffset.top);
            
            var i, hi;
            for (i = 0; i < highlights.length; ++i) {
                hi = highlights[i];

                if (hi.series.bars.show)
                    drawBarHighlight(hi.series, hi.point);
                else
                    drawPointHighlight(hi.series, hi.point);
            }
            octx.restore();
            
            executeHooks(hooks.drawOverlay, [octx]);
        }
        
        function highlight(s, point, auto) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i == -1) {
                highlights.push({ series: s, point: point, auto: auto });

                triggerRedrawOverlay();
            }
            else if (!auto)
                highlights[i].auto = false;
        }
            
        function unhighlight(s, point) {
            if (s == null && point == null) {
                highlights = [];
                triggerRedrawOverlay();
            }
            
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i != -1) {
                highlights.splice(i, 1);

                triggerRedrawOverlay();
            }
        }
        
        function indexOfHighlight(s, p) {
            for (var i = 0; i < highlights.length; ++i) {
                var h = highlights[i];
                if (h.series == s && h.point[0] == p[0]
                    && h.point[1] == p[1])
                    return i;
            }
            return -1;
        }
        
        function drawPointHighlight(series, point) {
            var x = point[0], y = point[1],
                axisx = series.xaxis, axisy = series.yaxis;
            
            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)
                return;
            
            var pointRadius = series.points.radius + series.points.lineWidth / 2;
            octx.lineWidth = pointRadius;
            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();
            var radius = 1.5 * pointRadius;
            octx.beginPath();
            octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, false);
            octx.stroke();
        }

        function drawBarHighlight(series, point) {
            octx.lineWidth = series.bars.lineWidth;
            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();
            var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString();
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,
                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal);
        }

        function getColorOrGradient(spec, bottom, top, defaultColor) {
            if (typeof spec == "string")
                return spec;
            else {
                // assume this is a gradient spec; IE currently only
                // supports a simple vertical gradient properly, so that's
                // what we support too
                var gradient = ctx.createLinearGradient(0, top, 0, bottom);
                
                for (var i = 0, l = spec.colors.length; i < l; ++i) {
                    var c = spec.colors[i];
                    if (typeof c != "string") {
                        c = $.color.parse(defaultColor).scale('rgb', c.brightness);
                        c.a *= c.opacity;
                        c = c.toString();
                    }
                    gradient.addColorStop(i / (l - 1), c);
                }
                
                return gradient;
            }
        }
    }

    $.plot = function(placeholder, data, options) {
        var plot = new Plot($(placeholder), data, options, $.plot.plugins);
        /*var t0 = new Date();
        var t1 = new Date();
        var tstr = "time used (msecs): " + (t1.getTime() - t0.getTime())
        if (window.console)
            console.log(tstr);
        else
            alert(tstr);*/
        return plot;
    };

    $.plot.plugins = [];

    // returns a string with the date d formatted according to fmt
    $.plot.formatDate = function(d, fmt, monthNames) {
        var leftPad = function(n) {
            n = "" + n;
            return n.length == 1 ? "0" + n : n;
        };
        
        var r = [];
        var escape = false;
        var hours = d.getUTCHours();
        var isAM = hours < 12;
        if (monthNames == null)
            monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

        if (fmt.search(/%p|%P/) != -1) {
            if (hours > 12) {
                hours = hours - 12;
            } else if (hours == 0) {
                hours = 12;
            }
        }
        for (var i = 0; i < fmt.length; ++i) {
            var c = fmt.charAt(i);
            
            if (escape) {
                switch (c) {
                case 'h': c = "" + hours; break;
                case 'H': c = leftPad(hours); break;
                case 'M': c = leftPad(d.getUTCMinutes()); break;
                case 'S': c = leftPad(d.getUTCSeconds()); break;
                case 'd': c = "" + d.getUTCDate(); break;
                case 'm': c = "" + (d.getUTCMonth() + 1); break;
                case 'y': c = "" + d.getUTCFullYear(); break;
                case 'b': c = "" + monthNames[d.getUTCMonth()]; break;
                case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break;
                case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break;
                }
                r.push(c);
                escape = false;
            }
            else {
                if (c == "%")
                    escape = true;
                else
                    r.push(c);
            }
        }
        return r.join("");
    };
    
    // round to nearby lower multiple of base
    function floorInBase(n, base) {
        return base * Math.floor(n / base);
    }
    
})(jQuery);

Added Site/Site_W/jquery.js.

cannot compute difference between binary files

Added Site/Site_W/json2.js.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
/*
    http://www.JSON.org/json2.js
    2011-02-23

    Public Domain.

    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.

    See http://www.JSON.org/js.html


    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
    NOT CONTROL.


    This file creates a global JSON object containing two methods: stringify
    and parse.

        JSON.stringify(value, replacer, space)
            value       any JavaScript value, usually an object or array.

            replacer    an optional parameter that determines how object
                        values are stringified for objects. It can be a
                        function or an array of strings.

            space       an optional parameter that specifies the indentation
                        of nested structures. If it is omitted, the text will
                        be packed without extra whitespace. If it is a number,
                        it will specify the number of spaces to indent at each
                        level. If it is a string (such as '\t' or '&nbsp;'),
                        it contains the characters used to indent at each level.

            This method produces a JSON text from a JavaScript value.

            When an object value is found, if the object contains a toJSON
            method, its toJSON method will be called and the result will be
            stringified. A toJSON method does not serialize: it returns the
            value represented by the name/value pair that should be serialized,
            or undefined if nothing should be serialized. The toJSON method
            will be passed the key associated with the value, and this will be
            bound to the value

            For example, this would serialize Dates as ISO strings.

                Date.prototype.toJSON = function (key) {
                    function f(n) {
                        // Format integers to have at least two digits.
                        return n < 10 ? '0' + n : n;
                    }

                    return this.getUTCFullYear()   + '-' +
                         f(this.getUTCMonth() + 1) + '-' +
                         f(this.getUTCDate())      + 'T' +
                         f(this.getUTCHours())     + ':' +
                         f(this.getUTCMinutes())   + ':' +
                         f(this.getUTCSeconds())   + 'Z';
                };

            You can provide an optional replacer method. It will be passed the
            key and value of each member, with this bound to the containing
            object. The value that is returned from your method will be
            serialized. If your method returns undefined, then the member will
            be excluded from the serialization.

            If the replacer parameter is an array of strings, then it will be
            used to select the members to be serialized. It filters the results
            such that only members with keys listed in the replacer array are
            stringified.

            Values that do not have JSON representations, such as undefined or
            functions, will not be serialized. Such values in objects will be
            dropped; in arrays they will be replaced with null. You can use
            a replacer function to replace those with JSON values.
            JSON.stringify(undefined) returns undefined.

            The optional space parameter produces a stringification of the
            value that is filled with line breaks and indentation to make it
            easier to read.

            If the space parameter is a non-empty string, then that string will
            be used for indentation. If the space parameter is a number, then
            the indentation will be that many spaces.

            Example:

            text = JSON.stringify(['e', {pluribus: 'unum'}]);
            // text is '["e",{"pluribus":"unum"}]'


            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
            // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'

            text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });
            // text is '["Date(---current time---)"]'


        JSON.parse(text, reviver)
            This method parses a JSON text to produce an object or array.
            It can throw a SyntaxError exception.

            The optional reviver parameter is a function that can filter and
            transform the results. It receives each of the keys and values,
            and its return value is used instead of the original value.
            If it returns what it received, then the structure is not modified.
            If it returns undefined then the member is deleted.

            Example:

            // Parse the text. Values that look like ISO date strings will
            // be converted to Date objects.

            myData = JSON.parse(text, function (key, value) {
                var a;
                if (typeof value === 'string') {
                    a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
                    if (a) {
                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
                            +a[5], +a[6]));
                    }
                }
                return value;
            });

            myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
                var d;
                if (typeof value === 'string' &&
                        value.slice(0, 5) === 'Date(' &&
                        value.slice(-1) === ')') {
                    d = new Date(value.slice(5, -1));
                    if (d) {
                        return d;
                    }
                }
                return value;
            });


    This is a reference implementation. You are free to copy, modify, or
    redistribute.
*/

/*jslint evil: true, strict: false, regexp: false */

/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
    lastIndex, length, parse, prototype, push, replace, slice, stringify,
    test, toJSON, toString, valueOf
*/


// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.

var JSON;
if (!JSON) {
    JSON = {};
}

(function () {
    "use strict";

    function f(n) {
        // Format integers to have at least two digits.
        return n < 10 ? '0' + n : n;
    }

    if (typeof Date.prototype.toJSON !== 'function') {

        Date.prototype.toJSON = function (key) {

            return isFinite(this.valueOf()) ?
                this.getUTCFullYear()     + '-' +
                f(this.getUTCMonth() + 1) + '-' +
                f(this.getUTCDate())      + 'T' +
                f(this.getUTCHours())     + ':' +
                f(this.getUTCMinutes())   + ':' +
                f(this.getUTCSeconds())   + 'Z' : null;
        };

        String.prototype.toJSON      =
            Number.prototype.toJSON  =
            Boolean.prototype.toJSON = function (key) {
                return this.valueOf();
            };
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,
        indent,
        meta = {    // table of character substitutions
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;


    function quote(string) {

// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.

        escapable.lastIndex = 0;
        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
            var c = meta[a];
            return typeof c === 'string' ? c :
                '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
        }) + '"' : '"' + string + '"';
    }


    function str(key, holder) {

// Produce a string from holder[key].

        var i,          // The loop counter.
            k,          // The member key.
            v,          // The member value.
            length,
            mind = gap,
            partial,
            value = holder[key];

// If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.

        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }

// What happens next depends on the value's type.

        switch (typeof value) {
        case 'string':
            return quote(value);

        case 'number':

// JSON numbers must be finite. Encode non-finite numbers as null.

            return isFinite(value) ? String(value) : 'null';

        case 'boolean':
        case 'null':

// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.

            return String(value);

// If the type is 'object', we might be dealing with an object or an array or
// null.

        case 'object':

// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.

            if (!value) {
                return 'null';
            }

// Make an array to hold the partial results of stringifying this object value.

            gap += indent;
            partial = [];

// Is the value an array?

            if (Object.prototype.toString.apply(value) === '[object Array]') {

// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.

                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }

// Join all of the elements together, separated with commas, and wrap them in
// brackets.

                v = partial.length === 0 ? '[]' : gap ?
                    '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
                    '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }

// If the replacer is an array, use it to select the members to be stringified.

            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    if (typeof rep[i] === 'string') {
                        k = rep[i];
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {

// Otherwise, iterate through all of the keys in the object.

                for (k in value) {
                    if (Object.prototype.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }

// Join all of the member texts together, separated with commas,
// and wrap them in braces.

            v = partial.length === 0 ? '{}' : gap ?
                '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
                '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }

// If the JSON object does not yet have a stringify method, give it one.

    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {

// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.

            var i;
            gap = '';
            indent = '';

// If the space parameter is a number, make an indent string containing that
// many spaces.

            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }

// If the space parameter is a string, it will be used as the indent string.

            } else if (typeof space === 'string') {
                indent = space;
            }

// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.

            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                    typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }

// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.

            return str('', {'': value});
        };
    }


// If the JSON object does not yet have a parse method, give it one.

    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            function walk(holder, key) {

// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.

                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.prototype.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }


// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.

            text = String(text);
            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

            if (/^[\],:{}\s]*$/
                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

                j = eval('(' + text + ')');

// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.

                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }

// If the text is not JSON parseable, then a SyntaxError is thrown.

            throw new SyntaxError('JSON.parse');
        };
    }
}());

Added Site/Site_W/script.js.





































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
	JAVA SCRIPT TEST FILE
*/

var c=0;
var t;
var timer_is_on=0;
var img;
var section;

function timedCount()
{
	document.getElementById('txt').value=c;
	c=c+1;
	if( timer_is_on == 1 )
	{
		// This is the time in ms ---
		//							|
		//                          V
		t=setTimeout("timedCount()",100);
		
		// Build string here that is the next image file
		
		img = c % 10;		// Mod 10
		d = new Date();
		section = "images/" + img + ".jpg?" +d.getTime();		
		$("#NUMBER").attr('src',section); 
	}
}

// Called in button press to stop start

function doTimer()
{
	if (!timer_is_on == 1)
	{
		// Start timer
		
		timer_is_on=1;
		timedCount();
	}
	else
	{
		// Reset timer when button is pressed
		
		timer_is_on = 0;
		c = 0;
	}
}

Added Site/Site_W/scriptgraph.js.















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
	JAVA SCRIPT TEST FILE
	
	 4-Mar-2011	Convert to use async AJAX call
	 5-Mar-2011 Convert to use PUT call [35b17f8dc3]
	 7-Mar-2011 Send data request as part of the URI
	 			NOTE: Value is all in CAPS on receipt
*/

var c=0;
var t;
var timer_is_on=0;
var section;
var val;
var path;
var w;
var result;

var lcnURI;

// Get location for REST TARGETS

lcnURI = window.location.protocol + "//" + window.location.hostname + ":"
				+ window.location.port + "/rest/";

// Response function to handle the GET request
// result = { LINE1: "###", LINE2: "###", LINE3:"###",LINE4:"###" }
//
function rest_response(result,status,x )
{
		val = result.LINE1 + 0;
		line1 = [[1,val]];
		
		val = result.LINE2 + 0;
		line2 = [[val,2]];
		
		val = result.LINE3 + 0;
		line3 = [[val,3]];
		
		val = result.LINE4 + 0;
		line4 = [[val,4]];
/*
		$.plot( $('#PLOT'), [
				{ label: "P1", data:line1, bars:{show:true, horizontal:true}   },
				{ label: "P2", data:line2, bars:{show:true, horizontal:true}   },
				{ label: "P3", data:line3, bars:{show:true, horizontal:true}   },
				{ label: "P4", data:line4, bars:{show:true, horizontal:true}   }],
			{ 	xaxis:{max:50.0, min:0 }, 
				yaxis:{ max:5,min:1, ticks:[[1.5, "P-1"], [2.5, "P-2"], [3.5, "P-3"],[4.5,"P-4"]] },
				legend: {show: false}
			}	
*/
		$.plot( $('#PLOT'), [
				{ label: "P1", data:line1, bars:{show:true}   }
							],
			{ 	yaxis:{max:50.0, min:0 }, 
				xaxis:{ max:2,min:1,ticks:[[1.5, "SHOW"]] },
				legend: {show: false}
			}	

		);
}

// Called at timer intervals sends off a GET request
function timedCount()
{	
	// Now turn on or off depending on button
	if( timer_is_on == 1 )
	{
		// This is the time in ms ---
		//							|
		//                          V
		t=setTimeout("timedCount()",100);
		
		// Generate a plot data request
		// NOTE: Send the JSON request as part of the URI
		
		w = "{ \"W\" : \"" + c + "\" } ";
		path = lcnURI + "plot" + "/" + w;
		

		$.ajax({
						type: "POST",
						url: path,
						contentType: "text/plain",
						success: rest_response,
						dataType : "json",
						data : ""
					});

		// Update counter
		document.getElementById('txt').value=c;
		c=c+1;


	}
}

// Called in button press to stop start

function doTimer()
{
	if (!timer_is_on == 1)
	{
		// Start timer
		
		timer_is_on=1;
		timedCount();
		// Disable caching for IE
		$.ajaxSetup ({  cache: false  }); 
	}
	else
	{
		// Reset timer when button is pressed
		
		timer_is_on = 0;
		c = 0;
	}
}

Added Site/Site_W/wtest.html.





















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<html>
	<head>
		<script type="text/javascript" src="jquery.js"></script> 
		<script type="text/javascript" src="jquery.sparkline.min.js"></script> 
		<script type="text/javascript" src="script.js"> </script> 
	</head>
	
	<body>
		<div id="BUTTON">
			<form>
				<input type="button" value="Start count!" onClick="doTimer()">
				<input type="text" id="txt">
			</form>
			<p>Click on the button above. The input field will count forever, starting at 0.</p>
		</div>
		<div id="DATA">
			<center><h1>Data</h1></center>
			<center>
			<a>
				<img id="NUMBER" src="images/0.jpg" />
			</a>

		</div>
	
	</body>
</html>

Added Site/Site_Z/AppController.j.

































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 * AppController.j
 * Site
 *
 * Created by You on November 17, 2010.
 * Copyright 2010, Your Company All rights reserved.
 */

@import <Foundation/CPObject.j>


@implementation AppController : CPObject
{
    CPWindow    theWindow; //this "outlet" is connected automatically by the Cib
}

- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
    // This is called when the application is done loading.
}

- (void)awakeFromCib
{
    // This is called when the cib is done loading.
    // You can implement this method on any object instantiated from a Cib.
    // It's a useful hook for setting up current UI values, and other things. 
    
    // In this case, we want the window from Cib to become our full browser window
    [theWindow setFullBridge:YES];
}

@end

Added Site/Site_Z/Frameworks/AppKit/Browser.environment/AppKit.sj.

more than 10,000 changes

Added Site/Site_Z/Frameworks/AppKit/Browser.environment/MHTMLData.txt.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUeNpiunnvEdO7j5+Z/v//j4H/IbP/geh/EDEY+x+Sun//UNSj62f4z8B099YNgAADAA9PUNwzG//eAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNpimL9qE9Pdh0+Y/v//D8T/mP79Q6chbBD9/x+MjwX/R7D/g9T/h9BgM/5D9BtqqgIEGAC2zE/UgDMaqgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAIAAADAusJtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1j2LNnD8P///8Zvnz5AsIAU6oK6qmqG6cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j2LNnzxcYAABDLQrJ2KbR7QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+PLlCwAFvALdifOWJQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j+AIDe/bsAQBJFQrJwsQiEQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAIAAADAusJtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUCB1j+PLlCwMM79mzBwBaQArJvXzTegAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACYAAAASCAYAAAA31qwVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHpJREFUSMdj+P//P8NgxIPSUaMOG9kOi4+Px4WFoRhDbqAdtgSKB5XD8oH4PxTnDRaHOQDxHySH/YaKDajD5IH4KZKjYPgpVG5AHMYOxMexOAqGj0PV0N1hM/A4Coan0tthBUQ4CoYL6OUwJjxFBsOAFRejVdKow0jEAMbSS1vJwWj5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACYAAAASCAYAAAA31qwVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUSMdj+P//P8NgxAyjDht12KjDaIjj4+OZ6OIwoEUFQPyfSAxSy0Avh4HwVCIcNQOqlq4OYwfi43gcdRyqhu4OA2F5IH6KxVFPoXIMA+UwEHYA4t9IjvoDFWMYaIeBcB6Sw/KxyA+Yw0B4CRQzDDaHCUPxwDlstEoajBgAIvph233GDmUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUCB0FwbENgDAQwMCvmByJpbxIeipqR0pn7ga4gBt4gQZ41lqdc6oa4FPbe6c2QGpqaj/TuDbcxUWSYgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUCB0FwbENgDAQwMCvmByJpbxIeipqR0pn7gYIeIEbuKbqnNNaK+AZtb13asA3ampqQD8COzbceGNz5AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2LNnz/8vX77AMQNQ4NX79+9RBNqvXLnyHyYIUsEGxL1A/BykHQCHWDaL8tTDxAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUCFtj+PLly38Y3rNnz38GGOf9+/cggVcMMM6VK1dAAl0MIGVA/ByIe4GYDQC0XjaO10uChwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewBackground.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAA7CAIAAAA1lncVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB0FwQEBwEAMhDAO/1Je1YSUJX7fJyHDSkDKQMArBwZyJ5uVkWN254EDIQvvkiVhJWFDyuscs7KSsJJlYSXDLgErIwkJj6QErISEeZcOKwMBASMJ33s/zDJY0JkKjKMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUKJFj0NDQWKGmpib1//9/BnyYwczM7L+RkdEuoAYdvApdXFz+u7q6/jc1NT2vqanphlOht7f3/+Dg4P8eHh7/LSwsnmhrayeoqqqyYCj08vI6FhER8T8kJOQ/kP3f2tr6k66ubhPQ3XwoCp2cnLiAJoIVh4WF/ff19f1vZ2f3V19ff7a6uroSXCGIALqTE6j4MEhxeHj4/4CAgP9AA/4bGxvvBrrbEegUQbjRQA/xABU/j4yM/A/SEBQUBPYkMFS2amlp2cAVWllZ9fr7+4MVwRQD+Wft7e1DgM6QASvS09PrdXR0BJsCUwQ0fZu7u7se3I0gRQ4ODmB3gRQA8a/AwMDpQHdLovja1tYWrAjkCSD+BLSuAmg6J0Y4enp6ghUBg+YeMGiigBqZccYMMLDPAQPbBm9cu7m57QE6Gm+CAGEA/dNCZSU2Z+AAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAU1JREFUKM9jsLS0XGFmZib1//9/BnyYwdfX97+7u/suCwsLHbwKExMT/4Owt7f3eSsrKzecCrOysv6XlZX9T01N/e/v7//E1tY2wcTEhAVDYWZm5rGampr/FRUV/4Hs/yEhIZ8cHByaTE1N+VAUxsbGcpWWlh6rra39X1VV9T83N/d/RETEX2dn59nm5uZKcIUgAuhGTqDiwyDF1dXV/wsLC/8DDfjv4eGxG+huR6BTBOFGAxXzAN36vK6u7j/IKSUlJf+TkpL++/j4bLUBArjCoKCg3oKCgv8gU2GKgfyzkZGRIU5OTjJgRUBGb0xMzH+g9WBFIMVA07cBQ0IP7kaQoqioKLC7QKYA8a/i4uLpQKdIovg6PDwcrgjokU9A6yqApnNihGN6ejpYUWVl5T1g0EQBNTLjjBlgYJ/LyMiwwRvXycnJe4CO1iGUegAs+F709mxc3QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPWindowView/_CPWindowViewResizeIndicator.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUKJFj+P//PwOx2NjYOJIkxUDalSTFQMxPkmIQnyTF0tLSASQpBtLOJCkGYlmSFGP4gZBiBQWFIJIUw+OBWMVALMkABHZAhg1MMQcHhxeQtoMp5uLi8obyJUF8ACitf5AUaj8yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/action_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAOCAYAAAArMezNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZxJREFUeNpi+P//PwMyBgJmKN0PxCBGP5TPja4WH0Y2UBKIGxgZGQ8AaVaooTDMx87O3guk15FsMAcHxy6YQVDD4QazsLBsRuLvIcng0tLSrWiuxMBAy/8YGRndJclgIPasra29DTJAR0fnY19f3/W3b98enjhx4jUQH2RoUVHRTaC6VqINRoooMK6rqwN51x2IuYDYFcRHc30/UtxMQ5OrQDYYxcu3b9/2R7b92rVrAehqYHI3b96s4uXl/QUSk5GR+fb+/fs4uMFxcXGPkTUBFaYgG8zPz5+KLA9SjyTPW19ffwkkPnv27P1APgtyGGcD8f6UlJSHwBTwV1hY+DpQYTQo7QJxPJT/39jY+P2PHz8OQNXDLf727VtgQkLCIyDbAls6PgZMZn+hye0frpQBlLuJJbKYgDgLa6owMTG5B9McHBz8DNkwWGrh5OT8Y2ho+IzU5Nbq7+//vLy8/A7Qa2VoERUCMtzFxeXZp0+f+kg1GITL3717FwOkmWERihRRIcuXL58FpFnJMZgBFquwCEWLKA1iywqAAAMA5oG1QG1/ejsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/brightness_bar.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAXUAAAAUCAYAAAByIq2DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrt1DEKgDAMQNEMvf+VdRC3QhNpUOS9pW0CDg5/RMQRl/uMxWy2z+w6zupuNeu6V3Yd747Zm/Onu93f+9q/2TnrfGd3u+/VWWbXcWZ30/0IAH5D1AFEHQBRB0DUARB1AFEHQNQBEHUARB0AUQcQdQBEHQBRB0DUARB1AFEHQNQBEHUA8k4Pbf5S2jTRYAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-leaf-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANJJREFUeNp0kMEKgkAQhmd1PYh5C3wNfZkeomNPEQQdu3bo1i06duzURW8d8hJkUQgFYqLp7vYbJRU48DMw880/s0tBEAx83+8opahNLAxDZHUrimJSluXY87wr/QWL41gZhkFZltEdkef5tKqqoeu6xwZKkkRZlkVwIbh9YAF4htoI8PYF2bb9mpBSElwaOE3TNdTj37s1TaN6NfLFNM3IcZwNyo8GwvEwkmfGWMQ5X6I0h3Z1j6MpsOKE6b2u64t38/DzPCHECmAf6rb901OAAQCWtKL7r7moLgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-leaf.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAONJREFUeNpiUFZWLlJSUuL5//8/Ay7MqKen95+BgeH9jx8/pv3586fv7t277xjQAKOtre1/VlZWhm/fvjF8//79K1DxfKDijjt37jyFK3JxcfnPxcXFAJRg+PnzJ1gxEP8Fshf//v27G6j4GgtIJRMTEwMbGxsDCwsLAwcHBwM3NzczUGECUKOyqqpqGAuy3SDFjIyMDCYmJi8DAgKeGBgYnAQK/2JBUvDP1NT0RUhIyBMVFZXNQKFVQHwLJMcCtOavnZ3ds/Dw8AdSUlIboZKPUbz3+vXr3cCwyAJiEVzhBBBgAKZHhoa/n4e4AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-resize-control.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAIAAAB/6NG4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeNpifP36NRMTEzMYMCEBRjBgAIP/YPDv3z8mBlIABaonTZr07ds3IKOvrw/C6O3thTAoNntUNRgwDpqYBwgwAFUPJZ6DFNTXAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/color_well.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAIAAADh1eFDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH1JREFUOI3t07EJgyEUBODHVbqAhXvY22cGXSAbpRFLC8loCiIkIfoyRHhW/7fAcXCHGONNXggBvfdSylNSrbW1hrUWgK+kvbfWGkT0kUdEIKK3PGY+lHS800veuU7XIv7BzFBKjTFEbzvnZGZYa3POD0kpJWMMnHN3ed77HwxWA6QUi5PsAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/New.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZNJREFUOI19kz9IAmEUwI8aaoqo1BaxWhoampMWazQS++PWEtTk1tIUOHbQkHZBTjY4eGpLKEE3JaLiDVficBwcSJSLTi4Owuu9jw8x79MHP+7ge+/3vXfffRIASBgzyByygCwjLsSLbCLbyAayhMxK48EFVOyCkeh0OmAYBnvHtTNkRyjhAtp5i5JrtRqjUChAIpEYCnH9WijhAmrbT4m6rjOKxSLIsjzalFjCBTRzgJKobULTNIjH4zAemHfOv828UNBsNhnlchnS6bRDwCW7yKJQYFkWo9FoQKlUAlVVIZlMgqIokEqlWHeYu4esCAWtVoth2zaYpskK6vU6VKtV9qTTwdx9xC0UtNvtqfARArzGKeh2uxM5ygQh8hIC3637a6Kg1+tN5Dh7AG+/lemCfr/v4CR3yLh4j8Kz/QpBNfyzdu+prD+sfjgEg8HAwWk+BE9WbohiZhijguGfKAqam7jUonDz+QjBbPh7vAN2F5AIcoXERHhjLpsEvjuPzmv+30Yu8fNjcuCT3QYV0+68RvoD0y0J9R+ff5MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/NewHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYhJREFUOI19k71Lw0AUwIMOOrViGzcXFwcHwY+WfizVwcG9iFIpDmkkSyDQ1MFWyVJqKdRSQggdMnQJFEr/FgdBEEdB/Bue7x3P0jbXHvzIwb33u3fvcgoAKDjWkA0khiQQFdlF9pFDZA/ZRtaVxcECSlYnkwn8MxwOodvtijmulZCMVMIC2vmAgtvttqBer0OlUpkKcb0mlbCAys5SYKfTETQaDSiXyzBblVTCAjpzgYKobMJxHNA0bU7AkjvuzaZU0O/3Ba1WCyzLighYkke2pALP8wS9Xg+azSbYtg2GYYCu62CapqgOY8+QpFQwGAwEvu+D67oigXpCjaUv3Q7GniM7UkEQBCvhIxQ4JyqgHZaRqZ5A/iENyevY11JBGIZLydqn8BS8rBaMRqMIuVpKcOFcguk/wrGV/lVL8Xf1Nv4WEYzH4wg5LNvwalN0tyqYFUz/RBl0boIquHq9hyMr9bNYgXgLSBGxkGcZiWLsmwTJm/gH58y/RpZk+ZoiYPM+KZl25xzlDyJip/qGO0OBAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/Open.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgtJREFUOMulkz1rlFEQhZ+Ze3dDkGhcSZa4UYOFhU1iYaUWfiP+Bit/gVhYm970oj/DPyDEFBpEEPFziYKKySa7yO67eb/uHYvs5g22meZyYeacM2dmxMw4TCiHDAGOzDabd0+fWVgMIRQAu8Nh5/vGxnqa7nb+I1FgF/gJmJnhgeNXb9y+/+Dho1v9pB8xGCaD5O2b1+12++uOc17GVCqqIYZkbXX1xUb72zMgeEBbzZn62VNNer26AqjOTC2eP7eE7Ek8KHh6+hjLj5cbKytPngJ4IIpYabHEQglACBCKHGRcXhk9OVHHLCY2ct8D0u325M9mh16vV3EJmI0xKqA0KxgkwxowAWT+ZGv+2tzCuaX1D22KPENGrOPxighmRjRwqqhucfHKzUsfv7SfA/f87Nx86/L1Oyemjk4TQokA0cCrIk7I84IQDRGh7h1mMN1o+FerLxsAPsvScrOzbUlhkucFMmLda8GIZoQQERFq3mFm9LOS/iDJAXxRlrbzt08W65Sh3PfNzDAzVHX/P26vNCVNM6sAuj0bpiahLKu1GRkoIlis/IjRSIYpg2QYAbyKOkXUuQM3YYY6HamIiI5bijgnqIJzrgbgu9tb2+/X137PzrVqoSgjIghg2Gh8e281VkFU6z/an38BiHN+YWJy8gKIB4tV8qhwH6JaJxFqeZZ9yrP0nRz2nP8BeYUUSYTtIaYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/OpenHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeRJREFUOBGlwV1qE1EAhuH3O3MM1CiN/RFEBBFFULDWG92BV6IgrsD96CoEvVMXIS5AW1FBqJQmFWnaJs4kc+Z8Thtt9brPI9ucROCEBPTme70ny8vnb+Wca1qTqvo5GPTfp5QGQOCYgBL4BtS2icDyrZXVpw8ePb5bVSXYVGU5/frl88ZgsLUbQiH+kBSy8/jT2trb7X7/GZAioIXefHFhqcdoHAERQq9z5fKlq2COCQGnu6d59fLl/JvXb57TikCWnOyMc+ZAk6FJCQkw/+mcitgeGSdaEQj7o7F2hruMxyNmxIyZEX9NU0M1mUSgC4ziwuLS/YXzF2983ejTpBokBNi0DAIMBiQRNOTazdur3zf7L4CHsbewePHGyp2zc3Ndcs4gsE2hgIKoUyJnI4lYBDB0z54p1tc+nqMV67pOw909qgRNShySCIAxtmmykaAIBcaUqaEsqwmtmFLj/V8ltSM5Z2aMaRkkccAYcUBki2ldm1ZscuP9vRGTqck5c0QcEmBzSIJsmEynVNUk04oiFJIIgSO2CQoYY5sQBAKyKYIQEEI4RSvu7w1/fPuyvtM7t1jk3GRaAmyOiZYAIwQhdLa3NrdoKYRwPXY694QKcAYxY0DMGBD/6KSUPqR6+k62OYnfXED9QFof0dQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/Save.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVhJREFUeNqsUz1rwlAUvS8JAemUPZNZAiLonqGTPyV/oWPt2H+T2aUK/oAQyKDSzUFCSBarolF7z22faKWmYC8c7st995z78Yg6Ho90j1lhGMpBKXVS8n1f8NOiKIJ72e/3/cPh8CXwfdfvdru02+0gRM1mUwDLsoziOKZOp0PtdptWq9XzdDod8hVABqsRsNlsaLlcijdNkxzHETBB4vC4Q67neW/MfZQOqqqSSqgO2LYtVSeTicTX67XE4dEdzo1GA0IQGF4JYLbFYiHQBsJsNjvlWZZFmnchsN1uKc/z+s2fC4AIA7ksSwqC4CZ5PB6LgOZddIAF9Xq9mwKj0Uhyr0ZABxCoM+Qg92oE3cFfBPTC/6UDoygK+dBPWGfI0TsA10qShFqtFhmGIdsdDAa1T4hcvFiapqQ45jI813Wf2DuMB4b52wSMD0Y5n89f2b+re3/nTwEGACUKCdgz2++nAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/SaveHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXBJREFUOE+lk09qwlAQxscXCC7cBUGwJCErt0IJOYLF0Bt0I8FVD+Eduuo2i+57hB6gBLLLUhoiLlQUxP/G9w08iYjJogM/Xpz5vnkzkog8z+k/iOFwSLVajXq9Xq4IgiAfjUZ3oOb7/gf0YDAYkCAZrut+OY5DlmWRbdvUbrep1Wox9XqdJpMJn6g1m833fr//Ch9CnE4nHuVwONB2u6X9fk9CCGo0Gsxut+M8TtTO5zMZhvHted4bNzgej5zECTDacrmkNE0ZmJDHiRqecYG88AWXcwM8KNBssVhQkiRMlmWk6zqfqBW13Kw4AdZYrValQFP0CCTUj/V6TaZplgKNagDv3QrdbreUhyuoSaqiqL1ZQf2BVVHU3qygJqkKdfN1hfl8fk3ihaoKaNRl8Io4jmmz2fDLoWkaRVFUCjTQwgMvvoWn6XT6+StDJpIwDMeSvweMoYEWHniFHCmV/MhxnmezWUdiS8wHoNaBFh54L4mHAQ/Vw7dXAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImage/CPImageNameColorPanel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABoAAAAdCAYAAAC0T3x2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABxBJREFUeNqMlmtsHNUVx8+dufPetddrO07sRG1ik0SEQIwDJRSaAEn4QEQiA4oQoEgoUj+0qpDCN0BVVdQPqA++tFU/VVCpISIK0MhWFYQICBEeBVyqxjHgBIOx49jrXdv7mNfO7f/eGQcTXrV19s7dO3N+5/zPuXeWCSHou/72/P759bGRHIyN5p6mkbQ2ebIt0QTpWjTC9WDB0P2XYcdODT524bv8sG8D7f/VS7fA+ZPFNt6/6/qrqv2bf9iad7mx1jBMuT4ZheFSXI9GJkYXT4+/5ZWblz7kmv/4C/v+8Nr/BTr46JDZNMTv2gpi8P79t5jbe9s6Io2ohtsCjD5TT5FDgixKyCNGBq7/Vfmo9NybRxtlMfMio+jIsbv+Gn4r6MGfDxcTLk5s71/d89A9A70+1mfx4XOiGJYYRELmwxLSKILFxDE6IqEOZpGN5Wff+9v4Oxff+IKJaPDovmPzXwMdOjzsCE6n9+7Z2LP79r6eyQWihSYAcI7QSbMzk3MtwUeEfELkgkgoIBPQFmDXUJ5e/mRoamj0+CSJaNfRu082pH/tMjEST9+wdU3bj7b3dY+irNOzkKsKUIDFZupbR0w6rbQEwiVYjqhGDZqhEo3RZ3Rz30/W3NR9U5GJ8Oll/wr08H0nB9pz7MAdt/Vv+GQccgHSAKQptYvgUBpAXBpgUBEmlEmYDpRAdg2qU4Xm6TxNsDsH7l5f1IoHHnjh1oHLIBYmT+28fTubmCC9BIi/iHogYS1KTUdGPCYyADIBMpGHLJWhYClI1osB5lNVwb6gKX3vjYOMJdFTksEP7z2xrbCab3VbV3VMfCoobqKLUAsTYTPIpqM+HDAzg0jJZOMJpahQ0glcxRkoQb0C5BbQIq3tWtvRzju3Hnq+f5umReLeqwf6/KkLUKnKSMA5i1PJZDYqE2RkwizAbBBka9uqRwQyS5BZE5ktZxXjKgCySlP0Odvad2ugi+a9mhYmOxyn261MovCLqUxSIkOk12oOmAWzce0oEINRBpOgJKtVouSU4AT1WqJpyvcULUOIHVyPxCbuuzZH8Q0PD8epA2WooMVI1UNKZ2XyyWaI4VCDSeHSPKSI2ootGqMXG2S7rR52xCZuxKJzYZRrMfZNrofIA8xB5K6KHCNADp639RTiKJB0TKpSQlVNwz9TGE19AwcQL6CL1OC+aZPeyaX+NiC1CXTbEqJeA+c9adFNhOJIsMxGQnTZaanpcMwUIG1xPA33VWQxh9kUrqfx/TzllMw6cdBmvdj3uO4WZMQeTqgcZPSQjgvNbDPNxjFSsC43VOITt3AE6T5cNGCIEFuWYdRQGx042SgBZoYf1BwyqtwlfSz0y71dhltgyM6DJi7MQ8e5MAdgC2bKzSu7Ao6IY5NFMWlOgywDMBYiS2kSIC1GjWPVFtNlv+KSMc6R1plq/eOu61Ggei1zHmQG5xZ8cnl08zCFRLhJkzcisxg3OFXiZo10LjPz4TpQJoEe/kdHF+vI6Az3iB8XCwuH24qU8IrQ3ICRnQEs+NUs2eOBkoZiaGrKPYBFH98HgIcSukTMrpJl1omzBprFVxm2UiEJZoJ2hxvH1en93HXDp9f1/KDrx86WzUvwZbWh4DDWBkcFUFvgLIc6OEspiNXStsxhPQ+oh4dcfG9X8HCZhFFGvXL0/r+DsfFz8xfvOzi0S24JcomOzM5+fJKu3tLIL6JJlFRBGjnJ0xWAAK1pw5mBUaun0vnQOUAgAeYh7vGwHiO7vFTB8S+MlFoNS3/gK++jV7YN/4W38xt2du3tpzk/jT4PSB5jDs4dmIWIjSwjT6Qd04KAWhBQi2xV3FvAvLudTv298kEU1d+969A/fqoO1eV9jC5+RC/Fp99jr/53oPu2LXTpItq4jAgBCCqZLDAOZ6yavtvz6MIQjkMEFiErgUw6O+n1Zy6djar1iEztkW98lb993XCRRHyiWQwKN/fu2Ei1kiPKY8ScRaU9QfvLIDcDtUYk8gGxjUWiDs8f+uf5sWZSr2iOMbjvyKkvX+VX/lj50/pfWtc66/9YMyu7N3Tna30d7ZsoKWlU+wyr8zjdZzDWiRWxo1vxeE+OqI0n/5ma+Whketq1nOSVdz+v/uy3J87JVhUiy2QlaPkNLU8Y/ud1v9i1Tnee8PXFXrPYmNu82nAKTmh2dnid8uaZ8lypFDaCkdq0v9AsF3VbnJ8Mkt/8+tSnr6uDjtRxGMnXFljNlSB5SDtpE6I3IQysZafbe82NdsfuTiO5NqElz9P9VU0cO2UWzyUW1adEPPrBUvjq+3ONs7h/IW1TdSZV0x1ODYDC7wXBID6tykY597K3iJ85RIfQJdh8dv29oK9Il4FNWvF6yuacll9JqTRSpkZm4YrvLksn7WvN8A22/CNm5Xz5ZwNlY3LF/Eqj/wkwAC2fO4nxam4uAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImage/CPImageNameColorPanelHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABoAAAAdCAYAAAC0T3x2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABqhJREFUeNqMVkuMHEcZ/quqq7vntbO743jXm8WLs/YaOQ8nUswzQitMImJ8AokcLBHhK7cIWUHmAsGKZHzkgpAiBckckDghJQcc4TwIIg4iRBBZMrZje22v19nHPHr6VV3FV109m12CSWb0TVV3Vf3f/65h9Cmfx3/40wM5y48rli9qoZsF5fs0IxLSXBI8H0hfn5e+eunCyV9/8P/ksHstfO0Hp45kJv55s0b7H957f/zA7M5GzedeRwjPrq8WhYp1qq7eXRq+f+tiOGS9f8vQ/OTN53/3h89EtPi9F8OCq5fqYf7U1790wJufrrcL7EoMUc6B8pQhH4MkTQFEeGTo8vB2/42LbyRDr3eOC338T8+/mtyT6MnvnJ7OdfzK3gfGdy5+ec9MhvUufnJBVAAaIM8RMVJAQQLwjaYxJkHOzPmrr9+6tPHBihfSkXMnXlv+BNHTR880Uj288Niju+575KGpHatDokg7AqhOHCYwO1ZEBCINEEET2OnhqUacJqlO/7jzt9V3l/68Iuvs0B9PvBVZ+XxEpNLk5YXPT7T2zU91lu4QrXWJ0hhWWF+BkAHcuAMfwxIa2FRQQiltUJ9u0l36wtSByf2T+8eKJHl5JL8kenrxxcWmrw4//ODczO3bcBdIMni4sCQFMkw5EjECWZgSvBw1fhVsSykC2TKtsEf3HNrVKBqHnzx1cHGTCMxnHnpkL62sEO9bElhiUiyqCrBGgNAzFWgER8JLFGXcMtg2ANkqrfHHFr5KOknPWA7v24+/8ISsZ/N+fay9cgduQJF4vlOBwSJu47KFRGxJnqJynanILJFBvHJYtk5D2jG2o92k9vy3frbvCW5ydWz33pl8dZmYShiZyl0WrKgsgUUeRmnKvEBKu1GWVukSoiRyB22SKFi2Rh+xuZkHUe/FMU55fsj3J8JoFTEfOjeVgo2bj9wmMfoYfby3Bo8gt7nPVO60tqYUg6reaUlWmEMeU3pOZIEUCL4InLCRtj6SX7LqWTuLRu4rygQ3lePYJrY6tkDEpF/UhDZznlB6PLrBWYFsDztACALt3GM1DpiD5I7EL4mck1x8eFmO7jtKe12qESFSKc89afi4J6ymIElWUHbINjkJwZPugAfVg9AJLy3kLttEJZDhl23WUwbxCRTo4WkV83W871OIHT5mXkBio6ZVTQjZsBqHSIYQbgxBGkC69Jw1gXDE3BaSydC9C+I8g4gUWYbNZFtbDLFpmeqyzD8Q5CoNmDf0QuZdU9lgdlxMNGz1BxbwS4j6CQAfkIAHBVhmHYYCE2g7BerGRwwExDEFKxWsVSCwKMqGa9NiI8r6Ne4teTUmLyTZ7c6ecILS1AkPINSvICFT2NZtK9eSKGjO7ahd6/BjEl4CS611OUTbvpeXhCG+t5bipCbkBa/JgrNJNHim1WRGRJoFOdskkJDHbK7z3LlGA56tASxmeJ8r5+cALpMx3JySYFlJZi1ssKbJ1nvtelOeFW+vn7v+jfY3n9F+kc+hO1ilfRsP2xmYctobCDPIGJuaCkSZnaeOuFzDO2PjFOEMLOQxsrZB167nS2mU3Tr1wjsny9tyjAfPbXRv/p59bjarDY1f3nIid5qXlkCIgnA5dBYx62PsyaBIjn156hQo4hKsZr3gZ8uXB436mPw+VZlKr62f+/Do+FNfvFvcCe9rT3Uozp1wm01WWz1wRApjDqSVRVaw3WcqlK0FZ+stev+t6IrkxV9Pnnr79Lb7qMnDZ72+Vld7//qQJnx7QcETEDroE/V7RL2uQ9fOAXuX9Kp5z+7BXqugGKOL5/vXisFQBZw/+z+v8l/Nn56Oi+iVopW1FqYXdpuk55vBTaQxNJUQ5AHwP7HEuc66qIFGVMuJzbQQgyD7+3sr17VJ+/VWcOTEL99ZvtefE/6jXcdr9/udswPR/cquTj2eajV2G91HHd7Fch/dfaOMEWvB6jqOd1D7Tc/cWN+4cXltLQxr9Jera+mx375+LS6blDH6v4lG95ltc95zO797tM34jxMezfqtbGN23AvqQe61WsG43dyN+v2BSrMryXoa6UFb+OZmt6Bf/Obd5VerNlEVHimQqa1E6GrISYQLsMLawMTBcObgghw73BJ6QdMwDHg2rtHXIlZ0jaR0jfSVK7F681I3/Sf2rwE9qwcA03HZItIgSj6VCNgBTAOTthKqPUGlrRW0DuDvDH30WYm2ua4itvP6FvibFytt/teyhMNKaFq92+Y6i08kw5aRbYmh2FoK1Vxvu+U+fjYVRs/l+B8BBgCMykDM1OUJfQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wUEOwUAUANA37S8JG7Fj5Qhu4KrOJyxEpJTpWHSW+l5ggwOOpZSzP8KkYDQjUJAxmBHIeOORUtphiQ6NKpDR44YT9thipQpkPHExuWONhSqQ0ZsMuKJDqwqM+CDjhRYNkipQkJHx9ccPCKMfJ5j/ZGcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wTsKAjEUAMAJvLt4LTsvayEeQAQbbRTEZd1PEgWLCLozUWv1T0ppjR2OYVlB9RaWDciokVJaaQomjHhgQA5sfFT0uOKMA3rkwFYzosMNF3SYA3tNxoQeHZ4ogZOmoiBjRkEJ3P2qvrwAKV0tKePvXOUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCFtj+P//PwMDggACdRDRByKiQIQOiOAHEYwAbGEKQz1zHVUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAYAAAAb4BS0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUCB1jYGBgEABiAyBOAAAB7QChuhy7UQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCFtj+P//PwM2DAQJQGwAxAIAxNISj3z8C1sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUGBl1wbENwjAQAMD7f8sYlCoN+w9GyRxOgRuk+C78CzcCgUShoZAIS0OiY+CFgY6yNBQGTnyRSISloeHAe875cSNReOK0kUh0HDYSgcLDRvoJhI0L53oFmk+kBA4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBJREFUGBl1wbEKwjAUAMB7aVAExUFw0f//vC6i1GASHYQuzV0gbOv+Ms5WHQ0VH1S0jLtVRcGCFxaUwMmqo6HhhhnP3Ht/2BARVxS8k7ELDpiSsSN2SMnYHhMiGQuEny/9fRhMYHBh/AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAYAAABP2FU6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUCB1jYGBgYARiBgEQoQMieAEB6QBLHwsEZwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPMenuItem/CPMenuItemOnState.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbElEQVQoFc2QQQ7AIAgESw98nW/4O55BdxNNkB6aEA8lGSXKiqxExNWJuyOi5idCEVFgwCfMdRuL5lRQYICuZSzXvUTTZS8iPuBZeNycgQ41xnaQ268cBTSCc/LLhLmue+7CpRPHZ/z8RLvjA8MnX72R/hSoAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZ0lEQVQoFc2QUQrAIAxDdR9e3Wvsdh6j6wOtWxkIxQ8DgRgNps0ikiK4IiEy5wSLtqnK1onGm2A5P6zqeeDZWxNvU3Xzqe7Z++3Luecwpr6eqziqFPWZicoQjTfuU+YQwfYZlyXCPz68ppV1+vunagAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpiZAiuZ2ZgYLAGYh0GhsA6h44tpzdfeP7lIxML038TCx11x1c/GflY/vz+w/35139uBoY/DCwM//4y//n7hwEEWBj+/2X+/QfG+fuX5ffvv1DOPyAHLvPvD1DZbySZ338QnD9/EHrgpjGxMzP++vr92w+QXUy6StLXjp+5cPnL12/fGe8+fSkXVjMh5Oq9JxqM////ZwQqlwZiIYAAAwAMX1XNMAlUgQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYAiuL2e48+H3f6Zb734yMP3985eB6c/fPwxMv/+AiN9/Yaw/v0FcIOvPH5gYWB2Iy7zvwWdVhv///xsDBBgAJJsuTOBf54IAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ5JREFUeNpiZAiuz2JgYLgCxEeZL+zbukdBXEhmz7mbT5le/WTks9BRd2Rh+m/C8vPXH4afDAzcf37/4Wb58/cPAxj8+8vM8vsPlPMfxPn9F8L5+5cFIfMPzPkN5fwBKUOS+fPnL7IyJKNB9vz89esHOzPjL5YvX799P3PxyhVdJelrzKde/ZbnZvl/YFVz/gaG////6wGxDBAzAgQYAO59XJBTIVY/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJhJREFUeNpi1LewZWZgYLAGYh0GfXMbh5XrN21++fbDRxYmZiYTGxtbx39MLNwsf/784f7LwMj9988fBhaG//+Z//75ywACLP+BnN9//8A5IKUIzu/fCA4zqgyMw4Cmh/k31GgmVlbWX1+/fPkBspRJVUX52qED+y9//vz5O+Ojx4/l8ovKQm7fvavBCNTDCFQuDcRCAAEGADqxWcjpDiMNAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUeNpi0LewLWf88uPXf8Zn7z7/Z3z0+sN/xvvP3/5nvPXk5X/Gaw+e/me8ePvhf6Y/f/4wMP0GEVDWXwamv2Du378MDKra+ksY////bwwQYAAEtTEizRGTJgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJZJREFUeNpi1LewzWJgYLgCxEeZL128tEdWVkbm8JGjT5n+MbHw2djYOjIxM5mw/P7zB6iCkfvPnz/cLH///GUAg///mVl+//0DZQM5f/7AOSwsv38jcZBkmKGmockwgPVAjQYr+wuU+QEErKysv5g+f/78/dCB/ZdVVZSvMegYmc0KDI0sevT4sRxIrR4QywAxI0CAAQBTdF49cw4ogQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiZIAAISBWATGE9+7dO/Xr16+vGTg4OGyAjA+/f//+z/Tjxw8uFhYW/n///jGwAJUxgRggAOIw/v37F85BkWFClkFVhlMPXBkTDw/Pf6DFn0CyzN7e3mKsrKwcUlJSCgxv374VCA4Odufn5w9h/P//P0g5PxBLAwQYADkXPiP8F5MNAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNocxFEKgCAQRdF59dO+WkT7B0EEQRBhGERv1Pk4Zma31lpozokiArk7GmOg3jtqraFaKyqloJwzSilx7L3t7/OcwPUKMABbNDOyQBe/kwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpiYGBgMANiIQYQ+Pr16+u9e/dOBTKFGX7//v0fKPCBg4PDhunfv38MLCws/D9+/OBiAXGggInl79+/MA4jThk0ZSgy+E379evXJx4env9M3759+7B///71rq6ubxn4+flDgoOD3d++fSvA8P//fy0g5gdiBoAAAwDmKUtB/aWHewAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpiZIAAISBWYQQSwp6enk1iYmJhLBwcHJpARjQTExM/048fP7iAsvz//v1jYAEymEAMEABxGP/+/QvnoMjgUYZTDyOMw8TDw/P/z58/n0ACTK6urm9fvXq1/vfv3x8Y3r59KxAcHOzOz88fwvj//3+Qcn4glgYIMADyGjn6SjxcsAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYGBgcGZMSkr6z/T//38Gpn///kGJv3//YnDRxOAECIQzAw3gAAgwAGRwKZNd4WBbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiYGBgMANiISBmYI6Pj78gJSUlfufOnZNMQCAiJiYWzcHBocn0798/kAr+Hz9+cLFAOSDAxPL3718YhxFVBrcyJA4TTj2MYEv//PnziYeH5z/T79+/P7x69Wq9q6vrWwZ+fv6Q4OBg97dv3wow/P//XwuI+YGYASDAADufQ795H/vjAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif
Content-Transfer-Encoding:base64

R0lGODlhQABAAPcAAP///8zMzJmZmWZmZjMzM7u7u6qqqoiIiHd3d1VVVURERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBgAAACwAAAAAQABAAEAI/wABCBxIsKDBgwgTKlzIsKHDhxAbGphooCDFigQvRtwo8CJFgQUmFjAY0sBIAB4nckyYgIDLlzAVQEzp8eTKjAoUJMipAIFAAQkGBAVQAAGCkQIOKD1ZQIDTpzcfHkiQQEBBo0YtKsUYtavXr2DDih0YcuxXjR0/plVp9qFJhyFttkU4lafVhU2fyp1rEEHQAQMGYvX5U+mBu3wTK17MuLHjx5AZo42McDJKtWu5Jr4ol/NllSXZgrRsNqVD06UVuOSZk4ACxKdpiqZMe6CBATmp5hyQF2GBkQaePtUs1u8A2FMBBwYwWKDhA8SD721rPAFhgc0HJlUKu7Zzowe8i7cfT768+fPo06tfz34jae8lDb4XGdmzbcxE3zMOzXWyfcXxEcRfZpntRd9YKdmEFluT8TebWA6+1VCE082l30EXttdWSzB1KJNbsh0YlQGqucaaa90xFCJxZvl1HV4CsJgYULntlOJBwjmV2AE15maVXwmEp9VhP+UoQIUjssbbQMoFyRxWKD2XkXD7NXlXdgZISZkBfyXAVXZEPYdkYsotKRiUBGkJ2W99oamhUhrGKeecdNbpXUAAIfkEBQYAAAAsDAAVACUAHwBACP8AAQgcoECBAIEIEypcyLChw4cQGxoYkGCAxQQRBRrYyDFjAQQgERRAeKDkgYQCUh58aCABgZcwMWZ8WCCBzZs4Dcz0iBNBwpAIDpo8WUDlSoEFOOrcKXAoUwAGYMIc8LQqAqknqyYkWLCrV5laZx4YkDWjgZEOBVC0uLapxaMIiwpYqrQjRKBLnQKQm/IpUIV6ERoNq7DvUwFSEywl3PCqVAIKyjJeKEDBY8mTFxKkOrkmzs+LGXP1+jWzacJqK4KFqJQmgopsE/jcCDFpXbRIYa/NOjFk07IqE9ZdPBZBaLW+Aeg1ihthaIYH/v4uiTLlc4jRQUoODFXl9bQDfAIMNqlQbvOwAkrChRgQACH5BAUGAAAALAwADgAfACYAQAj/AAEIHEhQgAGCCBMmNKCgoYIBBQYqIEBxgMKLAzJq3BjxoseEBxCIFDngAIACHT+qBCDggEsBBQXIJFjAgM2PAihShLnyY4KGCX7y7Em0qEIBCA6kBGDApUuBMmcytXnQKEEDMqsa1UlAq1WFBrgi+HoA6E8FCWAmqPg1IYIEY62+3bgxgcW2YEcO8Gp0wEiRPAs45SmVKl+PLV8OjDrU8NKFLvkyXniY4ACKcfEinEgxgeaEaykqaDsX4WXRj1cCdRj3gM7RXweYbbj36ecDZxUM/cx7Lt2MdvH+3sj7KILdeAv8RbBX83K/BxNXtpkawF+TA50eiB5VoGGi2hd3F/dOdWV48VLJ3/R4Hj3y71YnFx+4/mJAACH5BAUGAAAALAwADAAWACgAQAj/AAEIHEiw4EADCRIYMEiwgAIFCRQcEKiAAAEFDAceGDAxo8cDIA8U8OjRgICTBA2oXJgx4sORAyteHChgQIIBOG8uHPAQQcEDCIIKHeqTpMCQIVkCOCngoFKGBU7CdKqS5NOBFi2SfPiQoEyMAAokTFhUYMSIPr8aNGATp82rBIESFWq0rl2BApCCbGrUwAG+A6MyFbgS7kGmTwvfLVh1cUyLYBkieNjx8cyMPCMO8AqZZGaIliNvRPB08lmBWQkIFOv2ZkcBXBMsfQg4LIKbrREIvlvzpmzHd+XOpUtS+NypwE0a/qgXOUO/ekUCMCnAucaQtZlWn77SqHaYij1qDU/ZPeN48o0dhwcOMyAAIfkEBQYAAAAsDAAMAB8AJQBACP8AAQgcSLDgwAIDBhQwyJBhwgEJBAhMoEBBAoEICGgkYKDhQAEIJHocabCAgJMiSao8aKBlx5UkHw4oSNEiQQMbCRBEwJPnAAQYEyQ4YHCAxosfDyhdypQoTIYoUS4U6PLlU4Ytr64sMJVgTaQ3U2JNkDCB1a8fc6bsicCpwIdDAaA1qlGBxwJsEczUCkBA06Vi+Qp+aiDqSat8TSKm6nJwQZddHZNEq/WA0MCUB2YksJchArIJgA7MLHejXY+fH46uCFbBRrB920a2rFoua4GuNXZ+mzcl6JkGhHbMTcBtwQN5BxhnqHSlgZ4DFkt27Pcv08HVrU9nuDAydcOOTRoTFlkgq9aoiKtuZ2x+u/r1768GBAAh+QQFBgAAACwMAAwAJgAfAEAI/wABCBxIsCBBBAgMKlyoECFCAwIHSBwg8ICCBAoUFGDI0IAAiBwHDlAwYGNIggZSgjzJsqHDghMpDiyQ8SJHAwdy6jyw8YBEAQYRZKRokYDRowk9CljKtGnLpypVPp06NabClS0LOERgEoDVgTUVhNwJdOBWoAMSJKAoFGOCgQYSHCVQtuDOnF0ZHphLQEFdgUqbLqVKuDDVAlFT5jVcECvjxwTTroUsUMCAhDAn2s2IueUBhwciaxZ5kSTVzy8jjgbg1vTNA38BWE79tXVn2UMJ3j0A0sBlhKo3YsxYdgBfAo4F7AaacuHSuMcTODa4c7HCvUgpGw4smKl2wN29fw8POX184vKPz6NPr9I65YAAIfkEBQYAAAAsDwAMACUAFgBACOgAAQgcSLAggAMHDCpcaBAhwoEIIiIQKCDBgIsMMwIooBFigokdBzpMSFAiyIEXMS4sIKClSwEUERpomOAjgIoKFNTMSTJkSAUEggodmsAnAJMGC3A0etBhSYkDDVgckGDmwpdWBY6cifTA1AEDCwzImTPrwJctQwrQmSBnUaZG1xIgmzOoArMaD0TsCZegAZkFkRKsmICvRgEOYUKE6pHqSbWJF0dEedEmQ5Z4/zo9yjhl4YKOz6JdWiBygckAqFKFSLatgoIG0AqYqTSjWLeuwV5+qba14b7Agy8EOrT4W+EUgdIlfjcgACH5BAUGAAAALAwADAAoACgAQAj/AAEIHEiwIEEBAgwqXMgQIcICAg9IPCDQAIKLCBhqFFjAwEaCBwZQ/EhS4wECKAlkLMmy5UaHCUFOLIhx5UYDOHN6BGDgoUEBA0QKHJAgKNEBMQF01Ml0Z8kECqJKnTrAJckBKVM6tcq168SRXX86lClxYIGaEG/mTCsQJsSvAATUJIgggd0EbA02fWq06FaCTXO6NHC38N28YRN3TZAVZYK/ihtGrRq5suXKAiQmjVzAJ1mwAxEgtdoT4Va4Aw9gBM2y9GbUAGqyZgi581gAqDGOHmhRaMG9A2/jHql7Z8iiQfEqXKoTsV6PdY0SReBcoU6+RTdfdsk8MGSNUKeKK6fs/btGwoYLV+86QAHl7QZPZlWgHf4BBY1Vwv/NOGX9/QAGKOCAra23UUAAIfkEBQYAAAAsFQAMAB8AJgBACP8AAQgcSNCAAYIIEyY0aHCggIcCBh6YeEChxYsIBSCIiLFjRgUgE1T02FEBgZMJMDI8SBAiR4kUSRZouHBiRAMIBiDYuZMkxgEJBggdKjQBAp8mT45EAFJBApA+FSI4OSCqQ4hWB65siRXmRJJbAbgEYIDiSIEHeB7NKtCATrUF2FokSreq3LsKJ7oN+VSB3awFkhL4KxDoWrYJThJQwNbAQ5ZZaXJ9iLDsAcgKGca9StkhxZcKZzLk/FLAZ7CjxXY1i7lAWtBaU3c2PXGzRrWEfRaIe+Atz7Ny3fLEjLd4R6B1ix62WiD5ULkIjBpv6bRvyrsDUIq13hc4yewnGQsYbN5UAXGPUxWfvytAMQHYeA24n14QPsGAACH5BAUGAAAALB4ADwAWACUAQAjzAAEIHDiwgAABBQgqXHhQwEADByJKXEgRgcWLGBEcUIhAgYIBAgckGEBypEOBCggQUECwgEcFCSjKFNjQwMyZBSRuvEnxwICdMlOuFHgApseEMw0kSGCTp1OBBmo+pdkQ6UABB5rexKrzwMmpYCtmvAiU4siSA7QOFMqyYwKYBBEsFYmULUGjCtQqVKmSot6pDb8CbhjWIGGwhg8S5BpRpmGbObtm5RlZomCnEP9OLTCWLM/OGMuG5bnUJGAAnM+WRGAVgACPDt/CJiqSJF2BfAkIfPsWAUEDCH6uVclyt1GQM+0OHGA0ZlDiCosq8P186OiAACH5BAUGAAAALBUADAAfACgAQAj/AAEIHEgQQIGCCBMqFGigoYGBDh8unLiwgICDFDNCHICgo8SECQiIVDAwgQIFCQYOWJkAgUaEEQvGfLmwIUYBOHNepJnwgM+fQA8IGHhAJAGSBhIkeDggQVOJAjpKdSlwgEiqJU+mJChA6QGeDB2CnTgzbMOxAGaWTasTrUCdQ932DPozrtyXPhcOPcBx6leECIwSEGgSZVWWfwUWOIDArgKjWwlrJYjAacuxhSPfhfhxs9nOYdGuLSB2bNmIGMGqLU3QwM6MZ9OytghXrmu4oMfqTO25N0K6Qe2CBe5TOM2oxu8a6IuAI2+EIQkM+K3UpYGpUhM+Fjk9M4ADTlcSKmTccTpBwVS9A+i60rxewXbVpw2vGeF2Ap3lHxavN7d+xc+9VMBKAWYUEAAh+QQFBgAAACwOABUAJgAfAEAI/wABCBxIsKDBgwUNIFzIsCFCAQoISJR4wGGBAxgzOhyooKMCggNCDhhYAIFJBAU2qjxYwIDLlylXyhRAs2ZNhQImEkigUGACBT8RABiQIMFIASeFDhSQsSLDngVFjpRJdePLl1WfYs260qZXmlAJFhigYKpDAwLCHkSgU6KCimQVKCUoIGTFi00xqj3Y8adTqQINJK36s2NMgYAJDuZa0CTjxwZbboWc8KpLypWvYka4d7PBrzc9g7bZ2TNDthOdMsSLsaGBBG13ohXAGWfeA7QJGog9FWJfAGOnnjRr4DbIjrk5/kyAWKTA4ckFMi09kOzy6s6fn1St0npZkNkFHhPYLhNBR+5Dww9EMCA6Y6JGqwYEADs=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldCancel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAB3WlDQ1BJQ0MgUHJvZmlsZQAAeAGtksFLG0EUxr9NEBWLlaKe9yBiIbZr1oBeJEZtkeYQYopVeomzaxJw12V3jQoe/Bs8CIVSKBXppfRo6SnQS3vwIGJr2/9CwYvI9psd0vTQ4MUHb/c3337zZubNAsl82fPWEgAcN/SLT3P6i6VlvfMnNPThPgbwuCwCb7pQyNPSJq6+0804HZW12pjayb0+FwS0FA39FcVZySuKS5I3Qy+kpypZVMsWeYec8kvFGfJ7cm9F8SfJK4q/Sq6Lipx7TjZcq+YCiS7yhGUHgpwlCysQDvmA/NJx1lk/ScSI8HzOTY6Qh2RfpAjUL4CpN/TvtbSlj8CHHDBw3dKGx7ndDPD5VUu7PI97pQ12BatmOi6n9RwBHftRdLkIdD4Ebn5E0fVRFN0ccu1fQONKbPj12MuDaMfc8C1jdWZVHTjhGRjxHf2fVV9ilwG8awDcCp7tAq+zwDAHD34DBXIpi4RpNlP1kFagOzdmpA0zIyfeaThrG7ynODr4vGe7zxf47mPmV/0nxSZb9uxck+1g7q+nFs6XmjpyGIOBNNNEBovqrvkV4xPs/RnhW+NL/a1U/o3Q3op7OLPubfu1SjXUp/mn2yl93hWPUnraMCbxB2AbgwprTB4MAAAACXBIWXMAAAsTAAALEwEAmpwYAAABhUlEQVQ4Ee1US0rEQBCNHwYFUfzs/IGKXsAD6GJMwIuYla6SO2Sjh8gVIskBongEEUWEWQkKOpKIaHwvSfd00hnjZnbz4KUq1a+rO9VdMYwxRl2BiZYFFjC+DC6Bc6W2D/sKPoNvZUwzfyVehXoTZMIMpFa1XOAJ7IEaprRIEViD2QNnQDVZMVo8OzCL4Bf4XoQGz8mBK715eOsgF81c192hBSXKGN+nwQ2Qc1qxBUUXPHIc5yQDwjA8L2Nd+oxxTMRgt8FW7EPBxDlFIlrVF+Ol5ZxWHEAhE9MXCeu7V3SH8CtoqnFF8M+XyhlwDotfB68RTztHEATHpmmeRlF0wQD8M3yBYVnWZaHIn9qtUMaky4PIS4HTt+ufL8rCMaGD1Q6PV6qOHwTYcZ04jl/SNL22bftGiHzfv0uS5MrzvHvE2DQf4CP4CUoM6zx23S7YVCo5Gc43eAv21CD9ph0zzpqxo2ZBdlgdYqcPGNCSUjxsxyIRO2oFFD8h6rlo608ImjFGXIFfJ96OUFGBfFoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldCancelPressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAABz2lDQ1BJQ0MgUHJvZmlsZQAAeAGtks9LG0EUx7+btBixSI2t5z2IpBDLmjUQLyU/oEXsIcQUa29x8hPcddlsogUP/g0eBEEKpUW8iEeLp4CX9uChiK2t/hUKXkTW7+wQ0kNDL30wzGfefOfNe28GCMdKjrMcAmDZnlt4ldXfLr7TB34hjBGMIoqZkmg6mXz+NSV97OYHNLl1Oilj9RH1cw+7vBDQ4hQ8qSlOS15SXJS86jkeNXXJol4qk9fJcbdYyJH3yMM1xV8kLyn+KrktavLsOdmwyw0bCEXIqXKlKchpsig3hUX+TE5Z1grjhy7JMeG4PBt+QB6XfeFMa18BLz5Qs9nzLR4A+1ng6W3PNzHNdJPA0XbPd30e9EobizSrZiIIpw0dAg+3fP96ARh4Btz99P3bQ9+/2+Xdv4HOjWi57UDLQrQTJvyPtapZRQe+swZa8EZ/Z9WXQGUAnzoAU8HcBrCTBia4iF4AeXIxjZBpdofqIaXAYHbKSBhmUh78r2Ytt/hOgclv+qhiv5nn/JgjVnVfFrqMLKZgIMFhIokF9Y7cxXSKfT0jfOsctz9Kz5/mVdaC/uRWnPduo1b39Ax/cSWuz9rieVxPGMYM7gG5lX3sSVNlhQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAadJREFUOBHtk7tKxFAQhrOKilvExgtoENRGUijEwsVKYSEPsG/gC8RXyVOk0idIYSexEFQWbUyhEfHWZBEvTfz/JCceyexupdUOfHvOzsyZTP7JMYyR/bUCjSEPWEB8FSyDOcD8J3ALYvAIRBtUeBMnHDArnjSMF/jPwLkUH5ec8G2AXWCCftZEwALvoNb5mHCKr78Fphhrt9uLXHXTfMxhLs/8MqljSrDOLBZwXffAtu00iqJ7+jzP23YcZz/Lsm4cxz242DnXBFQmFd5BdIYZPMiilmV1uLZaLWytTpIkh0EQXFdVik1X/y8V3kPCRJmUsVNV3DRNG0WPfN+PEM+AGv4k9qflmXyRNNbj6qDuY0GaFCsi+JU6XoGfUuQdUVP1+mmaXpWy9PAmSlPmPYChUrAoL0SDw+OgqClfX5dFGx47vwTqQdjKHX/BvwSaHB4L6INicfrCMMy/EuS9Aur7Birrp5O6IPm3XGUXG31on3Adg4si9PMracwob9IHoCzTgMYm9KK80iegVhS+wZNFnDdqDfDqzgPaM7gDN6B2leEb2T8p8A3yHYy8BAVcaAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldFind.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAABz2lDQ1BJQ0MgUHJvZmlsZQAAeAGtks9LG0EUx7+btBixSI2t5z2IpBDLmjUQLyU/oEXsIcQUa29x8hPcddlsogUP/g0eBEEKpUW8iEeLp4CX9uChiK2t/hUKXkTW7+wQ0kNDL30wzGfefOfNe28GCMdKjrMcAmDZnlt4ldXfLr7TB34hjBGMIoqZkmg6mXz+NSV97OYHNLl1Oilj9RH1cw+7vBDQ4hQ8qSlOS15SXJS86jkeNXXJol4qk9fJcbdYyJH3yMM1xV8kLyn+KrktavLsOdmwyw0bCEXIqXKlKchpsig3hUX+TE5Z1grjhy7JMeG4PBt+QB6XfeFMa18BLz5Qs9nzLR4A+1ng6W3PNzHNdJPA0XbPd30e9EobizSrZiIIpw0dAg+3fP96ARh4Btz99P3bQ9+/2+Xdv4HOjWi57UDLQrQTJvyPtapZRQe+swZa8EZ/Z9WXQGUAnzoAU8HcBrCTBia4iF4AeXIxjZBpdofqIaXAYHbKSBhmUh78r2Ytt/hOgclv+qhiv5nn/JgjVnVfFrqMLKZgIMFhIokF9Y7cxXSKfT0jfOsctz9Kz5/mVdaC/uRWnPduo1b39Ax/cSWuz9rieVxPGMYM7gG5lX3sSVNlhQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAZVJREFUSA3tk0srRVEUx69XRAxEMpYo8krKkAEjg/sFTEx9DwOfga8g+QZSHqXEQHkr8hh55f36/dxzdOice3WjFP/63b332uuutdfa+6RS//qTHSjIUrV7PdABjYHfJuMKLAbrLw1JSbQPQRqKoBDUMzzBFMzAC+SUAeLUi3EYrmEOpmEhWNcxtsMxHEBOFcd4WEU3uGdgT3wHnnoHrGYQ9LFtrrMqbEPUySRN4LgEl3ADt8FcW+jDNLeSKgmTW8FjJIz3YTKlj7TACHzWBIY1jWGwzw62RXWCp45Km9rODG+BDBj1m2T9lkCfuIs3cQX4dGuhBM6hEvqgH9yfhQ3wrk7hELrABKvwrmj20KjNgGkYANtlm5SHssX67MMYXECoNiYfErgRV4l2A+/BGRiwCkzkxzgP1VAPzbAM96BOMsPHXwMkyROXQymEp39g7gFMMgo1sAvj4CuMVVIlOvv+PaHPV66C0dfleh1awYq24Ai+VXagDBrAe7PibF1hOz8Z1FaaIOlTyC9yzL9+pIKYPL/A9AoeHk3/hvvtQQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldSearch.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAAB3WlDQ1BJQ0MgUHJvZmlsZQAAeAGtksFLG0EUxr9NEBWLlaKe9yBiIbZr1oBeJEZtkeYQYopVeomzaxJw12V3jQoe/Bs8CIVSKBXppfRo6SnQS3vwIGJr2/9CwYvI9psd0vTQ4MUHb/c3337zZubNAsl82fPWEgAcN/SLT3P6i6VlvfMnNPThPgbwuCwCb7pQyNPSJq6+0804HZW12pjayb0+FwS0FA39FcVZySuKS5I3Qy+kpypZVMsWeYec8kvFGfJ7cm9F8SfJK4q/Sq6Lipx7TjZcq+YCiS7yhGUHgpwlCysQDvmA/NJx1lk/ScSI8HzOTY6Qh2RfpAjUL4CpN/TvtbSlj8CHHDBw3dKGx7ndDPD5VUu7PI97pQ12BatmOi6n9RwBHftRdLkIdD4Ebn5E0fVRFN0ccu1fQONKbPj12MuDaMfc8C1jdWZVHTjhGRjxHf2fVV9ilwG8awDcCp7tAq+zwDAHD34DBXIpi4RpNlP1kFagOzdmpA0zIyfeaThrG7ynODr4vGe7zxf47mPmV/0nxSZb9uxck+1g7q+nFs6XmjpyGIOBNNNEBovqrvkV4xPs/RnhW+NL/a1U/o3Q3op7OLPubfu1SjXUp/mn2yl93hWPUnraMCbxB2AbgwprTB4MAAAACXBIWXMAAAsTAAALEwEAmpwYAAABc0lEQVRIDe2TSytFURiGj0tyLxIxlaIUA8WUwkz5A36BPyI/RvgDBsqlTEwU4gzUGcstd8+Tteqotfc+nciAt57zrb3Wt7613m/vUyr96092oCHHtWvTMAEjIe+UeAwH8B7mCkPeIUvsXoYmaAyV3oivsAHbUNNBFkhphskVuIdd2IT98DxA1F0FrqBQzYkMbz0Frll4C55AXYBuFsGcw/BMyFZsQ3WGLRwFo72/hYeAY+diDsNipZxYIB6uA99B7P0L4+jKHHMLFYtVJ1rQtqjJz/DlN86ZU9MhqRfvxg6wWD/o9ga6YBbmwPUdOIPokmFaqZvorhP8fBfAFtky5aU81H1lWINryFXKiTezaBksYMFucM6b70EvDMEYHMEjZCrlJCZ7AdvSCo7NfQYP64FV6INLWAdbmlTKSUzUkUX9fP1T3oVx/JxPeB6HQTiHCnyrdKXDYZiHdsjrCsv1yaIt0Aapv0J9VTN2/YiDjLN+efoDgZRGxg70NQUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAARCAYAAAAcw8YSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCFtj+P//PwMDmQQQ2IAIDRAhASJ4QAQLAM+wJGk6yEDYAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKtJREFUOMu10r0OwjAMRtFrCIiBgYGBgYkn5mERtOmPWWwpShNEI7BkdfLR59QBCMABOAIn4AxcgKuq3vmiAj+ovyBqPVuvQrQAjC1JHJgMGNYgpQQD0Lesk6bogVcrMgIR6IBnyzqTrREtxWNtkjlBOmALbFof1teRlmNLEQdURG7A3jpYe0qpIenN+J/aZcMOSL4OH5CYDC+A2sX6VwySrKkhmmFkCKVhrzeOxUzF8ZZO7wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottomRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALFJREFUOMu9k8sOhCAMRSHhs/yo+ehZuHBhDKP4wE4nKZlaMFoWkpxgeJzcgjgAMHeatfaF3RtpkQ7pEY8Ed8tw0R6X7AQQVZKtIAKtZCVRZCJ1kpmJDok0kolEWRqNZEQCsrA0aomnNAuVFWvKGViaJNlrkoyFcsDhm2jYQqDJSAs32vTjw76zM+mEJIm4bDX/6y3eTi9iS1GSRTF2+E98QcJlXCrHTEoSTg4STsTZ/BcCN3bqE4blmQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAABCAYAAAA4u0VhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCB1jYGBgYAFiHiCWAGINILYB4hAgLvj//z8DMRgAsZ0fM9irjXgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAABCAYAAAA4u0VhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUCFtj+P//PwMxGAgKgDgEiG2AWAOIJYCYB4hZANHCHzOD2AJlAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTop.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAARCAYAAAAcw8YSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCB1jYGBgYAFiBh4QIQEiNECEDcP///8ZyCQAal8kaTS8tF4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTopLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJVJREFUOMutkgEKgDAIRbdmbY3o/nfrMGuBhjODlIQPw/D1rEEYKyrn+PL8LlAGeCal94CBeMskkjC8FzVIFICE/SszBgRsAIGwSDi0YAo7g4C9QgAHck9trR3hQ8l1CFJ7ti8AbsJXKQjZLRAy4d9j9ZjIdcjGBaHfm9HGvA7dAbof2Wqi2cyedTQjs0lQQC6Iq36BnNGBBaWEiui/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTopRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALBJREFUOMulkWEOgjAMRjscgoYYf3gF738Jr2SCiqsbaUlTC7GzyQuD0MfXEgEggl1onK1ns6BfaUZFUvfL+0UyGBJuYt5EUiAnOW8ISuOUeRETwZVYclES2Vx4EiNdg/5oRMQb/FAhhKsQyMSrf8aqQQh4R0UaPJKTMeos8yZ5EK3YjyvJMXPP7GkNDe/IIzlkOurZ1Uo6GoNTNDXjtFYKb5KvBDXjaAHUJNmM+Hd9AEI6RFQh0+dCAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCFtj+P//PwMDggACdRDRByKiQIQOiOAHEYwAbGEKQz1zHVUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottomLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wUEOwUAUANA37S8JG7Fj5Qhu4KrOJyxEpJTpWHSW+l5ggwOOpZSzP8KkYDQjUJAxmBHIeOORUtphiQ6NKpDR44YT9thipQpkPHExuWONhSqQ0ZsMuKJDqwqM+CDjhRYNkipQkJHx9ccPCKMfJ5j/ZGcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottomRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wTsKAjEUAMAJvLt4LTsvayEeQAQbbRTEZd1PEgWLCLozUWv1T0ppjR2OYVlB9RaWDciokVJaaQomjHhgQA5sfFT0uOKMA3rkwFYzosMNF3SYA3tNxoQeHZ4ogZOmoiBjRkEJ3P2qvrwAKV0tKePvXOUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCB1jYGBgEABiAyBO+P//PwM2DAD6GxKPgLbV2gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCFtj+P//PwM2DAQJQGwAxAIAxNISj3z8C1sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTop.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jYGBgYARiBgEQoQMieBn+///PgI0AAMt5Dzxv9Xo9AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTopLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUGBl1wbENwjAQAMD7f8sYlCoN+w9GyRxOgRuk+C78CzcCgUShoZAIS0OiY+CFgY6yNBQGTnyRSISloeHAe875cSNReOK0kUh0HDYSgcLDRvoJhI0L53oFmk+kBA4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTopRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBJREFUGBl1wbEKwjAUAMB7aVAExUFw0f//vC6i1GASHYQuzV0gbOv+Ms5WHQ0VH1S0jLtVRcGCFxaUwMmqo6HhhhnP3Ht/2BARVxS8k7ELDpiSsSN2SMnYHhMiGQuEny/9fRhMYHBh/AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSplitView/CPSplitViewHorizontal.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAKCAIAAAD+RXMgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjWgoDTKEwwPQPBpj+wgDTHxhAYmGTRYgdggEAPLVN4i1E+ZUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSplitView/CPSplitViewVertical.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCB1jXLp0qY2NDRMTEzMzMwsLC4SEMNauXctIkTQAwg4O0avWgU8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUCB1jWr169X8mZ2dnBqZ///5Bif///zMw/f37F1kMLIsQA7MQXDQdRkZGjADPODEixZK7iAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAASCAYAAAB4i6/FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUGFdtUEsKQyEMTCBuBXe9gDvXPU+37xKFXkev6Oc5QoJtHYjiTDJJ5DEGlVJeRHTNeDIzgZOc8zuE8IkxkveeTGitXSklcs4tovdOgMzHQ0QWiQBQJchQArdZ4Zh2S9ghtdblq9kmgDwKsEGARIKKS9ARd5gV8DUumh+n2psDtgfIYwXI/TtM0Iq/PU5TAfxrobgByk2US+DqkeEAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAASCAYAAAB4i6/FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNJREFUGFd9j8ENwyAMRe0qHLl3CNZhiEzRMXrtnU26AjOAxADg5KMa0QjlScGCh38MhxCEfojI9yxv7/2HU0rCzF2UUijGSDnn16O1RvhqrWStJecc9vt2tiNCo8gYg/ocQuM0YUMEDrFRupgPFFxeihEF9B+gd8xT/QksOpXWIa4MMd8Gy3FH1EosO8Ct4OsblAPXUJQLU51iKwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAIAAAAVNSPrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUCFtjys/PZwoKCmJiZGRkAgFmZmY4jQ0jyyEBAK7qAuAYeB3qAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAASCAYAAACeomSBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUCFuljbENwCAQAy27ov49aJnvB6FkrWcPmk9FFKQoTcrzST5mJsYY6e7J3nvOOVFrBSMCrTWYGbjWQikFJEGSkARJoKS9vpjfcF8f5ug86h9wATADFmAXDSbCAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAASCAYAAACeomSBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFdJREFUCFuVjbENwCAQA637ipo9aJmPQShZC/ag+RSIAhFFSnk+y6aU4q01d3eRUtIYQ7VWJ8aonLN67wJQCEFzTmFmMjMBywArOMyGw/yB1+n7Z9e+4QHvjBZgBg89KgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjvnDhAnNmZiZzRkYGHOPio9MwNoyfnp7OnJaWxpyUlATGcXFxzLGxscxWVlYA/CwgVtHWuDgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAORJREFUOMuNUcENwzAItNv8K+WbAbJEv92s367Vf7JCvhkhdgpVziKY2EZCNvYdcNDt++60zfPs+N17P1D4ofuTzoFi1znDjiQjnV8C9QzkN3aTcNibvEfAJDaTcHy+UA0Vai09kFXqLFXI7pcaZBuadCkaJF25NKWsUpMGTSpN6UQG6bIluV3EVQ3NY5Wb1dMqarBI1ZZ0xaaWqlOyFpb2oNcPm6apSYO3hMO1Bi9PScAZY0wECf47fyIr7hCdgfEG4Em0Ab6xb9uWsjIRCbSGRAAwhJBIcg8nMPl9WRa3rmu20B+QCNBalqdZ1QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUOMuVUrERgzAMtI3KVKHMELBAShZIk0FYIaNlAZowQbYAJzJn+WRjKeHvfBLwr5dkYJqmD8Ig3tbaJ8Yx5PGd6brOcAB9QFwwv2McUHjF8zIVAH9AUghnPA88t6ogkjKg02AEQCRQdcpPlIstcZEGqFRXxccdeMXS7a+1EvFQS9ocwNspXdS1Sq2JgpIkibIt8Q2JM2jbUWeotVSdQRpObYkTqEDf978dijl4+USCdV2zG2YulpEtiTaBcy4bNEbHKicReO93/1HTNGVLSQTLsmQOlCOCyseTRFtLwYXfdIRjlVOEeZ53q2vblhyI6GmGL+DHprPdSa8DAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBackgroundCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1jeP36NQAFhgLCPZRjjwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorder.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1jmD59OgADjgHGSFRdpwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorderLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCFtjZGBgYIZiVihmB+Hp06c/BAAH7ALGIwf97gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorderRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABtJREFUCFtjnD59+v/MzEx5BgaGn1D8G4r/AgCTpQkFeqUzkQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAaCAYAAACdM43SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUCJl1j4EKADAEBRmb//9im9VTmim6TsIgInZ3GQEnL0QqYP5hRRFAMdabvpXj9pi6qxjFzXlq/SKCYXgDF+AD5ACr1RsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABFJREFUCB1jZGBgMP7//78vAApVA38fKzIUAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAaCAYAAACdM43SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUCFtjYmBgMP7//38DEwME/Acx/iMz/mJn/APi3wQYf4H4F0zkJ4rIX5gISVL/kNWgiqDY/gfm1D9wEQDwSTQ2I/IFQAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUOMut0ksOgCAMBFAHem1WHBwTVrXpDJ9o0gBKn4MRY4znzwunDb33ObbWcAvij4S47cFmA8QauxtZIxv1mxZANp9rHKRh9dmHBZaBReEMjFBJ5imMzSN6xFeEt74VwyJME0bMg9XdqxkKklKlqq6WYJaOYRGWYHZMDxhJKsFCQHOguWezT/1zKp0lKSWYJbQFOIO8L0oHneBhzz8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUCJlj+P//PwMIMDKBSBDBxATjglnMqAQLnEDjsmBRzAgAI2YDUG/9aHsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUOMutklEOgCAMQ0fh2vxxb4yJmrG0QNQl/ZNnuw69d/tLSGRaa/ZGMDK11qRkk8GlJCR/pGDJQbfBDAoCggBJqIdlAlVgCfXOshOLrKCDu/OjEmBZuKSg6CwvgLMyBnfMGWweWTZ8w0qArmIacxeXvxuTwkFcqVPBxN0A+1KCbLMsIHRXamewdUR2b8/R7jyWbmKbO21JN34Oq/BktCvK5iYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCFtjZGBgYGSAAEYoZkLDzGiYBQ0zI6llBAAGtQAx0/UgogAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA1JREFUCB1jYGBgMAAAADUAMcUHJsAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAABCAYAAAA8TpVcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCFtjZGBg0Afif1D8F4r/oOG/SPgfGv4PwwB88RIDhNxONQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKRJREFUOMulklEOwyAMQ+O21+aLi0/t6JQZJ6QbUgRK8esDATODvQdGbVT7mI+xPlztrs49QAAEwXzwMRCBIQPv9f3tymXAlSXbpYbqLhk6HVcBTRhmUN//AK1gycfffgWubL9gEdAeQEHACeRh6m0iAIWGyjJ6UqokqHIFED80b8jACGoZLINUracMA6q98GQqnPWXmSxYgf+3+Ry992turcnsC77uBJ8gKQLbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjYmBgMGACEv9BxF9U4g8qgSaGpvgf3BQwiwEAxvcQJujA9GgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAASCAYAAAC5DOVpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKZJREFUOMuVk0kOxCAMBPvg98wn+XaMc4mRx/EWpBaLoFTEhAD8AAiADYCfXC5sovv0jGjITpIgGNv+NDL07eKBIcCukVOukhmfXmG6mQeA1JKeD+zN2IGlAb9gX66KDMYNbFLt0My+na6yYTUvs+gNBbVdek3gbddBznitJRls+he0ZhhC/qwsDAEMHSQy21l1JhC1Ulj1EFMLC6nMyhZBLOzTgardIdHIhbP7OXcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindowResizeIndicator.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUKJFj+P//PwOx2NjYOJIkxUDalSTFQMxPkmIQnyTF0tLSASQpBtLOJCkGYlmSFGP4gZBiBQWFIJIUw+OBWMVALMkABHZAhg1MMQcHhxeQtoMp5uLi8obyJUF8ACitf5AUaj8yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/empty.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+P//PwNAgAEACPwC/tuiTRYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/FIXME_ImageShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdNJREFUeNrt3EFPwkAQhuHdpYB403jx//89Y9SIiNAus8msTGtbjCFe5p3kS1tSDn0y3Wwv0+ScA/X3aiC4EmCMsZxvJGtJ0kQTr5VNOkkr+ZLs5O092g4seA+Se0VcShYa74CtgdtLniVPkncLuJLcSR4lt5Ibg5icItquO5Suk2z1t7fhGpj0eq14GwVsHL/G9dU9aiPV82rSA4x609Jkpfckc48nvKDdVp+/4i3GAGsX1nWvMfHcgRWvNTZpqgNr0sTR6xqYBjuTyX1gHNm6eN/KxJFj/O1GOl649rAGzj4/XyJ8ygEIIIAUgAACCCAFIIAAAkgBCCCAAFIAAggggBSAAAIIIAUggAACSAEIIIAAUgACCCCAFIAAAgggBSCAAAIIIAUggAACSAEIIIAAUgACCCCA1PUA84Vrb5UvAeZBwuDcI1ge4PU8mgm8LvRHv5Wj5wmWnUme68A6L7TkGM7DB5Pj17ZTi9bkG3LYgXXYaslCf28DAxjrBN+DwfwB2OkNewWzw1e9z1CtjfWpOYwBVuUP07Z24KrnNbAuaQVvp07tELCovugfVgbPY/fNdWHBe9XzHuBeAbeBMfBhZnvXmqXuDFjmwmubUnzK/V+dAO2XkLvQMyBAAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/GenericFile.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFW0lEQVR4Ae2bPUhsRxTHZ11X12/UKCpEiDba+dWksbFPLeneexYpgggvXUACNkEwsX+VH4UQsBBSCmktg00I8gKKnU8xUfzY1c353ezxLebtvWfXe90vB45z986ZmXP+5z9n5q53Yy64xEQlLtKQrYN7PE3jTrrfiFBHXuoNM2S2t7e/mpyc/P7i4qLOoG9WyWQyLp1Ou1QqlSvp09PT3/f29n5ZWVn5TQYDjMhKEABEP3F9fT3c29s70draGroh9/f3D87f3t66m5sb19XVNdXT0/P1yMjIu6WlpR8ODw/PQp84O2AQAKglz8/PkxiGRFHu7u4cQMAIZUV9fX3T8PDw/OLiYvPc3Nx3Mu95FHNbKB0XilqAKtq+eDzuEHHaJRIJTxgMRgwODs6tra39JB87ip7Ap6MFAJ/u4TWp89QIgMCGy8tLNzo6+np9fT0SEMwAxGIxF7XgtDIAEOrq6pzkHy9RTk1NRQKCGYDwYu0/Uu5SAADyw9XVlWtra3Pj4+Ohg2AGIOro6/g4rcuAmvsKQEdHhweC5ISfBcZQcoIJAIlKRg2MuoYfgKBMoAaA5uZmBwDIxMTEq7BAMAHgT9pwWxVgZQIAcFCi5hzS3t7uCSBsbGw8mQllBQDOa1EgWAZ6RgAUQIAFADE2NvZkEMwAqEFR1jjP+DiqovPBAAo1AHR3d7vOzk5ywqvNzc2it8hIDziexQX8wVktuY7DgP39fe9cwDZJaWho8EBqaWkhJ7ze2trKzM7OvpWmgk6MZgDUIG/2CP9w+NG5iDYO88C0s7Pj5EjuXaOTTCYdzsOG/v5+19fX90Zygpufn397dnZmBsG0BISOz7YLqPMsAQAg0k1NTTwgOXlA8mgP9dkV0OWgdHx87A4ODjgrvFleXv5R4tMi8pFOPgEzM8BnjFCbFACNPpHmEETUGxsbPQaoDjVAkSjRhykDAwPfrK6uvl9YWFgVw9IiGT8Dyw4AjMUxjT40JwfABB6OcpcIevpZ+7FkhoaGvp2Zmfl1d3f3D7n/dADEmIclwERRFpyiAAARpxBhgOBYjMO6Q9CmW2TuI7X0G5yenv5SAPgTFfTyFTMDMEyNyzdYWPdxUOfjmuhDby3aRg0gOE87wnXWzs9EHwQ/dtQBcuqyBEDtgwUAQJSVDdqWddL7CAicFgGAOssQ/Q4TSuVdBmYAdOLnqNU5jTAOPS7apvcBCwAUNMkFOP7/jtohW5sAwAAmVMMejRHJx9y5iPCnSq4O7WojOQPhFn/8igkABlAQ/AaLqu2xo/nmyVLfcz7LgHyqD/cDKYKmGPDpEDwMUz4XgMBWmGVAoGFmBii9AkcsAwWcFyAC6Y+pJgaUgU8FmUCwBAQTa00M0PVvXYsFWRuBctZOEwNMAGBjJS2BQgJlBkBBiCBgJR2yKnNAIYhWLQCSt8JNgqBKMqyUYrW1cjyKCPmXJBgRsCUfVrbC8HNAIftrqRF4yQHGCNR8DjABoHtqJS0BIwGq82nQ6jx6NX8OqHkArDnAY1Ul5YCa3wZDPQhpUqkkBqjNQXXN54CaB8CUBJVGL0tAkaiiuuaXwAsAVcTmolyxMIDXY0zfrhRlQYk7WQAosYnRTl+1AOh3GEHwmc4B+mBRSecAtTkIgKplQJDj2m4CQCJv0tNBy6G22mxZApkPUo6Ojv6SV9AS8sKS6f/upQKBHUtekUmdnJx8EBt8X5LExiBnaOfnop+LfCHCy4f/vbgvF2Va+M0xzr8XORK5EMm7jQcBIH0dL+i3ibSL8OZluS8Hos5PXP8W+UckJZK3WABAB6eJvEU/72TP2EDEYQJg5I3+M9pTvlP9C04LfFSu/LkzAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUDTheme/WindowClose.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzZENjA2MTc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzZENjA2MDc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+0eKROgAAAlxJREFUeNq0lM2LUmEUxr3qpDg2w5hfGTONobaoUYkICZnBFiGtyiaImZ1/gZtcuInoD3Dvol07Wyu6ioRahUJtLJJyIePXojTN1NvzyLkiFcymLvy4556P5z3ve+69iqqqun9xKf9VKBQKrdfr9fvT6fQq2KHPaDR+Ae8CgcCLWq02PE1IcTqd4X6/n5zNZnz+Cn5IzAQ2DAaDzmazPWu321U8q38TUlwu100kHMM+AV3wDfyU+Bo4C+zgvMPheI7ciiam11Ti8fhWt9u9C/MT+Ag+g5aInohN3wfGe73evUQiYVvuhR0BPbZEkUfgAbhdrVbVYrH40mKx7JNSqfSKPsbAIXPtdvtD1lLDKHrG4XB4UVblllR0997tdu/n8/nHTMBCUfrkzJhjGo1GbtaCibY1A6Yzx70vBzw6Ojp60mw233o8nluENn2IjeXs+pPJZCpCy470iqJwpGS0GJHJ1MWEZtoR0KZPRHh9F/SrU1tH63c6nU4TdoeOSqWSt1qt4Uaj8YbPXq83MhgMqtFo9FCEMDjHNiZXgD3QtqYGg0GupgC2q1Ck1Wq9TiaTTwlt+iRn8Ur4/f4ebvPVqZ0pl8s7SDyA6xIbADdABASEiPh2GTebzQeFQmGXtYtdaeMHG5lM5hqS9sAFwQW2BNeKfy+dTl9HzaY2fk2IrAF7LpcL+3y+K1K4yfMTaLsYy2azYeQ6tG5+F+LBm8A5jNqXSqXCsVjsMoq3CW36GOOCkqto9X98tPJKmKULs3xjOjngsbwiYxmKetr/SC+CxpXvcS7F0+WkVq5fAgwAsK9LC3k6I+YAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUDTheme/WindowCloseActive.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzZENjA2OTc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzZENjA2ODc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ehr59QAAAxVJREFUeNqsVEtLG2EUnVdeJiYmJDG2kgS0TUkUobiToghCXdUSspAqdutj51ZXunUndluQ0oV2U7rISukPsCA2GGktMaYk1DTvSTLJzKTnykzQrh345pu5r7n3nPMN2+l0mIe4OOaBLoFup6en+jtLa2try3Z0dBRttVqRdrvtJ4fBYEgbjcbE9PT0p83NzRpMHW0xY2NjDEujaYVYi8UixGKx5+l0+i3P8xwSaxzHtcipqqoRhW2Koqh+v//9wcHBt0ajIVOxe4X6+vr42dnZF7lc7o3NZiu4XK4KbBI6UagQOuNLpZKpUCjYa7Wau7+//0M8Hv8Km0KFBH2mjY0NF4rM9fb2Xg8ODpYDgYDqdrt5s9lM4zLNZlPO5/PS1dVVNZPJiNlsdm57e/v72tran9txNNa4YDD4GsHhoaGhGyxmfX39XaVSSZ6fn3+mgHA4/AofCe3s7CxfXl52sLwY/Rdg+EiT6x0JoigGnE7njc/nq3k8Hifa/22325+NjIyYKcBqtQbJ5vV6KbaI7hiM6dMIa+n087IsqyaTqYhkEUs5OTn5gsQsFdCK5MiGrlT46xi5BPBlnXm9I5DDiWi1jiQFYNeRUGVZtqtWPKtkA+gUIwmCIMNW17XYFSQFwSmhWBN7IxKJxJDwCDhlaNEz2cinxUhgtXpPkKQFYJFPpVKMJEn1YrEoYsxAuVz+cXZ2FqeA0dHRlw6H4wn5AEMdOFmHh4f/EtB3WTMeHx8/Xl1dfQrnDajvgT2ALq0DAwMNCgDdlmq1KgKCFOhvJBIJz+7u7s+ZmZlrAlvvSJ6YmCguLi6WDw8PjShQAnsSdk4XJJ55gKtCaw1oybawsFCdnJwsUG63I1J2KBQy4t0F6fv39/cVJJahrTYUflsIVPMY3YCuHNFolF9aWroG2IVkMindUzbobOOLpfn5eWVqasq1t7fnuLi4aKIwMcOMj4/34GPmlZWVGsYt4uxVAHqry+qdQ0unmNUIIBFatd2gxbbppGCJ2i4jr3v6hbv/FM3RhoPGkbSiukRUDQ8qoP7/P/onwAD1HZ96Rg2qRQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/minus_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAECAIAAADXmFKkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpiYKAHYPz//z9+FQABBgBgSgL/1o3U+QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/plus_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpi/P//PwMyYGRkhAsA5RiR5ZgYSAC0Uwxy0/+BdwYLlqBjQAo6VMVQdyOD/2h+ooeb0QXQ3YkMAAIMAKADEhQiIamgAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUWMPtl1EKwCAMQ3OeHc+7+539TNC6QZWWfMxBYCjSh6YRQRJK4QDYgVIKe6UD2IJPUZLk21y00BdsRd/+M74BoAKswATQxqN1ACYAqQekXSDPgdUF0YDY2bbII8Kq0SJNOgBchEsWwLvO6gB8BpHEA9IukOdAVsJ5QZGZ856jQtaN5zHrAADEygLY+QOwHUQpHpB2gTwHfv84vQHcG1BmjzmkMgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider_button_h.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ5JREFUWMPtl1EKgCAQROci3cl79rcXtAwE3YysdpmPVngQSvjAcSLknMEEIaBHSim3wHvoDQsicjBaswbthnXT0bMHncC6x6GgBeq8NSFwEqBmgHoL6D3wtTdciugOyyPC06BZhrQTWARTaIHZ9zQhcFlElAxQbwG9B+iF5dnzM0cFry/eTFg7AcAWLaDXQ+B1EblkgHoL6D3w+5/TDQIL6kKVaIANAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/standardApplicationIcon.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAM31JREFUeNrsXQd4VFXaPpmZJNPLnTs1jRIUERtiaCoEWKQoJaEJJIqhBsVC1RWxrO6669pd3fq77q6666pr76hIh5BAQgglkAbpCSQZAqTMf8+dc29uJpGamTPle/N8j5MhJmfOPefrJcLtdiMAABCeiAAGAAAAAwAAAMAAAAAAMAAAAAAMAAAAAAMAAADAAAAAADAAAAAADOCC/0BEBOwyAOAD9MTdpc4AfvfRVniSgYVeHBXBNvgHq6YMo8oAZPAIABIYOcoh/wWEARSwBWEvgSIk2tgD/eIchkOl5Q9w7z8heR8cRSEK0AAAwjmQcyrl/GgDg79/4P7n/88M5wMYgB/gBqJERPrjM6B46p2v73FY2XhFZBSyW8wG1hGTQjREmefnYL98Q2FuAkAUkjrkHEVFKdWPmsxm/g0DY0ZRlVWPci/fIT9zFp4TaACAEMLqqcMjyOWPXPWHd6fZWCYuWqXmpZJKrUb4+5WvviNoAXLy8wBgAIBQk/5GszXTaGY7/QP+3mSxLeVeRpOfAwADAISQ9Ocdf8t+88fRNqtliEaj62Sa4u/x+9y/Jwu+ANACgAEAQkz6O3v3W8WybLc/wDAMssTEz8FmAmgBwAAAoSX9FamZa/vpDYYhar2xW/+01sggs8Wagn9O0AJgB4EB9DAgFEQh7ISfe9Q1w0eusbLmcz4du5VFVyeNwL6AqA4zAPYRwoA9df0hvORvYA1AMXP5o33NZkuqyWI75w9rjWak0hlnjJg049ebP3vvDPdWG/fM4KmBBgAINqyZNkJQ/6OuumnEwzYre14JJZfLUK84p3bktLmZxBcgI78HAAwAEIzSn5PmVqVae5vOZL6g/wknBmkNxpnIExJUkN8DAAYACELpH4mleUKsUyuXyS/ITFUoolCsw+5c+erbaaAFAAMABLH0Hzl1jlXPmDNMrOWiXFV8YpDVsRB5nIEQEgQG0FMAT7CvSSr9h02YlhbvtOtk8ovz/+I0YSvL9F/y9GtCYpDc83thfyEKcDnXH/zJ/gKf+KMzsQs5uqRfwJgtyJ7QdzH38juOWpAnIgAADQAQqFibcrNY9LPy1XfS45wOZ1R09CX9Lq3BiEyMeey0xSshMQgYACDIpH80Y3OuMPIlv5eusuLQ4TXDk9cQX4CMMBgAMABAgEp/Pu33/uffnGK3mmOilGre7LpUMpqtyGBiUoZNSLEiCAkCAwAEh+1vtscuNjJsj/xCu9WCklPTcHpwJGgBwY0AcAKCF8kXeDj1FlH6L3nm9dF2K5uk1up65HcbzBZcKJTBvXyGo7MctbvhQYIGAAhM6W+L673EbLH0nNRQKJDTZtU9+NI/0gUtgDAcADAAQAA9W0XKktX9GIYZq9H3bKt/nB5stsc8hCAxCBgAIGDV/6irh41cY7WwvKnVk6RUqZHDZnHe99zfphItQA5aADAAQGCAT/udcd8jfVnWkmpkrT75I9ipyDrjFoEWAAzgMgDpoD1JEukfeeWgoZmekl/fADsVWcaUdNcjzw4iDID4AuA5QCrwhV5/8B37RPoPnzjdptLqZ+CGHr4Ep2GguH5X45DgLo5aER8RgIcAGgDA73hk+q2i9L916p2ZCbExOplc7lP5pWPMiLVYUqYtWSWkB4MfABgAgKL0l98y5U6rzmTOMJotftFibVYLumrwzUJikJwwIgAwAAAF6R81ePSkKThOj6W/PzgA7h6s1htmcGYHpAcDA7hoLwBQzzmT+MQfxmZfoTcxfnuCco7RxMfYtcMnpc4jWoDMw5DguYAT8HzXHxxGl41fzhgplvw++PI/+ZJflVrj1zXoTSzSM5YF3MtXkJgeDN2DQQMA+E0Q89Lf6lxhYFi/y7HI6GgUF+NwcgxI7BtIGBMAGADAx9KfT/td/KvXklnGxJf80tBm9QYGawGzESQGAQMA+F/623slrjZdZsOPyyGlRoNLhZMWPvmKOFAUtIDABpQDBzEenTlKlP6Lnnp1NL58OoOR6prMLIts8X2kfQPb4RmDBgDwsfS34pJflqXu08aDRnH14eSFD0HfQGAAAD88P8XUxSv5kl+13hgQi7JaLWjg0FFi30CiqQCAAQB8oP5HXj3k1jX40gVKaFtnNCOlRjtuyG3TIDEIGMB5vQBAl5ZAwhf9pC5bm8ip/ql82m+ArA0PFE3gB4rOEfsGehgWPDdIBPK+/uAfumism5UsSv8+A2+cxxLbP5Bg5PsGmr36BkJiEGgAgJ6Ap+R30gy+6OdCp/z69WDJcd9Ai275838XE4MI4wIAAwD0hPQfcfvMZb3jYnQKPOcvALVbPceY8DASBIlBwADAB9Cjtj8/6UdnYjL0DBuwhwvXI1jMJmfG+hdGEy1A7mFg8BzBBwA+gIvGY7NHiyW/97/wVprDatFF8A0/AncTcd9AR58rVyIYKAoaAKBHwCf+GC32lXrGHPCL1RmNiDWbk+ateUbsG0gYGQAYAOAipT9f8stJ//T4GP+X/F4qLBYWxSYOWAq+AGAA4APogYYfBtayyIA9/0GydJwYxFrYlCkd6cHgBwgQHwB1BnA5k2rDhR6bPUYs+lnwxMvJFpbtH6lS8bZ/sHxxa0aJ1yfNFZyB+DPBswUNAHCRtr8toe9qhmWDbvFaTmPBiUFDx8NYcTABABeM9Xd2kv6jHTZrkjZAin4uBnigaKzDqh085vbJhAHIyGcD0HwugeEDAFyI9Dc7Y+eYGCZoQ6c6I4sYuxMPFP078qQHt8HzBx8A0LltRD7td8qilYlmsyVFY2CC9rAp1WqEG5be9/s3cXowHxFYf+fYCPABgAkA6AaPzxkrhv76Dx6x1m4LnIq/SyWd0YR0DAt9A0EDAFwAeOk/dclqvuRXb7YG/QdSarTIbrMmZTz+0ijBF0AYHQB8AIAO6f8LScnvDfMsFnPIpE0zDIOwP4N7uQGRvoFwDsAHANSN7T90QqoVh8+0RjZkDh32Y2B/xqR77hf7BoIPAEwAAMETczuk//BJ0z0lvwr/zPnzF2F/Bm5lRnwBMvKZAcAAAEhS8qvWGWfiJJpQS4BV476Bar5voAVBYlA4MwDIB5eSRPpH3fvc39JinXanXBEZch9VLpOj+LgY7Yg7ZmQi0jHI89mhFiCsnIBQG94tSNGPfaXRzIbshzSYWKTSGmci6BsIJgAAoSfnjRNUf8Wy5/6WHh/rcEYpVSEr/eSRCn6gaOZv/yr2DSR7AAAGENbSP1pvYmdrjaaQV4ANZjMyWR3QNxB8AOFNRPLh5yGfv/6FZJvNkqRUaUP+o0dFq5GFNTnvXvf7ZKIFyD17AT4A8AGEqe1vi+uz2swP+ggP4L6B9oTEVciTGMQXCcG5ABMgbPBU2m1iye/sFU8Nxj30VHpDUDX8uJwvrcGIDAZD0sT5yxOJUJKRPQGACRA2aiAf+otNvHIpnvIbbltgsVjQgKSbxcSg8DkboAEAPEkwkXcseDDRzFpSAnHSj8/NANaK9EYmZfDYO6zEFwAaQDgwgHDP+X8qbbxY8nvFjcPX2qw2arKota2NJ1p/326zouG3zxITg/DeQC0AaADhIP0VN42bYtUbTKk6PvHH/9evtbUFZe/Y1ooJv6bSK4Bhkc7IZOC9QJAeDD6AUKdfpY+XFP3MyHTghh+UllNdWYlyNn5Vhqm2uprKGvCMwxiHVXtj8sTJghbg2SPwAfgKEAYMAOk/5LZpVo2BydAxdEJ/bZzaX1Zc1PrT/94uVev0iuETp/ey2R1U1oL7BhqtnfsGQkgQTICQw9N3TRCl/9CJ0zN7x8fq5AoFFRlUU1ONjubnVJ9qPNlcc7y0MW/7xvKamhoqa4lWq5HTbnVmPPnqFKIFyMleAYABhBz4tF+VVj9La2SoqaFY5f/hvTcLuG/OYNr+5QeFtdVV1NZjYMzIbI9ZhCA9GHwAoUhEovGe/6XP/jktLoZeyW9tdQ3K37mptPpYcQ33ThOmkoLciqIDeTVNjY1U1qTS6Pi+gXc9yqcH84lBnj0DHwD4AEJM+uvNtpV6hqV2FGo46b/9yw/3cS8bODpN3lbm7/ipsP/1N7EarY7KuoycFsDYY3DfQGGseDv4AsAECHo8c/dEseR3yW/+nJ4Q63RGKdVU1nKivh4VH8qvKsrPKea+reWoGvMEjuq3fPLvPWVFR1xnzpymsjaNwYRwUtTE+cvFvoFwesAECBWVj5f+OhMzW2MwUstCwXb+1k//k4V5gYQBVBEm0JC3ZcM+3hdAaX04MajfDUOEseIyD/MEEyCkGEA4Xf1n7p4klvymPfpcss1mS4pWa6msxXXKhSrLy1z7tv1wiDAA4fILDKB+2xfv7z1WVtpCKztQZWCQSqufMfgXk8W+gXD9Q00DCL/2b56S39jeqzkVl9q2Y89/1ref7OZeNuLLTi69QFgbONF0oq627MC+ktqaajpOErkc9YqL0w6dMF1MD/41ZqLAAcAHEGz49XxR+ivGpy+7wmAwJql0BiprOXv2LML2/aaP3tlDnH8nCNURZoDpJP63H/775lY+M5AScGGUWmfAfQOjEaQHgw8gFEp++9908xqLleXMXDcVwnb94T07DhHpf5Jc/pOEGQiEv2+sKC6sOHb0YGV9XR2VtcoUuG+g3bnomTfEvoEeZgoqQGj4AMJs0s/E+ffzJb8GSnP+WltbUVlJccuP77+1S8IA8H9xDoCLUJOUCWz99L2dtMwADANjQXqzdSGSJAZBNSCYAEGD39xzu9jr/4pBQ9fabPSGfGJ1fv/2jfmcfV8nkfqYAZxCnjyA0+S1wAQasKOw6niZ65TLRWXNkUoVslks/eeufVZIDJKTPQVcJmA4qH/AS3/c7CJapb5NpWeocf+62hq0e8OneRLp30CkPr74Z8laT5P3BHOgift/smIS+twap9ZQWbeJxX0D++C+gUJiUBsMFA0FEyDE6Tf33CEW/SRNSM2Mj4/TyuUyKqupqixHBdnbjnB2fTm5/IL630wufxu2EsjrU+TfeA1hz8av91dWHGuh1StArTMgvcGYNC49U0wMwnsLHoBgNwFC3/fnKfkdn2LVGpgMo5lu6O/H997c7mX744t+hlx8zADaiYQ9I9UCGutr6wq2/7SPZkQA9w3sf6NX30DgABAFCFR6NqND+t+QPDEtIdahQzI5ldXU19ehY0cOVlWWHKmQOvgkDKBd8kBayXunpMwia8OnudiEoDZEhO8baEwZNHqSpG8gcABwAgY2+MQfrZFZqDWaqbmb6zjJve2L93dILn8DcfSdFqT/mr9+7MYk0QI6+QIqOdPhQPa2wnqOCdD6HA67DQ2dmComBj2bMRmcgUHtAwjRsB85mHzJ74KnX0+Pi3E6FVHRVPYYe+/Ljh4+kb/th8Ju1H/B9peGpgQtQGAA4v+zb8v3+XW1tdTOi9bEIo3BfA+SJAZBGBA0gECW/tFGi32FUPJLq+NP7ubvciUX+aRE+vNTeVf/5WPv49hGtIBm8rONPAPY9sOhY0cL610cU6HxWXDXpBi7TZfx5GtiYtBvF4AWAD6AACJyIPm037vXvzjFabXEREarqCwHS/9jRYWuLZ+8myNR/5sktn+b5yc7/qfVf/lIMAMEX0CTxGxozNvybS6txqGYcHqw0Wp/CHXqGAQ+ADABAkut421/o8Wx2DPog1a7ryq0e8Nn2ZKQnlT68402Vv35I/fPfIY2oiE0S5hA4+aP380p45jK2bNnqHymaJUKOe02513rXphKtAD5bxdMiQATAEwA6vjdwimi9J+z9tnRDrstSanVUbn+La2tqLL8eMven74p8LL9XZLQX7fHEDMFCQOQ+gJ452Hh3l0HcXowLbmp55iqyeaEvoFgAgRsw48oa1yvVQye80cJNVWVqGAHn/Zb6yX9mzuk///c5/ksAhOQJgY1bPrfP7M8jUPpADNVlmWSUu97dBDZb5mH+YIJABoANek/VZT+t6Vn9jMYDEOUWiO1s4Uv6KaP3s5CXdN+zxAGcM4T6GEOYkhQMAN4PwBmKoV7swqrKyqofT6WtSJHnyuXghYAPoBAsuf4op9+Nwxfgw8orZHbOO33MHdBifTvLu23/UL2XxISFLQAMYlo4wf/2FbDMRlan1FtZPi+gePSxPTgCPABgAlAU53j034nzF/e18yaUw2UO/5s/OCt7V6hP6HiD1/o9pV/+tB9vs/k+RmeWXg7AxsqSwrLjx89VNnY0EDtc+LKysTrbloqOAOfWzQ1AkwAMAH8jucWTRNLfnsPvDHTZrNRO1O40reoYG9ZVUfab4Mk9Ccm/lwEpCFBqS+gae9PX+/1NA6l81lxZSXuG0jSg6FjEJgAdBt+4IOoVGtnKvUmaqox9s5nf/+5NO4vOP8Ez3/7ij9+6L5INdVbC+AZy+4Nn+2rKC1xuVxNVD6rTC5DcbEx2kFj7phHtAAZZsZgAoAG4Df8frEo/SNvum1aZu8EXPJLxyeF1fGigryq/ds3HvYK/TWjjsSfiwJmFqhzZmCnXgHZP3y2m2bHIJxnoTWaFxBnIGgB4AOgYvvLbxo31aoxmDJ0Znqhv9qaKoTV8m48/0Lor23FHz9wX6Kt2l1IsDF307f7q8qPteApwzSAayziY53Oe558VUwP9jBl8AGABuBz6Z8i2v4DR4yZgvPUIyIU1NJ+Kzl1nFP/81HXkt9Lsf0lWsAHP1cleBJHGorydh+uo5gerDexSMdYIDEIfAD00n71ZtsKLaeO0rL9cUhu9/efZ0ttdOSV+PPQGx+4L+OzCqaA0CxE1AK2ffH+LpohQYVSiawWtv+slb8SB4pi5gw+ADABfEbPL0kRS37nP/FKeq84pzNaRWfOH+72W82p4ds++88e1Lnm3yvt99I/70NvvC/1BZyWMhoccSg+kFt6or6O2kkycaYXG5OwGAVVkRCYAMEOXvobLJz0N7LUzlFNZSUq2LU5H3Ut+ZVI//fdPcSxW1HXxqGNOT98kUPTDFDrjMjEMGPHzlkEA0XBBPAtPb8kVUz7nbXqmWSWYWIUShWVs49n9x0rKWrZ8tE7u7qR/mcF6d+DKqt3rwCeAeDIw7Eier0CMFktNtRv0HCxbyB+TmACgAngK9WNl/6WmITVBoaltpa6mip0rHB/SdNJsehHavvzab8Pvv5fd0/8Lc/v6ZQY5JI6HPdt/T4XRyJo7YXaaEKcGTbuupHjJYlBYAKACdCDeGHpdIn0f3q002FL0uppFv1Uo03/+9c21H2v/1bU0fCzJyHtFdDhDPzsPznYF9Ha0kplL+QyOUqIj9cmjU8R0oNl5HkBwAToec8/Y49bglt905IfOAHnYM6OI1Xdd/vt0u+vJ+iBP/zX2xnYKTGoYNeWfdVVlfR6BZhZpNabMlAQ9A0EDSA41X9e+o+du7ifiTGNVWr11NbCd/z57pMc1H3DD77P/wN/eM/tI9W1u/qAxi0fv72rtrqS2p5EcFpAjMOmS3/sRTEx6MXM6RFgAoAJcNl4MXOGmPabeP3QNXzRDyXgkFtpYUFVcX5OsZfzTzrpxyfwMJUuiUH833edrK89kre7sI5yerCBta1AkBgEDKCHwRf9jEtflmhm2VStyUJNfcS2/66vPtyFOjft7JT2Sy6qL9U3qTNQ0EKasr/7NLuGWx+tvYlSqnFikHP6g0+MJlqAnDBvAPgALo2k0r/X1YMyrRSlP077rS4/5irYuekw6tzww2e2vzfd/9p73fUK4H0BRZxWUna4oNLV1Ehtj3Ardmt835UogMeKgwYQhA0/rh81wabUaGeo9CZ6tn9NFdrz4xe7vTz/nbr93v/af9x+2JP2brQA3hdwOGdbAR4lRmuPtHoDspiZpMlL14p9A19aNiMCfABgAlw0Xlo2U5T+N/5iSmbv+DidDM/5oyA1zp45i44XH3Ft//y/3mm/0kGf/jxd7d2HBN/Lxus8ffo0NQnLWKzI0bsf9A0EE6BHGn7wk35wiEnL0Cz5rUZHcrMOdSP9xbTf5a/+x+2PfcF/p5uQoLimgh0/5dGcKKwxMIgxW1JG37k4IPsGggYQBKr/y/eK0j8Kh5ZiHTZdhExBZbdaW1vQ8ZKjLVs/eXcXOmevf7+rsUKVYKchIlnffry3oqyYWq8ADKvVgnpdfd1cwRnoeZ5gAoAJcHHgE390ZstKDcWSXxz3P5i1Jd91ki+7E8d1SWz/tuWv/tuvJ4v8PcEXIJ0lyIcEjxceKME+C1p7puS0AA2ntV03agL0DQQT4OLo5XtniSW/aeteTE+IjXVGK9XUBEZdTS3as/GrPPTzab9uSqpsd+3Deea0+eO3t9ZW0asSVMgVKCE+TnvdyAnzCAOQ4ecKJgCYABeqonmkv8m8SGtiqO1UNd/rf8eR6tKj5aj7Xv9ttPb0vlfelYYEpb0CGrn1VpQcpNsrAPsCuGeH+wZGo4DqFQAmQMDilftmi0U/0x96MpmzJfsrolUU1f9qtOWjt7d72f5Sz387uYi0IJgBp5HXEJG9P361h6YZII+KQgmxMc60dS+kCREB8nzBBACc3/ZnYxJW444ztATFybo6VF50qKq6rKi7op8zyDcVf5eC7iYKNxzYtelQTfkxF05gotYwBPsCjMxsBCFB8AGcj6TSP/XBJ0c7bLYklc5IbZ9w6C/rm493oM5x/yaJ7d9278vvumnuGf77XlpAp4nCezd+nUUzJBit0iC71ZbEPc9Rgi8AP2fwAYAP4Jy2v8nqmGNgzNRWgjvsHC86fIKTooXdqP9Ubf+LmSi844v/5lSXl7W0tLZQW53RbEb4eaKA6RsIJkCggk/7HT1ncSLDsim89KckJuqqq9D+7RtzUdd+f6fJRWu/9+V33IGwaWQd3bUP57WAQ7u37qvjR4nR2Uv8HPHzHDUzA/oGggnQPb26/E4x9Nf7msFr7TY7tf3BNvOx4iOunV++Lx311SSx/dsQpdDfBYQEu50liEOZNIGfZ9/rh4p9A/HzBhMATADkXfQzZu4SvuRXbWIpdvypQrk/fZUtuURS6c+n/S576W13IO2fZz1dEoN4zQWHBAv37ijERUK0Vhitx30DVeOuHTnegqj3DQQTIKDw2v1zxKKfuCsHzrNY6I34xmm/uL9e/tbvC9A5034DEm7CoIQqQTEv4MDOTfvq62rohXXkcpSQEK8dNOb2TEQ6BpHnDiYAwCP9rxs10YqLfvD4aVq6NO71z9nMOO231kv6N3eW/oEHiRbQpUrwwK5Nh0sO5Fe5Ghuo7a3WaEZKrX4mkvQNBAZAxQfgDhiSSv/rkycu65MQp5MrFPTU/+pKtP3z97JQ17TfM4QBuANp/7yJMADpKDExPbhwz479NM0AmSISxTmdzjsf/l2aVAugsEegAQSY9Cclv8YMbPvTAk77LdqXU0ikf3dpv+1BsqfdJQY1Yqcm7hXQcvYstYXh7sEG1hrWfQOBARD84YG5YsnvnF8+lxbrsFOb8ssX/VRXo62fvitN+z1JPOpir//MF//lDuQ9JevrbpYgb8oU78s+WMuHBOnssSJKjaws65y2/LFkogXIyTkIGyhoL8AdWEeYFP1YVqqNnpJfGsCVviUH8spqOtJ+hay/Lv3+glALEH0B2Lzpe/2wgazNHokdczSgY1hkjum1inu5QdjbINrXUNAA6IetXn9wrhj3v/OR59IT4mKoTfnF4EN/m76Rxv0F559Y9LP0hX+6A7+S0o086xQTg5qlvgBs3pQfLSip40eJ0YFGb0RGgz7p1hnzE4lAlHnOA4QBww289NcYTLPVBhO1RTQ1nEQlB/OrDmVtPow6h/6aUUfiT7DBu1dAhxbw6b+31VGsD8BgrTbU97ohYmIQ+ADCSP6//uA8sehn6vL1yXabLSlSqaHmOa/hbOL8rd/vRV09/2Kv/yWcVA2mXspLOrSALlWC1WVF5eXFhZWNHOOjtec6xoLMFkvKqNkLE4kvICI85H8gcLvAaMnCq/+sM241w9JL/MFpv5VlJa68n77OR+eY8xekAxW9ewWIQ0T2b92wl3cGUoSFZVHcFQPnEQYgewMLhjDIBQ5rE+CNh9JE6T9hwYrBLMsmRWsN1NaDbeG8Td9kS7zlXbr9Lnn+H8HsohIiAp2qBHN/+joPMz6+VwAl4L6BOPR7zS3jwqpvIPgASOjPlpC4lGGt1ARka2sbqi4/3pL19Yfevf6DIe33vCCMS1ol2KlIiGN8u3GVIK39l8sjUazTqR0wfPRkUQvwCIiQRgCEAameafyAI0fOWsCX/Hqcf3TW42pqQDXHiyv6DxlpilKpz6q1BrfWZFbrWZtdozc2K7W6szKZ3O0O4hjVwt/9X0R7a6vsVOPJ6Kb6Wm1DXTXjOlFrb25qtLacbm5obaPL49RGBunN1oe4l39HYkgwtGOCEb7+gBER52aii3//FpUP/scV6RGEAarvfur1vw64emAqzcw/jMYT9ehMYx0KS0TIkVJv4sd50URNWRHKzd614P3n1/2baCpt3Bl1+/AcUhWeChS+4BnAQM7m0xkMqSpS8ksTcU4bsut7heXDaG13o0NVDdSfgZY7B0aLfRH38n/EXGkL5X2nbwJQ+Jt/8kh/vujnuuRJmXa7IyCs63rXWZ4A9BCt1iK73Z405b51oz565akvMW/ipHT7Ih9qAWHNACiFQnjpf82tt1nVOkMGtv2C2L8G6GEYTQwyWOy4b+AGogW0oxD1BYRdFOBPK+/qkP6jJmb27ZWgkysig2pIOZDvOwaZzZYUaXpwqN6HcA0D8iW/So12VjTFtF9A4IIzA1DCgBuEseIyIjiAAfS8BeC/lE/yEPmsv5mrf5MWGxPjlMujQOQBdaEonQn7A2YMvPkXYt9AaAgSQtJfx7ArcSmoG77gq5svmVyGevdK0F7LmYmIJAb9edXdEaABBCnIw8OXX8FJ//Re8XFOPOcPAPg5qIwMUml1Id03MNw0AF7645JfJafigaoLdC7C5mFcbKxzxqpfp4WqFhAWqcB/WT1f8PzL71j2y2SbzZYUpdKAiAOcFzoTi7Qm80IUounB4aQB8A0/zA5PyS9YufB1QWPFo5XIZrX2v33pw8lEYMqJQAEGEAyQSH/FiJT0KwwGY1KU1oAAgAuF0WxBbEwC7hsYch2DQn42oORzRvW+5qY1rNUK9i3QRZGSExh6TnCMmJYuDhTFggVmA/YMC/AxedJ+b5k+H8/5S9EyVjjTQBdNWHD0vnawV99AaAoa0PjrmnvEXv8JVw9aa7Pb4SgDXRLhvoE6gyllwLDRVhIRCAk/QKj7AHjpf/WIsdYopeo2nN0FAFwqHA47ujZ5kpgYRARMUCNkw4B/W5shFv1cM3J8Jp4GK5PJkRuK/gCXCKXBjFQ6wz0DRox9LX/zt6XcW+3uII8JhrIGQEp+x1tVOmMGVuEAgMuSlgrcN9Ch6z9kpNg3kAga0AACCVLpf9Ww5LTe8XE6JJMjqPkHXC40RnOXvoGgAQQm+MQftd64UKVnwI8F1DNVgko1inE4nFOWr59CtAB5MGsBIecD+L+HF4glv6krnk6Pj411yqKiQfYDeloLwH0DP0Skb2CwugJCVQPgi360jGWFhnKnX0DoIVqjQ3iIzJj0e28kQlRGBA9oADRBHgKf9otVtBiHLUYRrQTbH9DjMFusyJaQuIR7uRMJfQNBAwgc259T0RZrDGxQjtEDCnxS6hnEsJaUESlienAEMIBL9AH0BEml/8Qla0fj1s7RGi2IKoDPYLPZUWz/63DfQN4ZiM8gtAQLAOnPOOJWmVgrnFCAT4EzS5Vq7Yyrho8J2oGiIcEA3nxkoSj9h09L72cwGIZEaXQI4lZAviS5XIZwhumA4WPEseLkLIITkBIzi0oYOGgNa7FByi/AL1DrGaQxmBZwL19BnsSgdhREXudQyQPg035vTp3fl2HMqVrKab/HS4sQHnUN8D0YixU5YhPOO4TWZzZnVDTCuSbTHnwq7cMX1v2Fe6uV0wLcdz39JzcwAD/g779cJJb8xl517cM2POePIpoaTqJDe3ad+PS1X+XA9fQ9bp5+T+KI22fEsjZ6zx3nmmiMDE4MegsFWXpwKPgAeOl/1bDR1qho1W2ROhNVy7C2pgod2PZ9MfLEhvFhOAPkE8J725K38YviWk7bovnM5dEqvm/g+IWrhL6BMiKYQAPwk/SPHHjr+MxevRK0cpmMWq+l5lMuVFVW3Hwoa3MZVgUJtaNAaf8SGoggxHd5PlFVfqbsYF6VzRlrNZgYaovCfQNN9tjF3MvvUBAlBgW7D8DT8OOWcValVp+hNdG1/euqK1H+5m8KsCXA0WlBShGVEBhAzzEAGTm7uD2Xcv+W7w72HjiIKgOI1hqQ0WQaO3Ty3H7bPv5XHvLUB7QBA/AR3np0sSj9EweNmBIb4yQlv3TQcvYMKi85eipv41f53LcNHDVydIqoq63AAHr83OLLr+ZIV7xvd2ttxbFBdmecWqWhN+/BarOjhIE3ruEYQAY+EtwZbU//1R/dwAB8Bz7xR8ewK9QGM9UbVltTjUr37ynkXtZzVIPf4ugkYQJBmyseoBoAjrnjuW56jrDYby3YumGPPb73sBhNH2oLU5tw30BjypVDRj18YPsPpcGg+QUlAyDSny/5nfrAk+m94uOdUSoVtb1ua2tDFaVFLXu++ySLMIAKjqrIaxcxBUAD6DlEEQZgIsxVfjhry/6BIycMtsXERuLOPbSA+wZeM3LCUo4BrCdagDuQtYBg9gHw0l9rYleoDAzV61VfXYXKDuQWnmo8gSV/HUfVHFWS1y5ySIEB9Bwiifp/VjDBub1XH927M98R1+s6qyOG2sJw30Dsj+JePkPWF9B9A4NOA/jHuiWiEwiHXSysOYb2lF+c9JO38cssovLXEaolGsAp8AH0uAmAmf9psqeYGeCqLz0ndfcOGJpMlQFg7SMuxqmbfN/69I9feeJP+NlzZ9ad9tQbbmAAPWz7m+yxq3GzT5o7W1NZjorys4/UHS8pJwwAX/oTyOMIxNEA7ARsD9QDEIzgLpSMXH58DpRkv434GXDPotDiiOlrNNNrBKPitACd2YL7Br6JAjwxSBZkD14q/Uc7nY4ktd5IXfpnf/3hdnLZT5KL7yIXvw0uv28sR2JWnSF73Uj2vfFozvb8E3U1dB0UKjWyWizOcRkPjSYaipycXWAAXZ/khX9Jpb/B6lhixDn/FLtCnKyrRVWlhVV15aUV5PKfRB3hP5Hzw4zdnv2a99Tr+DC0EyZwmjBfngEc2bP9UEXpkfpmVxPVs6FjWMQ441cSh6X8584BaAAXN0aNl/5Dp8ztZzQxYyM1errSv6YK7dv49U5y6U9K1P7T5HC2zXvydTdUzvqAPAyglWgBAgPwMIHdW3NxUhZNqHVGZGEtScnzlg0iDED2z3VLIwJsNGDwmAD/fGypmPgTP+CGNTjpgub5O+VyocqSIyeO7t1xmBy8bqU/wKdoI3vdLDHBGvd+/1lOdcXxlpbWFqpnhGGtiI3tvVSqBYAJcHneX8XwlLsSGbMlVU077bemEhVmb8v9GenPh3946Q/wCcjeCgzgtJcvoKk4L2tfPeWSbKWBQXgiNdZYUYB2DAqK8eBS6e/sd3WmzW6jumJsX1aUHHXl/vBZjoQBSFN/SQYY6Oq+tgMkTOCUhAE04JBgfW019dNtsVoRd2bnCs5Az1mG8eAd1/8CfCqC9L9yaLItSqWZEak1UXXwYPuSO2DZkst/0sv2b5/7xB/c0D3Xt4T3+OecgTgkWJyfU8j7Aiguku8bqNFncGdX7BvodbbBBDgX/rU+U5T+A0b8IrNP7146mVxOTeZguxLbl4ezNhd4SX8h9AdJP/5XIQVn4CnJM2kq2PJddh3tXgGKSNS7V4K2/9DkeYQByMiZBhPgImx/OXf5rSqdIUNtpDvpp7aqEhXn7spvbjxZK3H+NRFHlCj94V76BxItQOoM5M2A44fziyuKD1e6mhrp+gL0ZqTWG3HfwOhAcwYGNAOQSP+ovoOGUS/5FYt+NvBFP1LnnyD9IeefDtqJL8A7MaipND+74ARlX4A8KgolxMc771j+eBoiEYFA0QIC3Ano2T/EF/2Y+ZJfmqivqULVJYdLiPSXJv40o46OsOCco+sMlGoBfEiwsuSoC/droAmV3oTUOsNs1CkkCE7An/Wf/Gv9MrHk94771qdjDhqpVPXYJKFLIaz+Z3/z0XYv598p4oDi23/Nefw1cP75mfCeEwbg7QzkzbOyA7kH+b6BFM+OQqlGNrs9aVzGilEdvoBlEaABnEd7whxTbTAtoi39T9TWoJL9OUfqy0vLvWx/SPwJHAhmQLPEDGjgTLZd9ZQzAzFwC3ODxbEEBVBiUEAygLcfXyYW/XAcM9lms/WXUy75xQUmR/dsz0fdJ/6I0h/uIB2QvRfSgzuZAZzJVld2MK8Qm3A0EanWIyPDjL3p9tlCYpAMGMB5pL/RFrsad1yliZP1dejY4YKqor07D6HOab/NIP0DCkJI8KyXFtBYsHVDdiAMa8Ep7PEDBq0hWgC+fxFhzgA6O3Q6S/+HRjud9iTccZWu868S5W/6ahfqWvIrhP7a5jz+KmT+USbPM+gSEuSfV/nh/KKK4kOVrqYGqmcpWs+gKKVy3BVJtwbEQNGAcwJKpb/WbJujM7FUHUynmppQbcVxV1HuLmnRj8AAOkp+wRkXECQxA06jzunBTaX5OQX1NTVU1yeTyVFCr97aATePE8aKU9UCAtEE4NN+h0yem8iY2RSP9KcnVXDRz8EdP+5GP1/y237n+lfB9g88Z2CLty8g94fPsytLj7rOnmmmeqbUBgZFq3UzkScxSAEMgOCdJ+4VQ3+x/a9ba3fQnfOHY8eVpUWuvB+/2OMl/aHff4CCMON2CQNwoY5eAU1Fe3fm0fYFyBSRKD4u1jlp2bo02lpAoGkAvPQfOjUtkWHZVKWBbtpvXU01OnYg9zDqWvTTDNI/KLQAoUpQ7BWwf8u3e6uOlbTgrE6a0HKmLe5ojSiHBAPGCUikP1/0Y+9zxTxcRkkTra0tnPQ/2rL3+093oe5Lfon0B+dboNGd619xe/kCmgRfAM7irC4pLKEdEvQMFGWdY+c/kEy0ADkNLSAA5gJ0lv64bDJaY8jAJb80yyXrqqpQUd7ufEnab4OX9G+b/dgrAdzxPewhDQmekpgBjTnffbyVMzH7mq10TUytkUVGe9wq7uUGRCmcHBAmwLtP3idK//7DRi9L7NNbR3O6CwZuJnFo58Y89POJP3D1AxiYOaOOkGCnXgH15aUVNWVFlU0NJ6muEdcHGAyGpMGTZiWijsSgiLBjAKhj2EO0UmvIUPJpv/RUyJrK43jOn5D2213RDyT+BAe8Q4JiElfh7s17cISHtrlisdpR3IAbpIlB4aUBSKR/FPaKxsXEUC355dX/6iq057tORT/etn87kTCA4HEGduoVcHDHj/tqjpe6zp45TXVxGsaCzKwlJWny3ETiCwhLDYBP/NEYzSv5OX8UgdN+q8uOVtVXlFWgrt1+zyCY8huMZoCgBQi9AjA1FeXSDwliYIe3vU//eYhCSJA2AxDj/pOWPZreKyHOGalSU1XKcNrv/s3f7ECd4/5S279t9mMvg/c/+BuHNhZs+W5P1bFiPiRIc4WROhNS6XQZVySN9Ht6cCBoALz0V+lNi1R6M9Wz4mps4It+inN3FXaj/kPabxDSrHUvSxODhI5BPGPHEZ7jh/IP81oAxXOnkEeiWGestu+gEZP9rQXIKEt/vuhnzPwHk+2BUPJbW4NK9+ccQN13++U7/pADBQgueDcOFSMC+Zu/yaoLgF4BKqMZaRl+oKhf+wbS1gBIyW/MaoOZbuIP7vWP88T3bfwy+2ds/zYEob+ghJcW0Kk+AEd6Ko4eKD1ZX0t1jVFKNeqdEO+cmPmokB7sl8QgWgxAlP63zF58o4Vlk6K1ekS76OfQzo3ZqHM7KReSFP2A9A8ZLaBTfQD33Pd4MgPp+iuidUak0htn+1MLoKkB8KE/NrbXUsZio7r1uNd/bcXxFk7670HQ6z+U0d0swYbi3F2H6iqPu/C8R5rnUKHSIIfdnsSZxKOQnxKDaGoAkUl33Okp+dWbqJ6KuqoKVLIvK19yKLp0+5217iXw/AcxeZ5fp4nCLgmzx1pAVn0NfV+AwcwivdkyB/mpSEhG6fLzoT/nldeutVEu+RV6/ef+8HkWOkfJL1yhEAkIdtYCxMahR7K37q+pOEa9SjBKa0RGsyXlxokz/dI3kBYDUPS7aaRVqzOkRutZqqcCT5CtLjly/l7/cIOCnmY++pL3LEFxiAh+/uWH9x+qpxwSxOSwO1DMFdcIY8V9agbIKFx+T9HP8DGZTqeTusqFQ0C5Gz7Zhrq2+2om0r+dHBxAaDoDxZZh+zd/sysQQoIKrQlFa7TTOSFpQT5ODKLBABRXDBllVWr1GdEBMOmntGDPEUnar5D1d4pICSj6CTFItABprwD+2eMqQe48FOJ8EJqQy+Wob+8+WiwkkY8Tg2R+vvyk5HdMZj++5FdBVdfC3P7g9u9zUNeS3zMg/UNeCxAyAzs1Di3O3Zl/oq6aur0SbeC0ALXW530D/a0B8CW/USrNLIXeRHWLcdFPZfHhqorCgmIv9R9KfsNHC+iSGIRDglWlRfW0Q4IRctw3MM45YekjPu0b6C8GIHr+J2T+Mg03RJTJKTf8wEU/W749Z6//mY++CKG/0I0JeIcExXFvRXu35wZCSFBjYpHaYFqIfBgS9GdLMF76awzMyrLjxxHCRBFnTjW5SvKyDqPOnn+Y8xde6K5KsGHfxi9z+g8bPexEbXUk7QXKFZH9k9OXJ3//1stfkPX2aEp6hK+b2kVwEC4/R0aOcNJ/PEe9OYrjyMYRbv6vRL7PfxY8wJjj13GEO/4UcYTNgDKOashBkIz6BoQwIsi51HGEW1DHctSLEE5QwRlqGuSfEl03OXdYI8Uh6WOSs3mcnE0X0U75S9sTd1fhx42OJKqMipDUuSEMcvC15G2TbDLm9vUIev2HO6RVgvgcnCCkIec1AvmnXZdbIt1lkruiJK+FAqEePZ/+YgAyQgryIeSowxMrjGnxx1qwVD9NpHwt0QLqUEfiTwv5GWAA4YHunIEnyJlQkcvfQoSVzE/n8yzqqD5FkvsiRz5wBPrTBxDhpeo0E47bjjq8nP6w+aQMoBp11PyD9A9fJtAq0QwxA1CTuyGMGvfn8A7peHMpI4iQUFAyAEHin5bYOWfJhvurDZLAAFxE/a8hf1/q/AMGEJ5agOAMPEEEkptcRA3yb5OONq+1dHc2I3rqnPrLCRhJNhFzVj1xumiImuXzggcvFUvKhBpQt9N+AGGGCHIOleSM6sg5pXFGvf0SQpi6U4ia51w9cHf9GQVQECag7MaxEeFHBtCKOrLAmsl/W1CHdxUYQHgyAMFHFUXOqeCojpTY3/5Cm0QTkJ5TQRNoDzYGIN3gSC/HBvIjAxDUvTbCCARqR+D8AybgOaOCsFJIJL+/J/a4JWdSek7bpOc0WBiA9ILLJBsdQfFhuyUb2S55DwBMINDOqdvrvKJgZAAAAKCnuUMwMAAAABDAKg8wAAAAGAAAAAAGAAAAgAEAAABgAAAAABgAAAAABgAAAIABAAAAYAAAAAAYAAAACGL8vwADAE4ag0JarbF5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_black.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAXUAAAF1CAYAAAAX/XrIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAIGNJREFUeNrt3XtclGXe+PF7mAMDDA46tiioJCQeUhfBA6kRmbaap/KQUiyiBSGiZpkaPY/bQVS0pBQF8/HcKoouJBhqHjZSyfVFaq2k9fx+2dbP51E8my/EcuZ3De2arScOc7jvez5/vLfcNcLvfc3nde0199xINptNApTo75WlPuVntrT67Fxex73nV/b45EJu7K6LWYO2X8wYVXLxzWdKLs1M/OjSa899dPnVFzb974sTS8Rft4lf7xD//a5Lb8bvFr/v0wtZT5SJf+6g+OcPia/z5dmiVsfF12W+UCqGAFn59MSHlhX7MmLeKByXMvbdR5f0m9xuZ5cRzb4K6el3NqC1rtrgr7FqDZKty0SvnyOFqElam11kmpetq/hrt3+SxNKuL/vX/xej+Pc1vV93Lfwhv7O9Rjb7apj4fqaI7+s98f1tEt/n5+L75bqBqMOjFXzxX2GzilPjn1vaN7vfa+Gl7YY3OuXf2uu63iTZ7BoSZFfTGX7h11hjDe1ivPh4QsvyKQseWfq++PPtEX9OrjeIOlTjE7GLnb1tYtzo93qt7p4WfPR33fVVOhFtncLC3dDg39dK+1P0E02+S3mj24ZVYh5fsLsHUYfclZ/+q98bWyfED8nsujl8dMBJg0Vj9ZR415VRzMVfzKePmNOLYl4rxdz+r5gf6whEHW6zrjwn/IU1Q2dFTWrxhX9br58IeMP4iPm1EHMcNbHFF/PFXPeULwlnnYGow2nyDy8PHbdq8JxOKc2OG4PELtwsWYmx8/iJ+f6upeb6CDHv+WLue8X8WYcg6miQGVuSx0bPCCvzDfP6WctO3O07+WBxHZ4X12PllqQk1ieIOu5pc8WakGeX989qNdx8yh5xduPyZBLXxR75viPMp+b91x+yDorrxvoFUUeNVeXZHQdmRa8zd9NXsRtX7i7+QXH9ZmY9tK5UXE/WNVGHh1ldnhPeN7PrZlOErpqQq4uvuJ5txXV9bX63/L3iOrPeiTpUaseJLZZhSx/LDuhpuOJFyD0m8F3E9Z4nrvtxcf15HRB1qMDEwsTUFqMDThJyAj9YrIMPChJTeV0QdSjMsvLsjl1ntt+lD9JYtbzZiZv422+VFOvipZnt9uzn/J2oQ96e2xA31TLQ7zy7ctR2995HrJeVYt3w+iHqkImyylKfmHldN+tbaq4Tc9SHn1g3zcX6eV2so//hscNEHe6x/HBu+wdnhB7QEHI4OPCTxLo6eCinPa8zog4XeH1P+oDm8U2+J+ZwdtxHinW2Xaw3XndEHc44L98UP8UUa7zsxRufcKFGYr31FutunVh/vA6JOhwgYUPcVO8IXTU7c7h7595JrMMPeFOVqKN+kgrHphqjDVUaduaQ2c69u1iXm8T65HVK1FELqUXJY316Gq6wM4fcd+7RYp0WivXK65ao4zYmb5sY5xtrvEzMoSQmsV5jxLrdKtYvr2OiDiH70KLO5mGNThNzKD3uT4p1/LlYz7yuibpH2l+53ztsRugBiZhDZXGfNj30QKVY37zOibrH6JPTJ1cTpOENUKhWkFjfOWKd83on6qr2wpaUsfpI/VV25/AERqNkixTrvUise17/RF1V1lb8OcQ8POCUZOSFDs+M+/Bh5lMVR9eG0AOirni9Fz6yWjJz1AKYzZL1vXd7r6YLRF2R5u6f38P7YZ8fJZOGFzRw0xupD/c2/li2N7MHnSDqitHxrYjtxBy4S9z9JNtbf+q4nV4QdVl7acf0kdoOhmsEHahd2Du0017b8dFLI+kHUZedkCkPfE7MgfrFfUpayOd0hKjLQsa+eTG6CGM1QQcaFvaIjrrqfZ9kxNAVou42PebH5BNzwLFxnz+rRz59IeoulX+sINA0qMlZgg44J+yDHjedPfb3/EB6Q9SdblRe4jSNxYv7zgEnszTWWPNWjZpGd4i60wSnhn3F7hxw7a49dVzwV/SHqDvU2oqNIYZoU5Vk8uKFBrgh7NGRhqqKQzxmgKg7QHLRi0kai5bjFkAGxzFFeclJdImo11vE7F7FkpHjFkAujN6SbXZ6RDF9Iup11viZFj9w3ALI8DjGV7I982TjH+gUUa+Vdz5bEqXt4HONoAPyDnuHB7TXDuxZEEW3iPodJRZMSiXmgLLiXrAmMZV+EfVbxCwavJygA8o8Z1+UEbOcjhH1Gx6YEVVG0AFl79jTU9vspWdEXbIkhH5H0AF1hD3hyabfEXUP/YOXVv7NzxhruUzQAXWFPba78XLl96V+RN2DLD28tr22re9PvAgAdWp7v/anw/uWtifqHmBu2eJemiADnxAFVC7oPo21bPvcXkRdxV7dNWeAZNYRdMBDmE2SdXdB+gCirkKTtv0pjqADHnjO7iPZtq2fFEfUVWRswcupkknLAgc8OOwFy8d6xIeUVP8HfHr9+HSCDsAe9nWLnk4n6gr2xIqEtwk6gJvDviLzibeJulKDbuQedAC/ZTSoO+zqPHJZl8qRC4C77tjXL1TnUYwK3xSdxpuiAGoV9oL31ffmqbpuWyx5M46gA6hL2Ld9oK7bHVXzB0nf/Q4fLAJQZ2Y/ybo7Xz0fUFLFH2LO/qW9JLOeoAOod9jLitXxSAHF/wGWHt7YXhNkJOgAGiTIorEe3qP8h4Ap+psvrTzkp23biKctAnCIti20P1V+q+zH9io66sbYoMssRACOFPt742Wi7gZNEx78TjLpWIQAHMpklGwJj1sU+xOUFPlNt0mP3UvQATgz7DP++EAZUXeBmEXPLifoAFwR9kUzYpYTdSdKLHgtlaADcGXY/5KdqKhPnSrmG13w2Zoogg7AHWH/rHhBFFF3MG2HxtdYYADcoUML7TWi7kCNn3nwB3bpANy5W38mtvEPRN0BImYPLSboAOQQ9tnJEcVEvQGSi95Mkow8dRGAPBj1kq1oSXISUa+HtRUfhWgsPNMFgLxYTBprxadrQ4h6HRmim1exgADIUXQbQxVRr4Pg1J5fcewCQM7HMKkDg78i6rUwKm/6NMmkZ+EAkDWTt2TLmztqGlG/i41f7QrkHB2AUtjP14/tzw8k6ndgGhR+loUCQEkGRZrOEvXb6D7/mXyOXQAo8Rhmfkr3fKJ+k4x9q2MIOgAlh33fxowYov5PuojAahYGACWLaKmrJupCyJQ+n7NLB6CG3fqUISGfe3TUX9qxcCRBB6CmsO9Y9tJIj426tkNTHqcLQFU6NHfvY3rd9i/u+NaI7ZLJwCIAoLrd+qz4TiUeFfXMsj/3IOgA1Bz2svzMHh4Tde+H7/+RCw9AzR5+wPijR0S998LnV7NLB+AJu/WFqb1Xqzrqayt2hkhmb57tAsAjmI2StWK3a5+97tKom4dHnOJCA/Ako7sHnFRl1FOK3h7LsQsAjzuGMUi2ogUpY1UXdX1k8FUuMABPFBmsv6qqqMcuTl3GLh2AJ+/Wc9L65Koi6vsrj3trghrx5igAjxbkr7FWHtvvrfioh04fcoALCgCSbfrA0AOKjvqCA5ujJKOOiwkAglEn2Q5sXBCl2Kj7D404w4UEgF8N6eR/RpFRn1iSHcebowDwW/Y3TUvemxinuKgbY8MvcwEB4FaxYcbLiop68pZ3x3KWDgB33q1vmZucpJioG3qGXeHCAcCd9WxluKKIqCdsypwsmby5aABwt926XrIVzhqbKvuo67vfX8UFA4B76xasr5J11EflZUxjlw4Atd+t56WPmibbqGs7NOcHSQNAHXRo6tgfVO2wLxS/ad4UyajnIgFAHdg/ZbppZvwU2UXdGNue+9IBoB5i73fcfesO+SLTd64axFk6ANSP/Wx9V/aMQbKJepP4mO+5MABQf/Fdmnwvi6jnHNrenl06ADR8t364ILe926PeetqIg1wQAGi4aY+1PujWqJdWfuPHLh0AHLdbr/yi1M9tUY+a+0IBFwIAHGfuiKgCt0VdE9SYnz0KAA4U5KexuiXqcRvmT5VMRi4CADiQ/Qhmw/S4qS6Pum//Lhe4AADgeP1b+15wadQXH9rRmV06ADhvt35o4+LOLot6u5lj9jB4AHCemX9ot8dlUddYTLxBCgBOFORbvzdM6/GTjd6bzNELADiXyf70xlcTJjs96gGjY08ycABwvtHtAk46Nepbvj1s4ZnpAOAaRq1kO1G6xeK0qPfJeS2XQQOA6+Qk9Ml1WtQN0e34odIA4EI9Aw1XnBL13MN72vMGKQC4lv0N08Mba/9I3lpHvWvmpM0MGABcL3NI180Oj7ouIrSa4QKA60U00VU7NOrZ5bs6SkYDwwUAN7DfBVO+Prujw6IenfXKOgYLAO6TNeKhdQ6Lur5bW+56AQA36tJEf9UhUV9x5NNQjl4AwL2MXpLtyF9WhjY46v2XZ2QxUABwv+WJ/bMaHHXziEdPMUwAcL/hrc2nGhx1yeTDMAFABkxae5YbEPWkLSuTiDoAyCfqW9KTkuod9bAZ48oYJADIx4yeYWX1jrpX6+bXGSIAyEdrX6/r9Yr6ii/2h3ErIwDIS82tjfkrQusc9cGr3p7DAAFAflYmDppT56g3e2HE1wwPAOTnhQ7Nvq5z1DVBTa0MDwDkJ8hbY61T1HPLPwnnVkYAkCf7rY3lH+SG1zrqQ1dnzWJwACBfa8YNnVXrqAenPXuUoQGAfKV1Cj5a66h7hbX4maEBgHyF+Xj9XKuoF33zpVky+TI0AJAx+7n6NzuLzPeM+oSt6+IZGADIX3H6hPh7Rj1q7owChgUA8pfZr+vme0Y9YPQTJxkWAMjf6FYBJ+8ZdY3FzIeOAEABLLpbP4T0m1/kHzsUKBm9GRYAKID94V7HivID7xj1CcXreZMUABSkeMZv3yz9TdR7vffmBwwJAJRjdr/u6+8Y9eC0MXySFAAUZHjIfd/eMer6yA5XGRIAKEcrb+1Pd4w6nyQFAGXRaez5vk3Ul5bvDyfqAKAsBhH18lVLw2+JekpR3lgGBADKs3Vq6phbov5Y7jvZDAcAlGfR4Edzbol6ePrkvQwHAJTnuXatPr8l6o2eGnCa4QCA8nQ3+1y8JeqalkHXGQ4AKI9Z++szYH69DYZnvgCAIt18W2PNf2w89iUP8gIApUZdOFb4y4O9aqKesW93DIMBAOXaNz8j5kbUxxXmpTAUAFCugvHjUm5EvW9O1iKGAgDK9e6AR5fciHqHl9N2MhQAUK5JndvtvhH1ZqOGHWMoAKBcI1oEHr8RddPDD51lKACgXL0C/M7eiLouNKSaoQCAct1v0F27EXXJ14ehAICC+Wt++VTpL1E3GBgKACiYQfrlU6VEHQDUFPXSylN+RB0AlB/1yr2lftKWM6daMRAAUL6zW4taSXnnKjsyDABQvnOb8jpKq86f6cEwAED5zq9d1UPKOX82lmEAgPJdeD/nMSnr4rlBDAMAlO/iwqxBUsbFc6MYBgCoIOpzM0ZJb1w6n8AwAED5Lr31RoI089LFRIYBACqI+uszE6XJXx+fwDAAQPm+mTJ5gvT8gQMvMwwAUL4vx49/UYrbvv0/GQYAKN8nf/xjOjt1AFDTTn3y19+MZxgAoHwnX5meLM34fyefYxgAoHyXZr6eKL1x7mI8wwAAFUT9zVnxUsa5i3yiFABU4GLG3FFS1tkLTzAMAFC2RC+97WLWwkFSztkLsQwEAJQedYPtQu6yWGnVmfPdGAgAKD/q51et7SblVZ7jJx8BgAqifi5vU0ep6PRZfkYpACg+6t62s8UlLaTSU5U+ksHAUABA0VE3/lxZutdHstnEr4k6ACg+6jU9J+oAoHwGSWO7EXWNyd/KUABAufw1GuuNqGtbtb7GUABAuUJ1huobUTdF9z7DUABAuR4xNa68EfXmw+MqGAoAKNezzUP+fiPq7VJf/JihAIByTe0Qsf1G1B/NfHcJQwEA5crpO2jRjaiPyytMYSgAoFyF41JTbkQ9Y/e+GIYCAMq1L2N+zI2of/jNCYuk5wNIAKBEJsnLduLDEsuNqNf8DVEHAMVG/UbL//U3GnNjPlUKAArU2stw/Zao+3TpcYHhAIDyDG8UeOqWqIc8+/xBhgMAyvNaeJfSW6L+6NyFuQwHAJRnad8ns2+JeurGrWMYDgAoz9bUqWNuifqyvx0J4w4YAFAW+50vR5atDbsl6tzWCADKjPpvOn7zL7QteK46AChJd71/1R2jHjwm7ShDAgDlSAtuf/SOUe/91sLVDAkAlGNh74Gr7xj1ifnb4hgSAChHycT0uDtG/cOKby2Sr4lBAYAC/PIgrx2WO0b9l2fAWHgGDAAogEWjs/57w2+JesATo08yLACQv9EBrU7eM+pdX83czLAAQP4yu/bdfM+oT1i3NZ5hAYD8bZ2QHn/PqP/1H5V+vFkKAPJmkrS2yr8e8Ltn1O28Qtr+xNAAQL7aevn+dLt+3zbqLeInfsHQAEC+Jrbo/EWtoz703TWzGBoAyNeaoeNm1TrquZ+Uh0smM/erA4AMmSWdtTzng/BaR73mQ0hNg4g6AMhQS43x+p3afceoN3s65TjDAwD5SWn24PE6R33w26vmMDwAkJ9Vg8fOqXPUV+w7Eir5cL86AMiJ/f70IyvyQ+sc9Zr71Zu3vs4QAUA+wrx8f75bt+8a9bBxM8oYIgDIx4ywnmX1jnryyqIkyY9bGwFADuy3MhYlpyfVO+o1v4FzdQCQBft5+j2bfa/fYH50+CmGCQDuN9zc+lSDo94/Y3kWwwQA91vePzGrwVFfU1YRwhEMALiXSdLZKtZsCWlw1O30bbtVMVQAcJ9uektVbXpdq6hHv5K1jqECgPtkPTRincOinr2rvKNk5AgGANzBfvRSnr2+o8OibqcLjahmuADgehG6JtW1bXWto97txfn5DBcAXG9+tyfzHR71nJ3l4RzBAIBr1Ry95GwId3jU7Qzte15hyADgOj0NgVfq0uk6Rf2x/1yazZABwHWWPjYm22lR//Dz/9OYIxgAcA370cuJLaUWp0XdLiB29EmGDQDONzqg3cm6NrrOUU/MLkiVfHkcLwA4k1nSWwsT/yPV6VG30zQOIuoA4ERBGl9rffpcr6i3GzNzD0MHAOeZ2e4Pe1wW9eztPDYAAJzFJOlt5dl5HV0WdTu/qIHnGT4AON5Av9Dz9W1zvaMeN3/DVMmHN0wBwJHMksG6IW76VJdHveYN0yYtr3MRAMBxWmpM1xvS5QZFvev4eZu5CADgOPO6jtzstqiXfn3aR/LmDVMAcAT7G6SnS4/4uC3qdqFPzzjAxQCAhpse2vdAQ5vc4Kjnbj/cnt06ADR8l344t6C926Nu1yQm/nsuCgDUX3yTLt87oscOiXr6mj0DuL0RAOrHfhvjnvQlA2QTdTtj+9jLXBwAqLtY4/2XHdVih0U9ft6mKZytA0Dd2M/SN8XPnCK7qNvpWkZUc5EAoPYidIHVjuywQ6MeN5tHBwBAbZklb2te3GtTZRv1mh9OHRpdxcUCgHuLNrSocnSDHR71se8UpnK2DgB3Z5IMtsJxs1JkH/Wa3XpYzytcNAC4s56GVlec0V+nRD353aKx7NYB4M679KLkzLGKiXrNfevh3LcOALfTz6fNRWe112lRn5hdEicZ2K0DwL/v0ksmvhenuKjbNeoy7DQXEQB+NaxR59PO7K5To75oy6HO7NYB4Ndd+qFFhZ0VG/Wa560P4XnrAGA3PXTgAWc31+lR33/stF7TKIhPmQLwaEEaf2vl/mN6xUfdrk9aTi7HMAA8+dglp09arit665Ko2+mDI69ycQF4okh98FVXtdZlUR+/YOsYdusAPHGXvnV81hjVRd0uIHL0SS4yAE8yOqD7SVd21qVRX7uzIkTy5tG8ADyDWTJaK9buDlFt1O0eTlq0nGMYAOo/dvG2LeydutrVjXV51GueCxPKc2EAqFusMfyyO/rqlqhn/rmsB7t1AGrepZdl5vfwmKjbdRqZUULYAagx6Bmd/ljirra6Leo1P6g6kB9UDUBdInQtqt3ZVbdG/eVFHw/jbhgAamGWfKwfv7xsmMdG3a51v2kHCTsANQR9WuunDrq7qW6Pes0xTDMeIQBA2SJ1ra7KoaeyiPqcNWW9JAO7dQDK3aWXzcnvRdRvEh2ftU7SczcMAGWx3+2SFZ22Ti4tlU3U7Uxth5xhkQBQkqH+Xc/IqaOyivqHe09YNEYLxzAAFMGiMVlPfPi5hajfxajpedM4hgGghGOXvNGZU+XWUNlF3S64V9pRwg5AzkFPCx58VI79lGXU7QzNo6tYPADkKNrQpkqu7ZRt1Nd+VBGi8eZ8HYC8BGkaW4+uKQ0h6vWQ/GZREscwAORz7GK0FSUvSZJzN2UddbuIobOLJR1hB+D+oM+OSC6WezNlH3W7Jh3jvyfsANwZ9Pgmfb5XQi8VEfWa58NYeEwvAPeI0LWuVkorFRP1BWsOREl6ng8DwLXMkq/1wILiKKLuBImvFaRyDAPAlccuBWOXpCipk4qKut0j8YuXEXYArgj64kdeXaa0Riou6nZtYtP3chQDwJlHLultxuxVYh8VGXW7pg8mfMeOHYAzdugJTR//TqltVGzU7Xxa9LvIIgTgSP18oi4quYuKjnrpodM+WnOHayxEAI7QQdvqWmXptz5E3Y1y1peHa3xaXmdBAmiIlpr7rpfn7ApXehMVH3W7ue+X9dIYePgXgPqxaBpZy+YWy+JnjBL1f0p/Z/cASccdMQDqxiz5WXen5w9QSwtVE3W7F2ftGEnYAdQl6NsmfRCnpg6qKup246YXpkhabnUEcHcmycdWOG6Zoj4t6pFRt3s6bf00duwA7rZDX//0wmlq7J8qo243IGHF2+zYAdxuh75q4LxMtbZPtVG3e8IednbsAG7aoa94IvNtNXdP1VGvOYoZv34aO3YA9h36+qcXq/LIxaOiXvPm6dTCFHbsgCfv0E3WwnErVPemqMdG3W7Sn7bFEXbAM4O+bdJ6Vd22SNT/6dU5uwZodHzyFPAUFo3Zuju9QDUfLCLqtzF3cVkvjTfPigHUrqUm8HrZ3O2q+Og/Ub+HnNXl4Vo/nu4IqFUHbei18pxSxT+ci6jXQenfKn187ut3UfLizhhALUySr62fT8+Lp0v/oejH5xL1BmgamvCdpOUNVEANQU9o+qRif2IRUXegNl3T97JjB5Qd9PQ2ExT5M0WJupM8MmTxMsIOKDPoix+Zs4yOEfVbJE4qSOUoBlAOs+RvLRi7xiM+VETU6+mdJZ9F6fwiqiUv4g7IOeYRuvbVBxbsiaJbRL1WGgc/8wPHMYA8j1ueaTz0BzpF1OssotfsYsIOyCvosyPSi+kTUa+35BeLkjS6II5iADcL0gRai5LzkugSUW+wtRsrQgym6Cp27YA7dud+tmhDZFXF2kMh9IioO1Rwm7SjkoawA64Melrw80fpD1F3mlGJedM0Wo5jAFcct+SNWqX6H2pB1GXgw4++tfhbhp5h1w44Z3c+1L//mRMf/reF3hB1l4qOzVrH/eyA45ilRtas6Lnr6AtRd5s5b5f10hkjr0oa4g40JOaRus5Xy+Z86nHPPyfqMtU6/JWDhB2oX9Bfaf3iQTpC1GXn5ekfD9MZIqo5awdqd3YeoetU/fHLJcPoB1GXtU5dMkoIO3D3oM/q9HoJvSDqipH5dlkPb5+HfyTuwM0xN9ke9u71Y1nm3h50gqgrUu9HFq7mrB2wn52brQt7v7uaLhB1xVvzQUVIQOPRJyWJXTs8c3c+OmDUyYq1R0PoAVFXlZTxxWP0+sirxB2eEvNIsd63inXP65+oq1ps7OJlGg2PGoB6BYn1vVisc17vRN1j7N9f6R0WOv2AJBmJAFTDKNbzNLGuK8X65nVO1D1S1oIDUWb/oWc0HMlA4Uctg/2HnPlMrGde10QdwsQJxfF+xtjLxB1Ki3mMWLdbxPrldUzUcRupyUVJRkN0FXGHnPmJ9Rlt6HmlUKxXXrdEHbXwfGJBqlHfjbhDdjGPEusyL2HTZF6nRB318MdRedMM2g7XiDvcHfO2Yh2uFeuR1yVRhwM8F79pisn48I/EHa6OeW9j7OV1Yv3xOiTqcIKZM3YNat4k/nviDmfHfKRYZyVivfG6I+pwgeW5h9t3aP3KQS/iDgfHPE2sq4NiffE6I+pwg7LSSr+Ho+YW6DRBVgKP+oY8UKyfP4l19D9iPfG6IuqQiXFxeVMtvv0vaPiUKmrBW6yTWLFeVsZtmMrrh6hDzkcziw917tZu5h49u3f8G1+xHgI0FutLYn2UiXXC64WoQ2FSEzZNbhEw+iS7d3blg8U6WMX95UQd6rBjywnLU31ycgMMPa+we/ecXfnvDdFVc8V1Py6uP68Dog6VWpt7uH3frpmbTbqIai928KpiENezrbiur4rrW8YdLEQdnmdVdnnHgQ9lrTPru1UReOWG/EFx/WaK61gqrifrmqgDNTasPBL6bP/lWa3Mw09pxf9113JMI0s+4rrY9RXXaZ64XvtXHA5l/YKo455eea4wJTpsRpmvV+vr7OLdvxtvLq7D8+J6rBDXhfUJoo4GyV9+JGzc4FVzOjZ74WujJsjKLt75u3GLmPMwMe/5Yu57xfxZhyDqcN5RzdLD7V8YumZWZHDaUZNX2M86It/giDcXcxwp5jl/6OpZnyzlTU4QdbjRnqJvzG9M2Bo/pGvm5vCA0ScNGovYzXNkczt6MRd/MZ8+Yk6To+YUrBRzOyzmxzoCUYesbc8/FvjWhOL4gZH/semBJv3/4acN/slLMtjsPCHeRrH7tgvVR159Mjj1q1d6vffBcjGPv238KpD1AaIO1di0tDx8VmrxmGdj3nk/qsWzhwONv79k0JitXpLOZqe0XbedRdPyenSjp04/G56+N73v0uz3xZ/vY/Hn5HqDqMOj7dx4LHBFxr6YN8YVpiQ++m5Ov3aTdnb+3ZNft/KLPmfW3X/NoPG3asVO/1+cEeqbv75R/Pss2vuvtRH//ujfPfX10LZpe159fNnC98T3t0l8n59tPN6c6waiDjjAl6WnfcqLzrb6LO9cx70rzvX4a86Fx3ZlXRy0LePCqJI3LiWUzLyU+NFrl5I2v/y/qcuSjrzyF/HXbeLXO8R/v1P877vF7/tU/P4y8c8dFP/8IfF1vhRf75j4uswXSvX/AXO4pNyLosLqAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB39JREFUWMPFl12MXVUVx39773P2Oefembnz0XamrW21DQIWBOHFoEEMDz4SYyQYSI2JD0WCiSSSqIkPhleNKIaYGOFBY/yIPvlAVEB40ED9ACJNLRTascyUTuncmbnna3/5cPbcmQFU8IWbrOyTe5P7/+21/nutfUQIgffyk2w+PLL6NEMx4rxaYkme5XV1jlkvWFSneJ+fEl4MDywweUMjl27RcuOaXJQHpwgzAxADWJ0LvcWB77844/c+2ZfrJ6b84Nwkb7iwcRCxehm/Pomv5nHhEEFOA47BR+/dAni7jw4pAq5akSufLdXS515Tq1dPA7vRZGgkCgUo/Fxg7UhQK7c4znxJ+Okzgr0/x6ufBdIXxDvJwFvESZKzyflji2rpvlItH52nYB+7mEYzQUIfRQ9BD+gR6OHoYSkw5HL9cC5Pfi0xc7c70u95MfkjoHxHAAHIg55eVK8/8HJy6rjGqFnmmSKnICMjpSAhJ6WAGIECR46JUZCFGmVWj6j2uQetPXhjK6+9H8KF/woQgImQTf8pO//Q6WTlzgHzDAjkGDQCTUGOJieJEIIcyAnk2BgtBQ2JyaDMoBqSlK8eC20+aNTNx7Fh+T8C9INOH9NnvvWXdPnOXSwwQNDHUWAocGRoMjJyUnIUBZJiB4ChoEWHGuoM6gRqCbUkXX3xNq/6w3rq0/cQ2HgLgA6KE/rcsT9mr909YA8DFBM4+ttqmyHIySNAQo6MGfBjgJwG2WioNsUF1EBtyS4/c5dbOPJcO3fTd4SzOwFOpGtXPZYvfSVhJpkhpY+nj2cyrgWWHhZNQha9kCHJdgC0pK6GWkOTQK2iONB4qGqZvfSHL4e19MmgJv8KkHxz/SlkkOqMLj+zqOTR/cyTE8bu3gTpYymwZECGpkBvK4Hv3E+DaDU0atvOPVQOKgNmDnVh8VAiz97V7rnuOcAlE2GQj4Td/bx2ny/YRYGiIESILibwTODHRy1Hjc2YAz1ct3vbQJVCuSkeoHRQ2Q6gbKGeJD39wh2mf/0PgVPJ/VPX1V8sn71hWRZXzNNDI6KpOnMV40wEJscAnhxNEY9ijiULLTRlTLuAalM8Cpc1lBrMFHLp/F617/xNwKkE4HSS3Aoz5EhSQEOsbQdSxEz0YzZ6uGjINIIalG2g2ky9f6vwSMNGCqMMNhLUP0/fCjySAFxUvaM5GQpBEp2ZAikh1pwxSB+YwMfGk1Ag0KGFuux6Xelg1MIoh1ENG50g6ymsa9hQUBaof618aHwKhmJwMCOg4hcJ7HjeBNIxKxNjCEGGQLZVrLuFsom7TbZiLYF11YkPFYwyxOWN+TGAF1MzCoGAcchtod4EoYFebMPa2m7no7oTWVPdui67WBOwJmEoYJVuXROI2ve3+kBdgBD/1zwXJjq8zqHJocm6LljlUGVd1G+OHJptnVCshaELYg7RzYNxBPCAi2GBFmhDZ/IUyESCrnvQGjAWrAPnwbsugt8WIf6pIZCXYhNgMPSLF5w8bMWWoN0eAVrRCTcBSg/CgU67454YjSwLqFto2whjOhi7DcpZ8B7aijA5d3GcgV0j9+LZKvmEE90OLWBEJ9bSrQ1QBlAeggEpYjYDaCvJ67xzf9lCY7pobQdkXQQyYD2UPfz795/c9BZXWvfEicvc3cidaW5jM9MB0iiOg+Ag192xzwDtIG1TVJnDqIkdr4XaQNNCYzsAYzsoO4H94JVPpJsAB5U9sbv0Z4e1PNRXnWgWhTWdsPBdaqwDJaPX4qzRDnQr6DUZlAWMYhOqzBZIbbpsrI/w0/suugMLT49L0G6Ic9eq9ie/W8m/UaVROEASIIniwoG34AP0dDfwdgAY0E1KslmKUbMFUhuoYlaGOebje39Fm700Bnjg5kl3z29Hv9jv3B0rb6gjWQqJA7WZdt+JWwNJ0p22KoFCQgVoD9pC1kK/zhBVvhNg1ELdg0sVfvfCBXdg7lFhaXfcB26YMs83e8SDP32l993LIKUEGWvuojhAP4Om7sZ9JTsPZB4y221QNwq92QdGbdeKywLWaijz0Hzq4EPmxtlnROV2XkiME3x4wfz45d3NR/78QvaFJP4SLDgDzoHWsfZpvG3FqZuFDkCbLgtJnSHrYmv3awYuZbTX7/+1uWbiYWH8uPHtuBOWRoxuPGS+vvaanD15Mr3Ni64ntC0IGRud7sSrBPLtAJs+MJDWkrzKug670cIbLfbI7O/tNeGrorKXQiHe/lIqgLIVy1fsNcer82L93OnkrrqF2RR6GbR13H26bewTTes6H2gDuoW01qjVAqoWt8/9xn5A3CeqjVcRb3Mt/8HjQ5TcgmiMWN6/xx6f9v7v504m964uyUNFHyb7XQaqBAoFlYgeCFs+0C2kI9AjQT6pl93h7OHQq78vGn85iHfxZmSsGB3cb7/dXBSP92fcsWpZ3T68IPclKaQpZBq07PpEGiA1kDZxnQgr2WH3yzSER90BnpHLcXC8m1czAGMEwN/mZv0/vAoP77uajzVL8pPZSB71tVhw0LcBbKD0vXCBGX9SLPinwlA+5af9K1yiEuZ/TNP3+vX830UX5/xBVNUfAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_button_h.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABu9JREFUWMPFV2lsFVUUvrO+ve+9lkJLAwVEKgo/TA1qNEBYGtqCQpBFNBiCaFAD/sHoDyRRYkgkRDAQNUgiNhgEI1tZ2hSrREiEgIpBoYCUrbSF9m0z783uPXPvLEWg4B9f8vXcuTO533e+c+7tDGtZFvo/wTIMg/rDvEIdM7FpTNWsQ+MW1e4b0TBjb/mJWXuKry7YlUy/uiuZWb47eX3VvrKTaxuHb9988InXt/8w5tHdzeP4/taFH4v6+Y1pGlN97vCFT27kO5v+Uk9vuWl1vCQjqRoxqILl2CKeY2Mcy5Sblvy4ZnbOlbQ/PrvZfb1FVVObmptHP93f+ncV8OzRWcLYA0+t6JRv7rxotC/Ls8rQICpCEVSCQiiBAnjcFzBXbMdYyChD5uUluWz3d/t3PvbB4W+fjD2QgPqmJaXXem983aZeXpNn9WFhvChARFEk4JGIZcA4YEcyJjGM70cw4kiwkogzlHJdurBSznR8c2jLpCH3JWDRwfdL/1Y6tl4zUvNCTIKNo1KccRzx+C9ZPOoSCragf48BnBFGSElghJGZ66wvpNsb9m2cXXlPAauOfSn+rl5a32bdmhZDSbxcEpHs43jRmJ29X0SAQvSJssVYmFyNYAQR0qIYMcSkr4w3U2c37tv0RuKuAk7dOv/2aat7LiFN4pyLENQdHAhhAbxrvyPEgzMHkdHClDxEokoFdZ6ts3rPv3NHAbMb11T/ot9YyjJRLooFBO3sYjZx2BaQsLP1l8Kz3bOfMzGZRqFiAVqQAjuhiox+6eTi/SvrJ/QR8ErjBv66Kb98k2WGxWmzOd0ddF0gAHLebT5qOc1cxE8wepgQqkEvKiKOAkJGDHG9qYFGz43Fjavm87aAZT9uCyM2OPy8lJ0rYgKoNYFTYxBAXAjbzsQoWditfcBtPGyzEiLQApgUQ6FRFYkQXJbCpYvTOYUZawvYMGGB3GXpz6TD0cFRO0PH0pgrhrgRpy7Efdn7doQVITW36x7qmzlEBSJOGjsU6M0mzZ6uyW4JrhhmDaJ15Ow6OzX1i4i6DQli/FsOSsCaYY8YslfEvsQFHPM8uS5wyGi/6glIW3wVLMiCjRQ8jd62I0KCPhcE6oKdPZArNOsCTyMlxYQoz5FxnrXvGd3pka4AyQqVEQHEAdY39oOnvRGiQgLUKbvxFKfOAiXGhAWWkMssIYZrGMP9W/mkK8AygzHInsFANPrB+lzhaYkCtGF5I+RlnWd9YEiUGUIq4SghEvGclbOC3jmgiUT9fwCj0kaDNXTocoFA9cE/p/ngCsgzORPUyQSWA4nApDAwdAo1R6CDxbDNYM/r2A34H2DiaPmi5cQInQ+D04orIFJgOnW8mIFh+kFJYd4mxlHDUDJYcxrzUiFWXqCOYCG6IyZIBBiOKECQiMD32FBxyhUQ15g2WAxIdUoOhBq91uhYwShgcjlNHaDzml1XZ9v5RNhCAlRE0Iv4Gaao9IIrYCjDtSBKBBlD1LOEHIi0LMnazhyjgK81XCI1S0TB86a9zejWs088kZwHtgiROAIC7BhE3JDKVldAeYA9EssVuuQMzThLM8wSACFknsemySkqSvJAnICuhy0IIuhBpIrekeyUBwtVI4k0Wzag2RWgSua5h6Kh7yE7p7mc7JzMbethnPVI+0AG96gLICTvFxLwekQSkTisssnShNOugIbl9frgsPBViWF0ZFK03tR2J3vZ13ha3ifUgUzKYsmOC/RAUqgIcCLLIyMeTwllxZ/X7fiw0Od9YNe7045VDxS+wLW3cikiAMjztOnAfnBEl53G87J3mlS1ewgOH8Hrhzw9lmU7WtzYyq21hz5queMb0eiK4LpHkmiv1EtIIfNCmmQOQjSapVd3j1ijZQB3LEdAnu4M2CFZAVkjSluFkSVr7vpKtm75lEzVYHbZkLj1U6YHoVwvsf72xrvd/j4iJLotJSpCIuSoPH4iNHLAW7Wb3+y451vxjo+ntw8pFRYOijAHZCwg3Y3XodvOOQFdyykUvyDaIyZYn8bkORGxxZHWUEViYU3j0jP39V3Q+nVde9nA+PwRFcIaEZldUBIog0aPYeW2HeDaL9M5eLaXQSbH93KVkU+jgxLzph5d/OcDfRkdbxyfOXO89r2SRPSFoRVcA88oPVKKlKWQIv1h7xQH0KS4bCqUzdIyVjm7I5yMzqk/O2fZxFNzuh7408z5nTs35UiiSFgyaGBi8qjRgRXJEma/KKI20zBvGaoh6QQ9lmCd54qZQ8EqYWW8NDFlUEnZopqLNS39fhvezyf0kZNTCz+fnfLrnlM1a5suT6/f3z1j1O7U8wO2pWdGN2Osz8wsWd393MMrrkyf9tpv01a/2Dbp+Pjj1VJ/68LvH9f5eR16/VvHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAAlCAYAAACONvPuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI4QTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0MkE1MjFGODc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2k7HQAAAAKVJREFUeNpiZEAAIyCOAWINIBYDCTBCJRLExcXrFBQUBAUEBNjY2dmZGRkZGVigOrK0tLTEQaq+f//+/9u3b39AbJBklr6+vuqvX78YgKr/I1kDllRhY2NjB9L//v9HkQNL8jAxMTGiS4AAE5TGlIHqhMhi0ckCk6CR5L9///7jlMTpWrySBL1CnrGUSdIg+AYwynBKgsFg8CcTAx5AIwfhtRMgwABg9KLwDJeKlwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAlCAYAAACDKIOpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI4RTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjA1QjI4RDc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+lugQ8wAAADlJREFUeNpiYGBgOMPg7+//nendu3d/mf7//8+ARABlGdDFwMS/f//+Y5XAVEesEuzmYXMBSAwgwAAGDGVWQ3ijRgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAAlCAYAAACONvPuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI5Mjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjA1QjI5MTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+yLs/YAAAAL5JREFUeNq8UTsOwjAMdawqQhE7F0AMXXKU3qPH4CQMHAchRsauZQgdSVpq7KIuVRQJQXiSFfk9f2I9BQAneOPGceU4EtFZCFVV1YMT8N4/u64LTdPc27bdM3conHPDVKUUGGN0WZYbFmvOLyhdEuM4Qt/3FEIAa+2W6+tChAVIa73idxcTAREVP2uEOKaOaOeMqDhzX4h8H2UY+/EpuUXxcQkxPsPO5NjfWJbcGfOT/u3nzCEkkOlDyZ0vAQYApzrDr3PIkEgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxMzc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxMjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+0BG1dwAAABpJREFUeNpiZGBgOCMvL6/5+/fvvwxoACDAAGiOBUKTvH+gAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxNzc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxNjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aFUCMAAAABVJREFUeNpilJKS+sQABEwMUAAQYAASUgFE0B817AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxQjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxQTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vZzRAQAAABpJREFUeNpilJKS+sSABlhZWZkfPnx4HSDAAClOBM5s/AWUAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMTY1NDg1Mjc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMTY1NDg1MTc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Sc/CAgAAAClJREFUeNpiZGBgOCMvL6/5+/fvvwxogAVMsLAwMWABjCCdDDgAQIABALFWBiGZGU1kAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjE4MTIzMjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjE4MTIzMTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+paGDHwAAABhJREFUeNpikJKS+sTEysrKzAAEZwACDAAP1QIhnbQ19QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMTY1NDg1Njc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMTY1NDg1NTc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+8Yt1RQAAACtJREFUeNpilJKS+sSABlhZWZkfPnx4nQXEQJdkYWFhAtGMQHyGAQcACDAAWtgFv4rp/QcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgJJREFUOE9dkzmPUlEYhmcSbbQ2sdBY2NpgqXZWdv4HLZyfYE/ClgkEQtjXAsMmS1gbKkJjKMYCGpZAQAts6AZH8vk9J/dOmDnJm3x5t3vOveeeicjZCc673e6TQCBw6fF4rpxO5xEww6HhOc2chh+kUqmPXq/3t8vlEg2JzgbMcGh48N4veJjNZr+43W7x+Xzi9/slGAxKKBQyYIZDw4OXjF1wPh6PX6l4jSkcDksikZB0Oo3RgBkOzSq6JkOWgsf5fP6bnlGi0ajoFoW1Wq2kXC4brNdrw6HhwUuGLAUv4vH4LwQlJZfLyXa7NYHlcmnAgkPDg5cMWQpeRyKRI1stlUpSLBYlmUzKfD43QRYzHBoevLFY7K9KDgreZjKZm0KhIPV6XZrNpjEtFovbAmY4NDx49b3cqPTGFFSr1b1taLfbstvtTHAymRiw4NDsB5CxCxzD4fBnpVKRVqsltVrNBGazmejRDJhZaHjwkiFrXuJ+v3ereLQLeNucmScBZji7AC8ZsuYzKj7oU36wPQycs9FoSKfTMWCGQ8ODlwxZc5EUzxQX+qmuBoPBsdfrSb/fvwM4tM1mw9YvrIy5SOYqK14qPh0Oh+p0Ov0zGo3+EQLMcKp9V89ny3t7lW3wgzxVvFd8VeQVfQvMcGh4TPh+gX2cR4rnCofinQVmOLQ7v/N/0NkPdZCIgQoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe9JREFUOE9dk7vL0mEUx98Xaqk5aCgaWltsrLamtv4HRft5Q8Ur4v0+NLpLCIFQe4M4a4u/FBcXpwJpaZHoTU7nc/AJfR/4wuF7Ob9zHh+vROTqDNfj8fhBJpN573meHwwGj4AaDg3PeeY8fKfZbL5V849QKCThcPgCcGh48N5ucLfdbr/DFIlEJBqNSjwel0QiYaCGQ8ODl4xrcD2bzZ5p99+Yksmk6LiSy+WkUCgYqOHQ8OAlQ5YG97vd7sdYLCbpdFqy2axwVquV1Ot1w3q9Ng4ND14yZGnwpFQqfUcoFouG7XZrgeVyaeDAOR0vGbI0eJ5KpY6MWq1WpVKp2Mi+71uQQw2HhgevTvNHpQANXmrXm3K5LHrDXJA0Gg1bwR1qODQ8ePP5/I1KL6zBYDD4RWcMupvsdjsLLhYLAwcODQ9eMq5BYDKZfKvVatLpdOwLHHZnV+DuAQ0PXjJk7RL3+31fOx8RGZV9uXG+BKjh0PDgJUPWfkbFm/l8/pXx3BStVkt6vZ6B2n0dD14yZO0hKR4pvM1m4w+Hw2O/32fHC8Ch6ZtgdO+UsYdkT1nxVBE8HA6fptPpz9Fo9JcQoIZT7bN6Qifv/6fswB/koeK1oqT4oPhyAjUcGh4L327g1rmneKwIKF6dQA2HdvF3/gckQc2QEBVViQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApdJREFUeNp0Ul1LVFEU3efeuV/jOMM4Ew5qJgzlRAmOIxKTEP6A/oDRa0+B8ywiKCI++KD0C3zxByT0ZA+BYYw2DmKkWUaWY4JFaOrMvd572uvgiBQdWNxz91lr73X2PmJsbIzqa3R0VJSHh9s3pBz2qtUHvufdRFw3jG3Dtl/dFWKye3Jyd3x8XNY12hVxaGFk5HG5Wl09//37iR4EnaauawD2iOEMHHAvEwghIDaeT0wUDo+P55icNE2TLMsi27YVsEcMZ+CACw20QkopNufnc29KpdemlKZhGARomqaAFQSBgud5Cq4Q7r2envuZwcG3sBLeqlRGLCLT4mqqEn9v5HLU2tVFJCXtrq/T11KJQrUa6bpOolYzockQPUKCpHd6mq9bRvXrfX2UGRi4bG5XKkWCv/ucpO4KGmjxl5Cum0BlAISObJb+Xu3d3eqszhOeF+dwExw4lmlKIxRS1XFH2PzfAsf3ffJJmXKUHyceP1N3466iyuby8j/Cjysr6hwAN9zUdIY4HJzGW1q+He3sZCAOsZPPxSJ5rkvp3l7uoaRt/v++sUGxcPhyOlHWsPYMCX525nIvipXKLZ6VhgSN3My91VX6tLSkqjuOQ42RiEqOcUrbDqCBFlc4bOzoWORq6wH/wCImEovFKJlMKkSjURXDGTjgQgOteki8aWU8PCiXn35ZW8v4JyfqhV5duIre0BDwNLZS2ewzDi0w9vQIW8vn82jIYSSV2r/W1kbnmtbMVi23WhWSEzmJRBBPp3919vcvxtLpOea+ZFSmp6d9MTU1pewVCgX1qBh3GH2M24zmCwMHjPeMIuMd48fMzIxX45cZwkxd7vjs7Oz50NAQiEeMDxfJGi4SnMAhhOg8cyU00P4RYAAZ2RK8jm+p0AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApNJREFUeNpkUt9LU2EY/s7ZOcfNjUltYBmlGPkrNSOL0mCbE+xiXepNBBM0hY3RdXTdH2Db1aDhH9BVGPljwsQIyqWE1cy70FKsyGE7bDs7p/f53CeWBx7OOe95nud9v+e8UjgcZuJKpVLScix24U0+/6ik6z6jXL6EuqKqm5rDkbnldj+5PTX1dXR01BIa+ZhYeTYxcT+zu7tS3N9/IBlGqypJMoBn1PANHHD/MaCCmozFHm7t7U0T2auqKlMUheF+/BnfwAEXGmgly7KklWTy2qt0+rVqmprNZmMCkiTxLsRhlUrlCGVZLt0JBvt7x8ezGKU2u7HxWLMsTal2s9ntrCsQYO19fcw0Tba+vMw+ZTLMVioxwzAwiQZNL2P3YODV8/k+CDVN4wZdg4Osf3j4KNz6piZ+3yQTWT6MDRpo8eYxCgWPOC/G7hkYYP9fPX4/FwueVSyeovJpGDiosyXOzX+bopwwEHkIHpmh4ODz1Ho8erXIie9mZ08YvF9cPPxtxAHX6fXqvBmhcLa5eWt7ba1NdMiSQalcZld8Ph7iKolzFKSTMhLTQIMoYPDrZjD48nku10IRy+hQS2dcn5tjqzMzXIBwHfRnYA5DZreb0ECLI/zwtLQsXB8a+mCSswjK5XIxt9vN4XQ6uQk6gwMuNNDyRaKHc4S7m0tL0ez8fButrSxCExeWqaauzrwaDG60+v1PqfSCsG3b2dlhoVBI55M0Nn6/2NHBiqZZb1QqNfrBgWSRUV1Dg3m+u/t3YGRk4Uxn5zRx04Rvk5OTFWlsbIyPl0gk+FIRLhNuENqxQ9UBdgmfCW8JHwk/I5FIuUSbqSAUrGc0GjXi8TiIecKXqpmzavAHE0KI5IlrQQPtXwEGAI4lFJG9vogeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNp0UzuLmkEUne/zrati4ou1V4JrBAkpbARJsRYhvY1FmqSTsEUgKGhlYb9VBGH/QSBKMGLaECxiJJjOIuLqJoFofD9yzsRPtsnAYYY795y5586MUigUhDby+bxSr9fdvV7v5XK5fLRer88YNxgMX0wmUyMUCpXOz89visXiXuOot8j6SqXypNPpfJ7P5y8Qum80GlWCa8a4xxzmajwFaiKXyxmq1erT4XB4qdPphF6vF5wVRZFJ+/1ebLdbsdls5Oz3+59nMpnX2F8r2FTa7Xa42Wx+AtGEEwVBciqVkgK1Wk2KrFYrCQgtk8nkg1gs1mV51m63+wo+TRaLRdhsNgmKnJ6eSnCtxZnDXHLIpRf3YrFImM1mYbVaBWckiNlsdmwu7ZBIa6r6r23kkEuBu/DlOyiLRCIhvF6vuD3S6bScR6ORgFV5CG7JjdAdClgQ2LHb9E2P/xvcYw4t7XY7dtgir8PhcMxQhYPrRqMhJpMJTxAXFxeSWC6XBd6BsNvtsg+04XQ6pUcKzHw+Xx9XGKEybTBxOp0eT/Z4POLk5ET2gmAl5GBrToGfkUjk7Xg8DkNZ1a6Qo9/vy5lkivIq+RYgsiOHXLb0BhY+INCGr+Op7Hir1ZLgWhvMYS455MqHhEUAeDwYDJ7hH5yhRJWn4S+Iw1/QmrcLBoPdQCBwifAb4LuO5cXj8TnVUOY1NrcgewETylXpGQ3b4vn+ikaj71wu1xVy3wMDiG6VUqkkO5zNZuWjAsLAQ+Ae4DtUfg18BT4CXeAH/4G0ys9xuN8NTmXib+DbQcx2EPjDCklk55F7/M5/BRgAk6YORNXAcuoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnRJREFUeNpcU79rWlEYvc/fGiJaTVPTJYqLPKcQHGuGZtPVxcFIHcx/UJB0qAr9B0SX6tIsri0daouhS0BCpqrgEOzQxkDaQsUnjT7tORefpL1wvNf7fed83z33PuXo6EgYo9FoKKenp/7Ly8vn0+n06d3dXZT7Npvti9Pp/Li3t/cqnU7fZrPZpcFRDAGQLcViMXF9fV2dzWaPTCaTuD8Wi4WwWq2jQCBwfHJy8g4i87UAyNZyufxsOBxWzWazICigKIokL5dLKaDrusTu7u5xoVB4jfhMQVA5OztTm83mBTbsFotFECTn83kpUKvVpMh8PpfA+k8qldo/ODjosk/X+fl5ARXtGMLhcAicl+2KcDgswTX3GGMOc8kh14If/3g8jsMoGeTMI8DA9fn539g3vCGHXAr44Pg2yWw9k8mIUCj0j4GlUknOV1dX9EseB0b7sfWAAk60toC6lL5f+f9hxFiI3pFLAeH1erXJZOLmul6vC3TECtI8Dppp+EBwuN1ujTOrasFg8CtdZ9Lm5qbw+XzC4/GsK3PNPcaYw1xyEJqyg5+4jveDwUBFwESjjPvv9Xpypvsul0uene8AIgtyyOU72MDiSafTedlqtfaNN8DzwmkpwMq8BeMtHB4eXsRisRcIfVZWZjwGkv1+P99ut6MgmoxqxjVSFEKLeDzeVVW1iu23wDfzaDQSiURiij+3W1tbN9FoVMezfQjYNU0z8d7x/vVIJPIrmUx+2NnZeYPcT8B3iOpKLpeT7VUqFfmoABWIARFge+XjDdAHOkAX+MHvQF4pPxKeCxtztM3E38BgJbaxEpiwQxLpPHLXn/NfAQYAVxYSIuMwPrYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjdJREFUeNqEUzuLGlEYvTM+xvcj0ShYWkhYjSAhhRYBSWGXP5FeSRUICFpZWOgfGBDSpwuyGCFgFRaLNUMwXZrg4iYBIb5nzDk3juwuC7lwQL/vnPM97h2l0WgI+9TrdaXf78em0+mbzWbzYrfbZRl3uVxfNE0bZDKZVqVSuW42mwdbo94QO3VdfzmZTC5Xq9VrhJ643W6V4G/GmCOH3JOBoigUu3q93qv5fP4e/5Mej0d4vd5bYIw5csilhlrlcDgo4/H4bDgcXjidTg0VBeFwOISq/mvQsixhmqbYbrcS+/1+Uy6XnxYKBYMMn2EYbzGnxkp+v18iEAjcgh0nh1xqqOUssfV6/Zwt+nw+2SoI93aADk8xaqilwUMkE/acJJVKJRGPx8XNg9nFaDSSHBrilmIIP6CBF0HruPHTrHcPY9iX3A92QBOFWnkdoVBoCWHIbm8wGIjFYiHNeDgOOCISicgR2GU4HF4yR4NlIpH4PpvNcnaSRC6OFXl4XYyzOtsnjxqkVjT4lcvlPmDGM74LJrmP+w4NaYCOLGqoZc/XaO8TAmMm/3fIIZcaauUIwCSdTuuo7MZ3kMXC5Au9Wx0jWNls1kilUjo11Do4a7FYXNEtGAxeIWmC/AiVNFyVelyymUwmf+fz+fNoNPoOoY/Aj3a7bSqtVkvgSxO1Wk0+KoC7eAY8BhLHBq6Ar8BnwAB+djqdHQoIp33v3W53X61WSVwA345m/qPBH3ZIITcP7oEaav8KMADyzRBm/XofAgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqEUj2LGlEUfTOOjhoVTDQrdpai2UKCrRax09YiIihYGPQHBFKKkB+gpNPCbGOzTUgREjSFCCHYJEMghRKL6MImAT9Gos6Yex4+GLbJg4POfefce+69TyqVSkycbrcrXV1dBSaTyfPdbvdkv9/HEXc4HF9dLtf7RCLxslAo3JbL5ZPQKBax0mg0sovF4tXhcAjJssxsNhu/MwzjcrVaXY5Go6fT6fQZcd9QkiPu5LPY3mw2K/P5/No0zRBVRFWmqiqH+MYdOOBCA610Op2k4XAY6/f7nyVJUhVFYQCqwwUOCeGCHY9HDtL8zefzj9PptAaGezwevyCyimpOp5NRvxz4f/cbHHChgRYzCKzX65SwjF9UB8gRd0AVuQOrK2igRYIHNPELq7hYLLJIJMKsZzabsV6vxzlISIMOUPg+ErjImklCGb2jX1ofu3sQgxAcuMHsoOVr9Pv9+na79Ql7nU6H6brOk/FVUdztdjOPx8PEen0+ny7egU52f2ia9gg9o4LX6+VDsx6xGbgADxoK71DyN63jrd1uN0U19ImKViAmHIILDbSI3AaDwY+ZTGaC7P874IALDbS8BcKXZDLZIeuOwWAQpxXJYoVWId2bqVRKi8ViHWigtS2XS5bNZndnJzfxeNyg4T2kSaubzYZ7DoVCRjQa/ZPL5d6Fw+HXFPpA+FmtVg2pUqnw/trtNn9UhBghSYgSLs4GbgjfCJ8IGuFXrVY7YLUKVoX3Xa/Xj61WC8QV4fs52b1zgi0cQojJE/cEDbT/BBgAoZsTVzzPeQgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAApCAYAAAAWNlirAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF1JREFUOI1jqa2tZQCB3NxceyBVBMTGQCzNAhLMycmp+P//fzsDEmABCoJUtjKgAZbv379P5uDgYMKQYGZm1kQXBEuAANB8TAlsgiND4t+/f6OW09/yISaBVZQsHQCsMHUPEsgdpgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAApCAIAAAB7iNSFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjevXqFdP///+ZGBgYUGhi8b9//8gWw4eR3AMAjT9unIbIdHUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAApCAYAAAAWNlirAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF5JREFUOI1jefXq1X8GBoanQHwWiPuA+CAQM7D8/w8SZ5CGYj8grgTiDhYGTNAKxEdgOpAB048fPyZj08HAzMysg00HAwsIYJNAdtXwlfj379+o5fS3fIhJYBUlSwcAax55fnDttN0AAAAASUVORK5CYII=
*/

Added Site/Site_Z/Frameworks/AppKit/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;57;Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.pngu;65;Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow1.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow1.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow3.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow3.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow4.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow4.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow5.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow5.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow7.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow7.pngu;50;Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.pngu;50;Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded0.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded0.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded2.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded2.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded6.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded6.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded8.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded8.pngu;53;Resources/_CPToolbarView/_CPToolbarViewBackground.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewBackground.pngu;67;Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.pngu;58;Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.pngu;56;Resources/_CPWindowView/_CPWindowViewResizeIndicator.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPWindowView/_CPWindowViewResizeIndicator.pngu;27;Resources/action_button.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/action_button.pngu;28;Resources/brightness_bar.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/brightness_bar.pngu;38;Resources/browser-leaf-highlighted.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-leaf-highlighted.pngu;26;Resources/browser-leaf.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-leaf.pngu;36;Resources/browser-resize-control.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-resize-control.pngu;24;Resources/color_well.png64;mhtml:Browser.environment/MHTMLData.txt!Resources/color_well.pngu;31;Resources/CPApplication/New.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/New.pngu;42;Resources/CPApplication/NewHighlighted.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/NewHighlighted.pngu;32;Resources/CPApplication/Open.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/Open.pngu;43;Resources/CPApplication/OpenHighlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/OpenHighlighted.pngu;32;Resources/CPApplication/Save.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/Save.pngu;43;Resources/CPApplication/SaveHighlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/SaveHighlighted.pngu;43;Resources/CPImage/CPImageNameColorPanel.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImage/CPImageNameColorPanel.pngu;54;Resources/CPImage/CPImageNameColorPanelHighlighted.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImage/CPImageNameColorPanelHighlighted.pngu;53;Resources/CPImageView/CPImageViewBottomLeftShadow.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomLeftShadow.pngu;54;Resources/CPImageView/CPImageViewBottomRightShadow.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomRightShadow.pngu;49;Resources/CPImageView/CPImageViewBottomShadow.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomShadow.pngu;47;Resources/CPImageView/CPImageViewLeftShadow.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewLeftShadow.pngu;48;Resources/CPImageView/CPImageViewRightShadow.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewRightShadow.pngu;50;Resources/CPImageView/CPImageViewTopLeftShadow.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopLeftShadow.pngu;51;Resources/CPImageView/CPImageViewTopRightShadow.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopRightShadow.pngu;46;Resources/CPImageView/CPImageViewTopShadow.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopShadow.pngu;42;Resources/CPMenuItem/CPMenuItemOnState.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/CPMenuItem/CPMenuItemOnState.pngu;53;Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/CPMenuItem/CPMenuItemOnStateHighlighted.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.pngu;73;Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gifu;47;Resources/CPSearchField/CPSearchFieldCancel.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldCancel.pngu;54;Resources/CPSearchField/CPSearchFieldCancelPressed.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldCancelPressed.pngu;45;Resources/CPSearchField/CPSearchFieldFind.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldFind.pngu;47;Resources/CPSearchField/CPSearchFieldSearch.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldSearch.pngu;50;Resources/CPShadowView/CPShadowViewHeavyBottom.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottom.pngu;54;Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottomLeft.pngu;55;Resources/CPShadowView/CPShadowViewHeavyBottomRight.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottomRight.pngu;48;Resources/CPShadowView/CPShadowViewHeavyLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyLeft.pngu;49;Resources/CPShadowView/CPShadowViewHeavyRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyRight.pngu;47;Resources/CPShadowView/CPShadowViewHeavyTop.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTop.pngu;51;Resources/CPShadowView/CPShadowViewHeavyTopLeft.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTopLeft.pngu;52;Resources/CPShadowView/CPShadowViewHeavyTopRight.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTopRight.pngu;50;Resources/CPShadowView/CPShadowViewLightBottom.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottom.pngu;54;Resources/CPShadowView/CPShadowViewLightBottomLeft.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottomLeft.pngu;55;Resources/CPShadowView/CPShadowViewLightBottomRight.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottomRight.pngu;48;Resources/CPShadowView/CPShadowViewLightLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightLeft.pngu;49;Resources/CPShadowView/CPShadowViewLightRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightRight.pngu;47;Resources/CPShadowView/CPShadowViewLightTop.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTop.pngu;51;Resources/CPShadowView/CPShadowViewLightTopLeft.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTopLeft.pngu;52;Resources/CPShadowView/CPShadowViewLightTopRight.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTopRight.pngu;47;Resources/CPSplitView/CPSplitViewHorizontal.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSplitView/CPSplitViewHorizontal.pngu;45;Resources/CPSplitView/CPSplitViewVertical.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSplitView/CPSplitViewVertical.pngu;51;Resources/CPTabView/_CPTabLabelBackgroundCenter.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundCenter.pngu;49;Resources/CPTabView/_CPTabLabelBackgroundLeft.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundLeft.pngu;50;Resources/CPTabView/_CPTabLabelBackgroundRight.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundRight.pngu;49;Resources/CPTabView/_CPTabLabelSelectedCenter.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedCenter.pngu;47;Resources/CPTabView/_CPTabLabelSelectedLeft.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedLeft.pngu;48;Resources/CPTabView/_CPTabLabelSelectedRight.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedRight.pngu;46;Resources/CPTabView/_CPTabLabelsViewCenter.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewCenter.pngu;44;Resources/CPTabView/_CPTabLabelsViewLeft.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewLeft.pngu;45;Resources/CPTabView/_CPTabLabelsViewRight.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewRight.pngu;54;Resources/CPTabView/CPTabViewBezelBackgroundCenter.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBackgroundCenter.pngu;44;Resources/CPTabView/CPTabViewBezelBorder.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorder.pngu;48;Resources/CPTabView/CPTabViewBezelBorderLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorderLeft.pngu;49;Resources/CPTabView/CPTabViewBezelBorderRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorderRight.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator0.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator0.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator1.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator1.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator2.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator2.pngu;38;Resources/CPWindow/CPWindowShadow0.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow0.pngu;38;Resources/CPWindow/CPWindowShadow1.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow1.pngu;38;Resources/CPWindow/CPWindowShadow2.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow2.pngu;38;Resources/CPWindow/CPWindowShadow3.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow3.pngu;38;Resources/CPWindow/CPWindowShadow4.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow4.pngu;38;Resources/CPWindow/CPWindowShadow5.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow5.pngu;38;Resources/CPWindow/CPWindowShadow6.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow6.pngu;38;Resources/CPWindow/CPWindowShadow7.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow7.pngu;38;Resources/CPWindow/CPWindowShadow8.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow8.pngu;37;Resources/CPWindowResizeIndicator.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindowResizeIndicator.pngu;19;Resources/empty.png59;mhtml:Browser.environment/MHTMLData.txt!Resources/empty.pngu;31;Resources/FIXME_ImageShadow.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/FIXME_ImageShadow.pngu;25;Resources/GenericFile.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/GenericFile.pngu;34;Resources/HUDTheme/WindowClose.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/HUDTheme/WindowClose.pngu;40;Resources/HUDTheme/WindowCloseActive.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/HUDTheme/WindowCloseActive.pngu;26;Resources/minus_button.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/minus_button.pngu;25;Resources/plus_button.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/plus_button.pngu;27;Resources/slider_button.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/slider_button.pngu;29;Resources/slider_button_h.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/slider_button_h.pngu;37;Resources/standardApplicationIcon.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/standardApplicationIcon.pngu;25;Resources/wheel_black.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_black.pngu;26;Resources/wheel_button.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_button.pngu;28;Resources/wheel_button_h.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_button_h.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground0.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground0.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground1.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground1.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground2.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground2.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground3.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground3.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground4.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground4.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground5.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground5.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground6.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground6.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground7.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground7.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground8.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground8.pngu;59;Resources/CPWindow/Standard/CPWindowStandardCloseButton.png99;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButton.pngu;70;Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.pngu;66;Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.pngu;77;Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png117;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.pngu;62;Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.pngu;73;Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.pngu;62;Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.pngu;73;Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop0.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop0.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop1.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop1.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop2.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop2.png

Added Site/Site_Z/Frameworks/AppKit/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site_Z/Frameworks/AppKit/Browser.environment/dataURLs.txt.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/CommonJS.environment/AppKit.sj.

more than 10,000 changes

Added Site/Site_Z/Frameworks/AppKit/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;15;com.280n.AppKitK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;6;AppKitK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;9;AppKit.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;E;

Added Site/Site_Z/Frameworks/AppKit/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site_Z/Frameworks/AppKit/Resources/AboutPanel.cib.



>
1
280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;K;21;CPCibObjectRecordsKeyD;K;6;CP$UIDd;1;4E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;6E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;7E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;8E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;2;10E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;11E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;12E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;13E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;15E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;17E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;19E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;E;E;S;16;IBCocoaFrameworkd;3;461D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;57E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;15;CibObjectRecordK;8;$classesA;S;15;CibObjectRecordS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;59E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;60E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;61E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;62E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;63E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;64E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;48E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;65E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;66E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;67E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;68E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;69E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;47E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;70E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;71E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;72E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;73E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;74E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;46E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;75E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;76E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;77E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;78E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;79E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;80E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;81E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;44E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;82E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;17E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;39E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;83E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;42E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;84E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;39E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;85E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;40E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;86E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;88E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;89E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;92E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;107E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;112E;K;12;$atext-colorD;K;6;CP$UIDd;3;114E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;121E;K;12;$atext-colorD;K;6;CP$UIDd;3;122E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;123E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;127E;K;12;$atext-colorD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;129E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;12;File's OwnerS;6;WindowS;11;ApplicationS;4;ViewS;10;Image viewS;10;Text fieldD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;17E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;39E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;130E;E;S;18;CPWindowControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;ArrayD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;22;{{72, 57}, {219, 263}}d;1;7S;0;S;13;CPApplicationS;5;$nullS;21;{{0, 26}, {219, 263}}S;20;{{0, 0}, {219, 263}}S;5;$nullD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;d;2;18S;6;normalS;1;1S;24;{{45.5, 16}, {128, 128}}S;20;{{0, 0}, {128, 128}}d;2;37d;1;0D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;131E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;132E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;134E;E;d;1;4S;1;2S;22;{{16, 165}, {187, 25}}S;19;{{0, 0}, {187, 25}}d;2;36D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;S;7;AppNamed;4;3072F;S;1;3S;22;{{16, 194}, {187, 20}}S;19;{{0, 0}, {187, 20}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;S;19;Version XXX (build)S;1;4S;22;{{16, 222}, {187, 22}}S;19;{{0, 0}, {187, 22}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;139E;E;S;9;CopyrightS;6;windowS;7;CPImageS;8;Icon.pngD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;141E;E;E;S;5;Ariald;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;143E;E;d;1;1S;24;{"width":-1,"height":-1}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/Aristo.blend.sj.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLData.txt.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-error.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABmxJREFUeNrUWV1sFFUUPjs7u9vttvRvZ1sMygJCSynRF3kh0UQfePGFxESfTEx80AQlEEKMhtlMlRcl1uATCdF3XnzAmBAf1JgYf6KILaVUoD/Q0h9Kf2a2uzu/njMz226b0s7cO5B4k5O72+6e8333fOfMvXdjjuPARiMWi8FWY6hre/WljKYA/yig9Qb9cOeNyQ3/LvIg8NdDbn5+j5Lt3gGigAth2+EdCQKYtgMPBu8pC3/fhjDEIieF8OWWg0hI2gax4bug6wazr3gyAVmpCRz0N9/PR4yZVP++Drm5Z5ciSQ3gTM+BUSyvpI5lWLEKiLoJktQCDvp92H+HmRgTqWt7O+SWnt1KTmoEe3YOzGKFi1BVy4ZWAtGxISe1IrHdyhwjsdCkru5tl1t78kquLQMmZshcjoDQKjPQ1TKI1hzkspSxvPJgYCQ0sVCk/ny2XW47sAsJNYAx+zBiQqsZ01HKovPQI4bxZkMSC0zqjz05ua0bM9SaAX3mMRGqzZhWxkbqEbMx7uz14MQCkfp1d07O7s8r7a31LiEjBCFq1TfnizCzrEOuPgmdLRmv9Qck5iCx9mwzOBh/enA0EDFhqw/8skuSpa6dSq6lHioz81ChFbRsXEUnkF1dMsA8+iZ0nb/ozn8tGoG/S3EoHsWl+ITDdhwZDexNFnXTTP2cz8q5zp1Ke7NHyCiFl1z22GnY+9obEI/H4enDL8K/+TzYX50LJUVvIeehvQ0zhnjuD22esdijtkk/5SX5qa5nlA6Uiz63AHqJrYZSl36ERklySVmWBcWFBSgdPRy+zHDblkynIInEplDOk0PjhZdGZ3tDyQ/Tq2zHJ3wZu1ylGE5ytZZIJEAURdwJCe4cJ98MflwpIg7CQ7gIX2j5WZgVZ3EZHVXA4ehy5ZkpaMhm17wnkKxd0UY8dYjLYqkpC7+jL5fBRMnwjNIYtuLunlVS4yNgsWx6awbhshwApkxVJcczrKlJN9N0lKG5MnoHBE6fhIsxUw6uqGdcADAzVfnSbN0bx2cP50IRLmZStCIWn1Tg7tgaUg7Jj9OnxZ6p1S7FM4S7o2tIxSbG+bPvZoqlplzp2dxFbd2fAEuvuK1d1zTQp6e4d4YeLmb5ecapFVgaGYHUgR5QsUlw+3NdMtaUSd3Ptl3jHdrIHch2HwDt9q1I/JEPk7Wmouh+NCojHhl9bCQSfxZzTUXV/ahBDFwD9Z+r7hyFP4vnORVF96OxcOU716IaNvNzyoZIut/jGB4uVvlFUFMG+hkuGaAhkAzu1DvTCUjEYhHUFKv8LM94xq1kPXR/8iFI+/fDg+FhGDj7MXQby5x7P55tEq0omsWxUz8oK/Dc697Jd+cLhyDd1ARLx99hv8mlwyZh2oTUIw+Ji7bTN6aVQEikkJfAdrBD6zxyBNLpNNTV1bnzvpdfYfZFOAgP4SJ8oUn1LuuF/oXFvknD5CJWGbzuri6dfGku/XuTixDhIVyEj+U2ST1bMgoDC0tIzIBYMulJ0e+IQW3o5HGY/v6Ku5ml+caxd0P7oLgUn3AQHsJ1Np1QQ1+81Pw+1Xg6lVC6tzWc6IgLYJbLXDXGUkMiSncKe/jgktb3acUo9NZ5hM6UdObLTJUcnVpUwWpsOLE9mQL7CRFzZYvxJgwLbqha3zndLBRSomptcWcS9NpZJYcnlzSwnxCxFUKm7RL63DALZ5KiGuSxKYSIo5Lj66raN4FSEFLYPLD4q7elURr5Jf8Uh+JR3I8ScXX957h/IKgS+8KwCu9pKtiZx5OxlQxRDRW1vi8Nu/BBQlAtCL4JEBjiqhRoQNP6JuxoM7aSIfRL/inOaVFwJbeR8XS/lT+ts6a344Lck8m8v4N2IJwZowzFscvdw9cDxeL5i5ZNV8qL7g2mb6fiwhqwn5kWt/yISML/DlkcA184qmmNhzKZt7oaG0EwTfb9nCjCkK7D78Xi19/YzgXyj5ahQzjti73DeLCr4jCk6LMptDrftqG1IoDLk1pRaoLiq7qPIMxhRfAdJ720fPub41zGl1n/X0t0qetbyQ7oWoygtksI5BLOP/grm/ZXOfBJgnygFdFm/dcbZzPgnX6YmhLWyS/lE0j4C53y50TIBmT78qJEV/zZ8MlVauW3XgSPxM7RKIQai9XMVQt8hVFjds1s17yvtS1JiQzBa0nCJu+Z7mi2eM8nv//z+E+AAQCtbACM76VJFwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-info.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACUpJREFUeNrUWmtsHFcVPrOzMzu768d6/fYmdhLnRZzQNO6DqkEpbSSiqK1IhVSUQqEKCooSUSFVwA9EVX40QuqDgiCVgqCQJiK0qJVKKKSgJii0SkWbhyDOy/Hasb3ep/c17zsznDuZNa6x453ZTSSOdHzvzOy9c757HvfcM2Ysy4K5xDAMLERPH74Ai1AMeYvDG5CXI3fNej7m8Fnkk8inkKegSnrliXUz/flkp+QHl2Ra5ny3eeSdyN8IC9yWrpYQdETC0BgMgBDggPeztgB0sRSd9Koa6S1KyuZUXtyXnJZAUsmfcexryEehDuQalGX+D6jdyD9cHWuJ9XW2QCgUAFExQNQMSIkmqHkJiGkBXVRqAJzfBwHWB0E+CP2xMHx2hR+KorQtPjW97VqisB/nehb50G0FZRpGpbsS+Xdre1sH+7qiYIAPMpIOpekiasO0gRDEb2JrzrISHwJj8Q/iAg7bAOeDJsEPK5Z0wLKu6PLRRO63VyZyu/CnTzpmehtA3dDUNuTDg2uWRKORRpjIK1BUCMiaOaOVBccjk0/5L0Be1CFd1NBcWeiLtUM4yG/55PLkaXz8GPKHtwGUsQ+bn9x/Rz+r4/ChRAlk1bDBeCWCypfRXIsyA3mJQDf6492fWdp1+t/xE/j4W46/3RpQu1798Ptrlrbt72xrQVMzIFMsgYY2ZllQF0JcoBPUuKpDR5MAm+9YySfSuV9fvp4O4uMDdQf11M9P7Vze3bK/LdoMY2huBVFDAUy4FUTQbycQnNjAQxcu4MX41M8c/zpWN1Bf/+mJdaZBftkWbYF4DgGVVTCqNDeDChgfg3w2B5HWKMSW9QLLsouOkw3TXjRqmnev72dPn714CB1wEB+NLDbWt9gPvvry31iDkCPrV/UG02hyuaIMmk5sYavh0YsXYWNUhb1bY3YbHxqqeqyq6ZDJi5BTLRhYubQF5agq1DOLZRQ7X/jLnlV93b/gI60wlSnhyrkzuY2BFGz/XD/wPA+apsG7p4fhjNLhag6OY6GnrRGKqSTEJ1JPHHnmi0dullHcFNTjP/4TjyNH7ty0oWcyK4GCDuyWnvl8I8S62lEwDgj6SSqdheffz7ueJxTkobOJh7PnLlxGAdcd/d52w1OaRHTtyeW9PT3TuI/IimpvpK6FCYVAEATw+Xy2L/n5gG1abkmUcC8UOOjuiK4en0rvwFtvegoUaMPfFJqaIZUvg67rniJZrqRCTyczYwH02jCI63noOkyjHG2RCJCx8d2eQD367O97AwJ/L2Y+IMvqgva7GE3mRBhwklk6RwITWEIMT3OJhgJNDQKmXdaDKF+UrpkrUERTtzd1dkCphEJ41BKlTFGxUytqfrSdQJBoAZ7nK6A8ra0tbHIq+RBevuEOFNHvZwMClGTF3gy9UiKvVPJFu01hjlfLfKKkYm4Ypv6+xTUozMbXGBYDmqp6cuwZTZWZGdO1QZX0mjSlIQt+zpbPtU8ZhrlCI5a9t1g1JHfJMnxKU+mybod2r0TnIEGOLnS/a1CmSSLUTHTi3Z9sTZWInRkEg0EoY8DJlpWa5mNMBmUyUFOkyRWozXteYVG9rKbVZiq2xmkmOpWHpsYGuJ7M1zwfjaJ0oXFb4FzlfqcOPG1gxEMmdvitla+nCzfyQARXj/l0DXPPm5jQwj6l6yWi6RF6fLdqPDCNpUs2qEnco2rVFN0aDI36pV50DYoQ9SrR5bto9aiW6EfpWkaGC6NpGE7jnmfUBsrP+FFTdO9UR1yD0jX1qq4iKJOtKVrZ5jyUsLkeRDWlqRpNDq64B6XIp+VS/iu+ULRmk6krYbYvFXOgKdIHrkEpxfS7xenmlyPhVjzlmp79ivpkITEJqHXgMENp7o6Br4qT70KRj/ExkE8nDDE7/lfXoOInXr+66pHvnDU1eSMtYHr1K5Kdgr0Pr4eVS9phZDILB4+dA669x5s/+f1A5DIQVfn7+Ad/mPJy9DB0uXRIyqc3+sJtQPcsL9ra8+gmeGzroH3yvQezk+aGELx4/JonLfE8C+XsJGhS4ZBTQnRfo8gM/eNX+cRoymdRQKZ9DnLLW+9bD9FoFCJ4DqLtA/eu8zQPHt5R7QoU0hPDybPH3/BceClPDBVUqfCSNJ20VW86ZuiGR1JlW0t0PG2vZyXXc1ALoePF3BRoYv4FJTdRrqVEZmXOHT8AbOBrUX9ggPUFXSe4Pzp8CgNEAB7ctBLePzMMz712EqOp4crsOMzKjXIOCqnrH02eOvKbmqtJlKLrt24OtC59L7psg0DLw+Q2hXgbEIZwwW9BNv6vkpyOP5C/cOKTmRX3Uk2ardHWu3Z8uzm2+kWusR0UjcyYxa0ERAs1oYAfsiPnDSJO78qdeed1J0e+KShf1ZH5n2+9mh+/tF8tJCHg9+HOztrVJTx31Z3pvCyLPojbmZRLgC4VfoCAjrbdt7Mqu3XzgUDKffz28wZ5WPQFxp6L9g2wFpqGqqp11RhNg2hAYU0ZMvEh3VTK3y2cP3aw5Z7HlWr3SsbtN1+kcMPah77EhiMHIrFVjVagGRTlRh2iFnD0nRQQrRGCPI1ZyHCKlLO7xUsn3mse/LI0U3j5+L+Vsbp98228c4dYOvPWm0Lf4LWcQQ42tPcOCE3toJt+OzK6BVfxHTvsAwEtNwZiZuIjLTu6Vx0/dx7fp5mmu2ymGk0xDs+9pgvSGlz9had8XGhfuH1JJ9/UAZZfsAuf1FQowLkgKxqhQOyKLe4/jC6CWkyDlJkYNzXxJfnKSfpBO+sEBcvhGQVVrr1GP8YJJhVm5/TpkTrCsHy3v2P1I0wgvI0TGgb4xigEGtsAr4HhgvhLfubrPCZuYOkyWCoCKWWQs3hLPGOp5eN68tIfMQOmOR09AOoOKNPh2X3zBiZvoHyORirMOUz79N8M0AGgmW5lyO20ZfxCP8MJazEV78OJorimYXw/P2t6Fe+LKFIOTDKKAC9YRBtxqq1p5GnqOvSg4FTEiANQd/oVNuvmUwtlHrawmFlZRJlEpi+dpFpEbpjzHiqciJx3gCSda61ue1wdzI9qAbUBAUdzIRpPnHsh5x47p8BEtSA5YEpOX3EWpgLwlpnfzQJFxTyZWWCZWWZaAc7OGW85AlaErJiVNUt4a9bRwnWg8FdpWvONZmanLHPuz9efb975+lDFfffm9/9O/xFgANbLi7lf3e3qAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-warning.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB/BJREFUeNrUWVtsI1cZ/sbXxB7f4ji+29m1t9lsspulUakglUAUJJQ8AYpEFwkhRBGIF7SVqJBBlZD6lKdIeSgI9gEhIVGVB1SKoFqxquBxoVVp2a2yJI2dbLPO1beZ8cyc4Z9xsl3HdmI7zmZzpE/jM55z/vOf//zf+c4MhyZl9earOIEySfiQIOCEi6XZTU3Temnjc4S/WV1BXi6uV+n3LOFPJ+mU6YQnbYDwpm/sq/zQZ78J/9Wv2aj+OiH92J3SI9ULqIy96hqeHHCE/NTrCvr8fXBf+LyNMTbfKxvNcJLL7yoHvOg+HwPYe9BYARznhCuRgrSZnBY2Pp6hZ/78+CLVAzBNW/CNPmsGdw+askQ37kNTV+jPj+CMJ/T/5+k5m9Yje4+ieU7pkToervHh9BQfoxSSV6kuEljtqnyC/kEZ7sR4ipbhSz2w1YCTyCmeBjvHxyLkQJaiVKQosYfQlDI5moVrOKgbytDz0V7n1Ek4lfGcuxyxe0o0+Dw5Itc5BaZAkzdhsT6A78LTTiKTuSfdqTThuicVAqo5MLVC91gjGC3D6ho8KR/6feEXqM1zj8Gp7kCBmB+4OGkzaasUoC0jKvVR2odK/28D0jKx4bB+a4Ham3uVVr2M1IxjKDHtSTqJD7KAKhqDbw0JmnQf/JAGd3J0gtp//0lbfrShavPuJO1JwhLlzO7ewNmhMEhEXIYnGaSq9opOMifmFO0hHUEhavaeH0s5PSJYlfYjViWobUCm5x/AZs3DmxoPUl+ZTm03Qy8URZR2vIw3GaAokXKQy/q0fDpBTMMf31rHck7EcKwPX58OwmTiPrXFiEyEZfjPT2JrUbtOt35DWDxVlU4z87PgpUmnlbSdKhGFa3Ld/7974xP8+verD+sVQcW3vxGq76O6BbN1CYGxp23r79+e5zjMnKagNfSdP8nTbOvkIDXkzT9vi3V9G/WD+aVWwSo5DERt4EPJaZ10To0oaGkthK48Y4Zwl8a1Q0tJacgbjrPW9a3XG3NLIYoncqnchS8R1fvVVbztNJy65olfmPINSVDLaySJKEqq2oCBAUf9AUuvN3kOShWqsA6ez8OfGk+R0nipt+zHtKPAq6o254vTOam8SGlUaknb8Yizrm+j3oriZSKNMpFGgtf1b4bsRNsYSwO6jVQm8NTliNOWgyJu0JFCbknb0WA9F+n1lhRP/SjiJqzsfwhdutq1LuzGKUPfDQ1badl9bMzuYcoh6Ktn0oh+CD5MaSgi9ZvDUEIBP9idLuzYKT2JI+NXbGbxHphIya0qh6qG+BAOOMWOUBqkC8UCULwHf01pkC7UzD1QFKwVZtzh6HQgXIFSpL1Hbk4OjyLoFGC11Mzo1yAvHtlGJw2lvA6fdxMD51ITZPc7h4ypAZ1EytB3gwkvWIGiJBWbUvhB0OgQjbpr+aRfqd6OhGLVMtmhDZlUCNn9RSe6sG2ndIoNXkinPI77UCsbNKPyESp8HwpioX6jX+NqHEfaaEf9q8I2HKYVhEbSEa12Sj6GU0SLB0A7IjLBuIlmLwetKhypwOvyKmyv0bl+7aCdJhNpFFYRThhjuk5INxlbA9pS6aTC56LjaaetugS5sn0ohTel9cAenQfQUTuNSEgRCjBXlhC7nLaptPzbUentLL+rvM/zQjQmEDmsEzlUO5ptHZMjVvzkx5/BM6O2jttCkSEX1hEOF+GNBNvShUeqdPq5MJQkcthepFwq1tZ7hyVk38X0hAlakaIsd96eiSWyv4xgYhRbOU1X8W/T7Wq3Kv3aYDI0FRzYhFrcMKi2PXKohyYSk21QLkqVrtrr0VJLm/D1UX49FT9SFx4WKaJQzIXiFqg7OTpVCLW3GqdUVEkEt7OGSNyL1TvI0PB/q3916jRSmdjFaMTNZaGUdmubYqf5QJAkhuuvSXj+ZQE/WhBRrrCu+tHtK6UCbGIWycuxQ3VhK6cMfRdLCpB37xvUSlTUFd5+V8V7S7Xj/Z2shr/cVrvuy1Aau+uk9HfgCXha6sIWRw/Mn5sI28yFLInLUtdR0uHy1x89eL+z6770/FIrlJ/bWYSH+1u+LzQfdOjWr16c8Ue9r6TPFVDN6xutdKw3i8mkA2Wri5ahhqlnPfjWF8ikUD7WG1ONiMMzaIXABkLlHTouA+/Xna4frfz9l9+jIzQ+vPLcYMpTvQN5e7s2Q8cpZMGSiMHk5sFKJISXs8cnHOJ0q9eLsuMi/vXO1hpVR+huqenbJP3TSnx0KOW3rUHa3DtWHLfQ+JXlld5SIfWpFgtwO7JIjCYjK//NZ+juTxsidfO170ZpAu9OfcXpNOc/glIoniqFtxMtM++AKTKCd/4q6Bvx2P77wn2i4BRFe/n8lUGnXVgl6txTDsaHsicUBmlUYCbBm54YtNH4f/78D25wehz05ceNjc2aJFkZ4/sFUuEFSkSl9p3xSS80TpXG63aVUFWUS7ofX/7hDWaZnZ01LS/n+7Pr3ncji9qXPBE7HA4nzkpRTHYsLe5iNV/5t8Ox3U/+CJZ8Pm+2WJjrxs3cm7kN78gtl/WLJq7/zHhFC0rcLj34x63/7L5hsfS5yJ/qQ/az2R3lt27v3FBk+Q+0K5vOilMcxzGL1Vzudzh3uL2UsQQCAZWWX9HKaauOPn7L7Ky9uTlDTpHg4VRiCEFWuGIsFlC5faLg+RWLyeQ12e0ShzNWJMmuMbbDSqWE8sEHr7P/CzAAN77WZZ8SpakAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2rt3L5OVlRXTt2/fmP79+8f0//9/MI2M//79i5WNjY9sxoULFwBPdEPtOkpElQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUeNpi2Lt370yG79+/z2T69u0bA9O/f/8YmP7//w9loRF///7Fw8UphmbohQsXGAACDAAFaUdSlQta6wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUeNpi3Lt3LwsDA4M3EFsBsQDL////faWkpDykpaUZ2NjYGJiAAtbi4uIMf//+Zfj27RsDy79//3iBmAEGQFoYQBguAJJFUUGmAMhK2muhiRnIAqAg/Pz7928GWEAxAWWPPn/+nOHXr19glaAg3Pz69WsWIDYD6uADCDAAuvWepGgKK5MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHtJREFUeNpi3Lt370wGBoYPQHwMiLeyWFlZMfz69Uvg6dOnXs+ePWNi+vbtG8Pfv38ZxMXFGf7//2/N8u/fPwYYALJ5WYCicAEQG10FWQIgK2mvhSZmYAjAAujPnz+gAPoMVgHivHz5EqTiOMuFCxdACj4B8Skg3ggQYACEzZ6gbOTDXgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUCFtjKi0tZbK0tGRiZGQEYxCA0TCAzmdmZsYpB+NLSEgw7d69GwDfyAUd/UzAZgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAINJREFUGFeVjbENwkAQBOf2z+fQEdLJuDIiS9RgiQhEIVT34TdBRPACAd5wtLNr27YFcAVW4Ohmds/MyzzPRAQu6bwsC8MwAOBmdogIXnFJSOqBmf1odKCUsnfjo/IGSil7le72P+XrhiS1cRxxdyQhM3u01pimiczEJd1qrVFrPQH5BFHNEV7zubdvAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIhJREFUGFeVjbENg1AUA89+X1BSRUIKizBPZqAiVSahyhLME/SlvwFNUoUmCAWX1p2tYRjewAuYgEfq+551Xa/Lsow557Ak6rqm6zps35IkAKqqQtIl2eYb22zEVvwQh0VEnN2IiB0iIs4qh7f7yn8btokIbBe3bUvTNJRSkDSleZ4BMvC0ff8ANOUZTP6A0qkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHZJREFUGFe1kDEKgDAMRf8QcoNSaW/mJHgJJ8WDeJSep0P3LqWtyaCgo2DgLT8vCYRCCAxgFSbBU+99d84t3nswMzSYrbWotSLnDGqtGQFXqQHlDrT7MD4GevL/kV92vB+USimGiG7jiDEu+lcN1dhSSiyMIgwn4zCUe/hU7cUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUGFdj2bt3738GBoanQLwAiJtYrKysGH79+iX99OnT6mfPnjGzfPv2jYGRkZFBXFycASiYzPLv3z8GGACyRVn+//8PFwCx0VWQJfD37186aKGJGRgCsAD68+cPKIBeg1WAOC9fvgSpWMBy4cIFkIIXQLwMiGsAfrObQPFrrDEAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUCFtj2Hv8MsOLj78ZHr79QxK+/vw3KRgAe89HUPF0VZwAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiePHxN9PPP4xMDAwMTAz/gZgRiWbAjr/9+o9TDgsGCDAAAzMJ6g6yR1MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABpJREFUeNpifP/1D+OrT39Jwo/f/SEFAwQYAODeRsIBHh3QAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpi2nfi8vuvf5gYwGDQUwABBgCRZQVstXD5TQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiev/1z74Tl5kYwGDQUwABBgCS+gVsJvl2BwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpinrNoJROvgAgTAwMDE8N/IGZEohmw4x+//+OUw4IBAgwAAtMHPgLjCOMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiXLdl97t375gYwGDQUwABBgBZowUZrYKqmQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpinLNopZCQMBMDGAx6CiDAAH9oAlBHNVNpAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpi2Hfi8osPv5kYwGDQUwABBgCHXwVdauGiRQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpievHh174Tl5kYwGDQUwABBgCJfwVeVOih6QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-resize-control.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAKCAYAAAB8OZQwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF1JREFUeNpUT0EOgCAM6/r/MzceoB/UoKEyJihNljVtRwNT3tQAn5T3zomGckO+YcFp1vWAwqPeUAQtRPyg0MCqLzk4/VqaPfDnlvPRRbeXqh5v1lHq/MB5VT0CDACNvzl3e/9MRwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAL1JREFUeNrEkrsKwkAQRWfDsF0kVYrd/7AwPyCKHytiuaUK/kZIQjrRKq+Ndwpb8wJdOGwzZ+7Msqrve5p72DnHuPdgA6IRzgNcwZmRfDDGbK21pLUeNOu6jrIs2+V5HnDXdUkcx9S2LTVNMygrpUjq0zRN2HsfosHkfcWTZJoji7Ncln1/L4s4Z2zx/jj20td+VVUVMvOkfcUL8FMuRVEQGtBnim9IndTDu0nyqSxLBms0XY0IfoI7OL4FGACS4bkP/RnUSQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMNJREFUeNrEkkEKgzAQRdMkZO9CDHizrgpeotDS0t6j4Kq38DiVSHUZRImxfwrtsmpcNPAYGOblEzKbcRxZ6JFFUSjUE9iBdIbzADm4SiRfkiTZa62ZUmrS7Ps+NcYcqqoSchiGLIoi1rYts9ZOypxzRvNlWWbSex93XTf7nQh7V/Io+dtYcsj5s+ycC5NJDEkmb13yahl/Fiw/sXKxEGKRSB5H6q2ua9rZT/MnNEfz8HJKPjdNo8AWl+oZwQbcwfElwADuQbxR1tcjhAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUpJREFUeNqckj1Lw1AUhk/Sq7WU2LpYKRQHPyq4OEiHdhdRHF39Qf4aRZyEDoIVhYLgorgoNv0wFNRU0/Tek3hOanQItE0vPFwI75M3595ovu/DtEscn9QE7ftEmchO4LwTNeJceJ53sFZY2i0u5yGVnB1rOu4g+/jS3Ht6besCESuLuRy0HAD15Y7/VF0Dzj88mxWWjQ+X51YTzYkEV7AnFCpg4i52BCoFUsWX2RNKIUiJwYP65UXeapkZTYuG+UoLK8Xu5nb5LWgmj+T/5vv6zUbX6qzqCRFtkgPo2fbd+lbpVw6aJckyCKQzCzBjEHOpiOx+9yCZNv6y7A2b5bB55/CoSlt11KxhVoUzM7FPm2dGnPK0MWhWtuv2jYQQsa6JPZ3+lKu22YC+04dwhFFwjvPkXQv08MzqNAVRopfOT1D8SdwSpz8CDAB8Kd6AIP4Z1gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqcks9Kw0AQxifJJiaiVMFotBWLXjx59OSTeBJ8CUFR9Og7CD159im8exFUBBWqpkFaa5Q2+yfObKM95JCkAx9Zlu+Xb2d2jTRNYdJi51fXDn6PUXuoegmmjWqhzphS6nRtce6guTQPrs0KyQEX9aewe/jc6VlMSrnvTTlw/9YFLmQhbDMLap4DxBHsh724dJ/oh8Ewoa/PhBR6o2oRx6QQelG1iGMC++Rc6Y2Xxzv4/IjAMIycma7UX25AsNocJSOH8Dj54fYGwtc2mFZ+6pInsLEZw8JKI4N1MtcLKm+mBsH6LNiul4OHPzE47vS/l7hRcnZFW9s7xYPKvOKvZzHJtKlnKcfJlaYtdbKIuEh80zRLg/ik6diRiQ/kot+PIUnoBKpQ5CM/ci0mlTyJv78c1C7+NCgR/I66RB39CjAAFHjbsmAj4HkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUZJREFUeNqckrFKw1AUhk+Sa2wFcaoNLVUpFTs5uugDODo7CX0JQVF09B2ETs4+hAhuOggWO1Q0bUpxENQkvfcknpMYHSom6b38BA7/l//+N9HCMIRplzi7vDbpeUTaI1UzMDapTToVQRCcrNas/bXlChRnzVTS9cfVzlP/4PHZMQQithbLZRi4AOrDTz+qrgH7H3p2i+HSm8+9VaaeSOII5oRCBay8ixmBSoFU+WHmhFIIUmI06N7fwutwANof5pB2ZakOtUYzTiaO4N/ku5sr6HU7oBtiMkmOYX1jE6yVxjccJUuCZTQozC+AVW/CTKE4Afuf7zSf+/EyFyfLOHlreye1a+JVSWdW7tvmzohT3jZGyWrk+17JECLXZ2JOpz/l3LFfwHM9SCr8J/axn7i2wACPR8O+Sdqll1oZgh3SBenwS4ABALu11aydNvk+AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiFJREFUeNqUU1trE0EYPU0n5tLdtcYmaVPabCNaQdOElJbSkL5Ia7F4Af+RbyooBEHQCl4exBfxgljwRSSxoC8WqmJTqmJra6u0SchlszO7zuya1kIa9IPzsN98Z853hrMtpmnif8oX7ve1tJLzJqO3yaVHrwnvTXGMcrQ3IzJGoR5P0M2tLVIrFZ3EMIzTh3s6J/vDIXhc+5qqptNpVEHI/u4I/EqbRBhjyUAwiNUKQEvansS3mZd4/moWSpeKvt5uxAbiAQcny3nNhFajYJQ1xMqXz3hw7w4kfwiSLOPsmXPgG8uEch8Ce1WtpuHWtSsgykEQdxumTk5AUhSL42CUQv+DG5cvoJDPb38L3J++joJuwiW3YzAWhRqJWH3Bc1C+lq4zrK+u4f38PKavXoSm6VYv82IGHz4twHvAj4C/A6PJlNUXEDxOthV+/VyH3BnGRr6Ih3dv4utSDjPPnkDq6ILL7cHE+DgMnon6RoJHKOUqHCE1ghOTp5DJZvFxIYfc4iI8viD36cVYKgmvJFlz9RI8Yinr9oMdPRZFuVLFu7k5gAfP4XTiyKE+9PSq2zM7ZEvZ3r9eA/EEyuUKlr4tQ/G6MTg0sut8h8xAROSEh78rMTSMSrmEaCxu+TQobRhVsXZR06pyKyG7DkdSY7ZCgwww+8GKImHZtZVlVLnXuoVmEHNinvNmCTPY040f3wnHML9U+Ye/ssDxhuPxbwEGAExxWB6CMBpMAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhNJREFUeNqUk01rE1EUht9O70ySaRMT7CQTU2tiYiwxftdU0F/iRsW1exeidNOF/gFRChVEwYJBUIKgWwMiFqwgilgCtUmIbdIkte3MvRPPnWpDqY164YW555znfHDP9N1+WsT/nMmrF0f6+tmtjuCXmeM4GtlukC6RYr1AITji2VNWvdHQrNWWV8ITB8LBa/FICF6V9ax6994U1sG0PbGDMAIDBhNCXPF5NHwu12FzsSv4YfYtXr2ZRSAax7BpYGwsd0jCRrXR7lnxe7WMF4UCBsMx6LqO82fH8cMSBuM0ByXYFbRtC/nHj6AFDTDvAM6dPuEmaK7VoQjOIRNIzUzfQbvd2rpLFfIzWIMKjz+I0cR+RPeZrl1yCqc5bdvBUm0JX+dLePLgPqwN7treFV9j/lsFeshAKODH0cwR1y4lOYI3KzQay/CbI1gh8OXzPMoLJRQJHhyKQtM8yJ08BgedblfEMc5t9yMcjeFMbhzvP35CabGKhcVn8O01aU4dxzNpeH0+N+73kRxzK/96ong8gXXLxpd+eu8OoKgqhiNDiIQjWzFd2K0sqI2uI5VMugkqyyvQVQWj6fQ2fxcWYELwHVkPp1LYmJtDMpGA43RI4o+rKtuu2dwyFEXZ5sxmM5tBDt8B0krLtmsKLchUs9mGZckOnL9Kxsl44qaZcMTN9mpLI12gpOY//JUV0kPS9Z8CDACMI0E9p2np0QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgtJREFUKFOV0V9Ik1EYBvBzNeiyLrsYddGoJYmmIkl0oYktikzFnLN0xpJBXxYtmqE2dY7JliuGRovQTc3J1FolbWGpodUMYQ2K/tk/MRwEFXkRXTyd98A+GOKyix8f3/s+z+HAYQDY/1ivVCk3bFYP8u86Zh+dVnBt3AKHVNoDk8jQHPm9aVcRNqbn3WK24ce2QOQtYkvLePf9T0pSixPbNDqklxlRUGuaZm1DE/GpTz8R/riMsflfq7J472JLQSl2Vp1F6YVOtPofxZnl5jjuvPmRkudhDOq9ZciokLDHaIHv2QdQjzX2hTD66tuq/NFF5B6uwY6SOmTXmNFx+4mYU4819NzDUGxJ2Kc/hd6n8/I/OXSyEeoD1ciuPo8614A8px47dz2I/rlFuMNRKHPysbv8BHzPF8RMutQLVWE5so6asN/kgHf2i5gT6rEzV0fQE/kMy8ADbD+ox9YiLYqlZvEsqvwSZGrrkWdowmV+OOUSqMcktx+emfeC1BVAZuVpcUCaplI8SY6+AWZfSM7IWd5jRlc/uiZfy447+8Q1s6pMoqizepL2CdRjBocXV8ZfJtG2epBraEZhvQ2d4diKPaEeq7XfgDP0IonjfhTFZheaBidW7BKox45Zr8XbgxHYx+bWjPLUY7qWbpvUPQLL8Ayswdl/ohzlea+DVVx0Kzgn95XDGlCO8oq/2QGjSdgwyFQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK9JREFUKJHFkjEKwyAUhuUNuUED0ms4eZ0eo4VS6NwbFHoRz+CQKwRSyewQiJr3l3Rr0dShw4cSvk/lEUopiV8hY0zDXJmeSQX0q98Qn3CRUh6VUnuttcgBDz46CiEc2rYV8zwL730WePDRUYxxx5vXR6w53h46Kgm+UR/jKVupj0sH9Wlwf3x27bTHaZo2Ras/4g+7D8MgSg+AB5+7B24+O+duXdc9rbUiBzz43J0WHcymW5LxdgkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUCFtj6tpwjCnYwZTpzodfTP/+/Qfif0x/gRhM/wWx/0JoOBvGB9JoapD1gsy6eu4kADbzQ5rojOveAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUeNpi6NpwbCbD3Q+/ZzLd+fCLgenfv/8g4h8D018QAWH9BXP/wlhIXITYX6gONMVoRoGNv3ruJANAgAEAzhtGyJPGg6AAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKZJREFUeNpi7NpwjIWBgcEbiK2AWIDl379/vqqyEh7qcpIMnOxsDCz///+3FpcQZ3j5k5Hhz/dfDCAVvJ9/MwJV/2MAAZAAAwjDAFjgL7oAmoq/DH//IgmAOH+BggRU/EU3A1nL378gLX/R3IFqBpoKiLX4HAbxC4Yt+D2HaigTUODz71+/GGAqQQJHXz57yvDrJ0jwPziQN7999ZwFiM2AOvgAAgwA2zedN71ws+cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKdJREFUeNqUkD0KAjEQRr9IWuv1Lt7QG+wttBA8wYoWdhaiNlqsCxbLWsgmmYkZ/4hxQQx8EF7ezCRRo3GRA6hDipCp2tc2v7YGm0OJ7fE06+1qg6pVyAYZvPdDzexhJFBg5n4AjNeSvaYUfBsUA5ISegM57DAi8DCikqcR96C0B3cZzL/Gfkzh9B6EP55Pzgm43L/QWYtzVQqY6/VqIUITsgyZ3AQYACwxo+jE5WFHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjCquZyKRtbM7ExMjEBCWYmMEkkGYGsZmhNIgPZYNomDiSGmS9qkJsTGv2nQIA4IwFK30tWVsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJhJREFUGJVjDKuZyMbAwFAHxAlALM3CxMTUKCQqXiEsLsHAwsrGwMLIyJgsJinDwMzCwgACIBWirGysDDAAEmAAYRQBZnQBFBXMzMwMzMwYWpiRBdBUgDjMmGYwo5nBjF8FM6otYENR3YHVWnwOI+h9IJ/pNS8w9FhZmBmgqpnmvnr1kkGKi4FBVQgSyPV3nrxkA+IooA4JAD9CEUzrpwlHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUGNONjzsOgWEURM+d+fwRpYTEo1UpFXZiA5ZBZQd2oFJZgwXYh8RPWIBHqET8nrecnMyZG4Px9AqsgRkwSd1en/Pp2Nrnm9Fhl1sKkWVl6o02ETFMUgCgrISkWpLE/SSRXAxeCT8C2yTLnwnJz6W2SLYLHX6x+JvFxR3vtf5B/Pe+FZS5IGmnTjWjWYHtNkfSLC2WK4ANMI+I8Q10tBpanttAIQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKNJREFUGFdj6dpwjI2BgaEOiBOAWJrl379/jaqyEhXqcpIMnOxsDCz///9PFpcQZ3j5k5Hhz/dfDCAVop9/MwJV/2MAAZAAAwjDAFjgL7oAmoq/DH//IgmAOH+BggRU/EU3A1nL378gLShm/EM3A00FxFp8DoP4BcMW/J7D9P7r379+iTKzsMAF5r589rRCRFySgYWVFRzI9W9fPWcD4iigAgkAAWSTEqdsRP0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKBJREFUGNOVjzsKwlAQRc+TtwWJ+3MbVlbiKlJZuwrBxs5C1EaRJGiRTvKZ+yz88IyCOOXhzL0zbjpfBOAEpMDY7csmXKuazSFje8wnvV1ZU1SOZJAQQhh6KVArUOOQ1PeSeI4kvHXBp2ExMLzJXsDsqxGBuxGtPIw4w7oZ+mZIv2rfWtS9w/jjfWtbJJ29FGibhkuRISn169USIAdmwOgGxHqjvh+HJ8QAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAIAAAAL5hHIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCB1j7u/vZ87JyWEuKioC44SEBABISgbNtp1KFwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpi7O/vn8mkoqLCwCQhIcHAxMPDw8D05csXBoAAAwBIogYEjN3jQgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUeNpirKysFODm5o5iY2PTZWFhYWIRFhZOAGJNXl5eBqAgA4uQkJCSuLg4Az8/PwMrKysDEzs7+z0uLi4GHh4eMGb6+fPnom/fvl398uULAwgDBBgAx68Ss6bQhHIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi7Ovrm/n3799/P3/+vPz169dlLCoqKgy/fv1i+vz5s/7bt285WSQkJBh+//7NwMXFxQAESiw8PDxggT9//jCws7PfY/ny5QtY4Nu3b1eB5iwBCDAA1UAuSStF1W0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUCB1jrKyslObm5p7GxsbmzcLCwszY09OzS1hY2JWXl5cBKMjAOG/evM8SEhI8/Pz8DKysrAyMS5cu3SUtLe0qKCgIEQCqkAOqmAlU4QFSAQDMoQ//dMukywAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFVJREFUCB1FyjEKwCAMQNHktIUexsMECl27egBvENBB0ASHRIotXfrHx8cQwrrfzOwYY+xIRMvdQVWh1nphjHHNOaH3DqUUx5TSB601YOb/EJEz57w9xYtAc8FdpUUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAwSURBVHjaYjAzM/vP9OvXLwYmBgYGBqb///8jE9jE8CvBawrzhw8fGBn+//8vBRgAxTY3eCgJOmQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAwSURBVHjaYjAzM2tg+vXrFwMTAwMDA9P///+RCWxi+JXgNYX5w4cPDAz////nBQwAi5c260232L8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACESURBVHjarI67CgIxEEXPzE4UH4RtLRYhZBs/QRv/v8yvpDSbsdpGBEH2lOdyuVeAlHO+j+M4qereVPUSY7wuyxJaa2jvPbh7cHcADKD3zooBrOlXoXzwu7KF+GN2i6dqZs3dX6sYUkrHWuvJzM4iMlBKOczzfDOzB/AUdxdgBwRA3gMATndJshnCq34AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACHSURBVHjarI4tDsJAFIS/bl5DENSjVtVwgBoMR+N0HGB1FVhE1SZs6RsMrQBBQjpuvmR+qq7rzu7+GIbh1vf9JZRSmKZp0zRNDCHsDUASQO3utb3NDFnArC8Q+NDvyBrgj9k1ni4dkkYze5ok3L3knK8xxjvAycyObdseUkrbStIOEDAC5TUAKxFgMuA5pPMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAzSURBVHjaYlBTU/vP9Pv3bwYmRkZGBiYGBgYoC0GgiWFTgl8HXIz5xYsXjAz///+XAgwAKVgKjcWlLqMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACGSURBVHjatJAxCsJQEETfrIsJCSkEBeF3gX8BW8HKG3gUwdoz5i5fm5BNYxorEX3lGwaGEXBOKV3btj0CnZvZoa7r0ziOTURg0zQ1QAMgCQOICBZ8ST4Xxht/qfxCfLPU3Z8R8ZCEJFZ9329LKbuqqvaS1gzDsMk5X9z9BtwVEQK619E2DwBfRh57l5xeoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACLSURBVHjatI4xCsJAEEXfDFMsAS9gs6TZA3gAz+YFPEquYKWHsLBMvxATi4QZGwWxEtHX/cf/8KWUEsAwjuOp7/u9zvPMsiyrlNJWVTcqIjxo3L3RZ4oIAOyl8aFQ3vjL5Bfim6cigogQEZOZ3QzA3a+11mPO+SzAzsymtm0vXdcdJCLWgAMTMNwHACs+L3xeMd7tAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACJSURBVHjarI4xCgIxFERfvh+LwC4RFKxDcgFbwcobeBTB2jPuVQLabPK3SiOCIPvKNwwzDrimlO4hhLOIDCoip3EcL7VWP88z0lrzZubNDAAFaK3RUYCefhXCB78ra4g/Ztd4Kqr6NrNXF5sY476UclDVo3NuyzRNu5zzTVUfwNOZmQMGwAOyDACRI0tKhkhIygAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACKSURBVHjarI49CgIxFIQn4VUL5gA2S65gkdKzeQGPkitY6SGEeIfAyhMCebONu4UWgux088H8uJQSzWyqtd5KKWffWkPvfRdCOHrvDwIAJAFgMLNB3maBWMGiL+Dxod+RLcAfs1s8XTtIqoi8hCTM7Kmq13Ec7w7ASUQ0xvjIOV8cyT0AA6AApnkA8SJiRCHFwrsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAA/SURBVHjaZIvBCYBAEMSGKfS0Fdu4fk6saR8TPwsK9wmEEI/jxFUlB2RAJmlNIkPkZA8ftoN/QGp97nUZmO8AYzNFSPGK8tYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAA8SURBVHjaZIuxCYBAAMTC9e7kJOooP/cXFwsFhW8CIYTjvEbmnKRKVGL7aluiJe0aPiyH/yA8CrCjbvcAE+tBokS7K5QAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACLSURBVHjapI5LDoJAEAWrhx7xdwEjYDIJG4+gmHj/JXeRBTLdbowLXBh1+SqpyhMgdd3lVDdNHWMsNYSw21fVAYjjOKJmFhGJ2QwABbDneAGfA3OfgTfF54r539HP4Ken/kU0qOo05Xx3wIEipbQehtumLJdbESno+37Vtu1RVc/AVdxdgAUQAXkMAA50T0Ivt9NcAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACVSURBVHjanI4xDsIwFEOd8CvEgOiKqBSWLO0JEAsnAY7CGXOEzIWpU0q+GVAlyIKoF0uWn+XF+XK9tV13qDf1PsY42JQSACx3TeOstVtREiBhjKlUtRKSAIDJhar41Bv5CsoGWSJaIDNGfweznvLf0QnIOY8i8hRVRc45Pe59dM71AHASkaP3vg0hrAzJNQACGAGk1wAfU2M6/egpmAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUeNpkjMEJACAMA5OM4Syiqzl4obYoWDCPcOEg6GO6zAyKQASiks4kLynpiVJFJPEX54X5DSy4e9sCDABELwjMR/gd5wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNqkkL0KQjEMRpO0OBQq3F4F50JBHV0FJ9/ARxGcfcY+jA79u4ku0kEvGEighy8HGgSA83a3v7pxPBKR1TwOg3On1prJOYOutRqGhgEgImiQkge86wWQCOATUA9k93uC+sRv6QwwQ9on8C8paa2fpZSH/Fhaee9XKaX10tqNUmoBMcYhhHDh5I037sjHFaPlNqKYBBgAFyshPM4kBT4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJRJREFUeNpitLGz///v37/P796+PXrj+rVepj9//jD8//+fV1BIyI6JicmIBUgwgAAjIyMXUCUXCyMDFPz/D6ZYGKEqYACuBS4A1EtABRO6CsKGEiFAhKHoKhgpNxTmW2BQfmNhYfkO1vLn9+8vTx4/OiIvL38TJNkAlClTVVUNvnTpkiAjMMSlgIL/gPgbEH8GCDAA2UIwblDGBeAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACgSURBVHjapI4xCsJAFAUn2Z9m0UbtjCEXSGNrtPIGOYr3ygUshICdYis5glpYKYTNXxuxiIWo5RuY4QmwzPP5apIksyiK+hKG4XQcxwvANk2DqKolCGyrCoAA6HO8gO8C9b4D3hTfVdT/Hf0Mfnrqv4mKyN217c0YYwEkTdPj5XyqBsNRbozpSVmWVVEUctjvNs45K1mWXeu6XgNbIHwMAL4rWK1r13/GAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACcSURBVHjanI4xCsJAFERn118FxNQaCGlN5wFyFPUOXsAL7RWsvISFzXaCsVFWCPw/FhLQNGKmGRjmDTNZb7Zc1vUun+VNjPHiu64DgOmiKBrv/UqMBEg45zIzy4QkAKB3oRk+9Ua+gmGDHCI2QEaM/g5GPeW/oz2gqklEnmJmUNXHrb0ey7I8OQB7EUlVVZ1DCAdHcg7AACQA99cA7LNl9l3/HpoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiEhUVPcOkoqJylklTU/Mei5yc3HumR48eCQIEGABLxgeqlrkYjQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiFhUVTWPW19eXYtLU1HzPJCcn951ZSUlJGSDAADTlBJ4jXpdLAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUeNokiEEKwCAMwGAtFqQWj4p7jN/rF/3BYIdd6mA4mbBADgkSUVhWRNwBYKKIVPk5nHMDY4ycUrpyzua9H7jiXHOWUm5mfkFVn9ZaMDPqvW+fAAMAgxAYEA9uUqQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUeNoMyjEKgCAUBmB7/mBQtjlEeAAHzxV4yo4SGLg1ifZCocYPvsEYs/feqbV2MfMhvfeb1roCmIUQK5xzdykFKaWJiBZYa5+cs6y1yn+8iDGOP6CU4hDC+QkwABcBJR2ZJ8maAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpiZGdnlwTiBhYWFgtmZuY/jKKiojP5+PhkgfgtGxvbDxYBAQEJILgvKSn5iouL6ycLkHMTKPhHWlr6PQ8Pz0/mzs7OT7du3ZL6+vUrz7dv31gBAgwAuQcYxkfD6eQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGNJREFUeNoAVQCq/wQVFRXN/f39BPz8/Mj5+fmAAy0tLTUNDQ3tBAQEGAAAADIEKSkp3fb29gfn5+fyAgICHAQdHR3v9PT0B/f39wcAAAD1AuPj4xHm5uYRBwcH8mpqaq0CDABLliXpqWUbNwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAADRUlEQVRIie2VS28bZRSGn5l4xhPHjY1jN4lrJZAUEhmDuKhkw4oKiajcsgB100WFEF2yYUPX5R+wqFDFIhuKAJWLCAgVIdQFEjtUoTqJExcsFF87GU/GM+PxZxYeOxPLUemmK470ro70nDPvd84Z+D8edkj/IS8Bsi8J6ALCV9fXA8H7wNCHV64sJU5MnVbD2nRYVZKO2665jl1uNOvbH12+nAe8QKH7wiUgtLq6Gj/7+puvLC08sZhJz5BMxEkk4jQaOrWGTumfPfI7m4Wb39z4YWNj4x7QGS4wNgp8/vzFmbOvnrvwwnPPTj+59DhuR1DfNyn+vYfd9hgf11iczxCdmEhEE6lcy3O3iltb9v3gY0Dk4ruX3l4583w8HJlgt1TGMC1sx6UjBLbjYpgW5brO5OQJpmIxRVEjUzd//H5zuPsgXALUS+9/8MzKypmnuiGVfeMAIcSxMg9adGWZ2GT0kWQqY/7+262y7z8AoQBcBtSTM7PLghCWZQ0SjVqN9WtX+fP2H2RzT3PhnfdIJJMAeJ6LqmpMzaSywG16D9zpA4NwRVXDKddzcV1voPVrV2nUKiwsLNCoVfj0k4+P5E3LQlHUJKAGmcOdj0kSmhAghDdImIZOOp1G0zRs26ZSqeB5h3khBF0k1bd5JBxAatm2Y9t2WJYPPyqby2HoOrIso2ka2WwO13WPwB2n1WZotIO2AHSb9f2GaZp4njfQ6mtrpDNzCCFIZ+Y4t/bWkbxpmpgN4x5DoxjsXACdnWL+r5OnZmdD6mHKtAWrb6wRjUQwLYu9Sg03YIth6BS287v0HnLktAig/e0X1+/MP7a0LMtyLBqNAuC5HjvFEqPCMAx2C9t73924vgm4QfioDZV1vdpMn5qfQ5JCiqIcO+e6rlOvVp2vv/rsl6au1wGL3iiOhHcB6tWqu13Il1PJ6biiqlGE6J2/bhfP83BaLQzD4O5Oofzl5+u/lkulMmAOdz58uCTfqnEgCsRefOnl048uLs/H4vFJRQmp7bbn7uu6USzcuXvr55+2AANoAi2G1v/Yq0hvISLAhF9MoTddAmj7sAPfCmcYfBx84H2gSH9B+j+Ljm+BywPe81FF+uqH4Ojf6OHHv8wPry1u2L4DAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABBlJREFUeNq0lctvG1UUxn8zY2emTtI2D5PEdWqnlEo0RKVVoVWRKCAhxCNFVBEPIYHEsgv+ADbddNdtF4CQWCAQSLBgA0tQQYi2Saw09EHVUidxEtuJk9SP8dh3xsPmjDtJG2DDlY6ujo7ud8/57rnf0Xzf5/9akfe/+WO7mCamA0bI98U8oBXyHwTfBlSXWBQwgQ7xdQF0gSbQAJT4ra2XbAUPQDuAGNAJdMluSgWegNaAquy2XBZc8gC4LpnuAHYCvWJ9wC6JB6sF3ANKYutAGahLJa0weJBxDOgBBoEhoE/LZsa09aUxnGqKppOkw8phdc35PYlZP314FtgNLElVCDUK8MPglmSYANJU1wa49tO7YyNDh8eeOkFqb5LhZIKF3FJ6bj6Xnr124+TVS99lGH3+S7p6TXkrT6jxAM84NHFGE467JeO0vzq/r5X54aPxF55Jn3r1JUwrRtVpkM3l8TWNeH8/x44+SQfe0M2LPx7X+pIZzez0AEdMAS3j0MQZQ3juBZK0vEH38vcfTrz24sCjBw6QXcxTrtk4jSatVgun0aRcsymWNkgOJ+ndGTNvXvolbuwdux566Abg6kKJKZn3qhu/Hj1ycH9qV98jFFZKuK67rRVWSgwkhjnyWPKwun7xqDx+t+DpwQcx5TG7VP7O0/GBAWq2jVIKpRSF/DLnz53lg7ff4Py5sxTyy+1YzbZJJJOo5dvH5c06hWZDD3WKCaCq6+moabUPK6X44rOPWVspMDIywtpKgc8/ubAp7msGqraRkuawpKX1cLfoAK7jdBtGBKXcdlNXyxskEgksy6LRaFAoFjfFdd3AdZyYuEaAFQl9ihaA5/uVSqXSbVlW+/Djo09Q3ljHMAxM0+TgwVGUUu14vV7H87HFDTRnk1Y0AOjozBaWlzaV/cqp0+wZTuF5HnuGU4yffnNTvJhfhuiOOQFvt2IkpBU2UIsMpidv3741Fh8cvE+L4/Py66fpisWo2jb54irKvU/LrT9vEk3s/10koSY64wWZN4AKUOo5Nn45O7+4cG1mBle5uMqlXne4O5dj9sYt7s7lqNeddmxmapJc6V6m5/j4pOhMRfBaAXhTFG5VMyIb/Sff+nR6erKcmbqCct1tLTN1hatXZ8rx5975SoBXBacZ/NCw5PoA0d1xYqnRqezkz/HS0vyQoetEIlF0XcexbQrLi8xMTzJfLGX2jJ+5YMaHl4AFoCjq2ARa2ntfz4ZVsTOkigmgt3Dx2yOVv2ZOqOpG2ndVtxaJVqJdu7Pd+w79NvDsxLRkvAgURHrtQBUD8O30vD+k51vXvRAVa/+k50GvK6HGlZYqAytSkRWaRI50RUU4/tdJFL7Ak70uF5hSlRYaBg2x5n+doWyZ7EEFxkPGnBf62Q+d/n8PAPiyIDwt8vw5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAKQWlDQ1BJQ0MgUHJvZmlsZQAAeAGdlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/ul8iYiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD00lEQVRIDdVUX2hTZxQ/Sc29N7G1bdKKjda2SKRNa0mZQ18qooXS4SwWN0TFPbiHMZQN9jK2PW6DPQ3ZHhwIgr4ogjZatQXng30XdIWqUVttMU2bJjc3/+7NTZP9zm1yk7tWEMSHHfjd737fOef3ne9853y2YrFIH0rsH4qYef+/5BvelhYbBDpGDcB2DJ7zJeVLWOE5C8Y1YltvHbycLiaTfvz51+HGhqZBUZR6BcHRmcvpTzRNfRyXoxO//PRDEDYqkAdPAaNF1pCXiKWh4eH2g4OHznX5fAPbvC3kcTeQp7GBluMyLcdkmn8TpulQ6N7fE2Pf3A0GZ8Cq/XcDS1rKxCe+ON23t39fcHeg19PRtp3iiRSFo3F6/jpMG10S1Tqd9FFgF7kb6wdEQXgAv4E7o6NPMVo2MMmh4Hw6nE6nu2/3ngsf9wU8gtNF/zzjoCoiKylizEeWcJJ66tvV40kqyu8gPwarOGh0nMC4g+pS5H/n6a+/Pb7Tt6MzreUpsrRM+Xz+rWC9hivt9vv3n/3u+5PsD3CQhpiRY8b/tZ7mpiNFWw2lM5lVC3xjy1G6dOE8TU89pq6eXjr15Vfk9jQZel3XSRBEcjc3H8XCFYAvWGNldeRM7hJEya/BgZ3KuAzi2FKEOjo6jPHiX3+aOrZJZrLkEMRO+G8EzIDNHyxyPYuowk2FQpEKBS7lVUkpMnm9XpIkiTRNo8jiIsgr+tUU22phLQDMY0g1OefKrqrZpKqqdTU1pg11dfeQIseJ10RRJL+/24i8xEErKyvYVE1jzk5mzqvTwjdcSMTkF+l02nLsTw6P0NbWNoOEx09HPrfo2V6JJ7isjI7FaEh15KzQZl+GJrds9QY2OCqqlFqkoeERqnW5KIWLXliMko4qKksiIdOL0NP7mOcA5jGkwrD6XmRuj14Ltu3wHUHut9XV1RlGeeR35tV8ycU6KIpCM89Dj8ZuXL0FDafG3LU6LbyYQl0vjo/d+G0hvJCMxWJGhBzlemB9ZCGSHB+7fg6+S+wP6IAh5ttS6lC+bTewfXNLS2Do8GdnWtvae1xod4cgkN1uRxUVSM/lKJPN0tyr2anxm9f/iITnH8JnDogDZoea5FgkbMAnkQDeoAVo7T8wONTu29m/qb6hVXAIrpyeyygJeW429Gxy8v7EHdgw6RuAiS1vi4UcyuoNOOHchs0Ab1ZuEE4f5zYGcCqigAJYiDGnNeTGYuU957eCSblBRIBPxu82tzfnlzfJAu/2nsPQkNIdcENwRTmAcoNwP3C58cXxKfgRNF5B/Ftk3cgtFu8x+Rc1XeEgwmSoOwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAa5JREFUeNrcUstqwlAQneTG2DyaaCKUrmxtRDdC6T/5JX6BK7eu3Ll36Qf4C0LWIlQkouZlz4RckRZai6t24HCTO3NmzswdhYh6juN4qqqmQKJpWgzwmQKZECLHfY44yrJMTdNUABpQ0fjydDopjMtvRp7nirTyX2UgiUBotSDDBJw5oEpwEHMAkon5jquCrOm6fq+VlwLSsk/Egsx+PlkFV2S5gG5Z1mNBtm1bj6KIykpMOJWKimplOyxXS5KkijmYwEvhaLfbAX50OHXOKk8OlDgej3dxHBtIYtVqtR5oKjf+0Gq13hqNhgNntNvtlFK+QFXur1ImrBqG4fi+34M6F36SAyNUtpvN5mu9Xg9Xq9X7druNWS23YZpmxXVdH0N6RkJupeCcydLQ/xOCnzgA1ejylCRpKt1gf5T8ZWB4U8KkeSnOQ2JgiD+Tu90u9ft9frrz3eFwoMFgQHjC72Uvl0sKw5C3jjqdDgVBQIvFgtbr9XU9TyaTQrbnebTf72k6nV4/sM1mQ6PRiLDPNBwOC9lXDUzabDYj7DHN5/PfPxVPeDwe/8cNu4n8IcAA4WwjSMEpNj8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNrcUr1qwlAUPkluYjQlUIsVO0iHBMG1L1A6lK7t5tZnEB/CydXF1QdwanHq4EvoUHATHQQxNTZ//c5tIkKhtTi1Bz7uveee7/x89ypE1LBt21FV1QfehBAewKsPvGuaFsAfIY6iKBJhGBqACeQFO5MkURnYKtmeEcexqigKA8dEwVkDBJIYgC3JMAOXIaBl4CCQ4pTIiQk+HRVzIJrAhUidObQWIEgHBAeBFDGZ73nlLrgiyBZwAveVJJumafm+n6SVeD4mJWli8TlZwu3mgyCw4TuDHreSXKlU7qbT6TMuOYggkpp2kEuTKVwV5wJwahhGg0eTZARfVqvV+8Vi8bRer7l1HsMHMeTiqQ4G4s7R5QP2ZS6SCUYILpdKpUfLsl5Wq9XrZrPx+HVYMF3XC6jmgnyDyjyD5OzImSHzNQKvOQit0v7K2DeVjrA/Sv4iGIvjeZ5UNBOJARF/JtfrdWo2m/z2Ox9+H7VaLZrNZt+3PR6PaTKZkOu6VKvVyHEcGo1GNJ/PD5u51+vJVovFohyh3+8fLthyuaROp0Pb7Zba7Tbhtx0mWGaDwYDwXWk4HP7+qbjtbrf7H3/YUeQPAQYATq8uCgYHvXQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc1JREFUeNrcUrtOAkEUvbs7LI9dlleUxAYLCDRU/gCxMLbaGRsbvoQvoKKloqOWcj+AX8AQSgIJISDLPj133SVGE8VQ6SQnM3PnnnvPnBmJiB4Mw6jKsmwBr0KILcCzBdiKojiIe8gjz/OE67oqkALSgoNBEMgMLKV4zfB9X5YkiYFtIGGvAAJFVOQaIRlDxaELKDE4CSQ/InJhQiyBjkmQU6qqXogomIQ0B0kJQHASSB6T+ZxnVsEdQdYAXdO0q5Cs67q22WyCqBPfj0lBVFi83yxguWnHcQz4UAJuQjm1Wu0WGx2HOqpmo1nnRCAL5Pb7fcG27SKKnOXz+UfQlLAzXL1sNpt3s9nseblcsnS+hgUVLjePfFAzmcx5Lpe7R6wMRRQbRuhcrlQqT4VCwZzP5y/r9XrLr8OGgZQBqQaTrpnECJvSp4H7t5Db4gTIp49zTIqHTCeMP0r+YhjelOA0/4qDSQyY+DO50WhQu93mpzvELMuiTqdDeMLvZU8mE5pOp/zrqF6vU7VapfF4TIvF4rg7DwaDUHaxWKTdbkfD4fB4w1arFfV6PcJ/pm63G8o+yrB4jEYjKpVKZJrm75+KHe73+//xh51EfhNgACA6JNNWltjcAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYGBg4GD09/f/z/T+/XsGpn///kGJv3//IrPQuAh1YOLXr18MAAEGAHdlKH321oJgAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARFJREFUeNqEkj1ug0AQhfcvFhC0yLJA2FKKKAUlHUVKUDq3LtK78BmS2r0Ln8c+gC+RLj0U/C+ZsUDCgOORnnal/fTm7c7SpmkIpZQMirbiINbuiSDjwkMeBMHKtu1vzvkazJZXh4Ezgk9RFG00TTsURbEAEWSG8BUMw3ALbseyLElVVbfZWhhp4fu+5zjOJU1TTSk1yid6F5qZprlDEF2nSvSzQpcPBLuM/8LQ+nWY8x7MAVR1XT+EsZo8z39g9e7BrF3x6irLsjO+ArpPqXs67GBKKd9c1z0xxuQj5yKO498kSb667Nilr5uhgAzQHAazNgxjjx3wqPsOo3GDnkFS1/UXy7I+hRDv+JFAzp8AAwCqDI1JAuEnqwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASVJREFUeNqMkT9KxUAQxmdf1iAWqQU7+1whBC8QSO0BLCwFL+AJvIGNlQQClhIs7HMDyxiIGpH8N9n4zXP3WbxncOCD2Z3ffju7I4hon35jhiZIcR6GIa8piqJ1UQRBMG/IeX6ZpinKsuwqTdM3Poi6iuP4B/Y8bwMLIci2bVbetu15kiT32P7SN9FKKUVGcCVAVNf1oWVZd77vn4LZY24LNhqGgbquIynlteu6x+AsvnjFbrukDxw4jnOm3YVkp7+CD8D9BKnNS8kuS4FHH5m+/wOTfuByGxx93z+bfNGZXQE/6qnOi86ofWCaN2YwO2GMnaWqqrpomuaVf2IL1hA7vmOKl0VRPGC7hsZ1G/yXGsyhbBzHp7Isb9Frju1PqDM9fwswACNF1jCNRpSTAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNo8i7kRACAMw4xD2twxCPvvRghPKHChkwoDQKeZNd5NiognBlX15fy2Epv3AUZESZDuXtPqEWAAAbEUmbnlEr0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAENJREFUeNoUy8ENwCAMQ1HLIYJThuhW3X+GFlAaqdiHr3cxANwtIi6eLZrZqzx09yktaUufUjwPsKpMaczMLo1fgAEADawUxddyoEQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbhJREFUeNq0VFtqwlAQnTw0UbCISj+kO9D+dAVxCxZxEYJr6BIEt+EyXINfrS2p0HylKiHmdb09ExILJWkF7cAhgZmcc+fMnShEdE//GLplWY/XIDoej+Fms3l1HMdVVVUoinJk6EhcTC6E8Far1XMURb6maTGIBWtCSJ4lgA+pWq2WpeV6vc7JQ5DGAJOmxL8K4GTk+z71ej2ybbuwBvmP3W53YHIgAnmS2wNIlQWKwMSVSoUmkwlNp1Mqq3Nd95NJ2Ro+PT91Xf9GUQdsyWAwoNFoRN1u90RWFPv9nm1JGCBMsnf2P+1AZxt+BhMPh0PqdDrUaDSYhIrqssNE6JQJBQMdiFyAh1xo0WKxoPl8TtvtNh0uCkstQl7jQTPYdyaGyAkqn6wIy+WSxuMxzWYz8jyPyurq9boppVQgwKB0sJlIalO/33/665o2m820m6IIw/Ady/UCm3zDMA54RpiFyAXO2gPclNIcCO9M03QwihgdxdkWy3RBpCSt3W5b/HIBFAjcBEHgJklyugmZbaS1Wq1LBZjHqNVqt7x36CRAB7mOcpV/URYmBv6AObzFcWyjG+5I/RJgAC85tuyF4bVKAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcdJREFUeNq0lLtOAlEQhucsC1TEcGvgDWgIlc8Ale0GGl6A14DnwNYHUAtiYWJntNdY0GziskT2fvcf3Ni4J5K4nuTPwGH45razgog0+scjhsNhVgYoy7LDbrfb7Pf7V0VRQiFEBMVqmqZ/hoOhb7fb6yRJdpVKxQU4xHWMQMlJAeI4JlVVpXxd128ANwC3AHWhCPcJF6ZwAJkY7DgODQYDqY/neY+QCajFASCHg3AlSMqRVhCGITWbTVosFjQajWg+nxf62bb9BqDHwBzsw8ZoUwKlhQH4bjKZ0HQ6pV6v951t0fF9/wPAAPKRsZ9/jvMgqYre/fjTbDYjTdOo0+lQo9Ggw+FARX75fOxqtRrxk8NCBWz5ewKlhTNYr9e0Wq3INE2q1WoER+kMAKzzMLlwbgtnjjtWxFI4syJtNhsaj8e0XC7JsiyS+SH7M+yAwjt1XCy0hbMHnIMlot/v/7porVbrWI2kRQ+u694i0Hu9XjdhHcwi4CpO3gPDMKS/AXIO2BOqcSCP+89V5NstythkBXO6CILgEo92lH0dni1XEYlut5uV9F77QLuuYJ/RJhtw3o1QtNvtrMy3J7K/g7kH/IXn8CnAADDPYRM6gNQFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc5JREFUeNq0VM1KAmEUvTOOvyCpuHLtTvdt9Q1CcBH4BoLP0Dv4CG19gGoRLYRcRStXZSAuhKZJzSbnv3MmMYiZCrILh0/n3jn33nPnfoqIHMs/mtJoNIJ9EPm+v5rNZpfz+fxeVVVbURQHcDU4/kzued58PB6f2bb9lEgkTBDbeOwikferBHhRUqlUbPGTyeQcMTrIX0BqAg7zAsG3CVCZmKYptVpNptNpZAz8N8vl0iD5NsGG0gAe4KtMEAUSJ5NJ6Xa70uv1JC7OMIwHkL5RGlbPU9O0T0R1QEmazaa0222pVCo7sihbrVZLEFusHISb7W/qzy58jTJ8NRK3Wi0pl8uSz+dJIlFx22LW6NThl0OgA5787wHREg0GA+n3+7JYLMLhIjBWIvjTHCaHTd1ZOZIQDqHFVTYcDmU0Gkmn0wm7iYvL5XIH6/Va5U6Fi8XBonqQh0NW6vX6j4tWKBTCbqLMsqxrLNcFZHpMp9MGzlfMwmIXv94DfCmxPhAeZjKZW8ziFV2+UX9WTl8QBMo+NlktFotHuq6fIokTfBhna4VzKJVKJ3ggfwEsn81m6zh1JHlGB7u7TqlWq8E+b0/IdOU4ztB13TveR+8CDAA4ZHMC9dTxrwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcRJREFUeNq0VEtuwkAM9WQCoQRICK3aErWLSCBRpScox2CPOAg7rsAxWHMVVgguwEd0gYDM9DlNFhVJP4JasjyTxO95nj0RRPRK/2hmrVbztNYGu1LKbDabtu/7bSFE6RoEwnXdNwALrJlEYl2AWWEYvhiGcXMpgSyXy48AilCxwl7zwyiKCGTvlUrlHpGyfL/fk5SS8t6nLqvV6h2DwzWI4ggTu91OQz4yTbOWldhqtWixWMQkyMkncBynwcBwzeCpdNwTRIVTPGQlDodD6nQ6NJvNaL1eE/LjxDOCer3ucQUMnhIkTZeHw8HwPM/PIhgMBhQEAXW7XSoWizSfz1NpvzgUMCP1aUYCrhLJ1Ol0ijgpy3AyYgk59nq9uCfT6fR8TKEhg4lERwGiuOHcCEwT77PHD9/jPS2XSxqNRvEJMu8B65+MqE5kYv15bAUmzMo7wXa7pfF4TJPJ5PuLxkDphoETl+y2bd/mnaDf79Nms/n5JqNCvsECehtYy+PxWEA0Mb4u+vOUR7BarX73q0iBEXldgFuQrQSCdh74n/5FXDGAUgILujcgTQiJSjxmFxNw9dxky7IcVP2M6oN0hq9hHwIMAA2mcW+/QfMYAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc1JREFUeNq0VE1rwkAQnc0mJrFqFKEIllJKWwqV1J5KobdevXirP8WfIP4Pj+q/8SDVYy+iVgTTxCR9o/Fk0g+0A481cee9eTO7EUTUoH8MNZfLXYVhqAJaEAR6oVA4LRaLNSFE/hgC0jTNR6w+CBnBarVyF4vFG4Qv8d6EMB0CmU6nHxRF8UDusRAQwgkB74Zh2EmJrusS8n4WyGazdyBfswMk8BrwH3ASwp3Au7O4RNu2aTweb0Q4EgUsy7phYmDTIuxlKNFcPLi4j0tstVpUqVRoMBjQbDZLFFIRDtoh8SDZxXZPmELCp+M4H9yuuCiVSlQul6larVK/36dut0vYv3+KEC5IFECNyGXUsjXC830/ViCTyRAOwmZtNBq0XC6p1+vtC0gpecAKwOQCQvzsb5SkFEkOsIc0TaPRaETNZpOGw2H8PeDeR70LeAZiqyR4DnBnJTmYz+fUbrep0+l8f9G4mF1RIObh8jxSDMRtkoN6vU7T6fTnm4wKVZ4B+s2/dc/z0lhN2L+Amackgclk8rtPBYg1EGpYDeAEyKH6PNpTSyL/07cIFZsgSoHYBLKo+lrX9VcW4XN8sAC3hdsEnIP8GXg5RuW7+BJgAINQm2YEYuEWAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNq0VLFOwlAUve1rqW1py0AMAWOMsUZi0DgZEzdXRgad+BI2foHPYCT8CosEJgcSoLAgpa3nFlikFQ34kpvb19d3zr3nvFeJiN7oH4di2/ZVFEUKQg3DUCsWi6elUqkqSVLuGARC1/VH5ACAHOF8Pl+ORqP3fD5/ifc6iOmQEIZhPMiy7APcZyJEFAQBL35ks9m7tI2LxYKEEPsJLMu6BfiKOwAR55AX0EkE+SRFUc6SNrquS4PBICbBnnQCx3GuGRgRS4QOOGT2BdlHF/dJGxuNBpXLZer1ejSZTAj7Y82/f4cClQXMFZgI7mL9TZTBhs/ZbOYVCoVE8/g9DgNVKhXqdDrU7XbJ9/3dU4SxBIGMUDbgYiPZCsNnP5IGOiNIGOdarRZ7wiQ7BNCQDZYRDC6BiOcBT1RV5XkiAeuOdRoOh9RsNqnf7yffA9Z+o13IHkhrJol9wAlz0jrwPI9arRa12+2fLxoXsy0KwGwu+5HhME3zJq2Der1O0+l0/01GhQp7AL35WYNRBrKO43sBf57SCMbj8e9+FQBWAaginyBMhA3ZciCopoH/6V+EinUAZQCsIyzo7kKaV0iU43N8MAHLwlnTtHNU/YzqX7aX5BjjS4ABAEDnkWqhfTpFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZJJREFUeNrUlMtrwkAQxiePxiZ48FHTggUvvaZ49uTRiwgW8Spe/XuVHgslB0tTQoIk5rX9JiSQqqXYXuzCZJbZ+e1OJt9GIiJrOBw+ZVlGh5am6Rd/aDL9YVwgLISgIAh+B0uSRJPJhJIkOQ/m7o7HY5pOp9Tr9c6DW60WzWYz6na7tFqtvj39CI7jmBaLBXU6nXwTy7JoNBrl3/VHuN/v02AwoHq9TpqmUaPRoOVySaZpHsHqYWC9XtN8Pj+psH8gksuGj7odRdG767pvvu8H0PcVh3Rdv4bdybJ8cxJGYrLdbl9s23ag6xiJKcIZ5iIMQ99xnI9ms2kahvFQcmoBBpvN5hlJoaIoe4AMJwBzuMhRPM+zd7ud2263HxEyFDxu+QQshAD2gCNVVSP4BD5m4zlXgo1SHhCMC/Xd5zCEr2Mx4hPLZPgUvmoZ1llmAvqPa7WaphZ3l0tMi93zJJ6XUFk6r/FPgu86+NcSLptTNVFswiYqjeXcGNV7JSzKBJ5XQFEYlysBzLgaeAmvGn4KMABFtPy+67Pl0wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZRJREFUeNrslL9OwlAUxs9tSzHKAARSEnbioHQicWF2ZGpA4gN0553cfQM34+ykMTFG4mgbobS0va3fKcU/SKJoYhwk+fgup+d3enpuL4KIjkzTPEmShFYlpXznq1LoB58/CKdpSmEYfg8uFAo0GAyyYW0E8yQty6J+v0+tVmsz2DAMGg6H1Gw2aTQafR2O45hs26Z6vU7VapXa7Tb1er1sBp/CnU6Hut0ulUol0nWdyuVyVqzRaHyAxf8b9ouwtmafrzzPuwyCwMHebiM00TStAplY766FkRi4rnvmOM61EMJXFGWOsMQ6wVY9+L5/UywW91DkEPGtFxjg43g8Po2iyFFVdQJwBgUAY4hPhkCOjq4uoFscmmPEaiq+9jkJlR0AT4CnqD6Fz+AsH2vuJEReiCKsO6wPMhg/KrjosZDsITmAz+GsMFeE63Jx6BIPvpO1jSpzVl49hnNixACLn3uRJiQfEHiK9s+XMP9lZM/3VigQ50pe55ryIBXc/X4Jyzwh5buwuEWO5VoOTXIncBVynwUYAA6xEqaxcbksAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaZJREFUeNrslD1PwnAQxq8vKVIZKAgLA6uDjYyGiU0WQkLCYOJAWPle7n4DN+NsQqIxMcZgwoA0lNLy75vPYfEFNAZNjIMkD9fc/37X6/EUiYiOarXaSRRFtKowDN/FVcn0g88fhOM4Jtd1vwdLkkTNZpOCINgM5u02Gg1qtVpULpc3g3O5HLXbbSqVStTr9T69+xrs+z51Oh0qFAqLJqZpUr1eX/yuX8KVSoWq1SplMhnSNI2y2Sx1u10qFovre/l32C/C6mpCCHFlWdalbdtj+FtHyk6n0wa0L8vy7ocwCr3hcHg2GAyu4WsXhXN2Kq4jz/MeRqPRjWEYe7quHyK/9QIDfOz3+6coGiuKYgOcQR7AAArZD6jRJpPJheM4t/l8/hi5HQVfJhTgYAxgAniqquoUcYbIcnHNkwg0EjCMgEHu4L6DBQzjGzh0WCh2UOwhzhFZIpGPc54igv+dVCq1rSbv7pyVdA8QudBngMXP/VwmhfwngRijwfkSFjw6H74VGgSJote9xrxIGePfL+EwKYj5LiwekXOJlksLeRJEBY9qPQkwAH6xFG4uskBeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNqUUL1qwzAQ1vkfAu7YxU/Sx/BrZOnWtc+QN8iSsdCxe/HYLoVMBmGoQwZjE2PLxJbVO2GBKIU6go87Sd93d98BYyxK0/Rc13UspWTzPGuYnKKdm/9xHIWDYsznwnEoXX9Q863FWPHN9/3VQqUUm6bpXYurqtqFYdh5nrdWLJqm2ZNYZVl2EkJsgyBg/xWgrn3fP3ddx13zmOf5MUmSzyiKHpBwZxZDZMtn2bbtU1mWr3i9GDExFOc8R8IhjmPABW5c170HABJ9DcPwUhTFI1r8QG6LEPBrKrJBBWl7wRJNA4kYEdclSvjDFixwLOipLehJwfZ06/kRYABTY58KWRsFmgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpiZGBg4AgKCvr+7t07hn///sHx379/4TQyGyb/+/dvBoAAAwB0aihkcGml8AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARBJREFUeNqUkbtKxEAUhudkZieERSQIQSFWKSwt04gpxFha+QA+gtY+h4XPYGdlY+Mr2FsETGERMOR+Gf8ZRllWi90fPphJznfOZELsb8jiWMg+V2C26LWiNVEXcyCAtDj2nZZ6ywgmWhNFFEV7YRjeKqXO5nk+HseRdV331jTNa5ZlD1VVfaKuAi2tiIskSc49z7tv2/YQAtPiNE0MTQzYfxRFcZfn+Qvqv7j9JpGm6ZXruo8Qd/u+N8WYblhZ70gpL1GXlWX5rmUnjuN93/ef67qWwzD8Sv+hwzk/xZAnc6NBENzgmEt9zE1CRB6GXRsZnS70xE0DmQkhToyMHOmL2SZocPDzDxdsy0BefgswANTzkXd08tnFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNosyrsNACAMQ8F820gMwv67kQQwEsXpuTAT0YyIISKlqgnL3d+u3w0HP+puBslMQ+0KMACg5xR+0/xvkgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNoMyrENACAIBVEEiVYM4VbuP4OKQRJ/cXnNFSKaZjaY2UVko6WqBzq88KHER5kpqEZEg/0LMACqFRSole+PrAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiMDMz+8/069cvBiYGIGD6//8/MoFNDL8SvKYwf/jwgZERyJICCDAAxTs3eXOW1tsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiMjMz28/069cvBiYGIGD6//8/MoFNDL8SvKYwf/jwgZEByBIGCDAAqR83M1ta/ucAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYGBg2M8EJBjoQTADMSPz////HwMEGABruwTRxWVztwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIZJREFUeNpiZGBgkFZRUckTEBDQYWJi4mIBEmZ8fHz6f//+Zf/z5w8D079///j////PDsQMIMACIoCCDDAAFoDJYhVgYkADhLVQQ4AMa6nhUiYWFpafQIGfMAFmJSUlrs+fPwsBJYQYGRlZGS5dusSuqqpqBxSIACpIYITqZwNiLpAOgAADABBQSostyhMHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiNDMz2//v379vHz58uHLnzp1JLL9+/WJgZGTk4uPj02diYjJjYQCC////gyh2oEp+FigHJsgAF4ABDAEmBjRAWAs1BMiwlhouhZsBlPjJwsLyE6wCGHTfv337dllBQeEuSDIBKBOhqqpqd+nSJXZGoAphoOBfIP4GxL8AAgwAD0RdoB6ph54AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg+M8EJBjoQTADMSPD////pQACDACI0wRH0uIsCAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiiItP+M/069cvBqZ///8zMP0HE//+Qbn/QKz//0Hcf5gSCAJDx39kif8MDBAu85PHjxkZgLJSAAEGAGF5RJzjY1IbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpijotP2M/069cvBqZ///8zMP0HE//+Qbn/QKz//0Hcf5gSCAJDx39kif8MDBAu85PHjxmZgbKPAQIMAEa5RStdv6aRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg2M8EJBjoQTADMSPz////HwMEGABsqwTTd4K/0AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNJREFUeNqkTrEKAjEMTWpKqyCKq+dBh26Cg+vpZ4ij39yPObhiE1MQhzqIGngheXkvCQLAcRhOl13f7621CzLGxG3XHXTgcs5AzOwB0RVmqEE18bN5EdISLNIQbxZpLSx/L/1M/PSpfLHUENF0L2WqpopZCGE9juPKOb9BRAsppWWM8azKqwpuqBdQi7nCK/AhwACtz1AKJyXHLwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJVJREFUeNqcjjEKwkAURF/WDxHBExjYamtv4DmsTO5qThA9QdKJWirJsv9bSEDTiJlmYJg3zAKogADkwEUOZVXGGB9d257r+ujcMAwAq01RbJ1zQdQMzMiyLFfVpZgZAKOLqfKpN/IVTBtmU0QnyIzR38Gsp/bv6AiklHoR6UVVSSk977fryXvfAVQisg8h7JqmWb8GAJDqY/rl9HS9AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUeNpijItP2P/79+9vjx89unLkyOFVTL9+/WIAAi5pGRl9JiYmVZZ///8zMAAxIyMj+79//zhY/oMEGEBiEJrl/79/DMgAogVFAF3F///oWv6haSHDUMICZLn0P6mGwjT8/fv3JwsLy0+wFiDn+7u3by7Ly8s/BkkmAGUiVFVV7S5dusTLCLRFGBSkQPwDiL8DBBgApSFphTgm62sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg+M8EJBjoQTADMSPD////pQACDACI0wRH0uIsCAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJZJREFUeNpiZGBgcLGxsS2WlZOzZmVl5WVhYmIykpaRsQNKcP369YuB5d+/f1wMjIxcf//9YwABFhDxD8qBC/xHF/j3/z+aAIaW/+ha/v2n2FDCAmS59D8JhjKxsLB8//P37zeQJhBmVlRUFP327ZsoOzuHBCMjIxvDpUuXBFVVVYOBKsuAChoYgTYwAhm8oFAHGQEQYABQ6FDZFd6uyQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNpijotP+K+lrV0swC9g9+jRo5dMv379YgACXmkZGTsmJiYjln///zMwADEjIyPXv3//uFj+gwQYQGIQmuX/v38MyACiBUUAXcX//+ha/qFpIcNQwgJkufQ/iYYygTSA8J+/f7+xsLB8ZwJp+f3795c3r18dkpeXv8kIlGwAynxTVFS8u3bt2n2MQFukgIIgg74B8WeAAAMAKAhm4pQzrFgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiZGBgUAGCyQICAtZMTEy8LEDCg4+Pz+7v379cf/78YWD69++fyP///7mAmAEEWEAEUJABBsACMFmsAkwMaICwFmoIkGEtNVzKxMLC8h0o8A0mwKykpMT7+fNnSaCEBCMjIxvDpUuXOFVVVYOBAmVABQ2MUP0cQMwHMhMgwAC+qEtf0TB9pwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiUlNT+8/0+/dvBiZGRkYGJgYggLAQBJoYNiX4dcDFmF+8eMHI/P///1sAAQYAKxcLUpcjeNUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNJREFUeNpiUFNT+8+gqKj4n4mRkZGBiQEIICwEgSaGTQl+HXAx5hcvXjAy/v//XwogwAB2Swj9RrJOegAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiZGBgcJGWli7m5ua2BrJ5WZiYmIw4ODjs/vz5w/X//38Gpn///nEBZUCYgZGRkYEJxADJwAALTIZ4ASYGNEATLdQQIMelLCws34EB9A0kCMLMioqKot++fRNlZ2eXAAqwMVy6dElQVVU1GKiyDKijgRGoHGQALzSgmQACDABfaR58r+agPwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiVFNT+8/AwPD569evR58+fdrL9Pv3b4Y/f/7wcnBw2DExMRkxMTIyMkAB179//7iYYLz///+DaRYkFUQKMDGgAZpooYYAOS4FCYAwMIC+sbCwfAebAQy6Lx8+fDgkLy9/E8RvAMqUqaqqBl+6dEmQEahUCqQIiL+BogMgwAAPLi475A3jcQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiZGBgUJGWlp7Mzc1tDWTzsjAxMXlwcHDY/fnzh+v///8MTP/+/RMBynABMQMjIyMDE4gBkoEBFpgM8QJMDGiAJlqoIUCOS1lYWL4DA+gbSBCEmZWUlHi/fv0qyc7OLgEUYGO4dOkSp6qqajBQZRlQRwMjNDw5gJgPZCZAgAEAjMsekNnyoBIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiVFNT+8/AwPD569evR58+fZrL8vv3bwZGRkZeDg4OOyYmJg8mIIcBCrj+/fsnwgTj/f//H0yzIKkgUoCJAQ3QRAs1BMhxKUgAhIEB9I2FheU72Axg0H358OHDIQUFhYsg9Q1AmW+Kiop3165du40RqFQKKPgHiD8B8Q+AAAMAvLgsezVKBIMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiMTMz+//v37/PHz58OHrnzp1cll+/fjEwMjLy8vHx2TExMXmwMADB////QRQXUKUIC5QDE2SAC8AAhgATAxogrIUaAmRYSw2Xws0ASnxjYWH5DlYBDLov3759O6KgoHARJNkAlClTVVUNvnTpEicjUIUUUPAPEH8C4h8AAQYAaEheCvo+JpcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFiklEQVRYCc1XbUxbZRQ+pS1toYUKjPFZBQaDZAiMkC1blG1ZnCZiZsyS7YfGHy5GEx0xfmXRHyZmMWp0OmNi9Jf+cEaNZGPOIm5jGWS4sYEY+RCGq3x25avf7e2H53l3by0DBzKa7CRP7nvf3nuep+c957zvVUWjUbobLOluEAENmpUKUbHxswDE4z21DOXPRPg+LCPEV9xzwFcWctVyz8kCQKZl6J5/6dXNFktRg9FofDCqIkOyVlvO8xSUpH5VlHxut/u8zTZy8tMP3r3C0wGGxIgsJ+i2QliEIsDwxltH9uUWWg5nZ2XeZynIp7ycbFKr1ZRhTmceopm5eQqHwzQ+aSfb6BjZHdN/TYyNvvP2m69/wz/7GBKLQZSWtCWFxEVB/8T+Jyvqd+76orS0pKp8QwmZzWk0O++ieZeXIpEIef3400Qpeh0lJSVRuimF7kk30Tw/MzA0TAODQz1tZ8888/3xr/r4MT9jyegsEiKLwPobXnz58CNlFRWfb6mtTivIzyPb+BT5AkH+aXkz6JKpMDebxsYnqLOr2znY13fw4/ePnOY3EZ3wrUu1lBCISHm28ZVHKyurv6zfVqfxh6Lk8niXZ1/iCVNqCuk1KmrruBTq7e1+6rOj7zXzY14WgsSO2QIhck4YHt93oGbHQ3tObt9SZ3b7JQqFFrwTe3mlA41GTUa9lto7L82da7E2/PDt11f5XV98ziilR/KSoDLStj5Q/0nNpk3mWZePgkFJ5ALyYbWAD/iCT/gGB0Mrc/LwZk8QA3lseK7xtQMbyzZUSdwyUAWrJb/1PfiCT/gGB/MZ4vlFQ4uPRlFxUaNOb6CAXA2KyrW4BlgMfIOD/X3H8DO3qCJladAx9fufPrg7NyenMBSOUpiXIhGAb3CAC5wMcMdavCjXvPz8XUlqDUVYeSINHOBiDpSzhxFR9hohxJhqrOKuJCKRSCHgEFw38wTckiIEV12yXm9B20ZiJdLAAS5wMoQGRYjYU1SkSsHpBLmRSAMHuPiCdiHyNF6IWpQcR4MzOZE6cDYQbYFJsCwLhAhiKRT0SVLIhNAl0kRPYa54DiUiWIuw2+kZ8wf85Xo9qipxxhwELmZAMoo8iBcizc44BnxebzkfdhKngj0zB4GLh+LQBDKxPnzF0S5w/drQRQ/vsuEwN7MEwstCbCPDv4JT5o41NITId6blx46quq1TRpNxfaKWx+/3k8PhmPrFeuoCOBmiVyhLI4Tw5NwfPVeOZ2RkHkrWJvPt2pvL6SJwsOc5xiIhKG0c4+aszU3NxaXlDRqNpthkMvHU2pnL5aLJ8bERcLBXCAGn+LASOSIf25A4TsZU6+nmo/Ypu4dP5Gu28cEXfLacOvEhOGQuHKj/FcKTMJQRQuX4s//3yx1tPx+7YbeHWc0dn0ngA77gE77BIXPFWriSI+JLiDuqEpWJzvbzVq6cpO07dr+QkZlpMK5ymdy8HDPT0772c63HLl+8YGUBEwxEPhYNHtOCM6uYUKnQVrEPrGNYCu8t3rznsb2HsnPyLKkpqZSswz61vAUDAfJ4PWSfHLdZTzR99Pf1a/jgsjFuMG5/eIZ7+bQGMTjKZTDyGAXbdu5++P7q2r1paeYMvUEvBGFP0srNT5IksYdAgN/nJ6dzbua37q6mjrOtP/H7o4xxxgxDVIqSG3wvbFFEMCuLQSKj1+Ogm8VYz1hXUVlTVVJWXpuVnbOR9yQtL1kOzxMvwSTvIZLDPjkwPNjf1dd7tYen8e+RmMgJLAeqZGUfWPxgzFgQxKDfIzqoZbMMiEtlQKiSZ+jOIMKJC6QoT8DFQBT+/ycnvxSzuOhAEBIEogCM0fVEC+ArKgCfgWjbIAYwvvOPcHYSM1kQDirIn3jEC0GHjgdSQfSJmKP/GPwDy9LPcQuXXBoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-disabled-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFRElEQVRYCc2X309bZRjH3x5O20MppQxcS4GhtCsQGKg4R5YtccFEoxmJJku48kajF+7CJUvmhVcmxpiY7GbeGP+AXalhUYcbYYm4sMFcNjdYurIJg/JjFEo5lEN7OPh8X87pWgu0uJ1kT/L0/HrP8/30eZ/3x7FsbGyw58GE5wECDGKhIBYyvS2O+ANwnBv3kVq4pjtPNWW8oJRb8rXTAQxx8aOTp6sCAX/QWeKsI12rVbJXkjBLKWvzxJSSV+TxcHgs9MO5b6fptmpA5QPaEUSHKKJg4udfft1cU1179IXKcve+mhrm8+5loiCwPW43PWZsIRZjqqaxyMwcm5icZI/nF2PT01MDX31x5g49BtD6TjBbgmRkQezq7q7sfOOtrsD+em9joJ653S4Wi8ksJieYRsIJRQEHc0gSEwjM7XRQGyeLU5t74TAL3X8w03elt6fn/HnKGAcCT0535YBkQFg/PXUm0NTc3HWwvc1e4/OxicgcU5JJLpzvR7LZ2D7fXjYZibChG7fWRu/e7fnu7Ddhei9FngOzFQiK0PrxyVPB1lfb3zt66KCgqBqTE4l82ls+dzocTBIF9se1Ie32Xzd++v7c2RA1TBEJijptWcNXz4Z4/MQJT/OB1ncPtbcJC9QFcVnm3YCu2K3jXcRALMREbFIXda1cEP0BCtN+5EjnOy+3tEgLcYUlqSt2K/7f9oiBWIiJ2NAgL8qEycwIhqj4yWenW4JBvxeVoGnqU0M8gVIZYiI2NKBFbsxBmxOaTgYou/9Ff4eNRkBSKawo6Z2CLakmGWJDg14aIVdJmxduZkbE7g8+rPdUectUGvWYE0xxig0NaBFIemY3TgBk9VbXviQIIu8SujbNoAEtEjCG87oBwuuj1OX00qzE68I0CgQmDa6VUScGCDIiSjapTKQxr9K8YaZBA1rQJOflYYAgI4LFIlg5AtWHmYbo0IImTqGVBcKHGrIhmAxC4aFFlgOCmyyZWkupqmrH4mWmAQJamRpGRrAaasvyyrKiKHaJxrqZRhoMWtAk5ytxFshidH4+kaittNmM2+bgJGgBhdZWICBT/wmHJv37GxqdTqc5BHpUgDx6ODYFTfJ0seAx0qNeuXzxUXQhSiv+5qbnyTqx+1V3u3cRGxp9vb9MQFPXTo8aUKF4lNGbw3fK3eUdNtrYmGHxeJxBA1rk0OQZySwG0Cm9v/aE/A1NDaIolrtcLrr17AwQszPTi9CgqACBJjc+TrH80RXI1shXLvVeGJyfe5yUaVPzrBY+xELMS7/9PAgNXUvTtTenV7oJ43VCx8T9kZHIQP/v1+lFLfEUuzOjThADsRATsaFBnq4POk/XCN/N0t5gne4hK8tDgwNhorUcPtb5+p7yCmvJ/+ymFeqOhcVo6mp/3/Xha3+GEVvXyPq82HbzTI0d5GXVdXVVbx9/v8Pj8ZUV00YYG5tCLEmT1iqNkNnZyNLFCz8OTo2P44NriRzZyNk8bwWCRQiORamYvJTcdfjYm4G21tcaS8tKi6ViiVltBEQVZhM3Rxd2X6iyVFJhyirNnEvLq7duD9+72n8ZWYiTIxOr5IV9TlBDWhn5dy5gMKqw0UV2SuBNB17x+ANBX4XHVyGKlqISp4vPfityXFbVjfXobCQ6Fg5FRv++OUvtUZRwZAFdzuvCKFC6TltORtJP6EQH4p+cdAkg9Asc58gYQI0VEqMOQvjHEMXwhBsAWTVB97NsRxC0zMgOBCEMBwQA4Xw/QUeMOhQ7HDCAggMQScDzbS0viPGmDoRLAEHcOGaCGPORceQEeCmf/Qt/gODdNKcAsQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-disabled-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpilJSU5GNjY/NmYWFR+fPnz51fv35tZeHl5fUXEhJS5uDgYPjx44f6+/fv2VmAArKioqIMrKysDL9//2ZgZGSUZQKqeAzUzsDMzMwAokF8JqCWTUBz7vz7948BRAP56wECDACARibFW62AbgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpilJSUlGZjY5vGwsLi8efPnx2/fv3KYuHl5Z0vJCTkysHBwfDjxw+/9+/f87MABSxFRUUZWFlZGX7//s3AyMhoyQRUcRyonYGZmZkBRIP4TEAtKUBzdvz7948BRAP5cQABBgC1gCaMj8SIGAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiVlBQ+OXr6/vP399fC8h2//jx4wEmfn7+c9euXXP48uUL+9WrVx15eHjOM6WlpZX/+fOHa926dRNBdFZWVgnj////2RgYGOSBmA+IPwHxQ4AAAwBD7SPhd4irzgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpilpeX/x8cHPzD399fW0lJyeXdu3dHAAIMAExLCKH400byAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiUVBQqLW1tT0IpL89fPiQ89ChQ05M/Pz8z69du6bw5csX5qtXryry8PA8Z0pLS9vz588f1nXr1nmC6KysrF2M////Z2ZgYBAAYnYg/gnEHwACDABY9SRUSyy5EAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpilJeXb3B2dt4jJyf3/dGjR5x79+51AQgwAEsRCN8VvtvtAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHVJREFUeNpilJeX52NgYPAGYhUgvgPEWxkVFBTigAx+Tk7OV9+/fxcDsr+wAAl5GRmZ84KCgt/fv3//5fHjx8ZM////Z5aSkvqioqLyRVpa+itQERMTkGDg4uL6w8PD8xdoxB8QHyzIBJRjZmb+zwRRwwAQYACJUxySG2T8dAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG5JREFUeNpilJeXl2ZgYJgGxB5AvAOIs5gYGRkXALEmFxfXVhANxMuYgDL2MjIye1VUVG4A6T3///+3ZgISrFJSUi+Agi+kpaVfAhUxg1QyALX+5OHh+cnJyfkTxAcLMjEx/WdmZv4PokF8gAADANpxGPrplMnhAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwxJREFUeNrUVUtrE1EUnlcmM0nTTJqEtiqhFMF2I4gIShduVGhdCKJ/oS5ciOC/UARBLUpFpRYKFbvRNpQKilsfUBdpG4htbEyTNPPIc5J5XO8ZJmFM0jZddOGBw+Tm3vvdc7/znXNJhBBxVEYRR2hHCs40fpAk2TpH2k47HMbAo+FwZHvTGlQz+9yI7uvr498urjwSfN4rHEOH3AzF1nSzrurGrlwsL9+YuHRHFMWqfYjZhgKntCQVgLlnM3OXV2MbSiqVQhgAlUolVK/XrS+M4X+Yh3Ww3klxE7MFnOrv7/fOLryfXNuIm9lsFqmqiqrVKqpUKqhcLltfGMP/MA/rnr6avTY4OOhpHNDAZFo4Zs5dGBs4PXLycTAgkB6Ph9A0bc+Eeb1ea9/5s2dmBEE4lU6nNWcOnGqhIpGI9/bde1MBX4/L7XYThmE0o+jkMM9xHBEWfL6HU9MvAoGAxw6yTYp0MBjsDfX2jLEsS5im2bXDASG/7+LQ0JDgFImTFhpfU+BcNE9RlLWpWwMZcyzNw348zHYEZxiGJwlkXesw4NYBiCBdLhdn10MbuFUwGuYRuITouzVYr+k6wjegnZw7wa3KK1VUtVarcZDQbg3rnyhV1RpOsuGsVmd4hq7r1d/pTAxr+VAJxfontrbTq1i2ql2t7eB4kbww9+aBKBcMXIldAReLRSK9K1bnXk/fh/17gufz+UIum02sfPr8UpRkBBv30znMS7KCotHok0KhsLW5uQngeifOzWQyWcaVtv3l4/K8LObL4+MTtwZCGgc6xkogGhKFqsXlT+zsSurS0uLUzx/forlcbluSpIqT89aE6plMRqJpen31+1fzV3w9fvX6zcnI8WMjPR6OZTC4jsFx0uvJ1J+1D+/mn8uyHMPAcfxVHC3YlqfdtBz9HKhiR0dHA+Fw+ITf749g/Q9g78WRszjyOk58AfuOoihJiDgWi0kgmkbbbWJ2AG/2c+gVw8PDfp7nA1BgdoFYqsImJRIJxabin35+EHjrS8R0eIn0g14i8r99/f8KMABYnUshETxaoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA1VJREFUSMe1lWtIVFEQx5fMB2WSRmQFIhQVGQjSm5JIJFRIyzQypOiDYBBZmq0PqKwwM0W38LX4WB9pobuWpi5ppZTiquuT1LW1NM0KMqIH2Zdp5jZXdu1eti99+DGcmTn/e87cc+YoqvrfK2RYhDggSxFXZCWyiq0r+x04T1JDTtSRBTwQb8QXCUAOsvVlvwfnOUp9ZKGwPeLCk7Yjocg5JB0pRMrZprM/lPM8eJ69nDgF3JBNSBByEalAhpA5BCyYYz/F45FAZCPvwn6h+GJkOeKFhCPZSB8JFXeMQ07LIGQ1dMPN2nbB0pj8/CEjkoEc5g+4iCUSxZcg65BDSA4yXWGchuymXihpHQT90BQYJj+DafaXYGlMfopTHua/RjJ5x1QiJ1Hcjk/AXuQKMlbWNQmp2ueg6zZD38ef8GL6BzyZ+A6N498ES2PyU5zyKnqmgHeqRHZwee0U/KfXI5FIfVX/DKTp2qG2xwxP33yFOtMXWShe3WmCjPousUT3uKyepEviy5BtSDIymd86DOpmI9SNzoJu+JNNKK+guQfy20ZI3MQ/2AdxJvEViD/XGm7gNks7xuD+4Id5Cp4Ngd/xaFjrvUuwNLaM3+00C/N49SpkP+mSuDsSglRSMLGkATSGSfxR7+bZFxENG/zDwSv4lGD3HI2yims6JyBJ0yiKV/BlcyfxNcgRpIaC5/O0UILilmwJioStJ+JhZ9QlwW4OiLCKF6N4bL5OFK/my7X6r5XH5msht20U1O3meQLPXhOEd0dfFeyBMylW8dzWEYgt0Emu3KrmyWV6SKszQE7r6Dw0Dkm6LQiTlYrTPKmaW56Wt1lNRogvegSqlpf/zIXCesjW90meFqtzXtk3AzG51ZBY/hgy9AM2UWqaIAEPgdw5F2+oL9/QV0VYx6hbGojDFaU1GGWhOOVpDBOyN1Syt5TihDj1AzitqoKE8mZI0XbA9YddgqUx+Sle+kdYtrfIdcUB2momdsGYvBo4maqGY5fvCJbG5OdS9Nrqigp+siz7uZJraFrQy0VMHFdyvmw/l3qJqHZh/PdVfH5r2KrYH8Z5Nl8iyzfUiXfhycfKDwnmmxfMYx+Ou3G+zTfUEjs+ps580dy5Vbjz2JnjdrKvPwD8N34D1L0Qnrdlo6IAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAs9JREFUSMdj+P//PwOtMMPQNxwLYARiJiBmBWIOIOYGYh4ozQEVZ4KqQwGEDIcZylM0aWlU/aJti1pW7rvQse7ILxAN4oPEoZbBLCHKcJBCDu+EHLX6xTt2Lj185f/hm0//X3/+8f/rr3/ANIgPEgfJg9RBfcJEyHCQAs7Q3GqLpuV7X++4cO//3fe//p998f3/wcff/m+//wVMg/ggcZA8SJ1HbKYOsgXYDAeFHZuAqIRE9YKtV3devP//6OMv/zff+ogTg+S3nr3zv3z2+j1AvcLQIGLEZjgzEPMlN04qWrj/wv+tt979X3/9LUEMUrdg//n/SY0T84H6eUGux2Y4GxCLF0xedmTpyTv/V11+CcezDlz57xyd+V9a3xJMg/jI8qvO3P0P0gfSDzIHm+GcQKxQPGPdh4WnHv1feu4ZHDtEZf5Xcw37r+2fBKZtwtNQ5BeefPgfqO8tSD/IHGyGg5KVWtGMdf8XAA1Hxjresf9N4sv+W6TVg2ktzygU+flAwwunr/0N1K8KMgeb4aDw0siesOTj9EM3/88+dheOvfJbwAZbZTaDaffcJhT56Qdv/M/qX/weqF8dZA5Ol8c1TDrdufnU/2kHb8IxiB9QPRlsMIjGJg/Sh8/l4DB3jc/rLJu39f+kvdeIxqVzt/x3jsluwRfm4NTCys5hGVM/6UHVkt3/e3deIogrFu74H1rWcQqo1wxfagGnc1DQqBhZJUQ3TPlQAnRR57ZzODFIHqROSlU7DKhPBV86Z4S6XhSI9cTkVaL88hrOZk1a8b9yyZ7/TeuO/2/ddBpMg/ggcZA8UF0EUL0OoRwKL1ug3tMFYhcT7/B+n7z6S2HV/Z8jG6b8B9EgPkgcJA81WIxQ2YJSKkJdAvKqKdQQPyAOhNIuUHEVqDqiSkX08pwX6ipQKgAVrRpQWgEqzktqeY6tJuKE5gNeKM1JUk005CpoACn7Zz8845ivAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-arrows-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAYAAAARx7TFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUCFtjcMlpNnDObv7mkt383xmKQWwwzgGK5zQbM/z//194zvrdM5AkwBikePrq7bOB8iIgRSCsXDt9+VaIZBNYUeWUJbuB4qogeZgihm8/fpintEy/ADItoXHqtW8/flrB5OCKgJjx4bNXQWmtM87defw8HMTHpgiE2YDYDYjZkcUBl+OOeCK3v4cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-arrows.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAPCAYAAAA2yOUNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANVJREFUKJFj+P//PwMMu2Q387jkNK8D0kLI4gzIHLfc1s1ARf/d8lp3Omc3M2MoAgo2ghQAaTAGsrtQFAEFQpAkkXE4WBFQwsAlp+U7zBSwJJR2hYgbgEwSBuIkIE7DgkHiwigOx4WpqAjkMKCDv7lkI3k/G+74b0BsDHb4nPW7ZyBJ/If5dPrq7bOB8iIwI5Vrpy/fCpFsAiuqnLJkN1BcFcVN3378ME9pmX4BZFpC49Rr3378tMLmcMaHz14FpbXOOHfn8XNQSDPi8h0bELsBMTuyOAC+nGWQKm0f4QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-disabled-right-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXlJREFUeNrslkFLAkEYht9d91hgrORCRKeCiqJDRGK2GIVYxw4d+kf9g/5FHax/YNShW9ohSINyRTNZ01zdmW1mV+3mbsVslz74mDnNM+837zcz0slZ/hRio8kyzzKnUEpxvLcpjNSxetFi6WX//smQFcdxUHi1hMEUWUJc01AsV5KuMkodYbAeW7vHRsaZHMAoRAdnuDASJixEZQSEhAEjUDiIsIno4Jw/UBYC7EuZTxkbjQYucxeghGDYkdJgjCgRZLJZqKrqq0wmhJdxfE6rUzg62B1BJMmbcPBhJg0tpiLIOrLbZ2R8diwbEzENO4l1D+J4+vSNNUTjM2hbfd81XOsPqX7x1iZYWFqEUauj8FDC/NwslldWUXvvBjyzkfWDGaRqdqGnkqyMEra3EjDMD7HWN1oW0noKz80O26TzPet7d2Pwpub7eqybP7uuvDMLo88I/p+Y35XQtjmjJfxbYPf7qFcrHHblfnjubq9FCuPWvWF5/inAAMMzdZSyHBqHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNq8ls9KG1EUxr9JZuGiKcaJNdCFSEoWCl1YqEpaaaoitILg1idw2Tfo2jfoW6jYRcCaukiqrUg2bUTI6KgYrY5ObDPJJHMn3juJ/0C8c9tOD5xkhsydX75zv3NmpNm57Af4GwbNLM2PsuM4mB4b9I1kWrX2/M7Bm83dw4DcaDTwQ7d8g8kBCV3RKPJaMeEqc5yGb7AavXeNflNOqAVz4HcwRoB9EIGsWhYWFhZRNk2hdYwjrCyVSqFQ2IZNbExMvIUkSSLKCAhxPOXq6hpUdRvs/pqmIZPJel7LOLJ7Qg94oaoq1r+tN09aYnK5HJSIglgsxl3POPKlsvtC13Wkl9NNyE3j0uOVzysIhR5CURROGS+VcWBd9N+/fzeDu7aHtin2S1VYtuNRGaeMZo1g67j+l9Z3lbEyEt/7jDFc6/PK+K+a2pMywzCQ/rQE2759HdvDYDCIV69HEA6HucoCTevfn51KGFPjySvXSy0Qi8nRYTyKdPCnCPHY1OVqHW3tnUgO9F/TaLx49hQPIlH3d09N3ZyNfIOclivoicdxeKJjs6DhSfdjxHv7cHReEd0zbwYpGiYSQwPuPEwMPsf+WVncjSKD+KBUwcvEEPZOfws9B6+mPhGAsSIUfpb+zPr/4+FJbJsxfvn+WmDX6zg5KjLYF/eF5/vGmp/Czml+pTl/IcAAabQiHJYP3UgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-right-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXJJREFUSMftlk9LAkEchl/30KlDoemCRUUopBQeQogSsYQOHTp0iM59jLoEnTr0EUztC/Qpgi5eoqBTFyt1tULR3HF3ppndJTrlWMx2aeHhN7uw8/Du/NnRTi+vmGKqnBPOmEYpxf5mWhk766lofDp8yD3HGmMMdy1TGdUeENF1cM+Bk4xSpgxiUbwR8Dad8mT+4MhsH/iU+ZjMhm1T5QiP5twIoWrsP0nmE26yIRhNA+VSCcVCAeceRY+LcgkNozG0Dy+Z+IzfEw5OYm87D3EFBAG3wXjZ3cpBDwUh04+7zobE75kWxkM6NlZXXAljjjibTmEiEkXXHEiMGZVLJnjt9hFPLCKxMMd9AcRmZ5BcWsYLfy7bhzf15ai3+8hm1pCMzSOfy6DWfpffRX4y9WsdE7ksF3XI6FPf3RvlFyexLDw0204d5b0vY+bHOrPx/4v5FQNCRDXUHwtMgvrTo5AVnQPPbeVaGfc3lVqr8XzGPUcfblj1AECuvN0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfBJREFUSIm9ls0rBGEcx7+7Bzk4eNlli7ylzUtJFGkRUY7KzdmFcuDAhULtycHf4LRecpBc1sHLgYi0JcqupS0WszteYmftrJnxzDPrLWWeofHUp9/M8+s33/k13+d5xjq1tK2YzAXBTUizyrKMnvZ60+hqqsl3FuSOEp1Jq6IoOOYTpnEhAHkOB4hOL+1MlhXTEF9k3Isg17I9JfY/UDHJAM+JBJaXVxATBEN172JG8Hq9OA0GSVyFJElGO5NIkczEzs4uzs7OYbEAoVAIW1vbzLWqjpXeqII6BE4D2N/bBxS8D5/PB3/Az1Sv6jB1xnERrK+tAxZ8HUR4c2OT5tk70yHPloOJoX64hwfgHhnQYup6fLCP5lmeo3WmgyAm4Y884oT7jjqv5vWekepMwn+hrTNGR/0Fan2WN+J5HosL85jzeL4wP+uh89FolK0zzfo/Y8/JQndnGzWg5Y2UM7s6WpBry9bfRVitH3tOIj3TjraG2g81MprqqpFhc9A8k/W1vVHfkbexOEqcTpSXFtH1VVaYD2dlFfinOFP9p2/G9pGv7gW4GhtQUVaM1mYXwncxAyaRjG/E4Yc4ml2NuCTR9CNGfJEQ5B5oNP2I+Q1JUVRjxPzfgoSIm/ClKjZDf3iODnZN4+Tw4JrnrqaJztgraPK+AKe0hD8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqUVLuO2kAUvcYGgs3yCi+zCYhiSzZK42xDScsPJKIhFV8Q8SF0NGxER4NQ/oBmU0SQIiQFQghjBApRADvYPJx7kb2CrDZiR7ow4/E5OvfM8TDwcDDNZvPa6XRmHA5HkmXZy91uJ+/3++Fms/maz+e7+I55AjheVKtVfyKReBeJRK5DoRB4vV4QBAFUVYXVagXz+Rxms1l3PB5/LBaLv20ca5PVajUxHo9/SKVSyXQ6DW63GxiGAcMwANUAz/OA5IDqYqjqJpvNfm61WjqBOfrJ5XJcIBB4j+CLcDgMmqad9Ift3M+j0SiYpnmh6/pbXFaoNQepKBQKUiwWe+Hz+QA3D6DHivaDwSCg6gyqvyE8KWHRRIn63263cO7w+/3gcrne4PTuQILjJRI9iQS9IeAl4YmEwR4F2ngKCQ00mLfbYbBPDYvnOO5sAswMndwfm8TEHMiLxeKKjD13LJdLyo9C+AOJoihdURSvKAvnDgwdyLL8hfAUNqbT6fyUJCmD5no9Hg/l4L81mUyg3+9/L5fLnxCvE4m5Xq9NJBhh0DK4dlHUHyNA1TAajdRGo3E7GAx+kT127M1er6dNp9NvGLoIuv7cPkaKPplIHhABKvhRr9dv2+32hFQQljn6EInQjSWUSqXXyWTyFXokYhZ4TCp+CZoyHA47lUqFfFCx1nTKxyT3GaJ2sJ5Z/5z1jF6mEBkW2LCePbwK/lHFWnPGuj+odlad3Cd/BRgAYjwouXetfmAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjNJREFUeNqMVEurUlEY3cfjO5PjO0UkCCKCiqLxnTnpktUwCidySRz5K/wJRgMnDmxkkdWooBo4bdCFi83UUkFS8/3W1pJjeL3FPR8s4Xj2t/Zaa3/7SOJsSYVCIWIwGA51Ot0dWZZvLJfL49Vq9XU+n7+PRCIFrFmfath9yGQy/kAg8MLpdN632+3CYrFsMB6PN+j1eqLdbr+t1+vPYrFYY59Eymaz1zwez2e/3+91uVxiOp2KxWKxgV6v38BkMolWqyUajUazUqncjcfjP6lKT4ZwOGxSFOUlVHi3C3eLRKzBYCDMZrPw+XxebPIcfz3kax1+dNFo9Aks3Fqv12I0Ggn4/y/4HlkJt9t9CPVP6YJK9AjxMQIUCE5oKQQt0COMRiNJciQxgOA2d9nK1lJcj76b7CeJDBtOWuEOWovrQaSwnyQSQurAioNetRY3nM1m3W0m6+FweIzADpi81ppMJgJ9J9sjXuLc3zkcjgOGpbV43LVa7RX7OWxGzMilVCr1AcN21WaznUvQ7/cFpvZTMpnk6fySKQfSVlDxDcN2D89WHN0muH+h2+2KTqfTyufzR+Vy+QedyeplWpVKpU6z2fwYDAavIODLbJAk6W+IzIB3Bwq+5HK5o2Kx+J2u2Cvt3CEGchFwJhKJR6FQ6IHVar2OWVBA8hvBn1Sr1TfpdPo11vBe9DnyFCHt2WXQFpXsAmDiHFAMMAWGavNYJTj7KdhTZVAJJNUyieYqTn1P/ggwAOPnK9ASMplRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNp8VF1IU1Ec/9+vbffO2aabk63JJvMrFEeiVj4EFhI99Bp90FM9SL1G0EsE0ktvgQlJD0kIRkT4YPQUBD0kCJImpuGcc6tdt7ldN+/u7rn3ds7YplPswu/cc+7//H7/j/M/l4LjD/Vkai7Emcw9NMv6aJrx6roW0xGKqkVl6emdq4t4j1FDOLwYfTZh97S23271untamhzgrK/DsEJSymPkYEvchY1YYim+sfZ24vFopsJjKmIPnr/2NPuDjwY6A77e9gBorAV2EQ2RPRWKwIJVECDocYGFY9ySxp5r6+1fWPgyVyBklgwdZ89zDrf37mBXwFbX4IKVHbkmP0nVQMKf4nje0NgEfW26rbCfv4WXLzEQiYS68XBsqKcjOGRpcIOkINAN/UTkixowFgF4xmjyhS6k5z9/jJJIWJNF6GeFOsgratV7JrUDM5PjsLq8CJ3dIbh+7z7YG10lm4oABFs9cGZ+EC+/03jgaIY7jSgTqDjsCqZfjUNUTIHd31V6T028qLHLGgsUzXoJn0TC6IYhGCUPqBpJMpuDeo8fWDMPSJEhLW7X2Ml+zOMJn4hQiiLLckHmWZatbmoJdkBaVoHGW4iQL9iJRQ7SRSo+NUUmp0ORdIxcZjchZbM4TFTFxcsj0Oxygq6h0nt45EqNXZIkyGUzIuET11piK7zi9gX8PC5u5SHz4eFLNUeNkHaQrijCn/D6EuGXmi26+iPb0t3XzZjMgpkXQNf1/yIR34bN1eXw7PjYJ0zPERFDQ6qBmydldTZ3AUVxvNV6Yp8QgVhkQ/724c07Kfk3gflKpe31VDyyL0Z+bwoOl0s3wE6uFVUqGQVqUYUcrkEiFoXNX8uRrzOT7+PrP6PYmCdc6tBFJPWxYTgGrt0MuQPtZ3jbKSfDchYcaUHeyyYT4bWV+dlpcovTJA1SJpIJdeQ3QIQsZTErhrnsgLSFUva8h1EoCxz/FRyJiivf8ooIORq14v0w4Z8AAwCwpYb8ccIJGgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvpJREFUeNp8VF1Ik1EYfr+//Tg3N3U457T5tygUc5YgdBlRCRZ00Q/VhTchdNOFN91EIN50HSLRRUGCSWKGo7wJgqikMIoiZ6nT+bPcj9v3uW/fz87pnDGnK+vA830c3vd53+e857wvA38v9vajwFnBYOxmeb6dZblWhLJfkK7PaqoydefamWfEB+0lMHs3fYNDNe4G37DXVdntqbRBhbUEykvNEJdkiIlpCEdTsLQRnVpbCF4futW3usPjdoLduPugxeVteutv8hxpdleCKGuwGhfhWzgGUkYFgeehweUAi8ngk7DhanPbsScfXwVSlMzTz0F/l9lRVTPS0Vjj1DHAu2C46HwxUc8pWYjEodpRCm1elzOT3h4mph4ClSphL/UP9B5qPNArKjokiHSM8T+RSiugZBFU2CxNdf7jyzMvJz5RJUaDqeSioumgIa2QPbWVgBdPR2HpZxC8jT44df4C2OyOnE3P6lBqFEAwmq+Q7WOWfEwsJ7RJMgmioQIC42OwKWXAXn84938+Nlpkj6VkYFi+lfKpEgFhbEc4Cyi7W4dURgOb2wu80Qy6IoMYWckp2FmY3jPGNsqnQVhFkZOqqpaxLFtwqq71goR5YDk+F6i6rh50fTcIQghURRYpn7KQtJWYy2QU4pQtoN3vJ2/EQtTpUG61wNGOjiI79ZeSW/OUT5VokeXF6bIKZ6eN4wqZjCYz+Ntaiq5az+6eV9pOw/rifIDyKYtZ+f55vaG96zTHG+wcCYQQ/i8kaRs2wqH3k/cGBgk/SoMQxRomj2fJ4fGeYFjGxJNSYYz2hSSJkEjEk2/GH95MRTfmqCguX2g9thba+hX6MVPmqm1keIMbY4aQIAdaA0VRQRRFiIRDH16P3u9fm/86Sx8z5TJ7GtFE4CTwdPZcPldV7ztptpY1cLxgJUpFWUwuRBaD0zOTIxPEZ4Vgk0ChIpg/xoCBwJYPVkFgyTcpreh2PjMl08ZT9x0FO/OEXk5emZDf0/lBeyKTz140T34LMAAJdqAwng0CqAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlxJREFUOMtjYMAETPWLtgW2rNg7p23NwbMd6478AtEgPkgcJM+AD2S2TZduXrF3y9LDV/4fvvn0//XnH/+//voHTIP4IHGQPEgdNv2MOd1zdZpW7Hu148K9/3ff//p/9sX3/wcff/u//f4XMA3ig8RB8iB1ac1T5EH64CaoG1ly1S7acWnnxfv/jz7+8n/zrY84MUh+69k7/6vmbd4B1MoGD4OcvgUZC/df+L/11rv/66+/JYhB6hbsP/8/t39hCiyMOIumrTqw9OSd/6suv4TjWQeu/HeOzvwvrW8JpkF8ZPlVZ+7+B+kD6QcZIlgyc/37hace/V967hkcO0Rl/ldzDfuv7Z8Epm3C01DkF558+L94xrq3IP0gQ8SKZqz7vwBoCDLW8Y79bxJf9t8irR5Ma3lGocjPBxpSOH3tb5B+kCES2ROXfph+6Ob/2cfuwrFXfgvYAKvMZjDtntuEIj/94I3/2ROWvAPpB7skvnHKyc7Np/5PO3gTjkH8gOrJYANANDZ5kD6YSwQ9kouby+Zt/T9p7zWicencLf/dEvLrYWHCyc7JrRtTP/l+1ZLd/3t3XiKIKxbu+B9W3nUCqFcTFjugeBZTM7WLim6Y8qEEaEPntnM4MUgepE5W08AXqE8EOS+xA7GCuKJakH9B0+msSSv+Vy7Z879p3fH/rZtOg2kQHyQOkgepA6qXQ06xDNA8wAmVsDLzi+ryzW+4EFbT/ymyYcp/EA3ig8RB8kAsC8QcKHkHCbBBnQjyqw0QuwOxF5S2gYqLoLsAG2CCukoQGn0SUFoQKo5RngAAHC8qpFnABTYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeNJREFUOMuVU7tLqnEYtigJpJJTS0JtDUHQpEPnDC7Oxz8haHNpqk1cxUkELwQuOnhbVI6oIFGCoiAYitfBQVDMS4LgcM7y9j4fvw+62Onrg4eX9/I8v4ff7/1Uqo/fWjKZ/J1Op2+z2Wwll8v9RUSOOvqq/31+v/+Ah5OVSoV6vR6Nx2NaLpdSRI46+phbxV8LBAInPPDUbDZpsVjQfD6n2WxGk8lEishRRx9zPp/v8I0rk8m0xVYf2+02TadTGo1GnwL9RqNB8Xj8D1M3ZI31YDB4WS6XaTgc0mAw+BKYK5VKxO4vZDfqcDicg3q/31eMVqtF4IEPEU0sFpt1u13p8pSi0+kQ88bgQ2QnGo0SRL4DiEQikX/gQ2SX7+S5Xq9LFpWiVqsR8ybgS074uR4KhQJBSCkwD57sRGOz2a4TiQRVq1XF4Ccmq9V6Jd+JWqvVHnk8ng4vkbSVXyGVSpHT6bxjrk5+nXVYMpvNJq/XO4Uj7MxnQB9zRqPxnHnbr7d2k7Gv1+t/ORyO+1AoRJlMhvL5PBWLRSkiRx19g8Hwk+f3Xm+sSqipRePYYrHc2O32gsvlmrvdbkJEjjr6jB/i4JV/9IawqBPDp4wzEY9Fffu9g5V/tHClEc+3K6JG1D+c/gLaLHWQM6f6bgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARxJREFUeNrcU7tuhDAQ9AtQQBQ5IQokCkDi/7+Fz4CChgiO8yNjb8idTiKPMpkCY+3s7uzY5uM4SimFEDJAHOABLMBa65zDV/jFOXYOF6J3tl9D9hnbHvAd7QPOeMZYrbWKomhdV8Q4h9p7AolGggkICUbFcbxtV20MO6by8zqHDZShuNagGuqjEL5cXqdpQiOywDcQEpkYBJxQ2CklEfJsiCnLcp7n201j2GCg4YyUWCKQPPWxKFUUxbK8bdfNoDW3UAL3JQJelyPH1KMJWZam6QtJJMaTs4L9Bn+VrZ4uxjAMy7LQNs/zvu9Pa8PjruvoAuCEmqb5RkmWZVVV4aeu6yRJvlJCAG/fd9yFH00JJW3bfj6z/3A67wIMAMmK0TcxpouqAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXdJREFUeNrcUs9PwjAYXbt2gIpHQzDGg1e8YkiEAzGRi/yB+Cdx8OTFRKPyQ4MSYWNs/bHV1y0SYoLEo74t/dr0fa/vaz/S7/c9zyt8AXPGGOfcdV1KKSEkTdMkg5SS2phaOBtgjMkTtNYZG1HbiI1v1BVPKRUsQpYYR0pFqas1zxNWyI5MldbSQk3e3pnLiyL0IQOjcIwBc0JoagxxHOTHgBDQfhqMWaG0Gy38KI4JJSgMxCS1haA+2IKHOIqFFEEQDsavVumgejR8vM8kcQNGeQq/ZRtj2VZa3NzeYWnZhWLp8Phk8jIMF0tcEM9AM+1EJzM/eHgehcsITJbXzj0PJ8w/pkJEWmnJpEtdofQ8WEymMyFVTmPr97Wzty+8Is6NhIjjEAO+dQJ1foO/ymbfeqjXux6ORvmyWq1etNsbtdHQ3e4VGsa+AOet5vkWJ5VK5axex6TRaJTL5Z+c5Gi1mr7vn9ZqUortVcJJp3OJrvo/r/MpwADuwwM0qCfRHAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrcUj1vwjAUjB0nLQSK0qUfKR1Yy1IGysgIKwsj/4g/lnZlZ0ViQGocx3bsnhOKKlpadWxPkf3i3L1378UkTdMwDM/egZgxFgSB7/uUUkKIMaasIKWkbjcO3glYa2uB1pq6CLt2Knw4oh54SinkZqgopaLU1zqoBQdUJY3SWjoozjmLotZms0EayOAYC2JCqLGWeB70AigK5MbOOp2L7XabC0EoQWMglsY1gv5gCx5ELgpZ4AwChtN+/yF9fuE8ryZgVajwOLa1ji0EKjSbDdR0ddvt9tNwuFqtsleOAQUVaJW71CWhXiuKIAaT1r1DOhg8du+7mHHO8yzLUArURvP8Mo7RUk1jH+d1l9zeXF/B9H6i1eywHgjU+w3+Kpsd3aHlcrler+vXXq+3WCxO5saw5/N5PV1c9Nls9oOTJEnG4zGCyWQSx/F3TmpMp9PdbjcajT5f9y+6hBP4gav/83feBBgAu4vyDSWkLFcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiWrpyHcP12/eZXr15x/T792+mX79+gfHPn0D86yeQhuFfcDmgOmZWLl6AAAMA0ScnvzgM/74AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNo8ybEJACAQBEG8/ltSbEILUMz99O8eRAOzZTblUtOYC9sMEQGSkAR3viYdfo36TyG01o8AAwDxoyq9365oKwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVZJREFUeNp8kr1OAkEUhe/8sLvCgIPgClYUGhKjhSE2FmJrYWFhbCzURKzUWuNrWPgcPoHhDeyMMTzBEmBlZ4R1x5nNYpDInuQkk5nv3ntyM6jZbMKUkDbWpnf3DyeU0kOM8ZZSqm4e6QxIL1tX667rPjKW32eMgeM4safhGDw7v6iXy8vtUqnMFzmHMAxhrC37/T+wGW277spTcanILdsG3/dhVjTpmrm+uW1lc9ldQigIIeA/0aSrRQg5NnWj0QjmaQJnhJQbhUhpeJwOc86d4TAoRFEExmkw6vV630EgPqUUTMdJhZWx/BJvg4HfyLFcKmzmhjKQz57nNWy9tnkitVrNrI50Oh/vlerqns5cNQWT/NM28O+foJS8IoSPFCjbsZ25sMkN3a7nE4JfdO2mlLISd8EojhCpCFDy61CSf0E7r13YbuycZizrQJ/XlIrv4EeAAQDMloUiXiKSSQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWZJREFUeNp8krtOAkEUhg/LKIRGwAZ8Agpbe9/AN5DCzkvvE6hPgb0WJDYW3qiNRhvUGBpZIZpw21mX3bnteGZZ0BDXk5xszuw3/znzz6SurhsaAELMZ611UwhePzo8qGMt43XzP4pU2+4go4ExBkEQgOu64HlfjW63s3Vcq9nxpmiDNXIccCgFISUsZjJQKpWgWFxeL5dX7jar1QoyxIgamCilohbTr4+ZyWYhny8UpFQnWK7F4yhLCAHz6fs+pAmBXC5X2d7ZqyK4YNQtie3/Ss45qDAEQtIbMWwRzgUkBZ4bGOerM9i0TYoQlT1vvBQf0sA8EeaT+enMDf6Psktd4/3L1GcihUyEB4MBKo/Pp7eZOLMBh6Nh6+bywngtItjYNB+9Xg/6/b7z+dHdxXL8A6sJbMYJWADUofg+6O17+23fttuvv2BNms2nyYtKgaND3RKcnT0+3J/iknHBxWTxdcO3AAMAyTPqDXZdVhcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAV5JREFUeNpiZEAFjEDMBMQs8xcvD2djZfNlZGLS/f//vzpMElkhS2tHt6qsrOxUAUEhBwEBAQZubm4GLi4usAIWZIV1jS3q0tIyhyWlpAWERUQZfv/+zfDj52+GL9/eoSgGWc0uKyc/U1RcXICdk4vh3fsPDOiABWoq64TJ09J4efmsmFlYGb58+cqADbBATWVjZmYJZWBiYvjx4ycDLgBTzPr56zctob//GX7+/IVfsaioGMfHz5/5/v77y/D311+8ihlfv3719/NnoEu/fuVhYWHBq/g/CH/79vXmu3fvjPn5+fEq/gfEf75++rz52bPnxhwcnDgVM0ODjvnalYu35RVV7f79+ycJirG/f/9iYGbkNAF076X/jMyBQA3s2DTAFIPczfDyxbPPLMzMB4HhrfP16zcJsCmMkOQDNACekBih7gc5mBeI+exdPGPYODk9//9nUAFikBgDQIABAM09iIFDDek1AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAW5JREFUeNp8ks1Kw0AQxydhU6sGxINUPVQUDz149e4b+ACCgl59AEEsehc8+AaFHvzAghfxIuLFIh4traalh0KaVpO0zYfm29mYlCKkA8Pu7Px2dvc/yxQvbgIA8NGrEPgVy7ZKu9tbJYzdaJ3mQ2OqQjNAA9M0Q1dVFfo99bHREPZO8ketaFO4ge1+KfApq2A5LkykJyGbXYL5hcWNleXV18P8cQ4ZQotSmDiOEx4Rj9TSU9Mwl8nM2q53ieF6dB2PtW0b/ruuG8CSFPA8nzs9O99BkKPVCU0mmev7wKW4TZwW6OHEspLhIGDAMH/WososQakSYc/3YKBpM9EjEbaSYZrTdGMwVGMcrCgKaq/XYp3H3lmSOqBrg7u4m4lqSJIE3W6nfl0sUK2dRFgURWi32/1WU9jH0BzCox00DANkWYaeqrzUa28Hwnv1YwQOyHO5/PejGKaPv65uf5u3Tw/3V7hEVdCoKFG74VeAAQDaxdSLiOs7LQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNJREFUeNo8iTEKADAIxEL9/0udRUSF9pYGMuQOdz/CzCQRQWZSVXQ3M8PuftXa338FGABp7SMpb2OFxQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUeNo8xtsJwAAIwECMr/0HcyJRS/vRwEGoKiLik5n/mxnujqryJiLcHbvLzNDdjwADAARbDu/0NmM1AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASVJREFUeNqcU8mugzAMzFpx58KR//8jbiAOoFZtD6AHElk6JEDdBam8iYSSGI/Hjs37vmfHMQV4j63nEdbaQxTG2vvtbq0RQkopAge+TB1jMeZ8ucBVyRkiIJqUD/p+Af68Xm8zC7AS4XiY6G8YnHNKY82gcgDhv2Ecx6Io3i+HESoiiyJcEV8UNU1T13XMhd5DzuL0Wp0lNZjpuaqqtm2xQfDoTK0iMMhVxQsRDYvK5XmeJMmmiFrnyjLO+BO7RNjDnGVZmqZlWX4QSc/CWi8pF++6jhLTaHCgqZkApfTppD9f7b3Y8biFolZUzRjrnDUG/uimZ+DdPtprLq3VNBlwOYfZ4iFfEQtyoCE3LheAMY26F0UY4n9Mv3PLO+A7V4rzhwADAFzx4BgPjY4eAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAY1JREFUeNqUk0tPwkAUhUvn0dJpBTHqVv0FsNWYaFzJX3ZlIgFZFgIbE6MxRCLBWA3Q0nY8bSXC4IOedjGZO/P13EcLV9dNLb9kHBJNMkoY1Qkhuq5Tx3FyIaIonLyNia4Z3OCcUUp1HaACjaIoF+XjdYT7ppE8nCWgQio6n883B028MSiWVYRMw2CMISlQEMoBisKAU2pZli0EQIbBUR3sf4H8IFi/8+Z5jZtGvX65vEm10CiaAqTUUWbnO+r7vkJx3c5tu43vKCFLIC3GOOMww3lWnV9BzVar1+tjgaNKiJUF46lYwqOUrIBms5XTtWrNNIuu60oplVBWDggZoeMokOJoppw+OjzY39vtdLpKaDr1hRCa1GIpNSkLCy1Aa59NdgmtVatKaDgaV7bL6HIUhpi+OI7/79qPGgxfdiolzGDaryQvLLIEk4Fc79of6vbvKuUSGkdo8n8hRcZkNpPk5OwCLjd8Yf9x8OzYYsu2l2uEzpDj0/M4j4IguH948rx3GLGFBQ4oKP+nAAMAB7f00otUtiAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXdJREFUeNqck0tuwjAURbHjT0iCxDbYAntgieyBEUJihsSk7QS1bAAxKNARJITExu513CIaaEV6FVmWX3J83ydkvV63muuQpunhYIw15hwEAaWUlGXZCJGfTsu3ZX7KpZBCcMYYpQARUhRFA0qePz2/4P52GMpQCu5ApBIzxjxIsdYuFq+gRFEbCqXknLukCEG0Aeh9s1FKRXGUxDFAUgpUB+ceRM/3tN1uh8Nh7XC3+0A6cQS18YTIrpKodMfRbDYbj8e4pxaCHRSFCy6qj311LlGmtb5+ezQazedzbHDhdQgFwsr97dzxGAt+gOD5GjQYDLrd7nQ6xb4WujQIBUbHUaC/QFC/3+/1epPJpBZCTs6XbRm3WvItHyWr1erBrmXZEU+SxJ1OgoKjzN7UV/tvHf0mdOmY5xjganwcApsLqwEIwgSlWVaURcDc/4UUObd+JhsMZDV7YEVKa1WqgHovLW+K7ff7f/z9Wmk4AMVa47pJ6acAAwDbUso/kA6gwAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT9JREFUeNqck0uLgzAUhfMSXAkdOiCi4Mb//39cua6MGxdK8+pJ0mZipjDjHEK10fvl3nuudJ5n60UIpZQUXuS8BGMMEGsNWFprKSUX4uNy4ZyfAoHDOMdyEkLgTkl1u82AnssonoyMjDHU1UeVUl/L8nm9/gcEAYQEHYoQsLZtK8vyRGlRKC0U6K9833d71DiOPzeDXLMjFc5xXyMoWhss7+a3Fq+u6+q6DokfXEv/G5ckZ8zViH6j2DR5/GJzmqZ1XYdhSI8RKRgPKA3tdkK70lfDPfbbtm2a5jV970Cvt62/WD9iB1BVVX3fwwHjlQbSdF7CY/h1v0ulpCgKkXgaDEkbfOhRPC3MkVIayxhH58eMYhYZ4gmKbPOU9svii8sC3sbnoJCOd8lZjjn6NTIHITYUhmahO5nlf9dDgAEAn/cvPZYArNYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYpJREFUeNqck01PwjAYx9eu2xLjNATjh2CRC+IBT/Kp5Woi8bCLBw9GphINRoMMonR9WVufbbhsxAPzn6Z76dNf/8/TloRhqLVWSslUy1QpCyFMrOYirutqbQBl2ylGhguhpNw/bGPbbgwyBkCaEIIxBkMsYcv5m986bsQinufBA1iQneM4NuAQNpR+LT/3Dlr/AUEPrI0vy1pTyhOKidMgteLN5MopKCu/1uuEc2Gq0Zej0flg4Pv+HyBQ+aFzX0CR0uOOIFwAqxodRY+TSXTW73e7JwihGgjqUn5kjhBSSjuucHLx5ffWylLK6/F4NpsNhxc1kF3ZGvCCKwJ7jNUcFbkHnU4QBFtDm9LWoiFeZ/VKEsY5qw4dtduQFNQoTSW0GqhMVeeCjVNpJqj2x3zB68ue9nrQb/3cgMyvslsiJRiGBopXq/f5ojgWO20/zC9ONrgQQnABW84pTW7v7hljDQ5kASrsCAGdjOPV1U24pkmzuwZzTV4aKO305fUhep48TXfPqNSPAAMAXbEphoLM6uIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX1JREFUeNqUk99ugjAUxtfSwtggGRn3voC7cZmXZpdGn8G38wV8D6/0xjvvJZnJUEoLtPuAiIpbJicN9M/Jr9/52pLlcqm1LoqCUotS4vu+53kP3YPZtq21ASrPcynldxy7rvvW7zuO0wlENpuNMaYWpZRKpUxFioXh8KMTi2y3W/zAAgiiABKJOCaJ6z6+DwYdSqu3BQhfsBhjlFL0wdrtojB87eBR3TNVVBRSVqp1FEVB8HKZPZ/Pp9NpEAS/gBDNQFe6QMkyR3IllUL/Mnu9Xq9Wq/F4PBqNauFnEOe8GZSKCCkKzW2F+SIvXWvtjJNdLBZwdjabXYEsyzor0ppeBLcZXGuBkP9ZRWuJtRSWuqBMl35xxlvZvV5vMpmEYVifzNXxZ1nWyMEalCdJEseHw+Ho+c9PrnvvqZlTgAJomko0xAMxjm3flvYnCKn1zYavuNlSSTRM4sndTylLQw2NHDBEKmQqGbNuvfsH9LXfm9NDgztCiMa1TvEjwADa4Bo+zuuFWwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQ5JREFUeNrUk9FuwyAMRbFxHvIn+f8PSpTkKe1DOilSUyhk16bTJjStm7SH7UpERj6+gCG0bVvbts6544NyzlUAxRjZ/UR/msaBhmHA91v0siwn03M6hDBNE4J5nhE/ofu+TykhQKfHcayyUs27rqtu59/0+9doqZp9ve7oIBE5cp7ZizDiikanLpeX/baLB8NKO0Ib0y1g2jTyTsPsdD7jfTQiMPNcChweChqeUg4hihXoWNcVqEAw8cVd7fGucD/McMuHXZPg/4n3u/cKizdrbNd7WxkFmVS5SLAK8gqa2Fgi3YnZG0xwR3wIxgPixwb0gIYWlfNpALok3vrwiUoWgZpa/Vd3VFzKOq8CDACjBLiBGK0ZHAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNrUU0tLw0AQ3sdkk2wa21qfrYoogjcPnvwP9Rd7sArV9iC1YKEtggcRRC1iiX1lk3WygaK9VMGDftnM7Ga++XYzk9CTs0vf96MoCg3Gk8nYYDRKDF7pk0kYqjBk5Cf402ytdbV6gfZb7JtWq93pdLrd+ewgCGq1Ok6azeZwOJzDPq1UsOo4UUo1GtczUZhZH5fLM935N/X+NfaXmsSRAh3ZrsU8Gzs5GAyfX17xi51lax2P3vuMxK7rWAiwKKP57MLaytL9w2P79o6YJoCRjN56TwK49KTrSlsI5DPGYh0rFe1sby4X8uf1qyD9G4J+T1hcSul5XgZHBkcCP+P76DyvsJg/OjxItDEfMxzHldJNlKWLwkII1CaEqkhxzgFgs1Tc2igCJ7FtC8exbTu5LcMFsDhnlFKIAR1mcuD7e7tgARcG+GoIDJgwNR4t0UTgJrgsra9CSkLgjngyZEzrlc4xQCysp87lsownajxV+kydJtD0JAYfAgwAo0qgTdQcI7EAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAU5JREFUeNrkkj1vgzAQhrF9/sB05v//gGSJlCE/IIK2azNkz5YiAflQAAN9baQkytC0W6Uewpzxc3f2vWa73S5N03Ech2B932N0zvXBrg5+1nXNo9/Yn6ZxoPl8jvFH9Hq9zvM8y7LndFVVy+USzmq1Qsue0LPZrGkaOG3bLhaLh1X2X9X5xuh+Upblfl9cmgvnnDGmlTKxkUSPNBq13W4/i8IYI6XkzD+dc5eywvQlsTcacry+vaPhSWLj2CKlD+B8GNH4Hqv14ZiEAE9/bDYQx1qbeNxqDVqBhmRQBzuBrnA8DYVOp3NsYgsw9iMSK+VpKO16J4Qgoq7rXNfR4XA0WhmjtfavDCyRFMIflAbCB5GCBMQn3AEVTKIkEQ/twDu1BQXGSKGI3xhonJ2CoaK/ZYzdblzwsRDJMYpwCsOFzyamTPfoNYBNOwn2JcAAJXXV9kM4kCMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUlJREFUeNqMkb1OwzAQxy+OExgZeAAk1IWhon0V1oqB12BkR0LiEUCCCioxQFmYIR2YWkqFBFKqxpQ25It8f5gzShADlWrrZ/vs+/vsO+n0vMObzQZ8zD8hTVNIkuSHOEaSGOeK5PdMoPW0gnDO7SzLQJIkWLYJfwDJI6gZ+L4PCqVLi4MgwGD8laRp1jZNE1RVWVos/OMwvJaZMRnUtxs7lNJ1qij47wzyPF/IeDyG6Tvr3XWvDoj2cB/NZ9PWRNctz3WAELIwomEYwBhz3l6G+2g6Mg78tnsz26zVLlbU1XrB8w2RkCzLgWOPoggsywJd12HKmDbsP+49P/VHqPOqFItZZEw9PDrelanSCsJoy3bcNe/Ls0M/GLmu3bk8O2mjjy9yhiR/6yPW4s1KiYrI5V6B5EKApCXFf8WtLqkQNi8vqBA2fAswAMMZzeG4WyTTAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpiXLpynZGR4as3737//v0LDH7+/AWEMAAR+wWUPX7iBECAAQBhgCfi/ZM1bwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUdJREFUeNqUUT1PwzAQvThplzIwsJUhA1kY+Av9EawVAzPwBxj5NxVi69iqG0qZS+gABCGQkihtonwotZMzvspBXZCKpeezfe+dz8/GZDqTjuNAkqbQNA0IIaCua+BcbNdCcOB0JurfHEXvxUMmpUxIZBgG7DuIr0bG1LSoqgosy9pbvNlsKLwxVWWUqpb/Iya+4HxsHvR6ixPHOTcZO6IC9CZEVK3hNiI20GC7RgjDEFareP7kPt4xz3uukmQ9jKJwXZYFMMb+vDGOY0L6/fV5Sw2Ytm3LuetG/eP+fcfqnkmQNhmiTVGuc8jyDIIgoBtd//318sP3l2SYMRgMiENW06O7V9c3F4yZQyU6zYvisCzLRBm0LIr8YTadjBSnUCipbituC1DPHY2ugqnPkH6IBApCA3ctlpqAOllpoaFzuAPaw48AAwDbB9BTAAnfJQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpi3LvvgKqq6oePH//+/fv79+8/f/78+vUbDED0HyAEC/75++fq1WsAAQYAbM4oZ81Xt6sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUpJREFUeNqUkbtKA0EUQO88drNJdjMJSSyUoGghmkJE1HJrsfKBGEtLn5Wf4FfY2lvYqaT3B8TCkPULEtiwI/uY8Y5sEUQxXjjMneGemTszxPd9+BYEoTkkR+eoHJMD/0EyaxZiI2xMzpAYSZDUbMLHRJPbJ6dnHcb4VhzHbfkhF6JI9qWUr1JG3e7T4x3WRDkxwba/xMNOZ67Vmr0ploq+UhqyTAGlFMJRCKMwhMFwCMPB4Lnfe7sKgn4PndCcxs4vLlc8z3sQ1WqNcwvwVCSBJEmg6DjAGINy2QXO+GaaZvca9P57ELzQpaVlB53bZnOqViqVQSkFv0W9XjeI6ZnWNU4F3dndO3Zdd9GrVLDVDP6KRqMBnlfZWF1bP6LY0oEQAtI0hUnD1Fu2vW2+pu3gvf4jFwoFM8xTQkjVPIjWemKZWxzrQXwKMAAaxXA5BvQ04AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVNJREFUeNpiZMAEjEDMBMWMUPwfiv9B8X+YQnRNLEDMCsRsQMyMpPkvEP8C4t9A/AdkCCOSRpAmtp7+SZEsrGye37591/7y7avy5y9f73/59PnGly+f9q1etmg9UM03KP4FcxZLcVmFgrq61mxuXh77v//+M/z584+BmYWZ4f3792D88uUrhjevXp28euls6fWrl+8C9XwGOYtlwuSpBgryiofEJCQ0eHj5GZiZWRiYmJgZ/v77C6SZGNjZ2Rn4+QWA/H8yzGwcQYwM//a/ef3qE7O5hSWXo7PrDikZGRlOLm6GX79+M/z9+xcr5uLiAtEcTMysGnduXtvB3NrRmyEsLBwjKirGAPQnTo3IBnz99k1aUET0PRMrK0sYUDPYRmIBSD07J6c30///DNrc3NwMv//8IVozyPb//xmVmBgZGQVYWFiAnP9Ea2ZlZQWp5wcIMAAiP6Ghx1+GGwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpifP36NRMTEzMYMCEBRjBgAIP/YPDv3z+AAAMArN8L7foJbfsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUeNokxsEJADAIA0Cise4/mBNJtNDe61BV58nMH5IR4e5mBmB3Z0ZSd18BBgDIAA7SuCPczwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scrollview-bottom-corner-color.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiPHPmDAPRgAWIjY2NiVTNxEAKGFU9qpoYABBgABtHAx0Ze9+BAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2rt3L5OTkxPTt2/fmP79+8f0//9/MI2M//79i5WNjY9sxokTJwBXtEPtiHmeoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpi2Lt370yG////z2T69u0bA9O/f/8YmIBcKAuN+Pv3Lx4uTjE0Q0+cOMEAEGAAD7lHUquXzXYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpi2Lt370ym////MyAR//79gxJoXDTi79+/eGSxGQC3AyDAAN4mR4fIJKx/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpi3Lt3LwsDA4M3EFsBsQDL////fWVlZT3k5eUZ2NnZGZiAAtYyMjIM//79Y/j27RsDC5DBC+LAAEgLAwjDBUCyKCrIFPj79y8dtNDEDGQBUBB+/vXrFwMsoJiAskefPHnC8PPnT7BKUBBufv78OQsQmwF18AEEGAD19p6n4TmfGAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpi3Lt370wGBoYPQHwMiLcy/v//f+bPnz8ZHj58yPD48eMdTN++fWP49+8fg4yMDANQ0poFxIEBIJuXBSgKFwCx0VWQJfD37186aKGJGRgCsAD6/fs3KIA+g1WAOM+ePQOpOMpy4sQJkIJPQHwKiDcDBBgAYcihtIbGbDIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUCFtj2rt3L9P////h+N+/f2CMzEbGf//+xRDDpgdqHgArhUbwsMigfwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUCFtj6tpwjCnS2Yzp2tufTP/+/Qfif0x/gRhM/wWx/0JoOBvGB9JoapD1gsy6eu4kADcbQ5oyd/JRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUeNpi6tpwbCZTpLMZA9O1tz8ZmP79+w8i/jEw/QURENZfMPcvjIXERYj9hepAU4xmFNj4q+dOMgAEGACr+UQz3IvZcgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADJJREFUeNpi6tpwbCbTv3//GJj+///PAGFhEH8ZmP7+xcb6C1UCZiEkEGLYzANZBBBgAL41RzPloL1CAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi7NpwjIWBgcEbiK2AWIDl379/vhpyEh6aClIMXOxsDCz///+3FpeQYHjyjYHhz5efDCAVvB9+ARUz/AMRYAEGEIYBsMBfdAE0FX8Z/v5FEgBx/gIFCaj4i24Gspa/f0Fa/qK5A9UMNBUQa/E5DOIXDFvwew7VUCagwOffv34xwFSCBI6/fPaU4ddPkOB/cCBvfPvqORMQmwF18AEEGADSXZ0uKgg45QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKdJREFUeNqUkEsKwjAQhv9Ktq7tXbyhN+gtdCF4goou3PlYiooPqCAWCm0zE2d8EWNBDPwQvnwzkyTq9dMEwEWSSobRNrdJUVZYrvdYbY6j1uJcYlcAnTiGc65rmB0qjfjM3BbAeC3dGwrBt0E+IC2hN9DDBsMDD8MreRp+Dwp7cJPB/GvsxxQO70H44/lkrYL8/oW2rpGdDgrGZj6bqHCVTCWDmwADABEdo9VXvegQAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUCFtj6tpwjOnfv39M////B9Oo+C/T37/o9F+wHIiGicH46PqBZgIAEU5GmoIeoQQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKJJREFUGFdj6dpwjI2BgaEOiBOAWJrl379/jRpyEhWaClIMXOxsDCz///9PFpeQYHjyjYHhz5efDCAVoh9+ARUz/AMRYAEGEIYBsMBfdAE0FX8Z/v5FEgBx/gIFCaj4i24Gspa/f0FaUMz4h24GmgqItfgcBvELhi34PYfp/de/f/0SZWZhgQssePnsaamIuCQDCysrOJBr3r56zgzEUUAFEgD4NZMFqr7d7gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUGNOVjzsKwlAQRU/kbUHM/tyGlZW4ilTWrkKwsfNTit+IWgmBJG/us/BDjAFxysOZe2ei4XgSgD2QAP1oe/MhywuW6wOrTTpoLa45uww6cUwIoeukQKFAAUhqO0m8RhLO6uDbsCownMnewKzRqICHUVl5GtUMq2eoyZB+1X60qH6H8cf75j2Szk4K+LLkcjoiKXHz2RQgBUZA7w6pZqOrnOa4eAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUGFdj2rt3LxsQtwDxEyD+z/T///9GGRmZamtra2knJycGkEAyUIDh379/DN++fWNgAjJEQZy/f/+CBUEqGJAxSAUDMiZXAGQDDNNOC03MQBEABsrrX79+oQTQ3CdPnjD8/PkTrqL++fPnfWfPnn1x4sQJBgBuoxapBuMd2gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUCJljmjx5MpOFhQUTIyMjEwjAaGTAzMyMk48uBzODh4eHae/evQACDwVlbTA8UgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjCquZyKRtbM7ExMjEBCWYmMEkkGYGsZmhNIgPZYNomDiSGmS9OqLsTEt3nwQA4LgFKynwVH4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJlJREFUGJVjCauZyMbAwFAHxAlALM3CxMTUKCQqXiEsLsHAwsrGwMLIyJgsJinDwMzCwgACIBWirGysDDAAEmAAYRQBZnQBFBXMzMwMzMwYWpiRBdBUgDjMmGYwo5nBjF8FM6otYENR3YHVWnwOI8r7r/nZGEW//2Ni+PPvP1hg7uuXLyq0FaUZONkhgVx/8/FLNiCOAuqQAAAUvBbWQgxxhgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKJJREFUGFeNj8ENAQEQRd/8GYvEdSVCogBuDjrRgDLsSQc6cKEJFShEspsNBSA4CdZKzPHlzf8zNstWd+AArIFljCZTrpdz/1jki1NZuGQiSVp0ewPMbB6SAaCkgaQ0JPEcSYRXwbfhL+DuhMt/G5J/hrqLcPc34NWVWuOjxat31Ne+Z9QZ/70fMtq6IanUOG0y7BhlkSNpHZvdHiAHtmaWPQB3Dxpmsh5qIwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHZJREFUGJVjmjx5MhsQtwDxEyD+z8TIyNgoKSlZbWRkJG1hYcEAEkiWlpZmYGdnZwCyGZiAQBTEAdIQDBJFxkxwGQQmS4CZmRmO6WgGNaxFwcBAeQ0NGHgAzX327BkDKysrAw8PD1hF/ePHj/sOHz78Yu/evQwAKaocei2dPwMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHpJREFUGJVjmjx58n8gfgLELUDMxmRhYcFgZGQkLSkpWc3IyNjIBCQY2NnZGaSlpRmA7GQmIGAAYZAgkBYFq0DGcBVImGQBZmZmBhimoxnUsBZDABoosAB6zcTDw8PAysrK8OzZM5DEAqa9e/cyHD58+MXjx4/7gCpqACrxHHpLd88mAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHRJREFUGFdj3Lt3738GBoanQLwAiJsY/wPBz58/GR4+fMjw+PHjDqZv374x/Pv3j0FGRoYBKJfMAuLAAJAtygIUhQuA2OgqyBL4+/cvHbTQxAwMAVgA/f79GxRAr8EqQJxnz56BVMxlOXHiBEjBCyBeBsT1APoAoYpapz15AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA5dJREFUWMPNmMtLG0Ecx2eDRopFGijUVCpeSnvxVKSn/geFXAIVLJ7EQntoCsWKPQqpLYgQjW9UtCD4QOv7GYOoSUWJokERUfGBDxRBQw/SMP19hxGs7K6JZiGBD4bZ33y/38zOzM7KOOcsHoiLEPEZJJpPc3Nz0sDAQBbxjngvwfcsXBsfH2eRcpsgSk9Pj214ePjX6OhoyO/386WlJb68vCzAd7ThGmpQiz5jY2NMj2iCKJ2dnS+HhoZ+z83N8Z2dHX5+fs5DoZD4e3Z2JrjahhrUog/6QoMCMjUiDWKiX/aJfuHF5uamMDk9PeXHx8e6oAa16IO+0IDWyMgIu04kQRDCtbi4yA8ODoTB0dFRVKAP+kIDWtCkUWJXuSmIqaOjw7GwsMBPTk744eHhnYAGtKAJ7cHBQXaJXhClqanpVV9f38X29jbf39+PCdCCJrTh0d/fz4BekMTu7m7/6uoq39vbiynQhDY8KBQDWkGUxsZG+9TUFN/d3TUEaMNDbgeaQRLb2to8wWBQDKURQBsecuTVg9hstoddXV1/sey2trYMAdrwkF6qQZSysrLXtLb5xsaGocADXvBUC5JQWVn5eWJigq+vrxsKPKqqqr7AUy2ImYJ883q9fG1tzVDgAS94qgVJKi8vL/F4PHxlZcVQ4AEveKoGKS0t/UrPBjGzjQQe8NIKYi4qKrLTTBaPdCOBB7y0bk1CZmZmBm3BYTwX8KAyAmjDA15ak1UhLG632zc5OckDgYAhQBse8NJavvgkFxYWfqDDDJ+fnzcEaMMDXg0NDZpbvJl4TDM6gE0Hp6xYAk1owwNe9fX12g89IiU/P/9NbW1tGMM4OzsbE6AFTWjDA151dXX6xwDiEc3qEjrI8JmZGXEovgvQgBY0oQ2PmpoaBnQPRsQ9Ir24uPhne3u72JJ9Pt+tQF9oQAuaUluprq5m4MajInGfyCgoKPhBszzc29vLp6eno4IOPlghYWhAS2qaaHtnl0R0eJYd07Ozs9/SThhsaWnhdLwT9xsHHDVwDTWoRZ+cnJxcORIiBAVjV4n4dUIOJe7rs7y8vI9Op9Prcrn+0NLjra2t/4E2XEMNaqnPcyJVapgqKirYdaJ6wZITGDPdSjy1WCwv7HZ7rsPhcBLfJU60Wa3WLNTI2hTZV6Fly9S41SunFE0mHshRSiOeSNJkm0XWiAA0QkyPO72Ey1AJcgNMkphlmxKNUNz9W+Ifu9qUIf+T8EoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-disabled-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCRJREFUeNrsWElLW1EUfi9DY4yCimgcUBtUuihtN666iYlBA6LYLOoPcOO09SeI2J0TKKIiCC1oF7oJiaXdZOFGbG2xZKGxzvMYM+f1fOl7ksQk5mkCLnrhkDfd833vO+eee15YjuOYpzDY/0TiEWFZNulJ09PTsvz8/FI6LCOT8JeDZH+Oj4+3S0pK/Mn60ul0oV+ZGNLz8/OvFArFW4lE8iI7O1uhUqluXwAv5HQ6Gblc7vH7/b89Ho+tqanpx+LiIpcqRdi5ubkKAm0lFSoKCwuZnJyc0POYGz5fuHZ+fs4cHBwwpI6DyH00mUwOq9Uak1BdXV1SRKCCnlR4V11dLSUiDL0tEwgEEr6dVCplZDIZiDB2uz1A6nwmdb5YLJY7ZAwGw71EQOJ9eXl5LVSA42AwKCoBKYQh4lBnc3PzK5H5ZDabI8jU19f/ezZeOGZnZ3VlZWW1paWlIZJQQQhFsoY5mAsf8AWfDQ0NbPgzt6RjkZiamqrMyMgw5eXlMV6vN6TEYww+4As+4dtoNLLCPWHEWjUSSkZTZWWlFLEWG45EeQOfFCoTnX4gNSISLVoRdnJy8jUl5fOsrCzRobjP4BO+gdHY2MgmUkRCy1Sbm5ubMiWiB3wDgw6/E0YgJpHm5mYlFaSqzMzMtBGBb2AAi1S6jkWE1Wq1GmIric7oVA9gAKulpWWV44EiiFDhUhPbtKkhDGDQCiqiw5/YHaKJIHFVWPfpJsJvBZk8ZvBOjlABCmXyfSX8sYPHiCjlEUSo8Lh9Pl/aFQEGsOISOTk52b+5uUk7EWAAKx6R4MLCwibtshxkE9MoiRlYJBcXFxywhPyIJsKtrq66qH/YuLy81FDjkxYiV1dXaKA2gCWsmDtEkK9bW1tLarUa9SQtRI6OjhhgAGtiYoKLt9cE+vr6VnZ3d7cohinfa+ATvoEBrER7Ddatm2QzU3Fro6LDkqVECbfbzTgcDoTfjFNghVfvaCK44xsbG7PTLmmhHqK+uLg41Gk9tm4cHh6CiAW+gTE6OsqFKxILAXddvb2939bW1pZ2dnYYl8v14HBgLnzAF3zCNzCi97N4PStOnpFl9fT0aKlvNVCrx6LLEjPOzs7Qq3Jk1v7+fpDAbusdGRm5ZdDe3n5/88yTUbW2tlbV1NQYCwoKikAGSzteuCA3lujp6SnCsbe8vGyemZlBOJwgMTw8HLGtd3R0JPc5weeREtbW1vZSo9G8oU4LHZxcqVRGPIwwXF9f+8g21tfXV8bHx3+hkPLh8A8NDd3pLTo7O5P/wOJzSU6mgFGXpdTr9UXUnavDPzm3t7f3bTbb/t7eHsA9vPlwb3BwMGaD09XVJfrbVyAEhaT8r4S/Lqw4JLqfLwP4DQ4MDCTssLq7ux/+Ec6DszFWXZAnxInZe57U3xJ/BRgARVYyv4nD3moAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-disabled-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGhJREFUeNpiVFNTE+Dk5IxiY2PT/vXr19Xv378vYxEVFU2QkpLS5OHhYfj69av+06dPOVmkpaWV5OXlGYCqGYCqGBgZGZWYgCrugQRYWFjAEiA+05cvXxb9+PHj6p8/fxhANJA/HyDAALRmJzIlcakAAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB1jUFNTk9bX199oamr6E0SD+AzW1ta7QkND/ycmJv4PCwv7D+QfYAAyPpeWlv6vq6v7D6LDw8N/MiQlJe0CCTQ1NYElkpOTwSrlysrKtoMkQDRQpRwAeJEtgtzX+HUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/spinner.gif
Content-Transfer-Encoding:base64

R0lGODlhEAAQAPQAAO7u7gAAAODg4IGBgdHR0UFBQXJycgAAAFJSUiEhIaGhobKyshISEpKSkgMDAzIyMmFhYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAAKAAEALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQACgACACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQACgADACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkEAAoABAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkEAAoABQAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkEAAoABgAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAAKAAcALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkEAAoACAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAAKAAkALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQACgAKACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQACgALACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-ascending.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK1JREFUeNpi/P//PwMhwITG59DX1+8B0bgUseTl5YUyMzMXJwMBkM+KTZHAvXv36kVFRRlevHhRCuQLoStiLS8vj/7z54+yoKAgw79//+QLCgoSYKbBFAleuXKlhJeXl4GDg4OBh4eH4datW3lAE8VgiliBbkkB6pYBKWBiYgIrBAKp9vZ2kNvYWEBuefv2rZ+qquoXfn5+TkZGRgZQsACt/f7u3TtvoPx0gAADAHykNUXFhlgVAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-descending.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANdJREFUeNpi/P//P4+JicnuX79+WTAyMjLAAFCcgY2N7cSZM2dcWYB8/rKysiOLFi2yYGVlhSv6/fs3Q0JCwkGQPEjRj7CwsOsXL1789OzZMz6Qaf/+/WOQl5d/HxISchMkzwQkPgLxBR8fn30g3SAAUgTk7wYyz4PkQYr+APEDS0vLjcrKyu///v3LoKam9sbU1HQzUPwhSJ4J6gSYabu/f//+39/ffzuQfxGIP8F9AcWCQBy2cuXKtUA6GIj5YXKMIAIKmIFYFoglgPgZED8BOQ8kARBgAHkkbCsrrUGyAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-highlighted-pressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNo8i8sNACAMQpH9p6oTGb2oB7Sx9kD4vFDMKufalEQAxHVB2SVEvvIczPfHlZ/fnY3ejgADAPV/LBeRV6LeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUeNpi/vT5C9OPHz+Z/v//z8TAwACmYRiZz8AAonHLo/M/fngHEGAAmHc1lNgXMmwAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-pressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiOHPmDBMDAwPT////cdIwjIuPRT3LkydPAAIMAGirLBgXU933AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNocw4kNwCAMADHd/qtlF74QfqgaS+a9x//e68857L1Za/k5J2MMeu+01jAzaq2oqi+lkHMmpeRjjIQQEJFPgAEAIdRCSGGFwR8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableviewselection.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAACXBIWXMAAAsTAAALEwEAmpwYAAAPU2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarVd5NNT/17+f2W2DsWYda7KF7LLvawyyFY2ZsTVmxhhEZElJaeGbRKlot6QokZISlbRIUigVXy1oQSIxvz/0/X6f5/c7z3nOc85z/3if1/ue+7r3de95n3PPG0CcTOVwmCgAiGfxuBRXB3JwSCgZ/xKwIAwSYAFaVFoix97X1wv+R5t9DggAQK8elcNhwv/NiNzgkFAARBcAJKOXsR0ASEYu4wAAkEzhcXgASAwASNJiqHQAJB0AdLkBFEcA5BwAEKOXcRMAECOX8T0AICbTonkAyAsAHIlFj2UB4CcAcDZ0RiINgKgLAHR6Ii0egHgAAOUQH8+mA4g9AwAtGofLAxD7BQDqwSGh5GXJUWgAywcAuMF/fJvnAOryAVSm//GpDwBIdQJUBf3jm6YAAgCI9OPEqDVGAACACDsAYF/z+dOaAPgigMVCPn+hks9fPAmAHgJoY9KSuMm/54UgDwH+t/tyz78NjQCgAEAZ4mEEiUAmUaXoEIw2VhqHxksSrAUYgieEJkUciEdFf4mzSeOSVKlJmSjZablUBYziQWV58nFVfbUWDVvNdi33Va06rrot+sqrSwzRRlvWPDUxNS03m7Zwsiy2+mRtY5Nie8UecbBzDHc65PzA5bObkLu2h4snzSvTu8Sned1bPxRlpb9XwObAnesrgm4G94dMh63YYLjRMZwakb6piHo68irtAX2AMR61ECMQKxGnsFmFqRm/mmXENueYJVhwjRJ1eKuSVJJlUyS3CG5ZTP2cNrj1fvrVjPPbDmZmZsVle+eYblfOFcz9uqNn55W8g7u259N3O+9RK0AVfNw7um/hgEKhadG6P8IPJhXvPlRT0nK4p3So7MtRgXLZY+rHTU64VARUhp+MOZVyeuuZvLMHzu05v7+qsLqopqi2/EJpXdHFgku59Vsbki4nXKE1rr/q1WTXbHRNrYXUsnR94sZAa+vNi22Hbm27Hd3uf2dth2aneOf83eF7LfdPd+1+wOsOeqj3cPZR9eONT8SetPewnyo/7evNebb62eu+gudWz8f7S194vFh4eXYgeFBwsHmI8UrqVffr1OFVw2/eHHhr93bq3dmR0FHiaOef28ZMxiben/5A/6j2cfBT2Xj4hNrE6GTN55Qvjl+JXz98a5o6MM2e8ftuMavzQ2dOb972Z8xC1SJxqYnPBwAxMAce3EbIyC6EjypCm6InMDewR3H78YcItQK9QmhhT5FC4hsxa/EjEjjJzVIPZcxla+Xk5NMVRpTslM+oiKjGqHVrGGjmrRxapaXN1WnXk9QPWF1sMGSktibY+KTJgBmYW1okW1ZY3Vs7ZaNi62sXbV/kUOd4z2nEeclVzs3M3deD4cnzyvIu8Dm+rt63ze8B5bn/WMBU4Oz6pWCREFKoRJjCBpWNCuHyEfKb5KnKkXI0KboEQyAKouajP8e8i30R1735OrMmvpy1j53FSUyI5volOvEMk5SShZPnU0a3PE29kXZ2a3H6jozYbRsyXbIMs+Vy0DmT24dy+3YM7/ya9ysfu1twj3iB4l7dfSb7bQ7YFboXhf1BPUgv5hzaWrLj8J7S/WUnjlQcrStvOdZx/NGJ5xWvKkdOTpz6eQZ9lnCOeF62SqvauMa61v0CpS74IuNSUn16Q+7lfVfKGquv3mi63dx97V3L2PXZVsJNUpvCLe3bVu1+dxgd3M70u1vv0e47dql0LT7o6b7wMO8R7bHtE+knH3ran5b3cp459cn1fXne1l/yIu6lzQBp4NXgpaG8VxGvjYfxw+/eXH675x11xGxUePTDn51jp99nf9j4ce0n8jh2fHKie7Lxc+WXgq9bvsVMhU77zrh/t5+1/GEyZzJv/nPtgvUvl0XfJSrfg88HACIYAA3OwjzijzSjdFDn0UboDgwdK4K9g8vE2xMECW8FrguWCWUJs0ToxA2i68UCxSmkYImNklSpOOlUmTzZwhXlcvXytxQ6FfuVPil/I8+pImpC6gQNkqboSmEtuVUC2hgdRGdad0JvSP/+6kaDcsMsI8YaR2N9E4LJO9M2swrzXAu6pYOVvNX3tX3WjTYHbVl2bvY6DojDkON1p6POKS4+rnpuQm5j7m0epZ4cLxdvBe9ZnwfrTvhu8fOgqFNm/e8HHAtMWO8QRAoaDW4IyQr1D1MMe7/h8sbscL8I5YgPmy5SUyOdaaK0l/STDGaUYdT36OaYzFifOIm4/s3lzNh47fivrCb2No5XAilhgHs6kcWzSRJIepZcmcLaYp6KSe1JK98an26dIZIxtK06My2Lkq2aPZNzb/vR3OQdrjsVds7kde+qzE/dTdmjXYAqGNjbsK94P/uAWyG5cL7o+R9NB4uLuYc8SlYexhweLr1RduxI0tGgcpNjksfhBKpCuJJ0UvKUzGn5M8pnlc/Jn5etkqqWrJGolbwgVSd7Uf6SfL1Ug8xl5StajXpX9ZqMmx2u+bVQryfe2NlafvNu2/CthXb1Ox4daZ2X7n68r9616UFl99wj/8cXe8SepvRO9+X3S7xoGEgYWvNqcXjhHWbUdaz6o+WE5Ze9003zdXw+wPLuAwDAmQIcjgAIUQTwcwUoWAuw0hxAahOArwhAgAWg9CUB+X4bEIf9f++PFWAJoZAO5XALRhAMooV4IRzkINKMDKNwKH1UICoDdRr1BDWPVkP7oTPQVeiXGALGHBODKcM8wqKx5th47EnsIE4K54vbg7uLJ+Bd8TvwdwkihPWEMsKIgJ4AT+COoJQgXbBBCC8UIdQkTBKOF74noiGyR2SaGES8JqohWi4mLLZV7Ks4S3ySFE/6KsGTmJfcLiUsdUBaRvqUjL7MNVlP2eEVyXKCcqfk7eVfKnAUJRSblUKUfimfIq8jL6lUqW5UI6l1qGdomGv80Gxemanlskpo1UvtUzqpuh56WvpY/eHVHQbnDHcbpaxhGG8w8TddZ+Zs7mLhbuljtWltrHWKTY5thV2z/ZDDZyeSs4VLtGuRW5X7aY8Dntlead4cn+R1Cb4JfgwKy58dkBlYsH5vUEnwhZDboT1hYxv44UoR1puCqDmRlbT7DHSUYTQ9piy2dzMwHeJ3sZ5w5BNiuVcSl5I2JTduEUllpT1JN8k4mSmetS2bv52ZO7kzPm8iP2b3lwLO3rn9uYVaRfUHPYv7SraVuh4JKGce31Fx9eTjM5hz5lUJNacvjFxa0RB15djV99fWXk9sfXxLpJ3acfUe0hXSffzReI91b35fywvSgN9Q9us7b6ZGZP50e0/5mDy+bTLjS9K30GnlmbHZ0jnd+bMLAr8oi+FLWXw+ABhCFByCDviGKCHuCA85jnQhsygyyguVhjqLeoZGo43QVHQRugM9j9HDbMIcwjzE4rEO2AzsdexPnAUuFXcDD3gnfD7+KUGBEENoEhAQCBWoFlgSDBK8JCQkxBC6JawhnC38TsRT5BqRTMwjzorGir4S8xPrELcUv0EyIV2RsJK4Jekm2SMVJjUmnSSDlzkmay77fAVHTkiuSt5bfkahTNFGcVzpmLKn8hz5okqcqrLqoFqFeqTGSo0JzYsrs7TWrVJc9UP7kc4Z3V16Ufquqw0M5AxxhjNGI2ueGrebtJleNmswb7Cot2y2al3baf3M5o3tJ3uMA9FxpZON8waXNNcSt1r3eo8qz2qvOu9mn7vrenz7/YYp3wKQQKX1ekHmwYEhvND8sMoNNze+jcBtUqJ6RsbR9tIbGEPR+BjT2Ki40s23mVMsbTaNU57wMBF4VknJyZdSplLN0xK21qb/2GabuTPrQY7Idp/cih1Tefq7duf371Eq4O59sJ98ILHw9h+iByOLb5eoHC4rszsyXl52PKJCqrL3VMEZ73Pq599X19UW1G26ZNagcHmmcaip+drl6+Wt2W3022F31nYa3yN3SXSLPJx7PNzT0dvYd65/z0vmoMcrm2HpN1Pvno3WjuV8WP9JaXx8suVL3jfvaeJM12zxnPdPkYXriyw+HwAsIAWuwAyyBklA6pEZlAlqC+oGGoV2Re9FP8coY5iYJiwOG4Q9j13A+eBO4/j4YPxFghghkfBUwFigXBAvyBUcFgoQuiNsLdwkoivSQDQmXhV1FH0gFi42Lb6bpEvqlkiWlJXsksqQNpB+K1MiS1khuaJfrlg+REFNYUrxmlKhMo28RkVIZUK1U+2Uep4GWzNspZeWzSp9bR0dVV01PSV9rdV6BmaGbkZha9jG+03Omj42+2GhbOlqlbi21nrMVslug/0Rh2EnXedMl2ducu48j14vDe99PhO+FL8a/xUBGYEfgtyDm0NVw4o2EsLTIqapUZEDdH/G42ifmJtxTptb4+1YjRy7hLZEW97dZJ+U3tSItE/pqRlzmXnZ8jn1ua47HufRds3vPlpgtPfZfm6hcNG1g5TixZKjpaSy5COD5b7Hbp0wrTh/UulU5RnNs1Xn9asaasxqr9fZXeyod294e4XbONuU1rzY8scNjdZzbdq3atr179R1GtytuU/sKugWesh9NPLEr+diL/EZs+9+v8aLrJfPB2WHgl8dft3/Ruot5V3eyIXR9j8Hx/gfpD6qfVIdV5lQnlT8vOLz4pfXX1u/lU/FTBtOT89c+h4/S57t+5E0Jzx3at54/uZPz59dCxYL537J/Er/dW9RajFy8cLiwpLr0oGll3w1PpPfyOcDLP+XAABA0JHNZHPJXo5O8P9r8cykv2qQAECYFemz7jf+wOH5BgCANAD8TEz2dwYAMQBELCrWxf03JtOpTp4AoACAGKTFOPoAgDAA4hXFdaEsc5HgOKqHLwAQARAWgxXov5wfSecwfb1+430cngMFAGQBkBOMROe/YprSYgKCfnO7uEmUQABQB0BebGZ7Un7X+kVnOP3WhiKwmD5ey3VRsrE89wAAkARA6YMLUIEL0cAAPfACR3D6fZKBCmRwBDZwgQGJ4AKjwIXov6PWwyhwIfbfWHoQBVTgQjIwIBE2wxhwIT4iNocL5H/LTgM2JAETGJAEXINqg48Gv/6OcQQ2MIEN/7A8/8PzV55/YmOBDuz/lp8JbOBGxOZw4+ujkg+zUy3Xx2A0MUYYE4wDxhpjg7EAMkYaIwd6GGOMOcYeY4uxwphgLB5NXJ34u87yfCL/7tPzL83AANZ/zIz2X9TA8v8dAAAnBnA0HwCg/dK5/3hrPMYWHgCAI5uTyo2NjuGR7TkcJkOX7M6i6euSjQwMLOBf/0ZN7hNwtO8AAAAgY0hSTQAAbZgAAHOOAADi5AAAhvsAAHXhAADNcwAAMq0AABrd66B7UwAAAD9JREFUeNpUirENgDAQxKLrKCiYi72Yjo3y9tOkIJVl2eN+3lznkTkr2ilcJEXH5eCvGTXYAUIZNNDR/QO+AQD8FEZFeDuoxQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAWCAIAAACOpGH9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jWLRqJ8OFq3cYPnz8zPD//3+qYKBZAMWVP/kpEKROAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAYAAADtlXTHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADdJREFUCB1jWHjqkTwDkIgHEftAxH+GRat3/Wc4f/XOf4Z3Hz79Z/jz9x+NCLDxYCthloOdoQAAdj5sTxjpYWAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAYAAADKO/UvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApdJREFUSMed1UtPE1EYBuAaMS7QhMiCxhjdqBtxqT/AG0tNcGGicaEu5EeoS9l7CySmBakhphIjJRHkqlQoNG2RAikU7CW2tbYULKD09vqe4TQ0k+l1kmc575zvnG++o+uaCejKOEAH6TAdpUbS0wk6SafKvXyIjlATnaWLdJVu0C26Q3eLBdRRvfzieWqh+/SEXlIv9dMQjWgFiK830Gm6RG30nMYpTFDTCjhG56iVntIXShu+raFjYBYd5jG8No/A0PsJXe8G0U3qEhpkwG3qpIBx2odOiw1v3g/j46AVo5MOTNkXYJ/zwOlegWvBi8JNrJcltMqAmMHqhaFvHAPD05hxLsGzGkQwFMWv3wnEE5tIbCSxsZlEYRl6uQeiBL8IMH0Yx8SUS3k5Gksgub2D3VQKmUwWuVwOOew9+RCximZ6SBNGmx89/V9hnXXDF4zgT3Ib6XRGeVHr0clGapLn/4xSxiGHsgIRsLX9F5lsFtqv74eITjxD92jUOPUDlhEbPN6AsgIRUO7RyVa+QI/oZ9eYGzbHkrJ5SgllI/ZCRF9coReiccyjDmUVya2donugFSL24zqZRMiQdU45xn+7qYoC8iHH6Sb1iZBJ+6JSijjGmkNsLg9i65vIVliKupy3IsTqXK4ppLFwYz/PemoqJ3/Ejylknl5RNla0dzUhhc021m3zYdEbrPqI821/TbZ92mJfVX64apqt8Ads2xtCfjg8waraXj0K2sUw6pnxYdkfrvgHLDaU4iYGza+FKxoF6vHYXDgeu1na8HwAoej6/lDKag8l9aBull3cLgd1podhg98DcK1F4A3FNcdjsSvjstxs0YgTFKnkyih1eT2Ql9creXlZSl1eWteovpZrVB1WV+pC/w9TNVqlMEGHagAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAYAAADKO/UvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUSMellUtPU1EQx0uAsEASIgubaHRj3IhbPwBG3ZpgjInGDW78FC71AygEEtMWITaGGiIlsdgioKVP+5CHaS21D9PW2lJqLUb6GP9Tz60V6eWWnuR3d/eXmTlzZlQ6Z+wMOA1OATUYAH2gB3SCDqCSgz93wG1wE1wDl8FFcA6cAMdAt5yMPxawAOaAHoyC+2AEXAUXRIS9oKuZhA4gCZbAI3APDIGzoF9E9a9k8rmJdECjf0VPZiw0PvOGxuddpFkNs6wEVsADMAzOg+P7RSrfRoi865/I7Q+Qzb1Bi+889NJkpacGM00YHaS1R1gWAxPglhD1N6am2skXKLdToGwuT1+/5SieSFNgK05O70eaN9tJ82KJNNYQizJCNCxS65WKrSKcKlOtUrlcoV97e1Qo7lI6k6vJlm0+mp6ti6IitSFR7O66ZP9hYalUpu+FIkXiKbK61mlq7i1pHVEWLYtiD4rr7zhQIkVXrlToR/FnTcQRaRc8UrH51q6IPupsKpEOizgiTs1oQaFtn0lc/4hoyJ5DJRwRp8Y14mLrLH6WpERDcmf3HSqRasTFDiIaw6JHasgx8UQGFEn48K19wfWbV/2SRC/emlqxhGvDKdneb0qSWXADnFQsqSClzHaenOjstiVWb1CSPGs9HXQzP4vXrnoko0curMEelEbF0a54MxSnSUekvWYzurfaa3tPAFE4aw9w5UgPMBhN0pSzPpwetjwK1sJJmv4jyCobSpW/QymR3ibzWkxKoXE8DsqOx1AiS75wikwfYgi/9nNZ1IBTuC4E/w/qJisjJSbYY1HES7Iro2F5GcXLHBONdLeV5SW3RtVK16jcQu9SstB/A7wYWu6etp7HAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdFJREFUOMuVlNtLAlEQxucp6CnoKQj6w4L+gKC3iqR66E5IN6Ky6EZKmYaR0c2yoMjMXNJASbtApUTZxbVVS9t1mnPKiDJcB/bt/M7MfOf7FmpbRiD71bXqoKF9DJq7J6FzwFDaN2quHplesk7MrgjT8+vyjNmGevq+gXoCGrvGoaPfUDw4YdEYFjbFZZsDd/aP0Sn4UTgJosd3jl7/xSdU3zbKb9cOG8umjOuuVfshHnlOMXgZwtBtBO8fovgUjWFUlFCMScg7MKBHZyqftWxd7zq9/HDkMYpSIompdBplWcFMJoMZ/Cw+knbIWESAy+H24VXoDl+kBL6/y/xgroL2fj3QSBrWgQHxxCvKioK5j39BtHTJqt35FLy44R0YkK+AJKx0HZ/yZflImL/AuuGwsi5SPPnvDn8geocAk/UtlUa1BQeCX2SjMVlVQ25vQHx8jqGicrQsFCgYovGsBY9HQlQxIZhdVEMkeQl5TSxIcv2CDcjRGmZQ1Y9LNgKKQhF1E1TbiELHDAt7zpPy6/BdWJVheTSGjTC3aIcDt6+CQFfeaGRD2KszcZA6FtOoTbSj+B1C5VcIf8Ud6AcCa9uHTJzSs8tQTfg2skIXeH7G/QMDueJzvPRB+QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbVJREFUOMudlNtLAlEQxs9T4FPgUyD0/wm9VRTVQ3ciuhGlRlakmF0oMjSxrCgyNS0VrLQLFEp00VzbLNRdp5kto6Jy7cDZp/3tN/PNfMsM8w6Yxjs1axf0JqtfM7VsGdDNq7uGjMqWngnW0DHG6tq0rLZVI10AYCx4dA6B8Bn4Q1Fw+49gc/cQVhwuMC6sccP6xcbOQaOiqXuc1b+DEsSleUhxPCRTabi9T0Hs+g6iFzHYD5yAzemBSbPd2ztqriLV+nbdG4QPKNAtFEAQRMjmcsBnnuEukZLgbXcQTIvrV33aORWBH9D3Qx/I5wV45DNwGbsBly9MoLd3xFzxK1RUF0QRnjIvEkiKWGrjn1DxEEiKVKrN6U6iOZUlIVKkUqlHMsew4FCXhIo9kjmnqIbjsMiC6JCrcRzHlisQlw1Rb1Si5+A4KxsSscTEQ5o2hy8b8gUjEfnl4bbQmuF+/suI8izHAXNoednDLXuN/BgVheyFvYrfxHfcIRUurLxoIODd84WrZ5acDMP4QwjFLyHksKRmVFAQ0K+dYx8h/Bx3fDGAtlpxMWuwaeXqhofhD0dS+Bz3V7HA8uslKDy0AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAADCAIAAAA2iEnWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUCB1jmTNnDicnJ4uMjIywsDALEEtKSgIALM0DDeT4y3sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAIAAADdv/LVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABRJREFUCB1jWLVqFZOWlhbDx48fARyiBVLivNzsAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAADCAIAAAA2iEnWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jWrp06Zw5c5jU1NRkZGSYJCUlhYWFAUybBRTduo1wAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7QOjdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1juHLlysePHwESGQVQhb5n0gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+P//PwAF/gL+n8otEwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7QOjdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j/Pjx4+PHjwETfwV+HAwP5QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1jvHLliqysLOPp06clJSUBLX0FglncIWUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAIAAAAW4yFwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUCB1j+P//P9OnT58AF6oF1hwiRUMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1j/vjxY0xMDHNOTs779+8BN9MH/68NXLgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAHCAYAAAArkDztAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGZJREFUCB0FwcsJg0AUAMAJ+9YPgUV4IIhevHizBhtIk2kjJeSYEtJGLpmJ5/t7Q0HFgA41UHDHhBmJFqiYsOPEgTUwYMaJBy70gQ6JA9fv8+rHcRSoaFjRb9smMwUKBjTITMuy+AM42wji1WBJjgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAHCAYAAADJTCeUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACZJREFUCB1jXnjqkTxzYGqhP4joBRELmaNcLRuY6+vrG5jb29sbAOK+DN7MoThrAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAHCAYAAAArkDztAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG9JREFUCB0FwbEKgmAYAMCDPrHJXWp27AFa2trber0eJdpa23QIhAaDH0IQS4m6i9O1XWPGhDdmfANb9Eh44oUhcMQDNW64Ywoc8MEZMKCPaC7GccyzzX6HGg3aqKpKSklHjhUKZFGWJeh+oMASiz+A7SOInCfK3QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCB1jWHjqkQIQxwPxfiD+f+XKlf8fP378DwDW+RK/bGv6kwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+P//PwAF/gL+n8otEwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1j+Pjx4/8rV678X3jqEQjvB+J4IFYAAP2REr8fi4n2AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUCFtjWHjqkTgQewDxZCD+cfr06f9Pnjz5zwDkCAKxKRDnAvFOkCQQgyU4gVgeiB2gkiCd60ASLEDMD5U0hRobBpJghEpyQo0F2SkDAHWKUDJqcdSvAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABpJREFUCB1j+Pjx43+GhacegYk9IFYciJAHAM/uDz+C0SZ2AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUCFtjePLkyf/Tp0//X3jq0Q8gngzEHkAszgAkYII7gTgXiE2BWBAksQ6qEiToAMTyQMwJkgiDajeFCvIDMQtIQgZkJkg7SCVIEIgZAdauUDJ/hcSRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUCB1j2rx58//Tp0//v379OpgG8Zn+////C4gZkPBfpl+/fh38/fs3AxI+wvT58+eUjx8/7vjw4QMDiP706VMcAOlpQfMaZOfrAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAIAAACZnPOkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUCB1j3rx5cxEYJCQk+Pn5AQA+dAbTLdUgHwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAExJREFUeNpMxbsNgDAMBcCH6wzg1amQWCGzUMEAKf1JZSMCdClOt9RaV2ZGKQW9d7TWQGOM+4PJQxFxZiYmF7n7rqqHiODfzLZXgAEAth07HqinDKIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi3Lx580wJCQkGHh4ehi9fvjC8ePGCASDAAFQeCLRojHkfAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpirKysFODi4opiZmbW/vv379Vv374tYxEWFk4QEhLSZGdnZ/j586f+u3fvOEGCquLi4gxA1QxAVQyMjIwqLLy8vCz8/PwMPDw8DKysrAzfv39nYmJjYwNzkDETUDkDOgYIMABjBxggiQuq/QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB1jqqyslG5ubt7Y1tb2E0SD+EzCwsLzpaWl/eTl5dlANJC/FCRoLyEhwQAUYADRQL4NEy8vLxs/Pz+DoKAgA4jm4+NjZmJjY2NgZWVFwUyMjIwM6BgAhF0QgRCnPUsAAAAASUVORK5CYII=
*/

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;25;Resources/alert-error.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-error.pngu;24;Resources/alert-info.png64;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-info.pngu;27;Resources/alert-warning.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-warning.pngu;33;Resources/button-bezel-center.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-center.pngu;42;Resources/button-bezel-disabled-center.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-center.pngu;40;Resources/button-bezel-disabled-left.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-left.pngu;41;Resources/button-bezel-disabled-right.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-right.pngu;45;Resources/button-bezel-highlighted-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-center.pngu;43;Resources/button-bezel-highlighted-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-left.pngu;44;Resources/button-bezel-highlighted-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-right.pngu;31;Resources/button-bezel-left.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-left.pngu;32;Resources/button-bezel-right.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-right.pngu;29;Resources/buttonbar-bezel.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-bezel.pngu;43;Resources/buttonbar-button-bezel-center.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-center.pngu;52;Resources/buttonbar-button-bezel-disabled-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-center.pngu;50;Resources/buttonbar-button-bezel-disabled-left.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-left.pngu;51;Resources/buttonbar-button-bezel-disabled-right.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-right.pngu;55;Resources/buttonbar-button-bezel-highlighted-center.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-center.pngu;53;Resources/buttonbar-button-bezel-highlighted-left.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-left.pngu;54;Resources/buttonbar-button-bezel-highlighted-right.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-right.pngu;41;Resources/buttonbar-button-bezel-left.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-left.pngu;42;Resources/buttonbar-button-bezel-right.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-right.pngu;38;Resources/buttonbar-resize-control.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-resize-control.pngu;38;Resources/check-box-image-disabled.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-disabled.pngu;41;Resources/check-box-image-highlighted.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-highlighted.pngu;44;Resources/check-box-image-mixed-disabled.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed-disabled.pngu;47;Resources/check-box-image-mixed-highlighted.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed-highlighted.pngu;35;Resources/check-box-image-mixed.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed.pngu;47;Resources/check-box-image-selected-disabled.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected-disabled.pngu;50;Resources/check-box-image-selected-highlighted.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected-highlighted.pngu;38;Resources/check-box-image-selected.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected.pngu;29;Resources/check-box-image.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image.pngu;41;Resources/default-button-bezel-center.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-center.pngu;50;Resources/default-button-bezel-disabled-center.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-center.pngu;48;Resources/default-button-bezel-disabled-left.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-left.pngu;49;Resources/default-button-bezel-disabled-right.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-right.pngu;53;Resources/default-button-bezel-highlighted-center.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-center.pngu;51;Resources/default-button-bezel-highlighted-left.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-left.pngu;52;Resources/default-button-bezel-highlighted-right.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-right.pngu;39;Resources/default-button-bezel-left.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-left.pngu;40;Resources/default-button-bezel-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-right.pngu;37;Resources/horizontal-track-center.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-center.pngu;46;Resources/horizontal-track-disabled-center.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-center.pngu;44;Resources/horizontal-track-disabled-left.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-left.pngu;45;Resources/horizontal-track-disabled-right.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-right.pngu;35;Resources/horizontal-track-left.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-left.pngu;36;Resources/horizontal-track-right.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-right.pngu;37;Resources/HUD/button-bezel-center.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-center.pngu;46;Resources/HUD/button-bezel-disabled-center.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-center.pngu;44;Resources/HUD/button-bezel-disabled-left.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-left.pngu;45;Resources/HUD/button-bezel-disabled-right.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-right.pngu;49;Resources/HUD/button-bezel-highlighted-center.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-center.pngu;47;Resources/HUD/button-bezel-highlighted-left.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-left.pngu;48;Resources/HUD/button-bezel-highlighted-right.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-right.pngu;35;Resources/HUD/button-bezel-left.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-left.pngu;36;Resources/HUD/button-bezel-right.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-right.pngu;45;Resources/HUD/default-button-bezel-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-center.pngu;54;Resources/HUD/default-button-bezel-disabled-center.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-center.pngu;52;Resources/HUD/default-button-bezel-disabled-left.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-left.pngu;53;Resources/HUD/default-button-bezel-disabled-right.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-right.pngu;57;Resources/HUD/default-button-bezel-highlighted-center.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-center.pngu;55;Resources/HUD/default-button-bezel-highlighted-left.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-left.pngu;56;Resources/HUD/default-button-bezel-highlighted-right.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-right.pngu;43;Resources/HUD/default-button-bezel-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-left.pngu;44;Resources/HUD/default-button-bezel-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-right.pngu;41;Resources/HUD/horizontal-track-center.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-center.pngu;50;Resources/HUD/horizontal-track-disabled-center.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-center.pngu;48;Resources/HUD/horizontal-track-disabled-left.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-left.pngu;49;Resources/HUD/horizontal-track-disabled-right.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-right.pngu;39;Resources/HUD/horizontal-track-left.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-left.pngu;40;Resources/HUD/horizontal-track-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-right.pngu;31;Resources/HUD/knob-disabled.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob-disabled.pngu;34;Resources/HUD/knob-highlighted.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob-highlighted.pngu;22;Resources/HUD/knob.png62;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob.pngu;46;Resources/HUD/scroller-down-arrow-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow-disabled.pngu;49;Resources/HUD/scroller-down-arrow-highlighted.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow-highlighted.pngu;37;Resources/HUD/scroller-down-arrow.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow.pngu;49;Resources/HUD/scroller-horizontal-knob-center.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-center.pngu;47;Resources/HUD/scroller-horizontal-knob-left.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-left.pngu;48;Resources/HUD/scroller-horizontal-knob-right.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-right.pngu;52;Resources/HUD/scroller-horizontal-track-disabled.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-track-disabled.pngu;43;Resources/HUD/scroller-horizontal-track.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-track.pngu;46;Resources/HUD/scroller-left-arrow-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow-disabled.pngu;49;Resources/HUD/scroller-left-arrow-highlighted.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow-highlighted.pngu;37;Resources/HUD/scroller-left-arrow.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow.pngu;47;Resources/HUD/scroller-right-arrow-disabled.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow-disabled.pngu;50;Resources/HUD/scroller-right-arrow-highlighted.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow-highlighted.pngu;38;Resources/HUD/scroller-right-arrow.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow.pngu;44;Resources/HUD/scroller-up-arrow-disabled.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow-disabled.pngu;47;Resources/HUD/scroller-up-arrow-highlighted.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow-highlighted.pngu;35;Resources/HUD/scroller-up-arrow.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow.pngu;47;Resources/HUD/scroller-vertical-knob-bottom.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-bottom.pngu;47;Resources/HUD/scroller-vertical-knob-center.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-center.pngu;44;Resources/HUD/scroller-vertical-knob-top.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-top.pngu;50;Resources/HUD/scroller-vertical-track-disabled.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-track-disabled.pngu;41;Resources/HUD/scroller-vertical-track.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-track.pngu;48;Resources/HUD/segmented-control-bezel-center.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-center.pngu;57;Resources/HUD/segmented-control-bezel-disabled-center.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-center.pngu;58;Resources/HUD/segmented-control-bezel-disabled-divider.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-divider.pngu;55;Resources/HUD/segmented-control-bezel-disabled-left.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-left.pngu;56;Resources/HUD/segmented-control-bezel-disabled-right.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-right.pngu;49;Resources/HUD/segmented-control-bezel-divider.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-divider.pngu;60;Resources/HUD/segmented-control-bezel-highlighted-center.png100;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-center.pngu;69;Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png109;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-center.pngu;70;Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.pngu;67;Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-left.pngu;73;Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.pngu;68;Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png108;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-right.pngu;61;Resources/HUD/segmented-control-bezel-highlighted-divider.png101;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-divider.pngu;58;Resources/HUD/segmented-control-bezel-highlighted-left.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-left.pngu;59;Resources/HUD/segmented-control-bezel-highlighted-right.png99;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-right.pngu;46;Resources/HUD/segmented-control-bezel-left.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-left.pngu;55;Resources/HUD/segmented-control-bezel-pushed-center.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-center.pngu;67;Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-center.pngu;65;Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-left.pngu;66;Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-right.pngu;53;Resources/HUD/segmented-control-bezel-pushed-left.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-left.pngu;54;Resources/HUD/segmented-control-bezel-pushed-right.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-right.pngu;47;Resources/HUD/segmented-control-bezel-right.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-right.pngu;39;Resources/HUD/slider-circular-bezel.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-bezel.pngu;48;Resources/HUD/slider-circular-disabled-bezel.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-disabled-bezel.pngu;47;Resources/HUD/slider-circular-disabled-knob.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-disabled-knob.pngu;38;Resources/HUD/slider-circular-knob.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-knob.pngu;39;Resources/HUD/vertical-track-bottom.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-bottom.pngu;39;Resources/HUD/vertical-track-center.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-center.pngu;48;Resources/HUD/vertical-track-disabled-bottom.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-bottom.pngu;48;Resources/HUD/vertical-track-disabled-center.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-center.pngu;45;Resources/HUD/vertical-track-disabled-top.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-top.pngu;36;Resources/HUD/vertical-track-top.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-top.pngu;27;Resources/knob-disabled.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/knob-disabled.pngu;30;Resources/knob-highlighted.png70;mhtml:Browser.environment/MHTMLData.txt!Resources/knob-highlighted.pngu;18;Resources/knob.png58;mhtml:Browser.environment/MHTMLData.txt!Resources/knob.pngu;36;Resources/popup-arrows-pullsdown.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-arrows-pullsdown.pngu;26;Resources/popup-arrows.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-arrows.pngu;50;Resources/popup-bezel-disabled-right-pullsdown.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-disabled-right-pullsdown.pngu;40;Resources/popup-bezel-disabled-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-disabled-right.pngu;41;Resources/popup-bezel-right-pullsdown.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-right-pullsdown.pngu;31;Resources/popup-bezel-right.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-right.pngu;34;Resources/radio-image-disabled.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-disabled.pngu;37;Resources/radio-image-highlighted.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-highlighted.pngu;43;Resources/radio-image-selected-disabled.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected-disabled.pngu;46;Resources/radio-image-selected-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected-highlighted.pngu;34;Resources/radio-image-selected.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected.pngu;25;Resources/radio-image.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image.pngu;42;Resources/scroller-down-arrow-disabled.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow-disabled.pngu;45;Resources/scroller-down-arrow-highlighted.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow-highlighted.pngu;33;Resources/scroller-down-arrow.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow.pngu;45;Resources/scroller-horizontal-knob-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-center.pngu;54;Resources/scroller-horizontal-knob-disabled-center.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-center.pngu;52;Resources/scroller-horizontal-knob-disabled-left.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-left.pngu;53;Resources/scroller-horizontal-knob-disabled-right.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-right.pngu;43;Resources/scroller-horizontal-knob-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-left.pngu;44;Resources/scroller-horizontal-knob-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-right.pngu;48;Resources/scroller-horizontal-track-disabled.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-track-disabled.pngu;39;Resources/scroller-horizontal-track.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-track.pngu;42;Resources/scroller-left-arrow-disabled.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow-disabled.pngu;45;Resources/scroller-left-arrow-highlighted.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow-highlighted.pngu;33;Resources/scroller-left-arrow.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow.pngu;43;Resources/scroller-right-arrow-disabled.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow-disabled.pngu;46;Resources/scroller-right-arrow-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow-highlighted.pngu;34;Resources/scroller-right-arrow.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow.pngu;40;Resources/scroller-up-arrow-disabled.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow-disabled.pngu;43;Resources/scroller-up-arrow-highlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow-highlighted.pngu;31;Resources/scroller-up-arrow.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow.pngu;43;Resources/scroller-vertical-knob-bottom.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-bottom.pngu;43;Resources/scroller-vertical-knob-center.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-center.pngu;52;Resources/scroller-vertical-knob-disabled-bottom.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-bottom.pngu;52;Resources/scroller-vertical-knob-disabled-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-center.pngu;49;Resources/scroller-vertical-knob-disabled-top.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-top.pngu;40;Resources/scroller-vertical-knob-top.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-top.pngu;46;Resources/scroller-vertical-track-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-track-disabled.pngu;37;Resources/scroller-vertical-track.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-track.pngu;44;Resources/scrollview-bottom-corner-color.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/scrollview-bottom-corner-color.pngu;44;Resources/segmented-control-bezel-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-center.pngu;53;Resources/segmented-control-bezel-disabled-center.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-center.pngu;54;Resources/segmented-control-bezel-disabled-divider.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-divider.pngu;51;Resources/segmented-control-bezel-disabled-left.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-left.pngu;52;Resources/segmented-control-bezel-disabled-right.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-right.pngu;45;Resources/segmented-control-bezel-divider.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-divider.pngu;56;Resources/segmented-control-bezel-highlighted-center.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-center.pngu;65;Resources/segmented-control-bezel-highlighted-disabled-center.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-center.pngu;66;Resources/segmented-control-bezel-highlighted-disabled-divider.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-divider.pngu;63;Resources/segmented-control-bezel-highlighted-disabled-left.png103;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-left.pngu;64;Resources/segmented-control-bezel-highlighted-disabled-right.png104;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-right.pngu;57;Resources/segmented-control-bezel-highlighted-divider.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-divider.pngu;54;Resources/segmented-control-bezel-highlighted-left.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-left.pngu;55;Resources/segmented-control-bezel-highlighted-right.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-right.pngu;42;Resources/segmented-control-bezel-left.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-left.pngu;51;Resources/segmented-control-bezel-pushed-center.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-center.pngu;63;Resources/segmented-control-bezel-pushed-highlighted-center.png103;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-center.pngu;61;Resources/segmented-control-bezel-pushed-highlighted-left.png101;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-left.pngu;62;Resources/segmented-control-bezel-pushed-highlighted-right.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-right.pngu;49;Resources/segmented-control-bezel-pushed-left.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-left.pngu;50;Resources/segmented-control-bezel-pushed-right.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-right.pngu;43;Resources/segmented-control-bezel-right.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-right.pngu;35;Resources/slider-circular-bezel.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-bezel.pngu;44;Resources/slider-circular-disabled-bezel.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-disabled-bezel.pngu;43;Resources/slider-circular-disabled-knob.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-disabled-knob.pngu;34;Resources/slider-circular-knob.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-knob.pngu;21;Resources/spinner.gif61;mhtml:Browser.environment/MHTMLData.txt!Resources/spinner.gifu;44;Resources/tableview-headerview-ascending.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-ascending.pngu;45;Resources/tableview-headerview-descending.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-descending.pngu;54;Resources/tableview-headerview-highlighted-pressed.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-highlighted-pressed.pngu;46;Resources/tableview-headerview-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-highlighted.pngu;42;Resources/tableview-headerview-pressed.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-pressed.pngu;34;Resources/tableview-headerview.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview.pngu;32;Resources/tableviewselection.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/tableviewselection.pngu;44;Resources/textfield-bezel-rounded-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-center.pngu;52;Resources/textfield-bezel-rounded-focused-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-center.pngu;50;Resources/textfield-bezel-rounded-focused-left.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-left.pngu;51;Resources/textfield-bezel-rounded-focused-right.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-right.pngu;42;Resources/textfield-bezel-rounded-left.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-left.pngu;43;Resources/textfield-bezel-rounded-right.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-right.pngu;38;Resources/textfield-bezel-square-0.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-0.pngu;38;Resources/textfield-bezel-square-1.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-1.pngu;38;Resources/textfield-bezel-square-2.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-2.pngu;38;Resources/textfield-bezel-square-3.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-3.pngu;38;Resources/textfield-bezel-square-4.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-4.pngu;38;Resources/textfield-bezel-square-5.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-5.pngu;38;Resources/textfield-bezel-square-6.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-6.pngu;38;Resources/textfield-bezel-square-7.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-7.pngu;38;Resources/textfield-bezel-square-8.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-8.pngu;46;Resources/textfield-bezel-square-focused-0.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-0.pngu;46;Resources/textfield-bezel-square-focused-1.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-1.pngu;46;Resources/textfield-bezel-square-focused-2.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-2.pngu;46;Resources/textfield-bezel-square-focused-3.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-3.pngu;46;Resources/textfield-bezel-square-focused-4.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-4.pngu;46;Resources/textfield-bezel-square-focused-5.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-5.pngu;46;Resources/textfield-bezel-square-focused-6.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-6.pngu;46;Resources/textfield-bezel-square-focused-7.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-7.pngu;46;Resources/textfield-bezel-square-focused-8.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-8.pngu;35;Resources/vertical-track-bottom.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-bottom.pngu;35;Resources/vertical-track-center.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-center.pngu;44;Resources/vertical-track-disabled-bottom.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-bottom.pngu;44;Resources/vertical-track-disabled-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-center.pngu;41;Resources/vertical-track-disabled-top.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-top.pngu;32;Resources/vertical-track-top.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-top.png

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Browser.environment/dataURLs.txt.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/CommonJS.environment/Aristo.blend.sj.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Info.plist.



>
1
280NPLIST;1.0;D;K;26;CPApplicationDelegateClassS;20;BKShowcaseControllerK;12;CPBundleNameS;12;Aristo.blendK;14;BKLearnMoreURLS;28;http://cappuccino.org/aristoK;22;BKLearnMoreButtonTitleS;16;Aristo Home PageK;16;CPPrincipalClassS;13;CPApplicationK;29;CPBundleInfoDictionaryVersiond;1;6K;18;CPBundleIdentifierS;21;com.280n.blend.AristoK;15;CPBundleVersionf;3;0.1K;19;CPBundlePackageTypeS;4;BLNDK;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;15;Aristo.blend.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;K;13;CPKeyedThemesA;S;17;Aristo.keyedthemeS;21;Aristo-HUD.keyedthemeE;E;

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/knob-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/knob-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-disabled-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-disabled-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/alert-error.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/alert-info.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/alert-warning.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/buttonbar-resize-control.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/check-box-image.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/horizontal-track-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/knob-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/knob-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-arrows-pullsdown.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-arrows.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-disabled-right-pullsdown.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-right-pullsdown.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/popup-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-selected-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-selected-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image-selected.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/radio-image.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/scrollview-bottom-corner-color.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-disabled-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-disabled-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/slider-circular-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/spinner.gif.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-ascending.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-descending.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-highlighted-pressed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-pressed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableview-headerview.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/tableviewselection.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/Aristo.blend/Resources/vertical-track-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPApplication/New.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPApplication/NewHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPApplication/Open.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPApplication/OpenHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPApplication/Save.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPApplication/SaveHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/closedHandCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/contextualMenuCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/disappearingItemCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/dragCopyCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/dragLinkCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/openHandCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/resizeDownCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/resizeLeftCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/resizeRightCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPCursor/resizeUpCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImage/CPImageNameColorPanel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewRightShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPImageView/CPImageViewTopShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldFind.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPSplitView/CPSplitViewVertical.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBackgroundCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBorder.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBorderLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/CPTabViewBezelBorderRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelBackgroundCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelBackgroundLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelBackgroundRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelSelectedCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelSelectedLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelSelectedRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelsViewCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelsViewLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPTabView/_CPTabLabelsViewRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/CPWindowShadow8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/CPWindowResizeIndicator.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/FIXME_ImageShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/GenericFile.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/HUDTheme/WindowClose.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/HUDTheme/WindowCloseActive.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPToolbarView/_CPToolbarViewBackground.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/action_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/brightness_bar.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/browser-leaf-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/browser-leaf.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/browser-resize-control.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/color_well.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/empty.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/minus_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/plus_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/slider_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/slider_button_h.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/standardApplicationIcon.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/wheel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/wheel_black.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/wheel_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/AppKit/Resources/wheel_button_h.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Browser.environment/AppKit.sj.

more than 10,000 changes

Added Site/Site_Z/Frameworks/Debug/AppKit/Browser.environment/MHTMLData.txt.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUeNpiunnvEdO7j5+Z/v//j4H/IbP/geh/EDEY+x+Sun//UNSj62f4z8B099YNgAADAA9PUNwzG//eAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAcCAIAAAAvP0KbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNpimL9qE9Pdh0+Y/v//D8T/mP79Q6chbBD9/x+MjwX/R7D/g9T/h9BgM/5D9BtqqgIEGAC2zE/UgDMaqgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAIAAADAusJtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1j2LNnD8P///8Zvnz5AsIAU6oK6qmqG6cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j2LNnzxcYAABDLQrJ2KbR7QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+PLlCwAFvALdifOWJQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAABCAIAAAB2XpiaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j+AIDe/bsAQBJFQrJwsQiEQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindow7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAIAAADAusJtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUCB1j+PLlCwMM79mzBwBaQArJvXzTegAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACYAAAASCAYAAAA31qwVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHpJREFUSMdj+P//P8NgxIPSUaMOG9kOi4+Px4WFoRhDbqAdtgSKB5XD8oH4PxTnDRaHOQDxHySH/YaKDajD5IH4KZKjYPgpVG5AHMYOxMexOAqGj0PV0N1hM/A4Coan0tthBUQ4CoYL6OUwJjxFBsOAFRejVdKow0jEAMbSS1vJwWj5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACYAAAASCAYAAAA31qwVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUSMdj+P//P8NgxAyjDht12KjDaIjj4+OZ6OIwoEUFQPyfSAxSy0Avh4HwVCIcNQOqlq4OYwfi43gcdRyqhu4OA2F5IH6KxVFPoXIMA+UwEHYA4t9IjvoDFWMYaIeBcB6Sw/KxyA+Yw0B4CRQzDDaHCUPxwDlstEoajBgAIvph233GDmUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUCB0FwbENgDAQwMCvmByJpbxIeipqR0pn7ga4gBt4gQZ41lqdc6oa4FPbe6c2QGpqaj/TuDbcxUWSYgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUCB0FwbENgDAQwMCvmByJpbxIeipqR0pn7gYIeIEbuKbqnNNaK+AZtb13asA3ampqQD8COzbceGNz5AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2LNnz/8vX77AMQNQ4NX79+9RBNqvXLnyHyYIUsEGxL1A/BykHQCHWDaL8tTDxAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPMenuWindow/_CPMenuWindowRounded8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUCFtj+PLly38Y3rNnz38GGOf9+/cggVcMMM6VK1dAAl0MIGVA/ByIe4GYDQC0XjaO10uChwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewBackground.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAA7CAIAAAA1lncVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB0FwQEBwEAMhDAO/1Je1YSUJX7fJyHDSkDKQMArBwZyJ5uVkWN254EDIQvvkiVhJWFDyuscs7KSsJJlYSXDLgErIwkJj6QErISEeZcOKwMBASMJ33s/zDJY0JkKjKMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUKJFj0NDQWKGmpib1//9/BnyYwczM7L+RkdEuoAYdvApdXFz+u7q6/jc1NT2vqanphlOht7f3/+Dg4P8eHh7/LSwsnmhrayeoqqqyYCj08vI6FhER8T8kJOQ/kP3f2tr6k66ubhPQ3XwoCp2cnLiAJoIVh4WF/ff19f1vZ2f3V19ff7a6uroSXCGIALqTE6j4MEhxeHj4/4CAgP9AA/4bGxvvBrrbEegUQbjRQA/xABU/j4yM/A/SEBQUBPYkMFS2amlp2cAVWllZ9fr7+4MVwRQD+Wft7e1DgM6QASvS09PrdXR0BJsCUwQ0fZu7u7se3I0gRQ4ODmB3gRQA8a/AwMDpQHdLovja1tYWrAjkCSD+BLSuAmg6J0Y4enp6ghUBg+YeMGiigBqZccYMMLDPAQPbBm9cu7m57QE6Gm+CAGEA/dNCZSU2Z+AAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAAPCAYAAADd/14OAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAU1JREFUKM9jsLS0XGFmZib1//9/BnyYwdfX97+7u/suCwsLHbwKExMT/4Owt7f3eSsrKzecCrOysv6XlZX9T01N/e/v7//E1tY2wcTEhAVDYWZm5rGampr/FRUV/4Hs/yEhIZ8cHByaTE1N+VAUxsbGcpWWlh6rra39X1VV9T83N/d/RETEX2dn59nm5uZKcIUgAuhGTqDiwyDF1dXV/wsLC/8DDfjv4eGxG+huR6BTBOFGAxXzAN36vK6u7j/IKSUlJf+TkpL++/j4bLUBArjCoKCg3oKCgv8gU2GKgfyzkZGRIU5OTjJgRUBGb0xMzH+g9WBFIMVA07cBQ0IP7kaQoqioKLC7QKYA8a/i4uLpQKdIovg6PDwcrgjokU9A6yqApnNihGN6ejpYUWVl5T1g0EQBNTLjjBlgYJ/LyMiwwRvXycnJe4CO1iGUegAs+F709mxc3QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/_CPWindowView/_CPWindowViewResizeIndicator.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUKJFj+P//PwOx2NjYOJIkxUDalSTFQMxPkmIQnyTF0tLSASQpBtLOJCkGYlmSFGP4gZBiBQWFIJIUw+OBWMVALMkABHZAhg1MMQcHhxeQtoMp5uLi8obyJUF8ACitf5AUaj8yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/action_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAOCAYAAAArMezNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZxJREFUeNpi+P//PwMyBgJmKN0PxCBGP5TPja4WH0Y2UBKIGxgZGQ8AaVaooTDMx87O3guk15FsMAcHxy6YQVDD4QazsLBsRuLvIcng0tLSrWiuxMBAy/8YGRndJclgIPasra29DTJAR0fnY19f3/W3b98enjhx4jUQH2RoUVHRTaC6VqINRoooMK6rqwN51x2IuYDYFcRHc30/UtxMQ5OrQDYYxcu3b9/2R7b92rVrAehqYHI3b96s4uXl/QUSk5GR+fb+/fs4uMFxcXGPkTUBFaYgG8zPz5+KLA9SjyTPW19ffwkkPnv27P1APgtyGGcD8f6UlJSHwBTwV1hY+DpQYTQo7QJxPJT/39jY+P2PHz8OQNXDLf727VtgQkLCIyDbAls6PgZMZn+hye0frpQBlLuJJbKYgDgLa6owMTG5B9McHBz8DNkwWGrh5OT8Y2ho+IzU5Nbq7+//vLy8/A7Qa2VoERUCMtzFxeXZp0+f+kg1GITL3717FwOkmWERihRRIcuXL58FpFnJMZgBFquwCEWLKA1iywqAAAMA5oG1QG1/ejsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/brightness_bar.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAXUAAAAUCAYAAAByIq2DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrt1DEKgDAMQNEMvf+VdRC3QhNpUOS9pW0CDg5/RMQRl/uMxWy2z+w6zupuNeu6V3Yd747Zm/Onu93f+9q/2TnrfGd3u+/VWWbXcWZ30/0IAH5D1AFEHQBRB0DUARB1AFEHQNQBEHUARB0AUQcQdQBEHQBRB0DUARB1AFEHQNQBEHUA8k4Pbf5S2jTRYAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-leaf-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANJJREFUeNp0kMEKgkAQhmd1PYh5C3wNfZkeomNPEQQdu3bo1i06duzURW8d8hJkUQgFYqLp7vYbJRU48DMw880/s0tBEAx83+8opahNLAxDZHUrimJSluXY87wr/QWL41gZhkFZltEdkef5tKqqoeu6xwZKkkRZlkVwIbh9YAF4htoI8PYF2bb9mpBSElwaOE3TNdTj37s1TaN6NfLFNM3IcZwNyo8GwvEwkmfGWMQ5X6I0h3Z1j6MpsOKE6b2u64t38/DzPCHECmAf6rb901OAAQCWtKL7r7moLgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-leaf.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAONJREFUeNpiUFZWLlJSUuL5//8/Ay7MqKen95+BgeH9jx8/pv3586fv7t277xjQAKOtre1/VlZWhm/fvjF8//79K1DxfKDijjt37jyFK3JxcfnPxcXFAJRg+PnzJ1gxEP8Fshf//v27G6j4GgtIJRMTEwMbGxsDCwsLAwcHBwM3NzczUGECUKOyqqpqGAuy3SDFjIyMDCYmJi8DAgKeGBgYnAQK/2JBUvDP1NT0RUhIyBMVFZXNQKFVQHwLJMcCtOavnZ3ds/Dw8AdSUlIboZKPUbz3+vXr3cCwyAJiEVzhBBBgAKZHhoa/n4e4AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/browser-resize-control.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAIAAAB/6NG4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUeNpifP36NRMTEzMYMCEBRjBgAIP/YPDv3z8mBlIABaonTZr07ds3IKOvrw/C6O3thTAoNntUNRgwDpqYBwgwAFUPJZ6DFNTXAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/color_well.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACMAAAAPCAIAAADh1eFDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH1JREFUOI3t07EJgyEUBODHVbqAhXvY22cGXSAbpRFLC8loCiIkIfoyRHhW/7fAcXCHGONNXggBvfdSylNSrbW1hrUWgK+kvbfWGkT0kUdEIKK3PGY+lHS800veuU7XIv7BzFBKjTFEbzvnZGZYa3POD0kpJWMMnHN3ed77HwxWA6QUi5PsAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/New.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZNJREFUOI19kz9IAmEUwI8aaoqo1BaxWhoampMWazQS++PWEtTk1tIUOHbQkHZBTjY4eGpLKEE3JaLiDVficBwcSJSLTi4Owuu9jw8x79MHP+7ge+/3vXfffRIASBgzyByygCwjLsSLbCLbyAayhMxK48EFVOyCkeh0OmAYBnvHtTNkRyjhAtp5i5JrtRqjUChAIpEYCnH9WijhAmrbT4m6rjOKxSLIsjzalFjCBTRzgJKobULTNIjH4zAemHfOv828UNBsNhnlchnS6bRDwCW7yKJQYFkWo9FoQKlUAlVVIZlMgqIokEqlWHeYu4esCAWtVoth2zaYpskK6vU6VKtV9qTTwdx9xC0UtNvtqfARArzGKeh2uxM5ygQh8hIC3637a6Kg1+tN5Dh7AG+/lemCfr/v4CR3yLh4j8Kz/QpBNfyzdu+prD+sfjgEg8HAwWk+BE9WbohiZhijguGfKAqam7jUonDz+QjBbPh7vAN2F5AIcoXERHhjLpsEvjuPzmv+30Yu8fNjcuCT3QYV0+68RvoD0y0J9R+ff5MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/NewHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYhJREFUOI19k71Lw0AUwIMOOrViGzcXFwcHwY+WfizVwcG9iFIpDmkkSyDQ1MFWyVJqKdRSQggdMnQJFEr/FgdBEEdB/Bue7x3P0jbXHvzIwb33u3fvcgoAKDjWkA0khiQQFdlF9pFDZA/ZRtaVxcECSlYnkwn8MxwOodvtijmulZCMVMIC2vmAgtvttqBer0OlUpkKcb0mlbCAys5SYKfTETQaDSiXyzBblVTCAjpzgYKobMJxHNA0bU7AkjvuzaZU0O/3Ba1WCyzLighYkke2pALP8wS9Xg+azSbYtg2GYYCu62CapqgOY8+QpFQwGAwEvu+D67oigXpCjaUv3Q7GniM7UkEQBCvhIxQ4JyqgHZaRqZ5A/iENyevY11JBGIZLydqn8BS8rBaMRqMIuVpKcOFcguk/wrGV/lVL8Xf1Nv4WEYzH4wg5LNvwalN0tyqYFUz/RBl0boIquHq9hyMr9bNYgXgLSBGxkGcZiWLsmwTJm/gH58y/RpZk+ZoiYPM+KZl25xzlDyJip/qGO0OBAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/Open.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgtJREFUOMulkz1rlFEQhZ+Ze3dDkGhcSZa4UYOFhU1iYaUWfiP+Bit/gVhYm970oj/DPyDEFBpEEPFziYKKySa7yO67eb/uHYvs5g22meZyYeacM2dmxMw4TCiHDAGOzDabd0+fWVgMIRQAu8Nh5/vGxnqa7nb+I1FgF/gJmJnhgeNXb9y+/+Dho1v9pB8xGCaD5O2b1+12++uOc17GVCqqIYZkbXX1xUb72zMgeEBbzZn62VNNer26AqjOTC2eP7eE7Ek8KHh6+hjLj5cbKytPngJ4IIpYabHEQglACBCKHGRcXhk9OVHHLCY2ct8D0u325M9mh16vV3EJmI0xKqA0KxgkwxowAWT+ZGv+2tzCuaX1D22KPENGrOPxighmRjRwqqhucfHKzUsfv7SfA/f87Nx86/L1Oyemjk4TQokA0cCrIk7I84IQDRGh7h1mMN1o+FerLxsAPsvScrOzbUlhkucFMmLda8GIZoQQERFq3mFm9LOS/iDJAXxRlrbzt08W65Sh3PfNzDAzVHX/P26vNCVNM6sAuj0bpiahLKu1GRkoIlis/IjRSIYpg2QYAbyKOkXUuQM3YYY6HamIiI5bijgnqIJzrgbgu9tb2+/X137PzrVqoSgjIghg2Gh8e281VkFU6z/an38BiHN+YWJy8gKIB4tV8qhwH6JaJxFqeZZ9yrP0nRz2nP8BeYUUSYTtIaYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/OpenHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeRJREFUOBGlwV1qE1EAhuH3O3MM1CiN/RFEBBFFULDWG92BV6IgrsD96CoEvVMXIS5AW1FBqJQmFWnaJs4kc+Z8Thtt9brPI9ucROCEBPTme70ny8vnb+Wca1qTqvo5GPTfp5QGQOCYgBL4BtS2icDyrZXVpw8ePb5bVSXYVGU5/frl88ZgsLUbQiH+kBSy8/jT2trb7X7/GZAioIXefHFhqcdoHAERQq9z5fKlq2COCQGnu6d59fLl/JvXb57TikCWnOyMc+ZAk6FJCQkw/+mcitgeGSdaEQj7o7F2hruMxyNmxIyZEX9NU0M1mUSgC4ziwuLS/YXzF2983ejTpBokBNi0DAIMBiQRNOTazdur3zf7L4CHsbewePHGyp2zc3Ndcs4gsE2hgIKoUyJnI4lYBDB0z54p1tc+nqMV67pOw909qgRNShySCIAxtmmykaAIBcaUqaEsqwmtmFLj/V8ltSM5Z2aMaRkkccAYcUBki2ldm1ZscuP9vRGTqck5c0QcEmBzSIJsmEynVNUk04oiFJIIgSO2CQoYY5sQBAKyKYIQEEI4RSvu7w1/fPuyvtM7t1jk3GRaAmyOiZYAIwQhdLa3NrdoKYRwPXY694QKcAYxY0DMGBD/6KSUPqR6+k62OYnfXED9QFof0dQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/Save.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVhJREFUeNqsUz1rwlAUvS8JAemUPZNZAiLonqGTPyV/oWPt2H+T2aUK/oAQyKDSzUFCSBarolF7z22faKWmYC8c7st995z78Yg6Ho90j1lhGMpBKXVS8n1f8NOiKIJ72e/3/cPh8CXwfdfvdru02+0gRM1mUwDLsoziOKZOp0PtdptWq9XzdDod8hVABqsRsNlsaLlcijdNkxzHETBB4vC4Q67neW/MfZQOqqqSSqgO2LYtVSeTicTX67XE4dEdzo1GA0IQGF4JYLbFYiHQBsJsNjvlWZZFmnchsN1uKc/z+s2fC4AIA7ksSwqC4CZ5PB6LgOZddIAF9Xq9mwKj0Uhyr0ZABxCoM+Qg92oE3cFfBPTC/6UDoygK+dBPWGfI0TsA10qShFqtFhmGIdsdDAa1T4hcvFiapqQ45jI813Wf2DuMB4b52wSMD0Y5n89f2b+re3/nTwEGACUKCdgz2++nAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPApplication/SaveHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXBJREFUOE+lk09qwlAQxscXCC7cBUGwJCErt0IJOYLF0Bt0I8FVD+Eduuo2i+57hB6gBLLLUhoiLlQUxP/G9w08iYjJogM/Xpz5vnkzkog8z+k/iOFwSLVajXq9Xq4IgiAfjUZ3oOb7/gf0YDAYkCAZrut+OY5DlmWRbdvUbrep1Wox9XqdJpMJn6g1m833fr//Ch9CnE4nHuVwONB2u6X9fk9CCGo0Gsxut+M8TtTO5zMZhvHted4bNzgej5zECTDacrmkNE0ZmJDHiRqecYG88AWXcwM8KNBssVhQkiRMlmWk6zqfqBW13Kw4AdZYrValQFP0CCTUj/V6TaZplgKNagDv3QrdbreUhyuoSaqiqL1ZQf2BVVHU3qygJqkKdfN1hfl8fk3ihaoKaNRl8Io4jmmz2fDLoWkaRVFUCjTQwgMvvoWn6XT6+StDJpIwDMeSvweMoYEWHniFHCmV/MhxnmezWUdiS8wHoNaBFh54L4mHAQ/Vw7dXAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImage/CPImageNameColorPanel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABoAAAAdCAYAAAC0T3x2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABxBJREFUeNqMlmtsHNUVx8+dufPetddrO07sRG1ik0SEQIwDJRSaAEn4QEQiA4oQoEgoUj+0qpDCN0BVVdQPqA++tFU/VVCpISIK0MhWFYQICBEeBVyqxjHgBIOx49jrXdv7mNfO7f/eGQcTXrV19s7dO3N+5/zPuXeWCSHou/72/P759bGRHIyN5p6mkbQ2ebIt0QTpWjTC9WDB0P2XYcdODT524bv8sG8D7f/VS7fA+ZPFNt6/6/qrqv2bf9iad7mx1jBMuT4ZheFSXI9GJkYXT4+/5ZWblz7kmv/4C/v+8Nr/BTr46JDZNMTv2gpi8P79t5jbe9s6Io2ohtsCjD5TT5FDgixKyCNGBq7/Vfmo9NybRxtlMfMio+jIsbv+Gn4r6MGfDxcTLk5s71/d89A9A70+1mfx4XOiGJYYRELmwxLSKILFxDE6IqEOZpGN5Wff+9v4Oxff+IKJaPDovmPzXwMdOjzsCE6n9+7Z2LP79r6eyQWihSYAcI7QSbMzk3MtwUeEfELkgkgoIBPQFmDXUJ5e/mRoamj0+CSJaNfRu082pH/tMjEST9+wdU3bj7b3dY+irNOzkKsKUIDFZupbR0w6rbQEwiVYjqhGDZqhEo3RZ3Rz30/W3NR9U5GJ8Oll/wr08H0nB9pz7MAdt/Vv+GQccgHSAKQptYvgUBpAXBpgUBEmlEmYDpRAdg2qU4Xm6TxNsDsH7l5f1IoHHnjh1oHLIBYmT+28fTubmCC9BIi/iHogYS1KTUdGPCYyADIBMpGHLJWhYClI1osB5lNVwb6gKX3vjYOMJdFTksEP7z2xrbCab3VbV3VMfCoobqKLUAsTYTPIpqM+HDAzg0jJZOMJpahQ0glcxRkoQb0C5BbQIq3tWtvRzju3Hnq+f5umReLeqwf6/KkLUKnKSMA5i1PJZDYqE2RkwizAbBBka9uqRwQyS5BZE5ktZxXjKgCySlP0Odvad2ugi+a9mhYmOxyn261MovCLqUxSIkOk12oOmAWzce0oEINRBpOgJKtVouSU4AT1WqJpyvcULUOIHVyPxCbuuzZH8Q0PD8epA2WooMVI1UNKZ2XyyWaI4VCDSeHSPKSI2ootGqMXG2S7rR52xCZuxKJzYZRrMfZNrofIA8xB5K6KHCNADp639RTiKJB0TKpSQlVNwz9TGE19AwcQL6CL1OC+aZPeyaX+NiC1CXTbEqJeA+c9adFNhOJIsMxGQnTZaanpcMwUIG1xPA33VWQxh9kUrqfx/TzllMw6cdBmvdj3uO4WZMQeTqgcZPSQjgvNbDPNxjFSsC43VOITt3AE6T5cNGCIEFuWYdRQGx042SgBZoYf1BwyqtwlfSz0y71dhltgyM6DJi7MQ8e5MAdgC2bKzSu7Ao6IY5NFMWlOgywDMBYiS2kSIC1GjWPVFtNlv+KSMc6R1plq/eOu61Ggei1zHmQG5xZ8cnl08zCFRLhJkzcisxg3OFXiZo10LjPz4TpQJoEe/kdHF+vI6Az3iB8XCwuH24qU8IrQ3ICRnQEs+NUs2eOBkoZiaGrKPYBFH98HgIcSukTMrpJl1omzBprFVxm2UiEJZoJ2hxvH1en93HXDp9f1/KDrx86WzUvwZbWh4DDWBkcFUFvgLIc6OEspiNXStsxhPQ+oh4dcfG9X8HCZhFFGvXL0/r+DsfFz8xfvOzi0S24JcomOzM5+fJKu3tLIL6JJlFRBGjnJ0xWAAK1pw5mBUaun0vnQOUAgAeYh7vGwHiO7vFTB8S+MlFoNS3/gK++jV7YN/4W38xt2du3tpzk/jT4PSB5jDs4dmIWIjSwjT6Qd04KAWhBQi2xV3FvAvLudTv298kEU1d+969A/fqoO1eV9jC5+RC/Fp99jr/53oPu2LXTpItq4jAgBCCqZLDAOZ6yavtvz6MIQjkMEFiErgUw6O+n1Zy6djar1iEztkW98lb993XCRRHyiWQwKN/fu2Ei1kiPKY8ScRaU9QfvLIDcDtUYk8gGxjUWiDs8f+uf5sWZSr2iOMbjvyKkvX+VX/lj50/pfWtc66/9YMyu7N3Tna30d7ZsoKWlU+wyr8zjdZzDWiRWxo1vxeE+OqI0n/5ma+Whketq1nOSVdz+v/uy3J87JVhUiy2QlaPkNLU8Y/ud1v9i1Tnee8PXFXrPYmNu82nAKTmh2dnid8uaZ8lypFDaCkdq0v9AsF3VbnJ8Mkt/8+tSnr6uDjtRxGMnXFljNlSB5SDtpE6I3IQysZafbe82NdsfuTiO5NqElz9P9VU0cO2UWzyUW1adEPPrBUvjq+3ONs7h/IW1TdSZV0x1ODYDC7wXBID6tykY597K3iJ85RIfQJdh8dv29oK9Il4FNWvF6yuacll9JqTRSpkZm4YrvLksn7WvN8A22/CNm5Xz5ZwNlY3LF/Eqj/wkwAC2fO4nxam4uAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImage/CPImageNameColorPanelHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABoAAAAdCAYAAAC0T3x2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABqhJREFUeNqMVkuMHEcZ/quqq7vntbO743jXm8WLs/YaOQ8nUswzQitMImJ8AokcLBHhK7cIWUHmAsGKZHzkgpAiBckckDghJQcc4TwIIg4iRBBZMrZje22v19nHPHr6VV3FV109m12CSWb0TVV3Vf3f/65h9Cmfx3/40wM5y48rli9qoZsF5fs0IxLSXBI8H0hfn5e+eunCyV9/8P/ksHstfO0Hp45kJv55s0b7H957f/zA7M5GzedeRwjPrq8WhYp1qq7eXRq+f+tiOGS9f8vQ/OTN53/3h89EtPi9F8OCq5fqYf7U1790wJufrrcL7EoMUc6B8pQhH4MkTQFEeGTo8vB2/42LbyRDr3eOC338T8+/mtyT6MnvnJ7OdfzK3gfGdy5+ec9MhvUufnJBVAAaIM8RMVJAQQLwjaYxJkHOzPmrr9+6tPHBihfSkXMnXlv+BNHTR880Uj288Niju+575KGpHatDokg7AqhOHCYwO1ZEBCINEEET2OnhqUacJqlO/7jzt9V3l/68Iuvs0B9PvBVZ+XxEpNLk5YXPT7T2zU91lu4QrXWJ0hhWWF+BkAHcuAMfwxIa2FRQQiltUJ9u0l36wtSByf2T+8eKJHl5JL8kenrxxcWmrw4//ODczO3bcBdIMni4sCQFMkw5EjECWZgSvBw1fhVsSykC2TKtsEf3HNrVKBqHnzx1cHGTCMxnHnpkL62sEO9bElhiUiyqCrBGgNAzFWgER8JLFGXcMtg2ANkqrfHHFr5KOknPWA7v24+/8ISsZ/N+fay9cgduQJF4vlOBwSJu47KFRGxJnqJynanILJFBvHJYtk5D2jG2o92k9vy3frbvCW5ydWz33pl8dZmYShiZyl0WrKgsgUUeRmnKvEBKu1GWVukSoiRyB22SKFi2Rh+xuZkHUe/FMU55fsj3J8JoFTEfOjeVgo2bj9wmMfoYfby3Bo8gt7nPVO60tqYUg6reaUlWmEMeU3pOZIEUCL4InLCRtj6SX7LqWTuLRu4rygQ3lePYJrY6tkDEpF/UhDZznlB6PLrBWYFsDztACALt3GM1DpiD5I7EL4mck1x8eFmO7jtKe12qESFSKc89afi4J6ymIElWUHbINjkJwZPugAfVg9AJLy3kLttEJZDhl23WUwbxCRTo4WkV83W871OIHT5mXkBio6ZVTQjZsBqHSIYQbgxBGkC69Jw1gXDE3BaSydC9C+I8g4gUWYbNZFtbDLFpmeqyzD8Q5CoNmDf0QuZdU9lgdlxMNGz1BxbwS4j6CQAfkIAHBVhmHYYCE2g7BerGRwwExDEFKxWsVSCwKMqGa9NiI8r6Ne4teTUmLyTZ7c6ecILS1AkPINSvICFT2NZtK9eSKGjO7ahd6/BjEl4CS611OUTbvpeXhCG+t5bipCbkBa/JgrNJNHim1WRGRJoFOdskkJDHbK7z3LlGA56tASxmeJ8r5+cALpMx3JySYFlJZi1ssKbJ1nvtelOeFW+vn7v+jfY3n9F+kc+hO1ilfRsP2xmYctobCDPIGJuaCkSZnaeOuFzDO2PjFOEMLOQxsrZB167nS2mU3Tr1wjsny9tyjAfPbXRv/p59bjarDY1f3nIid5qXlkCIgnA5dBYx62PsyaBIjn156hQo4hKsZr3gZ8uXB436mPw+VZlKr62f+/Do+FNfvFvcCe9rT3Uozp1wm01WWz1wRApjDqSVRVaw3WcqlK0FZ+stev+t6IrkxV9Pnnr79Lb7qMnDZ72+Vld7//qQJnx7QcETEDroE/V7RL2uQ9fOAXuX9Kp5z+7BXqugGKOL5/vXisFQBZw/+z+v8l/Nn56Oi+iVopW1FqYXdpuk55vBTaQxNJUQ5AHwP7HEuc66qIFGVMuJzbQQgyD7+3sr17VJ+/VWcOTEL99ZvtefE/6jXcdr9/udswPR/cquTj2eajV2G91HHd7Fch/dfaOMEWvB6jqOd1D7Tc/cWN+4cXltLQxr9Jera+mx375+LS6blDH6v4lG95ltc95zO797tM34jxMezfqtbGN23AvqQe61WsG43dyN+v2BSrMryXoa6UFb+OZmt6Bf/Obd5VerNlEVHimQqa1E6GrISYQLsMLawMTBcObgghw73BJ6QdMwDHg2rtHXIlZ0jaR0jfSVK7F681I3/Sf2rwE9qwcA03HZItIgSj6VCNgBTAOTthKqPUGlrRW0DuDvDH30WYm2ua4itvP6FvibFytt/teyhMNKaFq92+Y6i08kw5aRbYmh2FoK1Vxvu+U+fjYVRs/l+B8BBgCMykDM1OUJfQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wUEOwUAUANA37S8JG7Fj5Qhu4KrOJyxEpJTpWHSW+l5ggwOOpZSzP8KkYDQjUJAxmBHIeOORUtphiQ6NKpDR44YT9thipQpkPHExuWONhSqQ0ZsMuKJDqwqM+CDjhRYNkipQkJHx9ccPCKMfJ5j/ZGcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wTsKAjEUAMAJvLt4LTsvayEeQAQbbRTEZd1PEgWLCLozUWv1T0ppjR2OYVlB9RaWDciokVJaaQomjHhgQA5sfFT0uOKMA3rkwFYzosMNF3SYA3tNxoQeHZ4ogZOmoiBjRkEJ3P2qvrwAKV0tKePvXOUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewBottomShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCFtj+P//PwMDggACdRDRByKiQIQOiOAHEYwAbGEKQz1zHVUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAYAAAAb4BS0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUCB1jYGBgEABiAyBOAAAB7QChuhy7UQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCFtj+P//PwM2DAQJQGwAxAIAxNISj3z8C1sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopLeftShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUGBl1wbENwjAQAMD7f8sYlCoN+w9GyRxOgRuk+C78CzcCgUShoZAIS0OiY+CFgY6yNBQGTnyRSISloeHAe875cSNReOK0kUh0HDYSgcLDRvoJhI0L53oFmk+kBA4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopRightShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBJREFUGBl1wbEKwjAUAMB7aVAExUFw0f//vC6i1GASHYQuzV0gbOv+Ms5WHQ0VH1S0jLtVRcGCFxaUwMmqo6HhhhnP3Ht/2BARVxS8k7ELDpiSsSN2SMnYHhMiGQuEny/9fRhMYHBh/AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPImageView/CPImageViewTopShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAYAAABP2FU6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUCB1jYGBgYARiBgEQoQMieAEB6QBLHwsEZwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPMenuItem/CPMenuItemOnState.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAbElEQVQoFc2QQQ7AIAgESw98nW/4O55BdxNNkB6aEA8lGSXKiqxExNWJuyOi5idCEVFgwCfMdRuL5lRQYICuZSzXvUTTZS8iPuBZeNycgQ41xnaQ268cBTSCc/LLhLmue+7CpRPHZ/z8RLvjA8MnX72R/hSoAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAZ0lEQVQoFc2QUQrAIAxDdR9e3Wvsdh6j6wOtWxkIxQ8DgRgNps0ikiK4IiEy5wSLtqnK1onGm2A5P6zqeeDZWxNvU3Xzqe7Z++3Luecwpr6eqziqFPWZicoQjTfuU+YQwfYZlyXCPz68ppV1+vunagAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpiZAiuZ2ZgYLAGYh0GhsA6h44tpzdfeP7lIxML038TCx11x1c/GflY/vz+w/35139uBoY/DCwM//4y//n7hwEEWBj+/2X+/QfG+fuX5ffvv1DOPyAHLvPvD1DZbySZ338QnD9/EHrgpjGxMzP++vr92w+QXUy6StLXjp+5cPnL12/fGe8+fSkXVjMh5Oq9JxqM////ZwQqlwZiIYAAAwAMX1XNMAlUgQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYAiuL2e48+H3f6Zb734yMP3985eB6c/fPwxMv/+AiN9/Yaw/v0FcIOvPH5gYWB2Iy7zvwWdVhv///xsDBBgAJJsuTOBf54IAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ5JREFUeNpiZAiuz2JgYLgCxEeZL+zbukdBXEhmz7mbT5le/WTks9BRd2Rh+m/C8vPXH4afDAzcf37/4Wb58/cPAxj8+8vM8vsPlPMfxPn9F8L5+5cFIfMPzPkN5fwBKUOS+fPnL7IyJKNB9vz89esHOzPjL5YvX799P3PxyhVdJelrzKde/ZbnZvl/YFVz/gaG////6wGxDBAzAgQYAO59XJBTIVY/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJhJREFUeNpi1LewZWZgYLAGYh0GfXMbh5XrN21++fbDRxYmZiYTGxtbx39MLNwsf/784f7LwMj9988fBhaG//+Z//75ywACLP+BnN9//8A5IKUIzu/fCA4zqgyMw4Cmh/k31GgmVlbWX1+/fPkBspRJVUX52qED+y9//vz5O+Ojx4/l8ovKQm7fvavBCNTDCFQuDcRCAAEGADqxWcjpDiMNAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUeNpi0LewLWf88uPXf8Zn7z7/Z3z0+sN/xvvP3/5nvPXk5X/Gaw+e/me8ePvhf6Y/f/4wMP0GEVDWXwamv2Du378MDKra+ksY////bwwQYAAEtTEizRGTJgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJZJREFUeNpi1LewzWJgYLgCxEeZL128tEdWVkbm8JGjT5n+MbHw2djYOjIxM5mw/P7zB6iCkfvPnz/cLH///GUAg///mVl+//0DZQM5f/7AOSwsv38jcZBkmKGmockwgPVAjQYr+wuU+QEErKysv5g+f/78/dCB/ZdVVZSvMegYmc0KDI0sevT4sRxIrR4QywAxI0CAAQBTdF49cw4ogQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiZIAAISBWATGE9+7dO/Xr16+vGTg4OGyAjA+/f//+z/Tjxw8uFhYW/n///jGwAJUxgRggAOIw/v37F85BkWFClkFVhlMPXBkTDw/Pf6DFn0CyzN7e3mKsrKwcUlJSCgxv374VCA4Odufn5w9h/P//P0g5PxBLAwQYADkXPiP8F5MNAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNocxFEKgCAQRdF59dO+WkT7B0EEQRBhGERv1Pk4Zma31lpozokiArk7GmOg3jtqraFaKyqloJwzSilx7L3t7/OcwPUKMABbNDOyQBe/kwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpiYGBgMANiIQYQ+Pr16+u9e/dOBTKFGX7//v0fKPCBg4PDhunfv38MLCws/D9+/OBiAXGggInl79+/MA4jThk0ZSgy+E379evXJx4env9M3759+7B///71rq6ubxn4+flDgoOD3d++fSvA8P//fy0g5gdiBoAAAwDmKUtB/aWHewAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpiZIAAISBWYQQSwp6enk1iYmJhLBwcHJpARjQTExM/048fP7iAsvz//v1jYAEymEAMEABxGP/+/QvnoMjgUYZTDyOMw8TDw/P/z58/n0ACTK6urm9fvXq1/vfv3x8Y3r59KxAcHOzOz88fwvj//3+Qcn4glgYIMADyGjn6SjxcsAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYGBgcGZMSkr6z/T//38Gpn///kGJv3//YnDRxOAECIQzAw3gAAgwAGRwKZNd4WBbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAQCAYAAADTasWKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIBJREFUeNpiYGBgMANiISBmYI6Pj78gJSUlfufOnZNMQCAiJiYWzcHBocn0798/kAr+Hz9+cLFAOSDAxPL3718YhxFVBrcyJA4TTj2MYEv//PnziYeH5z/T79+/P7x69Wq9q6vrWwZ+fv6Q4OBg97dv3wow/P//XwuI+YGYASDAADufQ795H/vjAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif
Content-Transfer-Encoding:base64

R0lGODlhQABAAPcAAP///8zMzJmZmWZmZjMzM7u7u6qqqoiIiHd3d1VVVURERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBgAAACwAAAAAQABAAEAI/wABCBxIsKDBgwgTKlzIsKHDhxAbGphooCDFigQvRtwo8CJFgQUmFjAY0sBIAB4nckyYgIDLlzAVQEzp8eTKjAoUJMipAIFAAQkGBAVQAAGCkQIOKD1ZQIDTpzcfHkiQQEBBo0YtKsUYtavXr2DDih0YcuxXjR0/plVp9qFJhyFttkU4lafVhU2fyp1rEEHQAQMGYvX5U+mBu3wTK17MuLHjx5AZo42McDJKtWu5Jr4ol/NllSXZgrRsNqVD06UVuOSZk4ACxKdpiqZMe6CBATmp5hyQF2GBkQaePtUs1u8A2FMBBwYwWKDhA8SD721rPAFhgc0HJlUKu7Zzowe8i7cfT768+fPo06tfz34jae8lDb4XGdmzbcxE3zMOzXWyfcXxEcRfZpntRd9YKdmEFluT8TebWA6+1VCE082l30EXttdWSzB1KJNbsh0YlQGqucaaa90xFCJxZvl1HV4CsJgYULntlOJBwjmV2AE15maVXwmEp9VhP+UoQIUjssbbQMoFyRxWKD2XkXD7NXlXdgZISZkBfyXAVXZEPYdkYsotKRiUBGkJ2W99oamhUhrGKeecdNbpXUAAIfkEBQYAAAAsDAAVACUAHwBACP8AAQgcoECBAIEIEypcyLChw4cQGxoYkGCAxQQRBRrYyDFjAQQgERRAeKDkgYQCUh58aCABgZcwMWZ8WCCBzZs4Dcz0iBNBwpAIDpo8WUDlSoEFOOrcKXAoUwAGYMIc8LQqAqknqyYkWLCrV5laZx4YkDWjgZEOBVC0uLapxaMIiwpYqrQjRKBLnQKQm/IpUIV6ERoNq7DvUwFSEywl3PCqVAIKyjJeKEDBY8mTFxKkOrkmzs+LGXP1+jWzacJqK4KFqJQmgopsE/jcCDFpXbRIYa/NOjFk07IqE9ZdPBZBaLW+Aeg1ihthaIYH/v4uiTLlc4jRQUoODFXl9bQDfAIMNqlQbvOwAkrChRgQACH5BAUGAAAALAwADgAfACYAQAj/AAEIHEhQgAGCCBMmNKCgoYIBBQYqIEBxgMKLAzJq3BjxoseEBxCIFDngAIACHT+qBCDggEsBBQXIJFjAgM2PAihShLnyY4KGCX7y7Em0qEIBCA6kBGDApUuBMmcytXnQKEEDMqsa1UlAq1WFBrgi+HoA6E8FCWAmqPg1IYIEY62+3bgxgcW2YEcO8Gp0wEiRPAs45SmVKl+PLV8OjDrU8NKFLvkyXniY4ACKcfEinEgxgeaEaykqaDsX4WXRj1cCdRj3gM7RXweYbbj36ecDZxUM/cx7Lt2MdvH+3sj7KILdeAv8RbBX83K/BxNXtpkawF+TA50eiB5VoGGi2hd3F/dOdWV48VLJ3/R4Hj3y71YnFx+4/mJAACH5BAUGAAAALAwADAAWACgAQAj/AAEIHEiw4EADCRIYMEiwgAIFCRQcEKiAAAEFDAceGDAxo8cDIA8U8OjRgICTBA2oXJgx4sORAyteHChgQIIBOG8uHPAQQcEDCIIKHeqTpMCQIVkCOCngoFKGBU7CdKqS5NOBFi2SfPiQoEyMAAokTFhUYMSIPr8aNGATp82rBIESFWq0rl2BApCCbGrUwAG+A6MyFbgS7kGmTwvfLVh1cUyLYBkieNjx8cyMPCMO8AqZZGaIliNvRPB08lmBWQkIFOv2ZkcBXBMsfQg4LIKbrREIvlvzpmzHd+XOpUtS+NypwE0a/qgXOUO/ekUCMCnAucaQtZlWn77SqHaYij1qDU/ZPeN48o0dhwcOMyAAIfkEBQYAAAAsDAAMAB8AJQBACP8AAQgcSLDgwAIDBhQwyJBhwgEJBAhMoEBBAoEICGgkYKDhQAEIJHocabCAgJMiSao8aKBlx5UkHw4oSNEiQQMbCRBEwJPnAAQYEyQ4YHCAxosfDyhdypQoTIYoUS4U6PLlU4Ytr64sMJVgTaQ3U2JNkDCB1a8fc6bsicCpwIdDAaA1qlGBxwJsEczUCkBA06Vi+Qp+aiDqSat8TSKm6nJwQZddHZNEq/WA0MCUB2YksJchArIJgA7MLHejXY+fH46uCFbBRrB920a2rFoua4GuNXZ+mzcl6JkGhHbMTcBtwQN5BxhnqHSlgZ4DFkt27Pcv08HVrU9nuDAydcOOTRoTFlkgq9aoiKtuZ2x+u/r1768GBAAh+QQFBgAAACwMAAwAJgAfAEAI/wABCBxIsCBBBAgMKlyoECFCAwIHSBwg8ICCBAoUFGDI0IAAiBwHDlAwYGNIggZSgjzJsqHDghMpDiyQ8SJHAwdy6jyw8YBEAQYRZKRokYDRowk9CljKtGnLpypVPp06NabClS0LOERgEoDVgTUVhNwJdOBWoAMSJKAoFGOCgQYSHCVQtuDOnF0ZHphLQEFdgUqbLqVKuDDVAlFT5jVcECvjxwTTroUsUMCAhDAn2s2IueUBhwciaxZ5kSTVzy8jjgbg1vTNA38BWE79tXVn2UMJ3j0A0sBlhKo3YsxYdgBfAo4F7AaacuHSuMcTODa4c7HCvUgpGw4smKl2wN29fw8POX184vKPz6NPr9I65YAAIfkEBQYAAAAsDwAMACUAFgBACOgAAQgcSLAggAMHDCpcaBAhwoEIIiIQKCDBgIsMMwIooBFigokdBzpMSFAiyIEXMS4sIKClSwEUERpomOAjgIoKFNTMSTJkSAUEggodmsAnAJMGC3A0etBhSYkDDVgckGDmwpdWBY6cifTA1AEDCwzImTPrwJctQwrQmSBnUaZG1xIgmzOoArMaD0TsCZegAZkFkRKsmICvRgEOYUKE6pHqSbWJF0dEedEmQ5Z4/zo9yjhl4YKOz6JdWiBygckAqFKFSLatgoIG0AqYqTSjWLeuwV5+qba14b7Agy8EOrT4W+EUgdIlfjcgACH5BAUGAAAALAwADAAoACgAQAj/AAEIHEiwIEEBAgwqXMgQIcICAg9IPCDQAIKLCBhqFFjAwEaCBwZQ/EhS4wECKAlkLMmy5UaHCUFOLIhx5UYDOHN6BGDgoUEBA0QKHJAgKNEBMQF01Ml0Z8kECqJKnTrAJckBKVM6tcq168SRXX86lClxYIGaEG/mTCsQJsSvAATUJIgggd0EbA02fWq06FaCTXO6NHC38N28YRN3TZAVZYK/ihtGrRq5suXKAiQmjVzAJ1mwAxEgtdoT4Va4Aw9gBM2y9GbUAGqyZgi581gAqDGOHmhRaMG9A2/jHql7Z8iiQfEqXKoTsV6PdY0SReBcoU6+RTdfdsk8MGSNUKeKK6fs/btGwoYLV+86QAHl7QZPZlWgHf4BBY1Vwv/NOGX9/QAGKOCAra23UUAAIfkEBQYAAAAsFQAMAB8AJgBACP8AAQgcSNCAAYIIEyY0aHCggIcCBh6YeEChxYsIBSCIiLFjRgUgE1T02FEBgZMJMDI8SBAiR4kUSRZouHBiRAMIBiDYuZMkxgEJBggdKjQBAp8mT45EAFJBApA+FSI4OSCqQ4hWB65siRXmRJJbAbgEYIDiSIEHeB7NKtCATrUF2FokSreq3LsKJ7oN+VSB3awFkhL4KxDoWrYJThJQwNbAQ5ZZaXJ9iLDsAcgKGca9StkhxZcKZzLk/FLAZ7CjxXY1i7lAWtBaU3c2PXGzRrWEfRaIe+Atz7Ny3fLEjLd4R6B1ix62WiD5ULkIjBpv6bRvyrsDUIq13hc4yewnGQsYbN5UAXGPUxWfvytAMQHYeA24n14QPsGAACH5BAUGAAAALB4ADwAWACUAQAjzAAEIHDiwgAABBQgqXHhQwEADByJKXEgRgcWLGBEcUIhAgYIBAgckGEBypEOBCggQUECwgEcFCSjKFNjQwMyZBSRuvEnxwICdMlOuFHgApseEMw0kSGCTp1OBBmo+pdkQ6UABB5rexKrzwMmpYCtmvAiU4siSA7QOFMqyYwKYBBEsFYmULUGjCtQqVKmSot6pDb8CbhjWIGGwhg8S5BpRpmGbObtm5RlZomCnEP9OLTCWLM/OGMuG5bnUJGAAnM+WRGAVgACPDt/CJiqSJF2BfAkIfPsWAUEDCH6uVclyt1GQM+0OHGA0ZlDiCosq8P186OiAACH5BAUGAAAALBUADAAfACgAQAj/AAEIHEgQQIGCCBMqFGigoYGBDh8unLiwgICDFDNCHICgo8SECQiIVDAwgQIFCQYOWJkAgUaEEQvGfLmwIUYBOHNepJnwgM+fQA8IGHhAJAGSBhIkeDggQVOJAjpKdSlwgEiqJU+mJChA6QGeDB2CnTgzbMOxAGaWTasTrUCdQ932DPozrtyXPhcOPcBx6leECIwSEGgSZVWWfwUWOIDArgKjWwlrJYjAacuxhSPfhfhxs9nOYdGuLSB2bNmIGMGqLU3QwM6MZ9OytghXrmu4oMfqTO25N0K6Qe2CBe5TOM2oxu8a6IuAI2+EIQkM+K3UpYGpUhM+Fjk9M4ADTlcSKmTccTpBwVS9A+i60rxewXbVpw2vGeF2Ap3lHxavN7d+xc+9VMBKAWYUEAAh+QQFBgAAACwOABUAJgAfAEAI/wABCBxIsKDBgwUNIFzIsCFCAQoISJR4wGGBAxgzOhyooKMCggNCDhhYAIFJBAU2qjxYwIDLlylXyhRAs2ZNhQImEkigUGACBT8RABiQIMFIASeFDhSQsSLDngVFjpRJdePLl1WfYs260qZXmlAJFhigYKpDAwLCHkSgU6KCimQVKCUoIGTFi00xqj3Y8adTqQINJK36s2NMgYAJDuZa0CTjxwZbboWc8KpLypWvYka4d7PBrzc9g7bZ2TNDthOdMsSLsaGBBG13ohXAGWfeA7QJGog9FWJfAGOnnjRr4DbIjrk5/kyAWKTA4ckFMi09kOzy6s6fn1St0npZkNkFHhPYLhNBR+5Dww9EMCA6Y6JGqwYEADs=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldCancel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAB3WlDQ1BJQ0MgUHJvZmlsZQAAeAGtksFLG0EUxr9NEBWLlaKe9yBiIbZr1oBeJEZtkeYQYopVeomzaxJw12V3jQoe/Bs8CIVSKBXppfRo6SnQS3vwIGJr2/9CwYvI9psd0vTQ4MUHb/c3337zZubNAsl82fPWEgAcN/SLT3P6i6VlvfMnNPThPgbwuCwCb7pQyNPSJq6+0804HZW12pjayb0+FwS0FA39FcVZySuKS5I3Qy+kpypZVMsWeYec8kvFGfJ7cm9F8SfJK4q/Sq6Lipx7TjZcq+YCiS7yhGUHgpwlCysQDvmA/NJx1lk/ScSI8HzOTY6Qh2RfpAjUL4CpN/TvtbSlj8CHHDBw3dKGx7ndDPD5VUu7PI97pQ12BatmOi6n9RwBHftRdLkIdD4Ebn5E0fVRFN0ccu1fQONKbPj12MuDaMfc8C1jdWZVHTjhGRjxHf2fVV9ilwG8awDcCp7tAq+zwDAHD34DBXIpi4RpNlP1kFagOzdmpA0zIyfeaThrG7ynODr4vGe7zxf47mPmV/0nxSZb9uxck+1g7q+nFs6XmjpyGIOBNNNEBovqrvkV4xPs/RnhW+NL/a1U/o3Q3op7OLPubfu1SjXUp/mn2yl93hWPUnraMCbxB2AbgwprTB4MAAAACXBIWXMAAAsTAAALEwEAmpwYAAABhUlEQVQ4Ee1US0rEQBCNHwYFUfzs/IGKXsAD6GJMwIuYla6SO2Sjh8gVIskBongEEUWEWQkKOpKIaHwvSfd00hnjZnbz4KUq1a+rO9VdMYwxRl2BiZYFFjC+DC6Bc6W2D/sKPoNvZUwzfyVehXoTZMIMpFa1XOAJ7IEaprRIEViD2QNnQDVZMVo8OzCL4Bf4XoQGz8mBK715eOsgF81c192hBSXKGN+nwQ2Qc1qxBUUXPHIc5yQDwjA8L2Nd+oxxTMRgt8FW7EPBxDlFIlrVF+Ol5ZxWHEAhE9MXCeu7V3SH8CtoqnFF8M+XyhlwDotfB68RTztHEATHpmmeRlF0wQD8M3yBYVnWZaHIn9qtUMaky4PIS4HTt+ufL8rCMaGD1Q6PV6qOHwTYcZ04jl/SNL22bftGiHzfv0uS5MrzvHvE2DQf4CP4CUoM6zx23S7YVCo5Gc43eAv21CD9ph0zzpqxo2ZBdlgdYqcPGNCSUjxsxyIRO2oFFD8h6rlo608ImjFGXIFfJ96OUFGBfFoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldCancelPressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAABz2lDQ1BJQ0MgUHJvZmlsZQAAeAGtks9LG0EUx7+btBixSI2t5z2IpBDLmjUQLyU/oEXsIcQUa29x8hPcddlsogUP/g0eBEEKpUW8iEeLp4CX9uChiK2t/hUKXkTW7+wQ0kNDL30wzGfefOfNe28GCMdKjrMcAmDZnlt4ldXfLr7TB34hjBGMIoqZkmg6mXz+NSV97OYHNLl1Oilj9RH1cw+7vBDQ4hQ8qSlOS15SXJS86jkeNXXJol4qk9fJcbdYyJH3yMM1xV8kLyn+KrktavLsOdmwyw0bCEXIqXKlKchpsig3hUX+TE5Z1grjhy7JMeG4PBt+QB6XfeFMa18BLz5Qs9nzLR4A+1ng6W3PNzHNdJPA0XbPd30e9EobizSrZiIIpw0dAg+3fP96ARh4Btz99P3bQ9+/2+Xdv4HOjWi57UDLQrQTJvyPtapZRQe+swZa8EZ/Z9WXQGUAnzoAU8HcBrCTBia4iF4AeXIxjZBpdofqIaXAYHbKSBhmUh78r2Ytt/hOgclv+qhiv5nn/JgjVnVfFrqMLKZgIMFhIokF9Y7cxXSKfT0jfOsctz9Kz5/mVdaC/uRWnPduo1b39Ax/cSWuz9rieVxPGMYM7gG5lX3sSVNlhQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAadJREFUOBHtk7tKxFAQhrOKilvExgtoENRGUijEwsVKYSEPsG/gC8RXyVOk0idIYSexEFQWbUyhEfHWZBEvTfz/JCceyexupdUOfHvOzsyZTP7JMYyR/bUCjSEPWEB8FSyDOcD8J3ALYvAIRBtUeBMnHDArnjSMF/jPwLkUH5ec8G2AXWCCftZEwALvoNb5mHCKr78Fphhrt9uLXHXTfMxhLs/8MqljSrDOLBZwXffAtu00iqJ7+jzP23YcZz/Lsm4cxz242DnXBFQmFd5BdIYZPMiilmV1uLZaLWytTpIkh0EQXFdVik1X/y8V3kPCRJmUsVNV3DRNG0WPfN+PEM+AGv4k9qflmXyRNNbj6qDuY0GaFCsi+JU6XoGfUuQdUVP1+mmaXpWy9PAmSlPmPYChUrAoL0SDw+OgqClfX5dFGx47vwTqQdjKHX/BvwSaHB4L6INicfrCMMy/EuS9Aur7Birrp5O6IPm3XGUXG31on3Adg4si9PMracwob9IHoCzTgMYm9KK80iegVhS+wZNFnDdqDfDqzgPaM7gDN6B2leEb2T8p8A3yHYy8BAVcaAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldFind.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAABz2lDQ1BJQ0MgUHJvZmlsZQAAeAGtks9LG0EUx7+btBixSI2t5z2IpBDLmjUQLyU/oEXsIcQUa29x8hPcddlsogUP/g0eBEEKpUW8iEeLp4CX9uChiK2t/hUKXkTW7+wQ0kNDL30wzGfefOfNe28GCMdKjrMcAmDZnlt4ldXfLr7TB34hjBGMIoqZkmg6mXz+NSV97OYHNLl1Oilj9RH1cw+7vBDQ4hQ8qSlOS15SXJS86jkeNXXJol4qk9fJcbdYyJH3yMM1xV8kLyn+KrktavLsOdmwyw0bCEXIqXKlKchpsig3hUX+TE5Z1grjhy7JMeG4PBt+QB6XfeFMa18BLz5Qs9nzLR4A+1ng6W3PNzHNdJPA0XbPd30e9EobizSrZiIIpw0dAg+3fP96ARh4Btz99P3bQ9+/2+Xdv4HOjWi57UDLQrQTJvyPtapZRQe+swZa8EZ/Z9WXQGUAnzoAU8HcBrCTBia4iF4AeXIxjZBpdofqIaXAYHbKSBhmUh78r2Ytt/hOgclv+qhiv5nn/JgjVnVfFrqMLKZgIMFhIokF9Y7cxXSKfT0jfOsctz9Kz5/mVdaC/uRWnPduo1b39Ax/cSWuz9rieVxPGMYM7gG5lX3sSVNlhQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAZVJREFUSA3tk0srRVEUx69XRAxEMpYo8krKkAEjg/sFTEx9DwOfga8g+QZSHqXEQHkr8hh55f36/dxzdOice3WjFP/63b332uuutdfa+6RS//qTHSjIUrV7PdABjYHfJuMKLAbrLw1JSbQPQRqKoBDUMzzBFMzAC+SUAeLUi3EYrmEOpmEhWNcxtsMxHEBOFcd4WEU3uGdgT3wHnnoHrGYQ9LFtrrMqbEPUySRN4LgEl3ADt8FcW+jDNLeSKgmTW8FjJIz3YTKlj7TACHzWBIY1jWGwzw62RXWCp45Km9rODG+BDBj1m2T9lkCfuIs3cQX4dGuhBM6hEvqgH9yfhQ3wrk7hELrABKvwrmj20KjNgGkYANtlm5SHssX67MMYXECoNiYfErgRV4l2A+/BGRiwCkzkxzgP1VAPzbAM96BOMsPHXwMkyROXQymEp39g7gFMMgo1sAvj4CuMVVIlOvv+PaHPV66C0dfleh1awYq24Ai+VXagDBrAe7PibF1hOz8Z1FaaIOlTyC9yzL9+pIKYPL/A9AoeHk3/hvvtQQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSearchField/CPSearchFieldSearch.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAAB3WlDQ1BJQ0MgUHJvZmlsZQAAeAGtksFLG0EUxr9NEBWLlaKe9yBiIbZr1oBeJEZtkeYQYopVeomzaxJw12V3jQoe/Bs8CIVSKBXppfRo6SnQS3vwIGJr2/9CwYvI9psd0vTQ4MUHb/c3337zZubNAsl82fPWEgAcN/SLT3P6i6VlvfMnNPThPgbwuCwCb7pQyNPSJq6+0804HZW12pjayb0+FwS0FA39FcVZySuKS5I3Qy+kpypZVMsWeYec8kvFGfJ7cm9F8SfJK4q/Sq6Lipx7TjZcq+YCiS7yhGUHgpwlCysQDvmA/NJx1lk/ScSI8HzOTY6Qh2RfpAjUL4CpN/TvtbSlj8CHHDBw3dKGx7ndDPD5VUu7PI97pQ12BatmOi6n9RwBHftRdLkIdD4Ebn5E0fVRFN0ccu1fQONKbPj12MuDaMfc8C1jdWZVHTjhGRjxHf2fVV9ilwG8awDcCp7tAq+zwDAHD34DBXIpi4RpNlP1kFagOzdmpA0zIyfeaThrG7ynODr4vGe7zxf47mPmV/0nxSZb9uxck+1g7q+nFs6XmjpyGIOBNNNEBovqrvkV4xPs/RnhW+NL/a1U/o3Q3op7OLPubfu1SjXUp/mn2yl93hWPUnraMCbxB2AbgwprTB4MAAAACXBIWXMAAAsTAAALEwEAmpwYAAABc0lEQVRIDe2TSytFURiGj0tyLxIxlaIUA8WUwkz5A36BPyI/RvgDBsqlTEwU4gzUGcstd8+Tteqotfc+nciAt57zrb3Wt7613m/vUyr96092oCHHtWvTMAEjIe+UeAwH8B7mCkPeIUvsXoYmaAyV3oivsAHbUNNBFkhphskVuIdd2IT98DxA1F0FrqBQzYkMbz0Frll4C55AXYBuFsGcw/BMyFZsQ3WGLRwFo72/hYeAY+diDsNipZxYIB6uA99B7P0L4+jKHHMLFYtVJ1rQtqjJz/DlN86ZU9MhqRfvxg6wWD/o9ga6YBbmwPUdOIPokmFaqZvorhP8fBfAFtky5aU81H1lWINryFXKiTezaBksYMFucM6b70EvDMEYHMEjZCrlJCZ7AdvSCo7NfQYP64FV6INLWAdbmlTKSUzUkUX9fP1T3oVx/JxPeB6HQTiHCnyrdKXDYZiHdsjrCsv1yaIt0Aapv0J9VTN2/YiDjLN+efoDgZRGxg70NQUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAARCAYAAAAcw8YSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCFtj+P//PwMDmQQQ2IAIDRAhASJ4QAQLAM+wJGk6yEDYAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKtJREFUOMu10r0OwjAMRtFrCIiBgYGBgYkn5mERtOmPWWwpShNEI7BkdfLR59QBCMABOAIn4AxcgKuq3vmiAj+ovyBqPVuvQrQAjC1JHJgMGNYgpQQD0Lesk6bogVcrMgIR6IBnyzqTrREtxWNtkjlBOmALbFof1teRlmNLEQdURG7A3jpYe0qpIenN+J/aZcMOSL4OH5CYDC+A2sX6VwySrKkhmmFkCKVhrzeOxUzF8ZZO7wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyBottomRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALFJREFUOMu9k8sOhCAMRSHhs/yo+ehZuHBhDKP4wE4nKZlaMFoWkpxgeJzcgjgAMHeatfaF3RtpkQ7pEY8Ed8tw0R6X7AQQVZKtIAKtZCVRZCJ1kpmJDok0kolEWRqNZEQCsrA0aomnNAuVFWvKGViaJNlrkoyFcsDhm2jYQqDJSAs32vTjw76zM+mEJIm4bDX/6y3eTi9iS1GSRTF2+E98QcJlXCrHTEoSTg4STsTZ/BcCN3bqE4blmQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAABCAYAAAA4u0VhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCB1jYGBgYAFiHiCWAGINILYB4hAgLvj//z8DMRgAsZ0fM9irjXgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAABCAYAAAA4u0VhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUCFtj+P//PwMxGAgKgDgEiG2AWAOIJYCYB4hZANHCHzOD2AJlAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTop.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAARCAYAAAAcw8YSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCB1jYGBgYAFiBh4QIQEiNECEDcP///8ZyCQAal8kaTS8tF4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTopLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJVJREFUOMutkgEKgDAIRbdmbY3o/nfrMGuBhjODlIQPw/D1rEEYKyrn+PL8LlAGeCal94CBeMskkjC8FzVIFICE/SszBgRsAIGwSDi0YAo7g4C9QgAHck9trR3hQ8l1CFJ7ti8AbsJXKQjZLRAy4d9j9ZjIdcjGBaHfm9HGvA7dAbof2Wqi2cyedTQjs0lQQC6Iq36BnNGBBaWEiui/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewHeavyTopRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALBJREFUOMulkWEOgjAMRjscgoYYf3gF738Jr2SCiqsbaUlTC7GzyQuD0MfXEgEggl1onK1ns6BfaUZFUvfL+0UyGBJuYt5EUiAnOW8ISuOUeRETwZVYclES2Vx4EiNdg/5oRMQb/FAhhKsQyMSrf8aqQQh4R0UaPJKTMeos8yZ5EK3YjyvJMXPP7GkNDe/IIzlkOurZ1Uo6GoNTNDXjtFYKb5KvBDXjaAHUJNmM+Hd9AEI6RFQh0+dCAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB9JREFUCFtj+P//PwMDggACdRDRByKiQIQOiOAHEYwAbGEKQz1zHVUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottomLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wUEOwUAUANA37S8JG7Fj5Qhu4KrOJyxEpJTpWHSW+l5ggwOOpZSzP8KkYDQjUJAxmBHIeOORUtphiQ6NKpDR44YT9thipQpkPHExuWONhSqQ0ZsMuKJDqwqM+CDjhRYNkipQkJHx9ccPCKMfJ5j/ZGcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightBottomRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUGBl1wTsKAjEUAMAJvLt4LTsvayEeQAQbbRTEZd1PEgWLCLozUWv1T0ppjR2OYVlB9RaWDciokVJaaQomjHhgQA5sfFT0uOKMA3rkwFYzosMNF3SYA3tNxoQeHZ4ogZOmoiBjRkEJ3P2qvrwAKV0tKePvXOUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCB1jYGBgEABiAyBO+P//PwM2DAD6GxKPgLbV2gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAABCAYAAAAMwoR9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCFtj+P//PwM2DAQJQGwAxAIAxNISj3z8C1sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTop.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAJCAYAAADzRkbkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jYGBgYARiBgEQoQMieBn+///PgI0AAMt5Dzxv9Xo9AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTopLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUGBl1wbENwjAQAMD7f8sYlCoN+w9GyRxOgRuk+C78CzcCgUShoZAIS0OiY+CFgY6yNBQGTnyRSISloeHAe875cSNReOK0kUh0HDYSgcLDRvoJhI0L53oFmk+kBA4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPShadowView/CPShadowViewLightTopRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGBJREFUGBl1wbEKwjAUAMB7aVAExUFw0f//vC6i1GASHYQuzV0gbOv+Ms5WHQ0VH1S0jLtVRcGCFxaUwMmqo6HhhhnP3Ht/2BARVxS8k7ELDpiSsSN2SMnYHhMiGQuEny/9fRhMYHBh/AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSplitView/CPSplitViewHorizontal.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAAKCAIAAAD+RXMgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjWgoDTKEwwPQPBpj+wgDTHxhAYmGTRYgdggEAPLVN4i1E+ZUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPSplitView/CPSplitViewVertical.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAIAAAAlXwkiAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCB1jXLp0qY2NDRMTEzMzMwsLC4SEMNauXctIkTQAwg4O0avWgU8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUCB1jWr169X8mZ2dnBqZ///5Bif///zMw/f37F1kMLIsQA7MQXDQdRkZGjADPODEixZK7iAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAASCAYAAAB4i6/FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUGFdtUEsKQyEMTCBuBXe9gDvXPU+37xKFXkev6Oc5QoJtHYjiTDJJ5DEGlVJeRHTNeDIzgZOc8zuE8IkxkveeTGitXSklcs4tovdOgMzHQ0QWiQBQJchQArdZ4Zh2S9ghtdblq9kmgDwKsEGARIKKS9ARd5gV8DUumh+n2psDtgfIYwXI/TtM0Iq/PU5TAfxrobgByk2US+DqkeEAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelBackgroundRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAASCAYAAAB4i6/FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNJREFUGFd9j8ENwyAMRe0qHLl3CNZhiEzRMXrtnU26AjOAxADg5KMa0QjlScGCh38MhxCEfojI9yxv7/2HU0rCzF2UUijGSDnn16O1RvhqrWStJecc9vt2tiNCo8gYg/ocQuM0YUMEDrFRupgPFFxeihEF9B+gd8xT/QksOpXWIa4MMd8Gy3FH1EosO8Ct4OsblAPXUJQLU51iKwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAIAAAAVNSPrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUCFtjys/PZwoKCmJiZGRkAgFmZmY4jQ0jyyEBAK7qAuAYeB3qAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAASCAYAAACeomSBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFZJREFUCFuljbENwCAQAy27ov49aJnvB6FkrWcPmk9FFKQoTcrzST5mJsYY6e7J3nvOOVFrBSMCrTWYGbjWQikFJEGSkARJoKS9vpjfcF8f5ug86h9wATADFmAXDSbCAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelSelectedRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAMAAAASCAYAAACeomSBAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFdJREFUCFuVjbENwCAQA637ipo9aJmPQShZC/ag+RSIAhFFSnk+y6aU4q01d3eRUtIYQ7VWJ8aonLN67wJQCEFzTmFmMjMBywArOMyGw/yB1+n7Z9e+4QHvjBZgBg89KgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjvnDhAnNmZiZzRkYGHOPio9MwNoyfnp7OnJaWxpyUlATGcXFxzLGxscxWVlYA/CwgVtHWuDgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAORJREFUOMuNUcENwzAItNv8K+WbAbJEv92s367Vf7JCvhkhdgpVziKY2EZCNvYdcNDt++60zfPs+N17P1D4ofuTzoFi1znDjiQjnV8C9QzkN3aTcNibvEfAJDaTcHy+UA0Vai09kFXqLFXI7pcaZBuadCkaJF25NKWsUpMGTSpN6UQG6bIluV3EVQ3NY5Wb1dMqarBI1ZZ0xaaWqlOyFpb2oNcPm6apSYO3hMO1Bi9PScAZY0wECf47fyIr7hCdgfEG4Em0Ab6xb9uWsjIRCbSGRAAwhJBIcg8nMPl9WRa3rmu20B+QCNBalqdZ1QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/_CPTabLabelsViewRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAaCAYAAACD+r1hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUOMuVUrERgzAMtI3KVKHMELBAShZIk0FYIaNlAZowQbYAJzJn+WRjKeHvfBLwr5dkYJqmD8Ig3tbaJ8Yx5PGd6brOcAB9QFwwv2McUHjF8zIVAH9AUghnPA88t6ogkjKg02AEQCRQdcpPlIstcZEGqFRXxccdeMXS7a+1EvFQS9ocwNspXdS1Sq2JgpIkibIt8Q2JM2jbUWeotVSdQRpObYkTqEDf978dijl4+USCdV2zG2YulpEtiTaBcy4bNEbHKicReO93/1HTNGVLSQTLsmQOlCOCyseTRFtLwYXfdIRjlVOEeZ53q2vblhyI6GmGL+DHprPdSa8DAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBackgroundCenter.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1jeP36NQAFhgLCPZRjjwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorder.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1jmD59OgADjgHGSFRdpwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorderLeft.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCFtjZGBgYIZiVihmB+Hp06c/BAAH7ALGIwf97gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPTabView/CPTabViewBezelBorderRight.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABtJREFUCFtjnD59+v/MzEx5BgaGn1D8G4r/AgCTpQkFeqUzkQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAaCAYAAACdM43SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUCJl1j4EKADAEBRmb//9im9VTmim6TsIgInZ3GQEnL0QqYP5hRRFAMdabvpXj9pi6qxjFzXlq/SKCYXgDF+AD5ACr1RsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABFJREFUCB1jZGBgMP7//78vAApVA38fKzIUAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPToolbarItem/CPToolbarItemSeparator2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAaCAYAAACdM43SAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUCFtjYmBgMP7//38DEwME/Acx/iMz/mJn/APi3wQYf4H4F0zkJ4rIX5gISVL/kNWgiqDY/gfm1D9wEQDwSTQ2I/IFQAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUOMut0ksOgCAMBFAHem1WHBwTVrXpDJ9o0gBKn4MRY4znzwunDb33ObbWcAvij4S47cFmA8QauxtZIxv1mxZANp9rHKRh9dmHBZaBReEMjFBJ5imMzSN6xFeEt74VwyJME0bMg9XdqxkKklKlqq6WYJaOYRGWYHZMDxhJKsFCQHOguWezT/1zKp0lKSWYJbQFOIO8L0oHneBhzz8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAYAAABRC2cZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACVJREFUCJlj+P//PwMIMDKBSBDBxATjglnMqAQLnEDjsmBRzAgAI2YDUG/9aHsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUOMutklEOgCAMQ0fh2vxxb4yJmrG0QNQl/ZNnuw69d/tLSGRaa/ZGMDK11qRkk8GlJCR/pGDJQbfBDAoCggBJqIdlAlVgCfXOshOLrKCDu/OjEmBZuKSg6CwvgLMyBnfMGWweWTZ8w0qArmIacxeXvxuTwkFcqVPBxN0A+1KCbLMsIHRXamewdUR2b8/R7jyWbmKbO21JN34Oq/BktCvK5iYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCFtjZGBgYGSAAEYoZkLDzGiYBQ0zI6llBAAGtQAx0/UgogAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA1JREFUCB1jYGBgMAAAADUAMcUHJsAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAABCAYAAAA8TpVcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCFtjZGBg0Afif1D8F4r/oOG/SPgfGv4PwwB88RIDhNxONQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKRJREFUOMulklEOwyAMQ+O21+aLi0/t6JQZJ6QbUgRK8esDATODvQdGbVT7mI+xPlztrs49QAAEwXzwMRCBIQPv9f3tymXAlSXbpYbqLhk6HVcBTRhmUN//AK1gycfffgWubL9gEdAeQEHACeRh6m0iAIWGyjJ6UqokqHIFED80b8jACGoZLINUracMA6q98GQqnPWXmSxYgf+3+Ry992turcnsC77uBJ8gKQLbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAASCAYAAACaV7S8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjYmBgMGACEv9BxF9U4g8qgSaGpvgf3BQwiwEAxvcQJujA9GgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/CPWindowShadow8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABMAAAASCAYAAAC5DOVpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKZJREFUOMuVk0kOxCAMBPvg98wn+XaMc4mRx/EWpBaLoFTEhAD8AAiADYCfXC5sovv0jGjITpIgGNv+NDL07eKBIcCukVOukhmfXmG6mQeA1JKeD+zN2IGlAb9gX66KDMYNbFLt0My+na6yYTUvs+gNBbVdek3gbddBznitJRls+he0ZhhC/qwsDAEMHSQy21l1JhC1Ulj1EFMLC6nMyhZBLOzTgardIdHIhbP7OXcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindowResizeIndicator.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUKJFj+P//PwOx2NjYOJIkxUDalSTFQMxPkmIQnyTF0tLSASQpBtLOJCkGYlmSFGP4gZBiBQWFIJIUw+OBWMVALMkABHZAhg1MMQcHhxeQtoMp5uLi8obyJUF8ACitf5AUaj8yAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/empty.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUeNpi+P//PwNAgAEACPwC/tuiTRYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/FIXME_ImageShadow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdNJREFUeNrt3EFPwkAQhuHdpYB403jx//89Y9SIiNAus8msTGtbjCFe5p3kS1tSDn0y3Wwv0+ScA/X3aiC4EmCMsZxvJGtJ0kQTr5VNOkkr+ZLs5O092g4seA+Se0VcShYa74CtgdtLniVPkncLuJLcSR4lt5Ibg5icItquO5Suk2z1t7fhGpj0eq14GwVsHL/G9dU9aiPV82rSA4x609Jkpfckc48nvKDdVp+/4i3GAGsX1nWvMfHcgRWvNTZpqgNr0sTR6xqYBjuTyX1gHNm6eN/KxJFj/O1GOl649rAGzj4/XyJ8ygEIIIAUgAACCCAFIIAAAkgBCCCAAFIAAggggBSAAAIIIAUggAACSAEIIIAAUgACCCCAFIAAAgggBSCAAAIIIAUggAACSAEIIIAAUgACCCCA1PUA84Vrb5UvAeZBwuDcI1ge4PU8mgm8LvRHv5Wj5wmWnUme68A6L7TkGM7DB5Pj17ZTi9bkG3LYgXXYaslCf28DAxjrBN+DwfwB2OkNewWzw1e9z1CtjfWpOYwBVuUP07Z24KrnNbAuaQVvp07tELCovugfVgbPY/fNdWHBe9XzHuBeAbeBMfBhZnvXmqXuDFjmwmubUnzK/V+dAO2XkLvQMyBAAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/GenericFile.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFW0lEQVR4Ae2bPUhsRxTHZ11X12/UKCpEiDba+dWksbFPLeneexYpgggvXUACNkEwsX+VH4UQsBBSCmktg00I8gKKnU8xUfzY1c353ezxLebtvWfXe90vB45z986ZmXP+5z9n5q53Yy64xEQlLtKQrYN7PE3jTrrfiFBHXuoNM2S2t7e/mpyc/P7i4qLOoG9WyWQyLp1Ou1QqlSvp09PT3/f29n5ZWVn5TQYDjMhKEABEP3F9fT3c29s70draGroh9/f3D87f3t66m5sb19XVNdXT0/P1yMjIu6WlpR8ODw/PQp84O2AQAKglz8/PkxiGRFHu7u4cQMAIZUV9fX3T8PDw/OLiYvPc3Nx3Mu95FHNbKB0XilqAKtq+eDzuEHHaJRIJTxgMRgwODs6tra39JB87ip7Ap6MFAJ/u4TWp89QIgMCGy8tLNzo6+np9fT0SEMwAxGIxF7XgtDIAEOrq6pzkHy9RTk1NRQKCGYDwYu0/Uu5SAADyw9XVlWtra3Pj4+Ohg2AGIOro6/g4rcuAmvsKQEdHhweC5ISfBcZQcoIJAIlKRg2MuoYfgKBMoAaA5uZmBwDIxMTEq7BAMAHgT9pwWxVgZQIAcFCi5hzS3t7uCSBsbGw8mQllBQDOa1EgWAZ6RgAUQIAFADE2NvZkEMwAqEFR1jjP+DiqovPBAAo1AHR3d7vOzk5ywqvNzc2it8hIDziexQX8wVktuY7DgP39fe9cwDZJaWho8EBqaWkhJ7ze2trKzM7OvpWmgk6MZgDUIG/2CP9w+NG5iDYO88C0s7Pj5EjuXaOTTCYdzsOG/v5+19fX90Zygpufn397dnZmBsG0BISOz7YLqPMsAQAg0k1NTTwgOXlA8mgP9dkV0OWgdHx87A4ODjgrvFleXv5R4tMi8pFOPgEzM8BnjFCbFACNPpHmEETUGxsbPQaoDjVAkSjRhykDAwPfrK6uvl9YWFgVw9IiGT8Dyw4AjMUxjT40JwfABB6OcpcIevpZ+7FkhoaGvp2Zmfl1d3f3D7n/dADEmIclwERRFpyiAAARpxBhgOBYjMO6Q9CmW2TuI7X0G5yenv5SAPgTFfTyFTMDMEyNyzdYWPdxUOfjmuhDby3aRg0gOE87wnXWzs9EHwQ/dtQBcuqyBEDtgwUAQJSVDdqWddL7CAicFgGAOssQ/Q4TSuVdBmYAdOLnqNU5jTAOPS7apvcBCwAUNMkFOP7/jtohW5sAwAAmVMMejRHJx9y5iPCnSq4O7WojOQPhFn/8igkABlAQ/AaLqu2xo/nmyVLfcz7LgHyqD/cDKYKmGPDpEDwMUz4XgMBWmGVAoGFmBii9AkcsAwWcFyAC6Y+pJgaUgU8FmUCwBAQTa00M0PVvXYsFWRuBctZOEwNMAGBjJS2BQgJlBkBBiCBgJR2yKnNAIYhWLQCSt8JNgqBKMqyUYrW1cjyKCPmXJBgRsCUfVrbC8HNAIftrqRF4yQHGCNR8DjABoHtqJS0BIwGq82nQ6jx6NX8OqHkArDnAY1Ul5YCa3wZDPQhpUqkkBqjNQXXN54CaB8CUBJVGL0tAkaiiuuaXwAsAVcTmolyxMIDXY0zfrhRlQYk7WQAosYnRTl+1AOh3GEHwmc4B+mBRSecAtTkIgKplQJDj2m4CQCJv0tNBy6G22mxZApkPUo6Ojv6SV9AS8sKS6f/upQKBHUtekUmdnJx8EBt8X5LExiBnaOfnop+LfCHCy4f/vbgvF2Va+M0xzr8XORK5EMm7jQcBIH0dL+i3ibSL8OZluS8Hos5PXP8W+UckJZK3WABAB6eJvEU/72TP2EDEYQJg5I3+M9pTvlP9C04LfFSu/LkzAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUDTheme/WindowClose.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzZENjA2MTc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzZENjA2MDc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+0eKROgAAAlxJREFUeNq0lM2LUmEUxr3qpDg2w5hfGTONobaoUYkICZnBFiGtyiaImZ1/gZtcuInoD3Dvol07Wyu6ioRahUJtLJJyIePXojTN1NvzyLkiFcymLvy4556P5z3ve+69iqqqun9xKf9VKBQKrdfr9fvT6fQq2KHPaDR+Ae8CgcCLWq02PE1IcTqd4X6/n5zNZnz+Cn5IzAQ2DAaDzmazPWu321U8q38TUlwu100kHMM+AV3wDfyU+Bo4C+zgvMPheI7ciiam11Ti8fhWt9u9C/MT+Ag+g5aInohN3wfGe73evUQiYVvuhR0BPbZEkUfgAbhdrVbVYrH40mKx7JNSqfSKPsbAIXPtdvtD1lLDKHrG4XB4UVblllR0997tdu/n8/nHTMBCUfrkzJhjGo1GbtaCibY1A6Yzx70vBzw6Ojp60mw233o8nluENn2IjeXs+pPJZCpCy470iqJwpGS0GJHJ1MWEZtoR0KZPRHh9F/SrU1tH63c6nU4TdoeOSqWSt1qt4Uaj8YbPXq83MhgMqtFo9FCEMDjHNiZXgD3QtqYGg0GupgC2q1Ck1Wq9TiaTTwlt+iRn8Ur4/f4ebvPVqZ0pl8s7SDyA6xIbADdABASEiPh2GTebzQeFQmGXtYtdaeMHG5lM5hqS9sAFwQW2BNeKfy+dTl9HzaY2fk2IrAF7LpcL+3y+K1K4yfMTaLsYy2azYeQ6tG5+F+LBm8A5jNqXSqXCsVjsMoq3CW36GOOCkqto9X98tPJKmKULs3xjOjngsbwiYxmKetr/SC+CxpXvcS7F0+WkVq5fAgwAsK9LC3k6I+YAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUDTheme/WindowCloseActive.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNzZENjA2OTc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNzZENjA2ODc5QzMxMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ehr59QAAAxVJREFUeNqsVEtLG2EUnVdeJiYmJDG2kgS0TUkUobiToghCXdUSspAqdutj51ZXunUndluQ0oV2U7rISukPsCA2GGktMaYk1DTvSTLJzKTnykzQrh345pu5r7n3nPMN2+l0mIe4OOaBLoFup6en+jtLa2try3Z0dBRttVqRdrvtJ4fBYEgbjcbE9PT0p83NzRpMHW0xY2NjDEujaYVYi8UixGKx5+l0+i3P8xwSaxzHtcipqqoRhW2Koqh+v//9wcHBt0ajIVOxe4X6+vr42dnZF7lc7o3NZiu4XK4KbBI6UagQOuNLpZKpUCjYa7Wau7+//0M8Hv8Km0KFBH2mjY0NF4rM9fb2Xg8ODpYDgYDqdrt5s9lM4zLNZlPO5/PS1dVVNZPJiNlsdm57e/v72tran9txNNa4YDD4GsHhoaGhGyxmfX39XaVSSZ6fn3+mgHA4/AofCe3s7CxfXl52sLwY/Rdg+EiT6x0JoigGnE7njc/nq3k8Hifa/22325+NjIyYKcBqtQbJ5vV6KbaI7hiM6dMIa+n087IsqyaTqYhkEUs5OTn5gsQsFdCK5MiGrlT46xi5BPBlnXm9I5DDiWi1jiQFYNeRUGVZtqtWPKtkA+gUIwmCIMNW17XYFSQFwSmhWBN7IxKJxJDwCDhlaNEz2cinxUhgtXpPkKQFYJFPpVKMJEn1YrEoYsxAuVz+cXZ2FqeA0dHRlw6H4wn5AEMdOFmHh4f/EtB3WTMeHx8/Xl1dfQrnDajvgT2ALq0DAwMNCgDdlmq1KgKCFOhvJBIJz+7u7s+ZmZlrAlvvSJ6YmCguLi6WDw8PjShQAnsSdk4XJJ55gKtCaw1oybawsFCdnJwsUG63I1J2KBQy4t0F6fv39/cVJJahrTYUflsIVPMY3YCuHNFolF9aWroG2IVkMindUzbobOOLpfn5eWVqasq1t7fnuLi4aKIwMcOMj4/34GPmlZWVGsYt4uxVAHqry+qdQ0unmNUIIBFatd2gxbbppGCJ2i4jr3v6hbv/FM3RhoPGkbSiukRUDQ8qoP7/P/onwAD1HZ96Rg2qRQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/minus_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAECAIAAADXmFKkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUeNpiYKAHYPz//z9+FQABBgBgSgL/1o3U+QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/plus_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAMCAYAAAC0qUeeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpi/P//PwMyYGRkhAsA5RiR5ZgYSAC0Uwxy0/+BdwYLlqBjQAo6VMVQdyOD/2h+ooeb0QXQ3YkMAAIMAKADEhQiIamgAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUWMPtl1EKwCAMQ3OeHc+7+539TNC6QZWWfMxBYCjSh6YRQRJK4QDYgVIKe6UD2IJPUZLk21y00BdsRd/+M74BoAKswATQxqN1ACYAqQekXSDPgdUF0YDY2bbII8Kq0SJNOgBchEsWwLvO6gB8BpHEA9IukOdAVsJ5QZGZ856jQtaN5zHrAADEygLY+QOwHUQpHpB2gTwHfv84vQHcG1BmjzmkMgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider_button_h.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ5JREFUWMPtl1EKgCAQROci3cl79rcXtAwE3YysdpmPVngQSvjAcSLknMEEIaBHSim3wHvoDQsicjBaswbthnXT0bMHncC6x6GgBeq8NSFwEqBmgHoL6D3wtTdciugOyyPC06BZhrQTWARTaIHZ9zQhcFlElAxQbwG9B+iF5dnzM0cFry/eTFg7AcAWLaDXQ+B1EblkgHoL6D3w+5/TDQIL6kKVaIANAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/standardApplicationIcon.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAM31JREFUeNrsXQd4VFXaPpmZJNPLnTs1jRIUERtiaCoEWKQoJaEJJIqhBsVC1RWxrO6669pd3fq77q6666pr76hIh5BAQgglkAbpCSQZAqTMf8+dc29uJpGamTPle/N8j5MhJmfOPefrJcLtdiMAABCeiAAGAAAAAwAAAMAAAAAAMAAAAAAMAAAAAAMAAADAAAAAADAAAAAADOCC/0BEBOwyAOAD9MTdpc4AfvfRVniSgYVeHBXBNvgHq6YMo8oAZPAIABIYOcoh/wWEARSwBWEvgSIk2tgD/eIchkOl5Q9w7z8heR8cRSEK0AAAwjmQcyrl/GgDg79/4P7n/88M5wMYgB/gBqJERPrjM6B46p2v73FY2XhFZBSyW8wG1hGTQjREmefnYL98Q2FuAkAUkjrkHEVFKdWPmsxm/g0DY0ZRlVWPci/fIT9zFp4TaACAEMLqqcMjyOWPXPWHd6fZWCYuWqXmpZJKrUb4+5WvviNoAXLy8wBgAIBQk/5GszXTaGY7/QP+3mSxLeVeRpOfAwADAISQ9Ocdf8t+88fRNqtliEaj62Sa4u/x+9y/Jwu+ANACgAEAQkz6O3v3W8WybLc/wDAMssTEz8FmAmgBwAAAoSX9FamZa/vpDYYhar2xW/+01sggs8Wagn9O0AJgB4EB9DAgFEQh7ISfe9Q1w0eusbLmcz4du5VFVyeNwL6AqA4zAPYRwoA9df0hvORvYA1AMXP5o33NZkuqyWI75w9rjWak0hlnjJg049ebP3vvDPdWG/fM4KmBBgAINqyZNkJQ/6OuumnEwzYre14JJZfLUK84p3bktLmZxBcgI78HAAwAEIzSn5PmVqVae5vOZL6g/wknBmkNxpnIExJUkN8DAAYACELpH4mleUKsUyuXyS/ITFUoolCsw+5c+erbaaAFAAMABLH0Hzl1jlXPmDNMrOWiXFV8YpDVsRB5nIEQEgQG0FMAT7CvSSr9h02YlhbvtOtk8ovz/+I0YSvL9F/y9GtCYpDc83thfyEKcDnXH/zJ/gKf+KMzsQs5uqRfwJgtyJ7QdzH38juOWpAnIgAADQAQqFibcrNY9LPy1XfS45wOZ1R09CX9Lq3BiEyMeey0xSshMQgYACDIpH80Y3OuMPIlv5eusuLQ4TXDk9cQX4CMMBgAMABAgEp/Pu33/uffnGK3mmOilGre7LpUMpqtyGBiUoZNSLEiCAkCAwAEh+1vtscuNjJsj/xCu9WCklPTcHpwJGgBwY0AcAKCF8kXeDj1FlH6L3nm9dF2K5uk1up65HcbzBZcKJTBvXyGo7MctbvhQYIGAAhM6W+L673EbLH0nNRQKJDTZtU9+NI/0gUtgDAcADAAQAA9W0XKktX9GIYZq9H3bKt/nB5stsc8hCAxCBgAIGDV/6irh41cY7WwvKnVk6RUqZHDZnHe99zfphItQA5aADAAQGCAT/udcd8jfVnWkmpkrT75I9ipyDrjFoEWAAzgMgDpoD1JEukfeeWgoZmekl/fADsVWcaUdNcjzw4iDID4AuA5QCrwhV5/8B37RPoPnzjdptLqZ+CGHr4Ep2GguH5X45DgLo5aER8RgIcAGgDA73hk+q2i9L916p2ZCbExOplc7lP5pWPMiLVYUqYtWSWkB4MfABgAgKL0l98y5U6rzmTOMJotftFibVYLumrwzUJikJwwIgAwAAAF6R81ePSkKThOj6W/PzgA7h6s1htmcGYHpAcDA7hoLwBQzzmT+MQfxmZfoTcxfnuCco7RxMfYtcMnpc4jWoDMw5DguYAT8HzXHxxGl41fzhgplvw++PI/+ZJflVrj1zXoTSzSM5YF3MtXkJgeDN2DQQMA+E0Q89Lf6lxhYFi/y7HI6GgUF+NwcgxI7BtIGBMAGADAx9KfT/td/KvXklnGxJf80tBm9QYGawGzESQGAQMA+F/623slrjZdZsOPyyGlRoNLhZMWPvmKOFAUtIDABpQDBzEenTlKlP6Lnnp1NL58OoOR6prMLIts8X2kfQPb4RmDBgDwsfS34pJflqXu08aDRnH14eSFD0HfQGAAAD88P8XUxSv5kl+13hgQi7JaLWjg0FFi30CiqQCAAQB8oP5HXj3k1jX40gVKaFtnNCOlRjtuyG3TIDEIGMB5vQBAl5ZAwhf9pC5bm8ip/ql82m+ArA0PFE3gB4rOEfsGehgWPDdIBPK+/uAfumism5UsSv8+A2+cxxLbP5Bg5PsGmr36BkJiEGgAgJ6Ap+R30gy+6OdCp/z69WDJcd9Ai275838XE4MI4wIAAwD0hPQfcfvMZb3jYnQKPOcvALVbPceY8DASBIlBwADAB9Cjtj8/6UdnYjL0DBuwhwvXI1jMJmfG+hdGEy1A7mFg8BzBBwA+gIvGY7NHiyW/97/wVprDatFF8A0/AncTcd9AR58rVyIYKAoaAKBHwCf+GC32lXrGHPCL1RmNiDWbk+ateUbsG0gYGQAYAOAipT9f8stJ//T4GP+X/F4qLBYWxSYOWAq+AGAA4APogYYfBtayyIA9/0GydJwYxFrYlCkd6cHgBwgQHwB1BnA5k2rDhR6bPUYs+lnwxMvJFpbtH6lS8bZ/sHxxa0aJ1yfNFZyB+DPBswUNAHCRtr8toe9qhmWDbvFaTmPBiUFDx8NYcTABABeM9Xd2kv6jHTZrkjZAin4uBnigaKzDqh085vbJhAHIyGcD0HwugeEDAFyI9Dc7Y+eYGCZoQ6c6I4sYuxMPFP078qQHt8HzBx8A0LltRD7td8qilYlmsyVFY2CC9rAp1WqEG5be9/s3cXowHxFYf+fYCPABgAkA6AaPzxkrhv76Dx6x1m4LnIq/SyWd0YR0DAt9A0EDAFwAeOk/dclqvuRXb7YG/QdSarTIbrMmZTz+0ijBF0AYHQB8AIAO6f8LScnvDfMsFnPIpE0zDIOwP4N7uQGRvoFwDsAHANSN7T90QqoVh8+0RjZkDh32Y2B/xqR77hf7BoIPAEwAAMETczuk//BJ0z0lvwr/zPnzF2F/Bm5lRnwBMvKZAcAAAEhS8qvWGWfiJJpQS4BV476Bar5voAVBYlA4MwDIB5eSRPpH3fvc39JinXanXBEZch9VLpOj+LgY7Yg7ZmQi0jHI89mhFiCsnIBQG94tSNGPfaXRzIbshzSYWKTSGmci6BsIJgAAoSfnjRNUf8Wy5/6WHh/rcEYpVSEr/eSRCn6gaOZv/yr2DSR7AAAGENbSP1pvYmdrjaaQV4ANZjMyWR3QNxB8AOFNRPLh5yGfv/6FZJvNkqRUaUP+o0dFq5GFNTnvXvf7ZKIFyD17AT4A8AGEqe1vi+uz2swP+ggP4L6B9oTEVciTGMQXCcG5ABMgbPBU2m1iye/sFU8Nxj30VHpDUDX8uJwvrcGIDAZD0sT5yxOJUJKRPQGACRA2aiAf+otNvHIpnvIbbltgsVjQgKSbxcSg8DkboAEAPEkwkXcseDDRzFpSAnHSj8/NANaK9EYmZfDYO6zEFwAaQDgwgHDP+X8qbbxY8nvFjcPX2qw2arKota2NJ1p/326zouG3zxITg/DeQC0AaADhIP0VN42bYtUbTKk6PvHH/9evtbUFZe/Y1ooJv6bSK4Bhkc7IZOC9QJAeDD6AUKdfpY+XFP3MyHTghh+UllNdWYlyNn5Vhqm2uprKGvCMwxiHVXtj8sTJghbg2SPwAfgKEAYMAOk/5LZpVo2BydAxdEJ/bZzaX1Zc1PrT/94uVev0iuETp/ey2R1U1oL7BhqtnfsGQkgQTICQw9N3TRCl/9CJ0zN7x8fq5AoFFRlUU1ONjubnVJ9qPNlcc7y0MW/7xvKamhoqa4lWq5HTbnVmPPnqFKIFyMleAYABhBz4tF+VVj9La2SoqaFY5f/hvTcLuG/OYNr+5QeFtdVV1NZjYMzIbI9ZhCA9GHwAoUhEovGe/6XP/jktLoZeyW9tdQ3K37mptPpYcQ33ThOmkoLciqIDeTVNjY1U1qTS6Pi+gXc9yqcH84lBnj0DHwD4AEJM+uvNtpV6hqV2FGo46b/9yw/3cS8bODpN3lbm7/ipsP/1N7EarY7KuoycFsDYY3DfQGGseDv4AsAECHo8c/dEseR3yW/+nJ4Q63RGKdVU1nKivh4VH8qvKsrPKea+reWoGvMEjuq3fPLvPWVFR1xnzpymsjaNwYRwUtTE+cvFvoFwesAECBWVj5f+OhMzW2MwUstCwXb+1k//k4V5gYQBVBEm0JC3ZcM+3hdAaX04MajfDUOEseIyD/MEEyCkGEA4Xf1n7p4klvymPfpcss1mS4pWa6msxXXKhSrLy1z7tv1wiDAA4fILDKB+2xfv7z1WVtpCKztQZWCQSqufMfgXk8W+gXD9Q00DCL/2b56S39jeqzkVl9q2Y89/1ref7OZeNuLLTi69QFgbONF0oq627MC+ktqaajpOErkc9YqL0w6dMF1MD/41ZqLAAcAHEGz49XxR+ivGpy+7wmAwJql0BiprOXv2LML2/aaP3tlDnH8nCNURZoDpJP63H/775lY+M5AScGGUWmfAfQOjEaQHgw8gFEp++9908xqLleXMXDcVwnb94T07DhHpf5Jc/pOEGQiEv2+sKC6sOHb0YGV9XR2VtcoUuG+g3bnomTfEvoEeZgoqQGj4AMJs0s/E+ffzJb8GSnP+WltbUVlJccuP77+1S8IA8H9xDoCLUJOUCWz99L2dtMwADANjQXqzdSGSJAZBNSCYAEGD39xzu9jr/4pBQ9fabPSGfGJ1fv/2jfmcfV8nkfqYAZxCnjyA0+S1wAQasKOw6niZ65TLRWXNkUoVslks/eeufVZIDJKTPQVcJmA4qH/AS3/c7CJapb5NpWeocf+62hq0e8OneRLp30CkPr74Z8laT5P3BHOgift/smIS+twap9ZQWbeJxX0D++C+gUJiUBsMFA0FEyDE6Tf33CEW/SRNSM2Mj4/TyuUyKqupqixHBdnbjnB2fTm5/IL630wufxu2EsjrU+TfeA1hz8av91dWHGuh1StArTMgvcGYNC49U0wMwnsLHoBgNwFC3/fnKfkdn2LVGpgMo5lu6O/H997c7mX744t+hlx8zADaiYQ9I9UCGutr6wq2/7SPZkQA9w3sf6NX30DgABAFCFR6NqND+t+QPDEtIdahQzI5ldXU19ehY0cOVlWWHKmQOvgkDKBd8kBayXunpMwia8OnudiEoDZEhO8baEwZNHqSpG8gcABwAgY2+MQfrZFZqDWaqbmb6zjJve2L93dILn8DcfSdFqT/mr9+7MYk0QI6+QIqOdPhQPa2wnqOCdD6HA67DQ2dmComBj2bMRmcgUHtAwjRsB85mHzJ74KnX0+Pi3E6FVHRVPYYe+/Ljh4+kb/th8Ju1H/B9peGpgQtQGAA4v+zb8v3+XW1tdTOi9bEIo3BfA+SJAZBGBA0gECW/tFGi32FUPJLq+NP7ubvciUX+aRE+vNTeVf/5WPv49hGtIBm8rONPAPY9sOhY0cL610cU6HxWXDXpBi7TZfx5GtiYtBvF4AWAD6AACJyIPm037vXvzjFabXEREarqCwHS/9jRYWuLZ+8myNR/5sktn+b5yc7/qfVf/lIMAMEX0CTxGxozNvybS6txqGYcHqw0Wp/CHXqGAQ+ADABAkut421/o8Wx2DPog1a7ryq0e8Nn2ZKQnlT68402Vv35I/fPfIY2oiE0S5hA4+aP380p45jK2bNnqHymaJUKOe02513rXphKtAD5bxdMiQATAEwA6vjdwimi9J+z9tnRDrstSanVUbn+La2tqLL8eMven74p8LL9XZLQX7fHEDMFCQOQ+gJ452Hh3l0HcXowLbmp55iqyeaEvoFgAgRsw48oa1yvVQye80cJNVWVqGAHn/Zb6yX9mzuk///c5/ksAhOQJgY1bPrfP7M8jUPpADNVlmWSUu97dBDZb5mH+YIJABoANek/VZT+t6Vn9jMYDEOUWiO1s4Uv6KaP3s5CXdN+zxAGcM4T6GEOYkhQMAN4PwBmKoV7swqrKyqofT6WtSJHnyuXghYAPoBAsuf4op9+Nwxfgw8orZHbOO33MHdBifTvLu23/UL2XxISFLQAMYlo4wf/2FbDMRlan1FtZPi+gePSxPTgCPABgAlAU53j034nzF/e18yaUw2UO/5s/OCt7V6hP6HiD1/o9pV/+tB9vs/k+RmeWXg7AxsqSwrLjx89VNnY0EDtc+LKysTrbloqOAOfWzQ1AkwAMAH8jucWTRNLfnsPvDHTZrNRO1O40reoYG9ZVUfab4Mk9Ccm/lwEpCFBqS+gae9PX+/1NA6l81lxZSXuG0jSg6FjEJgAdBt+4IOoVGtnKvUmaqox9s5nf/+5NO4vOP8Ez3/7ij9+6L5INdVbC+AZy+4Nn+2rKC1xuVxNVD6rTC5DcbEx2kFj7phHtAAZZsZgAoAG4Df8frEo/SNvum1aZu8EXPJLxyeF1fGigryq/ds3HvYK/TWjjsSfiwJmFqhzZmCnXgHZP3y2m2bHIJxnoTWaFxBnIGgB4AOgYvvLbxo31aoxmDJ0Znqhv9qaKoTV8m48/0Lor23FHz9wX6Kt2l1IsDF307f7q8qPteApwzSAayziY53Oe558VUwP9jBl8AGABuBz6Z8i2v4DR4yZgvPUIyIU1NJ+Kzl1nFP/81HXkt9Lsf0lWsAHP1cleBJHGorydh+uo5gerDexSMdYIDEIfAD00n71ZtsKLaeO0rL9cUhu9/efZ0ttdOSV+PPQGx+4L+OzCqaA0CxE1AK2ffH+LpohQYVSiawWtv+slb8SB4pi5gw+ADABfEbPL0kRS37nP/FKeq84pzNaRWfOH+72W82p4ds++88e1Lnm3yvt99I/70NvvC/1BZyWMhoccSg+kFt6or6O2kkycaYXG5OwGAVVkRCYAMEOXvobLJz0N7LUzlFNZSUq2LU5H3Ut+ZVI//fdPcSxW1HXxqGNOT98kUPTDFDrjMjEMGPHzlkEA0XBBPAtPb8kVUz7nbXqmWSWYWIUShWVs49n9x0rKWrZ8tE7u7qR/mcF6d+DKqt3rwCeAeDIw7Eier0CMFktNtRv0HCxbyB+TmACgAngK9WNl/6WmITVBoaltpa6mip0rHB/SdNJsehHavvzab8Pvv5fd0/8Lc/v6ZQY5JI6HPdt/T4XRyJo7YXaaEKcGTbuupHjJYlBYAKACdCDeGHpdIn0f3q002FL0uppFv1Uo03/+9c21H2v/1bU0fCzJyHtFdDhDPzsPznYF9Ha0kplL+QyOUqIj9cmjU8R0oNl5HkBwAToec8/Y49bglt905IfOAHnYM6OI1Xdd/vt0u+vJ+iBP/zX2xnYKTGoYNeWfdVVlfR6BZhZpNabMlAQ9A0EDSA41X9e+o+du7ifiTGNVWr11NbCd/z57pMc1H3DD77P/wN/eM/tI9W1u/qAxi0fv72rtrqS2p5EcFpAjMOmS3/sRTEx6MXM6RFgAoAJcNl4MXOGmPabeP3QNXzRDyXgkFtpYUFVcX5OsZfzTzrpxyfwMJUuiUH833edrK89kre7sI5yerCBta1AkBgEDKCHwRf9jEtflmhm2VStyUJNfcS2/66vPtyFOjft7JT2Sy6qL9U3qTNQ0EKasr/7NLuGWx+tvYlSqnFikHP6g0+MJlqAnDBvAPgALo2k0r/X1YMyrRSlP077rS4/5irYuekw6tzww2e2vzfd/9p73fUK4H0BRZxWUna4oNLV1Ehtj3Ardmt835UogMeKgwYQhA0/rh81wabUaGeo9CZ6tn9NFdrz4xe7vTz/nbr93v/af9x+2JP2brQA3hdwOGdbAR4lRmuPtHoDspiZpMlL14p9A19aNiMCfABgAlw0Xlo2U5T+N/5iSmbv+DidDM/5oyA1zp45i44XH3Ft//y/3mm/0kGf/jxd7d2HBN/Lxus8ffo0NQnLWKzI0bsf9A0EE6BHGn7wk35wiEnL0Cz5rUZHcrMOdSP9xbTf5a/+x+2PfcF/p5uQoLimgh0/5dGcKKwxMIgxW1JG37k4IPsGggYQBKr/y/eK0j8Kh5ZiHTZdhExBZbdaW1vQ8ZKjLVs/eXcXOmevf7+rsUKVYKchIlnffry3oqyYWq8ADKvVgnpdfd1cwRnoeZ5gAoAJcHHgE390ZstKDcWSXxz3P5i1Jd91ki+7E8d1SWz/tuWv/tuvJ4v8PcEXIJ0lyIcEjxceKME+C1p7puS0AA2ntV03agL0DQQT4OLo5XtniSW/aeteTE+IjXVGK9XUBEZdTS3as/GrPPTzab9uSqpsd+3Deea0+eO3t9ZW0asSVMgVKCE+TnvdyAnzCAOQ4ecKJgCYABeqonmkv8m8SGtiqO1UNd/rf8eR6tKj5aj7Xv9ttPb0vlfelYYEpb0CGrn1VpQcpNsrAPsCuGeH+wZGo4DqFQAmQMDilftmi0U/0x96MpmzJfsrolUU1f9qtOWjt7d72f5Sz387uYi0IJgBp5HXEJG9P361h6YZII+KQgmxMc60dS+kCREB8nzBBACc3/ZnYxJW444ztATFybo6VF50qKq6rKi7op8zyDcVf5eC7iYKNxzYtelQTfkxF05gotYwBPsCjMxsBCFB8AGcj6TSP/XBJ0c7bLYklc5IbZ9w6C/rm493oM5x/yaJ7d9278vvumnuGf77XlpAp4nCezd+nUUzJBit0iC71ZbEPc9Rgi8AP2fwAYAP4Jy2v8nqmGNgzNRWgjvsHC86fIKTooXdqP9Ubf+LmSi844v/5lSXl7W0tLZQW53RbEb4eaKA6RsIJkCggk/7HT1ncSLDsim89KckJuqqq9D+7RtzUdd+f6fJRWu/9+V33IGwaWQd3bUP57WAQ7u37qvjR4nR2Uv8HPHzHDUzA/oGggnQPb26/E4x9Nf7msFr7TY7tf3BNvOx4iOunV++Lx311SSx/dsQpdDfBYQEu50liEOZNIGfZ9/rh4p9A/HzBhMATADkXfQzZu4SvuRXbWIpdvypQrk/fZUtuURS6c+n/S576W13IO2fZz1dEoN4zQWHBAv37ijERUK0Vhitx30DVeOuHTnegqj3DQQTIKDw2v1zxKKfuCsHzrNY6I34xmm/uL9e/tbvC9A5034DEm7CoIQqQTEv4MDOTfvq62rohXXkcpSQEK8dNOb2TEQ6BpHnDiYAwCP9rxs10YqLfvD4aVq6NO71z9nMOO231kv6N3eW/oEHiRbQpUrwwK5Nh0sO5Fe5Ghuo7a3WaEZKrX4mkvQNBAZAxQfgDhiSSv/rkycu65MQp5MrFPTU/+pKtP3z97JQ17TfM4QBuANp/7yJMADpKDExPbhwz479NM0AmSISxTmdzjsf/l2aVAugsEegAQSY9Cclv8YMbPvTAk77LdqXU0ikf3dpv+1BsqfdJQY1Yqcm7hXQcvYstYXh7sEG1hrWfQOBARD84YG5YsnvnF8+lxbrsFOb8ssX/VRXo62fvitN+z1JPOpir//MF//lDuQ9JevrbpYgb8oU78s+WMuHBOnssSJKjaws65y2/LFkogXIyTkIGyhoL8AdWEeYFP1YVqqNnpJfGsCVviUH8spqOtJ+hay/Lv3+glALEH0B2Lzpe/2wgazNHokdczSgY1hkjum1inu5QdjbINrXUNAA6IetXn9wrhj3v/OR59IT4mKoTfnF4EN/m76Rxv0F559Y9LP0hX+6A7+S0o086xQTg5qlvgBs3pQfLSip40eJ0YFGb0RGgz7p1hnzE4lAlHnOA4QBww289NcYTLPVBhO1RTQ1nEQlB/OrDmVtPow6h/6aUUfiT7DBu1dAhxbw6b+31VGsD8BgrTbU97ohYmIQ+ADCSP6//uA8sehn6vL1yXabLSlSqaHmOa/hbOL8rd/vRV09/2Kv/yWcVA2mXspLOrSALlWC1WVF5eXFhZWNHOOjtec6xoLMFkvKqNkLE4kvICI85H8gcLvAaMnCq/+sM241w9JL/MFpv5VlJa68n77OR+eY8xekAxW9ewWIQ0T2b92wl3cGUoSFZVHcFQPnEQYgewMLhjDIBQ5rE+CNh9JE6T9hwYrBLMsmRWsN1NaDbeG8Td9kS7zlXbr9Lnn+H8HsohIiAp2qBHN/+joPMz6+VwAl4L6BOPR7zS3jwqpvIPgASOjPlpC4lGGt1ARka2sbqi4/3pL19Yfevf6DIe33vCCMS1ol2KlIiGN8u3GVIK39l8sjUazTqR0wfPRkUQvwCIiQRgCEAameafyAI0fOWsCX/Hqcf3TW42pqQDXHiyv6DxlpilKpz6q1BrfWZFbrWZtdozc2K7W6szKZ3O0O4hjVwt/9X0R7a6vsVOPJ6Kb6Wm1DXTXjOlFrb25qtLacbm5obaPL49RGBunN1oe4l39HYkgwtGOCEb7+gBER52aii3//FpUP/scV6RGEAarvfur1vw64emAqzcw/jMYT9ehMYx0KS0TIkVJv4sd50URNWRHKzd614P3n1/2baCpt3Bl1+/AcUhWeChS+4BnAQM7m0xkMqSpS8ksTcU4bsut7heXDaG13o0NVDdSfgZY7B0aLfRH38n/EXGkL5X2nbwJQ+Jt/8kh/vujnuuRJmXa7IyCs63rXWZ4A9BCt1iK73Z405b51oz565akvMW/ipHT7Ih9qAWHNACiFQnjpf82tt1nVOkMGtv2C2L8G6GEYTQwyWOy4b+AGogW0oxD1BYRdFOBPK+/qkP6jJmb27ZWgkysig2pIOZDvOwaZzZYUaXpwqN6HcA0D8iW/So12VjTFtF9A4IIzA1DCgBuEseIyIjiAAfS8BeC/lE/yEPmsv5mrf5MWGxPjlMujQOQBdaEonQn7A2YMvPkXYt9AaAgSQtJfx7ArcSmoG77gq5svmVyGevdK0F7LmYmIJAb9edXdEaABBCnIw8OXX8FJ//Re8XFOPOcPAPg5qIwMUml1Id03MNw0AF7645JfJafigaoLdC7C5mFcbKxzxqpfp4WqFhAWqcB/WT1f8PzL71j2y2SbzZYUpdKAiAOcFzoTi7Qm80IUounB4aQB8A0/zA5PyS9YufB1QWPFo5XIZrX2v33pw8lEYMqJQAEGEAyQSH/FiJT0KwwGY1KU1oAAgAuF0WxBbEwC7hsYch2DQn42oORzRvW+5qY1rNUK9i3QRZGSExh6TnCMmJYuDhTFggVmA/YMC/AxedJ+b5k+H8/5S9EyVjjTQBdNWHD0vnawV99AaAoa0PjrmnvEXv8JVw9aa7Pb4SgDXRLhvoE6gyllwLDRVhIRCAk/QKj7AHjpf/WIsdYopeo2nN0FAFwqHA47ujZ5kpgYRARMUCNkw4B/W5shFv1cM3J8Jp4GK5PJkRuK/gCXCKXBjFQ6wz0DRox9LX/zt6XcW+3uII8JhrIGQEp+x1tVOmMGVuEAgMuSlgrcN9Ch6z9kpNg3kAga0AACCVLpf9Ww5LTe8XE6JJMjqPkHXC40RnOXvoGgAQQm+MQftd64UKVnwI8F1DNVgko1inE4nFOWr59CtAB5MGsBIecD+L+HF4glv6krnk6Pj411yqKiQfYDeloLwH0DP0Skb2CwugJCVQPgi360jGWFhnKnX0DoIVqjQ3iIzJj0e28kQlRGBA9oADRBHgKf9otVtBiHLUYRrQTbH9DjMFusyJaQuIR7uRMJfQNBAwgc259T0RZrDGxQjtEDCnxS6hnEsJaUESlienAEMIBL9AH0BEml/8Qla0fj1s7RGi2IKoDPYLPZUWz/63DfQN4ZiM8gtAQLAOnPOOJWmVgrnFCAT4EzS5Vq7Yyrho8J2oGiIcEA3nxkoSj9h09L72cwGIZEaXQI4lZAviS5XIZwhumA4WPEseLkLIITkBIzi0oYOGgNa7FByi/AL1DrGaQxmBZwL19BnsSgdhREXudQyQPg035vTp3fl2HMqVrKab/HS4sQHnUN8D0YixU5YhPOO4TWZzZnVDTCuSbTHnwq7cMX1v2Fe6uV0wLcdz39JzcwAD/g779cJJb8xl517cM2POePIpoaTqJDe3ad+PS1X+XA9fQ9bp5+T+KI22fEsjZ6zx3nmmiMDE4MegsFWXpwKPgAeOl/1bDR1qho1W2ROhNVy7C2pgod2PZ9MfLEhvFhOAPkE8J725K38YviWk7bovnM5dEqvm/g+IWrhL6BMiKYQAPwk/SPHHjr+MxevRK0cpmMWq+l5lMuVFVW3Hwoa3MZVgUJtaNAaf8SGoggxHd5PlFVfqbsYF6VzRlrNZgYaovCfQNN9tjF3MvvUBAlBgW7D8DT8OOWcValVp+hNdG1/euqK1H+5m8KsCXA0WlBShGVEBhAzzEAGTm7uD2Xcv+W7w72HjiIKgOI1hqQ0WQaO3Ty3H7bPv5XHvLUB7QBA/AR3np0sSj9EweNmBIb4yQlv3TQcvYMKi85eipv41f53LcNHDVydIqoq63AAHr83OLLr+ZIV7xvd2ttxbFBdmecWqWhN+/BarOjhIE3ruEYQAY+EtwZbU//1R/dwAB8Bz7xR8ewK9QGM9UbVltTjUr37ynkXtZzVIPf4ugkYQJBmyseoBoAjrnjuW56jrDYby3YumGPPb73sBhNH2oLU5tw30BjypVDRj18YPsPpcGg+QUlAyDSny/5nfrAk+m94uOdUSoVtb1ua2tDFaVFLXu++ySLMIAKjqrIaxcxBUAD6DlEEQZgIsxVfjhry/6BIycMtsXERuLOPbSA+wZeM3LCUo4BrCdagDuQtYBg9gHw0l9rYleoDAzV61VfXYXKDuQWnmo8gSV/HUfVHFWS1y5ySIEB9Bwiifp/VjDBub1XH927M98R1+s6qyOG2sJw30Dsj+JePkPWF9B9A4NOA/jHuiWiEwiHXSysOYb2lF+c9JO38cssovLXEaolGsAp8AH0uAmAmf9psqeYGeCqLz0ndfcOGJpMlQFg7SMuxqmbfN/69I9feeJP+NlzZ9ad9tQbbmAAPWz7m+yxq3GzT5o7W1NZjorys4/UHS8pJwwAX/oTyOMIxNEA7ARsD9QDEIzgLpSMXH58DpRkv434GXDPotDiiOlrNNNrBKPitACd2YL7Br6JAjwxSBZkD14q/Uc7nY4ktd5IXfpnf/3hdnLZT5KL7yIXvw0uv28sR2JWnSF73Uj2vfFozvb8E3U1dB0UKjWyWizOcRkPjSYaipycXWAAXZ/khX9Jpb/B6lhixDn/FLtCnKyrRVWlhVV15aUV5PKfRB3hP5Hzw4zdnv2a99Tr+DC0EyZwmjBfngEc2bP9UEXpkfpmVxPVs6FjWMQ441cSh6X8584BaAAXN0aNl/5Dp8ztZzQxYyM1errSv6YK7dv49U5y6U9K1P7T5HC2zXvydTdUzvqAPAyglWgBAgPwMIHdW3NxUhZNqHVGZGEtScnzlg0iDED2z3VLIwJsNGDwmAD/fGypmPgTP+CGNTjpgub5O+VyocqSIyeO7t1xmBy8bqU/wKdoI3vdLDHBGvd+/1lOdcXxlpbWFqpnhGGtiI3tvVSqBYAJcHneX8XwlLsSGbMlVU077bemEhVmb8v9GenPh3946Q/wCcjeCgzgtJcvoKk4L2tfPeWSbKWBQXgiNdZYUYB2DAqK8eBS6e/sd3WmzW6jumJsX1aUHHXl/vBZjoQBSFN/SQYY6Oq+tgMkTOCUhAE04JBgfW019dNtsVoRd2bnCs5Az1mG8eAd1/8CfCqC9L9yaLItSqWZEak1UXXwYPuSO2DZkst/0sv2b5/7xB/c0D3Xt4T3+OecgTgkWJyfU8j7Aiguku8bqNFncGdX7BvodbbBBDgX/rU+U5T+A0b8IrNP7146mVxOTeZguxLbl4ezNhd4SX8h9AdJP/5XIQVn4CnJM2kq2PJddh3tXgGKSNS7V4K2/9DkeYQByMiZBhPgImx/OXf5rSqdIUNtpDvpp7aqEhXn7spvbjxZK3H+NRFHlCj94V76BxItQOoM5M2A44fziyuKD1e6mhrp+gL0ZqTWG3HfwOhAcwYGNAOQSP+ovoOGUS/5FYt+NvBFP1LnnyD9IeefDtqJL8A7MaipND+74ARlX4A8KgolxMc771j+eBoiEYFA0QIC3Ano2T/EF/2Y+ZJfmqivqULVJYdLiPSXJv40o46OsOCco+sMlGoBfEiwsuSoC/droAmV3oTUOsNs1CkkCE7An/Wf/Gv9MrHk94771qdjDhqpVPXYJKFLIaz+Z3/z0XYv598p4oDi23/Nefw1cP75mfCeEwbg7QzkzbOyA7kH+b6BFM+OQqlGNrs9aVzGilEdvoBlEaABnEd7whxTbTAtoi39T9TWoJL9OUfqy0vLvWx/SPwJHAhmQLPEDGjgTLZd9ZQzAzFwC3ODxbEEBVBiUEAygLcfXyYW/XAcM9lms/WXUy75xQUmR/dsz0fdJ/6I0h/uIB2QvRfSgzuZAZzJVld2MK8Qm3A0EanWIyPDjL3p9tlCYpAMGMB5pL/RFrsad1yliZP1dejY4YKqor07D6HOab/NIP0DCkJI8KyXFtBYsHVDdiAMa8Ep7PEDBq0hWgC+fxFhzgA6O3Q6S/+HRjud9iTccZWu868S5W/6ahfqWvIrhP7a5jz+KmT+USbPM+gSEuSfV/nh/KKK4kOVrqYGqmcpWs+gKKVy3BVJtwbEQNGAcwJKpb/WbJujM7FUHUynmppQbcVxV1HuLmnRj8AAOkp+wRkXECQxA06jzunBTaX5OQX1NTVU1yeTyVFCr97aATePE8aKU9UCAtEE4NN+h0yem8iY2RSP9KcnVXDRz8EdP+5GP1/y237n+lfB9g88Z2CLty8g94fPsytLj7rOnmmmeqbUBgZFq3UzkScxSAEMgOCdJ+4VQ3+x/a9ba3fQnfOHY8eVpUWuvB+/2OMl/aHff4CCMON2CQNwoY5eAU1Fe3fm0fYFyBSRKD4u1jlp2bo02lpAoGkAvPQfOjUtkWHZVKWBbtpvXU01OnYg9zDqWvTTDNI/KLQAoUpQ7BWwf8u3e6uOlbTgrE6a0HKmLe5ojSiHBAPGCUikP1/0Y+9zxTxcRkkTra0tnPQ/2rL3+093oe5Lfon0B+dboNGd619xe/kCmgRfAM7irC4pLKEdEvQMFGWdY+c/kEy0ADkNLSAA5gJ0lv64bDJaY8jAJb80yyXrqqpQUd7ufEnab4OX9G+b/dgrAdzxPewhDQmekpgBjTnffbyVMzH7mq10TUytkUVGe9wq7uUGRCmcHBAmwLtP3idK//7DRi9L7NNbR3O6CwZuJnFo58Y89POJP3D1AxiYOaOOkGCnXgH15aUVNWVFlU0NJ6muEdcHGAyGpMGTZiWijsSgiLBjAKhj2EO0UmvIUPJpv/RUyJrK43jOn5D2213RDyT+BAe8Q4JiElfh7s17cISHtrlisdpR3IAbpIlB4aUBSKR/FPaKxsXEUC355dX/6iq057tORT/etn87kTCA4HEGduoVcHDHj/tqjpe6zp45TXVxGsaCzKwlJWny3ETiCwhLDYBP/NEYzSv5OX8UgdN+q8uOVtVXlFWgrt1+zyCY8huMZoCgBQi9AjA1FeXSDwliYIe3vU//eYhCSJA2AxDj/pOWPZreKyHOGalSU1XKcNrv/s3f7ECd4/5S279t9mMvg/c/+BuHNhZs+W5P1bFiPiRIc4WROhNS6XQZVySN9Ht6cCBoALz0V+lNi1R6M9Wz4mps4It+inN3FXaj/kPabxDSrHUvSxODhI5BPGPHEZ7jh/IP81oAxXOnkEeiWGestu+gEZP9rQXIKEt/vuhnzPwHk+2BUPJbW4NK9+ccQN13++U7/pADBQgueDcOFSMC+Zu/yaoLgF4BKqMZaRl+oKhf+wbS1gBIyW/MaoOZbuIP7vWP88T3bfwy+2ds/zYEob+ghJcW0Kk+AEd6Ko4eKD1ZX0t1jVFKNeqdEO+cmPmokB7sl8QgWgxAlP63zF58o4Vlk6K1ekS76OfQzo3ZqHM7KReSFP2A9A8ZLaBTfQD33Pd4MgPp+iuidUak0htn+1MLoKkB8KE/NrbXUsZio7r1uNd/bcXxFk7670HQ6z+U0d0swYbi3F2H6iqPu/C8R5rnUKHSIIfdnsSZxKOQnxKDaGoAkUl33Okp+dWbqJ6KuqoKVLIvK19yKLp0+5217iXw/AcxeZ5fp4nCLgmzx1pAVn0NfV+AwcwivdkyB/mpSEhG6fLzoT/nldeutVEu+RV6/ef+8HkWOkfJL1yhEAkIdtYCxMahR7K37q+pOEa9SjBKa0RGsyXlxokz/dI3kBYDUPS7aaRVqzOkRutZqqcCT5CtLjly/l7/cIOCnmY++pL3LEFxiAh+/uWH9x+qpxwSxOSwO1DMFdcIY8V9agbIKFx+T9HP8DGZTqeTusqFQ0C5Gz7Zhrq2+2om0r+dHBxAaDoDxZZh+zd/sysQQoIKrQlFa7TTOSFpQT5ODKLBABRXDBllVWr1GdEBMOmntGDPEUnar5D1d4pICSj6CTFItABprwD+2eMqQe48FOJ8EJqQy+Wob+8+WiwkkY8Tg2R+vvyk5HdMZj++5FdBVdfC3P7g9u9zUNeS3zMg/UNeCxAyAzs1Di3O3Zl/oq6aur0SbeC0ALXW530D/a0B8CW/USrNLIXeRHWLcdFPZfHhqorCgmIv9R9KfsNHC+iSGIRDglWlRfW0Q4IRctw3MM45YekjPu0b6C8GIHr+J2T+Mg03RJTJKTf8wEU/W749Z6//mY++CKG/0I0JeIcExXFvRXu35wZCSFBjYpHaYFqIfBgS9GdLMF76awzMyrLjxxHCRBFnTjW5SvKyDqPOnn+Y8xde6K5KsGHfxi9z+g8bPexEbXUk7QXKFZH9k9OXJ3//1stfkPX2aEp6hK+b2kVwEC4/R0aOcNJ/PEe9OYrjyMYRbv6vRL7PfxY8wJjj13GEO/4UcYTNgDKOashBkIz6BoQwIsi51HGEW1DHctSLEE5QwRlqGuSfEl03OXdYI8Uh6WOSs3mcnE0X0U75S9sTd1fhx42OJKqMipDUuSEMcvC15G2TbDLm9vUIev2HO6RVgvgcnCCkIec1AvmnXZdbIt1lkruiJK+FAqEePZ/+YgAyQgryIeSowxMrjGnxx1qwVD9NpHwt0QLqUEfiTwv5GWAA4YHunIEnyJlQkcvfQoSVzE/n8yzqqD5FkvsiRz5wBPrTBxDhpeo0E47bjjq8nP6w+aQMoBp11PyD9A9fJtAq0QwxA1CTuyGMGvfn8A7peHMpI4iQUFAyAEHin5bYOWfJhvurDZLAAFxE/a8hf1/q/AMGEJ5agOAMPEEEkptcRA3yb5OONq+1dHc2I3rqnPrLCRhJNhFzVj1xumiImuXzggcvFUvKhBpQt9N+AGGGCHIOleSM6sg5pXFGvf0SQpi6U4ia51w9cHf9GQVQECag7MaxEeFHBtCKOrLAmsl/W1CHdxUYQHgyAMFHFUXOqeCojpTY3/5Cm0QTkJ5TQRNoDzYGIN3gSC/HBvIjAxDUvTbCCARqR+D8AybgOaOCsFJIJL+/J/a4JWdSek7bpOc0WBiA9ILLJBsdQfFhuyUb2S55DwBMINDOqdvrvKJgZAAAAKCnuUMwMAAAABDAKg8wAAAAGAAAAAAGAAAAgAEAAABgAAAAABgAAAAABgAAAIABAAAAYAAAAAAYAAAACGL8vwADAE4ag0JarbF5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_black.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAXUAAAF1CAYAAAAX/XrIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAIGNJREFUeNrt3XtclGXe+PF7mAMDDA46tiioJCQeUhfBA6kRmbaap/KQUiyiBSGiZpkaPY/bQVS0pBQF8/HcKoouJBhqHjZSyfVFaq2k9fx+2dbP51E8my/EcuZ3De2arScOc7jvez5/vLfcNcLvfc3nde0199xINptNApTo75WlPuVntrT67Fxex73nV/b45EJu7K6LWYO2X8wYVXLxzWdKLs1M/OjSa899dPnVFzb974sTS8Rft4lf7xD//a5Lb8bvFr/v0wtZT5SJf+6g+OcPia/z5dmiVsfF12W+UCqGAFn59MSHlhX7MmLeKByXMvbdR5f0m9xuZ5cRzb4K6el3NqC1rtrgr7FqDZKty0SvnyOFqElam11kmpetq/hrt3+SxNKuL/vX/xej+Pc1vV93Lfwhv7O9Rjb7apj4fqaI7+s98f1tEt/n5+L75bqBqMOjFXzxX2GzilPjn1vaN7vfa+Gl7YY3OuXf2uu63iTZ7BoSZFfTGX7h11hjDe1ivPh4QsvyKQseWfq++PPtEX9OrjeIOlTjE7GLnb1tYtzo93qt7p4WfPR33fVVOhFtncLC3dDg39dK+1P0E02+S3mj24ZVYh5fsLsHUYfclZ/+q98bWyfED8nsujl8dMBJg0Vj9ZR415VRzMVfzKePmNOLYl4rxdz+r5gf6whEHW6zrjwn/IU1Q2dFTWrxhX9br58IeMP4iPm1EHMcNbHFF/PFXPeULwlnnYGow2nyDy8PHbdq8JxOKc2OG4PELtwsWYmx8/iJ+f6upeb6CDHv+WLue8X8WYcg6miQGVuSx0bPCCvzDfP6WctO3O07+WBxHZ4X12PllqQk1ieIOu5pc8WakGeX989qNdx8yh5xduPyZBLXxR75viPMp+b91x+yDorrxvoFUUeNVeXZHQdmRa8zd9NXsRtX7i7+QXH9ZmY9tK5UXE/WNVGHh1ldnhPeN7PrZlOErpqQq4uvuJ5txXV9bX63/L3iOrPeiTpUaseJLZZhSx/LDuhpuOJFyD0m8F3E9Z4nrvtxcf15HRB1qMDEwsTUFqMDThJyAj9YrIMPChJTeV0QdSjMsvLsjl1ntt+lD9JYtbzZiZv422+VFOvipZnt9uzn/J2oQ96e2xA31TLQ7zy7ctR2995HrJeVYt3w+iHqkImyylKfmHldN+tbaq4Tc9SHn1g3zcX6eV2so//hscNEHe6x/HBu+wdnhB7QEHI4OPCTxLo6eCinPa8zog4XeH1P+oDm8U2+J+ZwdtxHinW2Xaw3XndEHc44L98UP8UUa7zsxRufcKFGYr31FutunVh/vA6JOhwgYUPcVO8IXTU7c7h7595JrMMPeFOVqKN+kgrHphqjDVUaduaQ2c69u1iXm8T65HVK1FELqUXJY316Gq6wM4fcd+7RYp0WivXK65ao4zYmb5sY5xtrvEzMoSQmsV5jxLrdKtYvr2OiDiH70KLO5mGNThNzKD3uT4p1/LlYz7yuibpH2l+53ztsRugBiZhDZXGfNj30QKVY37zOibrH6JPTJ1cTpOENUKhWkFjfOWKd83on6qr2wpaUsfpI/VV25/AERqNkixTrvUise17/RF1V1lb8OcQ8POCUZOSFDs+M+/Bh5lMVR9eG0AOirni9Fz6yWjJz1AKYzZL1vXd7r6YLRF2R5u6f38P7YZ8fJZOGFzRw0xupD/c2/li2N7MHnSDqitHxrYjtxBy4S9z9JNtbf+q4nV4QdVl7acf0kdoOhmsEHahd2Du0017b8dFLI+kHUZedkCkPfE7MgfrFfUpayOd0hKjLQsa+eTG6CGM1QQcaFvaIjrrqfZ9kxNAVou42PebH5BNzwLFxnz+rRz59IeoulX+sINA0qMlZgg44J+yDHjedPfb3/EB6Q9SdblRe4jSNxYv7zgEnszTWWPNWjZpGd4i60wSnhn3F7hxw7a49dVzwV/SHqDvU2oqNIYZoU5Vk8uKFBrgh7NGRhqqKQzxmgKg7QHLRi0kai5bjFkAGxzFFeclJdImo11vE7F7FkpHjFkAujN6SbXZ6RDF9Iup11viZFj9w3ALI8DjGV7I982TjH+gUUa+Vdz5bEqXt4HONoAPyDnuHB7TXDuxZEEW3iPodJRZMSiXmgLLiXrAmMZV+EfVbxCwavJygA8o8Z1+UEbOcjhH1Gx6YEVVG0AFl79jTU9vspWdEXbIkhH5H0AF1hD3hyabfEXUP/YOXVv7NzxhruUzQAXWFPba78XLl96V+RN2DLD28tr22re9PvAgAdWp7v/anw/uWtifqHmBu2eJemiADnxAFVC7oPo21bPvcXkRdxV7dNWeAZNYRdMBDmE2SdXdB+gCirkKTtv0pjqADHnjO7iPZtq2fFEfUVWRswcupkknLAgc8OOwFy8d6xIeUVP8HfHr9+HSCDsAe9nWLnk4n6gr2xIqEtwk6gJvDviLzibeJulKDbuQedAC/ZTSoO+zqPHJZl8qRC4C77tjXL1TnUYwK3xSdxpuiAGoV9oL31ffmqbpuWyx5M46gA6hL2Ld9oK7bHVXzB0nf/Q4fLAJQZ2Y/ybo7Xz0fUFLFH2LO/qW9JLOeoAOod9jLitXxSAHF/wGWHt7YXhNkJOgAGiTIorEe3qP8h4Ap+psvrTzkp23biKctAnCIti20P1V+q+zH9io66sbYoMssRACOFPt742Wi7gZNEx78TjLpWIQAHMpklGwJj1sU+xOUFPlNt0mP3UvQATgz7DP++EAZUXeBmEXPLifoAFwR9kUzYpYTdSdKLHgtlaADcGXY/5KdqKhPnSrmG13w2Zoogg7AHWH/rHhBFFF3MG2HxtdYYADcoUML7TWi7kCNn3nwB3bpANy5W38mtvEPRN0BImYPLSboAOQQ9tnJEcVEvQGSi95Mkow8dRGAPBj1kq1oSXISUa+HtRUfhWgsPNMFgLxYTBprxadrQ4h6HRmim1exgADIUXQbQxVRr4Pg1J5fcewCQM7HMKkDg78i6rUwKm/6NMmkZ+EAkDWTt2TLmztqGlG/i41f7QrkHB2AUtjP14/tzw8k6ndgGhR+loUCQEkGRZrOEvXb6D7/mXyOXQAo8Rhmfkr3fKJ+k4x9q2MIOgAlh33fxowYov5PuojAahYGACWLaKmrJupCyJQ+n7NLB6CG3fqUISGfe3TUX9qxcCRBB6CmsO9Y9tJIj426tkNTHqcLQFU6NHfvY3rd9i/u+NaI7ZLJwCIAoLrd+qz4TiUeFfXMsj/3IOgA1Bz2svzMHh4Tde+H7/+RCw9AzR5+wPijR0S998LnV7NLB+AJu/WFqb1Xqzrqayt2hkhmb57tAsAjmI2StWK3a5+97tKom4dHnOJCA/Ako7sHnFRl1FOK3h7LsQsAjzuGMUi2ogUpY1UXdX1k8FUuMABPFBmsv6qqqMcuTl3GLh2AJ+/Wc9L65Koi6vsrj3trghrx5igAjxbkr7FWHtvvrfioh04fcoALCgCSbfrA0AOKjvqCA5ujJKOOiwkAglEn2Q5sXBCl2Kj7D404w4UEgF8N6eR/RpFRn1iSHcebowDwW/Y3TUvemxinuKgbY8MvcwEB4FaxYcbLiop68pZ3x3KWDgB33q1vmZucpJioG3qGXeHCAcCd9WxluKKIqCdsypwsmby5aABwt926XrIVzhqbKvuo67vfX8UFA4B76xasr5J11EflZUxjlw4Atd+t56WPmibbqGs7NOcHSQNAHXRo6tgfVO2wLxS/ad4UyajnIgFAHdg/ZbppZvwU2UXdGNue+9IBoB5i73fcfesO+SLTd64axFk6ANSP/Wx9V/aMQbKJepP4mO+5MABQf/Fdmnwvi6jnHNrenl06ADR8t364ILe926PeetqIg1wQAGi4aY+1PujWqJdWfuPHLh0AHLdbr/yi1M9tUY+a+0IBFwIAHGfuiKgCt0VdE9SYnz0KAA4U5KexuiXqcRvmT5VMRi4CADiQ/Qhmw/S4qS6Pum//Lhe4AADgeP1b+15wadQXH9rRmV06ADhvt35o4+LOLot6u5lj9jB4AHCemX9ot8dlUddYTLxBCgBOFORbvzdM6/GTjd6bzNELADiXyf70xlcTJjs96gGjY08ycABwvtHtAk46Nepbvj1s4ZnpAOAaRq1kO1G6xeK0qPfJeS2XQQOA6+Qk9Ml1WtQN0e34odIA4EI9Aw1XnBL13MN72vMGKQC4lv0N08Mba/9I3lpHvWvmpM0MGABcL3NI180Oj7ouIrSa4QKA60U00VU7NOrZ5bs6SkYDwwUAN7DfBVO+Prujw6IenfXKOgYLAO6TNeKhdQ6Lur5bW+56AQA36tJEf9UhUV9x5NNQjl4AwL2MXpLtyF9WhjY46v2XZ2QxUABwv+WJ/bMaHHXziEdPMUwAcL/hrc2nGhx1yeTDMAFABkxae5YbEPWkLSuTiDoAyCfqW9KTkuod9bAZ48oYJADIx4yeYWX1jrpX6+bXGSIAyEdrX6/r9Yr6ii/2h3ErIwDIS82tjfkrQusc9cGr3p7DAAFAflYmDppT56g3e2HE1wwPAOTnhQ7Nvq5z1DVBTa0MDwDkJ8hbY61T1HPLPwnnVkYAkCf7rY3lH+SG1zrqQ1dnzWJwACBfa8YNnVXrqAenPXuUoQGAfKV1Cj5a66h7hbX4maEBgHyF+Xj9XKuoF33zpVky+TI0AJAx+7n6NzuLzPeM+oSt6+IZGADIX3H6hPh7Rj1q7owChgUA8pfZr+vme0Y9YPQTJxkWAMjf6FYBJ+8ZdY3FzIeOAEABLLpbP4T0m1/kHzsUKBm9GRYAKID94V7HivID7xj1CcXreZMUABSkeMZv3yz9TdR7vffmBwwJAJRjdr/u6+8Y9eC0MXySFAAUZHjIfd/eMer6yA5XGRIAKEcrb+1Pd4w6nyQFAGXRaez5vk3Ul5bvDyfqAKAsBhH18lVLw2+JekpR3lgGBADKs3Vq6phbov5Y7jvZDAcAlGfR4Edzbol6ePrkvQwHAJTnuXatPr8l6o2eGnCa4QCA8nQ3+1y8JeqalkHXGQ4AKI9Z++szYH69DYZnvgCAIt18W2PNf2w89iUP8gIApUZdOFb4y4O9aqKesW93DIMBAOXaNz8j5kbUxxXmpTAUAFCugvHjUm5EvW9O1iKGAgDK9e6AR5fciHqHl9N2MhQAUK5JndvtvhH1ZqOGHWMoAKBcI1oEHr8RddPDD51lKACgXL0C/M7eiLouNKSaoQCAct1v0F27EXXJ14ehAICC+Wt++VTpL1E3GBgKACiYQfrlU6VEHQDUFPXSylN+RB0AlB/1yr2lftKWM6daMRAAUL6zW4taSXnnKjsyDABQvnOb8jpKq86f6cEwAED5zq9d1UPKOX82lmEAgPJdeD/nMSnr4rlBDAMAlO/iwqxBUsbFc6MYBgCoIOpzM0ZJb1w6n8AwAED5Lr31RoI089LFRIYBACqI+uszE6XJXx+fwDAAQPm+mTJ5gvT8gQMvMwwAUL4vx49/UYrbvv0/GQYAKN8nf/xjOjt1AFDTTn3y19+MZxgAoHwnX5meLM34fyefYxgAoHyXZr6eKL1x7mI8wwAAFUT9zVnxUsa5i3yiFABU4GLG3FFS1tkLTzAMAFC2RC+97WLWwkFSztkLsQwEAJQedYPtQu6yWGnVmfPdGAgAKD/q51et7SblVZ7jJx8BgAqifi5vU0ep6PRZfkYpACg+6t62s8UlLaTSU5U+ksHAUABA0VE3/lxZutdHstnEr4k6ACg+6jU9J+oAoHwGSWO7EXWNyd/KUABAufw1GuuNqGtbtb7GUABAuUJ1huobUTdF9z7DUABAuR4xNa68EfXmw+MqGAoAKNezzUP+fiPq7VJf/JihAIByTe0Qsf1G1B/NfHcJQwEA5crpO2jRjaiPyytMYSgAoFyF41JTbkQ9Y/e+GIYCAMq1L2N+zI2of/jNCYuk5wNIAKBEJsnLduLDEsuNqNf8DVEHAMVG/UbL//U3GnNjPlUKAArU2stw/Zao+3TpcYHhAIDyDG8UeOqWqIc8+/xBhgMAyvNaeJfSW6L+6NyFuQwHAJRnad8ns2+JeurGrWMYDgAoz9bUqWNuifqyvx0J4w4YAFAW+50vR5atDbsl6tzWCADKjPpvOn7zL7QteK46AChJd71/1R2jHjwm7ShDAgDlSAtuf/SOUe/91sLVDAkAlGNh74Gr7xj1ifnb4hgSAChHycT0uDtG/cOKby2Sr4lBAYAC/PIgrx2WO0b9l2fAWHgGDAAogEWjs/57w2+JesATo08yLACQv9EBrU7eM+pdX83czLAAQP4yu/bdfM+oT1i3NZ5hAYD8bZ2QHn/PqP/1H5V+vFkKAPJmkrS2yr8e8Ltn1O28Qtr+xNAAQL7aevn+dLt+3zbqLeInfsHQAEC+Jrbo/EWtoz703TWzGBoAyNeaoeNm1TrquZ+Uh0smM/erA4AMmSWdtTzng/BaR73mQ0hNg4g6AMhQS43x+p3afceoN3s65TjDAwD5SWn24PE6R33w26vmMDwAkJ9Vg8fOqXPUV+w7Eir5cL86AMiJ/f70IyvyQ+sc9Zr71Zu3vs4QAUA+wrx8f75bt+8a9bBxM8oYIgDIx4ywnmX1jnryyqIkyY9bGwFADuy3MhYlpyfVO+o1v4FzdQCQBft5+j2bfa/fYH50+CmGCQDuN9zc+lSDo94/Y3kWwwQA91vePzGrwVFfU1YRwhEMALiXSdLZKtZsCWlw1O30bbtVMVQAcJ9uektVbXpdq6hHv5K1jqECgPtkPTRincOinr2rvKNk5AgGANzBfvRSnr2+o8OibqcLjahmuADgehG6JtW1bXWto97txfn5DBcAXG9+tyfzHR71nJ3l4RzBAIBr1Ry95GwId3jU7Qzte15hyADgOj0NgVfq0uk6Rf2x/1yazZABwHWWPjYm22lR//Dz/9OYIxgAcA370cuJLaUWp0XdLiB29EmGDQDONzqg3cm6NrrOUU/MLkiVfHkcLwA4k1nSWwsT/yPV6VG30zQOIuoA4ERBGl9rffpcr6i3GzNzD0MHAOeZ2e4Pe1wW9eztPDYAAJzFJOlt5dl5HV0WdTu/qIHnGT4AON5Av9Dz9W1zvaMeN3/DVMmHN0wBwJHMksG6IW76VJdHveYN0yYtr3MRAMBxWmpM1xvS5QZFvev4eZu5CADgOPO6jtzstqiXfn3aR/LmDVMAcAT7G6SnS4/4uC3qdqFPzzjAxQCAhpse2vdAQ5vc4Kjnbj/cnt06ADR8l344t6C926Nu1yQm/nsuCgDUX3yTLt87oscOiXr6mj0DuL0RAOrHfhvjnvQlA2QTdTtj+9jLXBwAqLtY4/2XHdVih0U9ft6mKZytA0Dd2M/SN8XPnCK7qNvpWkZUc5EAoPYidIHVjuywQ6MeN5tHBwBAbZklb2te3GtTZRv1mh9OHRpdxcUCgHuLNrSocnSDHR71se8UpnK2DgB3Z5IMtsJxs1JkH/Wa3XpYzytcNAC4s56GVlec0V+nRD353aKx7NYB4M679KLkzLGKiXrNfevh3LcOALfTz6fNRWe112lRn5hdEicZ2K0DwL/v0ksmvhenuKjbNeoy7DQXEQB+NaxR59PO7K5To75oy6HO7NYB4Ndd+qFFhZ0VG/Wa560P4XnrAGA3PXTgAWc31+lR33/stF7TKIhPmQLwaEEaf2vl/mN6xUfdrk9aTi7HMAA8+dglp09arit665Ko2+mDI69ycQF4okh98FVXtdZlUR+/YOsYdusAPHGXvnV81hjVRd0uIHL0SS4yAE8yOqD7SVd21qVRX7uzIkTy5tG8ADyDWTJaK9buDlFt1O0eTlq0nGMYAOo/dvG2LeydutrVjXV51GueCxPKc2EAqFusMfyyO/rqlqhn/rmsB7t1AGrepZdl5vfwmKjbdRqZUULYAagx6Bmd/ljirra6Leo1P6g6kB9UDUBdInQtqt3ZVbdG/eVFHw/jbhgAamGWfKwfv7xsmMdG3a51v2kHCTsANQR9WuunDrq7qW6Pes0xTDMeIQBA2SJ1ra7KoaeyiPqcNWW9JAO7dQDK3aWXzcnvRdRvEh2ftU7SczcMAGWx3+2SFZ22Ti4tlU3U7Uxth5xhkQBQkqH+Xc/IqaOyivqHe09YNEYLxzAAFMGiMVlPfPi5hajfxajpedM4hgGghGOXvNGZU+XWUNlF3S64V9pRwg5AzkFPCx58VI79lGXU7QzNo6tYPADkKNrQpkqu7ZRt1Nd+VBGi8eZ8HYC8BGkaW4+uKQ0h6vWQ/GZREscwAORz7GK0FSUvSZJzN2UddbuIobOLJR1hB+D+oM+OSC6WezNlH3W7Jh3jvyfsANwZ9Pgmfb5XQi8VEfWa58NYeEwvAPeI0LWuVkorFRP1BWsOREl6ng8DwLXMkq/1wILiKKLuBImvFaRyDAPAlccuBWOXpCipk4qKut0j8YuXEXYArgj64kdeXaa0Riou6nZtYtP3chQDwJlHLultxuxVYh8VGXW7pg8mfMeOHYAzdugJTR//TqltVGzU7Xxa9LvIIgTgSP18oi4quYuKjnrpodM+WnOHayxEAI7QQdvqWmXptz5E3Y1y1peHa3xaXmdBAmiIlpr7rpfn7ApXehMVH3W7ue+X9dIYePgXgPqxaBpZy+YWy+JnjBL1f0p/Z/cASccdMQDqxiz5WXen5w9QSwtVE3W7F2ftGEnYAdQl6NsmfRCnpg6qKup246YXpkhabnUEcHcmycdWOG6Zoj4t6pFRt3s6bf00duwA7rZDX//0wmlq7J8qo243IGHF2+zYAdxuh75q4LxMtbZPtVG3e8IednbsAG7aoa94IvNtNXdP1VGvOYoZv34aO3YA9h36+qcXq/LIxaOiXvPm6dTCFHbsgCfv0E3WwnErVPemqMdG3W7Sn7bFEXbAM4O+bdJ6Vd22SNT/6dU5uwZodHzyFPAUFo3Zuju9QDUfLCLqtzF3cVkvjTfPigHUrqUm8HrZ3O2q+Og/Ub+HnNXl4Vo/nu4IqFUHbei18pxSxT+ci6jXQenfKn187ut3UfLizhhALUySr62fT8+Lp0v/oejH5xL1BmgamvCdpOUNVEANQU9o+qRif2IRUXegNl3T97JjB5Qd9PQ2ExT5M0WJupM8MmTxMsIOKDPoix+Zs4yOEfVbJE4qSOUoBlAOs+RvLRi7xiM+VETU6+mdJZ9F6fwiqiUv4g7IOeYRuvbVBxbsiaJbRL1WGgc/8wPHMYA8j1ueaTz0BzpF1OssotfsYsIOyCvosyPSi+kTUa+35BeLkjS6II5iADcL0gRai5LzkugSUW+wtRsrQgym6Cp27YA7dud+tmhDZFXF2kMh9IioO1Rwm7SjkoawA64Melrw80fpD1F3mlGJedM0Wo5jAFcct+SNWqX6H2pB1GXgw4++tfhbhp5h1w44Z3c+1L//mRMf/reF3hB1l4qOzVrH/eyA45ilRtas6Lnr6AtRd5s5b5f10hkjr0oa4g40JOaRus5Xy+Z86nHPPyfqMtU6/JWDhB2oX9Bfaf3iQTpC1GXn5ekfD9MZIqo5awdqd3YeoetU/fHLJcPoB1GXtU5dMkoIO3D3oM/q9HoJvSDqipH5dlkPb5+HfyTuwM0xN9ke9u71Y1nm3h50gqgrUu9HFq7mrB2wn52brQt7v7uaLhB1xVvzQUVIQOPRJyWJXTs8c3c+OmDUyYq1R0PoAVFXlZTxxWP0+sirxB2eEvNIsd63inXP65+oq1ps7OJlGg2PGoB6BYn1vVisc17vRN1j7N9f6R0WOv2AJBmJAFTDKNbzNLGuK8X65nVO1D1S1oIDUWb/oWc0HMlA4Uctg/2HnPlMrGde10QdwsQJxfF+xtjLxB1Ki3mMWLdbxPrldUzUcRupyUVJRkN0FXGHnPmJ9Rlt6HmlUKxXXrdEHbXwfGJBqlHfjbhDdjGPEusyL2HTZF6nRB318MdRedMM2g7XiDvcHfO2Yh2uFeuR1yVRhwM8F79pisn48I/EHa6OeW9j7OV1Yv3xOiTqcIKZM3YNat4k/nviDmfHfKRYZyVivfG6I+pwgeW5h9t3aP3KQS/iDgfHPE2sq4NiffE6I+pwg7LSSr+Ho+YW6DRBVgKP+oY8UKyfP4l19D9iPfG6IuqQiXFxeVMtvv0vaPiUKmrBW6yTWLFeVsZtmMrrh6hDzkcziw917tZu5h49u3f8G1+xHgI0FutLYn2UiXXC64WoQ2FSEzZNbhEw+iS7d3blg8U6WMX95UQd6rBjywnLU31ycgMMPa+we/ecXfnvDdFVc8V1Py6uP68Dog6VWpt7uH3frpmbTbqIai928KpiENezrbiur4rrW8YdLEQdnmdVdnnHgQ9lrTPru1UReOWG/EFx/WaK61gqrifrmqgDNTasPBL6bP/lWa3Mw09pxf9113JMI0s+4rrY9RXXaZ64XvtXHA5l/YKo455eea4wJTpsRpmvV+vr7OLdvxtvLq7D8+J6rBDXhfUJoo4GyV9+JGzc4FVzOjZ74WujJsjKLt75u3GLmPMwMe/5Yu57xfxZhyDqcN5RzdLD7V8YumZWZHDaUZNX2M86It/giDcXcxwp5jl/6OpZnyzlTU4QdbjRnqJvzG9M2Bo/pGvm5vCA0ScNGovYzXNkczt6MRd/MZ8+Yk6To+YUrBRzOyzmxzoCUYesbc8/FvjWhOL4gZH/semBJv3/4acN/slLMtjsPCHeRrH7tgvVR159Mjj1q1d6vffBcjGPv238KpD1AaIO1di0tDx8VmrxmGdj3nk/qsWzhwONv79k0JitXpLOZqe0XbedRdPyenSjp04/G56+N73v0uz3xZ/vY/Hn5HqDqMOj7dx4LHBFxr6YN8YVpiQ++m5Ov3aTdnb+3ZNft/KLPmfW3X/NoPG3asVO/1+cEeqbv75R/Pss2vuvtRH//ujfPfX10LZpe159fNnC98T3t0l8n59tPN6c6waiDjjAl6WnfcqLzrb6LO9cx70rzvX4a86Fx3ZlXRy0LePCqJI3LiWUzLyU+NFrl5I2v/y/qcuSjrzyF/HXbeLXO8R/v1P877vF7/tU/P4y8c8dFP/8IfF1vhRf75j4uswXSvX/AXO4pNyLosLqAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_button.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB39JREFUWMPFl12MXVUVx39773P2Oefembnz0XamrW21DQIWBOHFoEEMDz4SYyQYSI2JD0WCiSSSqIkPhleNKIaYGOFBY/yIPvlAVEB40ED9ACJNLRTascyUTuncmbnna3/5cPbcmQFU8IWbrOyTe5P7/+21/nutfUQIgffyk2w+PLL6NEMx4rxaYkme5XV1jlkvWFSneJ+fEl4MDywweUMjl27RcuOaXJQHpwgzAxADWJ0LvcWB77844/c+2ZfrJ6b84Nwkb7iwcRCxehm/Pomv5nHhEEFOA47BR+/dAni7jw4pAq5akSufLdXS515Tq1dPA7vRZGgkCgUo/Fxg7UhQK7c4znxJ+Okzgr0/x6ufBdIXxDvJwFvESZKzyflji2rpvlItH52nYB+7mEYzQUIfRQ9BD+gR6OHoYSkw5HL9cC5Pfi0xc7c70u95MfkjoHxHAAHIg55eVK8/8HJy6rjGqFnmmSKnICMjpSAhJ6WAGIECR46JUZCFGmVWj6j2uQetPXhjK6+9H8KF/woQgImQTf8pO//Q6WTlzgHzDAjkGDQCTUGOJieJEIIcyAnk2BgtBQ2JyaDMoBqSlK8eC20+aNTNx7Fh+T8C9INOH9NnvvWXdPnOXSwwQNDHUWAocGRoMjJyUnIUBZJiB4ChoEWHGuoM6gRqCbUkXX3xNq/6w3rq0/cQ2HgLgA6KE/rcsT9mr909YA8DFBM4+ttqmyHIySNAQo6MGfBjgJwG2WioNsUF1EBtyS4/c5dbOPJcO3fTd4SzOwFOpGtXPZYvfSVhJpkhpY+nj2cyrgWWHhZNQha9kCHJdgC0pK6GWkOTQK2iONB4qGqZvfSHL4e19MmgJv8KkHxz/SlkkOqMLj+zqOTR/cyTE8bu3gTpYymwZECGpkBvK4Hv3E+DaDU0atvOPVQOKgNmDnVh8VAiz97V7rnuOcAlE2GQj4Td/bx2ny/YRYGiIESILibwTODHRy1Hjc2YAz1ct3vbQJVCuSkeoHRQ2Q6gbKGeJD39wh2mf/0PgVPJ/VPX1V8sn71hWRZXzNNDI6KpOnMV40wEJscAnhxNEY9ijiULLTRlTLuAalM8Cpc1lBrMFHLp/F617/xNwKkE4HSS3Aoz5EhSQEOsbQdSxEz0YzZ6uGjINIIalG2g2ky9f6vwSMNGCqMMNhLUP0/fCjySAFxUvaM5GQpBEp2ZAikh1pwxSB+YwMfGk1Ag0KGFuux6Xelg1MIoh1ENG50g6ymsa9hQUBaof618aHwKhmJwMCOg4hcJ7HjeBNIxKxNjCEGGQLZVrLuFsom7TbZiLYF11YkPFYwyxOWN+TGAF1MzCoGAcchtod4EoYFebMPa2m7no7oTWVPdui67WBOwJmEoYJVuXROI2ve3+kBdgBD/1zwXJjq8zqHJocm6LljlUGVd1G+OHJptnVCshaELYg7RzYNxBPCAi2GBFmhDZ/IUyESCrnvQGjAWrAPnwbsugt8WIf6pIZCXYhNgMPSLF5w8bMWWoN0eAVrRCTcBSg/CgU67454YjSwLqFto2whjOhi7DcpZ8B7aijA5d3GcgV0j9+LZKvmEE90OLWBEJ9bSrQ1QBlAeggEpYjYDaCvJ67xzf9lCY7pobQdkXQQyYD2UPfz795/c9BZXWvfEicvc3cidaW5jM9MB0iiOg+Ag192xzwDtIG1TVJnDqIkdr4XaQNNCYzsAYzsoO4H94JVPpJsAB5U9sbv0Z4e1PNRXnWgWhTWdsPBdaqwDJaPX4qzRDnQr6DUZlAWMYhOqzBZIbbpsrI/w0/suugMLT49L0G6Ic9eq9ie/W8m/UaVROEASIIniwoG34AP0dDfwdgAY0E1KslmKUbMFUhuoYlaGOebje39Fm700Bnjg5kl3z29Hv9jv3B0rb6gjWQqJA7WZdt+JWwNJ0p22KoFCQgVoD9pC1kK/zhBVvhNg1ELdg0sVfvfCBXdg7lFhaXfcB26YMs83e8SDP32l993LIKUEGWvuojhAP4Om7sZ9JTsPZB4y221QNwq92QdGbdeKywLWaijz0Hzq4EPmxtlnROV2XkiME3x4wfz45d3NR/78QvaFJP4SLDgDzoHWsfZpvG3FqZuFDkCbLgtJnSHrYmv3awYuZbTX7/+1uWbiYWH8uPHtuBOWRoxuPGS+vvaanD15Mr3Ni64ntC0IGRud7sSrBPLtAJs+MJDWkrzKug670cIbLfbI7O/tNeGrorKXQiHe/lIqgLIVy1fsNcer82L93OnkrrqF2RR6GbR13H26bewTTes6H2gDuoW01qjVAqoWt8/9xn5A3CeqjVcRb3Mt/8HjQ5TcgmiMWN6/xx6f9v7v504m964uyUNFHyb7XQaqBAoFlYgeCFs+0C2kI9AjQT6pl93h7OHQq78vGn85iHfxZmSsGB3cb7/dXBSP92fcsWpZ3T68IPclKaQpZBq07PpEGiA1kDZxnQgr2WH3yzSER90BnpHLcXC8m1czAGMEwN/mZv0/vAoP77uajzVL8pPZSB71tVhw0LcBbKD0vXCBGX9SLPinwlA+5af9K1yiEuZ/TNP3+vX830UX5/xBVNUfAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/wheel_button_h.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABu9JREFUWMPFV2lsFVUUvrO+ve+9lkJLAwVEKgo/TA1qNEBYGtqCQpBFNBiCaFAD/sHoDyRRYkgkRDAQNUgiNhgEI1tZ2hSrREiEgIpBoYCUrbSF9m0z783uPXPvLEWg4B9f8vXcuTO533e+c+7tDGtZFvo/wTIMg/rDvEIdM7FpTNWsQ+MW1e4b0TBjb/mJWXuKry7YlUy/uiuZWb47eX3VvrKTaxuHb9988InXt/8w5tHdzeP4/taFH4v6+Y1pGlN97vCFT27kO5v+Uk9vuWl1vCQjqRoxqILl2CKeY2Mcy5Sblvy4ZnbOlbQ/PrvZfb1FVVObmptHP93f+ncV8OzRWcLYA0+t6JRv7rxotC/Ls8rQICpCEVSCQiiBAnjcFzBXbMdYyChD5uUluWz3d/t3PvbB4W+fjD2QgPqmJaXXem983aZeXpNn9WFhvChARFEk4JGIZcA4YEcyJjGM70cw4kiwkogzlHJdurBSznR8c2jLpCH3JWDRwfdL/1Y6tl4zUvNCTIKNo1KccRzx+C9ZPOoSCragf48BnBFGSElghJGZ66wvpNsb9m2cXXlPAauOfSn+rl5a32bdmhZDSbxcEpHs43jRmJ29X0SAQvSJssVYmFyNYAQR0qIYMcSkr4w3U2c37tv0RuKuAk7dOv/2aat7LiFN4pyLENQdHAhhAbxrvyPEgzMHkdHClDxEokoFdZ6ts3rPv3NHAbMb11T/ot9YyjJRLooFBO3sYjZx2BaQsLP1l8Kz3bOfMzGZRqFiAVqQAjuhiox+6eTi/SvrJ/QR8ErjBv66Kb98k2WGxWmzOd0ddF0gAHLebT5qOc1cxE8wepgQqkEvKiKOAkJGDHG9qYFGz43Fjavm87aAZT9uCyM2OPy8lJ0rYgKoNYFTYxBAXAjbzsQoWditfcBtPGyzEiLQApgUQ6FRFYkQXJbCpYvTOYUZawvYMGGB3GXpz6TD0cFRO0PH0pgrhrgRpy7Efdn7doQVITW36x7qmzlEBSJOGjsU6M0mzZ6uyW4JrhhmDaJ15Ow6OzX1i4i6DQli/FsOSsCaYY8YslfEvsQFHPM8uS5wyGi/6glIW3wVLMiCjRQ8jd62I0KCPhcE6oKdPZArNOsCTyMlxYQoz5FxnrXvGd3pka4AyQqVEQHEAdY39oOnvRGiQgLUKbvxFKfOAiXGhAWWkMssIYZrGMP9W/mkK8AygzHInsFANPrB+lzhaYkCtGF5I+RlnWd9YEiUGUIq4SghEvGclbOC3jmgiUT9fwCj0kaDNXTocoFA9cE/p/ngCsgzORPUyQSWA4nApDAwdAo1R6CDxbDNYM/r2A34H2DiaPmi5cQInQ+D04orIFJgOnW8mIFh+kFJYd4mxlHDUDJYcxrzUiFWXqCOYCG6IyZIBBiOKECQiMD32FBxyhUQ15g2WAxIdUoOhBq91uhYwShgcjlNHaDzml1XZ9v5RNhCAlRE0Iv4Gaao9IIrYCjDtSBKBBlD1LOEHIi0LMnazhyjgK81XCI1S0TB86a9zejWs088kZwHtgiROAIC7BhE3JDKVldAeYA9EssVuuQMzThLM8wSACFknsemySkqSvJAnICuhy0IIuhBpIrekeyUBwtVI4k0Wzag2RWgSua5h6Kh7yE7p7mc7JzMbethnPVI+0AG96gLICTvFxLwekQSkTisssnShNOugIbl9frgsPBViWF0ZFK03tR2J3vZ13ha3ifUgUzKYsmOC/RAUqgIcCLLIyMeTwllxZ/X7fiw0Od9YNe7045VDxS+wLW3cikiAMjztOnAfnBEl53G87J3mlS1ewgOH8Hrhzw9lmU7WtzYyq21hz5queMb0eiK4LpHkmiv1EtIIfNCmmQOQjSapVd3j1ijZQB3LEdAnu4M2CFZAVkjSluFkSVr7vpKtm75lEzVYHbZkLj1U6YHoVwvsf72xrvd/j4iJLotJSpCIuSoPH4iNHLAW7Wb3+y451vxjo+ntw8pFRYOijAHZCwg3Y3XodvOOQFdyykUvyDaIyZYn8bkORGxxZHWUEViYU3j0jP39V3Q+nVde9nA+PwRFcIaEZldUBIog0aPYeW2HeDaL9M5eLaXQSbH93KVkU+jgxLzph5d/OcDfRkdbxyfOXO89r2SRPSFoRVcA88oPVKKlKWQIv1h7xQH0KS4bCqUzdIyVjm7I5yMzqk/O2fZxFNzuh7408z5nTs35UiiSFgyaGBi8qjRgRXJEma/KKI20zBvGaoh6QQ9lmCd54qZQ8EqYWW8NDFlUEnZopqLNS39fhvezyf0kZNTCz+fnfLrnlM1a5suT6/f3z1j1O7U8wO2pWdGN2Osz8wsWd393MMrrkyf9tpv01a/2Dbp+Pjj1VJ/68LvH9f5eR16/VvHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAAlCAYAAACONvPuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI4QTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0MkE1MjFGODc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2k7HQAAAAKVJREFUeNpiZEAAIyCOAWINIBYDCTBCJRLExcXrFBQUBAUEBNjY2dmZGRkZGVigOrK0tLTEQaq+f//+/9u3b39AbJBklr6+vuqvX78YgKr/I1kDllRhY2NjB9L//v9HkQNL8jAxMTGiS4AAE5TGlIHqhMhi0ckCk6CR5L9///7jlMTpWrySBL1CnrGUSdIg+AYwynBKgsFg8CcTAx5AIwfhtRMgwABg9KLwDJeKlwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAlCAYAAACDKIOpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI4RTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjA1QjI4RDc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+lugQ8wAAADlJREFUeNpiYGBgOMPg7+//nendu3d/mf7//8+ARABlGdDFwMS/f//+Y5XAVEesEuzmYXMBSAwgwAAGDGVWQ3ijRgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAAlCAYAAACONvPuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjA1QjI5Mjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjA1QjI5MTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+yLs/YAAAAL5JREFUeNq8UTsOwjAMdawqQhE7F0AMXXKU3qPH4CQMHAchRsauZQgdSVpq7KIuVRQJQXiSFfk9f2I9BQAneOPGceU4EtFZCFVV1YMT8N4/u64LTdPc27bdM3conHPDVKUUGGN0WZYbFmvOLyhdEuM4Qt/3FEIAa+2W6+tChAVIa73idxcTAREVP2uEOKaOaOeMqDhzX4h8H2UY+/EpuUXxcQkxPsPO5NjfWJbcGfOT/u3nzCEkkOlDyZ0vAQYApzrDr3PIkEgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxMzc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxMjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+0BG1dwAAABpJREFUeNpiZGBgOCMvL6/5+/fvvwxoACDAAGiOBUKTvH+gAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxNzc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxNjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aFUCMAAAABVJREFUeNpilJKS+sQABEwMUAAQYAASUgFE0B817AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAABCAYAAAASC7TOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjEwNDgxQjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjEwNDgxQTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+vZzRAQAAABpJREFUeNpilJKS+sSABlhZWZkfPnx4HSDAAClOBM5s/AWUAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMTY1NDg1Mjc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMTY1NDg1MTc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Sc/CAgAAAClJREFUeNpiZGBgOCMvL6/5+/fvvwxogAVMsLAwMWABjCCdDDgAQIABALFWBiGZGU1kAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCRjE4MTIzMjc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCRjE4MTIzMTc5QjIxMURGOTRBOUM2MzdGNkY1NTc0OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M0IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2MkNBQkQyM0EyMDY4MTE4RjYyODQyQTVDMkY3NDA5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+paGDHwAAABhJREFUeNpikJKS+sTEysrKzAAEZwACDAAP1QIhnbQ19QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/HUD/CPWindowHUDBackground8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExOTEwOURERjZGQUFGMzZEMiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGMTY1NDg1Njc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGMTY1NDg1NTc5QzExMURGOTlFOUVERTYwMkY2OEY2MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE5QjU3REYxMTg2REM2ODM5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAxODAxMTc0MDcyMDY4MTE5MTA5RERGNkZBQUYzNkQyIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+8Yt1RQAAACtJREFUeNpilJKS+sSABlhZWZkfPnx4nQXEQJdkYWFhAtGMQHyGAQcACDAAWtgFv4rp/QcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgJJREFUOE9dkzmPUlEYhmcSbbQ2sdBY2NpgqXZWdv4HLZyfYE/ClgkEQtjXAsMmS1gbKkJjKMYCGpZAQAts6AZH8vk9J/dOmDnJm3x5t3vOveeeicjZCc673e6TQCBw6fF4rpxO5xEww6HhOc2chh+kUqmPXq/3t8vlEg2JzgbMcGh48N4veJjNZr+43W7x+Xzi9/slGAxKKBQyYIZDw4OXjF1wPh6PX6l4jSkcDksikZB0Oo3RgBkOzSq6JkOWgsf5fP6bnlGi0ajoFoW1Wq2kXC4brNdrw6HhwUuGLAUv4vH4LwQlJZfLyXa7NYHlcmnAgkPDg5cMWQpeRyKRI1stlUpSLBYlmUzKfD43QRYzHBoevLFY7K9KDgreZjKZm0KhIPV6XZrNpjEtFovbAmY4NDx49b3cqPTGFFSr1b1taLfbstvtTHAymRiw4NDsB5CxCxzD4fBnpVKRVqsltVrNBGazmejRDJhZaHjwkiFrXuJ+v3ereLQLeNucmScBZji7AC8ZsuYzKj7oU36wPQycs9FoSKfTMWCGQ8ODlwxZc5EUzxQX+qmuBoPBsdfrSb/fvwM4tM1mw9YvrIy5SOYqK14qPh0Oh+p0Ov0zGo3+EQLMcKp9V89ny3t7lW3wgzxVvFd8VeQVfQvMcGh4TPh+gX2cR4rnCofinQVmOLQ7v/N/0NkPdZCIgQoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe9JREFUOE9dk7vL0mEUx98Xaqk5aCgaWltsrLamtv4HRft5Q8Ur4v0+NLpLCIFQe4M4a4u/FBcXpwJpaZHoTU7nc/AJfR/4wuF7Ob9zHh+vROTqDNfj8fhBJpN573meHwwGj4AaDg3PeeY8fKfZbL5V849QKCThcPgCcGh48N5ucLfdbr/DFIlEJBqNSjwel0QiYaCGQ8ODl4xrcD2bzZ5p99+Yksmk6LiSy+WkUCgYqOHQ8OAlQ5YG97vd7sdYLCbpdFqy2axwVquV1Ot1w3q9Ng4ND14yZGnwpFQqfUcoFouG7XZrgeVyaeDAOR0vGbI0eJ5KpY6MWq1WpVKp2Mi+71uQQw2HhgevTvNHpQANXmrXm3K5LHrDXJA0Gg1bwR1qODQ8ePP5/I1KL6zBYDD4RWcMupvsdjsLLhYLAwcODQ9eMq5BYDKZfKvVatLpdOwLHHZnV+DuAQ0PXjJk7RL3+31fOx8RGZV9uXG+BKjh0PDgJUPWfkbFm/l8/pXx3BStVkt6vZ6B2n0dD14yZO0hKR4pvM1m4w+Hw2O/32fHC8Ch6ZtgdO+UsYdkT1nxVBE8HA6fptPpz9Fo9JcQoIZT7bN6Qifv/6fswB/koeK1oqT4oPhyAjUcGh4L327g1rmneKwIKF6dQA2HdvF3/gckQc2QEBVViQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApdJREFUeNp0Ul1LVFEU3efeuV/jOMM4Ew5qJgzlRAmOIxKTEP6A/oDRa0+B8ywiKCI++KD0C3zxByT0ZA+BYYw2DmKkWUaWY4JFaOrMvd572uvgiBQdWNxz91lr73X2PmJsbIzqa3R0VJSHh9s3pBz2qtUHvufdRFw3jG3Dtl/dFWKye3Jyd3x8XNY12hVxaGFk5HG5Wl09//37iR4EnaauawD2iOEMHHAvEwghIDaeT0wUDo+P55icNE2TLMsi27YVsEcMZ+CACw20QkopNufnc29KpdemlKZhGARomqaAFQSBgud5Cq4Q7r2envuZwcG3sBLeqlRGLCLT4mqqEn9v5HLU2tVFJCXtrq/T11KJQrUa6bpOolYzockQPUKCpHd6mq9bRvXrfX2UGRi4bG5XKkWCv/ucpO4KGmjxl5Cum0BlAISObJb+Xu3d3eqszhOeF+dwExw4lmlKIxRS1XFH2PzfAsf3ffJJmXKUHyceP1N3466iyuby8j/Cjysr6hwAN9zUdIY4HJzGW1q+He3sZCAOsZPPxSJ5rkvp3l7uoaRt/v++sUGxcPhyOlHWsPYMCX525nIvipXKLZ6VhgSN3My91VX6tLSkqjuOQ42RiEqOcUrbDqCBFlc4bOzoWORq6wH/wCImEovFKJlMKkSjURXDGTjgQgOteki8aWU8PCiXn35ZW8v4JyfqhV5duIre0BDwNLZS2ewzDi0w9vQIW8vn82jIYSSV2r/W1kbnmtbMVi23WhWSEzmJRBBPp3919vcvxtLpOea+ZFSmp6d9MTU1pewVCgX1qBh3GH2M24zmCwMHjPeMIuMd48fMzIxX45cZwkxd7vjs7Oz50NAQiEeMDxfJGi4SnMAhhOg8cyU00P4RYAAZ2RK8jm+p0AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApNJREFUeNpkUt9LU2EY/s7ZOcfNjUltYBmlGPkrNSOL0mCbE+xiXepNBBM0hY3RdXTdH2Db1aDhH9BVGPljwsQIyqWE1cy70FKsyGE7bDs7p/f53CeWBx7OOe95nud9v+e8UjgcZuJKpVLScix24U0+/6ik6z6jXL6EuqKqm5rDkbnldj+5PTX1dXR01BIa+ZhYeTYxcT+zu7tS3N9/IBlGqypJMoBn1PANHHD/MaCCmozFHm7t7U0T2auqKlMUheF+/BnfwAEXGmgly7KklWTy2qt0+rVqmprNZmMCkiTxLsRhlUrlCGVZLt0JBvt7x8ezGKU2u7HxWLMsTal2s9ntrCsQYO19fcw0Tba+vMw+ZTLMVioxwzAwiQZNL2P3YODV8/k+CDVN4wZdg4Osf3j4KNz6piZ+3yQTWT6MDRpo8eYxCgWPOC/G7hkYYP9fPX4/FwueVSyeovJpGDiosyXOzX+bopwwEHkIHpmh4ODz1Ho8erXIie9mZ08YvF9cPPxtxAHX6fXqvBmhcLa5eWt7ba1NdMiSQalcZld8Ph7iKolzFKSTMhLTQIMoYPDrZjD48nku10IRy+hQS2dcn5tjqzMzXIBwHfRnYA5DZreb0ECLI/zwtLQsXB8a+mCSswjK5XIxt9vN4XQ6uQk6gwMuNNDyRaKHc4S7m0tL0ez8fButrSxCExeWqaauzrwaDG60+v1PqfSCsG3b2dlhoVBI55M0Nn6/2NHBiqZZb1QqNfrBgWSRUV1Dg3m+u/t3YGRk4Uxn5zRx04Rvk5OTFWlsbIyPl0gk+FIRLhNuENqxQ9UBdgmfCW8JHwk/I5FIuUSbqSAUrGc0GjXi8TiIecKXqpmzavAHE0KI5IlrQQPtXwEGAI4lFJG9vogeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNp0UzuLmkEUne/zrati4ou1V4JrBAkpbARJsRYhvY1FmqSTsEUgKGhlYb9VBGH/QSBKMGLaECxiJJjOIuLqJoFofD9yzsRPtsnAYYY795y5586MUigUhDby+bxSr9fdvV7v5XK5fLRer88YNxgMX0wmUyMUCpXOz89visXiXuOot8j6SqXypNPpfJ7P5y8Qum80GlWCa8a4xxzmajwFaiKXyxmq1erT4XB4qdPphF6vF5wVRZFJ+/1ebLdbsdls5Oz3+59nMpnX2F8r2FTa7Xa42Wx+AtGEEwVBciqVkgK1Wk2KrFYrCQgtk8nkg1gs1mV51m63+wo+TRaLRdhsNgmKnJ6eSnCtxZnDXHLIpRf3YrFImM1mYbVaBWckiNlsdmwu7ZBIa6r6r23kkEuBu/DlOyiLRCIhvF6vuD3S6bScR6ORgFV5CG7JjdAdClgQ2LHb9E2P/xvcYw4t7XY7dtgir8PhcMxQhYPrRqMhJpMJTxAXFxeSWC6XBd6BsNvtsg+04XQ6pUcKzHw+Xx9XGKEybTBxOp0eT/Z4POLk5ET2gmAl5GBrToGfkUjk7Xg8DkNZ1a6Qo9/vy5lkivIq+RYgsiOHXLb0BhY+INCGr+Op7Hir1ZLgWhvMYS455MqHhEUAeDwYDJ7hH5yhRJWn4S+Iw1/QmrcLBoPdQCBwifAb4LuO5cXj8TnVUOY1NrcgewETylXpGQ3b4vn+ikaj71wu1xVy3wMDiG6VUqkkO5zNZuWjAsLAQ+Ae4DtUfg18BT4CXeAH/4G0ys9xuN8NTmXib+DbQcx2EPjDCklk55F7/M5/BRgAk6YORNXAcuoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnRJREFUeNpcU79rWlEYvc/fGiJaTVPTJYqLPKcQHGuGZtPVxcFIHcx/UJB0qAr9B0SX6tIsri0daouhS0BCpqrgEOzQxkDaQsUnjT7tORefpL1wvNf7fed83z33PuXo6EgYo9FoKKenp/7Ly8vn0+n06d3dXZT7Npvti9Pp/Li3t/cqnU7fZrPZpcFRDAGQLcViMXF9fV2dzWaPTCaTuD8Wi4WwWq2jQCBwfHJy8g4i87UAyNZyufxsOBxWzWazICigKIokL5dLKaDrusTu7u5xoVB4jfhMQVA5OztTm83mBTbsFotFECTn83kpUKvVpMh8PpfA+k8qldo/ODjosk/X+fl5ARXtGMLhcAicl+2KcDgswTX3GGMOc8kh14If/3g8jsMoGeTMI8DA9fn539g3vCGHXAr44Pg2yWw9k8mIUCj0j4GlUknOV1dX9EseB0b7sfWAAk60toC6lL5f+f9hxFiI3pFLAeH1erXJZOLmul6vC3TECtI8Dppp+EBwuN1ujTOrasFg8CtdZ9Lm5qbw+XzC4/GsK3PNPcaYw1xyEJqyg5+4jveDwUBFwESjjPvv9Xpypvsul0uene8AIgtyyOU72MDiSafTedlqtfaNN8DzwmkpwMq8BeMtHB4eXsRisRcIfVZWZjwGkv1+P99ut6MgmoxqxjVSFEKLeDzeVVW1iu23wDfzaDQSiURiij+3W1tbN9FoVMezfQjYNU0z8d7x/vVIJPIrmUx+2NnZeYPcT8B3iOpKLpeT7VUqFfmoABWIARFge+XjDdAHOkAX+MHvQF4pPxKeCxtztM3E38BgJbaxEpiwQxLpPHLXn/NfAQYAVxYSIuMwPrYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjdJREFUeNqEUzuLGlEYvTM+xvcj0ShYWkhYjSAhhRYBSWGXP5FeSRUICFpZWOgfGBDSpwuyGCFgFRaLNUMwXZrg4iYBIb5nzDk3juwuC7lwQL/vnPM97h2l0WgI+9TrdaXf78em0+mbzWbzYrfbZRl3uVxfNE0bZDKZVqVSuW42mwdbo94QO3VdfzmZTC5Xq9VrhJ643W6V4G/GmCOH3JOBoigUu3q93qv5fP4e/5Mej0d4vd5bYIw5csilhlrlcDgo4/H4bDgcXjidTg0VBeFwOISq/mvQsixhmqbYbrcS+/1+Uy6XnxYKBYMMn2EYbzGnxkp+v18iEAjcgh0nh1xqqOUssfV6/Zwt+nw+2SoI93aADk8xaqilwUMkE/acJJVKJRGPx8XNg9nFaDSSHBrilmIIP6CBF0HruPHTrHcPY9iX3A92QBOFWnkdoVBoCWHIbm8wGIjFYiHNeDgOOCISicgR2GU4HF4yR4NlIpH4PpvNcnaSRC6OFXl4XYyzOtsnjxqkVjT4lcvlPmDGM74LJrmP+w4NaYCOLGqoZc/XaO8TAmMm/3fIIZcaauUIwCSdTuuo7MZ3kMXC5Au9Wx0jWNls1kilUjo11Do4a7FYXNEtGAxeIWmC/AiVNFyVelyymUwmf+fz+fNoNPoOoY/Aj3a7bSqtVkvgSxO1Wk0+KoC7eAY8BhLHBq6Ar8BnwAB+djqdHQoIp33v3W53X61WSVwA345m/qPBH3ZIITcP7oEaav8KMADyzRBm/XofAgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqEUj2LGlEUfTOOjhoVTDQrdpai2UKCrRax09YiIihYGPQHBFKKkB+gpNPCbGOzTUgREjSFCCHYJEMghRKL6MImAT9Gos6Yex4+GLbJg4POfefce+69TyqVSkycbrcrXV1dBSaTyfPdbvdkv9/HEXc4HF9dLtf7RCLxslAo3JbL5ZPQKBax0mg0sovF4tXhcAjJssxsNhu/MwzjcrVaXY5Go6fT6fQZcd9QkiPu5LPY3mw2K/P5/No0zRBVRFWmqiqH+MYdOOBCA610Op2k4XAY6/f7nyVJUhVFYQCqwwUOCeGCHY9HDtL8zefzj9PptAaGezwevyCyimpOp5NRvxz4f/cbHHChgRYzCKzX65SwjF9UB8gRd0AVuQOrK2igRYIHNPELq7hYLLJIJMKsZzabsV6vxzlISIMOUPg+ErjImklCGb2jX1ofu3sQgxAcuMHsoOVr9Pv9+na79Ql7nU6H6brOk/FVUdztdjOPx8PEen0+ny7egU52f2ia9gg9o4LX6+VDsx6xGbgADxoK71DyN63jrd1uN0U19ImKViAmHIILDbSI3AaDwY+ZTGaC7P874IALDbS8BcKXZDLZIeuOwWAQpxXJYoVWId2bqVRKi8ViHWigtS2XS5bNZndnJzfxeNyg4T2kSaubzYZ7DoVCRjQa/ZPL5d6Fw+HXFPpA+FmtVg2pUqnw/trtNn9UhBghSYgSLs4GbgjfCJ8IGuFXrVY7YLUKVoX3Xa/Xj61WC8QV4fs52b1zgi0cQojJE/cEDbT/BBgAoZsTVzzPeQgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAApCAYAAAAWNlirAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF1JREFUOI1jqa2tZQCB3NxceyBVBMTGQCzNAhLMycmp+P//fzsDEmABCoJUtjKgAZbv379P5uDgYMKQYGZm1kQXBEuAANB8TAlsgiND4t+/f6OW09/yISaBVZQsHQCsMHUPEsgdpgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAApCAIAAAB7iNSFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUCFtjevXqFdP///+ZGBgYUGhi8b9//8gWw4eR3AMAjT9unIbIdHUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/CPWindow/Standard/CPWindowStandardTop2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAApCAYAAAAWNlirAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF5JREFUOI1jefXq1X8GBoanQHwWiPuA+CAQM7D8/w8SZ5CGYj8grgTiDhYGTNAKxEdgOpAB048fPyZj08HAzMysg00HAwsIYJNAdtXwlfj379+o5fS3fIhJYBUlSwcAax55fnDttN0AAAAASUVORK5CYII=
*/

Added Site/Site_Z/Frameworks/Debug/AppKit/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;57;Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.pngu;65;Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow1.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow1.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow3.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow3.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow4.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow4.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow5.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow5.pngu;42;Resources/_CPMenuWindow/_CPMenuWindow7.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindow7.pngu;50;Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.pngu;50;Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded0.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded0.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded2.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded2.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded6.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded6.pngu;49;Resources/_CPMenuWindow/_CPMenuWindowRounded8.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPMenuWindow/_CPMenuWindowRounded8.pngu;53;Resources/_CPToolbarView/_CPToolbarViewBackground.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewBackground.pngu;67;Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.pngu;58;Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.pngu;56;Resources/_CPWindowView/_CPWindowViewResizeIndicator.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/_CPWindowView/_CPWindowViewResizeIndicator.pngu;27;Resources/action_button.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/action_button.pngu;28;Resources/brightness_bar.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/brightness_bar.pngu;38;Resources/browser-leaf-highlighted.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-leaf-highlighted.pngu;26;Resources/browser-leaf.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-leaf.pngu;36;Resources/browser-resize-control.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/browser-resize-control.pngu;24;Resources/color_well.png64;mhtml:Browser.environment/MHTMLData.txt!Resources/color_well.pngu;31;Resources/CPApplication/New.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/New.pngu;42;Resources/CPApplication/NewHighlighted.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/NewHighlighted.pngu;32;Resources/CPApplication/Open.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/Open.pngu;43;Resources/CPApplication/OpenHighlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/OpenHighlighted.pngu;32;Resources/CPApplication/Save.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/Save.pngu;43;Resources/CPApplication/SaveHighlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPApplication/SaveHighlighted.pngu;43;Resources/CPImage/CPImageNameColorPanel.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImage/CPImageNameColorPanel.pngu;54;Resources/CPImage/CPImageNameColorPanelHighlighted.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImage/CPImageNameColorPanelHighlighted.pngu;53;Resources/CPImageView/CPImageViewBottomLeftShadow.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomLeftShadow.pngu;54;Resources/CPImageView/CPImageViewBottomRightShadow.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomRightShadow.pngu;49;Resources/CPImageView/CPImageViewBottomShadow.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewBottomShadow.pngu;47;Resources/CPImageView/CPImageViewLeftShadow.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewLeftShadow.pngu;48;Resources/CPImageView/CPImageViewRightShadow.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewRightShadow.pngu;50;Resources/CPImageView/CPImageViewTopLeftShadow.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopLeftShadow.pngu;51;Resources/CPImageView/CPImageViewTopRightShadow.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopRightShadow.pngu;46;Resources/CPImageView/CPImageViewTopShadow.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/CPImageView/CPImageViewTopShadow.pngu;42;Resources/CPMenuItem/CPMenuItemOnState.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/CPMenuItem/CPMenuItemOnState.pngu;53;Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/CPMenuItem/CPMenuItemOnStateHighlighted.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.pngu;67;Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.pngu;70;Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.pngu;75;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png115;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.pngu;78;Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png118;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.pngu;73;Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gifu;47;Resources/CPSearchField/CPSearchFieldCancel.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldCancel.pngu;54;Resources/CPSearchField/CPSearchFieldCancelPressed.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldCancelPressed.pngu;45;Resources/CPSearchField/CPSearchFieldFind.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldFind.pngu;47;Resources/CPSearchField/CPSearchFieldSearch.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSearchField/CPSearchFieldSearch.pngu;50;Resources/CPShadowView/CPShadowViewHeavyBottom.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottom.pngu;54;Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottomLeft.pngu;55;Resources/CPShadowView/CPShadowViewHeavyBottomRight.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyBottomRight.pngu;48;Resources/CPShadowView/CPShadowViewHeavyLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyLeft.pngu;49;Resources/CPShadowView/CPShadowViewHeavyRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyRight.pngu;47;Resources/CPShadowView/CPShadowViewHeavyTop.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTop.pngu;51;Resources/CPShadowView/CPShadowViewHeavyTopLeft.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTopLeft.pngu;52;Resources/CPShadowView/CPShadowViewHeavyTopRight.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewHeavyTopRight.pngu;50;Resources/CPShadowView/CPShadowViewLightBottom.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottom.pngu;54;Resources/CPShadowView/CPShadowViewLightBottomLeft.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottomLeft.pngu;55;Resources/CPShadowView/CPShadowViewLightBottomRight.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightBottomRight.pngu;48;Resources/CPShadowView/CPShadowViewLightLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightLeft.pngu;49;Resources/CPShadowView/CPShadowViewLightRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightRight.pngu;47;Resources/CPShadowView/CPShadowViewLightTop.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTop.pngu;51;Resources/CPShadowView/CPShadowViewLightTopLeft.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTopLeft.pngu;52;Resources/CPShadowView/CPShadowViewLightTopRight.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPShadowView/CPShadowViewLightTopRight.pngu;47;Resources/CPSplitView/CPSplitViewHorizontal.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSplitView/CPSplitViewHorizontal.pngu;45;Resources/CPSplitView/CPSplitViewVertical.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPSplitView/CPSplitViewVertical.pngu;51;Resources/CPTabView/_CPTabLabelBackgroundCenter.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundCenter.pngu;49;Resources/CPTabView/_CPTabLabelBackgroundLeft.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundLeft.pngu;50;Resources/CPTabView/_CPTabLabelBackgroundRight.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelBackgroundRight.pngu;49;Resources/CPTabView/_CPTabLabelSelectedCenter.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedCenter.pngu;47;Resources/CPTabView/_CPTabLabelSelectedLeft.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedLeft.pngu;48;Resources/CPTabView/_CPTabLabelSelectedRight.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelSelectedRight.pngu;46;Resources/CPTabView/_CPTabLabelsViewCenter.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewCenter.pngu;44;Resources/CPTabView/_CPTabLabelsViewLeft.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewLeft.pngu;45;Resources/CPTabView/_CPTabLabelsViewRight.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/_CPTabLabelsViewRight.pngu;54;Resources/CPTabView/CPTabViewBezelBackgroundCenter.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBackgroundCenter.pngu;44;Resources/CPTabView/CPTabViewBezelBorder.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorder.pngu;48;Resources/CPTabView/CPTabViewBezelBorderLeft.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorderLeft.pngu;49;Resources/CPTabView/CPTabViewBezelBorderRight.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPTabView/CPTabViewBezelBorderRight.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator0.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator0.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator1.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator1.pngu;51;Resources/CPToolbarItem/CPToolbarItemSeparator2.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/CPToolbarItem/CPToolbarItemSeparator2.pngu;38;Resources/CPWindow/CPWindowShadow0.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow0.pngu;38;Resources/CPWindow/CPWindowShadow1.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow1.pngu;38;Resources/CPWindow/CPWindowShadow2.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow2.pngu;38;Resources/CPWindow/CPWindowShadow3.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow3.pngu;38;Resources/CPWindow/CPWindowShadow4.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow4.pngu;38;Resources/CPWindow/CPWindowShadow5.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow5.pngu;38;Resources/CPWindow/CPWindowShadow6.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow6.pngu;38;Resources/CPWindow/CPWindowShadow7.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow7.pngu;38;Resources/CPWindow/CPWindowShadow8.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/CPWindowShadow8.pngu;37;Resources/CPWindowResizeIndicator.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindowResizeIndicator.pngu;19;Resources/empty.png59;mhtml:Browser.environment/MHTMLData.txt!Resources/empty.pngu;31;Resources/FIXME_ImageShadow.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/FIXME_ImageShadow.pngu;25;Resources/GenericFile.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/GenericFile.pngu;34;Resources/HUDTheme/WindowClose.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/HUDTheme/WindowClose.pngu;40;Resources/HUDTheme/WindowCloseActive.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/HUDTheme/WindowCloseActive.pngu;26;Resources/minus_button.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/minus_button.pngu;25;Resources/plus_button.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/plus_button.pngu;27;Resources/slider_button.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/slider_button.pngu;29;Resources/slider_button_h.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/slider_button_h.pngu;37;Resources/standardApplicationIcon.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/standardApplicationIcon.pngu;25;Resources/wheel_black.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_black.pngu;26;Resources/wheel_button.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_button.pngu;28;Resources/wheel_button_h.png68;mhtml:Browser.environment/MHTMLData.txt!Resources/wheel_button_h.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground0.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground0.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground1.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground1.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground2.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground2.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground3.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground3.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground4.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground4.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground5.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground5.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground6.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground6.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground7.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground7.pngu;49;Resources/CPWindow/HUD/CPWindowHUDBackground8.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/HUD/CPWindowHUDBackground8.pngu;59;Resources/CPWindow/Standard/CPWindowStandardCloseButton.png99;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButton.pngu;70;Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.pngu;66;Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.pngu;77;Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png117;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.pngu;62;Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.pngu;73;Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.pngu;62;Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.pngu;73;Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop0.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop0.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop1.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop1.pngu;52;Resources/CPWindow/Standard/CPWindowStandardTop2.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/CPWindow/Standard/CPWindowStandardTop2.png

Added Site/Site_Z/Frameworks/Debug/AppKit/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site_Z/Frameworks/Debug/AppKit/Browser.environment/dataURLs.txt.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/CommonJS.environment/AppKit.sj.

more than 10,000 changes

Added Site/Site_Z/Frameworks/Debug/AppKit/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;15;com.280n.AppKitK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;6;AppKitK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;9;AppKit.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;E;

Added Site/Site_Z/Frameworks/Debug/AppKit/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/AboutPanel.cib.



>
1
280NPLIST;1.0;D;K;4;$topD;K;18;CPCibObjectDataKeyD;K;6;CP$UIDd;1;2E;K;21;CPCibObjectRecordsKeyD;K;6;CP$UIDd;1;4E;E;K;8;$objectsA;S;5;$nullD;K;10;$classnameS;16;_CPCibObjectDataK;8;$classesA;S;16;_CPCibObjectDataS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;1E;K;28;_CPCibObjectDataNamesKeysKeyD;K;6;CP$UIDd;1;5E;K;30;_CPCibObjectDataNamesValuesKeyD;K;6;CP$UIDd;1;6E;K;30;_CPCibObjectDataClassesKeysKeyD;K;6;CP$UIDd;1;7E;K;32;_CPCibObjectDataClassesValuesKeyD;K;6;CP$UIDd;1;8E;K;30;_CPCibObjectDataConnectionsKeyD;K;6;CP$UIDd;1;9E;K;28;_CPCibObjectDataFrameworkKeyD;K;6;CP$UIDd;2;10E;K;26;_CPCibObjectDataNextOidKeyD;K;6;CP$UIDd;2;11E;K;30;_CPCibObjectDataObjectsKeysKeyD;K;6;CP$UIDd;2;12E;K;32;_CPCibObjectDataObjectsValuesKeyD;K;6;CP$UIDd;2;13E;K;26;_CPCibObjectDataOidKeysKeyD;K;6;CP$UIDd;2;14E;K;28;_CPCibObjectDataOidValuesKeyD;K;6;CP$UIDd;2;15E;K;28;_CPCibObjectDataFileOwnerKeyD;K;6;CP$UIDd;2;17E;K;33;_CPCibObjectDataVisibleWindowsKeyD;K;6;CP$UIDd;2;19E;E;D;K;10;$classnameS;7;CPArrayK;8;$classesA;S;7;CPArrayS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;22E;D;K;6;CP$UIDd;2;23E;D;K;6;CP$UIDd;2;24E;D;K;6;CP$UIDd;2;25E;D;K;6;CP$UIDd;2;26E;D;K;6;CP$UIDd;2;27E;D;K;6;CP$UIDd;2;28E;D;K;6;CP$UIDd;2;29E;D;K;6;CP$UIDd;2;30E;D;K;6;CP$UIDd;2;31E;D;K;6;CP$UIDd;2;32E;D;K;6;CP$UIDd;2;33E;D;K;6;CP$UIDd;2;21E;D;K;6;CP$UIDd;2;34E;D;K;6;CP$UIDd;2;35E;D;K;6;CP$UIDd;2;36E;D;K;6;CP$UIDd;2;37E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;49E;D;K;6;CP$UIDd;2;50E;D;K;6;CP$UIDd;2;51E;D;K;6;CP$UIDd;2;52E;D;K;6;CP$UIDd;2;53E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;D;K;6;CP$UIDd;2;54E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;56E;E;E;S;16;IBCocoaFrameworkd;3;461D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;10;$classnameS;18;_CPCibCustomObjectK;8;$classesA;S;18;_CPCibCustomObjectS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;57E;E;D;K;10;$classnameS;5;CPSetK;8;$classesA;S;5;CPSetS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;18E;K;15;CPSetObjectsKeyD;K;6;CP$UIDd;2;58E;E;D;K;10;$classnameS;15;CibObjectRecordK;8;$classesA;S;15;CibObjectRecordS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;59E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;60E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;61E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;62E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;63E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;64E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;48E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;65E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;66E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;67E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;68E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;69E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;47E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;70E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;71E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;72E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;73E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;74E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;46E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;54E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;75E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;76E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;77E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;78E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;1;0E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;79E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;80E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;42E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;81E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;44E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;53E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;82E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;17E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;39E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;83E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;42E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;52E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;84E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;39E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;50E;E;D;K;6;$classD;K;6;CP$UIDd;2;20E;K;24;CibObjectRecordParentKeyD;K;6;CP$UIDd;2;60E;K;26;CibObjectRecordChildrenKeyD;K;6;CP$UIDd;2;85E;K;24;CibObjectRecordObjectKeyD;K;6;CP$UIDd;2;40E;K;23;CibObjectRecordLabelKeyD;K;6;CP$UIDd;2;51E;E;D;K;10;$classnameS;20;_CPCibWindowTemplateK;8;$classesA;S;20;_CPCibWindowTemplateS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;38E;K;30;_CPCibWindowTemplateMaxSizeKeyD;K;6;CP$UIDd;2;86E;K;32;_CPCibWindowTemplateViewClassKeyD;K;6;CP$UIDd;1;0E;K;34;_CPCibWindowTemplateWindowClassKeyD;K;6;CP$UIDd;2;87E;K;33;_CPCibWindowTemplateWindowRectKeyD;K;6;CP$UIDd;2;88E;K;30;_CPCibWindowTempatStyleMaskKeyD;K;6;CP$UIDd;2;89E;K;34;_CPCibWindowTemplateWindowTitleKeyD;K;6;CP$UIDd;2;90E;K;33;_CPCibWindowTemplateWindowViewKeyD;K;6;CP$UIDd;2;42E;E;D;K;6;$classD;K;6;CP$UIDd;2;16E;K;27;_CPCibCustomObjectClassNameD;K;6;CP$UIDd;2;91E;E;D;K;10;$classnameS;6;CPViewK;8;$classesA;S;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;41E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;92E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;2;93E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;2;94E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;17;CPViewSubviewsKeyD;K;6;CP$UIDd;2;96E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;92E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;2;97E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;E;D;K;10;$classnameS;11;CPImageViewK;8;$classesA;S;11;CPImageViewS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;43E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;2;99E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;100E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;101E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;102E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;15;$aimage-scalingD;K;6;CP$UIDd;3;103E;K;11;$aalignmentD;K;6;CP$UIDd;3;103E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;105E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;106E;K;23;CPImageViewHasShadowKeyD;K;6;CP$UIDd;1;0E;E;D;K;10;$classnameS;11;CPTextFieldK;8;$classesA;S;11;CPTextFieldS;9;CPControlS;6;CPViewS;11;CPResponderS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;107E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;108E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;109E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;112E;K;12;$atext-colorD;K;6;CP$UIDd;3;114E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;115E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;118E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;119E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;120E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;121E;K;12;$atext-colorD;K;6;CP$UIDd;3;122E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;123E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;D;K;6;$classD;K;6;CP$UIDd;2;45E;K;27;CPResponderNextResponderKeyD;K;6;CP$UIDd;2;42E;K;12;CPViewTagKeyD;K;6;CP$UIDd;3;124E;K;14;CPViewFrameKeyD;K;6;CP$UIDd;3;125E;K;15;CPViewBoundsKeyD;K;6;CP$UIDd;3;126E;K;15;CPViewWindowKeyD;K;6;CP$UIDd;2;95E;K;18;CPViewSuperviewKeyD;K;6;CP$UIDd;2;42E;K;22;CPViewAutoresizingMaskD;K;6;CP$UIDd;3;110E;K;19;CPViewThemeStateKeyD;K;6;CP$UIDd;2;98E;K;6;$afontD;K;6;CP$UIDd;3;127E;K;12;$atext-colorD;K;6;CP$UIDd;3;128E;K;11;$aalignmentD;K;6;CP$UIDd;3;106E;K;17;CPControlValueKeyD;K;6;CP$UIDd;3;129E;K;24;CPControlSendActionOnKeyD;K;6;CP$UIDd;3;116E;K;24;CPTextFieldIsEditableKeyD;K;6;CP$UIDd;3;117E;K;26;CPTextFieldIsSelectableKeyD;K;6;CP$UIDd;3;117E;K;29;CPTextFieldDrawsBackgroundKeyD;K;6;CP$UIDd;1;0E;K;29;CPTextFieldBackgroundColorKeyD;K;6;CP$UIDd;1;0E;K;31;CPTextFieldPlaceholderStringKeyD;K;6;CP$UIDd;1;0E;E;S;12;File's OwnerS;6;WindowS;11;ApplicationS;4;ViewS;10;Image viewS;10;Text fieldD;K;10;$classnameS;20;CPCibOutletConnectorK;8;$classesA;S;20;CPCibOutletConnectorS;14;CPCibConnectorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;2;55E;K;24;_CPCibConnectorSourceKeyD;K;6;CP$UIDd;2;17E;K;29;_CPCibConnectorDestinationKeyD;K;6;CP$UIDd;2;39E;K;23;_CPCibConnectorLabelKeyD;K;6;CP$UIDd;3;130E;E;S;18;CPWindowControllerD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;17E;D;K;6;CP$UIDd;2;39E;D;K;6;CP$UIDd;2;40E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;5;ArrayD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;47E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;46E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;42E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;E;E;S;26;{3.40282e+38, 3.40282e+38}S;8;CPWindowS;22;{{72, 57}, {219, 263}}d;1;7S;0;S;13;CPApplicationS;5;$nullS;21;{{0, 26}, {219, 263}}S;20;{{0, 0}, {219, 263}}S;5;$nullD;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;2;44E;D;K;6;CP$UIDd;2;46E;D;K;6;CP$UIDd;2;47E;D;K;6;CP$UIDd;2;48E;E;E;d;2;18S;6;normalS;1;1S;24;{{45.5, 16}, {128, 128}}S;20;{{0, 0}, {128, 128}}d;2;37d;1;0D;K;10;$classnameS;20;_CPCibCustomResourceK;8;$classesA;S;20;_CPCibCustomResourceS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;104E;K;32;_CPCibCustomResourceClassNameKeyD;K;6;CP$UIDd;3;131E;K;35;_CPCibCustomResourceResourceNameKeyD;K;6;CP$UIDd;3;132E;K;33;_CPCibCustomResourcePropertiesKeyD;K;6;CP$UIDd;3;134E;E;d;1;4S;1;2S;22;{{16, 165}, {187, 25}}S;19;{{0, 0}, {187, 25}}d;2;36D;K;10;$classnameS;6;CPFontK;8;$classesA;S;6;CPFontS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;10;$classnameS;7;CPColorK;8;$classesA;S;7;CPColorS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;137E;E;S;7;AppNamed;4;3072F;S;1;3S;22;{{16, 194}, {187, 20}}S;19;{{0, 0}, {187, 20}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;138E;E;S;19;Version XXX (build)S;1;4S;22;{{16, 222}, {187, 22}}S;19;{{0, 0}, {187, 22}}D;K;6;$classD;K;6;CP$UIDd;3;111E;K;13;CPFontNameKeyD;K;6;CP$UIDd;3;135E;K;13;CPFontSizeKeyD;K;6;CP$UIDd;3;136E;K;15;CPFontIsBoldKeyD;K;6;CP$UIDd;3;117E;E;D;K;6;$classD;K;6;CP$UIDd;3;113E;K;20;CPColorComponentsKeyD;K;6;CP$UIDd;3;139E;E;S;9;CopyrightS;6;windowS;7;CPImageS;8;Icon.pngD;K;10;$classnameS;12;CPDictionaryK;8;$classesA;S;12;CPDictionaryS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;133E;K;10;CP.objectsD;K;4;sizeD;K;6;CP$UIDd;3;141E;E;E;S;5;Ariald;2;13D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;6;$classD;K;6;CP$UIDd;1;3E;K;10;CP.objectsA;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;103E;D;K;6;CP$UIDd;3;142E;E;E;D;K;10;$classnameS;21;_CPKeyedArchiverValueK;8;$classesA;S;21;_CPKeyedArchiverValueS;7;CPValueS;8;CPObjectE;E;D;K;6;$classD;K;6;CP$UIDd;3;140E;K;15;CPValueValueKeyD;K;6;CP$UIDd;3;143E;E;d;1;1S;24;{"width":-1,"height":-1}E;K;9;$archiverS;15;CPKeyedArchiverK;8;$versionS;6;100000E;

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Browser.environment/Aristo.blend.sj.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLData.txt.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
/*
Content-Type: multipart/related; boundary="_ANY_STRING_WILL_DO_AS_A_SEPARATOR"

--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-error.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABmxJREFUeNrUWV1sFFUUPjs7u9vttvRvZ1sMygJCSynRF3kh0UQfePGFxESfTEx80AQlEEKMhtlMlRcl1uATCdF3XnzAmBAf1JgYf6KILaVUoD/Q0h9Kf2a2uzu/njMz226b0s7cO5B4k5O72+6e8333fOfMvXdjjuPARiMWi8FWY6hre/WljKYA/yig9Qb9cOeNyQ3/LvIg8NdDbn5+j5Lt3gGigAth2+EdCQKYtgMPBu8pC3/fhjDEIieF8OWWg0hI2gax4bug6wazr3gyAVmpCRz0N9/PR4yZVP++Drm5Z5ciSQ3gTM+BUSyvpI5lWLEKiLoJktQCDvp92H+HmRgTqWt7O+SWnt1KTmoEe3YOzGKFi1BVy4ZWAtGxISe1IrHdyhwjsdCkru5tl1t78kquLQMmZshcjoDQKjPQ1TKI1hzkspSxvPJgYCQ0sVCk/ny2XW47sAsJNYAx+zBiQqsZ01HKovPQI4bxZkMSC0zqjz05ua0bM9SaAX3mMRGqzZhWxkbqEbMx7uz14MQCkfp1d07O7s8r7a31LiEjBCFq1TfnizCzrEOuPgmdLRmv9Qck5iCx9mwzOBh/enA0EDFhqw/8skuSpa6dSq6lHioz81ChFbRsXEUnkF1dMsA8+iZ0nb/ozn8tGoG/S3EoHsWl+ITDdhwZDexNFnXTTP2cz8q5zp1Ke7NHyCiFl1z22GnY+9obEI/H4enDL8K/+TzYX50LJUVvIeehvQ0zhnjuD22esdijtkk/5SX5qa5nlA6Uiz63AHqJrYZSl36ERklySVmWBcWFBSgdPRy+zHDblkynIInEplDOk0PjhZdGZ3tDyQ/Tq2zHJ3wZu1ylGE5ytZZIJEAURdwJCe4cJ98MflwpIg7CQ7gIX2j5WZgVZ3EZHVXA4ehy5ZkpaMhm17wnkKxd0UY8dYjLYqkpC7+jL5fBRMnwjNIYtuLunlVS4yNgsWx6awbhshwApkxVJcczrKlJN9N0lKG5MnoHBE6fhIsxUw6uqGdcADAzVfnSbN0bx2cP50IRLmZStCIWn1Tg7tgaUg7Jj9OnxZ6p1S7FM4S7o2tIxSbG+bPvZoqlplzp2dxFbd2fAEuvuK1d1zTQp6e4d4YeLmb5ecapFVgaGYHUgR5QsUlw+3NdMtaUSd3Ptl3jHdrIHch2HwDt9q1I/JEPk7Wmouh+NCojHhl9bCQSfxZzTUXV/ahBDFwD9Z+r7hyFP4vnORVF96OxcOU716IaNvNzyoZIut/jGB4uVvlFUFMG+hkuGaAhkAzu1DvTCUjEYhHUFKv8LM94xq1kPXR/8iFI+/fDg+FhGDj7MXQby5x7P55tEq0omsWxUz8oK/Dc697Jd+cLhyDd1ARLx99hv8mlwyZh2oTUIw+Ji7bTN6aVQEikkJfAdrBD6zxyBNLpNNTV1bnzvpdfYfZFOAgP4SJ8oUn1LuuF/oXFvknD5CJWGbzuri6dfGku/XuTixDhIVyEj+U2ST1bMgoDC0tIzIBYMulJ0e+IQW3o5HGY/v6Ku5ml+caxd0P7oLgUn3AQHsJ1Np1QQ1+81Pw+1Xg6lVC6tzWc6IgLYJbLXDXGUkMiSncKe/jgktb3acUo9NZ5hM6UdObLTJUcnVpUwWpsOLE9mQL7CRFzZYvxJgwLbqha3zndLBRSomptcWcS9NpZJYcnlzSwnxCxFUKm7RL63DALZ5KiGuSxKYSIo5Lj66raN4FSEFLYPLD4q7elURr5Jf8Uh+JR3I8ScXX957h/IKgS+8KwCu9pKtiZx5OxlQxRDRW1vi8Nu/BBQlAtCL4JEBjiqhRoQNP6JuxoM7aSIfRL/inOaVFwJbeR8XS/lT+ts6a344Lck8m8v4N2IJwZowzFscvdw9cDxeL5i5ZNV8qL7g2mb6fiwhqwn5kWt/yISML/DlkcA184qmmNhzKZt7oaG0EwTfb9nCjCkK7D78Xi19/YzgXyj5ahQzjti73DeLCr4jCk6LMptDrftqG1IoDLk1pRaoLiq7qPIMxhRfAdJ720fPub41zGl1n/X0t0qetbyQ7oWoygtksI5BLOP/grm/ZXOfBJgnygFdFm/dcbZzPgnX6YmhLWyS/lE0j4C53y50TIBmT78qJEV/zZ8MlVauW3XgSPxM7RKIQai9XMVQt8hVFjds1s17yvtS1JiQzBa0nCJu+Z7mi2eM8nv//z+E+AAQCtbACM76VJFwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-info.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACUpJREFUeNrUWmtsHFcVPrOzMzu768d6/fYmdhLnRZzQNO6DqkEpbSSiqK1IhVSUQqEKCooSUSFVwA9EVX40QuqDgiCVgqCQJiK0qJVKKKSgJii0SkWbhyDOy/Hasb3ep/c17zsznDuZNa6x453ZTSSOdHzvzOy9c757HvfcM2Ysy4K5xDAMLERPH74Ai1AMeYvDG5CXI3fNej7m8Fnkk8inkKegSnrliXUz/flkp+QHl2Ra5ny3eeSdyN8IC9yWrpYQdETC0BgMgBDggPeztgB0sRSd9Koa6S1KyuZUXtyXnJZAUsmfcexryEehDuQalGX+D6jdyD9cHWuJ9XW2QCgUAFExQNQMSIkmqHkJiGkBXVRqAJzfBwHWB0E+CP2xMHx2hR+KorQtPjW97VqisB/nehb50G0FZRpGpbsS+Xdre1sH+7qiYIAPMpIOpekiasO0gRDEb2JrzrISHwJj8Q/iAg7bAOeDJsEPK5Z0wLKu6PLRRO63VyZyu/CnTzpmehtA3dDUNuTDg2uWRKORRpjIK1BUCMiaOaOVBccjk0/5L0Be1CFd1NBcWeiLtUM4yG/55PLkaXz8GPKHtwGUsQ+bn9x/Rz+r4/ChRAlk1bDBeCWCypfRXIsyA3mJQDf6492fWdp1+t/xE/j4W46/3RpQu1798Ptrlrbt72xrQVMzIFMsgYY2ZllQF0JcoBPUuKpDR5MAm+9YySfSuV9fvp4O4uMDdQf11M9P7Vze3bK/LdoMY2huBVFDAUy4FUTQbycQnNjAQxcu4MX41M8c/zpWN1Bf/+mJdaZBftkWbYF4DgGVVTCqNDeDChgfg3w2B5HWKMSW9QLLsouOkw3TXjRqmnev72dPn714CB1wEB+NLDbWt9gPvvry31iDkCPrV/UG02hyuaIMmk5sYavh0YsXYWNUhb1bY3YbHxqqeqyq6ZDJi5BTLRhYubQF5agq1DOLZRQ7X/jLnlV93b/gI60wlSnhyrkzuY2BFGz/XD/wPA+apsG7p4fhjNLhag6OY6GnrRGKqSTEJ1JPHHnmi0dullHcFNTjP/4TjyNH7ty0oWcyK4GCDuyWnvl8I8S62lEwDgj6SSqdheffz7ueJxTkobOJh7PnLlxGAdcd/d52w1OaRHTtyeW9PT3TuI/IimpvpK6FCYVAEATw+Xy2L/n5gG1abkmUcC8UOOjuiK4en0rvwFtvegoUaMPfFJqaIZUvg67rniJZrqRCTyczYwH02jCI63noOkyjHG2RCJCx8d2eQD367O97AwJ/L2Y+IMvqgva7GE3mRBhwklk6RwITWEIMT3OJhgJNDQKmXdaDKF+UrpkrUERTtzd1dkCphEJ41BKlTFGxUytqfrSdQJBoAZ7nK6A8ra0tbHIq+RBevuEOFNHvZwMClGTF3gy9UiKvVPJFu01hjlfLfKKkYm4Ypv6+xTUozMbXGBYDmqp6cuwZTZWZGdO1QZX0mjSlIQt+zpbPtU8ZhrlCI5a9t1g1JHfJMnxKU+mybod2r0TnIEGOLnS/a1CmSSLUTHTi3Z9sTZWInRkEg0EoY8DJlpWa5mNMBmUyUFOkyRWozXteYVG9rKbVZiq2xmkmOpWHpsYGuJ7M1zwfjaJ0oXFb4FzlfqcOPG1gxEMmdvitla+nCzfyQARXj/l0DXPPm5jQwj6l6yWi6RF6fLdqPDCNpUs2qEnco2rVFN0aDI36pV50DYoQ9SrR5bto9aiW6EfpWkaGC6NpGE7jnmfUBsrP+FFTdO9UR1yD0jX1qq4iKJOtKVrZ5jyUsLkeRDWlqRpNDq64B6XIp+VS/iu+ULRmk6krYbYvFXOgKdIHrkEpxfS7xenmlyPhVjzlmp79ivpkITEJqHXgMENp7o6Br4qT70KRj/ExkE8nDDE7/lfXoOInXr+66pHvnDU1eSMtYHr1K5Kdgr0Pr4eVS9phZDILB4+dA669x5s/+f1A5DIQVfn7+Ad/mPJy9DB0uXRIyqc3+sJtQPcsL9ra8+gmeGzroH3yvQezk+aGELx4/JonLfE8C+XsJGhS4ZBTQnRfo8gM/eNX+cRoymdRQKZ9DnLLW+9bD9FoFCJ4DqLtA/eu8zQPHt5R7QoU0hPDybPH3/BceClPDBVUqfCSNJ20VW86ZuiGR1JlW0t0PG2vZyXXc1ALoePF3BRoYv4FJTdRrqVEZmXOHT8AbOBrUX9ggPUFXSe4Pzp8CgNEAB7ctBLePzMMz712EqOp4crsOMzKjXIOCqnrH02eOvKbmqtJlKLrt24OtC59L7psg0DLw+Q2hXgbEIZwwW9BNv6vkpyOP5C/cOKTmRX3Uk2ardHWu3Z8uzm2+kWusR0UjcyYxa0ERAs1oYAfsiPnDSJO78qdeed1J0e+KShf1ZH5n2+9mh+/tF8tJCHg9+HOztrVJTx31Z3pvCyLPojbmZRLgC4VfoCAjrbdt7Mqu3XzgUDKffz28wZ5WPQFxp6L9g2wFpqGqqp11RhNg2hAYU0ZMvEh3VTK3y2cP3aw5Z7HlWr3SsbtN1+kcMPah77EhiMHIrFVjVagGRTlRh2iFnD0nRQQrRGCPI1ZyHCKlLO7xUsn3mse/LI0U3j5+L+Vsbp98228c4dYOvPWm0Lf4LWcQQ42tPcOCE3toJt+OzK6BVfxHTvsAwEtNwZiZuIjLTu6Vx0/dx7fp5mmu2ymGk0xDs+9pgvSGlz9had8XGhfuH1JJ9/UAZZfsAuf1FQowLkgKxqhQOyKLe4/jC6CWkyDlJkYNzXxJfnKSfpBO+sEBcvhGQVVrr1GP8YJJhVm5/TpkTrCsHy3v2P1I0wgvI0TGgb4xigEGtsAr4HhgvhLfubrPCZuYOkyWCoCKWWQs3hLPGOp5eN68tIfMQOmOR09AOoOKNPh2X3zBiZvoHyORirMOUz79N8M0AGgmW5lyO20ZfxCP8MJazEV78OJorimYXw/P2t6Fe+LKFIOTDKKAC9YRBtxqq1p5GnqOvSg4FTEiANQd/oVNuvmUwtlHrawmFlZRJlEpi+dpFpEbpjzHiqciJx3gCSda61ue1wdzI9qAbUBAUdzIRpPnHsh5x47p8BEtSA5YEpOX3EWpgLwlpnfzQJFxTyZWWCZWWZaAc7OGW85AlaErJiVNUt4a9bRwnWg8FdpWvONZmanLHPuz9efb975+lDFfffm9/9O/xFgANbLi7lf3e3qAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/alert-warning.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAADUAAAAuCAYAAACI91EoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB/BJREFUeNrUWVtsI1cZ/sbXxB7f4ji+29m1t9lsspulUakglUAUJJQ8AYpEFwkhRBGIF7SVqJBBlZD6lKdIeSgI9gEhIVGVB1SKoFqxquBxoVVp2a2yJI2dbLPO1beZ8cyc4Z9xsl3HdmI7zmZzpE/jM55z/vOf//zf+c4MhyZl9earOIEySfiQIOCEi6XZTU3Temnjc4S/WV1BXi6uV+n3LOFPJ+mU6YQnbYDwpm/sq/zQZ78J/9Wv2aj+OiH92J3SI9ULqIy96hqeHHCE/NTrCvr8fXBf+LyNMTbfKxvNcJLL7yoHvOg+HwPYe9BYARznhCuRgrSZnBY2Pp6hZ/78+CLVAzBNW/CNPmsGdw+askQ37kNTV+jPj+CMJ/T/5+k5m9Yje4+ieU7pkToervHh9BQfoxSSV6kuEljtqnyC/kEZ7sR4ipbhSz2w1YCTyCmeBjvHxyLkQJaiVKQosYfQlDI5moVrOKgbytDz0V7n1Ek4lfGcuxyxe0o0+Dw5Itc5BaZAkzdhsT6A78LTTiKTuSfdqTThuicVAqo5MLVC91gjGC3D6ho8KR/6feEXqM1zj8Gp7kCBmB+4OGkzaasUoC0jKvVR2odK/28D0jKx4bB+a4Ham3uVVr2M1IxjKDHtSTqJD7KAKhqDbw0JmnQf/JAGd3J0gtp//0lbfrShavPuJO1JwhLlzO7ewNmhMEhEXIYnGaSq9opOMifmFO0hHUEhavaeH0s5PSJYlfYjViWobUCm5x/AZs3DmxoPUl+ZTm03Qy8URZR2vIw3GaAokXKQy/q0fDpBTMMf31rHck7EcKwPX58OwmTiPrXFiEyEZfjPT2JrUbtOt35DWDxVlU4z87PgpUmnlbSdKhGFa3Ld/7974xP8+verD+sVQcW3vxGq76O6BbN1CYGxp23r79+e5zjMnKagNfSdP8nTbOvkIDXkzT9vi3V9G/WD+aVWwSo5DERt4EPJaZ10To0oaGkthK48Y4Zwl8a1Q0tJacgbjrPW9a3XG3NLIYoncqnchS8R1fvVVbztNJy65olfmPINSVDLaySJKEqq2oCBAUf9AUuvN3kOShWqsA6ez8OfGk+R0nipt+zHtKPAq6o254vTOam8SGlUaknb8Yizrm+j3oriZSKNMpFGgtf1b4bsRNsYSwO6jVQm8NTliNOWgyJu0JFCbknb0WA9F+n1lhRP/SjiJqzsfwhdutq1LuzGKUPfDQ1badl9bMzuYcoh6Ktn0oh+CD5MaSgi9ZvDUEIBP9idLuzYKT2JI+NXbGbxHphIya0qh6qG+BAOOMWOUBqkC8UCULwHf01pkC7UzD1QFKwVZtzh6HQgXIFSpL1Hbk4OjyLoFGC11Mzo1yAvHtlGJw2lvA6fdxMD51ITZPc7h4ypAZ1EytB3gwkvWIGiJBWbUvhB0OgQjbpr+aRfqd6OhGLVMtmhDZlUCNn9RSe6sG2ndIoNXkinPI77UCsbNKPyESp8HwpioX6jX+NqHEfaaEf9q8I2HKYVhEbSEa12Sj6GU0SLB0A7IjLBuIlmLwetKhypwOvyKmyv0bl+7aCdJhNpFFYRThhjuk5INxlbA9pS6aTC56LjaaetugS5sn0ohTel9cAenQfQUTuNSEgRCjBXlhC7nLaptPzbUentLL+rvM/zQjQmEDmsEzlUO5ptHZMjVvzkx5/BM6O2jttCkSEX1hEOF+GNBNvShUeqdPq5MJQkcthepFwq1tZ7hyVk38X0hAlakaIsd96eiSWyv4xgYhRbOU1X8W/T7Wq3Kv3aYDI0FRzYhFrcMKi2PXKohyYSk21QLkqVrtrr0VJLm/D1UX49FT9SFx4WKaJQzIXiFqg7OTpVCLW3GqdUVEkEt7OGSNyL1TvI0PB/q3916jRSmdjFaMTNZaGUdmubYqf5QJAkhuuvSXj+ZQE/WhBRrrCu+tHtK6UCbGIWycuxQ3VhK6cMfRdLCpB37xvUSlTUFd5+V8V7S7Xj/Z2shr/cVrvuy1Aau+uk9HfgCXha6sIWRw/Mn5sI28yFLInLUtdR0uHy1x89eL+z6770/FIrlJ/bWYSH+1u+LzQfdOjWr16c8Ue9r6TPFVDN6xutdKw3i8mkA2Wri5ahhqlnPfjWF8ikUD7WG1ONiMMzaIXABkLlHTouA+/Xna4frfz9l9+jIzQ+vPLcYMpTvQN5e7s2Q8cpZMGSiMHk5sFKJISXs8cnHOJ0q9eLsuMi/vXO1hpVR+huqenbJP3TSnx0KOW3rUHa3DtWHLfQ+JXlld5SIfWpFgtwO7JIjCYjK//NZ+juTxsidfO170ZpAu9OfcXpNOc/glIoniqFtxMtM++AKTKCd/4q6Bvx2P77wn2i4BRFe/n8lUGnXVgl6txTDsaHsicUBmlUYCbBm54YtNH4f/78D25wehz05ceNjc2aJFkZ4/sFUuEFSkSl9p3xSS80TpXG63aVUFWUS7ofX/7hDWaZnZ01LS/n+7Pr3ncji9qXPBE7HA4nzkpRTHYsLe5iNV/5t8Ox3U/+CJZ8Pm+2WJjrxs3cm7kN78gtl/WLJq7/zHhFC0rcLj34x63/7L5hsfS5yJ/qQ/az2R3lt27v3FBk+Q+0K5vOilMcxzGL1Vzudzh3uL2UsQQCAZWWX9HKaauOPn7L7Ky9uTlDTpHg4VRiCEFWuGIsFlC5faLg+RWLyeQ12e0ShzNWJMmuMbbDSqWE8sEHr7P/CzAAN77WZZ8SpakAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2rt3L5OVlRXTt2/fmP79+8f0//9/MI2M//79i5WNjY9sxoULFwBPdEPtOkpElQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADZJREFUeNpi2Lt370yG79+/z2T69u0bA9O/f/8YmP7//w9loRF///7Fw8UphmbohQsXGAACDAAFaUdSlQta6wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUeNpi3Lt3LwsDA4M3EFsBsQDL////faWkpDykpaUZ2NjYGJiAAtbi4uIMf//+Zfj27RsDy79//3iBmAEGQFoYQBguAJJFUUGmAMhK2muhiRnIAqAg/Pz7928GWEAxAWWPPn/+nOHXr19glaAg3Pz69WsWIDYD6uADCDAAuvWepGgKK5MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHtJREFUeNpi3Lt370wGBoYPQHwMiLeyWFlZMfz69Uvg6dOnXs+ePWNi+vbtG8Pfv38ZxMXFGf7//2/N8u/fPwYYALJ5WYCicAEQG10FWQIgK2mvhSZmYAjAAujPnz+gAPoMVgHivHz5EqTiOMuFCxdACj4B8Skg3ggQYACEzZ6gbOTDXgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUCFtjKi0tZbK0tGRiZGQEYxCA0TCAzmdmZsYpB+NLSEgw7d69GwDfyAUd/UzAZgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAINJREFUGFeVjbENwkAQBOf2z+fQEdLJuDIiS9RgiQhEIVT34TdBRPACAd5wtLNr27YFcAVW4Ohmds/MyzzPRAQu6bwsC8MwAOBmdogIXnFJSOqBmf1odKCUsnfjo/IGSil7le72P+XrhiS1cRxxdyQhM3u01pimiczEJd1qrVFrPQH5BFHNEV7zubdvAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIhJREFUGFeVjbENg1AUA89+X1BSRUIKizBPZqAiVSahyhLME/SlvwFNUoUmCAWX1p2tYRjewAuYgEfq+551Xa/Lsow557Ak6rqm6zps35IkAKqqQtIl2eYb22zEVvwQh0VEnN2IiB0iIs4qh7f7yn8btokIbBe3bUvTNJRSkDSleZ4BMvC0ff8ANOUZTP6A0qkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHZJREFUGFe1kDEKgDAMRf8QcoNSaW/mJHgJJ8WDeJSep0P3LqWtyaCgo2DgLT8vCYRCCAxgFSbBU+99d84t3nswMzSYrbWotSLnDGqtGQFXqQHlDrT7MD4GevL/kV92vB+USimGiG7jiDEu+lcN1dhSSiyMIgwn4zCUe/hU7cUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUGFdj2bt3738GBoanQLwAiJtYrKysGH79+iX99OnT6mfPnjGzfPv2jYGRkZFBXFycASiYzPLv3z8GGACyRVn+//8PFwCx0VWQJfD37186aKGJGRgCsAD68+cPKIBeg1WAOC9fvgSpWMBy4cIFkIIXQLwMiGsAfrObQPFrrDEAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUCFtj2Hv8MsOLj78ZHr79QxK+/vw3KRgAe89HUPF0VZwAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiePHxN9PPP4xMDAwMTAz/gZgRiWbAjr/9+o9TDgsGCDAAAzMJ6g6yR1MAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABpJREFUeNpifP/1D+OrT39Jwo/f/SEFAwQYAODeRsIBHh3QAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpi2nfi8vuvf5gYwGDQUwABBgCRZQVstXD5TQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiev/1z74Tl5kYwGDQUwABBgCS+gVsJvl2BwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpinrNoJROvgAgTAwMDE8N/IGZEohmw4x+//+OUw4IBAgwAAtMHPgLjCOMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpiXLdl97t375gYwGDQUwABBgBZowUZrYKqmQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUeNpinLNopZCQMBMDGAx6CiDAAH9oAlBHNVNpAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpi2Hfi8osPv5kYwGDQUwABBgCHXwVdauGiRQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAAZCAIAAACUxWgrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUeNpievHh174Tl5kYwGDQUwABBgCJfwVeVOih6QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/buttonbar-resize-control.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAKCAYAAAB8OZQwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF1JREFUeNpUT0EOgCAM6/r/MzceoB/UoKEyJihNljVtRwNT3tQAn5T3zomGckO+YcFp1vWAwqPeUAQtRPyg0MCqLzk4/VqaPfDnlvPRRbeXqh5v1lHq/MB5VT0CDACNvzl3e/9MRwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAL1JREFUeNrEkrsKwkAQRWfDsF0kVYrd/7AwPyCKHytiuaUK/kZIQjrRKq+Ndwpb8wJdOGwzZ+7Msqrve5p72DnHuPdgA6IRzgNcwZmRfDDGbK21pLUeNOu6jrIs2+V5HnDXdUkcx9S2LTVNMygrpUjq0zRN2HsfosHkfcWTZJoji7Ncln1/L4s4Z2zx/jj20td+VVUVMvOkfcUL8FMuRVEQGtBnim9IndTDu0nyqSxLBms0XY0IfoI7OL4FGACS4bkP/RnUSQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMNJREFUeNrEkkEKgzAQRdMkZO9CDHizrgpeotDS0t6j4Kq38DiVSHUZRImxfwrtsmpcNPAYGOblEzKbcRxZ6JFFUSjUE9iBdIbzADm4SiRfkiTZa62ZUmrS7Ps+NcYcqqoSchiGLIoi1rYts9ZOypxzRvNlWWbSex93XTf7nQh7V/Io+dtYcsj5s+ycC5NJDEkmb13yahl/Fiw/sXKxEGKRSB5H6q2ua9rZT/MnNEfz8HJKPjdNo8AWl+oZwQbcwfElwADuQbxR1tcjhAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUpJREFUeNqckj1Lw1AUhk/Sq7WU2LpYKRQHPyq4OEiHdhdRHF39Qf4aRZyEDoIVhYLgorgoNv0wFNRU0/Tek3hOanQItE0vPFwI75M3595ovu/DtEscn9QE7ftEmchO4LwTNeJceJ53sFZY2i0u5yGVnB1rOu4g+/jS3Ht6besCESuLuRy0HAD15Y7/VF0Dzj88mxWWjQ+X51YTzYkEV7AnFCpg4i52BCoFUsWX2RNKIUiJwYP65UXeapkZTYuG+UoLK8Xu5nb5LWgmj+T/5vv6zUbX6qzqCRFtkgPo2fbd+lbpVw6aJckyCKQzCzBjEHOpiOx+9yCZNv6y7A2b5bB55/CoSlt11KxhVoUzM7FPm2dGnPK0MWhWtuv2jYQQsa6JPZ3+lKu22YC+04dwhFFwjvPkXQv08MzqNAVRopfOT1D8SdwSpz8CDAB8Kd6AIP4Z1gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUVJREFUeNqcks9Kw0AQxifJJiaiVMFotBWLXjx59OSTeBJ8CUFR9Og7CD159im8exFUBBWqpkFaa5Q2+yfObKM95JCkAx9Zlu+Xb2d2jTRNYdJi51fXDn6PUXuoegmmjWqhzphS6nRtce6guTQPrs0KyQEX9aewe/jc6VlMSrnvTTlw/9YFLmQhbDMLap4DxBHsh724dJ/oh8Ewoa/PhBR6o2oRx6QQelG1iGMC++Rc6Y2Xxzv4/IjAMIycma7UX25AsNocJSOH8Dj54fYGwtc2mFZ+6pInsLEZw8JKI4N1MtcLKm+mBsH6LNiul4OHPzE47vS/l7hRcnZFW9s7xYPKvOKvZzHJtKlnKcfJlaYtdbKIuEh80zRLg/ik6diRiQ/kot+PIUnoBKpQ5CM/ci0mlTyJv78c1C7+NCgR/I66RB39CjAAFHjbsmAj4HkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-mixed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUZJREFUeNqckrFKw1AUhk+Sa2wFcaoNLVUpFTs5uugDODo7CX0JQVF09B2ETs4+hAhuOggWO1Q0bUpxENQkvfcknpMYHSom6b38BA7/l//+N9HCMIRplzi7vDbpeUTaI1UzMDapTToVQRCcrNas/bXlChRnzVTS9cfVzlP/4PHZMQQithbLZRi4AOrDTz+qrgH7H3p2i+HSm8+9VaaeSOII5oRCBay8ixmBSoFU+WHmhFIIUmI06N7fwutwANof5pB2ZakOtUYzTiaO4N/ku5sr6HU7oBtiMkmOYX1jE6yVxjccJUuCZTQozC+AVW/CTKE4Afuf7zSf+/EyFyfLOHlreye1a+JVSWdW7tvmzohT3jZGyWrk+17JECLXZ2JOpz/l3LFfwHM9SCr8J/axn7i2wACPR8O+Sdqll1oZgh3SBenwS4ABALu11aydNvk+AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAiFJREFUeNqUU1trE0EYPU0n5tLdtcYmaVPabCNaQdOElJbSkL5Ia7F4Af+RbyooBEHQCl4exBfxgljwRSSxoC8WqmJTqmJra6u0SchlszO7zuya1kIa9IPzsN98Z853hrMtpmnif8oX7ve1tJLzJqO3yaVHrwnvTXGMcrQ3IzJGoR5P0M2tLVIrFZ3EMIzTh3s6J/vDIXhc+5qqptNpVEHI/u4I/EqbRBhjyUAwiNUKQEvansS3mZd4/moWSpeKvt5uxAbiAQcny3nNhFajYJQ1xMqXz3hw7w4kfwiSLOPsmXPgG8uEch8Ce1WtpuHWtSsgykEQdxumTk5AUhSL42CUQv+DG5cvoJDPb38L3J++joJuwiW3YzAWhRqJWH3Bc1C+lq4zrK+u4f38PKavXoSm6VYv82IGHz4twHvAj4C/A6PJlNUXEDxOthV+/VyH3BnGRr6Ih3dv4utSDjPPnkDq6ILL7cHE+DgMnon6RoJHKOUqHCE1ghOTp5DJZvFxIYfc4iI8viD36cVYKgmvJFlz9RI8Yinr9oMdPRZFuVLFu7k5gAfP4XTiyKE+9PSq2zM7ZEvZ3r9eA/EEyuUKlr4tQ/G6MTg0sut8h8xAROSEh78rMTSMSrmEaCxu+TQobRhVsXZR06pyKyG7DkdSY7ZCgwww+8GKImHZtZVlVLnXuoVmEHNinvNmCTPY040f3wnHML9U+Ye/ssDxhuPxbwEGAExxWB6CMBpMAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhNJREFUeNqUk01rE1EUht9O70ySaRMT7CQTU2tiYiwxftdU0F/iRsW1exeidNOF/gFRChVEwYJBUIKgWwMiFqwgilgCtUmIbdIkte3MvRPPnWpDqY164YW555znfHDP9N1+WsT/nMmrF0f6+tmtjuCXmeM4GtlukC6RYr1AITji2VNWvdHQrNWWV8ITB8LBa/FICF6V9ax6994U1sG0PbGDMAIDBhNCXPF5NHwu12FzsSv4YfYtXr2ZRSAax7BpYGwsd0jCRrXR7lnxe7WMF4UCBsMx6LqO82fH8cMSBuM0ByXYFbRtC/nHj6AFDTDvAM6dPuEmaK7VoQjOIRNIzUzfQbvd2rpLFfIzWIMKjz+I0cR+RPeZrl1yCqc5bdvBUm0JX+dLePLgPqwN7treFV9j/lsFeshAKODH0cwR1y4lOYI3KzQay/CbI1gh8OXzPMoLJRQJHhyKQtM8yJ08BgedblfEMc5t9yMcjeFMbhzvP35CabGKhcVn8O01aU4dxzNpeH0+N+73kRxzK/96ong8gXXLxpd+eu8OoKgqhiNDiIQjWzFd2K0sqI2uI5VMugkqyyvQVQWj6fQ2fxcWYELwHVkPp1LYmJtDMpGA43RI4o+rKtuu2dwyFEXZ5sxmM5tBDt8B0krLtmsKLchUs9mGZckOnL9Kxsl44qaZcMTN9mpLI12gpOY//JUV0kPS9Z8CDACMI0E9p2np0QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image-selected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgtJREFUKFOV0V9Ik1EYBvBzNeiyLrsYddGoJYmmIkl0oYktikzFnLN0xpJBXxYtmqE2dY7JliuGRovQTc3J1FolbWGpodUMYQ2K/tk/MRwEFXkRXTyd98A+GOKyix8f3/s+z+HAYQDY/1ivVCk3bFYP8u86Zh+dVnBt3AKHVNoDk8jQHPm9aVcRNqbn3WK24ce2QOQtYkvLePf9T0pSixPbNDqklxlRUGuaZm1DE/GpTz8R/riMsflfq7J472JLQSl2Vp1F6YVOtPofxZnl5jjuvPmRkudhDOq9ZciokLDHaIHv2QdQjzX2hTD66tuq/NFF5B6uwY6SOmTXmNFx+4mYU4819NzDUGxJ2Kc/hd6n8/I/OXSyEeoD1ciuPo8614A8px47dz2I/rlFuMNRKHPysbv8BHzPF8RMutQLVWE5so6asN/kgHf2i5gT6rEzV0fQE/kMy8ADbD+ox9YiLYqlZvEsqvwSZGrrkWdowmV+OOUSqMcktx+emfeC1BVAZuVpcUCaplI8SY6+AWZfSM7IWd5jRlc/uiZfy447+8Q1s6pMoqizepL2CdRjBocXV8ZfJtG2epBraEZhvQ2d4diKPaEeq7XfgDP0IonjfhTFZheaBidW7BKox45Zr8XbgxHYx+bWjPLUY7qWbpvUPQLL8Ayswdl/ohzlea+DVVx0Kzgn95XDGlCO8oq/2QGjSdgwyFQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/check-box-image.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK9JREFUKJHFkjEKwyAUhuUNuUED0ms4eZ0eo4VS6NwbFHoRz+CQKwRSyewQiJr3l3Rr0dShw4cSvk/lEUopiV8hY0zDXJmeSQX0q98Qn3CRUh6VUnuttcgBDz46CiEc2rYV8zwL730WePDRUYxxx5vXR6w53h46Kgm+UR/jKVupj0sH9Wlwf3x27bTHaZo2Ras/4g+7D8MgSg+AB5+7B24+O+duXdc9rbUiBzz43J0WHcymW5LxdgkAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUCFtj6tpwjCnYwZTpzodfTP/+/Qfif0x/gRhM/wWx/0JoOBvGB9JoapD1gsy6eu4kADbzQ5rojOveAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEBJREFUeNpi6NpwbCbD3Q+/ZzLd+fCLgenfv/8g4h8D018QAWH9BXP/wlhIXITYX6gONMVoRoGNv3ruJANAgAEAzhtGyJPGg6AAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKZJREFUeNpi7NpwjIWBgcEbiK2AWIDl379/vqqyEh7qcpIMnOxsDCz///+3FpcQZ3j5k5Hhz/dfDCAVvJ9/MwJV/2MAAZAAAwjDAFjgL7oAmoq/DH//IgmAOH+BggRU/EU3A1nL378gLX/R3IFqBpoKiLX4HAbxC4Yt+D2HaigTUODz71+/GGAqQQJHXz57yvDrJ0jwPziQN7999ZwFiM2AOvgAAgwA2zedN71ws+cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKdJREFUeNqUkD0KAjEQRr9IWuv1Lt7QG+wttBA8wYoWdhaiNlqsCxbLWsgmmYkZ/4hxQQx8EF7ezCRRo3GRA6hDipCp2tc2v7YGm0OJ7fE06+1qg6pVyAYZvPdDzexhJFBg5n4AjNeSvaYUfBsUA5ISegM57DAi8DCikqcR96C0B3cZzL/Gfkzh9B6EP55Pzgm43L/QWYtzVQqY6/VqIUITsgyZ3AQYACwxo+jE5WFHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjCquZyKRtbM7ExMjEBCWYmMEkkGYGsZmhNIgPZYNomDiSGmS9qkJsTGv2nQIA4IwFK30tWVsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJhJREFUGJVjDKuZyMbAwFAHxAlALM3CxMTUKCQqXiEsLsHAwsrGwMLIyJgsJinDwMzCwgACIBWirGysDDAAEmAAYRQBZnQBFBXMzMwMzMwYWpiRBdBUgDjMmGYwo5nBjF8FM6otYENR3YHVWnwOI+h9IJ/pNS8w9FhZmBmgqpnmvnr1kkGKi4FBVQgSyPV3nrxkA+IooA4JAD9CEUzrpwlHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUGNONjzsOgWEURM+d+fwRpYTEo1UpFXZiA5ZBZQd2oFJZgwXYh8RPWIBHqET8nrecnMyZG4Px9AqsgRkwSd1en/Pp2Nrnm9Fhl1sKkWVl6o02ETFMUgCgrISkWpLE/SSRXAxeCT8C2yTLnwnJz6W2SLYLHX6x+JvFxR3vtf5B/Pe+FZS5IGmnTjWjWYHtNkfSLC2WK4ANMI+I8Q10tBpanttAIQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKNJREFUGFdj6dpwjI2BgaEOiBOAWJrl379/jaqyEhXqcpIMnOxsDCz///9PFpcQZ3j5k5Hhz/dfDCAVop9/MwJV/2MAAZAAAwjDAFjgL7oAmoq/DH//IgmAOH+BggRU/EU3A1nL378gLShm/EM3A00FxFp8DoP4BcMW/J7D9P7r379+iTKzsMAF5r589rRCRFySgYWVFRzI9W9fPWcD4iigAgkAAWSTEqdsRP0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/default-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKBJREFUGNOVjzsKwlAQRc+TtwWJ+3MbVlbiKlJZuwrBxs5C1EaRJGiRTvKZ+yz88IyCOOXhzL0zbjpfBOAEpMDY7csmXKuazSFje8wnvV1ZU1SOZJAQQhh6KVArUOOQ1PeSeI4kvHXBp2ExMLzJXsDsqxGBuxGtPIw4w7oZ+mZIv2rfWtS9w/jjfWtbJJ29FGibhkuRISn169USIAdmwOgGxHqjvh+HJ8QAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAIAAAAL5hHIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABhJREFUCB1j7u/vZ87JyWEuKioC44SEBABISgbNtp1KFwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpi7O/vn8mkoqLCwCQhIcHAxMPDw8D05csXBoAAAwBIogYEjN3jQgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUeNpirKysFODm5o5iY2PTZWFhYWIRFhZOAGJNXl5eBqAgA4uQkJCSuLg4Az8/PwMrKysDEzs7+z0uLi4GHh4eMGb6+fPnom/fvl398uULAwgDBBgAx68Ss6bQhHIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi7Ovrm/n3799/P3/+vPz169dlLCoqKgy/fv1i+vz5s/7bt285WSQkJBh+//7NwMXFxQAESiw8PDxggT9//jCws7PfY/ny5QtY4Nu3b1eB5iwBCDAA1UAuSStF1W0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFRJREFUCB1jrKyslObm5p7GxsbmzcLCwszY09OzS1hY2JWXl5cBKMjAOG/evM8SEhI8/Pz8DKysrAyMS5cu3SUtLe0qKCgIEQCqkAOqmAlU4QFSAQDMoQ//dMukywAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/horizontal-track-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFVJREFUCB1FyjEKwCAMQNHktIUexsMECl27egBvENBB0ASHRIotXfrHx8cQwrrfzOwYY+xIRMvdQVWh1nphjHHNOaH3DqUUx5TSB601YOb/EJEz57w9xYtAc8FdpUUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAwSURBVHjaYjAzM/vP9OvXLwYmBgYGBqb///8jE9jE8CvBawrzhw8fGBn+//8vBRgAxTY3eCgJOmQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAwSURBVHjaYjAzM2tg+vXrFwMTAwMDA9P///+RCWxi+JXgNYX5w4cPDAz////nBQwAi5c260232L8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACESURBVHjarI67CgIxEEXPzE4UH4RtLRYhZBs/QRv/v8yvpDSbsdpGBEH2lOdyuVeAlHO+j+M4qereVPUSY7wuyxJaa2jvPbh7cHcADKD3zooBrOlXoXzwu7KF+GN2i6dqZs3dX6sYUkrHWuvJzM4iMlBKOczzfDOzB/AUdxdgBwRA3gMATndJshnCq34AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACHSURBVHjarI4tDsJAFIS/bl5DENSjVtVwgBoMR+N0HGB1FVhE1SZs6RsMrQBBQjpuvmR+qq7rzu7+GIbh1vf9JZRSmKZp0zRNDCHsDUASQO3utb3NDFnArC8Q+NDvyBrgj9k1ni4dkkYze5ok3L3knK8xxjvAycyObdseUkrbStIOEDAC5TUAKxFgMuA5pPMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAAzSURBVHjaYlBTU/vP9Pv3bwYmRkZGBiYGBgYoC0GgiWFTgl8HXIz5xYsXjAz///+XAgwAKVgKjcWlLqMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACGSURBVHjatJAxCsJQEETfrIsJCSkEBeF3gX8BW8HKG3gUwdoz5i5fm5BNYxorEX3lGwaGEXBOKV3btj0CnZvZoa7r0ziOTURg0zQ1QAMgCQOICBZ8ST4Xxht/qfxCfLPU3Z8R8ZCEJFZ9329LKbuqqvaS1gzDsMk5X9z9BtwVEQK619E2DwBfRh57l5xeoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACLSURBVHjatI4xCsJAEEXfDFMsAS9gs6TZA3gAz+YFPEquYKWHsLBMvxATi4QZGwWxEtHX/cf/8KWUEsAwjuOp7/u9zvPMsiyrlNJWVTcqIjxo3L3RZ4oIAOyl8aFQ3vjL5Bfim6cigogQEZOZ3QzA3a+11mPO+SzAzsymtm0vXdcdJCLWgAMTMNwHACs+L3xeMd7tAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACJSURBVHjarI4xCgIxFERfvh+LwC4RFKxDcgFbwcobeBTB2jPuVQLabPK3SiOCIPvKNwwzDrimlO4hhLOIDCoip3EcL7VWP88z0lrzZubNDAAFaK3RUYCefhXCB78ra4g/Ztd4Kqr6NrNXF5sY476UclDVo3NuyzRNu5zzTVUfwNOZmQMGwAOyDACRI0tKhkhIygAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACKSURBVHjarI49CgIxFIQn4VUL5gA2S65gkdKzeQGPkitY6SGEeIfAyhMCebONu4UWgux088H8uJQSzWyqtd5KKWffWkPvfRdCOHrvDwIAJAFgMLNB3maBWMGiL+Dxod+RLcAfs1s8XTtIqoi8hCTM7Kmq13Ec7w7ASUQ0xvjIOV8cyT0AA6AApnkA8SJiRCHFwrsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAA/SURBVHjaZIvBCYBAEMSGKfS0Fdu4fk6saR8TPwsK9wmEEI/jxFUlB2RAJmlNIkPkZA8ftoN/QGp97nUZmO8AYzNFSPGK8tYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAAA8SURBVHjaZIuxCYBAAMTC9e7kJOooP/cXFwsFhW8CIYTjvEbmnKRKVGL7aluiJe0aPiyH/yA8CrCjbvcAE+tBokS7K5QAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACLSURBVHjapI5LDoJAEAWrhx7xdwEjYDIJG4+gmHj/JXeRBTLdbowLXBh1+SqpyhMgdd3lVDdNHWMsNYSw21fVAYjjOKJmFhGJ2QwABbDneAGfA3OfgTfF54r539HP4Ken/kU0qOo05Xx3wIEipbQehtumLJdbESno+37Vtu1RVc/AVdxdgAUQAXkMAA50T0Ivt9NcAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACVSURBVHjanI4xDsIwFEOd8CvEgOiKqBSWLO0JEAsnAY7CGXOEzIWpU0q+GVAlyIKoF0uWn+XF+XK9tV13qDf1PsY42JQSACx3TeOstVtREiBhjKlUtRKSAIDJhar41Bv5CsoGWSJaIDNGfweznvLf0QnIOY8i8hRVRc45Pe59dM71AHASkaP3vg0hrAzJNQACGAGk1wAfU2M6/egpmAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUeNpkjMEJACAMA5OM4Syiqzl4obYoWDCPcOEg6GO6zAyKQASiks4kLynpiVJFJPEX54X5DSy4e9sCDABELwjMR/gd5wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNqkkL0KQjEMRpO0OBQq3F4F50JBHV0FJ9/ARxGcfcY+jA79u4ku0kEvGEighy8HGgSA83a3v7pxPBKR1TwOg3On1prJOYOutRqGhgEgImiQkge86wWQCOATUA9k93uC+sRv6QwwQ9on8C8paa2fpZSH/Fhaee9XKaX10tqNUmoBMcYhhHDh5I037sjHFaPlNqKYBBgAFyshPM4kBT4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJRJREFUeNpitLGz///v37/P796+PXrj+rVepj9//jD8//+fV1BIyI6JicmIBUgwgAAjIyMXUCUXCyMDFPz/D6ZYGKEqYACuBS4A1EtABRO6CsKGEiFAhKHoKhgpNxTmW2BQfmNhYfkO1vLn9+8vTx4/OiIvL38TJNkAlClTVVUNvnTpkiAjMMSlgIL/gPgbEH8GCDAA2UIwblDGBeAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACgSURBVHjapI4xCsJAFAUn2Z9m0UbtjCEXSGNrtPIGOYr3ygUshICdYis5glpYKYTNXxuxiIWo5RuY4QmwzPP5apIksyiK+hKG4XQcxwvANk2DqKolCGyrCoAA6HO8gO8C9b4D3hTfVdT/Hf0Mfnrqv4mKyN217c0YYwEkTdPj5XyqBsNRbozpSVmWVVEUctjvNs45K1mWXeu6XgNbIHwMAL4rWK1r13/GAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/default-button-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAGtiAAB0NgAA9OoAAII3AABrSwAA4yUAADEyAAATrPYeey8AAACcSURBVHjanI4xCsJAFERn118FxNQaCGlN5wFyFPUOXsAL7RWsvISFzXaCsVFWCPw/FhLQNGKmGRjmDTNZb7Zc1vUun+VNjPHiu64DgOmiKBrv/UqMBEg45zIzy4QkAKB3oRk+9Ua+gmGDHCI2QEaM/g5GPeW/oz2gqklEnmJmUNXHrb0ey7I8OQB7EUlVVZ1DCAdHcg7AACQA99cA7LNl9l3/HpoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUeNpiEhUVPcOkoqJylklTU/Mei5yc3HumR48eCQIEGABLxgeqlrkYjQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiFhUVTWPW19eXYtLU1HzPJCcn951ZSUlJGSDAADTlBJ4jXpdLAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFhJREFUeNokiEEKwCAMwGAtFqQWj4p7jN/rF/3BYIdd6mA4mbBADgkSUVhWRNwBYKKIVPk5nHMDY4ycUrpyzua9H7jiXHOWUm5mfkFVn9ZaMDPqvW+fAAMAgxAYEA9uUqQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAF9JREFUeNoMyjEKgCAUBmB7/mBQtjlEeAAHzxV4yo4SGLg1ifZCocYPvsEYs/feqbV2MfMhvfeb1roCmIUQK5xzdykFKaWJiBZYa5+cs6y1yn+8iDGOP6CU4hDC+QkwABcBJR2ZJ8maAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpiZGdnlwTiBhYWFgtmZuY/jKKiojP5+PhkgfgtGxvbDxYBAQEJILgvKSn5iouL6ycLkHMTKPhHWlr6PQ8Pz0/mzs7OT7du3ZL6+vUrz7dv31gBAgwAuQcYxkfD6eQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/horizontal-track-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAFCAYAAABirU3bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGNJREFUeNoAVQCq/wQVFRXN/f39BPz8/Mj5+fmAAy0tLTUNDQ3tBAQEGAAAADIEKSkp3fb29gfn5+fyAgICHAQdHR3v9PT0B/f39wcAAAD1AuPj4xHm5uYRBwcH8mpqaq0CDABLliXpqWUbNwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAADRUlEQVRIie2VS28bZRSGn5l4xhPHjY1jN4lrJZAUEhmDuKhkw4oKiajcsgB100WFEF2yYUPX5R+wqFDFIhuKAJWLCAgVIdQFEjtUoTqJExcsFF87GU/GM+PxZxYeOxPLUemmK470ro70nDPvd84Z+D8edkj/IS8Bsi8J6ALCV9fXA8H7wNCHV64sJU5MnVbD2nRYVZKO2665jl1uNOvbH12+nAe8QKH7wiUgtLq6Gj/7+puvLC08sZhJz5BMxEkk4jQaOrWGTumfPfI7m4Wb39z4YWNj4x7QGS4wNgp8/vzFmbOvnrvwwnPPTj+59DhuR1DfNyn+vYfd9hgf11iczxCdmEhEE6lcy3O3iltb9v3gY0Dk4ruX3l4583w8HJlgt1TGMC1sx6UjBLbjYpgW5brO5OQJpmIxRVEjUzd//H5zuPsgXALUS+9/8MzKypmnuiGVfeMAIcSxMg9adGWZ2GT0kWQqY/7+262y7z8AoQBcBtSTM7PLghCWZQ0SjVqN9WtX+fP2H2RzT3PhnfdIJJMAeJ6LqmpMzaSywG16D9zpA4NwRVXDKddzcV1voPVrV2nUKiwsLNCoVfj0k4+P5E3LQlHUJKAGmcOdj0kSmhAghDdImIZOOp1G0zRs26ZSqeB5h3khBF0k1bd5JBxAatm2Y9t2WJYPPyqby2HoOrIso2ka2WwO13WPwB2n1WZotIO2AHSb9f2GaZp4njfQ6mtrpDNzCCFIZ+Y4t/bWkbxpmpgN4x5DoxjsXACdnWL+r5OnZmdD6mHKtAWrb6wRjUQwLYu9Sg03YIth6BS287v0HnLktAig/e0X1+/MP7a0LMtyLBqNAuC5HjvFEqPCMAx2C9t73924vgm4QfioDZV1vdpMn5qfQ5JCiqIcO+e6rlOvVp2vv/rsl6au1wGL3iiOhHcB6tWqu13Il1PJ6biiqlGE6J2/bhfP83BaLQzD4O5Oofzl5+u/lkulMmAOdz58uCTfqnEgCsRefOnl048uLs/H4vFJRQmp7bbn7uu6USzcuXvr55+2AANoAi2G1v/Yq0hvISLAhF9MoTddAmj7sAPfCmcYfBx84H2gSH9B+j+Ljm+BywPe81FF+uqH4Ojf6OHHv8wPry1u2L4DAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABBlJREFUeNq0lctvG1UUxn8zY2emTtI2D5PEdWqnlEo0RKVVoVWRKCAhxCNFVBEPIYHEsgv+ADbddNdtF4CQWCAQSLBgA0tQQYi2Saw09EHVUidxEtuJk9SP8dh3xsPmjDtJG2DDlY6ujo7ud8/57rnf0Xzf5/9akfe/+WO7mCamA0bI98U8oBXyHwTfBlSXWBQwgQ7xdQF0gSbQAJT4ra2XbAUPQDuAGNAJdMluSgWegNaAquy2XBZc8gC4LpnuAHYCvWJ9wC6JB6sF3ANKYutAGahLJa0weJBxDOgBBoEhoE/LZsa09aUxnGqKppOkw8phdc35PYlZP314FtgNLElVCDUK8MPglmSYANJU1wa49tO7YyNDh8eeOkFqb5LhZIKF3FJ6bj6Xnr124+TVS99lGH3+S7p6TXkrT6jxAM84NHFGE467JeO0vzq/r5X54aPxF55Jn3r1JUwrRtVpkM3l8TWNeH8/x44+SQfe0M2LPx7X+pIZzez0AEdMAS3j0MQZQ3juBZK0vEH38vcfTrz24sCjBw6QXcxTrtk4jSatVgun0aRcsymWNkgOJ+ndGTNvXvolbuwdux566Abg6kKJKZn3qhu/Hj1ycH9qV98jFFZKuK67rRVWSgwkhjnyWPKwun7xqDx+t+DpwQcx5TG7VP7O0/GBAWq2jVIKpRSF/DLnz53lg7ff4Py5sxTyy+1YzbZJJJOo5dvH5c06hWZDD3WKCaCq6+moabUPK6X44rOPWVspMDIywtpKgc8/ubAp7msGqraRkuawpKX1cLfoAK7jdBtGBKXcdlNXyxskEgksy6LRaFAoFjfFdd3AdZyYuEaAFQl9ihaA5/uVSqXSbVlW+/Djo09Q3ljHMAxM0+TgwVGUUu14vV7H87HFDTRnk1Y0AOjozBaWlzaV/cqp0+wZTuF5HnuGU4yffnNTvJhfhuiOOQFvt2IkpBU2UIsMpidv3741Fh8cvE+L4/Py66fpisWo2jb54irKvU/LrT9vEk3s/10koSY64wWZN4AKUOo5Nn45O7+4cG1mBle5uMqlXne4O5dj9sYt7s7lqNeddmxmapJc6V6m5/j4pOhMRfBaAXhTFG5VMyIb/Sff+nR6erKcmbqCct1tLTN1hatXZ8rx5975SoBXBacZ/NCw5PoA0d1xYqnRqezkz/HS0vyQoetEIlF0XcexbQrLi8xMTzJfLGX2jJ+5YMaHl4AFoCjq2ARa2ntfz4ZVsTOkigmgt3Dx2yOVv2ZOqOpG2ndVtxaJVqJdu7Pd+w79NvDsxLRkvAgURHrtQBUD8O30vD+k51vXvRAVa/+k50GvK6HGlZYqAytSkRWaRI50RUU4/tdJFL7Ak70uF5hSlRYaBg2x5n+doWyZ7EEFxkPGnBf62Q+d/n8PAPiyIDwt8vw5AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAKQWlDQ1BJQ0MgUHJvZmlsZQAAeAGdlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/ul8iYiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD00lEQVRIDdVUX2hTZxQ/Sc29N7G1bdKKjda2SKRNa0mZQ18qooXS4SwWN0TFPbiHMZQN9jK2PW6DPQ3ZHhwIgr4ogjZatQXng30XdIWqUVttMU2bJjc3/+7NTZP9zm1yk7tWEMSHHfjd737fOef3ne9853y2YrFIH0rsH4qYef+/5BvelhYbBDpGDcB2DJ7zJeVLWOE5C8Y1YltvHbycLiaTfvz51+HGhqZBUZR6BcHRmcvpTzRNfRyXoxO//PRDEDYqkAdPAaNF1pCXiKWh4eH2g4OHznX5fAPbvC3kcTeQp7GBluMyLcdkmn8TpulQ6N7fE2Pf3A0GZ8Cq/XcDS1rKxCe+ON23t39fcHeg19PRtp3iiRSFo3F6/jpMG10S1Tqd9FFgF7kb6wdEQXgAv4E7o6NPMVo2MMmh4Hw6nE6nu2/3ngsf9wU8gtNF/zzjoCoiKylizEeWcJJ66tvV40kqyu8gPwarOGh0nMC4g+pS5H/n6a+/Pb7Tt6MzreUpsrRM+Xz+rWC9hivt9vv3n/3u+5PsD3CQhpiRY8b/tZ7mpiNFWw2lM5lVC3xjy1G6dOE8TU89pq6eXjr15Vfk9jQZel3XSRBEcjc3H8XCFYAvWGNldeRM7hJEya/BgZ3KuAzi2FKEOjo6jPHiX3+aOrZJZrLkEMRO+G8EzIDNHyxyPYuowk2FQpEKBS7lVUkpMnm9XpIkiTRNo8jiIsgr+tUU22phLQDMY0g1OefKrqrZpKqqdTU1pg11dfeQIseJ10RRJL+/24i8xEErKyvYVE1jzk5mzqvTwjdcSMTkF+l02nLsTw6P0NbWNoOEx09HPrfo2V6JJ7isjI7FaEh15KzQZl+GJrds9QY2OCqqlFqkoeERqnW5KIWLXliMko4qKksiIdOL0NP7mOcA5jGkwrD6XmRuj14Ltu3wHUHut9XV1RlGeeR35tV8ycU6KIpCM89Dj8ZuXL0FDafG3LU6LbyYQl0vjo/d+G0hvJCMxWJGhBzlemB9ZCGSHB+7fg6+S+wP6IAh5ttS6lC+bTewfXNLS2Do8GdnWtvae1xod4cgkN1uRxUVSM/lKJPN0tyr2anxm9f/iITnH8JnDogDZoea5FgkbMAnkQDeoAVo7T8wONTu29m/qb6hVXAIrpyeyygJeW429Gxy8v7EHdgw6RuAiS1vi4UcyuoNOOHchs0Ab1ZuEE4f5zYGcCqigAJYiDGnNeTGYuU957eCSblBRIBPxu82tzfnlzfJAu/2nsPQkNIdcENwRTmAcoNwP3C58cXxKfgRNF5B/Ftk3cgtFu8x+Rc1XeEgwmSoOwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAa5JREFUeNrcUstqwlAQneTG2DyaaCKUrmxtRDdC6T/5JX6BK7eu3Ll36Qf4C0LWIlQkouZlz4RckRZai6t24HCTO3NmzswdhYh6juN4qqqmQKJpWgzwmQKZECLHfY44yrJMTdNUABpQ0fjydDopjMtvRp7nirTyX2UgiUBotSDDBJw5oEpwEHMAkon5jquCrOm6fq+VlwLSsk/Egsx+PlkFV2S5gG5Z1mNBtm1bj6KIykpMOJWKimplOyxXS5KkijmYwEvhaLfbAX50OHXOKk8OlDgej3dxHBtIYtVqtR5oKjf+0Gq13hqNhgNntNvtlFK+QFXur1ImrBqG4fi+34M6F36SAyNUtpvN5mu9Xg9Xq9X7druNWS23YZpmxXVdH0N6RkJupeCcydLQ/xOCnzgA1ejylCRpKt1gf5T8ZWB4U8KkeSnOQ2JgiD+Tu90u9ft9frrz3eFwoMFgQHjC72Uvl0sKw5C3jjqdDgVBQIvFgtbr9XU9TyaTQrbnebTf72k6nV4/sM1mQ6PRiLDPNBwOC9lXDUzabDYj7DHN5/PfPxVPeDwe/8cNu4n8IcAA4WwjSMEpNj8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNrcUr1qwlAUPkluYjQlUIsVO0iHBMG1L1A6lK7t5tZnEB/CydXF1QdwanHq4EvoUHATHQQxNTZ//c5tIkKhtTi1Bz7uveee7/x89ypE1LBt21FV1QfehBAewKsPvGuaFsAfIY6iKBJhGBqACeQFO5MkURnYKtmeEcexqigKA8dEwVkDBJIYgC3JMAOXIaBl4CCQ4pTIiQk+HRVzIJrAhUidObQWIEgHBAeBFDGZ73nlLrgiyBZwAveVJJumafm+n6SVeD4mJWli8TlZwu3mgyCw4TuDHreSXKlU7qbT6TMuOYggkpp2kEuTKVwV5wJwahhGg0eTZARfVqvV+8Vi8bRer7l1HsMHMeTiqQ4G4s7R5QP2ZS6SCUYILpdKpUfLsl5Wq9XrZrPx+HVYMF3XC6jmgnyDyjyD5OzImSHzNQKvOQit0v7K2DeVjrA/Sv4iGIvjeZ5UNBOJARF/JtfrdWo2m/z2Ox9+H7VaLZrNZt+3PR6PaTKZkOu6VKvVyHEcGo1GNJ/PD5u51+vJVovFohyh3+8fLthyuaROp0Pb7Zba7Tbhtx0mWGaDwYDwXWk4HP7+qbjtbrf7H3/YUeQPAQYATq8uCgYHvXQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-down-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc1JREFUeNrcUrtOAkEUvbs7LI9dlleUxAYLCDRU/gCxMLbaGRsbvoQvoKKloqOWcj+AX8AQSgIJISDLPj133SVGE8VQ6SQnM3PnnnvPnBmJiB4Mw6jKsmwBr0KILcCzBdiKojiIe8gjz/OE67oqkALSgoNBEMgMLKV4zfB9X5YkiYFtIGGvAAJFVOQaIRlDxaELKDE4CSQ/InJhQiyBjkmQU6qqXogomIQ0B0kJQHASSB6T+ZxnVsEdQdYAXdO0q5Cs67q22WyCqBPfj0lBVFi83yxguWnHcQz4UAJuQjm1Wu0WGx2HOqpmo1nnRCAL5Pb7fcG27SKKnOXz+UfQlLAzXL1sNpt3s9nseblcsnS+hgUVLjePfFAzmcx5Lpe7R6wMRRQbRuhcrlQqT4VCwZzP5y/r9XrLr8OGgZQBqQaTrpnECJvSp4H7t5Db4gTIp49zTIqHTCeMP0r+YhjelOA0/4qDSQyY+DO50WhQu93mpzvELMuiTqdDeMLvZU8mE5pOp/zrqF6vU7VapfF4TIvF4rg7DwaDUHaxWKTdbkfD4fB4w1arFfV6PcJ/pm63G8o+yrB4jEYjKpVKZJrm75+KHe73+//xh51EfhNgACA6JNNWltjcAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC9JREFUeNpiYGBg4GD09/f/z/T+/XsGpn///kGJv3//IrPQuAh1YOLXr18MAAEGAHdlKH321oJgAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARFJREFUeNqEkj1ug0AQhfcvFhC0yLJA2FKKKAUlHUVKUDq3LtK78BmS2r0Ln8c+gC+RLj0U/C+ZsUDCgOORnnal/fTm7c7SpmkIpZQMirbiINbuiSDjwkMeBMHKtu1vzvkazJZXh4Ezgk9RFG00TTsURbEAEWSG8BUMw3ALbseyLElVVbfZWhhp4fu+5zjOJU1TTSk1yid6F5qZprlDEF2nSvSzQpcPBLuM/8LQ+nWY8x7MAVR1XT+EsZo8z39g9e7BrF3x6irLsjO+ArpPqXs67GBKKd9c1z0xxuQj5yKO498kSb667Nilr5uhgAzQHAazNgxjjx3wqPsOo3GDnkFS1/UXy7I+hRDv+JFAzp8AAwCqDI1JAuEnqwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-knob-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASVJREFUeNqMkT9KxUAQxmdf1iAWqQU7+1whBC8QSO0BLCwFL+AJvIGNlQQClhIs7HMDyxiIGpH8N9n4zXP3WbxncOCD2Z3ffju7I4hon35jhiZIcR6GIa8piqJ1UQRBMG/IeX6ZpinKsuwqTdM3Poi6iuP4B/Y8bwMLIci2bVbetu15kiT32P7SN9FKKUVGcCVAVNf1oWVZd77vn4LZY24LNhqGgbquIynlteu6x+AsvnjFbrukDxw4jnOm3YVkp7+CD8D9BKnNS8kuS4FHH5m+/wOTfuByGxx93z+bfNGZXQE/6qnOi86ofWCaN2YwO2GMnaWqqrpomuaVf2IL1hA7vmOKl0VRPGC7hsZ1G/yXGsyhbBzHp7Isb9Frju1PqDM9fwswACNF1jCNRpSTAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNo8i7kRACAMw4xD2twxCPvvRghPKHChkwoDQKeZNd5NiognBlX15fy2Epv3AUZESZDuXtPqEWAAAbEUmbnlEr0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-horizontal-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAYAAAAlH6X5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAENJREFUeNoUy8ENwCAMQ1HLIYJThuhW3X+GFlAaqdiHr3cxANwtIi6eLZrZqzx09yktaUufUjwPsKpMaczMLo1fgAEADawUxddyoEQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbhJREFUeNq0VFtqwlAQnTw0UbCISj+kO9D+dAVxCxZxEYJr6BIEt+EyXINfrS2p0HylKiHmdb09ExILJWkF7cAhgZmcc+fMnShEdE//GLplWY/XIDoej+Fms3l1HMdVVVUoinJk6EhcTC6E8Far1XMURb6maTGIBWtCSJ4lgA+pWq2WpeV6vc7JQ5DGAJOmxL8K4GTk+z71ej2ybbuwBvmP3W53YHIgAnmS2wNIlQWKwMSVSoUmkwlNp1Mqq3Nd95NJ2Ro+PT91Xf9GUQdsyWAwoNFoRN1u90RWFPv9nm1JGCBMsnf2P+1AZxt+BhMPh0PqdDrUaDSYhIrqssNE6JQJBQMdiFyAh1xo0WKxoPl8TtvtNh0uCkstQl7jQTPYdyaGyAkqn6wIy+WSxuMxzWYz8jyPyurq9boppVQgwKB0sJlIalO/33/665o2m820m6IIw/Ady/UCm3zDMA54RpiFyAXO2gPclNIcCO9M03QwihgdxdkWy3RBpCSt3W5b/HIBFAjcBEHgJklyugmZbaS1Wq1LBZjHqNVqt7x36CRAB7mOcpV/URYmBv6AObzFcWyjG+5I/RJgAC85tuyF4bVKAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcdJREFUeNq0lLtOAlEQhucsC1TEcGvgDWgIlc8Ale0GGl6A14DnwNYHUAtiYWJntNdY0GziskT2fvcf3Ni4J5K4nuTPwGH45razgog0+scjhsNhVgYoy7LDbrfb7Pf7V0VRQiFEBMVqmqZ/hoOhb7fb6yRJdpVKxQU4xHWMQMlJAeI4JlVVpXxd128ANwC3AHWhCPcJF6ZwAJkY7DgODQYDqY/neY+QCajFASCHg3AlSMqRVhCGITWbTVosFjQajWg+nxf62bb9BqDHwBzsw8ZoUwKlhQH4bjKZ0HQ6pV6v951t0fF9/wPAAPKRsZ9/jvMgqYre/fjTbDYjTdOo0+lQo9Ggw+FARX75fOxqtRrxk8NCBWz5ewKlhTNYr9e0Wq3INE2q1WoER+kMAKzzMLlwbgtnjjtWxFI4syJtNhsaj8e0XC7JsiyS+SH7M+yAwjt1XCy0hbMHnIMlot/v/7porVbrWI2kRQ+u694i0Hu9XjdhHcwi4CpO3gPDMKS/AXIO2BOqcSCP+89V5NstythkBXO6CILgEo92lH0dni1XEYlut5uV9F77QLuuYJ/RJhtw3o1QtNvtrMy3J7K/g7kH/IXn8CnAADDPYRM6gNQFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-left-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc5JREFUeNq0VM1KAmEUvTOOvyCpuHLtTvdt9Q1CcBH4BoLP0Dv4CG19gGoRLYRcRStXZSAuhKZJzSbnv3MmMYiZCrILh0/n3jn33nPnfoqIHMs/mtJoNIJ9EPm+v5rNZpfz+fxeVVVbURQHcDU4/kzued58PB6f2bb9lEgkTBDbeOwikferBHhRUqlUbPGTyeQcMTrIX0BqAg7zAsG3CVCZmKYptVpNptNpZAz8N8vl0iD5NsGG0gAe4KtMEAUSJ5NJ6Xa70uv1JC7OMIwHkL5RGlbPU9O0T0R1QEmazaa0222pVCo7sihbrVZLEFusHISb7W/qzy58jTJ8NRK3Wi0pl8uSz+dJIlFx22LW6NThl0OgA5787wHREg0GA+n3+7JYLMLhIjBWIvjTHCaHTd1ZOZIQDqHFVTYcDmU0Gkmn0wm7iYvL5XIH6/Va5U6Fi8XBonqQh0NW6vX6j4tWKBTCbqLMsqxrLNcFZHpMp9MGzlfMwmIXv94DfCmxPhAeZjKZW8ziFV2+UX9WTl8QBMo+NlktFotHuq6fIokTfBhna4VzKJVKJ3ggfwEsn81m6zh1JHlGB7u7TqlWq8E+b0/IdOU4ztB13TveR+8CDAA4ZHMC9dTxrwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcRJREFUeNq0VEtuwkAM9WQCoQRICK3aErWLSCBRpScox2CPOAg7rsAxWHMVVgguwEd0gYDM9DlNFhVJP4JasjyTxO95nj0RRPRK/2hmrVbztNYGu1LKbDabtu/7bSFE6RoEwnXdNwALrJlEYl2AWWEYvhiGcXMpgSyXy48AilCxwl7zwyiKCGTvlUrlHpGyfL/fk5SS8t6nLqvV6h2DwzWI4ggTu91OQz4yTbOWldhqtWixWMQkyMkncBynwcBwzeCpdNwTRIVTPGQlDodD6nQ6NJvNaL1eE/LjxDOCer3ucQUMnhIkTZeHw8HwPM/PIhgMBhQEAXW7XSoWizSfz1NpvzgUMCP1aUYCrhLJ1Ol0ijgpy3AyYgk59nq9uCfT6fR8TKEhg4lERwGiuOHcCEwT77PHD9/jPS2XSxqNRvEJMu8B65+MqE5kYv15bAUmzMo7wXa7pfF4TJPJ5PuLxkDphoETl+y2bd/mnaDf79Nms/n5JqNCvsECehtYy+PxWEA0Mb4u+vOUR7BarX73q0iBEXldgFuQrQSCdh74n/5FXDGAUgILujcgTQiJSjxmFxNw9dxky7IcVP2M6oN0hq9hHwIMAA2mcW+/QfMYAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAc1JREFUeNq0VE1rwkAQnc0mJrFqFKEIllJKWwqV1J5KobdevXirP8WfIP4Pj+q/8SDVYy+iVgTTxCR9o/Fk0g+0A481cee9eTO7EUTUoH8MNZfLXYVhqAJaEAR6oVA4LRaLNSFE/hgC0jTNR6w+CBnBarVyF4vFG4Qv8d6EMB0CmU6nHxRF8UDusRAQwgkB74Zh2EmJrusS8n4WyGazdyBfswMk8BrwH3ASwp3Au7O4RNu2aTweb0Q4EgUsy7phYmDTIuxlKNFcPLi4j0tstVpUqVRoMBjQbDZLFFIRDtoh8SDZxXZPmELCp+M4H9yuuCiVSlQul6larVK/36dut0vYv3+KEC5IFECNyGXUsjXC830/ViCTyRAOwmZtNBq0XC6p1+vtC0gpecAKwOQCQvzsb5SkFEkOsIc0TaPRaETNZpOGw2H8PeDeR70LeAZiqyR4DnBnJTmYz+fUbrep0+l8f9G4mF1RIObh8jxSDMRtkoN6vU7T6fTnm4wKVZ4B+s2/dc/z0lhN2L+Amackgclk8rtPBYg1EGpYDeAEyKH6PNpTSyL/07cIFZsgSoHYBLKo+lrX9VcW4XN8sAC3hdsEnIP8GXg5RuW7+BJgAINQm2YEYuEWAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-right-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAYAAAD+pA/bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdlJREFUeNq0VLFOwlAUve1rqW1py0AMAWOMsUZi0DgZEzdXRgad+BI2foHPYCT8CosEJgcSoLAgpa3nFlikFQ34kpvb19d3zr3nvFeJiN7oH4di2/ZVFEUKQg3DUCsWi6elUqkqSVLuGARC1/VH5ACAHOF8Pl+ORqP3fD5/ifc6iOmQEIZhPMiy7APcZyJEFAQBL35ks9m7tI2LxYKEEPsJLMu6BfiKOwAR55AX0EkE+SRFUc6SNrquS4PBICbBnnQCx3GuGRgRS4QOOGT2BdlHF/dJGxuNBpXLZer1ejSZTAj7Y82/f4cClQXMFZgI7mL9TZTBhs/ZbOYVCoVE8/g9DgNVKhXqdDrU7XbJ9/3dU4SxBIGMUDbgYiPZCsNnP5IGOiNIGOdarRZ7wiQ7BNCQDZYRDC6BiOcBT1RV5XkiAeuOdRoOh9RsNqnf7yffA9Z+o13IHkhrJol9wAlz0jrwPI9arRa12+2fLxoXsy0KwGwu+5HhME3zJq2Der1O0+l0/01GhQp7AL35WYNRBrKO43sBf57SCMbj8e9+FQBWAaginyBMhA3ZciCopoH/6V+EinUAZQCsIyzo7kKaV0iU43N8MAHLwlnTtHNU/YzqX7aX5BjjS4ABAEDnkWqhfTpFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZJJREFUeNrUlMtrwkAQxiePxiZ48FHTggUvvaZ49uTRiwgW8Spe/XuVHgslB0tTQoIk5rX9JiSQqqXYXuzCZJbZ+e1OJt9GIiJrOBw+ZVlGh5am6Rd/aDL9YVwgLISgIAh+B0uSRJPJhJIkOQ/m7o7HY5pOp9Tr9c6DW60WzWYz6na7tFqtvj39CI7jmBaLBXU6nXwTy7JoNBrl3/VHuN/v02AwoHq9TpqmUaPRoOVySaZpHsHqYWC9XtN8Pj+psH8gksuGj7odRdG767pvvu8H0PcVh3Rdv4bdybJ8cxJGYrLdbl9s23ag6xiJKcIZ5iIMQ99xnI9ms2kahvFQcmoBBpvN5hlJoaIoe4AMJwBzuMhRPM+zd7ud2263HxEyFDxu+QQshAD2gCNVVSP4BD5m4zlXgo1SHhCMC/Xd5zCEr2Mx4hPLZPgUvmoZ1llmAvqPa7WaphZ3l0tMi93zJJ6XUFk6r/FPgu86+NcSLptTNVFswiYqjeXcGNV7JSzKBJ5XQFEYlysBzLgaeAmvGn4KMABFtPy+67Pl0wAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZRJREFUeNrslL9OwlAUxs9tSzHKAARSEnbioHQicWF2ZGpA4gN0553cfQM34+ykMTFG4mgbobS0va3fKcU/SKJoYhwk+fgup+d3enpuL4KIjkzTPEmShFYlpXznq1LoB58/CKdpSmEYfg8uFAo0GAyyYW0E8yQty6J+v0+tVmsz2DAMGg6H1Gw2aTQafR2O45hs26Z6vU7VapXa7Tb1er1sBp/CnU6Hut0ulUol0nWdyuVyVqzRaHyAxf8b9ouwtmafrzzPuwyCwMHebiM00TStAplY766FkRi4rnvmOM61EMJXFGWOsMQ6wVY9+L5/UywW91DkEPGtFxjg43g8Po2iyFFVdQJwBgUAY4hPhkCOjq4uoFscmmPEaiq+9jkJlR0AT4CnqD6Fz+AsH2vuJEReiCKsO6wPMhg/KrjosZDsITmAz+GsMFeE63Jx6BIPvpO1jSpzVl49hnNixACLn3uRJiQfEHiK9s+XMP9lZM/3VigQ50pe55ryIBXc/X4Jyzwh5buwuEWO5VoOTXIncBVynwUYAA6xEqaxcbksAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-up-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAYAAAAlBadpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAaZJREFUeNrslD1PwnAQxq8vKVIZKAgLA6uDjYyGiU0WQkLCYOJAWPle7n4DN+NsQqIxMcZgwoA0lNLy75vPYfEFNAZNjIMkD9fc/37X6/EUiYiOarXaSRRFtKowDN/FVcn0g88fhOM4Jtd1vwdLkkTNZpOCINgM5u02Gg1qtVpULpc3g3O5HLXbbSqVStTr9T69+xrs+z51Oh0qFAqLJqZpUr1eX/yuX8KVSoWq1SplMhnSNI2y2Sx1u10qFovre/l32C/C6mpCCHFlWdalbdtj+FtHyk6n0wa0L8vy7ocwCr3hcHg2GAyu4WsXhXN2Kq4jz/MeRqPRjWEYe7quHyK/9QIDfOz3+6coGiuKYgOcQR7AAArZD6jRJpPJheM4t/l8/hi5HQVfJhTgYAxgAniqquoUcYbIcnHNkwg0EjCMgEHu4L6DBQzjGzh0WCh2UOwhzhFZIpGPc54igv+dVCq1rSbv7pyVdA8QudBngMXP/VwmhfwngRijwfkSFjw6H74VGgSJote9xrxIGePfL+EwKYj5LiwekXOJlksLeRJEBY9qPQkwAH6xFG4uskBeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNqUUL1qwzAQ1vkfAu7YxU/Sx/BrZOnWtc+QN8iSsdCxe/HYLoVMBmGoQwZjE2PLxJbVO2GBKIU6go87Sd93d98BYyxK0/Rc13UspWTzPGuYnKKdm/9xHIWDYsznwnEoXX9Q863FWPHN9/3VQqUUm6bpXYurqtqFYdh5nrdWLJqm2ZNYZVl2EkJsgyBg/xWgrn3fP3ddx13zmOf5MUmSzyiKHpBwZxZDZMtn2bbtU1mWr3i9GDExFOc8R8IhjmPABW5c170HABJ9DcPwUhTFI1r8QG6LEPBrKrJBBWl7wRJNA4kYEdclSvjDFixwLOipLehJwfZ06/kRYABTY58KWRsFmgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpiZGBg4AgKCvr+7t07hn///sHx379/4TQyGyb/+/dvBoAAAwB0aihkcGml8AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-knob-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARBJREFUeNqUkbtKxEAUhudkZieERSQIQSFWKSwt04gpxFha+QA+gtY+h4XPYGdlY+Mr2FsETGERMOR+Gf8ZRllWi90fPphJznfOZELsb8jiWMg+V2C26LWiNVEXcyCAtDj2nZZ6ywgmWhNFFEV7YRjeKqXO5nk+HseRdV331jTNa5ZlD1VVfaKuAi2tiIskSc49z7tv2/YQAtPiNE0MTQzYfxRFcZfn+Qvqv7j9JpGm6ZXruo8Qd/u+N8WYblhZ70gpL1GXlWX5rmUnjuN93/ef67qWwzD8Sv+hwzk/xZAnc6NBENzgmEt9zE1CRB6GXRsZnS70xE0DmQkhToyMHOmL2SZocPDzDxdsy0BefgswANTzkXd08tnFAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADlJREFUeNosyrsNACAMQ8F820gMwv67kQQwEsXpuTAT0YyIISKlqgnL3d+u3w0HP+puBslMQ+0KMACg5xR+0/xvkgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/scroller-vertical-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAYAAAAB3PQ6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNoMyrENACAIBVEEiVYM4VbuP4OKQRJ/cXnNFSKaZjaY2UVko6WqBzq88KHER5kpqEZEg/0LMACqFRSole+PrAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiMDMz+8/069cvBiYGIGD6//8/MoFNDL8SvKYwf/jwgZERyJICCDAAxTs3eXOW1tsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpiMjMz28/069cvBiYGIGD6//8/MoFNDL8SvKYwf/jwgZEByBIGCDAAqR83M1ta/ucAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYGBg2M8EJBjoQTADMSPz////HwMEGABruwTRxWVztwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIZJREFUeNpiZGBgkFZRUckTEBDQYWJi4mIBEmZ8fHz6f//+Zf/z5w8D079///j////PDsQMIMACIoCCDDAAFoDJYhVgYkADhLVQQ4AMa6nhUiYWFpafQIGfMAFmJSUlrs+fPwsBJYQYGRlZGS5dusSuqqpqBxSIACpIYITqZwNiLpAOgAADABBQSostyhMHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiNDMz2//v379vHz58uHLnzp1JLL9+/WJgZGTk4uPj02diYjJjYQCC////gyh2oEp+FigHJsgAF4ABDAEmBjRAWAs1BMiwlhouhZsBlPjJwsLyE6wCGHTfv337dllBQeEuSDIBKBOhqqpqd+nSJXZGoAphoOBfIP4GxL8AAgwAD0RdoB6ph54AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg+M8EJBjoQTADMSPD////pQACDACI0wRH0uIsCAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpiiItP+M/069cvBqZ///8zMP0HE//+Qbn/QKz//0Hcf5gSCAJDx39kif8MDBAu85PHjxkZgLJSAAEGAGF5RJzjY1IbAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEFJREFUeNpijotP2M/069cvBqZ///8zMP0HE//+Qbn/QKz//0Hcf5gSCAJDx39kif8MDBAu85PHjxmZgbKPAQIMAEa5RStdv6aRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg2M8EJBjoQTADMSPz////HwMEGABsqwTTd4K/0AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJNJREFUeNqkTrEKAjEMTWpKqyCKq+dBh26Cg+vpZ4ij39yPObhiE1MQhzqIGngheXkvCQLAcRhOl13f7621CzLGxG3XHXTgcs5AzOwB0RVmqEE18bN5EdISLNIQbxZpLSx/L/1M/PSpfLHUENF0L2WqpopZCGE9juPKOb9BRAsppWWM8azKqwpuqBdQi7nCK/AhwACtz1AKJyXHLwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJVJREFUeNqcjjEKwkAURF/WDxHBExjYamtv4DmsTO5qThA9QdKJWirJsv9bSEDTiJlmYJg3zAKogADkwEUOZVXGGB9d257r+ujcMAwAq01RbJ1zQdQMzMiyLFfVpZgZAKOLqfKpN/IVTBtmU0QnyIzR38Gsp/bv6AiklHoR6UVVSSk977fryXvfAVQisg8h7JqmWb8GAJDqY/rl9HS9AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJdJREFUeNpijItP2P/79+9vjx89unLkyOFVTL9+/WIAAi5pGRl9JiYmVZZ///8zMAAxIyMj+79//zhY/oMEGEBiEJrl/79/DMgAogVFAF3F///oWv6haSHDUMICZLn0P6mGwjT8/fv3JwsLy0+wFiDn+7u3by7Ly8s/BkkmAGUiVFVV7S5dusTLCLRFGBSkQPwDiL8DBBgApSFphTgm62sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUeNpiYmBg+M8EJBjoQTADMSPD////pQACDACI0wRH0uIsCAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJZJREFUeNpiZGBgcLGxsS2WlZOzZmVl5WVhYmIykpaRsQNKcP369YuB5d+/f1wMjIxcf//9YwABFhDxD8qBC/xHF/j3/z+aAIaW/+ha/v2n2FDCAmS59D8JhjKxsLB8//P37zeQJhBmVlRUFP327ZsoOzuHBCMjIxvDpUuXBFVVVYOBKsuAChoYgTYwAhm8oFAHGQEQYABQ6FDZFd6uyQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ1JREFUeNpijotP+K+lrV0swC9g9+jRo5dMv379YgACXmkZGTsmJiYjln///zMwADEjIyPXv3//uFj+gwQYQGIQmuX/v38MyACiBUUAXcX//+ha/qFpIcNQwgJkufQ/iYYygTSA8J+/f7+xsLB8ZwJp+f3795c3r18dkpeXv8kIlGwAynxTVFS8u3bt2n2MQFukgIIgg74B8WeAAAMAKAhm4pQzrFgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiZGBgUAGCyQICAtZMTEy8LEDCg4+Pz+7v379cf/78YWD69++fyP///7mAmAEEWEAEUJABBsACMFmsAkwMaICwFmoIkGEtNVzKxMLC8h0o8A0mwKykpMT7+fNnSaCEBCMjIxvDpUuXOFVVVYOBAmVABQ2MUP0cQMwHMhMgwAC+qEtf0TB9pwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiUlNT+8/0+/dvBiZGRkYGJgYggLAQBJoYNiX4dcDFmF+8eMHI/P///1sAAQYAKxcLUpcjeNUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNJREFUeNpiUFNT+8+gqKj4n4mRkZGBiQEIICwEgSaGTQl+HXAx5hcvXjAy/v//XwogwAB2Swj9RrJOegAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiZGBgcJGWli7m5ua2BrJ5WZiYmIw4ODjs/vz5w/X//38Gpn///nEBZUCYgZGRkYEJxADJwAALTIZ4ASYGNEATLdQQIMelLCws34EB9A0kCMLMioqKot++fRNlZ2eXAAqwMVy6dElQVVU1GKiyDKijgRGoHGQALzSgmQACDABfaR58r+agPwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIRJREFUeNpiVFNT+8/AwPD569evR58+fdrL9Pv3b4Y/f/7wcnBw2DExMRkxMTIyMkAB179//7iYYLz///+DaRYkFUQKMDGgAZpooYYAOS4FCYAwMIC+sbCwfAebAQy6Lx8+fDgkLy9/E8RvAMqUqaqqBl+6dEmQEahUCqQIiL+BogMgwAAPLi475A3jcQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiZGBgUJGWlp7Mzc1tDWTzsjAxMXlwcHDY/fnzh+v///8MTP/+/RMBynABMQMjIyMDE4gBkoEBFpgM8QJMDGiAJlqoIUCOS1lYWL4DA+gbSBCEmZWUlHi/fv0qyc7OLgEUYGO4dOkSp6qqajBQZRlQRwMjNDw5gJgPZCZAgAEAjMsekNnyoBIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-pushed-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiVFNT+8/AwPD569evR58+fZrL8vv3bwZGRkZeDg4OOyYmJg8mIIcBCrj+/fsnwgTj/f//H0yzIKkgUoCJAQ3QRAs1BMhxKUgAhIEB9I2FheU72Axg0H358OHDIQUFhYsg9Q1AmW+Kiop3165du40RqFQKKPgHiD8B8Q+AAAMAvLgsezVKBIMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/segmented-control-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiMTMz+//v37/PHz58OHrnzp1cll+/fjEwMjLy8vHx2TExMXmwMADB////QRQXUKUIC5QDE2SAC8AAhgATAxogrIUaAmRYSw2Xws0ASnxjYWH5DlYBDLov3759O6KgoHARJNkAlClTVVUNvnTpEicjUIUUUPAPEH8C4h8AAQYAaEheCvo+JpcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFiklEQVRYCc1XbUxbZRQ+pS1toYUKjPFZBQaDZAiMkC1blG1ZnCZiZsyS7YfGHy5GEx0xfmXRHyZmMWp0OmNi9Jf+cEaNZGPOIm5jGWS4sYEY+RCGq3x25avf7e2H53l3by0DBzKa7CRP7nvf3nuep+c957zvVUWjUbobLOluEAENmpUKUbHxswDE4z21DOXPRPg+LCPEV9xzwFcWctVyz8kCQKZl6J5/6dXNFktRg9FofDCqIkOyVlvO8xSUpH5VlHxut/u8zTZy8tMP3r3C0wGGxIgsJ+i2QliEIsDwxltH9uUWWg5nZ2XeZynIp7ycbFKr1ZRhTmceopm5eQqHwzQ+aSfb6BjZHdN/TYyNvvP2m69/wz/7GBKLQZSWtCWFxEVB/8T+Jyvqd+76orS0pKp8QwmZzWk0O++ieZeXIpEIef3400Qpeh0lJSVRuimF7kk30Tw/MzA0TAODQz1tZ8888/3xr/r4MT9jyegsEiKLwPobXnz58CNlFRWfb6mtTivIzyPb+BT5AkH+aXkz6JKpMDebxsYnqLOr2znY13fw4/ePnOY3EZ3wrUu1lBCISHm28ZVHKyurv6zfVqfxh6Lk8niXZ1/iCVNqCuk1KmrruBTq7e1+6rOj7zXzY14WgsSO2QIhck4YHt93oGbHQ3tObt9SZ3b7JQqFFrwTe3mlA41GTUa9lto7L82da7E2/PDt11f5XV98ziilR/KSoDLStj5Q/0nNpk3mWZePgkFJ5ALyYbWAD/iCT/gGB0Mrc/LwZk8QA3lseK7xtQMbyzZUSdwyUAWrJb/1PfiCT/gGB/MZ4vlFQ4uPRlFxUaNOb6CAXA2KyrW4BlgMfIOD/X3H8DO3qCJladAx9fufPrg7NyenMBSOUpiXIhGAb3CAC5wMcMdavCjXvPz8XUlqDUVYeSINHOBiDpSzhxFR9hohxJhqrOKuJCKRSCHgEFw38wTckiIEV12yXm9B20ZiJdLAAS5wMoQGRYjYU1SkSsHpBLmRSAMHuPiCdiHyNF6IWpQcR4MzOZE6cDYQbYFJsCwLhAhiKRT0SVLIhNAl0kRPYa54DiUiWIuw2+kZ8wf85Xo9qipxxhwELmZAMoo8iBcizc44BnxebzkfdhKngj0zB4GLh+LQBDKxPnzF0S5w/drQRQ/vsuEwN7MEwstCbCPDv4JT5o41NITId6blx46quq1TRpNxfaKWx+/3k8PhmPrFeuoCOBmiVyhLI4Tw5NwfPVeOZ2RkHkrWJvPt2pvL6SJwsOc5xiIhKG0c4+aszU3NxaXlDRqNpthkMvHU2pnL5aLJ8bERcLBXCAGn+LASOSIf25A4TsZU6+nmo/Ypu4dP5Gu28cEXfLacOvEhOGQuHKj/FcKTMJQRQuX4s//3yx1tPx+7YbeHWc0dn0ngA77gE77BIXPFWriSI+JLiDuqEpWJzvbzVq6cpO07dr+QkZlpMK5ymdy8HDPT0772c63HLl+8YGUBEwxEPhYNHtOCM6uYUKnQVrEPrGNYCu8t3rznsb2HsnPyLKkpqZSswz61vAUDAfJ4PWSfHLdZTzR99Pf1a/jgsjFuMG5/eIZ7+bQGMTjKZTDyGAXbdu5++P7q2r1paeYMvUEvBGFP0srNT5IksYdAgN/nJ6dzbua37q6mjrOtP/H7o4xxxgxDVIqSG3wvbFFEMCuLQSKj1+Ogm8VYz1hXUVlTVVJWXpuVnbOR9yQtL1kOzxMvwSTvIZLDPjkwPNjf1dd7tYen8e+RmMgJLAeqZGUfWPxgzFgQxKDfIzqoZbMMiEtlQKiSZ+jOIMKJC6QoT8DFQBT+/ycnvxSzuOhAEBIEogCM0fVEC+ArKgCfgWjbIAYwvvOPcHYSM1kQDirIn3jEC0GHjgdSQfSJmKP/GPwDy9LPcQuXXBoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-disabled-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFRElEQVRYCc2X309bZRjH3x5O20MppQxcS4GhtCsQGKg4R5YtccFEoxmJJku48kajF+7CJUvmhVcmxpiY7GbeGP+AXalhUYcbYYm4sMFcNjdYurIJg/JjFEo5lEN7OPh8X87pWgu0uJ1kT/L0/HrP8/30eZ/3x7FsbGyw58GE5wECDGKhIBYyvS2O+ANwnBv3kVq4pjtPNWW8oJRb8rXTAQxx8aOTp6sCAX/QWeKsI12rVbJXkjBLKWvzxJSSV+TxcHgs9MO5b6fptmpA5QPaEUSHKKJg4udfft1cU1179IXKcve+mhrm8+5loiCwPW43PWZsIRZjqqaxyMwcm5icZI/nF2PT01MDX31x5g49BtD6TjBbgmRkQezq7q7sfOOtrsD+em9joJ653S4Wi8ksJieYRsIJRQEHc0gSEwjM7XRQGyeLU5t74TAL3X8w03elt6fn/HnKGAcCT0535YBkQFg/PXUm0NTc3HWwvc1e4/OxicgcU5JJLpzvR7LZ2D7fXjYZibChG7fWRu/e7fnu7Ddhei9FngOzFQiK0PrxyVPB1lfb3zt66KCgqBqTE4l82ls+dzocTBIF9se1Ie32Xzd++v7c2RA1TBEJijptWcNXz4Z4/MQJT/OB1ncPtbcJC9QFcVnm3YCu2K3jXcRALMREbFIXda1cEP0BCtN+5EjnOy+3tEgLcYUlqSt2K/7f9oiBWIiJ2NAgL8qEycwIhqj4yWenW4JBvxeVoGnqU0M8gVIZYiI2NKBFbsxBmxOaTgYou/9Ff4eNRkBSKawo6Z2CLakmGWJDg14aIVdJmxduZkbE7g8+rPdUectUGvWYE0xxig0NaBFIemY3TgBk9VbXviQIIu8SujbNoAEtEjCG87oBwuuj1OX00qzE68I0CgQmDa6VUScGCDIiSjapTKQxr9K8YaZBA1rQJOflYYAgI4LFIlg5AtWHmYbo0IImTqGVBcKHGrIhmAxC4aFFlgOCmyyZWkupqmrH4mWmAQJamRpGRrAaasvyyrKiKHaJxrqZRhoMWtAk5ytxFshidH4+kaittNmM2+bgJGgBhdZWICBT/wmHJv37GxqdTqc5BHpUgDx6ODYFTfJ0seAx0qNeuXzxUXQhSiv+5qbnyTqx+1V3u3cRGxp9vb9MQFPXTo8aUKF4lNGbw3fK3eUdNtrYmGHxeJxBA1rk0OQZySwG0Cm9v/aE/A1NDaIolrtcLrr17AwQszPTi9CgqACBJjc+TrH80RXI1shXLvVeGJyfe5yUaVPzrBY+xELMS7/9PAgNXUvTtTenV7oJ43VCx8T9kZHIQP/v1+lFLfEUuzOjThADsRATsaFBnq4POk/XCN/N0t5gne4hK8tDgwNhorUcPtb5+p7yCmvJ/+ymFeqOhcVo6mp/3/Xha3+GEVvXyPq82HbzTI0d5GXVdXVVbx9/v8Pj8ZUV00YYG5tCLEmT1iqNkNnZyNLFCz8OTo2P44NriRzZyNk8bwWCRQiORamYvJTcdfjYm4G21tcaS8tKi6ViiVltBEQVZhM3Rxd2X6iyVFJhyirNnEvLq7duD9+72n8ZWYiTIxOr5IV9TlBDWhn5dy5gMKqw0UV2SuBNB17x+ANBX4XHVyGKlqISp4vPfityXFbVjfXobCQ6Fg5FRv++OUvtUZRwZAFdzuvCKFC6TltORtJP6EQH4p+cdAkg9Asc58gYQI0VEqMOQvjHEMXwhBsAWTVB97NsRxC0zMgOBCEMBwQA4Xw/QUeMOhQ7HDCAggMQScDzbS0viPGmDoRLAEHcOGaCGPORceQEeCmf/Qt/gODdNKcAsQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-disabled-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpilJSU5GNjY/NmYWFR+fPnz51fv35tZeHl5fUXEhJS5uDgYPjx44f6+/fv2VmAArKioqIMrKysDL9//2ZgZGSUZQKqeAzUzsDMzMwAokF8JqCWTUBz7vz7948BRAP56wECDACARibFW62AbgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/slider-circular-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpilJSUlGZjY5vGwsLi8efPnx2/fv3KYuHl5Z0vJCTkysHBwfDjxw+/9+/f87MABSxFRUUZWFlZGX7//s3AyMhoyQRUcRyonYGZmZkBRIP4TEAtKUBzdvz7948BRAP5cQABBgC1gCaMj8SIGAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiVlBQ+OXr6/vP399fC8h2//jx4wEmfn7+c9euXXP48uUL+9WrVx15eHjOM6WlpZX/+fOHa926dRNBdFZWVgnj////2RgYGOSBmA+IPwHxQ4AAAwBD7SPhd4irzgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpilpeX/x8cHPzD399fW0lJyeXdu3dHAAIMAExLCKH400byAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFpJREFUeNpiUVBQqLW1tT0IpL89fPiQ89ChQ05M/Pz8z69du6bw5csX5qtXryry8PA8Z0pLS9vz588f1nXr1nmC6KysrF2M////Z2ZgYBAAYnYg/gnEHwACDABY9SRUSyy5EAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpilJeXb3B2dt4jJyf3/dGjR5x79+51AQgwAEsRCN8VvtvtAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHVJREFUeNpilJeX52NgYPAGYhUgvgPEWxkVFBTigAx+Tk7OV9+/fxcDsr+wAAl5GRmZ84KCgt/fv3//5fHjx8ZM////Z5aSkvqioqLyRVpa+itQERMTkGDg4uL6w8PD8xdoxB8QHyzIBJRjZmb+zwRRwwAQYACJUxySG2T8dAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/HUD/vertical-track-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG5JREFUeNpilJeXl2ZgYJgGxB5AvAOIs5gYGRkXALEmFxfXVhANxMuYgDL2MjIye1VUVG4A6T3///+3ZgISrFJSUi+Agi+kpaVfAhUxg1QyALX+5OHh+cnJyfkTxAcLMjEx/WdmZv4PokF8gAADANpxGPrplMnhAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAwxJREFUeNrUVUtrE1EUnlcmM0nTTJqEtiqhFMF2I4gIShduVGhdCKJ/oS5ciOC/UARBLUpFpRYKFbvRNpQKilsfUBdpG4htbEyTNPPIc5J5XO8ZJmFM0jZddOGBw+Tm3vvdc7/znXNJhBBxVEYRR2hHCs40fpAk2TpH2k47HMbAo+FwZHvTGlQz+9yI7uvr498urjwSfN4rHEOH3AzF1nSzrurGrlwsL9+YuHRHFMWqfYjZhgKntCQVgLlnM3OXV2MbSiqVQhgAlUolVK/XrS+M4X+Yh3Ww3klxE7MFnOrv7/fOLryfXNuIm9lsFqmqiqrVKqpUKqhcLltfGMP/MA/rnr6avTY4OOhpHNDAZFo4Zs5dGBs4PXLycTAgkB6Ph9A0bc+Eeb1ea9/5s2dmBEE4lU6nNWcOnGqhIpGI9/bde1MBX4/L7XYThmE0o+jkMM9xHBEWfL6HU9MvAoGAxw6yTYp0MBjsDfX2jLEsS5im2bXDASG/7+LQ0JDgFImTFhpfU+BcNE9RlLWpWwMZcyzNw348zHYEZxiGJwlkXesw4NYBiCBdLhdn10MbuFUwGuYRuITouzVYr+k6wjegnZw7wa3KK1VUtVarcZDQbg3rnyhV1RpOsuGsVmd4hq7r1d/pTAxr+VAJxfontrbTq1i2ql2t7eB4kbww9+aBKBcMXIldAReLRSK9K1bnXk/fh/17gufz+UIum02sfPr8UpRkBBv30znMS7KCotHok0KhsLW5uQngeifOzWQyWcaVtv3l4/K8LObL4+MTtwZCGgc6xkogGhKFqsXlT+zsSurS0uLUzx/forlcbluSpIqT89aE6plMRqJpen31+1fzV3w9fvX6zcnI8WMjPR6OZTC4jsFx0uvJ1J+1D+/mn8uyHMPAcfxVHC3YlqfdtBz9HKhiR0dHA+Fw+ITf749g/Q9g78WRszjyOk58AfuOoihJiDgWi0kgmkbbbWJ2AG/2c+gVw8PDfp7nA1BgdoFYqsImJRIJxabin35+EHjrS8R0eIn0g14i8r99/f8KMABYnUshETxaoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA1VJREFUSMe1lWtIVFEQx5fMB2WSRmQFIhQVGQjSm5JIJFRIyzQypOiDYBBZmq0PqKwwM0W38LX4WB9pobuWpi5ppZTiquuT1LW1NM0KMqIH2Zdp5jZXdu1eti99+DGcmTn/e87cc+YoqvrfK2RYhDggSxFXZCWyiq0r+x04T1JDTtSRBTwQb8QXCUAOsvVlvwfnOUp9ZKGwPeLCk7Yjocg5JB0pRMrZprM/lPM8eJ69nDgF3JBNSBByEalAhpA5BCyYYz/F45FAZCPvwn6h+GJkOeKFhCPZSB8JFXeMQ07LIGQ1dMPN2nbB0pj8/CEjkoEc5g+4iCUSxZcg65BDSA4yXWGchuymXihpHQT90BQYJj+DafaXYGlMfopTHua/RjJ5x1QiJ1Hcjk/AXuQKMlbWNQmp2ueg6zZD38ef8GL6BzyZ+A6N498ES2PyU5zyKnqmgHeqRHZwee0U/KfXI5FIfVX/DKTp2qG2xwxP33yFOtMXWShe3WmCjPousUT3uKyepEviy5BtSDIymd86DOpmI9SNzoJu+JNNKK+guQfy20ZI3MQ/2AdxJvEViD/XGm7gNks7xuD+4Id5Cp4Ngd/xaFjrvUuwNLaM3+00C/N49SpkP+mSuDsSglRSMLGkATSGSfxR7+bZFxENG/zDwSv4lGD3HI2yims6JyBJ0yiKV/BlcyfxNcgRpIaC5/O0UILilmwJioStJ+JhZ9QlwW4OiLCKF6N4bL5OFK/my7X6r5XH5msht20U1O3meQLPXhOEd0dfFeyBMylW8dzWEYgt0Emu3KrmyWV6SKszQE7r6Dw0Dkm6LQiTlYrTPKmaW56Wt1lNRogvegSqlpf/zIXCesjW90meFqtzXtk3AzG51ZBY/hgy9AM2UWqaIAEPgdw5F2+oL9/QV0VYx6hbGojDFaU1GGWhOOVpDBOyN1Syt5TihDj1AzitqoKE8mZI0XbA9YddgqUx+Sle+kdYtrfIdcUB2momdsGYvBo4maqGY5fvCJbG5OdS9Nrqigp+siz7uZJraFrQy0VMHFdyvmw/l3qJqHZh/PdVfH5r2KrYH8Z5Nl8iyzfUiXfhycfKDwnmmxfMYx+Ou3G+zTfUEjs+ps580dy5Vbjz2JnjdrKvPwD8N34D1L0Qnrdlo6IAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAs9JREFUSMdj+P//PwOtMMPQNxwLYARiJiBmBWIOIOYGYh4ozQEVZ4KqQwGEDIcZylM0aWlU/aJti1pW7rvQse7ILxAN4oPEoZbBLCHKcJBCDu+EHLX6xTt2Lj185f/hm0//X3/+8f/rr3/ANIgPEgfJg9RBfcJEyHCQAs7Q3GqLpuV7X++4cO//3fe//p998f3/wcff/m+//wVMg/ggcZA8SJ1HbKYOsgXYDAeFHZuAqIRE9YKtV3devP//6OMv/zff+ogTg+S3nr3zv3z2+j1AvcLQIGLEZjgzEPMlN04qWrj/wv+tt979X3/9LUEMUrdg//n/SY0T84H6eUGux2Y4GxCLF0xedmTpyTv/V11+CcezDlz57xyd+V9a3xJMg/jI8qvO3P0P0gfSDzIHm+GcQKxQPGPdh4WnHv1feu4ZHDtEZf5Xcw37r+2fBKZtwtNQ5BeefPgfqO8tSD/IHGyGg5KVWtGMdf8XAA1Hxjresf9N4sv+W6TVg2ktzygU+flAwwunr/0N1K8KMgeb4aDw0siesOTj9EM3/88+dheOvfJbwAZbZTaDaffcJhT56Qdv/M/qX/weqF8dZA5Ol8c1TDrdufnU/2kHb8IxiB9QPRlsMIjGJg/Sh8/l4DB3jc/rLJu39f+kvdeIxqVzt/x3jsluwRfm4NTCys5hGVM/6UHVkt3/e3deIogrFu74H1rWcQqo1wxfagGnc1DQqBhZJUQ3TPlQAnRR57ZzODFIHqROSlU7DKhPBV86Z4S6XhSI9cTkVaL88hrOZk1a8b9yyZ7/TeuO/2/ddBpMg/ggcZA8UF0EUL0OoRwKL1ug3tMFYhcT7/B+n7z6S2HV/Z8jG6b8B9EgPkgcJA81WIxQ2YJSKkJdAvKqKdQQPyAOhNIuUHEVqDqiSkX08pwX6ipQKgAVrRpQWgEqzktqeY6tJuKE5gNeKM1JUk005CpoACn7Zz8845ivAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-arrows-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAGCAYAAAARx7TFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUCFtjcMlpNnDObv7mkt383xmKQWwwzgGK5zQbM/z//194zvrdM5AkwBikePrq7bOB8iIgRSCsXDt9+VaIZBNYUeWUJbuB4qogeZgihm8/fpintEy/ADItoXHqtW8/flrB5OCKgJjx4bNXQWmtM87defw8HMTHpgiE2YDYDYjZkcUBl+OOeCK3v4cAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-arrows.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAPCAYAAAA2yOUNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANVJREFUKJFj+P//PwMMu2Q387jkNK8D0kLI4gzIHLfc1s1ARf/d8lp3Omc3M2MoAgo2ghQAaTAGsrtQFAEFQpAkkXE4WBFQwsAlp+U7zBSwJJR2hYgbgEwSBuIkIE7DgkHiwigOx4WpqAjkMKCDv7lkI3k/G+74b0BsDHb4nPW7ZyBJ/If5dPrq7bOB8iIwI5Vrpy/fCpFsAiuqnLJkN1BcFcVN3378ME9pmX4BZFpC49Rr3378tMLmcMaHz14FpbXOOHfn8XNQSDPi8h0bELsBMTuyOAC+nGWQKm0f4QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-disabled-right-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXlJREFUeNrslkFLAkEYht9d91hgrORCRKeCiqJDRGK2GIVYxw4d+kf9g/5FHax/YNShW9ohSINyRTNZ01zdmW1mV+3mbsVslz74mDnNM+837zcz0slZ/hRio8kyzzKnUEpxvLcpjNSxetFi6WX//smQFcdxUHi1hMEUWUJc01AsV5KuMkodYbAeW7vHRsaZHMAoRAdnuDASJixEZQSEhAEjUDiIsIno4Jw/UBYC7EuZTxkbjQYucxeghGDYkdJgjCgRZLJZqKrqq0wmhJdxfE6rUzg62B1BJMmbcPBhJg0tpiLIOrLbZ2R8diwbEzENO4l1D+J4+vSNNUTjM2hbfd81XOsPqX7x1iZYWFqEUauj8FDC/NwslldWUXvvBjyzkfWDGaRqdqGnkqyMEra3EjDMD7HWN1oW0noKz80O26TzPet7d2Pwpub7eqybP7uuvDMLo88I/p+Y35XQtjmjJfxbYPf7qFcrHHblfnjubq9FCuPWvWF5/inAAMMzdZSyHBqHAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAghJREFUeNq8ls9KG1EUxr9JZuGiKcaJNdCFSEoWCl1YqEpaaaoitILg1idw2Tfo2jfoW6jYRcCaukiqrUg2bUTI6KgYrY5ObDPJJHMn3juJ/0C8c9tOD5xkhsydX75zv3NmpNm57Af4GwbNLM2PsuM4mB4b9I1kWrX2/M7Bm83dw4DcaDTwQ7d8g8kBCV3RKPJaMeEqc5yGb7AavXeNflNOqAVz4HcwRoB9EIGsWhYWFhZRNk2hdYwjrCyVSqFQ2IZNbExMvIUkSSLKCAhxPOXq6hpUdRvs/pqmIZPJel7LOLJ7Qg94oaoq1r+tN09aYnK5HJSIglgsxl3POPKlsvtC13Wkl9NNyE3j0uOVzysIhR5CURROGS+VcWBd9N+/fzeDu7aHtin2S1VYtuNRGaeMZo1g67j+l9Z3lbEyEt/7jDFc6/PK+K+a2pMywzCQ/rQE2759HdvDYDCIV69HEA6HucoCTevfn51KGFPjySvXSy0Qi8nRYTyKdPCnCPHY1OVqHW3tnUgO9F/TaLx49hQPIlH3d09N3ZyNfIOclivoicdxeKJjs6DhSfdjxHv7cHReEd0zbwYpGiYSQwPuPEwMPsf+WVncjSKD+KBUwcvEEPZOfws9B6+mPhGAsSIUfpb+zPr/4+FJbJsxfvn+WmDX6zg5KjLYF/eF5/vGmp/Czml+pTl/IcAAabQiHJYP3UgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-right-pullsdown.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXJJREFUSMftlk9LAkEchl/30KlDoemCRUUopBQeQogSsYQOHTp0iM59jLoEnTr0EUztC/Qpgi5eoqBTFyt1tULR3HF3ppndJTrlWMx2aeHhN7uw8/Du/NnRTi+vmGKqnBPOmEYpxf5mWhk766lofDp8yD3HGmMMdy1TGdUeENF1cM+Bk4xSpgxiUbwR8Dad8mT+4MhsH/iU+ZjMhm1T5QiP5twIoWrsP0nmE26yIRhNA+VSCcVCAeceRY+LcgkNozG0Dy+Z+IzfEw5OYm87D3EFBAG3wXjZ3cpBDwUh04+7zobE75kWxkM6NlZXXAljjjibTmEiEkXXHEiMGZVLJnjt9hFPLCKxMMd9AcRmZ5BcWsYLfy7bhzf15ai3+8hm1pCMzSOfy6DWfpffRX4y9WsdE7ksF3XI6FPf3RvlFyexLDw0204d5b0vY+bHOrPx/4v5FQNCRDXUHwtMgvrTo5AVnQPPbeVaGfc3lVqr8XzGPUcfblj1AECuvN0AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/popup-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABsAAAAYCAYAAAALQIb7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfBJREFUSIm9ls0rBGEcx7+7Bzk4eNlli7ylzUtJFGkRUY7KzdmFcuDAhULtycHf4LRecpBc1sHLgYi0JcqupS0WszteYmftrJnxzDPrLWWeofHUp9/M8+s33/k13+d5xjq1tK2YzAXBTUizyrKMnvZ60+hqqsl3FuSOEp1Jq6IoOOYTpnEhAHkOB4hOL+1MlhXTEF9k3Isg17I9JfY/UDHJAM+JBJaXVxATBEN172JG8Hq9OA0GSVyFJElGO5NIkczEzs4uzs7OYbEAoVAIW1vbzLWqjpXeqII6BE4D2N/bBxS8D5/PB3/Az1Sv6jB1xnERrK+tAxZ8HUR4c2OT5tk70yHPloOJoX64hwfgHhnQYup6fLCP5lmeo3WmgyAm4Y884oT7jjqv5vWekepMwn+hrTNGR/0Fan2WN+J5HosL85jzeL4wP+uh89FolK0zzfo/Y8/JQndnGzWg5Y2UM7s6WpBry9bfRVitH3tOIj3TjraG2g81MprqqpFhc9A8k/W1vVHfkbexOEqcTpSXFtH1VVaYD2dlFfinOFP9p2/G9pGv7gW4GhtQUVaM1mYXwncxAyaRjG/E4Yc4ml2NuCTR9CNGfJEQ5B5oNP2I+Q1JUVRjxPzfgoSIm/ClKjZDf3iODnZN4+Tw4JrnrqaJztgraPK+AKe0hD8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqUVLuO2kAUvcYGgs3yCi+zCYhiSzZK42xDScsPJKIhFV8Q8SF0NGxER4NQ/oBmU0SQIiQFQghjBApRADvYPJx7kb2CrDZiR7ow4/E5OvfM8TDwcDDNZvPa6XRmHA5HkmXZy91uJ+/3++Fms/maz+e7+I55AjheVKtVfyKReBeJRK5DoRB4vV4QBAFUVYXVagXz+Rxms1l3PB5/LBaLv20ca5PVajUxHo9/SKVSyXQ6DW63GxiGAcMwANUAz/OA5IDqYqjqJpvNfm61WjqBOfrJ5XJcIBB4j+CLcDgMmqad9Ift3M+j0SiYpnmh6/pbXFaoNQepKBQKUiwWe+Hz+QA3D6DHivaDwSCg6gyqvyE8KWHRRIn63263cO7w+/3gcrne4PTuQILjJRI9iQS9IeAl4YmEwR4F2ngKCQ00mLfbYbBPDYvnOO5sAswMndwfm8TEHMiLxeKKjD13LJdLyo9C+AOJoihdURSvKAvnDgwdyLL8hfAUNqbT6fyUJCmD5no9Hg/l4L81mUyg3+9/L5fLnxCvE4m5Xq9NJBhh0DK4dlHUHyNA1TAajdRGo3E7GAx+kT127M1er6dNp9NvGLoIuv7cPkaKPplIHhABKvhRr9dv2+32hFQQljn6EInQjSWUSqXXyWTyFXokYhZ4TCp+CZoyHA47lUqFfFCx1nTKxyT3GaJ2sJ5Z/5z1jF6mEBkW2LCePbwK/lHFWnPGuj+odlad3Cd/BRgAYjwouXetfmAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjNJREFUeNqMVEurUlEY3cfjO5PjO0UkCCKCiqLxnTnpktUwCidySRz5K/wJRgMnDmxkkdWooBo4bdCFi83UUkFS8/3W1pJjeL3FPR8s4Xj2t/Zaa3/7SOJsSYVCIWIwGA51Ot0dWZZvLJfL49Vq9XU+n7+PRCIFrFmfath9yGQy/kAg8MLpdN632+3CYrFsMB6PN+j1eqLdbr+t1+vPYrFYY59Eymaz1zwez2e/3+91uVxiOp2KxWKxgV6v38BkMolWqyUajUazUqncjcfjP6lKT4ZwOGxSFOUlVHi3C3eLRKzBYCDMZrPw+XxebPIcfz3kax1+dNFo9Aks3Fqv12I0Ggn4/y/4HlkJt9t9CPVP6YJK9AjxMQIUCE5oKQQt0COMRiNJciQxgOA2d9nK1lJcj76b7CeJDBtOWuEOWovrQaSwnyQSQurAioNetRY3nM1m3W0m6+FweIzADpi81ppMJgJ9J9sjXuLc3zkcjgOGpbV43LVa7RX7OWxGzMilVCr1AcN21WaznUvQ7/cFpvZTMpnk6fySKQfSVlDxDcN2D89WHN0muH+h2+2KTqfTyufzR+Vy+QedyeplWpVKpU6z2fwYDAavIODLbJAk6W+IzIB3Bwq+5HK5o2Kx+J2u2Cvt3CEGchFwJhKJR6FQ6IHVar2OWVBA8hvBn1Sr1TfpdPo11vBe9DnyFCHt2WXQFpXsAmDiHFAMMAWGavNYJTj7KdhTZVAJJNUyieYqTn1P/ggwAOPnK9ASMplRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAutJREFUeNp8VF1IU1Ec/9+vbffO2aabk63JJvMrFEeiVj4EFhI99Bp90FM9SL1G0EsE0ktvgQlJD0kIRkT4YPQUBD0kCJImpuGcc6tdt7ldN+/u7rn3ds7YplPswu/cc+7//H7/j/M/l4LjD/Vkai7Emcw9NMv6aJrx6roW0xGKqkVl6emdq4t4j1FDOLwYfTZh97S23271untamhzgrK/DsEJSymPkYEvchY1YYim+sfZ24vFopsJjKmIPnr/2NPuDjwY6A77e9gBorAV2EQ2RPRWKwIJVECDocYGFY9ySxp5r6+1fWPgyVyBklgwdZ89zDrf37mBXwFbX4IKVHbkmP0nVQMKf4nje0NgEfW26rbCfv4WXLzEQiYS68XBsqKcjOGRpcIOkINAN/UTkixowFgF4xmjyhS6k5z9/jJJIWJNF6GeFOsgratV7JrUDM5PjsLq8CJ3dIbh+7z7YG10lm4oABFs9cGZ+EC+/03jgaIY7jSgTqDjsCqZfjUNUTIHd31V6T028qLHLGgsUzXoJn0TC6IYhGCUPqBpJMpuDeo8fWDMPSJEhLW7X2Ml+zOMJn4hQiiLLckHmWZatbmoJdkBaVoHGW4iQL9iJRQ7SRSo+NUUmp0ORdIxcZjchZbM4TFTFxcsj0Oxygq6h0nt45EqNXZIkyGUzIuET11piK7zi9gX8PC5u5SHz4eFLNUeNkHaQrijCn/D6EuGXmi26+iPb0t3XzZjMgpkXQNf1/yIR34bN1eXw7PjYJ0zPERFDQ6qBmydldTZ3AUVxvNV6Yp8QgVhkQ/724c07Kfk3gflKpe31VDyyL0Z+bwoOl0s3wE6uFVUqGQVqUYUcrkEiFoXNX8uRrzOT7+PrP6PYmCdc6tBFJPWxYTgGrt0MuQPtZ3jbKSfDchYcaUHeyyYT4bWV+dlpcovTJA1SJpIJdeQ3QIQsZTErhrnsgLSFUva8h1EoCxz/FRyJiivf8ooIORq14v0w4Z8AAwCwpYb8ccIJGgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvpJREFUeNp8VF1Ik1EYfr+//Tg3N3U457T5tygUc5YgdBlRCRZ00Q/VhTchdNOFN91EIN50HSLRRUGCSWKGo7wJgqikMIoiZ6nT+bPcj9v3uW/fz87pnDGnK+vA830c3vd53+e857wvA38v9vajwFnBYOxmeb6dZblWhLJfkK7PaqoydefamWfEB+0lMHs3fYNDNe4G37DXVdntqbRBhbUEykvNEJdkiIlpCEdTsLQRnVpbCF4futW3usPjdoLduPugxeVteutv8hxpdleCKGuwGhfhWzgGUkYFgeehweUAi8ngk7DhanPbsScfXwVSlMzTz0F/l9lRVTPS0Vjj1DHAu2C46HwxUc8pWYjEodpRCm1elzOT3h4mph4ClSphL/UP9B5qPNArKjokiHSM8T+RSiugZBFU2CxNdf7jyzMvJz5RJUaDqeSioumgIa2QPbWVgBdPR2HpZxC8jT44df4C2OyOnE3P6lBqFEAwmq+Q7WOWfEwsJ7RJMgmioQIC42OwKWXAXn84938+Nlpkj6VkYFi+lfKpEgFhbEc4Cyi7W4dURgOb2wu80Qy6IoMYWckp2FmY3jPGNsqnQVhFkZOqqpaxLFtwqq71goR5YDk+F6i6rh50fTcIQghURRYpn7KQtJWYy2QU4pQtoN3vJ2/EQtTpUG61wNGOjiI79ZeSW/OUT5VokeXF6bIKZ6eN4wqZjCYz+Ntaiq5az+6eV9pOw/rifIDyKYtZ+f55vaG96zTHG+wcCYQQ/i8kaRs2wqH3k/cGBgk/SoMQxRomj2fJ4fGeYFjGxJNSYYz2hSSJkEjEk2/GH95MRTfmqCguX2g9thba+hX6MVPmqm1keIMbY4aQIAdaA0VRQRRFiIRDH16P3u9fm/86Sx8z5TJ7GtFE4CTwdPZcPldV7ztptpY1cLxgJUpFWUwuRBaD0zOTIxPEZ4Vgk0ChIpg/xoCBwJYPVkFgyTcpreh2PjMl08ZT9x0FO/OEXk5emZDf0/lBeyKTz140T34LMAAJdqAwng0CqAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image-selected.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlxJREFUOMtjYMAETPWLtgW2rNg7p23NwbMd6478AtEgPkgcJM+AD2S2TZduXrF3y9LDV/4fvvn0//XnH/+//voHTIP4IHGQPEgdNv2MOd1zdZpW7Hu148K9/3ff//p/9sX3/wcff/u//f4XMA3ig8RB8iB1ac1T5EH64CaoG1ly1S7acWnnxfv/jz7+8n/zrY84MUh+69k7/6vmbd4B1MoGD4OcvgUZC/df+L/11rv/66+/JYhB6hbsP/8/t39hCiyMOIumrTqw9OSd/6suv4TjWQeu/HeOzvwvrW8JpkF8ZPlVZ+7+B+kD6QcZIlgyc/37hace/V967hkcO0Rl/ldzDfuv7Z8Epm3C01DkF558+L94xrq3IP0gQ8SKZqz7vwBoCDLW8Y79bxJf9t8irR5Ma3lGocjPBxpSOH3tb5B+kCES2ROXfph+6Ob/2cfuwrFXfgvYAKvMZjDtntuEIj/94I3/2ROWvAPpB7skvnHKyc7Np/5PO3gTjkH8gOrJYANANDZ5kD6YSwQ9kouby+Zt/T9p7zWicencLf/dEvLrYWHCyc7JrRtTP/l+1ZLd/3t3XiKIKxbu+B9W3nUCqFcTFjugeBZTM7WLim6Y8qEEaEPntnM4MUgepE5W08AXqE8EOS+xA7GCuKJakH9B0+msSSv+Vy7Z879p3fH/rZtOg2kQHyQOkgepA6qXQ06xDNA8wAmVsDLzi+ryzW+4EFbT/ymyYcp/EA3ig8RB8kAsC8QcKHkHCbBBnQjyqw0QuwOxF5S2gYqLoLsAG2CCukoQGn0SUFoQKo5RngAAHC8qpFnABTYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/radio-image.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeNJREFUOMuVU7tLqnEYtigJpJJTS0JtDUHQpEPnDC7Oxz8haHNpqk1cxUkELwQuOnhbVI6oIFGCoiAYitfBQVDMS4LgcM7y9j4fvw+62Onrg4eX9/I8v4ff7/1Uqo/fWjKZ/J1Op2+z2Wwll8v9RUSOOvqq/31+v/+Ah5OVSoV6vR6Nx2NaLpdSRI46+phbxV8LBAInPPDUbDZpsVjQfD6n2WxGk8lEishRRx9zPp/v8I0rk8m0xVYf2+02TadTGo1GnwL9RqNB8Xj8D1M3ZI31YDB4WS6XaTgc0mAw+BKYK5VKxO4vZDfqcDicg3q/31eMVqtF4IEPEU0sFpt1u13p8pSi0+kQ88bgQ2QnGo0SRL4DiEQikX/gQ2SX7+S5Xq9LFpWiVqsR8ybgS074uR4KhQJBSCkwD57sRGOz2a4TiQRVq1XF4Ccmq9V6Jd+JWqvVHnk8ng4vkbSVXyGVSpHT6bxjrk5+nXVYMpvNJq/XO4Uj7MxnQB9zRqPxnHnbr7d2k7Gv1+t/ORyO+1AoRJlMhvL5PBWLRSkiRx19g8Hwk+f3Xm+sSqipRePYYrHc2O32gsvlmrvdbkJEjjr6jB/i4JV/9IawqBPDp4wzEY9Fffu9g5V/tHClEc+3K6JG1D+c/gLaLHWQM6f6bgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARxJREFUeNrcU7tuhDAQ9AtQQBQ5IQokCkDi/7+Fz4CChgiO8yNjb8idTiKPMpkCY+3s7uzY5uM4SimFEDJAHOABLMBa65zDV/jFOXYOF6J3tl9D9hnbHvAd7QPOeMZYrbWKomhdV8Q4h9p7AolGggkICUbFcbxtV20MO6by8zqHDZShuNagGuqjEL5cXqdpQiOywDcQEpkYBJxQ2CklEfJsiCnLcp7n201j2GCg4YyUWCKQPPWxKFUUxbK8bdfNoDW3UAL3JQJelyPH1KMJWZam6QtJJMaTs4L9Bn+VrZ4uxjAMy7LQNs/zvu9Pa8PjruvoAuCEmqb5RkmWZVVV4aeu6yRJvlJCAG/fd9yFH00JJW3bfj6z/3A67wIMAMmK0TcxpouqAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXdJREFUeNrcUs9PwjAYXbt2gIpHQzDGg1e8YkiEAzGRi/yB+Cdx8OTFRKPyQ4MSYWNs/bHV1y0SYoLEo74t/dr0fa/vaz/S7/c9zyt8AXPGGOfcdV1KKSEkTdMkg5SS2phaOBtgjMkTtNYZG1HbiI1v1BVPKRUsQpYYR0pFqas1zxNWyI5MldbSQk3e3pnLiyL0IQOjcIwBc0JoagxxHOTHgBDQfhqMWaG0Gy38KI4JJSgMxCS1haA+2IKHOIqFFEEQDsavVumgejR8vM8kcQNGeQq/ZRtj2VZa3NzeYWnZhWLp8Phk8jIMF0tcEM9AM+1EJzM/eHgehcsITJbXzj0PJ8w/pkJEWmnJpEtdofQ8WEymMyFVTmPr97Wzty+8Is6NhIjjEAO+dQJ1foO/ymbfeqjXux6ORvmyWq1etNsbtdHQ3e4VGsa+AOet5vkWJ5VK5axex6TRaJTL5Z+c5Gi1mr7vn9ZqUortVcJJp3OJrvo/r/MpwADuwwM0qCfRHAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-down-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrcUj1vwjAUjB0nLQSK0qUfKR1Yy1IGysgIKwsj/4g/lnZlZ0ViQGocx3bsnhOKKlpadWxPkf3i3L1378UkTdMwDM/egZgxFgSB7/uUUkKIMaasIKWkbjcO3glYa2uB1pq6CLt2Knw4oh54SinkZqgopaLU1zqoBQdUJY3SWjoozjmLotZms0EayOAYC2JCqLGWeB70AigK5MbOOp2L7XabC0EoQWMglsY1gv5gCx5ELgpZ4AwChtN+/yF9fuE8ryZgVajwOLa1ji0EKjSbDdR0ddvt9tNwuFqtsleOAQUVaJW71CWhXiuKIAaT1r1DOhg8du+7mHHO8yzLUArURvP8Mo7RUk1jH+d1l9zeXF/B9H6i1eywHgjU+w3+Kpsd3aHlcrler+vXXq+3WCxO5saw5/N5PV1c9Nls9oOTJEnG4zGCyWQSx/F3TmpMp9PdbjcajT5f9y+6hBP4gav/83feBBgAu4vyDSWkLFcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiWrpyHcP12/eZXr15x/T792+mX79+gfHPn0D86yeQhuFfcDmgOmZWLl6AAAMA0ScnvzgM/74AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNo8ybEJACAQBEG8/ltSbEILUMz99O8eRAOzZTblUtOYC9sMEQGSkAR3viYdfo36TyG01o8AAwDxoyq9365oKwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVZJREFUeNp8kr1OAkEUhe/8sLvCgIPgClYUGhKjhSE2FmJrYWFhbCzURKzUWuNrWPgcPoHhDeyMMTzBEmBlZ4R1x5nNYpDInuQkk5nv3ntyM6jZbMKUkDbWpnf3DyeU0kOM8ZZSqm4e6QxIL1tX667rPjKW32eMgeM4safhGDw7v6iXy8vtUqnMFzmHMAxhrC37/T+wGW277spTcanILdsG3/dhVjTpmrm+uW1lc9ldQigIIeA/0aSrRQg5NnWj0QjmaQJnhJQbhUhpeJwOc86d4TAoRFEExmkw6vV630EgPqUUTMdJhZWx/BJvg4HfyLFcKmzmhjKQz57nNWy9tnkitVrNrI50Oh/vlerqns5cNQWT/NM28O+foJS8IoSPFCjbsZ25sMkN3a7nE4JfdO2mlLISd8EojhCpCFDy61CSf0E7r13YbuycZizrQJ/XlIrv4EeAAQDMloUiXiKSSQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWZJREFUeNp8krtOAkEUhg/LKIRGwAZ8Agpbe9/AN5DCzkvvE6hPgb0WJDYW3qiNRhvUGBpZIZpw21mX3bnteGZZ0BDXk5xszuw3/znzz6SurhsaAELMZ611UwhePzo8qGMt43XzP4pU2+4go4ExBkEQgOu64HlfjW63s3Vcq9nxpmiDNXIccCgFISUsZjJQKpWgWFxeL5dX7jar1QoyxIgamCilohbTr4+ZyWYhny8UpFQnWK7F4yhLCAHz6fs+pAmBXC5X2d7ZqyK4YNQtie3/Ss45qDAEQtIbMWwRzgUkBZ4bGOerM9i0TYoQlT1vvBQf0sA8EeaT+enMDf6Psktd4/3L1GcihUyEB4MBKo/Pp7eZOLMBh6Nh6+bywngtItjYNB+9Xg/6/b7z+dHdxXL8A6sJbMYJWADUofg+6O17+23fttuvv2BNms2nyYtKgaND3RKcnT0+3J/iknHBxWTxdcO3AAMAyTPqDXZdVhcAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAV5JREFUeNpiZEAFjEDMBMQs8xcvD2djZfNlZGLS/f//vzpMElkhS2tHt6qsrOxUAUEhBwEBAQZubm4GLi4usAIWZIV1jS3q0tIyhyWlpAWERUQZfv/+zfDj52+GL9/eoSgGWc0uKyc/U1RcXICdk4vh3fsPDOiABWoq64TJ09J4efmsmFlYGb58+cqADbBATWVjZmYJZWBiYvjx4ycDLgBTzPr56zctob//GX7+/IVfsaioGMfHz5/5/v77y/D311+8ihlfv3719/NnoEu/fuVhYWHBq/g/CH/79vXmu3fvjPn5+fEq/gfEf75++rz52bPnxhwcnDgVM0ODjvnalYu35RVV7f79+ycJirG/f/9iYGbkNAF076X/jMyBQA3s2DTAFIPczfDyxbPPLMzMB4HhrfP16zcJsCmMkOQDNACekBih7gc5mBeI+exdPGPYODk9//9nUAFikBgDQIABAM09iIFDDek1AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-knob-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAsAAAAPCAYAAAAyPTUwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAW5JREFUeNp8ks1Kw0AQxydhU6sGxINUPVQUDz149e4b+ACCgl59AEEsehc8+AaFHvzAghfxIuLFIh4traalh0KaVpO0zYfm29mYlCKkA8Pu7Px2dvc/yxQvbgIA8NGrEPgVy7ZKu9tbJYzdaJ3mQ2OqQjNAA9M0Q1dVFfo99bHREPZO8ketaFO4ge1+KfApq2A5LkykJyGbXYL5hcWNleXV18P8cQ4ZQotSmDiOEx4Rj9TSU9Mwl8nM2q53ieF6dB2PtW0b/ruuG8CSFPA8nzs9O99BkKPVCU0mmev7wKW4TZwW6OHEspLhIGDAMH/WososQakSYc/3YKBpM9EjEbaSYZrTdGMwVGMcrCgKaq/XYp3H3lmSOqBrg7u4m4lqSJIE3W6nfl0sUK2dRFgURWi32/1WU9jH0BzCox00DANkWYaeqrzUa28Hwnv1YwQOyHO5/PejGKaPv65uf5u3Tw/3V7hEVdCoKFG74VeAAQDaxdSLiOs7LQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNJREFUeNo8iTEKADAIxEL9/0udRUSF9pYGMuQOdz/CzCQRQWZSVXQ3M8PuftXa338FGABp7SMpb2OFxQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-horizontal-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAPCAIAAACqfTKuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUeNo8xtsJwAAIwECMr/0HcyJRS/vRwEGoKiLik5n/mxnujqryJiLcHbvLzNDdjwADAARbDu/0NmM1AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASVJREFUeNqcU8mugzAMzFpx58KR//8jbiAOoFZtD6AHElk6JEDdBam8iYSSGI/Hjs37vmfHMQV4j63nEdbaQxTG2vvtbq0RQkopAge+TB1jMeZ8ucBVyRkiIJqUD/p+Af68Xm8zC7AS4XiY6G8YnHNKY82gcgDhv2Ecx6Io3i+HESoiiyJcEV8UNU1T13XMhd5DzuL0Wp0lNZjpuaqqtm2xQfDoTK0iMMhVxQsRDYvK5XmeJMmmiFrnyjLO+BO7RNjDnGVZmqZlWX4QSc/CWi8pF++6jhLTaHCgqZkApfTppD9f7b3Y8biFolZUzRjrnDUG/uimZ+DdPtprLq3VNBlwOYfZ4iFfEQtyoCE3LheAMY26F0UY4n9Mv3PLO+A7V4rzhwADAFzx4BgPjY4eAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAY1JREFUeNqUk0tPwkAUhUvn0dJpBTHqVv0FsNWYaFzJX3ZlIgFZFgIbE6MxRCLBWA3Q0nY8bSXC4IOedjGZO/P13EcLV9dNLb9kHBJNMkoY1Qkhuq5Tx3FyIaIonLyNia4Z3OCcUUp1HaACjaIoF+XjdYT7ppE8nCWgQio6n883B028MSiWVYRMw2CMISlQEMoBisKAU2pZli0EQIbBUR3sf4H8IFi/8+Z5jZtGvX65vEm10CiaAqTUUWbnO+r7vkJx3c5tu43vKCFLIC3GOOMww3lWnV9BzVar1+tjgaNKiJUF46lYwqOUrIBms5XTtWrNNIuu60oplVBWDggZoeMokOJoppw+OjzY39vtdLpKaDr1hRCa1GIpNSkLCy1Aa59NdgmtVatKaDgaV7bL6HIUhpi+OI7/79qPGgxfdiolzGDaryQvLLIEk4Fc79of6vbvKuUSGkdo8n8hRcZkNpPk5OwCLjd8Yf9x8OzYYsu2l2uEzpDj0/M4j4IguH948rx3GLGFBQ4oKP+nAAMAB7f00otUtiAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-left-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXdJREFUeNqck0tuwjAURbHjT0iCxDbYAntgieyBEUJihsSk7QS1bAAxKNARJITExu513CIaaEV6FVmWX3J83ydkvV63muuQpunhYIw15hwEAaWUlGXZCJGfTsu3ZX7KpZBCcMYYpQARUhRFA0qePz2/4P52GMpQCu5ApBIzxjxIsdYuFq+gRFEbCqXknLukCEG0Aeh9s1FKRXGUxDFAUgpUB+ceRM/3tN1uh8Nh7XC3+0A6cQS18YTIrpKodMfRbDYbj8e4pxaCHRSFCy6qj311LlGmtb5+ezQazedzbHDhdQgFwsr97dzxGAt+gOD5GjQYDLrd7nQ6xb4WujQIBUbHUaC/QFC/3+/1epPJpBZCTs6XbRm3WvItHyWr1erBrmXZEU+SxJ1OgoKjzN7UV/tvHf0mdOmY5xjganwcApsLqwEIwgSlWVaURcDc/4UUObd+JhsMZDV7YEVKa1WqgHovLW+K7ff7f/z9Wmk4AMVa47pJ6acAAwDbUso/kA6gwAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT9JREFUeNqck0uLgzAUhfMSXAkdOiCi4Mb//39cua6MGxdK8+pJ0mZipjDjHEK10fvl3nuudJ5n60UIpZQUXuS8BGMMEGsNWFprKSUX4uNy4ZyfAoHDOMdyEkLgTkl1u82AnssonoyMjDHU1UeVUl/L8nm9/gcEAYQEHYoQsLZtK8vyRGlRKC0U6K9833d71DiOPzeDXLMjFc5xXyMoWhss7+a3Fq+u6+q6DokfXEv/G5ckZ8zViH6j2DR5/GJzmqZ1XYdhSI8RKRgPKA3tdkK70lfDPfbbtm2a5jV970Cvt62/WD9iB1BVVX3fwwHjlQbSdF7CY/h1v0ulpCgKkXgaDEkbfOhRPC3MkVIayxhH58eMYhYZ4gmKbPOU9svii8sC3sbnoJCOd8lZjjn6NTIHITYUhmahO5nlf9dDgAEAn/cvPZYArNYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYpJREFUeNqck01PwjAYx9eu2xLjNATjh2CRC+IBT/Kp5Woi8bCLBw9GphINRoMMonR9WVufbbhsxAPzn6Z76dNf/8/TloRhqLVWSslUy1QpCyFMrOYirutqbQBl2ylGhguhpNw/bGPbbgwyBkCaEIIxBkMsYcv5m986bsQinufBA1iQneM4NuAQNpR+LT/3Dlr/AUEPrI0vy1pTyhOKidMgteLN5MopKCu/1uuEc2Gq0Zej0flg4Pv+HyBQ+aFzX0CR0uOOIFwAqxodRY+TSXTW73e7JwihGgjqUn5kjhBSSjuucHLx5ffWylLK6/F4NpsNhxc1kF3ZGvCCKwJ7jNUcFbkHnU4QBFtDm9LWoiFeZ/VKEsY5qw4dtduQFNQoTSW0GqhMVeeCjVNpJqj2x3zB68ue9nrQb/3cgMyvslsiJRiGBopXq/f5ojgWO20/zC9ONrgQQnABW84pTW7v7hljDQ5kASrsCAGdjOPV1U24pkmzuwZzTV4aKO305fUhep48TXfPqNSPAAMAXbEphoLM6uIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-right-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAPCAIAAABxxpiMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX1JREFUeNqUk99ugjAUxtfSwtggGRn3voC7cZmXZpdGn8G38wV8D6/0xjvvJZnJUEoLtPuAiIpbJicN9M/Jr9/52pLlcqm1LoqCUotS4vu+53kP3YPZtq21ASrPcynldxy7rvvW7zuO0wlENpuNMaYWpZRKpUxFioXh8KMTi2y3W/zAAgiiABKJOCaJ6z6+DwYdSqu3BQhfsBhjlFL0wdrtojB87eBR3TNVVBRSVqp1FEVB8HKZPZ/Pp9NpEAS/gBDNQFe6QMkyR3IllUL/Mnu9Xq9Wq/F4PBqNauFnEOe8GZSKCCkKzW2F+SIvXWvtjJNdLBZwdjabXYEsyzor0ppeBLcZXGuBkP9ZRWuJtRSWuqBMl35xxlvZvV5vMpmEYVifzNXxZ1nWyMEalCdJEseHw+Ho+c9PrnvvqZlTgAJomko0xAMxjm3flvYnCKn1zYavuNlSSTRM4sndTylLQw2NHDBEKmQqGbNuvfsH9LXfm9NDgztCiMa1TvEjwADa4Bo+zuuFWwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQ5JREFUeNrUk9FuwyAMRbFxHvIn+f8PSpTkKe1DOilSUyhk16bTJjStm7SH7UpERj6+gCG0bVvbts6544NyzlUAxRjZ/UR/msaBhmHA91v0siwn03M6hDBNE4J5nhE/ofu+TykhQKfHcayyUs27rqtu59/0+9doqZp9ve7oIBE5cp7ZizDiikanLpeX/baLB8NKO0Ib0y1g2jTyTsPsdD7jfTQiMPNcChweChqeUg4hihXoWNcVqEAw8cVd7fGucD/McMuHXZPg/4n3u/cKizdrbNd7WxkFmVS5SLAK8gqa2Fgi3YnZG0xwR3wIxgPixwb0gIYWlfNpALok3vrwiUoWgZpa/Vd3VFzKOq8CDACjBLiBGK0ZHAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNrUU0tLw0AQ3sdkk2wa21qfrYoogjcPnvwP9Rd7sArV9iC1YKEtggcRRC1iiX1lk3WygaK9VMGDftnM7Ga++XYzk9CTs0vf96MoCg3Gk8nYYDRKDF7pk0kYqjBk5Cf402ytdbV6gfZb7JtWq93pdLrd+ewgCGq1Ok6azeZwOJzDPq1UsOo4UUo1GtczUZhZH5fLM935N/X+NfaXmsSRAh3ZrsU8Gzs5GAyfX17xi51lax2P3vuMxK7rWAiwKKP57MLaytL9w2P79o6YJoCRjN56TwK49KTrSlsI5DPGYh0rFe1sby4X8uf1qyD9G4J+T1hcSul5XgZHBkcCP+P76DyvsJg/OjxItDEfMxzHldJNlKWLwkII1CaEqkhxzgFgs1Tc2igCJ7FtC8exbTu5LcMFsDhnlFKIAR1mcuD7e7tgARcG+GoIDJgwNR4t0UTgJrgsra9CSkLgjngyZEzrlc4xQCysp87lsownajxV+kydJtD0JAYfAgwAo0qgTdQcI7EAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-up-arrow.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYCAIAAACqZzA+AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAU5JREFUeNrkkj1vgzAQhrF9/sB05v//gGSJlCE/IIK2azNkz5YiAflQAAN9baQkytC0W6Uewpzxc3f2vWa73S5N03Ech2B932N0zvXBrg5+1nXNo9/Yn6ZxoPl8jvFH9Hq9zvM8y7LndFVVy+USzmq1Qsue0LPZrGkaOG3bLhaLh1X2X9X5xuh+Upblfl9cmgvnnDGmlTKxkUSPNBq13W4/i8IYI6XkzD+dc5eywvQlsTcacry+vaPhSWLj2CKlD+B8GNH4Hqv14ZiEAE9/bDYQx1qbeNxqDVqBhmRQBzuBrnA8DYVOp3NsYgsw9iMSK+VpKO16J4Qgoq7rXNfR4XA0WhmjtfavDCyRFMIflAbCB5GCBMQn3AEVTKIkEQ/twDu1BQXGSKGI3xhonJ2CoaK/ZYzdblzwsRDJMYpwCsOFzyamTPfoNYBNOwn2JcAAJXXV9kM4kCMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUlJREFUeNqMkb1OwzAQxy+OExgZeAAk1IWhon0V1oqB12BkR0LiEUCCCioxQFmYIR2YWkqFBFKqxpQ25It8f5gzShADlWrrZ/vs+/vsO+n0vMObzQZ8zD8hTVNIkuSHOEaSGOeK5PdMoPW0gnDO7SzLQJIkWLYJfwDJI6gZ+L4PCqVLi4MgwGD8laRp1jZNE1RVWVos/OMwvJaZMRnUtxs7lNJ1qij47wzyPF/IeDyG6Tvr3XWvDoj2cB/NZ9PWRNctz3WAELIwomEYwBhz3l6G+2g6Mg78tnsz26zVLlbU1XrB8w2RkCzLgWOPoggsywJd12HKmDbsP+49P/VHqPOqFItZZEw9PDrelanSCsJoy3bcNe/Ls0M/GLmu3bk8O2mjjy9yhiR/6yPW4s1KiYrI5V6B5EKApCXFf8WtLqkQNi8vqBA2fAswAMMZzeG4WyTTAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUeNpiXLpynZGR4as3737//v0LDH7+/AWEMAAR+wWUPX7iBECAAQBhgCfi/ZM1bwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUdJREFUeNqUUT1PwzAQvThplzIwsJUhA1kY+Av9EawVAzPwBxj5NxVi69iqG0qZS+gABCGQkihtonwotZMzvspBXZCKpeezfe+dz8/GZDqTjuNAkqbQNA0IIaCua+BcbNdCcOB0JurfHEXvxUMmpUxIZBgG7DuIr0bG1LSoqgosy9pbvNlsKLwxVWWUqpb/Iya+4HxsHvR6ixPHOTcZO6IC9CZEVK3hNiI20GC7RgjDEFareP7kPt4xz3uukmQ9jKJwXZYFMMb+vDGOY0L6/fV5Sw2Ytm3LuetG/eP+fcfqnkmQNhmiTVGuc8jyDIIgoBtd//318sP3l2SYMRgMiENW06O7V9c3F4yZQyU6zYvisCzLRBm0LIr8YTadjBSnUCipbituC1DPHY2ugqnPkH6IBApCA3ctlpqAOllpoaFzuAPaw48AAwDbB9BTAAnfJQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpi3LvvgKqq6oePH//+/fv79+8/f/78+vUbDED0HyAEC/75++fq1WsAAQYAbM4oZ81Xt6sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUpJREFUeNqUkbtKA0EUQO88drNJdjMJSSyUoGghmkJE1HJrsfKBGEtLn5Wf4FfY2lvYqaT3B8TCkPULEtiwI/uY8Y5sEUQxXjjMneGemTszxPd9+BYEoTkkR+eoHJMD/0EyaxZiI2xMzpAYSZDUbMLHRJPbJ6dnHcb4VhzHbfkhF6JI9qWUr1JG3e7T4x3WRDkxwba/xMNOZ67Vmr0ploq+UhqyTAGlFMJRCKMwhMFwCMPB4Lnfe7sKgn4PndCcxs4vLlc8z3sQ1WqNcwvwVCSBJEmg6DjAGINy2QXO+GaaZvca9P57ELzQpaVlB53bZnOqViqVQSkFv0W9XjeI6ZnWNU4F3dndO3Zdd9GrVLDVDP6KRqMBnlfZWF1bP6LY0oEQAtI0hUnD1Fu2vW2+pu3gvf4jFwoFM8xTQkjVPIjWemKZWxzrQXwKMAAaxXA5BvQ04AAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-knob-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAKCAYAAABrGwT5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVNJREFUeNpiZMAEjEDMBMWMUPwfiv9B8X+YQnRNLEDMCsRsQMyMpPkvEP8C4t9A/AdkCCOSRpAmtp7+SZEsrGye37591/7y7avy5y9f73/59PnGly+f9q1etmg9UM03KP4FcxZLcVmFgrq61mxuXh77v//+M/z584+BmYWZ4f3792D88uUrhjevXp28euls6fWrl+8C9XwGOYtlwuSpBgryiofEJCQ0eHj5GZiZWRiYmJgZ/v77C6SZGNjZ2Rn4+QWA/H8yzGwcQYwM//a/ef3qE7O5hSWXo7PrDikZGRlOLm6GX79+M/z9+xcr5uLiAtEcTMysGnduXtvB3NrRmyEsLBwjKirGAPQnTo3IBnz99k1aUET0PRMrK0sYUDPYRmIBSD07J6c30///DNrc3NwMv//8IVozyPb//xmVmBgZGQVYWFiAnP9Ea2ZlZQWp5wcIMAAiP6Ghx1+GGwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-track-disabled.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpifP36NRMTEzMYMCEBRjBgAIP/YPDv3z+AAAMArN8L7foJbfsAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scroller-vertical-track.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAABCAIAAACOvmNtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBJREFUeNokxsEJADAIA0Cise4/mBNJtNDe61BV58nMH5IR4e5mBmB3Z0ZSd18BBgDIAA7SuCPczwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/scrollview-bottom-corner-color.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiPHPmDAPRgAWIjY2NiVTNxEAKGFU9qpoYABBgABtHAx0Ze9+BAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC1JREFUCFtj2rt3L5OTkxPTt2/fmP79+8f0//9/MI2M//79i5WNjY9sxokTJwBXtEPtiHmeoQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpi2Lt370yG////z2T69u0bA9O/f/8YmIBcKAuN+Pv3Lx4uTjE0Q0+cOMEAEGAAD7lHUquXzXYAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpi2Lt370ym////MyAR//79gxJoXDTi79+/eGSxGQC3AyDAAN4mR4fIJKx/AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpi3Lt3LwsDA4M3EFsBsQDL////fWVlZT3k5eUZ2NnZGZiAAtYyMjIM//79Y/j27RsDC5DBC+LAAEgLAwjDBUCyKCrIFPj79y8dtNDEDGQBUBB+/vXrFwMsoJiAskefPHnC8PPnT7BKUBBufv78OQsQmwF18AEEGAD19p6n4TmfGAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHlJREFUeNpi3Lt370wGBoYPQHwMiLcy/v//f+bPnz8ZHj58yPD48eMdTN++fWP49+8fg4yMDANQ0poFxIEBIJuXBSgKFwCx0VWQJfD37186aKGJGRgCsAD6/fs3KIA+g1WAOM+ePQOpOMpy4sQJkIJPQHwKiDcDBBgAYcihtIbGbDIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACRJREFUCFtj2rt3L9P////h+N+/f2CMzEbGf//+xRDDpgdqHgArhUbwsMigfwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADVJREFUCFtj6tpwjCnS2Yzp2tufTP/+/Qfif0x/gRhM/wWx/0JoOBvGB9JoapD1gsy6eu4kADcbQ5oyd/JRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD9JREFUeNpi6tpwbCZTpLMZA9O1tz8ZmP79+w8i/jEw/QURENZfMPcvjIXERYj9hepAU4xmFNj4q+dOMgAEGACr+UQz3IvZcgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADJJREFUeNpi6tpwbCbTv3//GJj+///PAGFhEH8ZmP7+xcb6C1UCZiEkEGLYzANZBBBgAL41RzPloL1CAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKVJREFUeNpi7NpwjIWBgcEbiK2AWIDl379/vhpyEh6aClIMXOxsDCz///+3FpeQYHjyjYHhz5efDCAVvB9+ARUz/AMRYAEGEIYBsMBfdAE0FX8Z/v5FEgBx/gIFCaj4i24Gspa/f0Fa/qK5A9UMNBUQa/E5DOIXDFvwew7VUCagwOffv34xwFSCBI6/fPaU4ddPkOB/cCBvfPvqORMQmwF18AEEGADSXZ0uKgg45QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-disabled-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKdJREFUeNqUkEsKwjAQhv9Ktq7tXbyhN+gtdCF4goou3PlYiooPqCAWCm0zE2d8EWNBDPwQvnwzkyTq9dMEwEWSSobRNrdJUVZYrvdYbY6j1uJcYlcAnTiGc65rmB0qjfjM3BbAeC3dGwrBt0E+IC2hN9DDBsMDD8MreRp+Dwp7cJPB/GvsxxQO70H44/lkrYL8/oW2rpGdDgrGZj6bqHCVTCWDmwADABEdo9VXvegQAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-divider.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUCFtj6tpwjOnfv39M////B9Oo+C/T37/o9F+wHIiGicH46PqBZgIAEU5GmoIeoQQAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKJJREFUGFdj6dpwjI2BgaEOiBOAWJrl379/jRpyEhWaClIMXOxsDCz///9PFpeQYHjyjYHhz5efDCAVoh9+ARUz/AMRYAEGEIYBsMBfdAE0FX8Z/v5FEgBx/gIFCaj4i24Gspa/f0FaUMz4h24GmgqItfgcBvELhi34PYfp/de/f/0SZWZhgQssePnsaamIuCQDCysrOJBr3r56zgzEUUAFEgD4NZMFqr7d7gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUGNOVjzsKwlAQRU/kbUHM/tyGlZW4ilTWrkKwsfNTit+IWgmBJG/us/BDjAFxysOZe2ei4XgSgD2QAP1oe/MhywuW6wOrTTpoLa45uww6cUwIoeukQKFAAUhqO0m8RhLO6uDbsCownMnewKzRqICHUVl5GtUMq2eoyZB+1X60qH6H8cf75j2Szk4K+LLkcjoiKXHz2RQgBUZA7w6pZqOrnOa4eAAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUGFdj2rt3LxsQtwDxEyD+z/T///9GGRmZamtra2knJycGkEAyUIDh379/DN++fWNgAjJEQZy/f/+CBUEqGJAxSAUDMiZXAGQDDNNOC03MQBEABsrrX79+oQTQ3CdPnjD8/PkTrqL++fPnfWfPnn1x4sQJBgBuoxapBuMd2gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpJREFUCJljmjx5MpOFhQUTIyMjEwjAaGTAzMyMk48uBzODh4eHae/evQACDwVlbTA8UgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUCFtjCquZyKRtbM7ExMjEBCWYmMEkkGYGsZmhNIgPZYNomDiSGmS9OqLsTEt3nwQA4LgFKynwVH4AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJlJREFUGJVjCauZyMbAwFAHxAlALM3CxMTUKCQqXiEsLsHAwsrGwMLIyJgsJinDwMzCwgACIBWirGysDDAAEmAAYRQBZnQBFBXMzMwMzMwYWpiRBdBUgDjMmGYwo5nBjF8FM6otYENR3YHVWnwOI8r7r/nZGEW//2Ni+PPvP1hg7uuXLyq0FaUZONkhgVx/8/FLNiCOAuqQAAAUvBbWQgxxhgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-highlighted-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKJJREFUGFeNj8ENAQEQRd/8GYvEdSVCogBuDjrRgDLsSQc6cKEJFShEspsNBSA4CdZKzPHlzf8zNstWd+AArIFljCZTrpdz/1jki1NZuGQiSVp0ewPMbB6SAaCkgaQ0JPEcSYRXwbfhL+DuhMt/G5J/hrqLcPc34NWVWuOjxat31Ne+Z9QZ/70fMtq6IanUOG0y7BhlkSNpHZvdHiAHtmaWPQB3Dxpmsh5qIwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHZJREFUGJVjmjx5MhsQtwDxEyD+z8TIyNgoKSlZbWRkJG1hYcEAEkiWlpZmYGdnZwCyGZiAQBTEAdIQDBJFxkxwGQQmS4CZmRmO6WgGNaxFwcBAeQ0NGHgAzX327BkDKysrAw8PD1hF/ePHj/sOHz78Yu/evQwAKaocei2dPwMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-pushed-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHpJREFUGJVjmjx58n8gfgLELUDMxmRhYcFgZGQkLSkpWc3IyNjIBCQY2NnZGaSlpRmA7GQmIGAAYZAgkBYFq0DGcBVImGQBZmZmBhimoxnUsBZDABoosAB6zcTDw8PAysrK8OzZM5DEAqa9e/cyHD58+MXjx4/7gCpqACrxHHpLd88mAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/segmented-control-bezel-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAQAAAAYCAYAAADd5VyeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHRJREFUGFdj3Lt3738GBoanQLwAiJsY/wPBz58/GR4+fMjw+PHjDqZv374x/Pv3j0FGRoYBKJfMAuLAAJAtygIUhQuA2OgqyBL4+/cvHbTQxAwMAVgA/f79GxRAr8EqQJxnz56BVMxlOXHiBEjBCyBeBsT1APoAoYpapz15AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA5dJREFUWMPNmMtLG0Ecx2eDRopFGijUVCpeSnvxVKSn/geFXAIVLJ7EQntoCsWKPQqpLYgQjW9UtCD4QOv7GYOoSUWJokERUfGBDxRBQw/SMP19hxGs7K6JZiGBD4bZ33y/38zOzM7KOOcsHoiLEPEZJJpPc3Nz0sDAQBbxjngvwfcsXBsfH2eRcpsgSk9Pj214ePjX6OhoyO/386WlJb68vCzAd7ThGmpQiz5jY2NMj2iCKJ2dnS+HhoZ+z83N8Z2dHX5+fs5DoZD4e3Z2JrjahhrUog/6QoMCMjUiDWKiX/aJfuHF5uamMDk9PeXHx8e6oAa16IO+0IDWyMgIu04kQRDCtbi4yA8ODoTB0dFRVKAP+kIDWtCkUWJXuSmIqaOjw7GwsMBPTk744eHhnYAGtKAJ7cHBQXaJXhClqanpVV9f38X29jbf39+PCdCCJrTh0d/fz4BekMTu7m7/6uoq39vbiynQhDY8KBQDWkGUxsZG+9TUFN/d3TUEaMNDbgeaQRLb2to8wWBQDKURQBsecuTVg9hstoddXV1/sey2trYMAdrwkF6qQZSysrLXtLb5xsaGocADXvBUC5JQWVn5eWJigq+vrxsKPKqqqr7AUy2ImYJ883q9fG1tzVDgAS94qgVJKi8vL/F4PHxlZcVQ4AEveKoGKS0t/UrPBjGzjQQe8NIKYi4qKrLTTBaPdCOBB7y0bk1CZmZmBm3BYTwX8KAyAmjDA15ak1UhLG632zc5OckDgYAhQBse8NJavvgkFxYWfqDDDJ+fnzcEaMMDXg0NDZpbvJl4TDM6gE0Hp6xYAk1owwNe9fX12g89IiU/P/9NbW1tGMM4OzsbE6AFTWjDA151dXX6xwDiEc3qEjrI8JmZGXEovgvQgBY0oQ2PmpoaBnQPRsQ9Ir24uPhne3u72JJ9Pt+tQF9oQAuaUluprq5m4MajInGfyCgoKPhBszzc29vLp6eno4IOPlghYWhAS2qaaHtnl0R0eJYd07Ozs9/SThhsaWnhdLwT9xsHHDVwDTWoRZ+cnJxcORIiBAVjV4n4dUIOJe7rs7y8vI9Op9Prcrn+0NLjra2t/4E2XEMNaqnPcyJVapgqKirYdaJ6wZITGDPdSjy1WCwv7HZ7rsPhcBLfJU60Wa3WLNTI2hTZV6Fly9S41SunFE0mHshRSiOeSNJkm0XWiAA0QkyPO72Ey1AJcgNMkphlmxKNUNz9W+Ifu9qUIf+T8EoAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-disabled-bezel.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABCRJREFUeNrsWElLW1EUfi9DY4yCimgcUBtUuihtN666iYlBA6LYLOoPcOO09SeI2J0TKKIiCC1oF7oJiaXdZOFGbG2xZKGxzvMYM+f1fOl7ksQk5mkCLnrhkDfd833vO+eee15YjuOYpzDY/0TiEWFZNulJ09PTsvz8/FI6LCOT8JeDZH+Oj4+3S0pK/Mn60ul0oV+ZGNLz8/OvFArFW4lE8iI7O1uhUqluXwAv5HQ6Gblc7vH7/b89Ho+tqanpx+LiIpcqRdi5ubkKAm0lFSoKCwuZnJyc0POYGz5fuHZ+fs4cHBwwpI6DyH00mUwOq9Uak1BdXV1SRKCCnlR4V11dLSUiDL0tEwgEEr6dVCplZDIZiDB2uz1A6nwmdb5YLJY7ZAwGw71EQOJ9eXl5LVSA42AwKCoBKYQh4lBnc3PzK5H5ZDabI8jU19f/ezZeOGZnZ3VlZWW1paWlIZJQQQhFsoY5mAsf8AWfDQ0NbPgzt6RjkZiamqrMyMgw5eXlMV6vN6TEYww+4As+4dtoNLLCPWHEWjUSSkZTZWWlFLEWG45EeQOfFCoTnX4gNSISLVoRdnJy8jUl5fOsrCzRobjP4BO+gdHY2MgmUkRCy1Sbm5ubMiWiB3wDgw6/E0YgJpHm5mYlFaSqzMzMtBGBb2AAi1S6jkWE1Wq1GmIric7oVA9gAKulpWWV44EiiFDhUhPbtKkhDGDQCiqiw5/YHaKJIHFVWPfpJsJvBZk8ZvBOjlABCmXyfSX8sYPHiCjlEUSo8Lh9Pl/aFQEGsOISOTk52b+5uUk7EWAAKx6R4MLCwibtshxkE9MoiRlYJBcXFxywhPyIJsKtrq66qH/YuLy81FDjkxYiV1dXaKA2gCWsmDtEkK9bW1tLarUa9SQtRI6OjhhgAGtiYoKLt9cE+vr6VnZ3d7cohinfa+ATvoEBrER7Ddatm2QzU3Fro6LDkqVECbfbzTgcDoTfjFNghVfvaCK44xsbG7PTLmmhHqK+uLg41Gk9tm4cHh6CiAW+gTE6OsqFKxILAXddvb2939bW1pZ2dnYYl8v14HBgLnzAF3zCNzCi97N4PStOnpFl9fT0aKlvNVCrx6LLEjPOzs7Qq3Jk1v7+fpDAbusdGRm5ZdDe3n5/88yTUbW2tlbV1NQYCwoKikAGSzteuCA3lujp6SnCsbe8vGyemZlBOJwgMTw8HLGtd3R0JPc5weeREtbW1vZSo9G8oU4LHZxcqVRGPIwwXF9f+8g21tfXV8bHx3+hkPLh8A8NDd3pLTo7O5P/wOJzSU6mgFGXpdTr9UXUnavDPzm3t7f3bTbb/t7eHsA9vPlwb3BwMGaD09XVJfrbVyAEhaT8r4S/Lqw4JLqfLwP4DQ4MDCTssLq7ux/+Ec6DszFWXZAnxInZe57U3xJ/BRgARVYyv4nD3moAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-disabled-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGhJREFUeNpiVFNTE+Dk5IxiY2PT/vXr19Xv378vYxEVFU2QkpLS5OHhYfj69av+06dPOVmkpaWV5OXlGYCqGYCqGBgZGZWYgCrugQRYWFjAEiA+05cvXxb9+PHj6p8/fxhANJA/HyDAALRmJzIlcakAAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/slider-circular-knob.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB1jUFNTk9bX199oamr6E0SD+AzW1ta7QkND/ycmJv4PCwv7D+QfYAAyPpeWlv6vq6v7D6LDw8N/MiQlJe0CCTQ1NYElkpOTwSrlysrKtoMkQDRQpRwAeJEtgtzX+HUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/spinner.gif
Content-Transfer-Encoding:base64

R0lGODlhEAAQAPQAAO7u7gAAAODg4IGBgdHR0UFBQXJycgAAAFJSUiEhIaGhobKyshISEpKSkgMDAzIyMmFhYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAAKAAEALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQACgACACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQACgADACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkEAAoABAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkEAAoABQAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkEAAoABgAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAAKAAcALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkEAAoACAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAAKAAkALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQACgAKACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQACgALACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-ascending.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK1JREFUeNpi/P//PwMhwITG59DX1+8B0bgUseTl5YUyMzMXJwMBkM+KTZHAvXv36kVFRRlevHhRCuQLoStiLS8vj/7z54+yoKAgw79//+QLCgoSYKbBFAleuXKlhJeXl4GDg4OBh4eH4datW3lAE8VgiliBbkkB6pYBKWBiYgIrBAKp9vZ2kNvYWEBuefv2rZ+qquoXfn5+TkZGRgZQsACt/f7u3TtvoPx0gAADAHykNUXFhlgVAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-descending.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANdJREFUeNpi/P//P4+JicnuX79+WTAyMjLAAFCcgY2N7cSZM2dcWYB8/rKysiOLFi2yYGVlhSv6/fs3Q0JCwkGQPEjRj7CwsOsXL1789OzZMz6Qaf/+/WOQl5d/HxISchMkzwQkPgLxBR8fn30g3SAAUgTk7wYyz4PkQYr+APEDS0vLjcrKyu///v3LoKam9sbU1HQzUPwhSJ4J6gSYabu/f//+39/ffzuQfxGIP8F9AcWCQBy2cuXKtUA6GIj5YXKMIAIKmIFYFoglgPgZED8BOQ8kARBgAHkkbCsrrUGyAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-highlighted-pressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADtJREFUeNo8i8sNACAMQpH9p6oTGb2oB7Sx9kD4vFDMKufalEQAxHVB2SVEvvIczPfHlZ/fnY3ejgADAPV/LBeRV6LeAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-highlighted.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACtJREFUeNpi/vT5C9OPHz+Z/v//z8TAwACmYRiZz8AAonHLo/M/fngHEGAAmHc1lNgXMmwAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview-pressed.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACNJREFUeNpiOHPmDBMDAwPT////cdIwjIuPRT3LkydPAAIMAGirLBgXU933AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableview-headerview.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNocw4kNwCAMADHd/qtlF74QfqgaS+a9x//e68857L1Za/k5J2MMeu+01jAzaq2oqi+lkHMmpeRjjIQQEJFPgAEAIdRCSGGFwR8AAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/tableviewselection.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAIAAAB/8tMoAAAACXBIWXMAAAsTAAALEwEAmpwYAAAPU2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarVd5NNT/17+f2W2DsWYda7KF7LLvawyyFY2ZsTVmxhhEZElJaeGbRKlot6QokZISlbRIUigVXy1oQSIxvz/0/X6f5/c7z3nOc85z/3if1/ue+7r3de95n3PPG0CcTOVwmCgAiGfxuBRXB3JwSCgZ/xKwIAwSYAFaVFoix97X1wv+R5t9DggAQK8elcNhwv/NiNzgkFAARBcAJKOXsR0ASEYu4wAAkEzhcXgASAwASNJiqHQAJB0AdLkBFEcA5BwAEKOXcRMAECOX8T0AICbTonkAyAsAHIlFj2UB4CcAcDZ0RiINgKgLAHR6Ii0egHgAAOUQH8+mA4g9AwAtGofLAxD7BQDqwSGh5GXJUWgAywcAuMF/fJvnAOryAVSm//GpDwBIdQJUBf3jm6YAAgCI9OPEqDVGAACACDsAYF/z+dOaAPgigMVCPn+hks9fPAmAHgJoY9KSuMm/54UgDwH+t/tyz78NjQCgAEAZ4mEEiUAmUaXoEIw2VhqHxksSrAUYgieEJkUciEdFf4mzSeOSVKlJmSjZablUBYziQWV58nFVfbUWDVvNdi33Va06rrot+sqrSwzRRlvWPDUxNS03m7Zwsiy2+mRtY5Nie8UecbBzDHc65PzA5bObkLu2h4snzSvTu8Sned1bPxRlpb9XwObAnesrgm4G94dMh63YYLjRMZwakb6piHo68irtAX2AMR61ECMQKxGnsFmFqRm/mmXENueYJVhwjRJ1eKuSVJJlUyS3CG5ZTP2cNrj1fvrVjPPbDmZmZsVle+eYblfOFcz9uqNn55W8g7u259N3O+9RK0AVfNw7um/hgEKhadG6P8IPJhXvPlRT0nK4p3So7MtRgXLZY+rHTU64VARUhp+MOZVyeuuZvLMHzu05v7+qsLqopqi2/EJpXdHFgku59Vsbki4nXKE1rr/q1WTXbHRNrYXUsnR94sZAa+vNi22Hbm27Hd3uf2dth2aneOf83eF7LfdPd+1+wOsOeqj3cPZR9eONT8SetPewnyo/7evNebb62eu+gudWz8f7S194vFh4eXYgeFBwsHmI8UrqVffr1OFVw2/eHHhr93bq3dmR0FHiaOef28ZMxiben/5A/6j2cfBT2Xj4hNrE6GTN55Qvjl+JXz98a5o6MM2e8ftuMavzQ2dOb972Z8xC1SJxqYnPBwAxMAce3EbIyC6EjypCm6InMDewR3H78YcItQK9QmhhT5FC4hsxa/EjEjjJzVIPZcxla+Xk5NMVRpTslM+oiKjGqHVrGGjmrRxapaXN1WnXk9QPWF1sMGSktibY+KTJgBmYW1okW1ZY3Vs7ZaNi62sXbV/kUOd4z2nEeclVzs3M3deD4cnzyvIu8Dm+rt63ze8B5bn/WMBU4Oz6pWCREFKoRJjCBpWNCuHyEfKb5KnKkXI0KboEQyAKouajP8e8i30R1735OrMmvpy1j53FSUyI5volOvEMk5SShZPnU0a3PE29kXZ2a3H6jozYbRsyXbIMs+Vy0DmT24dy+3YM7/ya9ysfu1twj3iB4l7dfSb7bQ7YFboXhf1BPUgv5hzaWrLj8J7S/WUnjlQcrStvOdZx/NGJ5xWvKkdOTpz6eQZ9lnCOeF62SqvauMa61v0CpS74IuNSUn16Q+7lfVfKGquv3mi63dx97V3L2PXZVsJNUpvCLe3bVu1+dxgd3M70u1vv0e47dql0LT7o6b7wMO8R7bHtE+knH3ran5b3cp459cn1fXne1l/yIu6lzQBp4NXgpaG8VxGvjYfxw+/eXH675x11xGxUePTDn51jp99nf9j4ce0n8jh2fHKie7Lxc+WXgq9bvsVMhU77zrh/t5+1/GEyZzJv/nPtgvUvl0XfJSrfg88HACIYAA3OwjzijzSjdFDn0UboDgwdK4K9g8vE2xMECW8FrguWCWUJs0ToxA2i68UCxSmkYImNklSpOOlUmTzZwhXlcvXytxQ6FfuVPil/I8+pImpC6gQNkqboSmEtuVUC2hgdRGdad0JvSP/+6kaDcsMsI8YaR2N9E4LJO9M2swrzXAu6pYOVvNX3tX3WjTYHbVl2bvY6DojDkON1p6POKS4+rnpuQm5j7m0epZ4cLxdvBe9ZnwfrTvhu8fOgqFNm/e8HHAtMWO8QRAoaDW4IyQr1D1MMe7/h8sbscL8I5YgPmy5SUyOdaaK0l/STDGaUYdT36OaYzFifOIm4/s3lzNh47fivrCb2No5XAilhgHs6kcWzSRJIepZcmcLaYp6KSe1JK98an26dIZIxtK06My2Lkq2aPZNzb/vR3OQdrjsVds7kde+qzE/dTdmjXYAqGNjbsK94P/uAWyG5cL7o+R9NB4uLuYc8SlYexhweLr1RduxI0tGgcpNjksfhBKpCuJJ0UvKUzGn5M8pnlc/Jn5etkqqWrJGolbwgVSd7Uf6SfL1Ug8xl5StajXpX9ZqMmx2u+bVQryfe2NlafvNu2/CthXb1Ox4daZ2X7n68r9616UFl99wj/8cXe8SepvRO9+X3S7xoGEgYWvNqcXjhHWbUdaz6o+WE5Ze9003zdXw+wPLuAwDAmQIcjgAIUQTwcwUoWAuw0hxAahOArwhAgAWg9CUB+X4bEIf9f++PFWAJoZAO5XALRhAMooV4IRzkINKMDKNwKH1UICoDdRr1BDWPVkP7oTPQVeiXGALGHBODKcM8wqKx5th47EnsIE4K54vbg7uLJ+Bd8TvwdwkihPWEMsKIgJ4AT+COoJQgXbBBCC8UIdQkTBKOF74noiGyR2SaGES8JqohWi4mLLZV7Ks4S3ySFE/6KsGTmJfcLiUsdUBaRvqUjL7MNVlP2eEVyXKCcqfk7eVfKnAUJRSblUKUfimfIq8jL6lUqW5UI6l1qGdomGv80Gxemanlskpo1UvtUzqpuh56WvpY/eHVHQbnDHcbpaxhGG8w8TddZ+Zs7mLhbuljtWltrHWKTY5thV2z/ZDDZyeSs4VLtGuRW5X7aY8Dntlead4cn+R1Cb4JfgwKy58dkBlYsH5vUEnwhZDboT1hYxv44UoR1puCqDmRlbT7DHSUYTQ9piy2dzMwHeJ3sZ5w5BNiuVcSl5I2JTduEUllpT1JN8k4mSmetS2bv52ZO7kzPm8iP2b3lwLO3rn9uYVaRfUHPYv7SraVuh4JKGce31Fx9eTjM5hz5lUJNacvjFxa0RB15djV99fWXk9sfXxLpJ3acfUe0hXSffzReI91b35fywvSgN9Q9us7b6ZGZP50e0/5mDy+bTLjS9K30GnlmbHZ0jnd+bMLAr8oi+FLWXw+ABhCFByCDviGKCHuCA85jnQhsygyyguVhjqLeoZGo43QVHQRugM9j9HDbMIcwjzE4rEO2AzsdexPnAUuFXcDD3gnfD7+KUGBEENoEhAQCBWoFlgSDBK8JCQkxBC6JawhnC38TsRT5BqRTMwjzorGir4S8xPrELcUv0EyIV2RsJK4Jekm2SMVJjUmnSSDlzkmay77fAVHTkiuSt5bfkahTNFGcVzpmLKn8hz5okqcqrLqoFqFeqTGSo0JzYsrs7TWrVJc9UP7kc4Z3V16Ufquqw0M5AxxhjNGI2ueGrebtJleNmswb7Cot2y2al3baf3M5o3tJ3uMA9FxpZON8waXNNcSt1r3eo8qz2qvOu9mn7vrenz7/YYp3wKQQKX1ekHmwYEhvND8sMoNNze+jcBtUqJ6RsbR9tIbGEPR+BjT2Ki40s23mVMsbTaNU57wMBF4VknJyZdSplLN0xK21qb/2GabuTPrQY7Idp/cih1Tefq7duf371Eq4O59sJ98ILHw9h+iByOLb5eoHC4rszsyXl52PKJCqrL3VMEZ73Pq599X19UW1G26ZNagcHmmcaip+drl6+Wt2W3022F31nYa3yN3SXSLPJx7PNzT0dvYd65/z0vmoMcrm2HpN1Pvno3WjuV8WP9JaXx8suVL3jfvaeJM12zxnPdPkYXriyw+HwAsIAWuwAyyBklA6pEZlAlqC+oGGoV2Re9FP8coY5iYJiwOG4Q9j13A+eBO4/j4YPxFghghkfBUwFigXBAvyBUcFgoQuiNsLdwkoivSQDQmXhV1FH0gFi42Lb6bpEvqlkiWlJXsksqQNpB+K1MiS1khuaJfrlg+REFNYUrxmlKhMo28RkVIZUK1U+2Uep4GWzNspZeWzSp9bR0dVV01PSV9rdV6BmaGbkZha9jG+03Omj42+2GhbOlqlbi21nrMVslug/0Rh2EnXedMl2ducu48j14vDe99PhO+FL8a/xUBGYEfgtyDm0NVw4o2EsLTIqapUZEDdH/G42ifmJtxTptb4+1YjRy7hLZEW97dZJ+U3tSItE/pqRlzmXnZ8jn1ua47HufRds3vPlpgtPfZfm6hcNG1g5TixZKjpaSy5COD5b7Hbp0wrTh/UulU5RnNs1Xn9asaasxqr9fZXeyod294e4XbONuU1rzY8scNjdZzbdq3atr179R1GtytuU/sKugWesh9NPLEr+diL/EZs+9+v8aLrJfPB2WHgl8dft3/Ruot5V3eyIXR9j8Hx/gfpD6qfVIdV5lQnlT8vOLz4pfXX1u/lU/FTBtOT89c+h4/S57t+5E0Jzx3at54/uZPz59dCxYL537J/Er/dW9RajFy8cLiwpLr0oGll3w1PpPfyOcDLP+XAABA0JHNZHPJXo5O8P9r8cykv2qQAECYFemz7jf+wOH5BgCANAD8TEz2dwYAMQBELCrWxf03JtOpTp4AoACAGKTFOPoAgDAA4hXFdaEsc5HgOKqHLwAQARAWgxXov5wfSecwfb1+430cngMFAGQBkBOMROe/YprSYgKCfnO7uEmUQABQB0BebGZ7Un7X+kVnOP3WhiKwmD5ey3VRsrE89wAAkARA6YMLUIEL0cAAPfACR3D6fZKBCmRwBDZwgQGJ4AKjwIXov6PWwyhwIfbfWHoQBVTgQjIwIBE2wxhwIT4iNocL5H/LTgM2JAETGJAEXINqg48Gv/6OcQQ2MIEN/7A8/8PzV55/YmOBDuz/lp8JbOBGxOZw4+ujkg+zUy3Xx2A0MUYYE4wDxhpjg7EAMkYaIwd6GGOMOcYeY4uxwphgLB5NXJ34u87yfCL/7tPzL83AANZ/zIz2X9TA8v8dAAAnBnA0HwCg/dK5/3hrPMYWHgCAI5uTyo2NjuGR7TkcJkOX7M6i6euSjQwMLOBf/0ZN7hNwtO8AAAAgY0hSTQAAbZgAAHOOAADi5AAAhvsAAHXhAADNcwAAMq0AABrd66B7UwAAAD9JREFUeNpUirENgDAQxKLrKCiYi72Yjo3y9tOkIJVl2eN+3lznkTkr2ilcJEXH5eCvGTXYAUIZNNDR/QO+AQD8FEZFeDuoxQAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAWCAIAAACOpGH9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jWLRqJ8OFq3cYPnz8zPD//3+qYKBZAMWVP/kpEKROAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAYAAADtlXTHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADdJREFUCB1jWHjqkTwDkIgHEftAxH+GRat3/Wc4f/XOf4Z3Hz79Z/jz9x+NCLDxYCthloOdoQAAdj5sTxjpYWAAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAYAAADKO/UvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApdJREFUSMed1UtPE1EYBuAaMS7QhMiCxhjdqBtxqT/AG0tNcGGicaEu5EeoS9l7CySmBakhphIjJRHkqlQoNG2RAikU7CW2tbYULKD09vqe4TQ0k+l1kmc575zvnG++o+uaCejKOEAH6TAdpUbS0wk6SafKvXyIjlATnaWLdJVu0C26Q3eLBdRRvfzieWqh+/SEXlIv9dMQjWgFiK830Gm6RG30nMYpTFDTCjhG56iVntIXShu+raFjYBYd5jG8No/A0PsJXe8G0U3qEhpkwG3qpIBx2odOiw1v3g/j46AVo5MOTNkXYJ/zwOlegWvBi8JNrJcltMqAmMHqhaFvHAPD05hxLsGzGkQwFMWv3wnEE5tIbCSxsZlEYRl6uQeiBL8IMH0Yx8SUS3k5Gksgub2D3VQKmUwWuVwOOew9+RCximZ6SBNGmx89/V9hnXXDF4zgT3Ib6XRGeVHr0clGapLn/4xSxiGHsgIRsLX9F5lsFtqv74eITjxD92jUOPUDlhEbPN6AsgIRUO7RyVa+QI/oZ9eYGzbHkrJ5SgllI/ZCRF9coReiccyjDmUVya2donugFSL24zqZRMiQdU45xn+7qYoC8iHH6Sb1iZBJ+6JSijjGmkNsLg9i65vIVliKupy3IsTqXK4ppLFwYz/PemoqJ3/Ejylknl5RNla0dzUhhc021m3zYdEbrPqI821/TbZ92mJfVX64apqt8Ads2xtCfjg8waraXj0K2sUw6pnxYdkfrvgHLDaU4iYGza+FKxoF6vHYXDgeu1na8HwAoej6/lDKag8l9aBull3cLgd1podhg98DcK1F4A3FNcdjsSvjstxs0YgTFKnkyih1eT2Ql9creXlZSl1eWteovpZrVB1WV+pC/w9TNVqlMEGHagAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-focused-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAABEAAAAeCAYAAADKO/UvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUSMellUtPU1EQx0uAsEASIgubaHRj3IhbPwBG3ZpgjInGDW78FC71AygEEtMWITaGGiIlsdgioKVP+5CHaS21D9PW2lJqLUb6GP9Tz60V6eWWnuR3d/eXmTlzZlQ6Z+wMOA1OATUYAH2gB3SCDqCSgz93wG1wE1wDl8FFcA6cAMdAt5yMPxawAOaAHoyC+2AEXAUXRIS9oKuZhA4gCZbAI3APDIGzoF9E9a9k8rmJdECjf0VPZiw0PvOGxuddpFkNs6wEVsADMAzOg+P7RSrfRoi865/I7Q+Qzb1Bi+889NJkpacGM00YHaS1R1gWAxPglhD1N6am2skXKLdToGwuT1+/5SieSFNgK05O70eaN9tJ82KJNNYQizJCNCxS65WKrSKcKlOtUrlcoV97e1Qo7lI6k6vJlm0+mp6ti6IitSFR7O66ZP9hYalUpu+FIkXiKbK61mlq7i1pHVEWLYtiD4rr7zhQIkVXrlToR/FnTcQRaRc8UrH51q6IPupsKpEOizgiTs1oQaFtn0lc/4hoyJ5DJRwRp8Y14mLrLH6WpERDcmf3HSqRasTFDiIaw6JHasgx8UQGFEn48K19wfWbV/2SRC/emlqxhGvDKdneb0qSWXADnFQsqSClzHaenOjstiVWb1CSPGs9HXQzP4vXrnoko0curMEelEbF0a54MxSnSUekvWYzurfaa3tPAFE4aw9w5UgPMBhN0pSzPpwetjwK1sJJmv4jyCobSpW/QymR3ibzWkxKoXE8DsqOx1AiS75wikwfYgi/9nNZ1IBTuC4E/w/qJisjJSbYY1HES7Iro2F5GcXLHBONdLeV5SW3RtVK16jcQu9SstB/A7wYWu6etp7HAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-left.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdFJREFUOMuVlNtLAlEQxucp6CnoKQj6w4L+gKC3iqR66E5IN6Ky6EZKmYaR0c2yoMjMXNJASbtApUTZxbVVS9t1mnPKiDJcB/bt/M7MfOf7FmpbRiD71bXqoKF9DJq7J6FzwFDaN2quHplesk7MrgjT8+vyjNmGevq+gXoCGrvGoaPfUDw4YdEYFjbFZZsDd/aP0Sn4UTgJosd3jl7/xSdU3zbKb9cOG8umjOuuVfshHnlOMXgZwtBtBO8fovgUjWFUlFCMScg7MKBHZyqftWxd7zq9/HDkMYpSIompdBplWcFMJoMZ/Cw+knbIWESAy+H24VXoDl+kBL6/y/xgroL2fj3QSBrWgQHxxCvKioK5j39BtHTJqt35FLy44R0YkK+AJKx0HZ/yZflImL/AuuGwsi5SPPnvDn8geocAk/UtlUa1BQeCX2SjMVlVQ25vQHx8jqGicrQsFCgYovGsBY9HQlQxIZhdVEMkeQl5TSxIcv2CDcjRGmZQ1Y9LNgKKQhF1E1TbiELHDAt7zpPy6/BdWJVheTSGjTC3aIcDt6+CQFfeaGRD2KszcZA6FtOoTbSj+B1C5VcIf8Ud6AcCa9uHTJzSs8tQTfg2skIXeH7G/QMDueJzvPRB+QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-rounded-right.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAA0AAAAWCAYAAAAb+hYkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbVJREFUOMudlNtLAlEQxs9T4FPgUyD0/wm9VRTVQ3ciuhGlRlakmF0oMjSxrCgyNS0VrLQLFEp00VzbLNRdp5kto6Jy7cDZp/3tN/PNfMsM8w6Yxjs1axf0JqtfM7VsGdDNq7uGjMqWngnW0DHG6tq0rLZVI10AYCx4dA6B8Bn4Q1Fw+49gc/cQVhwuMC6sccP6xcbOQaOiqXuc1b+DEsSleUhxPCRTabi9T0Hs+g6iFzHYD5yAzemBSbPd2ztqriLV+nbdG4QPKNAtFEAQRMjmcsBnnuEukZLgbXcQTIvrV33aORWBH9D3Qx/I5wV45DNwGbsBly9MoLd3xFzxK1RUF0QRnjIvEkiKWGrjn1DxEEiKVKrN6U6iOZUlIVKkUqlHMsew4FCXhIo9kjmnqIbjsMiC6JCrcRzHlisQlw1Rb1Si5+A4KxsSscTEQ5o2hy8b8gUjEfnl4bbQmuF+/suI8izHAXNoednDLXuN/BgVheyFvYrfxHfcIRUurLxoIODd84WrZ5acDMP4QwjFLyHksKRmVFAQ0K+dYx8h/Bx3fDGAtlpxMWuwaeXqhofhD0dS+Bz3V7HA8uslKDy0AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAADCAIAAAA2iEnWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABxJREFUCB1jmTNnDicnJ4uMjIywsDALEEtKSgIALM0DDeT4y3sAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAIAAADdv/LVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABRJREFUCB1jWLVqFZOWlhbDx48fARyiBVLivNzsAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAADCAIAAAA2iEnWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1jWrp06Zw5c5jU1NRkZGSYJCUlhYWFAUybBRTduo1wAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7QOjdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1juHLlysePHwESGQVQhb5n0gAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+P//PwAF/gL+n8otEwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAIAAAB7QOjdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9JREFUCB1j/Pjx4+PHjwETfwV+HAwP5QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1jvHLliqysLOPp06clJSUBLX0FglncIWUAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAIAAAAW4yFwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABBJREFUCB1j+P//P9OnT58AF6oF1hwiRUMAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1j/vjxY0xMDHNOTs779+8BN9MH/68NXLgAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-0.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAHCAYAAAArkDztAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGZJREFUCB0FwcsJg0AUAMAJ+9YPgUV4IIhevHizBhtIk2kjJeSYEtJGLpmJ5/t7Q0HFgA41UHDHhBmJFqiYsOPEgTUwYMaJBy70gQ6JA9fv8+rHcRSoaFjRb9smMwUKBjTITMuy+AM42wji1WBJjgAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-1.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAHCAYAAADJTCeUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACZJREFUCB1jXnjqkTxzYGqhP4joBRELmaNcLRuY6+vrG5jb29sbAOK+DN7MoThrAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-2.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAHCAYAAAArkDztAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAG9JREFUCB0FwbEKgmAYAMCDPrHJXWp27AFa2trber0eJdpa23QIhAaDH0IQS4m6i9O1XWPGhDdmfANb9Eh44oUhcMQDNW64Ywoc8MEZMKCPaC7GccyzzX6HGg3aqKpKSklHjhUKZFGWJeh+oMASiz+A7SOInCfK3QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-3.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB5JREFUCB1jWHjqkQIQxwPxfiD+f+XKlf8fP378DwDW+RK/bGv6kwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-4.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxJREFUCB1j+P//PwAF/gL+n8otEwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-5.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAB1JREFUCB1j+Pjx4/8rV678X3jqEQjvB+J4IFYAAP2REr8fi4n2AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-6.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUCFtjWHjqkTgQewDxZCD+cfr06f9Pnjz5zwDkCAKxKRDnAvFOkCQQgyU4gVgeiB2gkiCd60ASLEDMD5U0hRobBpJghEpyQo0F2SkDAHWKUDJqcdSvAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-7.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABpJREFUCB1j+Pjx43+GhacegYk9IFYciJAHAM/uDz+C0SZ2AAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/textfield-bezel-square-focused-8.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAYAAAAFCAYAAABmWJ3mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUCFtjePLkyf/Tp0//X3jq0Q8gngzEHkAszgAkYII7gTgXiE2BWBAksQ6qEiToAMTyQMwJkgiDajeFCvIDMQtIQgZkJkg7SCVIEIgZAdauUDJ/hcSRAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAERJREFUCB1j2rx58//Tp0//v379OpgG8Zn+////C4gZkPBfpl+/fh38/fs3AxI+wvT58+eUjx8/7vjw4QMDiP706VMcAOlpQfMaZOfrAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAIAAACZnPOkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABVJREFUCB1j3rx5cxEYJCQk+Pn5AQA+dAbTLdUgHwAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-bottom.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAECAYAAABGM/VAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAExJREFUeNpMxbsNgDAMBcCH6wzg1amQWCGzUMEAKf1JZSMCdClOt9RaV2ZGKQW9d7TWQGOM+4PJQxFxZiYmF7n7rqqHiODfzLZXgAEAth07HqinDKIAAAAASUVORK5CYII=
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-center.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAABCAYAAAAW/mTzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi3Lx580wJCQkGHh4ehi9fvjC8ePGCASDAAFQeCLRojHkfAAAAAElFTkSuQmCC
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-disabled-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGlJREFUeNpirKysFODi4opiZmbW/vv379Vv374tYxEWFk4QEhLSZGdnZ/j586f+u3fvOEGCquLi4gxA1QxAVQyMjIwqLLy8vCz8/PwMPDw8DKysrAzfv39nYmJjYwNzkDETUDkDOgYIMABjBxggiQuq/QAAAABJRU5ErkJggg==
--_ANY_STRING_WILL_DO_AS_A_SEPARATOR
Content-Location:Resources/vertical-track-top.png
Content-Transfer-Encoding:base64

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAYAAAAL+1RLAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUCB1jqqyslG5ubt7Y1tb2E0SD+EzCwsLzpaWl/eTl5dlANJC/FCRoLyEhwQAUYADRQL4NEy8vLxs/Pz+DoKAgA4jm4+NjZmJjY2NgZWVFwUyMjIwM6BgAhF0QgRCnPUsAAAAASUVORK5CYII=
*/

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLPaths.txt.



>
1
@STATIC;1.0;u;25;Resources/alert-error.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-error.pngu;24;Resources/alert-info.png64;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-info.pngu;27;Resources/alert-warning.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/alert-warning.pngu;33;Resources/button-bezel-center.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-center.pngu;42;Resources/button-bezel-disabled-center.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-center.pngu;40;Resources/button-bezel-disabled-left.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-left.pngu;41;Resources/button-bezel-disabled-right.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-disabled-right.pngu;45;Resources/button-bezel-highlighted-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-center.pngu;43;Resources/button-bezel-highlighted-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-left.pngu;44;Resources/button-bezel-highlighted-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-highlighted-right.pngu;31;Resources/button-bezel-left.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-left.pngu;32;Resources/button-bezel-right.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/button-bezel-right.pngu;29;Resources/buttonbar-bezel.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-bezel.pngu;43;Resources/buttonbar-button-bezel-center.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-center.pngu;52;Resources/buttonbar-button-bezel-disabled-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-center.pngu;50;Resources/buttonbar-button-bezel-disabled-left.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-left.pngu;51;Resources/buttonbar-button-bezel-disabled-right.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-disabled-right.pngu;55;Resources/buttonbar-button-bezel-highlighted-center.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-center.pngu;53;Resources/buttonbar-button-bezel-highlighted-left.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-left.pngu;54;Resources/buttonbar-button-bezel-highlighted-right.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-highlighted-right.pngu;41;Resources/buttonbar-button-bezel-left.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-left.pngu;42;Resources/buttonbar-button-bezel-right.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-button-bezel-right.pngu;38;Resources/buttonbar-resize-control.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/buttonbar-resize-control.pngu;38;Resources/check-box-image-disabled.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-disabled.pngu;41;Resources/check-box-image-highlighted.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-highlighted.pngu;44;Resources/check-box-image-mixed-disabled.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed-disabled.pngu;47;Resources/check-box-image-mixed-highlighted.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed-highlighted.pngu;35;Resources/check-box-image-mixed.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-mixed.pngu;47;Resources/check-box-image-selected-disabled.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected-disabled.pngu;50;Resources/check-box-image-selected-highlighted.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected-highlighted.pngu;38;Resources/check-box-image-selected.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image-selected.pngu;29;Resources/check-box-image.png69;mhtml:Browser.environment/MHTMLData.txt!Resources/check-box-image.pngu;41;Resources/default-button-bezel-center.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-center.pngu;50;Resources/default-button-bezel-disabled-center.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-center.pngu;48;Resources/default-button-bezel-disabled-left.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-left.pngu;49;Resources/default-button-bezel-disabled-right.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-disabled-right.pngu;53;Resources/default-button-bezel-highlighted-center.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-center.pngu;51;Resources/default-button-bezel-highlighted-left.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-left.pngu;52;Resources/default-button-bezel-highlighted-right.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-highlighted-right.pngu;39;Resources/default-button-bezel-left.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-left.pngu;40;Resources/default-button-bezel-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/default-button-bezel-right.pngu;37;Resources/horizontal-track-center.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-center.pngu;46;Resources/horizontal-track-disabled-center.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-center.pngu;44;Resources/horizontal-track-disabled-left.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-left.pngu;45;Resources/horizontal-track-disabled-right.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-disabled-right.pngu;35;Resources/horizontal-track-left.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-left.pngu;36;Resources/horizontal-track-right.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/horizontal-track-right.pngu;37;Resources/HUD/button-bezel-center.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-center.pngu;46;Resources/HUD/button-bezel-disabled-center.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-center.pngu;44;Resources/HUD/button-bezel-disabled-left.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-left.pngu;45;Resources/HUD/button-bezel-disabled-right.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-disabled-right.pngu;49;Resources/HUD/button-bezel-highlighted-center.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-center.pngu;47;Resources/HUD/button-bezel-highlighted-left.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-left.pngu;48;Resources/HUD/button-bezel-highlighted-right.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-highlighted-right.pngu;35;Resources/HUD/button-bezel-left.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-left.pngu;36;Resources/HUD/button-bezel-right.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/button-bezel-right.pngu;45;Resources/HUD/default-button-bezel-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-center.pngu;54;Resources/HUD/default-button-bezel-disabled-center.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-center.pngu;52;Resources/HUD/default-button-bezel-disabled-left.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-left.pngu;53;Resources/HUD/default-button-bezel-disabled-right.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-disabled-right.pngu;57;Resources/HUD/default-button-bezel-highlighted-center.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-center.pngu;55;Resources/HUD/default-button-bezel-highlighted-left.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-left.pngu;56;Resources/HUD/default-button-bezel-highlighted-right.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-highlighted-right.pngu;43;Resources/HUD/default-button-bezel-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-left.pngu;44;Resources/HUD/default-button-bezel-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/default-button-bezel-right.pngu;41;Resources/HUD/horizontal-track-center.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-center.pngu;50;Resources/HUD/horizontal-track-disabled-center.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-center.pngu;48;Resources/HUD/horizontal-track-disabled-left.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-left.pngu;49;Resources/HUD/horizontal-track-disabled-right.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-disabled-right.pngu;39;Resources/HUD/horizontal-track-left.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-left.pngu;40;Resources/HUD/horizontal-track-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/horizontal-track-right.pngu;31;Resources/HUD/knob-disabled.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob-disabled.pngu;34;Resources/HUD/knob-highlighted.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob-highlighted.pngu;22;Resources/HUD/knob.png62;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/knob.pngu;46;Resources/HUD/scroller-down-arrow-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow-disabled.pngu;49;Resources/HUD/scroller-down-arrow-highlighted.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow-highlighted.pngu;37;Resources/HUD/scroller-down-arrow.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-down-arrow.pngu;49;Resources/HUD/scroller-horizontal-knob-center.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-center.pngu;47;Resources/HUD/scroller-horizontal-knob-left.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-left.pngu;48;Resources/HUD/scroller-horizontal-knob-right.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-knob-right.pngu;52;Resources/HUD/scroller-horizontal-track-disabled.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-track-disabled.pngu;43;Resources/HUD/scroller-horizontal-track.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-horizontal-track.pngu;46;Resources/HUD/scroller-left-arrow-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow-disabled.pngu;49;Resources/HUD/scroller-left-arrow-highlighted.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow-highlighted.pngu;37;Resources/HUD/scroller-left-arrow.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-left-arrow.pngu;47;Resources/HUD/scroller-right-arrow-disabled.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow-disabled.pngu;50;Resources/HUD/scroller-right-arrow-highlighted.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow-highlighted.pngu;38;Resources/HUD/scroller-right-arrow.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-right-arrow.pngu;44;Resources/HUD/scroller-up-arrow-disabled.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow-disabled.pngu;47;Resources/HUD/scroller-up-arrow-highlighted.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow-highlighted.pngu;35;Resources/HUD/scroller-up-arrow.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-up-arrow.pngu;47;Resources/HUD/scroller-vertical-knob-bottom.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-bottom.pngu;47;Resources/HUD/scroller-vertical-knob-center.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-center.pngu;44;Resources/HUD/scroller-vertical-knob-top.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-knob-top.pngu;50;Resources/HUD/scroller-vertical-track-disabled.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-track-disabled.pngu;41;Resources/HUD/scroller-vertical-track.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/scroller-vertical-track.pngu;48;Resources/HUD/segmented-control-bezel-center.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-center.pngu;57;Resources/HUD/segmented-control-bezel-disabled-center.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-center.pngu;58;Resources/HUD/segmented-control-bezel-disabled-divider.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-divider.pngu;55;Resources/HUD/segmented-control-bezel-disabled-left.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-left.pngu;56;Resources/HUD/segmented-control-bezel-disabled-right.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-disabled-right.pngu;49;Resources/HUD/segmented-control-bezel-divider.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-divider.pngu;60;Resources/HUD/segmented-control-bezel-highlighted-center.png100;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-center.pngu;69;Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png109;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-center.pngu;70;Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png110;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.pngu;67;Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-left.pngu;73;Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png113;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.pngu;68;Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png108;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-disabled-right.pngu;61;Resources/HUD/segmented-control-bezel-highlighted-divider.png101;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-divider.pngu;58;Resources/HUD/segmented-control-bezel-highlighted-left.png98;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-left.pngu;59;Resources/HUD/segmented-control-bezel-highlighted-right.png99;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-highlighted-right.pngu;46;Resources/HUD/segmented-control-bezel-left.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-left.pngu;55;Resources/HUD/segmented-control-bezel-pushed-center.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-center.pngu;67;Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png107;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-center.pngu;65;Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-left.pngu;66;Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-highlighted-right.pngu;53;Resources/HUD/segmented-control-bezel-pushed-left.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-left.pngu;54;Resources/HUD/segmented-control-bezel-pushed-right.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-pushed-right.pngu;47;Resources/HUD/segmented-control-bezel-right.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/segmented-control-bezel-right.pngu;39;Resources/HUD/slider-circular-bezel.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-bezel.pngu;48;Resources/HUD/slider-circular-disabled-bezel.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-disabled-bezel.pngu;47;Resources/HUD/slider-circular-disabled-knob.png87;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-disabled-knob.pngu;38;Resources/HUD/slider-circular-knob.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/slider-circular-knob.pngu;39;Resources/HUD/vertical-track-bottom.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-bottom.pngu;39;Resources/HUD/vertical-track-center.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-center.pngu;48;Resources/HUD/vertical-track-disabled-bottom.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-bottom.pngu;48;Resources/HUD/vertical-track-disabled-center.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-center.pngu;45;Resources/HUD/vertical-track-disabled-top.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-disabled-top.pngu;36;Resources/HUD/vertical-track-top.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/HUD/vertical-track-top.pngu;27;Resources/knob-disabled.png67;mhtml:Browser.environment/MHTMLData.txt!Resources/knob-disabled.pngu;30;Resources/knob-highlighted.png70;mhtml:Browser.environment/MHTMLData.txt!Resources/knob-highlighted.pngu;18;Resources/knob.png58;mhtml:Browser.environment/MHTMLData.txt!Resources/knob.pngu;36;Resources/popup-arrows-pullsdown.png76;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-arrows-pullsdown.pngu;26;Resources/popup-arrows.png66;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-arrows.pngu;50;Resources/popup-bezel-disabled-right-pullsdown.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-disabled-right-pullsdown.pngu;40;Resources/popup-bezel-disabled-right.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-disabled-right.pngu;41;Resources/popup-bezel-right-pullsdown.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-right-pullsdown.pngu;31;Resources/popup-bezel-right.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/popup-bezel-right.pngu;34;Resources/radio-image-disabled.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-disabled.pngu;37;Resources/radio-image-highlighted.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-highlighted.pngu;43;Resources/radio-image-selected-disabled.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected-disabled.pngu;46;Resources/radio-image-selected-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected-highlighted.pngu;34;Resources/radio-image-selected.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image-selected.pngu;25;Resources/radio-image.png65;mhtml:Browser.environment/MHTMLData.txt!Resources/radio-image.pngu;42;Resources/scroller-down-arrow-disabled.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow-disabled.pngu;45;Resources/scroller-down-arrow-highlighted.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow-highlighted.pngu;33;Resources/scroller-down-arrow.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-down-arrow.pngu;45;Resources/scroller-horizontal-knob-center.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-center.pngu;54;Resources/scroller-horizontal-knob-disabled-center.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-center.pngu;52;Resources/scroller-horizontal-knob-disabled-left.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-left.pngu;53;Resources/scroller-horizontal-knob-disabled-right.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-disabled-right.pngu;43;Resources/scroller-horizontal-knob-left.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-left.pngu;44;Resources/scroller-horizontal-knob-right.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-knob-right.pngu;48;Resources/scroller-horizontal-track-disabled.png88;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-track-disabled.pngu;39;Resources/scroller-horizontal-track.png79;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-horizontal-track.pngu;42;Resources/scroller-left-arrow-disabled.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow-disabled.pngu;45;Resources/scroller-left-arrow-highlighted.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow-highlighted.pngu;33;Resources/scroller-left-arrow.png73;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-left-arrow.pngu;43;Resources/scroller-right-arrow-disabled.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow-disabled.pngu;46;Resources/scroller-right-arrow-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow-highlighted.pngu;34;Resources/scroller-right-arrow.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-right-arrow.pngu;40;Resources/scroller-up-arrow-disabled.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow-disabled.pngu;43;Resources/scroller-up-arrow-highlighted.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow-highlighted.pngu;31;Resources/scroller-up-arrow.png71;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-up-arrow.pngu;43;Resources/scroller-vertical-knob-bottom.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-bottom.pngu;43;Resources/scroller-vertical-knob-center.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-center.pngu;52;Resources/scroller-vertical-knob-disabled-bottom.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-bottom.pngu;52;Resources/scroller-vertical-knob-disabled-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-center.pngu;49;Resources/scroller-vertical-knob-disabled-top.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-disabled-top.pngu;40;Resources/scroller-vertical-knob-top.png80;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-knob-top.pngu;46;Resources/scroller-vertical-track-disabled.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-track-disabled.pngu;37;Resources/scroller-vertical-track.png77;mhtml:Browser.environment/MHTMLData.txt!Resources/scroller-vertical-track.pngu;44;Resources/scrollview-bottom-corner-color.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/scrollview-bottom-corner-color.pngu;44;Resources/segmented-control-bezel-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-center.pngu;53;Resources/segmented-control-bezel-disabled-center.png93;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-center.pngu;54;Resources/segmented-control-bezel-disabled-divider.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-divider.pngu;51;Resources/segmented-control-bezel-disabled-left.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-left.pngu;52;Resources/segmented-control-bezel-disabled-right.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-disabled-right.pngu;45;Resources/segmented-control-bezel-divider.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-divider.pngu;56;Resources/segmented-control-bezel-highlighted-center.png96;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-center.pngu;65;Resources/segmented-control-bezel-highlighted-disabled-center.png105;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-center.pngu;66;Resources/segmented-control-bezel-highlighted-disabled-divider.png106;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-divider.pngu;63;Resources/segmented-control-bezel-highlighted-disabled-left.png103;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-left.pngu;64;Resources/segmented-control-bezel-highlighted-disabled-right.png104;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-disabled-right.pngu;57;Resources/segmented-control-bezel-highlighted-divider.png97;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-divider.pngu;54;Resources/segmented-control-bezel-highlighted-left.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-left.pngu;55;Resources/segmented-control-bezel-highlighted-right.png95;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-highlighted-right.pngu;42;Resources/segmented-control-bezel-left.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-left.pngu;51;Resources/segmented-control-bezel-pushed-center.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-center.pngu;63;Resources/segmented-control-bezel-pushed-highlighted-center.png103;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-center.pngu;61;Resources/segmented-control-bezel-pushed-highlighted-left.png101;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-left.pngu;62;Resources/segmented-control-bezel-pushed-highlighted-right.png102;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-highlighted-right.pngu;49;Resources/segmented-control-bezel-pushed-left.png89;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-left.pngu;50;Resources/segmented-control-bezel-pushed-right.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-pushed-right.pngu;43;Resources/segmented-control-bezel-right.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/segmented-control-bezel-right.pngu;35;Resources/slider-circular-bezel.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-bezel.pngu;44;Resources/slider-circular-disabled-bezel.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-disabled-bezel.pngu;43;Resources/slider-circular-disabled-knob.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-disabled-knob.pngu;34;Resources/slider-circular-knob.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/slider-circular-knob.pngu;21;Resources/spinner.gif61;mhtml:Browser.environment/MHTMLData.txt!Resources/spinner.gifu;44;Resources/tableview-headerview-ascending.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-ascending.pngu;45;Resources/tableview-headerview-descending.png85;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-descending.pngu;54;Resources/tableview-headerview-highlighted-pressed.png94;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-highlighted-pressed.pngu;46;Resources/tableview-headerview-highlighted.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-highlighted.pngu;42;Resources/tableview-headerview-pressed.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview-pressed.pngu;34;Resources/tableview-headerview.png74;mhtml:Browser.environment/MHTMLData.txt!Resources/tableview-headerview.pngu;32;Resources/tableviewselection.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/tableviewselection.pngu;44;Resources/textfield-bezel-rounded-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-center.pngu;52;Resources/textfield-bezel-rounded-focused-center.png92;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-center.pngu;50;Resources/textfield-bezel-rounded-focused-left.png90;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-left.pngu;51;Resources/textfield-bezel-rounded-focused-right.png91;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-focused-right.pngu;42;Resources/textfield-bezel-rounded-left.png82;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-left.pngu;43;Resources/textfield-bezel-rounded-right.png83;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-rounded-right.pngu;38;Resources/textfield-bezel-square-0.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-0.pngu;38;Resources/textfield-bezel-square-1.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-1.pngu;38;Resources/textfield-bezel-square-2.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-2.pngu;38;Resources/textfield-bezel-square-3.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-3.pngu;38;Resources/textfield-bezel-square-4.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-4.pngu;38;Resources/textfield-bezel-square-5.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-5.pngu;38;Resources/textfield-bezel-square-6.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-6.pngu;38;Resources/textfield-bezel-square-7.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-7.pngu;38;Resources/textfield-bezel-square-8.png78;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-8.pngu;46;Resources/textfield-bezel-square-focused-0.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-0.pngu;46;Resources/textfield-bezel-square-focused-1.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-1.pngu;46;Resources/textfield-bezel-square-focused-2.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-2.pngu;46;Resources/textfield-bezel-square-focused-3.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-3.pngu;46;Resources/textfield-bezel-square-focused-4.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-4.pngu;46;Resources/textfield-bezel-square-focused-5.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-5.pngu;46;Resources/textfield-bezel-square-focused-6.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-6.pngu;46;Resources/textfield-bezel-square-focused-7.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-7.pngu;46;Resources/textfield-bezel-square-focused-8.png86;mhtml:Browser.environment/MHTMLData.txt!Resources/textfield-bezel-square-focused-8.pngu;35;Resources/vertical-track-bottom.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-bottom.pngu;35;Resources/vertical-track-center.png75;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-center.pngu;44;Resources/vertical-track-disabled-bottom.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-bottom.pngu;44;Resources/vertical-track-disabled-center.png84;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-center.pngu;41;Resources/vertical-track-disabled-top.png81;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-disabled-top.pngu;32;Resources/vertical-track-top.png72;mhtml:Browser.environment/MHTMLData.txt!Resources/vertical-track-top.png

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Browser.environment/MHTMLTest.txt.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
/*
Content-Type: multipart/related; boundary="_SEPARATOR_"

--_SEPARATOR_
Content-Location:test
Content-Transfer-Encoding:base64

R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
*/

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Browser.environment/dataURLs.txt.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/CommonJS.environment/Aristo.blend.sj.



>
1
@STATIC;1.0;e;

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Info.plist.



>
1
280NPLIST;1.0;D;K;26;CPApplicationDelegateClassS;20;BKShowcaseControllerK;12;CPBundleNameS;12;Aristo.blendK;14;BKLearnMoreURLS;28;http://cappuccino.org/aristoK;22;BKLearnMoreButtonTitleS;16;Aristo Home PageK;16;CPPrincipalClassS;13;CPApplicationK;29;CPBundleInfoDictionaryVersiond;1;6K;18;CPBundleIdentifierS;21;com.280n.blend.AristoK;15;CPBundleVersionf;3;0.1K;19;CPBundlePackageTypeS;4;BLNDK;20;CPBundleEnvironmentsA;S;7;BrowserS;8;CommonJSE;K;18;CPBundleExecutableS;15;Aristo.blend.sjK;36;CPBundleEnvironmentsWithImageSpritesA;S;7;BrowserE;K;13;CPKeyedThemesA;S;17;Aristo.keyedthemeS;21;Aristo-HUD.keyedthemeE;E;

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/default-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/horizontal-track-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/knob-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/knob-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-down-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-knob-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-horizontal-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-left-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-right-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-up-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-knob-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/scroller-vertical-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-right copy.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-pushed-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/segmented-control-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-disabled-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-disabled-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/slider-circular-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-disabled-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/HUD/vertical-track-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/alert-error.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/alert-info.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/alert-warning.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/buttonbar-resize-control.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-mixed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image-selected.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/check-box-image.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/default-button-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/horizontal-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/horizontal-track-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/horizontal-track-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/horizontal-track-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/knob-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/knob-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/popup-arrows-pullsdown.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/popup-arrows.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/popup-bezel-disabled-right-pullsdown.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/popup-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/popup-bezel-right-pullsdown.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/popup-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/radio-image-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/radio-image-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/radio-image-selected-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/radio-image-selected-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/radio-image-selected.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/radio-image.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-down-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-knob-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-horizontal-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-left-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-right-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-up-arrow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-disabled-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-knob-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-track-disabled.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scroller-vertical-track.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/scrollview-bottom-corner-color.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-disabled-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-divider.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-highlighted-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-pushed-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/segmented-control-bezel-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/slider-circular-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/slider-circular-disabled-bezel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/slider-circular-disabled-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/slider-circular-knob.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/spinner.gif.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-ascending.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-descending.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-highlighted-pressed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableview-headerview-pressed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableview-headerview.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/tableviewselection.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-focused-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-left.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-rounded-right.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/textfield-bezel-square-focused-8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/vertical-track-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/vertical-track-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-bottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-center.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/vertical-track-disabled-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/Aristo.blend/Resources/vertical-track-top.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPApplication/New.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPApplication/NewHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPApplication/Open.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPApplication/OpenHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPApplication/Save.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPApplication/SaveHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/closedHandCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/contextualMenuCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/disappearingItemCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/dragCopyCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/dragLinkCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/openHandCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/resizeDownCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/resizeLeftCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/resizeRightCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPCursor/resizeUpCursor.cur.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImage/CPImageNameColorPanel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImage/CPImageNameColorPanelHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewBottomLeftShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewBottomRightShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewBottomShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewLeftShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewRightShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewTopLeftShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewTopRightShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPImageView/CPImageViewTopShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPMenuItem/CPMenuItemOnState.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPMenuItem/CPMenuItemOnStateHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBarHUDBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorBezelBorderHUDBarRegular2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPProgressIndicator/CPProgressIndicatorSpinningStyleRegular.gif.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPSearchField/CPSearchFieldCancel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPSearchField/CPSearchFieldCancelPressed.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPSearchField/CPSearchFieldFind.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPSearchField/CPSearchFieldSearch.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyBottomRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyTop.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewHeavyTopRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightBottom.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightBottomLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightBottomRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightTop.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightTopLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPShadowView/CPShadowViewLightTopRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPSplitView/CPSplitViewHorizontal.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPSplitView/CPSplitViewVertical.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/CPTabViewBezelBackgroundCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/CPTabViewBezelBorder.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/CPTabViewBezelBorderLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/CPTabViewBezelBorderRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelBackgroundCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelBackgroundLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelBackgroundRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelSelectedCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelSelectedLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelSelectedRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelsViewCenter.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelsViewLeft.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPTabView/_CPTabLabelsViewRight.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPToolbarItem/CPToolbarItemSeparator2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/CPWindowShadow8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/HUD/CPWindowHUDBackground8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButton.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsaved.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardCloseButtonUnsavedHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButton.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardMaximizeButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButton.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardMinimizeButtonHighlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindow/Standard/CPWindowStandardTop2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/CPWindowResizeIndicator.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/FIXME_ImageShadow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/GenericFile.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/HUDTheme/WindowClose.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/HUDTheme/WindowCloseActive.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackground.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuBarWindow/_CPMenuBarWindowBackgroundSelected.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindow1.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindow3.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindow4.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindow5.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindow7.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreAbove.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindowMoreBelow.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded0.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded2.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded6.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPMenuWindow/_CPMenuWindowRounded8.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPToolbarView/_CPToolbarViewBackground.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsAlternateImage.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPToolbarView/_CPToolbarViewExtraItemsImage.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/_CPWindowView/_CPWindowViewResizeIndicator.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/action_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/brightness_bar.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/browser-leaf-highlighted.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/browser-leaf.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/browser-resize-control.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/color_well.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/empty.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/minus_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/plus_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/slider_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/slider_button_h.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/standardApplicationIcon.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/wheel.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/wheel_black.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/wheel_button.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/AppKit/Resources/wheel_button_h.png.

cannot compute difference between binary files

Added Site/Site_Z/Frameworks/Debug/Foundation/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;19;com.280n.FoundationK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;10;FoundationK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;4;ObjJE;K;18;CPBundleExecutableS;13;Foundation.sjK;36;CPBundleEnvironmentsWithImageSpritesA;E;E;

Added Site/Site_Z/Frameworks/Debug/Foundation/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site_Z/Frameworks/Debug/Foundation/ObjJ.environment/Foundation.sj.

more than 10,000 changes

Added Site/Site_Z/Frameworks/Debug/Objective-J/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site_Z/Frameworks/Debug/Objective-J/Objective-J.js.







































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
/*
 * Objective-J.js
 * Objective-J
 *
 * Created by Francisco Tolmasky.
 * Copyright 2008-2010, 280 North, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */




var ObjectiveJ = { };

(function (global, exports)
{
if (!this.JSON) {
    JSON = {};
}
(function () {
    function f(n) {
        return n < 10 ? '0' + n : n;
    }
    if (typeof Date.prototype.toJSON !== 'function') {
        Date.prototype.toJSON = function (key) {
            return this.getUTCFullYear() + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate()) + 'T' +
                 f(this.getUTCHours()) + ':' +
                 f(this.getUTCMinutes()) + ':' +
                 f(this.getUTCSeconds()) + 'Z';
        };
        String.prototype.toJSON =
        Number.prototype.toJSON =
        Boolean.prototype.toJSON = function (key) {
            return this.valueOf();
        };
    }
    var cx = new RegExp('[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]', "g");
    var escapable = new RegExp('[\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]', "g");
    var gap,
        indent,
        meta = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        rep;
    function quote(string) {
        escapable.lastIndex = 0;
        return escapable.test(string) ?
            '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string' ? c :
                    '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' :
            '"' + string + '"';
    }
    function str(key, holder) {
        var i,
            k,
            v,
            length,
            mind = gap,
            partial,
            value = holder[key];
        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }
        if (typeof rep === 'function') {
            value = rep.call(holder, key, value);
        }
        switch (typeof value) {
        case 'string':
            return quote(value);
        case 'number':
            return isFinite(value) ? String(value) : 'null';
        case 'boolean':
        case 'null':
            return String(value);
        case 'object':
            if (!value) {
                return 'null';
            }
            gap += indent;
            partial = [];
            if (Object.prototype.toString.apply(value) === '[object Array]') {
                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null';
                }
                v = partial.length === 0 ? '[]' :
                    gap ? '[\n' + gap +
                            partial.join(',\n' + gap) + '\n' +
                                mind + ']' :
                          '[' + partial.join(',') + ']';
                gap = mind;
                return v;
            }
            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            } else {
                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
                        }
                    }
                }
            }
            v = partial.length === 0 ? '{}' :
                gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
                        mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v;
        }
    }
    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (value, replacer, space) {
            var i;
            gap = '';
            indent = '';
            if (typeof space === 'number') {
                for (i = 0; i < space; i += 1) {
                    indent += ' ';
                }
            } else if (typeof space === 'string') {
                indent = space;
            }
            rep = replacer;
            if (replacer && typeof replacer !== 'function' &&
                    (typeof replacer !== 'object' ||
                     typeof replacer.length !== 'number')) {
                throw new Error('JSON.stringify');
            }
            return str('', {'': value});
        };
    }
    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (text, reviver) {
            var j;
            function walk(holder, key) {
                var k, v, value = holder[key];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }
            cx.lastIndex = 0;
            if (cx.test(text)) {
                text = text.replace(cx, function (a) {
                    return '\\u' +
                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }
            if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
                j = eval('(' + text + ')');
                return typeof reviver === 'function' ?
                    walk({'': j}, '') : j;
            }
            throw new SyntaxError('JSON.parse');
        };
    }
}());
var formatRegex = new RegExp("([^%]+|%[\\+\\-\\ \\#0]*[0-9\\*]*(.[0-9\\*]+)?[hlL]?[cbBdieEfgGosuxXpn%@])", "g");
var tagRegex = new RegExp("(%)([\\+\\-\\ \\#0]*)([0-9\\*]*)((.[0-9\\*]+)?)([hlL]?)([cbBdieEfgGosuxXpn%@])");
exports.sprintf = function(format)
{
    var format = arguments[0],
        tokens = format.match(formatRegex),
        index = 0,
        result = "",
        arg = 1;
    for (var i = 0; i < tokens.length; i++)
    {
        var t = tokens[i];
        if (format.substring(index, index + t.length) != t)
        {
            return result;
        }
        index += t.length;
        if (t.charAt(0) != "%")
        {
            result += t;
        }
        else
        {
            var subtokens = t.match(tagRegex);
            if (subtokens.length != 8 || subtokens[0] != t)
            {
                return result;
            }
            var percentSign = subtokens[1],
                flags = subtokens[2],
                widthString = subtokens[3],
                precisionString = subtokens[4],
                length = subtokens[6],
                specifier = subtokens[7];
            var width = null;
            if (widthString == "*")
                width = arguments[arg++];
            else if (widthString != "")
                width = Number(widthString);
            var precision = null;
            if (precisionString == ".*")
                precision = arguments[arg++];
            else if (precisionString != "")
                precision = Number(precisionString.substring(1));
            var leftJustify = (flags.indexOf("-") >= 0);
            var padZeros = (flags.indexOf("0") >= 0);
            var subresult = "";
            if (RegExp("[bBdiufeExXo]").test(specifier))
            {
                var num = Number(arguments[arg++]);
                var sign = "";
                if (num < 0)
                {
                    sign = "-";
                }
                else
                {
                    if (flags.indexOf("+") >= 0)
                        sign = "+";
                    else if (flags.indexOf(" ") >= 0)
                        sign = " ";
                }
                if (specifier == "d" || specifier == "i" || specifier == "u")
                {
                    var number = String(Math.abs(Math.floor(num)));
                    subresult = justify(sign, "", number, "", width, leftJustify, padZeros)
                }
                if (specifier == "f")
                {
                    var number = String((precision != null) ? Math.abs(num).toFixed(precision) : Math.abs(num));
                    var suffix = (flags.indexOf("#") >= 0 && number.indexOf(".") < 0) ? "." : "";
                    subresult = justify(sign, "", number, suffix, width, leftJustify, padZeros);
                }
                if (specifier == "e" || specifier == "E")
                {
                    var number = String(Math.abs(num).toExponential(precision != null ? precision : 21));
                    var suffix = (flags.indexOf("#") >= 0 && number.indexOf(".") < 0) ? "." : "";
                    subresult = justify(sign, "", number, suffix, width, leftJustify, padZeros);
                }
                if (specifier == "x" || specifier == "X")
                {
                    var number = String(Math.abs(num).toString(16));
                    var prefix = (flags.indexOf("#") >= 0 && num != 0) ? "0x" : "";
                    subresult = justify(sign, prefix, number, "", width, leftJustify, padZeros);
                }
                if (specifier == "b" || specifier == "B")
                {
                    var number = String(Math.abs(num).toString(2));
                    var prefix = (flags.indexOf("#") >= 0 && num != 0) ? "0b" : "";
                    subresult = justify(sign, prefix, number, "", width, leftJustify, padZeros);
                }
                if (specifier == "o")
                {
                    var number = String(Math.abs(num).toString(8));
                    var prefix = (flags.indexOf("#") >= 0 && num != 0) ? "0" : "";
                    subresult = justify(sign, prefix, number, "", width, leftJustify, padZeros);
                }
                if (RegExp("[A-Z]").test(specifier))
                    subresult = subresult.toUpperCase();
                else
                    subresult = subresult.toLowerCase();
            }
            else
            {
                var subresult = "";
                if (specifier == "%")
                    subresult = "%";
                else if (specifier == "c")
                    subresult = String(arguments[arg++]).charAt(0);
                else if (specifier == "s" || specifier == "@")
                    subresult = String(arguments[arg++]);
                else if (specifier == "p" || specifier == "n")
                {
                    arg++;
                    subresult = "";
                }
                subresult = justify("", "", subresult, "", width, leftJustify, false);
            }
            result += subresult;
        }
    }
    return result;
}
function justify(sign, prefix, string, suffix, width, leftJustify, padZeros)
{
    var length = (sign.length + prefix.length + string.length + suffix.length);
    if (leftJustify)
    {
        return sign + prefix + string + suffix + pad(width - length, " ");
    }
    else
    {
        if (padZeros)
            return sign + prefix + pad(width - length, "0") + string + suffix;
        else
            return pad(width - length, " ") + sign + prefix + string + suffix;
    }
}
function pad(n, ch)
{
    return Array(MAX(0,n)+1).join(ch);
}
CPLogDisable = false;
var CPLogDefaultTitle = "Cappuccino";
var CPLogLevels = ["fatal", "error", "warn", "info", "debug", "trace"];
var CPLogDefaultLevel = CPLogLevels[3];
var _CPLogLevelsInverted = {};
for (var i = 0; i < CPLogLevels.length; i++)
    _CPLogLevelsInverted[CPLogLevels[i]] = i;
var _CPLogRegistrations = {};
CPLogRegister = function(aProvider, aMaxLevel, aFormatter)
{
    CPLogRegisterRange(aProvider, CPLogLevels[0], aMaxLevel || CPLogLevels[CPLogLevels.length-1], aFormatter);
}
CPLogRegisterRange = function(aProvider, aMinLevel, aMaxLevel, aFormatter)
{
    var min = _CPLogLevelsInverted[aMinLevel];
    var max = _CPLogLevelsInverted[aMaxLevel];
    if (min !== undefined && max !== undefined && min <= max)
        for (var i = min; i <= max; i++)
            CPLogRegisterSingle(aProvider, CPLogLevels[i], aFormatter);
}
CPLogRegisterSingle = function(aProvider, aLevel, aFormatter)
{
    if (!_CPLogRegistrations[aLevel])
        _CPLogRegistrations[aLevel] = [];
    for (var i = 0; i < _CPLogRegistrations[aLevel].length; i++)
        if (_CPLogRegistrations[aLevel][i][0] === aProvider)
        {
            _CPLogRegistrations[aLevel][i][1] = aFormatter;
            return;
        }
    _CPLogRegistrations[aLevel].push([aProvider, aFormatter]);
}
CPLogUnregister = function(aProvider) {
    for (var aLevel in _CPLogRegistrations)
        for (var i = 0; i < _CPLogRegistrations[aLevel].length; i++)
            if (_CPLogRegistrations[aLevel][i][0] === aProvider)
                _CPLogRegistrations[aLevel].splice(i--, 1);
}
function _CPLogDispatch(parameters, aLevel, aTitle)
{
    if (aTitle == undefined)
        aTitle = CPLogDefaultTitle;
    if (aLevel == undefined)
        aLevel = CPLogDefaultLevel;
    var message = (typeof parameters[0] == "string" && parameters.length > 1) ? exports.sprintf.apply(null, parameters) : String(parameters[0]);
    if (_CPLogRegistrations[aLevel])
        for (var i = 0; i < _CPLogRegistrations[aLevel].length; i++)
        {
            var logger = _CPLogRegistrations[aLevel][i];
            logger[0](message, aLevel, aTitle, logger[1]);
        }
}
CPLog = function() { _CPLogDispatch(arguments); }
for (var i = 0; i < CPLogLevels.length; i++)
    CPLog[CPLogLevels[i]] = (function(level) { return function() { _CPLogDispatch(arguments, level); }; })(CPLogLevels[i]);
var _CPFormatLogMessage = function(aString, aLevel, aTitle)
{
    var now = new Date();
    aLevel = ( aLevel == null ? '' : ' [' + CPLogColorize(aLevel, aLevel) + ']' );
    if (typeof exports.sprintf == "function")
        return exports.sprintf("%4d-%02d-%02d %02d:%02d:%02d.%03d %s%s: %s",
            now.getFullYear(), now.getMonth() + 1, now.getDate(),
            now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds(),
            aTitle, aLevel, aString);
    else
        return now + " " + aTitle + aLevel + ": " + aString;
}
CPLogConsole = function(aString, aLevel, aTitle, aFormatter)
{
    if (typeof console != "undefined")
    {
        var message = (aFormatter || _CPFormatLogMessage)(aString, aLevel, aTitle);
        var logger = {
            "fatal": "error",
            "error": "error",
            "warn": "warn",
            "info": "info",
            "debug": "debug",
            "trace": "debug"
        }[aLevel];
        if (logger && console[logger])
            console[logger](message);
        else if (console.log)
            console.log(message);
    }
}
CPLogColorize = function(aString, aLevel)
{
    return aString;
}
CPLogAlert = function(aString, aLevel, aTitle, aFormatter)
{
    if (typeof alert != "undefined" && !CPLogDisable)
    {
        var message = (aFormatter || _CPFormatLogMessage)(aString, aLevel, aTitle);
        CPLogDisable = !confirm(message + "\n\n(Click cancel to stop log alerts)");
    }
}
var CPLogWindow = null;
CPLogPopup = function(aString, aLevel, aTitle, aFormatter)
{
    try {
        if (CPLogDisable || window.open == undefined)
            return;
        if (!CPLogWindow || !CPLogWindow.document)
        {
            CPLogWindow = window.open("", "_blank", "width=600,height=400,status=no,resizable=yes,scrollbars=yes");
            if (!CPLogWindow) {
                CPLogDisable = !confirm(aString + "\n\n(Disable pop-up blocking for CPLog window; Click cancel to stop log alerts)");
                return;
            }
            _CPLogInitPopup(CPLogWindow);
        }
        var logDiv = CPLogWindow.document.createElement("div");
        logDiv.setAttribute("class", aLevel || "fatal");
        var message = (aFormatter || _CPFormatLogMessage)(aString, aFormatter ? aLevel : null, aTitle);
        logDiv.appendChild(CPLogWindow.document.createTextNode(message));
        CPLogWindow.log.appendChild(logDiv);
        if (CPLogWindow.focusEnabled.checked)
            CPLogWindow.focus();
        if (CPLogWindow.blockEnabled.checked)
            CPLogWindow.blockEnabled.checked = CPLogWindow.confirm(message+"\nContinue blocking?");
        if (CPLogWindow.scrollEnabled.checked)
            CPLogWindow.scrollToBottom();
    } catch(e) {
    }
}
var CPLogPopupStyle ='<style type="text/css" media="screen"> body{font:10px Monaco,Courier,"Courier New",monospace,mono;padding-top:15px;} div > .fatal,div > .error,div > .warn,div > .info,div > .debug,div > .trace{display:none;overflow:hidden;white-space:pre;padding:0px 5px 0px 5px;margin-top:2px;-moz-border-radius:5px;-webkit-border-radius:5px;} div[wrap="yes"] > div{white-space:normal;} .fatal{background-color:#ffb2b3;} .error{background-color:#ffe2b2;} .warn{background-color:#fdffb2;} .info{background-color:#e4ffb2;} .debug{background-color:#a0e5a0;} .trace{background-color:#99b9ff;} .enfatal .fatal,.enerror .error,.enwarn .warn,.eninfo .info,.endebug .debug,.entrace .trace{display:block;} div#header{background-color:rgba(240,240,240,0.82);position:fixed;top:0px;left:0px;width:100%;border-bottom:1px solid rgba(0,0,0,0.33);text-align:center;} ul#enablers{display:inline-block;margin:1px 15px 0 15px;padding:2px 0 2px 0;} ul#enablers li{display:inline;padding:0px 5px 0px 5px;margin-left:4px;-moz-border-radius:5px;-webkit-border-radius:5px;} [enabled="no"]{opacity:0.25;} ul#options{display:inline-block;margin:0 15px 0px 15px;padding:0 0px;} ul#options li{margin:0 0 0 0;padding:0 0 0 0;display:inline;} </style>';
function _CPLogInitPopup(logWindow)
{
    var doc = logWindow.document;
    doc.writeln("<html><head><title></title>"+CPLogPopupStyle+"</head><body></body></html>");
    doc.title = CPLogDefaultTitle + " Run Log";
    var head = doc.getElementsByTagName("head")[0];
    var body = doc.getElementsByTagName("body")[0];
    var base = window.location.protocol + "//" + window.location.host + window.location.pathname;
    base = base.substring(0,base.lastIndexOf("/")+1);
    var div = doc.createElement("div");
    div.setAttribute("id", "header");
    body.appendChild(div);
    var ul = doc.createElement("ul");
    ul.setAttribute("id", "enablers");
    div.appendChild(ul);
    for (var i = 0; i < CPLogLevels.length; i++) {
        var li = doc.createElement("li");
        li.setAttribute("id", "en"+CPLogLevels[i]);
        li.setAttribute("class", CPLogLevels[i]);
        li.setAttribute("onclick", "toggle(this);");
        li.setAttribute("enabled", "yes");
        li.appendChild(doc.createTextNode(CPLogLevels[i]));
        ul.appendChild(li);
    }
    var ul = doc.createElement("ul");
    ul.setAttribute("id", "options");
    div.appendChild(ul);
    var options = {"focus":["Focus",false], "block":["Block",false], "wrap":["Wrap",false], "scroll":["Scroll",true], "close":["Close",true]};
    for (o in options) {
        var li = doc.createElement("li");
        ul.appendChild(li);
        logWindow[o+"Enabled"] = doc.createElement("input");
        logWindow[o+"Enabled"].setAttribute("id", o);
        logWindow[o+"Enabled"].setAttribute("type", "checkbox");
        if (options[o][1])
            logWindow[o+"Enabled"].setAttribute("checked", "checked");
        li.appendChild(logWindow[o+"Enabled"]);
        var label = doc.createElement("label");
        label.setAttribute("for", o);
        label.appendChild(doc.createTextNode(options[o][0]));
        li.appendChild(label);
    }
    logWindow.log = doc.createElement("div");
    logWindow.log.setAttribute("class", "enerror endebug enwarn eninfo enfatal entrace");
    body.appendChild(logWindow.log);
    logWindow.toggle = function(elem) {
        var enabled = (elem.getAttribute("enabled") == "yes") ? "no" : "yes";
        elem.setAttribute("enabled", enabled);
        if (enabled == "yes")
            logWindow.log.className += " " + elem.id
        else
            logWindow.log.className = logWindow.log.className.replace(new RegExp("[\\s]*"+elem.id, "g"), "");
    }
    logWindow.scrollToBottom = function() {
        logWindow.scrollTo(0, body.offsetHeight);
    }
    logWindow.wrapEnabled.addEventListener("click", function() {
        logWindow.log.setAttribute("wrap", logWindow.wrapEnabled.checked ? "yes" : "no");
    }, false);
    logWindow.addEventListener("keydown", function(e) {
        var e = e || logWindow.event;
        if (e.keyCode == 75 && (e.ctrlKey || e.metaKey)) {
            while (logWindow.log.firstChild) {
                logWindow.log.removeChild(logWindow.log.firstChild);
            }
            e.preventDefault();
        }
    }, "false");
    window.addEventListener("unload", function() {
        if (logWindow && logWindow.closeEnabled && logWindow.closeEnabled.checked) {
            CPLogDisable = true;
            logWindow.close();
        }
    }, false);
    logWindow.addEventListener("unload", function() {
        if (!CPLogDisable) {
            CPLogDisable = !confirm("Click cancel to stop logging");
        }
    }, false);
}
CPLogDefault = (typeof window === "object" && window.console) ? CPLogConsole : CPLogPopup;
var undefined;
if (typeof window !== "undefined")
{
    window.setNativeTimeout = window.setTimeout;
    window.clearNativeTimeout = window.clearTimeout;
    window.setNativeInterval = window.setInterval;
    window.clearNativeInterval = window.clearInterval;
}
NO = false;
YES = true;
nil = null;
Nil = null;
NULL = null;
ABS = Math.abs;
ASIN = Math.asin;
ACOS = Math.acos;
ATAN = Math.atan;
ATAN2 = Math.atan2;
SIN = Math.sin;
COS = Math.cos;
TAN = Math.tan;
EXP = Math.exp;
POW = Math.pow;
CEIL = Math.ceil;
FLOOR = Math.floor;
ROUND = Math.round;
MIN = Math.min;
MAX = Math.max;
RAND = Math.random;
SQRT = Math.sqrt;
E = Math.E;
LN2 = Math.LN2;
LN10 = Math.LN10;
LOG2E = Math.LOG2E;
LOG10E = Math.LOG10E;
PI = Math.PI;
PI2 = Math.PI * 2.0;
PI_2 = Math.PI / 2.0;
SQRT1_2 = Math.SQRT1_2;
SQRT2 = Math.SQRT2;
function EventDispatcher( anOwner)
{
    this._eventListenersForEventNames = { };
    this._owner = anOwner;
}
EventDispatcher.prototype.addEventListener = function( anEventName, anEventListener)
{
    var eventListenersForEventNames = this._eventListenersForEventNames;
    if (!hasOwnProperty.call(eventListenersForEventNames, anEventName))
    {
        var eventListenersForEventName = [];
        eventListenersForEventNames[anEventName] = eventListenersForEventName;
    }
    else
        var eventListenersForEventName = eventListenersForEventNames[anEventName];
    var index = eventListenersForEventName.length;
    while (index--)
        if (eventListenersForEventName[index] === anEventListener)
            return;
    eventListenersForEventName.push(anEventListener);
}
EventDispatcher.prototype.removeEventListener = function( anEventName, anEventListener)
{
    var eventListenersForEventNames = this._eventListenersForEventNames;
    if (!hasOwnProperty.call(eventListenersForEventNames, anEventName))
        return;
    var eventListenersForEventName = eventListenersForEventNames[anEventName],
        index = eventListenersForEventName.length;
    while (index--)
        if (eventListenersForEventName[index] === anEventListener)
            return eventListenersForEventName.splice(index, 1);
}
EventDispatcher.prototype.dispatchEvent = function( anEvent)
{
    var type = anEvent.type,
        eventListenersForEventNames = this._eventListenersForEventNames;
    if (hasOwnProperty.call(eventListenersForEventNames, type))
    {
        var eventListenersForEventName = this._eventListenersForEventNames[type],
            index = 0,
            count = eventListenersForEventName.length;
        for (; index < count; ++index)
            eventListenersForEventName[index](anEvent);
    }
    var manual = (this._owner || this)["on" + type];
    if (manual)
        manual(anEvent);
}
var asynchronousTimeoutCount = 0,
    asynchronousTimeoutId = null,
    asynchronousFunctionQueue = [];
function Asynchronous( aFunction)
{
    var currentAsynchronousTimeoutCount = asynchronousTimeoutCount;
    if (asynchronousTimeoutId === null)
    {
        window.setNativeTimeout(function()
        {
            var queue = asynchronousFunctionQueue,
                index = 0,
                count = asynchronousFunctionQueue.length;
            ++asynchronousTimeoutCount;
            asynchronousTimeoutId = null;
            asynchronousFunctionQueue = [];
            for (; index < count; ++index)
                queue[index]();
        }, 0);
    }
    return function()
    {
        var args = arguments;
        if (asynchronousTimeoutCount > currentAsynchronousTimeoutCount)
            aFunction.apply(this, args);
        else
            asynchronousFunctionQueue.push(function() { aFunction.apply(this, args) });
    };
}
var NativeRequest = null;
if (window.ActiveXObject !== undefined)
{
    var MSXML_XMLHTTP_OBJECTS = ["Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP.6.0"],
        index = MSXML_XMLHTTP_OBJECTS.length;
    while (index--)
    {
        try
        {
            var MSXML_XMLHTTP = MSXML_XMLHTTP_OBJECTS[index];
            new ActiveXObject(MSXML_XMLHTTP);
            NativeRequest = function()
            {
                return new ActiveXObject(MSXML_XMLHTTP);
            }
            break;
        }
        catch (anException)
        {
        }
    }
}
if (!NativeRequest)
    NativeRequest = window.XMLHttpRequest;
CFHTTPRequest = function()
{
    this._isOpen = false;
    this._requestHeaders = {};
    this._mimeType = null;
    this._eventDispatcher = new EventDispatcher(this);
    this._nativeRequest = new NativeRequest();
    var self = this;
    this._stateChangeHandler = function()
    {
        determineAndDispatchHTTPRequestEvents(self);
    }
    this._nativeRequest.onreadystatechange = this._stateChangeHandler;
    if (CFHTTPRequest.AuthenticationDelegate !== nil)
        this._eventDispatcher.addEventListener("HTTP403", function(){CFHTTPRequest.AuthenticationDelegate(self)});
}
CFHTTPRequest.UninitializedState = 0;
CFHTTPRequest.LoadingState = 1;
CFHTTPRequest.LoadedState = 2;
CFHTTPRequest.InteractiveState = 3;
CFHTTPRequest.CompleteState = 4;
CFHTTPRequest.AuthenticationDelegate = nil;
CFHTTPRequest.prototype.status = function()
{
    try
    {
        return this._nativeRequest.status || 0;
    }
    catch (anException)
    {
        return 0;
    }
}
CFHTTPRequest.prototype.statusText = function()
{
    try
    {
        return this._nativeRequest.statusText || "";
    }
    catch (anException)
    {
        return "";
    }
}
CFHTTPRequest.prototype.readyState = function()
{
    return this._nativeRequest.readyState;
}
CFHTTPRequest.prototype.success = function()
{
    var status = this.status();
    if (status >= 200 && status < 300)
        return YES;
    return status === 0 && this.responseText() && this.responseText().length;
}
CFHTTPRequest.prototype.responseXML = function()
{
    var responseXML = this._nativeRequest.responseXML;
    if (responseXML && (NativeRequest === window.XMLHttpRequest))
        return responseXML;
    return parseXML(this.responseText());
}
CFHTTPRequest.prototype.responsePropertyList = function()
{
    var responseText = this.responseText();
    if (CFPropertyList.sniffedFormatOfString(responseText) === CFPropertyList.FormatXML_v1_0)
        return CFPropertyList.propertyListFromXML(this.responseXML());
    return CFPropertyList.propertyListFromString(responseText);
}
CFHTTPRequest.prototype.responseText = function()
{
    return this._nativeRequest.responseText;
}
CFHTTPRequest.prototype.setRequestHeader = function( aHeader, aValue)
{
    this._requestHeaders[aHeader] = aValue;
}
CFHTTPRequest.prototype.getResponseHeader = function( aHeader)
{
    return this._nativeRequest.getResponseHeader(aHeader);
}
CFHTTPRequest.prototype.getAllResponseHeaders = function()
{
    return this._nativeRequest.getAllResponseHeaders();
}
CFHTTPRequest.prototype.overrideMimeType = function( aMimeType)
{
    this._mimeType = aMimeType;
}
CFHTTPRequest.prototype.open = function( aMethod, aURL, isAsynchronous, aUser, aPassword)
{
    this._isOpen = true;
    this._URL = aURL;
    this._async = isAsynchronous;
    this._method = aMethod;
    this._user = aUser;
    this._password = aPassword;
    return this._nativeRequest.open(aMethod, aURL, isAsynchronous, aUser, aPassword);
}
CFHTTPRequest.prototype.send = function( aBody)
{
    if (!this._isOpen)
    {
        delete this._nativeRequest.onreadystatechange;
        this._nativeRequest.open(this._method, this._URL, this._async, this._user, this._password);
        this._nativeRequest.onreadystatechange = this._stateChangeHandler;
    }
    for (var i in this._requestHeaders)
    {
        if (this._requestHeaders.hasOwnProperty(i))
            this._nativeRequest.setRequestHeader(i, this._requestHeaders[i]);
    }
    if (this._mimeType && "overrideMimeType" in this._nativeRequest)
        this._nativeRequest.overrideMimeType(this._mimeType);
    this._isOpen = false;
    try
    {
        return this._nativeRequest.send(aBody);
    }
    catch (anException)
    {
        this._eventDispatcher.dispatchEvent({ type:"failure", request:this });
    }
}
CFHTTPRequest.prototype.abort = function()
{
    this._isOpen = false;
    return this._nativeRequest.abort();
}
CFHTTPRequest.prototype.addEventListener = function( anEventName, anEventListener)
{
    this._eventDispatcher.addEventListener(anEventName, anEventListener);
}
CFHTTPRequest.prototype.removeEventListener = function( anEventName, anEventListener)
{
    this._eventDispatcher.removeEventListener(anEventName, anEventListener);
}
function determineAndDispatchHTTPRequestEvents( aRequest)
{
    var eventDispatcher = aRequest._eventDispatcher;
    eventDispatcher.dispatchEvent({ type:"readystatechange", request:aRequest});
    var nativeRequest = aRequest._nativeRequest,
        readyStates = ["uninitialized", "loading", "loaded", "interactive", "complete"];
    if (readyStates[aRequest.readyState()] === "complete")
    {
        var status = "HTTP" + aRequest.status();
        eventDispatcher.dispatchEvent({ type:status, request:aRequest });
        var result = aRequest.success() ? "success" : "failure";
        eventDispatcher.dispatchEvent({ type:result, request:aRequest });
        eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest});
    }
    else
        eventDispatcher.dispatchEvent({ type:readyStates[aRequest.readyState()], request:aRequest});
}
function FileRequest( aURL, onsuccess, onfailure)
{
    var request = new CFHTTPRequest();
    if (aURL.pathExtension() === "plist")
        request.overrideMimeType("text/xml");
    if (exports.asyncLoader)
    {
        request.onsuccess = Asynchronous(onsuccess);
        request.onfailure = Asynchronous(onfailure);
    }
    else
    {
        request.onsuccess = onsuccess;
        request.onfailure = onfailure;
    }
    request.open("GET", aURL.absoluteString(), exports.asyncLoader);
    request.send("");
}
exports.asyncLoader = YES;
exports.Asynchronous = Asynchronous;
exports.determineAndDispatchHTTPRequestEvents = determineAndDispatchHTTPRequestEvents;
var OBJECT_COUNT = 0;
objj_generateObjectUID = function()
{
    return OBJECT_COUNT++;
}
CFPropertyList = function()
{
    this._UID = objj_generateObjectUID();
}
CFPropertyList.DTDRE = /^\s*(?:<\?\s*xml\s+version\s*=\s*\"1.0\"[^>]*\?>\s*)?(?:<\!DOCTYPE[^>]*>\s*)?/i
CFPropertyList.XMLRE = /^\s*(?:<\?\s*xml\s+version\s*=\s*\"1.0\"[^>]*\?>\s*)?(?:<\!DOCTYPE[^>]*>\s*)?<\s*plist[^>]*\>/i;
CFPropertyList.FormatXMLDTD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">";
CFPropertyList.Format280NorthMagicNumber = "280NPLIST";
CFPropertyList.FormatOpenStep = 1,
CFPropertyList.FormatXML_v1_0 = 100,
CFPropertyList.FormatBinary_v1_0 = 200,
CFPropertyList.Format280North_v1_0 = -1000;
CFPropertyList.sniffedFormatOfString = function( aString)
{
    if (aString.match(CFPropertyList.XMLRE))
        return CFPropertyList.FormatXML_v1_0;
    if (aString.substr(0, CFPropertyList.Format280NorthMagicNumber.length) === CFPropertyList.Format280NorthMagicNumber)
       return CFPropertyList.Format280North_v1_0;
    return NULL;
}
CFPropertyList.dataFromPropertyList = function( aPropertyList, aFormat)
{
    var data = new CFMutableData();
    data.setRawString(CFPropertyList.stringFromPropertyList(aPropertyList, aFormat));
    return data;
}
CFPropertyList.stringFromPropertyList = function( aPropertyList, aFormat)
{
    if (!aFormat)
        aFormat = CFPropertyList.Format280North_v1_0;
    var serializers = CFPropertyListSerializers[aFormat];
    return serializers["start"]() +
            serializePropertyList(aPropertyList, serializers) +
            serializers["finish"]();
}
function serializePropertyList( aPropertyList, serializers)
{
    var type = typeof aPropertyList,
        valueOf = aPropertyList.valueOf(),
        typeValueOf = typeof valueOf;
    if (type !== typeValueOf)
    {
        type = typeValueOf;
        aPropertyList = valueOf;
    }
    if (aPropertyList === YES || aPropertyList === NO)
        type = "boolean";
    else if (type === "number")
    {
        if (FLOOR(aPropertyList) === aPropertyList)
            type = "integer";
        else
            type = "real";
    }
    else if (type !== "string")
    {
        if (aPropertyList.slice)
            type = "array";
        else
            type = "dictionary";
    }
    return serializers[type](aPropertyList, serializers);
}
var CFPropertyListSerializers = { };
CFPropertyListSerializers[CFPropertyList.FormatXML_v1_0] =
{
    "start": function()
                    {
                        return CFPropertyList.FormatXMLDTD + "<plist version = \"1.0\">";
                    },
    "finish": function()
                    {
                        return "</plist>";
                    },
    "string": function( aString)
                    {
                        return "<string>" + encodeHTMLComponent(aString) + "</string>";;
                    },
    "boolean" : function( aBoolean)
                    {
                        return aBoolean ? "<true/>" : "<false/>";
                    },
    "integer": function( anInteger)
                    {
                        return "<integer>" + anInteger + "</integer>";
                    },
    "real": function( aFloat)
                    {
                        return "<real>" + aFloat + "</real>";
                    },
    "array": function( anArray, serializers)
                    {
                        var index = 0,
                            count = anArray.length,
                            string = "<array>";
                        for (; index < count; ++index)
                            string += serializePropertyList(anArray[index], serializers);
                        return string + "</array>";
                    },
    "dictionary": function( aDictionary, serializers)
                    {
                        var keys = aDictionary._keys,
                            index = 0,
                            count = keys.length,
                            string = "<dict>";
                        for (; index < count; ++index)
                        {
                            var key = keys[index];
                            string += "<key>" + key + "</key>";
                            string += serializePropertyList(aDictionary.valueForKey(key), serializers);
                        }
                        return string + "</dict>";
                    }
}
var ARRAY_MARKER = "A",
    DICTIONARY_MARKER = "D",
    FLOAT_MARKER = "f",
    INTEGER_MARKER = "d",
    STRING_MARKER = "S",
    TRUE_MARKER = "T",
    FALSE_MARKER = "F",
    KEY_MARKER = "K",
    END_MARKER = "E";
CFPropertyListSerializers[CFPropertyList.Format280North_v1_0] =
{
    "start": function()
                    {
                        return CFPropertyList.Format280NorthMagicNumber + ";1.0;";
                    },
    "finish": function()
                    {
                        return "";
                    },
    "string" : function( aString)
                    {
                        return STRING_MARKER + ';' + aString.length + ';' + aString;
                    },
    "boolean" : function( aBoolean)
                    {
                        return (aBoolean ? TRUE_MARKER : FALSE_MARKER) + ';';
                    },
    "integer": function( anInteger)
                    {
                        var string = "" + anInteger;
                        return INTEGER_MARKER + ';' + string.length + ';' + string;
                    },
    "real": function( aFloat)
                    {
                        var string = "" + aFloat;
                        return FLOAT_MARKER + ';' + string.length + ';' + string;
                    },
    "array": function( anArray, serializers)
                    {
                        var index = 0,
                            count = anArray.length,
                            string = ARRAY_MARKER + ';';
                        for (; index < count; ++index)
                            string += serializePropertyList(anArray[index], serializers);
                        return string + END_MARKER + ';';
                    },
    "dictionary": function( aDictionary, serializers)
                    {
                        var keys = aDictionary._keys,
                            index = 0,
                            count = keys.length,
                            string = DICTIONARY_MARKER +';';
                        for (; index < count; ++index)
                        {
                            var key = keys[index];
                            string += KEY_MARKER + ';' + key.length + ';' + key;
                            string += serializePropertyList(aDictionary.valueForKey(key), serializers);
                        }
                        return string + END_MARKER + ';';
                    }
}
var XML_XML = "xml",
    XML_DOCUMENT = "#document",
    PLIST_PLIST = "plist",
    PLIST_KEY = "key",
    PLIST_DICTIONARY = "dict",
    PLIST_ARRAY = "array",
    PLIST_STRING = "string",
    PLIST_BOOLEAN_TRUE = "true",
    PLIST_BOOLEAN_FALSE = "false",
    PLIST_NUMBER_REAL = "real",
    PLIST_NUMBER_INTEGER = "integer",
    PLIST_DATA = "data";
var _plist_traverseNextNode = function(anXMLNode, stayWithin, stack)
{
    var node = anXMLNode;
    node = (node.firstChild); if (node !== NULL && ((node.nodeType) === 8 || (node.nodeType) === 3)) while ((node = (node.nextSibling)) && ((node.nodeType) === 8 || (node.nodeType) === 3)) ;;
    if (node)
        return node;
    if ((String(anXMLNode.nodeName)) === PLIST_ARRAY || (String(anXMLNode.nodeName)) === PLIST_DICTIONARY)
        stack.pop();
    else
    {
        if (node === stayWithin)
            return NULL;
        node = anXMLNode;
        while ((node = (node.nextSibling)) && ((node.nodeType) === 8 || (node.nodeType) === 3)) ;;
        if (node)
            return node;
    }
    node = anXMLNode;
    while (node)
    {
        var next = node;
        while ((next = (next.nextSibling)) && ((next.nodeType) === 8 || (next.nodeType) === 3)) ;;
        if (next)
            return next;
        var node = (node.parentNode);
        if (stayWithin && node === stayWithin)
            return NULL;
        stack.pop();
    }
    return NULL;
}
CFPropertyList.propertyListFromData = function( aData, aFormat)
{
    return CFPropertyList.propertyListFromString(aData.rawString(), aFormat);
}
CFPropertyList.propertyListFromString = function( aString, aFormat)
{
    if (!aFormat)
        aFormat = CFPropertyList.sniffedFormatOfString(aString);
    if (aFormat === CFPropertyList.FormatXML_v1_0)
        return CFPropertyList.propertyListFromXML(aString);
    if (aFormat === CFPropertyList.Format280North_v1_0)
        return propertyListFrom280NorthString(aString);
    return NULL;
}
var ARRAY_MARKER = "A",
    DICTIONARY_MARKER = "D",
    FLOAT_MARKER = "f",
    INTEGER_MARKER = "d",
    STRING_MARKER = "S",
    TRUE_MARKER = "T",
    FALSE_MARKER = "F",
    KEY_MARKER = "K",
    END_MARKER = "E";
function propertyListFrom280NorthString( aString)
{
    var stream = new MarkedStream(aString),
        marker = NULL,
        key = "",
        object = NULL,
        plistObject = NULL,
        containers = [],
        currentContainer = NULL;
    while (marker = stream.getMarker())
    {
        if (marker === END_MARKER)
        {
            containers.pop();
            continue;
        }
        var count = containers.length;
        if (count)
            currentContainer = containers[count - 1];
        if (marker === KEY_MARKER)
        {
            key = stream.getString();
            marker = stream.getMarker();
        }
        switch (marker)
        {
            case ARRAY_MARKER: object = []
                                    containers.push(object);
                                    break;
            case DICTIONARY_MARKER: object = new CFMutableDictionary();
                                    containers.push(object);
                                    break;
            case FLOAT_MARKER: object = parseFloat(stream.getString());
                                    break;
            case INTEGER_MARKER: object = parseInt(stream.getString(), 10);
                                    break;
            case STRING_MARKER: object = stream.getString();
                                    break;
            case TRUE_MARKER: object = YES;
                                    break;
            case FALSE_MARKER: object = NO;
                                    break;
            default: throw new Error("*** " + marker + " marker not recognized in Plist.");
        }
        if (!plistObject)
            plistObject = object;
        else if (currentContainer)
            if (currentContainer.slice)
                currentContainer.push(object);
            else
                currentContainer.setValueForKey(key, object);
    }
    return plistObject;
}
function encodeHTMLComponent( aString)
{
    return aString.replace(/&/g,'&amp;').replace(/"/g, '&quot;').replace(/'/g, '&apos;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
}
function decodeHTMLComponent( aString)
{
    return aString.replace(/&quot;/g, '"').replace(/&apos;/g, '\'').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
}
function parseXML( aString)
{
    if (window.DOMParser)
        return (new window.DOMParser().parseFromString(aString, "text/xml").documentElement);
    else if (window.ActiveXObject)
    {
        XMLNode = new ActiveXObject("Microsoft.XMLDOM");
        var matches = aString.match(CFPropertyList.DTDRE);
        if (matches)
            aString = aString.substr(matches[0].length);
        XMLNode.loadXML(aString);
        return XMLNode
    }
    return NULL;
}
CFPropertyList.propertyListFromXML = function( aStringOrXMLNode)
{
    var XMLNode = aStringOrXMLNode;
    if (aStringOrXMLNode.valueOf && typeof aStringOrXMLNode.valueOf() === "string")
        XMLNode = parseXML(aStringOrXMLNode);
    while (((String(XMLNode.nodeName)) === XML_DOCUMENT) || ((String(XMLNode.nodeName)) === XML_XML))
        XMLNode = (XMLNode.firstChild); if (XMLNode !== NULL && ((XMLNode.nodeType) === 8 || (XMLNode.nodeType) === 3)) while ((XMLNode = (XMLNode.nextSibling)) && ((XMLNode.nodeType) === 8 || (XMLNode.nodeType) === 3)) ;;
    if (((XMLNode.nodeType) === 10))
        while ((XMLNode = (XMLNode.nextSibling)) && ((XMLNode.nodeType) === 8 || (XMLNode.nodeType) === 3)) ;;
    if (!((String(XMLNode.nodeName)) === PLIST_PLIST))
        return NULL;
    var key = "",
        object = NULL,
        plistObject = NULL,
        plistNode = XMLNode,
        containers = [],
        currentContainer = NULL;
    while (XMLNode = _plist_traverseNextNode(XMLNode, plistNode, containers))
    {
        var count = containers.length;
        if (count)
            currentContainer = containers[count - 1];
        if ((String(XMLNode.nodeName)) === PLIST_KEY)
        {
            key = ((String((XMLNode.firstChild).nodeValue)));
            while ((XMLNode = (XMLNode.nextSibling)) && ((XMLNode.nodeType) === 8 || (XMLNode.nodeType) === 3)) ;;
        }
        switch (String((String(XMLNode.nodeName))))
        {
            case PLIST_ARRAY: object = []
                                        containers.push(object);
                                        break;
            case PLIST_DICTIONARY: object = new CFMutableDictionary();
                                        containers.push(object);
                                        break;
            case PLIST_NUMBER_REAL: object = parseFloat(((String((XMLNode.firstChild).nodeValue))));
                                        break;
            case PLIST_NUMBER_INTEGER: object = parseInt(((String((XMLNode.firstChild).nodeValue))), 10);
                                        break;
            case PLIST_STRING: if ((XMLNode.getAttribute("type") === "base64"))
                                            object = (XMLNode.firstChild) ? CFData.decodeBase64ToString(((String((XMLNode.firstChild).nodeValue)))) : "";
                                        else
                                            object = decodeHTMLComponent((XMLNode.firstChild) ? ((String((XMLNode.firstChild).nodeValue))) : "");
                                        break;
            case PLIST_BOOLEAN_TRUE: object = YES;
                                        break;
            case PLIST_BOOLEAN_FALSE: object = NO;
                                        break;
            case PLIST_DATA: object = new CFMutableData();
                                        object.bytes = (XMLNode.firstChild) ? CFData.decodeBase64ToArray(((String((XMLNode.firstChild).nodeValue))), YES) : [];
                                        break;
            default: throw new Error("*** " + (String(XMLNode.nodeName)) + " tag not recognized in Plist.");
        }
        if (!plistObject)
            plistObject = object;
        else if (currentContainer)
            if (currentContainer.slice)
                currentContainer.push(object);
            else
                currentContainer.setValueForKey(key, object);
    }
    return plistObject;
}
kCFPropertyListOpenStepFormat = CFPropertyList.FormatOpenStep;
kCFPropertyListXMLFormat_v1_0 = CFPropertyList.FormatXML_v1_0;
kCFPropertyListBinaryFormat_v1_0 = CFPropertyList.FormatBinary_v1_0;
kCFPropertyList280NorthFormat_v1_0 = CFPropertyList.Format280North_v1_0;
CFPropertyListCreate = function()
{
    return new CFPropertyList();
}
CFPropertyListCreateFromXMLData = function( data)
{
    return CFPropertyList.propertyListFromData(data, CFPropertyList.FormatXML_v1_0);
}
CFPropertyListCreateXMLData = function( aPropertyList)
{
    return CFPropertyList.dataFromPropertyList(aPropertyList, CFPropertyList.FormatXML_v1_0);
}
CFPropertyListCreateFrom280NorthData = function( data)
{
    return CFPropertyList.propertyListFromData(data, CFPropertyList.Format280North_v1_0);
}
CFPropertyListCreate280NorthData = function( aPropertyList)
{
    return CFPropertyList.dataFromPropertyList(aPropertyList, CFPropertyList.Format280North_v1_0);
}
CPPropertyListCreateFromData = function( data, aFormat)
{
    return CFPropertyList.propertyListFromData(data, aFormat);
}
CPPropertyListCreateData = function( aPropertyList, aFormat)
{
    return CFPropertyList.dataFromPropertyList(aPropertyList, aFormat);
}
CFDictionary = function( aDictionary)
{
    this._keys = [];
    this._count = 0;
    this._buckets = { };
    this._UID = objj_generateObjectUID();
}
var indexOf = Array.prototype.indexOf,
    hasOwnProperty = Object.prototype.hasOwnProperty;
CFDictionary.prototype.copy = function()
{
    return this;
}
CFDictionary.prototype.mutableCopy = function()
{
    var newDictionary = new CFMutableDictionary(),
        keys = this._keys,
        count = this._count;
    newDictionary._keys = keys.slice();
    newDictionary._count = count;
    var index = 0,
        buckets = this._buckets,
        newBuckets = newDictionary._buckets;
    for (; index < count; ++index)
    {
        var key = keys[index];
        newBuckets[key] = buckets[key];
    }
    return newDictionary;
}
CFDictionary.prototype.containsKey = function( aKey)
{
    return hasOwnProperty.apply(this._buckets, [aKey]);
}
CFDictionary.prototype.containsKey.displayName = "CFDictionary.prototype.containsKey";
CFDictionary.prototype.containsValue = function( anObject)
{
    var keys = this._keys,
        buckets = this._buckets,
        index = 0,
        count = keys.length;
    for (; index < count; ++index)
        if (buckets[keys[index]] === anObject)
            return YES;
    return NO;
}
CFDictionary.prototype.containsValue.displayName = "CFDictionary.prototype.containsValue";
CFDictionary.prototype.count = function()
{
    return this._count;
}
CFDictionary.prototype.count.displayName = "CFDictionary.prototype.count";
CFDictionary.prototype.countOfKey = function( aKey)
{
    return this.containsKey(aKey) ? 1 : 0;
}
CFDictionary.prototype.countOfKey.displayName = "CFDictionary.prototype.countOfKey";
CFDictionary.prototype.countOfValue = function( anObject)
{
    var keys = this._keys,
        buckets = this._buckets,
        index = 0,
        count = keys.length,
        countOfValue = 0;
    for (; index < count; ++index)
        if (buckets[keys[index]] === anObject)
            ++countOfValue;
    return countOfValue;
}
CFDictionary.prototype.countOfValue.displayName = "CFDictionary.prototype.countOfValue";
CFDictionary.prototype.keys = function()
{
    return this._keys.slice();
}
CFDictionary.prototype.keys.displayName = "CFDictionary.prototype.keys";
CFDictionary.prototype.valueForKey = function( aKey)
{
    var buckets = this._buckets;
    if (!hasOwnProperty.apply(buckets, [aKey]))
        return nil;
    return buckets[aKey];
}
CFDictionary.prototype.valueForKey.displayName = "CFDictionary.prototype.valueForKey";
CFDictionary.prototype.toString = function()
{
    var string = "{\n",
        keys = this._keys,
        index = 0,
        count = this._count;
    for (; index < count; ++index)
    {
        var key = keys[index];
        string += "\t" + key + " = \"" + String(this.valueForKey(key)).split('\n').join("\n\t") + "\"\n";
    }
    return string + "}";
}
CFDictionary.prototype.toString.displayName = "CFDictionary.prototype.toString";
CFMutableDictionary = function( aDictionary)
{
    CFDictionary.apply(this, []);
}
CFMutableDictionary.prototype = new CFDictionary();
CFMutableDictionary.prototype.copy = function()
{
    return this.mutableCopy();
}
CFMutableDictionary.prototype.addValueForKey = function( aKey, aValue)
{
    if (this.containsKey(aKey))
        return;
    ++this._count;
    this._keys.push(aKey);
    this._buckets[aKey] = aValue;
}
CFMutableDictionary.prototype.addValueForKey.displayName = "CFMutableDictionary.prototype.addValueForKey";
CFMutableDictionary.prototype.removeValueForKey = function( aKey)
{
    var indexOfKey = -1;
    if (indexOf)
        indexOfKey = indexOf.call(this._keys, aKey);
    else
    {
        var keys = this._keys,
            index = 0,
            count = keys.length;
        for (; index < count; ++index)
            if (keys[index] === aKey)
            {
                indexOfKey = index;
                break;
            }
    }
    if (indexOfKey === -1)
        return;
    --this._count;
    this._keys.splice(indexOfKey, 1);
    delete this._buckets[aKey];
}
CFMutableDictionary.prototype.removeValueForKey.displayName = "CFMutableDictionary.prototype.removeValueForKey";
CFMutableDictionary.prototype.removeAllValues = function()
{
    this._count = 0;
    this._keys = [];
    this._buckets = { };
}
CFMutableDictionary.prototype.removeAllValues.displayName = "CFMutableDictionary.prototype.removeAllValues";
CFMutableDictionary.prototype.replaceValueForKey = function( aKey, aValue)
{
    if (!this.containsKey(aKey))
        return;
    this._buckets[aKey] = aValue;
}
CFMutableDictionary.prototype.replaceValueForKey.displayName = "CFMutableDictionary.prototype.replaceValueForKey";
CFMutableDictionary.prototype.setValueForKey = function( aKey, aValue)
{
    if (aValue === nil || aValue === undefined)
        this.removeValueForKey(aKey);
    else if (this.containsKey(aKey))
        this.replaceValueForKey(aKey, aValue);
    else
        this.addValueForKey(aKey, aValue);
}
CFMutableDictionary.prototype.setValueForKey.displayName = "CFMutableDictionary.prototype.setValueForKey";
CFData = function()
{
    this._rawString = NULL;
    this._propertyList = NULL;
    this._propertyListFormat = NULL;
    this._JSONObject = NULL;
    this._bytes = NULL;
    this._base64 = NULL;
}
CFData.prototype.propertyList = function()
{
    if (!this._propertyList)
        this._propertyList = CFPropertyList.propertyListFromString(this.rawString());
    return this._propertyList;
}
CFData.prototype.JSONObject = function()
{
    if (!this._JSONObject)
    {
        try
        {
            this._JSONObject = JSON.parse(this.rawString());
        }
        catch (anException)
        {
        }
    }
    return this._JSONObject;
}
CFData.prototype.rawString = function()
{
    if (this._rawString === NULL)
    {
        if (this._propertyList)
            this._rawString = CFPropertyList.stringFromPropertyList(this._propertyList, this._propertyListFormat);
        else if (this._JSONObject)
            this._rawString = JSON.stringify(this._JSONObject);
        else
            throw new Error("Can't convert data to string.");
    }
    return this._rawString;
}
CFData.prototype.bytes = function()
{
    return this._bytes;
}
CFData.prototype.base64 = function()
{
    return this._base64;
}
CFMutableData = function()
{
    CFData.call(this);
}
CFMutableData.prototype = new CFData();
function clearMutableData( aData)
{
    this._rawString = NULL;
    this._propertyList = NULL;
    this._propertyListFormat = NULL;
    this._JSONObject = NULL;
    this._bytes = NULL;
    this._base64 = NULL;
}
CFMutableData.prototype.setPropertyList = function( aPropertyList, aFormat)
{
    clearMutableData(this);
    this._propertyList = aPropertyList;
    this._propertyListFormat = aFormat;
}
CFMutableData.prototype.setJSONObject = function( anObject)
{
    clearMutableData(this);
    this._JSONObject = anObject
}
CFMutableData.prototype.setRawString = function( aString)
{
    clearMutableData(this);
    this._rawString = aString;
}
CFMutableData.prototype.setBytes = function( bytes)
{
    clearMutableData(this);
    this._bytes = bytes;
}
CFMutableData.prototype.setBase64String = function( aBase64String)
{
    clearMutableData(this);
    this._base64 = aBase64String;
}
var base64_map_to = [
        "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
        "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
        "0","1","2","3","4","5","6","7","8","9","+","/","="],
    base64_map_from = [];
for (var i = 0; i < base64_map_to.length; i++)
    base64_map_from[base64_map_to[i].charCodeAt(0)] = i;
CFData.decodeBase64ToArray = function(input, strip)
{
    if (strip)
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    var pad = (input[input.length-1] == "=" ? 1 : 0) + (input[input.length-2] == "=" ? 1 : 0),
        length = input.length,
        output = [];
    var i = 0;
    while (i < length)
    {
        var bits = (base64_map_from[input.charCodeAt(i++)] << 18) |
                    (base64_map_from[input.charCodeAt(i++)] << 12) |
                    (base64_map_from[input.charCodeAt(i++)] << 6) |
                    (base64_map_from[input.charCodeAt(i++)]);
        output.push((bits & 0xFF0000) >> 16);
        output.push((bits & 0xFF00) >> 8);
        output.push(bits & 0xFF);
    }
    if (pad > 0)
        return output.slice(0, -1 * pad);
    return output;
}
CFData.encodeBase64Array = function(input)
{
    var pad = (3 - (input.length % 3)) % 3,
        length = input.length + pad,
        output = [];
    if (pad > 0) input.push(0);
    if (pad > 1) input.push(0);
    var i = 0;
    while (i < length)
    {
        var bits = (input[i++] << 16) |
                    (input[i++] << 8) |
                    (input[i++]);
        output.push(base64_map_to[(bits & 0xFC0000) >> 18]);
        output.push(base64_map_to[(bits & 0x3F000) >> 12]);
        output.push(base64_map_to[(bits & 0xFC0) >> 6]);
        output.push(base64_map_to[bits & 0x3F]);
    }
    if (pad > 0)
    {
        output[output.length-1] = "=";
        input.pop();
    }
    if (pad > 1)
    {
        output[output.length-2] = "=";
        input.pop();
    }
    return output.join("");
}
CFData.decodeBase64ToString = function(input, strip)
{
    return CFData.bytesToString(CFData.decodeBase64ToArray(input, strip));
}
CFData.decodeBase64ToUtf16String = function(input, strip)
{
    return CFData.bytesToUtf16String(CFData.decodeBase64ToArray(input, strip));
}
CFData.bytesToString = function(bytes)
{
    return String.fromCharCode.apply(NULL, bytes);
}
CFData.encodeBase64String = function(input)
{
    var temp = [];
    for (var i = 0; i < input.length; i++)
        temp.push(input.charCodeAt(i));
    return CFData.encodeBase64Array(temp);
}
CFData.bytesToUtf16String = function(bytes)
{
    var temp = [];
    for (var i = 0; i < bytes.length; i+=2)
        temp.push(bytes[i+1] << 8 | bytes[i]);
    return String.fromCharCode.apply(NULL, temp);
}
CFData.encodeBase64Utf16String = function(input)
{
    var temp = [];
    for (var i = 0; i < input.length; i++)
    {
        var c = input.charCodeAt(i);
        temp.push(input.charCodeAt(i) & 0xFF);
        temp.push((input.charCodeAt(i) & 0xFF00) >> 8);
    }
    return CFData.encodeBase64Array(temp);
}
var CFURLsForCachedUIDs,
    CFURLPartsForURLStrings,
    CFURLCachingEnableCount = 0;
function enableCFURLCaching()
{
    if (++CFURLCachingEnableCount !== 1)
        return;
    CFURLsForCachedUIDs = { };
    CFURLPartsForURLStrings = { };
}
function disableCFURLCaching()
{
    CFURLCachingEnableCount = MAX(CFURLCachingEnableCount - 1, 0);
    if (CFURLCachingEnableCount !== 0)
        return;
    delete CFURLsForCachedUIDs;
    delete CFURLPartsForURLStrings;
}
var URL_RE = new RegExp(
    "^" +
    "(?:" +
        "([^:/?#]+):" +
    ")?" +
    "(?:" +
        "(//)" +
        "(" +
            "(?:" +
                "(" +
                    "([^:@]*)" +
                    ":?" +
                    "([^:@]*)" +
                ")?" +
                "@" +
            ")?" +
            "([^:/?#]*)" +
            "(?::(\\d*))?" +
        ")" +
    ")?" +
    "([^?#]*)" +
    "(?:\\?([^#]*))?" +
    "(?:#(.*))?"
);
var URI_KEYS =
[
    "url",
    "scheme",
    "authorityRoot",
    "authority",
        "userInfo",
            "user",
            "password",
        "domain",
        "portNumber",
    "path",
    "queryString",
    "fragment"
];
function CFURLGetParts( aURL)
{
    if (aURL._parts)
        return aURL._parts;
    var URLString = aURL.string(),
        isMHTMLURL = URLString.match(/^mhtml:/);
    if (isMHTMLURL)
        URLString = URLString.substr("mhtml:".length);
    if (CFURLCachingEnableCount > 0 && hasOwnProperty.call(CFURLPartsForURLStrings, URLString))
    {
        aURL._parts = CFURLPartsForURLStrings[URLString];
        return aURL._parts;
    }
    aURL._parts = { };
    var parts = aURL._parts,
        results = URL_RE.exec(URLString),
        index = results.length;
    while (index--)
        parts[URI_KEYS[index]] = results[index] || NULL;
    parts.portNumber = parseInt(parts.portNumber, 10);
    if (isNaN(parts.portNumber))
        parts.portNumber = -1;
    parts.pathComponents = [];
    if (parts.path)
    {
        var split = parts.path.split("/"),
            pathComponents = parts.pathComponents,
            index = 0,
            count = split.length;
        for (; index < count; ++index)
        {
            var component = split[index];
            if (component)
                pathComponents.push(component);
            else if (index === 0)
                pathComponents.push("/");
        }
        parts.pathComponents = pathComponents;
    }
    if (isMHTMLURL)
    {
        parts.url = "mhtml:" + parts.url;
        parts.scheme = "mhtml:" + parts.scheme;
    }
    if (CFURLCachingEnableCount > 0)
        CFURLPartsForURLStrings[URLString] = parts;
    return parts;
}
CFURL = function( aURL, aBaseURL)
{
    aURL = aURL || "";
    if (aURL instanceof CFURL)
    {
        if (!aBaseURL)
            return aURL;
        var existingBaseURL = aURL.baseURL();
        if (existingBaseURL)
            aBaseURL = new CFURL(existingBaseURL.absoluteURL(), aBaseURL);
        aURL = aURL.string();
    }
    if (CFURLCachingEnableCount > 0)
    {
        var cacheUID = aURL + " " + (aBaseURL && aBaseURL.UID() || "");
        if (hasOwnProperty.call(CFURLsForCachedUIDs, cacheUID))
            return CFURLsForCachedUIDs[cacheUID];
        CFURLsForCachedUIDs[cacheUID] = this;
    }
    if (aURL.match(/^data:/))
    {
        var parts = { },
            index = URI_KEYS.length;
        while (index--)
            parts[URI_KEYS[index]] = "";
        parts.url = aURL;
        parts.scheme = "data";
        parts.pathComponents = [];
        this._parts = parts;
        this._standardizedURL = this;
        this._absoluteURL = this;
    }
    this._UID = objj_generateObjectUID();
    this._string = aURL;
    this._baseURL = aBaseURL;
}
CFURL.displayName = "CFURL";
CFURL.prototype.UID = function()
{
    return this._UID;
}
CFURL.prototype.UID.displayName = "CFURL.prototype.UID";
var URLMap = { };
CFURL.prototype.mappedURL = function()
{
    return URLMap[this.absoluteString()] || this;
}
CFURL.prototype.mappedURL.displayName = "CFURL.prototype.mappedURL";
CFURL.setMappedURLForURL = function( fromURL, toURL)
{
    URLMap[fromURL.absoluteString()] = toURL;
}
CFURL.setMappedURLForURL.displayName = "CFURL.setMappedURLForURL";
CFURL.prototype.schemeAndAuthority = function()
{
    var string = "",
        scheme = this.scheme();
    if (scheme)
        string += scheme + ":";
    var authority = this.authority();
    if (authority)
        string += "//" + authority;
    return string;
}
CFURL.prototype.schemeAndAuthority.displayName = "CFURL.prototype.schemeAndAuthority";
CFURL.prototype.absoluteString = function()
{
    if (this._absoluteString === undefined)
        this._absoluteString = this.absoluteURL().string();
    return this._absoluteString;
}
CFURL.prototype.absoluteString.displayName = "CFURL.prototype.absoluteString";
CFURL.prototype.toString = function()
{
    return this.absoluteString();
}
CFURL.prototype.toString.displayName = "CFURL.prototype.toString";
function resolveURL(aURL)
{
    aURL = aURL.standardizedURL();
    var baseURL = aURL.baseURL();
    if (!baseURL)
        return aURL;
    var parts = ((aURL)._parts || CFURLGetParts(aURL)),
        resolvedParts,
        absoluteBaseURL = baseURL.absoluteURL(),
        baseParts = ((absoluteBaseURL)._parts || CFURLGetParts(absoluteBaseURL));
    if (parts.scheme || parts.authority)
        resolvedParts = parts;
    else
    {
        resolvedParts = { };
        resolvedParts.scheme = baseParts.scheme;
        resolvedParts.authority = baseParts.authority;
        resolvedParts.userInfo = baseParts.userInfo;
        resolvedParts.user = baseParts.user;
        resolvedParts.password = baseParts.password;
        resolvedParts.domain = baseParts.domain;
        resolvedParts.portNumber = baseParts.portNumber;
        resolvedParts.queryString = parts.queryString;
        resolvedParts.fragment = parts.fragment;
        var pathComponents = parts.pathComponents
        if (pathComponents.length && pathComponents[0] === "/")
        {
            resolvedParts.path = parts.path;
            resolvedParts.pathComponents = pathComponents;
        }
        else
        {
            var basePathComponents = baseParts.pathComponents,
                resolvedPathComponents = basePathComponents.concat(pathComponents);
            if (!baseURL.hasDirectoryPath() && basePathComponents.length)
                resolvedPathComponents.splice(basePathComponents.length - 1, 1);
            if (pathComponents.length && (pathComponents[0] === ".." || pathComponents[0] === "."))
                standardizePathComponents(resolvedPathComponents, YES);
            resolvedParts.pathComponents = resolvedPathComponents;
            resolvedParts.path = pathFromPathComponents(resolvedPathComponents, pathComponents.length <= 0 || aURL.hasDirectoryPath());
        }
    }
    var resolvedString = URLStringFromParts(resolvedParts),
        resolvedURL = new CFURL(resolvedString);
    resolvedURL._parts = resolvedParts;
    resolvedURL._standardizedURL = resolvedURL;
    resolvedURL._standardizedString = resolvedString;
    resolvedURL._absoluteURL = resolvedURL;
    resolvedURL._absoluteString = resolvedString;
    return resolvedURL;
}
function pathFromPathComponents( pathComponents, isDirectoryPath)
{
    var path = pathComponents.join("/");
    if (path.length && path.charAt(0) === "/")
        path = path.substr(1);
    if (isDirectoryPath)
        path += "/";
    return path;
}
function standardizePathComponents( pathComponents, inPlace)
{
    var index = 0,
        resultIndex = 0,
        count = pathComponents.length,
        result = inPlace ? pathComponents : [],
        startsWithPeriod = NO;
    for (; index < count; ++index)
    {
        var component = pathComponents[index];
        if (component === "")
             continue;
        if (component === ".")
        {
            startsWithPeriod = resultIndex === 0;
            continue;
        }
        if (component !== ".." || resultIndex === 0 || result[resultIndex - 1] === "..")
        {
            result[resultIndex] = component;
            resultIndex++;
            continue;
        }
        if (resultIndex > 0 && result[resultIndex - 1] !== "/")
            --resultIndex;
    }
    if (startsWithPeriod && resultIndex === 0)
        result[resultIndex++] = ".";
    result.length = resultIndex;
    return result;
}
function URLStringFromParts( parts)
{
    var string = "",
        scheme = parts.scheme;
    if (scheme)
        string += scheme + ":";
    var authority = parts.authority;
    if (authority)
        string += "//" + authority;
    string += parts.path;
    var queryString = parts.queryString;
    if (queryString)
        string += "?" + queryString;
    var fragment = parts.fragment;
    if (fragment)
        string += "#" + fragment;
    return string;
}
CFURL.prototype.absoluteURL = function()
{
    if (this._absoluteURL === undefined)
        this._absoluteURL = resolveURL(this);
    return this._absoluteURL;
}
CFURL.prototype.absoluteURL.displayName = "CFURL.prototype.absoluteURL";
CFURL.prototype.standardizedURL = function()
{
    if (this._standardizedURL === undefined)
    {
        var parts = ((this)._parts || CFURLGetParts(this)),
            pathComponents = parts.pathComponents,
            standardizedPathComponents = standardizePathComponents(pathComponents, NO);
        var standardizedPath = pathFromPathComponents(standardizedPathComponents, this.hasDirectoryPath());
        if (parts.path === standardizedPath)
            this._standardizedURL = this;
        else
        {
            var standardizedParts = CFURLPartsCreateCopy(parts);
            standardizedParts.pathComponents = standardizedPathComponents;
            standardizedParts.path = standardizedPath;
            var standardizedURL = new CFURL(URLStringFromParts(standardizedParts), this.baseURL());
            standardizedURL._parts = standardizedParts;
            standardizedURL._standardizedURL = standardizedURL;
            this._standardizedURL = standardizedURL;
        }
    }
    return this._standardizedURL;
}
CFURL.prototype.standardizedURL.displayName = "CFURL.prototype.standardizedURL";
function CFURLPartsCreateCopy(parts)
{
    var copiedParts = { },
        count = URI_KEYS.length;
    while (count--)
    {
        var partName = URI_KEYS[count];
        copiedParts[partName] = parts[partName];
    }
    return copiedParts;
}
CFURL.prototype.string = function()
{
    return this._string;
}
CFURL.prototype.string.displayName = "CFURL.prototype.string";
CFURL.prototype.authority = function()
{
    var authority = ((this)._parts || CFURLGetParts(this)).authority;
    if (authority)
        return authority;
    var baseURL = this.baseURL();
    return baseURL && baseURL.authority() || "";
}
CFURL.prototype.authority.displayName = "CFURL.prototype.authority";
CFURL.prototype.hasDirectoryPath = function()
{
    var hasDirectoryPath = this._hasDirectoryPath;
    if (hasDirectoryPath === undefined)
    {
        var path = this.path();
        if (!path)
            return NO;
        if (path.charAt(path.length - 1) === "/")
            return YES;
        var lastPathComponent = this.lastPathComponent();
        hasDirectoryPath = lastPathComponent === "." || lastPathComponent === "..";
        this._hasDirectoryPath = hasDirectoryPath;
    }
    return hasDirectoryPath;
}
CFURL.prototype.hasDirectoryPath.displayName = "CFURL.prototype.hasDirectoryPath";
CFURL.prototype.hostName = function()
{
    return this.authority();
}
CFURL.prototype.hostName.displayName = "CFURL.prototype.hostName";
CFURL.prototype.fragment = function()
{
    return ((this)._parts || CFURLGetParts(this)).fragment;
}
CFURL.prototype.fragment.displayName = "CFURL.prototype.fragment";
CFURL.prototype.lastPathComponent = function()
{
    if (this._lastPathComponent === undefined)
    {
        var pathComponents = this.pathComponents(),
            pathComponentCount = pathComponents.length;
        if (!pathComponentCount)
            this._lastPathComponent = "";
        else
            this._lastPathComponent = pathComponents[pathComponentCount - 1];
    }
    return this._lastPathComponent;
}
CFURL.prototype.lastPathComponent.displayName = "CFURL.prototype.lastPathComponent";
CFURL.prototype.path = function()
{
    return ((this)._parts || CFURLGetParts(this)).path;
}
CFURL.prototype.path.displayName = "CFURL.prototype.path";
CFURL.prototype.pathComponents = function()
{
    return ((this)._parts || CFURLGetParts(this)).pathComponents;
}
CFURL.prototype.pathComponents.displayName = "CFURL.prototype.pathComponents";
CFURL.prototype.pathExtension = function()
{
    var lastPathComponent = this.lastPathComponent();
    if (!lastPathComponent)
        return NULL;
    lastPathComponent = lastPathComponent.replace(/^\.*/, '');
    var index = lastPathComponent.lastIndexOf(".");
    return index <= 0 ? "" : lastPathComponent.substring(index + 1);
}
CFURL.prototype.pathExtension.displayName = "CFURL.prototype.pathExtension";
CFURL.prototype.queryString = function()
{
    return ((this)._parts || CFURLGetParts(this)).queryString;
}
CFURL.prototype.queryString.displayName = "CFURL.prototype.queryString";
CFURL.prototype.scheme = function()
{
    var scheme = this._scheme;
    if (scheme === undefined)
    {
        scheme = ((this)._parts || CFURLGetParts(this)).scheme;
        if (!scheme)
        {
            var baseURL = this.baseURL();
            scheme = baseURL && baseURL.scheme();
        }
        this._scheme = scheme;
    }
    return scheme;
}
CFURL.prototype.scheme.displayName = "CFURL.prototype.scheme";
CFURL.prototype.user = function()
{
    return ((this)._parts || CFURLGetParts(this)).user;
}
CFURL.prototype.user.displayName = "CFURL.prototype.user";
CFURL.prototype.password = function()
{
    return ((this)._parts || CFURLGetParts(this)).password;
}
CFURL.prototype.password.displayName = "CFURL.prototype.password";
CFURL.prototype.portNumber = function()
{
    return ((this)._parts || CFURLGetParts(this)).portNumber;
}
CFURL.prototype.portNumber.displayName = "CFURL.prototype.portNumber";
CFURL.prototype.domain = function()
{
    return ((this)._parts || CFURLGetParts(this)).domain;
}
CFURL.prototype.domain.displayName = "CFURL.prototype.domain";
CFURL.prototype.baseURL = function()
{
    return this._baseURL;
}
CFURL.prototype.baseURL.displayName = "CFURL.prototype.baseURL";
CFURL.prototype.asDirectoryPathURL = function()
{
    if (this.hasDirectoryPath())
        return this;
    var lastPathComponent = this.lastPathComponent();
    if (lastPathComponent !== "/")
        lastPathComponent = "./" + lastPathComponent;
    return new CFURL(lastPathComponent + "/", this);
}
CFURL.prototype.asDirectoryPathURL.displayName = "CFURL.prototype.asDirectoryPathURL";
function CFURLGetResourcePropertiesForKeys( aURL)
{
    if (!aURL._resourcePropertiesForKeys)
        aURL._resourcePropertiesForKeys = new CFMutableDictionary();
    return aURL._resourcePropertiesForKeys;
}
CFURL.prototype.resourcePropertyForKey = function( aKey)
{
    return CFURLGetResourcePropertiesForKeys(this).valueForKey(aKey);
}
CFURL.prototype.resourcePropertyForKey.displayName = "CFURL.prototype.resourcePropertyForKey";
CFURL.prototype.setResourcePropertyForKey = function( aKey, aValue)
{
    CFURLGetResourcePropertiesForKeys(this).setValueForKey(aKey, aValue);
}
CFURL.prototype.setResourcePropertyForKey.displayName = "CFURL.prototype.setResourcePropertyForKey";
CFURL.prototype.staticResourceData = function()
{
    var data = new CFMutableData();
    data.setRawString(StaticResource.resourceAtURL(this).contents());
    return data;
}
CFURL.prototype.staticResourceData.displayName = "CFURL.prototype.staticResourceData";
function MarkedStream( aString)
{
    this._string = aString;
    var index = aString.indexOf(";");
    this._magicNumber = aString.substr(0, index);
    this._location = aString.indexOf(";", ++index);
    this._version = aString.substring(index, this._location++);
}
MarkedStream.prototype.magicNumber = function()
{
    return this._magicNumber;
}
MarkedStream.prototype.magicNumber.displayName = "MarkedStream.prototype.magicNumber";
MarkedStream.prototype.version = function()
{
    return this._version;
}
MarkedStream.prototype.version.displayName = "MarkedStream.prototype.version";
MarkedStream.prototype.getMarker = function()
{
    var string = this._string,
        location = this._location;
    if (location >= string.length)
        return null;
    var next = string.indexOf(';', location);
    if (next < 0)
        return null;
    var marker = string.substring(location, next);
    if (marker === 'e')
        return null;
    this._location = next + 1;
    return marker;
}
MarkedStream.prototype.getMarker.displayName = "MarkedStream.prototype.getMarker";
MarkedStream.prototype.getString = function()
{
    var string = this._string,
        location = this._location;
    if (location >= string.length)
        return null;
    var next = string.indexOf(';', location);
    if (next < 0)
        return null;
    var size = parseInt(string.substring(location, next), 10),
        text = string.substr(next + 1, size);
    this._location = next + 1 + size;
    return text;
}
MarkedStream.prototype.getString.displayName = "MarkedStream.prototype.getString";
var CFBundleUnloaded = 0,
    CFBundleLoading = 1 << 0,
    CFBundleLoadingInfoPlist = 1 << 1,
    CFBundleLoadingExecutable = 1 << 2,
    CFBundleLoadingSpritedImages = 1 << 3,
    CFBundleLoaded = 1 << 4;
var CFBundlesForURLStrings = { },
    CFBundlesForClasses = { },
    CFCacheBuster = new Date().getTime(),
    CFTotalBytesLoaded = 0,
    CPApplicationSizeInBytes = 0;
CFBundle = function( aURL)
{
    aURL = makeAbsoluteURL(aURL).asDirectoryPathURL();
    var URLString = aURL.absoluteString(),
        existingBundle = CFBundlesForURLStrings[URLString];
    if (existingBundle)
        return existingBundle;
    CFBundlesForURLStrings[URLString] = this;
    this._bundleURL = aURL;
    this._resourcesDirectoryURL = new CFURL("Resources/", aURL);
    this._staticResource = NULL;
    this._isValid = NO;
    this._loadStatus = CFBundleUnloaded;
    this._loadRequests = [];
    this._infoDictionary = new CFDictionary();
    this._eventDispatcher = new EventDispatcher(this);
}
CFBundle.displayName = "CFBundle";
CFBundle.environments = function()
{
    return ["Browser","ObjJ"];
}
CFBundle.environments.displayName = "CFBundle.environments";
CFBundle.bundleContainingURL = function( aURL)
{
    aURL = new CFURL(".", makeAbsoluteURL(aURL));
    var previousURLString,
        URLString = aURL.absoluteString();
    while (!previousURLString || previousURLString !== URLString)
    {
        var bundle = CFBundlesForURLStrings[URLString];
        if (bundle && bundle._isValid)
            return bundle;
        aURL = new CFURL("..", aURL);
        previousURLString = URLString;
        URLString = aURL.absoluteString();
    }
    return NULL;
}
CFBundle.bundleContainingURL.displayName = "CFBundle.bundleContainingURL";
CFBundle.mainBundle = function()
{
    return new CFBundle(mainBundleURL);
}
CFBundle.mainBundle.displayName = "CFBundle.mainBundle";
function addClassToBundle(aClass, aBundle)
{
    if (aBundle)
        CFBundlesForClasses[aClass.name] = aBundle;
}
CFBundle.bundleForClass = function( aClass)
{
    return CFBundlesForClasses[aClass.name] || CFBundle.mainBundle();
}
CFBundle.bundleForClass.displayName = "CFBundle.bundleForClass";
CFBundle.prototype.bundleURL = function()
{
    return this._bundleURL;
}
CFBundle.prototype.bundleURL.displayName = "CFBundle.prototype.bundleURL";
CFBundle.prototype.resourcesDirectoryURL = function()
{
    return this._resourcesDirectoryURL;
}
CFBundle.prototype.resourcesDirectoryURL.displayName = "CFBundle.prototype.resourcesDirectoryURL";
CFBundle.prototype.resourceURL = function( aResourceName, aType, aSubDirectory)
 {
    if (aType)
        aResourceName = aResourceName + "." + aType;
    if (aSubDirectory)
        aResourceName = aSubDirectory + "/" + aResourceName;
    var resourceURL = (new CFURL(aResourceName, this.resourcesDirectoryURL())).mappedURL();
    return resourceURL.absoluteURL();
}
CFBundle.prototype.resourceURL.displayName = "CFBundle.prototype.resourceURL";
CFBundle.prototype.mostEligibleEnvironmentURL = function()
{
    if (this._mostEligibleEnvironmentURL === undefined)
        this._mostEligibleEnvironmentURL = new CFURL(this.mostEligibleEnvironment() + ".environment/", this.bundleURL());
    return this._mostEligibleEnvironmentURL;
}
CFBundle.prototype.mostEligibleEnvironmentURL.displayName = "CFBundle.prototype.mostEligibleEnvironmentURL";
CFBundle.prototype.executableURL = function()
{
    if (this._executableURL === undefined)
    {
        var executableSubPath = this.valueForInfoDictionaryKey("CPBundleExecutable");
        if (!executableSubPath)
            this._executableURL = NULL;
        else
            this._executableURL = new CFURL(executableSubPath, this.mostEligibleEnvironmentURL());
    }
    return this._executableURL;
}
CFBundle.prototype.executableURL.displayName = "CFBundle.prototype.executableURL";
CFBundle.prototype.infoDictionary = function()
{
    return this._infoDictionary;
}
CFBundle.prototype.infoDictionary.displayName = "CFBundle.prototype.infoDictionary";
CFBundle.prototype.valueForInfoDictionaryKey = function( aKey)
{
    return this._infoDictionary.valueForKey(aKey);
}
CFBundle.prototype.valueForInfoDictionaryKey.displayName = "CFBundle.prototype.valueForInfoDictionaryKey";
CFBundle.prototype.hasSpritedImages = function()
{
    var environments = this._infoDictionary.valueForKey("CPBundleEnvironmentsWithImageSprites") || [],
        index = environments.length,
        mostEligibleEnvironment = this.mostEligibleEnvironment();
    while (index--)
        if (environments[index] === mostEligibleEnvironment)
            return YES;
    return NO;
}
CFBundle.prototype.hasSpritedImages.displayName = "CFBundle.prototype.hasSpritedImages";
CFBundle.prototype.environments = function()
{
    return this._infoDictionary.valueForKey("CPBundleEnvironments") || ["ObjJ"];
}
CFBundle.prototype.environments.displayName = "CFBundle.prototype.environments";
CFBundle.prototype.mostEligibleEnvironment = function( environments)
{
    environments = environments || this.environments();
    var objj_environments = CFBundle.environments(),
        index = 0,
        count = objj_environments.length,
        innerCount = environments.length;
    for(; index < count; ++index)
    {
        var innerIndex = 0,
            environment = objj_environments[index];
        for (; innerIndex < innerCount; ++innerIndex)
            if(environment === environments[innerIndex])
                return environment;
    }
    return NULL;
}
CFBundle.prototype.mostEligibleEnvironment.displayName = "CFBundle.prototype.mostEligibleEnvironment";
CFBundle.prototype.isLoading = function()
{
    return this._loadStatus & CFBundleLoading;
}
CFBundle.prototype.isLoaded = function()
{
    return this._loadStatus & CFBundleLoaded;
}
CFBundle.prototype.isLoading.displayName = "CFBundle.prototype.isLoading";
CFBundle.prototype.load = function( shouldExecute)
{
    if (this._loadStatus !== CFBundleUnloaded)
        return;
    this._loadStatus = CFBundleLoading | CFBundleLoadingInfoPlist;
    var self = this,
        bundleURL = this.bundleURL(),
        parentURL = new CFURL("..", bundleURL);
    if (parentURL.absoluteString() === bundleURL.absoluteString())
        parentURL = parentURL.schemeAndAuthority();
    StaticResource.resolveResourceAtURL(parentURL, YES, function(aStaticResource)
    {
        var resourceName = bundleURL.absoluteURL().lastPathComponent();
        self._staticResource = aStaticResource._children[resourceName] ||
                                new StaticResource(bundleURL, aStaticResource, YES, NO);
        function onsuccess( anEvent)
        {
            self._loadStatus &= ~CFBundleLoadingInfoPlist;
            var infoDictionary = anEvent.request.responsePropertyList();
            self._isValid = !!infoDictionary || CFBundle.mainBundle() === self;
            if (infoDictionary)
                self._infoDictionary = infoDictionary;
            if (!self._infoDictionary)
            {
                finishBundleLoadingWithError(self, new Error("Could not load bundle at \"" + path + "\""));
                return;
            }
            if (self === CFBundle.mainBundle() && self.valueForInfoDictionaryKey("CPApplicationSize"))
                CPApplicationSizeInBytes = self.valueForInfoDictionaryKey("CPApplicationSize").valueForKey("executable") || 0;
            loadExecutableAndResources(self, shouldExecute);
        }
        function onfailure()
        {
            self._isValid = CFBundle.mainBundle() === self;
            self._loadStatus = CFBundleUnloaded;
            finishBundleLoadingWithError(self, new Error("Could not load bundle at \"" + self.bundleURL() + "\""));
        }
        new FileRequest(new CFURL("Info.plist", self.bundleURL()), onsuccess, onfailure);
    });
}
CFBundle.prototype.load.displayName = "CFBundle.prototype.load";
function finishBundleLoadingWithError( aBundle, anError)
{
    resolveStaticResource(aBundle._staticResource);
    aBundle._eventDispatcher.dispatchEvent(
    {
        type:"error",
        error:anError,
        bundle:aBundle
    });
}
function loadExecutableAndResources( aBundle, shouldExecute)
{
    if (!aBundle.mostEligibleEnvironment())
        return failure();
    loadExecutableForBundle(aBundle, success, failure);
    loadSpritedImagesForBundle(aBundle, success, failure);
    if (aBundle._loadStatus === CFBundleLoading)
        return success();
    function failure( anError)
    {
        var loadRequests = aBundle._loadRequests,
            count = loadRequests.length;
        while (count--)
            loadRequests[count].abort();
        this._loadRequests = [];
        aBundle._loadStatus = CFBundleUnloaded;
        finishBundleLoadingWithError(aBundle, anError || new Error("Could not recognize executable code format in Bundle " + aBundle));
    }
    function success()
    {
        if ((typeof CPApp === "undefined" || !CPApp || !CPApp._finishedLaunching) &&
             typeof OBJJ_PROGRESS_CALLBACK === "function" && CPApplicationSizeInBytes)
        {
            OBJJ_PROGRESS_CALLBACK(MAX(MIN(1.0, CFTotalBytesLoaded / CPApplicationSizeInBytes), 0.0), CPApplicationSizeInBytes, aBundle.bundlePath())
        }
        if (aBundle._loadStatus === CFBundleLoading)
            aBundle._loadStatus = CFBundleLoaded;
        else
            return;
        resolveStaticResource(aBundle._staticResource);
        function complete()
        {
            aBundle._eventDispatcher.dispatchEvent(
            {
                type:"load",
                bundle:aBundle
            });
        }
        if (shouldExecute)
            executeBundle(aBundle, complete);
        else
            complete();
    }
}
function loadExecutableForBundle( aBundle, success, failure)
{
    var executableURL = aBundle.executableURL();
    if (!executableURL)
        return;
    aBundle._loadStatus |= CFBundleLoadingExecutable;
    new FileRequest(executableURL, function( anEvent)
    {
        try
        {
            CFTotalBytesLoaded += anEvent.request.responseText().length;
            decompileStaticFile(aBundle, anEvent.request.responseText(), executableURL);
            aBundle._loadStatus &= ~CFBundleLoadingExecutable;
            success();
        }
        catch(anException)
        {
            failure(anException);
        }
    }, failure);
}
function spritedImagesTestURLStringForBundle( aBundle)
{
    return "mhtml:" + new CFURL("MHTMLTest.txt", aBundle.mostEligibleEnvironmentURL());
}
function spritedImagesURLForBundle( aBundle)
{
    if (CFBundleSupportedSpriteType === CFBundleDataURLSpriteType)
        return new CFURL("dataURLs.txt", aBundle.mostEligibleEnvironmentURL());
    if (CFBundleSupportedSpriteType === CFBundleMHTMLSpriteType ||
        CFBundleSupportedSpriteType === CFBundleMHTMLUncachedSpriteType)
        return new CFURL("MHTMLPaths.txt", aBundle.mostEligibleEnvironmentURL());
    return NULL;
}
function loadSpritedImagesForBundle( aBundle, success, failure)
{
    if (!aBundle.hasSpritedImages())
        return;
    aBundle._loadStatus |= CFBundleLoadingSpritedImages;
    if (!CFBundleHasTestedSpriteSupport())
        return CFBundleTestSpriteSupport(spritedImagesTestURLStringForBundle(aBundle), function()
        {
            loadSpritedImagesForBundle(aBundle, success, failure);
        });
    var spritedImagesURL = spritedImagesURLForBundle(aBundle);
    if (!spritedImagesURL)
    {
        aBundle._loadStatus &= ~CFBundleLoadingSpritedImages;
        return success();
    }
    new FileRequest(spritedImagesURL, function( anEvent)
    {
        try
        {
            CFTotalBytesLoaded += anEvent.request.responseText().length;
            decompileStaticFile(aBundle, anEvent.request.responseText(), spritedImagesURL);
            aBundle._loadStatus &= ~CFBundleLoadingSpritedImages;
        }
        catch(anException)
        {
            failure(anException);
        }
        success();
    }, failure);
}
var CFBundleSpriteSupportListeners = [],
    CFBundleSupportedSpriteType = -1,
    CFBundleNoSpriteType = 0,
    CFBundleDataURLSpriteType = 1,
    CFBundleMHTMLSpriteType = 2,
    CFBundleMHTMLUncachedSpriteType = 3;
function CFBundleHasTestedSpriteSupport()
{
    return CFBundleSupportedSpriteType !== -1;
}
function CFBundleTestSpriteSupport( MHTMLPath, aCallback)
{
    if (CFBundleHasTestedSpriteSupport())
        return;
    CFBundleSpriteSupportListeners.push(aCallback);
    if (CFBundleSpriteSupportListeners.length > 1)
        return;
    CFBundleSpriteSupportListeners.push(function()
    {
        var size = 0,
            sizeDictionary = CFBundle.mainBundle().valueForInfoDictionaryKey("CPApplicationSize");
        if (!sizeDictionary)
            return;
        switch (CFBundleSupportedSpriteType)
        {
            case CFBundleDataURLSpriteType:
                size = sizeDictionary.valueForKey("data");
                break;
            case CFBundleMHTMLSpriteType:
            case CFBundleMHTMLUncachedSpriteType:
                size = sizeDictionary.valueForKey("mhtml");
                break;
        }
        CPApplicationSizeInBytes += size;
    })
    CFBundleTestSpriteTypes([
        CFBundleDataURLSpriteType,
        "data:image/gif;base64,R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==",
        CFBundleMHTMLSpriteType,
        MHTMLPath+"!test",
        CFBundleMHTMLUncachedSpriteType,
        MHTMLPath+"?"+CFCacheBuster+"!test"
    ]);
}
function CFBundleNotifySpriteSupportListeners()
{
    var count = CFBundleSpriteSupportListeners.length;
    while (count--)
        CFBundleSpriteSupportListeners[count]();
}
function CFBundleTestSpriteTypes( spriteTypes)
{
    if (spriteTypes.length < 2)
    {
        CFBundleSupportedSpriteType = CFBundleNoSpriteType;
        CFBundleNotifySpriteSupportListeners();
        return;
    }
    var image = new Image();
    image.onload = function()
    {
        if (image.width === 1 && image.height === 1)
        {
            CFBundleSupportedSpriteType = spriteTypes[0];
            CFBundleNotifySpriteSupportListeners();
        }
        else
            image.onerror();
    }
    image.onerror = function()
    {
        CFBundleTestSpriteTypes(spriteTypes.slice(2));
    }
    image.src = spriteTypes[1];
}
function executeBundle( aBundle, aCallback)
{
    var staticResources = [aBundle._staticResource];
    function executeStaticResources(index)
    {
        for (; index < staticResources.length; ++index)
        {
            var staticResource = staticResources[index];
            if (staticResource.isNotFound())
                continue;
            if (staticResource.isFile())
            {
                var executable = new FileExecutable(staticResource.URL());
                if (executable.hasLoadedFileDependencies())
                    executable.execute();
                else
                {
                    executable.loadFileDependencies(function()
                    {
                        executeStaticResources(index);
                    });
                    return;
                }
            }
            else
            {
                if (staticResource.URL().absoluteString() === aBundle.resourcesDirectoryURL().absoluteString())
                    continue;
                var children = staticResource.children();
                for (var name in children)
                    if (hasOwnProperty.call(children, name))
                        staticResources.push(children[name]);
            }
        }
        aCallback();
    }
    executeStaticResources(0);
}
var STATIC_MAGIC_NUMBER = "@STATIC",
    MARKER_PATH = "p",
    MARKER_URI = "u",
    MARKER_CODE = "c",
    MARKER_TEXT = "t",
    MARKER_IMPORT_STD = 'I',
    MARKER_IMPORT_LOCAL = 'i';
function decompileStaticFile( aBundle, aString, aPath)
{
    var stream = new MarkedStream(aString);
    if (stream.magicNumber() !== STATIC_MAGIC_NUMBER)
        throw new Error("Could not read static file: " + aPath);
    if (stream.version() !== "1.0")
        throw new Error("Could not read static file: " + aPath);
    var marker,
        bundleURL = aBundle.bundleURL(),
        file = NULL;
    while (marker = stream.getMarker())
    {
        var text = stream.getString();
        if (marker === MARKER_PATH)
        {
            var fileURL = new CFURL(text, bundleURL),
                parent = StaticResource.resourceAtURL(new CFURL(".", fileURL), YES);
            file = new StaticResource(fileURL, parent, NO, YES);
        }
        else if (marker === MARKER_URI)
        {
            var URL = new CFURL(text, bundleURL),
                mappedURLString = stream.getString();
            if (mappedURLString.indexOf("mhtml:") === 0)
            {
                mappedURLString = "mhtml:" + new CFURL(mappedURLString.substr("mhtml:".length), bundleURL);
                if (CFBundleSupportedSpriteType === CFBundleMHTMLUncachedSpriteType)
                {
                    var exclamationIndex = mappedURLString.indexOf("!"),
                        firstPart = mappedURLString.substring(0, exclamationIndex),
                        lastPart = mappedURLString.substring(exclamationIndex);
                    mappedURLString = firstPart + "?" + CFCacheBuster + lastPart;
                }
            }
            CFURL.setMappedURLForURL(URL, new CFURL(mappedURLString));
            var parent = StaticResource.resourceAtURL(new CFURL(".", URL), YES);
            new StaticResource(URL, parent, NO, YES);
        }
        else if (marker === MARKER_TEXT)
            file.write(text);
    }
}
CFBundle.prototype.addEventListener = function( anEventName, anEventListener)
{
    this._eventDispatcher.addEventListener(anEventName, anEventListener);
}
CFBundle.prototype.addEventListener.displayName = "CFBundle.prototype.addEventListener";
CFBundle.prototype.removeEventListener = function( anEventName, anEventListener)
{
    this._eventDispatcher.removeEventListener(anEventName, anEventListener);
}
CFBundle.prototype.removeEventListener.displayName = "CFBundle.prototype.removeEventListener";
CFBundle.prototype.onerror = function( anEvent)
{
    throw anEvent.error;
}
CFBundle.prototype.onerror.displayName = "CFBundle.prototype.onerror";
CFBundle.prototype.bundlePath = function()
{
    return this._bundleURL.absoluteURL().path();
}
CFBundle.prototype.path = function()
{
    CPLog.warn("CFBundle.prototype.path is deprecated, use CFBundle.prototype.bundlePath instead.");
    return this.bundlePath.apply(this, arguments);
}
CFBundle.prototype.pathForResource = function(aResource)
{
    return this.resourceURL(aResource).absoluteString();
}
var rootResources = { };
function StaticResource( aURL, aParent, isDirectory, isResolved)
{
    this._parent = aParent;
    this._eventDispatcher = new EventDispatcher(this);
    var name = aURL.absoluteURL().lastPathComponent() || aURL.schemeAndAuthority();
    this._name = name;
    this._URL = aURL;
    this._isResolved = !!isResolved;
    if (isDirectory)
        this._URL = this._URL.asDirectoryPathURL();
    if (!aParent)
        rootResources[name] = this;
    this._isDirectory = !!isDirectory;
    this._isNotFound = NO;
    if (aParent)
        aParent._children[name] = this;
    if (isDirectory)
        this._children = { };
    else
        this._contents = "";
}
StaticResource.rootResources = function()
{
    return rootResources;
}
exports.StaticResource = StaticResource;
function resolveStaticResource( aResource)
{
    aResource._isResolved = YES;
    aResource._eventDispatcher.dispatchEvent(
    {
        type:"resolve",
        staticResource:aResource
    });
}
StaticResource.prototype.resolve = function()
{
    if (this.isDirectory())
    {
        var bundle = new CFBundle(this.URL());
        bundle.onerror = function() { };
        bundle.load(NO);
    }
    else
    {
        var self = this;
        function onsuccess( anEvent)
        {
            self._contents = anEvent.request.responseText();
            resolveStaticResource(self);
        }
        function onfailure()
        {
            self._isNotFound = YES;
            resolveStaticResource(self);
        }
        new FileRequest(this.URL(), onsuccess, onfailure);
    }
}
StaticResource.prototype.name = function()
{
    return this._name;
}
StaticResource.prototype.URL = function()
{
    return this._URL;
}
StaticResource.prototype.contents = function()
{
    return this._contents;
}
StaticResource.prototype.children = function()
{
    return this._children;
}
StaticResource.prototype.parent = function()
{
    return this._parent;
}
StaticResource.prototype.isResolved = function()
{
    return this._isResolved;
}
StaticResource.prototype.write = function( aString)
{
    this._contents += aString;
}
function rootResourceForAbsoluteURL( anAbsoluteURL)
{
    var schemeAndAuthority = anAbsoluteURL.schemeAndAuthority(),
        resource = rootResources[schemeAndAuthority];
    if (!resource)
        resource = new StaticResource(new CFURL(schemeAndAuthority), NULL, YES, YES);
    return resource;
}
StaticResource.resourceAtURL = function( aURL, resolveAsDirectoriesIfNecessary)
{
    aURL = makeAbsoluteURL(aURL).absoluteURL();
    var resource = rootResourceForAbsoluteURL(aURL),
        components = aURL.pathComponents(),
        index = 0,
        count = components.length;
    for (; index < count; ++index)
    {
        var name = components[index];
        if (hasOwnProperty.call(resource._children, name))
            resource = resource._children[name];
        else if (resolveAsDirectoriesIfNecessary)
        {
            if (name !== "/")
                name = "./" + name;
            resource = new StaticResource(new CFURL(name, resource.URL()), resource, YES, YES);
        }
        else
            throw new Error("Static Resource at " + aURL + " is not resolved (\"" + name + "\")");
    }
    return resource;
}
StaticResource.prototype.resourceAtURL = function( aURL, resolveAsDirectoriesIfNecessary)
{
    return StaticResource.resourceAtURL(new CFURL(aURL, this.URL()), resolveAsDirectoriesIfNecessary);
}
StaticResource.resolveResourceAtURL = function( aURL, isDirectory, aCallback)
{
    aURL = makeAbsoluteURL(aURL).absoluteURL();
    resolveResourceComponents(rootResourceForAbsoluteURL(aURL), isDirectory, aURL.pathComponents(), 0, aCallback);
}
StaticResource.prototype.resolveResourceAtURL = function( aURL, isDirectory, aCallback)
{
    StaticResource.resolveResourceAtURL(new CFURL(aURL, this.URL()).absoluteURL(), isDirectory, aCallback);
}
function resolveResourceComponents( aResource, isDirectory, components, index, aCallback)
{
    var count = components.length;
    for (; index < count; ++index)
    {
        var name = components[index],
            child = hasOwnProperty.call(aResource._children, name) && aResource._children[name];
        if (!child)
        {
            child = new StaticResource(new CFURL(name, aResource.URL()), aResource, index + 1 < count || isDirectory , NO);
            child.resolve();
        }
        if (!child.isResolved())
            return child.addEventListener("resolve", function()
            {
                resolveResourceComponents(aResource, isDirectory, components, index, aCallback);
            });
        if (child.isNotFound())
            return aCallback(null, new Error("File not found: " + components.join("/")));
        if ((index + 1 < count) && child.isFile())
            return aCallback(null, new Error("File is not a directory: " + components.join("/")));
        aResource = child;
    }
    aCallback(aResource);
}
function resolveResourceAtURLSearchingIncludeURLs( aURL, anIndex, aCallback)
{
    var includeURLs = StaticResource.includeURLs(),
        searchURL = new CFURL(aURL, includeURLs[anIndex]).absoluteURL();
    StaticResource.resolveResourceAtURL(searchURL, NO, function( aStaticResource)
    {
        if (!aStaticResource)
        {
            if (anIndex + 1 < includeURLs.length)
                resolveResourceAtURLSearchingIncludeURLs(aURL, anIndex + 1, aCallback);
            else
                aCallback(NULL);
            return;
        }
        aCallback(aStaticResource);
    });
}
StaticResource.resolveResourceAtURLSearchingIncludeURLs = function( aURL, aCallback)
{
    resolveResourceAtURLSearchingIncludeURLs(aURL, 0, aCallback);
}
StaticResource.prototype.addEventListener = function( anEventName, anEventListener)
{
    this._eventDispatcher.addEventListener(anEventName, anEventListener);
}
StaticResource.prototype.removeEventListener = function( anEventName, anEventListener)
{
    this._eventDispatcher.removeEventListener(anEventName, anEventListener);
}
StaticResource.prototype.isNotFound = function()
{
    return this._isNotFound;
}
StaticResource.prototype.isFile = function()
{
    return !this._isDirectory;
}
StaticResource.prototype.isDirectory = function()
{
    return this._isDirectory;
}
StaticResource.prototype.toString = function( includeNotFounds)
{
    if (this.isNotFound())
        return "<file not found: " + this.name() + ">";
    var string = this.name();
    if (this.isDirectory())
    {
        var children = this._children;
        for (var name in children)
            if (children.hasOwnProperty(name))
            {
                var child = children[name];
                if (includeNotFounds || !child.isNotFound())
                    string += "\n\t" + children[name].toString(includeNotFounds).split('\n').join("\n\t");
            }
    }
    return string;
}
var includeURLs = NULL;
StaticResource.includeURLs = function()
{
    if (includeURLs)
        return includeURLs;
    var includeURLs = [];
    if (!global.OBJJ_INCLUDE_PATHS && !global.OBJJ_INCLUDE_URLS)
        includeURLs = ["Frameworks", "Frameworks/Debug"];
    else
        includeURLs = (global.OBJJ_INCLUDE_PATHS || []).concat(global.OBJJ_INCLUDE_URLS || []);
    var count = includeURLs.length;
    while (count--)
        includeURLs[count] = new CFURL(includeURLs[count]).asDirectoryPathURL();
    return includeURLs;
}
var TOKEN_ACCESSORS = "accessors",
    TOKEN_CLASS = "class",
    TOKEN_END = "end",
    TOKEN_FUNCTION = "function",
    TOKEN_IMPLEMENTATION = "implementation",
    TOKEN_IMPORT = "import",
    TOKEN_EACH = "each",
    TOKEN_OUTLET = "outlet",
    TOKEN_ACTION = "action",
    TOKEN_NEW = "new",
    TOKEN_SELECTOR = "selector",
    TOKEN_SUPER = "super",
    TOKEN_VAR = "var",
    TOKEN_IN = "in",
    TOKEN_PRAGMA = "pragma",
    TOKEN_MARK = "mark",
    TOKEN_EQUAL = '=',
    TOKEN_PLUS = '+',
    TOKEN_MINUS = '-',
    TOKEN_COLON = ':',
    TOKEN_COMMA = ',',
    TOKEN_PERIOD = '.',
    TOKEN_ASTERISK = '*',
    TOKEN_SEMICOLON = ';',
    TOKEN_LESS_THAN = '<',
    TOKEN_OPEN_BRACE = '{',
    TOKEN_CLOSE_BRACE = '}',
    TOKEN_GREATER_THAN = '>',
    TOKEN_OPEN_BRACKET = '[',
    TOKEN_DOUBLE_QUOTE = '"',
    TOKEN_PREPROCESSOR = '@',
    TOKEN_HASH = '#',
    TOKEN_CLOSE_BRACKET = ']',
    TOKEN_QUESTION_MARK = '?',
    TOKEN_OPEN_PARENTHESIS = '(',
    TOKEN_CLOSE_PARENTHESIS = ')',
    TOKEN_WHITESPACE = /^(?:(?:\s+$)|(?:\/(?:\/|\*)))/,
    TOKEN_NUMBER = /^[+-]?\d+(([.]\d+)*([eE][+-]?\d+))?$/,
    TOKEN_IDENTIFIER = /^[a-zA-Z_$](\w|$)*$/;
function Lexer( aString)
{
    this._index = -1;
    this._tokens = (aString + '\n').match(/\/\/.*(\r|\n)?|\/\*(?:.|\n|\r)*?\*\/|\w+\b|[+-]?\d+(([.]\d+)*([eE][+-]?\d+))?|"[^"\\]*(\\[\s\S][^"\\]*)*"|'[^'\\]*(\\[\s\S][^'\\]*)*'|\s+|./g);
    this._context = [];
    return this;
}
Lexer.prototype.push = function()
{
    this._context.push(this._index);
}
Lexer.prototype.pop = function()
{
    this._index = this._context.pop();
}
Lexer.prototype.peek = function(shouldSkipWhitespace)
{
    if (shouldSkipWhitespace)
    {
        this.push();
        var token = this.skip_whitespace();
        this.pop();
        return token;
    }
    return this._tokens[this._index + 1];
}
Lexer.prototype.next = function()
{
    return this._tokens[++this._index];
}
Lexer.prototype.previous = function()
{
    return this._tokens[--this._index];
}
Lexer.prototype.last = function()
{
    if (this._index < 0)
        return NULL;
    return this._tokens[this._index - 1];
}
Lexer.prototype.skip_whitespace = function(shouldMoveBackwards)
{
    var token;
    if (shouldMoveBackwards)
        while ((token = this.previous()) && TOKEN_WHITESPACE.test(token)) ;
    else
        while ((token = this.next()) && TOKEN_WHITESPACE.test(token)) ;
    return token;
}
exports.Lexer = Lexer;
function StringBuffer()
{
    this.atoms = [];
}
StringBuffer.prototype.toString = function()
{
    return this.atoms.join("");
}
exports.preprocess = function( aString, aURL, flags)
{
    return new Preprocessor(aString, aURL, flags).executable();
}
exports.eval = function( aString)
{
    return eval(exports.preprocess(aString).code());
}
var Preprocessor = function( aString, aURL, flags)
{
    this._URL = new CFURL(aURL);
    aString = aString.replace(/^#[^\n]+\n/, "\n");
    this._currentSelector = "";
    this._currentClass = "";
    this._currentSuperClass = "";
    this._currentSuperMetaClass = "";
    this._buffer = new StringBuffer();
    this._preprocessed = NULL;
    this._dependencies = [];
    this._tokens = new Lexer(aString);
    this._flags = flags;
    this._classMethod = false;
    this._executable = NULL;
    this._classLookupTable = {};
    this._classVars = {};
    var classObject = new objj_class();
    for (var i in classObject)
        this._classVars[i] = 1;
    this.preprocess(this._tokens, this._buffer);
}
Preprocessor.prototype.setClassInfo = function(className, superClassName, ivars)
{
    this._classLookupTable[className] = { superClassName:superClassName, ivars:ivars };
}
Preprocessor.prototype.getClassInfo = function(className)
{
    return this._classLookupTable[className];
}
Preprocessor.prototype.allIvarNamesForClassName = function(className)
{
    var names = {},
        classInfo = this.getClassInfo(className);
    while (classInfo)
    {
        for (var i in classInfo.ivars)
            names[i] = 1;
        classInfo = this.getClassInfo(classInfo.superClassName);
    }
    return names;
}
exports.Preprocessor = Preprocessor;
Preprocessor.Flags = { };
Preprocessor.Flags.IncludeDebugSymbols = 1 << 0;
Preprocessor.Flags.IncludeTypeSignatures = 1 << 1;
Preprocessor.prototype.executable = function()
{
    if (!this._executable)
        this._executable = new Executable(this._buffer.toString(), this._dependencies, this._URL);
    return this._executable;
}
Preprocessor.prototype.accessors = function(tokens)
{
    var token = tokens.skip_whitespace(),
        attributes = {};
    if (token != TOKEN_OPEN_PARENTHESIS)
    {
        tokens.previous();
        return attributes;
    }
    while ((token = tokens.skip_whitespace()) != TOKEN_CLOSE_PARENTHESIS)
    {
        var name = token,
            value = true;
        if (!/^\w+$/.test(name))
            throw new SyntaxError(this.error_message("*** @accessors attribute name not valid."));
        if ((token = tokens.skip_whitespace()) == TOKEN_EQUAL)
        {
            value = tokens.skip_whitespace();
            if (!/^\w+$/.test(value))
                throw new SyntaxError(this.error_message("*** @accessors attribute value not valid."));
            if (name == "setter")
            {
                if ((token = tokens.next()) != TOKEN_COLON)
                    throw new SyntaxError(this.error_message("*** @accessors setter attribute requires argument with \":\" at end of selector name."));
                value += ":";
            }
            token = tokens.skip_whitespace();
        }
        attributes[name] = value;
        if (token == TOKEN_CLOSE_PARENTHESIS)
            break;
        if (token != TOKEN_COMMA)
            throw new SyntaxError(this.error_message("*** Expected ',' or ')' in @accessors attribute list."));
    }
    return attributes;
}
Preprocessor.prototype.brackets = function( tokens, aStringBuffer)
{
    var tuples = [];
    while (this.preprocess(tokens, NULL, NULL, NULL, tuples[tuples.length] = [])) ;
    if (tuples[0].length === 1)
    {
        aStringBuffer.atoms[aStringBuffer.atoms.length] = '[';
        aStringBuffer.atoms[aStringBuffer.atoms.length] = tuples[0][0];
        aStringBuffer.atoms[aStringBuffer.atoms.length] = ']';
    }
    else
    {
        var selector = new StringBuffer();
        if (tuples[0][0].atoms[0] == TOKEN_SUPER)
        {
            aStringBuffer.atoms[aStringBuffer.atoms.length] = "objj_msgSendSuper(";
            aStringBuffer.atoms[aStringBuffer.atoms.length] = "{ receiver:self, super_class:" + (this._classMethod ? this._currentSuperMetaClass : this._currentSuperClass ) + " }";
        }
        else
        {
            aStringBuffer.atoms[aStringBuffer.atoms.length] = "objj_msgSend(";
            aStringBuffer.atoms[aStringBuffer.atoms.length] = tuples[0][0];
        }
        selector.atoms[selector.atoms.length] = tuples[0][1];
        var index = 1,
            count = tuples.length,
            marg_list = new StringBuffer();
        for(; index < count; ++index)
        {
            var pair = tuples[index];
            selector.atoms[selector.atoms.length] = pair[1];
            marg_list.atoms[marg_list.atoms.length] = ", " + pair[0];
        }
        aStringBuffer.atoms[aStringBuffer.atoms.length] = ", \"";
        aStringBuffer.atoms[aStringBuffer.atoms.length] = selector;
        aStringBuffer.atoms[aStringBuffer.atoms.length] = '\"';
        aStringBuffer.atoms[aStringBuffer.atoms.length] = marg_list;
        aStringBuffer.atoms[aStringBuffer.atoms.length] = ')';
    }
}
Preprocessor.prototype.directive = function(tokens, aStringBuffer, allowedDirectivesFlags)
{
    var buffer = aStringBuffer ? aStringBuffer : new StringBuffer(),
        token = tokens.next();
    if (token.charAt(0) == TOKEN_DOUBLE_QUOTE)
        buffer.atoms[buffer.atoms.length] = token;
    else if (token === TOKEN_CLASS)
    {
        tokens.skip_whitespace();
        return;
    }
    else if (token === TOKEN_IMPLEMENTATION)
        this.implementation(tokens, buffer);
    else if (token === TOKEN_IMPORT)
        this._import(tokens);
    else if (token === TOKEN_SELECTOR)
        this.selector(tokens, buffer);
    if (!aStringBuffer)
        return buffer;
}
Preprocessor.prototype.hash = function(tokens, aStringBuffer)
{
    var buffer = aStringBuffer ? aStringBuffer : new StringBuffer(),
        token = tokens.next();
    if (token === TOKEN_PRAGMA)
    {
        token = tokens.skip_whitespace();
        if (token === TOKEN_MARK)
        {
            while ((token = tokens.next()).indexOf("\n") < 0);
        }
    }
    else
        throw new SyntaxError(this.error_message("*** Expected \"pragma\" to follow # but instead saw \"" + token + "\"."));
}
Preprocessor.prototype.implementation = function(tokens, aStringBuffer)
{
    var buffer = aStringBuffer,
        token = "",
        category = NO,
        class_name = tokens.skip_whitespace(),
        superclass_name = "Nil",
        instance_methods = new StringBuffer(),
        class_methods = new StringBuffer();
    if (!(/^\w/).test(class_name))
        throw new Error(this.error_message("*** Expected class name, found \"" + class_name + "\"."));
    this._currentSuperClass = "objj_getClass(\"" + class_name + "\").super_class";
    this._currentSuperMetaClass = "objj_getMetaClass(\"" + class_name + "\").super_class";
    this._currentClass = class_name;
    this._currentSelector = "";
    if ((token = tokens.skip_whitespace()) == TOKEN_OPEN_PARENTHESIS)
    {
        token = tokens.skip_whitespace();
        if (token == TOKEN_CLOSE_PARENTHESIS)
            throw new SyntaxError(this.error_message("*** Can't Have Empty Category Name for class \"" + class_name + "\"."));
        if (tokens.skip_whitespace() != TOKEN_CLOSE_PARENTHESIS)
            throw new SyntaxError(this.error_message("*** Improper Category Definition for class \"" + class_name + "\"."));
        buffer.atoms[buffer.atoms.length] = "{\nvar the_class = objj_getClass(\"" + class_name + "\")\n";
        buffer.atoms[buffer.atoms.length] = "if(!the_class) throw new SyntaxError(\"*** Could not find definition for class \\\"" + class_name + "\\\"\");\n";
        buffer.atoms[buffer.atoms.length] = "var meta_class = the_class.isa;";
    }
    else
    {
        if(token == TOKEN_COLON)
        {
            token = tokens.skip_whitespace();
            if (!TOKEN_IDENTIFIER.test(token))
                throw new SyntaxError(this.error_message("*** Expected class name, found \"" + token + "\"."));
            superclass_name = token;
            token = tokens.skip_whitespace();
        }
        buffer.atoms[buffer.atoms.length] = "{var the_class = objj_allocateClassPair(" + superclass_name + ", \"" + class_name + "\"),\nmeta_class = the_class.isa;";
        if (token == TOKEN_OPEN_BRACE)
        {
            var ivar_names = {},
                ivar_count = 0,
                declaration = [],
                attributes,
                accessors = {};
            while((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_BRACE)
            {
                if (token === TOKEN_PREPROCESSOR)
                {
                    token = tokens.next();
                    if (token === TOKEN_ACCESSORS)
                        attributes = this.accessors(tokens);
                    else if (token !== TOKEN_OUTLET)
                        throw new SyntaxError(this.error_message("*** Unexpected '@' token in ivar declaration ('@"+token+"')."));
                }
                else if (token == TOKEN_SEMICOLON)
                {
                    if (ivar_count++ === 0)
                        buffer.atoms[buffer.atoms.length] = "class_addIvars(the_class, [";
                    else
                        buffer.atoms[buffer.atoms.length] = ", ";
                    var name = declaration[declaration.length - 1];
                    buffer.atoms[buffer.atoms.length] = "new objj_ivar(\"" + name + "\")";
                    ivar_names[name] = 1;
                    declaration = [];
                    if (attributes)
                    {
                        accessors[name] = attributes;
                        attributes = NULL;
                    }
                }
                else
                    declaration.push(token);
            }
            if (declaration.length)
                throw new SyntaxError(this.error_message("*** Expected ';' in ivar declaration, found '}'."));
            if (ivar_count)
                buffer.atoms[buffer.atoms.length] = "]);\n";
            if (!token)
                throw new SyntaxError(this.error_message("*** Expected '}'"));
            this.setClassInfo(class_name, superclass_name === "Nil" ? null : superclass_name, ivar_names);
            var ivar_names = this.allIvarNamesForClassName(class_name);
            for (ivar_name in accessors)
            {
                var accessor = accessors[ivar_name],
                    property = accessor["property"] || ivar_name;
                var getterName = accessor["getter"] || property,
                    getterCode = "(id)" + getterName + "\n{\nreturn " + ivar_name + ";\n}";
                if (instance_methods.atoms.length !== 0)
                    instance_methods.atoms[instance_methods.atoms.length] = ",\n";
                instance_methods.atoms[instance_methods.atoms.length] = this.method(new Lexer(getterCode), ivar_names);
                if (accessor["readonly"])
                    continue;
                var setterName = accessor["setter"];
                if (!setterName)
                {
                    var start = property.charAt(0) == '_' ? 1 : 0;
                    setterName = (start ? "_" : "") + "set" + property.substr(start, 1).toUpperCase() + property.substring(start + 1) + ":";
                }
                var setterCode = "(void)" + setterName + "(id)newValue\n{\n";
                if (accessor["copy"])
                    setterCode += "if (" + ivar_name + " !== newValue)\n" + ivar_name + " = [newValue copy];\n}";
                else
                    setterCode += ivar_name + " = newValue;\n}";
                if (instance_methods.atoms.length !== 0)
                    instance_methods.atoms[instance_methods.atoms.length] = ",\n";
                instance_methods.atoms[instance_methods.atoms.length] = this.method(new Lexer(setterCode), ivar_names);
            }
        }
        else
            tokens.previous();
        buffer.atoms[buffer.atoms.length] = "objj_registerClassPair(the_class);\n";
    }
    if (!ivar_names)
        var ivar_names = this.allIvarNamesForClassName(class_name);
    while ((token = tokens.skip_whitespace()))
    {
        if (token == TOKEN_PLUS)
        {
            this._classMethod = true;
            if (class_methods.atoms.length !== 0)
                class_methods.atoms[class_methods.atoms.length] = ", ";
            class_methods.atoms[class_methods.atoms.length] = this.method(tokens, this._classVars);
        }
        else if (token == TOKEN_MINUS)
        {
            this._classMethod = false;
            if (instance_methods.atoms.length !== 0)
                instance_methods.atoms[instance_methods.atoms.length] = ", ";
            instance_methods.atoms[instance_methods.atoms.length] = this.method(tokens, ivar_names);
        }
        else if (token == TOKEN_HASH)
        {
            this.hash(tokens, buffer);
        }
        else if (token == TOKEN_PREPROCESSOR)
        {
            if ((token = tokens.next()) == TOKEN_END)
                break;
            else
                throw new SyntaxError(this.error_message("*** Expected \"@end\", found \"@" + token + "\"."));
        }
    }
    if (instance_methods.atoms.length !== 0)
    {
        buffer.atoms[buffer.atoms.length] = "class_addMethods(the_class, [";
        buffer.atoms[buffer.atoms.length] = instance_methods;
        buffer.atoms[buffer.atoms.length] = "]);\n";
    }
    if (class_methods.atoms.length !== 0)
    {
        buffer.atoms[buffer.atoms.length] = "class_addMethods(meta_class, [";
        buffer.atoms[buffer.atoms.length] = class_methods;
        buffer.atoms[buffer.atoms.length] = "]);\n";
    }
    buffer.atoms[buffer.atoms.length] = '}';
    this._currentClass = "";
}
Preprocessor.prototype._import = function(tokens)
{
    var URLString = "",
        token = tokens.skip_whitespace(),
        isQuoted = (token !== TOKEN_LESS_THAN);
    if (token === TOKEN_LESS_THAN)
    {
        while ((token = tokens.next()) && token !== TOKEN_GREATER_THAN)
            URLString += token;
        if (!token)
            throw new SyntaxError(this.error_message("*** Unterminated import statement."));
    }
    else if (token.charAt(0) === TOKEN_DOUBLE_QUOTE)
        URLString = token.substr(1, token.length - 2);
    else
        throw new SyntaxError(this.error_message("*** Expecting '<' or '\"', found \"" + token + "\"."));
    this._buffer.atoms[this._buffer.atoms.length] = "objj_executeFile(\"";
    this._buffer.atoms[this._buffer.atoms.length] = URLString;
    this._buffer.atoms[this._buffer.atoms.length] = isQuoted ? "\", YES);" : "\", NO);";
    this._dependencies.push(new FileDependency(new CFURL(URLString), isQuoted));
}
Preprocessor.prototype.method = function( tokens, ivar_names)
{
    var buffer = new StringBuffer(),
        token,
        selector = "",
        parameters = [],
        types = [null];
    ivar_names = ivar_names || {};
    while ((token = tokens.skip_whitespace()) && token !== TOKEN_OPEN_BRACE && token !== TOKEN_SEMICOLON)
    {
        if (token == TOKEN_COLON)
        {
            var type = "";
            selector += token;
            token = tokens.skip_whitespace();
            if (token == TOKEN_OPEN_PARENTHESIS)
            {
                while ((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_PARENTHESIS)
                    type += token;
                token = tokens.skip_whitespace();
            }
            types[parameters.length + 1] = type || null;
            parameters[parameters.length] = token;
            if (token in ivar_names)
                throw new SyntaxError(this.error_message("*** Method ( "+selector+" ) uses a parameter name that is already in use ( "+token+" )"));
        }
        else if (token == TOKEN_OPEN_PARENTHESIS)
        {
            var type = "";
            while ((token = tokens.skip_whitespace()) && token != TOKEN_CLOSE_PARENTHESIS)
                type += token;
            types[0] = type || null;
        }
        else if (token == TOKEN_COMMA)
        {
            if ((token = tokens.skip_whitespace()) != TOKEN_PERIOD || tokens.next() != TOKEN_PERIOD || tokens.next() != TOKEN_PERIOD)
                throw new SyntaxError(this.error_message("*** Argument list expected after ','."));
        }
        else
            selector += token;
    }
    if (token === TOKEN_SEMICOLON)
    {
        token = tokens.skip_whitespace();
        if (token !== TOKEN_OPEN_BRACE)
        {
            throw new SyntaxError(this.error_message("Invalid semi-colon in method declaration. "+
            "Semi-colons are allowed only to terminate the method signature, before the open brace."));
        }
    }
    var index = 0,
        count = parameters.length;
    buffer.atoms[buffer.atoms.length] = "new objj_method(sel_getUid(\"";
    buffer.atoms[buffer.atoms.length] = selector;
    buffer.atoms[buffer.atoms.length] = "\"), function";
    this._currentSelector = selector;
    if (this._flags & Preprocessor.Flags.IncludeDebugSymbols)
        buffer.atoms[buffer.atoms.length] = " $" + this._currentClass + "__" + selector.replace(/:/g, "_");
    buffer.atoms[buffer.atoms.length] = "(self, _cmd";
    for (; index < count; ++index)
    {
        buffer.atoms[buffer.atoms.length] = ", ";
        buffer.atoms[buffer.atoms.length] = parameters[index];
    }
    buffer.atoms[buffer.atoms.length] = ")\n{ with(self)\n{";
    buffer.atoms[buffer.atoms.length] = this.preprocess(tokens, NULL, TOKEN_CLOSE_BRACE, TOKEN_OPEN_BRACE);
    buffer.atoms[buffer.atoms.length] = "}\n}";
    if (this._flags & Preprocessor.Flags.IncludeDebugSymbols)
        buffer.atoms[buffer.atoms.length] = ","+JSON.stringify(types);
    buffer.atoms[buffer.atoms.length] = ")";
    this._currentSelector = "";
    return buffer;
}
Preprocessor.prototype.preprocess = function(tokens, aStringBuffer, terminator, instigator, tuple)
{
    var buffer = aStringBuffer ? aStringBuffer : new StringBuffer(),
        count = 0,
        token = "";
    if (tuple)
    {
        tuple[0] = buffer;
        var bracket = false,
            closures = [0, 0, 0];
    }
    while ((token = tokens.next()) && ((token !== terminator) || count))
    {
        if (tuple)
        {
            if (token === TOKEN_QUESTION_MARK)
                ++closures[2];
            else if (token === TOKEN_OPEN_BRACE)
                ++closures[0];
            else if (token === TOKEN_CLOSE_BRACE)
                --closures[0];
            else if (token === TOKEN_OPEN_PARENTHESIS)
                ++closures[1];
            else if (token === TOKEN_CLOSE_PARENTHESIS)
                --closures[1];
            else if ((token === TOKEN_COLON && closures[2]-- === 0 ||
                    (bracket = (token === TOKEN_CLOSE_BRACKET))) &&
                    closures[0] === 0 && closures[1] === 0)
            {
                tokens.push();
                var label = bracket ? tokens.skip_whitespace(true) : tokens.previous(),
                    isEmptyLabel = TOKEN_WHITESPACE.test(label);
                if (isEmptyLabel || TOKEN_IDENTIFIER.test(label) && TOKEN_WHITESPACE.test(tokens.previous()))
                {
                    tokens.push();
                    var last = tokens.skip_whitespace(true),
                        operatorCheck = true,
                        isDoubleOperator = false;
                    if (last === '+' || last === '-'){
                        if (tokens.previous() !== last)
                            operatorCheck = false;
                        else
                        {
                            last = tokens.skip_whitespace(true);
                            isDoubleOperator = true;
                        }}
                    tokens.pop();
                    tokens.pop();
                    if (operatorCheck && (
                        (!isDoubleOperator && (last === TOKEN_CLOSE_BRACE)) ||
                        last === TOKEN_CLOSE_PARENTHESIS || last === TOKEN_CLOSE_BRACKET ||
                        last === TOKEN_PERIOD || TOKEN_NUMBER.test(last) ||
                        last.charAt(last.length - 1) === '\"' || last.charAt(last.length - 1) === '\'' ||
                        TOKEN_IDENTIFIER.test(last) && !/^(new|return|case|var)$/.test(last)))
                    {
                        if (isEmptyLabel)
                            tuple[1] = ':';
                        else
                        {
                            tuple[1] = label;
                            if (!bracket)
                                tuple[1] += ':';
                            var count = buffer.atoms.length;
                            while (buffer.atoms[count--] !== label) ;
                            buffer.atoms.length = count;
                        }
                        return !bracket;
                    }
                    if (bracket)
                        return NO;
                }
                tokens.pop();
                if (bracket)
                    return NO;
            }
            closures[2] = MAX(closures[2], 0);
        }
        if (instigator)
        {
            if (token === instigator)
                ++count;
            else if (token === terminator)
                --count;
        }
        if (token === TOKEN_FUNCTION)
        {
            var accumulator = "";
            while ((token = tokens.next()) && token !== TOKEN_OPEN_PARENTHESIS && !(/^\w/).test(token))
                accumulator += token;
            if (token === TOKEN_OPEN_PARENTHESIS)
            {
                if (instigator === TOKEN_OPEN_PARENTHESIS)
                    ++count;
                buffer.atoms[buffer.atoms.length] = "function" + accumulator + '(';
                if (tuple)
                    ++closures[1];
            }
            else
            {
                buffer.atoms[buffer.atoms.length] = token + "= function";
            }
        }
        else if (token == TOKEN_PREPROCESSOR)
            this.directive(tokens, buffer);
        else if (token == TOKEN_HASH)
            this.hash(tokens, buffer);
        else if (token == TOKEN_OPEN_BRACKET)
            this.brackets(tokens, buffer);
        else
            buffer.atoms[buffer.atoms.length] = token;
    }
    if (tuple)
        throw new SyntaxError(this.error_message("*** Expected ']' - Unterminated message send or array."));
    if (!aStringBuffer)
        return buffer;
}
Preprocessor.prototype.selector = function(tokens, aStringBuffer)
{
    var buffer = aStringBuffer ? aStringBuffer : new StringBuffer();
    buffer.atoms[buffer.atoms.length] = "sel_getUid(\"";
    if (tokens.skip_whitespace() != TOKEN_OPEN_PARENTHESIS)
        throw new SyntaxError(this.error_message("*** Expected '('"));
    var selector = tokens.skip_whitespace();
    if (selector == TOKEN_CLOSE_PARENTHESIS)
        throw new SyntaxError(this.error_message("*** Unexpected ')', can't have empty @selector()"));
    aStringBuffer.atoms[aStringBuffer.atoms.length] = selector;
    var token,
        starting = true;
    while ((token = tokens.next()) && token != TOKEN_CLOSE_PARENTHESIS)
    {
        if (starting && /^\d+$/.test(token) || !(/^(\w|$|\:)/.test(token)))
        {
            if (!(/\S/).test(token))
                if (tokens.skip_whitespace() == TOKEN_CLOSE_PARENTHESIS)
                    break;
                else
                    throw new SyntaxError(this.error_message("*** Unexpected whitespace in @selector()."));
            else
                throw new SyntaxError(this.error_message("*** Illegal character '" + token + "' in @selector()."));
        }
        buffer.atoms[buffer.atoms.length] = token;
        starting = (token == TOKEN_COLON);
    }
    buffer.atoms[buffer.atoms.length] = "\")";
    if (!aStringBuffer)
        return buffer;
}
Preprocessor.prototype.error_message = function(errorMessage)
{
    return errorMessage + " <Context File: "+ this._URL +
                                (this._currentClass ? " Class: "+this._currentClass : "") +
                                (this._currentSelector ? " Method: "+this._currentSelector : "") +">";
}
function FileDependency( aURL, isLocal)
{
    this._URL = aURL;
    this._isLocal = isLocal;
}
exports.FileDependency = FileDependency;
FileDependency.prototype.URL = function()
{
    return this._URL;
}
FileDependency.prototype.isLocal = function()
{
    return this._isLocal;
}
FileDependency.prototype.toMarkedString = function()
{
    var URLString = this.URL().absoluteString();
    return (this.isLocal() ? MARKER_IMPORT_LOCAL : MARKER_IMPORT_STD) + ";" +
            URLString.length + ";" + URLString;
}
FileDependency.prototype.toString = function()
{
    return (this.isLocal() ? "LOCAL: " : "STD: ") + this.URL();
}
var ExecutableUnloadedFileDependencies = 0,
    ExecutableLoadingFileDependencies = 1,
    ExecutableLoadedFileDependencies = 2,
    AnonymousExecutableCount = 0;
function Executable( aCode, fileDependencies, aURL, aFunction)
{
    if (arguments.length === 0)
        return this;
    this._code = aCode;
    this._function = aFunction || NULL;
    this._URL = makeAbsoluteURL(aURL || new CFURL("(Anonymous" + (AnonymousExecutableCount++) + ")"));
    this._fileDependencies = fileDependencies;
    if (fileDependencies.length)
    {
        this._fileDependencyStatus = ExecutableUnloadedFileDependencies;
        this._fileDependencyCallbacks = [];
    }
    else
        this._fileDependencyStatus = ExecutableLoadedFileDependencies;
    if (this._function)
        return;
    this.setCode(aCode);
}
exports.Executable = Executable;
Executable.prototype.path = function()
{
    return this.URL().path();
}
Executable.prototype.URL = function()
{
    return this._URL;
}
Executable.prototype.URL.displayName = "Executable.prototype.URL";
Executable.prototype.functionParameters = function()
{
    var functionParameters = ["global", "objj_executeFile", "objj_importFile"];
    return functionParameters;
}
Executable.prototype.functionParameters.displayName = "Executable.prototype.functionParameters";
Executable.prototype.functionArguments = function()
{
    var functionArguments = [global, this.fileExecuter(), this.fileImporter()];
    return functionArguments;
}
Executable.prototype.functionArguments.displayName = "Executable.prototype.functionArguments";
Executable.prototype.execute = function()
{
    var oldContextBundle = CONTEXT_BUNDLE;
    CONTEXT_BUNDLE = CFBundle.bundleContainingURL(this.URL());
    var result = this._function.apply(global, this.functionArguments());
    CONTEXT_BUNDLE = oldContextBundle;
    return result;
}
Executable.prototype.execute.displayName = "Executable.prototype.execute";
Executable.prototype.code = function()
{
    return this._code;
}
Executable.prototype.code.displayName = "Executable.prototype.code";
Executable.prototype.setCode = function(code)
{
    this._code = code;
    var parameters = this.functionParameters().join(",");
        var absoluteString = this.URL().absoluteString();
        code += "/**/\n//@ sourceURL=" + absoluteString;
        this._function = new Function(parameters, code);
    this._function.displayName = absoluteString;
}
Executable.prototype.setCode.displayName = "Executable.prototype.setCode";
Executable.prototype.fileDependencies = function()
{
    return this._fileDependencies;
}
Executable.prototype.fileDependencies.displayName = "Executable.prototype.fileDependencies";
Executable.prototype.hasLoadedFileDependencies = function()
{
    return this._fileDependencyStatus === ExecutableLoadedFileDependencies;
}
Executable.prototype.hasLoadedFileDependencies.displayName = "Executable.prototype.hasLoadedFileDependencies";
var fileDependencyLoadCount = 0,
    fileDependencyExecutables = [],
    fileDependencyMarkers = { };
Executable.prototype.loadFileDependencies = function(aCallback)
{
    var status = this._fileDependencyStatus;
    if (aCallback)
    {
        if (status === ExecutableLoadedFileDependencies)
            return aCallback();
        this._fileDependencyCallbacks.push(aCallback);
    }
    if (status === ExecutableUnloadedFileDependencies)
    {
        if (fileDependencyLoadCount)
            throw "Can't load";
        loadFileDependenciesForExecutable(this);
    }
}
Executable.prototype.loadFileDependencies.displayName = "Executable.prototype.loadFileDependencies";
function loadFileDependenciesForExecutable( anExecutable)
{
    fileDependencyExecutables.push(anExecutable);
    anExecutable._fileDependencyStatus = ExecutableLoadingFileDependencies;
    var fileDependencies = anExecutable.fileDependencies(),
        index = 0,
        count = fileDependencies.length,
        referenceURL = anExecutable.referenceURL(),
        referenceURLString = referenceURL.absoluteString(),
        fileExecutableSearcher = anExecutable.fileExecutableSearcher();
    fileDependencyLoadCount += count;
    for (; index < count; ++index)
    {
        var fileDependency = fileDependencies[index],
            isQuoted = fileDependency.isLocal(),
            URL = fileDependency.URL(),
            marker = (isQuoted && (referenceURLString + " ") || "") + URL;
        if (fileDependencyMarkers[marker])
        {
            if (--fileDependencyLoadCount === 0)
                fileExecutableDependencyLoadFinished();
            continue;
        }
        fileDependencyMarkers[marker] = YES;
        fileExecutableSearcher(URL, isQuoted, fileExecutableSearchFinished);
    }
}
function fileExecutableSearchFinished( aFileExecutable)
{
    --fileDependencyLoadCount;
    if (aFileExecutable._fileDependencyStatus === ExecutableUnloadedFileDependencies)
        loadFileDependenciesForExecutable(aFileExecutable);
    else if (fileDependencyLoadCount === 0)
        fileExecutableDependencyLoadFinished();
}
function fileExecutableDependencyLoadFinished()
{
    var executables = fileDependencyExecutables,
        index = 0,
        count = executables.length;
    fileDependencyExecutables = [];
    for (; index < count; ++index)
        executables[index]._fileDependencyStatus = ExecutableLoadedFileDependencies;
    for (index = 0; index < count; ++index)
    {
        var executable = executables[index],
            callbacks = executable._fileDependencyCallbacks,
            callbackIndex = 0,
            callbackCount = callbacks.length;
        for (; callbackIndex < callbackCount; ++callbackIndex)
            callbacks[callbackIndex]();
        executable._fileDependencyCallbacks = [];
    }
}
Executable.prototype.referenceURL = function()
{
    if (this._referenceURL === undefined)
        this._referenceURL = new CFURL(".", this.URL());
    return this._referenceURL;
}
Executable.prototype.referenceURL.displayName = "Executable.prototype.referenceURL";
Executable.prototype.fileImporter = function()
{
    return Executable.fileImporterForURL(this.referenceURL());
}
Executable.prototype.fileImporter.displayName = "Executable.prototype.fileImporter";
Executable.prototype.fileExecuter = function()
{
    return Executable.fileExecuterForURL(this.referenceURL());
}
Executable.prototype.fileExecuter.displayName = "Executable.prototype.fileExecuter";
Executable.prototype.fileExecutableSearcher = function()
{
    return Executable.fileExecutableSearcherForURL(this.referenceURL());
}
Executable.prototype.fileExecutableSearcher.displayName = "Executable.prototype.fileExecutableSearcher";
var cachedFileExecuters = { };
Executable.fileExecuterForURL = function( aURL)
{
    var referenceURL = makeAbsoluteURL(aURL),
        referenceURLString = referenceURL.absoluteString(),
        cachedFileExecuter = cachedFileExecuters[referenceURLString];
    if (!cachedFileExecuter)
    {
        cachedFileExecuter = function( aURL, isQuoted, shouldForce)
        {
            Executable.fileExecutableSearcherForURL(referenceURL)(aURL, isQuoted,
            function( aFileExecutable)
            {
                if (!aFileExecutable.hasLoadedFileDependencies())
                    throw "No executable loaded for file at URL " + aURL;
                aFileExecutable.execute(shouldForce);
            });
        }
        cachedFileExecuters[referenceURLString] = cachedFileExecuter;
    }
    return cachedFileExecuter;
}
Executable.fileExecuterForURL.displayName = "Executable.fileExecuterForURL";
var cachedFileImporters = { };
Executable.fileImporterForURL = function( aURL)
{
    var referenceURL = makeAbsoluteURL(aURL),
        referenceURLString = referenceURL.absoluteString(),
        cachedFileImporter = cachedFileImporters[referenceURLString];
    if (!cachedFileImporter)
    {
        cachedFileImporter = function( aURL, isQuoted, aCallback)
        {
            enableCFURLCaching();
            Executable.fileExecutableSearcherForURL(referenceURL)(aURL, isQuoted,
            function( aFileExecutable)
            {
                aFileExecutable.loadFileDependencies(function()
                {
                    aFileExecutable.execute();
                    disableCFURLCaching();
                    if (aCallback)
                        aCallback();
                });
            });
        }
        cachedFileImporters[referenceURLString] = cachedFileImporter;
    }
    return cachedFileImporter;
}
Executable.fileImporterForURL.displayName = "Executable.fileImporterForURL";
var cachedFileExecutableSearchers = { },
    cachedFileExecutableSearchResults = { };
Executable.fileExecutableSearcherForURL = function( referenceURL)
{
    var referenceURLString = referenceURL.absoluteString(),
        cachedFileExecutableSearcher = cachedFileExecutableSearchers[referenceURLString],
        cachedSearchResults = { };
    if (!cachedFileExecutableSearcher)
    {
        cachedFileExecutableSearcher = function( aURL, isQuoted, success)
        {
            var cacheUID = (isQuoted && referenceURL || "") + aURL,
                cachedResult = cachedFileExecutableSearchResults[cacheUID];
            if (cachedResult)
                return completed(cachedResult);
            var isAbsoluteURL = (aURL instanceof CFURL) && aURL.scheme();
            if (isQuoted || isAbsoluteURL)
            {
                if (!isAbsoluteURL)
                    aURL = new CFURL(aURL, referenceURL);
                StaticResource.resolveResourceAtURL(aURL, NO, completed);
            }
            else
                StaticResource.resolveResourceAtURLSearchingIncludeURLs(aURL, completed);
            function completed( aStaticResource)
            {
                if (!aStaticResource)
                    throw new Error("Could not load file at " + aURL);
                cachedFileExecutableSearchResults[cacheUID] = aStaticResource;
                success(new FileExecutable(aStaticResource.URL()));
            }
        };
        cachedFileExecutableSearchers[referenceURLString] = cachedFileExecutableSearcher;
    }
    return cachedFileExecutableSearcher;
}
Executable.fileExecutableSearcherForURL.displayName = "Executable.fileExecutableSearcherForURL";
var FileExecutablesForURLStrings = { };
function FileExecutable( aURL)
{
    aURL = makeAbsoluteURL(aURL);
    var URLString = aURL.absoluteString(),
        existingFileExecutable = FileExecutablesForURLStrings[URLString];
    if (existingFileExecutable)
        return existingFileExecutable;
    FileExecutablesForURLStrings[URLString] = this;
    var fileContents = StaticResource.resourceAtURL(aURL).contents(),
        executable = NULL,
        extension = aURL.pathExtension();
    if (fileContents.match(/^@STATIC;/))
        executable = decompile(fileContents, aURL);
    else if (extension === "j" || !extension)
        executable = exports.preprocess(fileContents, aURL, Preprocessor.Flags.IncludeDebugSymbols);
    else
        executable = new Executable(fileContents, [], aURL);
    Executable.apply(this, [executable.code(), executable.fileDependencies(), aURL, executable._function]);
    this._hasExecuted = NO;
}
exports.FileExecutable = FileExecutable;
FileExecutable.prototype = new Executable();
FileExecutable.prototype.execute = function( shouldForce)
{
    if (this._hasExecuted && !shouldForce)
        return;
    this._hasExecuted = YES;
    Executable.prototype.execute.call(this);
}
FileExecutable.prototype.execute.displayName = "FileExecutable.prototype.execute";
FileExecutable.prototype.hasExecuted = function()
{
    return this._hasExecuted;
}
FileExecutable.prototype.hasExecuted.displayName = "FileExecutable.prototype.hasExecuted";
function decompile( aString, aURL)
{
    var stream = new MarkedStream(aString);
    var marker = NULL,
        code = "",
        dependencies = [];
    while (marker = stream.getMarker())
    {
        var text = stream.getString();
        if (marker === MARKER_TEXT)
            code += text;
        else if (marker === MARKER_IMPORT_STD)
            dependencies.push(new FileDependency(new CFURL(text), NO));
        else if (marker === MARKER_IMPORT_LOCAL)
            dependencies.push(new FileDependency(new CFURL(text), YES));
    }
    var fn = FileExecutable._lookupCachedFunction(aURL)
    if (fn)
        return new Executable(code, dependencies, aURL, fn);
    return new Executable(code, dependencies, aURL);
}
var FunctionCache = { };
FileExecutable._cacheFunction = function( aURL, fn)
{
    aURL = typeof aURL === "string" ? aURL : aURL.absoluteString();
    FunctionCache[aURL] = fn;
}
FileExecutable._lookupCachedFunction = function( aURL)
{
    aURL = typeof aURL === "string" ? aURL : aURL.absoluteString();
    return FunctionCache[aURL];
}
var CLS_CLASS = 0x1,
    CLS_META = 0x2,
    CLS_INITIALIZED = 0x4,
    CLS_INITIALIZING = 0x8;
objj_ivar = function( aName, aType)
{
    this.name = aName;
    this.type = aType;
}
objj_ivar.displayName = "objj_ivar";
objj_method = function( aName, anImplementation, types)
{
    this.name = aName;
    this.method_imp = anImplementation;
    this.types = types;
}
objj_method.displayName = "objj_method";
objj_class = function(displayName)
{
    this.isa = NULL;
    this.super_class = NULL;
    this.sub_classes = [];
    this.name = NULL;
    this.info = 0;
    this.ivars = [];
    this.method_list = [];
    this.method_hash = {};
    this.method_store = function() { };
    this.method_dtable = this.method_store.prototype;
    eval("this.allocator = function " + (displayName || "OBJJ_OBJECT").replace(/\W/g, "_") + "() { }");
    this._UID = -1;
}
objj_class.displayName = "objj_class";
objj_object = function()
{
    this.isa = NULL;
    this._UID = -1;
}
objj_object.displayName = "objj_object";
class_getName = function( aClass)
{
    if (aClass == Nil)
        return "";
    return aClass.name;
}
class_getName.displayName = "class_getName";
class_isMetaClass = function( aClass)
{
    if (!aClass)
        return NO;
    return ((aClass.info & (CLS_META)));
}
class_isMetaClass.displayName = "class_isMetaClass";
class_getSuperclass = function( aClass)
{
    if (aClass == Nil)
        return Nil;
    return aClass.super_class;
}
class_getSuperclass.displayName = "class_getSuperclass"
class_setSuperclass = function( aClass, aSuperClass)
{
    aClass.super_class = aSuperClass;
    aClass.isa.super_class = aSuperClass.isa;
}
class_setSuperclass.displayName = "class_setSuperclass";
class_addIvar = function( aClass, aName, aType)
{
    var thePrototype = aClass.allocator.prototype;
    if (typeof thePrototype[aName] != "undefined")
        return NO;
    aClass.ivars.push(new objj_ivar(aName, aType));
    thePrototype[aName] = NULL;
    return YES;
}
class_addIvar.displayName = "class_addIvar";
class_addIvars = function( aClass, ivars)
{
    var index = 0,
        count = ivars.length,
        thePrototype = aClass.allocator.prototype;
    for (; index < count; ++index)
    {
        var ivar = ivars[index],
            name = ivar.name;
        if (typeof thePrototype[name] === "undefined")
        {
            aClass.ivars.push(ivar);
            thePrototype[name] = NULL;
        }
    }
}
class_addIvars.displayName = "class_addIvars";
class_copyIvarList = function( aClass)
{
    return aClass.ivars.slice(0);
}
class_copyIvarList.displayName = "class_copyIvarList";
class_addMethod = function( aClass, aName, anImplementation, types)
{
    if (aClass.method_hash[aName])
        return NO;
    var method = new objj_method(aName, anImplementation, types);
    aClass.method_list.push(method);
    aClass.method_dtable[aName] = method;
    method.method_imp.displayName = (((aClass.info & (CLS_META))) ? '+' : '-') + " [" + class_getName(aClass) + ' ' + method_getName(method) + ']';
    if (!((aClass.info & (CLS_META))) && (((aClass.info & (CLS_META))) ? aClass : aClass.isa).isa === (((aClass.info & (CLS_META))) ? aClass : aClass.isa))
        class_addMethod((((aClass.info & (CLS_META))) ? aClass : aClass.isa), aName, anImplementation, types);
    return YES;
}
class_addMethod.displayName = "class_addMethod";
class_addMethods = function( aClass, methods)
{
    var index = 0,
        count = methods.length,
        method_list = aClass.method_list,
        method_dtable = aClass.method_dtable;
    for (; index < count; ++index)
    {
        var method = methods[index];
        if (aClass.method_hash[method.name])
            continue;
        method_list.push(method);
        method_dtable[method.name] = method;
        method.method_imp.displayName = (((aClass.info & (CLS_META))) ? '+' : '-') + " [" + class_getName(aClass) + ' ' + method_getName(method) + ']';
    }
    if (!((aClass.info & (CLS_META))) && (((aClass.info & (CLS_META))) ? aClass : aClass.isa).isa === (((aClass.info & (CLS_META))) ? aClass : aClass.isa))
        class_addMethods((((aClass.info & (CLS_META))) ? aClass : aClass.isa), methods);
}
class_addMethods.displayName = "class_addMethods";
class_getInstanceMethod = function( aClass, aSelector)
{
    if (!aClass || !aSelector)
        return NULL;
    var method = aClass.method_dtable[aSelector];
    return method ? method : NULL;
}
class_getInstanceMethod.displayName = "class_getInstanceMethod";
class_getClassMethod = function( aClass, aSelector)
{
    if (!aClass || !aSelector)
        return NULL;
    var method = (((aClass.info & (CLS_META))) ? aClass : aClass.isa).method_dtable[aSelector];
    return method ? method : NULL;
}
class_getClassMethod.displayName = "class_getClassMethod";
class_respondsToSelector = function( aClass, aSelector)
{
    return class_getClassMethod(aClass, aSelector) != NULL;
}
class_respondsToSelector.displayName = "class_respondsToSelector";
class_copyMethodList = function( aClass)
{
    return aClass.method_list.slice(0);
}
class_copyMethodList.displayName = "class_copyMethodList";
class_replaceMethod = function( aClass, aSelector, aMethodImplementation)
{
    if (!aClass || !aSelector)
        return NULL;
    var method = aClass.method_dtable[aSelector],
        method_imp = NULL;
    if (method)
        method_imp = method.method_imp;
    method.method_imp = aMethodImplementation;
    return method_imp;
}
class_replaceMethod.displayName = "class_replaceMethod";
var _class_initialize = function( aClass)
{
    var meta = (((aClass.info & (CLS_META))) ? aClass : aClass.isa);
    if ((aClass.info & (CLS_META)))
        aClass = objj_getClass(aClass.name);
    if (aClass.super_class && !((((aClass.super_class.info & (CLS_META))) ? aClass.super_class : aClass.super_class.isa).info & (CLS_INITIALIZED)))
        _class_initialize(aClass.super_class);
    if (!(meta.info & (CLS_INITIALIZED)) && !(meta.info & (CLS_INITIALIZING)))
    {
        meta.info = (meta.info | (CLS_INITIALIZING)) & ~(0);
        objj_msgSend(aClass, "initialize");
        meta.info = (meta.info | (CLS_INITIALIZED)) & ~(CLS_INITIALIZING);
    }
}
var _objj_forward = new objj_method("forward", function(self, _cmd)
{
    return objj_msgSend(self, "forward::", _cmd, arguments);
});
class_getMethodImplementation = function( aClass, aSelector)
{
    if (!((((aClass.info & (CLS_META))) ? aClass : aClass.isa).info & (CLS_INITIALIZED))) _class_initialize(aClass); var method = aClass.method_dtable[aSelector]; if (!method) method = _objj_forward; var implementation = method.method_imp;;
    return implementation;
}
class_getMethodImplementation.displayName = "class_getMethodImplementation";
var REGISTERED_CLASSES = { };
objj_allocateClassPair = function( superclass, aName)
{
    var classObject = new objj_class(aName),
        metaClassObject = new objj_class(aName),
        rootClassObject = classObject;
    if (superclass)
    {
        rootClassObject = superclass;
        while (rootClassObject.superclass)
            rootClassObject = rootClassObject.superclass;
        classObject.allocator.prototype = new superclass.allocator;
        classObject.method_store.prototype = new superclass.method_store;
        classObject.method_dtable = classObject.method_store.prototype;
        metaClassObject.method_store.prototype = new superclass.isa.method_store;
        metaClassObject.method_dtable = metaClassObject.method_store.prototype;
        classObject.super_class = superclass;
        metaClassObject.super_class = superclass.isa;
    }
    else
        classObject.allocator.prototype = new objj_object();
    classObject.isa = metaClassObject;
    classObject.name = aName;
    classObject.info = CLS_CLASS;
    classObject._UID = objj_generateObjectUID();
    metaClassObject.isa = rootClassObject.isa;
    metaClassObject.name = aName;
    metaClassObject.info = CLS_META;
    metaClassObject._UID = objj_generateObjectUID();
    return classObject;
}
objj_allocateClassPair.displayName = "objj_allocateClassPair";
var CONTEXT_BUNDLE = nil;
objj_registerClassPair = function( aClass)
{
    global[aClass.name] = aClass;
    REGISTERED_CLASSES[aClass.name] = aClass;
    addClassToBundle(aClass, CONTEXT_BUNDLE);
}
objj_registerClassPair.displayName = "objj_registerClassPair";
class_createInstance = function( aClass)
{
    if (!aClass)
        throw new Error("*** Attempting to create object with Nil class.");
    var object = new aClass.allocator();
    object.isa = aClass;
    object._UID = objj_generateObjectUID();
    return object;
}
class_createInstance.displayName = "class_createInstance";
var prototype_bug = function() { }
prototype_bug.prototype.member = false;
with (new prototype_bug())
    member = true;
if (new prototype_bug().member)
{
var fast_class_createInstance = class_createInstance;
class_createInstance = function( aClass)
{
    var object = fast_class_createInstance(aClass);
    if (object)
    {
        var theClass = object.isa,
            actualClass = theClass;
        while (theClass)
        {
            var ivars = theClass.ivars;
                count = ivars.length;
            while (count--)
                object[ivars[count].name] = NULL;
            theClass = theClass.super_class;
        }
        object.isa = actualClass;
    }
    return object;
}
}
object_getClassName = function( anObject)
{
    if (!anObject)
        return "";
    var theClass = anObject.isa;
    return theClass ? class_getName(theClass) : "";
}
object_getClassName.displayName = "object_getClassName";
objj_lookUpClass = function( aName)
{
    var theClass = REGISTERED_CLASSES[aName];
    return theClass ? theClass : Nil;
}
objj_lookUpClass.displayName = "objj_lookUpClass";
objj_getClass = function( aName)
{
    var theClass = REGISTERED_CLASSES[aName];
    if (!theClass)
    {
    }
    return theClass ? theClass : Nil;
}
objj_getClass.displayName = "objj_getClass";
objj_getMetaClass = function( aName)
{
    var theClass = objj_getClass(aName);
    return (((theClass.info & (CLS_META))) ? theClass : theClass.isa);
}
objj_getMetaClass.displayName = "objj_getMetaClass";
ivar_getName = function(anIvar)
{
    return anIvar.name;
}
ivar_getName.displayName = "ivar_getName";
ivar_getTypeEncoding = function(anIvar)
{
    return anIvar.type;
}
ivar_getTypeEncoding.displayName = "ivar_getTypeEncoding";
objj_msgSend = function( aReceiver, aSelector)
{
    if (aReceiver == nil)
        return nil;
    var isa = aReceiver.isa;
    if (!((((isa.info & (CLS_META))) ? isa : isa.isa).info & (CLS_INITIALIZED))) _class_initialize(isa); var method = isa.method_dtable[aSelector]; if (!method) method = _objj_forward; var implementation = method.method_imp;;
    switch(arguments.length)
    {
        case 2: return implementation(aReceiver, aSelector);
        case 3: return implementation(aReceiver, aSelector, arguments[2]);
        case 4: return implementation(aReceiver, aSelector, arguments[2], arguments[3]);
    }
    return implementation.apply(aReceiver, arguments);
}
objj_msgSend.displayName = "objj_msgSend";
objj_msgSendSuper = function( aSuper, aSelector)
{
    var super_class = aSuper.super_class;
    arguments[0] = aSuper.receiver;
    if (!((((super_class.info & (CLS_META))) ? super_class : super_class.isa).info & (CLS_INITIALIZED))) _class_initialize(super_class); var method = super_class.method_dtable[aSelector]; if (!method) method = _objj_forward; var implementation = method.method_imp;;
    return implementation.apply(aSuper.receiver, arguments);
}
objj_msgSendSuper.displayName = "objj_msgSendSuper";
method_getName = function( aMethod)
{
    return aMethod.name;
}
method_getName.displayName = "method_getName";
method_getImplementation = function( aMethod)
{
    return aMethod.method_imp;
}
method_getImplementation.displayName = "method_getImplementation";
method_setImplementation = function( aMethod, anImplementation)
{
    var oldImplementation = aMethod.method_imp;
    aMethod.method_imp = anImplementation;
    return oldImplementation;
}
method_setImplementation.displayName = "method_setImplementation";
method_exchangeImplementations = function( lhs, rhs)
{
    var lhs_imp = method_getImplementation(lhs),
        rhs_imp = method_getImplementation(rhs);
    method_setImplementation(lhs, rhs_imp);
    method_setImplementation(rhs, lhs_imp);
}
method_exchangeImplementations.displayName = "method_exchangeImplementations";
sel_getName = function(aSelector)
{
    return aSelector ? aSelector : "<null selector>";
}
sel_getName.displayName = "sel_getName";
sel_getUid = function( aName)
{
    return aName;
}
sel_getUid.displayName = "sel_getUid";
sel_isEqual = function( lhs, rhs)
{
    return lhs === rhs;
}
sel_isEqual.displayName = "sel_isEqual";
sel_registerName = function( aName)
{
    return aName;
}
sel_registerName.displayName = "sel_registerName";
objj_eval = function( aString)
{
    var url = exports.pageURL;
    var asyncLoaderSaved = exports.asyncLoader;
    exports.asyncLoader = NO;
    var executable = exports.preprocess(aString, url, 0);
    if (!executable.hasLoadedFileDependencies())
        executable.loadFileDependencies();
    global._objj_eval_scope = {};
    global._objj_eval_scope.objj_executeFile = Executable.fileExecuterForURL(url);
    global._objj_eval_scope.objj_importFile = Executable.fileImporterForURL(url);
    var code = "with(_objj_eval_scope){" + executable._code + "\n//*/\n}";
    var result;
        result = eval(code);
    exports.asyncLoader = asyncLoaderSaved;
    return result;
}
exports.objj_eval = objj_eval;
CPLogRegister(CPLogDefault);
function objj_debug_object_format(aReceiver)
{
    return (aReceiver && aReceiver.isa) ? exports.sprintf("<%s %#08x>", (((aReceiver.info & (CLS_META))) ? aReceiver : aReceiver.isa).name, aReceiver._UID) : String(aReceiver);
}
function objj_debug_message_format(aReceiver, aSelector)
{
    return exports.sprintf("[%s %s]", objj_debug_object_format(aReceiver), aSelector);
}
var objj_msgSend_original = objj_msgSend,
    objj_msgSendSuper_original = objj_msgSendSuper;
objj_msgSend_reset = function()
{
    objj_msgSend = objj_msgSend_original;
    objj_msgSendSuper = objj_msgSendSuper_original;
}
objj_msgSend_decorate = function()
{
    var index = 0,
        count = arguments.length;
    for (; index < count; ++index)
    {
        objj_msgSend = arguments[index](objj_msgSend);
        objj_msgSendSuper = arguments[index](objj_msgSendSuper);
    }
}
objj_msgSend_set_decorators = function()
{
    objj_msgSend_reset();
    objj_msgSend_decorate.apply(NULL, arguments);
}
var objj_backtrace = [];
objj_backtrace_print = function( aStream)
{
    var index = 0,
        count = objj_backtrace.length;
    for (; index < count; ++index)
    {
        var frame = objj_backtrace[index];
        aStream(objj_debug_message_format(frame.receiver, frame.selector));
    }
}
objj_backtrace_decorator = function(msgSend)
{
    return function(aReceiverOrSuper, aSelector)
    {
        var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper);
        objj_backtrace.push({ receiver: aReceiver, selector : aSelector });
        try
        {
            return msgSend.apply(NULL, arguments);
        }
        catch (anException)
        {
            CPLog.warn("Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector));
            objj_backtrace_print(CPLog.warn);
            throw anException;
        }
        finally
        {
            objj_backtrace.pop();
        }
    }
}
objj_supress_exceptions_decorator = function(msgSend)
{
    return function(aReceiverOrSuper, aSelector)
    {
        var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper);
        try
        {
            return msgSend.apply(NULL, arguments);
        }
        catch (anException)
        {
            CPLog.warn("Exception " + anException + " in " + objj_debug_message_format(aReceiver, aSelector));
        }
    }
}
var objj_typechecks_reported = {},
    objj_typecheck_prints_backtrace = NO;
objj_typecheck_decorator = function(msgSend)
{
    return function(aReceiverOrSuper, aSelector)
    {
        var aReceiver = aReceiverOrSuper && (aReceiverOrSuper.receiver || aReceiverOrSuper);
        if (!aReceiver)
            return msgSend.apply(NULL, arguments);
        var types = aReceiver.isa.method_dtable[aSelector].types;
        for (var i = 2; i < arguments.length; i++)
        {
            try
            {
                objj_debug_typecheck(types[i-1], arguments[i]);
            }
            catch (e)
            {
                var key = [(((aReceiver.info & (CLS_META))) ? aReceiver : aReceiver.isa).name, aSelector, i, e].join(";");
                if (!objj_typechecks_reported[key]) {
                    objj_typechecks_reported[key] = YES;
                    CPLog.warn("Type check failed on argument " + (i-2) + " of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e);
                    if (objj_typecheck_prints_backtrace)
                        objj_backtrace_print(CPLog.warn);
                }
            }
        }
        var result = msgSend.apply(NULL, arguments);
        try
        {
            objj_debug_typecheck(types[0], result);
        }
        catch (e)
        {
            var key = [(((aReceiver.info & (CLS_META))) ? aReceiver : aReceiver.isa).name, aSelector, "ret", e].join(";");
            if (!objj_typechecks_reported[key]) {
                objj_typechecks_reported[key] = YES;
                CPLog.warn("Type check failed on return val of " + objj_debug_message_format(aReceiver, aSelector) + ": " + e);
                if (objj_typecheck_prints_backtrace)
                    objj_backtrace_print(CPLog.warn);
            }
        }
        return result;
    }
}
objj_debug_typecheck = function(expectedType, object)
{
    var objjClass;
    if (!expectedType)
    {
        return;
    }
    else if (expectedType === "id")
    {
        if (object !== undefined)
            return;
    }
    else if (expectedType === "void")
    {
        if (object === undefined)
            return;
    }
    else if (objjClass = objj_getClass(expectedType))
    {
        if (object === nil)
        {
            return;
        }
        else if (object !== undefined && object.isa)
        {
            var theClass = object.isa;
            for (; theClass; theClass = theClass.super_class)
                if (theClass === objjClass)
                    return;
        }
    }
    else
    {
        return;
    }
    var actualType;
    if (object === NULL)
        actualType = "null";
    else if (object === undefined)
        actualType = "void";
    else if (object.isa)
        actualType = (((object.info & (CLS_META))) ? object : object.isa).name;
    else
        actualType = typeof object;
    throw ("expected=" + expectedType + ", actual=" + actualType);
}
enableCFURLCaching();
var pageURL = new CFURL(window.location.href),
    DOMBaseElements = document.getElementsByTagName("base"),
    DOMBaseElementsCount = DOMBaseElements.length;
if (DOMBaseElementsCount > 0)
{
    var DOMBaseElement = DOMBaseElements[DOMBaseElementsCount - 1],
        DOMBaseElementHref = DOMBaseElement && DOMBaseElement.getAttribute("href");
    if (DOMBaseElementHref)
        pageURL = new CFURL(DOMBaseElementHref, pageURL);
}
var mainFileURL = new CFURL(window.OBJJ_MAIN_FILE || "main.j"),
    mainBundleURL = new CFURL(".", new CFURL(mainFileURL, pageURL)).absoluteURL(),
    assumedResolvedURL = new CFURL("..", mainBundleURL).absoluteURL();
if (mainBundleURL === assumedResolvedURL)
    assumedResolvedURL = new CFURL(assumedResolvedURL.schemeAndAuthority());
StaticResource.resourceAtURL(assumedResolvedURL, YES);
exports.pageURL = pageURL;
exports.bootstrap = function()
{
    resolveMainBundleURL();
}
function resolveMainBundleURL()
{
    StaticResource.resolveResourceAtURL(mainBundleURL, YES, function( aResource)
    {
        var includeURLs = StaticResource.includeURLs(),
            index = 0,
            count = includeURLs.length;
        for (; index < count; ++index)
            aResource.resourceAtURL(includeURLs[index], YES);
        Executable.fileImporterForURL(mainBundleURL)(mainFileURL.lastPathComponent(), YES, function()
        {
            disableCFURLCaching();
            afterDocumentLoad(function()
            {
                var hashString = window.location.hash.substring(1),
                    args = [];
                if (hashString.length)
                {
                    args = hashString.split("/");
                    for (var i = 0, count = args.length; i < count; i++)
                        args[i] = decodeURIComponent(args[i]);
                }
                var namedArgsArray = window.location.search.substring(1).split("&"),
                    namedArgs = new CFMutableDictionary();
                for (var i = 0, count = namedArgsArray.length; i < count; i++)
                {
                    var thisArg = namedArgsArray[i].split("=");
                    if (!thisArg[0])
                        continue;
                    if (thisArg[1] == null)
                        thisArg[1] = true;
                    namedArgs.setValueForKey(decodeURIComponent(thisArg[0]), decodeURIComponent(thisArg[1]));
                }
                main(args, namedArgs);
            });
        });
    });
}
var documentLoaded = NO;
function afterDocumentLoad( aFunction)
{
    if (documentLoaded)
        return aFunction();
    if (window.addEventListener)
        window.addEventListener("load", aFunction, NO);
    else if (window.attachEvent)
        window.attachEvent("onload", aFunction);
}
afterDocumentLoad(function()
{
    documentLoaded = YES;
});
if (typeof OBJJ_AUTO_BOOTSTRAP === "undefined" || OBJJ_AUTO_BOOTSTRAP)
    exports.bootstrap();
function makeAbsoluteURL( aURL)
{
    if (aURL instanceof CFURL && aURL.scheme())
        return aURL;
    return new CFURL(aURL, mainBundleURL);
}
objj_importFile = Executable.fileImporterForURL(mainBundleURL);
objj_executeFile = Executable.fileExecuterForURL(mainBundleURL);
objj_import = function()
{
    CPLog.warn("objj_import is deprecated, use objj_importFile instead");
    objj_importFile.apply(this, arguments);
}
})(window, ObjectiveJ);

Added Site/Site_Z/Frameworks/Foundation/Info.plist.



>
1
280NPLIST;1.0;D;K;18;CPBundleIdentifierS;19;com.280n.FoundationK;29;CPBundleInfoDictionaryVersiond;1;6K;12;CPBundleNameS;10;FoundationK;19;CPBundlePackageTypeS;4;FMWKK;15;CPBundleVersionS;5;0.8.1K;20;CPBundleEnvironmentsA;S;4;ObjJE;K;18;CPBundleExecutableS;13;Foundation.sjK;36;CPBundleEnvironmentsWithImageSpritesA;E;E;

Added Site/Site_Z/Frameworks/Foundation/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site_Z/Frameworks/Foundation/ObjJ.environment/Foundation.sj.

more than 10,000 changes

Added Site/Site_Z/Frameworks/Objective-J/LICENSE.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!

Added Site/Site_Z/Frameworks/Objective-J/Objective-J.js.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
var ObjectiveJ={};
(function(_1,_2){
if(!this.JSON){
JSON={};
}
(function(){
function f(n){
return n<10?"0"+n:n;
};
if(typeof Date.prototype.toJSON!=="function"){
Date.prototype.toJSON=function(_3){
return this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z";
};
String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(_4){
return this.valueOf();
};
}
var cx=new RegExp("[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]","g");
var _5=new RegExp("[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]","g");
var _6,_7,_8={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\"":"\\\"","\\":"\\\\"},_9;
function _a(_b){
_5.lastIndex=0;
return _5.test(_b)?"\""+_b.replace(_5,function(a){
var c=_8[a];
return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4);
})+"\"":"\""+_b+"\"";
};
function _c(_d,_e){
var i,k,v,_f,_10=_6,_11,_12=_e[_d];
if(_12&&typeof _12==="object"&&typeof _12.toJSON==="function"){
_12=_12.toJSON(_d);
}
if(typeof _9==="function"){
_12=_9.call(_e,_d,_12);
}
switch(typeof _12){
case "string":
return _a(_12);
case "number":
return isFinite(_12)?String(_12):"null";
case "boolean":
case "null":
return String(_12);
case "object":
if(!_12){
return "null";
}
_6+=_7;
_11=[];
if(Object.prototype.toString.apply(_12)==="[object Array]"){
_f=_12.length;
for(i=0;i<_f;i+=1){
_11[i]=_c(i,_12)||"null";
}
v=_11.length===0?"[]":_6?"[\n"+_6+_11.join(",\n"+_6)+"\n"+_10+"]":"["+_11.join(",")+"]";
_6=_10;
return v;
}
if(_9&&typeof _9==="object"){
_f=_9.length;
for(i=0;i<_f;i+=1){
k=_9[i];
if(typeof k==="string"){
v=_c(k,_12);
if(v){
_11.push(_a(k)+(_6?": ":":")+v);
}
}
}
}else{
for(k in _12){
if(Object.hasOwnProperty.call(_12,k)){
v=_c(k,_12);
if(v){
_11.push(_a(k)+(_6?": ":":")+v);
}
}
}
}
v=_11.length===0?"{}":_6?"{\n"+_6+_11.join(",\n"+_6)+"\n"+_10+"}":"{"+_11.join(",")+"}";
_6=_10;
return v;
}
};
if(typeof JSON.stringify!=="function"){
JSON.stringify=function(_13,_14,_15){
var i;
_6="";
_7="";
if(typeof _15==="number"){
for(i=0;i<_15;i+=1){
_7+=" ";
}
}else{
if(typeof _15==="string"){
_7=_15;
}
}
_9=_14;
if(_14&&typeof _14!=="function"&&(typeof _14!=="object"||typeof _14.length!=="number")){
throw new Error("JSON.stringify");
}
return _c("",{"":_13});
};
}
if(typeof JSON.parse!=="function"){
JSON.parse=function(_16,_17){
var j;
function _18(_19,key){
var k,v,_1a=_19[key];
if(_1a&&typeof _1a==="object"){
for(k in _1a){
if(Object.hasOwnProperty.call(_1a,k)){
v=_18(_1a,k);
if(v!==_46){
_1a[k]=v;
}else{
delete _1a[k];
}
}
}
}
return _17.call(_19,key,_1a);
};
cx.lastIndex=0;
if(cx.test(_16)){
_16=_16.replace(cx,function(a){
return "\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4);
});
}
if(/^[\],:{}\s]*$/.test(_16.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){
j=eval("("+_16+")");
return typeof _17==="function"?_18({"":j},""):j;
}
throw new SyntaxError("JSON.parse");
};
}
}());
var _1b=new RegExp("([^%]+|%[\\+\\-\\ \\#0]*[0-9\\*]*(.[0-9\\*]+)?[hlL]?[cbBdieEfgGosuxXpn%@])","g");
var _1c=new RegExp("(%)([\\+\\-\\ \\#0]*)([0-9\\*]*)((.[0-9\\*]+)?)([hlL]?)([cbBdieEfgGosuxXpn%@])");
_2.sprintf=function(_1d){
var _1d=arguments[0],_1e=_1d.match(_1b),_1f=0,_20="",arg=1;
for(var i=0;i<_1e.length;i++){
var t=_1e[i];
if(_1d.substring(_1f,_1f+t.length)!=t){
return _20;
}
_1f+=t.length;
if(t.charAt(0)!="%"){
_20+=t;
}else{
var _21=t.match(_1c);
if(_21.length!=8||_21[0]!=t){
return _20;
}
var _22=_21[1],_23=_21[2],_24=_21[3],_25=_21[4],_26=_21[6],_27=_21[7];
var _28=null;
if(_24=="*"){
_28=arguments[arg++];
}else{
if(_24!=""){
_28=Number(_24);
}
}
var _29=null;
if(_25==".*"){
_29=arguments[arg++];
}else{
if(_25!=""){
_29=Number(_25.substring(1));
}
}
var _2a=(_23.indexOf("-")>=0);
var _2b=(_23.indexOf("0")>=0);
var _2c="";
if(RegExp("[bBdiufeExXo]").test(_27)){
var num=Number(arguments[arg++]);
var _2d="";
if(num<0){
_2d="-";
}else{
if(_23.indexOf("+")>=0){
_2d="+";
}else{
if(_23.indexOf(" ")>=0){
_2d=" ";
}
}
}
if(_27=="d"||_27=="i"||_27=="u"){
var _2e=String(Math.abs(Math.floor(num)));
_2c=_2f(_2d,"",_2e,"",_28,_2a,_2b);
}
if(_27=="f"){
var _2e=String((_29!=null)?Math.abs(num).toFixed(_29):Math.abs(num));
var _30=(_23.indexOf("#")>=0&&_2e.indexOf(".")<0)?".":"";
_2c=_2f(_2d,"",_2e,_30,_28,_2a,_2b);
}
if(_27=="e"||_27=="E"){
var _2e=String(Math.abs(num).toExponential(_29!=null?_29:21));
var _30=(_23.indexOf("#")>=0&&_2e.indexOf(".")<0)?".":"";
_2c=_2f(_2d,"",_2e,_30,_28,_2a,_2b);
}
if(_27=="x"||_27=="X"){
var _2e=String(Math.abs(num).toString(16));
var _31=(_23.indexOf("#")>=0&&num!=0)?"0x":"";
_2c=_2f(_2d,_31,_2e,"",_28,_2a,_2b);
}
if(_27=="b"||_27=="B"){
var _2e=String(Math.abs(num).toString(2));
var _31=(_23.indexOf("#")>=0&&num!=0)?"0b":"";
_2c=_2f(_2d,_31,_2e,"",_28,_2a,_2b);
}
if(_27=="o"){
var _2e=String(Math.abs(num).toString(8));
var _31=(_23.indexOf("#")>=0&&num!=0)?"0":"";
_2c=_2f(_2d,_31,_2e,"",_28,_2a,_2b);
}
if(RegExp("[A-Z]").test(_27)){
_2c=_2c.toUpperCase();
}else{
_2c=_2c.toLowerCase();
}
}else{
var _2c="";
if(_27=="%"){
_2c="%";
}else{
if(_27=="c"){
_2c=String(arguments[arg++]).charAt(0);
}else{
if(_27=="s"||_27=="@"){
_2c=String(arguments[arg++]);
}else{
if(_27=="p"||_27=="n"){
arg++;
_2c="";
}
}
}
}
_2c=_2f("","",_2c,"",_28,_2a,false);
}
_20+=_2c;
}
}
return _20;
};
function _2f(_32,_33,_34,_35,_36,_37,_38){
var _39=(_32.length+_33.length+_34.length+_35.length);
if(_37){
return _32+_33+_34+_35+pad(_36-_39," ");
}else{
if(_38){
return _32+_33+pad(_36-_39,"0")+_34+_35;
}else{
return pad(_36-_39," ")+_32+_33+_34+_35;
}
}
};
function pad(n,ch){
return Array(MAX(0,n)+1).join(ch);
};
CPLogDisable=false;
var _3a="Cappuccino";
var _3b=["fatal","error","warn","info","debug","trace"];
var _3c=_3b[3];
var _3d={};
for(var i=0;i<_3b.length;i++){
_3d[_3b[i]]=i;
}
var _3e={};
CPLogRegister=function(_3f,_40,_41){
CPLogRegisterRange(_3f,_3b[0],_40||_3b[_3b.length-1],_41);
};
CPLogRegisterRange=function(_42,_43,_44,_45){
var min=_3d[_43];
var max=_3d[_44];
if(min!==_46&&max!==_46&&min<=max){
for(var i=min;i<=max;i++){
CPLogRegisterSingle(_42,_3b[i],_45);
}
}
};
CPLogRegisterSingle=function(_47,_48,_49){
if(!_3e[_48]){
_3e[_48]=[];
}
for(var i=0;i<_3e[_48].length;i++){
if(_3e[_48][i][0]===_47){
_3e[_48][i][1]=_49;
return;
}
}
_3e[_48].push([_47,_49]);
};
CPLogUnregister=function(_4a){
for(var _4b in _3e){
for(var i=0;i<_3e[_4b].length;i++){
if(_3e[_4b][i][0]===_4a){
_3e[_4b].splice(i--,1);
}
}
}
};
function _4c(_4d,_4e,_4f){
if(_4f==_46){
_4f=_3a;
}
if(_4e==_46){
_4e=_3c;
}
var _50=(typeof _4d[0]=="string"&&_4d.length>1)?_2.sprintf.apply(null,_4d):String(_4d[0]);
if(_3e[_4e]){
for(var i=0;i<_3e[_4e].length;i++){
var _51=_3e[_4e][i];
_51[0](_50,_4e,_4f,_51[1]);
}
}
};
CPLog=function(){
_4c(arguments);
};
for(var i=0;i<_3b.length;i++){
CPLog[_3b[i]]=(function(_52){
return function(){
_4c(arguments,_52);
};
})(_3b[i]);
}
var _53=function(_54,_55,_56){
var now=new Date();
_55=(_55==null?"":" ["+CPLogColorize(_55,_55)+"]");
if(typeof _2.sprintf=="function"){
return _2.sprintf("%4d-%02d-%02d %02d:%02d:%02d.%03d %s%s: %s",now.getFullYear(),now.getMonth()+1,now.getDate(),now.getHours(),now.getMinutes(),now.getSeconds(),now.getMilliseconds(),_56,_55,_54);
}else{
return now+" "+_56+_55+": "+_54;
}
};
CPLogConsole=function(_57,_58,_59,_5a){
if(typeof console!="undefined"){
var _5b=(_5a||_53)(_57,_58,_59);
var _5c={"fatal":"error","error":"error","warn":"warn","info":"info","debug":"debug","trace":"debug"}[_58];
if(_5c&&console[_5c]){
console[_5c](_5b);
}else{
if(console.log){
console.log(_5b);
}
}
}
};
CPLogColorize=function(_5d,_5e){
return _5d;
};
CPLogAlert=function(_5f,_60,_61,_62){
if(typeof alert!="undefined"&&!CPLogDisable){
var _63=(_62||_53)(_5f,_60,_61);
CPLogDisable=!confirm(_63+"\n\n(Click cancel to stop log alerts)");
}
};
var _64=null;
CPLogPopup=function(_65,_66,_67,_68){
try{
if(CPLogDisable||window.open==_46){
return;
}
if(!_64||!_64.document){
_64=window.open("","_blank","width=600,height=400,status=no,resizable=yes,scrollbars=yes");
if(!_64){
CPLogDisable=!confirm(_65+"\n\n(Disable pop-up blocking for CPLog window; Click cancel to stop log alerts)");
return;
}
_69(_64);
}
var _6a=_64.document.createElement("div");
_6a.setAttribute("class",_66||"fatal");
var _6b=(_68||_53)(_65,_68?_66:null,_67);
_6a.appendChild(_64.document.createTextNode(_6b));
_64.log.appendChild(_6a);
if(_64.focusEnabled.checked){
_64.focus();
}
if(_64.blockEnabled.checked){
_64.blockEnabled.checked=_64.confirm(_6b+"\nContinue blocking?");
}
if(_64.scrollEnabled.checked){
_64.scrollToBottom();
}
}
catch(e){
}
};
var _6c="<style type=\"text/css\" media=\"screen\"> body{font:10px Monaco,Courier,\"Courier New\",monospace,mono;padding-top:15px;} div > .fatal,div > .error,div > .warn,div > .info,div > .debug,div > .trace{display:none;overflow:hidden;white-space:pre;padding:0px 5px 0px 5px;margin-top:2px;-moz-border-radius:5px;-webkit-border-radius:5px;} div[wrap=\"yes\"] > div{white-space:normal;} .fatal{background-color:#ffb2b3;} .error{background-color:#ffe2b2;} .warn{background-color:#fdffb2;} .info{background-color:#e4ffb2;} .debug{background-color:#a0e5a0;} .trace{background-color:#99b9ff;} .enfatal .fatal,.enerror .error,.enwarn .warn,.eninfo .info,.endebug .debug,.entrace .trace{display:block;} div#header{background-color:rgba(240,240,240,0.82);position:fixed;top:0px;left:0px;width:100%;border-bottom:1px solid rgba(0,0,0,0.33);text-align:center;} ul#enablers{display:inline-block;margin:1px 15px 0 15px;padding:2px 0 2px 0;} ul#enablers li{display:inline;padding:0px 5px 0px 5px;margin-left:4px;-moz-border-radius:5px;-webkit-border-radius:5px;} [enabled=\"no\"]{opacity:0.25;} ul#options{display:inline-block;margin:0 15px 0px 15px;padding:0 0px;} ul#options li{margin:0 0 0 0;padding:0 0 0 0;display:inline;} </style>";
function _69(_6d){
var doc=_6d.document;
doc.writeln("<html><head><title></title>"+_6c+"</head><body></body></html>");
doc.title=_3a+" Run Log";
var _6e=doc.getElementsByTagName("head")[0];
var _6f=doc.getElementsByTagName("body")[0];
var _70=window.location.protocol+"//"+window.location.host+window.location.pathname;
_70=_70.substring(0,_70.lastIndexOf("/")+1);
var div=doc.createElement("div");
div.setAttribute("id","header");
_6f.appendChild(div);
var ul=doc.createElement("ul");
ul.setAttribute("id","enablers");
div.appendChild(ul);
for(var i=0;i<_3b.length;i++){
var li=doc.createElement("li");
li.setAttribute("id","en"+_3b[i]);
li.setAttribute("class",_3b[i]);
li.setAttribute("onclick","toggle(this);");
li.setAttribute("enabled","yes");
li.appendChild(doc.createTextNode(_3b[i]));
ul.appendChild(li);
}
var ul=doc.createElement("ul");
ul.setAttribute("id","options");
div.appendChild(ul);
var _71={"focus":["Focus",false],"block":["Block",false],"wrap":["Wrap",false],"scroll":["Scroll",true],"close":["Close",true]};
for(o in _71){
var li=doc.createElement("li");
ul.appendChild(li);
_6d[o+"Enabled"]=doc.createElement("input");
_6d[o+"Enabled"].setAttribute("id",o);
_6d[o+"Enabled"].setAttribute("type","checkbox");
if(_71[o][1]){
_6d[o+"Enabled"].setAttribute("checked","checked");
}
li.appendChild(_6d[o+"Enabled"]);
var _72=doc.createElement("label");
_72.setAttribute("for",o);
_72.appendChild(doc.createTextNode(_71[o][0]));
li.appendChild(_72);
}
_6d.log=doc.createElement("div");
_6d.log.setAttribute("class","enerror endebug enwarn eninfo enfatal entrace");
_6f.appendChild(_6d.log);
_6d.toggle=function(_73){
var _74=(_73.getAttribute("enabled")=="yes")?"no":"yes";
_73.setAttribute("enabled",_74);
if(_74=="yes"){
_6d.log.className+=" "+_73.id;
}else{
_6d.log.className=_6d.log.className.replace(new RegExp("[\\s]*"+_73.id,"g"),"");
}
};
_6d.scrollToBottom=function(){
_6d.scrollTo(0,_6f.offsetHeight);
};
_6d.wrapEnabled.addEventListener("click",function(){
_6d.log.setAttribute("wrap",_6d.wrapEnabled.checked?"yes":"no");
},false);
_6d.addEventListener("keydown",function(e){
var e=e||_6d.event;
if(e.keyCode==75&&(e.ctrlKey||e.metaKey)){
while(_6d.log.firstChild){
_6d.log.removeChild(_6d.log.firstChild);
}
e.preventDefault();
}
},"false");
window.addEventListener("unload",function(){
if(_6d&&_6d.closeEnabled&&_6d.closeEnabled.checked){
CPLogDisable=true;
_6d.close();
}
},false);
_6d.addEventListener("unload",function(){
if(!CPLogDisable){
CPLogDisable=!confirm("Click cancel to stop logging");
}
},false);
};
CPLogDefault=(typeof window==="object"&&window.console)?CPLogConsole:CPLogPopup;
var _46;
if(typeof window!=="undefined"){
window.setNativeTimeout=window.setTimeout;
window.clearNativeTimeout=window.clearTimeout;
window.setNativeInterval=window.setInterval;
window.clearNativeInterval=window.clearInterval;
}
NO=false;
YES=true;
nil=null;
Nil=null;
NULL=null;
ABS=Math.abs;
ASIN=Math.asin;
ACOS=Math.acos;
ATAN=Math.atan;
ATAN2=Math.atan2;
SIN=Math.sin;
COS=Math.cos;
TAN=Math.tan;
EXP=Math.exp;
POW=Math.pow;
CEIL=Math.ceil;
FLOOR=Math.floor;
ROUND=Math.round;
MIN=Math.min;
MAX=Math.max;
RAND=Math.random;
SQRT=Math.sqrt;
E=Math.E;
LN2=Math.LN2;
LN10=Math.LN10;
LOG2E=Math.LOG2E;
LOG10E=Math.LOG10E;
PI=Math.PI;
PI2=Math.PI*2;
PI_2=Math.PI/2;
SQRT1_2=Math.SQRT1_2;
SQRT2=Math.SQRT2;
function _75(_76){
this._eventListenersForEventNames={};
this._owner=_76;
};
_75.prototype.addEventListener=function(_77,_78){
var _79=this._eventListenersForEventNames;
if(!_7a.call(_79,_77)){
var _7b=[];
_79[_77]=_7b;
}else{
var _7b=_79[_77];
}
var _7c=_7b.length;
while(_7c--){
if(_7b[_7c]===_78){
return;
}
}
_7b.push(_78);
};
_75.prototype.removeEventListener=function(_7d,_7e){
var _7f=this._eventListenersForEventNames;
if(!_7a.call(_7f,_7d)){
return;
}
var _80=_7f[_7d],_81=_80.length;
while(_81--){
if(_80[_81]===_7e){
return _80.splice(_81,1);
}
}
};
_75.prototype.dispatchEvent=function(_82){
var _83=_82.type,_84=this._eventListenersForEventNames;
if(_7a.call(_84,_83)){
var _85=this._eventListenersForEventNames[_83],_86=0,_87=_85.length;
for(;_86<_87;++_86){
_85[_86](_82);
}
}
var _88=(this._owner||this)["on"+_83];
if(_88){
_88(_82);
}
};
var _89=0,_8a=null,_8b=[];
function _8c(_8d){
var _8e=_89;
if(_8a===null){
window.setNativeTimeout(function(){
var _8f=_8b,_90=0,_91=_8b.length;
++_89;
_8a=null;
_8b=[];
for(;_90<_91;++_90){
_8f[_90]();
}
},0);
}
return function(){
var _92=arguments;
if(_89>_8e){
_8d.apply(this,_92);
}else{
_8b.push(function(){
_8d.apply(this,_92);
});
}
};
};
var _93=null;
if(window.ActiveXObject!==_46){
var _94=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP.6.0"],_95=_94.length;
while(_95--){
try{
var _96=_94[_95];
new ActiveXObject(_96);
_93=function(){
return new ActiveXObject(_96);
};
break;
}
catch(anException){
}
}
}
if(!_93){
_93=window.XMLHttpRequest;
}
CFHTTPRequest=function(){
this._isOpen=false;
this._requestHeaders={};
this._mimeType=null;
this._eventDispatcher=new _75(this);
this._nativeRequest=new _93();
var _97=this;
this._stateChangeHandler=function(){
_aa(_97);
};
this._nativeRequest.onreadystatechange=this._stateChangeHandler;
if(CFHTTPRequest.AuthenticationDelegate!==nil){
this._eventDispatcher.addEventListener("HTTP403",function(){
CFHTTPRequest.AuthenticationDelegate(_97);
});
}
};
CFHTTPRequest.UninitializedState=0;
CFHTTPRequest.LoadingState=1;
CFHTTPRequest.LoadedState=2;
CFHTTPRequest.InteractiveState=3;
CFHTTPRequest.CompleteState=4;
CFHTTPRequest.AuthenticationDelegate=nil;
CFHTTPRequest.prototype.status=function(){
try{
return this._nativeRequest.status||0;
}
catch(anException){
return 0;
}
};
CFHTTPRequest.prototype.statusText=function(){
try{
return this._nativeRequest.statusText||"";
}
catch(anException){
return "";
}
};
CFHTTPRequest.prototype.readyState=function(){
return this._nativeRequest.readyState;
};
CFHTTPRequest.prototype.success=function(){
var _98=this.status();
if(_98>=200&&_98<300){
return YES;
}
return _98===0&&this.responseText()&&this.responseText().length;
};
CFHTTPRequest.prototype.responseXML=function(){
var _99=this._nativeRequest.responseXML;
if(_99&&(_93===window.XMLHttpRequest)){
return _99;
}
return _9a(this.responseText());
};
CFHTTPRequest.prototype.responsePropertyList=function(){
var _9b=this.responseText();
if(CFPropertyList.sniffedFormatOfString(_9b)===CFPropertyList.FormatXML_v1_0){
return CFPropertyList.propertyListFromXML(this.responseXML());
}
return CFPropertyList.propertyListFromString(_9b);
};
CFHTTPRequest.prototype.responseText=function(){
return this._nativeRequest.responseText;
};
CFHTTPRequest.prototype.setRequestHeader=function(_9c,_9d){
this._requestHeaders[_9c]=_9d;
};
CFHTTPRequest.prototype.getResponseHeader=function(_9e){
return this._nativeRequest.getResponseHeader(_9e);
};
CFHTTPRequest.prototype.getAllResponseHeaders=function(){
return this._nativeRequest.getAllResponseHeaders();
};
CFHTTPRequest.prototype.overrideMimeType=function(_9f){
this._mimeType=_9f;
};
CFHTTPRequest.prototype.open=function(_a0,_a1,_a2,_a3,_a4){
this._isOpen=true;
this._URL=_a1;
this._async=_a2;
this._method=_a0;
this._user=_a3;
this._password=_a4;
return this._nativeRequest.open(_a0,_a1,_a2,_a3,_a4);
};
CFHTTPRequest.prototype.send=function(_a5){
if(!this._isOpen){
delete this._nativeRequest.onreadystatechange;
this._nativeRequest.open(this._method,this._URL,this._async,this._user,this._password);
this._nativeRequest.onreadystatechange=this._stateChangeHandler;
}
for(var i in this._requestHeaders){
if(this._requestHeaders.hasOwnProperty(i)){
this._nativeRequest.setRequestHeader(i,this._requestHeaders[i]);
}
}
if(this._mimeType&&"overrideMimeType" in this._nativeRequest){
this._nativeRequest.overrideMimeType(this._mimeType);
}
this._isOpen=false;
try{
return this._nativeRequest.send(_a5);
}
catch(anException){
this._eventDispatcher.dispatchEvent({type:"failure",request:this});
}
};
CFHTTPRequest.prototype.abort=function(){
this._isOpen=false;
return this._nativeRequest.abort();
};
CFHTTPRequest.prototype.addEventListener=function(_a6,_a7){
this._eventDispatcher.addEventListener(_a6,_a7);
};
CFHTTPRequest.prototype.removeEventListener=function(_a8,_a9){
this._eventDispatcher.removeEventListener(_a8,_a9);
};
function _aa(_ab){
var _ac=_ab._eventDispatcher;
_ac.dispatchEvent({type:"readystatechange",request:_ab});
var _ad=_ab._nativeRequest,_ae=["uninitialized","loading","loaded","interactive","complete"];
if(_ae[_ab.readyState()]==="complete"){
var _af="HTTP"+_ab.status();
_ac.dispatchEvent({type:_af,request:_ab});
var _b0=_ab.success()?"success":"failure";
_ac.dispatchEvent({type:_b0,request:_ab});
_ac.dispatchEvent({type:_ae[_ab.readyState()],request:_ab});
}else{
_ac.dispatchEvent({type:_ae[_ab.readyState()],request:_ab});
}
};
function _b1(_b2,_b3,_b4){
var _b5=new CFHTTPRequest();
if(_b2.pathExtension()==="plist"){
_b5.overrideMimeType("text/xml");
}
if(_2.asyncLoader){
_b5.onsuccess=_8c(_b3);
_b5.onfailure=_8c(_b4);
}else{
_b5.onsuccess=_b3;
_b5.onfailure=_b4;
}
_b5.open("GET",_b2.absoluteString(),_2.asyncLoader);
_b5.send("");
};
_2.asyncLoader=YES;
_2.Asynchronous=_8c;
_2.determineAndDispatchHTTPRequestEvents=_aa;
var _b6=0;
objj_generateObjectUID=function(){
return _b6++;
};
CFPropertyList=function(){
this._UID=objj_generateObjectUID();
};
CFPropertyList.DTDRE=/^\s*(?:<\?\s*xml\s+version\s*=\s*\"1.0\"[^>]*\?>\s*)?(?:<\!DOCTYPE[^>]*>\s*)?/i;
CFPropertyList.XMLRE=/^\s*(?:<\?\s*xml\s+version\s*=\s*\"1.0\"[^>]*\?>\s*)?(?:<\!DOCTYPE[^>]*>\s*)?<\s*plist[^>]*\>/i;
CFPropertyList.FormatXMLDTD="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">";
CFPropertyList.Format280NorthMagicNumber="280NPLIST";
CFPropertyList.FormatOpenStep=1,CFPropertyList.FormatXML_v1_0=100,CFPropertyList.FormatBinary_v1_0=200,CFPropertyList.Format280North_v1_0=-1000;
CFPropertyList.sniffedFormatOfString=function(_b7){
if(_b7.match(CFPropertyList.XMLRE)){
return CFPropertyList.FormatXML_v1_0;
}
if(_b7.substr(0,CFPropertyList.Format280NorthMagicNumber.length)===CFPropertyList.Format280NorthMagicNumber){
return CFPropertyList.Format280North_v1_0;
}
return NULL;
};
CFPropertyList.dataFromPropertyList=function(_b8,_b9){
var _ba=new CFMutableData();
_ba.setRawString(CFPropertyList.stringFromPropertyList(_b8,_b9));
return _ba;
};
CFPropertyList.stringFromPropertyList=function(_bb,_bc){
if(!_bc){
_bc=CFPropertyList.Format280North_v1_0;
}
var _bd=_be[_bc];
return _bd["start"]()+_bf(_bb,_bd)+_bd["finish"]();
};
function _bf(_c0,_c1){
var _c2=typeof _c0,_c3=_c0.valueOf(),_c4=typeof _c3;
if(_c2!==_c4){
_c2=_c4;
_c0=_c3;
}
if(_c0===YES||_c0===NO){
_c2="boolean";
}else{
if(_c2==="number"){
if(FLOOR(_c0)===_c0){
_c2="integer";
}else{
_c2="real";
}
}else{
if(_c2!=="string"){
if(_c0.slice){
_c2="array";
}else{
_c2="dictionary";
}
}
}
}
return _c1[_c2](_c0,_c1);
};
var _be={};
_be[CFPropertyList.FormatXML_v1_0]={"start":function(){
return CFPropertyList.FormatXMLDTD+"<plist version = \"1.0\">";
},"finish":function(){
return "</plist>";
},"string":function(_c5){
return "<string>"+_c6(_c5)+"</string>";
},"boolean":function(_c7){
return _c7?"<true/>":"<false/>";
},"integer":function(_c8){
return "<integer>"+_c8+"</integer>";
},"real":function(_c9){
return "<real>"+_c9+"</real>";
},"array":function(_ca,_cb){
var _cc=0,_cd=_ca.length,_ce="<array>";
for(;_cc<_cd;++_cc){
_ce+=_bf(_ca[_cc],_cb);
}
return _ce+"</array>";
},"dictionary":function(_cf,_d0){
var _d1=_cf._keys,_95=0,_d2=_d1.length,_d3="<dict>";
for(;_95<_d2;++_95){
var key=_d1[_95];
_d3+="<key>"+key+"</key>";
_d3+=_bf(_cf.valueForKey(key),_d0);
}
return _d3+"</dict>";
}};
var _d4="A",_d5="D",_d6="f",_d7="d",_d8="S",_d9="T",_da="F",_db="K",_dc="E";
_be[CFPropertyList.Format280North_v1_0]={"start":function(){
return CFPropertyList.Format280NorthMagicNumber+";1.0;";
},"finish":function(){
return "";
},"string":function(_dd){
return _d8+";"+_dd.length+";"+_dd;
},"boolean":function(_de){
return (_de?_d9:_da)+";";
},"integer":function(_df){
var _e0=""+_df;
return _d7+";"+_e0.length+";"+_e0;
},"real":function(_e1){
var _e2=""+_e1;
return _d6+";"+_e2.length+";"+_e2;
},"array":function(_e3,_e4){
var _e5=0,_e6=_e3.length,_e7=_d4+";";
for(;_e5<_e6;++_e5){
_e7+=_bf(_e3[_e5],_e4);
}
return _e7+_dc+";";
},"dictionary":function(_e8,_e9){
var _ea=_e8._keys,_95=0,_eb=_ea.length,_ec=_d5+";";
for(;_95<_eb;++_95){
var key=_ea[_95];
_ec+=_db+";"+key.length+";"+key;
_ec+=_bf(_e8.valueForKey(key),_e9);
}
return _ec+_dc+";";
}};
var _ed="xml",_ee="#document",_ef="plist",_f0="key",_f1="dict",_f2="array",_f3="string",_f4="true",_f5="false",_f6="real",_f7="integer",_f8="data";
var _f9=function(_fa,_fb,_fc){
var _fd=_fa;
_fd=(_fd.firstChild);
if(_fd!==NULL&&((_fd.nodeType)===8||(_fd.nodeType)===3)){
while((_fd=(_fd.nextSibling))&&((_fd.nodeType)===8||(_fd.nodeType)===3)){
}
}
if(_fd){
return _fd;
}
if((String(_fa.nodeName))===_f2||(String(_fa.nodeName))===_f1){
_fc.pop();
}else{
if(_fd===_fb){
return NULL;
}
_fd=_fa;
while((_fd=(_fd.nextSibling))&&((_fd.nodeType)===8||(_fd.nodeType)===3)){
}
if(_fd){
return _fd;
}
}
_fd=_fa;
while(_fd){
var _fe=_fd;
while((_fe=(_fe.nextSibling))&&((_fe.nodeType)===8||(_fe.nodeType)===3)){
}
if(_fe){
return _fe;
}
var _fd=(_fd.parentNode);
if(_fb&&_fd===_fb){
return NULL;
}
_fc.pop();
}
return NULL;
};
CFPropertyList.propertyListFromData=function(_ff,_100){
return CFPropertyList.propertyListFromString(_ff.rawString(),_100);
};
CFPropertyList.propertyListFromString=function(_101,_102){
if(!_102){
_102=CFPropertyList.sniffedFormatOfString(_101);
}
if(_102===CFPropertyList.FormatXML_v1_0){
return CFPropertyList.propertyListFromXML(_101);
}
if(_102===CFPropertyList.Format280North_v1_0){
return _103(_101);
}
return NULL;
};
var _d4="A",_d5="D",_d6="f",_d7="d",_d8="S",_d9="T",_da="F",_db="K",_dc="E";
function _103(_104){
var _105=new _106(_104),_107=NULL,key="",_108=NULL,_109=NULL,_10a=[],_10b=NULL;
while(_107=_105.getMarker()){
if(_107===_dc){
_10a.pop();
continue;
}
var _10c=_10a.length;
if(_10c){
_10b=_10a[_10c-1];
}
if(_107===_db){
key=_105.getString();
_107=_105.getMarker();
}
switch(_107){
case _d4:
_108=[];
_10a.push(_108);
break;
case _d5:
_108=new CFMutableDictionary();
_10a.push(_108);
break;
case _d6:
_108=parseFloat(_105.getString());
break;
case _d7:
_108=parseInt(_105.getString(),10);
break;
case _d8:
_108=_105.getString();
break;
case _d9:
_108=YES;
break;
case _da:
_108=NO;
break;
default:
throw new Error("*** "+_107+" marker not recognized in Plist.");
}
if(!_109){
_109=_108;
}else{
if(_10b){
if(_10b.slice){
_10b.push(_108);
}else{
_10b.setValueForKey(key,_108);
}
}
}
}
return _109;
};
function _c6(_10d){
return _10d.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
};
function _10e(_10f){
return _10f.replace(/&quot;/g,"\"").replace(/&apos;/g,"'").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&");
};
function _9a(_110){
if(window.DOMParser){
return (new window.DOMParser().parseFromString(_110,"text/xml").documentElement);
}else{
if(window.ActiveXObject){
XMLNode=new ActiveXObject("Microsoft.XMLDOM");
var _111=_110.match(CFPropertyList.DTDRE);
if(_111){
_110=_110.substr(_111[0].length);
}
XMLNode.loadXML(_110);
return XMLNode;
}
}
return NULL;
};
CFPropertyList.propertyListFromXML=function(_112){
var _113=_112;
if(_112.valueOf&&typeof _112.valueOf()==="string"){
_113=_9a(_112);
}
while(((String(_113.nodeName))===_ee)||((String(_113.nodeName))===_ed)){
_113=(_113.firstChild);
}
if(_113!==NULL&&((_113.nodeType)===8||(_113.nodeType)===3)){
while((_113=(_113.nextSibling))&&((_113.nodeType)===8||(_113.nodeType)===3)){
}
}
if(((_113.nodeType)===10)){
while((_113=(_113.nextSibling))&&((_113.nodeType)===8||(_113.nodeType)===3)){
}
}
if(!((String(_113.nodeName))===_ef)){
return NULL;
}
var key="",_114=NULL,_115=NULL,_116=_113,_117=[],_118=NULL;
while(_113=_f9(_113,_116,_117)){
var _119=_117.length;
if(_119){
_118=_117[_119-1];
}
if((String(_113.nodeName))===_f0){
key=((String((_113.firstChild).nodeValue)));
while((_113=(_113.nextSibling))&&((_113.nodeType)===8||(_113.nodeType)===3)){
}
}
switch(String((String(_113.nodeName)))){
case _f2:
_114=[];
_117.push(_114);
break;
case _f1:
_114=new CFMutableDictionary();
_117.push(_114);
break;
case _f6:
_114=parseFloat(((String((_113.firstChild).nodeValue))));
break;
case _f7:
_114=parseInt(((String((_113.firstChild).nodeValue))),10);
break;
case _f3:
if((_113.getAttribute("type")==="base64")){
_114=(_113.firstChild)?CFData.decodeBase64ToString(((String((_113.firstChild).nodeValue)))):"";
}else{
_114=_10e((_113.firstChild)?((String((_113.firstChild).nodeValue))):"");
}
break;
case _f4:
_114=YES;
break;
case _f5:
_114=NO;
break;
case _f8:
_114=new CFMutableData();
_114.bytes=(_113.firstChild)?CFData.decodeBase64ToArray(((String((_113.firstChild).nodeValue))),YES):[];
break;
default:
throw new Error("*** "+(String(_113.nodeName))+" tag not recognized in Plist.");
}
if(!_115){
_115=_114;
}else{
if(_118){
if(_118.slice){
_118.push(_114);
}else{
_118.setValueForKey(key,_114);
}
}
}
}
return _115;
};
kCFPropertyListOpenStepFormat=CFPropertyList.FormatOpenStep;
kCFPropertyListXMLFormat_v1_0=CFPropertyList.FormatXML_v1_0;
kCFPropertyListBinaryFormat_v1_0=CFPropertyList.FormatBinary_v1_0;
kCFPropertyList280NorthFormat_v1_0=CFPropertyList.Format280North_v1_0;
CFPropertyListCreate=function(){
return new CFPropertyList();
};
CFPropertyListCreateFromXMLData=function(data){
return CFPropertyList.propertyListFromData(data,CFPropertyList.FormatXML_v1_0);
};
CFPropertyListCreateXMLData=function(_11a){
return CFPropertyList.dataFromPropertyList(_11a,CFPropertyList.FormatXML_v1_0);
};
CFPropertyListCreateFrom280NorthData=function(data){
return CFPropertyList.propertyListFromData(data,CFPropertyList.Format280North_v1_0);
};
CFPropertyListCreate280NorthData=function(_11b){
return CFPropertyList.dataFromPropertyList(_11b,CFPropertyList.Format280North_v1_0);
};
CPPropertyListCreateFromData=function(data,_11c){
return CFPropertyList.propertyListFromData(data,_11c);
};
CPPropertyListCreateData=function(_11d,_11e){
return CFPropertyList.dataFromPropertyList(_11d,_11e);
};
CFDictionary=function(_11f){
this._keys=[];
this._count=0;
this._buckets={};
this._UID=objj_generateObjectUID();
};
var _120=Array.prototype.indexOf,_7a=Object.prototype.hasOwnProperty;
CFDictionary.prototype.copy=function(){
return this;
};
CFDictionary.prototype.mutableCopy=function(){
var _121=new CFMutableDictionary(),keys=this._keys,_122=this._count;
_121._keys=keys.slice();
_121._count=_122;
var _123=0,_124=this._buckets,_125=_121._buckets;
for(;_123<_122;++_123){
var key=keys[_123];
_125[key]=_124[key];
}
return _121;
};
CFDictionary.prototype.containsKey=function(aKey){
return _7a.apply(this._buckets,[aKey]);
};
CFDictionary.prototype.containsValue=function(_126){
var keys=this._keys,_127=this._buckets,_95=0,_128=keys.length;
for(;_95<_128;++_95){
if(_127[keys[_95]]===_126){
return YES;
}
}
return NO;
};
CFDictionary.prototype.count=function(){
return this._count;
};
CFDictionary.prototype.countOfKey=function(aKey){
return this.containsKey(aKey)?1:0;
};
CFDictionary.prototype.countOfValue=function(_129){
var keys=this._keys,_12a=this._buckets,_95=0,_12b=keys.length,_12c=0;
for(;_95<_12b;++_95){
if(_12a[keys[_95]]===_129){
++_12c;
}
}
return _12c;
};
CFDictionary.prototype.keys=function(){
return this._keys.slice();
};
CFDictionary.prototype.valueForKey=function(aKey){
var _12d=this._buckets;
if(!_7a.apply(_12d,[aKey])){
return nil;
}
return _12d[aKey];
};
CFDictionary.prototype.toString=function(){
var _12e="{\n",keys=this._keys,_95=0,_12f=this._count;
for(;_95<_12f;++_95){
var key=keys[_95];
_12e+="\t"+key+" = \""+String(this.valueForKey(key)).split("\n").join("\n\t")+"\"\n";
}
return _12e+"}";
};
CFMutableDictionary=function(_130){
CFDictionary.apply(this,[]);
};
CFMutableDictionary.prototype=new CFDictionary();
CFMutableDictionary.prototype.copy=function(){
return this.mutableCopy();
};
CFMutableDictionary.prototype.addValueForKey=function(aKey,_131){
if(this.containsKey(aKey)){
return;
}
++this._count;
this._keys.push(aKey);
this._buckets[aKey]=_131;
};
CFMutableDictionary.prototype.removeValueForKey=function(aKey){
var _132=-1;
if(_120){
_132=_120.call(this._keys,aKey);
}else{
var keys=this._keys,_95=0,_133=keys.length;
for(;_95<_133;++_95){
if(keys[_95]===aKey){
_132=_95;
break;
}
}
}
if(_132===-1){
return;
}
--this._count;
this._keys.splice(_132,1);
delete this._buckets[aKey];
};
CFMutableDictionary.prototype.removeAllValues=function(){
this._count=0;
this._keys=[];
this._buckets={};
};
CFMutableDictionary.prototype.replaceValueForKey=function(aKey,_134){
if(!this.containsKey(aKey)){
return;
}
this._buckets[aKey]=_134;
};
CFMutableDictionary.prototype.setValueForKey=function(aKey,_135){
if(_135===nil||_135===_46){
this.removeValueForKey(aKey);
}else{
if(this.containsKey(aKey)){
this.replaceValueForKey(aKey,_135);
}else{
this.addValueForKey(aKey,_135);
}
}
};
CFData=function(){
this._rawString=NULL;
this._propertyList=NULL;
this._propertyListFormat=NULL;
this._JSONObject=NULL;
this._bytes=NULL;
this._base64=NULL;
};
CFData.prototype.propertyList=function(){
if(!this._propertyList){
this._propertyList=CFPropertyList.propertyListFromString(this.rawString());
}
return this._propertyList;
};
CFData.prototype.JSONObject=function(){
if(!this._JSONObject){
try{
this._JSONObject=JSON.parse(this.rawString());
}
catch(anException){
}
}
return this._JSONObject;
};
CFData.prototype.rawString=function(){
if(this._rawString===NULL){
if(this._propertyList){
this._rawString=CFPropertyList.stringFromPropertyList(this._propertyList,this._propertyListFormat);
}else{
if(this._JSONObject){
this._rawString=JSON.stringify(this._JSONObject);
}else{
throw new Error("Can't convert data to string.");
}
}
}
return this._rawString;
};
CFData.prototype.bytes=function(){
return this._bytes;
};
CFData.prototype.base64=function(){
return this._base64;
};
CFMutableData=function(){
CFData.call(this);
};
CFMutableData.prototype=new CFData();
function _136(_137){
this._rawString=NULL;
this._propertyList=NULL;
this._propertyListFormat=NULL;
this._JSONObject=NULL;
this._bytes=NULL;
this._base64=NULL;
};
CFMutableData.prototype.setPropertyList=function(_138,_139){
_136(this);
this._propertyList=_138;
this._propertyListFormat=_139;
};
CFMutableData.prototype.setJSONObject=function(_13a){
_136(this);
this._JSONObject=_13a;
};
CFMutableData.prototype.setRawString=function(_13b){
_136(this);
this._rawString=_13b;
};
CFMutableData.prototype.setBytes=function(_13c){
_136(this);
this._bytes=_13c;
};
CFMutableData.prototype.setBase64String=function(_13d){
_136(this);
this._base64=_13d;
};
var _13e=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/","="],_13f=[];
for(var i=0;i<_13e.length;i++){
_13f[_13e[i].charCodeAt(0)]=i;
}
CFData.decodeBase64ToArray=function(_140,_141){
if(_141){
_140=_140.replace(/[^A-Za-z0-9\+\/\=]/g,"");
}
var pad=(_140[_140.length-1]=="="?1:0)+(_140[_140.length-2]=="="?1:0),_142=_140.length,_143=[];
var i=0;
while(i<_142){
var bits=(_13f[_140.charCodeAt(i++)]<<18)|(_13f[_140.charCodeAt(i++)]<<12)|(_13f[_140.charCodeAt(i++)]<<6)|(_13f[_140.charCodeAt(i++)]);
_143.push((bits&16711680)>>16);
_143.push((bits&65280)>>8);
_143.push(bits&255);
}
if(pad>0){
return _143.slice(0,-1*pad);
}
return _143;
};
CFData.encodeBase64Array=function(_144){
var pad=(3-(_144.length%3))%3,_145=_144.length+pad,_146=[];
if(pad>0){
_144.push(0);
}
if(pad>1){
_144.push(0);
}
var i=0;
while(i<_145){
var bits=(_144[i++]<<16)|(_144[i++]<<8)|(_144[i++]);
_146.push(_13e[(bits&16515072)>>18]);
_146.push(_13e[(bits&258048)>>12]);
_146.push(_13e[(bits&4032)>>6]);
_146.push(_13e[bits&63]);
}
if(pad>0){
_146[_146.length-1]="=";
_144.pop();
}
if(pad>1){
_146[_146.length-2]="=";
_144.pop();
}
return _146.join("");
};
CFData.decodeBase64ToString=function(_147,_148){
return CFData.bytesToString(CFData.decodeBase64ToArray(_147,_148));
};
CFData.decodeBase64ToUtf16String=function(_149,_14a){
return CFData.bytesToUtf16String(CFData.decodeBase64ToArray(_149,_14a));
};
CFData.bytesToString=function(_14b){
return String.fromCharCode.apply(NULL,_14b);
};
CFData.encodeBase64String=function(_14c){
var temp=[];
for(var i=0;i<_14c.length;i++){
temp.push(_14c.charCodeAt(i));
}
return CFData.encodeBase64Array(temp);
};
CFData.bytesToUtf16String=function(_14d){
var temp=[];
for(var i=0;i<_14d.length;i+=2){
temp.push(_14d[i+1]<<8|_14d[i]);
}
return String.fromCharCode.apply(NULL,temp);
};
CFData.encodeBase64Utf16String=function(_14e){
var temp=[];
for(var i=0;i<_14e.length;i++){
var c=_14e.charCodeAt(i);
temp.push(_14e.charCodeAt(i)&255);
temp.push((_14e.charCodeAt(i)&65280)>>8);
}
return CFData.encodeBase64Array(temp);
};
var _14f,_150,_151=0;
function _152(){
if(++_151!==1){
return;
}
_14f={};
_150={};
};
function _153(){
_151=MAX(_151-1,0);
if(_151!==0){
return;
}
delete _14f;
delete _150;
};
var _154=new RegExp("^"+"(?:"+"([^:/?#]+):"+")?"+"(?:"+"(//)"+"("+"(?:"+"("+"([^:@]*)"+":?"+"([^:@]*)"+")?"+"@"+")?"+"([^:/?#]*)"+"(?::(\\d*))?"+")"+")?"+"([^?#]*)"+"(?:\\?([^#]*))?"+"(?:#(.*))?");
var _155=["url","scheme","authorityRoot","authority","userInfo","user","password","domain","portNumber","path","queryString","fragment"];
function _156(aURL){
if(aURL._parts){
return aURL._parts;
}
var _157=aURL.string(),_158=_157.match(/^mhtml:/);
if(_158){
_157=_157.substr("mhtml:".length);
}
if(_151>0&&_7a.call(_150,_157)){
aURL._parts=_150[_157];
return aURL._parts;
}
aURL._parts={};
var _159=aURL._parts,_15a=_154.exec(_157),_95=_15a.length;
while(_95--){
_159[_155[_95]]=_15a[_95]||NULL;
}
_159.portNumber=parseInt(_159.portNumber,10);
if(isNaN(_159.portNumber)){
_159.portNumber=-1;
}
_159.pathComponents=[];
if(_159.path){
var _15b=_159.path.split("/"),_15c=_159.pathComponents,_95=0,_15d=_15b.length;
for(;_95<_15d;++_95){
var _15e=_15b[_95];
if(_15e){
_15c.push(_15e);
}else{
if(_95===0){
_15c.push("/");
}
}
}
_159.pathComponents=_15c;
}
if(_158){
_159.url="mhtml:"+_159.url;
_159.scheme="mhtml:"+_159.scheme;
}
if(_151>0){
_150[_157]=_159;
}
return _159;
};
CFURL=function(aURL,_15f){
aURL=aURL||"";
if(aURL instanceof CFURL){
if(!_15f){
return aURL;
}
var _160=aURL.baseURL();
if(_160){
_15f=new CFURL(_160.absoluteURL(),_15f);
}
aURL=aURL.string();
}
if(_151>0){
var _161=aURL+" "+(_15f&&_15f.UID()||"");
if(_7a.call(_14f,_161)){
return _14f[_161];
}
_14f[_161]=this;
}
if(aURL.match(/^data:/)){
var _162={},_95=_155.length;
while(_95--){
_162[_155[_95]]="";
}
_162.url=aURL;
_162.scheme="data";
_162.pathComponents=[];
this._parts=_162;
this._standardizedURL=this;
this._absoluteURL=this;
}
this._UID=objj_generateObjectUID();
this._string=aURL;
this._baseURL=_15f;
};
CFURL.prototype.UID=function(){
return this._UID;
};
var _163={};
CFURL.prototype.mappedURL=function(){
return _163[this.absoluteString()]||this;
};
CFURL.setMappedURLForURL=function(_164,_165){
_163[_164.absoluteString()]=_165;
};
CFURL.prototype.schemeAndAuthority=function(){
var _166="",_167=this.scheme();
if(_167){
_166+=_167+":";
}
var _168=this.authority();
if(_168){
_166+="//"+_168;
}
return _166;
};
CFURL.prototype.absoluteString=function(){
if(this._absoluteString===_46){
this._absoluteString=this.absoluteURL().string();
}
return this._absoluteString;
};
CFURL.prototype.toString=function(){
return this.absoluteString();
};
function _169(aURL){
aURL=aURL.standardizedURL();
var _16a=aURL.baseURL();
if(!_16a){
return aURL;
}
var _16b=((aURL)._parts||_156(aURL)),_16c,_16d=_16a.absoluteURL(),_16e=((_16d)._parts||_156(_16d));
if(_16b.scheme||_16b.authority){
_16c=_16b;
}else{
_16c={};
_16c.scheme=_16e.scheme;
_16c.authority=_16e.authority;
_16c.userInfo=_16e.userInfo;
_16c.user=_16e.user;
_16c.password=_16e.password;
_16c.domain=_16e.domain;
_16c.portNumber=_16e.portNumber;
_16c.queryString=_16b.queryString;
_16c.fragment=_16b.fragment;
var _16f=_16b.pathComponents;
if(_16f.length&&_16f[0]==="/"){
_16c.path=_16b.path;
_16c.pathComponents=_16f;
}else{
var _170=_16e.pathComponents,_171=_170.concat(_16f);
if(!_16a.hasDirectoryPath()&&_170.length){
_171.splice(_170.length-1,1);
}
if(_16f.length&&(_16f[0]===".."||_16f[0]===".")){
_172(_171,YES);
}
_16c.pathComponents=_171;
_16c.path=_173(_171,_16f.length<=0||aURL.hasDirectoryPath());
}
}
var _174=_175(_16c),_176=new CFURL(_174);
_176._parts=_16c;
_176._standardizedURL=_176;
_176._standardizedString=_174;
_176._absoluteURL=_176;
_176._absoluteString=_174;
return _176;
};
function _173(_177,_178){
var path=_177.join("/");
if(path.length&&path.charAt(0)==="/"){
path=path.substr(1);
}
if(_178){
path+="/";
}
return path;
};
function _172(_179,_17a){
var _17b=0,_17c=0,_17d=_179.length,_17e=_17a?_179:[],_17f=NO;
for(;_17b<_17d;++_17b){
var _180=_179[_17b];
if(_180===""){
continue;
}
if(_180==="."){
_17f=_17c===0;
continue;
}
if(_180!==".."||_17c===0||_17e[_17c-1]===".."){
_17e[_17c]=_180;
_17c++;
continue;
}
if(_17c>0&&_17e[_17c-1]!=="/"){
--_17c;
}
}
if(_17f&&_17c===0){
_17e[_17c++]=".";
}
_17e.length=_17c;
return _17e;
};
function _175(_181){
var _182="",_183=_181.scheme;
if(_183){
_182+=_183+":";
}
var _184=_181.authority;
if(_184){
_182+="//"+_184;
}
_182+=_181.path;
var _185=_181.queryString;
if(_185){
_182+="?"+_185;
}
var _186=_181.fragment;
if(_186){
_182+="#"+_186;
}
return _182;
};
CFURL.prototype.absoluteURL=function(){
if(this._absoluteURL===_46){
this._absoluteURL=_169(this);
}
return this._absoluteURL;
};
CFURL.prototype.standardizedURL=function(){
if(this._standardizedURL===_46){
var _187=((this)._parts||_156(this)),_188=_187.pathComponents,_189=_172(_188,NO);
var _18a=_173(_189,this.hasDirectoryPath());
if(_187.path===_18a){
this._standardizedURL=this;
}else{
var _18b=_18c(_187);
_18b.pathComponents=_189;
_18b.path=_18a;
var _18d=new CFURL(_175(_18b),this.baseURL());
_18d._parts=_18b;
_18d._standardizedURL=_18d;
this._standardizedURL=_18d;
}
}
return this._standardizedURL;
};
function _18c(_18e){
var _18f={},_190=_155.length;
while(_190--){
var _191=_155[_190];
_18f[_191]=_18e[_191];
}
return _18f;
};
CFURL.prototype.string=function(){
return this._string;
};
CFURL.prototype.authority=function(){
var _192=((this)._parts||_156(this)).authority;
if(_192){
return _192;
}
var _193=this.baseURL();
return _193&&_193.authority()||"";
};
CFURL.prototype.hasDirectoryPath=function(){
var _194=this._hasDirectoryPath;
if(_194===_46){
var path=this.path();
if(!path){
return NO;
}
if(path.charAt(path.length-1)==="/"){
return YES;
}
var _195=this.lastPathComponent();
_194=_195==="."||_195==="..";
this._hasDirectoryPath=_194;
}
return _194;
};
CFURL.prototype.hostName=function(){
return this.authority();
};
CFURL.prototype.fragment=function(){
return ((this)._parts||_156(this)).fragment;
};
CFURL.prototype.lastPathComponent=function(){
if(this._lastPathComponent===_46){
var _196=this.pathComponents(),_197=_196.length;
if(!_197){
this._lastPathComponent="";
}else{
this._lastPathComponent=_196[_197-1];
}
}
return this._lastPathComponent;
};
CFURL.prototype.path=function(){
return ((this)._parts||_156(this)).path;
};
CFURL.prototype.pathComponents=function(){
return ((this)._parts||_156(this)).pathComponents;
};
CFURL.prototype.pathExtension=function(){
var _198=this.lastPathComponent();
if(!_198){
return NULL;
}
_198=_198.replace(/^\.*/,"");
var _199=_198.lastIndexOf(".");
return _199<=0?"":_198.substring(_199+1);
};
CFURL.prototype.queryString=function(){
return ((this)._parts||_156(this)).queryString;
};
CFURL.prototype.scheme=function(){
var _19a=this._scheme;
if(_19a===_46){
_19a=((this)._parts||_156(this)).scheme;
if(!_19a){
var _19b=this.baseURL();
_19a=_19b&&_19b.scheme();
}
this._scheme=_19a;
}
return _19a;
};
CFURL.prototype.user=function(){
return ((this)._parts||_156(this)).user;
};
CFURL.prototype.password=function(){
return ((this)._parts||_156(this)).password;
};
CFURL.prototype.portNumber=function(){
return ((this)._parts||_156(this)).portNumber;
};
CFURL.prototype.domain=function(){
return ((this)._parts||_156(this)).domain;
};
CFURL.prototype.baseURL=function(){
return this._baseURL;
};
CFURL.prototype.asDirectoryPathURL=function(){
if(this.hasDirectoryPath()){
return this;
}
var _19c=this.lastPathComponent();
if(_19c!=="/"){
_19c="./"+_19c;
}
return new CFURL(_19c+"/",this);
};
function _19d(aURL){
if(!aURL._resourcePropertiesForKeys){
aURL._resourcePropertiesForKeys=new CFMutableDictionary();
}
return aURL._resourcePropertiesForKeys;
};
CFURL.prototype.resourcePropertyForKey=function(aKey){
return _19d(this).valueForKey(aKey);
};
CFURL.prototype.setResourcePropertyForKey=function(aKey,_19e){
_19d(this).setValueForKey(aKey,_19e);
};
CFURL.prototype.staticResourceData=function(){
var data=new CFMutableData();
data.setRawString(_19f.resourceAtURL(this).contents());
return data;
};
function _106(_1a0){
this._string=_1a0;
var _1a1=_1a0.indexOf(";");
this._magicNumber=_1a0.substr(0,_1a1);
this._location=_1a0.indexOf(";",++_1a1);
this._version=_1a0.substring(_1a1,this._location++);
};
_106.prototype.magicNumber=function(){
return this._magicNumber;
};
_106.prototype.version=function(){
return this._version;
};
_106.prototype.getMarker=function(){
var _1a2=this._string,_1a3=this._location;
if(_1a3>=_1a2.length){
return null;
}
var next=_1a2.indexOf(";",_1a3);
if(next<0){
return null;
}
var _1a4=_1a2.substring(_1a3,next);
if(_1a4==="e"){
return null;
}
this._location=next+1;
return _1a4;
};
_106.prototype.getString=function(){
var _1a5=this._string,_1a6=this._location;
if(_1a6>=_1a5.length){
return null;
}
var next=_1a5.indexOf(";",_1a6);
if(next<0){
return null;
}
var size=parseInt(_1a5.substring(_1a6,next),10),text=_1a5.substr(next+1,size);
this._location=next+1+size;
return text;
};
var _1a7=0,_1a8=1<<0,_1a9=1<<1,_1aa=1<<2,_1ab=1<<3,_1ac=1<<4;
var _1ad={},_1ae={},_1af=new Date().getTime(),_1b0=0,_1b1=0;
CFBundle=function(aURL){
aURL=_1b2(aURL).asDirectoryPathURL();
var _1b3=aURL.absoluteString(),_1b4=_1ad[_1b3];
if(_1b4){
return _1b4;
}
_1ad[_1b3]=this;
this._bundleURL=aURL;
this._resourcesDirectoryURL=new CFURL("Resources/",aURL);
this._staticResource=NULL;
this._isValid=NO;
this._loadStatus=_1a7;
this._loadRequests=[];
this._infoDictionary=new CFDictionary();
this._eventDispatcher=new _75(this);
};
CFBundle.environments=function(){
return ["Browser","ObjJ"];
};
CFBundle.bundleContainingURL=function(aURL){
aURL=new CFURL(".",_1b2(aURL));
var _1b5,_1b6=aURL.absoluteString();
while(!_1b5||_1b5!==_1b6){
var _1b7=_1ad[_1b6];
if(_1b7&&_1b7._isValid){
return _1b7;
}
aURL=new CFURL("..",aURL);
_1b5=_1b6;
_1b6=aURL.absoluteString();
}
return NULL;
};
CFBundle.mainBundle=function(){
return new CFBundle(_1b8);
};
function _1b9(_1ba,_1bb){
if(_1bb){
_1ae[_1ba.name]=_1bb;
}
};
CFBundle.bundleForClass=function(_1bc){
return _1ae[_1bc.name]||CFBundle.mainBundle();
};
CFBundle.prototype.bundleURL=function(){
return this._bundleURL;
};
CFBundle.prototype.resourcesDirectoryURL=function(){
return this._resourcesDirectoryURL;
};
CFBundle.prototype.resourceURL=function(_1bd,_1be,_1bf){
if(_1be){
_1bd=_1bd+"."+_1be;
}
if(_1bf){
_1bd=_1bf+"/"+_1bd;
}
var _1c0=(new CFURL(_1bd,this.resourcesDirectoryURL())).mappedURL();
return _1c0.absoluteURL();
};
CFBundle.prototype.mostEligibleEnvironmentURL=function(){
if(this._mostEligibleEnvironmentURL===_46){
this._mostEligibleEnvironmentURL=new CFURL(this.mostEligibleEnvironment()+".environment/",this.bundleURL());
}
return this._mostEligibleEnvironmentURL;
};
CFBundle.prototype.executableURL=function(){
if(this._executableURL===_46){
var _1c1=this.valueForInfoDictionaryKey("CPBundleExecutable");
if(!_1c1){
this._executableURL=NULL;
}else{
this._executableURL=new CFURL(_1c1,this.mostEligibleEnvironmentURL());
}
}
return this._executableURL;
};
CFBundle.prototype.infoDictionary=function(){
return this._infoDictionary;
};
CFBundle.prototype.valueForInfoDictionaryKey=function(aKey){
return this._infoDictionary.valueForKey(aKey);
};
CFBundle.prototype.hasSpritedImages=function(){
var _1c2=this._infoDictionary.valueForKey("CPBundleEnvironmentsWithImageSprites")||[],_95=_1c2.length,_1c3=this.mostEligibleEnvironment();
while(_95--){
if(_1c2[_95]===_1c3){
return YES;
}
}
return NO;
};
CFBundle.prototype.environments=function(){
return this._infoDictionary.valueForKey("CPBundleEnvironments")||["ObjJ"];
};
CFBundle.prototype.mostEligibleEnvironment=function(_1c4){
_1c4=_1c4||this.environments();
var _1c5=CFBundle.environments(),_95=0,_1c6=_1c5.length,_1c7=_1c4.length;
for(;_95<_1c6;++_95){
var _1c8=0,_1c9=_1c5[_95];
for(;_1c8<_1c7;++_1c8){
if(_1c9===_1c4[_1c8]){
return _1c9;
}
}
}
return NULL;
};
CFBundle.prototype.isLoading=function(){
return this._loadStatus&_1a8;
};
CFBundle.prototype.isLoaded=function(){
return this._loadStatus&_1ac;
};
CFBundle.prototype.load=function(_1ca){
if(this._loadStatus!==_1a7){
return;
}
this._loadStatus=_1a8|_1a9;
var self=this,_1cb=this.bundleURL(),_1cc=new CFURL("..",_1cb);
if(_1cc.absoluteString()===_1cb.absoluteString()){
_1cc=_1cc.schemeAndAuthority();
}
_19f.resolveResourceAtURL(_1cc,YES,function(_1cd){
var _1ce=_1cb.absoluteURL().lastPathComponent();
self._staticResource=_1cd._children[_1ce]||new _19f(_1cb,_1cd,YES,NO);
function _1cf(_1d0){
self._loadStatus&=~_1a9;
var _1d1=_1d0.request.responsePropertyList();
self._isValid=!!_1d1||CFBundle.mainBundle()===self;
if(_1d1){
self._infoDictionary=_1d1;
}
if(!self._infoDictionary){
_1d3(self,new Error("Could not load bundle at \""+path+"\""));
return;
}
if(self===CFBundle.mainBundle()&&self.valueForInfoDictionaryKey("CPApplicationSize")){
_1b1=self.valueForInfoDictionaryKey("CPApplicationSize").valueForKey("executable")||0;
}
_1d7(self,_1ca);
};
function _1d2(){
self._isValid=CFBundle.mainBundle()===self;
self._loadStatus=_1a7;
_1d3(self,new Error("Could not load bundle at \""+self.bundleURL()+"\""));
};
new _b1(new CFURL("Info.plist",self.bundleURL()),_1cf,_1d2);
});
};
function _1d3(_1d4,_1d5){
_1d6(_1d4._staticResource);
_1d4._eventDispatcher.dispatchEvent({type:"error",error:_1d5,bundle:_1d4});
};
function _1d7(_1d8,_1d9){
if(!_1d8.mostEligibleEnvironment()){
return _1da();
}
_1db(_1d8,_1dc,_1da);
_1dd(_1d8,_1dc,_1da);
if(_1d8._loadStatus===_1a8){
return _1dc();
}
function _1da(_1de){
var _1df=_1d8._loadRequests,_1e0=_1df.length;
while(_1e0--){
_1df[_1e0].abort();
}
this._loadRequests=[];
_1d8._loadStatus=_1a7;
_1d3(_1d8,_1de||new Error("Could not recognize executable code format in Bundle "+_1d8));
};
function _1dc(){
if((typeof CPApp==="undefined"||!CPApp||!CPApp._finishedLaunching)&&typeof OBJJ_PROGRESS_CALLBACK==="function"&&_1b1){
OBJJ_PROGRESS_CALLBACK(MAX(MIN(1,_1b0/_1b1),0),_1b1,_1d8.bundlePath());
}
if(_1d8._loadStatus===_1a8){
_1d8._loadStatus=_1ac;
}else{
return;
}
_1d6(_1d8._staticResource);
function _1e1(){
_1d8._eventDispatcher.dispatchEvent({type:"load",bundle:_1d8});
};
if(_1d9){
_1e2(_1d8,_1e1);
}else{
_1e1();
}
};
};
function _1db(_1e3,_1e4,_1e5){
var _1e6=_1e3.executableURL();
if(!_1e6){
return;
}
_1e3._loadStatus|=_1aa;
new _b1(_1e6,function(_1e7){
try{
_1b0+=_1e7.request.responseText().length;
_1e8(_1e3,_1e7.request.responseText(),_1e6);
_1e3._loadStatus&=~_1aa;
_1e4();
}
catch(anException){
_1e5(anException);
}
},_1e5);
};
function _1e9(_1ea){
return "mhtml:"+new CFURL("MHTMLTest.txt",_1ea.mostEligibleEnvironmentURL());
};
function _1eb(_1ec){
if(_1ed===_1ee){
return new CFURL("dataURLs.txt",_1ec.mostEligibleEnvironmentURL());
}
if(_1ed===_1ef||_1ed===_1f0){
return new CFURL("MHTMLPaths.txt",_1ec.mostEligibleEnvironmentURL());
}
return NULL;
};
function _1dd(_1f1,_1f2,_1f3){
if(!_1f1.hasSpritedImages()){
return;
}
_1f1._loadStatus|=_1ab;
if(!_1f4()){
return _1f5(_1e9(_1f1),function(){
_1dd(_1f1,_1f2,_1f3);
});
}
var _1f6=_1eb(_1f1);
if(!_1f6){
_1f1._loadStatus&=~_1ab;
return _1f2();
}
new _b1(_1f6,function(_1f7){
try{
_1b0+=_1f7.request.responseText().length;
_1e8(_1f1,_1f7.request.responseText(),_1f6);
_1f1._loadStatus&=~_1ab;
}
catch(anException){
_1f3(anException);
}
_1f2();
},_1f3);
};
var _1f8=[],_1ed=-1,_1f9=0,_1ee=1,_1ef=2,_1f0=3;
function _1f4(){
return _1ed!==-1;
};
function _1f5(_1fa,_1fb){
if(_1f4()){
return;
}
_1f8.push(_1fb);
if(_1f8.length>1){
return;
}
_1f8.push(function(){
var size=0,_1fc=CFBundle.mainBundle().valueForInfoDictionaryKey("CPApplicationSize");
if(!_1fc){
return;
}
switch(_1ed){
case _1ee:
size=_1fc.valueForKey("data");
break;
case _1ef:
case _1f0:
size=_1fc.valueForKey("mhtml");
break;
}
_1b1+=size;
});
_1fd([_1ee,"data:image/gif;base64,R0lGODlhAQABAIAAAMc9BQAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==",_1ef,_1fa+"!test",_1f0,_1fa+"?"+_1af+"!test"]);
};
function _1fe(){
var _1ff=_1f8.length;
while(_1ff--){
_1f8[_1ff]();
}
};
function _1fd(_200){
if(_200.length<2){
_1ed=_1f9;
_1fe();
return;
}
var _201=new Image();
_201.onload=function(){
if(_201.width===1&&_201.height===1){
_1ed=_200[0];
_1fe();
}else{
_201.onerror();
}
};
_201.onerror=function(){
_1fd(_200.slice(2));
};
_201.src=_200[1];
};
function _1e2(_202,_203){
var _204=[_202._staticResource];
function _205(_206){
for(;_206<_204.length;++_206){
var _207=_204[_206];
if(_207.isNotFound()){
continue;
}
if(_207.isFile()){
var _208=new _320(_207.URL());
if(_208.hasLoadedFileDependencies()){
_208.execute();
}else{
_208.loadFileDependencies(function(){
_205(_206);
});
return;
}
}else{
if(_207.URL().absoluteString()===_202.resourcesDirectoryURL().absoluteString()){
continue;
}
var _209=_207.children();
for(var name in _209){
if(_7a.call(_209,name)){
_204.push(_209[name]);
}
}
}
}
_203();
};
_205(0);
};
var _20a="@STATIC",_20b="p",_20c="u",_20d="c",_20e="t",_20f="I",_210="i";
function _1e8(_211,_212,_213){
var _214=new _106(_212);
if(_214.magicNumber()!==_20a){
throw new Error("Could not read static file: "+_213);
}
if(_214.version()!=="1.0"){
throw new Error("Could not read static file: "+_213);
}
var _215,_216=_211.bundleURL(),file=NULL;
while(_215=_214.getMarker()){
var text=_214.getString();
if(_215===_20b){
var _217=new CFURL(text,_216),_218=_19f.resourceAtURL(new CFURL(".",_217),YES);
file=new _19f(_217,_218,NO,YES);
}else{
if(_215===_20c){
var URL=new CFURL(text,_216),_219=_214.getString();
if(_219.indexOf("mhtml:")===0){
_219="mhtml:"+new CFURL(_219.substr("mhtml:".length),_216);
if(_1ed===_1f0){
var _21a=_219.indexOf("!"),_21b=_219.substring(0,_21a),_21c=_219.substring(_21a);
_219=_21b+"?"+_1af+_21c;
}
}
CFURL.setMappedURLForURL(URL,new CFURL(_219));
var _218=_19f.resourceAtURL(new CFURL(".",URL),YES);
new _19f(URL,_218,NO,YES);
}else{
if(_215===_20e){
file.write(text);
}
}
}
}
};
CFBundle.prototype.addEventListener=function(_21d,_21e){
this._eventDispatcher.addEventListener(_21d,_21e);
};
CFBundle.prototype.removeEventListener=function(_21f,_220){
this._eventDispatcher.removeEventListener(_21f,_220);
};
CFBundle.prototype.onerror=function(_221){
throw _221.error;
};
CFBundle.prototype.bundlePath=function(){
return this._bundleURL.absoluteURL().path();
};
CFBundle.prototype.path=function(){
CPLog.warn("CFBundle.prototype.path is deprecated, use CFBundle.prototype.bundlePath instead.");
return this.bundlePath.apply(this,arguments);
};
CFBundle.prototype.pathForResource=function(_222){
return this.resourceURL(_222).absoluteString();
};
var _223={};
function _19f(aURL,_224,_225,_226){
this._parent=_224;
this._eventDispatcher=new _75(this);
var name=aURL.absoluteURL().lastPathComponent()||aURL.schemeAndAuthority();
this._name=name;
this._URL=aURL;
this._isResolved=!!_226;
if(_225){
this._URL=this._URL.asDirectoryPathURL();
}
if(!_224){
_223[name]=this;
}
this._isDirectory=!!_225;
this._isNotFound=NO;
if(_224){
_224._children[name]=this;
}
if(_225){
this._children={};
}else{
this._contents="";
}
};
_19f.rootResources=function(){
return _223;
};
_2.StaticResource=_19f;
function _1d6(_227){
_227._isResolved=YES;
_227._eventDispatcher.dispatchEvent({type:"resolve",staticResource:_227});
};
_19f.prototype.resolve=function(){
if(this.isDirectory()){
var _228=new CFBundle(this.URL());
_228.onerror=function(){
};
_228.load(NO);
}else{
var self=this;
function _229(_22a){
self._contents=_22a.request.responseText();
_1d6(self);
};
function _22b(){
self._isNotFound=YES;
_1d6(self);
};
new _b1(this.URL(),_229,_22b);
}
};
_19f.prototype.name=function(){
return this._name;
};
_19f.prototype.URL=function(){
return this._URL;
};
_19f.prototype.contents=function(){
return this._contents;
};
_19f.prototype.children=function(){
return this._children;
};
_19f.prototype.parent=function(){
return this._parent;
};
_19f.prototype.isResolved=function(){
return this._isResolved;
};
_19f.prototype.write=function(_22c){
this._contents+=_22c;
};
function _22d(_22e){
var _22f=_22e.schemeAndAuthority(),_230=_223[_22f];
if(!_230){
_230=new _19f(new CFURL(_22f),NULL,YES,YES);
}
return _230;
};
_19f.resourceAtURL=function(aURL,_231){
aURL=_1b2(aURL).absoluteURL();
var _232=_22d(aURL),_233=aURL.pathComponents(),_95=0,_234=_233.length;
for(;_95<_234;++_95){
var name=_233[_95];
if(_7a.call(_232._children,name)){
_232=_232._children[name];
}else{
if(_231){
if(name!=="/"){
name="./"+name;
}
_232=new _19f(new CFURL(name,_232.URL()),_232,YES,YES);
}else{
throw new Error("Static Resource at "+aURL+" is not resolved (\""+name+"\")");
}
}
}
return _232;
};
_19f.prototype.resourceAtURL=function(aURL,_235){
return _19f.resourceAtURL(new CFURL(aURL,this.URL()),_235);
};
_19f.resolveResourceAtURL=function(aURL,_236,_237){
aURL=_1b2(aURL).absoluteURL();
_238(_22d(aURL),_236,aURL.pathComponents(),0,_237);
};
_19f.prototype.resolveResourceAtURL=function(aURL,_239,_23a){
_19f.resolveResourceAtURL(new CFURL(aURL,this.URL()).absoluteURL(),_239,_23a);
};
function _238(_23b,_23c,_23d,_23e,_23f){
var _240=_23d.length;
for(;_23e<_240;++_23e){
var name=_23d[_23e],_241=_7a.call(_23b._children,name)&&_23b._children[name];
if(!_241){
_241=new _19f(new CFURL(name,_23b.URL()),_23b,_23e+1<_240||_23c,NO);
_241.resolve();
}
if(!_241.isResolved()){
return _241.addEventListener("resolve",function(){
_238(_23b,_23c,_23d,_23e,_23f);
});
}
if(_241.isNotFound()){
return _23f(null,new Error("File not found: "+_23d.join("/")));
}
if((_23e+1<_240)&&_241.isFile()){
return _23f(null,new Error("File is not a directory: "+_23d.join("/")));
}
_23b=_241;
}
_23f(_23b);
};
function _242(aURL,_243,_244){
var _245=_19f.includeURLs(),_246=new CFURL(aURL,_245[_243]).absoluteURL();
_19f.resolveResourceAtURL(_246,NO,function(_247){
if(!_247){
if(_243+1<_245.length){
_242(aURL,_243+1,_244);
}else{
_244(NULL);
}
return;
}
_244(_247);
});
};
_19f.resolveResourceAtURLSearchingIncludeURLs=function(aURL,_248){
_242(aURL,0,_248);
};
_19f.prototype.addEventListener=function(_249,_24a){
this._eventDispatcher.addEventListener(_249,_24a);
};
_19f.prototype.removeEventListener=function(_24b,_24c){
this._eventDispatcher.removeEventListener(_24b,_24c);
};
_19f.prototype.isNotFound=function(){
return this._isNotFound;
};
_19f.prototype.isFile=function(){
return !this._isDirectory;
};
_19f.prototype.isDirectory=function(){
return this._isDirectory;
};
_19f.prototype.toString=function(_24d){
if(this.isNotFound()){
return "<file not found: "+this.name()+">";
}
var _24e=this.name();
if(this.isDirectory()){
var _24f=this._children;
for(var name in _24f){
if(_24f.hasOwnProperty(name)){
var _250=_24f[name];
if(_24d||!_250.isNotFound()){
_24e+="\n\t"+_24f[name].toString(_24d).split("\n").join("\n\t");
}
}
}
}
return _24e;
};
var _251=NULL;
_19f.includeURLs=function(){
if(_252){
return _252;
}
var _252=[];
if(!_1.OBJJ_INCLUDE_PATHS&&!_1.OBJJ_INCLUDE_URLS){
_252=["Frameworks","Frameworks/Debug"];
}else{
_252=(_1.OBJJ_INCLUDE_PATHS||[]).concat(_1.OBJJ_INCLUDE_URLS||[]);
}
var _253=_252.length;
while(_253--){
_252[_253]=new CFURL(_252[_253]).asDirectoryPathURL();
}
return _252;
};
var _254="accessors",_255="class",_256="end",_257="function",_258="implementation",_259="import",_25a="each",_25b="outlet",_25c="action",_25d="new",_25e="selector",_25f="super",_260="var",_261="in",_262="pragma",_263="mark",_264="=",_265="+",_266="-",_267=":",_268=",",_269=".",_26a="*",_26b=";",_26c="<",_26d="{",_26e="}",_26f=">",_270="[",_271="\"",_272="@",_273="#",_274="]",_275="?",_276="(",_277=")",_278=/^(?:(?:\s+$)|(?:\/(?:\/|\*)))/,_279=/^[+-]?\d+(([.]\d+)*([eE][+-]?\d+))?$/,_27a=/^[a-zA-Z_$](\w|$)*$/;
function _27b(_27c){
this._index=-1;
this._tokens=(_27c+"\n").match(/\/\/.*(\r|\n)?|\/\*(?:.|\n|\r)*?\*\/|\w+\b|[+-]?\d+(([.]\d+)*([eE][+-]?\d+))?|"[^"\\]*(\\[\s\S][^"\\]*)*"|'[^'\\]*(\\[\s\S][^'\\]*)*'|\s+|./g);
this._context=[];
return this;
};
_27b.prototype.push=function(){
this._context.push(this._index);
};
_27b.prototype.pop=function(){
this._index=this._context.pop();
};
_27b.prototype.peek=function(_27d){
if(_27d){
this.push();
var _27e=this.skip_whitespace();
this.pop();
return _27e;
}
return this._tokens[this._index+1];
};
_27b.prototype.next=function(){
return this._tokens[++this._index];
};
_27b.prototype.previous=function(){
return this._tokens[--this._index];
};
_27b.prototype.last=function(){
if(this._index<0){
return NULL;
}
return this._tokens[this._index-1];
};
_27b.prototype.skip_whitespace=function(_27f){
var _280;
if(_27f){
while((_280=this.previous())&&_278.test(_280)){
}
}else{
while((_280=this.next())&&_278.test(_280)){
}
}
return _280;
};
_2.Lexer=_27b;
function _281(){
this.atoms=[];
};
_281.prototype.toString=function(){
return this.atoms.join("");
};
_2.preprocess=function(_282,aURL,_283){
return new _284(_282,aURL,_283).executable();
};
_2.eval=function(_285){
return eval(_2.preprocess(_285).code());
};
var _284=function(_286,aURL,_287){
this._URL=new CFURL(aURL);
_286=_286.replace(/^#[^\n]+\n/,"\n");
this._currentSelector="";
this._currentClass="";
this._currentSuperClass="";
this._currentSuperMetaClass="";
this._buffer=new _281();
this._preprocessed=NULL;
this._dependencies=[];
this._tokens=new _27b(_286);
this._flags=_287;
this._classMethod=false;
this._executable=NULL;
this._classLookupTable={};
this._classVars={};
var _288=new objj_class();
for(var i in _288){
this._classVars[i]=1;
}
this.preprocess(this._tokens,this._buffer);
};
_284.prototype.setClassInfo=function(_289,_28a,_28b){
this._classLookupTable[_289]={superClassName:_28a,ivars:_28b};
};
_284.prototype.getClassInfo=function(_28c){
return this._classLookupTable[_28c];
};
_284.prototype.allIvarNamesForClassName=function(_28d){
var _28e={},_28f=this.getClassInfo(_28d);
while(_28f){
for(var i in _28f.ivars){
_28e[i]=1;
}
_28f=this.getClassInfo(_28f.superClassName);
}
return _28e;
};
_2.Preprocessor=_284;
_284.Flags={};
_284.Flags.IncludeDebugSymbols=1<<0;
_284.Flags.IncludeTypeSignatures=1<<1;
_284.prototype.executable=function(){
if(!this._executable){
this._executable=new _290(this._buffer.toString(),this._dependencies,this._URL);
}
return this._executable;
};
_284.prototype.accessors=function(_291){
var _292=_291.skip_whitespace(),_293={};
if(_292!=_276){
_291.previous();
return _293;
}
while((_292=_291.skip_whitespace())!=_277){
var name=_292,_294=true;
if(!/^\w+$/.test(name)){
throw new SyntaxError(this.error_message("*** @accessors attribute name not valid."));
}
if((_292=_291.skip_whitespace())==_264){
_294=_291.skip_whitespace();
if(!/^\w+$/.test(_294)){
throw new SyntaxError(this.error_message("*** @accessors attribute value not valid."));
}
if(name=="setter"){
if((_292=_291.next())!=_267){
throw new SyntaxError(this.error_message("*** @accessors setter attribute requires argument with \":\" at end of selector name."));
}
_294+=":";
}
_292=_291.skip_whitespace();
}
_293[name]=_294;
if(_292==_277){
break;
}
if(_292!=_268){
throw new SyntaxError(this.error_message("*** Expected ',' or ')' in @accessors attribute list."));
}
}
return _293;
};
_284.prototype.brackets=function(_295,_296){
var _297=[];
while(this.preprocess(_295,NULL,NULL,NULL,_297[_297.length]=[])){
}
if(_297[0].length===1){
_296.atoms[_296.atoms.length]="[";
_296.atoms[_296.atoms.length]=_297[0][0];
_296.atoms[_296.atoms.length]="]";
}else{
var _298=new _281();
if(_297[0][0].atoms[0]==_25f){
_296.atoms[_296.atoms.length]="objj_msgSendSuper(";
_296.atoms[_296.atoms.length]="{ receiver:self, super_class:"+(this._classMethod?this._currentSuperMetaClass:this._currentSuperClass)+" }";
}else{
_296.atoms[_296.atoms.length]="objj_msgSend(";
_296.atoms[_296.atoms.length]=_297[0][0];
}
_298.atoms[_298.atoms.length]=_297[0][1];
var _299=1,_29a=_297.length,_29b=new _281();
for(;_299<_29a;++_299){
var pair=_297[_299];
_298.atoms[_298.atoms.length]=pair[1];
_29b.atoms[_29b.atoms.length]=", "+pair[0];
}
_296.atoms[_296.atoms.length]=", \"";
_296.atoms[_296.atoms.length]=_298;
_296.atoms[_296.atoms.length]="\"";
_296.atoms[_296.atoms.length]=_29b;
_296.atoms[_296.atoms.length]=")";
}
};
_284.prototype.directive=function(_29c,_29d,_29e){
var _29f=_29d?_29d:new _281(),_2a0=_29c.next();
if(_2a0.charAt(0)==_271){
_29f.atoms[_29f.atoms.length]=_2a0;
}else{
if(_2a0===_255){
_29c.skip_whitespace();
return;
}else{
if(_2a0===_258){
this.implementation(_29c,_29f);
}else{
if(_2a0===_259){
this._import(_29c);
}else{
if(_2a0===_25e){
this.selector(_29c,_29f);
}
}
}
}
}
if(!_29d){
return _29f;
}
};
_284.prototype.hash=function(_2a1,_2a2){
var _2a3=_2a2?_2a2:new _281(),_2a4=_2a1.next();
if(_2a4===_262){
_2a4=_2a1.skip_whitespace();
if(_2a4===_263){
while((_2a4=_2a1.next()).indexOf("\n")<0){
}
}
}else{
throw new SyntaxError(this.error_message("*** Expected \"pragma\" to follow # but instead saw \""+_2a4+"\"."));
}
};
_284.prototype.implementation=function(_2a5,_2a6){
var _2a7=_2a6,_2a8="",_2a9=NO,_2aa=_2a5.skip_whitespace(),_2ab="Nil",_2ac=new _281(),_2ad=new _281();
if(!(/^\w/).test(_2aa)){
throw new Error(this.error_message("*** Expected class name, found \""+_2aa+"\"."));
}
this._currentSuperClass="objj_getClass(\""+_2aa+"\").super_class";
this._currentSuperMetaClass="objj_getMetaClass(\""+_2aa+"\").super_class";
this._currentClass=_2aa;
this._currentSelector="";
if((_2a8=_2a5.skip_whitespace())==_276){
_2a8=_2a5.skip_whitespace();
if(_2a8==_277){
throw new SyntaxError(this.error_message("*** Can't Have Empty Category Name for class \""+_2aa+"\"."));
}
if(_2a5.skip_whitespace()!=_277){
throw new SyntaxError(this.error_message("*** Improper Category Definition for class \""+_2aa+"\"."));
}
_2a7.atoms[_2a7.atoms.length]="{\nvar the_class = objj_getClass(\""+_2aa+"\")\n";
_2a7.atoms[_2a7.atoms.length]="if(!the_class) throw new SyntaxError(\"*** Could not find definition for class \\\""+_2aa+"\\\"\");\n";
_2a7.atoms[_2a7.atoms.length]="var meta_class = the_class.isa;";
}else{
if(_2a8==_267){
_2a8=_2a5.skip_whitespace();
if(!_27a.test(_2a8)){
throw new SyntaxError(this.error_message("*** Expected class name, found \""+_2a8+"\"."));
}
_2ab=_2a8;
_2a8=_2a5.skip_whitespace();
}
_2a7.atoms[_2a7.atoms.length]="{var the_class = objj_allocateClassPair("+_2ab+", \""+_2aa+"\"),\nmeta_class = the_class.isa;";
if(_2a8==_26d){
var _2ae={},_2af=0,_2b0=[],_2b1,_2b2={};
while((_2a8=_2a5.skip_whitespace())&&_2a8!=_26e){
if(_2a8===_272){
_2a8=_2a5.next();
if(_2a8===_254){
_2b1=this.accessors(_2a5);
}else{
if(_2a8!==_25b){
throw new SyntaxError(this.error_message("*** Unexpected '@' token in ivar declaration ('@"+_2a8+"')."));
}
}
}else{
if(_2a8==_26b){
if(_2af++===0){
_2a7.atoms[_2a7.atoms.length]="class_addIvars(the_class, [";
}else{
_2a7.atoms[_2a7.atoms.length]=", ";
}
var name=_2b0[_2b0.length-1];
_2a7.atoms[_2a7.atoms.length]="new objj_ivar(\""+name+"\")";
_2ae[name]=1;
_2b0=[];
if(_2b1){
_2b2[name]=_2b1;
_2b1=NULL;
}
}else{
_2b0.push(_2a8);
}
}
}
if(_2b0.length){
throw new SyntaxError(this.error_message("*** Expected ';' in ivar declaration, found '}'."));
}
if(_2af){
_2a7.atoms[_2a7.atoms.length]="]);\n";
}
if(!_2a8){
throw new SyntaxError(this.error_message("*** Expected '}'"));
}
this.setClassInfo(_2aa,_2ab==="Nil"?null:_2ab,_2ae);
var _2ae=this.allIvarNamesForClassName(_2aa);
for(ivar_name in _2b2){
var _2b3=_2b2[ivar_name],_2b4=_2b3["property"]||ivar_name;
var _2b5=_2b3["getter"]||_2b4,_2b6="(id)"+_2b5+"\n{\nreturn "+ivar_name+";\n}";
if(_2ac.atoms.length!==0){
_2ac.atoms[_2ac.atoms.length]=",\n";
}
_2ac.atoms[_2ac.atoms.length]=this.method(new _27b(_2b6),_2ae);
if(_2b3["readonly"]){
continue;
}
var _2b7=_2b3["setter"];
if(!_2b7){
var _2b8=_2b4.charAt(0)=="_"?1:0;
_2b7=(_2b8?"_":"")+"set"+_2b4.substr(_2b8,1).toUpperCase()+_2b4.substring(_2b8+1)+":";
}
var _2b9="(void)"+_2b7+"(id)newValue\n{\n";
if(_2b3["copy"]){
_2b9+="if ("+ivar_name+" !== newValue)\n"+ivar_name+" = [newValue copy];\n}";
}else{
_2b9+=ivar_name+" = newValue;\n}";
}
if(_2ac.atoms.length!==0){
_2ac.atoms[_2ac.atoms.length]=",\n";
}
_2ac.atoms[_2ac.atoms.length]=this.method(new _27b(_2b9),_2ae);
}
}else{
_2a5.previous();
}
_2a7.atoms[_2a7.atoms.length]="objj_registerClassPair(the_class);\n";
}
if(!_2ae){
var _2ae=this.allIvarNamesForClassName(_2aa);
}
while((_2a8=_2a5.skip_whitespace())){
if(_2a8==_265){
this._classMethod=true;
if(_2ad.atoms.length!==0){
_2ad.atoms[_2ad.atoms.length]=", ";
}
_2ad.atoms[_2ad.atoms.length]=this.method(_2a5,this._classVars);
}else{
if(_2a8==_266){
this._classMethod=false;
if(_2ac.atoms.length!==0){
_2ac.atoms[_2ac.atoms.length]=", ";
}
_2ac.atoms[_2ac.atoms.length]=this.method(_2a5,_2ae);
}else{
if(_2a8==_273){
this.hash(_2a5,_2a7);
}else{
if(_2a8==_272){
if((_2a8=_2a5.next())==_256){
break;
}else{
throw new SyntaxError(this.error_message("*** Expected \"@end\", found \"@"+_2a8+"\"."));
}
}
}
}
}
}
if(_2ac.atoms.length!==0){
_2a7.atoms[_2a7.atoms.length]="class_addMethods(the_class, [";
_2a7.atoms[_2a7.atoms.length]=_2ac;
_2a7.atoms[_2a7.atoms.length]="]);\n";
}
if(_2ad.atoms.length!==0){
_2a7.atoms[_2a7.atoms.length]="class_addMethods(meta_class, [";
_2a7.atoms[_2a7.atoms.length]=_2ad;
_2a7.atoms[_2a7.atoms.length]="]);\n";
}
_2a7.atoms[_2a7.atoms.length]="}";
this._currentClass="";
};
_284.prototype._import=function(_2ba){
var _2bb="",_2bc=_2ba.skip_whitespace(),_2bd=(_2bc!==_26c);
if(_2bc===_26c){
while((_2bc=_2ba.next())&&_2bc!==_26f){
_2bb+=_2bc;
}
if(!_2bc){
throw new SyntaxError(this.error_message("*** Unterminated import statement."));
}
}else{
if(_2bc.charAt(0)===_271){
_2bb=_2bc.substr(1,_2bc.length-2);
}else{
throw new SyntaxError(this.error_message("*** Expecting '<' or '\"', found \""+_2bc+"\"."));
}
}
this._buffer.atoms[this._buffer.atoms.length]="objj_executeFile(\"";
this._buffer.atoms[this._buffer.atoms.length]=_2bb;
this._buffer.atoms[this._buffer.atoms.length]=_2bd?"\", YES);":"\", NO);";
this._dependencies.push(new _2be(new CFURL(_2bb),_2bd));
};
_284.prototype.method=function(_2bf,_2c0){
var _2c1=new _281(),_2c2,_2c3="",_2c4=[],_2c5=[null];
_2c0=_2c0||{};
while((_2c2=_2bf.skip_whitespace())&&_2c2!==_26d&&_2c2!==_26b){
if(_2c2==_267){
var type="";
_2c3+=_2c2;
_2c2=_2bf.skip_whitespace();
if(_2c2==_276){
while((_2c2=_2bf.skip_whitespace())&&_2c2!=_277){
type+=_2c2;
}
_2c2=_2bf.skip_whitespace();
}
_2c5[_2c4.length+1]=type||null;
_2c4[_2c4.length]=_2c2;
if(_2c2 in _2c0){
throw new SyntaxError(this.error_message("*** Method ( "+_2c3+" ) uses a parameter name that is already in use ( "+_2c2+" )"));
}
}else{
if(_2c2==_276){
var type="";
while((_2c2=_2bf.skip_whitespace())&&_2c2!=_277){
type+=_2c2;
}
_2c5[0]=type||null;
}else{
if(_2c2==_268){
if((_2c2=_2bf.skip_whitespace())!=_269||_2bf.next()!=_269||_2bf.next()!=_269){
throw new SyntaxError(this.error_message("*** Argument list expected after ','."));
}
}else{
_2c3+=_2c2;
}
}
}
}
if(_2c2===_26b){
_2c2=_2bf.skip_whitespace();
if(_2c2!==_26d){
throw new SyntaxError(this.error_message("Invalid semi-colon in method declaration. "+"Semi-colons are allowed only to terminate the method signature, before the open brace."));
}
}
var _2c6=0,_2c7=_2c4.length;
_2c1.atoms[_2c1.atoms.length]="new objj_method(sel_getUid(\"";
_2c1.atoms[_2c1.atoms.length]=_2c3;
_2c1.atoms[_2c1.atoms.length]="\"), function";
this._currentSelector=_2c3;
if(this._flags&_284.Flags.IncludeDebugSymbols){
_2c1.atoms[_2c1.atoms.length]=" $"+this._currentClass+"__"+_2c3.replace(/:/g,"_");
}
_2c1.atoms[_2c1.atoms.length]="(self, _cmd";
for(;_2c6<_2c7;++_2c6){
_2c1.atoms[_2c1.atoms.length]=", ";
_2c1.atoms[_2c1.atoms.length]=_2c4[_2c6];
}
_2c1.atoms[_2c1.atoms.length]=")\n{ with(self)\n{";
_2c1.atoms[_2c1.atoms.length]=this.preprocess(_2bf,NULL,_26e,_26d);
_2c1.atoms[_2c1.atoms.length]="}\n}";
if(this._flags&_284.Flags.IncludeDebugSymbols){
_2c1.atoms[_2c1.atoms.length]=","+JSON.stringify(_2c5);
}
_2c1.atoms[_2c1.atoms.length]=")";
this._currentSelector="";
return _2c1;
};
_284.prototype.preprocess=function(_2c8,_2c9,_2ca,_2cb,_2cc){
var _2cd=_2c9?_2c9:new _281(),_2ce=0,_2cf="";
if(_2cc){
_2cc[0]=_2cd;
var _2d0=false,_2d1=[0,0,0];
}
while((_2cf=_2c8.next())&&((_2cf!==_2ca)||_2ce)){
if(_2cc){
if(_2cf===_275){
++_2d1[2];
}else{
if(_2cf===_26d){
++_2d1[0];
}else{
if(_2cf===_26e){
--_2d1[0];
}else{
if(_2cf===_276){
++_2d1[1];
}else{
if(_2cf===_277){
--_2d1[1];
}else{
if((_2cf===_267&&_2d1[2]--===0||(_2d0=(_2cf===_274)))&&_2d1[0]===0&&_2d1[1]===0){
_2c8.push();
var _2d2=_2d0?_2c8.skip_whitespace(true):_2c8.previous(),_2d3=_278.test(_2d2);
if(_2d3||_27a.test(_2d2)&&_278.test(_2c8.previous())){
_2c8.push();
var last=_2c8.skip_whitespace(true),_2d4=true,_2d5=false;
if(last==="+"||last==="-"){
if(_2c8.previous()!==last){
_2d4=false;
}else{
last=_2c8.skip_whitespace(true);
_2d5=true;
}
}
_2c8.pop();
_2c8.pop();
if(_2d4&&((!_2d5&&(last===_26e))||last===_277||last===_274||last===_269||_279.test(last)||last.charAt(last.length-1)==="\""||last.charAt(last.length-1)==="'"||_27a.test(last)&&!/^(new|return|case|var)$/.test(last))){
if(_2d3){
_2cc[1]=":";
}else{
_2cc[1]=_2d2;
if(!_2d0){
_2cc[1]+=":";
}
var _2ce=_2cd.atoms.length;
while(_2cd.atoms[_2ce--]!==_2d2){
}
_2cd.atoms.length=_2ce;
}
return !_2d0;
}
if(_2d0){
return NO;
}
}
_2c8.pop();
if(_2d0){
return NO;
}
}
}
}
}
}
}
_2d1[2]=MAX(_2d1[2],0);
}
if(_2cb){
if(_2cf===_2cb){
++_2ce;
}else{
if(_2cf===_2ca){
--_2ce;
}
}
}
if(_2cf===_257){
var _2d6="";
while((_2cf=_2c8.next())&&_2cf!==_276&&!(/^\w/).test(_2cf)){
_2d6+=_2cf;
}
if(_2cf===_276){
if(_2cb===_276){
++_2ce;
}
_2cd.atoms[_2cd.atoms.length]="function"+_2d6+"(";
if(_2cc){
++_2d1[1];
}
}else{
_2cd.atoms[_2cd.atoms.length]=_2cf+"= function";
}
}else{
if(_2cf==_272){
this.directive(_2c8,_2cd);
}else{
if(_2cf==_273){
this.hash(_2c8,_2cd);
}else{
if(_2cf==_270){
this.brackets(_2c8,_2cd);
}else{
_2cd.atoms[_2cd.atoms.length]=_2cf;
}
}
}
}
}
if(_2cc){
throw new SyntaxError(this.error_message("*** Expected ']' - Unterminated message send or array."));
}
if(!_2c9){
return _2cd;
}
};
_284.prototype.selector=function(_2d7,_2d8){
var _2d9=_2d8?_2d8:new _281();
_2d9.atoms[_2d9.atoms.length]="sel_getUid(\"";
if(_2d7.skip_whitespace()!=_276){
throw new SyntaxError(this.error_message("*** Expected '('"));
}
var _2da=_2d7.skip_whitespace();
if(_2da==_277){
throw new SyntaxError(this.error_message("*** Unexpected ')', can't have empty @selector()"));
}
_2d8.atoms[_2d8.atoms.length]=_2da;
var _2db,_2dc=true;
while((_2db=_2d7.next())&&_2db!=_277){
if(_2dc&&/^\d+$/.test(_2db)||!(/^(\w|$|\:)/.test(_2db))){
if(!(/\S/).test(_2db)){
if(_2d7.skip_whitespace()==_277){
break;
}else{
throw new SyntaxError(this.error_message("*** Unexpected whitespace in @selector()."));
}
}else{
throw new SyntaxError(this.error_message("*** Illegal character '"+_2db+"' in @selector()."));
}
}
_2d9.atoms[_2d9.atoms.length]=_2db;
_2dc=(_2db==_267);
}
_2d9.atoms[_2d9.atoms.length]="\")";
if(!_2d8){
return _2d9;
}
};
_284.prototype.error_message=function(_2dd){
return _2dd+" <Context File: "+this._URL+(this._currentClass?" Class: "+this._currentClass:"")+(this._currentSelector?" Method: "+this._currentSelector:"")+">";
};
function _2be(aURL,_2de){
this._URL=aURL;
this._isLocal=_2de;
};
_2.FileDependency=_2be;
_2be.prototype.URL=function(){
return this._URL;
};
_2be.prototype.isLocal=function(){
return this._isLocal;
};
_2be.prototype.toMarkedString=function(){
var _2df=this.URL().absoluteString();
return (this.isLocal()?_210:_20f)+";"+_2df.length+";"+_2df;
};
_2be.prototype.toString=function(){
return (this.isLocal()?"LOCAL: ":"STD: ")+this.URL();
};
var _2e0=0,_2e1=1,_2e2=2,_2e3=0;
function _290(_2e4,_2e5,aURL,_2e6){
if(arguments.length===0){
return this;
}
this._code=_2e4;
this._function=_2e6||NULL;
this._URL=_1b2(aURL||new CFURL("(Anonymous"+(_2e3++)+")"));
this._fileDependencies=_2e5;
if(_2e5.length){
this._fileDependencyStatus=_2e0;
this._fileDependencyCallbacks=[];
}else{
this._fileDependencyStatus=_2e2;
}
if(this._function){
return;
}
this.setCode(_2e4);
};
_2.Executable=_290;
_290.prototype.path=function(){
return this.URL().path();
};
_290.prototype.URL=function(){
return this._URL;
};
_290.prototype.functionParameters=function(){
var _2e7=["global","objj_executeFile","objj_importFile"];
return _2e7;
};
_290.prototype.functionArguments=function(){
var _2e8=[_1,this.fileExecuter(),this.fileImporter()];
return _2e8;
};
_290.prototype.execute=function(){
var _2e9=_2ea;
_2ea=CFBundle.bundleContainingURL(this.URL());
var _2eb=this._function.apply(_1,this.functionArguments());
_2ea=_2e9;
return _2eb;
};
_290.prototype.code=function(){
return this._code;
};
_290.prototype.setCode=function(code){
this._code=code;
var _2ec=this.functionParameters().join(",");
this._function=new Function(_2ec,code);
};
_290.prototype.fileDependencies=function(){
return this._fileDependencies;
};
_290.prototype.hasLoadedFileDependencies=function(){
return this._fileDependencyStatus===_2e2;
};
var _2ed=0,_2ee=[],_2ef={};
_290.prototype.loadFileDependencies=function(_2f0){
var _2f1=this._fileDependencyStatus;
if(_2f0){
if(_2f1===_2e2){
return _2f0();
}
this._fileDependencyCallbacks.push(_2f0);
}
if(_2f1===_2e0){
if(_2ed){
throw "Can't load";
}
_2f2(this);
}
};
function _2f2(_2f3){
_2ee.push(_2f3);
_2f3._fileDependencyStatus=_2e1;
var _2f4=_2f3.fileDependencies(),_95=0,_2f5=_2f4.length,_2f6=_2f3.referenceURL(),_2f7=_2f6.absoluteString(),_2f8=_2f3.fileExecutableSearcher();
_2ed+=_2f5;
for(;_95<_2f5;++_95){
var _2f9=_2f4[_95],_2fa=_2f9.isLocal(),URL=_2f9.URL(),_2fb=(_2fa&&(_2f7+" ")||"")+URL;
if(_2ef[_2fb]){
if(--_2ed===0){
_2fc();
}
continue;
}
_2ef[_2fb]=YES;
_2f8(URL,_2fa,_2fd);
}
};
function _2fd(_2fe){
--_2ed;
if(_2fe._fileDependencyStatus===_2e0){
_2f2(_2fe);
}else{
if(_2ed===0){
_2fc();
}
}
};
function _2fc(){
var _2ff=_2ee,_95=0,_300=_2ff.length;
_2ee=[];
for(;_95<_300;++_95){
_2ff[_95]._fileDependencyStatus=_2e2;
}
for(_95=0;_95<_300;++_95){
var _301=_2ff[_95],_302=_301._fileDependencyCallbacks,_303=0,_304=_302.length;
for(;_303<_304;++_303){
_302[_303]();
}
_301._fileDependencyCallbacks=[];
}
};
_290.prototype.referenceURL=function(){
if(this._referenceURL===_46){
this._referenceURL=new CFURL(".",this.URL());
}
return this._referenceURL;
};
_290.prototype.fileImporter=function(){
return _290.fileImporterForURL(this.referenceURL());
};
_290.prototype.fileExecuter=function(){
return _290.fileExecuterForURL(this.referenceURL());
};
_290.prototype.fileExecutableSearcher=function(){
return _290.fileExecutableSearcherForURL(this.referenceURL());
};
var _305={};
_290.fileExecuterForURL=function(aURL){
var _306=_1b2(aURL),_307=_306.absoluteString(),_308=_305[_307];
if(!_308){
_308=function(aURL,_309,_30a){
_290.fileExecutableSearcherForURL(_306)(aURL,_309,function(_30b){
if(!_30b.hasLoadedFileDependencies()){
throw "No executable loaded for file at URL "+aURL;
}
_30b.execute(_30a);
});
};
_305[_307]=_308;
}
return _308;
};
var _30c={};
_290.fileImporterForURL=function(aURL){
var _30d=_1b2(aURL),_30e=_30d.absoluteString(),_30f=_30c[_30e];
if(!_30f){
_30f=function(aURL,_310,_311){
_152();
_290.fileExecutableSearcherForURL(_30d)(aURL,_310,function(_312){
_312.loadFileDependencies(function(){
_312.execute();
_153();
if(_311){
_311();
}
});
});
};
_30c[_30e]=_30f;
}
return _30f;
};
var _313={},_314={};
_290.fileExecutableSearcherForURL=function(_315){
var _316=_315.absoluteString(),_317=_313[_316],_318={};
if(!_317){
_317=function(aURL,_319,_31a){
var _31b=(_319&&_315||"")+aURL,_31c=_314[_31b];
if(_31c){
return _31d(_31c);
}
var _31e=(aURL instanceof CFURL)&&aURL.scheme();
if(_319||_31e){
if(!_31e){
aURL=new CFURL(aURL,_315);
}
_19f.resolveResourceAtURL(aURL,NO,_31d);
}else{
_19f.resolveResourceAtURLSearchingIncludeURLs(aURL,_31d);
}
function _31d(_31f){
if(!_31f){
throw new Error("Could not load file at "+aURL);
}
_314[_31b]=_31f;
_31a(new _320(_31f.URL()));
};
};
_313[_316]=_317;
}
return _317;
};
var _321={};
function _320(aURL){
aURL=_1b2(aURL);
var _322=aURL.absoluteString(),_323=_321[_322];
if(_323){
return _323;
}
_321[_322]=this;
var _324=_19f.resourceAtURL(aURL).contents(),_325=NULL,_326=aURL.pathExtension();
if(_324.match(/^@STATIC;/)){
_325=_327(_324,aURL);
}else{
if(_326==="j"||!_326){
_325=_2.preprocess(_324,aURL,_284.Flags.IncludeDebugSymbols);
}else{
_325=new _290(_324,[],aURL);
}
}
_290.apply(this,[_325.code(),_325.fileDependencies(),aURL,_325._function]);
this._hasExecuted=NO;
};
_2.FileExecutable=_320;
_320.prototype=new _290();
_320.prototype.execute=function(_328){
if(this._hasExecuted&&!_328){
return;
}
this._hasExecuted=YES;
_290.prototype.execute.call(this);
};
_320.prototype.hasExecuted=function(){
return this._hasExecuted;
};
function _327(_329,aURL){
var _32a=new _106(_329);
var _32b=NULL,code="",_32c=[];
while(_32b=_32a.getMarker()){
var text=_32a.getString();
if(_32b===_20e){
code+=text;
}else{
if(_32b===_20f){
_32c.push(new _2be(new CFURL(text),NO));
}else{
if(_32b===_210){
_32c.push(new _2be(new CFURL(text),YES));
}
}
}
}
var fn=_320._lookupCachedFunction(aURL);
if(fn){
return new _290(code,_32c,aURL,fn);
}
return new _290(code,_32c,aURL);
};
var _32d={};
_320._cacheFunction=function(aURL,fn){
aURL=typeof aURL==="string"?aURL:aURL.absoluteString();
_32d[aURL]=fn;
};
_320._lookupCachedFunction=function(aURL){
aURL=typeof aURL==="string"?aURL:aURL.absoluteString();
return _32d[aURL];
};
var _32e=1,_32f=2,_330=4,_331=8;
objj_ivar=function(_332,_333){
this.name=_332;
this.type=_333;
};
objj_method=function(_334,_335,_336){
this.name=_334;
this.method_imp=_335;
this.types=_336;
};
objj_class=function(_337){
this.isa=NULL;
this.super_class=NULL;
this.sub_classes=[];
this.name=NULL;
this.info=0;
this.ivars=[];
this.method_list=[];
this.method_hash={};
this.method_store=function(){
};
this.method_dtable=this.method_store.prototype;
this.allocator=function(){
};
this._UID=-1;
};
objj_object=function(){
this.isa=NULL;
this._UID=-1;
};
class_getName=function(_338){
if(_338==Nil){
return "";
}
return _338.name;
};
class_isMetaClass=function(_339){
if(!_339){
return NO;
}
return ((_339.info&(_32f)));
};
class_getSuperclass=function(_33a){
if(_33a==Nil){
return Nil;
}
return _33a.super_class;
};
class_setSuperclass=function(_33b,_33c){
_33b.super_class=_33c;
_33b.isa.super_class=_33c.isa;
};
class_addIvar=function(_33d,_33e,_33f){
var _340=_33d.allocator.prototype;
if(typeof _340[_33e]!="undefined"){
return NO;
}
_33d.ivars.push(new objj_ivar(_33e,_33f));
_340[_33e]=NULL;
return YES;
};
class_addIvars=function(_341,_342){
var _343=0,_344=_342.length,_345=_341.allocator.prototype;
for(;_343<_344;++_343){
var ivar=_342[_343],name=ivar.name;
if(typeof _345[name]==="undefined"){
_341.ivars.push(ivar);
_345[name]=NULL;
}
}
};
class_copyIvarList=function(_346){
return _346.ivars.slice(0);
};
class_addMethod=function(_347,_348,_349,_34a){
if(_347.method_hash[_348]){
return NO;
}
var _34b=new objj_method(_348,_349,_34a);
_347.method_list.push(_34b);
_347.method_dtable[_348]=_34b;
if(!((_347.info&(_32f)))&&(((_347.info&(_32f)))?_347:_347.isa).isa===(((_347.info&(_32f)))?_347:_347.isa)){
class_addMethod((((_347.info&(_32f)))?_347:_347.isa),_348,_349,_34a);
}
return YES;
};
class_addMethods=function(_34c,_34d){
var _34e=0,_34f=_34d.length,_350=_34c.method_list,_351=_34c.method_dtable;
for(;_34e<_34f;++_34e){
var _352=_34d[_34e];
if(_34c.method_hash[_352.name]){
continue;
}
_350.push(_352);
_351[_352.name]=_352;
}
if(!((_34c.info&(_32f)))&&(((_34c.info&(_32f)))?_34c:_34c.isa).isa===(((_34c.info&(_32f)))?_34c:_34c.isa)){
class_addMethods((((_34c.info&(_32f)))?_34c:_34c.isa),_34d);
}
};
class_getInstanceMethod=function(_353,_354){
if(!_353||!_354){
return NULL;
}
var _355=_353.method_dtable[_354];
return _355?_355:NULL;
};
class_getClassMethod=function(_356,_357){
if(!_356||!_357){
return NULL;
}
var _358=(((_356.info&(_32f)))?_356:_356.isa).method_dtable[_357];
return _358?_358:NULL;
};
class_respondsToSelector=function(_359,_35a){
return class_getClassMethod(_359,_35a)!=NULL;
};
class_copyMethodList=function(_35b){
return _35b.method_list.slice(0);
};
class_replaceMethod=function(_35c,_35d,_35e){
if(!_35c||!_35d){
return NULL;
}
var _35f=_35c.method_dtable[_35d],_360=NULL;
if(_35f){
_360=_35f.method_imp;
}
_35f.method_imp=_35e;
return _360;
};
var _361=function(_362){
var meta=(((_362.info&(_32f)))?_362:_362.isa);
if((_362.info&(_32f))){
_362=objj_getClass(_362.name);
}
if(_362.super_class&&!((((_362.super_class.info&(_32f)))?_362.super_class:_362.super_class.isa).info&(_330))){
_361(_362.super_class);
}
if(!(meta.info&(_330))&&!(meta.info&(_331))){
meta.info=(meta.info|(_331))&~(0);
objj_msgSend(_362,"initialize");
meta.info=(meta.info|(_330))&~(_331);
}
};
var _363=new objj_method("forward",function(self,_364){
return objj_msgSend(self,"forward::",_364,arguments);
});
class_getMethodImplementation=function(_365,_366){
if(!((((_365.info&(_32f)))?_365:_365.isa).info&(_330))){
_361(_365);
}
var _367=_365.method_dtable[_366];
if(!_367){
_367=_363;
}
var _368=_367.method_imp;
return _368;
};
var _369={};
objj_allocateClassPair=function(_36a,_36b){
var _36c=new objj_class(_36b),_36d=new objj_class(_36b),_36e=_36c;
if(_36a){
_36e=_36a;
while(_36e.superclass){
_36e=_36e.superclass;
}
_36c.allocator.prototype=new _36a.allocator;
_36c.method_store.prototype=new _36a.method_store;
_36c.method_dtable=_36c.method_store.prototype;
_36d.method_store.prototype=new _36a.isa.method_store;
_36d.method_dtable=_36d.method_store.prototype;
_36c.super_class=_36a;
_36d.super_class=_36a.isa;
}else{
_36c.allocator.prototype=new objj_object();
}
_36c.isa=_36d;
_36c.name=_36b;
_36c.info=_32e;
_36c._UID=objj_generateObjectUID();
_36d.isa=_36e.isa;
_36d.name=_36b;
_36d.info=_32f;
_36d._UID=objj_generateObjectUID();
return _36c;
};
var _2ea=nil;
objj_registerClassPair=function(_36f){
_1[_36f.name]=_36f;
_369[_36f.name]=_36f;
_1b9(_36f,_2ea);
};
class_createInstance=function(_370){
if(!_370){
throw new Error("*** Attempting to create object with Nil class.");
}
var _371=new _370.allocator();
_371.isa=_370;
_371._UID=objj_generateObjectUID();
return _371;
};
var _372=function(){
};
_372.prototype.member=false;
with(new _372()){
member=true;
}
if(new _372().member){
var _373=class_createInstance;
class_createInstance=function(_374){
var _375=_373(_374);
if(_375){
var _376=_375.isa,_377=_376;
while(_376){
var _378=_376.ivars;
count=_378.length;
while(count--){
_375[_378[count].name]=NULL;
}
_376=_376.super_class;
}
_375.isa=_377;
}
return _375;
};
}
object_getClassName=function(_379){
if(!_379){
return "";
}
var _37a=_379.isa;
return _37a?class_getName(_37a):"";
};
objj_lookUpClass=function(_37b){
var _37c=_369[_37b];
return _37c?_37c:Nil;
};
objj_getClass=function(_37d){
var _37e=_369[_37d];
if(!_37e){
}
return _37e?_37e:Nil;
};
objj_getMetaClass=function(_37f){
var _380=objj_getClass(_37f);
return (((_380.info&(_32f)))?_380:_380.isa);
};
ivar_getName=function(_381){
return _381.name;
};
ivar_getTypeEncoding=function(_382){
return _382.type;
};
objj_msgSend=function(_383,_384){
if(_383==nil){
return nil;
}
var isa=_383.isa;
if(!((((isa.info&(_32f)))?isa:isa.isa).info&(_330))){
_361(isa);
}
var _385=isa.method_dtable[_384];
if(!_385){
_385=_363;
}
var _386=_385.method_imp;
switch(arguments.length){
case 2:
return _386(_383,_384);
case 3:
return _386(_383,_384,arguments[2]);
case 4:
return _386(_383,_384,arguments[2],arguments[3]);
}
return _386.apply(_383,arguments);
};
objj_msgSendSuper=function(_387,_388){
var _389=_387.super_class;
arguments[0]=_387.receiver;
if(!((((_389.info&(_32f)))?_389:_389.isa).info&(_330))){
_361(_389);
}
var _38a=_389.method_dtable[_388];
if(!_38a){
_38a=_363;
}
var _38b=_38a.method_imp;
return _38b.apply(_387.receiver,arguments);
};
method_getName=function(_38c){
return _38c.name;
};
method_getImplementation=function(_38d){
return _38d.method_imp;
};
method_setImplementation=function(_38e,_38f){
var _390=_38e.method_imp;
_38e.method_imp=_38f;
return _390;
};
method_exchangeImplementations=function(lhs,rhs){
var _391=method_getImplementation(lhs),_392=method_getImplementation(rhs);
method_setImplementation(lhs,_392);
method_setImplementation(rhs,_391);
};
sel_getName=function(_393){
return _393?_393:"<null selector>";
};
sel_getUid=function(_394){
return _394;
};
sel_isEqual=function(lhs,rhs){
return lhs===rhs;
};
sel_registerName=function(_395){
return _395;
};
objj_eval=function(_396){
var url=_2.pageURL;
var _397=_2.asyncLoader;
_2.asyncLoader=NO;
var _398=_2.preprocess(_396,url,0);
if(!_398.hasLoadedFileDependencies()){
_398.loadFileDependencies();
}
_1._objj_eval_scope={};
_1._objj_eval_scope.objj_executeFile=_290.fileExecuterForURL(url);
_1._objj_eval_scope.objj_importFile=_290.fileImporterForURL(url);
var code="with(_objj_eval_scope){"+_398._code+"\n//*/\n}";
var _399;
_399=eval(code);
_2.asyncLoader=_397;
return _399;
};
_2.objj_eval=objj_eval;
_152();
var _39a=new CFURL(window.location.href),_39b=document.getElementsByTagName("base"),_39c=_39b.length;
if(_39c>0){
var _39d=_39b[_39c-1],_39e=_39d&&_39d.getAttribute("href");
if(_39e){
_39a=new CFURL(_39e,_39a);
}
}
var _39f=new CFURL(window.OBJJ_MAIN_FILE||"main.j"),_1b8=new CFURL(".",new CFURL(_39f,_39a)).absoluteURL(),_3a0=new CFURL("..",_1b8).absoluteURL();
if(_1b8===_3a0){
_3a0=new CFURL(_3a0.schemeAndAuthority());
}
_19f.resourceAtURL(_3a0,YES);
_2.pageURL=_39a;
_2.bootstrap=function(){
_3a1();
};
function _3a1(){
_19f.resolveResourceAtURL(_1b8,YES,function(_3a2){
var _3a3=_19f.includeURLs(),_95=0,_3a4=_3a3.length;
for(;_95<_3a4;++_95){
_3a2.resourceAtURL(_3a3[_95],YES);
}
_290.fileImporterForURL(_1b8)(_39f.lastPathComponent(),YES,function(){
_153();
_3aa(function(){
var _3a5=window.location.hash.substring(1),args=[];
if(_3a5.length){
args=_3a5.split("/");
for(var i=0,_3a4=args.length;i<_3a4;i++){
args[i]=decodeURIComponent(args[i]);
}
}
var _3a6=window.location.search.substring(1).split("&"),_3a7=new CFMutableDictionary();
for(var i=0,_3a4=_3a6.length;i<_3a4;i++){
var _3a8=_3a6[i].split("=");
if(!_3a8[0]){
continue;
}
if(_3a8[1]==null){
_3a8[1]=true;
}
_3a7.setValueForKey(decodeURIComponent(_3a8[0]),decodeURIComponent(_3a8[1]));
}
main(args,_3a7);
});
});
});
};
var _3a9=NO;
function _3aa(_3ab){
if(_3a9){
return _3ab();
}
if(window.addEventListener){
window.addEventListener("load",_3ab,NO);
}else{
if(window.attachEvent){
window.attachEvent("onload",_3ab);
}
}
};
_3aa(function(){
_3a9=YES;
});
if(typeof OBJJ_AUTO_BOOTSTRAP==="undefined"||OBJJ_AUTO_BOOTSTRAP){
_2.bootstrap();
}
function _1b2(aURL){
if(aURL instanceof CFURL&&aURL.scheme()){
return aURL;
}
return new CFURL(aURL,_1b8);
};
objj_importFile=_290.fileImporterForURL(_1b8);
objj_executeFile=_290.fileExecuterForURL(_1b8);
objj_import=function(){
CPLog.warn("objj_import is deprecated, use objj_importFile instead");
objj_importFile.apply(this,arguments);
};
})(window,ObjectiveJ);

Added Site/Site_Z/Info.plist.

























>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Main cib file base name</key>
	<string>MainMenu.cib</string>
	<key>CPBundleName</key>
	<string>Site</string>
	<key>CPPrincipalClass</key>
	<string>CPApplication</string>
</dict>
</plist>

Added Site/Site_Z/Jakefile.





























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
 * Jakefile
 * Site
 *
 * Created by You on November 17, 2010.
 * Copyright 2010, Your Company All rights reserved.
 */

var ENV = require("system").env,
    FILE = require("file"),
    JAKE = require("jake"),
    task = JAKE.task,
    FileList = JAKE.FileList,
    app = require("cappuccino/jake").app,
    configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug",
    OS = require("os");

app ("Site", function(task)
{
    task.setBuildIntermediatesPath(FILE.join("Build", "Site.build", configuration));
    task.setBuildPath(FILE.join("Build", configuration));

    task.setProductName("Site");
    task.setIdentifier("com.yourcompany.Site");
    task.setVersion("1.0");
    task.setAuthor("Your Company");
    task.setEmail("feedback @nospam@ yourcompany.com");
    task.setSummary("Site");
    task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**")));
    task.setResources(new FileList("Resources/**"));
    task.setIndexFilePath("index.html");
    task.setInfoPlistPath("Info.plist");
    task.setNib2CibFlags("-R Resources/");

    if (configuration === "Debug")
        task.setCompilerFlags("-DDEBUG -g");
    else
        task.setCompilerFlags("-O");
});

task ("default", ["Site"], function()
{
    printResults(configuration);
});

task ("build", ["default"]);

task ("debug", function()
{
    ENV["CONFIGURATION"] = "Debug";
    JAKE.subjake(["."], "build", ENV);
});

task ("release", function()
{
    ENV["CONFIGURATION"] = "Release";
    JAKE.subjake(["."], "build", ENV);
});

task ("run", ["debug"], function()
{
    OS.system(["open", FILE.join("Build", "Debug", "Site", "index.html")]);
});

task ("run-release", ["release"], function()
{
    OS.system(["open", FILE.join("Build", "Release", "Site", "index.html")]);
});

task ("deploy", ["release"], function()
{
    FILE.mkdirs(FILE.join("Build", "Deployment", "Site"));
    OS.system(["press", "-f", FILE.join("Build", "Release", "Site"), FILE.join("Build", "Deployment", "Site")]);
    printResults("Deployment")
});

task ("desktop", ["release"], function()
{
    FILE.mkdirs(FILE.join("Build", "Desktop", "Site"));
    require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "Site"), FILE.join("Build", "Desktop", "Site", "Site.app"));
    printResults("Desktop")
});

task ("run-desktop", ["desktop"], function()
{
    OS.system([FILE.join("Build", "Desktop", "Site", "Site.app", "Contents", "MacOS", "NativeHost"), "-i"]);
});

function printResults(configuration)
{
    print("----------------------------");
    print(configuration+" app built at path: "+FILE.join("Build", configuration, "Site"));
    print("----------------------------");
}

Added Site/Site_Z/Resources/MainMenu.cib.

cannot compute difference between binary files

Added Site/Site_Z/Resources/MainMenu.xib.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
	<data>
		<int key="IBDocument.SystemTarget">1050</int>
		<string key="IBDocument.SystemVersion">10H574</string>
		<string key="IBDocument.InterfaceBuilderVersion">804</string>
		<string key="IBDocument.AppKitVersion">1038.35</string>
		<string key="IBDocument.HIToolboxVersion">461.00</string>
		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
			<string key="NS.object.0">804</string>
		</object>
		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<integer value="372"/>
		</object>
		<object class="NSArray" key="IBDocument.PluginDependencies">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
		</object>
		<object class="NSMutableDictionary" key="IBDocument.Metadata">
			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
			<integer value="1" key="NS.object.0"/>
		</object>
		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<object class="NSCustomObject" id="1021">
				<string key="NSClassName">NSApplication</string>
			</object>
			<object class="NSCustomObject" id="1014">
				<string key="NSClassName">FirstResponder</string>
			</object>
			<object class="NSCustomObject" id="1050">
				<string key="NSClassName">NSApplication</string>
			</object>
			<object class="NSMenu" id="649796088">
				<string key="NSTitle">AMainMenu</string>
				<object class="NSMutableArray" key="NSMenuItems">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<object class="NSMenuItem" id="694149608">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">NewApplication</string>
						<string key="NSKeyEquiv"/>
						<int key="NSKeyEquivModMask">1048576</int>
						<int key="NSMnemonicLoc">2147483647</int>
						<object class="NSCustomResource" key="NSOnImage" id="35465992">
							<string key="NSClassName">NSImage</string>
							<string key="NSResourceName">NSMenuCheckmark</string>
						</object>
						<object class="NSCustomResource" key="NSMixedImage" id="502551668">
							<string key="NSClassName">NSImage</string>
							<string key="NSResourceName">NSMenuMixedState</string>
						</object>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="110575045">
							<string key="NSTitle">NewApplication</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="238522557">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">About NewApplication</string>
									<string key="NSKeyEquiv"/>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="304266470">
									<reference key="NSMenu" ref="110575045"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="609285721">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">Preferences…</string>
									<string key="NSKeyEquiv">,</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="481834944">
									<reference key="NSMenu" ref="110575045"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="1046388886">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">Services</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="752062318">
										<string key="NSTitle">Services</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
										</object>
										<string key="NSName">_NSServicesMenu</string>
									</object>
								</object>
								<object class="NSMenuItem" id="646227648">
									<reference key="NSMenu" ref="110575045"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="755159360">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">Hide NewApplication</string>
									<string key="NSKeyEquiv">h</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="342932134">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">Hide Others</string>
									<string key="NSKeyEquiv">h</string>
									<int key="NSKeyEquivModMask">1572864</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="908899353">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">Show All</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="1056857174">
									<reference key="NSMenu" ref="110575045"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="632727374">
									<reference key="NSMenu" ref="110575045"/>
									<string key="NSTitle">Quit NewApplication</string>
									<string key="NSKeyEquiv">q</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
							</object>
							<string key="NSName">_NSAppleMenu</string>
						</object>
					</object>
					<object class="NSMenuItem" id="379814623">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">File</string>
						<string key="NSKeyEquiv"/>
						<int key="NSKeyEquivModMask">1048576</int>
						<int key="NSMnemonicLoc">2147483647</int>
						<reference key="NSOnImage" ref="35465992"/>
						<reference key="NSMixedImage" ref="502551668"/>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="720053764">
							<string key="NSTitle">File</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="705341025">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">New</string>
									<string key="NSKeyEquiv">n</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="722745758">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Open…</string>
									<string key="NSKeyEquiv">o</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="1025936716">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Open Recent</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="1065607017">
										<string key="NSTitle">Open Recent</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="759406840">
												<reference key="NSMenu" ref="1065607017"/>
												<string key="NSTitle">Clear Menu</string>
												<string key="NSKeyEquiv"/>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
										</object>
										<string key="NSName">_NSRecentDocumentsMenu</string>
									</object>
								</object>
								<object class="NSMenuItem" id="425164168">
									<reference key="NSMenu" ref="720053764"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="776162233">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Close</string>
									<string key="NSKeyEquiv">w</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="1023925487">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Save</string>
									<string key="NSKeyEquiv">s</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="117038363">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Save As…</string>
									<string key="NSKeyEquiv">S</string>
									<int key="NSKeyEquivModMask">1179648</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="579971712">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Revert to Saved</string>
									<string key="NSKeyEquiv"/>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="1010469920">
									<reference key="NSMenu" ref="720053764"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="294629803">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Page Setup...</string>
									<string key="NSKeyEquiv">P</string>
									<int key="NSKeyEquivModMask">1179648</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSToolTip"/>
								</object>
								<object class="NSMenuItem" id="49223823">
									<reference key="NSMenu" ref="720053764"/>
									<string key="NSTitle">Print…</string>
									<string key="NSKeyEquiv">p</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
							</object>
						</object>
					</object>
					<object class="NSMenuItem" id="952259628">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">Edit</string>
						<string key="NSKeyEquiv"/>
						<int key="NSKeyEquivModMask">1048576</int>
						<int key="NSMnemonicLoc">2147483647</int>
						<reference key="NSOnImage" ref="35465992"/>
						<reference key="NSMixedImage" ref="502551668"/>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="789758025">
							<string key="NSTitle">Edit</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="1058277027">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Undo</string>
									<string key="NSKeyEquiv">z</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="790794224">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Redo</string>
									<string key="NSKeyEquiv">Z</string>
									<int key="NSKeyEquivModMask">1179648</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="1040322652">
									<reference key="NSMenu" ref="789758025"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="296257095">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Cut</string>
									<string key="NSKeyEquiv">x</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="860595796">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Copy</string>
									<string key="NSKeyEquiv">c</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="29853731">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Paste</string>
									<string key="NSKeyEquiv">v</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="437104165">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Delete</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="583158037">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Select All</string>
									<string key="NSKeyEquiv">a</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="212016141">
									<reference key="NSMenu" ref="789758025"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="892235320">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Find</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="963351320">
										<string key="NSTitle">Find</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="447796847">
												<reference key="NSMenu" ref="963351320"/>
												<string key="NSTitle">Find…</string>
												<string key="NSKeyEquiv">f</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">1</int>
											</object>
											<object class="NSMenuItem" id="326711663">
												<reference key="NSMenu" ref="963351320"/>
												<string key="NSTitle">Find Next</string>
												<string key="NSKeyEquiv">g</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">2</int>
											</object>
											<object class="NSMenuItem" id="270902937">
												<reference key="NSMenu" ref="963351320"/>
												<string key="NSTitle">Find Previous</string>
												<string key="NSKeyEquiv">G</string>
												<int key="NSKeyEquivModMask">1179648</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">3</int>
											</object>
											<object class="NSMenuItem" id="159080638">
												<reference key="NSMenu" ref="963351320"/>
												<string key="NSTitle">Use Selection for Find</string>
												<string key="NSKeyEquiv">e</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">7</int>
											</object>
											<object class="NSMenuItem" id="88285865">
												<reference key="NSMenu" ref="963351320"/>
												<string key="NSTitle">Jump to Selection</string>
												<string key="NSKeyEquiv">j</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
										</object>
									</object>
								</object>
								<object class="NSMenuItem" id="972420730">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Spelling and Grammar</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="769623530">
										<string key="NSTitle">Spelling and Grammar</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="679648819">
												<reference key="NSMenu" ref="769623530"/>
												<string key="NSTitle">Show Spelling…</string>
												<string key="NSKeyEquiv">:</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="96193923">
												<reference key="NSMenu" ref="769623530"/>
												<string key="NSTitle">Check Spelling</string>
												<string key="NSKeyEquiv">;</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="948374510">
												<reference key="NSMenu" ref="769623530"/>
												<string key="NSTitle">Check Spelling While Typing</string>
												<string key="NSKeyEquiv"/>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="967646866">
												<reference key="NSMenu" ref="769623530"/>
												<string key="NSTitle">Check Grammar With Spelling</string>
												<string key="NSKeyEquiv"/>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
										</object>
									</object>
								</object>
								<object class="NSMenuItem" id="507821607">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Substitutions</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="698887838">
										<string key="NSTitle">Substitutions</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="605118523">
												<reference key="NSMenu" ref="698887838"/>
												<string key="NSTitle">Smart Copy/Paste</string>
												<string key="NSKeyEquiv">f</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">1</int>
											</object>
											<object class="NSMenuItem" id="197661976">
												<reference key="NSMenu" ref="698887838"/>
												<string key="NSTitle">Smart Quotes</string>
												<string key="NSKeyEquiv">g</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">2</int>
											</object>
											<object class="NSMenuItem" id="708854459">
												<reference key="NSMenu" ref="698887838"/>
												<string key="NSTitle">Smart Links</string>
												<string key="NSKeyEquiv">G</string>
												<int key="NSKeyEquivModMask">1179648</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">3</int>
											</object>
										</object>
									</object>
								</object>
								<object class="NSMenuItem" id="676164635">
									<reference key="NSMenu" ref="789758025"/>
									<string key="NSTitle">Speech</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="785027613">
										<string key="NSTitle">Speech</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="731782645">
												<reference key="NSMenu" ref="785027613"/>
												<string key="NSTitle">Start Speaking</string>
												<string key="NSKeyEquiv"/>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="680220178">
												<reference key="NSMenu" ref="785027613"/>
												<string key="NSTitle">Stop Speaking</string>
												<string key="NSKeyEquiv"/>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
										</object>
									</object>
								</object>
							</object>
						</object>
					</object>
					<object class="NSMenuItem" id="302598603">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">Format</string>
						<string key="NSKeyEquiv"/>
						<int key="NSMnemonicLoc">2147483647</int>
						<reference key="NSOnImage" ref="35465992"/>
						<reference key="NSMixedImage" ref="502551668"/>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="941447902">
							<string key="NSTitle">Format</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="792887677">
									<reference key="NSMenu" ref="941447902"/>
									<string key="NSTitle">Font</string>
									<string key="NSKeyEquiv"/>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="786677654">
										<string key="NSTitle">Font</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="159677712">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Show Fonts</string>
												<string key="NSKeyEquiv">t</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="305399458">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Bold</string>
												<string key="NSKeyEquiv">b</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">2</int>
											</object>
											<object class="NSMenuItem" id="814362025">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Italic</string>
												<string key="NSKeyEquiv">i</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">1</int>
											</object>
											<object class="NSMenuItem" id="330926929">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Underline</string>
												<string key="NSKeyEquiv">u</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="533507878">
												<reference key="NSMenu" ref="786677654"/>
												<bool key="NSIsDisabled">YES</bool>
												<bool key="NSIsSeparator">YES</bool>
												<string key="NSTitle"/>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="158063935">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Bigger</string>
												<string key="NSKeyEquiv">+</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">3</int>
											</object>
											<object class="NSMenuItem" id="885547335">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Smaller</string>
												<string key="NSKeyEquiv">-</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<int key="NSTag">4</int>
											</object>
											<object class="NSMenuItem" id="901062459">
												<reference key="NSMenu" ref="786677654"/>
												<bool key="NSIsDisabled">YES</bool>
												<bool key="NSIsSeparator">YES</bool>
												<string key="NSTitle"/>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="767671776">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Kern</string>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<string key="NSAction">submenuAction:</string>
												<object class="NSMenu" key="NSSubmenu" id="175441468">
													<string key="NSTitle">Kern</string>
													<object class="NSMutableArray" key="NSMenuItems">
														<bool key="EncodedWithXMLCoder">YES</bool>
														<object class="NSMenuItem" id="252969304">
															<reference key="NSMenu" ref="175441468"/>
															<string key="NSTitle">Use Default</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="766922938">
															<reference key="NSMenu" ref="175441468"/>
															<string key="NSTitle">Use None</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="677519740">
															<reference key="NSMenu" ref="175441468"/>
															<string key="NSTitle">Tighten</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="238351151">
															<reference key="NSMenu" ref="175441468"/>
															<string key="NSTitle">Loosen</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
													</object>
												</object>
											</object>
											<object class="NSMenuItem" id="691570813">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Ligature</string>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<string key="NSAction">submenuAction:</string>
												<object class="NSMenu" key="NSSubmenu" id="1058217995">
													<string key="NSTitle">Ligature</string>
													<object class="NSMutableArray" key="NSMenuItems">
														<bool key="EncodedWithXMLCoder">YES</bool>
														<object class="NSMenuItem" id="706297211">
															<reference key="NSMenu" ref="1058217995"/>
															<string key="NSTitle">Use Default</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="568384683">
															<reference key="NSMenu" ref="1058217995"/>
															<string key="NSTitle">Use None</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="663508465">
															<reference key="NSMenu" ref="1058217995"/>
															<string key="NSTitle">Use All</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
													</object>
												</object>
											</object>
											<object class="NSMenuItem" id="769124883">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Baseline</string>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
												<string key="NSAction">submenuAction:</string>
												<object class="NSMenu" key="NSSubmenu" id="18263474">
													<string key="NSTitle">Baseline</string>
													<object class="NSMutableArray" key="NSMenuItems">
														<bool key="EncodedWithXMLCoder">YES</bool>
														<object class="NSMenuItem" id="257962622">
															<reference key="NSMenu" ref="18263474"/>
															<string key="NSTitle">Use Default</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="644725453">
															<reference key="NSMenu" ref="18263474"/>
															<string key="NSTitle">Superscript</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="1037576581">
															<reference key="NSMenu" ref="18263474"/>
															<string key="NSTitle">Subscript</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="941806246">
															<reference key="NSMenu" ref="18263474"/>
															<string key="NSTitle">Raise</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
														<object class="NSMenuItem" id="1045724900">
															<reference key="NSMenu" ref="18263474"/>
															<string key="NSTitle">Lower</string>
															<string key="NSKeyEquiv"/>
															<int key="NSMnemonicLoc">2147483647</int>
															<reference key="NSOnImage" ref="35465992"/>
															<reference key="NSMixedImage" ref="502551668"/>
														</object>
													</object>
												</object>
											</object>
											<object class="NSMenuItem" id="739652853">
												<reference key="NSMenu" ref="786677654"/>
												<bool key="NSIsDisabled">YES</bool>
												<bool key="NSIsSeparator">YES</bool>
												<string key="NSTitle"/>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="1012600125">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Show Colors</string>
												<string key="NSKeyEquiv">C</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="214559597">
												<reference key="NSMenu" ref="786677654"/>
												<bool key="NSIsDisabled">YES</bool>
												<bool key="NSIsSeparator">YES</bool>
												<string key="NSTitle"/>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="596732606">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Copy Style</string>
												<string key="NSKeyEquiv">c</string>
												<int key="NSKeyEquivModMask">1572864</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="393423671">
												<reference key="NSMenu" ref="786677654"/>
												<string key="NSTitle">Paste Style</string>
												<string key="NSKeyEquiv">v</string>
												<int key="NSKeyEquivModMask">1572864</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
										</object>
										<string key="NSName">_NSFontMenu</string>
									</object>
								</object>
								<object class="NSMenuItem" id="15516124">
									<reference key="NSMenu" ref="941447902"/>
									<string key="NSTitle">Text</string>
									<string key="NSKeyEquiv"/>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
									<string key="NSAction">submenuAction:</string>
									<object class="NSMenu" key="NSSubmenu" id="23081656">
										<string key="NSTitle">Text</string>
										<object class="NSMutableArray" key="NSMenuItems">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSMenuItem" id="135107054">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Align Left</string>
												<string key="NSKeyEquiv">{</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="310547522">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Center</string>
												<string key="NSKeyEquiv">|</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="436088763">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Justify</string>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="498119243">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Align Right</string>
												<string key="NSKeyEquiv">}</string>
												<int key="NSKeyEquivModMask">1048576</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="607995063">
												<reference key="NSMenu" ref="23081656"/>
												<bool key="NSIsDisabled">YES</bool>
												<bool key="NSIsSeparator">YES</bool>
												<string key="NSTitle"/>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="420564933">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Show Ruler</string>
												<string key="NSKeyEquiv"/>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="479856769">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Copy Ruler</string>
												<string key="NSKeyEquiv">c</string>
												<int key="NSKeyEquivModMask">1310720</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
											<object class="NSMenuItem" id="333628178">
												<reference key="NSMenu" ref="23081656"/>
												<string key="NSTitle">Paste Ruler</string>
												<string key="NSKeyEquiv">v</string>
												<int key="NSKeyEquivModMask">1310720</int>
												<int key="NSMnemonicLoc">2147483647</int>
												<reference key="NSOnImage" ref="35465992"/>
												<reference key="NSMixedImage" ref="502551668"/>
											</object>
										</object>
									</object>
								</object>
							</object>
						</object>
					</object>
					<object class="NSMenuItem" id="586577488">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">View</string>
						<string key="NSKeyEquiv"/>
						<int key="NSKeyEquivModMask">1048576</int>
						<int key="NSMnemonicLoc">2147483647</int>
						<reference key="NSOnImage" ref="35465992"/>
						<reference key="NSMixedImage" ref="502551668"/>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="466310130">
							<string key="NSTitle">View</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="102151532">
									<reference key="NSMenu" ref="466310130"/>
									<string key="NSTitle">Show Toolbar</string>
									<string key="NSKeyEquiv">t</string>
									<int key="NSKeyEquivModMask">1572864</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="237841660">
									<reference key="NSMenu" ref="466310130"/>
									<string key="NSTitle">Customize Toolbar…</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
							</object>
						</object>
					</object>
					<object class="NSMenuItem" id="713487014">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">Window</string>
						<string key="NSKeyEquiv"/>
						<int key="NSKeyEquivModMask">1048576</int>
						<int key="NSMnemonicLoc">2147483647</int>
						<reference key="NSOnImage" ref="35465992"/>
						<reference key="NSMixedImage" ref="502551668"/>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="835318025">
							<string key="NSTitle">Window</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="1011231497">
									<reference key="NSMenu" ref="835318025"/>
									<string key="NSTitle">Minimize</string>
									<string key="NSKeyEquiv">m</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="575023229">
									<reference key="NSMenu" ref="835318025"/>
									<string key="NSTitle">Zoom</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="299356726">
									<reference key="NSMenu" ref="835318025"/>
									<bool key="NSIsDisabled">YES</bool>
									<bool key="NSIsSeparator">YES</bool>
									<string key="NSTitle"/>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
								<object class="NSMenuItem" id="625202149">
									<reference key="NSMenu" ref="835318025"/>
									<string key="NSTitle">Bring All to Front</string>
									<string key="NSKeyEquiv"/>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
							</object>
							<string key="NSName">_NSWindowsMenu</string>
						</object>
					</object>
					<object class="NSMenuItem" id="391199113">
						<reference key="NSMenu" ref="649796088"/>
						<string key="NSTitle">Help</string>
						<string key="NSKeyEquiv"/>
						<int key="NSKeyEquivModMask">1048576</int>
						<int key="NSMnemonicLoc">2147483647</int>
						<reference key="NSOnImage" ref="35465992"/>
						<reference key="NSMixedImage" ref="502551668"/>
						<string key="NSAction">submenuAction:</string>
						<object class="NSMenu" key="NSSubmenu" id="374024848">
							<string key="NSTitle">Help</string>
							<object class="NSMutableArray" key="NSMenuItems">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSMenuItem" id="238773614">
									<reference key="NSMenu" ref="374024848"/>
									<string key="NSTitle">NewApplication Help</string>
									<string key="NSKeyEquiv">?</string>
									<int key="NSKeyEquivModMask">1048576</int>
									<int key="NSMnemonicLoc">2147483647</int>
									<reference key="NSOnImage" ref="35465992"/>
									<reference key="NSMixedImage" ref="502551668"/>
								</object>
							</object>
						</object>
					</object>
				</object>
				<string key="NSName">_NSMainMenu</string>
			</object>
			<object class="NSWindowTemplate" id="972006081">
				<int key="NSWindowStyleMask">7</int>
				<int key="NSWindowBacking">2</int>
				<string key="NSWindowRect">{{335, 301}, {489, 449}}</string>
				<int key="NSWTFlags">1946157056</int>
				<string key="NSWindowTitle">Window</string>
				<string key="NSWindowClass">NSWindow</string>
				<nil key="NSViewClass"/>
				<string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
				<object class="NSView" key="NSWindowView" id="439893737">
					<reference key="NSNextResponder"/>
					<int key="NSvFlags">274</int>
					<object class="NSMutableArray" key="NSSubviews">
						<bool key="EncodedWithXMLCoder">YES</bool>
						<object class="NSSlider" id="974764906">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">293</int>
							<string key="NSFrame">{{198, 16}, {96, 21}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSSliderCell" key="NSCell" id="600801425">
								<int key="NSCellFlags">-2080244224</int>
								<int key="NSCellFlags2">0</int>
								<string key="NSContents"/>
								<object class="NSFont" key="NSSupport">
									<string key="NSName">Helvetica</string>
									<double key="NSSize">12</double>
									<int key="NSfFlags">16</int>
								</object>
								<reference key="NSControlView" ref="974764906"/>
								<double key="NSMaxValue">100</double>
								<double key="NSMinValue">0.0</double>
								<double key="NSValue">50</double>
								<double key="NSAltIncValue">0.0</double>
								<int key="NSNumberOfTickMarks">0</int>
								<int key="NSTickMarkPosition">1</int>
								<bool key="NSAllowsTickMarkValuesOnly">NO</bool>
								<bool key="NSVertical">NO</bool>
							</object>
						</object>
						<object class="NSTextField" id="160623561">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">293</int>
							<string key="NSFrame">{{198, 54}, {96, 22}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="46991665">
								<int key="NSCellFlags">-1804468671</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents"/>
								<object class="NSFont" key="NSSupport" id="239616649">
									<string key="NSName">LucidaGrande</string>
									<double key="NSSize">13</double>
									<int key="NSfFlags">1044</int>
								</object>
								<reference key="NSControlView" ref="160623561"/>
								<bool key="NSDrawsBackground">YES</bool>
								<object class="NSColor" key="NSBackgroundColor" id="452967633">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">textBackgroundColor</string>
									<object class="NSColor" key="NSColor" id="238533680">
										<int key="NSColorSpace">3</int>
										<bytes key="NSWhite">MQA</bytes>
									</object>
								</object>
								<object class="NSColor" key="NSTextColor" id="425230972">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">textColor</string>
									<object class="NSColor" key="NSColor" id="375315432">
										<int key="NSColorSpace">3</int>
										<bytes key="NSWhite">MAA</bytes>
									</object>
								</object>
							</object>
						</object>
						<object class="NSTextField" id="269416192">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">301</int>
							<string key="NSFrame">{{188, 412}, {115, 17}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="884009277">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">Firenet Controller</string>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="269416192"/>
								<bool key="NSDrawsBackground">YES</bool>
								<int key="NSTextBezelStyle">1</int>
								<object class="NSColor" key="NSBackgroundColor" id="75477950">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">controlColor</string>
									<object class="NSColor" key="NSColor">
										<int key="NSColorSpace">3</int>
										<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
									</object>
								</object>
								<object class="NSColor" key="NSTextColor">
									<int key="NSColorSpace">1</int>
									<bytes key="NSRGB">MSAwIDAAA</bytes>
								</object>
							</object>
						</object>
						<object class="NSTextField" id="329227068">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{77, 356}, {392, 22}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="29170013">
								<int key="NSCellFlags">-1804468671</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents"/>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="329227068"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="452967633"/>
								<reference key="NSTextColor" ref="425230972"/>
							</object>
						</object>
						<object class="NSTextField" id="260622014">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{77, 324}, {392, 22}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="203136106">
								<int key="NSCellFlags">-1804468671</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents"/>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="260622014"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="452967633"/>
								<reference key="NSTextColor" ref="425230972"/>
							</object>
						</object>
						<object class="NSTextField" id="873182938">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{34, 361}, {38, 17}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="321734027">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">URL</string>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="873182938"/>
								<reference key="NSBackgroundColor" ref="75477950"/>
								<object class="NSColor" key="NSTextColor" id="994651382">
									<int key="NSColorSpace">6</int>
									<string key="NSCatalogName">System</string>
									<string key="NSColorName">controlTextColor</string>
									<reference key="NSColor" ref="375315432"/>
								</object>
							</object>
						</object>
						<object class="NSTextField" id="245020381">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{32, 329}, {40, 17}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="907594643">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">DATA</string>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="245020381"/>
								<reference key="NSBackgroundColor" ref="75477950"/>
								<reference key="NSTextColor" ref="994651382"/>
							</object>
						</object>
						<object class="NSMatrix" id="887531999">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{77, 278}, {61, 38}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<int key="NSNumRows">2</int>
							<int key="NSNumCols">1</int>
							<object class="NSMutableArray" key="NSCells">
								<bool key="EncodedWithXMLCoder">YES</bool>
								<object class="NSButtonCell" id="180467905">
									<int key="NSCellFlags">-2080244224</int>
									<int key="NSCellFlags2">0</int>
									<string key="NSContents">Get</string>
									<reference key="NSSupport" ref="239616649"/>
									<reference key="NSControlView" ref="887531999"/>
									<int key="NSTag">1</int>
									<int key="NSButtonFlags">1211912703</int>
									<int key="NSButtonFlags2">0</int>
									<object class="NSButtonImageSource" key="NSAlternateImage" id="245373516">
										<string key="NSImageName">NSRadioButton</string>
									</object>
									<string key="NSAlternateContents"/>
									<string key="NSKeyEquivalent"/>
									<int key="NSPeriodicDelay">200</int>
									<int key="NSPeriodicInterval">25</int>
								</object>
								<object class="NSButtonCell" id="447172030">
									<int key="NSCellFlags">67239424</int>
									<int key="NSCellFlags2">0</int>
									<string key="NSContents">Put</string>
									<reference key="NSSupport" ref="239616649"/>
									<reference key="NSControlView" ref="887531999"/>
									<int key="NSButtonFlags">1211912703</int>
									<int key="NSButtonFlags2">0</int>
									<object class="NSImage" key="NSNormalImage">
										<int key="NSImageFlags">549453824</int>
										<string key="NSSize">{18, 18}</string>
										<object class="NSMutableArray" key="NSReps">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<object class="NSArray">
												<bool key="EncodedWithXMLCoder">YES</bool>
												<integer value="0"/>
												<object class="NSBitmapImageRep">
													<object class="NSData" key="NSTIFFRepresentation">
														<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB
AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw
cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA
AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA
BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA
AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA
AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1
cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD
AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH
SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF
hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8
vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt
7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq
Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo
aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e
n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX
2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW
FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O
Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6
ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt
rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA
AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA
AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl
A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq
DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU
HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8
MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v
UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/
eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj
rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn
5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh
AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK
CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY
GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95
MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S
UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2
d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV
pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK
0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf//
AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw
BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA
FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H
LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh
Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ
h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp
svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb
1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX
8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE
AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg
QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes>
													</object>
												</object>
											</object>
										</object>
										<object class="NSColor" key="NSColor" id="547875052">
											<int key="NSColorSpace">3</int>
											<bytes key="NSWhite">MCAwAA</bytes>
										</object>
									</object>
									<reference key="NSAlternateImage" ref="245373516"/>
									<int key="NSPeriodicDelay">400</int>
									<int key="NSPeriodicInterval">75</int>
								</object>
							</object>
							<string key="NSCellSize">{61, 18}</string>
							<string key="NSIntercellSpacing">{4, 2}</string>
							<int key="NSMatrixFlags">1151868928</int>
							<string key="NSCellClass">NSActionCell</string>
							<object class="NSButtonCell" key="NSProtoCell" id="947963337">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">0</int>
								<string key="NSContents">Radio</string>
								<reference key="NSSupport" ref="239616649"/>
								<int key="NSButtonFlags">1211912703</int>
								<int key="NSButtonFlags2">0</int>
								<object class="NSImage" key="NSNormalImage">
									<int key="NSImageFlags">549453824</int>
									<string key="NSSize">{18, 18}</string>
									<object class="NSMutableArray" key="NSReps">
										<bool key="EncodedWithXMLCoder">YES</bool>
										<object class="NSArray">
											<bool key="EncodedWithXMLCoder">YES</bool>
											<integer value="0"/>
											<object class="NSBitmapImageRep">
												<object class="NSData" key="NSTIFFRepresentation">
													<bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw
IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/
29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5
dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA
AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG
AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/
0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/
7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/
5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/
3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD
AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns
AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/
6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/
/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/
///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl
YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA
AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD
AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu
AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB
AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES
AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS
AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
												</object>
											</object>
										</object>
									</object>
									<reference key="NSColor" ref="547875052"/>
								</object>
								<reference key="NSAlternateImage" ref="245373516"/>
								<int key="NSPeriodicDelay">400</int>
								<int key="NSPeriodicInterval">75</int>
							</object>
							<reference key="NSSelectedCell" ref="180467905"/>
							<reference key="NSBackgroundColor" ref="75477950"/>
							<reference key="NSCellBackgroundColor" ref="238533680"/>
							<reference key="NSFont" ref="239616649"/>
						</object>
						<object class="NSButton" id="425832453">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{192, 239}, {96, 32}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSButtonCell" key="NSCell" id="163446784">
								<int key="NSCellFlags">67239424</int>
								<int key="NSCellFlags2">134217728</int>
								<string key="NSContents">Send</string>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="425832453"/>
								<int key="NSButtonFlags">-2038284033</int>
								<int key="NSButtonFlags2">129</int>
								<string key="NSAlternateContents"/>
								<string key="NSKeyEquivalent"/>
								<int key="NSPeriodicDelay">200</int>
								<int key="NSPeriodicInterval">25</int>
							</object>
						</object>
						<object class="NSTextField" id="1008327448">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">264</int>
							<string key="NSFrame">{{77, 177}, {392, 62}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="518752231">
								<int key="NSCellFlags">-1805517311</int>
								<int key="NSCellFlags2">272629760</int>
								<string key="NSContents"/>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="1008327448"/>
								<bool key="NSDrawsBackground">YES</bool>
								<reference key="NSBackgroundColor" ref="452967633"/>
								<reference key="NSTextColor" ref="425230972"/>
							</object>
						</object>
						<object class="NSTextField" id="986945989">
							<reference key="NSNextResponder" ref="439893737"/>
							<int key="NSvFlags">268</int>
							<string key="NSFrame">{{22, 199}, {43, 17}}</string>
							<reference key="NSSuperview" ref="439893737"/>
							<bool key="NSEnabled">YES</bool>
							<object class="NSTextFieldCell" key="NSCell" id="89007552">
								<int key="NSCellFlags">68288064</int>
								<int key="NSCellFlags2">272630784</int>
								<string key="NSContents">Result</string>
								<reference key="NSSupport" ref="239616649"/>
								<reference key="NSControlView" ref="986945989"/>
								<reference key="NSBackgroundColor" ref="75477950"/>
								<reference key="NSTextColor" ref="994651382"/>
							</object>
						</object>
					</object>
					<string key="NSFrameSize">{489, 449}</string>
					<reference key="NSSuperview"/>
				</object>
				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
				<string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
			</object>
			<object class="NSCustomObject" id="635946545">
				<string key="NSClassName">AppController</string>
			</object>
		</object>
		<object class="IBObjectContainer" key="IBDocument.Objects">
			<object class="NSMutableArray" key="connectionRecords">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">performMiniaturize:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="1011231497"/>
					</object>
					<int key="connectionID">37</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">arrangeInFront:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="625202149"/>
					</object>
					<int key="connectionID">39</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">print:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="49223823"/>
					</object>
					<int key="connectionID">86</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">runPageLayout:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="294629803"/>
					</object>
					<int key="connectionID">87</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">clearRecentDocuments:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="759406840"/>
					</object>
					<int key="connectionID">127</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">orderFrontStandardAboutPanel:</string>
						<reference key="source" ref="1021"/>
						<reference key="destination" ref="238522557"/>
					</object>
					<int key="connectionID">142</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">performClose:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="776162233"/>
					</object>
					<int key="connectionID">193</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleContinuousSpellChecking:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="948374510"/>
					</object>
					<int key="connectionID">222</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">undo:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="1058277027"/>
					</object>
					<int key="connectionID">223</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">copy:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="860595796"/>
					</object>
					<int key="connectionID">224</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">checkSpelling:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="96193923"/>
					</object>
					<int key="connectionID">225</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">paste:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="29853731"/>
					</object>
					<int key="connectionID">226</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">stopSpeaking:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="680220178"/>
					</object>
					<int key="connectionID">227</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">cut:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="296257095"/>
					</object>
					<int key="connectionID">228</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">showGuessPanel:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="679648819"/>
					</object>
					<int key="connectionID">230</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">redo:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="790794224"/>
					</object>
					<int key="connectionID">231</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">selectAll:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="583158037"/>
					</object>
					<int key="connectionID">232</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">startSpeaking:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="731782645"/>
					</object>
					<int key="connectionID">233</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">delete:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="437104165"/>
					</object>
					<int key="connectionID">235</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">performZoom:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="575023229"/>
					</object>
					<int key="connectionID">240</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">performFindPanelAction:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="447796847"/>
					</object>
					<int key="connectionID">241</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">centerSelectionInVisibleArea:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="88285865"/>
					</object>
					<int key="connectionID">245</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleGrammarChecking:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="967646866"/>
					</object>
					<int key="connectionID">347</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleSmartInsertDelete:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="605118523"/>
					</object>
					<int key="connectionID">355</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleAutomaticQuoteSubstitution:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="197661976"/>
					</object>
					<int key="connectionID">356</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleAutomaticLinkDetection:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="708854459"/>
					</object>
					<int key="connectionID">357</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">showHelp:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="238773614"/>
					</object>
					<int key="connectionID">360</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">saveDocument:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="1023925487"/>
					</object>
					<int key="connectionID">362</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">saveDocumentAs:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="117038363"/>
					</object>
					<int key="connectionID">363</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">revertDocumentToSaved:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="579971712"/>
					</object>
					<int key="connectionID">364</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">runToolbarCustomizationPalette:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="237841660"/>
					</object>
					<int key="connectionID">365</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleToolbarShown:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="102151532"/>
					</object>
					<int key="connectionID">366</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">hide:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="755159360"/>
					</object>
					<int key="connectionID">367</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">hideOtherApplications:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="342932134"/>
					</object>
					<int key="connectionID">368</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">unhideAllApplications:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="908899353"/>
					</object>
					<int key="connectionID">370</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">newDocument:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="705341025"/>
					</object>
					<int key="connectionID">373</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">openDocument:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="722745758"/>
					</object>
					<int key="connectionID">374</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">raiseBaseline:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="941806246"/>
					</object>
					<int key="connectionID">426</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">lowerBaseline:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="1045724900"/>
					</object>
					<int key="connectionID">427</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">copyFont:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="596732606"/>
					</object>
					<int key="connectionID">428</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">subscript:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="1037576581"/>
					</object>
					<int key="connectionID">429</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">superscript:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="644725453"/>
					</object>
					<int key="connectionID">430</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">tightenKerning:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="677519740"/>
					</object>
					<int key="connectionID">431</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">underline:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="330926929"/>
					</object>
					<int key="connectionID">432</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">orderFrontColorPanel:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="1012600125"/>
					</object>
					<int key="connectionID">433</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">useAllLigatures:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="663508465"/>
					</object>
					<int key="connectionID">434</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">loosenKerning:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="238351151"/>
					</object>
					<int key="connectionID">435</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">pasteFont:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="393423671"/>
					</object>
					<int key="connectionID">436</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">unscript:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="257962622"/>
					</object>
					<int key="connectionID">437</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">useStandardKerning:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="252969304"/>
					</object>
					<int key="connectionID">438</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">useStandardLigatures:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="706297211"/>
					</object>
					<int key="connectionID">439</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">turnOffLigatures:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="568384683"/>
					</object>
					<int key="connectionID">440</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">turnOffKerning:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="766922938"/>
					</object>
					<int key="connectionID">441</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">alignLeft:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="135107054"/>
					</object>
					<int key="connectionID">442</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">alignJustified:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="436088763"/>
					</object>
					<int key="connectionID">443</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">copyRuler:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="479856769"/>
					</object>
					<int key="connectionID">444</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">alignCenter:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="310547522"/>
					</object>
					<int key="connectionID">445</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">toggleRuler:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="420564933"/>
					</object>
					<int key="connectionID">446</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">alignRight:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="498119243"/>
					</object>
					<int key="connectionID">447</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">pasteRuler:</string>
						<reference key="source" ref="1014"/>
						<reference key="destination" ref="333628178"/>
					</object>
					<int key="connectionID">448</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">terminate:</string>
						<reference key="source" ref="1050"/>
						<reference key="destination" ref="632727374"/>
					</object>
					<int key="connectionID">449</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">delegate</string>
						<reference key="source" ref="1021"/>
						<reference key="destination" ref="635946545"/>
					</object>
					<int key="connectionID">451</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBActionConnection" key="connection">
						<string key="label">takeDoubleValueFrom:</string>
						<reference key="source" ref="160623561"/>
						<reference key="destination" ref="974764906"/>
					</object>
					<int key="connectionID">458</int>
				</object>
				<object class="IBConnectionRecord">
					<object class="IBOutletConnection" key="connection">
						<string key="label">theWindow</string>
						<reference key="source" ref="635946545"/>
						<reference key="destination" ref="972006081"/>
					</object>
					<int key="connectionID">459</int>
				</object>
			</object>
			<object class="IBMutableOrderedSet" key="objectRecords">
				<object class="NSArray" key="orderedObjects">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<object class="IBObjectRecord">
						<int key="objectID">0</int>
						<object class="NSArray" key="object" id="1049">
							<bool key="EncodedWithXMLCoder">YES</bool>
						</object>
						<reference key="children" ref="1048"/>
						<nil key="parent"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">-2</int>
						<reference key="object" ref="1021"/>
						<reference key="parent" ref="1049"/>
						<string key="objectName">File's Owner</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">-1</int>
						<reference key="object" ref="1014"/>
						<reference key="parent" ref="1049"/>
						<string key="objectName">First Responder</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">-3</int>
						<reference key="object" ref="1050"/>
						<reference key="parent" ref="1049"/>
						<string key="objectName">Application</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">29</int>
						<reference key="object" ref="649796088"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="713487014"/>
							<reference ref="694149608"/>
							<reference ref="391199113"/>
							<reference ref="952259628"/>
							<reference ref="379814623"/>
							<reference ref="586577488"/>
							<reference ref="302598603"/>
						</object>
						<reference key="parent" ref="1049"/>
						<string key="objectName">MainMenu</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">19</int>
						<reference key="object" ref="713487014"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="835318025"/>
						</object>
						<reference key="parent" ref="649796088"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">56</int>
						<reference key="object" ref="694149608"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="110575045"/>
						</object>
						<reference key="parent" ref="649796088"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">103</int>
						<reference key="object" ref="391199113"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="374024848"/>
						</object>
						<reference key="parent" ref="649796088"/>
						<string key="objectName">1</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">217</int>
						<reference key="object" ref="952259628"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="789758025"/>
						</object>
						<reference key="parent" ref="649796088"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">83</int>
						<reference key="object" ref="379814623"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="720053764"/>
						</object>
						<reference key="parent" ref="649796088"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">81</int>
						<reference key="object" ref="720053764"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="1023925487"/>
							<reference ref="117038363"/>
							<reference ref="49223823"/>
							<reference ref="722745758"/>
							<reference ref="705341025"/>
							<reference ref="1025936716"/>
							<reference ref="294629803"/>
							<reference ref="776162233"/>
							<reference ref="425164168"/>
							<reference ref="579971712"/>
							<reference ref="1010469920"/>
						</object>
						<reference key="parent" ref="379814623"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">75</int>
						<reference key="object" ref="1023925487"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">3</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">80</int>
						<reference key="object" ref="117038363"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">8</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">78</int>
						<reference key="object" ref="49223823"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">6</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">72</int>
						<reference key="object" ref="722745758"/>
						<reference key="parent" ref="720053764"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">82</int>
						<reference key="object" ref="705341025"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">9</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">124</int>
						<reference key="object" ref="1025936716"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="1065607017"/>
						</object>
						<reference key="parent" ref="720053764"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">77</int>
						<reference key="object" ref="294629803"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">5</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">73</int>
						<reference key="object" ref="776162233"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">1</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">79</int>
						<reference key="object" ref="425164168"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">7</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">112</int>
						<reference key="object" ref="579971712"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">10</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">74</int>
						<reference key="object" ref="1010469920"/>
						<reference key="parent" ref="720053764"/>
						<string key="objectName">2</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">125</int>
						<reference key="object" ref="1065607017"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="759406840"/>
						</object>
						<reference key="parent" ref="1025936716"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">126</int>
						<reference key="object" ref="759406840"/>
						<reference key="parent" ref="1065607017"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">205</int>
						<reference key="object" ref="789758025"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="437104165"/>
							<reference ref="583158037"/>
							<reference ref="1058277027"/>
							<reference ref="212016141"/>
							<reference ref="296257095"/>
							<reference ref="29853731"/>
							<reference ref="860595796"/>
							<reference ref="1040322652"/>
							<reference ref="790794224"/>
							<reference ref="892235320"/>
							<reference ref="972420730"/>
							<reference ref="676164635"/>
							<reference ref="507821607"/>
						</object>
						<reference key="parent" ref="952259628"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">202</int>
						<reference key="object" ref="437104165"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">198</int>
						<reference key="object" ref="583158037"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">207</int>
						<reference key="object" ref="1058277027"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">214</int>
						<reference key="object" ref="212016141"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">199</int>
						<reference key="object" ref="296257095"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">203</int>
						<reference key="object" ref="29853731"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">197</int>
						<reference key="object" ref="860595796"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">206</int>
						<reference key="object" ref="1040322652"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">215</int>
						<reference key="object" ref="790794224"/>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">218</int>
						<reference key="object" ref="892235320"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="963351320"/>
						</object>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">216</int>
						<reference key="object" ref="972420730"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="769623530"/>
						</object>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">200</int>
						<reference key="object" ref="769623530"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="948374510"/>
							<reference ref="96193923"/>
							<reference ref="679648819"/>
							<reference ref="967646866"/>
						</object>
						<reference key="parent" ref="972420730"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">219</int>
						<reference key="object" ref="948374510"/>
						<reference key="parent" ref="769623530"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">201</int>
						<reference key="object" ref="96193923"/>
						<reference key="parent" ref="769623530"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">204</int>
						<reference key="object" ref="679648819"/>
						<reference key="parent" ref="769623530"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">220</int>
						<reference key="object" ref="963351320"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="270902937"/>
							<reference ref="88285865"/>
							<reference ref="159080638"/>
							<reference ref="326711663"/>
							<reference ref="447796847"/>
						</object>
						<reference key="parent" ref="892235320"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">213</int>
						<reference key="object" ref="270902937"/>
						<reference key="parent" ref="963351320"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">210</int>
						<reference key="object" ref="88285865"/>
						<reference key="parent" ref="963351320"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">221</int>
						<reference key="object" ref="159080638"/>
						<reference key="parent" ref="963351320"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">208</int>
						<reference key="object" ref="326711663"/>
						<reference key="parent" ref="963351320"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">209</int>
						<reference key="object" ref="447796847"/>
						<reference key="parent" ref="963351320"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">106</int>
						<reference key="object" ref="374024848"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="238773614"/>
						</object>
						<reference key="parent" ref="391199113"/>
						<string key="objectName">2</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">111</int>
						<reference key="object" ref="238773614"/>
						<reference key="parent" ref="374024848"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">57</int>
						<reference key="object" ref="110575045"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="238522557"/>
							<reference ref="755159360"/>
							<reference ref="908899353"/>
							<reference ref="632727374"/>
							<reference ref="646227648"/>
							<reference ref="609285721"/>
							<reference ref="481834944"/>
							<reference ref="304266470"/>
							<reference ref="1046388886"/>
							<reference ref="1056857174"/>
							<reference ref="342932134"/>
						</object>
						<reference key="parent" ref="694149608"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">58</int>
						<reference key="object" ref="238522557"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">134</int>
						<reference key="object" ref="755159360"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">150</int>
						<reference key="object" ref="908899353"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">136</int>
						<reference key="object" ref="632727374"/>
						<reference key="parent" ref="110575045"/>
						<string key="objectName">1111</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">144</int>
						<reference key="object" ref="646227648"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">129</int>
						<reference key="object" ref="609285721"/>
						<reference key="parent" ref="110575045"/>
						<string key="objectName">121</string>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">143</int>
						<reference key="object" ref="481834944"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">236</int>
						<reference key="object" ref="304266470"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">131</int>
						<reference key="object" ref="1046388886"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="752062318"/>
						</object>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">149</int>
						<reference key="object" ref="1056857174"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">145</int>
						<reference key="object" ref="342932134"/>
						<reference key="parent" ref="110575045"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">130</int>
						<reference key="object" ref="752062318"/>
						<reference key="parent" ref="1046388886"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">24</int>
						<reference key="object" ref="835318025"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="299356726"/>
							<reference ref="625202149"/>
							<reference ref="575023229"/>
							<reference ref="1011231497"/>
						</object>
						<reference key="parent" ref="713487014"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">92</int>
						<reference key="object" ref="299356726"/>
						<reference key="parent" ref="835318025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">5</int>
						<reference key="object" ref="625202149"/>
						<reference key="parent" ref="835318025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">239</int>
						<reference key="object" ref="575023229"/>
						<reference key="parent" ref="835318025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">23</int>
						<reference key="object" ref="1011231497"/>
						<reference key="parent" ref="835318025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">295</int>
						<reference key="object" ref="586577488"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="466310130"/>
						</object>
						<reference key="parent" ref="649796088"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">296</int>
						<reference key="object" ref="466310130"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="102151532"/>
							<reference ref="237841660"/>
						</object>
						<reference key="parent" ref="586577488"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">297</int>
						<reference key="object" ref="102151532"/>
						<reference key="parent" ref="466310130"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">298</int>
						<reference key="object" ref="237841660"/>
						<reference key="parent" ref="466310130"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">211</int>
						<reference key="object" ref="676164635"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="785027613"/>
						</object>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">212</int>
						<reference key="object" ref="785027613"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="680220178"/>
							<reference ref="731782645"/>
						</object>
						<reference key="parent" ref="676164635"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">195</int>
						<reference key="object" ref="680220178"/>
						<reference key="parent" ref="785027613"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">196</int>
						<reference key="object" ref="731782645"/>
						<reference key="parent" ref="785027613"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">346</int>
						<reference key="object" ref="967646866"/>
						<reference key="parent" ref="769623530"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">348</int>
						<reference key="object" ref="507821607"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="698887838"/>
						</object>
						<reference key="parent" ref="789758025"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">349</int>
						<reference key="object" ref="698887838"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="605118523"/>
							<reference ref="197661976"/>
							<reference ref="708854459"/>
						</object>
						<reference key="parent" ref="507821607"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">350</int>
						<reference key="object" ref="605118523"/>
						<reference key="parent" ref="698887838"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">351</int>
						<reference key="object" ref="197661976"/>
						<reference key="parent" ref="698887838"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">354</int>
						<reference key="object" ref="708854459"/>
						<reference key="parent" ref="698887838"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">371</int>
						<reference key="object" ref="972006081"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="439893737"/>
						</object>
						<reference key="parent" ref="1049"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">372</int>
						<reference key="object" ref="439893737"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="329227068"/>
							<reference ref="260622014"/>
							<reference ref="245020381"/>
							<reference ref="887531999"/>
							<reference ref="1008327448"/>
							<reference ref="986945989"/>
							<reference ref="269416192"/>
							<reference ref="160623561"/>
							<reference ref="974764906"/>
							<reference ref="425832453"/>
							<reference ref="873182938"/>
						</object>
						<reference key="parent" ref="972006081"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">375</int>
						<reference key="object" ref="302598603"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="941447902"/>
						</object>
						<reference key="parent" ref="649796088"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">376</int>
						<reference key="object" ref="941447902"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="792887677"/>
							<reference ref="15516124"/>
						</object>
						<reference key="parent" ref="302598603"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">377</int>
						<reference key="object" ref="792887677"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="786677654"/>
						</object>
						<reference key="parent" ref="941447902"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">378</int>
						<reference key="object" ref="15516124"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="23081656"/>
						</object>
						<reference key="parent" ref="941447902"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">379</int>
						<reference key="object" ref="23081656"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="135107054"/>
							<reference ref="310547522"/>
							<reference ref="436088763"/>
							<reference ref="498119243"/>
							<reference ref="607995063"/>
							<reference ref="420564933"/>
							<reference ref="479856769"/>
							<reference ref="333628178"/>
						</object>
						<reference key="parent" ref="15516124"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">380</int>
						<reference key="object" ref="135107054"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">381</int>
						<reference key="object" ref="310547522"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">382</int>
						<reference key="object" ref="436088763"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">383</int>
						<reference key="object" ref="498119243"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">384</int>
						<reference key="object" ref="607995063"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">385</int>
						<reference key="object" ref="420564933"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">386</int>
						<reference key="object" ref="479856769"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">387</int>
						<reference key="object" ref="333628178"/>
						<reference key="parent" ref="23081656"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">388</int>
						<reference key="object" ref="786677654"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="159677712"/>
							<reference ref="305399458"/>
							<reference ref="814362025"/>
							<reference ref="330926929"/>
							<reference ref="533507878"/>
							<reference ref="158063935"/>
							<reference ref="885547335"/>
							<reference ref="901062459"/>
							<reference ref="767671776"/>
							<reference ref="691570813"/>
							<reference ref="769124883"/>
							<reference ref="739652853"/>
							<reference ref="1012600125"/>
							<reference ref="214559597"/>
							<reference ref="596732606"/>
							<reference ref="393423671"/>
						</object>
						<reference key="parent" ref="792887677"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">389</int>
						<reference key="object" ref="159677712"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">390</int>
						<reference key="object" ref="305399458"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">391</int>
						<reference key="object" ref="814362025"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">392</int>
						<reference key="object" ref="330926929"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">393</int>
						<reference key="object" ref="533507878"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">394</int>
						<reference key="object" ref="158063935"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">395</int>
						<reference key="object" ref="885547335"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">396</int>
						<reference key="object" ref="901062459"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">397</int>
						<reference key="object" ref="767671776"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="175441468"/>
						</object>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">398</int>
						<reference key="object" ref="691570813"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="1058217995"/>
						</object>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">399</int>
						<reference key="object" ref="769124883"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="18263474"/>
						</object>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">400</int>
						<reference key="object" ref="739652853"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">401</int>
						<reference key="object" ref="1012600125"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">402</int>
						<reference key="object" ref="214559597"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">403</int>
						<reference key="object" ref="596732606"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">404</int>
						<reference key="object" ref="393423671"/>
						<reference key="parent" ref="786677654"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">405</int>
						<reference key="object" ref="18263474"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="257962622"/>
							<reference ref="644725453"/>
							<reference ref="1037576581"/>
							<reference ref="941806246"/>
							<reference ref="1045724900"/>
						</object>
						<reference key="parent" ref="769124883"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">406</int>
						<reference key="object" ref="257962622"/>
						<reference key="parent" ref="18263474"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">407</int>
						<reference key="object" ref="644725453"/>
						<reference key="parent" ref="18263474"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">408</int>
						<reference key="object" ref="1037576581"/>
						<reference key="parent" ref="18263474"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">409</int>
						<reference key="object" ref="941806246"/>
						<reference key="parent" ref="18263474"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">410</int>
						<reference key="object" ref="1045724900"/>
						<reference key="parent" ref="18263474"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">411</int>
						<reference key="object" ref="1058217995"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="706297211"/>
							<reference ref="568384683"/>
							<reference ref="663508465"/>
						</object>
						<reference key="parent" ref="691570813"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">412</int>
						<reference key="object" ref="706297211"/>
						<reference key="parent" ref="1058217995"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">413</int>
						<reference key="object" ref="568384683"/>
						<reference key="parent" ref="1058217995"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">414</int>
						<reference key="object" ref="663508465"/>
						<reference key="parent" ref="1058217995"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">415</int>
						<reference key="object" ref="175441468"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="252969304"/>
							<reference ref="766922938"/>
							<reference ref="677519740"/>
							<reference ref="238351151"/>
						</object>
						<reference key="parent" ref="767671776"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">416</int>
						<reference key="object" ref="252969304"/>
						<reference key="parent" ref="175441468"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">417</int>
						<reference key="object" ref="766922938"/>
						<reference key="parent" ref="175441468"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">418</int>
						<reference key="object" ref="677519740"/>
						<reference key="parent" ref="175441468"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">419</int>
						<reference key="object" ref="238351151"/>
						<reference key="parent" ref="175441468"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">450</int>
						<reference key="object" ref="635946545"/>
						<reference key="parent" ref="1049"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">452</int>
						<reference key="object" ref="974764906"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="600801425"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">453</int>
						<reference key="object" ref="600801425"/>
						<reference key="parent" ref="974764906"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">456</int>
						<reference key="object" ref="160623561"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="46991665"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">457</int>
						<reference key="object" ref="46991665"/>
						<reference key="parent" ref="160623561"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">460</int>
						<reference key="object" ref="269416192"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="884009277"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">461</int>
						<reference key="object" ref="884009277"/>
						<reference key="parent" ref="269416192"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">462</int>
						<reference key="object" ref="329227068"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="29170013"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">463</int>
						<reference key="object" ref="29170013"/>
						<reference key="parent" ref="329227068"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">464</int>
						<reference key="object" ref="873182938"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="321734027"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">465</int>
						<reference key="object" ref="321734027"/>
						<reference key="parent" ref="873182938"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">466</int>
						<reference key="object" ref="260622014"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="203136106"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">467</int>
						<reference key="object" ref="203136106"/>
						<reference key="parent" ref="260622014"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">468</int>
						<reference key="object" ref="245020381"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="907594643"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">469</int>
						<reference key="object" ref="907594643"/>
						<reference key="parent" ref="245020381"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">470</int>
						<reference key="object" ref="887531999"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="180467905"/>
							<reference ref="447172030"/>
							<reference ref="947963337"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">471</int>
						<reference key="object" ref="180467905"/>
						<reference key="parent" ref="887531999"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">472</int>
						<reference key="object" ref="447172030"/>
						<reference key="parent" ref="887531999"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">473</int>
						<reference key="object" ref="947963337"/>
						<reference key="parent" ref="887531999"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">474</int>
						<reference key="object" ref="425832453"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="163446784"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">475</int>
						<reference key="object" ref="163446784"/>
						<reference key="parent" ref="425832453"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">476</int>
						<reference key="object" ref="1008327448"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="518752231"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">477</int>
						<reference key="object" ref="518752231"/>
						<reference key="parent" ref="1008327448"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">478</int>
						<reference key="object" ref="986945989"/>
						<object class="NSMutableArray" key="children">
							<bool key="EncodedWithXMLCoder">YES</bool>
							<reference ref="89007552"/>
						</object>
						<reference key="parent" ref="439893737"/>
					</object>
					<object class="IBObjectRecord">
						<int key="objectID">479</int>
						<reference key="object" ref="89007552"/>
						<reference key="parent" ref="986945989"/>
					</object>
				</object>
			</object>
			<object class="NSMutableDictionary" key="flattenedProperties">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<object class="NSArray" key="dict.sortedKeys">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<string>-3.IBPluginDependency</string>
					<string>103.IBPluginDependency</string>
					<string>103.ImportedFromIB2</string>
					<string>106.IBPluginDependency</string>
					<string>106.ImportedFromIB2</string>
					<string>106.editorWindowContentRectSynchronizationRect</string>
					<string>111.IBPluginDependency</string>
					<string>111.ImportedFromIB2</string>
					<string>112.IBPluginDependency</string>
					<string>112.ImportedFromIB2</string>
					<string>124.IBPluginDependency</string>
					<string>124.ImportedFromIB2</string>
					<string>125.IBPluginDependency</string>
					<string>125.ImportedFromIB2</string>
					<string>125.editorWindowContentRectSynchronizationRect</string>
					<string>126.IBPluginDependency</string>
					<string>126.ImportedFromIB2</string>
					<string>129.IBPluginDependency</string>
					<string>129.ImportedFromIB2</string>
					<string>130.IBPluginDependency</string>
					<string>130.ImportedFromIB2</string>
					<string>130.editorWindowContentRectSynchronizationRect</string>
					<string>131.IBPluginDependency</string>
					<string>131.ImportedFromIB2</string>
					<string>134.IBPluginDependency</string>
					<string>134.ImportedFromIB2</string>
					<string>136.IBPluginDependency</string>
					<string>136.ImportedFromIB2</string>
					<string>143.IBPluginDependency</string>
					<string>143.ImportedFromIB2</string>
					<string>144.IBPluginDependency</string>
					<string>144.ImportedFromIB2</string>
					<string>145.IBPluginDependency</string>
					<string>145.ImportedFromIB2</string>
					<string>149.IBPluginDependency</string>
					<string>149.ImportedFromIB2</string>
					<string>150.IBPluginDependency</string>
					<string>150.ImportedFromIB2</string>
					<string>19.IBPluginDependency</string>
					<string>19.ImportedFromIB2</string>
					<string>195.IBPluginDependency</string>
					<string>195.ImportedFromIB2</string>
					<string>196.IBPluginDependency</string>
					<string>196.ImportedFromIB2</string>
					<string>197.IBPluginDependency</string>
					<string>197.ImportedFromIB2</string>
					<string>198.IBPluginDependency</string>
					<string>198.ImportedFromIB2</string>
					<string>199.IBPluginDependency</string>
					<string>199.ImportedFromIB2</string>
					<string>200.IBPluginDependency</string>
					<string>200.ImportedFromIB2</string>
					<string>200.editorWindowContentRectSynchronizationRect</string>
					<string>201.IBPluginDependency</string>
					<string>201.ImportedFromIB2</string>
					<string>202.IBPluginDependency</string>
					<string>202.ImportedFromIB2</string>
					<string>203.IBPluginDependency</string>
					<string>203.ImportedFromIB2</string>
					<string>204.IBPluginDependency</string>
					<string>204.ImportedFromIB2</string>
					<string>205.IBPluginDependency</string>
					<string>205.ImportedFromIB2</string>
					<string>205.editorWindowContentRectSynchronizationRect</string>
					<string>206.IBPluginDependency</string>
					<string>206.ImportedFromIB2</string>
					<string>207.IBPluginDependency</string>
					<string>207.ImportedFromIB2</string>
					<string>208.IBPluginDependency</string>
					<string>208.ImportedFromIB2</string>
					<string>209.IBPluginDependency</string>
					<string>209.ImportedFromIB2</string>
					<string>210.IBPluginDependency</string>
					<string>210.ImportedFromIB2</string>
					<string>211.IBPluginDependency</string>
					<string>211.ImportedFromIB2</string>
					<string>212.IBPluginDependency</string>
					<string>212.ImportedFromIB2</string>
					<string>212.editorWindowContentRectSynchronizationRect</string>
					<string>213.IBPluginDependency</string>
					<string>213.ImportedFromIB2</string>
					<string>214.IBPluginDependency</string>
					<string>214.ImportedFromIB2</string>
					<string>215.IBPluginDependency</string>
					<string>215.ImportedFromIB2</string>
					<string>216.IBPluginDependency</string>
					<string>216.ImportedFromIB2</string>
					<string>217.IBPluginDependency</string>
					<string>217.ImportedFromIB2</string>
					<string>218.IBPluginDependency</string>
					<string>218.ImportedFromIB2</string>
					<string>219.IBPluginDependency</string>
					<string>219.ImportedFromIB2</string>
					<string>220.IBPluginDependency</string>
					<string>220.ImportedFromIB2</string>
					<string>220.editorWindowContentRectSynchronizationRect</string>
					<string>221.IBPluginDependency</string>
					<string>221.ImportedFromIB2</string>
					<string>23.IBPluginDependency</string>
					<string>23.ImportedFromIB2</string>
					<string>236.IBPluginDependency</string>
					<string>236.ImportedFromIB2</string>
					<string>239.IBPluginDependency</string>
					<string>239.ImportedFromIB2</string>
					<string>24.IBPluginDependency</string>
					<string>24.ImportedFromIB2</string>
					<string>24.editorWindowContentRectSynchronizationRect</string>
					<string>29.IBEditorWindowLastContentRect</string>
					<string>29.IBPluginDependency</string>
					<string>29.ImportedFromIB2</string>
					<string>29.WindowOrigin</string>
					<string>29.editorWindowContentRectSynchronizationRect</string>
					<string>295.IBPluginDependency</string>
					<string>296.IBPluginDependency</string>
					<string>296.editorWindowContentRectSynchronizationRect</string>
					<string>297.IBPluginDependency</string>
					<string>298.IBPluginDependency</string>
					<string>346.IBPluginDependency</string>
					<string>346.ImportedFromIB2</string>
					<string>348.IBPluginDependency</string>
					<string>348.ImportedFromIB2</string>
					<string>349.IBPluginDependency</string>
					<string>349.ImportedFromIB2</string>
					<string>349.editorWindowContentRectSynchronizationRect</string>
					<string>350.IBPluginDependency</string>
					<string>350.ImportedFromIB2</string>
					<string>351.IBPluginDependency</string>
					<string>351.ImportedFromIB2</string>
					<string>354.IBPluginDependency</string>
					<string>354.ImportedFromIB2</string>
					<string>371.IBEditorWindowLastContentRect</string>
					<string>371.IBPluginDependency</string>
					<string>371.IBWindowTemplateEditedContentRect</string>
					<string>371.NSWindowTemplate.visibleAtLaunch</string>
					<string>371.editorWindowContentRectSynchronizationRect</string>
					<string>371.windowTemplate.maxSize</string>
					<string>372.IBPluginDependency</string>
					<string>375.IBPluginDependency</string>
					<string>376.IBEditorWindowLastContentRect</string>
					<string>376.IBPluginDependency</string>
					<string>377.IBPluginDependency</string>
					<string>378.IBPluginDependency</string>
					<string>379.IBPluginDependency</string>
					<string>380.IBPluginDependency</string>
					<string>381.IBPluginDependency</string>
					<string>382.IBPluginDependency</string>
					<string>383.IBPluginDependency</string>
					<string>384.IBPluginDependency</string>
					<string>385.IBPluginDependency</string>
					<string>386.IBPluginDependency</string>
					<string>387.IBPluginDependency</string>
					<string>388.IBEditorWindowLastContentRect</string>
					<string>388.IBPluginDependency</string>
					<string>389.IBPluginDependency</string>
					<string>390.IBPluginDependency</string>
					<string>391.IBPluginDependency</string>
					<string>392.IBPluginDependency</string>
					<string>393.IBPluginDependency</string>
					<string>394.IBPluginDependency</string>
					<string>395.IBPluginDependency</string>
					<string>396.IBPluginDependency</string>
					<string>397.IBPluginDependency</string>
					<string>398.IBPluginDependency</string>
					<string>399.IBPluginDependency</string>
					<string>400.IBPluginDependency</string>
					<string>401.IBPluginDependency</string>
					<string>402.IBPluginDependency</string>
					<string>403.IBPluginDependency</string>
					<string>404.IBPluginDependency</string>
					<string>405.IBPluginDependency</string>
					<string>406.IBPluginDependency</string>
					<string>407.IBPluginDependency</string>
					<string>408.IBPluginDependency</string>
					<string>409.IBPluginDependency</string>
					<string>410.IBPluginDependency</string>
					<string>411.IBPluginDependency</string>
					<string>412.IBPluginDependency</string>
					<string>413.IBPluginDependency</string>
					<string>414.IBPluginDependency</string>
					<string>415.IBPluginDependency</string>
					<string>416.IBPluginDependency</string>
					<string>417.IBPluginDependency</string>
					<string>418.IBPluginDependency</string>
					<string>419.IBPluginDependency</string>
					<string>452.IBPluginDependency</string>
					<string>452.IBViewBoundsToFrameTransform</string>
					<string>453.IBPluginDependency</string>
					<string>456.IBPluginDependency</string>
					<string>456.IBViewBoundsToFrameTransform</string>
					<string>457.IBPluginDependency</string>
					<string>460.IBPluginDependency</string>
					<string>460.IBViewBoundsToFrameTransform</string>
					<string>461.IBPluginDependency</string>
					<string>462.IBPluginDependency</string>
					<string>462.IBViewBoundsToFrameTransform</string>
					<string>463.IBPluginDependency</string>
					<string>464.IBPluginDependency</string>
					<string>464.IBViewBoundsToFrameTransform</string>
					<string>465.IBPluginDependency</string>
					<string>466.IBPluginDependency</string>
					<string>466.IBViewBoundsToFrameTransform</string>
					<string>467.IBPluginDependency</string>
					<string>468.IBPluginDependency</string>
					<string>468.IBViewBoundsToFrameTransform</string>
					<string>469.IBPluginDependency</string>
					<string>470.IBPluginDependency</string>
					<string>470.IBViewBoundsToFrameTransform</string>
					<string>471.IBPluginDependency</string>
					<string>472.IBPluginDependency</string>
					<string>473.IBPluginDependency</string>
					<string>474.IBPluginDependency</string>
					<string>474.IBViewBoundsToFrameTransform</string>
					<string>475.IBPluginDependency</string>
					<string>476.IBPluginDependency</string>
					<string>477.IBPluginDependency</string>
					<string>478.IBPluginDependency</string>
					<string>478.IBViewBoundsToFrameTransform</string>
					<string>479.IBPluginDependency</string>
					<string>5.IBPluginDependency</string>
					<string>5.ImportedFromIB2</string>
					<string>56.IBPluginDependency</string>
					<string>56.ImportedFromIB2</string>
					<string>57.IBEditorWindowLastContentRect</string>
					<string>57.IBPluginDependency</string>
					<string>57.ImportedFromIB2</string>
					<string>57.editorWindowContentRectSynchronizationRect</string>
					<string>58.IBPluginDependency</string>
					<string>58.ImportedFromIB2</string>
					<string>72.IBPluginDependency</string>
					<string>72.ImportedFromIB2</string>
					<string>73.IBPluginDependency</string>
					<string>73.ImportedFromIB2</string>
					<string>74.IBPluginDependency</string>
					<string>74.ImportedFromIB2</string>
					<string>75.IBPluginDependency</string>
					<string>75.ImportedFromIB2</string>
					<string>77.IBPluginDependency</string>
					<string>77.ImportedFromIB2</string>
					<string>78.IBPluginDependency</string>
					<string>78.ImportedFromIB2</string>
					<string>79.IBPluginDependency</string>
					<string>79.ImportedFromIB2</string>
					<string>80.IBPluginDependency</string>
					<string>80.ImportedFromIB2</string>
					<string>81.IBPluginDependency</string>
					<string>81.ImportedFromIB2</string>
					<string>81.editorWindowContentRectSynchronizationRect</string>
					<string>82.IBPluginDependency</string>
					<string>82.ImportedFromIB2</string>
					<string>83.IBPluginDependency</string>
					<string>83.ImportedFromIB2</string>
					<string>92.IBPluginDependency</string>
					<string>92.ImportedFromIB2</string>
				</object>
				<object class="NSMutableArray" key="dict.values">
					<bool key="EncodedWithXMLCoder">YES</bool>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{596, 852}, {216, 23}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{522, 812}, {146, 23}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{436, 809}, {64, 6}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{608, 612}, {275, 83}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{187, 434}, {243, 243}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{608, 612}, {167, 43}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{608, 612}, {241, 103}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{525, 802}, {197, 73}}</string>
					<string>{{143, 285}, {478, 20}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{74, 862}</string>
					<string>{{6, 978}, {478, 20}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{475, 832}, {234, 43}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{608, 612}, {215, 63}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{244, 238}, {489, 449}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{244, 238}, {489, 449}}</string>
					<integer value="1"/>
					<string>{{33, 99}, {480, 360}}</string>
					<string>{3.40282e+38, 3.40282e+38}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{437, 242}, {86, 43}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>{{523, 2}, {178, 283}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDRgAAwgwAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDRgAAwyUAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDPgAAw6QAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCmgAAw40AAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCCAAAw7wAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCpAAAw4qAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCCAAAw3oAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCsgAAw1wAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABDQAAAw4cAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<object class="NSAffineTransform">
						<bytes key="NSTransformStruct">P4AAAL+AAABCAAAAwvAAAA</bytes>
					</object>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{155, 102}, {245, 183}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{23, 794}, {245, 183}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>{{145, 474}, {199, 203}}</string>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
					<integer value="1"/>
				</object>
			</object>
			<object class="NSMutableDictionary" key="unlocalizedProperties">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<reference key="dict.sortedKeys" ref="1049"/>
				<object class="NSMutableArray" key="dict.values">
					<bool key="EncodedWithXMLCoder">YES</bool>
				</object>
			</object>
			<nil key="activeLocalization"/>
			<object class="NSMutableDictionary" key="localizations">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<reference key="dict.sortedKeys" ref="1049"/>
				<object class="NSMutableArray" key="dict.values">
					<bool key="EncodedWithXMLCoder">YES</bool>
				</object>
			</object>
			<nil key="sourceID"/>
			<int key="maxID">479</int>
		</object>
		<object class="IBClassDescriber" key="IBDocument.Classes">
			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<object class="IBPartialClassDescription">
					<string key="className">AppController</string>
					<object class="NSMutableDictionary" key="outlets">
						<string key="NS.key.0">theWindow</string>
						<string key="NS.object.0">NSWindow</string>
					</object>
					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
						<string key="NS.key.0">theWindow</string>
						<object class="IBToOneOutletInfo" key="NS.object.0">
							<string key="name">theWindow</string>
							<string key="candidateClassName">NSWindow</string>
						</object>
					</object>
					<object class="IBClassDescriptionSource" key="sourceIdentifier">
						<string key="majorKey">IBUserSource</string>
						<string key="minorKey"/>
					</object>
				</object>
			</object>
		</object>
		<int key="IBDocument.localizationMode">0</int>
		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
			<integer value="1050" key="NS.object.0"/>
		</object>
		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
			<integer value="3000" key="NS.object.0"/>
		</object>
		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
		<string key="IBDocument.LastKnownRelativeProjectPath">../adsfsdf.xcodeproj</string>
		<int key="IBDocument.defaultPropertyAccessControl">3</int>
		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
			<bool key="EncodedWithXMLCoder">YES</bool>
			<object class="NSArray" key="dict.sortedKeys">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<string>NSMenuCheckmark</string>
				<string>NSMenuMixedState</string>
			</object>
			<object class="NSMutableArray" key="dict.values">
				<bool key="EncodedWithXMLCoder">YES</bool>
				<string>{9, 8}</string>
				<string>{7, 2}</string>
			</object>
		</object>
	</data>
</archive>

Added Site/Site_Z/Resources/spinner.gif.

cannot compute difference between binary files

Added Site/Site_Z/index-debug.html.

















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!--
 index-debug.html
 Site

 Created by You on November 17, 2010.
 Copyright 2010, Your Company All rights reserved.
-->
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
        <meta http-equiv="X-UA-Compatible" content="chrome=1" />

        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />

        <link rel="apple-touch-icon" href="Resources/icon.png" />
        <link rel="apple-touch-startup-image" href="Resources/default.png" />

        <title>Site</title>

        <script type="text/javascript">
            OBJJ_MAIN_FILE = "main.j";
            OBJJ_INCLUDE_PATHS = ["Frameworks/Debug", "Frameworks", "SomethingElse"];
        </script>
        
        <script type="text/javascript" src="Frameworks/Debug/Objective-J/Objective-J.js" charset="UTF-8"></script>

        <script type="text/javascript">
            objj_msgSend_reset();

            // DEBUG OPTIONS:

            // Uncomment to enable printing of backtraces on exceptions:
            //objj_msgSend_decorate(objj_backtrace_decorator);
            
            // Uncomment to supress exceptions that take place inside a message
            //objj_msgSend_decorate(objj_supress_exceptions_decorator)

            // Uncomment to enable runtime type checking:
            //objj_msgSend_decorate(objj_typecheck_decorator);

            // Uncomment (along with both above) to print backtraces on type check errors:
            //objj_typecheck_prints_backtrace = true;

            // Uncomment to disable the default logger (CPLogConsole if window.console exists, CPLogPopup otherwise):
            //CPLogUnregister(CPLogDefault);

            // Uncomment to enable a specific logger:
            //CPLogRegister(CPLogConsole);
            //CPLogRegister(CPLogPopup);
        </script>
        
        <style type="text/css">
            body{margin:0; padding:0;}
            #container {position: absolute; top:50%; left:50%;}
            #content {width:800px; text-align:center; margin-left: -400px; height:50px; margin-top:-25px; line-height: 50px;}
            #content {font-family: "Helvetica", "Arial", sans-serif; font-size: 18px; color: black; text-shadow: 0px 1px 0px white; }
            #loadgraphic {margin-right: 0.2em; margin-bottom:-2px;}
        </style>

        <!--[if lt IE 7]>
        <STYLE type="text/css">
            #container { position: relative; top: 50%; }
            #content { position: relative;}
        </STYLE>
        <![endif]-->

    </head>

    <body style="">
        <div id="cappuccino-body">
            <div id="loadingcontainer" style="background-color: #eeeeee; overflow:hidden; width:100%; height:100%; position: absolute; top: 0; left: 0;">
                <script type="text/javascript">
                    document.write("<div id='container'><p id='content'>" +
                                   "<img id='loadgraphic' width='16' height='16' src='Resources/spinner.gif' /> " +
                                   "Loading Site...</p></div>");
                </script>
        
                <noscript>
                    <div id="container">
                        <div style="width: 440px; padding: 10px 25px 20px 25px; font-family: sans-serif; background-color: #ffffff; position: relative; left: -245px; top: -120px; text-align: center; -moz-border-radius: 20px; -webkit-border-radius: 20px; color: #555555">
                            <p style="line-height: 1.4em;">JavaScript is required for this site to work correctly but is either disabled or not supported by your browser.</p>
                            <p style="font-size:120%; padding:10px;"><a href="http://cappuccino.org/noscript">Show me how to enable JavaScript</a></p>
                            <p style="font-size:80%;">You may want to upgrade to a newer browser while you're at it:</p>
                            <ul style="margin:0;padding:0; text-align: center; font-size:80%;" >
                                <li style="display: inline;"><a href="http://www.apple.com/safari/download/">Safari</a></li>
                                <li style="display: inline;"><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
                                <li style="display: inline;"><a href="http://www.google.com/chrome/">Chrome</a></li>
                                <li style="display: inline;"><a href="http://www.opera.com/download/">Opera</a></li>
                                <li style="display: inline;"><a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer</a></li>
                            </ul>
                        </div>
                    </div>
                </noscript>
            </div>
        </div>
    </body>

</html>

Added Site/Site_Z/index.html.





























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!--
 index.html
 Site

 Created by You on November 17, 2010.
 Copyright 2010, Your Company All rights reserved.
-->
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
        <meta http-equiv="X-UA-Compatible" content="chrome=1" />

        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="apple-mobile-web-app-status-bar-style" content="black" />

        <link rel="apple-touch-icon" href="Resources/icon.png" />
        <link rel="apple-touch-startup-image" href="Resources/default.png" />

        <title>Site</title>

        <script type="text/javascript">
            OBJJ_MAIN_FILE = "main.j";
        </script>
        
        <script type="text/javascript" src="Frameworks/Objective-J/Objective-J.js" charset="UTF-8"></script>

        <style type="text/css">
            body{margin:0; padding:0;}
            #container {position: absolute; top:50%; left:50%;}
            #content {width:800px; text-align:center; margin-left: -400px; height:50px; margin-top:-25px; line-height: 50px;}
            #content {font-family: "Helvetica", "Arial", sans-serif; font-size: 18px; color: black; text-shadow: 0px 1px 0px white; }
            #loadgraphic {margin-right: 0.2em; margin-bottom:-2px;}
        </style>

        <!--[if lt IE 7]>
        <STYLE type="text/css">
            #container { position: relative; top: 50%; }
            #content { position: relative;}
        </STYLE>
        <![endif]-->

    </head>

    <body style="">
        <div id="cappuccino-body">
            <div id="loadingcontainer" style="background-color: #eeeeee; overflow:hidden; width:100%; height:100%; position: absolute; top: 0; left: 0;">
                <script type="text/javascript">
                    document.write("<div id='container'><p id='content'>" +
                                   "<img id='loadgraphic' width='16' height='16' src='Resources/spinner.gif' /> " +
                                   "Loading Site...</p></div>");
                </script>
        
                <noscript>
                    <div id="container">
                        <div style="width: 440px; padding: 10px 25px 20px 25px; font-family: sans-serif; background-color: #ffffff; position: relative; left: -245px; top: -120px; text-align: center; -moz-border-radius: 20px; -webkit-border-radius: 20px; color: #555555">
                            <p style="line-height: 1.4em;">JavaScript is required for this site to work correctly but is either disabled or not supported by your browser.</p>
                            <p style="font-size:120%; padding:10px;"><a href="http://cappuccino.org/noscript">Show me how to enable JavaScript</a></p>
                            <p style="font-size:80%;">You may want to upgrade to a newer browser while you're at it:</p>
                            <ul style="margin:0;padding:0; text-align: center; font-size:80%;" >
                                <li style="display: inline;"><a href="http://www.apple.com/safari/download/">Safari</a></li>
                                <li style="display: inline;"><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
                                <li style="display: inline;"><a href="http://www.google.com/chrome/">Chrome</a></li>
                                <li style="display: inline;"><a href="http://www.opera.com/download/">Opera</a></li>
                                <li style="display: inline;"><a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">Internet Explorer</a></li>
                            </ul>
                        </div>
                    </div>
                </noscript>
            </div>
        </div>
    </body>

</html>

Added Site/Site_Z/main.j.





































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
 * AppController.j
 * Site
 *
 * Created by You on November 17, 2010.
 * Copyright 2010, Your Company All rights reserved.
 */

@import <Foundation/Foundation.j>
@import <AppKit/AppKit.j>

@import "AppController.j"


function main(args, namedArgs)
{
    CPApplicationMain(args, namedArgs);
}

Added Site/Site_j/Buttons/status.graffle.

cannot compute difference between binary files

Added Site/Site_j/Buttons/status.png.

cannot compute difference between binary files

Added Site/Site_j/inventory.js.



















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
// *************************************************
//
// INVENTORY PAGE
//
//	11-May-2011	Initial Version
//
// *************************************************

var FNET_IStatus;
var FNET_Inventory;
var FNET_NET_MAX = 30;		// Maximum net size
var FNET_NET_MIN = 1;

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//-----------------------------------------------------------------------
/*
	INVENTORY PAGE Major function
	
	DIV = INV_RUN_BLOCK
	
	(1) On entrance replace MANUAL_RUN with
			... Loading ....
			And read status
*/
//-----------------------------------------------------------------------

function INVENTORY_Operation()
{
	var path;
	var result;
	var outmsg;
	
	// Clear the area...
	$("#INV_RUN_BLOCK").replaceWith("<div id=\"INV_RUN_BLOCK\"><p><center>...Loading...</center></div>");
	
//	path = "http://localhost:5010";
//	FNET_IStatus = FNET_getData(path,false,"",false);
	
	// Get the status
	// Clear the map [2fbacd1fdc]
	path = lcnURI + "firenet/status/C";
	FNET_IStatus = FNET_getData(path,false,"",true);

	// Build the inventory
	
	INVENTORY_Handler();
		
}

//-----------------------------------------------------------------------
/*
		Update inventory Information
*/
//-----------------------------------------------------------------------

function INVENTORY_Handler()
{
	var i;
	var indx;
	var hdr;
	var body;
	var output;
	
	// Create a new inventory array
	
	FNET_Inventory = new Array();
	
	// Scan through each node and get the inventory information
	
	for( i=FNET_NET_MIN; i<= FNET_NET_MAX; i++ )
	{
		indx = i + "";
		if( FNET_IStatus[indx] != null )
		{
			FNET_Inventory[i] = INVENTORY_NodeData( indx );
		}
	}
	
	// Now build the table for this run
	
	hdr = INVENTORY_BuildHeader();
	body = INVENTORY_BuildBody( FNET_Inventory );
	
	output = "<div id=\"INV_RUN_BLOCK\"><p><center>";
	output = output + "<table id=\"MANUAL_TABLE\" border=1 align=center>";
	output = output + hdr + body;
	output = output + "</table></center></div>";
	$("#INV_RUN_BLOCK").replaceWith( output );	
}

//-----------------------------------------------------------------------
/*
	-- SUPPORT FUNCTIONS ---
*/
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
/*
		Get inventory information on 1 NODE
*/
//-----------------------------------------------------------------------
function INVENTORY_NodeData( node )
{
	var path;
	var result;
	var n;
	var output = new Array();
	
	// (1) Get the version information
	
	path = lcnURI + "firenet/version/" + node;
	result = INV_getData(path,false,"",true);
	
	output.VERSION = result.VERSION;
	
	// (2) Get the Firing time data
	
	path = lcnURI + "firenet/literal/" + node + "/T";
	result = INV_getData(path,true,"",true);
	
	result = result.DATA;
	n = result.length;
	output.FT = result.substring( n-4);

	// (3) Get the Backoff time data
	
	path = lcnURI + "firenet/literal/" + node + "/B";
	result = INV_getData(path,true,"",true);
	
	result = result.DATA;
	n = result.length;
	output.BACKOFF = result.substring( n-4);

	// (4) Get the Test mode data
	
	path = lcnURI + "firenet/literal/" + node + "/M";
	result = INV_getData(path,true,"",true);
	
	result = result.DATA;
	n = result.length;
	output.TEST = result.substring( n-1);
	
	
	return output;
}

function INV_getData( path, postState,data,flag )
{
	var count = 3;
	var result;
	
	while( count > 0 )
	{
		result = FNET_getData( path, postState,data,flag );
		if( result.STATUS == "XMIT" )
			break;
			
		FNET_SLEEP( 100 );
		count = count - 1
		
		result.DATA = "";
	}
	
	return result;
}
		
//-----------------------------------------------------------------------
//				-- DISPLAY FUNCTIONS --
//-----------------------------------------------------------------------

//-----------------------------------------------------------------------
/*
	INVENTORY_BuildHeader()
	
	INPUT:	NONE
	
	OUTPUT:	Return table header structure
*/
//-----------------------------------------------------------------------

function INVENTORY_BuildHeader()
{
	var tablehdr;
	var i;
	
	tablehdr = "<tr align=center>";
	tablehdr = tablehdr + "<th>Node</th>";
	tablehdr = tablehdr + "<th>Version</th>";
	tablehdr = tablehdr + "<th>Firing Time</th>";
	tablehdr = tablehdr + "<th>Backoff</th>";
	tablehdr = tablehdr + "<th>Test Mode</th>";
	tablehdr = tablehdr + "</tr>";
	
	return tablehdr;
}

//-----------------------------------------------------------------------
/*
	INVENTORY_BuildBody(inventory)
	
	INPUT:	NONE
	
	OUTPUT:	Return table body structure
*/
//-----------------------------------------------------------------------

function INVENTORY_BuildBody( inventory )
{
	var output = "";
	var i;
	
	// Build each row
	
	for( i=FNET_NET_MIN; i<= FNET_NET_MAX; i++ )
	{
		if( inventory[i] != null )
		{
			row = "<tr>";
			
			row = row + "<td>" + i + "</td>";
			row = row + "<td>" + inventory[i].VERSION + "</td>";
			row = row + "<td>" + inventory[i].FT + "</td>";
			row = row + "<td>" + inventory[i].BACKOFF + "</td>"
			row = row + "<td>" + inventory[i].TEST + "</td>"
			row = row + "</tr>";
		
			output = output + row;
		}
	}
	
	return output;
}

Added Site/rest/admin.lua.





































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
------------------------------------------------------------------------------------
--
-- REST - LEVEL 1	- Handles site following REST/ADMIN/....
--
--
--	This handles the ADMIN
--		ADMIN/TIME	and ADMIN/POWER done here
--		TIME		- GET Returns current system date/time
--		POWER/OFF	- POST Shuts down system (change leaf to POWER not system)
--		LOGIN		- Pass to login menu
------------------------------------------------------------------------------------

require "rest_sup"

print("--ADMIN LOADED--")

------------------------------------------------------------------------------------
--
--	admin_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function admin_handler(rqst,htype,url,n,al)
	local out
	
	rest_handler(rqst,htype,url,n,admin_actions)
end

------------------------------------------------------------------------------------
--
--	stop_handler(rqst,type,url,n,al)	- Shutdown system if requested
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, look at last link for stop
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function stop_handler(rqst,htype,url,n,al)
	local out
	local data
	
	-- Is this a POST, if so look at next command
	
	if( htype == HTTP_POST )
	then
		data = url[url.n]
		if( data ~= nil )
		then
		
			-- Look for key/value of SYSTEM : STOP
			
			if( data == "OFF" )
			then
				state.RUN = nil
				out = "{ \"POWER\" : \"OFF\" }"
			else
				if( data == "ON" )
				then
					out = "{ \"POWER\" : \"ON\" }"
				else
					out = "{ \"POWER\" : \"UNK-CMD\" }"
				end
			end
		else
			out = "{ \"POWER\" : \"NO_CMD\" }"
		end
	else
		out = "{ \"POWER\" : \"POST-NEEDED\" }"
	end
	
	-- Close the request
	
	rqst:close(out)
	
end

------------------------------------------------------------------------------------
--
--	time_handler(rqst,type,url,n,al)	- Return system time
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function time_handler(rqst,htype,url,n,al)

	local out

	-- Build return data of current system time
	
	out = os.date()
	out = string.format("{ \"TIME\" : \"%s\" }",out)
	
	rqst:close(out)
	
	end



----------------------------------------------------------------
-- STRUCTURE
----------------------------------------------------------------
-- Build action list for admin actions

admin_actions = {}
admin_actions.POWER = stop_handler
admin_actions.TIME = time_handler
admin_actions.LOGIN = login_handler

			
			

Added Site/rest/debug_main.lua.







































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
------------------------------------------------------------------------------------
--
-- REST - LEVEL 0	- Handles site following REST/
--
--
--	This handles the top level
--
--	20-Nov-2011	[7f829d5df2] & [9eae8bcde5] Support for automated shows and PROGRAM
--				rest commands
--
------------------------------------------------------------------------------------
-- First set up require path

--path = arg[1]
--path = path .. "XX"
--path = string.gsub(path,"/FirenetXX","\/site\/rest\/?.lua")
--print("NeW PATH: ",path)

--path = "rest"
path = "../../site/rest"				-- This is the relationship of the
										-- Executible to where the scripts
										-- are kept

--http_lcn = "Site"										
http_lcn = "../../Site/Site_J" 			-- This is the relationship to the J-Query code)

-- Set that into the package search path							
_G.package.path = path .. "/?.lua;" .. _G.package.path

-- Now all modules will load with just a simple require + name

require "rest_sup"
require "login"
require "admin"
require "firenet_sup"
require "firenet_main"
require "program"

-- Build the site structure list

site = {}
site.ADMIN = admin_handler
site.FIRENET = firenet_handler
site.PROGRAM = program_handler

state = {}
state.RUN = 1

-- Site operation

-- (1) Open channel and start HTTP

val = http.start(8081,http_lcn,"rest")
if( val ~= nil )
then
	-- Open FIRENET, if fail then bail
	
	if( firenet_open() )
	then
	
		while( state.RUN )
		do
			-- Wait for data
			
			h = http.open()
			if( h ~= nil )
			then
				------------------------------
				print("*** DATA RECEIVED ***")
				url,htype = h:url()
				if( url ~= nil )
				then
					print("HTTP TYPE: ",htype);
					table.foreach(url,print)
					
					-- Handle the request
					
					rest_handler(h,htype,url,2,site)
					timer.sleep(5)				-- Let the other threads run
				end
				------------------------------
			end
		end
		
		-- Close FIRENET before exit
		
		firenet_close()
	else
		print("** Failed to open FIRENET **")
	end
else
	print("** Failed to open HTTP Server **")
end

print("-- END RUN -- ")

timer.sleep(1000)	
http.stop()

Added Site/rest/firenet.lua.





















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
--------------------------------------------------------------
--
--	FIRENET REST Page
--	This has rest/FIRENET RESTful pages
--
--	12-Nov-2010	Initial Creation
--
----------------------------------------------------------------

require "firenet_sup"

FNET=nil	-- Firenet handle

print("--FIRENET_MAIN LOADED--")

----------------------------------------------------------------
--	firenet_open()	- Open firenet and save handle
--
--	INPUT:	NONE
--
--	OUTPUT:	1 if OPEN OK, nil if not
----------------------------------------------------------------

function firenet_open()

	local rtn = nil;
	
	FNET = firenet.new()
	if( FNET ~= nil )
	then
		rtn = 1
	end
	
	return rtn
end

----------------------------------------------------------------
--	firenet_close()	- Close firenet 
--
--	INPUT:	NONE
--
--	OUTPUT:	NONE
----------------------------------------------------------------

function firenet_close()

	if( FNET ~= nil )
	then
		FNET:close()
	end
end


-- Build action list for firenet actions

firenet_actions = {}
--firenet_actions.STATUS = status_handler

Added Site/rest/firenet_main.lua.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
--------------------------------------------------------------
--
--	FIRENET REST Page
--	This has rest/FIRENET RESTful pages
--
--	12-Nov-2010	Initial Creation
--	 1-Dec-2010 Fix JSON return from status message
--				DON'T append JSON on the json_kvp()
--				string, put it into the list and use that
--	14-Dec-2010	Change code to send back XMIT if command sent
--				(we don't know status)
--	23-Jan-2011 [e63a96467f] Fix status return parsing
--  24-Jan-2011 [4fd91ac4c2] Add Channel information command
--	22-Apr-2011 [b3cbd06ece] Add literal command
--	 8-May-2011 Allow 0 for Literal address
--	 8-May-2011 [2fbacd1fdc] Add C for clear network map on status
--	20-N0v-2011 [4e8fec9ee6] Add SYNC & PGM commands to Firenet
--
----------------------------------------------------------------

require "firenet_sup"
require "rest_sup"

FNET=nil	-- Firenet handle

print("--FIRENET_MAIN LOADED--")

----------------------------------------------------------------
-- CREATE/DELETE NETWORK
----------------------------------------------------------------
----------------------------------------------------------------
--	firenet_open()	- Open firenet and save handle
--
--	INPUT:	NONE
--
--	OUTPUT:	1 if OPEN OK, nil if not
----------------------------------------------------------------

function firenet_open()

	local rtn = nil;
	
	FNET = firenet.new()
	if( FNET ~= nil )
	then
		rtn = 1
	end
	
	return rtn
end

----------------------------------------------------------------
--	firenet_close()	- Close firenet 
--
--	INPUT:	NONE
--
--	OUTPUT:	NONE
----------------------------------------------------------------

function firenet_close()

	if( FNET ~= nil )
	then
		FNET:delete()
	end
end

----------------------------------------------------------------
-- REST PAGES
----------------------------------------------------------------

------------------------------------------------------------------------------------
--
--	firenet_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function firenet_handler(rqst,htype,url,n,al)
	local out
	
	rest_handler(rqst,htype,url,n,firenet_actions)
end

------------------------------------------------------------------------------------
--
--	status_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function status_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	
	out.STATUS = "FAIL"	-- Set for failure
	
	print("-- Enterning STATUS --")
	
	if( htype == HTTP_GET )
	then
		-- If no more URL then get all
		
		print("-- GET STATUS --")
		
		addr = url[4]
		
		-- Handle ADDR == C for clear & read all
		-- [2fbacd1fdc]
		
		if( addr ~= nil and (addr == "C" or addr == "0") )
		then
			addr = nil		-- Set for BROADCAST address
			FNET_MAP = {}		-- Reset map
		end
		
		if( build_fnet_status(addr,FNET) )
		then
			-- Here build the status result, return all if
			-- addr == nil or just part with specific address
			
			out = format_full_fnet_status(addr,FNET_MAP)
			rqst:close(out)
		else
			out = json_kvp(out)
			rqst:close(out)
		end
	else
		out.STATUS = "UNKNOWN RQST"
		out = json_kvp(out)
		rqst:close(out)
	end
end

------------------------------------------------------------------------------------
--
--	arm_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, url[4] = unit to arm url[5] = A = arm D = disarm
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function arm_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local arm_val
	
	out.STATUS = "FAIL"	-- Set for failure
	
	if( htype == HTTP_POST )
	then
		-- Check for URL[4] and [5]
		
		addr = tonumber(url[4])
		arm_val = url[5]
		
		if( addr ~= nil and (arm_val == "A" or arm_val == "D" ) )
		then
			-- Build output packet
			outpk = {}
			outpk.TO = addr
			outpk.DATA = "A" .. arm_val
			
			-- Send it 
			
			FNET:write(outpk)
			
			out.STATUS = "XMIT"
		else
			out.STATUS = "BAD DATA"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	out = json_kvp(out)
	h:close(out)
end

------------------------------------------------------------------------------------
--
--	fire_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, url[4] = unit to fire url[5] = element to fire
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function fire_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local fire_val
	
	out.STATUS = "FAIL"	-- Set for failure
	
	if( htype == HTTP_POST )
	then
		-- Check for URL[4] and [5]
		
		addr = tonumber(url[4])
		fire_val = tonumber(url[5]) - 1
		
		if( addr ~= nil and fire_val ~= nil and 
			(fire_val >= 0 and fire_val <= 5) )
		then
			-- Build output packet
			outpk = {}
			outpk.TO = addr
			outpk.DATA = "F" .. fire_val
			
			-- Send it 
			
			FNET:write(outpk)
			
			out.STATUS = "XMIT"
		else
			out.STATUS = "BAD DATA"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	out = json_kvp(out)
	h:close(out)
end

------------------------------------------------------------------------------------
--
--	sync_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request,
--						url[4] = Destination
--						url[5] = If present & == 'P' then
--								 starting program
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function sync_handler(rqst,htype,url,n,al)
	local out = {}
	local pgm = ""
	
	out.STATUS = "FAIL"	-- Set for failure
	
	if( htype == HTTP_POST )
	then
		addr = tonumber(url[4])
		if( addr == nil )
		then
			addr = 0;
		end
		
		-- Check for program start
		
		if( url[5] ~= nil and url[5] == "P" )
		then
			-- Do program start actions here
			-- TBD
			pgm = "P"
		end
	
		-- Build output packet
		outpk = {}
		outpk.TO = addr
		outpk.DATA = "Z" .. pgm
		
		-- Send it 
		
		FNET:write(outpk)
		
		out.STATUS = "XMIT"

	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	out = json_kvp(out)
	h:close(out)
end

------------------------------------------------------------------------------------
--
--	delay_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, url[4] = unit to fire 
--						url[5] = circuit to fire
--						url[6] - Delay time
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function delay_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local fire_val
	local delay_val
	
	out.STATUS = "FAIL"	-- Set for failure
	
	if( htype == HTTP_POST )
	then
		-- Check for URL[4] and [5]
		
		addr = tonumber(url[4])
		fire_val = tonumber(url[5]) - 1
		delay_val = tonumber(url[6])
		
		if( addr ~= nil and fire_val ~= nil and delay_val ~= nil and
		(fire_val >= 0 and fire_val < 5))
		then
			-- Build output packet
			outpk = {}
			outpk.TO = addr
			outpk.DATA = "D" .. fire_val .. delay_val
			
			-- Send it 
			
			FNET:write(outpk)
			
			out.STATUS = "XMIT"
		else
			out.STATUS = "BAD DATA"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	out = json_kvp(out)
	h:close(out)
end

------------------------------------------------------------------------------------
--
--	pgm_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, url[4] = unit to fire 
--									   url[5] = circuit to fire
--									   url[6] - Delay time
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function pgm_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local fire_val
	local delay_val
	
	out.STATUS = "FAIL"	-- Set for failure
	
	if( htype == HTTP_POST )
	then
		-- Check for URL[4] and [5]
		
		addr = tonumber(url[4])
		fire_val = tonumber(url[5]) - 1
		delay_val = tonumber(url[6])
		
		if( addr ~= nil and fire_val ~= nil and delay_val ~= nil and
		(fire_val >= 0 and fire_val < 5))
		then
			-- Build output packet
			outpk = {}
			outpk.TO = addr
			outpk.DATA = "P" .. fire_val .. delay_val
			
			-- Send it 
			
			print("--- Starting SWR ")
				
			outpk = swr_firenet(outpk,2000,FNET)
				
			if( outpk ~= nil )
			then
				out.STATUS = "XMIT"
				out.VERSION = outpk.DATA
			else
				out.STATUS = "NO DATA"
			end
		else
			out.STATUS = "BAD ADDRESS"
		end
	else
		out.STATUS = "NO TARGET"
	end
	
	out = json_kvp(out)
	h:close(out)
end

------------------------------------------------------------------------------------
--
--	version_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function version_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local outpk
	local out = {}
	
	out.STATUS = "FAIL"	-- Set for failure
	
	print("-- Enterning VERSION --")
	
	if( htype == HTTP_GET )
	then
		
		print("-- GET VERSION --")
		
		if( url[4] ~= nil )
		then
			addr = tonumber(url[4])
			if( addr > 0 )
			then
	
				-- Build output packet & send it
				outpk = {}
				outpk.TO = addr
				outpk.DATA = "V"
				
				print("--- Starting SWR ")
				
				outpk = swr_firenet(outpk,2000,FNET)
				
				if( outpk ~= nil )
				then
					out.STATUS = "XMIT"
					out.VERSION = outpk.DATA
				else
					out.STATUS = "NO DATA"
				end
			else
				out.STATUS = "BAD ADDRESS"
			end
		else
			out.STATUS = "NO TARGET"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	-- Return result
	
	out = json_kvp(out)
	rqst:close(out)
end

------------------------------------------------------------------------------------
--
--	channel_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function channel_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local outpk
	local out = {}
	
	out.STATUS = "FAIL"	-- Set for failure
	
	print("-- Enterning Channel --")
	
	if( htype == HTTP_GET )
	then
		
		print("-- GET Channel --")
		
		if(url.n >= 5 )
		then
			addr = tonumber(url[4])
			channel = tonumber(url[5]) - 1
			if( addr > 0 and channel >= 0 and channel <= 5 )
			then
	
				-- Build output packet & send it
				outpk = {}
				outpk.TO = addr
				outpk.DATA = string.format("C%d",channel)
				
				print("--- Starting SWR ")
				
				outpk = swr_firenet(outpk,2000,FNET)
				
				if( outpk ~= nil )
				then
					out.STATUS = "XMIT"
					out.FIRED = string.sub(outpk.DATA,3,3);
					out.AD = string.sub(outpk.DATA,4)
					out.DATA = outpk.DATA
				else
					out.STATUS = "NO DATA"
				end
			else
				out.STATUS = "BAD ADDRESS"
			end
		else
			out.STATUS = "NO TARGET"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	-- Return result
	
	out = json_kvp(out)
	rqst:close(out)
end

------------------------------------------------------------------------------------
--
--	literal_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function literal_handler(rqst,htype,url,n,al)
	local out = {}
	local addr
	local outpk
	local out = {}
	
	out.STATUS = "FAIL"	-- Set for failure
	
	print("-- Enterning Literal --")
	
	if( htype == HTTP_POST )
	then
		
		print("-- GET Channel --")
		
		if(url.n >= 5 )
		then
			addr = tonumber(url[4])
			if( addr ~= nil and addr >= 0  )
			then
	
				-- Build output packet & send it
				outpk = {}
				outpk.TO = addr
				outpk.DATA = url[5]
				
				print("--- Starting SWR ")
				
				outpk = swr_firenet(outpk,2000,FNET)
				
				if( outpk ~= nil )
				then
					out.STATUS = "XMIT"
					out.FROM = outpk.FROM
					out.DATA = outpk.DATA
				else
					out.STATUS = "NO DATA"
				end
			else
				out.STATUS = "BAD ADDRESS"
			end
		else
			out.STATUS = "NO TARGET"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	-- Return result
	
	out = json_kvp(out)
	rqst:close(out)
end

----------------------------------------------------------------
-- SUPPORT FUNCTIONS
----------------------------------------------------------------
------------------------------------------------------------------------------------
--
--	function format_full_fnet_status(map)
--
--	INPUT:	addr - Address to display, if nil do all
--			map	- FIRENET status map
--
--	OUTPUT:	JSON string
--
------------------------------------------------------------------------------------

function format_full_fnet_status(addr, map)
	local out
	local lmap
	
	-- Pick part of map to show
	
	if( addr == nil )
	then
		lmap = map
	else
		addr = tonumber(addr)
		lmap = map[addr]
	end
	
	-- MARK the success here, this will produce
	-- correct JSON in the output
	
	if( lmap == nil )
	then
		lmap = {}
	end
	
	lmap.STATUS = "SUCCESS"
	
	-- Generate JASON
	
	out = json_kvp(lmap)
	
	print("------------")
	print ("\n",out,"\n")
	print("------------")
	return out
end
----------------------------------------------------------------
-- STRUCTURE --
----------------------------------------------------------------

-- Build action list for firenet actions

firenet_actions = {}
firenet_actions.STATUS = status_handler
firenet_actions.ARM = arm_handler
firenet_actions.FIRE = fire_handler
firenet_actions.SYNC = sync_handler
firenet_actions.DELAY = delay_handler
firenet_actions.PGM = pgm_handler
firenet_actions.VERSION = version_handler
firenet_actions.CHANNEL = channel_handler
firenet_actions.LITERAL = literal_handler
firenet_actions.PROGRAM = program_handler

Added Site/rest/firenet_sup.lua.

























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
--------------------------------------------------------------
--
--	FIRENET Lua support functions
--	This file contains the basic structures used for Firenet
--	support under Lua
--
--	Basic Structures
--		FNET_MAP	- List indexed by NODE name
--			[<Node Name>]
--							.FIRED		- Fired channels as a #
--							.UNFIRED	- UnFired channels as a #
--							.PHY		- Physical address
--		REV_FNET_MAP	- List indexed by NODE Phy address
--			[<Node Phy addr]
--							.NAME		- Node name (see FNET_MAP)
--
--	13-Sep-2009	Initial version
--	20-Sep-2009	Add cmd line handler
--	21-Sep-2009 Add music shutdown
--	17-May-2010 [ba31d5cae3] Convert to NEWNET version
--	16-Jan-2011	[e4208b8f56] Change status response msg header
--	23-Jan-2011 Correct update_status() code for new response hdr
--	23-Jan-2011 [e63a96467f] Fix status return parsing
--	23-Apr-2011 [ef1d5adef2] Wrong calculation in status.
--	 9-Feb-2013 Change swr_firenet() to return nil on bad addr or timeout
--
----------------------------------------------------------------

----------------------------------------------------------------
-- GLOBAL DATA STRUCTURES
----------------------------------------------------------------
FNET_MAP = {}			-- Network MAP
BCAST_ADDR = "0"		-- Broadcast address for FIRENET [ba31d5cae3]
FNET_MAX_ADDR = 32		-- Max address for FIRENET
OS_MUSIC_PLAYER	= "afplay"	-- Cmd line Music player program (OS dependent)
print("--FIRENET_SUP LOADED--")

----------------------------------------------------------------
--	build_fnet_status(addr,h)	- Get status of network
--
--	INPUT:	addr	- If present just query 1 node
--			h		- FIRENET handle
--
--	OUTPUT:	1	- Success, FNET_MAP updated with status
--			nil	- FAILURE
--
----------------------------------------------------------------

function build_fnet_status(addr, h )
	local outpk
	local inpkt
	local rtnval = nil
	local node
	local out
	local wtimer
	local i
	
	-- (1) Build a STATUS message
	-- If addr input then use just one address
	
	outpk = {}
	outpk.DATA = "S"
	if( addr == nil )
	then
		outpk.TO = BCAST_ADDR
	else
		outpk.TO = addr
	end
	
	-- (2) Send it then wait for an answer
	
	print("-- Sending Packet --")
	h:write(outpk)
	
	-- (3) Now read packets till we get a nil and store the data
	
	wtimer = timer.new()
	
	while( wtimer:done(2000) == nil )
	do
		inpkt = h:read()
		if( inpkt ~= nil )
		then
			print("-- Rec Packet --")
			table.foreach(inpkt,print)
	
			-- Handle Status return message
			
			print("------------")
			
			if( string.sub(inpkt.DATA,1,1) == "R" and 
				string.sub(inpkt.DATA,2,2) == "S" )
			then
				print("-- Doing packet")
				rtnval = 1
				node = inpkt.FROM
				
				-- Now fill in message with Status DATA
				
				FNET_MAP[node] = update_status( inpkt.DATA )
			end
			
			-- If only one then don't try another read
			
			if( addr == nil )
			then
				-- Restart time to look for next
				wtimer:start();		
			else
				-- Done
				break
			end
		end
	end
	
	wtimer:delete()
	
	return rtnval
end

----------------------------------------------------------------
--
--	swr_firenet( pkt ,delay)	- Send request & wait reply	
--
--	INPUT:	pkt		- Packet to send
--			delay	- Wait # ms
--			h		- Network object
--
--	OUTPUT:	Returned packet
--			nil	- FAILURE
--
----------------------------------------------------------------

function swr_firenet(pkt,delay,h)
	local rtnval = nil
	local wtimer
	
	-- (2) Send it then wait for an answer
	
	print("-- Sending Packet --")
	h:write(pkt)
	print("-- SENT Packet --",pkt.TO,pkt.DATA)
	
	-- (3) Wait for packet
	
	wtimer = timer.new()
	
	while( wtimer:done(delay) == nil )
	do
		rtnval = h:read()
		if( rtnval ~= nil )
		then
			print("-- Rec Packet --")
			table.foreach(rtnval,print)
			if( pkt.TO == 0 or pkt.TO == rtnval.FROM )
			then
				break
			else
				print("Packet REJECTED Wrong address Discarded",pkt.TO,rtnval.FROM)
				--rtnval = nil
				--break	-- Quit bad stuff...
			end
		end
	end
	
	-- Remove timer and return result
	-- If timed out return NIL
	if( wtimer:done(delay) == 1 )
	then
		print("** SWR TIMEOUT ***")
		rtnval = nil
	end
	
	wtimer:delete()	
	return rtnval
end

----------------------------------------------------------------
--	update_status( sd )
--
--	INPUT:	sd	- Status data (SR[A/D][F][W])	
--
--	OUTPUT:	Return list of the form
--			list.ARMED = 1 if armed nil if not
--			list.W[1-6]	- 1 if item wired, nil if not
--			list.F[1-6] - 1 if fired, nil if not fired
--
--	A/D	- Armed/Disarmed
--	F	- 0x40 | 0x3F wired bits
--	W	- 0x40 | 0x3F fired bits
--
----------------------------------------------------------------

function update_status( sd )

	local list = {}
	local part
	
	-- (1) Get the armed,disarmed bit
	
	part = string.sub(sd,3,3)
	if( part == "A" )
	then
		list.ARMED = 1
	else
		list.ARMED = 0
	end
	
	table.foreach(list,print)
	
	-- (2) Get the Fired bits
	
	--print("SD = ",sd)
	part = string.sub(sd,4,4)
	part = string.byte(part)		-- Get the numerical value
	part = part - 64				-- Remove 0x40
	
	print("FIRED: ",part)

	list.FIRED = bin_con( part )	-- Convert to a binary array
	
	-- (3) Get the Wired bits
	
	part = string.sub(sd,5,5)
	part = string.byte(part)		-- Get the numerical value
	part = part - 64				-- Remove 0x40

	print("WIRED: ",part)
	
	list.UNFIRED = bin_con( part )	-- Convert to a binary array
	
	table.foreach(list,print)
	
	return list
end

----------------------------------------------------------------
--	bin_con( val )	- Convert value to binary array
--
--	INPUT:	val	- 0 - 0x3f (0-63)
--
--	OUTPUT:	Binary array 1-6 of bits from the value
--			bit 6 == MSB
--
----------------------------------------------------------------

function bin_con( val )
	local temp
	local subval = 32
	local list = {}
	
	-- (1) Loop through values
	
	for i=6,1,-1 
	do
		temp = val - subval
		if( temp >= 0 )
		then
			list[i] = 1		-- We have the bit
			val = temp
		else
			list[i] = 0		-- We don't have the bit
		end
		
		subval = subval/2	-- Next lower bit
	end
	
	return list
end

----------------------------------------------------------------
--	play_file(file)
--
--	INPUT:	file	- Music file
--
--	OUTPUT:	PID of music player
--
----------------------------------------------------------------

function play_file( file )
	local rtnval = nil
	local fp,indata
	
	-- (1) Try to open the file, if OK then proceed
	
	fp = io.open(file,"r")
	if( fp ~= nil )
	then
		-- OS X version of play
		
		fp:close()
		fp = string.format("%s %s & ",OS_MUSIC_PLAYER,file)
		os.execute(fp)
		print("Music File executer",fp)
		
		-- We must wait till it's in the process list
		timer.sleep( 1000 )
		fp = string.format("ps -ax | grep %s > player.txt",file)
		os.execute(fp)
		print("Music Action executer",fp)
		
		-- Now get the PID
		
		fp = io.open("player.txt","r")
		if( fp ~= nil )
		then
			-- Read the file and extract the PID for the player
			indata = fp:read("*l")		-- Player line
			print("Music Player: ",indata)
			rtnval = string.sub(indata,1,5)	-- PID is first part
			fp:close()
			os.remove("player.txt")
		end
		
	end
	
	return rtnval
end

----------------------------------------------------------------
--	play_file_stop(pid)
--
--	INPUT:	pid	- PID of music player
--
--	OUTPUT:	NONE
--
----------------------------------------------------------------

function play_file_stop( pid )
	local out
	
	-- Build the kill string and send it
	
	out = string.format("kill -9 %s ",pid)
	os.execute(out)
	
end
-------------------------------------------------------------------------------
--
--  find_arg( argv,flag,data )   - Find the port in the argument list
--
--  INPUT:      argv    - Program argument list
--              flag    - Look for this string (i.e. -flag) in list
--              data    - If non-nil get the field following flag slot
--
--  OUTPUT      If data = nil return nil if flag not found and 1 if found
--              If data <> nil return nil if flag not found or next field if found
--
-------------------------------------------------------------------------------

function flag_srch( argv,flag,data )
    local rtnval = nil
    
    -- Loop over the list and check each item for match
    
    for i=1,table.getn(argv) 
    do
        if( flag == argv[i] )
        then
            -- Found so two cases 
            -- (a) If data == nil then return 1
            -- (b) If data != nil then return argv[i+1]
            
            if( data == nil  )
            then
                rtnval = 1
            else
                rtnval = argv[i+1]
            end
            
            -- In either case just break out
            
            break
        end
    end
    
    return( rtnval )
end

		

Added Site/rest/http.lua.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# HTTP/REST Test script for FIRENET

val = http.start(8081,"lcn/stuff","rest")
if( val ~= nil )
then
	counter = 3000
	
	while( 1 )
	do
		h = http.open()
		if( h ~= nil )
		then
		   print("*** DATA RECEIVED ***")
		   url,htype = h:url()
		   if( url ~= nil )
		   then
		   		print("HTTP TYPE: ",htype);
		   		table.foreach(url,print)
		   	end
		   	-- If POST GET the data
		   	if( htype == 6 )
		   	then
		   		print("HTTP POST DATA: ")
		   		print(h:data())
		   		print("---------------")
		   		
		   		if( url[1] == "rest" and url[2] == "quit" )
		   		then
		   			print("-- shutting down --")
		   			out = string.format("{ \"ACTION\" : \"STOP\" }");
		 			 h:close( out)
		   			timer.sleep(1000)
		   			http.stop()
		   			return
		   		end
		   	end
		   out = string.format("{ \"return_data\" : \"%d\" }",counter);
		  h:close( out)
		end		
		timer.sleep(100)
		counter = counter - 1
		if( counter <= 0 )
		then
			break
		end
	end	
else
		print("*** FAILED TO OPEN HTTP ***")
end
http.stop()

Added Site/rest/login.lua.































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
------------------------------------------------------------------------------------
--
-- REST - LEVEL 2	- Handles site following REST/ADMIN/LOGIN
--
--
--	This handles the Login
--		
--		REQUEST		- GET Returns challenge
--		RESPONSE	- POST Sends response to challenge
--		STATUS		- GET returns login status
--		LOGOUT		- POST does a logout
--
--	17-Dec-2010 Initial version
--	23-Dec-2010 Made with login and multiple windows
--
------------------------------------------------------------------------------------

require "rest_sup"

-- Global variables for this run

-- Random # Challenge values
LOGIN_CHAL_LIST = {	"50A0","F748","95B1","8D8B","4F34","52C7","85B6","EA03",
					"E6B8","D37F","4FE1","5215","A868","9336","2885","6F15"}
LOGIN_CHAL_PSN = 1	-- Challenge value selected
LOGIN_OK = nil		-- <> nil when login is OK

print("--LOGIN LOADED--")

------------------------------------------------------------------------------------
--
--	login_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function login_handler(rqst,htype,url,n,al)
	local out
	
	print("-- Login request --")
	rest_handler(rqst,htype,url,n,login_actions)
end

------------------------------------------------------------------------------------
--
--	login_request_handler(rqst,type,url,n,al)	- Request for login
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, look at last link for stop
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL:	..ADMIN/LOGIN/REQUEST
--	RESPONSE:	{ "CHAL" : <Random login value> }
--
------------------------------------------------------------------------------------

function login_request_handler(rqst,htype,url,n,al)
	local out = {}
	local data
	local i
	
	-- Is this a GET, if so look pick random value from random list
	-- Also fail if already logged in
	
	if( htype == HTTP_GET and LOGIN_OK == nil)
	then
		-- Add some randomness to our BAD random # gen
		data = os.time() % 1000		
		math.randomseed(data)
		for i=1,data
		do
			math.random()
		end	
		data = math.random(1,16)		
		LOGIN_CHAL_PSN = data			-- Get index into random # list
		-------------------------------------------
		
		-- Build response 
		
		out.CHAL = LOGIN_CHAL_LIST[LOGIN_CHAL_PSN]
		
	else
		out.CHAL = "UNKNOWN RQST"
	end
	
	-- Return response
	
	out = json_kvp(out)
	h:close(out)

end

------------------------------------------------------------------------------------
--
--	login_response_handler(rqst,type,url,n,al)	- Response for login
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, look at last link for stop
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL:	..ADMIN/LOGIN/RESPONSE/<random value>	SB LOGIN_CHAL_PSN +1 value
--	RESPONSE:	{ "LOGIN" : "OK" }
--	Server is now locked to this client's iP address will not response to others
--
------------------------------------------------------------------------------------

function login_response_handler(rqst,htype,url,n,al)
	local out = {}
	local data
	
	-- Is this a POST, check in returned random value matches next
	-- (circularly) in the list
	-- Also fail if already logged in
	
	if( htype == HTTP_POST and LOGIN_OK == nil)
	then
		--			1		2	3	4			5
		-- We have rest/admin/login/response/<value>
		
		data = LOGIN_CHAL_PSN + 1
		if( data > 16 )	-- Length of list
		then
			data = 1	-- Treat list as circular
		end
		
		-- See if we match on random data
			
		if( url[5] == LOGIN_CHAL_LIST[data] )
		then
			out.LOGIN = "OK"	-- Success
			h:lock(1)			-- Lock server
			LOGIN_OK = 1		-- Save state
		else
			out.LOGIN = "FAIL"	-- Failure
			h:lock(nil)			-- Unlock server
		end
	else
		out.LOGIN = "UNKNOWN RQST"
	end
	
	out = json_kvp(out)
	h:close(out)			-- Return message
end
		
------------------------------------------------------------------------------------
--
--	login_status_handler(rqst,type,url,n,al)	- Status of login
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, look at last link for stop
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL:	..ADMIN/LOGIN/STATUS
--	RESPONSE:	{ "LOGIN" : "YES" } or { "LOGIN" : "NO" } if not logged in
--
------------------------------------------------------------------------------------

function login_status_handler(rqst,htype,url,n,al)
	local out = {}
	local data
	
	-- Is this a GET,if so return status
	
	if( htype == HTTP_GET )
	then
		-- Build response 
		
		if( LOGIN_OK ~= nil)
		then
			out.STATUS = "YES"
		else
			out.STATUS = "NO"
		end
	else
		out.STATUS = "UNKNOWN RQST"
	end
	
	-- Return response
	
	out = json_kvp(out)
	h:close(out)
end

------------------------------------------------------------------------------------
--
--	login_logout_handler(rqst,type,url,n,al)	- Logout if logged in
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, look at last link for stop
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL:	..ADMIN/LOGIN/LOGOUT
--	RESPONSE:	{ "LOGOUT" : "OK" } or { "LOGOUT" : "UNKNOWN RQST" } if not logged in
--	Server is now unlocked for all clients
--
------------------------------------------------------------------------------------

function login_logout_handler(rqst,htype,url,n,al)
	local out = {}
	local data
	
	-- Is this a POST, and are we logged in ?
	-- (circularly) in the list
	-- Also fail if already logged in
	
	if( htype == HTTP_POST and LOGIN_OK)
	then
		-- Unlock and return OK
		
		h:lock(nil)
		out.LOGOUT = "OK"
		LOGIN_OK = nil		-- Change status
	else
		out.LOGOUT = "UNKNOWN RQST"
	end
	
	out = json_kvp(out)
	h:close(out)			-- Return message
end


----------------------------------------------------------------
-- STRUCTURE
----------------------------------------------------------------
-- Build action list for login actions

login_actions = {}
login_actions.REQUEST = login_request_handler
login_actions.RESPONSE = login_response_handler
login_actions.STATUS = login_status_handler
login_actions.LOGOUT = login_logout_handler

Added Site/rest/main.lua.

































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
------------------------------------------------------------------------------------
--
-- REST - LEVEL 0	- Handles site following REST/
--
--	FLAGS:	Reads the following command line flags:
--			-http <HTTP files location> GLOBAL HTTP_LCN
--			-rest <REST file location>  GLOBAL REST_LCN
--			-show <Show file location>  GLOBAL SHOW_LCN
--
--	This handles the top level
--
--	20-Nov-2011	[7f829d5df2] & [9eae8bcde5] Support for automated shows and PROGRAM
--				rest commands
--	23-Nov-2011	[7f829d5df2] Read cmd line input and pull in the http &
--				show locations
--	28-Dec-2015 Add -port to set HTTP port
--
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--                  SUPPORT FUNCTIONS
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--  flag_srch( argv,flag,data )   - Find the port in the argument list
--
--  INPUT:      argv    - Program argument list
--              flag    - Look for this string (i.e. -flag) in list
--              data    - If non-nil get the field following flag slot
--
--  OUTPUT      If data = nil return nil if flag not found and 1 if found
--              If data <> nil return nil if flag not found or next field if found
--
-------------------------------------------------------------------------------

function flag_srch( argv,flag,data )
    local rtnval = nil
    
    -- Loop over the list and check each item for match
    
    for i=1,table.getn(argv) 
    do
        if( flag == argv[i] )
        then
            -- Found so two cases 
            -- (a) If data == nil then return 1
            -- (b) If data != nil then return argv[i+1]
            
            if( data == nil  )
            then
                rtnval = 1
            else
                rtnval = argv[i+1]
            end
            
            -- In either case just break out
            
            break
        end
    end
    
    return( rtnval )
end

-------------------------------------------------------------------------------
--                 MAIN PROGRAM
-------------------------------------------------------------------------------

-- Pull up items from command line
-- NOTE THESE ARE GLOBALS FOR THE REST
-- OF THE SYSTEM

REST_LCN = flag_srch( arg,"-rest",1 )
HTTP_LCN = flag_srch(arg,"-http",1)
SHOW_LCN = flag_srch(arg,"-show",1)
PORT_USED = flag_srch(arg,"-port",1)

if( REST_LCN == nil )
then
	print("SYNTAX ERROR: -rest <REST file lcn> NOT GIVEN")
	print("Shutting down")
	os.exit(-1)
end

if( HTTP_LCN == nil )
then
	print("SYNTAX ERROR: -http <HTTP file lcn> NOT GIVEN")
	print("Shutting down")
	os.exit(-1)
end

if( SHOW_LCN == nil )
then
	print("WARNING: -show <SHOW file lcn> NOT GIVEN")
	print("Automated Shows Disabled")
end

if( PORT_USED == nil )
then
	PORT_USED = 8081
	print("WARNING: -port not present using 8081")
end
PORT_USED = PORT_USED + 0

-- Set that into the package search path							
_G.package.path = REST_LCN .. "/?.lua;" .. _G.package.path

-- Now all modules will load with just a simple require + name

require "rest_sup"
require "login"
require "admin"
require "firenet_sup"
require "program"
require "firenet_main"


-- Build the site structure list

site = {}
site.ADMIN = admin_handler
site.FIRENET = firenet_handler

state = {}
state.RUN = 1

-- Site operation

-- (1) Open channel and start HTTP

val = http.start(PORT_USED,HTTP_LCN,"rest")
if( val ~= nil )
then
	-- Open FIRENET, if fail then bail
	
	if( firenet_open() )
	then
	
		while( state.RUN )
		do
			-- Wait for data
			
			h = http.open()
			if( h ~= nil )
			then
				------------------------------
				print("*** DATA RECEIVED ***")
				url,htype = h:url()
				if( url ~= nil )
				then
					print("HTTP TYPE: ",htype);
					table.foreach(url,print)
					
					-- Handle the request
					
					rest_handler(h,htype,url,2,site)
					timer.sleep(5)				-- Let the other threads run
				end
				------------------------------
			end
		end
		
		-- Close FIRENET before exit
		
		firenet_close()
	else
		print("** Failed to open FIRENET **")
	end
else
	print("** Failed to open HTTP Server **")
end

print("-- END RUN -- ")

timer.sleep(1000)	
http.stop()

Added Site/rest/program.lua.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
--------------------------------------------------------------
--
--	PROGRAM REST Page
--	This has rest/PROGRAM RESTful pages-
--	Actions:
--		firenet/program/list		- Return list of programs
--		firenet/program/set/#		- Select program
--		firenet/program/pgm			- Program nodes
--		firenet/program/start		- Start nodes & music
--		firenet/program/abort		- Stop program and music
--		firenet/program/status		- Return status messages 
--										Running/nodes fires
--
--	20-Nov-2010	[9eae8bcde5] Initial Creation
--	 7-Dec-2011 Fix JSON in STATUS output
--
----------------------------------------------------------------

require "rest_sup"

print("--PROGRAM_MAIN LOADED--")

SHOW_LIST 	= nil		-- Main SHOW list
SHOW_DATA 	= nil		-- Current show data
SHOW_MUSIC 	= nil		-- Current show music data
SHOW_PGM 	= nil		-- Current show program
SHOW_READY  = nil		-- Not nil when ready, when running == MUSIC PID

----------------------------------------------------------------
-- CREATE/DELETE NETWORK
----------------------------------------------------------------

----------------------------------------------------------------
-- REST PAGES
----------------------------------------------------------------

------------------------------------------------------------------------------------
--
--	program_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function program_handler(rqst,htype,url,n,al)
	local out
	
	rest_handler(rqst,htype,url,n,program_actions)
end

----------------------------------------------------------------
-- COMMANDS --
----------------------------------------------------------------

------------------------------------------------------------------------------------
--
--	program_list_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request 
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	This program reads the SHOW_LCN/shows.json file (if present)
--	and returns it as data to the caller.
--
------------------------------------------------------------------------------------

function program_list_handler(rqst,type,url,n,al)
	local out={}
	local data = "";
	local show_file
	local show_music
	
	print("-- Enterning SET --")
	
	SHOW_READY = nil
	
	if( htype == HTTP_POST and SHOW_LCN ~= nil )
	then
		name = SHOW_LCN .. "/shows.json"
		
		-- Read in the file
		
		data = pgm_read_file( name );
		
		-- Now if DATA ~= nil parse the input data
		
		if( data ~= nil )
		then
			-- Parse file and make show list
			SHOW_LIST = parsers.json( data )			
			if( SHOW_LIST ~= nil and 
					SHOW_LIST.JOBJ ~= nil and 
					SHOW_LIST.JOBJ.shows ~= nil and 
					SHOW_LIST.JOBJ.shows.ARRAY)
			then
				SHOW_LIST = SHOW_LIST.JOBJ.shows.ARRAY
			else
				SHOW_LIST = nil
			end
		else
			-- Failure, return nothing	
			data = "{}"
			SHOW_LIST = {};
		end
		
		-- Check result and clear data if bad
		
		if( SHOW_LIST == nil or SHOW_LIST.n == nil )
		then
			data = "{}"
			SHOW_LIST.n = {}
		end
	else
		data = "{}"
	end
	
	-- return the list
	
	rqst:close( data )
end

------------------------------------------------------------------------------------
--
--	program_set_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request 
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL - firenet/program/set/#	<- This is selected show number
--			2        3     4  5
--
------------------------------------------------------------------------------------

function program_set_handler(rqst,type,url,n,al)
	local out={}
	local data
	local show_file
	local show_music
	local show
	
	print("-- Enterning SET --")
	
	SHOW_READY = nil
	
	if( htype == HTTP_POST and SHOW_LCN ~= nil )
	then
		show = tonumber(url[5])
		
		-- Is this a good number ?
		
		if( show ~= nil )
		then
			if( SHOW_LIST[show] ~= nil )
			then
			
				-- Build the show file name & get the data
				
				show_file = SHOW_LCN .. "/" .. SHOW_LIST[show].JOBJ.file
				
				data = pgm_read_file( show_file )
				if data ~= nil 
				then
					-- Parse the show data
					
					SHOW_DATA = parsers.json(data )
					if SHOW_DATA ~= nil and SHOW_DATA.JOBJ ~= nil 
					then
						SHOW_DATA = SHOW_DATA.JOBJ
					
						table.foreach(SHOW_DATA,print)
						
						SHOW_MUSIC = SHOW_LCN .. "/" .. SHOW_DATA.music
						data = io.open(SHOW_MUSIC,"r")
						if( data ~= nil )
						then
							data:close()
							
							table.foreach(SHOW_DATA,print)
							table.foreach(SHOW_DATA.program,print)
							SHOW_PGM = SHOW_DATA.program.ARRAY
							table.foreach(SHOW_PGM,print)
							
							out.STATUS = "OK"
						else
							out.STATUS = "NO MUSIC"
						end
					else
						out.STATUS = "BAD SHOW FILE"
					end
				else
					out.STATUS = "NO SHOW FILE"
				end
			else
				out.STATUS = "BAD SHOW #"
			end
		else
			out.STATUS = "NO DATA"
		end
	else
		out.STATUS = "NO SETUP"
	end
			
	-- return the status
	
	out = json_kvp(out)
	rqst:close( out )
end

------------------------------------------------------------------------------------
--
--	program_pgm_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request 
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL - firenet/program/pgm	
--			2        3     4 
--
------------------------------------------------------------------------------------

function program_pgm_handler(rqst,type,url,n,al)
	local out={}
	local packet = {}
	local run = 1
	local ch
	
	print("-- Enterning PGM --")
	
	SHOW_READY = nil	
	
	if( htype == HTTP_POST )
	then
		if( SHOW_MUSIC ~= nil )
		then
			if( SHOW_PGM ~= nil )
			then
				-- Now walk through and program nodes
				
				for i = 1, SHOW_PGM.n 
				do
					-- Build the packet
					packet = {}
					packet.TO = tonumber(SHOW_PGM[i].JOBJ.node)
					ch = tonumber(SHOW_PGM[i].JOBJ.ch) - 1
					packet.DATA = string.format("P%d%d",ch,SHOW_PGM[i].JOBJ.delay)

					-- SWR and look at result
					packet = swr_firenet(packet,2000,FNET)
					if( packet ~= nil )
					then
						if( packet.DATA ~= "RP" )
						then
							run = nil
							out.STATUS = string.format("FAILURE @ [%s] [%s]",
											SHOW_PGM[i].JOBJ.node,
											SHOW_PGM[i].JOBJ.ch)
							break;
						end
					else
						out.STATUS =  string.format("COM FAIL @ [%s] [%s]",
											SHOW_PGM[i].JOBJ.node,
											SHOW_PGM[i].JOBJ.ch)
						print(out.STATUS)
						run = nil
						break
					end
					
					-- Did program run OK
					
					if( run ~= nil )
					then
						out.STATUS = "OK"
						SHOW_READY = 1
					end
				end
			else
				out.STATUS = "NO PROGRAM"
			end
		else
			out.STATUS = "NO MUSIC"
		end
	else
		out.STATUS = "NOT POST"
	end
			
	-- return the status
	
	out = json_kvp(out)
	rqst:close( out )
end

------------------------------------------------------------------------------------
--
--	program_start_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request 
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL - firenet/program/start
--			2        3     4 
--
------------------------------------------------------------------------------------

function program_start_handler(rqst,type,url,n,al)
	local out={}
	local packet = {}
	local run = 1
	local ch
	
	print("-- Enterning START --")
	
	if( htype == HTTP_POST )
	then
		if( SHOW_MUSIC ~= nil )
		then
			if( SHOW_PGM ~= nil )
			then
				if( SHOW_READY ~= nil )
				then
					-- Set out START packet
					
					packet.TO = 0
					packet.DATA = "ZP"
					
					FNET:write( packet )
					SHOW_READY = play_file( SHOW_MUSIC )
					
					out.STATUS = "OK"
				else
					out.STATUS = "SHOW NOT READY"
				end
			else
				out.STATUS = "NO PROGRAM"
			end
		else
			out.STATUS = "NO MUSIC"
		end
	else
		out.STATUS = "NOT POST"
	end
			
	-- return the status
	
	out = json_kvp(out)
	rqst:close( out )
end

------------------------------------------------------------------------------------
--
--	program_abort_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request 
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL - firenet/program/abort
--			2        3     4 
--
------------------------------------------------------------------------------------

function program_abort_handler(rqst,type,url,n,al)
	local out={}
	local packet = {}
	local run = 1
	local ch
	
	print("-- Enterning ABORT --")
	
	if( htype == HTTP_POST )
	then
		if( SHOW_MUSIC ~= nil )
		then
			if( SHOW_PGM ~= nil )
			then
				if( SHOW_READY ~= nil )
				then
					-- Set out ABORT packet
					
					packet.TO = 0
					packet.DATA = "X"
					FNET:write( packet )
					
					-- Stop music
					SHOW_READY = play_file_stop( SHOW_READY )
					
					-- Make show NOT READY
					
					SHOW_READY = nil
					SHOW_PGM = nil
					SHOW_MUSIC = nil
					out.STATUS = "OK"
				else
					out.STATUS = "SHOW NOT READY"
				end
			else
				out.STATUS = "NO PROGRAM"
			end
		else
			out.STATUS = "NO MUSIC"
		end
	else
		out.STATUS = "NOT POST"
	end
			
	-- return the status
	
	out = json_kvp(out)
	rqst:close( out )
end

------------------------------------------------------------------------------------
--
--	program_status_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request 
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	URL - firenet/program/status
--			2        3     4 
--
------------------------------------------------------------------------------------

function program_status_handler(rqst,type,url,n,al)
	local out={}
	local packet = {}
	local first = -1
	local ch
	
	print("-- Enterning STATUS --")
	
	if( htype == HTTP_POST )
	then
		if( SHOW_MUSIC ~= nil )
		then
			if( SHOW_PGM ~= nil )
			then
				if( SHOW_READY ~= nil )
				then
					out = "{ \"STATUS\" : \"OK\" \n"
					first = 1
					while( 1 )
					do
						packet = FNET:read()
						if( packet == nil )
						then
							break
						end
						
						-- Is this an RP packet, if not discard
						ch = packet.DATA
						if( ch ~= nil and string.len(packet.DATA) == 3 )
						then
							if( string.sub(ch,1,2) == "RP" )
							then
								ch = string.sub(ch,3)
							else
								ch = nil
							end
						else
							ch = nil 
						end
						
						-- Only make output if we have a channel
						
						if( ch ~= nil )
						then
							if( first == 1 )
							then
								out = out .. ",\n\"FIRED\" : [\n"
								-- Add first to the list (with no leading ,)
								out = out .. string.format("{ \"FROM\" : \"%s\", \"CH\" : \"%s\" }",packet.FROM,ch)
								first = 2
							else
							
								-- Add rest to list with leading comma
							
								out = out .. string.format(",\n{ \"FROM\" : \"%s\", \"CH\" : \"%s\" }",packet.FROM,ch)
							end
						end
					end
					
					-- Close the output stuff
					
					if( first == 2 )
					then
						out = out .. "\n]\n"
					end
					out = out .. "}\n"				
				else
					out.STATUS = "SHOW NOT READY"
				end
			else
				out.STATUS = "NO PROGRAM"
			end
		else
			out.STATUS = "NO MUSIC"
		end
	else
		out.STATUS = "NOT POST"
	end
			
	-- return the status, note can be a table JSON string
	
	if( first == -1 )
	then
		out = json_kvp(out)
	end
	print("STATUS RQ",out)
	rqst:close( out )
end



----------------------------------------------------------------
-- SUPPORT --
----------------------------------------------------------------

------------------------------------------------------------------------------------
--
--	pgm_read_file( name )
--
--	INPUT:	name	- File path
--
--	OUTPUT:	data returned from file or nil
--
------------------------------------------------------------------------------------

function pgm_read_file( name )
	local data = ""
	local line
	
	-- File exists ?
	
	line = io.open(name,"r")
	if( line ~= nil )
	then
		line:close()
		
		-- Read the data
		
		for line in io.lines(name)
		do
			data = data .. line
		end
		
		-- Check if we got something
		
		if string.len(data) == 0 
		then
			data = nil
		end
	else
		data = nil
	end
	
	return data
end
	
----------------------------------------------------------------
-- STRUCTURE --
----------------------------------------------------------------

-- Build action list for program actions

program_actions = {}
program_actions.LIST = program_list_handler
program_actions.SET = program_set_handler
program_actions.PGM = program_pgm_handler
program_actions.START = program_start_handler
program_actions.ABORT	= program_abort_handler
program_actions.STATUS = program_status_handler

Added Site/rest/rest_sup.lua.

















































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
------------------------------------------------------------------------------------
--
-- REST SUPPORT CODE
--
--	This code is used to support the REST traverse of the virtual website
--  When a request is received we have:
--		RQST	- Request structure
--		TYPE	- Get(3) or Post (6)
--	Thes available from the request
--		URL		- Path to request parsed as a lua list elements 1 - n
--		DATA	- JSON data structure accompaning POST request
--
--	The request is handled by rest_handler() which is passed
--	request,type,url and action_list
--
--	Action list is a Lua list indexed by URL and the value is the 
--	routine to call
--
--	26-Nov-2010	Update json_kvp function to put ,'s after KVP's
--
------------------------------------------------------------------------------------

HTTP_GET	= 3	-- Important HTTP types
HTTP_POST	= 6

HTTP_NOT_FOUND = "<html><head><title>404 PAGE</title></head><body><center><h1>404 Page NOT FOUND</h1></center></body></html>"
print("--REST_SUP LOADED--")

------------------------------------------------------------------------------------
--
--	rest_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function rest_handler(rqst,htype,url,n,al)

	local out
	local fcn = nil
	
	-- (1) Do we have a path to the next
	
	out = url[n]
	print(n)
	print("Searching for ",url[n])
	
	if( out ~= nil )
	then
		fcn = al[out]
	end
		
	if( fcn ~= nil )
	then
		-- Call next function level
		
		fcn( rqst,htype,url,n+1,al )
	else
		-- FAILURE return page not found
		
		rqst:close(HTTP_NOT_FOUND)
	end
end

------------------------------------------------------------------------------------
--
--	jscon_kvp(list)
--
--	INPUT:	list	- Lua table
--
--	OUTPUT:	Table output as a JSON KVP object
--	{ "list key 1" : "list value 1" .....}
--
------------------------------------------------------------------------------------

function json_kvp(list)
	local out = nil
	local key,value
	local part
	local pass_one = 1
	
	-- If not a list then bail
	
	if( type(list) == "table" )
	then
	
		-- Build the start of the output
		
		out = "{ "
		
		-- Iterate through the list 
		
		for key,value in next, list
		do
			if( type(value) == "number" )
			then
				value = tostring(value)
			end
			
			if( type(key) == "number" )
			then
				key = tostring(key)
			end
			
			if( type(value) == "string" )
			then
				out = out .. string.format("\"%s\" : \"%s\", ",key,value)
			else
				if( type(value) == "table" )
				then
					part = json_kvp( value )
					out = out .. string.format("\"%s\" : %s, ",key,part)
				end
			end
		end
		
		-- At this point remove the trailing ","
		
		out = string.sub(out,1,string.len(out)-2)
		out = out .. " "
		
		-- Close the JSON object
		
		out = out .. " } "
	end
	
	return out
end
	
	

Added Site/rest/tester.lua.

































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
------------------------------------------------------------------------------------
--
-- REST - LEVEL 0	- Handles site following REST/
--
--
--	This handles the top level
------------------------------------------------------------------------------------
-- First set up require path


path = "../../site/rest"	-- This is the relationship of the
							-- Executible to where the scripts
							-- are kept

-- Set that into the package search path							
_G.package.path = path .. "/?.lua;" .. _G.package.path

-- Now all modules will load with just a simple require + name

require "rest_sup"

l1 = {}
l1.sublist = "subvalue"
l1.subvalue1 = "subvalue1"

list = { }
list.key = "value"
list.key1 = "value1"
list.key2 = "value2"
list.tbl = l1
list.num = 123
list[1] = "test"
list[2] = "val"

print("-- Input List --")
table.foreach(list,print)
print("----------------")

out = json_kvp(list)

print("--- Output JSON --")
print(out)
print("------------------")

parse = parsers.json(out)
print(parse)


Added Site/rest/wabco.lua.



































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
------------------------------------------------------------------------------------
--
-- REST - LEVEL 1	- Handles site following REST/WABCO/....
--
--
--	This handles the WABCO commands
--		PLOT	- On GET returns { "line1" : "value" .... }
--
--	 3-Mar-2011	Initial version
--	 5-Mar-2011 [35b17f8dc3] Change to use POST in PLOT data cmd
--	 7-Mar-2011 Change to send data as part of the URI as a JSON request
--	 8-Mar-2011 Change for better simulation
--	 6-Nov-2011 Update to make stand alone startup and run as main script.
--
------------------------------------------------------------------------------------

-------------------------------------------------------------------------------
--                  SUPPORT FUNCTIONS
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--  flag_srch( argv,flag,data )   - Find the port in the argument list
--
--  INPUT:      argv    - Program argument list
--              flag    - Look for this string (i.e. -flag) in list
--              data    - If non-nil get the field following flag slot
--
--  OUTPUT      If data = nil return nil if flag not found and 1 if found
--              If data <> nil return nil if flag not found or next field if found
--
-------------------------------------------------------------------------------

function flag_srch( argv,flag,data )
    local rtnval = nil
    
    -- Loop over the list and check each item for match
    
    for i=1,table.getn(argv) 
    do
        if( flag == argv[i] )
        then
            -- Found so two cases 
            -- (a) If data == nil then return 1
            -- (b) If data != nil then return argv[i+1]
            
            if( data == nil  )
            then
                rtnval = 1
            else
                rtnval = argv[i+1]
            end
            
            -- In either case just break out
            
            break
        end
    end
    
    return( rtnval )
end

-------------------------------------------------------------------------------
--                 MAIN PROGRAM
-------------------------------------------------------------------------------

-- Pull up items from command line
-- NOTE THESE ARE GLOBALS FOR THE REST
-- OF THE SYSTEM

REST_LCN = flag_srch( arg,"-rest",1 )
HTTP_LCN = flag_srch(arg,"-http",1)
SHOW_LCN = flag_srch(arg,"-show",1)

if( REST_LCN == nil )
then
	print("SYNTAX ERROR: -rest <REST file lcn> NOT GIVEN")
	print("Shutting down")
	os.exit(-1)
end

if( HTTP_LCN == nil )
then
	print("SYNTAX ERROR: -http <HTTP file lcn> NOT GIVEN")
	print("Shutting down")
	os.exit(-1)
end

if( SHOW_LCN == nil )
then
	print("WARNING: -show <SHOW file lcn> NOT GIVEN")
	print("Automated Shows Disabled")
end

-- Set that into the package search path							
_G.package.path = REST_LCN .. "/?.lua;" .. _G.package.path

require "rest_sup"

MAX_PSI	= 50		-- Max pressure seen
RUN = 1
print("--WABCO LOADED--")

------------------------------------------------------------------------------------
--
--	wabco_handler(rqst,type,url,n,al)
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
------------------------------------------------------------------------------------

function wabco_handler(rqst,htype,url,n,al)
	local out
	
	print("-- Entering WABCO --")
	
	rest_handler(rqst,htype,url,n,wabco_actions)
end

------------------------------------------------------------------------------------
--
--	plot_handler(rqst,type,url,n,al)	- Shutdown system if requested
--
--	INPUT:	rqst	- HTTP request
--			htype	- Type of request
--			url		- Path of request, look at last link for stop
--			n		- Position on path to consider
--			al		- Action list
--
--	OUTPUT:	NONE
--
--	NOTE: Data request as last part of URI PLOT/{ "W" : "##" }
--
------------------------------------------------------------------------------------

function plot_handler(rqst,htype,url,n,al)
	local out
	local data
	local w
	local pi=3.1415926
	local l1,l2,l3,l4
	
	-- Is this a POST, if so look at next command
	
	if( htype == HTTP_POST )
	then
	
		print("-- Entering PLOT --")
		
		if( url ~= nil and url[3] ~= nil )
		then
			jdata = url[3]
		else
			jdata = "{ \"w\" : \"0\" }"
		end
		print(jdata)			-- Show received data


		-- Parse the string to just extract the JSON
		
		w = string.find(jdata,"}")
		jdata = string.sub(jdata,1,w+1)
		data = parsers.json(jdata)
		
		-- Handle the data
		
		if( data ~= nil )
		then
		
			if( data.JOBJ ~= nil )
			then
				if( data.JOBJ.W ~= nil )
				then
					data = tonumber(data.JOBJ.W)
					
					-- Next calculate the PI fraction
					
					w = data * pi/20
					
					-- Now calculate the sines
					
					l1 = math.sin(w + 0.9*pi) + 1
					l2 = math.sin(w + 0.5*pi) + 1
					l3 = math.sin(w + 1.2*pi) + 1
					l4 = math.sin(w + 1.5*pi) + 1
					
					l1 = l1 * MAX_PSI
					l2 = l2 * MAX_PSI
					l3 = l3 * MAX_PSI
					l4 = l4 * MAX_PSI
					
					-- Build the response message
					
					out = string.format("{ \"LINE1\" : \"%6.4f\",\"LINE2\" : \"%6.4f\",\"LINE3\" : \"%6.4f\",\"LINE4\" : \"%6.4f\" }",l1,l2,l3,l4)
					print(out)
				end
			end
		end
	else
		out = "{ \"WABCO\" : \"NO POST\" }"
	end
	
	-- Close the request
	
	rqst:close(out)
	
end

----------------------------------------------------------------
-- STRUCTURE
----------------------------------------------------------------
-- Build action list for admin actions

wabco_actions = {}
wabco_actions.PLOT = plot_handler
			
-- (1) Open channel and start HTTP

val = http.start(8081,HTTP_LCN,"rest")
if( val ~= nil )
then
	-- Open FIRENET, if fail then bail
	
	while( RUN )
	do
		-- Wait for data
		
		h = http.open()
		if( h ~= nil )
		then
			------------------------------
			print("*** DATA RECEIVED ***")
			url,htype = h:url()
			if( url ~= nil )
			then
				print("HTTP TYPE: ",htype);
				table.foreach(url,print)
				
				-- Handle the request
				
				rest_handler(h,htype,url,2,wabco_actions)
				timer.sleep(5)				-- Let the other threads run
			end
			------------------------------
		end
	end	
else
	print("** Failed to open HTTP Server **")
end

print("-- END RUN -- ")
			

Added Site/webstart.sh.



























>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
# Startup for FIRENET
# Simulated network with 10 nodes

# Show addresses

ifconfig | grep inet

# Start'er up

../build/Debug\ INTEL/firenet -c rest/main5010.lua -p X -n 10 -rest rest -http Site_J -show ../Shows


Added Site/webstart_real.sh.



























>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
# Startup for FIRENET
# With real network

# Show addresses

ifconfig | grep inet

# Start'er up

../build/Debug\ INTEL/firenet -c rest/main.lua -p 1 -log log.txt -rest rest -http Site_J -show ../Shows


Changes to Tools/AVRpgmr/.DS_Store.

cannot compute difference between binary files

Changes to Tools/AVRpgmr/pgmr.xcodeproj/project.pbxproj.

158
159
160
161
162
163
164


165
166

167



168
169
170
171
172
173
174
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;


			buildConfigurationList = 38FBA1E5099828CD0087E94A /* Build configuration list for PBXProject "pgmr" */;
			compatibilityVersion = "Xcode 3.2";

			hasScannedForEncodings = 1;



			mainGroup = 08FB7794FE84155DC02AAC07 /* pgmr */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* pgmr */,
			);
		};







>
>


>

>
>
>







158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;
			attributes = {
			};
			buildConfigurationList = 38FBA1E5099828CD0087E94A /* Build configuration list for PBXProject "pgmr" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 1;
			knownRegions = (
				en,
			);
			mainGroup = 08FB7794FE84155DC02AAC07 /* pgmr */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* pgmr */,
			);
		};
195
196
197
198
199
200
201

202

203
204
205
206
207
208
209
210
211
212
213
214

215

216
217
218
219
220
221
222
223
224
225

226

227
228
229
230
231
232
233
				COPY_PHASE_STRIP = NO;
				FRAMEWORK_SEARCH_PATHS = /Users/jim/Dev/AVR/arvpgmr/pgmr;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				INSTALL_PATH = "$(HOME)/bin";

				PRODUCT_NAME = pgmr;

				ZERO_LINK = NO;
			};
			name = Development;
		};
		38FBA1E3099828CD0087E94A /* Deployment */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				COPY_PHASE_STRIP = YES;
				FRAMEWORK_SEARCH_PATHS = /Users/jim/Dev/AVR/arvpgmr/pgmr;
				GCC_ENABLE_FIX_AND_CONTINUE = NO;
				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
				INSTALL_PATH = "$(HOME)/bin";

				PRODUCT_NAME = pgmr;

				ZERO_LINK = NO;
			};
			name = Deployment;
		};
		38FBA1E4099828CD0087E94A /* Default */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				FRAMEWORK_SEARCH_PATHS = /Users/jim/Dev/AVR/arvpgmr/pgmr;
				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
				INSTALL_PATH = "$(HOME)/bin";

				PRODUCT_NAME = pgmr;

			};
			name = Default;
		};
		38FBA1E6099828CD0087E94A /* Development */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;







>

>












>

>










>

>







201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
				COPY_PHASE_STRIP = NO;
				FRAMEWORK_SEARCH_PATHS = /Users/jim/Dev/AVR/arvpgmr/pgmr;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				INSTALL_PATH = "$(HOME)/bin";
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				PRODUCT_NAME = pgmr;
				SDKROOT = macosx;
				ZERO_LINK = NO;
			};
			name = Development;
		};
		38FBA1E3099828CD0087E94A /* Deployment */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				COPY_PHASE_STRIP = YES;
				FRAMEWORK_SEARCH_PATHS = /Users/jim/Dev/AVR/arvpgmr/pgmr;
				GCC_ENABLE_FIX_AND_CONTINUE = NO;
				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
				INSTALL_PATH = "$(HOME)/bin";
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				PRODUCT_NAME = pgmr;
				SDKROOT = macosx;
				ZERO_LINK = NO;
			};
			name = Deployment;
		};
		38FBA1E4099828CD0087E94A /* Default */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				FRAMEWORK_SEARCH_PATHS = /Users/jim/Dev/AVR/arvpgmr/pgmr;
				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
				INSTALL_PATH = "$(HOME)/bin";
				MACOSX_DEPLOYMENT_TARGET = 10.10;
				PRODUCT_NAME = pgmr;
				SDKROOT = macosx;
			};
			name = Default;
		};
		38FBA1E6099828CD0087E94A /* Development */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;

Added Tools/Bin/MsgTest.

cannot compute difference between binary files

Added Tools/MsgTest/MsgTest.1.































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples.
.\"See Also:
.\"man mdoc.samples for a complete listing of options
.\"man mdoc for the short list of editing options
.\"/usr/share/misc/mdoc.template
.Dd 1/2/11               \" DATE 
.Dt MsgTest 1      \" Program name and manual section number 
.Os Darwin
.Sh NAME                 \" Section Header - required - don't modify 
.Nm MsgTest,
.\" The following lines are read in generating the apropos(man -k) database. Use only key
.\" words here as the database is built based on the words here and in the .ND line. 
.Nm Other_name_for_same_program(),
.Nm Yet another name for the same program.
.\" Use .Nm macro to designate other names for the documented program.
.Nd This line parsed for whatis database.
.Sh SYNOPSIS             \" Section Header - required - don't modify
.Nm
.Op Fl abcd              \" [-abcd]
.Op Fl a Ar path         \" [-a path] 
.Op Ar file              \" [file]
.Op Ar                   \" [file ...]
.Ar arg0                 \" Underlined argument - use .Ar anywhere to underline
arg2 ...                 \" Arguments
.Sh DESCRIPTION          \" Section Header - required - don't modify
Use the .Nm macro to refer to your program throughout the man page like such:
.Nm
Underlining is accomplished with the .Ar macro like this:
.Ar underlined text .
.Pp                      \" Inserts a space
A list of items with descriptions:
.Bl -tag -width -indent  \" Begins a tagged list 
.It item a               \" Each item preceded by .It macro
Description of item a
.It item b
Description of item b
.El                      \" Ends the list
.Pp
A list of flags and their descriptions:
.Bl -tag -width -indent  \" Differs from above in tag removed 
.It Fl a                 \"-a flag as a list item
Description of -a flag
.It Fl b
Description of -b flag
.El                      \" Ends the list
.Pp
.\" .Sh ENVIRONMENT      \" May not be needed
.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1
.\" .It Ev ENV_VAR_1
.\" Description of ENV_VAR_1
.\" .It Ev ENV_VAR_2
.\" Description of ENV_VAR_2
.\" .El                      
.Sh FILES                \" File used or created by the topic of the man page
.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact
.It Pa /usr/share/file_name
FILE_1 description
.It Pa /Users/joeuser/Library/really_long_file_name
FILE_2 description
.El                      \" Ends the list
.\" .Sh DIAGNOSTICS       \" May not be needed
.\" .Bl -diag
.\" .It Diagnostic Tag
.\" Diagnostic informtion here.
.\" .It Diagnostic Tag
.\" Diagnostic informtion here.
.\" .El
.Sh SEE ALSO 
.\" List links in ascending order by section, alphabetically within a section.
.\" Please do not reference files that do not exist without filing a bug report
.Xr a 1 , 
.Xr b 1 ,
.Xr c 1 ,
.Xr a 2 ,
.Xr b 2 ,
.Xr a 3 ,
.Xr b 3 
.\" .Sh BUGS              \" Document known, unremedied bugs 
.\" .Sh HISTORY           \" Document history if command behaves in a unique manner

Added Tools/MsgTest/MsgTest.xcodeproj/jim.mode1v3.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>ActivePerspectiveName</key>
	<string>Project</string>
	<key>AllowedModules</key>
	<array>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXSmartGroupTreeModule</string>
			<key>Name</key>
			<string>Groups and Files Outline View</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXNavigatorGroup</string>
			<key>Name</key>
			<string>Editor</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCTaskListModule</string>
			<key>Name</key>
			<string>Task List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDetailModule</string>
			<key>Name</key>
			<string>File and Smart Group Detail Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXBuildResultsModule</string>
			<key>Name</key>
			<string>Detailed Build Results Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXProjectFindModule</string>
			<key>Name</key>
			<string>Project Batch Find Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCProjectFormatConflictsModule</string>
			<key>Name</key>
			<string>Project Format Conflicts List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXBookmarksModule</string>
			<key>Name</key>
			<string>Bookmarks Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXClassBrowserModule</string>
			<key>Name</key>
			<string>Class Browser</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXCVSModule</string>
			<key>Name</key>
			<string>Source Code Control Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXDebugBreakpointsModule</string>
			<key>Name</key>
			<string>Debug Breakpoints Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDockableInspector</string>
			<key>Name</key>
			<string>Inspector</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXOpenQuicklyModule</string>
			<key>Name</key>
			<string>Open Quickly Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugSessionModule</string>
			<key>Name</key>
			<string>Debugger</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugCLIModule</string>
			<key>Name</key>
			<string>Debug Console</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCSnapshotModule</string>
			<key>Name</key>
			<string>Snapshots Tool</string>
		</dict>
	</array>
	<key>BundlePath</key>
	<string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
	<key>Description</key>
	<string>DefaultDescriptionKey</string>
	<key>DockingSystemVisible</key>
	<false/>
	<key>Extension</key>
	<string>mode1v3</string>
	<key>FavBarConfig</key>
	<dict>
		<key>PBXProjectModuleGUID</key>
		<string>38FEDEAA12D0ADC400ED9E77</string>
		<key>XCBarModuleItemNames</key>
		<dict/>
		<key>XCBarModuleItems</key>
		<array/>
	</dict>
	<key>FirstTimeWindowDisplayed</key>
	<false/>
	<key>Identifier</key>
	<string>com.apple.perspectives.project.mode1v3</string>
	<key>MajorVersion</key>
	<integer>33</integer>
	<key>MinorVersion</key>
	<integer>0</integer>
	<key>Name</key>
	<string>Default</string>
	<key>Notifications</key>
	<array>
		<dict>
			<key>XCObserverAutoDisconnectKey</key>
			<true/>
			<key>XCObserverDefintionKey</key>
			<dict/>
			<key>XCObserverFactoryKey</key>
			<string>XCPerspectivesSpecificationIdentifier</string>
			<key>XCObserverGUIDKey</key>
			<string>XCObserverProjectIdentifier</string>
			<key>XCObserverNotificationKey</key>
			<string>PBXStatusBuildStateMessageNotification</string>
			<key>XCObserverTargetKey</key>
			<string>XCMainBuildResultsModuleGUID</string>
			<key>XCObserverTriggerKey</key>
			<string>awakenModuleWithObserver:</string>
			<key>XCObserverValidationKey</key>
			<dict/>
		</dict>
	</array>
	<key>OpenEditors</key>
	<array>
		<dict>
			<key>Content</key>
			<dict>
				<key>PBXProjectModuleGUID</key>
				<string>38E2DFB912E590810097841A</string>
				<key>PBXProjectModuleLabel</key>
				<string>mac.h</string>
				<key>PBXSplitModuleInNavigatorKey</key>
				<dict>
					<key>Split0</key>
					<dict>
						<key>PBXProjectModuleGUID</key>
						<string>38E2DFBA12E590810097841A</string>
						<key>PBXProjectModuleLabel</key>
						<string>mac.h</string>
						<key>_historyCapacity</key>
						<integer>0</integer>
						<key>bookmark</key>
						<string>38E2DFBD12E590990097841A</string>
						<key>history</key>
						<array>
							<string>38E2DFB512E590660097841A</string>
						</array>
					</dict>
					<key>SplitCount</key>
					<string>1</string>
				</dict>
				<key>StatusBarVisibility</key>
				<true/>
			</dict>
			<key>Geometry</key>
			<dict>
				<key>Frame</key>
				<string>{{0, 20}, {634, 504}}</string>
				<key>PBXModuleWindowStatusBarHidden2</key>
				<false/>
				<key>RubberWindowFrame</key>
				<string>-707 255 634 545 -1280 -224 1280 1024 </string>
			</dict>
		</dict>
	</array>
	<key>PerspectiveWidths</key>
	<array>
		<integer>-1</integer>
		<integer>-1</integer>
	</array>
	<key>Perspectives</key>
	<array>
		<dict>
			<key>ChosenToolbarItems</key>
			<array>
				<string>active-combo-popup</string>
				<string>buildOrClean</string>
				<string>build-and-go</string>
				<string>go</string>
				<string>debugger-enable-breakpoints</string>
				<string>servicesModulebreakpoints</string>
				<string>com.apple.ide.PBXToolbarStopButton</string>
				<string>servicesModulefind</string>
			</array>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProjectWithEditor</string>
			<key>Identifier</key>
			<string>perspective.project</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<true/>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>1CE0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>08FB7794FE84155DC02AAC07</string>
								<string>08FB7795FE84155DC02AAC07</string>
								<string>38FEDEE912D0B20300ED9E77</string>
								<string>1C37FAAC04509CD000000102</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>6</integer>
									<integer>3</integer>
									<integer>1</integer>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 664}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<true/>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 682}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>587 -3 617 723 0 0 1280 778 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>203pt</string>
				</dict>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20306471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CE0B20406471E060097A5F4</string>
										<key>PBXProjectModuleLabel</key>
										<string></string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {409, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>587 -3 617 723 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20506471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 5}, {409, 677}}</string>
								<key>RubberWindowFrame</key>
								<string>587 -3 617 723 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>677pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>409pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCModuleDock</string>
				<string>PBXNavigatorGroup</string>
				<string>XCDetailModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>38E2DFB712E590810097841A</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>38E2DFB812E590810097841A</string>
				<string>1CE0B20306471E060097A5F4</string>
				<string>1CE0B20506471E060097A5F4</string>
			</array>
			<key>ToolbarConfigUserDefaultsMinorVersion</key>
			<string>2</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.defaultV3</string>
		</dict>
		<dict>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProject</string>
			<key>Identifier</key>
			<string>perspective.morph</string>
			<key>IsVertical</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<integer>1</integer>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C08E77C0454961000C914BD</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>11E0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>29B97314FDCFA39411CA2CEA</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 337}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<integer>1</integer>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 355}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>373 269 690 397 0 0 1440 878 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Morph</string>
			<key>PreferredWidth</key>
			<integer>300</integer>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>11E0B1FE06471DED0097A5F4</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.default.shortV3</string>
		</dict>
	</array>
	<key>PerspectivesBarVisible</key>
	<false/>
	<key>ShelfIsVisible</key>
	<false/>
	<key>SourceDescription</key>
	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
	<key>StatusbarIsVisible</key>
	<true/>
	<key>TimeStamp</key>
	<real>317034649.214715</real>
	<key>ToolbarDisplayMode</key>
	<integer>1</integer>
	<key>ToolbarIsVisible</key>
	<true/>
	<key>ToolbarSizeMode</key>
	<integer>1</integer>
	<key>Type</key>
	<string>Perspectives</string>
	<key>UpdateMessage</key>
	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
	<key>WindowJustification</key>
	<integer>5</integer>
	<key>WindowOrderList</key>
	<array>
		<string>38FEDEAE12D0ADCF00ED9E77</string>
		<string>38E2DFB912E590810097841A</string>
		<string>/Users/jschimpf/Public/Firenet/Tools/MsgTest/MsgTest.xcodeproj</string>
	</array>
	<key>WindowString</key>
	<string>587 -3 617 723 0 0 1280 778 </string>
	<key>WindowToolsV3</key>
	<array>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.build</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528F0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {500, 218}}</string>
								<key>RubberWindowFrame</key>
								<string>236 210 500 500 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>218pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>XCMainBuildResultsModuleGUID</string>
								<key>PBXProjectModuleLabel</key>
								<string>Build Results</string>
								<key>XCBuildResultsTrigger_Collapse</key>
								<integer>1021</integer>
								<key>XCBuildResultsTrigger_Open</key>
								<integer>1010</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 223}, {500, 236}}</string>
								<key>RubberWindowFrame</key>
								<string>236 210 500 500 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXBuildResultsModule</string>
							<key>Proportion</key>
							<string>236pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>459pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Build Results</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBuildResultsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>38FEDEAE12D0ADCF00ED9E77</string>
				<string>38E2DFBC12E590810097841A</string>
				<string>1CD0528F0623707200166675</string>
				<string>XCMainBuildResultsModuleGUID</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.buildV3</string>
			<key>WindowString</key>
			<string>236 210 500 500 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>38FEDEAE12D0ADCF00ED9E77</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debugger</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>Debugger</key>
								<dict>
									<key>HorizontalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {361, 326}}</string>
											<string>{{361, 0}, {431, 326}}</string>
										</array>
									</dict>
									<key>VerticalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {792, 326}}</string>
											<string>{{0, 326}, {792, 345}}</string>
										</array>
									</dict>
								</dict>
								<key>LauncherConfigVersion</key>
								<string>8</string>
								<key>PBXProjectModuleGUID</key>
								<string>1C162984064C10D400B95A72</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debug - GLUTExamples (Underwater)</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>DebugConsoleVisible</key>
								<string>None</string>
								<key>DebugConsoleWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>DebugSTDIOWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>Frame</key>
								<string>{{0, 0}, {792, 671}}</string>
								<key>PBXDebugSessionStackFrameViewKey</key>
								<dict>
									<key>DebugVariablesTableConfiguration</key>
									<array>
										<string>Name</string>
										<real>120</real>
										<string>Value</string>
										<real>85</real>
										<string>Summary</string>
										<real>201</real>
									</array>
									<key>Frame</key>
									<string>{{361, 0}, {431, 326}}</string>
									<key>RubberWindowFrame</key>
									<string>-851 179 792 712 -1024 123 1024 768 </string>
								</dict>
								<key>RubberWindowFrame</key>
								<string>-851 179 792 712 -1024 123 1024 768 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugSessionModule</string>
							<key>Proportion</key>
							<string>671pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>671pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugSessionModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1CD10A99069EF8BA00B06720</string>
				<string>38FEDEC812D0AFC200ED9E77</string>
				<string>1C162984064C10D400B95A72</string>
				<string>38FEDEC912D0AFC200ED9E77</string>
				<string>38FEDECA12D0AFC200ED9E77</string>
				<string>38FEDECB12D0AFC200ED9E77</string>
				<string>38FEDECC12D0AFC200ED9E77</string>
				<string>38FEDECD12D0AFC200ED9E77</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugV3</string>
			<key>WindowString</key>
			<string>-851 179 792 712 -1024 123 1024 768 </string>
			<key>WindowToolGUID</key>
			<string>1CD10A99069EF8BA00B06720</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.find</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Dock</key>
							<array>
								<dict>
									<key>ContentConfiguration</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CDD528C0622207200134675</string>
										<key>PBXProjectModuleLabel</key>
										<string>&lt;No Editor&gt;</string>
										<key>PBXSplitModuleInNavigatorKey</key>
										<dict>
											<key>Split0</key>
											<dict>
												<key>PBXProjectModuleGUID</key>
												<string>1CD0528D0623707200166675</string>
											</dict>
											<key>SplitCount</key>
											<string>1</string>
										</dict>
										<key>StatusBarVisibility</key>
										<integer>1</integer>
									</dict>
									<key>GeometryConfiguration</key>
									<dict>
										<key>Frame</key>
										<string>{{0, 0}, {781, 167}}</string>
										<key>RubberWindowFrame</key>
										<string>62 385 781 470 0 0 1440 878 </string>
									</dict>
									<key>Module</key>
									<string>PBXNavigatorGroup</string>
									<key>Proportion</key>
									<string>781pt</string>
								</dict>
							</array>
							<key>Proportion</key>
							<string>50%</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528E0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>Project Find</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{8, 0}, {773, 254}}</string>
								<key>RubberWindowFrame</key>
								<string>62 385 781 470 0 0 1440 878 </string>
							</dict>
							<key>Module</key>
							<string>PBXProjectFindModule</string>
							<key>Proportion</key>
							<string>50%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>428pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Find</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXProjectFindModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C530D57069F1CE1000CFCEE</string>
				<string>1C530D58069F1CE1000CFCEE</string>
				<string>1C530D59069F1CE1000CFCEE</string>
				<string>1CDD528C0622207200134675</string>
				<string>1C530D5A069F1CE1000CFCEE</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>1CD0528E0623707200166675</string>
			</array>
			<key>WindowString</key>
			<string>62 385 781 470 0 0 1440 878 </string>
			<key>WindowToolGUID</key>
			<string>1C530D57069F1CE1000CFCEE</string>
			<key>WindowToolIsVisible</key>
			<integer>0</integer>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>MENUSEPARATOR</string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debuggerConsole</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAAC065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debugger Console</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {650, 209}}</string>
								<key>RubberWindowFrame</key>
								<string>419 292 650 250 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugCLIModule</string>
							<key>Proportion</key>
							<string>209pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>209pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger Console</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugCLIModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAAD065D492600B07095</string>
				<string>38FEDECE12D0AFC200ED9E77</string>
				<string>1C78EAAC065D492600B07095</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.consoleV3</string>
			<key>WindowString</key>
			<string>419 292 650 250 0 0 1280 1002 </string>
			<key>WindowToolGUID</key>
			<string>1C78EAAD065D492600B07095</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.snapshots</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCSnapshotModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Snapshots</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCSnapshotModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<string>Yes</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.snapshots</string>
			<key>WindowString</key>
			<string>315 824 300 550 0 0 1440 878 </string>
			<key>WindowToolIsVisible</key>
			<string>Yes</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.scm</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAB2065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>&lt;No Editor&gt;</string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1C78EAB3065D492600B07095</string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<integer>1</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {452, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD052920623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>SCM</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ConsoleFrame</key>
								<string>{{0, 259}, {452, 0}}</string>
								<key>Frame</key>
								<string>{{0, 7}, {452, 259}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
								<key>TableConfiguration</key>
								<array>
									<string>Status</string>
									<real>30</real>
									<string>FileName</string>
									<real>199</real>
									<string>Path</string>
									<real>197.0950012207031</real>
								</array>
								<key>TableFrame</key>
								<string>{{0, 0}, {452, 250}}</string>
							</dict>
							<key>Module</key>
							<string>PBXCVSModule</string>
							<key>Proportion</key>
							<string>262pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>266pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>SCM</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXCVSModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAB4065D492600B07095</string>
				<string>1C78EAB5065D492600B07095</string>
				<string>1C78EAB2065D492600B07095</string>
				<string>1CD052920623707200166675</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.scm</string>
			<key>WindowString</key>
			<string>743 379 452 308 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.breakpoints</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXBottomSmartGroupGIDs</key>
								<array>
									<string>1C77FABC04509CD000000102</string>
								</array>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B1FE06471DED0097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Files</string>
								<key>PBXProjectStructureProvided</key>
								<string>no</string>
								<key>PBXSmartGroupTreeModuleColumnData</key>
								<dict>
									<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
									<array>
										<real>168</real>
									</array>
									<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
									<array>
										<string>MainColumn</string>
									</array>
								</dict>
								<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
								<dict>
									<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
									<array>
										<string>1C77FABC04509CD000000102</string>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
									<array>
										<array>
											<integer>0</integer>
										</array>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
									<string>{{0, 0}, {168, 350}}</string>
								</dict>
								<key>PBXTopSmartGroupGIDs</key>
								<array/>
								<key>XCIncludePerspectivesSwitch</key>
								<false/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {185, 368}}</string>
								<key>GroupTreeTableConfiguration</key>
								<array>
									<string>MainColumn</string>
									<real>168</real>
								</array>
								<key>RubberWindowFrame</key>
								<string>-830 459 744 409 -1024 123 1024 768 </string>
							</dict>
							<key>Module</key>
							<string>PBXSmartGroupTreeModule</string>
							<key>Proportion</key>
							<string>185pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CA1AED706398EBD00589147</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{190, 0}, {554, 368}}</string>
								<key>RubberWindowFrame</key>
								<string>-830 459 744 409 -1024 123 1024 768 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>554pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>368pt</string>
				</dict>
			</array>
			<key>MajorVersion</key>
			<integer>3</integer>
			<key>MinorVersion</key>
			<integer>0</integer>
			<key>Name</key>
			<string>Breakpoints</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCDetailModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>38FEDF2112D0E1B500ED9E77</string>
				<string>38FEDF2212D0E1B500ED9E77</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>1CA1AED706398EBD00589147</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.breakpointsV3</string>
			<key>WindowString</key>
			<string>-830 459 744 409 -1024 123 1024 768 </string>
			<key>WindowToolGUID</key>
			<string>38FEDF2112D0E1B500ED9E77</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.debugAnimator</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debug Visualizer</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXNavigatorGroup</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugAnimatorV3</string>
			<key>WindowString</key>
			<string>100 100 700 500 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.bookmarks</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXBookmarksModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Bookmarks</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBookmarksModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowString</key>
			<string>538 42 401 187 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.projectFormatConflicts</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCProjectFormatConflictsModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Format Conflicts</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCProjectFormatConflictsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowContentMinSize</key>
			<string>450 300</string>
			<key>WindowString</key>
			<string>50 850 472 307 0 0 1440 877</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.classBrowser</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>OptionsSetName</key>
								<string>Hierarchy, all classes</string>
								<key>PBXProjectModuleGUID</key>
								<string>1CA6456E063B45B4001379D8</string>
								<key>PBXProjectModuleLabel</key>
								<string>Class Browser - NSObject</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ClassesFrame</key>
								<string>{{0, 0}, {374, 96}}</string>
								<key>ClassesTreeTableConfiguration</key>
								<array>
									<string>PBXClassNameColumnIdentifier</string>
									<real>208</real>
									<string>PBXClassBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>Frame</key>
								<string>{{0, 0}, {630, 331}}</string>
								<key>MembersFrame</key>
								<string>{{0, 105}, {374, 395}}</string>
								<key>MembersTreeTableConfiguration</key>
								<array>
									<string>PBXMemberTypeIconColumnIdentifier</string>
									<real>22</real>
									<string>PBXMemberNameColumnIdentifier</string>
									<real>216</real>
									<string>PBXMemberTypeColumnIdentifier</string>
									<real>97</real>
									<string>PBXMemberBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>PBXModuleWindowStatusBarHidden2</key>
								<integer>1</integer>
								<key>RubberWindowFrame</key>
								<string>385 179 630 352 0 0 1440 878 </string>
							</dict>
							<key>Module</key>
							<string>PBXClassBrowserModule</string>
							<key>Proportion</key>
							<string>332pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>332pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Class Browser</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXClassBrowserModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C0AD2AF069F1E9B00FABCE6</string>
				<string>1C0AD2B0069F1E9B00FABCE6</string>
				<string>1CA6456E063B45B4001379D8</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.classbrowser</string>
			<key>WindowString</key>
			<string>385 179 630 352 0 0 1440 878 </string>
			<key>WindowToolGUID</key>
			<string>1C0AD2AF069F1E9B00FABCE6</string>
			<key>WindowToolIsVisible</key>
			<integer>0</integer>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.refactoring</string>
			<key>IncludeInToolsMenu</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{0, 0}, {500, 335}</string>
								<key>RubberWindowFrame</key>
								<string>{0, 0}, {500, 335}</string>
							</dict>
							<key>Module</key>
							<string>XCRefactoringModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Refactoring</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCRefactoringModule</string>
			</array>
			<key>WindowString</key>
			<string>200 200 500 356 0 0 1920 1200 </string>
		</dict>
	</array>
</dict>
</plist>

Added Tools/MsgTest/MsgTest.xcodeproj/jim.pbxuser.



















































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
// !$*UTF8*$!
{
	08FB7793FE84155DC02AAC07 /* Project object */ = {
		activeBuildConfigurationName = Release;
		activeExecutable = 38FEDEA512D0ADBD00ED9E77 /* MsgTest */;
		activeTarget = 8DD76FA90486AB0100D96B5E /* MsgTest */;
		addToTargets = (
			8DD76FA90486AB0100D96B5E /* MsgTest */,
		);
		breakpoints = (
			38FEDF2F12D0E6A000ED9E77 /* packet.c:147 */,
		);
		codeSenseManager = 38FEDEAC12D0ADC400ED9E77 /* Code sense */;
		executables = (
			38FEDEA512D0ADBD00ED9E77 /* MsgTest */,
		);
		perUserDictionary = {
			"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					20,
					198,
					20,
					99,
					99,
					29,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXBreakpointsDataSource_ActionID,
					PBXBreakpointsDataSource_TypeID,
					PBXBreakpointsDataSource_BreakpointID,
					PBXBreakpointsDataSource_UseID,
					PBXBreakpointsDataSource_LocationID,
					PBXBreakpointsDataSource_ConditionID,
					PBXBreakpointsDataSource_IgnoreCountID,
					PBXBreakpointsDataSource_ContinueID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXErrorsWarningsDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXErrorsWarningsDataSource_LocationID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					300,
					60,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXErrorsWarningsDataSource_TypeID,
					PBXErrorsWarningsDataSource_MessageID,
					PBXErrorsWarningsDataSource_LocationID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					170,
					20,
					48,
					43,
					43,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
					PBXFileDataSource_Target_ColumnID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFindDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFindDataSource_LocationID;
				PBXFileTableDataSourceColumnWidthsKey = (
					200,
					184,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFindDataSource_MessageID,
					PBXFindDataSource_LocationID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 317034586;
			PBXWorkspaceStateSaveDate = 317034586;
		};
		perUserProjectItems = {
			38E2DFB512E590660097841A /* PBXBookmark */ = 38E2DFB512E590660097841A /* PBXBookmark */;
			38E2DFBD12E590990097841A /* PBXTextBookmark */ = 38E2DFBD12E590990097841A /* PBXTextBookmark */;
		};
		sourceControlManager = 38FEDEAB12D0ADC400ED9E77 /* Source Control */;
		userBuildSettings = {
		};
	};
	08FB7796FE84155DC02AAC07 /* main.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {587, 686}}";
			sepNavSelRange = "{60, 197}";
			sepNavVisRange = "{39, 723}";
			sepNavWindowFrame = "{{472, 177}, {634, 601}}";
		};
	};
	38E2DFB512E590660097841A /* PBXBookmark */ = {
		isa = PBXBookmark;
		fRef = 38FEDEEA12D0B22100ED9E77 /* mac.h */;
	};
	38E2DFBD12E590990097841A /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 38FEDEEA12D0B22100ED9E77 /* mac.h */;
		name = "mac.h: 34";
		rLen = 8;
		rLoc = 1083;
		rType = 0;
		vrLen = 1108;
		vrLoc = 486;
	};
	38FEDEA512D0ADBD00ED9E77 /* MsgTest */ = {
		isa = PBXExecutable;
		activeArgIndices = (
		);
		argumentStrings = (
		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 1;
		configStateDict = {
		};
		customDataFormattersEnabled = 1;
		dataTipCustomDataFormattersEnabled = 1;
		dataTipShowTypeColumn = 1;
		dataTipSortType = 0;
		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		libgmallocEnabled = 0;
		name = MsgTest;
		savedGlobals = {
		};
		showTypeColumn = 0;
		sourceDirectories = (
		);
		variableFormatDictionary = {
		};
	};
	38FEDEAB12D0ADC400ED9E77 /* Source Control */ = {
		isa = PBXSourceControlManager;
		fallbackIsa = XCSourceControlManager;
		isSCMEnabled = 0;
		scmConfiguration = {
			repositoryNamesForRoots = {
				"" = "";
			};
		};
	};
	38FEDEAC12D0ADC400ED9E77 /* Code sense */ = {
		isa = PBXCodeSenseManager;
		indexTemplatePath = "";
	};
	38FEDEDE12D0B09200ED9E77 /* packet.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {587, 546}}";
			sepNavSelRange = "{1034, 24}";
			sepNavVisRange = "{119, 948}";
			sepNavWindowFrame = "{{355, 174}, {634, 601}}";
		};
	};
	38FEDEDF12D0B09200ED9E77 /* packet.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {587, 3234}}";
			sepNavSelRange = "{2066, 0}";
			sepNavVisRange = "{0, 1079}";
			sepNavWindowFrame = "{{488, 177}, {634, 601}}";
		};
	};
	38FEDEEA12D0B22100ED9E77 /* mac.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {587, 1372}}";
			sepNavSelRange = "{1083, 8}";
			sepNavVisRange = "{486, 1108}";
			sepNavWindowFrame = "{{-707, 199}, {634, 601}}";
		};
	};
	38FEDF2F12D0E6A000ED9E77 /* packet.c:147 */ = {
		isa = PBXFileBreakpoint;
		actions = (
		);
		breakpointStyle = 0;
		continueAfterActions = 0;
		countType = 0;
		delayBeforeContinue = 0;
		fileReference = 38FEDEDF12D0B09200ED9E77 /* packet.c */;
		functionName = "packet_check()";
		hitCount = 4;
		ignoreCount = 0;
		lineNumber = 147;
		location = MsgTest;
		modificationTime = 315680751.887698;
		originalNumberOfMultipleMatches = 0;
		state = 2;
	};
	8DD76FA90486AB0100D96B5E /* MsgTest */ = {
		activeExec = 0;
		executables = (
			38FEDEA512D0ADBD00ED9E77 /* MsgTest */,
		);
	};
}

Added Tools/MsgTest/MsgTest.xcodeproj/project.pbxproj.













































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 45;
	objects = {

/* Begin PBXBuildFile section */
		38FEDEE012D0B09200ED9E77 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = 38FEDEDF12D0B09200ED9E77 /* packet.c */; };
		8DD76FAC0486AB0100D96B5E /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* main.c */; settings = {ATTRIBUTES = (); }; };
		8DD76FB00486AB0100D96B5E /* MsgTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A0FF2C0290799A04C91782 /* MsgTest.1 */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 8;
			dstPath = /usr/share/man/man1/;
			dstSubfolderSpec = 0;
			files = (
				8DD76FB00486AB0100D96B5E /* MsgTest.1 in CopyFiles */,
			);
			runOnlyForDeploymentPostprocessing = 1;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		08FB7796FE84155DC02AAC07 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
		38FEDEDE12D0B09200ED9E77 /* packet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = packet.h; sourceTree = "<group>"; };
		38FEDEDF12D0B09200ED9E77 /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = "<group>"; };
		38FEDEEA12D0B22100ED9E77 /* mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mac.h; sourceTree = SOURCE_ROOT; };
		8DD76FB20486AB0100D96B5E /* MsgTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = MsgTest; sourceTree = BUILT_PRODUCTS_DIR; };
		C6A0FF2C0290799A04C91782 /* MsgTest.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = MsgTest.1; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		8DD76FAD0486AB0100D96B5E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		08FB7794FE84155DC02AAC07 /* MsgTest */ = {
			isa = PBXGroup;
			children = (
				08FB7795FE84155DC02AAC07 /* Source */,
				C6A0FF2B0290797F04C91782 /* Documentation */,
				1AB674ADFE9D54B511CA2CBB /* Products */,
			);
			name = MsgTest;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				08FB7796FE84155DC02AAC07 /* main.c */,
				38FEDEE912D0B20300ED9E77 /* Support */,
			);
			name = Source;
			sourceTree = "<group>";
		};
		1AB674ADFE9D54B511CA2CBB /* Products */ = {
			isa = PBXGroup;
			children = (
				8DD76FB20486AB0100D96B5E /* MsgTest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		38FEDEE912D0B20300ED9E77 /* Support */ = {
			isa = PBXGroup;
			children = (
				38FEDEEA12D0B22100ED9E77 /* mac.h */,
				38FEDEDE12D0B09200ED9E77 /* packet.h */,
				38FEDEDF12D0B09200ED9E77 /* packet.c */,
			);
			name = Support;
			sourceTree = "<group>";
		};
		C6A0FF2B0290797F04C91782 /* Documentation */ = {
			isa = PBXGroup;
			children = (
				C6A0FF2C0290799A04C91782 /* MsgTest.1 */,
			);
			name = Documentation;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		8DD76FA90486AB0100D96B5E /* MsgTest */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "MsgTest" */;
			buildPhases = (
				8DD76FAB0486AB0100D96B5E /* Sources */,
				8DD76FAD0486AB0100D96B5E /* Frameworks */,
				8DD76FAF0486AB0100D96B5E /* CopyFiles */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = MsgTest;
			productInstallPath = "$(HOME)/bin";
			productName = MsgTest;
			productReference = 8DD76FB20486AB0100D96B5E /* MsgTest */;
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;
			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "MsgTest" */;
			compatibilityVersion = "Xcode 3.1";
			developmentRegion = English;
			hasScannedForEncodings = 1;
			knownRegions = (
				English,
				Japanese,
				French,
				German,
			);
			mainGroup = 08FB7794FE84155DC02AAC07 /* MsgTest */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* MsgTest */,
			);
		};
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
		8DD76FAB0486AB0100D96B5E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				8DD76FAC0486AB0100D96B5E /* main.c in Sources */,
				38FEDEE012D0B09200ED9E77 /* packet.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_MODEL_TUNING = G5;
				GCC_OPTIMIZATION_LEVEL = 0;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = MsgTest;
				SDKROOT = "";
			};
			name = Debug;
		};
		1DEB928708733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_MODEL_TUNING = G5;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = MsgTest;
				SDKROOT = "";
			};
			name = Release;
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.5;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
				GCC_C_LANGUAGE_STANDARD = c99;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.5;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "MsgTest" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				1DEB928608733DD80010E9CD /* Debug */,
				1DEB928708733DD80010E9CD /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "MsgTest" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				1DEB928A08733DD80010E9CD /* Debug */,
				1DEB928B08733DD80010E9CD /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
}

Added Tools/MsgTest/mac.h.















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//*************************************************************************
/*
Copyright (c) 2009. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         fire_net - MAC layer of network
*
*  Description:         This layer will set up addressing and
*						send receive packets
*
*  Revision History:	28-Jul-2009	Initial version
*						11-May-2010	Convert to new network [d26a3ab0e9]
*
*	This layer has two functions:
*		(a) Send and receive packets (see below)
*		(b) Get a node address
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100
*/
//************************************************************************

#ifndef MAC_H
#define MAC_H	1

#define MSG_HDR		':'
#define MSG_TRLR	';'
#define DATA_SEP	','
#define PHY_DATA_SIZE	32		// Max size of data xfered
#define CKSUM_MODULO	100		// For address calc
#define BCAST_ADDRESS	0		// Broadcast address
#define MIN_ADDRESS		1
#define MAX_ADDRESS		32

#define PARENT_ADDRESS	MAX_ADDRESS

typedef enum {
				NO_PACKET,
				TO_PACKET_A,	// Getting TO address (first byte)
				TO_PACKET_B,	// Getting TO address (second byte)
				FROM_PACKET_A,	// Getting FROM address (first byte)
				FROM_PACKET_B,	// Getting FROM address (second byte)
				DATA_PACKET,	// Getting packet data
				CKSUM_PACKET_A,	// Getting packet cksum (first byte)
				CKSUM_PACKET_B,	// Getting packet cksum (second byte)
				RCVED_PACKET,	// Packet ready to use
			} PACKET_STATE;
							
#define MAC_HANDLE_VALID	'MACH'

typedef struct {
					unsigned long valid;	// Valid marker for struct
					int my_address;			// Local address
					
					// Pump processing
					
					void *h;					// Serial handle
					int phy_psn;				// Current psn in phy buffer
										
					// Received packet
					PACKET_STATE state;		// State of current received packet
					int to;
					int from;
					int len;
					char data[PHY_DATA_SIZE];	// Packet data
					int cksum;				// Accmulated cksum
					int pcksum;				// Packet checksum
					
				} MAC_HANDLE;
				

typedef struct {
					int to;
					int from;
					int len;
					char data[PHY_DATA_SIZE];	// Packet data
					
					// Chunk handler 
					
					int chunk_len;	// Length of current chunk
					int chunk_end;	// End of current chunk
					int chunk_ptr;	// Psn in current chunk
				} PACKET;

void *init_mac(char *port);		// Open and close of MAC layer
void close_mac( void *h );

void flush_mac( void *h);		// Flush network
int pump_mac( void *h );		// Call to update state

int put_mac( PACKET *pkt,void *h );
int get_mac( PACKET *pkt,void *h );

int my_addr_mac( void *h );		// Return PHY address for debugging

#endif

Added Tools/MsgTest/main.c.

































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <stdlib.h>
#include "packet.h"

// ---------------------------------------------------------------------
/*
	Message Test Generator/Receiver For FIRENET
*/
// ---------------------------------------------------------------------

int main (int argc, const char * argv[]) 
{
	int choice = 0;
	char in[266];
	int run = 1;
	
	printf("\nMessage Test Generator/Receiver Ver: %s %s\n",__DATE__,__TIME__);
	
	
	while( run )
	{
		printf("Option: ");
		fgets(in,256,stdin);
		choice = strtol(in,NULL,0);
		switch( choice )
		{
			case 1:	// Generate a message
					packet_gen();
					break;
					
			case 2:	// Decode a message
					packet_check();
					break;
					
			case -1:	// Quit program
					printf("\n** End Run **\n");
					run = 0;
					break;
				
			default:// BAD Value
					printf("\n** %d Unknown Only 1-Gen,2-Decode or -1 Quit allowed\n",choice);
					printf("\n");
					break;
		}
	}
   
    return 0;
}

Added Tools/MsgTest/packet.c.













































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
//*************************************************************************
/*
Copyright (c) 2011. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         packet.c/h
*
*  Description:        This will generate and decode packets
*
*  Revision History:	 2-Jan-2011	Initial Version
*
*	This module will generate and validate packets of the form:
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100
*/
//************************************************************************

#include "packet.h"

//*************************************************************************
/*
* void	packet_gen(void)	- Generate a packet according to user input
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*			Print packet to stdout
*/
//************************************************************************

void packet_gen(void)
{
	int to = 1;
	int from = 1;
	int val,i;
	char data[2*PHY_DATA_SIZE];
	int cksum;
	char packet[2*PHY_DATA_SIZE];
	char *ptr;
	
	// (1) Clear out packet before start
	
	for( i=0; i<2*PHY_DATA_SIZE; i++)
		packet[i] = '\0';
	
	// (2) Get the TO and FROM address
	// NOTE: If no input then use 0
	
	printf("\n-- Packet Generator --\n");
	printf("TO Address: ");
	fgets(data,PHY_DATA_SIZE,stdin);
	if( strlen(data) > 1 )
		to = strtol(data,NULL,0);
		
	printf("FROM Address: ");
	fgets(data,PHY_DATA_SIZE,stdin);
	if( strlen(data) > 1 )
		from = strtol(data,NULL,0);
		
	// (2) Get packet data
	
	printf("Packet Data: ");
	fgets(data,PHY_DATA_SIZE,stdin);
	val = strlen(data);
	val = val - 1;
	
	// If too bit cut off 
	if( val > PHY_DATA_SIZE )
	{
		data[PHY_DATA_SIZE-1] = '\0';
	}
	else
	{
		// Otherwise just chop off \n
		if( val > 0 )
		{
			data[val] = '\0';
		}
		else
		{
			data[0] = '\0';	// No data
		}
	}
	
	// (3) Build data packet, header
	
	sprintf(packet,"%c%02d%02d",MSG_HDR,to,from);
	
	// (4) Add data
	
	val = strlen(data);
	for( i=0; i<val; i++)
		packet[i+5] = data[i];
	val = strlen(packet);
		
	// (5) Compute checksum and to packet with trailer
	
	for( cksum=0,i=1; i<val; i++ )
		cksum += 0xff & packet[i];
		
	ptr = (char *)&packet[val];
	cksum = cksum % 100;			// Mod 100
	sprintf(ptr,"%c%02d",MSG_TRLR,cksum);
	
	// (5) show packet
	
	printf("Packet: %s \n",packet);
	printf("--------------------------\n\n");
}

//*************************************************************************
/*
* void	packet_check(void)	- Read and decode a packet
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*			Print packet to stdout
*/
//************************************************************************

void packet_check(void)
{
	int to = 1;
	int from = 1;
	int val,i;
	char data[2*PHY_DATA_SIZE];
	int cksum = 0;
	char packet[2*PHY_DATA_SIZE];
	char *ptr;

	// (1) Get user to input a packet and trim off the \n
	// also check over min size
	
	printf("\n-- Packet Reader --\n");
	printf("Input Packet: ");
	fgets(packet,2*PHY_DATA_SIZE,stdin);
	
	val = strlen(packet);
	if( val > 8 )
	{
		packet[val-1] = '\0';	// Remove \n 
		
		// (2) Take the packet apart
		// Get to/from addresses
		
		if( packet[0] == MSG_HDR )
		{
			data[0] = packet[1];		// TO address
			cksum += 0xff & packet[1];
			data[1] = packet[2];
			cksum += 0xff & packet[2];
			data[2] = '\0';		
			
			to = strtol(data,NULL,10);
			
			data[0] = packet[3];		// From address
			cksum += 0xff & packet[3];
			data[1] = packet[4];
			cksum += 0xff & packet[4];
			data[2] = '\0';		
			
			from = strtol(data,NULL,10);
			
			// (3) Pull the data out of the packet
			
			ptr = NULL;
			for( i=5; packet[i]!= '\0'; i++ )
			{
				if( packet[i] != MSG_TRLR )
				{
					data[i-5] = packet[i];
					cksum +=  0xff &  packet[i];
				}
				else
				{
					data[i-5] = '\0';			// Close packet
					ptr = (char *)&packet[i+1];	// Point to cksum
					break;		// DONE
				}
			}
			
			// (4) If ptr still == NULL no checksum
			
			if( ptr == NULL )
			{
				printf("** FAILURE no MSG_TRLR **\n");
			}
			else
			{
				cksum = cksum % 100;		// Form calculated cksum
				val = strtol(ptr,NULL,10);	// Get internal checksum
				if( val == cksum )
				{
					printf("-- SUCCESS PACKET OK --\n");
					printf("Packet TO:   %d\n",to);
					printf("Packet FROM: %d\n",from);
					printf("Packet DATA: <%s>\n",data);
					printf("-------------------\n\n");
				}
				else
				{
					printf("** BAD CKSUM CALC [%d] PACKET [%d] **\n",cksum,val);
				}
			}
		}
		else
		{
			printf("** BAD PACKET NO HEADER : **\n");
		}
	}
	else
	{
		printf("** BAD PACKET LEN=%d TOO SHORT **\n",val);
	}
}
				
			
			



Added Tools/MsgTest/packet.h.













































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//*************************************************************************
/*
Copyright (c) 2011. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         packet.c/h
*
*  Description:        This will generate and decode packets
*
*  Revision History:	 2-Jan-2011	Initial Version
*
*	This module will generate and validate packets of the form:
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include "mac.h"

#ifndef PACKET_H
#define PACKET_H	1

void packet_gen(void);
void packet_check(void);

#endif

Added Tools/NetHdwTest/NetHdwTest.xcodeproj/project.pbxproj.

































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 45;
	objects = {

/* Begin PBXBuildFile section */
		38D8544B12DDD836001DC702 /* mac.c in Sources */ = {isa = PBXBuildFile; fileRef = 38D8543512DDD836001DC702 /* mac.c */; };
		38D8544D12DDD836001DC702 /* network.c in Sources */ = {isa = PBXBuildFile; fileRef = 38D8543712DDD836001DC702 /* network.c */; };
		38D8544F12DDD836001DC702 /* phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38D8543912DDD836001DC702 /* phy.c */; };
		38D8545112DDD836001DC702 /* real_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38D8543C12DDD836001DC702 /* real_phy.c */; };
		38D8545512DDD836001DC702 /* bsdserial.c in Sources */ = {isa = PBXBuildFile; fileRef = 38D8544312DDD836001DC702 /* bsdserial.c */; };
		38D8545912DDD836001DC702 /* sim_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38D8544912DDD836001DC702 /* sim_phy.c */; };
		38E6345812DA1B3000CFF1F8 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E6345612DA1B3000CFF1F8 /* IOKit.framework */; };
		38E6345912DA1B3000CFF1F8 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E6345712DA1B3000CFF1F8 /* CoreFoundation.framework */; };
		38E634BD12DA1BC400CFF1F8 /* firenetlog.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E634BB12DA1BC400CFF1F8 /* firenetlog.c */; };
		8DD76FAC0486AB0100D96B5E /* nethdwtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* nethdwtest.c */; settings = {ATTRIBUTES = (); }; };
		8DD76FB00486AB0100D96B5E /* NetHdwTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A0FF2C0290799A04C91782 /* NetHdwTest.1 */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 8;
			dstPath = /usr/share/man/man1/;
			dstSubfolderSpec = 0;
			files = (
				8DD76FB00486AB0100D96B5E /* NetHdwTest.1 in CopyFiles */,
			);
			runOnlyForDeploymentPostprocessing = 1;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		08FB7796FE84155DC02AAC07 /* nethdwtest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nethdwtest.c; sourceTree = "<group>"; };
		38D8543512DDD836001DC702 /* mac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mac.c; path = ../../Network/mac.c; sourceTree = SOURCE_ROOT; };
		38D8543612DDD836001DC702 /* mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = mac.h; path = ../../Network/mac.h; sourceTree = SOURCE_ROOT; };
		38D8543712DDD836001DC702 /* network.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = network.c; path = ../../Network/network.c; sourceTree = SOURCE_ROOT; };
		38D8543812DDD836001DC702 /* network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = network.h; path = ../../Network/network.h; sourceTree = SOURCE_ROOT; };
		38D8543912DDD836001DC702 /* phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = phy.c; path = ../../Network/phy.c; sourceTree = SOURCE_ROOT; };
		38D8543A12DDD836001DC702 /* phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = phy.h; path = ../../Network/phy.h; sourceTree = SOURCE_ROOT; };
		38D8543C12DDD836001DC702 /* real_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = real_phy.c; path = ../../Network/Real/real_phy.c; sourceTree = SOURCE_ROOT; };
		38D8543D12DDD836001DC702 /* real_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = real_phy.h; path = ../../Network/Real/real_phy.h; sourceTree = SOURCE_ROOT; };
		38D8544312DDD836001DC702 /* bsdserial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsdserial.c; path = ../../Network/Real/SERIAL/OSX/bsdserial.c; sourceTree = SOURCE_ROOT; };
		38D8544412DDD836001DC702 /* bsdserial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = bsdserial.h; path = ../../Network/Real/SERIAL/OSX/bsdserial.h; sourceTree = SOURCE_ROOT; };
		38D8544912DDD836001DC702 /* sim_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sim_phy.c; path = ../../Network/Simulation/sim_phy.c; sourceTree = SOURCE_ROOT; };
		38D8544A12DDD836001DC702 /* sim_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = sim_phy.h; path = ../../Network/Simulation/sim_phy.h; sourceTree = SOURCE_ROOT; };
		38E6345612DA1B3000CFF1F8 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = ../../../../../../../System/Library/Frameworks/IOKit.framework; sourceTree = SOURCE_ROOT; };
		38E6345712DA1B3000CFF1F8 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = ../../../../../../../System/Library/Frameworks/CoreFoundation.framework; sourceTree = SOURCE_ROOT; };
		38E634BB12DA1BC400CFF1F8 /* firenetlog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = firenetlog.c; path = ../../Logging/firenetlog.c; sourceTree = SOURCE_ROOT; };
		38E634BC12DA1BC400CFF1F8 /* firenetlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = firenetlog.h; path = ../../Logging/firenetlog.h; sourceTree = SOURCE_ROOT; };
		8DD76FB20486AB0100D96B5E /* NetHdwTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = NetHdwTest; sourceTree = BUILT_PRODUCTS_DIR; };
		C6A0FF2C0290799A04C91782 /* NetHdwTest.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = NetHdwTest.1; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		8DD76FAD0486AB0100D96B5E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				38E6345812DA1B3000CFF1F8 /* IOKit.framework in Frameworks */,
				38E6345912DA1B3000CFF1F8 /* CoreFoundation.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		08FB7794FE84155DC02AAC07 /* NetHdwTest */ = {
			isa = PBXGroup;
			children = (
				08FB7795FE84155DC02AAC07 /* Source */,
				C6A0FF2B0290797F04C91782 /* Documentation */,
				1AB674ADFE9D54B511CA2CBB /* Products */,
			);
			name = NetHdwTest;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				08FB7796FE84155DC02AAC07 /* nethdwtest.c */,
				38E634BA12DA1BC400CFF1F8 /* Logging */,
				38D8543412DDD836001DC702 /* Network */,
				38E6345512DA1B3000CFF1F8 /* Frameworks */,
			);
			name = Source;
			sourceTree = "<group>";
		};
		1AB674ADFE9D54B511CA2CBB /* Products */ = {
			isa = PBXGroup;
			children = (
				8DD76FB20486AB0100D96B5E /* NetHdwTest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		38D8543412DDD836001DC702 /* Network */ = {
			isa = PBXGroup;
			children = (
				38D8543712DDD836001DC702 /* network.c */,
				38D8543812DDD836001DC702 /* network.h */,
				38D8543512DDD836001DC702 /* mac.c */,
				38D8543612DDD836001DC702 /* mac.h */,
				38D8543912DDD836001DC702 /* phy.c */,
				38D8543A12DDD836001DC702 /* phy.h */,
				38D8543B12DDD836001DC702 /* Real */,
				38D8544812DDD836001DC702 /* Simulation */,
			);
			name = Network;
			path = ../../Network;
			sourceTree = SOURCE_ROOT;
		};
		38D8543B12DDD836001DC702 /* Real */ = {
			isa = PBXGroup;
			children = (
				38D8543C12DDD836001DC702 /* real_phy.c */,
				38D8543D12DDD836001DC702 /* real_phy.h */,
				38D8543E12DDD836001DC702 /* SERIAL */,
			);
			name = Real;
			path = ../../Network/Real;
			sourceTree = SOURCE_ROOT;
		};
		38D8543E12DDD836001DC702 /* SERIAL */ = {
			isa = PBXGroup;
			children = (
				38D8544212DDD836001DC702 /* OSX */,
			);
			name = SERIAL;
			path = ../../Network/Real/SERIAL;
			sourceTree = SOURCE_ROOT;
		};
		38D8544212DDD836001DC702 /* OSX */ = {
			isa = PBXGroup;
			children = (
				38D8544312DDD836001DC702 /* bsdserial.c */,
				38D8544412DDD836001DC702 /* bsdserial.h */,
			);
			name = OSX;
			path = ../../Network/Real/SERIAL/OSX;
			sourceTree = SOURCE_ROOT;
		};
		38D8544812DDD836001DC702 /* Simulation */ = {
			isa = PBXGroup;
			children = (
				38D8544912DDD836001DC702 /* sim_phy.c */,
				38D8544A12DDD836001DC702 /* sim_phy.h */,
			);
			name = Simulation;
			path = ../../Network/Simulation;
			sourceTree = SOURCE_ROOT;
		};
		38E6345512DA1B3000CFF1F8 /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				38E6345612DA1B3000CFF1F8 /* IOKit.framework */,
				38E6345712DA1B3000CFF1F8 /* CoreFoundation.framework */,
			);
			name = Frameworks;
			sourceTree = SOURCE_ROOT;
		};
		38E634BA12DA1BC400CFF1F8 /* Logging */ = {
			isa = PBXGroup;
			children = (
				38E634BB12DA1BC400CFF1F8 /* firenetlog.c */,
				38E634BC12DA1BC400CFF1F8 /* firenetlog.h */,
			);
			name = Logging;
			path = ../../Logging;
			sourceTree = SOURCE_ROOT;
		};
		C6A0FF2B0290797F04C91782 /* Documentation */ = {
			isa = PBXGroup;
			children = (
				C6A0FF2C0290799A04C91782 /* NetHdwTest.1 */,
			);
			name = Documentation;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		8DD76FA90486AB0100D96B5E /* NetHdwTest */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "NetHdwTest" */;
			buildPhases = (
				8DD76FAB0486AB0100D96B5E /* Sources */,
				8DD76FAD0486AB0100D96B5E /* Frameworks */,
				8DD76FAF0486AB0100D96B5E /* CopyFiles */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = NetHdwTest;
			productInstallPath = "$(HOME)/bin";
			productName = NetHdwTest;
			productReference = 8DD76FB20486AB0100D96B5E /* NetHdwTest */;
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;
			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "NetHdwTest" */;
			compatibilityVersion = "Xcode 3.1";
			developmentRegion = English;
			hasScannedForEncodings = 1;
			knownRegions = (
				English,
				Japanese,
				French,
				German,
			);
			mainGroup = 08FB7794FE84155DC02AAC07 /* NetHdwTest */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* NetHdwTest */,
			);
		};
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
		8DD76FAB0486AB0100D96B5E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				8DD76FAC0486AB0100D96B5E /* nethdwtest.c in Sources */,
				38E634BD12DA1BC400CFF1F8 /* firenetlog.c in Sources */,
				38D8544B12DDD836001DC702 /* mac.c in Sources */,
				38D8544D12DDD836001DC702 /* network.c in Sources */,
				38D8544F12DDD836001DC702 /* phy.c in Sources */,
				38D8545112DDD836001DC702 /* real_phy.c in Sources */,
				38D8545512DDD836001DC702 /* bsdserial.c in Sources */,
				38D8545912DDD836001DC702 /* sim_phy.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_MODEL_TUNING = G5;
				GCC_OPTIMIZATION_LEVEL = 0;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = NetHdwTest;
			};
			name = Debug;
		};
		1DEB928708733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_MODEL_TUNING = G5;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = NetHdwTest;
			};
			name = Release;
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.6;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.6;
			};
			name = Release;
		};
		3881451212DA1F5100ED08C5 /* Debug PPC */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.5;
			};
			name = "Debug PPC";
		};
		3881451312DA1F5100ED08C5 /* Debug PPC */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_MODEL_TUNING = G5;
				GCC_OPTIMIZATION_LEVEL = 0;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = NetHdwTest;
			};
			name = "Debug PPC";
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "NetHdwTest" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				1DEB928608733DD80010E9CD /* Debug */,
				3881451312DA1F5100ED08C5 /* Debug PPC */,
				1DEB928708733DD80010E9CD /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "NetHdwTest" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				1DEB928A08733DD80010E9CD /* Debug */,
				3881451212DA1F5100ED08C5 /* Debug PPC */,
				1DEB928B08733DD80010E9CD /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
}

Added Tools/NetHdwTest/nethdwtest.c.











































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "network.h"
#include "firenetlog.h"
#include "phy.h"

#define MAX_RUN  5000

static int flag_srch( int argc, const char *argv[], char *flag, int get_value, char **rtn );
void pgm_help( char *msg );

// ---------------------------------------------------------------------
/*
	Test code for network hardware
*/
// ---------------------------------------------------------------------

int main (int argc, const char * argv[]) 
{
	char *port;
	void *net;
	char *ptr;
	PACKET pkt;
	int val;
	int i;
	int max = MAX_RUN;
	MAC_HANDLE *mh;
	
	// (1) Look for HELP
	
	if( flag_srch(argc,argv,"-v",0,&port ) )
	{
		pgm_help(NULL);
		return( 0 );
	}
	
	// (2) Look for serial port and try to open
	
	if( flag_srch(argc,argv,"-p",1,&port ) )
	{
		net = init_network( 32,port);	// I'm the controller
		if( net != NULL )
		{
			printf("--FIRENET UP on PORT [%s]--\n",port);
		}
		else
		{
			pgm_help("** COULD NOT OPEN PORT **");
			return( -1 );
		}
	}
	
	// (3) Look for logging and start up
	
	if( flag_srch(argc,argv,"-log",1,&ptr ) )
	{
		log_control(1,ptr);
		printf("--Logging data to [%s]\n",ptr);
	}
	
	if( flag_srch(argc,argv,"-count",1,&ptr) )
	{
		max = strtol(ptr,NULL,0);
	}
	
	// Do stuff....
	
	pkt.from = 0;
	pkt.to = 1;
	pkt.len = 1;
	pkt.data[0] = 'S';


	for( i==0; i<max; i++ )
	{
		val = put_network(&pkt,net);
		if( val != 0 )
		{
			printf("\n***XMIT FAIL [%d]\n",i);
			//break;
		}
		if( pump_mac(net) )
		{
			printf("-- RCVED PKT --\n");
		}
		
		usleep( 10000 );
	}



#ifdef SINGLE_CHAR_TEST
	// Enable XMIT
	
	mh = (MAC_HANDLE *)net;
	phy_tx(1,mh->h);
	
	for( i=0; i<100000; i++)
	{
		send_packet_byte( MSG_HDR,net);
	}
	
	// Disable XMIT
	
	phy_tx(0,mh->h);
	
#endif

	
	// Exit program
	
	log_done();
	close_network( net );
	printf("\n--End Run--\n");
		
}

//***********************************************************************
/*
* void pgm_help( char *msg  )	- Show pgm version and directions
*
*	INPUT:	msg	- Print message if preset
*
*	OUTPUT:	NONE
*		Print out program directions to stdout
*/
//***********************************************************************/
void pgm_help( char *msg )
{
	if( msg != NULL )
		printf("*** [%s] ***\n",msg);
		
	printf("--NetHDWTest--\n");
	printf("Version: [%s] [%s]\n",__DATE__,__TIME__);
	printf("Syntax:	nethdwtest -p <port name> [-log <file>] [-v]\n");
	printf("\n");
	printf("-v		       - Show help\n");
	printf("-p <port>      - SERIAL PORT used X=SIM\n");
	printf("-log <Log file>	- Log network data\n");
	printf("\n");
	
}/* pgm_help() */


//***********************************************************************
/*
*  FLAG_SRCH(argc,argv,flag,get_value,&rtn )
*
*	INPUT:	argc,argv	- Command line parameters
*		flag		- String (flag) to be found
*		get_value	- TRUE return pointer to next item
*				  FALSE no pointer returned
*		rtn		- Return pointer (NULL if not used or
*				  found)
*
*	OUTPUT:	TRUE if flag found
*		FALSE if not
*		Scan argument list for flag
*		If found then TRUE is returned and if get_value TRUE
*		return rtn pointing to string in argv[] following 
*		the flag
*		NOTE only exact matches will be found
*/
//**********************************************************************/
int flag_srch( int argc, const char *argv[], char *flag, int get_value, char **rtn )
{
	int i;
	const char *ptr;
	
	/*  Scan through the argv's and look for a matching flag */
	
	for( i=0; i<argc; i++ )
	{
		ptr = argv[i];
		if( strcmp(ptr,flag) == 0 )
		{
		
		/*  Match found, return pointer to the following
			(if requested or NULL if not)
		*/
			i++;
			if( get_value && i < argc )
				*rtn = (char *)argv[i];
			else
				*rtn = NULL;
			return( 1 );
		}
	}
	
	/*  Failure exit here, so return to user with FALSE */
	
	return( 0 );
	
}/* flag_srch() */

Added Tools/NetTest/NetTest.xcodeproj/jim.mode1v3.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>ActivePerspectiveName</key>
	<string>Project</string>
	<key>AllowedModules</key>
	<array>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXSmartGroupTreeModule</string>
			<key>Name</key>
			<string>Groups and Files Outline View</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXNavigatorGroup</string>
			<key>Name</key>
			<string>Editor</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCTaskListModule</string>
			<key>Name</key>
			<string>Task List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDetailModule</string>
			<key>Name</key>
			<string>File and Smart Group Detail Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXBuildResultsModule</string>
			<key>Name</key>
			<string>Detailed Build Results Viewer</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXProjectFindModule</string>
			<key>Name</key>
			<string>Project Batch Find Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCProjectFormatConflictsModule</string>
			<key>Name</key>
			<string>Project Format Conflicts List</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXBookmarksModule</string>
			<key>Name</key>
			<string>Bookmarks Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXClassBrowserModule</string>
			<key>Name</key>
			<string>Class Browser</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXCVSModule</string>
			<key>Name</key>
			<string>Source Code Control Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXDebugBreakpointsModule</string>
			<key>Name</key>
			<string>Debug Breakpoints Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCDockableInspector</string>
			<key>Name</key>
			<string>Inspector</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>PBXOpenQuicklyModule</string>
			<key>Name</key>
			<string>Open Quickly Tool</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugSessionModule</string>
			<key>Name</key>
			<string>Debugger</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>1</string>
			<key>Module</key>
			<string>PBXDebugCLIModule</string>
			<key>Name</key>
			<string>Debug Console</string>
		</dict>
		<dict>
			<key>BundleLoadPath</key>
			<string></string>
			<key>MaxInstances</key>
			<string>n</string>
			<key>Module</key>
			<string>XCSnapshotModule</string>
			<key>Name</key>
			<string>Snapshots Tool</string>
		</dict>
	</array>
	<key>BundlePath</key>
	<string>/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources</string>
	<key>Description</key>
	<string>DefaultDescriptionKey</string>
	<key>DockingSystemVisible</key>
	<false/>
	<key>Extension</key>
	<string>mode1v3</string>
	<key>FavBarConfig</key>
	<dict>
		<key>PBXProjectModuleGUID</key>
		<string>38E2E15B12E598F10097841A</string>
		<key>XCBarModuleItemNames</key>
		<dict/>
		<key>XCBarModuleItems</key>
		<array/>
	</dict>
	<key>FirstTimeWindowDisplayed</key>
	<false/>
	<key>Identifier</key>
	<string>com.apple.perspectives.project.mode1v3</string>
	<key>MajorVersion</key>
	<integer>33</integer>
	<key>MinorVersion</key>
	<integer>0</integer>
	<key>Name</key>
	<string>Default</string>
	<key>Notifications</key>
	<array>
		<dict>
			<key>XCObserverAutoDisconnectKey</key>
			<true/>
			<key>XCObserverDefintionKey</key>
			<dict/>
			<key>XCObserverFactoryKey</key>
			<string>XCPerspectivesSpecificationIdentifier</string>
			<key>XCObserverGUIDKey</key>
			<string>XCObserverProjectIdentifier</string>
			<key>XCObserverNotificationKey</key>
			<string>PBXStatusBuildStateMessageNotification</string>
			<key>XCObserverTargetKey</key>
			<string>XCMainBuildResultsModuleGUID</string>
			<key>XCObserverTriggerKey</key>
			<string>awakenModuleWithObserver:</string>
			<key>XCObserverValidationKey</key>
			<dict/>
		</dict>
	</array>
	<key>OpenEditors</key>
	<array>
		<dict>
			<key>Content</key>
			<dict>
				<key>PBXProjectModuleGUID</key>
				<string>38AFD17D12EB310900A0094F</string>
				<key>PBXProjectModuleLabel</key>
				<string>nettest.c</string>
				<key>PBXSplitModuleInNavigatorKey</key>
				<dict>
					<key>Split0</key>
					<dict>
						<key>PBXProjectModuleGUID</key>
						<string>38AFD17E12EB310900A0094F</string>
						<key>PBXProjectModuleLabel</key>
						<string>nettest.c</string>
						<key>_historyCapacity</key>
						<integer>0</integer>
						<key>bookmark</key>
						<string>38176C8312F8671500D36F5D</string>
						<key>history</key>
						<array>
							<string>38176C6412F8664700D36F5D</string>
						</array>
					</dict>
					<key>SplitCount</key>
					<string>1</string>
				</dict>
				<key>StatusBarVisibility</key>
				<true/>
			</dict>
			<key>Geometry</key>
			<dict>
				<key>Frame</key>
				<string>{{0, 20}, {686, 592}}</string>
				<key>PBXModuleWindowStatusBarHidden2</key>
				<false/>
				<key>RubberWindowFrame</key>
				<string>330 139 686 633 0 0 1280 778 </string>
			</dict>
		</dict>
	</array>
	<key>PerspectiveWidths</key>
	<array>
		<integer>-1</integer>
		<integer>-1</integer>
	</array>
	<key>Perspectives</key>
	<array>
		<dict>
			<key>ChosenToolbarItems</key>
			<array>
				<string>active-combo-popup</string>
				<string>buildOrClean</string>
				<string>build-and-go</string>
				<string>go</string>
				<string>debugger-enable-breakpoints</string>
				<string>servicesModulebreakpoints</string>
				<string>com.apple.ide.PBXToolbarStopButton</string>
				<string>servicesModulefind</string>
			</array>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProjectWithEditor</string>
			<key>Identifier</key>
			<string>perspective.project</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<true/>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>1CE0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>08FB7794FE84155DC02AAC07</string>
								<string>08FB7795FE84155DC02AAC07</string>
								<string>38E2DFF312E591AC0097841A</string>
								<string>38E2E14612E5979D0097841A</string>
								<string>1C37FBAC04509CD000000102</string>
								<string>1C37FAAC04509CD000000102</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>9</integer>
									<integer>6</integer>
									<integer>1</integer>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 611}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<true/>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 629}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>41 107 634 670 0 0 1280 778 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>203pt</string>
				</dict>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20306471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CE0B20406471E060097A5F4</string>
										<key>PBXProjectModuleLabel</key>
										<string></string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {426, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>41 107 634 670 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B20506471E060097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 5}, {426, 624}}</string>
								<key>RubberWindowFrame</key>
								<string>41 107 634 670 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>624pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>426pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCModuleDock</string>
				<string>PBXNavigatorGroup</string>
				<string>XCDetailModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>38176C8112F8671500D36F5D</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>38176C8212F8671500D36F5D</string>
				<string>1CE0B20306471E060097A5F4</string>
				<string>1CE0B20506471E060097A5F4</string>
			</array>
			<key>ToolbarConfigUserDefaultsMinorVersion</key>
			<string>2</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.defaultV3</string>
		</dict>
		<dict>
			<key>ControllerClassBaseName</key>
			<string></string>
			<key>IconName</key>
			<string>WindowOfProject</string>
			<key>Identifier</key>
			<string>perspective.morph</string>
			<key>IsVertical</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>BecomeActive</key>
					<integer>1</integer>
					<key>ContentConfiguration</key>
					<dict>
						<key>PBXBottomSmartGroupGIDs</key>
						<array>
							<string>1C37FBAC04509CD000000102</string>
							<string>1C37FAAC04509CD000000102</string>
							<string>1C08E77C0454961000C914BD</string>
							<string>1C37FABC05509CD000000102</string>
							<string>1C37FABC05539CD112110102</string>
							<string>E2644B35053B69B200211256</string>
							<string>1C37FABC04509CD000100104</string>
							<string>1CC0EA4004350EF90044410B</string>
							<string>1CC0EA4004350EF90041110B</string>
						</array>
						<key>PBXProjectModuleGUID</key>
						<string>11E0B1FE06471DED0097A5F4</string>
						<key>PBXProjectModuleLabel</key>
						<string>Files</string>
						<key>PBXProjectStructureProvided</key>
						<string>yes</string>
						<key>PBXSmartGroupTreeModuleColumnData</key>
						<dict>
							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
							<array>
								<real>186</real>
							</array>
							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
							<array>
								<string>MainColumn</string>
							</array>
						</dict>
						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
						<dict>
							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
							<array>
								<string>29B97314FDCFA39411CA2CEA</string>
								<string>1C37FABC05509CD000000102</string>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
							<array>
								<array>
									<integer>0</integer>
								</array>
							</array>
							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
							<string>{{0, 0}, {186, 337}}</string>
						</dict>
						<key>PBXTopSmartGroupGIDs</key>
						<array/>
						<key>XCIncludePerspectivesSwitch</key>
						<integer>1</integer>
						<key>XCSharingToken</key>
						<string>com.apple.Xcode.GFSharingToken</string>
					</dict>
					<key>GeometryConfiguration</key>
					<dict>
						<key>Frame</key>
						<string>{{0, 0}, {203, 355}}</string>
						<key>GroupTreeTableConfiguration</key>
						<array>
							<string>MainColumn</string>
							<real>186</real>
						</array>
						<key>RubberWindowFrame</key>
						<string>373 269 690 397 0 0 1440 878 </string>
					</dict>
					<key>Module</key>
					<string>PBXSmartGroupTreeModule</string>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Morph</string>
			<key>PreferredWidth</key>
			<integer>300</integer>
			<key>ServiceClasses</key>
			<array>
				<string>XCModuleDock</string>
				<string>PBXSmartGroupTreeModule</string>
			</array>
			<key>TableOfContents</key>
			<array>
				<string>11E0B1FE06471DED0097A5F4</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.default.shortV3</string>
		</dict>
	</array>
	<key>PerspectivesBarVisible</key>
	<false/>
	<key>ShelfIsVisible</key>
	<false/>
	<key>SourceDescription</key>
	<string>file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
	<key>StatusbarIsVisible</key>
	<true/>
	<key>TimeStamp</key>
	<real>318269205.75581098</real>
	<key>ToolbarConfigUserDefaultsMinorVersion</key>
	<string>2</string>
	<key>ToolbarDisplayMode</key>
	<integer>1</integer>
	<key>ToolbarIsVisible</key>
	<true/>
	<key>ToolbarSizeMode</key>
	<integer>1</integer>
	<key>Type</key>
	<string>Perspectives</string>
	<key>UpdateMessage</key>
	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
	<key>WindowJustification</key>
	<integer>5</integer>
	<key>WindowOrderList</key>
	<array>
		<string>38176C8412F8671500D36F5D</string>
		<string>38176C8512F8671500D36F5D</string>
		<string>38E2E0F212E5922B0097841A</string>
		<string>1CD10A99069EF8BA00B06720</string>
		<string>38176C6112F8664700D36F5D</string>
		<string>38AFD17D12EB310900A0094F</string>
		<string>/Users/jschimpf/Public/Firenet/Tools/NetTest/NetTest.xcodeproj</string>
	</array>
	<key>WindowString</key>
	<string>41 107 634 670 0 0 1280 778 </string>
	<key>WindowToolsV3</key>
	<array>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.build</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528F0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string></string>
								<key>StatusBarVisibility</key>
								<true/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {500, 218}}</string>
								<key>RubberWindowFrame</key>
								<string>-661 300 500 500 -1280 -224 1280 1024 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>218pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>XCMainBuildResultsModuleGUID</string>
								<key>PBXProjectModuleLabel</key>
								<string>Build Results</string>
								<key>XCBuildResultsTrigger_Collapse</key>
								<integer>1022</integer>
								<key>XCBuildResultsTrigger_Open</key>
								<integer>1010</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 223}, {500, 236}}</string>
								<key>RubberWindowFrame</key>
								<string>-661 300 500 500 -1280 -224 1280 1024 </string>
							</dict>
							<key>Module</key>
							<string>PBXBuildResultsModule</string>
							<key>Proportion</key>
							<string>236pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>459pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Build Results</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBuildResultsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>38E2E0F212E5922B0097841A</string>
				<string>38176C7A12F8671400D36F5D</string>
				<string>1CD0528F0623707200166675</string>
				<string>XCMainBuildResultsModuleGUID</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.buildV3</string>
			<key>WindowContentMinSize</key>
			<string>486 300</string>
			<key>WindowString</key>
			<string>-661 300 500 500 -1280 -224 1280 1024 </string>
			<key>WindowToolGUID</key>
			<string>38E2E0F212E5922B0097841A</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debugger</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>Debugger</key>
								<dict>
									<key>HorizontalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {438, 336}}</string>
											<string>{{438, 0}, {523, 336}}</string>
										</array>
									</dict>
									<key>VerticalSplitView</key>
									<dict>
										<key>_collapsingFrameDimension</key>
										<real>0.0</real>
										<key>_indexOfCollapsedView</key>
										<integer>0</integer>
										<key>_percentageOfCollapsedView</key>
										<real>0.0</real>
										<key>isCollapsed</key>
										<string>yes</string>
										<key>sizes</key>
										<array>
											<string>{{0, 0}, {961, 336}}</string>
											<string>{{0, 336}, {961, 298}}</string>
										</array>
									</dict>
								</dict>
								<key>LauncherConfigVersion</key>
								<string>8</string>
								<key>PBXProjectModuleGUID</key>
								<string>1C162984064C10D400B95A72</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debug - GLUTExamples (Underwater)</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>DebugConsoleVisible</key>
								<string>None</string>
								<key>DebugConsoleWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>DebugSTDIOWindowFrame</key>
								<string>{{200, 200}, {500, 300}}</string>
								<key>Frame</key>
								<string>{{0, 0}, {961, 634}}</string>
								<key>PBXDebugSessionStackFrameViewKey</key>
								<dict>
									<key>DebugVariablesTableConfiguration</key>
									<array>
										<string>Name</string>
										<real>120</real>
										<string>Value</string>
										<real>85</real>
										<string>Summary</string>
										<real>293</real>
									</array>
									<key>Frame</key>
									<string>{{438, 0}, {523, 336}}</string>
									<key>RubberWindowFrame</key>
									<string>236 74 961 675 0 0 1280 778 </string>
								</dict>
								<key>RubberWindowFrame</key>
								<string>236 74 961 675 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugSessionModule</string>
							<key>Proportion</key>
							<string>634pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>634pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugSessionModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1CD10A99069EF8BA00B06720</string>
				<string>38176C7B12F8671400D36F5D</string>
				<string>1C162984064C10D400B95A72</string>
				<string>38176C7C12F8671400D36F5D</string>
				<string>38176C7D12F8671400D36F5D</string>
				<string>38176C7E12F8671400D36F5D</string>
				<string>38176C7F12F8671400D36F5D</string>
				<string>38176C8012F8671400D36F5D</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugV3</string>
			<key>WindowString</key>
			<string>236 74 961 675 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1CD10A99069EF8BA00B06720</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.find</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Dock</key>
							<array>
								<dict>
									<key>BecomeActive</key>
									<true/>
									<key>ContentConfiguration</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1CDD528C0622207200134675</string>
										<key>PBXProjectModuleLabel</key>
										<string>nettest.c</string>
										<key>StatusBarVisibility</key>
										<true/>
									</dict>
									<key>GeometryConfiguration</key>
									<dict>
										<key>Frame</key>
										<string>{{0, 0}, {781, 212}}</string>
										<key>RubberWindowFrame</key>
										<string>170 282 781 470 0 0 1280 778 </string>
									</dict>
									<key>Module</key>
									<string>PBXNavigatorGroup</string>
									<key>Proportion</key>
									<string>781pt</string>
								</dict>
							</array>
							<key>Proportion</key>
							<string>212pt</string>
						</dict>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD0528E0623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>Project Find</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 217}, {781, 212}}</string>
								<key>RubberWindowFrame</key>
								<string>170 282 781 470 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXProjectFindModule</string>
							<key>Proportion</key>
							<string>212pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>429pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Find</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXProjectFindModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C530D57069F1CE1000CFCEE</string>
				<string>38AFD0BD12EB056C00A0094F</string>
				<string>38AFD0BE12EB056C00A0094F</string>
				<string>1CDD528C0622207200134675</string>
				<string>1CD0528E0623707200166675</string>
			</array>
			<key>WindowString</key>
			<string>170 282 781 470 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1C530D57069F1CE1000CFCEE</string>
			<key>WindowToolIsVisible</key>
			<false/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>MENUSEPARATOR</string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.debuggerConsole</string>
			<key>IsVertical</key>
			<true/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAAC065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>Debugger Console</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {693, 405}}</string>
								<key>RubberWindowFrame</key>
								<string>519 74 693 446 0 0 1280 778 </string>
							</dict>
							<key>Module</key>
							<string>PBXDebugCLIModule</string>
							<key>Proportion</key>
							<string>405pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>405pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debugger Console</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXDebugCLIModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAAD065D492600B07095</string>
				<string>3832DA1512F57D260069A998</string>
				<string>1C78EAAC065D492600B07095</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.consoleV3</string>
			<key>WindowString</key>
			<string>519 74 693 446 0 0 1280 778 </string>
			<key>WindowToolGUID</key>
			<string>1C78EAAD065D492600B07095</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.snapshots</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCSnapshotModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Snapshots</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCSnapshotModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<string>Yes</string>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.snapshots</string>
			<key>WindowString</key>
			<string>315 824 300 550 0 0 1440 878 </string>
			<key>WindowToolIsVisible</key>
			<string>Yes</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.scm</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1C78EAB2065D492600B07095</string>
								<key>PBXProjectModuleLabel</key>
								<string>&lt;No Editor&gt;</string>
								<key>PBXSplitModuleInNavigatorKey</key>
								<dict>
									<key>Split0</key>
									<dict>
										<key>PBXProjectModuleGUID</key>
										<string>1C78EAB3065D492600B07095</string>
									</dict>
									<key>SplitCount</key>
									<string>1</string>
								</dict>
								<key>StatusBarVisibility</key>
								<integer>1</integer>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {452, 0}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
							</dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>0pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CD052920623707200166675</string>
								<key>PBXProjectModuleLabel</key>
								<string>SCM</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ConsoleFrame</key>
								<string>{{0, 259}, {452, 0}}</string>
								<key>Frame</key>
								<string>{{0, 7}, {452, 259}}</string>
								<key>RubberWindowFrame</key>
								<string>743 379 452 308 0 0 1280 1002 </string>
								<key>TableConfiguration</key>
								<array>
									<string>Status</string>
									<real>30</real>
									<string>FileName</string>
									<real>199</real>
									<string>Path</string>
									<real>197.0950012207031</real>
								</array>
								<key>TableFrame</key>
								<string>{{0, 0}, {452, 250}}</string>
							</dict>
							<key>Module</key>
							<string>PBXCVSModule</string>
							<key>Proportion</key>
							<string>262pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>266pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>SCM</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXCVSModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C78EAB4065D492600B07095</string>
				<string>1C78EAB5065D492600B07095</string>
				<string>1C78EAB2065D492600B07095</string>
				<string>1CD052920623707200166675</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.scm</string>
			<key>WindowString</key>
			<string>743 379 452 308 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>FirstTimeWindowDisplayed</key>
			<false/>
			<key>Identifier</key>
			<string>windowTool.breakpoints</string>
			<key>IsVertical</key>
			<false/>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXBottomSmartGroupGIDs</key>
								<array>
									<string>1C77FABC04509CD000000102</string>
								</array>
								<key>PBXProjectModuleGUID</key>
								<string>1CE0B1FE06471DED0097A5F4</string>
								<key>PBXProjectModuleLabel</key>
								<string>Files</string>
								<key>PBXProjectStructureProvided</key>
								<string>no</string>
								<key>PBXSmartGroupTreeModuleColumnData</key>
								<dict>
									<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
									<array>
										<real>168</real>
									</array>
									<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
									<array>
										<string>MainColumn</string>
									</array>
								</dict>
								<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
								<dict>
									<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
									<array>
										<string>1C77FABC04509CD000000102</string>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
									<array>
										<array>
											<integer>0</integer>
										</array>
									</array>
									<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
									<string>{{0, 0}, {168, 350}}</string>
								</dict>
								<key>PBXTopSmartGroupGIDs</key>
								<array/>
								<key>XCIncludePerspectivesSwitch</key>
								<false/>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{0, 0}, {185, 368}}</string>
								<key>GroupTreeTableConfiguration</key>
								<array>
									<string>MainColumn</string>
									<real>168</real>
								</array>
								<key>RubberWindowFrame</key>
								<string>-1166 292 744 409 -1280 -224 1280 1024 </string>
							</dict>
							<key>Module</key>
							<string>PBXSmartGroupTreeModule</string>
							<key>Proportion</key>
							<string>185pt</string>
						</dict>
						<dict>
							<key>BecomeActive</key>
							<true/>
							<key>ContentConfiguration</key>
							<dict>
								<key>PBXProjectModuleGUID</key>
								<string>1CA1AED706398EBD00589147</string>
								<key>PBXProjectModuleLabel</key>
								<string>Detail</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{{190, 0}, {554, 368}}</string>
								<key>RubberWindowFrame</key>
								<string>-1166 292 744 409 -1280 -224 1280 1024 </string>
							</dict>
							<key>Module</key>
							<string>XCDetailModule</string>
							<key>Proportion</key>
							<string>554pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>368pt</string>
				</dict>
			</array>
			<key>MajorVersion</key>
			<integer>3</integer>
			<key>MinorVersion</key>
			<integer>0</integer>
			<key>Name</key>
			<string>Breakpoints</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXSmartGroupTreeModule</string>
				<string>XCDetailModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<true/>
			<key>TableOfContents</key>
			<array>
				<string>38AFD1AC12EC3DEB00A0094F</string>
				<string>38AFD1AD12EC3DEB00A0094F</string>
				<string>1CE0B1FE06471DED0097A5F4</string>
				<string>1CA1AED706398EBD00589147</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.breakpointsV3</string>
			<key>WindowString</key>
			<string>-1166 292 744 409 -1280 -224 1280 1024 </string>
			<key>WindowToolGUID</key>
			<string>38AFD1AC12EC3DEB00A0094F</string>
			<key>WindowToolIsVisible</key>
			<true/>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.debugAnimator</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXNavigatorGroup</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Debug Visualizer</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXNavigatorGroup</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>1</integer>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.debugAnimatorV3</string>
			<key>WindowString</key>
			<string>100 100 700 500 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.bookmarks</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>PBXBookmarksModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Bookmarks</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXBookmarksModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowString</key>
			<string>538 42 401 187 0 0 1280 1002 </string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.projectFormatConflicts</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>Module</key>
							<string>XCProjectFormatConflictsModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Project Format Conflicts</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCProjectFormatConflictsModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>WindowContentMinSize</key>
			<string>450 300</string>
			<key>WindowString</key>
			<string>50 850 472 307 0 0 1440 877</string>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.classBrowser</string>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>ContentConfiguration</key>
							<dict>
								<key>OptionsSetName</key>
								<string>Hierarchy, all classes</string>
								<key>PBXProjectModuleGUID</key>
								<string>1CA6456E063B45B4001379D8</string>
								<key>PBXProjectModuleLabel</key>
								<string>Class Browser - NSObject</string>
							</dict>
							<key>GeometryConfiguration</key>
							<dict>
								<key>ClassesFrame</key>
								<string>{{0, 0}, {374, 96}}</string>
								<key>ClassesTreeTableConfiguration</key>
								<array>
									<string>PBXClassNameColumnIdentifier</string>
									<real>208</real>
									<string>PBXClassBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>Frame</key>
								<string>{{0, 0}, {630, 331}}</string>
								<key>MembersFrame</key>
								<string>{{0, 105}, {374, 395}}</string>
								<key>MembersTreeTableConfiguration</key>
								<array>
									<string>PBXMemberTypeIconColumnIdentifier</string>
									<real>22</real>
									<string>PBXMemberNameColumnIdentifier</string>
									<real>216</real>
									<string>PBXMemberTypeColumnIdentifier</string>
									<real>97</real>
									<string>PBXMemberBookColumnIdentifier</string>
									<real>22</real>
								</array>
								<key>PBXModuleWindowStatusBarHidden2</key>
								<integer>1</integer>
								<key>RubberWindowFrame</key>
								<string>385 179 630 352 0 0 1440 878 </string>
							</dict>
							<key>Module</key>
							<string>PBXClassBrowserModule</string>
							<key>Proportion</key>
							<string>332pt</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>332pt</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Class Browser</string>
			<key>ServiceClasses</key>
			<array>
				<string>PBXClassBrowserModule</string>
			</array>
			<key>StatusbarIsVisible</key>
			<integer>0</integer>
			<key>TableOfContents</key>
			<array>
				<string>1C0AD2AF069F1E9B00FABCE6</string>
				<string>1C0AD2B0069F1E9B00FABCE6</string>
				<string>1CA6456E063B45B4001379D8</string>
			</array>
			<key>ToolbarConfiguration</key>
			<string>xcode.toolbar.config.classbrowser</string>
			<key>WindowString</key>
			<string>385 179 630 352 0 0 1440 878 </string>
			<key>WindowToolGUID</key>
			<string>1C0AD2AF069F1E9B00FABCE6</string>
			<key>WindowToolIsVisible</key>
			<integer>0</integer>
		</dict>
		<dict>
			<key>Identifier</key>
			<string>windowTool.refactoring</string>
			<key>IncludeInToolsMenu</key>
			<integer>0</integer>
			<key>Layout</key>
			<array>
				<dict>
					<key>Dock</key>
					<array>
						<dict>
							<key>BecomeActive</key>
							<integer>1</integer>
							<key>GeometryConfiguration</key>
							<dict>
								<key>Frame</key>
								<string>{0, 0}, {500, 335}</string>
								<key>RubberWindowFrame</key>
								<string>{0, 0}, {500, 335}</string>
							</dict>
							<key>Module</key>
							<string>XCRefactoringModule</string>
							<key>Proportion</key>
							<string>100%</string>
						</dict>
					</array>
					<key>Proportion</key>
					<string>100%</string>
				</dict>
			</array>
			<key>Name</key>
			<string>Refactoring</string>
			<key>ServiceClasses</key>
			<array>
				<string>XCRefactoringModule</string>
			</array>
			<key>WindowString</key>
			<string>200 200 500 356 0 0 1920 1200 </string>
		</dict>
	</array>
</dict>
</plist>

Added Tools/NetTest/NetTest.xcodeproj/jim.pbxuser.



















































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
// !$*UTF8*$!
{
	08FB7793FE84155DC02AAC07 /* Project object */ = {
		activeBuildConfigurationName = Debug;
		activeExecutable = 38E2DFE612E5913D0097841A /* NetTest */;
		activeTarget = 8DD76FA90486AB0100D96B5E /* NetTest */;
		addToTargets = (
			8DD76FA90486AB0100D96B5E /* NetTest */,
		);
		breakpoints = (
		);
		codeSenseManager = 38E2DFEB12E5914B0097841A /* Code sense */;
		executables = (
			38E2DFE612E5913D0097841A /* NetTest */,
		);
		perUserDictionary = {
			"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					20,
					198,
					20,
					99,
					99,
					29,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXBreakpointsDataSource_ActionID,
					PBXBreakpointsDataSource_TypeID,
					PBXBreakpointsDataSource_BreakpointID,
					PBXBreakpointsDataSource_UseID,
					PBXBreakpointsDataSource_LocationID,
					PBXBreakpointsDataSource_ConditionID,
					PBXBreakpointsDataSource_IgnoreCountID,
					PBXBreakpointsDataSource_ContinueID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
				PBXFileTableDataSourceColumnWidthsKey = (
					22,
					300,
					103,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXExecutablesDataSource_ActiveFlagID,
					PBXExecutablesDataSource_NameID,
					PBXExecutablesDataSource_CommentsID,
				);
			};
			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					187,
					20,
					48,
					43,
					43,
					20,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
					PBXFileDataSource_Target_ColumnID,
				);
			};
			PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
				PBXFileTableDataSourceColumnWidthsKey = (
					20,
					175,
					60,
					20,
					48,
					43,
					43,
				);
				PBXFileTableDataSourceColumnsKey = (
					PBXFileDataSource_FiletypeID,
					PBXFileDataSource_Filename_ColumnID,
					PBXTargetDataSource_PrimaryAttribute,
					PBXFileDataSource_Built_ColumnID,
					PBXFileDataSource_ObjectSize_ColumnID,
					PBXFileDataSource_Errors_ColumnID,
					PBXFileDataSource_Warnings_ColumnID,
				);
			};
			PBXPerProjectTemplateStateSaveDate = 318269173;
			PBXWorkspaceStateSaveDate = 318269173;
		};
		perUserProjectItems = {
			38176C6412F8664700D36F5D /* PBXTextBookmark */ = 38176C6412F8664700D36F5D /* PBXTextBookmark */;
			38176C8312F8671500D36F5D /* PBXTextBookmark */ = 38176C8312F8671500D36F5D /* PBXTextBookmark */;
		};
		sourceControlManager = 38E2DFEA12E5914B0097841A /* Source Control */;
		userBuildSettings = {
		};
	};
	38176C6412F8664700D36F5D /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 38E2DFEC12E5918C0097841A /* nettest.c */;
		name = "nettest.c: 187";
		rLen = 0;
		rLoc = 3541;
		rType = 0;
		vrLen = 769;
		vrLoc = 3096;
	};
	38176C8312F8671500D36F5D /* PBXTextBookmark */ = {
		isa = PBXTextBookmark;
		fRef = 38E2DFEC12E5918C0097841A /* nettest.c */;
		name = "nettest.c: 187";
		rLen = 0;
		rLoc = 3541;
		rType = 0;
		vrLen = 769;
		vrLoc = 3096;
	};
	38E2DFE612E5913D0097841A /* NetTest */ = {
		isa = PBXExecutable;
		activeArgIndices = (
			NO,
			YES,
		);
		argumentStrings = (
			"-v",
			"-p 1",
		);
		autoAttachOnCrash = 1;
		breakpointsEnabled = 1;
		configStateDict = {
		};
		customDataFormattersEnabled = 1;
		dataTipCustomDataFormattersEnabled = 1;
		dataTipShowTypeColumn = 1;
		dataTipSortType = 0;
		debuggerPlugin = GDBDebugging;
		disassemblyDisplayState = 0;
		dylibVariantSuffix = "";
		enableDebugStr = 1;
		environmentEntries = (
		);
		executableSystemSymbolLevel = 0;
		executableUserSymbolLevel = 0;
		libgmallocEnabled = 0;
		name = NetTest;
		savedGlobals = {
		};
		showTypeColumn = 0;
		sourceDirectories = (
		);
		variableFormatDictionary = {
		};
	};
	38E2DFEA12E5914B0097841A /* Source Control */ = {
		isa = PBXSourceControlManager;
		fallbackIsa = XCSourceControlManager;
		isSCMEnabled = 0;
		scmConfiguration = {
			repositoryNamesForRoots = {
				"" = "";
			};
		};
	};
	38E2DFEB12E5914B0097841A /* Code sense */ = {
		isa = PBXCodeSenseManager;
		indexTemplatePath = "";
	};
	38E2DFEC12E5918C0097841A /* nettest.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 4032}}";
			sepNavSelRange = "{3541, 0}";
			sepNavVisRange = "{3096, 769}";
			sepNavWindowFrame = "{{330, 83}, {686, 689}}";
		};
	};
	38E2DFF412E591AC0097841A /* network.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 4158}}";
			sepNavSelRange = "{1029, 410}";
			sepNavVisRange = "{908, 847}";
			sepNavWindowFrame = "{{-1173, 22}, {686, 689}}";
		};
	};
	38E2DFF512E591AC0097841A /* network.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 854}}";
			sepNavSelRange = "{0, 0}";
			sepNavVisRange = "{619, 956}";
			sepNavWindowFrame = "{{-943, -188}, {686, 689}}";
		};
	};
	38E2DFF612E591AC0097841A /* mac.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 8708}}";
			sepNavSelRange = "{1800, 0}";
			sepNavVisRange = "{1484, 917}";
			sepNavWindowFrame = "{{-1150, 1}, {686, 689}}";
		};
	};
	38E2DFF712E591AC0097841A /* mac.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 1568}}";
			sepNavSelRange = "{2847, 14}";
			sepNavVisRange = "{1902, 960}";
			sepNavWindowFrame = "{{-1081, -62}, {686, 689}}";
		};
	};
	38E2DFF812E591AC0097841A /* phy.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 3472}}";
			sepNavSelRange = "{726, 0}";
			sepNavVisRange = "{327, 884}";
			sepNavWindowFrame = "{{-688, -224}, {686, 689}}";
		};
	};
	38E2DFFB12E591AC0097841A /* real_phy.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 3444}}";
			sepNavSelRange = "{3390, 0}";
			sepNavVisRange = "{3014, 775}";
			sepNavWindowFrame = "{{322, 18}, {686, 689}}";
		};
	};
	38E2DFFF12E591AC0097841A /* bsdserial.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {786, 11284}}";
			sepNavSelRange = "{8966, 0}";
			sepNavVisRange = "{8608, 439}";
		};
	};
	38E2E00012E591AC0097841A /* bsdserial.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 1750}}";
			sepNavSelRange = "{2906, 8}";
			sepNavVisRange = "{2175, 907}";
			sepNavWindowFrame = "{{-1035, -104}, {686, 689}}";
		};
	};
	38E2E0F512E592880097841A /* packet.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {492, 1610}}";
			sepNavSelRange = "{1271, 0}";
			sepNavVisRange = "{1137, 271}";
			sepNavWindowFrame = "{{-515, -31}, {686, 689}}";
		};
	};
	38E2E0F612E592880097841A /* packet.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 561}}";
			sepNavSelRange = "{1014, 0}";
			sepNavVisRange = "{0, 1049}";
			sepNavWindowFrame = "{{273, 55}, {686, 689}}";
		};
	};
	38E2E12E12E5960F0097841A /* clock.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 561}}";
			sepNavSelRange = "{656, 11}";
			sepNavVisRange = "{0, 844}";
			sepNavWindowFrame = "{{-968, 90}, {686, 689}}";
		};
	};
	38E2E14712E5979D0097841A /* tgkbhit.c */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 3206}}";
			sepNavSelRange = "{5229, 26}";
			sepNavVisRange = "{5106, 818}";
			sepNavWindowFrame = "{{-885, -173}, {686, 689}}";
		};
	};
	38E2E14812E5979D0097841A /* tgkbhit.h */ = {
		uiCtxt = {
			sepNavIntBoundsRect = "{{0, 0}, {639, 561}}";
			sepNavSelRange = "{896, 14}";
			sepNavVisRange = "{0, 921}";
			sepNavWindowFrame = "{{-989, -146}, {686, 689}}";
		};
	};
	8DD76FA90486AB0100D96B5E /* NetTest */ = {
		activeExec = 0;
		executables = (
			38E2DFE612E5913D0097841A /* NetTest */,
		);
	};
}

Added Tools/NetTest/NetTest.xcodeproj/project.pbxproj.

















































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 45;
	objects = {

/* Begin PBXBuildFile section */
		38E2DFED12E5918C0097841A /* nettest.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFEC12E5918C0097841A /* nettest.c */; };
		38E2DFF112E5919C0097841A /* firenetlog.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFEF12E5919C0097841A /* firenetlog.c */; };
		38E2E00412E591AC0097841A /* network.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFF412E591AC0097841A /* network.c */; };
		38E2E00612E591AC0097841A /* mac.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFF612E591AC0097841A /* mac.c */; };
		38E2E00812E591AC0097841A /* phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFF812E591AC0097841A /* phy.c */; };
		38E2E00A12E591AC0097841A /* real_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFFB12E591AC0097841A /* real_phy.c */; };
		38E2E00C12E591AC0097841A /* bsdserial.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2DFFF12E591AC0097841A /* bsdserial.c */; };
		38E2E00E12E591AC0097841A /* sim_phy.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2E00212E591AC0097841A /* sim_phy.c */; };
		38E2E01312E591BA0097841A /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E2E01112E591BA0097841A /* IOKit.framework */; };
		38E2E01412E591BA0097841A /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38E2E01212E591BA0097841A /* CoreFoundation.framework */; };
		38E2E0F712E592880097841A /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2E0F512E592880097841A /* packet.c */; };
		38E2E13012E5960F0097841A /* clock.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2E12D12E5960F0097841A /* clock.c */; };
		38E2E14912E5979D0097841A /* tgkbhit.c in Sources */ = {isa = PBXBuildFile; fileRef = 38E2E14712E5979D0097841A /* tgkbhit.c */; };
		8DD76FB00486AB0100D96B5E /* NetTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C6A0FF2C0290799A04C91782 /* NetTest.1 */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 8;
			dstPath = /usr/share/man/man1/;
			dstSubfolderSpec = 0;
			files = (
				8DD76FB00486AB0100D96B5E /* NetTest.1 in CopyFiles */,
			);
			runOnlyForDeploymentPostprocessing = 1;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		38E2DFEC12E5918C0097841A /* nettest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nettest.c; sourceTree = SOURCE_ROOT; };
		38E2DFEF12E5919C0097841A /* firenetlog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = firenetlog.c; path = ../../Logging/firenetlog.c; sourceTree = SOURCE_ROOT; };
		38E2DFF012E5919C0097841A /* firenetlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = firenetlog.h; path = ../../Logging/firenetlog.h; sourceTree = SOURCE_ROOT; };
		38E2DFF412E591AC0097841A /* network.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = network.c; path = ../../Network/network.c; sourceTree = SOURCE_ROOT; };
		38E2DFF512E591AC0097841A /* network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = network.h; path = ../../Network/network.h; sourceTree = SOURCE_ROOT; };
		38E2DFF612E591AC0097841A /* mac.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mac.c; path = ../../Network/mac.c; sourceTree = SOURCE_ROOT; };
		38E2DFF712E591AC0097841A /* mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = mac.h; path = ../../Network/mac.h; sourceTree = SOURCE_ROOT; };
		38E2DFF812E591AC0097841A /* phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = phy.c; path = ../../Network/phy.c; sourceTree = SOURCE_ROOT; };
		38E2DFF912E591AC0097841A /* phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = phy.h; path = ../../Network/phy.h; sourceTree = SOURCE_ROOT; };
		38E2DFFB12E591AC0097841A /* real_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = real_phy.c; path = ../../Network/Real/real_phy.c; sourceTree = SOURCE_ROOT; };
		38E2DFFC12E591AC0097841A /* real_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = real_phy.h; path = ../../Network/Real/real_phy.h; sourceTree = SOURCE_ROOT; };
		38E2DFFF12E591AC0097841A /* bsdserial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = bsdserial.c; path = ../../Network/Real/SERIAL/OSX/bsdserial.c; sourceTree = SOURCE_ROOT; };
		38E2E00012E591AC0097841A /* bsdserial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = bsdserial.h; path = ../../Network/Real/SERIAL/OSX/bsdserial.h; sourceTree = SOURCE_ROOT; };
		38E2E00212E591AC0097841A /* sim_phy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sim_phy.c; path = ../../Network/Simulation/sim_phy.c; sourceTree = SOURCE_ROOT; };
		38E2E00312E591AC0097841A /* sim_phy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = sim_phy.h; path = ../../Network/Simulation/sim_phy.h; sourceTree = SOURCE_ROOT; };
		38E2E01112E591BA0097841A /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = ../../../../../../System/Library/Frameworks/IOKit.framework; sourceTree = SOURCE_ROOT; };
		38E2E01212E591BA0097841A /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = ../../../../../../System/Library/Frameworks/CoreFoundation.framework; sourceTree = SOURCE_ROOT; };
		38E2E0F512E592880097841A /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = SOURCE_ROOT; };
		38E2E0F612E592880097841A /* packet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; path = packet.h; sourceTree = SOURCE_ROOT; };
		38E2E12D12E5960F0097841A /* clock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clock.c; path = ../../Node/support/clock.c; sourceTree = SOURCE_ROOT; };
		38E2E12E12E5960F0097841A /* clock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = clock.h; path = ../../Node/support/clock.h; sourceTree = SOURCE_ROOT; };
		38E2E12F12E5960F0097841A /* stackcom_inc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = stackcom_inc.h; path = ../../Node/support/stackcom_inc.h; sourceTree = SOURCE_ROOT; };
		38E2E14712E5979D0097841A /* tgkbhit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tgkbhit.c; path = ../../luasupport/kdb/Unix/tgkbhit.c; sourceTree = SOURCE_ROOT; };
		38E2E14812E5979D0097841A /* tgkbhit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj.h; name = tgkbhit.h; path = ../../luasupport/kdb/Unix/tgkbhit.h; sourceTree = SOURCE_ROOT; };
		8DD76FB20486AB0100D96B5E /* NetTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = NetTest; sourceTree = BUILT_PRODUCTS_DIR; };
		C6A0FF2C0290799A04C91782 /* NetTest.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = NetTest.1; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		8DD76FAD0486AB0100D96B5E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				38E2E01312E591BA0097841A /* IOKit.framework in Frameworks */,
				38E2E01412E591BA0097841A /* CoreFoundation.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		08FB7794FE84155DC02AAC07 /* NetTest */ = {
			isa = PBXGroup;
			children = (
				08FB7795FE84155DC02AAC07 /* Source */,
				C6A0FF2B0290797F04C91782 /* Documentation */,
				1AB674ADFE9D54B511CA2CBB /* Products */,
			);
			name = NetTest;
			sourceTree = "<group>";
		};
		08FB7795FE84155DC02AAC07 /* Source */ = {
			isa = PBXGroup;
			children = (
				38E2DFEC12E5918C0097841A /* nettest.c */,
				38E2E0F512E592880097841A /* packet.c */,
				38E2E0F612E592880097841A /* packet.h */,
				38E2DFEE12E5919C0097841A /* Logging */,
				38E2DFF312E591AC0097841A /* Network */,
				38E2E12C12E5960F0097841A /* support */,
				38E2E14612E5979D0097841A /* Unix */,
				38E2E01012E591BA0097841A /* Frameworks */,
			);
			name = Source;
			sourceTree = "<group>";
		};
		1AB674ADFE9D54B511CA2CBB /* Products */ = {
			isa = PBXGroup;
			children = (
				8DD76FB20486AB0100D96B5E /* NetTest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		38E2DFEE12E5919C0097841A /* Logging */ = {
			isa = PBXGroup;
			children = (
				38E2DFEF12E5919C0097841A /* firenetlog.c */,
				38E2DFF012E5919C0097841A /* firenetlog.h */,
			);
			name = Logging;
			path = ../../Logging;
			sourceTree = SOURCE_ROOT;
		};
		38E2DFF312E591AC0097841A /* Network */ = {
			isa = PBXGroup;
			children = (
				38E2DFF412E591AC0097841A /* network.c */,
				38E2DFF512E591AC0097841A /* network.h */,
				38E2DFF612E591AC0097841A /* mac.c */,
				38E2DFF712E591AC0097841A /* mac.h */,
				38E2DFF812E591AC0097841A /* phy.c */,
				38E2DFF912E591AC0097841A /* phy.h */,
				38E2DFFA12E591AC0097841A /* Real */,
				38E2E00112E591AC0097841A /* Simulation */,
			);
			name = Network;
			path = ../../Network;
			sourceTree = SOURCE_ROOT;
		};
		38E2DFFA12E591AC0097841A /* Real */ = {
			isa = PBXGroup;
			children = (
				38E2DFFB12E591AC0097841A /* real_phy.c */,
				38E2DFFC12E591AC0097841A /* real_phy.h */,
				38E2DFFD12E591AC0097841A /* SERIAL */,
			);
			name = Real;
			path = ../../Network/Real;
			sourceTree = SOURCE_ROOT;
		};
		38E2DFFD12E591AC0097841A /* SERIAL */ = {
			isa = PBXGroup;
			children = (
				38E2DFFE12E591AC0097841A /* OSX */,
			);
			name = SERIAL;
			path = ../../Network/Real/SERIAL;
			sourceTree = SOURCE_ROOT;
		};
		38E2DFFE12E591AC0097841A /* OSX */ = {
			isa = PBXGroup;
			children = (
				38E2DFFF12E591AC0097841A /* bsdserial.c */,
				38E2E00012E591AC0097841A /* bsdserial.h */,
			);
			name = OSX;
			path = ../../Network/Real/SERIAL/OSX;
			sourceTree = SOURCE_ROOT;
		};
		38E2E00112E591AC0097841A /* Simulation */ = {
			isa = PBXGroup;
			children = (
				38E2E00212E591AC0097841A /* sim_phy.c */,
				38E2E00312E591AC0097841A /* sim_phy.h */,
			);
			name = Simulation;
			path = ../../Network/Simulation;
			sourceTree = SOURCE_ROOT;
		};
		38E2E01012E591BA0097841A /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				38E2E01112E591BA0097841A /* IOKit.framework */,
				38E2E01212E591BA0097841A /* CoreFoundation.framework */,
			);
			name = Frameworks;
			sourceTree = SOURCE_ROOT;
		};
		38E2E12C12E5960F0097841A /* support */ = {
			isa = PBXGroup;
			children = (
				38E2E12D12E5960F0097841A /* clock.c */,
				38E2E12E12E5960F0097841A /* clock.h */,
				38E2E12F12E5960F0097841A /* stackcom_inc.h */,
			);
			name = support;
			path = ../../Node/support;
			sourceTree = SOURCE_ROOT;
		};
		38E2E14612E5979D0097841A /* Unix */ = {
			isa = PBXGroup;
			children = (
				38E2E14712E5979D0097841A /* tgkbhit.c */,
				38E2E14812E5979D0097841A /* tgkbhit.h */,
			);
			name = Unix;
			path = ../../luasupport/kdb/Unix;
			sourceTree = SOURCE_ROOT;
		};
		C6A0FF2B0290797F04C91782 /* Documentation */ = {
			isa = PBXGroup;
			children = (
				C6A0FF2C0290799A04C91782 /* NetTest.1 */,
			);
			name = Documentation;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		8DD76FA90486AB0100D96B5E /* NetTest */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "NetTest" */;
			buildPhases = (
				8DD76FAB0486AB0100D96B5E /* Sources */,
				8DD76FAD0486AB0100D96B5E /* Frameworks */,
				8DD76FAF0486AB0100D96B5E /* CopyFiles */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = NetTest;
			productInstallPath = "$(HOME)/bin";
			productName = NetTest;
			productReference = 8DD76FB20486AB0100D96B5E /* NetTest */;
			productType = "com.apple.product-type.tool";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		08FB7793FE84155DC02AAC07 /* Project object */ = {
			isa = PBXProject;
			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "NetTest" */;
			compatibilityVersion = "Xcode 3.1";
			developmentRegion = English;
			hasScannedForEncodings = 1;
			knownRegions = (
				English,
				Japanese,
				French,
				German,
			);
			mainGroup = 08FB7794FE84155DC02AAC07 /* NetTest */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				8DD76FA90486AB0100D96B5E /* NetTest */,
			);
		};
/* End PBXProject section */

/* Begin PBXSourcesBuildPhase section */
		8DD76FAB0486AB0100D96B5E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				38E2DFED12E5918C0097841A /* nettest.c in Sources */,
				38E2DFF112E5919C0097841A /* firenetlog.c in Sources */,
				38E2E00412E591AC0097841A /* network.c in Sources */,
				38E2E00612E591AC0097841A /* mac.c in Sources */,
				38E2E00812E591AC0097841A /* phy.c in Sources */,
				38E2E00A12E591AC0097841A /* real_phy.c in Sources */,
				38E2E00C12E591AC0097841A /* bsdserial.c in Sources */,
				38E2E00E12E591AC0097841A /* sim_phy.c in Sources */,
				38E2E0F712E592880097841A /* packet.c in Sources */,
				38E2E13012E5960F0097841A /* clock.c in Sources */,
				38E2E14912E5979D0097841A /* tgkbhit.c in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		1DEB928608733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_ENABLE_FIX_AND_CONTINUE = YES;
				GCC_MODEL_TUNING = G5;
				GCC_OPTIMIZATION_LEVEL = 0;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = NetTest;
			};
			name = Debug;
		};
		1DEB928708733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_MODEL_TUNING = G5;
				INSTALL_PATH = /usr/local/bin;
				PRODUCT_NAME = NetTest;
			};
			name = Release;
		};
		1DEB928A08733DD80010E9CD /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				ONLY_ACTIVE_ARCH = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.6;
			};
			name = Debug;
		};
		1DEB928B08733DD80010E9CD /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				PREBINDING = NO;
				SDKROOT = macosx10.6;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "NetTest" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				1DEB928608733DD80010E9CD /* Debug */,
				1DEB928708733DD80010E9CD /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "NetTest" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				1DEB928A08733DD80010E9CD /* Debug */,
				1DEB928B08733DD80010E9CD /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
}

Added Tools/NetTest/nettest.c.







































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "network.h"
#include "firenetlog.h"
#include "phy.h"
#include "packet.h"
#include "clock.h"
#include "tgkbhit.h"
#include "bsdserial.h"

#define MSG_WAIT	5000

#define ESC_KEY			27
#define REAL_NETWORK	1

static int flag_srch( int argc, const char *argv[], char *flag, int get_value, char **rtn );
void pgm_help( char *msg );
static void print_dump(int n, char *data );

//#define READ_NETWORK	1

// ---------------------------------------------------------------------
/*
	Test code for network hardware
*/
// ---------------------------------------------------------------------

int main (int argc, const char * argv[]) 
{
	char *port;
	void *net;
	char *ptr;
	int i,n;
	MAC_HANDLE *mh;
	char packet[2*PHY_DATA_SIZE];
	char data[256];
	CLOCK_STRUCT wait;
	
	// (1) Look for HELP
	
	if( flag_srch(argc,argv,"-v",0,&port ) )
	{
		pgm_help(NULL);
		return( 0 );
	}
	
	// (2) Look for serial port and try to open
	
	if( flag_srch(argc,argv,"-p",1,&port ) )
	{
		net = init_network( 32,port);	// I'm the controller
#ifndef REAL_NETWORK
		mh = (MAC_HANDLE *)net;	
		phy_tx(0,mh1->h);		// Enable DTR to keep from resetting board
#endif
		
		if( net != NULL )
		{
			printf("--FIRENET UP on PORT [%s]--\n",port);
		}
		else
		{
			pgm_help("** COULD NOT OPEN PORT **");
			return( -1 );
		}
	}
	
	// (3) Look for logging and start up
	
	if( flag_srch(argc,argv,"-log",1,&ptr ) )
	{
		log_control(1,ptr);
		printf("--Logging data to [%s]\n",ptr);
	}
	
	// Network I/O loop
	
	while( 1 )
	{
		// Generate the packet or exit loop
		
		printf("\nInput Packet Data:\n");
		n = packet_gen( packet );
		if( n <= 0 )
			break;
			
		// Send the packet
		
		mh = (MAC_HANDLE *)net;
#ifdef REAL_NETWORK
		phy_tx(1,mh->h);
#endif
		send_packet_byte(' ', net);	// Sacrifice byte
		for( i=0; i<n; i++)
		{
			send_packet_byte( packet[i],net);
		}
		send_packet_byte('\n', net);
#ifdef REAL_NETWORK
		phy_tx(0,mh->h);
#endif
		printf("\n-- Sent Wait for Response --\n");
		
		// Listen for responses, stop on ESC press
		
		tgkbhit_prep();
		CLOCK_Start( &wait );
		while( !CLOCK_Done(&wait,MSG_WAIT) )
		{
			if( StatPort(100,mh->h) )
			{
				n  = ReadPort(data,128,mh->h);
				if( n > 0 )
				{
					data[n] = '\0';
					print_dump( n,data );
					printf("MSG = [%s]\n",data);
				}
			}
		
			if(  i = tgkbhit() )
			{
				if( i == ESC_KEY )
				{
					tgkbhit_unprep();
					printf("\n-- User Exit --\n");
					break;
				}
			}
		}
		tgkbhit_unprep();
		
		if( CLOCK_Done(&wait,MSG_WAIT) )
			printf("\n-- Timed Out --\n");
	}
	
		
	// Exit program
	
	log_done();
	close_network( net );
	printf("\n--End Run--\n");
		
}

#define DUMP_ROW_SIZE	16

//***********************************************************************
/*
*	void print_dump(int n, char *data )	- Dump data in binary form
*
*	INPUT:	n		- Size of data in bytes
*			data	- Binary data to dump
*
*	OUTPUT:	NONE
*		Print out the data in rows of DUMP_ROW_SIZE in binary and ASCII
*/
//***********************************************************************/

static void print_dump(int n, char *data )
{
	int i,j;
	
	// (1) Print out size

	printf("\n-----------------------\n");
	printf("[%d] Bytes\n",n);
	
	// (2) Loop through data and dump in rows of 16
	
	for( i=0; i<n; i+=DUMP_ROW_SIZE)
	{
		for( j=0; j<DUMP_ROW_SIZE; j++ )
		{
			if( isprint(data[i+j]) )
				printf("%c  ",data[i+j]);
			else
				printf(".  ");
			if( i+j >= n )
				break;
		}
		
		printf(" | ");
		
		for( j=0; j<DUMP_ROW_SIZE; j++ )
		{
			printf("%02X ",0xff & data[i+j]);
			if( i+j >= n )
				break;
		}
		printf("\n");
	}
	printf("-----------------------\n");
}

//***********************************************************************
/*
* void pgm_help( char *msg  )	- Show pgm version and directions
*
*	INPUT:	msg	- Print message if preset
*
*	OUTPUT:	NONE
*		Print out program directions to stdout
*/
//***********************************************************************/
void pgm_help( char *msg )
{
	if( msg != NULL )
		printf("*** [%s] ***\n",msg);
		
	printf("--NetTest--\n");
	printf("Version: [%s] [%s]\n",__DATE__,__TIME__);
	printf("Syntax:	nethdwtest -p <port name> [-log <file>] [-v]\n");
	printf("\n");
	printf("-v		       - Show help\n");
	printf("-p <port>      - SERIAL PORT used X=SIM\n");
	printf("-log <Log file>	- Log network data\n");
	printf("\n");
	
}/* pgm_help() */


//***********************************************************************
/*
*  FLAG_SRCH(argc,argv,flag,get_value,&rtn )
*
*	INPUT:	argc,argv	- Command line parameters
*		flag		- String (flag) to be found
*		get_value	- TRUE return pointer to next item
*				  FALSE no pointer returned
*		rtn		- Return pointer (NULL if not used or
*				  found)
*
*	OUTPUT:	TRUE if flag found
*		FALSE if not
*		Scan argument list for flag
*		If found then TRUE is returned and if get_value TRUE
*		return rtn pointing to string in argv[] following 
*		the flag
*		NOTE only exact matches will be found
*/
//**********************************************************************/
int flag_srch( int argc, const char *argv[], char *flag, int get_value, char **rtn )
{
	int i;
	const char *ptr;
	
	/*  Scan through the argv's and look for a matching flag */
	
	for( i=0; i<argc; i++ )
	{
		ptr = argv[i];
		if( strcmp(ptr,flag) == 0 )
		{
		
		/*  Match found, return pointer to the following
			(if requested or NULL if not)
		*/
			i++;
			if( get_value && i < argc )
				*rtn = (char *)argv[i];
			else
				*rtn = NULL;
			return( 1 );
		}
	}
	
	/*  Failure exit here, so return to user with FALSE */
	
	return( 0 );
	
}/* flag_srch() */

Added Tools/NetTest/packet.c.

































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//*************************************************************************
/*
Copyright (c) 2011. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         packet.c/h
*
*  Description:        This will generate and decode packets
*
*  Revision History:	 2-Jan-2011	Initial Version
*
*	This module will generate and validate packets of the form:
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100
*/
//************************************************************************

#include "packet.h"

//*************************************************************************
/*
* void	packet_gen(void)	- Generate a packet according to user input
*
*	INPUT:	packet	- Packet buffer, 2*PHY_DATA_SIZE 
*
*	OUTPUT:	Length of generated packet
*			packet data in packet
*/
//************************************************************************

int packet_gen(char *packet)
{
	int to = 1;
	int from = 1;
	int val,i;
	char data[2*PHY_DATA_SIZE];
	int cksum;
	char *ptr;
	
	// (1) Clear out packet before start
	
	for( i=0; i<2*PHY_DATA_SIZE; i++)
		packet[i] = '\0';
	
	// (2) Get the TO and FROM address
	// NOTE: If no input then use 0
	
	printf("\n-- Packet Generator --\n");
	printf("TO Address: ");
	fgets(data,PHY_DATA_SIZE,stdin);
	if( strlen(data) > 1 )
		to = strtol(data,NULL,0);
	if( to < 0 )
		return 0;					// Exit on bad address
		
	printf("FROM Address: ");
	fgets(data,PHY_DATA_SIZE,stdin);
	if( strlen(data) > 1 )
		from = strtol(data,NULL,0);
		
	// (2) Get packet data
	
	printf("Packet Data: ");
	fgets(data,PHY_DATA_SIZE,stdin);
	val = strlen(data);
	val = val - 1;
	
	// If too bit cut off 
	if( val > PHY_DATA_SIZE )
	{
		data[PHY_DATA_SIZE-1] = '\0';
	}
	else
	{
		// Otherwise just chop off \n
		if( val > 0 )
		{
			data[val] = '\0';
		}
		else
		{
			data[0] = '\0';	// No data
		}
	}
	
	// (3) Build data packet, header
	
	sprintf(packet,"%c%02d%02d",MSG_HDR,to,from);
	
	// (4) Add data
	
	val = strlen(data);
	for( i=0; i<val; i++)
		packet[i+5] = data[i];
	val = strlen(packet);
		
	// (5) Compute checksum and to packet with trailer
	
	for( cksum=0,i=1; i<val; i++ )
		cksum += 0xff & packet[i];
		
	ptr = (char *)&packet[val];
	cksum = cksum % 100;			// Mod 100
	sprintf(ptr,"%c%02d",MSG_TRLR,cksum);
	
	// (5) show packet
	
	printf("Packet: %s \n",packet);
	printf("--------------------------\n\n");
	
	val = strlen(packet);
	return val ;
}

				
			
			



Added Tools/NetTest/packet.h.











































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//*************************************************************************
/*
Copyright (c) 2011. Pandora Products
*/
//*************************************************************************
/*
*  Module Name:         packet.c/h
*
*  Description:        This will generate and decode packets
*
*  Revision History:	 2-Jan-2011	Initial Version
*
*	This module will generate and validate packets of the form:
*
*	PACKET FORMAT:
*		:TO><FROM><DATA>;<CKSUM>
*	:		- Packet start marker
*	<TO>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<FROM>	Two byte field, ASCII digits 0 = Broadcast, 1-32 Valid addresses
*	<DATA>	Up to PHY_DATA_SIZE ASCII text with , separators
*	;		Packet End of Data marker
*	<CKSUM>	Two byte ASCII number sum of TYPE,TO,FROM and DATA fields modulo 100
*/
//************************************************************************

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include "mac.h"

#ifndef PACKET_H
#define PACKET_H	1

int packet_gen(char *packet);

#endif

Added Tools/ShowGen/ShowGen.lua.













































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
-- *********************************************************
-- Converter program Reads Audacity label track &
-- Produces a node firing list.
--
--	INPUT: 
--	 Label text file of the form
--	<Time> <End time> <Label>
--
-- 	OUTPUT:
--	\t\t{ "node" : "<node #>", "ch" : "<ch #>", "delay" : "<time ms>" },
--
-- SYNTAX:
--		firenet -c firegen.lua -i <label file> -o <out file> -n nodes
--
-- *********************************************************

VER = "1.0"
MAX_CHANNEL = 6
-------------------------------------------------------------------------------
--                  SUPPORT FUNCTIONS
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
--  flag_srch( argv,flag,data )   - Find the port in the argument list
--
--  INPUT:      argv    - Program argument list
--              flag    - Look for this string (i.e. -flag) in list
--              data    - If non-nil get the field following flag slot
--
--  OUTPUT      If data = nil return nil if flag not found and 1 if found
--              If data <> nil return nil if flag not found or next field if found
--
-------------------------------------------------------------------------------

function flag_srch( argv,flag,data )
    local rtnval = nil
    
    -- Loop over the list and check each item for match
    
    for i=1,table.getn(argv) 
    do
        if( flag == argv[i] )
        then
            -- Found so two cases 
            -- (a) If data == nil then return 1
            -- (b) If data != nil then return argv[i+1]
            
            if( data == nil  )
            then
                rtnval = 1
            else
                rtnval = argv[i+1]
            end
            
            -- In either case just break out
            
            break
        end
    end
    
    return( rtnval )
end

function show_help(msg)
	local out
	
	if( msg )
	then
		print(msg)
	end
	
	print("ShowGen Show Generation program V ",VER)
	print("SYNTAX: firenet -c ShowGen.lua -i <in> -o <out> -nodes <#>")
	print("   -i <in>  Input file REQUIRED")
	print("   -o <out> Output file REQUIRED")
	print("   -nodes # # Nodes in system REQUIRED")
	print("   -version Show this message")
	print()
end

------------------------------------------------
--                  Main Program
------------------------------------------------

-- GET COMMAND LINE OPTIONS

NODES = flag_srch( arg,"-nodes",1 )
NODES = NODES + 0	-- Convert to #
INPUT_FILE = flag_srch(arg,"-i",1)
OUTPUT_FILE = flag_srch(arg,"-o",1)
VERSION = flag_srch( arg,"-version")

if( VERSION )
then
	show_help()
	os.exit()
end

if( NODES == nil )
then
	show_help("ERROR: # nodes required")
	os.exit()
end
if( INPUT_FILE == nil )
then
	show_help("ERROR: Input file required")
	os.exit()
end
if( OUTPUT_FILE == nil )
then
	show_help("ERROR: Output file required")
	os.exit()
end
------------------------------------

-- Open input and output files

infl = io.open(INPUT_FILE,"r")
outfl = io.open(OUTPUT_FILE,"w")
if( infl == nil )
then
	out = string.format("ERROR Cannot open %s as input",INPUT_FILE)
	show_help(out)
	os.exit()
end

-----------------------------------------------
-- Right here read all the file and count lines

FLINES = 0
for line in infl:lines()
do
	FLINES = FLINES + 1
end
if( FLINES == 0 )
then
	out = string.format("File [%s] has no data - quitting",INPUT_FILE)
	show_help(out)
	os.exit()
else
	-- Compute how many to fire per queue
	SKIP_FIRE = FLINES/(NODES * MAX_CHANNEL)
	print ("SKIP FIRE ",SKIP_FIRE,FLINES,NODES)
	if( SKIP_FIRE < 1 )
	then
		-- Going here means we have more pieces than queues
		-- So compute the number of pieces to fire/queue
		SKIP_FIRE = 1.0 / SKIP_FIRE
		SKIP_FIRE = math.floor( SKIP_FIRE ) - 1
		SKIP_FIRE = -1 * SKIP_FIRE
			print ("SKIP FIRE ",SKIP_FIRE)
	else
		SKIP_FIRE = math.floor( SKIP_FIRE )
	end

end

-- Now Re-open the file

infl:close()
infl = io.open(INPUT_FILE,"r")

out = string.format("File Lines = [%d]",FLINES)
print(out)
if( SKIP_FIRE >= 0 )
then
	out = string.format("Queues skipped between fires [%d]",SKIP_FIRE)
else
	print("-- Too many pieces for # queues decrease nodes")
	out = string.format("Pieces fired/queue = [%d]",-1*SKIP_FIRE)
	print(out)
	os.exit() 
end
print(out)
print("\n")
-----------------------------------------------
	
if( outfl == nil )
then
	out = string.format("ERROR Cannot open %s as output",OUTPUT_FILE)
	show_help(out)
	os.exit()
end

-- Build node list

nodelist = {}
for i=1,NODES
do
	nodelist[i] = 1
end

-- Now process file NOTE: Since the generated JSON has to have ,'s
-- after every line but the last we will output each line but no \n
-- at the end the succeeding line will add ,\n except for the last which
-- will only have a \n

-- Set up for run

current_node = 1
file_run = 1
first = 1
skip = SKIP_FIRE

for line in infl:lines() 
do
	-- Extract the first chunk which is the time
	-- Convert to integer MS
	-- Extract the number as a substring
	-- convert to MS and do a ceiling to
	-- get the rounded up value
	n,en = string.find(line,"(%d+%p%d+)")
	delay = string.sub(line,n,en)
	delay = tonumber(delay)*1000
	delay = math.ceil( delay )
	

	if( skip < 1.0 )
	then
			print(delay,skip)		
		-- Next use the current node and current channel for the output
		-- If used up try next and so on fail if no channels left
	
		current_ch = nodelist[current_node]
		node = current_node
		while( current_ch >= MAX_CHANNEL )
		do
			-- Try the next node
			
			node = node + 1
			if( node > NODES )
			then
				node = 1
			end
			
			-- If we hit the current node AGAIN then failure 
			-- not enough nodes in the list
			
			if( node == current_node )
			then
				print("FAILURE: EXCEEDED CHANNELS, ADD MORE NODES")
				os.exit()
			end
			
			if( nodelist[node] <= MAX_CHANNEL )
			then
				-- SUCCESS use this node
				
				current_node = node
				current_ch = nodelist[current_node]
				break
			end
		end

		-- Finish the last line (do only after first line)
		
		if( first == nil )
		then
			outfl:write(",\n")
		end
		first = nil
		
		-- Generate and output line
		
		out = string.format("\t\t\t{ \"node\" : \"%d\", \"ch\" : \"%d\" , \"delay\" : \"%d\" }",
					current_node,
					current_ch,
					delay)
		outfl:write(out)
		
		-- Update channel and current_node
		
		nodelist[current_node] = nodelist[current_node] + 1
		current_node = current_node + 1
		if( current_node > NODES )
		then
			current_node = 1
		end
		-- Restore skip value
		skip = SKIP_FIRE
	else
		skip = skip - 1
	end
end

-- Now add last \n on the output and close

outfl:write("\n")
infl:close()
outfl:close()
print("-- END RUN --")
	


Deleted build/Debug/firenet_sup.lua.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
--------------------------------------------------------------
--
--	FIRENET Lua support functions
--	This file contains the basic structures used for Firenet
--	support under Lua
--
--	Basic Structures
--		FNET_MAP	- List indexed by NODE name
--			[<Node Name>]
--							.FIRED		- Fired channels as a #
--							.UNFIRED	- UnFired channels as a #
--							.PHY		- Physical address
--		REV_FNET_MAP	- List indexed by NODE Phy address
--			[<Node Phy addr]
--							.NAME		- Node name (see FNET_MAP)
--
--	13-Sep-2009	Initial version
--	20-Sep-2009	Add cmd line handler
--
----------------------------------------------------------------

----------------------------------------------------------------
-- GLOBAL DATA STRUCTURES
----------------------------------------------------------------
FNET_MAP = {}			-- Network MAP
REV_FNET_MAP = {}		-- Reverse MAP
BCAST_ADDR = "0xFF"		-- Broadcast address for FIRENET
OS_MUSIC_PLAYER	= "afplay"	-- Cmd line Music player program (OS dependent)

----------------------------------------------------------------
--	build_fnet_map(h)	- Build Lua map of firenet network
--
--	INPUT:	h	- FIRENET handle
--
--	OUTPUT:	1	- Success, FNET_MAP and REV_FNET_MAP rebuilt
--			nil	- FAILURE
--
----------------------------------------------------------------

function build_fnet_map(h)
	local outpk
	local inpk
	local rtnval = nil
	
	-- (1) Build a WHO IS message
	
	outpk = {}
	outpk.CMD = "W"
	outpk.TO = BCAST_ADDR
	
	-- (2) Send it then wait for an answer
	
	--print("-- Sending Packet --")
	h:write(outpk)
	timer.sleep( 20000 );
	
	-- (3) Now read packets till we get a nil and store the data
	
	inpk = h:read()
	FNET_MAP = {}
	REV_FNET_MAP = {}
	while( inpk ~= nil )
	do
			--print("-- MAP Rec Packet --")
			--table.foreach(inpk,print)

		if( inpk.CMD == "W" )
		then
			print("Build MAP ",inpkt,FROM)
			-- Build forward map
			FNET_MAP[inpk.DATA] = {}
			FNET_MAP[inpk.DATA].NAME = inpk.DATA
			FNET_MAP[inpk.DATA].PHY = inpk.FROM
			
			-- Build Reverse MAP
			REV_FNET_MAP[inpk.FROM] = {}
			REV_FNET_MAP[inpk.FROM].NAME = inpk.DATA
		end
		timer.sleep( 100 );
		rtnval = 1
		inpk = h:read()
	end
	return rtnval
end

----------------------------------------------------------------
--	build_fnet_status(h)	- Get status of network
--
--	INPUT:	h	- FIRENET handle
--
--	OUTPUT:	1	- Success, FNET_MAP and REV_FNET_MAP updated with status
--			nil	- FAILURE
--
----------------------------------------------------------------

function build_fnet_status( h )
	local outpk
	local inpk
	local rtnval = nil
	local node
	local out
	
	-- (1) Build a STATUS message
	
	outpk = {}
	outpk.CMD = "S"
	outpk.TO = BCAST_ADDR
	
	-- (2) Send it then wait for an answer
	
	--print("-- Sending Packet --")
	h:write(outpk)
	timer.sleep( 20000 );
	
	-- (3) Now read packets till we get a nil and store the data
	
	inpk = h:read()
	while( inpk ~= nil )
	do
			--print("-- STATUS Rec Packet --")
			--table.foreach(inpk,print)

		if( inpk.CMD == "S" )
		then
			node = node_address(inpk.FROM)
			if( node ~= nil )
			then
				-- Update forward map
				if( FNET_MAP[node] ~= nil )
				then
					FNET_MAP[node].FIRED = inpk.FIRED
					FNET_MAP[node].UNFIRED = inpk.UNFIRED
				else
					out = string.format("*** ERROR Unknown NODE [%s]",inpk.FROM)
					if( inpk.DATA ~= nil )
					then
						out = out..string.format("NAME: [%s]",node)
					end
					print(out)
				end
			else
				out = string.format("*** ERROR Node [%s] NOT FOUND",inpk.FROM)
				print(out)
			end
		end
		timer.sleep( 100 );
		rtnval = 1
		inpk = h:read()
	end
	return rtnval
end

----------------------------------------------------------------
--	phy_address(node)	- Return physical address for a node
--
--	INPUT:	node	- Node name
--
--	OUTPUT:	Physical address or BCAST_ADDRESS if none
--
----------------------------------------------------------------

function phy_address(node)
	local phy
	
	if( FNET_MAP[node] ~= nil )
	then
		phy = FNET_MAP[node].PHY
	else
		phy = BCAST_ADDR
	end
	
	return phy
end

----------------------------------------------------------------
--	node_address(phy)	- Return node  name from physical address
--
--	INPUT:	phy	- physical address
--
--	OUTPUT:	Node name or nil if not found
--
----------------------------------------------------------------

function node_address(phy)
	local node = nil
	local val
	
	val = tonumber(phy)
	if( REV_FNET_MAP[val] ~= nil )
	then
		node = REV_FNET_MAP[val].NAME
	else
		node = phy
	end
	
	return node
end
	
----------------------------------------------------------------
--	play_file(file)
--
--	INPUT:	file	- Music file
--
--	OUTPUT:	1 if play started, nil if not
--
----------------------------------------------------------------

function play_file( file )
	local rtnval = nil
	local fp
	
	-- (1) Try to open the file, if OK then proceed
	
	fp = io.open(file,"r")
	if( fp ~= nil )
	then
		-- OS X version of play
		
		fp:close()
		rtnval = 1
		fp = string.format("%s %s &",OS_MUSIC_PLAYER,file)
		os.execute(fp)
	end
	
	return rtnval
end

-------------------------------------------------------------------------------
--
--  find_arg( argv,flag,data )   - Find the port in the argument list
--
--  INPUT:      argv    - Program argument list
--              flag    - Look for this string (i.e. -flag) in list
--              data    - If non-nil get the field following flag slot
--
--  OUTPUT      If data = nil return nil if flag not found and 1 if found
--              If data <> nil return nil if flag not found or next field if found
--
-------------------------------------------------------------------------------

function flag_srch( argv,flag,data )
    local rtnval = nil
    
    -- Loop over the list and check each item for match
    
    for i=1,table.getn(argv) 
    do
        if( flag == argv[i] )
        then
            -- Found so two cases 
            -- (a) If data == nil then return 1
            -- (b) If data != nil then return argv[i+1]
            
            if( data == nil  )
            then
                rtnval = 1
            else
                rtnval = argv[i+1]
            end
            
            -- In either case just break out
            
            break
        end
    end
    
    return( rtnval )
end

		
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<




























































































































































































































































































































































































































































































































































Added buildmake.sh.

















>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
#/bin/sh
# Build Linux make file
#
# Build initial file
pbtomake -i Firenet.xcodeproj -obj obj -o tempmake -no_framework -link_opt "-lpthread -lm"
#
# Modifiy file 
awk -f fixmake.awk < tempmake > makefile

Added fixmake.awk.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#
# AWK file to fix up make for run
#
#  Actions:
#		(1) Add missing Include lines
#		(2) Use Linux serial I/O
#		(3) Replace obj & link lines
#		(4) Replace compile lines

BEGIN {
		inhibit = 0
	}

#  (1) Add Missing include lines, NOTE: We start up a bit from the 
# end of the list
/-INode\/node/ {
				print("\t\t-INode/node\\")
				print("\t\t-INetwork\\")
				print("\t\t-INode\\")
				print("\t\t-Iluasupport\\")
				print("\t\t-Iluasupport/JSON\\")
				print("\t\t-Iluasupport/JSON/JSON")
				
				next
	}
	
# (2) Use Linux serial I/O

/OSX/ {
	if( inhibit == 0 )
	{
		print("\t\t-INetwork/Real/SERIAL/Linux\\")
		next
	}
}

# (3) Fix obj  & link stuff

/obj\/bsdserial.o/ {
	if( inhibit == 0 )
	{
		print("\t\tobj/linserial.o\\");
		next
	}
}

# (4) Fix compile line

/-- bsdserial --/ {
	print("# Item # 65 -- linserial --")
	print("obj/linserial.o : Network/Real/SERIAL/Linux/linserial.c")
	print("\t$(CC) $(CC_OPTIONS) Network/Real/SERIAL/Linux/linserial.c -c $(INCLUDE) -o obj/linserial.o")
	inhibit = 1
}
	


# Just print everything else
	
{
	if( inhibit == 0 )
		print($0)
	else
	{
		inhibit = inhibit + 1
		if( inhibit > 3 )
		inhibit = 0
	}
}

Changes to lua-5.1.4/src/linit.c.

15
16
17
18
19
20
21


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


38
39
40
41
42
43
44

// Modified for FIRENET
// Added classes

#include "lua_timer.h"
#include "lua_firenet.h"
#include "lua_kbd.h"




static const luaL_Reg lualibs[] = {
  {"", luaopen_base},
  {LUA_LOADLIBNAME, luaopen_package},
  {LUA_TABLIBNAME, luaopen_table},
  {LUA_IOLIBNAME, luaopen_io},
  {LUA_OSLIBNAME, luaopen_os},
  {LUA_STRLIBNAME, luaopen_string},
  {LUA_MATHLIBNAME, luaopen_math},
  {LUA_DBLIBNAME, luaopen_debug},
  
  // **** Added classes for FIRENET support
  {LUA_TIMERNAME,luaopen_timerlib},
  {LUA_FIRENETNAME,luaopen_firenetlib},
  {LUA_KBDNAME,luaopen_kbdlib},


  //***************************************
  {NULL, NULL}
};


LUALIB_API void luaL_openlibs (lua_State *L) {
  const luaL_Reg *lib = lualibs;







>
>
















>
>







15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

// Modified for FIRENET
// Added classes

#include "lua_timer.h"
#include "lua_firenet.h"
#include "lua_kbd.h"
#include "jsonlua.h"
#include "httplib.h"


static const luaL_Reg lualibs[] = {
  {"", luaopen_base},
  {LUA_LOADLIBNAME, luaopen_package},
  {LUA_TABLIBNAME, luaopen_table},
  {LUA_IOLIBNAME, luaopen_io},
  {LUA_OSLIBNAME, luaopen_os},
  {LUA_STRLIBNAME, luaopen_string},
  {LUA_MATHLIBNAME, luaopen_math},
  {LUA_DBLIBNAME, luaopen_debug},
  
  // **** Added classes for FIRENET support
  {LUA_TIMERNAME,luaopen_timerlib},
  {LUA_FIRENETNAME,luaopen_firenetlib},
  {LUA_KBDNAME,luaopen_kbdlib},
  {LUA_PARSENAME,luaopen_parselib},
  {LUA_HTTPNAME,luaopen_httplib},
  //***************************************
  {NULL, NULL}
};


LUALIB_API void luaL_openlibs (lua_State *L) {
  const luaL_Reg *lib = lualibs;

Changes to lua-5.1.4/src/lualib.h.

37
38
39
40
41
42
43
44


45
46
47
48
49
50
51
52
53
LUALIB_API int (luaopen_debug) (lua_State *L);

#define LUA_LOADLIBNAME	"package"
LUALIB_API int (luaopen_package) (lua_State *L);


/* open all previous libraries */
LUALIB_API void (luaL_openlibs) (lua_State *L); 





#ifndef lua_assert
#define lua_assert(x)	((void)0)
#endif


#endif







|
>
>









37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
LUALIB_API int (luaopen_debug) (lua_State *L);

#define LUA_LOADLIBNAME	"package"
LUALIB_API int (luaopen_package) (lua_State *L);


/* open all previous libraries */
//LUALIB_API void (luaL_openlibs) (lua_State *L); 
LUALIB_API int luaopen_loadlib (lua_State *L);




#ifndef lua_assert
#define lua_assert(x)	((void)0)
#endif


#endif

Added luasupport/HTTP/COMS/restcom.c.













































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*************************************************************************
/*
*  Module Name:         RESTCOM	- Restful server <-> App com
*
*  Description:         This is communication channel between the
*						restful server and the application program
*						It is assumed that they are threads of the 
*						same application
*
*  Author:              Jim Schimpf
*
*  Revision History:	9 Oct 2010 Initial version
*
*/
//************************************************************************

#include "rest.h"
#include "restcom.h"

#if 0
	#pragma mark -
	#pragma mark - DATA -
#endif

static RESTQ *comQsend = NULL;		// Master -> Client
static RESTQ *comQrec  = NULL;		// Master <- Client

#if 0
	#pragma mark -
	#pragma mark - SERVER API -
#endif

//************************************************************************
/*
    Function            : int rest_server_open(void)
    Description         : Create the server queues
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	0 if Ok, <> 0 if problem
    Notes               :	This MUST be called before communication works
    Date Created        : 9-Oct-2010
*/
//************************************************************************

int restcom_server_open(void)
{
	int rtnval = -1;		// Set for fail
	
	// (1) Is this trip necessary ?
	
	if( (comQsend == NULL || comQsend->valid != RESTQ_VALID) &&
		(comQrec  == NULL || comQrec->valid  != RESTQ_VALID) )
	{
		restcomQDelete( comQsend );		// Tidy up if necessary
		restcomQDelete( comQrec );
		
		comQsend = restcomQNew();	// MT queue
		comQrec  = restcomQNew();
		if( comQsend != NULL && comQsend->valid == RESTQ_VALID && 
			comQrec  != NULL && comQrec->valid  == RESTQ_VALID)
			rtnval = 0;		// SUCCESS !
	}
	
	return( rtnval );
}

//************************************************************************
/*
    Function            : void rest_server_close(void)
    Description         : Delete server queue
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	NONE
    Notes               :	Call on server shutdown
    Date Created        : 9-Oct-2010
*/
//************************************************************************
		
void restcom_server_close(void)
{	
	// (1) Is this trip necessary ?
	
	if( comQsend != NULL )
	{
		restcomQDelete( comQsend );
		comQsend = NULL;				// Mark DONE
	}
	
	if( comQrec != NULL )
	{
		restcomQDelete( comQrec );
		comQrec = NULL;				// Mark DONE
	}
}

//************************************************************************
/*
    Function            : int rest_master_send(RESTCOM *r)
    Description         : Put a message into the send queue
	Input Parameters    :	tid	- TID of queue element
						:	type	- Type of data
						:	url		- URL of data
						:	size	- Size of data in bytes
						:	data	- Data in message

    Output Parameters   :	NONE
    Function Returns    :	0 if OK, <> 0 if problem
    Notes               :	NOTE: Lock queue while sending
						: This uses comQsend
    Date Created        : 9-Oct-2010
*/
//************************************************************************

int restcom_master_send(void *tid,HTTP_TYPE type,	
								char *url,int size,char *data )
{
	int rtnval = -1;	// Mark for failure
	RESTQEL *el;
		
	// (1) Do we have a send queue
	
	if( comQsend != NULL && comQsend->valid == RESTQ_VALID )
	{
		// (2) Build queue element
		
		el = restcomQNewEl(tid,type,url,size,data);
		if( el != NULL )
		{
			// (3) Lock queue then attach to tail
			
			if( restcomQLock( comQsend ) == 0 )
			{
				if( restcomQAddTail( el,comQsend ) == 0 )
				{
					if( restcomQUnLock(comQsend ) == 0 )
						rtnval = 0;		// SUCCESS
				}
			}
		}
	}
	
	return( rtnval );
}
		
//************************************************************************
/*
    Function            : int rest_master_receive(RESTCOM *r)
    Description         : Pull message from receive queue
	Input Parameters    :	tid	- TID of queue element to be found

    Output Parameters   :	NONE
    Function Returns    :	RESTQ element of received data
						:	NULL if no data
    Notes               :	NOTE: Lock queue while sending
						: This uses comQrec
    Date Created        : 9-Oct-2010
*/
//************************************************************************
		
RESTQEL *restcom_master_receive( void *tid)
{
	RESTQEL *el = NULL;
		
	// (1) Do we have a receive queue
	
	if( comQrec != NULL && comQrec->valid == RESTQ_VALID )
	{
		// (2) Is there anything in it
		
		if( restcomQCount( comQrec ) > 0 )
		{
			// (3) Try to pull data 
			
			if( restcomQLock( comQrec ) == 0 )
			{
				el = restcomQGetTid( tid, comQrec );
				restcomQUnLock( comQrec );
			}
		}
	}
	
	return( el );
}

#if 0
	#pragma mark -
	#pragma mark - CLIENT API -
#endif

//************************************************************************
/*
    Function            : int rest_client_open(void)
    Description         : Check the queues are ready
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	0 if Ok, <> 0 if problem
    Notes               :	
    Date Created        : 10-Oct-2010
*/
//************************************************************************

int restcom_client_open(void)
{
	int rtnval = -1;		// Set for fail
	
	// (1) Are the queues open ?
	
	if( comQsend != NULL && comQsend->valid == RESTQ_VALID && 
		comQrec  != NULL && comQrec->valid  == RESTQ_VALID)
			rtnval = 0;		// SUCCESS !
	
	return( rtnval );
}

//************************************************************************
/*
    Function            : void rest_client_close(void)
    Description         : Do nothing
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	NONE
    Notes               :	Call on server shutdown
    Date Created        : 10-Oct-2010
*/
//************************************************************************
		
void restcom_client_close(void)
{
}

//************************************************************************
/*
    Function            : int rest_client_send(RESTCOM *r)
    Description         : Put a message into the master rec queue
	Input Parameters    :	tid	- TID of queue element
						:	type	- Type of data
						:	url		- URL of data
						:	size	- Size of data in bytes
						:	data	- Data in message

    Output Parameters   :	NONE
    Function Returns    :	0 if OK, <> 0 if problem
    Notes               :	NOTE: Lock queue while sending
						: This uses comQsend
    Date Created        : 9-Oct-2010
*/
//************************************************************************

int restcom_client_send(void *tid,int size,char *data )
{
	int rtnval = -1;	// Mark for failure
	RESTQEL *el;
		
	// (1) Do we have a send queue
	
	if( comQrec != NULL && comQrec->valid == RESTQ_VALID )
	{
		// (2) Build queue element
		
		el = restcomQNewEl(tid,0,NULL,size,data);
		if( el != NULL )
		{
			// (3) Lock queue then attach to tail
			
			if( restcomQLock( comQrec ) == 0 )
			{
				if( restcomQAddTail( el,comQrec ) == 0 )
				{
					if( restcomQUnLock(comQrec ) == 0 )
						rtnval = 0;		// SUCCESS
				}
			}
		}
	}
	
	return( rtnval );
}
		
//************************************************************************
/*
    Function            : int rest_client_receive(RESTCOM *r)
    Description         : Pull message from receive queue
	Input Parameters    :	

    Output Parameters   :	NONE
    Function Returns    :	RESTQ element of received data
						:	NULL if no data
    Notes               :	NOTE: Lock queue while sending
						: This uses comQrec
    Date Created        : 9-Oct-2010
*/
//************************************************************************
		
RESTQEL *restcom_client_receive( void)
{
	RESTQEL *el = NULL;
		
	// (1) Do we have a receive queue
	
	if( comQsend != NULL && comQsend->valid == RESTQ_VALID )
	{
		// (2) Is there anything in it
		
		if( restcomQCount( comQsend ) > 0 )
		{
			// (3) Try to pull data 
			
			if( restcomQLock( comQsend ) == 0 )
			{
				el = restcomQRemoveHead( comQsend );
				restcomQUnLock( comQsend );
			}
		}
	}
	
	return( el );
}
#if 0
	#pragma mark -
	#pragma mark - SUPPORTAPI -
#endif

//************************************************************************
/*
    Function            : void rest_delete_packet( RESTQEL *el )
    Description         : Delete packet
	Input Parameters    :	el	- Packet to be deleted

    Output Parameters   :	NONE
    Function Returns    :	NONE
    Date Created        : 10-Oct-2010
*/
//************************************************************************

void restcom_delete_packet( RESTQEL *el )
{
	restcomQDeleteEl( el );
}

Added luasupport/HTTP/COMS/restcom.h.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*************************************************************************
/*
*  Module Name:         RESTCOM	- Restful server <-> App com
*
*  Description:         This is communication channel between the
*						restful server and the application program
*						It is assumed that they are threads of the 
*						same application
*
*  Author:              Jim Schimpf
*
*  Revision History:	30 Sep 2010 Initial version
*
*/
//************************************************************************

#include "rest.h"
#include "restcomQ.h"

#ifndef RESTCOM_H
#define RESTCOM_H = 1

// ***** Open/Close channel ******	
					
int restcom_server_open(void);
void restcom_server_close(void);

int restcom_client_open(void);
void restcom_client_close(void);

// ****** Server I/O **************

int restcom_master_send( void *tid,HTTP_TYPE type,									
						char *url,int size,char *data );
RESTQEL *restcom_master_receive( void *tid);

// ****** Client I/O **************

int restcom_client_send( void *tid,int size,char *data );
RESTQEL *restcom_client_receive(void);

// ****** Support **************

void restcom_delete_packet( RESTQEL *el );

#endif
						

Added luasupport/HTTP/COMS/restcomQ.c.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*****************************************************************************
/*
 *  restcomQ.c	- queue manager for RESTful library communication
 *  Part of restcom
 *
 *  Created by Jim on 12/12/08.
 *
 *	19-Jun-2009	Convert to OS agnostic version
 *	18-Jan-2010	Convert to CPcom library support
 *	 9-Feb-2010 [280eaf32ca] Blocking receive
 *	 9-Oct-2020 Convert to RESTful support routine
 *	10-Oct-2010 Use convention that URL and DATA are not allocated here
 */
//*****************************************************************************

#include "restcomQ.h"

#if 0
	#pragma mark -
	#pragma mark -- External API CREATE/DELETE --
#endif

//************************************************************************
/*
    Function            : RESTQ	*restcomQNew(  )
    Description         : Create a new queue
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		Pointer to created queue
       Error Return -		NULL
    Notes               :
    Date Created        : 12-Dec-2008

*/
//************************************************************************

RESTQ	*restcomQNew( void )
{
	RESTQ *queue;
	int val;
	
	// (1) Create the queue base
	
	queue = (RESTQ *) MEMALLOC( sizeof(RESTQ));
	if( queue != NULL )
	{
		queue->valid = RESTQ_VALID;
						
		// (2) Init mutex for list
		
		val = pthread_mutex_init(&(queue->lock),NULL);
		if( val != 0 )
		{
			// FAILURE to create MUTEX....
			
			restcomQDelete( queue );
			queue = NULL;
		}
	}
	
	return( queue );
}

//************************************************************************
/*
    Function            : void restcomQDelete( RESTQ *queue )
    Description         : Delete a current queue
    Input Parameters    :	queue to be deleted
    Output Parameters   :	NONE
    Function Returns    :	NONE
    Notes               :
    Date Created        : 12-Dec-2008
	
 	 9-Feb-2010 [280eaf32ca] Blocking receive
*/
//************************************************************************

void restcomQDelete( RESTQ *queue )
{
	RESTQEL *el,*nxt;
	
	// (1) Is this queue valid, if not bail
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Walk through list and delete elements
		
		el = queue->head;
		while( el != NULL && el->valid == RESTQEL_VALID )
		{
			nxt = el->next;
			restcomQDeleteEl( el );
			el = nxt;
		}
		
		// (3) Delete outside structure
		
		pthread_mutex_destroy(&(queue->lock) );
		queue->valid = 0;
		queue->count = 0;
		MEMFREE( queue );
	}
}

#if 0
	#pragma mark -
	#pragma mark --  CREATE/DELETE Q EL's --
#endif

//************************************************************************
/*
    Function            : RESTQEL *restcomQNewEl( void )
    Description         : Create a new queue element
    Input Parameters    :	tid	- TID of queue element
						:	type	- Type of data
						:	url		- URL of data (NOTE: This can be NULL)
						:	size	- Size of data in bytes
						:	data	- Data in message (NOTE: This can be NULL)
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		Pointer to created queue element
       Error Return -		NULL
    Notes               :
    Date Created        : 9-Oct-2008
	
*/
//************************************************************************
		
RESTQEL *restcomQNewEl( void *tid,HTTP_TYPE type,	// Create elements
								char *url,int size,char *data )
{
	RESTQEL *el;
	
	// (1) Create structure then fill
	
	el = (RESTQEL *)MEMALLOC( sizeof(RESTQEL) );
	if( el != NULL )
	{
		// (2) Put in TID and build data areas
		
		el->tid = tid;
		el->type = type;
		el->url = url;
		el->size = size;
		el->data = data;
						
		// (3) Element OK, mark valid and return

		el->valid = RESTQEL_VALID;
	}
	
	return( el );
}

//************************************************************************
/*
    Function            : void restcomQDeleteEl( RESTQEL *el )
    Description         : Delete a current queue element
    Input Parameters    :	el to be deleted
    Output Parameters   :	NONE
    Function Returns    :	NONE
    Notes               :
    Date Created        : 12-Dec-2008
	NOTE: DATA and URL are allocated externally and are NOT allocated here
	
*/
//************************************************************************

void restcomQDeleteEl( RESTQEL *el )
{
	// (1) If valid then delete
	
	if( el != NULL )
	{
		el->valid = 0;
		MEMFREE( el );
	}
}

#if 0
	#pragma mark -
	#pragma mark -- External API LOCK/UNLOCK --
#endif

//************************************************************************
/*
    Function            : int restcomQLock( RESTQ *queue )
    Description         : Lock queue mutex
    Input Parameters    :	queue	- Queue to be locked
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		0	Locked
       Error Return -		<> 0 FAILURE
    Notes               :
    Date Created        : 12-Dec-2008
	
*/
//************************************************************************

int restcomQLock( RESTQ *queue )
{
	int rtnval = -1;	// Set for fail
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Blocking lock 
		
		rtnval = pthread_mutex_lock( &(queue->lock) );
		
	}
	
	return( rtnval );
}

//************************************************************************
/*
    Function            : int restcomQUnLock( RESTQ *queue )
    Description         : Un Lock queue mutex
    Input Parameters    :	queue	- Queue to be unlocked
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		0	Locked
       Error Return -		<> 0 FAILURE
    Notes               :
    Date Created        : 12-Dec-2008
	
*/
//************************************************************************

int restcomQUnLock( RESTQ *queue )
{
	int rtnval = -1;	// Set for fail
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Blocking lock 
		
		rtnval = pthread_mutex_unlock( &(queue->lock) );
	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- External API ADD/DELETE --
#endif

//************************************************************************
/*
    Function            : int restcomQAddHead( RESTQEL *el, RESTQ *queue )
    Description         : Add element to head of queue
    Input Parameters    :	el		- element to be added
						:	queue	- Queue where added
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		0	Add OK
       Error Return -		<> 0 Not added
    Notes               :	This routine assumes queue was LOCKED
    Date Created        : 12-Dec-2008
	
*/
//************************************************************************

int restcomQAddHead( RESTQEL *el, RESTQ *queue )
{
	int rtnval = -1;	// Set for fail
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Valid element 
		
		if( el != NULL && el->valid == RESTQEL_VALID )
		{
			// (3) Add and update count
			
			el->next = queue->head;
			queue->head = el;
			
			// Handle MT queue case and reset
			// both head and tail
			
			if( queue->count == 0 )
				queue->tail = el;
				
			queue->count += 1;
			rtnval = 0;			// SUCCESS !
		}
	}
	
	return( rtnval );
}

//************************************************************************
/*
    Function            : int restcomQAddTail( RESTQEL *el, RESTQ *queue )
    Description         : Add element to tail of queue
    Input Parameters    :	el		- element to be added
						:	queue	- Queue where added
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		0	Add OK
       Error Return -		<> 0 Not added
    Notes               :	This routine assumes queue was LOCKED
    Date Created        : 12-Dec-2008
	
*/
//************************************************************************

int restcomQAddTail( RESTQEL *el, RESTQ *queue )
{
	int rtnval = -1;	// Set for fail
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Valid element 
		
		if( el != NULL && el->valid == RESTQEL_VALID )
		{
			// (3) Add and update count
			// NOTE: Special case where QUEUE MT
			
			if( queue->count == 0 )
			{
				queue->head = el;
				queue->tail = el;
			}
			else
			{
				// Ok just put on the end
				
				queue->tail->next = el;
				queue->tail = el;
			}
			
			// In both cases update the count 
			// and return success
			
			queue->count += 1;
			rtnval = 0;			// SUCCESS !
		}
	}
	
	return( rtnval );
}

//************************************************************************
/*
    Function            : RESTQEL *restcomQRemoveHead( RESTQ *queue )
    Description         : Remove element from head of queue
    Input Parameters    :	queue	- Queue where removed
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		Removed queue element
       Error Return -		NULL nothing to get
    Notes               :	This routine assumes queue was LOCKED
    Date Created        : 12-Dec-2008
	
*/
//************************************************************************

RESTQEL *restcomQRemoveHead( RESTQ *queue )
{
	RESTQEL *el = NULL;
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Is there a head element ?
		
		if( queue->head != NULL )
		{
			// (3) Ok pull it
			// Update queue structure
			
			el = queue->head;
			
			queue->head = el->next;		// Get next one
			queue->count -= 1;			// Update count
			
			// Queue MT ?, if so fix tail
			
			if( queue->head == NULL )
				queue->tail = NULL;
				
			// Finaily clear next pointer in returned
			// element, this guy is GONE
			
			el->next = NULL;
		}
	}
		
	return( el );
}

//************************************************************************
/*
    Function            : RESTQEL *restcomQRemoveTail( RESTQ *queue )
    Description         : Remove element from tail of queue
    Input Parameters    :	queue	- Queue where removed
    Output Parameters   :	NONE
    Function Returns    :
       Normal Return -		Removed queue element
       Error Return -		NULL nothing to get
    Notes               :	This routine assumes queue was LOCKED
    Date Created        : 12-Dec-2008
	
*/
//************************************************************************

RESTQEL *restcomQRemoveTail( RESTQ *queue )
{
	RESTQEL *el = NULL;
	RESTQEL *tail;
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) Is there a tail element ?
		
		if( queue->tail != NULL )
		{
			// (3) Ok pull it
			// Update queue structure
			
			el = queue->tail;
			
			// (3a) Special case, only one element in queue
			// So make it MT
			
			if( queue->count == 1 )
			{
				queue->count = 0;
				queue->head = NULL;
				queue->tail = NULL;
			}
			else
			{
				// Non-mt queue so find the new tail
				// and update the count
			
				tail = queue->head;
				while( tail != NULL )
				{
					// Is it the one before the previous
					// tail ?
					
					if( tail->next == queue->tail )
					{
						// Yes, make that the new tail
						// update count
						
						queue->tail = tail;
						queue->count -= 1;
						break;
					}
					else
						tail = tail->next;		// Try next
				}
			}
		}
	}
	
	return( el );
}

//************************************************************************
/*
    Function            : RESTQEL *restcomQGetTid( void *tid, RESTQ *queue)
    Description         : Remove an element with a specific tid
    Input Parameters    :	queue	- Queue where removed
    Output Parameters   :	NONE
    Function Returns    :	Queue element if found
    Notes               :	Queue is assumed LOCKED
    Date Created        : 9-Oct-2010
*/
//************************************************************************

RESTQEL *restcomQGetTid( void *tid, RESTQ *queue)
{
	RESTQEL *el;
	RESTQEL *prev = NULL;
	int found = 0;
	
	// (1) Walk through the queue and find the matching element
	
	el = queue->head;
	while( el != NULL )
	{
		if( el->tid == tid )
		{
			found = 1;
			break;
		}
		prev = el;
		el = el->next;
	}
	
	// (2) If found then remove this element from the queue
	// First update head or tail if it's one of those
	
	if( found )
	{
		queue->count -= 1;		// Remove an element
		
		if( el == queue->tail )
			queue->tail = prev;
		if( el == queue->head )
				queue->head = queue->head->next;
		
		// (3) Now remove this element, two cases
		
		if( prev != NULL )
		{
			// Middle of queue so link around
			
			prev->next = el->next;
		}
		// NOTE: Don't have to handle HEAD case (prev==NULL)
		// since that is handled when we fixed the queue HEAD
	}
	
	return( el );
}

//************************************************************************
/*
    Function            : int restcomQCount( RESTQ *queue )
    Description         : Check for MT/Not MT queue (no lock needed)
    Input Parameters    :	queue	- Queue ti=o check
    Output Parameters   :	NONE
    Function Returns    :	# Elements in queue (0 if bad or MT)
    Notes               :	Queue does not need to be locked
    Date Created        : 19-Jun-2009
*/
//************************************************************************

int restcomQCount( RESTQ *queue )
{
	int rtnval = 0;
	
	// (1) Valid queue ?
	
	if( queue != NULL && queue->valid == RESTQ_VALID )
	{
		// (2) return count
		
		rtnval = queue->count;
	}
	
	return( rtnval );
}

Added luasupport/HTTP/COMS/restcomQ.h.

































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*****************************************************************************
/*
 *  QUEUE Manager for CPCom
 *  Part of restcom
 *
 *  Created by Jim on 12/12/08.
 *
 *	19-Jun-2009	Convert to OS agnostic version
 *   3-Feb-2010 [eb38bfbfc4] Change Context to TG_HANDLE
 *	 9-Feb-2010 [280eaf32ca] Blocking receive
 *	 9-Oct-2020 Convert to restcomQ
 *	10-Oct-2010 Use convention that URL and DATA are not allocated here
*/
//*****************************************************************************

#include <unistd.h>
#include <pthread.h>
#include "rest.h"

#ifndef RESTCOMQ_H
#define RESTCOMQ_H	1

// ***
// Queue Structure
// ***

#define RESTQ_VALID			(unsigned long)'RSTQ'
#define RESTQEL_VALID		(unsigned long)'rstq'


typedef struct ccqel_dummy {
							unsigned long		valid;
							struct ccqel_dummy	*next;
							void				*tid;		// Context data
							HTTP_TYPE			type;		// Data type
							char				*url;		// Request URL
							int					size;		// Size of data
							char				*data;		// Request data
						} RESTQEL;
						
typedef struct ccq_dummy {
							unsigned long		valid;
							int					count;	// # Elements
							RESTQEL				*head;	// Start of queue
							RESTQEL				*tail;	// End of queue
							pthread_mutex_t		lock;	// Mutex lock
						} RESTQ;
						
// ***
// QUEUE API
// ***

RESTQ	*restcomQNew( void );				// Create/Delete
void restcomQDelete( RESTQ *queue );

RESTQEL *restcomQNewEl( void *tid,HTTP_TYPE type,	// Create elements
								char *url,int size,char *data );
void restcomQDeleteEl( RESTQEL *el );

int restcomQLock( RESTQ *queue );						// Lock
int restcomQUnLock( RESTQ *queue );

int restcomQAddHead( RESTQEL *el, RESTQ *queue );	// Add/Delete
int restcomQAddTail( RESTQEL *el, RESTQ *queue );
RESTQEL *restcomQRemoveHead( RESTQ *queue );
RESTQEL *restcomQRemoveTail( RESTQ *queue );

RESTQEL *restcomQGetTid( void *tid, RESTQ *queue);
int restcomQCount( RESTQ *queue );					// Check for MT

#ifndef MEMALLOC
	#define MEMALLOC(x)		calloc(1,x)
	#define MEMFREE(x)		if( x != NULL ) free(x)
#endif

#endif

Added luasupport/HTTP/httplib.c.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
//*****************************************************************************
/*
	Copyright © 2010 Jim Schimpf. Permission is hereby granted,
	free of charge, to any person obtaining a copy of this software and
	associated documentation files (the "Software"), to deal in the Software
	without restriction, including without limitation the rights to use,
	copy, modify, merge, publish, distribute, sublicense, and/or sell copies
	of the Software, and to permit persons to whom the Software is furnished
	to do so, subject to the following conditions:

	The above copyright notice and this permission notice shall be included
	in all copies or substantial portions of the Software.

	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
	OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
	MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
	IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
	CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
	TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
	SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
//*****************************************************************************
/*
	Module Name:         HTTP interface for Firenet

	Description:        This uses libmicrohttpd to build a RESTful
						interface to Firenet.  

	Library Extensions	rest_start()			- Start HTTP interface
						rest_stop()				- Stop HTTP interface
						rest_close()			- Close current connection & return data
						rest_url()				- Extract URL from current connection
						rest_data()				- Get data from current connection
						rest_client_lock()		- Lock server to current client
						
						
	Revision History:	
		24 Oct 2010	Initial version
		20 Nov 2010 UC both http & rest base
		16 Dec 2010	Add client lock to lock the webserver to one client
		 7-Mar-2011 Dropping POST data reader, as post data does not work...
		23-Dec-2011 [7b5a95ed75] Update to get rest  base 
					size in structure
		29-Jan-2012 [28bcb55998] Change Minnow so that it can work as a regular
					web server
					
*/
//****************************************************************************

#include <ctype.h>
#include <time.h>
#include "lauxlib.h"
#include "lua.h"
#include "lualib.h"
#include "lstate.h"
#include "lapi.h"
#include "qdj.h"
#include "rest.h"
#include "restclient.h"

#if 0
	#pragma mark -
	#pragma mark DATA
#endif

#define RESTFUL_HANDLE_VALID	'rest'
typedef struct rest_dummy 
{
	unsigned long valid;
	RESTQEL *rdata;
} RESTFUL_HANDLE;

static int rest_start( lua_State *L );
static int rest_stop( lua_State *L );
static int rest_open(lua_State *L);
static int rest_close(lua_State *L);
static int rest_url(lua_State *L);
static int rest_http_data(lua_State *L);
static int rest_client_lock(lua_State *L);

// Support

static int get_http_base( RSERV_DATA *rsrv );
static RESTFUL_HANDLE *checkRESTFUL_HANDLE( lua_State *L );
static void uppercase_it(char *ptr );

#if 0
	#pragma mark -
	#pragma mark Lua API
#endif

static struct luaL_reg httplib_f[] = {
	{"start",rest_start},
	{"stop",rest_stop},  
	{"open",rest_open},
	{NULL,NULL}
};

static struct luaL_reg httplib_m[] = {	
	{"close",rest_close},
  	{"url",rest_url},
//	{"data",rest_http_data},		// TBD
	{"lock",rest_client_lock},
	{NULL,NULL}
};

#if 0
	#pragma mark --
	#pragma mark -- LUA SUPPORT --
#endif

/*******************************************************************************
*
*  luaopen_parselib	- Attach HTTP class to LUA
*
*	INPUT:	L	- Lua state
*
*	OUTPUT:	1	- Stacked HTTP library table
*
*********************************************************************************/
LUALIB_API int luaopen_httplib (lua_State *L) 
{			
	// (1) Create the class Metatable
	
	luaL_newmetatable(L,"PP.http");
	
	// (2) Put the __index element with the metatable in the
	// metatable
	
	lua_pushstring(L,"__index");
	lua_pushvalue(L,-2);				// Put the meta table (1) on stack
	lua_settable(L,-3);					// Add it to the metatable

	// (3) Add the method table to the stack
	
	luaL_openlib(L,NULL,httplib_m,0);
	
	// (3) Add the class table to the system & return that it's on the
	// stack
	
	luaL_openlib(L, "http", httplib_f, 0);
	return 1;
}

/*******************************************************************************
*
*  RESTFUL_HANDLE *checkRESTFUL_HANDLE( lua_State *L )	- Check TOS for RESTFUL handle
*
*	INPUT:	NONE
*			Examine TOS
*
*	OUTPUT:	Pointer to RESTFUL_HANDLE object if it was TOS
*			NULL if not
*
*********************************************************************************/

static RESTFUL_HANDLE *checkRESTFUL_HANDLE( lua_State *L )
{
	RESTFUL_HANDLE *h;
	
	// (1) Check the TOS to see if we have TG.limo metatable
	
	h = (RESTFUL_HANDLE *)luaL_checkudata(L,1,"PP.http");
	luaL_argcheck( L,(h != NULL),1,"Restful object expected");
	
	return( h );
}

#if 0
	#pragma mark -
	#pragma mark CREATE/DELETE API
#endif

//***************************************************************************
/*
*  rest_start( http_port,http_base,http_site,rest_base)
*
*	INPUT:	http_port	- # Value, port used for HTTP transactions
*			http_base	- ABSOLUTE loccation of site files (HTML file root)
*			rest_base	- RESTful tree root
*
*	OUTPUT:	1 if started nil if not 
*
*/
//***************************************************************************/

static int rest_start( lua_State *L )
{
	size_t llen;
	double dval;
	char *ptr;
	RSERV_DATA *rsrv = rest_data();
	int rtnval = 0;
	
	// (1) Pull in the values 1 at a time
	// PORT, BASE then Restful base
	
	if( lua_isnumber(L,1))
	{
		dval = lua_tonumber(L, 1);
		rsrv->http_port = (int)dval;
		
		// (2) Get the path to the files
		
		if(  lua_isstring(L,2 ) )
		{
			ptr = (char *)luaL_checklstring(L,2,&llen);
			rsrv->http_site = (char *)MEMALLOC(llen+1);
			if( rsrv->http_site != NULL )
			{
				// 3 Copy and set up http_base value
				// if OK continue
				
				memcpy(rsrv->http_site,ptr,llen);
				if( get_http_base(rsrv) )
				{
					uppercase_it(rsrv->http_base);

					// (3) Get the path to the RESTful location
					// if present
					
					if(  lua_isstring(L,3 ) )
					{
						ptr = (char *)luaL_checklstring(L,3,&llen);
						rsrv->rest_base = (char *)MEMALLOC(llen+1);
						rsrv->len_rest_base = llen;
						if( rsrv->rest_base != NULL )
						{
							memcpy(rsrv->rest_base,ptr,llen);
							uppercase_it(rsrv->rest_base);
						}
						else
							rsrv->len_rest_base = 0;	// No rest base
					}
					else
					{
						// (3a) There is no REST input so handle that
							
						rsrv->len_rest_base = 0;
						rsrv->rest_base = NULL;
					}
							
					// (5) Start server
								
					if( rest_server() == 0 )
					{
						// (6) Start client
						
						if( rest_support_open() == 0 )
						{
							dval = 1.0;
							lua_pushnumber( L,dval );	// Return true
							rtnval = 1;
						}
					}
				}
			}
		}
	}
	
	// (7) If rtnval == 0 call close to shut things down
	
	if( rtnval == 0 )
		rest_stop(L);

	return( rtnval );
}
//***************************************************************************
/*
*  rest_stop( )
*
*	INPUT:	NONE
*
*	OUTPUT:	Stop HTTP server
*/
//***************************************************************************/

static int rest_stop( lua_State *L )
{
	RSERV_DATA *rsrv = rest_data();
	
	// (1) Close com channel and stop server
	
	rest_support_close();	
	rsrv->run_flag = 0;
	rest_server_close();
	usleep( 5000000 );	// Wait 5 seconds
	
	// (2) Delete data
	
	if( rsrv->http_base != NULL )
	{
		MEMFREE( rsrv->http_base );
		rsrv->http_base = NULL;
	}
	
	if( rsrv->http_site != NULL )
	{
		MEMFREE( rsrv->http_site );
		rsrv->http_site = NULL;
	}
	
	if( rsrv->rest_base != NULL )
	{
		MEMFREE( rsrv->rest_base );
		rsrv->rest_base = NULL;
	}
	
	return( 0 );
}

#if 0
	#pragma mark -
	#pragma mark I/O API
#endif

//***************************************************************************
/*
*  http.open()	- NON-Blocking receive
*
*	INPUT:	NONE
*
*	OUTPUT:	NIL if no data, REST structure if receive
*
*/
//***************************************************************************/

static int rest_open(lua_State *L)
{
	int rtnval = 0;
	RESTQEL *packet;
	RESTFUL_HANDLE *h;
	
	// (1) Did we get anything ?
	
	packet = rest_support_receive();
	if( packet != NULL )
	{
		// (2) Build a lua user structure and return this to
		// the user
		
		h = (RESTFUL_HANDLE *)lua_newuserdata(L,sizeof(RESTFUL_HANDLE));
		if( h != NULL )
		{
			h->valid = RESTFUL_HANDLE_VALID;
			h->rdata = packet;
			
			// (2a) Return handle to user, attach metatable to mark this
			// as part of http class
			
			luaL_getmetatable(L,"PP.http");
			lua_setmetatable(L, -2);
			rtnval = 1;
		}
	}
	
	return rtnval;
}

//***************************************************************************
/*
*  http.close(h,data)	-	Close http transaction and return data
*
*	INPUT:	data	- Returned data for http I/O
*
*	OUTPUT:	NONE
*
*/
//***************************************************************************/

static int rest_close(lua_State *L)
{
	RESTFUL_HANDLE *h = checkRESTFUL_HANDLE(L);
	size_t llen = 0;
	char *ptr = NULL;
	char *send_data;
	
	if( h != NULL )
	{
		// (2) Check for data
		
		if( lua_isstring(L,2) )
		{
			ptr = (char *)luaL_checklstring(L, 2, &llen);
		}
		else
		{
			llen = 0;
			ptr = "";
		}
		
		// (3) We must locally allocate the data
		// to make MHD happy as it will deallocate
		// this copy of the data
		
		send_data = (char *)MEMALLOC( llen );
		if( send_data != NULL )
		{
			memcpy(send_data,ptr,llen);
		
			// (4) Now send the data off to the server
		
			rest_support_send((int)llen,send_data,h->rdata);
		}
	}
		
	return(0);
}

#if 0
	#pragma mark -
	#pragma mark HTTP DATA API
#endif

//***************************************************************************
/*
*  h:url()	- Return requested URL from restful handle
*
*	INPUT:	h	- Restful handle
*
*	OUTPUT:	Lua numeric list with URL elements starting at REST start = [1]
*			Followed by a number for the HTTP type of request
*			See HTTP_TYPE in rest.h
*
*	Uppercase all URL elements
*
*/
//***************************************************************************/

static int rest_url(lua_State *L)
{
	int rtnval = 0;
	RESTFUL_HANDLE *h = checkRESTFUL_HANDLE(L);
	int i,n;
	int count = 1;
	double dval;
	char *ptr;
	char *url;
	int list;
	
	// (1) If we have a handle then proceed
	
	if( h != NULL )
	{
		// (2) Create a table on the stack and set for return
		
		lua_newtable(L);
		
		// (3) Start the work on the URL, 
		
		n = strlen(h->rdata->url);
		url = (char *) MEMALLOC(n+1);
		if( url != NULL )
		{
			memcpy(url,h->rdata->url,n);
			ptr = url;
			
			for( i=0; i<n; i++ )
			{
				if( url[i] == '/' )
				{
					// We have a path element, so NULL out the 
					// the / and put the path onto the table
					
					url[i] = '\0';
					if( strlen( ptr ) > 0 )
					{
						list = lua_gettop(L);
						dval = (double)count++;					// Index
						lua_pushnumber(L, dval);
						uppercase_it( ptr );					// Upper case name
						lua_pushstring(L, (const char *)ptr);	// String value
						lua_rawset(L,list);						// Add to table
					}
					ptr = (char *)&url[i+1];
				}
			}
			
			// Add in last path element if present
			
			if( ptr != NULL && strlen(ptr) != 0 )
			{
				list = lua_gettop(L);
				dval = (double)count++;					// Index
				lua_pushnumber(L, dval);
				uppercase_it( ptr );					// Upper case name
				lua_pushstring(L, (const char *)ptr);	// String value
				lua_rawset(L,list);
			}

			MEMFREE(url);
		}
		
		// Add n=count-1 to table
		
		list = lua_gettop(L);
		lua_pushstring(L,"n");
		dval = (double)(count - 1);
		lua_pushnumber(L, dval);
		lua_rawset(L,list);						// Add to table
		
		// Put on HTTP type return as part of the result
		
		dval = (double)h->rdata->type;
		lua_pushnumber(L, dval);
		rtnval = 2;
	}
		
	return rtnval;
}

// ********** POST DATA READS DON'T WORK **********
#if 0
//***************************************************************************
/*
*  h:data()	- Return data from restful handle
*
*	INPUT:	h	- Restful handle
*
*	OUTPUT:	Lua data as a string
*
*/
//***************************************************************************/

static int rest_http_data(lua_State *L)
{
	int rtnval = 0;
	RESTFUL_HANDLE *h = checkRESTFUL_HANDLE(L);
	
	// (1) Do we have a handle ?
	
	if( h != NULL )
	{
		// (2) Ok then push the data as a string
		
		lua_pushlstring(L, (const char *)h->rdata->data,h->rdata->size);
		rtnval = 1;
	}
	
	return rtnval;
}
#endif

#if 0
	#pragma mark -
	#pragma mark HTTP LOGIN API
#endif

//***************************************************************************
/*
*  h:rest_client_lock(flag)	- Lock connection to current client (by IP)
*
*	INPUT:	h		- Restful handle
*			flag	- If <> nil then lock client, if nil unlock
*
*	OUTPUT:	NONE
*
*/
//***************************************************************************/

static int rest_client_lock(lua_State *L)
{
	int rtnval = 0;
	RESTFUL_HANDLE *h = checkRESTFUL_HANDLE(L);
	RSERV_DATA *rsrv = rest_data();
	
	// (1) Do we have a handle ?
	
	if( h != NULL )
	{
		// (2) Is this lock or unlock
		
		if( lua_isnil(L,2) )
		{
			// DELETE the lock
			
			rsrv->lock_addr_flag = 0;	// Clear flag
		}
		else 
		{
			// Lock requested, copy the current request IP
			// to checker location and set the flag
			
			strcpy(rsrv->client_ip_addr,rsrv->request_ip_addr);
			rsrv->lock_addr_flag = 1;	// Set flag
		}

	}
	
	return rtnval;
}

#if 0
	#pragma mark -
	#pragma mark Internal API
#endif

//***************************************************************************
/*
*  int get_http_site( RSERV_DATA *rsrv )	- Get HTTP base name from http_base
*
*	INPUT:	rsrv	- Struct with filled out http_base
*
*	OUTPUT:	1 if site name set up 0 if not
*
*/
//***************************************************************************/

static int get_http_base( RSERV_DATA *rsrv )
{
	int rtnval = 0;
	int n,i;
	char *ptr;
	
	// (1) Scan backward from the end of the http_site and find first "/"
	
	n = strlen(rsrv->http_site);
	for( i=n-1; i>=0; i-- )
	{
		if( rsrv->http_site[i] == '/' )
			break;
	}
	
	// (2) At this point i -> '/' so move fwd 1 and set string pointer there
	
	ptr = (char *)&(rsrv->http_site[i+1]);
	
	// (3) Move this string into structure
	
	n = strlen(ptr);
	rsrv->http_base = (char *)MEMALLOC(n+1);
	rsrv->len_http_base = n;
	if( rsrv->http_base != NULL )
	{
		memcpy(rsrv->http_base,ptr,n);
		rtnval = 1;
	}
	
	return rtnval;
}

//***************************************************************************
/*
*  void uppercase_it(char *ptr )	- Uppercase the URL parts
*
*	INPUT:	ptr	- Part of URL
*
*	OUTPUT:	NAME url part converted to uppercase 
*
*/
//***************************************************************************/

static void uppercase_it(char *ptr )
{
	int n = strlen(ptr);
	int i;
	
	for( i=0; i<n; i++ )
		ptr[i] = toupper(ptr[i]);
		
}

Added luasupport/HTTP/httplib.h.

































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//*****************************************************************************
/*
	Copyright © 2010 Jim Schimpf. Permission is hereby granted,
	free of charge, to any person obtaining a copy of this software and
	associated documentation files (the "Software"), to deal in the Software
	without restriction, including without limitation the rights to use,
	copy, modify, merge, publish, distribute, sublicense, and/or sell copies
	of the Software, and to permit persons to whom the Software is furnished
	to do so, subject to the following conditions:

	The above copyright notice and this permission notice shall be included
	in all copies or substantial portions of the Software.

	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
	OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
	MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
	IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
	CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
	TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
	SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
//*****************************************************************************
/*
	Module Name:         HTTP interface for Firenet

	Description:        This uses libmicrohttpd to build a RESTful
						interface to Firenet.  

	Library Extensions	rest_start()			- Start HTTP interface
						rest_stop()				- Stop HTTP interface
						rest_support_open()		- Open client connection
						rest_support_close()	- Close client connection
						rest_support_receive()	- Receive an HTTP message
						reset_support_send()	- Send an HTTP result
						
	Revision History:	
		24 Oct 2010	Initial version
		 7-Mar-2011 Dropping POST data reader, as post data does not work...
*/
//****************************************************************************

#ifndef HTTPLUA_H
#define HTTPLUA_H	1

#define LUA_HTTPNAME	"http"
LUALIB_API int luaopen_httplib (lua_State *L);

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/AUTHORS.





























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Primary developers:
Christian Grothoff <christian@grothoff.org> (maintainer)
Nils Durner <durner@gnunet.org> (W32 port)
Sagie Amir (TLS/SSL support using GNUtls)
Richard Alimi <rich@velvetsea.net> (performance)

Code contributions also came from:
Chris GauthierDickey <chrisg@cs.du.edu>
Elliot Glaysher
Daniel Pittman <depittman@gmail.com>
John Popplewell <john@johnnypops.demon.co.uk>
Heikki Lindholm <holin@iki.fi>
Alex Sadovsky <alexeysad@gmail.com>
Greg Schohn <greg.schohn@gmail.com>
Thomas Martin <Thomas.Martin@rohde-schwarz.com>
Peter Ross <pross@xvid.org>
RuXu W <wrxzzj@gmail.com>
Matthew Moore
Colin Caughie <c.caughie@indigovision.com>
David Carvalho <andaris@gmail.com>
David Reiss <dreiss@facebook.com>
Mika Raento <mikie@iki.fi>
Mike Crowe <mac@mcrowe.com>
John Muth <muth@parascale.com>
Geoffrey McRae <geoff@spacevs.com>

Documentation contributions also came from:
Marco Maggi <marco.maggi-ipsu@poste.it>
Sebastian Gerhardt <sebgerhardt@gmx.net>

Added luasupport/HTTP/libmicrohttpd-0.9.0/COPYING.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
Some of this code is DUAL-LICENSED.  If you use MHD without HTTPS/SSL
support, you are free to choose between the LGPL and the eCos License
(http://ecos.sourceware.org/license-overview.html).  If you compile
MHD with HTTPS support, you must obey the terms of the GNU LGPL.


		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS

           How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice

That's all there is to it!


Added luasupport/HTTP/libmicrohttpd-0.9.0/ChangeLog.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
Mon Jul 26 10:46:57 CEST 2010
	Releasing libmicrohttpd 0.9.0. -CG

Sun Jul 25 14:57:47 CEST 2010
	Adding support for sendfile on Linux.  Adding support
	for systemd-style passing of an existing listen socket
	as an option.  IPv6 sockets now only bind to IPv6
	(if platform supports this). -CG

Sun Jul 25 11:10:45 CEST 2010
	Changed code to use external libgnutls code instead of
	the "fork".  Minor API changes for setting TLS options. -CG

Sun Jun 13 10:52:34 CEST 2010
	Cleaned up example code. -CG

Fri Apr 23 09:56:37 CEST 2010
	Do not return HTTP headers for requests without version
	numbers.  Do return HTTP version 1.0 if client requested
	HTTP version 1.1 (previously, we returned HTTP/1.1 even
	if the client specified HTTP/1.0).  -GM/CG

Sat Mar 13 09:41:01 CET 2010
	Releasing libmicrohttpd 0.4.6. -CG

Wed Mar 10 13:18:26 CET 2010
	Fixing bug in 100 CONTINUE replacement when handling POSTs
	(see report on mailinglist), with testcase. -CG/MC

Tue Feb 23 09:16:15 CET 2010
	Added configure check for endianness to define WORDS_BIGENDIAN
	which fixes SSL support on big endian architectures. -JA/CG

Sat Feb 20 10:01:09 CET 2010
	Added check for inconsistent options (MHD_OPTION_PROTOCOL_VERSION
	without MHD_USE_SSL) causing instant segfault. -JA/CG

Tue Feb  9 20:31:51 CET 2010
	Fixed issue with poll doing busy waiting. -BK/CG

Thu Jan 28 21:28:56 CET 2010
	Releasing libmicrohttpd 0.4.5. -CG

Thu Jan 28 20:35:48 CET 2010
	Make sure addresses returned by memory pool are
	aligned (fixes bus errors on Sparc). -CG

Thu Dec 17 20:26:52 CET 2009
	poll.h is not stricly required anymore. -ND

Fri Dec  4 13:17:50 CET 2009
	Adding MHD_OPTION_ARRAY. -CG

Mon Nov 16 14:41:26 CET 2009
	Fixed busy-loop in internal select mode for inactive
	clients with infinite connection timeout. -CG

Thu Nov 12 16:19:14 CET 2009
	Adding support for setting a custom error handler for
	fatal errors (previously, the implementation always
	called 'abort' in these cases). -CG/ND

Wed Nov 11 12:54:16 CET 2009
	Adding support for poll (alternative to select allowing
	for more than FD_SETSIZE parallel connections). -JM

Wed Oct 28 20:26:00 CET 2009
 	Releasing libmicrohttpd 0.4.4. -CG

Wed Oct 14 14:37:37 CEST 2009
	Fixing (rare) deadlock due to SELECT missing SIGALRM by
	making all SELECT calls block for at most 1s.  While this
	can in (rare) situations delay the shutdown by 1s, I think
	this is preferable (both performance and possibly portability-wise)
	over using a pipe for the signal. -CG

Sun Oct 11 14:57:29 CEST 2009
	Adding eCos license as an additional license for the
	non-HTTPS code of MHD. -CG

Sun Oct 11 11:24:27 CEST 2009
	Adding support for Symbian. -MR

Fri Oct  9 15:21:29 CEST 2009
	Check for error codes from pthread operations (to help with
	error diagnostics) and abort if something went wrong. -CG

Thu Oct  8 10:43:02 CEST 2009
	Added check for sockets being '< FD_SETSIZE' (just to be safe). -CG

Mon Oct  5 21:17:26 CEST 2009
	Adding "COOKIE" header string #defines. -CG

Mon Oct  5 08:29:06 CEST 2009
	Documenting default values. -CG

Fri Aug 28 22:56:47 CEST 2009
 	Releasing libmicrohttpd 0.4.3. -CG

Sun Aug 23 16:21:35 UTC 2009
	Allow MHD_get_daemon_info to return the daemon's listen socket.
	Includes a test case that uses this functionality to bind a server to
	an OS-assigned port, look the port up with getsockname, and curl it. -DR

Tue Aug  4 00:14:04 CEST 2009
	 Fixing double-call to read from content-reader callback for first
	 data segment (as reported by Alex on the mailinglist). -CG

Thu Jul 29 21:41:52 CEST 2009
 	 Fixed issue with the code not using the "block_size" argument
         given to MHD_create_response_from_callback causing inefficiencies
	 for values < 2048 and segmentation faults for values > 2048
	 (as reported by Andre Colomb on the mailinglist). -CG

Sun May 17 03:29:46 MDT 2009
 	 Releasing libmicrohttpd 0.4.2. -CG

Fri May 15 11:00:20 MDT 2009
	 Grow reserved read buffer more aggressively so that we are not
	 needlessly stuck reading only a handfull of bytes in each iteration. -CG

Thu May 14 21:20:30 MDT 2009
	 Fixed issue where the "NOTIFY_COMPLETED" handler could be called
	 twice (if a socket error or timeout occured for a pipelined
	 connection after successfully completing a request and before
	 the next request was successfully transmitted).  This could
	 confuse applications not expecting to see a connection "complete"
	 that they were never aware of in the first place. -CG

Mon May 11 13:01:16 MDT 2009
         Fixed issue where error code on timeout was "TERMINATED_WITH_ERROR"
         instead of "TERMINATED_TIMEOUT_REACHED". -CG

Wed Apr  1 21:33:05 CEST 2009
         Added MHD_get_version(). -ND

Wed Mar 18 22:59:07 MDT 2009
	 Releasing libmicrohttpd 0.4.1. -CG

Wed Mar 18 17:46:58 MDT 2009
	 Always RECV/SEND with MSG_DONTWAIT to (possibly) address
	 strange deadlock reported by Erik on the mailinglist ---
	 and/or issues with blocking read after select on GNU/Linux
	 (see select man page under bugs). -CG

Tue Mar 17 01:19:50 MDT 2009
	 Added support for thread-pools. -CG/RA

Mon Mar  2 23:44:08 MST 2009
	 Fixed problem with 64-bit upload and download sizes and
	 "-1" being used to indicate "unknown" by introducing
	 new 64-bit constant "MHD_SIZE_UNKNOWN". -CG/DC

Wed Feb 18 08:13:56 MST 2009
	 Added missing #include for build on arm-linux-uclibc. -CG/CC

Mon Feb 16 21:12:21 MST 2009
	 Moved MHD_get_connection_info so that it is always defined,
	 even if HTTPS support is not enabled. -CG

Sun Feb  8 21:15:30 MST 2009
	 Releasing libmicrohttpd 0.4.0. -CG

Thu Feb  5 22:43:45 MST 2009
	 Incompatible API change to allow 64-bit uploads and downloads.
	 Clients must use "uint64_t" for the "pos"
	 argument (MHD_ContentReaderCallback) and the "off"
	 argument (MHD_PostDataIterator) and the "size"
	 argument (MHD_create_response_from_callback) now.
	 Also, "unsigned int" was changed to "size_t" for
	 the "upload_data_size" argument (MHD_AccessHandlerCallback),
	 the argument to MHD_OPTION_CONNECTION_MEMORY_LIMIT,
	 the "block_size" argument (MHD_create_response_from_callback),
	 the "buffer_size" argument (MHD_create_post_processor) and
	 the "post_data_len" argument (MHD_post_process).  You may
	 need to #include <stdint.h> before <microhttpd.h> from now on. -CG

Thu Feb  5 20:21:08 MST 2009
	 Allow getting address information about the connecting
	 client after the accept call. -CG

Mon Feb  2 22:21:48 MST 2009
	 Fixed missing size adjustment for offsets for %-encoded
	 arguments processed by the post processor (Mantis #1447). -CG/SN

Fri Jan 23 16:57:21 MST 2009
	 Support charset specification (ignore) after content-type
	 when post-processing HTTP POST requests (Mantis #1443). -CG/SN

Fri Dec 26 23:08:04 MST 2008
	 Fixed broken check for identical connection address. -CG
	 Making cookie parser more RFC2109 compliant (handle
	 spaces around key, allow value to be optional). -CG

Sat Dec  6 18:36:17 MST 2008
	 Added configure option to disable checking for CURL support.
	 Added MHD_OPTION to allow specification of custom logger. -CG

Tue Nov 18 01:19:53 MST 2008
	 Removed support for untested and/or broken SSL features
	 and (largely useless) options. -CG

Sun Nov 16 16:54:54 MST 2008
	 Added option to get unparsed URI via callback.
	 Releasing GNU libmicrohttpd 0.4.0pre1. -CG

Sun Nov 16 02:48:14 MST 2008
	 Removed tons of dead code. -CG

Sat Nov 15 17:34:24 MST 2008
	 Added build support for code coverage analysis. -CG

Sat Nov 15 00:31:33 MST 2008
	 Removing (broken) support for HTTPS servers with
	 anonymous (aka "no") certificates as well as
	 various useless dead code. -CG

Sat Nov  8 02:18:42 MST 2008
	 Unset TCP_CORK at the end of transmitting a response
	 to improve performance (on systems where this is
	 supported). -MM

Tue Sep 30 16:48:08 MDT 2008
	 Make MHD useful to Cygwin users; detect IPv6 headers
	 in configure.

Sun Sep 28 14:57:46 MDT 2008
	 Unescape URIs (convert "%ef%e4%45" to "$BCf9q(B"). -CG

Wed Sep 10 22:43:59 MDT 2008
	 Releasing GNU libmicrohttpd 0.4.0pre0. -CG

Wed Sep 10 21:36:06 MDT 2008
	 Fixed data race on closing sockets during
	 shutdown (in one-thread-per-connection mode). -CG

Thu Sep  4 23:37:18 MDT 2008
	 Fixed some boundary issues with processing
	 chunked requests; removed memmove from a
	 number of spots, in favor of using an index into
	 the current buffer instead. -GS

Sun Aug 24 13:05:41 MDT 2008
	 Now handling clients returning 0 from response callback
	 as specified in the documentation (abort if internal
	 select is used, retry immediately if a thread per
	 connection is used). -CG

Sun Aug 24 12:44:43 MDT 2008
	 Added missing reason phrase. -SG

Sun Aug 24 10:33:22 MDT 2008
	 Fixed bug where MHD failed to transmit the response when
	 the client decided not to send "100 CONTINUE" during
	 a PUT/POST request. -CG

Wed Jul 16 18:54:03 MDT 2008
	 Fixed bug generating chunked responses with chunk sizes
	 greater than 0xFFFFFF (would cause protocol violations). -CG

Mon May 26 13:28:57 MDT 2008
	 Updated and improved documentation.
	 Releasing GNU libmicrohttpd 0.3.1. -CG

Fri May 23 16:54:41 MDT 2008
	 Fixed issue with postprocessor not handling URI-encoded
	 values of more than 1024 bytes correctly. -CG

Mon May  5 09:18:29 MDT 2008
	 Fixed date header (was off by 1900 years). -JP

Sun Apr 13 01:06:20 MDT 2008
	 Releasing GNU libmicrohttpd 0.3.0. -CG

Sat Apr 12 21:34:26 MDT 2008
	 Generate an internal server error if the programmer fails
	 to handle upload data correctly.  Tweaked testcases to
	 avoid running into the problem in the testcases.
	 Completed zzuf-based fuzzing testcases.  -CG

Sat Apr 12 15:14:05 MDT 2008
	 Restructured the code (curl-testcases and zzuf testcases
	 are now in different directories; code examples are in
	 src/examples/).
	 Fixed a problem (introduced in 0.2.3) with handling very
	 large requests (the code did not return proper error code).
	 If "--enable-messages" is specified, the code now includes
	 reasonable default HTML webpages for various build-in
	 errors (such as request too large and malformed requests).
	 Without that flag, the webpages returned will still be
	 empty.
	 Started to add zzuf-based fuzzing-testcases (these require
	 the zzuf and socat binaries to be installed). -CG

Fri Apr 11 20:20:34 MDT 2008
	 I hereby dub libmicrohttpd a GNU package. -Richard Stallman

Sat Mar 29 22:36:09 MDT 2008
	 Fixed bugs in handling of malformed HTTP requests
	 (causing either NULL dereferences or connections to
	 persist until time-out, if any). -CG

	 Updated and integrated TexInfo documentation. -CG

Tue Mar 25 13:40:53 MDT 2008
	 Prevent multi-part post-processor from going to error
	 state when the input buffer is full and current token
	 just changes processor state without consuming any data.
	 Also, the original implementation would not consume any
	 input in process_value_to_boundary if there is no new
	 line character in sight. -AS

	 Remove checks for request method after it finished writing
	 response footers as it's only _pipelined_ requests that
	 should not be allowed after POST or PUT requests.  Reusing
	 the existing connection is perfectly ok though.  And there
	 is no reliable way to detect pipelining on server side
	 anyway so it is the client's responsibility to not send new
	 data before it gets a response after a POST operation. -AS

	 Clarified license in man page. Releasing
         libmicrohttpd 0.2.3 -CG

Sat Mar 22 01:12:38 MDT 2008
	 Releasing libmicrohttpd 0.2.2. -CG

Mon Feb 25 19:13:53 MST 2008
	 Fixed a problem with sockets closed for reading ending up
	 in the read set under certain circumstances. -CG

Wed Jan 30 23:15:44 MST 2008
	 Added support for nested multiparts to post processor.
	 Made sure that MHD does not allow pipelining for methods
	 other than HEAD and GET (and of course still also only
	 allows it for http 1.1).  Releasing libmicrohttpd 0.2.1.  -CG

Mon Jan 21 11:59:46 MST 2008
	 Added option to limit number of concurrent connections
	 accepted from the same IP address. -CG

Fri Jan  4 16:02:08 MST 2008
	 Fix to properly close connection if application signals
	 problem handling the request. - AS

Wed Jan  2 16:41:05 MST 2008
	 Improvements and bugfixes to post processor implementation. - AS

Wed Dec 19 21:12:04 MST 2007
	 Implemented chunked (HTTP 1.1) downloads (including
	 sending of HTTP footers).  Also allowed queuing of
	 a response early to suppress the otherwise automatic
	 "100 CONTINUE" response.  Removed the mostly useless
	 "(un)register handler" methods from the API.  Changed
	 the internal implementation to use a finite state
	 machine (cleaner code, slightly less memory consumption).
	 Releasing libmicrohttpd 0.2.0. - CG

Sun Dec 16 03:24:13 MST 2007
	 Implemented handling of chunked (HTTP 1.1) uploads.
	 Note that the upload callback must be able to
	 process chunks in the size uploaded by the client,
	 MHD will not "join" small chunks into a big
	 contiguous block of memory (even if buffer space
	 would be available).  - CG

Wed Dec  5 21:39:35 MST 2007
	 Fixed race in multi-threaded server mode.
	 Fixed handling of POST data when receiving a
	 "Connection: close" header (#1296).
	 Releasing libmicrohttpd 0.1.2. - CG

Sat Nov 17 00:55:24 MST 2007
	 Fixed off-by-one in error message string matching.
	 Added code to avoid generating SIGPIPE on platforms
	 where this is possible (everywhere else, the main
	 application should install a handler for SIGPIPE).

Thu Oct 11 11:02:06 MDT 2007
	 Releasing libmicrohttpd 0.1.1. - CG

Thu Oct 11 10:09:12 MDT 2007
	 Fixing response to include HTTP status message. - EG

Thu Sep 27 10:19:46 MDT 2007
	 Fixing parsing of "%xx" in URLs with GET arguments. - eglaysher

Sun Sep  9 14:32:23 MDT 2007
	 Added option to compile debug/warning messages;
	 error messages are now disabled by default.
	 Modified linker option for GNU LD to not export
	 non-public symbols (further reduces binary size).
	 Releasing libmicrohttpd 0.1.0. - CG

Sat Sep  8 21:54:04 MDT 2007
	 Extended API to allow for incremental POST
	 processing.  The new API is binary-compatible
	 as long as the app does not handle POSTs, but
	 since that maybe the case, we're strictly speaking
	 breaking backwards compatibility (since url-encoded
	 POST data is no longer obtained the same way). - CG

Thu Aug 30 00:59:24 MDT 2007
	 Improving API to allow clients to associate state
         with a connection and to be notified about request
         termination (this is a binary-compatible change). - CG
	 Fixed compile errors under OS X. - HL

Sun Aug 26 03:11:46 MDT 2007
	 Added MHD_USE_PEDANTIC_CHECKS option which enforces
	 receiving a "Host:" header in HTTP 1.1 (and sends a
	 HTTP 400 status back if this is violated). - CG

Tue Aug 21 01:01:46 MDT 2007
	 Fixing assertion failure that occured when a client
	 closed the connection after sending some data but
	 not the full headers. - CG

Sat Aug 18 03:06:09 MDT 2007
	 Check for out of memory when adding headers to
	 responses.  Check for NULL key when looking
	 for headers.   If a content reader callback
	 for a response returns zero (has no data yet),
	 do not possibly fall into busy waiting when
	 using external select (with internal selects
	 we have no choice).  - CG

Wed Aug 15 01:46:44 MDT 2007
	 Extending API to allow timeout of connections.
	 Changed API (MHD_create_response_from_callback) to
	 allow user to specify IO buffer size.
	 Improved error handling.
         Released libmicrohttpd 0.0.3. - CG

Tue Aug 14 19:45:49 MDT 2007
	 Changed license to LGPL (with consent from all contributors).
         Released libmicrohttpd 0.0.2. - CG

Sun Aug 12 00:09:26 MDT 2007
	 Released libmicrohttpd 0.0.1. - CG

Fri Aug 10 17:31:23 MDT 2007
	 Fixed problems with handling of responses created from
	 callbacks.  Allowing accept policy callback to be NULL
	 (to accept from all).  Added minimal fileserver example.
	 Only send 100 continue header when specifically requested. - CG

Wed Aug  8 01:46:06 MDT 2007
	 Added pool allocation and connection limitations (total
	 number and memory size).  Released libmicrohttpd 0.0.0. - CG

Tue Jan  9 20:52:48 MST 2007
	 Created project build files and updated API. - CG

Added luasupport/HTTP/libmicrohttpd-0.9.0/INSTALL.



























































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
Installation Instructions
*************************

Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007, 2008, 2009 Free Software Foundation, Inc.

   Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.  This file is offered as-is,
without warranty of any kind.

Basic Installation
==================

   Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package.  The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package.  Some packages provide this
`INSTALL' file but do not implement all of the features documented
below.  The lack of an optional feature in a given package is not
necessarily a bug.  More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.

   The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation.  It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions.  Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').

   It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring.  Caching is
disabled by default to prevent problems with accidental use of stale
cache files.

   If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release.  If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.

   The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'.  You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.

   The simplest way to compile this package is:

  1. `cd' to the directory containing the package's source code and type
     `./configure' to configure the package for your system.

     Running `configure' might take a while.  While running, it prints
     some messages telling which features it is checking for.

  2. Type `make' to compile the package.

  3. Optionally, type `make check' to run any self-tests that come with
     the package, generally using the just-built uninstalled binaries.

  4. Type `make install' to install the programs and any data files and
     documentation.  When installing into a prefix owned by root, it is
     recommended that the package be configured and built as a regular
     user, and only the `make install' phase executed with root
     privileges.

  5. Optionally, type `make installcheck' to repeat any self-tests, but
     this time using the binaries in their final installed location.
     This target does not install anything.  Running this target as a
     regular user, particularly if the prior `make install' required
     root privileges, verifies that the installation completed
     correctly.

  6. You can remove the program binaries and object files from the
     source code directory by typing `make clean'.  To also remove the
     files that `configure' created (so you can compile the package for
     a different kind of computer), type `make distclean'.  There is
     also a `make maintainer-clean' target, but that is intended mainly
     for the package's developers.  If you use it, you may have to get
     all sorts of other programs in order to regenerate files that came
     with the distribution.

  7. Often, you can also type `make uninstall' to remove the installed
     files again.  In practice, not all packages have tested that
     uninstallation works correctly, even though it is required by the
     GNU Coding Standards.

  8. Some packages, particularly those that use Automake, provide `make
     distcheck', which can by used by developers to test that all other
     targets like `make install' and `make uninstall' work correctly.
     This target is generally not run by end users.

Compilers and Options
=====================

   Some systems require unusual options for compilation or linking that
the `configure' script does not know about.  Run `./configure --help'
for details on some of the pertinent environment variables.

   You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment.  Here
is an example:

     ./configure CC=c99 CFLAGS=-g LIBS=-lposix

   *Note Defining Variables::, for more details.

Compiling For Multiple Architectures
====================================

   You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory.  To do this, you can use GNU `make'.  `cd' to the
directory where you want the object files and executables to go and run
the `configure' script.  `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.  This
is known as a "VPATH" build.

   With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory.  After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.

   On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor.  Like
this:

     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                 CPP="gcc -E" CXXCPP="g++ -E"

   This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.

Installation Names
==================

   By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc.  You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.

   You can specify separate installation prefixes for
architecture-specific files and architecture-independent files.  If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.

   In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files.  Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.  In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.

   The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.

   The first method involves providing an override variable for each
affected directory.  For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'.  Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated.  The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.

   The second method involves providing the `DESTDIR' variable.  For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names.  The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters.  On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.

Optional Features
=================

   If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.

   Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System).  The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.

   For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.

   Some packages offer the ability to configure how verbose the
execution of `make' will be.  For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.

Particular systems
==================

   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:

     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"

and if that doesn't work, install pre-built binaries of GCC for HP-UX.

   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
a workaround.  If GNU CC is not installed, it is therefore recommended
to try

     ./configure CC="cc"

and if that doesn't work, try

     ./configure CC="cc -nodtk"

   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.

   On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'.  It is recommended to use the following options:

     ./configure --prefix=/boot/common

Specifying the System Type
==========================

   There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on.  Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option.  TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:

     CPU-COMPANY-SYSTEM

where SYSTEM can have one of these forms:

     OS
     KERNEL-OS

   See the file `config.sub' for the possible values of each field.  If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.

   If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.

   If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.

Sharing Defaults
================

   If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists.  Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.

Defining Variables
==================

   Variables not defined in a site shell script can be set in the
environment passed to `configure'.  However, some packages may run
configure again during the build, and the customized values of these
variables may be lost.  In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'.  For example:

     ./configure CC=/usr/local2/bin/gcc

causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).

Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf bug.  Until the bug is fixed you can use this workaround:

     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash

`configure' Invocation
======================

   `configure' recognizes the following options to control how it
operates.

`--help'
`-h'
     Print a summary of all of the options to `configure', and exit.

`--help=short'
`--help=recursive'
     Print a summary of the options unique to this package's
     `configure', and exit.  The `short' variant lists options used
     only in the top level, while the `recursive' variant lists options
     also present in any nested packages.

`--version'
`-V'
     Print the version of Autoconf used to generate the `configure'
     script, and exit.

`--cache-file=FILE'
     Enable the cache: use and save the results of the tests in FILE,
     traditionally `config.cache'.  FILE defaults to `/dev/null' to
     disable caching.

`--config-cache'
`-C'
     Alias for `--cache-file=config.cache'.

`--quiet'
`--silent'
`-q'
     Do not print messages saying which checks are being made.  To
     suppress all normal output, redirect it to `/dev/null' (any error
     messages will still be shown).

`--srcdir=DIR'
     Look for the package's source code in directory DIR.  Usually
     `configure' can determine that directory automatically.

`--prefix=DIR'
     Use DIR as the installation prefix.  *note Installation Names::
     for more details, including other options available for fine-tuning
     the installation locations.

`--no-create'
`-n'
     Run the configure checks, but stop before creating any output
     files.

`configure' also accepts some other, not widely useful, options.  Run
`configure --help' for more details.

Added luasupport/HTTP/libmicrohttpd-0.9.0/MHD_config.h.















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
/* MHD_config.h.  Generated from MHD_config.h.in by configure.  */
/* MHD_config.h.in.  Generated from configure.ac by autoheader.  */

#define _GNU_SOURCE  1

/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */

/* This is a Cygwin system */
/* #undef CYGWIN */

/* This is a FreeBSD system */
/* #undef FREEBSD */

/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1

/* Define to 1 if you have the declaration of `TCP_CORK', and to 0 if you
   don't. */
#define HAVE_DECL_TCP_CORK 0

/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1

/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#define HAVE_FSEEKO 1

/* We have gnutls */
#define HAVE_GNUTLS 0

/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
/* #undef HAVE_GNUTLS_GNUTLS_H */

/* Provides IPv6 headers */
#define HAVE_INET6 1

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if you have a functional curl library. */
#define HAVE_LIBCURL 1

/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1

/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1

/* Define to 1 if you have the <math.h> header file. */
#define HAVE_MATH_H 1

/* Define to 1 if you have the `memmem' function. */
/* #undef HAVE_MEMMEM */

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Include error messages */
/* #undef HAVE_MESSAGES */

/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1

/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1

/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1

/* Define to 1 if you have the <poll.h> header file. */
#define HAVE_POLL_H 1

/* Define to 1 if you have the <pthread.h> header file. */
#define HAVE_PTHREAD_H 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the <sys/mman.h> header file. */
#define HAVE_SYS_MMAN_H 1

/* Define to 1 if you have the <sys/msg.h> header file. */
#define HAVE_SYS_MSG_H 1

/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1

/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1

/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1

/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1

/* disable HTTPS support */
#define HTTPS_SUPPORT 0

/* Defined if libcurl supports AsynchDNS */
/* #undef LIBCURL_FEATURE_ASYNCHDNS */

/* Defined if libcurl supports IDN */
/* #undef LIBCURL_FEATURE_IDN */

/* Defined if libcurl supports IPv6 */
#define LIBCURL_FEATURE_IPV6 1

/* Defined if libcurl supports KRB4 */
/* #undef LIBCURL_FEATURE_KRB4 */

/* Defined if libcurl supports libz */
#define LIBCURL_FEATURE_LIBZ 1

/* Defined if libcurl supports NTLM */
#define LIBCURL_FEATURE_NTLM 1

/* Defined if libcurl supports SSL */
#define LIBCURL_FEATURE_SSL 1

/* Defined if libcurl supports SSPI */
/* #undef LIBCURL_FEATURE_SSPI */

/* Defined if libcurl supports DICT */
#define LIBCURL_PROTOCOL_DICT 1

/* Defined if libcurl supports FILE */
#define LIBCURL_PROTOCOL_FILE 1

/* Defined if libcurl supports FTP */
#define LIBCURL_PROTOCOL_FTP 1

/* Defined if libcurl supports FTPS */
#define LIBCURL_PROTOCOL_FTPS 1

/* Defined if libcurl supports HTTP */
#define LIBCURL_PROTOCOL_HTTP 1

/* Defined if libcurl supports HTTPS */
#define LIBCURL_PROTOCOL_HTTPS 1

/* Defined if libcurl supports LDAP */
#define LIBCURL_PROTOCOL_LDAP 1

/* Defined if libcurl supports TELNET */
#define LIBCURL_PROTOCOL_TELNET 1

/* Defined if libcurl supports TFTP */
#define LIBCURL_PROTOCOL_TFTP 1

/* This is a Linux system */
/* #undef LINUX */

/* Define to the sub-directory in which libtool stores uninstalled libraries.
   */
#define LT_OBJDIR ".libs/"

/* gcrypt lib version */
#define MHD_GCRYPT_VERSION "1:1.2.2"

/* gnuTLS lib version - used in conjunction with cURL */
#define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"

/* required cURL SSL version to run tests */
#define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"

/* required cURL version to run tests */
#define MHD_REQ_CURL_VERSION "7.16.4"

/* This is a MinGW system */
/* #undef MINGW */

/* This is a NetBSD system */
/* #undef NETBSD */

/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */

/* This is an OpenBSD system */
/* #undef OPENBSD */

/* This is a OS/390 system */
/* #undef OS390 */

/* This is an OS X system */
#define OSX 1

/* Some strange OS */
/* #undef OTHEROS */

/* Name of package */
#define PACKAGE "libmicrohttpd"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"

/* Define to the full name of this package. */
#define PACKAGE_NAME "libmicrohttpd"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "libmicrohttpd 0.9.0"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libmicrohttpd"

/* Define to the home page for this package. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.9.0"

/* This is a Solaris system */
/* #undef SOLARIS */

/* This is a BSD system */
/* #undef SOMEBSD */

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Version number of package */
#define VERSION "0.9.0"

/* This is a Windows system */
/* #undef WINDOWS */

/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
   significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
#  define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
#  define WORDS_BIGENDIAN 1
# endif
#endif

/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */

/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
/* #undef _LARGEFILE_SOURCE */

/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */

/* Need with solaris or errno doesnt work */
/* #undef _REENTRANT */

/* Define curl_free() as free() if our version of curl lacks curl_free. */
/* #undef curl_free */

Added luasupport/HTTP/libmicrohttpd-0.9.0/MHD_config.h.in.













































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
/* MHD_config.h.in.  Generated from configure.ac by autoheader.  */

#define _GNU_SOURCE  1

/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD

/* This is a Cygwin system */
#undef CYGWIN

/* This is a FreeBSD system */
#undef FREEBSD

/* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H

/* Define to 1 if you have the declaration of `TCP_CORK', and to 0 if you
   don't. */
#undef HAVE_DECL_TCP_CORK

/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H

/* Define to 1 if you have the <errno.h> header file. */
#undef HAVE_ERRNO_H

/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H

/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#undef HAVE_FSEEKO

/* We have gnutls */
#undef HAVE_GNUTLS

/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
#undef HAVE_GNUTLS_GNUTLS_H

/* Provides IPv6 headers */
#undef HAVE_INET6

/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H

/* Define to 1 if you have a functional curl library. */
#undef HAVE_LIBCURL

/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H

/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H

/* Define to 1 if you have the <math.h> header file. */
#undef HAVE_MATH_H

/* Define to 1 if you have the `memmem' function. */
#undef HAVE_MEMMEM

/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H

/* Include error messages */
#undef HAVE_MESSAGES

/* Define to 1 if you have the <netdb.h> header file. */
#undef HAVE_NETDB_H

/* Define to 1 if you have the <netinet/in.h> header file. */
#undef HAVE_NETINET_IN_H

/* Define to 1 if you have the <netinet/tcp.h> header file. */
#undef HAVE_NETINET_TCP_H

/* Define to 1 if you have the <poll.h> header file. */
#undef HAVE_POLL_H

/* Define to 1 if you have the <pthread.h> header file. */
#undef HAVE_PTHREAD_H

/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H

/* Define to 1 if you have the <stdio.h> header file. */
#undef HAVE_STDIO_H

/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H

/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H

/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H

/* Define to 1 if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H

/* Define to 1 if you have the <sys/msg.h> header file. */
#undef HAVE_SYS_MSG_H

/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H

/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H

/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H

/* Define to 1 if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H

/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H

/* Define to 1 if you have the <time.h> header file. */
#undef HAVE_TIME_H

/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H

/* disable HTTPS support */
#undef HTTPS_SUPPORT

/* Defined if libcurl supports AsynchDNS */
#undef LIBCURL_FEATURE_ASYNCHDNS

/* Defined if libcurl supports IDN */
#undef LIBCURL_FEATURE_IDN

/* Defined if libcurl supports IPv6 */
#undef LIBCURL_FEATURE_IPV6

/* Defined if libcurl supports KRB4 */
#undef LIBCURL_FEATURE_KRB4

/* Defined if libcurl supports libz */
#undef LIBCURL_FEATURE_LIBZ

/* Defined if libcurl supports NTLM */
#undef LIBCURL_FEATURE_NTLM

/* Defined if libcurl supports SSL */
#undef LIBCURL_FEATURE_SSL

/* Defined if libcurl supports SSPI */
#undef LIBCURL_FEATURE_SSPI

/* Defined if libcurl supports DICT */
#undef LIBCURL_PROTOCOL_DICT

/* Defined if libcurl supports FILE */
#undef LIBCURL_PROTOCOL_FILE

/* Defined if libcurl supports FTP */
#undef LIBCURL_PROTOCOL_FTP

/* Defined if libcurl supports FTPS */
#undef LIBCURL_PROTOCOL_FTPS

/* Defined if libcurl supports HTTP */
#undef LIBCURL_PROTOCOL_HTTP

/* Defined if libcurl supports HTTPS */
#undef LIBCURL_PROTOCOL_HTTPS

/* Defined if libcurl supports LDAP */
#undef LIBCURL_PROTOCOL_LDAP

/* Defined if libcurl supports TELNET */
#undef LIBCURL_PROTOCOL_TELNET

/* Defined if libcurl supports TFTP */
#undef LIBCURL_PROTOCOL_TFTP

/* This is a Linux system */
#undef LINUX

/* Define to the sub-directory in which libtool stores uninstalled libraries.
   */
#undef LT_OBJDIR

/* gcrypt lib version */
#undef MHD_GCRYPT_VERSION

/* gnuTLS lib version - used in conjunction with cURL */
#undef MHD_REQ_CURL_GNUTLS_VERSION

/* required cURL SSL version to run tests */
#undef MHD_REQ_CURL_OPENSSL_VERSION

/* required cURL version to run tests */
#undef MHD_REQ_CURL_VERSION

/* This is a MinGW system */
#undef MINGW

/* This is a NetBSD system */
#undef NETBSD

/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O

/* This is an OpenBSD system */
#undef OPENBSD

/* This is a OS/390 system */
#undef OS390

/* This is an OS X system */
#undef OSX

/* Some strange OS */
#undef OTHEROS

/* Name of package */
#undef PACKAGE

/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT

/* Define to the full name of this package. */
#undef PACKAGE_NAME

/* Define to the full name and version of this package. */
#undef PACKAGE_STRING

/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME

/* Define to the home page for this package. */
#undef PACKAGE_URL

/* Define to the version of this package. */
#undef PACKAGE_VERSION

/* This is a Solaris system */
#undef SOLARIS

/* This is a BSD system */
#undef SOMEBSD

/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS

/* Version number of package */
#undef VERSION

/* This is a Windows system */
#undef WINDOWS

/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
   significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
#  define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
#  undef WORDS_BIGENDIAN
# endif
#endif

/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS

/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
#undef _LARGEFILE_SOURCE

/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES

/* Need with solaris or errno doesnt work */
#undef _REENTRANT

/* Define curl_free() as free() if our version of curl lacks curl_free. */
#undef curl_free

Added luasupport/HTTP/libmicrohttpd-0.9.0/Makefile.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.




pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/MHD_config.h.in \
	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
	$(srcdir)/libmicrohttpd.pc.in $(top_srcdir)/configure AUTHORS \
	COPYING ChangeLog INSTALL NEWS compile config.guess config.sub \
	depcomp install-sh ltmain.sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
 configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = MHD_config.h
CONFIG_CLEAN_FILES = libmicrohttpd.pc
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
DATA = $(pkgconfig_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
  { test ! -d "$(distdir)" \
    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
         && rm -fr "$(distdir)"; }; }
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = 
top_builddir = .
top_srcdir = .
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = contrib src doc m4 . 
EXTRA_DIST = acinclude.m4 libmicrohttpd.pc.in
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmicrohttpd.pc
all: MHD_config.h
	$(MAKE) $(AM_MAKEFLAGS) all-recursive

.SUFFIXES:
am--refresh:
	@:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
		&& exit 0; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    echo ' $(SHELL) ./config.status'; \
	    $(SHELL) ./config.status;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	$(SHELL) ./config.status --recheck

$(top_srcdir)/configure:  $(am__configure_deps)
	$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):

MHD_config.h: stamp-h1
	@if test ! -f $@; then \
	  rm -f stamp-h1; \
	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
	else :; fi

stamp-h1: $(srcdir)/MHD_config.h.in $(top_builddir)/config.status
	@rm -f stamp-h1
	cd $(top_builddir) && $(SHELL) ./config.status MHD_config.h
$(srcdir)/MHD_config.h.in:  $(am__configure_deps) 
	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
	rm -f stamp-h1
	touch $@

distclean-hdr:
	-rm -f MHD_config.h stamp-h1
libmicrohttpd.pc: $(top_builddir)/config.status $(srcdir)/libmicrohttpd.pc.in
	cd $(top_builddir) && $(SHELL) ./config.status $@

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

distclean-libtool:
	-rm -f libtool config.lt
install-pkgconfigDATA: $(pkgconfig_DATA)
	@$(NORMAL_INSTALL)
	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
	done

uninstall-pkgconfigDATA:
	@$(NORMAL_UNINSTALL)
	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
	test -n "$$files" || exit 0; \
	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES) MHD_config.h.in $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS) MHD_config.h.in $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) MHD_config.h.in $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS) MHD_config.h.in $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	$(am__remove_distdir)
	test -d "$(distdir)" || mkdir "$(distdir)"
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
	-test -n "$(am__skip_mode_fix)" \
	|| find "$(distdir)" -type d ! -perm -755 \
		-exec chmod u+rwx,go+rx {} \; -o \
	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
	|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
	$(am__remove_distdir)

dist-bzip2: distdir
	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
	$(am__remove_distdir)

dist-lzma: distdir
	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
	$(am__remove_distdir)

dist-xz: distdir
	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
	$(am__remove_distdir)

dist-tarZ: distdir
	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
	$(am__remove_distdir)

dist-shar: distdir
	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
	$(am__remove_distdir)

dist-zip: distdir
	-rm -f $(distdir).zip
	zip -rq $(distdir).zip $(distdir)
	$(am__remove_distdir)

dist dist-all: distdir
	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
	$(am__remove_distdir)

# This target untars the dist file and tries a VPATH configuration.  Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
	case '$(DIST_ARCHIVES)' in \
	*.tar.gz*) \
	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
	*.tar.bz2*) \
	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
	*.tar.lzma*) \
	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
	*.tar.xz*) \
	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
	*.tar.Z*) \
	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
	*.shar.gz*) \
	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
	*.zip*) \
	  unzip $(distdir).zip ;;\
	esac
	chmod -R a-w $(distdir); chmod a+w $(distdir)
	mkdir $(distdir)/_build
	mkdir $(distdir)/_inst
	chmod a-w $(distdir)
	test -d $(distdir)/_build || exit 0; \
	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
	  && am__cwd=`pwd` \
	  && $(am__cd) $(distdir)/_build \
	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
	    $(DISTCHECK_CONFIGURE_FLAGS) \
	  && $(MAKE) $(AM_MAKEFLAGS) \
	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
	  && $(MAKE) $(AM_MAKEFLAGS) check \
	  && $(MAKE) $(AM_MAKEFLAGS) install \
	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
	        distuninstallcheck \
	  && chmod -R a-w "$$dc_install_base" \
	  && ({ \
	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
	  && rm -rf "$$dc_destdir" \
	  && $(MAKE) $(AM_MAKEFLAGS) dist \
	  && rm -rf $(DIST_ARCHIVES) \
	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
	  && cd "$$am__cwd" \
	  || exit 1
	$(am__remove_distdir)
	@(echo "$(distdir) archives ready for distribution: "; \
	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
	@$(am__cd) '$(distuninstallcheck_dir)' \
	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
	   || { echo "ERROR: files left after uninstall:" ; \
	        if test -n "$(DESTDIR)"; then \
	          echo "  (check DESTDIR support)"; \
	        fi ; \
	        $(distuninstallcheck_listfiles) ; \
	        exit 1; } >&2
distcleancheck: distclean
	@if test '$(srcdir)' = . ; then \
	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
	  exit 1 ; \
	fi
	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
	  || { echo "ERROR: files left in build directory after distclean:" ; \
	       $(distcleancheck_listfiles) ; \
	       exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA) MHD_config.h
installdirs: installdirs-recursive
installdirs-am:
	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
	distclean-libtool distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am: install-pkgconfigDATA

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
	-rm -rf $(top_srcdir)/autom4te.cache
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am: uninstall-pkgconfigDATA

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am am--refresh check check-am clean clean-generic \
	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
	dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
	distcheck distclean distclean-generic distclean-hdr \
	distclean-libtool distclean-tags distcleancheck distdir \
	distuninstallcheck dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am uninstall-pkgconfigDATA


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/Makefile.am.















>
>
>
>
>
>
>
1
2
3
4
5
6
7
ACLOCAL_AMFLAGS = -I m4
SUBDIRS  = contrib src doc m4 . 
EXTRA_DIST = acinclude.m4 libmicrohttpd.pc.in

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmicrohttpd.pc

Added luasupport/HTTP/libmicrohttpd-0.9.0/Makefile.in.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/MHD_config.h.in \
	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
	$(srcdir)/libmicrohttpd.pc.in $(top_srcdir)/configure AUTHORS \
	COPYING ChangeLog INSTALL NEWS compile config.guess config.sub \
	depcomp install-sh ltmain.sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
 configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = MHD_config.h
CONFIG_CLEAN_FILES = libmicrohttpd.pc
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
DATA = $(pkgconfig_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir dist dist-all distcheck
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
  { test ! -d "$(distdir)" \
    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
         && rm -fr "$(distdir)"; }; }
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = contrib src doc m4 . 
EXTRA_DIST = acinclude.m4 libmicrohttpd.pc.in
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libmicrohttpd.pc
all: MHD_config.h
	$(MAKE) $(AM_MAKEFLAGS) all-recursive

.SUFFIXES:
am--refresh:
	@:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
		&& exit 0; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    echo ' $(SHELL) ./config.status'; \
	    $(SHELL) ./config.status;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	$(SHELL) ./config.status --recheck

$(top_srcdir)/configure:  $(am__configure_deps)
	$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):

MHD_config.h: stamp-h1
	@if test ! -f $@; then \
	  rm -f stamp-h1; \
	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
	else :; fi

stamp-h1: $(srcdir)/MHD_config.h.in $(top_builddir)/config.status
	@rm -f stamp-h1
	cd $(top_builddir) && $(SHELL) ./config.status MHD_config.h
$(srcdir)/MHD_config.h.in:  $(am__configure_deps) 
	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
	rm -f stamp-h1
	touch $@

distclean-hdr:
	-rm -f MHD_config.h stamp-h1
libmicrohttpd.pc: $(top_builddir)/config.status $(srcdir)/libmicrohttpd.pc.in
	cd $(top_builddir) && $(SHELL) ./config.status $@

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

distclean-libtool:
	-rm -f libtool config.lt
install-pkgconfigDATA: $(pkgconfig_DATA)
	@$(NORMAL_INSTALL)
	test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
	done

uninstall-pkgconfigDATA:
	@$(NORMAL_UNINSTALL)
	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
	test -n "$$files" || exit 0; \
	echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
	cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES) MHD_config.h.in $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS) MHD_config.h.in $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) MHD_config.h.in $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS) MHD_config.h.in $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	$(am__remove_distdir)
	test -d "$(distdir)" || mkdir "$(distdir)"
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
	-test -n "$(am__skip_mode_fix)" \
	|| find "$(distdir)" -type d ! -perm -755 \
		-exec chmod u+rwx,go+rx {} \; -o \
	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
	|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
	$(am__remove_distdir)

dist-bzip2: distdir
	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
	$(am__remove_distdir)

dist-lzma: distdir
	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
	$(am__remove_distdir)

dist-xz: distdir
	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
	$(am__remove_distdir)

dist-tarZ: distdir
	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
	$(am__remove_distdir)

dist-shar: distdir
	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
	$(am__remove_distdir)

dist-zip: distdir
	-rm -f $(distdir).zip
	zip -rq $(distdir).zip $(distdir)
	$(am__remove_distdir)

dist dist-all: distdir
	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
	$(am__remove_distdir)

# This target untars the dist file and tries a VPATH configuration.  Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
	case '$(DIST_ARCHIVES)' in \
	*.tar.gz*) \
	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
	*.tar.bz2*) \
	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
	*.tar.lzma*) \
	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
	*.tar.xz*) \
	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
	*.tar.Z*) \
	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
	*.shar.gz*) \
	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
	*.zip*) \
	  unzip $(distdir).zip ;;\
	esac
	chmod -R a-w $(distdir); chmod a+w $(distdir)
	mkdir $(distdir)/_build
	mkdir $(distdir)/_inst
	chmod a-w $(distdir)
	test -d $(distdir)/_build || exit 0; \
	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
	  && am__cwd=`pwd` \
	  && $(am__cd) $(distdir)/_build \
	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
	    $(DISTCHECK_CONFIGURE_FLAGS) \
	  && $(MAKE) $(AM_MAKEFLAGS) \
	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
	  && $(MAKE) $(AM_MAKEFLAGS) check \
	  && $(MAKE) $(AM_MAKEFLAGS) install \
	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
	        distuninstallcheck \
	  && chmod -R a-w "$$dc_install_base" \
	  && ({ \
	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
	  && rm -rf "$$dc_destdir" \
	  && $(MAKE) $(AM_MAKEFLAGS) dist \
	  && rm -rf $(DIST_ARCHIVES) \
	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
	  && cd "$$am__cwd" \
	  || exit 1
	$(am__remove_distdir)
	@(echo "$(distdir) archives ready for distribution: "; \
	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
	@$(am__cd) '$(distuninstallcheck_dir)' \
	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
	   || { echo "ERROR: files left after uninstall:" ; \
	        if test -n "$(DESTDIR)"; then \
	          echo "  (check DESTDIR support)"; \
	        fi ; \
	        $(distuninstallcheck_listfiles) ; \
	        exit 1; } >&2
distcleancheck: distclean
	@if test '$(srcdir)' = . ; then \
	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
	  exit 1 ; \
	fi
	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
	  || { echo "ERROR: files left in build directory after distclean:" ; \
	       $(distcleancheck_listfiles) ; \
	       exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA) MHD_config.h
installdirs: installdirs-recursive
installdirs-am:
	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
	distclean-libtool distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am: install-pkgconfigDATA

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
	-rm -rf $(top_srcdir)/autom4te.cache
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am: uninstall-pkgconfigDATA

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am am--refresh check check-am clean clean-generic \
	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
	dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
	distcheck distclean distclean-generic distclean-hdr \
	distclean-libtool distclean-tags distcleancheck distdir \
	distuninstallcheck dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am uninstall-pkgconfigDATA


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/NEWS.





>
>
1
2
Tue Jan  9 20:52:48 MST 2007
	Project posted.

Added luasupport/HTTP/libmicrohttpd-0.9.0/README.





















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
About
=====

libmicrohttpd is a GNU library (part of the GNU project) written in C
that provides a compact API and implementation of an HTTP 1.1 web
server (HTTP 1.0 is also supported).  libmicrohttpd only implements
the HTTP 1.1 protocol.  The main application must still provide the
content.


Installation
============

If you are using Subversion, run "autoreconf -fi" to create configure.

In order to run the testcases, you need a recent version of libcurl.
libcurl is not required if you just want to install the library.


Configure options
=================

Especially for development, use "--enable-messages" to enable error
reporting (and use MHD_USE_DEBUG).  Error reporting is not enabled by
default to reduce the size of the library (error messages take
space!).  If you are concerned about space, you should set "CFLAGS" to
"-Os -fomit-frame-pointer" to have gcc generate tight code.  The
resulting binary should be about 30k (without SSL support) depending 
on the platform.


Portability
===========

The latest version of libmicrohttpd will try to avoid SIGPIPE on its
sockets.  This should work on OS X, Linux and recent BSD systems (at
least).  On other systems that may trigger a SIGPIPE on send/recv, the
main application should install a signal handler to handle SIGPIPE.

libmicrohttpd should work well on GNU/Linux, BSD, OS X, W32 and z/OS.
Note that HTTPS is not supported on z/OS (yet).  We also have reports
of users using it on vxWorks and Symbian.  Note that on platforms
where the compiler does not support the "constructor" attribute, you
must call "MHD_init" before using any MHD functions and "MHD_fini"
after you are done using MHD.


Notes on compiling on z/OS:
---------------------------

After extracting the archive, run

iconv -f UTF-8 -t IBM-1047 contrib/ascebc > /tmp/ascebc.sh
chmod +x /tmp/ascebc.sh
for n in `find * -type f`
do
  /tmp/ascebc.sh $n
done

to convert all source files to EBCDIC.  Note that you must run
"configure" from the directory where the configure script is
located.   Otherwise, configure will fail to find the
"contrib/xcc" script (which is a wrapper around the z/OS c89
compiler).


Development Status
==================

This is a beta release.  Below we list things that should be
implemented (in order of importance) before we can claim to be
reasonably complete.


Untested features:
==================
- add testcases for http/1.1 pipelining (need
  to figure out how to ensure curl pipelines 
  -- and it seems libcurl has issues with pipelining, 
  see http://curl.haxx.se/mail/lib-2007-12/0248.html)
- add testcases for resource limit enforcement
- add testcases for client queuing early response,
  suppressing 100 CONTINUE
- extend testcase for chunked encoding to validate
  handling of footers
- more testing for SSL support


Functions not covered by "make check":
======================================
- MHD_get_connection_values
- MHD_set_connection_value
- parse_cookie_header
- parse_arguments
- MHD_del_response_header 
- MHD_get_response_headers
- MHD_tls_connection_close


Missing documentation:
======================

- manual:
  * document configuration options
  * document details on porting MHD (plibc, z/OS)

Added luasupport/HTTP/libmicrohttpd-0.9.0/acinclude.m4.























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# See: http://gcc.gnu.org/ml/gcc/2000-05/msg01141.html
AC_DEFUN([CHECK_PTHREAD],
[
        # first try without -pthread
        AC_TRY_LINK(
		[
			#include <pthread.h>
		],[
			pthread_create(0,0,0,0);
		],[
			AC_MSG_RESULT(yes)
			PTHREAD_CPPFLAGS=
			PTHREAD_LDFLAGS=
			PTHREAD_LIBS=
		],[
        # now with -pthread        
	AC_CHECK_LIB(pthread,pthread_create,
	[
		PTHREAD_CPPFLAGS=
		PTHREAD_LDFLAGS=
		PTHREAD_LIBS=-lpthread
	],[
		AC_MSG_CHECKING(if compiler supports -pthread)
		save_CPPFLAGS="$CPPFLAGS"
		CPPFLAGS="$CPPFLAGS -pthread"
		AC_TRY_LINK(
		[
			#include <pthread.h>
		],[
			pthread_create(0,0,0,0);
		],[
			AC_MSG_RESULT(yes)
			PTHREAD_CPPFLAGS=-pthread
			PTHREAD_LDFLAGS=-pthread
			PTHREAD_LIBS=
		],[
			AC_MSG_RESULT(no)
			AC_MSG_CHECKING(if compiler supports -pthreads)
			save_CPPFLAGS="$CPPFLAGS"
			CPPFLAGS="$save_CPPFLAGS -pthreads"
			AC_TRY_LINK(
			[
				#include <pthread.h>
			],[
				pthread_create(0,0,0,0);
			],[
				AC_MSG_RESULT(yes)
				PTHREAD_CPPFLAGS=-pthreads
				PTHREAD_LDFLAGS=-pthreads
				PTHREAD_LIBS=
			],[
				AC_MSG_RESULT(no)
				AC_MSG_CHECKING(if compiler supports -threads)
				save_CPPFLAGS="$CPPFLAGS"
				CPPFLAGS="$save_CPPFLAGS -threads"
				AC_TRY_LINK(
				[
					#include <pthread.h>
				],[
					pthread_create(0,0,0,0);
				],[
					AC_MSG_RESULT(yes)
					PTHREAD_CPPFLAGS=-threads
					PTHREAD_LDFLAGS=-threads
					PTHREAD_LIBS=
				],[
					AC_MSG_ERROR([Your system is not supporting pthreads!])
				])
			])
		])
		CPPFLAGS="$save_CPPFLAGS"
	])
         
        ])
])

Added luasupport/HTTP/libmicrohttpd-0.9.0/aclocal.m4.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
# generated automatically by aclocal 1.11.1 -*- Autoconf -*-

# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

m4_ifndef([AC_AUTOCONF_VERSION],
  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
[m4_warning([this file was generated for autoconf 2.65.
You have another version of autoconf.  It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.])])

# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.11'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version.  Point them to the right macro.
m4_if([$1], [1.11.1], [],
      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])

# _AM_AUTOCONF_VERSION(VERSION)
# -----------------------------
# aclocal traces this macro to find the Autoconf version.
# This is a private macro too.  Using m4_define simplifies
# the logic in aclocal, which can simply ignore this definition.
m4_define([_AM_AUTOCONF_VERSION], [])

# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.11.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])

# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-

# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory.  The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run.  This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
#    fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
#    fails if $ac_aux_dir is absolute,
#    fails when called from a subdirectory in a VPATH build with
#          a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir.  In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
#   MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH.  The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.

AC_DEFUN([AM_AUX_DIR_EXPAND],
[dnl Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])dnl
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])

# AM_CONDITIONAL                                            -*- Autoconf -*-

# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 9

# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_PREREQ(2.52)dnl
 ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
m4_define([_AM_COND_VALUE_$1], [$2])dnl
if $2; then
  $1_TRUE=
  $1_FALSE='#'
else
  $1_TRUE='#'
  $1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
  AC_MSG_ERROR([[conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.]])
fi])])

# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 10

# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery.  Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...


# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "GCJ", or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl

ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
                   [depcc="$$1"   am_compiler_list=])

AC_CACHE_CHECK([dependency style of $depcc],
               [am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
  # We make a subdir and do the tests there.  Otherwise we can end up
  # making bogus files that we don't know about and never remove.  For
  # instance it was reported that on HP-UX the gcc test will end up
  # making a dummy file named `D' -- because `-MD' means `put the output
  # in D'.
  mkdir conftest.dir
  # Copy depcomp to subdir because otherwise we won't find it if we're
  # using a relative directory.
  cp "$am_depcomp" conftest.dir
  cd conftest.dir
  # We will build objects and dependencies in a subdirectory because
  # it helps to detect inapplicable dependency modes.  For instance
  # both Tru64's cc and ICC support -MD to output dependencies as a
  # side effect of compilation, but ICC will put the dependencies in
  # the current directory while Tru64 will put them in the object
  # directory.
  mkdir sub

  am_cv_$1_dependencies_compiler_type=none
  if test "$am_compiler_list" = ""; then
     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
  fi
  am__universal=false
  m4_case([$1], [CC],
    [case " $depcc " in #(
     *\ -arch\ *\ -arch\ *) am__universal=true ;;
     esac],
    [CXX],
    [case " $depcc " in #(
     *\ -arch\ *\ -arch\ *) am__universal=true ;;
     esac])

  for depmode in $am_compiler_list; do
    # Setup a source with many dependencies, because some compilers
    # like to wrap large dependency lists on column 80 (with \), and
    # we should not choose a depcomp mode which is confused by this.
    #
    # We need to recreate these files for each test, as the compiler may
    # overwrite some of them when testing with obscure command lines.
    # This happens at least with the AIX C compiler.
    : > sub/conftest.c
    for i in 1 2 3 4 5 6; do
      echo '#include "conftst'$i'.h"' >> sub/conftest.c
      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
      # Solaris 8's {/usr,}/bin/sh.
      touch sub/conftst$i.h
    done
    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf

    # We check with `-c' and `-o' for the sake of the "dashmstdout"
    # mode.  It turns out that the SunPro C++ compiler does not properly
    # handle `-M -o', and we need to detect this.  Also, some Intel
    # versions had trouble with output in subdirs
    am__obj=sub/conftest.${OBJEXT-o}
    am__minus_obj="-o $am__obj"
    case $depmode in
    gcc)
      # This depmode causes a compiler race in universal mode.
      test "$am__universal" = false || continue
      ;;
    nosideeffect)
      # after this tag, mechanisms are not by side-effect, so they'll
      # only be used when explicitly requested
      if test "x$enable_dependency_tracking" = xyes; then
	continue
      else
	break
      fi
      ;;
    msvisualcpp | msvcmsys)
      # This compiler won't grok `-c -o', but also, the minuso test has
      # not run yet.  These depmodes are late enough in the game, and
      # so weak that their functioning should not be impacted.
      am__obj=conftest.${OBJEXT-o}
      am__minus_obj=
      ;;
    none) break ;;
    esac
    if depmode=$depmode \
       source=sub/conftest.c object=$am__obj \
       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
         >/dev/null 2>conftest.err &&
       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
      # icc doesn't choke on unknown options, it will just issue warnings
      # or remarks (even with -Werror).  So we grep stderr for any message
      # that says an option was ignored or not supported.
      # When given -MP, icc 7.0 and 7.1 complain thusly:
      #   icc: Command line warning: ignoring option '-M'; no argument required
      # The diagnosis changed in icc 8.0:
      #   icc: Command line remark: option '-MP' not supported
      if (grep 'ignoring option' conftest.err ||
          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
        am_cv_$1_dependencies_compiler_type=$depmode
        break
      fi
    fi
  done

  cd ..
  rm -rf conftest.dir
else
  am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
  test "x$enable_dependency_tracking" != xno \
  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])


# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])


# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
  am_depcomp="$ac_aux_dir/depcomp"
  AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
])

# Generate code to set up dependency tracking.              -*- Autoconf -*-

# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

#serial 5

# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[{
  # Autoconf 2.62 quotes --file arguments for eval, but not when files
  # are listed without --file.  Let's play safe and only enable the eval
  # if we detect the quoting.
  case $CONFIG_FILES in
  *\'*) eval set x "$CONFIG_FILES" ;;
  *)   set x $CONFIG_FILES ;;
  esac
  shift
  for mf
  do
    # Strip MF so we end up with the name of the file.
    mf=`echo "$mf" | sed -e 's/:.*$//'`
    # Check whether this is an Automake generated Makefile or not.
    # We used to match only the files named `Makefile.in', but
    # some people rename them; so instead we look at the file content.
    # Grep'ing the first line is not enough: some people post-process
    # each Makefile.in and add a new line on top of each file to say so.
    # Grep'ing the whole file is not good either: AIX grep has a line
    # limit of 2048, but all sed's we know have understand at least 4000.
    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
      dirpart=`AS_DIRNAME("$mf")`
    else
      continue
    fi
    # Extract the definition of DEPDIR, am__include, and am__quote
    # from the Makefile without running `make'.
    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    test -z "$DEPDIR" && continue
    am__include=`sed -n 's/^am__include = //p' < "$mf"`
    test -z "am__include" && continue
    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    # When using ansi2knr, U may be empty or an underscore; expand it
    U=`sed -n 's/^U = //p' < "$mf"`
    # Find all dependency output files, they are included files with
    # $(DEPDIR) in their names.  We invoke sed twice because it is the
    # simplest approach to changing $(DEPDIR) to its actual value in the
    # expansion.
    for file in `sed -n "
      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
      fdir=`AS_DIRNAME(["$file"])`
      AS_MKDIR_P([$dirpart/$fdir])
      # echo "creating $dirpart/$file"
      echo '# dummy' > "$dirpart/$file"
    done
  done
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS


# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled.  FIXME.  This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])

# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 8

# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])

# Do all the work for Automake.                             -*- Autoconf -*-

# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 16

# This macro actually does too much.  Some checks are only needed if
# your package does certain things.  But this isn't really a big deal.

# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out.  PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition.  After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.62])dnl
dnl Autoconf wants to disallow AM_ names.  We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
if test "`cd $srcdir && pwd`" != "`pwd`"; then
  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
  # is not polluted with repeated "-I."
  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
  # test to see if srcdir already configured
  if test -f $srcdir/config.status; then
    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
  fi
fi

# test whether we have cygpath
if test -z "$CYGPATH_W"; then
  if (cygpath --version) >/dev/null 2>/dev/null; then
    CYGPATH_W='cygpath -w'
  else
    CYGPATH_W=echo
  fi
fi
AC_SUBST([CYGPATH_W])

# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
 AC_SUBST([PACKAGE], [$1])dnl
 AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
 AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
 AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl

_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl

# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target.  The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
			     [_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
		  [_AM_DEPENDENCIES(CC)],
		  [define([AC_PROG_CC],
			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
		  [_AM_DEPENDENCIES(CXX)],
		  [define([AC_PROG_CXX],
			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
		  [_AM_DEPENDENCIES(OBJC)],
		  [define([AC_PROG_OBJC],
			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])

dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])


# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated.  The stamp files are numbered to have different names.

# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_arg=$1
_am_stamp_count=1
for _am_header in $config_headers :; do
  case $_am_header in
    $_am_arg | $_am_arg:* )
      break ;;
    * )
      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
  esac
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])

# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
if test x"${install_sh}" != xset; then
  case $am_aux_dir in
  *\ * | *\	*)
    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
  *)
    install_sh="\${SHELL} $am_aux_dir/install-sh"
  esac
fi
AC_SUBST(install_sh)])

# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 2

# Check whether the underlying file-system supports filenames
# with a leading dot.  For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
  am__leading_dot=.
else
  am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])

# Check to see how 'make' treats includes.	            -*- Autoconf -*-

# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 4

# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
	@echo this is the am__doit target
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# Ignore all kinds of additional output from `make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
  am__include=include
  am__quote=
  _am_result=GNU
  ;;
esac
# Now try BSD make style include.
if test "$am__include" = "#"; then
   echo '.include "confinc"' > confmf
   case `$am_make -s -f confmf 2> /dev/null` in #(
   *the\ am__doit\ target*)
     am__include=.include
     am__quote="\""
     _am_result=BSD
     ;;
   esac
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])

# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 6

# AM_PROG_CC_C_O
# --------------
# Like AC_PROG_CC_C_O, but changed for automake.
AC_DEFUN([AM_PROG_CC_C_O],
[AC_REQUIRE([AC_PROG_CC_C_O])dnl
AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([compile])dnl
# FIXME: we rely on the cache variable name because
# there is no other way.
set dummy $CC
am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
if test "$am_t" != yes; then
   # Losing compiler, so override with the script.
   # FIXME: It is wrong to rewrite CC.
   # But if we don't then we get into trouble of one sort or another.
   # A longer-term fix would be to have automake use am__CC in this case,
   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
   CC="$am_aux_dir/compile $CC"
fi
dnl Make sure AC_PROG_CC is never called again, or it will override our
dnl setting of CC.
m4_define([AC_PROG_CC],
          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
])

# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-

# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 6

# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])


# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
if test x"${MISSING+set}" != xset; then
  case $am_aux_dir in
  *\ * | *\	*)
    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
  *)
    MISSING="\${SHELL} $am_aux_dir/missing" ;;
  esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
  am_missing_run="$MISSING --run "
else
  am_missing_run=
  AC_MSG_WARN([`missing' script is too old or missing])
fi
])

# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# AM_PROG_MKDIR_P
# ---------------
# Check for `mkdir -p'.
AC_DEFUN([AM_PROG_MKDIR_P],
[AC_PREREQ([2.60])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
dnl while keeping a definition of mkdir_p for backward compatibility.
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
dnl Makefile.ins that do not define MKDIR_P, so we do our own
dnl adjustment using top_builddir (which is defined more often than
dnl MKDIR_P).
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
case $mkdir_p in
  [[\\/$]]* | ?:[[\\/]]*) ;;
  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
esac
])

# Helper functions for option handling.                     -*- Autoconf -*-

# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 4

# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])

# _AM_SET_OPTION(NAME)
# ------------------------------
# Set option NAME.  Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])

# _AM_SET_OPTIONS(OPTIONS)
# ----------------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])

# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])

# Check to make sure that the build environment is sane.    -*- Autoconf -*-

# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 5

# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name.  Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
  *[[\\\"\#\$\&\'\`$am_lf]]*)
    AC_MSG_ERROR([unsafe absolute working directory name]);;
esac
case $srcdir in
  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
esac

# Do `set' in a subshell so we don't clobber the current shell's
# arguments.  Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
   if test "$[*]" = "X"; then
      # -L didn't work.
      set X `ls -t "$srcdir/configure" conftest.file`
   fi
   rm -f conftest.file
   if test "$[*]" != "X $srcdir/configure conftest.file" \
      && test "$[*]" != "X conftest.file $srcdir/configure"; then

      # If neither matched, then we have a broken ls.  This can happen
      # if, for instance, CONFIG_SHELL is bash and it inherits a
      # broken ls alias from the environment.  This has actually
      # happened.  Such a system could not be considered "sane".
      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
alias in your environment])
   fi

   test "$[2]" = conftest.file
   )
then
   # Ok.
   :
else
   AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])

# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# AM_PROG_INSTALL_STRIP
# ---------------------
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries.  This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'.  However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
if test "$cross_compiling" != no; then
  AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])

# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 2

# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])

# AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])

# Check how to create a tarball.                            -*- Autoconf -*-

# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# serial 2

# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
# FORMAT should be one of `v7', `ustar', or `pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
# $tardir.
#     tardir=directory && $(am__tar) > result.tar
#
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
#     $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility.
AM_MISSING_PROG([AMTAR], [tar])
m4_if([$1], [v7],
     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
     [m4_case([$1], [ustar],, [pax],,
              [m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of `-'.
for _am_tool in $_am_tools
do
  case $_am_tool in
  gnutar)
    for _am_tar in tar gnutar gtar;
    do
      AM_RUN_LOG([$_am_tar --version]) && break
    done
    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
    am__untar="$_am_tar -xf -"
    ;;
  plaintar)
    # Must skip GNU tar: if it does not support --format= it doesn't create
    # ustar tarball either.
    (tar --version) >/dev/null 2>&1 && continue
    am__tar='tar chf - "$$tardir"'
    am__tar_='tar chf - "$tardir"'
    am__untar='tar xf -'
    ;;
  pax)
    am__tar='pax -L -x $1 -w "$$tardir"'
    am__tar_='pax -L -x $1 -w "$tardir"'
    am__untar='pax -r'
    ;;
  cpio)
    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
    am__untar='cpio -i -H $1 -d'
    ;;
  none)
    am__tar=false
    am__tar_=false
    am__untar=false
    ;;
  esac

  # If the value was cached, stop now.  We just wanted to have am__tar
  # and am__untar set.
  test -n "${am_cv_prog_tar_$1}" && break

  # tar/untar a dummy directory, and stop if the command works
  rm -rf conftest.dir
  mkdir conftest.dir
  echo GrepMe > conftest.dir/file
  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
  rm -rf conftest.dir
  if test -s conftest.tar; then
    AM_RUN_LOG([$am__untar <conftest.tar])
    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
  fi
done
rm -rf conftest.dir

AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR

m4_include([m4/libcurl.m4])
m4_include([m4/libgcrypt.m4])
m4_include([m4/libtool.m4])
m4_include([m4/ltoptions.m4])
m4_include([m4/ltsugar.m4])
m4_include([m4/ltversion.m4])
m4_include([m4/lt~obsolete.m4])
m4_include([acinclude.m4])

Added luasupport/HTTP/libmicrohttpd-0.9.0/compile.































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.

scriptversion=2009-10-06.20; # UTC

# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
# Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.

case $1 in
  '')
     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
     exit 1;
     ;;
  -h | --h*)
    cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]

Wrapper for compilers which do not understand `-c -o'.
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.

If you are trying to build a whole package this is not the
right script to run: please start by reading the file `INSTALL'.

Report bugs to <bug-automake@gnu.org>.
EOF
    exit $?
    ;;
  -v | --v*)
    echo "compile $scriptversion"
    exit $?
    ;;
esac

ofile=
cfile=
eat=

for arg
do
  if test -n "$eat"; then
    eat=
  else
    case $1 in
      -o)
	# configure might choose to run compile as `compile cc -o foo foo.c'.
	# So we strip `-o arg' only if arg is an object.
	eat=1
	case $2 in
	  *.o | *.obj)
	    ofile=$2
	    ;;
	  *)
	    set x "$@" -o "$2"
	    shift
	    ;;
	esac
	;;
      *.c)
	cfile=$1
	set x "$@" "$1"
	shift
	;;
      *)
	set x "$@" "$1"
	shift
	;;
    esac
  fi
  shift
done

if test -z "$ofile" || test -z "$cfile"; then
  # If no `-o' option was seen then we might have been invoked from a
  # pattern rule where we don't need one.  That is ok -- this is a
  # normal compilation that the losing compiler can handle.  If no
  # `.c' file was seen then we are probably linking.  That is also
  # ok.
  exec "$@"
fi

# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`

# Create the lock directory.
# Note: use `[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file.  Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
  if mkdir "$lockdir" >/dev/null 2>&1; then
    break
  fi
  sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15

# Run the compile.
"$@"
ret=$?

if test -f "$cofile"; then
  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi

rmdir "$lockdir"
exit $ret

# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/config.guess.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
#! /bin/sh
# Attempt to guess a canonical system name.
#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
#   Free Software Foundation, Inc.

timestamp='2009-11-20'

# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
# 02110-1301, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.


# Originally written by Per Bothner.  Please send patches (context
# diff format) to <config-patches@gnu.org> and include a ChangeLog
# entry.
#
# This script attempts to guess a canonical system name similar to
# config.sub.  If it succeeds, it prints the system name on stdout, and
# exits with 0.  Otherwise, it exits with 1.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD

me=`echo "$0" | sed -e 's,.*/,,'`

usage="\
Usage: $0 [OPTION]

Output the configuration name of the system \`$me' is run on.

Operation modes:
  -h, --help         print this help, then exit
  -t, --time-stamp   print date of last modification, then exit
  -v, --version      print version number, then exit

Report bugs and patches to <config-patches@gnu.org>."

version="\
GNU config.guess ($timestamp)

Originally written by Per Bothner.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."

help="
Try \`$me --help' for more information."

# Parse command line
while test $# -gt 0 ; do
  case $1 in
    --time-stamp | --time* | -t )
       echo "$timestamp" ; exit ;;
    --version | -v )
       echo "$version" ; exit ;;
    --help | --h* | -h )
       echo "$usage"; exit ;;
    -- )     # Stop option processing
       shift; break ;;
    - )	# Use stdin as input.
       break ;;
    -* )
       echo "$me: invalid option $1$help" >&2
       exit 1 ;;
    * )
       break ;;
  esac
done

if test $# != 0; then
  echo "$me: too many arguments$help" >&2
  exit 1
fi

trap 'exit 1' 1 2 15

# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
# temporary files to be created and, as you can see below, it is a
# headache to deal with in a portable fashion.

# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
# use `HOST_CC' if defined, but it is deprecated.

# Portable tmp directory creation inspired by the Autoconf team.

set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
 { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
 { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
 { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
dummy=$tmp/dummy ;
tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
case $CC_FOR_BUILD,$HOST_CC,$CC in
 ,,)    echo "int x;" > $dummy.c ;
	for c in cc gcc c89 c99 ; do
	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
	     CC_FOR_BUILD="$c"; break ;
	  fi ;
	done ;
	if test x"$CC_FOR_BUILD" = x ; then
	  CC_FOR_BUILD=no_compiler_found ;
	fi
	;;
 ,,*)   CC_FOR_BUILD=$CC ;;
 ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
esac ; set_cc_for_build= ;'

# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
	PATH=$PATH:/.attbin ; export PATH
fi

UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown

# Note: order is significant - the case branches are not exclusive.

case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
    *:NetBSD:*:*)
	# NetBSD (nbsd) targets should (where applicable) match one or
	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
	# switched to ELF, *-*-netbsd* would select the old
	# object file format.  This provides both forward
	# compatibility and a consistent mechanism for selecting the
	# object file format.
	#
	# Note: NetBSD doesn't particularly care about the vendor
	# portion of the name.  We always set it to "unknown".
	sysctl="sysctl -n hw.machine_arch"
	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
	case "${UNAME_MACHINE_ARCH}" in
	    armeb) machine=armeb-unknown ;;
	    arm*) machine=arm-unknown ;;
	    sh3el) machine=shl-unknown ;;
	    sh3eb) machine=sh-unknown ;;
	    sh5el) machine=sh5le-unknown ;;
	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
	esac
	# The Operating System including object format, if it has switched
	# to ELF recently, or will in the future.
	case "${UNAME_MACHINE_ARCH}" in
	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
		eval $set_cc_for_build
		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
			| grep -q __ELF__
		then
		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
		    # Return netbsd for either.  FIX?
		    os=netbsd
		else
		    os=netbsdelf
		fi
		;;
	    *)
	        os=netbsd
		;;
	esac
	# The OS release
	# Debian GNU/NetBSD machines have a different userland, and
	# thus, need a distinct triplet. However, they do not need
	# kernel version information, so it can be replaced with a
	# suitable tag, in the style of linux-gnu.
	case "${UNAME_VERSION}" in
	    Debian*)
		release='-gnu'
		;;
	    *)
		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
		;;
	esac
	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
	# contains redundant information, the shorter form:
	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
	echo "${machine}-${os}${release}"
	exit ;;
    *:OpenBSD:*:*)
	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
	exit ;;
    *:ekkoBSD:*:*)
	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
	exit ;;
    *:SolidBSD:*:*)
	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
	exit ;;
    macppc:MirBSD:*:*)
	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
	exit ;;
    *:MirBSD:*:*)
	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
	exit ;;
    alpha:OSF1:*:*)
	case $UNAME_RELEASE in
	*4.0)
		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
		;;
	*5.*)
	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
		;;
	esac
	# According to Compaq, /usr/sbin/psrinfo has been available on
	# OSF/1 and Tru64 systems produced since 1995.  I hope that
	# covers most systems running today.  This code pipes the CPU
	# types through head -n 1, so we only detect the type of CPU 0.
	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
	case "$ALPHA_CPU_TYPE" in
	    "EV4 (21064)")
		UNAME_MACHINE="alpha" ;;
	    "EV4.5 (21064)")
		UNAME_MACHINE="alpha" ;;
	    "LCA4 (21066/21068)")
		UNAME_MACHINE="alpha" ;;
	    "EV5 (21164)")
		UNAME_MACHINE="alphaev5" ;;
	    "EV5.6 (21164A)")
		UNAME_MACHINE="alphaev56" ;;
	    "EV5.6 (21164PC)")
		UNAME_MACHINE="alphapca56" ;;
	    "EV5.7 (21164PC)")
		UNAME_MACHINE="alphapca57" ;;
	    "EV6 (21264)")
		UNAME_MACHINE="alphaev6" ;;
	    "EV6.7 (21264A)")
		UNAME_MACHINE="alphaev67" ;;
	    "EV6.8CB (21264C)")
		UNAME_MACHINE="alphaev68" ;;
	    "EV6.8AL (21264B)")
		UNAME_MACHINE="alphaev68" ;;
	    "EV6.8CX (21264D)")
		UNAME_MACHINE="alphaev68" ;;
	    "EV6.9A (21264/EV69A)")
		UNAME_MACHINE="alphaev69" ;;
	    "EV7 (21364)")
		UNAME_MACHINE="alphaev7" ;;
	    "EV7.9 (21364A)")
		UNAME_MACHINE="alphaev79" ;;
	esac
	# A Pn.n version is a patched version.
	# A Vn.n version is a released version.
	# A Tn.n version is a released field test version.
	# A Xn.n version is an unreleased experimental baselevel.
	# 1.2 uses "1.2" for uname -r.
	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
	exit ;;
    Alpha\ *:Windows_NT*:*)
	# How do we know it's Interix rather than the generic POSIX subsystem?
	# Should we change UNAME_MACHINE based on the output of uname instead
	# of the specific Alpha model?
	echo alpha-pc-interix
	exit ;;
    21064:Windows_NT:50:3)
	echo alpha-dec-winnt3.5
	exit ;;
    Amiga*:UNIX_System_V:4.0:*)
	echo m68k-unknown-sysv4
	exit ;;
    *:[Aa]miga[Oo][Ss]:*:*)
	echo ${UNAME_MACHINE}-unknown-amigaos
	exit ;;
    *:[Mm]orph[Oo][Ss]:*:*)
	echo ${UNAME_MACHINE}-unknown-morphos
	exit ;;
    *:OS/390:*:*)
	echo i370-ibm-openedition
	exit ;;
    *:z/VM:*:*)
	echo s390-ibm-zvmoe
	exit ;;
    *:OS400:*:*)
        echo powerpc-ibm-os400
	exit ;;
    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
	echo arm-acorn-riscix${UNAME_RELEASE}
	exit ;;
    arm:riscos:*:*|arm:RISCOS:*:*)
	echo arm-unknown-riscos
	exit ;;
    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
	echo hppa1.1-hitachi-hiuxmpp
	exit ;;
    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
	if test "`(/bin/universe) 2>/dev/null`" = att ; then
		echo pyramid-pyramid-sysv3
	else
		echo pyramid-pyramid-bsd
	fi
	exit ;;
    NILE*:*:*:dcosx)
	echo pyramid-pyramid-svr4
	exit ;;
    DRS?6000:unix:4.0:6*)
	echo sparc-icl-nx6
	exit ;;
    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
	case `/usr/bin/uname -p` in
	    sparc) echo sparc-icl-nx7; exit ;;
	esac ;;
    s390x:SunOS:*:*)
	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
	exit ;;
    sun4H:SunOS:5.*:*)
	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
	exit ;;
    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
	exit ;;
    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
	echo i386-pc-auroraux${UNAME_RELEASE}
	exit ;;
    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
	eval $set_cc_for_build
	SUN_ARCH="i386"
	# If there is a compiler, see if it is configured for 64-bit objects.
	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
	# This test works for both compilers.
	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
		grep IS_64BIT_ARCH >/dev/null
	    then
		SUN_ARCH="x86_64"
	    fi
	fi
	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
	exit ;;
    sun4*:SunOS:6*:*)
	# According to config.sub, this is the proper way to canonicalize
	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
	# it's likely to be more like Solaris than SunOS4.
	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
	exit ;;
    sun4*:SunOS:*:*)
	case "`/usr/bin/arch -k`" in
	    Series*|S4*)
		UNAME_RELEASE=`uname -v`
		;;
	esac
	# Japanese Language versions have a version number like `4.1.3-JL'.
	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
	exit ;;
    sun3*:SunOS:*:*)
	echo m68k-sun-sunos${UNAME_RELEASE}
	exit ;;
    sun*:*:4.2BSD:*)
	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
	case "`/bin/arch`" in
	    sun3)
		echo m68k-sun-sunos${UNAME_RELEASE}
		;;
	    sun4)
		echo sparc-sun-sunos${UNAME_RELEASE}
		;;
	esac
	exit ;;
    aushp:SunOS:*:*)
	echo sparc-auspex-sunos${UNAME_RELEASE}
	exit ;;
    # The situation for MiNT is a little confusing.  The machine name
    # can be virtually everything (everything which is not
    # "atarist" or "atariste" at least should have a processor
    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
    # to the lowercase version "mint" (or "freemint").  Finally
    # the system name "TOS" denotes a system which is actually not
    # MiNT.  But MiNT is downward compatible to TOS, so this should
    # be no problem.
    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
        echo m68k-atari-mint${UNAME_RELEASE}
	exit ;;
    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
	echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
        echo m68k-atari-mint${UNAME_RELEASE}
	exit ;;
    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
        echo m68k-milan-mint${UNAME_RELEASE}
        exit ;;
    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
        echo m68k-hades-mint${UNAME_RELEASE}
        exit ;;
    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
        echo m68k-unknown-mint${UNAME_RELEASE}
        exit ;;
    m68k:machten:*:*)
	echo m68k-apple-machten${UNAME_RELEASE}
	exit ;;
    powerpc:machten:*:*)
	echo powerpc-apple-machten${UNAME_RELEASE}
	exit ;;
    RISC*:Mach:*:*)
	echo mips-dec-mach_bsd4.3
	exit ;;
    RISC*:ULTRIX:*:*)
	echo mips-dec-ultrix${UNAME_RELEASE}
	exit ;;
    VAX*:ULTRIX*:*:*)
	echo vax-dec-ultrix${UNAME_RELEASE}
	exit ;;
    2020:CLIX:*:* | 2430:CLIX:*:*)
	echo clipper-intergraph-clix${UNAME_RELEASE}
	exit ;;
    mips:*:*:UMIPS | mips:*:*:RISCos)
	eval $set_cc_for_build
	sed 's/^	//' << EOF >$dummy.c
#ifdef __cplusplus
#include <stdio.h>  /* for printf() prototype */
	int main (int argc, char *argv[]) {
#else
	int main (argc, argv) int argc; char *argv[]; {
#endif
	#if defined (host_mips) && defined (MIPSEB)
	#if defined (SYSTYPE_SYSV)
	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
	#endif
	#if defined (SYSTYPE_SVR4)
	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
	#endif
	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
	#endif
	#endif
	  exit (-1);
	}
EOF
	$CC_FOR_BUILD -o $dummy $dummy.c &&
	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
	  SYSTEM_NAME=`$dummy $dummyarg` &&
	    { echo "$SYSTEM_NAME"; exit; }
	echo mips-mips-riscos${UNAME_RELEASE}
	exit ;;
    Motorola:PowerMAX_OS:*:*)
	echo powerpc-motorola-powermax
	exit ;;
    Motorola:*:4.3:PL8-*)
	echo powerpc-harris-powermax
	exit ;;
    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
	echo powerpc-harris-powermax
	exit ;;
    Night_Hawk:Power_UNIX:*:*)
	echo powerpc-harris-powerunix
	exit ;;
    m88k:CX/UX:7*:*)
	echo m88k-harris-cxux7
	exit ;;
    m88k:*:4*:R4*)
	echo m88k-motorola-sysv4
	exit ;;
    m88k:*:3*:R3*)
	echo m88k-motorola-sysv3
	exit ;;
    AViiON:dgux:*:*)
        # DG/UX returns AViiON for all architectures
        UNAME_PROCESSOR=`/usr/bin/uname -p`
	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
	then
	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
	       [ ${TARGET_BINARY_INTERFACE}x = x ]
	    then
		echo m88k-dg-dgux${UNAME_RELEASE}
	    else
		echo m88k-dg-dguxbcs${UNAME_RELEASE}
	    fi
	else
	    echo i586-dg-dgux${UNAME_RELEASE}
	fi
 	exit ;;
    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
	echo m88k-dolphin-sysv3
	exit ;;
    M88*:*:R3*:*)
	# Delta 88k system running SVR3
	echo m88k-motorola-sysv3
	exit ;;
    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
	echo m88k-tektronix-sysv3
	exit ;;
    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
	echo m68k-tektronix-bsd
	exit ;;
    *:IRIX*:*:*)
	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
	exit ;;
    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
    i*86:AIX:*:*)
	echo i386-ibm-aix
	exit ;;
    ia64:AIX:*:*)
	if [ -x /usr/bin/oslevel ] ; then
		IBM_REV=`/usr/bin/oslevel`
	else
		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
	fi
	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
	exit ;;
    *:AIX:2:3)
	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
		eval $set_cc_for_build
		sed 's/^		//' << EOF >$dummy.c
		#include <sys/systemcfg.h>

		main()
			{
			if (!__power_pc())
				exit(1);
			puts("powerpc-ibm-aix3.2.5");
			exit(0);
			}
EOF
		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
		then
			echo "$SYSTEM_NAME"
		else
			echo rs6000-ibm-aix3.2.5
		fi
	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
		echo rs6000-ibm-aix3.2.4
	else
		echo rs6000-ibm-aix3.2
	fi
	exit ;;
    *:AIX:*:[456])
	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
		IBM_ARCH=rs6000
	else
		IBM_ARCH=powerpc
	fi
	if [ -x /usr/bin/oslevel ] ; then
		IBM_REV=`/usr/bin/oslevel`
	else
		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
	fi
	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
	exit ;;
    *:AIX:*:*)
	echo rs6000-ibm-aix
	exit ;;
    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
	echo romp-ibm-bsd4.4
	exit ;;
    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
	exit ;;                             # report: romp-ibm BSD 4.3
    *:BOSX:*:*)
	echo rs6000-bull-bosx
	exit ;;
    DPX/2?00:B.O.S.:*:*)
	echo m68k-bull-sysv3
	exit ;;
    9000/[34]??:4.3bsd:1.*:*)
	echo m68k-hp-bsd
	exit ;;
    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
	echo m68k-hp-bsd4.4
	exit ;;
    9000/[34678]??:HP-UX:*:*)
	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
	case "${UNAME_MACHINE}" in
	    9000/31? )            HP_ARCH=m68000 ;;
	    9000/[34]?? )         HP_ARCH=m68k ;;
	    9000/[678][0-9][0-9])
		if [ -x /usr/bin/getconf ]; then
		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                    case "${sc_cpu_version}" in
                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
                        case "${sc_kernel_bits}" in
                          32) HP_ARCH="hppa2.0n" ;;
                          64) HP_ARCH="hppa2.0w" ;;
			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
                        esac ;;
                    esac
		fi
		if [ "${HP_ARCH}" = "" ]; then
		    eval $set_cc_for_build
		    sed 's/^              //' << EOF >$dummy.c

              #define _HPUX_SOURCE
              #include <stdlib.h>
              #include <unistd.h>

              int main ()
              {
              #if defined(_SC_KERNEL_BITS)
                  long bits = sysconf(_SC_KERNEL_BITS);
              #endif
                  long cpu  = sysconf (_SC_CPU_VERSION);

                  switch (cpu)
              	{
              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
              	case CPU_PA_RISC2_0:
              #if defined(_SC_KERNEL_BITS)
              	    switch (bits)
              		{
              		case 64: puts ("hppa2.0w"); break;
              		case 32: puts ("hppa2.0n"); break;
              		default: puts ("hppa2.0"); break;
              		} break;
              #else  /* !defined(_SC_KERNEL_BITS) */
              	    puts ("hppa2.0"); break;
              #endif
              	default: puts ("hppa1.0"); break;
              	}
                  exit (0);
              }
EOF
		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
		    test -z "$HP_ARCH" && HP_ARCH=hppa
		fi ;;
	esac
	if [ ${HP_ARCH} = "hppa2.0w" ]
	then
	    eval $set_cc_for_build

	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
	    # generating 64-bit code.  GNU and HP use different nomenclature:
	    #
	    # $ CC_FOR_BUILD=cc ./config.guess
	    # => hppa2.0w-hp-hpux11.23
	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
	    # => hppa64-hp-hpux11.23

	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
		grep -q __LP64__
	    then
		HP_ARCH="hppa2.0w"
	    else
		HP_ARCH="hppa64"
	    fi
	fi
	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
	exit ;;
    ia64:HP-UX:*:*)
	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
	echo ia64-hp-hpux${HPUX_REV}
	exit ;;
    3050*:HI-UX:*:*)
	eval $set_cc_for_build
	sed 's/^	//' << EOF >$dummy.c
	#include <unistd.h>
	int
	main ()
	{
	  long cpu = sysconf (_SC_CPU_VERSION);
	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
	     results, however.  */
	  if (CPU_IS_PA_RISC (cpu))
	    {
	      switch (cpu)
		{
		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
		  default: puts ("hppa-hitachi-hiuxwe2"); break;
		}
	    }
	  else if (CPU_IS_HP_MC68K (cpu))
	    puts ("m68k-hitachi-hiuxwe2");
	  else puts ("unknown-hitachi-hiuxwe2");
	  exit (0);
	}
EOF
	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
		{ echo "$SYSTEM_NAME"; exit; }
	echo unknown-hitachi-hiuxwe2
	exit ;;
    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
	echo hppa1.1-hp-bsd
	exit ;;
    9000/8??:4.3bsd:*:*)
	echo hppa1.0-hp-bsd
	exit ;;
    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
	echo hppa1.0-hp-mpeix
	exit ;;
    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
	echo hppa1.1-hp-osf
	exit ;;
    hp8??:OSF1:*:*)
	echo hppa1.0-hp-osf
	exit ;;
    i*86:OSF1:*:*)
	if [ -x /usr/sbin/sysversion ] ; then
	    echo ${UNAME_MACHINE}-unknown-osf1mk
	else
	    echo ${UNAME_MACHINE}-unknown-osf1
	fi
	exit ;;
    parisc*:Lites*:*:*)
	echo hppa1.1-hp-lites
	exit ;;
    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
	echo c1-convex-bsd
        exit ;;
    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
	if getsysinfo -f scalar_acc
	then echo c32-convex-bsd
	else echo c2-convex-bsd
	fi
        exit ;;
    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
	echo c34-convex-bsd
        exit ;;
    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
	echo c38-convex-bsd
        exit ;;
    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
	echo c4-convex-bsd
        exit ;;
    CRAY*Y-MP:*:*:*)
	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
	exit ;;
    CRAY*[A-Z]90:*:*:*)
	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
	      -e 's/\.[^.]*$/.X/'
	exit ;;
    CRAY*TS:*:*:*)
	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
	exit ;;
    CRAY*T3E:*:*:*)
	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
	exit ;;
    CRAY*SV1:*:*:*)
	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
	exit ;;
    *:UNICOS/mp:*:*)
	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
	exit ;;
    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
    5000:UNIX_System_V:4.*:*)
        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
	exit ;;
    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
	exit ;;
    sparc*:BSD/OS:*:*)
	echo sparc-unknown-bsdi${UNAME_RELEASE}
	exit ;;
    *:BSD/OS:*:*)
	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
	exit ;;
    *:FreeBSD:*:*)
	case ${UNAME_MACHINE} in
	    pc98)
		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
	    amd64)
		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
	    *)
		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
	esac
	exit ;;
    i*:CYGWIN*:*)
	echo ${UNAME_MACHINE}-pc-cygwin
	exit ;;
    *:MINGW*:*)
	echo ${UNAME_MACHINE}-pc-mingw32
	exit ;;
    i*:windows32*:*)
    	# uname -m includes "-pc" on this system.
    	echo ${UNAME_MACHINE}-mingw32
	exit ;;
    i*:PW*:*)
	echo ${UNAME_MACHINE}-pc-pw32
	exit ;;
    *:Interix*:*)
    	case ${UNAME_MACHINE} in
	    x86)
		echo i586-pc-interix${UNAME_RELEASE}
		exit ;;
	    authenticamd | genuineintel | EM64T)
		echo x86_64-unknown-interix${UNAME_RELEASE}
		exit ;;
	    IA64)
		echo ia64-unknown-interix${UNAME_RELEASE}
		exit ;;
	esac ;;
    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
	echo i${UNAME_MACHINE}-pc-mks
	exit ;;
    8664:Windows_NT:*)
	echo x86_64-pc-mks
	exit ;;
    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
	# How do we know it's Interix rather than the generic POSIX subsystem?
	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
	# UNAME_MACHINE based on the output of uname instead of i386?
	echo i586-pc-interix
	exit ;;
    i*:UWIN*:*)
	echo ${UNAME_MACHINE}-pc-uwin
	exit ;;
    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
	echo x86_64-unknown-cygwin
	exit ;;
    p*:CYGWIN*:*)
	echo powerpcle-unknown-cygwin
	exit ;;
    prep*:SunOS:5.*:*)
	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
	exit ;;
    *:GNU:*:*)
	# the GNU system
	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
	exit ;;
    *:GNU/*:*:*)
	# other systems with GNU libc and userland
	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
	exit ;;
    i*86:Minix:*:*)
	echo ${UNAME_MACHINE}-pc-minix
	exit ;;
    alpha:Linux:*:*)
	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
	  EV5)   UNAME_MACHINE=alphaev5 ;;
	  EV56)  UNAME_MACHINE=alphaev56 ;;
	  PCA56) UNAME_MACHINE=alphapca56 ;;
	  PCA57) UNAME_MACHINE=alphapca56 ;;
	  EV6)   UNAME_MACHINE=alphaev6 ;;
	  EV67)  UNAME_MACHINE=alphaev67 ;;
	  EV68*) UNAME_MACHINE=alphaev68 ;;
        esac
	objdump --private-headers /bin/sh | grep -q ld.so.1
	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
	exit ;;
    arm*:Linux:*:*)
	eval $set_cc_for_build
	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
	    | grep -q __ARM_EABI__
	then
	    echo ${UNAME_MACHINE}-unknown-linux-gnu
	else
	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
	fi
	exit ;;
    avr32*:Linux:*:*)
	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    cris:Linux:*:*)
	echo cris-axis-linux-gnu
	exit ;;
    crisv32:Linux:*:*)
	echo crisv32-axis-linux-gnu
	exit ;;
    frv:Linux:*:*)
    	echo frv-unknown-linux-gnu
	exit ;;
    i*86:Linux:*:*)
	LIBC=gnu
	eval $set_cc_for_build
	sed 's/^	//' << EOF >$dummy.c
	#ifdef __dietlibc__
	LIBC=dietlibc
	#endif
EOF
	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
	exit ;;
    ia64:Linux:*:*)
	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    m32r*:Linux:*:*)
	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    m68*:Linux:*:*)
	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    mips:Linux:*:* | mips64:Linux:*:*)
	eval $set_cc_for_build
	sed 's/^	//' << EOF >$dummy.c
	#undef CPU
	#undef ${UNAME_MACHINE}
	#undef ${UNAME_MACHINE}el
	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
	CPU=${UNAME_MACHINE}el
	#else
	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
	CPU=${UNAME_MACHINE}
	#else
	CPU=
	#endif
	#endif
EOF
	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
	;;
    or32:Linux:*:*)
	echo or32-unknown-linux-gnu
	exit ;;
    padre:Linux:*:*)
	echo sparc-unknown-linux-gnu
	exit ;;
    parisc64:Linux:*:* | hppa64:Linux:*:*)
	echo hppa64-unknown-linux-gnu
	exit ;;
    parisc:Linux:*:* | hppa:Linux:*:*)
	# Look for CPU level
	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
	  *)    echo hppa-unknown-linux-gnu ;;
	esac
	exit ;;
    ppc64:Linux:*:*)
	echo powerpc64-unknown-linux-gnu
	exit ;;
    ppc:Linux:*:*)
	echo powerpc-unknown-linux-gnu
	exit ;;
    s390:Linux:*:* | s390x:Linux:*:*)
	echo ${UNAME_MACHINE}-ibm-linux
	exit ;;
    sh64*:Linux:*:*)
    	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    sh*:Linux:*:*)
	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    sparc:Linux:*:* | sparc64:Linux:*:*)
	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    vax:Linux:*:*)
	echo ${UNAME_MACHINE}-dec-linux-gnu
	exit ;;
    x86_64:Linux:*:*)
	echo x86_64-unknown-linux-gnu
	exit ;;
    xtensa*:Linux:*:*)
    	echo ${UNAME_MACHINE}-unknown-linux-gnu
	exit ;;
    i*86:DYNIX/ptx:4*:*)
	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
	# earlier versions are messed up and put the nodename in both
	# sysname and nodename.
	echo i386-sequent-sysv4
	exit ;;
    i*86:UNIX_SV:4.2MP:2.*)
        # Unixware is an offshoot of SVR4, but it has its own version
        # number series starting with 2...
        # I am not positive that other SVR4 systems won't match this,
	# I just have to hope.  -- rms.
        # Use sysv4.2uw... so that sysv4* matches it.
	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
	exit ;;
    i*86:OS/2:*:*)
	# If we were able to find `uname', then EMX Unix compatibility
	# is probably installed.
	echo ${UNAME_MACHINE}-pc-os2-emx
	exit ;;
    i*86:XTS-300:*:STOP)
	echo ${UNAME_MACHINE}-unknown-stop
	exit ;;
    i*86:atheos:*:*)
	echo ${UNAME_MACHINE}-unknown-atheos
	exit ;;
    i*86:syllable:*:*)
	echo ${UNAME_MACHINE}-pc-syllable
	exit ;;
    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
	echo i386-unknown-lynxos${UNAME_RELEASE}
	exit ;;
    i*86:*DOS:*:*)
	echo ${UNAME_MACHINE}-pc-msdosdjgpp
	exit ;;
    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
	else
		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
	fi
	exit ;;
    i*86:*:5:[678]*)
    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
	case `/bin/uname -X | grep "^Machine"` in
	    *486*)	     UNAME_MACHINE=i486 ;;
	    *Pentium)	     UNAME_MACHINE=i586 ;;
	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
	esac
	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
	exit ;;
    i*86:*:3.2:*)
	if test -f /usr/options/cb.name; then
		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
	elif /bin/uname -X 2>/dev/null >/dev/null ; then
		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
			&& UNAME_MACHINE=i586
		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
			&& UNAME_MACHINE=i686
		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
			&& UNAME_MACHINE=i686
		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
	else
		echo ${UNAME_MACHINE}-pc-sysv32
	fi
	exit ;;
    pc:*:*:*)
	# Left here for compatibility:
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
        # the processor, so we play safe by assuming i586.
	# Note: whatever this is, it MUST be the same as what config.sub
	# prints for the "djgpp" host, or else GDB configury will decide that
	# this is a cross-build.
	echo i586-pc-msdosdjgpp
        exit ;;
    Intel:Mach:3*:*)
	echo i386-pc-mach3
	exit ;;
    paragon:*:*:*)
	echo i860-intel-osf1
	exit ;;
    i860:*:4.*:*) # i860-SVR4
	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
	else # Add other i860-SVR4 vendors below as they are discovered.
	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
	fi
	exit ;;
    mini*:CTIX:SYS*5:*)
	# "miniframe"
	echo m68010-convergent-sysv
	exit ;;
    mc68k:UNIX:SYSTEM5:3.51m)
	echo m68k-convergent-sysv
	exit ;;
    M680?0:D-NIX:5.3:*)
	echo m68k-diab-dnix
	exit ;;
    M68*:*:R3V[5678]*:*)
	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
	OS_REL=''
	test -r /etc/.relid \
	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
          && { echo i486-ncr-sysv4; exit; } ;;
    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
	OS_REL='.3'
	test -r /etc/.relid \
	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
	echo m68k-unknown-lynxos${UNAME_RELEASE}
	exit ;;
    mc68030:UNIX_System_V:4.*:*)
	echo m68k-atari-sysv4
	exit ;;
    TSUNAMI:LynxOS:2.*:*)
	echo sparc-unknown-lynxos${UNAME_RELEASE}
	exit ;;
    rs6000:LynxOS:2.*:*)
	echo rs6000-unknown-lynxos${UNAME_RELEASE}
	exit ;;
    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
	echo powerpc-unknown-lynxos${UNAME_RELEASE}
	exit ;;
    SM[BE]S:UNIX_SV:*:*)
	echo mips-dde-sysv${UNAME_RELEASE}
	exit ;;
    RM*:ReliantUNIX-*:*:*)
	echo mips-sni-sysv4
	exit ;;
    RM*:SINIX-*:*:*)
	echo mips-sni-sysv4
	exit ;;
    *:SINIX-*:*:*)
	if uname -p 2>/dev/null >/dev/null ; then
		UNAME_MACHINE=`(uname -p) 2>/dev/null`
		echo ${UNAME_MACHINE}-sni-sysv4
	else
		echo ns32k-sni-sysv
	fi
	exit ;;
    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                      # says <Richard.M.Bartel@ccMail.Census.GOV>
        echo i586-unisys-sysv4
        exit ;;
    *:UNIX_System_V:4*:FTX*)
	# From Gerald Hewes <hewes@openmarket.com>.
	# How about differentiating between stratus architectures? -djm
	echo hppa1.1-stratus-sysv4
	exit ;;
    *:*:*:FTX*)
	# From seanf@swdc.stratus.com.
	echo i860-stratus-sysv4
	exit ;;
    i*86:VOS:*:*)
	# From Paul.Green@stratus.com.
	echo ${UNAME_MACHINE}-stratus-vos
	exit ;;
    *:VOS:*:*)
	# From Paul.Green@stratus.com.
	echo hppa1.1-stratus-vos
	exit ;;
    mc68*:A/UX:*:*)
	echo m68k-apple-aux${UNAME_RELEASE}
	exit ;;
    news*:NEWS-OS:6*:*)
	echo mips-sony-newsos6
	exit ;;
    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
	if [ -d /usr/nec ]; then
	        echo mips-nec-sysv${UNAME_RELEASE}
	else
	        echo mips-unknown-sysv${UNAME_RELEASE}
	fi
        exit ;;
    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
	echo powerpc-be-beos
	exit ;;
    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
	echo powerpc-apple-beos
	exit ;;
    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
	echo i586-pc-beos
	exit ;;
    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
	echo i586-pc-haiku
	exit ;;
    SX-4:SUPER-UX:*:*)
	echo sx4-nec-superux${UNAME_RELEASE}
	exit ;;
    SX-5:SUPER-UX:*:*)
	echo sx5-nec-superux${UNAME_RELEASE}
	exit ;;
    SX-6:SUPER-UX:*:*)
	echo sx6-nec-superux${UNAME_RELEASE}
	exit ;;
    SX-7:SUPER-UX:*:*)
	echo sx7-nec-superux${UNAME_RELEASE}
	exit ;;
    SX-8:SUPER-UX:*:*)
	echo sx8-nec-superux${UNAME_RELEASE}
	exit ;;
    SX-8R:SUPER-UX:*:*)
	echo sx8r-nec-superux${UNAME_RELEASE}
	exit ;;
    Power*:Rhapsody:*:*)
	echo powerpc-apple-rhapsody${UNAME_RELEASE}
	exit ;;
    *:Rhapsody:*:*)
	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
	exit ;;
    *:Darwin:*:*)
	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
	case $UNAME_PROCESSOR in
	    i386)
		eval $set_cc_for_build
		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
		      grep IS_64BIT_ARCH >/dev/null
		  then
		      UNAME_PROCESSOR="x86_64"
		  fi
		fi ;;
	    unknown) UNAME_PROCESSOR=powerpc ;;
	esac
	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
	exit ;;
    *:procnto*:*:* | *:QNX:[0123456789]*:*)
	UNAME_PROCESSOR=`uname -p`
	if test "$UNAME_PROCESSOR" = "x86"; then
		UNAME_PROCESSOR=i386
		UNAME_MACHINE=pc
	fi
	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
	exit ;;
    *:QNX:*:4*)
	echo i386-pc-qnx
	exit ;;
    NSE-?:NONSTOP_KERNEL:*:*)
	echo nse-tandem-nsk${UNAME_RELEASE}
	exit ;;
    NSR-?:NONSTOP_KERNEL:*:*)
	echo nsr-tandem-nsk${UNAME_RELEASE}
	exit ;;
    *:NonStop-UX:*:*)
	echo mips-compaq-nonstopux
	exit ;;
    BS2000:POSIX*:*:*)
	echo bs2000-siemens-sysv
	exit ;;
    DS/*:UNIX_System_V:*:*)
	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
	exit ;;
    *:Plan9:*:*)
	# "uname -m" is not consistent, so use $cputype instead. 386
	# is converted to i386 for consistency with other x86
	# operating systems.
	if test "$cputype" = "386"; then
	    UNAME_MACHINE=i386
	else
	    UNAME_MACHINE="$cputype"
	fi
	echo ${UNAME_MACHINE}-unknown-plan9
	exit ;;
    *:TOPS-10:*:*)
	echo pdp10-unknown-tops10
	exit ;;
    *:TENEX:*:*)
	echo pdp10-unknown-tenex
	exit ;;
    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
	echo pdp10-dec-tops20
	exit ;;
    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
	echo pdp10-xkl-tops20
	exit ;;
    *:TOPS-20:*:*)
	echo pdp10-unknown-tops20
	exit ;;
    *:ITS:*:*)
	echo pdp10-unknown-its
	exit ;;
    SEI:*:*:SEIUX)
        echo mips-sei-seiux${UNAME_RELEASE}
	exit ;;
    *:DragonFly:*:*)
	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
	exit ;;
    *:*VMS:*:*)
    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
	case "${UNAME_MACHINE}" in
	    A*) echo alpha-dec-vms ; exit ;;
	    I*) echo ia64-dec-vms ; exit ;;
	    V*) echo vax-dec-vms ; exit ;;
	esac ;;
    *:XENIX:*:SysV)
	echo i386-pc-xenix
	exit ;;
    i*86:skyos:*:*)
	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
	exit ;;
    i*86:rdos:*:*)
	echo ${UNAME_MACHINE}-pc-rdos
	exit ;;
    i*86:AROS:*:*)
	echo ${UNAME_MACHINE}-pc-aros
	exit ;;
esac

#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2

eval $set_cc_for_build
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
#endif
main ()
{
#if defined (sony)
#if defined (MIPSEB)
  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
     I don't know....  */
  printf ("mips-sony-bsd\n"); exit (0);
#else
#include <sys/param.h>
  printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
          "4"
#else
	  ""
#endif
         ); exit (0);
#endif
#endif

#if defined (__arm) && defined (__acorn) && defined (__unix)
  printf ("arm-acorn-riscix\n"); exit (0);
#endif

#if defined (hp300) && !defined (hpux)
  printf ("m68k-hp-bsd\n"); exit (0);
#endif

#if defined (NeXT)
#if !defined (__ARCHITECTURE__)
#define __ARCHITECTURE__ "m68k"
#endif
  int version;
  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
  if (version < 4)
    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
  else
    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
  exit (0);
#endif

#if defined (MULTIMAX) || defined (n16)
#if defined (UMAXV)
  printf ("ns32k-encore-sysv\n"); exit (0);
#else
#if defined (CMU)
  printf ("ns32k-encore-mach\n"); exit (0);
#else
  printf ("ns32k-encore-bsd\n"); exit (0);
#endif
#endif
#endif

#if defined (__386BSD__)
  printf ("i386-pc-bsd\n"); exit (0);
#endif

#if defined (sequent)
#if defined (i386)
  printf ("i386-sequent-dynix\n"); exit (0);
#endif
#if defined (ns32000)
  printf ("ns32k-sequent-dynix\n"); exit (0);
#endif
#endif

#if defined (_SEQUENT_)
    struct utsname un;

    uname(&un);

    if (strncmp(un.version, "V2", 2) == 0) {
	printf ("i386-sequent-ptx2\n"); exit (0);
    }
    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
	printf ("i386-sequent-ptx1\n"); exit (0);
    }
    printf ("i386-sequent-ptx\n"); exit (0);

#endif

#if defined (vax)
# if !defined (ultrix)
#  include <sys/param.h>
#  if defined (BSD)
#   if BSD == 43
      printf ("vax-dec-bsd4.3\n"); exit (0);
#   else
#    if BSD == 199006
      printf ("vax-dec-bsd4.3reno\n"); exit (0);
#    else
      printf ("vax-dec-bsd\n"); exit (0);
#    endif
#   endif
#  else
    printf ("vax-dec-bsd\n"); exit (0);
#  endif
# else
    printf ("vax-dec-ultrix\n"); exit (0);
# endif
#endif

#if defined (alliant) && defined (i860)
  printf ("i860-alliant-bsd\n"); exit (0);
#endif

  exit (1);
}
EOF

$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
	{ echo "$SYSTEM_NAME"; exit; }

# Apollos put the system type in the environment.

test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }

# Convex versions that predate uname can use getsysinfo(1)

if [ -x /usr/convex/getsysinfo ]
then
    case `getsysinfo -f cpu_type` in
    c1*)
	echo c1-convex-bsd
	exit ;;
    c2*)
	if getsysinfo -f scalar_acc
	then echo c32-convex-bsd
	else echo c2-convex-bsd
	fi
	exit ;;
    c34*)
	echo c34-convex-bsd
	exit ;;
    c38*)
	echo c38-convex-bsd
	exit ;;
    c4*)
	echo c4-convex-bsd
	exit ;;
    esac
fi

cat >&2 <<EOF
$0: unable to guess system type

This script, last modified $timestamp, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from

  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
and
  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD

If the version you run ($0) is already up to date, please
send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.

config.guess timestamp = $timestamp

uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`

/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`

hostinfo               = `(hostinfo) 2>/dev/null`
/bin/universe          = `(/bin/universe) 2>/dev/null`
/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
/bin/arch              = `(/bin/arch) 2>/dev/null`
/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`

UNAME_MACHINE = ${UNAME_MACHINE}
UNAME_RELEASE = ${UNAME_RELEASE}
UNAME_SYSTEM  = ${UNAME_SYSTEM}
UNAME_VERSION = ${UNAME_VERSION}
EOF

exit 1

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/config.log.





































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by libmicrohttpd configure 0.9.0, which was
generated by GNU Autoconf 2.65.  Invocation command line was

  $ ./configure 

## --------- ##
## Platform. ##
## --------- ##

hostname = Pandora-2.local
uname -m = Power Macintosh
uname -r = 9.8.0
uname -s = Darwin
uname -v = Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_PPC

/usr/bin/uname -p = powerpc
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = Mach kernel version:
	 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_PPC
Kernel configured for up to 2 processors.
2 processors are physically available.
2 processors are logically available.
Processor type: ppc7400 (PowerPC 7400)
Processors active: 0 1
Primary memory available: 1.25 gigabytes
Default processor set: 69 tasks, 244 threads, 2 processors
Load average: 1.01, Mach factor: 1.04
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /opt/local/sbin
PATH: /opt/local/bin
PATH: /usr/local/bin
PATH: /usr/local/sbin
PATH: /usr/local/mysql/bin
PATH: /usr/local/aplus-fsf-4.18/bin
PATH: /Users/jim/bin
PATH: /usr/bin
PATH: /bin
PATH: /sw/bin
PATH: /usr/local/bin
PATH: /usr/local/teTeX/bin/powerpc-apple-darwin-current
PATH: /usr/sbin
PATH: /sbin
PATH: /usr/texbin
PATH: /usr/X11/bin
PATH: /usr/local/bin
PATH: /usr/texbin
PATH: /Users/jim/bin/ImageMagick/bin
PATH: /Users/jim/bin
PATH: /sw/bin
PATH: /usr/local/Trolltech/Qt-4.2.1/bin


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2440: checking for a BSD-compatible install
configure:2508: result: /opt/local/bin/ginstall -c
configure:2519: checking whether build environment is sane
configure:2569: result: yes
configure:2710: checking for a thread-safe mkdir -p
configure:2749: result: /opt/local/bin/gmkdir -p
configure:2762: checking for gawk
configure:2792: result: no
configure:2762: checking for mawk
configure:2792: result: no
configure:2762: checking for nawk
configure:2792: result: no
configure:2762: checking for awk
configure:2778: found /usr/bin/awk
configure:2789: result: awk
configure:2800: checking whether make sets $(MAKE)
configure:2822: result: yes
configure:2939: checking for gawk
configure:2966: result: awk
configure:2978: checking whether ln -s works
configure:2982: result: yes
configure:2989: checking whether make sets $(MAKE)
configure:3011: result: yes
configure:3024: checking build system type
configure:3038: result: powerpc-apple-darwin9.8.0
configure:3058: checking host system type
configure:3071: result: powerpc-apple-darwin9.8.0
configure:3103: checking for style of include used by make
configure:3131: result: GNU
configure:3201: checking for gcc
configure:3217: found /usr/bin/gcc
configure:3228: result: gcc
configure:3457: checking for C compiler version
configure:3466: gcc --version >&5
powerpc-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5490)
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:3477: $? = 0
configure:3466: gcc -v >&5
Using built-in specs.
Target: powerpc-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5490~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --program-prefix= --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5490)
configure:3477: $? = 0
configure:3466: gcc -V >&5
gcc-4.0: argument to `-V' is missing
configure:3477: $? = 1
configure:3466: gcc -qversion >&5
powerpc-apple-darwin9-gcc-4.0.1: no input files
configure:3477: $? = 1
configure:3497: checking whether the C compiler works
configure:3519: gcc    conftest.c  >&5
configure:3523: $? = 0
configure:3572: result: yes
configure:3575: checking for C compiler default output file name
configure:3577: result: a.out
configure:3583: checking for suffix of executables
configure:3590: gcc -o conftest    conftest.c  >&5
configure:3594: $? = 0
configure:3616: result: 
configure:3638: checking whether we are cross compiling
configure:3646: gcc -o conftest    conftest.c  >&5
configure:3650: $? = 0
configure:3657: ./conftest
configure:3661: $? = 0
configure:3676: result: no
configure:3681: checking for suffix of object files
configure:3703: gcc -c   conftest.c >&5
configure:3707: $? = 0
configure:3728: result: o
configure:3732: checking whether we are using the GNU C compiler
configure:3751: gcc -c   conftest.c >&5
configure:3751: $? = 0
configure:3760: result: yes
configure:3769: checking whether gcc accepts -g
configure:3789: gcc -c -g  conftest.c >&5
configure:3789: $? = 0
configure:3830: result: yes
configure:3847: checking for gcc option to accept ISO C89
configure:3911: gcc  -c -g -O2  conftest.c >&5
configure:3911: $? = 0
configure:3924: result: none needed
configure:3946: checking dependency style of gcc
configure:4056: result: gcc3
configure:4072: checking whether gcc and cc understand -c and -o together
configure:4103: gcc -c conftest.c -o conftest2.o >&5
configure:4107: $? = 0
configure:4113: gcc -c conftest.c -o conftest2.o >&5
configure:4117: $? = 0
configure:4128: cc -c conftest.c >&5
configure:4132: $? = 0
configure:4140: cc -c conftest.c -o conftest2.o >&5
configure:4144: $? = 0
configure:4150: cc -c conftest.c -o conftest2.o >&5
configure:4154: $? = 0
configure:4172: result: yes
configure:4525: checking for a sed that does not truncate output
configure:4589: result: /opt/local/bin/sed
configure:4607: checking for grep that handles long lines and -e
configure:4665: result: /usr/bin/grep
configure:4670: checking for egrep
configure:4732: result: /usr/bin/grep -E
configure:4737: checking for fgrep
configure:4799: result: /usr/bin/grep -F
configure:4834: checking for ld used by gcc
configure:4901: result: /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
configure:4908: checking if the linker (/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld) is GNU ld
configure:4923: result: no
configure:4935: checking for BSD- or MS-compatible name lister (nm)
configure:4984: result: /usr/bin/nm -p
configure:5102: checking the name lister (/usr/bin/nm -p) interface
configure:5109: gcc -c -g -O2  conftest.c >&5
configure:5112: /usr/bin/nm -p "conftest.o"
configure:5115: output
00000188 D _some_variable
configure:5122: result: BSD nm
configure:5126: checking the maximum length of command line arguments
configure:5246: result: 196608
configure:5263: checking whether the shell understands some XSI constructs
configure:5273: result: yes
configure:5277: checking whether the shell understands "+="
configure:5283: result: yes
configure:5318: checking for /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld option to reload object files
configure:5325: result: -r
configure:5394: checking for objdump
configure:5421: result: objdump
configure:5450: checking how to recognize dependent libraries
configure:5646: result: pass_all
configure:5706: checking for ar
configure:5722: found /usr/bin/ar
configure:5733: result: ar
configure:5811: checking for strip
configure:5827: found /usr/bin/strip
configure:5838: result: strip
configure:5910: checking for ranlib
configure:5926: found /usr/bin/ranlib
configure:5937: result: ranlib
configure:6027: checking command to parse /usr/bin/nm -p output from gcc object
configure:6145: gcc -c -g -O2  conftest.c >&5
configure:6148: $? = 0
configure:6152: /usr/bin/nm -p conftest.o \| sed -n -e 's/^.*[	 ]\([BCDEGRST][BCDEGRST]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' \> conftest.nm
configure:6155: $? = 0
cannot find nm_test_var in conftest.nm
configure:6145: gcc -c -g -O2  conftest.c >&5
configure:6148: $? = 0
configure:6152: /usr/bin/nm -p conftest.o \| sed -n -e 's/^.*[	 ]\([BCDEGRST][BCDEGRST]*\)[	 ][	 ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p' \> conftest.nm
configure:6155: $? = 0
configure:6209: gcc -o conftest -g -O2   conftest.c conftstm.o >&5
configure:6212: $? = 0
configure:6250: result: ok
configure:6515: checking for dsymutil
configure:6531: found /usr/bin/dsymutil
configure:6542: result: dsymutil
configure:6607: checking for nmedit
configure:6623: found /usr/bin/nmedit
configure:6634: result: nmedit
configure:6699: checking for lipo
configure:6715: found /usr/bin/lipo
configure:6726: result: lipo
configure:6791: checking for otool
configure:6807: found /usr/bin/otool
configure:6818: result: otool
configure:6883: checking for otool64
configure:6913: result: no
configure:6958: checking for -single_module linker flag
gcc -g -O2  -o libconftest.dylib -dynamiclib -Wl,-single_module conftest.c
configure:6985: result: yes
configure:6987: checking for -exported_symbols_list linker flag
configure:7007: gcc -o conftest -g -O2   -Wl,-exported_symbols_list,conftest.sym conftest.c  >&5
configure:7007: $? = 0
configure:7017: result: yes
configure:7059: checking how to run the C preprocessor
configure:7090: gcc -E  conftest.c
configure:7090: $? = 0
configure:7104: gcc -E  conftest.c
conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
configure:7104: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libmicrohttpd"
| #define PACKAGE_TARNAME "libmicrohttpd"
| #define PACKAGE_VERSION "0.9.0"
| #define PACKAGE_STRING "libmicrohttpd 0.9.0"
| #define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
| #define PACKAGE_URL ""
| #define PACKAGE "libmicrohttpd"
| #define VERSION "0.9.0"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:7129: result: gcc -E
configure:7149: gcc -E  conftest.c
configure:7149: $? = 0
configure:7163: gcc -E  conftest.c
conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
configure:7163: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libmicrohttpd"
| #define PACKAGE_TARNAME "libmicrohttpd"
| #define PACKAGE_VERSION "0.9.0"
| #define PACKAGE_STRING "libmicrohttpd 0.9.0"
| #define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
| #define PACKAGE_URL ""
| #define PACKAGE "libmicrohttpd"
| #define VERSION "0.9.0"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:7192: checking for ANSI C header files
configure:7212: gcc -c -g -O2  conftest.c >&5
configure:7212: $? = 0
configure:7285: gcc -o conftest -g -O2   conftest.c  >&5
configure:7285: $? = 0
configure:7285: ./conftest
configure:7285: $? = 0
configure:7296: result: yes
configure:7309: checking for sys/types.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for sys/stat.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for stdlib.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for string.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for memory.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for strings.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for inttypes.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for stdint.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7309: checking for unistd.h
configure:7309: gcc -c -g -O2  conftest.c >&5
configure:7309: $? = 0
configure:7309: result: yes
configure:7324: checking for dlfcn.h
configure:7324: gcc -c -g -O2  conftest.c >&5
configure:7324: $? = 0
configure:7324: result: yes
configure:7506: checking for objdir
configure:7521: result: .libs
configure:7817: checking if gcc supports -fno-rtti -fno-exceptions
configure:7835: gcc -c -g -O2  -fno-rtti -fno-exceptions conftest.c >&5
cc1: warning: command line option "-fno-rtti" is valid for C++/ObjC++ but not for C
configure:7839: $? = 0
configure:7852: result: no
configure:7872: checking for gcc option to produce PIC
configure:8144: result: -fno-common -DPIC
configure:8156: checking if gcc PIC flag -fno-common -DPIC works
configure:8174: gcc -c -g -O2  -fno-common -DPIC -DPIC conftest.c >&5
configure:8178: $? = 0
configure:8191: result: yes
configure:8215: checking if gcc static flag -static works
configure:8243: result: no
configure:8258: checking if gcc supports -c -o file.o
configure:8279: gcc -c -g -O2  -o out/conftest2.o conftest.c >&5
configure:8283: $? = 0
configure:8305: result: yes
configure:8313: checking if gcc supports -c -o file.o
configure:8360: result: yes
configure:8393: checking whether the gcc linker (/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld) supports shared libraries
configure:9384: result: yes
configure:9623: checking dynamic linker characteristics
configure:10286: result: darwin9.8.0 dyld
configure:10388: checking how to hardcode library paths into programs
configure:10413: result: immediate
configure:10933: checking whether stripping libraries is possible
configure:10947: result: yes
configure:10973: checking if libtool supports shared libraries
configure:10975: result: yes
configure:10978: checking whether to build shared libraries
configure:10999: result: yes
configure:11002: checking whether to build static libraries
configure:11006: result: yes
configure:11041: checking whether byte ordering is bigendian
configure:11056: gcc -c -g -O2  conftest.c >&5
configure:11056: $? = 0
configure:11101: gcc -c -g -O2  conftest.c >&5
configure:11101: $? = 0
configure:11119: gcc -c -g -O2  conftest.c >&5
configure:11119: $? = 0
configure:11247: result: yes
configure:11497: gcc -o conftest -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2   conftest.c  >&5
configure:11497: $? = 0
configure:11499: result: yes
configure:11675: checking fcntl.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking fcntl.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for fcntl.h
configure:11675: result: yes
configure:11675: checking math.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking math.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for math.h
configure:11675: result: yes
configure:11675: checking errno.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking errno.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for errno.h
configure:11675: result: yes
configure:11675: checking limits.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking limits.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for limits.h
configure:11675: result: yes
configure:11675: checking stdio.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking stdio.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for stdio.h
configure:11675: result: yes
configure:11675: checking locale.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking locale.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for locale.h
configure:11675: result: yes
configure:11675: checking for sys/stat.h
configure:11675: result: yes
configure:11675: checking for sys/types.h
configure:11675: result: yes
configure:11675: checking pthread.h usability
configure:11675: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking pthread.h presence
configure:11675: gcc -E  conftest.c
configure:11675: $? = 0
configure:11675: result: yes
configure:11675: checking for pthread.h
configure:11675: result: yes
configure:11693: checking for sys/types.h
configure:11693: result: yes
configure:11693: checking sys/time.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking sys/time.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for sys/time.h
configure:11693: result: yes
configure:11693: checking sys/msg.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking sys/msg.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for sys/msg.h
configure:11693: result: yes
configure:11693: checking netdb.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking netdb.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for netdb.h
configure:11693: result: yes
configure:11693: checking netinet/in.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking netinet/in.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for netinet/in.h
configure:11693: result: yes
configure:11693: checking netinet/tcp.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking netinet/tcp.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for netinet/tcp.h
configure:11693: result: yes
configure:11693: checking time.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking time.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for time.h
configure:11693: result: yes
configure:11693: checking sys/socket.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking sys/socket.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for sys/socket.h
configure:11693: result: yes
configure:11693: checking sys/mman.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking sys/mman.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for sys/mman.h
configure:11693: result: yes
configure:11693: checking arpa/inet.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking arpa/inet.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for arpa/inet.h
configure:11693: result: yes
configure:11693: checking sys/select.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking sys/select.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for sys/select.h
configure:11693: result: yes
configure:11693: checking poll.h usability
configure:11693: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking poll.h presence
configure:11693: gcc -E  conftest.c
configure:11693: $? = 0
configure:11693: result: yes
configure:11693: checking for poll.h
configure:11693: result: yes
configure:11707: checking for memmem
configure:11707: gcc -o conftest -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2   conftest.c   >&5
Undefined symbols:
  "_memmem", referenced from:
      _main in ccNdWQIz.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
configure:11707: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libmicrohttpd"
| #define PACKAGE_TARNAME "libmicrohttpd"
| #define PACKAGE_VERSION "0.9.0"
| #define PACKAGE_STRING "libmicrohttpd 0.9.0"
| #define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
| #define PACKAGE_URL ""
| #define PACKAGE "libmicrohttpd"
| #define VERSION "0.9.0"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define WORDS_BIGENDIAN 1
| #define OSX 1
| #define HAVE_FCNTL_H 1
| #define HAVE_MATH_H 1
| #define HAVE_ERRNO_H 1
| #define HAVE_LIMITS_H 1
| #define HAVE_STDIO_H 1
| #define HAVE_LOCALE_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_PTHREAD_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYS_MSG_H 1
| #define HAVE_NETDB_H 1
| #define HAVE_NETINET_IN_H 1
| #define HAVE_NETINET_TCP_H 1
| #define HAVE_TIME_H 1
| #define HAVE_SYS_SOCKET_H 1
| #define HAVE_SYS_MMAN_H 1
| #define HAVE_ARPA_INET_H 1
| #define HAVE_SYS_SELECT_H 1
| #define HAVE_POLL_H 1
| /* end confdefs.h.  */
| /* Define memmem to an innocuous variant, in case <limits.h> declares memmem.
|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
| #define memmem innocuous_memmem
| 
| /* System header to define __stub macros and hopefully few prototypes,
|     which can conflict with char memmem (); below.
|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|     <limits.h> exists even on freestanding compilers.  */
| 
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
| 
| #undef memmem
| 
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char memmem ();
| /* The GNU C library defines this for functions which it implements
|     to always fail with ENOSYS.  Some functions are actually named
|     something starting with __ and the normal name is an alias.  */
| #if defined __stub_memmem || defined __stub___memmem
| choke me
| #endif
| 
| int
| main ()
| {
| return memmem ();
|   ;
|   return 0;
| }
configure:11707: result: no
configure:11718: checking for IPv6
configure:11744: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:11744: $? = 0
configure:11756: result: yes
configure:11760: checking whether TCP_CORK is declared
configure:11760: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
conftest.c: In function 'main':
conftest.c:53: error: 'TCP_CORK' undeclared (first use in this function)
conftest.c:53: error: (Each undeclared identifier is reported only once
conftest.c:53: error: for each function it appears in.)
configure:11760: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libmicrohttpd"
| #define PACKAGE_TARNAME "libmicrohttpd"
| #define PACKAGE_VERSION "0.9.0"
| #define PACKAGE_STRING "libmicrohttpd 0.9.0"
| #define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
| #define PACKAGE_URL ""
| #define PACKAGE "libmicrohttpd"
| #define VERSION "0.9.0"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define WORDS_BIGENDIAN 1
| #define OSX 1
| #define HAVE_FCNTL_H 1
| #define HAVE_MATH_H 1
| #define HAVE_ERRNO_H 1
| #define HAVE_LIMITS_H 1
| #define HAVE_STDIO_H 1
| #define HAVE_LOCALE_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_PTHREAD_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYS_MSG_H 1
| #define HAVE_NETDB_H 1
| #define HAVE_NETINET_IN_H 1
| #define HAVE_NETINET_TCP_H 1
| #define HAVE_TIME_H 1
| #define HAVE_SYS_SOCKET_H 1
| #define HAVE_SYS_MMAN_H 1
| #define HAVE_ARPA_INET_H 1
| #define HAVE_SYS_SELECT_H 1
| #define HAVE_POLL_H 1
| #define HAVE_INET6 1
| /* end confdefs.h.  */
| #include <netinet/tcp.h>
| 
| int
| main ()
| {
| #ifndef TCP_CORK
|   (void) TCP_CORK;
| #endif
| 
|   ;
|   return 0;
| }
configure:11760: result: no
configure:11776: checking whether to use libcurl for testing
configure:11824: checking for gawk
configure:11851: result: awk
configure:11913: checking for curl-config
configure:11931: found /usr/bin/curl-config
configure:11943: result: /usr/bin/curl-config
configure:11954: checking for the version of libcurl
configure:11961: result: 7.16.4
configure:12022: checking whether libcurl is usable
configure:12055: gcc -o conftest -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2    conftest.c -lcurl -lssl -lcrypto -lz   >&5
configure:12055: $? = 0
configure:12069: result: yes
configure:12082: checking for curl_free
configure:12082: gcc -o conftest -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2    conftest.c   -lcurl -lssl -lcrypto -lz >&5
configure:12082: $? = 0
configure:12082: result: yes
configure:12200: checking for special C compiler options needed for large files
configure:12245: result: no
configure:12251: checking for _FILE_OFFSET_BITS value needed for large files
configure:12276: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
configure:12276: $? = 0
configure:12308: result: no
configure:12391: checking for _LARGEFILE_SOURCE value needed for large files
configure:12410: gcc -o conftest -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2   conftest.c   >&5
configure:12410: $? = 0
configure:12438: result: no
configure:12461: checking whether to enable error messages
configure:12470: result: no
configure:12483: checking for zzuf
configure:12511: result: 0
configure:12521: checking for socat
configure:12549: result: 0
configure:12592: checking for libgcrypt-config
configure:12610: found /usr/local/bin/libgcrypt-config
configure:12623: result: /usr/local/bin/libgcrypt-config
configure:12640: checking for LIBGCRYPT - version >= 1.2.2
configure:12674: result: yes (1.2.3)
configure:12723: checking for gnutls
configure:12845: result: --with-gnutls not specified
configure:12849: checking gnutls/gnutls.h usability
configure:12849: gcc -c -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2  conftest.c >&5
conftest.c:100:27: error: gnutls/gnutls.h: No such file or directory
configure:12849: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libmicrohttpd"
| #define PACKAGE_TARNAME "libmicrohttpd"
| #define PACKAGE_VERSION "0.9.0"
| #define PACKAGE_STRING "libmicrohttpd 0.9.0"
| #define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
| #define PACKAGE_URL ""
| #define PACKAGE "libmicrohttpd"
| #define VERSION "0.9.0"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define WORDS_BIGENDIAN 1
| #define OSX 1
| #define HAVE_FCNTL_H 1
| #define HAVE_MATH_H 1
| #define HAVE_ERRNO_H 1
| #define HAVE_LIMITS_H 1
| #define HAVE_STDIO_H 1
| #define HAVE_LOCALE_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_PTHREAD_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYS_MSG_H 1
| #define HAVE_NETDB_H 1
| #define HAVE_NETINET_IN_H 1
| #define HAVE_NETINET_TCP_H 1
| #define HAVE_TIME_H 1
| #define HAVE_SYS_SOCKET_H 1
| #define HAVE_SYS_MMAN_H 1
| #define HAVE_ARPA_INET_H 1
| #define HAVE_SYS_SELECT_H 1
| #define HAVE_POLL_H 1
| #define HAVE_INET6 1
| #define HAVE_DECL_TCP_CORK 0
| #define HAVE_LIBCURL 1
| #define LIBCURL_FEATURE_SSL 1
| #define LIBCURL_FEATURE_IPV6 1
| #define LIBCURL_FEATURE_LIBZ 1
| #define LIBCURL_FEATURE_NTLM 1
| #define LIBCURL_PROTOCOL_HTTP 1
| #define LIBCURL_PROTOCOL_HTTPS 1
| #define LIBCURL_PROTOCOL_FTP 1
| #define LIBCURL_PROTOCOL_FTPS 1
| #define LIBCURL_PROTOCOL_FILE 1
| #define LIBCURL_PROTOCOL_TELNET 1
| #define LIBCURL_PROTOCOL_LDAP 1
| #define LIBCURL_PROTOCOL_DICT 1
| #define LIBCURL_PROTOCOL_TFTP 1
| #define MHD_REQ_CURL_VERSION "7.16.4"
| #define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"
| #define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"
| #define HAVE_FSEEKO 1
| #define MHD_GCRYPT_VERSION "1:1.2.2"
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <gnutls/gnutls.h>
configure:12849: result: no
configure:12849: checking gnutls/gnutls.h presence
configure:12849: gcc -E  conftest.c
conftest.c:67:27: error: gnutls/gnutls.h: No such file or directory
configure:12849: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "libmicrohttpd"
| #define PACKAGE_TARNAME "libmicrohttpd"
| #define PACKAGE_VERSION "0.9.0"
| #define PACKAGE_STRING "libmicrohttpd 0.9.0"
| #define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
| #define PACKAGE_URL ""
| #define PACKAGE "libmicrohttpd"
| #define VERSION "0.9.0"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define WORDS_BIGENDIAN 1
| #define OSX 1
| #define HAVE_FCNTL_H 1
| #define HAVE_MATH_H 1
| #define HAVE_ERRNO_H 1
| #define HAVE_LIMITS_H 1
| #define HAVE_STDIO_H 1
| #define HAVE_LOCALE_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_PTHREAD_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYS_MSG_H 1
| #define HAVE_NETDB_H 1
| #define HAVE_NETINET_IN_H 1
| #define HAVE_NETINET_TCP_H 1
| #define HAVE_TIME_H 1
| #define HAVE_SYS_SOCKET_H 1
| #define HAVE_SYS_MMAN_H 1
| #define HAVE_ARPA_INET_H 1
| #define HAVE_SYS_SELECT_H 1
| #define HAVE_POLL_H 1
| #define HAVE_INET6 1
| #define HAVE_DECL_TCP_CORK 0
| #define HAVE_LIBCURL 1
| #define LIBCURL_FEATURE_SSL 1
| #define LIBCURL_FEATURE_IPV6 1
| #define LIBCURL_FEATURE_LIBZ 1
| #define LIBCURL_FEATURE_NTLM 1
| #define LIBCURL_PROTOCOL_HTTP 1
| #define LIBCURL_PROTOCOL_HTTPS 1
| #define LIBCURL_PROTOCOL_FTP 1
| #define LIBCURL_PROTOCOL_FTPS 1
| #define LIBCURL_PROTOCOL_FILE 1
| #define LIBCURL_PROTOCOL_TELNET 1
| #define LIBCURL_PROTOCOL_LDAP 1
| #define LIBCURL_PROTOCOL_DICT 1
| #define LIBCURL_PROTOCOL_TFTP 1
| #define MHD_REQ_CURL_VERSION "7.16.4"
| #define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"
| #define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"
| #define HAVE_FSEEKO 1
| #define MHD_GCRYPT_VERSION "1:1.2.2"
| /* end confdefs.h.  */
| #include <gnutls/gnutls.h>
configure:12849: result: no
configure:12849: checking for gnutls/gnutls.h
configure:12849: result: no
configure:12917: checking whether to enable HTTPS support
configure:12945: result: no (lacking libgcrypt or libgnutls)
configure:12960: checking whether -export-symbols-regex works
configure:12972: result: yes
configure:13195: creating ./config.status

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by libmicrohttpd config.status 0.9.0, which was
generated by GNU Autoconf 2.65.  Invocation command line was

  CONFIG_FILES    = 
  CONFIG_HEADERS  = 
  CONFIG_LINKS    = 
  CONFIG_COMMANDS = 
  $ ./config.status 

on Pandora-2.local

config.status:1160: creating libmicrohttpd.pc
config.status:1160: creating Makefile
config.status:1160: creating contrib/Makefile
config.status:1160: creating doc/Makefile
config.status:1160: creating m4/Makefile
config.status:1160: creating src/Makefile
config.status:1160: creating src/include/Makefile
config.status:1160: creating src/daemon/Makefile
config.status:1160: creating src/examples/Makefile
config.status:1160: creating src/testcurl/Makefile
config.status:1160: creating src/testcurl/https/Makefile
config.status:1160: creating src/testzzuf/Makefile
config.status:1160: creating MHD_config.h
config.status:1380: executing depfiles commands
config.status:1380: executing libtool commands
configure:15471: Configuration Summary:
  Operating System:  darwin9.8.0
  Target directory:  /usr/local
  Messages:          no
  libgcrypt:         yes
  libcurl (testing): yes
  HTTPS support:     no (lacking libgcrypt or libgnutls)

configure:15492:
  License         :  LGPL or eCos


## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=powerpc-apple-darwin9.8.0
ac_cv_c_bigendian=yes
ac_cv_c_compiler_gnu=yes
ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_func_curl_free=yes
ac_cv_func_memmem=no
ac_cv_have_decl_TCP_CORK=no
ac_cv_header_arpa_inet_h=yes
ac_cv_header_dlfcn_h=yes
ac_cv_header_errno_h=yes
ac_cv_header_fcntl_h=yes
ac_cv_header_gnutls_gnutls_h=no
ac_cv_header_inttypes_h=yes
ac_cv_header_limits_h=yes
ac_cv_header_locale_h=yes
ac_cv_header_math_h=yes
ac_cv_header_memory_h=yes
ac_cv_header_netdb_h=yes
ac_cv_header_netinet_in_h=yes
ac_cv_header_netinet_tcp_h=yes
ac_cv_header_poll_h=yes
ac_cv_header_pthread_h=yes
ac_cv_header_stdc=yes
ac_cv_header_stdint_h=yes
ac_cv_header_stdio_h=yes
ac_cv_header_stdlib_h=yes
ac_cv_header_string_h=yes
ac_cv_header_strings_h=yes
ac_cv_header_sys_mman_h=yes
ac_cv_header_sys_msg_h=yes
ac_cv_header_sys_select_h=yes
ac_cv_header_sys_socket_h=yes
ac_cv_header_sys_stat_h=yes
ac_cv_header_sys_time_h=yes
ac_cv_header_sys_types_h=yes
ac_cv_header_time_h=yes
ac_cv_header_unistd_h=yes
ac_cv_host=powerpc-apple-darwin9.8.0
ac_cv_objext=o
ac_cv_path_EGREP='/usr/bin/grep -E'
ac_cv_path_FGREP='/usr/bin/grep -F'
ac_cv_path_GREP=/usr/bin/grep
ac_cv_path_LIBGCRYPT_CONFIG=/usr/local/bin/libgcrypt-config
ac_cv_path_SED=/opt/local/bin/sed
ac_cv_path__libcurl_config=/usr/bin/curl-config
ac_cv_path_install='/opt/local/bin/ginstall -c'
ac_cv_path_mkdir=/opt/local/bin/gmkdir
ac_cv_prog_AWK=awk
ac_cv_prog_CPP='gcc -E'
ac_cv_prog_HAVE_SOCAT=0
ac_cv_prog_HAVE_ZZUF=0
ac_cv_prog_ac_ct_AR=ar
ac_cv_prog_ac_ct_CC=gcc
ac_cv_prog_ac_ct_DSYMUTIL=dsymutil
ac_cv_prog_ac_ct_LIPO=lipo
ac_cv_prog_ac_ct_NMEDIT=nmedit
ac_cv_prog_ac_ct_OBJDUMP=objdump
ac_cv_prog_ac_ct_OTOOL=otool
ac_cv_prog_ac_ct_RANLIB=ranlib
ac_cv_prog_ac_ct_STRIP=strip
ac_cv_prog_cc_c89=
ac_cv_prog_cc_g=yes
ac_cv_prog_cc_gcc_c_o=yes
ac_cv_prog_make_make_set=yes
ac_cv_sys_file_offset_bits=no
ac_cv_sys_largefile_CC=no
ac_cv_sys_largefile_source=no
am_cv_CC_dependencies_compiler_type=gcc3
gn_cv_export_symbols_regex_works=yes
libcurl_cv_lib_curl_usable=yes
libcurl_cv_lib_curl_version=7.16.4
lt_cv_apple_cc_single_mod=yes
lt_cv_deplibs_check_method=pass_all
lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
lt_cv_ld_exported_symbols_list=yes
lt_cv_ld_reload_flag=-r
lt_cv_nm_interface='BSD nm'
lt_cv_objdir=.libs
lt_cv_path_LD=/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
lt_cv_path_NM='/usr/bin/nm -p'
lt_cv_prog_compiler_c_o=yes
lt_cv_prog_compiler_pic_works=yes
lt_cv_prog_compiler_rtti_exceptions=no
lt_cv_prog_compiler_static_works=no
lt_cv_prog_gnu_ld=no
lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[	 ]\([BCDEGRST][BCDEGRST]*\)[	 ][	 ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p'\'''
lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST]* \([^ ]*\) \([^ ]*\)$/  {"\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST]* \([^ ]*\) \(lib[^ ]*\)$/  {"\2", (void *) \&\2},/p'\'' -e '\''s/^[BCDEGRST]* \([^ ]*\) \([^ ]*\)$/  {"lib\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[BCDEGRST]* .* \(.*\)$/extern char \1;/p'\'''
lt_cv_sys_max_cmd_len=196608

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11'
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
AMTAR='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar'
AR='ar'
AS='as'
AUTOCONF='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf'
AUTOHEADER='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader'
AUTOMAKE='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11'
AWK='awk'
CC='gcc'
CCDEPMODE='depmode=gcc3'
CFLAGS='-no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2'
CPP='gcc -E'
CPPFLAGS=''
CYGPATH_W='echo'
DEFS='-DHAVE_CONFIG_H'
DEPDIR='.deps'
DLLTOOL='dlltool'
DSYMUTIL='dsymutil'
DUMPBIN=''
ECHO_C='\c'
ECHO_N=''
ECHO_T=''
EGREP='/usr/bin/grep -E'
ENABLE_HTTPS_FALSE=''
ENABLE_HTTPS_TRUE='#'
ENABLE_MINITASN1_FALSE='#'
ENABLE_MINITASN1_TRUE=''
ENABLE_OPENSSL_FALSE=''
ENABLE_OPENSSL_TRUE='#'
EXEEXT=''
EXT_LIBS=''
EXT_LIB_PATH=''
FGREP='/usr/bin/grep -F'
GREP='/usr/bin/grep'
HAVE_CURL_FALSE='#'
HAVE_CURL_TRUE=''
HAVE_GNUTLS_FALSE=''
HAVE_GNUTLS_TRUE='#'
HAVE_GNU_LD_FALSE=''
HAVE_GNU_LD_TRUE='#'
HAVE_LD_OUTPUT_DEF_FALSE=''
HAVE_LD_OUTPUT_DEF_TRUE='#'
HAVE_LD_VERSION_SCRIPT_FALSE=''
HAVE_LD_VERSION_SCRIPT_TRUE='#'
HAVE_SOCAT='0'
HAVE_SOCAT_FALSE=''
HAVE_SOCAT_TRUE='#'
HAVE_ZZUF='0'
HAVE_ZZUF_FALSE=''
HAVE_ZZUF_TRUE='#'
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
LD='/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld'
LDFLAGS=''
LIBCURL='-lcurl -lssl -lcrypto -lz'
LIBCURL_CPPFLAGS=''
LIBGCRYPT_CFLAGS='-I/usr/local/include  -I/usr/local/include'
LIBGCRYPT_CONFIG='/usr/local/bin/libgcrypt-config'
LIBGCRYPT_LIBS='-L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error'
LIBOBJS=''
LIBS=' '
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
LIB_VERSION_AGE='0'
LIB_VERSION_CURRENT='8'
LIB_VERSION_REVISION='0'
LIPO='lipo'
LN_S='ln -s'
LTLIBOBJS=''
MAKEINFO='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo'
MHD_LIBDEPS=''
MHD_LIB_LDFLAGS='-export-dynamic -no-undefined'
MKDIR_P='/opt/local/bin/gmkdir -p'
NM='/usr/bin/nm -p'
NMEDIT='nmedit'
OBJDUMP='objdump'
OBJEXT='o'
OTOOL64=':'
OTOOL='otool'
PACKAGE='libmicrohttpd'
PACKAGE_BUGREPORT='libmicrohttpd@gnu.org'
PACKAGE_NAME='libmicrohttpd'
PACKAGE_STRING='libmicrohttpd 0.9.0'
PACKAGE_TARNAME='libmicrohttpd'
PACKAGE_URL=''
PACKAGE_VERSION='0.9.0'
PATH_SEPARATOR=':'
PTHREAD_CPPFLAGS=''
PTHREAD_LDFLAGS=''
PTHREAD_LIBS=''
RANLIB='ranlib'
SED='/opt/local/bin/sed'
SET_MAKE=''
SHELL='/bin/sh'
STRIP='strip'
USE_COVERAGE_FALSE=''
USE_COVERAGE_TRUE='#'
VERSION='0.9.0'
_libcurl_config=''
ac_ct_CC='gcc'
ac_ct_DUMPBIN=''
am__EXEEXT_FALSE=''
am__EXEEXT_TRUE='#'
am__fastdepCC_FALSE='#'
am__fastdepCC_TRUE=''
am__include='include'
am__isrc=''
am__leading_dot='.'
am__quote=''
am__tar='${AMTAR} chof - "$$tardir"'
am__untar='${AMTAR} xf -'
bindir='${exec_prefix}/bin'
build='powerpc-apple-darwin9.8.0'
build_alias=''
build_cpu='powerpc'
build_os='darwin9.8.0'
build_vendor='apple'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='${prefix}'
host='powerpc-apple-darwin9.8.0'
host_alias=''
host_cpu='powerpc'
host_os='darwin9.8.0'
host_vendor='apple'
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
lt_ECHO='/bin/echo'
mandir='${datarootdir}/man'
mkdir_p='/opt/local/bin/gmkdir -p'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='/usr/local'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "libmicrohttpd"
#define PACKAGE_TARNAME "libmicrohttpd"
#define PACKAGE_VERSION "0.9.0"
#define PACKAGE_STRING "libmicrohttpd 0.9.0"
#define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"
#define PACKAGE_URL ""
#define PACKAGE "libmicrohttpd"
#define VERSION "0.9.0"
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define HAVE_DLFCN_H 1
#define LT_OBJDIR ".libs/"
#define WORDS_BIGENDIAN 1
#define OSX 1
#define HAVE_FCNTL_H 1
#define HAVE_MATH_H 1
#define HAVE_ERRNO_H 1
#define HAVE_LIMITS_H 1
#define HAVE_STDIO_H 1
#define HAVE_LOCALE_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_PTHREAD_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_MSG_H 1
#define HAVE_NETDB_H 1
#define HAVE_NETINET_IN_H 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_TIME_H 1
#define HAVE_SYS_SOCKET_H 1
#define HAVE_SYS_MMAN_H 1
#define HAVE_ARPA_INET_H 1
#define HAVE_SYS_SELECT_H 1
#define HAVE_POLL_H 1
#define HAVE_INET6 1
#define HAVE_DECL_TCP_CORK 0
#define HAVE_LIBCURL 1
#define LIBCURL_FEATURE_SSL 1
#define LIBCURL_FEATURE_IPV6 1
#define LIBCURL_FEATURE_LIBZ 1
#define LIBCURL_FEATURE_NTLM 1
#define LIBCURL_PROTOCOL_HTTP 1
#define LIBCURL_PROTOCOL_HTTPS 1
#define LIBCURL_PROTOCOL_FTP 1
#define LIBCURL_PROTOCOL_FTPS 1
#define LIBCURL_PROTOCOL_FILE 1
#define LIBCURL_PROTOCOL_TELNET 1
#define LIBCURL_PROTOCOL_LDAP 1
#define LIBCURL_PROTOCOL_DICT 1
#define LIBCURL_PROTOCOL_TFTP 1
#define MHD_REQ_CURL_VERSION "7.16.4"
#define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"
#define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"
#define HAVE_FSEEKO 1
#define MHD_GCRYPT_VERSION "1:1.2.2"
#define HAVE_GNUTLS 0
#define HTTPS_SUPPORT 0

configure: exit 0

Added luasupport/HTTP/libmicrohttpd-0.9.0/config.status.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
#! /bin/sh
# Generated by configure.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.

debug=false
ac_cs_recheck=false
ac_cs_silent=false

SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi


as_nl='
'
export as_nl
# Printing a long string crashes Solaris 7 /usr/bin/printf.
as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
# Prefer a ksh shell builtin over an external printf program on Solaris,
# but without wasting forks for bash or zsh.
if test -z "$BASH_VERSION$ZSH_VERSION" \
    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
  as_echo='print -r --'
  as_echo_n='print -rn --'
elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
  as_echo='printf %s\n'
  as_echo_n='printf %s'
else
  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
    as_echo_n='/usr/ucb/echo -n'
  else
    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
    as_echo_n_body='eval
      arg=$1;
      case $arg in #(
      *"$as_nl"*)
	expr "X$arg" : "X\\(.*\\)$as_nl";
	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
      esac;
      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
    '
    export as_echo_n_body
    as_echo_n='sh -c $as_echo_n_body as_echo'
  fi
  export as_echo_body
  as_echo='sh -c $as_echo_body as_echo'
fi

# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# IFS
# We need space, tab and new line, in precisely that order.  Quoting is
# there to prevent editors from complaining about space-tab.
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
# splitting by setting IFS to empty value.)
IFS=" ""	$as_nl"

# Find who we are.  Look in the path if we contain no directory separator.
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi

# Unset variables that we do not need and which cause bugs (e.g. in
# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
# suppresses any "Segmentation fault" message there.  '((' could
# trigger a bug in pdksh 5.2.14.
for as_var in BASH_ENV ENV MAIL MAILPATH
do eval test x\${$as_var+set} = xset \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done
PS1='$ '
PS2='> '
PS4='+ '

# NLS nuisances.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# CDPATH.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH


# as_fn_error ERROR [LINENO LOG_FD]
# ---------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with status $?, using 1 if that was 0.
as_fn_error ()
{
  as_status=$?; test $as_status -eq 0 && as_status=1
  if test "$3"; then
    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
  fi
  $as_echo "$as_me: error: $1" >&2
  as_fn_exit $as_status
} # as_fn_error


# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit

# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith


if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits

ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -p'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -p'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -p'
  fi
else
  as_ln_s='cp -p'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null


# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"


} # as_fn_mkdir_p
if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi

if test -x / >/dev/null 2>&1; then
  as_test_x='test -x'
else
  if ls -dL / >/dev/null 2>&1; then
    as_ls_L_option=L
  else
    as_ls_L_option=
  fi
  as_test_x='
    eval sh -c '\''
      if test -d "$1"; then
	test -d "$1/.";
      else
	case $1 in #(
	-*)set "./$1";;
	esac;
	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
	???[sx]*):;;*)false;;esac;fi
    '\'' sh
  '
fi
as_executable_p=$as_test_x

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"


exec 6>&1
## ----------------------------------- ##
## Main body of $CONFIG_STATUS script. ##
## ----------------------------------- ##
# Save the log message, to keep $0 and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by libmicrohttpd $as_me 0.9.0, which was
generated by GNU Autoconf 2.65.  Invocation command line was

  CONFIG_FILES    = $CONFIG_FILES
  CONFIG_HEADERS  = $CONFIG_HEADERS
  CONFIG_LINKS    = $CONFIG_LINKS
  CONFIG_COMMANDS = $CONFIG_COMMANDS
  $ $0 $@

on `(hostname || uname -n) 2>/dev/null | sed 1q`
"

# Files that config.status was made for.
config_files=" libmicrohttpd.pc Makefile contrib/Makefile doc/Makefile m4/Makefile src/Makefile src/include/Makefile src/daemon/Makefile src/examples/Makefile src/testcurl/Makefile src/testcurl/https/Makefile src/testzzuf/Makefile"
config_headers=" MHD_config.h"
config_commands=" depfiles libtool"

ac_cs_usage="\
\`$as_me' instantiates files and other configuration actions
from templates according to the current configuration.  Unless the files
and actions are specified as TAGs, all are instantiated by default.

Usage: $0 [OPTION]... [TAG]...

  -h, --help       print this help, then exit
  -V, --version    print version number and configuration settings, then exit
      --config     print configuration, then exit
  -q, --quiet, --silent
                   do not print progress messages
  -d, --debug      don't remove temporary files
      --recheck    update $as_me by reconfiguring in the same conditions
      --file=FILE[:TEMPLATE]
                   instantiate the configuration file FILE
      --header=FILE[:TEMPLATE]
                   instantiate the configuration header FILE

Configuration files:
$config_files

Configuration headers:
$config_headers

Configuration commands:
$config_commands

Report bugs to <libmicrohttpd@gnu.org>."

ac_cs_config=""
ac_cs_version="\
libmicrohttpd config.status 0.9.0
configured by ./configure, generated by GNU Autoconf 2.65,
  with options \"$ac_cs_config\"

Copyright (C) 2009 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."

ac_pwd='/Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0'
srcdir='.'
INSTALL='/opt/local/bin/ginstall -c'
MKDIR_P='/opt/local/bin/gmkdir -p'
AWK='awk'
test -n "$AWK" || AWK=awk
# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
  case $1 in
  --*=*)
    ac_option=`expr "X$1" : 'X\([^=]*\)='`
    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
    ac_shift=:
    ;;
  *)
    ac_option=$1
    ac_optarg=$2
    ac_shift=shift
    ;;
  esac

  case $ac_option in
  # Handling of the options.
  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
    ac_cs_recheck=: ;;
  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
    $as_echo "$ac_cs_version"; exit ;;
  --config | --confi | --conf | --con | --co | --c )
    $as_echo "$ac_cs_config"; exit ;;
  --debug | --debu | --deb | --de | --d | -d )
    debug=: ;;
  --file | --fil | --fi | --f )
    $ac_shift
    case $ac_optarg in
    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac
    as_fn_append CONFIG_FILES " '$ac_optarg'"
    ac_need_defaults=false;;
  --header | --heade | --head | --hea )
    $ac_shift
    case $ac_optarg in
    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac
    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
    ac_need_defaults=false;;
  --he | --h)
    # Conflict between --help and --header
    as_fn_error "ambiguous option: \`$1'
Try \`$0 --help' for more information.";;
  --help | --hel | -h )
    $as_echo "$ac_cs_usage"; exit ;;
  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil | --si | --s)
    ac_cs_silent=: ;;

  # This is an error.
  -*) as_fn_error "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;

  *) as_fn_append ac_config_targets " $1"
     ac_need_defaults=false ;;

  esac
  shift
done

ac_configure_extra_args=

if $ac_cs_silent; then
  exec 6>/dev/null
  ac_configure_extra_args="$ac_configure_extra_args --silent"
fi

if $ac_cs_recheck; then
  set X '/bin/sh' './configure'  $ac_configure_extra_args --no-create --no-recursion
  shift
  $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6
  CONFIG_SHELL='/bin/sh'
  export CONFIG_SHELL
  exec "$@"
fi

exec 5>>config.log
{
  echo
  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
  $as_echo "$ac_log"
} >&5

#
# INIT-COMMANDS
#
AMDEP_TRUE="" ac_aux_dir="."


# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
double_quote_subst='s/\(["`\\]\)/\\\1/g'
delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
AS='as'
DLLTOOL='dlltool'
OBJDUMP='objdump'
macro_version='2.2.6b'
macro_revision='1.3017'
enable_shared='yes'
enable_static='yes'
pic_mode='default'
enable_fast_install='needless'
host_alias=''
host='powerpc-apple-darwin9.8.0'
host_os='darwin9.8.0'
build_alias=''
build='powerpc-apple-darwin9.8.0'
build_os='darwin9.8.0'
SED='/opt/local/bin/sed'
Xsed='/opt/local/bin/sed -e 1s/^X//'
GREP='/usr/bin/grep'
EGREP='/usr/bin/grep -E'
FGREP='/usr/bin/grep -F'
LD='/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld'
NM='/usr/bin/nm -p'
LN_S='ln -s'
max_cmd_len='196608'
ac_objext='o'
exeext=''
lt_unset='unset'
lt_SP2NL='tr \040 \012'
lt_NL2SP='tr \015\012 \040\040'
reload_flag=' -r'
reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
deplibs_check_method='pass_all'
file_magic_cmd='$MAGIC_CMD'
AR='ar'
AR_FLAGS='cru'
STRIP='strip'
RANLIB='ranlib'
old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $oldlib'
old_postuninstall_cmds=''
old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $oldlib'
CC='gcc'
CFLAGS='-no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2'
compiler='gcc'
GCC='yes'
lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[	 ]\([BCDEGRST][BCDEGRST]*\)[	 ][	 ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p'\'''
lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[BCDEGRST]* .* \(.*\)$/extern char \1;/p'\'''
lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST]* \([^ ]*\) \([^ ]*\)$/  {"\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\) $/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[BCDEGRST]* \([^ ]*\) \(lib[^ ]*\)$/  {"\2", (void *) \&\2},/p'\'' -e '\''s/^[BCDEGRST]* \([^ ]*\) \([^ ]*\)$/  {"lib\2", (void *) \&\2},/p'\'''
objdir='.libs'
SHELL='/bin/sh'
ECHO='/bin/echo'
MAGIC_CMD='file'
lt_prog_compiler_no_builtin_flag=' -fno-builtin'
lt_prog_compiler_wl='-Wl,'
lt_prog_compiler_pic=' -fno-common -DPIC'
lt_prog_compiler_static=''
lt_cv_prog_compiler_c_o='yes'
need_locks='no'
DSYMUTIL='dsymutil'
NMEDIT='nmedit'
LIPO='lipo'
OTOOL='otool'
OTOOL64=':'
libext='a'
shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
extract_expsyms_cmds=''
archive_cmds_need_lc='no'
enable_shared_with_static_runtimes='no'
export_dynamic_flag_spec=''
whole_archive_flag_spec=''
compiler_needs_object='no'
old_archive_from_new_cmds=''
old_archive_from_expsyms_cmds=''
archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring $single_module~$DSYMUTIL $lib || :'
archive_expsym_cmds='sed '\''s,^,_,'\'' < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring $single_module ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym~$DSYMUTIL $lib || :'
module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs $compiler_flags~$DSYMUTIL $lib || :'
module_expsym_cmds='sed -e '\''s,^,_,'\'' < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs $compiler_flags ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym~$DSYMUTIL $lib || :'
with_gnu_ld='no'
allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
no_undefined_flag=''
hardcode_libdir_flag_spec=''
hardcode_libdir_flag_spec_ld=''
hardcode_libdir_separator=''
hardcode_direct='no'
hardcode_direct_absolute='no'
hardcode_minus_L='no'
hardcode_shlibpath_var='unsupported'
hardcode_automatic='yes'
inherit_rpath='no'
link_all_deplibs='yes'
fix_srcfile_path=''
always_export_symbols='no'
export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
include_expsyms=''
prelink_cmds=''
file_list_spec=''
variables_saved_for_relink='PATH DYLD_LIBRARY_PATH  GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH'
need_lib_prefix='no'
need_version='no'
version_type='darwin'
runpath_var=''
shlibpath_var='DYLD_LIBRARY_PATH'
shlibpath_overrides_runpath='yes'
libname_spec='lib$name'
library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
soname_spec='${libname}${release}${major}$shared_ext'
postinstall_cmds=''
postuninstall_cmds=''
finish_cmds=''
finish_eval=''
hardcode_into_libs='no'
sys_lib_search_path_spec='/usr/lib/powerpc-apple-darwin9/4.0.1 /usr/lib /usr/lib/gcc/powerpc-apple-darwin9/4.0.1 /usr/local/lib'
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
hardcode_action='immediate'
enable_dlopen='unknown'
enable_dlopen_self='unknown'
enable_dlopen_self_static='unknown'
old_striplib='strip -S'
striplib='strip -x'

LTCC='gcc'
LTCFLAGS='-g -O2'
compiler='gcc'

# Quote evaled strings.
for var in SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag deplibs_check_method file_magic_cmd AR AR_FLAGS STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix SHELL ECHO lt_prog_compiler_no_builtin_flag lt_prog_compiler_wl lt_prog_compiler_pic lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_flag_spec_ld hardcode_libdir_separator fix_srcfile_path exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec finish_eval old_striplib striplib; do
    case `eval \\$ECHO "X\\$$var"` in
    *[\\\`\"\$]*)
      eval "lt_$var=\\\"\`\$ECHO \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
      ;;
    *)
      eval "lt_$var=\\\"\$$var\\\""
      ;;
    esac
done

# Double-quote double-evaled strings.
for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec; do
    case `eval \\$ECHO "X\\$$var"` in
    *[\\\`\"\$]*)
      eval "lt_$var=\\\"\`\$ECHO \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
      ;;
    *)
      eval "lt_$var=\\\"\$$var\\\""
      ;;
    esac
done

# Fix-up fallback echo if it was mangled by the above quoting rules.
case $lt_ECHO in
*'\$0 --fallback-echo"')  lt_ECHO=`$ECHO "X$lt_ECHO" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
  ;;
esac

ac_aux_dir='.'
xsi_shell='yes'
lt_shell_append='yes'

# See if we are running on zsh, and set the options which allow our
# commands through without removal of \ escapes INIT.
if test -n "${ZSH_VERSION+set}" ; then
   setopt NO_GLOB_SUBST
fi


    PACKAGE='libmicrohttpd'
    VERSION='0.9.0'
    TIMESTAMP=''
    RM='rm -f'
    ofile='libtool'





# Handling of arguments.
for ac_config_target in $ac_config_targets
do
  case $ac_config_target in
    "MHD_config.h") CONFIG_HEADERS="$CONFIG_HEADERS MHD_config.h" ;;
    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
    "libmicrohttpd.pc") CONFIG_FILES="$CONFIG_FILES libmicrohttpd.pc" ;;
    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
    "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
    "src/include/Makefile") CONFIG_FILES="$CONFIG_FILES src/include/Makefile" ;;
    "src/daemon/Makefile") CONFIG_FILES="$CONFIG_FILES src/daemon/Makefile" ;;
    "src/examples/Makefile") CONFIG_FILES="$CONFIG_FILES src/examples/Makefile" ;;
    "src/testcurl/Makefile") CONFIG_FILES="$CONFIG_FILES src/testcurl/Makefile" ;;
    "src/testcurl/https/Makefile") CONFIG_FILES="$CONFIG_FILES src/testcurl/https/Makefile" ;;
    "src/testzzuf/Makefile") CONFIG_FILES="$CONFIG_FILES src/testzzuf/Makefile" ;;

  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
  esac
done


# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used.  Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
fi

# Have a temporary directory for convenience.  Make it in the build tree
# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
# Hook for its removal unless debugging.
# Note that there is a small window in which the directory will not be cleaned:
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
  tmp=
  trap 'exit_status=$?
  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
' 0
  trap 'as_fn_exit 1' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.

{
  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
  test -n "$tmp" && test -d "$tmp"
}  ||
{
  tmp=./conf$$-$RANDOM
  (umask 077 && mkdir "$tmp")
} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5

# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
# This happens for instance with `./config.status config.h'.
if test -n "$CONFIG_FILES"; then


ac_cr=`echo X | tr X '\015'`
# On cygwin, bash can eat \r inside `` if the user requested igncr.
# But we know of no other shell where ac_cr would be empty at this
# point, so we can use a bashism as a fallback.
if test "x$ac_cr" = x; then
  eval ac_cr=\$\'\\r\'
fi
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
  ac_cs_awk_cr='\r'
else
  ac_cs_awk_cr=$ac_cr
fi

echo 'BEGIN {' >"$tmp/subs1.awk" &&
cat >>"$tmp/subs1.awk" <<\_ACAWK &&
S["HAVE_LD_VERSION_SCRIPT_FALSE"]=""
S["HAVE_LD_VERSION_SCRIPT_TRUE"]=""
S["HAVE_LD_OUTPUT_DEF_FALSE"]=""
S["HAVE_LD_OUTPUT_DEF_TRUE"]=""
S["ENABLE_OPENSSL_FALSE"]=""
S["ENABLE_OPENSSL_TRUE"]=""
S["ENABLE_MINITASN1_FALSE"]=""
S["ENABLE_MINITASN1_TRUE"]=""
S["am__EXEEXT_FALSE"]=""
S["am__EXEEXT_TRUE"]="#"
S["LTLIBOBJS"]=""
S["LIBOBJS"]=""
S["EXT_LIBS"]=""
S["EXT_LIB_PATH"]=""
S["MHD_LIBDEPS"]=""
S["MHD_LIB_LDFLAGS"]="-export-dynamic -no-undefined"
S["USE_COVERAGE_FALSE"]=""
S["USE_COVERAGE_TRUE"]="#"
S["ENABLE_HTTPS_FALSE"]=""
S["ENABLE_HTTPS_TRUE"]="#"
S["HAVE_GNUTLS_FALSE"]=""
S["HAVE_GNUTLS_TRUE"]="#"
S["LIBGCRYPT_LIBS"]="-L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error"
S["LIBGCRYPT_CFLAGS"]="-I/usr/local/include  -I/usr/local/include"
S["LIBGCRYPT_CONFIG"]="/usr/local/bin/libgcrypt-config"
S["HAVE_SOCAT_FALSE"]=""
S["HAVE_SOCAT_TRUE"]="#"
S["HAVE_ZZUF_FALSE"]=""
S["HAVE_ZZUF_TRUE"]="#"
S["HAVE_SOCAT"]="0"
S["HAVE_ZZUF"]="0"
S["HAVE_CURL_FALSE"]="#"
S["HAVE_CURL_TRUE"]=""
S["LIBCURL"]="-lcurl -lssl -lcrypto -lz"
S["LIBCURL_CPPFLAGS"]=""
S["_libcurl_config"]=""
S["PTHREAD_CPPFLAGS"]=""
S["PTHREAD_LDFLAGS"]=""
S["PTHREAD_LIBS"]=""
S["HAVE_GNU_LD_FALSE"]=""
S["HAVE_GNU_LD_TRUE"]="#"
S["CPP"]="gcc -E"
S["OTOOL64"]=":"
S["OTOOL"]="otool"
S["LIPO"]="lipo"
S["NMEDIT"]="nmedit"
S["DSYMUTIL"]="dsymutil"
S["lt_ECHO"]="/bin/echo"
S["RANLIB"]="ranlib"
S["AR"]="ar"
S["NM"]="/usr/bin/nm -p"
S["ac_ct_DUMPBIN"]=""
S["DUMPBIN"]=""
S["LD"]="/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld"
S["FGREP"]="/usr/bin/grep -F"
S["EGREP"]="/usr/bin/grep -E"
S["GREP"]="/usr/bin/grep"
S["SED"]="/opt/local/bin/sed"
S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool"
S["OBJDUMP"]="objdump"
S["DLLTOOL"]="dlltool"
S["AS"]="as"
S["am__fastdepCC_FALSE"]="#"
S["am__fastdepCC_TRUE"]=""
S["CCDEPMODE"]="depmode=gcc3"
S["AMDEPBACKSLASH"]="\\"
S["AMDEP_FALSE"]="#"
S["AMDEP_TRUE"]=""
S["am__quote"]=""
S["am__include"]="include"
S["DEPDIR"]=".deps"
S["OBJEXT"]="o"
S["EXEEXT"]=""
S["ac_ct_CC"]="gcc"
S["CPPFLAGS"]=""
S["LDFLAGS"]=""
S["CFLAGS"]="-no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2"
S["CC"]="gcc"
S["host_os"]="darwin9.8.0"
S["host_vendor"]="apple"
S["host_cpu"]="powerpc"
S["host"]="powerpc-apple-darwin9.8.0"
S["build_os"]="darwin9.8.0"
S["build_vendor"]="apple"
S["build_cpu"]="powerpc"
S["build"]="powerpc-apple-darwin9.8.0"
S["LN_S"]="ln -s"
S["LIB_VERSION_AGE"]="0"
S["LIB_VERSION_REVISION"]="0"
S["LIB_VERSION_CURRENT"]="8"
S["am__untar"]="${AMTAR} xf -"
S["am__tar"]="${AMTAR} chof - \"$$tardir\""
S["AMTAR"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar"
S["am__leading_dot"]="."
S["SET_MAKE"]=""
S["AWK"]="awk"
S["mkdir_p"]="/opt/local/bin/gmkdir -p"
S["MKDIR_P"]="/opt/local/bin/gmkdir -p"
S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
S["STRIP"]="strip"
S["install_sh"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh"
S["MAKEINFO"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo"
S["AUTOHEADER"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader"
S["AUTOMAKE"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11"
S["AUTOCONF"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf"
S["ACLOCAL"]="${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11"
S["VERSION"]="0.9.0"
S["PACKAGE"]="libmicrohttpd"
S["CYGPATH_W"]="echo"
S["am__isrc"]=""
S["INSTALL_DATA"]="${INSTALL} -m 644"
S["INSTALL_SCRIPT"]="${INSTALL}"
S["INSTALL_PROGRAM"]="${INSTALL}"
S["target_alias"]=""
S["host_alias"]=""
S["build_alias"]=""
S["LIBS"]=" "
S["ECHO_T"]=""
S["ECHO_N"]=""
S["ECHO_C"]="\\c"
S["DEFS"]="-DHAVE_CONFIG_H"
S["mandir"]="${datarootdir}/man"
S["localedir"]="${datarootdir}/locale"
S["libdir"]="${exec_prefix}/lib"
S["psdir"]="${docdir}"
S["pdfdir"]="${docdir}"
S["dvidir"]="${docdir}"
S["htmldir"]="${docdir}"
S["infodir"]="${datarootdir}/info"
S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}"
S["oldincludedir"]="/usr/include"
S["includedir"]="${prefix}/include"
S["localstatedir"]="${prefix}/var"
S["sharedstatedir"]="${prefix}/com"
S["sysconfdir"]="${prefix}/etc"
S["datadir"]="${datarootdir}"
S["datarootdir"]="${prefix}/share"
S["libexecdir"]="${exec_prefix}/libexec"
S["sbindir"]="${exec_prefix}/sbin"
S["bindir"]="${exec_prefix}/bin"
S["program_transform_name"]="s,x,x,"
S["prefix"]="/usr/local"
S["exec_prefix"]="${prefix}"
S["PACKAGE_URL"]=""
S["PACKAGE_BUGREPORT"]="libmicrohttpd@gnu.org"
S["PACKAGE_STRING"]="libmicrohttpd 0.9.0"
S["PACKAGE_VERSION"]="0.9.0"
S["PACKAGE_TARNAME"]="libmicrohttpd"
S["PACKAGE_NAME"]="libmicrohttpd"
S["PATH_SEPARATOR"]=":"
S["SHELL"]="/bin/sh"
_ACAWK
cat >>"$tmp/subs1.awk" <<_ACAWK &&
  for (key in S) S_is_set[key] = 1
  FS = ""

}
{
  line = $ 0
  nfields = split(line, field, "@")
  substed = 0
  len = length(field[1])
  for (i = 2; i < nfields; i++) {
    key = field[i]
    keylen = length(key)
    if (S_is_set[key]) {
      value = S[key]
      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
      len += length(value) + length(field[++i])
      substed = 1
    } else
      len += 1 + keylen
  }

  print line
}

_ACAWK
if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
else
  cat
fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
  || as_fn_error "could not setup config files machinery" "$LINENO" 5
fi # test -n "$CONFIG_FILES"

# Set up the scripts for CONFIG_HEADERS section.
# No need to generate them if there are no CONFIG_HEADERS.
# This happens for instance with `./config.status Makefile'.
if test -n "$CONFIG_HEADERS"; then
cat >"$tmp/defines.awk" <<\_ACAWK ||
BEGIN {
D["PACKAGE_NAME"]=" \"libmicrohttpd\""
D["PACKAGE_TARNAME"]=" \"libmicrohttpd\""
D["PACKAGE_VERSION"]=" \"0.9.0\""
D["PACKAGE_STRING"]=" \"libmicrohttpd 0.9.0\""
D["PACKAGE_BUGREPORT"]=" \"libmicrohttpd@gnu.org\""
D["PACKAGE_URL"]=" \"\""
D["PACKAGE"]=" \"libmicrohttpd\""
D["VERSION"]=" \"0.9.0\""
D["STDC_HEADERS"]=" 1"
D["HAVE_SYS_TYPES_H"]=" 1"
D["HAVE_SYS_STAT_H"]=" 1"
D["HAVE_STDLIB_H"]=" 1"
D["HAVE_STRING_H"]=" 1"
D["HAVE_MEMORY_H"]=" 1"
D["HAVE_STRINGS_H"]=" 1"
D["HAVE_INTTYPES_H"]=" 1"
D["HAVE_STDINT_H"]=" 1"
D["HAVE_UNISTD_H"]=" 1"
D["HAVE_DLFCN_H"]=" 1"
D["LT_OBJDIR"]=" \".libs/\""
D["WORDS_BIGENDIAN"]=" 1"
D["OSX"]=" 1"
D["HAVE_FCNTL_H"]=" 1"
D["HAVE_MATH_H"]=" 1"
D["HAVE_ERRNO_H"]=" 1"
D["HAVE_LIMITS_H"]=" 1"
D["HAVE_STDIO_H"]=" 1"
D["HAVE_LOCALE_H"]=" 1"
D["HAVE_SYS_STAT_H"]=" 1"
D["HAVE_SYS_TYPES_H"]=" 1"
D["HAVE_PTHREAD_H"]=" 1"
D["HAVE_SYS_TYPES_H"]=" 1"
D["HAVE_SYS_TIME_H"]=" 1"
D["HAVE_SYS_MSG_H"]=" 1"
D["HAVE_NETDB_H"]=" 1"
D["HAVE_NETINET_IN_H"]=" 1"
D["HAVE_NETINET_TCP_H"]=" 1"
D["HAVE_TIME_H"]=" 1"
D["HAVE_SYS_SOCKET_H"]=" 1"
D["HAVE_SYS_MMAN_H"]=" 1"
D["HAVE_ARPA_INET_H"]=" 1"
D["HAVE_SYS_SELECT_H"]=" 1"
D["HAVE_POLL_H"]=" 1"
D["HAVE_INET6"]=" 1"
D["HAVE_DECL_TCP_CORK"]=" 0"
D["HAVE_LIBCURL"]=" 1"
D["LIBCURL_FEATURE_SSL"]=" 1"
D["LIBCURL_FEATURE_IPV6"]=" 1"
D["LIBCURL_FEATURE_LIBZ"]=" 1"
D["LIBCURL_FEATURE_NTLM"]=" 1"
D["LIBCURL_PROTOCOL_HTTP"]=" 1"
D["LIBCURL_PROTOCOL_HTTPS"]=" 1"
D["LIBCURL_PROTOCOL_FTP"]=" 1"
D["LIBCURL_PROTOCOL_FTPS"]=" 1"
D["LIBCURL_PROTOCOL_FILE"]=" 1"
D["LIBCURL_PROTOCOL_TELNET"]=" 1"
D["LIBCURL_PROTOCOL_LDAP"]=" 1"
D["LIBCURL_PROTOCOL_DICT"]=" 1"
D["LIBCURL_PROTOCOL_TFTP"]=" 1"
D["MHD_REQ_CURL_VERSION"]=" \"7.16.4\""
D["MHD_REQ_CURL_OPENSSL_VERSION"]=" \"0.9.8\""
D["MHD_REQ_CURL_GNUTLS_VERSION"]=" \"2.2.3\""
D["HAVE_FSEEKO"]=" 1"
D["MHD_GCRYPT_VERSION"]=" \"1:1.2.2\""
D["HAVE_GNUTLS"]=" 0"
D["HTTPS_SUPPORT"]=" 0"
  for (key in D) D_is_set[key] = 1
  FS = ""
}
/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ {
  line = $ 0
  split(line, arg, " ")
  if (arg[1] == "#") {
    defundef = arg[2]
    mac1 = arg[3]
  } else {
    defundef = substr(arg[1], 2)
    mac1 = arg[2]
  }
  split(mac1, mac2, "(") #)
  macro = mac2[1]
  prefix = substr(line, 1, index(line, defundef) - 1)
  if (D_is_set[macro]) {
    # Preserve the white space surrounding the "#".
    print prefix "define", macro P[macro] D[macro]
    next
  } else {
    # Replace #undef with comments.  This is necessary, for example,
    # in the case of _POSIX_SOURCE, which is predefined and required
    # on some systems where configure will not decide to define it.
    if (defundef == "undef") {
      print "/*", prefix defundef, macro, "*/"
      next
    }
  }
}
{ print }
_ACAWK
  as_fn_error "could not setup config headers machinery" "$LINENO" 5
fi # test -n "$CONFIG_HEADERS"


eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
shift
for ac_tag
do
  case $ac_tag in
  :[FHLC]) ac_mode=$ac_tag; continue;;
  esac
  case $ac_mode$ac_tag in
  :[FHL]*:*);;
  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
  :[FH]-) ac_tag=-:-;;
  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
  esac
  ac_save_IFS=$IFS
  IFS=:
  set x $ac_tag
  IFS=$ac_save_IFS
  shift
  ac_file=$1
  shift

  case $ac_mode in
  :L) ac_source=$1;;
  :[FH])
    ac_file_inputs=
    for ac_f
    do
      case $ac_f in
      -) ac_f="$tmp/stdin";;
      *) # Look for the file first in the build tree, then in the source tree
	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
	 # because $ac_f cannot contain `:'.
	 test -f "$ac_f" ||
	   case $ac_f in
	   [\\/$]*) false;;
	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
	   esac ||
	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
      esac
      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
      as_fn_append ac_file_inputs " '$ac_f'"
    done

    # Let's still pretend it is `configure' which instantiates (i.e., don't
    # use $as_me), people would be surprised to read:
    #    /* config.h.  Generated by config.status.  */
    configure_input='Generated from '`
	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
	`' by configure.'
    if test x"$ac_file" != x-; then
      configure_input="$ac_file.  $configure_input"
      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
$as_echo "$as_me: creating $ac_file" >&6;}
    fi
    # Neutralize special characters interpreted by sed in replacement strings.
    case $configure_input in #(
    *\&* | *\|* | *\\* )
       ac_sed_conf_input=`$as_echo "$configure_input" |
       sed 's/[\\\\&|]/\\\\&/g'`;; #(
    *) ac_sed_conf_input=$configure_input;;
    esac

    case $ac_tag in
    *:-:* | *:-) cat >"$tmp/stdin" \
      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
    esac
    ;;
  esac

  ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$ac_file" : 'X\(//\)[^/]' \| \
	 X"$ac_file" : 'X\(//\)$' \| \
	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$ac_file" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
  as_dir="$ac_dir"; as_fn_mkdir_p
  ac_builddir=.

case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
  case $ac_top_builddir_sub in
  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix

case $srcdir in
  .)  # We are building in place.
    ac_srcdir=.
    ac_top_srcdir=$ac_top_builddir_sub
    ac_abs_top_srcdir=$ac_pwd ;;
  [\\/]* | ?:[\\/]* )  # Absolute name.
    ac_srcdir=$srcdir$ac_dir_suffix;
    ac_top_srcdir=$srcdir
    ac_abs_top_srcdir=$srcdir ;;
  *) # Relative name.
    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
    ac_top_srcdir=$ac_top_build_prefix$srcdir
    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix


  case $ac_mode in
  :F)
  #
  # CONFIG_FILE
  #

  case $INSTALL in
  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
  esac
  ac_MKDIR_P=$MKDIR_P
  case $MKDIR_P in
  [\\/$]* | ?:[\\/]* ) ;;
  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
  esac
# If the template does not know about datarootdir, expand it.
# FIXME: This hack should be removed a few years after 2.60.
ac_datarootdir_hack=; ac_datarootdir_seen=
ac_sed_dataroot='
/datarootdir/ {
  p
  q
}
/@datadir@/p
/@docdir@/p
/@infodir@/p
/@localedir@/p
/@mandir@/p'
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
  ac_datarootdir_hack='
  s&@datadir@&${datarootdir}&g
  s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
  s&@infodir@&${datarootdir}/info&g
  s&@localedir@&${datarootdir}/locale&g
  s&@mandir@&${datarootdir}/man&g
  s&\${datarootdir}&${prefix}/share&g' ;;
esac
ac_sed_extra="/^[	 ]*VPATH[	 ]*=/{
s/:*\$(srcdir):*/:/
s/:*\${srcdir}:*/:/
s/:*@srcdir@:*/:/
s/^\([^=]*=[	 ]*\):*/\1/
s/:*$//
s/^[^=]*=[	 ]*$//
}

:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
s|@configure_input@|$ac_sed_conf_input|;t t
s&@top_builddir@&$ac_top_builddir_sub&;t t
s&@top_build_prefix@&$ac_top_build_prefix&;t t
s&@srcdir@&$ac_srcdir&;t t
s&@abs_srcdir@&$ac_abs_srcdir&;t t
s&@top_srcdir@&$ac_top_srcdir&;t t
s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
s&@INSTALL@&$ac_INSTALL&;t t
s&@MKDIR_P@&$ac_MKDIR_P&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
  || as_fn_error "could not create $ac_file" "$LINENO" 5

test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined.  Please make sure it is defined." >&5
$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined.  Please make sure it is defined." >&2;}

  rm -f "$tmp/stdin"
  case $ac_file in
  -) cat "$tmp/out" && rm -f "$tmp/out";;
  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
  esac \
  || as_fn_error "could not create $ac_file" "$LINENO" 5
 ;;
  :H)
  #
  # CONFIG_HEADER
  #
  if test x"$ac_file" != x-; then
    {
      $as_echo "/* $configure_input  */" \
      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
    } >"$tmp/config.h" \
      || as_fn_error "could not create $ac_file" "$LINENO" 5
    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
$as_echo "$as_me: $ac_file is unchanged" >&6;}
    else
      rm -f "$ac_file"
      mv "$tmp/config.h" "$ac_file" \
	|| as_fn_error "could not create $ac_file" "$LINENO" 5
    fi
  else
    $as_echo "/* $configure_input  */" \
      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
      || as_fn_error "could not create -" "$LINENO" 5
  fi
# Compute "$ac_file"'s index in $config_headers.
_am_arg="$ac_file"
_am_stamp_count=1
for _am_header in $config_headers :; do
  case $_am_header in
    $_am_arg | $_am_arg:* )
      break ;;
    * )
      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
  esac
done
echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$_am_arg" : 'X\(//\)[^/]' \| \
	 X"$_am_arg" : 'X\(//\)$' \| \
	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$_am_arg" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`/stamp-h$_am_stamp_count
 ;;

  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
$as_echo "$as_me: executing $ac_file commands" >&6;}
 ;;
  esac


  case $ac_file$ac_mode in
    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
  # Autoconf 2.62 quotes --file arguments for eval, but not when files
  # are listed without --file.  Let's play safe and only enable the eval
  # if we detect the quoting.
  case $CONFIG_FILES in
  *\'*) eval set x "$CONFIG_FILES" ;;
  *)   set x $CONFIG_FILES ;;
  esac
  shift
  for mf
  do
    # Strip MF so we end up with the name of the file.
    mf=`echo "$mf" | sed -e 's/:.*$//'`
    # Check whether this is an Automake generated Makefile or not.
    # We used to match only the files named `Makefile.in', but
    # some people rename them; so instead we look at the file content.
    # Grep'ing the first line is not enough: some people post-process
    # each Makefile.in and add a new line on top of each file to say so.
    # Grep'ing the whole file is not good either: AIX grep has a line
    # limit of 2048, but all sed's we know have understand at least 4000.
    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
      dirpart=`$as_dirname -- "$mf" ||
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$mf" : 'X\(//\)[^/]' \| \
	 X"$mf" : 'X\(//\)$' \| \
	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$mf" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
    else
      continue
    fi
    # Extract the definition of DEPDIR, am__include, and am__quote
    # from the Makefile without running `make'.
    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
    test -z "$DEPDIR" && continue
    am__include=`sed -n 's/^am__include = //p' < "$mf"`
    test -z "am__include" && continue
    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
    # When using ansi2knr, U may be empty or an underscore; expand it
    U=`sed -n 's/^U = //p' < "$mf"`
    # Find all dependency output files, they are included files with
    # $(DEPDIR) in their names.  We invoke sed twice because it is the
    # simplest approach to changing $(DEPDIR) to its actual value in the
    # expansion.
    for file in `sed -n "
      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
      # Make sure the directory exists.
      test -f "$dirpart/$file" && continue
      fdir=`$as_dirname -- "$file" ||
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$file" : 'X\(//\)[^/]' \| \
	 X"$file" : 'X\(//\)$' \| \
	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$file" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      as_dir=$dirpart/$fdir; as_fn_mkdir_p
      # echo "creating $dirpart/$file"
      echo '# dummy' > "$dirpart/$file"
    done
  done
}
 ;;
    "libtool":C)

    # See if we are running on zsh, and set the options which allow our
    # commands through without removal of \ escapes.
    if test -n "${ZSH_VERSION+set}" ; then
      setopt NO_GLOB_SUBST
    fi

    cfgfile="${ofile}T"
    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
    $RM "$cfgfile"

    cat <<_LT_EOF >> "$cfgfile"
#! $SHELL

# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
#                 2006, 2007, 2008 Free Software Foundation, Inc.
#   Written by Gordon Matzigkeit, 1996
#
#   This file is part of GNU Libtool.
#
# GNU Libtool is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
# obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.


# The names of the tagged configurations supported by this script.
available_tags=""

# ### BEGIN LIBTOOL CONFIG

# Assembler program.
AS=$AS

# DLL creation program.
DLLTOOL=$DLLTOOL

# Object dumper program.
OBJDUMP=$OBJDUMP

# Which release of libtool.m4 was used?
macro_version=$macro_version
macro_revision=$macro_revision

# Whether or not to build shared libraries.
build_libtool_libs=$enable_shared

# Whether or not to build static libraries.
build_old_libs=$enable_static

# What type of objects to build.
pic_mode=$pic_mode

# Whether or not to optimize for fast installation.
fast_install=$enable_fast_install

# The host system.
host_alias=$host_alias
host=$host
host_os=$host_os

# The build system.
build_alias=$build_alias
build=$build
build_os=$build_os

# A sed program that does not truncate output.
SED=$lt_SED

# Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed="\$SED -e 1s/^X//"

# A grep program that handles long lines.
GREP=$lt_GREP

# An ERE matcher.
EGREP=$lt_EGREP

# A literal string matcher.
FGREP=$lt_FGREP

# A BSD- or MS-compatible name lister.
NM=$lt_NM

# Whether we need soft or hard links.
LN_S=$lt_LN_S

# What is the maximum length of a command?
max_cmd_len=$max_cmd_len

# Object file suffix (normally "o").
objext=$ac_objext

# Executable file suffix (normally "").
exeext=$exeext

# whether the shell understands "unset".
lt_unset=$lt_unset

# turn spaces into newlines.
SP2NL=$lt_lt_SP2NL

# turn newlines into spaces.
NL2SP=$lt_lt_NL2SP

# How to create reloadable object files.
reload_flag=$lt_reload_flag
reload_cmds=$lt_reload_cmds

# Method to check whether dependent libraries are shared objects.
deplibs_check_method=$lt_deplibs_check_method

# Command to use when deplibs_check_method == "file_magic".
file_magic_cmd=$lt_file_magic_cmd

# The archiver.
AR=$lt_AR
AR_FLAGS=$lt_AR_FLAGS

# A symbol stripping program.
STRIP=$lt_STRIP

# Commands used to install an old-style archive.
RANLIB=$lt_RANLIB
old_postinstall_cmds=$lt_old_postinstall_cmds
old_postuninstall_cmds=$lt_old_postuninstall_cmds

# A C compiler.
LTCC=$lt_CC

# LTCC compiler flags.
LTCFLAGS=$lt_CFLAGS

# Take the output of nm and produce a listing of raw symbols and C names.
global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe

# Transform the output of nm in a proper C declaration.
global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl

# Transform the output of nm in a C name address pair.
global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address

# Transform the output of nm in a C name address pair when lib prefix is needed.
global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix

# The name of the directory that contains temporary libtool files.
objdir=$objdir

# Shell to use when invoking shell scripts.
SHELL=$lt_SHELL

# An echo program that does not interpret backslashes.
ECHO=$lt_ECHO

# Used to examine libraries when file_magic_cmd begins with "file".
MAGIC_CMD=$MAGIC_CMD

# Must we lock files when doing compilation?
need_locks=$lt_need_locks

# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
DSYMUTIL=$lt_DSYMUTIL

# Tool to change global to local symbols on Mac OS X.
NMEDIT=$lt_NMEDIT

# Tool to manipulate fat objects and archives on Mac OS X.
LIPO=$lt_LIPO

# ldd/readelf like tool for Mach-O binaries on Mac OS X.
OTOOL=$lt_OTOOL

# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
OTOOL64=$lt_OTOOL64

# Old archive suffix (normally "a").
libext=$libext

# Shared library suffix (normally ".so").
shrext_cmds=$lt_shrext_cmds

# The commands to extract the exported symbol list from a shared archive.
extract_expsyms_cmds=$lt_extract_expsyms_cmds

# Variables whose values should be saved in libtool wrapper scripts and
# restored at link time.
variables_saved_for_relink=$lt_variables_saved_for_relink

# Do we need the "lib" prefix for modules?
need_lib_prefix=$need_lib_prefix

# Do we need a version for libraries?
need_version=$need_version

# Library versioning type.
version_type=$version_type

# Shared library runtime path variable.
runpath_var=$runpath_var

# Shared library path variable.
shlibpath_var=$shlibpath_var

# Is shlibpath searched before the hard-coded library search path?
shlibpath_overrides_runpath=$shlibpath_overrides_runpath

# Format of library name prefix.
libname_spec=$lt_libname_spec

# List of archive names.  First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME
library_names_spec=$lt_library_names_spec

# The coded name of the library, if different from the real name.
soname_spec=$lt_soname_spec

# Command to use after installation of a shared archive.
postinstall_cmds=$lt_postinstall_cmds

# Command to use after uninstallation of a shared archive.
postuninstall_cmds=$lt_postuninstall_cmds

# Commands used to finish a libtool library installation in a directory.
finish_cmds=$lt_finish_cmds

# As "finish_cmds", except a single script fragment to be evaled but
# not shown.
finish_eval=$lt_finish_eval

# Whether we should hardcode library paths into libraries.
hardcode_into_libs=$hardcode_into_libs

# Compile-time system search path for libraries.
sys_lib_search_path_spec=$lt_sys_lib_search_path_spec

# Run-time system search path for libraries.
sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec

# Whether dlopen is supported.
dlopen_support=$enable_dlopen

# Whether dlopen of programs is supported.
dlopen_self=$enable_dlopen_self

# Whether dlopen of statically linked programs is supported.
dlopen_self_static=$enable_dlopen_self_static

# Commands to strip libraries.
old_striplib=$lt_old_striplib
striplib=$lt_striplib


# The linker used to build libraries.
LD=$lt_LD

# Commands used to build an old-style archive.
old_archive_cmds=$lt_old_archive_cmds

# A language specific compiler.
CC=$lt_compiler

# Is the compiler the GNU compiler?
with_gcc=$GCC

# Compiler flag to turn off builtin functions.
no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag

# How to pass a linker flag through the compiler.
wl=$lt_lt_prog_compiler_wl

# Additional compiler flags for building library objects.
pic_flag=$lt_lt_prog_compiler_pic

# Compiler flag to prevent dynamic linking.
link_static_flag=$lt_lt_prog_compiler_static

# Does compiler simultaneously support -c and -o options?
compiler_c_o=$lt_lt_cv_prog_compiler_c_o

# Whether or not to add -lc for building shared libraries.
build_libtool_need_lc=$archive_cmds_need_lc

# Whether or not to disallow shared libs when runtime libs are static.
allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes

# Compiler flag to allow reflexive dlopens.
export_dynamic_flag_spec=$lt_export_dynamic_flag_spec

# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec=$lt_whole_archive_flag_spec

# Whether the compiler copes with passing no objects directly.
compiler_needs_object=$lt_compiler_needs_object

# Create an old-style archive from a shared archive.
old_archive_from_new_cmds=$lt_old_archive_from_new_cmds

# Create a temporary old-style archive to link instead of a shared archive.
old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds

# Commands used to build a shared archive.
archive_cmds=$lt_archive_cmds
archive_expsym_cmds=$lt_archive_expsym_cmds

# Commands used to build a loadable module if different from building
# a shared archive.
module_cmds=$lt_module_cmds
module_expsym_cmds=$lt_module_expsym_cmds

# Whether we are building with GNU ld or not.
with_gnu_ld=$lt_with_gnu_ld

# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag=$lt_allow_undefined_flag

# Flag that enforces no undefined symbols.
no_undefined_flag=$lt_no_undefined_flag

# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist
hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec

# If ld is used when linking, flag to hardcode \$libdir into a binary
# during linking.  This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld

# Whether we need a single "-rpath" flag with a separated argument.
hardcode_libdir_separator=$lt_hardcode_libdir_separator

# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
# DIR into the resulting binary.
hardcode_direct=$hardcode_direct

# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
# DIR into the resulting binary and the resulting library dependency is
# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
# library is relocated.
hardcode_direct_absolute=$hardcode_direct_absolute

# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
# into the resulting binary.
hardcode_minus_L=$hardcode_minus_L

# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
# into the resulting binary.
hardcode_shlibpath_var=$hardcode_shlibpath_var

# Set to "yes" if building a shared library automatically hardcodes DIR
# into the library and all subsequent libraries and executables linked
# against it.
hardcode_automatic=$hardcode_automatic

# Set to yes if linker adds runtime paths of dependent libraries
# to runtime path list.
inherit_rpath=$inherit_rpath

# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=$link_all_deplibs

# Fix the shell variable \$srcfile for the compiler.
fix_srcfile_path=$lt_fix_srcfile_path

# Set to "yes" if exported symbols are required.
always_export_symbols=$always_export_symbols

# The commands to list exported symbols.
export_symbols_cmds=$lt_export_symbols_cmds

# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms=$lt_exclude_expsyms

# Symbols that must always be exported.
include_expsyms=$lt_include_expsyms

# Commands necessary for linking programs (against libraries) with templates.
prelink_cmds=$lt_prelink_cmds

# Specify filename containing input files.
file_list_spec=$lt_file_list_spec

# How to hardcode a shared library path into an executable.
hardcode_action=$hardcode_action

# ### END LIBTOOL CONFIG

_LT_EOF

  case $host_os in
  aix3*)
    cat <<\_LT_EOF >> "$cfgfile"
# AIX sometimes has problems with the GCC collect2 program.  For some
# reason, if we set the COLLECT_NAMES environment variable, the problems
# vanish in a puff of smoke.
if test "X${COLLECT_NAMES+set}" != Xset; then
  COLLECT_NAMES=
  export COLLECT_NAMES
fi
_LT_EOF
    ;;
  esac


ltmain="$ac_aux_dir/ltmain.sh"


  # We use sed instead of cat because bash on DJGPP gets confused if
  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
  # text mode, it properly converts lines to CR/LF.  This bash problem
  # is reportedly fixed, but why not run on old versions too?
  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
    || (rm -f "$cfgfile"; exit 1)

  case $xsi_shell in
  yes)
    cat << \_LT_EOF >> "$cfgfile"

# func_dirname file append nondir_replacement
# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
# otherwise set result to NONDIR_REPLACEMENT.
func_dirname ()
{
  case ${1} in
    */*) func_dirname_result="${1%/*}${2}" ;;
    *  ) func_dirname_result="${3}" ;;
  esac
}

# func_basename file
func_basename ()
{
  func_basename_result="${1##*/}"
}

# func_dirname_and_basename file append nondir_replacement
# perform func_basename and func_dirname in a single function
# call:
#   dirname:  Compute the dirname of FILE.  If nonempty,
#             add APPEND to the result, otherwise set result
#             to NONDIR_REPLACEMENT.
#             value returned in "$func_dirname_result"
#   basename: Compute filename of FILE.
#             value retuned in "$func_basename_result"
# Implementation must be kept synchronized with func_dirname
# and func_basename. For efficiency, we do not delegate to
# those functions but instead duplicate the functionality here.
func_dirname_and_basename ()
{
  case ${1} in
    */*) func_dirname_result="${1%/*}${2}" ;;
    *  ) func_dirname_result="${3}" ;;
  esac
  func_basename_result="${1##*/}"
}

# func_stripname prefix suffix name
# strip PREFIX and SUFFIX off of NAME.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
func_stripname ()
{
  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
  # positional parameters, so assign one to ordinary parameter first.
  func_stripname_result=${3}
  func_stripname_result=${func_stripname_result#"${1}"}
  func_stripname_result=${func_stripname_result%"${2}"}
}

# func_opt_split
func_opt_split ()
{
  func_opt_split_opt=${1%%=*}
  func_opt_split_arg=${1#*=}
}

# func_lo2o object
func_lo2o ()
{
  case ${1} in
    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
    *)    func_lo2o_result=${1} ;;
  esac
}

# func_xform libobj-or-source
func_xform ()
{
  func_xform_result=${1%.*}.lo
}

# func_arith arithmetic-term...
func_arith ()
{
  func_arith_result=$(( $* ))
}

# func_len string
# STRING may not start with a hyphen.
func_len ()
{
  func_len_result=${#1}
}

_LT_EOF
    ;;
  *) # Bourne compatible functions.
    cat << \_LT_EOF >> "$cfgfile"

# func_dirname file append nondir_replacement
# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
# otherwise set result to NONDIR_REPLACEMENT.
func_dirname ()
{
  # Extract subdirectory from the argument.
  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
  if test "X$func_dirname_result" = "X${1}"; then
    func_dirname_result="${3}"
  else
    func_dirname_result="$func_dirname_result${2}"
  fi
}

# func_basename file
func_basename ()
{
  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
}


# func_stripname prefix suffix name
# strip PREFIX and SUFFIX off of NAME.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
# func_strip_suffix prefix name
func_stripname ()
{
  case ${2} in
    .*) func_stripname_result=`$ECHO "X${3}" \
           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
    *)  func_stripname_result=`$ECHO "X${3}" \
           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
  esac
}

# sed scripts:
my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
my_sed_long_arg='1s/^-[^=]*=//'

# func_opt_split
func_opt_split ()
{
  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
}

# func_lo2o object
func_lo2o ()
{
  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
}

# func_xform libobj-or-source
func_xform ()
{
  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
}

# func_arith arithmetic-term...
func_arith ()
{
  func_arith_result=`expr "$@"`
}

# func_len string
# STRING may not start with a hyphen.
func_len ()
{
  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
}

_LT_EOF
esac

case $lt_shell_append in
  yes)
    cat << \_LT_EOF >> "$cfgfile"

# func_append var value
# Append VALUE to the end of shell variable VAR.
func_append ()
{
  eval "$1+=\$2"
}
_LT_EOF
    ;;
  *)
    cat << \_LT_EOF >> "$cfgfile"

# func_append var value
# Append VALUE to the end of shell variable VAR.
func_append ()
{
  eval "$1=\$$1\$2"
}

_LT_EOF
    ;;
  esac


  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
    || (rm -f "$cfgfile"; exit 1)

  mv -f "$cfgfile" "$ofile" ||
    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
  chmod +x "$ofile"

 ;;

  esac
done # for ac_tag


as_fn_exit 0

Added luasupport/HTTP/libmicrohttpd-0.9.0/config.sub.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
#! /bin/sh
# Configuration validation subroutine script.
#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
#   Free Software Foundation, Inc.

timestamp='2009-11-20'

# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine.  It does not imply ALL GNU software can.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
# 02110-1301, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.


# Please send patches to <config-patches@gnu.org>.  Submit a context
# diff and a properly formatted GNU ChangeLog entry.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed.

# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD

# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software.
# Each package is responsible for reporting which valid configurations
# it does not support.  The user should be able to distinguish
# a failure to support a valid configuration from a meaningless
# configuration.

# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or in some cases, the newer four-part form:
#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.

me=`echo "$0" | sed -e 's,.*/,,'`

usage="\
Usage: $0 [OPTION] CPU-MFR-OPSYS
       $0 [OPTION] ALIAS

Canonicalize a configuration name.

Operation modes:
  -h, --help         print this help, then exit
  -t, --time-stamp   print date of last modification, then exit
  -v, --version      print version number, then exit

Report bugs and patches to <config-patches@gnu.org>."

version="\
GNU config.sub ($timestamp)

Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."

help="
Try \`$me --help' for more information."

# Parse command line
while test $# -gt 0 ; do
  case $1 in
    --time-stamp | --time* | -t )
       echo "$timestamp" ; exit ;;
    --version | -v )
       echo "$version" ; exit ;;
    --help | --h* | -h )
       echo "$usage"; exit ;;
    -- )     # Stop option processing
       shift; break ;;
    - )	# Use stdin as input.
       break ;;
    -* )
       echo "$me: invalid option $1$help"
       exit 1 ;;

    *local*)
       # First pass through any local machine types.
       echo $1
       exit ;;

    * )
       break ;;
  esac
done

case $# in
 0) echo "$me: missing argument$help" >&2
    exit 1;;
 1) ;;
 *) echo "$me: too many arguments$help" >&2
    exit 1;;
esac

# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
  kopensolaris*-gnu* | \
  storm-chaos* | os2-emx* | rtmk-nova*)
    os=-$maybe_os
    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
    ;;
  *)
    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
    if [ $basic_machine != $1 ]
    then os=`echo $1 | sed 's/.*-/-/'`
    else os=; fi
    ;;
esac

### Let's recognize common machines as not being operating systems so
### that things like config.sub decstation-3100 work.  We also
### recognize some manufacturers as not being operating systems, so we
### can provide default operating systems below.
case $os in
	-sun*os*)
		# Prevent following clause from handling this invalid input.
		;;
	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
	-apple | -axis | -knuth | -cray | -microblaze)
		os=
		basic_machine=$1
		;;
        -bluegene*)
	        os=-cnk
		;;
	-sim | -cisco | -oki | -wec | -winbond)
		os=
		basic_machine=$1
		;;
	-scout)
		;;
	-wrs)
		os=-vxworks
		basic_machine=$1
		;;
	-chorusos*)
		os=-chorusos
		basic_machine=$1
		;;
 	-chorusrdb)
 		os=-chorusrdb
		basic_machine=$1
 		;;
	-hiux*)
		os=-hiuxwe2
		;;
	-sco6)
		os=-sco5v6
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-sco5)
		os=-sco3.2v5
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-sco4)
		os=-sco3.2v4
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-sco3.2.[4-9]*)
		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-sco3.2v[4-9]*)
		# Don't forget version if it is 3.2v4 or newer.
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-sco5v6*)
		# Don't forget version if it is 3.2v4 or newer.
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-sco*)
		os=-sco3.2v2
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-udk*)
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-isc)
		os=-isc2.2
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-clix*)
		basic_machine=clipper-intergraph
		;;
	-isc*)
		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
		;;
	-lynx*)
		os=-lynxos
		;;
	-ptx*)
		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
		;;
	-windowsnt*)
		os=`echo $os | sed -e 's/windowsnt/winnt/'`
		;;
	-psos*)
		os=-psos
		;;
	-mint | -mint[0-9]*)
		basic_machine=m68k-atari
		os=-mint
		;;
esac

# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
	# Recognize the basic CPU types without company name.
	# Some are omitted here because they have special meanings below.
	1750a | 580 \
	| a29k \
	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
	| am33_2.0 \
	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
	| bfin \
	| c4x | clipper \
	| d10v | d30v | dlx | dsp16xx \
	| fido | fr30 | frv \
	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
	| i370 | i860 | i960 | ia64 \
	| ip2k | iq2000 \
	| lm32 \
	| m32c | m32r | m32rle | m68000 | m68k | m88k \
	| maxq | mb | microblaze | mcore | mep | metag \
	| mips | mipsbe | mipseb | mipsel | mipsle \
	| mips16 \
	| mips64 | mips64el \
	| mips64octeon | mips64octeonel \
	| mips64orion | mips64orionel \
	| mips64r5900 | mips64r5900el \
	| mips64vr | mips64vrel \
	| mips64vr4100 | mips64vr4100el \
	| mips64vr4300 | mips64vr4300el \
	| mips64vr5000 | mips64vr5000el \
	| mips64vr5900 | mips64vr5900el \
	| mipsisa32 | mipsisa32el \
	| mipsisa32r2 | mipsisa32r2el \
	| mipsisa64 | mipsisa64el \
	| mipsisa64r2 | mipsisa64r2el \
	| mipsisa64sb1 | mipsisa64sb1el \
	| mipsisa64sr71k | mipsisa64sr71kel \
	| mipstx39 | mipstx39el \
	| mn10200 | mn10300 \
	| moxie \
	| mt \
	| msp430 \
	| nios | nios2 \
	| ns16k | ns32k \
	| or32 \
	| pdp10 | pdp11 | pj | pjl \
	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
	| pyramid \
	| rx \
	| score \
	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
	| sh64 | sh64le \
	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
	| spu | strongarm \
	| tahoe | thumb | tic4x | tic80 | tron \
	| ubicom32 \
	| v850 | v850e \
	| we32k \
	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
	| z8k | z80)
		basic_machine=$basic_machine-unknown
		;;
	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
		# Motorola 68HC11/12.
		basic_machine=$basic_machine-unknown
		os=-none
		;;
	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
		;;
	ms1)
		basic_machine=mt-unknown
		;;

	# We use `pc' rather than `unknown'
	# because (1) that's what they normally are, and
	# (2) the word "unknown" tends to confuse beginning users.
	i*86 | x86_64)
	  basic_machine=$basic_machine-pc
	  ;;
	# Object if more than one company name word.
	*-*-*)
		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
		exit 1
		;;
	# Recognize the basic CPU types with company name.
	580-* \
	| a29k-* \
	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
	| avr-* | avr32-* \
	| bfin-* | bs2000-* \
	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
	| clipper-* | craynv-* | cydra-* \
	| d10v-* | d30v-* | dlx-* \
	| elxsi-* \
	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
	| h8300-* | h8500-* \
	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
	| i*86-* | i860-* | i960-* | ia64-* \
	| ip2k-* | iq2000-* \
	| lm32-* \
	| m32c-* | m32r-* | m32rle-* \
	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
	| mips16-* \
	| mips64-* | mips64el-* \
	| mips64octeon-* | mips64octeonel-* \
	| mips64orion-* | mips64orionel-* \
	| mips64r5900-* | mips64r5900el-* \
	| mips64vr-* | mips64vrel-* \
	| mips64vr4100-* | mips64vr4100el-* \
	| mips64vr4300-* | mips64vr4300el-* \
	| mips64vr5000-* | mips64vr5000el-* \
	| mips64vr5900-* | mips64vr5900el-* \
	| mipsisa32-* | mipsisa32el-* \
	| mipsisa32r2-* | mipsisa32r2el-* \
	| mipsisa64-* | mipsisa64el-* \
	| mipsisa64r2-* | mipsisa64r2el-* \
	| mipsisa64sb1-* | mipsisa64sb1el-* \
	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
	| mipstx39-* | mipstx39el-* \
	| mmix-* \
	| mt-* \
	| msp430-* \
	| nios-* | nios2-* \
	| none-* | np1-* | ns16k-* | ns32k-* \
	| orion-* \
	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
	| pyramid-* \
	| romp-* | rs6000-* | rx-* \
	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
	| sparclite-* \
	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
	| tahoe-* | thumb-* \
	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
	| tron-* \
	| ubicom32-* \
	| v850-* | v850e-* | vax-* \
	| we32k-* \
	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
	| xstormy16-* | xtensa*-* \
	| ymp-* \
	| z8k-* | z80-*)
		;;
	# Recognize the basic CPU types without company name, with glob match.
	xtensa*)
		basic_machine=$basic_machine-unknown
		;;
	# Recognize the various machine names and aliases which stand
	# for a CPU type and a company and sometimes even an OS.
	386bsd)
		basic_machine=i386-unknown
		os=-bsd
		;;
	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
		basic_machine=m68000-att
		;;
	3b*)
		basic_machine=we32k-att
		;;
	a29khif)
		basic_machine=a29k-amd
		os=-udi
		;;
    	abacus)
		basic_machine=abacus-unknown
		;;
	adobe68k)
		basic_machine=m68010-adobe
		os=-scout
		;;
	alliant | fx80)
		basic_machine=fx80-alliant
		;;
	altos | altos3068)
		basic_machine=m68k-altos
		;;
	am29k)
		basic_machine=a29k-none
		os=-bsd
		;;
	amd64)
		basic_machine=x86_64-pc
		;;
	amd64-*)
		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	amdahl)
		basic_machine=580-amdahl
		os=-sysv
		;;
	amiga | amiga-*)
		basic_machine=m68k-unknown
		;;
	amigaos | amigados)
		basic_machine=m68k-unknown
		os=-amigaos
		;;
	amigaunix | amix)
		basic_machine=m68k-unknown
		os=-sysv4
		;;
	apollo68)
		basic_machine=m68k-apollo
		os=-sysv
		;;
	apollo68bsd)
		basic_machine=m68k-apollo
		os=-bsd
		;;
	aros)
		basic_machine=i386-pc
		os=-aros
		;;
	aux)
		basic_machine=m68k-apple
		os=-aux
		;;
	balance)
		basic_machine=ns32k-sequent
		os=-dynix
		;;
	blackfin)
		basic_machine=bfin-unknown
		os=-linux
		;;
	blackfin-*)
		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
		os=-linux
		;;
	bluegene*)
		basic_machine=powerpc-ibm
		os=-cnk
		;;
	c90)
		basic_machine=c90-cray
		os=-unicos
		;;
        cegcc)
		basic_machine=arm-unknown
		os=-cegcc
		;;
	convex-c1)
		basic_machine=c1-convex
		os=-bsd
		;;
	convex-c2)
		basic_machine=c2-convex
		os=-bsd
		;;
	convex-c32)
		basic_machine=c32-convex
		os=-bsd
		;;
	convex-c34)
		basic_machine=c34-convex
		os=-bsd
		;;
	convex-c38)
		basic_machine=c38-convex
		os=-bsd
		;;
	cray | j90)
		basic_machine=j90-cray
		os=-unicos
		;;
	craynv)
		basic_machine=craynv-cray
		os=-unicosmp
		;;
	cr16)
		basic_machine=cr16-unknown
		os=-elf
		;;
	crds | unos)
		basic_machine=m68k-crds
		;;
	crisv32 | crisv32-* | etraxfs*)
		basic_machine=crisv32-axis
		;;
	cris | cris-* | etrax*)
		basic_machine=cris-axis
		;;
	crx)
		basic_machine=crx-unknown
		os=-elf
		;;
	da30 | da30-*)
		basic_machine=m68k-da30
		;;
	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
		basic_machine=mips-dec
		;;
	decsystem10* | dec10*)
		basic_machine=pdp10-dec
		os=-tops10
		;;
	decsystem20* | dec20*)
		basic_machine=pdp10-dec
		os=-tops20
		;;
	delta | 3300 | motorola-3300 | motorola-delta \
	      | 3300-motorola | delta-motorola)
		basic_machine=m68k-motorola
		;;
	delta88)
		basic_machine=m88k-motorola
		os=-sysv3
		;;
	dicos)
		basic_machine=i686-pc
		os=-dicos
		;;
	djgpp)
		basic_machine=i586-pc
		os=-msdosdjgpp
		;;
	dpx20 | dpx20-*)
		basic_machine=rs6000-bull
		os=-bosx
		;;
	dpx2* | dpx2*-bull)
		basic_machine=m68k-bull
		os=-sysv3
		;;
	ebmon29k)
		basic_machine=a29k-amd
		os=-ebmon
		;;
	elxsi)
		basic_machine=elxsi-elxsi
		os=-bsd
		;;
	encore | umax | mmax)
		basic_machine=ns32k-encore
		;;
	es1800 | OSE68k | ose68k | ose | OSE)
		basic_machine=m68k-ericsson
		os=-ose
		;;
	fx2800)
		basic_machine=i860-alliant
		;;
	genix)
		basic_machine=ns32k-ns
		;;
	gmicro)
		basic_machine=tron-gmicro
		os=-sysv
		;;
	go32)
		basic_machine=i386-pc
		os=-go32
		;;
	h3050r* | hiux*)
		basic_machine=hppa1.1-hitachi
		os=-hiuxwe2
		;;
	h8300hms)
		basic_machine=h8300-hitachi
		os=-hms
		;;
	h8300xray)
		basic_machine=h8300-hitachi
		os=-xray
		;;
	h8500hms)
		basic_machine=h8500-hitachi
		os=-hms
		;;
	harris)
		basic_machine=m88k-harris
		os=-sysv3
		;;
	hp300-*)
		basic_machine=m68k-hp
		;;
	hp300bsd)
		basic_machine=m68k-hp
		os=-bsd
		;;
	hp300hpux)
		basic_machine=m68k-hp
		os=-hpux
		;;
	hp3k9[0-9][0-9] | hp9[0-9][0-9])
		basic_machine=hppa1.0-hp
		;;
	hp9k2[0-9][0-9] | hp9k31[0-9])
		basic_machine=m68000-hp
		;;
	hp9k3[2-9][0-9])
		basic_machine=m68k-hp
		;;
	hp9k6[0-9][0-9] | hp6[0-9][0-9])
		basic_machine=hppa1.0-hp
		;;
	hp9k7[0-79][0-9] | hp7[0-79][0-9])
		basic_machine=hppa1.1-hp
		;;
	hp9k78[0-9] | hp78[0-9])
		# FIXME: really hppa2.0-hp
		basic_machine=hppa1.1-hp
		;;
	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
		# FIXME: really hppa2.0-hp
		basic_machine=hppa1.1-hp
		;;
	hp9k8[0-9][13679] | hp8[0-9][13679])
		basic_machine=hppa1.1-hp
		;;
	hp9k8[0-9][0-9] | hp8[0-9][0-9])
		basic_machine=hppa1.0-hp
		;;
	hppa-next)
		os=-nextstep3
		;;
	hppaosf)
		basic_machine=hppa1.1-hp
		os=-osf
		;;
	hppro)
		basic_machine=hppa1.1-hp
		os=-proelf
		;;
	i370-ibm* | ibm*)
		basic_machine=i370-ibm
		;;
# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
	i*86v32)
		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
		os=-sysv32
		;;
	i*86v4*)
		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
		os=-sysv4
		;;
	i*86v)
		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
		os=-sysv
		;;
	i*86sol2)
		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
		os=-solaris2
		;;
	i386mach)
		basic_machine=i386-mach
		os=-mach
		;;
	i386-vsta | vsta)
		basic_machine=i386-unknown
		os=-vsta
		;;
	iris | iris4d)
		basic_machine=mips-sgi
		case $os in
		    -irix*)
			;;
		    *)
			os=-irix4
			;;
		esac
		;;
	isi68 | isi)
		basic_machine=m68k-isi
		os=-sysv
		;;
	m68knommu)
		basic_machine=m68k-unknown
		os=-linux
		;;
	m68knommu-*)
		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
		os=-linux
		;;
	m88k-omron*)
		basic_machine=m88k-omron
		;;
	magnum | m3230)
		basic_machine=mips-mips
		os=-sysv
		;;
	merlin)
		basic_machine=ns32k-utek
		os=-sysv
		;;
        microblaze)
		basic_machine=microblaze-xilinx
		;;
	mingw32)
		basic_machine=i386-pc
		os=-mingw32
		;;
	mingw32ce)
		basic_machine=arm-unknown
		os=-mingw32ce
		;;
	miniframe)
		basic_machine=m68000-convergent
		;;
	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
		basic_machine=m68k-atari
		os=-mint
		;;
	mips3*-*)
		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
		;;
	mips3*)
		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
		;;
	monitor)
		basic_machine=m68k-rom68k
		os=-coff
		;;
	morphos)
		basic_machine=powerpc-unknown
		os=-morphos
		;;
	msdos)
		basic_machine=i386-pc
		os=-msdos
		;;
	ms1-*)
		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
		;;
	mvs)
		basic_machine=i370-ibm
		os=-mvs
		;;
	ncr3000)
		basic_machine=i486-ncr
		os=-sysv4
		;;
	netbsd386)
		basic_machine=i386-unknown
		os=-netbsd
		;;
	netwinder)
		basic_machine=armv4l-rebel
		os=-linux
		;;
	news | news700 | news800 | news900)
		basic_machine=m68k-sony
		os=-newsos
		;;
	news1000)
		basic_machine=m68030-sony
		os=-newsos
		;;
	news-3600 | risc-news)
		basic_machine=mips-sony
		os=-newsos
		;;
	necv70)
		basic_machine=v70-nec
		os=-sysv
		;;
	next | m*-next )
		basic_machine=m68k-next
		case $os in
		    -nextstep* )
			;;
		    -ns2*)
		      os=-nextstep2
			;;
		    *)
		      os=-nextstep3
			;;
		esac
		;;
	nh3000)
		basic_machine=m68k-harris
		os=-cxux
		;;
	nh[45]000)
		basic_machine=m88k-harris
		os=-cxux
		;;
	nindy960)
		basic_machine=i960-intel
		os=-nindy
		;;
	mon960)
		basic_machine=i960-intel
		os=-mon960
		;;
	nonstopux)
		basic_machine=mips-compaq
		os=-nonstopux
		;;
	np1)
		basic_machine=np1-gould
		;;
	nsr-tandem)
		basic_machine=nsr-tandem
		;;
	op50n-* | op60c-*)
		basic_machine=hppa1.1-oki
		os=-proelf
		;;
	openrisc | openrisc-*)
		basic_machine=or32-unknown
		;;
	os400)
		basic_machine=powerpc-ibm
		os=-os400
		;;
	OSE68000 | ose68000)
		basic_machine=m68000-ericsson
		os=-ose
		;;
	os68k)
		basic_machine=m68k-none
		os=-os68k
		;;
	pa-hitachi)
		basic_machine=hppa1.1-hitachi
		os=-hiuxwe2
		;;
	paragon)
		basic_machine=i860-intel
		os=-osf
		;;
	parisc)
		basic_machine=hppa-unknown
		os=-linux
		;;
	parisc-*)
		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
		os=-linux
		;;
	pbd)
		basic_machine=sparc-tti
		;;
	pbb)
		basic_machine=m68k-tti
		;;
	pc532 | pc532-*)
		basic_machine=ns32k-pc532
		;;
	pc98)
		basic_machine=i386-pc
		;;
	pc98-*)
		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	pentium | p5 | k5 | k6 | nexgen | viac3)
		basic_machine=i586-pc
		;;
	pentiumpro | p6 | 6x86 | athlon | athlon_*)
		basic_machine=i686-pc
		;;
	pentiumii | pentium2 | pentiumiii | pentium3)
		basic_machine=i686-pc
		;;
	pentium4)
		basic_machine=i786-pc
		;;
	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	pentiumpro-* | p6-* | 6x86-* | athlon-*)
		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	pentium4-*)
		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	pn)
		basic_machine=pn-gould
		;;
	power)	basic_machine=power-ibm
		;;
	ppc)	basic_machine=powerpc-unknown
		;;
	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	ppcle | powerpclittle | ppc-le | powerpc-little)
		basic_machine=powerpcle-unknown
		;;
	ppcle-* | powerpclittle-*)
		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	ppc64)	basic_machine=powerpc64-unknown
		;;
	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
		basic_machine=powerpc64le-unknown
		;;
	ppc64le-* | powerpc64little-*)
		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
		;;
	ps2)
		basic_machine=i386-ibm
		;;
	pw32)
		basic_machine=i586-unknown
		os=-pw32
		;;
	rdos)
		basic_machine=i386-pc
		os=-rdos
		;;
	rom68k)
		basic_machine=m68k-rom68k
		os=-coff
		;;
	rm[46]00)
		basic_machine=mips-siemens
		;;
	rtpc | rtpc-*)
		basic_machine=romp-ibm
		;;
	s390 | s390-*)
		basic_machine=s390-ibm
		;;
	s390x | s390x-*)
		basic_machine=s390x-ibm
		;;
	sa29200)
		basic_machine=a29k-amd
		os=-udi
		;;
	sb1)
		basic_machine=mipsisa64sb1-unknown
		;;
	sb1el)
		basic_machine=mipsisa64sb1el-unknown
		;;
	sde)
		basic_machine=mipsisa32-sde
		os=-elf
		;;
	sei)
		basic_machine=mips-sei
		os=-seiux
		;;
	sequent)
		basic_machine=i386-sequent
		;;
	sh)
		basic_machine=sh-hitachi
		os=-hms
		;;
	sh5el)
		basic_machine=sh5le-unknown
		;;
	sh64)
		basic_machine=sh64-unknown
		;;
	sparclite-wrs | simso-wrs)
		basic_machine=sparclite-wrs
		os=-vxworks
		;;
	sps7)
		basic_machine=m68k-bull
		os=-sysv2
		;;
	spur)
		basic_machine=spur-unknown
		;;
	st2000)
		basic_machine=m68k-tandem
		;;
	stratus)
		basic_machine=i860-stratus
		os=-sysv4
		;;
	sun2)
		basic_machine=m68000-sun
		;;
	sun2os3)
		basic_machine=m68000-sun
		os=-sunos3
		;;
	sun2os4)
		basic_machine=m68000-sun
		os=-sunos4
		;;
	sun3os3)
		basic_machine=m68k-sun
		os=-sunos3
		;;
	sun3os4)
		basic_machine=m68k-sun
		os=-sunos4
		;;
	sun4os3)
		basic_machine=sparc-sun
		os=-sunos3
		;;
	sun4os4)
		basic_machine=sparc-sun
		os=-sunos4
		;;
	sun4sol2)
		basic_machine=sparc-sun
		os=-solaris2
		;;
	sun3 | sun3-*)
		basic_machine=m68k-sun
		;;
	sun4)
		basic_machine=sparc-sun
		;;
	sun386 | sun386i | roadrunner)
		basic_machine=i386-sun
		;;
	sv1)
		basic_machine=sv1-cray
		os=-unicos
		;;
	symmetry)
		basic_machine=i386-sequent
		os=-dynix
		;;
	t3e)
		basic_machine=alphaev5-cray
		os=-unicos
		;;
	t90)
		basic_machine=t90-cray
		os=-unicos
		;;
	tic54x | c54x*)
		basic_machine=tic54x-unknown
		os=-coff
		;;
	tic55x | c55x*)
		basic_machine=tic55x-unknown
		os=-coff
		;;
	tic6x | c6x*)
		basic_machine=tic6x-unknown
		os=-coff
		;;
	tile*)
		basic_machine=tile-unknown
		os=-linux-gnu
		;;
	tx39)
		basic_machine=mipstx39-unknown
		;;
	tx39el)
		basic_machine=mipstx39el-unknown
		;;
	toad1)
		basic_machine=pdp10-xkl
		os=-tops20
		;;
	tower | tower-32)
		basic_machine=m68k-ncr
		;;
	tpf)
		basic_machine=s390x-ibm
		os=-tpf
		;;
	udi29k)
		basic_machine=a29k-amd
		os=-udi
		;;
	ultra3)
		basic_machine=a29k-nyu
		os=-sym1
		;;
	v810 | necv810)
		basic_machine=v810-nec
		os=-none
		;;
	vaxv)
		basic_machine=vax-dec
		os=-sysv
		;;
	vms)
		basic_machine=vax-dec
		os=-vms
		;;
	vpp*|vx|vx-*)
		basic_machine=f301-fujitsu
		;;
	vxworks960)
		basic_machine=i960-wrs
		os=-vxworks
		;;
	vxworks68)
		basic_machine=m68k-wrs
		os=-vxworks
		;;
	vxworks29k)
		basic_machine=a29k-wrs
		os=-vxworks
		;;
	w65*)
		basic_machine=w65-wdc
		os=-none
		;;
	w89k-*)
		basic_machine=hppa1.1-winbond
		os=-proelf
		;;
	xbox)
		basic_machine=i686-pc
		os=-mingw32
		;;
	xps | xps100)
		basic_machine=xps100-honeywell
		;;
	ymp)
		basic_machine=ymp-cray
		os=-unicos
		;;
	z8k-*-coff)
		basic_machine=z8k-unknown
		os=-sim
		;;
	z80-*-coff)
		basic_machine=z80-unknown
		os=-sim
		;;
	none)
		basic_machine=none-none
		os=-none
		;;

# Here we handle the default manufacturer of certain CPU types.  It is in
# some cases the only manufacturer, in others, it is the most popular.
	w89k)
		basic_machine=hppa1.1-winbond
		;;
	op50n)
		basic_machine=hppa1.1-oki
		;;
	op60c)
		basic_machine=hppa1.1-oki
		;;
	romp)
		basic_machine=romp-ibm
		;;
	mmix)
		basic_machine=mmix-knuth
		;;
	rs6000)
		basic_machine=rs6000-ibm
		;;
	vax)
		basic_machine=vax-dec
		;;
	pdp10)
		# there are many clones, so DEC is not a safe bet
		basic_machine=pdp10-unknown
		;;
	pdp11)
		basic_machine=pdp11-dec
		;;
	we32k)
		basic_machine=we32k-att
		;;
	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
		basic_machine=sh-unknown
		;;
	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
		basic_machine=sparc-sun
		;;
	cydra)
		basic_machine=cydra-cydrome
		;;
	orion)
		basic_machine=orion-highlevel
		;;
	orion105)
		basic_machine=clipper-highlevel
		;;
	mac | mpw | mac-mpw)
		basic_machine=m68k-apple
		;;
	pmac | pmac-mpw)
		basic_machine=powerpc-apple
		;;
	*-unknown)
		# Make sure to match an already-canonicalized machine name.
		;;
	*)
		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
		exit 1
		;;
esac

# Here we canonicalize certain aliases for manufacturers.
case $basic_machine in
	*-digital*)
		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
		;;
	*-commodore*)
		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
		;;
	*)
		;;
esac

# Decode manufacturer-specific aliases for certain operating systems.

if [ x"$os" != x"" ]
then
case $os in
        # First match some system type aliases
        # that might get confused with valid system types.
	# -solaris* is a basic system type, with this one exception.
        -auroraux)
	        os=-auroraux
		;;
	-solaris1 | -solaris1.*)
		os=`echo $os | sed -e 's|solaris1|sunos4|'`
		;;
	-solaris)
		os=-solaris2
		;;
	-svr4*)
		os=-sysv4
		;;
	-unixware*)
		os=-sysv4.2uw
		;;
	-gnu/linux*)
		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
		;;
	# First accept the basic system types.
	# The portable systems comes first.
	# Each alternative MUST END IN A *, to match a version number.
	# -sysv* is not here because it comes later, after sysvr4.
	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
	      | -sym* | -kopensolaris* \
	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
	      | -aos* | -aros* \
	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
	      | -openbsd* | -solidbsd* \
	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
	      | -chorusos* | -chorusrdb* | -cegcc* \
	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
	      | -uxpv* | -beos* | -mpeix* | -udk* \
	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
	# Remember, each alternative MUST END IN *, to match a version number.
		;;
	-qnx*)
		case $basic_machine in
		    x86-* | i*86-*)
			;;
		    *)
			os=-nto$os
			;;
		esac
		;;
	-nto-qnx*)
		;;
	-nto*)
		os=`echo $os | sed -e 's|nto|nto-qnx|'`
		;;
	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
		;;
	-mac*)
		os=`echo $os | sed -e 's|mac|macos|'`
		;;
	-linux-dietlibc)
		os=-linux-dietlibc
		;;
	-linux*)
		os=`echo $os | sed -e 's|linux|linux-gnu|'`
		;;
	-sunos5*)
		os=`echo $os | sed -e 's|sunos5|solaris2|'`
		;;
	-sunos6*)
		os=`echo $os | sed -e 's|sunos6|solaris3|'`
		;;
	-opened*)
		os=-openedition
		;;
        -os400*)
		os=-os400
		;;
	-wince*)
		os=-wince
		;;
	-osfrose*)
		os=-osfrose
		;;
	-osf*)
		os=-osf
		;;
	-utek*)
		os=-bsd
		;;
	-dynix*)
		os=-bsd
		;;
	-acis*)
		os=-aos
		;;
	-atheos*)
		os=-atheos
		;;
	-syllable*)
		os=-syllable
		;;
	-386bsd)
		os=-bsd
		;;
	-ctix* | -uts*)
		os=-sysv
		;;
	-nova*)
		os=-rtmk-nova
		;;
	-ns2 )
		os=-nextstep2
		;;
	-nsk*)
		os=-nsk
		;;
	# Preserve the version number of sinix5.
	-sinix5.*)
		os=`echo $os | sed -e 's|sinix|sysv|'`
		;;
	-sinix*)
		os=-sysv4
		;;
        -tpf*)
		os=-tpf
		;;
	-triton*)
		os=-sysv3
		;;
	-oss*)
		os=-sysv3
		;;
	-svr4)
		os=-sysv4
		;;
	-svr3)
		os=-sysv3
		;;
	-sysvr4)
		os=-sysv4
		;;
	# This must come after -sysvr4.
	-sysv*)
		;;
	-ose*)
		os=-ose
		;;
	-es1800*)
		os=-ose
		;;
	-xenix)
		os=-xenix
		;;
	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
		os=-mint
		;;
	-aros*)
		os=-aros
		;;
	-kaos*)
		os=-kaos
		;;
	-zvmoe)
		os=-zvmoe
		;;
	-dicos*)
		os=-dicos
		;;
	-none)
		;;
	*)
		# Get rid of the `-' at the beginning of $os.
		os=`echo $os | sed 's/[^-]*-//'`
		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
		exit 1
		;;
esac
else

# Here we handle the default operating systems that come with various machines.
# The value should be what the vendor currently ships out the door with their
# machine or put another way, the most popular os provided with the machine.

# Note that if you're going to try to match "-MANUFACTURER" here (say,
# "-sun"), then you have to tell the case statement up towards the top
# that MANUFACTURER isn't an operating system.  Otherwise, code above
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.

case $basic_machine in
        score-*)
		os=-elf
		;;
        spu-*)
		os=-elf
		;;
	*-acorn)
		os=-riscix1.2
		;;
	arm*-rebel)
		os=-linux
		;;
	arm*-semi)
		os=-aout
		;;
        c4x-* | tic4x-*)
        	os=-coff
		;;
	# This must come before the *-dec entry.
	pdp10-*)
		os=-tops20
		;;
	pdp11-*)
		os=-none
		;;
	*-dec | vax-*)
		os=-ultrix4.2
		;;
	m68*-apollo)
		os=-domain
		;;
	i386-sun)
		os=-sunos4.0.2
		;;
	m68000-sun)
		os=-sunos3
		# This also exists in the configure program, but was not the
		# default.
		# os=-sunos4
		;;
	m68*-cisco)
		os=-aout
		;;
        mep-*)
		os=-elf
		;;
	mips*-cisco)
		os=-elf
		;;
	mips*-*)
		os=-elf
		;;
	or32-*)
		os=-coff
		;;
	*-tti)	# must be before sparc entry or we get the wrong os.
		os=-sysv3
		;;
	sparc-* | *-sun)
		os=-sunos4.1.1
		;;
	*-be)
		os=-beos
		;;
	*-haiku)
		os=-haiku
		;;
	*-ibm)
		os=-aix
		;;
    	*-knuth)
		os=-mmixware
		;;
	*-wec)
		os=-proelf
		;;
	*-winbond)
		os=-proelf
		;;
	*-oki)
		os=-proelf
		;;
	*-hp)
		os=-hpux
		;;
	*-hitachi)
		os=-hiux
		;;
	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
		os=-sysv
		;;
	*-cbm)
		os=-amigaos
		;;
	*-dg)
		os=-dgux
		;;
	*-dolphin)
		os=-sysv3
		;;
	m68k-ccur)
		os=-rtu
		;;
	m88k-omron*)
		os=-luna
		;;
	*-next )
		os=-nextstep
		;;
	*-sequent)
		os=-ptx
		;;
	*-crds)
		os=-unos
		;;
	*-ns)
		os=-genix
		;;
	i370-*)
		os=-mvs
		;;
	*-next)
		os=-nextstep3
		;;
	*-gould)
		os=-sysv
		;;
	*-highlevel)
		os=-bsd
		;;
	*-encore)
		os=-bsd
		;;
	*-sgi)
		os=-irix
		;;
	*-siemens)
		os=-sysv4
		;;
	*-masscomp)
		os=-rtu
		;;
	f30[01]-fujitsu | f700-fujitsu)
		os=-uxpv
		;;
	*-rom68k)
		os=-coff
		;;
	*-*bug)
		os=-coff
		;;
	*-apple)
		os=-macos
		;;
	*-atari*)
		os=-mint
		;;
	*)
		os=-none
		;;
esac
fi

# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer.  We pick the logical manufacturer.
vendor=unknown
case $basic_machine in
	*-unknown)
		case $os in
			-riscix*)
				vendor=acorn
				;;
			-sunos*)
				vendor=sun
				;;
			-cnk*|-aix*)
				vendor=ibm
				;;
			-beos*)
				vendor=be
				;;
			-hpux*)
				vendor=hp
				;;
			-mpeix*)
				vendor=hp
				;;
			-hiux*)
				vendor=hitachi
				;;
			-unos*)
				vendor=crds
				;;
			-dgux*)
				vendor=dg
				;;
			-luna*)
				vendor=omron
				;;
			-genix*)
				vendor=ns
				;;
			-mvs* | -opened*)
				vendor=ibm
				;;
			-os400*)
				vendor=ibm
				;;
			-ptx*)
				vendor=sequent
				;;
			-tpf*)
				vendor=ibm
				;;
			-vxsim* | -vxworks* | -windiss*)
				vendor=wrs
				;;
			-aux*)
				vendor=apple
				;;
			-hms*)
				vendor=hitachi
				;;
			-mpw* | -macos*)
				vendor=apple
				;;
			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
				vendor=atari
				;;
			-vos*)
				vendor=stratus
				;;
		esac
		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
		;;
esac

echo $basic_machine$os
exit

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/configure.

more than 10,000 changes

Added luasupport/HTTP/libmicrohttpd-0.9.0/configure.ac.



























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
# This file is part of libmicrohttpd.
# (C) 2006, 2007, 2008, 2009, 2010 Christian Grothoff (and other contributing authors)
#
# libmicrohttpd is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 2, or (at your
# option) any later version.
#
# libmicrohttpd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with libmicrohttpd; see the file COPYING.  If not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
#
# Process this file with autoconf to produce a configure script.
#
#
AC_PREREQ(2.57)
AC_INIT([libmicrohttpd], [0.9.0],[libmicrohttpd@gnu.org])
AM_INIT_AUTOMAKE([libmicrohttpd], [0.9.0])
AM_CONFIG_HEADER([MHD_config.h])
AC_CONFIG_MACRO_DIR([m4])
AH_TOP([#define _GNU_SOURCE  1])

LIB_VERSION_CURRENT=8
LIB_VERSION_REVISION=0
LIB_VERSION_AGE=0
AC_SUBST(LIB_VERSION_CURRENT)
AC_SUBST(LIB_VERSION_REVISION)
AC_SUBST(LIB_VERSION_AGE)

if test `uname -s` = "OS/390"
then
# configure binaries for z/OS
  if test -z "$CC"
  then
    CC=`pwd`"/contrib/xcc"
    chmod +x $CC || true
  fi
  if test -z "$CPP"
  then
    CPP="c89 -E"
  fi
  if test -z "$CXXCPP"
  then
    CXXCPP="c++ -E -+"
  fi
#  _CCC_CCMODE=1
#  _C89_CCMODE=1
fi

# Checks for programs.
AC_PROG_AWK
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_CANONICAL_HOST
AM_PROG_CC_C_O
AC_LIBTOOL_WIN32_DLL
AC_PROG_LIBTOOL
AC_C_BIGENDIAN

# set GCC options
# use '-fno-strict-aliasing', but only if the compiler can take it
if gcc -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1; 
then
 CFLAGS="-fno-strict-aliasing $CFLAGS"
fi


# Check system type
case "$host_os" in
*darwin* | *rhapsody* | *macosx*)
     AC_DEFINE_UNQUOTED(OSX,1,[This is an OS X system])
     CFLAGS="-no-cpp-precomp -fno-common $CFLAGS"
     AM_CONDITIONAL(HAVE_GNU_LD, false)    
     ;;
linux*)
     AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
     AM_CONDITIONAL(HAVE_GNU_LD, true)    
     ;;
freebsd*)
     AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
     AC_DEFINE_UNQUOTED(FREEBSD,1,[This is a FreeBSD system])
     AM_CONDITIONAL(HAVE_GNU_LD, true)    
     CFLAGS="-D_THREAD_SAFE $CFLAGS"
     ;;
openbsd*)
     AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
     AC_DEFINE_UNQUOTED(OPENBSD,1,[This is an OpenBSD system])
     AM_CONDITIONAL(HAVE_GNU_LD, true)    
     ;;
netbsd*)
     AC_DEFINE_UNQUOTED(SOMEBSD,1,[This is a BSD system])
     AC_DEFINE_UNQUOTED(NETBSD,1,[This is a NetBSD system])
     AM_CONDITIONAL(HAVE_GNU_LD, true)    
     ;;
*solaris*)
     AC_DEFINE_UNQUOTED(SOLARIS,1,[This is a Solaris system])
     AC_DEFINE_UNQUOTED(_REENTRANT,1,[Need with solaris or errno doesnt work])
     AM_CONDITIONAL(HAVE_GNU_LD, false)    
     LDFLAGS="$LDFLAGS -lpthread"
     ;;
*arm-linux*)
     AC_DEFINE_UNQUOTED(LINUX,1,[This is a Linux system])
     CFLAGS="-D_REENTRANT -fPIC -pipe $CFLAGS"
     AM_CONDITIONAL(HAVE_GNU_LD, true)    
     ;;
*cygwin*)
     AC_DEFINE_UNQUOTED(CYGWIN,1,[This is a Cygwin system])
     AM_CONDITIONAL(HAVE_GNU_LD, false)    
     LDFLAGS="$LDFLAGS -no-undefined"
     ;;
*mingw*)
     AC_DEFINE_UNQUOTED(MINGW,1,[This is a MinGW system])
     AC_DEFINE_UNQUOTED(WINDOWS,1,[This is a Windows system])
     LDFLAGS="$LDFLAGS -no-undefined -Wl,--export-all-symbols -lws2_32 -lplibc"
     AM_CONDITIONAL(HAVE_GNU_LD, true)    
     ;;
*openedition*)
     AC_DEFINE_UNQUOTED(OS390,1,[This is a OS/390 system])
     AM_CONDITIONAL(HAVE_GNU_LD, false)    
    ;;
*)
     AC_MSG_RESULT(Unrecognised OS $host_os)
     AC_DEFINE_UNQUOTED(OTHEROS,1,[Some strange OS])
     AM_CONDITIONAL(HAVE_GNU_LD, false)    
;;
esac


# for pkg-config
MHD_LIBDEPS=""

CHECK_PTHREAD
LIBS="$PTHREAD_LIBS $LIBS"
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_LDFLAGS)
AC_SUBST(PTHREAD_CPPFLAGS)

# Check for headers that are ALWAYS required
AC_CHECK_HEADERS([fcntl.h math.h errno.h limits.h stdio.h locale.h sys/stat.h sys/types.h pthread.h],,AC_MSG_ERROR([Compiling libmicrohttpd requires standard UNIX headers files]))

# Check for optional headers
AC_CHECK_HEADERS([sys/types.h sys/time.h sys/msg.h netdb.h netinet/in.h netinet/tcp.h time.h sys/socket.h sys/mman.h arpa/inet.h sys/select.h poll.h])

AC_CHECK_FUNCS(memmem)

# IPv6
AC_MSG_CHECKING(for IPv6)
AC_TRY_COMPILE([
#include <stdio.h>
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
],[
int af=AF_INET6;
int pf=PF_INET6;
struct sockaddr_in6 sa;
printf("%d %d %p\n", af, pf, &sa);
],[
have_inet6=yes;
AC_DEFINE([HAVE_INET6], [1], [Provides IPv6 headers])
],
have_inet6=no
)
AC_MSG_RESULT($have_inet6)

# TCP_CORK
AC_CHECK_DECLS([TCP_CORK], [], [], [[#include <netinet/tcp.h>]])

# libcurl (required for testing)
SAVE_LIBS=$LIBS

AC_MSG_CHECKING(whether to use libcurl for testing)
AC_ARG_ENABLE(curl,
  [AS_HELP_STRING([--enable-curl],[support cURL based testcases])],
  [enable_curl=$enableval],
  [enable_curl="yes"])

curl=0
if test "$enable_curl" = "yes"
then
  LIBCURL_CHECK_CONFIG(,,curl=1,curl=0)
# Lib cURL & cURL - OpenSSL versions
  MHD_REQ_CURL_VERSION=7.16.4
  MHD_REQ_CURL_OPENSSL_VERSION=0.9.8
  MHD_REQ_CURL_GNUTLS_VERSION=2.2.3
  AC_DEFINE_UNQUOTED([MHD_REQ_CURL_VERSION], "$MHD_REQ_CURL_VERSION", [required cURL version to run tests])
  AC_DEFINE_UNQUOTED([MHD_REQ_CURL_OPENSSL_VERSION], "$MHD_REQ_CURL_OPENSSL_VERSION", [required cURL SSL version to run tests])
  AC_DEFINE_UNQUOTED([MHD_REQ_CURL_GNUTLS_VERSION], "$MHD_REQ_CURL_GNUTLS_VERSION", [gnuTLS lib version - used in conjunction with cURL])
fi
LIBS=$SAVE_LIBS
AM_CONDITIONAL(HAVE_CURL, test x$curl = x1)

# large file support (> 4 GB)
AC_SYS_LARGEFILE
AC_FUNC_FSEEKO

# optional: have error messages ?
AC_MSG_CHECKING(whether to enable error messages)
AC_ARG_ENABLE(messages,
   [AS_HELP_STRING([--enable-messages],
               [enable MHD error messages])],
   [enable_messages=$enableval],
   [enable_messages="no"])
AC_MSG_RESULT($enable_messages)
if test "$enable_messages" = "yes"
then
 AC_DEFINE([HAVE_MESSAGES],[1],[Include error messages])
fi


# optional: have zzuf, socat?
AC_CHECK_PROG([HAVE_ZZUF],[zzuf], 1, 0)
AC_CHECK_PROG([HAVE_SOCAT],[socat], 1, 0)
AM_CONDITIONAL(HAVE_ZZUF, test 0 != $HAVE_ZZUF)
AM_CONDITIONAL(HAVE_SOCAT, test 0 != $HAVE_SOCAT)


# libgcrypt linkage: required for HTTPS support 
AM_PATH_LIBGCRYPT(1.2.2, gcrypt=true)

# define the minimal version of libgcrypt required   
MHD_GCRYPT_VERSION=1:1.2.2
AC_DEFINE_UNQUOTED([MHD_GCRYPT_VERSION], "$MHD_GCRYPT_VERSION", [gcrypt lib version])


# gnutls
gnutls=0
AC_MSG_CHECKING([for gnutls])
AC_ARG_WITH(gnutls,
   [  --with-gnutls=PFX   base of gnutls installation],
   [AC_MSG_RESULT([$with_gnutls])
    case $with_gnutls in
      no)
        ;;
      yes)
        AC_CHECK_HEADERS([gnutls/gnutls.h],
            AC_CHECK_LIB([gnutls], [gnutls_priority_set],
	     gnutls=true))
        ;;
      *)
        LDFLAGS="-L$with_gnutls/lib $LDFLAGS"
        CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
        AC_CHECK_HEADERS([gnutls/gnutls.h],
            AC_CHECK_LIB([gnutls], [gnutls_priority_set],
              EXT_LIB_PATH="-L$with_gnutls/lib $EXT_LIB_PATH"
              gnutls=true))
        ;;
    esac
   ],
   [AC_MSG_RESULT([--with-gnutls not specified])
    AC_CHECK_HEADERS([gnutls/gnutls.h],
        AC_CHECK_LIB([gnutls], [gnutls_priority_set],
          gnutls=true))])
AM_CONDITIONAL(HAVE_GNUTLS, test x$gnutls = xtrue)
AC_DEFINE_UNQUOTED([HAVE_GNUTLS], $gnutls, [We have gnutls])



# optional: HTTPS support.  Enabled by default
AC_MSG_CHECKING(whether to enable HTTPS support)
AC_ARG_ENABLE([https],
   [AS_HELP_STRING([--enable-https],
               [enable HTTPS support (default is yes)])],
   [enable_https=$enableval],
   [enable_https="yes"])
if test "$enable_https" = "yes"
then
 if test "$gcrypt" = "true" -a "$gnutls" = "true"
 then
   AC_DEFINE([HTTPS_SUPPORT],[1],[include HTTPS support])
   MHD_LIBDEPS="$LIBGCRYPT_LIBS"
 else
   AC_DEFINE([HTTPS_SUPPORT],[0],[no libgcrypt or libgnutls])
   enable_https="no (lacking libgcrypt or libgnutls)"
 fi
else
 AC_DEFINE([HTTPS_SUPPORT],[0],[disable HTTPS support])
fi
AC_MSG_RESULT($enable_https)

AM_CONDITIONAL(ENABLE_HTTPS, test "$enable_https" = "yes")

MHD_LIB_LDFLAGS="-export-dynamic -no-undefined"

# TODO insert a proper check here
AC_CACHE_CHECK([whether -export-symbols-regex works],
 gn_cv_export_symbols_regex_works, 
 [
  case "$host_os" in
  mingw*) gn_cv_export_symbols_regex_works=no;;
  *) gn_cv_export_symbols_regex_works=yes;;
  esac
 ])


# gcov compilation
use_gcov=no
AC_ARG_ENABLE([coverage], 
   AS_HELP_STRING([--enable-coverage],
                  [compile the library with code coverage support (default is NO)]),
                  [use_gcov=yes], [use_gcov=no])
AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"])


AC_SUBST(MHD_LIB_LDFLAGS)

# for pkg-config
AC_SUBST(MHD_LIBDEPS)

AC_SUBST(CPPFLAGS)
AC_SUBST(LIBS)
AC_SUBST(LDFLAGS)
AC_SUBST(EXT_LIB_PATH)
AC_SUBST(EXT_LIBS)

AC_CONFIG_FILES([ 
libmicrohttpd.pc
Makefile
contrib/Makefile
doc/Makefile
m4/Makefile
src/Makefile
src/include/Makefile
src/daemon/Makefile
src/examples/Makefile
src/testcurl/Makefile
src/testcurl/https/Makefile
src/testzzuf/Makefile])
AC_OUTPUT

AM_CONDITIONAL(ENABLE_MINITASN1,  [test -n " " ] )
AM_CONDITIONAL(ENABLE_OPENSSL,  [test -n "" ] )
AM_CONDITIONAL(HAVE_LD_OUTPUT_DEF,  [test -n "" ] )
AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT,  [test -n "" ] )

# Finally: summary
if test "$curl" != 1 ; then
 MSG_CURL="no, many unit tests will not run"
else
 MSG_CURL="yes"
fi

if test "$gcrypt" != true
then
 MSG_GCRYPT="no, HTTPS will not be built"
else
 MSG_GCRYPT="yes"
fi

AC_MSG_NOTICE([Configuration Summary:  
  Operating System:  ${host_os}
  Target directory:  ${prefix}
  Messages:          ${enable_messages}
  libgcrypt:         ${MSG_GCRYPT}
  libcurl (testing): ${MSG_CURL}
  HTTPS support:     ${enable_https}
])

if test "$enable_https" = "yes"
then
 AC_MSG_NOTICE([HTTPS subsystem configuration:
  License         :  LGPL only
 ])
else
 AC_MSG_NOTICE([
  License         :  LGPL or eCos
])
fi  


Added luasupport/HTTP/libmicrohttpd-0.9.0/contrib/Makefile.









































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# contrib/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
subdir = contrib
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/contrib
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/contrib
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
EXTRA_DIST = xcc ascebc
all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu contrib/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:


distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-generic clean-libtool \
	distclean distclean-generic distclean-libtool distdir dvi \
	dvi-am html html-am info info-am install install-am \
	install-data install-data-am install-dvi install-dvi-am \
	install-exec install-exec-am install-html install-html-am \
	install-info install-info-am install-man install-pdf \
	install-pdf-am install-ps install-ps-am install-strip \
	installcheck installcheck-am installdirs maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/contrib/Makefile.am.



>
1
EXTRA_DIST = xcc ascebc

Added luasupport/HTTP/libmicrohttpd-0.9.0/contrib/Makefile.in.









































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = contrib
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = xcc ascebc
all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu contrib/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:


distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-generic clean-libtool \
	distclean distclean-generic distclean-libtool distdir dvi \
	dvi-am html html-am info info-am install install-am \
	install-data install-data-am install-dvi install-dvi-am \
	install-exec install-exec-am install-html install-html-am \
	install-info install-info-am install-man install-pdf \
	install-pdf-am install-ps install-ps-am install-strip \
	installcheck installcheck-am installdirs maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/contrib/ascebc.























>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
iconv -f UTF-8 -t IBM-1047 $1 > temp.file
if test -x $1
then 
  rm $1
  mv temp.file $1
  chmod +x $1
else
  rm $1
  mv temp.file $1
fi

Added luasupport/HTTP/libmicrohttpd-0.9.0/contrib/xcc.





>
>
1
2
#!/bin/sh
c89 -Wc,'LANGLVL(EXTENDED),XPLINK' -Wl,'XPLINK' -D__STRING_CODE_SET__="ISO8859-1" -Wc,"ASCII" $@

Added luasupport/HTTP/libmicrohttpd-0.9.0/depcomp.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects

scriptversion=2009-04-28.21; # UTC

# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
# Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.

case $1 in
  '')
     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
     exit 1;
     ;;
  -h | --h*)
    cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]

Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.

Environment variables:
  depmode     Dependency tracking mode.
  source      Source file read by `PROGRAMS ARGS'.
  object      Object file output by `PROGRAMS ARGS'.
  DEPDIR      directory where to store dependencies.
  depfile     Dependency file to output.
  tmpdepfile  Temporary file to use when outputing dependencies.
  libtool     Whether libtool is used (yes/no).

Report bugs to <bug-automake@gnu.org>.
EOF
    exit $?
    ;;
  -v | --v*)
    echo "depcomp $scriptversion"
    exit $?
    ;;
esac

if test -z "$depmode" || test -z "$source" || test -z "$object"; then
  echo "depcomp: Variables source, object and depmode must be set" 1>&2
  exit 1
fi

# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}

rm -f "$tmpdepfile"

# Some modes work just like other modes, but use different flags.  We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write.  Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
  # HP compiler uses -M and no extra arg.
  gccflag=-M
  depmode=gcc
fi

if test "$depmode" = dashXmstdout; then
   # This is just like dashmstdout with a different argument.
   dashmflag=-xM
   depmode=dashmstdout
fi

cygpath_u="cygpath -u -f -"
if test "$depmode" = msvcmsys; then
   # This is just like msvisualcpp but w/o cygpath translation.
   # Just convert the backslash-escaped backslashes to single forward
   # slashes to satisfy depend.m4
   cygpath_u="sed s,\\\\\\\\,/,g"
   depmode=msvisualcpp
fi

case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff.  Hmm.
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
## the command line argument order; so add the flags where they
## appear in depend2.am.  Note that the slowdown incurred here
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
  for arg
  do
    case $arg in
    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
    *)  set fnord "$@" "$arg" ;;
    esac
    shift # fnord
    shift # $arg
  done
  "$@"
  stat=$?
  if test $stat -eq 0; then :
  else
    rm -f "$tmpdepfile"
    exit $stat
  fi
  mv "$tmpdepfile" "$depfile"
  ;;

gcc)
## There are various ways to get dependency output from gcc.  Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
##   up in a subdir.  Having to rename by hand is ugly.
##   (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
##   -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
##   than renaming).
  if test -z "$gccflag"; then
    gccflag=-MD,
  fi
  "$@" -Wp,"$gccflag$tmpdepfile"
  stat=$?
  if test $stat -eq 0; then :
  else
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"
  echo "$object : \\" > "$depfile"
  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
  sed -e 's/^[^:]*: / /' \
      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header).  We avoid this by adding
## dummy dependencies for each header file.  Too bad gcc doesn't do
## this for us directly.
  tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'.  On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly.  Breaking it into two sed invocations is a workaround.
    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

hp)
  # This case exists only to let depend.m4 do its work.  It works by
  # looking at the text of this script.  This case will never be run,
  # since it is checked for above.
  exit 1
  ;;

sgi)
  if test "$libtool" = yes; then
    "$@" "-Wp,-MDupdate,$tmpdepfile"
  else
    "$@" -MDupdate "$tmpdepfile"
  fi
  stat=$?
  if test $stat -eq 0; then :
  else
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"

  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
    echo "$object : \\" > "$depfile"

    # Clip off the initial element (the dependent).  Don't try to be
    # clever and replace this with sed code, as IRIX sed won't handle
    # lines with more than a fixed number of characters (4096 in
    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
    # the IRIX cc adds comments like `#:fec' to the end of the
    # dependency line.
    tr ' ' '
' < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
    tr '
' ' ' >> "$depfile"
    echo >> "$depfile"

    # The second pass generates a dummy entry for each header file.
    tr ' ' '
' < "$tmpdepfile" \
   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
   >> "$depfile"
  else
    # The sourcefile does not contain any dependencies, so just
    # store a dummy comment line, to avoid errors with the Makefile
    # "include basename.Plo" scheme.
    echo "#dummy" > "$depfile"
  fi
  rm -f "$tmpdepfile"
  ;;

aix)
  # The C for AIX Compiler uses -M and outputs the dependencies
  # in a .u file.  In older versions, this file always lives in the
  # current directory.  Also, the AIX compiler puts `$object:' at the
  # start of each line; $object doesn't have directory information.
  # Version 6 uses the directory in both cases.
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
  test "x$dir" = "x$object" && dir=
  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
  if test "$libtool" = yes; then
    tmpdepfile1=$dir$base.u
    tmpdepfile2=$base.u
    tmpdepfile3=$dir.libs/$base.u
    "$@" -Wc,-M
  else
    tmpdepfile1=$dir$base.u
    tmpdepfile2=$dir$base.u
    tmpdepfile3=$dir$base.u
    "$@" -M
  fi
  stat=$?

  if test $stat -eq 0; then :
  else
    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
    exit $stat
  fi

  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
  do
    test -f "$tmpdepfile" && break
  done
  if test -f "$tmpdepfile"; then
    # Each line is of the form `foo.o: dependent.h'.
    # Do two passes, one to just change these to
    # `$object: dependent.h' and one to simply `dependent.h:'.
    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
    # That's a tab and a space in the [].
    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
  else
    # The sourcefile does not contain any dependencies, so just
    # store a dummy comment line, to avoid errors with the Makefile
    # "include basename.Plo" scheme.
    echo "#dummy" > "$depfile"
  fi
  rm -f "$tmpdepfile"
  ;;

icc)
  # Intel's C compiler understands `-MD -MF file'.  However on
  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
  # ICC 7.0 will fill foo.d with something like
  #    foo.o: sub/foo.c
  #    foo.o: sub/foo.h
  # which is wrong.  We want:
  #    sub/foo.o: sub/foo.c
  #    sub/foo.o: sub/foo.h
  #    sub/foo.c:
  #    sub/foo.h:
  # ICC 7.1 will output
  #    foo.o: sub/foo.c sub/foo.h
  # and will wrap long lines using \ :
  #    foo.o: sub/foo.c ... \
  #     sub/foo.h ... \
  #     ...

  "$@" -MD -MF "$tmpdepfile"
  stat=$?
  if test $stat -eq 0; then :
  else
    rm -f "$tmpdepfile"
    exit $stat
  fi
  rm -f "$depfile"
  # Each line is of the form `foo.o: dependent.h',
  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
  # Do two passes, one to just change these to
  # `$object: dependent.h' and one to simply `dependent.h:'.
  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
  # Some versions of the HPUX 10.20 sed can't process this invocation
  # correctly.  Breaking it into two sed invocations is a workaround.
  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
    sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

hp2)
  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
  # compilers, which have integrated preprocessors.  The correct option
  # to use with these is +Maked; it writes dependencies to a file named
  # 'foo.d', which lands next to the object file, wherever that
  # happens to be.
  # Much of this is similar to the tru64 case; see comments there.
  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
  test "x$dir" = "x$object" && dir=
  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
  if test "$libtool" = yes; then
    tmpdepfile1=$dir$base.d
    tmpdepfile2=$dir.libs/$base.d
    "$@" -Wc,+Maked
  else
    tmpdepfile1=$dir$base.d
    tmpdepfile2=$dir$base.d
    "$@" +Maked
  fi
  stat=$?
  if test $stat -eq 0; then :
  else
     rm -f "$tmpdepfile1" "$tmpdepfile2"
     exit $stat
  fi

  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
  do
    test -f "$tmpdepfile" && break
  done
  if test -f "$tmpdepfile"; then
    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
    # Add `dependent.h:' lines.
    sed -ne '2,${
	       s/^ *//
	       s/ \\*$//
	       s/$/:/
	       p
	     }' "$tmpdepfile" >> "$depfile"
  else
    echo "#dummy" > "$depfile"
  fi
  rm -f "$tmpdepfile" "$tmpdepfile2"
  ;;

tru64)
   # The Tru64 compiler uses -MD to generate dependencies as a side
   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
   # dependencies in `foo.d' instead, so we check for that too.
   # Subdirectories are respected.
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
   test "x$dir" = "x$object" && dir=
   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`

   if test "$libtool" = yes; then
      # With Tru64 cc, shared objects can also be used to make a
      # static library.  This mechanism is used in libtool 1.4 series to
      # handle both shared and static libraries in a single compilation.
      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
      #
      # With libtool 1.5 this exception was removed, and libtool now
      # generates 2 separate objects for the 2 libraries.  These two
      # compilations output dependencies in $dir.libs/$base.o.d and
      # in $dir$base.o.d.  We have to check for both files, because
      # one of the two compilations can be disabled.  We should prefer
      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
      # automatically cleaned when .libs/ is deleted, while ignoring
      # the former would cause a distcleancheck panic.
      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
      tmpdepfile2=$dir$base.o.d          # libtool 1.5
      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
      "$@" -Wc,-MD
   else
      tmpdepfile1=$dir$base.o.d
      tmpdepfile2=$dir$base.d
      tmpdepfile3=$dir$base.d
      tmpdepfile4=$dir$base.d
      "$@" -MD
   fi

   stat=$?
   if test $stat -eq 0; then :
   else
      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
      exit $stat
   fi

   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
   do
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
      # That's a tab and a space in the [].
      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   else
      echo "#dummy" > "$depfile"
   fi
   rm -f "$tmpdepfile"
   ;;

#nosideeffect)
  # This comment above is used by automake to tell side-effect
  # dependency tracking mechanisms from slower ones.

dashmstdout)
  # Important note: in order to support this mode, a compiler *must*
  # always write the preprocessed file to stdout, regardless of -o.
  "$@" || exit $?

  # Remove the call to Libtool.
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi

  # Remove `-o $object'.
  IFS=" "
  for arg
  do
    case $arg in
    -o)
      shift
      ;;
    $object)
      shift
      ;;
    *)
      set fnord "$@" "$arg"
      shift # fnord
      shift # $arg
      ;;
    esac
  done

  test -z "$dashmflag" && dashmflag=-M
  # Require at least two characters before searching for `:'
  # in the target name.  This is to cope with DOS-style filenames:
  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
  "$@" $dashmflag |
    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
  rm -f "$depfile"
  cat < "$tmpdepfile" > "$depfile"
  tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly.  Breaking it into two sed invocations is a workaround.
    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

dashXmstdout)
  # This case only exists to satisfy depend.m4.  It is never actually
  # run, as this mode is specially recognized in the preamble.
  exit 1
  ;;

makedepend)
  "$@" || exit $?
  # Remove any Libtool call
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi
  # X makedepend
  shift
  cleared=no eat=no
  for arg
  do
    case $cleared in
    no)
      set ""; shift
      cleared=yes ;;
    esac
    if test $eat = yes; then
      eat=no
      continue
    fi
    case "$arg" in
    -D*|-I*)
      set fnord "$@" "$arg"; shift ;;
    # Strip any option that makedepend may not understand.  Remove
    # the object too, otherwise makedepend will parse it as a source file.
    -arch)
      eat=yes ;;
    -*|$object)
      ;;
    *)
      set fnord "$@" "$arg"; shift ;;
    esac
  done
  obj_suffix=`echo "$object" | sed 's/^.*\././'`
  touch "$tmpdepfile"
  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
  rm -f "$depfile"
  cat < "$tmpdepfile" > "$depfile"
  sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly.  Breaking it into two sed invocations is a workaround.
    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile" "$tmpdepfile".bak
  ;;

cpp)
  # Important note: in order to support this mode, a compiler *must*
  # always write the preprocessed file to stdout.
  "$@" || exit $?

  # Remove the call to Libtool.
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi

  # Remove `-o $object'.
  IFS=" "
  for arg
  do
    case $arg in
    -o)
      shift
      ;;
    $object)
      shift
      ;;
    *)
      set fnord "$@" "$arg"
      shift # fnord
      shift # $arg
      ;;
    esac
  done

  "$@" -E |
    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
    sed '$ s: \\$::' > "$tmpdepfile"
  rm -f "$depfile"
  echo "$object : \\" > "$depfile"
  cat < "$tmpdepfile" >> "$depfile"
  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

msvisualcpp)
  # Important note: in order to support this mode, a compiler *must*
  # always write the preprocessed file to stdout.
  "$@" || exit $?

  # Remove the call to Libtool.
  if test "$libtool" = yes; then
    while test "X$1" != 'X--mode=compile'; do
      shift
    done
    shift
  fi

  IFS=" "
  for arg
  do
    case "$arg" in
    -o)
      shift
      ;;
    $object)
      shift
      ;;
    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
	set fnord "$@"
	shift
	shift
	;;
    *)
	set fnord "$@" "$arg"
	shift
	shift
	;;
    esac
  done
  "$@" -E 2>/dev/null |
  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
  rm -f "$depfile"
  echo "$object : \\" > "$depfile"
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
  echo "	" >> "$depfile"
  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
  rm -f "$tmpdepfile"
  ;;

msvcmsys)
  # This case exists only to let depend.m4 do its work.  It works by
  # looking at the text of this script.  This case will never be run,
  # since it is checked for above.
  exit 1
  ;;

none)
  exec "$@"
  ;;

*)
  echo "Unknown depmode $depmode" 1>&2
  exit 1
  ;;
esac

exit 0

# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/Doxyfile.

























































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# Doxyfile 1.5.5

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "GNU libmicrohttpd"
PROJECT_NUMBER         = 0.4.2
OUTPUT_DIRECTORY       = doc/doxygen/
CREATE_SUBDIRS         = YES
OUTPUT_LANGUAGE        = English
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       = "The $name class" \
                         "The $name widget" \
                         "The $name file" \
                         is \
                         provides \
                         specifies \
                         contains \
                         represents \
                         a \
                         an \
                         the
ALWAYS_DETAILED_SEC    = NO
INLINE_INHERITED_MEMB  = NO
FULL_PATH_NAMES        = YES
STRIP_FROM_PATH        = /home/grothoff/svn/libmicrohttpd/
STRIP_FROM_INC_PATH    = 
SHORT_NAMES            = NO
JAVADOC_AUTOBRIEF      = NO
QT_AUTOBRIEF           = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP         = NO
INHERIT_DOCS           = NO
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 8
ALIASES                = 
OPTIMIZE_OUTPUT_FOR_C  = YES
OPTIMIZE_OUTPUT_JAVA   = NO
OPTIMIZE_FOR_FORTRAN   = NO
OPTIMIZE_OUTPUT_VHDL   = NO
BUILTIN_STL_SUPPORT    = NO
CPP_CLI_SUPPORT        = NO
SIP_SUPPORT            = NO
DISTRIBUTE_GROUP_DOC   = NO
SUBGROUPING            = YES
TYPEDEF_HIDES_STRUCT   = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = NO
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = NO
EXTRACT_LOCAL_METHODS  = YES
EXTRACT_ANON_NSPACES   = NO
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
HIDE_IN_BODY_DOCS      = NO
INTERNAL_DOCS          = NO
CASE_SENSE_NAMES       = YES
HIDE_SCOPE_NAMES       = NO
SHOW_INCLUDE_FILES     = YES
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
SORT_BRIEF_DOCS        = NO
SORT_GROUP_NAMES       = NO
SORT_BY_SCOPE_NAME     = NO
GENERATE_TODOLIST      = NO
GENERATE_TESTLIST      = NO
GENERATE_BUGLIST       = NO
GENERATE_DEPRECATEDLIST= NO
ENABLED_SECTIONS       = 
MAX_INITIALIZER_LINES  = 30
SHOW_USED_FILES        = YES
SHOW_DIRECTORIES       = YES
FILE_VERSION_FILTER    = 
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_FORMAT            = "$file:$line: $text"
WARN_LOGFILE           = 
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT                  = /home/grothoff/svn/libmicrohttpd/src/include \
                         /home/grothoff/svn/libmicrohttpd/src/daemon
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          = *.c \
                         *.h
RECURSIVE              = YES
EXCLUDE                = /home/grothoff/svn/libmicrohttpd/src/daemon/daemon_test.c \
                         /home/grothoff/svn/libmicrohttpd/src/daemon/postprocessor_test.c
EXCLUDE_SYMLINKS       = NO
EXCLUDE_PATTERNS       = 
EXCLUDE_SYMBOLS        = MHD_DLOG
EXAMPLE_PATH           = 
EXAMPLE_PATTERNS       = *
EXAMPLE_RECURSIVE      = NO
IMAGE_PATH             = 
INPUT_FILTER           = 
FILTER_PATTERNS        = 
FILTER_SOURCE_FILES    = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER         = YES
INLINE_SOURCES         = NO
STRIP_CODE_COMMENTS    = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION    = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS              = NO
VERBATIM_HEADERS       = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX     = YES
COLS_IN_ALPHA_INDEX    = 5
IGNORE_PREFIX          = 
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML          = YES
HTML_OUTPUT            = html
HTML_FILE_EXTENSION    = .html
HTML_HEADER            = 
HTML_FOOTER            = 
HTML_STYLESHEET        = 
HTML_ALIGN_MEMBERS     = YES
GENERATE_HTMLHELP      = NO
GENERATE_DOCSET        = NO
DOCSET_FEEDNAME        = "Doxygen generated docs"
DOCSET_BUNDLE_ID       = org.doxygen.Project
HTML_DYNAMIC_SECTIONS  = NO
CHM_FILE               = 
HHC_LOCATION           = 
GENERATE_CHI           = NO
BINARY_TOC             = NO
TOC_EXPAND             = NO
DISABLE_INDEX          = NO
ENUM_VALUES_PER_LINE   = 4
GENERATE_TREEVIEW      = YES
TREEVIEW_WIDTH         = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX         = NO
LATEX_OUTPUT           = latex
LATEX_CMD_NAME         = latex
MAKEINDEX_CMD_NAME     = makeindex
COMPACT_LATEX          = NO
PAPER_TYPE             = a4wide
EXTRA_PACKAGES         = 
LATEX_HEADER           = 
PDF_HYPERLINKS         = YES
USE_PDFLATEX           = YES
LATEX_BATCHMODE        = NO
LATEX_HIDE_INDICES     = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF           = NO
RTF_OUTPUT             = rtf
COMPACT_RTF            = NO
RTF_HYPERLINKS         = NO
RTF_STYLESHEET_FILE    = 
RTF_EXTENSIONS_FILE    = 
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN           = NO
MAN_OUTPUT             = man
MAN_EXTENSION          = .3
MAN_LINKS              = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML           = NO
XML_OUTPUT             = xml
XML_SCHEMA             = 
XML_DTD                = 
XML_PROGRAMLISTING     = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF   = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD       = NO
PERLMOD_LATEX          = NO
PERLMOD_PRETTY         = YES
PERLMOD_MAKEVAR_PREFIX = 
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor   
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = NO
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           = 
INCLUDE_FILE_PATTERNS  = 
PREDEFINED             = 
EXPAND_AS_DEFINED      = 
SKIP_FUNCTION_MACROS   = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references   
#---------------------------------------------------------------------------
TAGFILES               = 
GENERATE_TAGFILE       = 
ALLEXTERNALS           = NO
EXTERNAL_GROUPS        = YES
PERL_PATH              = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool   
#---------------------------------------------------------------------------
CLASS_DIAGRAMS         = YES
MSCGEN_PATH            = 
HIDE_UNDOC_RELATIONS   = YES
HAVE_DOT               = YES
CLASS_GRAPH            = NO
COLLABORATION_GRAPH    = NO
GROUP_GRAPHS           = NO
UML_LOOK               = NO
TEMPLATE_RELATIONS     = NO
INCLUDE_GRAPH          = YES
INCLUDED_BY_GRAPH      = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
GRAPHICAL_HIERARCHY    = NO
DIRECTORY_GRAPH        = YES
DOT_IMAGE_FORMAT       = png
DOT_PATH               = 
DOTFILE_DIRS           = 
DOT_GRAPH_MAX_NODES    = 25
MAX_DOT_GRAPH_DEPTH    = 2
DOT_TRANSPARENT        = YES
DOT_MULTI_TARGETS      = NO
GENERATE_LEGEND        = YES
DOT_CLEANUP            = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine   
#---------------------------------------------------------------------------
SEARCHENGINE           = NO

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/Makefile.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# doc/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
subdir = doc
DIST_COMMON = $(microhttpd_TEXINFOS) $(srcdir)/Makefile.am \
	$(srcdir)/Makefile.in $(srcdir)/stamp-vti \
	$(srcdir)/version.texi mdate-sh texinfo.tex
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
INFO_DEPS = $(srcdir)/microhttpd.info \
	$(srcdir)/microhttpd-tutorial.info
am__TEXINFO_TEX_DIR = $(srcdir)
DVIS = microhttpd.dvi tutorial.dvi
PDFS = microhttpd.pdf tutorial.pdf
PSS = microhttpd.ps tutorial.ps
HTMLS = microhttpd.html tutorial.html
TEXINFOS = microhttpd.texi tutorial.texi
TEXI2DVI = texi2dvi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man3dir)"
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
man3dir = $(mandir)/man3
NROFF = nroff
MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/doc
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/doc
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
man_MANS = libmicrohttpd.3
EXTRA_DIST = $(man_MANS) Doxyfile 
DISTCLEANFILES = \
  microhttpd.cps \
  microhttpd.dvi \
  tutorial.cps \
  tutorial.dvi

info_TEXINFOS = \
  microhttpd.texi \
  tutorial.texi

microhttpd_TEXINFOS = \
  chapters/basicauthentication.inc \
  chapters/bibliography.inc \
  chapters/exploringrequests.inc \
  chapters/hellobrowser.inc \
  chapters/introduction.inc \
  chapters/largerpost.inc \
  chapters/processingpost.inc \
  chapters/responseheaders.inc \
  chapters/tlsauthentication.inc \
  examples/basicauthentication.c \
  examples/hellobrowser.c \
  examples/largepost.c \
  examples/logging.c \
  examples/responseheaders.c \
  examples/simplepost.c \
  examples/tlsauthentication.c \
  fdl-1.3.texi \
  lgpl.texi \
  ecos.texi

all: all-am

.SUFFIXES:
.SUFFIXES: .dvi .html .info .pdf .ps .texi
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

.texi.info:
	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
	am__cwd=`pwd` && $(am__cd) $(srcdir) && \
	rm -rf $$backupdir && mkdir $$backupdir && \
	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
	  done; \
	else :; fi && \
	cd "$$am__cwd"; \
	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
	 -o $@ $<; \
	then \
	  rc=0; \
	  $(am__cd) $(srcdir); \
	else \
	  rc=$$?; \
	  $(am__cd) $(srcdir) && \
	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
	fi; \
	rm -rf $$backupdir; exit $$rc

.texi.dvi:
	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
	$(TEXI2DVI) $<

.texi.pdf:
	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
	$(TEXI2PDF) $<

.texi.html:
	rm -rf $(@:.html=.htp)
	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
	 -o $(@:.html=.htp) $<; \
	then \
	  rm -rf $@; \
	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
	else \
	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
	  exit 1; \
	fi
$(srcdir)/microhttpd.info: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
microhttpd.dvi: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
microhttpd.pdf: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
microhttpd.html: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
$(srcdir)/version.texi:  $(srcdir)/stamp-vti
$(srcdir)/stamp-vti: microhttpd.texi $(top_srcdir)/configure
	@(dir=.; test -f ./microhttpd.texi || dir=$(srcdir); \
	set `$(SHELL) $(srcdir)/mdate-sh $$dir/microhttpd.texi`; \
	echo "@set UPDATED $$1 $$2 $$3"; \
	echo "@set UPDATED-MONTH $$2 $$3"; \
	echo "@set EDITION $(VERSION)"; \
	echo "@set VERSION $(VERSION)") > vti.tmp
	@cmp -s vti.tmp $(srcdir)/version.texi \
	  || (echo "Updating $(srcdir)/version.texi"; \
	      cp vti.tmp $(srcdir)/version.texi)
	-@rm -f vti.tmp
	@cp $(srcdir)/version.texi $@

mostlyclean-vti:
	-rm -f vti.tmp

maintainer-clean-vti:
	-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
$(srcdir)/microhttpd-tutorial.info: tutorial.texi 
microhttpd-tutorial.dvi: tutorial.texi 
microhttpd-tutorial.pdf: tutorial.texi 
microhttpd-tutorial.html: tutorial.texi 
.dvi.ps:
	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
	$(DVIPS) -o $@ $<

uninstall-dvi-am:
	@$(NORMAL_UNINSTALL)
	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
	done

uninstall-html-am:
	@$(NORMAL_UNINSTALL)
	@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
	done

uninstall-info-am:
	@$(PRE_UNINSTALL)
	@if test -d '$(DESTDIR)$(infodir)' && \
	    (install-info --version && \
	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
	  list='$(INFO_DEPS)'; \
	  for file in $$list; do \
	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
	  done; \
	else :; fi
	@$(NORMAL_UNINSTALL)
	@list='$(INFO_DEPS)'; \
	for file in $$list; do \
	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
	  (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
	   else :; fi); \
	done

uninstall-pdf-am:
	@$(NORMAL_UNINSTALL)
	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
	  rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
	done

uninstall-ps-am:
	@$(NORMAL_UNINSTALL)
	@list='$(PSS)'; test -n "$(psdir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
	  rm -f "$(DESTDIR)$(psdir)/$$f"; \
	done

dist-info: $(INFO_DEPS)
	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
	list='$(INFO_DEPS)'; \
	for base in $$list; do \
	  case $$base in \
	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
	  esac; \
	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
	  base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
	  for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
	    if test -f $$file; then \
	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
	      test -f "$(distdir)/$$relfile" || \
		cp -p $$file "$(distdir)/$$relfile"; \
	    else :; fi; \
	  done; \
	done

mostlyclean-aminfo:
	-rm -rf microhttpd.aux microhttpd.cp microhttpd.cps microhttpd.fn \
	  microhttpd.fns microhttpd.ky microhttpd.kys microhttpd.log \
	  microhttpd.pg microhttpd.pgs microhttpd.tmp microhttpd.toc \
	  microhttpd.tp microhttpd.tps microhttpd.vr microhttpd.vrs \
	  tutorial.aux tutorial.cp tutorial.cps tutorial.fn \
	  tutorial.fns tutorial.ky tutorial.kys tutorial.log \
	  tutorial.pg tutorial.pgs tutorial.tmp tutorial.toc \
	  tutorial.tp tutorial.tps tutorial.vr tutorial.vrs

clean-aminfo:
	-test -z "microhttpd.dvi microhttpd.pdf microhttpd.ps microhttpd.html \
	  microhttpd-tutorial.dvi microhttpd-tutorial.pdf \
	  microhttpd-tutorial.ps microhttpd-tutorial.html" \
	|| rm -rf microhttpd.dvi microhttpd.pdf microhttpd.ps microhttpd.html \
	  microhttpd-tutorial.dvi microhttpd-tutorial.pdf \
	  microhttpd-tutorial.ps microhttpd-tutorial.html

maintainer-clean-aminfo:
	@list='$(INFO_DEPS)'; for i in $$list; do \
	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
	done
install-man3: $(man_MANS)
	@$(NORMAL_INSTALL)
	test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
	@list=''; test -n "$(man3dir)" || exit 0; \
	{ for i in $$list; do echo "$$i"; done; \
	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
	  sed -n '/\.3[a-z]*$$/p'; \
	} | while read p; do \
	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; echo "$$p"; \
	done | \
	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
	sed 'N;N;s,\n, ,g' | { \
	list=; while read file base inst; do \
	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
	  fi; \
	done; \
	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
	while read files; do \
	  test -z "$$files" || { \
	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
	done; }

uninstall-man3:
	@$(NORMAL_UNINSTALL)
	@list=''; test -n "$(man3dir)" || exit 0; \
	files=`{ for i in $$list; do echo "$$i"; done; \
	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
	  sed -n '/\.3[a-z]*$$/p'; \
	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
	test -z "$$files" || { \
	  echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \
	  cd "$(DESTDIR)$(man3dir)" && rm -f $$files; }
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:


distdir: $(DISTFILES)
	@list='$(MANS)'; if test -n "$$list"; then \
	  list=`for p in $$list; do \
	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
	  if test -n "$$list" && \
	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
	    exit 1; \
	  else :; fi; \
	else :; fi
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	$(MAKE) $(AM_MAKEFLAGS) \
	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
	  dist-info
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(MANS)
installdirs:
	for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man3dir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am: $(DVIS)

html: html-am

html-am: $(HTMLS)

info: info-am

info-am: $(INFO_DEPS)

install-data-am: install-info-am install-man

install-dvi: install-dvi-am

install-dvi-am: $(DVIS)
	@$(NORMAL_INSTALL)
	test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
	done
install-exec-am:

install-html: install-html-am

install-html-am: $(HTMLS)
	@$(NORMAL_INSTALL)
	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  $(am__strip_dir) \
	  if test -d "$$d$$p"; then \
	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
	  else \
	    list2="$$list2 $$d$$p"; \
	  fi; \
	done; \
	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
	done; }
install-info: install-info-am

install-info-am: $(INFO_DEPS)
	@$(NORMAL_INSTALL)
	test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
	for file in $$list; do \
	  case $$file in \
	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
	  esac; \
	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
	    if test -f $$ifile; then \
	      echo "$$ifile"; \
	    else : ; fi; \
	  done; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
	@$(POST_INSTALL)
	@if (install-info --version && \
	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
	  for file in $$list; do \
	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
	  done; \
	else : ; fi
install-man: install-man3

install-pdf: install-pdf-am

install-pdf-am: $(PDFS)
	@$(NORMAL_INSTALL)
	test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
install-ps: install-ps-am

install-ps-am: $(PSS)
	@$(NORMAL_INSTALL)
	test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
	@list='$(PSS)'; test -n "$(psdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
	maintainer-clean-generic maintainer-clean-vti

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
	mostlyclean-libtool mostlyclean-vti

pdf: pdf-am

pdf-am: $(PDFS)

ps: ps-am

ps-am: $(PSS)

uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
	uninstall-man uninstall-pdf-am uninstall-ps-am

uninstall-man: uninstall-man3

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
	clean-libtool dist-info distclean distclean-generic \
	distclean-libtool distdir dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-man3 install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs maintainer-clean maintainer-clean-aminfo \
	maintainer-clean-generic maintainer-clean-vti mostlyclean \
	mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \
	mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \
	uninstall-dvi-am uninstall-html-am uninstall-info-am \
	uninstall-man uninstall-man3 uninstall-pdf-am uninstall-ps-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/Makefile.am.

































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
man_MANS = libmicrohttpd.3
EXTRA_DIST = $(man_MANS) Doxyfile 

DISTCLEANFILES = \
  microhttpd.cps \
  microhttpd.dvi \
  tutorial.cps \
  tutorial.dvi
info_TEXINFOS = \
  microhttpd.texi \
  tutorial.texi
microhttpd_TEXINFOS = \
  chapters/basicauthentication.inc \
  chapters/bibliography.inc \
  chapters/exploringrequests.inc \
  chapters/hellobrowser.inc \
  chapters/introduction.inc \
  chapters/largerpost.inc \
  chapters/processingpost.inc \
  chapters/responseheaders.inc \
  chapters/tlsauthentication.inc \
  examples/basicauthentication.c \
  examples/hellobrowser.c \
  examples/largepost.c \
  examples/logging.c \
  examples/responseheaders.c \
  examples/simplepost.c \
  examples/tlsauthentication.c \
  fdl-1.3.texi \
  lgpl.texi \
  ecos.texi

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/Makefile.in.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
DIST_COMMON = $(microhttpd_TEXINFOS) $(srcdir)/Makefile.am \
	$(srcdir)/Makefile.in $(srcdir)/stamp-vti \
	$(srcdir)/version.texi mdate-sh texinfo.tex
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
INFO_DEPS = $(srcdir)/microhttpd.info \
	$(srcdir)/microhttpd-tutorial.info
am__TEXINFO_TEX_DIR = $(srcdir)
DVIS = microhttpd.dvi tutorial.dvi
PDFS = microhttpd.pdf tutorial.pdf
PSS = microhttpd.ps tutorial.ps
HTMLS = microhttpd.html tutorial.html
TEXINFOS = microhttpd.texi tutorial.texi
TEXI2DVI = texi2dvi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man3dir)"
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
man3dir = $(mandir)/man3
NROFF = nroff
MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
man_MANS = libmicrohttpd.3
EXTRA_DIST = $(man_MANS) Doxyfile 
DISTCLEANFILES = \
  microhttpd.cps \
  microhttpd.dvi \
  tutorial.cps \
  tutorial.dvi

info_TEXINFOS = \
  microhttpd.texi \
  tutorial.texi

microhttpd_TEXINFOS = \
  chapters/basicauthentication.inc \
  chapters/bibliography.inc \
  chapters/exploringrequests.inc \
  chapters/hellobrowser.inc \
  chapters/introduction.inc \
  chapters/largerpost.inc \
  chapters/processingpost.inc \
  chapters/responseheaders.inc \
  chapters/tlsauthentication.inc \
  examples/basicauthentication.c \
  examples/hellobrowser.c \
  examples/largepost.c \
  examples/logging.c \
  examples/responseheaders.c \
  examples/simplepost.c \
  examples/tlsauthentication.c \
  fdl-1.3.texi \
  lgpl.texi \
  ecos.texi

all: all-am

.SUFFIXES:
.SUFFIXES: .dvi .html .info .pdf .ps .texi
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

.texi.info:
	restore=: && backupdir="$(am__leading_dot)am$$$$" && \
	am__cwd=`pwd` && $(am__cd) $(srcdir) && \
	rm -rf $$backupdir && mkdir $$backupdir && \
	if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
	  for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
	    if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
	  done; \
	else :; fi && \
	cd "$$am__cwd"; \
	if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
	 -o $@ $<; \
	then \
	  rc=0; \
	  $(am__cd) $(srcdir); \
	else \
	  rc=$$?; \
	  $(am__cd) $(srcdir) && \
	  $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
	fi; \
	rm -rf $$backupdir; exit $$rc

.texi.dvi:
	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
	$(TEXI2DVI) $<

.texi.pdf:
	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
	MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
	$(TEXI2PDF) $<

.texi.html:
	rm -rf $(@:.html=.htp)
	if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
	 -o $(@:.html=.htp) $<; \
	then \
	  rm -rf $@; \
	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
	    mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
	else \
	  if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
	    rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
	  exit 1; \
	fi
$(srcdir)/microhttpd.info: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
microhttpd.dvi: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
microhttpd.pdf: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
microhttpd.html: microhttpd.texi $(srcdir)/version.texi $(microhttpd_TEXINFOS)
$(srcdir)/version.texi:  $(srcdir)/stamp-vti
$(srcdir)/stamp-vti: microhttpd.texi $(top_srcdir)/configure
	@(dir=.; test -f ./microhttpd.texi || dir=$(srcdir); \
	set `$(SHELL) $(srcdir)/mdate-sh $$dir/microhttpd.texi`; \
	echo "@set UPDATED $$1 $$2 $$3"; \
	echo "@set UPDATED-MONTH $$2 $$3"; \
	echo "@set EDITION $(VERSION)"; \
	echo "@set VERSION $(VERSION)") > vti.tmp
	@cmp -s vti.tmp $(srcdir)/version.texi \
	  || (echo "Updating $(srcdir)/version.texi"; \
	      cp vti.tmp $(srcdir)/version.texi)
	-@rm -f vti.tmp
	@cp $(srcdir)/version.texi $@

mostlyclean-vti:
	-rm -f vti.tmp

maintainer-clean-vti:
	-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
$(srcdir)/microhttpd-tutorial.info: tutorial.texi 
microhttpd-tutorial.dvi: tutorial.texi 
microhttpd-tutorial.pdf: tutorial.texi 
microhttpd-tutorial.html: tutorial.texi 
.dvi.ps:
	TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
	$(DVIPS) -o $@ $<

uninstall-dvi-am:
	@$(NORMAL_UNINSTALL)
	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
	  rm -f "$(DESTDIR)$(dvidir)/$$f"; \
	done

uninstall-html-am:
	@$(NORMAL_UNINSTALL)
	@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
	  rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
	done

uninstall-info-am:
	@$(PRE_UNINSTALL)
	@if test -d '$(DESTDIR)$(infodir)' && \
	    (install-info --version && \
	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
	  list='$(INFO_DEPS)'; \
	  for file in $$list; do \
	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
	    if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
	    then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
	  done; \
	else :; fi
	@$(NORMAL_UNINSTALL)
	@list='$(INFO_DEPS)'; \
	for file in $$list; do \
	  relfile=`echo "$$file" | sed 's|^.*/||'`; \
	  relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
	  (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
	     echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
	     rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
	   else :; fi); \
	done

uninstall-pdf-am:
	@$(NORMAL_UNINSTALL)
	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
	  rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
	done

uninstall-ps-am:
	@$(NORMAL_UNINSTALL)
	@list='$(PSS)'; test -n "$(psdir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
	  rm -f "$(DESTDIR)$(psdir)/$$f"; \
	done

dist-info: $(INFO_DEPS)
	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
	list='$(INFO_DEPS)'; \
	for base in $$list; do \
	  case $$base in \
	    $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
	  esac; \
	  if test -f $$base; then d=.; else d=$(srcdir); fi; \
	  base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
	  for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
	    if test -f $$file; then \
	      relfile=`expr "$$file" : "$$d/\(.*\)"`; \
	      test -f "$(distdir)/$$relfile" || \
		cp -p $$file "$(distdir)/$$relfile"; \
	    else :; fi; \
	  done; \
	done

mostlyclean-aminfo:
	-rm -rf microhttpd.aux microhttpd.cp microhttpd.cps microhttpd.fn \
	  microhttpd.fns microhttpd.ky microhttpd.kys microhttpd.log \
	  microhttpd.pg microhttpd.pgs microhttpd.tmp microhttpd.toc \
	  microhttpd.tp microhttpd.tps microhttpd.vr microhttpd.vrs \
	  tutorial.aux tutorial.cp tutorial.cps tutorial.fn \
	  tutorial.fns tutorial.ky tutorial.kys tutorial.log \
	  tutorial.pg tutorial.pgs tutorial.tmp tutorial.toc \
	  tutorial.tp tutorial.tps tutorial.vr tutorial.vrs

clean-aminfo:
	-test -z "microhttpd.dvi microhttpd.pdf microhttpd.ps microhttpd.html \
	  microhttpd-tutorial.dvi microhttpd-tutorial.pdf \
	  microhttpd-tutorial.ps microhttpd-tutorial.html" \
	|| rm -rf microhttpd.dvi microhttpd.pdf microhttpd.ps microhttpd.html \
	  microhttpd-tutorial.dvi microhttpd-tutorial.pdf \
	  microhttpd-tutorial.ps microhttpd-tutorial.html

maintainer-clean-aminfo:
	@list='$(INFO_DEPS)'; for i in $$list; do \
	  i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
	  echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
	  rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
	done
install-man3: $(man_MANS)
	@$(NORMAL_INSTALL)
	test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
	@list=''; test -n "$(man3dir)" || exit 0; \
	{ for i in $$list; do echo "$$i"; done; \
	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
	  sed -n '/\.3[a-z]*$$/p'; \
	} | while read p; do \
	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; echo "$$p"; \
	done | \
	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
	sed 'N;N;s,\n, ,g' | { \
	list=; while read file base inst; do \
	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
	  fi; \
	done; \
	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
	while read files; do \
	  test -z "$$files" || { \
	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
	done; }

uninstall-man3:
	@$(NORMAL_UNINSTALL)
	@list=''; test -n "$(man3dir)" || exit 0; \
	files=`{ for i in $$list; do echo "$$i"; done; \
	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
	  sed -n '/\.3[a-z]*$$/p'; \
	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
	test -z "$$files" || { \
	  echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \
	  cd "$(DESTDIR)$(man3dir)" && rm -f $$files; }
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:


distdir: $(DISTFILES)
	@list='$(MANS)'; if test -n "$$list"; then \
	  list=`for p in $$list; do \
	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
	  if test -n "$$list" && \
	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
	    exit 1; \
	  else :; fi; \
	else :; fi
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	$(MAKE) $(AM_MAKEFLAGS) \
	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
	  dist-info
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(MANS)
installdirs:
	for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man3dir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am: $(DVIS)

html: html-am

html-am: $(HTMLS)

info: info-am

info-am: $(INFO_DEPS)

install-data-am: install-info-am install-man

install-dvi: install-dvi-am

install-dvi-am: $(DVIS)
	@$(NORMAL_INSTALL)
	test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
	@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
	done
install-exec-am:

install-html: install-html-am

install-html-am: $(HTMLS)
	@$(NORMAL_INSTALL)
	test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
	@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  $(am__strip_dir) \
	  if test -d "$$d$$p"; then \
	    echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
	  else \
	    list2="$$list2 $$d$$p"; \
	  fi; \
	done; \
	test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
	done; }
install-info: install-info-am

install-info-am: $(INFO_DEPS)
	@$(NORMAL_INSTALL)
	test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
	list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
	for file in $$list; do \
	  case $$file in \
	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
	  esac; \
	  if test -f $$file; then d=.; else d=$(srcdir); fi; \
	  file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
	  for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
	               $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
	    if test -f $$ifile; then \
	      echo "$$ifile"; \
	    else : ; fi; \
	  done; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
	@$(POST_INSTALL)
	@if (install-info --version && \
	     install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
	  list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
	  for file in $$list; do \
	    relfile=`echo "$$file" | sed 's|^.*/||'`; \
	    echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
	    install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
	  done; \
	else : ; fi
install-man: install-man3

install-pdf: install-pdf-am

install-pdf-am: $(PDFS)
	@$(NORMAL_INSTALL)
	test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
	@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
install-ps: install-ps-am

install-ps-am: $(PSS)
	@$(NORMAL_INSTALL)
	test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
	@list='$(PSS)'; test -n "$(psdir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
	  $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
	maintainer-clean-generic maintainer-clean-vti

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
	mostlyclean-libtool mostlyclean-vti

pdf: pdf-am

pdf-am: $(PDFS)

ps: ps-am

ps-am: $(PSS)

uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
	uninstall-man uninstall-pdf-am uninstall-ps-am

uninstall-man: uninstall-man3

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
	clean-libtool dist-info distclean distclean-generic \
	distclean-libtool distdir dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-man3 install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs maintainer-clean maintainer-clean-aminfo \
	maintainer-clean-generic maintainer-clean-vti mostlyclean \
	mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \
	mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \
	uninstall-dvi-am uninstall-html-am uninstall-info-am \
	uninstall-man uninstall-man3 uninstall-pdf-am uninstall-ps-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/basicauthentication.inc.



































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
With the small exception of IP address based access control, 
requests from all connecting clients where served equally until now.
This chapter discusses a first method of client's authentication and
its limits. 

A very simple approach feasible with the means already discussed would
be to expect the password in the @emph{URI} string before granting access to
the secured areas. The password could be separated from the actual resource identifier
by a certain character, thus the request line might look like
@verbatim
GET /picture.png?mypassword
@end verbatim
@noindent

In the rare situation where the client is customized enough and the connection occurs
through secured lines (e.g., a embedded device directly attached to another via wire)
and where the ability to embedd a password in the URI or to pass on a URI with a
password are desired, this can be a reasonable choice. 

But when it is assumed that the user connecting does so with an ordinary Internet browser,
this implementation brings some problems about. For example, the URI including the password
stays in the address field or at least in the history of the browser for anybody near enough to see. 
It will also be inconvenient to add the password manually to any new URI when the browser does
not know how to compose this automatically.

At least the convenience issue can be addressed by employing the simplest built-in password
facilities of HTTP compliant browsers, hence we want to start there. It will however turn out
to have still severe weaknesses in terms of security which need consideration.

Before we will start implementing @emph{Basic Authentication} as described in @emph{RFC 2617},
we should finally abandon the bad practice of responding every request the first time our callback
is called for a given connection. This is becoming more important now because the client and 
the server will have to talk in a more bi-directional way than before to 

But how can we tell whether the callback has been called before for the particular connection?
Initially, the pointer this parameter references is set by @emph{MHD} in the callback. But it will 
also be "remembered" on the next call (for the same connection).
Thus, we will generate no response until the parameter is non-null---implying the callback was
called before at least once. We do not need to share information between different calls of the callback,
so we can set the parameter to any adress that is assured to be not null. The pointer to the 
@code{connection} structure will be pointing to a legal address, so we take this.

The first time @code{answer_to_connection} is called, we will not even look at the headers.

@verbatim
static int 
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method, const char *version, 
                      const char *upload_data, size_t *upload_data_size,
                      void **con_cls)
{
  if (0 != strcmp(method, "GET")) return MHD_NO;
  if (NULL == *con_cls) {*con_cls = connection; return MHD_YES;}

  ... 
  /* else respond accordingly */
  ...
}
@end verbatim
@noindent

Note how we lop off the connection on the first condition (no "GET" request), but return asking for more on 
the other one with @code{MHD_YES}.
With this minor change, we can proceed to implement the actual authentication process.

@heading Request for authentication 

Let us assume we had only files not intended to be handed out without the correct username/password,
so every "GET" request will be challenged.
@emph{RFC 2617} describes how the server shall ask for authentication by adding a
@emph{WWW-Authenticate} response header with the name of the @emph{realm} protected.

We let an extra function function do this.
@verbatim
static int 
ask_for_authentication (struct MHD_Connection *connection, const char *realm)
{
  int ret;
  struct MHD_Response *response;
  char *headervalue;
  const char *strbase = "Basic realm=";
  
  response = MHD_create_response_from_data (0, NULL, MHD_NO, MHD_NO);
  if (!response) return MHD_NO;
  
  headervalue = malloc (strlen (strbase) + strlen (realm) + 1);
  if (!headervalue) return MHD_NO;  

  strcpy (headervalue, strbase);
  strcat (headervalue, realm);
  
  ret = MHD_add_response_header (response, "WWW-Authenticate", headervalue);
  free (headervalue);  
  if (!ret) {MHD_destroy_response (response); return MHD_NO;}

  ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response);
  MHD_destroy_response (response);
  return ret;
}
@end verbatim
@noindent

@code{#define} the realm name according to your own taste, e.g. "Maintenance" or "Area51" but
it will need to have extra quotes.

Since the client may send the authentication right away, it would be wrong to ask for
it without checking the request's header--where the authentication is expected to be found.

@heading Authentication in detail
Checking @emph{RFC 2617} again, we find that the client will pack the username and password, by
whatever means he might have obtained them, in a line separated by a colon---and then encodes
them to @emph{Base64}. The actual implementation of this encoding are not within the scope of
this tutorial although a working function is included in the complete source file of the example.

An unencoded word describing the authentication method (here "Basic") will precede the code
and the resulting line is the value of a request header of the type "Authorization".  

This header line thus is of interest to the function checking a connection for a given username/password:
@verbatim
static int 
is_authenticated (struct MHD_Connection *connection,
                  const char *username, const char *password)
{
  const char *headervalue;
  ...

  headervalue = MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                             "Authorization");
  if (NULL == headervalue) return 0;
@end verbatim
@noindent

where, firstly, the authentication method will be checked.
@verbatim
const char *strbase = "Basic ";
...
if (0 != strncmp (headervalue, strbase, strlen (strbase))) return 0;
@end verbatim
@noindent

Of course, we could decode the passed credentials in the next step and compare them directly to
the given strings. But as this would involve string parsing, which is more complicated then string
composing, it is done the other way around---the clear text credentials will be encoded to @emph{Base64}
and then compared against the headerline. The authentication method string will be left out here as
it has been checked already at this point.
@verbatim
  char *expected_b64, *expected;
  int authenticated;

  ...
  strcpy (expected, username);
  strcat (expected, ":");
  strcat (expected, password);  

  expected_b64 = string_to_base64 (expected);
  if (NULL == expected_b64) return 0;
 
  strcpy (expected, strbase);
  authenticated = (strcmp (headervalue + strlen (strbase), expected_b64) == 0);

  free (expected_b64);

  return authenticated;
}
@end verbatim
@noindent

These two functions---together with a response function in case of positive authentication doing little 
new---allow the rest of the callback function to be rather short. 
@verbatim
  if (!is_authenticated (connection, USER, PASSWORD)) 
    return ask_for_authentication (connection, REALM); 
  
  return secret_page (connection);
}
@end verbatim
@noindent

See the @code{examples} directory for the complete example file.

@heading Remarks
For a proper server, the conditional statements leading to a return of @code{MHD_NO} should yield a 
response with a more precise status code instead of silently closing the connection. For example,
failures of memory allocation are best reported as @emph{internal server error} and unexpected 
authentication methods as @emph{400 bad request}.

@heading Exercises
@itemize @bullet
@item
Make the server respond to wrong credentials (but otherwise well-formed requests) with the recommended
@emph{401 unauthorized} status code. If the client still does not authenticate correctly within the
same connection, close it and store the client's IP address for a certain time. (It is OK to check for
expiration not until the main thread wakes up again on the next connection.) If the client fails
authenticating three times during this period, add it to another list for which the 
@code{AcceptPolicyCallback} function denies connection (temporally).

@item
With the network utility @code{netcat} connect and log the response of a "GET" request as you
did in the exercise of the first example, this time to a file. Now stop the server and let @emph{netcat}
listen on the same port the server used to listen on and have it fake being the proper server by giving
the file's content as the response (e.g. @code{cat log | nc -l -p 8888}). Pretending to think your were
connecting to the actual server, browse to the eavesdropper and give the correct credentials.

Copy and paste the encoded string you see in @code{netcat}'s output to some of the Base64 decode tools available online
and see how both the user's name and password could be completely restored.

@end itemize


Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/bibliography.inc.



























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@heading API reference
@itemize @bullet
@item
The @emph{GNU libmicrohttpd} manual by Marco Maggi and Christian Grothoff 2008 
@uref{http://gnunet.org/libmicrohttpd/microhttpd.html}

@item
All referenced RFCs can be found on the website of @emph{The Internet Engineering Task Force}
@uref{http://www.ietf.org/}

@item
@emph{RFC 2616}: Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T. Berners-Lee,
"Hypertext Transfer Protocol -- HTTP/1.1", RFC 2016, January 1997.

@item
@emph{RFC 2617}: Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P.,
Luotonen, A., and L. Stewart, "HTTP Authentication: Basic and Digest Access Authentication", RFC 2617, June 1999.


@item 
A well--structured @emph{HTML} reference can be found on
@uref{http://www.echoecho.com/html.htm}

For those readers understanding German or French, there is an excellent document both for learning
@emph{HTML} and for reference, whose English version unfortunately has been discontinued.
@uref{http://de.selfhtml.org/} and @uref{http://fr.selfhtml.org/}


@end itemize

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/exploringrequests.inc.



























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
This chapter will deal with the information which the client sends to the
server at every request. We are going to examine the most useful fields of such an request
and print them out in a readable manner. This could be useful for logging facilities.

The starting point is the @emph{hellobrowser} program with the former response removed.

This time, we just want to collect information in the callback function, thus we will
just return MHD_NO after we have probed the request. This way, the connection is closed
without much ado by the server.

@verbatim
static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
                      const char *url, 
		      const char *method, const char *version, 
		      const char *upload_data, 
                      size_t *upload_data_size, void **con_cls)
{
  ...  
  return MHD_NO;
}
@end verbatim
@noindent
The ellipsis marks the position where the following instructions shall be inserted.


We begin with the most obvious information available to the server, the request line. You should
already have noted that a request consists of a command (or "HTTP method") and a URI (e.g. a filename).
It also contains a string for the version of the protocol which can be found in @code{version}.
To call it a "new request" is justified because we return only @code{MHD_NO}, thus ensuring the 
function will not be called again for this connection. 
@verbatim
printf ("New %s request for %s using version %s\n", method, url, version);
@end verbatim
@noindent

The rest of the information is a bit more hidden. Nevertheless, there is lot of it sent from common
Internet browsers. It is stored in "key-value" pairs and we want to list what we find in the header. 
As there is no mandatory set of keys a client has to send, each key-value pair is printed out one by
one until there are no more left. We do this by writing a separate function which will be called for
each pair just like the above function is called for each HTTP request. 
It can then print out the content of this pair.
@verbatim
int print_out_key (void *cls, enum MHD_ValueKind kind, 
                   const char *key, const char *value)
{
  printf ("%s: %s\n", key, value);
  return MHD_YES;
}
@end verbatim
@noindent

To start the iteration process that calls our new function for every key, the line
@verbatim
MHD_get_connection_values (connection, MHD_HEADER_KIND, &print_out_key, NULL);
@end verbatim
@noindent
needs to be inserted in the connection callback function too. The second parameter tells the function 
that we are only interested in keys from the general HTTP header of the request. Our iterating
function @code{print_out_key} does not rely on any additional information to fulfill its duties
so the last parameter can be NULL.

All in all, this constitutes the complete @code{logging.c} program for this chapter which can be 
found in the @code{examples} section.

Connecting with any modern Internet browser should yield a handful of keys. You should try to 
interpret them with the aid of @emph{RFC 2616}.
Especially worth mentioning is the "Host" key which is often used to serve several different websites
hosted under one single IP address but reachable by different domain names (this is called virtual hosting).

@heading Conclusion
The introduced capabilities to itemize the content of a simple GET request---especially the
URI---should already allow the server to satisfy clients' requests for small specific resources
(e.g. files) or even induce alteration of server state. However, the latter is not
recommended as the GET method (including its header data) is by convention considered a "safe"
operation, which should not change the server's state in a significant way.  By convention,
GET operations can thus be performed by crawlers and other automatic software.  Naturally
actions like searching for a passed string are fine.

Of course, no transmission can occur while the return value is still set to @code{MHD_NO} in the
callback function.

@heading Exercises
@itemize @bullet
@item
By parsing the @code{url} string and delivering responses accordingly, implement a small server for
"virtual" files. When asked for @code{/index.htm@{l@}}, let the response consist of a HTML page
containing a link to @code{/another.html} page which is also to be created "on the fly" in case of
being requested. If neither of these two pages are requested, @code{MHD_HTTP_NOT_FOUND} shall be
returned accompanied by an informative message.

@item
A very interesting information has still been ignored by our logger---the client's IP address. 
Implement a callback function 
@verbatim
static int on_client_connect (void *cls,
                              const struct sockaddr *addr,
			      socklen_t addrlen)
@end verbatim
@noindent
that prints out the IP address in an appropriate format. You might want to use the POSIX function
@code{inet_ntoa} but bear in mind that @code{addr} is actually just a structure containing other
substructures and is @emph{not} the variable this function expects. 
Make sure to return @code{MHD_YES} so that the library knows the client is allowed to connect
(and to then process the request). If one wanted to limit access basing on IP addresses, this would be the place
to do it. The address of your @code{on_client_connect} function must be passed as the third parameter to the
@code{MHD_start_daemon} call.

@end itemize

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/hellobrowser.inc.





























































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
The most basic task for a HTTP server is to deliver a static text message to any client connecting to it.
Given that this is also easy to implement, it is an excellent problem to start with.

For now, the particular URI the client asks for shall have no effect on the message that will 
be returned. In addition, the server shall end the connection after the message has been sent so that
the client will know there is nothing more to expect.

The C program @code{hellobrowser.c}, which is to be found in the examples section, does just that.
If you are very eager, you can compile and start it right away but it is advisable to type the
lines in by yourself as they will be discussed and explained in detail. 

After the necessary includes and the definition of the port which our server should listen on
@verbatim
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>

#define PORT 8888
@end verbatim
@noindent
the desired behaviour of our server when HTTP request arrive has to be implemented. We already have
agreed that it should not care about the particular details of the request, such as who is requesting
what. The server will respond merely with the same small HTML page to every request. 

The function we are going to write now will be called by @emph{GNU libmicrohttpd} every time an
appropriate request comes in. While the name of this callback function is arbitrary, its parameter
list has to follow a certain layout. So please, ignore the lot of parameters for now, they will be
explained at the point they are needed. We have to use only one of them,
@code{struct MHD_Connection *connection}, for the minimalistic functionality we want to archive at the moment.

This parameter is set by the @emph{libmicrohttpd} daemon and holds the necessary information to
relate the call with a certain connection. Keep in mind that a server might have to satisfy hundreds
of concurrent connections and we have to make sure that the correct data is sent to the destined
client. Therefore, this variable is a means to refer to a particular connection if we ask the
daemon to sent the reply.

Talking about the reply, it is defined as a string right after the function header
@verbatim
int answer_to_connection (void *cls, struct MHD_Connection *connection, 
                          const char *url, 
                          const char *method, const char *version, 
                          const char *upload_data, 
                          size_t *upload_data_size, void **con_cls)
{
  const char *page  = "<html><body>Hello, browser!</body></html>";
@end verbatim
@noindent
HTTP is a rather strict protocol and the client would certainly consider it "inappropriate" if we
just sent the answer string "as is". Instead, it has to be wrapped with additional information stored in so-called headers and footers.  Most of the work in this area is done by the library for us---we
just have to ask. Our reply string packed in the necessary layers will be called a "response".
To obtain such a response we hand our data (the reply--string) and its size over to the 
@code{MHD_create_response_from_data} function. The last two parameters basically tell @emph{MHD}
that we do not want it to dispose the message data for us when it has been sent and there also needs
no internal copy to be done because the @emph{constant} string won't change anyway.

@verbatim
  struct MHD_Response *response;
  int ret;

  response = MHD_create_response_from_data (strlen (page),
                                            (void*) page, MHD_NO, MHD_NO);
@end verbatim
@noindent
Now that the the response has been laced up, it is ready for delivery and can be queued for sending. 
This is done by passing it to another @emph{GNU libmicrohttpd} function. As all our work was done in
the scope of one function, the recipient is without doubt the one associated with the
local variable @code{connection} and consequently this variable is given to the queue function. 
Every HTTP response is accompanied by a status code, here "OK", so that the client knows 
this response is the intended result of his request and not due to some error or malfunction.

Finally, the packet is destroyed and the return value from the queue returned,
already being set at this point to either MHD_YES or MHD_NO in case of success or failure.

@verbatim
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}
@end verbatim
@noindent
With the primary task of our server implemented, we can start the actual server daemon which will listen 
on @code{PORT} for connections. This is done in the main function.
@verbatim
int main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL, 
                             &answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon) return 1;
@end verbatim
@noindent
The first parameter is one of three possible modes of operation. Here we want the daemon to run in
a separate thread and to manage all incoming connections in the same thread. This means that while
producing the response for one connection, the other connections will be put on hold. In this
example, where the reply is already known and therefore the request is served quickly, this poses no problem.

We will allow all clients to connect regardless of their name or location, therefore we do not check
them on connection and set the forth and fifth parameter to NULL.

Parameter six is the address of the function we want to be called whenever a new connection has been
established. Our @code{answer_to_connection} knows best what the client wants and needs no additional
information (which could be passed via the next parameter) so the next parameter is NULL. Likewise,
we do not need to pass extra options to the daemon so we just write the MHD_OPTION_END as the last parameter.

As the server daemon runs in the background in its own thread, the execution flow in our main
function will contine right after the call. Because of this, we must delay the execution flow in the
main thread or else the program will terminate prematurely. We let it pause in a processing-time
friendly manner by waiting for the enter key to be pressed. In the end, we stop the daemon so it can
do its cleanup tasks.
@verbatim
  getchar (); 

  MHD_stop_daemon (daemon);
  return 0;
}

@end verbatim
@noindent
The first example is now complete.

Compile it with 
@verbatim
cc hellobrowser.c -o hellobrowser -I$PATH_TO_LIBMHD_INCLUDES 
  -L$PATH_TO_LIBMHD_INCLUDES -lmicrohttpd
@end verbatim
with the two paths set accordingly and run it.

Now open your favorite Internet browser and go to the address @code{http://localhost:8888/}, provided that 8888
is the port you chose. If everything works as expected, the browser will present the message of the
static HTML page it got from our minimal server.

@heading Remarks
To keep this first example as small as possible, some drastic shortcuts were taken and are to be
discussed now. 

Firstly, there is no distinction made between the kinds of requests a client could send. We implied
that the client sends a GET request, that means, that he actually asked for some data. Even when
it is not intended to accept POST requests, a good server should at least recognize that this
request does not constitute a legal request and answer with an error code. This can be easily
implemented by checking if the parameter @code{method} equals the string "GET" and returning a
@code{MHD_NO} if not so.

Secondly, the above practice of queuing a response upon the first call of the callback function
brings with it some limitations. This is because the content of the message body will not be
received if a response is queued in the first iteration. Furthermore, the connection will be closed
right after the response has been transferred then.

Both of these issues you will find addressed in the official @code{minimal_example.c} residing in
the @code{src/examples} directory of the @emph{MHD} package. The source code of this
program should look very familiar to you by now and easy to understand.

For our example, the @code{must_copy} and @code{must_free} parameter at the response construction
function could be set to @code{MHD_NO}. In the usual case, responses cannot be sent immediately
after being queued. For example, there might be other data on the system that needs to be sent with
a higher priority. Nevertheless, the queue function will return successfully---raising the problem
that the data we have pointed to may be invalid by the time it is about being sent. This is not an
issue here because we can expect the @code{page} string, which is a constant @emph{string literal}
here, to be static. That means it will be present and unchanged for as long as the program runs. 
For dynamic data, one could choose to either have @emph{MHD} free the memory @code{page} points 
to itself when it is not longer needed or, alternatively, have the library to make and manage 
its own copy of it.

@heading Exercises
@itemize @bullet
@item
While the server is running, use a program like @code{telnet} or @code{netcat} to connect to it. Try to form a
valid HTTP 1.1 request yourself like
@verbatim
GET /dontcare HTTP/1.1
Host: itsme
<enter>
@end verbatim
@noindent
and see what the server returns to you.
     

@item
Also, try other requests, like POST, and see how our server does not mind and why.
How far in malforming a request can you go before the builtin functionality of @emph{MHD} intervenes
and an altered response is sent? Make sure you read about the status codes in the @emph{RFC}.


@item
Add the option @code{MHD_USE_PEDANTIC_CHECKS} to the start function of the daemon in @code{main}.
Mind the special format of the parameter list here which is described in the manual. How indulgent
is the server now to your input?


@item
Let the main function take a string as the first command line argument and pass @code{argv[1]} to
the @code{MHD_start_daemon} function as the sixth parameter. The address of this string will be
passed to the callback function via the @code{cls} variable. Decorate the text given at the command
line when the server is started with proper HTML tags and send it as the response instead of the
former static string.


@item
@emph{Demanding:} Write a separate function returning a string containing some useful information, 
for example, the time. Pass the function's address as the sixth parameter and evaluate this function
on every request anew in @code{answer_to_connection}. Remember to free the memory of the string
every time after satisfying the request.

@end itemize

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/introduction.inc.















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
This tutorial is for developers who want to learn how they can add HTTP serving 
capabilities to their applications with the @emph{GNU libmicrohttpd} library,
abbreviated @emph{MHD}.  The reader will learn how to
implement basic HTTP functions from simple executable
sample programs that implement various features.

The text is supposed to be a supplement to the API reference manual of 
@emph{GNU libmicrohttpd} and for that reason does not explain many of the parameters.
Therefore, the reader should always consult the manual to find the exact meaning
of the functions used in the tutorial.  Furthermore, the reader is 
encouraged to study the relevant @emph{RFCs}, which document the HTTP standard.

@emph{GNU libmicrohttpd} is assumed to be already installed.  This tutorial
is written for version @value{VERSION}.  At the time being, 
this tutorial has only been tested on @emph{GNU/Linux} machines even though
efforts were made not to rely on anything that would prevent the samples from being
built on similar systems.

@section History

This tutorial was originally written by Sebastian Gerhardt for MHD
0.4.0.  It was slighly polished and updated to MHD 0.9.0 by Christian
Grothoff.

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/largerpost.inc.































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
The previous chapter introduced a way to upload data to the server, but the developed example program 
has some shortcomings, such as not being able to handle larger chunks of data. In this chapter, we
are going to discuss a more advanced server program that allows clients to upload a file in order to 
have it stored on the server's filesystem. The server shall also watch and limit the number of
clients concurrently uploading, responding with a proper busy message if necessary.


@heading Prepared answers
We choose to operate the server with the @code{SELECT_INTERNALLY} method. This makes it easier to 
synchronize the global states at the cost of possible delays for other connections if the processing
of a request is too slow. One of these variables that needs to be shared for all connections is the
total number of clients that are uploading.

@verbatim
#define MAXCLIENTS      2
static unsigned int    nr_of_uploading_clients = 0;
@end verbatim
@noindent

If there are too many clients uploading, we want the server to respond to all requests with a busy
message.
@verbatim
const char* busypage = 
  "<html><body>This server is busy, please try again later.</body></html>";
@end verbatim
@noindent

Otherwise, the server will send a @emph{form} that informs the user of the current number of uploading clients,   
and ask her to pick a file on her local filesystem which is to be uploaded. 
@verbatim
const char* askpage = "<html><body>\n\
                       Upload a file, please!<br>\n\
                       There are %u clients uploading at the moment.<br>\n\
                       <form action=\"/filepost\" method=\"post\" \
                         enctype=\"multipart/form-data\">\n\
                       <input name=\"file\" type=\"file\">\n\
                       <input type=\"submit\" value=\" Send \"></form>\n\
                       </body></html>";
@end verbatim
@noindent

If the upload has succeeded, the server will respond with a message saying so.
@verbatim
const char* completepage = "<html><body>The upload has been completed.</body></html>";
@end verbatim
@noindent

We want the server to report internal errors, such as memory shortage or file access problems,
adequately. 
@verbatim
const char* servererrorpage 
  = "<html><body>An internal server error has occured.</body></html>";
const char* fileexistspage
  = "<html><body>This file already exists.</body></html>";
@end verbatim
@noindent

It would be tolerable to send all these responses undifferentiated with a @code{200 HTTP_OK} 
status code but in order to improve the @code{HTTP} conformance of our server a bit, we extend the 
@code{send_page} function so that it accepts individual status codes. 

@verbatim
static int 
send_page (struct MHD_Connection *connection, 
	   const char* page, int status_code)
{
  int ret;
  struct MHD_Response *response;
  
  response = MHD_create_response_from_data (strlen (page), (void*) page, 
  	     				    MHD_NO, MHD_YES);
  if (!response) return MHD_NO;
 
  ret = MHD_queue_response (connection, status_code, response);
  MHD_destroy_response (response);

  return ret;
}
@end verbatim
@noindent

Note how we ask @emph{MHD} to make its own copy of the message data. The reason behind this will
become clear later.


@heading Connection cycle
The decision whether the server is busy or not is made right at the beginning of the connection. To 
do that at this stage is especially important for @emph{POST} requests because if no response is 
queued at this point, and @code{MHD_YES} returned, @emph{MHD} will not sent any queued messages until
a postprocessor has been created and the post iterator is called at least once.

@verbatim
static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
		      const char *url, 
                      const char *method, const char *version, 
		      const char *upload_data, 
                      size_t *upload_data_size, void **con_cls)
{
  if (NULL == *con_cls) 
    {
      struct connection_info_struct *con_info;

      if (nr_of_uploading_clients >= MAXCLIENTS) 
        return send_page(connection, busypage, MHD_HTTP_SERVICE_UNAVAILABLE);
@end verbatim
@noindent

If the server is not busy, the @code{connection_info} structure is initialized as usual, with 
the addition of a filepointer for each connection.

@verbatim
      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info) return MHD_NO;
      con_info->fp = 0;

      if (0 == strcmp (method, "POST")) 
        {  
          ...
        } 
      else con_info->connectiontype = GET;

      *con_cls = (void*) con_info;
 
      return MHD_YES;
    }
@end verbatim
@noindent

For @emph{POST} requests, the postprocessor is created and we register a new uploading client. From 
this point on, there are many possible places for errors to occur that make it necessary to interrupt
the uploading process. We need a means of having the proper response message ready at all times. 
Therefore, the @code{connection_info} structure is extended to hold the most current response
message so that whenever a response is sent, the client will get the most informative message. Here,
the structure is initialized to "no error".
@verbatim
      if (0 == strcmp (method, "POST")) 
        {  
          con_info->postprocessor 
	    = MHD_create_post_processor (connection, POSTBUFFERSIZE, 
                                         iterate_post, (void*) con_info);   

          if (NULL == con_info->postprocessor) 
            {
              free (con_info); 
              return MHD_NO;
            }

          nr_of_uploading_clients++;
          
          con_info->connectiontype = POST;
          con_info->answercode = MHD_HTTP_OK;
          con_info->answerstring = completepage;
        } 
      else con_info->connectiontype = GET;
@end verbatim
@noindent

If the connection handler is called for the second time, @emph{GET} requests will be answered with
the @emph{form}. We can keep the buffer under function scope, because we asked @emph{MHD} to make its
own copy of it for as long as it is needed.
@verbatim
  if (0 == strcmp (method, "GET")) 
    {
      int ret;
      char buffer[1024];
        
      sprintf (buffer, askpage, nr_of_uploading_clients);
      return send_page (connection, buffer, MHD_HTTP_OK);     
    } 
@end verbatim
@noindent


The rest of the @code{answer_to_connection} function is very similar to the @code{simplepost.c}
example, except the more flexible content of the responses. The @emph{POST} data is processed until
there is none left and the execution falls through to return an error page if the connection
constituted no expected request method.
@verbatim
  if (0 == strcmp (method, "POST")) 
    {
      struct connection_info_struct *con_info = *con_cls;
       
      if (0 != *upload_data_size) 
        { 
          MHD_post_process (con_info->postprocessor,
	                    upload_data, *upload_data_size);
          *upload_data_size = 0;
          
          return MHD_YES;
        } 
      else 
        return send_page (connection, con_info->answerstring, 
	       		  con_info->answercode);
    } 

  return send_page(connection, errorpage, MHD_HTTP_BAD_REQUEST);
}
@end verbatim
@noindent


@heading Storing to data
Unlike the @code{simplepost.c} example, here it is to be expected that post iterator will be called
several times now. This means that for any given connection (there might be several concurrent of them)
the posted data has to be written to the correct file. That is why we store a file handle in every
@code{connection_info}, so that the it is preserved between successive iterations.
@verbatim
static int 
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, 
	      const char *key,
	      const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, 
	      uint64_t off, size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;
@end verbatim
@noindent

Because the following actions depend heavily on correct file processing, which might be error prone,
we default to reporting internal errors in case anything will go wrong.

@verbatim
con_info->answerstring = servererrorpage;
con_info->answercode = MHD_HTTP_INTERNAL_SERVER_ERROR;
@end verbatim
@noindent

In the "askpage" @emph{form}, we told the client to label its post data with the "file" key. Anything else
would be an error.

@verbatim
  if (0 != strcmp (key, "file")) return MHD_NO;
@end verbatim
@noindent

If the iterator is called for the first time, no file will have been opened yet. The @code{filename}
string contains the name of the file (without any paths) the user selected on his system. We want to
take this as the name the file will be stored on the server and make sure no file of that name exists
(or is being uploaded) before we create one (note that the code below technically contains a
race between the two "fopen" calls, but we will overlook this for portability sake).
@verbatim
  if (!con_info->fp)
    {
      if (NULL != (fp = fopen (filename, "rb")) )
        {
          fclose (fp);
          con_info->answerstring = fileexistspage;
          con_info->answercode = MHD_HTTP_FORBIDDEN;
          return MHD_NO;
        }
      
      con_info->fp = fopen (filename, "ab");
      if (!con_info->fp) return MHD_NO;    
    }
@end verbatim
@noindent


Occasionally, the iterator function will be called even when there are 0 new bytes to process. The 
server only needs to write data to the file if there is some.
@verbatim
if (size > 0) 
    {  
      if (!fwrite (data, size, sizeof(char), con_info->fp))
        return MHD_NO;
    }
@end verbatim
@noindent

If this point has been reached, everything worked well for this iteration and the response can
be set to success again. If the upload has finished, this iterator function will not be called again.
@verbatim
  con_info->answerstring = completepage;
  con_info->answercode = MHD_HTTP_OK;

  return MHD_YES;
}
@end verbatim
@noindent


The new client was registered when the postprocessor was created. Likewise, we unregister the client
on destroying the postprocessor when the request is completed.
@verbatim
void request_completed (void *cls, struct MHD_Connection *connection, 
     		        void **con_cls,
                        enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info) return;

  if (con_info->connectiontype == POST)
    {
      if (NULL != con_info->postprocessor) 
        {
          MHD_destroy_post_processor (con_info->postprocessor); 
          nr_of_uploading_clients--;
        }

      if (con_info->fp) fclose (con_info->fp); 
    }

  free (con_info);
  *con_cls = NULL;      
}
@end verbatim
@noindent


This is essentially the whole example @code{largepost.c}.


@heading Remarks
Now that the clients are able to create files on the server, security aspects are becoming even more
important than before. Aside from proper client authentication, the server should always make sure
explicitly that no files will be created outside of a dedicated upload directory.  In particular,
filenames must be checked to not contain strings like "../".

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/processingpost.inc.





























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
The previous chapters already have demonstrated a variety of possibilities to send information 
to the HTTP server, but it is not recommended that the @emph{GET} method is used to alter the way
the server operates. To induce changes on the server, the @emph{POST} method is preferred over
and is much more powerful than @emph{GET} and will be introduced in this chapter.

We are going to write an application that asks for the visitor's name and, after the user has posted it,
composes an individual response text. Even though it was not mandatory to use the @emph{POST} method here,
as there is no permanent change caused by the POST, it is an illustrative example on how to share data
between different functions for the same connection. Furthermore, the reader should be able to extend
it easily.

@heading GET request
When the first @emph{GET} request arrives, the server shall respond with a HTML page containing an
edit field for the name.

@verbatim
const char* askpage = "<html><body>\
                       What's your name, Sir?<br>\
                       <form action=\"/namepost\" method=\"post\">\
                       <input name=\"name\" type=\"text\"\
                       <input type=\"submit\" value=\" Send \"></form>\
                       </body></html>";
@end verbatim
@noindent

The @code{action} entry is the @emph{URI} to be called by the browser when posting, and the
@code{name} will be used later to be sure it is the editbox's content that has been posted.

We also prepare the answer page, where the name is to be filled in later, and an error page 
as the response for anything but proper @emph{GET} and @emph{POST} requests:

@verbatim
const char* greatingpage="<html><body><h1>Welcome, %s!</center></h1></body></html>";

const char* errorpage="<html><body>This doesn't seem to be right.</body></html>";
@end verbatim
@noindent

Whenever we need to send a page, we use an extra function
@code{int send_page(struct MHD_Connection *connection, const char* page)}
for this, which does not contain anything new and whose implementation is therefore 
not discussed further in the tutorial.


@heading POST request
Posted data can be of arbitrary and considerable size; for example, if a user uploads a big
image to the server. Similar to the case of the header fields, there may also be different streams
of posted data, such as one containing the text of an editbox and another the state of a button.
Likewise, we will have to register an iterator function that is going to be called maybe several times 
not only if there are different POSTs but also if one POST has only been received partly yet and
needs processing before another chunk can be received.

Such an iterator function is called by a @emph{postprocessor}, which must be created upon arriving
of the post request.  We want the iterator function to read the first post data which is tagged
@code{name} and to create an individual greeting string based on the template and the name. 
But in order to pass this string to other functions and still be able to differentiate different
connections, we must first define a structure to share the information, holding the most import entries.

@verbatim
struct connection_info_struct
{
  int connectiontype;
  char *answerstring;
  struct MHD_PostProcessor *postprocessor; 
};
@end verbatim
@noindent

With these information available to the iterator function, it is able to fulfill its task. 
Once it has composed the greeting string, it returns @code{MHD_NO} to inform the post processor
that it does not need to be called again. Note that this function does not handle processing
of data for the same @code{key}. If we were to expect that the name will be posted in several
chunks, we had to expand the namestring dynamically as additional parts of it with the same @code{key}
came in. But in this example, the name is assumed to fit entirely inside one single packet.

@verbatim
static int 
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key,
              const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, 
	      uint64_t off, size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;

  if (0 == strcmp (key, "name"))
    {
      if ((size > 0) && (size <= MAXNAMESIZE))
        {
          char *answerstring;
          answerstring = malloc (MAXANSWERSIZE);
          if (!answerstring) return MHD_NO;
      
          snprintf (answerstring, MAXANSWERSIZE, greatingpage, data);
          con_info->answerstring = answerstring;      
        } 
      else con_info->answerstring = NULL;

      return MHD_NO;
    }

  return MHD_YES;
}
@end verbatim
@noindent

Once a connection has been established, it can be terminated for many reasons. As these
reasons include unexpected events, we have to register another function that cleans up any resources
that might have been allocated for that connection by us, namely the post processor and the greetings
string. This cleanup function must take into account that it will also be called for finished 
requests other than @emph{POST} requests.

@verbatim
void request_completed (void *cls, struct MHD_Connection *connection, 
     		        void **con_cls,
                        enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info) return;
  if (con_info->connectiontype == POST)
    {
      MHD_destroy_post_processor (con_info->postprocessor);        
      if (con_info->answerstring) free (con_info->answerstring);
    }
  
  free (con_info);
  *con_cls = NULL;   
}
@end verbatim
@noindent

@emph{GNU libmicrohttpd} is informed that it shall call the above function when the daemon is started
in the main function.

@verbatim
...
daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                           &answer_to_connection, NULL, 
			   MHD_OPTION_NOTIFY_COMPLETED, &request_completed, NULL,
			   MHD_OPTION_END);
...
@end verbatim
@noindent

@heading Request handling
With all other functions prepared, we can now discuss the actual request handling.

On the first iteration for a new request, we start by allocating a new instance of a 
@code{struct connection_info_struct} structure, which will store all necessary information for later
iterations and other functions.

@verbatim
static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
		      const char *url, 
                      const char *method, const char *version, 
		      const char *upload_data, 
                      size_t *upload_data_size, void **con_cls)
{
  if(NULL == *con_cls) 
    {
      struct connection_info_struct *con_info;

      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info) return MHD_NO;
      con_info->answerstring = NULL;
@end verbatim
@noindent

If the new request is a @emph{POST}, the postprocessor must be created now. In addition, the type
of the request is stored for convenience.
@verbatim
      if (0 == strcmp (method, "POST")) 
        {      
          con_info->postprocessor 
	    = MHD_create_post_processor (connection, POSTBUFFERSIZE, 
                                         iterate_post, (void*) con_info);   

          if (NULL == con_info->postprocessor) 
            {
              free (con_info); 
              return MHD_NO;
            }
          con_info->connectiontype = POST;
        } 
      else con_info->connectiontype = GET;
@end verbatim
@noindent

The address of our structure will both serve as the indicator for successive iterations and to remember
the particular details about the connection.
@verbatim
      *con_cls = (void*) con_info; 
      return MHD_YES;
    }
@end verbatim
@noindent

The rest of the function will not be executed on the first iteration. A @emph{GET} request is easily
satisfied by sending the question form.
@verbatim
  if (0 == strcmp (method, "GET")) 
    {
      return send_page (connection, askpage);     
    } 
@end verbatim
@noindent

In case of @emph{POST}, we invoke the post processor for as long as data keeps incoming, setting
@code{*upload_data_size} to zero in order to indicate that we have processed---or at least have
considered---all of it.
@verbatim
  if (0 == strcmp (method, "POST")) 
    {
      struct connection_info_struct *con_info = *con_cls;

      if (*upload_data_size != 0) 
        {
          MHD_post_process (con_info->postprocessor, upload_data,	
	                    *upload_data_size);
          *upload_data_size = 0;
          
          return MHD_YES;
        } 
      else if (NULL != con_info->answerstring) 
        return send_page (connection, con_info->answerstring);
    } 
@end verbatim
@noindent

Finally, if they are neither @emph{GET} nor @emph{POST} requests, the error page is returned.
@verbatim
  return send_page(connection, errorpage); 
}
@end verbatim
@noindent

These were the important parts of the program @code{simplepost.c}.

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/responseheaders.inc.



































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
Now that we are able to inspect the incoming request in great detail,
this chapter discusses the means to enrich the outgoing responses likewise.

As you have learned in the @emph{Hello, Browser} chapter, some obligatory 
header fields are added and set automatically for simple responses by the library
itself but if more advanced features are desired, additional fields have to be created.
One of the possible fields is the content type field and an example will be developed around it.
This will lead to an application capable of correctly serving different types of files.


When we responded with HTML page packed in the static string previously, the client had no choice
but guessing about how to handle the response, because the server had not told him. 
What if we had sent a picture or a sound file?  Would the message have been understood
or merely been displayed as an endless stream of random characters in the browser?
This is what the mime content types are for. The header of the response is extended
by certain information about how the data is to be interpreted. 

To introduce the concept, a picture of the format @emph{PNG} will be sent to the client 
and labeled accordingly with @code{image/png}.
Once again, we can base the new example on the @code{hellobrowser} program.

@verbatim
#define FILENAME "picture.png"
#define MIMETYPE "image/png"

static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
		      const char *url, 
                      const char *method, const char *version, 
		      const char *upload_data, 
              	      size_t *upload_data_size, void **con_cls)
{
  unsigned char *buffer = NULL;
  struct MHD_Response *response;
@end verbatim
@noindent
 
We want the program to open the file for reading and determine its size:
@verbatim
  int fd;
  int ret;
  struct stat sbuf;

  if (0 != strcmp (method, "GET"))
    return MHD_NO;
  if ( (-1 == (fd = open (FILENAME, O_RDONLY))) ||
       (0 != fstat (fd, &sbuf)) )
    {
     /* error accessing file */
      /* ... (see below) */
    }
 /* ... (see below) */
@end verbatim
@noindent

When dealing with files, there is a lot that could go wrong on the
server side and if so, the client should be informed with @code{MHD_HTTP_INTERNAL_SERVER_ERROR}.

@verbatim 
      /* error accessing file */
     if (fd != -1) close (fd);
      const char *errorstr =
        "<html><body>An internal server error has occured!\
                              </body></html>";
      response =
	MHD_create_response_from_data (strlen (errorstr), 
				       (void *) errorstr, 
				       MHD_NO, MHD_NO);
      if (response)
        {
          ret =
            MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR,
                                response);
          MHD_destroy_response (response);

          return MHD_YES;
        }
      else
        return MHD_NO;
  if (!ret) 
    {
      const char *errorstr = "<html><body>An internal server error has occured!\
                              </body></html>";

      if (buffer) free(buffer);
    
      response = MHD_create_response_from_data(strlen(errorstr), (void*)errorstr,
                                               MHD_NO, MHD_NO);

      if (response)
        {     
          ret = MHD_queue_response (connection, 
	      			    MHD_HTTP_INTERNAL_SERVER_ERROR, 
				    response);
          MHD_destroy_response (response);

          return MHD_YES;    
        } 
      else return MHD_NO;
    }
@end verbatim
@noindent

Note that we nevertheless have to create a response object even for sending a simple error code.
Otherwise, the connection would just be closed without comment, leaving the client curious about
what has happened.

But in the case of success a response will be constructed directly from the file descriptor:

@verbatim
     /* error accessing file */
     /* ... (see above) */
    }

  response =
    MHD_create_response_from_fd (fd, sbuf.st_size);
  MHD_add_response_header (response, "Content-Type", MIMETYPE);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
@end verbatim
@noindent

Note that the response object will take care of closing the file desciptor for us.

Up to this point, there was little new. The actual novelty is that we enhance the header with the
meta data about the content. Aware of the field's name we want to add, it is as easy as that:
@verbatim
MHD_add_response_header(response, "Content-Type", MIMETYPE);
@end verbatim
@noindent
We do not have to append a colon expected by the protocol hehind the first 
field---@emph{GNU libhttpdmicro} will take care of this. 

The function finishes with the well-known lines
@verbatim
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}
@end verbatim
@noindent

The complete program @code{responseheaders.c} is in the @code{examples} section as usual.
Find a @emph{PNG} file you like and save it to the directory the example is run from under the name
@code{picture.png}. You should find the image displayed on your browser if everything worked well.

@heading Remarks
The include file of the @emph{MHD} library comes with the header types mentioned in @emph{RFC 2616}
already defined as macros. Thus, we could have written @code{MHD_HTTP_HEADER_CONTENT_TYPE} instead
of @code{"Content-Type"} as well. However, one is not limited to these standard headers and could
add custom response headers without violating the protocol. Whether, and how, the client would react
to these custom header is up to the receiver. Likewise, the client is allowed to send custom request
headers to the server as well, opening up yet more possibilities how client and server could 
communicate with each other.

The method of creating the response from a file on disk only works for static content.
Serving dynamically created responses will be a topic of a future chapter.

@heading Exercises
@itemize @bullet

@item
Remember that the original program was written under a few assumptions---a static response
using a local file being one of them. In order to simulate a very large or hard to reach file that cannot be provided
instantly, postpone the queuing in the callback with the @code{sleep} function for 30 seconds 
@emph{if} the file @code{/big.png} is requested (but deliver the same as above). A request for
@code{/picture.png} should provide just the same but without any artificial delays.

Now start two instances of your browser (or even use two machines) and see how the second client
is put on hold while the first waits for his request on the slow file to be fulfilled.

Finally, change the sourcecode to use @code{MHD_USE_THREAD_PER_CONNECTION} when the daemon is 
started and try again.


@item
Did you succeed in implementing the clock exercise yet? This time, let the server save the 
program's start time @code{t} and implement a response simulating a countdown that reaches 0 at
@code{t+60}. Returning a message saying on which point the countdown is, the response should
ultimately be to reply "Done" if the program has been running long enough,

An unofficial, but widely understood, response header line is @code{Refresh: DELAY; url=URL} with
the uppercase words substituted to tell the client it should request the given resource after 
the given delay again. Improve your program in that the browser (any modern browser should work)
automatically reconnects and asks for the status again every 5 seconds or so. The URL would have
to be composed so that it begins with "http://", followed by the @emph{URI} the server is reachable
from the client's point of view.

Maybe you want also to visualize the countdown as a status bar by creating a 
@code{<table>} consisting of one row and @code{n} columns whose fields contain small images of either
a red or a green light.

@end itemize

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/chapters/tlsauthentication.inc.





































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
We left the basic authentication chapter with the unsatisfactory conclusion that
any traffic, including the credentials, could be intercepted by anyone between
the browser client and the server. Protecting the data while it is sent over 
unsecured lines will be the goal of this chapter.

Since version 0.4, the @emph{MHD} library includes support for encrypting the
traffic by employing SSL/TSL. If @emph{GNU libmicrohttpd} has been configured to
support these, encryption and decryption can be applied transparently on the
data being sent, with only minimal changes to the actual source code of the example.


@heading Preparation

First, a private key for the server will be generated. With this key, the server
will later be able to authenticate itself to the client---preventing anyone else
from stealing the password by faking its identity. The @emph{OpenSSL} suite, which
is available on many operating systems, can generate such a key. For the scope of
this tutorial, we will be content with a 1024 bit key:
@verbatim
> openssl genrsa -out server.key 1024
@end verbatim
@noindent

In addition to the key, a certificate describing the server in human readable tokens
is also needed. This certificate will be attested with our aforementioned key. In this way,
we obtain a self-signed certificate, valid for one year. 

@verbatim
> openssl req -days 365 -out server.pem -new -x509 -key server.key
@end verbatim
@noindent

To avoid unnecessary error messages in the browser, the certificate needs to
have a name that matches the @emph{URI}, for example, "localhost" or the domain.
If you plan to have a publicly reachable server, you will need to ask a trusted third party,
called @emph{Certificate Authority}, or @emph{CA}, to attest the certificate for you. This way,
any visitor can make sure the server's identity is real.

Whether the server's certificate is signed by us or a third party, once it has been accepted
by the client, both sides will be communicating over encrypted channels. From this point on,
it is the client's turn to authenticate itself. But this has already been implemented in the basic 
authentication scheme.


@heading Changing the source code

We merely have to extend the server program so that it loads the two files into memory,

@verbatim
int
main ()
{
  struct MHD_Daemon *daemon;
  char *key_pem;
  char *cert_pem;

  key_pem = load_file (SERVERKEYFILE);
  cert_pem = load_file (SERVERCERTFILE);

  if ((key_pem == NULL) || (cert_pem == NULL))
  {
    printf ("The key/certificate files could not be read.\n");
    return 1;
  }
@end verbatim
@noindent

and then we point the @emph{MHD} daemon to it upon initalization. 
@verbatim

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL, 
  	   		     PORT, NULL, NULL,
                             &answer_to_connection, NULL, 
                             MHD_OPTION_HTTPS_MEM_KEY, key_pem,
                             MHD_OPTION_HTTPS_MEM_CERT, cert_pem,
                             MHD_OPTION_END);

  if (NULL == daemon)
    {
      printf ("%s\n", cert_pem);
  
      free (key_pem);
      free (cert_pem);
  
      return 1;
    }
@end verbatim
@noindent


The rest consists of little new besides some additional memory cleanups.
@verbatim

  getchar ();

  MHD_stop_daemon (daemon);
  free (key_pem);
  free (cert_pem);
  
  return 0;
}
@end verbatim
@noindent


The rather unexciting file loader can be found in the complete example @code{tlsauthentication.c}.

@heading Remarks
@itemize @bullet
@item
While the standard @emph{HTTP} port is 80, it is 443 for @emph{HTTPS}. The common internet browsers assume
standard @emph{HTTP} if they are asked to access other ports than these. Therefore, you will have to type 
@code{https://localhost:8888} explicitly when you test the example, or the browser will not know how to
handle the answer properly.

@item
The remaining weak point is the question how the server will be trusted initially. Either a @emph{CA} signs the
certificate or the client obtains the key over secure means. Anyway, the clients have to be aware (or configured) 
that they should not accept certificates of unknown origin.

@item
The introduced method of certificates makes it mandatory to set an expiration date---making it less feasible to
hardcode certificates in embedded devices. 

@item
The cryptographic facilities consume memory space and computing time. For this reason, websites usually consists
both of uncritically @emph{HTTP} parts and secured @emph{HTTPS}.


@end itemize

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/ecos.html.









































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
<html>
<!-- Created on September, 8 2010 by texi2html 1.70 -->
<!--
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
            Karl Berry  <karl@freefriends.org>
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
            and many others.
Maintained by: Many creative people <dev@texi2html.cvshome.org>
Send bugs and suggestions to <users@texi2html.cvshome.org>

-->
<head>
<title>Untitled Document: How to Apply These Terms to Your New Programs</title>

<meta name="description" content="Untitled Document: How to Apply These Terms to Your New Programs">
<meta name="keywords" content="Untitled Document: How to Apply These Terms to Your New Programs">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="texi2html 1.70">
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
pre.display {font-family: serif}
pre.format {font-family: serif}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: serif; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: serif; font-size: smaller}
pre.smalllisp {font-size: smaller}
ul.toc {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">

<a name="IDX1"></a>
<a name="IDX2"></a>
<p align="center"> Version 2, June 1991
</p>
<table><tr><td>&nbsp;</td><td><pre class="display">Copyright &copy; 1989, 1991 Free Software Foundation, Inc.
59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
</pre></td></tr></table>



<a name="SEC1"></a>

<p>  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

</p><p>  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

</p><p>  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

</p><p>  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

</p><p>  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

</p><p>  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

</p><p>  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

</p><p>  The precise terms and conditions for copying, distribution and
modification follow.

</p>
<ol>
<li>
<p>This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The &quot;Program&quot;, below,
refers to any such program or work, and a &quot;work based on the Program&quot;
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term &quot;modification&quot;.)  Each licensee is addressed as &quot;you&quot;.

</p><p>Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

</p></li><li>
<p>You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

</p><p>You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

</p></li><li>
<p>You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

</p><ol>
<li>
<p>You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

</p></li><li>
<p>You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

</p></li><li>
<p>If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License.  (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
</p></li></ol>

<p>These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

</p><p>Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

</p><p>In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

</p></li><li>
<p>You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

</p><ol>
<li>
<p>Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

</p></li><li>
<p>Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

</p></li><li>
<p>Accompany it with the information you received as to the offer
to distribute corresponding source code.  (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
</p></li></ol>

<p>The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

</p><p>If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

</p></li><li>
<p>You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

</p></li><li>
<p>You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

</p></li><li>
<p>Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

</p></li><li>
<p>If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

</p><p>If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

</p><p>It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

</p><p>This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

</p></li><li>
<p>If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

</p></li><li>
<p>The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

</p><p>Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and &quot;any
later version&quot;, you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

</p></li><li>
<p>If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

</p></li><li>
<p>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM &quot;AS IS&quot; WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

</p></li><li>
<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

</p>
</li><li>
<p>As a special exception, if other files instantiate templates or use
macros or inline functions from this file, or you compile this file
and link it with other works to produce a work based on this file,
this file does not by itself cause the resulting work to be covered by
the GNU General Public License. However the source code for this file
must still be made available in accordance with section (3) of the GNU
General Public License v2.

</p><p>This exception does not invalidate any other reasons why a work based
on this file might be covered by the GNU General Public License.

</p></li></ol>




<a name="SEC2"></a>
<h2 class="unnumberedsec"> How to Apply These Terms to Your New Programs </h2>

<p>  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

</p><p>  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the &quot;copyright&quot; line and a pointer to where the full notice is found.

</p><table><tr><td>&nbsp;</td><td><pre class="smallexample"><var>one line to give the program's name and an idea of what it does.</var>
Copyright (C) 19<var>yy</var>  <var>name of author</var>

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
</pre></td></tr></table>
<p>Also add information on how to contact you by electronic and paper mail.

</p><p>If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

</p><table><tr><td>&nbsp;</td><td><pre class="smallexample">Gnomovision version 69, Copyright (C) 19<var>yy</var> <var>name of author</var>
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
type `show w'.  This is free software, and you are welcome
to redistribute it under certain conditions; type `show c' 
for details.
</pre></td></tr></table>
<p>The hypothetical commands `<samp>show w</samp>' and `<samp>show c</samp>' should show
the appropriate parts of the General Public License.  Of course, the
commands you use may be called something other than `<samp>show w</samp>' and
`<samp>show c</samp>'; they could even be mouse-clicks or menu items--whatever
suits your program.

</p><p>You should also get your employer (if you work as a programmer) or your
school, if any, to sign a &quot;copyright disclaimer&quot; for the program, if
necessary.  Here is a sample; alter the names:

</p><table><tr><td>&nbsp;</td><td><pre class="smallexample">Yoyodyne, Inc., hereby disclaims all copyright
interest in the program `Gnomovision'
(which makes passes at compilers) written 
by James Hacker.

<var>signature of Ty Coon</var>, 1 April 1989
Ty Coon, President of Vice
</pre></td></tr></table>
<p>This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.
</p><hr size="1">
<p>
 <font size="-1">
  This document was generated by <em>Jim</em> on <em>September, 8 2010</em> using <a href="http://texi2html.cvshome.org/"><em>texi2html 1.70</em></a>.
 </font>
 <br>

</p>
</body>
</html>

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/ecos.texi.









































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
@cindex GPL, GNU General Public License
@cindex eCos, GNU General Public License with eCos Extension
@center Version 2, June 1991

@display
Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@end display




@subheading Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software---to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

@iftex
@subheading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@end iftex
@ifinfo
@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@end ifinfo

@enumerate
@item
This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The ``Program'', below,
refers to any such program or work, and a ``work based on the Program''
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term ``modification''.)  Each licensee is addressed as ``you''.

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

@item
You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

@item
You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

@enumerate a
@item
You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

@item
You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

@item
If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License.  (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
@end enumerate

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

@item
You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

@enumerate a
@item
Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

@item
Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

@item
Accompany it with the information you received as to the offer
to distribute corresponding source code.  (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
@end enumerate

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

@item
You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

@item
You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

@item
Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

@item
If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

@item
If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

@item
The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and ``any
later version'', you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

@item
If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

@iftex
@heading NO WARRANTY
@end iftex
@ifinfo
@center NO WARRANTY
@end ifinfo

@item
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

@item
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

@iftex
@heading ECOS EXTENSION
@end iftex
@ifinfo
@center ECOS EXTENSION
@end ifinfo


@item
As a special exception, if other files instantiate templates or use
macros or inline functions from this file, or you compile this file
and link it with other works to produce a work based on this file,
this file does not by itself cause the resulting work to be covered by
the GNU General Public License. However the source code for this file
must still be made available in accordance with section (3) of the GNU
General Public License v2.

This exception does not invalidate any other reasons why a work based
on this file might be covered by the GNU General Public License.

@end enumerate


@iftex
@heading END OF TERMS AND CONDITIONS
@end iftex
@ifinfo
@center END OF TERMS AND CONDITIONS
@end ifinfo

@page
@unnumberedsec How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the ``copyright'' line and a pointer to where the full notice is found.

@smallexample
@var{one line to give the program's name and an idea of what it does.}
Copyright (C) 19@var{yy}  @var{name of author}

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
@end smallexample

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

@smallexample
Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
type `show w'.  This is free software, and you are welcome
to redistribute it under certain conditions; type `show c' 
for details.
@end smallexample

The hypothetical commands @samp{show w} and @samp{show c} should show
the appropriate parts of the General Public License.  Of course, the
commands you use may be called something other than @samp{show w} and
@samp{show c}; they could even be mouse-clicks or menu items---whatever
suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a ``copyright disclaimer'' for the program, if
necessary.  Here is a sample; alter the names:

@smallexample
@group
Yoyodyne, Inc., hereby disclaims all copyright
interest in the program `Gnomovision'
(which makes passes at compilers) written 
by James Hacker.

@var{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
@end group
@end smallexample

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Library General
Public License instead of this License.

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/basicauthentication.c.















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>
#include <time.h>

#define PORT 8888

#define REALM     "\"Maintenance\""
#define USER      "a legitimate user"
#define PASSWORD  "and his password"


char *string_to_base64 (const char *message);


static int
ask_for_authentication (struct MHD_Connection *connection, const char *realm)
{
  int ret;
  struct MHD_Response *response;
  char *headervalue;
  const char *strbase = "Basic realm=";

  response = MHD_create_response_from_data (0, NULL, MHD_NO, MHD_NO);
  if (!response)
    return MHD_NO;

  headervalue = malloc (strlen (strbase) + strlen (realm) + 1);
  if (!headervalue)
    return MHD_NO;

  strcpy (headervalue, strbase);
  strcat (headervalue, realm);

  ret = MHD_add_response_header (response, "WWW-Authenticate", headervalue);
  free (headervalue);
  if (!ret)
    {
      MHD_destroy_response (response);
      return MHD_NO;
    }

  ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response);

  MHD_destroy_response (response);

  return ret;
}

static int
is_authenticated (struct MHD_Connection *connection,
                  const char *username, const char *password)
{
  const char *headervalue;
  char *expected_b64, *expected;
  const char *strbase = "Basic ";
  int authenticated;

  headervalue =
    MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                 "Authorization");
  if (NULL == headervalue)
    return 0;
  if (0 != strncmp (headervalue, strbase, strlen (strbase)))
    return 0;

  expected = malloc (strlen (username) + 1 + strlen (password) + 1);
  if (NULL == expected)
    return 0;

  strcpy (expected, username);
  strcat (expected, ":");
  strcat (expected, password);

  expected_b64 = string_to_base64 (expected);
  free (expected);
  if (NULL == expected_b64)
       return 0;

  authenticated =
    (strcmp (headervalue + strlen (strbase), expected_b64) == 0);

  free (expected_b64);
  return authenticated;
}


static int
secret_page (struct MHD_Connection *connection)
{
  int ret;
  struct MHD_Response *response;
  const char *page = "<html><body>A secret.</body></html>";

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (0 != strcmp (method, "GET"))
    return MHD_NO;
  if (NULL == *con_cls)
    {
      *con_cls = connection;
      return MHD_YES;
    }

  if (!is_authenticated (connection, USER, PASSWORD))
    return ask_for_authentication (connection, REALM);

  return secret_page (connection);
}


int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);
  return 0;
}


char *
string_to_base64 (const char *message)
{
  const char *lookup =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  unsigned long l;
  int i;
  char *tmp;
  size_t length = strlen (message);

  tmp = malloc (length * 2);
  if (NULL == tmp)
    return tmp;

  tmp[0] = 0;

  for (i = 0; i < length; i += 3)
    {
      l = (((unsigned long) message[i]) << 16)
        | (((i + 1) < length) ? (((unsigned long) message[i + 1]) << 8) : 0)
        | (((i + 2) < length) ? ((unsigned long) message[i + 2]) : 0);


      strncat (tmp, &lookup[(l >> 18) & 0x3F], 1);
      strncat (tmp, &lookup[(l >> 12) & 0x3F], 1);

      if (i + 1 < length)
        strncat (tmp, &lookup[(l >> 6) & 0x3F], 1);
      if (i + 2 < length)
        strncat (tmp, &lookup[l & 0x3F], 1);
    }

  if (length % 3)
    strncat (tmp, "===", 3 - length % 3);

  return tmp;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/hellobrowser.c.



















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>

#define PORT 8888

static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  const char *page = "<html><body>Hello, browser!</body></html>";
  struct MHD_Response *response;
  int ret;

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/largepost.c.





































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>

#define PORT            8888
#define POSTBUFFERSIZE  512
#define MAXCLIENTS      2

#define GET             0
#define POST            1

static unsigned int nr_of_uploading_clients = 0;

struct connection_info_struct
{
  int connectiontype;
  struct MHD_PostProcessor *postprocessor;
  FILE *fp;
  const char *answerstring;
  int answercode;
};

const char *askpage = "<html><body>\n\
                       Upload a file, please!<br>\n\
                       There are %u clients uploading at the moment.<br>\n\
                       <form action=\"/filepost\" method=\"post\" enctype=\"multipart/form-data\">\n\
                       <input name=\"file\" type=\"file\">\n\
                       <input type=\"submit\" value=\" Send \"></form>\n\
                       </body></html>";

const char *busypage =
  "<html><body>This server is busy, please try again later.</body></html>";

const char *completepage =
  "<html><body>The upload has been completed.</body></html>";

const char *errorpage =
  "<html><body>This doesn't seem to be right.</body></html>";
const char *servererrorpage =
  "<html><body>An internal server error has occured.</body></html>";
const char *fileexistspage =
  "<html><body>This file already exists.</body></html>";


static int
send_page (struct MHD_Connection *connection, const char *page,
           int status_code)
{
  int ret;
  struct MHD_Response *response;

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_YES);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, status_code, response);
  MHD_destroy_response (response);

  return ret;
}


static int
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key,
              const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, uint64_t off,
              size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;
  FILE *fp;

  con_info->answerstring = servererrorpage;
  con_info->answercode = MHD_HTTP_INTERNAL_SERVER_ERROR;

  if (0 != strcmp (key, "file"))
    return MHD_NO;

  if (!con_info->fp)
    {
      if (NULL != (fp = fopen (filename, "rb")))
        {
          fclose (fp);
          con_info->answerstring = fileexistspage;
          con_info->answercode = MHD_HTTP_FORBIDDEN;
          return MHD_NO;
        }

      con_info->fp = fopen (filename, "ab");
      if (!con_info->fp)
        return MHD_NO;
    }

  if (size > 0)
    {
      if (!fwrite (data, size, sizeof (char), con_info->fp))
        return MHD_NO;
    }

  con_info->answerstring = completepage;
  con_info->answercode = MHD_HTTP_OK;

  return MHD_YES;
}

static void
request_completed (void *cls, struct MHD_Connection *connection,
                   void **con_cls, enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info)
    return;

  if (con_info->connectiontype == POST)
    {
      if (NULL != con_info->postprocessor)
        {
          MHD_destroy_post_processor (con_info->postprocessor);
          nr_of_uploading_clients--;
        }

      if (con_info->fp)
        fclose (con_info->fp);
    }

  free (con_info);
  *con_cls = NULL;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (NULL == *con_cls)
    {
      struct connection_info_struct *con_info;

      if (nr_of_uploading_clients >= MAXCLIENTS)
        return send_page (connection, busypage, MHD_HTTP_SERVICE_UNAVAILABLE);

      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info)
        return MHD_NO;

      con_info->fp = NULL;

      if (0 == strcmp (method, "POST"))
        {
          con_info->postprocessor =
            MHD_create_post_processor (connection, POSTBUFFERSIZE,
                                       iterate_post, (void *) con_info);

          if (NULL == con_info->postprocessor)
            {
              free (con_info);
              return MHD_NO;
            }

          nr_of_uploading_clients++;

          con_info->connectiontype = POST;
          con_info->answercode = MHD_HTTP_OK;
          con_info->answerstring = completepage;
        }
      else
        con_info->connectiontype = GET;

      *con_cls = (void *) con_info;

      return MHD_YES;
    }

  if (0 == strcmp (method, "GET"))
    {
      int ret;
      char buffer[1024];

      sprintf (buffer, askpage, nr_of_uploading_clients);
      return send_page (connection, buffer, MHD_HTTP_OK);
    }

  if (0 == strcmp (method, "POST"))
    {
      struct connection_info_struct *con_info = *con_cls;

      if (0 != *upload_data_size)
        {
          MHD_post_process (con_info->postprocessor, upload_data,
                            *upload_data_size);
          *upload_data_size = 0;

          return MHD_YES;
        }
      else
        return send_page (connection, con_info->answerstring,
                          con_info->answercode);
    }

  return send_page (connection, errorpage, MHD_HTTP_BAD_REQUEST);
}

int
main ()
{
  struct MHD_Daemon *daemon;


  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &answer_to_connection, NULL,
                             MHD_OPTION_NOTIFY_COMPLETED, request_completed,
                             NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);

  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/logging.c.



























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>

#define PORT 8888


static int
print_out_key (void *cls, enum MHD_ValueKind kind, const char *key,
               const char *value)
{
  printf ("%s: %s\n", key, value);
  return MHD_YES;
}

static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  printf ("New %s request for %s using version %s\n", method, url, version);

  MHD_get_connection_values (connection, MHD_HEADER_KIND, print_out_key,
                             NULL);

  return MHD_NO;
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/responseheaders.c.





















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>
#include <time.h>

#define PORT 8888
#define FILENAME "picture.png"
#define MIMETYPE "image/png"

static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  struct MHD_Response *response;
  int fd;
  int ret;
  struct stat sbuf;

  if (0 != strcmp (method, "GET"))
    return MHD_NO;

  if ( (-1 == (fd = open (FILENAME, O_RDONLY))) ||
       (0 != fstat (fd, &sbuf)) )
    {
      /* error accessing file */
      if (fd != -1) close (fd);
      const char *errorstr =
        "<html><body>An internal server error has occured!\
                              </body></html>";
      response =
	MHD_create_response_from_data (strlen (errorstr), 
				       (void *) errorstr, 
				       MHD_NO, MHD_NO);
      if (response)
        {
          ret =
            MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR,
                                response);
          MHD_destroy_response (response);

          return MHD_YES;
        }
      else
        return MHD_NO;
    }
  response =
    MHD_create_response_from_fd (fd, sbuf.st_size);
  MHD_add_response_header (response, "Content-Type", MIMETYPE);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);

  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/simplepost.c.















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>

#define PORT            8888
#define POSTBUFFERSIZE  512
#define MAXNAMESIZE     20
#define MAXANSWERSIZE   512

#define GET             0
#define POST            1

struct connection_info_struct
{
  int connectiontype;
  char *answerstring;
  struct MHD_PostProcessor *postprocessor;
};

const char *askpage = "<html><body>\
                       What's your name, Sir?<br>\
                       <form action=\"/namepost\" method=\"post\">\
                       <input name=\"name\" type=\"text\"\
                       <input type=\"submit\" value=\" Send \"></form>\
                       </body></html>";

const char *greatingpage =
  "<html><body><h1>Welcome, %s!</center></h1></body></html>";

const char *errorpage =
  "<html><body>This doesn't seem to be right.</body></html>";


static int
send_page (struct MHD_Connection *connection, const char *page)
{
  int ret;
  struct MHD_Response *response;


  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


static int
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key,
              const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, uint64_t off,
              size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;

  if (0 == strcmp (key, "name"))
    {
      if ((size > 0) && (size <= MAXNAMESIZE))
        {
          char *answerstring;
          answerstring = malloc (MAXANSWERSIZE);
          if (!answerstring)
            return MHD_NO;

          snprintf (answerstring, MAXANSWERSIZE, greatingpage, data);
          con_info->answerstring = answerstring;
        }
      else
        con_info->answerstring = NULL;

      return MHD_NO;
    }

  return MHD_YES;
}

static void
request_completed (void *cls, struct MHD_Connection *connection,
                   void **con_cls, enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info)
    return;

  if (con_info->connectiontype == POST)
    {
      MHD_destroy_post_processor (con_info->postprocessor);
      if (con_info->answerstring)
        free (con_info->answerstring);
    }

  free (con_info);
  *con_cls = NULL;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (NULL == *con_cls)
    {
      struct connection_info_struct *con_info;

      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info)
        return MHD_NO;
      con_info->answerstring = NULL;

      if (0 == strcmp (method, "POST"))
        {
          con_info->postprocessor =
            MHD_create_post_processor (connection, POSTBUFFERSIZE,
                                       iterate_post, (void *) con_info);

          if (NULL == con_info->postprocessor)
            {
              free (con_info);
              return MHD_NO;
            }

          con_info->connectiontype = POST;
        }
      else
        con_info->connectiontype = GET;

      *con_cls = (void *) con_info;

      return MHD_YES;
    }

  if (0 == strcmp (method, "GET"))
    {
      return send_page (connection, askpage);
    }

  if (0 == strcmp (method, "POST"))
    {
      struct connection_info_struct *con_info = *con_cls;

      if (*upload_data_size != 0)
        {
          MHD_post_process (con_info->postprocessor, upload_data,
                            *upload_data_size);
          *upload_data_size = 0;

          return MHD_YES;
        }
      else if (NULL != con_info->answerstring)
        return send_page (connection, con_info->answerstring);
    }

  return send_page (connection, errorpage);
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &answer_to_connection, NULL,
                             MHD_OPTION_NOTIFY_COMPLETED, request_completed,
                             NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);

  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/examples/tlsauthentication.c.









































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>

#define PORT 8888

#define REALM     "\"Maintenance\""
#define USER      "a legitimate user"
#define PASSWORD  "and his password"

#define SERVERKEYFILE "server.key"
#define SERVERCERTFILE "server.pem"


char *
string_to_base64 (const char *message)
{
  const char *lookup =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  unsigned long l;
  int i;
  char *tmp;
  size_t length = strlen (message);

  tmp = malloc (length * 2);
  if (NULL == tmp)
    return tmp;

  tmp[0] = 0;

  for (i = 0; i < length; i += 3)
    {
      l = (((unsigned long) message[i]) << 16)
        | (((i + 1) < length) ? (((unsigned long) message[i + 1]) << 8) : 0)
        | (((i + 2) < length) ? ((unsigned long) message[i + 2]) : 0);


      strncat (tmp, &lookup[(l >> 18) & 0x3F], 1);
      strncat (tmp, &lookup[(l >> 12) & 0x3F], 1);

      if (i + 1 < length)
        strncat (tmp, &lookup[(l >> 6) & 0x3F], 1);
      if (i + 2 < length)
        strncat (tmp, &lookup[l & 0x3F], 1);
    }

  if (length % 3)
    strncat (tmp, "===", 3 - length % 3);

  return tmp;
}


static long
get_file_size (const char *filename)
{
  FILE *fp;

  fp = fopen (filename, "rb");
  if (fp)
    {
      long size;

      if ((0 != fseek (fp, 0, SEEK_END)) || (-1 == (size = ftell (fp))))
        size = 0;

      fclose (fp);

      return size;
    }
  else
    return 0;
}

static char *
load_file (const char *filename)
{
  FILE *fp;
  char *buffer;
  long size;

  size = get_file_size (filename);
  if (size == 0)
    return NULL;

  fp = fopen (filename, "rb");
  if (!fp)
    return NULL;

  buffer = malloc (size);
  if (!buffer)
    {
      fclose (fp);
      return NULL;
    }

  if (size != fread (buffer, 1, size, fp))
    {
      free (buffer);
      buffer = NULL;
    }

  fclose (fp);
  return buffer;
}

static int
ask_for_authentication (struct MHD_Connection *connection, const char *realm)
{
  int ret;
  struct MHD_Response *response;
  char *headervalue;
  const char *strbase = "Basic realm=";

  response = MHD_create_response_from_data (0, NULL, MHD_NO, MHD_NO);
  if (!response)
    return MHD_NO;

  headervalue = malloc (strlen (strbase) + strlen (realm) + 1);
  if (!headervalue)
    return MHD_NO;

  strcpy (headervalue, strbase);
  strcat (headervalue, realm);

  ret = MHD_add_response_header (response, "WWW-Authenticate", headervalue);
  free (headervalue);
  if (!ret)
    {
      MHD_destroy_response (response);
      return MHD_NO;
    }

  ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response);

  MHD_destroy_response (response);

  return ret;
}

static int
is_authenticated (struct MHD_Connection *connection,
                  const char *username, const char *password)
{
  const char *headervalue;
  char *expected_b64, *expected;
  const char *strbase = "Basic ";
  int authenticated;

  headervalue =
    MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                 "Authorization");
  if (NULL == headervalue)
    return 0;
  if (0 != strncmp (headervalue, strbase, strlen (strbase)))
    return 0;

  expected = malloc (strlen (username) + 1 + strlen (password) + 1);
  if (NULL == expected)
    return 0;

  strcpy (expected, username);
  strcat (expected, ":");
  strcat (expected, password);

  expected_b64 = string_to_base64 (expected);
  free (expected);
  if (NULL == expected_b64)
    return 0;

  authenticated =
    (strcmp (headervalue + strlen (strbase), expected_b64) == 0);

  free (expected_b64);

  return authenticated;
}


static int
secret_page (struct MHD_Connection *connection)
{
  int ret;
  struct MHD_Response *response;
  const char *page = "<html><body>A secret.</body></html>";

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (0 != strcmp (method, "GET"))
    return MHD_NO;
  if (NULL == *con_cls)
    {
      *con_cls = connection;
      return MHD_YES;
    }

  if (!is_authenticated (connection, USER, PASSWORD))
    return ask_for_authentication (connection, REALM);

  return secret_page (connection);
}


int
main ()
{
  struct MHD_Daemon *daemon;
  char *key_pem;
  char *cert_pem;

  key_pem = load_file (SERVERKEYFILE);
  cert_pem = load_file (SERVERCERTFILE);

  if ((key_pem == NULL) || (cert_pem == NULL))
    {
      printf ("The key/certificate files could not be read.\n");
      return 1;
    }

  daemon =
    MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL, PORT, NULL,
                      NULL, &answer_to_connection, NULL,
                      MHD_OPTION_HTTPS_MEM_KEY, key_pem,
                      MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END);
  if (NULL == daemon)
    {
      printf ("%s\n", cert_pem);

      free (key_pem);
      free (cert_pem);

      return 1;
    }

  getchar ();

  MHD_stop_daemon (daemon);
  free (key_pem);
  free (cert_pem);

  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/fdl-1.3.texi.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
@c The GNU Free Documentation License.
@center Version 1.3, 3 November 2008

@c This file is intended to be included within another document,
@c hence no sectioning command or @node.

@display
Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
@uref{http://fsf.org/}

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@end display

@enumerate 0
@item
PREAMBLE

The purpose of this License is to make a manual, textbook, or other
functional and useful document @dfn{free} in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.

This License is a kind of ``copyleft'', which means that derivative
works of the document must themselves be free in the same sense.  It
complements the GNU General Public License, which is a copyleft
license designed for free software.

We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.

@item
APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License.  Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein.  The ``Document'', below,
refers to any such manual or work.  Any member of the public is a
licensee, and is addressed as ``you''.  You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.

A ``Modified Version'' of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.

A ``Secondary Section'' is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject.  (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.

The ``Invariant Sections'' are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.  If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant.  The Document may contain zero
Invariant Sections.  If the Document does not identify any Invariant
Sections then there are none.

The ``Cover Texts'' are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.  A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.

A ``Transparent'' copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text.  A copy that is not ``Transparent'' is called ``Opaque''.

Examples of suitable formats for Transparent copies include plain
@sc{ascii} without markup, Texinfo input format, La@TeX{} input
format, @acronym{SGML} or @acronym{XML} using a publicly available
@acronym{DTD}, and standard-conforming simple @acronym{HTML},
PostScript or @acronym{PDF} designed for human modification.  Examples
of transparent image formats include @acronym{PNG}, @acronym{XCF} and
@acronym{JPG}.  Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, @acronym{SGML} or
@acronym{XML} for which the @acronym{DTD} and/or processing tools are
not generally available, and the machine-generated @acronym{HTML},
PostScript or @acronym{PDF} produced by some word processors for
output purposes only.

The ``Title Page'' means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, ``Title Page'' means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.

The ``publisher'' means any person or entity that distributes copies
of the Document to the public.

A section ``Entitled XYZ'' means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language.  (Here XYZ stands for a
specific section name mentioned below, such as ``Acknowledgements'',
``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
of such a section when you modify the Document means that it remains a
section ``Entitled XYZ'' according to this definition.

The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document.  These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.

@item
VERBATIM COPYING

You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and
you may publicly display copies.

@item
COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.

If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.

It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.

@item
MODIFICATIONS

You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:

@enumerate A
@item
Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document).  You may use the same title as a previous version
if the original publisher of that version gives permission.

@item
List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.

@item
State on the Title page the name of the publisher of the
Modified Version, as the publisher.

@item
Preserve all the copyright notices of the Document.

@item
Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.

@item
Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.

@item
Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.

@item
Include an unaltered copy of this License.

@item
Preserve the section Entitled ``History'', Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page.  If
there is no section Entitled ``History'' in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.

@item
Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on.  These may be placed in the ``History'' section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.

@item
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.

@item
Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles.  Section numbers
or the equivalent are not considered part of the section titles.

@item
Delete any section Entitled ``Endorsements''.  Such a section
may not be included in the Modified Version.

@item
Do not retitle any existing section to be Entitled ``Endorsements'' or
to conflict in title with any Invariant Section.

@item
Preserve any Warranty Disclaimers.
@end enumerate

If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.

You may add a section Entitled ``Endorsements'', provided it contains
nothing but endorsements of your Modified Version by various
parties---for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.

You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.

@item
COMBINING DOCUMENTS

You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled ``History''
in the various original documents, forming one section Entitled
``History''; likewise combine any sections Entitled ``Acknowledgements'',
and any sections Entitled ``Dedications''.  You must delete all
sections Entitled ``Endorsements.''

@item
COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.

@item
AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an ``aggregate'' if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.

@item
TRANSLATION

Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers.  In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.

If a section in the Document is Entitled ``Acknowledgements'',
``Dedications'', or ``History'', the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.

@item
TERMINATION

You may not copy, modify, sublicense, or distribute the Document
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense, or distribute it is void, and
will automatically terminate your rights under this License.

However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.

Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does
not give you any rights to use it.

@item
FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
@uref{http://www.gnu.org/copyleft/}.

Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License ``or any later version'' applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.  If the Document
specifies that a proxy can decide which future versions of this
License can be used, that proxy's public statement of acceptance of a
version permanently authorizes you to choose that version for the
Document.

@item
RELICENSING

``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
World Wide Web server that publishes copyrightable works and also
provides prominent facilities for anybody to edit those works.  A
public wiki that anybody can edit is an example of such a server.  A
``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
site means any set of copyrightable works thus published on the MMC
site.

``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
license published by Creative Commons Corporation, a not-for-profit
corporation with a principal place of business in San Francisco,
California, as well as future copyleft versions of that license
published by that same organization.

``Incorporate'' means to publish or republish a Document, in whole or
in part, as part of another Document.

An MMC is ``eligible for relicensing'' if it is licensed under this
License, and if all works that were first published under this License
somewhere other than this MMC, and subsequently incorporated in whole
or in part into the MMC, (1) had no cover texts or invariant sections,
and (2) were thus incorporated prior to November 1, 2008.

The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the MMC is eligible for relicensing.

@end enumerate

@page
@heading ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:

@smallexample
@group
  Copyright (C)  @var{year}  @var{your name}.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.
@end group
@end smallexample

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the ``with@dots{}Texts.'' line with this:

@smallexample
@group
    with the Invariant Sections being @var{list their titles}, with
    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
    being @var{list}.
@end group
@end smallexample

If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

@c Local Variables:
@c ispell-local-pdict: "ispell-dict"
@c End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/lgpl.texi.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
@c The GNU Lesser General Public License.
@center Version 2.1, February 1999

@c This file is intended to be included within another document,
@c hence no sectioning command or @node.  

@display
Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
as the successor of the GNU Library Public License, version 2, hence the
version number 2.1.]
@end display

@subheading Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software---to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software---typically libraries---of the Free
Software Foundation and other authors who decide to use it.  You can use
it too, but we suggest you first think carefully about whether this
license or the ordinary General Public License is the better strategy to
use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of it
in new free programs; and that you are informed that you can do these
things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the @dfn{Lesser} General Public License because it
does @emph{Less} to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
``work based on the library'' and a ``work that uses the library''.  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

@subheading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

@enumerate 0
@item
This License Agreement applies to any software library or other program
which contains a notice placed by the copyright holder or other
authorized party saying it may be distributed under the terms of this
Lesser General Public License (also called ``this License'').  Each
licensee is addressed as ``you''.

  A ``library'' means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The ``Library'', below, refers to any such software library or work
which has been distributed under these terms.  A ``work based on the
Library'' means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term ``modification''.)

  ``Source code'' for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

@item
You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

@item
You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

@enumerate a
@item
The modified work must itself be a software library.

@item
You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.

@item
You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.

@item
If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.

(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application.  Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
@end enumerate

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

@item
You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

@item
You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

@item
A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a ``work that uses the Library''.  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a ``work that uses the Library'' with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a ``work that uses the
library''.  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a ``work that uses the Library'' uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

@item
As an exception to the Sections above, you may also combine or
link a ``work that uses the Library'' with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

@enumerate a
@item
Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable ``work that
uses the Library'', as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library.  (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)

@item
Use a suitable shared library mechanism for linking with the Library.  A
suitable mechanism is one that (1) uses at run time a copy of the
library already present on the user's computer system, rather than
copying library functions into the executable, and (2) will operate
properly with a modified version of the library, if the user installs
one, as long as the modified version is interface-compatible with the
version that the work was made with.

@item
Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.

@item
If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.

@item
Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
@end enumerate

  For an executable, the required form of the ``work that uses the
Library'' must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies the
executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

@item
You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

@enumerate a
@item
Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities.  This must be distributed under the terms of the
Sections above.

@item
Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
@end enumerate

@item
You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

@item
You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

@item
Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

@item
If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

@item
If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

@item
The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
``any later version'', you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

@item
If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

@iftex
@heading NO WARRANTY
@end iftex
@ifinfo
@center NO WARRANTY

@end ifinfo

@item
BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

@item
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
@end enumerate

@iftex
@heading END OF TERMS AND CONDITIONS
@end iftex
@ifinfo
@center END OF TERMS AND CONDITIONS

@end ifinfo

@page
@subheading How to Apply These Terms to Your New Libraries

  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).

  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
``copyright'' line and a pointer to where the full notice is found.

@smallexample
@var{one line to give the library's name and an idea of what it does.}
Copyright (C) @var{year}  @var{name of author}

This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at
your option) any later version.

This library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA.
@end smallexample

Also add information on how to contact you by electronic and paper mail.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a ``copyright disclaimer'' for the library, if
necessary.  Here is a sample; alter the names:

@smallexample
Yoyodyne, Inc., hereby disclaims all copyright interest in the library
`Frob' (a library for tweaking knobs) written by James Random Hacker.

@var{signature of Ty Coon}, 1 April 1990
Ty Coon, President of Vice
@end smallexample

That's all there is to it!

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/libmicrohttpd.3.

















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.TH LIBMICROHTTPD "3" "28 Oct 2009 "libmicrohttpd"
.SH "NAME"
GNU libmicrohttpd \- library for embedding HTTP servers
.SH "SYNOPSIS"

 \fB#include <sys/types.h>
 \fB#include <sys/select.h>
 \fB#include <sys/socket.h>
 \fB#include <microhttpd.h>

.SH "DESCRIPTION"
.P
GNU libmicrohttpd (short MHD) allows applications to easily integrate the functionality of a simple HTTP server.  MHD is a GNU package.
.P
The details of the API are described in comments in the header file, a detailed reference documentation and in brief on the MHD webpage.
.P
.SH "SEE ALSO"
\fBcurl\fP(1), \fBlibcurl\fP(3)

.SH "LEGAL NOTICE"
libmicrohttpd is released under both the LGPL Version 2 or higher and
the GNU GPL with eCos extension.  For details on both licenses please
read the respective appendix in the manual.

.SH "FILES"
.TP
microhttpd.h
libmicrohttpd include file
.TP
libmicrohttpd.so
libmicrohttpd library

.SH "REPORTING BUGS"
Report bugs by using mantis <https://gnunet.org/bugs/>.

.SH "AUTHORS"
GNU libmicrohttpd was originally designed by Christian Grothoff <christian@grothoff.org> and Chris GauthierDickey <chrisg@cs.du.edu>.  The original implementation was done by Daniel Pittman <depittman@gmail.com> and Christian Grothoff.  SSL/TLS support was added by Sagie Amir using code from GnuTLS.  See the AUTHORS file in the distribution for a more detailed list of contributors.

.SH "AVAILABILITY"
You can obtain the latest version from http://www.gnu.org/software/libmicrohttpd/.

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/mdate-sh.



























































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/bin/sh
# Get modification time of a file or directory and pretty-print it.

scriptversion=2009-04-28.21; # UTC

# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009 Free
# Software Foundation, Inc.
# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.

case $1 in
  '')
     echo "$0: No file.  Try \`$0 --help' for more information." 1>&2
     exit 1;
     ;;
  -h | --h*)
    cat <<\EOF
Usage: mdate-sh [--help] [--version] FILE

Pretty-print the modification time of FILE.

Report bugs to <bug-automake@gnu.org>.
EOF
    exit $?
    ;;
  -v | --v*)
    echo "mdate-sh $scriptversion"
    exit $?
    ;;
esac

# Prevent date giving response in another language.
LANG=C
export LANG
LC_ALL=C
export LC_ALL
LC_TIME=C
export LC_TIME

# GNU ls changes its time format in response to the TIME_STYLE
# variable.  Since we cannot assume `unset' works, revert this
# variable to its documented default.
if test "${TIME_STYLE+set}" = set; then
  TIME_STYLE=posix-long-iso
  export TIME_STYLE
fi

save_arg1=$1

# Find out how to get the extended ls output of a file or directory.
if ls -L /dev/null 1>/dev/null 2>&1; then
  ls_command='ls -L -l -d'
else
  ls_command='ls -l -d'
fi
# Avoid user/group names that might have spaces, when possible.
if ls -n /dev/null 1>/dev/null 2>&1; then
  ls_command="$ls_command -n"
fi

# A `ls -l' line looks as follows on OS/2.
#  drwxrwx---        0 Aug 11  2001 foo
# This differs from Unix, which adds ownership information.
#  drwxrwx---   2 root  root      4096 Aug 11  2001 foo
#
# To find the date, we split the line on spaces and iterate on words
# until we find a month.  This cannot work with files whose owner is a
# user named `Jan', or `Feb', etc.  However, it's unlikely that `/'
# will be owned by a user whose name is a month.  So we first look at
# the extended ls output of the root directory to decide how many
# words should be skipped to get the date.

# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
set x`$ls_command /`

# Find which argument is the month.
month=
command=
until test $month
do
  shift
  # Add another shift to the command.
  command="$command shift;"
  case $1 in
    Jan) month=January; nummonth=1;;
    Feb) month=February; nummonth=2;;
    Mar) month=March; nummonth=3;;
    Apr) month=April; nummonth=4;;
    May) month=May; nummonth=5;;
    Jun) month=June; nummonth=6;;
    Jul) month=July; nummonth=7;;
    Aug) month=August; nummonth=8;;
    Sep) month=September; nummonth=9;;
    Oct) month=October; nummonth=10;;
    Nov) month=November; nummonth=11;;
    Dec) month=December; nummonth=12;;
  esac
done

# Get the extended ls output of the file or directory.
set dummy x`eval "$ls_command \"\$save_arg1\""`

# Remove all preceding arguments
eval $command

# Because of the dummy argument above, month is in $2.
#
# On a POSIX system, we should have
#
# $# = 5
# $1 = file size
# $2 = month
# $3 = day
# $4 = year or time
# $5 = filename
#
# On Darwin 7.7.0 and 7.6.0, we have
#
# $# = 4
# $1 = day
# $2 = month
# $3 = year or time
# $4 = filename

# Get the month.
case $2 in
  Jan) month=January; nummonth=1;;
  Feb) month=February; nummonth=2;;
  Mar) month=March; nummonth=3;;
  Apr) month=April; nummonth=4;;
  May) month=May; nummonth=5;;
  Jun) month=June; nummonth=6;;
  Jul) month=July; nummonth=7;;
  Aug) month=August; nummonth=8;;
  Sep) month=September; nummonth=9;;
  Oct) month=October; nummonth=10;;
  Nov) month=November; nummonth=11;;
  Dec) month=December; nummonth=12;;
esac

case $3 in
  ???*) day=$1;;
  *) day=$3; shift;;
esac

# Here we have to deal with the problem that the ls output gives either
# the time of day or the year.
case $3 in
  *:*) set `date`; eval year=\$$#
       case $2 in
	 Jan) nummonthtod=1;;
	 Feb) nummonthtod=2;;
	 Mar) nummonthtod=3;;
	 Apr) nummonthtod=4;;
	 May) nummonthtod=5;;
	 Jun) nummonthtod=6;;
	 Jul) nummonthtod=7;;
	 Aug) nummonthtod=8;;
	 Sep) nummonthtod=9;;
	 Oct) nummonthtod=10;;
	 Nov) nummonthtod=11;;
	 Dec) nummonthtod=12;;
       esac
       # For the first six month of the year the time notation can also
       # be used for files modified in the last year.
       if (expr $nummonth \> $nummonthtod) > /dev/null;
       then
	 year=`expr $year - 1`
       fi;;
  *) year=$3;;
esac

# The result.
echo $day $month $year

# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/microhttpd.info.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/microhttpd.texi.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
\input texinfo
@setfilename microhttpd.info
@include version.texi
@settitle The GNU libmicrohttpd Reference Manual
@copying
This manual documents GNU libmicrohttpd version @value{VERSION}, last
updated @value{UPDATED}. It is built upon the documentation in the
header file @file{microhttpd.h}.

@noindent

Copyright @copyright{} 2007, 2008, 2009, 2010 Christian Grothoff

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts.  A copy of the license is included in the section entitled "GNU
Free Documentation License".
@end quotation
GNU libmicrohttpd is a GNU package.
@end copying

@dircategory GNU Libraries
@direntry
* libmicrohttpd: (microhttpd).  Embedded HTTP server library.
@end direntry

@c
@c Titlepage
@c
@titlepage
@title The GNU libmicrohttpd Reference Manual
@subtitle Version @value{VERSION}
@subtitle @value{UPDATED}
@author Marco Maggi (@email{marco.maggi-ipsu@@poste.it})
@author Christian Grothoff (@email{christian@@grothoff.org})

@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@summarycontents
@contents


@macro gnu{}
@acronym{GNU}
@end macro

@macro gpl{}
@acronym{LGPL}
@end macro

@macro http{}
@acronym{HTTP}
@end macro

@macro tcp{}
@acronym{TCP}
@end macro

@macro api{}
@acronym{API}
@end macro

@macro urloc{}
@acronym{URL}
@end macro

@macro uri{}
@acronym{URI}
@end macro

@macro ascii{}
@acronym{ASCII}
@end macro

@c ............................................................

@macro cfunction{arg}
@code{\arg\()}
@end macro

@macro mynull{}
@code{NULL}
@end macro

@macro mhd{}
@acronym{MHD}
@end macro

@c ............................................................

@macro glibcref{NODE, NODE}
@pxref{\NODE\, \NODE\, \NODE\, libc}
@end macro

@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


@c ------------------------------------------------------------
@ifnottex
@node Top
@top The GNU libmicrohttpd Library
@insertcopying
@end ifnottex

@menu
* microhttpd-intro::            Introduction.
* microhttpd-const::            Constants.
* microhttpd-struct::           Structures type definition.
* microhttpd-cb::               Callback functions definition.
* microhttpd-init::             Starting and stopping the server.
* microhttpd-inspect::          Implementing external @code{select}.
* microhttpd-requests::         Handling requests.
* microhttpd-responses::        Building responses to requests.
* microhttpd-post::             Adding a @code{POST} processor.
* microhttpd-info::             Obtaining status information.

Appendices

* GNU-LGPL::                     The GNU Lesser General Public License says how you
                                 can copy and share almost all of `libmicrohttpd'.
* GNU GPL with eCos Extension::  The GNU General Public License with eCos extension says how you
                                 can copy and share some parts of `libmicrohttpd'.
* GNU-FDL::                     The GNU Free Documentation License says how you
                                can copy and share the documentation of `libmicrohttpd'.

Indices

* Concept Index::               Index of concepts and programs.
* Function and Data Index::     Index of functions, variables and data types.
* Type Index::                  Index of data types.
@end menu

@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-intro
@chapter Introduction


@noindent
All symbols defined in the public @api{} start with @code{MHD_}.  @mhd{}
is a small @http{} daemon library.  As such, it does not have any @api{}
for logging errors (you can only enable or disable logging to stderr).
Also, it may not support all of the @http{} features directly, where
applicable, portions of @http{} may have to be handled by clients of the
library.

The library is supposed to handle everything that it must handle
(because the @api{} would not allow clients to do this), such as basic
connection management; however, detailed interpretations of headers ---
such as range requests --- and @http{} methods are left to clients.  The
library does understand @code{HEAD} and will only send the headers of
the response and not the body, even if the client supplied a body.  The
library also understands headers that control connection management
(specifically, @code{Connection: close} and @code{Expect: 100 continue}
are understood and handled automatically).

@mhd{} understands @code{POST} data and is able to decode certain
formats (at the moment only @code{application/x-www-form-urlencoded}
and @code{multipart/form-data}) using the post processor API.  The
data stream of a POST is also provided directly to the main
application, so unsupported encodings could still be processed, just
not conveniently by @mhd{}.

The header file defines various constants used by the @http{} protocol.
This does not mean that @mhd{} actually interprets all of these values.
The provided constants are exported as a convenience for users of the
library.  @mhd{} does not verify that transmitted @http{} headers are
part of the standard specification; users of the library are free to
define their own extensions of the @http{} standard and use those with
@mhd{}.

All functions are guaranteed to be completely reentrant and
thread-safe.  @mhd{} checks for allocation failures and tries to
recover gracefully (for example, by closing the connection).
Additionally, clients can specify resource limits on the overall
number of connections, number of connections per IP address and memory
used per connection to avoid resource exhaustion.

@section SIGPIPE
@cindex signals
@mhd{} does not install a signal handler for SIGPIPE.  On platforms
where this is possible (such as GNU/Linux), it disables SIGPIPE for
its I/O operations (by passing MSG_NOSIGNAL).  On other platforms,
SIGPIPE signals may be generated from network operations by 
@mhd{} and will cause the process to die unless the developer
explicitly installs a signal handler for SIGPIPE.

Hence portable code using MHD must install a SIGPIPE handler or
explicitly block the SIGPIPE signal.  MHD does not do so in order 
to avoid messing with other parts of the application that may
need to handle SIGPIPE in a particular way.  You can make your application handle SIGPIPE by calling the following function in @code{main}:

@verbatim
static void
catcher (int sig)
{
}

static void
ignore_sigpipe ()
{
  struct sigaction oldsig;
  struct sigaction sig;

  sig.sa_handler = &catcher;
  sigemptyset (&sig.sa_mask);
#ifdef SA_INTERRUPT
  sig.sa_flags = SA_INTERRUPT;  /* SunOS */
#else
  sig.sa_flags = SA_RESTART;
#endif
  if (0 != sigaction (SIGPIPE, &sig, &oldsig))
    fprintf (stderr,
             "Failed to install SIGPIPE handler: %s\n", strerror (errno));
}
@end verbatim


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-const
@chapter Constants


@deftp {Enumeration} MHD_FLAG
Options for the @mhd{} daemon.

Note that if neither @code{MHD_USER_THREAD_PER_CONNECTION} nor
@code{MHD_USE_SELECT_INTERNALLY} are used, the client wants control over
the process and will call the appropriate microhttpd callbacks.

Starting the daemon may also fail if a particular option is not
implemented or not supported on the target platform (i.e. no support for
@acronym{SSL}, threads or IPv6).  SSL support generally depends on
options given during @mhd{} compilation.  Threaded operations
(including @code{MHD_USE_SELECT_INTERNALLY}) are not supported on
Symbian.

@table @code
@item MHD_NO_FLAG
No options selected.

@item MHD_USE_DEBUG
@cindex debugging
Run in debug mode.  If this flag is used, the library should print error
messages and warnings to stderr.  Note that @mhd{} also needs to be
compiled with the configure option @code{--enable-messages} for this
run-time option to have any effect.

@item MHD_USE_SSL
Run in https mode (this option may not work with all threading modes yet).

@item MHD_USE_THREAD_PER_CONNECTION
Run using one thread per connection.

@item MHD_USE_SELECT_INTERNALLY
Run using an internal thread doing @code{SELECT}.

@item MHD_USE_IPv6
@cindex IPv6
Run using the IPv6 protocol (otherwise, @mhd{} will just support IPv4).


@item MHD_USE_PEDANTIC_CHECKS
Be pedantic about the protocol (as opposed to as tolerant as possible).
Specifically, at the moment, this flag causes @mhd{} to reject @http{}
1.1 connections without a @code{Host} header.  This is required by the
standard, but of course in violation of the ``be as liberal as possible
in what you accept'' norm.  It is recommended to turn this @strong{ON}
if you are testing clients against @mhd{}, and @strong{OFF} in
production.

@item MHD_USE_POLL
@cindex FD_SETSIZE
@cindex poll
@cindex select
Use poll instead of select. This allows sockets with descriptors
@code{>= FD_SETSIZE}.  This option only works in conjunction with
@code{MHD_USE_THREAD_PER_CONNECTION} (at this point).

@end table
@end deftp


@deftp {Enumeration} MHD_OPTION
@mhd{} options.  Passed in the varargs portion of
@cfunction{MHD_start_daemon}.

@table @code
@item MHD_OPTION_END
No more options / last option.  This is used to terminate the VARARGs
list.
  
@item MHD_OPTION_CONNECTION_MEMORY_LIMIT
@cindex memory, limiting memory utilization
Maximum memory size per connection (followed by a @code{size_t}).  The
default is 32 kB (32*1024 bytes) as defined by the internal constant
@code{MHD_POOL_SIZE_DEFAULT}.

@item MHD_OPTION_CONNECTION_LIMIT
@cindex connection, limiting number of connections
Maximum number of concurrenct connections to accept (followed by an
@code{unsigned int}).  The default is @code{FD_SETSIZE - 4} (the
maximum number of file descriptors supported by @code{select} minus
four for @code{stdin}, @code{stdout}, @code{stderr} and the server
socket).  In other words, the default is as large as possible.

@item MHD_OPTION_CONNECTION_TIMEOUT
@cindex timeout
After how many seconds of inactivity should a connection automatically
be timed out? (followed by an @code{unsigned int}; use zero for no
timeout).  The default is zero (no timeout).

@item MHD_OPTION_NOTIFY_COMPLETED
Register a function that should be called whenever a request has been
completed (this can be used for application-specific clean up).
Requests that have never been presented to the application (via
@cfunction{MHD_AccessHandlerCallback}) will not result in
notifications.

This option should be followed by @strong{TWO} pointers.  First a
pointer to a function of type @cfunction{MHD_RequestCompletedCallback}
and second a pointer to a closure to pass to the request completed
callback.  The second pointer maybe @mynull{}.


@item MHD_OPTION_PER_IP_CONNECTION_LIMIT
Limit on the number of (concurrent) connections made to the
server from the same IP address.  Can be used to prevent one
IP from taking over all of the allowed connections.  If the
same IP tries to establish more than the specified number of
connections, they will be immediately rejected.  The option
should be followed by an @code{unsigned int}.  The default is
zero, which means no limit on the number of connections
from the same IP address.

@item MHD_OPTION_SOCK_ADDR
@cindex bind, restricting bind
Bind daemon to the supplied socket address. This option should be followed by a
@code{struct sockaddr *}.  If @code{MHD_USE_IPv6} is specified, 
the @code{struct sockaddr*} should point to a @code{struct sockaddr_in6}, 
otherwise to a @code{struct sockaddr_in}.  If this option is not specified,
the daemon will listen to incomming connections from anywhere.

@item MHD_OPTION_URI_LOG_CALLBACK
@cindex debugging
@cindex logging
@cindex query string
Specify a function that should be called before parsing the URI from
the client.  The specified callback function can be used for processing
the URI (including the options) before it is parsed.  The URI after
parsing will no longer contain the options, which maybe inconvenient for
logging.  This option should be followed by two arguments, the first
one must be of the form
@example
 void * my_logger(void * cls, const char * uri)
@end example
where the return value will be passed as
@code{*con_cls} in calls to the @code{MHD_AccessHandlerCallback}
when this request is processed later; returning a
value of NULL has no special significance; (however,
note that if you return non-NULL, you can no longer
rely on the first call to the access handler having
@code{NULL == *con_cls} on entry)
@code{cls} will be set to the second argument following
MHD_OPTION_URI_LOG_CALLBACK.  Finally, @code{uri} will
be the 0-terminated URI of the request.

@item MHD_OPTION_HTTPS_MEM_KEY
@cindex SSL
@cindex TLS
Memory pointer to the private key to be used by the
HTTPS daemon.  This option should be followed by an
"const char*" argument.
This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
   
@item MHD_OPTION_HTTPS_MEM_CERT
@cindex SSL
@cindex TLS
Memory pointer to the certificate to be used by the
HTTPS daemon.  This option should be followed by an
"const char*" argument.
This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
   
@item MHD_OPTION_HTTPS_CRED_TYPE
@cindex SSL
@cindex TLS
Daemon credentials type.  Either certificate or anonymous,
this option should be followed by one of the values listed in
"enum gnutls_credentials_type_t".
   
@item MHD_OPTION_HTTPS_PRIORITIES
@cindex SSL
@cindex TLS
@cindex cipher
SSL/TLS protocol version and ciphers.
This option must be followwed by an "const char *" argument
specifying the SSL/TLS protocol versions and ciphers that
are acceptable for the application.  The string is passed
unchanged to gnutls_priority_init.  If this option is not
specified, ``NORMAL'' is used.
  
@item MHD_OPTION_LISTEN_SOCKET
@cindex systemd
Listen socket to use.  Pass a listen socket for MHD to use
(systemd-style).  If this option is used, MHD will not open its own
listen socket(s). The argument passed must be of type "int" and refer
to an existing socket that has been bound to a port and is listening.
  
@item MHD_OPTION_EXTERNAL_LOGGER
@cindex logging
Use the given function for logging error messages.
This option must be followed by two arguments; the
first must be a pointer to a function
of type 'void fun(void * arg, const char * fmt, va_list ap)'
and the second a pointer of type 'void*' which will
be passed as the "arg" argument to "fun".
 
Note that MHD will not generate any log messages
if it was compiled without the "--enable-messages"
flag being set and the MHD_USE_DEBUG flag being set, 
even if this argument is used.

@item MHD_OPTION_THREAD_POOL_SIZE
@cindex performance
Number (unsigned int) of threads in thread pool. Enable
thread pooling by setting this value to to something
greater than 1. Currently, thread model must be
MHD_USE_SELECT_INTERNALLY if thread pooling is enabled
(MHD_start_daemon returns NULL for an unsupported thread
model).

@item MHD_OPTION_ARRAY
@cindex options
This option can be used for initializing MHD using options from an
array.  A common use for this is writing an FFI for MHD.  The actual
options given are in an array of 'struct MHD_OptionItem', so this
option requires a single argument of type 'struct MHD_OptionItem'.
The array must be terminated with an entry @code{MHD_OPTION_END}.

An example for code using MHD_OPTION_ARRAY is:
@example
struct MHD_OptionItem ops[] = @{
 @{ MHD_OPTION_CONNECTION_LIMIT, 100, NULL @},
 @{ MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL @},
 @{ MHD_OPTION_END, 0, NULL @}
@};
d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL,
                     MHD_OPTION_ARRAY, ops,
                     MHD_OPTION_END);
@end example
For options that expect a single pointer argument, the
second member of the @code{struct MHD_OptionItem} is ignored.
For options that expect two pointer arguments, the first
argument must be cast to @code{intptr_t}.
@end table
@end deftp


@deftp {C Struct} MHD_OptionItem
Entry in an MHD_OPTION_ARRAY.  See the @code{MHD_OPTION_ARRAY} option
argument for its use. 

The @code{option} member is used to specify which option is specified
in the array.  The other members specify the respective argument.

Note that for options taking only a single pointer, the
@code{ptr_value} member should be set.  For options taking two pointer
arguments, the first pointer must be cast to @code{intptr_t} and both
the @code{value} and the @code{ptr_value} members should be used to
pass the two pointers.
@end deftp


@deftp {Enumeration} MHD_ValueKind
The @code{MHD_ValueKind} specifies the source of the key-value pairs in
the @http{} protocol.

@table @code
@item MHD_RESPONSE_HEADER_KIND
Response header.

@item MHD_HEADER_KIND
@http{} header.

@item MHD_COOKIE_KIND
@cindex cookie
Cookies.  Note that the original @http{} header containing the cookie(s)
will still be available and intact.

@item MHD_POSTDATA_KIND
@cindex POST method
@code{POST} data.  This is available only if a content encoding
supported by @mhd{} is used (currently only @acronym{URL} encoding), and
only if the posted content fits within the available memory pool.  Note
that in that case, the upload data given to the
@cfunction{MHD_AccessHandlerCallback} will be empty (since it has
already been processed).

@item MHD_GET_ARGUMENT_KIND
@code{GET} (@uri{}) arguments.

@item MHD_FOOTER_KIND
@http{} footer (only for http 1.1 chunked encodings).

@end table
@end deftp


@deftp {Enumeration} MHD_RequestTerminationCode
The @code{MHD_RequestTerminationCode} specifies reasons why a request
has been terminated (or completed).

@table @code
@item MHD_REQUEST_TERMINATED_COMPLETED_OK
We finished sending the response.

@item MHD_REQUEST_TERMINATED_WITH_ERROR
Error handling the connection (resources exhausted, other side closed
connection, application error accepting request, etc.)

@item MHD_REQUEST_TERMINATED_TIMEOUT_REACHED
No activity on the connection for the number of seconds specified using
@code{MHD_OPTION_CONNECTION_TIMEOUT}.

@item MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN
We had to close the session since @mhd{} was being shut down.
@end table
@end deftp



@deftp {Enumeration} MHD_ConnectionInfoType
Values of this enum are used to specify what information about a
connection is desired.

@table @code

@item MHD_CONNECTION_INFO_CIPHER_ALGO
What cipher algorithm is being used.
Takes no extra arguments.

@item MHD_CONNECTION_INFO_PROTOCOL,
Takes no extra arguments.   Allows finding out the TLS/SSL protocol used
(HTTPS connections only).

@item MHD_CONNECTION_INFO_GNUTLS_SESSION,
Takes no extra arguments.  Allows access to the underlying GNUtls session 
(HTTPS connections only).

@end table
@end deftp




@deftp {Enumeration} MHD_DaemonInfoType
Values of this enum are used to specify what
information about a deamon is desired.
@table @code
@item MHD_DAEMON_INFO_KEY_SIZE
Request information about the key size for a particular cipher
algorithm.  The cipher algorithm should be passed as an extra argument
(of type 'enum MHD_GNUTLS_CipherAlgorithm').

@item MHD_DAEMON_INFO_MAC_KEY_SIZE
Request information about the key size for a particular cipher
algorithm.  The cipher algorithm should be passed as an extra argument
(of type 'enum MHD_GNUTLS_HashAlgorithm').

@item MHD_DAEMON_INFO_LISTEN_FD
@cindex listen
Request the file-descriptor number that MHD is using to listen to the
server socket.  This can be useful if no port
was specified and a client needs to learn what port
is actually being used by MHD.
No extra arguments should be passed.

@end table
@end deftp


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-struct
@chapter Structures type definition


@deftp {C Struct} MHD_Daemon
Handle for the daemon (listening on a socket for @http{} traffic).
@end deftp


@deftp {C Struct} MHD_Connection
Handle for a connection / @http{} request.  With @http{}/1.1, multiple
requests can be run over the same connection.  However, @mhd{} will only
show one request per @tcp{} connection to the client at any given time.
@end deftp


@deftp {C Struct} MHD_Response
Handle for a response.
@end deftp


@deftp {C Struct} MHD_PostProcessor
@cindex POST method
Handle for @code{POST} processing.
@end deftp


@deftp {C Union} MHD_ConnectionInfo
Information about a connection.
@end deftp


@deftp {C Union} MHD_DaemonInfo
Information about an MHD daemon.
@end deftp


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-cb
@chapter Callback functions definition


@deftypefn {Function Pointer} int {*MHD_AcceptPolicyCallback} (void *cls, const struct sockaddr * addr, socklen_t addrlen)
Invoked in the context of a connection to allow or deny a client to
connect.  This callback return @code{MHD_YES} if connection is allowed,
@code{MHD_NO} if not.

@table @var
@item cls
custom value selected at callback registration time;
@item addr
address information from the client;
@item addrlen
length of the address information.
@end table
@end deftypefn


@deftypefn {Function Pointer} int {*MHD_AccessHandlerCallback} (void *cls, struct MHD_Connection * connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls)
Invoked in the context of a connection to answer a request from the
client.  This callback must call @mhd{} functions (example: the
@code{MHD_Response} ones) to provide content to give back to the client
and return an @http{} status code (i.e. @code{200} for OK, @code{404},
etc.).

@ref{microhttpd-post}, for details on how to code this callback.

Must return @code{MHD_YES} if the connection was handled successfully,
@code{MHD_NO} if the socket must be closed due to a serious error while
handling the request

@table @var
@item cls
custom value selected at callback registration time;

@item url
the @urloc{} requested by the client;

@item method
the @http{} method used by the client (@code{GET}, @code{PUT},
@code{DELETE}, @code{POST}, etc.);

@item version
the @http{} version string (i.e. @code{HTTP/1.1});

@item upload_data
the data being uploaded (excluding headers):
@cindex POST method
@cindex PUT method

@itemize
@item
for a @code{POST} that fits into memory and that is encoded with a
supported encoding, the @code{POST} data will @strong{NOT} be given in
@var{upload_data} and is instead available as part of
@cfunction{MHD_get_connection_values};

@item
very large @code{POST} data @strong{will} be made available
incrementally in @var{upload_data};
@end itemize

@item upload_data_size
set initially to the size of the @var{upload_data} provided; this
callback must update this value to the number of bytes @strong{NOT}
processed; unless external select is used, the callback maybe
required to process at least some data.  If the callback fails to
process data in multi-threaded or internal-select mode and if the
read-buffer is already at the maximum size that MHD is willing to
use for reading (about half of the maximum amount of memory allowed
for the connection), then MHD will abort handling the connection
and return an internal server error to the client.  In order to
avoid this, clients must be able to process upload data incrementally
and reduce the value of @code{upload_data_size}.

@item con_cls
reference to a pointer, initially set to @mynull{}, that this callback can
set to some address and that will be preserved by @mhd{} for future
calls for this request;

since the access handler may be called many times (i.e., for a
@code{PUT}/@code{POST} operation with plenty of upload data) this allows
the application to easily associate some request-specific state;

if necessary, this state can be cleaned up in the global
@code{MHD_RequestCompletedCallback} (which can be set with the
@code{MHD_OPTION_NOTIFY_COMPLETED}).
@end table
@end deftypefn


@deftypefn {Function Pointer} void {*MHD_RequestCompletedCallback} (void *cls, struct MHD_Connectionconnection, void **con_cls, enum MHD_RequestTerminationCode toe)
Signature of the callback used by @mhd{} to notify the application about
completed requests.

@table @var
@item cls
custom value selected at callback registration time;

@item connection
connection handle;

@item con_cls
value as set by the last call to the
@code{MHD_AccessHandlerCallback};

@item toe
reason for request termination see @code{MHD_OPTION_NOTIFY_COMPLETED}.
@end table
@end deftypefn


@deftypefn {Function Pointer} int {*MHD_KeyValueIterator} (void *cls, enum MHD_ValueKind kind, const char *key, const char *value)
Iterator over key-value pairs.  This iterator can be used to iterate
over all of the cookies, headers, or @code{POST}-data fields of a
request, and also to iterate over the headers that have been added to a
response.

Return @code{MHD_YES} to continue iterating, @code{MHD_NO} to abort the
iteration.
@end deftypefn


@deftypefn {Function Pointer} int {*MHD_ContentReaderCallback} (void *cls, uint64_t pos, char *buf, int max)
Callback used by @mhd{} in order to obtain content.  The callback has to
copy at most @var{max} bytes of content into @var{buf}.  The total
number of bytes that has been placed into @var{buf} should be returned.

Note that returning zero will cause @mhd{} to try again, either
``immediately'' if in multi-threaded mode (in which case the callback
may want to do blocking operations to avoid busy waiting) or in the
next round if @code{MHD_run} is used.  Returning zero for a daemon
that runs in internal @cfunction{select} mode is an error (since it
would result in busy waiting) and cause the program to be aborted
(@cfunction{abort}).

@table @var
@item cls
custom value selected at callback registration time;

@item pos
position in the datastream to access; note that if an
@code{MHD_Response} object is re-used, it is possible for the same
content reader to be queried multiple times for the same data; however,
if an @code{MHD_Response} is not re-used, @mhd{} guarantees that
@var{pos} will be the sum of all non-negative return values obtained
from the content reader so far.
@end table

Return @code{-1} on error (@mhd{} will no longer try to read content and
instead close the connection with the client).
@end deftypefn


@deftypefn {Function Pointer} void {*MHD_ContentReaderFreeCallback} (void *cls)
This method is called by @mhd{} if we are done with a content reader.
It should be used to free resources associated with the content reader.
@end deftypefn


@deftypefn {Function Pointer} int {*MHD_PostDataIterator} (void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size)
Iterator over key-value pairs where the value maybe made available in
increments and/or may not be zero-terminated.  Used for processing
@code{POST} data.

@table @var
@item cls
custom value selected at callback registration time;

@item kind
type of the value;

@item key
zero-terminated key for the value;

@item filename
name of the uploaded file, @mynull{} if not known;

@item content_type
mime-type of the data, @mynull{} if not known;

@item transfer_encoding
encoding of the data, @mynull{} if not known;

@item data
pointer to size bytes of data at the specified offset;

@item off
offset of data in the overall value;

@item size
number of bytes in data available.
@end table

Return @code{MHD_YES} to continue iterating, @code{MHD_NO} to abort the
iteration.
@end deftypefn


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-init
@chapter Starting and stopping the server

@deftypefun {void} MHD_set_panic_func (MHD_PanicCallback cb, void *cls)
Set a handler for fatal errors.

@table @var
@item cb 
function to call if MHD encounteres a fatal internal error.  If no handler was set explicitly, MHD will call @code{abort}.

@item cls
closure argument for cb; the other arguments are the name of the source file, line number and a string describing the nature of the fatal error (which can be NULL)
@end table
@end deftypefun

@deftypefun {struct MHD_Daemon *} MHD_start_daemon (unsigned int flags, unsigned short port, MHD_AcceptPolicyCallback apc, void *apc_cls, MHD_AccessHandlerCallback dh, void *dh_cls, ...)
Start a webserver on the given port.

@table @var
@item flags
OR-ed combination of @code{MHD_FLAG} values;

@item port
port to bind to;

@item apc
callback to call to check which clients will be allowed to connect; you
can pass @mynull{} in which case connections from any @acronym{IP} will be
accepted;

@item apc_cls
extra argument to @var{apc};

@item dh
default handler for all @uri{}s;

@item dh_cls
extra argument to @var{dh}.
@end table

Additional arguments are a list of options (type-value pairs,
terminated with @code{MHD_OPTION_END}). It is mandatory to use
@code{MHD_OPTION_END} as last argument, even when there are no
additional arguments.

Return @mynull{} on error, handle to daemon on success.
@end deftypefun


@deftypefun void MHD_stop_daemon (struct MHD_Daemon *daemon)
Shutdown an @http{} daemon.
@end deftypefun


@deftypefun int MHD_run (struct MHD_Daemon *daemon)
Run webserver operations (without blocking unless in client callbacks).
This method should be called by clients in combination with
@cfunction{MHD_get_fdset} if the client-controlled @cfunction{select}
method is used.

Return @code{MHD_YES} on success, @code{MHD_NO} if this daemon was not
started with the right options for this call.
@end deftypefun


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c -----------------------------------------------------------
@node microhttpd-inspect
@chapter Implementing external @code{select}


@deftypefun int MHD_get_fdset (struct MHD_Daemon *daemon, fd_set * read_fd_set, fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd)
Obtain the @cfunction{select} sets for this daemon. The daemon's socket
is added to @var{read_fd_set}. The list of currently existent
connections is scanned and their file descriptors added to the correct
set.

@glibcref{Waiting for I/O}, for details on file descriptor sets.

After the call completed successfully: the variable referenced by
@var{max_fd} references the file descriptor with highest integer
identifier. The variable must be set to zero before invoking this
function.

Return @code{MHD_YES} on success, @code{MHD_NO} if: the arguments are
invalid (example: @mynull{} pointers); this daemon was not started with
the right options for this call.
@end deftypefun


@deftypefun int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout)
@cindex timeout
Obtain timeout value for select for this daemon (only needed if
connection timeout is used).  The returned value is how long
@cfunction{select} should at most block, not the timeout value set for
connections.

@table @var
@cindex timeout
set to the timeout (in milliseconds).
@end table

Return @code{MHD_YES} on success, @code{MHD_NO} if timeouts are not used
(or no connections exist that would necessiate the use of a timeout
right now).
@end deftypefun


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c -----------------------------------------------------------
@node microhttpd-requests
@chapter Handling requests


@deftypefun int MHD_get_connection_values (struct MHD_Connection *connection, enum MHD_ValueKind kind, MHD_KeyValueIterator iterator, void *iterator_cls)
Get all the headers matching @var{kind} from the request.

The @var{iterator} callback is invoked once for each header, with
@var{iterator_cls} as first argument. Return the number of entries
iterated over; this can be less than the number of headers if, while
iterating, @var{iterator} returns @code{MHD_NO}.

@var{iterator} can be @mynull{}: in this case this function just counts
and returns the number of headers.
@end deftypefun


@deftypefun int MHD_set_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char * key, const char * value)
This function can be used to add an entry to
the HTTP headers of a connection (so that the 
MHD_get_connection_values function will return
them -- and the MHD PostProcessor will also 
see them).  This maybe required in certain
situations (see Mantis #1399) where (broken)
HTTP implementations fail to supply values needed
by the post processor (or other parts of the
application).

This function MUST only be called from within
the MHD_AccessHandlerCallback (otherwise, access
maybe improperly synchronized).  Furthermore,
the client must guarantee that the key and
value arguments are 0-terminated strings that
are NOT freed until the connection is closed.
(The easiest way to do this is by passing only
arguments to permanently allocated strings.).

@var{connection} is the connection for which 
the entry for @var{key} of the given @var{kind}
should be set to the given @var{value}.

The function returns @code{MHD_NO} if the operation 
could not be performed due to insufficient memory
and @code{MHD_YES} on success.
@end deftypefun


@deftypefun {const char *} MHD_lookup_connection_value (struct MHD_Connection *connection, enum MHD_ValueKind kind, const char *key)
Get a particular header value.  If multiple values match the @var{kind},
return one of them (the ``first'', whatever that means).  @var{key} must
reference a zero-terminated @ascii{}-coded string representing the
header to look for: it is compared against the headers using
@cfunction{strcasecmp}, so case is ignored.  Return @mynull{} if no such
item was found.
@end deftypefun


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-responses
@chapter Building answers to responses


@noindent
Response objects handling by @mhd{} is asynchronous with respect to the
application execution flow. Instances of the @code{MHD_Response}
structure are not associated to a daemon and neither to a client
connection: they are managed with reference counting.

In the simplest case: we allocate a new @code{MHD_Response} structure
for each response, we use it once and finally we destroy it.

@mhd{} allows more efficient resources usages.

Example: we allocate a new @code{MHD_Response} structure for each
response @strong{kind}, we use it every time we have to give that
responce and we finally destroy it only when the daemon shuts down.

@menu
* microhttpd-response enqueue:: Enqueuing a response.
* microhttpd-response create::  Creating a response object.
* microhttpd-response headers:: Adding headers to a response.
* microhttpd-response inspect:: Inspecting a response object.
@end menu

@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-response enqueue
@section Enqueuing a response


@deftypefun int MHD_queue_response (struct MHD_Connection *connection, unsigned int status_code, struct MHD_Response *response)
Queue a response to be transmitted to the client as soon as possible
but only after MHD_AccessHandlerCallback returns.  This function
checks that it is legal to queue a response at this time for the
given connection.  It also increments the internal reference
counter for the response object (the counter will be decremented
automatically once the response has been transmitted).

@table @var
@item connection
the connection identifying the client;

@item status_code
@http{} status code (i.e. @code{200} for OK);

@item response
response to transmit.
@end table

Return @code{MHD_YES} on success or if message has been queued.  Return
@code{MHD_NO}: if arguments are invalid (example: @mynull{} pointer); on
error (i.e. reply already sent).
@end deftypefun


@deftypefun void MHD_destroy_response (struct MHD_Response *response)
Destroy a response object and associated resources (decrement the
reference counter).  Note that @mhd{} may keep some of the resources
around if the response is still in the queue for some clients, so the
memory may not necessarily be freed immediatley.
@end deftypefun


An explanation of reference counting@footnote{Note to readers acquainted
to the Tcl @api{}: reference counting on @code{MHD_Connection}
structures is handled in the same way as Tcl handles @code{Tcl_Obj}
structures through @cfunction{Tcl_IncrRefCount} and
@cfunction{Tcl_DecrRefCount}.}:

@enumerate
@item
a @code{MHD_Response} object is allocated:

@example
struct MHD_Response * response = MHD_create_response_from_data(...);
/* here: reference counter = 1 */
@end example

@item
the @code{MHD_Response} object is enqueued in a @code{MHD_Connection}:

@example
MHD_queue_response(connection, , response);
/* here: reference counter = 2 */
@end example

@item
the creator of the response object discharges responsibility for it:

@example
MHD_destroy_response(response);
/* here: reference counter = 1 */
@end example

@item
the daemon handles the connection sending the response's data to the
client then decrements the reference counter by calling
@cfunction{MHD_destroy_response}: the counter's value drops to zero and
the @code{MHD_Response} object is released.
@end enumerate


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-response create
@section Creating response objects


@deftypefun {struct MHD_Response *} MHD_create_response_from_callback (uint64_t size, size_t block_size, MHD_ContentReaderCallback crc, void *crc_cls, MHD_ContentReaderFreeCallback crfc)
Create a response object.  The response object can be extended with
header information and then it can be used any number of times.

@table @var
@item size
size of the data portion of the response, @code{-1} for unknown;

@item block_size
preferred block size for querying @var{crc} (advisory only, @mhd{} may
still call @var{crc} using smaller chunks); this is essentially the
buffer size used for @acronym{IO}, clients should pick a value that is
appropriate for @acronym{IO} and memory performance requirements;

@item crc
callback to use to obtain response data;

@item crc_cls
extra argument to @var{crc};

@item crfc
callback to call to free @var{crc_cls} resources.
@end table

Return @mynull{} on error (i.e. invalid arguments, out of memory).
@end deftypefun



@deftypefun {struct MHD_Response *} MHD_create_response_from_fd (uint64_t size, int fd)
Create a response object.  The response object can be extended with
header information and then it can be used any number of times.

@table @var
@item size
size of the data portion of the response, @code{-1} for unknown;

@item fd
file descriptor referring to a file on disk with the data; will be
closed when response is destroyed
@end table

Return @mynull{} on error (i.e. invalid arguments, out of memory).
@end deftypefun


@deftypefun {struct MHD_Response *} MHD_create_response_from_data (size_t size, void *data, int must_free, int must_copy)
Create a response object.  The response object can be extended with
header information and then it can be used any number of times.

@table @var
@item size
size of the data portion of the response;

@item data
the data itself;

@item must_free
if true: @mhd{} should free data when done;

@item must_copy
if true: @mhd{} allocates a block of memory and use it to make a copy of
@var{data} embedded in the returned @code{MHD_Response} structure;
handling of the embedded memory is responsibility of @mhd{}; @var{data}
can be released anytime after this call returns.
@end table

Return @mynull{} on error (i.e. invalid arguments, out of memory).
@end deftypefun


Example: create a response from a statically allocated string:

@example
const char * data = "<html><body><p>Error!</p></body></html>";

struct MHD_Connection * connection = ...;
struct MHD_Response *   response;

response = MHD_create_response_from_data(strlen(data), data,
                                         MHD_NO, MHD_NO);
MHD_queue_response(connection, 404, response);
MHD_destroy_response(response);
@end example



@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-response headers
@section Adding headers to a response


@deftypefun int MHD_add_response_header (struct MHD_Response *response, const char *header, const char *content)
Add a header line to the response. The strings referenced by
@var{header} and @var{content} must be zero-terminated and they are
duplicated into memory blocks embedded in @var{response}.

Notice that the strings must not hold newlines, carriage returns or tab
chars.

Return @code{MHD_NO} on error (i.e. invalid header or content format or
memory allocation error).
@end deftypefun


@deftypefun int MHD_del_response_header (struct MHD_Response *response, const char *header, const char *content)
Delete a header line from the response.  Return @code{MHD_NO} on error
(arguments are invalid or no such header known).
@end deftypefun


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-response inspect
@section Inspecting a response object


@deftypefun int MHD_get_response_headers (struct MHD_Response *response, MHD_KeyValueIterator iterator, void *iterator_cls)
Get all of the headers added to a response.

Invoke the @var{iterator} callback for each header in the response,
using @var{iterator_cls} as first argument. Return number of entries
iterated over.  @var{iterator} can be @mynull{}: in this case the function
just counts headers.

@var{iterator} should not modify the its key and value arguments, unless
we know what we are doing.
@end deftypefun


@deftypefun {const char *} MHD_get_response_header (struct MHD_Response *response, const char *key)
Find and return a pointer to the value of a particular header from the
response.  @var{key} must reference a zero-terminated string
representing the header to look for. The search is case sensitive.
Return @mynull{} if header does not exist or @var{key} is @mynull{}.

We should not modify the value, unless we know what we are doing.
@end deftypefun


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-post
@chapter Adding a @code{POST} processor
@cindex POST method

@menu
* microhttpd-post api::         Programming interface for the
                                @code{POST} processor.
@end menu


@noindent
@mhd{} provides the post procesor API to make it easier for applications to
parse the data of a client's @code{POST} request: the
@code{MHD_AccessHandlerCallback} will be invoked multiple times to
process data as it arrives; at each invocation a new chunk of data must
be processed. The arguments @var{upload_data} and @var{upload_data_size}
are used to reference the chunk of data.

When @code{MHD_AccessHandlerCallback} is invoked for a new connection:
its @code{*@var{con_cls}} argument is set to @mynull{}. When @code{POST}
data comes in the upload buffer it is @strong{mandatory} to use the
@var{con_cls} to store a reference to per-connection data.  The fact
that the pointer was initially @mynull{} can be used to detect that
this is a new request.  

One method to detect that a new connection was established is
to set @code{*con_cls} to anunused integer:

@example
int
access_handler (void *cls,
                struct MHD_Connection * connection,
                const char *url,
                const char *method, const char *version,
                const char *upload_data, size_t *upload_data_size,
                void **con_cls)
@{
  static int old_connection_marker;
  int new_connection = (MYNULL == *con_cls);

  if (new_connection) 
    @{
      /* new connection with POST */
      *con_cls = &old_connection_marker;
    @}

  ...
@}
@end example

@noindent
In contrast to the previous example, for @code{POST} requests in particular,
it is more common to use the value of @code{*con_cls} to keep track of
actual state used during processing, such as the post processor (or a
struct containing a post processor):

@example
int
access_handler (void *cls,
                struct MHD_Connection * connection,
                const char *url,
                const char *method, const char *version,
                const char *upload_data, size_t *upload_data_size,
                void **con_cls)
@{
  struct MHD_PostProcessor * pp = *con_cls;

  if (pp == NULL) 
    @{
      pp = MHD_create_post_processor(connection, ...);
      *con_cls = pp;
      return MHD_YES;
    @}
  if (*upload_data_size) 
    @{
      MHD_post_process(pp, upload_data, *upload_data_size);
      *upload_data_size = 0;
      return MHD_YES;
    @}
  else
    @{
      MHD_destroy_post_processor(pp);
      return MHD_queue_response(...);
    @}
@}
@end example

Note that the callback from @code{MHD_OPTION_NOTIFY_COMPLETED}
should be used to destroy the post processor.  This cannot be
done inside of the access handler since the connection may not
always terminate normally.


@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-post api
@section Programming interface for the @code{POST} processor
@cindex POST method

@deftypefun {struct MHD_PostProcessor *} MHD_create_post_processor (struct MHD_Connection *connection, size_t buffer_size, MHD_PostDataIterator iterator, void *iterator_cls)
Create a PostProcessor.  A PostProcessor can be used to (incrementally)
parse the data portion of a @code{POST} request.

@table @var
@item connection
the connection on which the @code{POST} is happening (used to determine
the @code{POST} format);

@item buffer_size
maximum number of bytes to use for internal buffering (used only for the
parsing, specifically the parsing of the keys).  A tiny value (256-1024)
should be sufficient; do @strong{NOT} use a value smaller than 256;

@item iterator
iterator to be called with the parsed data; must @strong{NOT} be
@mynull{};

@item iterator_cls
custom value to be used as first argument to @var{iterator}.
@end table

Return @mynull{} on error (out of memory, unsupported encoding), otherwise
a PP handle.
@end deftypefun


@deftypefun int MHD_post_process (struct MHD_PostProcessor *pp, const char *post_data, size_t post_data_len)
Parse and process @code{POST} data.  Call this function when @code{POST}
data is available (usually during an @code{MHD_AccessHandlerCallback})
with the @var{upload_data} and @var{upload_data_size}.  Whenever
possible, this will then cause calls to the
@code{MHD_IncrementalKeyValueIterator}.

@table @var
@item pp
the post processor;

@item post_data
@var{post_data_len} bytes of @code{POST} data;

@item post_data_len
length of @var{post_data}.
@end table

Return @code{MHD_YES} on success, @code{MHD_NO} on error
(out-of-memory, iterator aborted, parse error).
@end deftypefun


@deftypefun int MHD_destroy_post_processor (struct MHD_PostProcessor *pp)
Release PostProcessor resources.  After this function is being called,
the PostProcessor is guaranteed to no longer call its iterator.  There
is no special call to the iterator to indicate the end of the post processing
stream.  After destroying the PostProcessor, the programmer should
perform any necessary work to complete the processing of the iterator.

Return @code{MHD_YES} if processing completed nicely, @code{MHD_NO} 
if there were spurious characters or formatting problems with
the post request.  It is common to ignore the return value
of this function.


@end deftypefun



@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@c ------------------------------------------------------------
@node microhttpd-info
@chapter Obtaining status information.


@menu
* microhttpd-info daemon::        State information about an MHD daemon
* microhttpd-info conn::          State information about a connection
@end menu


@c ------------------------------------------------------------
@node microhttpd-info daemon
@section Obtaining state information about an MHD daemon

@deftypefun {const union MHD_DaemonInfo *} MHD_get_daemon_info (struct MHD_Daemon *daemon, enum MHD_DaemonInfoType infoType, ...)
Obtain information about the given daemon.  This function
is currently not fully implemented.

@table @var
@item daemon
the daemon about which information is desired;

@item infoType
type of information that is desired

@item ...
additional arguments about the desired information (depending on
infoType)
@end table

Returns a union with the respective member (depending on
infoType) set to the desired information), or NULL
in case the desired information is not available or
applicable.
@end deftypefun

@c ------------------------------------------------------------
@node microhttpd-info conn
@section Obtaining state information about a connection


@deftypefun {const union MHD_ConnectionInfo *} MHD_get_connection_info (struct MHD_Connection *daemon, enum MHD_ConnectionInfoType infoType, ...)
Obtain information about the given connection.

@table @var
@item connection
the connection about which information is desired;

@item infoType
type of information that is desired

@item ...
additional arguments about the desired information (depending on
infoType)
@end table

Returns a union with the respective member (depending on
infoType) set to the desired information), or NULL
in case the desired information is not available or
applicable.
@end deftypefun

@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


@c **********************************************************
@c *******************  Appendices  *************************
@c **********************************************************

@node GNU-LGPL
@unnumbered GNU-LGPL
@cindex license
@include lgpl.texi

@node GNU GPL with eCos Extension
@unnumbered GNU GPL with eCos Extension
@cindex license
@include ecos.texi

@node GNU-FDL
@unnumbered GNU-FDL
@cindex license
@include fdl-1.3.texi

@node Concept Index
@unnumbered Concept Index

@printindex cp

@node Function and Data Index
@unnumbered Function and Data Index

@printindex fn

@node Type Index
@unnumbered Type Index

@printindex tp

@bye

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/stamp-vti.









>
>
>
>
1
2
3
4
@set UPDATED 26 July 2010
@set UPDATED-MONTH July 2010
@set EDITION 0.9.0
@set VERSION 0.9.0

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/texinfo.log.









































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
This is TeX, Version 3.141592 (Web2C 7.5.6) (format=tex 2007.5.18)  8 SEP 2010 14:24
**texinfo.tex
(./texinfo.tex Loading texinfo [version 2009-08-14.15]:
\bindingoffset=\dimen16
\normaloffset=\dimen17
\pagewidth=\dimen18
\pageheight=\dimen19
\outerhsize=\dimen20
\outervsize=\dimen21
\cornerlong=\dimen22
\cornerthick=\dimen23
\topandbottommargin=\dimen24
\headlinebox=\box16
\footlinebox=\box17
\margin=\insert252
\EMsimple=\toks12
\groupbox=\box18
\groupinvalidhelp=\toks13
\mil=\dimen25
\exdentamount=\skip18
\inmarginspacing=\skip19
 pdf,
\tempnum=\count26
\lnkcount=\count27
\filename=\toks14
\filenamelength=\count28
\pgn=\count29
\toksA=\toks15
\toksB=\toks16
\toksC=\toks17
\toksD=\toks18
\boxA=\box19
\countA=\count30
\nopdfimagehelp=\toks19
 fonts,
\sffam=\fam8
\textleading=\dimen26
 markup,
\fontdepth=\count31

glyphs,
\errorbox=\box20
 page headings,
\titlepagetopglue=\skip20
\titlepagebottomglue=\skip21
\evenheadline=\toks20
\oddheadline=\toks21
\evenfootline=\toks22
\oddfootline=\toks23
 tables,
\tableindent=\dimen27
\itemindent=\dimen28
\itemmargin=\dimen29
\itemmax=\dimen30
\itemno=\count32
\multitableparskip=\skip22
\multitableparindent=\skip23
\multitablecolspace=\dimen31
\multitablelinespace=\skip24
\colcount=\count33
\everytab=\toks24
 conditionals,
\doignorecount=\count34
 indexing,
\whatsitskip=\skip25
\whatsitpenalty=\count35
\secondaryindent=\skip26
\partialpage=\box21
\doublecolumnhsize=\dimen32
 sectioning,
\unnumberedno=\count36
\chapno=\count37
\secno=\count38
\subsecno=\count39
\subsubsecno=\count40
\appendixno=\count41
\absseclevel=\count42
\secbase=\count43
\chapheadingskip=\skip27
\secheadingskip=\skip28
\subsecheadingskip=\skip29
 toc,
\tocfile=\write0
\contentsrightmargin=\skip30
\savepageno=\count44
\lastnegativepageno=\count45
\tocindent=\dimen33

environments,
\lispnarrowing=\skip31
\envskipamount=\skip32
\circthick=\dimen34
\cartouter=\dimen35
\cartinner=\dimen36
\normbskip=\skip33
\normpskip=\skip34
\normlskip=\skip35
\lskip=\skip36
\rskip=\skip37
\nonfillparindent=\dimen37
\tabw=\dimen38
 defuns,
\defbodyindent=\skip38
\defargsindent=\skip39
\deflastargmargin=\skip40
\defunpenalty=\count46
\parencount=\count47
\brackcount=\count48
 macros,
\macscribble=\write1
\paramno=\count49
\macname=\toks25
 cross references,
\auxfile=\write2
\savesfregister=\count50
 insertions,
\footnoteno=\count51
\SAVEfootins=\box22
\SAVEmargin=\box23

(/usr/local/texlive/2007/texmf-dist/tex/generic/epsf/epsf.tex
This is `epsf.tex' v2.7.3 <23 July 2005>
\epsffilein=\read0
\epsfframemargin=\dimen39
\epsfframethickness=\dimen40
\epsfrsize=\dimen41
\epsftmp=\dimen42
\epsftsize=\dimen43
\epsfxsize=\dimen44
\epsfysize=\dimen45
\pspoints=\dimen46
)
\noepsfhelp=\toks26
 localization,
\nolanghelp=\toks27
\countUTFx=\count52
\countUTFy=\count53
\countUTFz=\count54
 formatting,
\defaultparindent=\dimen47
 and turning on texinfo input format.)
*
! Emergency stop.
<*> texinfo.tex
               
End of file on the terminal!

No pages of output.

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/texinfo.tex.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
% texinfo.tex -- TeX macros to handle Texinfo files.
% 
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
\def\texinfoversion{2009-08-14.15}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
% 2007, 2008, 2009 Free Software Foundation, Inc.
%
% This texinfo.tex file is free software: you can redistribute it and/or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation, either version 3 of the
% License, or (at your option) any later version.
%
% This texinfo.tex file is distributed in the hope that it will be
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.
%
% As a special exception, when this file is read by TeX when processing
% a Texinfo source document, you may use the result without
% restriction.  (This has been our intent since Texinfo was invented.)
%
% Please try the latest version of texinfo.tex before submitting bug
% reports; you can get the latest version from:
%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
%   ftp://tug.org/tex/texinfo.tex
%     (and all CTAN mirrors, see http://www.ctan.org).
% The texinfo.tex in any given distribution could well be out
% of date, so if that's what you're using, please check.
%
% Send bug reports to bug-texinfo@gnu.org.  Please include including a
% complete document in each bug report with which we can reproduce the
% problem.  Patches are, of course, greatly appreciated.
%
% To process a Texinfo manual with TeX, it's most reliable to use the
% texi2dvi shell script that comes with the distribution.  For a simple
% manual foo.texi, however, you can get away with this:
%   tex foo.texi
%   texindex foo.??
%   tex foo.texi
%   tex foo.texi
%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
% The extra TeX runs get the cross-reference information correct.
% Sometimes one run after texindex suffices, and sometimes you need more
% than two; texi2dvi does it as many times as necessary.
%
% It is possible to adapt texinfo.tex for other languages, to some
% extent.  You can get the existing language-specific files from the
% full Texinfo distribution.
%
% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.


\message{Loading texinfo [version \texinfoversion]:}

% If in a .fmt file, print the version number
% and turn on active characters that we couldn't do earlier because
% they might have appeared in the input file name.
\everyjob{\message{[Texinfo version \texinfoversion]}%
  \catcode`+=\active \catcode`\_=\active}


\chardef\other=12

% We never want plain's \outer definition of \+ in Texinfo.
% For @tex, we can use \tabalign.
\let\+ = \relax

% Save some plain tex macros whose names we will redefine.
\let\ptexb=\b
\let\ptexbullet=\bullet
\let\ptexc=\c
\let\ptexcomma=\,
\let\ptexdot=\.
\let\ptexdots=\dots
\let\ptexend=\end
\let\ptexequiv=\equiv
\let\ptexexclam=\!
\let\ptexfootnote=\footnote
\let\ptexgtr=>
\let\ptexhat=^
\let\ptexi=\i
\let\ptexindent=\indent
\let\ptexinsert=\insert
\let\ptexlbrace=\{
\let\ptexless=<
\let\ptexnewwrite\newwrite
\let\ptexnoindent=\noindent
\let\ptexplus=+
\let\ptexrbrace=\}
\let\ptexslash=\/
\let\ptexstar=\*
\let\ptext=\t
\let\ptextop=\top
{\catcode`\'=\active
\global\let\ptexquoteright'}% Math-mode def from plain.tex.
\let\ptexraggedright=\raggedright

% If this character appears in an error message or help string, it
% starts a new line in the output.
\newlinechar = `^^J

% Use TeX 3.0's \inputlineno to get the line number, for better error
% messages, but if we're using an old version of TeX, don't do anything.
%
\ifx\inputlineno\thisisundefined
  \let\linenumber = \empty % Pre-3.0.
\else
  \def\linenumber{l.\the\inputlineno:\space}
\fi

% Set up fixed words for English if not already set.
\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
%
\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
%
\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi

% Since the category of space is not known, we have to be careful.
\chardef\spacecat = 10
\def\spaceisspace{\catcode`\ =\spacecat}

% sometimes characters are active, so we need control sequences.
\chardef\colonChar = `\:
\chardef\commaChar = `\,
\chardef\dashChar  = `\-
\chardef\dotChar   = `\.
\chardef\exclamChar= `\!
\chardef\lquoteChar= `\`
\chardef\questChar = `\?
\chardef\rquoteChar= `\'
\chardef\semiChar  = `\;
\chardef\underChar = `\_

% Ignore a token.
%
\def\gobble#1{}

% The following is used inside several \edef's.
\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}

% Hyphenation fixes.
\hyphenation{
  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
  ap-pen-dix bit-map bit-maps
  data-base data-bases eshell fall-ing half-way long-est man-u-script
  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
  spell-ing spell-ings
  stand-alone strong-est time-stamp time-stamps which-ever white-space
  wide-spread wrap-around
}

% Margin to add to right of even pages, to left of odd pages.
\newdimen\bindingoffset
\newdimen\normaloffset
\newdimen\pagewidth \newdimen\pageheight

% For a final copy, take out the rectangles
% that mark overfull boxes (in case you have decided
% that the text looks ok even though it passes the margin).
%
\def\finalout{\overfullrule=0pt}

% @| inserts a changebar to the left of the current line.  It should
% surround any changed text.  This approach does *not* work if the
% change spans more than two lines of output.  To handle that, we would
% have adopt a much more difficult approach (putting marks into the main
% vertical list for the beginning and end of each change).
%
\def\|{%
  % \vadjust can only be used in horizontal mode.
  \leavevmode
  %
  % Append this vertical mode material after the current line in the output.
  \vadjust{%
    % We want to insert a rule with the height and depth of the current
    % leading; that is exactly what \strutbox is supposed to record.
    \vskip-\baselineskip
    %
    % \vadjust-items are inserted at the left edge of the type.  So
    % the \llap here moves out into the left-hand margin.
    \llap{%
      %
      % For a thicker or thinner bar, change the `1pt'.
      \vrule height\baselineskip width1pt
      %
      % This is the space between the bar and the text.
      \hskip 12pt
    }%
  }%
}

% Sometimes it is convenient to have everything in the transcript file
% and nothing on the terminal.  We don't just call \tracingall here,
% since that produces some useless output on the terminal.  We also make
% some effort to order the tracing commands to reduce output in the log
% file; cf. trace.sty in LaTeX.
%
\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
\def\loggingall{%
  \tracingstats2
  \tracingpages1
  \tracinglostchars2  % 2 gives us more in etex
  \tracingparagraphs1
  \tracingoutput1
  \tracingmacros2
  \tracingrestores1
  \showboxbreadth\maxdimen \showboxdepth\maxdimen
  \ifx\eTeXversion\undefined\else % etex gives us more logging
    \tracingscantokens1
    \tracingifs1
    \tracinggroups1
    \tracingnesting2
    \tracingassigns1
  \fi
  \tracingcommands3  % 3 gives us more in etex
  \errorcontextlines16
}%

% add check for \lastpenalty to plain's definitions.  If the last thing
% we did was a \nobreak, we don't want to insert more space.
%
\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
  \removelastskip\penalty-50\smallskip\fi\fi}
\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
  \removelastskip\penalty-100\medskip\fi\fi}
\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
  \removelastskip\penalty-200\bigskip\fi\fi}

% For @cropmarks command.
% Do @cropmarks to get crop marks.
%
\newif\ifcropmarks
\let\cropmarks = \cropmarkstrue
%
% Dimensions to add cropmarks at corners.
% Added by P. A. MacKay, 12 Nov. 1986
%
\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
\newdimen\cornerlong  \cornerlong=1pc
\newdimen\cornerthick \cornerthick=.3pt
\newdimen\topandbottommargin \topandbottommargin=.75in

% Output a mark which sets \thischapter, \thissection and \thiscolor.
% We dump everything together because we only have one kind of mark.
% This works because we only use \botmark / \topmark, not \firstmark.
%
% A mark contains a subexpression of the \ifcase ... \fi construct.
% \get*marks macros below extract the needed part using \ifcase.
%
% Another complication is to let the user choose whether \thischapter
% (\thissection) refers to the chapter (section) in effect at the top
% of a page, or that at the bottom of a page.  The solution is
% described on page 260 of The TeXbook.  It involves outputting two
% marks for the sectioning macros, one before the section break, and
% one after.  I won't pretend I can describe this better than DEK...
\def\domark{%
  \toks0=\expandafter{\lastchapterdefs}%
  \toks2=\expandafter{\lastsectiondefs}%
  \toks4=\expandafter{\prevchapterdefs}%
  \toks6=\expandafter{\prevsectiondefs}%
  \toks8=\expandafter{\lastcolordefs}%
  \mark{%
                   \the\toks0 \the\toks2
      \noexpand\or \the\toks4 \the\toks6
    \noexpand\else \the\toks8
  }%
}
% \topmark doesn't work for the very first chapter (after the title
% page or the contents), so we use \firstmark there -- this gets us
% the mark with the chapter defs, unless the user sneaks in, e.g.,
% @setcolor (or @url, or @link, etc.) between @contents and the very
% first @chapter.
\def\gettopheadingmarks{%
  \ifcase0\topmark\fi
  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
}
\def\getbottomheadingmarks{\ifcase1\botmark\fi}
\def\getcolormarks{\ifcase2\topmark\fi}

% Avoid "undefined control sequence" errors.
\def\lastchapterdefs{}
\def\lastsectiondefs{}
\def\prevchapterdefs{}
\def\prevsectiondefs{}
\def\lastcolordefs{}

% Main output routine.
\chardef\PAGE = 255
\output = {\onepageout{\pagecontents\PAGE}}

\newbox\headlinebox
\newbox\footlinebox

% \onepageout takes a vbox as an argument.  Note that \pagecontents
% does insertions, but you have to call it yourself.
\def\onepageout#1{%
  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
  %
  \ifodd\pageno  \advance\hoffset by \bindingoffset
  \else \advance\hoffset by -\bindingoffset\fi
  %
  % Do this outside of the \shipout so @code etc. will be expanded in
  % the headline as they should be, not taken literally (outputting ''code).
  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
  %
  {%
    % Have to do this stuff outside the \shipout because we want it to
    % take effect in \write's, yet the group defined by the \vbox ends
    % before the \shipout runs.
    %
    \indexdummies         % don't expand commands in the output.
    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
               % the page break happens to be in the middle of an example.
               % We don't want .vr (or whatever) entries like this:
               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
               % "\acronym" won't work when it's read back in;
               % it needs to be
               % {\code {{\tt \backslashcurfont }acronym}
    \shipout\vbox{%
      % Do this early so pdf references go to the beginning of the page.
      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
      %
      \ifcropmarks \vbox to \outervsize\bgroup
        \hsize = \outerhsize
        \vskip-\topandbottommargin
        \vtop to0pt{%
          \line{\ewtop\hfil\ewtop}%
          \nointerlineskip
          \line{%
            \vbox{\moveleft\cornerthick\nstop}%
            \hfill
            \vbox{\moveright\cornerthick\nstop}%
          }%
          \vss}%
        \vskip\topandbottommargin
        \line\bgroup
          \hfil % center the page within the outer (page) hsize.
          \ifodd\pageno\hskip\bindingoffset\fi
          \vbox\bgroup
      \fi
      %
      \unvbox\headlinebox
      \pagebody{#1}%
      \ifdim\ht\footlinebox > 0pt
        % Only leave this space if the footline is nonempty.
        % (We lessened \vsize for it in \oddfootingyyy.)
        % The \baselineskip=24pt in plain's \makefootline has no effect.
        \vskip 24pt
        \unvbox\footlinebox
      \fi
      %
      \ifcropmarks
          \egroup % end of \vbox\bgroup
        \hfil\egroup % end of (centering) \line\bgroup
        \vskip\topandbottommargin plus1fill minus1fill
        \boxmaxdepth = \cornerthick
        \vbox to0pt{\vss
          \line{%
            \vbox{\moveleft\cornerthick\nsbot}%
            \hfill
            \vbox{\moveright\cornerthick\nsbot}%
          }%
          \nointerlineskip
          \line{\ewbot\hfil\ewbot}%
        }%
      \egroup % \vbox from first cropmarks clause
      \fi
    }% end of \shipout\vbox
  }% end of group with \indexdummies
  \advancepageno
  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
}

\newinsert\margin \dimen\margin=\maxdimen

\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
{\catcode`\@ =11
\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
% marginal hacks, juha@viisa.uucp (Juha Takala)
\ifvoid\margin\else % marginal info is present
  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
\dimen@=\dp#1\relax \unvbox#1\relax
\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
}

% Here are the rules for the cropmarks.  Note that they are
% offset so that the space between them is truly \outerhsize or \outervsize
% (P. A. MacKay, 12 November, 1986)
%
\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
\def\nstop{\vbox
  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
\def\nsbot{\vbox
  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}

% Parse an argument, then pass it to #1.  The argument is the rest of
% the input line (except we remove a trailing comment).  #1 should be a
% macro which expects an ordinary undelimited TeX argument.
%
\def\parsearg{\parseargusing{}}
\def\parseargusing#1#2{%
  \def\argtorun{#2}%
  \begingroup
    \obeylines
    \spaceisspace
    #1%
    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
}

{\obeylines %
  \gdef\parseargline#1^^M{%
    \endgroup % End of the group started in \parsearg.
    \argremovecomment #1\comment\ArgTerm%
  }%
}

% First remove any @comment, then any @c comment.
\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}

% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
%
% \argremovec might leave us with trailing space, e.g.,
%    @end itemize  @c foo
% This space token undergoes the same procedure and is eventually removed
% by \finishparsearg.
%
\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
  \def\temp{#3}%
  \ifx\temp\empty
    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
    \let\temp\finishparsearg
  \else
    \let\temp\argcheckspaces
  \fi
  % Put the space token in:
  \temp#1 #3\ArgTerm
}

% If a _delimited_ argument is enclosed in braces, they get stripped; so
% to get _exactly_ the rest of the line, we had to prevent such situation.
% We prepended an \empty token at the very beginning and we expand it now,
% just before passing the control to \argtorun.
% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
% either the null string, or it ends with \^^M---thus there is no danger
% that a pair of braces would be stripped.
%
% But first, we have to remove the trailing space token.
%
\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}

% \parseargdef\foo{...}
%	is roughly equivalent to
% \def\foo{\parsearg\Xfoo}
% \def\Xfoo#1{...}
%
% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
% favourite TeX trick.  --kasal, 16nov03

\def\parseargdef#1{%
  \expandafter \doparseargdef \csname\string#1\endcsname #1%
}
\def\doparseargdef#1#2{%
  \def#2{\parsearg#1}%
  \def#1##1%
}

% Several utility definitions with active space:
{
  \obeyspaces
  \gdef\obeyedspace{ }

  % Make each space character in the input produce a normal interword
  % space in the output.  Don't allow a line break at this space, as this
  % is used only in environments like @example, where each line of input
  % should produce a line of output anyway.
  %
  \gdef\sepspaces{\obeyspaces\let =\tie}

  % If an index command is used in an @example environment, any spaces
  % therein should become regular spaces in the raw index file, not the
  % expansion of \tie (\leavevmode \penalty \@M \ ).
  \gdef\unsepspaces{\let =\space}
}


\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}

% Define the framework for environments in texinfo.tex.  It's used like this:
%
%   \envdef\foo{...}
%   \def\Efoo{...}
%
% It's the responsibility of \envdef to insert \begingroup before the
% actual body; @end closes the group after calling \Efoo.  \envdef also
% defines \thisenv, so the current environment is known; @end checks
% whether the environment name matches.  The \checkenv macro can also be
% used to check whether the current environment is the one expected.
%
% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
% are not treated as environments; they don't open a group.  (The
% implementation of @end takes care not to call \endgroup in this
% special case.)


% At run-time, environments start with this:
\def\startenvironment#1{\begingroup\def\thisenv{#1}}
% initialize
\let\thisenv\empty

% ... but they get defined via ``\envdef\foo{...}'':
\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}

% Check whether we're in the right environment:
\def\checkenv#1{%
  \def\temp{#1}%
  \ifx\thisenv\temp
  \else
    \badenverr
  \fi
}

% Environment mismatch, #1 expected:
\def\badenverr{%
  \errhelp = \EMsimple
  \errmessage{This command can appear only \inenvironment\temp,
    not \inenvironment\thisenv}%
}
\def\inenvironment#1{%
  \ifx#1\empty
    out of any environment%
  \else
    in environment \expandafter\string#1%
  \fi
}

% @end foo executes the definition of \Efoo.
% But first, it executes a specialized version of \checkenv
%
\parseargdef\end{%
  \if 1\csname iscond.#1\endcsname
  \else
    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
    \expandafter\checkenv\csname#1\endcsname
    \csname E#1\endcsname
    \endgroup
  \fi
}

\newhelp\EMsimple{Press RETURN to continue.}


%% Simple single-character @ commands

% @@ prints an @
% Kludge this until the fonts are right (grr).
\def\@{{\tt\char64}}

% This is turned off because it was never documented
% and you can use @w{...} around a quote to suppress ligatures.
%% Define @` and @' to be the same as ` and '
%% but suppressing ligatures.
%\def\`{{`}}
%\def\'{{'}}

% Used to generate quoted braces.
\def\mylbrace {{\tt\char123}}
\def\myrbrace {{\tt\char125}}
\let\{=\mylbrace
\let\}=\myrbrace
\begingroup
  % Definitions to produce \{ and \} commands for indices,
  % and @{ and @} for the aux/toc files.
  \catcode`\{ = \other \catcode`\} = \other
  \catcode`\[ = 1 \catcode`\] = 2
  \catcode`\! = 0 \catcode`\\ = \other
  !gdef!lbracecmd[\{]%
  !gdef!rbracecmd[\}]%
  !gdef!lbraceatcmd[@{]%
  !gdef!rbraceatcmd[@}]%
!endgroup

% @comma{} to avoid , parsing problems.
\let\comma = ,

% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
\let\, = \c
\let\dotaccent = \.
\def\ringaccent#1{{\accent23 #1}}
\let\tieaccent = \t
\let\ubaraccent = \b
\let\udotaccent = \d

% Other special characters: @questiondown @exclamdown @ordf @ordm
% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
\def\questiondown{?`}
\def\exclamdown{!`}
\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}

% Dotless i and dotless j, used for accents.
\def\imacro{i}
\def\jmacro{j}
\def\dotless#1{%
  \def\temp{#1}%
  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
  \else \errmessage{@dotless can be used only with i or j}%
  \fi\fi
}

% The \TeX{} logo, as in plain, but resetting the spacing so that a
% period following counts as ending a sentence.  (Idea found in latex.)
%
\edef\TeX{\TeX \spacefactor=1000 }

% @LaTeX{} logo.  Not quite the same results as the definition in
% latex.ltx, since we use a different font for the raised A; it's most
% convenient for us to use an explicitly smaller font, rather than using
% the \scriptstyle font (since we don't reset \scriptstyle and
% \scriptscriptstyle).
%
\def\LaTeX{%
  L\kern-.36em
  {\setbox0=\hbox{T}%
   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
  \kern-.15em
  \TeX
}

% Be sure we're in horizontal mode when doing a tie, since we make space
% equivalent to this in @example-like environments. Otherwise, a space
% at the beginning of a line will start with \penalty -- and
% since \penalty is valid in vertical mode, we'd end up putting the
% penalty on the vertical list instead of in the new paragraph.
{\catcode`@ = 11
 % Avoid using \@M directly, because that causes trouble
 % if the definition is written into an index file.
 \global\let\tiepenalty = \@M
 \gdef\tie{\leavevmode\penalty\tiepenalty\ }
}

% @: forces normal size whitespace following.
\def\:{\spacefactor=1000 }

% @* forces a line break.
\def\*{\hfil\break\hbox{}\ignorespaces}

% @/ allows a line break.
\let\/=\allowbreak

% @. is an end-of-sentence period.
\def\.{.\spacefactor=\endofsentencespacefactor\space}

% @! is an end-of-sentence bang.
\def\!{!\spacefactor=\endofsentencespacefactor\space}

% @? is an end-of-sentence query.
\def\?{?\spacefactor=\endofsentencespacefactor\space}

% @frenchspacing on|off  says whether to put extra space after punctuation.
%
\def\onword{on}
\def\offword{off}
%
\parseargdef\frenchspacing{%
  \def\temp{#1}%
  \ifx\temp\onword \plainfrenchspacing
  \else\ifx\temp\offword \plainnonfrenchspacing
  \else
    \errhelp = \EMsimple
    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
  \fi\fi
}

% @w prevents a word break.  Without the \leavevmode, @w at the
% beginning of a paragraph, when TeX is still in vertical mode, would
% produce a whole line of output instead of starting the paragraph.
\def\w#1{\leavevmode\hbox{#1}}

% @group ... @end group forces ... to be all on one page, by enclosing
% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
% to keep its height that of a normal line.  According to the rules for
% \topskip (p.114 of the TeXbook), the glue inserted is
% max (\topskip - \ht (first item), 0).  If that height is large,
% therefore, no glue is inserted, and the space between the headline and
% the text is small, which looks bad.
%
% Another complication is that the group might be very large.  This can
% cause the glue on the previous page to be unduly stretched, because it
% does not have much material.  In this case, it's better to add an
% explicit \vfill so that the extra space is at the bottom.  The
% threshold for doing this is if the group is more than \vfilllimit
% percent of a page (\vfilllimit can be changed inside of @tex).
%
\newbox\groupbox
\def\vfilllimit{0.7}
%
\envdef\group{%
  \ifnum\catcode`\^^M=\active \else
    \errhelp = \groupinvalidhelp
    \errmessage{@group invalid in context where filling is enabled}%
  \fi
  \startsavinginserts
  %
  \setbox\groupbox = \vtop\bgroup
    % Do @comment since we are called inside an environment such as
    % @example, where each end-of-line in the input causes an
    % end-of-line in the output.  We don't want the end-of-line after
    % the `@group' to put extra space in the output.  Since @group
    % should appear on a line by itself (according to the Texinfo
    % manual), we don't worry about eating any user text.
    \comment
}
%
% The \vtop produces a box with normal height and large depth; thus, TeX puts
% \baselineskip glue before it, and (when the next line of text is done)
% \lineskip glue after it.  Thus, space below is not quite equal to space
% above.  But it's pretty close.
\def\Egroup{%
    % To get correct interline space between the last line of the group
    % and the first line afterwards, we have to propagate \prevdepth.
    \endgraf % Not \par, as it may have been set to \lisppar.
    \global\dimen1 = \prevdepth
  \egroup           % End the \vtop.
  % \dimen0 is the vertical size of the group's box.
  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
  % \dimen2 is how much space is left on the page (more or less).
  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
  % if the group doesn't fit on the current page, and it's a big big
  % group, force a page break.
  \ifdim \dimen0 > \dimen2
    \ifdim \pagetotal < \vfilllimit\pageheight
      \page
    \fi
  \fi
  \box\groupbox
  \prevdepth = \dimen1
  \checkinserts
}
%
% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
% message, so this ends up printing `@group can only ...'.
%
\newhelp\groupinvalidhelp{%
group can only be used in environments such as @example,^^J%
where each line of input produces a line of output.}

% @need space-in-mils
% forces a page break if there is not space-in-mils remaining.

\newdimen\mil  \mil=0.001in

% Old definition--didn't work.
%\parseargdef\need{\par %
%% This method tries to make TeX break the page naturally
%% if the depth of the box does not fit.
%{\baselineskip=0pt%
%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
%\prevdepth=-1000pt
%}}

\parseargdef\need{%
  % Ensure vertical mode, so we don't make a big box in the middle of a
  % paragraph.
  \par
  %
  % If the @need value is less than one line space, it's useless.
  \dimen0 = #1\mil
  \dimen2 = \ht\strutbox
  \advance\dimen2 by \dp\strutbox
  \ifdim\dimen0 > \dimen2
    %
    % Do a \strut just to make the height of this box be normal, so the
    % normal leading is inserted relative to the preceding line.
    % And a page break here is fine.
    \vtop to #1\mil{\strut\vfil}%
    %
    % TeX does not even consider page breaks if a penalty added to the
    % main vertical list is 10000 or more.  But in order to see if the
    % empty box we just added fits on the page, we must make it consider
    % page breaks.  On the other hand, we don't want to actually break the
    % page after the empty box.  So we use a penalty of 9999.
    %
    % There is an extremely small chance that TeX will actually break the
    % page at this \penalty, if there are no other feasible breakpoints in
    % sight.  (If the user is using lots of big @group commands, which
    % almost-but-not-quite fill up a page, TeX will have a hard time doing
    % good page breaking, for example.)  However, I could not construct an
    % example where a page broke at this \penalty; if it happens in a real
    % document, then we can reconsider our strategy.
    \penalty9999
    %
    % Back up by the size of the box, whether we did a page break or not.
    \kern -#1\mil
    %
    % Do not allow a page break right after this kern.
    \nobreak
  \fi
}

% @br   forces paragraph break (and is undocumented).

\let\br = \par

% @page forces the start of a new page.
%
\def\page{\par\vfill\supereject}

% @exdent text....
% outputs text on separate line in roman font, starting at standard page margin

% This records the amount of indent in the innermost environment.
% That's how much \exdent should take out.
\newskip\exdentamount

% This defn is used inside fill environments such as @defun.
\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}

% This defn is used inside nofill environments such as @example.
\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
  \leftline{\hskip\leftskip{\rm#1}}}}

% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
% paragraph.  For more general purposes, use the \margin insertion
% class.  WHICH is `l' or `r'.
%
\newskip\inmarginspacing \inmarginspacing=1cm
\def\strutdepth{\dp\strutbox}
%
\def\doinmargin#1#2{\strut\vadjust{%
  \nobreak
  \kern-\strutdepth
  \vtop to \strutdepth{%
    \baselineskip=\strutdepth
    \vss
    % if you have multiple lines of stuff to put here, you'll need to
    % make the vbox yourself of the appropriate size.
    \ifx#1l%
      \llap{\ignorespaces #2\hskip\inmarginspacing}%
    \else
      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
    \fi
    \null
  }%
}}
\def\inleftmargin{\doinmargin l}
\def\inrightmargin{\doinmargin r}
%
% @inmargin{TEXT [, RIGHT-TEXT]}
% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
% else use TEXT for both).
%
\def\inmargin#1{\parseinmargin #1,,\finish}
\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
  \setbox0 = \hbox{\ignorespaces #2}%
  \ifdim\wd0 > 0pt
    \def\lefttext{#1}%  have both texts
    \def\righttext{#2}%
  \else
    \def\lefttext{#1}%  have only one text
    \def\righttext{#1}%
  \fi
  %
  \ifodd\pageno
    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
  \else
    \def\temp{\inleftmargin\lefttext}%
  \fi
  \temp
}

% @include FILE -- \input text of FILE.
%
\def\include{\parseargusing\filenamecatcodes\includezzz}
\def\includezzz#1{%
  \pushthisfilestack
  \def\thisfile{#1}%
  {%
    \makevalueexpandable  % we want to expand any @value in FILE.
    \turnoffactive        % and allow special characters in the expansion
    \indexnofonts         % Allow `@@' and other weird things in file names.
    \edef\temp{\noexpand\input #1 }%
    %
    % This trickery is to read FILE outside of a group, in case it makes
    % definitions, etc.
    \expandafter
  }\temp
  \popthisfilestack
}
\def\filenamecatcodes{%
  \catcode`\\=\other
  \catcode`~=\other
  \catcode`^=\other
  \catcode`_=\other
  \catcode`|=\other
  \catcode`<=\other
  \catcode`>=\other
  \catcode`+=\other
  \catcode`-=\other
  \catcode`\`=\other
  \catcode`\'=\other
}

\def\pushthisfilestack{%
  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
}
\def\pushthisfilestackX{%
  \expandafter\pushthisfilestackY\thisfile\StackTerm
}
\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
}

\def\popthisfilestack{\errthisfilestackempty}
\def\errthisfilestackempty{\errmessage{Internal error:
  the stack of filenames is empty.}}

\def\thisfile{}

% @center line
% outputs that line, centered.
%
\parseargdef\center{%
  \ifhmode
    \let\next\centerH
  \else
    \let\next\centerV
  \fi
  \next{\hfil \ignorespaces#1\unskip \hfil}%
}
\def\centerH#1{%
  {%
    \hfil\break
    \advance\hsize by -\leftskip
    \advance\hsize by -\rightskip
    \line{#1}%
    \break
  }%
}
\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}

% @sp n   outputs n lines of vertical space

\parseargdef\sp{\vskip #1\baselineskip}

% @comment ...line which is ignored...
% @c is the same as @comment
% @ignore ... @end ignore  is another way to write a comment

\def\comment{\begingroup \catcode`\^^M=\other%
\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
\commentxxx}
{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}

\let\c=\comment

% @paragraphindent NCHARS
% We'll use ems for NCHARS, close enough.
% NCHARS can also be the word `asis' or `none'.
% We cannot feasibly implement @paragraphindent asis, though.
%
\def\asisword{asis} % no translation, these are keywords
\def\noneword{none}
%
\parseargdef\paragraphindent{%
  \def\temp{#1}%
  \ifx\temp\asisword
  \else
    \ifx\temp\noneword
      \defaultparindent = 0pt
    \else
      \defaultparindent = #1em
    \fi
  \fi
  \parindent = \defaultparindent
}

% @exampleindent NCHARS
% We'll use ems for NCHARS like @paragraphindent.
% It seems @exampleindent asis isn't necessary, but
% I preserve it to make it similar to @paragraphindent.
\parseargdef\exampleindent{%
  \def\temp{#1}%
  \ifx\temp\asisword
  \else
    \ifx\temp\noneword
      \lispnarrowing = 0pt
    \else
      \lispnarrowing = #1em
    \fi
  \fi
}

% @firstparagraphindent WORD
% If WORD is `none', then suppress indentation of the first paragraph
% after a section heading.  If WORD is `insert', then do indent at such
% paragraphs.
%
% The paragraph indentation is suppressed or not by calling
% \suppressfirstparagraphindent, which the sectioning commands do.
% We switch the definition of this back and forth according to WORD.
% By default, we suppress indentation.
%
\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
\def\insertword{insert}
%
\parseargdef\firstparagraphindent{%
  \def\temp{#1}%
  \ifx\temp\noneword
    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
  \else\ifx\temp\insertword
    \let\suppressfirstparagraphindent = \relax
  \else
    \errhelp = \EMsimple
    \errmessage{Unknown @firstparagraphindent option `\temp'}%
  \fi\fi
}

% Here is how we actually suppress indentation.  Redefine \everypar to
% \kern backwards by \parindent, and then reset itself to empty.
%
% We also make \indent itself not actually do anything until the next
% paragraph.
%
\gdef\dosuppressfirstparagraphindent{%
  \gdef\indent{%
    \restorefirstparagraphindent
    \indent
  }%
  \gdef\noindent{%
    \restorefirstparagraphindent
    \noindent
  }%
  \global\everypar = {%
    \kern -\parindent
    \restorefirstparagraphindent
  }%
}

\gdef\restorefirstparagraphindent{%
  \global \let \indent = \ptexindent
  \global \let \noindent = \ptexnoindent
  \global \everypar = {}%
}


% @asis just yields its argument.  Used with @table, for example.
%
\def\asis#1{#1}

% @math outputs its argument in math mode.
%
% One complication: _ usually means subscripts, but it could also mean
% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
% _ active, and distinguish by seeing if the current family is \slfam,
% which is what @var uses.
{
  \catcode`\_ = \active
  \gdef\mathunderscore{%
    \catcode`\_=\active
    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
  }
}
% Another complication: we want \\ (and @\) to output a \ character.
% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
% this is not advertised and we don't care.  Texinfo does not
% otherwise define @\.
%
% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
%
\def\math{%
  \tex
  \mathunderscore
  \let\\ = \mathbackslash
  \mathactive
  % make the texinfo accent commands work in math mode
  \let\"=\ddot
  \let\'=\acute
  \let\==\bar
  \let\^=\hat
  \let\`=\grave
  \let\u=\breve
  \let\v=\check
  \let\~=\tilde
  \let\dotaccent=\dot
  $\finishmath
}
\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.

% Some active characters (such as <) are spaced differently in math.
% We have to reset their definitions in case the @math was an argument
% to a command which sets the catcodes (such as @item or @section).
%
{
  \catcode`^ = \active
  \catcode`< = \active
  \catcode`> = \active
  \catcode`+ = \active
  \catcode`' = \active
  \gdef\mathactive{%
    \let^ = \ptexhat
    \let< = \ptexless
    \let> = \ptexgtr
    \let+ = \ptexplus
    \let' = \ptexquoteright
  }
}

% Some math mode symbols.
\def\bullet{$\ptexbullet$}
\def\geq{\ifmmode \ge\else $\ge$\fi}
\def\leq{\ifmmode \le\else $\le$\fi}
\def\minus{\ifmmode -\else $-$\fi}

% @dots{} outputs an ellipsis using the current font.
% We do .5em per period so that it has the same spacing in the cm
% typewriter fonts as three actual period characters; on the other hand,
% in other typewriter fonts three periods are wider than 1.5em.  So do
% whichever is larger.
%
\def\dots{%
  \leavevmode
  \setbox0=\hbox{...}% get width of three periods
  \ifdim\wd0 > 1.5em
    \dimen0 = \wd0
  \else
    \dimen0 = 1.5em
  \fi
  \hbox to \dimen0{%
    \hskip 0pt plus.25fil
    .\hskip 0pt plus1fil
    .\hskip 0pt plus1fil
    .\hskip 0pt plus.5fil
  }%
}

% @enddots{} is an end-of-sentence ellipsis.
%
\def\enddots{%
  \dots
  \spacefactor=\endofsentencespacefactor
}

% @comma{} is so commas can be inserted into text without messing up
% Texinfo's parsing.
%
\let\comma = ,

% @refill is a no-op.
\let\refill=\relax

% If working on a large document in chapters, it is convenient to
% be able to disable indexing, cross-referencing, and contents, for test runs.
% This is done with @novalidate (before @setfilename).
%
\newif\iflinks \linkstrue % by default we want the aux files.
\let\novalidate = \linksfalse

% @setfilename is done at the beginning of every texinfo file.
% So open here the files we need to have open while reading the input.
% This makes it possible to make a .fmt file for texinfo.
\def\setfilename{%
   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
   \iflinks
     \tryauxfile
     % Open the new aux file.  TeX will close it automatically at exit.
     \immediate\openout\auxfile=\jobname.aux
   \fi % \openindices needs to do some work in any case.
   \openindices
   \let\setfilename=\comment % Ignore extra @setfilename cmds.
   %
   % If texinfo.cnf is present on the system, read it.
   % Useful for site-wide @afourpaper, etc.
   \openin 1 texinfo.cnf
   \ifeof 1 \else \input texinfo.cnf \fi
   \closein 1
   %
   \comment % Ignore the actual filename.
}

% Called from \setfilename.
%
\def\openindices{%
  \newindex{cp}%
  \newcodeindex{fn}%
  \newcodeindex{vr}%
  \newcodeindex{tp}%
  \newcodeindex{ky}%
  \newcodeindex{pg}%
}

% @bye.
\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}


\message{pdf,}
% adobe `portable' document format
\newcount\tempnum
\newcount\lnkcount
\newtoks\filename
\newcount\filenamelength
\newcount\pgn
\newtoks\toksA
\newtoks\toksB
\newtoks\toksC
\newtoks\toksD
\newbox\boxA
\newcount\countA
\newif\ifpdf
\newif\ifpdfmakepagedest

% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
% can be set).  So we test for \relax and 0 as well as \undefined,
% borrowed from ifpdf.sty.
\ifx\pdfoutput\undefined
\else
  \ifx\pdfoutput\relax
  \else
    \ifcase\pdfoutput
    \else
      \pdftrue
    \fi
  \fi
\fi

% PDF uses PostScript string constants for the names of xref targets,
% for display in the outlines, and in other places.  Thus, we have to
% double any backslashes.  Otherwise, a name like "\node" will be
% interpreted as a newline (\n), followed by o, d, e.  Not good.
% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
% (and related messages, the final outcome is that it is up to the TeX
% user to double the backslashes and otherwise make the string valid, so
% that's what we do).

% double active backslashes.
%
{\catcode`\@=0 \catcode`\\=\active
 @gdef@activebackslashdouble{%
   @catcode`@\=@active
   @let\=@doublebackslash}
}

% To handle parens, we must adopt a different approach, since parens are
% not active characters.  hyperref.dtx (which has the same problem as
% us) handles it with this amazing macro to replace tokens, with minor
% changes for Texinfo.  It is included here under the GPL by permission
% from the author, Heiko Oberdiek.
%
% #1 is the tokens to replace.
% #2 is the replacement.
% #3 is the control sequence with the string.
%
\def\HyPsdSubst#1#2#3{%
  \def\HyPsdReplace##1#1##2\END{%
    ##1%
    \ifx\\##2\\%
    \else
      #2%
      \HyReturnAfterFi{%
        \HyPsdReplace##2\END
      }%
    \fi
  }%
  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
}
\long\def\HyReturnAfterFi#1\fi{\fi#1}

% #1 is a control sequence in which to do the replacements.
\def\backslashparens#1{%
  \xdef#1{#1}% redefine it as its expansion; the definition is simply
             % \lastnode when called from \setref -> \pdfmkdest.
  \HyPsdSubst{(}{\realbackslash(}{#1}%
  \HyPsdSubst{)}{\realbackslash)}{#1}%
}

\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
with PDF output, and none of those formats could be found.  (.eps cannot
be supported due to the design of the PDF format; use regular TeX (DVI
output) for that.)}

\ifpdf
  %
  % Color manipulation macros based on pdfcolor.tex,
  % except using rgb instead of cmyk; the latter is said to render as a
  % very dark gray on-screen and a very dark halftone in print, instead
  % of actual black.
  \def\rgbDarkRed{0.50 0.09 0.12}
  \def\rgbBlack{0 0 0}
  %
  % k sets the color for filling (usual text, etc.);
  % K sets the color for stroking (thin rules, e.g., normal _'s).
  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
  %
  % Set color, and create a mark which defines \thiscolor accordingly,
  % so that \makeheadline knows which color to restore.
  \def\setcolor#1{%
    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
    \domark
    \pdfsetcolor{#1}%
  }
  %
  \def\maincolor{\rgbBlack}
  \pdfsetcolor{\maincolor}
  \edef\thiscolor{\maincolor}
  \def\lastcolordefs{}
  %
  \def\makefootline{%
    \baselineskip24pt
    \line{\pdfsetcolor{\maincolor}\the\footline}%
  }
  %
  \def\makeheadline{%
    \vbox to 0pt{%
      \vskip-22.5pt
      \line{%
        \vbox to8.5pt{}%
        % Extract \thiscolor definition from the marks.
        \getcolormarks
        % Typeset the headline with \maincolor, then restore the color.
        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
      }%
      \vss
    }%
    \nointerlineskip
  }
  %
  %
  \pdfcatalog{/PageMode /UseOutlines}
  %
  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
  \def\dopdfimage#1#2#3{%
    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
    %
    % pdftex (and the PDF format) support .png, .jpg, .pdf (among
    % others).  Let's try in that order.
    \let\pdfimgext=\empty
    \begingroup
      \openin 1 #1.png \ifeof 1
        \openin 1 #1.jpg \ifeof 1
          \openin 1 #1.jpeg \ifeof 1
            \openin 1 #1.JPG \ifeof 1
              \openin 1 #1.pdf \ifeof 1
                \openin 1 #1.PDF \ifeof 1
                  \errhelp = \nopdfimagehelp
                  \errmessage{Could not find image file #1 for pdf}%
                \else \gdef\pdfimgext{PDF}%
                \fi
              \else \gdef\pdfimgext{pdf}%
              \fi
            \else \gdef\pdfimgext{JPG}%
            \fi
          \else \gdef\pdfimgext{jpeg}%
          \fi
        \else \gdef\pdfimgext{jpg}%
        \fi
      \else \gdef\pdfimgext{png}%
      \fi
      \closein 1
    \endgroup
    %
    % without \immediate, ancient pdftex seg faults when the same image is
    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
    \ifnum\pdftexversion < 14
      \immediate\pdfimage
    \else
      \immediate\pdfximage
    \fi
      \ifdim \wd0 >0pt width \imagewidth \fi
      \ifdim \wd2 >0pt height \imageheight \fi
      \ifnum\pdftexversion<13
         #1.\pdfimgext
       \else
         {#1.\pdfimgext}%
       \fi
    \ifnum\pdftexversion < 14 \else
      \pdfrefximage \pdflastximage
    \fi}
  %
  \def\pdfmkdest#1{{%
    % We have to set dummies so commands such as @code, and characters
    % such as \, aren't expanded when present in a section title.
    \indexnofonts
    \turnoffactive
    \activebackslashdouble
    \makevalueexpandable
    \def\pdfdestname{#1}%
    \backslashparens\pdfdestname
    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
  }}
  %
  % used to mark target names; must be expandable.
  \def\pdfmkpgn#1{#1}
  %
  % by default, use a color that is dark enough to print on paper as
  % nearly black, but still distinguishable for online viewing.
  \def\urlcolor{\rgbDarkRed}
  \def\linkcolor{\rgbDarkRed}
  \def\endlink{\setcolor{\maincolor}\pdfendlink}
  %
  % Adding outlines to PDF; macros for calculating structure of outlines
  % come from Petr Olsak
  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
    \else \csname#1\endcsname \fi}
  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
    \advance\tempnum by 1
    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
  %
  % #1 is the section text, which is what will be displayed in the
  % outline by the pdf viewer.  #2 is the pdf expression for the number
  % of subentries (or empty, for subsubsections).  #3 is the node text,
  % which might be empty if this toc entry had no corresponding node.
  % #4 is the page number
  %
  \def\dopdfoutline#1#2#3#4{%
    % Generate a link to the node text if that exists; else, use the
    % page number.  We could generate a destination for the section
    % text in the case where a section has no node, but it doesn't
    % seem worth the trouble, since most documents are normally structured.
    \def\pdfoutlinedest{#3}%
    \ifx\pdfoutlinedest\empty
      \def\pdfoutlinedest{#4}%
    \else
      % Doubled backslashes in the name.
      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
       \backslashparens\pdfoutlinedest}%
    \fi
    %
    % Also double the backslashes in the display string.
    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
     \backslashparens\pdfoutlinetext}%
    %
    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
  }
  %
  \def\pdfmakeoutlines{%
    \begingroup
      % Thanh's hack / proper braces in bookmarks
      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
      %
      % Read toc silently, to get counts of subentries for \pdfoutline.
      \def\numchapentry##1##2##3##4{%
	\def\thischapnum{##2}%
	\def\thissecnum{0}%
	\def\thissubsecnum{0}%
      }%
      \def\numsecentry##1##2##3##4{%
	\advancenumber{chap\thischapnum}%
	\def\thissecnum{##2}%
	\def\thissubsecnum{0}%
      }%
      \def\numsubsecentry##1##2##3##4{%
	\advancenumber{sec\thissecnum}%
	\def\thissubsecnum{##2}%
      }%
      \def\numsubsubsecentry##1##2##3##4{%
	\advancenumber{subsec\thissubsecnum}%
      }%
      \def\thischapnum{0}%
      \def\thissecnum{0}%
      \def\thissubsecnum{0}%
      %
      % use \def rather than \let here because we redefine \chapentry et
      % al. a second time, below.
      \def\appentry{\numchapentry}%
      \def\appsecentry{\numsecentry}%
      \def\appsubsecentry{\numsubsecentry}%
      \def\appsubsubsecentry{\numsubsubsecentry}%
      \def\unnchapentry{\numchapentry}%
      \def\unnsecentry{\numsecentry}%
      \def\unnsubsecentry{\numsubsecentry}%
      \def\unnsubsubsecentry{\numsubsubsecentry}%
      \readdatafile{toc}%
      %
      % Read toc second time, this time actually producing the outlines.
      % The `-' means take the \expnumber as the absolute number of
      % subentries, which we calculated on our first read of the .toc above.
      %
      % We use the node names as the destinations.
      \def\numchapentry##1##2##3##4{%
        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
      \def\numsecentry##1##2##3##4{%
        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
      \def\numsubsecentry##1##2##3##4{%
        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
      \def\numsubsubsecentry##1##2##3##4{% count is always zero
        \dopdfoutline{##1}{}{##3}{##4}}%
      %
      % PDF outlines are displayed using system fonts, instead of
      % document fonts.  Therefore we cannot use special characters,
      % since the encoding is unknown.  For example, the eogonek from
      % Latin 2 (0xea) gets translated to a | character.  Info from
      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
      %
      % xx to do this right, we have to translate 8-bit characters to
      % their "best" equivalent, based on the @documentencoding.  Right
      % now, I guess we'll just let the pdf reader have its way.
      \indexnofonts
      \setupdatafile
      \catcode`\\=\active \otherbackslash
      \input \tocreadfilename
    \endgroup
  }
  %
  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
    \ifx\PP\D\let\nextsp\relax
    \else\let\nextsp\skipspaces
      \ifx\p\space\else\addtokens{\filename}{\PP}%
        \advance\filenamelength by 1
      \fi
    \fi
    \nextsp}
  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
  \ifnum\pdftexversion < 14
    \let \startlink \pdfannotlink
  \else
    \let \startlink \pdfstartlink
  \fi
  % make a live url in pdf output.
  \def\pdfurl#1{%
    \begingroup
      % it seems we really need yet another set of dummies; have not
      % tried to figure out what each command should do in the context
      % of @url.  for now, just make @/ a no-op, that's the only one
      % people have actually reported a problem with.
      %
      \normalturnoffactive
      \def\@{@}%
      \let\/=\empty
      \makevalueexpandable
      % do we want to go so far as to use \indexnofonts instead of just
      % special-casing \var here?
      \def\var##1{##1}%
      %
      \leavevmode\setcolor{\urlcolor}%
      \startlink attr{/Border [0 0 0]}%
        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
    \endgroup}
  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
  \def\maketoks{%
    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
    \ifx\first0\adn0
    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
    \else
      \ifnum0=\countA\else\makelink\fi
      \ifx\first.\let\next=\done\else
        \let\next=\maketoks
        \addtokens{\toksB}{\the\toksD}
        \ifx\first,\addtokens{\toksB}{\space}\fi
      \fi
    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    \next}
  \def\makelink{\addtokens{\toksB}%
    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
  \def\pdflink#1{%
    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
    \setcolor{\linkcolor}#1\endlink}
  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
\else
  % non-pdf mode
  \let\pdfmkdest = \gobble
  \let\pdfurl = \gobble
  \let\endlink = \relax
  \let\setcolor = \gobble
  \let\pdfsetcolor = \gobble
  \let\pdfmakeoutlines = \relax
\fi  % \ifx\pdfoutput


\message{fonts,}

% Change the current font style to #1, remembering it in \curfontstyle.
% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
% italics, not bold italics.
%
\def\setfontstyle#1{%
  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
  \csname ten#1\endcsname  % change the current font
}

% Select #1 fonts with the current style.
%
\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}

\def\rm{\fam=0 \setfontstyle{rm}}
\def\it{\fam=\itfam \setfontstyle{it}}
\def\sl{\fam=\slfam \setfontstyle{sl}}
\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
\def\tt{\fam=\ttfam \setfontstyle{tt}}

% Unfortunately, we have to override this for titles and the like, since
% in those cases "rm" is bold.  Sigh.
\def\rmisbold{\rm\def\curfontstyle{bf}}

% Texinfo sort of supports the sans serif font style, which plain TeX does not.
% So we set up a \sf.
\newfam\sffam
\def\sf{\fam=\sffam \setfontstyle{sf}}
\let\li = \sf % Sometimes we call it \li, not \sf.

% We don't need math for this font style.
\def\ttsl{\setfontstyle{ttsl}}


% Default leading.
\newdimen\textleading  \textleading = 13.2pt

% Set the baselineskip to #1, and the lineskip and strut size
% correspondingly.  There is no deep meaning behind these magic numbers
% used as factors; they just match (closely enough) what Knuth defined.
%
\def\lineskipfactor{.08333}
\def\strutheightpercent{.70833}
\def\strutdepthpercent {.29167}
%
% can get a sort of poor man's double spacing by redefining this.
\def\baselinefactor{1}
%
\def\setleading#1{%
  \dimen0 = #1\relax
  \normalbaselineskip = \baselinefactor\dimen0
  \normallineskip = \lineskipfactor\normalbaselineskip
  \normalbaselines
  \setbox\strutbox =\hbox{%
    \vrule width0pt height\strutheightpercent\baselineskip
                    depth \strutdepthpercent \baselineskip
  }%
}

% PDF CMaps.  See also LaTeX's t1.cmap.
%
% do nothing with this by default.
\expandafter\let\csname cmapOT1\endcsname\gobble
\expandafter\let\csname cmapOT1IT\endcsname\gobble
\expandafter\let\csname cmapOT1TT\endcsname\gobble

% if we are producing pdf, and we have \pdffontattr, then define cmaps.
% (\pdffontattr was introduced many years ago, but people still run
% older pdftex's; it's easy to conditionalize, so we do.)
\ifpdf \ifx\pdffontattr\undefined \else
  \begingroup
    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CMap (TeX-OT1-0)
%%Title: (TeX-OT1-0 TeX OT1 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (TeX)
/Ordering (OT1)
/Supplement 0
>> def
/CMapName /TeX-OT1-0 def
/CMapType 2 def
1 begincodespacerange
<00> <7F>
endcodespacerange
8 beginbfrange
<00> <01> <0393>
<09> <0A> <03A8>
<23> <26> <0023>
<28> <3B> <0028>
<3F> <5B> <003F>
<5D> <5E> <005D>
<61> <7A> <0061>
<7B> <7C> <2013>
endbfrange
40 beginbfchar
<02> <0398>
<03> <039B>
<04> <039E>
<05> <03A0>
<06> <03A3>
<07> <03D2>
<08> <03A6>
<0B> <00660066>
<0C> <00660069>
<0D> <0066006C>
<0E> <006600660069>
<0F> <00660066006C>
<10> <0131>
<11> <0237>
<12> <0060>
<13> <00B4>
<14> <02C7>
<15> <02D8>
<16> <00AF>
<17> <02DA>
<18> <00B8>
<19> <00DF>
<1A> <00E6>
<1B> <0153>
<1C> <00F8>
<1D> <00C6>
<1E> <0152>
<1F> <00D8>
<21> <0021>
<22> <201D>
<27> <2019>
<3C> <00A1>
<3D> <003D>
<3E> <00BF>
<5C> <201C>
<5F> <02D9>
<60> <2018>
<7D> <02DD>
<7E> <007E>
<7F> <00A8>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
%%EndResource
%%EOF
    }\endgroup
  \expandafter\edef\csname cmapOT1\endcsname#1{%
    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
  }%
%
% \cmapOT1IT
  \begingroup
    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CMap (TeX-OT1IT-0)
%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (TeX)
/Ordering (OT1IT)
/Supplement 0
>> def
/CMapName /TeX-OT1IT-0 def
/CMapType 2 def
1 begincodespacerange
<00> <7F>
endcodespacerange
8 beginbfrange
<00> <01> <0393>
<09> <0A> <03A8>
<25> <26> <0025>
<28> <3B> <0028>
<3F> <5B> <003F>
<5D> <5E> <005D>
<61> <7A> <0061>
<7B> <7C> <2013>
endbfrange
42 beginbfchar
<02> <0398>
<03> <039B>
<04> <039E>
<05> <03A0>
<06> <03A3>
<07> <03D2>
<08> <03A6>
<0B> <00660066>
<0C> <00660069>
<0D> <0066006C>
<0E> <006600660069>
<0F> <00660066006C>
<10> <0131>
<11> <0237>
<12> <0060>
<13> <00B4>
<14> <02C7>
<15> <02D8>
<16> <00AF>
<17> <02DA>
<18> <00B8>
<19> <00DF>
<1A> <00E6>
<1B> <0153>
<1C> <00F8>
<1D> <00C6>
<1E> <0152>
<1F> <00D8>
<21> <0021>
<22> <201D>
<23> <0023>
<24> <00A3>
<27> <2019>
<3C> <00A1>
<3D> <003D>
<3E> <00BF>
<5C> <201C>
<5F> <02D9>
<60> <2018>
<7D> <02DD>
<7E> <007E>
<7F> <00A8>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
%%EndResource
%%EOF
    }\endgroup
  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
  }%
%
% \cmapOT1TT
  \begingroup
    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CMap (TeX-OT1TT-0)
%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (TeX)
/Ordering (OT1TT)
/Supplement 0
>> def
/CMapName /TeX-OT1TT-0 def
/CMapType 2 def
1 begincodespacerange
<00> <7F>
endcodespacerange
5 beginbfrange
<00> <01> <0393>
<09> <0A> <03A8>
<21> <26> <0021>
<28> <5F> <0028>
<61> <7E> <0061>
endbfrange
32 beginbfchar
<02> <0398>
<03> <039B>
<04> <039E>
<05> <03A0>
<06> <03A3>
<07> <03D2>
<08> <03A6>
<0B> <2191>
<0C> <2193>
<0D> <0027>
<0E> <00A1>
<0F> <00BF>
<10> <0131>
<11> <0237>
<12> <0060>
<13> <00B4>
<14> <02C7>
<15> <02D8>
<16> <00AF>
<17> <02DA>
<18> <00B8>
<19> <00DF>
<1A> <00E6>
<1B> <0153>
<1C> <00F8>
<1D> <00C6>
<1E> <0152>
<1F> <00D8>
<20> <2423>
<27> <2019>
<60> <2018>
<7F> <00A8>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
%%EndResource
%%EOF
    }\endgroup
  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
  }%
\fi\fi


% Set the font macro #1 to the font named #2, adding on the
% specified font prefix (normally `cm').
% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
% empty to omit).
\def\setfont#1#2#3#4#5{%
  \font#1=\fontprefix#2#3 scaled #4
  \csname cmap#5\endcsname#1%
}
% This is what gets called when #5 of \setfont is empty.
\let\cmap\gobble
% emacs-page end of cmaps

% Use cm as the default font prefix.
% To specify the font prefix, you must define \fontprefix
% before you read in texinfo.tex.
\ifx\fontprefix\undefined
\def\fontprefix{cm}
\fi
% Support font families that don't use the same naming scheme as CM.
\def\rmshape{r}
\def\rmbshape{bx}               %where the normal face is bold
\def\bfshape{b}
\def\bxshape{bx}
\def\ttshape{tt}
\def\ttbshape{tt}
\def\ttslshape{sltt}
\def\itshape{ti}
\def\itbshape{bxti}
\def\slshape{sl}
\def\slbshape{bxsl}
\def\sfshape{ss}
\def\sfbshape{ss}
\def\scshape{csc}
\def\scbshape{csc}

% Definitions for a main text size of 11pt.  This is the default in
% Texinfo.
%
\def\definetextfontsizexi{%
% Text fonts (11.2pt, magstep1).
\def\textnominalsize{11pt}
\edef\mainmagstep{\magstephalf}
\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
\font\texti=cmmi10 scaled \mainmagstep
\font\textsy=cmsy10 scaled \mainmagstep
\def\textecsize{1095}

% A few fonts for @defun names and args.
\setfont\defbf\bfshape{10}{\magstep1}{OT1}
\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}

% Fonts for indices, footnotes, small examples (9pt).
\def\smallnominalsize{9pt}
\setfont\smallrm\rmshape{9}{1000}{OT1}
\setfont\smalltt\ttshape{9}{1000}{OT1TT}
\setfont\smallbf\bfshape{10}{900}{OT1}
\setfont\smallit\itshape{9}{1000}{OT1IT}
\setfont\smallsl\slshape{9}{1000}{OT1}
\setfont\smallsf\sfshape{9}{1000}{OT1}
\setfont\smallsc\scshape{10}{900}{OT1}
\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
\font\smalli=cmmi9
\font\smallsy=cmsy9
\def\smallecsize{0900}

% Fonts for small examples (8pt).
\def\smallernominalsize{8pt}
\setfont\smallerrm\rmshape{8}{1000}{OT1}
\setfont\smallertt\ttshape{8}{1000}{OT1TT}
\setfont\smallerbf\bfshape{10}{800}{OT1}
\setfont\smallerit\itshape{8}{1000}{OT1IT}
\setfont\smallersl\slshape{8}{1000}{OT1}
\setfont\smallersf\sfshape{8}{1000}{OT1}
\setfont\smallersc\scshape{10}{800}{OT1}
\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
\font\smalleri=cmmi8
\font\smallersy=cmsy8
\def\smallerecsize{0800}

% Fonts for title page (20.4pt):
\def\titlenominalsize{20pt}
\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
\let\titlebf=\titlerm
\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
\font\titlei=cmmi12 scaled \magstep3
\font\titlesy=cmsy10 scaled \magstep4
\def\titleecsize{2074}

% Chapter (and unnumbered) fonts (17.28pt).
\def\chapnominalsize{17pt}
\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
\setfont\chapsf\sfbshape{17}{1000}{OT1}
\let\chapbf=\chaprm
\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
\font\chapi=cmmi12 scaled \magstep2
\font\chapsy=cmsy10 scaled \magstep3
\def\chapecsize{1728}

% Section fonts (14.4pt).
\def\secnominalsize{14pt}
\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
\setfont\secsl\slbshape{10}{\magstep2}{OT1}
\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
\let\secbf\secrm
\setfont\secsc\scbshape{10}{\magstep2}{OT1}
\font\seci=cmmi12 scaled \magstep1
\font\secsy=cmsy10 scaled \magstep2
\def\sececsize{1440}

% Subsection fonts (13.15pt).
\def\ssecnominalsize{13pt}
\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
\setfont\ssecit\itbshape{10}{1315}{OT1IT}
\setfont\ssecsl\slbshape{10}{1315}{OT1}
\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
\let\ssecbf\ssecrm
\setfont\ssecsc\scbshape{10}{1315}{OT1}
\font\sseci=cmmi12 scaled \magstephalf
\font\ssecsy=cmsy10 scaled 1315
\def\ssececsize{1200}

% Reduced fonts for @acro in text (10pt).
\def\reducednominalsize{10pt}
\setfont\reducedrm\rmshape{10}{1000}{OT1}
\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
\setfont\reducedbf\bfshape{10}{1000}{OT1}
\setfont\reducedit\itshape{10}{1000}{OT1IT}
\setfont\reducedsl\slshape{10}{1000}{OT1}
\setfont\reducedsf\sfshape{10}{1000}{OT1}
\setfont\reducedsc\scshape{10}{1000}{OT1}
\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
\font\reducedi=cmmi10
\font\reducedsy=cmsy10
\def\reducedecsize{1000}

% reset the current fonts
\textfonts
\rm
} % end of 11pt text font size definitions


% Definitions to make the main text be 10pt Computer Modern, with
% section, chapter, etc., sizes following suit.  This is for the GNU
% Press printing of the Emacs 22 manual.  Maybe other manuals in the
% future.  Used with @smallbook, which sets the leading to 12pt.
%
\def\definetextfontsizex{%
% Text fonts (10pt).
\def\textnominalsize{10pt}
\edef\mainmagstep{1000}
\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
\font\texti=cmmi10 scaled \mainmagstep
\font\textsy=cmsy10 scaled \mainmagstep
\def\textecsize{1000}

% A few fonts for @defun names and args.
\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}

% Fonts for indices, footnotes, small examples (9pt).
\def\smallnominalsize{9pt}
\setfont\smallrm\rmshape{9}{1000}{OT1}
\setfont\smalltt\ttshape{9}{1000}{OT1TT}
\setfont\smallbf\bfshape{10}{900}{OT1}
\setfont\smallit\itshape{9}{1000}{OT1IT}
\setfont\smallsl\slshape{9}{1000}{OT1}
\setfont\smallsf\sfshape{9}{1000}{OT1}
\setfont\smallsc\scshape{10}{900}{OT1}
\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
\font\smalli=cmmi9
\font\smallsy=cmsy9
\def\smallecsize{0900}

% Fonts for small examples (8pt).
\def\smallernominalsize{8pt}
\setfont\smallerrm\rmshape{8}{1000}{OT1}
\setfont\smallertt\ttshape{8}{1000}{OT1TT}
\setfont\smallerbf\bfshape{10}{800}{OT1}
\setfont\smallerit\itshape{8}{1000}{OT1IT}
\setfont\smallersl\slshape{8}{1000}{OT1}
\setfont\smallersf\sfshape{8}{1000}{OT1}
\setfont\smallersc\scshape{10}{800}{OT1}
\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
\font\smalleri=cmmi8
\font\smallersy=cmsy8
\def\smallerecsize{0800}

% Fonts for title page (20.4pt):
\def\titlenominalsize{20pt}
\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
\let\titlebf=\titlerm
\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
\font\titlei=cmmi12 scaled \magstep3
\font\titlesy=cmsy10 scaled \magstep4
\def\titleecsize{2074}

% Chapter fonts (14.4pt).
\def\chapnominalsize{14pt}
\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
\let\chapbf\chaprm
\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
\font\chapi=cmmi12 scaled \magstep1
\font\chapsy=cmsy10 scaled \magstep2
\def\chapecsize{1440}

% Section fonts (12pt).
\def\secnominalsize{12pt}
\setfont\secrm\rmbshape{12}{1000}{OT1}
\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
\setfont\secsl\slbshape{10}{\magstep1}{OT1}
\setfont\sectt\ttbshape{12}{1000}{OT1TT}
\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
\setfont\secsf\sfbshape{12}{1000}{OT1}
\let\secbf\secrm
\setfont\secsc\scbshape{10}{\magstep1}{OT1}
\font\seci=cmmi12
\font\secsy=cmsy10 scaled \magstep1
\def\sececsize{1200}

% Subsection fonts (10pt).
\def\ssecnominalsize{10pt}
\setfont\ssecrm\rmbshape{10}{1000}{OT1}
\setfont\ssecit\itbshape{10}{1000}{OT1IT}
\setfont\ssecsl\slbshape{10}{1000}{OT1}
\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
\setfont\ssecsf\sfbshape{10}{1000}{OT1}
\let\ssecbf\ssecrm
\setfont\ssecsc\scbshape{10}{1000}{OT1}
\font\sseci=cmmi10
\font\ssecsy=cmsy10
\def\ssececsize{1000}

% Reduced fonts for @acro in text (9pt).
\def\reducednominalsize{9pt}
\setfont\reducedrm\rmshape{9}{1000}{OT1}
\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
\setfont\reducedbf\bfshape{10}{900}{OT1}
\setfont\reducedit\itshape{9}{1000}{OT1IT}
\setfont\reducedsl\slshape{9}{1000}{OT1}
\setfont\reducedsf\sfshape{9}{1000}{OT1}
\setfont\reducedsc\scshape{10}{900}{OT1}
\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
\font\reducedi=cmmi9
\font\reducedsy=cmsy9
\def\reducedecsize{0900}

% reduce space between paragraphs
\divide\parskip by 2

% reset the current fonts
\textfonts
\rm
} % end of 10pt text font size definitions


% We provide the user-level command
%   @fonttextsize 10
% (or 11) to redefine the text font size.  pt is assumed.
%
\def\xword{10}
\def\xiword{11}
%
\parseargdef\fonttextsize{%
  \def\textsizearg{#1}%
  \wlog{doing @fonttextsize \textsizearg}%
  %
  % Set \globaldefs so that documents can use this inside @tex, since
  % makeinfo 4.8 does not support it, but we need it nonetheless.
  %
 \begingroup \globaldefs=1
  \ifx\textsizearg\xword \definetextfontsizex
  \else \ifx\textsizearg\xiword \definetextfontsizexi
  \else
    \errhelp=\EMsimple
    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
  \fi\fi
 \endgroup
}


% In order for the font changes to affect most math symbols and letters,
% we have to define the \textfont of the standard families.  Since
% texinfo doesn't allow for producing subscripts and superscripts except
% in the main text, we don't bother to reset \scriptfont and
% \scriptscriptfont (which would also require loading a lot more fonts).
%
\def\resetmathfonts{%
  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
  \textfont\ttfam=\tentt \textfont\sffam=\tensf
}

% The font-changing commands redefine the meanings of \tenSTYLE, instead
% of just \STYLE.  We do this because \STYLE needs to also set the
% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
% \tenSTYLE to set the current font.
%
% Each font-changing command also sets the names \lsize (one size lower)
% and \lllsize (three sizes lower).  These relative commands are used in
% the LaTeX logo and acronyms.
%
% This all needs generalizing, badly.
%
\def\textfonts{%
  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
  \let\tenttsl=\textttsl
  \def\curfontsize{text}%
  \def\lsize{reduced}\def\lllsize{smaller}%
  \resetmathfonts \setleading{\textleading}}
\def\titlefonts{%
  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
  \let\tenttsl=\titlettsl
  \def\curfontsize{title}%
  \def\lsize{chap}\def\lllsize{subsec}%
  \resetmathfonts \setleading{25pt}}
\def\titlefont#1{{\titlefonts\rmisbold #1}}
\def\chapfonts{%
  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
  \let\tenttsl=\chapttsl
  \def\curfontsize{chap}%
  \def\lsize{sec}\def\lllsize{text}%
  \resetmathfonts \setleading{19pt}}
\def\secfonts{%
  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
  \let\tenttsl=\secttsl
  \def\curfontsize{sec}%
  \def\lsize{subsec}\def\lllsize{reduced}%
  \resetmathfonts \setleading{16pt}}
\def\subsecfonts{%
  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
  \let\tenttsl=\ssecttsl
  \def\curfontsize{ssec}%
  \def\lsize{text}\def\lllsize{small}%
  \resetmathfonts \setleading{15pt}}
\let\subsubsecfonts = \subsecfonts
\def\reducedfonts{%
  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
  \let\tenttsl=\reducedttsl
  \def\curfontsize{reduced}%
  \def\lsize{small}\def\lllsize{smaller}%
  \resetmathfonts \setleading{10.5pt}}
\def\smallfonts{%
  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
  \let\tenttsl=\smallttsl
  \def\curfontsize{small}%
  \def\lsize{smaller}\def\lllsize{smaller}%
  \resetmathfonts \setleading{10.5pt}}
\def\smallerfonts{%
  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
  \let\tenttsl=\smallerttsl
  \def\curfontsize{smaller}%
  \def\lsize{smaller}\def\lllsize{smaller}%
  \resetmathfonts \setleading{9.5pt}}

% Fonts for short table of contents.
\setfont\shortcontrm\rmshape{12}{1000}{OT1}
\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
\setfont\shortcontsl\slshape{12}{1000}{OT1}
\setfont\shortconttt\ttshape{12}{1000}{OT1TT}

% Define these just so they can be easily changed for other fonts.
\def\angleleft{$\langle$}
\def\angleright{$\rangle$}

% Set the fonts to use with the @small... environments.
\let\smallexamplefonts = \smallfonts

% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
% can fit this many characters:
%   8.5x11=86   smallbook=72  a4=90  a5=69
% If we use \scriptfonts (8pt), then we can fit this many characters:
%   8.5x11=90+  smallbook=80  a4=90+  a5=77
% For me, subjectively, the few extra characters that fit aren't worth
% the additional smallness of 8pt.  So I'm making the default 9pt.
%
% By the way, for comparison, here's what fits with @example (10pt):
%   8.5x11=71  smallbook=60  a4=75  a5=58
% --karl, 24jan03.

% Set up the default fonts, so we can use them for creating boxes.
%
\definetextfontsizexi


\message{markup,}

% Check if we are currently using a typewriter font.  Since all the
% Computer Modern typewriter fonts have zero interword stretch (and
% shrink), and it is reasonable to expect all typewriter fonts to have
% this property, we can check that font parameter.
%
\def\ifmonospace{\ifdim\fontdimen3\font=0pt }

% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
% define and register \INITMACRO to be called on markup style changes.
% \INITMACRO can check \currentmarkupstyle for the innermost
% style and the set of \ifmarkupSTYLE switches for all styles
% currently in effect.
\newif\ifmarkupvar
\newif\ifmarkupsamp
\newif\ifmarkupkey
%\newif\ifmarkupfile % @file == @samp.
%\newif\ifmarkupoption % @option == @samp.
\newif\ifmarkupcode
\newif\ifmarkupkbd
%\newif\ifmarkupenv % @env == @code.
%\newif\ifmarkupcommand % @command == @code.
\newif\ifmarkuptex % @tex (and part of @math, for now).
\newif\ifmarkupexample
\newif\ifmarkupverb
\newif\ifmarkupverbatim

\let\currentmarkupstyle\empty

\def\setupmarkupstyle#1{%
  \csname markup#1true\endcsname
  \def\currentmarkupstyle{#1}%
  \markupstylesetup
}

\let\markupstylesetup\empty

\def\defmarkupstylesetup#1{%
  \expandafter\def\expandafter\markupstylesetup
    \expandafter{\markupstylesetup #1}%
  \def#1%
}

% Markup style setup for left and right quotes.
\defmarkupstylesetup\markupsetuplq{%
  \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname
  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
}

\defmarkupstylesetup\markupsetuprq{%
  \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname
  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
}

{
\catcode`\'=\active
\catcode`\`=\active

\gdef\markupsetuplqdefault{\let`\lq}
\gdef\markupsetuprqdefault{\let'\rq}

\gdef\markupsetcodequoteleft{\let`\codequoteleft}
\gdef\markupsetcodequoteright{\let'\codequoteright}

\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
}

\let\markupsetuplqcode \markupsetcodequoteleft
\let\markupsetuprqcode \markupsetcodequoteright
\let\markupsetuplqexample \markupsetcodequoteleft
\let\markupsetuprqexample \markupsetcodequoteright
\let\markupsetuplqverb \markupsetcodequoteleft
\let\markupsetuprqverb \markupsetcodequoteright
\let\markupsetuplqverbatim \markupsetcodequoteleft
\let\markupsetuprqverbatim \markupsetcodequoteright

\let\markupsetuplqsamp \markupsetnoligaturesquoteleft
\let\markupsetuplqkbd \markupsetnoligaturesquoteleft

% Allow an option to not replace quotes with a regular directed right
% quote/apostrophe (char 0x27), but instead use the undirected quote
% from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it
% the default, but it works for pasting with more pdf viewers (at least
% evince), the lilypond developers report.  xpdf does work with the
% regular 0x27.
%
\def\codequoteright{%
  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
      '%
    \else \char'15 \fi
  \else \char'15 \fi
}
%
% and a similar option for the left quote char vs. a grave accent.
% Modern fonts display ASCII 0x60 as a grave accent, so some people like
% the code environments to do likewise.
%
\def\codequoteleft{%
  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
      % [Knuth] pp. 380,381,391
      % \relax disables Spanish ligatures ?` and !` of \tt font.
      \relax`%
    \else \char'22 \fi
  \else \char'22 \fi
}

% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
\def\noligaturesquoteleft{\relax\lq}

% Count depth in font-changes, for error checks
\newcount\fontdepth \fontdepth=0

%% Add scribe-like font environments, plus @l for inline lisp (usually sans
%% serif) and @ii for TeX italic

% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
% unless the following character is such as not to need one.
\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
                    \ptexslash\fi\fi\fi}
\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}

% like \smartslanted except unconditionally uses \ttsl.
% @var is set to this for defun arguments.
\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}

% @cite is like \smartslanted except unconditionally use \sl.  We never want
% ttsl for book titles, do we?
\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}

\let\i=\smartitalic
\let\slanted=\smartslanted
\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}}
\let\dfn=\smartslanted
\let\emph=\smartitalic

% Explicit font changes: @r, @sc, undocumented @ii.
\def\r#1{{\rm #1}}              % roman font
\def\sc#1{{\smallcaps#1}}       % smallcaps font
\def\ii#1{{\it #1}}             % italic font

% @b, explicit bold.  Also @strong.
\def\b#1{{\bf #1}}
\let\strong=\b

% @sansserif, explicit sans.
\def\sansserif#1{{\sf #1}}

% We can't just use \exhyphenpenalty, because that only has effect at
% the end of a paragraph.  Restore normal hyphenation at the end of the
% group within which \nohyphenation is presumably called.
%
\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
\def\restorehyphenation{\hyphenchar\font = `- }

% Set sfcode to normal for the chars that usually have another value.
% Can't use plain's \frenchspacing because it uses the `\x notation, and
% sometimes \x has an active definition that messes things up.
%
\catcode`@=11
  \def\plainfrenchspacing{%
    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
    \def\endofsentencespacefactor{1000}% for @. and friends
  }
  \def\plainnonfrenchspacing{%
    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
    \def\endofsentencespacefactor{3000}% for @. and friends
  }
\catcode`@=\other
\def\endofsentencespacefactor{3000}% default

% @t, explicit typewriter.
\def\t#1{%
  {\tt \rawbackslash \plainfrenchspacing #1}%
  \null
}

% @samp.
\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}

% definition of @key that produces a lozenge.  Doesn't adjust to text size.
%\setfont\keyrm\rmshape{8}{1000}{OT1}
%\font\keysy=cmsy9
%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
%    \vbox{\hrule\kern-0.4pt
%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
%    \kern-0.4pt\hrule}%
%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}

% definition of @key with no lozenge.  If the current font is already
% monospace, don't change it; that way, we respect @kbdinputstyle.  But
% if it isn't monospace, then use \tt.
%
\def\key#1{{\setupmarkupstyle{key}%
  \nohyphenation
  \ifmonospace\else\tt\fi
  #1}\null}

% ctrl is no longer a Texinfo command.
\def\ctrl #1{{\tt \rawbackslash \hat}#1}

% @file, @option are the same as @samp.
\let\file=\samp
\let\option=\samp

% @code is a modification of @t,
% which makes spaces the same size as normal in the surrounding text.
\def\tclose#1{%
  {%
    % Change normal interword space to be same as for the current font.
    \spaceskip = \fontdimen2\font
    %
    % Switch to typewriter.
    \tt
    %
    % But `\ ' produces the large typewriter interword space.
    \def\ {{\spaceskip = 0pt{} }}%
    %
    % Turn off hyphenation.
    \nohyphenation
    %
    \rawbackslash
    \plainfrenchspacing
    #1%
  }%
  \null
}

% We *must* turn on hyphenation at `-' and `_' in @code.
% Otherwise, it is too hard to avoid overfull hboxes
% in the Emacs manual, the Library manual, etc.

% Unfortunately, TeX uses one parameter (\hyphenchar) to control
% both hyphenation at - and hyphenation within words.
% We must therefore turn them both off (\tclose does that)
% and arrange explicitly to hyphenate at a dash.
%  -- rms.
{
  \catcode`\-=\active \catcode`\_=\active
  \catcode`\'=\active \catcode`\`=\active
  \global\let'=\rq \global\let`=\lq  % default definitions
  %
  \global\def\code{\begingroup
    \setupmarkupstyle{code}%
    % The following should really be moved into \setupmarkupstyle handlers.
    \catcode\dashChar=\active  \catcode\underChar=\active
    \ifallowcodebreaks
     \let-\codedash
     \let_\codeunder
    \else
     \let-\realdash
     \let_\realunder
    \fi
    \codex
  }
}

\def\realdash{-}
\def\codedash{-\discretionary{}{}{}}
\def\codeunder{%
  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
  % will therefore expand the active definition of _, which is us
  % (inside @code that is), therefore an endless loop.
  \ifusingtt{\ifmmode
               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
             \else\normalunderscore \fi
             \discretionary{}{}{}}%
            {\_}%
}
\def\codex #1{\tclose{#1}\endgroup}

% An additional complication: the above will allow breaks after, e.g.,
% each of the four underscores in __typeof__.  This is undesirable in
% some manuals, especially if they don't have long identifiers in
% general.  @allowcodebreaks provides a way to control this.
%
\newif\ifallowcodebreaks  \allowcodebreakstrue

\def\keywordtrue{true}
\def\keywordfalse{false}

\parseargdef\allowcodebreaks{%
  \def\txiarg{#1}%
  \ifx\txiarg\keywordtrue
    \allowcodebreakstrue
  \else\ifx\txiarg\keywordfalse
    \allowcodebreaksfalse
  \else
    \errhelp = \EMsimple
    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
  \fi\fi
}

% @kbd is like @code, except that if the argument is just one @key command,
% then @kbd has no effect.
\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}

% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
%   `example' (@kbd uses ttsl only inside of @example and friends),
%   or `code' (@kbd uses normal tty font always).
\parseargdef\kbdinputstyle{%
  \def\txiarg{#1}%
  \ifx\txiarg\worddistinct
    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
  \else\ifx\txiarg\wordexample
    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
  \else\ifx\txiarg\wordcode
    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
  \else
    \errhelp = \EMsimple
    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
  \fi\fi\fi
}
\def\worddistinct{distinct}
\def\wordexample{example}
\def\wordcode{code}

% Default is `distinct'.
\kbdinputstyle distinct

\def\xkey{\key}
\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
\ifx\one\xkey\ifx\threex\three \key{#2}%
\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}

% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
\let\indicateurl=\code
\let\env=\code
\let\command=\code

% @clicksequence{File @click{} Open ...}
\def\clicksequence#1{\begingroup #1\endgroup}

% @clickstyle @arrow   (by default)
\parseargdef\clickstyle{\def\click{#1}}
\def\click{\arrow}

% @uref (abbreviation for `urlref') takes an optional (comma-separated)
% second argument specifying the text to display and an optional third
% arg as text to display instead of (rather than in addition to) the url
% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
% a hypertex \special here.
%
\def\uref#1{\douref #1,,,\finish}
\def\douref#1,#2,#3,#4\finish{\begingroup
  \unsepspaces
  \pdfurl{#1}%
  \setbox0 = \hbox{\ignorespaces #3}%
  \ifdim\wd0 > 0pt
    \unhbox0 % third arg given, show only that
  \else
    \setbox0 = \hbox{\ignorespaces #2}%
    \ifdim\wd0 > 0pt
      \ifpdf
        \unhbox0             % PDF: 2nd arg given, show only it
      \else
        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
      \fi
    \else
      \code{#1}% only url given, so show it
    \fi
  \fi
  \endlink
\endgroup}

% @url synonym for @uref, since that's how everyone uses it.
%
\let\url=\uref

% rms does not like angle brackets --karl, 17may97.
% So now @email is just like @uref, unless we are pdf.
%
%\def\email#1{\angleleft{\tt #1}\angleright}
\ifpdf
  \def\email#1{\doemail#1,,\finish}
  \def\doemail#1,#2,#3\finish{\begingroup
    \unsepspaces
    \pdfurl{mailto:#1}%
    \setbox0 = \hbox{\ignorespaces #2}%
    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
    \endlink
  \endgroup}
\else
  \let\email=\uref
\fi

% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
%
\def\dmn#1{\thinspace #1}

% @l was never documented to mean ``switch to the Lisp font'',
% and it is not used as such in any manual I can find.  We need it for
% Polish suppressed-l.  --karl, 22sep96.
%\def\l#1{{\li #1}\null}

% @acronym for "FBI", "NATO", and the like.
% We print this one point size smaller, since it's intended for
% all-uppercase.
%
\def\acronym#1{\doacronym #1,,\finish}
\def\doacronym#1,#2,#3\finish{%
  {\selectfonts\lsize #1}%
  \def\temp{#2}%
  \ifx\temp\empty \else
    \space ({\unsepspaces \ignorespaces \temp \unskip})%
  \fi
}

% @abbr for "Comput. J." and the like.
% No font change, but don't do end-of-sentence spacing.
%
\def\abbr#1{\doabbr #1,,\finish}
\def\doabbr#1,#2,#3\finish{%
  {\plainfrenchspacing #1}%
  \def\temp{#2}%
  \ifx\temp\empty \else
    \space ({\unsepspaces \ignorespaces \temp \unskip})%
  \fi
}


\message{glyphs,}

% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
%
% Since these characters are used in examples, they should be an even number of
% \tt widths. Each \tt character is 1en, so two makes it 1em.
%
\def\point{$\star$}
\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}

% The @error{} command.
% Adapted from the TeXbook's \boxit.
%
\newbox\errorbox
%
{\tentt \global\dimen0 = 3em}% Width of the box.
\dimen2 = .55pt % Thickness of rules
% The text. (`r' is open on the right, `e' somewhat less so on the left.)
\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
%
\setbox\errorbox=\hbox to \dimen0{\hfil
   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
   \advance\hsize by -2\dimen2 % Rules.
   \vbox{%
      \hrule height\dimen2
      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
         \kern3pt\vrule width\dimen2}% Space to right.
      \hrule height\dimen2}
    \hfil}
%
\def\error{\leavevmode\lower.7ex\copy\errorbox}

% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
%
\def\pounds{{\it\$}}

% @euro{} comes from a separate font, depending on the current style.
% We use the free feym* fonts from the eurosym package by Henrik
% Theiling, which support regular, slanted, bold and bold slanted (and
% "outlined" (blackboard board, sort of) versions, which we don't need).
% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
%
% Although only regular is the truly official Euro symbol, we ignore
% that.  The Euro is designed to be slightly taller than the regular
% font height.
%
% feymr - regular
% feymo - slanted
% feybr - bold
% feybo - bold slanted
%
% There is no good (free) typewriter version, to my knowledge.
% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
% Hmm.
%
% Also doesn't work in math.  Do we need to do math with euro symbols?
% Hope not.
%
%
\def\euro{{\eurofont e}}
\def\eurofont{%
  % We set the font at each command, rather than predefining it in
  % \textfonts and the other font-switching commands, so that
  % installations which never need the symbol don't have to have the
  % font installed.
  %
  % There is only one designed size (nominal 10pt), so we always scale
  % that to the current nominal size.
  %
  % By the way, simply using "at 1em" works for cmr10 and the like, but
  % does not work for cmbx10 and other extended/shrunken fonts.
  %
  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
  %
  \ifx\curfontstyle\bfstylename
    % bold:
    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
  \else
    % regular:
    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
  \fi
  \thiseurofont
}

% Glyphs from the EC fonts.  We don't use \let for the aliases, because
% sometimes we redefine the original macro, and the alias should reflect
% the redefinition.
%
% Use LaTeX names for the Icelandic letters.
\def\DH{{\ecfont \char"D0}} % Eth
\def\dh{{\ecfont \char"F0}} % eth
\def\TH{{\ecfont \char"DE}} % Thorn
\def\th{{\ecfont \char"FE}} % thorn
%
\def\guillemetleft{{\ecfont \char"13}}
\def\guillemotleft{\guillemetleft}
\def\guillemetright{{\ecfont \char"14}}
\def\guillemotright{\guillemetright}
\def\guilsinglleft{{\ecfont \char"0E}}
\def\guilsinglright{{\ecfont \char"0F}}
\def\quotedblbase{{\ecfont \char"12}}
\def\quotesinglbase{{\ecfont \char"0D}}
%
% This positioning is not perfect (see the ogonek LaTeX package), but
% we have the precomposed glyphs for the most common cases.  We put the
% tests to use those glyphs in the single \ogonek macro so we have fewer
% dummy definitions to worry about for index entries, etc.
%
% ogonek is also used with other letters in Lithuanian (IOU), but using
% the precomposed glyphs for those is not so easy since they aren't in
% the same EC font.
\def\ogonek#1{{%
  \def\temp{#1}%
  \ifx\temp\macrocharA\Aogonek
  \else\ifx\temp\macrochara\aogonek
  \else\ifx\temp\macrocharE\Eogonek
  \else\ifx\temp\macrochare\eogonek
  \else
    \ecfont \setbox0=\hbox{#1}%
    \ifdim\ht0=1ex\accent"0C #1%
    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
    \fi
  \fi\fi\fi\fi
  }%
}
\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
%
% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
\def\ecfont{%
  % We can't distinguish serif/sans and italic/slanted, but this
  % is used for crude hacks anyway (like adding French and German
  % quotes to documents typeset with CM, where we lose kerning), so
  % hopefully nobody will notice/care.
  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
  \ifx\curfontstyle\bfstylename
    % bold:
    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
  \else
    % regular:
    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
  \fi
  \thisecfont
}

% @registeredsymbol - R in a circle.  The font for the R should really
% be smaller yet, but lllsize is the best we can do for now.
% Adapted from the plain.tex definition of \copyright.
%
\def\registeredsymbol{%
  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
               \hfil\crcr\Orb}}%
    }$%
}

% @textdegree - the normal degrees sign.
%
\def\textdegree{$^\circ$}

% Laurent Siebenmann reports \Orb undefined with:
%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
% so we'll define it if necessary.
%
\ifx\Orb\undefined
\def\Orb{\mathhexbox20D}
\fi

% Quotes.
\chardef\quotedblleft="5C
\chardef\quotedblright=`\"
\chardef\quoteleft=`\`
\chardef\quoteright=`\'


\message{page headings,}

\newskip\titlepagetopglue \titlepagetopglue = 1.5in
\newskip\titlepagebottomglue \titlepagebottomglue = 2pc

% First the title page.  Must do @settitle before @titlepage.
\newif\ifseenauthor
\newif\iffinishedtitlepage

% Do an implicit @contents or @shortcontents after @end titlepage if the
% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
%
\newif\ifsetcontentsaftertitlepage
 \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
\newif\ifsetshortcontentsaftertitlepage
 \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue

\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
        \endgroup\page\hbox{}\page}

\envdef\titlepage{%
  % Open one extra group, as we want to close it in the middle of \Etitlepage.
  \begingroup
    \parindent=0pt \textfonts
    % Leave some space at the very top of the page.
    \vglue\titlepagetopglue
    % No rule at page bottom unless we print one at the top with @title.
    \finishedtitlepagetrue
    %
    % Most title ``pages'' are actually two pages long, with space
    % at the top of the second.  We don't want the ragged left on the second.
    \let\oldpage = \page
    \def\page{%
      \iffinishedtitlepage\else
	 \finishtitlepage
      \fi
      \let\page = \oldpage
      \page
      \null
    }%
}

\def\Etitlepage{%
    \iffinishedtitlepage\else
	\finishtitlepage
    \fi
    % It is important to do the page break before ending the group,
    % because the headline and footline are only empty inside the group.
    % If we use the new definition of \page, we always get a blank page
    % after the title page, which we certainly don't want.
    \oldpage
  \endgroup
  %
  % Need this before the \...aftertitlepage checks so that if they are
  % in effect the toc pages will come out with page numbers.
  \HEADINGSon
  %
  % If they want short, they certainly want long too.
  \ifsetshortcontentsaftertitlepage
    \shortcontents
    \contents
    \global\let\shortcontents = \relax
    \global\let\contents = \relax
  \fi
  %
  \ifsetcontentsaftertitlepage
    \contents
    \global\let\contents = \relax
    \global\let\shortcontents = \relax
  \fi
}

\def\finishtitlepage{%
  \vskip4pt \hrule height 2pt width \hsize
  \vskip\titlepagebottomglue
  \finishedtitlepagetrue
}

%%% Macros to be used within @titlepage:

\let\subtitlerm=\tenrm
\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}

\parseargdef\title{%
  \checkenv\titlepage
  \leftline{\titlefonts\rmisbold #1}
  % print a rule at the page bottom also.
  \finishedtitlepagefalse
  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
}

\parseargdef\subtitle{%
  \checkenv\titlepage
  {\subtitlefont \rightline{#1}}%
}

% @author should come last, but may come many times.
% It can also be used inside @quotation.
%
\parseargdef\author{%
  \def\temp{\quotation}%
  \ifx\thisenv\temp
    \def\quotationauthor{#1}% printed in \Equotation.
  \else
    \checkenv\titlepage
    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
    {\secfonts\rmisbold \leftline{#1}}%
  \fi
}


%%% Set up page headings and footings.

\let\thispage=\folio

\newtoks\evenheadline    % headline on even pages
\newtoks\oddheadline     % headline on odd pages
\newtoks\evenfootline    % footline on even pages
\newtoks\oddfootline     % footline on odd pages

% Now make TeX use those variables
\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
                            \else \the\evenheadline \fi}}
\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
                            \else \the\evenfootline \fi}\HEADINGShook}
\let\HEADINGShook=\relax

% Commands to set those variables.
% For example, this is what  @headings on  does
% @evenheading @thistitle|@thispage|@thischapter
% @oddheading @thischapter|@thispage|@thistitle
% @evenfooting @thisfile||
% @oddfooting ||@thisfile


\def\evenheading{\parsearg\evenheadingxxx}
\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}

\def\oddheading{\parsearg\oddheadingxxx}
\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}

\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%

\def\evenfooting{\parsearg\evenfootingxxx}
\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}

\def\oddfooting{\parsearg\oddfootingxxx}
\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
  %
  % Leave some space for the footline.  Hopefully ok to assume
  % @evenfooting will not be used by itself.
  \global\advance\pageheight by -12pt
  \global\advance\vsize by -12pt
}

\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}

% @evenheadingmarks top     \thischapter <- chapter at the top of a page
% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
%
% The same set of arguments for:
%
% @oddheadingmarks
% @evenfootingmarks
% @oddfootingmarks
% @everyheadingmarks
% @everyfootingmarks

\def\evenheadingmarks{\headingmarks{even}{heading}}
\def\oddheadingmarks{\headingmarks{odd}{heading}}
\def\evenfootingmarks{\headingmarks{even}{footing}}
\def\oddfootingmarks{\headingmarks{odd}{footing}}
\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
                          \headingmarks{odd}{heading}{#1} }
\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
                          \headingmarks{odd}{footing}{#1} }
% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
\def\headingmarks#1#2#3 {%
  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
  \global\expandafter\let\csname get#1#2marks\endcsname \temp
}

\everyheadingmarks bottom
\everyfootingmarks bottom

% @headings double      turns headings on for double-sided printing.
% @headings single      turns headings on for single-sided printing.
% @headings off         turns them off.
% @headings on          same as @headings double, retained for compatibility.
% @headings after       turns on double-sided headings after this page.
% @headings doubleafter turns on double-sided headings after this page.
% @headings singleafter turns on single-sided headings after this page.
% By default, they are off at the start of a document,
% and turned `on' after @end titlepage.

\def\headings #1 {\csname HEADINGS#1\endcsname}

\def\HEADINGSoff{%
\global\evenheadline={\hfil} \global\evenfootline={\hfil}
\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
\HEADINGSoff
% When we turn headings on, set the page number to 1.
% For double-sided printing, put current file name in lower left corner,
% chapter name on inside top of right hand pages, document
% title on inside top of left hand pages, and page numbers on outside top
% edge of all pages.
\def\HEADINGSdouble{%
\global\pageno=1
\global\evenfootline={\hfil}
\global\oddfootline={\hfil}
\global\evenheadline={\line{\folio\hfil\thistitle}}
\global\oddheadline={\line{\thischapter\hfil\folio}}
\global\let\contentsalignmacro = \chapoddpage
}
\let\contentsalignmacro = \chappager

% For single-sided printing, chapter title goes across top left of page,
% page number on top right.
\def\HEADINGSsingle{%
\global\pageno=1
\global\evenfootline={\hfil}
\global\oddfootline={\hfil}
\global\evenheadline={\line{\thischapter\hfil\folio}}
\global\oddheadline={\line{\thischapter\hfil\folio}}
\global\let\contentsalignmacro = \chappager
}
\def\HEADINGSon{\HEADINGSdouble}

\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
\let\HEADINGSdoubleafter=\HEADINGSafter
\def\HEADINGSdoublex{%
\global\evenfootline={\hfil}
\global\oddfootline={\hfil}
\global\evenheadline={\line{\folio\hfil\thistitle}}
\global\oddheadline={\line{\thischapter\hfil\folio}}
\global\let\contentsalignmacro = \chapoddpage
}

\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
\def\HEADINGSsinglex{%
\global\evenfootline={\hfil}
\global\oddfootline={\hfil}
\global\evenheadline={\line{\thischapter\hfil\folio}}
\global\oddheadline={\line{\thischapter\hfil\folio}}
\global\let\contentsalignmacro = \chappager
}

% Subroutines used in generating headings
% This produces Day Month Year style of output.
% Only define if not already defined, in case a txi-??.tex file has set
% up a different format (e.g., txi-cs.tex does this).
\ifx\today\undefined
\def\today{%
  \number\day\space
  \ifcase\month
  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
  \fi
  \space\number\year}
\fi

% @settitle line...  specifies the title of the document, for headings.
% It generates no output of its own.
\def\thistitle{\putwordNoTitle}
\def\settitle{\parsearg{\gdef\thistitle}}


\message{tables,}
% Tables -- @table, @ftable, @vtable, @item(x).

% default indentation of table text
\newdimen\tableindent \tableindent=.8in
% default indentation of @itemize and @enumerate text
\newdimen\itemindent  \itemindent=.3in
% margin between end of table item and start of table text.
\newdimen\itemmargin  \itemmargin=.1in

% used internally for \itemindent minus \itemmargin
\newdimen\itemmax

% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
% these defs.
% They also define \itemindex
% to index the item name in whatever manner is desired (perhaps none).

\newif\ifitemxneedsnegativevskip

\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}

\def\internalBitem{\smallbreak \parsearg\itemzzz}
\def\internalBitemx{\itemxpar \parsearg\itemzzz}

\def\itemzzz #1{\begingroup %
  \advance\hsize by -\rightskip
  \advance\hsize by -\tableindent
  \setbox0=\hbox{\itemindicate{#1}}%
  \itemindex{#1}%
  \nobreak % This prevents a break before @itemx.
  %
  % If the item text does not fit in the space we have, put it on a line
  % by itself, and do not allow a page break either before or after that
  % line.  We do not start a paragraph here because then if the next
  % command is, e.g., @kindex, the whatsit would get put into the
  % horizontal list on a line by itself, resulting in extra blank space.
  \ifdim \wd0>\itemmax
    %
    % Make this a paragraph so we get the \parskip glue and wrapping,
    % but leave it ragged-right.
    \begingroup
      \advance\leftskip by-\tableindent
      \advance\hsize by\tableindent
      \advance\rightskip by0pt plus1fil
      \leavevmode\unhbox0\par
    \endgroup
    %
    % We're going to be starting a paragraph, but we don't want the
    % \parskip glue -- logically it's part of the @item we just started.
    \nobreak \vskip-\parskip
    %
    % Stop a page break at the \parskip glue coming up.  However, if
    % what follows is an environment such as @example, there will be no
    % \parskip glue; then the negative vskip we just inserted would
    % cause the example and the item to crash together.  So we use this
    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
    % \parskip glue after all.  Section titles are handled this way also.
    %
    \penalty 10001
    \endgroup
    \itemxneedsnegativevskipfalse
  \else
    % The item text fits into the space.  Start a paragraph, so that the
    % following text (if any) will end up on the same line.
    \noindent
    % Do this with kerns and \unhbox so that if there is a footnote in
    % the item text, it can migrate to the main vertical list and
    % eventually be printed.
    \nobreak\kern-\tableindent
    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
    \unhbox0
    \nobreak\kern\dimen0
    \endgroup
    \itemxneedsnegativevskiptrue
  \fi
}

\def\item{\errmessage{@item while not in a list environment}}
\def\itemx{\errmessage{@itemx while not in a list environment}}

% @table, @ftable, @vtable.
\envdef\table{%
  \let\itemindex\gobble
  \tablecheck{table}%
}
\envdef\ftable{%
  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
  \tablecheck{ftable}%
}
\envdef\vtable{%
  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
  \tablecheck{vtable}%
}
\def\tablecheck#1{%
  \ifnum \the\catcode`\^^M=\active
    \endgroup
    \errmessage{This command won't work in this context; perhaps the problem is
      that we are \inenvironment\thisenv}%
    \def\next{\doignore{#1}}%
  \else
    \let\next\tablex
  \fi
  \next
}
\def\tablex#1{%
  \def\itemindicate{#1}%
  \parsearg\tabley
}
\def\tabley#1{%
  {%
    \makevalueexpandable
    \edef\temp{\noexpand\tablez #1\space\space\space}%
    \expandafter
  }\temp \endtablez
}
\def\tablez #1 #2 #3 #4\endtablez{%
  \aboveenvbreak
  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
  \ifnum 0#2>0 \tableindent=#2\mil \fi
  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
  \itemmax=\tableindent
  \advance \itemmax by -\itemmargin
  \advance \leftskip by \tableindent
  \exdentamount=\tableindent
  \parindent = 0pt
  \parskip = \smallskipamount
  \ifdim \parskip=0pt \parskip=2pt \fi
  \let\item = \internalBitem
  \let\itemx = \internalBitemx
}
\def\Etable{\endgraf\afterenvbreak}
\let\Eftable\Etable
\let\Evtable\Etable
\let\Eitemize\Etable
\let\Eenumerate\Etable

% This is the counter used by @enumerate, which is really @itemize

\newcount \itemno

\envdef\itemize{\parsearg\doitemize}

\def\doitemize#1{%
  \aboveenvbreak
  \itemmax=\itemindent
  \advance\itemmax by -\itemmargin
  \advance\leftskip by \itemindent
  \exdentamount=\itemindent
  \parindent=0pt
  \parskip=\smallskipamount
  \ifdim\parskip=0pt \parskip=2pt \fi
  %
  % Try typesetting the item mark that if the document erroneously says
  % something like @itemize @samp (intending @table), there's an error
  % right away at the @itemize.  It's not the best error message in the
  % world, but it's better than leaving it to the @item.  This means if
  % the user wants an empty mark, they have to say @w{} not just @w.
  \def\itemcontents{#1}%
  \setbox0 = \hbox{\itemcontents}%
  %
  % @itemize with no arg is equivalent to @itemize @bullet.
  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
  %
  \let\item=\itemizeitem
}

% Definition of @item while inside @itemize and @enumerate.
%
\def\itemizeitem{%
  \advance\itemno by 1  % for enumerations
  {\let\par=\endgraf \smallbreak}% reasonable place to break
  {%
   % If the document has an @itemize directly after a section title, a
   % \nobreak will be last on the list, and \sectionheading will have
   % done a \vskip-\parskip.  In that case, we don't want to zero
   % parskip, or the item text will crash with the heading.  On the
   % other hand, when there is normal text preceding the item (as there
   % usually is), we do want to zero parskip, or there would be too much
   % space.  In that case, we won't have a \nobreak before.  At least
   % that's the theory.
   \ifnum\lastpenalty<10000 \parskip=0in \fi
   \noindent
   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
   %
   \vadjust{\penalty 1200}}% not good to break after first line of item.
  \flushcr
}

% \splitoff TOKENS\endmark defines \first to be the first token in
% TOKENS, and \rest to be the remainder.
%
\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%

% Allow an optional argument of an uppercase letter, lowercase letter,
% or number, to specify the first label in the enumerated list.  No
% argument is the same as `1'.
%
\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
\def\enumeratey #1 #2\endenumeratey{%
  % If we were given no argument, pretend we were given `1'.
  \def\thearg{#1}%
  \ifx\thearg\empty \def\thearg{1}\fi
  %
  % Detect if the argument is a single token.  If so, it might be a
  % letter.  Otherwise, the only valid thing it can be is a number.
  % (We will always have one token, because of the test we just made.
  % This is a good thing, since \splitoff doesn't work given nothing at
  % all -- the first parameter is undelimited.)
  \expandafter\splitoff\thearg\endmark
  \ifx\rest\empty
    % Only one token in the argument.  It could still be anything.
    % A ``lowercase letter'' is one whose \lccode is nonzero.
    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
    %   not equal to itself.
    % Otherwise, we assume it's a number.
    %
    % We need the \relax at the end of the \ifnum lines to stop TeX from
    % continuing to look for a <number>.
    %
    \ifnum\lccode\expandafter`\thearg=0\relax
      \numericenumerate % a number (we hope)
    \else
      % It's a letter.
      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
        \lowercaseenumerate % lowercase letter
      \else
        \uppercaseenumerate % uppercase letter
      \fi
    \fi
  \else
    % Multiple tokens in the argument.  We hope it's a number.
    \numericenumerate
  \fi
}

% An @enumerate whose labels are integers.  The starting integer is
% given in \thearg.
%
\def\numericenumerate{%
  \itemno = \thearg
  \startenumeration{\the\itemno}%
}

% The starting (lowercase) letter is in \thearg.
\def\lowercaseenumerate{%
  \itemno = \expandafter`\thearg
  \startenumeration{%
    % Be sure we're not beyond the end of the alphabet.
    \ifnum\itemno=0
      \errmessage{No more lowercase letters in @enumerate; get a bigger
                  alphabet}%
    \fi
    \char\lccode\itemno
  }%
}

% The starting (uppercase) letter is in \thearg.
\def\uppercaseenumerate{%
  \itemno = \expandafter`\thearg
  \startenumeration{%
    % Be sure we're not beyond the end of the alphabet.
    \ifnum\itemno=0
      \errmessage{No more uppercase letters in @enumerate; get a bigger
                  alphabet}
    \fi
    \char\uccode\itemno
  }%
}

% Call \doitemize, adding a period to the first argument and supplying the
% common last two arguments.  Also subtract one from the initial value in
% \itemno, since @item increments \itemno.
%
\def\startenumeration#1{%
  \advance\itemno by -1
  \doitemize{#1.}\flushcr
}

% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
% to @enumerate.
%
\def\alphaenumerate{\enumerate{a}}
\def\capsenumerate{\enumerate{A}}
\def\Ealphaenumerate{\Eenumerate}
\def\Ecapsenumerate{\Eenumerate}


% @multitable macros
% Amy Hendrickson, 8/18/94, 3/6/96
%
% @multitable ... @end multitable will make as many columns as desired.
% Contents of each column will wrap at width given in preamble.  Width
% can be specified either with sample text given in a template line,
% or in percent of \hsize, the current width of text on page.

% Table can continue over pages but will only break between lines.

% To make preamble:
%
% Either define widths of columns in terms of percent of \hsize:
%   @multitable @columnfractions .25 .3 .45
%   @item ...
%
%   Numbers following @columnfractions are the percent of the total
%   current hsize to be used for each column. You may use as many
%   columns as desired.


% Or use a template:
%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
%   @item ...
%   using the widest term desired in each column.

% Each new table line starts with @item, each subsequent new column
% starts with @tab. Empty columns may be produced by supplying @tab's
% with nothing between them for as many times as empty columns are needed,
% ie, @tab@tab@tab will produce two empty columns.

% @item, @tab do not need to be on their own lines, but it will not hurt
% if they are.

% Sample multitable:

%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
%   @item first col stuff @tab second col stuff @tab third col
%   @item
%   first col stuff
%   @tab
%   second col stuff
%   @tab
%   third col
%   @item first col stuff @tab second col stuff
%   @tab Many paragraphs of text may be used in any column.
%
%         They will wrap at the width determined by the template.
%   @item@tab@tab This will be in third column.
%   @end multitable

% Default dimensions may be reset by user.
% @multitableparskip is vertical space between paragraphs in table.
% @multitableparindent is paragraph indent in table.
% @multitablecolmargin is horizontal space to be left between columns.
% @multitablelinespace is space to leave between table items, baseline
%                                                            to baseline.
%   0pt means it depends on current normal line spacing.
%
\newskip\multitableparskip
\newskip\multitableparindent
\newdimen\multitablecolspace
\newskip\multitablelinespace
\multitableparskip=0pt
\multitableparindent=6pt
\multitablecolspace=12pt
\multitablelinespace=0pt

% Macros used to set up halign preamble:
%
\let\endsetuptable\relax
\def\xendsetuptable{\endsetuptable}
\let\columnfractions\relax
\def\xcolumnfractions{\columnfractions}
\newif\ifsetpercent

% #1 is the @columnfraction, usually a decimal number like .5, but might
% be just 1.  We just use it, whatever it is.
%
\def\pickupwholefraction#1 {%
  \global\advance\colcount by 1
  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
  \setuptable
}

\newcount\colcount
\def\setuptable#1{%
  \def\firstarg{#1}%
  \ifx\firstarg\xendsetuptable
    \let\go = \relax
  \else
    \ifx\firstarg\xcolumnfractions
      \global\setpercenttrue
    \else
      \ifsetpercent
         \let\go\pickupwholefraction
      \else
         \global\advance\colcount by 1
         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
                   % separator; typically that is always in the input, anyway.
         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
      \fi
    \fi
    \ifx\go\pickupwholefraction
      % Put the argument back for the \pickupwholefraction call, so
      % we'll always have a period there to be parsed.
      \def\go{\pickupwholefraction#1}%
    \else
      \let\go = \setuptable
    \fi%
  \fi
  \go
}

% multitable-only commands.
%
% @headitem starts a heading row, which we typeset in bold.
% Assignments have to be global since we are inside the implicit group
% of an alignment entry.  \everycr resets \everytab so we don't have to
% undo it ourselves.
\def\headitemfont{\b}% for people to use in the template row; not changeable
\def\headitem{%
  \checkenv\multitable
  \crcr
  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
  \the\everytab % for the first item
}%
%
% A \tab used to include \hskip1sp.  But then the space in a template
% line is not enough.  That is bad.  So let's go back to just `&' until
% we again encounter the problem the 1sp was intended to solve.
%					--karl, nathan@acm.org, 20apr99.
\def\tab{\checkenv\multitable &\the\everytab}%

% @multitable ... @end multitable definitions:
%
\newtoks\everytab  % insert after every tab.
%
\envdef\multitable{%
  \vskip\parskip
  \startsavinginserts
  %
  % @item within a multitable starts a normal row.
  % We use \def instead of \let so that if one of the multitable entries
  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
  % \endtemplate) expanding \doitemize.
  \def\item{\crcr}%
  %
  \tolerance=9500
  \hbadness=9500
  \setmultitablespacing
  \parskip=\multitableparskip
  \parindent=\multitableparindent
  \overfullrule=0pt
  \global\colcount=0
  %
  \everycr = {%
    \noalign{%
      \global\everytab={}%
      \global\colcount=0 % Reset the column counter.
      % Check for saved footnotes, etc.
      \checkinserts
      % Keeps underfull box messages off when table breaks over pages.
      %\filbreak
	% Maybe so, but it also creates really weird page breaks when the
	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
	% problem manifests itself, so it can be fixed for real --karl.
    }%
  }%
  %
  \parsearg\domultitable
}
\def\domultitable#1{%
  % To parse everything between @multitable and @item:
  \setuptable#1 \endsetuptable
  %
  % This preamble sets up a generic column definition, which will
  % be used as many times as user calls for columns.
  % \vtop will set a single line and will also let text wrap and
  % continue for many paragraphs if desired.
  \halign\bgroup &%
    \global\advance\colcount by 1
    \multistrut
    \vtop{%
      % Use the current \colcount to find the correct column width:
      \hsize=\expandafter\csname col\the\colcount\endcsname
      %
      % In order to keep entries from bumping into each other
      % we will add a \leftskip of \multitablecolspace to all columns after
      % the first one.
      %
      % If a template has been used, we will add \multitablecolspace
      % to the width of each template entry.
      %
      % If the user has set preamble in terms of percent of \hsize we will
      % use that dimension as the width of the column, and the \leftskip
      % will keep entries from bumping into each other.  Table will start at
      % left margin and final column will justify at right margin.
      %
      % Make sure we don't inherit \rightskip from the outer environment.
      \rightskip=0pt
      \ifnum\colcount=1
	% The first column will be indented with the surrounding text.
	\advance\hsize by\leftskip
      \else
	\ifsetpercent \else
	  % If user has not set preamble in terms of percent of \hsize
	  % we will advance \hsize by \multitablecolspace.
	  \advance\hsize by \multitablecolspace
	\fi
       % In either case we will make \leftskip=\multitablecolspace:
      \leftskip=\multitablecolspace
      \fi
      % Ignoring space at the beginning and end avoids an occasional spurious
      % blank line, when TeX decides to break the line at the space before the
      % box from the multistrut, so the strut ends up on a line by itself.
      % For example:
      % @multitable @columnfractions .11 .89
      % @item @code{#}
      % @tab Legal holiday which is valid in major parts of the whole country.
      % Is automatically provided with highlighting sequences respectively
      % marking characters.
      \noindent\ignorespaces##\unskip\multistrut
    }\cr
}
\def\Emultitable{%
  \crcr
  \egroup % end the \halign
  \global\setpercentfalse
}

\def\setmultitablespacing{%
  \def\multistrut{\strut}% just use the standard line spacing
  %
  % Compute \multitablelinespace (if not defined by user) for use in
  % \multitableparskip calculation.  We used define \multistrut based on
  % this, but (ironically) that caused the spacing to be off.
  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
\ifdim\multitablelinespace=0pt
\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
\global\advance\multitablelinespace by-\ht0
\fi
%% Test to see if parskip is larger than space between lines of
%% table. If not, do nothing.
%%        If so, set to same dimension as multitablelinespace.
\ifdim\multitableparskip>\multitablelinespace
\global\multitableparskip=\multitablelinespace
\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
                                      %% than skip between lines in the table.
\fi%
\ifdim\multitableparskip=0pt
\global\multitableparskip=\multitablelinespace
\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
                                      %% than skip between lines in the table.
\fi}


\message{conditionals,}

% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
% @ifnotxml always succeed.  They currently do nothing; we don't
% attempt to check whether the conditionals are properly nested.  But we
% have to remember that they are conditionals, so that @end doesn't
% attempt to close an environment group.
%
\def\makecond#1{%
  \expandafter\let\csname #1\endcsname = \relax
  \expandafter\let\csname iscond.#1\endcsname = 1
}
\makecond{iftex}
\makecond{ifnotdocbook}
\makecond{ifnothtml}
\makecond{ifnotinfo}
\makecond{ifnotplaintext}
\makecond{ifnotxml}

% Ignore @ignore, @ifhtml, @ifinfo, and the like.
%
\def\direntry{\doignore{direntry}}
\def\documentdescription{\doignore{documentdescription}}
\def\docbook{\doignore{docbook}}
\def\html{\doignore{html}}
\def\ifdocbook{\doignore{ifdocbook}}
\def\ifhtml{\doignore{ifhtml}}
\def\ifinfo{\doignore{ifinfo}}
\def\ifnottex{\doignore{ifnottex}}
\def\ifplaintext{\doignore{ifplaintext}}
\def\ifxml{\doignore{ifxml}}
\def\ignore{\doignore{ignore}}
\def\menu{\doignore{menu}}
\def\xml{\doignore{xml}}

% Ignore text until a line `@end #1', keeping track of nested conditionals.
%
% A count to remember the depth of nesting.
\newcount\doignorecount

\def\doignore#1{\begingroup
  % Scan in ``verbatim'' mode:
  \obeylines
  \catcode`\@ = \other
  \catcode`\{ = \other
  \catcode`\} = \other
  %
  % Make sure that spaces turn into tokens that match what \doignoretext wants.
  \spaceisspace
  %
  % Count number of #1's that we've seen.
  \doignorecount = 0
  %
  % Swallow text until we reach the matching `@end #1'.
  \dodoignore{#1}%
}

{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
  \obeylines %
  %
  \gdef\dodoignore#1{%
    % #1 contains the command name as a string, e.g., `ifinfo'.
    %
    % Define a command to find the next `@end #1'.
    \long\def\doignoretext##1^^M@end #1{%
      \doignoretextyyy##1^^M@#1\_STOP_}%
    %
    % And this command to find another #1 command, at the beginning of a
    % line.  (Otherwise, we would consider a line `@c @ifset', for
    % example, to count as an @ifset for nesting.)
    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
    %
    % And now expand that command.
    \doignoretext ^^M%
  }%
}

\def\doignoreyyy#1{%
  \def\temp{#1}%
  \ifx\temp\empty			% Nothing found.
    \let\next\doignoretextzzz
  \else					% Found a nested condition, ...
    \advance\doignorecount by 1
    \let\next\doignoretextyyy		% ..., look for another.
    % If we're here, #1 ends with ^^M\ifinfo (for example).
  \fi
  \next #1% the token \_STOP_ is present just after this macro.
}

% We have to swallow the remaining "\_STOP_".
%
\def\doignoretextzzz#1{%
  \ifnum\doignorecount = 0	% We have just found the outermost @end.
    \let\next\enddoignore
  \else				% Still inside a nested condition.
    \advance\doignorecount by -1
    \let\next\doignoretext      % Look for the next @end.
  \fi
  \next
}

% Finish off ignored text.
{ \obeylines%
  % Ignore anything after the last `@end #1'; this matters in verbatim
  % environments, where otherwise the newline after an ignored conditional
  % would result in a blank line in the output.
  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
}


% @set VAR sets the variable VAR to an empty value.
% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
%
% Since we want to separate VAR from REST-OF-LINE (which might be
% empty), we can't just use \parsearg; we have to insert a space of our
% own to delimit the rest of the line, and then take it out again if we
% didn't need it.
% We rely on the fact that \parsearg sets \catcode`\ =10.
%
\parseargdef\set{\setyyy#1 \endsetyyy}
\def\setyyy#1 #2\endsetyyy{%
  {%
    \makevalueexpandable
    \def\temp{#2}%
    \edef\next{\gdef\makecsname{SET#1}}%
    \ifx\temp\empty
      \next{}%
    \else
      \setzzz#2\endsetzzz
    \fi
  }%
}
% Remove the trailing space \setxxx inserted.
\def\setzzz#1 \endsetzzz{\next{#1}}

% @clear VAR clears (i.e., unsets) the variable VAR.
%
\parseargdef\clear{%
  {%
    \makevalueexpandable
    \global\expandafter\let\csname SET#1\endcsname=\relax
  }%
}

% @value{foo} gets the text saved in variable foo.
\def\value{\begingroup\makevalueexpandable\valuexxx}
\def\valuexxx#1{\expandablevalue{#1}\endgroup}
{
  \catcode`\- = \active \catcode`\_ = \active
  %
  \gdef\makevalueexpandable{%
    \let\value = \expandablevalue
    % We don't want these characters active, ...
    \catcode`\-=\other \catcode`\_=\other
    % ..., but we might end up with active ones in the argument if
    % we're called from @code, as @code{@value{foo-bar_}}, though.
    % So \let them to their normal equivalents.
    \let-\realdash \let_\normalunderscore
  }
}

% We have this subroutine so that we can handle at least some @value's
% properly in indexes (we call \makevalueexpandable in \indexdummies).
% The command has to be fully expandable (if the variable is set), since
% the result winds up in the index file.  This means that if the
% variable's value contains other Texinfo commands, it's almost certain
% it will fail (although perhaps we could fix that with sufficient work
% to do a one-level expansion on the result, instead of complete).
%
\def\expandablevalue#1{%
  \expandafter\ifx\csname SET#1\endcsname\relax
    {[No value for ``#1'']}%
    \message{Variable `#1', used in @value, is not set.}%
  \else
    \csname SET#1\endcsname
  \fi
}

% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
% with @set.
%
% To get special treatment of `@end ifset,' call \makeond and the redefine.
%
\makecond{ifset}
\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
\def\doifset#1#2{%
  {%
    \makevalueexpandable
    \let\next=\empty
    \expandafter\ifx\csname SET#2\endcsname\relax
      #1% If not set, redefine \next.
    \fi
    \expandafter
  }\next
}
\def\ifsetfail{\doignore{ifset}}

% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
% defined with @set, or has been undefined with @clear.
%
% The `\else' inside the `\doifset' parameter is a trick to reuse the
% above code: if the variable is not set, do nothing, if it is set,
% then redefine \next to \ifclearfail.
%
\makecond{ifclear}
\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
\def\ifclearfail{\doignore{ifclear}}

% @dircategory CATEGORY  -- specify a category of the dir file
% which this file should belong to.  Ignore this in TeX.
\let\dircategory=\comment

% @defininfoenclose.
\let\definfoenclose=\comment


\message{indexing,}
% Index generation facilities

% Define \newwrite to be identical to plain tex's \newwrite
% except not \outer, so it can be used within macros and \if's.
\edef\newwrite{\makecsname{ptexnewwrite}}

% \newindex {foo} defines an index named foo.
% It automatically defines \fooindex such that
% \fooindex ...rest of line... puts an entry in the index foo.
% It also defines \fooindfile to be the number of the output channel for
% the file that accumulates this index.  The file's extension is foo.
% The name of an index should be no more than 2 characters long
% for the sake of vms.
%
\def\newindex#1{%
  \iflinks
    \expandafter\newwrite \csname#1indfile\endcsname
    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
  \fi
  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
    \noexpand\doindex{#1}}
}

% @defindex foo  ==  \newindex{foo}
%
\def\defindex{\parsearg\newindex}

% Define @defcodeindex, like @defindex except put all entries in @code.
%
\def\defcodeindex{\parsearg\newcodeindex}
%
\def\newcodeindex#1{%
  \iflinks
    \expandafter\newwrite \csname#1indfile\endcsname
    \openout \csname#1indfile\endcsname \jobname.#1
  \fi
  \expandafter\xdef\csname#1index\endcsname{%
    \noexpand\docodeindex{#1}}%
}


% @synindex foo bar    makes index foo feed into index bar.
% Do this instead of @defindex foo if you don't want it as a separate index.
%
% @syncodeindex foo bar   similar, but put all entries made for index foo
% inside @code.
%
\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}

% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
% #3 the target index (bar).
\def\dosynindex#1#2#3{%
  % Only do \closeout if we haven't already done it, else we'll end up
  % closing the target index.
  \expandafter \ifx\csname donesynindex#2\endcsname \relax
    % The \closeout helps reduce unnecessary open files; the limit on the
    % Acorn RISC OS is a mere 16 files.
    \expandafter\closeout\csname#2indfile\endcsname
    \expandafter\let\csname donesynindex#2\endcsname = 1
  \fi
  % redefine \fooindfile:
  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
  \expandafter\let\csname#2indfile\endcsname=\temp
  % redefine \fooindex:
  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
}

% Define \doindex, the driver for all \fooindex macros.
% Argument #1 is generated by the calling \fooindex macro,
%  and it is "foo", the name of the index.

% \doindex just uses \parsearg; it calls \doind for the actual work.
% This is because \doind is more useful to call from other macros.

% There is also \dosubind {index}{topic}{subtopic}
% which makes an entry in a two-level index such as the operation index.

\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
\def\singleindexer #1{\doind{\indexname}{#1}}

% like the previous two, but they put @code around the argument.
\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}

% Take care of Texinfo commands that can appear in an index entry.
% Since there are some commands we want to expand, and others we don't,
% we have to laboriously prevent expansion for those that we don't.
%
\def\indexdummies{%
  \escapechar = `\\     % use backslash in output files.
  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
  \def\ {\realbackslash\space }%
  %
  % Need these in case \tex is in effect and \{ is a \delimiter again.
  % But can't use \lbracecmd and \rbracecmd because texindex assumes
  % braces and backslashes are used only as delimiters.
  \let\{ = \mylbrace
  \let\} = \myrbrace
  %
  % I don't entirely understand this, but when an index entry is
  % generated from a macro call, the \endinput which \scanmacro inserts
  % causes processing to be prematurely terminated.  This is,
  % apparently, because \indexsorttmp is fully expanded, and \endinput
  % is an expandable command.  The redefinition below makes \endinput
  % disappear altogether for that purpose -- although logging shows that
  % processing continues to some further point.  On the other hand, it
  % seems \endinput does not hurt in the printed index arg, since that
  % is still getting written without apparent harm.
  %
  % Sample source (mac-idx3.tex, reported by Graham Percival to
  % help-texinfo, 22may06):
  % @macro funindex {WORD}
  % @findex xyz
  % @end macro
  % ...
  % @funindex commtest
  %
  % The above is not enough to reproduce the bug, but it gives the flavor.
  %
  % Sample whatsit resulting:
  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
  %
  % So:
  \let\endinput = \empty
  %
  % Do the redefinitions.
  \commondummies
}

% For the aux and toc files, @ is the escape character.  So we want to
% redefine everything using @ as the escape character (instead of
% \realbackslash, still used for index files).  When everything uses @,
% this will be simpler.
%
\def\atdummies{%
  \def\@{@@}%
  \def\ {@ }%
  \let\{ = \lbraceatcmd
  \let\} = \rbraceatcmd
  %
  % Do the redefinitions.
  \commondummies
  \otherbackslash
}

% Called from \indexdummies and \atdummies.
%
\def\commondummies{%
  %
  % \definedummyword defines \#1 as \string\#1\space, thus effectively
  % preventing its expansion.  This is used only for control% words,
  % not control letters, because the \space would be incorrect for
  % control characters, but is needed to separate the control word
  % from whatever follows.
  %
  % For control letters, we have \definedummyletter, which omits the
  % space.
  %
  % These can be used both for control words that take an argument and
  % those that do not.  If it is followed by {arg} in the input, then
  % that will dutifully get written to the index (or wherever).
  %
  \def\definedummyword  ##1{\def##1{\string##1\space}}%
  \def\definedummyletter##1{\def##1{\string##1}}%
  \let\definedummyaccent\definedummyletter
  %
  \commondummiesnofonts
  %
  \definedummyletter\_%
  %
  % Non-English letters.
  \definedummyword\AA
  \definedummyword\AE
  \definedummyword\DH
  \definedummyword\L
  \definedummyword\O
  \definedummyword\OE
  \definedummyword\TH
  \definedummyword\aa
  \definedummyword\ae
  \definedummyword\dh
  \definedummyword\exclamdown
  \definedummyword\l
  \definedummyword\o
  \definedummyword\oe
  \definedummyword\ordf
  \definedummyword\ordm
  \definedummyword\questiondown
  \definedummyword\ss
  \definedummyword\th
  %
  % Although these internal commands shouldn't show up, sometimes they do.
  \definedummyword\bf
  \definedummyword\gtr
  \definedummyword\hat
  \definedummyword\less
  \definedummyword\sf
  \definedummyword\sl
  \definedummyword\tclose
  \definedummyword\tt
  %
  \definedummyword\LaTeX
  \definedummyword\TeX
  %
  % Assorted special characters.
  \definedummyword\bullet
  \definedummyword\comma
  \definedummyword\copyright
  \definedummyword\registeredsymbol
  \definedummyword\dots
  \definedummyword\enddots
  \definedummyword\equiv
  \definedummyword\error
  \definedummyword\euro
  \definedummyword\guillemetleft
  \definedummyword\guillemetright
  \definedummyword\guilsinglleft
  \definedummyword\guilsinglright
  \definedummyword\expansion
  \definedummyword\minus
  \definedummyword\ogonek
  \definedummyword\pounds
  \definedummyword\point
  \definedummyword\print
  \definedummyword\quotedblbase
  \definedummyword\quotedblleft
  \definedummyword\quotedblright
  \definedummyword\quoteleft
  \definedummyword\quoteright
  \definedummyword\quotesinglbase
  \definedummyword\result
  \definedummyword\textdegree
  %
  % We want to disable all macros so that they are not expanded by \write.
  \macrolist
  %
  \normalturnoffactive
  %
  % Handle some cases of @value -- where it does not contain any
  % (non-fully-expandable) commands.
  \makevalueexpandable
}

% \commondummiesnofonts: common to \commondummies and \indexnofonts.
%
\def\commondummiesnofonts{%
  % Control letters and accents.
  \definedummyletter\!%
  \definedummyaccent\"%
  \definedummyaccent\'%
  \definedummyletter\*%
  \definedummyaccent\,%
  \definedummyletter\.%
  \definedummyletter\/%
  \definedummyletter\:%
  \definedummyaccent\=%
  \definedummyletter\?%
  \definedummyaccent\^%
  \definedummyaccent\`%
  \definedummyaccent\~%
  \definedummyword\u
  \definedummyword\v
  \definedummyword\H
  \definedummyword\dotaccent
  \definedummyword\ogonek
  \definedummyword\ringaccent
  \definedummyword\tieaccent
  \definedummyword\ubaraccent
  \definedummyword\udotaccent
  \definedummyword\dotless
  %
  % Texinfo font commands.
  \definedummyword\b
  \definedummyword\i
  \definedummyword\r
  \definedummyword\sc
  \definedummyword\t
  %
  % Commands that take arguments.
  \definedummyword\acronym
  \definedummyword\cite
  \definedummyword\code
  \definedummyword\command
  \definedummyword\dfn
  \definedummyword\email
  \definedummyword\emph
  \definedummyword\env
  \definedummyword\file
  \definedummyword\kbd
  \definedummyword\key
  \definedummyword\math
  \definedummyword\option
  \definedummyword\pxref
  \definedummyword\ref
  \definedummyword\samp
  \definedummyword\strong
  \definedummyword\tie
  \definedummyword\uref
  \definedummyword\url
  \definedummyword\var
  \definedummyword\verb
  \definedummyword\w
  \definedummyword\xref
}

% \indexnofonts is used when outputting the strings to sort the index
% by, and when constructing control sequence names.  It eliminates all
% control sequences and just writes whatever the best ASCII sort string
% would be for a given command (usually its argument).
%
\def\indexnofonts{%
  % Accent commands should become @asis.
  \def\definedummyaccent##1{\let##1\asis}%
  % We can just ignore other control letters.
  \def\definedummyletter##1{\let##1\empty}%
  % Hopefully, all control words can become @asis.
  \let\definedummyword\definedummyaccent
  %
  \commondummiesnofonts
  %
  % Don't no-op \tt, since it isn't a user-level command
  % and is used in the definitions of the active chars like <, >, |, etc.
  % Likewise with the other plain tex font commands.
  %\let\tt=\asis
  %
  \def\ { }%
  \def\@{@}%
  % how to handle braces?
  \def\_{\normalunderscore}%
  %
  % Non-English letters.
  \def\AA{AA}%
  \def\AE{AE}%
  \def\DH{DZZ}%
  \def\L{L}%
  \def\OE{OE}%
  \def\O{O}%
  \def\TH{ZZZ}%
  \def\aa{aa}%
  \def\ae{ae}%
  \def\dh{dzz}%
  \def\exclamdown{!}%
  \def\l{l}%
  \def\oe{oe}%
  \def\ordf{a}%
  \def\ordm{o}%
  \def\o{o}%
  \def\questiondown{?}%
  \def\ss{ss}%
  \def\th{zzz}%
  %
  \def\LaTeX{LaTeX}%
  \def\TeX{TeX}%
  %
  % Assorted special characters.
  % (The following {} will end up in the sort string, but that's ok.)
  \def\bullet{bullet}%
  \def\comma{,}%
  \def\copyright{copyright}%
  \def\dots{...}%
  \def\enddots{...}%
  \def\equiv{==}%
  \def\error{error}%
  \def\euro{euro}%
  \def\expansion{==>}%
  \def\guillemetleft{<<}%
  \def\guillemetright{>>}%
  \def\guilsinglleft{<}%
  \def\guilsinglright{>}%
  \def\minus{-}%
  \def\point{.}%
  \def\pounds{pounds}%
  \def\print{-|}%
  \def\quotedblbase{"}%
  \def\quotedblleft{"}%
  \def\quotedblright{"}%
  \def\quoteleft{`}%
  \def\quoteright{'}%
  \def\quotesinglbase{,}%
  \def\registeredsymbol{R}%
  \def\result{=>}%
  \def\textdegree{o}%
  %
  % We need to get rid of all macros, leaving only the arguments (if present).
  % Of course this is not nearly correct, but it is the best we can do for now.
  % makeinfo does not expand macros in the argument to @deffn, which ends up
  % writing an index entry, and texindex isn't prepared for an index sort entry
  % that starts with \.
  %
  % Since macro invocations are followed by braces, we can just redefine them
  % to take a single TeX argument.  The case of a macro invocation that
  % goes to end-of-line is not handled.
  %
  \macrolist
}

\let\indexbackslash=0  %overridden during \printindex.
\let\SETmarginindex=\relax % put index entries in margin (undocumented)?

% Most index entries go through here, but \dosubind is the general case.
% #1 is the index name, #2 is the entry text.
\def\doind#1#2{\dosubind{#1}{#2}{}}

% Workhorse for all \fooindexes.
% #1 is name of index, #2 is stuff to put there, #3 is subentry --
% empty if called from \doind, as we usually are (the main exception
% is with most defuns, which call us directly).
%
\def\dosubind#1#2#3{%
  \iflinks
  {%
    % Store the main index entry text (including the third arg).
    \toks0 = {#2}%
    % If third arg is present, precede it with a space.
    \def\thirdarg{#3}%
    \ifx\thirdarg\empty \else
      \toks0 = \expandafter{\the\toks0 \space #3}%
    \fi
    %
    \edef\writeto{\csname#1indfile\endcsname}%
    %
    \safewhatsit\dosubindwrite
  }%
  \fi
}

% Write the entry in \toks0 to the index file:
%
\def\dosubindwrite{%
  % Put the index entry in the margin if desired.
  \ifx\SETmarginindex\relax\else
    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
  \fi
  %
  % Remember, we are within a group.
  \indexdummies % Must do this here, since \bf, etc expand at this stage
  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
      % so it will be output as is; and it will print as backslash.
  %
  % Process the index entry with all font commands turned off, to
  % get the string to sort by.
  {\indexnofonts
   \edef\temp{\the\toks0}% need full expansion
   \xdef\indexsorttmp{\temp}%
  }%
  %
  % Set up the complete index entry, with both the sort key and
  % the original text, including any font commands.  We write
  % three arguments to \entry to the .?? file (four in the
  % subentry case), texindex reduces to two when writing the .??s
  % sorted result.
  \edef\temp{%
    \write\writeto{%
      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
  }%
  \temp
}

% Take care of unwanted page breaks/skips around a whatsit:
%
% If a skip is the last thing on the list now, preserve it
% by backing up by \lastskip, doing the \write, then inserting
% the skip again.  Otherwise, the whatsit generated by the
% \write or \pdfdest will make \lastskip zero.  The result is that
% sequences like this:
% @end defun
% @tindex whatever
% @defun ...
% will have extra space inserted, because the \medbreak in the
% start of the @defun won't see the skip inserted by the @end of
% the previous defun.
%
% But don't do any of this if we're not in vertical mode.  We
% don't want to do a \vskip and prematurely end a paragraph.
%
% Avoid page breaks due to these extra skips, too.
%
% But wait, there is a catch there:
% We'll have to check whether \lastskip is zero skip.  \ifdim is not
% sufficient for this purpose, as it ignores stretch and shrink parts
% of the skip.  The only way seems to be to check the textual
% representation of the skip.
%
% The following is almost like \def\zeroskipmacro{0.0pt} except that
% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
%
\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
%
\newskip\whatsitskip
\newcount\whatsitpenalty
%
% ..., ready, GO:
%
\def\safewhatsit#1{%
\ifhmode
  #1%
\else
  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
  \whatsitskip = \lastskip
  \edef\lastskipmacro{\the\lastskip}%
  \whatsitpenalty = \lastpenalty
  %
  % If \lastskip is nonzero, that means the last item was a
  % skip.  And since a skip is discardable, that means this
  % -\whatsitskip glue we're inserting is preceded by a
  % non-discardable item, therefore it is not a potential
  % breakpoint, therefore no \nobreak needed.
  \ifx\lastskipmacro\zeroskipmacro
  \else
    \vskip-\whatsitskip
  \fi
  %
  #1%
  %
  \ifx\lastskipmacro\zeroskipmacro
    % If \lastskip was zero, perhaps the last item was a penalty, and
    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
    % to re-insert the same penalty (values >10000 are used for various
    % signals); since we just inserted a non-discardable item, any
    % following glue (such as a \parskip) would be a breakpoint.  For example:
    %
    %   @deffn deffn-whatever
    %   @vindex index-whatever
    %   Description.
    % would allow a break between the index-whatever whatsit
    % and the "Description." paragraph.
    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
  \else
    % On the other hand, if we had a nonzero \lastskip,
    % this make-up glue would be preceded by a non-discardable item
    % (the whatsit from the \write), so we must insert a \nobreak.
    \nobreak\vskip\whatsitskip
  \fi
\fi
}

% The index entry written in the file actually looks like
%  \entry {sortstring}{page}{topic}
% or
%  \entry {sortstring}{page}{topic}{subtopic}
% The texindex program reads in these files and writes files
% containing these kinds of lines:
%  \initial {c}
%     before the first topic whose initial is c
%  \entry {topic}{pagelist}
%     for a topic that is used without subtopics
%  \primary {topic}
%     for the beginning of a topic that is used with subtopics
%  \secondary {subtopic}{pagelist}
%     for each subtopic.

% Define the user-accessible indexing commands
% @findex, @vindex, @kindex, @cindex.

\def\findex {\fnindex}
\def\kindex {\kyindex}
\def\cindex {\cpindex}
\def\vindex {\vrindex}
\def\tindex {\tpindex}
\def\pindex {\pgindex}

\def\cindexsub {\begingroup\obeylines\cindexsub}
{\obeylines %
\gdef\cindexsub "#1" #2^^M{\endgroup %
\dosubind{cp}{#2}{#1}}}

% Define the macros used in formatting output of the sorted index material.

% @printindex causes a particular index (the ??s file) to get printed.
% It does not print any chapter heading (usually an @unnumbered).
%
\parseargdef\printindex{\begingroup
  \dobreak \chapheadingskip{10000}%
  %
  \smallfonts \rm
  \tolerance = 9500
  \plainfrenchspacing
  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
  %
  % See if the index file exists and is nonempty.
  % Change catcode of @ here so that if the index file contains
  % \initial {@}
  % as its first line, TeX doesn't complain about mismatched braces
  % (because it thinks @} is a control sequence).
  \catcode`\@ = 11
  \openin 1 \jobname.#1s
  \ifeof 1
    % \enddoublecolumns gets confused if there is no text in the index,
    % and it loses the chapter title and the aux file entries for the
    % index.  The easiest way to prevent this problem is to make sure
    % there is some text.
    \putwordIndexNonexistent
  \else
    %
    % If the index file exists but is empty, then \openin leaves \ifeof
    % false.  We have to make TeX try to read something from the file, so
    % it can discover if there is anything in it.
    \read 1 to \temp
    \ifeof 1
      \putwordIndexIsEmpty
    \else
      % Index files are almost Texinfo source, but we use \ as the escape
      % character.  It would be better to use @, but that's too big a change
      % to make right now.
      \def\indexbackslash{\backslashcurfont}%
      \catcode`\\ = 0
      \escapechar = `\\
      \begindoublecolumns
      \input \jobname.#1s
      \enddoublecolumns
    \fi
  \fi
  \closein 1
\endgroup}

% These macros are used by the sorted index file itself.
% Change them to control the appearance of the index.

\def\initial#1{{%
  % Some minor font changes for the special characters.
  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
  %
  % Remove any glue we may have, we'll be inserting our own.
  \removelastskip
  %
  % We like breaks before the index initials, so insert a bonus.
  \nobreak
  \vskip 0pt plus 3\baselineskip
  \penalty 0
  \vskip 0pt plus -3\baselineskip
  %
  % Typeset the initial.  Making this add up to a whole number of
  % baselineskips increases the chance of the dots lining up from column
  % to column.  It still won't often be perfect, because of the stretch
  % we need before each entry, but it's better.
  %
  % No shrink because it confuses \balancecolumns.
  \vskip 1.67\baselineskip plus .5\baselineskip
  \leftline{\secbf #1}%
  % Do our best not to break after the initial.
  \nobreak
  \vskip .33\baselineskip plus .1\baselineskip
}}

% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
% then page number (#2) flushed to the right margin.  It is used for index
% and table of contents entries.  The paragraph is indented by \leftskip.
%
% A straightforward implementation would start like this:
%	\def\entry#1#2{...
% But this freezes the catcodes in the argument, and can cause problems to
% @code, which sets - active.  This problem was fixed by a kludge---
% ``-'' was active throughout whole index, but this isn't really right.
%
% The right solution is to prevent \entry from swallowing the whole text.
%                                 --kasal, 21nov03
\def\entry{%
  \begingroup
    %
    % Start a new paragraph if necessary, so our assignments below can't
    % affect previous text.
    \par
    %
    % Do not fill out the last line with white space.
    \parfillskip = 0in
    %
    % No extra space above this paragraph.
    \parskip = 0in
    %
    % Do not prefer a separate line ending with a hyphen to fewer lines.
    \finalhyphendemerits = 0
    %
    % \hangindent is only relevant when the entry text and page number
    % don't both fit on one line.  In that case, bob suggests starting the
    % dots pretty far over on the line.  Unfortunately, a large
    % indentation looks wrong when the entry text itself is broken across
    % lines.  So we use a small indentation and put up with long leaders.
    %
    % \hangafter is reset to 1 (which is the value we want) at the start
    % of each paragraph, so we need not do anything with that.
    \hangindent = 2em
    %
    % When the entry text needs to be broken, just fill out the first line
    % with blank space.
    \rightskip = 0pt plus1fil
    %
    % A bit of stretch before each entry for the benefit of balancing
    % columns.
    \vskip 0pt plus1pt
    %
    % Swallow the left brace of the text (first parameter):
    \afterassignment\doentry
    \let\temp =
}
\def\doentry{%
    \bgroup % Instead of the swallowed brace.
      \noindent
      \aftergroup\finishentry
      % And now comes the text of the entry.
}
\def\finishentry#1{%
    % #1 is the page number.
    %
    % The following is kludged to not output a line of dots in the index if
    % there are no page numbers.  The next person who breaks this will be
    % cursed by a Unix daemon.
    \setbox\boxA = \hbox{#1}%
    \ifdim\wd\boxA = 0pt
      \ %
    \else
      %
      % If we must, put the page number on a line of its own, and fill out
      % this line with blank space.  (The \hfil is overwhelmed with the
      % fill leaders glue in \indexdotfill if the page number does fit.)
      \hfil\penalty50
      \null\nobreak\indexdotfill % Have leaders before the page number.
      %
      % The `\ ' here is removed by the implicit \unskip that TeX does as
      % part of (the primitive) \par.  Without it, a spurious underfull
      % \hbox ensues.
      \ifpdf
	\pdfgettoks#1.%
	\ \the\toksA
      \else
	\ #1%
      \fi
    \fi
    \par
  \endgroup
}

% Like plain.tex's \dotfill, except uses up at least 1 em.
\def\indexdotfill{\cleaders
  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}

\def\primary #1{\line{#1\hfil}}

\newskip\secondaryindent \secondaryindent=0.5cm
\def\secondary#1#2{{%
  \parfillskip=0in
  \parskip=0in
  \hangindent=1in
  \hangafter=1
  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
  \ifpdf
    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
  \else
    #2
  \fi
  \par
}}

% Define two-column mode, which we use to typeset indexes.
% Adapted from the TeXbook, page 416, which is to say,
% the manmac.tex format used to print the TeXbook itself.
\catcode`\@=11

\newbox\partialpage
\newdimen\doublecolumnhsize

\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
  % Grab any single-column material above us.
  \output = {%
    %
    % Here is a possibility not foreseen in manmac: if we accumulate a
    % whole lot of material, we might end up calling this \output
    % routine twice in a row (see the doublecol-lose test, which is
    % essentially a couple of indexes with @setchapternewpage off).  In
    % that case we just ship out what is in \partialpage with the normal
    % output routine.  Generally, \partialpage will be empty when this
    % runs and this will be a no-op.  See the indexspread.tex test case.
    \ifvoid\partialpage \else
      \onepageout{\pagecontents\partialpage}%
    \fi
    %
    \global\setbox\partialpage = \vbox{%
      % Unvbox the main output page.
      \unvbox\PAGE
      \kern-\topskip \kern\baselineskip
    }%
  }%
  \eject % run that output routine to set \partialpage
  %
  % Use the double-column output routine for subsequent pages.
  \output = {\doublecolumnout}%
  %
  % Change the page size parameters.  We could do this once outside this
  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
  % format, but then we repeat the same computation.  Repeating a couple
  % of assignments once per index is clearly meaningless for the
  % execution time, so we may as well do it in one place.
  %
  % First we halve the line length, less a little for the gutter between
  % the columns.  We compute the gutter based on the line length, so it
  % changes automatically with the paper format.  The magic constant
  % below is chosen so that the gutter has the same value (well, +-<1pt)
  % as it did when we hard-coded it.
  %
  % We put the result in a separate register, \doublecolumhsize, so we
  % can restore it in \pagesofar, after \hsize itself has (potentially)
  % been clobbered.
  %
  \doublecolumnhsize = \hsize
    \advance\doublecolumnhsize by -.04154\hsize
    \divide\doublecolumnhsize by 2
  \hsize = \doublecolumnhsize
  %
  % Double the \vsize as well.  (We don't need a separate register here,
  % since nobody clobbers \vsize.)
  \vsize = 2\vsize
}

% The double-column output routine for all double-column pages except
% the last.
%
\def\doublecolumnout{%
  \splittopskip=\topskip \splitmaxdepth=\maxdepth
  % Get the available space for the double columns -- the normal
  % (undoubled) page height minus any material left over from the
  % previous page.
  \dimen@ = \vsize
  \divide\dimen@ by 2
  \advance\dimen@ by -\ht\partialpage
  %
  % box0 will be the left-hand column, box2 the right.
  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
  \onepageout\pagesofar
  \unvbox255
  \penalty\outputpenalty
}
%
% Re-output the contents of the output page -- any previous material,
% followed by the two boxes we just split, in box0 and box2.
\def\pagesofar{%
  \unvbox\partialpage
  %
  \hsize = \doublecolumnhsize
  \wd0=\hsize \wd2=\hsize
  \hbox to\pagewidth{\box0\hfil\box2}%
}
%
% All done with double columns.
\def\enddoublecolumns{%
  % The following penalty ensures that the page builder is exercised
  % _before_ we change the output routine.  This is necessary in the
  % following situation:
  %
  % The last section of the index consists only of a single entry.
  % Before this section, \pagetotal is less than \pagegoal, so no
  % break occurs before the last section starts.  However, the last
  % section, consisting of \initial and the single \entry, does not
  % fit on the page and has to be broken off.  Without the following
  % penalty the page builder will not be exercised until \eject
  % below, and by that time we'll already have changed the output
  % routine to the \balancecolumns version, so the next-to-last
  % double-column page will be processed with \balancecolumns, which
  % is wrong:  The two columns will go to the main vertical list, with
  % the broken-off section in the recent contributions.  As soon as
  % the output routine finishes, TeX starts reconsidering the page
  % break.  The two columns and the broken-off section both fit on the
  % page, because the two columns now take up only half of the page
  % goal.  When TeX sees \eject from below which follows the final
  % section, it invokes the new output routine that we've set after
  % \balancecolumns below; \onepageout will try to fit the two columns
  % and the final section into the vbox of \pageheight (see
  % \pagebody), causing an overfull box.
  %
  % Note that glue won't work here, because glue does not exercise the
  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
  \penalty0
  %
  \output = {%
    % Split the last of the double-column material.  Leave it on the
    % current page, no automatic page break.
    \balancecolumns
    %
    % If we end up splitting too much material for the current page,
    % though, there will be another page break right after this \output
    % invocation ends.  Having called \balancecolumns once, we do not
    % want to call it again.  Therefore, reset \output to its normal
    % definition right away.  (We hope \balancecolumns will never be
    % called on to balance too much material, but if it is, this makes
    % the output somewhat more palatable.)
    \global\output = {\onepageout{\pagecontents\PAGE}}%
  }%
  \eject
  \endgroup % started in \begindoublecolumns
  %
  % \pagegoal was set to the doubled \vsize above, since we restarted
  % the current page.  We're now back to normal single-column
  % typesetting, so reset \pagegoal to the normal \vsize (after the
  % \endgroup where \vsize got restored).
  \pagegoal = \vsize
}
%
% Called at the end of the double column material.
\def\balancecolumns{%
  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
  \dimen@ = \ht0
  \advance\dimen@ by \topskip
  \advance\dimen@ by-\baselineskip
  \divide\dimen@ by 2 % target to split to
  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
  \splittopskip = \topskip
  % Loop until we get a decent breakpoint.
  {%
    \vbadness = 10000
    \loop
      \global\setbox3 = \copy0
      \global\setbox1 = \vsplit3 to \dimen@
    \ifdim\ht3>\dimen@
      \global\advance\dimen@ by 1pt
    \repeat
  }%
  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
  \setbox0=\vbox to\dimen@{\unvbox1}%
  \setbox2=\vbox to\dimen@{\unvbox3}%
  %
  \pagesofar
}
\catcode`\@ = \other


\message{sectioning,}
% Chapters, sections, etc.

% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
% sections so that we can refer to them unambiguously in the pdf
% outlines by their "section number".  We avoid collisions with chapter
% numbers by starting them at 10000.  (If a document ever has 10000
% chapters, we're in trouble anyway, I'm sure.)
\newcount\unnumberedno \unnumberedno = 10000
\newcount\chapno
\newcount\secno        \secno=0
\newcount\subsecno     \subsecno=0
\newcount\subsubsecno  \subsubsecno=0

% This counter is funny since it counts through charcodes of letters A, B, ...
\newcount\appendixno  \appendixno = `\@
%
% \def\appendixletter{\char\the\appendixno}
% We do the following ugly conditional instead of the above simple
% construct for the sake of pdftex, which needs the actual
% letter in the expansion, not just typeset.
%
\def\appendixletter{%
  \ifnum\appendixno=`A A%
  \else\ifnum\appendixno=`B B%
  \else\ifnum\appendixno=`C C%
  \else\ifnum\appendixno=`D D%
  \else\ifnum\appendixno=`E E%
  \else\ifnum\appendixno=`F F%
  \else\ifnum\appendixno=`G G%
  \else\ifnum\appendixno=`H H%
  \else\ifnum\appendixno=`I I%
  \else\ifnum\appendixno=`J J%
  \else\ifnum\appendixno=`K K%
  \else\ifnum\appendixno=`L L%
  \else\ifnum\appendixno=`M M%
  \else\ifnum\appendixno=`N N%
  \else\ifnum\appendixno=`O O%
  \else\ifnum\appendixno=`P P%
  \else\ifnum\appendixno=`Q Q%
  \else\ifnum\appendixno=`R R%
  \else\ifnum\appendixno=`S S%
  \else\ifnum\appendixno=`T T%
  \else\ifnum\appendixno=`U U%
  \else\ifnum\appendixno=`V V%
  \else\ifnum\appendixno=`W W%
  \else\ifnum\appendixno=`X X%
  \else\ifnum\appendixno=`Y Y%
  \else\ifnum\appendixno=`Z Z%
  % The \the is necessary, despite appearances, because \appendixletter is
  % expanded while writing the .toc file.  \char\appendixno is not
  % expandable, thus it is written literally, thus all appendixes come out
  % with the same letter (or @) in the toc without it.
  \else\char\the\appendixno
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}

% Each @chapter defines these (using marks) as the number+name, number
% and name of the chapter.  Page headings and footings can use
% these.  @section does likewise.
\def\thischapter{}
\def\thischapternum{}
\def\thischaptername{}
\def\thissection{}
\def\thissectionnum{}
\def\thissectionname{}

\newcount\absseclevel % used to calculate proper heading level
\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count

% @raisesections: treat @section as chapter, @subsection as section, etc.
\def\raisesections{\global\advance\secbase by -1}
\let\up=\raisesections % original BFox name

% @lowersections: treat @chapter as section, @section as subsection, etc.
\def\lowersections{\global\advance\secbase by 1}
\let\down=\lowersections % original BFox name

% we only have subsub.
\chardef\maxseclevel = 3
%
% A numbered section within an unnumbered changes to unnumbered too.
% To achive this, remember the "biggest" unnum. sec. we are currently in:
\chardef\unmlevel = \maxseclevel
%
% Trace whether the current chapter is an appendix or not:
% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
\def\chapheadtype{N}

% Choose a heading macro
% #1 is heading type
% #2 is heading level
% #3 is text for heading
\def\genhead#1#2#3{%
  % Compute the abs. sec. level:
  \absseclevel=#2
  \advance\absseclevel by \secbase
  % Make sure \absseclevel doesn't fall outside the range:
  \ifnum \absseclevel < 0
    \absseclevel = 0
  \else
    \ifnum \absseclevel > 3
      \absseclevel = 3
    \fi
  \fi
  % The heading type:
  \def\headtype{#1}%
  \if \headtype U%
    \ifnum \absseclevel < \unmlevel
      \chardef\unmlevel = \absseclevel
    \fi
  \else
    % Check for appendix sections:
    \ifnum \absseclevel = 0
      \edef\chapheadtype{\headtype}%
    \else
      \if \headtype A\if \chapheadtype N%
	\errmessage{@appendix... within a non-appendix chapter}%
      \fi\fi
    \fi
    % Check for numbered within unnumbered:
    \ifnum \absseclevel > \unmlevel
      \def\headtype{U}%
    \else
      \chardef\unmlevel = 3
    \fi
  \fi
  % Now print the heading:
  \if \headtype U%
    \ifcase\absseclevel
	\unnumberedzzz{#3}%
    \or \unnumberedseczzz{#3}%
    \or \unnumberedsubseczzz{#3}%
    \or \unnumberedsubsubseczzz{#3}%
    \fi
  \else
    \if \headtype A%
      \ifcase\absseclevel
	  \appendixzzz{#3}%
      \or \appendixsectionzzz{#3}%
      \or \appendixsubseczzz{#3}%
      \or \appendixsubsubseczzz{#3}%
      \fi
    \else
      \ifcase\absseclevel
	  \chapterzzz{#3}%
      \or \seczzz{#3}%
      \or \numberedsubseczzz{#3}%
      \or \numberedsubsubseczzz{#3}%
      \fi
    \fi
  \fi
  \suppressfirstparagraphindent
}

% an interface:
\def\numhead{\genhead N}
\def\apphead{\genhead A}
\def\unnmhead{\genhead U}

% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
% all lower-level sectioning counters to zero.
%
% Also set \chaplevelprefix, which we prepend to @float sequence numbers
% (e.g., figures), q.v.  By default (before any chapter), that is empty.
\let\chaplevelprefix = \empty
%
\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
\def\chapterzzz#1{%
  % section resetting is \global in case the chapter is in a group, such
  % as an @include file.
  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    \global\advance\chapno by 1
  %
  % Used for \float.
  \gdef\chaplevelprefix{\the\chapno.}%
  \resetallfloatnos
  %
  % \putwordChapter can contain complex things in translations.
  \toks0=\expandafter{\putwordChapter}%
  \message{\the\toks0 \space \the\chapno}%
  %
  % Write the actual heading.
  \chapmacro{#1}{Ynumbered}{\the\chapno}%
  %
  % So @section and the like are numbered underneath this chapter.
  \global\let\section = \numberedsec
  \global\let\subsection = \numberedsubsec
  \global\let\subsubsection = \numberedsubsubsec
}

\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
%
\def\appendixzzz#1{%
  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    \global\advance\appendixno by 1
  \gdef\chaplevelprefix{\appendixletter.}%
  \resetallfloatnos
  %
  % \putwordAppendix can contain complex things in translations.
  \toks0=\expandafter{\putwordAppendix}%
  \message{\the\toks0 \space \appendixletter}%
  %
  \chapmacro{#1}{Yappendix}{\appendixletter}%
  %
  \global\let\section = \appendixsec
  \global\let\subsection = \appendixsubsec
  \global\let\subsubsection = \appendixsubsubsec
}

\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
\def\unnumberedzzz#1{%
  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    \global\advance\unnumberedno by 1
  %
  % Since an unnumbered has no number, no prefix for figures.
  \global\let\chaplevelprefix = \empty
  \resetallfloatnos
  %
  % This used to be simply \message{#1}, but TeX fully expands the
  % argument to \message.  Therefore, if #1 contained @-commands, TeX
  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
  % expanded @cite (which turns out to cause errors because \cite is meant
  % to be executed, not expanded).
  %
  % Anyway, we don't want the fully-expanded definition of @cite to appear
  % as a result of the \message, we just want `@cite' itself.  We use
  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
  % simply yielding the contents of <toks register>.  (We also do this for
  % the toc entries.)
  \toks0 = {#1}%
  \message{(\the\toks0)}%
  %
  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
  %
  \global\let\section = \unnumberedsec
  \global\let\subsection = \unnumberedsubsec
  \global\let\subsubsection = \unnumberedsubsubsec
}

% @centerchap is like @unnumbered, but the heading is centered.
\outer\parseargdef\centerchap{%
  % Well, we could do the following in a group, but that would break
  % an assumption that \chapmacro is called at the outermost level.
  % Thus we are safer this way:		--kasal, 24feb04
  \let\centerparametersmaybe = \centerparameters
  \unnmhead0{#1}%
  \let\centerparametersmaybe = \relax
}

% @top is like @unnumbered.
\let\top\unnumbered

% Sections.
\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
\def\seczzz#1{%
  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
}

\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
\def\appendixsectionzzz#1{%
  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
}
\let\appendixsec\appendixsection

\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
\def\unnumberedseczzz#1{%
  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
}

% Subsections.
\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
\def\numberedsubseczzz#1{%
  \global\subsubsecno=0  \global\advance\subsecno by 1
  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
}

\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
\def\appendixsubseczzz#1{%
  \global\subsubsecno=0  \global\advance\subsecno by 1
  \sectionheading{#1}{subsec}{Yappendix}%
                 {\appendixletter.\the\secno.\the\subsecno}%
}

\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
\def\unnumberedsubseczzz#1{%
  \global\subsubsecno=0  \global\advance\subsecno by 1
  \sectionheading{#1}{subsec}{Ynothing}%
                 {\the\unnumberedno.\the\secno.\the\subsecno}%
}

% Subsubsections.
\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
\def\numberedsubsubseczzz#1{%
  \global\advance\subsubsecno by 1
  \sectionheading{#1}{subsubsec}{Ynumbered}%
                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
}

\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
\def\appendixsubsubseczzz#1{%
  \global\advance\subsubsecno by 1
  \sectionheading{#1}{subsubsec}{Yappendix}%
                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
}

\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
\def\unnumberedsubsubseczzz#1{%
  \global\advance\subsubsecno by 1
  \sectionheading{#1}{subsubsec}{Ynothing}%
                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
}

% These macros control what the section commands do, according
% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
% Define them by default for a numbered chapter.
\let\section = \numberedsec
\let\subsection = \numberedsubsec
\let\subsubsection = \numberedsubsubsec

% Define @majorheading, @heading and @subheading

% NOTE on use of \vbox for chapter headings, section headings, and such:
%       1) We use \vbox rather than the earlier \line to permit
%          overlong headings to fold.
%       2) \hyphenpenalty is set to 10000 because hyphenation in a
%          heading is obnoxious; this forbids it.
%       3) Likewise, headings look best if no \parindent is used, and
%          if justification is not attempted.  Hence \raggedright.

\def\majorheading{%
  {\advance\chapheadingskip by 10pt \chapbreak }%
  \parsearg\chapheadingzzz
}

\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
\def\chapheadingzzz#1{%
  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                    \parindent=0pt\ptexraggedright
                    \rmisbold #1\hfill}}%
  \bigskip \par\penalty 200\relax
  \suppressfirstparagraphindent
}

% @heading, @subheading, @subsubheading.
\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
  \suppressfirstparagraphindent}
\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
  \suppressfirstparagraphindent}
\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
  \suppressfirstparagraphindent}

% These macros generate a chapter, section, etc. heading only
% (including whitespace, linebreaking, etc. around it),
% given all the information in convenient, parsed form.

%%% Args are the skip and penalty (usually negative)
\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}

%%% Define plain chapter starts, and page on/off switching for it
% Parameter controlling skip before chapter headings (if needed)

\newskip\chapheadingskip

\def\chapbreak{\dobreak \chapheadingskip {-4000}}
\def\chappager{\par\vfill\supereject}
% Because \domark is called before \chapoddpage, the filler page will
% get the headings for the next chapter, which is wrong.  But we don't
% care -- we just disable all headings on the filler page.
\def\chapoddpage{%
  \chappager
  \ifodd\pageno \else
    \begingroup
      \evenheadline={\hfil}\evenfootline={\hfil}%
      \oddheadline={\hfil}\oddfootline={\hfil}%
      \hbox to 0pt{}%
      \chappager
    \endgroup
  \fi
}

\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}

\def\CHAPPAGoff{%
\global\let\contentsalignmacro = \chappager
\global\let\pchapsepmacro=\chapbreak
\global\let\pagealignmacro=\chappager}

\def\CHAPPAGon{%
\global\let\contentsalignmacro = \chappager
\global\let\pchapsepmacro=\chappager
\global\let\pagealignmacro=\chappager
\global\def\HEADINGSon{\HEADINGSsingle}}

\def\CHAPPAGodd{%
\global\let\contentsalignmacro = \chapoddpage
\global\let\pchapsepmacro=\chapoddpage
\global\let\pagealignmacro=\chapoddpage
\global\def\HEADINGSon{\HEADINGSdouble}}

\CHAPPAGon

% Chapter opening.
%
% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
% Yappendix, Yomitfromtoc), #3 the chapter number.
%
% To test against our argument.
\def\Ynothingkeyword{Ynothing}
\def\Yomitfromtockeyword{Yomitfromtoc}
\def\Yappendixkeyword{Yappendix}
%
\def\chapmacro#1#2#3{%
  % Insert the first mark before the heading break (see notes for \domark).
  \let\prevchapterdefs=\lastchapterdefs
  \let\prevsectiondefs=\lastsectiondefs
  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
                        \gdef\thissection{}}%
  %
  \def\temptype{#2}%
  \ifx\temptype\Ynothingkeyword
    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
                          \gdef\thischapter{\thischaptername}}%
  \else\ifx\temptype\Yomitfromtockeyword
    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
                          \gdef\thischapter{}}%
  \else\ifx\temptype\Yappendixkeyword
    \toks0={#1}%
    \xdef\lastchapterdefs{%
      \gdef\noexpand\thischaptername{\the\toks0}%
      \gdef\noexpand\thischapternum{\appendixletter}%
      % \noexpand\putwordAppendix avoids expanding indigestible
      % commands in some of the translations.
      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
                                 \noexpand\thischapternum:
                                 \noexpand\thischaptername}%
    }%
  \else
    \toks0={#1}%
    \xdef\lastchapterdefs{%
      \gdef\noexpand\thischaptername{\the\toks0}%
      \gdef\noexpand\thischapternum{\the\chapno}%
      % \noexpand\putwordChapter avoids expanding indigestible
      % commands in some of the translations.
      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
                                 \noexpand\thischapternum:
                                 \noexpand\thischaptername}%
    }%
  \fi\fi\fi
  %
  % Output the mark.  Pass it through \safewhatsit, to take care of
  % the preceding space.
  \safewhatsit\domark
  %
  % Insert the chapter heading break.
  \pchapsepmacro
  %
  % Now the second mark, after the heading break.  No break points
  % between here and the heading.
  \let\prevchapterdefs=\lastchapterdefs
  \let\prevsectiondefs=\lastsectiondefs
  \domark
  %
  {%
    \chapfonts \rmisbold
    %
    % Have to define \lastsection before calling \donoderef, because the
    % xref code eventually uses it.  On the other hand, it has to be called
    % after \pchapsepmacro, or the headline will change too soon.
    \gdef\lastsection{#1}%
    %
    % Only insert the separating space if we have a chapter/appendix
    % number, and don't print the unnumbered ``number''.
    \ifx\temptype\Ynothingkeyword
      \setbox0 = \hbox{}%
      \def\toctype{unnchap}%
    \else\ifx\temptype\Yomitfromtockeyword
      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
      \def\toctype{omit}%
    \else\ifx\temptype\Yappendixkeyword
      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
      \def\toctype{app}%
    \else
      \setbox0 = \hbox{#3\enspace}%
      \def\toctype{numchap}%
    \fi\fi\fi
    %
    % Write the toc entry for this chapter.  Must come before the
    % \donoderef, because we include the current node name in the toc
    % entry, and \donoderef resets it to empty.
    \writetocentry{\toctype}{#1}{#3}%
    %
    % For pdftex, we have to write out the node definition (aka, make
    % the pdfdest) after any page break, but before the actual text has
    % been typeset.  If the destination for the pdf outline is after the
    % text, then jumping from the outline may wind up with the text not
    % being visible, for instance under high magnification.
    \donoderef{#2}%
    %
    % Typeset the actual heading.
    \nobreak % Avoid page breaks at the interline glue.
    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
          \hangindent=\wd0 \centerparametersmaybe
          \unhbox0 #1\par}%
  }%
  \nobreak\bigskip % no page break after a chapter title
  \nobreak
}

% @centerchap -- centered and unnumbered.
\let\centerparametersmaybe = \relax
\def\centerparameters{%
  \advance\rightskip by 3\rightskip
  \leftskip = \rightskip
  \parfillskip = 0pt
}


% I don't think this chapter style is supported any more, so I'm not
% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
%
\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
%
\def\unnchfopen #1{%
\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                       \parindent=0pt\ptexraggedright
                       \rmisbold #1\hfill}}\bigskip \par\nobreak
}
\def\chfopen #1#2{\chapoddpage {\chapfonts
\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
\par\penalty 5000 %
}
\def\centerchfopen #1{%
\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
                       \parindent=0pt
                       \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
}
\def\CHAPFopen{%
  \global\let\chapmacro=\chfopen
  \global\let\centerchapmacro=\centerchfopen}


% Section titles.  These macros combine the section number parts and
% call the generic \sectionheading to do the printing.
%
\newskip\secheadingskip
\def\secheadingbreak{\dobreak \secheadingskip{-1000}}

% Subsection titles.
\newskip\subsecheadingskip
\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}

% Subsubsection titles.
\def\subsubsecheadingskip{\subsecheadingskip}
\def\subsubsecheadingbreak{\subsecheadingbreak}


% Print any size, any type, section title.
%
% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
% section number.
%
\def\seckeyword{sec}
%
\def\sectionheading#1#2#3#4{%
  {%
    % Switch to the right set of fonts.
    \csname #2fonts\endcsname \rmisbold
    %
    \def\sectionlevel{#2}%
    \def\temptype{#3}%
    %
    % Insert first mark before the heading break (see notes for \domark).
    \let\prevsectiondefs=\lastsectiondefs
    \ifx\temptype\Ynothingkeyword
      \ifx\sectionlevel\seckeyword
        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
                              \gdef\thissection{\thissectionname}}%
      \fi
    \else\ifx\temptype\Yomitfromtockeyword
      % Don't redefine \thissection.
    \else\ifx\temptype\Yappendixkeyword
      \ifx\sectionlevel\seckeyword
        \toks0={#1}%
        \xdef\lastsectiondefs{%
          \gdef\noexpand\thissectionname{\the\toks0}%
          \gdef\noexpand\thissectionnum{#4}%
          % \noexpand\putwordSection avoids expanding indigestible
          % commands in some of the translations.
          \gdef\noexpand\thissection{\noexpand\putwordSection{}
                                     \noexpand\thissectionnum:
                                     \noexpand\thissectionname}%
        }%
      \fi
    \else
      \ifx\sectionlevel\seckeyword
        \toks0={#1}%
        \xdef\lastsectiondefs{%
          \gdef\noexpand\thissectionname{\the\toks0}%
          \gdef\noexpand\thissectionnum{#4}%
          % \noexpand\putwordSection avoids expanding indigestible
          % commands in some of the translations.
          \gdef\noexpand\thissection{\noexpand\putwordSection{}
                                     \noexpand\thissectionnum:
                                     \noexpand\thissectionname}%
        }%
      \fi
    \fi\fi\fi
    %
    % Go into vertical mode.  Usually we'll already be there, but we
    % don't want the following whatsit to end up in a preceding paragraph
    % if the document didn't happen to have a blank line.
    \par
    %
    % Output the mark.  Pass it through \safewhatsit, to take care of
    % the preceding space.
    \safewhatsit\domark
    %
    % Insert space above the heading.
    \csname #2headingbreak\endcsname
    %
    % Now the second mark, after the heading break.  No break points
    % between here and the heading.
    \let\prevsectiondefs=\lastsectiondefs
    \domark
    %
    % Only insert the space after the number if we have a section number.
    \ifx\temptype\Ynothingkeyword
      \setbox0 = \hbox{}%
      \def\toctype{unn}%
      \gdef\lastsection{#1}%
    \else\ifx\temptype\Yomitfromtockeyword
      % for @headings -- no section number, don't include in toc,
      % and don't redefine \lastsection.
      \setbox0 = \hbox{}%
      \def\toctype{omit}%
      \let\sectionlevel=\empty
    \else\ifx\temptype\Yappendixkeyword
      \setbox0 = \hbox{#4\enspace}%
      \def\toctype{app}%
      \gdef\lastsection{#1}%
    \else
      \setbox0 = \hbox{#4\enspace}%
      \def\toctype{num}%
      \gdef\lastsection{#1}%
    \fi\fi\fi
    %
    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
    %
    % Write the node reference (= pdf destination for pdftex).
    % Again, see comments in \chapmacro.
    \donoderef{#3}%
    %
    % Interline glue will be inserted when the vbox is completed.
    % That glue will be a valid breakpoint for the page, since it'll be
    % preceded by a whatsit (usually from the \donoderef, or from the
    % \writetocentry if there was no node).  We don't want to allow that
    % break, since then the whatsits could end up on page n while the
    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
    \nobreak
    %
    % Output the actual section heading.
    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
          \hangindent=\wd0  % zero if no section number
          \unhbox0 #1}%
  }%
  % Add extra space after the heading -- half of whatever came above it.
  % Don't allow stretch, though.
  \kern .5 \csname #2headingskip\endcsname
  %
  % Do not let the kern be a potential breakpoint, as it would be if it
  % was followed by glue.
  \nobreak
  %
  % We'll almost certainly start a paragraph next, so don't let that
  % glue accumulate.  (Not a breakpoint because it's preceded by a
  % discardable item.)
  \vskip-\parskip
  %
  % This is purely so the last item on the list is a known \penalty >
  % 10000.  This is so \startdefun can avoid allowing breakpoints after
  % section headings.  Otherwise, it would insert a valid breakpoint between:
  %
  %   @section sec-whatever
  %   @deffn def-whatever
  \penalty 10001
}


\message{toc,}
% Table of contents.
\newwrite\tocfile

% Write an entry to the toc file, opening it if necessary.
% Called from @chapter, etc.
%
% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
% We append the current node name (if any) and page number as additional
% arguments for the \{chap,sec,...}entry macros which will eventually
% read this.  The node name is used in the pdf outlines as the
% destination to jump to.
%
% We open the .toc file for writing here instead of at @setfilename (or
% any other fixed time) so that @contents can be anywhere in the document.
% But if #1 is `omit', then we don't do anything.  This is used for the
% table of contents chapter openings themselves.
%
\newif\iftocfileopened
\def\omitkeyword{omit}%
%
\def\writetocentry#1#2#3{%
  \edef\writetoctype{#1}%
  \ifx\writetoctype\omitkeyword \else
    \iftocfileopened\else
      \immediate\openout\tocfile = \jobname.toc
      \global\tocfileopenedtrue
    \fi
    %
    \iflinks
      {\atdummies
       \edef\temp{%
         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
       \temp
      }%
    \fi
  \fi
  %
  % Tell \shipout to create a pdf destination on each page, if we're
  % writing pdf.  These are used in the table of contents.  We can't
  % just write one on every page because the title pages are numbered
  % 1 and 2 (the page numbers aren't printed), and so are the first
  % two pages of the document.  Thus, we'd have two destinations named
  % `1', and two named `2'.
  \ifpdf \global\pdfmakepagedesttrue \fi
}


% These characters do not print properly in the Computer Modern roman
% fonts, so we must take special care.  This is more or less redundant
% with the Texinfo input format setup at the end of this file.
%
\def\activecatcodes{%
  \catcode`\"=\active
  \catcode`\$=\active
  \catcode`\<=\active
  \catcode`\>=\active
  \catcode`\\=\active
  \catcode`\^=\active
  \catcode`\_=\active
  \catcode`\|=\active
  \catcode`\~=\active
}


% Read the toc file, which is essentially Texinfo input.
\def\readtocfile{%
  \setupdatafile
  \activecatcodes
  \input \tocreadfilename
}

\newskip\contentsrightmargin \contentsrightmargin=1in
\newcount\savepageno
\newcount\lastnegativepageno \lastnegativepageno = -1

% Prepare to read what we've written to \tocfile.
%
\def\startcontents#1{%
  % If @setchapternewpage on, and @headings double, the contents should
  % start on an odd page, unlike chapters.  Thus, we maintain
  % \contentsalignmacro in parallel with \pagealignmacro.
  % From: Torbjorn Granlund <tege@matematik.su.se>
  \contentsalignmacro
  \immediate\closeout\tocfile
  %
  % Don't need to put `Contents' or `Short Contents' in the headline.
  % It is abundantly clear what they are.
  \chapmacro{#1}{Yomitfromtoc}{}%
  %
  \savepageno = \pageno
  \begingroup                  % Set up to handle contents files properly.
    \raggedbottom              % Worry more about breakpoints than the bottom.
    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
    %
    % Roman numerals for page numbers.
    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
}

% redefined for the two-volume lispref.  We always output on
% \jobname.toc even if this is redefined.
%
\def\tocreadfilename{\jobname.toc}

% Normal (long) toc.
%
\def\contents{%
  \startcontents{\putwordTOC}%
    \openin 1 \tocreadfilename\space
    \ifeof 1 \else
      \readtocfile
    \fi
    \vfill \eject
    \contentsalignmacro % in case @setchapternewpage odd is in effect
    \ifeof 1 \else
      \pdfmakeoutlines
    \fi
    \closein 1
  \endgroup
  \lastnegativepageno = \pageno
  \global\pageno = \savepageno
}

% And just the chapters.
\def\summarycontents{%
  \startcontents{\putwordShortTOC}%
    %
    \let\numchapentry = \shortchapentry
    \let\appentry = \shortchapentry
    \let\unnchapentry = \shortunnchapentry
    % We want a true roman here for the page numbers.
    \secfonts
    \let\rm=\shortcontrm \let\bf=\shortcontbf
    \let\sl=\shortcontsl \let\tt=\shortconttt
    \rm
    \hyphenpenalty = 10000
    \advance\baselineskip by 1pt % Open it up a little.
    \def\numsecentry##1##2##3##4{}
    \let\appsecentry = \numsecentry
    \let\unnsecentry = \numsecentry
    \let\numsubsecentry = \numsecentry
    \let\appsubsecentry = \numsecentry
    \let\unnsubsecentry = \numsecentry
    \let\numsubsubsecentry = \numsecentry
    \let\appsubsubsecentry = \numsecentry
    \let\unnsubsubsecentry = \numsecentry
    \openin 1 \tocreadfilename\space
    \ifeof 1 \else
      \readtocfile
    \fi
    \closein 1
    \vfill \eject
    \contentsalignmacro % in case @setchapternewpage odd is in effect
  \endgroup
  \lastnegativepageno = \pageno
  \global\pageno = \savepageno
}
\let\shortcontents = \summarycontents

% Typeset the label for a chapter or appendix for the short contents.
% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
%
\def\shortchaplabel#1{%
  % This space should be enough, since a single number is .5em, and the
  % widest letter (M) is 1em, at least in the Computer Modern fonts.
  % But use \hss just in case.
  % (This space doesn't include the extra space that gets added after
  % the label; that gets put in by \shortchapentry above.)
  %
  % We'd like to right-justify chapter numbers, but that looks strange
  % with appendix letters.  And right-justifying numbers and
  % left-justifying letters looks strange when there is less than 10
  % chapters.  Have to read the whole toc once to know how many chapters
  % there are before deciding ...
  \hbox to 1em{#1\hss}%
}

% These macros generate individual entries in the table of contents.
% The first argument is the chapter or section name.
% The last argument is the page number.
% The arguments in between are the chapter number, section number, ...

% Chapters, in the main contents.
\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
%
% Chapters, in the short toc.
% See comments in \dochapentry re vbox and related settings.
\def\shortchapentry#1#2#3#4{%
  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
}

% Appendices, in the main contents.
% Need the word Appendix, and a fixed-size box.
%
\def\appendixbox#1{%
  % We use M since it's probably the widest letter.
  \setbox0 = \hbox{\putwordAppendix{} M}%
  \hbox to \wd0{\putwordAppendix{} #1\hss}}
%
\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}

% Unnumbered chapters.
\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}

% Sections.
\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
\let\appsecentry=\numsecentry
\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}

% Subsections.
\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
\let\appsubsecentry=\numsubsecentry
\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}

% And subsubsections.
\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
\let\appsubsubsecentry=\numsubsubsecentry
\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}

% This parameter controls the indentation of the various levels.
% Same as \defaultparindent.
\newdimen\tocindent \tocindent = 15pt

% Now for the actual typesetting. In all these, #1 is the text and #2 is the
% page number.
%
% If the toc has to be broken over pages, we want it to be at chapters
% if at all possible; hence the \penalty.
\def\dochapentry#1#2{%
   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
   \begingroup
     \chapentryfonts
     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
   \endgroup
   \nobreak\vskip .25\baselineskip plus.1\baselineskip
}

\def\dosecentry#1#2{\begingroup
  \secentryfonts \leftskip=\tocindent
  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup}

\def\dosubsecentry#1#2{\begingroup
  \subsecentryfonts \leftskip=2\tocindent
  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup}

\def\dosubsubsecentry#1#2{\begingroup
  \subsubsecentryfonts \leftskip=3\tocindent
  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
\endgroup}

% We use the same \entry macro as for the index entries.
\let\tocentry = \entry

% Space between chapter (or whatever) number and the title.
\def\labelspace{\hskip1em \relax}

\def\dopageno#1{{\rm #1}}
\def\doshortpageno#1{{\rm #1}}

\def\chapentryfonts{\secfonts \rm}
\def\secentryfonts{\textfonts}
\def\subsecentryfonts{\textfonts}
\def\subsubsecentryfonts{\textfonts}


\message{environments,}
% @foo ... @end foo.

% @tex ... @end tex    escapes into raw Tex temporarily.
% One exception: @ is still an escape character, so that @end tex works.
% But \@ or @@ will get a plain tex @ character.

\envdef\tex{%
  \setupmarkupstyle{tex}%
  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
  \catcode `\%=14
  \catcode `\+=\other
  \catcode `\"=\other
  \catcode `\|=\other
  \catcode `\<=\other
  \catcode `\>=\other
  \catcode`\`=\other
  \catcode`\'=\other
  \escapechar=`\\
  %
  \let\b=\ptexb
  \let\bullet=\ptexbullet
  \let\c=\ptexc
  \let\,=\ptexcomma
  \let\.=\ptexdot
  \let\dots=\ptexdots
  \let\equiv=\ptexequiv
  \let\!=\ptexexclam
  \let\i=\ptexi
  \let\indent=\ptexindent
  \let\noindent=\ptexnoindent
  \let\{=\ptexlbrace
  \let\+=\tabalign
  \let\}=\ptexrbrace
  \let\/=\ptexslash
  \let\*=\ptexstar
  \let\t=\ptext
  \expandafter \let\csname top\endcsname=\ptextop  % outer
  \let\frenchspacing=\plainfrenchspacing
  %
  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
  \def\@{@}%
}
% There is no need to define \Etex.

% Define @lisp ... @end lisp.
% @lisp environment forms a group so it can rebind things,
% including the definition of @end lisp (which normally is erroneous).

% Amount to narrow the margins by for @lisp.
\newskip\lispnarrowing \lispnarrowing=0.4in

% This is the definition that ^^M gets inside @lisp, @example, and other
% such environments.  \null is better than a space, since it doesn't
% have any width.
\def\lisppar{\null\endgraf}

% This space is always present above and below environments.
\newskip\envskipamount \envskipamount = 0pt

% Make spacing and below environment symmetrical.  We use \parskip here
% to help in doing that, since in @example-like environments \parskip
% is reset to zero; thus the \afterenvbreak inserts no space -- but the
% start of the next paragraph will insert \parskip.
%
\def\aboveenvbreak{{%
  % =10000 instead of <10000 because of a special case in \itemzzz and
  % \sectionheading, q.v.
  \ifnum \lastpenalty=10000 \else
    \advance\envskipamount by \parskip
    \endgraf
    \ifdim\lastskip<\envskipamount
      \removelastskip
      % it's not a good place to break if the last penalty was \nobreak
      % or better ...
      \ifnum\lastpenalty<10000 \penalty-50 \fi
      \vskip\envskipamount
    \fi
  \fi
}}

\let\afterenvbreak = \aboveenvbreak

% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
% also clear it, so that its embedded environments do the narrowing again.
\let\nonarrowing=\relax

% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
% environment contents.
\font\circle=lcircle10
\newdimen\circthick
\newdimen\cartouter\newdimen\cartinner
\newskip\normbskip\newskip\normpskip\newskip\normlskip
\circthick=\fontdimen8\circle
%
\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
\def\ctr{{\hskip 6pt\circle\char'010}}
\def\cbl{{\circle\char'012\hskip -6pt}}
\def\cbr{{\hskip 6pt\circle\char'011}}
\def\carttop{\hbox to \cartouter{\hskip\lskip
        \ctl\leaders\hrule height\circthick\hfil\ctr
        \hskip\rskip}}
\def\cartbot{\hbox to \cartouter{\hskip\lskip
        \cbl\leaders\hrule height\circthick\hfil\cbr
        \hskip\rskip}}
%
\newskip\lskip\newskip\rskip

\envdef\cartouche{%
  \ifhmode\par\fi  % can't be in the midst of a paragraph.
  \startsavinginserts
  \lskip=\leftskip \rskip=\rightskip
  \leftskip=0pt\rightskip=0pt % we want these *outside*.
  \cartinner=\hsize \advance\cartinner by-\lskip
  \advance\cartinner by-\rskip
  \cartouter=\hsize
  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
				% side, and for 6pt waste from
				% each corner char, and rule thickness
  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
  % Flag to tell @lisp, etc., not to narrow margin.
  \let\nonarrowing = t%
  \vbox\bgroup
      \baselineskip=0pt\parskip=0pt\lineskip=0pt
      \carttop
      \hbox\bgroup
	  \hskip\lskip
	  \vrule\kern3pt
	  \vbox\bgroup
	      \kern3pt
	      \hsize=\cartinner
	      \baselineskip=\normbskip
	      \lineskip=\normlskip
	      \parskip=\normpskip
	      \vskip -\parskip
	      \comment % For explanation, see the end of \def\group.
}
\def\Ecartouche{%
              \ifhmode\par\fi
	      \kern3pt
	  \egroup
	  \kern3pt\vrule
	  \hskip\rskip
      \egroup
      \cartbot
  \egroup
  \checkinserts
}


% This macro is called at the beginning of all the @example variants,
% inside a group.
\newdimen\nonfillparindent
\def\nonfillstart{%
  \aboveenvbreak
  \hfuzz = 12pt % Don't be fussy
  \sepspaces % Make spaces be word-separators rather than space tokens.
  \let\par = \lisppar % don't ignore blank lines
  \obeylines % each line of input is a line of output
  \parskip = 0pt
  % Turn off paragraph indentation but redefine \indent to emulate
  % the normal \indent.
  \nonfillparindent=\parindent
  \parindent = 0pt
  \let\indent\nonfillindent
  %
  \emergencystretch = 0pt % don't try to avoid overfull boxes
  \ifx\nonarrowing\relax
    \advance \leftskip by \lispnarrowing
    \exdentamount=\lispnarrowing
  \else
    \let\nonarrowing = \relax
  \fi
  \let\exdent=\nofillexdent
}

\begingroup
\obeyspaces
% We want to swallow spaces (but not other tokens) after the fake
% @indent in our nonfill-environments, where spaces are normally
% active and set to @tie, resulting in them not being ignored after
% @indent.
\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
\gdef\nonfillindentcheck{%
\ifx\temp %
\expandafter\nonfillindentgobble%
\else%
\leavevmode\nonfillindentbox%
\fi%
}%
\endgroup
\def\nonfillindentgobble#1{\nonfillindent}
\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}

% If you want all examples etc. small: @set dispenvsize small.
% If you want even small examples the full size: @set dispenvsize nosmall.
% This affects the following displayed environments:
%    @example, @display, @format, @lisp
%
\def\smallword{small}
\def\nosmallword{nosmall}
\let\SETdispenvsize\relax
\def\setnormaldispenv{%
  \ifx\SETdispenvsize\smallword
    % end paragraph for sake of leading, in case document has no blank
    % line.  This is redundant with what happens in \aboveenvbreak, but
    % we need to do it before changing the fonts, and it's inconvenient
    % to change the fonts afterward.
    \ifnum \lastpenalty=10000 \else \endgraf \fi
    \smallexamplefonts \rm
  \fi
}
\def\setsmalldispenv{%
  \ifx\SETdispenvsize\nosmallword
  \else
    \ifnum \lastpenalty=10000 \else \endgraf \fi
    \smallexamplefonts \rm
  \fi
}

% We often define two environments, @foo and @smallfoo.
% Let's do it by one command:
\def\makedispenv #1#2{
  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
  \expandafter\let\csname E#1\endcsname \afterenvbreak
  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
}

% Define two synonyms:
\def\maketwodispenvs #1#2#3{
  \makedispenv{#1}{#3}
  \makedispenv{#2}{#3}
}

% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
%
% @smallexample and @smalllisp: use smaller fonts.
% Originally contributed by Pavel@xerox.
%
\maketwodispenvs {lisp}{example}{%
  \nonfillstart
  \tt\setupmarkupstyle{example}%
  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
  \gobble       % eat return
}
% @display/@smalldisplay: same as @lisp except keep current font.
%
\makedispenv {display}{%
  \nonfillstart
  \gobble
}

% @format/@smallformat: same as @display except don't narrow margins.
%
\makedispenv{format}{%
  \let\nonarrowing = t%
  \nonfillstart
  \gobble
}

% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
\envdef\flushleft{%
  \let\nonarrowing = t%
  \nonfillstart
  \gobble
}
\let\Eflushleft = \afterenvbreak

% @flushright.
%
\envdef\flushright{%
  \let\nonarrowing = t%
  \nonfillstart
  \advance\leftskip by 0pt plus 1fill
  \gobble
}
\let\Eflushright = \afterenvbreak


% @raggedright does more-or-less normal line breaking but no right
% justification.  From plain.tex.
\envdef\raggedright{%
  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
}
\let\Eraggedright\par

\envdef\raggedleft{%
  \parindent=0pt \leftskip0pt plus2em
  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
  \hbadness=10000 % Last line will usually be underfull, so turn off
                  % badness reporting.
}
\let\Eraggedleft\par

\envdef\raggedcenter{%
  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
  \hbadness=10000 % Last line will usually be underfull, so turn off
                  % badness reporting.
}
\let\Eraggedcenter\par


% @quotation does normal linebreaking (hence we can't use \nonfillstart)
% and narrows the margins.  We keep \parskip nonzero in general, since
% we're doing normal filling.  So, when using \aboveenvbreak and
% \afterenvbreak, temporarily make \parskip 0.
%
\def\quotationstart{%
  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
  \parindent=0pt
  %
  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
  \ifx\nonarrowing\relax
    \advance\leftskip by \lispnarrowing
    \advance\rightskip by \lispnarrowing
    \exdentamount = \lispnarrowing
  \else
    \let\nonarrowing = \relax
  \fi
  \parsearg\quotationlabel
}

\envdef\quotation{%
  \setnormaldispenv
  \quotationstart
}

\envdef\smallquotation{%
  \setsmalldispenv
  \quotationstart
}
\let\Esmallquotation = \Equotation

% We have retained a nonzero parskip for the environment, since we're
% doing normal filling.
%
\def\Equotation{%
  \par
  \ifx\quotationauthor\undefined\else
    % indent a bit.
    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
  \fi
  {\parskip=0pt \afterenvbreak}%
}

% If we're given an argument, typeset it in bold with a colon after.
\def\quotationlabel#1{%
  \def\temp{#1}%
  \ifx\temp\empty \else
    {\bf #1: }%
  \fi
}


% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
% If we want to allow any <char> as delimiter,
% we need the curly braces so that makeinfo sees the @verb command, eg:
% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
%
% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
%
% [Knuth] p.344; only we need to do the other characters Texinfo sets
% active too.  Otherwise, they get lost as the first character on a
% verbatim line.
\def\dospecials{%
  \do\ \do\\\do\{\do\}\do\$\do\&%
  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
  \do\<\do\>\do\|\do\@\do+\do\"%
  % Don't do the quotes -- if we do, @set txicodequoteundirected and
  % @set txicodequotebacktick will not have effect on @verb and
  % @verbatim, and ?` and !` ligatures won't get disabled.
  %\do\`\do\'%
}
%
% [Knuth] p. 380
\def\uncatcodespecials{%
  \def\do##1{\catcode`##1=\other}\dospecials}
%
% Setup for the @verb command.
%
% Eight spaces for a tab
\begingroup
  \catcode`\^^I=\active
  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
\endgroup
%
\def\setupverb{%
  \tt  % easiest (and conventionally used) font for verbatim
  \def\par{\leavevmode\endgraf}%
  \setupmarkupstyle{verb}%
  \tabeightspaces
  % Respect line breaks,
  % print special symbols as themselves, and
  % make each space count
  % must do in this order:
  \obeylines \uncatcodespecials \sepspaces
}

% Setup for the @verbatim environment
%
% Real tab expansion
\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
%
\def\starttabbox{\setbox0=\hbox\bgroup}
%
\begingroup
  \catcode`\^^I=\active
  \gdef\tabexpand{%
    \catcode`\^^I=\active
    \def^^I{\leavevmode\egroup
      \dimen0=\wd0 % the width so far, or since the previous tab
      \divide\dimen0 by\tabw
      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
      \wd0=\dimen0 \box0 \starttabbox
    }%
  }
\endgroup

% start the verbatim environment.
\def\setupverbatim{%
  \let\nonarrowing = t%
  \nonfillstart
  % Easiest (and conventionally used) font for verbatim
  \tt
  \def\par{\leavevmode\egroup\box0\endgraf}%
  \tabexpand
  \setupmarkupstyle{verbatim}%
  % Respect line breaks,
  % print special symbols as themselves, and
  % make each space count
  % must do in this order:
  \obeylines \uncatcodespecials \sepspaces
  \everypar{\starttabbox}%
}

% Do the @verb magic: verbatim text is quoted by unique
% delimiter characters.  Before first delimiter expect a
% right brace, after last delimiter expect closing brace:
%
%    \def\doverb'{'<char>#1<char>'}'{#1}
%
% [Knuth] p. 382; only eat outer {}
\begingroup
  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
\endgroup
%
\def\verb{\begingroup\setupverb\doverb}
%
%
% Do the @verbatim magic: define the macro \doverbatim so that
% the (first) argument ends when '@end verbatim' is reached, ie:
%
%     \def\doverbatim#1@end verbatim{#1}
%
% For Texinfo it's a lot easier than for LaTeX,
% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
% we need not redefine '\', '{' and '}'.
%
% Inspired by LaTeX's verbatim command set [latex.ltx]
%
\begingroup
  \catcode`\ =\active
  \obeylines %
  % ignore everything up to the first ^^M, that's the newline at the end
  % of the @verbatim input line itself.  Otherwise we get an extra blank
  % line in the output.
  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
  % We really want {...\end verbatim} in the body of the macro, but
  % without the active space; thus we have to use \xdef and \gobble.
\endgroup
%
\envdef\verbatim{%
    \setupverbatim\doverbatim
}
\let\Everbatim = \afterenvbreak


% @verbatiminclude FILE - insert text of file in verbatim environment.
%
\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
%
\def\doverbatiminclude#1{%
  {%
    \makevalueexpandable
    \setupverbatim
    \indexnofonts       % Allow `@@' and other weird things in file names.
    \input #1
    \afterenvbreak
  }%
}

% @copying ... @end copying.
% Save the text away for @insertcopying later.
%
% We save the uninterpreted tokens, rather than creating a box.
% Saving the text in a box would be much easier, but then all the
% typesetting commands (@smallbook, font changes, etc.) have to be done
% beforehand -- and a) we want @copying to be done first in the source
% file; b) letting users define the frontmatter in as flexible order as
% possible is very desirable.
%
\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
%
\def\insertcopying{%
  \begingroup
    \parindent = 0pt  % paragraph indentation looks wrong on title page
    \scanexp\copyingtext
  \endgroup
}


\message{defuns,}
% @defun etc.

\newskip\defbodyindent \defbodyindent=.4in
\newskip\defargsindent \defargsindent=50pt
\newskip\deflastargmargin \deflastargmargin=18pt
\newcount\defunpenalty

% Start the processing of @deffn:
\def\startdefun{%
  \ifnum\lastpenalty<10000
    \medbreak
    \defunpenalty=10003 % Will keep this @deffn together with the
                        % following @def command, see below.
  \else
    % If there are two @def commands in a row, we'll have a \nobreak,
    % which is there to keep the function description together with its
    % header.  But if there's nothing but headers, we need to allow a
    % break somewhere.  Check specifically for penalty 10002, inserted
    % by \printdefunline, instead of 10000, since the sectioning
    % commands also insert a nobreak penalty, and we don't want to allow
    % a break between a section heading and a defun.
    %
    % As a minor refinement, we avoid "club" headers by signalling
    % with penalty of 10003 after the very first @deffn in the
    % sequence (see above), and penalty of 10002 after any following
    % @def command.
    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
    %
    % Similarly, after a section heading, do not allow a break.
    % But do insert the glue.
    \medskip  % preceded by discardable penalty, so not a breakpoint
  \fi
  %
  \parindent=0in
  \advance\leftskip by \defbodyindent
  \exdentamount=\defbodyindent
}

\def\dodefunx#1{%
  % First, check whether we are in the right environment:
  \checkenv#1%
  %
  % As above, allow line break if we have multiple x headers in a row.
  % It's not a great place, though.
  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
  %
  % And now, it's time to reuse the body of the original defun:
  \expandafter\gobbledefun#1%
}
\def\gobbledefun#1\startdefun{}

% \printdefunline \deffnheader{text}
%
\def\printdefunline#1#2{%
  \begingroup
    % call \deffnheader:
    #1#2 \endheader
    % common ending:
    \interlinepenalty = 10000
    \advance\rightskip by 0pt plus 1fil
    \endgraf
    \nobreak\vskip -\parskip
    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
    % Some of the @defun-type tags do not enable magic parentheses,
    % rendering the following check redundant.  But we don't optimize.
    \checkparencounts
  \endgroup
}

\def\Edefun{\endgraf\medbreak}

% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
% the only thing remaining is to define \deffnheader.
%
\def\makedefun#1{%
  \expandafter\let\csname E#1\endcsname = \Edefun
  \edef\temp{\noexpand\domakedefun
    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
  \temp
}

% \domakedefun \deffn \deffnx \deffnheader
%
% Define \deffn and \deffnx, without parameters.
% \deffnheader has to be defined explicitly.
%
\def\domakedefun#1#2#3{%
  \envdef#1{%
    \startdefun
    \parseargusing\activeparens{\printdefunline#3}%
  }%
  \def#2{\dodefunx#1}%
  \def#3%
}

%%% Untyped functions:

% @deffn category name args
\makedefun{deffn}{\deffngeneral{}}

% @deffn category class name args
\makedefun{defop}#1 {\defopon{#1\ \putwordon}}

% \defopon {category on}class name args
\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }

% \deffngeneral {subind}category name args
%
\def\deffngeneral#1#2 #3 #4\endheader{%
  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
  \dosubind{fn}{\code{#3}}{#1}%
  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
}

%%% Typed functions:

% @deftypefn category type name args
\makedefun{deftypefn}{\deftypefngeneral{}}

% @deftypeop category class type name args
\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}

% \deftypeopon {category on}class type name args
\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }

% \deftypefngeneral {subind}category type name args
%
\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
  \dosubind{fn}{\code{#4}}{#1}%
  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
}

%%% Typed variables:

% @deftypevr category type var args
\makedefun{deftypevr}{\deftypecvgeneral{}}

% @deftypecv category class type var args
\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}

% \deftypecvof {category of}class type var args
\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }

% \deftypecvgeneral {subind}category type var args
%
\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
  \dosubind{vr}{\code{#4}}{#1}%
  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
}

%%% Untyped variables:

% @defvr category var args
\makedefun{defvr}#1 {\deftypevrheader{#1} {} }

% @defcv category class var args
\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}

% \defcvof {category of}class var args
\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }

%%% Type:
% @deftp category name args
\makedefun{deftp}#1 #2 #3\endheader{%
  \doind{tp}{\code{#2}}%
  \defname{#1}{}{#2}\defunargs{#3\unskip}%
}

% Remaining @defun-like shortcuts:
\makedefun{defun}{\deffnheader{\putwordDeffunc} }
\makedefun{defmac}{\deffnheader{\putwordDefmac} }
\makedefun{defspec}{\deffnheader{\putwordDefspec} }
\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
\makedefun{defvar}{\defvrheader{\putwordDefvar} }
\makedefun{defopt}{\defvrheader{\putwordDefopt} }
\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
\makedefun{defmethod}{\defopon\putwordMethodon}
\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}

% \defname, which formats the name of the @def (not the args).
% #1 is the category, such as "Function".
% #2 is the return type, if any.
% #3 is the function name.
%
% We are followed by (but not passed) the arguments, if any.
%
\def\defname#1#2#3{%
  % Get the values of \leftskip and \rightskip as they were outside the @def...
  \advance\leftskip by -\defbodyindent
  %
  % How we'll format the type name.  Putting it in brackets helps
  % distinguish it from the body text that may end up on the next line
  % just below it.
  \def\temp{#1}%
  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
  %
  % Figure out line sizes for the paragraph shape.
  % The first line needs space for \box0; but if \rightskip is nonzero,
  % we need only space for the part of \box0 which exceeds it:
  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
  % The continuations:
  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
  % (plain.tex says that \dimen1 should be used only as global.)
  \parshape 2 0in \dimen0 \defargsindent \dimen2
  %
  % Put the type name to the right margin.
  \noindent
  \hbox to 0pt{%
    \hfil\box0 \kern-\hsize
    % \hsize has to be shortened this way:
    \kern\leftskip
    % Intentionally do not respect \rightskip, since we need the space.
  }%
  %
  % Allow all lines to be underfull without complaint:
  \tolerance=10000 \hbadness=10000
  \exdentamount=\defbodyindent
  {%
    % defun fonts. We use typewriter by default (used to be bold) because:
    % . we're printing identifiers, they should be in tt in principle.
    % . in languages with many accents, such as Czech or French, it's
    %   common to leave accents off identifiers.  The result looks ok in
    %   tt, but exceedingly strange in rm.
    % . we don't want -- and --- to be treated as ligatures.
    % . this still does not fix the ?` and !` ligatures, but so far no
    %   one has made identifiers using them :).
    \df \tt
    \def\temp{#2}% return value type
    \ifx\temp\empty\else \tclose{\temp} \fi
    #3% output function name
  }%
  {\rm\enskip}% hskip 0.5 em of \tenrm
  %
  \boldbrax
  % arguments will be output next, if any.
}

% Print arguments in slanted roman (not ttsl), inconsistently with using
% tt for the name.  This is because literal text is sometimes needed in
% the argument list (groff manual), and ttsl and tt are not very
% distinguishable.  Prevent hyphenation at `-' chars.
%
\def\defunargs#1{%
  % use sl by default (not ttsl),
  % tt for the names.
  \df \sl \hyphenchar\font=0
  %
  % On the other hand, if an argument has two dashes (for instance), we
  % want a way to get ttsl.  Let's try @var for that.
  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
  #1%
  \sl\hyphenchar\font=45
}

% We want ()&[] to print specially on the defun line.
%
\def\activeparens{%
  \catcode`\(=\active \catcode`\)=\active
  \catcode`\[=\active \catcode`\]=\active
  \catcode`\&=\active
}

% Make control sequences which act like normal parenthesis chars.
\let\lparen = ( \let\rparen = )

% Be sure that we always have a definition for `(', etc.  For example,
% if the fn name has parens in it, \boldbrax will not be in effect yet,
% so TeX would otherwise complain about undefined control sequence.
{
  \activeparens
  \global\let(=\lparen \global\let)=\rparen
  \global\let[=\lbrack \global\let]=\rbrack
  \global\let& = \&

  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
  \gdef\magicamp{\let&=\amprm}
}

\newcount\parencount

% If we encounter &foo, then turn on ()-hacking afterwards
\newif\ifampseen
\def\amprm#1 {\ampseentrue{\bf\&#1 }}

\def\parenfont{%
  \ifampseen
    % At the first level, print parens in roman,
    % otherwise use the default font.
    \ifnum \parencount=1 \rm \fi
  \else
    % The \sf parens (in \boldbrax) actually are a little bolder than
    % the contained text.  This is especially needed for [ and ] .
    \sf
  \fi
}
\def\infirstlevel#1{%
  \ifampseen
    \ifnum\parencount=1
      #1%
    \fi
  \fi
}
\def\bfafterword#1 {#1 \bf}

\def\opnr{%
  \global\advance\parencount by 1
  {\parenfont(}%
  \infirstlevel \bfafterword
}
\def\clnr{%
  {\parenfont)}%
  \infirstlevel \sl
  \global\advance\parencount by -1
}

\newcount\brackcount
\def\lbrb{%
  \global\advance\brackcount by 1
  {\bf[}%
}
\def\rbrb{%
  {\bf]}%
  \global\advance\brackcount by -1
}

\def\checkparencounts{%
  \ifnum\parencount=0 \else \badparencount \fi
  \ifnum\brackcount=0 \else \badbrackcount \fi
}
% these should not use \errmessage; the glibc manual, at least, actually
% has such constructs (when documenting function pointers).
\def\badparencount{%
  \message{Warning: unbalanced parentheses in @def...}%
  \global\parencount=0
}
\def\badbrackcount{%
  \message{Warning: unbalanced square brackets in @def...}%
  \global\brackcount=0
}


\message{macros,}
% @macro.

% To do this right we need a feature of e-TeX, \scantokens,
% which we arrange to emulate with a temporary file in ordinary TeX.
\ifx\eTeXversion\undefined
  \newwrite\macscribble
  \def\scantokens#1{%
    \toks0={#1}%
    \immediate\openout\macscribble=\jobname.tmp
    \immediate\write\macscribble{\the\toks0}%
    \immediate\closeout\macscribble
    \input \jobname.tmp
  }
\fi

\def\scanmacro#1{%
  \begingroup
    \newlinechar`\^^M
    \let\xeatspaces\eatspaces
    % Undo catcode changes of \startcontents and \doprintindex
    % When called from @insertcopying or (short)caption, we need active
    % backslash to get it printed correctly.  Previously, we had
    % \catcode`\\=\other instead.  We'll see whether a problem appears
    % with macro expansion.				--kasal, 19aug04
    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
    % ... and \example
    \spaceisspace
    %
    % Append \endinput to make sure that TeX does not see the ending newline.
    % I've verified that it is necessary both for e-TeX and for ordinary TeX
    %							--kasal, 29nov03
    \scantokens{#1\endinput}%
  \endgroup
}

\def\scanexp#1{%
  \edef\temp{\noexpand\scanmacro{#1}}%
  \temp
}

\newcount\paramno   % Count of parameters
\newtoks\macname    % Macro name
\newif\ifrecursive  % Is it recursive?

% List of all defined macros in the form
%    \definedummyword\macro1\definedummyword\macro2...
% Currently is also contains all @aliases; the list can be split
% if there is a need.
\def\macrolist{}

% Add the macro to \macrolist
\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
\def\addtomacrolistxxx#1{%
     \toks0 = \expandafter{\macrolist\definedummyword#1}%
     \xdef\macrolist{\the\toks0}%
}

% Utility routines.
% This does \let #1 = #2, with \csnames; that is,
%   \let \csname#1\endcsname = \csname#2\endcsname
% (except of course we have to play expansion games).
%
\def\cslet#1#2{%
  \expandafter\let
  \csname#1\expandafter\endcsname
  \csname#2\endcsname
}

% Trim leading and trailing spaces off a string.
% Concepts from aro-bend problem 15 (see CTAN).
{\catcode`\@=11
\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
\def\unbrace#1{#1}
\unbrace{\gdef\trim@@@ #1 } #2@{#1}
}

% Trim a single trailing ^^M off a string.
{\catcode`\^^M=\other \catcode`\Q=3%
\gdef\eatcr #1{\eatcra #1Q^^MQ}%
\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
\gdef\eatcrb#1Q#2Q{#1}%
}

% Macro bodies are absorbed as an argument in a context where
% all characters are catcode 10, 11 or 12, except \ which is active
% (as in normal texinfo). It is necessary to change the definition of \.

% Non-ASCII encodings make 8-bit characters active, so un-activate
% them to avoid their expansion.  Must do this non-globally, to
% confine the change to the current group.

% It's necessary to have hard CRs when the macro is executed. This is
% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
% body, and then making it the \newlinechar in \scanmacro.

\def\scanctxt{%
  \catcode`\"=\other
  \catcode`\+=\other
  \catcode`\<=\other
  \catcode`\>=\other
  \catcode`\@=\other
  \catcode`\^=\other
  \catcode`\_=\other
  \catcode`\|=\other
  \catcode`\~=\other
  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
}

\def\scanargctxt{%
  \scanctxt
  \catcode`\\=\other
  \catcode`\^^M=\other
}

\def\macrobodyctxt{%
  \scanctxt
  \catcode`\{=\other
  \catcode`\}=\other
  \catcode`\^^M=\other
  \usembodybackslash
}

\def\macroargctxt{%
  \scanctxt
  \catcode`\\=\other
}

% \mbodybackslash is the definition of \ in @macro bodies.
% It maps \foo\ => \csname macarg.foo\endcsname => #N
% where N is the macro parameter number.
% We define \csname macarg.\endcsname to be \realbackslash, so
% \\ in macro replacement text gets you a backslash.

{\catcode`@=0 @catcode`@\=@active
 @gdef@usembodybackslash{@let\=@mbodybackslash}
 @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
}
\expandafter\def\csname macarg.\endcsname{\realbackslash}

\def\macro{\recursivefalse\parsearg\macroxxx}
\def\rmacro{\recursivetrue\parsearg\macroxxx}

\def\macroxxx#1{%
  \getargs{#1}%           now \macname is the macname and \argl the arglist
  \ifx\argl\empty       % no arguments
     \paramno=0%
  \else
     \expandafter\parsemargdef \argl;%
  \fi
  \if1\csname ismacro.\the\macname\endcsname
     \message{Warning: redefining \the\macname}%
  \else
     \expandafter\ifx\csname \the\macname\endcsname \relax
     \else \errmessage{Macro name \the\macname\space already defined}\fi
     \global\cslet{macsave.\the\macname}{\the\macname}%
     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
     \addtomacrolist{\the\macname}%
  \fi
  \begingroup \macrobodyctxt
  \ifrecursive \expandafter\parsermacbody
  \else \expandafter\parsemacbody
  \fi}

\parseargdef\unmacro{%
  \if1\csname ismacro.#1\endcsname
    \global\cslet{#1}{macsave.#1}%
    \global\expandafter\let \csname ismacro.#1\endcsname=0%
    % Remove the macro name from \macrolist:
    \begingroup
      \expandafter\let\csname#1\endcsname \relax
      \let\definedummyword\unmacrodo
      \xdef\macrolist{\macrolist}%
    \endgroup
  \else
    \errmessage{Macro #1 not defined}%
  \fi
}

% Called by \do from \dounmacro on each macro.  The idea is to omit any
% macro definitions that have been changed to \relax.
%
\def\unmacrodo#1{%
  \ifx #1\relax
    % remove this
  \else
    \noexpand\definedummyword \noexpand#1%
  \fi
}

% This makes use of the obscure feature that if the last token of a
% <parameter list> is #, then the preceding argument is delimited by
% an opening brace, and that opening brace is not consumed.
\def\getargs#1{\getargsxxx#1{}}
\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
\def\getmacname #1 #2\relax{\macname={#1}}
\def\getmacargs#1{\def\argl{#1}}

% Parse the optional {params} list.  Set up \paramno and \paramlist
% so \defmacro knows what to do.  Define \macarg.blah for each blah
% in the params list, to be ##N where N is the position in that list.
% That gets used by \mbodybackslash (above).

% We need to get `macro parameter char #' into several definitions.
% The technique used is stolen from LaTeX:  let \hash be something
% unexpandable, insert that wherever you need a #, and then redefine
% it to # just before using the token list produced.
%
% The same technique is used to protect \eatspaces till just before
% the macro is used.

\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
\def\parsemargdefxxx#1,{%
  \if#1;\let\next=\relax
  \else \let\next=\parsemargdefxxx
    \advance\paramno by 1%
    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
        {\xeatspaces{\hash\the\paramno}}%
    \edef\paramlist{\paramlist\hash\the\paramno,}%
  \fi\next}

% These two commands read recursive and nonrecursive macro bodies.
% (They're different since rec and nonrec macros end differently.)

\long\def\parsemacbody#1@end macro%
{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
\long\def\parsermacbody#1@end rmacro%
{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%

% This defines the macro itself. There are six cases: recursive and
% nonrecursive macros of zero, one, and many arguments.
% Much magic with \expandafter here.
% \xdef is used so that macro definitions will survive the file
% they're defined in; @include reads the file inside a group.
\def\defmacro{%
  \let\hash=##% convert placeholders to macro parameter chars
  \ifrecursive
    \ifcase\paramno
    % 0
      \expandafter\xdef\csname\the\macname\endcsname{%
        \noexpand\scanmacro{\temp}}%
    \or % 1
      \expandafter\xdef\csname\the\macname\endcsname{%
         \bgroup\noexpand\macroargctxt
         \noexpand\braceorline
         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
         \egroup\noexpand\scanmacro{\temp}}%
    \else % many
      \expandafter\xdef\csname\the\macname\endcsname{%
         \bgroup\noexpand\macroargctxt
         \noexpand\csname\the\macname xx\endcsname}%
      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
      \expandafter\expandafter
      \expandafter\xdef
      \expandafter\expandafter
        \csname\the\macname xxx\endcsname
          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
    \fi
  \else
    \ifcase\paramno
    % 0
      \expandafter\xdef\csname\the\macname\endcsname{%
        \noexpand\norecurse{\the\macname}%
        \noexpand\scanmacro{\temp}\egroup}%
    \or % 1
      \expandafter\xdef\csname\the\macname\endcsname{%
         \bgroup\noexpand\macroargctxt
         \noexpand\braceorline
         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
        \egroup
        \noexpand\norecurse{\the\macname}%
        \noexpand\scanmacro{\temp}\egroup}%
    \else % many
      \expandafter\xdef\csname\the\macname\endcsname{%
         \bgroup\noexpand\macroargctxt
         \expandafter\noexpand\csname\the\macname xx\endcsname}%
      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
      \expandafter\expandafter
      \expandafter\xdef
      \expandafter\expandafter
      \csname\the\macname xxx\endcsname
      \paramlist{%
          \egroup
          \noexpand\norecurse{\the\macname}%
          \noexpand\scanmacro{\temp}\egroup}%
    \fi
  \fi}

\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}

% \braceorline decides whether the next nonwhitespace character is a
% {.  If so it reads up to the closing }, if not, it reads the whole
% line.  Whatever was read is then fed to the next control sequence
% as an argument (by \parsebrace or \parsearg)
\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
\def\braceorlinexxx{%
  \ifx\nchar\bgroup\else
    \expandafter\parsearg
  \fi \macnamexxx}


% @alias.
% We need some trickery to remove the optional spaces around the equal
% sign.  Just make them active and then expand them all to nothing.
\def\alias{\parseargusing\obeyspaces\aliasxxx}
\def\aliasxxx #1{\aliasyyy#1\relax}
\def\aliasyyy #1=#2\relax{%
  {%
    \expandafter\let\obeyedspace=\empty
    \addtomacrolist{#1}%
    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
  }%
  \next
}


\message{cross references,}

\newwrite\auxfile
\newif\ifhavexrefs    % True if xref values are known.
\newif\ifwarnedxrefs  % True if we warned once that they aren't known.

% @inforef is relatively simple.
\def\inforef #1{\inforefzzz #1,,,,**}
\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
  node \samp{\ignorespaces#1{}}}

% @node's only job in TeX is to define \lastnode, which is used in
% cross-references.  The @node line might or might not have commas, and
% might or might not have spaces before the first comma, like:
% @node foo , bar , ...
% We don't want such trailing spaces in the node name.
%
\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
%
% also remove a trailing comma, in case of something like this:
% @node Help-Cross,  ,  , Cross-refs
\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}

\let\nwnode=\node
\let\lastnode=\empty

% Write a cross-reference definition for the current node.  #1 is the
% type (Ynumbered, Yappendix, Ynothing).
%
\def\donoderef#1{%
  \ifx\lastnode\empty\else
    \setref{\lastnode}{#1}%
    \global\let\lastnode=\empty
  \fi
}

% @anchor{NAME} -- define xref target at arbitrary point.
%
\newcount\savesfregister
%
\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}

% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
% anchor), which consists of three parts:
% 1) NAME-title - the current sectioning name taken from \lastsection,
%                 or the anchor name.
% 2) NAME-snt   - section number and type, passed as the SNT arg, or
%                 empty for anchors.
% 3) NAME-pg    - the page number.
%
% This is called from \donoderef, \anchor, and \dofloat.  In the case of
% floats, there is an additional part, which is not written here:
% 4) NAME-lof   - the text as it should appear in a @listoffloats.
%
\def\setref#1#2{%
  \pdfmkdest{#1}%
  \iflinks
    {%
      \atdummies  % preserve commands, but don't expand them
      \edef\writexrdef##1##2{%
	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
	  ##1}{##2}}% these are parameters of \writexrdef
      }%
      \toks0 = \expandafter{\lastsection}%
      \immediate \writexrdef{title}{\the\toks0 }%
      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
    }%
  \fi
}

% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
% the node name, #2 the name of the Info cross-reference, #3 the printed
% node name, #4 the name of the Info file, #5 the name of the printed
% manual.  All but the node name can be omitted.
%
\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
\def\ref#1{\xrefX[#1,,,,,,,]}
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
  \unsepspaces
  \def\printedmanual{\ignorespaces #5}%
  \def\printedrefname{\ignorespaces #3}%
  \setbox1=\hbox{\printedmanual\unskip}%
  \setbox0=\hbox{\printedrefname\unskip}%
  \ifdim \wd0 = 0pt
    % No printed node name was explicitly given.
    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
      % Use the node name inside the square brackets.
      \def\printedrefname{\ignorespaces #1}%
    \else
      % Use the actual chapter/section title appear inside
      % the square brackets.  Use the real section title if we have it.
      \ifdim \wd1 > 0pt
        % It is in another manual, so we don't have it.
        \def\printedrefname{\ignorespaces #1}%
      \else
        \ifhavexrefs
          % We know the real title if we have the xref values.
          \def\printedrefname{\refx{#1-title}{}}%
        \else
          % Otherwise just copy the Info node name.
          \def\printedrefname{\ignorespaces #1}%
        \fi%
      \fi
    \fi
  \fi
  %
  % Make link in pdf output.
  \ifpdf
    {\indexnofonts
     \turnoffactive
     % This expands tokens, so do it after making catcode changes, so _
     % etc. don't get their TeX definitions.
     \getfilename{#4}%
     %
     % See comments at \activebackslashdouble.
     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
      \backslashparens\pdfxrefdest}%
     %
     \leavevmode
     \startlink attr{/Border [0 0 0]}%
     \ifnum\filenamelength>0
       goto file{\the\filename.pdf} name{\pdfxrefdest}%
     \else
       goto name{\pdfmkpgn{\pdfxrefdest}}%
     \fi
    }%
    \setcolor{\linkcolor}%
  \fi
  %
  % Float references are printed completely differently: "Figure 1.2"
  % instead of "[somenode], p.3".  We distinguish them by the
  % LABEL-title being set to a magic string.
  {%
    % Have to otherify everything special to allow the \csname to
    % include an _ in the xref name, etc.
    \indexnofonts
    \turnoffactive
    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
      \csname XR#1-title\endcsname
  }%
  \iffloat\Xthisreftitle
    % If the user specified the print name (third arg) to the ref,
    % print it instead of our usual "Figure 1.2".
    \ifdim\wd0 = 0pt
      \refx{#1-snt}{}%
    \else
      \printedrefname
    \fi
    %
    % if the user also gave the printed manual name (fifth arg), append
    % "in MANUALNAME".
    \ifdim \wd1 > 0pt
      \space \putwordin{} \cite{\printedmanual}%
    \fi
  \else
    % node/anchor (non-float) references.
    %
    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
    % insert empty discretionaries after hyphens, which means that it will
    % not find a line break at a hyphen in a node names.  Since some manuals
    % are best written with fairly long node names, containing hyphens, this
    % is a loss.  Therefore, we give the text of the node name again, so it
    % is as if TeX is seeing it for the first time.
    \ifdim \wd1 > 0pt
      \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
    \else
      % _ (for example) has to be the character _ for the purposes of the
      % control sequence corresponding to the node, but it has to expand
      % into the usual \leavevmode...\vrule stuff for purposes of
      % printing. So we \turnoffactive for the \refx-snt, back on for the
      % printing, back off for the \refx-pg.
      {\turnoffactive
       % Only output a following space if the -snt ref is nonempty; for
       % @unnumbered and @anchor, it won't be.
       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
      }%
      % output the `[mynode]' via a macro so it can be overridden.
      \xrefprintnodename\printedrefname
      %
      % But we always want a comma and a space:
      ,\space
      %
      % output the `page 3'.
      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
    \fi
  \fi
  \endlink
\endgroup}

% This macro is called from \xrefX for the `[nodename]' part of xref
% output.  It's a separate macro only so it can be changed more easily,
% since square brackets don't work well in some documents.  Particularly
% one that Bob is working on :).
%
\def\xrefprintnodename#1{[#1]}

% Things referred to by \setref.
%
\def\Ynothing{}
\def\Yomitfromtoc{}
\def\Ynumbered{%
  \ifnum\secno=0
    \putwordChapter@tie \the\chapno
  \else \ifnum\subsecno=0
    \putwordSection@tie \the\chapno.\the\secno
  \else \ifnum\subsubsecno=0
    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
  \else
    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
  \fi\fi\fi
}
\def\Yappendix{%
  \ifnum\secno=0
     \putwordAppendix@tie @char\the\appendixno{}%
  \else \ifnum\subsecno=0
     \putwordSection@tie @char\the\appendixno.\the\secno
  \else \ifnum\subsubsecno=0
    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
  \else
    \putwordSection@tie
      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
  \fi\fi\fi
}

% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
% If its value is nonempty, SUFFIX is output afterward.
%
\def\refx#1#2{%
  {%
    \indexnofonts
    \otherbackslash
    \expandafter\global\expandafter\let\expandafter\thisrefX
      \csname XR#1\endcsname
  }%
  \ifx\thisrefX\relax
    % If not defined, say something at least.
    \angleleft un\-de\-fined\angleright
    \iflinks
      \ifhavexrefs
        \message{\linenumber Undefined cross reference `#1'.}%
      \else
        \ifwarnedxrefs\else
          \global\warnedxrefstrue
          \message{Cross reference values unknown; you must run TeX again.}%
        \fi
      \fi
    \fi
  \else
    % It's defined, so just use it.
    \thisrefX
  \fi
  #2% Output the suffix in any case.
}

% This is the macro invoked by entries in the aux file.  Usually it's
% just a \def (we prepend XR to the control sequence name to avoid
% collisions).  But if this is a float type, we have more work to do.
%
\def\xrdef#1#2{%
  {% The node name might contain 8-bit characters, which in our current
   % implementation are changed to commands like @'e.  Don't let these
   % mess up the control sequence name.
    \indexnofonts
    \turnoffactive
    \xdef\safexrefname{#1}%
  }%
  %
  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
  %
  % Was that xref control sequence that we just defined for a float?
  \expandafter\iffloat\csname XR\safexrefname\endcsname
    % it was a float, and we have the (safe) float type in \iffloattype.
    \expandafter\let\expandafter\floatlist
      \csname floatlist\iffloattype\endcsname
    %
    % Is this the first time we've seen this float type?
    \expandafter\ifx\floatlist\relax
      \toks0 = {\do}% yes, so just \do
    \else
      % had it before, so preserve previous elements in list.
      \toks0 = \expandafter{\floatlist\do}%
    \fi
    %
    % Remember this xref in the control sequence \floatlistFLOATTYPE,
    % for later use in \listoffloats.
    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
      {\safexrefname}}%
  \fi
}

% Read the last existing aux file, if any.  No error if none exists.
%
\def\tryauxfile{%
  \openin 1 \jobname.aux
  \ifeof 1 \else
    \readdatafile{aux}%
    \global\havexrefstrue
  \fi
  \closein 1
}

\def\setupdatafile{%
  \catcode`\^^@=\other
  \catcode`\^^A=\other
  \catcode`\^^B=\other
  \catcode`\^^C=\other
  \catcode`\^^D=\other
  \catcode`\^^E=\other
  \catcode`\^^F=\other
  \catcode`\^^G=\other
  \catcode`\^^H=\other
  \catcode`\^^K=\other
  \catcode`\^^L=\other
  \catcode`\^^N=\other
  \catcode`\^^P=\other
  \catcode`\^^Q=\other
  \catcode`\^^R=\other
  \catcode`\^^S=\other
  \catcode`\^^T=\other
  \catcode`\^^U=\other
  \catcode`\^^V=\other
  \catcode`\^^W=\other
  \catcode`\^^X=\other
  \catcode`\^^Z=\other
  \catcode`\^^[=\other
  \catcode`\^^\=\other
  \catcode`\^^]=\other
  \catcode`\^^^=\other
  \catcode`\^^_=\other
  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
  % supported in the main text, it doesn't seem desirable.  Furthermore,
  % that is not enough: for node names that actually contain a ^
  % character, we would end up writing a line like this: 'xrdef {'hat
  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
  % argument, and \hat is not an expandable control sequence.  It could
  % all be worked out, but why?  Either we support ^^ or we don't.
  %
  % The other change necessary for this was to define \auxhat:
  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
  % and then to call \auxhat in \setq.
  %
  \catcode`\^=\other
  %
  % Special characters.  Should be turned off anyway, but...
  \catcode`\~=\other
  \catcode`\[=\other
  \catcode`\]=\other
  \catcode`\"=\other
  \catcode`\_=\other
  \catcode`\|=\other
  \catcode`\<=\other
  \catcode`\>=\other
  \catcode`\$=\other
  \catcode`\#=\other
  \catcode`\&=\other
  \catcode`\%=\other
  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
  %
  % This is to support \ in node names and titles, since the \
  % characters end up in a \csname.  It's easier than
  % leaving it active and making its active definition an actual \
  % character.  What I don't understand is why it works in the *value*
  % of the xrdef.  Seems like it should be a catcode12 \, and that
  % should not typeset properly.  But it works, so I'm moving on for
  % now.  --karl, 15jan04.
  \catcode`\\=\other
  %
  % Make the characters 128-255 be printing characters.
  {%
    \count1=128
    \def\loop{%
      \catcode\count1=\other
      \advance\count1 by 1
      \ifnum \count1<256 \loop \fi
    }%
  }%
  %
  % @ is our escape character in .aux files, and we need braces.
  \catcode`\{=1
  \catcode`\}=2
  \catcode`\@=0
}

\def\readdatafile#1{%
\begingroup
  \setupdatafile
  \input\jobname.#1
\endgroup}


\message{insertions,}
% including footnotes.

\newcount \footnoteno

% The trailing space in the following definition for supereject is
% vital for proper filling; pages come out unaligned when you do a
% pagealignmacro call if that space before the closing brace is
% removed. (Generally, numeric constants should always be followed by a
% space to prevent strange expansion errors.)
\def\supereject{\par\penalty -20000\footnoteno =0 }

% @footnotestyle is meaningful for info output only.
\let\footnotestyle=\comment

{\catcode `\@=11
%
% Auto-number footnotes.  Otherwise like plain.
\gdef\footnote{%
  \let\indent=\ptexindent
  \let\noindent=\ptexnoindent
  \global\advance\footnoteno by \@ne
  \edef\thisfootno{$^{\the\footnoteno}$}%
  %
  % In case the footnote comes at the end of a sentence, preserve the
  % extra spacing after we do the footnote number.
  \let\@sf\empty
  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
  %
  % Remove inadvertent blank space before typesetting the footnote number.
  \unskip
  \thisfootno\@sf
  \dofootnote
}%

% Don't bother with the trickery in plain.tex to not require the
% footnote text as a parameter.  Our footnotes don't need to be so general.
%
% Oh yes, they do; otherwise, @ifset (and anything else that uses
% \parseargline) fails inside footnotes because the tokens are fixed when
% the footnote is read.  --karl, 16nov96.
%
\gdef\dofootnote{%
  \insert\footins\bgroup
  % We want to typeset this text as a normal paragraph, even if the
  % footnote reference occurs in (for example) a display environment.
  % So reset some parameters.
  \hsize=\pagewidth
  \interlinepenalty\interfootnotelinepenalty
  \splittopskip\ht\strutbox % top baseline for broken footnotes
  \splitmaxdepth\dp\strutbox
  \floatingpenalty\@MM
  \leftskip\z@skip
  \rightskip\z@skip
  \spaceskip\z@skip
  \xspaceskip\z@skip
  \parindent\defaultparindent
  %
  \smallfonts \rm
  %
  % Because we use hanging indentation in footnotes, a @noindent appears
  % to exdent this text, so make it be a no-op.  makeinfo does not use
  % hanging indentation so @noindent can still be needed within footnote
  % text after an @example or the like (not that this is good style).
  \let\noindent = \relax
  %
  % Hang the footnote text off the number.  Use \everypar in case the
  % footnote extends for more than one paragraph.
  \everypar = {\hang}%
  \textindent{\thisfootno}%
  %
  % Don't crash into the line above the footnote text.  Since this
  % expands into a box, it must come within the paragraph, lest it
  % provide a place where TeX can split the footnote.
  \footstrut
  \futurelet\next\fo@t
}
}%end \catcode `\@=11

% In case a @footnote appears in a vbox, save the footnote text and create
% the real \insert just after the vbox finished.  Otherwise, the insertion
% would be lost.
% Similarly, if a @footnote appears inside an alignment, save the footnote
% text to a box and make the \insert when a row of the table is finished.
% And the same can be done for other insert classes.  --kasal, 16nov03.

% Replace the \insert primitive by a cheating macro.
% Deeper inside, just make sure that the saved insertions are not spilled
% out prematurely.
%
\def\startsavinginserts{%
  \ifx \insert\ptexinsert
    \let\insert\saveinsert
  \else
    \let\checkinserts\relax
  \fi
}

% This \insert replacement works for both \insert\footins{foo} and
% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
%
\def\saveinsert#1{%
  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
  \afterassignment\next
  % swallow the left brace
  \let\temp =
}
\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}

\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}

\def\placesaveins#1{%
  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
    {\box#1}%
}

% eat @SAVE -- beware, all of them have catcode \other:
{
  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
  \gdef\gobblesave @SAVE{}
}

% initialization:
\def\newsaveins #1{%
  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
  \next
}
\def\newsaveinsX #1{%
  \csname newbox\endcsname #1%
  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
    \checksaveins #1}%
}

% initialize:
\let\checkinserts\empty
\newsaveins\footins
\newsaveins\margin


% @image.  We use the macros from epsf.tex to support this.
% If epsf.tex is not installed and @image is used, we complain.
%
% Check for and read epsf.tex up front.  If we read it only at @image
% time, we might be inside a group, and then its definitions would get
% undone and the next image would fail.
\openin 1 = epsf.tex
\ifeof 1 \else
  % Do not bother showing banner with epsf.tex v2.7k (available in
  % doc/epsf.tex and on ctan).
  \def\epsfannounce{\toks0 = }%
  \input epsf.tex
\fi
\closein 1
%
% We will only complain once about lack of epsf.tex.
\newif\ifwarnednoepsf
\newhelp\noepsfhelp{epsf.tex must be installed for images to
  work.  It is also included in the Texinfo distribution, or you can get
  it from ftp://tug.org/tex/epsf.tex.}
%
\def\image#1{%
  \ifx\epsfbox\undefined
    \ifwarnednoepsf \else
      \errhelp = \noepsfhelp
      \errmessage{epsf.tex not found, images will be ignored}%
      \global\warnednoepsftrue
    \fi
  \else
    \imagexxx #1,,,,,\finish
  \fi
}
%
% Arguments to @image:
% #1 is (mandatory) image filename; we tack on .eps extension.
% #2 is (optional) width, #3 is (optional) height.
% #4 is (ignored optional) html alt text.
% #5 is (ignored optional) extension.
% #6 is just the usual extra ignored arg for parsing this stuff.
\newif\ifimagevmode
\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
  \catcode`\^^M = 5     % in case we're inside an example
  \normalturnoffactive  % allow _ et al. in names
  % If the image is by itself, center it.
  \ifvmode
    \imagevmodetrue
    \nobreak\medskip
    % Usually we'll have text after the image which will insert
    % \parskip glue, so insert it here too to equalize the space
    % above and below.
    \nobreak\vskip\parskip
    \nobreak
  \fi
  %
  % Leave vertical mode so that indentation from an enclosing
  % environment such as @quotation is respected.  On the other hand, if
  % it's at the top level, we don't want the normal paragraph indentation.
  \noindent
  %
  % Output the image.
  \ifpdf
    \dopdfimage{#1}{#2}{#3}%
  \else
    % \epsfbox itself resets \epsf?size at each figure.
    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
    \epsfbox{#1.eps}%
  \fi
  %
  \ifimagevmode \medskip \fi  % space after the standalone image
\endgroup}


% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
% etc.  We don't actually implement floating yet, we always include the
% float "here".  But it seemed the best name for the future.
%
\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}

% There may be a space before second and/or third parameter; delete it.
\def\eatcommaspace#1, {#1,}

% #1 is the optional FLOATTYPE, the text label for this float, typically
% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
% this float will not be numbered and cannot be referred to.
%
% #2 is the optional xref label.  Also must be present for the float to
% be referable.
%
% #3 is the optional positioning argument; for now, it is ignored.  It
% will somehow specify the positions allowed to float to (here, top, bottom).
%
% We keep a separate counter for each FLOATTYPE, which we reset at each
% chapter-level command.
\let\resetallfloatnos=\empty
%
\def\dofloat#1,#2,#3,#4\finish{%
  \let\thiscaption=\empty
  \let\thisshortcaption=\empty
  %
  % don't lose footnotes inside @float.
  %
  % BEWARE: when the floats start float, we have to issue warning whenever an
  % insert appears inside a float which could possibly float. --kasal, 26may04
  %
  \startsavinginserts
  %
  % We can't be used inside a paragraph.
  \par
  %
  \vtop\bgroup
    \def\floattype{#1}%
    \def\floatlabel{#2}%
    \def\floatloc{#3}% we do nothing with this yet.
    %
    \ifx\floattype\empty
      \let\safefloattype=\empty
    \else
      {%
        % the floattype might have accents or other special characters,
        % but we need to use it in a control sequence name.
        \indexnofonts
        \turnoffactive
        \xdef\safefloattype{\floattype}%
      }%
    \fi
    %
    % If label is given but no type, we handle that as the empty type.
    \ifx\floatlabel\empty \else
      % We want each FLOATTYPE to be numbered separately (Figure 1,
      % Table 1, Figure 2, ...).  (And if no label, no number.)
      %
      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
      \global\advance\floatno by 1
      %
      {%
        % This magic value for \lastsection is output by \setref as the
        % XREFLABEL-title value.  \xrefX uses it to distinguish float
        % labels (which have a completely different output format) from
        % node and anchor labels.  And \xrdef uses it to construct the
        % lists of floats.
        %
        \edef\lastsection{\floatmagic=\safefloattype}%
        \setref{\floatlabel}{Yfloat}%
      }%
    \fi
    %
    % start with \parskip glue, I guess.
    \vskip\parskip
    %
    % Don't suppress indentation if a float happens to start a section.
    \restorefirstparagraphindent
}

% we have these possibilities:
% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
% @float Foo,lbl & no caption:    Foo 1.1
% @float Foo & @caption{Cap}:     Foo: Cap
% @float Foo & no caption:        Foo
% @float ,lbl & Caption{Cap}:     1.1: Cap
% @float ,lbl & no caption:       1.1
% @float & @caption{Cap}:         Cap
% @float & no caption:
%
\def\Efloat{%
    \let\floatident = \empty
    %
    % In all cases, if we have a float type, it comes first.
    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
    %
    % If we have an xref label, the number comes next.
    \ifx\floatlabel\empty \else
      \ifx\floattype\empty \else % if also had float type, need tie first.
        \appendtomacro\floatident{\tie}%
      \fi
      % the number.
      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
    \fi
    %
    % Start the printed caption with what we've constructed in
    % \floatident, but keep it separate; we need \floatident again.
    \let\captionline = \floatident
    %
    \ifx\thiscaption\empty \else
      \ifx\floatident\empty \else
	\appendtomacro\captionline{: }% had ident, so need a colon between
      \fi
      %
      % caption text.
      \appendtomacro\captionline{\scanexp\thiscaption}%
    \fi
    %
    % If we have anything to print, print it, with space before.
    % Eventually this needs to become an \insert.
    \ifx\captionline\empty \else
      \vskip.5\parskip
      \captionline
      %
      % Space below caption.
      \vskip\parskip
    \fi
    %
    % If have an xref label, write the list of floats info.  Do this
    % after the caption, to avoid chance of it being a breakpoint.
    \ifx\floatlabel\empty \else
      % Write the text that goes in the lof to the aux file as
      % \floatlabel-lof.  Besides \floatident, we include the short
      % caption if specified, else the full caption if specified, else nothing.
      {%
        \atdummies
        %
        % since we read the caption text in the macro world, where ^^M
        % is turned into a normal character, we have to scan it back, so
        % we don't write the literal three characters "^^M" into the aux file.
	\scanexp{%
	  \xdef\noexpand\gtemp{%
	    \ifx\thisshortcaption\empty
	      \thiscaption
	    \else
	      \thisshortcaption
	    \fi
	  }%
	}%
        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
	  \ifx\gtemp\empty \else : \gtemp \fi}}%
      }%
    \fi
  \egroup  % end of \vtop
  %
  % place the captured inserts
  %
  % BEWARE: when the floats start floating, we have to issue warning
  % whenever an insert appears inside a float which could possibly
  % float. --kasal, 26may04
  %
  \checkinserts
}

% Append the tokens #2 to the definition of macro #1, not expanding either.
%
\def\appendtomacro#1#2{%
  \expandafter\def\expandafter#1\expandafter{#1#2}%
}

% @caption, @shortcaption
%
\def\caption{\docaption\thiscaption}
\def\shortcaption{\docaption\thisshortcaption}
\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
\def\defcaption#1#2{\egroup \def#1{#2}}

% The parameter is the control sequence identifying the counter we are
% going to use.  Create it if it doesn't exist and assign it to \floatno.
\def\getfloatno#1{%
  \ifx#1\relax
      % Haven't seen this figure type before.
      \csname newcount\endcsname #1%
      %
      % Remember to reset this floatno at the next chap.
      \expandafter\gdef\expandafter\resetallfloatnos
        \expandafter{\resetallfloatnos #1=0 }%
  \fi
  \let\floatno#1%
}

% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
% first read the @float command.
%
\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%

% Magic string used for the XREFLABEL-title value, so \xrefX can
% distinguish floats from other xref types.
\def\floatmagic{!!float!!}

% #1 is the control sequence we are passed; we expand into a conditional
% which is true if #1 represents a float ref.  That is, the magic
% \lastsection value which we \setref above.
%
\def\iffloat#1{\expandafter\doiffloat#1==\finish}
%
% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
% (safe) float type for this float.  We set \iffloattype to #2.
%
\def\doiffloat#1=#2=#3\finish{%
  \def\temp{#1}%
  \def\iffloattype{#2}%
  \ifx\temp\floatmagic
}

% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
%
\parseargdef\listoffloats{%
  \def\floattype{#1}% floattype
  {%
    % the floattype might have accents or other special characters,
    % but we need to use it in a control sequence name.
    \indexnofonts
    \turnoffactive
    \xdef\safefloattype{\floattype}%
  }%
  %
  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
    \ifhavexrefs
      % if the user said @listoffloats foo but never @float foo.
      \message{\linenumber No `\safefloattype' floats to list.}%
    \fi
  \else
    \begingroup
      \leftskip=\tocindent  % indent these entries like a toc
      \let\do=\listoffloatsdo
      \csname floatlist\safefloattype\endcsname
    \endgroup
  \fi
}

% This is called on each entry in a list of floats.  We're passed the
% xref label, in the form LABEL-title, which is how we save it in the
% aux file.  We strip off the -title and look up \XRLABEL-lof, which
% has the text we're supposed to typeset here.
%
% Figures without xref labels will not be included in the list (since
% they won't appear in the aux file).
%
\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
\def\listoffloatsdoentry#1-title\finish{{%
  % Can't fully expand XR#1-lof because it can contain anything.  Just
  % pass the control sequence.  On the other hand, XR#1-pg is just the
  % page number, and we want to fully expand that so we can get a link
  % in pdf output.
  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
  %
  % use the same \entry macro we use to generate the TOC and index.
  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
  \writeentry
}}


\message{localization,}

% For single-language documents, @documentlanguage is usually given very
% early, just after @documentencoding.  Single argument is the language
% (de) or locale (de_DE) abbreviation.
%
{
  \catcode`\_ = \active
  \globaldefs=1
\parseargdef\documentlanguage{\begingroup
  \let_=\normalunderscore  % normal _ character for filenames
  \tex % read txi-??.tex file in plain TeX.
    % Read the file by the name they passed if it exists.
    \openin 1 txi-#1.tex
    \ifeof 1
      \documentlanguagetrywithoutunderscore{#1_\finish}%
    \else
      \globaldefs = 1  % everything in the txi-LL files needs to persist
      \input txi-#1.tex
    \fi
    \closein 1
  \endgroup % end raw TeX
\endgroup}
%
% If they passed de_DE, and txi-de_DE.tex doesn't exist,
% try txi-de.tex.
%
\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
  \openin 1 txi-#1.tex
  \ifeof 1
    \errhelp = \nolanghelp
    \errmessage{Cannot read language file txi-#1.tex}%
  \else
    \globaldefs = 1  % everything in the txi-LL files needs to persist
    \input txi-#1.tex
  \fi
  \closein 1
}
}% end of special _ catcode
%
\newhelp\nolanghelp{The given language definition file cannot be found or
is empty.  Maybe you need to install it?  Putting it in the current
directory should work if nowhere else does.}

% This macro is called from txi-??.tex files; the first argument is the
% \language name to set (without the "\lang@" prefix), the second and
% third args are \{left,right}hyphenmin.
%
% The language names to pass are determined when the format is built.
% See the etex.log file created at that time, e.g.,
% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
%
% With TeX Live 2008, etex now includes hyphenation patterns for all
% available languages.  This means we can support hyphenation in
% Texinfo, at least to some extent.  (This still doesn't solve the
% accented characters problem.)
%
\catcode`@=11
\def\txisetlanguage#1#2#3{%
  % do not set the language if the name is undefined in the current TeX.
  \expandafter\ifx\csname lang@#1\endcsname \relax
    \message{no patterns for #1}%
  \else
    \global\language = \csname lang@#1\endcsname
  \fi
  % but there is no harm in adjusting the hyphenmin values regardless.
  \global\lefthyphenmin = #2\relax
  \global\righthyphenmin = #3\relax
}

% Helpers for encodings.
% Set the catcode of characters 128 through 255 to the specified number.
%
\def\setnonasciicharscatcode#1{%
   \count255=128
   \loop\ifnum\count255<256
      \global\catcode\count255=#1\relax
      \advance\count255 by 1
   \repeat
}

\def\setnonasciicharscatcodenonglobal#1{%
   \count255=128
   \loop\ifnum\count255<256
      \catcode\count255=#1\relax
      \advance\count255 by 1
   \repeat
}

% @documentencoding sets the definition of non-ASCII characters
% according to the specified encoding.
%
\parseargdef\documentencoding{%
  % Encoding being declared for the document.
  \def\declaredencoding{\csname #1.enc\endcsname}%
  %
  % Supported encodings: names converted to tokens in order to be able
  % to compare them with \ifx.
  \def\ascii{\csname US-ASCII.enc\endcsname}%
  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
  \def\latone{\csname ISO-8859-1.enc\endcsname}%
  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
  \def\utfeight{\csname UTF-8.enc\endcsname}%
  %
  \ifx \declaredencoding \ascii
     \asciichardefs
  %
  \else \ifx \declaredencoding \lattwo
     \setnonasciicharscatcode\active
     \lattwochardefs
  %
  \else \ifx \declaredencoding \latone
     \setnonasciicharscatcode\active
     \latonechardefs
  %
  \else \ifx \declaredencoding \latnine
     \setnonasciicharscatcode\active
     \latninechardefs
  %
  \else \ifx \declaredencoding \utfeight
     \setnonasciicharscatcode\active
     \utfeightchardefs
  %
  \else
    \message{Unknown document encoding #1, ignoring.}%
  %
  \fi % utfeight
  \fi % latnine
  \fi % latone
  \fi % lattwo
  \fi % ascii
}

% A message to be logged when using a character that isn't available
% the default font encoding (OT1).
%
\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}

% Take account of \c (plain) vs. \, (Texinfo) difference.
\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}

% First, make active non-ASCII characters in order for them to be
% correctly categorized when TeX reads the replacement text of
% macros containing the character definitions.
\setnonasciicharscatcode\active
%
% Latin1 (ISO-8859-1) character definitions.
\def\latonechardefs{%
  \gdef^^a0{~}
  \gdef^^a1{\exclamdown}
  \gdef^^a2{\missingcharmsg{CENT SIGN}}
  \gdef^^a3{{\pounds}}
  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
  \gdef^^a5{\missingcharmsg{YEN SIGN}}
  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
  \gdef^^a7{\S}
  \gdef^^a8{\"{}}
  \gdef^^a9{\copyright}
  \gdef^^aa{\ordf}
  \gdef^^ab{\guillemetleft}
  \gdef^^ac{$\lnot$}
  \gdef^^ad{\-}
  \gdef^^ae{\registeredsymbol}
  \gdef^^af{\={}}
  %
  \gdef^^b0{\textdegree}
  \gdef^^b1{$\pm$}
  \gdef^^b2{$^2$}
  \gdef^^b3{$^3$}
  \gdef^^b4{\'{}}
  \gdef^^b5{$\mu$}
  \gdef^^b6{\P}
  %
  \gdef^^b7{$^.$}
  \gdef^^b8{\cedilla\ }
  \gdef^^b9{$^1$}
  \gdef^^ba{\ordm}
  %
  \gdef^^bb{\guilletright}
  \gdef^^bc{$1\over4$}
  \gdef^^bd{$1\over2$}
  \gdef^^be{$3\over4$}
  \gdef^^bf{\questiondown}
  %
  \gdef^^c0{\`A}
  \gdef^^c1{\'A}
  \gdef^^c2{\^A}
  \gdef^^c3{\~A}
  \gdef^^c4{\"A}
  \gdef^^c5{\ringaccent A}
  \gdef^^c6{\AE}
  \gdef^^c7{\cedilla C}
  \gdef^^c8{\`E}
  \gdef^^c9{\'E}
  \gdef^^ca{\^E}
  \gdef^^cb{\"E}
  \gdef^^cc{\`I}
  \gdef^^cd{\'I}
  \gdef^^ce{\^I}
  \gdef^^cf{\"I}
  %
  \gdef^^d0{\DH}
  \gdef^^d1{\~N}
  \gdef^^d2{\`O}
  \gdef^^d3{\'O}
  \gdef^^d4{\^O}
  \gdef^^d5{\~O}
  \gdef^^d6{\"O}
  \gdef^^d7{$\times$}
  \gdef^^d8{\O}
  \gdef^^d9{\`U}
  \gdef^^da{\'U}
  \gdef^^db{\^U}
  \gdef^^dc{\"U}
  \gdef^^dd{\'Y}
  \gdef^^de{\TH}
  \gdef^^df{\ss}
  %
  \gdef^^e0{\`a}
  \gdef^^e1{\'a}
  \gdef^^e2{\^a}
  \gdef^^e3{\~a}
  \gdef^^e4{\"a}
  \gdef^^e5{\ringaccent a}
  \gdef^^e6{\ae}
  \gdef^^e7{\cedilla c}
  \gdef^^e8{\`e}
  \gdef^^e9{\'e}
  \gdef^^ea{\^e}
  \gdef^^eb{\"e}
  \gdef^^ec{\`{\dotless i}}
  \gdef^^ed{\'{\dotless i}}
  \gdef^^ee{\^{\dotless i}}
  \gdef^^ef{\"{\dotless i}}
  %
  \gdef^^f0{\dh}
  \gdef^^f1{\~n}
  \gdef^^f2{\`o}
  \gdef^^f3{\'o}
  \gdef^^f4{\^o}
  \gdef^^f5{\~o}
  \gdef^^f6{\"o}
  \gdef^^f7{$\div$}
  \gdef^^f8{\o}
  \gdef^^f9{\`u}
  \gdef^^fa{\'u}
  \gdef^^fb{\^u}
  \gdef^^fc{\"u}
  \gdef^^fd{\'y}
  \gdef^^fe{\th}
  \gdef^^ff{\"y}
}

% Latin9 (ISO-8859-15) encoding character definitions.
\def\latninechardefs{%
  % Encoding is almost identical to Latin1.
  \latonechardefs
  %
  \gdef^^a4{\euro}
  \gdef^^a6{\v S}
  \gdef^^a8{\v s}
  \gdef^^b4{\v Z}
  \gdef^^b8{\v z}
  \gdef^^bc{\OE}
  \gdef^^bd{\oe}
  \gdef^^be{\"Y}
}

% Latin2 (ISO-8859-2) character definitions.
\def\lattwochardefs{%
  \gdef^^a0{~}
  \gdef^^a1{\ogonek{A}}
  \gdef^^a2{\u{}}
  \gdef^^a3{\L}
  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
  \gdef^^a5{\v L}
  \gdef^^a6{\'S}
  \gdef^^a7{\S}
  \gdef^^a8{\"{}}
  \gdef^^a9{\v S}
  \gdef^^aa{\cedilla S}
  \gdef^^ab{\v T}
  \gdef^^ac{\'Z}
  \gdef^^ad{\-}
  \gdef^^ae{\v Z}
  \gdef^^af{\dotaccent Z}
  %
  \gdef^^b0{\textdegree}
  \gdef^^b1{\ogonek{a}}
  \gdef^^b2{\ogonek{ }}
  \gdef^^b3{\l}
  \gdef^^b4{\'{}}
  \gdef^^b5{\v l}
  \gdef^^b6{\'s}
  \gdef^^b7{\v{}}
  \gdef^^b8{\cedilla\ }
  \gdef^^b9{\v s}
  \gdef^^ba{\cedilla s}
  \gdef^^bb{\v t}
  \gdef^^bc{\'z}
  \gdef^^bd{\H{}}
  \gdef^^be{\v z}
  \gdef^^bf{\dotaccent z}
  %
  \gdef^^c0{\'R}
  \gdef^^c1{\'A}
  \gdef^^c2{\^A}
  \gdef^^c3{\u A}
  \gdef^^c4{\"A}
  \gdef^^c5{\'L}
  \gdef^^c6{\'C}
  \gdef^^c7{\cedilla C}
  \gdef^^c8{\v C}
  \gdef^^c9{\'E}
  \gdef^^ca{\ogonek{E}}
  \gdef^^cb{\"E}
  \gdef^^cc{\v E}
  \gdef^^cd{\'I}
  \gdef^^ce{\^I}
  \gdef^^cf{\v D}
  %
  \gdef^^d0{\DH}
  \gdef^^d1{\'N}
  \gdef^^d2{\v N}
  \gdef^^d3{\'O}
  \gdef^^d4{\^O}
  \gdef^^d5{\H O}
  \gdef^^d6{\"O}
  \gdef^^d7{$\times$}
  \gdef^^d8{\v R}
  \gdef^^d9{\ringaccent U}
  \gdef^^da{\'U}
  \gdef^^db{\H U}
  \gdef^^dc{\"U}
  \gdef^^dd{\'Y}
  \gdef^^de{\cedilla T}
  \gdef^^df{\ss}
  %
  \gdef^^e0{\'r}
  \gdef^^e1{\'a}
  \gdef^^e2{\^a}
  \gdef^^e3{\u a}
  \gdef^^e4{\"a}
  \gdef^^e5{\'l}
  \gdef^^e6{\'c}
  \gdef^^e7{\cedilla c}
  \gdef^^e8{\v c}
  \gdef^^e9{\'e}
  \gdef^^ea{\ogonek{e}}
  \gdef^^eb{\"e}
  \gdef^^ec{\v e}
  \gdef^^ed{\'\i}
  \gdef^^ee{\^\i}
  \gdef^^ef{\v d}
  %
  \gdef^^f0{\dh}
  \gdef^^f1{\'n}
  \gdef^^f2{\v n}
  \gdef^^f3{\'o}
  \gdef^^f4{\^o}
  \gdef^^f5{\H o}
  \gdef^^f6{\"o}
  \gdef^^f7{$\div$}
  \gdef^^f8{\v r}
  \gdef^^f9{\ringaccent u}
  \gdef^^fa{\'u}
  \gdef^^fb{\H u}
  \gdef^^fc{\"u}
  \gdef^^fd{\'y}
  \gdef^^fe{\cedilla t}
  \gdef^^ff{\dotaccent{}}
}

% UTF-8 character definitions.
%
% This code to support UTF-8 is based on LaTeX's utf8.def, with some
% changes for Texinfo conventions.  It is included here under the GPL by
% permission from Frank Mittelbach and the LaTeX team.
%
\newcount\countUTFx
\newcount\countUTFy
\newcount\countUTFz

\gdef\UTFviiiTwoOctets#1#2{\expandafter
   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
%
\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
%
\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}

\gdef\UTFviiiDefined#1{%
  \ifx #1\relax
    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
  \else
    \expandafter #1%
  \fi
}

\begingroup
  \catcode`\~13
  \catcode`\"12

  \def\UTFviiiLoop{%
    \global\catcode\countUTFx\active
    \uccode`\~\countUTFx
    \uppercase\expandafter{\UTFviiiTmp}%
    \advance\countUTFx by 1
    \ifnum\countUTFx < \countUTFy
      \expandafter\UTFviiiLoop
    \fi}

  \countUTFx = "C2
  \countUTFy = "E0
  \def\UTFviiiTmp{%
    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
  \UTFviiiLoop

  \countUTFx = "E0
  \countUTFy = "F0
  \def\UTFviiiTmp{%
    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
  \UTFviiiLoop

  \countUTFx = "F0
  \countUTFy = "F4
  \def\UTFviiiTmp{%
    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
  \UTFviiiLoop
\endgroup

\begingroup
  \catcode`\"=12
  \catcode`\<=12
  \catcode`\.=12
  \catcode`\,=12
  \catcode`\;=12
  \catcode`\!=12
  \catcode`\~=13

  \gdef\DeclareUnicodeCharacter#1#2{%
    \countUTFz = "#1\relax
    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
    \begingroup
      \parseXMLCharref
      \def\UTFviiiTwoOctets##1##2{%
        \csname u8:##1\string ##2\endcsname}%
      \def\UTFviiiThreeOctets##1##2##3{%
        \csname u8:##1\string ##2\string ##3\endcsname}%
      \def\UTFviiiFourOctets##1##2##3##4{%
        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
      \expandafter\expandafter\expandafter\expandafter
       \expandafter\expandafter\expandafter
       \gdef\UTFviiiTmp{#2}%
    \endgroup}

  \gdef\parseXMLCharref{%
    \ifnum\countUTFz < "A0\relax
      \errhelp = \EMsimple
      \errmessage{Cannot define Unicode char value < 00A0}%
    \else\ifnum\countUTFz < "800\relax
      \parseUTFviiiA,%
      \parseUTFviiiB C\UTFviiiTwoOctets.,%
    \else\ifnum\countUTFz < "10000\relax
      \parseUTFviiiA;%
      \parseUTFviiiA,%
      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
    \else
      \parseUTFviiiA;%
      \parseUTFviiiA,%
      \parseUTFviiiA!%
      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
    \fi\fi\fi
  }

  \gdef\parseUTFviiiA#1{%
    \countUTFx = \countUTFz
    \divide\countUTFz by 64
    \countUTFy = \countUTFz
    \multiply\countUTFz by 64
    \advance\countUTFx by -\countUTFz
    \advance\countUTFx by 128
    \uccode `#1\countUTFx
    \countUTFz = \countUTFy}

  \gdef\parseUTFviiiB#1#2#3#4{%
    \advance\countUTFz by "#10\relax
    \uccode `#3\countUTFz
    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
\endgroup

\def\utfeightchardefs{%
  \DeclareUnicodeCharacter{00A0}{\tie}
  \DeclareUnicodeCharacter{00A1}{\exclamdown}
  \DeclareUnicodeCharacter{00A3}{\pounds}
  \DeclareUnicodeCharacter{00A8}{\"{ }}
  \DeclareUnicodeCharacter{00A9}{\copyright}
  \DeclareUnicodeCharacter{00AA}{\ordf}
  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
  \DeclareUnicodeCharacter{00AD}{\-}
  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
  \DeclareUnicodeCharacter{00AF}{\={ }}

  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
  \DeclareUnicodeCharacter{00B4}{\'{ }}
  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
  \DeclareUnicodeCharacter{00BA}{\ordm}
  \DeclareUnicodeCharacter{00BB}{\guillemetright}
  \DeclareUnicodeCharacter{00BF}{\questiondown}

  \DeclareUnicodeCharacter{00C0}{\`A}
  \DeclareUnicodeCharacter{00C1}{\'A}
  \DeclareUnicodeCharacter{00C2}{\^A}
  \DeclareUnicodeCharacter{00C3}{\~A}
  \DeclareUnicodeCharacter{00C4}{\"A}
  \DeclareUnicodeCharacter{00C5}{\AA}
  \DeclareUnicodeCharacter{00C6}{\AE}
  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
  \DeclareUnicodeCharacter{00C8}{\`E}
  \DeclareUnicodeCharacter{00C9}{\'E}
  \DeclareUnicodeCharacter{00CA}{\^E}
  \DeclareUnicodeCharacter{00CB}{\"E}
  \DeclareUnicodeCharacter{00CC}{\`I}
  \DeclareUnicodeCharacter{00CD}{\'I}
  \DeclareUnicodeCharacter{00CE}{\^I}
  \DeclareUnicodeCharacter{00CF}{\"I}

  \DeclareUnicodeCharacter{00D0}{\DH}
  \DeclareUnicodeCharacter{00D1}{\~N}
  \DeclareUnicodeCharacter{00D2}{\`O}
  \DeclareUnicodeCharacter{00D3}{\'O}
  \DeclareUnicodeCharacter{00D4}{\^O}
  \DeclareUnicodeCharacter{00D5}{\~O}
  \DeclareUnicodeCharacter{00D6}{\"O}
  \DeclareUnicodeCharacter{00D8}{\O}
  \DeclareUnicodeCharacter{00D9}{\`U}
  \DeclareUnicodeCharacter{00DA}{\'U}
  \DeclareUnicodeCharacter{00DB}{\^U}
  \DeclareUnicodeCharacter{00DC}{\"U}
  \DeclareUnicodeCharacter{00DD}{\'Y}
  \DeclareUnicodeCharacter{00DE}{\TH}
  \DeclareUnicodeCharacter{00DF}{\ss}

  \DeclareUnicodeCharacter{00E0}{\`a}
  \DeclareUnicodeCharacter{00E1}{\'a}
  \DeclareUnicodeCharacter{00E2}{\^a}
  \DeclareUnicodeCharacter{00E3}{\~a}
  \DeclareUnicodeCharacter{00E4}{\"a}
  \DeclareUnicodeCharacter{00E5}{\aa}
  \DeclareUnicodeCharacter{00E6}{\ae}
  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
  \DeclareUnicodeCharacter{00E8}{\`e}
  \DeclareUnicodeCharacter{00E9}{\'e}
  \DeclareUnicodeCharacter{00EA}{\^e}
  \DeclareUnicodeCharacter{00EB}{\"e}
  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}

  \DeclareUnicodeCharacter{00F0}{\dh}
  \DeclareUnicodeCharacter{00F1}{\~n}
  \DeclareUnicodeCharacter{00F2}{\`o}
  \DeclareUnicodeCharacter{00F3}{\'o}
  \DeclareUnicodeCharacter{00F4}{\^o}
  \DeclareUnicodeCharacter{00F5}{\~o}
  \DeclareUnicodeCharacter{00F6}{\"o}
  \DeclareUnicodeCharacter{00F8}{\o}
  \DeclareUnicodeCharacter{00F9}{\`u}
  \DeclareUnicodeCharacter{00FA}{\'u}
  \DeclareUnicodeCharacter{00FB}{\^u}
  \DeclareUnicodeCharacter{00FC}{\"u}
  \DeclareUnicodeCharacter{00FD}{\'y}
  \DeclareUnicodeCharacter{00FE}{\th}
  \DeclareUnicodeCharacter{00FF}{\"y}

  \DeclareUnicodeCharacter{0100}{\=A}
  \DeclareUnicodeCharacter{0101}{\=a}
  \DeclareUnicodeCharacter{0102}{\u{A}}
  \DeclareUnicodeCharacter{0103}{\u{a}}
  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
  \DeclareUnicodeCharacter{0106}{\'C}
  \DeclareUnicodeCharacter{0107}{\'c}
  \DeclareUnicodeCharacter{0108}{\^C}
  \DeclareUnicodeCharacter{0109}{\^c}
  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
  \DeclareUnicodeCharacter{010C}{\v{C}}
  \DeclareUnicodeCharacter{010D}{\v{c}}
  \DeclareUnicodeCharacter{010E}{\v{D}}

  \DeclareUnicodeCharacter{0112}{\=E}
  \DeclareUnicodeCharacter{0113}{\=e}
  \DeclareUnicodeCharacter{0114}{\u{E}}
  \DeclareUnicodeCharacter{0115}{\u{e}}
  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
  \DeclareUnicodeCharacter{011A}{\v{E}}
  \DeclareUnicodeCharacter{011B}{\v{e}}
  \DeclareUnicodeCharacter{011C}{\^G}
  \DeclareUnicodeCharacter{011D}{\^g}
  \DeclareUnicodeCharacter{011E}{\u{G}}
  \DeclareUnicodeCharacter{011F}{\u{g}}

  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
  \DeclareUnicodeCharacter{0124}{\^H}
  \DeclareUnicodeCharacter{0125}{\^h}
  \DeclareUnicodeCharacter{0128}{\~I}
  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
  \DeclareUnicodeCharacter{012A}{\=I}
  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
  \DeclareUnicodeCharacter{012C}{\u{I}}
  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}

  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
  \DeclareUnicodeCharacter{0131}{\dotless{i}}
  \DeclareUnicodeCharacter{0132}{IJ}
  \DeclareUnicodeCharacter{0133}{ij}
  \DeclareUnicodeCharacter{0134}{\^J}
  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
  \DeclareUnicodeCharacter{0139}{\'L}
  \DeclareUnicodeCharacter{013A}{\'l}

  \DeclareUnicodeCharacter{0141}{\L}
  \DeclareUnicodeCharacter{0142}{\l}
  \DeclareUnicodeCharacter{0143}{\'N}
  \DeclareUnicodeCharacter{0144}{\'n}
  \DeclareUnicodeCharacter{0147}{\v{N}}
  \DeclareUnicodeCharacter{0148}{\v{n}}
  \DeclareUnicodeCharacter{014C}{\=O}
  \DeclareUnicodeCharacter{014D}{\=o}
  \DeclareUnicodeCharacter{014E}{\u{O}}
  \DeclareUnicodeCharacter{014F}{\u{o}}

  \DeclareUnicodeCharacter{0150}{\H{O}}
  \DeclareUnicodeCharacter{0151}{\H{o}}
  \DeclareUnicodeCharacter{0152}{\OE}
  \DeclareUnicodeCharacter{0153}{\oe}
  \DeclareUnicodeCharacter{0154}{\'R}
  \DeclareUnicodeCharacter{0155}{\'r}
  \DeclareUnicodeCharacter{0158}{\v{R}}
  \DeclareUnicodeCharacter{0159}{\v{r}}
  \DeclareUnicodeCharacter{015A}{\'S}
  \DeclareUnicodeCharacter{015B}{\'s}
  \DeclareUnicodeCharacter{015C}{\^S}
  \DeclareUnicodeCharacter{015D}{\^s}
  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
  \DeclareUnicodeCharacter{015F}{\cedilla{s}}

  \DeclareUnicodeCharacter{0160}{\v{S}}
  \DeclareUnicodeCharacter{0161}{\v{s}}
  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
  \DeclareUnicodeCharacter{0164}{\v{T}}

  \DeclareUnicodeCharacter{0168}{\~U}
  \DeclareUnicodeCharacter{0169}{\~u}
  \DeclareUnicodeCharacter{016A}{\=U}
  \DeclareUnicodeCharacter{016B}{\=u}
  \DeclareUnicodeCharacter{016C}{\u{U}}
  \DeclareUnicodeCharacter{016D}{\u{u}}
  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}

  \DeclareUnicodeCharacter{0170}{\H{U}}
  \DeclareUnicodeCharacter{0171}{\H{u}}
  \DeclareUnicodeCharacter{0174}{\^W}
  \DeclareUnicodeCharacter{0175}{\^w}
  \DeclareUnicodeCharacter{0176}{\^Y}
  \DeclareUnicodeCharacter{0177}{\^y}
  \DeclareUnicodeCharacter{0178}{\"Y}
  \DeclareUnicodeCharacter{0179}{\'Z}
  \DeclareUnicodeCharacter{017A}{\'z}
  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
  \DeclareUnicodeCharacter{017D}{\v{Z}}
  \DeclareUnicodeCharacter{017E}{\v{z}}

  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
  \DeclareUnicodeCharacter{01C5}{D\v{z}}
  \DeclareUnicodeCharacter{01C6}{d\v{z}}
  \DeclareUnicodeCharacter{01C7}{LJ}
  \DeclareUnicodeCharacter{01C8}{Lj}
  \DeclareUnicodeCharacter{01C9}{lj}
  \DeclareUnicodeCharacter{01CA}{NJ}
  \DeclareUnicodeCharacter{01CB}{Nj}
  \DeclareUnicodeCharacter{01CC}{nj}
  \DeclareUnicodeCharacter{01CD}{\v{A}}
  \DeclareUnicodeCharacter{01CE}{\v{a}}
  \DeclareUnicodeCharacter{01CF}{\v{I}}

  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
  \DeclareUnicodeCharacter{01D1}{\v{O}}
  \DeclareUnicodeCharacter{01D2}{\v{o}}
  \DeclareUnicodeCharacter{01D3}{\v{U}}
  \DeclareUnicodeCharacter{01D4}{\v{u}}

  \DeclareUnicodeCharacter{01E2}{\={\AE}}
  \DeclareUnicodeCharacter{01E3}{\={\ae}}
  \DeclareUnicodeCharacter{01E6}{\v{G}}
  \DeclareUnicodeCharacter{01E7}{\v{g}}
  \DeclareUnicodeCharacter{01E8}{\v{K}}
  \DeclareUnicodeCharacter{01E9}{\v{k}}

  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
  \DeclareUnicodeCharacter{01F1}{DZ}
  \DeclareUnicodeCharacter{01F2}{Dz}
  \DeclareUnicodeCharacter{01F3}{dz}
  \DeclareUnicodeCharacter{01F4}{\'G}
  \DeclareUnicodeCharacter{01F5}{\'g}
  \DeclareUnicodeCharacter{01F8}{\`N}
  \DeclareUnicodeCharacter{01F9}{\`n}
  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
  \DeclareUnicodeCharacter{01FE}{\'{\O}}
  \DeclareUnicodeCharacter{01FF}{\'{\o}}

  \DeclareUnicodeCharacter{021E}{\v{H}}
  \DeclareUnicodeCharacter{021F}{\v{h}}

  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}

  \DeclareUnicodeCharacter{0232}{\=Y}
  \DeclareUnicodeCharacter{0233}{\=y}
  \DeclareUnicodeCharacter{0237}{\dotless{j}}

  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}

  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}

  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}

  \DeclareUnicodeCharacter{1E20}{\=G}
  \DeclareUnicodeCharacter{1E21}{\=g}
  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
  \DeclareUnicodeCharacter{1E26}{\"H}
  \DeclareUnicodeCharacter{1E27}{\"h}

  \DeclareUnicodeCharacter{1E30}{\'K}
  \DeclareUnicodeCharacter{1E31}{\'k}
  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
  \DeclareUnicodeCharacter{1E3E}{\'M}
  \DeclareUnicodeCharacter{1E3F}{\'m}

  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}

  \DeclareUnicodeCharacter{1E54}{\'P}
  \DeclareUnicodeCharacter{1E55}{\'p}
  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}

  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}

  \DeclareUnicodeCharacter{1E7C}{\~V}
  \DeclareUnicodeCharacter{1E7D}{\~v}
  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}

  \DeclareUnicodeCharacter{1E80}{\`W}
  \DeclareUnicodeCharacter{1E81}{\`w}
  \DeclareUnicodeCharacter{1E82}{\'W}
  \DeclareUnicodeCharacter{1E83}{\'w}
  \DeclareUnicodeCharacter{1E84}{\"W}
  \DeclareUnicodeCharacter{1E85}{\"w}
  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
  \DeclareUnicodeCharacter{1E8C}{\"X}
  \DeclareUnicodeCharacter{1E8D}{\"x}
  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}

  \DeclareUnicodeCharacter{1E90}{\^Z}
  \DeclareUnicodeCharacter{1E91}{\^z}
  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
  \DeclareUnicodeCharacter{1E97}{\"t}
  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}

  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}

  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
  \DeclareUnicodeCharacter{1EBC}{\~E}
  \DeclareUnicodeCharacter{1EBD}{\~e}

  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}

  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}

  \DeclareUnicodeCharacter{1EF2}{\`Y}
  \DeclareUnicodeCharacter{1EF3}{\`y}
  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}

  \DeclareUnicodeCharacter{1EF8}{\~Y}
  \DeclareUnicodeCharacter{1EF9}{\~y}

  \DeclareUnicodeCharacter{2013}{--}
  \DeclareUnicodeCharacter{2014}{---}
  \DeclareUnicodeCharacter{2018}{\quoteleft}
  \DeclareUnicodeCharacter{2019}{\quoteright}
  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
  \DeclareUnicodeCharacter{201C}{\quotedblleft}
  \DeclareUnicodeCharacter{201D}{\quotedblright}
  \DeclareUnicodeCharacter{201E}{\quotedblbase}
  \DeclareUnicodeCharacter{2022}{\bullet}
  \DeclareUnicodeCharacter{2026}{\dots}
  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
  \DeclareUnicodeCharacter{203A}{\guilsinglright}
  \DeclareUnicodeCharacter{20AC}{\euro}

  \DeclareUnicodeCharacter{2192}{\expansion}
  \DeclareUnicodeCharacter{21D2}{\result}

  \DeclareUnicodeCharacter{2212}{\minus}
  \DeclareUnicodeCharacter{2217}{\point}
  \DeclareUnicodeCharacter{2261}{\equiv}
}% end of \utfeightchardefs


% US-ASCII character definitions.
\def\asciichardefs{% nothing need be done
   \relax
}

% Make non-ASCII characters printable again for compatibility with
% existing Texinfo documents that may use them, even without declaring a
% document encoding.
%
\setnonasciicharscatcode \other


\message{formatting,}

\newdimen\defaultparindent \defaultparindent = 15pt

\chapheadingskip = 15pt plus 4pt minus 2pt
\secheadingskip = 12pt plus 3pt minus 2pt
\subsecheadingskip = 9pt plus 2pt minus 2pt

% Prevent underfull vbox error messages.
\vbadness = 10000

% Don't be so finicky about underfull hboxes, either.
\hbadness = 2000

% Following George Bush, get rid of widows and orphans.
\widowpenalty=10000
\clubpenalty=10000

% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
% using an old version of TeX, don't do anything.  We want the amount of
% stretch added to depend on the line length, hence the dependence on
% \hsize.  We call this whenever the paper size is set.
%
\def\setemergencystretch{%
  \ifx\emergencystretch\thisisundefined
    % Allow us to assign to \emergencystretch anyway.
    \def\emergencystretch{\dimen0}%
  \else
    \emergencystretch = .15\hsize
  \fi
}

% Parameters in order: 1) textheight; 2) textwidth;
% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
% 7) physical page height; 8) physical page width.
%
% We also call \setleading{\textleading}, so the caller should define
% \textleading.  The caller should also set \parskip.
%
\def\internalpagesizes#1#2#3#4#5#6#7#8{%
  \voffset = #3\relax
  \topskip = #6\relax
  \splittopskip = \topskip
  %
  \vsize = #1\relax
  \advance\vsize by \topskip
  \outervsize = \vsize
  \advance\outervsize by 2\topandbottommargin
  \pageheight = \vsize
  %
  \hsize = #2\relax
  \outerhsize = \hsize
  \advance\outerhsize by 0.5in
  \pagewidth = \hsize
  %
  \normaloffset = #4\relax
  \bindingoffset = #5\relax
  %
  \ifpdf
    \pdfpageheight #7\relax
    \pdfpagewidth #8\relax
    % if we don't reset these, they will remain at "1 true in" of
    % whatever layout pdftex was dumped with.
    \pdfhorigin = 1 true in
    \pdfvorigin = 1 true in
  \fi
  %
  \setleading{\textleading}
  %
  \parindent = \defaultparindent
  \setemergencystretch
}

% @letterpaper (the default).
\def\letterpaper{{\globaldefs = 1
  \parskip = 3pt plus 2pt minus 1pt
  \textleading = 13.2pt
  %
  % If page is nothing but text, make it come out even.
  \internalpagesizes{607.2pt}{6in}% that's 46 lines
                    {\voffset}{.25in}%
                    {\bindingoffset}{36pt}%
                    {11in}{8.5in}%
}}

% Use @smallbook to reset parameters for 7x9.25 trim size.
\def\smallbook{{\globaldefs = 1
  \parskip = 2pt plus 1pt
  \textleading = 12pt
  %
  \internalpagesizes{7.5in}{5in}%
                    {-.2in}{0in}%
                    {\bindingoffset}{16pt}%
                    {9.25in}{7in}%
  %
  \lispnarrowing = 0.3in
  \tolerance = 700
  \hfuzz = 1pt
  \contentsrightmargin = 0pt
  \defbodyindent = .5cm
}}

% Use @smallerbook to reset parameters for 6x9 trim size.
% (Just testing, parameters still in flux.)
\def\smallerbook{{\globaldefs = 1
  \parskip = 1.5pt plus 1pt
  \textleading = 12pt
  %
  \internalpagesizes{7.4in}{4.8in}%
                    {-.2in}{-.4in}%
                    {0pt}{14pt}%
                    {9in}{6in}%
  %
  \lispnarrowing = 0.25in
  \tolerance = 700
  \hfuzz = 1pt
  \contentsrightmargin = 0pt
  \defbodyindent = .4cm
}}

% Use @afourpaper to print on European A4 paper.
\def\afourpaper{{\globaldefs = 1
  \parskip = 3pt plus 2pt minus 1pt
  \textleading = 13.2pt
  %
  % Double-side printing via postscript on Laserjet 4050
  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
  % To change the settings for a different printer or situation, adjust
  % \normaloffset until the front-side and back-side texts align.  Then
  % do the same for \bindingoffset.  You can set these for testing in
  % your texinfo source file like this:
  % @tex
  % \global\normaloffset = -6mm
  % \global\bindingoffset = 10mm
  % @end tex
  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
                    {\voffset}{\hoffset}%
                    {\bindingoffset}{44pt}%
                    {297mm}{210mm}%
  %
  \tolerance = 700
  \hfuzz = 1pt
  \contentsrightmargin = 0pt
  \defbodyindent = 5mm
}}

% Use @afivepaper to print on European A5 paper.
% From romildo@urano.iceb.ufop.br, 2 July 2000.
% He also recommends making @example and @lisp be small.
\def\afivepaper{{\globaldefs = 1
  \parskip = 2pt plus 1pt minus 0.1pt
  \textleading = 12.5pt
  %
  \internalpagesizes{160mm}{120mm}%
                    {\voffset}{\hoffset}%
                    {\bindingoffset}{8pt}%
                    {210mm}{148mm}%
  %
  \lispnarrowing = 0.2in
  \tolerance = 800
  \hfuzz = 1.2pt
  \contentsrightmargin = 0pt
  \defbodyindent = 2mm
  \tableindent = 12mm
}}

% A specific text layout, 24x15cm overall, intended for A4 paper.
\def\afourlatex{{\globaldefs = 1
  \afourpaper
  \internalpagesizes{237mm}{150mm}%
                    {\voffset}{4.6mm}%
                    {\bindingoffset}{7mm}%
                    {297mm}{210mm}%
  %
  % Must explicitly reset to 0 because we call \afourpaper.
  \globaldefs = 0
}}

% Use @afourwide to print on A4 paper in landscape format.
\def\afourwide{{\globaldefs = 1
  \afourpaper
  \internalpagesizes{241mm}{165mm}%
                    {\voffset}{-2.95mm}%
                    {\bindingoffset}{7mm}%
                    {297mm}{210mm}%
  \globaldefs = 0
}}

% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
% Perhaps we should allow setting the margins, \topskip, \parskip,
% and/or leading, also. Or perhaps we should compute them somehow.
%
\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
\def\pagesizesyyy#1,#2,#3\finish{{%
  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
  \globaldefs = 1
  %
  \parskip = 3pt plus 2pt minus 1pt
  \setleading{\textleading}%
  %
  \dimen0 = #1\relax
  \advance\dimen0 by \voffset
  %
  \dimen2 = \hsize
  \advance\dimen2 by \normaloffset
  %
  \internalpagesizes{#1}{\hsize}%
                    {\voffset}{\normaloffset}%
                    {\bindingoffset}{44pt}%
                    {\dimen0}{\dimen2}%
}}

% Set default to letter.
%
\letterpaper


\message{and turning on texinfo input format.}

% DEL is a comment character, in case @c does not suffice.
\catcode`\^^? = 14

% Define macros to output various characters with catcode for normal text.
\catcode`\"=\other
\catcode`\~=\other
\catcode`\^=\other
\catcode`\_=\other
\catcode`\|=\other
\catcode`\<=\other
\catcode`\>=\other
\catcode`\+=\other
\catcode`\$=\other
\def\normaldoublequote{"}
\def\normaltilde{~}
\def\normalcaret{^}
\def\normalunderscore{_}
\def\normalverticalbar{|}
\def\normalless{<}
\def\normalgreater{>}
\def\normalplus{+}
\def\normaldollar{$}%$ font-lock fix

% This macro is used to make a character print one way in \tt
% (where it can probably be output as-is), and another way in other fonts,
% where something hairier probably needs to be done.
%
% #1 is what to print if we are indeed using \tt; #2 is what to print
% otherwise.  Since all the Computer Modern typewriter fonts have zero
% interword stretch (and shrink), and it is reasonable to expect all
% typewriter fonts to have this, we can check that font parameter.
%
\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}

% Same as above, but check for italic font.  Actually this also catches
% non-italic slanted fonts since it is impossible to distinguish them from
% italic fonts.  But since this is only used by $ and it uses \sl anyway
% this is not a problem.
\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}

% Turn off all special characters except @
% (and those which the user can use as if they were ordinary).
% Most of these we simply print from the \tt font, but for some, we can
% use math or other variants that look better in normal text.

\catcode`\"=\active
\def\activedoublequote{{\tt\char34}}
\let"=\activedoublequote
\catcode`\~=\active
\def~{{\tt\char126}}
\chardef\hat=`\^
\catcode`\^=\active
\def^{{\tt \hat}}

\catcode`\_=\active
\def_{\ifusingtt\normalunderscore\_}
\let\realunder=_
% Subroutine for the previous macro.
\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }

\catcode`\|=\active
\def|{{\tt\char124}}
\chardef \less=`\<
\catcode`\<=\active
\def<{{\tt \less}}
\chardef \gtr=`\>
\catcode`\>=\active
\def>{{\tt \gtr}}
\catcode`\+=\active
\def+{{\tt \char 43}}
\catcode`\$=\active
\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix

% If a .fmt file is being used, characters that might appear in a file
% name cannot be active until we have parsed the command line.
% So turn them off again, and have \everyjob (or @setfilename) turn them on.
% \otherifyactive is called near the end of this file.
\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}

% Used sometimes to turn off (effectively) the active characters even after
% parsing them.
\def\turnoffactive{%
  \normalturnoffactive
  \otherbackslash
}

\catcode`\@=0

% \backslashcurfont outputs one backslash character in current font,
% as in \char`\\.
\global\chardef\backslashcurfont=`\\
\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work

% \realbackslash is an actual character `\' with catcode other, and
% \doublebackslash is two of them (for the pdf outlines).
{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}

% In texinfo, backslash is an active character; it prints the backslash
% in fixed width font.
\catcode`\\=\active
@def@normalbackslash{{@tt@backslashcurfont}}
% On startup, @fixbackslash assigns:
%  @let \ = @normalbackslash

% \rawbackslash defines an active \ to do \backslashcurfont.
% \otherbackslash defines an active \ to be a literal `\' character with
% catcode other.
@gdef@rawbackslash{@let\=@backslashcurfont}
@gdef@otherbackslash{@let\=@realbackslash}

% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
% the literal character `\'.
%
@def@normalturnoffactive{%
  @let\=@normalbackslash
  @let"=@normaldoublequote
  @let~=@normaltilde
  @let^=@normalcaret
  @let_=@normalunderscore
  @let|=@normalverticalbar
  @let<=@normalless
  @let>=@normalgreater
  @let+=@normalplus
  @let$=@normaldollar %$ font-lock fix
  @markupsetuplqdefault
  @markupsetuprqdefault
  @unsepspaces
}

% Make _ and + \other characters, temporarily.
% This is canceled by @fixbackslash.
@otherifyactive

% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
% That is what \eatinput is for; after that, the `\' should revert to printing
% a backslash.
%
@gdef@eatinput input texinfo{@fixbackslash}
@global@let\ = @eatinput

% On the other hand, perhaps the file did not have a `\input texinfo'. Then
% the first `\' in the file would cause an error. This macro tries to fix
% that, assuming it is called before the first `\' could plausibly occur.
% Also turn back on active characters that might appear in the input
% file name, in case not using a pre-dumped format.
%
@gdef@fixbackslash{%
  @ifx\@eatinput @let\ = @normalbackslash @fi
  @catcode`+=@active
  @catcode`@_=@active
}

% Say @foo, not \foo, in error messages.
@escapechar = `@@

% These look ok in all fonts, so just make them not special.
@catcode`@& = @other
@catcode`@# = @other
@catcode`@% = @other

@c Finally, make ` and ' active, so that txicodequoteundirected and
@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
@c don't make ` and ' active, @code will not get them as active chars.
@c Do this last of all since we use ` in the previous @catcode assignments.
@catcode`@'=@active
@catcode`@`=@active
@markupsetuplqdefault
@markupsetuprqdefault

@c Local variables:
@c eval: (add-hook 'write-file-hooks 'time-stamp)
@c page-delimiter: "^\\\\message"
@c time-stamp-start: "def\\\\texinfoversion{"
@c time-stamp-format: "%:y-%02m-%02d.%02H"
@c time-stamp-end: "}"
@c End:

@c vim:sw=2:

@ignore
   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
@end ignore

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/tutorial.html.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
<html>
<!--This tutorial documents GNU libmicrohttpd version 0.9.0, last
updated 26 Jul 2010. 

Copyright (c)  2008  Sebastian Gerhardt.

Copyright (c)  2010  Christian Grothoff.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts.  A copy of the license is included in the section entitled "GNU
Free Documentation License".

-->
<!-- Created on September, 8 2010 by texi2html 1.70 -->
<!--
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
            Karl Berry  <karl@freefriends.org>
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
            and many others.
Maintained by: Many creative people <dev@texi2html.cvshome.org>
Send bugs and suggestions to <users@texi2html.cvshome.org>

-->
<head>
<title>A Tutorial for GNU libmicrohttpd: Top</title>

<meta name="description" content="A Tutorial for GNU libmicrohttpd: Top">
<meta name="keywords" content="A Tutorial for GNU libmicrohttpd: Top">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="texi2html 1.70">
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
pre.display {font-family: serif}
pre.format {font-family: serif}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: serif; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: serif; font-size: smaller}
pre.smalllisp {font-size: smaller}
ul.toc {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">

<a name="NOD1"></a>
<a name="SEC_Top"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="settitle">Top</h1>

<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top"><a href="#SEC1">1. Introduction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC3">2. Hello browser example</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC6">3. Exploring requests</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC9">4. Response headers</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC12">5. Supporting basic authentication</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC17">6. Processing POST data</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC21">7. Improved processing of POST data</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC26">8. Adding a layer of security</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC30">A. Bibliography</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC32">B. GNU Free Documentation License</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC34">C. Example programs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr size="1">
<a name="NOD2"></a>
<a name="SEC1"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC2" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[ &lt;&lt; ]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC3" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 1. Introduction </h1>

<p>This tutorial is for developers who want to learn how they can add HTTP serving 
capabilities to their applications with the <em>GNU libmicrohttpd</em> library,
abbreviated <em>MHD</em>.  The reader will learn how to
implement basic HTTP functions from simple executable
sample programs that implement various features.

</p><p>The text is supposed to be a supplement to the API reference manual of 
<em>GNU libmicrohttpd</em> and for that reason does not explain many of the parameters.
Therefore, the reader should always consult the manual to find the exact meaning
of the functions used in the tutorial.  Furthermore, the reader is 
encouraged to study the relevant <em>RFCs</em>, which document the HTTP standard.

</p><p><em>GNU libmicrohttpd</em> is assumed to be already installed.  This tutorial
is written for version 0.9.0.  At the time being, 
this tutorial has only been tested on <em>GNU/Linux</em> machines even though
efforts were made not to rely on anything that would prevent the samples from being
built on similar systems.

</p><hr size="6">
<a name="SEC2"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC1" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC3" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC1" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC3" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> 1.1 History </h2>

<p>This tutorial was originally written by Sebastian Gerhardt for MHD
0.4.0.  It was slighly polished and updated to MHD 0.9.0 by Christian
Grothoff.
</p><hr size="6">
<a name="NOD3"></a>
<a name="SEC3"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC2" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC6" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC1" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC6" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 2. Hello browser example </h1>

<p>The most basic task for a HTTP server is to deliver a static text message to any client connecting to it.
Given that this is also easy to implement, it is an excellent problem to start with.

</p><p>For now, the particular URI the client asks for shall have no effect on the message that will 
be returned. In addition, the server shall end the connection after the message has been sent so that
the client will know there is nothing more to expect.

</p><p>The C program <code>hellobrowser.c</code>, which is to be found in the examples section, does just that.
If you are very eager, you can compile and start it right away but it is advisable to type the
lines in by yourself as they will be discussed and explained in detail. 

</p><p>After the necessary includes and the definition of the port which our server should listen on
</p><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;

#define PORT 8888
</pre>
<p>the desired behaviour of our server when HTTP request arrive has to be implemented. We already have
agreed that it should not care about the particular details of the request, such as who is requesting
what. The server will respond merely with the same small HTML page to every request. 

</p><p>The function we are going to write now will be called by <em>GNU libmicrohttpd</em> every time an
appropriate request comes in. While the name of this callback function is arbitrary, its parameter
list has to follow a certain layout. So please, ignore the lot of parameters for now, they will be
explained at the point they are needed. We have to use only one of them,
<code>struct MHD_Connection *connection</code>, for the minimalistic functionality we want to archive at the moment.

</p><p>This parameter is set by the <em>libmicrohttpd</em> daemon and holds the necessary information to
relate the call with a certain connection. Keep in mind that a server might have to satisfy hundreds
of concurrent connections and we have to make sure that the correct data is sent to the destined
client. Therefore, this variable is a means to refer to a particular connection if we ask the
daemon to sent the reply.

</p><p>Talking about the reply, it is defined as a string right after the function header
</p><pre class="verbatim">int answer_to_connection (void *cls, struct MHD_Connection *connection, 
                          const char *url, 
                          const char *method, const char *version, 
                          const char *upload_data, 
                          size_t *upload_data_size, void **con_cls)
{
  const char *page  = &quot;&lt;html&gt;&lt;body&gt;Hello, browser!&lt;/body&gt;&lt;/html&gt;&quot;;
</pre>
<p>HTTP is a rather strict protocol and the client would certainly consider it &quot;inappropriate&quot; if we
just sent the answer string &quot;as is&quot;. Instead, it has to be wrapped with additional information stored in so-called headers and footers.  Most of the work in this area is done by the library for us--we
just have to ask. Our reply string packed in the necessary layers will be called a &quot;response&quot;.
To obtain such a response we hand our data (the reply-string) and its size over to the 
<code>MHD_create_response_from_data</code> function. The last two parameters basically tell <em>MHD</em>
that we do not want it to dispose the message data for us when it has been sent and there also needs
no internal copy to be done because the <em>constant</em> string won't change anyway.

</p><pre class="verbatim">  struct MHD_Response *response;
  int ret;

  response = MHD_create_response_from_data (strlen (page),
                                            (void*) page, MHD_NO, MHD_NO);
</pre>
<p>Now that the the response has been laced up, it is ready for delivery and can be queued for sending. 
This is done by passing it to another <em>GNU libmicrohttpd</em> function. As all our work was done in
the scope of one function, the recipient is without doubt the one associated with the
local variable <code>connection</code> and consequently this variable is given to the queue function. 
Every HTTP response is accompanied by a status code, here &quot;OK&quot;, so that the client knows 
this response is the intended result of his request and not due to some error or malfunction.

</p><p>Finally, the packet is destroyed and the return value from the queue returned,
already being set at this point to either MHD_YES or MHD_NO in case of success or failure.

</p><pre class="verbatim">  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}
</pre>
<p>With the primary task of our server implemented, we can start the actual server daemon which will listen 
on <code>PORT</code> for connections. This is done in the main function.
</p><pre class="verbatim">int main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL, 
                             &amp;answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon) return 1;
</pre>
<p>The first parameter is one of three possible modes of operation. Here we want the daemon to run in
a separate thread and to manage all incoming connections in the same thread. This means that while
producing the response for one connection, the other connections will be put on hold. In this
example, where the reply is already known and therefore the request is served quickly, this poses no problem.

</p><p>We will allow all clients to connect regardless of their name or location, therefore we do not check
them on connection and set the forth and fifth parameter to NULL.

</p><p>Parameter six is the address of the function we want to be called whenever a new connection has been
established. Our <code>answer_to_connection</code> knows best what the client wants and needs no additional
information (which could be passed via the next parameter) so the next parameter is NULL. Likewise,
we do not need to pass extra options to the daemon so we just write the MHD_OPTION_END as the last parameter.

</p><p>As the server daemon runs in the background in its own thread, the execution flow in our main
function will contine right after the call. Because of this, we must delay the execution flow in the
main thread or else the program will terminate prematurely. We let it pause in a processing-time
friendly manner by waiting for the enter key to be pressed. In the end, we stop the daemon so it can
do its cleanup tasks.
</p><pre class="verbatim">  getchar (); 

  MHD_stop_daemon (daemon);
  return 0;
}

</pre>
<p>The first example is now complete.

</p><p>Compile it with 
</p><pre class="verbatim">cc hellobrowser.c -o hellobrowser -I$PATH_TO_LIBMHD_INCLUDES 
  -L$PATH_TO_LIBMHD_INCLUDES -lmicrohttpd
</pre><p>with the two paths set accordingly and run it.

</p><p>Now open your favorite Internet browser and go to the address <code>http://localhost:8888/</code>, provided that 8888
is the port you chose. If everything works as expected, the browser will present the message of the
static HTML page it got from our minimal server.

</p><a name="SEC4"></a>
<h2 class="heading"> Remarks </h2>
<p>To keep this first example as small as possible, some drastic shortcuts were taken and are to be
discussed now. 

</p><p>Firstly, there is no distinction made between the kinds of requests a client could send. We implied
that the client sends a GET request, that means, that he actually asked for some data. Even when
it is not intended to accept POST requests, a good server should at least recognize that this
request does not constitute a legal request and answer with an error code. This can be easily
implemented by checking if the parameter <code>method</code> equals the string &quot;GET&quot; and returning a
<code>MHD_NO</code> if not so.

</p><p>Secondly, the above practice of queuing a response upon the first call of the callback function
brings with it some limitations. This is because the content of the message body will not be
received if a response is queued in the first iteration. Furthermore, the connection will be closed
right after the response has been transferred then.

</p><p>Both of these issues you will find addressed in the official <code>minimal_example.c</code> residing in
the <code>src/examples</code> directory of the <em>MHD</em> package. The source code of this
program should look very familiar to you by now and easy to understand.

</p><p>For our example, the <code>must_copy</code> and <code>must_free</code> parameter at the response construction
function could be set to <code>MHD_NO</code>. In the usual case, responses cannot be sent immediately
after being queued. For example, there might be other data on the system that needs to be sent with
a higher priority. Nevertheless, the queue function will return successfully--raising the problem
that the data we have pointed to may be invalid by the time it is about being sent. This is not an
issue here because we can expect the <code>page</code> string, which is a constant <em>string literal</em>
here, to be static. That means it will be present and unchanged for as long as the program runs. 
For dynamic data, one could choose to either have <em>MHD</em> free the memory <code>page</code> points 
to itself when it is not longer needed or, alternatively, have the library to make and manage 
its own copy of it.

</p><a name="SEC5"></a>
<h2 class="heading"> Exercises </h2>
<ul>
<li>
<p>While the server is running, use a program like <code>telnet</code> or <code>netcat</code> to connect to it. Try to form a
valid HTTP 1.1 request yourself like
</p><pre class="verbatim">GET /dontcare HTTP/1.1
Host: itsme
&lt;enter&gt;
</pre>
<p>and see what the server returns to you.
     
</p></li><li>
<p>Also, try other requests, like POST, and see how our server does not mind and why.
How far in malforming a request can you go before the builtin functionality of <em>MHD</em> intervenes
and an altered response is sent? Make sure you read about the status codes in the <em>RFC</em>.

</p></li><li>
<p>Add the option <code>MHD_USE_PEDANTIC_CHECKS</code> to the start function of the daemon in <code>main</code>.
Mind the special format of the parameter list here which is described in the manual. How indulgent
is the server now to your input?

</p></li><li>
<p>Let the main function take a string as the first command line argument and pass <code>argv[1]</code> to
the <code>MHD_start_daemon</code> function as the sixth parameter. The address of this string will be
passed to the callback function via the <code>cls</code> variable. Decorate the text given at the command
line when the server is started with proper HTML tags and send it as the response instead of the
former static string.

</p></li><li>
<p><em>Demanding:</em> Write a separate function returning a string containing some useful information, 
for example, the time. Pass the function's address as the sixth parameter and evaluate this function
on every request anew in <code>answer_to_connection</code>. Remember to free the memory of the string
every time after satisfying the request.

</p></li></ul>

<hr size="6">
<a name="NOD4"></a>
<a name="SEC6"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC3" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC9" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC3" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC9" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 3. Exploring requests </h1>

<p>This chapter will deal with the information which the client sends to the
server at every request. We are going to examine the most useful fields of such an request
and print them out in a readable manner. This could be useful for logging facilities.

</p><p>The starting point is the <em>hellobrowser</em> program with the former response removed.

</p><p>This time, we just want to collect information in the callback function, thus we will
just return MHD_NO after we have probed the request. This way, the connection is closed
without much ado by the server.

</p><pre class="verbatim">static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
                      const char *url, 
		      const char *method, const char *version, 
		      const char *upload_data, 
                      size_t *upload_data_size, void **con_cls)
{
  ...  
  return MHD_NO;
}
</pre>
<p>The ellipsis marks the position where the following instructions shall be inserted.

</p>
<p>We begin with the most obvious information available to the server, the request line. You should
already have noted that a request consists of a command (or &quot;HTTP method&quot;) and a URI (e.g. a filename).
It also contains a string for the version of the protocol which can be found in <code>version</code>.
To call it a &quot;new request&quot; is justified because we return only <code>MHD_NO</code>, thus ensuring the 
function will not be called again for this connection. 
</p><pre class="verbatim">printf (&quot;New %s request for %s using version %s\n&quot;, method, url, version);
</pre>

<p>The rest of the information is a bit more hidden. Nevertheless, there is lot of it sent from common
Internet browsers. It is stored in &quot;key-value&quot; pairs and we want to list what we find in the header. 
As there is no mandatory set of keys a client has to send, each key-value pair is printed out one by
one until there are no more left. We do this by writing a separate function which will be called for
each pair just like the above function is called for each HTTP request. 
It can then print out the content of this pair.
</p><pre class="verbatim">int print_out_key (void *cls, enum MHD_ValueKind kind, 
                   const char *key, const char *value)
{
  printf (&quot;%s: %s\n&quot;, key, value);
  return MHD_YES;
}
</pre>

<p>To start the iteration process that calls our new function for every key, the line
</p><pre class="verbatim">MHD_get_connection_values (connection, MHD_HEADER_KIND, &amp;print_out_key, NULL);
</pre>
<p>needs to be inserted in the connection callback function too. The second parameter tells the function 
that we are only interested in keys from the general HTTP header of the request. Our iterating
function <code>print_out_key</code> does not rely on any additional information to fulfill its duties
so the last parameter can be NULL.

</p><p>All in all, this constitutes the complete <code>logging.c</code> program for this chapter which can be 
found in the <code>examples</code> section.

</p><p>Connecting with any modern Internet browser should yield a handful of keys. You should try to 
interpret them with the aid of <em>RFC 2616</em>.
Especially worth mentioning is the &quot;Host&quot; key which is often used to serve several different websites
hosted under one single IP address but reachable by different domain names (this is called virtual hosting).

</p><a name="SEC7"></a>
<h2 class="heading"> Conclusion </h2>
<p>The introduced capabilities to itemize the content of a simple GET request--especially the
URI--should already allow the server to satisfy clients' requests for small specific resources
(e.g. files) or even induce alteration of server state. However, the latter is not
recommended as the GET method (including its header data) is by convention considered a &quot;safe&quot;
operation, which should not change the server's state in a significant way.  By convention,
GET operations can thus be performed by crawlers and other automatic software.  Naturally
actions like searching for a passed string are fine.

</p><p>Of course, no transmission can occur while the return value is still set to <code>MHD_NO</code> in the
callback function.

</p><a name="SEC8"></a>
<h2 class="heading"> Exercises </h2>
<ul>
<li>
<p>By parsing the <code>url</code> string and delivering responses accordingly, implement a small server for
&quot;virtual&quot; files. When asked for <code>/index.htm{l}</code>, let the response consist of a HTML page
containing a link to <code>/another.html</code> page which is also to be created &quot;on the fly&quot; in case of
being requested. If neither of these two pages are requested, <code>MHD_HTTP_NOT_FOUND</code> shall be
returned accompanied by an informative message.

</p></li><li>
<p>A very interesting information has still been ignored by our logger--the client's IP address. 
Implement a callback function 
</p><pre class="verbatim">static int on_client_connect (void *cls,
                              const struct sockaddr *addr,
			      socklen_t addrlen)
</pre>
<p>that prints out the IP address in an appropriate format. You might want to use the POSIX function
<code>inet_ntoa</code> but bear in mind that <code>addr</code> is actually just a structure containing other
substructures and is <em>not</em> the variable this function expects. 
Make sure to return <code>MHD_YES</code> so that the library knows the client is allowed to connect
(and to then process the request). If one wanted to limit access basing on IP addresses, this would be the place
to do it. The address of your <code>on_client_connect</code> function must be passed as the third parameter to the
<code>MHD_start_daemon</code> call.

</p></li></ul>

<hr size="6">
<a name="NOD5"></a>
<a name="SEC9"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC6" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC12" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC6" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC12" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 4. Response headers </h1>

<p>Now that we are able to inspect the incoming request in great detail,
this chapter discusses the means to enrich the outgoing responses likewise.

</p><p>As you have learned in the <em>Hello, Browser</em> chapter, some obligatory 
header fields are added and set automatically for simple responses by the library
itself but if more advanced features are desired, additional fields have to be created.
One of the possible fields is the content type field and an example will be developed around it.
This will lead to an application capable of correctly serving different types of files.

</p>
<p>When we responded with HTML page packed in the static string previously, the client had no choice
but guessing about how to handle the response, because the server had not told him. 
What if we had sent a picture or a sound file?  Would the message have been understood
or merely been displayed as an endless stream of random characters in the browser?
This is what the mime content types are for. The header of the response is extended
by certain information about how the data is to be interpreted. 

</p><p>To introduce the concept, a picture of the format <em>PNG</em> will be sent to the client 
and labeled accordingly with <code>image/png</code>.
Once again, we can base the new example on the <code>hellobrowser</code> program.

</p><pre class="verbatim">#define FILENAME &quot;picture.png&quot;
#define MIMETYPE &quot;image/png&quot;

static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
		      const char *url, 
                      const char *method, const char *version, 
		      const char *upload_data, 
              	      size_t *upload_data_size, void **con_cls)
{
  unsigned char *buffer = NULL;
  struct MHD_Response *response;
</pre>
 
<p>We want the program to open the file for reading and determine its size:
</p><pre class="verbatim">  int fd;
  int ret;
  struct stat sbuf;

  if (0 != strcmp (method, &quot;GET&quot;))
    return MHD_NO;
  if ( (-1 == (fd = open (FILENAME, O_RDONLY))) ||
       (0 != fstat (fd, &amp;sbuf)) )
    {
     /* error accessing file */
      /* ... (see below) */
    }
 /* ... (see below) */
</pre>

<p>When dealing with files, there is a lot that could go wrong on the
server side and if so, the client should be informed with <code>MHD_HTTP_INTERNAL_SERVER_ERROR</code>.

</p><pre class="verbatim">      /* error accessing file */
     if (fd != -1) close (fd);
      const char *errorstr =
        &quot;&lt;html&gt;&lt;body&gt;An internal server error has occured!\
                              &lt;/body&gt;&lt;/html&gt;&quot;;
      response =
	MHD_create_response_from_data (strlen (errorstr), 
				       (void *) errorstr, 
				       MHD_NO, MHD_NO);
      if (response)
        {
          ret =
            MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR,
                                response);
          MHD_destroy_response (response);

          return MHD_YES;
        }
      else
        return MHD_NO;
  if (!ret) 
    {
      const char *errorstr = &quot;&lt;html&gt;&lt;body&gt;An internal server error has occured!\
                              &lt;/body&gt;&lt;/html&gt;&quot;;

      if (buffer) free(buffer);
    
      response = MHD_create_response_from_data(strlen(errorstr), (void*)errorstr,
                                               MHD_NO, MHD_NO);

      if (response)
        {     
          ret = MHD_queue_response (connection, 
	      			    MHD_HTTP_INTERNAL_SERVER_ERROR, 
				    response);
          MHD_destroy_response (response);

          return MHD_YES;    
        } 
      else return MHD_NO;
    }
</pre>

<p>Note that we nevertheless have to create a response object even for sending a simple error code.
Otherwise, the connection would just be closed without comment, leaving the client curious about
what has happened.

</p><p>But in the case of success a response will be constructed directly from the file descriptor:

</p><pre class="verbatim">     /* error accessing file */
     /* ... (see above) */
    }

  response =
    MHD_create_response_from_fd (fd, sbuf.st_size);
  MHD_add_response_header (response, &quot;Content-Type&quot;, MIMETYPE);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
</pre>

<p>Note that the response object will take care of closing the file desciptor for us.

</p><p>Up to this point, there was little new. The actual novelty is that we enhance the header with the
meta data about the content. Aware of the field's name we want to add, it is as easy as that:
</p><pre class="verbatim">MHD_add_response_header(response, &quot;Content-Type&quot;, MIMETYPE);
</pre>
<p>We do not have to append a colon expected by the protocol hehind the first 
field--<em>GNU libhttpdmicro</em> will take care of this. 

</p><p>The function finishes with the well-known lines
</p><pre class="verbatim">  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}
</pre>

<p>The complete program <code>responseheaders.c</code> is in the <code>examples</code> section as usual.
Find a <em>PNG</em> file you like and save it to the directory the example is run from under the name
<code>picture.png</code>. You should find the image displayed on your browser if everything worked well.

</p><a name="SEC10"></a>
<h2 class="heading"> Remarks </h2>
<p>The include file of the <em>MHD</em> library comes with the header types mentioned in <em>RFC 2616</em>
already defined as macros. Thus, we could have written <code>MHD_HTTP_HEADER_CONTENT_TYPE</code> instead
of <code>&quot;Content-Type&quot;</code> as well. However, one is not limited to these standard headers and could
add custom response headers without violating the protocol. Whether, and how, the client would react
to these custom header is up to the receiver. Likewise, the client is allowed to send custom request
headers to the server as well, opening up yet more possibilities how client and server could 
communicate with each other.

</p><p>The method of creating the response from a file on disk only works for static content.
Serving dynamically created responses will be a topic of a future chapter.

</p><a name="SEC11"></a>
<h2 class="heading"> Exercises </h2>
<ul>
<li>
<p>Remember that the original program was written under a few assumptions--a static response
using a local file being one of them. In order to simulate a very large or hard to reach file that cannot be provided
instantly, postpone the queuing in the callback with the <code>sleep</code> function for 30 seconds 
<em>if</em> the file <code>/big.png</code> is requested (but deliver the same as above). A request for
<code>/picture.png</code> should provide just the same but without any artificial delays.

</p><p>Now start two instances of your browser (or even use two machines) and see how the second client
is put on hold while the first waits for his request on the slow file to be fulfilled.

</p><p>Finally, change the sourcecode to use <code>MHD_USE_THREAD_PER_CONNECTION</code> when the daemon is 
started and try again.

</p></li><li>
<p>Did you succeed in implementing the clock exercise yet? This time, let the server save the 
program's start time <code>t</code> and implement a response simulating a countdown that reaches 0 at
<code>t+60</code>. Returning a message saying on which point the countdown is, the response should
ultimately be to reply &quot;Done&quot; if the program has been running long enough,

</p><p>An unofficial, but widely understood, response header line is <code>Refresh: DELAY; url=URL</code> with
the uppercase words substituted to tell the client it should request the given resource after 
the given delay again. Improve your program in that the browser (any modern browser should work)
automatically reconnects and asks for the status again every 5 seconds or so. The URL would have
to be composed so that it begins with &quot;http://&quot;, followed by the <em>URI</em> the server is reachable
from the client's point of view.

</p><p>Maybe you want also to visualize the countdown as a status bar by creating a 
<code>&lt;table&gt;</code> consisting of one row and <code>n</code> columns whose fields contain small images of either
a red or a green light.

</p></li></ul>

<hr size="6">
<a name="NOD6"></a>
<a name="SEC12"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC9" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC17" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC9" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC17" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 5. Supporting basic authentication </h1>

<p>With the small exception of IP address based access control, 
requests from all connecting clients where served equally until now.
This chapter discusses a first method of client's authentication and
its limits. 

</p><p>A very simple approach feasible with the means already discussed would
be to expect the password in the <em>URI</em> string before granting access to
the secured areas. The password could be separated from the actual resource identifier
by a certain character, thus the request line might look like
</p><pre class="verbatim">GET /picture.png?mypassword
</pre>

<p>In the rare situation where the client is customized enough and the connection occurs
through secured lines (e.g., a embedded device directly attached to another via wire)
and where the ability to embedd a password in the URI or to pass on a URI with a
password are desired, this can be a reasonable choice. 

</p><p>But when it is assumed that the user connecting does so with an ordinary Internet browser,
this implementation brings some problems about. For example, the URI including the password
stays in the address field or at least in the history of the browser for anybody near enough to see. 
It will also be inconvenient to add the password manually to any new URI when the browser does
not know how to compose this automatically.

</p><p>At least the convenience issue can be addressed by employing the simplest built-in password
facilities of HTTP compliant browsers, hence we want to start there. It will however turn out
to have still severe weaknesses in terms of security which need consideration.

</p><p>Before we will start implementing <em>Basic Authentication</em> as described in <em>RFC 2617</em>,
we should finally abandon the bad practice of responding every request the first time our callback
is called for a given connection. This is becoming more important now because the client and 
the server will have to talk in a more bi-directional way than before to 

</p><p>But how can we tell whether the callback has been called before for the particular connection?
Initially, the pointer this parameter references is set by <em>MHD</em> in the callback. But it will 
also be &quot;remembered&quot; on the next call (for the same connection).
Thus, we will generate no response until the parameter is non-null--implying the callback was
called before at least once. We do not need to share information between different calls of the callback,
so we can set the parameter to any adress that is assured to be not null. The pointer to the 
<code>connection</code> structure will be pointing to a legal address, so we take this.

</p><p>The first time <code>answer_to_connection</code> is called, we will not even look at the headers.

</p><pre class="verbatim">static int 
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method, const char *version, 
                      const char *upload_data, size_t *upload_data_size,
                      void **con_cls)
{
  if (0 != strcmp(method, &quot;GET&quot;)) return MHD_NO;
  if (NULL == *con_cls) {*con_cls = connection; return MHD_YES;}

  ... 
  /* else respond accordingly */
  ...
}
</pre>

<p>Note how we lop off the connection on the first condition (no &quot;GET&quot; request), but return asking for more on 
the other one with <code>MHD_YES</code>.
With this minor change, we can proceed to implement the actual authentication process.

</p><a name="SEC13"></a>
<h2 class="heading"> Request for authentication </h2>

<p>Let us assume we had only files not intended to be handed out without the correct username/password,
so every &quot;GET&quot; request will be challenged.
<em>RFC 2617</em> describes how the server shall ask for authentication by adding a
<em>WWW-Authenticate</em> response header with the name of the <em>realm</em> protected.

</p><p>We let an extra function function do this.
</p><pre class="verbatim">static int 
ask_for_authentication (struct MHD_Connection *connection, const char *realm)
{
  int ret;
  struct MHD_Response *response;
  char *headervalue;
  const char *strbase = &quot;Basic realm=&quot;;
  
  response = MHD_create_response_from_data (0, NULL, MHD_NO, MHD_NO);
  if (!response) return MHD_NO;
  
  headervalue = malloc (strlen (strbase) + strlen (realm) + 1);
  if (!headervalue) return MHD_NO;  

  strcpy (headervalue, strbase);
  strcat (headervalue, realm);
  
  ret = MHD_add_response_header (response, &quot;WWW-Authenticate&quot;, headervalue);
  free (headervalue);  
  if (!ret) {MHD_destroy_response (response); return MHD_NO;}

  ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response);
  MHD_destroy_response (response);
  return ret;
}
</pre>

<p><code>#define</code> the realm name according to your own taste, e.g. &quot;Maintenance&quot; or &quot;Area51&quot; but
it will need to have extra quotes.

</p><p>Since the client may send the authentication right away, it would be wrong to ask for
it without checking the request's header-where the authentication is expected to be found.

</p><a name="SEC14"></a>
<h2 class="heading"> Authentication in detail </h2>
<p>Checking <em>RFC 2617</em> again, we find that the client will pack the username and password, by
whatever means he might have obtained them, in a line separated by a colon--and then encodes
them to <em>Base64</em>. The actual implementation of this encoding are not within the scope of
this tutorial although a working function is included in the complete source file of the example.

</p><p>An unencoded word describing the authentication method (here &quot;Basic&quot;) will precede the code
and the resulting line is the value of a request header of the type &quot;Authorization&quot;.  

</p><p>This header line thus is of interest to the function checking a connection for a given username/password:
</p><pre class="verbatim">static int 
is_authenticated (struct MHD_Connection *connection,
                  const char *username, const char *password)
{
  const char *headervalue;
  ...

  headervalue = MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                             &quot;Authorization&quot;);
  if (NULL == headervalue) return 0;
</pre>

<p>where, firstly, the authentication method will be checked.
</p><pre class="verbatim">const char *strbase = &quot;Basic &quot;;
...
if (0 != strncmp (headervalue, strbase, strlen (strbase))) return 0;
</pre>

<p>Of course, we could decode the passed credentials in the next step and compare them directly to
the given strings. But as this would involve string parsing, which is more complicated then string
composing, it is done the other way around--the clear text credentials will be encoded to <em>Base64</em>
and then compared against the headerline. The authentication method string will be left out here as
it has been checked already at this point.
</p><pre class="verbatim">  char *expected_b64, *expected;
  int authenticated;

  ...
  strcpy (expected, username);
  strcat (expected, &quot;:&quot;);
  strcat (expected, password);  

  expected_b64 = string_to_base64 (expected);
  if (NULL == expected_b64) return 0;
 
  strcpy (expected, strbase);
  authenticated = (strcmp (headervalue + strlen (strbase), expected_b64) == 0);

  free (expected_b64);

  return authenticated;
}
</pre>

<p>These two functions--together with a response function in case of positive authentication doing little 
new--allow the rest of the callback function to be rather short. 
</p><pre class="verbatim">  if (!is_authenticated (connection, USER, PASSWORD)) 
    return ask_for_authentication (connection, REALM); 
  
  return secret_page (connection);
}
</pre>

<p>See the <code>examples</code> directory for the complete example file.

</p><a name="SEC15"></a>
<h2 class="heading"> Remarks </h2>
<p>For a proper server, the conditional statements leading to a return of <code>MHD_NO</code> should yield a 
response with a more precise status code instead of silently closing the connection. For example,
failures of memory allocation are best reported as <em>internal server error</em> and unexpected 
authentication methods as <em>400 bad request</em>.

</p><a name="SEC16"></a>
<h2 class="heading"> Exercises </h2>
<ul>
<li>
<p>Make the server respond to wrong credentials (but otherwise well-formed requests) with the recommended
<em>401 unauthorized</em> status code. If the client still does not authenticate correctly within the
same connection, close it and store the client's IP address for a certain time. (It is OK to check for
expiration not until the main thread wakes up again on the next connection.) If the client fails
authenticating three times during this period, add it to another list for which the 
<code>AcceptPolicyCallback</code> function denies connection (temporally).

</p></li><li>
<p>With the network utility <code>netcat</code> connect and log the response of a &quot;GET&quot; request as you
did in the exercise of the first example, this time to a file. Now stop the server and let <em>netcat</em>
listen on the same port the server used to listen on and have it fake being the proper server by giving
the file's content as the response (e.g. <code>cat log | nc -l -p 8888</code>). Pretending to think your were
connecting to the actual server, browse to the eavesdropper and give the correct credentials.

</p><p>Copy and paste the encoded string you see in <code>netcat</code>'s output to some of the Base64 decode tools available online
and see how both the user's name and password could be completely restored.

</p></li></ul>



<hr size="6">
<a name="NOD7"></a>
<a name="SEC17"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC12" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC21" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC12" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC21" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 6. Processing POST data </h1>

<p>The previous chapters already have demonstrated a variety of possibilities to send information 
to the HTTP server, but it is not recommended that the <em>GET</em> method is used to alter the way
the server operates. To induce changes on the server, the <em>POST</em> method is preferred over
and is much more powerful than <em>GET</em> and will be introduced in this chapter.

</p><p>We are going to write an application that asks for the visitor's name and, after the user has posted it,
composes an individual response text. Even though it was not mandatory to use the <em>POST</em> method here,
as there is no permanent change caused by the POST, it is an illustrative example on how to share data
between different functions for the same connection. Furthermore, the reader should be able to extend
it easily.

</p><a name="SEC18"></a>
<h2 class="heading"> GET request </h2>
<p>When the first <em>GET</em> request arrives, the server shall respond with a HTML page containing an
edit field for the name.

</p><pre class="verbatim">const char* askpage = &quot;&lt;html&gt;&lt;body&gt;\
                       What's your name, Sir?&lt;br&gt;\
                       &lt;form action=\&quot;/namepost\&quot; method=\&quot;post\&quot;&gt;\
                       &lt;input name=\&quot;name\&quot; type=\&quot;text\&quot;\
                       &lt;input type=\&quot;submit\&quot; value=\&quot; Send \&quot;&gt;&lt;/form&gt;\
                       &lt;/body&gt;&lt;/html&gt;&quot;;
</pre>

<p>The <code>action</code> entry is the <em>URI</em> to be called by the browser when posting, and the
<code>name</code> will be used later to be sure it is the editbox's content that has been posted.

</p><p>We also prepare the answer page, where the name is to be filled in later, and an error page 
as the response for anything but proper <em>GET</em> and <em>POST</em> requests:

</p><pre class="verbatim">const char* greatingpage=&quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Welcome, %s!&lt;/center&gt;&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

const char* errorpage=&quot;&lt;html&gt;&lt;body&gt;This doesn't seem to be right.&lt;/body&gt;&lt;/html&gt;&quot;;
</pre>

<p>Whenever we need to send a page, we use an extra function
<code>int send_page(struct MHD_Connection *connection, const char* page)</code>
for this, which does not contain anything new and whose implementation is therefore 
not discussed further in the tutorial.

</p>
<a name="SEC19"></a>
<h2 class="heading"> POST request </h2>
<p>Posted data can be of arbitrary and considerable size; for example, if a user uploads a big
image to the server. Similar to the case of the header fields, there may also be different streams
of posted data, such as one containing the text of an editbox and another the state of a button.
Likewise, we will have to register an iterator function that is going to be called maybe several times 
not only if there are different POSTs but also if one POST has only been received partly yet and
needs processing before another chunk can be received.

</p><p>Such an iterator function is called by a <em>postprocessor</em>, which must be created upon arriving
of the post request.  We want the iterator function to read the first post data which is tagged
<code>name</code> and to create an individual greeting string based on the template and the name. 
But in order to pass this string to other functions and still be able to differentiate different
connections, we must first define a structure to share the information, holding the most import entries.

</p><pre class="verbatim">struct connection_info_struct
{
  int connectiontype;
  char *answerstring;
  struct MHD_PostProcessor *postprocessor; 
};
</pre>

<p>With these information available to the iterator function, it is able to fulfill its task. 
Once it has composed the greeting string, it returns <code>MHD_NO</code> to inform the post processor
that it does not need to be called again. Note that this function does not handle processing
of data for the same <code>key</code>. If we were to expect that the name will be posted in several
chunks, we had to expand the namestring dynamically as additional parts of it with the same <code>key</code>
came in. But in this example, the name is assumed to fit entirely inside one single packet.

</p><pre class="verbatim">static int 
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key,
              const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, 
	      uint64_t off, size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;

  if (0 == strcmp (key, &quot;name&quot;))
    {
      if ((size &gt; 0) &amp;&amp; (size &lt;= MAXNAMESIZE))
        {
          char *answerstring;
          answerstring = malloc (MAXANSWERSIZE);
          if (!answerstring) return MHD_NO;
      
          snprintf (answerstring, MAXANSWERSIZE, greatingpage, data);
          con_info-&gt;answerstring = answerstring;      
        } 
      else con_info-&gt;answerstring = NULL;

      return MHD_NO;
    }

  return MHD_YES;
}
</pre>

<p>Once a connection has been established, it can be terminated for many reasons. As these
reasons include unexpected events, we have to register another function that cleans up any resources
that might have been allocated for that connection by us, namely the post processor and the greetings
string. This cleanup function must take into account that it will also be called for finished 
requests other than <em>POST</em> requests.

</p><pre class="verbatim">void request_completed (void *cls, struct MHD_Connection *connection, 
     		        void **con_cls,
                        enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info) return;
  if (con_info-&gt;connectiontype == POST)
    {
      MHD_destroy_post_processor (con_info-&gt;postprocessor);        
      if (con_info-&gt;answerstring) free (con_info-&gt;answerstring);
    }
  
  free (con_info);
  *con_cls = NULL;   
}
</pre>

<p><em>GNU libmicrohttpd</em> is informed that it shall call the above function when the daemon is started
in the main function.

</p><pre class="verbatim">...
daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                           &amp;answer_to_connection, NULL, 
			   MHD_OPTION_NOTIFY_COMPLETED, &amp;request_completed, NULL,
			   MHD_OPTION_END);
...
</pre>

<a name="SEC20"></a>
<h2 class="heading"> Request handling </h2>
<p>With all other functions prepared, we can now discuss the actual request handling.

</p><p>On the first iteration for a new request, we start by allocating a new instance of a 
<code>struct connection_info_struct</code> structure, which will store all necessary information for later
iterations and other functions.

</p><pre class="verbatim">static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
		      const char *url, 
                      const char *method, const char *version, 
		      const char *upload_data, 
                      size_t *upload_data_size, void **con_cls)
{
  if(NULL == *con_cls) 
    {
      struct connection_info_struct *con_info;

      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info) return MHD_NO;
      con_info-&gt;answerstring = NULL;
</pre>

<p>If the new request is a <em>POST</em>, the postprocessor must be created now. In addition, the type
of the request is stored for convenience.
</p><pre class="verbatim">      if (0 == strcmp (method, &quot;POST&quot;)) 
        {      
          con_info-&gt;postprocessor 
	    = MHD_create_post_processor (connection, POSTBUFFERSIZE, 
                                         iterate_post, (void*) con_info);   

          if (NULL == con_info-&gt;postprocessor) 
            {
              free (con_info); 
              return MHD_NO;
            }
          con_info-&gt;connectiontype = POST;
        } 
      else con_info-&gt;connectiontype = GET;
</pre>

<p>The address of our structure will both serve as the indicator for successive iterations and to remember
the particular details about the connection.
</p><pre class="verbatim">      *con_cls = (void*) con_info; 
      return MHD_YES;
    }
</pre>

<p>The rest of the function will not be executed on the first iteration. A <em>GET</em> request is easily
satisfied by sending the question form.
</p><pre class="verbatim">  if (0 == strcmp (method, &quot;GET&quot;)) 
    {
      return send_page (connection, askpage);     
    } 
</pre>

<p>In case of <em>POST</em>, we invoke the post processor for as long as data keeps incoming, setting
<code>*upload_data_size</code> to zero in order to indicate that we have processed--or at least have
considered--all of it.
</p><pre class="verbatim">  if (0 == strcmp (method, &quot;POST&quot;)) 
    {
      struct connection_info_struct *con_info = *con_cls;

      if (*upload_data_size != 0) 
        {
          MHD_post_process (con_info-&gt;postprocessor, upload_data,	
	                    *upload_data_size);
          *upload_data_size = 0;
          
          return MHD_YES;
        } 
      else if (NULL != con_info-&gt;answerstring) 
        return send_page (connection, con_info-&gt;answerstring);
    } 
</pre>

<p>Finally, if they are neither <em>GET</em> nor <em>POST</em> requests, the error page is returned.
</p><pre class="verbatim">  return send_page(connection, errorpage); 
}
</pre>

<p>These were the important parts of the program <code>simplepost.c</code>.

</p><hr size="6">
<a name="NOD8"></a>
<a name="SEC21"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC17" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC26" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC17" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC26" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 7. Improved processing of POST data </h1>

<p>The previous chapter introduced a way to upload data to the server, but the developed example program 
has some shortcomings, such as not being able to handle larger chunks of data. In this chapter, we
are going to discuss a more advanced server program that allows clients to upload a file in order to 
have it stored on the server's filesystem. The server shall also watch and limit the number of
clients concurrently uploading, responding with a proper busy message if necessary.

</p>
<a name="SEC22"></a>
<h2 class="heading"> Prepared answers </h2>
<p>We choose to operate the server with the <code>SELECT_INTERNALLY</code> method. This makes it easier to 
synchronize the global states at the cost of possible delays for other connections if the processing
of a request is too slow. One of these variables that needs to be shared for all connections is the
total number of clients that are uploading.

</p><pre class="verbatim">#define MAXCLIENTS      2
static unsigned int    nr_of_uploading_clients = 0;
</pre>

<p>If there are too many clients uploading, we want the server to respond to all requests with a busy
message.
</p><pre class="verbatim">const char* busypage = 
  &quot;&lt;html&gt;&lt;body&gt;This server is busy, please try again later.&lt;/body&gt;&lt;/html&gt;&quot;;
</pre>

<p>Otherwise, the server will send a <em>form</em> that informs the user of the current number of uploading clients,   
and ask her to pick a file on her local filesystem which is to be uploaded. 
</p><pre class="verbatim">const char* askpage = &quot;&lt;html&gt;&lt;body&gt;\n\
                       Upload a file, please!&lt;br&gt;\n\
                       There are %u clients uploading at the moment.&lt;br&gt;\n\
                       &lt;form action=\&quot;/filepost\&quot; method=\&quot;post\&quot; \
                         enctype=\&quot;multipart/form-data\&quot;&gt;\n\
                       &lt;input name=\&quot;file\&quot; type=\&quot;file\&quot;&gt;\n\
                       &lt;input type=\&quot;submit\&quot; value=\&quot; Send \&quot;&gt;&lt;/form&gt;\n\
                       &lt;/body&gt;&lt;/html&gt;&quot;;
</pre>

<p>If the upload has succeeded, the server will respond with a message saying so.
</p><pre class="verbatim">const char* completepage = &quot;&lt;html&gt;&lt;body&gt;The upload has been completed.&lt;/body&gt;&lt;/html&gt;&quot;;
</pre>

<p>We want the server to report internal errors, such as memory shortage or file access problems,
adequately. 
</p><pre class="verbatim">const char* servererrorpage 
  = &quot;&lt;html&gt;&lt;body&gt;An internal server error has occured.&lt;/body&gt;&lt;/html&gt;&quot;;
const char* fileexistspage
  = &quot;&lt;html&gt;&lt;body&gt;This file already exists.&lt;/body&gt;&lt;/html&gt;&quot;;
</pre>

<p>It would be tolerable to send all these responses undifferentiated with a <code>200 HTTP_OK</code> 
status code but in order to improve the <code>HTTP</code> conformance of our server a bit, we extend the 
<code>send_page</code> function so that it accepts individual status codes. 

</p><pre class="verbatim">static int 
send_page (struct MHD_Connection *connection, 
	   const char* page, int status_code)
{
  int ret;
  struct MHD_Response *response;
  
  response = MHD_create_response_from_data (strlen (page), (void*) page, 
  	     				    MHD_NO, MHD_YES);
  if (!response) return MHD_NO;
 
  ret = MHD_queue_response (connection, status_code, response);
  MHD_destroy_response (response);

  return ret;
}
</pre>

<p>Note how we ask <em>MHD</em> to make its own copy of the message data. The reason behind this will
become clear later.

</p>
<a name="SEC23"></a>
<h2 class="heading"> Connection cycle </h2>
<p>The decision whether the server is busy or not is made right at the beginning of the connection. To 
do that at this stage is especially important for <em>POST</em> requests because if no response is 
queued at this point, and <code>MHD_YES</code> returned, <em>MHD</em> will not sent any queued messages until
a postprocessor has been created and the post iterator is called at least once.

</p><pre class="verbatim">static int 
answer_to_connection (void *cls, struct MHD_Connection *connection, 
		      const char *url, 
                      const char *method, const char *version, 
		      const char *upload_data, 
                      size_t *upload_data_size, void **con_cls)
{
  if (NULL == *con_cls) 
    {
      struct connection_info_struct *con_info;

      if (nr_of_uploading_clients &gt;= MAXCLIENTS) 
        return send_page(connection, busypage, MHD_HTTP_SERVICE_UNAVAILABLE);
</pre>

<p>If the server is not busy, the <code>connection_info</code> structure is initialized as usual, with 
the addition of a filepointer for each connection.

</p><pre class="verbatim">      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info) return MHD_NO;
      con_info-&gt;fp = 0;

      if (0 == strcmp (method, &quot;POST&quot;)) 
        {  
          ...
        } 
      else con_info-&gt;connectiontype = GET;

      *con_cls = (void*) con_info;
 
      return MHD_YES;
    }
</pre>

<p>For <em>POST</em> requests, the postprocessor is created and we register a new uploading client. From 
this point on, there are many possible places for errors to occur that make it necessary to interrupt
the uploading process. We need a means of having the proper response message ready at all times. 
Therefore, the <code>connection_info</code> structure is extended to hold the most current response
message so that whenever a response is sent, the client will get the most informative message. Here,
the structure is initialized to &quot;no error&quot;.
</p><pre class="verbatim">      if (0 == strcmp (method, &quot;POST&quot;)) 
        {  
          con_info-&gt;postprocessor 
	    = MHD_create_post_processor (connection, POSTBUFFERSIZE, 
                                         iterate_post, (void*) con_info);   

          if (NULL == con_info-&gt;postprocessor) 
            {
              free (con_info); 
              return MHD_NO;
            }

          nr_of_uploading_clients++;
          
          con_info-&gt;connectiontype = POST;
          con_info-&gt;answercode = MHD_HTTP_OK;
          con_info-&gt;answerstring = completepage;
        } 
      else con_info-&gt;connectiontype = GET;
</pre>

<p>If the connection handler is called for the second time, <em>GET</em> requests will be answered with
the <em>form</em>. We can keep the buffer under function scope, because we asked <em>MHD</em> to make its
own copy of it for as long as it is needed.
</p><pre class="verbatim">  if (0 == strcmp (method, &quot;GET&quot;)) 
    {
      int ret;
      char buffer[1024];
        
      sprintf (buffer, askpage, nr_of_uploading_clients);
      return send_page (connection, buffer, MHD_HTTP_OK);     
    } 
</pre>


<p>The rest of the <code>answer_to_connection</code> function is very similar to the <code>simplepost.c</code>
example, except the more flexible content of the responses. The <em>POST</em> data is processed until
there is none left and the execution falls through to return an error page if the connection
constituted no expected request method.
</p><pre class="verbatim">  if (0 == strcmp (method, &quot;POST&quot;)) 
    {
      struct connection_info_struct *con_info = *con_cls;
       
      if (0 != *upload_data_size) 
        { 
          MHD_post_process (con_info-&gt;postprocessor,
	                    upload_data, *upload_data_size);
          *upload_data_size = 0;
          
          return MHD_YES;
        } 
      else 
        return send_page (connection, con_info-&gt;answerstring, 
	       		  con_info-&gt;answercode);
    } 

  return send_page(connection, errorpage, MHD_HTTP_BAD_REQUEST);
}
</pre>


<a name="SEC24"></a>
<h2 class="heading"> Storing to data </h2>
<p>Unlike the <code>simplepost.c</code> example, here it is to be expected that post iterator will be called
several times now. This means that for any given connection (there might be several concurrent of them)
the posted data has to be written to the correct file. That is why we store a file handle in every
<code>connection_info</code>, so that the it is preserved between successive iterations.
</p><pre class="verbatim">static int 
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, 
	      const char *key,
	      const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, 
	      uint64_t off, size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;
</pre>

<p>Because the following actions depend heavily on correct file processing, which might be error prone,
we default to reporting internal errors in case anything will go wrong.

</p><pre class="verbatim">con_info-&gt;answerstring = servererrorpage;
con_info-&gt;answercode = MHD_HTTP_INTERNAL_SERVER_ERROR;
</pre>

<p>In the &quot;askpage&quot; <em>form</em>, we told the client to label its post data with the &quot;file&quot; key. Anything else
would be an error.

</p><pre class="verbatim">  if (0 != strcmp (key, &quot;file&quot;)) return MHD_NO;
</pre>

<p>If the iterator is called for the first time, no file will have been opened yet. The <code>filename</code>
string contains the name of the file (without any paths) the user selected on his system. We want to
take this as the name the file will be stored on the server and make sure no file of that name exists
(or is being uploaded) before we create one (note that the code below technically contains a
race between the two &quot;fopen&quot; calls, but we will overlook this for portability sake).
</p><pre class="verbatim">  if (!con_info-&gt;fp)
    {
      if (NULL != (fp = fopen (filename, &quot;rb&quot;)) )
        {
          fclose (fp);
          con_info-&gt;answerstring = fileexistspage;
          con_info-&gt;answercode = MHD_HTTP_FORBIDDEN;
          return MHD_NO;
        }
      
      con_info-&gt;fp = fopen (filename, &quot;ab&quot;);
      if (!con_info-&gt;fp) return MHD_NO;    
    }
</pre>


<p>Occasionally, the iterator function will be called even when there are 0 new bytes to process. The 
server only needs to write data to the file if there is some.
</p><pre class="verbatim">if (size &gt; 0) 
    {  
      if (!fwrite (data, size, sizeof(char), con_info-&gt;fp))
        return MHD_NO;
    }
</pre>

<p>If this point has been reached, everything worked well for this iteration and the response can
be set to success again. If the upload has finished, this iterator function will not be called again.
</p><pre class="verbatim">  con_info-&gt;answerstring = completepage;
  con_info-&gt;answercode = MHD_HTTP_OK;

  return MHD_YES;
}
</pre>


<p>The new client was registered when the postprocessor was created. Likewise, we unregister the client
on destroying the postprocessor when the request is completed.
</p><pre class="verbatim">void request_completed (void *cls, struct MHD_Connection *connection, 
     		        void **con_cls,
                        enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info) return;

  if (con_info-&gt;connectiontype == POST)
    {
      if (NULL != con_info-&gt;postprocessor) 
        {
          MHD_destroy_post_processor (con_info-&gt;postprocessor); 
          nr_of_uploading_clients--;
        }

      if (con_info-&gt;fp) fclose (con_info-&gt;fp); 
    }

  free (con_info);
  *con_cls = NULL;      
}
</pre>


<p>This is essentially the whole example <code>largepost.c</code>.

</p>
<a name="SEC25"></a>
<h2 class="heading"> Remarks </h2>
<p>Now that the clients are able to create files on the server, security aspects are becoming even more
important than before. Aside from proper client authentication, the server should always make sure
explicitly that no files will be created outside of a dedicated upload directory.  In particular,
filenames must be checked to not contain strings like &quot;../&quot;.

</p><hr size="6">
<a name="NOD9"></a>
<a name="SEC26"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC21" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC30" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC21" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC30" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="chapter"> 8. Adding a layer of security </h1>

<p>We left the basic authentication chapter with the unsatisfactory conclusion that
any traffic, including the credentials, could be intercepted by anyone between
the browser client and the server. Protecting the data while it is sent over 
unsecured lines will be the goal of this chapter.

</p><p>Since version 0.4, the <em>MHD</em> library includes support for encrypting the
traffic by employing SSL/TSL. If <em>GNU libmicrohttpd</em> has been configured to
support these, encryption and decryption can be applied transparently on the
data being sent, with only minimal changes to the actual source code of the example.

</p>
<a name="SEC27"></a>
<h2 class="heading"> Preparation </h2>

<p>First, a private key for the server will be generated. With this key, the server
will later be able to authenticate itself to the client--preventing anyone else
from stealing the password by faking its identity. The <em>OpenSSL</em> suite, which
is available on many operating systems, can generate such a key. For the scope of
this tutorial, we will be content with a 1024 bit key:
</p><pre class="verbatim">&gt; openssl genrsa -out server.key 1024
</pre>

<p>In addition to the key, a certificate describing the server in human readable tokens
is also needed. This certificate will be attested with our aforementioned key. In this way,
we obtain a self-signed certificate, valid for one year. 

</p><pre class="verbatim">&gt; openssl req -days 365 -out server.pem -new -x509 -key server.key
</pre>

<p>To avoid unnecessary error messages in the browser, the certificate needs to
have a name that matches the <em>URI</em>, for example, &quot;localhost&quot; or the domain.
If you plan to have a publicly reachable server, you will need to ask a trusted third party,
called <em>Certificate Authority</em>, or <em>CA</em>, to attest the certificate for you. This way,
any visitor can make sure the server's identity is real.

</p><p>Whether the server's certificate is signed by us or a third party, once it has been accepted
by the client, both sides will be communicating over encrypted channels. From this point on,
it is the client's turn to authenticate itself. But this has already been implemented in the basic 
authentication scheme.

</p>
<a name="SEC28"></a>
<h2 class="heading"> Changing the source code </h2>

<p>We merely have to extend the server program so that it loads the two files into memory,

</p><pre class="verbatim">int
main ()
{
  struct MHD_Daemon *daemon;
  char *key_pem;
  char *cert_pem;

  key_pem = load_file (SERVERKEYFILE);
  cert_pem = load_file (SERVERCERTFILE);

  if ((key_pem == NULL) || (cert_pem == NULL))
  {
    printf (&quot;The key/certificate files could not be read.\n&quot;);
    return 1;
  }
</pre>

<p>and then we point the <em>MHD</em> daemon to it upon initalization. 
</p><pre class="verbatim">
  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL, 
  	   		     PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL, 
                             MHD_OPTION_HTTPS_MEM_KEY, key_pem,
                             MHD_OPTION_HTTPS_MEM_CERT, cert_pem,
                             MHD_OPTION_END);

  if (NULL == daemon)
    {
      printf (&quot;%s\n&quot;, cert_pem);
  
      free (key_pem);
      free (cert_pem);
  
      return 1;
    }
</pre>


<p>The rest consists of little new besides some additional memory cleanups.
</p><pre class="verbatim">
  getchar ();

  MHD_stop_daemon (daemon);
  free (key_pem);
  free (cert_pem);
  
  return 0;
}
</pre>


<p>The rather unexciting file loader can be found in the complete example <code>tlsauthentication.c</code>.

</p><a name="SEC29"></a>
<h2 class="heading"> Remarks </h2>
<ul>
<li>
<p>While the standard <em>HTTP</em> port is 80, it is 443 for <em>HTTPS</em>. The common internet browsers assume
standard <em>HTTP</em> if they are asked to access other ports than these. Therefore, you will have to type 
<code>https://localhost:8888</code> explicitly when you test the example, or the browser will not know how to
handle the answer properly.

</p></li><li>
<p>The remaining weak point is the question how the server will be trusted initially. Either a <em>CA</em> signs the
certificate or the client obtains the key over secure means. Anyway, the clients have to be aware (or configured) 
that they should not accept certificates of unknown origin.

</p></li><li>
<p>The introduced method of certificates makes it mandatory to set an expiration date--making it less feasible to
hardcode certificates in embedded devices. 

</p></li><li>
<p>The cryptographic facilities consume memory space and computing time. For this reason, websites usually consists
both of uncritically <em>HTTP</em> parts and secured <em>HTTPS</em>.

</p></li></ul>

<hr size="6">
<a name="NOD10"></a>
<a name="SEC30"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC26" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC32" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC26" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC32" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="appendix"> A. Bibliography </h1>

<a name="SEC31"></a>
<h2 class="heading"> API reference </h2>
<ul>
<li>
<p>The <em>GNU libmicrohttpd</em> manual by Marco Maggi and Christian Grothoff 2008 
<a href="http://gnunet.org/libmicrohttpd/microhttpd.html">http://gnunet.org/libmicrohttpd/microhttpd.html</a>

</p></li><li>
<p>All referenced RFCs can be found on the website of <em>The Internet Engineering Task Force</em>
<a href="http://www.ietf.org/">http://www.ietf.org/</a>

</p></li><li>
<p><em>RFC 2616</em>: Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T. Berners-Lee,
&quot;Hypertext Transfer Protocol - HTTP/1.1&quot;, RFC 2016, January 1997.

</p></li><li>
<p><em>RFC 2617</em>: Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P.,
Luotonen, A., and L. Stewart, &quot;HTTP Authentication: Basic and Digest Access Authentication&quot;, RFC 2617, June 1999.

</p></li><li> 
<p>A well-structured <em>HTML</em> reference can be found on
<a href="http://www.echoecho.com/html.htm">http://www.echoecho.com/html.htm</a>

</p><p>For those readers understanding German or French, there is an excellent document both for learning
<em>HTML</em> and for reference, whose English version unfortunately has been discontinued.
<a href="http://de.selfhtml.org/">http://de.selfhtml.org/</a> and <a href="http://fr.selfhtml.org/">http://fr.selfhtml.org/</a>

</p></li></ul>

<hr size="6">
<a name="NOD11"></a>
<a name="SEC32"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC30" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC30" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Next chapter"> &gt;&gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="appendix"> B. GNU Free Documentation License </h1>

<p align="center"> Version 1.3, 3 November 2008
</p>

<table><tr><td>&nbsp;</td><td><pre class="display">Copyright &copy; 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
<a href="http://fsf.org/">http://fsf.org/</a>

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
</pre></td></tr></table>
<ol>
<li>
<p>PREAMBLE

</p><p>The purpose of this License is to make a manual, textbook, or other
functional and useful document <em>free</em> in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.

</p><p>This License is a kind of &quot;copyleft&quot;, which means that derivative
works of the document must themselves be free in the same sense.  It
complements the GNU General Public License, which is a copyleft
license designed for free software.

</p><p>We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does.  But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book.  We recommend this License
principally for works whose purpose is instruction or reference.

</p></li><li>
<p>APPLICABILITY AND DEFINITIONS

</p><p>This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License.  Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein.  The &quot;Document&quot;, below,
refers to any such manual or work.  Any member of the public is a
licensee, and is addressed as &quot;you&quot;.  You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.

</p><p>A &quot;Modified Version&quot; of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.

</p><p>A &quot;Secondary Section&quot; is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject.  (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.)  The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.

</p><p>The &quot;Invariant Sections&quot; are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License.  If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant.  The Document may contain zero
Invariant Sections.  If the Document does not identify any Invariant
Sections then there are none.

</p><p>The &quot;Cover Texts&quot; are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License.  A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.

</p><p>A &quot;Transparent&quot; copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters.  A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text.  A copy that is not &quot;Transparent&quot; is called &quot;Opaque&quot;.

</p><p>Examples of suitable formats for Transparent copies include plain
<small>ASCII</small> without markup, Texinfo input format, LaTeX input
format, SGML or XML using a publicly available
DTD, and standard-conforming simple HTML,
PostScript or PDF designed for human modification.  Examples
of transparent image formats include PNG, XCF and
JPG.  Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, SGML or
XML for which the DTD and/or processing tools are
not generally available, and the machine-generated HTML,
PostScript or PDF produced by some word processors for
output purposes only.

</p><p>The &quot;Title Page&quot; means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page.  For works in
formats which do not have any title page as such, &quot;Title Page&quot; means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.

</p><p>The &quot;publisher&quot; means any person or entity that distributes copies
of the Document to the public.

</p><p>A section &quot;Entitled XYZ&quot; means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language.  (Here XYZ stands for a
specific section name mentioned below, such as &quot;Acknowledgements&quot;,
&quot;Dedications&quot;, &quot;Endorsements&quot;, or &quot;History&quot;.)  To &quot;Preserve the Title&quot;
of such a section when you modify the Document means that it remains a
section &quot;Entitled XYZ&quot; according to this definition.

</p><p>The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document.  These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.

</p></li><li>
<p>VERBATIM COPYING

</p><p>You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License.  You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute.  However, you may accept
compensation in exchange for copies.  If you distribute a large enough
number of copies you must also follow the conditions in section 3.

</p><p>You may also lend copies, under the same conditions stated above, and
you may publicly display copies.

</p></li><li>
<p>COPYING IN QUANTITY

</p><p>If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover.  Both covers must also clearly and legibly identify
you as the publisher of these copies.  The front cover must present
the full title with all words of the title equally prominent and
visible.  You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.

</p><p>If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.

</p><p>If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.

</p><p>It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.

</p></li><li>
<p>MODIFICATIONS

</p><p>You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it.  In addition, you must do these things in the Modified Version:

</p><ol>
<li>
<p>Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document).  You may use the same title as a previous version
if the original publisher of that version gives permission.

</p></li><li>
<p>List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.

</p></li><li>
<p>State on the Title page the name of the publisher of the
Modified Version, as the publisher.

</p></li><li>
<p>Preserve all the copyright notices of the Document.

</p></li><li>
<p>Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.

</p></li><li>
<p>Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.

</p></li><li>
<p>Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.

</p></li><li>
<p>Include an unaltered copy of this License.

</p></li><li>
<p>Preserve the section Entitled &quot;History&quot;, Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page.  If
there is no section Entitled &quot;History&quot; in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.

</p></li><li>
<p>Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on.  These may be placed in the &quot;History&quot; section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.

</p></li><li>
<p>For any section Entitled &quot;Acknowledgements&quot; or &quot;Dedications&quot;, Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.

</p></li><li>
<p>Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles.  Section numbers
or the equivalent are not considered part of the section titles.

</p></li><li>
<p>Delete any section Entitled &quot;Endorsements&quot;.  Such a section
may not be included in the Modified Version.

</p></li><li>
<p>Do not retitle any existing section to be Entitled &quot;Endorsements&quot; or
to conflict in title with any Invariant Section.

</p></li><li>
<p>Preserve any Warranty Disclaimers.
</p></li></ol>

<p>If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant.  To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.

</p><p>You may add a section Entitled &quot;Endorsements&quot;, provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.

</p><p>You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version.  Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity.  If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.

</p><p>The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.

</p></li><li>
<p>COMBINING DOCUMENTS

</p><p>You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.

</p><p>The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy.  If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.

</p><p>In the combination, you must combine any sections Entitled &quot;History&quot;
in the various original documents, forming one section Entitled
&quot;History&quot;; likewise combine any sections Entitled &quot;Acknowledgements&quot;,
and any sections Entitled &quot;Dedications&quot;.  You must delete all
sections Entitled &quot;Endorsements.&quot;

</p></li><li>
<p>COLLECTIONS OF DOCUMENTS

</p><p>You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.

</p><p>You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.

</p></li><li>
<p>AGGREGATION WITH INDEPENDENT WORKS

</p><p>A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an &quot;aggregate&quot; if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.

</p><p>If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.

</p></li><li>
<p>TRANSLATION

</p><p>Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections.  You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers.  In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.

</p><p>If a section in the Document is Entitled &quot;Acknowledgements&quot;,
&quot;Dedications&quot;, or &quot;History&quot;, the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.

</p></li><li>
<p>TERMINATION

</p><p>You may not copy, modify, sublicense, or distribute the Document
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense, or distribute it is void, and
will automatically terminate your rights under this License.

</p><p>However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.

</p><p>Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

</p><p>Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does
not give you any rights to use it.

</p></li><li>
<p>FUTURE REVISIONS OF THIS LICENSE

</p><p>The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time.  Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.  See
<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.

</p><p>Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License &quot;or any later version&quot; applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation.  If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.  If the Document
specifies that a proxy can decide which future versions of this
License can be used, that proxy's public statement of acceptance of a
version permanently authorizes you to choose that version for the
Document.

</p></li><li>
<p>RELICENSING

</p><p>&quot;Massive Multiauthor Collaboration Site&quot; (or &quot;MMC Site&quot;) means any
World Wide Web server that publishes copyrightable works and also
provides prominent facilities for anybody to edit those works.  A
public wiki that anybody can edit is an example of such a server.  A
&quot;Massive Multiauthor Collaboration&quot; (or &quot;MMC&quot;) contained in the
site means any set of copyrightable works thus published on the MMC
site.

</p><p>&quot;CC-BY-SA&quot; means the Creative Commons Attribution-Share Alike 3.0
license published by Creative Commons Corporation, a not-for-profit
corporation with a principal place of business in San Francisco,
California, as well as future copyleft versions of that license
published by that same organization.

</p><p>&quot;Incorporate&quot; means to publish or republish a Document, in whole or
in part, as part of another Document.

</p><p>An MMC is &quot;eligible for relicensing&quot; if it is licensed under this
License, and if all works that were first published under this License
somewhere other than this MMC, and subsequently incorporated in whole
or in part into the MMC, (1) had no cover texts or invariant sections,
and (2) were thus incorporated prior to November 1, 2008.

</p><p>The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009,
provided the MMC is eligible for relicensing.

</p></li></ol>


<a name="SEC33"></a>
<h2 class="heading"> ADDENDUM: How to use this License for your documents </h2>

<p>To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:

</p><table><tr><td>&nbsp;</td><td><pre class="smallexample">  Copyright (C)  <var>year</var>  <var>your name</var>.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.3
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
  Texts.  A copy of the license is included in the section entitled ``GNU
  Free Documentation License''.
</pre></td></tr></table>
<p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the &quot;with&hellip;Texts.&quot; line with this:

</p><table><tr><td>&nbsp;</td><td><pre class="smallexample">    with the Invariant Sections being <var>list their titles</var>, with
    the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
    being <var>list</var>.
</pre></td></tr></table>
<p>If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.

</p><p>If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.

</p>

<hr size="6">
<a name="NOD12"></a>
<a name="SEC34"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC32" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC35" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC32" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1 class="appendix"> C. Example programs </h1>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top"><a href="#SEC35">C.1 hellobrowser.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC36">C.2 logging.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC37">C.3 responseheaders.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC38">C.4 basicauthentication.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC39">C.5 simplepost.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC40">C.6 largepost.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top"><a href="#SEC41">C.7 tlsauthentication.c</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>

<hr size="6">
<a name="NOD13"></a>
<a name="SEC35"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC34" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC36" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.1 hellobrowser.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;

#define PORT 8888

static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  const char *page = &quot;&lt;html&gt;&lt;body&gt;Hello, browser!&lt;/body&gt;&lt;/html&gt;&quot;;
  struct MHD_Response *response;
  int ret;

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);
  return 0;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="NOD14"></a>
<a name="SEC36"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC35" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC37" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.2 logging.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;

#define PORT 8888


static int
print_out_key (void *cls, enum MHD_ValueKind kind, const char *key,
               const char *value)
{
  printf (&quot;%s: %s\n&quot;, key, value);
  return MHD_YES;
}

static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  printf (&quot;New %s request for %s using version %s\n&quot;, method, url, version);

  MHD_get_connection_values (connection, MHD_HEADER_KIND, print_out_key,
                             NULL);

  return MHD_NO;
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);
  return 0;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="NOD15"></a>
<a name="SEC37"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC36" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC38" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.3 responseheaders.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;
#include &lt;time.h&gt;

#define PORT 8888
#define FILENAME &quot;picture.png&quot;
#define MIMETYPE &quot;image/png&quot;

static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  struct MHD_Response *response;
  int fd;
  int ret;
  struct stat sbuf;

  if (0 != strcmp (method, &quot;GET&quot;))
    return MHD_NO;

  if ( (-1 == (fd = open (FILENAME, O_RDONLY))) ||
       (0 != fstat (fd, &amp;sbuf)) )
    {
      /* error accessing file */
      if (fd != -1) close (fd);
      const char *errorstr =
        &quot;&lt;html&gt;&lt;body&gt;An internal server error has occured!\
                              &lt;/body&gt;&lt;/html&gt;&quot;;
      response =
	MHD_create_response_from_data (strlen (errorstr), 
				       (void *) errorstr, 
				       MHD_NO, MHD_NO);
      if (response)
        {
          ret =
            MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR,
                                response);
          MHD_destroy_response (response);

          return MHD_YES;
        }
      else
        return MHD_NO;
    }
  response =
    MHD_create_response_from_fd (fd, sbuf.st_size);
  MHD_add_response_header (response, &quot;Content-Type&quot;, MIMETYPE);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);

  return 0;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="NOD16"></a>
<a name="SEC38"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC37" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC39" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.4 basicauthentication.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;
#include &lt;time.h&gt;

#define PORT 8888

#define REALM     &quot;\&quot;Maintenance\&quot;&quot;
#define USER      &quot;a legitimate user&quot;
#define PASSWORD  &quot;and his password&quot;


char *string_to_base64 (const char *message);


static int
ask_for_authentication (struct MHD_Connection *connection, const char *realm)
{
  int ret;
  struct MHD_Response *response;
  char *headervalue;
  const char *strbase = &quot;Basic realm=&quot;;

  response = MHD_create_response_from_data (0, NULL, MHD_NO, MHD_NO);
  if (!response)
    return MHD_NO;

  headervalue = malloc (strlen (strbase) + strlen (realm) + 1);
  if (!headervalue)
    return MHD_NO;

  strcpy (headervalue, strbase);
  strcat (headervalue, realm);

  ret = MHD_add_response_header (response, &quot;WWW-Authenticate&quot;, headervalue);
  free (headervalue);
  if (!ret)
    {
      MHD_destroy_response (response);
      return MHD_NO;
    }

  ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response);

  MHD_destroy_response (response);

  return ret;
}

static int
is_authenticated (struct MHD_Connection *connection,
                  const char *username, const char *password)
{
  const char *headervalue;
  char *expected_b64, *expected;
  const char *strbase = &quot;Basic &quot;;
  int authenticated;

  headervalue =
    MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                 &quot;Authorization&quot;);
  if (NULL == headervalue)
    return 0;
  if (0 != strncmp (headervalue, strbase, strlen (strbase)))
    return 0;

  expected = malloc (strlen (username) + 1 + strlen (password) + 1);
  if (NULL == expected)
    return 0;

  strcpy (expected, username);
  strcat (expected, &quot;:&quot;);
  strcat (expected, password);

  expected_b64 = string_to_base64 (expected);
  free (expected);
  if (NULL == expected_b64)
       return 0;

  authenticated =
    (strcmp (headervalue + strlen (strbase), expected_b64) == 0);

  free (expected_b64);
  return authenticated;
}


static int
secret_page (struct MHD_Connection *connection)
{
  int ret;
  struct MHD_Response *response;
  const char *page = &quot;&lt;html&gt;&lt;body&gt;A secret.&lt;/body&gt;&lt;/html&gt;&quot;;

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (0 != strcmp (method, &quot;GET&quot;))
    return MHD_NO;
  if (NULL == *con_cls)
    {
      *con_cls = connection;
      return MHD_YES;
    }

  if (!is_authenticated (connection, USER, PASSWORD))
    return ask_for_authentication (connection, REALM);

  return secret_page (connection);
}


int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);
  return 0;
}


char *
string_to_base64 (const char *message)
{
  const char *lookup =
    &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;;
  unsigned long l;
  int i;
  char *tmp;
  size_t length = strlen (message);

  tmp = malloc (length * 2);
  if (NULL == tmp)
    return tmp;

  tmp[0] = 0;

  for (i = 0; i &lt; length; i += 3)
    {
      l = (((unsigned long) message[i]) &lt;&lt; 16)
        | (((i + 1) &lt; length) ? (((unsigned long) message[i + 1]) &lt;&lt; 8) : 0)
        | (((i + 2) &lt; length) ? ((unsigned long) message[i + 2]) : 0);


      strncat (tmp, &amp;lookup[(l &gt;&gt; 18) &amp; 0x3F], 1);
      strncat (tmp, &amp;lookup[(l &gt;&gt; 12) &amp; 0x3F], 1);

      if (i + 1 &lt; length)
        strncat (tmp, &amp;lookup[(l &gt;&gt; 6) &amp; 0x3F], 1);
      if (i + 2 &lt; length)
        strncat (tmp, &amp;lookup[l &amp; 0x3F], 1);
    }

  if (length % 3)
    strncat (tmp, &quot;===&quot;, 3 - length % 3);

  return tmp;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="NOD17"></a>
<a name="SEC39"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC38" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC40" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.5 simplepost.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;

#define PORT            8888
#define POSTBUFFERSIZE  512
#define MAXNAMESIZE     20
#define MAXANSWERSIZE   512

#define GET             0
#define POST            1

struct connection_info_struct
{
  int connectiontype;
  char *answerstring;
  struct MHD_PostProcessor *postprocessor;
};

const char *askpage = &quot;&lt;html&gt;&lt;body&gt;\
                       What's your name, Sir?&lt;br&gt;\
                       &lt;form action=\&quot;/namepost\&quot; method=\&quot;post\&quot;&gt;\
                       &lt;input name=\&quot;name\&quot; type=\&quot;text\&quot;\
                       &lt;input type=\&quot;submit\&quot; value=\&quot; Send \&quot;&gt;&lt;/form&gt;\
                       &lt;/body&gt;&lt;/html&gt;&quot;;

const char *greatingpage =
  &quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Welcome, %s!&lt;/center&gt;&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;;

const char *errorpage =
  &quot;&lt;html&gt;&lt;body&gt;This doesn't seem to be right.&lt;/body&gt;&lt;/html&gt;&quot;;


static int
send_page (struct MHD_Connection *connection, const char *page)
{
  int ret;
  struct MHD_Response *response;


  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


static int
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key,
              const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, uint64_t off,
              size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;

  if (0 == strcmp (key, &quot;name&quot;))
    {
      if ((size &gt; 0) &amp;&amp; (size &lt;= MAXNAMESIZE))
        {
          char *answerstring;
          answerstring = malloc (MAXANSWERSIZE);
          if (!answerstring)
            return MHD_NO;

          snprintf (answerstring, MAXANSWERSIZE, greatingpage, data);
          con_info-&gt;answerstring = answerstring;
        }
      else
        con_info-&gt;answerstring = NULL;

      return MHD_NO;
    }

  return MHD_YES;
}

static void
request_completed (void *cls, struct MHD_Connection *connection,
                   void **con_cls, enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info)
    return;

  if (con_info-&gt;connectiontype == POST)
    {
      MHD_destroy_post_processor (con_info-&gt;postprocessor);
      if (con_info-&gt;answerstring)
        free (con_info-&gt;answerstring);
    }

  free (con_info);
  *con_cls = NULL;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (NULL == *con_cls)
    {
      struct connection_info_struct *con_info;

      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info)
        return MHD_NO;
      con_info-&gt;answerstring = NULL;

      if (0 == strcmp (method, &quot;POST&quot;))
        {
          con_info-&gt;postprocessor =
            MHD_create_post_processor (connection, POSTBUFFERSIZE,
                                       iterate_post, (void *) con_info);

          if (NULL == con_info-&gt;postprocessor)
            {
              free (con_info);
              return MHD_NO;
            }

          con_info-&gt;connectiontype = POST;
        }
      else
        con_info-&gt;connectiontype = GET;

      *con_cls = (void *) con_info;

      return MHD_YES;
    }

  if (0 == strcmp (method, &quot;GET&quot;))
    {
      return send_page (connection, askpage);
    }

  if (0 == strcmp (method, &quot;POST&quot;))
    {
      struct connection_info_struct *con_info = *con_cls;

      if (*upload_data_size != 0)
        {
          MHD_post_process (con_info-&gt;postprocessor, upload_data,
                            *upload_data_size);
          *upload_data_size = 0;

          return MHD_YES;
        }
      else if (NULL != con_info-&gt;answerstring)
        return send_page (connection, con_info-&gt;answerstring);
    }

  return send_page (connection, errorpage);
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL,
                             MHD_OPTION_NOTIFY_COMPLETED, request_completed,
                             NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);

  return 0;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="NOD18"></a>
<a name="SEC40"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC39" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC41" title="Next section in reading order"> &gt; </a>]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.6 largepost.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;

#define PORT            8888
#define POSTBUFFERSIZE  512
#define MAXCLIENTS      2

#define GET             0
#define POST            1

static unsigned int nr_of_uploading_clients = 0;

struct connection_info_struct
{
  int connectiontype;
  struct MHD_PostProcessor *postprocessor;
  FILE *fp;
  const char *answerstring;
  int answercode;
};

const char *askpage = &quot;&lt;html&gt;&lt;body&gt;\n\
                       Upload a file, please!&lt;br&gt;\n\
                       There are %u clients uploading at the moment.&lt;br&gt;\n\
                       &lt;form action=\&quot;/filepost\&quot; method=\&quot;post\&quot; enctype=\&quot;multipart/form-data\&quot;&gt;\n\
                       &lt;input name=\&quot;file\&quot; type=\&quot;file\&quot;&gt;\n\
                       &lt;input type=\&quot;submit\&quot; value=\&quot; Send \&quot;&gt;&lt;/form&gt;\n\
                       &lt;/body&gt;&lt;/html&gt;&quot;;

const char *busypage =
  &quot;&lt;html&gt;&lt;body&gt;This server is busy, please try again later.&lt;/body&gt;&lt;/html&gt;&quot;;

const char *completepage =
  &quot;&lt;html&gt;&lt;body&gt;The upload has been completed.&lt;/body&gt;&lt;/html&gt;&quot;;

const char *errorpage =
  &quot;&lt;html&gt;&lt;body&gt;This doesn't seem to be right.&lt;/body&gt;&lt;/html&gt;&quot;;
const char *servererrorpage =
  &quot;&lt;html&gt;&lt;body&gt;An internal server error has occured.&lt;/body&gt;&lt;/html&gt;&quot;;
const char *fileexistspage =
  &quot;&lt;html&gt;&lt;body&gt;This file already exists.&lt;/body&gt;&lt;/html&gt;&quot;;


static int
send_page (struct MHD_Connection *connection, const char *page,
           int status_code)
{
  int ret;
  struct MHD_Response *response;

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_YES);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, status_code, response);
  MHD_destroy_response (response);

  return ret;
}


static int
iterate_post (void *coninfo_cls, enum MHD_ValueKind kind, const char *key,
              const char *filename, const char *content_type,
              const char *transfer_encoding, const char *data, uint64_t off,
              size_t size)
{
  struct connection_info_struct *con_info = coninfo_cls;
  FILE *fp;

  con_info-&gt;answerstring = servererrorpage;
  con_info-&gt;answercode = MHD_HTTP_INTERNAL_SERVER_ERROR;

  if (0 != strcmp (key, &quot;file&quot;))
    return MHD_NO;

  if (!con_info-&gt;fp)
    {
      if (NULL != (fp = fopen (filename, &quot;rb&quot;)))
        {
          fclose (fp);
          con_info-&gt;answerstring = fileexistspage;
          con_info-&gt;answercode = MHD_HTTP_FORBIDDEN;
          return MHD_NO;
        }

      con_info-&gt;fp = fopen (filename, &quot;ab&quot;);
      if (!con_info-&gt;fp)
        return MHD_NO;
    }

  if (size &gt; 0)
    {
      if (!fwrite (data, size, sizeof (char), con_info-&gt;fp))
        return MHD_NO;
    }

  con_info-&gt;answerstring = completepage;
  con_info-&gt;answercode = MHD_HTTP_OK;

  return MHD_YES;
}

static void
request_completed (void *cls, struct MHD_Connection *connection,
                   void **con_cls, enum MHD_RequestTerminationCode toe)
{
  struct connection_info_struct *con_info = *con_cls;

  if (NULL == con_info)
    return;

  if (con_info-&gt;connectiontype == POST)
    {
      if (NULL != con_info-&gt;postprocessor)
        {
          MHD_destroy_post_processor (con_info-&gt;postprocessor);
          nr_of_uploading_clients--;
        }

      if (con_info-&gt;fp)
        fclose (con_info-&gt;fp);
    }

  free (con_info);
  *con_cls = NULL;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (NULL == *con_cls)
    {
      struct connection_info_struct *con_info;

      if (nr_of_uploading_clients &gt;= MAXCLIENTS)
        return send_page (connection, busypage, MHD_HTTP_SERVICE_UNAVAILABLE);

      con_info = malloc (sizeof (struct connection_info_struct));
      if (NULL == con_info)
        return MHD_NO;

      con_info-&gt;fp = NULL;

      if (0 == strcmp (method, &quot;POST&quot;))
        {
          con_info-&gt;postprocessor =
            MHD_create_post_processor (connection, POSTBUFFERSIZE,
                                       iterate_post, (void *) con_info);

          if (NULL == con_info-&gt;postprocessor)
            {
              free (con_info);
              return MHD_NO;
            }

          nr_of_uploading_clients++;

          con_info-&gt;connectiontype = POST;
          con_info-&gt;answercode = MHD_HTTP_OK;
          con_info-&gt;answerstring = completepage;
        }
      else
        con_info-&gt;connectiontype = GET;

      *con_cls = (void *) con_info;

      return MHD_YES;
    }

  if (0 == strcmp (method, &quot;GET&quot;))
    {
      int ret;
      char buffer[1024];

      sprintf (buffer, askpage, nr_of_uploading_clients);
      return send_page (connection, buffer, MHD_HTTP_OK);
    }

  if (0 == strcmp (method, &quot;POST&quot;))
    {
      struct connection_info_struct *con_info = *con_cls;

      if (0 != *upload_data_size)
        {
          MHD_post_process (con_info-&gt;postprocessor, upload_data,
                            *upload_data_size);
          *upload_data_size = 0;

          return MHD_YES;
        }
      else
        return send_page (connection, con_info-&gt;answerstring,
                          con_info-&gt;answercode);
    }

  return send_page (connection, errorpage, MHD_HTTP_BAD_REQUEST);
}

int
main ()
{
  struct MHD_Daemon *daemon;


  daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, PORT, NULL, NULL,
                             &amp;answer_to_connection, NULL,
                             MHD_OPTION_NOTIFY_COMPLETED, request_completed,
                             NULL, MHD_OPTION_END);
  if (NULL == daemon)
    return 1;

  getchar ();

  MHD_stop_daemon (daemon);

  return 0;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="NOD19"></a>
<a name="SEC41"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC40" title="Previous section in reading order"> &lt; </a>]</td>
<td valign="middle" align="left">[ &gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC34" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
<td valign="middle" align="left">[<a href="#SEC34" title="Up section"> Up </a>]</td>
<td valign="middle" align="left">[ &gt;&gt; ]</td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left"> &nbsp; </td>
<td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h2 class="section"> C.7 tlsauthentication.c </h2>
<table><tr><td>&nbsp;</td><td><pre class="smalldisplay"><pre class="verbatim">#include &lt;sys/types.h&gt;
#include &lt;sys/select.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;microhttpd.h&gt;

#define PORT 8888

#define REALM     &quot;\&quot;Maintenance\&quot;&quot;
#define USER      &quot;a legitimate user&quot;
#define PASSWORD  &quot;and his password&quot;

#define SERVERKEYFILE &quot;server.key&quot;
#define SERVERCERTFILE &quot;server.pem&quot;


char *
string_to_base64 (const char *message)
{
  const char *lookup =
    &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;;
  unsigned long l;
  int i;
  char *tmp;
  size_t length = strlen (message);

  tmp = malloc (length * 2);
  if (NULL == tmp)
    return tmp;

  tmp[0] = 0;

  for (i = 0; i &lt; length; i += 3)
    {
      l = (((unsigned long) message[i]) &lt;&lt; 16)
        | (((i + 1) &lt; length) ? (((unsigned long) message[i + 1]) &lt;&lt; 8) : 0)
        | (((i + 2) &lt; length) ? ((unsigned long) message[i + 2]) : 0);


      strncat (tmp, &amp;lookup[(l &gt;&gt; 18) &amp; 0x3F], 1);
      strncat (tmp, &amp;lookup[(l &gt;&gt; 12) &amp; 0x3F], 1);

      if (i + 1 &lt; length)
        strncat (tmp, &amp;lookup[(l &gt;&gt; 6) &amp; 0x3F], 1);
      if (i + 2 &lt; length)
        strncat (tmp, &amp;lookup[l &amp; 0x3F], 1);
    }

  if (length % 3)
    strncat (tmp, &quot;===&quot;, 3 - length % 3);

  return tmp;
}


static long
get_file_size (const char *filename)
{
  FILE *fp;

  fp = fopen (filename, &quot;rb&quot;);
  if (fp)
    {
      long size;

      if ((0 != fseek (fp, 0, SEEK_END)) || (-1 == (size = ftell (fp))))
        size = 0;

      fclose (fp);

      return size;
    }
  else
    return 0;
}

static char *
load_file (const char *filename)
{
  FILE *fp;
  char *buffer;
  long size;

  size = get_file_size (filename);
  if (size == 0)
    return NULL;

  fp = fopen (filename, &quot;rb&quot;);
  if (!fp)
    return NULL;

  buffer = malloc (size);
  if (!buffer)
    {
      fclose (fp);
      return NULL;
    }

  if (size != fread (buffer, 1, size, fp))
    {
      free (buffer);
      buffer = NULL;
    }

  fclose (fp);
  return buffer;
}

static int
ask_for_authentication (struct MHD_Connection *connection, const char *realm)
{
  int ret;
  struct MHD_Response *response;
  char *headervalue;
  const char *strbase = &quot;Basic realm=&quot;;

  response = MHD_create_response_from_data (0, NULL, MHD_NO, MHD_NO);
  if (!response)
    return MHD_NO;

  headervalue = malloc (strlen (strbase) + strlen (realm) + 1);
  if (!headervalue)
    return MHD_NO;

  strcpy (headervalue, strbase);
  strcat (headervalue, realm);

  ret = MHD_add_response_header (response, &quot;WWW-Authenticate&quot;, headervalue);
  free (headervalue);
  if (!ret)
    {
      MHD_destroy_response (response);
      return MHD_NO;
    }

  ret = MHD_queue_response (connection, MHD_HTTP_UNAUTHORIZED, response);

  MHD_destroy_response (response);

  return ret;
}

static int
is_authenticated (struct MHD_Connection *connection,
                  const char *username, const char *password)
{
  const char *headervalue;
  char *expected_b64, *expected;
  const char *strbase = &quot;Basic &quot;;
  int authenticated;

  headervalue =
    MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                 &quot;Authorization&quot;);
  if (NULL == headervalue)
    return 0;
  if (0 != strncmp (headervalue, strbase, strlen (strbase)))
    return 0;

  expected = malloc (strlen (username) + 1 + strlen (password) + 1);
  if (NULL == expected)
    return 0;

  strcpy (expected, username);
  strcat (expected, &quot;:&quot;);
  strcat (expected, password);

  expected_b64 = string_to_base64 (expected);
  free (expected);
  if (NULL == expected_b64)
    return 0;

  authenticated =
    (strcmp (headervalue + strlen (strbase), expected_b64) == 0);

  free (expected_b64);

  return authenticated;
}


static int
secret_page (struct MHD_Connection *connection)
{
  int ret;
  struct MHD_Response *response;
  const char *page = &quot;&lt;html&gt;&lt;body&gt;A secret.&lt;/body&gt;&lt;/html&gt;&quot;;

  response =
    MHD_create_response_from_data (strlen (page), (void *) page, MHD_NO,
                                   MHD_NO);
  if (!response)
    return MHD_NO;

  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}


static int
answer_to_connection (void *cls, struct MHD_Connection *connection,
                      const char *url, const char *method,
                      const char *version, const char *upload_data,
                      size_t *upload_data_size, void **con_cls)
{
  if (0 != strcmp (method, &quot;GET&quot;))
    return MHD_NO;
  if (NULL == *con_cls)
    {
      *con_cls = connection;
      return MHD_YES;
    }

  if (!is_authenticated (connection, USER, PASSWORD))
    return ask_for_authentication (connection, REALM);

  return secret_page (connection);
}


int
main ()
{
  struct MHD_Daemon *daemon;
  char *key_pem;
  char *cert_pem;

  key_pem = load_file (SERVERKEYFILE);
  cert_pem = load_file (SERVERCERTFILE);

  if ((key_pem == NULL) || (cert_pem == NULL))
    {
      printf (&quot;The key/certificate files could not be read.\n&quot;);
      return 1;
    }

  daemon =
    MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL, PORT, NULL,
                      NULL, &amp;answer_to_connection, NULL,
                      MHD_OPTION_HTTPS_MEM_KEY, key_pem,
                      MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END);
  if (NULL == daemon)
    {
      printf (&quot;%s\n&quot;, cert_pem);

      free (key_pem);
      free (cert_pem);

      return 1;
    }

  getchar ();

  MHD_stop_daemon (daemon);
  free (key_pem);
  free (cert_pem);

  return 0;
}
</pre></pre></td></tr></table>
<hr size="6">
<a name="SEC_Contents"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1>Table of Contents</h1>
<div class="contents">

<ul class="toc">
  <li><a name="TOC1" href="#SEC1">1. Introduction</a>
  <ul class="toc">
    <li><a name="TOC2" href="#SEC2">1.1 History</a></li>
  </ul></li>
  <li><a name="TOC3" href="#SEC3">2. Hello browser example</a></li>
  <li><a name="TOC4" href="#SEC6">3. Exploring requests</a></li>
  <li><a name="TOC5" href="#SEC9">4. Response headers</a></li>
  <li><a name="TOC6" href="#SEC12">5. Supporting basic authentication</a></li>
  <li><a name="TOC7" href="#SEC17">6. Processing POST data</a></li>
  <li><a name="TOC8" href="#SEC21">7. Improved processing of POST data</a></li>
  <li><a name="TOC9" href="#SEC26">8. Adding a layer of security</a></li>
  <li><a name="TOC10" href="#SEC30">A. Bibliography</a></li>
  <li><a name="TOC11" href="#SEC32">B. GNU Free Documentation License</a></li>
  <li><a name="TOC12" href="#SEC34">C. Example programs</a>
  <ul class="toc">
    <li><a name="TOC13" href="#SEC35">C.1 hellobrowser.c</a></li>
    <li><a name="TOC14" href="#SEC36">C.2 logging.c</a></li>
    <li><a name="TOC15" href="#SEC37">C.3 responseheaders.c</a></li>
    <li><a name="TOC16" href="#SEC38">C.4 basicauthentication.c</a></li>
    <li><a name="TOC17" href="#SEC39">C.5 simplepost.c</a></li>
    <li><a name="TOC18" href="#SEC40">C.6 largepost.c</a></li>
    <li><a name="TOC19" href="#SEC41">C.7 tlsauthentication.c</a></li>
  </ul>
</li>
</ul>
</div>
<hr size="1">
<a name="SEC_About"></a>
<table cellpadding="1" cellspacing="1" border="0">
<tr><td valign="middle" align="left">[<a href="#SEC_Top" title="Cover (top) of document">Top</a>]</td>
<td valign="middle" align="left">[<a href="#SEC_Contents" title="Table of contents">Contents</a>]</td>
<td valign="middle" align="left">[Index]</td>
<td valign="middle" align="left">[<a href="#SEC_About" title="About (help)"> ? </a>]</td>
</tr></table>
<h1>About This Document</h1>
<p>
  This document was generated by <em>Jim</em> on <em>September, 8 2010</em> using <a href="http://texi2html.cvshome.org/"><em>texi2html 1.70</em></a>.
</p>
<p>
  The buttons in the navigation panels have the following meaning:
</p>
<table border="1">
  <tr>
    <th> Button </th>
    <th> Name </th>
    <th> Go to </th>
    <th> From 1.2.3 go to</th>
  </tr>
  <tr>
    <td align="center"> [ &lt; ] </td>
    <td align="center">Back</td>
    <td>previous section in reading order</td>
    <td>1.2.2</td>
  </tr>
  <tr>
    <td align="center"> [ &gt; ] </td>
    <td align="center">Forward</td>
    <td>next section in reading order</td>
    <td>1.2.4</td>
  </tr>
  <tr>
    <td align="center"> [ &lt;&lt; ] </td>
    <td align="center">FastBack</td>
    <td>beginning of this chapter or previous chapter</td>
    <td>1</td>
  </tr>
  <tr>
    <td align="center"> [ Up ] </td>
    <td align="center">Up</td>
    <td>up section</td>
    <td>1.2</td>
  </tr>
  <tr>
    <td align="center"> [ &gt;&gt; ] </td>
    <td align="center">FastForward</td>
    <td>next chapter</td>
    <td>2</td>
  </tr>
  <tr>
    <td align="center"> [Top] </td>
    <td align="center">Top</td>
    <td>cover (top) of document</td>
    <td> &nbsp; </td>
  </tr>
  <tr>
    <td align="center"> [Contents] </td>
    <td align="center">Contents</td>
    <td>table of contents</td>
    <td> &nbsp; </td>
  </tr>
  <tr>
    <td align="center"> [Index] </td>
    <td align="center">Index</td>
    <td>index</td>
    <td> &nbsp; </td>
  </tr>
  <tr>
    <td align="center"> [ ? ] </td>
    <td align="center">About</td>
    <td>about (help)</td>
    <td> &nbsp; </td>
  </tr>
</table>

<p>
  where the <strong> Example </strong> assumes that the current position is at <strong> Subsubsection One-Two-Three </strong> of a document of the following structure:
</p>

<ul>
  <li> 1. Section One
    <ul>
      <li>1.1 Subsection One-One
        <ul>
          <li>...</li>
        </ul>
      </li>
      <li>1.2 Subsection One-Two
        <ul>
          <li>1.2.1 Subsubsection One-Two-One</li>
          <li>1.2.2 Subsubsection One-Two-Two</li>
          <li>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp;
            <strong>&lt;== Current Position </strong></li>
          <li>1.2.4 Subsubsection One-Two-Four</li>
        </ul>
      </li>
      <li>1.3 Subsection One-Three
        <ul>
          <li>...</li>
        </ul>
      </li>
      <li>1.4 Subsection One-Four</li>
    </ul>
  </li>
</ul>

<hr size="1">
<p>
 <font size="-1">
  This document was generated by <em>Jim</em> on <em>September, 8 2010</em> using <a href="http://texi2html.cvshome.org/"><em>texi2html 1.70</em></a>.
 </font>
 <br>

</p>
</body>
</html>

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/tutorial.texi.



































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
\input texinfo  @c -*-texinfo-*-
@finalout
@setfilename microhttpd-tutorial.info
@set UPDATED 26 Jul 2010
@set UPDATED-MONTH Jul 2010
@set EDITION 0.9.0
@set VERSION 0.9.0
@settitle A tutorial for GNU libmicrohttpd

@dircategory GNU Libraries
@direntry
* libmicrohttpdtutorial: (microhttpd).  A tutorial for GNU libmicrohttpd.
@end direntry

@copying
This tutorial documents GNU libmicrohttpd version @value{VERSION}, last
updated @value{UPDATED}. 

Copyright (c)  2008  Sebastian Gerhardt.

Copyright (c)  2010  Christian Grothoff.
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts.  A copy of the license is included in the section entitled "GNU
Free Documentation License".
@end quotation
@end copying

@titlepage
@title A Tutorial for GNU libmicrohttpd
@subtitle Version @value{VERSION}
@subtitle @value{UPDATED}
@author Sebastian Gerhardt (@email{sebgerhardt@@gmx.net})
@author Christian Grothoff (@email{christian@@grothoff.org})

@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage



@contents

@ifnottex
@node Top
@top Top
@end ifnottex     

@menu
* Introduction::
* Hello browser example::
* Exploring requests::
* Response headers::
* Supporting basic authentication::
* Processing POST data::
* Improved processing of POST data::
* Adding a layer of security::
* Bibliography::
* License text::
* Example programs::
@end menu

@node Introduction
@chapter Introduction
@include chapters/introduction.inc

@node Hello browser example
@chapter Hello browser example
@include chapters/hellobrowser.inc

@node Exploring requests
@chapter Exploring requests
@include chapters/exploringrequests.inc

@node Response headers
@chapter Response headers
@include chapters/responseheaders.inc

@node Supporting basic authentication
@chapter Supporting basic authentication
@include chapters/basicauthentication.inc

@node Processing POST data
@chapter Processing POST data
@include chapters/processingpost.inc

@node Improved processing of POST data 
@chapter Improved processing of POST data 
@include chapters/largerpost.inc

@node Adding a layer of security
@chapter Adding a layer of security
@include chapters/tlsauthentication.inc

@node Bibliography
@appendix Bibliography
@include chapters/bibliography.inc

@node License text
@appendix GNU Free Documentation License
@include fdl-1.3.texi

@node Example programs
@appendix Example programs
@menu
* hellobrowser.c::
* logging.c::
* responseheaders.c::
* basicauthentication.c::
* simplepost.c::
* largepost.c::
* tlsauthentication.c::
@end menu

@node hellobrowser.c
@section hellobrowser.c
@smalldisplay
@verbatiminclude examples/hellobrowser.c
@end smalldisplay

@node logging.c
@section logging.c
@smalldisplay
@verbatiminclude examples/logging.c
@end smalldisplay

@node responseheaders.c
@section responseheaders.c
@smalldisplay
@verbatiminclude examples/responseheaders.c
@end smalldisplay

@node basicauthentication.c
@section basicauthentication.c
@smalldisplay
@verbatiminclude examples/basicauthentication.c
@end smalldisplay

@node simplepost.c
@section simplepost.c
@smalldisplay
@verbatiminclude examples/simplepost.c
@end smalldisplay

@node largepost.c
@section largepost.c
@smalldisplay
@verbatiminclude examples/largepost.c
@end smalldisplay

@node tlsauthentication.c
@section tlsauthentication.c
@smalldisplay
@verbatiminclude examples/tlsauthentication.c
@end smalldisplay

@bye

Added luasupport/HTTP/libmicrohttpd-0.9.0/doc/version.texi.









>
>
>
>
1
2
3
4
@set UPDATED 26 July 2010
@set UPDATED-MONTH July 2010
@set EDITION 0.9.0
@set VERSION 0.9.0

Added luasupport/HTTP/libmicrohttpd-0.9.0/install-sh.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
#!/bin/sh
# install - install a program, script, or datafile

scriptversion=2009-04-28.21; # UTC

# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.

nl='
'
IFS=" ""	$nl"

# set DOITPROG to echo to test this script

# Don't use :- since 4.3BSD and earlier shells don't like it.
doit=${DOITPROG-}
if test -z "$doit"; then
  doit_exec=exec
else
  doit_exec=$doit
fi

# Put in absolute file names if you don't have them in your path;
# or use environment vars.

chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}

posix_glob='?'
initialize_posix_glob='
  test "$posix_glob" != "?" || {
    if (set -f) 2>/dev/null; then
      posix_glob=
    else
      posix_glob=:
    fi
  }
'

posix_mkdir=

# Desired mode of installed file.
mode=0755

chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
stripcmd=

src=
dst=
dir_arg=
dst_arg=

copy_on_change=false
no_target_directory=

usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
   or: $0 [OPTION]... SRCFILES... DIRECTORY
   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
   or: $0 [OPTION]... -d DIRECTORIES...

In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.

Options:
     --help     display this help and exit.
     --version  display version info and exit.

  -c            (ignored)
  -C            install only if different (preserve the last data modification time)
  -d            create directories instead of installing files.
  -g GROUP      $chgrpprog installed files to GROUP.
  -m MODE       $chmodprog installed files to MODE.
  -o USER       $chownprog installed files to USER.
  -s            $stripprog installed files.
  -t DIRECTORY  install into DIRECTORY.
  -T            report an error if DSTFILE is a directory.

Environment variables override the default commands:
  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
  RMPROG STRIPPROG
"

while test $# -ne 0; do
  case $1 in
    -c) ;;

    -C) copy_on_change=true;;

    -d) dir_arg=true;;

    -g) chgrpcmd="$chgrpprog $2"
	shift;;

    --help) echo "$usage"; exit $?;;

    -m) mode=$2
	case $mode in
	  *' '* | *'	'* | *'
'*	  | *'*'* | *'?'* | *'['*)
	    echo "$0: invalid mode: $mode" >&2
	    exit 1;;
	esac
	shift;;

    -o) chowncmd="$chownprog $2"
	shift;;

    -s) stripcmd=$stripprog;;

    -t) dst_arg=$2
	shift;;

    -T) no_target_directory=true;;

    --version) echo "$0 $scriptversion"; exit $?;;

    --)	shift
	break;;

    -*)	echo "$0: invalid option: $1" >&2
	exit 1;;

    *)  break;;
  esac
  shift
done

if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
  # When -d is used, all remaining arguments are directories to create.
  # When -t is used, the destination is already specified.
  # Otherwise, the last argument is the destination.  Remove it from $@.
  for arg
  do
    if test -n "$dst_arg"; then
      # $@ is not empty: it contains at least $arg.
      set fnord "$@" "$dst_arg"
      shift # fnord
    fi
    shift # arg
    dst_arg=$arg
  done
fi

if test $# -eq 0; then
  if test -z "$dir_arg"; then
    echo "$0: no input file specified." >&2
    exit 1
  fi
  # It's OK to call `install-sh -d' without argument.
  # This can happen when creating conditional directories.
  exit 0
fi

if test -z "$dir_arg"; then
  trap '(exit $?); exit' 1 2 13 15

  # Set umask so as not to create temps with too-generous modes.
  # However, 'strip' requires both read and write access to temps.
  case $mode in
    # Optimize common cases.
    *644) cp_umask=133;;
    *755) cp_umask=22;;

    *[0-7])
      if test -z "$stripcmd"; then
	u_plus_rw=
      else
	u_plus_rw='% 200'
      fi
      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
    *)
      if test -z "$stripcmd"; then
	u_plus_rw=
      else
	u_plus_rw=,u+rw
      fi
      cp_umask=$mode$u_plus_rw;;
  esac
fi

for src
do
  # Protect names starting with `-'.
  case $src in
    -*) src=./$src;;
  esac

  if test -n "$dir_arg"; then
    dst=$src
    dstdir=$dst
    test -d "$dstdir"
    dstdir_status=$?
  else

    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
    # might cause directories to be created, which would be especially bad
    # if $src (and thus $dsttmp) contains '*'.
    if test ! -f "$src" && test ! -d "$src"; then
      echo "$0: $src does not exist." >&2
      exit 1
    fi

    if test -z "$dst_arg"; then
      echo "$0: no destination specified." >&2
      exit 1
    fi

    dst=$dst_arg
    # Protect names starting with `-'.
    case $dst in
      -*) dst=./$dst;;
    esac

    # If destination is a directory, append the input filename; won't work
    # if double slashes aren't ignored.
    if test -d "$dst"; then
      if test -n "$no_target_directory"; then
	echo "$0: $dst_arg: Is a directory" >&2
	exit 1
      fi
      dstdir=$dst
      dst=$dstdir/`basename "$src"`
      dstdir_status=0
    else
      # Prefer dirname, but fall back on a substitute if dirname fails.
      dstdir=`
	(dirname "$dst") 2>/dev/null ||
	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	     X"$dst" : 'X\(//\)[^/]' \| \
	     X"$dst" : 'X\(//\)$' \| \
	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
	echo X"$dst" |
	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
		   s//\1/
		   q
		 }
		 /^X\(\/\/\)[^/].*/{
		   s//\1/
		   q
		 }
		 /^X\(\/\/\)$/{
		   s//\1/
		   q
		 }
		 /^X\(\/\).*/{
		   s//\1/
		   q
		 }
		 s/.*/./; q'
      `

      test -d "$dstdir"
      dstdir_status=$?
    fi
  fi

  obsolete_mkdir_used=false

  if test $dstdir_status != 0; then
    case $posix_mkdir in
      '')
	# Create intermediate dirs using mode 755 as modified by the umask.
	# This is like FreeBSD 'install' as of 1997-10-28.
	umask=`umask`
	case $stripcmd.$umask in
	  # Optimize common cases.
	  *[2367][2367]) mkdir_umask=$umask;;
	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;

	  *[0-7])
	    mkdir_umask=`expr $umask + 22 \
	      - $umask % 100 % 40 + $umask % 20 \
	      - $umask % 10 % 4 + $umask % 2
	    `;;
	  *) mkdir_umask=$umask,go-w;;
	esac

	# With -d, create the new directory with the user-specified mode.
	# Otherwise, rely on $mkdir_umask.
	if test -n "$dir_arg"; then
	  mkdir_mode=-m$mode
	else
	  mkdir_mode=
	fi

	posix_mkdir=false
	case $umask in
	  *[123567][0-7][0-7])
	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
	    ;;
	  *)
	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0

	    if (umask $mkdir_umask &&
		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
	    then
	      if test -z "$dir_arg" || {
		   # Check for POSIX incompatibilities with -m.
		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
		   # other-writeable bit of parent directory when it shouldn't.
		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
		   case $ls_ld_tmpdir in
		     d????-?r-*) different_mode=700;;
		     d????-?--*) different_mode=755;;
		     *) false;;
		   esac &&
		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
		   }
		 }
	      then posix_mkdir=:
	      fi
	      rmdir "$tmpdir/d" "$tmpdir"
	    else
	      # Remove any dirs left behind by ancient mkdir implementations.
	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
	    fi
	    trap '' 0;;
	esac;;
    esac

    if
      $posix_mkdir && (
	umask $mkdir_umask &&
	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
      )
    then :
    else

      # The umask is ridiculous, or mkdir does not conform to POSIX,
      # or it failed possibly due to a race condition.  Create the
      # directory the slow way, step by step, checking for races as we go.

      case $dstdir in
	/*) prefix='/';;
	-*) prefix='./';;
	*)  prefix='';;
      esac

      eval "$initialize_posix_glob"

      oIFS=$IFS
      IFS=/
      $posix_glob set -f
      set fnord $dstdir
      shift
      $posix_glob set +f
      IFS=$oIFS

      prefixes=

      for d
      do
	test -z "$d" && continue

	prefix=$prefix$d
	if test -d "$prefix"; then
	  prefixes=
	else
	  if $posix_mkdir; then
	    (umask=$mkdir_umask &&
	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
	    # Don't fail if two instances are running concurrently.
	    test -d "$prefix" || exit 1
	  else
	    case $prefix in
	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
	      *) qprefix=$prefix;;
	    esac
	    prefixes="$prefixes '$qprefix'"
	  fi
	fi
	prefix=$prefix/
      done

      if test -n "$prefixes"; then
	# Don't fail if two instances are running concurrently.
	(umask $mkdir_umask &&
	 eval "\$doit_exec \$mkdirprog $prefixes") ||
	  test -d "$dstdir" || exit 1
	obsolete_mkdir_used=true
      fi
    fi
  fi

  if test -n "$dir_arg"; then
    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
  else

    # Make a couple of temp file names in the proper directory.
    dsttmp=$dstdir/_inst.$$_
    rmtmp=$dstdir/_rm.$$_

    # Trap to clean up those temp files at exit.
    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0

    # Copy the file name to the temp name.
    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&

    # and set any options; do chmod last to preserve setuid bits.
    #
    # If any of these fail, we abort the whole thing.  If we want to
    # ignore errors from any of these, just make sure not to ignore
    # errors from the above "$doit $cpprog $src $dsttmp" command.
    #
    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&

    # If -C, don't bother to copy if it wouldn't change the file.
    if $copy_on_change &&
       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&

       eval "$initialize_posix_glob" &&
       $posix_glob set -f &&
       set X $old && old=:$2:$4:$5:$6 &&
       set X $new && new=:$2:$4:$5:$6 &&
       $posix_glob set +f &&

       test "$old" = "$new" &&
       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
    then
      rm -f "$dsttmp"
    else
      # Rename the file to the real destination.
      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||

      # The rename failed, perhaps because mv can't rename something else
      # to itself, or perhaps because mv is so ancient that it does not
      # support -f.
      {
	# Now remove or move aside any old file at destination location.
	# We try this two ways since rm can't unlink itself on some
	# systems and the destination file might be busy for other
	# reasons.  In this case, the final cleanup might fail but the new
	# file should still install successfully.
	{
	  test ! -f "$dst" ||
	  $doit $rmcmd -f "$dst" 2>/dev/null ||
	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
	  } ||
	  { echo "$0: cannot unlink or rename $dst" >&2
	    (exit 1); exit 1
	  }
	} &&

	# Now rename the file to the real destination.
	$doit $mvcmd "$dsttmp" "$dst"
      }
    fi || exit 1

    trap '' 0
  fi
done

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/libmicrohttpd.pc.



























>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libmicrohttpd
Description: A library for creating an embedded HTTP server
Version: 0.9.0
Requires:
Conflicts:
Libs: -L${libdir} -lmicrohttpd
Libs.private: 
Cflags: -I${includedir}

Added luasupport/HTTP/libmicrohttpd-0.9.0/libmicrohttpd.pc.in.



























>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@

Name: libmicrohttpd
Description: A library for creating an embedded HTTP server
Version: @VERSION@
Requires:
Conflicts:
Libs: -L${libdir} -lmicrohttpd
Libs.private: @MHD_LIBDEPS@
Cflags: -I${includedir}

Added luasupport/HTTP/libmicrohttpd-0.9.0/libtool.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
#! /bin/sh

# libtool - Provide generalized library-building support services.
# Generated automatically by config.status (libmicrohttpd) 0.9.0
# Libtool was configured on host Pandora-2.local:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
#                 2006, 2007, 2008 Free Software Foundation, Inc.
#   Written by Gordon Matzigkeit, 1996
#
#   This file is part of GNU Libtool.
#
# GNU Libtool is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
# obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.


# The names of the tagged configurations supported by this script.
available_tags=""

# ### BEGIN LIBTOOL CONFIG

# Assembler program.
AS=as

# DLL creation program.
DLLTOOL=dlltool

# Object dumper program.
OBJDUMP=objdump

# Which release of libtool.m4 was used?
macro_version=2.2.6b
macro_revision=1.3017

# Whether or not to build shared libraries.
build_libtool_libs=yes

# Whether or not to build static libraries.
build_old_libs=yes

# What type of objects to build.
pic_mode=default

# Whether or not to optimize for fast installation.
fast_install=needless

# The host system.
host_alias=
host=powerpc-apple-darwin9.8.0
host_os=darwin9.8.0

# The build system.
build_alias=
build=powerpc-apple-darwin9.8.0
build_os=darwin9.8.0

# A sed program that does not truncate output.
SED="/opt/local/bin/sed"

# Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed="$SED -e 1s/^X//"

# A grep program that handles long lines.
GREP="/usr/bin/grep"

# An ERE matcher.
EGREP="/usr/bin/grep -E"

# A literal string matcher.
FGREP="/usr/bin/grep -F"

# A BSD- or MS-compatible name lister.
NM="/usr/bin/nm -p"

# Whether we need soft or hard links.
LN_S="ln -s"

# What is the maximum length of a command?
max_cmd_len=196608

# Object file suffix (normally "o").
objext=o

# Executable file suffix (normally "").
exeext=

# whether the shell understands "unset".
lt_unset=unset

# turn spaces into newlines.
SP2NL="tr \\040 \\012"

# turn newlines into spaces.
NL2SP="tr \\015\\012 \\040\\040"

# How to create reloadable object files.
reload_flag=" -r"
reload_cmds="\$LTCC \$LTCFLAGS -nostdlib \${wl}-r -o \$output\$reload_objs"

# Method to check whether dependent libraries are shared objects.
deplibs_check_method="pass_all"

# Command to use when deplibs_check_method == "file_magic".
file_magic_cmd="\$MAGIC_CMD"

# The archiver.
AR="ar"
AR_FLAGS="cru"

# A symbol stripping program.
STRIP="strip"

# Commands used to install an old-style archive.
RANLIB="ranlib"
old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib"
old_postuninstall_cmds=""

# A C compiler.
LTCC="gcc"

# LTCC compiler flags.
LTCFLAGS="-no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2"

# Take the output of nm and produce a listing of raw symbols and C names.
global_symbol_pipe="sed -n -e 's/^.*[	 ]\\([BCDEGRST][BCDEGRST]*\\)[	 ][	 ]*_\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 _\\2 \\2/p'"

# Transform the output of nm in a proper C declaration.
global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[BCDEGRST]* .* \\(.*\\)\$/extern char \\1;/p'"

# Transform the output of nm in a C name address pair.
global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/  {\\\"\\1\\\", (void *) 0},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\([^ ]*\\)\$/  {\"\\2\", (void *) \\&\\2},/p'"

# Transform the output of nm in a C name address pair when lib prefix is needed.
global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/  {\\\"\\1\\\", (void *) 0},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/  {\"\\2\", (void *) \\&\\2},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\([^ ]*\\)\$/  {\"lib\\2\", (void *) \\&\\2},/p'"

# The name of the directory that contains temporary libtool files.
objdir=.libs

# Shell to use when invoking shell scripts.
SHELL="/bin/sh"

# An echo program that does not interpret backslashes.
ECHO="/bin/echo"

# Used to examine libraries when file_magic_cmd begins with "file".
MAGIC_CMD=file

# Must we lock files when doing compilation?
need_locks="no"

# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
DSYMUTIL="dsymutil"

# Tool to change global to local symbols on Mac OS X.
NMEDIT="nmedit"

# Tool to manipulate fat objects and archives on Mac OS X.
LIPO="lipo"

# ldd/readelf like tool for Mach-O binaries on Mac OS X.
OTOOL="otool"

# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
OTOOL64=":"

# Old archive suffix (normally "a").
libext=a

# Shared library suffix (normally ".so").
shrext_cmds="\`test .\$module = .yes && echo .so || echo .dylib\`"

# The commands to extract the exported symbol list from a shared archive.
extract_expsyms_cmds=""

# Variables whose values should be saved in libtool wrapper scripts and
# restored at link time.
variables_saved_for_relink="PATH DYLD_LIBRARY_PATH  GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"

# Do we need the "lib" prefix for modules?
need_lib_prefix=no

# Do we need a version for libraries?
need_version=no

# Library versioning type.
version_type=darwin

# Shared library runtime path variable.
runpath_var=

# Shared library path variable.
shlibpath_var=DYLD_LIBRARY_PATH

# Is shlibpath searched before the hard-coded library search path?
shlibpath_overrides_runpath=yes

# Format of library name prefix.
libname_spec="lib\$name"

# List of archive names.  First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME
library_names_spec="\${libname}\${release}\${major}\$shared_ext \${libname}\$shared_ext"

# The coded name of the library, if different from the real name.
soname_spec="\${libname}\${release}\${major}\$shared_ext"

# Command to use after installation of a shared archive.
postinstall_cmds=""

# Command to use after uninstallation of a shared archive.
postuninstall_cmds=""

# Commands used to finish a libtool library installation in a directory.
finish_cmds=""

# As "finish_cmds", except a single script fragment to be evaled but
# not shown.
finish_eval=""

# Whether we should hardcode library paths into libraries.
hardcode_into_libs=no

# Compile-time system search path for libraries.
sys_lib_search_path_spec="/usr/lib/powerpc-apple-darwin9/4.0.1 /usr/lib /usr/lib/gcc/powerpc-apple-darwin9/4.0.1 /usr/local/lib"

# Run-time system search path for libraries.
sys_lib_dlsearch_path_spec="/usr/local/lib /lib /usr/lib"

# Whether dlopen is supported.
dlopen_support=unknown

# Whether dlopen of programs is supported.
dlopen_self=unknown

# Whether dlopen of statically linked programs is supported.
dlopen_self_static=unknown

# Commands to strip libraries.
old_striplib="strip -S"
striplib="strip -x"


# The linker used to build libraries.
LD="/usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld"

# Commands used to build an old-style archive.
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib"

# A language specific compiler.
CC="gcc"

# Is the compiler the GNU compiler?
with_gcc=yes

# Compiler flag to turn off builtin functions.
no_builtin_flag=" -fno-builtin"

# How to pass a linker flag through the compiler.
wl="-Wl,"

# Additional compiler flags for building library objects.
pic_flag=" -fno-common -DPIC"

# Compiler flag to prevent dynamic linking.
link_static_flag=""

# Does compiler simultaneously support -c and -o options?
compiler_c_o="yes"

# Whether or not to add -lc for building shared libraries.
build_libtool_need_lc=no

# Whether or not to disallow shared libs when runtime libs are static.
allow_libtool_libs_with_static_runtimes=no

# Compiler flag to allow reflexive dlopens.
export_dynamic_flag_spec=""

# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec=""

# Whether the compiler copes with passing no objects directly.
compiler_needs_object="no"

# Create an old-style archive from a shared archive.
old_archive_from_new_cmds=""

# Create a temporary old-style archive to link instead of a shared archive.
old_archive_from_expsyms_cmds=""

# Commands used to build a shared archive.
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module~\$DSYMUTIL \$lib || :"
archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring \$single_module \${wl}-exported_symbols_list,\$output_objdir/\${libname}-symbols.expsym~\$DSYMUTIL \$lib || :"

# Commands used to build a loadable module if different from building
# a shared archive.
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags~\$DSYMUTIL \$lib || :"
module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags \${wl}-exported_symbols_list,\$output_objdir/\${libname}-symbols.expsym~\$DSYMUTIL \$lib || :"

# Whether we are building with GNU ld or not.
with_gnu_ld="no"

# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag="\${wl}-undefined \${wl}dynamic_lookup"

# Flag that enforces no undefined symbols.
no_undefined_flag=""

# Flag to hardcode $libdir into a binary during linking.
# This must work even if $libdir does not exist
hardcode_libdir_flag_spec=""

# If ld is used when linking, flag to hardcode $libdir into a binary
# during linking.  This must work even if $libdir does not exist.
hardcode_libdir_flag_spec_ld=""

# Whether we need a single "-rpath" flag with a separated argument.
hardcode_libdir_separator=""

# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
# DIR into the resulting binary.
hardcode_direct=no

# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
# DIR into the resulting binary and the resulting library dependency is
# "absolute",i.e impossible to change by setting ${shlibpath_var} if the
# library is relocated.
hardcode_direct_absolute=no

# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
# into the resulting binary.
hardcode_minus_L=no

# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
# into the resulting binary.
hardcode_shlibpath_var=unsupported

# Set to "yes" if building a shared library automatically hardcodes DIR
# into the library and all subsequent libraries and executables linked
# against it.
hardcode_automatic=yes

# Set to yes if linker adds runtime paths of dependent libraries
# to runtime path list.
inherit_rpath=no

# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=yes

# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path=""

# Set to "yes" if exported symbols are required.
always_export_symbols=no

# The commands to list exported symbols.
export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols"

# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*"

# Symbols that must always be exported.
include_expsyms=""

# Commands necessary for linking programs (against libraries) with templates.
prelink_cmds=""

# Specify filename containing input files.
file_list_spec=""

# How to hardcode a shared library path into an executable.
hardcode_action=immediate

# ### END LIBTOOL CONFIG

# Generated from ltmain.m4sh.

# ltmain.sh (GNU libtool) 2.2.6b
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996

# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions.  There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# GNU Libtool is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
# or obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

# Usage: $progname [OPTION]... [MODE-ARG]...
#
# Provide generalized library-building support services.
#
#     --config             show all configuration variables
#     --debug              enable verbose shell tracing
# -n, --dry-run            display commands without modifying any files
#     --features           display basic configuration information and exit
#     --mode=MODE          use operation mode MODE
#     --preserve-dup-deps  don't remove duplicate dependency libraries
#     --quiet, --silent    don't print informational messages
#     --tag=TAG            use configuration variables from tag TAG
# -v, --verbose            print informational messages (default)
#     --version            print version information
# -h, --help               print short or long help message
#
# MODE must be one of the following:
#
#       clean              remove files from the build directory
#       compile            compile a source file into a libtool object
#       execute            automatically set library path, then run a program
#       finish             complete the installation of libtool libraries
#       install            install libraries or executables
#       link               create a library or an executable
#       uninstall          remove libraries from an installed directory
#
# MODE-ARGS vary depending on the MODE.
# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
#
# When reporting a bug, please describe a test case to reproduce it and
# include the following information:
#
#       host-triplet:	$host
#       shell:		$SHELL
#       compiler:		$LTCC
#       compiler flags:		$LTCFLAGS
#       linker:		$LD (gnu? $with_gnu_ld)
#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1
#       automake:		$automake_version
#       autoconf:		$autoconf_version
#
# Report bugs to <bug-libtool@gnu.org>.

PROGRAM=ltmain.sh
PACKAGE=libtool
VERSION="2.2.6b Debian-2.2.6b-2ubuntu1"
TIMESTAMP=""
package_revision=1.3017

# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  emulate sh
  NULLCMD=:
  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh

# NLS nuisances: We save the old values to restore during execute mode.
# Only set LANG and LC_ALL to C if already set.
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
lt_user_locale=
lt_safe_locale=
for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
do
  eval "if test \"\${$lt_var+set}\" = set; then
          save_$lt_var=\$$lt_var
          $lt_var=C
	  export $lt_var
	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
	fi"
done

$lt_unset CDPATH





: ${CP="cp -f"}
: ${ECHO="echo"}
: ${EGREP="/bin/grep -E"}
: ${FGREP="/bin/grep -F"}
: ${GREP="/bin/grep"}
: ${LN_S="ln -s"}
: ${MAKE="make"}
: ${MKDIR="mkdir"}
: ${MV="mv -f"}
: ${RM="rm -f"}
: ${SED="/bin/sed"}
: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
: ${Xsed="$SED -e 1s/^X//"}

# Global variables:
EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.

exit_status=$EXIT_SUCCESS

# Make sure IFS has a sensible default
lt_nl='
'
IFS=" 	$lt_nl"

dirname="s,/[^/]*$,,"
basename="s,^.*/,,"

# func_dirname_and_basename file append nondir_replacement
# perform func_basename and func_dirname in a single function
# call:
#   dirname:  Compute the dirname of FILE.  If nonempty,
#             add APPEND to the result, otherwise set result
#             to NONDIR_REPLACEMENT.
#             value returned in "$func_dirname_result"
#   basename: Compute filename of FILE.
#             value retuned in "$func_basename_result"
# Implementation must be kept synchronized with func_dirname
# and func_basename. For efficiency, we do not delegate to
# those functions but instead duplicate the functionality here.
func_dirname_and_basename ()
{
  # Extract subdirectory from the argument.
  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
  if test "X$func_dirname_result" = "X${1}"; then
    func_dirname_result="${3}"
  else
    func_dirname_result="$func_dirname_result${2}"
  fi
  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
}

# Generated shell functions inserted here.

# func_dirname file append nondir_replacement
# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
# otherwise set result to NONDIR_REPLACEMENT.
func_dirname ()
{
  case ${1} in
    */*) func_dirname_result="${1%/*}${2}" ;;
    *  ) func_dirname_result="${3}" ;;
  esac
}

# func_basename file
func_basename ()
{
  func_basename_result="${1##*/}"
}

# func_dirname_and_basename file append nondir_replacement
# perform func_basename and func_dirname in a single function
# call:
#   dirname:  Compute the dirname of FILE.  If nonempty,
#             add APPEND to the result, otherwise set result
#             to NONDIR_REPLACEMENT.
#             value returned in "$func_dirname_result"
#   basename: Compute filename of FILE.
#             value retuned in "$func_basename_result"
# Implementation must be kept synchronized with func_dirname
# and func_basename. For efficiency, we do not delegate to
# those functions but instead duplicate the functionality here.
func_dirname_and_basename ()
{
  case ${1} in
    */*) func_dirname_result="${1%/*}${2}" ;;
    *  ) func_dirname_result="${3}" ;;
  esac
  func_basename_result="${1##*/}"
}

# func_stripname prefix suffix name
# strip PREFIX and SUFFIX off of NAME.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
func_stripname ()
{
  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
  # positional parameters, so assign one to ordinary parameter first.
  func_stripname_result=${3}
  func_stripname_result=${func_stripname_result#"${1}"}
  func_stripname_result=${func_stripname_result%"${2}"}
}

# func_opt_split
func_opt_split ()
{
  func_opt_split_opt=${1%%=*}
  func_opt_split_arg=${1#*=}
}

# func_lo2o object
func_lo2o ()
{
  case ${1} in
    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
    *)    func_lo2o_result=${1} ;;
  esac
}

# func_xform libobj-or-source
func_xform ()
{
  func_xform_result=${1%.*}.lo
}

# func_arith arithmetic-term...
func_arith ()
{
  func_arith_result=$(( $* ))
}

# func_len string
# STRING may not start with a hyphen.
func_len ()
{
  func_len_result=${#1}
}


# func_append var value
# Append VALUE to the end of shell variable VAR.
func_append ()
{
  eval "$1+=\$2"
}
# Generated shell functions inserted here.

# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
# is ksh but when the shell is invoked as "sh" and the current value of
# the _XPG environment variable is not equal to 1 (one), the special
# positional parameter $0, within a function call, is the name of the
# function.
progpath="$0"

# The name of this program:
# In the unlikely event $progname began with a '-', it would play havoc with
# func_echo (imagine progname=-n), so we prepend ./ in that case:
func_dirname_and_basename "$progpath"
progname=$func_basename_result
case $progname in
  -*) progname=./$progname ;;
esac

# Make sure we have an absolute path for reexecution:
case $progpath in
  [\\/]*|[A-Za-z]:\\*) ;;
  *[\\/]*)
     progdir=$func_dirname_result
     progdir=`cd "$progdir" && pwd`
     progpath="$progdir/$progname"
     ;;
  *)
     save_IFS="$IFS"
     IFS=:
     for progdir in $PATH; do
       IFS="$save_IFS"
       test -x "$progdir/$progname" && break
     done
     IFS="$save_IFS"
     test -n "$progdir" || progdir=`pwd`
     progpath="$progdir/$progname"
     ;;
esac

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
Xsed="${SED}"' -e 1s/^X//'
sed_quote_subst='s/\([`"$\\]\)/\\\1/g'

# Same as above, but do not quote variable references.
double_quote_subst='s/\(["`\\]\)/\\\1/g'

# Re-`\' parameter expansions in output of double_quote_subst that were
# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
# in input to double_quote_subst, that '$' was protected from expansion.
# Since each input `\' is now two `\'s, look for any number of runs of
# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
bs='\\'
bs2='\\\\'
bs4='\\\\\\\\'
dollar='\$'
sed_double_backslash="\
  s/$bs4/&\\
/g
  s/^$bs2$dollar/$bs&/
  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
  s/\n//g"

# Standard options:
opt_dry_run=false
opt_help=false
opt_quiet=false
opt_verbose=false
opt_warning=:

# func_echo arg...
# Echo program name prefixed message, along with the current mode
# name if it has been set yet.
func_echo ()
{
    $ECHO "$progname${mode+: }$mode: $*"
}

# func_verbose arg...
# Echo program name prefixed message in verbose mode only.
func_verbose ()
{
    $opt_verbose && func_echo ${1+"$@"}

    # A bug in bash halts the script if the last line of a function
    # fails when set -e is in force, so we need another command to
    # work around that:
    :
}

# func_error arg...
# Echo program name prefixed message to standard error.
func_error ()
{
    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
}

# func_warning arg...
# Echo program name prefixed warning message to standard error.
func_warning ()
{
    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2

    # bash bug again:
    :
}

# func_fatal_error arg...
# Echo program name prefixed message to standard error, and exit.
func_fatal_error ()
{
    func_error ${1+"$@"}
    exit $EXIT_FAILURE
}

# func_fatal_help arg...
# Echo program name prefixed message to standard error, followed by
# a help hint, and exit.
func_fatal_help ()
{
    func_error ${1+"$@"}
    func_fatal_error "$help"
}
help="Try \`$progname --help' for more information."  ## default


# func_grep expression filename
# Check whether EXPRESSION matches any line of FILENAME, without output.
func_grep ()
{
    $GREP "$1" "$2" >/dev/null 2>&1
}


# func_mkdir_p directory-path
# Make sure the entire path to DIRECTORY-PATH is available.
func_mkdir_p ()
{
    my_directory_path="$1"
    my_dir_list=

    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then

      # Protect directory names starting with `-'
      case $my_directory_path in
        -*) my_directory_path="./$my_directory_path" ;;
      esac

      # While some portion of DIR does not yet exist...
      while test ! -d "$my_directory_path"; do
        # ...make a list in topmost first order.  Use a colon delimited
	# list incase some portion of path contains whitespace.
        my_dir_list="$my_directory_path:$my_dir_list"

        # If the last portion added has no slash in it, the list is done
        case $my_directory_path in */*) ;; *) break ;; esac

        # ...otherwise throw away the child directory and loop
        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
      done
      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`

      save_mkdir_p_IFS="$IFS"; IFS=':'
      for my_dir in $my_dir_list; do
	IFS="$save_mkdir_p_IFS"
        # mkdir can fail with a `File exist' error if two processes
        # try to create one of the directories concurrently.  Don't
        # stop in that case!
        $MKDIR "$my_dir" 2>/dev/null || :
      done
      IFS="$save_mkdir_p_IFS"

      # Bail out if we (or some other process) failed to create a directory.
      test -d "$my_directory_path" || \
        func_fatal_error "Failed to create \`$1'"
    fi
}


# func_mktempdir [string]
# Make a temporary directory that won't clash with other running
# libtool processes, and avoids race conditions if possible.  If
# given, STRING is the basename for that directory.
func_mktempdir ()
{
    my_template="${TMPDIR-/tmp}/${1-$progname}"

    if test "$opt_dry_run" = ":"; then
      # Return a directory name, but don't create it in dry-run mode
      my_tmpdir="${my_template}-$$"
    else

      # If mktemp works, use that first and foremost
      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`

      if test ! -d "$my_tmpdir"; then
        # Failing that, at least try and use $RANDOM to avoid a race
        my_tmpdir="${my_template}-${RANDOM-0}$$"

        save_mktempdir_umask=`umask`
        umask 0077
        $MKDIR "$my_tmpdir"
        umask $save_mktempdir_umask
      fi

      # If we're not in dry-run mode, bomb out on failure
      test -d "$my_tmpdir" || \
        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
    fi

    $ECHO "X$my_tmpdir" | $Xsed
}


# func_quote_for_eval arg
# Aesthetically quote ARG to be evaled later.
# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
# is double-quoted, suitable for a subsequent eval, whereas
# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
# which are still active within double quotes backslashified.
func_quote_for_eval ()
{
    case $1 in
      *[\\\`\"\$]*)
	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
      *)
        func_quote_for_eval_unquoted_result="$1" ;;
    esac

    case $func_quote_for_eval_unquoted_result in
      # Double-quote args containing shell metacharacters to delay
      # word splitting, command substitution and and variable
      # expansion for a subsequent eval.
      # Many Bourne shells cannot handle close brackets correctly
      # in scan sets, so we specify it separately.
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
        ;;
      *)
        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
    esac
}


# func_quote_for_expand arg
# Aesthetically quote ARG to be evaled later; same as above,
# but do not quote variable references.
func_quote_for_expand ()
{
    case $1 in
      *[\\\`\"]*)
	my_arg=`$ECHO "X$1" | $Xsed \
	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
      *)
        my_arg="$1" ;;
    esac

    case $my_arg in
      # Double-quote args containing shell metacharacters to delay
      # word splitting and command substitution for a subsequent eval.
      # Many Bourne shells cannot handle close brackets correctly
      # in scan sets, so we specify it separately.
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
        my_arg="\"$my_arg\""
        ;;
    esac

    func_quote_for_expand_result="$my_arg"
}


# func_show_eval cmd [fail_exp]
# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
# is given, then evaluate it.
func_show_eval ()
{
    my_cmd="$1"
    my_fail_exp="${2-:}"

    ${opt_silent-false} || {
      func_quote_for_expand "$my_cmd"
      eval "func_echo $func_quote_for_expand_result"
    }

    if ${opt_dry_run-false}; then :; else
      eval "$my_cmd"
      my_status=$?
      if test "$my_status" -eq 0; then :; else
	eval "(exit $my_status); $my_fail_exp"
      fi
    fi
}


# func_show_eval_locale cmd [fail_exp]
# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
# is given, then evaluate it.  Use the saved locale for evaluation.
func_show_eval_locale ()
{
    my_cmd="$1"
    my_fail_exp="${2-:}"

    ${opt_silent-false} || {
      func_quote_for_expand "$my_cmd"
      eval "func_echo $func_quote_for_expand_result"
    }

    if ${opt_dry_run-false}; then :; else
      eval "$lt_user_locale
	    $my_cmd"
      my_status=$?
      eval "$lt_safe_locale"
      if test "$my_status" -eq 0; then :; else
	eval "(exit $my_status); $my_fail_exp"
      fi
    fi
}





# func_version
# Echo version message to standard output and exit.
func_version ()
{
    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
        s/^# //
	s/^# *$//
        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
        p
     }' < "$progpath"
     exit $?
}

# func_usage
# Echo short help message to standard output and exit.
func_usage ()
{
    $SED -n '/^# Usage:/,/# -h/ {
        s/^# //
	s/^# *$//
	s/\$progname/'$progname'/
	p
    }' < "$progpath"
    $ECHO
    $ECHO "run \`$progname --help | more' for full usage"
    exit $?
}

# func_help
# Echo long help message to standard output and exit.
func_help ()
{
    $SED -n '/^# Usage:/,/# Report bugs to/ {
        s/^# //
	s/^# *$//
	s*\$progname*'$progname'*
	s*\$host*'"$host"'*
	s*\$SHELL*'"$SHELL"'*
	s*\$LTCC*'"$LTCC"'*
	s*\$LTCFLAGS*'"$LTCFLAGS"'*
	s*\$LD*'"$LD"'*
	s/\$with_gnu_ld/'"$with_gnu_ld"'/
	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
	p
     }' < "$progpath"
    exit $?
}

# func_missing_arg argname
# Echo program name prefixed message to standard error and set global
# exit_cmd.
func_missing_arg ()
{
    func_error "missing argument for $1"
    exit_cmd=exit
}

exit_cmd=:





# Check that we have a working $ECHO.
if test "X$1" = X--no-reexec; then
  # Discard the --no-reexec flag, and continue.
  shift
elif test "X$1" = X--fallback-echo; then
  # Avoid inline document here, it may be left over
  :
elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
  # Yippee, $ECHO works!
  :
else
  # Restart under the correct shell, and then maybe $ECHO will work.
  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
fi

if test "X$1" = X--fallback-echo; then
  # used as fallback echo
  shift
  cat <<EOF
$*
EOF
  exit $EXIT_SUCCESS
fi

magic="%%%MAGIC variable%%%"
magic_exe="%%%MAGIC EXE variable%%%"

# Global variables.
# $mode is unset
nonopt=
execute_dlfiles=
preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
extracted_archives=
extracted_serial=0

opt_dry_run=false
opt_duplicate_deps=false
opt_silent=false
opt_debug=:

# If this variable is set in any of the actions, the command in it
# will be execed at the end.  This prevents here-documents from being
# left over by shells.
exec_cmd=

# func_fatal_configuration arg...
# Echo program name prefixed message to standard error, followed by
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
    func_error ${1+"$@"}
    func_error "See the $PACKAGE documentation for more information."
    func_fatal_error "Fatal configuration error."
}


# func_config
# Display the configuration for all the tags in this script.
func_config ()
{
    re_begincf='^# ### BEGIN LIBTOOL'
    re_endcf='^# ### END LIBTOOL'

    # Default configuration.
    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"

    # Now print the configurations for the tags.
    for tagname in $taglist; do
      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
    done

    exit $?
}

# func_features
# Display the features supported by this script.
func_features ()
{
    $ECHO "host: $host"
    if test "$build_libtool_libs" = yes; then
      $ECHO "enable shared libraries"
    else
      $ECHO "disable shared libraries"
    fi
    if test "$build_old_libs" = yes; then
      $ECHO "enable static libraries"
    else
      $ECHO "disable static libraries"
    fi

    exit $?
}

# func_enable_tag tagname
# Verify that TAGNAME is valid, and either flag an error and exit, or
# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
# variable here.
func_enable_tag ()
{
  # Global variable:
  tagname="$1"

  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
  sed_extractcf="/$re_begincf/,/$re_endcf/p"

  # Validate tagname.
  case $tagname in
    *[!-_A-Za-z0-9,/]*)
      func_fatal_error "invalid tag name: $tagname"
      ;;
  esac

  # Don't test for the "default" C tag, as we know it's
  # there but not specially marked.
  case $tagname in
    CC) ;;
    *)
      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
	taglist="$taglist $tagname"

	# Evaluate the configuration.  Be careful to quote the path
	# and the sed script, to avoid splitting on whitespace, but
	# also don't use non-portable quotes within backquotes within
	# quotes we have to do it in 2 steps:
	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
	eval "$extractedcf"
      else
	func_error "ignoring unknown tag $tagname"
      fi
      ;;
  esac
}

# Parse options once, thoroughly.  This comes as soon as possible in
# the script to make things like `libtool --version' happen quickly.
{

  # Shorthand for --mode=foo, only valid as the first argument
  case $1 in
  clean|clea|cle|cl)
    shift; set dummy --mode clean ${1+"$@"}; shift
    ;;
  compile|compil|compi|comp|com|co|c)
    shift; set dummy --mode compile ${1+"$@"}; shift
    ;;
  execute|execut|execu|exec|exe|ex|e)
    shift; set dummy --mode execute ${1+"$@"}; shift
    ;;
  finish|finis|fini|fin|fi|f)
    shift; set dummy --mode finish ${1+"$@"}; shift
    ;;
  install|instal|insta|inst|ins|in|i)
    shift; set dummy --mode install ${1+"$@"}; shift
    ;;
  link|lin|li|l)
    shift; set dummy --mode link ${1+"$@"}; shift
    ;;
  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
    shift; set dummy --mode uninstall ${1+"$@"}; shift
    ;;
  esac

  # Parse non-mode specific arguments:
  while test "$#" -gt 0; do
    opt="$1"
    shift

    case $opt in
      --config)		func_config					;;

      --debug)		preserve_args="$preserve_args $opt"
			func_echo "enabling shell trace mode"
			opt_debug='set -x'
			$opt_debug
			;;

      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
			execute_dlfiles="$execute_dlfiles $1"
			shift
			;;

      --dry-run | -n)	opt_dry_run=:					;;
      --features)       func_features					;;
      --finish)		mode="finish"					;;

      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
			case $1 in
			  # Valid mode arguments:
			  clean)	;;
			  compile)	;;
			  execute)	;;
			  finish)	;;
			  install)	;;
			  link)		;;
			  relink)	;;
			  uninstall)	;;

			  # Catch anything else as an error
			  *) func_error "invalid argument for $opt"
			     exit_cmd=exit
			     break
			     ;;
		        esac

			mode="$1"
			shift
			;;

      --preserve-dup-deps)
			opt_duplicate_deps=:				;;

      --quiet|--silent)	preserve_args="$preserve_args $opt"
			opt_silent=:
			;;

      --verbose| -v)	preserve_args="$preserve_args $opt"
			opt_silent=false
			;;

      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
			preserve_args="$preserve_args $opt $1"
			func_enable_tag "$1"	# tagname is set here
			shift
			;;

      # Separate optargs to long options:
      -dlopen=*|--mode=*|--tag=*)
			func_opt_split "$opt"
			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
			shift
			;;

      -\?|-h)		func_usage					;;
      --help)		opt_help=:					;;
      --version)	func_version					;;

      -*)		func_fatal_help "unrecognized option \`$opt'"	;;

      *)		nonopt="$opt"
			break
			;;
    esac
  done


  case $host in
    *cygwin* | *mingw* | *pw32* | *cegcc*)
      # don't eliminate duplications in $postdeps and $predeps
      opt_duplicate_compiler_generated_deps=:
      ;;
    *)
      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
      ;;
  esac

  # Having warned about all mis-specified options, bail out if
  # anything was wrong.
  $exit_cmd $EXIT_FAILURE
}

# func_check_version_match
# Ensure that we are using m4 macros, and libtool script from the same
# release of libtool.
func_check_version_match ()
{
  if test "$package_revision" != "$macro_revision"; then
    if test "$VERSION" != "$macro_version"; then
      if test -z "$macro_version"; then
        cat >&2 <<_LT_EOF
$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
$progname: definition of this LT_INIT comes from an older release.
$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
$progname: and run autoconf again.
_LT_EOF
      else
        cat >&2 <<_LT_EOF
$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
$progname: and run autoconf again.
_LT_EOF
      fi
    else
      cat >&2 <<_LT_EOF
$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
$progname: but the definition of this LT_INIT comes from revision $macro_revision.
$progname: You should recreate aclocal.m4 with macros from revision $package_revision
$progname: of $PACKAGE $VERSION and run autoconf again.
_LT_EOF
    fi

    exit $EXIT_MISMATCH
  fi
}


## ----------- ##
##    Main.    ##
## ----------- ##

$opt_help || {
  # Sanity checks first:
  func_check_version_match

  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
    func_fatal_configuration "not configured to build any kind of library"
  fi

  test -z "$mode" && func_fatal_error "error: you must specify a MODE."


  # Darwin sucks
  eval std_shrext=\"$shrext_cmds\"


  # Only execute mode is allowed to have -dlopen flags.
  if test -n "$execute_dlfiles" && test "$mode" != execute; then
    func_error "unrecognized option \`-dlopen'"
    $ECHO "$help" 1>&2
    exit $EXIT_FAILURE
  fi

  # Change the help message to a mode-specific one.
  generic_help="$help"
  help="Try \`$progname --help --mode=$mode' for more information."
}


# func_lalib_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_lalib_p ()
{
    test -f "$1" &&
      $SED -e 4q "$1" 2>/dev/null \
        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
}

# func_lalib_unsafe_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
# This function implements the same check as func_lalib_p without
# resorting to external programs.  To this end, it redirects stdin and
# closes it afterwards, without saving the original file descriptor.
# As a safety measure, use it only where a negative result would be
# fatal anyway.  Works if `file' does not exist.
func_lalib_unsafe_p ()
{
    lalib_p=no
    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
	for lalib_p_l in 1 2 3 4
	do
	    read lalib_p_line
	    case "$lalib_p_line" in
		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
	    esac
	done
	exec 0<&5 5<&-
    fi
    test "$lalib_p" = yes
}

# func_ltwrapper_script_p file
# True iff FILE is a libtool wrapper script
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_script_p ()
{
    func_lalib_p "$1"
}

# func_ltwrapper_executable_p file
# True iff FILE is a libtool wrapper executable
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_executable_p ()
{
    func_ltwrapper_exec_suffix=
    case $1 in
    *.exe) ;;
    *) func_ltwrapper_exec_suffix=.exe ;;
    esac
    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
}

# func_ltwrapper_scriptname file
# Assumes file is an ltwrapper_executable
# uses $file to determine the appropriate filename for a
# temporary ltwrapper_script.
func_ltwrapper_scriptname ()
{
    func_ltwrapper_scriptname_result=""
    if func_ltwrapper_executable_p "$1"; then
	func_dirname_and_basename "$1" "" "."
	func_stripname '' '.exe' "$func_basename_result"
	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
    fi
}

# func_ltwrapper_p file
# True iff FILE is a libtool wrapper script or wrapper executable
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_p ()
{
    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
}


# func_execute_cmds commands fail_cmd
# Execute tilde-delimited COMMANDS.
# If FAIL_CMD is given, eval that upon failure.
# FAIL_CMD may read-access the current command in variable CMD!
func_execute_cmds ()
{
    $opt_debug
    save_ifs=$IFS; IFS='~'
    for cmd in $1; do
      IFS=$save_ifs
      eval cmd=\"$cmd\"
      func_show_eval "$cmd" "${2-:}"
    done
    IFS=$save_ifs
}


# func_source file
# Source FILE, adding directory component if necessary.
# Note that it is not necessary on cygwin/mingw to append a dot to
# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
# behavior happens only for exec(3), not for open(2)!  Also, sourcing
# `FILE.' does not work on cygwin managed mounts.
func_source ()
{
    $opt_debug
    case $1 in
    */* | *\\*)	. "$1" ;;
    *)		. "./$1" ;;
    esac
}


# func_infer_tag arg
# Infer tagged configuration to use if any are available and
# if one wasn't chosen via the "--tag" command line option.
# Only attempt this if the compiler in the base compile
# command doesn't match the default compiler.
# arg is usually of the form 'gcc ...'
func_infer_tag ()
{
    $opt_debug
    if test -n "$available_tags" && test -z "$tagname"; then
      CC_quoted=
      for arg in $CC; do
        func_quote_for_eval "$arg"
	CC_quoted="$CC_quoted $func_quote_for_eval_result"
      done
      case $@ in
      # Blanks in the command may have been stripped by the calling shell,
      # but not from the CC environment variable when configure was run.
      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
      # Blanks at the start of $base_compile will cause this to fail
      # if we don't check for them as well.
      *)
	for z in $available_tags; do
	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
	    # Evaluate the configuration.
	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
	    CC_quoted=
	    for arg in $CC; do
	      # Double-quote args containing other shell metacharacters.
	      func_quote_for_eval "$arg"
	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
	    done
	    case "$@ " in
	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
	      # The compiler in the base compile command matches
	      # the one in the tagged configuration.
	      # Assume this is the tagged configuration we want.
	      tagname=$z
	      break
	      ;;
	    esac
	  fi
	done
	# If $tagname still isn't set, then no tagged configuration
	# was found and let the user know that the "--tag" command
	# line option must be used.
	if test -z "$tagname"; then
	  func_echo "unable to infer tagged configuration"
	  func_fatal_error "specify a tag with \`--tag'"
#	else
#	  func_verbose "using $tagname tagged configuration"
	fi
	;;
      esac
    fi
}



# func_write_libtool_object output_name pic_name nonpic_name
# Create a libtool object file (analogous to a ".la" file),
# but don't create it if we're doing a dry run.
func_write_libtool_object ()
{
    write_libobj=${1}
    if test "$build_libtool_libs" = yes; then
      write_lobj=\'${2}\'
    else
      write_lobj=none
    fi

    if test "$build_old_libs" = yes; then
      write_oldobj=\'${3}\'
    else
      write_oldobj=none
    fi

    $opt_dry_run || {
      cat >${write_libobj}T <<EOF
# $write_libobj - a libtool object file
# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# Name of the PIC object.
pic_object=$write_lobj

# Name of the non-PIC object
non_pic_object=$write_oldobj

EOF
      $MV "${write_libobj}T" "${write_libobj}"
    }
}

# func_mode_compile arg...
func_mode_compile ()
{
    $opt_debug
    # Get the compilation command and the source file.
    base_compile=
    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
    suppress_opt=yes
    suppress_output=
    arg_mode=normal
    libobj=
    later=
    pie_flag=

    for arg
    do
      case $arg_mode in
      arg  )
	# do not "continue".  Instead, add this to base_compile
	lastarg="$arg"
	arg_mode=normal
	;;

      target )
	libobj="$arg"
	arg_mode=normal
	continue
	;;

      normal )
	# Accept any command-line options.
	case $arg in
	-o)
	  test -n "$libobj" && \
	    func_fatal_error "you cannot specify \`-o' more than once"
	  arg_mode=target
	  continue
	  ;;

	-pie | -fpie | -fPIE)
          pie_flag="$pie_flag $arg"
	  continue
	  ;;

	-shared | -static | -prefer-pic | -prefer-non-pic)
	  later="$later $arg"
	  continue
	  ;;

	-no-suppress)
	  suppress_opt=no
	  continue
	  ;;

	-Xcompiler)
	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
	  continue      #  The current "srcfile" will either be retained or
	  ;;            #  replaced later.  I would guess that would be a bug.

	-Wc,*)
	  func_stripname '-Wc,' '' "$arg"
	  args=$func_stripname_result
	  lastarg=
	  save_ifs="$IFS"; IFS=','
	  for arg in $args; do
	    IFS="$save_ifs"
	    func_quote_for_eval "$arg"
	    lastarg="$lastarg $func_quote_for_eval_result"
	  done
	  IFS="$save_ifs"
	  func_stripname ' ' '' "$lastarg"
	  lastarg=$func_stripname_result

	  # Add the arguments to base_compile.
	  base_compile="$base_compile $lastarg"
	  continue
	  ;;

	*)
	  # Accept the current argument as the source file.
	  # The previous "srcfile" becomes the current argument.
	  #
	  lastarg="$srcfile"
	  srcfile="$arg"
	  ;;
	esac  #  case $arg
	;;
      esac    #  case $arg_mode

      # Aesthetically quote the previous argument.
      func_quote_for_eval "$lastarg"
      base_compile="$base_compile $func_quote_for_eval_result"
    done # for arg

    case $arg_mode in
    arg)
      func_fatal_error "you must specify an argument for -Xcompile"
      ;;
    target)
      func_fatal_error "you must specify a target with \`-o'"
      ;;
    *)
      # Get the name of the library object.
      test -z "$libobj" && {
	func_basename "$srcfile"
	libobj="$func_basename_result"
      }
      ;;
    esac

    # Recognize several different file suffixes.
    # If the user specifies -o file.o, it is replaced with file.lo
    case $libobj in
    *.[cCFSifmso] | \
    *.ada | *.adb | *.ads | *.asm | \
    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
      func_xform "$libobj"
      libobj=$func_xform_result
      ;;
    esac

    case $libobj in
    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
    *)
      func_fatal_error "cannot determine name of library object from \`$libobj'"
      ;;
    esac

    func_infer_tag $base_compile

    for arg in $later; do
      case $arg in
      -shared)
	test "$build_libtool_libs" != yes && \
	  func_fatal_configuration "can not build a shared library"
	build_old_libs=no
	continue
	;;

      -static)
	build_libtool_libs=no
	build_old_libs=yes
	continue
	;;

      -prefer-pic)
	pic_mode=yes
	continue
	;;

      -prefer-non-pic)
	pic_mode=no
	continue
	;;
      esac
    done

    func_quote_for_eval "$libobj"
    test "X$libobj" != "X$func_quote_for_eval_result" \
      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
      && func_warning "libobj name \`$libobj' may not contain shell special characters."
    func_dirname_and_basename "$obj" "/" ""
    objname="$func_basename_result"
    xdir="$func_dirname_result"
    lobj=${xdir}$objdir/$objname

    test -z "$base_compile" && \
      func_fatal_help "you must specify a compilation command"

    # Delete any leftover library objects.
    if test "$build_old_libs" = yes; then
      removelist="$obj $lobj $libobj ${libobj}T"
    else
      removelist="$lobj $libobj ${libobj}T"
    fi

    # On Cygwin there's no "real" PIC flag so we must build both object types
    case $host_os in
    cygwin* | mingw* | pw32* | os2* | cegcc*)
      pic_mode=default
      ;;
    esac
    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
      # non-PIC code in shared libraries is not supported
      pic_mode=default
    fi

    # Calculate the filename of the output object if compiler does
    # not support -o with -c
    if test "$compiler_c_o" = no; then
      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
      lockfile="$output_obj.lock"
    else
      output_obj=
      need_locks=no
      lockfile=
    fi

    # Lock this critical section if it is needed
    # We use this script file to make the link, it avoids creating a new file
    if test "$need_locks" = yes; then
      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
	func_echo "Waiting for $lockfile to be removed"
	sleep 2
      done
    elif test "$need_locks" = warn; then
      if test -f "$lockfile"; then
	$ECHO "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$opt_dry_run || $RM $removelist
	exit $EXIT_FAILURE
      fi
      removelist="$removelist $output_obj"
      $ECHO "$srcfile" > "$lockfile"
    fi

    $opt_dry_run || $RM $removelist
    removelist="$removelist $lockfile"
    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15

    if test -n "$fix_srcfile_path"; then
      eval srcfile=\"$fix_srcfile_path\"
    fi
    func_quote_for_eval "$srcfile"
    qsrcfile=$func_quote_for_eval_result

    # Only build a PIC object if we are building libtool libraries.
    if test "$build_libtool_libs" = yes; then
      # Without this assignment, base_compile gets emptied.
      fbsd_hideous_sh_bug=$base_compile

      if test "$pic_mode" != no; then
	command="$base_compile $qsrcfile $pic_flag"
      else
	# Don't build PIC code
	command="$base_compile $qsrcfile"
      fi

      func_mkdir_p "$xdir$objdir"

      if test -z "$output_obj"; then
	# Place PIC objects in $objdir
	command="$command -o $lobj"
      fi

      func_show_eval_locale "$command"	\
          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'

      if test "$need_locks" = warn &&
	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
	$ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`

but it should contain:
$srcfile

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$opt_dry_run || $RM $removelist
	exit $EXIT_FAILURE
      fi

      # Just move the object if needed, then go on to compile the next one
      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
	func_show_eval '$MV "$output_obj" "$lobj"' \
	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
      fi

      # Allow error messages only from the first compilation.
      if test "$suppress_opt" = yes; then
	suppress_output=' >/dev/null 2>&1'
      fi
    fi

    # Only build a position-dependent object if we build old libraries.
    if test "$build_old_libs" = yes; then
      if test "$pic_mode" != yes; then
	# Don't build PIC code
	command="$base_compile $qsrcfile$pie_flag"
      else
	command="$base_compile $qsrcfile $pic_flag"
      fi
      if test "$compiler_c_o" = yes; then
	command="$command -o $obj"
      fi

      # Suppress compiler output if we already did a PIC compilation.
      command="$command$suppress_output"
      func_show_eval_locale "$command" \
        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'

      if test "$need_locks" = warn &&
	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
	$ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`

but it should contain:
$srcfile

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$opt_dry_run || $RM $removelist
	exit $EXIT_FAILURE
      fi

      # Just move the object if needed
      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
	func_show_eval '$MV "$output_obj" "$obj"' \
	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
      fi
    fi

    $opt_dry_run || {
      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"

      # Unlock the critical section if it was locked
      if test "$need_locks" != no; then
	removelist=$lockfile
        $RM "$lockfile"
      fi
    }

    exit $EXIT_SUCCESS
}

$opt_help || {
test "$mode" = compile && func_mode_compile ${1+"$@"}
}

func_mode_help ()
{
    # We need to display help for each of the modes.
    case $mode in
      "")
        # Generic help is extracted from the usage comments
        # at the start of this file.
        func_help
        ;;

      clean)
        $ECHO \
"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...

Remove files from the build directory.

RM is the name of the program to use to delete files associated with each FILE
(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
to RM.

If FILE is a libtool library, object or program, all the files associated
with it are deleted. Otherwise, only FILE itself is deleted using RM."
        ;;

      compile)
      $ECHO \
"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE

Compile a source file into a libtool library object.

This mode accepts the following additional options:

  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
  -no-suppress      do not suppress compiler output for multiple passes
  -prefer-pic       try to building PIC objects only
  -prefer-non-pic   try to building non-PIC objects only
  -shared           do not build a \`.o' file suitable for static linking
  -static           only build a \`.o' file suitable for static linking

COMPILE-COMMAND is a command to be used in creating a \`standard' object file
from the given SOURCEFILE.

The output file name is determined by removing the directory component from
SOURCEFILE, then substituting the C source code suffix \`.c' with the
library object suffix, \`.lo'."
        ;;

      execute)
        $ECHO \
"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...

Automatically set library path, then run a program.

This mode accepts the following additional options:

  -dlopen FILE      add the directory containing FILE to the library path

This mode sets the library path environment variable according to \`-dlopen'
flags.

If any of the ARGS are libtool executable wrappers, then they are translated
into their corresponding uninstalled binary, and any of their required library
directories are added to the library path.

Then, COMMAND is executed, with ARGS as arguments."
        ;;

      finish)
        $ECHO \
"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...

Complete the installation of libtool libraries.

Each LIBDIR is a directory that contains libtool libraries.

The commands that this mode executes may require superuser privileges.  Use
the \`--dry-run' option if you just want to see what would be executed."
        ;;

      install)
        $ECHO \
"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...

Install executables or libraries.

INSTALL-COMMAND is the installation command.  The first component should be
either the \`install' or \`cp' program.

The following components of INSTALL-COMMAND are treated specially:

  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation

The rest of the components are interpreted as arguments to that command (only
BSD-compatible install options are recognized)."
        ;;

      link)
        $ECHO \
"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...

Link object files or libraries together to form another library, or to
create an executable program.

LINK-COMMAND is a command using the C compiler that you would use to create
a program from several object files.

The following components of LINK-COMMAND are treated specially:

  -all-static       do not do any dynamic linking at all
  -avoid-version    do not add a version suffix if possible
  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
  -export-symbols SYMFILE
                    try to export only the symbols listed in SYMFILE
  -export-symbols-regex REGEX
                    try to export only the symbols matching REGEX
  -LLIBDIR          search LIBDIR for required installed libraries
  -lNAME            OUTPUT-FILE requires the installed library libNAME
  -module           build a library that can dlopened
  -no-fast-install  disable the fast-install mode
  -no-install       link a not-installable executable
  -no-undefined     declare that a library does not refer to external symbols
  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
  -objectlist FILE  Use a list of object files found in FILE to specify objects
  -precious-files-regex REGEX
                    don't remove output files matching REGEX
  -release RELEASE  specify package release information
  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
  -shared           only do dynamic linking of libtool libraries
  -shrext SUFFIX    override the standard shared library file extension
  -static           do not do any dynamic linking of uninstalled libtool libraries
  -static-libtool-libs
                    do not do any dynamic linking of libtool libraries
  -version-info CURRENT[:REVISION[:AGE]]
                    specify library version info [each variable defaults to 0]
  -weak LIBNAME     declare that the target provides the LIBNAME interface

All other options (arguments beginning with \`-') are ignored.

Every other argument is treated as a filename.  Files ending in \`.la' are
treated as uninstalled libtool libraries, other files are standard or library
object files.

If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
only library objects (\`.lo' files) may be specified, and \`-rpath' is
required, except when creating a convenience library.

If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
using \`ar' and \`ranlib', or on Windows using \`lib'.

If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
is created, otherwise an executable program is created."
        ;;

      uninstall)
        $ECHO \
"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...

Remove libraries from an installation directory.

RM is the name of the program to use to delete files associated with each FILE
(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
to RM.

If FILE is a libtool library, all the files associated with it are deleted.
Otherwise, only FILE itself is deleted using RM."
        ;;

      *)
        func_fatal_help "invalid operation mode \`$mode'"
        ;;
    esac

    $ECHO
    $ECHO "Try \`$progname --help' for more information about other modes."

    exit $?
}

  # Now that we've collected a possible --mode arg, show help if necessary
  $opt_help && func_mode_help


# func_mode_execute arg...
func_mode_execute ()
{
    $opt_debug
    # The first argument is the command name.
    cmd="$nonopt"
    test -z "$cmd" && \
      func_fatal_help "you must specify a COMMAND"

    # Handle -dlopen flags immediately.
    for file in $execute_dlfiles; do
      test -f "$file" \
	|| func_fatal_help "\`$file' is not a file"

      dir=
      case $file in
      *.la)
	# Check to see that this really is a libtool archive.
	func_lalib_unsafe_p "$file" \
	  || func_fatal_help "\`$lib' is not a valid libtool archive"

	# Read the libtool library.
	dlname=
	library_names=
	func_source "$file"

	# Skip this library if it cannot be dlopened.
	if test -z "$dlname"; then
	  # Warn if it was a shared library.
	  test -n "$library_names" && \
	    func_warning "\`$file' was not linked with \`-export-dynamic'"
	  continue
	fi

	func_dirname "$file" "" "."
	dir="$func_dirname_result"

	if test -f "$dir/$objdir/$dlname"; then
	  dir="$dir/$objdir"
	else
	  if test ! -f "$dir/$dlname"; then
	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
	  fi
	fi
	;;

      *.lo)
	# Just add the directory containing the .lo file.
	func_dirname "$file" "" "."
	dir="$func_dirname_result"
	;;

      *)
	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
	continue
	;;
      esac

      # Get the absolute pathname.
      absdir=`cd "$dir" && pwd`
      test -n "$absdir" && dir="$absdir"

      # Now add the directory to shlibpath_var.
      if eval "test -z \"\$$shlibpath_var\""; then
	eval "$shlibpath_var=\"\$dir\""
      else
	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
      fi
    done

    # This variable tells wrapper scripts just to set shlibpath_var
    # rather than running their programs.
    libtool_execute_magic="$magic"

    # Check if any of the arguments is a wrapper script.
    args=
    for file
    do
      case $file in
      -*) ;;
      *)
	# Do a test to see if this is really a libtool program.
	if func_ltwrapper_script_p "$file"; then
	  func_source "$file"
	  # Transform arg to wrapped name.
	  file="$progdir/$program"
	elif func_ltwrapper_executable_p "$file"; then
	  func_ltwrapper_scriptname "$file"
	  func_source "$func_ltwrapper_scriptname_result"
	  # Transform arg to wrapped name.
	  file="$progdir/$program"
	fi
	;;
      esac
      # Quote arguments (to preserve shell metacharacters).
      func_quote_for_eval "$file"
      args="$args $func_quote_for_eval_result"
    done

    if test "X$opt_dry_run" = Xfalse; then
      if test -n "$shlibpath_var"; then
	# Export the shlibpath_var.
	eval "export $shlibpath_var"
      fi

      # Restore saved environment variables
      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
      do
	eval "if test \"\${save_$lt_var+set}\" = set; then
                $lt_var=\$save_$lt_var; export $lt_var
	      else
		$lt_unset $lt_var
	      fi"
      done

      # Now prepare to actually exec the command.
      exec_cmd="\$cmd$args"
    else
      # Display what would be done.
      if test -n "$shlibpath_var"; then
	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
	$ECHO "export $shlibpath_var"
      fi
      $ECHO "$cmd$args"
      exit $EXIT_SUCCESS
    fi
}

test "$mode" = execute && func_mode_execute ${1+"$@"}


# func_mode_finish arg...
func_mode_finish ()
{
    $opt_debug
    libdirs="$nonopt"
    admincmds=

    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
      for dir
      do
	libdirs="$libdirs $dir"
      done

      for libdir in $libdirs; do
	if test -n "$finish_cmds"; then
	  # Do each command in the finish commands.
	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
'"$cmd"'"'
	fi
	if test -n "$finish_eval"; then
	  # Do the single finish_eval.
	  eval cmds=\"$finish_eval\"
	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
       $cmds"
	fi
      done
    fi

    # Exit here if they wanted silent mode.
    $opt_silent && exit $EXIT_SUCCESS

    $ECHO "X----------------------------------------------------------------------" | $Xsed
    $ECHO "Libraries have been installed in:"
    for libdir in $libdirs; do
      $ECHO "   $libdir"
    done
    $ECHO
    $ECHO "If you ever happen to want to link against installed libraries"
    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
    $ECHO "flag during linking and do at least one of the following:"
    if test -n "$shlibpath_var"; then
      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
      $ECHO "     during execution"
    fi
    if test -n "$runpath_var"; then
      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
      $ECHO "     during linking"
    fi
    if test -n "$hardcode_libdir_flag_spec"; then
      libdir=LIBDIR
      eval flag=\"$hardcode_libdir_flag_spec\"

      $ECHO "   - use the \`$flag' linker flag"
    fi
    if test -n "$admincmds"; then
      $ECHO "   - have your system administrator run these commands:$admincmds"
    fi
    if test -f /etc/ld.so.conf; then
      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
    fi
    $ECHO

    $ECHO "See any operating system documentation about shared libraries for"
    case $host in
      solaris2.[6789]|solaris2.1[0-9])
        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
	$ECHO "pages."
	;;
      *)
        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
        ;;
    esac
    $ECHO "X----------------------------------------------------------------------" | $Xsed
    exit $EXIT_SUCCESS
}

test "$mode" = finish && func_mode_finish ${1+"$@"}


# func_mode_install arg...
func_mode_install ()
{
    $opt_debug
    # There may be an optional sh(1) argument at the beginning of
    # install_prog (especially on Windows NT).
    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
       # Allow the use of GNU shtool's install command.
       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
      # Aesthetically quote it.
      func_quote_for_eval "$nonopt"
      install_prog="$func_quote_for_eval_result "
      arg=$1
      shift
    else
      install_prog=
      arg=$nonopt
    fi

    # The real first argument should be the name of the installation program.
    # Aesthetically quote it.
    func_quote_for_eval "$arg"
    install_prog="$install_prog$func_quote_for_eval_result"

    # We need to accept at least all the BSD install flags.
    dest=
    files=
    opts=
    prev=
    install_type=
    isdir=no
    stripme=
    for arg
    do
      if test -n "$dest"; then
	files="$files $dest"
	dest=$arg
	continue
      fi

      case $arg in
      -d) isdir=yes ;;
      -f)
	case " $install_prog " in
	*[\\\ /]cp\ *) ;;
	*) prev=$arg ;;
	esac
	;;
      -g | -m | -o)
	prev=$arg
	;;
      -s)
	stripme=" -s"
	continue
	;;
      -*)
	;;
      *)
	# If the previous option needed an argument, then skip it.
	if test -n "$prev"; then
	  prev=
	else
	  dest=$arg
	  continue
	fi
	;;
      esac

      # Aesthetically quote the argument.
      func_quote_for_eval "$arg"
      install_prog="$install_prog $func_quote_for_eval_result"
    done

    test -z "$install_prog" && \
      func_fatal_help "you must specify an install program"

    test -n "$prev" && \
      func_fatal_help "the \`$prev' option requires an argument"

    if test -z "$files"; then
      if test -z "$dest"; then
	func_fatal_help "no file or destination specified"
      else
	func_fatal_help "you must specify a destination"
      fi
    fi

    # Strip any trailing slash from the destination.
    func_stripname '' '/' "$dest"
    dest=$func_stripname_result

    # Check to see that the destination is a directory.
    test -d "$dest" && isdir=yes
    if test "$isdir" = yes; then
      destdir="$dest"
      destname=
    else
      func_dirname_and_basename "$dest" "" "."
      destdir="$func_dirname_result"
      destname="$func_basename_result"

      # Not a directory, so check to see that there is only one file specified.
      set dummy $files; shift
      test "$#" -gt 1 && \
	func_fatal_help "\`$dest' is not a directory"
    fi
    case $destdir in
    [\\/]* | [A-Za-z]:[\\/]*) ;;
    *)
      for file in $files; do
	case $file in
	*.lo) ;;
	*)
	  func_fatal_help "\`$destdir' must be an absolute directory name"
	  ;;
	esac
      done
      ;;
    esac

    # This variable tells wrapper scripts just to set variables rather
    # than running their programs.
    libtool_install_magic="$magic"

    staticlibs=
    future_libdirs=
    current_libdirs=
    for file in $files; do

      # Do each installation.
      case $file in
      *.$libext)
	# Do the static libraries later.
	staticlibs="$staticlibs $file"
	;;

      *.la)
	# Check to see that this really is a libtool archive.
	func_lalib_unsafe_p "$file" \
	  || func_fatal_help "\`$file' is not a valid libtool archive"

	library_names=
	old_library=
	relink_command=
	func_source "$file"

	# Add the libdir to current_libdirs if it is the destination.
	if test "X$destdir" = "X$libdir"; then
	  case "$current_libdirs " in
	  *" $libdir "*) ;;
	  *) current_libdirs="$current_libdirs $libdir" ;;
	  esac
	else
	  # Note the libdir as a future libdir.
	  case "$future_libdirs " in
	  *" $libdir "*) ;;
	  *) future_libdirs="$future_libdirs $libdir" ;;
	  esac
	fi

	func_dirname "$file" "/" ""
	dir="$func_dirname_result"
	dir="$dir$objdir"

	if test -n "$relink_command"; then
	  # Determine the prefix the user has applied to our future dir.
	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`

	  # Don't allow the user to place us outside of our expected
	  # location b/c this prevents finding dependent libraries that
	  # are installed to the same prefix.
	  # At present, this check doesn't affect windows .dll's that
	  # are installed into $libdir/../bin (currently, that works fine)
	  # but it's something to keep an eye on.
	  test "$inst_prefix_dir" = "$destdir" && \
	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"

	  if test -n "$inst_prefix_dir"; then
	    # Stick the inst_prefix_dir data into the link command.
	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
	  else
	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
	  fi

	  func_warning "relinking \`$file'"
	  func_show_eval "$relink_command" \
	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
	fi

	# See the names of the shared library.
	set dummy $library_names; shift
	if test -n "$1"; then
	  realname="$1"
	  shift

	  srcname="$realname"
	  test -n "$relink_command" && srcname="$realname"T

	  # Install the shared library and build the symlinks.
	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
	      'exit $?'
	  tstripme="$stripme"
	  case $host_os in
	  cygwin* | mingw* | pw32* | cegcc*)
	    case $realname in
	    *.dll.a)
	      tstripme=""
	      ;;
	    esac
	    ;;
	  esac
	  if test -n "$tstripme" && test -n "$striplib"; then
	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
	  fi

	  if test "$#" -gt 0; then
	    # Delete the old symlinks, and create new ones.
	    # Try `ln -sf' first, because the `ln' binary might depend on
	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
	    # so we also need to try rm && ln -s.
	    for linkname
	    do
	      test "$linkname" != "$realname" \
		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
	    done
	  fi

	  # Do each command in the postinstall commands.
	  lib="$destdir/$realname"
	  func_execute_cmds "$postinstall_cmds" 'exit $?'
	fi

	# Install the pseudo-library for information purposes.
	func_basename "$file"
	name="$func_basename_result"
	instname="$dir/$name"i
	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'

	# Maybe install the static library, too.
	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
	;;

      *.lo)
	# Install (i.e. copy) a libtool object.

	# Figure out destination file name, if it wasn't already specified.
	if test -n "$destname"; then
	  destfile="$destdir/$destname"
	else
	  func_basename "$file"
	  destfile="$func_basename_result"
	  destfile="$destdir/$destfile"
	fi

	# Deduce the name of the destination old-style object file.
	case $destfile in
	*.lo)
	  func_lo2o "$destfile"
	  staticdest=$func_lo2o_result
	  ;;
	*.$objext)
	  staticdest="$destfile"
	  destfile=
	  ;;
	*)
	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
	  ;;
	esac

	# Install the libtool object if requested.
	test -n "$destfile" && \
	  func_show_eval "$install_prog $file $destfile" 'exit $?'

	# Install the old object if enabled.
	if test "$build_old_libs" = yes; then
	  # Deduce the name of the old-style object file.
	  func_lo2o "$file"
	  staticobj=$func_lo2o_result
	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
	fi
	exit $EXIT_SUCCESS
	;;

      *)
	# Figure out destination file name, if it wasn't already specified.
	if test -n "$destname"; then
	  destfile="$destdir/$destname"
	else
	  func_basename "$file"
	  destfile="$func_basename_result"
	  destfile="$destdir/$destfile"
	fi

	# If the file is missing, and there is a .exe on the end, strip it
	# because it is most likely a libtool script we actually want to
	# install
	stripped_ext=""
	case $file in
	  *.exe)
	    if test ! -f "$file"; then
	      func_stripname '' '.exe' "$file"
	      file=$func_stripname_result
	      stripped_ext=".exe"
	    fi
	    ;;
	esac

	# Do a test to see if this is really a libtool program.
	case $host in
	*cygwin* | *mingw*)
	    if func_ltwrapper_executable_p "$file"; then
	      func_ltwrapper_scriptname "$file"
	      wrapper=$func_ltwrapper_scriptname_result
	    else
	      func_stripname '' '.exe' "$file"
	      wrapper=$func_stripname_result
	    fi
	    ;;
	*)
	    wrapper=$file
	    ;;
	esac
	if func_ltwrapper_script_p "$wrapper"; then
	  notinst_deplibs=
	  relink_command=

	  func_source "$wrapper"

	  # Check the variables that should have been set.
	  test -z "$generated_by_libtool_version" && \
	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"

	  finalize=yes
	  for lib in $notinst_deplibs; do
	    # Check to see that each library is installed.
	    libdir=
	    if test -f "$lib"; then
	      func_source "$lib"
	    fi
	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
	    if test -n "$libdir" && test ! -f "$libfile"; then
	      func_warning "\`$lib' has not been installed in \`$libdir'"
	      finalize=no
	    fi
	  done

	  relink_command=
	  func_source "$wrapper"

	  outputname=
	  if test "$fast_install" = no && test -n "$relink_command"; then
	    $opt_dry_run || {
	      if test "$finalize" = yes; then
	        tmpdir=`func_mktempdir`
		func_basename "$file$stripped_ext"
		file="$func_basename_result"
	        outputname="$tmpdir/$file"
	        # Replace the output file specification.
	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`

	        $opt_silent || {
	          func_quote_for_expand "$relink_command"
		  eval "func_echo $func_quote_for_expand_result"
	        }
	        if eval "$relink_command"; then :
	          else
		  func_error "error: relink \`$file' with the above command before installing it"
		  $opt_dry_run || ${RM}r "$tmpdir"
		  continue
	        fi
	        file="$outputname"
	      else
	        func_warning "cannot relink \`$file'"
	      fi
	    }
	  else
	    # Install the binary that we compiled earlier.
	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
	  fi
	fi

	# remove .exe since cygwin /usr/bin/install will append another
	# one anyway
	case $install_prog,$host in
	*/usr/bin/install*,*cygwin*)
	  case $file:$destfile in
	  *.exe:*.exe)
	    # this is ok
	    ;;
	  *.exe:*)
	    destfile=$destfile.exe
	    ;;
	  *:*.exe)
	    func_stripname '' '.exe' "$destfile"
	    destfile=$func_stripname_result
	    ;;
	  esac
	  ;;
	esac
	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
	$opt_dry_run || if test -n "$outputname"; then
	  ${RM}r "$tmpdir"
	fi
	;;
      esac
    done

    for file in $staticlibs; do
      func_basename "$file"
      name="$func_basename_result"

      # Set up the ranlib parameters.
      oldlib="$destdir/$name"

      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'

      if test -n "$stripme" && test -n "$old_striplib"; then
	func_show_eval "$old_striplib $oldlib" 'exit $?'
      fi

      # Do each command in the postinstall commands.
      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
    done

    test -n "$future_libdirs" && \
      func_warning "remember to run \`$progname --finish$future_libdirs'"

    if test -n "$current_libdirs"; then
      # Maybe just do a dry run.
      $opt_dry_run && current_libdirs=" -n$current_libdirs"
      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
    else
      exit $EXIT_SUCCESS
    fi
}

test "$mode" = install && func_mode_install ${1+"$@"}


# func_generate_dlsyms outputname originator pic_p
# Extract symbols from dlprefiles and create ${outputname}S.o with
# a dlpreopen symbol table.
func_generate_dlsyms ()
{
    $opt_debug
    my_outputname="$1"
    my_originator="$2"
    my_pic_p="${3-no}"
    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
    my_dlsyms=

    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
      if test -n "$NM" && test -n "$global_symbol_pipe"; then
	my_dlsyms="${my_outputname}S.c"
      else
	func_error "not configured to extract global symbols from dlpreopened files"
      fi
    fi

    if test -n "$my_dlsyms"; then
      case $my_dlsyms in
      "") ;;
      *.c)
	# Discover the nlist of each of the dlfiles.
	nlist="$output_objdir/${my_outputname}.nm"

	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"

	# Parse the name list into a source file.
	func_verbose "creating $output_objdir/$my_dlsyms"

	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */

#ifdef __cplusplus
extern \"C\" {
#endif

/* External symbol declarations for the compiler. */\
"

	if test "$dlself" = yes; then
	  func_verbose "generating symbol list for \`$output'"

	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"

	  # Add our own program objects to the symbol list.
	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
	  for progfile in $progfiles; do
	    func_verbose "extracting global C symbols from \`$progfile'"
	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
	  done

	  if test -n "$exclude_expsyms"; then
	    $opt_dry_run || {
	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
	      eval '$MV "$nlist"T "$nlist"'
	    }
	  fi

	  if test -n "$export_symbols_regex"; then
	    $opt_dry_run || {
	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
	      eval '$MV "$nlist"T "$nlist"'
	    }
	  fi

	  # Prepare the list of exported symbols
	  if test -z "$export_symbols"; then
	    export_symbols="$output_objdir/$outputname.exp"
	    $opt_dry_run || {
	      $RM $export_symbols
	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
	      case $host in
	      *cygwin* | *mingw* | *cegcc* )
                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
	        ;;
	      esac
	    }
	  else
	    $opt_dry_run || {
	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
	      eval '$MV "$nlist"T "$nlist"'
	      case $host in
	        *cygwin | *mingw* | *cegcc* )
	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
	          ;;
	      esac
	    }
	  fi
	fi

	for dlprefile in $dlprefiles; do
	  func_verbose "extracting global C symbols from \`$dlprefile'"
	  func_basename "$dlprefile"
	  name="$func_basename_result"
	  $opt_dry_run || {
	    eval '$ECHO ": $name " >> "$nlist"'
	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
	  }
	done

	$opt_dry_run || {
	  # Make sure we have at least an empty file.
	  test -f "$nlist" || : > "$nlist"

	  if test -n "$exclude_expsyms"; then
	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
	    $MV "$nlist"T "$nlist"
	  fi

	  # Try sorting and uniquifying the output.
	  if $GREP -v "^: " < "$nlist" |
	      if sort -k 3 </dev/null >/dev/null 2>&1; then
		sort -k 3
	      else
		sort +2
	      fi |
	      uniq > "$nlist"S; then
	    :
	  else
	    $GREP -v "^: " < "$nlist" > "$nlist"S
	  fi

	  if test -f "$nlist"S; then
	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
	  else
	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
	  fi

	  $ECHO >> "$output_objdir/$my_dlsyms" "\

/* The mapping between symbol names and symbols.  */
typedef struct {
  const char *name;
  void *address;
} lt_dlsymlist;
"
	  case $host in
	  *cygwin* | *mingw* | *cegcc* )
	    $ECHO >> "$output_objdir/$my_dlsyms" "\
/* DATA imports from DLLs on WIN32 con't be const, because
   runtime relocations are performed -- see ld's documentation
   on pseudo-relocs.  */"
	    lt_dlsym_const= ;;
	  *osf5*)
	    echo >> "$output_objdir/$my_dlsyms" "\
/* This system does not cope well with relocations in const data */"
	    lt_dlsym_const= ;;
	  *)
	    lt_dlsym_const=const ;;
	  esac

	  $ECHO >> "$output_objdir/$my_dlsyms" "\
extern $lt_dlsym_const lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[];
$lt_dlsym_const lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[] =
{\
  { \"$my_originator\", (void *) 0 },"

	  case $need_lib_prefix in
	  no)
	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
	    ;;
	  *)
	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
	    ;;
	  esac
	  $ECHO >> "$output_objdir/$my_dlsyms" "\
  {0, (void *) 0}
};

/* This works around a problem in FreeBSD linker */
#ifdef FREEBSD_WORKAROUND
static const void *lt_preloaded_setup() {
  return lt_${my_prefix}_LTX_preloaded_symbols;
}
#endif

#ifdef __cplusplus
}
#endif\
"
	} # !$opt_dry_run

	pic_flag_for_symtable=
	case "$compile_command " in
	*" -static "*) ;;
	*)
	  case $host in
	  # compiling the symbol table file with pic_flag works around
	  # a FreeBSD bug that causes programs to crash when -lm is
	  # linked before any other PIC object.  But we must not use
	  # pic_flag when linking with -static.  The problem exists in
	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
	  *-*-hpux*)
	    pic_flag_for_symtable=" $pic_flag"  ;;
	  *)
	    if test "X$my_pic_p" != Xno; then
	      pic_flag_for_symtable=" $pic_flag"
	    fi
	    ;;
	  esac
	  ;;
	esac
	symtab_cflags=
	for arg in $LTCFLAGS; do
	  case $arg in
	  -pie | -fpie | -fPIE) ;;
	  *) symtab_cflags="$symtab_cflags $arg" ;;
	  esac
	done

	# Now compile the dynamic symbol file.
	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'

	# Clean up the generated files.
	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'

	# Transform the symbol file into the correct name.
	symfileobj="$output_objdir/${my_outputname}S.$objext"
	case $host in
	*cygwin* | *mingw* | *cegcc* )
	  if test -f "$output_objdir/$my_outputname.def"; then
	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
	  else
	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	  fi
	  ;;
	*)
	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	  ;;
	esac
	;;
      *)
	func_fatal_error "unknown suffix for \`$my_dlsyms'"
	;;
      esac
    else
      # We keep going just in case the user didn't refer to
      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
      # really was required.

      # Nullify the symbol file.
      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
    fi
}

# func_win32_libid arg
# return the library type of file 'arg'
#
# Need a lot of goo to handle *both* DLLs and import libs
# Has to be a shell function in order to 'eat' the argument
# that is supplied when $file_magic_command is called.
func_win32_libid ()
{
  $opt_debug
  win32_libid_type="unknown"
  win32_fileres=`file -L $1 2>/dev/null`
  case $win32_fileres in
  *ar\ archive\ import\ library*) # definitely import
    win32_libid_type="x86 archive import"
    ;;
  *ar\ archive*) # could be an import, or static
    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
      win32_nmres=`eval $NM -f posix -A $1 |
	$SED -n -e '
	    1,100{
		/ I /{
		    s,.*,import,
		    p
		    q
		}
	    }'`
      case $win32_nmres in
      import*)  win32_libid_type="x86 archive import";;
      *)        win32_libid_type="x86 archive static";;
      esac
    fi
    ;;
  *DLL*)
    win32_libid_type="x86 DLL"
    ;;
  *executable*) # but shell scripts are "executable" too...
    case $win32_fileres in
    *MS\ Windows\ PE\ Intel*)
      win32_libid_type="x86 DLL"
      ;;
    esac
    ;;
  esac
  $ECHO "$win32_libid_type"
}



# func_extract_an_archive dir oldlib
func_extract_an_archive ()
{
    $opt_debug
    f_ex_an_ar_dir="$1"; shift
    f_ex_an_ar_oldlib="$1"
    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
     :
    else
      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
    fi
}


# func_extract_archives gentop oldlib ...
func_extract_archives ()
{
    $opt_debug
    my_gentop="$1"; shift
    my_oldlibs=${1+"$@"}
    my_oldobjs=""
    my_xlib=""
    my_xabs=""
    my_xdir=""

    for my_xlib in $my_oldlibs; do
      # Extract the objects.
      case $my_xlib in
	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
	*) my_xabs=`pwd`"/$my_xlib" ;;
      esac
      func_basename "$my_xlib"
      my_xlib="$func_basename_result"
      my_xlib_u=$my_xlib
      while :; do
        case " $extracted_archives " in
	*" $my_xlib_u "*)
	  func_arith $extracted_serial + 1
	  extracted_serial=$func_arith_result
	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
	*) break ;;
	esac
      done
      extracted_archives="$extracted_archives $my_xlib_u"
      my_xdir="$my_gentop/$my_xlib_u"

      func_mkdir_p "$my_xdir"

      case $host in
      *-darwin*)
	func_verbose "Extracting $my_xabs"
	# Do not bother doing anything if just a dry run
	$opt_dry_run || {
	  darwin_orig_dir=`pwd`
	  cd $my_xdir || exit $?
	  darwin_archive=$my_xabs
	  darwin_curdir=`pwd`
	  darwin_base_archive=`basename "$darwin_archive"`
	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
	  if test -n "$darwin_arches"; then
	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
	    darwin_arch=
	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
	    for darwin_arch in  $darwin_arches ; do
	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
	      cd "$darwin_curdir"
	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
	    done # $darwin_arches
            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
	    darwin_file=
	    darwin_files=
	    for darwin_file in $darwin_filelist; do
	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
	      $LIPO -create -output "$darwin_file" $darwin_files
	    done # $darwin_filelist
	    $RM -rf unfat-$$
	    cd "$darwin_orig_dir"
	  else
	    cd $darwin_orig_dir
	    func_extract_an_archive "$my_xdir" "$my_xabs"
	  fi # $darwin_arches
	} # !$opt_dry_run
	;;
      *)
        func_extract_an_archive "$my_xdir" "$my_xabs"
	;;
      esac
      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
    done

    func_extract_archives_result="$my_oldobjs"
}



# func_emit_wrapper_part1 [arg=no]
#
# Emit the first part of a libtool wrapper script on stdout.
# For more information, see the description associated with
# func_emit_wrapper(), below.
func_emit_wrapper_part1 ()
{
	func_emit_wrapper_part1_arg1=no
	if test -n "$1" ; then
	  func_emit_wrapper_part1_arg1=$1
	fi

	$ECHO "\
#! $SHELL

# $output - temporary wrapper script for $objdir/$outputname
# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# The $output program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
#
# This wrapper script should never be moved out of the build directory.
# If it is, it will not operate correctly.

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
Xsed='${SED} -e 1s/^X//'
sed_quote_subst='$sed_quote_subst'

# Be Bourne compatible
if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
  emulate sh
  NULLCMD=:
  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '\${1+\"\$@\"}'='\"\$@\"'
  setopt NO_GLOB_SUBST
else
  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh

# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

relink_command=\"$relink_command\"

# This environment variable determines our operation mode.
if test \"\$libtool_install_magic\" = \"$magic\"; then
  # install mode needs the following variables:
  generated_by_libtool_version='$macro_version'
  notinst_deplibs='$notinst_deplibs'
else
  # When we are sourced in execute mode, \$file and \$ECHO are already set.
  if test \"\$libtool_execute_magic\" != \"$magic\"; then
    ECHO=\"$qecho\"
    file=\"\$0\"
    # Make sure echo works.
    if test \"X\$1\" = X--no-reexec; then
      # Discard the --no-reexec flag, and continue.
      shift
    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
      # Yippee, \$ECHO works!
      :
    else
      # Restart under the correct shell, and then maybe \$ECHO will work.
      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
    fi
  fi\
"
	$ECHO "\

  # Find the directory that this script lives in.
  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
  test \"x\$thisdir\" = \"x\$file\" && thisdir=.

  # Follow symbolic links until we get to the real thisdir.
  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
  while test -n \"\$file\"; do
    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`

    # If there was a directory component, then change thisdir.
    if test \"x\$destdir\" != \"x\$file\"; then
      case \"\$destdir\" in
      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
      *) thisdir=\"\$thisdir/\$destdir\" ;;
      esac
    fi

    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
  done
"
}
# end: func_emit_wrapper_part1

# func_emit_wrapper_part2 [arg=no]
#
# Emit the second part of a libtool wrapper script on stdout.
# For more information, see the description associated with
# func_emit_wrapper(), below.
func_emit_wrapper_part2 ()
{
	func_emit_wrapper_part2_arg1=no
	if test -n "$1" ; then
	  func_emit_wrapper_part2_arg1=$1
	fi

	$ECHO "\

  # Usually 'no', except on cygwin/mingw when embedded into
  # the cwrapper.
  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
    # special case for '.'
    if test \"\$thisdir\" = \".\"; then
      thisdir=\`pwd\`
    fi
    # remove .libs from thisdir
    case \"\$thisdir\" in
    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
    $objdir )   thisdir=. ;;
    esac
  fi

  # Try to get the absolute directory name.
  absdir=\`cd \"\$thisdir\" && pwd\`
  test -n \"\$absdir\" && thisdir=\"\$absdir\"
"

	if test "$fast_install" = yes; then
	  $ECHO "\
  program=lt-'$outputname'$exeext
  progdir=\"\$thisdir/$objdir\"

  if test ! -f \"\$progdir/\$program\" ||
     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
       test \"X\$file\" != \"X\$progdir/\$program\"; }; then

    file=\"\$\$-\$program\"

    if test ! -d \"\$progdir\"; then
      $MKDIR \"\$progdir\"
    else
      $RM \"\$progdir/\$file\"
    fi"

	  $ECHO "\

    # relink executable if necessary
    if test -n \"\$relink_command\"; then
      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
      else
	$ECHO \"\$relink_command_output\" >&2
	$RM \"\$progdir/\$file\"
	exit 1
      fi
    fi

    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
    { $RM \"\$progdir/\$program\";
      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
    $RM \"\$progdir/\$file\"
  fi"
	else
	  $ECHO "\
  program='$outputname'
  progdir=\"\$thisdir/$objdir\"
"
	fi

	$ECHO "\

  if test -f \"\$progdir/\$program\"; then"

	# Export our shlibpath_var if we have one.
	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
	  $ECHO "\
    # Add our own library path to $shlibpath_var
    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"

    # Some systems cannot cope with colon-terminated $shlibpath_var
    # The second colon is a workaround for a bug in BeOS R4 sed
    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`

    export $shlibpath_var
"
	fi

	# fixup the dll searchpath if we need to.
	if test -n "$dllsearchpath"; then
	  $ECHO "\
    # Add the dll search path components to the executable PATH
    PATH=$dllsearchpath:\$PATH
"
	fi

	$ECHO "\
    if test \"\$libtool_execute_magic\" != \"$magic\"; then
      # Run the actual program with our arguments.
"
	case $host in
	# Backslashes separate directories on plain windows
	*-*-mingw | *-*-os2* | *-cegcc*)
	  $ECHO "\
      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
"
	  ;;

	*)
	  $ECHO "\
      exec \"\$progdir/\$program\" \${1+\"\$@\"}
"
	  ;;
	esac
	$ECHO "\
      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
      exit 1
    fi
  else
    # The program doesn't exist.
    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
    exit 1
  fi
fi\
"
}
# end: func_emit_wrapper_part2


# func_emit_wrapper [arg=no]
#
# Emit a libtool wrapper script on stdout.
# Don't directly open a file because we may want to
# incorporate the script contents within a cygwin/mingw
# wrapper executable.  Must ONLY be called from within
# func_mode_link because it depends on a number of variables
# set therein.
#
# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
# variable will take.  If 'yes', then the emitted script
# will assume that the directory in which it is stored is
# the $objdir directory.  This is a cygwin/mingw-specific
# behavior.
func_emit_wrapper ()
{
	func_emit_wrapper_arg1=no
	if test -n "$1" ; then
	  func_emit_wrapper_arg1=$1
	fi

	# split this up so that func_emit_cwrapperexe_src
	# can call each part independently.
	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
}


# func_to_host_path arg
#
# Convert paths to host format when used with build tools.
# Intended for use with "native" mingw (where libtool itself
# is running under the msys shell), or in the following cross-
# build environments:
#    $build          $host
#    mingw (msys)    mingw  [e.g. native]
#    cygwin          mingw
#    *nix + wine     mingw
# where wine is equipped with the `winepath' executable.
# In the native mingw case, the (msys) shell automatically
# converts paths for any non-msys applications it launches,
# but that facility isn't available from inside the cwrapper.
# Similar accommodations are necessary for $host mingw and
# $build cygwin.  Calling this function does no harm for other
# $host/$build combinations not listed above.
#
# ARG is the path (on $build) that should be converted to
# the proper representation for $host. The result is stored
# in $func_to_host_path_result.
func_to_host_path ()
{
  func_to_host_path_result="$1"
  if test -n "$1" ; then
    case $host in
      *mingw* )
        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
        case $build in
          *mingw* ) # actually, msys
            # awkward: cmd appends spaces to result
            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          *cygwin* )
            func_to_host_path_tmp1=`cygpath -w "$1"`
            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          * )
            # Unfortunately, winepath does not exit with a non-zero
            # error code, so we are forced to check the contents of
            # stdout. On the other hand, if the command is not
            # found, the shell will set an exit code of 127 and print
            # *an error message* to stdout. So we must check for both
            # error code of zero AND non-empty stdout, which explains
            # the odd construction:
            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
                $SED -e "$lt_sed_naive_backslashify"`
            else
              # Allow warning below.
              func_to_host_path_result=""
            fi
            ;;
        esac
        if test -z "$func_to_host_path_result" ; then
          func_error "Could not determine host path corresponding to"
          func_error "  '$1'"
          func_error "Continuing, but uninstalled executables may not work."
          # Fallback:
          func_to_host_path_result="$1"
        fi
        ;;
    esac
  fi
}
# end: func_to_host_path

# func_to_host_pathlist arg
#
# Convert pathlists to host format when used with build tools.
# See func_to_host_path(), above. This function supports the
# following $build/$host combinations (but does no harm for
# combinations not listed here):
#    $build          $host
#    mingw (msys)    mingw  [e.g. native]
#    cygwin          mingw
#    *nix + wine     mingw
#
# Path separators are also converted from $build format to
# $host format. If ARG begins or ends with a path separator
# character, it is preserved (but converted to $host format)
# on output.
#
# ARG is a pathlist (on $build) that should be converted to
# the proper representation on $host. The result is stored
# in $func_to_host_pathlist_result.
func_to_host_pathlist ()
{
  func_to_host_pathlist_result="$1"
  if test -n "$1" ; then
    case $host in
      *mingw* )
        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
        # Remove leading and trailing path separator characters from
        # ARG. msys behavior is inconsistent here, cygpath turns them
        # into '.;' and ';.', and winepath ignores them completely.
        func_to_host_pathlist_tmp2="$1"
        # Once set for this call, this variable should not be
        # reassigned. It is used in tha fallback case.
        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
          $SED -e 's|^:*||' -e 's|:*$||'`
        case $build in
          *mingw* ) # Actually, msys.
            # Awkward: cmd appends spaces to result.
            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          *cygwin* )
            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          * )
            # unfortunately, winepath doesn't convert pathlists
            func_to_host_pathlist_result=""
            func_to_host_pathlist_oldIFS=$IFS
            IFS=:
            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
              IFS=$func_to_host_pathlist_oldIFS
              if test -n "$func_to_host_pathlist_f" ; then
                func_to_host_path "$func_to_host_pathlist_f"
                if test -n "$func_to_host_path_result" ; then
                  if test -z "$func_to_host_pathlist_result" ; then
                    func_to_host_pathlist_result="$func_to_host_path_result"
                  else
                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
                  fi
                fi
              fi
              IFS=:
            done
            IFS=$func_to_host_pathlist_oldIFS
            ;;
        esac
        if test -z "$func_to_host_pathlist_result" ; then
          func_error "Could not determine the host path(s) corresponding to"
          func_error "  '$1'"
          func_error "Continuing, but uninstalled executables may not work."
          # Fallback. This may break if $1 contains DOS-style drive
          # specifications. The fix is not to complicate the expression
          # below, but for the user to provide a working wine installation
          # with winepath so that path translation in the cross-to-mingw
          # case works properly.
          lt_replace_pathsep_nix_to_dos="s|:|;|g"
          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
            $SED -e "$lt_replace_pathsep_nix_to_dos"`
        fi
        # Now, add the leading and trailing path separators back
        case "$1" in
          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
            ;;
        esac
        case "$1" in
          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
            ;;
        esac
        ;;
    esac
  fi
}
# end: func_to_host_pathlist

# func_emit_cwrapperexe_src
# emit the source code for a wrapper executable on stdout
# Must ONLY be called from within func_mode_link because
# it depends on a number of variable set therein.
func_emit_cwrapperexe_src ()
{
	cat <<EOF

/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION

   The $output program cannot be directly executed until all the libtool
   libraries that it depends on are installed.

   This wrapper executable should never be moved out of the build directory.
   If it is, it will not operate correctly.

   Currently, it simply execs the wrapper *script* "$SHELL $output",
   but could eventually absorb all of the scripts functionality and
   exec $objdir/$outputname directly.
*/
EOF
	    cat <<"EOF"
#include <stdio.h>
#include <stdlib.h>
#ifdef _MSC_VER
# include <direct.h>
# include <process.h>
# include <io.h>
# define setmode _setmode
#else
# include <unistd.h>
# include <stdint.h>
# ifdef __CYGWIN__
#  include <io.h>
#  define HAVE_SETENV
#  ifdef __STRICT_ANSI__
char *realpath (const char *, char *);
int putenv (char *);
int setenv (const char *, const char *, int);
#  endif
# endif
#endif
#include <malloc.h>
#include <stdarg.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>

#if defined(PATH_MAX)
# define LT_PATHMAX PATH_MAX
#elif defined(MAXPATHLEN)
# define LT_PATHMAX MAXPATHLEN
#else
# define LT_PATHMAX 1024
#endif

#ifndef S_IXOTH
# define S_IXOTH 0
#endif
#ifndef S_IXGRP
# define S_IXGRP 0
#endif

#ifdef _MSC_VER
# define S_IXUSR _S_IEXEC
# define stat _stat
# ifndef _INTPTR_T_DEFINED
#  define intptr_t int
# endif
#endif

#ifndef DIR_SEPARATOR
# define DIR_SEPARATOR '/'
# define PATH_SEPARATOR ':'
#endif

#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
  defined (__OS2__)
# define HAVE_DOS_BASED_FILE_SYSTEM
# define FOPEN_WB "wb"
# ifndef DIR_SEPARATOR_2
#  define DIR_SEPARATOR_2 '\\'
# endif
# ifndef PATH_SEPARATOR_2
#  define PATH_SEPARATOR_2 ';'
# endif
#endif

#ifndef DIR_SEPARATOR_2
# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
#else /* DIR_SEPARATOR_2 */
# define IS_DIR_SEPARATOR(ch) \
	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
#endif /* DIR_SEPARATOR_2 */

#ifndef PATH_SEPARATOR_2
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
#else /* PATH_SEPARATOR_2 */
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
#endif /* PATH_SEPARATOR_2 */

#ifdef __CYGWIN__
# define FOPEN_WB "wb"
#endif

#ifndef FOPEN_WB
# define FOPEN_WB "w"
#endif
#ifndef _O_BINARY
# define _O_BINARY 0
#endif

#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
#define XFREE(stale) do { \
  if (stale) { free ((void *) stale); stale = 0; } \
} while (0)

#undef LTWRAPPER_DEBUGPRINTF
#if defined DEBUGWRAPPER
# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
static void
ltwrapper_debugprintf (const char *fmt, ...)
{
    va_list args;
    va_start (args, fmt);
    (void) vfprintf (stderr, fmt, args);
    va_end (args);
}
#else
# define LTWRAPPER_DEBUGPRINTF(args)
#endif

const char *program_name = NULL;

void *xmalloc (size_t num);
char *xstrdup (const char *string);
const char *base_name (const char *name);
char *find_executable (const char *wrapper);
char *chase_symlinks (const char *pathspec);
int make_executable (const char *path);
int check_executable (const char *path);
char *strendzap (char *str, const char *pat);
void lt_fatal (const char *message, ...);
void lt_setenv (const char *name, const char *value);
char *lt_extend_str (const char *orig_value, const char *add, int to_end);
void lt_opt_process_env_set (const char *arg);
void lt_opt_process_env_prepend (const char *arg);
void lt_opt_process_env_append (const char *arg);
int lt_split_name_value (const char *arg, char** name, char** value);
void lt_update_exe_path (const char *name, const char *value);
void lt_update_lib_path (const char *name, const char *value);

static const char *script_text_part1 =
EOF

	    func_emit_wrapper_part1 yes |
	        $SED -e 's/\([\\"]\)/\\\1/g' \
	             -e 's/^/  "/' -e 's/$/\\n"/'
	    echo ";"
	    cat <<EOF

static const char *script_text_part2 =
EOF
	    func_emit_wrapper_part2 yes |
	        $SED -e 's/\([\\"]\)/\\\1/g' \
	             -e 's/^/  "/' -e 's/$/\\n"/'
	    echo ";"

	    cat <<EOF
const char * MAGIC_EXE = "$magic_exe";
const char * LIB_PATH_VARNAME = "$shlibpath_var";
EOF

	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
              func_to_host_pathlist "$temp_rpath"
	      cat <<EOF
const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
EOF
	    else
	      cat <<"EOF"
const char * LIB_PATH_VALUE   = "";
EOF
	    fi

	    if test -n "$dllsearchpath"; then
              func_to_host_pathlist "$dllsearchpath:"
	      cat <<EOF
const char * EXE_PATH_VARNAME = "PATH";
const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
EOF
	    else
	      cat <<"EOF"
const char * EXE_PATH_VARNAME = "";
const char * EXE_PATH_VALUE   = "";
EOF
	    fi

	    if test "$fast_install" = yes; then
	      cat <<EOF
const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
EOF
	    else
	      cat <<EOF
const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
EOF
	    fi


	    cat <<"EOF"

#define LTWRAPPER_OPTION_PREFIX         "--lt-"
#define LTWRAPPER_OPTION_PREFIX_LENGTH  5

static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;

static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";

static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
  /* argument is putenv-style "foo=bar", value of foo is set to bar */

static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */

static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */

int
main (int argc, char *argv[])
{
  char **newargz;
  int  newargc;
  char *tmp_pathspec;
  char *actual_cwrapper_path;
  char *actual_cwrapper_name;
  char *target_name;
  char *lt_argv_zero;
  intptr_t rval = 127;

  int i;

  program_name = (char *) xstrdup (base_name (argv[0]));
  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));

  /* very simple arg parsing; don't want to rely on getopt */
  for (i = 1; i < argc; i++)
    {
      if (strcmp (argv[i], dumpscript_opt) == 0)
	{
EOF
	    case "$host" in
	      *mingw* | *cygwin* )
		# make stdout use "unix" line endings
		echo "          setmode(1,_O_BINARY);"
		;;
	      esac

	    cat <<"EOF"
	  printf ("%s", script_text_part1);
	  printf ("%s", script_text_part2);
	  return 0;
	}
    }

  newargz = XMALLOC (char *, argc + 1);
  tmp_pathspec = find_executable (argv[0]);
  if (tmp_pathspec == NULL)
    lt_fatal ("Couldn't find %s", argv[0]);
  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
			  tmp_pathspec));

  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
			  actual_cwrapper_path));
  XFREE (tmp_pathspec);

  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
  strendzap (actual_cwrapper_path, actual_cwrapper_name);

  /* wrapper name transforms */
  strendzap (actual_cwrapper_name, ".exe");
  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
  XFREE (actual_cwrapper_name);
  actual_cwrapper_name = tmp_pathspec;
  tmp_pathspec = 0;

  /* target_name transforms -- use actual target program name; might have lt- prefix */
  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
  strendzap (target_name, ".exe");
  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
  XFREE (target_name);
  target_name = tmp_pathspec;
  tmp_pathspec = 0;

  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
			  target_name));
EOF

	    cat <<EOF
  newargz[0] =
    XMALLOC (char, (strlen (actual_cwrapper_path) +
		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
  strcpy (newargz[0], actual_cwrapper_path);
  strcat (newargz[0], "$objdir");
  strcat (newargz[0], "/");
EOF

	    cat <<"EOF"
  /* stop here, and copy so we don't have to do this twice */
  tmp_pathspec = xstrdup (newargz[0]);

  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
  strcat (newargz[0], actual_cwrapper_name);

  /* DO want the lt- prefix here if it exists, so use target_name */
  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
  XFREE (tmp_pathspec);
  tmp_pathspec = NULL;
EOF

	    case $host_os in
	      mingw*)
	    cat <<"EOF"
  {
    char* p;
    while ((p = strchr (newargz[0], '\\')) != NULL)
      {
	*p = '/';
      }
    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
      {
	*p = '/';
      }
  }
EOF
	    ;;
	    esac

	    cat <<"EOF"
  XFREE (target_name);
  XFREE (actual_cwrapper_path);
  XFREE (actual_cwrapper_name);

  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);

  newargc=0;
  for (i = 1; i < argc; i++)
    {
      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
        {
          if (argv[i][env_set_opt_len] == '=')
            {
              const char *p = argv[i] + env_set_opt_len + 1;
              lt_opt_process_env_set (p);
            }
          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
            {
              lt_opt_process_env_set (argv[++i]); /* don't copy */
            }
          else
            lt_fatal ("%s missing required argument", env_set_opt);
          continue;
        }
      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
        {
          if (argv[i][env_prepend_opt_len] == '=')
            {
              const char *p = argv[i] + env_prepend_opt_len + 1;
              lt_opt_process_env_prepend (p);
            }
          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
            {
              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
            }
          else
            lt_fatal ("%s missing required argument", env_prepend_opt);
          continue;
        }
      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
        {
          if (argv[i][env_append_opt_len] == '=')
            {
              const char *p = argv[i] + env_append_opt_len + 1;
              lt_opt_process_env_append (p);
            }
          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
            {
              lt_opt_process_env_append (argv[++i]); /* don't copy */
            }
          else
            lt_fatal ("%s missing required argument", env_append_opt);
          continue;
        }
      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
        {
          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
             namespace, but it is not one of the ones we know about and
             have already dealt with, above (inluding dump-script), then
             report an error. Otherwise, targets might begin to believe
             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
             namespace. The first time any user complains about this, we'll
             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
             or a configure.ac-settable value.
           */
          lt_fatal ("Unrecognized option in %s namespace: '%s'",
                    ltwrapper_option_prefix, argv[i]);
        }
      /* otherwise ... */
      newargz[++newargc] = xstrdup (argv[i]);
    }
  newargz[++newargc] = NULL;

  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
  for (i = 0; i < newargc; i++)
    {
      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
    }

EOF

	    case $host_os in
	      mingw*)
		cat <<"EOF"
  /* execv doesn't actually work on mingw as expected on unix */
  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
  if (rval == -1)
    {
      /* failed to start process */
      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
      return 127;
    }
  return rval;
EOF
		;;
	      *)
		cat <<"EOF"
  execv (lt_argv_zero, newargz);
  return rval; /* =127, but avoids unused variable warning */
EOF
		;;
	    esac

	    cat <<"EOF"
}

void *
xmalloc (size_t num)
{
  void *p = (void *) malloc (num);
  if (!p)
    lt_fatal ("Memory exhausted");

  return p;
}

char *
xstrdup (const char *string)
{
  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
			  string) : NULL;
}

const char *
base_name (const char *name)
{
  const char *base;

#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
  /* Skip over the disk name in MSDOS pathnames. */
  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
    name += 2;
#endif

  for (base = name; *name; name++)
    if (IS_DIR_SEPARATOR (*name))
      base = name + 1;
  return base;
}

int
check_executable (const char *path)
{
  struct stat st;

  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
			  path ? (*path ? path : "EMPTY!") : "NULL!"));
  if ((!path) || (!*path))
    return 0;

  if ((stat (path, &st) >= 0)
      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
    return 1;
  else
    return 0;
}

int
make_executable (const char *path)
{
  int rval = 0;
  struct stat st;

  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
			  path ? (*path ? path : "EMPTY!") : "NULL!"));
  if ((!path) || (!*path))
    return 0;

  if (stat (path, &st) >= 0)
    {
      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
    }
  return rval;
}

/* Searches for the full path of the wrapper.  Returns
   newly allocated full path name if found, NULL otherwise
   Does not chase symlinks, even on platforms that support them.
*/
char *
find_executable (const char *wrapper)
{
  int has_slash = 0;
  const char *p;
  const char *p_next;
  /* static buffer for getcwd */
  char tmp[LT_PATHMAX + 1];
  int tmp_len;
  char *concat_name;

  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));

  if ((wrapper == NULL) || (*wrapper == '\0'))
    return NULL;

  /* Absolute path? */
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
    {
      concat_name = xstrdup (wrapper);
      if (check_executable (concat_name))
	return concat_name;
      XFREE (concat_name);
    }
  else
    {
#endif
      if (IS_DIR_SEPARATOR (wrapper[0]))
	{
	  concat_name = xstrdup (wrapper);
	  if (check_executable (concat_name))
	    return concat_name;
	  XFREE (concat_name);
	}
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
    }
#endif

  for (p = wrapper; *p; p++)
    if (*p == '/')
      {
	has_slash = 1;
	break;
      }
  if (!has_slash)
    {
      /* no slashes; search PATH */
      const char *path = getenv ("PATH");
      if (path != NULL)
	{
	  for (p = path; *p; p = p_next)
	    {
	      const char *q;
	      size_t p_len;
	      for (q = p; *q; q++)
		if (IS_PATH_SEPARATOR (*q))
		  break;
	      p_len = q - p;
	      p_next = (*q == '\0' ? q : q + 1);
	      if (p_len == 0)
		{
		  /* empty path: current directory */
		  if (getcwd (tmp, LT_PATHMAX) == NULL)
		    lt_fatal ("getcwd failed");
		  tmp_len = strlen (tmp);
		  concat_name =
		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
		  memcpy (concat_name, tmp, tmp_len);
		  concat_name[tmp_len] = '/';
		  strcpy (concat_name + tmp_len + 1, wrapper);
		}
	      else
		{
		  concat_name =
		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
		  memcpy (concat_name, p, p_len);
		  concat_name[p_len] = '/';
		  strcpy (concat_name + p_len + 1, wrapper);
		}
	      if (check_executable (concat_name))
		return concat_name;
	      XFREE (concat_name);
	    }
	}
      /* not found in PATH; assume curdir */
    }
  /* Relative path | not found in path: prepend cwd */
  if (getcwd (tmp, LT_PATHMAX) == NULL)
    lt_fatal ("getcwd failed");
  tmp_len = strlen (tmp);
  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
  memcpy (concat_name, tmp, tmp_len);
  concat_name[tmp_len] = '/';
  strcpy (concat_name + tmp_len + 1, wrapper);

  if (check_executable (concat_name))
    return concat_name;
  XFREE (concat_name);
  return NULL;
}

char *
chase_symlinks (const char *pathspec)
{
#ifndef S_ISLNK
  return xstrdup (pathspec);
#else
  char buf[LT_PATHMAX];
  struct stat s;
  char *tmp_pathspec = xstrdup (pathspec);
  char *p;
  int has_symlinks = 0;
  while (strlen (tmp_pathspec) && !has_symlinks)
    {
      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
			      tmp_pathspec));
      if (lstat (tmp_pathspec, &s) == 0)
	{
	  if (S_ISLNK (s.st_mode) != 0)
	    {
	      has_symlinks = 1;
	      break;
	    }

	  /* search backwards for last DIR_SEPARATOR */
	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
	    p--;
	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
	    {
	      /* no more DIR_SEPARATORS left */
	      break;
	    }
	  *p = '\0';
	}
      else
	{
	  char *errstr = strerror (errno);
	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
	}
    }
  XFREE (tmp_pathspec);

  if (!has_symlinks)
    {
      return xstrdup (pathspec);
    }

  tmp_pathspec = realpath (pathspec, buf);
  if (tmp_pathspec == 0)
    {
      lt_fatal ("Could not follow symlinks for %s", pathspec);
    }
  return xstrdup (tmp_pathspec);
#endif
}

char *
strendzap (char *str, const char *pat)
{
  size_t len, patlen;

  assert (str != NULL);
  assert (pat != NULL);

  len = strlen (str);
  patlen = strlen (pat);

  if (patlen <= len)
    {
      str += len - patlen;
      if (strcmp (str, pat) == 0)
	*str = '\0';
    }
  return str;
}

static void
lt_error_core (int exit_status, const char *mode,
	       const char *message, va_list ap)
{
  fprintf (stderr, "%s: %s: ", program_name, mode);
  vfprintf (stderr, message, ap);
  fprintf (stderr, ".\n");

  if (exit_status >= 0)
    exit (exit_status);
}

void
lt_fatal (const char *message, ...)
{
  va_list ap;
  va_start (ap, message);
  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
  va_end (ap);
}

void
lt_setenv (const char *name, const char *value)
{
  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
                          (name ? name : "<NULL>"),
                          (value ? value : "<NULL>")));
  {
#ifdef HAVE_SETENV
    /* always make a copy, for consistency with !HAVE_SETENV */
    char *str = xstrdup (value);
    setenv (name, str, 1);
#else
    int len = strlen (name) + 1 + strlen (value) + 1;
    char *str = XMALLOC (char, len);
    sprintf (str, "%s=%s", name, value);
    if (putenv (str) != EXIT_SUCCESS)
      {
        XFREE (str);
      }
#endif
  }
}

char *
lt_extend_str (const char *orig_value, const char *add, int to_end)
{
  char *new_value;
  if (orig_value && *orig_value)
    {
      int orig_value_len = strlen (orig_value);
      int add_len = strlen (add);
      new_value = XMALLOC (char, add_len + orig_value_len + 1);
      if (to_end)
        {
          strcpy (new_value, orig_value);
          strcpy (new_value + orig_value_len, add);
        }
      else
        {
          strcpy (new_value, add);
          strcpy (new_value + add_len, orig_value);
        }
    }
  else
    {
      new_value = xstrdup (add);
    }
  return new_value;
}

int
lt_split_name_value (const char *arg, char** name, char** value)
{
  const char *p;
  int len;
  if (!arg || !*arg)
    return 1;

  p = strchr (arg, (int)'=');

  if (!p)
    return 1;

  *value = xstrdup (++p);

  len = strlen (arg) - strlen (*value);
  *name = XMALLOC (char, len);
  strncpy (*name, arg, len-1);
  (*name)[len - 1] = '\0';

  return 0;
}

void
lt_opt_process_env_set (const char *arg)
{
  char *name = NULL;
  char *value = NULL;

  if (lt_split_name_value (arg, &name, &value) != 0)
    {
      XFREE (name);
      XFREE (value);
      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
    }

  lt_setenv (name, value);
  XFREE (name);
  XFREE (value);
}

void
lt_opt_process_env_prepend (const char *arg)
{
  char *name = NULL;
  char *value = NULL;
  char *new_value = NULL;

  if (lt_split_name_value (arg, &name, &value) != 0)
    {
      XFREE (name);
      XFREE (value);
      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
    }

  new_value = lt_extend_str (getenv (name), value, 0);
  lt_setenv (name, new_value);
  XFREE (new_value);
  XFREE (name);
  XFREE (value);
}

void
lt_opt_process_env_append (const char *arg)
{
  char *name = NULL;
  char *value = NULL;
  char *new_value = NULL;

  if (lt_split_name_value (arg, &name, &value) != 0)
    {
      XFREE (name);
      XFREE (value);
      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
    }

  new_value = lt_extend_str (getenv (name), value, 1);
  lt_setenv (name, new_value);
  XFREE (new_value);
  XFREE (name);
  XFREE (value);
}

void
lt_update_exe_path (const char *name, const char *value)
{
  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
                          (name ? name : "<NULL>"),
                          (value ? value : "<NULL>")));

  if (name && *name && value && *value)
    {
      char *new_value = lt_extend_str (getenv (name), value, 0);
      /* some systems can't cope with a ':'-terminated path #' */
      int len = strlen (new_value);
      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
        {
          new_value[len-1] = '\0';
        }
      lt_setenv (name, new_value);
      XFREE (new_value);
    }
}

void
lt_update_lib_path (const char *name, const char *value)
{
  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
                          (name ? name : "<NULL>"),
                          (value ? value : "<NULL>")));

  if (name && *name && value && *value)
    {
      char *new_value = lt_extend_str (getenv (name), value, 0);
      lt_setenv (name, new_value);
      XFREE (new_value);
    }
}


EOF
}
# end: func_emit_cwrapperexe_src

# func_mode_link arg...
func_mode_link ()
{
    $opt_debug
    case $host in
    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
      # It is impossible to link a dll without this setting, and
      # we shouldn't force the makefile maintainer to figure out
      # which system we are compiling for in order to pass an extra
      # flag for every libtool invocation.
      # allow_undefined=no

      # FIXME: Unfortunately, there are problems with the above when trying
      # to make a dll which has undefined symbols, in which case not
      # even a static library is built.  For now, we need to specify
      # -no-undefined on the libtool link line when we can be certain
      # that all symbols are satisfied, otherwise we get a static library.
      allow_undefined=yes
      ;;
    *)
      allow_undefined=yes
      ;;
    esac
    libtool_args=$nonopt
    base_compile="$nonopt $@"
    compile_command=$nonopt
    finalize_command=$nonopt

    compile_rpath=
    finalize_rpath=
    compile_shlibpath=
    finalize_shlibpath=
    convenience=
    old_convenience=
    deplibs=
    old_deplibs=
    compiler_flags=
    linker_flags=
    dllsearchpath=
    lib_search_path=`pwd`
    inst_prefix_dir=
    new_inherited_linker_flags=

    avoid_version=no
    dlfiles=
    dlprefiles=
    dlself=no
    export_dynamic=no
    export_symbols=
    export_symbols_regex=
    generated=
    libobjs=
    ltlibs=
    module=no
    no_install=no
    objs=
    non_pic_objects=
    precious_files_regex=
    prefer_static_libs=no
    preload=no
    prev=
    prevarg=
    release=
    rpath=
    xrpath=
    perm_rpath=
    temp_rpath=
    thread_safe=no
    vinfo=
    vinfo_number=no
    weak_libs=
    single_module="${wl}-single_module"
    func_infer_tag $base_compile

    # We need to know -static, to get the right output filenames.
    for arg
    do
      case $arg in
      -shared)
	test "$build_libtool_libs" != yes && \
	  func_fatal_configuration "can not build a shared library"
	build_old_libs=no
	break
	;;
      -all-static | -static | -static-libtool-libs)
	case $arg in
	-all-static)
	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
	    func_warning "complete static linking is impossible in this configuration"
	  fi
	  if test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	  prefer_static_libs=yes
	  ;;
	-static)
	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	  prefer_static_libs=built
	  ;;
	-static-libtool-libs)
	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	  prefer_static_libs=yes
	  ;;
	esac
	build_libtool_libs=no
	build_old_libs=yes
	break
	;;
      esac
    done

    # See if our shared archives depend on static archives.
    test -n "$old_archive_from_new_cmds" && build_old_libs=yes

    # Go through the arguments, transforming them on the way.
    while test "$#" -gt 0; do
      arg="$1"
      shift
      func_quote_for_eval "$arg"
      qarg=$func_quote_for_eval_unquoted_result
      func_append libtool_args " $func_quote_for_eval_result"

      # If the previous option needs an argument, assign it.
      if test -n "$prev"; then
	case $prev in
	output)
	  func_append compile_command " @OUTPUT@"
	  func_append finalize_command " @OUTPUT@"
	  ;;
	esac

	case $prev in
	dlfiles|dlprefiles)
	  if test "$preload" = no; then
	    # Add the symbol object into the linking commands.
	    func_append compile_command " @SYMFILE@"
	    func_append finalize_command " @SYMFILE@"
	    preload=yes
	  fi
	  case $arg in
	  *.la | *.lo) ;;  # We handle these cases below.
	  force)
	    if test "$dlself" = no; then
	      dlself=needless
	      export_dynamic=yes
	    fi
	    prev=
	    continue
	    ;;
	  self)
	    if test "$prev" = dlprefiles; then
	      dlself=yes
	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
	      dlself=yes
	    else
	      dlself=needless
	      export_dynamic=yes
	    fi
	    prev=
	    continue
	    ;;
	  *)
	    if test "$prev" = dlfiles; then
	      dlfiles="$dlfiles $arg"
	    else
	      dlprefiles="$dlprefiles $arg"
	    fi
	    prev=
	    continue
	    ;;
	  esac
	  ;;
	expsyms)
	  export_symbols="$arg"
	  test -f "$arg" \
	    || func_fatal_error "symbol file \`$arg' does not exist"
	  prev=
	  continue
	  ;;
	expsyms_regex)
	  export_symbols_regex="$arg"
	  prev=
	  continue
	  ;;
	framework)
	  case $host in
	    *-*-darwin*)
	      case "$deplibs " in
		*" $qarg.ltframework "*) ;;
		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
		   ;;
	      esac
	      ;;
	  esac
	  prev=
	  continue
	  ;;
	inst_prefix)
	  inst_prefix_dir="$arg"
	  prev=
	  continue
	  ;;
	objectlist)
	  if test -f "$arg"; then
	    save_arg=$arg
	    moreargs=
	    for fil in `cat "$save_arg"`
	    do
#	      moreargs="$moreargs $fil"
	      arg=$fil
	      # A libtool-controlled object.

	      # Check to see that this really is a libtool object.
	      if func_lalib_unsafe_p "$arg"; then
		pic_object=
		non_pic_object=

		# Read the .lo file
		func_source "$arg"

		if test -z "$pic_object" ||
		   test -z "$non_pic_object" ||
		   test "$pic_object" = none &&
		   test "$non_pic_object" = none; then
		  func_fatal_error "cannot find name of object for \`$arg'"
		fi

		# Extract subdirectory from the argument.
		func_dirname "$arg" "/" ""
		xdir="$func_dirname_result"

		if test "$pic_object" != none; then
		  # Prepend the subdirectory the object is found in.
		  pic_object="$xdir$pic_object"

		  if test "$prev" = dlfiles; then
		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
		      dlfiles="$dlfiles $pic_object"
		      prev=
		      continue
		    else
		      # If libtool objects are unsupported, then we need to preload.
		      prev=dlprefiles
		    fi
		  fi

		  # CHECK ME:  I think I busted this.  -Ossama
		  if test "$prev" = dlprefiles; then
		    # Preload the old-style object.
		    dlprefiles="$dlprefiles $pic_object"
		    prev=
		  fi

		  # A PIC object.
		  func_append libobjs " $pic_object"
		  arg="$pic_object"
		fi

		# Non-PIC object.
		if test "$non_pic_object" != none; then
		  # Prepend the subdirectory the object is found in.
		  non_pic_object="$xdir$non_pic_object"

		  # A standard non-PIC object
		  func_append non_pic_objects " $non_pic_object"
		  if test -z "$pic_object" || test "$pic_object" = none ; then
		    arg="$non_pic_object"
		  fi
		else
		  # If the PIC object exists, use it instead.
		  # $xdir was prepended to $pic_object above.
		  non_pic_object="$pic_object"
		  func_append non_pic_objects " $non_pic_object"
		fi
	      else
		# Only an error if not doing a dry-run.
		if $opt_dry_run; then
		  # Extract subdirectory from the argument.
		  func_dirname "$arg" "/" ""
		  xdir="$func_dirname_result"

		  func_lo2o "$arg"
		  pic_object=$xdir$objdir/$func_lo2o_result
		  non_pic_object=$xdir$func_lo2o_result
		  func_append libobjs " $pic_object"
		  func_append non_pic_objects " $non_pic_object"
	        else
		  func_fatal_error "\`$arg' is not a valid libtool object"
		fi
	      fi
	    done
	  else
	    func_fatal_error "link input file \`$arg' does not exist"
	  fi
	  arg=$save_arg
	  prev=
	  continue
	  ;;
	precious_regex)
	  precious_files_regex="$arg"
	  prev=
	  continue
	  ;;
	release)
	  release="-$arg"
	  prev=
	  continue
	  ;;
	rpath | xrpath)
	  # We need an absolute path.
	  case $arg in
	  [\\/]* | [A-Za-z]:[\\/]*) ;;
	  *)
	    func_fatal_error "only absolute run-paths are allowed"
	    ;;
	  esac
	  if test "$prev" = rpath; then
	    case "$rpath " in
	    *" $arg "*) ;;
	    *) rpath="$rpath $arg" ;;
	    esac
	  else
	    case "$xrpath " in
	    *" $arg "*) ;;
	    *) xrpath="$xrpath $arg" ;;
	    esac
	  fi
	  prev=
	  continue
	  ;;
	shrext)
	  shrext_cmds="$arg"
	  prev=
	  continue
	  ;;
	weak)
	  weak_libs="$weak_libs $arg"
	  prev=
	  continue
	  ;;
	xcclinker)
	  linker_flags="$linker_flags $qarg"
	  compiler_flags="$compiler_flags $qarg"
	  prev=
	  func_append compile_command " $qarg"
	  func_append finalize_command " $qarg"
	  continue
	  ;;
	xcompiler)
	  compiler_flags="$compiler_flags $qarg"
	  prev=
	  func_append compile_command " $qarg"
	  func_append finalize_command " $qarg"
	  continue
	  ;;
	xlinker)
	  linker_flags="$linker_flags $qarg"
	  compiler_flags="$compiler_flags $wl$qarg"
	  prev=
	  func_append compile_command " $wl$qarg"
	  func_append finalize_command " $wl$qarg"
	  continue
	  ;;
	*)
	  eval "$prev=\"\$arg\""
	  prev=
	  continue
	  ;;
	esac
      fi # test -n "$prev"

      prevarg="$arg"

      case $arg in
      -all-static)
	if test -n "$link_static_flag"; then
	  # See comment for -static flag below, for more details.
	  func_append compile_command " $link_static_flag"
	  func_append finalize_command " $link_static_flag"
	fi
	continue
	;;

      -allow-undefined)
	# FIXME: remove this flag sometime in the future.
	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
	;;

      -avoid-version)
	avoid_version=yes
	continue
	;;

      -dlopen)
	prev=dlfiles
	continue
	;;

      -dlpreopen)
	prev=dlprefiles
	continue
	;;

      -export-dynamic)
	export_dynamic=yes
	continue
	;;

      -export-symbols | -export-symbols-regex)
	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
	  func_fatal_error "more than one -exported-symbols argument is not allowed"
	fi
	if test "X$arg" = "X-export-symbols"; then
	  prev=expsyms
	else
	  prev=expsyms_regex
	fi
	continue
	;;

      -framework)
	prev=framework
	continue
	;;

      -inst-prefix-dir)
	prev=inst_prefix
	continue
	;;

      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
      # so, if we see these flags be careful not to treat them like -L
      -L[A-Z][A-Z]*:*)
	case $with_gcc/$host in
	no/*-*-irix* | /*-*-irix*)
	  func_append compile_command " $arg"
	  func_append finalize_command " $arg"
	  ;;
	esac
	continue
	;;

      -L*)
	func_stripname '-L' '' "$arg"
	dir=$func_stripname_result
	if test -z "$dir"; then
	  if test "$#" -gt 0; then
	    func_fatal_error "require no space between \`-L' and \`$1'"
	  else
	    func_fatal_error "need path for \`-L' option"
	  fi
	fi
	# We need an absolute path.
	case $dir in
	[\\/]* | [A-Za-z]:[\\/]*) ;;
	*)
	  absdir=`cd "$dir" && pwd`
	  test -z "$absdir" && \
	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
	  dir="$absdir"
	  ;;
	esac
	case "$deplibs " in
	*" -L$dir "*) ;;
	*)
	  deplibs="$deplibs -L$dir"
	  lib_search_path="$lib_search_path $dir"
	  ;;
	esac
	case $host in
	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
	  case :$dllsearchpath: in
	  *":$dir:"*) ;;
	  ::) dllsearchpath=$dir;;
	  *) dllsearchpath="$dllsearchpath:$dir";;
	  esac
	  case :$dllsearchpath: in
	  *":$testbindir:"*) ;;
	  ::) dllsearchpath=$testbindir;;
	  *) dllsearchpath="$dllsearchpath:$testbindir";;
	  esac
	  ;;
	esac
	continue
	;;

      -l*)
	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
	  case $host in
	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
	    # These systems don't actually have a C or math library (as such)
	    continue
	    ;;
	  *-*-os2*)
	    # These systems don't actually have a C library (as such)
	    test "X$arg" = "X-lc" && continue
	    ;;
	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	    # Do not include libc due to us having libc/libc_r.
	    test "X$arg" = "X-lc" && continue
	    ;;
	  *-*-rhapsody* | *-*-darwin1.[012])
	    # Rhapsody C and math libraries are in the System framework
	    deplibs="$deplibs System.ltframework"
	    continue
	    ;;
	  *-*-sco3.2v5* | *-*-sco5v6*)
	    # Causes problems with __ctype
	    test "X$arg" = "X-lc" && continue
	    ;;
	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
	    # Compiler inserts libc in the correct place for threads to work
	    test "X$arg" = "X-lc" && continue
	    ;;
	  esac
	elif test "X$arg" = "X-lc_r"; then
	 case $host in
	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	   # Do not include libc_r directly, use -pthread flag.
	   continue
	   ;;
	 esac
	fi
	deplibs="$deplibs $arg"
	continue
	;;

      -module)
	module=yes
	continue
	;;

      # Tru64 UNIX uses -model [arg] to determine the layout of C++
      # classes, name mangling, and exception handling.
      # Darwin uses the -arch flag to determine output architecture.
      -model|-arch|-isysroot)
	compiler_flags="$compiler_flags $arg"
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
	prev=xcompiler
	continue
	;;

      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
	compiler_flags="$compiler_flags $arg"
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
	case "$new_inherited_linker_flags " in
	    *" $arg "*) ;;
	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
	esac
	continue
	;;

      -multi_module)
	single_module="${wl}-multi_module"
	continue
	;;

      -no-fast-install)
	fast_install=no
	continue
	;;

      -no-install)
	case $host in
	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
	  # The PATH hackery in wrapper scripts is required on Windows
	  # and Darwin in order for the loader to find any dlls it needs.
	  func_warning "\`-no-install' is ignored for $host"
	  func_warning "assuming \`-no-fast-install' instead"
	  fast_install=no
	  ;;
	*) no_install=yes ;;
	esac
	continue
	;;

      -no-undefined)
	allow_undefined=no
	continue
	;;

      -objectlist)
	prev=objectlist
	continue
	;;

      -o) prev=output ;;

      -precious-files-regex)
	prev=precious_regex
	continue
	;;

      -release)
	prev=release
	continue
	;;

      -rpath)
	prev=rpath
	continue
	;;

      -R)
	prev=xrpath
	continue
	;;

      -R*)
	func_stripname '-R' '' "$arg"
	dir=$func_stripname_result
	# We need an absolute path.
	case $dir in
	[\\/]* | [A-Za-z]:[\\/]*) ;;
	*)
	  func_fatal_error "only absolute run-paths are allowed"
	  ;;
	esac
	case "$xrpath " in
	*" $dir "*) ;;
	*) xrpath="$xrpath $dir" ;;
	esac
	continue
	;;

      -shared)
	# The effects of -shared are defined in a previous loop.
	continue
	;;

      -shrext)
	prev=shrext
	continue
	;;

      -static | -static-libtool-libs)
	# The effects of -static are defined in a previous loop.
	# We used to do the same as -all-static on platforms that
	# didn't have a PIC flag, but the assumption that the effects
	# would be equivalent was wrong.  It would break on at least
	# Digital Unix and AIX.
	continue
	;;

      -thread-safe)
	thread_safe=yes
	continue
	;;

      -version-info)
	prev=vinfo
	continue
	;;

      -version-number)
	prev=vinfo
	vinfo_number=yes
	continue
	;;

      -weak)
        prev=weak
	continue
	;;

      -Wc,*)
	func_stripname '-Wc,' '' "$arg"
	args=$func_stripname_result
	arg=
	save_ifs="$IFS"; IFS=','
	for flag in $args; do
	  IFS="$save_ifs"
          func_quote_for_eval "$flag"
	  arg="$arg $wl$func_quote_for_eval_result"
	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
	done
	IFS="$save_ifs"
	func_stripname ' ' '' "$arg"
	arg=$func_stripname_result
	;;

      -Wl,*)
	func_stripname '-Wl,' '' "$arg"
	args=$func_stripname_result
	arg=
	save_ifs="$IFS"; IFS=','
	for flag in $args; do
	  IFS="$save_ifs"
          func_quote_for_eval "$flag"
	  arg="$arg $wl$func_quote_for_eval_result"
	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
	  linker_flags="$linker_flags $func_quote_for_eval_result"
	done
	IFS="$save_ifs"
	func_stripname ' ' '' "$arg"
	arg=$func_stripname_result
	;;

      -Xcompiler)
	prev=xcompiler
	continue
	;;

      -Xlinker)
	prev=xlinker
	continue
	;;

      -XCClinker)
	prev=xcclinker
	continue
	;;

      # -msg_* for osf cc
      -msg_*)
	func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
	;;

      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
      # -r[0-9][0-9]* specifies the processor on the SGI compiler
      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
      # +DA*, +DD* enable 64-bit mode on the HP compiler
      # -q* pass through compiler args for the IBM compiler
      # -m*, -t[45]*, -txscale* pass through architecture-specific
      # compiler args for GCC
      # -F/path gives path to uninstalled frameworks, gcc on darwin
      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
      # @file GCC response files
      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
        func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        compiler_flags="$compiler_flags $arg"
        continue
        ;;

      # Some other compiler flag.
      -* | +*)
        func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
	;;

      *.$objext)
	# A standard object.
	objs="$objs $arg"
	;;

      *.lo)
	# A libtool-controlled object.

	# Check to see that this really is a libtool object.
	if func_lalib_unsafe_p "$arg"; then
	  pic_object=
	  non_pic_object=

	  # Read the .lo file
	  func_source "$arg"

	  if test -z "$pic_object" ||
	     test -z "$non_pic_object" ||
	     test "$pic_object" = none &&
	     test "$non_pic_object" = none; then
	    func_fatal_error "cannot find name of object for \`$arg'"
	  fi

	  # Extract subdirectory from the argument.
	  func_dirname "$arg" "/" ""
	  xdir="$func_dirname_result"

	  if test "$pic_object" != none; then
	    # Prepend the subdirectory the object is found in.
	    pic_object="$xdir$pic_object"

	    if test "$prev" = dlfiles; then
	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
		dlfiles="$dlfiles $pic_object"
		prev=
		continue
	      else
		# If libtool objects are unsupported, then we need to preload.
		prev=dlprefiles
	      fi
	    fi

	    # CHECK ME:  I think I busted this.  -Ossama
	    if test "$prev" = dlprefiles; then
	      # Preload the old-style object.
	      dlprefiles="$dlprefiles $pic_object"
	      prev=
	    fi

	    # A PIC object.
	    func_append libobjs " $pic_object"
	    arg="$pic_object"
	  fi

	  # Non-PIC object.
	  if test "$non_pic_object" != none; then
	    # Prepend the subdirectory the object is found in.
	    non_pic_object="$xdir$non_pic_object"

	    # A standard non-PIC object
	    func_append non_pic_objects " $non_pic_object"
	    if test -z "$pic_object" || test "$pic_object" = none ; then
	      arg="$non_pic_object"
	    fi
	  else
	    # If the PIC object exists, use it instead.
	    # $xdir was prepended to $pic_object above.
	    non_pic_object="$pic_object"
	    func_append non_pic_objects " $non_pic_object"
	  fi
	else
	  # Only an error if not doing a dry-run.
	  if $opt_dry_run; then
	    # Extract subdirectory from the argument.
	    func_dirname "$arg" "/" ""
	    xdir="$func_dirname_result"

	    func_lo2o "$arg"
	    pic_object=$xdir$objdir/$func_lo2o_result
	    non_pic_object=$xdir$func_lo2o_result
	    func_append libobjs " $pic_object"
	    func_append non_pic_objects " $non_pic_object"
	  else
	    func_fatal_error "\`$arg' is not a valid libtool object"
	  fi
	fi
	;;

      *.$libext)
	# An archive.
	deplibs="$deplibs $arg"
	old_deplibs="$old_deplibs $arg"
	continue
	;;

      *.la)
	# A libtool-controlled library.

	if test "$prev" = dlfiles; then
	  # This library was specified with -dlopen.
	  dlfiles="$dlfiles $arg"
	  prev=
	elif test "$prev" = dlprefiles; then
	  # The library was specified with -dlpreopen.
	  dlprefiles="$dlprefiles $arg"
	  prev=
	else
	  deplibs="$deplibs $arg"
	fi
	continue
	;;

      # Some other compiler argument.
      *)
	# Unknown arguments in both finalize_command and compile_command need
	# to be aesthetically quoted because they are evaled later.
	func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
	;;
      esac # arg

      # Now actually substitute the argument into the commands.
      if test -n "$arg"; then
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
      fi
    done # argument parsing loop

    test -n "$prev" && \
      func_fatal_help "the \`$prevarg' option requires an argument"

    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
      eval arg=\"$export_dynamic_flag_spec\"
      func_append compile_command " $arg"
      func_append finalize_command " $arg"
    fi

    oldlibs=
    # calculate the name of the file, without its directory
    func_basename "$output"
    outputname="$func_basename_result"
    libobjs_save="$libobjs"

    if test -n "$shlibpath_var"; then
      # get the directories listed in $shlibpath_var
      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
    else
      shlib_search_path=
    fi
    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"

    func_dirname "$output" "/" ""
    output_objdir="$func_dirname_result$objdir"
    # Create the object directory.
    func_mkdir_p "$output_objdir"

    # Determine the type of output
    case $output in
    "")
      func_fatal_help "you must specify an output file"
      ;;
    *.$libext) linkmode=oldlib ;;
    *.lo | *.$objext) linkmode=obj ;;
    *.la) linkmode=lib ;;
    *) linkmode=prog ;; # Anything else should be a program.
    esac

    specialdeplibs=

    libs=
    # Find all interdependent deplibs by searching for libraries
    # that are linked more than once (e.g. -la -lb -la)
    for deplib in $deplibs; do
      if $opt_duplicate_deps ; then
	case "$libs " in
	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
	esac
      fi
      libs="$libs $deplib"
    done

    if test "$linkmode" = lib; then
      libs="$predeps $libs $compiler_lib_search_path $postdeps"

      # Compute libraries that are listed more than once in $predeps
      # $postdeps and mark them as special (i.e., whose duplicates are
      # not to be eliminated).
      pre_post_deps=
      if $opt_duplicate_compiler_generated_deps; then
	for pre_post_dep in $predeps $postdeps; do
	  case "$pre_post_deps " in
	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
	  esac
	  pre_post_deps="$pre_post_deps $pre_post_dep"
	done
      fi
      pre_post_deps=
    fi

    deplibs=
    newdependency_libs=
    newlib_search_path=
    need_relink=no # whether we're linking any uninstalled libtool libraries
    notinst_deplibs= # not-installed libtool libraries
    notinst_path= # paths that contain not-installed libtool libraries

    case $linkmode in
    lib)
	passes="conv dlpreopen link"
	for file in $dlfiles $dlprefiles; do
	  case $file in
	  *.la) ;;
	  *)
	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
	    ;;
	  esac
	done
	;;
    prog)
	compile_deplibs=
	finalize_deplibs=
	alldeplibs=no
	newdlfiles=
	newdlprefiles=
	passes="conv scan dlopen dlpreopen link"
	;;
    *)  passes="conv"
	;;
    esac

    for pass in $passes; do
      # The preopen pass in lib mode reverses $deplibs; put it back here
      # so that -L comes before libs that need it for instance...
      if test "$linkmode,$pass" = "lib,link"; then
	## FIXME: Find the place where the list is rebuilt in the wrong
	##        order, and fix it there properly
        tmp_deplibs=
	for deplib in $deplibs; do
	  tmp_deplibs="$deplib $tmp_deplibs"
	done
	deplibs="$tmp_deplibs"
      fi

      if test "$linkmode,$pass" = "lib,link" ||
	 test "$linkmode,$pass" = "prog,scan"; then
	libs="$deplibs"
	deplibs=
      fi
      if test "$linkmode" = prog; then
	case $pass in
	dlopen) libs="$dlfiles" ;;
	dlpreopen) libs="$dlprefiles" ;;
	link)
	  libs="$deplibs %DEPLIBS%"
	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
	  ;;
	esac
      fi
      if test "$linkmode,$pass" = "lib,dlpreopen"; then
	# Collect and forward deplibs of preopened libtool libs
	for lib in $dlprefiles; do
	  # Ignore non-libtool-libs
	  dependency_libs=
	  case $lib in
	  *.la)	func_source "$lib" ;;
	  esac

	  # Collect preopened libtool deplibs, except any this library
	  # has declared as weak libs
	  for deplib in $dependency_libs; do
            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
	    case " $weak_libs " in
	    *" $deplib_base "*) ;;
	    *) deplibs="$deplibs $deplib" ;;
	    esac
	  done
	done
	libs="$dlprefiles"
      fi
      if test "$pass" = dlopen; then
	# Collect dlpreopened libraries
	save_deplibs="$deplibs"
	deplibs=
      fi

      for deplib in $libs; do
	lib=
	found=no
	case $deplib in
	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
	  if test "$linkmode,$pass" = "prog,link"; then
	    compile_deplibs="$deplib $compile_deplibs"
	    finalize_deplibs="$deplib $finalize_deplibs"
	  else
	    compiler_flags="$compiler_flags $deplib"
	    if test "$linkmode" = lib ; then
		case "$new_inherited_linker_flags " in
		    *" $deplib "*) ;;
		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
		esac
	    fi
	  fi
	  continue
	  ;;
	-l*)
	  if test "$linkmode" != lib && test "$linkmode" != prog; then
	    func_warning "\`-l' is ignored for archives/objects"
	    continue
	  fi
	  func_stripname '-l' '' "$deplib"
	  name=$func_stripname_result
	  if test "$linkmode" = lib; then
	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
	  else
	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
	  fi
	  for searchdir in $searchdirs; do
	    for search_ext in .la $std_shrext .so .a; do
	      # Search the libtool library
	      lib="$searchdir/lib${name}${search_ext}"
	      if test -f "$lib"; then
		if test "$search_ext" = ".la"; then
		  found=yes
		else
		  found=no
		fi
		break 2
	      fi
	    done
	  done
	  if test "$found" != yes; then
	    # deplib doesn't seem to be a libtool library
	    if test "$linkmode,$pass" = "prog,link"; then
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    else
	      deplibs="$deplib $deplibs"
	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
	    fi
	    continue
	  else # deplib is a libtool library
	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
	    # We need to do some special things here, and not later.
	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
	      case " $predeps $postdeps " in
	      *" $deplib "*)
		if func_lalib_p "$lib"; then
		  library_names=
		  old_library=
		  func_source "$lib"
		  for l in $old_library $library_names; do
		    ll="$l"
		  done
		  if test "X$ll" = "X$old_library" ; then # only static version available
		    found=no
		    func_dirname "$lib" "" "."
		    ladir="$func_dirname_result"
		    lib=$ladir/$old_library
		    if test "$linkmode,$pass" = "prog,link"; then
		      compile_deplibs="$deplib $compile_deplibs"
		      finalize_deplibs="$deplib $finalize_deplibs"
		    else
		      deplibs="$deplib $deplibs"
		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
		    fi
		    continue
		  fi
		fi
		;;
	      *) ;;
	      esac
	    fi
	  fi
	  ;; # -l
	*.ltframework)
	  if test "$linkmode,$pass" = "prog,link"; then
	    compile_deplibs="$deplib $compile_deplibs"
	    finalize_deplibs="$deplib $finalize_deplibs"
	  else
	    deplibs="$deplib $deplibs"
	    if test "$linkmode" = lib ; then
		case "$new_inherited_linker_flags " in
		    *" $deplib "*) ;;
		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
		esac
	    fi
	  fi
	  continue
	  ;;
	-L*)
	  case $linkmode in
	  lib)
	    deplibs="$deplib $deplibs"
	    test "$pass" = conv && continue
	    newdependency_libs="$deplib $newdependency_libs"
	    func_stripname '-L' '' "$deplib"
	    newlib_search_path="$newlib_search_path $func_stripname_result"
	    ;;
	  prog)
	    if test "$pass" = conv; then
	      deplibs="$deplib $deplibs"
	      continue
	    fi
	    if test "$pass" = scan; then
	      deplibs="$deplib $deplibs"
	    else
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    fi
	    func_stripname '-L' '' "$deplib"
	    newlib_search_path="$newlib_search_path $func_stripname_result"
	    ;;
	  *)
	    func_warning "\`-L' is ignored for archives/objects"
	    ;;
	  esac # linkmode
	  continue
	  ;; # -L
	-R*)
	  if test "$pass" = link; then
	    func_stripname '-R' '' "$deplib"
	    dir=$func_stripname_result
	    # Make sure the xrpath contains only unique directories.
	    case "$xrpath " in
	    *" $dir "*) ;;
	    *) xrpath="$xrpath $dir" ;;
	    esac
	  fi
	  deplibs="$deplib $deplibs"
	  continue
	  ;;
	*.la) lib="$deplib" ;;
	*.$libext)
	  if test "$pass" = conv; then
	    deplibs="$deplib $deplibs"
	    continue
	  fi
	  case $linkmode in
	  lib)
	    # Linking convenience modules into shared libraries is allowed,
	    # but linking other static libraries is non-portable.
	    case " $dlpreconveniencelibs " in
	    *" $deplib "*) ;;
	    *)
	      valid_a_lib=no
	      case $deplibs_check_method in
		match_pattern*)
		  set dummy $deplibs_check_method; shift
		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
		    | $EGREP "$match_pattern_regex" > /dev/null; then
		    valid_a_lib=yes
		  fi
		;;
		pass_all)
		  valid_a_lib=yes
		;;
	      esac
	      if test "$valid_a_lib" != yes; then
		$ECHO
		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
		$ECHO "*** I have the capability to make that library automatically link in when"
		$ECHO "*** you link to this library.  But I can only do this if you have a"
		$ECHO "*** shared version of the library, which you do not appear to have"
		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
		$ECHO "*** that it is just a static archive that I should not use here."
	      else
		$ECHO
		$ECHO "*** Warning: Linking the shared library $output against the"
		$ECHO "*** static library $deplib is not portable!"
		deplibs="$deplib $deplibs"
	      fi
	      ;;
	    esac
	    continue
	    ;;
	  prog)
	    if test "$pass" != link; then
	      deplibs="$deplib $deplibs"
	    else
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    fi
	    continue
	    ;;
	  esac # linkmode
	  ;; # *.$libext
	*.lo | *.$objext)
	  if test "$pass" = conv; then
	    deplibs="$deplib $deplibs"
	  elif test "$linkmode" = prog; then
	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
	      # If there is no dlopen support or we're linking statically,
	      # we need to preload.
	      newdlprefiles="$newdlprefiles $deplib"
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    else
	      newdlfiles="$newdlfiles $deplib"
	    fi
	  fi
	  continue
	  ;;
	%DEPLIBS%)
	  alldeplibs=yes
	  continue
	  ;;
	esac # case $deplib

	if test "$found" = yes || test -f "$lib"; then :
	else
	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
	fi

	# Check to see that this really is a libtool archive.
	func_lalib_unsafe_p "$lib" \
	  || func_fatal_error "\`$lib' is not a valid libtool archive"

	func_dirname "$lib" "" "."
	ladir="$func_dirname_result"

	dlname=
	dlopen=
	dlpreopen=
	libdir=
	library_names=
	old_library=
	inherited_linker_flags=
	# If the library was installed with an old release of libtool,
	# it will not redefine variables installed, or shouldnotlink
	installed=yes
	shouldnotlink=no
	avoidtemprpath=


	# Read the .la file
	func_source "$lib"

	# Convert "-framework foo" to "foo.ltframework"
	if test -n "$inherited_linker_flags"; then
	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
	    case " $new_inherited_linker_flags " in
	      *" $tmp_inherited_linker_flag "*) ;;
	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
	    esac
	  done
	fi
	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	if test "$linkmode,$pass" = "lib,link" ||
	   test "$linkmode,$pass" = "prog,scan" ||
	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
	fi

	if test "$pass" = conv; then
	  # Only check for convenience libraries
	  deplibs="$lib $deplibs"
	  if test -z "$libdir"; then
	    if test -z "$old_library"; then
	      func_fatal_error "cannot find name of link library for \`$lib'"
	    fi
	    # It is a libtool convenience library, so add in its objects.
	    convenience="$convenience $ladir/$objdir/$old_library"
	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
	    tmp_libs=
	    for deplib in $dependency_libs; do
	      deplibs="$deplib $deplibs"
	      if $opt_duplicate_deps ; then
		case "$tmp_libs " in
		*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
		esac
	      fi
	      tmp_libs="$tmp_libs $deplib"
	    done
	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
	    func_fatal_error "\`$lib' is not a convenience library"
	  fi
	  continue
	fi # $pass = conv


	# Get the name of the library we link against.
	linklib=
	for l in $old_library $library_names; do
	  linklib="$l"
	done
	if test -z "$linklib"; then
	  func_fatal_error "cannot find name of link library for \`$lib'"
	fi

	# This library was specified with -dlopen.
	if test "$pass" = dlopen; then
	  if test -z "$libdir"; then
	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
	  fi
	  if test -z "$dlname" ||
	     test "$dlopen_support" != yes ||
	     test "$build_libtool_libs" = no; then
	    # If there is no dlname, no dlopen support or we're linking
	    # statically, we need to preload.  We also need to preload any
	    # dependent libraries so libltdl's deplib preloader doesn't
	    # bomb out in the load deplibs phase.
	    dlprefiles="$dlprefiles $lib $dependency_libs"
	  else
	    newdlfiles="$newdlfiles $lib"
	  fi
	  continue
	fi # $pass = dlopen

	# We need an absolute path.
	case $ladir in
	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
	*)
	  abs_ladir=`cd "$ladir" && pwd`
	  if test -z "$abs_ladir"; then
	    func_warning "cannot determine absolute directory name of \`$ladir'"
	    func_warning "passing it literally to the linker, although it might fail"
	    abs_ladir="$ladir"
	  fi
	  ;;
	esac
	func_basename "$lib"
	laname="$func_basename_result"

	# Find the relevant object directory and library name.
	if test "X$installed" = Xyes; then
	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
	    func_warning "library \`$lib' was moved."
	    dir="$ladir"
	    absdir="$abs_ladir"
	    libdir="$abs_ladir"
	  else
	    dir="$libdir"
	    absdir="$libdir"
	  fi
	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
	else
	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
	    dir="$ladir"
	    absdir="$abs_ladir"
	    # Remove this search path later
	    notinst_path="$notinst_path $abs_ladir"
	  else
	    dir="$ladir/$objdir"
	    absdir="$abs_ladir/$objdir"
	    # Remove this search path later
	    notinst_path="$notinst_path $abs_ladir"
	  fi
	fi # $installed = yes
	func_stripname 'lib' '.la' "$laname"
	name=$func_stripname_result

	# This library was specified with -dlpreopen.
	if test "$pass" = dlpreopen; then
	  if test -z "$libdir" && test "$linkmode" = prog; then
	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
	  fi
	  # Prefer using a static library (so that no silly _DYNAMIC symbols
	  # are required to link).
	  if test -n "$old_library"; then
	    newdlprefiles="$newdlprefiles $dir/$old_library"
	    # Keep a list of preopened convenience libraries to check
	    # that they are being used correctly in the link pass.
	    test -z "$libdir" && \
		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
	  # Otherwise, use the dlname, so that lt_dlopen finds it.
	  elif test -n "$dlname"; then
	    newdlprefiles="$newdlprefiles $dir/$dlname"
	  else
	    newdlprefiles="$newdlprefiles $dir/$linklib"
	  fi
	fi # $pass = dlpreopen

	if test -z "$libdir"; then
	  # Link the convenience library
	  if test "$linkmode" = lib; then
	    deplibs="$dir/$old_library $deplibs"
	  elif test "$linkmode,$pass" = "prog,link"; then
	    compile_deplibs="$dir/$old_library $compile_deplibs"
	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
	  else
	    deplibs="$lib $deplibs" # used for prog,scan pass
	  fi
	  continue
	fi


	if test "$linkmode" = prog && test "$pass" != link; then
	  newlib_search_path="$newlib_search_path $ladir"
	  deplibs="$lib $deplibs"

	  linkalldeplibs=no
	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
	     test "$build_libtool_libs" = no; then
	    linkalldeplibs=yes
	  fi

	  tmp_libs=
	  for deplib in $dependency_libs; do
	    case $deplib in
	    -L*) func_stripname '-L' '' "$deplib"
	         newlib_search_path="$newlib_search_path $func_stripname_result"
		 ;;
	    esac
	    # Need to link against all dependency_libs?
	    if test "$linkalldeplibs" = yes; then
	      deplibs="$deplib $deplibs"
	    else
	      # Need to hardcode shared library paths
	      # or/and link against static libraries
	      newdependency_libs="$deplib $newdependency_libs"
	    fi
	    if $opt_duplicate_deps ; then
	      case "$tmp_libs " in
	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
	      esac
	    fi
	    tmp_libs="$tmp_libs $deplib"
	  done # for deplib
	  continue
	fi # $linkmode = prog...

	if test "$linkmode,$pass" = "prog,link"; then
	  if test -n "$library_names" &&
	     { { test "$prefer_static_libs" = no ||
	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
	       test -z "$old_library"; }; then
	    # We need to hardcode the library path
	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
	      # Make sure the rpath contains only unique directories.
	      case "$temp_rpath:" in
	      *"$absdir:"*) ;;
	      *) temp_rpath="$temp_rpath$absdir:" ;;
	      esac
	    fi

	    # Hardcode the library path.
	    # Skip directories that are in the system default run-time
	    # search path.
	    case " $sys_lib_dlsearch_path " in
	    *" $absdir "*) ;;
	    *)
	      case "$compile_rpath " in
	      *" $absdir "*) ;;
	      *) compile_rpath="$compile_rpath $absdir"
	      esac
	      ;;
	    esac
	    case " $sys_lib_dlsearch_path " in
	    *" $libdir "*) ;;
	    *)
	      case "$finalize_rpath " in
	      *" $libdir "*) ;;
	      *) finalize_rpath="$finalize_rpath $libdir"
	      esac
	      ;;
	    esac
	  fi # $linkmode,$pass = prog,link...

	  if test "$alldeplibs" = yes &&
	     { test "$deplibs_check_method" = pass_all ||
	       { test "$build_libtool_libs" = yes &&
		 test -n "$library_names"; }; }; then
	    # We only need to search for static libraries
	    continue
	  fi
	fi

	link_static=no # Whether the deplib will be linked statically
	use_static_libs=$prefer_static_libs
	if test "$use_static_libs" = built && test "$installed" = yes; then
	  use_static_libs=no
	fi
	if test -n "$library_names" &&
	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
	  case $host in
	  *cygwin* | *mingw* | *cegcc*)
	      # No point in relinking DLLs because paths are not encoded
	      notinst_deplibs="$notinst_deplibs $lib"
	      need_relink=no
	    ;;
	  *)
	    if test "$installed" = no; then
	      notinst_deplibs="$notinst_deplibs $lib"
	      need_relink=yes
	    fi
	    ;;
	  esac
	  # This is a shared library

	  # Warn about portability, can't link against -module's on some
	  # systems (darwin).  Don't bleat about dlopened modules though!
	  dlopenmodule=""
	  for dlpremoduletest in $dlprefiles; do
	    if test "X$dlpremoduletest" = "X$lib"; then
	      dlopenmodule="$dlpremoduletest"
	      break
	    fi
	  done
	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
	    $ECHO
	    if test "$linkmode" = prog; then
	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
	    else
	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
	    fi
	    $ECHO "*** $linklib is not portable!"
	  fi
	  if test "$linkmode" = lib &&
	     test "$hardcode_into_libs" = yes; then
	    # Hardcode the library path.
	    # Skip directories that are in the system default run-time
	    # search path.
	    case " $sys_lib_dlsearch_path " in
	    *" $absdir "*) ;;
	    *)
	      case "$compile_rpath " in
	      *" $absdir "*) ;;
	      *) compile_rpath="$compile_rpath $absdir"
	      esac
	      ;;
	    esac
	    case " $sys_lib_dlsearch_path " in
	    *" $libdir "*) ;;
	    *)
	      case "$finalize_rpath " in
	      *" $libdir "*) ;;
	      *) finalize_rpath="$finalize_rpath $libdir"
	      esac
	      ;;
	    esac
	  fi

	  if test -n "$old_archive_from_expsyms_cmds"; then
	    # figure out the soname
	    set dummy $library_names
	    shift
	    realname="$1"
	    shift
	    libname=`eval "\\$ECHO \"$libname_spec\""`
	    # use dlname if we got it. it's perfectly good, no?
	    if test -n "$dlname"; then
	      soname="$dlname"
	    elif test -n "$soname_spec"; then
	      # bleh windows
	      case $host in
	      *cygwin* | mingw* | *cegcc*)
	        func_arith $current - $age
		major=$func_arith_result
		versuffix="-$major"
		;;
	      esac
	      eval soname=\"$soname_spec\"
	    else
	      soname="$realname"
	    fi

	    # Make a new name for the extract_expsyms_cmds to use
	    soroot="$soname"
	    func_basename "$soroot"
	    soname="$func_basename_result"
	    func_stripname 'lib' '.dll' "$soname"
	    newlib=libimp-$func_stripname_result.a

	    # If the library has no export list, then create one now
	    if test -f "$output_objdir/$soname-def"; then :
	    else
	      func_verbose "extracting exported symbol list from \`$soname'"
	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
	    fi

	    # Create $newlib
	    if test -f "$output_objdir/$newlib"; then :; else
	      func_verbose "generating import library for \`$soname'"
	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
	    fi
	    # make sure the library variables are pointing to the new library
	    dir=$output_objdir
	    linklib=$newlib
	  fi # test -n "$old_archive_from_expsyms_cmds"

	  if test "$linkmode" = prog || test "$mode" != relink; then
	    add_shlibpath=
	    add_dir=
	    add=
	    lib_linked=yes
	    case $hardcode_action in
	    immediate | unsupported)
	      if test "$hardcode_direct" = no; then
		add="$dir/$linklib"
		case $host in
		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
		    *-*-unixware7*) add_dir="-L$dir" ;;
		  *-*-darwin* )
		    # if the lib is a (non-dlopened) module then we can not
		    # link against it, someone is ignoring the earlier warnings
		    if /usr/bin/file -L $add 2> /dev/null |
			 $GREP ": [^:]* bundle" >/dev/null ; then
		      if test "X$dlopenmodule" != "X$lib"; then
			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
			if test -z "$old_library" ; then
			  $ECHO
			  $ECHO "*** And there doesn't seem to be a static archive available"
			  $ECHO "*** The link will probably fail, sorry"
			else
			  add="$dir/$old_library"
			fi
		      elif test -n "$old_library"; then
			add="$dir/$old_library"
		      fi
		    fi
		esac
	      elif test "$hardcode_minus_L" = no; then
		case $host in
		*-*-sunos*) add_shlibpath="$dir" ;;
		esac
		add_dir="-L$dir"
		add="-l$name"
	      elif test "$hardcode_shlibpath_var" = no; then
		add_shlibpath="$dir"
		add="-l$name"
	      else
		lib_linked=no
	      fi
	      ;;
	    relink)
	      if test "$hardcode_direct" = yes &&
	         test "$hardcode_direct_absolute" = no; then
		add="$dir/$linklib"
	      elif test "$hardcode_minus_L" = yes; then
		add_dir="-L$dir"
		# Try looking first in the location we're being installed to.
		if test -n "$inst_prefix_dir"; then
		  case $libdir in
		    [\\/]*)
		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
		      ;;
		  esac
		fi
		add="-l$name"
	      elif test "$hardcode_shlibpath_var" = yes; then
		add_shlibpath="$dir"
		add="-l$name"
	      else
		lib_linked=no
	      fi
	      ;;
	    *) lib_linked=no ;;
	    esac

	    if test "$lib_linked" != yes; then
	      func_fatal_configuration "unsupported hardcode properties"
	    fi

	    if test -n "$add_shlibpath"; then
	      case :$compile_shlibpath: in
	      *":$add_shlibpath:"*) ;;
	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
	      esac
	    fi
	    if test "$linkmode" = prog; then
	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
	    else
	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
	      test -n "$add" && deplibs="$add $deplibs"
	      if test "$hardcode_direct" != yes &&
		 test "$hardcode_minus_L" != yes &&
		 test "$hardcode_shlibpath_var" = yes; then
		case :$finalize_shlibpath: in
		*":$libdir:"*) ;;
		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
		esac
	      fi
	    fi
	  fi

	  if test "$linkmode" = prog || test "$mode" = relink; then
	    add_shlibpath=
	    add_dir=
	    add=
	    # Finalize command for both is simple: just hardcode it.
	    if test "$hardcode_direct" = yes &&
	       test "$hardcode_direct_absolute" = no; then
	      add="$libdir/$linklib"
	    elif test "$hardcode_minus_L" = yes; then
	      add_dir="-L$libdir"
	      add="-l$name"
	    elif test "$hardcode_shlibpath_var" = yes; then
	      case :$finalize_shlibpath: in
	      *":$libdir:"*) ;;
	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
	      esac
	      add="-l$name"
	    elif test "$hardcode_automatic" = yes; then
	      if test -n "$inst_prefix_dir" &&
		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
		add="$inst_prefix_dir$libdir/$linklib"
	      else
		add="$libdir/$linklib"
	      fi
	    else
	      # We cannot seem to hardcode it, guess we'll fake it.
	      add_dir="-L$libdir"
	      # Try looking first in the location we're being installed to.
	      if test -n "$inst_prefix_dir"; then
		case $libdir in
		  [\\/]*)
		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
		    ;;
		esac
	      fi
	      add="-l$name"
	    fi

	    if test "$linkmode" = prog; then
	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
	    else
	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
	      test -n "$add" && deplibs="$add $deplibs"
	    fi
	  fi
	elif test "$linkmode" = prog; then
	  # Here we assume that one of hardcode_direct or hardcode_minus_L
	  # is not unsupported.  This is valid on all known static and
	  # shared platforms.
	  if test "$hardcode_direct" != unsupported; then
	    test -n "$old_library" && linklib="$old_library"
	    compile_deplibs="$dir/$linklib $compile_deplibs"
	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
	  else
	    compile_deplibs="-l$name -L$dir $compile_deplibs"
	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
	  fi
	elif test "$build_libtool_libs" = yes; then
	  # Not a shared library
	  if test "$deplibs_check_method" != pass_all; then
	    # We're trying link a shared library against a static one
	    # but the system doesn't support it.

	    # Just print a warning and add the library to dependency_libs so
	    # that the program can be linked against the static library.
	    $ECHO
	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
	    $ECHO "*** I have the capability to make that library automatically link in when"
	    $ECHO "*** you link to this library.  But I can only do this if you have a"
	    $ECHO "*** shared version of the library, which you do not appear to have."
	    if test "$module" = yes; then
	      $ECHO "*** But as you try to build a module library, libtool will still create "
	      $ECHO "*** a static module, that should work as long as the dlopening application"
	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
	      if test -z "$global_symbol_pipe"; then
		$ECHO
		$ECHO "*** However, this would only work if libtool was able to extract symbol"
		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
		$ECHO "*** not find such a program.  So, this module is probably useless."
		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
	      fi
	      if test "$build_old_libs" = no; then
		build_libtool_libs=module
		build_old_libs=yes
	      else
		build_libtool_libs=no
	      fi
	    fi
	  else
	    deplibs="$dir/$old_library $deplibs"
	    link_static=yes
	  fi
	fi # link shared/static library?

	if test "$linkmode" = lib; then
	  if test -n "$dependency_libs" &&
	     { test "$hardcode_into_libs" != yes ||
	       test "$build_old_libs" = yes ||
	       test "$link_static" = yes; }; then
	    # Extract -R from dependency_libs
	    temp_deplibs=
	    for libdir in $dependency_libs; do
	      case $libdir in
	      -R*) func_stripname '-R' '' "$libdir"
	           temp_xrpath=$func_stripname_result
		   case " $xrpath " in
		   *" $temp_xrpath "*) ;;
		   *) xrpath="$xrpath $temp_xrpath";;
		   esac;;
	      *) temp_deplibs="$temp_deplibs $libdir";;
	      esac
	    done
	    dependency_libs="$temp_deplibs"
	  fi

	  newlib_search_path="$newlib_search_path $absdir"
	  # Link against this library
	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
	  # ... and its dependency_libs
	  tmp_libs=
	  for deplib in $dependency_libs; do
	    newdependency_libs="$deplib $newdependency_libs"
	    if $opt_duplicate_deps ; then
	      case "$tmp_libs " in
	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
	      esac
	    fi
	    tmp_libs="$tmp_libs $deplib"
	  done

	  if test "$link_all_deplibs" != no; then
	    # Add the search paths of all dependency libraries
	    for deplib in $dependency_libs; do
	      path=
	      case $deplib in
	      -L*) path="$deplib" ;;
	      *.la)
	        func_dirname "$deplib" "" "."
		dir="$func_dirname_result"
		# We need an absolute path.
		case $dir in
		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
		*)
		  absdir=`cd "$dir" && pwd`
		  if test -z "$absdir"; then
		    func_warning "cannot determine absolute directory name of \`$dir'"
		    absdir="$dir"
		  fi
		  ;;
		esac
		if $GREP "^installed=no" $deplib > /dev/null; then
		case $host in
		*-*-darwin*)
		  depdepl=
		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
		  if test -n "$deplibrary_names" ; then
		    for tmp in $deplibrary_names ; do
		      depdepl=$tmp
		    done
		    if test -f "$absdir/$objdir/$depdepl" ; then
		      depdepl="$absdir/$objdir/$depdepl"
		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
                      if test -z "$darwin_install_name"; then
                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                      fi
		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
		      path=
		    fi
		  fi
		  ;;
		*)
		  path="-L$absdir/$objdir"
		  ;;
		esac
		else
		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
		  test -z "$libdir" && \
		    func_fatal_error "\`$deplib' is not a valid libtool archive"
		  test "$absdir" != "$libdir" && \
		    func_warning "\`$deplib' seems to be moved"

		  path="-L$absdir"
		fi
		;;
	      esac
	      case " $deplibs " in
	      *" $path "*) ;;
	      *) deplibs="$path $deplibs" ;;
	      esac
	    done
	  fi # link_all_deplibs != no
	fi # linkmode = lib
      done # for deplib in $libs
      if test "$pass" = link; then
	if test "$linkmode" = "prog"; then
	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
	else
	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	fi
      fi
      dependency_libs="$newdependency_libs"
      if test "$pass" = dlpreopen; then
	# Link the dlpreopened libraries before other libraries
	for deplib in $save_deplibs; do
	  deplibs="$deplib $deplibs"
	done
      fi
      if test "$pass" != dlopen; then
	if test "$pass" != conv; then
	  # Make sure lib_search_path contains only unique directories.
	  lib_search_path=
	  for dir in $newlib_search_path; do
	    case "$lib_search_path " in
	    *" $dir "*) ;;
	    *) lib_search_path="$lib_search_path $dir" ;;
	    esac
	  done
	  newlib_search_path=
	fi

	if test "$linkmode,$pass" != "prog,link"; then
	  vars="deplibs"
	else
	  vars="compile_deplibs finalize_deplibs"
	fi
	for var in $vars dependency_libs; do
	  # Add libraries to $var in reverse order
	  eval tmp_libs=\"\$$var\"
	  new_libs=
	  for deplib in $tmp_libs; do
	    # FIXME: Pedantically, this is the right thing to do, so
	    #        that some nasty dependency loop isn't accidentally
	    #        broken:
	    #new_libs="$deplib $new_libs"
	    # Pragmatically, this seems to cause very few problems in
	    # practice:
	    case $deplib in
	    -L*) new_libs="$deplib $new_libs" ;;
	    -R*) ;;
	    *)
	      # And here is the reason: when a library appears more
	      # than once as an explicit dependence of a library, or
	      # is implicitly linked in more than once by the
	      # compiler, it is considered special, and multiple
	      # occurrences thereof are not removed.  Compare this
	      # with having the same library being listed as a
	      # dependency of multiple other libraries: in this case,
	      # we know (pedantically, we assume) the library does not
	      # need to be listed more than once, so we keep only the
	      # last copy.  This is not always right, but it is rare
	      # enough that we require users that really mean to play
	      # such unportable linking tricks to link the library
	      # using -Wl,-lname, so that libtool does not consider it
	      # for duplicate removal.
	      case " $specialdeplibs " in
	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
	      *)
		case " $new_libs " in
		*" $deplib "*) ;;
		*) new_libs="$deplib $new_libs" ;;
		esac
		;;
	      esac
	      ;;
	    esac
	  done
	  tmp_libs=
	  for deplib in $new_libs; do
	    case $deplib in
	    -L*)
	      case " $tmp_libs " in
	      *" $deplib "*) ;;
	      *) tmp_libs="$tmp_libs $deplib" ;;
	      esac
	      ;;
	    *) tmp_libs="$tmp_libs $deplib" ;;
	    esac
	  done
	  eval $var=\"$tmp_libs\"
	done # for var
      fi
      # Last step: remove runtime libs from dependency_libs
      # (they stay in deplibs)
      tmp_libs=
      for i in $dependency_libs ; do
	case " $predeps $postdeps $compiler_lib_search_path " in
	*" $i "*)
	  i=""
	  ;;
	esac
	if test -n "$i" ; then
	  tmp_libs="$tmp_libs $i"
	fi
      done
      dependency_libs=$tmp_libs
    done # for pass
    if test "$linkmode" = prog; then
      dlfiles="$newdlfiles"
    fi
    if test "$linkmode" = prog || test "$linkmode" = lib; then
      dlprefiles="$newdlprefiles"
    fi

    case $linkmode in
    oldlib)
      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
	func_warning "\`-dlopen' is ignored for archives"
      fi

      case " $deplibs" in
      *\ -l* | *\ -L*)
	func_warning "\`-l' and \`-L' are ignored for archives" ;;
      esac

      test -n "$rpath" && \
	func_warning "\`-rpath' is ignored for archives"

      test -n "$xrpath" && \
	func_warning "\`-R' is ignored for archives"

      test -n "$vinfo" && \
	func_warning "\`-version-info/-version-number' is ignored for archives"

      test -n "$release" && \
	func_warning "\`-release' is ignored for archives"

      test -n "$export_symbols$export_symbols_regex" && \
	func_warning "\`-export-symbols' is ignored for archives"

      # Now set the variables for building old libraries.
      build_libtool_libs=no
      oldlibs="$output"
      objs="$objs$old_deplibs"
      ;;

    lib)
      # Make sure we only generate libraries of the form `libNAME.la'.
      case $outputname in
      lib*)
	func_stripname 'lib' '.la' "$outputname"
	name=$func_stripname_result
	eval shared_ext=\"$shrext_cmds\"
	eval libname=\"$libname_spec\"
	;;
      *)
	test "$module" = no && \
	  func_fatal_help "libtool library \`$output' must begin with \`lib'"

	if test "$need_lib_prefix" != no; then
	  # Add the "lib" prefix for modules if required
	  func_stripname '' '.la' "$outputname"
	  name=$func_stripname_result
	  eval shared_ext=\"$shrext_cmds\"
	  eval libname=\"$libname_spec\"
	else
	  func_stripname '' '.la' "$outputname"
	  libname=$func_stripname_result
	fi
	;;
      esac

      if test -n "$objs"; then
	if test "$deplibs_check_method" != pass_all; then
	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
	else
	  $ECHO
	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
	  $ECHO "*** objects $objs is not portable!"
	  libobjs="$libobjs $objs"
	fi
      fi

      test "$dlself" != no && \
	func_warning "\`-dlopen self' is ignored for libtool libraries"

      set dummy $rpath
      shift
      test "$#" -gt 1 && \
	func_warning "ignoring multiple \`-rpath's for a libtool library"

      install_libdir="$1"

      oldlibs=
      if test -z "$rpath"; then
	if test "$build_libtool_libs" = yes; then
	  # Building a libtool convenience library.
	  # Some compilers have problems with a `.al' extension so
	  # convenience libraries should have the same extension an
	  # archive normally would.
	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
	  build_libtool_libs=convenience
	  build_old_libs=yes
	fi

	test -n "$vinfo" && \
	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"

	test -n "$release" && \
	  func_warning "\`-release' is ignored for convenience libraries"
      else

	# Parse the version information argument.
	save_ifs="$IFS"; IFS=':'
	set dummy $vinfo 0 0 0
	shift
	IFS="$save_ifs"

	test -n "$7" && \
	  func_fatal_help "too many parameters to \`-version-info'"

	# convert absolute version numbers to libtool ages
	# this retains compatibility with .la files and attempts
	# to make the code below a bit more comprehensible

	case $vinfo_number in
	yes)
	  number_major="$1"
	  number_minor="$2"
	  number_revision="$3"
	  #
	  # There are really only two kinds -- those that
	  # use the current revision as the major version
	  # and those that subtract age and use age as
	  # a minor version.  But, then there is irix
	  # which has an extra 1 added just for fun
	  #
	  case $version_type in
	  darwin|linux|osf|windows|none)
	    func_arith $number_major + $number_minor
	    current=$func_arith_result
	    age="$number_minor"
	    revision="$number_revision"
	    ;;
	  freebsd-aout|freebsd-elf|sunos)
	    current="$number_major"
	    revision="$number_minor"
	    age="0"
	    ;;
	  irix|nonstopux)
	    func_arith $number_major + $number_minor
	    current=$func_arith_result
	    age="$number_minor"
	    revision="$number_minor"
	    lt_irix_increment=no
	    ;;
	  *)
	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
	    ;;
	  esac
	  ;;
	no)
	  current="$1"
	  revision="$2"
	  age="$3"
	  ;;
	esac

	# Check that each of the things are valid numbers.
	case $current in
	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
	*)
	  func_error "CURRENT \`$current' must be a nonnegative integer"
	  func_fatal_error "\`$vinfo' is not valid version information"
	  ;;
	esac

	case $revision in
	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
	*)
	  func_error "REVISION \`$revision' must be a nonnegative integer"
	  func_fatal_error "\`$vinfo' is not valid version information"
	  ;;
	esac

	case $age in
	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
	*)
	  func_error "AGE \`$age' must be a nonnegative integer"
	  func_fatal_error "\`$vinfo' is not valid version information"
	  ;;
	esac

	if test "$age" -gt "$current"; then
	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
	  func_fatal_error "\`$vinfo' is not valid version information"
	fi

	# Calculate the version variables.
	major=
	versuffix=
	verstring=
	case $version_type in
	none) ;;

	darwin)
	  # Like Linux, but with the current version available in
	  # verstring for coding it into the library header
	  func_arith $current - $age
	  major=.$func_arith_result
	  versuffix="$major.$age.$revision"
	  # Darwin ld doesn't like 0 for these options...
	  func_arith $current + 1
	  minor_current=$func_arith_result
	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
	  ;;

	freebsd-aout)
	  major=".$current"
	  versuffix=".$current.$revision";
	  ;;

	freebsd-elf)
	  major=".$current"
	  versuffix=".$current"
	  ;;

	irix | nonstopux)
	  if test "X$lt_irix_increment" = "Xno"; then
	    func_arith $current - $age
	  else
	    func_arith $current - $age + 1
	  fi
	  major=$func_arith_result

	  case $version_type in
	    nonstopux) verstring_prefix=nonstopux ;;
	    *)         verstring_prefix=sgi ;;
	  esac
	  verstring="$verstring_prefix$major.$revision"

	  # Add in all the interfaces that we are compatible with.
	  loop=$revision
	  while test "$loop" -ne 0; do
	    func_arith $revision - $loop
	    iface=$func_arith_result
	    func_arith $loop - 1
	    loop=$func_arith_result
	    verstring="$verstring_prefix$major.$iface:$verstring"
	  done

	  # Before this point, $major must not contain `.'.
	  major=.$major
	  versuffix="$major.$revision"
	  ;;

	linux)
	  func_arith $current - $age
	  major=.$func_arith_result
	  versuffix="$major.$age.$revision"
	  ;;

	osf)
	  func_arith $current - $age
	  major=.$func_arith_result
	  versuffix=".$current.$age.$revision"
	  verstring="$current.$age.$revision"

	  # Add in all the interfaces that we are compatible with.
	  loop=$age
	  while test "$loop" -ne 0; do
	    func_arith $current - $loop
	    iface=$func_arith_result
	    func_arith $loop - 1
	    loop=$func_arith_result
	    verstring="$verstring:${iface}.0"
	  done

	  # Make executables depend on our current version.
	  verstring="$verstring:${current}.0"
	  ;;

	qnx)
	  major=".$current"
	  versuffix=".$current"
	  ;;

	sunos)
	  major=".$current"
	  versuffix=".$current.$revision"
	  ;;

	windows)
	  # Use '-' rather than '.', since we only want one
	  # extension on DOS 8.3 filesystems.
	  func_arith $current - $age
	  major=$func_arith_result
	  versuffix="-$major"
	  ;;

	*)
	  func_fatal_configuration "unknown library version type \`$version_type'"
	  ;;
	esac

	# Clear the version info if we defaulted, and they specified a release.
	if test -z "$vinfo" && test -n "$release"; then
	  major=
	  case $version_type in
	  darwin)
	    # we can't check for "0.0" in archive_cmds due to quoting
	    # problems, so we reset it completely
	    verstring=
	    ;;
	  *)
	    verstring="0.0"
	    ;;
	  esac
	  if test "$need_version" = no; then
	    versuffix=
	  else
	    versuffix=".0.0"
	  fi
	fi

	# Remove version info from name if versioning should be avoided
	if test "$avoid_version" = yes && test "$need_version" = no; then
	  major=
	  versuffix=
	  verstring=""
	fi

	# Check to see if the archive will have undefined symbols.
	if test "$allow_undefined" = yes; then
	  if test "$allow_undefined_flag" = unsupported; then
	    func_warning "undefined symbols not allowed in $host shared libraries"
	    build_libtool_libs=no
	    build_old_libs=yes
	  fi
	else
	  # Don't allow undefined symbols.
	  allow_undefined_flag="$no_undefined_flag"
	fi

      fi

      func_generate_dlsyms "$libname" "$libname" "yes"
      libobjs="$libobjs $symfileobj"
      test "X$libobjs" = "X " && libobjs=

      if test "$mode" != relink; then
	# Remove our outputs, but don't remove object files since they
	# may have been created when compiling PIC objects.
	removelist=
	tempremovelist=`$ECHO "$output_objdir/*"`
	for p in $tempremovelist; do
	  case $p in
	    *.$objext | *.gcno)
	       ;;
	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
	       if test "X$precious_files_regex" != "X"; then
		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
		 then
		   continue
		 fi
	       fi
	       removelist="$removelist $p"
	       ;;
	    *) ;;
	  esac
	done
	test -n "$removelist" && \
	  func_show_eval "${RM}r \$removelist"
      fi

      # Now set the variables for building old libraries.
      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
	oldlibs="$oldlibs $output_objdir/$libname.$libext"

	# Transform .lo files to .o files.
	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
      fi

      # Eliminate all temporary directories.
      #for path in $notinst_path; do
      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
      #done

      if test -n "$xrpath"; then
	# If the user specified any rpath flags, then add them.
	temp_xrpath=
	for libdir in $xrpath; do
	  temp_xrpath="$temp_xrpath -R$libdir"
	  case "$finalize_rpath " in
	  *" $libdir "*) ;;
	  *) finalize_rpath="$finalize_rpath $libdir" ;;
	  esac
	done
	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
	  dependency_libs="$temp_xrpath $dependency_libs"
	fi
      fi

      # Make sure dlfiles contains only unique files that won't be dlpreopened
      old_dlfiles="$dlfiles"
      dlfiles=
      for lib in $old_dlfiles; do
	case " $dlprefiles $dlfiles " in
	*" $lib "*) ;;
	*) dlfiles="$dlfiles $lib" ;;
	esac
      done

      # Make sure dlprefiles contains only unique files
      old_dlprefiles="$dlprefiles"
      dlprefiles=
      for lib in $old_dlprefiles; do
	case "$dlprefiles " in
	*" $lib "*) ;;
	*) dlprefiles="$dlprefiles $lib" ;;
	esac
      done

      if test "$build_libtool_libs" = yes; then
	if test -n "$rpath"; then
	  case $host in
	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
	    # these systems don't actually have a c library (as such)!
	    ;;
	  *-*-rhapsody* | *-*-darwin1.[012])
	    # Rhapsody C library is in the System framework
	    deplibs="$deplibs System.ltframework"
	    ;;
	  *-*-netbsd*)
	    # Don't link with libc until the a.out ld.so is fixed.
	    ;;
	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	    # Do not include libc due to us having libc/libc_r.
	    ;;
	  *-*-sco3.2v5* | *-*-sco5v6*)
	    # Causes problems with __ctype
	    ;;
	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
	    # Compiler inserts libc in the correct place for threads to work
	    ;;
	  *)
	    # Add libc to deplibs on all other systems if necessary.
	    if test "$build_libtool_need_lc" = "yes"; then
	      deplibs="$deplibs -lc"
	    fi
	    ;;
	  esac
	fi

	# Transform deplibs into only deplibs that can be linked in shared.
	name_save=$name
	libname_save=$libname
	release_save=$release
	versuffix_save=$versuffix
	major_save=$major
	# I'm not sure if I'm treating the release correctly.  I think
	# release should show up in the -l (ie -lgmp5) so we don't want to
	# add it in twice.  Is that correct?
	release=""
	versuffix=""
	major=""
	newdeplibs=
	droppeddeps=no
	case $deplibs_check_method in
	pass_all)
	  # Don't check for shared/static.  Everything works.
	  # This might be a little naive.  We might want to check
	  # whether the library exists or not.  But this is on
	  # osf3 & osf4 and I'm not really sure... Just
	  # implementing what was already the behavior.
	  newdeplibs=$deplibs
	  ;;
	test_compile)
	  # This code stresses the "libraries are programs" paradigm to its
	  # limits. Maybe even breaks it.  We compile a program, linking it
	  # against the deplibs as a proxy for the library.  Then we can check
	  # whether they linked in statically or dynamically with ldd.
	  $opt_dry_run || $RM conftest.c
	  cat > conftest.c <<EOF
	  int main() { return 0; }
EOF
	  $opt_dry_run || $RM conftest
	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
	    ldd_output=`ldd conftest`
	    for i in $deplibs; do
	      case $i in
	      -l*)
		func_stripname -l '' "$i"
		name=$func_stripname_result
		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		  case " $predeps $postdeps " in
		  *" $i "*)
		    newdeplibs="$newdeplibs $i"
		    i=""
		    ;;
		  esac
		fi
		if test -n "$i" ; then
		  libname=`eval "\\$ECHO \"$libname_spec\""`
		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
		  set dummy $deplib_matches; shift
		  deplib_match=$1
		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
		    newdeplibs="$newdeplibs $i"
		  else
		    droppeddeps=yes
		    $ECHO
		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
		    $ECHO "*** I have the capability to make that library automatically link in when"
		    $ECHO "*** you link to this library.  But I can only do this if you have a"
		    $ECHO "*** shared version of the library, which I believe you do not have"
		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
		  fi
		fi
		;;
	      *)
		newdeplibs="$newdeplibs $i"
		;;
	      esac
	    done
	  else
	    # Error occurred in the first compile.  Let's try to salvage
	    # the situation: Compile a separate program for each library.
	    for i in $deplibs; do
	      case $i in
	      -l*)
		func_stripname -l '' "$i"
		name=$func_stripname_result
		$opt_dry_run || $RM conftest
		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
		  ldd_output=`ldd conftest`
		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		    case " $predeps $postdeps " in
		    *" $i "*)
		      newdeplibs="$newdeplibs $i"
		      i=""
		      ;;
		    esac
		  fi
		  if test -n "$i" ; then
		    libname=`eval "\\$ECHO \"$libname_spec\""`
		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
		    set dummy $deplib_matches; shift
		    deplib_match=$1
		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
		      newdeplibs="$newdeplibs $i"
		    else
		      droppeddeps=yes
		      $ECHO
		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
		      $ECHO "*** I have the capability to make that library automatically link in when"
		      $ECHO "*** you link to this library.  But I can only do this if you have a"
		      $ECHO "*** shared version of the library, which you do not appear to have"
		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
		    fi
		  fi
		else
		  droppeddeps=yes
		  $ECHO
		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
		  $ECHO "*** make it link in!  You will probably need to install it or some"
		  $ECHO "*** library that it depends on before this library will be fully"
		  $ECHO "*** functional.  Installing it before continuing would be even better."
		fi
		;;
	      *)
		newdeplibs="$newdeplibs $i"
		;;
	      esac
	    done
	  fi
	  ;;
	file_magic*)
	  set dummy $deplibs_check_method; shift
	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
	  for a_deplib in $deplibs; do
	    case $a_deplib in
	    -l*)
	      func_stripname -l '' "$a_deplib"
	      name=$func_stripname_result
	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		case " $predeps $postdeps " in
		*" $a_deplib "*)
		  newdeplibs="$newdeplibs $a_deplib"
		  a_deplib=""
		  ;;
		esac
	      fi
	      if test -n "$a_deplib" ; then
		libname=`eval "\\$ECHO \"$libname_spec\""`
		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
		  for potent_lib in $potential_libs; do
		      # Follow soft links.
		      if ls -lLd "$potent_lib" 2>/dev/null |
			 $GREP " -> " >/dev/null; then
			continue
		      fi
		      # The statement above tries to avoid entering an
		      # endless loop below, in case of cyclic links.
		      # We might still enter an endless loop, since a link
		      # loop can be closed while we follow links,
		      # but so what?
		      potlib="$potent_lib"
		      while test -h "$potlib" 2>/dev/null; do
			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
			case $potliblink in
			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
			esac
		      done
		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
			 $SED -e 10q |
			 $EGREP "$file_magic_regex" > /dev/null; then
			newdeplibs="$newdeplibs $a_deplib"
			a_deplib=""
			break 2
		      fi
		  done
		done
	      fi
	      if test -n "$a_deplib" ; then
		droppeddeps=yes
		$ECHO
		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
		$ECHO "*** I have the capability to make that library automatically link in when"
		$ECHO "*** you link to this library.  But I can only do this if you have a"
		$ECHO "*** shared version of the library, which you do not appear to have"
		$ECHO "*** because I did check the linker path looking for a file starting"
		if test -z "$potlib" ; then
		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
		else
		  $ECHO "*** with $libname and none of the candidates passed a file format test"
		  $ECHO "*** using a file magic. Last file checked: $potlib"
		fi
	      fi
	      ;;
	    *)
	      # Add a -L argument.
	      newdeplibs="$newdeplibs $a_deplib"
	      ;;
	    esac
	  done # Gone through all deplibs.
	  ;;
	match_pattern*)
	  set dummy $deplibs_check_method; shift
	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
	  for a_deplib in $deplibs; do
	    case $a_deplib in
	    -l*)
	      func_stripname -l '' "$a_deplib"
	      name=$func_stripname_result
	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		case " $predeps $postdeps " in
		*" $a_deplib "*)
		  newdeplibs="$newdeplibs $a_deplib"
		  a_deplib=""
		  ;;
		esac
	      fi
	      if test -n "$a_deplib" ; then
		libname=`eval "\\$ECHO \"$libname_spec\""`
		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
		  for potent_lib in $potential_libs; do
		    potlib="$potent_lib" # see symlink-check above in file_magic test
		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
		       $EGREP "$match_pattern_regex" > /dev/null; then
		      newdeplibs="$newdeplibs $a_deplib"
		      a_deplib=""
		      break 2
		    fi
		  done
		done
	      fi
	      if test -n "$a_deplib" ; then
		droppeddeps=yes
		$ECHO
		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
		$ECHO "*** I have the capability to make that library automatically link in when"
		$ECHO "*** you link to this library.  But I can only do this if you have a"
		$ECHO "*** shared version of the library, which you do not appear to have"
		$ECHO "*** because I did check the linker path looking for a file starting"
		if test -z "$potlib" ; then
		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
		else
		  $ECHO "*** with $libname and none of the candidates passed a file format test"
		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
		fi
	      fi
	      ;;
	    *)
	      # Add a -L argument.
	      newdeplibs="$newdeplibs $a_deplib"
	      ;;
	    esac
	  done # Gone through all deplibs.
	  ;;
	none | unknown | *)
	  newdeplibs=""
	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
	    for i in $predeps $postdeps ; do
	      # can't use Xsed below, because $i might contain '/'
	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
	    done
	  fi
	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
	     $GREP . >/dev/null; then
	    $ECHO
	    if test "X$deplibs_check_method" = "Xnone"; then
	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
	    else
	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
	    fi
	    $ECHO "*** All declared inter-library dependencies are being dropped."
	    droppeddeps=yes
	  fi
	  ;;
	esac
	versuffix=$versuffix_save
	major=$major_save
	release=$release_save
	libname=$libname_save
	name=$name_save

	case $host in
	*-*-rhapsody* | *-*-darwin1.[012])
	  # On Rhapsody replace the C library with the System framework
	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
	  ;;
	esac

	if test "$droppeddeps" = yes; then
	  if test "$module" = yes; then
	    $ECHO
	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
	    $ECHO "*** a static module, that should work as long as the dlopening"
	    $ECHO "*** application is linked with the -dlopen flag."
	    if test -z "$global_symbol_pipe"; then
	      $ECHO
	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
	      $ECHO "*** not find such a program.  So, this module is probably useless."
	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
	    fi
	    if test "$build_old_libs" = no; then
	      oldlibs="$output_objdir/$libname.$libext"
	      build_libtool_libs=module
	      build_old_libs=yes
	    else
	      build_libtool_libs=no
	    fi
	  else
	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
	    $ECHO "*** automatically added whenever a program is linked with this library"
	    $ECHO "*** or is declared to -dlopen it."

	    if test "$allow_undefined" = no; then
	      $ECHO
	      $ECHO "*** Since this library must not contain undefined symbols,"
	      $ECHO "*** because either the platform does not support them or"
	      $ECHO "*** it was explicitly requested with -no-undefined,"
	      $ECHO "*** libtool will only create a static version of it."
	      if test "$build_old_libs" = no; then
		oldlibs="$output_objdir/$libname.$libext"
		build_libtool_libs=module
		build_old_libs=yes
	      else
		build_libtool_libs=no
	      fi
	    fi
	  fi
	fi
	# Done checking deplibs!
	deplibs=$newdeplibs
      fi
      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
      case $host in
	*-*-darwin*)
	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	  ;;
      esac

      # move library search paths that coincide with paths to not yet
      # installed libraries to the beginning of the library search list
      new_libs=
      for path in $notinst_path; do
	case " $new_libs " in
	*" -L$path/$objdir "*) ;;
	*)
	  case " $deplibs " in
	  *" -L$path/$objdir "*)
	    new_libs="$new_libs -L$path/$objdir" ;;
	  esac
	  ;;
	esac
      done
      for deplib in $deplibs; do
	case $deplib in
	-L*)
	  case " $new_libs " in
	  *" $deplib "*) ;;
	  *) new_libs="$new_libs $deplib" ;;
	  esac
	  ;;
	*) new_libs="$new_libs $deplib" ;;
	esac
      done
      deplibs="$new_libs"

      # All the library-specific variables (install_libdir is set above).
      library_names=
      old_library=
      dlname=

      # Test again, we may have decided not to build it any more
      if test "$build_libtool_libs" = yes; then
	if test "$hardcode_into_libs" = yes; then
	  # Hardcode the library paths
	  hardcode_libdirs=
	  dep_rpath=
	  rpath="$finalize_rpath"
	  test "$mode" != relink && rpath="$compile_rpath$rpath"
	  for libdir in $rpath; do
	    if test -n "$hardcode_libdir_flag_spec"; then
	      if test -n "$hardcode_libdir_separator"; then
		if test -z "$hardcode_libdirs"; then
		  hardcode_libdirs="$libdir"
		else
		  # Just accumulate the unique libdirs.
		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
		    ;;
		  *)
		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
		    ;;
		  esac
		fi
	      else
		eval flag=\"$hardcode_libdir_flag_spec\"
		dep_rpath="$dep_rpath $flag"
	      fi
	    elif test -n "$runpath_var"; then
	      case "$perm_rpath " in
	      *" $libdir "*) ;;
	      *) perm_rpath="$perm_rpath $libdir" ;;
	      esac
	    fi
	  done
	  # Substitute the hardcoded libdirs into the rpath.
	  if test -n "$hardcode_libdir_separator" &&
	     test -n "$hardcode_libdirs"; then
	    libdir="$hardcode_libdirs"
	    if test -n "$hardcode_libdir_flag_spec_ld"; then
	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
	    else
	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
	    fi
	  fi
	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
	    # We should set the runpath_var.
	    rpath=
	    for dir in $perm_rpath; do
	      rpath="$rpath$dir:"
	    done
	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
	  fi
	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
	fi

	shlibpath="$finalize_shlibpath"
	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
	if test -n "$shlibpath"; then
	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
	fi

	# Get the real and link names of the library.
	eval shared_ext=\"$shrext_cmds\"
	eval library_names=\"$library_names_spec\"
	set dummy $library_names
	shift
	realname="$1"
	shift

	if test -n "$soname_spec"; then
	  eval soname=\"$soname_spec\"
	else
	  soname="$realname"
	fi
	if test -z "$dlname"; then
	  dlname=$soname
	fi

	lib="$output_objdir/$realname"
	linknames=
	for link
	do
	  linknames="$linknames $link"
	done

	# Use standard objects if they are pic
	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
	test "X$libobjs" = "X " && libobjs=

	delfiles=
	if test -n "$export_symbols" && test -n "$include_expsyms"; then
	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
	  export_symbols="$output_objdir/$libname.uexp"
	  delfiles="$delfiles $export_symbols"
	fi

	orig_export_symbols=
	case $host_os in
	cygwin* | mingw* | cegcc*)
	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
	    # exporting using user supplied symfile
	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
	      # and it's NOT already a .def file. Must figure out
	      # which of the given symbols are data symbols and tag
	      # them as such. So, trigger use of export_symbols_cmds.
	      # export_symbols gets reassigned inside the "prepare
	      # the list of exported symbols" if statement, so the
	      # include_expsyms logic still works.
	      orig_export_symbols="$export_symbols"
	      export_symbols=
	      always_export_symbols=yes
	    fi
	  fi
	  ;;
	esac

	# Prepare the list of exported symbols
	if test -z "$export_symbols"; then
	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
	    func_verbose "generating symbol list for \`$libname.la'"
	    export_symbols="$output_objdir/$libname.exp"
	    $opt_dry_run || $RM $export_symbols
	    cmds=$export_symbols_cmds
	    save_ifs="$IFS"; IFS='~'
	    for cmd in $cmds; do
	      IFS="$save_ifs"
	      eval cmd=\"$cmd\"
	      func_len " $cmd"
	      len=$func_len_result
	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
		func_show_eval "$cmd" 'exit $?'
		skipped_export=false
	      else
		# The command line is too long to execute in one step.
		func_verbose "using reloadable object file for export list..."
		skipped_export=:
		# Break out early, otherwise skipped_export may be
		# set to false by a later but shorter cmd.
		break
	      fi
	    done
	    IFS="$save_ifs"
	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
	    fi
	  fi
	fi

	if test -n "$export_symbols" && test -n "$include_expsyms"; then
	  tmp_export_symbols="$export_symbols"
	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
	fi

	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
	  # The given exports_symbols file has to be filtered, so filter it.
	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
	  # 's' commands which not all seds can handle. GNU sed should be fine
	  # though. Also, the filter scales superlinearly with the number of
	  # global variables. join(1) would be nice here, but unfortunately
	  # isn't a blessed tool.
	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
	  export_symbols=$output_objdir/$libname.def
	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
	fi

	tmp_deplibs=
	for test_deplib in $deplibs; do
	  case " $convenience " in
	  *" $test_deplib "*) ;;
	  *)
	    tmp_deplibs="$tmp_deplibs $test_deplib"
	    ;;
	  esac
	done
	deplibs="$tmp_deplibs"

	if test -n "$convenience"; then
	  if test -n "$whole_archive_flag_spec" &&
	    test "$compiler_needs_object" = yes &&
	    test -z "$libobjs"; then
	    # extract the archives, so we have objects to list.
	    # TODO: could optimize this to just extract one archive.
	    whole_archive_flag_spec=
	  fi
	  if test -n "$whole_archive_flag_spec"; then
	    save_libobjs=$libobjs
	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
	    test "X$libobjs" = "X " && libobjs=
	  else
	    gentop="$output_objdir/${outputname}x"
	    generated="$generated $gentop"

	    func_extract_archives $gentop $convenience
	    libobjs="$libobjs $func_extract_archives_result"
	    test "X$libobjs" = "X " && libobjs=
	  fi
	fi

	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
	  eval flag=\"$thread_safe_flag_spec\"
	  linker_flags="$linker_flags $flag"
	fi

	# Make a backup of the uninstalled library when relinking
	if test "$mode" = relink; then
	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
	fi

	# Do each of the archive commands.
	if test "$module" = yes && test -n "$module_cmds" ; then
	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
	    eval test_cmds=\"$module_expsym_cmds\"
	    cmds=$module_expsym_cmds
	  else
	    eval test_cmds=\"$module_cmds\"
	    cmds=$module_cmds
	  fi
	else
	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
	    eval test_cmds=\"$archive_expsym_cmds\"
	    cmds=$archive_expsym_cmds
	  else
	    eval test_cmds=\"$archive_cmds\"
	    cmds=$archive_cmds
	  fi
	fi

	if test "X$skipped_export" != "X:" &&
	   func_len " $test_cmds" &&
	   len=$func_len_result &&
	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
	  :
	else
	  # The command line is too long to link in one step, link piecewise
	  # or, if using GNU ld and skipped_export is not :, use a linker
	  # script.

	  # Save the value of $output and $libobjs because we want to
	  # use them later.  If we have whole_archive_flag_spec, we
	  # want to use save_libobjs as it was before
	  # whole_archive_flag_spec was expanded, because we can't
	  # assume the linker understands whole_archive_flag_spec.
	  # This may have to be revisited, in case too many
	  # convenience libraries get linked in and end up exceeding
	  # the spec.
	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
	    save_libobjs=$libobjs
	  fi
	  save_output=$output
	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`

	  # Clear the reloadable object creation command queue and
	  # initialize k to one.
	  test_cmds=
	  concat_cmds=
	  objlist=
	  last_robj=
	  k=1

	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
	    output=${output_objdir}/${output_la}.lnkscript
	    func_verbose "creating GNU ld script: $output"
	    $ECHO 'INPUT (' > $output
	    for obj in $save_libobjs
	    do
	      $ECHO "$obj" >> $output
	    done
	    $ECHO ')' >> $output
	    delfiles="$delfiles $output"
	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
	    output=${output_objdir}/${output_la}.lnk
	    func_verbose "creating linker input file list: $output"
	    : > $output
	    set x $save_libobjs
	    shift
	    firstobj=
	    if test "$compiler_needs_object" = yes; then
	      firstobj="$1 "
	      shift
	    fi
	    for obj
	    do
	      $ECHO "$obj" >> $output
	    done
	    delfiles="$delfiles $output"
	    output=$firstobj\"$file_list_spec$output\"
	  else
	    if test -n "$save_libobjs"; then
	      func_verbose "creating reloadable object files..."
	      output=$output_objdir/$output_la-${k}.$objext
	      eval test_cmds=\"$reload_cmds\"
	      func_len " $test_cmds"
	      len0=$func_len_result
	      len=$len0

	      # Loop over the list of objects to be linked.
	      for obj in $save_libobjs
	      do
		func_len " $obj"
		func_arith $len + $func_len_result
		len=$func_arith_result
		if test "X$objlist" = X ||
		   test "$len" -lt "$max_cmd_len"; then
		  func_append objlist " $obj"
		else
		  # The command $test_cmds is almost too long, add a
		  # command to the queue.
		  if test "$k" -eq 1 ; then
		    # The first file doesn't have a previous command to add.
		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
		  else
		    # All subsequent reloadable object files will link in
		    # the last one created.
		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
		  fi
		  last_robj=$output_objdir/$output_la-${k}.$objext
		  func_arith $k + 1
		  k=$func_arith_result
		  output=$output_objdir/$output_la-${k}.$objext
		  objlist=$obj
		  func_len " $last_robj"
		  func_arith $len0 + $func_len_result
		  len=$func_arith_result
		fi
	      done
	      # Handle the remaining objects by creating one last
	      # reloadable object file.  All subsequent reloadable object
	      # files will link in the last one created.
	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
	      if test -n "$last_robj"; then
	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
	      fi
	      delfiles="$delfiles $output"

	    else
	      output=
	    fi

	    if ${skipped_export-false}; then
	      func_verbose "generating symbol list for \`$libname.la'"
	      export_symbols="$output_objdir/$libname.exp"
	      $opt_dry_run || $RM $export_symbols
	      libobjs=$output
	      # Append the command to create the export file.
	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
	      if test -n "$last_robj"; then
		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
	      fi
	    fi

	    test -n "$save_libobjs" &&
	      func_verbose "creating a temporary reloadable object file: $output"

	    # Loop through the commands generated above and execute them.
	    save_ifs="$IFS"; IFS='~'
	    for cmd in $concat_cmds; do
	      IFS="$save_ifs"
	      $opt_silent || {
		  func_quote_for_expand "$cmd"
		  eval "func_echo $func_quote_for_expand_result"
	      }
	      $opt_dry_run || eval "$cmd" || {
		lt_exit=$?

		# Restore the uninstalled library and exit
		if test "$mode" = relink; then
		  ( cd "$output_objdir" && \
		    $RM "${realname}T" && \
		    $MV "${realname}U" "$realname" )
		fi

		exit $lt_exit
	      }
	    done
	    IFS="$save_ifs"

	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
	    fi
	  fi

          if ${skipped_export-false}; then
	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
	      tmp_export_symbols="$export_symbols"
	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
	    fi

	    if test -n "$orig_export_symbols"; then
	      # The given exports_symbols file has to be filtered, so filter it.
	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
	      # 's' commands which not all seds can handle. GNU sed should be fine
	      # though. Also, the filter scales superlinearly with the number of
	      # global variables. join(1) would be nice here, but unfortunately
	      # isn't a blessed tool.
	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
	      export_symbols=$output_objdir/$libname.def
	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
	    fi
	  fi

	  libobjs=$output
	  # Restore the value of output.
	  output=$save_output

	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
	    test "X$libobjs" = "X " && libobjs=
	  fi
	  # Expand the library linking commands again to reset the
	  # value of $libobjs for piecewise linking.

	  # Do each of the archive commands.
	  if test "$module" = yes && test -n "$module_cmds" ; then
	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
	      cmds=$module_expsym_cmds
	    else
	      cmds=$module_cmds
	    fi
	  else
	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
	      cmds=$archive_expsym_cmds
	    else
	      cmds=$archive_cmds
	    fi
	  fi
	fi

	if test -n "$delfiles"; then
	  # Append the command to remove temporary files to $cmds.
	  eval cmds=\"\$cmds~\$RM $delfiles\"
	fi

	# Add any objects from preloaded convenience libraries
	if test -n "$dlprefiles"; then
	  gentop="$output_objdir/${outputname}x"
	  generated="$generated $gentop"

	  func_extract_archives $gentop $dlprefiles
	  libobjs="$libobjs $func_extract_archives_result"
	  test "X$libobjs" = "X " && libobjs=
	fi

	save_ifs="$IFS"; IFS='~'
	for cmd in $cmds; do
	  IFS="$save_ifs"
	  eval cmd=\"$cmd\"
	  $opt_silent || {
	    func_quote_for_expand "$cmd"
	    eval "func_echo $func_quote_for_expand_result"
	  }
	  $opt_dry_run || eval "$cmd" || {
	    lt_exit=$?

	    # Restore the uninstalled library and exit
	    if test "$mode" = relink; then
	      ( cd "$output_objdir" && \
	        $RM "${realname}T" && \
		$MV "${realname}U" "$realname" )
	    fi

	    exit $lt_exit
	  }
	done
	IFS="$save_ifs"

	# Restore the uninstalled library and exit
	if test "$mode" = relink; then
	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?

	  if test -n "$convenience"; then
	    if test -z "$whole_archive_flag_spec"; then
	      func_show_eval '${RM}r "$gentop"'
	    fi
	  fi

	  exit $EXIT_SUCCESS
	fi

	# Create links to the real library.
	for linkname in $linknames; do
	  if test "$realname" != "$linkname"; then
	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
	  fi
	done

	# If -module or -export-dynamic was specified, set the dlname.
	if test "$module" = yes || test "$export_dynamic" = yes; then
	  # On all known operating systems, these are identical.
	  dlname="$soname"
	fi
      fi
      ;;

    obj)
      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
	func_warning "\`-dlopen' is ignored for objects"
      fi

      case " $deplibs" in
      *\ -l* | *\ -L*)
	func_warning "\`-l' and \`-L' are ignored for objects" ;;
      esac

      test -n "$rpath" && \
	func_warning "\`-rpath' is ignored for objects"

      test -n "$xrpath" && \
	func_warning "\`-R' is ignored for objects"

      test -n "$vinfo" && \
	func_warning "\`-version-info' is ignored for objects"

      test -n "$release" && \
	func_warning "\`-release' is ignored for objects"

      case $output in
      *.lo)
	test -n "$objs$old_deplibs" && \
	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"

	libobj=$output
	func_lo2o "$libobj"
	obj=$func_lo2o_result
	;;
      *)
	libobj=
	obj="$output"
	;;
      esac

      # Delete the old objects.
      $opt_dry_run || $RM $obj $libobj

      # Objects from convenience libraries.  This assumes
      # single-version convenience libraries.  Whenever we create
      # different ones for PIC/non-PIC, this we'll have to duplicate
      # the extraction.
      reload_conv_objs=
      gentop=
      # reload_cmds runs $LD directly, so let us get rid of
      # -Wl from whole_archive_flag_spec and hope we can get by with
      # turning comma into space..
      wl=

      if test -n "$convenience"; then
	if test -n "$whole_archive_flag_spec"; then
	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
	else
	  gentop="$output_objdir/${obj}x"
	  generated="$generated $gentop"

	  func_extract_archives $gentop $convenience
	  reload_conv_objs="$reload_objs $func_extract_archives_result"
	fi
      fi

      # Create the old-style object.
      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test

      output="$obj"
      func_execute_cmds "$reload_cmds" 'exit $?'

      # Exit if we aren't doing a library object file.
      if test -z "$libobj"; then
	if test -n "$gentop"; then
	  func_show_eval '${RM}r "$gentop"'
	fi

	exit $EXIT_SUCCESS
      fi

      if test "$build_libtool_libs" != yes; then
	if test -n "$gentop"; then
	  func_show_eval '${RM}r "$gentop"'
	fi

	# Create an invalid libtool object if no PIC, so that we don't
	# accidentally link it into a program.
	# $show "echo timestamp > $libobj"
	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
	exit $EXIT_SUCCESS
      fi

      if test -n "$pic_flag" || test "$pic_mode" != default; then
	# Only do commands if we really have different PIC objects.
	reload_objs="$libobjs $reload_conv_objs"
	output="$libobj"
	func_execute_cmds "$reload_cmds" 'exit $?'
      fi

      if test -n "$gentop"; then
	func_show_eval '${RM}r "$gentop"'
      fi

      exit $EXIT_SUCCESS
      ;;

    prog)
      case $host in
	*cygwin*) func_stripname '' '.exe' "$output"
	          output=$func_stripname_result.exe;;
      esac
      test -n "$vinfo" && \
	func_warning "\`-version-info' is ignored for programs"

      test -n "$release" && \
	func_warning "\`-release' is ignored for programs"

      test "$preload" = yes \
        && test "$dlopen_support" = unknown \
	&& test "$dlopen_self" = unknown \
	&& test "$dlopen_self_static" = unknown && \
	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."

      case $host in
      *-*-rhapsody* | *-*-darwin1.[012])
	# On Rhapsody replace the C library is the System framework
	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
	;;
      esac

      case $host in
      *-*-darwin*)
	# Don't allow lazy linking, it breaks C++ global constructors
	# But is supposedly fixed on 10.4 or later (yay!).
	if test "$tagname" = CXX ; then
	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
	    10.[0123])
	      compile_command="$compile_command ${wl}-bind_at_load"
	      finalize_command="$finalize_command ${wl}-bind_at_load"
	    ;;
	  esac
	fi
	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	;;
      esac


      # move library search paths that coincide with paths to not yet
      # installed libraries to the beginning of the library search list
      new_libs=
      for path in $notinst_path; do
	case " $new_libs " in
	*" -L$path/$objdir "*) ;;
	*)
	  case " $compile_deplibs " in
	  *" -L$path/$objdir "*)
	    new_libs="$new_libs -L$path/$objdir" ;;
	  esac
	  ;;
	esac
      done
      for deplib in $compile_deplibs; do
	case $deplib in
	-L*)
	  case " $new_libs " in
	  *" $deplib "*) ;;
	  *) new_libs="$new_libs $deplib" ;;
	  esac
	  ;;
	*) new_libs="$new_libs $deplib" ;;
	esac
      done
      compile_deplibs="$new_libs"


      compile_command="$compile_command $compile_deplibs"
      finalize_command="$finalize_command $finalize_deplibs"

      if test -n "$rpath$xrpath"; then
	# If the user specified any rpath flags, then add them.
	for libdir in $rpath $xrpath; do
	  # This is the magic to use -rpath.
	  case "$finalize_rpath " in
	  *" $libdir "*) ;;
	  *) finalize_rpath="$finalize_rpath $libdir" ;;
	  esac
	done
      fi

      # Now hardcode the library paths
      rpath=
      hardcode_libdirs=
      for libdir in $compile_rpath $finalize_rpath; do
	if test -n "$hardcode_libdir_flag_spec"; then
	  if test -n "$hardcode_libdir_separator"; then
	    if test -z "$hardcode_libdirs"; then
	      hardcode_libdirs="$libdir"
	    else
	      # Just accumulate the unique libdirs.
	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
		;;
	      *)
		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
		;;
	      esac
	    fi
	  else
	    eval flag=\"$hardcode_libdir_flag_spec\"
	    rpath="$rpath $flag"
	  fi
	elif test -n "$runpath_var"; then
	  case "$perm_rpath " in
	  *" $libdir "*) ;;
	  *) perm_rpath="$perm_rpath $libdir" ;;
	  esac
	fi
	case $host in
	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
	  case :$dllsearchpath: in
	  *":$libdir:"*) ;;
	  ::) dllsearchpath=$libdir;;
	  *) dllsearchpath="$dllsearchpath:$libdir";;
	  esac
	  case :$dllsearchpath: in
	  *":$testbindir:"*) ;;
	  ::) dllsearchpath=$testbindir;;
	  *) dllsearchpath="$dllsearchpath:$testbindir";;
	  esac
	  ;;
	esac
      done
      # Substitute the hardcoded libdirs into the rpath.
      if test -n "$hardcode_libdir_separator" &&
	 test -n "$hardcode_libdirs"; then
	libdir="$hardcode_libdirs"
	eval rpath=\" $hardcode_libdir_flag_spec\"
      fi
      compile_rpath="$rpath"

      rpath=
      hardcode_libdirs=
      for libdir in $finalize_rpath; do
	if test -n "$hardcode_libdir_flag_spec"; then
	  if test -n "$hardcode_libdir_separator"; then
	    if test -z "$hardcode_libdirs"; then
	      hardcode_libdirs="$libdir"
	    else
	      # Just accumulate the unique libdirs.
	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
		;;
	      *)
		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
		;;
	      esac
	    fi
	  else
	    eval flag=\"$hardcode_libdir_flag_spec\"
	    rpath="$rpath $flag"
	  fi
	elif test -n "$runpath_var"; then
	  case "$finalize_perm_rpath " in
	  *" $libdir "*) ;;
	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
	  esac
	fi
      done
      # Substitute the hardcoded libdirs into the rpath.
      if test -n "$hardcode_libdir_separator" &&
	 test -n "$hardcode_libdirs"; then
	libdir="$hardcode_libdirs"
	eval rpath=\" $hardcode_libdir_flag_spec\"
      fi
      finalize_rpath="$rpath"

      if test -n "$libobjs" && test "$build_old_libs" = yes; then
	# Transform all the library objects into standard objects.
	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
      fi

      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"

      # template prelinking step
      if test -n "$prelink_cmds"; then
	func_execute_cmds "$prelink_cmds" 'exit $?'
      fi

      wrappers_required=yes
      case $host in
      *cygwin* | *mingw* )
        if test "$build_libtool_libs" != yes; then
          wrappers_required=no
        fi
        ;;
      *cegcc)
        # Disable wrappers for cegcc, we are cross compiling anyway.
        wrappers_required=no
        ;;
      *)
        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
          wrappers_required=no
        fi
        ;;
      esac
      if test "$wrappers_required" = no; then
	# Replace the output file specification.
	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
	link_command="$compile_command$compile_rpath"

	# We have no uninstalled library dependencies, so finalize right now.
	exit_status=0
	func_show_eval "$link_command" 'exit_status=$?'

	# Delete the generated files.
	if test -f "$output_objdir/${outputname}S.${objext}"; then
	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
	fi

	exit $exit_status
      fi

      if test -n "$compile_shlibpath$finalize_shlibpath"; then
	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
      fi
      if test -n "$finalize_shlibpath"; then
	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
      fi

      compile_var=
      finalize_var=
      if test -n "$runpath_var"; then
	if test -n "$perm_rpath"; then
	  # We should set the runpath_var.
	  rpath=
	  for dir in $perm_rpath; do
	    rpath="$rpath$dir:"
	  done
	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
	fi
	if test -n "$finalize_perm_rpath"; then
	  # We should set the runpath_var.
	  rpath=
	  for dir in $finalize_perm_rpath; do
	    rpath="$rpath$dir:"
	  done
	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
	fi
      fi

      if test "$no_install" = yes; then
	# We don't need to create a wrapper script.
	link_command="$compile_var$compile_command$compile_rpath"
	# Replace the output file specification.
	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
	# Delete the old output file.
	$opt_dry_run || $RM $output
	# Link the executable and exit
	func_show_eval "$link_command" 'exit $?'
	exit $EXIT_SUCCESS
      fi

      if test "$hardcode_action" = relink; then
	# Fast installation is not supported
	link_command="$compile_var$compile_command$compile_rpath"
	relink_command="$finalize_var$finalize_command$finalize_rpath"

	func_warning "this platform does not like uninstalled shared libraries"
	func_warning "\`$output' will be relinked during installation"
      else
	if test "$fast_install" != no; then
	  link_command="$finalize_var$compile_command$finalize_rpath"
	  if test "$fast_install" = yes; then
	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
	  else
	    # fast_install is set to needless
	    relink_command=
	  fi
	else
	  link_command="$compile_var$compile_command$compile_rpath"
	  relink_command="$finalize_var$finalize_command$finalize_rpath"
	fi
      fi

      # Replace the output file specification.
      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`

      # Delete the old output files.
      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname

      func_show_eval "$link_command" 'exit $?'

      # Now create the wrapper script.
      func_verbose "creating $output"

      # Quote the relink command for shipping.
      if test -n "$relink_command"; then
	# Preserve any variables that may affect compiler behavior
	for var in $variables_saved_for_relink; do
	  if eval test -z \"\${$var+set}\"; then
	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
	  elif eval var_value=\$$var; test -z "$var_value"; then
	    relink_command="$var=; export $var; $relink_command"
	  else
	    func_quote_for_eval "$var_value"
	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
	  fi
	done
	relink_command="(cd `pwd`; $relink_command)"
	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
      fi

      # Quote $ECHO for shipping.
      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
	case $progpath in
	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
	esac
	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
      else
	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
      fi

      # Only actually do things if not in dry run mode.
      $opt_dry_run || {
	# win32 will think the script is a binary if it has
	# a .exe suffix, so we strip it off here.
	case $output in
	  *.exe) func_stripname '' '.exe' "$output"
	         output=$func_stripname_result ;;
	esac
	# test for cygwin because mv fails w/o .exe extensions
	case $host in
	  *cygwin*)
	    exeext=.exe
	    func_stripname '' '.exe' "$outputname"
	    outputname=$func_stripname_result ;;
	  *) exeext= ;;
	esac
	case $host in
	  *cygwin* | *mingw* )
	    func_dirname_and_basename "$output" "" "."
	    output_name=$func_basename_result
	    output_path=$func_dirname_result
	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
	    cwrapper="$output_path/$output_name.exe"
	    $RM $cwrappersource $cwrapper
	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15

	    func_emit_cwrapperexe_src > $cwrappersource

	    # The wrapper executable is built using the $host compiler,
	    # because it contains $host paths and files. If cross-
	    # compiling, it, like the target executable, must be
	    # executed on the $host or under an emulation environment.
	    $opt_dry_run || {
	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
	      $STRIP $cwrapper
	    }

	    # Now, create the wrapper script for func_source use:
	    func_ltwrapper_scriptname $cwrapper
	    $RM $func_ltwrapper_scriptname_result
	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
	    $opt_dry_run || {
	      # note: this script will not be executed, so do not chmod.
	      if test "x$build" = "x$host" ; then
		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
	      else
		func_emit_wrapper no > $func_ltwrapper_scriptname_result
	      fi
	    }
	  ;;
	  * )
	    $RM $output
	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15

	    func_emit_wrapper no > $output
	    chmod +x $output
	  ;;
	esac
      }
      exit $EXIT_SUCCESS
      ;;
    esac

    # See if we need to build an old-fashioned archive.
    for oldlib in $oldlibs; do

      if test "$build_libtool_libs" = convenience; then
	oldobjs="$libobjs_save $symfileobj"
	addlibs="$convenience"
	build_libtool_libs=no
      else
	if test "$build_libtool_libs" = module; then
	  oldobjs="$libobjs_save"
	  build_libtool_libs=no
	else
	  oldobjs="$old_deplibs $non_pic_objects"
	  if test "$preload" = yes && test -f "$symfileobj"; then
	    oldobjs="$oldobjs $symfileobj"
	  fi
	fi
	addlibs="$old_convenience"
      fi

      if test -n "$addlibs"; then
	gentop="$output_objdir/${outputname}x"
	generated="$generated $gentop"

	func_extract_archives $gentop $addlibs
	oldobjs="$oldobjs $func_extract_archives_result"
      fi

      # Do each command in the archive commands.
      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
	cmds=$old_archive_from_new_cmds
      else

	# Add any objects from preloaded convenience libraries
	if test -n "$dlprefiles"; then
	  gentop="$output_objdir/${outputname}x"
	  generated="$generated $gentop"

	  func_extract_archives $gentop $dlprefiles
	  oldobjs="$oldobjs $func_extract_archives_result"
	fi

	# POSIX demands no paths to be encoded in archives.  We have
	# to avoid creating archives with duplicate basenames if we
	# might have to extract them afterwards, e.g., when creating a
	# static archive out of a convenience library, or when linking
	# the entirety of a libtool archive into another (currently
	# not supported by libtool).
	if (for obj in $oldobjs
	    do
	      func_basename "$obj"
	      $ECHO "$func_basename_result"
	    done | sort | sort -uc >/dev/null 2>&1); then
	  :
	else
	  $ECHO "copying selected object files to avoid basename conflicts..."
	  gentop="$output_objdir/${outputname}x"
	  generated="$generated $gentop"
	  func_mkdir_p "$gentop"
	  save_oldobjs=$oldobjs
	  oldobjs=
	  counter=1
	  for obj in $save_oldobjs
	  do
	    func_basename "$obj"
	    objbase="$func_basename_result"
	    case " $oldobjs " in
	    " ") oldobjs=$obj ;;
	    *[\ /]"$objbase "*)
	      while :; do
		# Make sure we don't pick an alternate name that also
		# overlaps.
		newobj=lt$counter-$objbase
		func_arith $counter + 1
		counter=$func_arith_result
		case " $oldobjs " in
		*[\ /]"$newobj "*) ;;
		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
		esac
	      done
	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
	      oldobjs="$oldobjs $gentop/$newobj"
	      ;;
	    *) oldobjs="$oldobjs $obj" ;;
	    esac
	  done
	fi
	eval cmds=\"$old_archive_cmds\"

	func_len " $cmds"
	len=$func_len_result
	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
	  cmds=$old_archive_cmds
	else
	  # the command line is too long to link in one step, link in parts
	  func_verbose "using piecewise archive linking..."
	  save_RANLIB=$RANLIB
	  RANLIB=:
	  objlist=
	  concat_cmds=
	  save_oldobjs=$oldobjs
	  oldobjs=
	  # Is there a better way of finding the last object in the list?
	  for obj in $save_oldobjs
	  do
	    last_oldobj=$obj
	  done
	  eval test_cmds=\"$old_archive_cmds\"
	  func_len " $test_cmds"
	  len0=$func_len_result
	  len=$len0
	  for obj in $save_oldobjs
	  do
	    func_len " $obj"
	    func_arith $len + $func_len_result
	    len=$func_arith_result
	    func_append objlist " $obj"
	    if test "$len" -lt "$max_cmd_len"; then
	      :
	    else
	      # the above command should be used before it gets too long
	      oldobjs=$objlist
	      if test "$obj" = "$last_oldobj" ; then
		RANLIB=$save_RANLIB
	      fi
	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
	      objlist=
	      len=$len0
	    fi
	  done
	  RANLIB=$save_RANLIB
	  oldobjs=$objlist
	  if test "X$oldobjs" = "X" ; then
	    eval cmds=\"\$concat_cmds\"
	  else
	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
	  fi
	fi
      fi
      func_execute_cmds "$cmds" 'exit $?'
    done

    test -n "$generated" && \
      func_show_eval "${RM}r$generated"

    # Now create the libtool archive.
    case $output in
    *.la)
      old_library=
      test "$build_old_libs" = yes && old_library="$libname.$libext"
      func_verbose "creating $output"

      # Preserve any variables that may affect compiler behavior
      for var in $variables_saved_for_relink; do
	if eval test -z \"\${$var+set}\"; then
	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
	elif eval var_value=\$$var; test -z "$var_value"; then
	  relink_command="$var=; export $var; $relink_command"
	else
	  func_quote_for_eval "$var_value"
	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
	fi
      done
      # Quote the link command for shipping.
      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
      if test "$hardcode_automatic" = yes ; then
	relink_command=
      fi

      # Only create the output if not a dry run.
      $opt_dry_run || {
	for installed in no yes; do
	  if test "$installed" = yes; then
	    if test -z "$install_libdir"; then
	      break
	    fi
	    output="$output_objdir/$outputname"i
	    # Replace all uninstalled libtool libraries with the installed ones
	    newdependency_libs=
	    for deplib in $dependency_libs; do
	      case $deplib in
	      *.la)
		func_basename "$deplib"
		name="$func_basename_result"
		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
		test -z "$libdir" && \
		  func_fatal_error "\`$deplib' is not a valid libtool archive"
		newdependency_libs="$newdependency_libs $libdir/$name"
		;;
	      *) newdependency_libs="$newdependency_libs $deplib" ;;
	      esac
	    done
	    dependency_libs="$newdependency_libs"
	    newdlfiles=

	    for lib in $dlfiles; do
	      case $lib in
	      *.la)
	        func_basename "$lib"
		name="$func_basename_result"
		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
		test -z "$libdir" && \
		  func_fatal_error "\`$lib' is not a valid libtool archive"
		newdlfiles="$newdlfiles $libdir/$name"
		;;
	      *) newdlfiles="$newdlfiles $lib" ;;
	      esac
	    done
	    dlfiles="$newdlfiles"
	    newdlprefiles=
	    for lib in $dlprefiles; do
	      case $lib in
	      *.la)
		# Only pass preopened files to the pseudo-archive (for
		# eventual linking with the app. that links it) if we
		# didn't already link the preopened objects directly into
		# the library:
		func_basename "$lib"
		name="$func_basename_result"
		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
		test -z "$libdir" && \
		  func_fatal_error "\`$lib' is not a valid libtool archive"
		newdlprefiles="$newdlprefiles $libdir/$name"
		;;
	      esac
	    done
	    dlprefiles="$newdlprefiles"
	  else
	    newdlfiles=
	    for lib in $dlfiles; do
	      case $lib in
		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
		*) abs=`pwd`"/$lib" ;;
	      esac
	      newdlfiles="$newdlfiles $abs"
	    done
	    dlfiles="$newdlfiles"
	    newdlprefiles=
	    for lib in $dlprefiles; do
	      case $lib in
		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
		*) abs=`pwd`"/$lib" ;;
	      esac
	      newdlprefiles="$newdlprefiles $abs"
	    done
	    dlprefiles="$newdlprefiles"
	  fi
	  $RM $output
	  # place dlname in correct position for cygwin
	  tdlname=$dlname
	  case $host,$output,$installed,$module,$dlname in
	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
	  esac
	  $ECHO > $output "\
# $outputname - a libtool library file
# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# The name that we can dlopen(3).
dlname='$tdlname'

# Names of this library.
library_names='$library_names'

# The name of the static archive.
old_library='$old_library'

# Linker flags that can not go in dependency_libs.
inherited_linker_flags='$new_inherited_linker_flags'

# Libraries that this one depends upon.
dependency_libs='$dependency_libs'

# Names of additional weak libraries provided by this library
weak_library_names='$weak_libs'

# Version information for $libname.
current=$current
age=$age
revision=$revision

# Is this an already installed library?
installed=$installed

# Should we warn about portability when linking against -modules?
shouldnotlink=$module

# Files to dlopen/dlpreopen
dlopen='$dlfiles'
dlpreopen='$dlprefiles'

# Directory that this library needs to be installed in:
libdir='$install_libdir'"
	  if test "$installed" = no && test "$need_relink" = yes; then
	    $ECHO >> $output "\
relink_command=\"$relink_command\""
	  fi
	done
      }

      # Do a symbolic link so that the libtool archive can be found in
      # LD_LIBRARY_PATH before the program is installed.
      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
      ;;
    esac
    exit $EXIT_SUCCESS
}

{ test "$mode" = link || test "$mode" = relink; } &&
    func_mode_link ${1+"$@"}


# func_mode_uninstall arg...
func_mode_uninstall ()
{
    $opt_debug
    RM="$nonopt"
    files=
    rmforce=
    exit_status=0

    # This variable tells wrapper scripts just to set variables rather
    # than running their programs.
    libtool_install_magic="$magic"

    for arg
    do
      case $arg in
      -f) RM="$RM $arg"; rmforce=yes ;;
      -*) RM="$RM $arg" ;;
      *) files="$files $arg" ;;
      esac
    done

    test -z "$RM" && \
      func_fatal_help "you must specify an RM program"

    rmdirs=

    origobjdir="$objdir"
    for file in $files; do
      func_dirname "$file" "" "."
      dir="$func_dirname_result"
      if test "X$dir" = X.; then
	objdir="$origobjdir"
      else
	objdir="$dir/$origobjdir"
      fi
      func_basename "$file"
      name="$func_basename_result"
      test "$mode" = uninstall && objdir="$dir"

      # Remember objdir for removal later, being careful to avoid duplicates
      if test "$mode" = clean; then
	case " $rmdirs " in
	  *" $objdir "*) ;;
	  *) rmdirs="$rmdirs $objdir" ;;
	esac
      fi

      # Don't error if the file doesn't exist and rm -f was used.
      if { test -L "$file"; } >/dev/null 2>&1 ||
	 { test -h "$file"; } >/dev/null 2>&1 ||
	 test -f "$file"; then
	:
      elif test -d "$file"; then
	exit_status=1
	continue
      elif test "$rmforce" = yes; then
	continue
      fi

      rmfiles="$file"

      case $name in
      *.la)
	# Possibly a libtool archive, so verify it.
	if func_lalib_p "$file"; then
	  func_source $dir/$name

	  # Delete the libtool libraries and symlinks.
	  for n in $library_names; do
	    rmfiles="$rmfiles $objdir/$n"
	  done
	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"

	  case "$mode" in
	  clean)
	    case "  $library_names " in
	    # "  " in the beginning catches empty $dlname
	    *" $dlname "*) ;;
	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
	    esac
	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
	    ;;
	  uninstall)
	    if test -n "$library_names"; then
	      # Do each command in the postuninstall commands.
	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
	    fi

	    if test -n "$old_library"; then
	      # Do each command in the old_postuninstall commands.
	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
	    fi
	    # FIXME: should reinstall the best remaining shared library.
	    ;;
	  esac
	fi
	;;

      *.lo)
	# Possibly a libtool object, so verify it.
	if func_lalib_p "$file"; then

	  # Read the .lo file
	  func_source $dir/$name

	  # Add PIC object to the list of files to remove.
	  if test -n "$pic_object" &&
	     test "$pic_object" != none; then
	    rmfiles="$rmfiles $dir/$pic_object"
	  fi

	  # Add non-PIC object to the list of files to remove.
	  if test -n "$non_pic_object" &&
	     test "$non_pic_object" != none; then
	    rmfiles="$rmfiles $dir/$non_pic_object"
	  fi
	fi
	;;

      *)
	if test "$mode" = clean ; then
	  noexename=$name
	  case $file in
	  *.exe)
	    func_stripname '' '.exe' "$file"
	    file=$func_stripname_result
	    func_stripname '' '.exe' "$name"
	    noexename=$func_stripname_result
	    # $file with .exe has already been added to rmfiles,
	    # add $file without .exe
	    rmfiles="$rmfiles $file"
	    ;;
	  esac
	  # Do a test to see if this is a libtool program.
	  if func_ltwrapper_p "$file"; then
	    if func_ltwrapper_executable_p "$file"; then
	      func_ltwrapper_scriptname "$file"
	      relink_command=
	      func_source $func_ltwrapper_scriptname_result
	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
	    else
	      relink_command=
	      func_source $dir/$noexename
	    fi

	    # note $name still contains .exe if it was in $file originally
	    # as does the version of $file that was added into $rmfiles
	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
	    if test "$fast_install" = yes && test -n "$relink_command"; then
	      rmfiles="$rmfiles $objdir/lt-$name"
	    fi
	    if test "X$noexename" != "X$name" ; then
	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
	    fi
	  fi
	fi
	;;
      esac
      func_show_eval "$RM $rmfiles" 'exit_status=1'
    done
    objdir="$origobjdir"

    # Try to remove the ${objdir}s in the directories where we deleted files
    for dir in $rmdirs; do
      if test -d "$dir"; then
	func_show_eval "rmdir $dir >/dev/null 2>&1"
      fi
    done

    exit $exit_status
}

{ test "$mode" = uninstall || test "$mode" = clean; } &&
    func_mode_uninstall ${1+"$@"}

test -z "$mode" && {
  help="$generic_help"
  func_fatal_help "you must specify a MODE"
}

test -z "$exec_cmd" && \
  func_fatal_help "invalid operation mode \`$mode'"

if test -n "$exec_cmd"; then
  eval exec "$exec_cmd"
  exit $EXIT_FAILURE
fi

exit $exit_status


# The TAGs below are defined such that we never get into a situation
# in which we disable both kinds of libraries.  Given conflicting
# choices, we go for a static library, that is the most portable,
# since we can't tell whether shared libraries were disabled because
# the user asked for that or because the platform doesn't support
# them.  This is particularly important on AIX, because we don't
# support having both static and shared libraries enabled at the same
# time on that platform, so we default to a shared-only configuration.
# If a disable-shared tag is given, we'll fallback to a static-only
# configuration.  But we'll never go from static-only to shared-only.

# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
build_libtool_libs=no
build_old_libs=yes
# ### END LIBTOOL TAG CONFIG: disable-shared

# ### BEGIN LIBTOOL TAG CONFIG: disable-static
build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
# ### END LIBTOOL TAG CONFIG: disable-static

# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
# vi:sw=2

Added luasupport/HTTP/libmicrohttpd-0.9.0/ltmain.sh.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
# Generated from ltmain.m4sh.

# ltmain.sh (GNU libtool) 2.2.6b
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996

# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions.  There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# GNU Libtool is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
# or obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

# Usage: $progname [OPTION]... [MODE-ARG]...
#
# Provide generalized library-building support services.
#
#     --config             show all configuration variables
#     --debug              enable verbose shell tracing
# -n, --dry-run            display commands without modifying any files
#     --features           display basic configuration information and exit
#     --mode=MODE          use operation mode MODE
#     --preserve-dup-deps  don't remove duplicate dependency libraries
#     --quiet, --silent    don't print informational messages
#     --tag=TAG            use configuration variables from tag TAG
# -v, --verbose            print informational messages (default)
#     --version            print version information
# -h, --help               print short or long help message
#
# MODE must be one of the following:
#
#       clean              remove files from the build directory
#       compile            compile a source file into a libtool object
#       execute            automatically set library path, then run a program
#       finish             complete the installation of libtool libraries
#       install            install libraries or executables
#       link               create a library or an executable
#       uninstall          remove libraries from an installed directory
#
# MODE-ARGS vary depending on the MODE.
# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
#
# When reporting a bug, please describe a test case to reproduce it and
# include the following information:
#
#       host-triplet:	$host
#       shell:		$SHELL
#       compiler:		$LTCC
#       compiler flags:		$LTCFLAGS
#       linker:		$LD (gnu? $with_gnu_ld)
#       $progname:		(GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1
#       automake:		$automake_version
#       autoconf:		$autoconf_version
#
# Report bugs to <bug-libtool@gnu.org>.

PROGRAM=ltmain.sh
PACKAGE=libtool
VERSION="2.2.6b Debian-2.2.6b-2ubuntu1"
TIMESTAMP=""
package_revision=1.3017

# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
  emulate sh
  NULLCMD=:
  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else
  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh

# NLS nuisances: We save the old values to restore during execute mode.
# Only set LANG and LC_ALL to C if already set.
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
lt_user_locale=
lt_safe_locale=
for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
do
  eval "if test \"\${$lt_var+set}\" = set; then
          save_$lt_var=\$$lt_var
          $lt_var=C
	  export $lt_var
	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
	fi"
done

$lt_unset CDPATH





: ${CP="cp -f"}
: ${ECHO="echo"}
: ${EGREP="/bin/grep -E"}
: ${FGREP="/bin/grep -F"}
: ${GREP="/bin/grep"}
: ${LN_S="ln -s"}
: ${MAKE="make"}
: ${MKDIR="mkdir"}
: ${MV="mv -f"}
: ${RM="rm -f"}
: ${SED="/bin/sed"}
: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
: ${Xsed="$SED -e 1s/^X//"}

# Global variables:
EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.

exit_status=$EXIT_SUCCESS

# Make sure IFS has a sensible default
lt_nl='
'
IFS=" 	$lt_nl"

dirname="s,/[^/]*$,,"
basename="s,^.*/,,"

# func_dirname_and_basename file append nondir_replacement
# perform func_basename and func_dirname in a single function
# call:
#   dirname:  Compute the dirname of FILE.  If nonempty,
#             add APPEND to the result, otherwise set result
#             to NONDIR_REPLACEMENT.
#             value returned in "$func_dirname_result"
#   basename: Compute filename of FILE.
#             value retuned in "$func_basename_result"
# Implementation must be kept synchronized with func_dirname
# and func_basename. For efficiency, we do not delegate to
# those functions but instead duplicate the functionality here.
func_dirname_and_basename ()
{
  # Extract subdirectory from the argument.
  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
  if test "X$func_dirname_result" = "X${1}"; then
    func_dirname_result="${3}"
  else
    func_dirname_result="$func_dirname_result${2}"
  fi
  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
}

# Generated shell functions inserted here.

# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
# is ksh but when the shell is invoked as "sh" and the current value of
# the _XPG environment variable is not equal to 1 (one), the special
# positional parameter $0, within a function call, is the name of the
# function.
progpath="$0"

# The name of this program:
# In the unlikely event $progname began with a '-', it would play havoc with
# func_echo (imagine progname=-n), so we prepend ./ in that case:
func_dirname_and_basename "$progpath"
progname=$func_basename_result
case $progname in
  -*) progname=./$progname ;;
esac

# Make sure we have an absolute path for reexecution:
case $progpath in
  [\\/]*|[A-Za-z]:\\*) ;;
  *[\\/]*)
     progdir=$func_dirname_result
     progdir=`cd "$progdir" && pwd`
     progpath="$progdir/$progname"
     ;;
  *)
     save_IFS="$IFS"
     IFS=:
     for progdir in $PATH; do
       IFS="$save_IFS"
       test -x "$progdir/$progname" && break
     done
     IFS="$save_IFS"
     test -n "$progdir" || progdir=`pwd`
     progpath="$progdir/$progname"
     ;;
esac

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
Xsed="${SED}"' -e 1s/^X//'
sed_quote_subst='s/\([`"$\\]\)/\\\1/g'

# Same as above, but do not quote variable references.
double_quote_subst='s/\(["`\\]\)/\\\1/g'

# Re-`\' parameter expansions in output of double_quote_subst that were
# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
# in input to double_quote_subst, that '$' was protected from expansion.
# Since each input `\' is now two `\'s, look for any number of runs of
# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
bs='\\'
bs2='\\\\'
bs4='\\\\\\\\'
dollar='\$'
sed_double_backslash="\
  s/$bs4/&\\
/g
  s/^$bs2$dollar/$bs&/
  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
  s/\n//g"

# Standard options:
opt_dry_run=false
opt_help=false
opt_quiet=false
opt_verbose=false
opt_warning=:

# func_echo arg...
# Echo program name prefixed message, along with the current mode
# name if it has been set yet.
func_echo ()
{
    $ECHO "$progname${mode+: }$mode: $*"
}

# func_verbose arg...
# Echo program name prefixed message in verbose mode only.
func_verbose ()
{
    $opt_verbose && func_echo ${1+"$@"}

    # A bug in bash halts the script if the last line of a function
    # fails when set -e is in force, so we need another command to
    # work around that:
    :
}

# func_error arg...
# Echo program name prefixed message to standard error.
func_error ()
{
    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
}

# func_warning arg...
# Echo program name prefixed warning message to standard error.
func_warning ()
{
    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2

    # bash bug again:
    :
}

# func_fatal_error arg...
# Echo program name prefixed message to standard error, and exit.
func_fatal_error ()
{
    func_error ${1+"$@"}
    exit $EXIT_FAILURE
}

# func_fatal_help arg...
# Echo program name prefixed message to standard error, followed by
# a help hint, and exit.
func_fatal_help ()
{
    func_error ${1+"$@"}
    func_fatal_error "$help"
}
help="Try \`$progname --help' for more information."  ## default


# func_grep expression filename
# Check whether EXPRESSION matches any line of FILENAME, without output.
func_grep ()
{
    $GREP "$1" "$2" >/dev/null 2>&1
}


# func_mkdir_p directory-path
# Make sure the entire path to DIRECTORY-PATH is available.
func_mkdir_p ()
{
    my_directory_path="$1"
    my_dir_list=

    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then

      # Protect directory names starting with `-'
      case $my_directory_path in
        -*) my_directory_path="./$my_directory_path" ;;
      esac

      # While some portion of DIR does not yet exist...
      while test ! -d "$my_directory_path"; do
        # ...make a list in topmost first order.  Use a colon delimited
	# list incase some portion of path contains whitespace.
        my_dir_list="$my_directory_path:$my_dir_list"

        # If the last portion added has no slash in it, the list is done
        case $my_directory_path in */*) ;; *) break ;; esac

        # ...otherwise throw away the child directory and loop
        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
      done
      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`

      save_mkdir_p_IFS="$IFS"; IFS=':'
      for my_dir in $my_dir_list; do
	IFS="$save_mkdir_p_IFS"
        # mkdir can fail with a `File exist' error if two processes
        # try to create one of the directories concurrently.  Don't
        # stop in that case!
        $MKDIR "$my_dir" 2>/dev/null || :
      done
      IFS="$save_mkdir_p_IFS"

      # Bail out if we (or some other process) failed to create a directory.
      test -d "$my_directory_path" || \
        func_fatal_error "Failed to create \`$1'"
    fi
}


# func_mktempdir [string]
# Make a temporary directory that won't clash with other running
# libtool processes, and avoids race conditions if possible.  If
# given, STRING is the basename for that directory.
func_mktempdir ()
{
    my_template="${TMPDIR-/tmp}/${1-$progname}"

    if test "$opt_dry_run" = ":"; then
      # Return a directory name, but don't create it in dry-run mode
      my_tmpdir="${my_template}-$$"
    else

      # If mktemp works, use that first and foremost
      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`

      if test ! -d "$my_tmpdir"; then
        # Failing that, at least try and use $RANDOM to avoid a race
        my_tmpdir="${my_template}-${RANDOM-0}$$"

        save_mktempdir_umask=`umask`
        umask 0077
        $MKDIR "$my_tmpdir"
        umask $save_mktempdir_umask
      fi

      # If we're not in dry-run mode, bomb out on failure
      test -d "$my_tmpdir" || \
        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
    fi

    $ECHO "X$my_tmpdir" | $Xsed
}


# func_quote_for_eval arg
# Aesthetically quote ARG to be evaled later.
# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
# is double-quoted, suitable for a subsequent eval, whereas
# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
# which are still active within double quotes backslashified.
func_quote_for_eval ()
{
    case $1 in
      *[\\\`\"\$]*)
	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
      *)
        func_quote_for_eval_unquoted_result="$1" ;;
    esac

    case $func_quote_for_eval_unquoted_result in
      # Double-quote args containing shell metacharacters to delay
      # word splitting, command substitution and and variable
      # expansion for a subsequent eval.
      # Many Bourne shells cannot handle close brackets correctly
      # in scan sets, so we specify it separately.
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
        ;;
      *)
        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
    esac
}


# func_quote_for_expand arg
# Aesthetically quote ARG to be evaled later; same as above,
# but do not quote variable references.
func_quote_for_expand ()
{
    case $1 in
      *[\\\`\"]*)
	my_arg=`$ECHO "X$1" | $Xsed \
	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
      *)
        my_arg="$1" ;;
    esac

    case $my_arg in
      # Double-quote args containing shell metacharacters to delay
      # word splitting and command substitution for a subsequent eval.
      # Many Bourne shells cannot handle close brackets correctly
      # in scan sets, so we specify it separately.
      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
        my_arg="\"$my_arg\""
        ;;
    esac

    func_quote_for_expand_result="$my_arg"
}


# func_show_eval cmd [fail_exp]
# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
# is given, then evaluate it.
func_show_eval ()
{
    my_cmd="$1"
    my_fail_exp="${2-:}"

    ${opt_silent-false} || {
      func_quote_for_expand "$my_cmd"
      eval "func_echo $func_quote_for_expand_result"
    }

    if ${opt_dry_run-false}; then :; else
      eval "$my_cmd"
      my_status=$?
      if test "$my_status" -eq 0; then :; else
	eval "(exit $my_status); $my_fail_exp"
      fi
    fi
}


# func_show_eval_locale cmd [fail_exp]
# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
# is given, then evaluate it.  Use the saved locale for evaluation.
func_show_eval_locale ()
{
    my_cmd="$1"
    my_fail_exp="${2-:}"

    ${opt_silent-false} || {
      func_quote_for_expand "$my_cmd"
      eval "func_echo $func_quote_for_expand_result"
    }

    if ${opt_dry_run-false}; then :; else
      eval "$lt_user_locale
	    $my_cmd"
      my_status=$?
      eval "$lt_safe_locale"
      if test "$my_status" -eq 0; then :; else
	eval "(exit $my_status); $my_fail_exp"
      fi
    fi
}





# func_version
# Echo version message to standard output and exit.
func_version ()
{
    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
        s/^# //
	s/^# *$//
        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
        p
     }' < "$progpath"
     exit $?
}

# func_usage
# Echo short help message to standard output and exit.
func_usage ()
{
    $SED -n '/^# Usage:/,/# -h/ {
        s/^# //
	s/^# *$//
	s/\$progname/'$progname'/
	p
    }' < "$progpath"
    $ECHO
    $ECHO "run \`$progname --help | more' for full usage"
    exit $?
}

# func_help
# Echo long help message to standard output and exit.
func_help ()
{
    $SED -n '/^# Usage:/,/# Report bugs to/ {
        s/^# //
	s/^# *$//
	s*\$progname*'$progname'*
	s*\$host*'"$host"'*
	s*\$SHELL*'"$SHELL"'*
	s*\$LTCC*'"$LTCC"'*
	s*\$LTCFLAGS*'"$LTCFLAGS"'*
	s*\$LD*'"$LD"'*
	s/\$with_gnu_ld/'"$with_gnu_ld"'/
	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
	p
     }' < "$progpath"
    exit $?
}

# func_missing_arg argname
# Echo program name prefixed message to standard error and set global
# exit_cmd.
func_missing_arg ()
{
    func_error "missing argument for $1"
    exit_cmd=exit
}

exit_cmd=:





# Check that we have a working $ECHO.
if test "X$1" = X--no-reexec; then
  # Discard the --no-reexec flag, and continue.
  shift
elif test "X$1" = X--fallback-echo; then
  # Avoid inline document here, it may be left over
  :
elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
  # Yippee, $ECHO works!
  :
else
  # Restart under the correct shell, and then maybe $ECHO will work.
  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
fi

if test "X$1" = X--fallback-echo; then
  # used as fallback echo
  shift
  cat <<EOF
$*
EOF
  exit $EXIT_SUCCESS
fi

magic="%%%MAGIC variable%%%"
magic_exe="%%%MAGIC EXE variable%%%"

# Global variables.
# $mode is unset
nonopt=
execute_dlfiles=
preserve_args=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
extracted_archives=
extracted_serial=0

opt_dry_run=false
opt_duplicate_deps=false
opt_silent=false
opt_debug=:

# If this variable is set in any of the actions, the command in it
# will be execed at the end.  This prevents here-documents from being
# left over by shells.
exec_cmd=

# func_fatal_configuration arg...
# Echo program name prefixed message to standard error, followed by
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
    func_error ${1+"$@"}
    func_error "See the $PACKAGE documentation for more information."
    func_fatal_error "Fatal configuration error."
}


# func_config
# Display the configuration for all the tags in this script.
func_config ()
{
    re_begincf='^# ### BEGIN LIBTOOL'
    re_endcf='^# ### END LIBTOOL'

    # Default configuration.
    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"

    # Now print the configurations for the tags.
    for tagname in $taglist; do
      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
    done

    exit $?
}

# func_features
# Display the features supported by this script.
func_features ()
{
    $ECHO "host: $host"
    if test "$build_libtool_libs" = yes; then
      $ECHO "enable shared libraries"
    else
      $ECHO "disable shared libraries"
    fi
    if test "$build_old_libs" = yes; then
      $ECHO "enable static libraries"
    else
      $ECHO "disable static libraries"
    fi

    exit $?
}

# func_enable_tag tagname
# Verify that TAGNAME is valid, and either flag an error and exit, or
# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
# variable here.
func_enable_tag ()
{
  # Global variable:
  tagname="$1"

  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
  sed_extractcf="/$re_begincf/,/$re_endcf/p"

  # Validate tagname.
  case $tagname in
    *[!-_A-Za-z0-9,/]*)
      func_fatal_error "invalid tag name: $tagname"
      ;;
  esac

  # Don't test for the "default" C tag, as we know it's
  # there but not specially marked.
  case $tagname in
    CC) ;;
    *)
      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
	taglist="$taglist $tagname"

	# Evaluate the configuration.  Be careful to quote the path
	# and the sed script, to avoid splitting on whitespace, but
	# also don't use non-portable quotes within backquotes within
	# quotes we have to do it in 2 steps:
	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
	eval "$extractedcf"
      else
	func_error "ignoring unknown tag $tagname"
      fi
      ;;
  esac
}

# Parse options once, thoroughly.  This comes as soon as possible in
# the script to make things like `libtool --version' happen quickly.
{

  # Shorthand for --mode=foo, only valid as the first argument
  case $1 in
  clean|clea|cle|cl)
    shift; set dummy --mode clean ${1+"$@"}; shift
    ;;
  compile|compil|compi|comp|com|co|c)
    shift; set dummy --mode compile ${1+"$@"}; shift
    ;;
  execute|execut|execu|exec|exe|ex|e)
    shift; set dummy --mode execute ${1+"$@"}; shift
    ;;
  finish|finis|fini|fin|fi|f)
    shift; set dummy --mode finish ${1+"$@"}; shift
    ;;
  install|instal|insta|inst|ins|in|i)
    shift; set dummy --mode install ${1+"$@"}; shift
    ;;
  link|lin|li|l)
    shift; set dummy --mode link ${1+"$@"}; shift
    ;;
  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
    shift; set dummy --mode uninstall ${1+"$@"}; shift
    ;;
  esac

  # Parse non-mode specific arguments:
  while test "$#" -gt 0; do
    opt="$1"
    shift

    case $opt in
      --config)		func_config					;;

      --debug)		preserve_args="$preserve_args $opt"
			func_echo "enabling shell trace mode"
			opt_debug='set -x'
			$opt_debug
			;;

      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
			execute_dlfiles="$execute_dlfiles $1"
			shift
			;;

      --dry-run | -n)	opt_dry_run=:					;;
      --features)       func_features					;;
      --finish)		mode="finish"					;;

      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
			case $1 in
			  # Valid mode arguments:
			  clean)	;;
			  compile)	;;
			  execute)	;;
			  finish)	;;
			  install)	;;
			  link)		;;
			  relink)	;;
			  uninstall)	;;

			  # Catch anything else as an error
			  *) func_error "invalid argument for $opt"
			     exit_cmd=exit
			     break
			     ;;
		        esac

			mode="$1"
			shift
			;;

      --preserve-dup-deps)
			opt_duplicate_deps=:				;;

      --quiet|--silent)	preserve_args="$preserve_args $opt"
			opt_silent=:
			;;

      --verbose| -v)	preserve_args="$preserve_args $opt"
			opt_silent=false
			;;

      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
			preserve_args="$preserve_args $opt $1"
			func_enable_tag "$1"	# tagname is set here
			shift
			;;

      # Separate optargs to long options:
      -dlopen=*|--mode=*|--tag=*)
			func_opt_split "$opt"
			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
			shift
			;;

      -\?|-h)		func_usage					;;
      --help)		opt_help=:					;;
      --version)	func_version					;;

      -*)		func_fatal_help "unrecognized option \`$opt'"	;;

      *)		nonopt="$opt"
			break
			;;
    esac
  done


  case $host in
    *cygwin* | *mingw* | *pw32* | *cegcc*)
      # don't eliminate duplications in $postdeps and $predeps
      opt_duplicate_compiler_generated_deps=:
      ;;
    *)
      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
      ;;
  esac

  # Having warned about all mis-specified options, bail out if
  # anything was wrong.
  $exit_cmd $EXIT_FAILURE
}

# func_check_version_match
# Ensure that we are using m4 macros, and libtool script from the same
# release of libtool.
func_check_version_match ()
{
  if test "$package_revision" != "$macro_revision"; then
    if test "$VERSION" != "$macro_version"; then
      if test -z "$macro_version"; then
        cat >&2 <<_LT_EOF
$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
$progname: definition of this LT_INIT comes from an older release.
$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
$progname: and run autoconf again.
_LT_EOF
      else
        cat >&2 <<_LT_EOF
$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
$progname: and run autoconf again.
_LT_EOF
      fi
    else
      cat >&2 <<_LT_EOF
$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
$progname: but the definition of this LT_INIT comes from revision $macro_revision.
$progname: You should recreate aclocal.m4 with macros from revision $package_revision
$progname: of $PACKAGE $VERSION and run autoconf again.
_LT_EOF
    fi

    exit $EXIT_MISMATCH
  fi
}


## ----------- ##
##    Main.    ##
## ----------- ##

$opt_help || {
  # Sanity checks first:
  func_check_version_match

  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
    func_fatal_configuration "not configured to build any kind of library"
  fi

  test -z "$mode" && func_fatal_error "error: you must specify a MODE."


  # Darwin sucks
  eval std_shrext=\"$shrext_cmds\"


  # Only execute mode is allowed to have -dlopen flags.
  if test -n "$execute_dlfiles" && test "$mode" != execute; then
    func_error "unrecognized option \`-dlopen'"
    $ECHO "$help" 1>&2
    exit $EXIT_FAILURE
  fi

  # Change the help message to a mode-specific one.
  generic_help="$help"
  help="Try \`$progname --help --mode=$mode' for more information."
}


# func_lalib_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_lalib_p ()
{
    test -f "$1" &&
      $SED -e 4q "$1" 2>/dev/null \
        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
}

# func_lalib_unsafe_p file
# True iff FILE is a libtool `.la' library or `.lo' object file.
# This function implements the same check as func_lalib_p without
# resorting to external programs.  To this end, it redirects stdin and
# closes it afterwards, without saving the original file descriptor.
# As a safety measure, use it only where a negative result would be
# fatal anyway.  Works if `file' does not exist.
func_lalib_unsafe_p ()
{
    lalib_p=no
    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
	for lalib_p_l in 1 2 3 4
	do
	    read lalib_p_line
	    case "$lalib_p_line" in
		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
	    esac
	done
	exec 0<&5 5<&-
    fi
    test "$lalib_p" = yes
}

# func_ltwrapper_script_p file
# True iff FILE is a libtool wrapper script
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_script_p ()
{
    func_lalib_p "$1"
}

# func_ltwrapper_executable_p file
# True iff FILE is a libtool wrapper executable
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_executable_p ()
{
    func_ltwrapper_exec_suffix=
    case $1 in
    *.exe) ;;
    *) func_ltwrapper_exec_suffix=.exe ;;
    esac
    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
}

# func_ltwrapper_scriptname file
# Assumes file is an ltwrapper_executable
# uses $file to determine the appropriate filename for a
# temporary ltwrapper_script.
func_ltwrapper_scriptname ()
{
    func_ltwrapper_scriptname_result=""
    if func_ltwrapper_executable_p "$1"; then
	func_dirname_and_basename "$1" "" "."
	func_stripname '' '.exe' "$func_basename_result"
	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
    fi
}

# func_ltwrapper_p file
# True iff FILE is a libtool wrapper script or wrapper executable
# This function is only a basic sanity check; it will hardly flush out
# determined imposters.
func_ltwrapper_p ()
{
    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
}


# func_execute_cmds commands fail_cmd
# Execute tilde-delimited COMMANDS.
# If FAIL_CMD is given, eval that upon failure.
# FAIL_CMD may read-access the current command in variable CMD!
func_execute_cmds ()
{
    $opt_debug
    save_ifs=$IFS; IFS='~'
    for cmd in $1; do
      IFS=$save_ifs
      eval cmd=\"$cmd\"
      func_show_eval "$cmd" "${2-:}"
    done
    IFS=$save_ifs
}


# func_source file
# Source FILE, adding directory component if necessary.
# Note that it is not necessary on cygwin/mingw to append a dot to
# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
# behavior happens only for exec(3), not for open(2)!  Also, sourcing
# `FILE.' does not work on cygwin managed mounts.
func_source ()
{
    $opt_debug
    case $1 in
    */* | *\\*)	. "$1" ;;
    *)		. "./$1" ;;
    esac
}


# func_infer_tag arg
# Infer tagged configuration to use if any are available and
# if one wasn't chosen via the "--tag" command line option.
# Only attempt this if the compiler in the base compile
# command doesn't match the default compiler.
# arg is usually of the form 'gcc ...'
func_infer_tag ()
{
    $opt_debug
    if test -n "$available_tags" && test -z "$tagname"; then
      CC_quoted=
      for arg in $CC; do
        func_quote_for_eval "$arg"
	CC_quoted="$CC_quoted $func_quote_for_eval_result"
      done
      case $@ in
      # Blanks in the command may have been stripped by the calling shell,
      # but not from the CC environment variable when configure was run.
      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
      # Blanks at the start of $base_compile will cause this to fail
      # if we don't check for them as well.
      *)
	for z in $available_tags; do
	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
	    # Evaluate the configuration.
	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
	    CC_quoted=
	    for arg in $CC; do
	      # Double-quote args containing other shell metacharacters.
	      func_quote_for_eval "$arg"
	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
	    done
	    case "$@ " in
	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
	      # The compiler in the base compile command matches
	      # the one in the tagged configuration.
	      # Assume this is the tagged configuration we want.
	      tagname=$z
	      break
	      ;;
	    esac
	  fi
	done
	# If $tagname still isn't set, then no tagged configuration
	# was found and let the user know that the "--tag" command
	# line option must be used.
	if test -z "$tagname"; then
	  func_echo "unable to infer tagged configuration"
	  func_fatal_error "specify a tag with \`--tag'"
#	else
#	  func_verbose "using $tagname tagged configuration"
	fi
	;;
      esac
    fi
}



# func_write_libtool_object output_name pic_name nonpic_name
# Create a libtool object file (analogous to a ".la" file),
# but don't create it if we're doing a dry run.
func_write_libtool_object ()
{
    write_libobj=${1}
    if test "$build_libtool_libs" = yes; then
      write_lobj=\'${2}\'
    else
      write_lobj=none
    fi

    if test "$build_old_libs" = yes; then
      write_oldobj=\'${3}\'
    else
      write_oldobj=none
    fi

    $opt_dry_run || {
      cat >${write_libobj}T <<EOF
# $write_libobj - a libtool object file
# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# Name of the PIC object.
pic_object=$write_lobj

# Name of the non-PIC object
non_pic_object=$write_oldobj

EOF
      $MV "${write_libobj}T" "${write_libobj}"
    }
}

# func_mode_compile arg...
func_mode_compile ()
{
    $opt_debug
    # Get the compilation command and the source file.
    base_compile=
    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
    suppress_opt=yes
    suppress_output=
    arg_mode=normal
    libobj=
    later=
    pie_flag=

    for arg
    do
      case $arg_mode in
      arg  )
	# do not "continue".  Instead, add this to base_compile
	lastarg="$arg"
	arg_mode=normal
	;;

      target )
	libobj="$arg"
	arg_mode=normal
	continue
	;;

      normal )
	# Accept any command-line options.
	case $arg in
	-o)
	  test -n "$libobj" && \
	    func_fatal_error "you cannot specify \`-o' more than once"
	  arg_mode=target
	  continue
	  ;;

	-pie | -fpie | -fPIE)
          pie_flag="$pie_flag $arg"
	  continue
	  ;;

	-shared | -static | -prefer-pic | -prefer-non-pic)
	  later="$later $arg"
	  continue
	  ;;

	-no-suppress)
	  suppress_opt=no
	  continue
	  ;;

	-Xcompiler)
	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
	  continue      #  The current "srcfile" will either be retained or
	  ;;            #  replaced later.  I would guess that would be a bug.

	-Wc,*)
	  func_stripname '-Wc,' '' "$arg"
	  args=$func_stripname_result
	  lastarg=
	  save_ifs="$IFS"; IFS=','
	  for arg in $args; do
	    IFS="$save_ifs"
	    func_quote_for_eval "$arg"
	    lastarg="$lastarg $func_quote_for_eval_result"
	  done
	  IFS="$save_ifs"
	  func_stripname ' ' '' "$lastarg"
	  lastarg=$func_stripname_result

	  # Add the arguments to base_compile.
	  base_compile="$base_compile $lastarg"
	  continue
	  ;;

	*)
	  # Accept the current argument as the source file.
	  # The previous "srcfile" becomes the current argument.
	  #
	  lastarg="$srcfile"
	  srcfile="$arg"
	  ;;
	esac  #  case $arg
	;;
      esac    #  case $arg_mode

      # Aesthetically quote the previous argument.
      func_quote_for_eval "$lastarg"
      base_compile="$base_compile $func_quote_for_eval_result"
    done # for arg

    case $arg_mode in
    arg)
      func_fatal_error "you must specify an argument for -Xcompile"
      ;;
    target)
      func_fatal_error "you must specify a target with \`-o'"
      ;;
    *)
      # Get the name of the library object.
      test -z "$libobj" && {
	func_basename "$srcfile"
	libobj="$func_basename_result"
      }
      ;;
    esac

    # Recognize several different file suffixes.
    # If the user specifies -o file.o, it is replaced with file.lo
    case $libobj in
    *.[cCFSifmso] | \
    *.ada | *.adb | *.ads | *.asm | \
    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
      func_xform "$libobj"
      libobj=$func_xform_result
      ;;
    esac

    case $libobj in
    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
    *)
      func_fatal_error "cannot determine name of library object from \`$libobj'"
      ;;
    esac

    func_infer_tag $base_compile

    for arg in $later; do
      case $arg in
      -shared)
	test "$build_libtool_libs" != yes && \
	  func_fatal_configuration "can not build a shared library"
	build_old_libs=no
	continue
	;;

      -static)
	build_libtool_libs=no
	build_old_libs=yes
	continue
	;;

      -prefer-pic)
	pic_mode=yes
	continue
	;;

      -prefer-non-pic)
	pic_mode=no
	continue
	;;
      esac
    done

    func_quote_for_eval "$libobj"
    test "X$libobj" != "X$func_quote_for_eval_result" \
      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
      && func_warning "libobj name \`$libobj' may not contain shell special characters."
    func_dirname_and_basename "$obj" "/" ""
    objname="$func_basename_result"
    xdir="$func_dirname_result"
    lobj=${xdir}$objdir/$objname

    test -z "$base_compile" && \
      func_fatal_help "you must specify a compilation command"

    # Delete any leftover library objects.
    if test "$build_old_libs" = yes; then
      removelist="$obj $lobj $libobj ${libobj}T"
    else
      removelist="$lobj $libobj ${libobj}T"
    fi

    # On Cygwin there's no "real" PIC flag so we must build both object types
    case $host_os in
    cygwin* | mingw* | pw32* | os2* | cegcc*)
      pic_mode=default
      ;;
    esac
    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
      # non-PIC code in shared libraries is not supported
      pic_mode=default
    fi

    # Calculate the filename of the output object if compiler does
    # not support -o with -c
    if test "$compiler_c_o" = no; then
      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
      lockfile="$output_obj.lock"
    else
      output_obj=
      need_locks=no
      lockfile=
    fi

    # Lock this critical section if it is needed
    # We use this script file to make the link, it avoids creating a new file
    if test "$need_locks" = yes; then
      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
	func_echo "Waiting for $lockfile to be removed"
	sleep 2
      done
    elif test "$need_locks" = warn; then
      if test -f "$lockfile"; then
	$ECHO "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$opt_dry_run || $RM $removelist
	exit $EXIT_FAILURE
      fi
      removelist="$removelist $output_obj"
      $ECHO "$srcfile" > "$lockfile"
    fi

    $opt_dry_run || $RM $removelist
    removelist="$removelist $lockfile"
    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15

    if test -n "$fix_srcfile_path"; then
      eval srcfile=\"$fix_srcfile_path\"
    fi
    func_quote_for_eval "$srcfile"
    qsrcfile=$func_quote_for_eval_result

    # Only build a PIC object if we are building libtool libraries.
    if test "$build_libtool_libs" = yes; then
      # Without this assignment, base_compile gets emptied.
      fbsd_hideous_sh_bug=$base_compile

      if test "$pic_mode" != no; then
	command="$base_compile $qsrcfile $pic_flag"
      else
	# Don't build PIC code
	command="$base_compile $qsrcfile"
      fi

      func_mkdir_p "$xdir$objdir"

      if test -z "$output_obj"; then
	# Place PIC objects in $objdir
	command="$command -o $lobj"
      fi

      func_show_eval_locale "$command"	\
          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'

      if test "$need_locks" = warn &&
	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
	$ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`

but it should contain:
$srcfile

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$opt_dry_run || $RM $removelist
	exit $EXIT_FAILURE
      fi

      # Just move the object if needed, then go on to compile the next one
      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
	func_show_eval '$MV "$output_obj" "$lobj"' \
	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
      fi

      # Allow error messages only from the first compilation.
      if test "$suppress_opt" = yes; then
	suppress_output=' >/dev/null 2>&1'
      fi
    fi

    # Only build a position-dependent object if we build old libraries.
    if test "$build_old_libs" = yes; then
      if test "$pic_mode" != yes; then
	# Don't build PIC code
	command="$base_compile $qsrcfile$pie_flag"
      else
	command="$base_compile $qsrcfile $pic_flag"
      fi
      if test "$compiler_c_o" = yes; then
	command="$command -o $obj"
      fi

      # Suppress compiler output if we already did a PIC compilation.
      command="$command$suppress_output"
      func_show_eval_locale "$command" \
        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'

      if test "$need_locks" = warn &&
	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
	$ECHO "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`

but it should contain:
$srcfile

This indicates that another process is trying to use the same
temporary object file, and libtool could not work around it because
your compiler does not support \`-c' and \`-o' together.  If you
repeat this compilation, it may succeed, by chance, but you had better
avoid parallel builds (make -j) in this platform, or get a better
compiler."

	$opt_dry_run || $RM $removelist
	exit $EXIT_FAILURE
      fi

      # Just move the object if needed
      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
	func_show_eval '$MV "$output_obj" "$obj"' \
	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
      fi
    fi

    $opt_dry_run || {
      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"

      # Unlock the critical section if it was locked
      if test "$need_locks" != no; then
	removelist=$lockfile
        $RM "$lockfile"
      fi
    }

    exit $EXIT_SUCCESS
}

$opt_help || {
test "$mode" = compile && func_mode_compile ${1+"$@"}
}

func_mode_help ()
{
    # We need to display help for each of the modes.
    case $mode in
      "")
        # Generic help is extracted from the usage comments
        # at the start of this file.
        func_help
        ;;

      clean)
        $ECHO \
"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...

Remove files from the build directory.

RM is the name of the program to use to delete files associated with each FILE
(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
to RM.

If FILE is a libtool library, object or program, all the files associated
with it are deleted. Otherwise, only FILE itself is deleted using RM."
        ;;

      compile)
      $ECHO \
"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE

Compile a source file into a libtool library object.

This mode accepts the following additional options:

  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
  -no-suppress      do not suppress compiler output for multiple passes
  -prefer-pic       try to building PIC objects only
  -prefer-non-pic   try to building non-PIC objects only
  -shared           do not build a \`.o' file suitable for static linking
  -static           only build a \`.o' file suitable for static linking

COMPILE-COMMAND is a command to be used in creating a \`standard' object file
from the given SOURCEFILE.

The output file name is determined by removing the directory component from
SOURCEFILE, then substituting the C source code suffix \`.c' with the
library object suffix, \`.lo'."
        ;;

      execute)
        $ECHO \
"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...

Automatically set library path, then run a program.

This mode accepts the following additional options:

  -dlopen FILE      add the directory containing FILE to the library path

This mode sets the library path environment variable according to \`-dlopen'
flags.

If any of the ARGS are libtool executable wrappers, then they are translated
into their corresponding uninstalled binary, and any of their required library
directories are added to the library path.

Then, COMMAND is executed, with ARGS as arguments."
        ;;

      finish)
        $ECHO \
"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...

Complete the installation of libtool libraries.

Each LIBDIR is a directory that contains libtool libraries.

The commands that this mode executes may require superuser privileges.  Use
the \`--dry-run' option if you just want to see what would be executed."
        ;;

      install)
        $ECHO \
"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...

Install executables or libraries.

INSTALL-COMMAND is the installation command.  The first component should be
either the \`install' or \`cp' program.

The following components of INSTALL-COMMAND are treated specially:

  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation

The rest of the components are interpreted as arguments to that command (only
BSD-compatible install options are recognized)."
        ;;

      link)
        $ECHO \
"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...

Link object files or libraries together to form another library, or to
create an executable program.

LINK-COMMAND is a command using the C compiler that you would use to create
a program from several object files.

The following components of LINK-COMMAND are treated specially:

  -all-static       do not do any dynamic linking at all
  -avoid-version    do not add a version suffix if possible
  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
  -export-symbols SYMFILE
                    try to export only the symbols listed in SYMFILE
  -export-symbols-regex REGEX
                    try to export only the symbols matching REGEX
  -LLIBDIR          search LIBDIR for required installed libraries
  -lNAME            OUTPUT-FILE requires the installed library libNAME
  -module           build a library that can dlopened
  -no-fast-install  disable the fast-install mode
  -no-install       link a not-installable executable
  -no-undefined     declare that a library does not refer to external symbols
  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
  -objectlist FILE  Use a list of object files found in FILE to specify objects
  -precious-files-regex REGEX
                    don't remove output files matching REGEX
  -release RELEASE  specify package release information
  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
  -shared           only do dynamic linking of libtool libraries
  -shrext SUFFIX    override the standard shared library file extension
  -static           do not do any dynamic linking of uninstalled libtool libraries
  -static-libtool-libs
                    do not do any dynamic linking of libtool libraries
  -version-info CURRENT[:REVISION[:AGE]]
                    specify library version info [each variable defaults to 0]
  -weak LIBNAME     declare that the target provides the LIBNAME interface

All other options (arguments beginning with \`-') are ignored.

Every other argument is treated as a filename.  Files ending in \`.la' are
treated as uninstalled libtool libraries, other files are standard or library
object files.

If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
only library objects (\`.lo' files) may be specified, and \`-rpath' is
required, except when creating a convenience library.

If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
using \`ar' and \`ranlib', or on Windows using \`lib'.

If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
is created, otherwise an executable program is created."
        ;;

      uninstall)
        $ECHO \
"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...

Remove libraries from an installation directory.

RM is the name of the program to use to delete files associated with each FILE
(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
to RM.

If FILE is a libtool library, all the files associated with it are deleted.
Otherwise, only FILE itself is deleted using RM."
        ;;

      *)
        func_fatal_help "invalid operation mode \`$mode'"
        ;;
    esac

    $ECHO
    $ECHO "Try \`$progname --help' for more information about other modes."

    exit $?
}

  # Now that we've collected a possible --mode arg, show help if necessary
  $opt_help && func_mode_help


# func_mode_execute arg...
func_mode_execute ()
{
    $opt_debug
    # The first argument is the command name.
    cmd="$nonopt"
    test -z "$cmd" && \
      func_fatal_help "you must specify a COMMAND"

    # Handle -dlopen flags immediately.
    for file in $execute_dlfiles; do
      test -f "$file" \
	|| func_fatal_help "\`$file' is not a file"

      dir=
      case $file in
      *.la)
	# Check to see that this really is a libtool archive.
	func_lalib_unsafe_p "$file" \
	  || func_fatal_help "\`$lib' is not a valid libtool archive"

	# Read the libtool library.
	dlname=
	library_names=
	func_source "$file"

	# Skip this library if it cannot be dlopened.
	if test -z "$dlname"; then
	  # Warn if it was a shared library.
	  test -n "$library_names" && \
	    func_warning "\`$file' was not linked with \`-export-dynamic'"
	  continue
	fi

	func_dirname "$file" "" "."
	dir="$func_dirname_result"

	if test -f "$dir/$objdir/$dlname"; then
	  dir="$dir/$objdir"
	else
	  if test ! -f "$dir/$dlname"; then
	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
	  fi
	fi
	;;

      *.lo)
	# Just add the directory containing the .lo file.
	func_dirname "$file" "" "."
	dir="$func_dirname_result"
	;;

      *)
	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
	continue
	;;
      esac

      # Get the absolute pathname.
      absdir=`cd "$dir" && pwd`
      test -n "$absdir" && dir="$absdir"

      # Now add the directory to shlibpath_var.
      if eval "test -z \"\$$shlibpath_var\""; then
	eval "$shlibpath_var=\"\$dir\""
      else
	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
      fi
    done

    # This variable tells wrapper scripts just to set shlibpath_var
    # rather than running their programs.
    libtool_execute_magic="$magic"

    # Check if any of the arguments is a wrapper script.
    args=
    for file
    do
      case $file in
      -*) ;;
      *)
	# Do a test to see if this is really a libtool program.
	if func_ltwrapper_script_p "$file"; then
	  func_source "$file"
	  # Transform arg to wrapped name.
	  file="$progdir/$program"
	elif func_ltwrapper_executable_p "$file"; then
	  func_ltwrapper_scriptname "$file"
	  func_source "$func_ltwrapper_scriptname_result"
	  # Transform arg to wrapped name.
	  file="$progdir/$program"
	fi
	;;
      esac
      # Quote arguments (to preserve shell metacharacters).
      func_quote_for_eval "$file"
      args="$args $func_quote_for_eval_result"
    done

    if test "X$opt_dry_run" = Xfalse; then
      if test -n "$shlibpath_var"; then
	# Export the shlibpath_var.
	eval "export $shlibpath_var"
      fi

      # Restore saved environment variables
      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
      do
	eval "if test \"\${save_$lt_var+set}\" = set; then
                $lt_var=\$save_$lt_var; export $lt_var
	      else
		$lt_unset $lt_var
	      fi"
      done

      # Now prepare to actually exec the command.
      exec_cmd="\$cmd$args"
    else
      # Display what would be done.
      if test -n "$shlibpath_var"; then
	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
	$ECHO "export $shlibpath_var"
      fi
      $ECHO "$cmd$args"
      exit $EXIT_SUCCESS
    fi
}

test "$mode" = execute && func_mode_execute ${1+"$@"}


# func_mode_finish arg...
func_mode_finish ()
{
    $opt_debug
    libdirs="$nonopt"
    admincmds=

    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
      for dir
      do
	libdirs="$libdirs $dir"
      done

      for libdir in $libdirs; do
	if test -n "$finish_cmds"; then
	  # Do each command in the finish commands.
	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
'"$cmd"'"'
	fi
	if test -n "$finish_eval"; then
	  # Do the single finish_eval.
	  eval cmds=\"$finish_eval\"
	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
       $cmds"
	fi
      done
    fi

    # Exit here if they wanted silent mode.
    $opt_silent && exit $EXIT_SUCCESS

    $ECHO "X----------------------------------------------------------------------" | $Xsed
    $ECHO "Libraries have been installed in:"
    for libdir in $libdirs; do
      $ECHO "   $libdir"
    done
    $ECHO
    $ECHO "If you ever happen to want to link against installed libraries"
    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
    $ECHO "flag during linking and do at least one of the following:"
    if test -n "$shlibpath_var"; then
      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
      $ECHO "     during execution"
    fi
    if test -n "$runpath_var"; then
      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
      $ECHO "     during linking"
    fi
    if test -n "$hardcode_libdir_flag_spec"; then
      libdir=LIBDIR
      eval flag=\"$hardcode_libdir_flag_spec\"

      $ECHO "   - use the \`$flag' linker flag"
    fi
    if test -n "$admincmds"; then
      $ECHO "   - have your system administrator run these commands:$admincmds"
    fi
    if test -f /etc/ld.so.conf; then
      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
    fi
    $ECHO

    $ECHO "See any operating system documentation about shared libraries for"
    case $host in
      solaris2.[6789]|solaris2.1[0-9])
        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
	$ECHO "pages."
	;;
      *)
        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
        ;;
    esac
    $ECHO "X----------------------------------------------------------------------" | $Xsed
    exit $EXIT_SUCCESS
}

test "$mode" = finish && func_mode_finish ${1+"$@"}


# func_mode_install arg...
func_mode_install ()
{
    $opt_debug
    # There may be an optional sh(1) argument at the beginning of
    # install_prog (especially on Windows NT).
    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
       # Allow the use of GNU shtool's install command.
       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
      # Aesthetically quote it.
      func_quote_for_eval "$nonopt"
      install_prog="$func_quote_for_eval_result "
      arg=$1
      shift
    else
      install_prog=
      arg=$nonopt
    fi

    # The real first argument should be the name of the installation program.
    # Aesthetically quote it.
    func_quote_for_eval "$arg"
    install_prog="$install_prog$func_quote_for_eval_result"

    # We need to accept at least all the BSD install flags.
    dest=
    files=
    opts=
    prev=
    install_type=
    isdir=no
    stripme=
    for arg
    do
      if test -n "$dest"; then
	files="$files $dest"
	dest=$arg
	continue
      fi

      case $arg in
      -d) isdir=yes ;;
      -f)
	case " $install_prog " in
	*[\\\ /]cp\ *) ;;
	*) prev=$arg ;;
	esac
	;;
      -g | -m | -o)
	prev=$arg
	;;
      -s)
	stripme=" -s"
	continue
	;;
      -*)
	;;
      *)
	# If the previous option needed an argument, then skip it.
	if test -n "$prev"; then
	  prev=
	else
	  dest=$arg
	  continue
	fi
	;;
      esac

      # Aesthetically quote the argument.
      func_quote_for_eval "$arg"
      install_prog="$install_prog $func_quote_for_eval_result"
    done

    test -z "$install_prog" && \
      func_fatal_help "you must specify an install program"

    test -n "$prev" && \
      func_fatal_help "the \`$prev' option requires an argument"

    if test -z "$files"; then
      if test -z "$dest"; then
	func_fatal_help "no file or destination specified"
      else
	func_fatal_help "you must specify a destination"
      fi
    fi

    # Strip any trailing slash from the destination.
    func_stripname '' '/' "$dest"
    dest=$func_stripname_result

    # Check to see that the destination is a directory.
    test -d "$dest" && isdir=yes
    if test "$isdir" = yes; then
      destdir="$dest"
      destname=
    else
      func_dirname_and_basename "$dest" "" "."
      destdir="$func_dirname_result"
      destname="$func_basename_result"

      # Not a directory, so check to see that there is only one file specified.
      set dummy $files; shift
      test "$#" -gt 1 && \
	func_fatal_help "\`$dest' is not a directory"
    fi
    case $destdir in
    [\\/]* | [A-Za-z]:[\\/]*) ;;
    *)
      for file in $files; do
	case $file in
	*.lo) ;;
	*)
	  func_fatal_help "\`$destdir' must be an absolute directory name"
	  ;;
	esac
      done
      ;;
    esac

    # This variable tells wrapper scripts just to set variables rather
    # than running their programs.
    libtool_install_magic="$magic"

    staticlibs=
    future_libdirs=
    current_libdirs=
    for file in $files; do

      # Do each installation.
      case $file in
      *.$libext)
	# Do the static libraries later.
	staticlibs="$staticlibs $file"
	;;

      *.la)
	# Check to see that this really is a libtool archive.
	func_lalib_unsafe_p "$file" \
	  || func_fatal_help "\`$file' is not a valid libtool archive"

	library_names=
	old_library=
	relink_command=
	func_source "$file"

	# Add the libdir to current_libdirs if it is the destination.
	if test "X$destdir" = "X$libdir"; then
	  case "$current_libdirs " in
	  *" $libdir "*) ;;
	  *) current_libdirs="$current_libdirs $libdir" ;;
	  esac
	else
	  # Note the libdir as a future libdir.
	  case "$future_libdirs " in
	  *" $libdir "*) ;;
	  *) future_libdirs="$future_libdirs $libdir" ;;
	  esac
	fi

	func_dirname "$file" "/" ""
	dir="$func_dirname_result"
	dir="$dir$objdir"

	if test -n "$relink_command"; then
	  # Determine the prefix the user has applied to our future dir.
	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`

	  # Don't allow the user to place us outside of our expected
	  # location b/c this prevents finding dependent libraries that
	  # are installed to the same prefix.
	  # At present, this check doesn't affect windows .dll's that
	  # are installed into $libdir/../bin (currently, that works fine)
	  # but it's something to keep an eye on.
	  test "$inst_prefix_dir" = "$destdir" && \
	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"

	  if test -n "$inst_prefix_dir"; then
	    # Stick the inst_prefix_dir data into the link command.
	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
	  else
	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
	  fi

	  func_warning "relinking \`$file'"
	  func_show_eval "$relink_command" \
	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
	fi

	# See the names of the shared library.
	set dummy $library_names; shift
	if test -n "$1"; then
	  realname="$1"
	  shift

	  srcname="$realname"
	  test -n "$relink_command" && srcname="$realname"T

	  # Install the shared library and build the symlinks.
	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
	      'exit $?'
	  tstripme="$stripme"
	  case $host_os in
	  cygwin* | mingw* | pw32* | cegcc*)
	    case $realname in
	    *.dll.a)
	      tstripme=""
	      ;;
	    esac
	    ;;
	  esac
	  if test -n "$tstripme" && test -n "$striplib"; then
	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
	  fi

	  if test "$#" -gt 0; then
	    # Delete the old symlinks, and create new ones.
	    # Try `ln -sf' first, because the `ln' binary might depend on
	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
	    # so we also need to try rm && ln -s.
	    for linkname
	    do
	      test "$linkname" != "$realname" \
		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
	    done
	  fi

	  # Do each command in the postinstall commands.
	  lib="$destdir/$realname"
	  func_execute_cmds "$postinstall_cmds" 'exit $?'
	fi

	# Install the pseudo-library for information purposes.
	func_basename "$file"
	name="$func_basename_result"
	instname="$dir/$name"i
	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'

	# Maybe install the static library, too.
	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
	;;

      *.lo)
	# Install (i.e. copy) a libtool object.

	# Figure out destination file name, if it wasn't already specified.
	if test -n "$destname"; then
	  destfile="$destdir/$destname"
	else
	  func_basename "$file"
	  destfile="$func_basename_result"
	  destfile="$destdir/$destfile"
	fi

	# Deduce the name of the destination old-style object file.
	case $destfile in
	*.lo)
	  func_lo2o "$destfile"
	  staticdest=$func_lo2o_result
	  ;;
	*.$objext)
	  staticdest="$destfile"
	  destfile=
	  ;;
	*)
	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
	  ;;
	esac

	# Install the libtool object if requested.
	test -n "$destfile" && \
	  func_show_eval "$install_prog $file $destfile" 'exit $?'

	# Install the old object if enabled.
	if test "$build_old_libs" = yes; then
	  # Deduce the name of the old-style object file.
	  func_lo2o "$file"
	  staticobj=$func_lo2o_result
	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
	fi
	exit $EXIT_SUCCESS
	;;

      *)
	# Figure out destination file name, if it wasn't already specified.
	if test -n "$destname"; then
	  destfile="$destdir/$destname"
	else
	  func_basename "$file"
	  destfile="$func_basename_result"
	  destfile="$destdir/$destfile"
	fi

	# If the file is missing, and there is a .exe on the end, strip it
	# because it is most likely a libtool script we actually want to
	# install
	stripped_ext=""
	case $file in
	  *.exe)
	    if test ! -f "$file"; then
	      func_stripname '' '.exe' "$file"
	      file=$func_stripname_result
	      stripped_ext=".exe"
	    fi
	    ;;
	esac

	# Do a test to see if this is really a libtool program.
	case $host in
	*cygwin* | *mingw*)
	    if func_ltwrapper_executable_p "$file"; then
	      func_ltwrapper_scriptname "$file"
	      wrapper=$func_ltwrapper_scriptname_result
	    else
	      func_stripname '' '.exe' "$file"
	      wrapper=$func_stripname_result
	    fi
	    ;;
	*)
	    wrapper=$file
	    ;;
	esac
	if func_ltwrapper_script_p "$wrapper"; then
	  notinst_deplibs=
	  relink_command=

	  func_source "$wrapper"

	  # Check the variables that should have been set.
	  test -z "$generated_by_libtool_version" && \
	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"

	  finalize=yes
	  for lib in $notinst_deplibs; do
	    # Check to see that each library is installed.
	    libdir=
	    if test -f "$lib"; then
	      func_source "$lib"
	    fi
	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
	    if test -n "$libdir" && test ! -f "$libfile"; then
	      func_warning "\`$lib' has not been installed in \`$libdir'"
	      finalize=no
	    fi
	  done

	  relink_command=
	  func_source "$wrapper"

	  outputname=
	  if test "$fast_install" = no && test -n "$relink_command"; then
	    $opt_dry_run || {
	      if test "$finalize" = yes; then
	        tmpdir=`func_mktempdir`
		func_basename "$file$stripped_ext"
		file="$func_basename_result"
	        outputname="$tmpdir/$file"
	        # Replace the output file specification.
	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`

	        $opt_silent || {
	          func_quote_for_expand "$relink_command"
		  eval "func_echo $func_quote_for_expand_result"
	        }
	        if eval "$relink_command"; then :
	          else
		  func_error "error: relink \`$file' with the above command before installing it"
		  $opt_dry_run || ${RM}r "$tmpdir"
		  continue
	        fi
	        file="$outputname"
	      else
	        func_warning "cannot relink \`$file'"
	      fi
	    }
	  else
	    # Install the binary that we compiled earlier.
	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
	  fi
	fi

	# remove .exe since cygwin /usr/bin/install will append another
	# one anyway
	case $install_prog,$host in
	*/usr/bin/install*,*cygwin*)
	  case $file:$destfile in
	  *.exe:*.exe)
	    # this is ok
	    ;;
	  *.exe:*)
	    destfile=$destfile.exe
	    ;;
	  *:*.exe)
	    func_stripname '' '.exe' "$destfile"
	    destfile=$func_stripname_result
	    ;;
	  esac
	  ;;
	esac
	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
	$opt_dry_run || if test -n "$outputname"; then
	  ${RM}r "$tmpdir"
	fi
	;;
      esac
    done

    for file in $staticlibs; do
      func_basename "$file"
      name="$func_basename_result"

      # Set up the ranlib parameters.
      oldlib="$destdir/$name"

      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'

      if test -n "$stripme" && test -n "$old_striplib"; then
	func_show_eval "$old_striplib $oldlib" 'exit $?'
      fi

      # Do each command in the postinstall commands.
      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
    done

    test -n "$future_libdirs" && \
      func_warning "remember to run \`$progname --finish$future_libdirs'"

    if test -n "$current_libdirs"; then
      # Maybe just do a dry run.
      $opt_dry_run && current_libdirs=" -n$current_libdirs"
      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
    else
      exit $EXIT_SUCCESS
    fi
}

test "$mode" = install && func_mode_install ${1+"$@"}


# func_generate_dlsyms outputname originator pic_p
# Extract symbols from dlprefiles and create ${outputname}S.o with
# a dlpreopen symbol table.
func_generate_dlsyms ()
{
    $opt_debug
    my_outputname="$1"
    my_originator="$2"
    my_pic_p="${3-no}"
    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
    my_dlsyms=

    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
      if test -n "$NM" && test -n "$global_symbol_pipe"; then
	my_dlsyms="${my_outputname}S.c"
      else
	func_error "not configured to extract global symbols from dlpreopened files"
      fi
    fi

    if test -n "$my_dlsyms"; then
      case $my_dlsyms in
      "") ;;
      *.c)
	# Discover the nlist of each of the dlfiles.
	nlist="$output_objdir/${my_outputname}.nm"

	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"

	# Parse the name list into a source file.
	func_verbose "creating $output_objdir/$my_dlsyms"

	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */

#ifdef __cplusplus
extern \"C\" {
#endif

/* External symbol declarations for the compiler. */\
"

	if test "$dlself" = yes; then
	  func_verbose "generating symbol list for \`$output'"

	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"

	  # Add our own program objects to the symbol list.
	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
	  for progfile in $progfiles; do
	    func_verbose "extracting global C symbols from \`$progfile'"
	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
	  done

	  if test -n "$exclude_expsyms"; then
	    $opt_dry_run || {
	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
	      eval '$MV "$nlist"T "$nlist"'
	    }
	  fi

	  if test -n "$export_symbols_regex"; then
	    $opt_dry_run || {
	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
	      eval '$MV "$nlist"T "$nlist"'
	    }
	  fi

	  # Prepare the list of exported symbols
	  if test -z "$export_symbols"; then
	    export_symbols="$output_objdir/$outputname.exp"
	    $opt_dry_run || {
	      $RM $export_symbols
	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
	      case $host in
	      *cygwin* | *mingw* | *cegcc* )
                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
	        ;;
	      esac
	    }
	  else
	    $opt_dry_run || {
	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
	      eval '$MV "$nlist"T "$nlist"'
	      case $host in
	        *cygwin | *mingw* | *cegcc* )
	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
	          ;;
	      esac
	    }
	  fi
	fi

	for dlprefile in $dlprefiles; do
	  func_verbose "extracting global C symbols from \`$dlprefile'"
	  func_basename "$dlprefile"
	  name="$func_basename_result"
	  $opt_dry_run || {
	    eval '$ECHO ": $name " >> "$nlist"'
	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
	  }
	done

	$opt_dry_run || {
	  # Make sure we have at least an empty file.
	  test -f "$nlist" || : > "$nlist"

	  if test -n "$exclude_expsyms"; then
	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
	    $MV "$nlist"T "$nlist"
	  fi

	  # Try sorting and uniquifying the output.
	  if $GREP -v "^: " < "$nlist" |
	      if sort -k 3 </dev/null >/dev/null 2>&1; then
		sort -k 3
	      else
		sort +2
	      fi |
	      uniq > "$nlist"S; then
	    :
	  else
	    $GREP -v "^: " < "$nlist" > "$nlist"S
	  fi

	  if test -f "$nlist"S; then
	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
	  else
	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
	  fi

	  $ECHO >> "$output_objdir/$my_dlsyms" "\

/* The mapping between symbol names and symbols.  */
typedef struct {
  const char *name;
  void *address;
} lt_dlsymlist;
"
	  case $host in
	  *cygwin* | *mingw* | *cegcc* )
	    $ECHO >> "$output_objdir/$my_dlsyms" "\
/* DATA imports from DLLs on WIN32 con't be const, because
   runtime relocations are performed -- see ld's documentation
   on pseudo-relocs.  */"
	    lt_dlsym_const= ;;
	  *osf5*)
	    echo >> "$output_objdir/$my_dlsyms" "\
/* This system does not cope well with relocations in const data */"
	    lt_dlsym_const= ;;
	  *)
	    lt_dlsym_const=const ;;
	  esac

	  $ECHO >> "$output_objdir/$my_dlsyms" "\
extern $lt_dlsym_const lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[];
$lt_dlsym_const lt_dlsymlist
lt_${my_prefix}_LTX_preloaded_symbols[] =
{\
  { \"$my_originator\", (void *) 0 },"

	  case $need_lib_prefix in
	  no)
	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
	    ;;
	  *)
	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
	    ;;
	  esac
	  $ECHO >> "$output_objdir/$my_dlsyms" "\
  {0, (void *) 0}
};

/* This works around a problem in FreeBSD linker */
#ifdef FREEBSD_WORKAROUND
static const void *lt_preloaded_setup() {
  return lt_${my_prefix}_LTX_preloaded_symbols;
}
#endif

#ifdef __cplusplus
}
#endif\
"
	} # !$opt_dry_run

	pic_flag_for_symtable=
	case "$compile_command " in
	*" -static "*) ;;
	*)
	  case $host in
	  # compiling the symbol table file with pic_flag works around
	  # a FreeBSD bug that causes programs to crash when -lm is
	  # linked before any other PIC object.  But we must not use
	  # pic_flag when linking with -static.  The problem exists in
	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
	  *-*-hpux*)
	    pic_flag_for_symtable=" $pic_flag"  ;;
	  *)
	    if test "X$my_pic_p" != Xno; then
	      pic_flag_for_symtable=" $pic_flag"
	    fi
	    ;;
	  esac
	  ;;
	esac
	symtab_cflags=
	for arg in $LTCFLAGS; do
	  case $arg in
	  -pie | -fpie | -fPIE) ;;
	  *) symtab_cflags="$symtab_cflags $arg" ;;
	  esac
	done

	# Now compile the dynamic symbol file.
	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'

	# Clean up the generated files.
	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'

	# Transform the symbol file into the correct name.
	symfileobj="$output_objdir/${my_outputname}S.$objext"
	case $host in
	*cygwin* | *mingw* | *cegcc* )
	  if test -f "$output_objdir/$my_outputname.def"; then
	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
	  else
	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	  fi
	  ;;
	*)
	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
	  ;;
	esac
	;;
      *)
	func_fatal_error "unknown suffix for \`$my_dlsyms'"
	;;
      esac
    else
      # We keep going just in case the user didn't refer to
      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
      # really was required.

      # Nullify the symbol file.
      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
    fi
}

# func_win32_libid arg
# return the library type of file 'arg'
#
# Need a lot of goo to handle *both* DLLs and import libs
# Has to be a shell function in order to 'eat' the argument
# that is supplied when $file_magic_command is called.
func_win32_libid ()
{
  $opt_debug
  win32_libid_type="unknown"
  win32_fileres=`file -L $1 2>/dev/null`
  case $win32_fileres in
  *ar\ archive\ import\ library*) # definitely import
    win32_libid_type="x86 archive import"
    ;;
  *ar\ archive*) # could be an import, or static
    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
      win32_nmres=`eval $NM -f posix -A $1 |
	$SED -n -e '
	    1,100{
		/ I /{
		    s,.*,import,
		    p
		    q
		}
	    }'`
      case $win32_nmres in
      import*)  win32_libid_type="x86 archive import";;
      *)        win32_libid_type="x86 archive static";;
      esac
    fi
    ;;
  *DLL*)
    win32_libid_type="x86 DLL"
    ;;
  *executable*) # but shell scripts are "executable" too...
    case $win32_fileres in
    *MS\ Windows\ PE\ Intel*)
      win32_libid_type="x86 DLL"
      ;;
    esac
    ;;
  esac
  $ECHO "$win32_libid_type"
}



# func_extract_an_archive dir oldlib
func_extract_an_archive ()
{
    $opt_debug
    f_ex_an_ar_dir="$1"; shift
    f_ex_an_ar_oldlib="$1"
    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
     :
    else
      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
    fi
}


# func_extract_archives gentop oldlib ...
func_extract_archives ()
{
    $opt_debug
    my_gentop="$1"; shift
    my_oldlibs=${1+"$@"}
    my_oldobjs=""
    my_xlib=""
    my_xabs=""
    my_xdir=""

    for my_xlib in $my_oldlibs; do
      # Extract the objects.
      case $my_xlib in
	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
	*) my_xabs=`pwd`"/$my_xlib" ;;
      esac
      func_basename "$my_xlib"
      my_xlib="$func_basename_result"
      my_xlib_u=$my_xlib
      while :; do
        case " $extracted_archives " in
	*" $my_xlib_u "*)
	  func_arith $extracted_serial + 1
	  extracted_serial=$func_arith_result
	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
	*) break ;;
	esac
      done
      extracted_archives="$extracted_archives $my_xlib_u"
      my_xdir="$my_gentop/$my_xlib_u"

      func_mkdir_p "$my_xdir"

      case $host in
      *-darwin*)
	func_verbose "Extracting $my_xabs"
	# Do not bother doing anything if just a dry run
	$opt_dry_run || {
	  darwin_orig_dir=`pwd`
	  cd $my_xdir || exit $?
	  darwin_archive=$my_xabs
	  darwin_curdir=`pwd`
	  darwin_base_archive=`basename "$darwin_archive"`
	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
	  if test -n "$darwin_arches"; then
	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
	    darwin_arch=
	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
	    for darwin_arch in  $darwin_arches ; do
	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
	      cd "$darwin_curdir"
	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
	    done # $darwin_arches
            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
	    darwin_file=
	    darwin_files=
	    for darwin_file in $darwin_filelist; do
	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
	      $LIPO -create -output "$darwin_file" $darwin_files
	    done # $darwin_filelist
	    $RM -rf unfat-$$
	    cd "$darwin_orig_dir"
	  else
	    cd $darwin_orig_dir
	    func_extract_an_archive "$my_xdir" "$my_xabs"
	  fi # $darwin_arches
	} # !$opt_dry_run
	;;
      *)
        func_extract_an_archive "$my_xdir" "$my_xabs"
	;;
      esac
      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
    done

    func_extract_archives_result="$my_oldobjs"
}



# func_emit_wrapper_part1 [arg=no]
#
# Emit the first part of a libtool wrapper script on stdout.
# For more information, see the description associated with
# func_emit_wrapper(), below.
func_emit_wrapper_part1 ()
{
	func_emit_wrapper_part1_arg1=no
	if test -n "$1" ; then
	  func_emit_wrapper_part1_arg1=$1
	fi

	$ECHO "\
#! $SHELL

# $output - temporary wrapper script for $objdir/$outputname
# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# The $output program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
#
# This wrapper script should never be moved out of the build directory.
# If it is, it will not operate correctly.

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
Xsed='${SED} -e 1s/^X//'
sed_quote_subst='$sed_quote_subst'

# Be Bourne compatible
if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
  emulate sh
  NULLCMD=:
  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '\${1+\"\$@\"}'='\"\$@\"'
  setopt NO_GLOB_SUBST
else
  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh

# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

relink_command=\"$relink_command\"

# This environment variable determines our operation mode.
if test \"\$libtool_install_magic\" = \"$magic\"; then
  # install mode needs the following variables:
  generated_by_libtool_version='$macro_version'
  notinst_deplibs='$notinst_deplibs'
else
  # When we are sourced in execute mode, \$file and \$ECHO are already set.
  if test \"\$libtool_execute_magic\" != \"$magic\"; then
    ECHO=\"$qecho\"
    file=\"\$0\"
    # Make sure echo works.
    if test \"X\$1\" = X--no-reexec; then
      # Discard the --no-reexec flag, and continue.
      shift
    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
      # Yippee, \$ECHO works!
      :
    else
      # Restart under the correct shell, and then maybe \$ECHO will work.
      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
    fi
  fi\
"
	$ECHO "\

  # Find the directory that this script lives in.
  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
  test \"x\$thisdir\" = \"x\$file\" && thisdir=.

  # Follow symbolic links until we get to the real thisdir.
  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
  while test -n \"\$file\"; do
    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`

    # If there was a directory component, then change thisdir.
    if test \"x\$destdir\" != \"x\$file\"; then
      case \"\$destdir\" in
      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
      *) thisdir=\"\$thisdir/\$destdir\" ;;
      esac
    fi

    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
  done
"
}
# end: func_emit_wrapper_part1

# func_emit_wrapper_part2 [arg=no]
#
# Emit the second part of a libtool wrapper script on stdout.
# For more information, see the description associated with
# func_emit_wrapper(), below.
func_emit_wrapper_part2 ()
{
	func_emit_wrapper_part2_arg1=no
	if test -n "$1" ; then
	  func_emit_wrapper_part2_arg1=$1
	fi

	$ECHO "\

  # Usually 'no', except on cygwin/mingw when embedded into
  # the cwrapper.
  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
    # special case for '.'
    if test \"\$thisdir\" = \".\"; then
      thisdir=\`pwd\`
    fi
    # remove .libs from thisdir
    case \"\$thisdir\" in
    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
    $objdir )   thisdir=. ;;
    esac
  fi

  # Try to get the absolute directory name.
  absdir=\`cd \"\$thisdir\" && pwd\`
  test -n \"\$absdir\" && thisdir=\"\$absdir\"
"

	if test "$fast_install" = yes; then
	  $ECHO "\
  program=lt-'$outputname'$exeext
  progdir=\"\$thisdir/$objdir\"

  if test ! -f \"\$progdir/\$program\" ||
     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
       test \"X\$file\" != \"X\$progdir/\$program\"; }; then

    file=\"\$\$-\$program\"

    if test ! -d \"\$progdir\"; then
      $MKDIR \"\$progdir\"
    else
      $RM \"\$progdir/\$file\"
    fi"

	  $ECHO "\

    # relink executable if necessary
    if test -n \"\$relink_command\"; then
      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
      else
	$ECHO \"\$relink_command_output\" >&2
	$RM \"\$progdir/\$file\"
	exit 1
      fi
    fi

    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
    { $RM \"\$progdir/\$program\";
      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
    $RM \"\$progdir/\$file\"
  fi"
	else
	  $ECHO "\
  program='$outputname'
  progdir=\"\$thisdir/$objdir\"
"
	fi

	$ECHO "\

  if test -f \"\$progdir/\$program\"; then"

	# Export our shlibpath_var if we have one.
	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
	  $ECHO "\
    # Add our own library path to $shlibpath_var
    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"

    # Some systems cannot cope with colon-terminated $shlibpath_var
    # The second colon is a workaround for a bug in BeOS R4 sed
    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`

    export $shlibpath_var
"
	fi

	# fixup the dll searchpath if we need to.
	if test -n "$dllsearchpath"; then
	  $ECHO "\
    # Add the dll search path components to the executable PATH
    PATH=$dllsearchpath:\$PATH
"
	fi

	$ECHO "\
    if test \"\$libtool_execute_magic\" != \"$magic\"; then
      # Run the actual program with our arguments.
"
	case $host in
	# Backslashes separate directories on plain windows
	*-*-mingw | *-*-os2* | *-cegcc*)
	  $ECHO "\
      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
"
	  ;;

	*)
	  $ECHO "\
      exec \"\$progdir/\$program\" \${1+\"\$@\"}
"
	  ;;
	esac
	$ECHO "\
      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
      exit 1
    fi
  else
    # The program doesn't exist.
    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
    exit 1
  fi
fi\
"
}
# end: func_emit_wrapper_part2


# func_emit_wrapper [arg=no]
#
# Emit a libtool wrapper script on stdout.
# Don't directly open a file because we may want to
# incorporate the script contents within a cygwin/mingw
# wrapper executable.  Must ONLY be called from within
# func_mode_link because it depends on a number of variables
# set therein.
#
# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
# variable will take.  If 'yes', then the emitted script
# will assume that the directory in which it is stored is
# the $objdir directory.  This is a cygwin/mingw-specific
# behavior.
func_emit_wrapper ()
{
	func_emit_wrapper_arg1=no
	if test -n "$1" ; then
	  func_emit_wrapper_arg1=$1
	fi

	# split this up so that func_emit_cwrapperexe_src
	# can call each part independently.
	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
}


# func_to_host_path arg
#
# Convert paths to host format when used with build tools.
# Intended for use with "native" mingw (where libtool itself
# is running under the msys shell), or in the following cross-
# build environments:
#    $build          $host
#    mingw (msys)    mingw  [e.g. native]
#    cygwin          mingw
#    *nix + wine     mingw
# where wine is equipped with the `winepath' executable.
# In the native mingw case, the (msys) shell automatically
# converts paths for any non-msys applications it launches,
# but that facility isn't available from inside the cwrapper.
# Similar accommodations are necessary for $host mingw and
# $build cygwin.  Calling this function does no harm for other
# $host/$build combinations not listed above.
#
# ARG is the path (on $build) that should be converted to
# the proper representation for $host. The result is stored
# in $func_to_host_path_result.
func_to_host_path ()
{
  func_to_host_path_result="$1"
  if test -n "$1" ; then
    case $host in
      *mingw* )
        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
        case $build in
          *mingw* ) # actually, msys
            # awkward: cmd appends spaces to result
            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          *cygwin* )
            func_to_host_path_tmp1=`cygpath -w "$1"`
            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          * )
            # Unfortunately, winepath does not exit with a non-zero
            # error code, so we are forced to check the contents of
            # stdout. On the other hand, if the command is not
            # found, the shell will set an exit code of 127 and print
            # *an error message* to stdout. So we must check for both
            # error code of zero AND non-empty stdout, which explains
            # the odd construction:
            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
                $SED -e "$lt_sed_naive_backslashify"`
            else
              # Allow warning below.
              func_to_host_path_result=""
            fi
            ;;
        esac
        if test -z "$func_to_host_path_result" ; then
          func_error "Could not determine host path corresponding to"
          func_error "  '$1'"
          func_error "Continuing, but uninstalled executables may not work."
          # Fallback:
          func_to_host_path_result="$1"
        fi
        ;;
    esac
  fi
}
# end: func_to_host_path

# func_to_host_pathlist arg
#
# Convert pathlists to host format when used with build tools.
# See func_to_host_path(), above. This function supports the
# following $build/$host combinations (but does no harm for
# combinations not listed here):
#    $build          $host
#    mingw (msys)    mingw  [e.g. native]
#    cygwin          mingw
#    *nix + wine     mingw
#
# Path separators are also converted from $build format to
# $host format. If ARG begins or ends with a path separator
# character, it is preserved (but converted to $host format)
# on output.
#
# ARG is a pathlist (on $build) that should be converted to
# the proper representation on $host. The result is stored
# in $func_to_host_pathlist_result.
func_to_host_pathlist ()
{
  func_to_host_pathlist_result="$1"
  if test -n "$1" ; then
    case $host in
      *mingw* )
        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
        # Remove leading and trailing path separator characters from
        # ARG. msys behavior is inconsistent here, cygpath turns them
        # into '.;' and ';.', and winepath ignores them completely.
        func_to_host_pathlist_tmp2="$1"
        # Once set for this call, this variable should not be
        # reassigned. It is used in tha fallback case.
        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
          $SED -e 's|^:*||' -e 's|:*$||'`
        case $build in
          *mingw* ) # Actually, msys.
            # Awkward: cmd appends spaces to result.
            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          *cygwin* )
            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
              $SED -e "$lt_sed_naive_backslashify"`
            ;;
          * )
            # unfortunately, winepath doesn't convert pathlists
            func_to_host_pathlist_result=""
            func_to_host_pathlist_oldIFS=$IFS
            IFS=:
            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
              IFS=$func_to_host_pathlist_oldIFS
              if test -n "$func_to_host_pathlist_f" ; then
                func_to_host_path "$func_to_host_pathlist_f"
                if test -n "$func_to_host_path_result" ; then
                  if test -z "$func_to_host_pathlist_result" ; then
                    func_to_host_pathlist_result="$func_to_host_path_result"
                  else
                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
                  fi
                fi
              fi
              IFS=:
            done
            IFS=$func_to_host_pathlist_oldIFS
            ;;
        esac
        if test -z "$func_to_host_pathlist_result" ; then
          func_error "Could not determine the host path(s) corresponding to"
          func_error "  '$1'"
          func_error "Continuing, but uninstalled executables may not work."
          # Fallback. This may break if $1 contains DOS-style drive
          # specifications. The fix is not to complicate the expression
          # below, but for the user to provide a working wine installation
          # with winepath so that path translation in the cross-to-mingw
          # case works properly.
          lt_replace_pathsep_nix_to_dos="s|:|;|g"
          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
            $SED -e "$lt_replace_pathsep_nix_to_dos"`
        fi
        # Now, add the leading and trailing path separators back
        case "$1" in
          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
            ;;
        esac
        case "$1" in
          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
            ;;
        esac
        ;;
    esac
  fi
}
# end: func_to_host_pathlist

# func_emit_cwrapperexe_src
# emit the source code for a wrapper executable on stdout
# Must ONLY be called from within func_mode_link because
# it depends on a number of variable set therein.
func_emit_cwrapperexe_src ()
{
	cat <<EOF

/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION

   The $output program cannot be directly executed until all the libtool
   libraries that it depends on are installed.

   This wrapper executable should never be moved out of the build directory.
   If it is, it will not operate correctly.

   Currently, it simply execs the wrapper *script* "$SHELL $output",
   but could eventually absorb all of the scripts functionality and
   exec $objdir/$outputname directly.
*/
EOF
	    cat <<"EOF"
#include <stdio.h>
#include <stdlib.h>
#ifdef _MSC_VER
# include <direct.h>
# include <process.h>
# include <io.h>
# define setmode _setmode
#else
# include <unistd.h>
# include <stdint.h>
# ifdef __CYGWIN__
#  include <io.h>
#  define HAVE_SETENV
#  ifdef __STRICT_ANSI__
char *realpath (const char *, char *);
int putenv (char *);
int setenv (const char *, const char *, int);
#  endif
# endif
#endif
#include <malloc.h>
#include <stdarg.h>
#include <assert.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>

#if defined(PATH_MAX)
# define LT_PATHMAX PATH_MAX
#elif defined(MAXPATHLEN)
# define LT_PATHMAX MAXPATHLEN
#else
# define LT_PATHMAX 1024
#endif

#ifndef S_IXOTH
# define S_IXOTH 0
#endif
#ifndef S_IXGRP
# define S_IXGRP 0
#endif

#ifdef _MSC_VER
# define S_IXUSR _S_IEXEC
# define stat _stat
# ifndef _INTPTR_T_DEFINED
#  define intptr_t int
# endif
#endif

#ifndef DIR_SEPARATOR
# define DIR_SEPARATOR '/'
# define PATH_SEPARATOR ':'
#endif

#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
  defined (__OS2__)
# define HAVE_DOS_BASED_FILE_SYSTEM
# define FOPEN_WB "wb"
# ifndef DIR_SEPARATOR_2
#  define DIR_SEPARATOR_2 '\\'
# endif
# ifndef PATH_SEPARATOR_2
#  define PATH_SEPARATOR_2 ';'
# endif
#endif

#ifndef DIR_SEPARATOR_2
# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
#else /* DIR_SEPARATOR_2 */
# define IS_DIR_SEPARATOR(ch) \
	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
#endif /* DIR_SEPARATOR_2 */

#ifndef PATH_SEPARATOR_2
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
#else /* PATH_SEPARATOR_2 */
# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
#endif /* PATH_SEPARATOR_2 */

#ifdef __CYGWIN__
# define FOPEN_WB "wb"
#endif

#ifndef FOPEN_WB
# define FOPEN_WB "w"
#endif
#ifndef _O_BINARY
# define _O_BINARY 0
#endif

#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
#define XFREE(stale) do { \
  if (stale) { free ((void *) stale); stale = 0; } \
} while (0)

#undef LTWRAPPER_DEBUGPRINTF
#if defined DEBUGWRAPPER
# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
static void
ltwrapper_debugprintf (const char *fmt, ...)
{
    va_list args;
    va_start (args, fmt);
    (void) vfprintf (stderr, fmt, args);
    va_end (args);
}
#else
# define LTWRAPPER_DEBUGPRINTF(args)
#endif

const char *program_name = NULL;

void *xmalloc (size_t num);
char *xstrdup (const char *string);
const char *base_name (const char *name);
char *find_executable (const char *wrapper);
char *chase_symlinks (const char *pathspec);
int make_executable (const char *path);
int check_executable (const char *path);
char *strendzap (char *str, const char *pat);
void lt_fatal (const char *message, ...);
void lt_setenv (const char *name, const char *value);
char *lt_extend_str (const char *orig_value, const char *add, int to_end);
void lt_opt_process_env_set (const char *arg);
void lt_opt_process_env_prepend (const char *arg);
void lt_opt_process_env_append (const char *arg);
int lt_split_name_value (const char *arg, char** name, char** value);
void lt_update_exe_path (const char *name, const char *value);
void lt_update_lib_path (const char *name, const char *value);

static const char *script_text_part1 =
EOF

	    func_emit_wrapper_part1 yes |
	        $SED -e 's/\([\\"]\)/\\\1/g' \
	             -e 's/^/  "/' -e 's/$/\\n"/'
	    echo ";"
	    cat <<EOF

static const char *script_text_part2 =
EOF
	    func_emit_wrapper_part2 yes |
	        $SED -e 's/\([\\"]\)/\\\1/g' \
	             -e 's/^/  "/' -e 's/$/\\n"/'
	    echo ";"

	    cat <<EOF
const char * MAGIC_EXE = "$magic_exe";
const char * LIB_PATH_VARNAME = "$shlibpath_var";
EOF

	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
              func_to_host_pathlist "$temp_rpath"
	      cat <<EOF
const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
EOF
	    else
	      cat <<"EOF"
const char * LIB_PATH_VALUE   = "";
EOF
	    fi

	    if test -n "$dllsearchpath"; then
              func_to_host_pathlist "$dllsearchpath:"
	      cat <<EOF
const char * EXE_PATH_VARNAME = "PATH";
const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
EOF
	    else
	      cat <<"EOF"
const char * EXE_PATH_VARNAME = "";
const char * EXE_PATH_VALUE   = "";
EOF
	    fi

	    if test "$fast_install" = yes; then
	      cat <<EOF
const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
EOF
	    else
	      cat <<EOF
const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
EOF
	    fi


	    cat <<"EOF"

#define LTWRAPPER_OPTION_PREFIX         "--lt-"
#define LTWRAPPER_OPTION_PREFIX_LENGTH  5

static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;

static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";

static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
  /* argument is putenv-style "foo=bar", value of foo is set to bar */

static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */

static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */

int
main (int argc, char *argv[])
{
  char **newargz;
  int  newargc;
  char *tmp_pathspec;
  char *actual_cwrapper_path;
  char *actual_cwrapper_name;
  char *target_name;
  char *lt_argv_zero;
  intptr_t rval = 127;

  int i;

  program_name = (char *) xstrdup (base_name (argv[0]));
  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));

  /* very simple arg parsing; don't want to rely on getopt */
  for (i = 1; i < argc; i++)
    {
      if (strcmp (argv[i], dumpscript_opt) == 0)
	{
EOF
	    case "$host" in
	      *mingw* | *cygwin* )
		# make stdout use "unix" line endings
		echo "          setmode(1,_O_BINARY);"
		;;
	      esac

	    cat <<"EOF"
	  printf ("%s", script_text_part1);
	  printf ("%s", script_text_part2);
	  return 0;
	}
    }

  newargz = XMALLOC (char *, argc + 1);
  tmp_pathspec = find_executable (argv[0]);
  if (tmp_pathspec == NULL)
    lt_fatal ("Couldn't find %s", argv[0]);
  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
			  tmp_pathspec));

  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
			  actual_cwrapper_path));
  XFREE (tmp_pathspec);

  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
  strendzap (actual_cwrapper_path, actual_cwrapper_name);

  /* wrapper name transforms */
  strendzap (actual_cwrapper_name, ".exe");
  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
  XFREE (actual_cwrapper_name);
  actual_cwrapper_name = tmp_pathspec;
  tmp_pathspec = 0;

  /* target_name transforms -- use actual target program name; might have lt- prefix */
  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
  strendzap (target_name, ".exe");
  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
  XFREE (target_name);
  target_name = tmp_pathspec;
  tmp_pathspec = 0;

  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
			  target_name));
EOF

	    cat <<EOF
  newargz[0] =
    XMALLOC (char, (strlen (actual_cwrapper_path) +
		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
  strcpy (newargz[0], actual_cwrapper_path);
  strcat (newargz[0], "$objdir");
  strcat (newargz[0], "/");
EOF

	    cat <<"EOF"
  /* stop here, and copy so we don't have to do this twice */
  tmp_pathspec = xstrdup (newargz[0]);

  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
  strcat (newargz[0], actual_cwrapper_name);

  /* DO want the lt- prefix here if it exists, so use target_name */
  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
  XFREE (tmp_pathspec);
  tmp_pathspec = NULL;
EOF

	    case $host_os in
	      mingw*)
	    cat <<"EOF"
  {
    char* p;
    while ((p = strchr (newargz[0], '\\')) != NULL)
      {
	*p = '/';
      }
    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
      {
	*p = '/';
      }
  }
EOF
	    ;;
	    esac

	    cat <<"EOF"
  XFREE (target_name);
  XFREE (actual_cwrapper_path);
  XFREE (actual_cwrapper_name);

  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);

  newargc=0;
  for (i = 1; i < argc; i++)
    {
      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
        {
          if (argv[i][env_set_opt_len] == '=')
            {
              const char *p = argv[i] + env_set_opt_len + 1;
              lt_opt_process_env_set (p);
            }
          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
            {
              lt_opt_process_env_set (argv[++i]); /* don't copy */
            }
          else
            lt_fatal ("%s missing required argument", env_set_opt);
          continue;
        }
      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
        {
          if (argv[i][env_prepend_opt_len] == '=')
            {
              const char *p = argv[i] + env_prepend_opt_len + 1;
              lt_opt_process_env_prepend (p);
            }
          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
            {
              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
            }
          else
            lt_fatal ("%s missing required argument", env_prepend_opt);
          continue;
        }
      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
        {
          if (argv[i][env_append_opt_len] == '=')
            {
              const char *p = argv[i] + env_append_opt_len + 1;
              lt_opt_process_env_append (p);
            }
          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
            {
              lt_opt_process_env_append (argv[++i]); /* don't copy */
            }
          else
            lt_fatal ("%s missing required argument", env_append_opt);
          continue;
        }
      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
        {
          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
             namespace, but it is not one of the ones we know about and
             have already dealt with, above (inluding dump-script), then
             report an error. Otherwise, targets might begin to believe
             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
             namespace. The first time any user complains about this, we'll
             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
             or a configure.ac-settable value.
           */
          lt_fatal ("Unrecognized option in %s namespace: '%s'",
                    ltwrapper_option_prefix, argv[i]);
        }
      /* otherwise ... */
      newargz[++newargc] = xstrdup (argv[i]);
    }
  newargz[++newargc] = NULL;

  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
  for (i = 0; i < newargc; i++)
    {
      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
    }

EOF

	    case $host_os in
	      mingw*)
		cat <<"EOF"
  /* execv doesn't actually work on mingw as expected on unix */
  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
  if (rval == -1)
    {
      /* failed to start process */
      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
      return 127;
    }
  return rval;
EOF
		;;
	      *)
		cat <<"EOF"
  execv (lt_argv_zero, newargz);
  return rval; /* =127, but avoids unused variable warning */
EOF
		;;
	    esac

	    cat <<"EOF"
}

void *
xmalloc (size_t num)
{
  void *p = (void *) malloc (num);
  if (!p)
    lt_fatal ("Memory exhausted");

  return p;
}

char *
xstrdup (const char *string)
{
  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
			  string) : NULL;
}

const char *
base_name (const char *name)
{
  const char *base;

#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
  /* Skip over the disk name in MSDOS pathnames. */
  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
    name += 2;
#endif

  for (base = name; *name; name++)
    if (IS_DIR_SEPARATOR (*name))
      base = name + 1;
  return base;
}

int
check_executable (const char *path)
{
  struct stat st;

  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
			  path ? (*path ? path : "EMPTY!") : "NULL!"));
  if ((!path) || (!*path))
    return 0;

  if ((stat (path, &st) >= 0)
      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
    return 1;
  else
    return 0;
}

int
make_executable (const char *path)
{
  int rval = 0;
  struct stat st;

  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
			  path ? (*path ? path : "EMPTY!") : "NULL!"));
  if ((!path) || (!*path))
    return 0;

  if (stat (path, &st) >= 0)
    {
      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
    }
  return rval;
}

/* Searches for the full path of the wrapper.  Returns
   newly allocated full path name if found, NULL otherwise
   Does not chase symlinks, even on platforms that support them.
*/
char *
find_executable (const char *wrapper)
{
  int has_slash = 0;
  const char *p;
  const char *p_next;
  /* static buffer for getcwd */
  char tmp[LT_PATHMAX + 1];
  int tmp_len;
  char *concat_name;

  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));

  if ((wrapper == NULL) || (*wrapper == '\0'))
    return NULL;

  /* Absolute path? */
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
    {
      concat_name = xstrdup (wrapper);
      if (check_executable (concat_name))
	return concat_name;
      XFREE (concat_name);
    }
  else
    {
#endif
      if (IS_DIR_SEPARATOR (wrapper[0]))
	{
	  concat_name = xstrdup (wrapper);
	  if (check_executable (concat_name))
	    return concat_name;
	  XFREE (concat_name);
	}
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
    }
#endif

  for (p = wrapper; *p; p++)
    if (*p == '/')
      {
	has_slash = 1;
	break;
      }
  if (!has_slash)
    {
      /* no slashes; search PATH */
      const char *path = getenv ("PATH");
      if (path != NULL)
	{
	  for (p = path; *p; p = p_next)
	    {
	      const char *q;
	      size_t p_len;
	      for (q = p; *q; q++)
		if (IS_PATH_SEPARATOR (*q))
		  break;
	      p_len = q - p;
	      p_next = (*q == '\0' ? q : q + 1);
	      if (p_len == 0)
		{
		  /* empty path: current directory */
		  if (getcwd (tmp, LT_PATHMAX) == NULL)
		    lt_fatal ("getcwd failed");
		  tmp_len = strlen (tmp);
		  concat_name =
		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
		  memcpy (concat_name, tmp, tmp_len);
		  concat_name[tmp_len] = '/';
		  strcpy (concat_name + tmp_len + 1, wrapper);
		}
	      else
		{
		  concat_name =
		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
		  memcpy (concat_name, p, p_len);
		  concat_name[p_len] = '/';
		  strcpy (concat_name + p_len + 1, wrapper);
		}
	      if (check_executable (concat_name))
		return concat_name;
	      XFREE (concat_name);
	    }
	}
      /* not found in PATH; assume curdir */
    }
  /* Relative path | not found in path: prepend cwd */
  if (getcwd (tmp, LT_PATHMAX) == NULL)
    lt_fatal ("getcwd failed");
  tmp_len = strlen (tmp);
  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
  memcpy (concat_name, tmp, tmp_len);
  concat_name[tmp_len] = '/';
  strcpy (concat_name + tmp_len + 1, wrapper);

  if (check_executable (concat_name))
    return concat_name;
  XFREE (concat_name);
  return NULL;
}

char *
chase_symlinks (const char *pathspec)
{
#ifndef S_ISLNK
  return xstrdup (pathspec);
#else
  char buf[LT_PATHMAX];
  struct stat s;
  char *tmp_pathspec = xstrdup (pathspec);
  char *p;
  int has_symlinks = 0;
  while (strlen (tmp_pathspec) && !has_symlinks)
    {
      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
			      tmp_pathspec));
      if (lstat (tmp_pathspec, &s) == 0)
	{
	  if (S_ISLNK (s.st_mode) != 0)
	    {
	      has_symlinks = 1;
	      break;
	    }

	  /* search backwards for last DIR_SEPARATOR */
	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
	    p--;
	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
	    {
	      /* no more DIR_SEPARATORS left */
	      break;
	    }
	  *p = '\0';
	}
      else
	{
	  char *errstr = strerror (errno);
	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
	}
    }
  XFREE (tmp_pathspec);

  if (!has_symlinks)
    {
      return xstrdup (pathspec);
    }

  tmp_pathspec = realpath (pathspec, buf);
  if (tmp_pathspec == 0)
    {
      lt_fatal ("Could not follow symlinks for %s", pathspec);
    }
  return xstrdup (tmp_pathspec);
#endif
}

char *
strendzap (char *str, const char *pat)
{
  size_t len, patlen;

  assert (str != NULL);
  assert (pat != NULL);

  len = strlen (str);
  patlen = strlen (pat);

  if (patlen <= len)
    {
      str += len - patlen;
      if (strcmp (str, pat) == 0)
	*str = '\0';
    }
  return str;
}

static void
lt_error_core (int exit_status, const char *mode,
	       const char *message, va_list ap)
{
  fprintf (stderr, "%s: %s: ", program_name, mode);
  vfprintf (stderr, message, ap);
  fprintf (stderr, ".\n");

  if (exit_status >= 0)
    exit (exit_status);
}

void
lt_fatal (const char *message, ...)
{
  va_list ap;
  va_start (ap, message);
  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
  va_end (ap);
}

void
lt_setenv (const char *name, const char *value)
{
  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
                          (name ? name : "<NULL>"),
                          (value ? value : "<NULL>")));
  {
#ifdef HAVE_SETENV
    /* always make a copy, for consistency with !HAVE_SETENV */
    char *str = xstrdup (value);
    setenv (name, str, 1);
#else
    int len = strlen (name) + 1 + strlen (value) + 1;
    char *str = XMALLOC (char, len);
    sprintf (str, "%s=%s", name, value);
    if (putenv (str) != EXIT_SUCCESS)
      {
        XFREE (str);
      }
#endif
  }
}

char *
lt_extend_str (const char *orig_value, const char *add, int to_end)
{
  char *new_value;
  if (orig_value && *orig_value)
    {
      int orig_value_len = strlen (orig_value);
      int add_len = strlen (add);
      new_value = XMALLOC (char, add_len + orig_value_len + 1);
      if (to_end)
        {
          strcpy (new_value, orig_value);
          strcpy (new_value + orig_value_len, add);
        }
      else
        {
          strcpy (new_value, add);
          strcpy (new_value + add_len, orig_value);
        }
    }
  else
    {
      new_value = xstrdup (add);
    }
  return new_value;
}

int
lt_split_name_value (const char *arg, char** name, char** value)
{
  const char *p;
  int len;
  if (!arg || !*arg)
    return 1;

  p = strchr (arg, (int)'=');

  if (!p)
    return 1;

  *value = xstrdup (++p);

  len = strlen (arg) - strlen (*value);
  *name = XMALLOC (char, len);
  strncpy (*name, arg, len-1);
  (*name)[len - 1] = '\0';

  return 0;
}

void
lt_opt_process_env_set (const char *arg)
{
  char *name = NULL;
  char *value = NULL;

  if (lt_split_name_value (arg, &name, &value) != 0)
    {
      XFREE (name);
      XFREE (value);
      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
    }

  lt_setenv (name, value);
  XFREE (name);
  XFREE (value);
}

void
lt_opt_process_env_prepend (const char *arg)
{
  char *name = NULL;
  char *value = NULL;
  char *new_value = NULL;

  if (lt_split_name_value (arg, &name, &value) != 0)
    {
      XFREE (name);
      XFREE (value);
      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
    }

  new_value = lt_extend_str (getenv (name), value, 0);
  lt_setenv (name, new_value);
  XFREE (new_value);
  XFREE (name);
  XFREE (value);
}

void
lt_opt_process_env_append (const char *arg)
{
  char *name = NULL;
  char *value = NULL;
  char *new_value = NULL;

  if (lt_split_name_value (arg, &name, &value) != 0)
    {
      XFREE (name);
      XFREE (value);
      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
    }

  new_value = lt_extend_str (getenv (name), value, 1);
  lt_setenv (name, new_value);
  XFREE (new_value);
  XFREE (name);
  XFREE (value);
}

void
lt_update_exe_path (const char *name, const char *value)
{
  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
                          (name ? name : "<NULL>"),
                          (value ? value : "<NULL>")));

  if (name && *name && value && *value)
    {
      char *new_value = lt_extend_str (getenv (name), value, 0);
      /* some systems can't cope with a ':'-terminated path #' */
      int len = strlen (new_value);
      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
        {
          new_value[len-1] = '\0';
        }
      lt_setenv (name, new_value);
      XFREE (new_value);
    }
}

void
lt_update_lib_path (const char *name, const char *value)
{
  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
                          (name ? name : "<NULL>"),
                          (value ? value : "<NULL>")));

  if (name && *name && value && *value)
    {
      char *new_value = lt_extend_str (getenv (name), value, 0);
      lt_setenv (name, new_value);
      XFREE (new_value);
    }
}


EOF
}
# end: func_emit_cwrapperexe_src

# func_mode_link arg...
func_mode_link ()
{
    $opt_debug
    case $host in
    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
      # It is impossible to link a dll without this setting, and
      # we shouldn't force the makefile maintainer to figure out
      # which system we are compiling for in order to pass an extra
      # flag for every libtool invocation.
      # allow_undefined=no

      # FIXME: Unfortunately, there are problems with the above when trying
      # to make a dll which has undefined symbols, in which case not
      # even a static library is built.  For now, we need to specify
      # -no-undefined on the libtool link line when we can be certain
      # that all symbols are satisfied, otherwise we get a static library.
      allow_undefined=yes
      ;;
    *)
      allow_undefined=yes
      ;;
    esac
    libtool_args=$nonopt
    base_compile="$nonopt $@"
    compile_command=$nonopt
    finalize_command=$nonopt

    compile_rpath=
    finalize_rpath=
    compile_shlibpath=
    finalize_shlibpath=
    convenience=
    old_convenience=
    deplibs=
    old_deplibs=
    compiler_flags=
    linker_flags=
    dllsearchpath=
    lib_search_path=`pwd`
    inst_prefix_dir=
    new_inherited_linker_flags=

    avoid_version=no
    dlfiles=
    dlprefiles=
    dlself=no
    export_dynamic=no
    export_symbols=
    export_symbols_regex=
    generated=
    libobjs=
    ltlibs=
    module=no
    no_install=no
    objs=
    non_pic_objects=
    precious_files_regex=
    prefer_static_libs=no
    preload=no
    prev=
    prevarg=
    release=
    rpath=
    xrpath=
    perm_rpath=
    temp_rpath=
    thread_safe=no
    vinfo=
    vinfo_number=no
    weak_libs=
    single_module="${wl}-single_module"
    func_infer_tag $base_compile

    # We need to know -static, to get the right output filenames.
    for arg
    do
      case $arg in
      -shared)
	test "$build_libtool_libs" != yes && \
	  func_fatal_configuration "can not build a shared library"
	build_old_libs=no
	break
	;;
      -all-static | -static | -static-libtool-libs)
	case $arg in
	-all-static)
	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
	    func_warning "complete static linking is impossible in this configuration"
	  fi
	  if test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	  prefer_static_libs=yes
	  ;;
	-static)
	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	  prefer_static_libs=built
	  ;;
	-static-libtool-libs)
	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
	    dlopen_self=$dlopen_self_static
	  fi
	  prefer_static_libs=yes
	  ;;
	esac
	build_libtool_libs=no
	build_old_libs=yes
	break
	;;
      esac
    done

    # See if our shared archives depend on static archives.
    test -n "$old_archive_from_new_cmds" && build_old_libs=yes

    # Go through the arguments, transforming them on the way.
    while test "$#" -gt 0; do
      arg="$1"
      shift
      func_quote_for_eval "$arg"
      qarg=$func_quote_for_eval_unquoted_result
      func_append libtool_args " $func_quote_for_eval_result"

      # If the previous option needs an argument, assign it.
      if test -n "$prev"; then
	case $prev in
	output)
	  func_append compile_command " @OUTPUT@"
	  func_append finalize_command " @OUTPUT@"
	  ;;
	esac

	case $prev in
	dlfiles|dlprefiles)
	  if test "$preload" = no; then
	    # Add the symbol object into the linking commands.
	    func_append compile_command " @SYMFILE@"
	    func_append finalize_command " @SYMFILE@"
	    preload=yes
	  fi
	  case $arg in
	  *.la | *.lo) ;;  # We handle these cases below.
	  force)
	    if test "$dlself" = no; then
	      dlself=needless
	      export_dynamic=yes
	    fi
	    prev=
	    continue
	    ;;
	  self)
	    if test "$prev" = dlprefiles; then
	      dlself=yes
	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
	      dlself=yes
	    else
	      dlself=needless
	      export_dynamic=yes
	    fi
	    prev=
	    continue
	    ;;
	  *)
	    if test "$prev" = dlfiles; then
	      dlfiles="$dlfiles $arg"
	    else
	      dlprefiles="$dlprefiles $arg"
	    fi
	    prev=
	    continue
	    ;;
	  esac
	  ;;
	expsyms)
	  export_symbols="$arg"
	  test -f "$arg" \
	    || func_fatal_error "symbol file \`$arg' does not exist"
	  prev=
	  continue
	  ;;
	expsyms_regex)
	  export_symbols_regex="$arg"
	  prev=
	  continue
	  ;;
	framework)
	  case $host in
	    *-*-darwin*)
	      case "$deplibs " in
		*" $qarg.ltframework "*) ;;
		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
		   ;;
	      esac
	      ;;
	  esac
	  prev=
	  continue
	  ;;
	inst_prefix)
	  inst_prefix_dir="$arg"
	  prev=
	  continue
	  ;;
	objectlist)
	  if test -f "$arg"; then
	    save_arg=$arg
	    moreargs=
	    for fil in `cat "$save_arg"`
	    do
#	      moreargs="$moreargs $fil"
	      arg=$fil
	      # A libtool-controlled object.

	      # Check to see that this really is a libtool object.
	      if func_lalib_unsafe_p "$arg"; then
		pic_object=
		non_pic_object=

		# Read the .lo file
		func_source "$arg"

		if test -z "$pic_object" ||
		   test -z "$non_pic_object" ||
		   test "$pic_object" = none &&
		   test "$non_pic_object" = none; then
		  func_fatal_error "cannot find name of object for \`$arg'"
		fi

		# Extract subdirectory from the argument.
		func_dirname "$arg" "/" ""
		xdir="$func_dirname_result"

		if test "$pic_object" != none; then
		  # Prepend the subdirectory the object is found in.
		  pic_object="$xdir$pic_object"

		  if test "$prev" = dlfiles; then
		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
		      dlfiles="$dlfiles $pic_object"
		      prev=
		      continue
		    else
		      # If libtool objects are unsupported, then we need to preload.
		      prev=dlprefiles
		    fi
		  fi

		  # CHECK ME:  I think I busted this.  -Ossama
		  if test "$prev" = dlprefiles; then
		    # Preload the old-style object.
		    dlprefiles="$dlprefiles $pic_object"
		    prev=
		  fi

		  # A PIC object.
		  func_append libobjs " $pic_object"
		  arg="$pic_object"
		fi

		# Non-PIC object.
		if test "$non_pic_object" != none; then
		  # Prepend the subdirectory the object is found in.
		  non_pic_object="$xdir$non_pic_object"

		  # A standard non-PIC object
		  func_append non_pic_objects " $non_pic_object"
		  if test -z "$pic_object" || test "$pic_object" = none ; then
		    arg="$non_pic_object"
		  fi
		else
		  # If the PIC object exists, use it instead.
		  # $xdir was prepended to $pic_object above.
		  non_pic_object="$pic_object"
		  func_append non_pic_objects " $non_pic_object"
		fi
	      else
		# Only an error if not doing a dry-run.
		if $opt_dry_run; then
		  # Extract subdirectory from the argument.
		  func_dirname "$arg" "/" ""
		  xdir="$func_dirname_result"

		  func_lo2o "$arg"
		  pic_object=$xdir$objdir/$func_lo2o_result
		  non_pic_object=$xdir$func_lo2o_result
		  func_append libobjs " $pic_object"
		  func_append non_pic_objects " $non_pic_object"
	        else
		  func_fatal_error "\`$arg' is not a valid libtool object"
		fi
	      fi
	    done
	  else
	    func_fatal_error "link input file \`$arg' does not exist"
	  fi
	  arg=$save_arg
	  prev=
	  continue
	  ;;
	precious_regex)
	  precious_files_regex="$arg"
	  prev=
	  continue
	  ;;
	release)
	  release="-$arg"
	  prev=
	  continue
	  ;;
	rpath | xrpath)
	  # We need an absolute path.
	  case $arg in
	  [\\/]* | [A-Za-z]:[\\/]*) ;;
	  *)
	    func_fatal_error "only absolute run-paths are allowed"
	    ;;
	  esac
	  if test "$prev" = rpath; then
	    case "$rpath " in
	    *" $arg "*) ;;
	    *) rpath="$rpath $arg" ;;
	    esac
	  else
	    case "$xrpath " in
	    *" $arg "*) ;;
	    *) xrpath="$xrpath $arg" ;;
	    esac
	  fi
	  prev=
	  continue
	  ;;
	shrext)
	  shrext_cmds="$arg"
	  prev=
	  continue
	  ;;
	weak)
	  weak_libs="$weak_libs $arg"
	  prev=
	  continue
	  ;;
	xcclinker)
	  linker_flags="$linker_flags $qarg"
	  compiler_flags="$compiler_flags $qarg"
	  prev=
	  func_append compile_command " $qarg"
	  func_append finalize_command " $qarg"
	  continue
	  ;;
	xcompiler)
	  compiler_flags="$compiler_flags $qarg"
	  prev=
	  func_append compile_command " $qarg"
	  func_append finalize_command " $qarg"
	  continue
	  ;;
	xlinker)
	  linker_flags="$linker_flags $qarg"
	  compiler_flags="$compiler_flags $wl$qarg"
	  prev=
	  func_append compile_command " $wl$qarg"
	  func_append finalize_command " $wl$qarg"
	  continue
	  ;;
	*)
	  eval "$prev=\"\$arg\""
	  prev=
	  continue
	  ;;
	esac
      fi # test -n "$prev"

      prevarg="$arg"

      case $arg in
      -all-static)
	if test -n "$link_static_flag"; then
	  # See comment for -static flag below, for more details.
	  func_append compile_command " $link_static_flag"
	  func_append finalize_command " $link_static_flag"
	fi
	continue
	;;

      -allow-undefined)
	# FIXME: remove this flag sometime in the future.
	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
	;;

      -avoid-version)
	avoid_version=yes
	continue
	;;

      -dlopen)
	prev=dlfiles
	continue
	;;

      -dlpreopen)
	prev=dlprefiles
	continue
	;;

      -export-dynamic)
	export_dynamic=yes
	continue
	;;

      -export-symbols | -export-symbols-regex)
	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
	  func_fatal_error "more than one -exported-symbols argument is not allowed"
	fi
	if test "X$arg" = "X-export-symbols"; then
	  prev=expsyms
	else
	  prev=expsyms_regex
	fi
	continue
	;;

      -framework)
	prev=framework
	continue
	;;

      -inst-prefix-dir)
	prev=inst_prefix
	continue
	;;

      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
      # so, if we see these flags be careful not to treat them like -L
      -L[A-Z][A-Z]*:*)
	case $with_gcc/$host in
	no/*-*-irix* | /*-*-irix*)
	  func_append compile_command " $arg"
	  func_append finalize_command " $arg"
	  ;;
	esac
	continue
	;;

      -L*)
	func_stripname '-L' '' "$arg"
	dir=$func_stripname_result
	if test -z "$dir"; then
	  if test "$#" -gt 0; then
	    func_fatal_error "require no space between \`-L' and \`$1'"
	  else
	    func_fatal_error "need path for \`-L' option"
	  fi
	fi
	# We need an absolute path.
	case $dir in
	[\\/]* | [A-Za-z]:[\\/]*) ;;
	*)
	  absdir=`cd "$dir" && pwd`
	  test -z "$absdir" && \
	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
	  dir="$absdir"
	  ;;
	esac
	case "$deplibs " in
	*" -L$dir "*) ;;
	*)
	  deplibs="$deplibs -L$dir"
	  lib_search_path="$lib_search_path $dir"
	  ;;
	esac
	case $host in
	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
	  case :$dllsearchpath: in
	  *":$dir:"*) ;;
	  ::) dllsearchpath=$dir;;
	  *) dllsearchpath="$dllsearchpath:$dir";;
	  esac
	  case :$dllsearchpath: in
	  *":$testbindir:"*) ;;
	  ::) dllsearchpath=$testbindir;;
	  *) dllsearchpath="$dllsearchpath:$testbindir";;
	  esac
	  ;;
	esac
	continue
	;;

      -l*)
	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
	  case $host in
	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
	    # These systems don't actually have a C or math library (as such)
	    continue
	    ;;
	  *-*-os2*)
	    # These systems don't actually have a C library (as such)
	    test "X$arg" = "X-lc" && continue
	    ;;
	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	    # Do not include libc due to us having libc/libc_r.
	    test "X$arg" = "X-lc" && continue
	    ;;
	  *-*-rhapsody* | *-*-darwin1.[012])
	    # Rhapsody C and math libraries are in the System framework
	    deplibs="$deplibs System.ltframework"
	    continue
	    ;;
	  *-*-sco3.2v5* | *-*-sco5v6*)
	    # Causes problems with __ctype
	    test "X$arg" = "X-lc" && continue
	    ;;
	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
	    # Compiler inserts libc in the correct place for threads to work
	    test "X$arg" = "X-lc" && continue
	    ;;
	  esac
	elif test "X$arg" = "X-lc_r"; then
	 case $host in
	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	   # Do not include libc_r directly, use -pthread flag.
	   continue
	   ;;
	 esac
	fi
	deplibs="$deplibs $arg"
	continue
	;;

      -module)
	module=yes
	continue
	;;

      # Tru64 UNIX uses -model [arg] to determine the layout of C++
      # classes, name mangling, and exception handling.
      # Darwin uses the -arch flag to determine output architecture.
      -model|-arch|-isysroot)
	compiler_flags="$compiler_flags $arg"
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
	prev=xcompiler
	continue
	;;

      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
	compiler_flags="$compiler_flags $arg"
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
	case "$new_inherited_linker_flags " in
	    *" $arg "*) ;;
	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
	esac
	continue
	;;

      -multi_module)
	single_module="${wl}-multi_module"
	continue
	;;

      -no-fast-install)
	fast_install=no
	continue
	;;

      -no-install)
	case $host in
	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
	  # The PATH hackery in wrapper scripts is required on Windows
	  # and Darwin in order for the loader to find any dlls it needs.
	  func_warning "\`-no-install' is ignored for $host"
	  func_warning "assuming \`-no-fast-install' instead"
	  fast_install=no
	  ;;
	*) no_install=yes ;;
	esac
	continue
	;;

      -no-undefined)
	allow_undefined=no
	continue
	;;

      -objectlist)
	prev=objectlist
	continue
	;;

      -o) prev=output ;;

      -precious-files-regex)
	prev=precious_regex
	continue
	;;

      -release)
	prev=release
	continue
	;;

      -rpath)
	prev=rpath
	continue
	;;

      -R)
	prev=xrpath
	continue
	;;

      -R*)
	func_stripname '-R' '' "$arg"
	dir=$func_stripname_result
	# We need an absolute path.
	case $dir in
	[\\/]* | [A-Za-z]:[\\/]*) ;;
	*)
	  func_fatal_error "only absolute run-paths are allowed"
	  ;;
	esac
	case "$xrpath " in
	*" $dir "*) ;;
	*) xrpath="$xrpath $dir" ;;
	esac
	continue
	;;

      -shared)
	# The effects of -shared are defined in a previous loop.
	continue
	;;

      -shrext)
	prev=shrext
	continue
	;;

      -static | -static-libtool-libs)
	# The effects of -static are defined in a previous loop.
	# We used to do the same as -all-static on platforms that
	# didn't have a PIC flag, but the assumption that the effects
	# would be equivalent was wrong.  It would break on at least
	# Digital Unix and AIX.
	continue
	;;

      -thread-safe)
	thread_safe=yes
	continue
	;;

      -version-info)
	prev=vinfo
	continue
	;;

      -version-number)
	prev=vinfo
	vinfo_number=yes
	continue
	;;

      -weak)
        prev=weak
	continue
	;;

      -Wc,*)
	func_stripname '-Wc,' '' "$arg"
	args=$func_stripname_result
	arg=
	save_ifs="$IFS"; IFS=','
	for flag in $args; do
	  IFS="$save_ifs"
          func_quote_for_eval "$flag"
	  arg="$arg $wl$func_quote_for_eval_result"
	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
	done
	IFS="$save_ifs"
	func_stripname ' ' '' "$arg"
	arg=$func_stripname_result
	;;

      -Wl,*)
	func_stripname '-Wl,' '' "$arg"
	args=$func_stripname_result
	arg=
	save_ifs="$IFS"; IFS=','
	for flag in $args; do
	  IFS="$save_ifs"
          func_quote_for_eval "$flag"
	  arg="$arg $wl$func_quote_for_eval_result"
	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
	  linker_flags="$linker_flags $func_quote_for_eval_result"
	done
	IFS="$save_ifs"
	func_stripname ' ' '' "$arg"
	arg=$func_stripname_result
	;;

      -Xcompiler)
	prev=xcompiler
	continue
	;;

      -Xlinker)
	prev=xlinker
	continue
	;;

      -XCClinker)
	prev=xcclinker
	continue
	;;

      # -msg_* for osf cc
      -msg_*)
	func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
	;;

      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
      # -r[0-9][0-9]* specifies the processor on the SGI compiler
      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
      # +DA*, +DD* enable 64-bit mode on the HP compiler
      # -q* pass through compiler args for the IBM compiler
      # -m*, -t[45]*, -txscale* pass through architecture-specific
      # compiler args for GCC
      # -F/path gives path to uninstalled frameworks, gcc on darwin
      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
      # @file GCC response files
      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
        func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
        compiler_flags="$compiler_flags $arg"
        continue
        ;;

      # Some other compiler flag.
      -* | +*)
        func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
	;;

      *.$objext)
	# A standard object.
	objs="$objs $arg"
	;;

      *.lo)
	# A libtool-controlled object.

	# Check to see that this really is a libtool object.
	if func_lalib_unsafe_p "$arg"; then
	  pic_object=
	  non_pic_object=

	  # Read the .lo file
	  func_source "$arg"

	  if test -z "$pic_object" ||
	     test -z "$non_pic_object" ||
	     test "$pic_object" = none &&
	     test "$non_pic_object" = none; then
	    func_fatal_error "cannot find name of object for \`$arg'"
	  fi

	  # Extract subdirectory from the argument.
	  func_dirname "$arg" "/" ""
	  xdir="$func_dirname_result"

	  if test "$pic_object" != none; then
	    # Prepend the subdirectory the object is found in.
	    pic_object="$xdir$pic_object"

	    if test "$prev" = dlfiles; then
	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
		dlfiles="$dlfiles $pic_object"
		prev=
		continue
	      else
		# If libtool objects are unsupported, then we need to preload.
		prev=dlprefiles
	      fi
	    fi

	    # CHECK ME:  I think I busted this.  -Ossama
	    if test "$prev" = dlprefiles; then
	      # Preload the old-style object.
	      dlprefiles="$dlprefiles $pic_object"
	      prev=
	    fi

	    # A PIC object.
	    func_append libobjs " $pic_object"
	    arg="$pic_object"
	  fi

	  # Non-PIC object.
	  if test "$non_pic_object" != none; then
	    # Prepend the subdirectory the object is found in.
	    non_pic_object="$xdir$non_pic_object"

	    # A standard non-PIC object
	    func_append non_pic_objects " $non_pic_object"
	    if test -z "$pic_object" || test "$pic_object" = none ; then
	      arg="$non_pic_object"
	    fi
	  else
	    # If the PIC object exists, use it instead.
	    # $xdir was prepended to $pic_object above.
	    non_pic_object="$pic_object"
	    func_append non_pic_objects " $non_pic_object"
	  fi
	else
	  # Only an error if not doing a dry-run.
	  if $opt_dry_run; then
	    # Extract subdirectory from the argument.
	    func_dirname "$arg" "/" ""
	    xdir="$func_dirname_result"

	    func_lo2o "$arg"
	    pic_object=$xdir$objdir/$func_lo2o_result
	    non_pic_object=$xdir$func_lo2o_result
	    func_append libobjs " $pic_object"
	    func_append non_pic_objects " $non_pic_object"
	  else
	    func_fatal_error "\`$arg' is not a valid libtool object"
	  fi
	fi
	;;

      *.$libext)
	# An archive.
	deplibs="$deplibs $arg"
	old_deplibs="$old_deplibs $arg"
	continue
	;;

      *.la)
	# A libtool-controlled library.

	if test "$prev" = dlfiles; then
	  # This library was specified with -dlopen.
	  dlfiles="$dlfiles $arg"
	  prev=
	elif test "$prev" = dlprefiles; then
	  # The library was specified with -dlpreopen.
	  dlprefiles="$dlprefiles $arg"
	  prev=
	else
	  deplibs="$deplibs $arg"
	fi
	continue
	;;

      # Some other compiler argument.
      *)
	# Unknown arguments in both finalize_command and compile_command need
	# to be aesthetically quoted because they are evaled later.
	func_quote_for_eval "$arg"
	arg="$func_quote_for_eval_result"
	;;
      esac # arg

      # Now actually substitute the argument into the commands.
      if test -n "$arg"; then
	func_append compile_command " $arg"
	func_append finalize_command " $arg"
      fi
    done # argument parsing loop

    test -n "$prev" && \
      func_fatal_help "the \`$prevarg' option requires an argument"

    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
      eval arg=\"$export_dynamic_flag_spec\"
      func_append compile_command " $arg"
      func_append finalize_command " $arg"
    fi

    oldlibs=
    # calculate the name of the file, without its directory
    func_basename "$output"
    outputname="$func_basename_result"
    libobjs_save="$libobjs"

    if test -n "$shlibpath_var"; then
      # get the directories listed in $shlibpath_var
      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
    else
      shlib_search_path=
    fi
    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"

    func_dirname "$output" "/" ""
    output_objdir="$func_dirname_result$objdir"
    # Create the object directory.
    func_mkdir_p "$output_objdir"

    # Determine the type of output
    case $output in
    "")
      func_fatal_help "you must specify an output file"
      ;;
    *.$libext) linkmode=oldlib ;;
    *.lo | *.$objext) linkmode=obj ;;
    *.la) linkmode=lib ;;
    *) linkmode=prog ;; # Anything else should be a program.
    esac

    specialdeplibs=

    libs=
    # Find all interdependent deplibs by searching for libraries
    # that are linked more than once (e.g. -la -lb -la)
    for deplib in $deplibs; do
      if $opt_duplicate_deps ; then
	case "$libs " in
	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
	esac
      fi
      libs="$libs $deplib"
    done

    if test "$linkmode" = lib; then
      libs="$predeps $libs $compiler_lib_search_path $postdeps"

      # Compute libraries that are listed more than once in $predeps
      # $postdeps and mark them as special (i.e., whose duplicates are
      # not to be eliminated).
      pre_post_deps=
      if $opt_duplicate_compiler_generated_deps; then
	for pre_post_dep in $predeps $postdeps; do
	  case "$pre_post_deps " in
	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
	  esac
	  pre_post_deps="$pre_post_deps $pre_post_dep"
	done
      fi
      pre_post_deps=
    fi

    deplibs=
    newdependency_libs=
    newlib_search_path=
    need_relink=no # whether we're linking any uninstalled libtool libraries
    notinst_deplibs= # not-installed libtool libraries
    notinst_path= # paths that contain not-installed libtool libraries

    case $linkmode in
    lib)
	passes="conv dlpreopen link"
	for file in $dlfiles $dlprefiles; do
	  case $file in
	  *.la) ;;
	  *)
	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
	    ;;
	  esac
	done
	;;
    prog)
	compile_deplibs=
	finalize_deplibs=
	alldeplibs=no
	newdlfiles=
	newdlprefiles=
	passes="conv scan dlopen dlpreopen link"
	;;
    *)  passes="conv"
	;;
    esac

    for pass in $passes; do
      # The preopen pass in lib mode reverses $deplibs; put it back here
      # so that -L comes before libs that need it for instance...
      if test "$linkmode,$pass" = "lib,link"; then
	## FIXME: Find the place where the list is rebuilt in the wrong
	##        order, and fix it there properly
        tmp_deplibs=
	for deplib in $deplibs; do
	  tmp_deplibs="$deplib $tmp_deplibs"
	done
	deplibs="$tmp_deplibs"
      fi

      if test "$linkmode,$pass" = "lib,link" ||
	 test "$linkmode,$pass" = "prog,scan"; then
	libs="$deplibs"
	deplibs=
      fi
      if test "$linkmode" = prog; then
	case $pass in
	dlopen) libs="$dlfiles" ;;
	dlpreopen) libs="$dlprefiles" ;;
	link)
	  libs="$deplibs %DEPLIBS%"
	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
	  ;;
	esac
      fi
      if test "$linkmode,$pass" = "lib,dlpreopen"; then
	# Collect and forward deplibs of preopened libtool libs
	for lib in $dlprefiles; do
	  # Ignore non-libtool-libs
	  dependency_libs=
	  case $lib in
	  *.la)	func_source "$lib" ;;
	  esac

	  # Collect preopened libtool deplibs, except any this library
	  # has declared as weak libs
	  for deplib in $dependency_libs; do
            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
	    case " $weak_libs " in
	    *" $deplib_base "*) ;;
	    *) deplibs="$deplibs $deplib" ;;
	    esac
	  done
	done
	libs="$dlprefiles"
      fi
      if test "$pass" = dlopen; then
	# Collect dlpreopened libraries
	save_deplibs="$deplibs"
	deplibs=
      fi

      for deplib in $libs; do
	lib=
	found=no
	case $deplib in
	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
	  if test "$linkmode,$pass" = "prog,link"; then
	    compile_deplibs="$deplib $compile_deplibs"
	    finalize_deplibs="$deplib $finalize_deplibs"
	  else
	    compiler_flags="$compiler_flags $deplib"
	    if test "$linkmode" = lib ; then
		case "$new_inherited_linker_flags " in
		    *" $deplib "*) ;;
		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
		esac
	    fi
	  fi
	  continue
	  ;;
	-l*)
	  if test "$linkmode" != lib && test "$linkmode" != prog; then
	    func_warning "\`-l' is ignored for archives/objects"
	    continue
	  fi
	  func_stripname '-l' '' "$deplib"
	  name=$func_stripname_result
	  if test "$linkmode" = lib; then
	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
	  else
	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
	  fi
	  for searchdir in $searchdirs; do
	    for search_ext in .la $std_shrext .so .a; do
	      # Search the libtool library
	      lib="$searchdir/lib${name}${search_ext}"
	      if test -f "$lib"; then
		if test "$search_ext" = ".la"; then
		  found=yes
		else
		  found=no
		fi
		break 2
	      fi
	    done
	  done
	  if test "$found" != yes; then
	    # deplib doesn't seem to be a libtool library
	    if test "$linkmode,$pass" = "prog,link"; then
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    else
	      deplibs="$deplib $deplibs"
	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
	    fi
	    continue
	  else # deplib is a libtool library
	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
	    # We need to do some special things here, and not later.
	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
	      case " $predeps $postdeps " in
	      *" $deplib "*)
		if func_lalib_p "$lib"; then
		  library_names=
		  old_library=
		  func_source "$lib"
		  for l in $old_library $library_names; do
		    ll="$l"
		  done
		  if test "X$ll" = "X$old_library" ; then # only static version available
		    found=no
		    func_dirname "$lib" "" "."
		    ladir="$func_dirname_result"
		    lib=$ladir/$old_library
		    if test "$linkmode,$pass" = "prog,link"; then
		      compile_deplibs="$deplib $compile_deplibs"
		      finalize_deplibs="$deplib $finalize_deplibs"
		    else
		      deplibs="$deplib $deplibs"
		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
		    fi
		    continue
		  fi
		fi
		;;
	      *) ;;
	      esac
	    fi
	  fi
	  ;; # -l
	*.ltframework)
	  if test "$linkmode,$pass" = "prog,link"; then
	    compile_deplibs="$deplib $compile_deplibs"
	    finalize_deplibs="$deplib $finalize_deplibs"
	  else
	    deplibs="$deplib $deplibs"
	    if test "$linkmode" = lib ; then
		case "$new_inherited_linker_flags " in
		    *" $deplib "*) ;;
		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
		esac
	    fi
	  fi
	  continue
	  ;;
	-L*)
	  case $linkmode in
	  lib)
	    deplibs="$deplib $deplibs"
	    test "$pass" = conv && continue
	    newdependency_libs="$deplib $newdependency_libs"
	    func_stripname '-L' '' "$deplib"
	    newlib_search_path="$newlib_search_path $func_stripname_result"
	    ;;
	  prog)
	    if test "$pass" = conv; then
	      deplibs="$deplib $deplibs"
	      continue
	    fi
	    if test "$pass" = scan; then
	      deplibs="$deplib $deplibs"
	    else
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    fi
	    func_stripname '-L' '' "$deplib"
	    newlib_search_path="$newlib_search_path $func_stripname_result"
	    ;;
	  *)
	    func_warning "\`-L' is ignored for archives/objects"
	    ;;
	  esac # linkmode
	  continue
	  ;; # -L
	-R*)
	  if test "$pass" = link; then
	    func_stripname '-R' '' "$deplib"
	    dir=$func_stripname_result
	    # Make sure the xrpath contains only unique directories.
	    case "$xrpath " in
	    *" $dir "*) ;;
	    *) xrpath="$xrpath $dir" ;;
	    esac
	  fi
	  deplibs="$deplib $deplibs"
	  continue
	  ;;
	*.la) lib="$deplib" ;;
	*.$libext)
	  if test "$pass" = conv; then
	    deplibs="$deplib $deplibs"
	    continue
	  fi
	  case $linkmode in
	  lib)
	    # Linking convenience modules into shared libraries is allowed,
	    # but linking other static libraries is non-portable.
	    case " $dlpreconveniencelibs " in
	    *" $deplib "*) ;;
	    *)
	      valid_a_lib=no
	      case $deplibs_check_method in
		match_pattern*)
		  set dummy $deplibs_check_method; shift
		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
		    | $EGREP "$match_pattern_regex" > /dev/null; then
		    valid_a_lib=yes
		  fi
		;;
		pass_all)
		  valid_a_lib=yes
		;;
	      esac
	      if test "$valid_a_lib" != yes; then
		$ECHO
		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
		$ECHO "*** I have the capability to make that library automatically link in when"
		$ECHO "*** you link to this library.  But I can only do this if you have a"
		$ECHO "*** shared version of the library, which you do not appear to have"
		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
		$ECHO "*** that it is just a static archive that I should not use here."
	      else
		$ECHO
		$ECHO "*** Warning: Linking the shared library $output against the"
		$ECHO "*** static library $deplib is not portable!"
		deplibs="$deplib $deplibs"
	      fi
	      ;;
	    esac
	    continue
	    ;;
	  prog)
	    if test "$pass" != link; then
	      deplibs="$deplib $deplibs"
	    else
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    fi
	    continue
	    ;;
	  esac # linkmode
	  ;; # *.$libext
	*.lo | *.$objext)
	  if test "$pass" = conv; then
	    deplibs="$deplib $deplibs"
	  elif test "$linkmode" = prog; then
	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
	      # If there is no dlopen support or we're linking statically,
	      # we need to preload.
	      newdlprefiles="$newdlprefiles $deplib"
	      compile_deplibs="$deplib $compile_deplibs"
	      finalize_deplibs="$deplib $finalize_deplibs"
	    else
	      newdlfiles="$newdlfiles $deplib"
	    fi
	  fi
	  continue
	  ;;
	%DEPLIBS%)
	  alldeplibs=yes
	  continue
	  ;;
	esac # case $deplib

	if test "$found" = yes || test -f "$lib"; then :
	else
	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
	fi

	# Check to see that this really is a libtool archive.
	func_lalib_unsafe_p "$lib" \
	  || func_fatal_error "\`$lib' is not a valid libtool archive"

	func_dirname "$lib" "" "."
	ladir="$func_dirname_result"

	dlname=
	dlopen=
	dlpreopen=
	libdir=
	library_names=
	old_library=
	inherited_linker_flags=
	# If the library was installed with an old release of libtool,
	# it will not redefine variables installed, or shouldnotlink
	installed=yes
	shouldnotlink=no
	avoidtemprpath=


	# Read the .la file
	func_source "$lib"

	# Convert "-framework foo" to "foo.ltframework"
	if test -n "$inherited_linker_flags"; then
	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
	    case " $new_inherited_linker_flags " in
	      *" $tmp_inherited_linker_flag "*) ;;
	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
	    esac
	  done
	fi
	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	if test "$linkmode,$pass" = "lib,link" ||
	   test "$linkmode,$pass" = "prog,scan" ||
	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
	fi

	if test "$pass" = conv; then
	  # Only check for convenience libraries
	  deplibs="$lib $deplibs"
	  if test -z "$libdir"; then
	    if test -z "$old_library"; then
	      func_fatal_error "cannot find name of link library for \`$lib'"
	    fi
	    # It is a libtool convenience library, so add in its objects.
	    convenience="$convenience $ladir/$objdir/$old_library"
	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
	    tmp_libs=
	    for deplib in $dependency_libs; do
	      deplibs="$deplib $deplibs"
	      if $opt_duplicate_deps ; then
		case "$tmp_libs " in
		*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
		esac
	      fi
	      tmp_libs="$tmp_libs $deplib"
	    done
	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
	    func_fatal_error "\`$lib' is not a convenience library"
	  fi
	  continue
	fi # $pass = conv


	# Get the name of the library we link against.
	linklib=
	for l in $old_library $library_names; do
	  linklib="$l"
	done
	if test -z "$linklib"; then
	  func_fatal_error "cannot find name of link library for \`$lib'"
	fi

	# This library was specified with -dlopen.
	if test "$pass" = dlopen; then
	  if test -z "$libdir"; then
	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
	  fi
	  if test -z "$dlname" ||
	     test "$dlopen_support" != yes ||
	     test "$build_libtool_libs" = no; then
	    # If there is no dlname, no dlopen support or we're linking
	    # statically, we need to preload.  We also need to preload any
	    # dependent libraries so libltdl's deplib preloader doesn't
	    # bomb out in the load deplibs phase.
	    dlprefiles="$dlprefiles $lib $dependency_libs"
	  else
	    newdlfiles="$newdlfiles $lib"
	  fi
	  continue
	fi # $pass = dlopen

	# We need an absolute path.
	case $ladir in
	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
	*)
	  abs_ladir=`cd "$ladir" && pwd`
	  if test -z "$abs_ladir"; then
	    func_warning "cannot determine absolute directory name of \`$ladir'"
	    func_warning "passing it literally to the linker, although it might fail"
	    abs_ladir="$ladir"
	  fi
	  ;;
	esac
	func_basename "$lib"
	laname="$func_basename_result"

	# Find the relevant object directory and library name.
	if test "X$installed" = Xyes; then
	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
	    func_warning "library \`$lib' was moved."
	    dir="$ladir"
	    absdir="$abs_ladir"
	    libdir="$abs_ladir"
	  else
	    dir="$libdir"
	    absdir="$libdir"
	  fi
	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
	else
	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
	    dir="$ladir"
	    absdir="$abs_ladir"
	    # Remove this search path later
	    notinst_path="$notinst_path $abs_ladir"
	  else
	    dir="$ladir/$objdir"
	    absdir="$abs_ladir/$objdir"
	    # Remove this search path later
	    notinst_path="$notinst_path $abs_ladir"
	  fi
	fi # $installed = yes
	func_stripname 'lib' '.la' "$laname"
	name=$func_stripname_result

	# This library was specified with -dlpreopen.
	if test "$pass" = dlpreopen; then
	  if test -z "$libdir" && test "$linkmode" = prog; then
	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
	  fi
	  # Prefer using a static library (so that no silly _DYNAMIC symbols
	  # are required to link).
	  if test -n "$old_library"; then
	    newdlprefiles="$newdlprefiles $dir/$old_library"
	    # Keep a list of preopened convenience libraries to check
	    # that they are being used correctly in the link pass.
	    test -z "$libdir" && \
		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
	  # Otherwise, use the dlname, so that lt_dlopen finds it.
	  elif test -n "$dlname"; then
	    newdlprefiles="$newdlprefiles $dir/$dlname"
	  else
	    newdlprefiles="$newdlprefiles $dir/$linklib"
	  fi
	fi # $pass = dlpreopen

	if test -z "$libdir"; then
	  # Link the convenience library
	  if test "$linkmode" = lib; then
	    deplibs="$dir/$old_library $deplibs"
	  elif test "$linkmode,$pass" = "prog,link"; then
	    compile_deplibs="$dir/$old_library $compile_deplibs"
	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
	  else
	    deplibs="$lib $deplibs" # used for prog,scan pass
	  fi
	  continue
	fi


	if test "$linkmode" = prog && test "$pass" != link; then
	  newlib_search_path="$newlib_search_path $ladir"
	  deplibs="$lib $deplibs"

	  linkalldeplibs=no
	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
	     test "$build_libtool_libs" = no; then
	    linkalldeplibs=yes
	  fi

	  tmp_libs=
	  for deplib in $dependency_libs; do
	    case $deplib in
	    -L*) func_stripname '-L' '' "$deplib"
	         newlib_search_path="$newlib_search_path $func_stripname_result"
		 ;;
	    esac
	    # Need to link against all dependency_libs?
	    if test "$linkalldeplibs" = yes; then
	      deplibs="$deplib $deplibs"
	    else
	      # Need to hardcode shared library paths
	      # or/and link against static libraries
	      newdependency_libs="$deplib $newdependency_libs"
	    fi
	    if $opt_duplicate_deps ; then
	      case "$tmp_libs " in
	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
	      esac
	    fi
	    tmp_libs="$tmp_libs $deplib"
	  done # for deplib
	  continue
	fi # $linkmode = prog...

	if test "$linkmode,$pass" = "prog,link"; then
	  if test -n "$library_names" &&
	     { { test "$prefer_static_libs" = no ||
	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
	       test -z "$old_library"; }; then
	    # We need to hardcode the library path
	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
	      # Make sure the rpath contains only unique directories.
	      case "$temp_rpath:" in
	      *"$absdir:"*) ;;
	      *) temp_rpath="$temp_rpath$absdir:" ;;
	      esac
	    fi

	    # Hardcode the library path.
	    # Skip directories that are in the system default run-time
	    # search path.
	    case " $sys_lib_dlsearch_path " in
	    *" $absdir "*) ;;
	    *)
	      case "$compile_rpath " in
	      *" $absdir "*) ;;
	      *) compile_rpath="$compile_rpath $absdir"
	      esac
	      ;;
	    esac
	    case " $sys_lib_dlsearch_path " in
	    *" $libdir "*) ;;
	    *)
	      case "$finalize_rpath " in
	      *" $libdir "*) ;;
	      *) finalize_rpath="$finalize_rpath $libdir"
	      esac
	      ;;
	    esac
	  fi # $linkmode,$pass = prog,link...

	  if test "$alldeplibs" = yes &&
	     { test "$deplibs_check_method" = pass_all ||
	       { test "$build_libtool_libs" = yes &&
		 test -n "$library_names"; }; }; then
	    # We only need to search for static libraries
	    continue
	  fi
	fi

	link_static=no # Whether the deplib will be linked statically
	use_static_libs=$prefer_static_libs
	if test "$use_static_libs" = built && test "$installed" = yes; then
	  use_static_libs=no
	fi
	if test -n "$library_names" &&
	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
	  case $host in
	  *cygwin* | *mingw* | *cegcc*)
	      # No point in relinking DLLs because paths are not encoded
	      notinst_deplibs="$notinst_deplibs $lib"
	      need_relink=no
	    ;;
	  *)
	    if test "$installed" = no; then
	      notinst_deplibs="$notinst_deplibs $lib"
	      need_relink=yes
	    fi
	    ;;
	  esac
	  # This is a shared library

	  # Warn about portability, can't link against -module's on some
	  # systems (darwin).  Don't bleat about dlopened modules though!
	  dlopenmodule=""
	  for dlpremoduletest in $dlprefiles; do
	    if test "X$dlpremoduletest" = "X$lib"; then
	      dlopenmodule="$dlpremoduletest"
	      break
	    fi
	  done
	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
	    $ECHO
	    if test "$linkmode" = prog; then
	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
	    else
	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
	    fi
	    $ECHO "*** $linklib is not portable!"
	  fi
	  if test "$linkmode" = lib &&
	     test "$hardcode_into_libs" = yes; then
	    # Hardcode the library path.
	    # Skip directories that are in the system default run-time
	    # search path.
	    case " $sys_lib_dlsearch_path " in
	    *" $absdir "*) ;;
	    *)
	      case "$compile_rpath " in
	      *" $absdir "*) ;;
	      *) compile_rpath="$compile_rpath $absdir"
	      esac
	      ;;
	    esac
	    case " $sys_lib_dlsearch_path " in
	    *" $libdir "*) ;;
	    *)
	      case "$finalize_rpath " in
	      *" $libdir "*) ;;
	      *) finalize_rpath="$finalize_rpath $libdir"
	      esac
	      ;;
	    esac
	  fi

	  if test -n "$old_archive_from_expsyms_cmds"; then
	    # figure out the soname
	    set dummy $library_names
	    shift
	    realname="$1"
	    shift
	    libname=`eval "\\$ECHO \"$libname_spec\""`
	    # use dlname if we got it. it's perfectly good, no?
	    if test -n "$dlname"; then
	      soname="$dlname"
	    elif test -n "$soname_spec"; then
	      # bleh windows
	      case $host in
	      *cygwin* | mingw* | *cegcc*)
	        func_arith $current - $age
		major=$func_arith_result
		versuffix="-$major"
		;;
	      esac
	      eval soname=\"$soname_spec\"
	    else
	      soname="$realname"
	    fi

	    # Make a new name for the extract_expsyms_cmds to use
	    soroot="$soname"
	    func_basename "$soroot"
	    soname="$func_basename_result"
	    func_stripname 'lib' '.dll' "$soname"
	    newlib=libimp-$func_stripname_result.a

	    # If the library has no export list, then create one now
	    if test -f "$output_objdir/$soname-def"; then :
	    else
	      func_verbose "extracting exported symbol list from \`$soname'"
	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
	    fi

	    # Create $newlib
	    if test -f "$output_objdir/$newlib"; then :; else
	      func_verbose "generating import library for \`$soname'"
	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
	    fi
	    # make sure the library variables are pointing to the new library
	    dir=$output_objdir
	    linklib=$newlib
	  fi # test -n "$old_archive_from_expsyms_cmds"

	  if test "$linkmode" = prog || test "$mode" != relink; then
	    add_shlibpath=
	    add_dir=
	    add=
	    lib_linked=yes
	    case $hardcode_action in
	    immediate | unsupported)
	      if test "$hardcode_direct" = no; then
		add="$dir/$linklib"
		case $host in
		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
		    *-*-unixware7*) add_dir="-L$dir" ;;
		  *-*-darwin* )
		    # if the lib is a (non-dlopened) module then we can not
		    # link against it, someone is ignoring the earlier warnings
		    if /usr/bin/file -L $add 2> /dev/null |
			 $GREP ": [^:]* bundle" >/dev/null ; then
		      if test "X$dlopenmodule" != "X$lib"; then
			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
			if test -z "$old_library" ; then
			  $ECHO
			  $ECHO "*** And there doesn't seem to be a static archive available"
			  $ECHO "*** The link will probably fail, sorry"
			else
			  add="$dir/$old_library"
			fi
		      elif test -n "$old_library"; then
			add="$dir/$old_library"
		      fi
		    fi
		esac
	      elif test "$hardcode_minus_L" = no; then
		case $host in
		*-*-sunos*) add_shlibpath="$dir" ;;
		esac
		add_dir="-L$dir"
		add="-l$name"
	      elif test "$hardcode_shlibpath_var" = no; then
		add_shlibpath="$dir"
		add="-l$name"
	      else
		lib_linked=no
	      fi
	      ;;
	    relink)
	      if test "$hardcode_direct" = yes &&
	         test "$hardcode_direct_absolute" = no; then
		add="$dir/$linklib"
	      elif test "$hardcode_minus_L" = yes; then
		add_dir="-L$dir"
		# Try looking first in the location we're being installed to.
		if test -n "$inst_prefix_dir"; then
		  case $libdir in
		    [\\/]*)
		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
		      ;;
		  esac
		fi
		add="-l$name"
	      elif test "$hardcode_shlibpath_var" = yes; then
		add_shlibpath="$dir"
		add="-l$name"
	      else
		lib_linked=no
	      fi
	      ;;
	    *) lib_linked=no ;;
	    esac

	    if test "$lib_linked" != yes; then
	      func_fatal_configuration "unsupported hardcode properties"
	    fi

	    if test -n "$add_shlibpath"; then
	      case :$compile_shlibpath: in
	      *":$add_shlibpath:"*) ;;
	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
	      esac
	    fi
	    if test "$linkmode" = prog; then
	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
	    else
	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
	      test -n "$add" && deplibs="$add $deplibs"
	      if test "$hardcode_direct" != yes &&
		 test "$hardcode_minus_L" != yes &&
		 test "$hardcode_shlibpath_var" = yes; then
		case :$finalize_shlibpath: in
		*":$libdir:"*) ;;
		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
		esac
	      fi
	    fi
	  fi

	  if test "$linkmode" = prog || test "$mode" = relink; then
	    add_shlibpath=
	    add_dir=
	    add=
	    # Finalize command for both is simple: just hardcode it.
	    if test "$hardcode_direct" = yes &&
	       test "$hardcode_direct_absolute" = no; then
	      add="$libdir/$linklib"
	    elif test "$hardcode_minus_L" = yes; then
	      add_dir="-L$libdir"
	      add="-l$name"
	    elif test "$hardcode_shlibpath_var" = yes; then
	      case :$finalize_shlibpath: in
	      *":$libdir:"*) ;;
	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
	      esac
	      add="-l$name"
	    elif test "$hardcode_automatic" = yes; then
	      if test -n "$inst_prefix_dir" &&
		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
		add="$inst_prefix_dir$libdir/$linklib"
	      else
		add="$libdir/$linklib"
	      fi
	    else
	      # We cannot seem to hardcode it, guess we'll fake it.
	      add_dir="-L$libdir"
	      # Try looking first in the location we're being installed to.
	      if test -n "$inst_prefix_dir"; then
		case $libdir in
		  [\\/]*)
		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
		    ;;
		esac
	      fi
	      add="-l$name"
	    fi

	    if test "$linkmode" = prog; then
	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
	    else
	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
	      test -n "$add" && deplibs="$add $deplibs"
	    fi
	  fi
	elif test "$linkmode" = prog; then
	  # Here we assume that one of hardcode_direct or hardcode_minus_L
	  # is not unsupported.  This is valid on all known static and
	  # shared platforms.
	  if test "$hardcode_direct" != unsupported; then
	    test -n "$old_library" && linklib="$old_library"
	    compile_deplibs="$dir/$linklib $compile_deplibs"
	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
	  else
	    compile_deplibs="-l$name -L$dir $compile_deplibs"
	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
	  fi
	elif test "$build_libtool_libs" = yes; then
	  # Not a shared library
	  if test "$deplibs_check_method" != pass_all; then
	    # We're trying link a shared library against a static one
	    # but the system doesn't support it.

	    # Just print a warning and add the library to dependency_libs so
	    # that the program can be linked against the static library.
	    $ECHO
	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
	    $ECHO "*** I have the capability to make that library automatically link in when"
	    $ECHO "*** you link to this library.  But I can only do this if you have a"
	    $ECHO "*** shared version of the library, which you do not appear to have."
	    if test "$module" = yes; then
	      $ECHO "*** But as you try to build a module library, libtool will still create "
	      $ECHO "*** a static module, that should work as long as the dlopening application"
	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
	      if test -z "$global_symbol_pipe"; then
		$ECHO
		$ECHO "*** However, this would only work if libtool was able to extract symbol"
		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
		$ECHO "*** not find such a program.  So, this module is probably useless."
		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
	      fi
	      if test "$build_old_libs" = no; then
		build_libtool_libs=module
		build_old_libs=yes
	      else
		build_libtool_libs=no
	      fi
	    fi
	  else
	    deplibs="$dir/$old_library $deplibs"
	    link_static=yes
	  fi
	fi # link shared/static library?

	if test "$linkmode" = lib; then
	  if test -n "$dependency_libs" &&
	     { test "$hardcode_into_libs" != yes ||
	       test "$build_old_libs" = yes ||
	       test "$link_static" = yes; }; then
	    # Extract -R from dependency_libs
	    temp_deplibs=
	    for libdir in $dependency_libs; do
	      case $libdir in
	      -R*) func_stripname '-R' '' "$libdir"
	           temp_xrpath=$func_stripname_result
		   case " $xrpath " in
		   *" $temp_xrpath "*) ;;
		   *) xrpath="$xrpath $temp_xrpath";;
		   esac;;
	      *) temp_deplibs="$temp_deplibs $libdir";;
	      esac
	    done
	    dependency_libs="$temp_deplibs"
	  fi

	  newlib_search_path="$newlib_search_path $absdir"
	  # Link against this library
	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
	  # ... and its dependency_libs
	  tmp_libs=
	  for deplib in $dependency_libs; do
	    newdependency_libs="$deplib $newdependency_libs"
	    if $opt_duplicate_deps ; then
	      case "$tmp_libs " in
	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
	      esac
	    fi
	    tmp_libs="$tmp_libs $deplib"
	  done

	  if test "$link_all_deplibs" != no; then
	    # Add the search paths of all dependency libraries
	    for deplib in $dependency_libs; do
	      path=
	      case $deplib in
	      -L*) path="$deplib" ;;
	      *.la)
	        func_dirname "$deplib" "" "."
		dir="$func_dirname_result"
		# We need an absolute path.
		case $dir in
		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
		*)
		  absdir=`cd "$dir" && pwd`
		  if test -z "$absdir"; then
		    func_warning "cannot determine absolute directory name of \`$dir'"
		    absdir="$dir"
		  fi
		  ;;
		esac
		if $GREP "^installed=no" $deplib > /dev/null; then
		case $host in
		*-*-darwin*)
		  depdepl=
		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
		  if test -n "$deplibrary_names" ; then
		    for tmp in $deplibrary_names ; do
		      depdepl=$tmp
		    done
		    if test -f "$absdir/$objdir/$depdepl" ; then
		      depdepl="$absdir/$objdir/$depdepl"
		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
                      if test -z "$darwin_install_name"; then
                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                      fi
		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
		      path=
		    fi
		  fi
		  ;;
		*)
		  path="-L$absdir/$objdir"
		  ;;
		esac
		else
		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
		  test -z "$libdir" && \
		    func_fatal_error "\`$deplib' is not a valid libtool archive"
		  test "$absdir" != "$libdir" && \
		    func_warning "\`$deplib' seems to be moved"

		  path="-L$absdir"
		fi
		;;
	      esac
	      case " $deplibs " in
	      *" $path "*) ;;
	      *) deplibs="$path $deplibs" ;;
	      esac
	    done
	  fi # link_all_deplibs != no
	fi # linkmode = lib
      done # for deplib in $libs
      if test "$pass" = link; then
	if test "$linkmode" = "prog"; then
	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
	else
	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	fi
      fi
      dependency_libs="$newdependency_libs"
      if test "$pass" = dlpreopen; then
	# Link the dlpreopened libraries before other libraries
	for deplib in $save_deplibs; do
	  deplibs="$deplib $deplibs"
	done
      fi
      if test "$pass" != dlopen; then
	if test "$pass" != conv; then
	  # Make sure lib_search_path contains only unique directories.
	  lib_search_path=
	  for dir in $newlib_search_path; do
	    case "$lib_search_path " in
	    *" $dir "*) ;;
	    *) lib_search_path="$lib_search_path $dir" ;;
	    esac
	  done
	  newlib_search_path=
	fi

	if test "$linkmode,$pass" != "prog,link"; then
	  vars="deplibs"
	else
	  vars="compile_deplibs finalize_deplibs"
	fi
	for var in $vars dependency_libs; do
	  # Add libraries to $var in reverse order
	  eval tmp_libs=\"\$$var\"
	  new_libs=
	  for deplib in $tmp_libs; do
	    # FIXME: Pedantically, this is the right thing to do, so
	    #        that some nasty dependency loop isn't accidentally
	    #        broken:
	    #new_libs="$deplib $new_libs"
	    # Pragmatically, this seems to cause very few problems in
	    # practice:
	    case $deplib in
	    -L*) new_libs="$deplib $new_libs" ;;
	    -R*) ;;
	    *)
	      # And here is the reason: when a library appears more
	      # than once as an explicit dependence of a library, or
	      # is implicitly linked in more than once by the
	      # compiler, it is considered special, and multiple
	      # occurrences thereof are not removed.  Compare this
	      # with having the same library being listed as a
	      # dependency of multiple other libraries: in this case,
	      # we know (pedantically, we assume) the library does not
	      # need to be listed more than once, so we keep only the
	      # last copy.  This is not always right, but it is rare
	      # enough that we require users that really mean to play
	      # such unportable linking tricks to link the library
	      # using -Wl,-lname, so that libtool does not consider it
	      # for duplicate removal.
	      case " $specialdeplibs " in
	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
	      *)
		case " $new_libs " in
		*" $deplib "*) ;;
		*) new_libs="$deplib $new_libs" ;;
		esac
		;;
	      esac
	      ;;
	    esac
	  done
	  tmp_libs=
	  for deplib in $new_libs; do
	    case $deplib in
	    -L*)
	      case " $tmp_libs " in
	      *" $deplib "*) ;;
	      *) tmp_libs="$tmp_libs $deplib" ;;
	      esac
	      ;;
	    *) tmp_libs="$tmp_libs $deplib" ;;
	    esac
	  done
	  eval $var=\"$tmp_libs\"
	done # for var
      fi
      # Last step: remove runtime libs from dependency_libs
      # (they stay in deplibs)
      tmp_libs=
      for i in $dependency_libs ; do
	case " $predeps $postdeps $compiler_lib_search_path " in
	*" $i "*)
	  i=""
	  ;;
	esac
	if test -n "$i" ; then
	  tmp_libs="$tmp_libs $i"
	fi
      done
      dependency_libs=$tmp_libs
    done # for pass
    if test "$linkmode" = prog; then
      dlfiles="$newdlfiles"
    fi
    if test "$linkmode" = prog || test "$linkmode" = lib; then
      dlprefiles="$newdlprefiles"
    fi

    case $linkmode in
    oldlib)
      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
	func_warning "\`-dlopen' is ignored for archives"
      fi

      case " $deplibs" in
      *\ -l* | *\ -L*)
	func_warning "\`-l' and \`-L' are ignored for archives" ;;
      esac

      test -n "$rpath" && \
	func_warning "\`-rpath' is ignored for archives"

      test -n "$xrpath" && \
	func_warning "\`-R' is ignored for archives"

      test -n "$vinfo" && \
	func_warning "\`-version-info/-version-number' is ignored for archives"

      test -n "$release" && \
	func_warning "\`-release' is ignored for archives"

      test -n "$export_symbols$export_symbols_regex" && \
	func_warning "\`-export-symbols' is ignored for archives"

      # Now set the variables for building old libraries.
      build_libtool_libs=no
      oldlibs="$output"
      objs="$objs$old_deplibs"
      ;;

    lib)
      # Make sure we only generate libraries of the form `libNAME.la'.
      case $outputname in
      lib*)
	func_stripname 'lib' '.la' "$outputname"
	name=$func_stripname_result
	eval shared_ext=\"$shrext_cmds\"
	eval libname=\"$libname_spec\"
	;;
      *)
	test "$module" = no && \
	  func_fatal_help "libtool library \`$output' must begin with \`lib'"

	if test "$need_lib_prefix" != no; then
	  # Add the "lib" prefix for modules if required
	  func_stripname '' '.la' "$outputname"
	  name=$func_stripname_result
	  eval shared_ext=\"$shrext_cmds\"
	  eval libname=\"$libname_spec\"
	else
	  func_stripname '' '.la' "$outputname"
	  libname=$func_stripname_result
	fi
	;;
      esac

      if test -n "$objs"; then
	if test "$deplibs_check_method" != pass_all; then
	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
	else
	  $ECHO
	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
	  $ECHO "*** objects $objs is not portable!"
	  libobjs="$libobjs $objs"
	fi
      fi

      test "$dlself" != no && \
	func_warning "\`-dlopen self' is ignored for libtool libraries"

      set dummy $rpath
      shift
      test "$#" -gt 1 && \
	func_warning "ignoring multiple \`-rpath's for a libtool library"

      install_libdir="$1"

      oldlibs=
      if test -z "$rpath"; then
	if test "$build_libtool_libs" = yes; then
	  # Building a libtool convenience library.
	  # Some compilers have problems with a `.al' extension so
	  # convenience libraries should have the same extension an
	  # archive normally would.
	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
	  build_libtool_libs=convenience
	  build_old_libs=yes
	fi

	test -n "$vinfo" && \
	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"

	test -n "$release" && \
	  func_warning "\`-release' is ignored for convenience libraries"
      else

	# Parse the version information argument.
	save_ifs="$IFS"; IFS=':'
	set dummy $vinfo 0 0 0
	shift
	IFS="$save_ifs"

	test -n "$7" && \
	  func_fatal_help "too many parameters to \`-version-info'"

	# convert absolute version numbers to libtool ages
	# this retains compatibility with .la files and attempts
	# to make the code below a bit more comprehensible

	case $vinfo_number in
	yes)
	  number_major="$1"
	  number_minor="$2"
	  number_revision="$3"
	  #
	  # There are really only two kinds -- those that
	  # use the current revision as the major version
	  # and those that subtract age and use age as
	  # a minor version.  But, then there is irix
	  # which has an extra 1 added just for fun
	  #
	  case $version_type in
	  darwin|linux|osf|windows|none)
	    func_arith $number_major + $number_minor
	    current=$func_arith_result
	    age="$number_minor"
	    revision="$number_revision"
	    ;;
	  freebsd-aout|freebsd-elf|sunos)
	    current="$number_major"
	    revision="$number_minor"
	    age="0"
	    ;;
	  irix|nonstopux)
	    func_arith $number_major + $number_minor
	    current=$func_arith_result
	    age="$number_minor"
	    revision="$number_minor"
	    lt_irix_increment=no
	    ;;
	  *)
	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
	    ;;
	  esac
	  ;;
	no)
	  current="$1"
	  revision="$2"
	  age="$3"
	  ;;
	esac

	# Check that each of the things are valid numbers.
	case $current in
	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
	*)
	  func_error "CURRENT \`$current' must be a nonnegative integer"
	  func_fatal_error "\`$vinfo' is not valid version information"
	  ;;
	esac

	case $revision in
	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
	*)
	  func_error "REVISION \`$revision' must be a nonnegative integer"
	  func_fatal_error "\`$vinfo' is not valid version information"
	  ;;
	esac

	case $age in
	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
	*)
	  func_error "AGE \`$age' must be a nonnegative integer"
	  func_fatal_error "\`$vinfo' is not valid version information"
	  ;;
	esac

	if test "$age" -gt "$current"; then
	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
	  func_fatal_error "\`$vinfo' is not valid version information"
	fi

	# Calculate the version variables.
	major=
	versuffix=
	verstring=
	case $version_type in
	none) ;;

	darwin)
	  # Like Linux, but with the current version available in
	  # verstring for coding it into the library header
	  func_arith $current - $age
	  major=.$func_arith_result
	  versuffix="$major.$age.$revision"
	  # Darwin ld doesn't like 0 for these options...
	  func_arith $current + 1
	  minor_current=$func_arith_result
	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
	  ;;

	freebsd-aout)
	  major=".$current"
	  versuffix=".$current.$revision";
	  ;;

	freebsd-elf)
	  major=".$current"
	  versuffix=".$current"
	  ;;

	irix | nonstopux)
	  if test "X$lt_irix_increment" = "Xno"; then
	    func_arith $current - $age
	  else
	    func_arith $current - $age + 1
	  fi
	  major=$func_arith_result

	  case $version_type in
	    nonstopux) verstring_prefix=nonstopux ;;
	    *)         verstring_prefix=sgi ;;
	  esac
	  verstring="$verstring_prefix$major.$revision"

	  # Add in all the interfaces that we are compatible with.
	  loop=$revision
	  while test "$loop" -ne 0; do
	    func_arith $revision - $loop
	    iface=$func_arith_result
	    func_arith $loop - 1
	    loop=$func_arith_result
	    verstring="$verstring_prefix$major.$iface:$verstring"
	  done

	  # Before this point, $major must not contain `.'.
	  major=.$major
	  versuffix="$major.$revision"
	  ;;

	linux)
	  func_arith $current - $age
	  major=.$func_arith_result
	  versuffix="$major.$age.$revision"
	  ;;

	osf)
	  func_arith $current - $age
	  major=.$func_arith_result
	  versuffix=".$current.$age.$revision"
	  verstring="$current.$age.$revision"

	  # Add in all the interfaces that we are compatible with.
	  loop=$age
	  while test "$loop" -ne 0; do
	    func_arith $current - $loop
	    iface=$func_arith_result
	    func_arith $loop - 1
	    loop=$func_arith_result
	    verstring="$verstring:${iface}.0"
	  done

	  # Make executables depend on our current version.
	  verstring="$verstring:${current}.0"
	  ;;

	qnx)
	  major=".$current"
	  versuffix=".$current"
	  ;;

	sunos)
	  major=".$current"
	  versuffix=".$current.$revision"
	  ;;

	windows)
	  # Use '-' rather than '.', since we only want one
	  # extension on DOS 8.3 filesystems.
	  func_arith $current - $age
	  major=$func_arith_result
	  versuffix="-$major"
	  ;;

	*)
	  func_fatal_configuration "unknown library version type \`$version_type'"
	  ;;
	esac

	# Clear the version info if we defaulted, and they specified a release.
	if test -z "$vinfo" && test -n "$release"; then
	  major=
	  case $version_type in
	  darwin)
	    # we can't check for "0.0" in archive_cmds due to quoting
	    # problems, so we reset it completely
	    verstring=
	    ;;
	  *)
	    verstring="0.0"
	    ;;
	  esac
	  if test "$need_version" = no; then
	    versuffix=
	  else
	    versuffix=".0.0"
	  fi
	fi

	# Remove version info from name if versioning should be avoided
	if test "$avoid_version" = yes && test "$need_version" = no; then
	  major=
	  versuffix=
	  verstring=""
	fi

	# Check to see if the archive will have undefined symbols.
	if test "$allow_undefined" = yes; then
	  if test "$allow_undefined_flag" = unsupported; then
	    func_warning "undefined symbols not allowed in $host shared libraries"
	    build_libtool_libs=no
	    build_old_libs=yes
	  fi
	else
	  # Don't allow undefined symbols.
	  allow_undefined_flag="$no_undefined_flag"
	fi

      fi

      func_generate_dlsyms "$libname" "$libname" "yes"
      libobjs="$libobjs $symfileobj"
      test "X$libobjs" = "X " && libobjs=

      if test "$mode" != relink; then
	# Remove our outputs, but don't remove object files since they
	# may have been created when compiling PIC objects.
	removelist=
	tempremovelist=`$ECHO "$output_objdir/*"`
	for p in $tempremovelist; do
	  case $p in
	    *.$objext | *.gcno)
	       ;;
	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
	       if test "X$precious_files_regex" != "X"; then
		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
		 then
		   continue
		 fi
	       fi
	       removelist="$removelist $p"
	       ;;
	    *) ;;
	  esac
	done
	test -n "$removelist" && \
	  func_show_eval "${RM}r \$removelist"
      fi

      # Now set the variables for building old libraries.
      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
	oldlibs="$oldlibs $output_objdir/$libname.$libext"

	# Transform .lo files to .o files.
	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
      fi

      # Eliminate all temporary directories.
      #for path in $notinst_path; do
      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
      #done

      if test -n "$xrpath"; then
	# If the user specified any rpath flags, then add them.
	temp_xrpath=
	for libdir in $xrpath; do
	  temp_xrpath="$temp_xrpath -R$libdir"
	  case "$finalize_rpath " in
	  *" $libdir "*) ;;
	  *) finalize_rpath="$finalize_rpath $libdir" ;;
	  esac
	done
	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
	  dependency_libs="$temp_xrpath $dependency_libs"
	fi
      fi

      # Make sure dlfiles contains only unique files that won't be dlpreopened
      old_dlfiles="$dlfiles"
      dlfiles=
      for lib in $old_dlfiles; do
	case " $dlprefiles $dlfiles " in
	*" $lib "*) ;;
	*) dlfiles="$dlfiles $lib" ;;
	esac
      done

      # Make sure dlprefiles contains only unique files
      old_dlprefiles="$dlprefiles"
      dlprefiles=
      for lib in $old_dlprefiles; do
	case "$dlprefiles " in
	*" $lib "*) ;;
	*) dlprefiles="$dlprefiles $lib" ;;
	esac
      done

      if test "$build_libtool_libs" = yes; then
	if test -n "$rpath"; then
	  case $host in
	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
	    # these systems don't actually have a c library (as such)!
	    ;;
	  *-*-rhapsody* | *-*-darwin1.[012])
	    # Rhapsody C library is in the System framework
	    deplibs="$deplibs System.ltframework"
	    ;;
	  *-*-netbsd*)
	    # Don't link with libc until the a.out ld.so is fixed.
	    ;;
	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
	    # Do not include libc due to us having libc/libc_r.
	    ;;
	  *-*-sco3.2v5* | *-*-sco5v6*)
	    # Causes problems with __ctype
	    ;;
	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
	    # Compiler inserts libc in the correct place for threads to work
	    ;;
	  *)
	    # Add libc to deplibs on all other systems if necessary.
	    if test "$build_libtool_need_lc" = "yes"; then
	      deplibs="$deplibs -lc"
	    fi
	    ;;
	  esac
	fi

	# Transform deplibs into only deplibs that can be linked in shared.
	name_save=$name
	libname_save=$libname
	release_save=$release
	versuffix_save=$versuffix
	major_save=$major
	# I'm not sure if I'm treating the release correctly.  I think
	# release should show up in the -l (ie -lgmp5) so we don't want to
	# add it in twice.  Is that correct?
	release=""
	versuffix=""
	major=""
	newdeplibs=
	droppeddeps=no
	case $deplibs_check_method in
	pass_all)
	  # Don't check for shared/static.  Everything works.
	  # This might be a little naive.  We might want to check
	  # whether the library exists or not.  But this is on
	  # osf3 & osf4 and I'm not really sure... Just
	  # implementing what was already the behavior.
	  newdeplibs=$deplibs
	  ;;
	test_compile)
	  # This code stresses the "libraries are programs" paradigm to its
	  # limits. Maybe even breaks it.  We compile a program, linking it
	  # against the deplibs as a proxy for the library.  Then we can check
	  # whether they linked in statically or dynamically with ldd.
	  $opt_dry_run || $RM conftest.c
	  cat > conftest.c <<EOF
	  int main() { return 0; }
EOF
	  $opt_dry_run || $RM conftest
	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
	    ldd_output=`ldd conftest`
	    for i in $deplibs; do
	      case $i in
	      -l*)
		func_stripname -l '' "$i"
		name=$func_stripname_result
		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		  case " $predeps $postdeps " in
		  *" $i "*)
		    newdeplibs="$newdeplibs $i"
		    i=""
		    ;;
		  esac
		fi
		if test -n "$i" ; then
		  libname=`eval "\\$ECHO \"$libname_spec\""`
		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
		  set dummy $deplib_matches; shift
		  deplib_match=$1
		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
		    newdeplibs="$newdeplibs $i"
		  else
		    droppeddeps=yes
		    $ECHO
		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
		    $ECHO "*** I have the capability to make that library automatically link in when"
		    $ECHO "*** you link to this library.  But I can only do this if you have a"
		    $ECHO "*** shared version of the library, which I believe you do not have"
		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
		  fi
		fi
		;;
	      *)
		newdeplibs="$newdeplibs $i"
		;;
	      esac
	    done
	  else
	    # Error occurred in the first compile.  Let's try to salvage
	    # the situation: Compile a separate program for each library.
	    for i in $deplibs; do
	      case $i in
	      -l*)
		func_stripname -l '' "$i"
		name=$func_stripname_result
		$opt_dry_run || $RM conftest
		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
		  ldd_output=`ldd conftest`
		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		    case " $predeps $postdeps " in
		    *" $i "*)
		      newdeplibs="$newdeplibs $i"
		      i=""
		      ;;
		    esac
		  fi
		  if test -n "$i" ; then
		    libname=`eval "\\$ECHO \"$libname_spec\""`
		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
		    set dummy $deplib_matches; shift
		    deplib_match=$1
		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
		      newdeplibs="$newdeplibs $i"
		    else
		      droppeddeps=yes
		      $ECHO
		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
		      $ECHO "*** I have the capability to make that library automatically link in when"
		      $ECHO "*** you link to this library.  But I can only do this if you have a"
		      $ECHO "*** shared version of the library, which you do not appear to have"
		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
		    fi
		  fi
		else
		  droppeddeps=yes
		  $ECHO
		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
		  $ECHO "*** make it link in!  You will probably need to install it or some"
		  $ECHO "*** library that it depends on before this library will be fully"
		  $ECHO "*** functional.  Installing it before continuing would be even better."
		fi
		;;
	      *)
		newdeplibs="$newdeplibs $i"
		;;
	      esac
	    done
	  fi
	  ;;
	file_magic*)
	  set dummy $deplibs_check_method; shift
	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
	  for a_deplib in $deplibs; do
	    case $a_deplib in
	    -l*)
	      func_stripname -l '' "$a_deplib"
	      name=$func_stripname_result
	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		case " $predeps $postdeps " in
		*" $a_deplib "*)
		  newdeplibs="$newdeplibs $a_deplib"
		  a_deplib=""
		  ;;
		esac
	      fi
	      if test -n "$a_deplib" ; then
		libname=`eval "\\$ECHO \"$libname_spec\""`
		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
		  for potent_lib in $potential_libs; do
		      # Follow soft links.
		      if ls -lLd "$potent_lib" 2>/dev/null |
			 $GREP " -> " >/dev/null; then
			continue
		      fi
		      # The statement above tries to avoid entering an
		      # endless loop below, in case of cyclic links.
		      # We might still enter an endless loop, since a link
		      # loop can be closed while we follow links,
		      # but so what?
		      potlib="$potent_lib"
		      while test -h "$potlib" 2>/dev/null; do
			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
			case $potliblink in
			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
			esac
		      done
		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
			 $SED -e 10q |
			 $EGREP "$file_magic_regex" > /dev/null; then
			newdeplibs="$newdeplibs $a_deplib"
			a_deplib=""
			break 2
		      fi
		  done
		done
	      fi
	      if test -n "$a_deplib" ; then
		droppeddeps=yes
		$ECHO
		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
		$ECHO "*** I have the capability to make that library automatically link in when"
		$ECHO "*** you link to this library.  But I can only do this if you have a"
		$ECHO "*** shared version of the library, which you do not appear to have"
		$ECHO "*** because I did check the linker path looking for a file starting"
		if test -z "$potlib" ; then
		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
		else
		  $ECHO "*** with $libname and none of the candidates passed a file format test"
		  $ECHO "*** using a file magic. Last file checked: $potlib"
		fi
	      fi
	      ;;
	    *)
	      # Add a -L argument.
	      newdeplibs="$newdeplibs $a_deplib"
	      ;;
	    esac
	  done # Gone through all deplibs.
	  ;;
	match_pattern*)
	  set dummy $deplibs_check_method; shift
	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
	  for a_deplib in $deplibs; do
	    case $a_deplib in
	    -l*)
	      func_stripname -l '' "$a_deplib"
	      name=$func_stripname_result
	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
		case " $predeps $postdeps " in
		*" $a_deplib "*)
		  newdeplibs="$newdeplibs $a_deplib"
		  a_deplib=""
		  ;;
		esac
	      fi
	      if test -n "$a_deplib" ; then
		libname=`eval "\\$ECHO \"$libname_spec\""`
		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
		  for potent_lib in $potential_libs; do
		    potlib="$potent_lib" # see symlink-check above in file_magic test
		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
		       $EGREP "$match_pattern_regex" > /dev/null; then
		      newdeplibs="$newdeplibs $a_deplib"
		      a_deplib=""
		      break 2
		    fi
		  done
		done
	      fi
	      if test -n "$a_deplib" ; then
		droppeddeps=yes
		$ECHO
		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
		$ECHO "*** I have the capability to make that library automatically link in when"
		$ECHO "*** you link to this library.  But I can only do this if you have a"
		$ECHO "*** shared version of the library, which you do not appear to have"
		$ECHO "*** because I did check the linker path looking for a file starting"
		if test -z "$potlib" ; then
		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
		else
		  $ECHO "*** with $libname and none of the candidates passed a file format test"
		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
		fi
	      fi
	      ;;
	    *)
	      # Add a -L argument.
	      newdeplibs="$newdeplibs $a_deplib"
	      ;;
	    esac
	  done # Gone through all deplibs.
	  ;;
	none | unknown | *)
	  newdeplibs=""
	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
	    for i in $predeps $postdeps ; do
	      # can't use Xsed below, because $i might contain '/'
	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
	    done
	  fi
	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
	     $GREP . >/dev/null; then
	    $ECHO
	    if test "X$deplibs_check_method" = "Xnone"; then
	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
	    else
	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
	    fi
	    $ECHO "*** All declared inter-library dependencies are being dropped."
	    droppeddeps=yes
	  fi
	  ;;
	esac
	versuffix=$versuffix_save
	major=$major_save
	release=$release_save
	libname=$libname_save
	name=$name_save

	case $host in
	*-*-rhapsody* | *-*-darwin1.[012])
	  # On Rhapsody replace the C library with the System framework
	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
	  ;;
	esac

	if test "$droppeddeps" = yes; then
	  if test "$module" = yes; then
	    $ECHO
	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
	    $ECHO "*** a static module, that should work as long as the dlopening"
	    $ECHO "*** application is linked with the -dlopen flag."
	    if test -z "$global_symbol_pipe"; then
	      $ECHO
	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
	      $ECHO "*** not find such a program.  So, this module is probably useless."
	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
	    fi
	    if test "$build_old_libs" = no; then
	      oldlibs="$output_objdir/$libname.$libext"
	      build_libtool_libs=module
	      build_old_libs=yes
	    else
	      build_libtool_libs=no
	    fi
	  else
	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
	    $ECHO "*** automatically added whenever a program is linked with this library"
	    $ECHO "*** or is declared to -dlopen it."

	    if test "$allow_undefined" = no; then
	      $ECHO
	      $ECHO "*** Since this library must not contain undefined symbols,"
	      $ECHO "*** because either the platform does not support them or"
	      $ECHO "*** it was explicitly requested with -no-undefined,"
	      $ECHO "*** libtool will only create a static version of it."
	      if test "$build_old_libs" = no; then
		oldlibs="$output_objdir/$libname.$libext"
		build_libtool_libs=module
		build_old_libs=yes
	      else
		build_libtool_libs=no
	      fi
	    fi
	  fi
	fi
	# Done checking deplibs!
	deplibs=$newdeplibs
      fi
      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
      case $host in
	*-*-darwin*)
	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	  ;;
      esac

      # move library search paths that coincide with paths to not yet
      # installed libraries to the beginning of the library search list
      new_libs=
      for path in $notinst_path; do
	case " $new_libs " in
	*" -L$path/$objdir "*) ;;
	*)
	  case " $deplibs " in
	  *" -L$path/$objdir "*)
	    new_libs="$new_libs -L$path/$objdir" ;;
	  esac
	  ;;
	esac
      done
      for deplib in $deplibs; do
	case $deplib in
	-L*)
	  case " $new_libs " in
	  *" $deplib "*) ;;
	  *) new_libs="$new_libs $deplib" ;;
	  esac
	  ;;
	*) new_libs="$new_libs $deplib" ;;
	esac
      done
      deplibs="$new_libs"

      # All the library-specific variables (install_libdir is set above).
      library_names=
      old_library=
      dlname=

      # Test again, we may have decided not to build it any more
      if test "$build_libtool_libs" = yes; then
	if test "$hardcode_into_libs" = yes; then
	  # Hardcode the library paths
	  hardcode_libdirs=
	  dep_rpath=
	  rpath="$finalize_rpath"
	  test "$mode" != relink && rpath="$compile_rpath$rpath"
	  for libdir in $rpath; do
	    if test -n "$hardcode_libdir_flag_spec"; then
	      if test -n "$hardcode_libdir_separator"; then
		if test -z "$hardcode_libdirs"; then
		  hardcode_libdirs="$libdir"
		else
		  # Just accumulate the unique libdirs.
		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
		    ;;
		  *)
		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
		    ;;
		  esac
		fi
	      else
		eval flag=\"$hardcode_libdir_flag_spec\"
		dep_rpath="$dep_rpath $flag"
	      fi
	    elif test -n "$runpath_var"; then
	      case "$perm_rpath " in
	      *" $libdir "*) ;;
	      *) perm_rpath="$perm_rpath $libdir" ;;
	      esac
	    fi
	  done
	  # Substitute the hardcoded libdirs into the rpath.
	  if test -n "$hardcode_libdir_separator" &&
	     test -n "$hardcode_libdirs"; then
	    libdir="$hardcode_libdirs"
	    if test -n "$hardcode_libdir_flag_spec_ld"; then
	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
	    else
	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
	    fi
	  fi
	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
	    # We should set the runpath_var.
	    rpath=
	    for dir in $perm_rpath; do
	      rpath="$rpath$dir:"
	    done
	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
	  fi
	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
	fi

	shlibpath="$finalize_shlibpath"
	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
	if test -n "$shlibpath"; then
	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
	fi

	# Get the real and link names of the library.
	eval shared_ext=\"$shrext_cmds\"
	eval library_names=\"$library_names_spec\"
	set dummy $library_names
	shift
	realname="$1"
	shift

	if test -n "$soname_spec"; then
	  eval soname=\"$soname_spec\"
	else
	  soname="$realname"
	fi
	if test -z "$dlname"; then
	  dlname=$soname
	fi

	lib="$output_objdir/$realname"
	linknames=
	for link
	do
	  linknames="$linknames $link"
	done

	# Use standard objects if they are pic
	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
	test "X$libobjs" = "X " && libobjs=

	delfiles=
	if test -n "$export_symbols" && test -n "$include_expsyms"; then
	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
	  export_symbols="$output_objdir/$libname.uexp"
	  delfiles="$delfiles $export_symbols"
	fi

	orig_export_symbols=
	case $host_os in
	cygwin* | mingw* | cegcc*)
	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
	    # exporting using user supplied symfile
	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
	      # and it's NOT already a .def file. Must figure out
	      # which of the given symbols are data symbols and tag
	      # them as such. So, trigger use of export_symbols_cmds.
	      # export_symbols gets reassigned inside the "prepare
	      # the list of exported symbols" if statement, so the
	      # include_expsyms logic still works.
	      orig_export_symbols="$export_symbols"
	      export_symbols=
	      always_export_symbols=yes
	    fi
	  fi
	  ;;
	esac

	# Prepare the list of exported symbols
	if test -z "$export_symbols"; then
	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
	    func_verbose "generating symbol list for \`$libname.la'"
	    export_symbols="$output_objdir/$libname.exp"
	    $opt_dry_run || $RM $export_symbols
	    cmds=$export_symbols_cmds
	    save_ifs="$IFS"; IFS='~'
	    for cmd in $cmds; do
	      IFS="$save_ifs"
	      eval cmd=\"$cmd\"
	      func_len " $cmd"
	      len=$func_len_result
	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
		func_show_eval "$cmd" 'exit $?'
		skipped_export=false
	      else
		# The command line is too long to execute in one step.
		func_verbose "using reloadable object file for export list..."
		skipped_export=:
		# Break out early, otherwise skipped_export may be
		# set to false by a later but shorter cmd.
		break
	      fi
	    done
	    IFS="$save_ifs"
	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
	    fi
	  fi
	fi

	if test -n "$export_symbols" && test -n "$include_expsyms"; then
	  tmp_export_symbols="$export_symbols"
	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
	fi

	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
	  # The given exports_symbols file has to be filtered, so filter it.
	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
	  # 's' commands which not all seds can handle. GNU sed should be fine
	  # though. Also, the filter scales superlinearly with the number of
	  # global variables. join(1) would be nice here, but unfortunately
	  # isn't a blessed tool.
	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
	  export_symbols=$output_objdir/$libname.def
	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
	fi

	tmp_deplibs=
	for test_deplib in $deplibs; do
	  case " $convenience " in
	  *" $test_deplib "*) ;;
	  *)
	    tmp_deplibs="$tmp_deplibs $test_deplib"
	    ;;
	  esac
	done
	deplibs="$tmp_deplibs"

	if test -n "$convenience"; then
	  if test -n "$whole_archive_flag_spec" &&
	    test "$compiler_needs_object" = yes &&
	    test -z "$libobjs"; then
	    # extract the archives, so we have objects to list.
	    # TODO: could optimize this to just extract one archive.
	    whole_archive_flag_spec=
	  fi
	  if test -n "$whole_archive_flag_spec"; then
	    save_libobjs=$libobjs
	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
	    test "X$libobjs" = "X " && libobjs=
	  else
	    gentop="$output_objdir/${outputname}x"
	    generated="$generated $gentop"

	    func_extract_archives $gentop $convenience
	    libobjs="$libobjs $func_extract_archives_result"
	    test "X$libobjs" = "X " && libobjs=
	  fi
	fi

	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
	  eval flag=\"$thread_safe_flag_spec\"
	  linker_flags="$linker_flags $flag"
	fi

	# Make a backup of the uninstalled library when relinking
	if test "$mode" = relink; then
	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
	fi

	# Do each of the archive commands.
	if test "$module" = yes && test -n "$module_cmds" ; then
	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
	    eval test_cmds=\"$module_expsym_cmds\"
	    cmds=$module_expsym_cmds
	  else
	    eval test_cmds=\"$module_cmds\"
	    cmds=$module_cmds
	  fi
	else
	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
	    eval test_cmds=\"$archive_expsym_cmds\"
	    cmds=$archive_expsym_cmds
	  else
	    eval test_cmds=\"$archive_cmds\"
	    cmds=$archive_cmds
	  fi
	fi

	if test "X$skipped_export" != "X:" &&
	   func_len " $test_cmds" &&
	   len=$func_len_result &&
	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
	  :
	else
	  # The command line is too long to link in one step, link piecewise
	  # or, if using GNU ld and skipped_export is not :, use a linker
	  # script.

	  # Save the value of $output and $libobjs because we want to
	  # use them later.  If we have whole_archive_flag_spec, we
	  # want to use save_libobjs as it was before
	  # whole_archive_flag_spec was expanded, because we can't
	  # assume the linker understands whole_archive_flag_spec.
	  # This may have to be revisited, in case too many
	  # convenience libraries get linked in and end up exceeding
	  # the spec.
	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
	    save_libobjs=$libobjs
	  fi
	  save_output=$output
	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`

	  # Clear the reloadable object creation command queue and
	  # initialize k to one.
	  test_cmds=
	  concat_cmds=
	  objlist=
	  last_robj=
	  k=1

	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
	    output=${output_objdir}/${output_la}.lnkscript
	    func_verbose "creating GNU ld script: $output"
	    $ECHO 'INPUT (' > $output
	    for obj in $save_libobjs
	    do
	      $ECHO "$obj" >> $output
	    done
	    $ECHO ')' >> $output
	    delfiles="$delfiles $output"
	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
	    output=${output_objdir}/${output_la}.lnk
	    func_verbose "creating linker input file list: $output"
	    : > $output
	    set x $save_libobjs
	    shift
	    firstobj=
	    if test "$compiler_needs_object" = yes; then
	      firstobj="$1 "
	      shift
	    fi
	    for obj
	    do
	      $ECHO "$obj" >> $output
	    done
	    delfiles="$delfiles $output"
	    output=$firstobj\"$file_list_spec$output\"
	  else
	    if test -n "$save_libobjs"; then
	      func_verbose "creating reloadable object files..."
	      output=$output_objdir/$output_la-${k}.$objext
	      eval test_cmds=\"$reload_cmds\"
	      func_len " $test_cmds"
	      len0=$func_len_result
	      len=$len0

	      # Loop over the list of objects to be linked.
	      for obj in $save_libobjs
	      do
		func_len " $obj"
		func_arith $len + $func_len_result
		len=$func_arith_result
		if test "X$objlist" = X ||
		   test "$len" -lt "$max_cmd_len"; then
		  func_append objlist " $obj"
		else
		  # The command $test_cmds is almost too long, add a
		  # command to the queue.
		  if test "$k" -eq 1 ; then
		    # The first file doesn't have a previous command to add.
		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
		  else
		    # All subsequent reloadable object files will link in
		    # the last one created.
		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
		  fi
		  last_robj=$output_objdir/$output_la-${k}.$objext
		  func_arith $k + 1
		  k=$func_arith_result
		  output=$output_objdir/$output_la-${k}.$objext
		  objlist=$obj
		  func_len " $last_robj"
		  func_arith $len0 + $func_len_result
		  len=$func_arith_result
		fi
	      done
	      # Handle the remaining objects by creating one last
	      # reloadable object file.  All subsequent reloadable object
	      # files will link in the last one created.
	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
	      if test -n "$last_robj"; then
	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
	      fi
	      delfiles="$delfiles $output"

	    else
	      output=
	    fi

	    if ${skipped_export-false}; then
	      func_verbose "generating symbol list for \`$libname.la'"
	      export_symbols="$output_objdir/$libname.exp"
	      $opt_dry_run || $RM $export_symbols
	      libobjs=$output
	      # Append the command to create the export file.
	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
	      if test -n "$last_robj"; then
		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
	      fi
	    fi

	    test -n "$save_libobjs" &&
	      func_verbose "creating a temporary reloadable object file: $output"

	    # Loop through the commands generated above and execute them.
	    save_ifs="$IFS"; IFS='~'
	    for cmd in $concat_cmds; do
	      IFS="$save_ifs"
	      $opt_silent || {
		  func_quote_for_expand "$cmd"
		  eval "func_echo $func_quote_for_expand_result"
	      }
	      $opt_dry_run || eval "$cmd" || {
		lt_exit=$?

		# Restore the uninstalled library and exit
		if test "$mode" = relink; then
		  ( cd "$output_objdir" && \
		    $RM "${realname}T" && \
		    $MV "${realname}U" "$realname" )
		fi

		exit $lt_exit
	      }
	    done
	    IFS="$save_ifs"

	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
	    fi
	  fi

          if ${skipped_export-false}; then
	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
	      tmp_export_symbols="$export_symbols"
	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
	    fi

	    if test -n "$orig_export_symbols"; then
	      # The given exports_symbols file has to be filtered, so filter it.
	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
	      # 's' commands which not all seds can handle. GNU sed should be fine
	      # though. Also, the filter scales superlinearly with the number of
	      # global variables. join(1) would be nice here, but unfortunately
	      # isn't a blessed tool.
	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
	      export_symbols=$output_objdir/$libname.def
	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
	    fi
	  fi

	  libobjs=$output
	  # Restore the value of output.
	  output=$save_output

	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
	    test "X$libobjs" = "X " && libobjs=
	  fi
	  # Expand the library linking commands again to reset the
	  # value of $libobjs for piecewise linking.

	  # Do each of the archive commands.
	  if test "$module" = yes && test -n "$module_cmds" ; then
	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
	      cmds=$module_expsym_cmds
	    else
	      cmds=$module_cmds
	    fi
	  else
	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
	      cmds=$archive_expsym_cmds
	    else
	      cmds=$archive_cmds
	    fi
	  fi
	fi

	if test -n "$delfiles"; then
	  # Append the command to remove temporary files to $cmds.
	  eval cmds=\"\$cmds~\$RM $delfiles\"
	fi

	# Add any objects from preloaded convenience libraries
	if test -n "$dlprefiles"; then
	  gentop="$output_objdir/${outputname}x"
	  generated="$generated $gentop"

	  func_extract_archives $gentop $dlprefiles
	  libobjs="$libobjs $func_extract_archives_result"
	  test "X$libobjs" = "X " && libobjs=
	fi

	save_ifs="$IFS"; IFS='~'
	for cmd in $cmds; do
	  IFS="$save_ifs"
	  eval cmd=\"$cmd\"
	  $opt_silent || {
	    func_quote_for_expand "$cmd"
	    eval "func_echo $func_quote_for_expand_result"
	  }
	  $opt_dry_run || eval "$cmd" || {
	    lt_exit=$?

	    # Restore the uninstalled library and exit
	    if test "$mode" = relink; then
	      ( cd "$output_objdir" && \
	        $RM "${realname}T" && \
		$MV "${realname}U" "$realname" )
	    fi

	    exit $lt_exit
	  }
	done
	IFS="$save_ifs"

	# Restore the uninstalled library and exit
	if test "$mode" = relink; then
	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?

	  if test -n "$convenience"; then
	    if test -z "$whole_archive_flag_spec"; then
	      func_show_eval '${RM}r "$gentop"'
	    fi
	  fi

	  exit $EXIT_SUCCESS
	fi

	# Create links to the real library.
	for linkname in $linknames; do
	  if test "$realname" != "$linkname"; then
	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
	  fi
	done

	# If -module or -export-dynamic was specified, set the dlname.
	if test "$module" = yes || test "$export_dynamic" = yes; then
	  # On all known operating systems, these are identical.
	  dlname="$soname"
	fi
      fi
      ;;

    obj)
      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
	func_warning "\`-dlopen' is ignored for objects"
      fi

      case " $deplibs" in
      *\ -l* | *\ -L*)
	func_warning "\`-l' and \`-L' are ignored for objects" ;;
      esac

      test -n "$rpath" && \
	func_warning "\`-rpath' is ignored for objects"

      test -n "$xrpath" && \
	func_warning "\`-R' is ignored for objects"

      test -n "$vinfo" && \
	func_warning "\`-version-info' is ignored for objects"

      test -n "$release" && \
	func_warning "\`-release' is ignored for objects"

      case $output in
      *.lo)
	test -n "$objs$old_deplibs" && \
	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"

	libobj=$output
	func_lo2o "$libobj"
	obj=$func_lo2o_result
	;;
      *)
	libobj=
	obj="$output"
	;;
      esac

      # Delete the old objects.
      $opt_dry_run || $RM $obj $libobj

      # Objects from convenience libraries.  This assumes
      # single-version convenience libraries.  Whenever we create
      # different ones for PIC/non-PIC, this we'll have to duplicate
      # the extraction.
      reload_conv_objs=
      gentop=
      # reload_cmds runs $LD directly, so let us get rid of
      # -Wl from whole_archive_flag_spec and hope we can get by with
      # turning comma into space..
      wl=

      if test -n "$convenience"; then
	if test -n "$whole_archive_flag_spec"; then
	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
	else
	  gentop="$output_objdir/${obj}x"
	  generated="$generated $gentop"

	  func_extract_archives $gentop $convenience
	  reload_conv_objs="$reload_objs $func_extract_archives_result"
	fi
      fi

      # Create the old-style object.
      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test

      output="$obj"
      func_execute_cmds "$reload_cmds" 'exit $?'

      # Exit if we aren't doing a library object file.
      if test -z "$libobj"; then
	if test -n "$gentop"; then
	  func_show_eval '${RM}r "$gentop"'
	fi

	exit $EXIT_SUCCESS
      fi

      if test "$build_libtool_libs" != yes; then
	if test -n "$gentop"; then
	  func_show_eval '${RM}r "$gentop"'
	fi

	# Create an invalid libtool object if no PIC, so that we don't
	# accidentally link it into a program.
	# $show "echo timestamp > $libobj"
	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
	exit $EXIT_SUCCESS
      fi

      if test -n "$pic_flag" || test "$pic_mode" != default; then
	# Only do commands if we really have different PIC objects.
	reload_objs="$libobjs $reload_conv_objs"
	output="$libobj"
	func_execute_cmds "$reload_cmds" 'exit $?'
      fi

      if test -n "$gentop"; then
	func_show_eval '${RM}r "$gentop"'
      fi

      exit $EXIT_SUCCESS
      ;;

    prog)
      case $host in
	*cygwin*) func_stripname '' '.exe' "$output"
	          output=$func_stripname_result.exe;;
      esac
      test -n "$vinfo" && \
	func_warning "\`-version-info' is ignored for programs"

      test -n "$release" && \
	func_warning "\`-release' is ignored for programs"

      test "$preload" = yes \
        && test "$dlopen_support" = unknown \
	&& test "$dlopen_self" = unknown \
	&& test "$dlopen_self_static" = unknown && \
	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."

      case $host in
      *-*-rhapsody* | *-*-darwin1.[012])
	# On Rhapsody replace the C library is the System framework
	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
	;;
      esac

      case $host in
      *-*-darwin*)
	# Don't allow lazy linking, it breaks C++ global constructors
	# But is supposedly fixed on 10.4 or later (yay!).
	if test "$tagname" = CXX ; then
	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
	    10.[0123])
	      compile_command="$compile_command ${wl}-bind_at_load"
	      finalize_command="$finalize_command ${wl}-bind_at_load"
	    ;;
	  esac
	fi
	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
	;;
      esac


      # move library search paths that coincide with paths to not yet
      # installed libraries to the beginning of the library search list
      new_libs=
      for path in $notinst_path; do
	case " $new_libs " in
	*" -L$path/$objdir "*) ;;
	*)
	  case " $compile_deplibs " in
	  *" -L$path/$objdir "*)
	    new_libs="$new_libs -L$path/$objdir" ;;
	  esac
	  ;;
	esac
      done
      for deplib in $compile_deplibs; do
	case $deplib in
	-L*)
	  case " $new_libs " in
	  *" $deplib "*) ;;
	  *) new_libs="$new_libs $deplib" ;;
	  esac
	  ;;
	*) new_libs="$new_libs $deplib" ;;
	esac
      done
      compile_deplibs="$new_libs"


      compile_command="$compile_command $compile_deplibs"
      finalize_command="$finalize_command $finalize_deplibs"

      if test -n "$rpath$xrpath"; then
	# If the user specified any rpath flags, then add them.
	for libdir in $rpath $xrpath; do
	  # This is the magic to use -rpath.
	  case "$finalize_rpath " in
	  *" $libdir "*) ;;
	  *) finalize_rpath="$finalize_rpath $libdir" ;;
	  esac
	done
      fi

      # Now hardcode the library paths
      rpath=
      hardcode_libdirs=
      for libdir in $compile_rpath $finalize_rpath; do
	if test -n "$hardcode_libdir_flag_spec"; then
	  if test -n "$hardcode_libdir_separator"; then
	    if test -z "$hardcode_libdirs"; then
	      hardcode_libdirs="$libdir"
	    else
	      # Just accumulate the unique libdirs.
	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
		;;
	      *)
		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
		;;
	      esac
	    fi
	  else
	    eval flag=\"$hardcode_libdir_flag_spec\"
	    rpath="$rpath $flag"
	  fi
	elif test -n "$runpath_var"; then
	  case "$perm_rpath " in
	  *" $libdir "*) ;;
	  *) perm_rpath="$perm_rpath $libdir" ;;
	  esac
	fi
	case $host in
	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
	  case :$dllsearchpath: in
	  *":$libdir:"*) ;;
	  ::) dllsearchpath=$libdir;;
	  *) dllsearchpath="$dllsearchpath:$libdir";;
	  esac
	  case :$dllsearchpath: in
	  *":$testbindir:"*) ;;
	  ::) dllsearchpath=$testbindir;;
	  *) dllsearchpath="$dllsearchpath:$testbindir";;
	  esac
	  ;;
	esac
      done
      # Substitute the hardcoded libdirs into the rpath.
      if test -n "$hardcode_libdir_separator" &&
	 test -n "$hardcode_libdirs"; then
	libdir="$hardcode_libdirs"
	eval rpath=\" $hardcode_libdir_flag_spec\"
      fi
      compile_rpath="$rpath"

      rpath=
      hardcode_libdirs=
      for libdir in $finalize_rpath; do
	if test -n "$hardcode_libdir_flag_spec"; then
	  if test -n "$hardcode_libdir_separator"; then
	    if test -z "$hardcode_libdirs"; then
	      hardcode_libdirs="$libdir"
	    else
	      # Just accumulate the unique libdirs.
	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
		;;
	      *)
		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
		;;
	      esac
	    fi
	  else
	    eval flag=\"$hardcode_libdir_flag_spec\"
	    rpath="$rpath $flag"
	  fi
	elif test -n "$runpath_var"; then
	  case "$finalize_perm_rpath " in
	  *" $libdir "*) ;;
	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
	  esac
	fi
      done
      # Substitute the hardcoded libdirs into the rpath.
      if test -n "$hardcode_libdir_separator" &&
	 test -n "$hardcode_libdirs"; then
	libdir="$hardcode_libdirs"
	eval rpath=\" $hardcode_libdir_flag_spec\"
      fi
      finalize_rpath="$rpath"

      if test -n "$libobjs" && test "$build_old_libs" = yes; then
	# Transform all the library objects into standard objects.
	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
      fi

      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"

      # template prelinking step
      if test -n "$prelink_cmds"; then
	func_execute_cmds "$prelink_cmds" 'exit $?'
      fi

      wrappers_required=yes
      case $host in
      *cygwin* | *mingw* )
        if test "$build_libtool_libs" != yes; then
          wrappers_required=no
        fi
        ;;
      *cegcc)
        # Disable wrappers for cegcc, we are cross compiling anyway.
        wrappers_required=no
        ;;
      *)
        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
          wrappers_required=no
        fi
        ;;
      esac
      if test "$wrappers_required" = no; then
	# Replace the output file specification.
	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
	link_command="$compile_command$compile_rpath"

	# We have no uninstalled library dependencies, so finalize right now.
	exit_status=0
	func_show_eval "$link_command" 'exit_status=$?'

	# Delete the generated files.
	if test -f "$output_objdir/${outputname}S.${objext}"; then
	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
	fi

	exit $exit_status
      fi

      if test -n "$compile_shlibpath$finalize_shlibpath"; then
	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
      fi
      if test -n "$finalize_shlibpath"; then
	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
      fi

      compile_var=
      finalize_var=
      if test -n "$runpath_var"; then
	if test -n "$perm_rpath"; then
	  # We should set the runpath_var.
	  rpath=
	  for dir in $perm_rpath; do
	    rpath="$rpath$dir:"
	  done
	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
	fi
	if test -n "$finalize_perm_rpath"; then
	  # We should set the runpath_var.
	  rpath=
	  for dir in $finalize_perm_rpath; do
	    rpath="$rpath$dir:"
	  done
	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
	fi
      fi

      if test "$no_install" = yes; then
	# We don't need to create a wrapper script.
	link_command="$compile_var$compile_command$compile_rpath"
	# Replace the output file specification.
	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
	# Delete the old output file.
	$opt_dry_run || $RM $output
	# Link the executable and exit
	func_show_eval "$link_command" 'exit $?'
	exit $EXIT_SUCCESS
      fi

      if test "$hardcode_action" = relink; then
	# Fast installation is not supported
	link_command="$compile_var$compile_command$compile_rpath"
	relink_command="$finalize_var$finalize_command$finalize_rpath"

	func_warning "this platform does not like uninstalled shared libraries"
	func_warning "\`$output' will be relinked during installation"
      else
	if test "$fast_install" != no; then
	  link_command="$finalize_var$compile_command$finalize_rpath"
	  if test "$fast_install" = yes; then
	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
	  else
	    # fast_install is set to needless
	    relink_command=
	  fi
	else
	  link_command="$compile_var$compile_command$compile_rpath"
	  relink_command="$finalize_var$finalize_command$finalize_rpath"
	fi
      fi

      # Replace the output file specification.
      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`

      # Delete the old output files.
      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname

      func_show_eval "$link_command" 'exit $?'

      # Now create the wrapper script.
      func_verbose "creating $output"

      # Quote the relink command for shipping.
      if test -n "$relink_command"; then
	# Preserve any variables that may affect compiler behavior
	for var in $variables_saved_for_relink; do
	  if eval test -z \"\${$var+set}\"; then
	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
	  elif eval var_value=\$$var; test -z "$var_value"; then
	    relink_command="$var=; export $var; $relink_command"
	  else
	    func_quote_for_eval "$var_value"
	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
	  fi
	done
	relink_command="(cd `pwd`; $relink_command)"
	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
      fi

      # Quote $ECHO for shipping.
      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
	case $progpath in
	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
	esac
	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
      else
	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
      fi

      # Only actually do things if not in dry run mode.
      $opt_dry_run || {
	# win32 will think the script is a binary if it has
	# a .exe suffix, so we strip it off here.
	case $output in
	  *.exe) func_stripname '' '.exe' "$output"
	         output=$func_stripname_result ;;
	esac
	# test for cygwin because mv fails w/o .exe extensions
	case $host in
	  *cygwin*)
	    exeext=.exe
	    func_stripname '' '.exe' "$outputname"
	    outputname=$func_stripname_result ;;
	  *) exeext= ;;
	esac
	case $host in
	  *cygwin* | *mingw* )
	    func_dirname_and_basename "$output" "" "."
	    output_name=$func_basename_result
	    output_path=$func_dirname_result
	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
	    cwrapper="$output_path/$output_name.exe"
	    $RM $cwrappersource $cwrapper
	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15

	    func_emit_cwrapperexe_src > $cwrappersource

	    # The wrapper executable is built using the $host compiler,
	    # because it contains $host paths and files. If cross-
	    # compiling, it, like the target executable, must be
	    # executed on the $host or under an emulation environment.
	    $opt_dry_run || {
	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
	      $STRIP $cwrapper
	    }

	    # Now, create the wrapper script for func_source use:
	    func_ltwrapper_scriptname $cwrapper
	    $RM $func_ltwrapper_scriptname_result
	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
	    $opt_dry_run || {
	      # note: this script will not be executed, so do not chmod.
	      if test "x$build" = "x$host" ; then
		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
	      else
		func_emit_wrapper no > $func_ltwrapper_scriptname_result
	      fi
	    }
	  ;;
	  * )
	    $RM $output
	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15

	    func_emit_wrapper no > $output
	    chmod +x $output
	  ;;
	esac
      }
      exit $EXIT_SUCCESS
      ;;
    esac

    # See if we need to build an old-fashioned archive.
    for oldlib in $oldlibs; do

      if test "$build_libtool_libs" = convenience; then
	oldobjs="$libobjs_save $symfileobj"
	addlibs="$convenience"
	build_libtool_libs=no
      else
	if test "$build_libtool_libs" = module; then
	  oldobjs="$libobjs_save"
	  build_libtool_libs=no
	else
	  oldobjs="$old_deplibs $non_pic_objects"
	  if test "$preload" = yes && test -f "$symfileobj"; then
	    oldobjs="$oldobjs $symfileobj"
	  fi
	fi
	addlibs="$old_convenience"
      fi

      if test -n "$addlibs"; then
	gentop="$output_objdir/${outputname}x"
	generated="$generated $gentop"

	func_extract_archives $gentop $addlibs
	oldobjs="$oldobjs $func_extract_archives_result"
      fi

      # Do each command in the archive commands.
      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
	cmds=$old_archive_from_new_cmds
      else

	# Add any objects from preloaded convenience libraries
	if test -n "$dlprefiles"; then
	  gentop="$output_objdir/${outputname}x"
	  generated="$generated $gentop"

	  func_extract_archives $gentop $dlprefiles
	  oldobjs="$oldobjs $func_extract_archives_result"
	fi

	# POSIX demands no paths to be encoded in archives.  We have
	# to avoid creating archives with duplicate basenames if we
	# might have to extract them afterwards, e.g., when creating a
	# static archive out of a convenience library, or when linking
	# the entirety of a libtool archive into another (currently
	# not supported by libtool).
	if (for obj in $oldobjs
	    do
	      func_basename "$obj"
	      $ECHO "$func_basename_result"
	    done | sort | sort -uc >/dev/null 2>&1); then
	  :
	else
	  $ECHO "copying selected object files to avoid basename conflicts..."
	  gentop="$output_objdir/${outputname}x"
	  generated="$generated $gentop"
	  func_mkdir_p "$gentop"
	  save_oldobjs=$oldobjs
	  oldobjs=
	  counter=1
	  for obj in $save_oldobjs
	  do
	    func_basename "$obj"
	    objbase="$func_basename_result"
	    case " $oldobjs " in
	    " ") oldobjs=$obj ;;
	    *[\ /]"$objbase "*)
	      while :; do
		# Make sure we don't pick an alternate name that also
		# overlaps.
		newobj=lt$counter-$objbase
		func_arith $counter + 1
		counter=$func_arith_result
		case " $oldobjs " in
		*[\ /]"$newobj "*) ;;
		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
		esac
	      done
	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
	      oldobjs="$oldobjs $gentop/$newobj"
	      ;;
	    *) oldobjs="$oldobjs $obj" ;;
	    esac
	  done
	fi
	eval cmds=\"$old_archive_cmds\"

	func_len " $cmds"
	len=$func_len_result
	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
	  cmds=$old_archive_cmds
	else
	  # the command line is too long to link in one step, link in parts
	  func_verbose "using piecewise archive linking..."
	  save_RANLIB=$RANLIB
	  RANLIB=:
	  objlist=
	  concat_cmds=
	  save_oldobjs=$oldobjs
	  oldobjs=
	  # Is there a better way of finding the last object in the list?
	  for obj in $save_oldobjs
	  do
	    last_oldobj=$obj
	  done
	  eval test_cmds=\"$old_archive_cmds\"
	  func_len " $test_cmds"
	  len0=$func_len_result
	  len=$len0
	  for obj in $save_oldobjs
	  do
	    func_len " $obj"
	    func_arith $len + $func_len_result
	    len=$func_arith_result
	    func_append objlist " $obj"
	    if test "$len" -lt "$max_cmd_len"; then
	      :
	    else
	      # the above command should be used before it gets too long
	      oldobjs=$objlist
	      if test "$obj" = "$last_oldobj" ; then
		RANLIB=$save_RANLIB
	      fi
	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
	      objlist=
	      len=$len0
	    fi
	  done
	  RANLIB=$save_RANLIB
	  oldobjs=$objlist
	  if test "X$oldobjs" = "X" ; then
	    eval cmds=\"\$concat_cmds\"
	  else
	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
	  fi
	fi
      fi
      func_execute_cmds "$cmds" 'exit $?'
    done

    test -n "$generated" && \
      func_show_eval "${RM}r$generated"

    # Now create the libtool archive.
    case $output in
    *.la)
      old_library=
      test "$build_old_libs" = yes && old_library="$libname.$libext"
      func_verbose "creating $output"

      # Preserve any variables that may affect compiler behavior
      for var in $variables_saved_for_relink; do
	if eval test -z \"\${$var+set}\"; then
	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
	elif eval var_value=\$$var; test -z "$var_value"; then
	  relink_command="$var=; export $var; $relink_command"
	else
	  func_quote_for_eval "$var_value"
	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
	fi
      done
      # Quote the link command for shipping.
      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
      if test "$hardcode_automatic" = yes ; then
	relink_command=
      fi

      # Only create the output if not a dry run.
      $opt_dry_run || {
	for installed in no yes; do
	  if test "$installed" = yes; then
	    if test -z "$install_libdir"; then
	      break
	    fi
	    output="$output_objdir/$outputname"i
	    # Replace all uninstalled libtool libraries with the installed ones
	    newdependency_libs=
	    for deplib in $dependency_libs; do
	      case $deplib in
	      *.la)
		func_basename "$deplib"
		name="$func_basename_result"
		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
		test -z "$libdir" && \
		  func_fatal_error "\`$deplib' is not a valid libtool archive"
		newdependency_libs="$newdependency_libs $libdir/$name"
		;;
	      *) newdependency_libs="$newdependency_libs $deplib" ;;
	      esac
	    done
	    dependency_libs="$newdependency_libs"
	    newdlfiles=

	    for lib in $dlfiles; do
	      case $lib in
	      *.la)
	        func_basename "$lib"
		name="$func_basename_result"
		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
		test -z "$libdir" && \
		  func_fatal_error "\`$lib' is not a valid libtool archive"
		newdlfiles="$newdlfiles $libdir/$name"
		;;
	      *) newdlfiles="$newdlfiles $lib" ;;
	      esac
	    done
	    dlfiles="$newdlfiles"
	    newdlprefiles=
	    for lib in $dlprefiles; do
	      case $lib in
	      *.la)
		# Only pass preopened files to the pseudo-archive (for
		# eventual linking with the app. that links it) if we
		# didn't already link the preopened objects directly into
		# the library:
		func_basename "$lib"
		name="$func_basename_result"
		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
		test -z "$libdir" && \
		  func_fatal_error "\`$lib' is not a valid libtool archive"
		newdlprefiles="$newdlprefiles $libdir/$name"
		;;
	      esac
	    done
	    dlprefiles="$newdlprefiles"
	  else
	    newdlfiles=
	    for lib in $dlfiles; do
	      case $lib in
		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
		*) abs=`pwd`"/$lib" ;;
	      esac
	      newdlfiles="$newdlfiles $abs"
	    done
	    dlfiles="$newdlfiles"
	    newdlprefiles=
	    for lib in $dlprefiles; do
	      case $lib in
		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
		*) abs=`pwd`"/$lib" ;;
	      esac
	      newdlprefiles="$newdlprefiles $abs"
	    done
	    dlprefiles="$newdlprefiles"
	  fi
	  $RM $output
	  # place dlname in correct position for cygwin
	  tdlname=$dlname
	  case $host,$output,$installed,$module,$dlname in
	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
	  esac
	  $ECHO > $output "\
# $outputname - a libtool library file
# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# The name that we can dlopen(3).
dlname='$tdlname'

# Names of this library.
library_names='$library_names'

# The name of the static archive.
old_library='$old_library'

# Linker flags that can not go in dependency_libs.
inherited_linker_flags='$new_inherited_linker_flags'

# Libraries that this one depends upon.
dependency_libs='$dependency_libs'

# Names of additional weak libraries provided by this library
weak_library_names='$weak_libs'

# Version information for $libname.
current=$current
age=$age
revision=$revision

# Is this an already installed library?
installed=$installed

# Should we warn about portability when linking against -modules?
shouldnotlink=$module

# Files to dlopen/dlpreopen
dlopen='$dlfiles'
dlpreopen='$dlprefiles'

# Directory that this library needs to be installed in:
libdir='$install_libdir'"
	  if test "$installed" = no && test "$need_relink" = yes; then
	    $ECHO >> $output "\
relink_command=\"$relink_command\""
	  fi
	done
      }

      # Do a symbolic link so that the libtool archive can be found in
      # LD_LIBRARY_PATH before the program is installed.
      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
      ;;
    esac
    exit $EXIT_SUCCESS
}

{ test "$mode" = link || test "$mode" = relink; } &&
    func_mode_link ${1+"$@"}


# func_mode_uninstall arg...
func_mode_uninstall ()
{
    $opt_debug
    RM="$nonopt"
    files=
    rmforce=
    exit_status=0

    # This variable tells wrapper scripts just to set variables rather
    # than running their programs.
    libtool_install_magic="$magic"

    for arg
    do
      case $arg in
      -f) RM="$RM $arg"; rmforce=yes ;;
      -*) RM="$RM $arg" ;;
      *) files="$files $arg" ;;
      esac
    done

    test -z "$RM" && \
      func_fatal_help "you must specify an RM program"

    rmdirs=

    origobjdir="$objdir"
    for file in $files; do
      func_dirname "$file" "" "."
      dir="$func_dirname_result"
      if test "X$dir" = X.; then
	objdir="$origobjdir"
      else
	objdir="$dir/$origobjdir"
      fi
      func_basename "$file"
      name="$func_basename_result"
      test "$mode" = uninstall && objdir="$dir"

      # Remember objdir for removal later, being careful to avoid duplicates
      if test "$mode" = clean; then
	case " $rmdirs " in
	  *" $objdir "*) ;;
	  *) rmdirs="$rmdirs $objdir" ;;
	esac
      fi

      # Don't error if the file doesn't exist and rm -f was used.
      if { test -L "$file"; } >/dev/null 2>&1 ||
	 { test -h "$file"; } >/dev/null 2>&1 ||
	 test -f "$file"; then
	:
      elif test -d "$file"; then
	exit_status=1
	continue
      elif test "$rmforce" = yes; then
	continue
      fi

      rmfiles="$file"

      case $name in
      *.la)
	# Possibly a libtool archive, so verify it.
	if func_lalib_p "$file"; then
	  func_source $dir/$name

	  # Delete the libtool libraries and symlinks.
	  for n in $library_names; do
	    rmfiles="$rmfiles $objdir/$n"
	  done
	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"

	  case "$mode" in
	  clean)
	    case "  $library_names " in
	    # "  " in the beginning catches empty $dlname
	    *" $dlname "*) ;;
	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
	    esac
	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
	    ;;
	  uninstall)
	    if test -n "$library_names"; then
	      # Do each command in the postuninstall commands.
	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
	    fi

	    if test -n "$old_library"; then
	      # Do each command in the old_postuninstall commands.
	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
	    fi
	    # FIXME: should reinstall the best remaining shared library.
	    ;;
	  esac
	fi
	;;

      *.lo)
	# Possibly a libtool object, so verify it.
	if func_lalib_p "$file"; then

	  # Read the .lo file
	  func_source $dir/$name

	  # Add PIC object to the list of files to remove.
	  if test -n "$pic_object" &&
	     test "$pic_object" != none; then
	    rmfiles="$rmfiles $dir/$pic_object"
	  fi

	  # Add non-PIC object to the list of files to remove.
	  if test -n "$non_pic_object" &&
	     test "$non_pic_object" != none; then
	    rmfiles="$rmfiles $dir/$non_pic_object"
	  fi
	fi
	;;

      *)
	if test "$mode" = clean ; then
	  noexename=$name
	  case $file in
	  *.exe)
	    func_stripname '' '.exe' "$file"
	    file=$func_stripname_result
	    func_stripname '' '.exe' "$name"
	    noexename=$func_stripname_result
	    # $file with .exe has already been added to rmfiles,
	    # add $file without .exe
	    rmfiles="$rmfiles $file"
	    ;;
	  esac
	  # Do a test to see if this is a libtool program.
	  if func_ltwrapper_p "$file"; then
	    if func_ltwrapper_executable_p "$file"; then
	      func_ltwrapper_scriptname "$file"
	      relink_command=
	      func_source $func_ltwrapper_scriptname_result
	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
	    else
	      relink_command=
	      func_source $dir/$noexename
	    fi

	    # note $name still contains .exe if it was in $file originally
	    # as does the version of $file that was added into $rmfiles
	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
	    if test "$fast_install" = yes && test -n "$relink_command"; then
	      rmfiles="$rmfiles $objdir/lt-$name"
	    fi
	    if test "X$noexename" != "X$name" ; then
	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
	    fi
	  fi
	fi
	;;
      esac
      func_show_eval "$RM $rmfiles" 'exit_status=1'
    done
    objdir="$origobjdir"

    # Try to remove the ${objdir}s in the directories where we deleted files
    for dir in $rmdirs; do
      if test -d "$dir"; then
	func_show_eval "rmdir $dir >/dev/null 2>&1"
      fi
    done

    exit $exit_status
}

{ test "$mode" = uninstall || test "$mode" = clean; } &&
    func_mode_uninstall ${1+"$@"}

test -z "$mode" && {
  help="$generic_help"
  func_fatal_help "you must specify a MODE"
}

test -z "$exec_cmd" && \
  func_fatal_help "invalid operation mode \`$mode'"

if test -n "$exec_cmd"; then
  eval exec "$exec_cmd"
  exit $EXIT_FAILURE
fi

exit $exit_status


# The TAGs below are defined such that we never get into a situation
# in which we disable both kinds of libraries.  Given conflicting
# choices, we go for a static library, that is the most portable,
# since we can't tell whether shared libraries were disabled because
# the user asked for that or because the platform doesn't support
# them.  This is particularly important on AIX, because we don't
# support having both static and shared libraries enabled at the same
# time on that platform, so we default to a shared-only configuration.
# If a disable-shared tag is given, we'll fallback to a static-only
# configuration.  But we'll never go from static-only to shared-only.

# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
build_libtool_libs=no
build_old_libs=yes
# ### END LIBTOOL TAG CONFIG: disable-shared

# ### BEGIN LIBTOOL TAG CONFIG: disable-static
build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
# ### END LIBTOOL TAG CONFIG: disable-static

# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
# vi:sw=2

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/Makefile.









































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# m4/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
subdir = m4
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/m4
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/m4
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
EXTRA_DIST = libcurl.m4
all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu m4/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:


distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-generic clean-libtool \
	distclean distclean-generic distclean-libtool distdir dvi \
	dvi-am html html-am info info-am install install-am \
	install-data install-data-am install-dvi install-dvi-am \
	install-exec install-exec-am install-html install-html-am \
	install-info install-info-am install-man install-pdf \
	install-pdf-am install-ps install-ps-am install-strip \
	installcheck installcheck-am installdirs maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/Makefile.am.



>
1
EXTRA_DIST = libcurl.m4

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/Makefile.in.









































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = m4
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = libcurl.m4
all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu m4/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:


distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-generic clean-libtool \
	distclean distclean-generic distclean-libtool distdir dvi \
	dvi-am html html-am info info-am install install-am \
	install-data install-data-am install-dvi install-dvi-am \
	install-exec install-exec-am install-html install-html-am \
	install-info install-info-am install-man install-pdf \
	install-pdf-am install-ps install-ps-am install-strip \
	installcheck installcheck-am installdirs maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/libcurl.m4.































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION],
#                       [ACTION-IF-YES], [ACTION-IF-NO])
# ----------------------------------------------------------
#      David Shaw <dshaw@jabberwocky.com>   May-09-2006
#
# Checks for libcurl.  DEFAULT-ACTION is the string yes or no to
# specify whether to default to --with-libcurl or --without-libcurl.
# If not supplied, DEFAULT-ACTION is yes.  MINIMUM-VERSION is the
# minimum version of libcurl to accept.  Pass the version as a regular
# version number like 7.10.1. If not supplied, any version is
# accepted.  ACTION-IF-YES is a list of shell commands to run if
# libcurl was successfully found and passed the various tests.
# ACTION-IF-NO is a list of shell commands that are run otherwise.
# Note that using --without-libcurl does run ACTION-IF-NO.
#
# This macro #defines HAVE_LIBCURL if a working libcurl setup is
# found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary
# values.  Other useful defines are LIBCURL_FEATURE_xxx where xxx are
# the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy
# where yyy are the various protocols supported by libcurl.  Both xxx
# and yyy are capitalized.  See the list of AH_TEMPLATEs at the top of
# the macro for the complete list of possible defines.  Shell
# variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also
# defined to 'yes' for those features and protocols that were found.
# Note that xxx and yyy keep the same capitalization as in the
# curl-config list (e.g. it's "HTTP" and not "http").
#
# Users may override the detected values by doing something like:
# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure
#
# For the sake of sanity, this macro assumes that any libcurl that is
# found is after version 7.7.2, the first version that included the
# curl-config script.  Note that it is very important for people
# packaging binary versions of libcurl to include this script!
# Without curl-config, we can only guess what protocols are available,
# or use curl_version_info to figure it out at runtime.

AC_DEFUN([LIBCURL_CHECK_CONFIG],
[
  AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL])
  AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4])
  AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6])
  AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz])
  AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS])
  AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN])
  AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI])
  AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM])

  AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP])
  AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS])
  AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP])
  AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS])
  AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE])
  AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET])
  AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP])
  AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT])
  AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP])

  AC_ARG_WITH(libcurl,
     AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]),
     [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])])

  if test "$_libcurl_with" != "no" ; then

     AC_PROG_AWK

     _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"

     _libcurl_try_link=yes

     if test -d "$_libcurl_with" ; then
        LIBCURL_CPPFLAGS="-I$withval/include"
        _libcurl_ldflags="-L$withval/lib"
        AC_PATH_PROG([_libcurl_config],["$withval/bin/curl-config"])
     else
	AC_PATH_PROG([_libcurl_config],[curl-config])
     fi

     if test x$_libcurl_config != "x" ; then
        AC_CACHE_CHECK([for the version of libcurl],
	   [libcurl_cv_lib_curl_version],
           [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`])

	_libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse`
	_libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse`

        if test $_libcurl_wanted -gt 0 ; then
	   AC_CACHE_CHECK([for libcurl >= version $2],
	      [libcurl_cv_lib_version_ok],
              [
   	      if test $_libcurl_version -ge $_libcurl_wanted ; then
	         libcurl_cv_lib_version_ok=yes
      	      else
	         libcurl_cv_lib_version_ok=no
  	      fi
              ])
        fi

	if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then
           if test x"$LIBCURL_CPPFLAGS" = "x" ; then
              LIBCURL_CPPFLAGS=`$_libcurl_config --cflags`
           fi
           if test x"$LIBCURL" = "x" ; then
              LIBCURL=`$_libcurl_config --libs`

              # This is so silly, but Apple actually has a bug in their
	      # curl-config script.  Fixed in Tiger, but there are still
	      # lots of Panther installs around.
              case "${host}" in
                 powerpc-apple-darwin7*)
                    LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'`
                 ;;
              esac
           fi

	   # All curl-config scripts support --feature
	   _libcurl_features=`$_libcurl_config --feature`

           # Is it modern enough to have --protocols? (7.12.4)
	   if test $_libcurl_version -ge 461828 ; then
              _libcurl_protocols=`$_libcurl_config --protocols`
           fi
	else
           _libcurl_try_link=no
	fi

	unset _libcurl_wanted
     fi

     if test $_libcurl_try_link = yes ; then

        # we didn't find curl-config, so let's see if the user-supplied
        # link line (or failing that, "-lcurl") is enough.
        LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"}

        AC_CACHE_CHECK([whether libcurl is usable],
           [libcurl_cv_lib_curl_usable],
           [
           _libcurl_save_cppflags=$CPPFLAGS
           CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS"
           _libcurl_save_libs=$LIBS
           LIBS="$LIBCURL $LIBS"

           AC_LINK_IFELSE(AC_LANG_PROGRAM([#include <curl/curl.h>],[
/* Try and use a few common options to force a failure if we are
   missing symbols or can't link. */
int x;
curl_easy_setopt(NULL,CURLOPT_URL,NULL);
x=CURL_ERROR_SIZE;
x=CURLOPT_WRITEFUNCTION;
x=CURLOPT_FILE;
x=CURLOPT_ERRORBUFFER;
x=CURLOPT_STDERR;
x=CURLOPT_VERBOSE;
]),libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)

           CPPFLAGS=$_libcurl_save_cppflags
           LIBS=$_libcurl_save_libs
           unset _libcurl_save_cppflags
           unset _libcurl_save_libs
           ])

        if test $libcurl_cv_lib_curl_usable = yes ; then

	   # Does curl_free() exist in this version of libcurl?
	   # If not, fake it with free()

           _libcurl_save_cppflags=$CPPFLAGS
           CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS"
           _libcurl_save_libs=$LIBS
           LIBS="$LIBS $LIBCURL"

           AC_CHECK_FUNC(curl_free,,
  	      AC_DEFINE(curl_free,free,
		[Define curl_free() as free() if our version of curl lacks curl_free.]))

           CPPFLAGS=$_libcurl_save_cppflags
           LIBS=$_libcurl_save_libs
           unset _libcurl_save_cppflags
           unset _libcurl_save_libs

           AC_DEFINE(HAVE_LIBCURL,1,
             [Define to 1 if you have a functional curl library.])
           AC_SUBST(LIBCURL_CPPFLAGS)
           AC_SUBST(LIBCURL)

           for _libcurl_feature in $_libcurl_features ; do
	      AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1])
	      eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes
           done

	   if test "x$_libcurl_protocols" = "x" ; then

	      # We don't have --protocols, so just assume that all
	      # protocols are available
	      _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT"

	      if test x$libcurl_feature_SSL = xyes ; then
	         _libcurl_protocols="$_libcurl_protocols HTTPS"

		 # FTPS wasn't standards-compliant until version
		 # 7.11.0
		 if test $_libcurl_version -ge 461568; then
		    _libcurl_protocols="$_libcurl_protocols FTPS"
		 fi
	      fi
	   fi

	   for _libcurl_protocol in $_libcurl_protocols ; do
	      AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1])
	      eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes
           done
	else
	   unset LIBCURL
	   unset LIBCURL_CPPFLAGS
        fi
     fi

     unset _libcurl_try_link
     unset _libcurl_version_parse
     unset _libcurl_config
     unset _libcurl_feature
     unset _libcurl_features
     unset _libcurl_protocol
     unset _libcurl_protocols
     unset _libcurl_version
     unset _libcurl_ldflags
  fi

  if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then
     # This is the IF-NO path
     ifelse([$4],,:,[$4])
  else
     # This is the IF-YES path
     ifelse([$3],,:,[$3])
  fi

  unset _libcurl_with
])dnl

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/libgcrypt.m4.

























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
dnl Autoconf macros for libgcrypt
dnl       Copyright (C) 2002, 2004 Free Software Foundation, Inc.
dnl
dnl This file is free software; as a special exception the author gives
dnl unlimited permission to copy and/or distribute it, with or without
dnl modifications, as long as this notice is preserved.
dnl
dnl This file is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
dnl with the API version to also check the API compatibility. Example:
dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed 
dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1.  Using
dnl this features allows to prevent build against newer versions of libgcrypt
dnl with a changed API.
dnl
AC_DEFUN([AM_PATH_LIBGCRYPT],
[ AC_ARG_WITH(libgcrypt-prefix,
            AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
                           [prefix where LIBGCRYPT is installed (optional)]),
     libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
  if test x$libgcrypt_config_prefix != x ; then
     if test x${LIBGCRYPT_CONFIG+set} != xset ; then
        LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
     fi
  fi

  AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
  tmp=ifelse([$1], ,1:1.2.0,$1)
  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
     req_libgcrypt_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
     min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
  else
     req_libgcrypt_api=0
     min_libgcrypt_version="$tmp"
  fi

  AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
  ok=no
  if test "$LIBGCRYPT_CONFIG" != "no" ; then
    req_major=`echo $min_libgcrypt_version | \
               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
    req_minor=`echo $min_libgcrypt_version | \
               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
    req_micro=`echo $min_libgcrypt_version | \
               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
    libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
    major=`echo $libgcrypt_config_version | \
               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
    minor=`echo $libgcrypt_config_version | \
               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
    micro=`echo $libgcrypt_config_version | \
               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
    if test "$major" -gt "$req_major"; then
        ok=yes
    else 
        if test "$major" -eq "$req_major"; then
            if test "$minor" -gt "$req_minor"; then
               ok=yes
            else
               if test "$minor" -eq "$req_minor"; then
                   if test "$micro" -ge "$req_micro"; then
                     ok=yes
                   fi
               fi
            fi
        fi
    fi
  fi
  if test $ok = yes; then
    AC_MSG_RESULT([yes ($libgcrypt_config_version)])
  else
    AC_MSG_RESULT(no)
  fi
  if test $ok = yes; then
     # If we have a recent libgcrypt, we should also check that the
     # API is compatible
     if test "$req_libgcrypt_api" -gt 0 ; then
        tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
        if test "$tmp" -gt 0 ; then
           AC_MSG_CHECKING([LIBGCRYPT API version])
           if test "$req_libgcrypt_api" -eq "$tmp" ; then
             AC_MSG_RESULT([okay])
           else
             ok=no
             AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp])
           fi
        fi
     fi
  fi
  if test $ok = yes; then
    LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
    LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
    ifelse([$2], , :, [$2])
  else
    LIBGCRYPT_CFLAGS=""
    LIBGCRYPT_LIBS=""
    ifelse([$3], , :, [$3])
  fi
  AC_SUBST(LIBGCRYPT_CFLAGS)
  AC_SUBST(LIBGCRYPT_LIBS)
])

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/libtool.m4.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
#                 2006, 2007, 2008 Free Software Foundation, Inc.
#   Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.

m4_define([_LT_COPYING], [dnl
#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
#                 2006, 2007, 2008 Free Software Foundation, Inc.
#   Written by Gordon Matzigkeit, 1996
#
#   This file is part of GNU Libtool.
#
# GNU Libtool is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# As a special exception to the GNU General Public License,
# if you distribute this file as part of a program or library that
# is built using GNU Libtool, you may include this file under the
# same distribution terms that you use for the rest of that program.
#
# GNU Libtool is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GNU Libtool; see the file COPYING.  If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
# obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
])

# serial 56 LT_INIT


# LT_PREREQ(VERSION)
# ------------------
# Complain and exit if this libtool version is less that VERSION.
m4_defun([LT_PREREQ],
[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
       [m4_default([$3],
		   [m4_fatal([Libtool version $1 or higher is required],
		             63)])],
       [$2])])


# _LT_CHECK_BUILDDIR
# ------------------
# Complain if the absolute build directory name contains unusual characters
m4_defun([_LT_CHECK_BUILDDIR],
[case `pwd` in
  *\ * | *\	*)
    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
esac
])


# LT_INIT([OPTIONS])
# ------------------
AC_DEFUN([LT_INIT],
[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
AC_BEFORE([$0], [LT_LANG])dnl
AC_BEFORE([$0], [LT_OUTPUT])dnl
AC_BEFORE([$0], [LTDL_INIT])dnl
m4_require([_LT_CHECK_BUILDDIR])dnl

dnl Autoconf doesn't catch unexpanded LT_ macros by default:
m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
dnl unless we require an AC_DEFUNed macro:
AC_REQUIRE([LTOPTIONS_VERSION])dnl
AC_REQUIRE([LTSUGAR_VERSION])dnl
AC_REQUIRE([LTVERSION_VERSION])dnl
AC_REQUIRE([LTOBSOLETE_VERSION])dnl
m4_require([_LT_PROG_LTMAIN])dnl

dnl Parse OPTIONS
_LT_SET_OPTIONS([$0], [$1])

# This can be used to rebuild libtool when needed
LIBTOOL_DEPS="$ltmain"

# Always use our own libtool.
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
AC_SUBST(LIBTOOL)dnl

_LT_SETUP

# Only expand once:
m4_define([LT_INIT])
])# LT_INIT

# Old names:
AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
dnl AC_DEFUN([AM_PROG_LIBTOOL], [])


# _LT_CC_BASENAME(CC)
# -------------------
# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
m4_defun([_LT_CC_BASENAME],
[for cc_temp in $1""; do
  case $cc_temp in
    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
    \-*) ;;
    *) break;;
  esac
done
cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
])


# _LT_FILEUTILS_DEFAULTS
# ----------------------
# It is okay to use these file commands and assume they have been set
# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
m4_defun([_LT_FILEUTILS_DEFAULTS],
[: ${CP="cp -f"}
: ${MV="mv -f"}
: ${RM="rm -f"}
])# _LT_FILEUTILS_DEFAULTS


# _LT_SETUP
# ---------
m4_defun([_LT_SETUP],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
_LT_DECL([], [host_alias], [0], [The host system])dnl
_LT_DECL([], [host], [0])dnl
_LT_DECL([], [host_os], [0])dnl
dnl
_LT_DECL([], [build_alias], [0], [The build system])dnl
_LT_DECL([], [build], [0])dnl
_LT_DECL([], [build_os], [0])dnl
dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([LT_PATH_LD])dnl
AC_REQUIRE([LT_PATH_NM])dnl
dnl
AC_REQUIRE([AC_PROG_LN_S])dnl
test -z "$LN_S" && LN_S="ln -s"
_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
dnl
AC_REQUIRE([LT_CMD_MAX_LEN])dnl
_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_CMD_RELOAD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl

_LT_CONFIG_LIBTOOL_INIT([
# See if we are running on zsh, and set the options which allow our
# commands through without removal of \ escapes INIT.
if test -n "\${ZSH_VERSION+set}" ; then
   setopt NO_GLOB_SUBST
fi
])
if test -n "${ZSH_VERSION+set}" ; then
   setopt NO_GLOB_SUBST
fi

_LT_CHECK_OBJDIR

m4_require([_LT_TAG_COMPILER])dnl
_LT_PROG_ECHO_BACKSLASH

case $host_os in
aix3*)
  # AIX sometimes has problems with the GCC collect2 program.  For some
  # reason, if we set the COLLECT_NAMES environment variable, the problems
  # vanish in a puff of smoke.
  if test "X${COLLECT_NAMES+set}" != Xset; then
    COLLECT_NAMES=
    export COLLECT_NAMES
  fi
  ;;
esac

# Sed substitution that helps us do robust quoting.  It backslashifies
# metacharacters that are still active within double-quoted strings.
sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'

# Same as above, but do not quote variable references.
double_quote_subst='s/\([["`\\]]\)/\\\1/g'

# Sed substitution to delay expansion of an escaped shell variable in a
# double_quote_subst'ed string.
delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'

# Sed substitution to delay expansion of an escaped single quote.
delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'

# Sed substitution to avoid accidental globbing in evaled expressions
no_glob_subst='s/\*/\\\*/g'

# Global variables:
ofile=libtool
can_build_shared=yes

# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a

with_gnu_ld="$lt_cv_prog_gnu_ld"

old_CC="$CC"
old_CFLAGS="$CFLAGS"

# Set sane defaults for various variables
test -z "$CC" && CC=cc
test -z "$LTCC" && LTCC=$CC
test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
test -z "$LD" && LD=ld
test -z "$ac_objext" && ac_objext=o

_LT_CC_BASENAME([$compiler])

# Only perform the check for file, if the check method requires it
test -z "$MAGIC_CMD" && MAGIC_CMD=file
case $deplibs_check_method in
file_magic*)
  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
    _LT_PATH_MAGIC
  fi
  ;;
esac

# Use C for the default configuration in the libtool script
LT_SUPPORTED_TAG([CC])
_LT_LANG_C_CONFIG
_LT_LANG_DEFAULT_CONFIG
_LT_CONFIG_COMMANDS
])# _LT_SETUP


# _LT_PROG_LTMAIN
# ---------------
# Note that this code is called both from `configure', and `config.status'
# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
# `config.status' has no value for ac_aux_dir unless we are using Automake,
# so we pass a copy along to make sure it has a sensible value anyway.
m4_defun([_LT_PROG_LTMAIN],
[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
ltmain="$ac_aux_dir/ltmain.sh"
])# _LT_PROG_LTMAIN


## ------------------------------------- ##
## Accumulate code for creating libtool. ##
## ------------------------------------- ##

# So that we can recreate a full libtool script including additional
# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
# in macros and then make a single call at the end using the `libtool'
# label.


# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
# ----------------------------------------
# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
m4_define([_LT_CONFIG_LIBTOOL_INIT],
[m4_ifval([$1],
          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
                     [$1
])])])

# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_INIT])


# _LT_CONFIG_LIBTOOL([COMMANDS])
# ------------------------------
# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
m4_define([_LT_CONFIG_LIBTOOL],
[m4_ifval([$1],
          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
                     [$1
])])])

# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])


# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
# -----------------------------------------------------
m4_defun([_LT_CONFIG_SAVE_COMMANDS],
[_LT_CONFIG_LIBTOOL([$1])
_LT_CONFIG_LIBTOOL_INIT([$2])
])


# _LT_FORMAT_COMMENT([COMMENT])
# -----------------------------
# Add leading comment marks to the start of each line, and a trailing
# full-stop to the whole comment if one is not present already.
m4_define([_LT_FORMAT_COMMENT],
[m4_ifval([$1], [
m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
)])



## ------------------------ ##
## FIXME: Eliminate VARNAME ##
## ------------------------ ##


# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
# -------------------------------------------------------------------
# CONFIGNAME is the name given to the value in the libtool script.
# VARNAME is the (base) name used in the configure script.
# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
# VARNAME.  Any other value will be used directly.
m4_define([_LT_DECL],
[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
	[m4_ifval([$1], [$1], [$2])])
    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
    m4_ifval([$4],
	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
    lt_dict_add_subkey([lt_decl_dict], [$2],
	[tagged?], [m4_ifval([$5], [yes], [no])])])
])


# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
# --------------------------------------------------------
m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])


# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
# ------------------------------------------------
m4_define([lt_decl_tag_varnames],
[_lt_decl_filter([tagged?], [yes], $@)])


# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
# ---------------------------------------------------------
m4_define([_lt_decl_filter],
[m4_case([$#],
  [0], [m4_fatal([$0: too few arguments: $#])],
  [1], [m4_fatal([$0: too few arguments: $#: $1])],
  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
])


# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
# --------------------------------------------------
m4_define([lt_decl_quote_varnames],
[_lt_decl_filter([value], [1], $@)])


# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
# ---------------------------------------------------
m4_define([lt_decl_dquote_varnames],
[_lt_decl_filter([value], [2], $@)])


# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
# ---------------------------------------------------
m4_define([lt_decl_varnames_tagged],
[m4_assert([$# <= 2])dnl
_$0(m4_quote(m4_default([$1], [[, ]])),
    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
m4_define([_lt_decl_varnames_tagged],
[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])


# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
# ------------------------------------------------
m4_define([lt_decl_all_varnames],
[_$0(m4_quote(m4_default([$1], [[, ]])),
     m4_if([$2], [],
	   m4_quote(lt_decl_varnames),
	m4_quote(m4_shift($@))))[]dnl
])
m4_define([_lt_decl_all_varnames],
[lt_join($@, lt_decl_varnames_tagged([$1],
			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
])


# _LT_CONFIG_STATUS_DECLARE([VARNAME])
# ------------------------------------
# Quote a variable value, and forward it to `config.status' so that its
# declaration there will have the same value as in `configure'.  VARNAME
# must have a single quote delimited value for this to work.
m4_define([_LT_CONFIG_STATUS_DECLARE],
[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])


# _LT_CONFIG_STATUS_DECLARATIONS
# ------------------------------
# We delimit libtool config variables with single quotes, so when
# we write them to config.status, we have to be sure to quote all
# embedded single quotes properly.  In configure, this macro expands
# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
#
#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])


# _LT_LIBTOOL_TAGS
# ----------------
# Output comment and list of tags supported by the script
m4_defun([_LT_LIBTOOL_TAGS],
[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
available_tags="_LT_TAGS"dnl
])


# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
# -----------------------------------
# Extract the dictionary values for VARNAME (optionally with TAG) and
# expand to a commented shell variable setting:
#
#    # Some comment about what VAR is for.
#    visible_name=$lt_internal_name
m4_define([_LT_LIBTOOL_DECLARE],
[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
					   [description])))[]dnl
m4_pushdef([_libtool_name],
    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
    [0], [_libtool_name=[$]$1],
    [1], [_libtool_name=$lt_[]$1],
    [2], [_libtool_name=$lt_[]$1],
    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
])


# _LT_LIBTOOL_CONFIG_VARS
# -----------------------
# Produce commented declarations of non-tagged libtool config variables
# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
# section) are produced by _LT_LIBTOOL_TAG_VARS.
m4_defun([_LT_LIBTOOL_CONFIG_VARS],
[m4_foreach([_lt_var],
    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])


# _LT_LIBTOOL_TAG_VARS(TAG)
# -------------------------
m4_define([_LT_LIBTOOL_TAG_VARS],
[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])


# _LT_TAGVAR(VARNAME, [TAGNAME])
# ------------------------------
m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])


# _LT_CONFIG_COMMANDS
# -------------------
# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
# variables for single and double quote escaping we saved from calls
# to _LT_DECL, we can put quote escaped variables declarations
# into `config.status', and then the shell code to quote escape them in
# for loops in `config.status'.  Finally, any additional code accumulated
# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
m4_defun([_LT_CONFIG_COMMANDS],
[AC_PROVIDE_IFELSE([LT_OUTPUT],
	dnl If the libtool generation code has been placed in $CONFIG_LT,
	dnl instead of duplicating it all over again into config.status,
	dnl then we will have config.status run $CONFIG_LT later, so it
	dnl needs to know what name is stored there:
        [AC_CONFIG_COMMANDS([libtool],
            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
    dnl If the libtool generation code is destined for config.status,
    dnl expand the accumulated commands and init code now:
    [AC_CONFIG_COMMANDS([libtool],
        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
])#_LT_CONFIG_COMMANDS


# Initialize.
m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
[

# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

sed_quote_subst='$sed_quote_subst'
double_quote_subst='$double_quote_subst'
delay_variable_subst='$delay_variable_subst'
_LT_CONFIG_STATUS_DECLARATIONS
LTCC='$LTCC'
LTCFLAGS='$LTCFLAGS'
compiler='$compiler_DEFAULT'

# Quote evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_quote_varnames); do
    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
    *[[\\\\\\\`\\"\\\$]]*)
      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
      ;;
    *)
      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
      ;;
    esac
done

# Double-quote double-evaled strings.
for var in lt_decl_all_varnames([[ \
]], lt_decl_dquote_varnames); do
    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
    *[[\\\\\\\`\\"\\\$]]*)
      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
      ;;
    *)
      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
      ;;
    esac
done

# Fix-up fallback echo if it was mangled by the above quoting rules.
case \$lt_ECHO in
*'\\\[$]0 --fallback-echo"')dnl "
  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
  ;;
esac

_LT_OUTPUT_LIBTOOL_INIT
])


# LT_OUTPUT
# ---------
# This macro allows early generation of the libtool script (before
# AC_OUTPUT is called), incase it is used in configure for compilation
# tests.
AC_DEFUN([LT_OUTPUT],
[: ${CONFIG_LT=./config.lt}
AC_MSG_NOTICE([creating $CONFIG_LT])
cat >"$CONFIG_LT" <<_LTEOF
#! $SHELL
# Generated by $as_me.
# Run this file to recreate a libtool stub with the current configuration.

lt_cl_silent=false
SHELL=\${CONFIG_SHELL-$SHELL}
_LTEOF

cat >>"$CONFIG_LT" <<\_LTEOF
AS_SHELL_SANITIZE
_AS_PREPARE

exec AS_MESSAGE_FD>&1
exec AS_MESSAGE_LOG_FD>>config.log
{
  echo
  AS_BOX([Running $as_me.])
} >&AS_MESSAGE_LOG_FD

lt_cl_help="\
\`$as_me' creates a local libtool stub from the current configuration,
for use in further configure time tests before the real libtool is
generated.

Usage: $[0] [[OPTIONS]]

  -h, --help      print this help, then exit
  -V, --version   print version number, then exit
  -q, --quiet     do not print progress messages
  -d, --debug     don't remove temporary files

Report bugs to <bug-libtool@gnu.org>."

lt_cl_version="\
m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
configured by $[0], generated by m4_PACKAGE_STRING.

Copyright (C) 2008 Free Software Foundation, Inc.
This config.lt script is free software; the Free Software Foundation
gives unlimited permision to copy, distribute and modify it."

while test $[#] != 0
do
  case $[1] in
    --version | --v* | -V )
      echo "$lt_cl_version"; exit 0 ;;
    --help | --h* | -h )
      echo "$lt_cl_help"; exit 0 ;;
    --debug | --d* | -d )
      debug=: ;;
    --quiet | --q* | --silent | --s* | -q )
      lt_cl_silent=: ;;

    -*) AC_MSG_ERROR([unrecognized option: $[1]
Try \`$[0] --help' for more information.]) ;;

    *) AC_MSG_ERROR([unrecognized argument: $[1]
Try \`$[0] --help' for more information.]) ;;
  esac
  shift
done

if $lt_cl_silent; then
  exec AS_MESSAGE_FD>/dev/null
fi
_LTEOF

cat >>"$CONFIG_LT" <<_LTEOF
_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
_LTEOF

cat >>"$CONFIG_LT" <<\_LTEOF
AC_MSG_NOTICE([creating $ofile])
_LT_OUTPUT_LIBTOOL_COMMANDS
AS_EXIT(0)
_LTEOF
chmod +x "$CONFIG_LT"

# configure is writing to config.log, but config.lt does its own redirection,
# appending to config.log, which fails on DOS, as config.log is still kept
# open by configure.  Here we exec the FD to /dev/null, effectively closing
# config.log, so it can be properly (re)opened and appended to by config.lt.
if test "$no_create" != yes; then
  lt_cl_success=:
  test "$silent" = yes &&
    lt_config_lt_args="$lt_config_lt_args --quiet"
  exec AS_MESSAGE_LOG_FD>/dev/null
  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
  exec AS_MESSAGE_LOG_FD>>config.log
  $lt_cl_success || AS_EXIT(1)
fi
])# LT_OUTPUT


# _LT_CONFIG(TAG)
# ---------------
# If TAG is the built-in tag, create an initial libtool script with a
# default configuration from the untagged config vars.  Otherwise add code
# to config.status for appending the configuration named by TAG from the
# matching tagged config vars.
m4_defun([_LT_CONFIG],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
_LT_CONFIG_SAVE_COMMANDS([
  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
  m4_if(_LT_TAG, [C], [
    # See if we are running on zsh, and set the options which allow our
    # commands through without removal of \ escapes.
    if test -n "${ZSH_VERSION+set}" ; then
      setopt NO_GLOB_SUBST
    fi

    cfgfile="${ofile}T"
    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
    $RM "$cfgfile"

    cat <<_LT_EOF >> "$cfgfile"
#! $SHELL

# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
#
_LT_COPYING
_LT_LIBTOOL_TAGS

# ### BEGIN LIBTOOL CONFIG
_LT_LIBTOOL_CONFIG_VARS
_LT_LIBTOOL_TAG_VARS
# ### END LIBTOOL CONFIG

_LT_EOF

  case $host_os in
  aix3*)
    cat <<\_LT_EOF >> "$cfgfile"
# AIX sometimes has problems with the GCC collect2 program.  For some
# reason, if we set the COLLECT_NAMES environment variable, the problems
# vanish in a puff of smoke.
if test "X${COLLECT_NAMES+set}" != Xset; then
  COLLECT_NAMES=
  export COLLECT_NAMES
fi
_LT_EOF
    ;;
  esac

  _LT_PROG_LTMAIN

  # We use sed instead of cat because bash on DJGPP gets confused if
  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
  # text mode, it properly converts lines to CR/LF.  This bash problem
  # is reportedly fixed, but why not run on old versions too?
  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
    || (rm -f "$cfgfile"; exit 1)

  _LT_PROG_XSI_SHELLFNS

  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
    || (rm -f "$cfgfile"; exit 1)

  mv -f "$cfgfile" "$ofile" ||
    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
  chmod +x "$ofile"
],
[cat <<_LT_EOF >> "$ofile"

dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
dnl in a comment (ie after a #).
# ### BEGIN LIBTOOL TAG CONFIG: $1
_LT_LIBTOOL_TAG_VARS(_LT_TAG)
# ### END LIBTOOL TAG CONFIG: $1
_LT_EOF
])dnl /m4_if
],
[m4_if([$1], [], [
    PACKAGE='$PACKAGE'
    VERSION='$VERSION'
    TIMESTAMP='$TIMESTAMP'
    RM='$RM'
    ofile='$ofile'], [])
])dnl /_LT_CONFIG_SAVE_COMMANDS
])# _LT_CONFIG


# LT_SUPPORTED_TAG(TAG)
# ---------------------
# Trace this macro to discover what tags are supported by the libtool
# --tag option, using:
#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
AC_DEFUN([LT_SUPPORTED_TAG], [])


# C support is built-in for now
m4_define([_LT_LANG_C_enabled], [])
m4_define([_LT_TAGS], [])


# LT_LANG(LANG)
# -------------
# Enable libtool support for the given language if not already enabled.
AC_DEFUN([LT_LANG],
[AC_BEFORE([$0], [LT_OUTPUT])dnl
m4_case([$1],
  [C],			[_LT_LANG(C)],
  [C++],		[_LT_LANG(CXX)],
  [Java],		[_LT_LANG(GCJ)],
  [Fortran 77],		[_LT_LANG(F77)],
  [Fortran],		[_LT_LANG(FC)],
  [Windows Resource],	[_LT_LANG(RC)],
  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
    [_LT_LANG($1)],
    [m4_fatal([$0: unsupported language: "$1"])])])dnl
])# LT_LANG


# _LT_LANG(LANGNAME)
# ------------------
m4_defun([_LT_LANG],
[m4_ifdef([_LT_LANG_]$1[_enabled], [],
  [LT_SUPPORTED_TAG([$1])dnl
  m4_append([_LT_TAGS], [$1 ])dnl
  m4_define([_LT_LANG_]$1[_enabled], [])dnl
  _LT_LANG_$1_CONFIG($1)])dnl
])# _LT_LANG


# _LT_LANG_DEFAULT_CONFIG
# -----------------------
m4_defun([_LT_LANG_DEFAULT_CONFIG],
[AC_PROVIDE_IFELSE([AC_PROG_CXX],
  [LT_LANG(CXX)],
  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])

AC_PROVIDE_IFELSE([AC_PROG_F77],
  [LT_LANG(F77)],
  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])

AC_PROVIDE_IFELSE([AC_PROG_FC],
  [LT_LANG(FC)],
  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])

dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
dnl pulling things in needlessly.
AC_PROVIDE_IFELSE([AC_PROG_GCJ],
  [LT_LANG(GCJ)],
  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
    [LT_LANG(GCJ)],
    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
      [LT_LANG(GCJ)],
      [m4_ifdef([AC_PROG_GCJ],
	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
       m4_ifdef([A][M_PROG_GCJ],
	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
       m4_ifdef([LT_PROG_GCJ],
	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])

AC_PROVIDE_IFELSE([LT_PROG_RC],
  [LT_LANG(RC)],
  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
])# _LT_LANG_DEFAULT_CONFIG

# Obsolete macros:
AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
dnl AC_DEFUN([AC_LIBTOOL_F77], [])
dnl AC_DEFUN([AC_LIBTOOL_FC], [])
dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])


# _LT_TAG_COMPILER
# ----------------
m4_defun([_LT_TAG_COMPILER],
[AC_REQUIRE([AC_PROG_CC])dnl

_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl

# If no C compiler was specified, use CC.
LTCC=${LTCC-"$CC"}

# If no C compiler flags were specified, use CFLAGS.
LTCFLAGS=${LTCFLAGS-"$CFLAGS"}

# Allow CC to be a program name with arguments.
compiler=$CC
])# _LT_TAG_COMPILER


# _LT_COMPILER_BOILERPLATE
# ------------------------
# Check for compiler boilerplate output or warnings with
# the simple compiler test code.
m4_defun([_LT_COMPILER_BOILERPLATE],
[m4_require([_LT_DECL_SED])dnl
ac_outfile=conftest.$ac_objext
echo "$lt_simple_compile_test_code" >conftest.$ac_ext
eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_compiler_boilerplate=`cat conftest.err`
$RM conftest*
])# _LT_COMPILER_BOILERPLATE


# _LT_LINKER_BOILERPLATE
# ----------------------
# Check for linker boilerplate output or warnings with
# the simple link test code.
m4_defun([_LT_LINKER_BOILERPLATE],
[m4_require([_LT_DECL_SED])dnl
ac_outfile=conftest.$ac_objext
echo "$lt_simple_link_test_code" >conftest.$ac_ext
eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_linker_boilerplate=`cat conftest.err`
$RM -r conftest*
])# _LT_LINKER_BOILERPLATE

# _LT_REQUIRED_DARWIN_CHECKS
# -------------------------
m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
  case $host_os in
    rhapsody* | darwin*)
    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
    AC_CHECK_TOOL([LIPO], [lipo], [:])
    AC_CHECK_TOOL([OTOOL], [otool], [:])
    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
    _LT_DECL([], [DSYMUTIL], [1],
      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
    _LT_DECL([], [NMEDIT], [1],
      [Tool to change global to local symbols on Mac OS X])
    _LT_DECL([], [LIPO], [1],
      [Tool to manipulate fat objects and archives on Mac OS X])
    _LT_DECL([], [OTOOL], [1],
      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
    _LT_DECL([], [OTOOL64], [1],
      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])

    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
      [lt_cv_apple_cc_single_mod=no
      if test -z "${LT_MULTI_MODULE}"; then
	# By default we will add the -single_module flag. You can override
	# by either setting the environment variable LT_MULTI_MODULE
	# non-empty at configure time, or by adding -multi_module to the
	# link flags.
	rm -rf libconftest.dylib*
	echo "int foo(void){return 1;}" > conftest.c
	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
        _lt_result=$?
	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
	  lt_cv_apple_cc_single_mod=yes
	else
	  cat conftest.err >&AS_MESSAGE_LOG_FD
	fi
	rm -rf libconftest.dylib*
	rm -f conftest.*
      fi])
    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
      [lt_cv_ld_exported_symbols_list],
      [lt_cv_ld_exported_symbols_list=no
      save_LDFLAGS=$LDFLAGS
      echo "_main" > conftest.sym
      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
	[lt_cv_ld_exported_symbols_list=yes],
	[lt_cv_ld_exported_symbols_list=no])
	LDFLAGS="$save_LDFLAGS"
    ])
    case $host_os in
    rhapsody* | darwin1.[[012]])
      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
    darwin1.*)
      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
    darwin*) # darwin 5.x on
      # if running on 10.5 or later, the deployment target defaults
      # to the OS version, if on x86, and 10.4, the deployment
      # target defaults to 10.4. Don't you love it?
      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
	10.[[012]]*)
	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
	10.*)
	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
      esac
    ;;
  esac
    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
      _lt_dar_single_mod='$single_module'
    fi
    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
    else
      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
    fi
    if test "$DSYMUTIL" != ":"; then
      _lt_dsymutil='~$DSYMUTIL $lib || :'
    else
      _lt_dsymutil=
    fi
    ;;
  esac
])


# _LT_DARWIN_LINKER_FEATURES
# --------------------------
# Checks for linker and compiler features on darwin
m4_defun([_LT_DARWIN_LINKER_FEATURES],
[
  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
  _LT_TAGVAR(hardcode_direct, $1)=no
  _LT_TAGVAR(hardcode_automatic, $1)=yes
  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
  _LT_TAGVAR(link_all_deplibs, $1)=yes
  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
  case $cc_basename in
     ifort*) _lt_dar_can_shared=yes ;;
     *) _lt_dar_can_shared=$GCC ;;
  esac
  if test "$_lt_dar_can_shared" = "yes"; then
    output_verbose_link_cmd=echo
    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
    m4_if([$1], [CXX],
[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
    fi
],[])
  else
  _LT_TAGVAR(ld_shlibs, $1)=no
  fi
])

# _LT_SYS_MODULE_PATH_AIX
# -----------------------
# Links a minimal program and checks the executable
# for the system default hardcoded library path. In most cases,
# this is /usr/lib:/lib, but when the MPI compilers are used
# the location of the communication and MPI libs are included too.
# If we don't find anything, use the default library path according
# to the aix ld manual.
m4_defun([_LT_SYS_MODULE_PATH_AIX],
[m4_require([_LT_DECL_SED])dnl
AC_LINK_IFELSE(AC_LANG_PROGRAM,[
lt_aix_libpath_sed='
    /Import File Strings/,/^$/ {
	/^0/ {
	    s/^0  *\(.*\)$/\1/
	    p
	}
    }'
aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
# Check for a 64-bit object if we didn't find anything.
if test -z "$aix_libpath"; then
  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
fi],[])
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
])# _LT_SYS_MODULE_PATH_AIX


# _LT_SHELL_INIT(ARG)
# -------------------
m4_define([_LT_SHELL_INIT],
[ifdef([AC_DIVERSION_NOTICE],
	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
	 [AC_DIVERT_PUSH(NOTICE)])
$1
AC_DIVERT_POP
])# _LT_SHELL_INIT


# _LT_PROG_ECHO_BACKSLASH
# -----------------------
# Add some code to the start of the generated configure script which
# will find an echo command which doesn't interpret backslashes.
m4_defun([_LT_PROG_ECHO_BACKSLASH],
[_LT_SHELL_INIT([
# Check that we are running under the correct shell.
SHELL=${CONFIG_SHELL-/bin/sh}

case X$lt_ECHO in
X*--fallback-echo)
  # Remove one level of quotation (which was required for Make).
  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
  ;;
esac

ECHO=${lt_ECHO-echo}
if test "X[$]1" = X--no-reexec; then
  # Discard the --no-reexec flag, and continue.
  shift
elif test "X[$]1" = X--fallback-echo; then
  # Avoid inline document here, it may be left over
  :
elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
  # Yippee, $ECHO works!
  :
else
  # Restart under the correct shell.
  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
fi

if test "X[$]1" = X--fallback-echo; then
  # used as fallback echo
  shift
  cat <<_LT_EOF
[$]*
_LT_EOF
  exit 0
fi

# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

if test -z "$lt_ECHO"; then
  if test "X${echo_test_string+set}" != Xset; then
    # find a string as large as possible, as long as the shell can cope with it
    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
      then
        break
      fi
    done
  fi

  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
     test "X$echo_testing_string" = "X$echo_test_string"; then
    :
  else
    # The Solaris, AIX, and Digital Unix default echo programs unquote
    # backslashes.  This makes it impossible to quote backslashes using
    #   echo "$something" | sed 's/\\/\\\\/g'
    #
    # So, first we look for a working echo in the user's PATH.

    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
    for dir in $PATH /usr/ucb; do
      IFS="$lt_save_ifs"
      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        ECHO="$dir/echo"
        break
      fi
    done
    IFS="$lt_save_ifs"

    if test "X$ECHO" = Xecho; then
      # We didn't find a better echo, so look for alternatives.
      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
         test "X$echo_testing_string" = "X$echo_test_string"; then
        # This shell has a builtin print -r that does the trick.
        ECHO='print -r'
      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
	   test "X$CONFIG_SHELL" != X/bin/ksh; then
        # If we have ksh, try running configure again with it.
        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
        export ORIGINAL_CONFIG_SHELL
        CONFIG_SHELL=/bin/ksh
        export CONFIG_SHELL
        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
      else
        # Try using printf.
        ECHO='printf %s\n'
        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
	   test "X$echo_testing_string" = "X$echo_test_string"; then
	  # Cool, printf works
	  :
        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
	     test "X$echo_testing_string" = 'X\t' &&
	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
	     test "X$echo_testing_string" = "X$echo_test_string"; then
	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
	  export CONFIG_SHELL
	  SHELL="$CONFIG_SHELL"
	  export SHELL
	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
	     test "X$echo_testing_string" = 'X\t' &&
	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
	     test "X$echo_testing_string" = "X$echo_test_string"; then
	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
        else
	  # maybe with a smaller string...
	  prev=:

	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
	    then
	      break
	    fi
	    prev="$cmd"
	  done

	  if test "$prev" != 'sed 50q "[$]0"'; then
	    echo_test_string=`eval $prev`
	    export echo_test_string
	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
	  else
	    # Oops.  We lost completely, so just stick with echo.
	    ECHO=echo
	  fi
        fi
      fi
    fi
  fi
fi

# Copy echo and quote the copy suitably for passing to libtool from
# the Makefile, instead of quoting the original, which is used later.
lt_ECHO=$ECHO
if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
fi

AC_SUBST(lt_ECHO)
])
_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
_LT_DECL([], [ECHO], [1],
    [An echo program that does not interpret backslashes])
])# _LT_PROG_ECHO_BACKSLASH


# _LT_ENABLE_LOCK
# ---------------
m4_defun([_LT_ENABLE_LOCK],
[AC_ARG_ENABLE([libtool-lock],
  [AS_HELP_STRING([--disable-libtool-lock],
    [avoid locking (might break parallel builds)])])
test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes

# Some flags need to be propagated to the compiler or linker for good
# libtool support.
case $host in
ia64-*-hpux*)
  # Find out which ABI we are using.
  echo 'int i;' > conftest.$ac_ext
  if AC_TRY_EVAL(ac_compile); then
    case `/usr/bin/file conftest.$ac_objext` in
      *ELF-32*)
	HPUX_IA64_MODE="32"
	;;
      *ELF-64*)
	HPUX_IA64_MODE="64"
	;;
    esac
  fi
  rm -rf conftest*
  ;;
*-*-irix6*)
  # Find out which ABI we are using.
  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
  if AC_TRY_EVAL(ac_compile); then
    if test "$lt_cv_prog_gnu_ld" = yes; then
      case `/usr/bin/file conftest.$ac_objext` in
	*32-bit*)
	  LD="${LD-ld} -melf32bsmip"
	  ;;
	*N32*)
	  LD="${LD-ld} -melf32bmipn32"
	  ;;
	*64-bit*)
	  LD="${LD-ld} -melf64bmip"
	;;
      esac
    else
      case `/usr/bin/file conftest.$ac_objext` in
	*32-bit*)
	  LD="${LD-ld} -32"
	  ;;
	*N32*)
	  LD="${LD-ld} -n32"
	  ;;
	*64-bit*)
	  LD="${LD-ld} -64"
	  ;;
      esac
    fi
  fi
  rm -rf conftest*
  ;;

x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
  # Find out which ABI we are using.
  echo 'int i;' > conftest.$ac_ext
  if AC_TRY_EVAL(ac_compile); then
    case `/usr/bin/file conftest.o` in
      *32-bit*)
	case $host in
	  x86_64-*kfreebsd*-gnu)
	    LD="${LD-ld} -m elf_i386_fbsd"
	    ;;
	  x86_64-*linux*)
	    LD="${LD-ld} -m elf_i386"
	    ;;
	  ppc64-*linux*|powerpc64-*linux*)
	    LD="${LD-ld} -m elf32ppclinux"
	    ;;
	  s390x-*linux*)
	    LD="${LD-ld} -m elf_s390"
	    ;;
	  sparc64-*linux*)
	    LD="${LD-ld} -m elf32_sparc"
	    ;;
	esac
	;;
      *64-bit*)
	case $host in
	  x86_64-*kfreebsd*-gnu)
	    LD="${LD-ld} -m elf_x86_64_fbsd"
	    ;;
	  x86_64-*linux*)
	    LD="${LD-ld} -m elf_x86_64"
	    ;;
	  ppc*-*linux*|powerpc*-*linux*)
	    LD="${LD-ld} -m elf64ppc"
	    ;;
	  s390*-*linux*|s390*-*tpf*)
	    LD="${LD-ld} -m elf64_s390"
	    ;;
	  sparc*-*linux*)
	    LD="${LD-ld} -m elf64_sparc"
	    ;;
	esac
	;;
    esac
  fi
  rm -rf conftest*
  ;;

*-*-sco3.2v5*)
  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
  SAVE_CFLAGS="$CFLAGS"
  CFLAGS="$CFLAGS -belf"
  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
    [AC_LANG_PUSH(C)
     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
     AC_LANG_POP])
  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
    CFLAGS="$SAVE_CFLAGS"
  fi
  ;;
sparc*-*solaris*)
  # Find out which ABI we are using.
  echo 'int i;' > conftest.$ac_ext
  if AC_TRY_EVAL(ac_compile); then
    case `/usr/bin/file conftest.o` in
    *64-bit*)
      case $lt_cv_prog_gnu_ld in
      yes*) LD="${LD-ld} -m elf64_sparc" ;;
      *)
	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
	  LD="${LD-ld} -64"
	fi
	;;
      esac
      ;;
    esac
  fi
  rm -rf conftest*
  ;;
esac

need_locks="$enable_libtool_lock"
])# _LT_ENABLE_LOCK


# _LT_CMD_OLD_ARCHIVE
# -------------------
m4_defun([_LT_CMD_OLD_ARCHIVE],
[AC_CHECK_TOOL(AR, ar, false)
test -z "$AR" && AR=ar
test -z "$AR_FLAGS" && AR_FLAGS=cru
_LT_DECL([], [AR], [1], [The archiver])
_LT_DECL([], [AR_FLAGS], [1])

AC_CHECK_TOOL(STRIP, strip, :)
test -z "$STRIP" && STRIP=:
_LT_DECL([], [STRIP], [1], [A symbol stripping program])

AC_CHECK_TOOL(RANLIB, ranlib, :)
test -z "$RANLIB" && RANLIB=:
_LT_DECL([], [RANLIB], [1],
    [Commands used to install an old-style archive])

# Determine commands to create old-style static archives.
old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
old_postinstall_cmds='chmod 644 $oldlib'
old_postuninstall_cmds=

if test -n "$RANLIB"; then
  case $host_os in
  openbsd*)
    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
    ;;
  *)
    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
    ;;
  esac
  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
fi
_LT_DECL([], [old_postinstall_cmds], [2])
_LT_DECL([], [old_postuninstall_cmds], [2])
_LT_TAGDECL([], [old_archive_cmds], [2],
    [Commands used to build an old-style archive])
])# _LT_CMD_OLD_ARCHIVE


# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
# ----------------------------------------------------------------
# Check whether the given compiler option works
AC_DEFUN([_LT_COMPILER_OPTION],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_SED])dnl
AC_CACHE_CHECK([$1], [$2],
  [$2=no
   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
   lt_compiler_flag="$3"
   # Insert the option either (1) after the last *FLAGS variable, or
   # (2) before a word containing "conftest.", or (3) at the end.
   # Note that $ac_compile itself does not contain backslashes and begins
   # with a dollar sign (not a hyphen), so the echo should work correctly.
   # The option is referenced via a variable to avoid confusing sed.
   lt_compile=`echo "$ac_compile" | $SED \
   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
   -e 's:$: $lt_compiler_flag:'`
   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
   (eval "$lt_compile" 2>conftest.err)
   ac_status=$?
   cat conftest.err >&AS_MESSAGE_LOG_FD
   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
   if (exit $ac_status) && test -s "$ac_outfile"; then
     # The compiler can only warn and ignore the option if not recognized
     # So say no if there are warnings other than the usual output.
     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
       $2=yes
     fi
   fi
   $RM conftest*
])

if test x"[$]$2" = xyes; then
    m4_if([$5], , :, [$5])
else
    m4_if([$6], , :, [$6])
fi
])# _LT_COMPILER_OPTION

# Old name:
AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])


# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
#                  [ACTION-SUCCESS], [ACTION-FAILURE])
# ----------------------------------------------------
# Check whether the given linker option works
AC_DEFUN([_LT_LINKER_OPTION],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_SED])dnl
AC_CACHE_CHECK([$1], [$2],
  [$2=no
   save_LDFLAGS="$LDFLAGS"
   LDFLAGS="$LDFLAGS $3"
   echo "$lt_simple_link_test_code" > conftest.$ac_ext
   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
     # The linker can only warn and ignore the option if not recognized
     # So say no if there are warnings
     if test -s conftest.err; then
       # Append any errors to the config.log.
       cat conftest.err 1>&AS_MESSAGE_LOG_FD
       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
       if diff conftest.exp conftest.er2 >/dev/null; then
         $2=yes
       fi
     else
       $2=yes
     fi
   fi
   $RM -r conftest*
   LDFLAGS="$save_LDFLAGS"
])

if test x"[$]$2" = xyes; then
    m4_if([$4], , :, [$4])
else
    m4_if([$5], , :, [$5])
fi
])# _LT_LINKER_OPTION

# Old name:
AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])


# LT_CMD_MAX_LEN
#---------------
AC_DEFUN([LT_CMD_MAX_LEN],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
# find the maximum length of command line arguments
AC_MSG_CHECKING([the maximum length of command line arguments])
AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
  i=0
  teststring="ABCD"

  case $build_os in
  msdosdjgpp*)
    # On DJGPP, this test can blow up pretty badly due to problems in libc
    # (any single argument exceeding 2000 bytes causes a buffer overrun
    # during glob expansion).  Even if it were fixed, the result of this
    # check would be larger than it should be.
    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
    ;;

  gnu*)
    # Under GNU Hurd, this test is not required because there is
    # no limit to the length of command line arguments.
    # Libtool will interpret -1 as no limit whatsoever
    lt_cv_sys_max_cmd_len=-1;
    ;;

  cygwin* | mingw* | cegcc*)
    # On Win9x/ME, this test blows up -- it succeeds, but takes
    # about 5 minutes as the teststring grows exponentially.
    # Worse, since 9x/ME are not pre-emptively multitasking,
    # you end up with a "frozen" computer, even though with patience
    # the test eventually succeeds (with a max line length of 256k).
    # Instead, let's just punt: use the minimum linelength reported by
    # all of the supported platforms: 8192 (on NT/2K/XP).
    lt_cv_sys_max_cmd_len=8192;
    ;;

  amigaos*)
    # On AmigaOS with pdksh, this test takes hours, literally.
    # So we just punt and use a minimum line length of 8192.
    lt_cv_sys_max_cmd_len=8192;
    ;;

  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
    # This has been around since 386BSD, at least.  Likely further.
    if test -x /sbin/sysctl; then
      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
    elif test -x /usr/sbin/sysctl; then
      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
    else
      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
    fi
    # And add a safety zone
    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
    ;;

  interix*)
    # We know the value 262144 and hardcode it with a safety zone (like BSD)
    lt_cv_sys_max_cmd_len=196608
    ;;

  osf*)
    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
    # nice to cause kernel panics so lets avoid the loop below.
    # First set a reasonable default.
    lt_cv_sys_max_cmd_len=16384
    #
    if test -x /sbin/sysconfig; then
      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
        *1*) lt_cv_sys_max_cmd_len=-1 ;;
      esac
    fi
    ;;
  sco3.2v5*)
    lt_cv_sys_max_cmd_len=102400
    ;;
  sysv5* | sco5v6* | sysv4.2uw2*)
    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
    if test -n "$kargmax"; then
      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
    else
      lt_cv_sys_max_cmd_len=32768
    fi
    ;;
  *)
    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
    if test -n "$lt_cv_sys_max_cmd_len"; then
      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
    else
      # Make teststring a little bigger before we do anything with it.
      # a 1K string should be a reasonable start.
      for i in 1 2 3 4 5 6 7 8 ; do
        teststring=$teststring$teststring
      done
      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
      # If test is not a shell built-in, we'll probably end up computing a
      # maximum length that is only half of the actual maximum length, but
      # we can't tell.
      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
	      test $i != 17 # 1/2 MB should be enough
      do
        i=`expr $i + 1`
        teststring=$teststring$teststring
      done
      # Only check the string length outside the loop.
      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
      teststring=
      # Add a significant safety factor because C++ compilers can tack on
      # massive amounts of additional arguments before passing them to the
      # linker.  It appears as though 1/2 is a usable value.
      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
    fi
    ;;
  esac
])
if test -n $lt_cv_sys_max_cmd_len ; then
  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
else
  AC_MSG_RESULT(none)
fi
max_cmd_len=$lt_cv_sys_max_cmd_len
_LT_DECL([], [max_cmd_len], [0],
    [What is the maximum length of a command?])
])# LT_CMD_MAX_LEN

# Old name:
AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])


# _LT_HEADER_DLFCN
# ----------------
m4_defun([_LT_HEADER_DLFCN],
[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
])# _LT_HEADER_DLFCN


# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
# ----------------------------------------------------------------
m4_defun([_LT_TRY_DLOPEN_SELF],
[m4_require([_LT_HEADER_DLFCN])dnl
if test "$cross_compiling" = yes; then :
  [$4]
else
  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
  lt_status=$lt_dlunknown
  cat > conftest.$ac_ext <<_LT_EOF
[#line __oline__ "configure"
#include "confdefs.h"

#if HAVE_DLFCN_H
#include <dlfcn.h>
#endif

#include <stdio.h>

#ifdef RTLD_GLOBAL
#  define LT_DLGLOBAL		RTLD_GLOBAL
#else
#  ifdef DL_GLOBAL
#    define LT_DLGLOBAL		DL_GLOBAL
#  else
#    define LT_DLGLOBAL		0
#  endif
#endif

/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
   find out it does not work in some platform. */
#ifndef LT_DLLAZY_OR_NOW
#  ifdef RTLD_LAZY
#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
#  else
#    ifdef DL_LAZY
#      define LT_DLLAZY_OR_NOW		DL_LAZY
#    else
#      ifdef RTLD_NOW
#        define LT_DLLAZY_OR_NOW	RTLD_NOW
#      else
#        ifdef DL_NOW
#          define LT_DLLAZY_OR_NOW	DL_NOW
#        else
#          define LT_DLLAZY_OR_NOW	0
#        endif
#      endif
#    endif
#  endif
#endif

void fnord() { int i=42;}
int main ()
{
  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
  int status = $lt_dlunknown;

  if (self)
    {
      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
      /* dlclose (self); */
    }
  else
    puts (dlerror ());

  return status;
}]
_LT_EOF
  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
    lt_status=$?
    case x$lt_status in
      x$lt_dlno_uscore) $1 ;;
      x$lt_dlneed_uscore) $2 ;;
      x$lt_dlunknown|x*) $3 ;;
    esac
  else :
    # compilation failed
    $3
  fi
fi
rm -fr conftest*
])# _LT_TRY_DLOPEN_SELF


# LT_SYS_DLOPEN_SELF
# ------------------
AC_DEFUN([LT_SYS_DLOPEN_SELF],
[m4_require([_LT_HEADER_DLFCN])dnl
if test "x$enable_dlopen" != xyes; then
  enable_dlopen=unknown
  enable_dlopen_self=unknown
  enable_dlopen_self_static=unknown
else
  lt_cv_dlopen=no
  lt_cv_dlopen_libs=

  case $host_os in
  beos*)
    lt_cv_dlopen="load_add_on"
    lt_cv_dlopen_libs=
    lt_cv_dlopen_self=yes
    ;;

  mingw* | pw32* | cegcc*)
    lt_cv_dlopen="LoadLibrary"
    lt_cv_dlopen_libs=
    ;;

  cygwin*)
    lt_cv_dlopen="dlopen"
    lt_cv_dlopen_libs=
    ;;

  darwin*)
  # if libdl is installed we need to link against it
    AC_CHECK_LIB([dl], [dlopen],
		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
    lt_cv_dlopen="dyld"
    lt_cv_dlopen_libs=
    lt_cv_dlopen_self=yes
    ])
    ;;

  *)
    AC_CHECK_FUNC([shl_load],
	  [lt_cv_dlopen="shl_load"],
      [AC_CHECK_LIB([dld], [shl_load],
	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
	[AC_CHECK_FUNC([dlopen],
	      [lt_cv_dlopen="dlopen"],
	  [AC_CHECK_LIB([dl], [dlopen],
		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
	    [AC_CHECK_LIB([svld], [dlopen],
		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
	      [AC_CHECK_LIB([dld], [dld_link],
		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
	      ])
	    ])
	  ])
	])
      ])
    ;;
  esac

  if test "x$lt_cv_dlopen" != xno; then
    enable_dlopen=yes
  else
    enable_dlopen=no
  fi

  case $lt_cv_dlopen in
  dlopen)
    save_CPPFLAGS="$CPPFLAGS"
    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"

    save_LDFLAGS="$LDFLAGS"
    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"

    save_LIBS="$LIBS"
    LIBS="$lt_cv_dlopen_libs $LIBS"

    AC_CACHE_CHECK([whether a program can dlopen itself],
	  lt_cv_dlopen_self, [dnl
	  _LT_TRY_DLOPEN_SELF(
	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
    ])

    if test "x$lt_cv_dlopen_self" = xyes; then
      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
	  lt_cv_dlopen_self_static, [dnl
	  _LT_TRY_DLOPEN_SELF(
	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
      ])
    fi

    CPPFLAGS="$save_CPPFLAGS"
    LDFLAGS="$save_LDFLAGS"
    LIBS="$save_LIBS"
    ;;
  esac

  case $lt_cv_dlopen_self in
  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
  *) enable_dlopen_self=unknown ;;
  esac

  case $lt_cv_dlopen_self_static in
  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
  *) enable_dlopen_self_static=unknown ;;
  esac
fi
_LT_DECL([dlopen_support], [enable_dlopen], [0],
	 [Whether dlopen is supported])
_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
	 [Whether dlopen of programs is supported])
_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
	 [Whether dlopen of statically linked programs is supported])
])# LT_SYS_DLOPEN_SELF

# Old name:
AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])


# _LT_COMPILER_C_O([TAGNAME])
# ---------------------------
# Check to see if options -c and -o are simultaneously supported by compiler.
# This macro does not hard code the compiler like AC_PROG_CC_C_O.
m4_defun([_LT_COMPILER_C_O],
[m4_require([_LT_DECL_SED])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_TAG_COMPILER])dnl
AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
   $RM -r conftest 2>/dev/null
   mkdir conftest
   cd conftest
   mkdir out
   echo "$lt_simple_compile_test_code" > conftest.$ac_ext

   lt_compiler_flag="-o out/conftest2.$ac_objext"
   # Insert the option either (1) after the last *FLAGS variable, or
   # (2) before a word containing "conftest.", or (3) at the end.
   # Note that $ac_compile itself does not contain backslashes and begins
   # with a dollar sign (not a hyphen), so the echo should work correctly.
   lt_compile=`echo "$ac_compile" | $SED \
   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
   -e 's:$: $lt_compiler_flag:'`
   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
   (eval "$lt_compile" 2>out/conftest.err)
   ac_status=$?
   cat out/conftest.err >&AS_MESSAGE_LOG_FD
   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
   if (exit $ac_status) && test -s out/conftest2.$ac_objext
   then
     # The compiler can only warn and ignore the option if not recognized
     # So say no if there are warnings
     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
     fi
   fi
   chmod u+w . 2>&AS_MESSAGE_LOG_FD
   $RM conftest*
   # SGI C++ compiler will create directory out/ii_files/ for
   # template instantiation
   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
   $RM out/* && rmdir out
   cd ..
   $RM -r conftest
   $RM conftest*
])
_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
	[Does compiler simultaneously support -c and -o options?])
])# _LT_COMPILER_C_O


# _LT_COMPILER_FILE_LOCKS([TAGNAME])
# ----------------------------------
# Check to see if we can do hard links to lock some files if needed
m4_defun([_LT_COMPILER_FILE_LOCKS],
[m4_require([_LT_ENABLE_LOCK])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
_LT_COMPILER_C_O([$1])

hard_links="nottested"
if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
  # do not overwrite the value of need_locks provided by the user
  AC_MSG_CHECKING([if we can lock with hard links])
  hard_links=yes
  $RM conftest*
  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  touch conftest.a
  ln conftest.a conftest.b 2>&5 || hard_links=no
  ln conftest.a conftest.b 2>/dev/null && hard_links=no
  AC_MSG_RESULT([$hard_links])
  if test "$hard_links" = no; then
    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
    need_locks=warn
  fi
else
  need_locks=no
fi
_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
])# _LT_COMPILER_FILE_LOCKS


# _LT_CHECK_OBJDIR
# ----------------
m4_defun([_LT_CHECK_OBJDIR],
[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
[rm -f .libs 2>/dev/null
mkdir .libs 2>/dev/null
if test -d .libs; then
  lt_cv_objdir=.libs
else
  # MS-DOS does not allow filenames that begin with a dot.
  lt_cv_objdir=_libs
fi
rmdir .libs 2>/dev/null])
objdir=$lt_cv_objdir
_LT_DECL([], [objdir], [0],
         [The name of the directory that contains temporary libtool files])dnl
m4_pattern_allow([LT_OBJDIR])dnl
AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
  [Define to the sub-directory in which libtool stores uninstalled libraries.])
])# _LT_CHECK_OBJDIR


# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
# --------------------------------------
# Check hardcoding attributes.
m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
[AC_MSG_CHECKING([how to hardcode library paths into programs])
_LT_TAGVAR(hardcode_action, $1)=
if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then

  # We can hardcode non-existent directories.
  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
     # If the only mechanism to avoid hardcoding is shlibpath_var, we
     # have to relink, otherwise we might link with an installed library
     # when we should be linking with a yet-to-be-installed one
     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
    # Linking always hardcodes the temporary library directory.
    _LT_TAGVAR(hardcode_action, $1)=relink
  else
    # We can link without hardcoding, and we can hardcode nonexisting dirs.
    _LT_TAGVAR(hardcode_action, $1)=immediate
  fi
else
  # We cannot hardcode anything, or else we can only hardcode existing
  # directories.
  _LT_TAGVAR(hardcode_action, $1)=unsupported
fi
AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])

if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
  # Fast installation is not supported
  enable_fast_install=no
elif test "$shlibpath_overrides_runpath" = yes ||
     test "$enable_shared" = no; then
  # Fast installation is not necessary
  enable_fast_install=needless
fi
_LT_TAGDECL([], [hardcode_action], [0],
    [How to hardcode a shared library path into an executable])
])# _LT_LINKER_HARDCODE_LIBPATH


# _LT_CMD_STRIPLIB
# ----------------
m4_defun([_LT_CMD_STRIPLIB],
[m4_require([_LT_DECL_EGREP])
striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
  AC_MSG_RESULT([yes])
else
# FIXME - insert some real tests, host_os isn't really good enough
  case $host_os in
  darwin*)
    if test -n "$STRIP" ; then
      striplib="$STRIP -x"
      old_striplib="$STRIP -S"
      AC_MSG_RESULT([yes])
    else
      AC_MSG_RESULT([no])
    fi
    ;;
  *)
    AC_MSG_RESULT([no])
    ;;
  esac
fi
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
_LT_DECL([], [striplib], [1])
])# _LT_CMD_STRIPLIB


# _LT_SYS_DYNAMIC_LINKER([TAG])
# -----------------------------
# PORTME Fill in your ld.so characteristics
m4_defun([_LT_SYS_DYNAMIC_LINKER],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_OBJDUMP])dnl
m4_require([_LT_DECL_SED])dnl
AC_MSG_CHECKING([dynamic linker characteristics])
m4_if([$1],
	[], [
if test "$GCC" = yes; then
  case $host_os in
    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
    *) lt_awk_arg="/^libraries:/" ;;
  esac
  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
    # if the path contains ";" then we assume it to be the separator
    # otherwise default to the standard path separator (i.e. ":") - it is
    # assumed that no part of a normal pathname contains ";" but that should
    # okay in the real world where ";" in dirpaths is itself problematic.
    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
  else
    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
  fi
  # Ok, now we have the path, separated by spaces, we can step through it
  # and add multilib dir if necessary.
  lt_tmp_lt_search_path_spec=
  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
  for lt_sys_path in $lt_search_path_spec; do
    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
    else
      test -d "$lt_sys_path" && \
	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
    fi
  done
  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
BEGIN {RS=" "; FS="/|\n";} {
  lt_foo="";
  lt_count=0;
  for (lt_i = NF; lt_i > 0; lt_i--) {
    if ($lt_i != "" && $lt_i != ".") {
      if ($lt_i == "..") {
        lt_count++;
      } else {
        if (lt_count == 0) {
          lt_foo="/" $lt_i lt_foo;
        } else {
          lt_count--;
        }
      }
    }
  }
  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
}'`
  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
else
  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi])
library_names_spec=
libname_spec='lib$name'
soname_spec=
shrext_cmds=".so"
postinstall_cmds=
postuninstall_cmds=
finish_cmds=
finish_eval=
shlibpath_var=
shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
need_lib_prefix=unknown
hardcode_into_libs=no

# when you set need_version to no, make sure it does not cause -set_version
# flags to be left without arguments
need_version=unknown

case $host_os in
aix3*)
  version_type=linux
  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
  shlibpath_var=LIBPATH

  # AIX 3 has no versioning support, so we append a major version to the name.
  soname_spec='${libname}${release}${shared_ext}$major'
  ;;

aix[[4-9]]*)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  hardcode_into_libs=yes
  if test "$host_cpu" = ia64; then
    # AIX 5 supports IA64
    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
    shlibpath_var=LD_LIBRARY_PATH
  else
    # With GCC up to 2.95.x, collect2 would create an import file
    # for dependence libraries.  The import file would start with
    # the line `#! .'.  This would cause the generated library to
    # depend on `.', always an invalid library.  This was fixed in
    # development snapshots of GCC prior to 3.0.
    case $host_os in
      aix4 | aix4.[[01]] | aix4.[[01]].*)
      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
	   echo ' yes '
	   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
	:
      else
	can_build_shared=no
      fi
      ;;
    esac
    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
    # soname into executable. Probably we can add versioning support to
    # collect2, so additional links can be useful in future.
    if test "$aix_use_runtimelinking" = yes; then
      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
      # instead of lib<name>.a to let people know that these are not
      # typical AIX shared libraries.
      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
    else
      # We preserve .a as extension for shared libraries through AIX4.2
      # and later when we are not doing run time linking.
      library_names_spec='${libname}${release}.a $libname.a'
      soname_spec='${libname}${release}${shared_ext}$major'
    fi
    shlibpath_var=LIBPATH
  fi
  ;;

amigaos*)
  case $host_cpu in
  powerpc)
    # Since July 2007 AmigaOS4 officially supports .so libraries.
    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
    ;;
  m68k)
    library_names_spec='$libname.ixlibrary $libname.a'
    # Create ${libname}_ixlibrary.a entries in /sys/libs.
    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
    ;;
  esac
  ;;

beos*)
  library_names_spec='${libname}${shared_ext}'
  dynamic_linker="$host_os ld.so"
  shlibpath_var=LIBRARY_PATH
  ;;

bsdi[[45]]*)
  version_type=linux
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
  # the default ld.so.conf also contains /usr/contrib/lib and
  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
  # libtool to hard-code these into programs
  ;;

cygwin* | mingw* | pw32* | cegcc*)
  version_type=windows
  shrext_cmds=".dll"
  need_version=no
  need_lib_prefix=no

  case $GCC,$host_os in
  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
    library_names_spec='$libname.dll.a'
    # DLL is installed to $(libdir)/../bin by postinstall_cmds
    postinstall_cmds='base_file=`basename \${file}`~
      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
      dldir=$destdir/`dirname \$dlpath`~
      test -d \$dldir || mkdir -p \$dldir~
      $install_prog $dir/$dlname \$dldir/$dlname~
      chmod a+x \$dldir/$dlname~
      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
      fi'
    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
      dlpath=$dir/\$dldll~
       $RM \$dlpath'
    shlibpath_overrides_runpath=yes

    case $host_os in
    cygwin*)
      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
      ;;
    mingw* | cegcc*)
      # MinGW DLLs use traditional 'lib' prefix
      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
        # It is most probably a Windows format PATH printed by
        # mingw gcc, but we are running on Cygwin. Gcc prints its search
        # path with ; separators, and with drive letters. We can handle the
        # drive letters (cygwin fileutils understands them), so leave them,
        # especially as we might pass files found there to a mingw objdump,
        # which wouldn't understand a cygwinified path. Ahh.
        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
      else
        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
      fi
      ;;
    pw32*)
      # pw32 DLLs use 'pw' prefix rather than 'lib'
      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
      ;;
    esac
    ;;

  *)
    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
    ;;
  esac
  dynamic_linker='Win32 ld.exe'
  # FIXME: first we should search . and the directory the executable is in
  shlibpath_var=PATH
  ;;

darwin* | rhapsody*)
  dynamic_linker="$host_os dyld"
  version_type=darwin
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
  soname_spec='${libname}${release}${major}$shared_ext'
  shlibpath_overrides_runpath=yes
  shlibpath_var=DYLD_LIBRARY_PATH
  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
m4_if([$1], [],[
  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
  ;;

dgux*)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

freebsd1*)
  dynamic_linker=no
  ;;

freebsd* | dragonfly*)
  # DragonFly does not have aout.  When/if they implement a new
  # versioning mechanism, adjust this.
  if test -x /usr/bin/objformat; then
    objformat=`/usr/bin/objformat`
  else
    case $host_os in
    freebsd[[123]]*) objformat=aout ;;
    *) objformat=elf ;;
    esac
  fi
  version_type=freebsd-$objformat
  case $version_type in
    freebsd-elf*)
      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
      need_version=no
      need_lib_prefix=no
      ;;
    freebsd-*)
      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
      need_version=yes
      ;;
  esac
  shlibpath_var=LD_LIBRARY_PATH
  case $host_os in
  freebsd2*)
    shlibpath_overrides_runpath=yes
    ;;
  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
    shlibpath_overrides_runpath=no
    hardcode_into_libs=yes
    ;;
  *) # from 4.6 on, and DragonFly
    shlibpath_overrides_runpath=yes
    hardcode_into_libs=yes
    ;;
  esac
  ;;

gnu*)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  hardcode_into_libs=yes
  ;;

hpux9* | hpux10* | hpux11*)
  # Give a soname corresponding to the major version so that dld.sl refuses to
  # link against other versions.
  version_type=sunos
  need_lib_prefix=no
  need_version=no
  case $host_cpu in
  ia64*)
    shrext_cmds='.so'
    hardcode_into_libs=yes
    dynamic_linker="$host_os dld.so"
    shlibpath_var=LD_LIBRARY_PATH
    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
    soname_spec='${libname}${release}${shared_ext}$major'
    if test "X$HPUX_IA64_MODE" = X32; then
      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
    else
      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
    fi
    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
    ;;
  hppa*64*)
    shrext_cmds='.sl'
    hardcode_into_libs=yes
    dynamic_linker="$host_os dld.sl"
    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
    soname_spec='${libname}${release}${shared_ext}$major'
    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
    ;;
  *)
    shrext_cmds='.sl'
    dynamic_linker="$host_os dld.sl"
    shlibpath_var=SHLIB_PATH
    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
    soname_spec='${libname}${release}${shared_ext}$major'
    ;;
  esac
  # HP-UX runs *really* slowly unless shared libraries are mode 555.
  postinstall_cmds='chmod 555 $lib'
  ;;

interix[[3-9]]*)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=no
  hardcode_into_libs=yes
  ;;

irix5* | irix6* | nonstopux*)
  case $host_os in
    nonstopux*) version_type=nonstopux ;;
    *)
	if test "$lt_cv_prog_gnu_ld" = yes; then
		version_type=linux
	else
		version_type=irix
	fi ;;
  esac
  need_lib_prefix=no
  need_version=no
  soname_spec='${libname}${release}${shared_ext}$major'
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
  case $host_os in
  irix5* | nonstopux*)
    libsuff= shlibsuff=
    ;;
  *)
    case $LD in # libtool.m4 will add one of these switches to LD
    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
      libsuff= shlibsuff= libmagic=32-bit;;
    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
      libsuff=32 shlibsuff=N32 libmagic=N32;;
    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
      libsuff=64 shlibsuff=64 libmagic=64-bit;;
    *) libsuff= shlibsuff= libmagic=never-match;;
    esac
    ;;
  esac
  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
  shlibpath_overrides_runpath=no
  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
  hardcode_into_libs=yes
  ;;

# No shared lib support for Linux oldld, aout, or coff.
linux*oldld* | linux*aout* | linux*coff*)
  dynamic_linker=no
  ;;

# This must be Linux ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=no
  # Some binutils ld are patched to set DT_RUNPATH
  save_LDFLAGS=$LDFLAGS
  save_libdir=$libdir
  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
       [shlibpath_overrides_runpath=yes])])
  LDFLAGS=$save_LDFLAGS
  libdir=$save_libdir

  # This implies no fast_install, which is unacceptable.
  # Some rework will be needed to allow for fast_install
  # before this can be enabled.
  hardcode_into_libs=yes

  # Append ld.so.conf contents to the search path
  if test -f /etc/ld.so.conf; then
    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
  fi

  # We used to test for /lib/ld.so.1 and disable shared libraries on
  # powerpc, because MkLinux only supported shared libraries with the
  # GNU dynamic linker.  Since this was broken with cross compilers,
  # most powerpc-linux boxes support dynamic linking these days and
  # people can always --disable-shared, the test was removed, and we
  # assume the GNU/Linux dynamic linker is in use.
  dynamic_linker='GNU/Linux ld.so'
  ;;

netbsdelf*-gnu)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=no
  hardcode_into_libs=yes
  dynamic_linker='NetBSD ld.elf_so'
  ;;

netbsd*)
  version_type=sunos
  need_lib_prefix=no
  need_version=no
  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
    dynamic_linker='NetBSD (a.out) ld.so'
  else
    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
    soname_spec='${libname}${release}${shared_ext}$major'
    dynamic_linker='NetBSD ld.elf_so'
  fi
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=yes
  hardcode_into_libs=yes
  ;;

newsos6)
  version_type=linux
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=yes
  ;;

*nto* | *qnx*)
  version_type=qnx
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=no
  hardcode_into_libs=yes
  dynamic_linker='ldqnx.so'
  ;;

openbsd*)
  version_type=sunos
  sys_lib_dlsearch_path_spec="/usr/lib"
  need_lib_prefix=no
  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
  case $host_os in
    openbsd3.3 | openbsd3.3.*)	need_version=yes ;;
    *)				need_version=no  ;;
  esac
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
    case $host_os in
      openbsd2.[[89]] | openbsd2.[[89]].*)
	shlibpath_overrides_runpath=no
	;;
      *)
	shlibpath_overrides_runpath=yes
	;;
      esac
  else
    shlibpath_overrides_runpath=yes
  fi
  ;;

os2*)
  libname_spec='$name'
  shrext_cmds=".dll"
  need_lib_prefix=no
  library_names_spec='$libname${shared_ext} $libname.a'
  dynamic_linker='OS/2 ld.exe'
  shlibpath_var=LIBPATH
  ;;

osf3* | osf4* | osf5*)
  version_type=osf
  need_lib_prefix=no
  need_version=no
  soname_spec='${libname}${release}${shared_ext}$major'
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  shlibpath_var=LD_LIBRARY_PATH
  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
  ;;

rdos*)
  dynamic_linker=no
  ;;

solaris*)
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=yes
  hardcode_into_libs=yes
  # ldd complains unless libraries are executable
  postinstall_cmds='chmod +x $lib'
  ;;

sunos4*)
  version_type=sunos
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=yes
  if test "$with_gnu_ld" = yes; then
    need_lib_prefix=no
  fi
  need_version=yes
  ;;

sysv4 | sysv4.3*)
  version_type=linux
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  case $host_vendor in
    sni)
      shlibpath_overrides_runpath=no
      need_lib_prefix=no
      runpath_var=LD_RUN_PATH
      ;;
    siemens)
      need_lib_prefix=no
      ;;
    motorola)
      need_lib_prefix=no
      need_version=no
      shlibpath_overrides_runpath=no
      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
      ;;
  esac
  ;;

sysv4*MP*)
  if test -d /usr/nec ;then
    version_type=linux
    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
    soname_spec='$libname${shared_ext}.$major'
    shlibpath_var=LD_LIBRARY_PATH
  fi
  ;;

sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
  version_type=freebsd-elf
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=yes
  hardcode_into_libs=yes
  if test "$with_gnu_ld" = yes; then
    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
  else
    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
    case $host_os in
      sco3.2v5*)
        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
	;;
    esac
  fi
  sys_lib_dlsearch_path_spec='/usr/lib'
  ;;

tpf*)
  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
  version_type=linux
  need_lib_prefix=no
  need_version=no
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  shlibpath_var=LD_LIBRARY_PATH
  shlibpath_overrides_runpath=no
  hardcode_into_libs=yes
  ;;

uts4*)
  version_type=linux
  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
  soname_spec='${libname}${release}${shared_ext}$major'
  shlibpath_var=LD_LIBRARY_PATH
  ;;

*)
  dynamic_linker=no
  ;;
esac
AC_MSG_RESULT([$dynamic_linker])
test "$dynamic_linker" = no && can_build_shared=no

variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
if test "$GCC" = yes; then
  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi

if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
fi
if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
fi

_LT_DECL([], [variables_saved_for_relink], [1],
    [Variables whose values should be saved in libtool wrapper scripts and
    restored at link time])
_LT_DECL([], [need_lib_prefix], [0],
    [Do we need the "lib" prefix for modules?])
_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
_LT_DECL([], [version_type], [0], [Library versioning type])
_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
_LT_DECL([], [shlibpath_overrides_runpath], [0],
    [Is shlibpath searched before the hard-coded library search path?])
_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
_LT_DECL([], [library_names_spec], [1],
    [[List of archive names.  First name is the real one, the rest are links.
    The last name is the one that the linker finds with -lNAME]])
_LT_DECL([], [soname_spec], [1],
    [[The coded name of the library, if different from the real name]])
_LT_DECL([], [postinstall_cmds], [2],
    [Command to use after installation of a shared archive])
_LT_DECL([], [postuninstall_cmds], [2],
    [Command to use after uninstallation of a shared archive])
_LT_DECL([], [finish_cmds], [2],
    [Commands used to finish a libtool library installation in a directory])
_LT_DECL([], [finish_eval], [1],
    [[As "finish_cmds", except a single script fragment to be evaled but
    not shown]])
_LT_DECL([], [hardcode_into_libs], [0],
    [Whether we should hardcode library paths into libraries])
_LT_DECL([], [sys_lib_search_path_spec], [2],
    [Compile-time system search path for libraries])
_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
    [Run-time system search path for libraries])
])# _LT_SYS_DYNAMIC_LINKER


# _LT_PATH_TOOL_PREFIX(TOOL)
# --------------------------
# find a file program which can recognize shared library
AC_DEFUN([_LT_PATH_TOOL_PREFIX],
[m4_require([_LT_DECL_EGREP])dnl
AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
[case $MAGIC_CMD in
[[\\/*] |  ?:[\\/]*])
  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
  ;;
*)
  lt_save_MAGIC_CMD="$MAGIC_CMD"
  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
dnl $ac_dummy forces splitting on constant user-supplied paths.
dnl POSIX.2 word splitting is done only on the output of word expansions,
dnl not every word.  This closes a longstanding sh security hole.
  ac_dummy="m4_if([$2], , $PATH, [$2])"
  for ac_dir in $ac_dummy; do
    IFS="$lt_save_ifs"
    test -z "$ac_dir" && ac_dir=.
    if test -f $ac_dir/$1; then
      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
      if test -n "$file_magic_test_file"; then
	case $deplibs_check_method in
	"file_magic "*)
	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
	    $EGREP "$file_magic_regex" > /dev/null; then
	    :
	  else
	    cat <<_LT_EOF 1>&2

*** Warning: the command libtool uses to detect shared libraries,
*** $file_magic_cmd, produces output that libtool cannot recognize.
*** The result is that libtool may fail to recognize shared libraries
*** as such.  This will affect the creation of libtool libraries that
*** depend on shared libraries, but programs linked with such libtool
*** libraries will work regardless of this problem.  Nevertheless, you
*** may want to report the problem to your system manager and/or to
*** bug-libtool@gnu.org

_LT_EOF
	  fi ;;
	esac
      fi
      break
    fi
  done
  IFS="$lt_save_ifs"
  MAGIC_CMD="$lt_save_MAGIC_CMD"
  ;;
esac])
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if test -n "$MAGIC_CMD"; then
  AC_MSG_RESULT($MAGIC_CMD)
else
  AC_MSG_RESULT(no)
fi
_LT_DECL([], [MAGIC_CMD], [0],
	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
])# _LT_PATH_TOOL_PREFIX

# Old name:
AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])


# _LT_PATH_MAGIC
# --------------
# find a file program which can recognize a shared library
m4_defun([_LT_PATH_MAGIC],
[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
if test -z "$lt_cv_path_MAGIC_CMD"; then
  if test -n "$ac_tool_prefix"; then
    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
  else
    MAGIC_CMD=:
  fi
fi
])# _LT_PATH_MAGIC


# LT_PATH_LD
# ----------
# find the pathname to the GNU or non-GNU linker
AC_DEFUN([LT_PATH_LD],
[AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_DECL_EGREP])dnl

AC_ARG_WITH([gnu-ld],
    [AS_HELP_STRING([--with-gnu-ld],
	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
    [test "$withval" = no || with_gnu_ld=yes],
    [with_gnu_ld=no])dnl

ac_prog=ld
if test "$GCC" = yes; then
  # Check if gcc -print-prog-name=ld gives a path.
  AC_MSG_CHECKING([for ld used by $CC])
  case $host in
  *-*-mingw*)
    # gcc leaves a trailing carriage return which upsets mingw
    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
  *)
    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
  esac
  case $ac_prog in
    # Accept absolute paths.
    [[\\/]]* | ?:[[\\/]]*)
      re_direlt='/[[^/]][[^/]]*/\.\./'
      # Canonicalize the pathname of ld
      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
      done
      test -z "$LD" && LD="$ac_prog"
      ;;
  "")
    # If it fails, then pretend we aren't using GCC.
    ac_prog=ld
    ;;
  *)
    # If it is relative, then search for the first ld in PATH.
    with_gnu_ld=unknown
    ;;
  esac
elif test "$with_gnu_ld" = yes; then
  AC_MSG_CHECKING([for GNU ld])
else
  AC_MSG_CHECKING([for non-GNU ld])
fi
AC_CACHE_VAL(lt_cv_path_LD,
[if test -z "$LD"; then
  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
  for ac_dir in $PATH; do
    IFS="$lt_save_ifs"
    test -z "$ac_dir" && ac_dir=.
    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
      lt_cv_path_LD="$ac_dir/$ac_prog"
      # Check to see if the program is GNU ld.  I'd rather use --version,
      # but apparently some variants of GNU ld only accept -v.
      # Break only if it was the GNU/non-GNU ld that we prefer.
      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
      *GNU* | *'with BFD'*)
	test "$with_gnu_ld" != no && break
	;;
      *)
	test "$with_gnu_ld" != yes && break
	;;
      esac
    fi
  done
  IFS="$lt_save_ifs"
else
  lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
LD="$lt_cv_path_LD"
if test -n "$LD"; then
  AC_MSG_RESULT($LD)
else
  AC_MSG_RESULT(no)
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
_LT_PATH_LD_GNU
AC_SUBST([LD])

_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
])# LT_PATH_LD

# Old names:
AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_PROG_LD], [])
dnl AC_DEFUN([AC_PROG_LD], [])


# _LT_PATH_LD_GNU
#- --------------
m4_defun([_LT_PATH_LD_GNU],
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
[# I'd rather use --version here, but apparently some GNU lds only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
  lt_cv_prog_gnu_ld=yes
  ;;
*)
  lt_cv_prog_gnu_ld=no
  ;;
esac])
with_gnu_ld=$lt_cv_prog_gnu_ld
])# _LT_PATH_LD_GNU


# _LT_CMD_RELOAD
# --------------
# find reload flag for linker
#   -- PORTME Some linkers may need a different reload flag.
m4_defun([_LT_CMD_RELOAD],
[AC_CACHE_CHECK([for $LD option to reload object files],
  lt_cv_ld_reload_flag,
  [lt_cv_ld_reload_flag='-r'])
reload_flag=$lt_cv_ld_reload_flag
case $reload_flag in
"" | " "*) ;;
*) reload_flag=" $reload_flag" ;;
esac
reload_cmds='$LD$reload_flag -o $output$reload_objs'
case $host_os in
  darwin*)
    if test "$GCC" = yes; then
      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
    else
      reload_cmds='$LD$reload_flag -o $output$reload_objs'
    fi
    ;;
esac
_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
_LT_DECL([], [reload_cmds], [2])dnl
])# _LT_CMD_RELOAD


# _LT_CHECK_MAGIC_METHOD
# ----------------------
# how to check for library dependencies
#  -- PORTME fill in with the dynamic library characteristics
m4_defun([_LT_CHECK_MAGIC_METHOD],
[m4_require([_LT_DECL_EGREP])
m4_require([_LT_DECL_OBJDUMP])
AC_CACHE_CHECK([how to recognize dependent libraries],
lt_cv_deplibs_check_method,
[lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
lt_cv_deplibs_check_method='unknown'
# Need to set the preceding variable on all platforms that support
# interlibrary dependencies.
# 'none' -- dependencies not supported.
# `unknown' -- same as none, but documents that we really don't know.
# 'pass_all' -- all dependencies passed with no checks.
# 'test_compile' -- check by making test program.
# 'file_magic [[regex]]' -- check by looking for files in library path
# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.

case $host_os in
aix[[4-9]]*)
  lt_cv_deplibs_check_method=pass_all
  ;;

beos*)
  lt_cv_deplibs_check_method=pass_all
  ;;

bsdi[[45]]*)
  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
  lt_cv_file_magic_cmd='/usr/bin/file -L'
  lt_cv_file_magic_test_file=/shlib/libc.so
  ;;

cygwin*)
  # func_win32_libid is a shell function defined in ltmain.sh
  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
  lt_cv_file_magic_cmd='func_win32_libid'
  ;;

mingw* | pw32*)
  # Base MSYS/MinGW do not provide the 'file' command needed by
  # func_win32_libid shell function, so use a weaker test based on 'objdump',
  # unless we find 'file', for example because we are cross-compiling.
  if ( file / ) >/dev/null 2>&1; then
    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
    lt_cv_file_magic_cmd='func_win32_libid'
  else
    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
    lt_cv_file_magic_cmd='$OBJDUMP -f'
  fi
  ;;

cegcc)
  # use the weaker test based on 'objdump'. See mingw*.
  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
  lt_cv_file_magic_cmd='$OBJDUMP -f'
  ;;

darwin* | rhapsody*)
  lt_cv_deplibs_check_method=pass_all
  ;;

freebsd* | dragonfly*)
  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
    case $host_cpu in
    i*86 )
      # Not sure whether the presence of OpenBSD here was a mistake.
      # Let's accept both of them until this is cleared up.
      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
      lt_cv_file_magic_cmd=/usr/bin/file
      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
      ;;
    esac
  else
    lt_cv_deplibs_check_method=pass_all
  fi
  ;;

gnu*)
  lt_cv_deplibs_check_method=pass_all
  ;;

hpux10.20* | hpux11*)
  lt_cv_file_magic_cmd=/usr/bin/file
  case $host_cpu in
  ia64*)
    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
    ;;
  hppa*64*)
    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
    ;;
  *)
    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
    lt_cv_file_magic_test_file=/usr/lib/libc.sl
    ;;
  esac
  ;;

interix[[3-9]]*)
  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
  ;;

irix5* | irix6* | nonstopux*)
  case $LD in
  *-32|*"-32 ") libmagic=32-bit;;
  *-n32|*"-n32 ") libmagic=N32;;
  *-64|*"-64 ") libmagic=64-bit;;
  *) libmagic=never-match;;
  esac
  lt_cv_deplibs_check_method=pass_all
  ;;

# This must be Linux ELF.
linux* | k*bsd*-gnu | kopensolaris*-gnu)
  lt_cv_deplibs_check_method=pass_all
  ;;

netbsd* | netbsdelf*-gnu)
  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
  else
    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
  fi
  ;;

newos6*)
  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
  lt_cv_file_magic_cmd=/usr/bin/file
  lt_cv_file_magic_test_file=/usr/lib/libnls.so
  ;;

*nto* | *qnx*)
  lt_cv_deplibs_check_method=pass_all
  ;;

openbsd*)
  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
  else
    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
  fi
  ;;

osf3* | osf4* | osf5*)
  lt_cv_deplibs_check_method=pass_all
  ;;

rdos*)
  lt_cv_deplibs_check_method=pass_all
  ;;

solaris*)
  lt_cv_deplibs_check_method=pass_all
  ;;

sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
  lt_cv_deplibs_check_method=pass_all
  ;;

sysv4 | sysv4.3*)
  case $host_vendor in
  motorola)
    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
    ;;
  ncr)
    lt_cv_deplibs_check_method=pass_all
    ;;
  sequent)
    lt_cv_file_magic_cmd='/bin/file'
    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
    ;;
  sni)
    lt_cv_file_magic_cmd='/bin/file'
    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
    lt_cv_file_magic_test_file=/lib/libc.so
    ;;
  siemens)
    lt_cv_deplibs_check_method=pass_all
    ;;
  pc)
    lt_cv_deplibs_check_method=pass_all
    ;;
  esac
  ;;

tpf*)
  lt_cv_deplibs_check_method=pass_all
  ;;
esac
])
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
test -z "$deplibs_check_method" && deplibs_check_method=unknown

_LT_DECL([], [deplibs_check_method], [1],
    [Method to check whether dependent libraries are shared objects])
_LT_DECL([], [file_magic_cmd], [1],
    [Command to use when deplibs_check_method == "file_magic"])
])# _LT_CHECK_MAGIC_METHOD


# LT_PATH_NM
# ----------
# find the pathname to a BSD- or MS-compatible name lister
AC_DEFUN([LT_PATH_NM],
[AC_REQUIRE([AC_PROG_CC])dnl
AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
[if test -n "$NM"; then
  # Let the user override the test.
  lt_cv_path_NM="$NM"
else
  lt_nm_to_check="${ac_tool_prefix}nm"
  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
    lt_nm_to_check="$lt_nm_to_check nm"
  fi
  for lt_tmp_nm in $lt_nm_to_check; do
    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
      IFS="$lt_save_ifs"
      test -z "$ac_dir" && ac_dir=.
      tmp_nm="$ac_dir/$lt_tmp_nm"
      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
	# Check to see if the nm accepts a BSD-compat flag.
	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
	#   nm: unknown option "B" ignored
	# Tru64's nm complains that /dev/null is an invalid object file
	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
	*/dev/null* | *'Invalid file or object type'*)
	  lt_cv_path_NM="$tmp_nm -B"
	  break
	  ;;
	*)
	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
	  */dev/null*)
	    lt_cv_path_NM="$tmp_nm -p"
	    break
	    ;;
	  *)
	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
	    continue # so that we can try to find one that supports BSD flags
	    ;;
	  esac
	  ;;
	esac
      fi
    done
    IFS="$lt_save_ifs"
  done
  : ${lt_cv_path_NM=no}
fi])
if test "$lt_cv_path_NM" != "no"; then
  NM="$lt_cv_path_NM"
else
  # Didn't find any BSD compatible name lister, look for dumpbin.
  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
  AC_SUBST([DUMPBIN])
  if test "$DUMPBIN" != ":"; then
    NM="$DUMPBIN"
  fi
fi
test -z "$NM" && NM=nm
AC_SUBST([NM])
_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl

AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
  [lt_cv_nm_interface="BSD nm"
  echo "int some_variable = 0;" > conftest.$ac_ext
  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
  (eval "$ac_compile" 2>conftest.err)
  cat conftest.err >&AS_MESSAGE_LOG_FD
  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
  cat conftest.err >&AS_MESSAGE_LOG_FD
  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
  cat conftest.out >&AS_MESSAGE_LOG_FD
  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
    lt_cv_nm_interface="MS dumpbin"
  fi
  rm -f conftest*])
])# LT_PATH_NM

# Old names:
AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_PROG_NM], [])
dnl AC_DEFUN([AC_PROG_NM], [])


# LT_LIB_M
# --------
# check for math library
AC_DEFUN([LT_LIB_M],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case $host in
*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
  # These system don't have libm, or don't need it
  ;;
*-ncr-sysv4.3*)
  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
  ;;
*)
  AC_CHECK_LIB(m, cos, LIBM="-lm")
  ;;
esac
AC_SUBST([LIBM])
])# LT_LIB_M

# Old name:
AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_CHECK_LIBM], [])


# _LT_COMPILER_NO_RTTI([TAGNAME])
# -------------------------------
m4_defun([_LT_COMPILER_NO_RTTI],
[m4_require([_LT_TAG_COMPILER])dnl

_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=

if test "$GCC" = yes; then
  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'

  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
    lt_cv_prog_compiler_rtti_exceptions,
    [-fno-rtti -fno-exceptions], [],
    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
fi
_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
	[Compiler flag to turn off builtin functions])
])# _LT_COMPILER_NO_RTTI


# _LT_CMD_GLOBAL_SYMBOLS
# ----------------------
m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([LT_PATH_NM])dnl
AC_REQUIRE([LT_PATH_LD])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_TAG_COMPILER])dnl

# Check for command to grab the raw symbol name followed by C symbol from nm.
AC_MSG_CHECKING([command to parse $NM output from $compiler object])
AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
[
# These are sane defaults that work on at least a few old systems.
# [They come from Ultrix.  What could be older than Ultrix?!! ;)]

# Character class describing NM global symbol codes.
symcode='[[BCDEGRST]]'

# Regexp to match symbols that can be accessed directly from C.
sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'

# Define system-specific variables.
case $host_os in
aix*)
  symcode='[[BCDT]]'
  ;;
cygwin* | mingw* | pw32* | cegcc*)
  symcode='[[ABCDGISTW]]'
  ;;
hpux*)
  if test "$host_cpu" = ia64; then
    symcode='[[ABCDEGRST]]'
  fi
  ;;
irix* | nonstopux*)
  symcode='[[BCDEGRST]]'
  ;;
osf*)
  symcode='[[BCDEGQRST]]'
  ;;
solaris*)
  symcode='[[BDRT]]'
  ;;
sco3.2v5*)
  symcode='[[DT]]'
  ;;
sysv4.2uw2*)
  symcode='[[DT]]'
  ;;
sysv5* | sco5v6* | unixware* | OpenUNIX*)
  symcode='[[ABDT]]'
  ;;
sysv4)
  symcode='[[DFNSTU]]'
  ;;
esac

# If we're using GNU nm, then use its standard symbol codes.
case `$NM -V 2>&1` in
*GNU* | *'with BFD'*)
  symcode='[[ABCDGIRSTW]]' ;;
esac

# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"

# Transform an extracted symbol line into symbol name and symbol address
lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"

# Handle CRLF in mingw tool chain
opt_cr=
case $build_os in
mingw*)
  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
  ;;
esac

# Try without a prefix underscore, then with it.
for ac_symprfx in "" "_"; do

  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
  symxfrm="\\1 $ac_symprfx\\2 \\2"

  # Write the raw and C identifiers.
  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
    # Fake it for dumpbin and say T for any non-static function
    # and D for any global variable.
    # Also find C++ and __fastcall symbols from MSVC++,
    # which start with @ or ?.
    lt_cv_sys_global_symbol_pipe="$AWK ['"\
"     {last_section=section; section=\$ 3};"\
"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
"     \$ 0!~/External *\|/{next};"\
"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
"     {if(hide[section]) next};"\
"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
"     ' prfx=^$ac_symprfx]"
  else
    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
  fi

  # Check to see that the pipe works correctly.
  pipe_works=no

  rm -f conftest*
  cat > conftest.$ac_ext <<_LT_EOF
#ifdef __cplusplus
extern "C" {
#endif
char nm_test_var;
void nm_test_func(void);
void nm_test_func(void){}
#ifdef __cplusplus
}
#endif
int main(){nm_test_var='a';nm_test_func();return(0);}
_LT_EOF

  if AC_TRY_EVAL(ac_compile); then
    # Now try to grab the symbols.
    nlist=conftest.nm
    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
      # Try sorting and uniquifying the output.
      if sort "$nlist" | uniq > "$nlist"T; then
	mv -f "$nlist"T "$nlist"
      else
	rm -f "$nlist"T
      fi

      # Make sure that we snagged all the symbols we need.
      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
	  cat <<_LT_EOF > conftest.$ac_ext
#ifdef __cplusplus
extern "C" {
#endif

_LT_EOF
	  # Now generate the symbol file.
	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'

	  cat <<_LT_EOF >> conftest.$ac_ext

/* The mapping between symbol names and symbols.  */
const struct {
  const char *name;
  void       *address;
}
lt__PROGRAM__LTX_preloaded_symbols[[]] =
{
  { "@PROGRAM@", (void *) 0 },
_LT_EOF
	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
	  cat <<\_LT_EOF >> conftest.$ac_ext
  {0, (void *) 0}
};

/* This works around a problem in FreeBSD linker */
#ifdef FREEBSD_WORKAROUND
static const void *lt_preloaded_setup() {
  return lt__PROGRAM__LTX_preloaded_symbols;
}
#endif

#ifdef __cplusplus
}
#endif
_LT_EOF
	  # Now try linking the two files.
	  mv conftest.$ac_objext conftstm.$ac_objext
	  lt_save_LIBS="$LIBS"
	  lt_save_CFLAGS="$CFLAGS"
	  LIBS="conftstm.$ac_objext"
	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
	    pipe_works=yes
	  fi
	  LIBS="$lt_save_LIBS"
	  CFLAGS="$lt_save_CFLAGS"
	else
	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
	fi
      else
	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
      fi
    else
      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
    fi
  else
    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
    cat conftest.$ac_ext >&5
  fi
  rm -rf conftest* conftst*

  # Do not use the global_symbol_pipe unless it works.
  if test "$pipe_works" = yes; then
    break
  else
    lt_cv_sys_global_symbol_pipe=
  fi
done
])
if test -z "$lt_cv_sys_global_symbol_pipe"; then
  lt_cv_sys_global_symbol_to_cdecl=
fi
if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
  AC_MSG_RESULT(failed)
else
  AC_MSG_RESULT(ok)
fi

_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
    [Take the output of nm and produce a listing of raw symbols and C names])
_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
    [Transform the output of nm in a proper C declaration])
_LT_DECL([global_symbol_to_c_name_address],
    [lt_cv_sys_global_symbol_to_c_name_address], [1],
    [Transform the output of nm in a C name address pair])
_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
    [Transform the output of nm in a C name address pair when lib prefix is needed])
]) # _LT_CMD_GLOBAL_SYMBOLS


# _LT_COMPILER_PIC([TAGNAME])
# ---------------------------
m4_defun([_LT_COMPILER_PIC],
[m4_require([_LT_TAG_COMPILER])dnl
_LT_TAGVAR(lt_prog_compiler_wl, $1)=
_LT_TAGVAR(lt_prog_compiler_pic, $1)=
_LT_TAGVAR(lt_prog_compiler_static, $1)=

AC_MSG_CHECKING([for $compiler option to produce PIC])
m4_if([$1], [CXX], [
  # C++ specific cases for pic, static, wl, etc.
  if test "$GXX" = yes; then
    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'

    case $host_os in
    aix*)
      # All AIX code is PIC.
      if test "$host_cpu" = ia64; then
	# AIX 5 now supports IA64 processor
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      fi
      ;;

    amigaos*)
      case $host_cpu in
      powerpc)
            # see comment about AmigaOS4 .so support
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
        ;;
      m68k)
            # FIXME: we need at least 68020 code to build shared libraries, but
            # adding the `-m68020' flag to GCC prevents building anything better,
            # like `-m68040'.
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
        ;;
      esac
      ;;

    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
      # PIC is the default for these OSes.
      ;;
    mingw* | cygwin* | os2* | pw32* | cegcc*)
      # This hack is so that the source file can tell whether it is being
      # built for inclusion in a dll (and should export symbols for example).
      # Although the cygwin gcc ignores -fPIC, still need this for old-style
      # (--disable-auto-import) libraries
      m4_if([$1], [GCJ], [],
	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
      ;;
    darwin* | rhapsody*)
      # PIC is the default on this platform
      # Common symbols not allowed in MH_DYLIB files
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
      ;;
    *djgpp*)
      # DJGPP does not support shared libraries at all
      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
      ;;
    interix[[3-9]]*)
      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
      # Instead, we relocate shared libraries at runtime.
      ;;
    sysv4*MP*)
      if test -d /usr/nec; then
	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
      fi
      ;;
    hpux*)
      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
      # sets the default TLS model and affects inlining.
      case $host_cpu in
      hppa*64*)
	;;
      *)
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
	;;
      esac
      ;;
    *qnx* | *nto*)
      # QNX uses GNU C++, but need to define -shared option too, otherwise
      # it will coredump.
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
      ;;
    *)
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
      ;;
    esac
  else
    case $host_os in
      aix[[4-9]]*)
	# All AIX code is PIC.
	if test "$host_cpu" = ia64; then
	  # AIX 5 now supports IA64 processor
	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	else
	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
	fi
	;;
      chorus*)
	case $cc_basename in
	cxch68*)
	  # Green Hills C++ Compiler
	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
	  ;;
	esac
	;;
      dgux*)
	case $cc_basename in
	  ec++*)
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	    ;;
	  ghcx*)
	    # Green Hills C++ Compiler
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
	    ;;
	  *)
	    ;;
	esac
	;;
      freebsd* | dragonfly*)
	# FreeBSD uses GNU C++
	;;
      hpux9* | hpux10* | hpux11*)
	case $cc_basename in
	  CC*)
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
	    if test "$host_cpu" != ia64; then
	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
	    fi
	    ;;
	  aCC*)
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
	    case $host_cpu in
	    hppa*64*|ia64*)
	      # +Z the default
	      ;;
	    *)
	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
	      ;;
	    esac
	    ;;
	  *)
	    ;;
	esac
	;;
      interix*)
	# This is c89, which is MS Visual C++ (no shared libs)
	# Anyone wants to do a port?
	;;
      irix5* | irix6* | nonstopux*)
	case $cc_basename in
	  CC*)
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
	    # CC pic flag -KPIC is the default.
	    ;;
	  *)
	    ;;
	esac
	;;
      linux* | k*bsd*-gnu | kopensolaris*-gnu)
	case $cc_basename in
	  KCC*)
	    # KAI C++ Compiler
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
	    ;;
	  ecpc* )
	    # old Intel C++ for x86_64 which still supported -KPIC.
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
	    ;;
	  icpc* )
	    # Intel C++, used to be incompatible with GCC.
	    # ICC 10 doesn't accept -KPIC any more.
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
	    ;;
	  pgCC* | pgcpp*)
	    # Portland Group C++ compiler
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	    ;;
	  cxx*)
	    # Compaq C++
	    # Make sure the PIC flag is empty.  It appears that all Alpha
	    # Linux and Compaq Tru64 Unix objects are PIC.
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
	    ;;
	  xlc* | xlC*)
	    # IBM XL 8.0 on PPC
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
	    ;;
	  *)
	    case `$CC -V 2>&1 | sed 5q` in
	    *Sun\ C*)
	      # Sun C++ 5.9
	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
	      ;;
	    esac
	    ;;
	esac
	;;
      lynxos*)
	;;
      m88k*)
	;;
      mvs*)
	case $cc_basename in
	  cxx*)
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
	    ;;
	  *)
	    ;;
	esac
	;;
      netbsd* | netbsdelf*-gnu)
	;;
      *qnx* | *nto*)
        # QNX uses GNU C++, but need to define -shared option too, otherwise
        # it will coredump.
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
        ;;
      osf3* | osf4* | osf5*)
	case $cc_basename in
	  KCC*)
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
	    ;;
	  RCC*)
	    # Rational C++ 2.4.1
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
	    ;;
	  cxx*)
	    # Digital/Compaq C++
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    # Make sure the PIC flag is empty.  It appears that all Alpha
	    # Linux and Compaq Tru64 Unix objects are PIC.
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
	    ;;
	  *)
	    ;;
	esac
	;;
      psos*)
	;;
      solaris*)
	case $cc_basename in
	  CC*)
	    # Sun C++ 4.2, 5.x and Centerline C++
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
	    ;;
	  gcx*)
	    # Green Hills C++ Compiler
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
	    ;;
	  *)
	    ;;
	esac
	;;
      sunos4*)
	case $cc_basename in
	  CC*)
	    # Sun C++ 4.x
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	    ;;
	  lcc*)
	    # Lucid
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
	    ;;
	  *)
	    ;;
	esac
	;;
      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
	case $cc_basename in
	  CC*)
	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	    ;;
	esac
	;;
      tandem*)
	case $cc_basename in
	  NCC*)
	    # NonStop-UX NCC 3.20
	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	    ;;
	  *)
	    ;;
	esac
	;;
      vxworks*)
	;;
      *)
	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
	;;
    esac
  fi
],
[
  if test "$GCC" = yes; then
    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'

    case $host_os in
      aix*)
      # All AIX code is PIC.
      if test "$host_cpu" = ia64; then
	# AIX 5 now supports IA64 processor
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      fi
      ;;

    amigaos*)
      case $host_cpu in
      powerpc)
            # see comment about AmigaOS4 .so support
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
        ;;
      m68k)
            # FIXME: we need at least 68020 code to build shared libraries, but
            # adding the `-m68020' flag to GCC prevents building anything better,
            # like `-m68040'.
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
        ;;
      esac
      ;;

    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
      # PIC is the default for these OSes.
      ;;

    mingw* | cygwin* | pw32* | os2* | cegcc*)
      # This hack is so that the source file can tell whether it is being
      # built for inclusion in a dll (and should export symbols for example).
      # Although the cygwin gcc ignores -fPIC, still need this for old-style
      # (--disable-auto-import) libraries
      m4_if([$1], [GCJ], [],
	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
      ;;

    darwin* | rhapsody*)
      # PIC is the default on this platform
      # Common symbols not allowed in MH_DYLIB files
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
      ;;

    hpux*)
      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
      # sets the default TLS model and affects inlining.
      case $host_cpu in
      hppa*64*)
	# +Z the default
	;;
      *)
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
	;;
      esac
      ;;

    interix[[3-9]]*)
      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
      # Instead, we relocate shared libraries at runtime.
      ;;

    msdosdjgpp*)
      # Just because we use GCC doesn't mean we suddenly get shared libraries
      # on systems that don't support them.
      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
      enable_shared=no
      ;;

    *nto* | *qnx*)
      # QNX uses GNU C++, but need to define -shared option too, otherwise
      # it will coredump.
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
      ;;

    sysv4*MP*)
      if test -d /usr/nec; then
	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
      fi
      ;;

    *)
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
      ;;
    esac
  else
    # PORTME Check for flag to pass linker flags through the system compiler.
    case $host_os in
    aix*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      if test "$host_cpu" = ia64; then
	# AIX 5 now supports IA64 processor
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      else
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
      fi
      ;;

    mingw* | cygwin* | pw32* | os2* | cegcc*)
      # This hack is so that the source file can tell whether it is being
      # built for inclusion in a dll (and should export symbols for example).
      m4_if([$1], [GCJ], [],
	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
      ;;

    hpux9* | hpux10* | hpux11*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
      # not for PA HP-UX.
      case $host_cpu in
      hppa*64*|ia64*)
	# +Z the default
	;;
      *)
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
	;;
      esac
      # Is there a better lt_prog_compiler_static that works with the bundled CC?
      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
      ;;

    irix5* | irix6* | nonstopux*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      # PIC (with -KPIC) is the default.
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
      ;;

    linux* | k*bsd*-gnu | kopensolaris*-gnu)
      case $cc_basename in
      # old Intel for x86_64 which still supported -KPIC.
      ecc*)
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
        ;;
      # icc used to be incompatible with GCC.
      # ICC 10 doesn't accept -KPIC any more.
      icc* | ifort*)
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
        ;;
      # Lahey Fortran 8.1.
      lf95*)
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
	;;
      pgcc* | pgf77* | pgf90* | pgf95*)
        # Portland Group compilers (*not* the Pentium gcc compiler,
	# which looks to be a dead project)
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        ;;
      ccc*)
        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
        # All Alpha code is PIC.
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
        ;;
      xl*)
	# IBM XL C 8.0/Fortran 10.1 on PPC
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
	;;
      *)
	case `$CC -V 2>&1 | sed 5q` in
	*Sun\ C*)
	  # Sun C 5.9
	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
	  ;;
	*Sun\ F*)
	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
	  ;;
	esac
	;;
      esac
      ;;

    newsos6)
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      ;;

    *nto* | *qnx*)
      # QNX uses GNU C++, but need to define -shared option too, otherwise
      # it will coredump.
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
      ;;

    osf3* | osf4* | osf5*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      # All OSF/1 code is PIC.
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
      ;;

    rdos*)
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
      ;;

    solaris*)
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      case $cc_basename in
      f77* | f90* | f95*)
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
      *)
	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
      esac
      ;;

    sunos4*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      ;;

    sysv4 | sysv4.2uw2* | sysv4.3*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      ;;

    sysv4*MP*)
      if test -d /usr/nec ;then
	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      fi
      ;;

    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      ;;

    unicos*)
      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
      ;;

    uts4*)
      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
      ;;

    *)
      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
      ;;
    esac
  fi
])
case $host_os in
  # For platforms which do not support PIC, -DPIC is meaningless:
  *djgpp*)
    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
    ;;
  *)
    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
    ;;
esac
AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
	[How to pass a linker flag through the compiler])

#
# Check to make sure the PIC flag actually works.
#
if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
     "" | " "*) ;;
     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
     esac],
    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
fi
_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
	[Additional compiler flags for building library objects])

#
# Check to make sure the static flag actually works.
#
wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
  $lt_tmp_static_flag,
  [],
  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
	[Compiler flag to prevent dynamic linking])
])# _LT_COMPILER_PIC


# _LT_LINKER_SHLIBS([TAGNAME])
# ----------------------------
# See if the linker supports building shared libraries.
m4_defun([_LT_LINKER_SHLIBS],
[AC_REQUIRE([LT_PATH_LD])dnl
AC_REQUIRE([LT_PATH_NM])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_EGREP])dnl
m4_require([_LT_DECL_SED])dnl
m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
m4_require([_LT_TAG_COMPILER])dnl
AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
m4_if([$1], [CXX], [
  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
  case $host_os in
  aix[[4-9]]*)
    # If we're using GNU nm, then we don't want the "-C" option.
    # -C means demangle to AIX nm, but means don't demangle with GNU nm
    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
    else
      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
    fi
    ;;
  pw32*)
    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
  ;;
  cygwin* | mingw* | cegcc*)
    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
  ;;
  linux* | k*bsd*-gnu)
    _LT_TAGVAR(link_all_deplibs, $1)=no
  ;;
  *)
    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
  ;;
  esac
  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
], [
  runpath_var=
  _LT_TAGVAR(allow_undefined_flag, $1)=
  _LT_TAGVAR(always_export_symbols, $1)=no
  _LT_TAGVAR(archive_cmds, $1)=
  _LT_TAGVAR(archive_expsym_cmds, $1)=
  _LT_TAGVAR(compiler_needs_object, $1)=no
  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
  _LT_TAGVAR(hardcode_automatic, $1)=no
  _LT_TAGVAR(hardcode_direct, $1)=no
  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
  _LT_TAGVAR(hardcode_libdir_separator, $1)=
  _LT_TAGVAR(hardcode_minus_L, $1)=no
  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
  _LT_TAGVAR(inherit_rpath, $1)=no
  _LT_TAGVAR(link_all_deplibs, $1)=unknown
  _LT_TAGVAR(module_cmds, $1)=
  _LT_TAGVAR(module_expsym_cmds, $1)=
  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
  _LT_TAGVAR(thread_safe_flag_spec, $1)=
  _LT_TAGVAR(whole_archive_flag_spec, $1)=
  # include_expsyms should be a list of space-separated symbols to be *always*
  # included in the symbol list
  _LT_TAGVAR(include_expsyms, $1)=
  # exclude_expsyms can be an extended regexp of symbols to exclude
  # it will be wrapped by ` (' and `)$', so one must not match beginning or
  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
  # as well as any symbol that contains `d'.
  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
  # platforms (ab)use it in PIC code, but their linkers get confused if
  # the symbol is explicitly referenced.  Since portable code cannot
  # rely on this symbol name, it's probably fine to never include it in
  # preloaded symbol tables.
  # Exclude shared library initialization/finalization symbols.
dnl Note also adjust exclude_expsyms for C++ above.
  extract_expsyms_cmds=

  case $host_os in
  cygwin* | mingw* | pw32* | cegcc*)
    # FIXME: the MSVC++ port hasn't been tested in a loooong time
    # When not using gcc, we currently assume that we are using
    # Microsoft Visual C++.
    if test "$GCC" != yes; then
      with_gnu_ld=no
    fi
    ;;
  interix*)
    # we just hope/assume this is gcc and not c89 (= MSVC++)
    with_gnu_ld=yes
    ;;
  openbsd*)
    with_gnu_ld=no
    ;;
  linux* | k*bsd*-gnu)
    _LT_TAGVAR(link_all_deplibs, $1)=no
    ;;
  esac

  _LT_TAGVAR(ld_shlibs, $1)=yes
  if test "$with_gnu_ld" = yes; then
    # If archive_cmds runs LD, not CC, wlarc should be empty
    wlarc='${wl}'

    # Set some defaults for GNU ld with shared library support. These
    # are reset later if shared libraries are not supported. Putting them
    # here allows them to be overridden if necessary.
    runpath_var=LD_RUN_PATH
    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
    # ancient GNU ld didn't support --whole-archive et. al.
    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
    else
      _LT_TAGVAR(whole_archive_flag_spec, $1)=
    fi
    supports_anon_versioning=no
    case `$LD -v 2>&1` in
      *GNU\ gold*) supports_anon_versioning=yes ;;
      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
      *\ 2.11.*) ;; # other 2.11 versions
      *) supports_anon_versioning=yes ;;
    esac

    # See if GNU ld supports shared libraries.
    case $host_os in
    aix[[3-9]]*)
      # On AIX/PPC, the GNU linker is very broken
      if test "$host_cpu" != ia64; then
	_LT_TAGVAR(ld_shlibs, $1)=no
	cat <<_LT_EOF 1>&2

*** Warning: the GNU linker, at least up to release 2.9.1, is reported
*** to be unable to reliably create shared libraries on AIX.
*** Therefore, libtool is disabling shared libraries support.  If you
*** really care for shared libraries, you may want to modify your PATH
*** so that a non-GNU linker is found, and then restart.

_LT_EOF
      fi
      ;;

    amigaos*)
      case $host_cpu in
      powerpc)
            # see comment about AmigaOS4 .so support
            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
            _LT_TAGVAR(archive_expsym_cmds, $1)=''
        ;;
      m68k)
            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
            _LT_TAGVAR(hardcode_minus_L, $1)=yes
        ;;
      esac
      ;;

    beos*)
      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
	# support --undefined.  This deserves some investigation.  FIXME
	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
      else
	_LT_TAGVAR(ld_shlibs, $1)=no
      fi
      ;;

    cygwin* | mingw* | pw32* | cegcc*)
      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
      # as there is no search path for DLLs.
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
      _LT_TAGVAR(always_export_symbols, $1)=no
      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'

      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
	# If the export-symbols file already is a .def file (1st line
	# is EXPORTS), use it as is; otherwise, prepend...
	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
	  cp $export_symbols $output_objdir/$soname.def;
	else
	  echo EXPORTS > $output_objdir/$soname.def;
	  cat $export_symbols >> $output_objdir/$soname.def;
	fi~
	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
      else
	_LT_TAGVAR(ld_shlibs, $1)=no
      fi
      ;;

    interix[[3-9]]*)
      _LT_TAGVAR(hardcode_direct, $1)=no
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
      # Instead, shared libraries are loaded at an image base (0x10000000 by
      # default) and relocated if they conflict, which is a slow very memory
      # consuming and fragmenting process.  To avoid this, we pick a random,
      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
      ;;

    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
      tmp_diet=no
      if test "$host_os" = linux-dietlibc; then
	case $cc_basename in
	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
	esac
      fi
      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
	 && test "$tmp_diet" = no
      then
	tmp_addflag=
	tmp_sharedflag='-shared'
	case $cc_basename,$host_cpu in
        pgcc*)				# Portland Group C compiler
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
	  tmp_addflag=' $pic_flag'
	  ;;
	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
	  tmp_addflag=' $pic_flag -Mnomain' ;;
	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
	  tmp_addflag=' -i_dynamic' ;;
	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
	  tmp_addflag=' -i_dynamic -nofor_main' ;;
	ifc* | ifort*)			# Intel Fortran compiler
	  tmp_addflag=' -nofor_main' ;;
	lf95*)				# Lahey Fortran 8.1
	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
	  tmp_sharedflag='--shared' ;;
	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
	  tmp_sharedflag='-qmkshrobj'
	  tmp_addflag= ;;
	esac
	case `$CC -V 2>&1 | sed 5q` in
	*Sun\ C*)			# Sun C 5.9
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
	  _LT_TAGVAR(compiler_needs_object, $1)=yes
	  tmp_sharedflag='-G' ;;
	*Sun\ F*)			# Sun Fortran 8.3
	  tmp_sharedflag='-G' ;;
	esac
	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'

        if test "x$supports_anon_versioning" = xyes; then
          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
	    echo "local: *; };" >> $output_objdir/$libname.ver~
	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
        fi

	case $cc_basename in
	xlf*)
	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
	  if test "x$supports_anon_versioning" = xyes; then
	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
	      echo "local: *; };" >> $output_objdir/$libname.ver~
	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
	  fi
	  ;;
	esac
      else
        _LT_TAGVAR(ld_shlibs, $1)=no
      fi
      ;;

    netbsd* | netbsdelf*-gnu)
      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
	wlarc=
      else
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      fi
      ;;

    solaris*)
      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
	_LT_TAGVAR(ld_shlibs, $1)=no
	cat <<_LT_EOF 1>&2

*** Warning: The releases 2.8.* of the GNU linker cannot reliably
*** create shared libraries on Solaris systems.  Therefore, libtool
*** is disabling shared libraries support.  We urge you to upgrade GNU
*** binutils to release 2.9.1 or newer.  Another option is to modify
*** your PATH or compiler configuration so that the native linker is
*** used, and then restart.

_LT_EOF
      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
	_LT_TAGVAR(ld_shlibs, $1)=no
      fi
      ;;

    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
      case `$LD -v 2>&1` in
        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
	_LT_TAGVAR(ld_shlibs, $1)=no
	cat <<_LT_EOF 1>&2

*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
*** reliably create shared libraries on SCO systems.  Therefore, libtool
*** is disabling shared libraries support.  We urge you to upgrade GNU
*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
*** your PATH or compiler configuration so that the native linker is
*** used, and then restart.

_LT_EOF
	;;
	*)
	  # For security reasons, it is highly recommended that you always
	  # use absolute paths for naming shared libraries, and exclude the
	  # DT_RUNPATH tag from executables and libraries.  But doing so
	  # requires that you compile everything twice, which is a pain.
	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
	  else
	    _LT_TAGVAR(ld_shlibs, $1)=no
	  fi
	;;
      esac
      ;;

    sunos4*)
      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      wlarc=
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    *)
      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
      else
	_LT_TAGVAR(ld_shlibs, $1)=no
      fi
      ;;
    esac

    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
      runpath_var=
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
      _LT_TAGVAR(whole_archive_flag_spec, $1)=
    fi
  else
    # PORTME fill in a description of your system's linker (not GNU ld)
    case $host_os in
    aix3*)
      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
      _LT_TAGVAR(always_export_symbols, $1)=yes
      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
      # Note: this linker hardcodes the directories in LIBPATH if there
      # are no directories specified by -L.
      _LT_TAGVAR(hardcode_minus_L, $1)=yes
      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
	# Neither direct hardcoding nor static linking is supported with a
	# broken collect2.
	_LT_TAGVAR(hardcode_direct, $1)=unsupported
      fi
      ;;

    aix[[4-9]]*)
      if test "$host_cpu" = ia64; then
	# On IA64, the linker does run time linking by default, so we don't
	# have to do anything special.
	aix_use_runtimelinking=no
	exp_sym_flag='-Bexport'
	no_entry_flag=""
      else
	# If we're using GNU nm, then we don't want the "-C" option.
	# -C means demangle to AIX nm, but means don't demangle with GNU nm
	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
	else
	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
	fi
	aix_use_runtimelinking=no

	# Test if we are trying to use run time linking or normal
	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
	# need to do runtime linking.
	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
	  for ld_flag in $LDFLAGS; do
	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
	    aix_use_runtimelinking=yes
	    break
	  fi
	  done
	  ;;
	esac

	exp_sym_flag='-bexport'
	no_entry_flag='-bnoentry'
      fi

      # When large executables or shared objects are built, AIX ld can
      # have problems creating the table of contents.  If linking a library
      # or program results in "error TOC overflow" add -mminimal-toc to
      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.

      _LT_TAGVAR(archive_cmds, $1)=''
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
      _LT_TAGVAR(link_all_deplibs, $1)=yes
      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'

      if test "$GCC" = yes; then
	case $host_os in aix4.[[012]]|aix4.[[012]].*)
	# We only want to do this on AIX 4.2 and lower, the check
	# below for broken collect2 doesn't work under 4.3+
	  collect2name=`${CC} -print-prog-name=collect2`
	  if test -f "$collect2name" &&
	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
	  then
	  # We have reworked collect2
	  :
	  else
	  # We have old collect2
	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
	  # It fails to find uninstalled libraries when the uninstalled
	  # path is not listed in the libpath.  Setting hardcode_minus_L
	  # to unsupported forces relinking
	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
	  fi
	  ;;
	esac
	shared_flag='-shared'
	if test "$aix_use_runtimelinking" = yes; then
	  shared_flag="$shared_flag "'${wl}-G'
	fi
	_LT_TAGVAR(link_all_deplibs, $1)=no
      else
	# not using gcc
	if test "$host_cpu" = ia64; then
	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
	# chokes on -Wl,-G. The following line is correct:
	  shared_flag='-G'
	else
	  if test "$aix_use_runtimelinking" = yes; then
	    shared_flag='${wl}-G'
	  else
	    shared_flag='${wl}-bM:SRE'
	  fi
	fi
      fi

      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
      # It seems that -bexpall does not export symbols beginning with
      # underscore (_), so it is better to generate a list of symbols to export.
      _LT_TAGVAR(always_export_symbols, $1)=yes
      if test "$aix_use_runtimelinking" = yes; then
	# Warning - without using the other runtime loading flags (-brtl),
	# -berok will link without error, but may produce a broken library.
	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
        # Determine the default libpath from the value encoded in an
        # empty executable.
        _LT_SYS_MODULE_PATH_AIX
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
      else
	if test "$host_cpu" = ia64; then
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
	else
	 # Determine the default libpath from the value encoded in an
	 # empty executable.
	 _LT_SYS_MODULE_PATH_AIX
	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
	  # Warning - without using the other run time loading flags,
	  # -berok will link without error, but may produce a broken library.
	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
	  # Exported symbols can be pulled into shared objects from archives
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
	  # This is similar to how AIX traditionally builds its shared libraries.
	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
	fi
      fi
      ;;

    amigaos*)
      case $host_cpu in
      powerpc)
            # see comment about AmigaOS4 .so support
            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
            _LT_TAGVAR(archive_expsym_cmds, $1)=''
        ;;
      m68k)
            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
            _LT_TAGVAR(hardcode_minus_L, $1)=yes
        ;;
      esac
      ;;

    bsdi[[45]]*)
      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
      ;;

    cygwin* | mingw* | pw32* | cegcc*)
      # When not using gcc, we currently assume that we are using
      # Microsoft Visual C++.
      # hardcode_libdir_flag_spec is actually meaningless, as there is
      # no search path for DLLs.
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
      # Tell ltmain to make .lib files, not .a files.
      libext=lib
      # Tell ltmain to make .dll files, not .so files.
      shrext_cmds=".dll"
      # FIXME: Setting linknames here is a bad hack.
      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
      # The linker will automatically build a .lib file if we build a DLL.
      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
      # FIXME: Should let the user specify the lib program.
      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
      ;;

    darwin* | rhapsody*)
      _LT_DARWIN_LINKER_FEATURES($1)
      ;;

    dgux*)
      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    freebsd1*)
      _LT_TAGVAR(ld_shlibs, $1)=no
      ;;

    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
    # support.  Future versions do this automatically, but an explicit c++rt0.o
    # does not break anything, and helps significantly (at the cost of a little
    # extra space).
    freebsd2.2*)
      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
    freebsd2*)
      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_minus_L, $1)=yes
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
    freebsd* | dragonfly*)
      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    hpux9*)
      if test "$GCC" = yes; then
	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
      else
	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
      fi
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
      _LT_TAGVAR(hardcode_direct, $1)=yes

      # hardcode_minus_L: Not really in the search PATH,
      # but as the default location of the library.
      _LT_TAGVAR(hardcode_minus_L, $1)=yes
      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
      ;;

    hpux10*)
      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
      else
	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
      fi
      if test "$with_gnu_ld" = no; then
	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
	_LT_TAGVAR(hardcode_direct, $1)=yes
	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
	# hardcode_minus_L: Not really in the search PATH,
	# but as the default location of the library.
	_LT_TAGVAR(hardcode_minus_L, $1)=yes
      fi
      ;;

    hpux11*)
      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
	case $host_cpu in
	hppa*64*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	ia64*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	esac
      else
	case $host_cpu in
	hppa*64*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	ia64*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	esac
      fi
      if test "$with_gnu_ld" = no; then
	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
	_LT_TAGVAR(hardcode_libdir_separator, $1)=:

	case $host_cpu in
	hppa*64*|ia64*)
	  _LT_TAGVAR(hardcode_direct, $1)=no
	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	  ;;
	*)
	  _LT_TAGVAR(hardcode_direct, $1)=yes
	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'

	  # hardcode_minus_L: Not really in the search PATH,
	  # but as the default location of the library.
	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
	  ;;
	esac
      fi
      ;;

    irix5* | irix6* | nonstopux*)
      if test "$GCC" = yes; then
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
	# Try to use the -exported_symbol ld option, if it does not
	# work, assume that -exports_file does not work either and
	# implicitly export all symbols.
        save_LDFLAGS="$LDFLAGS"
        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
        AC_LINK_IFELSE(int foo(void) {},
          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
        )
        LDFLAGS="$save_LDFLAGS"
      else
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
      fi
      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
      _LT_TAGVAR(inherit_rpath, $1)=yes
      _LT_TAGVAR(link_all_deplibs, $1)=yes
      ;;

    netbsd* | netbsdelf*-gnu)
      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
      else
	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
      fi
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    newsos6)
      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    *nto* | *qnx*)
      ;;

    openbsd*)
      if test -f /usr/libexec/ld.so; then
	_LT_TAGVAR(hardcode_direct, $1)=yes
	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
	else
	  case $host_os in
	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
	     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
	     ;;
	   *)
	     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
	     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	     ;;
	  esac
	fi
      else
	_LT_TAGVAR(ld_shlibs, $1)=no
      fi
      ;;

    os2*)
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
      _LT_TAGVAR(hardcode_minus_L, $1)=yes
      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
      ;;

    osf3*)
      if test "$GCC" = yes; then
	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
      else
	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
      fi
      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
      ;;

    osf4* | osf5*)	# as osf3* with the addition of -msym flag
      if test "$GCC" = yes; then
	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
      else
	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'

	# Both c and cxx compiler support -rpath directly
	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
      fi
      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
      ;;

    solaris*)
      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
      if test "$GCC" = yes; then
	wlarc='${wl}'
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
      else
	case `$CC -V 2>&1` in
	*"Compilers 5.0"*)
	  wlarc=''
	  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
	  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
	  ;;
	*)
	  wlarc='${wl}'
	  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
	  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
	  ;;
	esac
      fi
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      case $host_os in
      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
      *)
	# The compiler driver will combine and reorder linker options,
	# but understands `-z linker_flag'.  GCC discards it without `$wl',
	# but is careful enough not to reorder.
	# Supported since Solaris 2.6 (maybe 2.5.1?)
	if test "$GCC" = yes; then
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
	else
	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
	fi
	;;
      esac
      _LT_TAGVAR(link_all_deplibs, $1)=yes
      ;;

    sunos4*)
      if test "x$host_vendor" = xsequent; then
	# Use $CC to link under sequent, because it throws in some extra .o
	# files that make .init and .fini sections work.
	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
      else
	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
      fi
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
      _LT_TAGVAR(hardcode_direct, $1)=yes
      _LT_TAGVAR(hardcode_minus_L, $1)=yes
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    sysv4)
      case $host_vendor in
	sni)
	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
	;;
	siemens)
	  ## LD is ld it makes a PLAMLIB
	  ## CC just makes a GrossModule.
	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
	  _LT_TAGVAR(hardcode_direct, $1)=no
        ;;
	motorola)
	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
	;;
      esac
      runpath_var='LD_RUN_PATH'
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    sysv4.3*)
      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
      ;;

    sysv4*MP*)
      if test -d /usr/nec; then
	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	runpath_var=LD_RUN_PATH
	hardcode_runpath_var=yes
	_LT_TAGVAR(ld_shlibs, $1)=yes
      fi
      ;;

    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      runpath_var='LD_RUN_PATH'

      if test "$GCC" = yes; then
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      ;;

    sysv5* | sco3.2v5* | sco5v6*)
      # Note: We can NOT use -z defs as we might desire, because we do not
      # link with -lc, and that would cause any symbols used from libc to
      # always be unresolved, which means just about no library would
      # ever link correctly.  If we're not using GNU ld we use -z text
      # though, which does catch some bad symbols but isn't as heavy-handed
      # as -z defs.
      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
      _LT_TAGVAR(link_all_deplibs, $1)=yes
      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
      runpath_var='LD_RUN_PATH'

      if test "$GCC" = yes; then
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
      else
	_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
      fi
      ;;

    uts4*)
      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      ;;

    *)
      _LT_TAGVAR(ld_shlibs, $1)=no
      ;;
    esac

    if test x$host_vendor = xsni; then
      case $host in
      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
	;;
      esac
    fi
  fi
])
AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no

_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld

_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
_LT_DECL([], [extract_expsyms_cmds], [2],
    [The commands to extract the exported symbol list from a shared archive])

#
# Do we need to explicitly link libc?
#
case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
x|xyes)
  # Assume -lc should be added
  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes

  if test "$enable_shared" = yes && test "$GCC" = yes; then
    case $_LT_TAGVAR(archive_cmds, $1) in
    *'~'*)
      # FIXME: we may have to deal with multi-command sequences.
      ;;
    '$CC '*)
      # Test whether the compiler implicitly links with -lc since on some
      # systems, -lgcc has to come before -lc. If gcc already passes -lc
      # to ld, don't add -lc before -lgcc.
      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
      $RM conftest*
      echo "$lt_simple_compile_test_code" > conftest.$ac_ext

      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
        soname=conftest
        lib=conftest
        libobjs=conftest.$ac_objext
        deplibs=
        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
        compiler_flags=-v
        linker_flags=-v
        verstring=
        output_objdir=.
        libname=conftest
        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
        _LT_TAGVAR(allow_undefined_flag, $1)=
        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
        then
	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
        else
	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
        fi
        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
      else
        cat conftest.err 1>&5
      fi
      $RM conftest*
      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
      ;;
    esac
  fi
  ;;
esac

_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
    [Whether or not to add -lc for building shared libraries])
_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
    [enable_shared_with_static_runtimes], [0],
    [Whether or not to disallow shared libs when runtime libs are static])
_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
    [Compiler flag to allow reflexive dlopens])
_LT_TAGDECL([], [whole_archive_flag_spec], [1],
    [Compiler flag to generate shared objects directly from archives])
_LT_TAGDECL([], [compiler_needs_object], [1],
    [Whether the compiler copes with passing no objects directly])
_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
    [Create an old-style archive from a shared archive])
_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
    [Create a temporary old-style archive to link instead of a shared archive])
_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
_LT_TAGDECL([], [archive_expsym_cmds], [2])
_LT_TAGDECL([], [module_cmds], [2],
    [Commands used to build a loadable module if different from building
    a shared archive.])
_LT_TAGDECL([], [module_expsym_cmds], [2])
_LT_TAGDECL([], [with_gnu_ld], [1],
    [Whether we are building with GNU ld or not])
_LT_TAGDECL([], [allow_undefined_flag], [1],
    [Flag that allows shared libraries with undefined symbols to be built])
_LT_TAGDECL([], [no_undefined_flag], [1],
    [Flag that enforces no undefined symbols])
_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
    [Flag to hardcode $libdir into a binary during linking.
    This must work even if $libdir does not exist])
_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
    [[If ld is used when linking, flag to hardcode $libdir into a binary
    during linking.  This must work even if $libdir does not exist]])
_LT_TAGDECL([], [hardcode_libdir_separator], [1],
    [Whether we need a single "-rpath" flag with a separated argument])
_LT_TAGDECL([], [hardcode_direct], [0],
    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
    DIR into the resulting binary])
_LT_TAGDECL([], [hardcode_direct_absolute], [0],
    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
    DIR into the resulting binary and the resulting library dependency is
    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
    library is relocated])
_LT_TAGDECL([], [hardcode_minus_L], [0],
    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
    into the resulting binary])
_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
    into the resulting binary])
_LT_TAGDECL([], [hardcode_automatic], [0],
    [Set to "yes" if building a shared library automatically hardcodes DIR
    into the library and all subsequent libraries and executables linked
    against it])
_LT_TAGDECL([], [inherit_rpath], [0],
    [Set to yes if linker adds runtime paths of dependent libraries
    to runtime path list])
_LT_TAGDECL([], [link_all_deplibs], [0],
    [Whether libtool must link a program against all its dependency libraries])
_LT_TAGDECL([], [fix_srcfile_path], [1],
    [Fix the shell variable $srcfile for the compiler])
_LT_TAGDECL([], [always_export_symbols], [0],
    [Set to "yes" if exported symbols are required])
_LT_TAGDECL([], [export_symbols_cmds], [2],
    [The commands to list exported symbols])
_LT_TAGDECL([], [exclude_expsyms], [1],
    [Symbols that should not be listed in the preloaded symbols])
_LT_TAGDECL([], [include_expsyms], [1],
    [Symbols that must always be exported])
_LT_TAGDECL([], [prelink_cmds], [2],
    [Commands necessary for linking programs (against libraries) with templates])
_LT_TAGDECL([], [file_list_spec], [1],
    [Specify filename containing input files])
dnl FIXME: Not yet implemented
dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
dnl    [Compiler flag to generate thread safe objects])
])# _LT_LINKER_SHLIBS


# _LT_LANG_C_CONFIG([TAG])
# ------------------------
# Ensure that the configuration variables for a C compiler are suitably
# defined.  These variables are subsequently used by _LT_CONFIG to write
# the compiler configuration to `libtool'.
m4_defun([_LT_LANG_C_CONFIG],
[m4_require([_LT_DECL_EGREP])dnl
lt_save_CC="$CC"
AC_LANG_PUSH(C)

# Source file extension for C test sources.
ac_ext=c

# Object file extension for compiled C test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext

# Code to be used in simple compile tests
lt_simple_compile_test_code="int some_variable = 0;"

# Code to be used in simple link tests
lt_simple_link_test_code='int main(){return(0);}'

_LT_TAG_COMPILER
# Save the default compiler, since it gets overwritten when the other
# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
compiler_DEFAULT=$CC

# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE

## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
if test -n "$compiler"; then
  _LT_COMPILER_NO_RTTI($1)
  _LT_COMPILER_PIC($1)
  _LT_COMPILER_C_O($1)
  _LT_COMPILER_FILE_LOCKS($1)
  _LT_LINKER_SHLIBS($1)
  _LT_SYS_DYNAMIC_LINKER($1)
  _LT_LINKER_HARDCODE_LIBPATH($1)
  LT_SYS_DLOPEN_SELF
  _LT_CMD_STRIPLIB

  # Report which library types will actually be built
  AC_MSG_CHECKING([if libtool supports shared libraries])
  AC_MSG_RESULT([$can_build_shared])

  AC_MSG_CHECKING([whether to build shared libraries])
  test "$can_build_shared" = "no" && enable_shared=no

  # On AIX, shared libraries and static libraries use the same namespace, and
  # are all built from PIC.
  case $host_os in
  aix3*)
    test "$enable_shared" = yes && enable_static=no
    if test -n "$RANLIB"; then
      archive_cmds="$archive_cmds~\$RANLIB \$lib"
      postinstall_cmds='$RANLIB $lib'
    fi
    ;;

  aix[[4-9]]*)
    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
      test "$enable_shared" = yes && enable_static=no
    fi
    ;;
  esac
  AC_MSG_RESULT([$enable_shared])

  AC_MSG_CHECKING([whether to build static libraries])
  # Make sure either enable_shared or enable_static is yes.
  test "$enable_shared" = yes || enable_static=yes
  AC_MSG_RESULT([$enable_static])

  _LT_CONFIG($1)
fi
AC_LANG_POP
CC="$lt_save_CC"
])# _LT_LANG_C_CONFIG


# _LT_PROG_CXX
# ------------
# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
# compiler, we have our own version here.
m4_defun([_LT_PROG_CXX],
[
pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
AC_PROG_CXX
if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
    (test "X$CXX" != "Xg++"))) ; then
  AC_PROG_CXXCPP
else
  _lt_caught_CXX_error=yes
fi
popdef([AC_MSG_ERROR])
])# _LT_PROG_CXX

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([_LT_PROG_CXX], [])


# _LT_LANG_CXX_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for a C++ compiler are suitably
# defined.  These variables are subsequently used by _LT_CONFIG to write
# the compiler configuration to `libtool'.
m4_defun([_LT_LANG_CXX_CONFIG],
[AC_REQUIRE([_LT_PROG_CXX])dnl
m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_DECL_EGREP])dnl

AC_LANG_PUSH(C++)
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(compiler_needs_object, $1)=no
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(no_undefined_flag, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no

# Source file extension for C++ test sources.
ac_ext=cpp

# Object file extension for compiled C++ test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext

# No sense in running all these tests if we already determined that
# the CXX compiler isn't working.  Some variables (like enable_shared)
# are currently assumed to apply to all compilers on this platform,
# and will be corrupted by setting them based on a non-working compiler.
if test "$_lt_caught_CXX_error" != yes; then
  # Code to be used in simple compile tests
  lt_simple_compile_test_code="int some_variable = 0;"

  # Code to be used in simple link tests
  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'

  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
  _LT_TAG_COMPILER

  # save warnings/boilerplate of simple test code
  _LT_COMPILER_BOILERPLATE
  _LT_LINKER_BOILERPLATE

  # Allow CC to be a program name with arguments.
  lt_save_CC=$CC
  lt_save_LD=$LD
  lt_save_GCC=$GCC
  GCC=$GXX
  lt_save_with_gnu_ld=$with_gnu_ld
  lt_save_path_LD=$lt_cv_path_LD
  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
  else
    $as_unset lt_cv_prog_gnu_ld
  fi
  if test -n "${lt_cv_path_LDCXX+set}"; then
    lt_cv_path_LD=$lt_cv_path_LDCXX
  else
    $as_unset lt_cv_path_LD
  fi
  test -z "${LDCXX+set}" || LD=$LDCXX
  CC=${CXX-"c++"}
  compiler=$CC
  _LT_TAGVAR(compiler, $1)=$CC
  _LT_CC_BASENAME([$compiler])

  if test -n "$compiler"; then
    # We don't want -fno-exception when compiling C++ code, so set the
    # no_builtin_flag separately
    if test "$GXX" = yes; then
      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
    else
      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
    fi

    if test "$GXX" = yes; then
      # Set up default GNU C++ configuration

      LT_PATH_LD

      # Check if GNU C++ uses GNU ld as the underlying linker, since the
      # archiving commands below assume that GNU ld is being used.
      if test "$with_gnu_ld" = yes; then
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'

        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'

        # If archive_cmds runs LD, not CC, wlarc should be empty
        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
        #     investigate it a little bit more. (MM)
        wlarc='${wl}'

        # ancient GNU ld didn't support --whole-archive et. al.
        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
	  $GREP 'no-whole-archive' > /dev/null; then
          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
        else
          _LT_TAGVAR(whole_archive_flag_spec, $1)=
        fi
      else
        with_gnu_ld=no
        wlarc=

        # A generic and very simple default shared library creation
        # command for GNU C++ for the case where it uses the native
        # linker, instead of GNU ld.  If possible, this setting should
        # overridden to take advantage of the native linker features on
        # the platform it is being used on.
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
      fi

      # Commands to make compiler produce verbose output that lists
      # what "hidden" libraries, object files and flags are used when
      # linking a shared library.
      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'

    else
      GXX=no
      with_gnu_ld=no
      wlarc=
    fi

    # PORTME: fill in a description of your system's C++ link characteristics
    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
    _LT_TAGVAR(ld_shlibs, $1)=yes
    case $host_os in
      aix3*)
        # FIXME: insert proper C++ library support
        _LT_TAGVAR(ld_shlibs, $1)=no
        ;;
      aix[[4-9]]*)
        if test "$host_cpu" = ia64; then
          # On IA64, the linker does run time linking by default, so we don't
          # have to do anything special.
          aix_use_runtimelinking=no
          exp_sym_flag='-Bexport'
          no_entry_flag=""
        else
          aix_use_runtimelinking=no

          # Test if we are trying to use run time linking or normal
          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
          # need to do runtime linking.
          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
	    for ld_flag in $LDFLAGS; do
	      case $ld_flag in
	      *-brtl*)
	        aix_use_runtimelinking=yes
	        break
	        ;;
	      esac
	    done
	    ;;
          esac

          exp_sym_flag='-bexport'
          no_entry_flag='-bnoentry'
        fi

        # When large executables or shared objects are built, AIX ld can
        # have problems creating the table of contents.  If linking a library
        # or program results in "error TOC overflow" add -mminimal-toc to
        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.

        _LT_TAGVAR(archive_cmds, $1)=''
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
        _LT_TAGVAR(link_all_deplibs, $1)=yes
        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'

        if test "$GXX" = yes; then
          case $host_os in aix4.[[012]]|aix4.[[012]].*)
          # We only want to do this on AIX 4.2 and lower, the check
          # below for broken collect2 doesn't work under 4.3+
	  collect2name=`${CC} -print-prog-name=collect2`
	  if test -f "$collect2name" &&
	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
	  then
	    # We have reworked collect2
	    :
	  else
	    # We have old collect2
	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
	    # It fails to find uninstalled libraries when the uninstalled
	    # path is not listed in the libpath.  Setting hardcode_minus_L
	    # to unsupported forces relinking
	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
	  fi
          esac
          shared_flag='-shared'
	  if test "$aix_use_runtimelinking" = yes; then
	    shared_flag="$shared_flag "'${wl}-G'
	  fi
        else
          # not using gcc
          if test "$host_cpu" = ia64; then
	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
	  # chokes on -Wl,-G. The following line is correct:
	  shared_flag='-G'
          else
	    if test "$aix_use_runtimelinking" = yes; then
	      shared_flag='${wl}-G'
	    else
	      shared_flag='${wl}-bM:SRE'
	    fi
          fi
        fi

        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
        # It seems that -bexpall does not export symbols beginning with
        # underscore (_), so it is better to generate a list of symbols to
	# export.
        _LT_TAGVAR(always_export_symbols, $1)=yes
        if test "$aix_use_runtimelinking" = yes; then
          # Warning - without using the other runtime loading flags (-brtl),
          # -berok will link without error, but may produce a broken library.
          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
          # Determine the default libpath from the value encoded in an empty
          # executable.
          _LT_SYS_MODULE_PATH_AIX
          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"

          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
        else
          if test "$host_cpu" = ia64; then
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
          else
	    # Determine the default libpath from the value encoded in an
	    # empty executable.
	    _LT_SYS_MODULE_PATH_AIX
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
	    # Warning - without using the other run time loading flags,
	    # -berok will link without error, but may produce a broken library.
	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
	    # Exported symbols can be pulled into shared objects from archives
	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
	    # This is similar to how AIX traditionally builds its shared
	    # libraries.
	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
          fi
        fi
        ;;

      beos*)
	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
	  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
	  # support --undefined.  This deserves some investigation.  FIXME
	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
	else
	  _LT_TAGVAR(ld_shlibs, $1)=no
	fi
	;;

      chorus*)
        case $cc_basename in
          *)
	  # FIXME: insert proper C++ library support
	  _LT_TAGVAR(ld_shlibs, $1)=no
	  ;;
        esac
        ;;

      cygwin* | mingw* | pw32* | cegcc*)
        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
        # as there is no search path for DLLs.
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
        _LT_TAGVAR(always_export_symbols, $1)=no
        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes

        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
          # If the export-symbols file already is a .def file (1st line
          # is EXPORTS), use it as is; otherwise, prepend...
          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
	    cp $export_symbols $output_objdir/$soname.def;
          else
	    echo EXPORTS > $output_objdir/$soname.def;
	    cat $export_symbols >> $output_objdir/$soname.def;
          fi~
          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
        else
          _LT_TAGVAR(ld_shlibs, $1)=no
        fi
        ;;
      darwin* | rhapsody*)
        _LT_DARWIN_LINKER_FEATURES($1)
	;;

      dgux*)
        case $cc_basename in
          ec++*)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          ghcx*)
	    # Green Hills C++ Compiler
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          *)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
        esac
        ;;

      freebsd[[12]]*)
        # C++ shared libraries reported to be fairly broken before
	# switch to ELF
        _LT_TAGVAR(ld_shlibs, $1)=no
        ;;

      freebsd-elf*)
        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
        ;;

      freebsd* | dragonfly*)
        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
        # conventions
        _LT_TAGVAR(ld_shlibs, $1)=yes
        ;;

      gnu*)
        ;;

      hpux9*)
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
				             # but as the default
				             # location of the library.

        case $cc_basename in
          CC*)
            # FIXME: insert proper C++ library support
            _LT_TAGVAR(ld_shlibs, $1)=no
            ;;
          aCC*)
            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
            # Commands to make compiler produce verbose output that lists
            # what "hidden" libraries, object files and flags are used when
            # linking a shared library.
            #
            # There doesn't appear to be a way to prevent this compiler from
            # explicitly linking system object files so we need to strip them
            # from the output so that they don't get included in the library
            # dependencies.
            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
            ;;
          *)
            if test "$GXX" = yes; then
              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
            else
              # FIXME: insert proper C++ library support
              _LT_TAGVAR(ld_shlibs, $1)=no
            fi
            ;;
        esac
        ;;

      hpux10*|hpux11*)
        if test $with_gnu_ld = no; then
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:

          case $host_cpu in
            hppa*64*|ia64*)
              ;;
            *)
	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
              ;;
          esac
        fi
        case $host_cpu in
          hppa*64*|ia64*)
            _LT_TAGVAR(hardcode_direct, $1)=no
            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
            ;;
          *)
            _LT_TAGVAR(hardcode_direct, $1)=yes
            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
					         # but as the default
					         # location of the library.
            ;;
        esac

        case $cc_basename in
          CC*)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          aCC*)
	    case $host_cpu in
	      hppa*64*)
	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	        ;;
	      ia64*)
	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	        ;;
	      *)
	        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	        ;;
	    esac
	    # Commands to make compiler produce verbose output that lists
	    # what "hidden" libraries, object files and flags are used when
	    # linking a shared library.
	    #
	    # There doesn't appear to be a way to prevent this compiler from
	    # explicitly linking system object files so we need to strip them
	    # from the output so that they don't get included in the library
	    # dependencies.
	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
	    ;;
          *)
	    if test "$GXX" = yes; then
	      if test $with_gnu_ld = no; then
	        case $host_cpu in
	          hppa*64*)
	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	            ;;
	          ia64*)
	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	            ;;
	          *)
	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	            ;;
	        esac
	      fi
	    else
	      # FIXME: insert proper C++ library support
	      _LT_TAGVAR(ld_shlibs, $1)=no
	    fi
	    ;;
        esac
        ;;

      interix[[3-9]]*)
	_LT_TAGVAR(hardcode_direct, $1)=no
	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
	# Instead, shared libraries are loaded at an image base (0x10000000 by
	# default) and relocated if they conflict, which is a slow very memory
	# consuming and fragmenting process.  To avoid this, we pick a random,
	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
	;;
      irix5* | irix6*)
        case $cc_basename in
          CC*)
	    # SGI C++
	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'

	    # Archives containing C++ object files must be created using
	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
	    # necessary to make sure instantiated templates are included
	    # in the archive.
	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
	    ;;
          *)
	    if test "$GXX" = yes; then
	      if test "$with_gnu_ld" = no; then
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
	      else
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
	      fi
	    fi
	    _LT_TAGVAR(link_all_deplibs, $1)=yes
	    ;;
        esac
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
        _LT_TAGVAR(inherit_rpath, $1)=yes
        ;;

      linux* | k*bsd*-gnu | kopensolaris*-gnu)
        case $cc_basename in
          KCC*)
	    # Kuck and Associates, Inc. (KAI) C++ Compiler

	    # KCC will only create a shared library if the output file
	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
	    # to its proper name (with version) after linking.
	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
	    # Commands to make compiler produce verbose output that lists
	    # what "hidden" libraries, object files and flags are used when
	    # linking a shared library.
	    #
	    # There doesn't appear to be a way to prevent this compiler from
	    # explicitly linking system object files so we need to strip them
	    # from the output so that they don't get included in the library
	    # dependencies.
	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'

	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'

	    # Archives containing C++ object files must be created using
	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
	    ;;
	  icpc* | ecpc* )
	    # Intel C++
	    with_gnu_ld=yes
	    # version 8.0 and above of icpc choke on multiply defined symbols
	    # if we add $predep_objects and $postdep_objects, however 7.1 and
	    # earlier do not add the objects themselves.
	    case `$CC -V 2>&1` in
	      *"Version 7."*)
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
		;;
	      *)  # Version 8.0 or newer
	        tmp_idyn=
	        case $host_cpu in
		  ia64*) tmp_idyn=' -i_dynamic';;
		esac
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
		;;
	    esac
	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
	    ;;
          pgCC* | pgcpp*)
            # Portland Group C++ compiler
	    case `$CC -V` in
	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
		rm -rf $tpldir~
		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
		rm -rf $tpldir~
		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
		$RANLIB $oldlib'
	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
		rm -rf $tpldir~
		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
		rm -rf $tpldir~
		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
	      ;;
	    *) # Version 6 will use weak symbols
	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
	      ;;
	    esac

	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
            ;;
	  cxx*)
	    # Compaq C++
	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'

	    runpath_var=LD_RUN_PATH
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:

	    # Commands to make compiler produce verbose output that lists
	    # what "hidden" libraries, object files and flags are used when
	    # linking a shared library.
	    #
	    # There doesn't appear to be a way to prevent this compiler from
	    # explicitly linking system object files so we need to strip them
	    # from the output so that they don't get included in the library
	    # dependencies.
	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
	    ;;
	  xl*)
	    # IBM XL 8.0 on PPC, with GNU ld
	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
	    if test "x$supports_anon_versioning" = xyes; then
	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
		cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
		echo "local: *; };" >> $output_objdir/$libname.ver~
		$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
	    fi
	    ;;
	  *)
	    case `$CC -V 2>&1 | sed 5q` in
	    *Sun\ C*)
	      # Sun C++ 5.9
	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
	      _LT_TAGVAR(compiler_needs_object, $1)=yes

	      # Not sure whether something based on
	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
	      # would be better.
	      output_verbose_link_cmd='echo'

	      # Archives containing C++ object files must be created using
	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
	      # necessary to make sure instantiated templates are included
	      # in the archive.
	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
	      ;;
	    esac
	    ;;
	esac
	;;

      lynxos*)
        # FIXME: insert proper C++ library support
	_LT_TAGVAR(ld_shlibs, $1)=no
	;;

      m88k*)
        # FIXME: insert proper C++ library support
        _LT_TAGVAR(ld_shlibs, $1)=no
	;;

      mvs*)
        case $cc_basename in
          cxx*)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
	  *)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
	esac
	;;

      netbsd*)
        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
	  wlarc=
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
	  _LT_TAGVAR(hardcode_direct, $1)=yes
	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	fi
	# Workaround some broken pre-1.5 toolchains
	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
	;;

      *nto* | *qnx*)
        _LT_TAGVAR(ld_shlibs, $1)=yes
	;;

      openbsd2*)
        # C++ shared libraries are fairly broken
	_LT_TAGVAR(ld_shlibs, $1)=no
	;;

      openbsd*)
	if test -f /usr/libexec/ld.so; then
	  _LT_TAGVAR(hardcode_direct, $1)=yes
	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
	  fi
	  output_verbose_link_cmd=echo
	else
	  _LT_TAGVAR(ld_shlibs, $1)=no
	fi
	;;

      osf3* | osf4* | osf5*)
        case $cc_basename in
          KCC*)
	    # Kuck and Associates, Inc. (KAI) C++ Compiler

	    # KCC will only create a shared library if the output file
	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
	    # to its proper name (with version) after linking.
	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'

	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:

	    # Archives containing C++ object files must be created using
	    # the KAI C++ compiler.
	    case $host in
	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
	    esac
	    ;;
          RCC*)
	    # Rational C++ 2.4.1
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          cxx*)
	    case $host in
	      osf3*)
	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
		;;
	      *)
	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
	          echo "-hidden">> $lib.exp~
	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
	          $RM $lib.exp'
	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
		;;
	    esac

	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:

	    # Commands to make compiler produce verbose output that lists
	    # what "hidden" libraries, object files and flags are used when
	    # linking a shared library.
	    #
	    # There doesn't appear to be a way to prevent this compiler from
	    # explicitly linking system object files so we need to strip them
	    # from the output so that they don't get included in the library
	    # dependencies.
	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
	    ;;
	  *)
	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
	      case $host in
	        osf3*)
	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
		  ;;
	        *)
	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
		  ;;
	      esac

	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:

	      # Commands to make compiler produce verbose output that lists
	      # what "hidden" libraries, object files and flags are used when
	      # linking a shared library.
	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'

	    else
	      # FIXME: insert proper C++ library support
	      _LT_TAGVAR(ld_shlibs, $1)=no
	    fi
	    ;;
        esac
        ;;

      psos*)
        # FIXME: insert proper C++ library support
        _LT_TAGVAR(ld_shlibs, $1)=no
        ;;

      sunos4*)
        case $cc_basename in
          CC*)
	    # Sun C++ 4.x
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          lcc*)
	    # Lucid
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          *)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
        esac
        ;;

      solaris*)
        case $cc_basename in
          CC*)
	    # Sun C++ 4.2, 5.x and Centerline C++
            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
	    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
	      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'

	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	    case $host_os in
	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
	      *)
		# The compiler driver will combine and reorder linker options,
		# but understands `-z linker_flag'.
	        # Supported since Solaris 2.6 (maybe 2.5.1?)
		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
	        ;;
	    esac
	    _LT_TAGVAR(link_all_deplibs, $1)=yes

	    output_verbose_link_cmd='echo'

	    # Archives containing C++ object files must be created using
	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
	    # necessary to make sure instantiated templates are included
	    # in the archive.
	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
	    ;;
          gcx*)
	    # Green Hills C++ Compiler
	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'

	    # The C++ compiler must be used to create the archive.
	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
	    ;;
          *)
	    # GNU C++ compiler with Solaris linker
	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'

	        # Commands to make compiler produce verbose output that lists
	        # what "hidden" libraries, object files and flags are used when
	        # linking a shared library.
	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
	      else
	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
	        # platform.
	        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
		  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'

	        # Commands to make compiler produce verbose output that lists
	        # what "hidden" libraries, object files and flags are used when
	        # linking a shared library.
	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
	      fi

	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
	      case $host_os in
		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
		*)
		  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
		  ;;
	      esac
	    fi
	    ;;
        esac
        ;;

    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
      runpath_var='LD_RUN_PATH'

      case $cc_basename in
        CC*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
	*)
	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	  ;;
      esac
      ;;

      sysv5* | sco3.2v5* | sco5v6*)
	# Note: We can NOT use -z defs as we might desire, because we do not
	# link with -lc, and that would cause any symbols used from libc to
	# always be unresolved, which means just about no library would
	# ever link correctly.  If we're not using GNU ld we use -z text
	# though, which does catch some bad symbols but isn't as heavy-handed
	# as -z defs.
	_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
	_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
	_LT_TAGVAR(link_all_deplibs, $1)=yes
	_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
	runpath_var='LD_RUN_PATH'

	case $cc_basename in
          CC*)
	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	    ;;
	  *)
	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
	    ;;
	esac
      ;;

      tandem*)
        case $cc_basename in
          NCC*)
	    # NonStop-UX NCC 3.20
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
          *)
	    # FIXME: insert proper C++ library support
	    _LT_TAGVAR(ld_shlibs, $1)=no
	    ;;
        esac
        ;;

      vxworks*)
        # FIXME: insert proper C++ library support
        _LT_TAGVAR(ld_shlibs, $1)=no
        ;;

      *)
        # FIXME: insert proper C++ library support
        _LT_TAGVAR(ld_shlibs, $1)=no
        ;;
    esac

    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no

    _LT_TAGVAR(GCC, $1)="$GXX"
    _LT_TAGVAR(LD, $1)="$LD"

    ## CAVEAT EMPTOR:
    ## There is no encapsulation within the following macros, do not change
    ## the running order or otherwise move them around unless you know exactly
    ## what you are doing...
    _LT_SYS_HIDDEN_LIBDEPS($1)
    _LT_COMPILER_PIC($1)
    _LT_COMPILER_C_O($1)
    _LT_COMPILER_FILE_LOCKS($1)
    _LT_LINKER_SHLIBS($1)
    _LT_SYS_DYNAMIC_LINKER($1)
    _LT_LINKER_HARDCODE_LIBPATH($1)

    _LT_CONFIG($1)
  fi # test -n "$compiler"

  CC=$lt_save_CC
  LDCXX=$LD
  LD=$lt_save_LD
  GCC=$lt_save_GCC
  with_gnu_ld=$lt_save_with_gnu_ld
  lt_cv_path_LDCXX=$lt_cv_path_LD
  lt_cv_path_LD=$lt_save_path_LD
  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
fi # test "$_lt_caught_CXX_error" != yes

AC_LANG_POP
])# _LT_LANG_CXX_CONFIG


# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
# ---------------------------------
# Figure out "hidden" library dependencies from verbose
# compiler output when linking a shared library.
# Parse the compiler output and extract the necessary
# objects, libraries and library flags.
m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
# Dependencies to place before and after the object being linked:
_LT_TAGVAR(predep_objects, $1)=
_LT_TAGVAR(postdep_objects, $1)=
_LT_TAGVAR(predeps, $1)=
_LT_TAGVAR(postdeps, $1)=
_LT_TAGVAR(compiler_lib_search_path, $1)=

dnl we can't use the lt_simple_compile_test_code here,
dnl because it contains code intended for an executable,
dnl not a library.  It's possible we should let each
dnl tag define a new lt_????_link_test_code variable,
dnl but it's only used here...
m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
int a;
void foo (void) { a = 0; }
_LT_EOF
], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
class Foo
{
public:
  Foo (void) { a = 0; }
private:
  int a;
};
_LT_EOF
], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
      subroutine foo
      implicit none
      integer*4 a
      a=0
      return
      end
_LT_EOF
], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
      subroutine foo
      implicit none
      integer a
      a=0
      return
      end
_LT_EOF
], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
public class foo {
  private int a;
  public void bar (void) {
    a = 0;
  }
};
_LT_EOF
])
dnl Parse the compiler output and extract the necessary
dnl objects, libraries and library flags.
if AC_TRY_EVAL(ac_compile); then
  # Parse the compiler output and extract the necessary
  # objects, libraries and library flags.

  # Sentinel used to keep track of whether or not we are before
  # the conftest object file.
  pre_test_object_deps_done=no

  for p in `eval "$output_verbose_link_cmd"`; do
    case $p in

    -L* | -R* | -l*)
       # Some compilers place space between "-{L,R}" and the path.
       # Remove the space.
       if test $p = "-L" ||
          test $p = "-R"; then
	 prev=$p
	 continue
       else
	 prev=
       fi

       if test "$pre_test_object_deps_done" = no; then
	 case $p in
	 -L* | -R*)
	   # Internal compiler library paths should come after those
	   # provided the user.  The postdeps already come after the
	   # user supplied libs so there is no need to process them.
	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
	     _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
	   else
	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
	   fi
	   ;;
	 # The "-l" case would never come before the object being
	 # linked, so don't bother handling this case.
	 esac
       else
	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
	   _LT_TAGVAR(postdeps, $1)="${prev}${p}"
	 else
	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
	 fi
       fi
       ;;

    *.$objext)
       # This assumes that the test object file only shows up
       # once in the compiler output.
       if test "$p" = "conftest.$objext"; then
	 pre_test_object_deps_done=yes
	 continue
       fi

       if test "$pre_test_object_deps_done" = no; then
	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
	   _LT_TAGVAR(predep_objects, $1)="$p"
	 else
	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
	 fi
       else
	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
	   _LT_TAGVAR(postdep_objects, $1)="$p"
	 else
	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
	 fi
       fi
       ;;

    *) ;; # Ignore the rest.

    esac
  done

  # Clean up.
  rm -f a.out a.exe
else
  echo "libtool.m4: error: problem compiling $1 test program"
fi

$RM -f confest.$objext

# PORTME: override above test on systems where it is broken
m4_if([$1], [CXX],
[case $host_os in
interix[[3-9]]*)
  # Interix 3.5 installs completely hosed .la files for C++, so rather than
  # hack all around it, let's just trust "g++" to DTRT.
  _LT_TAGVAR(predep_objects,$1)=
  _LT_TAGVAR(postdep_objects,$1)=
  _LT_TAGVAR(postdeps,$1)=
  ;;

linux*)
  case `$CC -V 2>&1 | sed 5q` in
  *Sun\ C*)
    # Sun C++ 5.9

    # The more standards-conforming stlport4 library is
    # incompatible with the Cstd library. Avoid specifying
    # it if it's in CXXFLAGS. Ignore libCrun as
    # -library=stlport4 depends on it.
    case " $CXX $CXXFLAGS " in
    *" -library=stlport4 "*)
      solaris_use_stlport4=yes
      ;;
    esac

    if test "$solaris_use_stlport4" != yes; then
      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
    fi
    ;;
  esac
  ;;

solaris*)
  case $cc_basename in
  CC*)
    # The more standards-conforming stlport4 library is
    # incompatible with the Cstd library. Avoid specifying
    # it if it's in CXXFLAGS. Ignore libCrun as
    # -library=stlport4 depends on it.
    case " $CXX $CXXFLAGS " in
    *" -library=stlport4 "*)
      solaris_use_stlport4=yes
      ;;
    esac

    # Adding this requires a known-good setup of shared libraries for
    # Sun compiler versions before 5.6, else PIC objects from an old
    # archive will be linked into the output, leading to subtle bugs.
    if test "$solaris_use_stlport4" != yes; then
      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
    fi
    ;;
  esac
  ;;
esac
])

case " $_LT_TAGVAR(postdeps, $1) " in
*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
esac
 _LT_TAGVAR(compiler_lib_search_dirs, $1)=
if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
 _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
fi
_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
    [The directories searched by this compiler when creating a shared library])
_LT_TAGDECL([], [predep_objects], [1],
    [Dependencies to place before and after the objects being linked to
    create a shared library])
_LT_TAGDECL([], [postdep_objects], [1])
_LT_TAGDECL([], [predeps], [1])
_LT_TAGDECL([], [postdeps], [1])
_LT_TAGDECL([], [compiler_lib_search_path], [1],
    [The library search path used internally by the compiler when linking
    a shared library])
])# _LT_SYS_HIDDEN_LIBDEPS


# _LT_PROG_F77
# ------------
# Since AC_PROG_F77 is broken, in that it returns the empty string
# if there is no fortran compiler, we have our own version here.
m4_defun([_LT_PROG_F77],
[
pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
AC_PROG_F77
if test -z "$F77" || test "X$F77" = "Xno"; then
  _lt_disable_F77=yes
fi
popdef([AC_MSG_ERROR])
])# _LT_PROG_F77

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([_LT_PROG_F77], [])


# _LT_LANG_F77_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for a Fortran 77 compiler are
# suitably defined.  These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_F77_CONFIG],
[AC_REQUIRE([_LT_PROG_F77])dnl
AC_LANG_PUSH(Fortran 77)

_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(no_undefined_flag, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no

# Source file extension for f77 test sources.
ac_ext=f

# Object file extension for compiled f77 test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext

# No sense in running all these tests if we already determined that
# the F77 compiler isn't working.  Some variables (like enable_shared)
# are currently assumed to apply to all compilers on this platform,
# and will be corrupted by setting them based on a non-working compiler.
if test "$_lt_disable_F77" != yes; then
  # Code to be used in simple compile tests
  lt_simple_compile_test_code="\
      subroutine t
      return
      end
"

  # Code to be used in simple link tests
  lt_simple_link_test_code="\
      program t
      end
"

  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
  _LT_TAG_COMPILER

  # save warnings/boilerplate of simple test code
  _LT_COMPILER_BOILERPLATE
  _LT_LINKER_BOILERPLATE

  # Allow CC to be a program name with arguments.
  lt_save_CC="$CC"
  lt_save_GCC=$GCC
  CC=${F77-"f77"}
  compiler=$CC
  _LT_TAGVAR(compiler, $1)=$CC
  _LT_CC_BASENAME([$compiler])
  GCC=$G77
  if test -n "$compiler"; then
    AC_MSG_CHECKING([if libtool supports shared libraries])
    AC_MSG_RESULT([$can_build_shared])

    AC_MSG_CHECKING([whether to build shared libraries])
    test "$can_build_shared" = "no" && enable_shared=no

    # On AIX, shared libraries and static libraries use the same namespace, and
    # are all built from PIC.
    case $host_os in
      aix3*)
        test "$enable_shared" = yes && enable_static=no
        if test -n "$RANLIB"; then
          archive_cmds="$archive_cmds~\$RANLIB \$lib"
          postinstall_cmds='$RANLIB $lib'
        fi
        ;;
      aix[[4-9]]*)
	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
	  test "$enable_shared" = yes && enable_static=no
	fi
        ;;
    esac
    AC_MSG_RESULT([$enable_shared])

    AC_MSG_CHECKING([whether to build static libraries])
    # Make sure either enable_shared or enable_static is yes.
    test "$enable_shared" = yes || enable_static=yes
    AC_MSG_RESULT([$enable_static])

    _LT_TAGVAR(GCC, $1)="$G77"
    _LT_TAGVAR(LD, $1)="$LD"

    ## CAVEAT EMPTOR:
    ## There is no encapsulation within the following macros, do not change
    ## the running order or otherwise move them around unless you know exactly
    ## what you are doing...
    _LT_COMPILER_PIC($1)
    _LT_COMPILER_C_O($1)
    _LT_COMPILER_FILE_LOCKS($1)
    _LT_LINKER_SHLIBS($1)
    _LT_SYS_DYNAMIC_LINKER($1)
    _LT_LINKER_HARDCODE_LIBPATH($1)

    _LT_CONFIG($1)
  fi # test -n "$compiler"

  GCC=$lt_save_GCC
  CC="$lt_save_CC"
fi # test "$_lt_disable_F77" != yes

AC_LANG_POP
])# _LT_LANG_F77_CONFIG


# _LT_PROG_FC
# -----------
# Since AC_PROG_FC is broken, in that it returns the empty string
# if there is no fortran compiler, we have our own version here.
m4_defun([_LT_PROG_FC],
[
pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
AC_PROG_FC
if test -z "$FC" || test "X$FC" = "Xno"; then
  _lt_disable_FC=yes
fi
popdef([AC_MSG_ERROR])
])# _LT_PROG_FC

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([_LT_PROG_FC], [])


# _LT_LANG_FC_CONFIG([TAG])
# -------------------------
# Ensure that the configuration variables for a Fortran compiler are
# suitably defined.  These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_FC_CONFIG],
[AC_REQUIRE([_LT_PROG_FC])dnl
AC_LANG_PUSH(Fortran)

_LT_TAGVAR(archive_cmds_need_lc, $1)=no
_LT_TAGVAR(allow_undefined_flag, $1)=
_LT_TAGVAR(always_export_symbols, $1)=no
_LT_TAGVAR(archive_expsym_cmds, $1)=
_LT_TAGVAR(export_dynamic_flag_spec, $1)=
_LT_TAGVAR(hardcode_direct, $1)=no
_LT_TAGVAR(hardcode_direct_absolute, $1)=no
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
_LT_TAGVAR(hardcode_libdir_separator, $1)=
_LT_TAGVAR(hardcode_minus_L, $1)=no
_LT_TAGVAR(hardcode_automatic, $1)=no
_LT_TAGVAR(inherit_rpath, $1)=no
_LT_TAGVAR(module_cmds, $1)=
_LT_TAGVAR(module_expsym_cmds, $1)=
_LT_TAGVAR(link_all_deplibs, $1)=unknown
_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
_LT_TAGVAR(no_undefined_flag, $1)=
_LT_TAGVAR(whole_archive_flag_spec, $1)=
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no

# Source file extension for fc test sources.
ac_ext=${ac_fc_srcext-f}

# Object file extension for compiled fc test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext

# No sense in running all these tests if we already determined that
# the FC compiler isn't working.  Some variables (like enable_shared)
# are currently assumed to apply to all compilers on this platform,
# and will be corrupted by setting them based on a non-working compiler.
if test "$_lt_disable_FC" != yes; then
  # Code to be used in simple compile tests
  lt_simple_compile_test_code="\
      subroutine t
      return
      end
"

  # Code to be used in simple link tests
  lt_simple_link_test_code="\
      program t
      end
"

  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
  _LT_TAG_COMPILER

  # save warnings/boilerplate of simple test code
  _LT_COMPILER_BOILERPLATE
  _LT_LINKER_BOILERPLATE

  # Allow CC to be a program name with arguments.
  lt_save_CC="$CC"
  lt_save_GCC=$GCC
  CC=${FC-"f95"}
  compiler=$CC
  GCC=$ac_cv_fc_compiler_gnu

  _LT_TAGVAR(compiler, $1)=$CC
  _LT_CC_BASENAME([$compiler])

  if test -n "$compiler"; then
    AC_MSG_CHECKING([if libtool supports shared libraries])
    AC_MSG_RESULT([$can_build_shared])

    AC_MSG_CHECKING([whether to build shared libraries])
    test "$can_build_shared" = "no" && enable_shared=no

    # On AIX, shared libraries and static libraries use the same namespace, and
    # are all built from PIC.
    case $host_os in
      aix3*)
        test "$enable_shared" = yes && enable_static=no
        if test -n "$RANLIB"; then
          archive_cmds="$archive_cmds~\$RANLIB \$lib"
          postinstall_cmds='$RANLIB $lib'
        fi
        ;;
      aix[[4-9]]*)
	if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
	  test "$enable_shared" = yes && enable_static=no
	fi
        ;;
    esac
    AC_MSG_RESULT([$enable_shared])

    AC_MSG_CHECKING([whether to build static libraries])
    # Make sure either enable_shared or enable_static is yes.
    test "$enable_shared" = yes || enable_static=yes
    AC_MSG_RESULT([$enable_static])

    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
    _LT_TAGVAR(LD, $1)="$LD"

    ## CAVEAT EMPTOR:
    ## There is no encapsulation within the following macros, do not change
    ## the running order or otherwise move them around unless you know exactly
    ## what you are doing...
    _LT_SYS_HIDDEN_LIBDEPS($1)
    _LT_COMPILER_PIC($1)
    _LT_COMPILER_C_O($1)
    _LT_COMPILER_FILE_LOCKS($1)
    _LT_LINKER_SHLIBS($1)
    _LT_SYS_DYNAMIC_LINKER($1)
    _LT_LINKER_HARDCODE_LIBPATH($1)

    _LT_CONFIG($1)
  fi # test -n "$compiler"

  GCC=$lt_save_GCC
  CC="$lt_save_CC"
fi # test "$_lt_disable_FC" != yes

AC_LANG_POP
])# _LT_LANG_FC_CONFIG


# _LT_LANG_GCJ_CONFIG([TAG])
# --------------------------
# Ensure that the configuration variables for the GNU Java Compiler compiler
# are suitably defined.  These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_GCJ_CONFIG],
[AC_REQUIRE([LT_PROG_GCJ])dnl
AC_LANG_SAVE

# Source file extension for Java test sources.
ac_ext=java

# Object file extension for compiled Java test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext

# Code to be used in simple compile tests
lt_simple_compile_test_code="class foo {}"

# Code to be used in simple link tests
lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'

# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER

# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE

# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
lt_save_GCC=$GCC
GCC=yes
CC=${GCJ-"gcj"}
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_TAGVAR(LD, $1)="$LD"
_LT_CC_BASENAME([$compiler])

# GCJ did not exist at the time GCC didn't implicitly link libc in.
_LT_TAGVAR(archive_cmds_need_lc, $1)=no

_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds

## CAVEAT EMPTOR:
## There is no encapsulation within the following macros, do not change
## the running order or otherwise move them around unless you know exactly
## what you are doing...
if test -n "$compiler"; then
  _LT_COMPILER_NO_RTTI($1)
  _LT_COMPILER_PIC($1)
  _LT_COMPILER_C_O($1)
  _LT_COMPILER_FILE_LOCKS($1)
  _LT_LINKER_SHLIBS($1)
  _LT_LINKER_HARDCODE_LIBPATH($1)

  _LT_CONFIG($1)
fi

AC_LANG_RESTORE

GCC=$lt_save_GCC
CC="$lt_save_CC"
])# _LT_LANG_GCJ_CONFIG


# _LT_LANG_RC_CONFIG([TAG])
# -------------------------
# Ensure that the configuration variables for the Windows resource compiler
# are suitably defined.  These variables are subsequently used by _LT_CONFIG
# to write the compiler configuration to `libtool'.
m4_defun([_LT_LANG_RC_CONFIG],
[AC_REQUIRE([LT_PROG_RC])dnl
AC_LANG_SAVE

# Source file extension for RC test sources.
ac_ext=rc

# Object file extension for compiled RC test sources.
objext=o
_LT_TAGVAR(objext, $1)=$objext

# Code to be used in simple compile tests
lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'

# Code to be used in simple link tests
lt_simple_link_test_code="$lt_simple_compile_test_code"

# ltmain only uses $CC for tagged configurations so make sure $CC is set.
_LT_TAG_COMPILER

# save warnings/boilerplate of simple test code
_LT_COMPILER_BOILERPLATE
_LT_LINKER_BOILERPLATE

# Allow CC to be a program name with arguments.
lt_save_CC="$CC"
lt_save_GCC=$GCC
GCC=
CC=${RC-"windres"}
compiler=$CC
_LT_TAGVAR(compiler, $1)=$CC
_LT_CC_BASENAME([$compiler])
_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes

if test -n "$compiler"; then
  :
  _LT_CONFIG($1)
fi

GCC=$lt_save_GCC
AC_LANG_RESTORE
CC="$lt_save_CC"
])# _LT_LANG_RC_CONFIG


# LT_PROG_GCJ
# -----------
AC_DEFUN([LT_PROG_GCJ],
[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
    [AC_CHECK_TOOL(GCJ, gcj,)
      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
      AC_SUBST(GCJFLAGS)])])[]dnl
])

# Old name:
AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_GCJ], [])


# LT_PROG_RC
# ----------
AC_DEFUN([LT_PROG_RC],
[AC_CHECK_TOOL(RC, windres,)
])

# Old name:
AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_RC], [])


# _LT_DECL_EGREP
# --------------
# If we don't have a new enough Autoconf to choose the best grep
# available, choose the one first in the user's PATH.
m4_defun([_LT_DECL_EGREP],
[AC_REQUIRE([AC_PROG_EGREP])dnl
AC_REQUIRE([AC_PROG_FGREP])dnl
test -z "$GREP" && GREP=grep
_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
_LT_DECL([], [EGREP], [1], [An ERE matcher])
_LT_DECL([], [FGREP], [1], [A literal string matcher])
dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
AC_SUBST([GREP])
])


# _LT_DECL_OBJDUMP
# --------------
# If we don't have a new enough Autoconf to choose the best objdump
# available, choose the one first in the user's PATH.
m4_defun([_LT_DECL_OBJDUMP],
[AC_CHECK_TOOL(OBJDUMP, objdump, false)
test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
AC_SUBST([OBJDUMP])
])


# _LT_DECL_SED
# ------------
# Check for a fully-functional sed program, that truncates
# as few characters as possible.  Prefer GNU sed if found.
m4_defun([_LT_DECL_SED],
[AC_PROG_SED
test -z "$SED" && SED=sed
Xsed="$SED -e 1s/^X//"
_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
])# _LT_DECL_SED

m4_ifndef([AC_PROG_SED], [
############################################################
# NOTE: This macro has been submitted for inclusion into   #
#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
#  a released version of Autoconf we should remove this    #
#  macro and use it instead.                               #
############################################################

m4_defun([AC_PROG_SED],
[AC_MSG_CHECKING([for a sed that does not truncate output])
AC_CACHE_VAL(lt_cv_path_SED,
[# Loop through the user's path and test for sed and gsed.
# Then use that list of sed's as ones to test for truncation.
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
  for lt_ac_prog in sed gsed; do
    for ac_exec_ext in '' $ac_executable_extensions; do
      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
      fi
    done
  done
done
IFS=$as_save_IFS
lt_ac_max=0
lt_ac_count=0
# Add /usr/xpg4/bin/sed as it is typically found on Solaris
# along with /bin/sed that truncates output.
for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
  test ! -f $lt_ac_sed && continue
  cat /dev/null > conftest.in
  lt_ac_count=0
  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
  # Check for GNU sed and select it if it is found.
  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
    lt_cv_path_SED=$lt_ac_sed
    break
  fi
  while true; do
    cat conftest.in conftest.in >conftest.tmp
    mv conftest.tmp conftest.in
    cp conftest.in conftest.nl
    echo >>conftest.nl
    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
    cmp -s conftest.out conftest.nl || break
    # 10000 chars as input seems more than enough
    test $lt_ac_count -gt 10 && break
    lt_ac_count=`expr $lt_ac_count + 1`
    if test $lt_ac_count -gt $lt_ac_max; then
      lt_ac_max=$lt_ac_count
      lt_cv_path_SED=$lt_ac_sed
    fi
  done
done
])
SED=$lt_cv_path_SED
AC_SUBST([SED])
AC_MSG_RESULT([$SED])
])#AC_PROG_SED
])#m4_ifndef

# Old name:
AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([LT_AC_PROG_SED], [])


# _LT_CHECK_SHELL_FEATURES
# ------------------------
# Find out whether the shell is Bourne or XSI compatible,
# or has some other useful features.
m4_defun([_LT_CHECK_SHELL_FEATURES],
[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
# Try some XSI features
xsi_shell=no
( _lt_dummy="a/b/c"
  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
      = c,a/b,, \
    && eval 'test $(( 1 + 1 )) -eq 2 \
    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
  && xsi_shell=yes
AC_MSG_RESULT([$xsi_shell])
_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])

AC_MSG_CHECKING([whether the shell understands "+="])
lt_shell_append=no
( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
    >/dev/null 2>&1 \
  && lt_shell_append=yes
AC_MSG_RESULT([$lt_shell_append])
_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])

if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
  lt_unset=unset
else
  lt_unset=false
fi
_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl

# test EBCDIC or ASCII
case `echo X|tr X '\101'` in
 A) # ASCII based system
    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
  lt_SP2NL='tr \040 \012'
  lt_NL2SP='tr \015\012 \040\040'
  ;;
 *) # EBCDIC based system
  lt_SP2NL='tr \100 \n'
  lt_NL2SP='tr \r\n \100\100'
  ;;
esac
_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
])# _LT_CHECK_SHELL_FEATURES


# _LT_PROG_XSI_SHELLFNS
# ---------------------
# Bourne and XSI compatible variants of some useful shell functions.
m4_defun([_LT_PROG_XSI_SHELLFNS],
[case $xsi_shell in
  yes)
    cat << \_LT_EOF >> "$cfgfile"

# func_dirname file append nondir_replacement
# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
# otherwise set result to NONDIR_REPLACEMENT.
func_dirname ()
{
  case ${1} in
    */*) func_dirname_result="${1%/*}${2}" ;;
    *  ) func_dirname_result="${3}" ;;
  esac
}

# func_basename file
func_basename ()
{
  func_basename_result="${1##*/}"
}

# func_dirname_and_basename file append nondir_replacement
# perform func_basename and func_dirname in a single function
# call:
#   dirname:  Compute the dirname of FILE.  If nonempty,
#             add APPEND to the result, otherwise set result
#             to NONDIR_REPLACEMENT.
#             value returned in "$func_dirname_result"
#   basename: Compute filename of FILE.
#             value retuned in "$func_basename_result"
# Implementation must be kept synchronized with func_dirname
# and func_basename. For efficiency, we do not delegate to
# those functions but instead duplicate the functionality here.
func_dirname_and_basename ()
{
  case ${1} in
    */*) func_dirname_result="${1%/*}${2}" ;;
    *  ) func_dirname_result="${3}" ;;
  esac
  func_basename_result="${1##*/}"
}

# func_stripname prefix suffix name
# strip PREFIX and SUFFIX off of NAME.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
func_stripname ()
{
  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
  # positional parameters, so assign one to ordinary parameter first.
  func_stripname_result=${3}
  func_stripname_result=${func_stripname_result#"${1}"}
  func_stripname_result=${func_stripname_result%"${2}"}
}

# func_opt_split
func_opt_split ()
{
  func_opt_split_opt=${1%%=*}
  func_opt_split_arg=${1#*=}
}

# func_lo2o object
func_lo2o ()
{
  case ${1} in
    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
    *)    func_lo2o_result=${1} ;;
  esac
}

# func_xform libobj-or-source
func_xform ()
{
  func_xform_result=${1%.*}.lo
}

# func_arith arithmetic-term...
func_arith ()
{
  func_arith_result=$(( $[*] ))
}

# func_len string
# STRING may not start with a hyphen.
func_len ()
{
  func_len_result=${#1}
}

_LT_EOF
    ;;
  *) # Bourne compatible functions.
    cat << \_LT_EOF >> "$cfgfile"

# func_dirname file append nondir_replacement
# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
# otherwise set result to NONDIR_REPLACEMENT.
func_dirname ()
{
  # Extract subdirectory from the argument.
  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
  if test "X$func_dirname_result" = "X${1}"; then
    func_dirname_result="${3}"
  else
    func_dirname_result="$func_dirname_result${2}"
  fi
}

# func_basename file
func_basename ()
{
  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
}

dnl func_dirname_and_basename
dnl A portable version of this function is already defined in general.m4sh
dnl so there is no need for it here.

# func_stripname prefix suffix name
# strip PREFIX and SUFFIX off of NAME.
# PREFIX and SUFFIX must not contain globbing or regex special
# characters, hashes, percent signs, but SUFFIX may contain a leading
# dot (in which case that matches only a dot).
# func_strip_suffix prefix name
func_stripname ()
{
  case ${2} in
    .*) func_stripname_result=`$ECHO "X${3}" \
           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
    *)  func_stripname_result=`$ECHO "X${3}" \
           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
  esac
}

# sed scripts:
my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
my_sed_long_arg='1s/^-[[^=]]*=//'

# func_opt_split
func_opt_split ()
{
  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
}

# func_lo2o object
func_lo2o ()
{
  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
}

# func_xform libobj-or-source
func_xform ()
{
  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
}

# func_arith arithmetic-term...
func_arith ()
{
  func_arith_result=`expr "$[@]"`
}

# func_len string
# STRING may not start with a hyphen.
func_len ()
{
  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
}

_LT_EOF
esac

case $lt_shell_append in
  yes)
    cat << \_LT_EOF >> "$cfgfile"

# func_append var value
# Append VALUE to the end of shell variable VAR.
func_append ()
{
  eval "$[1]+=\$[2]"
}
_LT_EOF
    ;;
  *)
    cat << \_LT_EOF >> "$cfgfile"

# func_append var value
# Append VALUE to the end of shell variable VAR.
func_append ()
{
  eval "$[1]=\$$[1]\$[2]"
}

_LT_EOF
    ;;
  esac
])

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/ltoptions.m4.

































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
# Helper functions for option handling.                    -*- Autoconf -*-
#
#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
#   Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.

# serial 6 ltoptions.m4

# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])


# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
# ------------------------------------------
m4_define([_LT_MANGLE_OPTION],
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])


# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
# ---------------------------------------
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
# saved as a flag.
m4_define([_LT_SET_OPTION],
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
        _LT_MANGLE_DEFUN([$1], [$2]),
    [m4_warning([Unknown $1 option `$2'])])[]dnl
])


# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
# ------------------------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
m4_define([_LT_IF_OPTION],
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])


# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
# -------------------------------------------------------
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
# are set.
m4_define([_LT_UNLESS_OPTIONS],
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
		      [m4_define([$0_found])])])[]dnl
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
])[]dnl
])


# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
# ----------------------------------------
# OPTION-LIST is a space-separated list of Libtool options associated
# with MACRO-NAME.  If any OPTION has a matching handler declared with
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
# the unknown option and exit.
m4_defun([_LT_SET_OPTIONS],
[# Set options
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
    [_LT_SET_OPTION([$1], _LT_Option)])

m4_if([$1],[LT_INIT],[
  dnl
  dnl Simply set some default values (i.e off) if boolean options were not
  dnl specified:
  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
  ])
  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
  ])
  dnl
  dnl If no reference was made to various pairs of opposing options, then
  dnl we run the default mode handler for the pair.  For example, if neither
  dnl `shared' nor `disable-shared' was passed, we enable building of shared
  dnl archives by default:
  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
  		   [_LT_ENABLE_FAST_INSTALL])
  ])
])# _LT_SET_OPTIONS


## --------------------------------- ##
## Macros to handle LT_INIT options. ##
## --------------------------------- ##

# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
# -----------------------------------------
m4_define([_LT_MANGLE_DEFUN],
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])


# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
# -----------------------------------------------
m4_define([LT_OPTION_DEFINE],
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
])# LT_OPTION_DEFINE


# dlopen
# ------
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
])

AU_DEFUN([AC_LIBTOOL_DLOPEN],
[_LT_SET_OPTION([LT_INIT], [dlopen])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `dlopen' option into LT_INIT's first parameter.])
])

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])


# win32-dll
# ---------
# Declare package support for building win32 dll's.
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
[enable_win32_dll=yes

case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
  AC_CHECK_TOOL(AS, as, false)
  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
  AC_CHECK_TOOL(OBJDUMP, objdump, false)
  ;;
esac

test -z "$AS" && AS=as
_LT_DECL([], [AS],      [0], [Assembler program])dnl

test -z "$DLLTOOL" && DLLTOOL=dlltool
_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl

test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
])# win32-dll

AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
_LT_SET_OPTION([LT_INIT], [win32-dll])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `win32-dll' option into LT_INIT's first parameter.])
])

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])


# _LT_ENABLE_SHARED([DEFAULT])
# ----------------------------
# implement the --enable-shared flag, and supports the `shared' and
# `disable-shared' LT_INIT options.
# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_SHARED],
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([shared],
    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
    [p=${PACKAGE-default}
    case $enableval in
    yes) enable_shared=yes ;;
    no) enable_shared=no ;;
    *)
      enable_shared=no
      # Look at the argument we got.  We use all the common list separators.
      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
      for pkg in $enableval; do
	IFS="$lt_save_ifs"
	if test "X$pkg" = "X$p"; then
	  enable_shared=yes
	fi
      done
      IFS="$lt_save_ifs"
      ;;
    esac],
    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)

    _LT_DECL([build_libtool_libs], [enable_shared], [0],
	[Whether or not to build shared libraries])
])# _LT_ENABLE_SHARED

LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])

# Old names:
AC_DEFUN([AC_ENABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
])

AC_DEFUN([AC_DISABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], [disable-shared])
])

AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
dnl AC_DEFUN([AM_DISABLE_SHARED], [])



# _LT_ENABLE_STATIC([DEFAULT])
# ----------------------------
# implement the --enable-static flag, and support the `static' and
# `disable-static' LT_INIT options.
# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_STATIC],
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([static],
    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
    [p=${PACKAGE-default}
    case $enableval in
    yes) enable_static=yes ;;
    no) enable_static=no ;;
    *)
     enable_static=no
      # Look at the argument we got.  We use all the common list separators.
      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
      for pkg in $enableval; do
	IFS="$lt_save_ifs"
	if test "X$pkg" = "X$p"; then
	  enable_static=yes
	fi
      done
      IFS="$lt_save_ifs"
      ;;
    esac],
    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)

    _LT_DECL([build_old_libs], [enable_static], [0],
	[Whether or not to build static libraries])
])# _LT_ENABLE_STATIC

LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])

# Old names:
AC_DEFUN([AC_ENABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
])

AC_DEFUN([AC_DISABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], [disable-static])
])

AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
dnl AC_DEFUN([AM_DISABLE_STATIC], [])



# _LT_ENABLE_FAST_INSTALL([DEFAULT])
# ----------------------------------
# implement the --enable-fast-install flag, and support the `fast-install'
# and `disable-fast-install' LT_INIT options.
# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_FAST_INSTALL],
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([fast-install],
    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
    [p=${PACKAGE-default}
    case $enableval in
    yes) enable_fast_install=yes ;;
    no) enable_fast_install=no ;;
    *)
      enable_fast_install=no
      # Look at the argument we got.  We use all the common list separators.
      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
      for pkg in $enableval; do
	IFS="$lt_save_ifs"
	if test "X$pkg" = "X$p"; then
	  enable_fast_install=yes
	fi
      done
      IFS="$lt_save_ifs"
      ;;
    esac],
    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)

_LT_DECL([fast_install], [enable_fast_install], [0],
	 [Whether or not to optimize for fast installation])dnl
])# _LT_ENABLE_FAST_INSTALL

LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])

# Old names:
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `fast-install' option into LT_INIT's first parameter.])
])

AU_DEFUN([AC_DISABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `disable-fast-install' option into LT_INIT's first parameter.])
])

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])


# _LT_WITH_PIC([MODE])
# --------------------
# implement the --with-pic flag, and support the `pic-only' and `no-pic'
# LT_INIT options.
# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
m4_define([_LT_WITH_PIC],
[AC_ARG_WITH([pic],
    [AS_HELP_STRING([--with-pic],
	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
    [pic_mode="$withval"],
    [pic_mode=default])

test -z "$pic_mode" && pic_mode=m4_default([$1], [default])

_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
])# _LT_WITH_PIC

LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])

# Old name:
AU_DEFUN([AC_LIBTOOL_PICMODE],
[_LT_SET_OPTION([LT_INIT], [pic-only])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `pic-only' option into LT_INIT's first parameter.])
])

dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])

## ----------------- ##
## LTDL_INIT Options ##
## ----------------- ##

m4_define([_LTDL_MODE], [])
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
		 [m4_define([_LTDL_MODE], [nonrecursive])])
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
		 [m4_define([_LTDL_MODE], [recursive])])
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
		 [m4_define([_LTDL_MODE], [subproject])])

m4_define([_LTDL_TYPE], [])
LT_OPTION_DEFINE([LTDL_INIT], [installable],
		 [m4_define([_LTDL_TYPE], [installable])])
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
		 [m4_define([_LTDL_TYPE], [convenience])])

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/ltsugar.m4.























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.

# serial 6 ltsugar.m4

# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])


# lt_join(SEP, ARG1, [ARG2...])
# -----------------------------
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
# associated separator.
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
# versions in m4sugar had bugs.
m4_define([lt_join],
[m4_if([$#], [1], [],
       [$#], [2], [[$2]],
       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
m4_define([_lt_join],
[m4_if([$#$2], [2], [],
       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])


# lt_car(LIST)
# lt_cdr(LIST)
# ------------
# Manipulate m4 lists.
# These macros are necessary as long as will still need to support
# Autoconf-2.59 which quotes differently.
m4_define([lt_car], [[$1]])
m4_define([lt_cdr],
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
       [$#], 1, [],
       [m4_dquote(m4_shift($@))])])
m4_define([lt_unquote], $1)


# lt_append(MACRO-NAME, STRING, [SEPARATOR])
# ------------------------------------------
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
# Note that neither SEPARATOR nor STRING are expanded; they are appended
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
# than defined and empty).
#
# This macro is needed until we can rely on Autoconf 2.62, since earlier
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
m4_define([lt_append],
[m4_define([$1],
	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])



# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
# ----------------------------------------------------------
# Produce a SEP delimited list of all paired combinations of elements of
# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
# has the form PREFIXmINFIXSUFFIXn.
# Needed until we can rely on m4_combine added in Autoconf 2.62.
m4_define([lt_combine],
[m4_if(m4_eval([$# > 3]), [1],
       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
[[m4_foreach([_Lt_prefix], [$2],
	     [m4_foreach([_Lt_suffix],
		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])


# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
# -----------------------------------------------------------------------
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
m4_define([lt_if_append_uniq],
[m4_ifdef([$1],
	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
		 [lt_append([$1], [$2], [$3])$4],
		 [$5])],
	  [lt_append([$1], [$2], [$3])$4])])


# lt_dict_add(DICT, KEY, VALUE)
# -----------------------------
m4_define([lt_dict_add],
[m4_define([$1($2)], [$3])])


# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
# --------------------------------------------
m4_define([lt_dict_add_subkey],
[m4_define([$1($2:$3)], [$4])])


# lt_dict_fetch(DICT, KEY, [SUBKEY])
# ----------------------------------
m4_define([lt_dict_fetch],
[m4_ifval([$3],
	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])


# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
# -----------------------------------------------------------------
m4_define([lt_if_dict_fetch],
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
	[$5],
    [$6])])


# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
# --------------------------------------------------------------
m4_define([lt_dict_filter],
[m4_if([$5], [], [],
  [lt_join(m4_quote(m4_default([$4], [[, ]])),
           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
])

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/ltversion.m4.















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ltversion.m4 -- version numbers			-*- Autoconf -*-
#
#   Copyright (C) 2004 Free Software Foundation, Inc.
#   Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.

# Generated from ltversion.in.

# serial 3017 ltversion.m4
# This file is part of GNU Libtool

m4_define([LT_PACKAGE_VERSION], [2.2.6b])
m4_define([LT_PACKAGE_REVISION], [1.3017])

AC_DEFUN([LTVERSION_VERSION],
[macro_version='2.2.6b'
macro_revision='1.3017'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])

Added luasupport/HTTP/libmicrohttpd-0.9.0/m4/lt~obsolete.m4.

























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
#
#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
#   Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.

# serial 4 lt~obsolete.m4

# These exist entirely to fool aclocal when bootstrapping libtool.
#
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
# which have later been changed to m4_define as they aren't part of the
# exported API, or moved to Autoconf or Automake where they belong.
#
# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
# using a macro with the same name in our local m4/libtool.m4 it'll
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
# and doesn't know about Autoconf macros at all.)
#
# So we provide this file, which has a silly filename so it's always
# included after everything else.  This provides aclocal with the
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
# because those macros already exist, or will be overwritten later.
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
#
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
# Yes, that means every name once taken will need to remain here until
# we give up compatibility with versions before 1.7, at which point
# we need to keep only those names which we still refer to.

# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])

m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])

Added luasupport/HTTP/libmicrohttpd-0.9.0/missing.

















































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
#! /bin/sh
# Common stub for a few missing GNU programs while installing.

scriptversion=2009-04-28.21; # UTC

# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
# 2008, 2009 Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

if test $# -eq 0; then
  echo 1>&2 "Try \`$0 --help' for more information"
  exit 1
fi

run=:
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'

# In the cases where this matters, `missing' is being run in the
# srcdir already.
if test -f configure.ac; then
  configure_ac=configure.ac
else
  configure_ac=configure.in
fi

msg="missing on your system"

case $1 in
--run)
  # Try to run requested program, and just exit if it succeeds.
  run=
  shift
  "$@" && exit 0
  # Exit code 63 means version mismatch.  This often happens
  # when the user try to use an ancient version of a tool on
  # a file that requires a minimum version.  In this case we
  # we should proceed has if the program had been absent, or
  # if --run hadn't been passed.
  if test $? = 63; then
    run=:
    msg="probably too old"
  fi
  ;;

  -h|--h|--he|--hel|--help)
    echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...

Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.

Options:
  -h, --help      display this help and exit
  -v, --version   output version information and exit
  --run           try to run the given command, and emulate it if it fails

Supported PROGRAM values:
  aclocal      touch file \`aclocal.m4'
  autoconf     touch file \`configure'
  autoheader   touch file \`config.h.in'
  autom4te     touch the output file, or create a stub one
  automake     touch all \`Makefile.in' files
  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
  flex         create \`lex.yy.c', if possible, from existing .c
  help2man     touch the output file
  lex          create \`lex.yy.c', if possible, from existing .c
  makeinfo     touch the output file
  tar          try tar, gnutar, gtar, then tar without non-portable flags
  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]

Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
\`g' are ignored when checking the name.

Send bug reports to <bug-automake@gnu.org>."
    exit $?
    ;;

  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
    echo "missing $scriptversion (GNU Automake)"
    exit $?
    ;;

  -*)
    echo 1>&2 "$0: Unknown \`$1' option"
    echo 1>&2 "Try \`$0 --help' for more information"
    exit 1
    ;;

esac

# normalize program name to check for.
program=`echo "$1" | sed '
  s/^gnu-//; t
  s/^gnu//; t
  s/^g//; t'`

# Now exit if we have it, but it failed.  Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).  This is about non-GNU programs, so use $1 not
# $program.
case $1 in
  lex*|yacc*)
    # Not GNU programs, they don't have --version.
    ;;

  tar*)
    if test -n "$run"; then
       echo 1>&2 "ERROR: \`tar' requires --run"
       exit 1
    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
       exit 1
    fi
    ;;

  *)
    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
       # We have it, but it failed.
       exit 1
    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
       # Could not run --version or --help.  This is probably someone
       # running `$TOOL --version' or `$TOOL --help' to check whether
       # $TOOL exists and not knowing $TOOL uses missing.
       exit 1
    fi
    ;;
esac

# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case $program in
  aclocal*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
         to install the \`Automake' and \`Perl' packages.  Grab them from
         any GNU archive site."
    touch aclocal.m4
    ;;

  autoconf*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         you modified \`${configure_ac}'.  You might want to install the
         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
         archive site."
    touch configure
    ;;

  autoheader*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
         from any GNU archive site."
    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
    test -z "$files" && files="config.h"
    touch_files=
    for f in $files; do
      case $f in
      *:*) touch_files="$touch_files "`echo "$f" |
				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
      *) touch_files="$touch_files $f.in";;
      esac
    done
    touch $touch_files
    ;;

  automake*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
         You might want to install the \`Automake' and \`Perl' packages.
         Grab them from any GNU archive site."
    find . -type f -name Makefile.am -print |
	   sed 's/\.am$/.in/' |
	   while read f; do touch "$f"; done
    ;;

  autom4te*)
    echo 1>&2 "\
WARNING: \`$1' is needed, but is $msg.
         You might have modified some files without having the
         proper tools for further handling them.
         You can get \`$1' as part of \`Autoconf' from any GNU
         archive site."

    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    if test -f "$file"; then
	touch $file
    else
	test -z "$file" || exec >$file
	echo "#! /bin/sh"
	echo "# Created by GNU Automake missing as a replacement of"
	echo "#  $ $@"
	echo "exit 0"
	chmod +x $file
	exit 1
    fi
    ;;

  bison*|yacc*)
    echo 1>&2 "\
WARNING: \`$1' $msg.  You should only need it if
         you modified a \`.y' file.  You may need the \`Bison' package
         in order for those modifications to take effect.  You can get
         \`Bison' from any GNU archive site."
    rm -f y.tab.c y.tab.h
    if test $# -ne 1; then
        eval LASTARG="\${$#}"
	case $LASTARG in
	*.y)
	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
	    if test -f "$SRCFILE"; then
	         cp "$SRCFILE" y.tab.c
	    fi
	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
	    if test -f "$SRCFILE"; then
	         cp "$SRCFILE" y.tab.h
	    fi
	  ;;
	esac
    fi
    if test ! -f y.tab.h; then
	echo >y.tab.h
    fi
    if test ! -f y.tab.c; then
	echo 'main() { return 0; }' >y.tab.c
    fi
    ;;

  lex*|flex*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         you modified a \`.l' file.  You may need the \`Flex' package
         in order for those modifications to take effect.  You can get
         \`Flex' from any GNU archive site."
    rm -f lex.yy.c
    if test $# -ne 1; then
        eval LASTARG="\${$#}"
	case $LASTARG in
	*.l)
	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
	    if test -f "$SRCFILE"; then
	         cp "$SRCFILE" lex.yy.c
	    fi
	  ;;
	esac
    fi
    if test ! -f lex.yy.c; then
	echo 'main() { return 0; }' >lex.yy.c
    fi
    ;;

  help2man*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
	 you modified a dependency of a manual page.  You may need the
	 \`Help2man' package in order for those modifications to take
	 effect.  You can get \`Help2man' from any GNU archive site."

    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    if test -f "$file"; then
	touch $file
    else
	test -z "$file" || exec >$file
	echo ".ab help2man is required to generate this page"
	exit $?
    fi
    ;;

  makeinfo*)
    echo 1>&2 "\
WARNING: \`$1' is $msg.  You should only need it if
         you modified a \`.texi' or \`.texinfo' file, or any other file
         indirectly affecting the aspect of the manual.  The spurious
         call might also be the consequence of using a buggy \`make' (AIX,
         DU, IRIX).  You might want to install the \`Texinfo' package or
         the \`GNU make' package.  Grab either from any GNU archive site."
    # The file to touch is that specified with -o ...
    file=`echo "$*" | sed -n "$sed_output"`
    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
    if test -z "$file"; then
      # ... or it is the one specified with @setfilename ...
      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
      file=`sed -n '
	/^@setfilename/{
	  s/.* \([^ ]*\) *$/\1/
	  p
	  q
	}' $infile`
      # ... or it is derived from the source name (dir/f.texi becomes f.info)
      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
    fi
    # If the file does not exist, the user really needs makeinfo;
    # let's fail without touching anything.
    test -f $file || exit 1
    touch $file
    ;;

  tar*)
    shift

    # We have already tried tar in the generic part.
    # Look for gnutar/gtar before invocation to avoid ugly error
    # messages.
    if (gnutar --version > /dev/null 2>&1); then
       gnutar "$@" && exit 0
    fi
    if (gtar --version > /dev/null 2>&1); then
       gtar "$@" && exit 0
    fi
    firstarg="$1"
    if shift; then
	case $firstarg in
	*o*)
	    firstarg=`echo "$firstarg" | sed s/o//`
	    tar "$firstarg" "$@" && exit 0
	    ;;
	esac
	case $firstarg in
	*h*)
	    firstarg=`echo "$firstarg" | sed s/h//`
	    tar "$firstarg" "$@" && exit 0
	    ;;
	esac
    fi

    echo 1>&2 "\
WARNING: I can't seem to be able to run \`tar' with the given arguments.
         You may want to install GNU tar or Free paxutils, or check the
         command line arguments."
    exit 1
    ;;

  *)
    echo 1>&2 "\
WARNING: \`$1' is needed, and is $msg.
         You might have modified some files without having the
         proper tools for further handling them.  Check the \`README' file,
         it often tells you about the needed prerequisites for installing
         this package.  You may also peek at any GNU archive site, in case
         some other package would contain this missing \`$1' program."
    exit 1
    ;;
esac

exit 0

# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/Makefile.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = include daemon examples testcurl testzzuf .
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
curltests = testcurl
##zzuftests = testzzuf
SUBDIRS = include daemon examples $(curltests) $(zzuftests) . 
all: all-recursive

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
	install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-am clean clean-generic clean-libtool \
	ctags ctags-recursive distclean distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/Makefile.am.



















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
if HAVE_CURL
curltests = testcurl
if HAVE_ZZUF
if HAVE_SOCAT
zzuftests = testzzuf
endif
endif
endif
SUBDIRS = include daemon examples $(curltests) $(zzuftests) . 

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/Makefile.in.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = src
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = include daemon examples testcurl testzzuf .
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
@HAVE_CURL_TRUE@curltests = testcurl
@HAVE_CURL_TRUE@@HAVE_SOCAT_TRUE@@HAVE_ZZUF_TRUE@zzuftests = testzzuf
SUBDIRS = include daemon examples $(curltests) $(zzuftests) . 
all: all-recursive

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
	install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-am clean clean-generic clean-libtool \
	ctags ctags-recursive distclean distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/EXPORT.sym.



















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
MHD_start_daemon
MHD_start_daemon_va
MHD_stop_daemon
MHD_get_fdset
MHD_get_timeout
MHD_run
MHD_get_connection_values
MHD_set_connection_value
MHD_lookup_connection_value
MHD_queue_response
MHD_create_response_from_callback
MHD_create_response_from_data
MHD_create_response_from_fd
MHD_destroy_response
MHD_add_response_header
MHD_del_response_header
MHD_get_response_headers
MHD_get_response_header
MHD_create_post_processor
MHD_post_process
MHD_destroy_post_processor
MHD_get_daemon_info
MHD_get_connection_info
MHD_set_panic_func
MHD_get_version

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/Makefile.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/daemon/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.




pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
#am__append_1 = \
#  connection_https.c connection_https.h

check_PROGRAMS = postprocessor_test$(EXEEXT) \
	postprocessor_large_test$(EXEEXT) daemon_test$(EXEEXT)
subdir = src/daemon
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libmicrohttpd_la_DEPENDENCIES =
am__libmicrohttpd_la_SOURCES_DIST = connection.c connection.h \
	reason_phrase.c reason_phrase.h daemon.c internal.c internal.h \
	memorypool.c memorypool.h postprocessor.c response.c \
	response.h connection_https.c connection_https.h
#am__objects_1 = connection_https.lo
am_libmicrohttpd_la_OBJECTS = connection.lo reason_phrase.lo daemon.lo \
	internal.lo memorypool.lo postprocessor.lo response.lo \
	$(am__objects_1)
libmicrohttpd_la_OBJECTS = $(am_libmicrohttpd_la_OBJECTS)
libmicrohttpd_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
	$(libmicrohttpd_la_LDFLAGS) $(LDFLAGS) -o $@
am_daemon_test_OBJECTS = daemon_test.$(OBJEXT)
daemon_test_OBJECTS = $(am_daemon_test_OBJECTS)
daemon_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_postprocessor_large_test_OBJECTS =  \
	postprocessor_large_test.$(OBJEXT)
postprocessor_large_test_OBJECTS =  \
	$(am_postprocessor_large_test_OBJECTS)
postprocessor_large_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_postprocessor_test_OBJECTS = postprocessor_test.$(OBJEXT)
postprocessor_test_OBJECTS = $(am_postprocessor_test_OBJECTS)
postprocessor_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(libmicrohttpd_la_SOURCES) $(daemon_test_SOURCES) \
	$(postprocessor_large_test_SOURCES) \
	$(postprocessor_test_SOURCES)
DIST_SOURCES = $(am__libmicrohttpd_la_SOURCES_DIST) \
	$(daemon_test_SOURCES) $(postprocessor_large_test_SOURCES) \
	$(postprocessor_test_SOURCES)
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../../
top_builddir = ../..
top_srcdir = ../..
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I$(top_srcdir)/src/daemon \
  -I/usr/local/include  -I/usr/local/include 

EXTRA_DIST = EXPORT.sym
lib_LTLIBRARIES = \
  libmicrohttpd.la

libmicrohttpd_la_SOURCES = connection.c connection.h reason_phrase.c \
	reason_phrase.h daemon.c internal.c internal.h memorypool.c \
	memorypool.h postprocessor.c response.c response.h \
	$(am__append_1)
libmicrohttpd_la_LDFLAGS = \
  $(MHD_LIB_LDFLAGS) \
  -version-info 8:0:0

#AM_CFLAGS = --coverage
#libmicrohttpd_la_LIBADD = -lgnutls 
TESTS = $(check_PROGRAMS)
daemon_test_SOURCES = \
  daemon_test.c

daemon_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

postprocessor_test_SOURCES = \
  postprocessor_test.c

postprocessor_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

postprocessor_large_test_SOURCES = \
  postprocessor_large_test.c

postprocessor_large_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

all: all-am

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/daemon/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/daemon/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
	@$(NORMAL_INSTALL)
	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
	list2=; for p in $$list; do \
	  if test -f $$p; then \
	    list2="$$list2 $$p"; \
	  else :; fi; \
	done; \
	test -z "$$list2" || { \
	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
	}

uninstall-libLTLIBRARIES:
	@$(NORMAL_UNINSTALL)
	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
	done

clean-libLTLIBRARIES:
	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
	  test "$$dir" != "$$p" || dir=.; \
	  echo "rm -f \"$${dir}/so_locations\""; \
	  rm -f "$${dir}/so_locations"; \
	done
libmicrohttpd.la: $(libmicrohttpd_la_OBJECTS) $(libmicrohttpd_la_DEPENDENCIES) 
	$(libmicrohttpd_la_LINK) -rpath $(libdir) $(libmicrohttpd_la_OBJECTS) $(libmicrohttpd_la_LIBADD) $(LIBS)

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
daemon_test$(EXEEXT): $(daemon_test_OBJECTS) $(daemon_test_DEPENDENCIES) 
	@rm -f daemon_test$(EXEEXT)
	$(LINK) $(daemon_test_OBJECTS) $(daemon_test_LDADD) $(LIBS)
postprocessor_large_test$(EXEEXT): $(postprocessor_large_test_OBJECTS) $(postprocessor_large_test_DEPENDENCIES) 
	@rm -f postprocessor_large_test$(EXEEXT)
	$(LINK) $(postprocessor_large_test_OBJECTS) $(postprocessor_large_test_LDADD) $(LIBS)
postprocessor_test$(EXEEXT): $(postprocessor_test_OBJECTS) $(postprocessor_test_DEPENDENCIES) 
	@rm -f postprocessor_test$(EXEEXT)
	$(LINK) $(postprocessor_test_OBJECTS) $(postprocessor_test_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

include ./$(DEPDIR)/connection.Plo
include ./$(DEPDIR)/connection_https.Plo
include ./$(DEPDIR)/daemon.Plo
include ./$(DEPDIR)/daemon_test.Po
include ./$(DEPDIR)/internal.Plo
include ./$(DEPDIR)/memorypool.Plo
include ./$(DEPDIR)/postprocessor.Plo
include ./$(DEPDIR)/postprocessor_large_test.Po
include ./$(DEPDIR)/postprocessor_test.Po
include ./$(DEPDIR)/reason_phrase.Plo
include ./$(DEPDIR)/response.Plo

.c.o:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c $<

.c.obj:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
#	source='$<' object='$@' libtool=yes \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
	for dir in "$(DESTDIR)$(libdir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
	clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am: install-libLTLIBRARIES

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am: uninstall-libLTLIBRARIES

.MAKE: check-am install-am install-strip

.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
	clean-libtool ctags distclean distclean-compile \
	distclean-generic distclean-libtool distclean-tags distdir dvi \
	dvi-am html html-am info info-am install install-am \
	install-data install-data-am install-dvi install-dvi-am \
	install-exec install-exec-am install-html install-html-am \
	install-info install-info-am install-libLTLIBRARIES \
	install-man install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs maintainer-clean maintainer-clean-generic \
	mostlyclean mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
	uninstall-am uninstall-libLTLIBRARIES


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/Makefile.am.













































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I$(top_srcdir)/src/daemon \
  @LIBGCRYPT_CFLAGS@ 

EXTRA_DIST = EXPORT.sym

lib_LTLIBRARIES = \
  libmicrohttpd.la

libmicrohttpd_la_SOURCES = \
  connection.c connection.h \
  reason_phrase.c reason_phrase.h \
  daemon.c  \
  internal.c internal.h \
  memorypool.c memorypool.h \
  postprocessor.c \
  response.c response.h
libmicrohttpd_la_LDFLAGS = \
  $(MHD_LIB_LDFLAGS) \
  -version-info @LIB_VERSION_CURRENT@:@LIB_VERSION_REVISION@:@LIB_VERSION_AGE@

if USE_COVERAGE
  AM_CFLAGS = --coverage
endif


if ENABLE_HTTPS
libmicrohttpd_la_SOURCES += \
  connection_https.c connection_https.h
libmicrohttpd_la_LIBADD = -lgnutls 
endif

check_PROGRAMS = \
  postprocessor_test \
  postprocessor_large_test \
  daemon_test 

TESTS = $(check_PROGRAMS)

daemon_test_SOURCES = \
  daemon_test.c
daemon_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

postprocessor_test_SOURCES = \
  postprocessor_test.c
postprocessor_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

postprocessor_large_test_SOURCES = \
  postprocessor_large_test.c
postprocessor_large_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/Makefile.in.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_HTTPS_TRUE@am__append_1 = \
@ENABLE_HTTPS_TRUE@  connection_https.c connection_https.h

check_PROGRAMS = postprocessor_test$(EXEEXT) \
	postprocessor_large_test$(EXEEXT) daemon_test$(EXEEXT)
subdir = src/daemon
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libmicrohttpd_la_DEPENDENCIES =
am__libmicrohttpd_la_SOURCES_DIST = connection.c connection.h \
	reason_phrase.c reason_phrase.h daemon.c internal.c internal.h \
	memorypool.c memorypool.h postprocessor.c response.c \
	response.h connection_https.c connection_https.h
@ENABLE_HTTPS_TRUE@am__objects_1 = connection_https.lo
am_libmicrohttpd_la_OBJECTS = connection.lo reason_phrase.lo daemon.lo \
	internal.lo memorypool.lo postprocessor.lo response.lo \
	$(am__objects_1)
libmicrohttpd_la_OBJECTS = $(am_libmicrohttpd_la_OBJECTS)
libmicrohttpd_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
	$(libmicrohttpd_la_LDFLAGS) $(LDFLAGS) -o $@
am_daemon_test_OBJECTS = daemon_test.$(OBJEXT)
daemon_test_OBJECTS = $(am_daemon_test_OBJECTS)
daemon_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_postprocessor_large_test_OBJECTS =  \
	postprocessor_large_test.$(OBJEXT)
postprocessor_large_test_OBJECTS =  \
	$(am_postprocessor_large_test_OBJECTS)
postprocessor_large_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_postprocessor_test_OBJECTS = postprocessor_test.$(OBJEXT)
postprocessor_test_OBJECTS = $(am_postprocessor_test_OBJECTS)
postprocessor_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(libmicrohttpd_la_SOURCES) $(daemon_test_SOURCES) \
	$(postprocessor_large_test_SOURCES) \
	$(postprocessor_test_SOURCES)
DIST_SOURCES = $(am__libmicrohttpd_la_SOURCES_DIST) \
	$(daemon_test_SOURCES) $(postprocessor_large_test_SOURCES) \
	$(postprocessor_test_SOURCES)
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I$(top_srcdir)/src/daemon \
  @LIBGCRYPT_CFLAGS@ 

EXTRA_DIST = EXPORT.sym
lib_LTLIBRARIES = \
  libmicrohttpd.la

libmicrohttpd_la_SOURCES = connection.c connection.h reason_phrase.c \
	reason_phrase.h daemon.c internal.c internal.h memorypool.c \
	memorypool.h postprocessor.c response.c response.h \
	$(am__append_1)
libmicrohttpd_la_LDFLAGS = \
  $(MHD_LIB_LDFLAGS) \
  -version-info @LIB_VERSION_CURRENT@:@LIB_VERSION_REVISION@:@LIB_VERSION_AGE@

@USE_COVERAGE_TRUE@AM_CFLAGS = --coverage
@ENABLE_HTTPS_TRUE@libmicrohttpd_la_LIBADD = -lgnutls 
TESTS = $(check_PROGRAMS)
daemon_test_SOURCES = \
  daemon_test.c

daemon_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

postprocessor_test_SOURCES = \
  postprocessor_test.c

postprocessor_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

postprocessor_large_test_SOURCES = \
  postprocessor_large_test.c

postprocessor_large_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la 

all: all-am

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/daemon/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/daemon/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
	@$(NORMAL_INSTALL)
	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
	list2=; for p in $$list; do \
	  if test -f $$p; then \
	    list2="$$list2 $$p"; \
	  else :; fi; \
	done; \
	test -z "$$list2" || { \
	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
	}

uninstall-libLTLIBRARIES:
	@$(NORMAL_UNINSTALL)
	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
	for p in $$list; do \
	  $(am__strip_dir) \
	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
	done

clean-libLTLIBRARIES:
	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
	  test "$$dir" != "$$p" || dir=.; \
	  echo "rm -f \"$${dir}/so_locations\""; \
	  rm -f "$${dir}/so_locations"; \
	done
libmicrohttpd.la: $(libmicrohttpd_la_OBJECTS) $(libmicrohttpd_la_DEPENDENCIES) 
	$(libmicrohttpd_la_LINK) -rpath $(libdir) $(libmicrohttpd_la_OBJECTS) $(libmicrohttpd_la_LIBADD) $(LIBS)

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
daemon_test$(EXEEXT): $(daemon_test_OBJECTS) $(daemon_test_DEPENDENCIES) 
	@rm -f daemon_test$(EXEEXT)
	$(LINK) $(daemon_test_OBJECTS) $(daemon_test_LDADD) $(LIBS)
postprocessor_large_test$(EXEEXT): $(postprocessor_large_test_OBJECTS) $(postprocessor_large_test_DEPENDENCIES) 
	@rm -f postprocessor_large_test$(EXEEXT)
	$(LINK) $(postprocessor_large_test_OBJECTS) $(postprocessor_large_test_LDADD) $(LIBS)
postprocessor_test$(EXEEXT): $(postprocessor_test_OBJECTS) $(postprocessor_test_DEPENDENCIES) 
	@rm -f postprocessor_test$(EXEEXT)
	$(LINK) $(postprocessor_test_OBJECTS) $(postprocessor_test_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection_https.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemon.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemon_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/internal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memorypool.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postprocessor.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postprocessor_large_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postprocessor_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reason_phrase.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/response.Plo@am__quote@

.c.o:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c $<

.c.obj:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
	for dir in "$(DESTDIR)$(libdir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
	clean-libtool mostlyclean-am

distclean: distclean-am
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am: install-libLTLIBRARIES

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am: uninstall-libLTLIBRARIES

.MAKE: check-am install-am install-strip

.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \
	clean-libtool ctags distclean distclean-compile \
	distclean-generic distclean-libtool distclean-tags distdir dvi \
	dvi-am html html-am info info-am install install-am \
	install-data install-data-am install-dvi install-dvi-am \
	install-exec install-exec-am install-html install-html-am \
	install-info install-info-am install-libLTLIBRARIES \
	install-man install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs maintainer-clean maintainer-clean-generic \
	mostlyclean mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
	uninstall-am uninstall-libLTLIBRARIES


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.c.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
/*
    This file is part of libmicrohttpd
     (C) 2007, 2008, 2009, 2010 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

*/

/**
 * @file connection.c
 * @brief  Methods for managing connections
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#include "internal.h"
#include "connection.h"
#include "memorypool.h"
#include "response.h"
#include "reason_phrase.h"

#if HAVE_NETINET_TCP_H
/* for TCP_CORK */
#include <netinet/tcp.h>
#endif

/**
 * Message to transmit when http 1.1 request is received
 */
#define HTTP_100_CONTINUE "HTTP/1.1 100 Continue\r\n\r\n"

/**
 * Response text used when the request (http header) is too big to
 * be processed.
 *
 * Intentionally empty here to keep our memory footprint
 * minimal.
 */
#if HAVE_MESSAGES
#define REQUEST_TOO_BIG "<html><head><title>Request too big</title></head><body>Your HTTP header was too big for the memory constraints of this webserver.</body></html>"
#else
#define REQUEST_TOO_BIG ""
#endif

/**
 * Response text used when the request (http header) does not
 * contain a "Host:" header and still claims to be HTTP 1.1.
 *
 * Intentionally empty here to keep our memory footprint
 * minimal.
 */
#if HAVE_MESSAGES
#define REQUEST_LACKS_HOST "<html><head><title>&quot;Host:&quot; header required</title></head><body>In HTTP 1.1, requests must include a &quot;Host:&quot; header, and your HTTP 1.1 request lacked such a header.</body></html>"
#else
#define REQUEST_LACKS_HOST ""
#endif

/**
 * Response text used when the request (http header) is
 * malformed.
 *
 * Intentionally empty here to keep our memory footprint
 * minimal.
 */
#if HAVE_MESSAGES
#define REQUEST_MALFORMED "<html><head><title>Request malformed</title></head><body>Your HTTP request was syntactically incorrect.</body></html>"
#else
#define REQUEST_MALFORMED ""
#endif

/**
 * Response text used when there is an internal server error.
 *
 * Intentionally empty here to keep our memory footprint
 * minimal.
 */
#if HAVE_MESSAGES
#define INTERNAL_ERROR "<html><head><title>Internal server error</title></head><body>Some programmer needs to study the manual more carefully.</body></html>"
#else
#define INTERNAL_ERROR ""
#endif

/**
 * Add extra debug messages with reasons for closing connections
 * (non-error reasons).
 */
#define DEBUG_CLOSE MHD_NO

/**
 * Should all data send be printed to stderr?
 */
#define DEBUG_SEND_DATA MHD_NO

/**
 * Get all of the headers from the request.
 *
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_connection_values (struct MHD_Connection *connection,
                           enum MHD_ValueKind kind,
                           MHD_KeyValueIterator iterator, void *iterator_cls)
{
  int ret;
  struct MHD_HTTP_Header *pos;

  if (connection == NULL)
    return -1;
  ret = 0;
  pos = connection->headers_received;
  while (pos != NULL)
    {
      if (0 != (pos->kind & kind))
        {
          ret++;
          if ((iterator != NULL) &&
              (MHD_YES != iterator (iterator_cls,
                                    kind, pos->header, pos->value)))
            return ret;
        }
      pos = pos->next;
    }
  return ret;
}

/**
 * This function can be used to add an entry to
 * the HTTP headers of a connection (so that the
 * MHD_get_connection_values function will return
 * them -- and the MHD PostProcessor will also
 * see them).  This maybe required in certain
 * situations (see Mantis #1399) where (broken)
 * HTTP implementations fail to supply values needed
 * by the post processor (or other parts of the
 * application).
 * <p>
 * This function MUST only be called from within
 * the MHD_AccessHandlerCallback (otherwise, access
 * maybe improperly synchronized).  Furthermore,
 * the client must guarantee that the key and
 * value arguments are 0-terminated strings that
 * are NOT freed until the connection is closed.
 * (The easiest way to do this is by passing only
 * arguments to permanently allocated strings.).
 *
 * @param connection the connection for which a
 *  value should be set
 * @param kind kind of the value
 * @param key key for the value
 * @param value the value itself
 * @return MHD_NO if the operation could not be
 *         performed due to insufficient memory;
 *         MHD_YES on success
 */
int
MHD_set_connection_value (struct MHD_Connection *connection,
                          enum MHD_ValueKind kind,
                          const char *key, const char *value)
{
  struct MHD_HTTP_Header *pos;

  pos = MHD_pool_allocate (connection->pool,
                           sizeof (struct MHD_HTTP_Header), MHD_NO);
  if (pos == NULL)
    return MHD_NO;
  pos->header = (char *) key;
  pos->value = (char *) value;
  pos->kind = kind;
  pos->next = connection->headers_received;
  connection->headers_received = pos;
  return MHD_YES;
}

/**
 * Get a particular header value.  If multiple
 * values match the kind, return any one of them.
 *
 * @param key the header to look for
 * @return NULL if no such item was found
 */
const char *
MHD_lookup_connection_value (struct MHD_Connection *connection,
                             enum MHD_ValueKind kind, const char *key)
{
  struct MHD_HTTP_Header *pos;

  if (connection == NULL)
    return NULL;
  pos = connection->headers_received;
  while (pos != NULL)
    {
      if ((0 != (pos->kind & kind)) && (0 == strcasecmp (key, pos->header)))
        return pos->value;
      pos = pos->next;
    }
  return NULL;
}

/**
 * Queue a response to be transmitted to the client (as soon as
 * possible but after MHD_AccessHandlerCallback returns).
 *
 * @param connection the connection identifying the client
 * @param status_code HTTP status code (i.e. 200 for OK)
 * @param response response to transmit
 * @return MHD_NO on error (i.e. reply already sent),
 *         MHD_YES on success or if message has been queued
 */
int
MHD_queue_response (struct MHD_Connection *connection,
                    unsigned int status_code, struct MHD_Response *response)
{

  if ((connection == NULL) ||
      (response == NULL) ||
      (connection->response != NULL) ||
      ((connection->state != MHD_CONNECTION_HEADERS_PROCESSED) &&
       (connection->state != MHD_CONNECTION_FOOTERS_RECEIVED)))
    return MHD_NO;

  MHD_increment_response_rc (response);
  connection->response = response;
  connection->responseCode = status_code;
  if ((connection->method != NULL) &&
      (0 == strcasecmp (connection->method, MHD_HTTP_METHOD_HEAD)))
    {
      /* if this is a "HEAD" request, pretend that we
         have already sent the full message body */
      connection->response_write_position = response->total_size;
    }
  if ((response->total_size == MHD_SIZE_UNKNOWN) &&
      (0 == strcasecmp (connection->version, MHD_HTTP_VERSION_1_1)))
    connection->have_chunked_response = MHD_YES;
  else
    connection->have_chunked_response = MHD_NO;
  if (connection->state == MHD_CONNECTION_HEADERS_PROCESSED)
    {
      /* response was queued "early",
         refuse to read body / footers or further
         requests! */
      SHUTDOWN (connection->socket_fd, SHUT_RD);
      connection->read_closed = MHD_YES;
      connection->state = MHD_CONNECTION_FOOTERS_RECEIVED;
    }
  return MHD_YES;
}

/**
 * Do we (still) need to send a 100 continue
 * message for this connection?
 */
static int
need_100_continue (struct MHD_Connection *connection)
{
  const char *expect;

  return ((connection->response == NULL) &&
          (connection->version != NULL) &&
          (0 == strcasecmp (connection->version,
                            MHD_HTTP_VERSION_1_1)) &&
          (NULL != (expect = MHD_lookup_connection_value (connection,
                                                          MHD_HEADER_KIND,
                                                          MHD_HTTP_HEADER_EXPECT)))
          && (0 == strcasecmp (expect, "100-continue"))
          && (connection->continue_message_write_offset <
              strlen (HTTP_100_CONTINUE)));
}

/**
 * Close the given connection and give the
 * specified termination code to the user.
 */
void
MHD_connection_close (struct MHD_Connection *connection,
                      enum MHD_RequestTerminationCode termination_code)
{
  SHUTDOWN (connection->socket_fd, SHUT_RDWR);
  CLOSE (connection->socket_fd);
  connection->socket_fd = -1;
  connection->state = MHD_CONNECTION_CLOSED;
  if ( (NULL != connection->daemon->notify_completed) &&
       (MHD_YES == connection->client_aware) )
    connection->daemon->notify_completed (connection->daemon->
					  notify_completed_cls, connection,
					  &connection->client_context,
					  termination_code);
  connection->client_aware = MHD_NO;
}

/**
 * A serious error occured, close the
 * connection (and notify the application).
 */
static void
connection_close_error (struct MHD_Connection *connection)
{
  MHD_connection_close (connection, MHD_REQUEST_TERMINATED_WITH_ERROR);
}

/**
 * Prepare the response buffer of this connection for
 * sending.  Assumes that the response mutex is
 * already held.  If the transmission is complete,
 * this function may close the socket (and return
 * MHD_NO).
 *
 * @return MHD_NO if readying the response failed
 */
static int
try_ready_normal_body (struct MHD_Connection *connection)
{
  int ret;
  struct MHD_Response *response;

  response = connection->response;
  if (response->crc == NULL)
    return MHD_YES;
  if ( (response->data_start <=
	connection->response_write_position) &&
       (response->data_size + response->data_start >
	connection->response_write_position) )
    return MHD_YES; /* response already ready */
#if LINUX
  if ( (response->fd != -1) &&
       (0 == (connection->daemon->options & MHD_USE_SSL)) )
    {
      /* will use sendfile, no need to bother response crc */
      return MHD_YES; 
    }
#endif
  ret = response->crc (response->crc_cls,
                       connection->response_write_position,
                       response->data,
                       MHD_MIN (response->data_buffer_size,
                                response->total_size -
                                connection->response_write_position));
  if ((ret == 0) &&
      (0 != (connection->daemon->options & MHD_USE_SELECT_INTERNALLY)))
    mhd_panic (mhd_panic_cls, __FILE__, __LINE__, 
#if HAVE_MESSAGES
	       "API violation"
#else
	       NULL
#endif
	       );
  if (ret == -1)
    {
      /* either error or http 1.0 transfer, close
         socket! */
#if DEBUG_CLOSE
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon, "Closing connection (end of response)\n");
#endif
#endif
      response->total_size = connection->response_write_position;
      connection_close_error (connection);
      return MHD_NO;
    }
  response->data_start = connection->response_write_position;
  response->data_size = ret;
  if (ret == 0)
    return MHD_NO;
  return MHD_YES;
}

/**
 * Prepare the response buffer of this connection for
 * sending.  Assumes that the response mutex is
 * already held.  If the transmission is complete,
 * this function may close the socket (and return
 * MHD_NO).
 *
 * @return MHD_NO if readying the response failed
 */
static int
try_ready_chunked_body (struct MHD_Connection *connection)
{
  int ret;
  char *buf;
  struct MHD_Response *response;
  size_t size;
  char cbuf[10];                /* 10: max strlen of "%x\r\n" */
  int cblen;

  response = connection->response;
  if (connection->write_buffer_size == 0)
    {
      size = connection->daemon->pool_size;
      do
        {
          size /= 2;
          if (size < 128)
            {
              /* not enough memory */
#if DEBUG_CLOSE
#if HAVE_MESSAGES
              MHD_DLOG (connection->daemon,
                        "Closing connection (out of memory)\n");
#endif
#endif
              connection_close_error (connection);
              return MHD_NO;
            }
          buf = MHD_pool_allocate (connection->pool, size, MHD_NO);
        }
      while (buf == NULL);
      connection->write_buffer_size = size;
      connection->write_buffer = buf;
    }

  if ( (response->data_start <=
	connection->response_write_position) &&
       (response->data_size + response->data_start >
	connection->response_write_position) )
    {
      /* buffer already ready, use what is there for the chunk */
      ret = response->data_size + response->data_start - connection->response_write_position;
      if (ret > connection->write_buffer_size - sizeof (cbuf) - 2)
	ret = connection->write_buffer_size - sizeof (cbuf) - 2;
      memcpy (&connection->write_buffer[sizeof (cbuf)],
	      &response->data[connection->response_write_position - response->data_start],
	      ret);
    }
  else
    {
      /* buffer not in range, try to fill it */
      ret = response->crc (response->crc_cls,
			   connection->response_write_position,
			   &connection->write_buffer[sizeof (cbuf)],
			   connection->write_buffer_size - sizeof (cbuf) - 2);
    }
  if (ret == -1)
    {
      /* end of message, signal other side! */
      strcpy (connection->write_buffer, "0\r\n");
      connection->write_buffer_append_offset = 3;
      connection->write_buffer_send_offset = 0;
      response->total_size = connection->response_write_position;
      return MHD_YES;
    }
  if (ret == 0)
    {
      connection->state = MHD_CONNECTION_CHUNKED_BODY_UNREADY;
      return MHD_NO;
    }
  if (ret > 0xFFFFFF)
    ret = 0xFFFFFF;
  snprintf (cbuf, 
	    sizeof (cbuf),
	    "%X\r\n", ret);
  cblen = strlen (cbuf);
  EXTRA_CHECK (cblen <= sizeof (cbuf));
  memcpy (&connection->write_buffer[sizeof (cbuf) - cblen], cbuf, cblen);
  memcpy (&connection->write_buffer[sizeof (cbuf) + ret], "\r\n", 2);
  connection->response_write_position += ret;
  connection->write_buffer_send_offset = sizeof (cbuf) - cblen;
  connection->write_buffer_append_offset = sizeof (cbuf) + ret + 2;
  return MHD_YES;
}

/**
 * Check if we need to set some additional headers
 * for http-compiliance.
 */
static void
add_extra_headers (struct MHD_Connection *connection)
{
  const char *have;
  char buf[128];

  connection->have_chunked_upload = MHD_NO;
  if (connection->response->total_size == MHD_SIZE_UNKNOWN)
    {
      have = MHD_get_response_header (connection->response,
                                      MHD_HTTP_HEADER_CONNECTION);
      if ((have == NULL) || (0 != strcasecmp (have, "close")))
        {
          if ((connection->version != NULL) &&
              (0 == strcasecmp (connection->version, MHD_HTTP_VERSION_1_1)))
            {
              connection->have_chunked_upload = MHD_YES;
              have = MHD_get_response_header (connection->response,
                                              MHD_HTTP_HEADER_TRANSFER_ENCODING);
              if (have == NULL)
                MHD_add_response_header (connection->response,
                                         MHD_HTTP_HEADER_TRANSFER_ENCODING,
                                         "chunked");
            }
          else
            {
              MHD_add_response_header (connection->response,
                                       MHD_HTTP_HEADER_CONNECTION, "close");
            }
        }
    }
  else if (NULL == MHD_get_response_header (connection->response,
                                            MHD_HTTP_HEADER_CONTENT_LENGTH))
    {
      SPRINTF (buf,
               "%llu",
	       (unsigned long long)connection->response->total_size);
      MHD_add_response_header (connection->response,
                               MHD_HTTP_HEADER_CONTENT_LENGTH, buf);
    }
}

/**
 * Produce HTTP "Date:" header.
 *
 * @param date where to write the header, with
 *        at least 128 bytes available space.
 */
static void
get_date_string (char *date)
{
  static const char *days[] =
    { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
  static const char *mons[] =
    { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
    "Nov", "Dec"
  };
  struct tm now;
  time_t t;

  time (&t);
  gmtime_r (&t, &now);
  SPRINTF (date,
           "Date: %3s, %02u %3s %04u %02u:%02u:%02u GMT\r\n",
           days[now.tm_wday % 7],
           now.tm_mday,
           mons[now.tm_mon % 12],
           1900 + now.tm_year, now.tm_hour, now.tm_min, now.tm_sec);
}

/**
 * Try growing the read buffer
 *
 * @return MHD_YES on success, MHD_NO on failure
 */
static int
try_grow_read_buffer (struct MHD_Connection *connection)
{
  void *buf;

  buf = MHD_pool_reallocate (connection->pool,
                             connection->read_buffer,
                             connection->read_buffer_size,
                             connection->read_buffer_size * 2 +
                             MHD_BUF_INC_SIZE + 1);
  if (buf == NULL)
    return MHD_NO;
  /* we can actually grow the buffer, do it! */
  connection->read_buffer = buf;
  connection->read_buffer_size =
    connection->read_buffer_size * 2 + MHD_BUF_INC_SIZE;
  return MHD_YES;
}

/**
 * Allocate the connection's write buffer and
 * fill it with all of the headers (or footers,
 * if we have already sent the body) from the
 * HTTPd's response.
 */
static int
build_header_response (struct MHD_Connection *connection)
{
  size_t size;
  size_t off;
  struct MHD_HTTP_Header *pos;
  char code[256];
  char date[128];
  char *data;
  enum MHD_ValueKind kind;
  const char *reason_phrase;

  EXTRA_CHECK (NULL != connection->version);
  if (0 == strlen(connection->version))
    {
      data = MHD_pool_allocate (connection->pool, 0, MHD_YES);
      connection->write_buffer = data;
      connection->write_buffer_append_offset = 0;
      connection->write_buffer_send_offset = 0;
      connection->write_buffer_size = 0;
      return MHD_YES;
    }
  if (connection->state == MHD_CONNECTION_FOOTERS_RECEIVED)
    {
      add_extra_headers (connection);
      reason_phrase = MHD_get_reason_phrase_for (connection->responseCode);
      SPRINTF (code,
               "%s %u %s\r\n",
               (0 == strcasecmp (MHD_HTTP_VERSION_1_0,
				 connection->version)) 
	       ? MHD_HTTP_VERSION_1_0 
	       : MHD_HTTP_VERSION_1_1,
	       connection->responseCode, 
	       reason_phrase);
      off = strlen (code);
      /* estimate size */
      size = off + 2;           /* extra \r\n at the end */
      kind = MHD_HEADER_KIND;
      if (NULL == MHD_get_response_header (connection->response,
                                           MHD_HTTP_HEADER_DATE))
        get_date_string (date);
      else
        date[0] = '\0';
      size += strlen (date);
    }
  else
    {
      size = 2;
      kind = MHD_FOOTER_KIND;
      off = 0;
    }
  pos = connection->response->first_header;
  while (pos != NULL)
    {
      if (pos->kind == kind)
        size += strlen (pos->header) + strlen (pos->value) + 4; /* colon, space, linefeeds */
      pos = pos->next;
    }
  /* produce data */
  data = MHD_pool_allocate (connection->pool, size + 1, MHD_YES);
  if (data == NULL)
    {
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon, "Not enough memory for write!\n");
#endif
      return MHD_NO;
    }
  if (connection->state == MHD_CONNECTION_FOOTERS_RECEIVED)
    {
      memcpy (data, code, off);
    }
  pos = connection->response->first_header;
  while (pos != NULL)
    {
      if (pos->kind == kind)
        off += SPRINTF (&data[off], "%s: %s\r\n", pos->header, pos->value);
      pos = pos->next;
    }
  if (connection->state == MHD_CONNECTION_FOOTERS_RECEIVED)
    {
      strcpy (&data[off], date);
      off += strlen (date);
    }
  memcpy (&data[off], "\r\n", 2);
  off += 2;
  if (off != size)
    mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);
  connection->write_buffer = data;
  connection->write_buffer_append_offset = size;
  connection->write_buffer_send_offset = 0;
  connection->write_buffer_size = size + 1;
  return MHD_YES;
}

/**
 * We encountered an error processing the request.
 * Handle it properly by stopping to read data
 * and sending the indicated response code and message.
 *
 * @param status_code the response code to send (400, 413 or 414)
 */
static void
transmit_error_response (struct MHD_Connection *connection,
                         unsigned int status_code, const char *message)
{
  struct MHD_Response *response;

  if (connection->version == NULL)
    {
      /* we were unable to process the full header line, so we don't
	 really know what version the client speaks; assume 1.0 */
      connection->version = MHD_HTTP_VERSION_1_0;
    }
  connection->state = MHD_CONNECTION_FOOTERS_RECEIVED;
  connection->read_closed = MHD_YES;
#if HAVE_MESSAGES
  MHD_DLOG (connection->daemon,
            "Error %u (`%s') processing request, closing connection.\n",
            status_code, message);
#endif
  response = MHD_create_response_from_data (strlen (message),
                                            (void *) message, MHD_NO, MHD_NO);
  MHD_queue_response (connection, status_code, response);
  EXTRA_CHECK (connection->response != NULL);
  MHD_destroy_response (response);
  if (MHD_NO == build_header_response (connection))
    {
      /* oops - close! */
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
                "Closing connection (failed to create response header)\n");
#endif
      connection->state = MHD_CONNECTION_CLOSED;
    }
  else
    {
      connection->state = MHD_CONNECTION_HEADERS_SENDING;
    }
}

/**
 * Add "fd" to the "fd_set".  If "fd" is
 * greater than "*max", set "*max" to fd.
 */
static void
do_fd_set (int fd, fd_set * set, int *max_fd)
{
  FD_SET (fd, set);
  if ( (NULL != max_fd) &&
       (fd > *max_fd) )
    *max_fd = fd;
}

/**
 * Obtain the select sets for this connection
 *
 * @return MHD_YES on success
 */
int
MHD_connection_get_fdset (struct MHD_Connection *connection,
                          fd_set * read_fd_set,
                          fd_set * write_fd_set,
                          fd_set * except_fd_set, int *max_fd)
{
  int ret;
  struct MHD_Pollfd p;

  memset(&p, 0, sizeof(struct MHD_Pollfd));
  ret = MHD_connection_get_pollfd(connection, &p);
  if ( (ret == MHD_YES) && (p.fd >= 0) ) {
    if (0 != (p.events & MHD_POLL_ACTION_IN)) 
      do_fd_set(p.fd, read_fd_set, max_fd);    
    if (0 != (p.events & MHD_POLL_ACTION_OUT)) 
      do_fd_set(p.fd, write_fd_set, max_fd);    
  }
  return ret;
}

/**
 * Obtain the pollfd for this connection
 *
 * @return MHD_YES on success. If return MHD_YES and p->fd < 0, this 
 *                 connection is not waiting for any read or write events
 */
int
MHD_connection_get_pollfd(struct MHD_Connection *connection, struct MHD_Pollfd *p)
{
  int fd;

  if (connection->pool == NULL)
    connection->pool = MHD_pool_create (connection->daemon->pool_size);
  if (connection->pool == NULL)
    {
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon, "Failed to create memory pool!\n");
#endif
      connection_close_error (connection);
      return MHD_NO;
    }
  fd = connection->socket_fd;
  p->fd = fd;
  if (fd == -1)
    return MHD_YES;
  while (1)
    {
#if DEBUG_STATES
      MHD_DLOG (connection->daemon, "%s: state: %s\n",
                __FUNCTION__, MHD_state_to_string (connection->state));
#endif
      switch (connection->state)
        {
#if HTTPS_SUPPORT     
	case MHD_TLS_CONNECTION_INIT:
	  if (0 == gnutls_record_get_direction (connection->tls_session))
            p->events |= MHD_POLL_ACTION_IN;
	  else
	    p->events |= MHD_POLL_ACTION_OUT;
	  break;
#endif
        case MHD_CONNECTION_INIT:
        case MHD_CONNECTION_URL_RECEIVED:
        case MHD_CONNECTION_HEADER_PART_RECEIVED:
          /* while reading headers, we always grow the
             read buffer if needed, no size-check required */
          if ((connection->read_closed) &&
              (connection->read_buffer_offset == 0))
            {
              connection->state = MHD_CONNECTION_CLOSED;
              continue;
            }
          if ((connection->read_buffer_offset == connection->read_buffer_size)
              && (MHD_NO == try_grow_read_buffer (connection)))
            {
              transmit_error_response (connection,
                                       (connection->url != NULL)
                                       ? MHD_HTTP_REQUEST_ENTITY_TOO_LARGE
                                       : MHD_HTTP_REQUEST_URI_TOO_LONG,
                                       REQUEST_TOO_BIG);
              continue;
            }
          if (MHD_NO == connection->read_closed)
            p->events |= MHD_POLL_ACTION_IN;
          break;
        case MHD_CONNECTION_HEADERS_RECEIVED:
          /* we should never get here */
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_HEADERS_PROCESSED:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_CONTINUE_SENDING:
          p->events |= MHD_POLL_ACTION_OUT;
          break;
        case MHD_CONNECTION_CONTINUE_SENT:
          if (connection->read_buffer_offset == connection->read_buffer_size)
            {
              if ((MHD_YES != try_grow_read_buffer (connection)) &&
                  (0 != (connection->daemon->options &
                         (MHD_USE_SELECT_INTERNALLY |
                          MHD_USE_THREAD_PER_CONNECTION))))
                {
                  /* failed to grow the read buffer, and the
                     client which is supposed to handle the
                     received data in a *blocking* fashion
                     (in this mode) did not handle the data as
                     it was supposed to!
                     => we would either have to do busy-waiting
                     (on the client, which would likely fail),
                     or if we do nothing, we would just timeout
                     on the connection (if a timeout is even
                     set!).
                     Solution: we kill the connection with an error */
                  transmit_error_response (connection,
                                           MHD_HTTP_INTERNAL_SERVER_ERROR,
                                           INTERNAL_ERROR);
                  continue;
                }
            }
          if ((connection->read_buffer_offset < connection->read_buffer_size)
              && (MHD_NO == connection->read_closed))
            p->events |= MHD_POLL_ACTION_IN;
          break;
        case MHD_CONNECTION_BODY_RECEIVED:
        case MHD_CONNECTION_FOOTER_PART_RECEIVED:
          /* while reading footers, we always grow the
             read buffer if needed, no size-check required */
          if (MHD_YES == connection->read_closed)
            {
              connection->state = MHD_CONNECTION_CLOSED;
              continue;
            }
          p->events |= MHD_POLL_ACTION_IN;
          /* transition to FOOTERS_RECEIVED
             happens in read handler */
          break;
        case MHD_CONNECTION_FOOTERS_RECEIVED:
          /* no socket action, wait for client
             to provide response */
          break;
        case MHD_CONNECTION_HEADERS_SENDING:
          /* headers in buffer, keep writing */
          p->events |= MHD_POLL_ACTION_OUT;
          break;
        case MHD_CONNECTION_HEADERS_SENT:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_NORMAL_BODY_READY:
          p->events |= MHD_POLL_ACTION_OUT;
          break;
        case MHD_CONNECTION_NORMAL_BODY_UNREADY:
          /* not ready, no socket action */
          break;
        case MHD_CONNECTION_CHUNKED_BODY_READY:
          p->events |= MHD_POLL_ACTION_OUT;
          break;
        case MHD_CONNECTION_CHUNKED_BODY_UNREADY:
          /* not ready, no socket action */
          break;
        case MHD_CONNECTION_BODY_SENT:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_FOOTERS_SENDING:
          p->events |= MHD_POLL_ACTION_OUT;
          break;
        case MHD_CONNECTION_FOOTERS_SENT:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_CLOSED:
          if (connection->socket_fd != -1)
            connection_close_error (connection);
          return MHD_YES;       /* do nothing, not even reading */

        default:
          EXTRA_CHECK (0);
        }
      break;
    }
  return MHD_YES;
}

/**
 * Parse a single line of the HTTP header.  Advance
 * read_buffer (!) appropriately.  If the current line does not
 * fit, consider growing the buffer.  If the line is
 * far too long, close the connection.  If no line is
 * found (incomplete, buffer too small, line too long),
 * return NULL.  Otherwise return a pointer to the line.
 */
static char *
get_next_header_line (struct MHD_Connection *connection)
{
  char *rbuf;
  size_t pos;

  if (connection->read_buffer_offset == 0)
    return NULL;
  pos = 0;
  rbuf = connection->read_buffer;
  while ((pos < connection->read_buffer_offset - 1) &&
         (rbuf[pos] != '\r') && (rbuf[pos] != '\n'))
    pos++;
  if (pos == connection->read_buffer_offset - 1)
    {
      /* not found, consider growing... */
      if (connection->read_buffer_offset == connection->read_buffer_size)
        {
          rbuf = MHD_pool_reallocate (connection->pool,
                                      connection->read_buffer,
                                      connection->read_buffer_size,
                                      connection->read_buffer_size * 2 +
                                      MHD_BUF_INC_SIZE);
          if (rbuf == NULL)
            {
              transmit_error_response (connection,
                                       (connection->url != NULL)
                                       ? MHD_HTTP_REQUEST_ENTITY_TOO_LARGE
                                       : MHD_HTTP_REQUEST_URI_TOO_LONG,
                                       REQUEST_TOO_BIG);
            }
          else
            {
              connection->read_buffer_size =
                connection->read_buffer_size * 2 + MHD_BUF_INC_SIZE;
              connection->read_buffer = rbuf;
            }
        }
      return NULL;
    }
  /* found, check if we have proper CRLF */
  if ((rbuf[pos] == '\r') && (rbuf[pos + 1] == '\n'))
    rbuf[pos++] = '\0';         /* skip both r and n */
  rbuf[pos++] = '\0';
  connection->read_buffer += pos;
  connection->read_buffer_size -= pos;
  connection->read_buffer_offset -= pos;
  return rbuf;
}

/**
 * @return MHD_NO on failure (out of memory), MHD_YES for success
 */
static int
connection_add_header (struct MHD_Connection *connection,
                       char *key, char *value, enum MHD_ValueKind kind)
{
  struct MHD_HTTP_Header *hdr;

  hdr = MHD_pool_allocate (connection->pool,
                           sizeof (struct MHD_HTTP_Header), MHD_YES);
  if (hdr == NULL)
    {
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
                "Not enough memory to allocate header record!\n");
#endif
      transmit_error_response (connection, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
                               REQUEST_TOO_BIG);
      return MHD_NO;
    }
  hdr->next = connection->headers_received;
  hdr->header = key;
  hdr->value = value;
  hdr->kind = kind;
  connection->headers_received = hdr;
  return MHD_YES;
}

/**
 * @return MHD_NO on failure (out of memory), MHD_YES for success
 */
static int
parse_arguments (enum MHD_ValueKind kind,
                 struct MHD_Connection *connection, char *args)
{
  char *equals;
  char *amper;

  while (args != NULL)
    {
      equals = strstr (args, "=");
      if (equals == NULL)
        return MHD_NO;          /* invalid, ignore */
      equals[0] = '\0';
      equals++;
      amper = strstr (equals, "&");
      if (amper != NULL)
        {
          amper[0] = '\0';
          amper++;
        }
      MHD_http_unescape (args);
      MHD_http_unescape (equals);
      if (MHD_NO == connection_add_header (connection, args, equals, kind))
        return MHD_NO;
      args = amper;
    }
  return MHD_YES;
}

/**
 * Parse the cookie header (see RFC 2109).
 *
 * @return MHD_YES for success, MHD_NO for failure (malformed, out of memory)
 */
static int
parse_cookie_header (struct MHD_Connection *connection)
{
  const char *hdr;
  char *cpy;
  char *pos;
  char *sce;
  char *semicolon;
  char *equals;
  char *ekill;
  char old;
  int quotes;

  hdr = MHD_lookup_connection_value (connection,
				     MHD_HEADER_KIND,
				     MHD_HTTP_HEADER_COOKIE);
  if (hdr == NULL)
    return MHD_YES;
  cpy = MHD_pool_allocate (connection->pool, strlen (hdr) + 1, MHD_YES);
  if (cpy == NULL)
    {
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon, "Not enough memory to parse cookies!\n");
#endif
      transmit_error_response (connection, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
                               REQUEST_TOO_BIG);
      return MHD_NO;
    }
  memcpy (cpy, hdr, strlen (hdr) + 1);
  pos = cpy;
  while (pos != NULL)
    {
      while (*pos == ' ')
        pos++;                  /* skip spaces */

      sce = pos;
      while (((*sce) != '\0') &&
             ((*sce) != ',') && ((*sce) != ';') && ((*sce) != '='))
        sce++;
      /* remove tailing whitespace (if any) from key */
      ekill = sce - 1;
      while ((*ekill == ' ') && (ekill >= pos))
        *(ekill--) = '\0';
      old = *sce;
      *sce = '\0';
      if (old != '=')
        {
          /* value part omitted, use empty string... */
          if (MHD_NO ==
              connection_add_header (connection, pos, "", MHD_COOKIE_KIND))
            return MHD_NO;
          if (old == '\0')
            break;
          pos = sce + 1;
          continue;
        }
      equals = sce + 1;
      quotes = 0;
      semicolon = equals;
      while ((semicolon[0] != '\0') &&
             ((quotes != 0) ||
              ((semicolon[0] != ';') && (semicolon[0] != ','))))
        {
          if (semicolon[0] == '"')
            quotes = (quotes + 1) & 1;
          semicolon++;
        }
      if (semicolon[0] == '\0')
        semicolon = NULL;
      if (semicolon != NULL)
        {
          semicolon[0] = '\0';
          semicolon++;
        }
      /* remove quotes */
      if ((equals[0] == '"') && (equals[strlen (equals) - 1] == '"'))
        {
          equals[strlen (equals) - 1] = '\0';
          equals++;
        }
      if (MHD_NO == connection_add_header (connection,
                                           pos, equals, MHD_COOKIE_KIND))
        return MHD_NO;
      pos = semicolon;
    }
  return MHD_YES;
}

/**
 * Parse the first line of the HTTP HEADER.
 *
 * @param connection the connection (updated)
 * @param line the first line
 * @return MHD_YES if the line is ok, MHD_NO if it is malformed
 */
static int
parse_initial_message_line (struct MHD_Connection *connection, char *line)
{
  char *uri;
  char *httpVersion;
  char *args;

  uri = strstr (line, " ");
  if (uri == NULL)
    return MHD_NO;              /* serious error */
  uri[0] = '\0';
  connection->method = line;
  uri++;
  while (uri[0] == ' ')
    uri++;
  httpVersion = strstr (uri, " ");
  if (httpVersion != NULL)
    {
      httpVersion[0] = '\0';
      httpVersion++;
    }
  if (connection->daemon->uri_log_callback != NULL)
    connection->client_context
      =
      connection->daemon->uri_log_callback (connection->daemon->
                                            uri_log_callback_cls, uri);
  args = strstr (uri, "?");
  if (args != NULL)
    {
      args[0] = '\0';
      args++;
      parse_arguments (MHD_GET_ARGUMENT_KIND, connection, args);
    }
  MHD_http_unescape (uri);
  connection->url = uri;
  if (httpVersion == NULL)
    connection->version = "";
  else
    connection->version = httpVersion;
  return MHD_YES;
}


/**
 * Call the handler of the application for this
 * connection.  Handles chunking of the upload
 * as well as normal uploads.
 */
static void
call_connection_handler (struct MHD_Connection *connection)
{
  size_t processed;

  if (connection->response != NULL)
    return;                     /* already queued a response */  
  processed = 0;
  connection->client_aware = MHD_YES;
  if (MHD_NO ==
      connection->daemon->default_handler (connection->daemon->
					   default_handler_cls,
					   connection, connection->url,
					   connection->method,
					   connection->version,
					   NULL, &processed,
					   &connection->client_context))
    {
      /* serious internal error, close connection */
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
		"Internal application error, closing connection.\n");
#endif
      connection_close_error (connection);
      return;
    }
}



/**
 * Call the handler of the application for this
 * connection.  Handles chunking of the upload
 * as well as normal uploads.
 */
static void
process_request_body (struct MHD_Connection *connection)
{
  size_t processed;
  size_t available;
  size_t used;
  size_t i;
  int instant_retry;
  int malformed;
  char *buffer_head;

  if (connection->response != NULL)
    return;                     /* already queued a response */

  buffer_head = connection->read_buffer;
  available = connection->read_buffer_offset;
  do
    {
      instant_retry = MHD_NO;
      if ((connection->have_chunked_upload == MHD_YES) &&
          (connection->remaining_upload_size == MHD_SIZE_UNKNOWN))
        {
          if ((connection->current_chunk_offset ==
               connection->current_chunk_size)
              && (connection->current_chunk_offset != 0) && (available >= 2))
            {
              /* skip new line at the *end* of a chunk */
              i = 0;
              if ((buffer_head[i] == '\r') || (buffer_head[i] == '\n'))
                i++;            /* skip 1st part of line feed */
              if ((buffer_head[i] == '\r') || (buffer_head[i] == '\n'))
                i++;            /* skip 2nd part of line feed */
              if (i == 0)
                {
                  /* malformed encoding */
#if HAVE_MESSAGES
                  MHD_DLOG (connection->daemon,
                            "Received malformed HTTP request (bad chunked encoding), closing connection.\n");
#endif
                  connection_close_error (connection);
                  return;
                }
              available -= i;
              buffer_head += i;
              connection->current_chunk_offset = 0;
              connection->current_chunk_size = 0;
            }
          if (connection->current_chunk_offset <
              connection->current_chunk_size)
            {
              /* we are in the middle of a chunk, give
                 as much as possible to the client (without
                 crossing chunk boundaries) */
              processed =
                connection->current_chunk_size -
                connection->current_chunk_offset;
              if (processed > available)
                processed = available;
              if (available > processed)
                instant_retry = MHD_YES;
            }
          else
            {
              /* we need to read chunk boundaries */
              i = 0;
              while (i < available)
                {
                  if ((buffer_head[i] == '\r') || (buffer_head[i] == '\n'))
                    break;
                  i++;
                  if (i >= 6)
                    break;
                }
              /* take '\n' into account; if '\n'
                 is the unavailable character, we
                 will need to wait until we have it
                 before going further */
              if ((i + 1 >= available) &&
                  !((i == 1) && (available == 2) && (buffer_head[0] == '0')))
                break;          /* need more data... */
              malformed = (i >= 6);
              if (!malformed)
                {
                  buffer_head[i] = '\0';
                  malformed =
                    (1 != SSCANF (buffer_head, "%X",
                                  &connection->current_chunk_size)) &&
                    (1 != SSCANF (buffer_head, "%x",
                                  &connection->current_chunk_size));
                }
              if (malformed)
                {
                  /* malformed encoding */
#if HAVE_MESSAGES
                  MHD_DLOG (connection->daemon,
                            "Received malformed HTTP request (bad chunked encoding), closing connection.\n");
#endif
                  connection_close_error (connection);
                  return;
                }
              i++;
              if ((i < available) &&
                  ((buffer_head[i] == '\r') || (buffer_head[i] == '\n')))
                i++;            /* skip 2nd part of line feed */

              buffer_head += i;
              available -= i;
              connection->current_chunk_offset = 0;

              if (available > 0)
                instant_retry = MHD_YES;
              if (connection->current_chunk_size == 0)
                {
                  connection->remaining_upload_size = 0;
                  break;
                }
              continue;
            }
        }
      else
        {
          /* no chunked encoding, give all to the client */
          processed = available;
        }
      used = processed;
      connection->client_aware = MHD_YES;
      if (MHD_NO ==
          connection->daemon->default_handler (connection->daemon->
                                               default_handler_cls,
                                               connection, connection->url,
                                               connection->method,
                                               connection->version,
                                               buffer_head, &processed,
                                               &connection->client_context))
        {
          /* serious internal error, close connection */
#if HAVE_MESSAGES
          MHD_DLOG (connection->daemon,
                    "Internal application error, closing connection.\n");
#endif
          connection_close_error (connection);
          return;
        }
      if (processed > used)
        mhd_panic (mhd_panic_cls, __FILE__, __LINE__, 
#if HAVE_MESSAGES
		   "API violation"
#else
		   NULL
#endif
		   );
      if (processed != 0)
        instant_retry = MHD_NO; /* client did not process everything */
      used -= processed;
      if (connection->have_chunked_upload == MHD_YES)
        connection->current_chunk_offset += used;
      /* dh left "processed" bytes in buffer for next time... */
      buffer_head += used;
      available -= used;
      if (connection->remaining_upload_size != MHD_SIZE_UNKNOWN)
        connection->remaining_upload_size -= used;
    }
  while (instant_retry == MHD_YES);
  if (available > 0)
    memmove (connection->read_buffer, buffer_head, available);
  connection->read_buffer_offset = available;
}

/**
 * Try reading data from the socket into the
 * read buffer of the connection.
 *
 * @return MHD_YES if something changed,
 *         MHD_NO if we were interrupted or if
 *                no space was available
 */
static int
do_read (struct MHD_Connection *connection)
{
  int bytes_read;

  if (connection->read_buffer_size == connection->read_buffer_offset)
    return MHD_NO;

  bytes_read = connection->recv_cls (connection,
                                     &connection->read_buffer
                                     [connection->read_buffer_offset],
                                     connection->read_buffer_size -
                                     connection->read_buffer_offset);
  if (bytes_read < 0)
    {
      if (errno == EINTR)
        return MHD_NO;
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
                "Failed to receive data: %s\n", STRERROR (errno));
#endif
      connection_close_error (connection);
      return MHD_YES;
    }
  if (bytes_read == 0)
    {
      /* other side closed connection */
      connection->read_closed = MHD_YES;
      SHUTDOWN (connection->socket_fd, SHUT_RD);
      return MHD_NO;
    }
  connection->read_buffer_offset += bytes_read;
  return MHD_YES;
}

/**
 * Try writing data to the socket from the
 * write buffer of the connection.
 *
 * @return MHD_YES if something changed,
 *         MHD_NO if we were interrupted
 */
static int
do_write (struct MHD_Connection *connection)
{
  int ret;

  ret = connection->send_cls (connection,
                              &connection->write_buffer
                              [connection->write_buffer_send_offset],
                              connection->write_buffer_append_offset
                              - connection->write_buffer_send_offset);

  if (ret < 0)
    {
      if (errno == EINTR)
        return MHD_NO;
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
                "Failed to send data: %s\n", STRERROR (errno));
#endif
      connection_close_error (connection);
      return MHD_YES;
    }
#if DEBUG_SEND_DATA
  FPRINTF (stderr,
           "Sent response: `%.*s'\n",
           ret,
           &connection->write_buffer[connection->write_buffer_send_offset]);
#endif
  connection->write_buffer_send_offset += ret;
  return MHD_YES;
}

/**
 * Check if we are done sending the write-buffer.
 * If so, transition into "next_state".
 * @return MHY_NO if we are not done, MHD_YES if we are
 */
static int
check_write_done (struct MHD_Connection *connection,
                  enum MHD_CONNECTION_STATE next_state)
{
  if (connection->write_buffer_append_offset !=
      connection->write_buffer_send_offset)
    return MHD_NO;
  connection->write_buffer_append_offset = 0;
  connection->write_buffer_send_offset = 0;
  connection->state = next_state;
  MHD_pool_reallocate (connection->pool, connection->write_buffer,
                       connection->write_buffer_size, 0);
  connection->write_buffer = NULL;
  connection->write_buffer_size = 0;
  return MHD_YES;
}

/**
 * We have received (possibly the beginning of) a line in the
 * header (or footer).  Validate (check for ":") and prepare
 * to process.
 */
static int
process_header_line (struct MHD_Connection *connection, char *line)
{
  char *colon;

  /* line should be normal header line, find colon */
  colon = strstr (line, ":");
  if (colon == NULL)
    {
      /* error in header line, die hard */
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
                "Received malformed line (no colon), closing connection.\n");
#endif
      connection->state = MHD_CONNECTION_CLOSED;
      return MHD_NO;
    }
  /* zero-terminate header */
  colon[0] = '\0';
  colon++;                      /* advance to value */
  while ((colon[0] != '\0') && ((colon[0] == ' ') || (colon[0] == '\t')))
    colon++;
  /* we do the actual adding of the connection
     header at the beginning of the while
     loop since we need to be able to inspect
     the *next* header line (in case it starts
     with a space...) */
  connection->last = line;
  connection->colon = colon;
  return MHD_YES;
}

/**
 * Process a header value that spans multiple lines.
 * The previous line(s) are in connection->last.
 *
 * @param line the current input line
 * @param kind if the line is complete, add a header
 *        of the given kind
 * @return MHD_YES if the line was processed successfully
 */
static int
process_broken_line (struct MHD_Connection *connection,
                     char *line, enum MHD_ValueKind kind)
{
  char *last;
  char *tmp;

  last = connection->last;
  if ((line[0] == ' ') || (line[0] == '\t'))
    {
      /* value was continued on the next line, see
         http://www.jmarshall.com/easy/http/ */
      last = MHD_pool_reallocate (connection->pool,
                                  last,
                                  strlen (last) + 1,
                                  strlen (line) + strlen (last) + 1);
      if (last == NULL)
        {
          transmit_error_response (connection,
                                   MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
                                   REQUEST_TOO_BIG);
          return MHD_NO;
        }
      tmp = line;
      while ((tmp[0] == ' ') || (tmp[0] == '\t'))
        tmp++;                  /* skip whitespace at start of 2nd line */
      strcat (last, tmp);
      connection->last = last;
      return MHD_YES;           /* possibly more than 2 lines... */
    }
  EXTRA_CHECK ((last != NULL) && (connection->colon != NULL));
  if ((MHD_NO == connection_add_header (connection,
                                        last, connection->colon, kind)))
    {
      transmit_error_response (connection, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
                               REQUEST_TOO_BIG);
      return MHD_NO;
    }
  /* we still have the current line to deal with... */
  if (strlen (line) != 0)
    {
      if (MHD_NO == process_header_line (connection, line))
        {
          transmit_error_response (connection,
                                   MHD_HTTP_BAD_REQUEST, REQUEST_MALFORMED);
          return MHD_NO;
        }
    }
  return MHD_YES;
}

/**
 * Parse the various headers; figure out the size
 * of the upload and make sure the headers follow
 * the protocol.  Advance to the appropriate state.
 */
static void
parse_connection_headers (struct MHD_Connection *connection)
{
  const char *clen;
  unsigned long long cval;
  struct MHD_Response *response;
  const char *enc;

  parse_cookie_header (connection);
  if ((0 != (MHD_USE_PEDANTIC_CHECKS & connection->daemon->options))
      && (NULL != connection->version)
      && (0 == strcasecmp (MHD_HTTP_VERSION_1_1, connection->version))
      && (NULL ==
          MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                       MHD_HTTP_HEADER_HOST)))
    {
      /* die, http 1.1 request without host and we are pedantic */
      connection->state = MHD_CONNECTION_FOOTERS_RECEIVED;
      connection->read_closed = MHD_YES;
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
                "Received `%s' request without `%s' header.\n",
                MHD_HTTP_VERSION_1_1, MHD_HTTP_HEADER_HOST);
#endif
      response =
        MHD_create_response_from_data (strlen (REQUEST_LACKS_HOST),
                                       REQUEST_LACKS_HOST, MHD_NO, MHD_NO);
      MHD_queue_response (connection, MHD_HTTP_BAD_REQUEST, response);
      MHD_destroy_response (response);
      return;
    }

  clen = MHD_lookup_connection_value (connection,
                                      MHD_HEADER_KIND,
                                      MHD_HTTP_HEADER_CONTENT_LENGTH);
  if (clen != NULL)
    {
      if (1 != SSCANF (clen, "%llu", &cval))
        {
#if HAVE_MESSAGES
          MHD_DLOG (connection->daemon,
                    "Failed to parse `%s' header `%s', closing connection.\n",
                    MHD_HTTP_HEADER_CONTENT_LENGTH, clen);
#endif
          connection->state = MHD_CONNECTION_CLOSED;
          return;
        }
      connection->remaining_upload_size = cval;
    }
  else
    {
      enc = MHD_lookup_connection_value (connection,
					 MHD_HEADER_KIND,
					 MHD_HTTP_HEADER_TRANSFER_ENCODING);
      if (NULL == enc)
        {
          /* this request (better) not have a body */
          connection->remaining_upload_size = 0;
        }
      else
        {
          connection->remaining_upload_size = MHD_SIZE_UNKNOWN;
          if (0 == strcasecmp (enc, "chunked"))
	    connection->have_chunked_upload = MHD_YES;
        }
    }
}

/**
 * This function handles a particular connection when it has been
 * determined that there is data to be read off a socket. All
 * implementations (multithreaded, external select, internal select)
 * call this function to handle reads.
 *
 * @return MHD_YES if we should continue to process the
 *         connection (not dead yet), MHD_NO if it died
 */
int
MHD_connection_handle_read (struct MHD_Connection *connection)
{
  connection->last_activity = time (NULL);
  if (connection->state == MHD_CONNECTION_CLOSED)
    return MHD_NO;
  /* make sure "read" has a reasonable number of bytes
     in buffer to use per system call (if possible) */
  if (connection->read_buffer_offset + MHD_BUF_INC_SIZE >
      connection->read_buffer_size)
    try_grow_read_buffer (connection);
  if (MHD_NO == do_read (connection))
    return MHD_YES;
  while (1)
    {
#if DEBUG_STATES
      MHD_DLOG (connection->daemon, "%s: state: %s\n",
                __FUNCTION__, MHD_state_to_string (connection->state));
#endif
      switch (connection->state)
        {
        case MHD_CONNECTION_INIT:
        case MHD_CONNECTION_URL_RECEIVED:
        case MHD_CONNECTION_HEADER_PART_RECEIVED:
        case MHD_CONNECTION_HEADERS_RECEIVED:
        case MHD_CONNECTION_HEADERS_PROCESSED:
        case MHD_CONNECTION_CONTINUE_SENDING:
        case MHD_CONNECTION_CONTINUE_SENT:
        case MHD_CONNECTION_BODY_RECEIVED:
        case MHD_CONNECTION_FOOTER_PART_RECEIVED:
          /* nothing to do but default action */
          if (MHD_YES == connection->read_closed)
            {
              connection->state = MHD_CONNECTION_CLOSED;
              continue;
            }
          break;
        case MHD_CONNECTION_CLOSED:
          if (connection->socket_fd != -1)
            connection_close_error (connection);
          return MHD_NO;
        default:
          /* shrink read buffer to how much is actually used */
          MHD_pool_reallocate (connection->pool,
                               connection->read_buffer,
                               connection->read_buffer_size + 1,
                               connection->read_buffer_offset);
          break;
        }
      break;
    }
  return MHD_YES;
}

/**
 * This function was created to handle writes to sockets when it has
 * been determined that the socket can be written to. All
 * implementations (multithreaded, external select, internal select)
 * call this function
 *
 * @return MHD_YES if we should continue to process the
 *         connection (not dead yet), MHD_NO if it died
 */
int
MHD_connection_handle_write (struct MHD_Connection *connection)
{
  struct MHD_Response *response;
  int ret;
  connection->last_activity = time (NULL);
  while (1)
    {
#if DEBUG_STATES
      MHD_DLOG (connection->daemon, "%s: state: %s\n",
                __FUNCTION__, MHD_state_to_string (connection->state));
#endif
      switch (connection->state)
        {
        case MHD_CONNECTION_INIT:
        case MHD_CONNECTION_URL_RECEIVED:
        case MHD_CONNECTION_HEADER_PART_RECEIVED:
        case MHD_CONNECTION_HEADERS_RECEIVED:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_HEADERS_PROCESSED:
          break;
        case MHD_CONNECTION_CONTINUE_SENDING:
          ret = connection->send_cls (connection,
                                      &HTTP_100_CONTINUE
                                      [connection->continue_message_write_offset],
                                      strlen (HTTP_100_CONTINUE) -
                                      connection->continue_message_write_offset);
          if (ret < 0)
            {
              if (errno == EINTR)
                break;
#if HAVE_MESSAGES
              MHD_DLOG (connection->daemon,
                        "Failed to send data: %s\n", STRERROR (errno));
#endif
              connection_close_error (connection);
              return MHD_NO;
            }
#if DEBUG_SEND_DATA
          FPRINTF (stderr,
                   "Sent 100 continue response: `%.*s'\n",
                   ret,
                   &HTTP_100_CONTINUE
                   [connection->continue_message_write_offset]);
#endif
          connection->continue_message_write_offset += ret;
          break;
        case MHD_CONNECTION_CONTINUE_SENT:
        case MHD_CONNECTION_BODY_RECEIVED:
        case MHD_CONNECTION_FOOTER_PART_RECEIVED:
        case MHD_CONNECTION_FOOTERS_RECEIVED:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_HEADERS_SENDING:
          do_write (connection);
          check_write_done (connection, MHD_CONNECTION_HEADERS_SENT);
          break;
        case MHD_CONNECTION_HEADERS_SENT:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_NORMAL_BODY_READY:
          response = connection->response;
          if (response->crc != NULL)
            pthread_mutex_lock (&response->mutex);
          if (MHD_YES != try_ready_normal_body (connection))
            {
              if (response->crc != NULL)
                pthread_mutex_unlock (&response->mutex);
              connection->state = MHD_CONNECTION_NORMAL_BODY_UNREADY;
              break;
            }
	  ret = connection->send_cls (connection,
				      &response->data
				      [connection->response_write_position
				       - response->data_start],
				      response->data_size -
				      (connection->response_write_position
				       - response->data_start));
#if DEBUG_SEND_DATA
          if (ret > 0)
            FPRINTF (stderr,
                     "Sent DATA response: `%.*s'\n",
                     ret,
                     &response->data[connection->response_write_position -
                                     response->data_start]);
#endif
          if (response->crc != NULL)
            pthread_mutex_unlock (&response->mutex);
          if (ret < 0)
            {
              if (errno == EINTR)
                return MHD_YES;
#if HAVE_MESSAGES
              MHD_DLOG (connection->daemon,
                        "Failed to send data: %s\n", STRERROR (errno));
#endif
              connection_close_error (connection);
              return MHD_NO;
            }
          connection->response_write_position += ret;
          if (connection->response_write_position ==
              connection->response->total_size)
            connection->state = MHD_CONNECTION_FOOTERS_SENT;    /* have no footers... */
          break;
        case MHD_CONNECTION_NORMAL_BODY_UNREADY:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_CHUNKED_BODY_READY:
          do_write (connection);
          check_write_done (connection,
                            (connection->response->total_size ==
                             connection->response_write_position) ?
                            MHD_CONNECTION_BODY_SENT :
                            MHD_CONNECTION_CHUNKED_BODY_UNREADY);
          break;
        case MHD_CONNECTION_CHUNKED_BODY_UNREADY:
        case MHD_CONNECTION_BODY_SENT:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_FOOTERS_SENDING:
          do_write (connection);
          check_write_done (connection, MHD_CONNECTION_FOOTERS_SENT);
          break;
        case MHD_CONNECTION_FOOTERS_SENT:
          EXTRA_CHECK (0);
          break;
        case MHD_CONNECTION_CLOSED:
          if (connection->socket_fd != -1)
            connection_close_error (connection);
          return MHD_NO;
        case MHD_TLS_CONNECTION_INIT:
          EXTRA_CHECK (0);
          break;
        default:
          EXTRA_CHECK (0);
          connection_close_error (connection);
          return MHD_NO;
        }
      break;
    }
  return MHD_YES;
}

/**
 * This function was created to handle per-connection processing that
 * has to happen even if the socket cannot be read or written to.  All
 * implementations (multithreaded, external select, internal select)
 * call this function.
 *
 * @return MHD_YES if we should continue to process the
 *         connection (not dead yet), MHD_NO if it died
 */
int
MHD_connection_handle_idle (struct MHD_Connection *connection)
{
  unsigned int timeout;
  const char *end;
  char *line;

  while (1)
    {
#if DEBUG_STATES
      MHD_DLOG (connection->daemon, "%s: state: %s\n",
                __FUNCTION__, MHD_state_to_string (connection->state));
#endif
      switch (connection->state)
        {
        case MHD_CONNECTION_INIT:
          line = get_next_header_line (connection);
          if (line == NULL)
            {
              if (connection->state != MHD_CONNECTION_INIT)
                continue;
              if (connection->read_closed)
                {
                  connection->state = MHD_CONNECTION_CLOSED;
                  continue;
                }
              break;
            }
          if (MHD_NO == parse_initial_message_line (connection, line))
            connection->state = MHD_CONNECTION_CLOSED;
          else
            connection->state = MHD_CONNECTION_URL_RECEIVED;
          continue;
        case MHD_CONNECTION_URL_RECEIVED:
          line = get_next_header_line (connection);
          if (line == NULL)
            {
              if (connection->state != MHD_CONNECTION_URL_RECEIVED)
                continue;
              if (connection->read_closed)
                {
                  connection->state = MHD_CONNECTION_CLOSED;
                  continue;
                }
              break;
            }
          if (strlen (line) == 0)
            {
              connection->state = MHD_CONNECTION_HEADERS_RECEIVED;
              continue;
            }
          if (MHD_NO == process_header_line (connection, line))
            {
              transmit_error_response (connection,
                                       MHD_HTTP_BAD_REQUEST,
                                       REQUEST_MALFORMED);
              break;
            }
          connection->state = MHD_CONNECTION_HEADER_PART_RECEIVED;
          continue;
        case MHD_CONNECTION_HEADER_PART_RECEIVED:
          line = get_next_header_line (connection);
          if (line == NULL)
            {
              if (connection->state != MHD_CONNECTION_HEADER_PART_RECEIVED)
                continue;
              if (connection->read_closed)
                {
                  connection->state = MHD_CONNECTION_CLOSED;
                  continue;
                }
              break;
            }
          if (MHD_NO ==
              process_broken_line (connection, line, MHD_HEADER_KIND))
            continue;
          if (strlen (line) == 0)
            {
              connection->state = MHD_CONNECTION_HEADERS_RECEIVED;
              continue;
            }
          continue;
        case MHD_CONNECTION_HEADERS_RECEIVED:
          parse_connection_headers (connection);
          if (connection->state == MHD_CONNECTION_CLOSED)
            continue;
          connection->state = MHD_CONNECTION_HEADERS_PROCESSED;
          continue;
        case MHD_CONNECTION_HEADERS_PROCESSED:
          call_connection_handler (connection); /* first call */
          if (connection->state == MHD_CONNECTION_CLOSED)
            continue;
          if (need_100_continue (connection))
            {
              connection->state = MHD_CONNECTION_CONTINUE_SENDING;
              break;
            }
          if (connection->response != NULL)
            {
              /* we refused (no upload allowed!) */
              connection->remaining_upload_size = 0;
              /* force close, in case client still tries to upload... */
              connection->read_closed = MHD_YES;
            }
          connection->state = (connection->remaining_upload_size == 0)
            ? MHD_CONNECTION_FOOTERS_RECEIVED : MHD_CONNECTION_CONTINUE_SENT;
          continue;
        case MHD_CONNECTION_CONTINUE_SENDING:
          if (connection->continue_message_write_offset ==
              strlen (HTTP_100_CONTINUE))
            {
              connection->state = MHD_CONNECTION_CONTINUE_SENT;
              continue;
            }
          break;
        case MHD_CONNECTION_CONTINUE_SENT:
          if (connection->read_buffer_offset != 0)
            {
              process_request_body (connection);     /* loop call */
              if (connection->state == MHD_CONNECTION_CLOSED)
                continue;
            }
          if ((connection->remaining_upload_size == 0) ||
              ((connection->remaining_upload_size == MHD_SIZE_UNKNOWN) &&
               (connection->read_buffer_offset == 0) &&
               (MHD_YES == connection->read_closed)))
            {
              if ((MHD_YES == connection->have_chunked_upload) &&
                  (MHD_NO == connection->read_closed))
                connection->state = MHD_CONNECTION_BODY_RECEIVED;
              else
                connection->state = MHD_CONNECTION_FOOTERS_RECEIVED;
              continue;
            }
          break;
        case MHD_CONNECTION_BODY_RECEIVED:
          line = get_next_header_line (connection);
          if (line == NULL)
            {
              if (connection->state != MHD_CONNECTION_BODY_RECEIVED)
                continue;
              if (connection->read_closed)
                {
                  connection->state = MHD_CONNECTION_CLOSED;
                  continue;
                }
              break;
            }
          if (strlen (line) == 0)
            {
              connection->state = MHD_CONNECTION_FOOTERS_RECEIVED;
              continue;
            }
          if (MHD_NO == process_header_line (connection, line))
            {
              transmit_error_response (connection,
                                       MHD_HTTP_BAD_REQUEST,
                                       REQUEST_MALFORMED);
              break;
            }
          connection->state = MHD_CONNECTION_FOOTER_PART_RECEIVED;
          continue;
        case MHD_CONNECTION_FOOTER_PART_RECEIVED:
          line = get_next_header_line (connection);
          if (line == NULL)
            {
              if (connection->state != MHD_CONNECTION_FOOTER_PART_RECEIVED)
                continue;
              if (connection->read_closed)
                {
                  connection->state = MHD_CONNECTION_CLOSED;
                  continue;
                }
              break;
            }
          if (MHD_NO ==
              process_broken_line (connection, line, MHD_FOOTER_KIND))
            continue;
          if (strlen (line) == 0)
            {
              connection->state = MHD_CONNECTION_FOOTERS_RECEIVED;
              continue;
            }
          continue;
        case MHD_CONNECTION_FOOTERS_RECEIVED:
          call_connection_handler (connection); /* "final" call */
          if (connection->state == MHD_CONNECTION_CLOSED)
            continue;
          if (connection->response == NULL)
            break;              /* try again next time */
          if (MHD_NO == build_header_response (connection))
            {
              /* oops - close! */
#if HAVE_MESSAGES
              MHD_DLOG (connection->daemon,
                        "Closing connection (failed to create response header)\n");
#endif
              connection->state = MHD_CONNECTION_CLOSED;
              continue;
            }
          connection->state = MHD_CONNECTION_HEADERS_SENDING;

#if HAVE_DECL_TCP_CORK
          /* starting header send, set TCP cork */
          {
            const int val = 1;
            setsockopt (connection->socket_fd, IPPROTO_TCP, TCP_CORK, &val,
                        sizeof (val));
          }
#endif
          break;
        case MHD_CONNECTION_HEADERS_SENDING:
          /* no default action */
          break;
        case MHD_CONNECTION_HEADERS_SENT:
          if (connection->have_chunked_upload)
            connection->state = MHD_CONNECTION_CHUNKED_BODY_UNREADY;
          else
            connection->state = MHD_CONNECTION_NORMAL_BODY_UNREADY;
          continue;
        case MHD_CONNECTION_NORMAL_BODY_READY:
          /* nothing to do here */
          break;
        case MHD_CONNECTION_NORMAL_BODY_UNREADY:
          if (connection->response->crc != NULL)
            pthread_mutex_lock (&connection->response->mutex);
          if (MHD_YES == try_ready_normal_body (connection))
            {
              if (connection->response->crc != NULL)
                pthread_mutex_unlock (&connection->response->mutex);
              connection->state = MHD_CONNECTION_NORMAL_BODY_READY;
              break;
            }
          if (connection->response->crc != NULL)
            pthread_mutex_unlock (&connection->response->mutex);
          /* not ready, no socket action */
          break;
        case MHD_CONNECTION_CHUNKED_BODY_READY:
          /* nothing to do here */
          break;
        case MHD_CONNECTION_CHUNKED_BODY_UNREADY:
          if (connection->response->crc != NULL)
            pthread_mutex_lock (&connection->response->mutex);
          if (MHD_YES == try_ready_chunked_body (connection))
            {
              if (connection->response->crc != NULL)
                pthread_mutex_unlock (&connection->response->mutex);
              connection->state = MHD_CONNECTION_CHUNKED_BODY_READY;
              continue;
            }
          if (connection->response->crc != NULL)
            pthread_mutex_unlock (&connection->response->mutex);
          break;
        case MHD_CONNECTION_BODY_SENT:
          build_header_response (connection);
          if (connection->write_buffer_send_offset ==
              connection->write_buffer_append_offset)
            connection->state = MHD_CONNECTION_FOOTERS_SENT;
          else
            connection->state = MHD_CONNECTION_FOOTERS_SENDING;
          continue;
        case MHD_CONNECTION_FOOTERS_SENDING:
          /* no default action */
          break;
        case MHD_CONNECTION_FOOTERS_SENT:
#if HAVE_DECL_TCP_CORK
          /* done sending, uncork */
          {
            const int val = 0;
            setsockopt (connection->socket_fd, IPPROTO_TCP, TCP_CORK, &val,
                        sizeof (val));
          }
#endif
          MHD_destroy_response (connection->response);
          if (connection->daemon->notify_completed != NULL)
	    {
	      connection->daemon->notify_completed (connection->daemon->
						    notify_completed_cls,
						    connection,
						    &connection->client_context,
						    MHD_REQUEST_TERMINATED_COMPLETED_OK);
	    }
	  connection->client_aware = MHD_NO;
          end =
            MHD_lookup_connection_value (connection, MHD_HEADER_KIND,
                                         MHD_HTTP_HEADER_CONNECTION);
          connection->client_context = NULL;
          connection->continue_message_write_offset = 0;
          connection->responseCode = 0;
          connection->response = NULL;
          connection->headers_received = NULL;
          connection->response_write_position = 0;
          connection->have_chunked_upload = MHD_NO;
          connection->method = NULL;
          connection->url = NULL;
          connection->write_buffer = NULL;
          connection->write_buffer_size = 0;
          connection->write_buffer_send_offset = 0;
          connection->write_buffer_append_offset = 0;
          if ((end != NULL) && (0 == strcasecmp (end, "close")))
            {
              connection->read_closed = MHD_YES;
              connection->read_buffer_offset = 0;
            }
          if (((MHD_YES == connection->read_closed) &&
               (0 == connection->read_buffer_offset)) ||
              (connection->version == NULL) ||
              (0 != strcasecmp (MHD_HTTP_VERSION_1_1, connection->version)))
            {
              /* http 1.0, version-less requests cannot be pipelined */
              connection->state = MHD_CONNECTION_CLOSED;
              MHD_pool_destroy (connection->pool);
              connection->pool = NULL;
              connection->read_buffer = NULL;
              connection->read_buffer_size = 0;
              connection->read_buffer_offset = 0;
            }
          else
            {
              connection->version = NULL;
              connection->state = MHD_CONNECTION_INIT;
              connection->read_buffer
                = MHD_pool_reset (connection->pool,
                                  connection->read_buffer,
                                  connection->read_buffer_size);
            }
          continue;
        case MHD_CONNECTION_CLOSED:
          if (connection->socket_fd != -1)
            connection_close_error (connection);
          break;
        default:
          EXTRA_CHECK (0);
          break;
        }
      break;
    }
  timeout = connection->daemon->connection_timeout;
  if ((connection->socket_fd != -1) &&
      (timeout != 0) && (time (NULL) - timeout > connection->last_activity))
    {
      MHD_connection_close (connection, MHD_REQUEST_TERMINATED_TIMEOUT_REACHED);
      return MHD_NO;
    }
  return MHD_YES;

}

void
MHD_set_http_calbacks (struct MHD_Connection *connection)
{
  connection->read_handler = &MHD_connection_handle_read;
  connection->write_handler = &MHD_connection_handle_write;
  connection->idle_handler = &MHD_connection_handle_idle;
}


/**
 * Obtain information about the given connection.
 *
 * @param connection what connection to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_ConnectionInfo *
MHD_get_connection_info (struct MHD_Connection *connection,
                         enum MHD_ConnectionInfoType infoType, ...)
{
  switch (infoType)
    {
#if HTTPS_SUPPORT
    case MHD_CONNECTION_INFO_CIPHER_ALGO:
      if (connection->tls_session == NULL)
	return NULL;
      connection->cipher = gnutls_cipher_get (connection->tls_session);
      return (const union MHD_ConnectionInfo *) &connection->cipher;
    case MHD_CONNECTION_INFO_PROTOCOL:
      if (connection->tls_session == NULL)
	return NULL;
      connection->protocol = gnutls_protocol_get_version (connection->tls_session);
      return (const union MHD_ConnectionInfo *) &connection->protocol;
    case MHD_CONNECTION_INFO_GNUTLS_SESSION:
      if (connection->tls_session == NULL)
	return NULL;
      return (const union MHD_ConnectionInfo *) &connection->tls_session;
#endif
    case MHD_CONNECTION_INFO_CLIENT_ADDRESS:
      return (const union MHD_ConnectionInfo *) &connection->addr;
    default:
      return NULL;
    };
}


/* end of connection.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.h.





































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
     This file is part of libmicrohttpd
     (C) 2007 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file connection.h
 * @brief  Methods for managing connections
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#ifndef CONNECTION_H
#define CONNECTION_H

#include "internal.h"

/**
 * Obtain the select sets for this connection.
 *
 * @return MHD_YES on success
 */
int
MHD_connection_get_fdset (struct MHD_Connection *connection,
                          fd_set * read_fd_set,
                          fd_set * write_fd_set,
                          fd_set * except_fd_set, int *max_fd);

/**
 * Obtain the pollfd for this connection. The poll interface allows large
 * file descriptors. Select goes stupid when the fd overflows fdset (which
 * is fixed).
 */
int MHD_connection_get_pollfd(struct MHD_Connection *connection,
                              struct MHD_Pollfd *p);

void MHD_set_http_calbacks (struct MHD_Connection *connection);

int MHD_connection_handle_read (struct MHD_Connection *connection);

int MHD_connection_handle_write (struct MHD_Connection *connection);

int MHD_connection_handle_idle (struct MHD_Connection *connection);

/**
 * Close the given connection and give the
 * specified termination code to the user.
 */
void MHD_connection_close (struct MHD_Connection *connection,
                           enum MHD_RequestTerminationCode termination_code);

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection_https.c.

































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008, 2010 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

*/

/**
 * @file connection_https.c
 * @brief  Methods for managing SSL/TLS connections. This file is only
 *         compiled if ENABLE_HTTPS is set.
 * @author Sagie Amir
 * @author Christian Grothoff
 */

#include "internal.h"
#include "connection.h"
#include "memorypool.h"
#include "response.h"
#include "reason_phrase.h"
#include <gnutls/gnutls.h>

/**
 * This function is called once a secure connection has been marked
 * for closure.
 *
 * NOTE: Some code duplication with connection_close_error
 * in connection.c
 *
 * @param connection: the connection to close
 * @param termination_code: the termination code with which the notify completed callback function is called.
 */
static void
MHD_tls_connection_close (struct MHD_Connection *connection,
                          enum MHD_RequestTerminationCode termination_code)
{
  gnutls_bye (connection->tls_session, GNUTLS_SHUT_RDWR);
  MHD_connection_close (connection, termination_code);
}

/**
 * This function was created to handle per-connection processing that
 * has to happen even if the socket cannot be read or written to.  All
 * implementations (multithreaded, external select, internal select)
 * call this function.
 *
 * @param connection being handled
 * @return MHD_YES if we should continue to process the
 *         connection (not dead yet), MHD_NO if it died
 */
static int
MHD_tls_connection_handle_idle (struct MHD_Connection *connection)
{
  unsigned int timeout;

#if DEBUG_STATES
  MHD_DLOG (connection->daemon, "%s: state: %s\n",
            __FUNCTION__, MHD_state_to_string (connection->state));
#endif
  timeout = connection->daemon->connection_timeout;
  if ((connection->socket_fd != -1) && (timeout != 0)
      && (time (NULL) - timeout > connection->last_activity))
    {
      MHD_tls_connection_close (connection,
                                MHD_REQUEST_TERMINATED_TIMEOUT_REACHED);
      return MHD_NO;
    }
  switch (connection->state)
    {
      /* on newly created connections we might reach here before any reply has been received */
    case MHD_TLS_CONNECTION_INIT:
      return MHD_YES;
      /* close connection if necessary */
    case MHD_CONNECTION_CLOSED:
      if (connection->socket_fd != -1)
        MHD_tls_connection_close (connection,
                                  MHD_REQUEST_TERMINATED_COMPLETED_OK);
      return MHD_NO;
    default:
      return MHD_connection_handle_idle (connection);
    }
  return MHD_YES;
}


/**
 * This function handles a particular SSL/TLS connection when
 * it has been determined that there is data to be read off a
 * socket. Message processing is done by message type which is
 * determined by peeking into the first message type byte of the
 * stream.
 *
 * Error message handling: all fatal level messages cause the
 * connection to be terminated.
 *
 * Application data is forwarded to the underlying daemon for
 * processing.
 *
 * @param connection : the source connection
 * @return MHD_YES if we should continue to process the
 *         connection (not dead yet), MHD_NO if it died
 */
static int
MHD_tls_connection_handle_read (struct MHD_Connection *connection)
{
  int ret;

  connection->last_activity = time (NULL);
  if (connection->state == MHD_TLS_CONNECTION_INIT)
    {
      ret = gnutls_handshake (connection->tls_session);
      if (ret == GNUTLS_E_SUCCESS) 
	{
	  /* set connection state to enable HTTP processing */
	  connection->state = MHD_CONNECTION_INIT;
	  return MHD_YES;	  
	}
      if ( (ret == GNUTLS_E_AGAIN) || 
	   (ret == GNUTLS_E_INTERRUPTED) )
	{
	  /* handshake not done */
	  return MHD_YES;
	}
      /* handshake failed */
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
		"Error: received handshake message out of context\n");
#endif
      MHD_tls_connection_close (connection,
				MHD_REQUEST_TERMINATED_WITH_ERROR);
      return MHD_NO;
    }
  return MHD_connection_handle_read (connection);
}


/**
 * This function was created to handle writes to sockets when it has
 * been determined that the socket can be written to. This function
 * will forward all write requests to the underlying daemon unless
 * the connection has been marked for closing.
 *
 * @return MHD_connection_handle_write() if we should continue to
 *         process the connection (not dead yet), MHD_NO if it died
 */
static int
MHD_tls_connection_handle_write (struct MHD_Connection *connection)
{
  int ret;

  connection->last_activity = time (NULL);
#if DEBUG_STATES
  MHD_DLOG (connection->daemon, "%s: state: %s\n",
            __FUNCTION__, MHD_state_to_string (connection->state));
#endif
  if (connection->state == MHD_TLS_CONNECTION_INIT)
    {
      ret = gnutls_handshake (connection->tls_session);
      if (ret == GNUTLS_E_SUCCESS)
	{
	  /* set connection state to enable HTTP processing */
	  connection->state = MHD_CONNECTION_INIT;
	  return MHD_YES;	  
	}
      if ( (ret == GNUTLS_E_AGAIN) || 
	   (ret == GNUTLS_E_INTERRUPTED) )
	{
	  /* handshake not done */
	  return MHD_YES;
	}
      /* handshake failed */
#if HAVE_MESSAGES
      MHD_DLOG (connection->daemon,
		"Error: received handshake message out of context\n");
#endif
      MHD_tls_connection_close (connection,
				MHD_REQUEST_TERMINATED_WITH_ERROR);
      return MHD_NO;
    }
  return MHD_connection_handle_write (connection);
}

/**
 * Set connection callback function to be used through out
 * the processing of this secure connection.
 */
void
MHD_set_https_callbacks (struct MHD_Connection *connection)
{
  connection->read_handler = &MHD_tls_connection_handle_read;
  connection->write_handler = &MHD_tls_connection_handle_write;
  connection->idle_handler = &MHD_tls_connection_handle_idle;
}

/* end of connection_https.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection_https.h.







































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
     This file is part of libmicrohttpd
     (C) 2008 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file connection_https.h
 * @brief  Methods for managing connections
 * @author Christian Grothoff
 */

#ifndef CONNECTION_HTTPS_H
#define CONNECTION_HTTPS_H

#include "internal.h"

#if HTTPS_SUPPORT
void MHD_set_https_callbacks (struct MHD_Connection *connection);
#endif

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/daemon.c.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
/*
  This file is part of libmicrohttpd
  (C) 2007, 2008, 2009, 2010 Daniel Pittman and Christian Grothoff

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

*/

/**
 * @file daemon.c
 * @brief  A minimal-HTTP server library
 * @author Daniel Pittman
 * @author Christian Grothoff
 */
#include "platform.h"
#include "internal.h"
#include "response.h"
#include "connection.h"
#include "memorypool.h"

#if HTTPS_SUPPORT
#include "connection_https.h"
#include <gnutls/gnutls.h>
#include <gcrypt.h>
#endif

#ifdef HAVE_POLL_H
#include <poll.h>
#endif

#ifdef LINUX
#include <sys/sendfile.h>
#endif

/**
 * Default connection limit.
 */
#ifndef WINDOWS
#define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE -4
#else
#define MHD_MAX_CONNECTIONS_DEFAULT FD_SETSIZE
#endif

/**
 * Default memory allowed per connection.
 */
#define MHD_POOL_SIZE_DEFAULT (32 * 1024)

/**
 * Print extra messages with reasons for closing
 * sockets? (only adds non-error messages).
 */
#define DEBUG_CLOSE MHD_NO

/**
 * Print extra messages when establishing
 * connections? (only adds non-error messages).
 */
#define DEBUG_CONNECT MHD_NO

#ifndef LINUX
#ifndef MSG_NOSIGNAL
#define MSG_NOSIGNAL 0
#endif
#ifndef MSG_DONTWAIT
#define MSG_DONTWAIT 0
#endif
#endif

#ifdef __SYMBIAN32__
static void pthread_kill (int, int) {
  // Symbian doesn't have signals. The user of the library is required to
  // run it in an external select loop.
  abort();
}
#endif  // __SYMBIAN32__

/**
 * Default implementation of the panic function
 */
static void 
mhd_panic_std(void *cls,
	      const char *file,
	      unsigned int line,
	      const char *reason)
{
  abort ();
}


/**
 * Handler for fatal errors.
 */
MHD_PanicCallback mhd_panic;

/**
 * Closure argument for "mhd_panic".
 */
void *mhd_panic_cls;

/**
 * Trace up to and return master daemon. If the supplied daemon
 * is a master, then return the daemon itself.
 */
static struct MHD_Daemon*
MHD_get_master (struct MHD_Daemon *daemon)
{
  while (NULL != daemon->master)
    daemon = daemon->master;
  return daemon;
}

/**
 * Maintain connection count for single address.
 */
struct MHD_IPCount
{
  int family;
  union
  {
    struct in_addr ipv4;
#if HAVE_IPV6
    struct in6_addr ipv6;
#endif
  } addr;
  unsigned int count;
};

/**
 * Lock shared structure for IP connection counts
 */
static void
MHD_ip_count_lock(struct MHD_Daemon *daemon)
{
  if (0 != pthread_mutex_lock(&daemon->per_ip_connection_mutex))
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon, "Failed to acquire IP connection limit mutex\n");
#endif
      abort();
    }
}

/**
 * Unlock shared structure for IP connection counts
 */
static void
MHD_ip_count_unlock(struct MHD_Daemon *daemon)
{
  if (0 != pthread_mutex_unlock(&daemon->per_ip_connection_mutex))
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon, "Failed to release IP connection limit mutex\n");
#endif
      abort();
    }
}

/**
 * Tree comparison function for IP addresses (supplied to tsearch() family).
 * We compare everything in the struct up through the beginning of the
 * 'count' field.
 */
static int
MHD_ip_addr_compare(const void *a1, const void *a2)
{
  return memcmp (a1, a2, offsetof(struct MHD_IPCount, count));
}

/**
 * Parse address and initialize 'key' using the address. Returns MHD_YES
 * on success and MHD_NO otherwise (e.g., invalid address type).
 */
static int
MHD_ip_addr_to_key(struct sockaddr *addr, socklen_t addrlen,
                   struct MHD_IPCount *key)
{
  memset(key, 0, sizeof(*key));

  /* IPv4 addresses */
  if (addrlen == sizeof(struct sockaddr_in))
    {
      const struct sockaddr_in *addr4 = (const struct sockaddr_in*)addr;
      key->family = AF_INET;
      memcpy (&key->addr.ipv4, &addr4->sin_addr, sizeof(addr4->sin_addr));
      return MHD_YES;
    }

#if HAVE_IPV6
  /* IPv6 addresses */
  if (addrlen == sizeof (struct sockaddr_in6))
    {
      const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)addr;
      key->family = AF_INET6;
      memcpy (&key->addr.ipv6, &addr6->sin6_addr, sizeof(addr6->sin6_addr));
      return MHD_YES;
    }
#endif

  /* Some other address */
  return MHD_NO;
}

/**
 * Check if IP address is over its limit.
 *
 * @return Return MHD_YES if IP below limit, MHD_NO if IP has surpassed limit.
 *   Also returns MHD_NO if fails to allocate memory.
 */
static int
MHD_ip_limit_add(struct MHD_Daemon *daemon,
                 struct sockaddr *addr, socklen_t addrlen)
{
  struct MHD_IPCount *key;
  void *node;
  int result;

  daemon = MHD_get_master (daemon);

  /* Ignore if no connection limit assigned */
  if (daemon->per_ip_connection_limit == 0)
    return MHD_YES;

  key = malloc (sizeof(*key));
  if (NULL == key)
    return MHD_NO;

  /* Initialize key */
  if (MHD_NO == MHD_ip_addr_to_key (addr, addrlen, key))
    {
      /* Allow unhandled address types through */
      free (key);
      return MHD_YES;
    }

  MHD_ip_count_lock (daemon);

  /* Search for the IP address */
  node = (void*)TSEARCH (key, &daemon->per_ip_connection_count, MHD_ip_addr_compare);
  if (!node)
    {
#if HAVE_MESSAGES
      MHD_DLOG(daemon,
               "Failed to add IP connection count node\n");
#endif
      MHD_ip_count_unlock (daemon);
      return MHD_NO;
    }
  node = *(void**)node;

  /* If we got an existing node back, free the one we created */
  if (node != key)
    free(key);
  key = (struct MHD_IPCount*)node;

  /* Test if there is room for another connection; if so,
   * increment count */
  result = (key->count < daemon->per_ip_connection_limit);
  if (result == MHD_YES)
    ++key->count;

  MHD_ip_count_unlock (daemon);
  return result;
}

/**
 * Decrement connection count for IP address, removing from table
 * count reaches 0
 */
static void
MHD_ip_limit_del(struct MHD_Daemon *daemon,
                 struct sockaddr *addr, socklen_t addrlen)
{
  struct MHD_IPCount search_key;
  struct MHD_IPCount *found_key;
  void *node;

  daemon = MHD_get_master (daemon);

  /* Ignore if no connection limit assigned */
  if (daemon->per_ip_connection_limit == 0)
    return;

  /* Initialize search key */
  if (MHD_NO == MHD_ip_addr_to_key (addr, addrlen, &search_key))
    return;

  MHD_ip_count_lock (daemon);

  /* Search for the IP address */
  node = (void*)TFIND (&search_key, &daemon->per_ip_connection_count, MHD_ip_addr_compare);

  /* Something's wrong if we couldn't find an IP address
   * that was previously added */
  if (!node)
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon,
                "Failed to find previously-added IP address\n");
#endif
      abort();
    }
  found_key = (struct MHD_IPCount*)*(void**)node;

  /* Validate existing count for IP address */
  if (found_key->count == 0)
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon,
                "Previously-added IP address had 0 count\n");
#endif
      abort();
    }

  /* Remove the node entirely if count reduces to 0 */
  if (--found_key->count == 0)
    {
      TDELETE (found_key, &daemon->per_ip_connection_count, MHD_ip_addr_compare);
      free (found_key);
    }

  MHD_ip_count_unlock (daemon);
}

#if HTTPS_SUPPORT
static pthread_mutex_t MHD_gnutls_init_mutex;

/**
 * Callback for receiving data from the socket.
 *
 * @param conn the MHD connection structure
 * @param other where to write received data to
 * @param i maximum size of other (in bytes)
 * @return number of bytes actually received
 */
static ssize_t
recv_tls_adapter (struct MHD_Connection *connection, void *other, size_t i)
{
  return gnutls_record_recv (connection->tls_session, other, i);
}

/**
 * Callback for writing data to the socket.
 *
 * @param conn the MHD connection structure
 * @param other data to write
 * @param i number of bytes to write
 * @return actual number of bytes written
 */
static ssize_t
send_tls_adapter (struct MHD_Connection *connection,
                  const void *other, size_t i)
{
  return gnutls_record_send (connection->tls_session, other, i);
}


/**
 * Read and setup our certificate and key.
 *
 * @return 0 on success
 */
static int
MHD_init_daemon_certificate (struct MHD_Daemon *daemon)
{
  gnutls_datum_t key;
  gnutls_datum_t cert;

  /* certificate & key loaded from memory */
  if (daemon->https_mem_cert && daemon->https_mem_key)
    {
      key.data = (unsigned char *) daemon->https_mem_key;
      key.size = strlen (daemon->https_mem_key);
      cert.data = (unsigned char *) daemon->https_mem_cert;
      cert.size = strlen (daemon->https_mem_cert);

      return gnutls_certificate_set_x509_key_mem (daemon->x509_cred,
						  &cert, &key,
						  GNUTLS_X509_FMT_PEM);
    }
#if HAVE_MESSAGES
  MHD_DLOG (daemon, "You need to specify a certificate and key location\n");
#endif
  return -1;
}

/**
 * Initialize security aspects of the HTTPS daemon
 *
 * @return 0 on success
 */
static int
MHD_TLS_init (struct MHD_Daemon *daemon)
{
  switch (daemon->cred_type)
    {
    case GNUTLS_CRD_CERTIFICATE:
      if (0 !=
          gnutls_certificate_allocate_credentials (&daemon->x509_cred))
        return GNUTLS_E_MEMORY_ERROR;
      return MHD_init_daemon_certificate (daemon);
    default:
#if HAVE_MESSAGES
      MHD_DLOG (daemon,
                "Error: invalid credentials type %d specified.\n",
                daemon->cred_type);
#endif
      return -1;
    }
}
#endif

/**
 * Obtain the select sets for this daemon.
 *
 * @param daemon daemon to get sets from
 * @param read_fd_set read set
 * @param write_fd_set write set
 * @param except_fd_set except set
 * @param max_fd increased to largest FD added (if larger
 *               than existing value); can be NULL
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int
MHD_get_fdset (struct MHD_Daemon *daemon,
               fd_set * read_fd_set,
               fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd)
{
  struct MHD_Connection *con_itr;
  int fd;

  if ((daemon == NULL) || (read_fd_set == NULL) || (write_fd_set == NULL)
      || (except_fd_set == NULL) || (max_fd == NULL)
      || (-1 == (fd = daemon->socket_fd)) || (daemon->shutdown == MHD_YES)
      || ((daemon->options & MHD_USE_THREAD_PER_CONNECTION) != 0)
      || ((daemon->options & MHD_USE_POLL) != 0))
    return MHD_NO;

  FD_SET (fd, read_fd_set);
  /* update max file descriptor */
  if ((*max_fd) < fd) 
    *max_fd = fd;

  con_itr = daemon->connections;
  while (con_itr != NULL)
    {
      if (MHD_YES != MHD_connection_get_fdset (con_itr,
                                               read_fd_set,
                                               write_fd_set,
                                               except_fd_set, max_fd))
        return MHD_NO;
      con_itr = con_itr->next;
    }
#if DEBUG_CONNECT
  MHD_DLOG (daemon, "Maximum socket in select set: %d\n", *max_fd);
#endif
  return MHD_YES;
}

/**
 * Main function of the thread that handles an individual
 * connection when MHD_USE_THREAD_PER_CONNECTION.
 */
static void *
MHD_handle_connection (void *data)
{
  struct MHD_Connection *con = data;
  int num_ready;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  struct timeval tv;
  unsigned int timeout;
  time_t now;
#ifdef HAVE_POLL_H
  struct MHD_Pollfd mp;
  struct pollfd p;
#endif

  timeout = con->daemon->connection_timeout;
  while ((!con->daemon->shutdown) && (con->socket_fd != -1)) {
      now = time (NULL);
      tv.tv_usec = 0;
      if ( (timeout > (now - con->last_activity)) ||
	   (timeout == 0) )
	{
	  /* in case we are missing the SIGALRM, keep going after
	     at most 1s; see http://lists.gnu.org/archive/html/libmicrohttpd/2009-10/msg00013.html */
	  tv.tv_sec = 1;
	  if ((con->state == MHD_CONNECTION_NORMAL_BODY_UNREADY) ||
	      (con->state == MHD_CONNECTION_CHUNKED_BODY_UNREADY))
	    {
	      /* do not block (we're waiting for our callback to succeed) */
	      tv.tv_sec = 0;
	    }
	}
      else
	{
	  tv.tv_sec = 0;
	}
#ifdef HAVE_POLL_H
      if (0 == (con->daemon->options & MHD_USE_POLL)) {
#else
      {
#endif
	/* use select */
        FD_ZERO (&rs);
        FD_ZERO (&ws);
        FD_ZERO (&es);
        max = 0;
        MHD_connection_get_fdset (con, &rs, &ws, &es, &max);
        num_ready = SELECT (max + 1, &rs, &ws, &es, &tv);
        if (num_ready < 0) {
            if (errno == EINTR)
              continue;
#if HAVE_MESSAGES
            MHD_DLOG (con->daemon, "Error during select (%d): `%s'\n", max,
                      STRERROR (errno));
#endif
            break;
        }
        /* call appropriate connection handler if necessary */
        if ((con->socket_fd != -1) && (FD_ISSET (con->socket_fd, &rs)))
          con->read_handler (con);
        if ((con->socket_fd != -1) && (FD_ISSET (con->socket_fd, &ws)))
          con->write_handler (con);
        if (con->socket_fd != -1)
          con->idle_handler (con);
      }
#ifdef HAVE_POLL_H
      else
      {
        /* use poll */
        memset(&mp, 0, sizeof (struct MHD_Pollfd));
        MHD_connection_get_pollfd(con, &mp);
	memset(&p, 0, sizeof (struct pollfd));
        p.fd = mp.fd;
        if (mp.events & MHD_POLL_ACTION_IN) 
          p.events |= POLLIN;        
        if (mp.events & MHD_POLL_ACTION_OUT) 
          p.events |= POLLOUT;
	/* in case we are missing the SIGALRM, keep going after
	   at most 1s */
	if (poll (&p, 1, 1000) < 0) {
          if (errno == EINTR)
            continue;
#if HAVE_MESSAGES
          MHD_DLOG (con->daemon, "Error during poll: `%s'\n", 
                    STRERROR (errno));
#endif
          break;
        }
        if ( (con->socket_fd != -1) && 
	     (0 != (p.revents & POLLIN)) ) 
          con->read_handler (con);        
        if ( (con->socket_fd != -1) && 
	     (0 != (p.revents & POLLOUT)) )
          con->write_handler (con);        
        if (con->socket_fd != -1)
          con->idle_handler (con);
	if ( (con->socket_fd != -1) &&
	     (0 != (p.revents & (POLLERR | POLLHUP))) )
          MHD_connection_close (con, MHD_REQUEST_TERMINATED_WITH_ERROR);      
      }
#endif
    }
  if (con->socket_fd != -1)
    {
#if DEBUG_CLOSE
#if HAVE_MESSAGES
      MHD_DLOG (con->daemon,
                "Processing thread terminating, closing connection\n");
#endif
#endif
      MHD_connection_close (con, MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN);
    }
  return NULL;
}

/**
 * Callback for receiving data from the socket.
 *
 * @param conn the MHD connection structure
 * @param other where to write received data to
 * @param i maximum size of other (in bytes)
 * @return number of bytes actually received
 */
static ssize_t
recv_param_adapter (struct MHD_Connection *connection, void *other, size_t i)
{
  if (connection->socket_fd == -1)
    return -1;
  if (0 != (connection->daemon->options & MHD_USE_SSL))
    return RECV (connection->socket_fd, other, i, MSG_NOSIGNAL);
  return RECV (connection->socket_fd, other, i, MSG_NOSIGNAL | MSG_DONTWAIT);
}

/**
 * Callback for writing data to the socket.
 *
 * @param conn the MHD connection structure
 * @param other data to write
 * @param i number of bytes to write
 * @return actual number of bytes written
 */
static ssize_t
send_param_adapter (struct MHD_Connection *connection,
                    const void *other, size_t i)
{
#if LINUX
  int fd;
  off_t offset;
  int ret;
#endif
  if (connection->socket_fd == -1)
    return -1;
  if (0 != (connection->daemon->options & MHD_USE_SSL))
    return SEND (connection->socket_fd, other, i, MSG_NOSIGNAL);
#if LINUX
  if ( (connection->write_buffer_append_offset ==
	connection->write_buffer_send_offset) &&
       (NULL != connection->response) &&
       (-1 != (fd = connection->response->fd)) )
    {
      /* can use sendfile */
      offset = (off_t) connection->response_write_position;
      ret = sendfile (connection->socket_fd, 
		      fd,
		      &offset,
		      connection->response->total_size - offset);
      if ( (ret == -1) &&
	   (errno == EINTR) )
	return 0;
      return ret;
    }
#endif
  return SEND (connection->socket_fd, other, i, MSG_NOSIGNAL | MSG_DONTWAIT);
}


#if HTTPS_SUPPORT
/**
 * Set if a socket should use non-blocking IO.
 * @param fd socket
 */
static void
socket_set_nonblocking (int fd)
{
#if MINGW
  u_long mode;
  mode = 1;
  if (ioctlsocket (fd, FIONBIO, &mode) == SOCKET_ERROR)
    {
      SetErrnoFromWinsockError (WSAGetLastError ());
#if HAVE_MESSAGES
      FPRINTF(stderr, "Failed to make socket non-blocking: %s\n", 
	      STRERROR (errno));
#endif
    }
#else

  /* not MINGW */
  int flags = fcntl (fd, F_GETFL);
  if ( (flags == -1) ||
       (0 != fcntl (fd, F_SETFL, flags | O_NONBLOCK)) )
    {
#if HAVE_MESSAGES
      FPRINTF(stderr, "Failed to make socket non-blocking: %s\n", 
	      STRERROR (errno));
#endif
    }
#endif
}
#endif


/**
 * Accept an incoming connection and create the MHD_Connection object for
 * it.  This function also enforces policy by way of checking with the
 * accept policy callback.
 */
static int
MHD_accept_connection (struct MHD_Daemon *daemon)
{
  struct MHD_Connection *connection;
#if HAVE_INET6
  struct sockaddr_in6 addrstorage;
#else
  struct sockaddr_in addrstorage;
#endif
  struct sockaddr *addr = (struct sockaddr *) &addrstorage;
  socklen_t addrlen;
  int s;
  int res_thread_create;
#if OSX
  static int on = 1;
#endif

  addrlen = sizeof (addrstorage);
  memset (addr, 0, sizeof (addrstorage));

  s = ACCEPT (daemon->socket_fd, addr, &addrlen);
  if ((s == -1) || (addrlen <= 0))
    {
#if HAVE_MESSAGES
      /* This could be a common occurance with multiple worker threads */
      if ((EAGAIN != errno) && (EWOULDBLOCK != errno))
        MHD_DLOG (daemon, "Error accepting connection: %s\n", STRERROR (errno));
#endif
      if (s != -1)
        {
          SHUTDOWN (s, SHUT_RDWR);
          CLOSE (s);
          /* just in case */
        }
      return MHD_NO;
    }
#ifndef WINDOWS
  if ( (s >= FD_SETSIZE) &&
       (0 == (daemon->options & MHD_USE_POLL)) )
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon,
		"Socket descriptor larger than FD_SETSIZE: %d > %d\n",
		s,
		FD_SETSIZE);
#endif
      CLOSE (s);
      return MHD_NO;
    }
#endif


#if HAVE_MESSAGES
#if DEBUG_CONNECT
  MHD_DLOG (daemon, "Accepted connection on socket %d\n", s);
#endif
#endif
  if ((daemon->max_connections == 0)
      || (MHD_ip_limit_add (daemon, addr, addrlen) == MHD_NO))
    {
      /* above connection limit - reject */
#if HAVE_MESSAGES
      MHD_DLOG (daemon,
                "Server reached connection limit (closing inbound connection)\n");
#endif
      SHUTDOWN (s, SHUT_RDWR);
      CLOSE (s);
      return MHD_NO;
    }

  /* apply connection acceptance policy if present */
  if ((daemon->apc != NULL)
      && (MHD_NO == daemon->apc (daemon->apc_cls, addr, addrlen)))
    {
#if DEBUG_CLOSE
#if HAVE_MESSAGES
      MHD_DLOG (daemon, "Connection rejected, closing connection\n");
#endif
#endif
      SHUTDOWN (s, SHUT_RDWR);
      CLOSE (s);
      MHD_ip_limit_del (daemon, addr, addrlen);
      return MHD_YES;
    }
#if OSX
#ifdef SOL_SOCKET
#ifdef SO_NOSIGPIPE
  setsockopt (s, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof (on));
#endif
#endif
#endif
  connection = malloc (sizeof (struct MHD_Connection));
  if (NULL == connection)
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon, "Error allocating memory: %s\n", STRERROR (errno));
#endif
      SHUTDOWN (s, SHUT_RDWR);
      CLOSE (s);
      MHD_ip_limit_del (daemon, addr, addrlen);
      return MHD_NO;
    }
  memset (connection, 0, sizeof (struct MHD_Connection));
  connection->pool = NULL;
  connection->addr = malloc (addrlen);
  if (connection->addr == NULL)
    {
#if HAVE_MESSAGES
      MHD_DLOG (daemon, "Error allocating memory: %s\n", STRERROR (errno));
#endif
      SHUTDOWN (s, SHUT_RDWR);
      CLOSE (s);
      MHD_ip_limit_del (daemon, addr, addrlen);
      free (connection);
      return MHD_NO;
    }
  memcpy (connection->addr, addr, addrlen);
  connection->addr_len = addrlen;
  connection->socket_fd = s;
  connection->daemon = daemon;
  connection->last_activity = time (NULL);

  /* set default connection handlers  */
  MHD_set_http_calbacks (connection);
  connection->recv_cls = &recv_param_adapter;
  connection->send_cls = &send_param_adapter;
#if HTTPS_SUPPORT
  if (0 != (daemon->options & MHD_USE_SSL))
    {
      connection->recv_cls = &recv_tls_adapter;
      connection->send_cls = &send_tls_adapter;
      connection->state = MHD_TLS_CONNECTION_INIT;
      MHD_set_https_callbacks (connection);
      gnutls_init (&connection->tls_session, GNUTLS_SERVER);
      gnutls_priority_set (connection->tls_session,
			   daemon->priority_cache);
      if (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
	{
	  /* use non-blocking IO for gnutls */
	  socket_set_nonblocking (connection->socket_fd);
	}
      switch (connection->daemon->cred_type)
        {
          /* set needed credentials for certificate authentication. */
        case GNUTLS_CRD_CERTIFICATE:
          gnutls_credentials_set (connection->tls_session,
				  GNUTLS_CRD_CERTIFICATE,
				  connection->daemon->x509_cred);
          break;
        default:
#if HAVE_MESSAGES
          MHD_DLOG (connection->daemon,
                    "Failed to setup TLS credentials: unknown credential type %d\n",
                    connection->daemon->cred_type);
#endif
          SHUTDOWN (s, SHUT_RDWR);
          CLOSE (s);
          MHD_ip_limit_del (daemon, addr, addrlen);
          free (connection->addr);
          free (connection);
          mhd_panic (mhd_panic_cls, __FILE__, __LINE__, 
#if HAVE_MESSAGES
		     "Unknown credential type"
#else
		     NULL
#endif
		     );
 	  return MHD_NO;
        }
      gnutls_transport_set_ptr (connection->tls_session,
				(gnutls_transport_ptr_t) connection);
      gnutls_transport_set_pull_function (connection->tls_session,
					  (gnutls_pull_func) &
                                               recv_param_adapter);
      gnutls_transport_set_push_function (connection->tls_session,
					  (gnutls_push_func) &
                                               send_param_adapter);
    }
#endif

  /* attempt to create handler thread */
  if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
    {
      res_thread_create = pthread_create (&connection->pid, NULL,
                                          &MHD_handle_connection, connection);
      if (res_thread_create != 0)
        {
#if HAVE_MESSAGES
          MHD_DLOG (daemon, "Failed to create a thread: %s\n",
                    STRERROR (res_thread_create));
#endif
          SHUTDOWN (s, SHUT_RDWR);
          CLOSE (s);
          MHD_ip_limit_del (daemon, addr, addrlen);
          free (connection->addr);
          free (connection);
          return MHD_NO;
        }
    }
  connection->next = daemon->connections;
  daemon->connections = connection;
  daemon->max_connections--;
  return MHD_YES;
}

/**
 * Free resources associated with all closed connections.
 * (destroy responses, free buffers, etc.).  A connection
 * is known to be closed if the socket_fd is -1.
 */
static void
MHD_cleanup_connections (struct MHD_Daemon *daemon)
{
  struct MHD_Connection *pos;
  struct MHD_Connection *prev;
  void *unused;
  int rc;

  pos = daemon->connections;
  prev = NULL;
  while (pos != NULL)
    {
      if ((pos->socket_fd == -1) ||
          (((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
            (daemon->shutdown) && (pos->socket_fd != -1))))
        {
          if (prev == NULL)
            daemon->connections = pos->next;
          else
            prev->next = pos->next;
          if (0 != (pos->daemon->options & MHD_USE_THREAD_PER_CONNECTION))
            {
	      pthread_kill (pos->pid, SIGALRM);
              if (0 != (rc = pthread_join (pos->pid, &unused)))
		{
#if HAVE_MESSAGES
		  MHD_DLOG (daemon, "Failed to join a thread: %s\n",
			    STRERROR (rc));
#endif
		  abort();
		}
            }
          MHD_destroy_response (pos->response);
          MHD_pool_destroy (pos->pool);
#if HTTPS_SUPPORT
          if (pos->tls_session != NULL)
            gnutls_deinit (pos->tls_session);
#endif
          MHD_ip_limit_del (daemon, (struct sockaddr*)pos->addr, pos->addr_len);
          free (pos->addr);
          free (pos);
          daemon->max_connections++;
          if (prev == NULL)
            pos = daemon->connections;
          else
            pos = prev->next;
          continue;
        }
      prev = pos;
      pos = pos->next;
    }
}

/**
 * Obtain timeout value for select for this daemon
 * (only needed if connection timeout is used).  The
 * returned value is how long select should at most
 * block, not the timeout value set for connections.
 *
 * @param daemon daemon to query for timeout
 * @param timeout set to the timeout (in milliseconds)
 * @return MHD_YES on success, MHD_NO if timeouts are
 *        not used (or no connections exist that would
 *        necessiate the use of a timeout right now).
 */
int
MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout)
{
  time_t earliest_deadline;
  time_t now;
  struct MHD_Connection *pos;
  unsigned int dto;

  dto = daemon->connection_timeout;
  if (0 == dto)
    return MHD_NO;
  pos = daemon->connections;
  if (pos == NULL)
    return MHD_NO;              /* no connections */
  now = time (NULL);
  /* start with conservative estimate */
  earliest_deadline = now + dto;
  while (pos != NULL)
    {
      if (earliest_deadline > pos->last_activity + dto)
        earliest_deadline = pos->last_activity + dto;
      pos = pos->next;
    }
  if (earliest_deadline < now)
    *timeout = 0;
  else
    *timeout = (earliest_deadline - now);
  return MHD_YES;
}

/**
 * Main select call.
 *
 * @param may_block YES if blocking, NO if non-blocking
 * @return MHD_NO on serious errors, MHD_YES on success
 */
static int
MHD_select (struct MHD_Daemon *daemon, int may_block)
{
  struct MHD_Connection *pos;
  int num_ready;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  struct timeval timeout;
  unsigned long long ltimeout;
  int ds;
  time_t now;

  timeout.tv_sec = 0;
  timeout.tv_usec = 0;
  if (daemon->shutdown == MHD_YES)
    return MHD_NO;
  FD_ZERO (&rs);
  FD_ZERO (&ws);
  FD_ZERO (&es);
  max = 0;

  if (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
    {
      /* single-threaded, go over everything */
      if (MHD_NO == MHD_get_fdset (daemon, &rs, &ws, &es, &max))
        return MHD_NO;

      /* If we're at the connection limit, no need to
         accept new connections. */
      if ( (daemon->max_connections == 0) && (daemon->socket_fd != -1) )
        FD_CLR(daemon->socket_fd, &rs);
    }
  else
    {
      /* accept only, have one thread per connection */
      max = daemon->socket_fd;
      if (max == -1)
        return MHD_NO;
      FD_SET (max, &rs);
    }

  /* in case we are missing the SIGALRM, keep going after
     at most 1s; see http://lists.gnu.org/archive/html/libmicrohttpd/2009-10/msg00013.html */
  timeout.tv_usec = 0;
  timeout.tv_sec = 1;
  if (may_block == MHD_NO)
    {
      timeout.tv_usec = 0;
      timeout.tv_sec = 0;
    }
  else
    {
      /* ltimeout is in ms */
      if ( (MHD_YES == MHD_get_timeout (daemon, &ltimeout)) &&
	   (ltimeout < 1000) )
	{
          timeout.tv_usec = ltimeout * 1000;
          timeout.tv_sec = 0;
        }
    }
  num_ready = SELECT (max + 1, &rs, &ws, &es, &timeout);
  if( num_ready == 0 )
	return MHD_YES;		// Nothing to do.....

  if (daemon->shutdown == MHD_YES)
    return MHD_NO;
  if (num_ready < 0)
    {
      if (errno == EINTR)
        return MHD_YES;
#if HAVE_MESSAGES
      MHD_DLOG (daemon, "select failed: %s\n", STRERROR (errno));
#endif
      return MHD_NO;
    }
  ds = daemon->socket_fd;
  if (ds == -1)
    return MHD_YES;

  /* select connection thread handling type */
  if (FD_ISSET (ds, &rs))
    MHD_accept_connection (daemon);
  if (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
    {
      /* do not have a thread per connection, process all connections now */
      now = time (NULL);
      pos = daemon->connections;
      while (pos != NULL)
        {
          ds = pos->socket_fd;
          if (ds != -1)
            {
              /* TODO call con->read handler */
              if (FD_ISSET (ds, &rs))
                pos->read_handler (pos);
              if ((pos->socket_fd != -1) && (FD_ISSET (ds, &ws)))
                pos->write_handler (pos);
              if (pos->socket_fd != -1)
                pos->idle_handler (pos);
            }
          pos = pos->next;
        }
    }
  return MHD_YES;
}

/**
 * Poll for new connection. Used only with THREAD_PER_CONNECTION
 */
static int
MHD_poll (struct MHD_Daemon *daemon)
{
#ifdef HAVE_POLL_H
  struct pollfd p;

  if (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) 
    return MHD_NO;
  p.fd = daemon->socket_fd;
  p.events = POLLIN;
  p.revents = 0;

  if (poll(&p, 1, 1000) < 0) {
    if (errno == EINTR)
      return MHD_YES;
#if HAVE_MESSAGES
    MHD_DLOG (daemon, "poll failed: %s\n", STRERROR (errno));
#endif
    return MHD_NO;
  }
  /* handle shutdown cases */
  if (daemon->shutdown == MHD_YES) 
    return MHD_NO;  
  if (daemon->socket_fd < 0) 
    return MHD_YES; 
  if (0 != (p.revents & POLLIN)) 
    MHD_accept_connection (daemon);
  return MHD_YES;
#else
  return MHD_NO;
#endif
}

/**
 * Run webserver operations (without blocking unless
 * in client callbacks).  This method should be called
 * by clients in combination with MHD_get_fdset
 * if the client-controlled select method is used.
 *
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int
MHD_run (struct MHD_Daemon *daemon)
{
  if ((daemon->shutdown != MHD_NO) || (0 != (daemon->options
                                             & MHD_USE_THREAD_PER_CONNECTION))
      || (0 != (daemon->options & MHD_USE_SELECT_INTERNALLY)))
    return MHD_NO;
  MHD_select (daemon, MHD_NO);
  MHD_cleanup_connections (daemon);
  return MHD_YES;
}

/**
 * Thread that runs the select loop until the daemon
 * is explicitly shut down.
 */
static void *
MHD_select_thread (void *cls)
{
  struct MHD_Daemon *daemon = cls;
  while (daemon->shutdown == MHD_NO)
    {
      if ((daemon->options & MHD_USE_POLL) == 0) 
	MHD_select (daemon, MHD_YES);
      else 
	MHD_poll(daemon);      
      MHD_cleanup_connections (daemon);
    }
  return NULL;
}

/**
 * Start a webserver on the given port.
 *
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect
 * @param apc_cls extra argument to apc
 * @param dh default handler for all URIs
 * @param dh_cls extra argument to dh
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *
MHD_start_daemon (unsigned int options,
                  unsigned short port,
                  MHD_AcceptPolicyCallback apc,
                  void *apc_cls,
                  MHD_AccessHandlerCallback dh, void *dh_cls, ...)
{
  struct MHD_Daemon *ret;
  va_list ap;

  va_start (ap, dh_cls);
  ret = MHD_start_daemon_va (options, port, apc, apc_cls, dh, dh_cls, ap);
  va_end (ap);
  return ret;
}


typedef void (*VfprintfFunctionPointerType)(void *, const char *, va_list);


/**
 * Parse a list of options given as varargs.
 * 
 * @param daemon the daemon to initialize
 * @param ap the options
 * @return MHD_YES on success, MHD_NO on error
 */
static int
parse_options_va (struct MHD_Daemon *daemon,
		  const struct sockaddr **servaddr,
		  va_list ap);


/**
 * Parse a list of options given as varargs.
 * 
 * @param daemon the daemon to initialize
 * @param ... the options
 * @return MHD_YES on success, MHD_NO on error
 */
static int
parse_options (struct MHD_Daemon *daemon,
	       const struct sockaddr **servaddr,
	       ...)
{
  va_list ap;
  int ret;

  va_start (ap, servaddr);
  ret = parse_options_va (daemon, servaddr, ap);
  va_end (ap);
  return ret;
}


/**
 * Parse a list of options given as varargs.
 * 
 * @param daemon the daemon to initialize
 * @param ap the options
 * @return MHD_YES on success, MHD_NO on error
 */
static int
parse_options_va (struct MHD_Daemon *daemon,
		  const struct sockaddr **servaddr,
		  va_list ap)
{
  enum MHD_OPTION opt;
  struct MHD_OptionItem *oa;
  unsigned int i;
#if HTTPS_SUPPORT
  int ret;
  const char *pstr;
#endif
  
  while (MHD_OPTION_END != (opt = va_arg (ap, enum MHD_OPTION)))
    {
      switch (opt)
        {
        case MHD_OPTION_CONNECTION_MEMORY_LIMIT:
          daemon->pool_size = va_arg (ap, size_t);
          break;
        case MHD_OPTION_CONNECTION_LIMIT:
          daemon->max_connections = va_arg (ap, unsigned int);
          break;
        case MHD_OPTION_CONNECTION_TIMEOUT:
          daemon->connection_timeout = va_arg (ap, unsigned int);
          break;
        case MHD_OPTION_NOTIFY_COMPLETED:
          daemon->notify_completed =
            va_arg (ap, MHD_RequestCompletedCallback);
          daemon->notify_completed_cls = va_arg (ap, void *);
          break;
        case MHD_OPTION_PER_IP_CONNECTION_LIMIT:
          daemon->per_ip_connection_limit = va_arg (ap, unsigned int);
          break;
        case MHD_OPTION_SOCK_ADDR:
          *servaddr = va_arg (ap, const struct sockaddr *);
          break;
        case MHD_OPTION_URI_LOG_CALLBACK:
          daemon->uri_log_callback =
            va_arg (ap, LogCallback);
          daemon->uri_log_callback_cls = va_arg (ap, void *);
          break;
        case MHD_OPTION_THREAD_POOL_SIZE:
          daemon->worker_pool_size = va_arg (ap, unsigned int);
	  if (daemon->worker_pool_size >= (unsigned int)(SIZE_MAX / sizeof (struct MHD_Daemon)))
	    {
#if HAVE_MESSAGES
	      FPRINTF (stderr,
		       "Specified thread pool size too big\n");
#endif
	      return MHD_NO;
	    }
          break;
#if HTTPS_SUPPORT
        case MHD_OPTION_HTTPS_MEM_KEY:
	  if (daemon->options & MHD_USE_SSL)
	    daemon->https_mem_key = va_arg (ap, const char *);
#if HAVE_MESSAGES
	  else
	    FPRINTF (stderr,
		     "MHD HTTPS option %d passed to MHD but MHD_USE_SSL not set\n",
		     opt);	  
#endif
          break;
        case MHD_OPTION_HTTPS_MEM_CERT:
	  if (daemon->options & MHD_USE_SSL)
	    daemon->https_mem_cert = va_arg (ap, const char *);
#if HAVE_MESSAGES
	  else
	    FPRINTF (stderr,
		     "MHD HTTPS option %d passed to MHD but MHD_USE_SSL not set\n",
		     opt);	  
#endif
          break;
	case MHD_OPTION_HTTPS_CRED_TYPE:
	  daemon->cred_type = va_arg (ap, gnutls_credentials_type_t);
	  break;
        case MHD_OPTION_HTTPS_PRIORITIES:
	  ret = gnutls_priority_init (&daemon->priority_cache,
				      pstr = va_arg (ap, const char*),
				      NULL);
#if HAVE_MESSAGES
	  if (ret != GNUTLS_E_SUCCESS)
	    FPRINTF (stderr,
		     "Setting priorities to `%s' failed: %s\n",
		     pstr,
		     gnutls_strerror (ret));
#endif	  
	  if (ret != GNUTLS_E_SUCCESS)
	    return MHD_NO;
          break;
#endif
	case MHD_OPTION_LISTEN_SOCKET:
	  daemon->socket_fd = va_arg (ap, int);	  
	  break;
        case MHD_OPTION_EXTERNAL_LOGGER:
#if HAVE_MESSAGES
          daemon->custom_error_log =
            va_arg (ap, VfprintfFunctionPointerType);
          daemon->custom_error_log_cls = va_arg (ap, void *);
#else
          va_arg (ap, VfprintfFunctionPointerType);
          va_arg (ap, void *);
#endif
          break;
	case MHD_OPTION_ARRAY:
	  oa = va_arg (ap, struct MHD_OptionItem*);
	  i = 0;
	  while (MHD_OPTION_END != (opt = oa[i].option))
	    {
	      switch (opt)
		{
		  /* all options taking 'size_t' */
		case MHD_OPTION_CONNECTION_MEMORY_LIMIT:
		  if (MHD_YES != parse_options (daemon,
						servaddr,
						opt,
						(size_t) oa[i].value,
						MHD_OPTION_END))
		    return MHD_NO;
		  break;
		  /* all options taking 'unsigned int' */
		case MHD_OPTION_CONNECTION_LIMIT:
		case MHD_OPTION_CONNECTION_TIMEOUT:
		case MHD_OPTION_PER_IP_CONNECTION_LIMIT:
		case MHD_OPTION_THREAD_POOL_SIZE:
		  if (MHD_YES != parse_options (daemon,
						servaddr,
						opt,
						(unsigned int) oa[i].value,
						MHD_OPTION_END))
		    return MHD_NO;
		  break;
		  /* all options taking 'int' or 'enum' */
		case MHD_OPTION_HTTPS_CRED_TYPE:
		case MHD_OPTION_LISTEN_SOCKET:
		  if (MHD_YES != parse_options (daemon,
						servaddr,
						opt,
						(int) oa[i].value,
						MHD_OPTION_END))
		    return MHD_NO;
		  break;
		  /* all options taking one pointer */
		case MHD_OPTION_SOCK_ADDR:
		case MHD_OPTION_HTTPS_MEM_KEY:
		case MHD_OPTION_HTTPS_MEM_CERT:
		case MHD_OPTION_HTTPS_PRIORITIES:
		case MHD_OPTION_ARRAY:
		  if (MHD_YES != parse_options (daemon,
						servaddr,
						opt,
						oa[i].ptr_value,
						MHD_OPTION_END))
		    return MHD_NO;
		  break;
		  /* all options taking two pointers */
		case MHD_OPTION_NOTIFY_COMPLETED:
		case MHD_OPTION_URI_LOG_CALLBACK:
		case MHD_OPTION_EXTERNAL_LOGGER:
		  if (MHD_YES != parse_options (daemon,
						servaddr,
						opt,
						(void *) oa[i].value,
						oa[i].ptr_value,
						MHD_OPTION_END))
		    return MHD_NO;
		  break;
		  
		default:
		  return MHD_NO;
		}
	      i++;
	    }
	  break;
        default:
#if HAVE_MESSAGES
          if ((opt >= MHD_OPTION_HTTPS_MEM_KEY) &&
              (opt <= MHD_OPTION_HTTPS_PRIORITIES))
            {
              FPRINTF (stderr,
                       "MHD HTTPS option %d passed to MHD compiled without HTTPS support\n",
                       opt);
            }
          else
            {
              FPRINTF (stderr,
                       "Invalid option %d! (Did you terminate the list with MHD_OPTION_END?)\n",
                       opt);
            }
#endif
	  return MHD_NO;
        }
    }  
  return MHD_YES;
}


/**
 * Start a webserver on the given port.
 *
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect
 * @param apc_cls extra argument to apc
 * @param dh default handler for all URIs
 * @param dh_cls extra argument to dh
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *
MHD_start_daemon_va (unsigned int options,
                     unsigned short port,
                     MHD_AcceptPolicyCallback apc,
                     void *apc_cls,
                     MHD_AccessHandlerCallback dh, void *dh_cls, va_list ap)
{
  const int on = 1;
  struct MHD_Daemon *retVal;
  int socket_fd;
  struct sockaddr_in servaddr4;
#if HAVE_INET6
  struct sockaddr_in6 servaddr6;
#endif
  const struct sockaddr *servaddr = NULL;
  socklen_t addrlen;
  unsigned int i;
  int res_thread_create;

  if ((port == 0) || (dh == NULL))
    return NULL;
  retVal = malloc (sizeof (struct MHD_Daemon));
  if (retVal == NULL)
    return NULL;
  memset (retVal, 0, sizeof (struct MHD_Daemon));
#if HTTPS_SUPPORT
  gnutls_priority_init (&retVal->priority_cache,
			"NORMAL",
			NULL);
#endif
  retVal->socket_fd = -1;
  retVal->options = (enum MHD_OPTION)options;
  retVal->port = port;
  retVal->apc = apc;
  retVal->apc_cls = apc_cls;
  retVal->default_handler = dh;
  retVal->default_handler_cls = dh_cls;
  retVal->max_connections = MHD_MAX_CONNECTIONS_DEFAULT;
  retVal->pool_size = MHD_POOL_SIZE_DEFAULT;
  retVal->connection_timeout = 0;       /* no timeout */
#if HAVE_MESSAGES
  retVal->custom_error_log =
    (void (*)(void *, const char *, va_list)) &vfprintf;
  retVal->custom_error_log_cls = stderr;
#endif
#if HTTPS_SUPPORT
  if (options & MHD_USE_SSL)
    {
      /* lock MHD_gnutls_global mutex since it uses reference counting */
      if (0 != pthread_mutex_lock (&MHD_gnutls_init_mutex))
	{
#if HAVE_MESSAGES
	  MHD_DLOG (retVal, "Failed to aquire gnutls mutex\n");
#endif
          mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);
	}
      if (0 != pthread_mutex_unlock (&MHD_gnutls_init_mutex))
	{
#if HAVE_MESSAGES
	  MHD_DLOG (retVal, "Failed to release gnutls mutex\n");
#endif
	  mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);
	}
      retVal->cred_type = GNUTLS_CRD_CERTIFICATE;
    }
#endif

  if (MHD_YES != parse_options_va (retVal, &servaddr, ap))
    {
      free (retVal);
      return NULL;
    }

  /* poll support currently only works with MHD_USE_THREAD_PER_CONNECTION */
  if ( (0 != (options & MHD_USE_POLL)) && 
       (0 == (options & MHD_USE_THREAD_PER_CONNECTION)) ) {
#if HAVE_MESSAGES
      fprintf (stderr,
               "MHD poll support only works with MHD_USE_THREAD_PER_CONNECTION\n");
#endif
      free (retVal);
      return NULL;
  }

  /* Thread pooling currently works only with internal select thread model */
  if ((0 == (options & MHD_USE_SELECT_INTERNALLY))
      && (retVal->worker_pool_size > 0))
    {
#if HAVE_MESSAGES
      fprintf (stderr,
               "MHD thread pooling only works with MHD_USE_SELECT_INTERNALLY\n");
#endif
      free (retVal);
      return NULL;
    }

#ifdef __SYMBIAN32__
  if (0 != (options & (MHD_USE_SELECT_INTERNALLY | MHD_USE_THREAD_PER_CONNECTION)))
    {
#if HAVE_MESSAGES
      fprintf (stderr,
               "Threaded operations are not supported on Symbian.\n");
#endif
      free (retVal);
      return NULL;
    }
#endif
  if (retVal->socket_fd == -1)
    {
      if ((options & MHD_USE_IPv6) != 0)
#if HAVE_INET6
	socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0);
#else
      {
#if HAVE_MESSAGES
	fprintf (stderr, "AF_INET6 not supported\n");
#endif
	free (retVal);
	return NULL;
      }
#endif
      else
	socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0);
      if (socket_fd == -1)
	{
#if HAVE_MESSAGES
	  if ((options & MHD_USE_DEBUG) != 0)
	    FPRINTF (stderr, "Call to socket failed: %s\n", STRERROR (errno));
#endif
	  free (retVal);
	  return NULL;
	}
      if ((SETSOCKOPT (socket_fd,
		       SOL_SOCKET,
		       SO_REUSEADDR,
		       &on, sizeof (on)) < 0) && ((options & MHD_USE_DEBUG) != 0))
	{
#if HAVE_MESSAGES
	  FPRINTF (stderr, "setsockopt failed: %s\n", STRERROR (errno));
#endif
	}
      
      /* check for user supplied sockaddr */
#if HAVE_INET6
      if ((options & MHD_USE_IPv6) != 0)
	addrlen = sizeof (struct sockaddr_in6);
      else
#endif
	addrlen = sizeof (struct sockaddr_in);
      if (NULL == servaddr)
	{
#if HAVE_INET6
	  if ((options & MHD_USE_IPv6) != 0)
	    {
	      memset (&servaddr6, 0, sizeof (struct sockaddr_in6));
	      servaddr6.sin6_family = AF_INET6;
	      servaddr6.sin6_port = htons (port);
	      servaddr = (struct sockaddr *) &servaddr6;
	    }
	  else
#endif
	    {
	      memset (&servaddr4, 0, sizeof (struct sockaddr_in));
	      servaddr4.sin_family = AF_INET;
	      servaddr4.sin_port = htons (port);
	      servaddr = (struct sockaddr *) &servaddr4;
	    }
	}
      retVal->socket_fd = socket_fd;

      if ((options & MHD_USE_IPv6) != 0)
	{
	  const int on = 1;
	  setsockopt (socket_fd, 
		      IPPROTO_IPV6, IPV6_V6ONLY, 
		      &on, sizeof (on));      
	}
      if (BIND (socket_fd, servaddr, addrlen) == -1)
	{
#if HAVE_MESSAGES
	  if ((options & MHD_USE_DEBUG) != 0)
	    FPRINTF (stderr,
		     "Failed to bind to port %u: %s\n", port, STRERROR (errno));
#endif
	  CLOSE (socket_fd);
	  free (retVal);
	  return NULL;
	}
      
      if (LISTEN (socket_fd, 20) < 0)
	{
#if HAVE_MESSAGES
	  if ((options & MHD_USE_DEBUG) != 0)
	    FPRINTF (stderr,
		     "Failed to listen for connections: %s\n", STRERROR (errno));
#endif
	  CLOSE (socket_fd);
	  free (retVal);
	  return NULL;
	}      
    }
  else
    {
      socket_fd = retVal->socket_fd;
    }
#ifndef WINDOWS
  if ( (socket_fd >= FD_SETSIZE) &&
       (0 == (options & MHD_USE_POLL)) )
    {
#if HAVE_MESSAGES
      if ((options & MHD_USE_DEBUG) != 0)
        FPRINTF (stderr,
                 "Socket descriptor larger than FD_SETSIZE: %d > %d\n",
                 socket_fd,
                 FD_SETSIZE);
#endif
      CLOSE (socket_fd);
      free (retVal);
      return NULL;
    }
#endif

  if (0 != pthread_mutex_init (&retVal->per_ip_connection_mutex, NULL))
    {
#if HAVE_MESSAGES
      MHD_DLOG (retVal,
               "MHD failed to initialize IP connection limit mutex\n");
#endif
      CLOSE (socket_fd);
      free (retVal);
      return NULL;
    }

#if HTTPS_SUPPORT
  /* initialize HTTPS daemon certificate aspects & send / recv functions */
  if ((0 != (options & MHD_USE_SSL)) && (0 != MHD_TLS_init (retVal)))
    {
#if HAVE_MESSAGES
      MHD_DLOG (retVal, "Failed to initialize TLS support\n");
#endif
      CLOSE (socket_fd);
      pthread_mutex_destroy (&retVal->per_ip_connection_mutex);
      free (retVal);
      return NULL;
    }
#endif
  if ( ( (0 != (options & MHD_USE_THREAD_PER_CONNECTION)) ||
	 ( (0 != (options & MHD_USE_SELECT_INTERNALLY)) &&
	   (0 == retVal->worker_pool_size)) ) && 
       (0 != (res_thread_create =
	      pthread_create (&retVal->pid, NULL, &MHD_select_thread, retVal))))
    {
#if HAVE_MESSAGES
      MHD_DLOG (retVal,
                "Failed to create listen thread: %s\n", STRERROR (res_thread_create));
#endif
      pthread_mutex_destroy (&retVal->per_ip_connection_mutex);
      free (retVal);
      CLOSE (socket_fd);
      return NULL;
    }
  else if (retVal->worker_pool_size > 0)
    {
#ifndef MINGW
      int sk_flags;
#else
      unsigned long sk_flags;
#endif

      /* Coarse-grained count of connections per thread (note error
       * due to integer division). Also keep track of how many
       * connections are leftover after an equal split. */
      unsigned int conns_per_thread = retVal->max_connections
                                      / retVal->worker_pool_size;
      unsigned int leftover_conns = retVal->max_connections
                                    % retVal->worker_pool_size;

      i = 0; /* we need this in case fcntl or malloc fails */

      /* Accept must be non-blocking. Multiple children may wake up
       * to handle a new connection, but only one will win the race.
       * The others must immediately return. */
#ifndef MINGW
      sk_flags = fcntl (socket_fd, F_GETFL);
      if (sk_flags < 0)
        goto thread_failed;
      if (fcntl (socket_fd, F_SETFL, sk_flags | O_NONBLOCK) < 0)
        goto thread_failed;
#else
      sk_flags = 1;
#if HAVE_PLIBC_FD
      if (ioctlsocket (plibc_fd_get_handle (socket_fd), FIONBIO, &sk_flags) ==
          SOCKET_ERROR)
#else
      if (ioctlsocket (socket_fd, FIONBIO, &sk_flags) == SOCKET_ERROR)
#endif // PLIBC_FD
        goto thread_failed;
#endif // MINGW

      /* Allocate memory for pooled objects */
      retVal->worker_pool = malloc (sizeof (struct MHD_Daemon)
                                    * retVal->worker_pool_size);
      if (NULL == retVal->worker_pool)
        goto thread_failed;

      /* Start the workers in the pool */
      for (i = 0; i < retVal->worker_pool_size; ++i)
        {
          /* Create copy of the Daemon object for each worker */
          struct MHD_Daemon *d = &retVal->worker_pool[i];
          memcpy (d, retVal, sizeof (struct MHD_Daemon));

          /* Adjust pooling params for worker daemons; note that memcpy()
             has already copied MHD_USE_SELECT_INTERNALLY thread model into
             the worker threads. */
          d->master = retVal;
          d->worker_pool_size = 0;
          d->worker_pool = NULL;

          /* Divide available connections evenly amongst the threads.
           * Thread indexes in [0, leftover_conns) each get one of the
           * leftover connections. */
          d->max_connections = conns_per_thread;
          if (i < leftover_conns)
            ++d->max_connections;

          /* Spawn the worker thread */
          if (0 != (res_thread_create = pthread_create (&d->pid, NULL, &MHD_select_thread, d)))
            {
#if HAVE_MESSAGES
              MHD_DLOG (retVal,
                        "Failed to create pool thread: %s\n", 
			STRERROR (res_thread_create));
#endif
              /* Free memory for this worker; cleanup below handles
               * all previously-created workers. */
              goto thread_failed;
            }
        }
    }
  return retVal;

thread_failed:
  /* If no worker threads created, then shut down normally. Calling
     MHD_stop_daemon (as we do below) doesn't work here since it
     assumes a 0-sized thread pool means we had been in the default
     MHD_USE_SELECT_INTERNALLY mode. */
  if (i == 0)
    {
      CLOSE (socket_fd);
      pthread_mutex_destroy (&retVal->per_ip_connection_mutex);
      if (NULL != retVal->worker_pool)
        free (retVal->worker_pool);
      free (retVal);
      return NULL;
    }

  /* Shutdown worker threads we've already created. Pretend
     as though we had fully initialized our daemon, but
     with a smaller number of threads than had been
     requested. */
  retVal->worker_pool_size = i - 1;
  MHD_stop_daemon (retVal);
  return NULL;
}

/**
 * Close all connections for the daemon
 */
static void
MHD_close_connections (struct MHD_Daemon *daemon)
{
  while (daemon->connections != NULL)
    {
      if (-1 != daemon->connections->socket_fd)
        {
#if DEBUG_CLOSE
#if HAVE_MESSAGES
          MHD_DLOG (daemon, "MHD shutdown, closing active connections\n");
#endif
#endif
          MHD_connection_close (daemon->connections,
                                MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN);
        }
      MHD_cleanup_connections (daemon);
    }
}

/**
 * Shutdown an http daemon
 */
void
MHD_stop_daemon (struct MHD_Daemon *daemon)
{
  void *unused;
  int fd;
  unsigned int i;
  int rc;

  if (daemon == NULL)
    return;
  daemon->shutdown = MHD_YES;
  fd = daemon->socket_fd;
  daemon->socket_fd = -1;

  /* Prepare workers for shutdown */
  for (i = 0; i < daemon->worker_pool_size; ++i)
    {
      daemon->worker_pool[i].shutdown = MHD_YES;
      daemon->worker_pool[i].socket_fd = -1;
    }

#if OSX
  /* without this, either (thread pool = 0) threads would get stuck or
   * CLOSE would get stuck if attempted before (thread pool > 0)
   * threads have ended */
  SHUTDOWN (fd, SHUT_RDWR);
#else
#if DEBUG_CLOSE
#if HAVE_MESSAGES
  MHD_DLOG (daemon, "MHD shutdown, closing listen socket\n");
#endif
#endif
  CLOSE (fd);
#endif

  /* Signal workers to stop and clean them up */
  for (i = 0; i < daemon->worker_pool_size; ++i)
    pthread_kill (daemon->worker_pool[i].pid, SIGALRM);
  for (i = 0; i < daemon->worker_pool_size; ++i)
    {
      if (0 != (rc = pthread_join (daemon->worker_pool[i].pid, &unused)))
	{
#if HAVE_MESSAGES
	  MHD_DLOG (daemon, "Failed to join a thread: %s\n",
		    STRERROR (rc));
#endif
	  abort();
	}
      MHD_close_connections (&daemon->worker_pool[i]);
    }
  free (daemon->worker_pool);

  if ((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
      ((0 != (daemon->options & MHD_USE_SELECT_INTERNALLY))
        && (0 == daemon->worker_pool_size)))
    {
      pthread_kill (daemon->pid, SIGALRM);
      if (0 != (rc = pthread_join (daemon->pid, &unused)))
	{
#if HAVE_MESSAGES
	  MHD_DLOG (daemon, "Failed to join a thread: %s\n",
		    STRERROR (rc));
#endif
	  abort();
	}
    }
  MHD_close_connections (daemon);

#if OSX
#if DEBUG_CLOSE
#if HAVE_MESSAGES
  MHD_DLOG (daemon, "MHD shutdown, closing listen socket\n");
#endif
#endif
  CLOSE (fd);
#endif

  /* TLS clean up */
#if HTTPS_SUPPORT
  if (daemon->options & MHD_USE_SSL)
    {
      if (daemon->x509_cred)
        gnutls_certificate_free_credentials (daemon->x509_cred);
      /* lock MHD_gnutls_global mutex since it uses reference counting */
      if (0 != pthread_mutex_lock (&MHD_gnutls_init_mutex))
	{
#if HAVE_MESSAGES
	  MHD_DLOG (daemon, "Failed to aquire gnutls mutex\n");
#endif
	  abort();
	}
      if (0 != pthread_mutex_unlock (&MHD_gnutls_init_mutex))
	{
#if HAVE_MESSAGES
	  MHD_DLOG (daemon, "Failed to release gnutls mutex\n");
#endif
	  abort();
	}
    }
#endif
  pthread_mutex_destroy (&daemon->per_ip_connection_mutex);
  free (daemon);
}

/**
 * Obtain information about the given daemon
 * (not fully implemented!).
 *
 * @param daemon what daemon to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_DaemonInfo *
MHD_get_daemon_info (struct MHD_Daemon *daemon,
                     enum MHD_DaemonInfoType infoType, ...)
{
  switch (infoType)
    {
    case MHD_DAEMON_INFO_LISTEN_FD:
      return (const union MHD_DaemonInfo *) &daemon->socket_fd;
   default:
      return NULL;
    };
}

/**
 * Sets the global error handler to a different implementation.  "cb"
 * will only be called in the case of typically fatal, serious
 * internal consistency issues.  These issues should only arise in the
 * case of serious memory corruption or similar problems with the
 * architecture.  While "cb" is allowed to return and MHD will then
 * try to continue, this is never safe.
 *
 * The default implementation that is used if no panic function is set
 * simply calls "abort".  Alternative implementations might call
 * "exit" or other similar functions.
 *
 * @param cb new error handler
 * @param cls passed to error handler
 */
void MHD_set_panic_func (MHD_PanicCallback cb, void *cls)
{
  mhd_panic = cb;
  mhd_panic_cls = cls;
}

/**
 * Obtain the version of this library
 *
 * @return static version string, e.g. "0.4.1"
 */
const char *
MHD_get_version (void)
{
  return PACKAGE_VERSION;
}

#ifndef WINDOWS

static struct sigaction sig;

static struct sigaction old;

static void
sigalrmHandler (int sig)
{
}
#endif

#ifdef __GNUC__
#define ATTRIBUTE_CONSTRUCTOR __attribute__ ((constructor))
#define ATTRIBUTE_DESTRUCTOR __attribute__ ((destructor))
#else  // !__GNUC__
#define ATTRIBUTE_CONSTRUCTOR
#define ATTRIBUTE_DESTRUCTOR
#endif  // __GNUC__

#if HTTPS_SUPPORT
GCRY_THREAD_OPTION_PTHREAD_IMPL;
#endif

/**
 * Initialize the signal handler for SIGALRM
 * and do other setup work.
 */
void ATTRIBUTE_CONSTRUCTOR MHD_init ()
{
  mhd_panic = &mhd_panic_std;
  mhd_panic_cls = NULL;

#ifndef WINDOWS
  /* make sure SIGALRM does not kill us */
  memset (&sig, 0, sizeof (struct sigaction));
  memset (&old, 0, sizeof (struct sigaction));
  sig.sa_flags = SA_NODEFER;
  sig.sa_handler = &sigalrmHandler;
  sigaction (SIGALRM, &sig, &old);
#else
  plibc_init ("GNU", "libmicrohttpd");
#endif
#if HTTPS_SUPPORT
  gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
  gnutls_global_init ();
  if (0 != pthread_mutex_init(&MHD_gnutls_init_mutex, NULL))
    abort();
#endif
}

void ATTRIBUTE_DESTRUCTOR MHD_fini ()
{
#if HTTPS_SUPPORT
  gnutls_global_deinit ();
  if (0 != pthread_mutex_destroy(&MHD_gnutls_init_mutex))
    mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);
#endif
#ifndef WINDOWS
  sigaction (SIGALRM, &old, &sig);
#else
  plibc_shutdown ();
#endif
}

/* end of daemon.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/daemon_test.c.

















































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest.c
 * @brief  Testcase for libmicrohttpd starts and stops
 * @author Christian Grothoff
 */

#include "platform.h"
#include "platform.h"
#include "microhttpd.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#ifndef WINDOWS
#include <unistd.h>
#endif


static int
testStartError ()
{
  struct MHD_Daemon *d;

  d = MHD_start_daemon (MHD_USE_DEBUG, 0, NULL, NULL, NULL, NULL);
  if (d != NULL)
    return 1;
  return 0;
}

static int
apc_nothing (void *cls, const struct sockaddr *addr, socklen_t addrlen)
{
  return MHD_NO;
}

static int
apc_all (void *cls, const struct sockaddr *addr, socklen_t addrlen)
{
  return MHD_YES;
}

static int
ahc_nothing (void *cls,
             struct MHD_Connection *connection,
             const char *url,
             const char *method,
             const char *version,
             const char *upload_data, size_t *upload_data_size,
             void **unused)
{
  return MHD_NO;
}

static int
testStartStop ()
{
  struct MHD_Daemon *d;

  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080,
                        &apc_nothing,
                        NULL, &ahc_nothing, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 2;
  MHD_stop_daemon (d);
  return 0;
}

static int
testExternalRun ()
{
  struct MHD_Daemon *d;
  fd_set rs;
  int maxfd;
  int i;

  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1081,
                        &apc_all, NULL, &ahc_nothing, NULL, MHD_OPTION_END);

  if (d == NULL)
    return 4;
  i = 0;
  while (i < 15)
    {
      maxfd = 0;
      FD_ZERO (&rs);
      if (MHD_YES != MHD_get_fdset (d, &rs, &rs, &rs, &maxfd))
	{
	  MHD_stop_daemon (d);
	  return 256;
	}
      if (MHD_run (d) == MHD_NO)
        {
          MHD_stop_daemon (d);
          return 8;
        }
      i++;
    }
  MHD_stop_daemon (d);
  return 0;
}

static int
testThread ()
{
  struct MHD_Daemon *d;
  d = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_SELECT_INTERNALLY,
                        1082,
                        &apc_all, NULL, &ahc_nothing, NULL, MHD_OPTION_END);

  if (d == NULL)
    return 16;
  if (MHD_run (d) != MHD_NO)
    return 32;
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithread ()
{
  struct MHD_Daemon *d;
  d = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_THREAD_PER_CONNECTION,
                        1083,
                        &apc_all, NULL, &ahc_nothing, NULL, MHD_OPTION_END);

  if (d == NULL)
    return 64;
  if (MHD_run (d) != MHD_NO)
    return 128;
  MHD_stop_daemon (d);
  return 0;
}

int
main (int argc, char *const *argv)
{
  int errorCount = 0;
  errorCount += testStartError ();
  errorCount += testStartStop ();
  errorCount += testExternalRun ();
  errorCount += testThread ();
  errorCount += testMultithread ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.c.



















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
     This file is part of libmicrohttpd
     (C) 2007 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file internal.h
 * @brief  internal shared structures
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#include "internal.h"

#if HAVE_MESSAGES
/**
 * State to string dictionary.
 */
char *
MHD_state_to_string (enum MHD_CONNECTION_STATE state)
{
  switch (state)
    {
    case MHD_CONNECTION_INIT:
      return "connection init";
    case MHD_CONNECTION_URL_RECEIVED:
      return "connection url received";
    case MHD_CONNECTION_HEADER_PART_RECEIVED:
      return "header partially received";
    case MHD_CONNECTION_HEADERS_RECEIVED:
      return "headers received";
    case MHD_CONNECTION_HEADERS_PROCESSED:
      return "headers processed";
    case MHD_CONNECTION_CONTINUE_SENDING:
      return "continue sending";
    case MHD_CONNECTION_CONTINUE_SENT:
      return "continue sent";
    case MHD_CONNECTION_BODY_RECEIVED:
      return "body received";
    case MHD_CONNECTION_FOOTER_PART_RECEIVED:
      return "footer partially received";
    case MHD_CONNECTION_FOOTERS_RECEIVED:
      return "footers received";
    case MHD_CONNECTION_HEADERS_SENDING:
      return "headers sending";
    case MHD_CONNECTION_HEADERS_SENT:
      return "headers sent";
    case MHD_CONNECTION_NORMAL_BODY_READY:
      return "normal body ready";
    case MHD_CONNECTION_NORMAL_BODY_UNREADY:
      return "normal body unready";
    case MHD_CONNECTION_CHUNKED_BODY_READY:
      return "chunked body ready";
    case MHD_CONNECTION_CHUNKED_BODY_UNREADY:
      return "chunked body unready";
    case MHD_CONNECTION_BODY_SENT:
      return "body sent";
    case MHD_CONNECTION_FOOTERS_SENDING:
      return "footers sending";
    case MHD_CONNECTION_FOOTERS_SENT:
      return "footers sent";
    case MHD_CONNECTION_CLOSED:
      return "closed";
    case MHD_TLS_CONNECTION_INIT:
      return "secure connection init";
    default:
      return "unrecognized connection state";
    }
}
#endif

#if HAVE_MESSAGES
/**
 * fprintf-like helper function for logging debug
 * messages.
 */
void
MHD_DLOG (const struct MHD_Daemon *daemon, const char *format, ...)
{
  va_list va;

  if ((daemon->options & MHD_USE_DEBUG) == 0)
    return;
  va_start (va, format);
  daemon->custom_error_log (daemon->custom_error_log_cls, format, va);
  va_end (va);
}
#endif

void
MHD_tls_log_func (int level, const char *str)
{
#ifdef HAVE_MESSAGES
  FPRINTF (stderr, "|<%d>| %s", level, str);
#endif
}

/**
 * Process escape sequences ('+'=space, %HH)
 */
size_t
MHD_http_unescape (char *val)
{
  char *rpos = val;
  char *wpos = val;
  unsigned int num;

  while ('\0' != *rpos)
    {
      switch (*rpos)
	{
	case '+':
	  *wpos = ' ';
	  wpos++;
	  rpos++;
	  break;
	case '%':
	  if ( (1 == SSCANF (&rpos[1],
			     "%2x", &num)) ||
	       (1 == SSCANF (&rpos[1],
			     "%2X", &num)) )
	    {
	      *wpos = (unsigned char) num;
	      wpos++;
	      rpos += 3;
	      break;
	    }
	  /* intentional fall through! */
	default:
	  *wpos = *rpos;
	  wpos++;
	  rpos++;
	}
    }
  *wpos = '\0'; /* add 0-terminator */
  return wpos - val; /* = strlen(val) */
}

/* end of internal.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.h.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
/*
  This file is part of libmicrohttpd
  (C) 2007, 2008, 2009, 2010 Daniel Pittman and Christian Grothoff
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file internal.h
 * @brief  internal shared structures
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#ifndef INTERNAL_H
#define INTERNAL_H

#include "platform.h"
#include "microhttpd.h"
#if HTTPS_SUPPORT
#include <gnutls/gnutls.h>
#endif

#define EXTRA_CHECKS MHD_YES

#define MHD_MAX(a,b) ((a)<(b)) ? (b) : (a)
#define MHD_MIN(a,b) ((a)<(b)) ? (a) : (b)

/**
 * Size by which MHD usually tries to increment read/write buffers.
 * TODO: we should probably get rid of this magic constant and
 * put in code to automatically determine a good value.
 */
#define MHD_BUF_INC_SIZE 2048

/**
 * Handler for fatal errors.
 */
extern MHD_PanicCallback mhd_panic;

/**
 * Closure argument for "mhd_panic".
 */
extern void *mhd_panic_cls;

/**
 * Events we care about with respect to poll/select
 * for file descriptors.
 */
enum MHD_PollActions
  {
    /**
     * No event interests us.
     */
    MHD_POLL_ACTION_NOTHING = 0,

    /**
     * We would like to read.
     */
    MHD_POLL_ACTION_IN = 1,

    /**
     * We would like to write.
     */ 
    MHD_POLL_ACTION_OUT = 2
  };


/**
 * Socket descriptor and events we care about.
 */
struct MHD_Pollfd {
  /**
   * Socket descriptor.
   */
  int fd;

  /**
   * Which events do we care about for this socket?
   */
  enum MHD_PollActions events;
};


#if HAVE_MESSAGES
/**
 * fprintf-like helper function for logging debug
 * messages.
 */
void MHD_DLOG (const struct MHD_Daemon *daemon, const char *format, ...);

#endif
void MHD_tls_log_func (int level, const char *str);

/**
 * Process escape sequences ('+'=space, %HH).
 * Updates val in place.
 *
 * @return length of the resulting val (strlen(val) maybe
 *  shorter afterwards due to elimination of escape sequences)
 */
size_t MHD_http_unescape (char *val);

/**
 * Header or cookie in HTTP request or response.
 */
struct MHD_HTTP_Header
{
  /**
   * Headers are kept in a linked list.
   */
  struct MHD_HTTP_Header *next;

  /**
   * The name of the header (key), without
   * the colon.
   */
  char *header;

  /**
   * The value of the header.
   */
  char *value;

  /**
   * Type of the header (where in the HTTP
   * protocol is this header from).
   */
  enum MHD_ValueKind kind;

};

/**
 * Representation of a response.
 */
struct MHD_Response
{

  /**
   * Headers to send for the response.  Initially
   * the linked list is created in inverse order;
   * the order should be inverted before sending!
   */
  struct MHD_HTTP_Header *first_header;

  /**
   * Buffer pointing to data that we are supposed
   * to send as a response.
   */
  char *data;

  /**
   * Closure to give to the content reader
   * free callback.
   */
  void *crc_cls;

  /**
   * How do we get more data?  NULL if we are
   * given all of the data up front.
   */
  MHD_ContentReaderCallback crc;

  /**
   * NULL if data must not be freed, otherwise
   * either user-specified callback or "&free".
   */
  MHD_ContentReaderFreeCallback crfc;

  /**
   * Mutex to synchronize access to data/size and
   * reference counts.
   */
  pthread_mutex_t mutex;

  /**
   * Set to MHD_SIZE_UNKNOWN if size is not known.
   */
  uint64_t total_size;

  /**
   * At what offset in the stream is the
   * beginning of data located?
   */
  uint64_t data_start;

  /**
   * Size of data.
   */
  size_t data_size;

  /**
   * Size of the data buffer.
   */
  size_t data_buffer_size;

  /**
   * Reference count for this response.  Free
   * once the counter hits zero.
   */
  unsigned int reference_count;

  /**
   * File-descriptor if this response is FD-backed.
   */
  int fd;

};

/**
 * States in a state machine for a connection.
 *
 * Transitions are any-state to CLOSED, any state to state+1,
 * FOOTERS_SENT to INIT.  CLOSED is the terminal state and
 * INIT the initial state.
 *
 * Note that transitions for *reading* happen only after
 * the input has been processed; transitions for
 * *writing* happen after the respective data has been
 * put into the write buffer (the write does not have
 * to be completed yet).  A transition to CLOSED or INIT
 * requires the write to be complete.
 */
enum MHD_CONNECTION_STATE
{
  /**
   * Connection just started (no headers received).
   * Waiting for the line with the request type, URL and version.
   */
  MHD_CONNECTION_INIT = 0,

  /**
   * 1: We got the URL (and request type and version).  Wait for a header line.
   */
  MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1,

  /**
   * 2: We got part of a multi-line request header.  Wait for the rest.
   */
  MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1,

  /**
   * 3: We got the request headers.  Process them.
   */
  MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,

  /**
   * 4: We have processed the request headers.  Send 100 continue.
   */
  MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1,

  /**
   * 5: We have processed the headers and need to send 100 CONTINUE.
   */
  MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1,

  /**
   * 6: We have sent 100 CONTINUE (or do not need to).  Read the message body.
   */
  MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1,

  /**
   * 7: We got the request body.  Wait for a line of the footer.
   */
  MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,

  /**
   * 8: We got part of a line of the footer.  Wait for the
   * rest.
   */
  MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1,

  /**
   * 9: We received the entire footer.  Wait for a response to be queued
   * and prepare the response headers.
   */
  MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1,

  /**
   * 10: We have prepared the response headers in the writ buffer.
   * Send the response headers.
   */
  MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1,

  /**
   * 11: We have sent the response headers.  Get ready to send the body.
   */
  MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,

  /**
   * 12: We are ready to send a part of a non-chunked body.  Send it.
   */
  MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1,

  /**
   * 13: We are waiting for the client to provide more
   * data of a non-chunked body.
   */
  MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1,

  /**
   * 14: We are ready to send a chunk.
   */
  MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1,

  /**
   * 15: We are waiting for the client to provide a chunk of the body.
   */
  MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,

  /**
   * 16: We have sent the response body. Prepare the footers.
   */
  MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1,

  /**
   * 17: We have prepared the response footer.  Send it.
   */
  MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1,

  /**
   * 18: We have sent the response footer.  Shutdown or restart.
   */
  MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1,

  /**
   * 19: This connection is closed (no more activity
   * allowed).
   */
  MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,

  /*
   *  SSL/TLS connection states
   */

  /**
   * The initial connection state for all secure connectoins
   * Handshake messages will be processed in this state & while
   * in the 'MHD_TLS_HELLO_REQUEST' state
   */
  MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_CLOSED + 1

};

/**
 * Should all state transitions be printed to stderr?
 */
#define DEBUG_STATES MHD_NO

#if HAVE_MESSAGES
char *MHD_state_to_string (enum MHD_CONNECTION_STATE state);
#endif

/**
 * Function to receive plaintext data.
 *
 * @param conn the connection struct
 * @param write_to where to write received data
 * @param max_bytes maximum number of bytes to receive
 * @return number of bytes written to write_to
 */
typedef ssize_t (*ReceiveCallback) (struct MHD_Connection * conn,
                                    void *write_to, size_t max_bytes);


/**
 * Function to transmit plaintext data.
 *
 * @param conn the connection struct
 * @param read_from where to read data to transmit
 * @param max_bytes maximum number of bytes to transmit
 * @return number of bytes transmitted
 */
typedef ssize_t (*TransmitCallback) (struct MHD_Connection * conn,
                                     const void *write_to, size_t max_bytes);


/**
 * State kept for each HTTP request.
 */
struct MHD_Connection
{

  /**
   * This is a linked list.
   */
  struct MHD_Connection *next;

  /**
   * Reference to the MHD_Daemon struct.
   */
  struct MHD_Daemon *daemon;

  /**
   * Linked list of parsed headers.
   */
  struct MHD_HTTP_Header *headers_received;

  /**
   * Response to transmit (initially NULL).
   */
  struct MHD_Response *response;

  /**
   * The memory pool is created whenever we first read
   * from the TCP stream and destroyed at the end of
   * each request (and re-created for the next request).
   * In the meantime, this pointer is NULL.  The
   * pool is used for all connection-related data
   * except for the response (which maybe shared between
   * connections) and the IP address (which persists
   * across individual requests).
   */
  struct MemoryPool *pool;

  /**
   * We allow the main application to associate some
   * pointer with the connection.  Here is where we
   * store it.  (MHD does not know or care what it
   * is).
   */
  void *client_context;

  /**
   * Request method.  Should be GET/POST/etc.  Allocated
   * in pool.
   */
  char *method;

  /**
   * Requested URL (everything after "GET" only).  Allocated
   * in pool.
   */
  char *url;

  /**
   * HTTP version string (i.e. http/1.1).  Allocated
   * in pool.
   */
  char *version;

  /**
   * Buffer for reading requests.   Allocated
   * in pool.  Actually one byte larger than
   * read_buffer_size (if non-NULL) to allow for
   * 0-termination.
   */
  char *read_buffer;

  /**
   * Buffer for writing response (headers only).  Allocated
   * in pool.
   */
  char *write_buffer;

  /**
   * Last incomplete header line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *last;

  /**
   * Position after the colon on the last incomplete header
   * line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *colon;

  /**
   * Foreign address (of length addr_len).  MALLOCED (not
   * in pool!).
   */
  struct sockaddr_in *addr;

  /**
   * Thread for this connection (if we are using
   * one thread per connection).
   */
  pthread_t pid;

  /**
   * Size of read_buffer (in bytes).  This value indicates
   * how many bytes we're willing to read into the buffer;
   * the real buffer is one byte longer to allow for
   * adding zero-termination (when needed).
   */
  size_t read_buffer_size;

  /**
   * Position where we currently append data in
   * read_buffer (last valid position).
   */
  size_t read_buffer_offset;

  /**
   * Size of write_buffer (in bytes).
   */
  size_t write_buffer_size;

  /**
   * Offset where we are with sending from write_buffer.
   */
  size_t write_buffer_send_offset;

  /**
   * Last valid location in write_buffer (where do we
   * append and up to where is it safe to send?)
   */
  size_t write_buffer_append_offset;

  /**
   * How many more bytes of the body do we expect
   * to read? "-1" for unknown.
   */
  uint64_t remaining_upload_size;

  /**
   * Current write position in the actual response
   * (excluding headers, content only; should be 0
   * while sending headers).
   */
  uint64_t response_write_position;

  /**
   * Position in the 100 CONTINUE message that
   * we need to send when receiving http 1.1 requests.
   */
  size_t continue_message_write_offset;

  /**
   * Length of the foreign address.
   */
  socklen_t addr_len;

  /**
   * Last time this connection had any activity
   * (reading or writing).
   */
  time_t last_activity;

  /**
   * Did we ever call the "default_handler" on this connection?
   * (this flag will determine if we call the 'notify_completed'
   * handler when the connection closes down).
   */
  int client_aware;

  /**
   * Socket for this connection.  Set to -1 if
   * this connection has died (daemon should clean
   * up in that case).
   */
  int socket_fd;

  /**
   * Has this socket been closed for reading (i.e.
   * other side closed the connection)?  If so,
   * we must completely close the connection once
   * we are done sending our response (and stop
   * trying to read from this socket).
   */
  int read_closed;

  /**
   * State in the FSM for this connection.
   */
  enum MHD_CONNECTION_STATE state;

  /**
   * HTTP response code.  Only valid if response object
   * is already set.
   */
  unsigned int responseCode;

  /**
   * Set to MHD_YES if the response's content reader
   * callback failed to provide data the last time
   * we tried to read from it.  In that case, the
   * write socket should be marked as unready until
   * the CRC call succeeds.
   */
  int response_unready;

  /**
   * Are we sending with chunked encoding?
   */
  int have_chunked_response;

  /**
   * Are we receiving with chunked encoding?  This will be set to
   * MHD_YES after we parse the headers and are processing the body
   * with chunks.  After we are done with the body and we are
   * processing the footers; once the footers are also done, this will
   * be set to MHD_NO again (before the final call to the handler).
   */
  int have_chunked_upload;

  /**
   * If we are receiving with chunked encoding, where are we right
   * now?  Set to 0 if we are waiting to receive the chunk size;
   * otherwise, this is the size of the current chunk.  A value of
   * zero is also used when we're at the end of the chunks.
   */
  unsigned int current_chunk_size;

  /**
   * If we are receiving with chunked encoding, where are we currently
   * with respect to the current chunk (at what offset / position)?
   */
  unsigned int current_chunk_offset;

  /**
   * Handler used for processing read connection operations
   */
  int (*read_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing write connection operations
   */
  int (*write_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing idle connection operations
   */
  int (*idle_handler) (struct MHD_Connection * connection);

  /**
   * Function used for reading HTTP request stream.
   */
  ReceiveCallback recv_cls;

  /**
   * Function used for writing HTTP response stream.
   */
  TransmitCallback send_cls;

#if HTTPS_SUPPORT
  /**
   * State required for HTTPS/SSL/TLS support.
   */
  gnutls_session_t tls_session;

  /**
   * Memory location to return for protocol session info.
   */
  int protocol;

  /**
   * Memory location to return for protocol session info.
   */
  int cipher;
#endif
};

typedef void * (*LogCallback)(void * cls, const char * uri);

/**
 * State kept for each MHD daemon.
 */
struct MHD_Daemon
{

  /**
   * Callback function for all requests.
   */
  MHD_AccessHandlerCallback default_handler;

  /**
   * Closure argument to default_handler.
   */
  void *default_handler_cls;

  /**
   * Linked list of our current connections.
   */
  struct MHD_Connection *connections;

  /**
   * Function to call to check if we should
   * accept or reject an incoming request.
   * May be NULL.
   */
  MHD_AcceptPolicyCallback apc;

  /**
   * Closure argument to apc.
   */
  void *apc_cls;

  /**
   * Function to call when we are done processing
   * a particular request.  May be NULL.
   */
  MHD_RequestCompletedCallback notify_completed;

  /**
   * Closure argument to notify_completed.
   */
  void *notify_completed_cls;

  /**
   * Function to call with the full URI at the
   * beginning of request processing.  May be NULL.
   * <p>
   * Returns the initial pointer to internal state
   * kept by the client for the request.
   */
  LogCallback uri_log_callback;

  /**
   * Closure argument to uri_log_callback.
   */
  void *uri_log_callback_cls;

#if HAVE_MESSAGES
  /**
   * Function for logging error messages (if we
   * support error reporting).
   */
  void (*custom_error_log) (void *cls, const char *fmt, va_list va);

  /**
   * Closure argument to custom_error_log.
   */
  void *custom_error_log_cls;
#endif

  /**
   * PID of the select thread (if we have internal select)
   */
  pthread_t pid;

  /**
   * Listen socket.
   */
  int socket_fd;

  /**
   * Are we shutting down?
   */
  int shutdown;

  /**
   * Size of the per-connection memory pools.
   */
  size_t pool_size;

  /**
   * Limit on the number of parallel connections.
   */
  unsigned int max_connections;

  /**
   * After how many seconds of inactivity should
   * connections time out?  Zero for no timeout.
   */
  unsigned int connection_timeout;

  /**
   * Maximum number of connections per IP, or 0 for
   * unlimited.
   */
  unsigned int per_ip_connection_limit;

  /**
   * Table storing number of connections per IP
   */
  void *per_ip_connection_count;

  /**
   * Mutex for per-IP connection counts
   */
  pthread_mutex_t per_ip_connection_mutex;

  /**
   * Daemon's options.
   */
  enum MHD_OPTION options;

  /**
   * Listen port.
   */
  unsigned short port;

#if HTTPS_SUPPORT
  /**
   * Desired cipher algorithms.
   */
  gnutls_priority_t priority_cache;

  /**
   * What kind of credentials are we offering
   * for SSL/TLS?
   */
  gnutls_credentials_type_t cred_type;

  /**
   * Server x509 credentials
   */
  gnutls_certificate_credentials_t x509_cred;

  /**
   * Diffie-Hellman parameters
   */
  gnutls_dh_params_t dh_params;

  /**
   * Pointer to our SSL/TLS key (in ASCII) in memory.
   */
  const char *https_mem_key;

  /**
   * Pointer to our SSL/TLS certificate (in ASCII) in memory.
   */
  const char *https_mem_cert;

#endif

  /**
   * Pointer to master daemon (NULL if this is the master)
   */
  struct MHD_Daemon *master;

  /**
   * Worker daemons (one per thread)
   */
  struct MHD_Daemon *worker_pool;

  /**
   * Number of worker daemons
   */
  unsigned int worker_pool_size;
};


#if EXTRA_CHECKS
#define EXTRA_CHECK(a) if (!(a)) abort();
#else
#define EXTRA_CHECK(a)
#endif



#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.c.



































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
/*
     This file is part of libmicrohttpd
     (C) 2007, 2009, 2010 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file memorypool.c
 * @brief memory pool
 * @author Christian Grothoff
 */
#include "memorypool.h"

/* define MAP_ANONYMOUS for Mac OS X */
#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
#define MAP_ANONYMOUS MAP_ANON
#endif
#ifndef MAP_FAILED
#define MAP_FAILED ((void*)-1)
#endif

/**
 * Align to 2x word size (as GNU libc does).
 */
#define ALIGN_SIZE (2 * sizeof(void*))

/**
 * Round up 'n' to a multiple of ALIGN_SIZE.
 */
#define ROUND_TO_ALIGN(n) ((n+(ALIGN_SIZE-1)) & (~(ALIGN_SIZE-1)))

struct MemoryPool
{

  /**
   * Pointer to the pool's memory
   */
  char *memory;

  /**
   * Size of the pool.
   */
  size_t size;

  /**
   * Offset of the first unallocated byte.
   */
  size_t pos;

  /**
   * Offset of the last unallocated byte.
   */
  size_t end;

  /**
   * MHD_NO if pool was malloc'ed, MHD_YES if mmapped.
   */
  int is_mmap;
};

/**
 * Create a memory pool.
 *
 * @param max maximum size of the pool
 */
struct MemoryPool *
MHD_pool_create (size_t max)
{
  struct MemoryPool *pool;

  pool = malloc (sizeof (struct MemoryPool));
  if (pool == NULL)
    return NULL;
#ifdef MAP_ANONYMOUS
  pool->memory = MMAP (NULL, max, PROT_READ | PROT_WRITE,
                       MAP_ANONYMOUS, -1, 0);
#else
  pool->memory = MAP_FAILED;
#endif
  if ((pool->memory == MAP_FAILED) || (pool->memory == NULL))
    {
      pool->memory = malloc (max);
      if (pool->memory == NULL)
        {
          free (pool);
          return NULL;
        }
      pool->is_mmap = MHD_NO;
    }
  else
    {
      pool->is_mmap = MHD_YES;
    }
  pool->pos = 0;
  pool->end = max;
  pool->size = max;
  return pool;
}

/**
 * Destroy a memory pool.
 */
void
MHD_pool_destroy (struct MemoryPool *pool)
{
  if (pool == NULL)
    return;
  if (pool->is_mmap == MHD_NO)
    free (pool->memory);
  else
    MUNMAP (pool->memory, pool->size);
  free (pool);
}

/**
 * Allocate size bytes from the pool.
 * @return NULL if the pool cannot support size more
 *         bytes
 */
void *
MHD_pool_allocate (struct MemoryPool *pool, 
		   size_t size, int from_end)
{
  void *ret;

  size = ROUND_TO_ALIGN (size);
  if ((pool->pos + size > pool->end) || (pool->pos + size < pool->pos))
    return NULL;
  if (from_end == MHD_YES)
    {
      ret = &pool->memory[pool->end - size];
      pool->end -= size;
    }
  else
    {
      ret = &pool->memory[pool->pos];
      pool->pos += size;
    }
  return ret;
}

/**
 * Reallocate a block of memory obtained from the pool.
 * This is particularly efficient when growing or
 * shrinking the block that was last (re)allocated.
 * If the given block is not the most recenlty
 * (re)allocated block, the memory of the previous
 * allocation may be leaked until the pool is
 * destroyed (and copying the data maybe required).
 *
 * @param old the existing block
 * @param old_size the size of the existing block
 * @param new_size the new size of the block
 * @return new address of the block, or
 *         NULL if the pool cannot support new_size
 *         bytes (old continues to be valid for old_size)
 */
void *
MHD_pool_reallocate (struct MemoryPool *pool,
                     void *old, 
		     size_t old_size, 
		     size_t new_size)
{
  void *ret;

  new_size = ROUND_TO_ALIGN (new_size);
  if ((pool->end < old_size) || (pool->end < new_size))
    return NULL;                /* unsatisfiable or bogus request */

  if ((pool->pos >= old_size) && (&pool->memory[pool->pos - old_size] == old))
    {
      /* was the previous allocation - optimize! */
      if (pool->pos + new_size - old_size <= pool->end)
        {
          /* fits */
          pool->pos += new_size - old_size;
          if (new_size < old_size)      /* shrinking - zero again! */
            memset (&pool->memory[pool->pos], 0, old_size - new_size);
          return old;
        }
      /* does not fit */
      return NULL;
    }
  if (new_size <= old_size)
    return old;                 /* cannot shrink, no need to move */
  if ((pool->pos + new_size >= pool->pos) &&
      (pool->pos + new_size <= pool->end))
    {
      /* fits */
      ret = &pool->memory[pool->pos];
      memcpy (ret, old, old_size);
      pool->pos += new_size;
      return ret;
    }
  /* does not fit */
  return NULL;
}

/**
 * Clear all entries from the memory pool except
 * for "keep" of the given "size".
 *
 * @param keep pointer to the entry to keep (maybe NULL)
 * @param size how many bytes need to be kept at this address
 * @return addr new address of "keep" (if it had to change)
 */
void *
MHD_pool_reset (struct MemoryPool *pool, 
		void *keep, 
		size_t size)
{
  size = ROUND_TO_ALIGN (size);
  if (keep != NULL)
    {
      if (keep != pool->memory)
        {
          memmove (pool->memory, keep, size);
          keep = pool->memory;
        }
      pool->pos = size;
    }
  pool->end = pool->size;
  return keep;
}



/* end of memorypool.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.h.



































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
     This file is part of libmicrohttpd
     (C) 2007, 2009 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file memorypool.h
 * @brief memory pool; mostly used for efficient (de)allocation
 *        for each connection and bounding memory use for each
 *        request
 * @author Christian Grothoff
 */

#ifndef MEMORYPOOL_H
#define MEMORYPOOL_H

#include "internal.h"

/**
 * Opaque handle for a memory pool.
 * Pools are not reentrant and must not be used
 * by multiple threads.
 */
struct MemoryPool;

/**
 * Create a memory pool.
 *
 * @param max maximum size of the pool
 */
struct MemoryPool *MHD_pool_create (size_t max);

/**
 * Destroy a memory pool.
 */
void MHD_pool_destroy (struct MemoryPool *pool);

/**
 * Allocate size bytes from the pool.
 *
 * @param from_end allocate from end of pool (set to MHD_YES);
 *        use this for small, persistent allocations that
 *        will never be reallocated
 * @return NULL if the pool cannot support size more
 *         bytes
 */
void *MHD_pool_allocate (struct MemoryPool *pool,
                         size_t size, int from_end);

/**
 * Reallocate a block of memory obtained from the pool.
 * This is particularly efficient when growing or
 * shrinking the block that was last (re)allocated.
 * If the given block is not the most recenlty
 * (re)allocated block, the memory of the previous
 * allocation may be leaked until the pool is
 * destroyed (and copying the data maybe required).
 *
 * @param old the existing block
 * @param old_size the size of the existing block
 * @param new_size the new size of the block
 * @return new address of the block, or
 *         NULL if the pool cannot support new_size
 *         bytes (old continues to be valid for old_size)
 */
void *MHD_pool_reallocate (struct MemoryPool *pool,
                           void *old,
                           size_t old_size, 
			   size_t new_size);

/**
 * Clear all entries from the memory pool except
 * for "keep" of the given "size".
 *
 * @param keep pointer to the entry to keep (maybe NULL)
 * @param size how many bytes need to be kept at this address
 * @return addr new address of "keep" (if it had to change)
 */
void *MHD_pool_reset (struct MemoryPool *pool,
		      void *keep, 
		      size_t size);

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor.c.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
/*
     This file is part of libmicrohttpd
     (C) 2007, 2009 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file postprocessor.c
 * @brief  Methods for parsing POST data
 * @author Christian Grothoff
 */

#include "internal.h"

/**
 * Size of on-stack buffer that we use for un-escaping of the value.
 */
#define XBUF_SIZE 1024

/**
 * States in the PP parser's state machine.
 */
enum PP_State
{
  /* general states */
  PP_Error,
  PP_Done,
  PP_Init,

  /* url encoding-states */
  PP_ProcessValue,
  PP_ExpectNewLine,

  /* post encoding-states  */
  PP_ProcessEntryHeaders,
  PP_PerformCheckMultipart,
  PP_ProcessValueToBoundary,
  PP_PerformCleanup,

  /* nested post-encoding states */
  PP_Nested_Init,
  PP_Nested_PerformMarking,
  PP_Nested_ProcessEntryHeaders,
  PP_Nested_ProcessValueToBoundary,
  PP_Nested_PerformCleanup,

};

enum RN_State
{
  /**
   * No RN-preprocessing in this state.
   */
  RN_Inactive = 0,

  /**
   * If the next character is '\n', skip it.  Otherwise,
   * just go inactive.
   */
  RN_OptN = 1,

  /**
   * Expect '\r\n' (and only '\r\n').  As always, we also
   * expect only '\r' or only '\n'.
   */
  RN_Full = 2,

  /**
   * Expect either '\r\n' or '--\r\n'.  If '--\r\n', transition into dash-state
   * for the main state machine
   */
  RN_Dash = 3,

  /**
   * Got a single dash, expect second dash.
   */
  RN_Dash2 = 4,
};

/**
 * Bits for the globally known fields that
 * should not be deleted when we exit the
 * nested state.
 */
enum NE_State
{
  NE_none = 0,
  NE_content_name = 1,
  NE_content_type = 2,
  NE_content_filename = 4,
  NE_content_transfer_encoding = 8,
};

/**
 * Internal state of the post-processor.  Note that the fields
 * are sorted by type to enable optimal packing by the compiler.
 */
struct MHD_PostProcessor
{

  /**
   * The connection for which we are doing
   * POST processing.
   */
  struct MHD_Connection *connection;

  /**
   * Function to call with POST data.
   */
  MHD_PostDataIterator ikvi;

  /**
   * Extra argument to ikvi.
   */
  void *cls;

  /**
   * Encoding as given by the headers of the
   * connection.
   */
  const char *encoding;

  /**
   * Primary boundary (points into encoding string)
   */
  const char *boundary;

  /**
   * Nested boundary (if we have multipart/mixed encoding).
   */
  char *nested_boundary;

  /**
   * Pointer to the name given in disposition.
   */
  char *content_name;

  /**
   * Pointer to the (current) content type.
   */
  char *content_type;

  /**
   * Pointer to the (current) filename.
   */
  char *content_filename;

  /**
   * Pointer to the (current) encoding.
   */
  char *content_transfer_encoding;

  /**
   * Unprocessed value bytes due to escape
   * sequences (URL-encoding only).
   */
  char xbuf[8];

  /**
   * Size of our buffer for the key.
   */
  size_t buffer_size;

  /**
   * Current position in the key buffer.
   */
  size_t buffer_pos;

  /**
   * Current position in xbuf.
   */
  size_t xbuf_pos;

  /**
   * Current offset in the value being processed.
   */
  uint64_t value_offset;

  /**
   * strlen(boundary) -- if boundary != NULL.
   */
  size_t blen;

  /**
   * strlen(nested_boundary) -- if nested_boundary != NULL.
   */
  size_t nlen;

  /**
   * State of the parser.
   */
  enum PP_State state;

  /**
   * Side-state-machine: skip '\r\n' (or just '\n').
   * Set to 0 if we are not in skip mode.  Set to 2
   * if a '\r\n' is expected, set to 1 if a '\n' should
   * be skipped if it is the next character.
   */
  enum RN_State skip_rn;

  /**
   * If we are in skip_rn with "dash" mode and
   * do find 2 dashes, what state do we go into?
   */
  enum PP_State dash_state;

  /**
   * Which headers are global? (used to tell which
   * headers were only valid for the nested multipart).
   */
  enum NE_State have;

};


/**
 * Create a PostProcessor.
 *
 * A PostProcessor can be used to (incrementally)
 * parse the data portion of a POST request.
 *
 * @param connection the connection on which the POST is
 *        happening (used to determine the POST format)
 * @param buffer_size maximum number of bytes to use for
 *        internal buffering (used only for the parsing,
 *        specifically the parsing of the keys).  A
 *        tiny value (256-1024) should be sufficient.
 *        Do NOT use 0.
 * @param ikvi iterator to be called with the parsed data
 * @param cls first argument to ikvi
 * @return NULL on error (out of memory, unsupported encoding),
 *         otherwise a PP handle
 */
struct MHD_PostProcessor *
MHD_create_post_processor (struct MHD_Connection *connection,
                           size_t buffer_size,
                           MHD_PostDataIterator ikvi, void *cls)
{
  struct MHD_PostProcessor *ret;
  const char *encoding;
  const char *boundary;
  size_t blen;

  if ((buffer_size < 256) || (connection == NULL) || (ikvi == NULL))
    mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);
  encoding = MHD_lookup_connection_value (connection,
                                          MHD_HEADER_KIND,
                                          MHD_HTTP_HEADER_CONTENT_TYPE);
  if (encoding == NULL)
    return NULL;
  boundary = NULL;
  if (0 != strncasecmp (MHD_HTTP_POST_ENCODING_FORM_URLENCODED, encoding,
                        strlen (MHD_HTTP_POST_ENCODING_FORM_URLENCODED)))
    {
      if (0 !=
          strncasecmp (MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA, encoding,
                       strlen (MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA)))
        return NULL;
      boundary =
        &encoding[strlen (MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA)];
      /* Q: should this be "strcasestr"? */
      boundary = strstr (boundary, "boundary=");
      if (NULL == boundary)
	return NULL; /* failed to determine boundary */
      boundary += strlen ("boundary=");
      blen = strlen (boundary);
      if ((blen == 0) || (blen * 2 + 2 > buffer_size))
        return NULL;            /* (will be) out of memory or invalid boundary */
    }
  else
    blen = 0;
  ret = malloc (sizeof (struct MHD_PostProcessor) + buffer_size + 1);
  if (ret == NULL)
    return NULL;
  memset (ret, 0, sizeof (struct MHD_PostProcessor) + buffer_size + 1);
  ret->connection = connection;
  ret->ikvi = ikvi;
  ret->cls = cls;
  ret->encoding = encoding;
  ret->buffer_size = buffer_size;
  ret->state = PP_Init;
  ret->blen = blen;
  ret->boundary = boundary;
  ret->skip_rn = RN_Inactive;
  return ret;
}

/**
 * Process url-encoded POST data.
 */
static int
post_process_urlencoded (struct MHD_PostProcessor *pp,
                         const char *post_data,
			 size_t post_data_len)
{
  size_t equals;
  size_t amper;
  size_t poff;
  size_t xoff;
  size_t delta;
  int end_of_value_found;
  char *buf;
  char xbuf[XBUF_SIZE + 1];

  buf = (char *) &pp[1];
  poff = 0;
  while (poff < post_data_len)
    {
      switch (pp->state)
        {
        case PP_Error:
          return MHD_NO;
        case PP_Done:
          /* did not expect to receive more data */
          pp->state = PP_Error;
          return MHD_NO;
        case PP_Init:
          equals = 0;
          while ((equals + poff < post_data_len) &&
                 (post_data[equals + poff] != '='))
            equals++;
          if (equals + pp->buffer_pos > pp->buffer_size)
            {
              pp->state = PP_Error;     /* out of memory */
              return MHD_NO;
            }
          memcpy (&buf[pp->buffer_pos], &post_data[poff], equals);
          pp->buffer_pos += equals;
          if (equals + poff == post_data_len)
            return MHD_YES;     /* no '=' yet */
          buf[pp->buffer_pos] = '\0';   /* 0-terminate key */
          pp->buffer_pos = 0;   /* reset for next key */
          MHD_http_unescape (buf);
          poff += equals + 1;
          pp->state = PP_ProcessValue;
          pp->value_offset = 0;
          break;
        case PP_ProcessValue:
          /* obtain rest of value from previous iteration */
          memcpy (xbuf, pp->xbuf, pp->xbuf_pos);
          xoff = pp->xbuf_pos;
          pp->xbuf_pos = 0;

          /* find last position in input buffer that is part of the value */
          amper = 0;
          while ((amper + poff < post_data_len) &&
                 (amper < XBUF_SIZE) &&
                 (post_data[amper + poff] != '&') &&
                 (post_data[amper + poff] != '\n') &&
                 (post_data[amper + poff] != '\r'))
            amper++;
          end_of_value_found = ((amper + poff < post_data_len) &&
                                ((post_data[amper + poff] == '&') ||
                                 (post_data[amper + poff] == '\n') ||
                                 (post_data[amper + poff] == '\r')));
          /* compute delta, the maximum number of bytes that we will be able to
             process right now (either amper-limited of xbuf-size limited) */
          delta = amper;
          if (delta > XBUF_SIZE - xoff)
            delta = XBUF_SIZE - xoff;

          /* move input into processing buffer */
          memcpy (&xbuf[xoff], &post_data[poff], delta);
          xoff += delta;
          poff += delta;

          /* find if escape sequence is at the end of the processing buffer;
             if so, exclude those from processing (reduce delta to point at
             end of processed region) */
          delta = xoff;
          if ((delta > 0) && (xbuf[delta - 1] == '%'))
            delta--;
          else if ((delta > 1) && (xbuf[delta - 2] == '%'))
            delta -= 2;

          /* if we have an incomplete escape sequence, save it to
             pp->xbuf for later */
          if (delta < xoff)
            {
              memcpy (pp->xbuf, &xbuf[delta], xoff - delta);
              pp->xbuf_pos = xoff - delta;
              xoff = delta;
            }

          /* If we have nothing to do (delta == 0) and
             not just because the value is empty (are
             waiting for more data), go for next iteration */
          if ((xoff == 0) && (poff == post_data_len))
            continue;

          /* unescape */
          xbuf[xoff] = '\0';    /* 0-terminate in preparation */
          xoff = MHD_http_unescape (xbuf);
          /* finally: call application! */
          if (MHD_NO == pp->ikvi (pp->cls, MHD_POSTDATA_KIND, (const char *) &pp[1],    /* key */
                                  NULL, NULL, NULL, xbuf, pp->value_offset,
                                  xoff))
            {
              pp->state = PP_Error;
              return MHD_NO;
            }
          pp->value_offset += xoff;

          /* are we done with the value? */
          if (end_of_value_found)
            {
              /* we found the end of the value! */
              if ((post_data[poff] == '\n') || (post_data[poff] == '\r'))
                {
                  pp->state = PP_ExpectNewLine;
                }
              else
                {
                  poff++;       /* skip '&' */
                  pp->state = PP_Init;
                }
            }
          break;
        case PP_ExpectNewLine:
          if ((post_data[poff] == '\n') || (post_data[poff] == '\r'))
            {
              poff++;
              /* we are done, report error if we receive any more... */
              pp->state = PP_Done;
              return MHD_YES;
            }
          return MHD_NO;
        default:
          mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);          /* should never happen! */
        }
    }
  return MHD_YES;
}

/**
 * If the given line matches the prefix, strdup the
 * rest of the line into the suffix ptr.
 *
 * @return MHD_YES if there was a match, MHD_NO if not
 */
static int
try_match_header (const char *prefix, char *line, char **suffix)
{
  if (NULL != *suffix)
    return MHD_NO;
  while (*line != 0)
    {
      if (0 == strncasecmp (prefix, line, strlen (prefix)))
        {
          *suffix = strdup (&line[strlen (prefix)]);
          return MHD_YES;
        }
      ++line;
    }
  return MHD_NO;
}

static int
find_boundary (struct MHD_PostProcessor *pp,
               const char *boundary,
               size_t blen,
               size_t *ioffptr,
               enum PP_State next_state, enum PP_State next_dash_state)
{
  char *buf = (char *) &pp[1];

  if (pp->buffer_pos < 2 + blen)
    {
      if (pp->buffer_pos == pp->buffer_size)
        pp->state = PP_Error;   /* out of memory */
      return MHD_NO;            /* not enough data */
    }
  if ((0 != memcmp ("--", buf, 2)) || (0 != memcmp (&buf[2], boundary, blen)))
    {
      pp->state = PP_Error;
      return MHD_NO;            /* expected boundary */
    }
  /* remove boundary from buffer */
  (*ioffptr) += 2 + blen;
  /* next: start with headers */
  pp->skip_rn = RN_Dash;
  pp->state = next_state;
  pp->dash_state = next_dash_state;
  return MHD_YES;
}

/**
 * In buf, there maybe an expression
 * '$key="$value"'.  If that is the case,
 * copy a copy of $value to destination.
 *
 * If destination is already non-NULL,
 * do nothing.
 */
static void
try_get_value (const char *buf, const char *key, char **destination)
{
  const char *spos;
  const char *bpos;
  const char *endv;
  size_t klen;
  size_t vlen;

  if (NULL != *destination)
    return;
  bpos = buf;
  klen = strlen (key);
  while (NULL != (spos = strstr (bpos, key)))
    {
      if ((spos[klen] != '=') || ((spos != buf) && (spos[-1] != ' ')))
        {
          /* no match */
          bpos = spos + 1;
          continue;
        }
      if (spos[klen + 1] != '"')
        return;                 /* not quoted */
      if (NULL == (endv = strstr (&spos[klen + 2], "\"")))
        return;                 /* no end-quote */
      vlen = endv - spos - klen - 1;
      *destination = malloc (vlen);
      if (NULL == *destination)
        return;                 /* out of memory */
      (*destination)[vlen - 1] = '\0';
      memcpy (*destination, &spos[klen + 2], vlen - 1);
      return;                   /* success */
    }
}

/**
 * Go over the headers of the part and update
 * the fields in "pp" according to what we find.
 * If we are at the end of the headers (as indicated
 * by an empty line), transition into next_state.
 *
 * @param ioffptr set to how many bytes have been
 *                processed
 * @return MHD_YES if we can continue processing,
 *         MHD_NO on error or if we do not have
 *                enough data yet
 */
static int
process_multipart_headers (struct MHD_PostProcessor *pp,
                           size_t *ioffptr, enum PP_State next_state)
{
  char *buf = (char *) &pp[1];
  size_t newline;

  newline = 0;
  while ((newline < pp->buffer_pos) &&
         (buf[newline] != '\r') && (buf[newline] != '\n'))
    newline++;
  if (newline == pp->buffer_size)
    {
      pp->state = PP_Error;
      return MHD_NO;            /* out of memory */
    }
  if (newline == pp->buffer_pos)
    return MHD_NO;              /* will need more data */
  if (newline == 0)
    {
      /* empty line - end of headers */
      pp->skip_rn = RN_Full;
      pp->state = next_state;
      return MHD_YES;
    }
  /* got an actual header */
  if (buf[newline] == '\r')
    pp->skip_rn = RN_OptN;
  buf[newline] = '\0';
  if (0 == strncasecmp ("Content-disposition: ",
                        buf, strlen ("Content-disposition: ")))
    {
      try_get_value (&buf[strlen ("Content-disposition: ")],
                     "name", &pp->content_name);
      try_get_value (&buf[strlen ("Content-disposition: ")],
                     "filename", &pp->content_filename);
    }
  else
    {
      try_match_header ("Content-type: ", buf, &pp->content_type);
      try_match_header ("Content-Transfer-Encoding: ",
                        buf, &pp->content_transfer_encoding);
    }
  (*ioffptr) += newline + 1;
  return MHD_YES;
}

/**
 * We have the value until we hit the given boundary;
 * process accordingly.
 *
 * @param boundary the boundary to look for
 * @param blen strlen(boundary)
 * @param next_state what state to go into after the
 *        boundary was found
 * @param next_dash_state state to go into if the next
 *        boundary ends with "--"
 * @return MHD_YES if we can continue processing,
 *         MHD_NO on error or if we do not have
 *                enough data yet
 */
static int
process_value_to_boundary (struct MHD_PostProcessor *pp,
                           size_t *ioffptr,
                           const char *boundary,
                           size_t blen,
                           enum PP_State next_state,
                           enum PP_State next_dash_state)
{
  char *buf = (char *) &pp[1];
  size_t newline;

  /* all data in buf until the boundary
     (\r\n--+boundary) is part of the value */
  newline = 0;
  while (1)
    {
      while ((newline + 4 < pp->buffer_pos) &&
             (0 != memcmp ("\r\n--", &buf[newline], 4)))
        newline++;
      if (newline + pp->blen + 4 <= pp->buffer_pos)
        {
          /* can check boundary */
          if (0 != memcmp (&buf[newline + 4], boundary, pp->blen))
            {
              /* no boundary, "\r\n--" is part of content, skip */
              newline += 4;
              continue;
            }
          else
            {
              /* boundary found, process until newline then
                 skip boundary and go back to init */
              pp->skip_rn = RN_Dash;
              pp->state = next_state;
              pp->dash_state = next_dash_state;
              (*ioffptr) += pp->blen + 4;       /* skip boundary as well */
              break;
            }
        }
      else
        {
          /* cannot check for boundary, process content that
             we have and check again later; except, if we have
             no content, abort (out of memory) */
          if ((newline == 0) && (pp->buffer_pos == pp->buffer_size))
            {
              pp->state = PP_Error;
              return MHD_NO;
            }
          break;
        }
    }
  /* newline is either at beginning of boundary or
     at least at the last character that we are sure
     is not part of the boundary */
  if (MHD_NO == pp->ikvi (pp->cls,
                          MHD_POSTDATA_KIND,
                          pp->content_name,
                          pp->content_filename,
                          pp->content_type,
                          pp->content_transfer_encoding,
                          buf, pp->value_offset, newline))
    {
      pp->state = PP_Error;
      return MHD_NO;
    }
  pp->value_offset += newline;
  (*ioffptr) += newline;
  return MHD_YES;
}

static void
free_unmarked (struct MHD_PostProcessor *pp)
{
  if ((pp->content_name != NULL) && (0 == (pp->have & NE_content_name)))
    {
      free (pp->content_name);
      pp->content_name = NULL;
    }
  if ((pp->content_type != NULL) && (0 == (pp->have & NE_content_type)))
    {
      free (pp->content_type);
      pp->content_type = NULL;
    }
  if ((pp->content_filename != NULL) &&
      (0 == (pp->have & NE_content_filename)))
    {
      free (pp->content_filename);
      pp->content_filename = NULL;
    }
  if ((pp->content_transfer_encoding != NULL) &&
      (0 == (pp->have & NE_content_transfer_encoding)))
    {
      free (pp->content_transfer_encoding);
      pp->content_transfer_encoding = NULL;
    }
}

/**
 * Decode multipart POST data.
 */
static int
post_process_multipart (struct MHD_PostProcessor *pp,
                        const char *post_data,
			size_t post_data_len)
{
  char *buf;
  size_t max;
  size_t ioff;
  size_t poff;
  int state_changed;

  buf = (char *) &pp[1];
  ioff = 0;
  poff = 0;
  state_changed = 1;
  while ((poff < post_data_len) ||
         ((pp->buffer_pos > 0) && (state_changed != 0)))
    {
      /* first, move as much input data
         as possible to our internal buffer */
      max = pp->buffer_size - pp->buffer_pos;
      if (max > post_data_len - poff)
        max = post_data_len - poff;
      memcpy (&buf[pp->buffer_pos], &post_data[poff], max);
      poff += max;
      pp->buffer_pos += max;
      if ((max == 0) && (state_changed == 0) && (poff < post_data_len))
        {
          pp->state = PP_Error;
          return MHD_NO;        /* out of memory */
        }
      state_changed = 0;

      /* first state machine for '\r'-'\n' and '--' handling */
      switch (pp->skip_rn)
        {
        case RN_Inactive:
          break;
        case RN_OptN:
          if (buf[0] == '\n')
            {
              ioff++;
              pp->skip_rn = RN_Inactive;
              goto AGAIN;
            }
        case RN_Dash:
          if (buf[0] == '-')
            {
              ioff++;
              pp->skip_rn = RN_Dash2;
              goto AGAIN;
            }
          pp->skip_rn = RN_Full;
          /* fall-through! */
        case RN_Full:
          if (buf[0] == '\r')
            {
              if ((pp->buffer_pos > 1) && (buf[1] == '\n'))
                {
                  pp->skip_rn = RN_Inactive;
                  ioff += 2;
                }
              else
                {
                  pp->skip_rn = RN_OptN;
                  ioff++;
                }
              goto AGAIN;
            }
          if (buf[0] == '\n')
            {
              ioff++;
              pp->skip_rn = RN_Inactive;
              goto AGAIN;
            }
          pp->skip_rn = RN_Inactive;
          pp->state = PP_Error;
          return MHD_NO;        /* no '\r\n' */
        case RN_Dash2:
          if (buf[0] == '-')
            {
              ioff++;
              pp->skip_rn = RN_Full;
              pp->state = pp->dash_state;
              goto AGAIN;
            }
          pp->state = PP_Error;
          break;
        }

      /* main state engine */
      switch (pp->state)
        {
        case PP_Error:
          return MHD_NO;
        case PP_Done:
          /* did not expect to receive more data */
          pp->state = PP_Error;
          return MHD_NO;
        case PP_Init:
          if (MHD_NO == find_boundary (pp,
                                       pp->boundary,
                                       pp->blen,
                                       &ioff,
                                       PP_ProcessEntryHeaders, PP_Done))
            {
              if (pp->state == PP_Error)
                return MHD_NO;
              goto END;
            }
          break;
        case PP_ProcessEntryHeaders:
          if (MHD_NO ==
              process_multipart_headers (pp, &ioff, PP_PerformCheckMultipart))
            {
              if (pp->state == PP_Error)
                return MHD_NO;
              else
                goto END;
            }
          state_changed = 1;
          break;
        case PP_PerformCheckMultipart:
          if ((pp->content_type != NULL) &&
              (0 == strncasecmp (pp->content_type,
                                 "multipart/mixed",
                                 strlen ("multipart/mixed"))))
            {
              pp->nested_boundary = strstr (pp->content_type, "boundary=");
              if (pp->nested_boundary == NULL)
                {
                  pp->state = PP_Error;
                  return MHD_NO;
                }
              pp->nested_boundary =
                strdup (&pp->nested_boundary[strlen ("boundary=")]);
              if (pp->nested_boundary == NULL)
                {
                  /* out of memory */
                  pp->state = PP_Error;
                  return MHD_NO;
                }
              /* free old content type, we will need that field
                 for the content type of the nested elements */
              free (pp->content_type);
              pp->content_type = NULL;
              pp->nlen = strlen (pp->nested_boundary);
              pp->state = PP_Nested_Init;
              state_changed = 1;
              break;
            }
          pp->state = PP_ProcessValueToBoundary;
          pp->value_offset = 0;
          state_changed = 1;
          break;
        case PP_ProcessValueToBoundary:
          if (MHD_NO == process_value_to_boundary (pp,
                                                   &ioff,
                                                   pp->boundary,
                                                   pp->blen,
                                                   PP_PerformCleanup,
                                                   PP_Done))
            {
              if (pp->state == PP_Error)
                return MHD_NO;
              break;
            }
          break;
        case PP_PerformCleanup:
          /* clean up state of one multipart form-data element! */
          pp->have = NE_none;
          free_unmarked (pp);
          if (pp->nested_boundary != NULL)
            {
              free (pp->nested_boundary);
              pp->nested_boundary = NULL;
            }
          pp->state = PP_ProcessEntryHeaders;
          state_changed = 1;
          break;
        case PP_Nested_Init:
          if (pp->nested_boundary == NULL)
            {
              pp->state = PP_Error;
              return MHD_NO;
            }
          if (MHD_NO == find_boundary (pp,
                                       pp->nested_boundary,
                                       pp->nlen,
                                       &ioff,
                                       PP_Nested_PerformMarking,
                                       PP_Init /* or PP_Error? */ ))
            {
              if (pp->state == PP_Error)
                return MHD_NO;
              goto END;
            }
          break;
        case PP_Nested_PerformMarking:
          /* remember what headers were given
             globally */
          pp->have = NE_none;
          if (pp->content_name != NULL)
            pp->have |= NE_content_name;
          if (pp->content_type != NULL)
            pp->have |= NE_content_type;
          if (pp->content_filename != NULL)
            pp->have |= NE_content_filename;
          if (pp->content_transfer_encoding != NULL)
            pp->have |= NE_content_transfer_encoding;
          pp->state = PP_Nested_ProcessEntryHeaders;
          state_changed = 1;
          break;
        case PP_Nested_ProcessEntryHeaders:
          pp->value_offset = 0;
          if (MHD_NO ==
              process_multipart_headers (pp, &ioff,
                                         PP_Nested_ProcessValueToBoundary))
            {
              if (pp->state == PP_Error)
                return MHD_NO;
              else
                goto END;
            }
          state_changed = 1;
          break;
        case PP_Nested_ProcessValueToBoundary:
          if (MHD_NO == process_value_to_boundary (pp,
                                                   &ioff,
                                                   pp->nested_boundary,
                                                   pp->nlen,
                                                   PP_Nested_PerformCleanup,
                                                   PP_Init))
            {
              if (pp->state == PP_Error)
                return MHD_NO;
              break;
            }
          break;
        case PP_Nested_PerformCleanup:
          free_unmarked (pp);
          pp->state = PP_Nested_ProcessEntryHeaders;
          state_changed = 1;
          break;
        default:
          mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL);          /* should never happen! */
        }
    AGAIN:
      if (ioff > 0)
        {
          memmove (buf, &buf[ioff], pp->buffer_pos - ioff);
          pp->buffer_pos -= ioff;
          ioff = 0;
          state_changed = 1;
        }
    }
END:
  if (ioff != 0)
    {
      memmove (buf, &buf[ioff], pp->buffer_pos - ioff);
      pp->buffer_pos -= ioff;
    }
  if (poff < post_data_len)
    {
      pp->state = PP_Error;
      return MHD_NO;            /* serious error */
    }
  return MHD_YES;
}

/**
 * Parse and process POST data.
 * Call this function when POST data is available
 * (usually during an MHD_AccessHandlerCallback)
 * with the upload_data and upload_data_size.
 * Whenever possible, this will then cause calls
 * to the MHD_IncrementalKeyValueIterator.
 *
 * @param pp the post processor
 * @param post_data post_data_len bytes of POST data
 * @param post_data_len length of post_data
 * @return MHD_YES on success, MHD_NO on error
 *         (out-of-memory, iterator aborted, parse error)
 */
int
MHD_post_process (struct MHD_PostProcessor *pp,
                  const char *post_data, size_t post_data_len)
{
  if (post_data_len == 0)
    return MHD_YES;
  if (pp == NULL)
    return MHD_NO;
  if (0 == strncasecmp (MHD_HTTP_POST_ENCODING_FORM_URLENCODED, pp->encoding,
                         strlen(MHD_HTTP_POST_ENCODING_FORM_URLENCODED)))
    return post_process_urlencoded (pp, post_data, post_data_len);
  if (0 ==
      strncasecmp (MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA, pp->encoding,
                   strlen (MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA)))
    return post_process_multipart (pp, post_data, post_data_len);
  /* this should never be reached */
  return MHD_NO;
}

/**
 * Release PostProcessor resources.
 */
int
MHD_destroy_post_processor (struct MHD_PostProcessor *pp)
{
  int ret;

  /* These internal strings need cleaning up since
     the post-processing may have been interrupted
     at any stage */
  if ((pp->xbuf_pos > 0) || (pp->state != PP_Done))
    ret = MHD_NO;
  else
    ret = MHD_YES;
  pp->have = NE_none;
  free_unmarked (pp);
  if (pp->nested_boundary != NULL)
    free (pp->nested_boundary);
  free (pp);
  return ret;
}

/* end of postprocessor.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor_large_test.c.



















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file postprocessor_large_test.c
 * @brief  Testcase with very large input for postprocessor
 * @author Christian Grothoff
 */

#include "platform.h"
#include "microhttpd.h"
#include "internal.h"

#ifndef WINDOWS
#include <unistd.h>
#endif

static int
value_checker (void *cls,
               enum MHD_ValueKind kind,
               const char *key,
               const char *filename,
               const char *content_type,
               const char *transfer_encoding,
               const char *data, uint64_t off, size_t size)
{
  unsigned int *pos = cls;
#if 0
  fprintf (stderr,
           "VC: %llu %u `%s' `%s' `%s' `%s' `%.*s'\n",
           off, size,
           key, filename, content_type, transfer_encoding, size, data);
#endif
  if (size == 0)
    return MHD_YES;
  *pos += size;
  return MHD_YES;

}


static int
test_simple_large ()
{
  struct MHD_Connection connection;
  struct MHD_HTTP_Header header;
  struct MHD_PostProcessor *pp;
  int i;
  int delta;
  size_t size;
  char data[102400];
  unsigned int pos;

  pos = 0;
  memset (data, 'A', sizeof (data));
  memcpy (data, "key=", 4);
  data[sizeof (data) - 1] = '\0';
  memset (&connection, 0, sizeof (struct MHD_Connection));
  memset (&header, 0, sizeof (struct MHD_HTTP_Header));
  connection.headers_received = &header;
  header.header = MHD_HTTP_HEADER_CONTENT_TYPE;
  header.value = MHD_HTTP_POST_ENCODING_FORM_URLENCODED;
  header.kind = MHD_HEADER_KIND;
  pp = MHD_create_post_processor (&connection, 1024, &value_checker, &pos);
  i = 0;
  size = strlen (data);
  while (i < size)
    {
      delta = 1 + RANDOM () % (size - i);
      MHD_post_process (pp, &data[i], delta);
      i += delta;
    }
  MHD_destroy_post_processor (pp);
  if (pos != sizeof (data) - 5) /* minus 0-termination and 'key=' */
    return 1;
  return 0;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  errorCount += test_simple_large ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor_test.c.





































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file postprocessor_test.c
 * @brief  Testcase for postprocessor
 * @author Christian Grothoff
 */

#include "platform.h"
#include "microhttpd.h"
#include "internal.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

/**
 * Array of values that the value checker "wants".
 * Each series of checks should be terminated by
 * five NULL-entries.
 */
const char *want[] = {
#define URL_DATA "abc=def&x=5"
#define URL_START 0
  "abc", NULL, NULL, NULL, "def",
  "x", NULL, NULL, NULL, "5",
#define URL_END (URL_START + 10)
  NULL, NULL, NULL, NULL, NULL,
#define FORM_DATA "--AaB03x\r\ncontent-disposition: form-data; name=\"field1\"\r\n\r\nJoe Blow\r\n--AaB03x\r\ncontent-disposition: form-data; name=\"pics\"; filename=\"file1.txt\"\r\nContent-Type: text/plain\r\nContent-Transfer-Encoding: binary\r\n\r\nfiledata\r\n--AaB03x--\r\n"
#define FORM_START (URL_END + 5)
  "field1", NULL, NULL, NULL, "Joe Blow",
  "pics", "file1.txt", "text/plain", "binary", "filedata",
#define FORM_END (FORM_START + 10)
  NULL, NULL, NULL, NULL, NULL,
#define FORM_NESTED_DATA "--AaB03x\r\ncontent-disposition: form-data; name=\"field1\"\r\n\r\nJane Blow\r\n--AaB03x\r\ncontent-disposition: form-data; name=\"pics\"\r\nContent-type: multipart/mixed, boundary=BbC04y\r\n\r\n--BbC04y\r\nContent-disposition: attachment; filename=\"file1.txt\"\r\nContent-Type: text/plain\r\n\r\nfiledata1\r\n--BbC04y\r\nContent-disposition: attachment; filename=\"file2.gif\"\r\nContent-type: image/gif\r\nContent-Transfer-Encoding: binary\r\n\r\nfiledata2\r\n--BbC04y--\r\n--AaB03x--"
#define FORM_NESTED_START (FORM_END + 5)
  "field1", NULL, NULL, NULL, "Jane Blow",
  "pics", "file1.txt", "text/plain", NULL, "filedata1",
  "pics", "file2.gif", "image/gif", "binary", "filedata2",
#define FORM_NESTED_END (FORM_NESTED_START + 15)
  NULL, NULL, NULL, NULL, NULL,
};

static int
mismatch (const char *a, const char *b)
{
  if (a == b)
    return 0;
  if ((a == NULL) || (b == NULL))
    return 1;
  return 0 != strcmp (a, b);
}

static int
value_checker (void *cls,
               enum MHD_ValueKind kind,
               const char *key,
               const char *filename,
               const char *content_type,
               const char *transfer_encoding,
               const char *data, uint64_t off, size_t size)
{
  int *want_off = cls;
  int idx = *want_off;

#if 0
  fprintf (stderr,
           "VC: `%s' `%s' `%s' `%s' `%.*s'\n",
           key, filename, content_type, transfer_encoding, size, data);
#endif
  if (size == 0)
    return MHD_YES;
  if ((idx < 0) ||
      (want[idx] == NULL) ||
      (0 != strcmp (key, want[idx])) ||
      (mismatch (filename, want[idx + 1])) ||
      (mismatch (content_type, want[idx + 2])) ||
      (mismatch (transfer_encoding, want[idx + 3])) ||
      (0 != memcmp (data, &want[idx + 4][off], size)))
    {
      *want_off = -1;
      return MHD_NO;
    }
  if (off + size == strlen (want[idx + 4]))
    *want_off = idx + 5;
  return MHD_YES;

}


static int
test_urlencoding ()
{
  struct MHD_Connection connection;
  struct MHD_HTTP_Header header;
  struct MHD_PostProcessor *pp;
  unsigned int want_off = URL_START;
  int i;
  int delta;
  size_t size;

  memset (&connection, 0, sizeof (struct MHD_Connection));
  memset (&header, 0, sizeof (struct MHD_HTTP_Header));
  connection.headers_received = &header;
  header.header = MHD_HTTP_HEADER_CONTENT_TYPE;
  header.value = MHD_HTTP_POST_ENCODING_FORM_URLENCODED;
  header.kind = MHD_HEADER_KIND;
  pp = MHD_create_post_processor (&connection,
                                  1024, &value_checker, &want_off);
  i = 0;
  size = strlen (URL_DATA);
  while (i < size)
    {
      delta = 1 + RANDOM () % (size - i);
      MHD_post_process (pp, &URL_DATA[i], delta);
      i += delta;
    }
  MHD_destroy_post_processor (pp);
  if (want_off != URL_END)
    return 1;
  return 0;
}


static int
test_multipart ()
{
  struct MHD_Connection connection;
  struct MHD_HTTP_Header header;
  struct MHD_PostProcessor *pp;
  unsigned int want_off = FORM_START;
  int i;
  int delta;
  size_t size;

  memset (&connection, 0, sizeof (struct MHD_Connection));
  memset (&header, 0, sizeof (struct MHD_HTTP_Header));
  connection.headers_received = &header;
  header.header = MHD_HTTP_HEADER_CONTENT_TYPE;
  header.value =
    MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA ", boundary=AaB03x";
  header.kind = MHD_HEADER_KIND;
  pp = MHD_create_post_processor (&connection,
                                  1024, &value_checker, &want_off);
  i = 0;
  size = strlen (FORM_DATA);
  while (i < size)
    {
      delta = 1 + RANDOM () % (size - i);
      MHD_post_process (pp, &FORM_DATA[i], delta);
      i += delta;
    }
  MHD_destroy_post_processor (pp);
  if (want_off != FORM_END)
    return 2;
  return 0;
}


static int
test_nested_multipart ()
{
  struct MHD_Connection connection;
  struct MHD_HTTP_Header header;
  struct MHD_PostProcessor *pp;
  unsigned int want_off = FORM_NESTED_START;
  int i;
  int delta;
  size_t size;

  memset (&connection, 0, sizeof (struct MHD_Connection));
  memset (&header, 0, sizeof (struct MHD_HTTP_Header));
  connection.headers_received = &header;
  header.header = MHD_HTTP_HEADER_CONTENT_TYPE;
  header.value =
    MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA ", boundary=AaB03x";
  header.kind = MHD_HEADER_KIND;
  pp = MHD_create_post_processor (&connection,
                                  1024, &value_checker, &want_off);
  i = 0;
  size = strlen (FORM_NESTED_DATA);
  while (i < size)
    {
      delta = 1 + RANDOM () % (size - i);
      MHD_post_process (pp, &FORM_NESTED_DATA[i], delta);
      i += delta;
    }
  MHD_destroy_post_processor (pp);
  if (want_off != FORM_NESTED_END)
    return 4;
  return 0;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  errorCount += test_urlencoding ();
  errorCount += test_multipart ();
  errorCount += test_nested_multipart ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.c.

































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
     This file is part of libmicrohttpd
     (C) 2007 Lymba

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

*/

/**
 * @file reason_phrase.c
 * @brief  Tables of the string response phrases
 * @author Elliot Glaysher
 * @author Christian Grothoff (minor code clean up)
 */

#include "reason_phrase.h"

#ifndef NULL
#define NULL (void*)0
#endif  // !NULL

static const char *invalid_hundred[] = { NULL };

static const char *one_hundred[] = {
  "Continue",
  "Switching Protocols",
  "Processing"
};

static const char *two_hundred[] = {
  "OK",
  "Created",
  "Accepted",
  "Non-Authoritative Information",
  "No Content",
  "Reset Content",
  "Partial Content",
  "Multi Status"
};

static const char *three_hundred[] = {
  "Multiple Choices",
  "Moved Permanently",
  "Moved Temporarily",
  "See Other",
  "Not Modified",
  "Use Proxy",
  "Switch Proxy",
  "Temporary Redirect"
};

static const char *four_hundred[] = {
  "Bad Request",
  "Unauthorized",
  "Payment Required",
  "Forbidden",
  "Not Found",
  "Method Not Allowed",
  "Not Acceptable",
  "Proxy Authentication Required",
  "Request Time-out",
  "Conflict",
  "Gone",
  "Length Required",
  "Precondition Failed",
  "Request Entity Too Large",
  "Request-URI Too Large",
  "Unsupported Media Type",
  "Requested Range Not Satisfiable",
  "Expectation Failed",
  "Unprocessable Entity",
  "Locked",
  "Failed Dependency",
  "Unordered Collection",
  "Upgrade Required",
  "Retry With"
};

static const char *five_hundred[] = {
  "Internal Server Error",
  "Not Implemented",
  "Bad Gateway",
  "Service Unavailable",
  "Gateway Time-out",
  "HTTP Version not supported",
  "Variant Also Negotiates",
  "Insufficient Storage",
  "Bandwidth Limit Exceeded",
  "Not Extended"
};


struct MHD_Reason_Block
{
  unsigned int max;
  const char **data;
};

#define BLOCK(m) { (sizeof(m) / sizeof(char*)), m }

static const struct MHD_Reason_Block reasons[] = {
  BLOCK (invalid_hundred),
  BLOCK (one_hundred),
  BLOCK (two_hundred),
  BLOCK (three_hundred),
  BLOCK (four_hundred),
  BLOCK (five_hundred),
};

const char *
MHD_get_reason_phrase_for (unsigned int code)
{
  if ((code >= 100 && code < 600) && (reasons[code / 100].max > code % 100))
    return reasons[code / 100].data[code % 100];
  return "Unknown";
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.h.











































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
     This file is part of libmicrohttpd
     (C) 2007 Lymba

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file reason_phrase.c
 * @brief  Tables of the string response phrases
 * @author Elliot Glaysher
 */

#ifndef REASON_PHRASE_H
#define REASON_PHRASE_H

/**
 * Returns the string reason phrase for a response code.
 *
 * If we don't have a string for a status code, we give the first
 * message in that status code class.
 */
const char *MHD_get_reason_phrase_for (unsigned int code);

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.c.







































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
/*
     This file is part of libmicrohttpd
     (C) 2007, 2009, 2010 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file response.c
 * @brief  Methods for managing response objects
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#include "internal.h"
#include "response.h"

/**
 * Add a header line to the response.
 *
 * @return MHD_NO on error (i.e. invalid header or content format).
 */
int
MHD_add_response_header (struct MHD_Response *response,
                         const char *header, const char *content)
{
  struct MHD_HTTP_Header *hdr;

  if ((response == NULL) ||
      (header == NULL) ||
      (content == NULL) ||
      (strlen (header) == 0) ||
      (strlen (content) == 0) ||
      (NULL != strstr (header, "\t")) ||
      (NULL != strstr (header, "\r")) ||
      (NULL != strstr (header, "\n")) ||
      (NULL != strstr (content, "\t")) ||
      (NULL != strstr (content, "\r")) || (NULL != strstr (content, "\n")))
    return MHD_NO;
  hdr = malloc (sizeof (struct MHD_HTTP_Header));
  if (hdr == NULL)
    return MHD_NO;
  hdr->header = strdup (header);
  if (hdr->header == NULL)
    {
      free (hdr);
      return MHD_NO;
    }
  hdr->value = strdup (content);
  if (hdr->value == NULL)
    {
      free (hdr->header);
      free (hdr);
      return MHD_NO;
    }
  hdr->kind = MHD_HEADER_KIND;
  hdr->next = response->first_header;
  response->first_header = hdr;
  return MHD_YES;
}

/**
 * Delete a header line from the response.
 *
 * @return MHD_NO on error (no such header known)
 */
int
MHD_del_response_header (struct MHD_Response *response,
                         const char *header, const char *content)
{
  struct MHD_HTTP_Header *pos;
  struct MHD_HTTP_Header *prev;

  if ((header == NULL) || (content == NULL))
    return MHD_NO;
  prev = NULL;
  pos = response->first_header;
  while (pos != NULL)
    {
      if ((0 == strcmp (header, pos->header)) &&
          (0 == strcmp (content, pos->value)))
        {
          free (pos->header);
          free (pos->value);
          if (prev == NULL)
            response->first_header = pos->next;
          else
            prev->next = pos->next;
          free (pos);
          return MHD_YES;
        }
      prev = pos;
      pos = pos->next;
    }
  return MHD_NO;
}

/**
 * Get all of the headers added to a response.
 *
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_response_headers (struct MHD_Response *response,
                          MHD_KeyValueIterator iterator, void *iterator_cls)
{
  struct MHD_HTTP_Header *pos;
  int numHeaders = 0;
  pos = response->first_header;
  while (pos != NULL)
    {
      numHeaders++;
      if ((iterator != NULL) &&
          (MHD_YES != iterator (iterator_cls,
                                pos->kind, pos->header, pos->value)))
        break;
      pos = pos->next;
    }
  return numHeaders;
}


/**
 * Get a particular header from the response.
 *
 * @param key which header to get
 * @return NULL if header does not exist
 */
const char *
MHD_get_response_header (struct MHD_Response *response, const char *key)
{
  struct MHD_HTTP_Header *pos;

  if (key == NULL)
    return NULL;
  pos = response->first_header;
  while (pos != NULL)
    {
      if (0 == strcmp (key, pos->header))
        return pos->value;
      pos = pos->next;
    }
  return NULL;
}


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response, MHD_SIZE_UNKNOWN for unknown
 * @param block_size preferred block size for querying crc (advisory only,
 *                   MHD may still call crc using smaller chunks); this
 *                   is essentially the buffer size used for IO, clients
 *                   should pick a value that is appropriate for IO and
 *                   memory performance requirements
 * @param crc callback to use to obtain response data
 * @param crc_cls extra argument to crc
 * @param crfc callback to call to free crc_cls resources
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *
MHD_create_response_from_callback (uint64_t size,
                                   size_t block_size,
                                   MHD_ContentReaderCallback crc,
                                   void *crc_cls,
                                   MHD_ContentReaderFreeCallback crfc)
{
  struct MHD_Response *retVal;

  if ((crc == NULL) || (block_size == 0))
    return NULL;
  retVal = malloc (sizeof (struct MHD_Response) + block_size);
  if (retVal == NULL)
    return NULL;
  memset (retVal, 0, sizeof (struct MHD_Response));
  retVal->fd = -1;
  retVal->data = (void *) &retVal[1];
  retVal->data_buffer_size = block_size;
  if (pthread_mutex_init (&retVal->mutex, NULL) != 0)
    {
      free (retVal);
      return NULL;
    }
  retVal->crc = crc;
  retVal->crfc = crfc;
  retVal->crc_cls = crc_cls;
  retVal->reference_count = 1;
  retVal->total_size = size;
  return retVal;
}


/**
 * Given a file descriptor, read data from the file
 * to generate the response.
 * 
 * @param cls pointer to the response
 * @param pos offset in the file to access
 * @param buf where to write the data
 * @param max number of bytes to write at most
 * @return number of bytes written
 */
static int
file_reader (void *cls, uint64_t pos, char *buf, int max)
{
  struct MHD_Response *response = cls;
  int ret;

  pthread_mutex_lock (&response->mutex);
  (void) lseek (response->fd, pos, SEEK_SET);
  ret = read (response->fd, buf, max);
  pthread_mutex_unlock (&response->mutex);
  return ret;
}


/**
 * Destroy file reader context.  Closes the file
 * descriptor.
 *
 * @param cls pointer to file descriptor
 */
static void
free_callback (void *cls)
{
  struct MHD_Response *response = cls;
  (void) close (response->fd);
  response->fd = -1;
}


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param fd file descriptor referring to a file on disk with the data
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_fd (size_t size,
						  int fd)
{
  struct MHD_Response *ret;

  ret = MHD_create_response_from_callback (size,
					   4 * 1024,
					   &file_reader,
					   NULL,
					   &free_callback);
  if (ret == NULL)
    return NULL;
  ret->fd = fd;
  ret->crc_cls = ret;
  return ret;
}


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param data the data itself
 * @param must_free libmicrohttpd should free data when done
 * @param must_copy libmicrohttpd must make a copy of data
 *        right away, the data maybe released anytime after
 *        this call returns
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *
MHD_create_response_from_data (size_t size,
                               void *data, int must_free, int must_copy)
{
  struct MHD_Response *retVal;
  void *tmp;

  if ((data == NULL) && (size > 0))
    return NULL;
  retVal = malloc (sizeof (struct MHD_Response));
  if (retVal == NULL)
    return NULL;
  memset (retVal, 0, sizeof (struct MHD_Response));
  retVal->fd = -1;
  if (pthread_mutex_init (&retVal->mutex, NULL) != 0)
    {
      free (retVal);
      return NULL;
    }
  if ((must_copy) && (size > 0))
    {
      tmp = malloc (size);
      if (tmp == NULL)
        {
          free (retVal);
          return NULL;
        }
      memcpy (tmp, data, size);
      must_free = 1;
      data = tmp;
    }
  retVal->crc = NULL;
  retVal->crfc = must_free ? &free : NULL;
  retVal->crc_cls = must_free ? data : NULL;
  retVal->reference_count = 1;
  retVal->total_size = size;
  retVal->data = data;
  retVal->data_size = size;
  return retVal;
}

/**
 * Destroy a response object and associated resources.  Note that
 * libmicrohttpd may keep some of the resources around if the response
 * is still in the queue for some clients, so the memory may not
 * necessarily be freed immediatley.
 */
void
MHD_destroy_response (struct MHD_Response *response)
{
  struct MHD_HTTP_Header *pos;

  if (response == NULL)
    return;
  pthread_mutex_lock (&response->mutex);
  if (0 != --(response->reference_count))
    {
      pthread_mutex_unlock (&response->mutex);
      return;
    }
  pthread_mutex_unlock (&response->mutex);
  pthread_mutex_destroy (&response->mutex);
  if (response->crfc != NULL)
    response->crfc (response->crc_cls);
  while (response->first_header != NULL)
    {
      pos = response->first_header;
      response->first_header = pos->next;
      free (pos->header);
      free (pos->value);
      free (pos);
    }
  free (response);
}


void
MHD_increment_response_rc (struct MHD_Response *response)
{
  pthread_mutex_lock (&response->mutex);
  (response->reference_count)++;
  pthread_mutex_unlock (&response->mutex);
}


/* end of response.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.h.











































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
     This file is part of libmicrohttpd
     (C) 2007 Daniel Pittman and Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file response.h
 * @brief  Methods for managing response objects
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#ifndef RESPONSE_H
#define RESPONSE_H

/**
 * Increment response RC.  Should this be part of the
 * public API?
 */
void MHD_increment_response_rc (struct MHD_Response *response);


#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/Makefile.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/examples/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.




pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
noinst_PROGRAMS = authorization_example$(EXEEXT) \
	minimal_example$(EXEEXT) minimal_example_comet$(EXEEXT) \
	querystring_example$(EXEEXT) fileserver_example$(EXEEXT) \
	fileserver_example_dirs$(EXEEXT) \
	fileserver_example_external_select$(EXEEXT) \
	refuse_post_example$(EXEEXT) $(am__EXEEXT_1)
#am__append_1 = https_fileserver_example 
subdir = src/examples
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
#am__EXEEXT_1 = https_fileserver_example$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am_authorization_example_OBJECTS = authorization_example.$(OBJEXT)
authorization_example_OBJECTS = $(am_authorization_example_OBJECTS)
authorization_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_fileserver_example_OBJECTS = fileserver_example.$(OBJEXT)
fileserver_example_OBJECTS = $(am_fileserver_example_OBJECTS)
fileserver_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_fileserver_example_dirs_OBJECTS =  \
	fileserver_example_dirs.$(OBJEXT)
fileserver_example_dirs_OBJECTS =  \
	$(am_fileserver_example_dirs_OBJECTS)
fileserver_example_dirs_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_fileserver_example_external_select_OBJECTS =  \
	fileserver_example_external_select.$(OBJEXT)
fileserver_example_external_select_OBJECTS =  \
	$(am_fileserver_example_external_select_OBJECTS)
fileserver_example_external_select_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_https_fileserver_example_OBJECTS =  \
	https_fileserver_example.$(OBJEXT)
https_fileserver_example_OBJECTS =  \
	$(am_https_fileserver_example_OBJECTS)
https_fileserver_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_minimal_example_OBJECTS = minimal_example.$(OBJEXT)
minimal_example_OBJECTS = $(am_minimal_example_OBJECTS)
minimal_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_minimal_example_comet_OBJECTS = minimal_example_comet.$(OBJEXT)
minimal_example_comet_OBJECTS = $(am_minimal_example_comet_OBJECTS)
minimal_example_comet_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_querystring_example_OBJECTS = querystring_example.$(OBJEXT)
querystring_example_OBJECTS = $(am_querystring_example_OBJECTS)
querystring_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_refuse_post_example_OBJECTS = refuse_post_example.$(OBJEXT)
refuse_post_example_OBJECTS = $(am_refuse_post_example_OBJECTS)
refuse_post_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(authorization_example_SOURCES) \
	$(fileserver_example_SOURCES) \
	$(fileserver_example_dirs_SOURCES) \
	$(fileserver_example_external_select_SOURCES) \
	$(https_fileserver_example_SOURCES) $(minimal_example_SOURCES) \
	$(minimal_example_comet_SOURCES) \
	$(querystring_example_SOURCES) $(refuse_post_example_SOURCES)
DIST_SOURCES = $(authorization_example_SOURCES) \
	$(fileserver_example_SOURCES) \
	$(fileserver_example_dirs_SOURCES) \
	$(fileserver_example_external_select_SOURCES) \
	$(https_fileserver_example_SOURCES) $(minimal_example_SOURCES) \
	$(minimal_example_comet_SOURCES) \
	$(querystring_example_SOURCES) $(refuse_post_example_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/examples
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/examples
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../../
top_builddir = ../..
top_srcdir = ../..
SUBDIRS = .
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I/usr/local/include  -I/usr/local/include

#AM_CFLAGS = --coverage
minimal_example_SOURCES = \
 minimal_example.c 

minimal_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

minimal_example_comet_SOURCES = \
 minimal_example_comet.c 

minimal_example_comet_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

authorization_example_SOURCES = \
 authorization_example.c 

authorization_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

refuse_post_example_SOURCES = \
 refuse_post_example.c 

refuse_post_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

querystring_example_SOURCES = \
 querystring_example.c 

querystring_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_SOURCES = \
 fileserver_example.c 

fileserver_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_dirs_SOURCES = \
 fileserver_example_dirs.c 

fileserver_example_dirs_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_external_select_SOURCES = \
 fileserver_example_external_select.c 

fileserver_example_external_select_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

https_fileserver_example_SOURCES = \
https_fileserver_example.c

https_fileserver_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-noinstPROGRAMS:
	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
authorization_example$(EXEEXT): $(authorization_example_OBJECTS) $(authorization_example_DEPENDENCIES) 
	@rm -f authorization_example$(EXEEXT)
	$(LINK) $(authorization_example_OBJECTS) $(authorization_example_LDADD) $(LIBS)
fileserver_example$(EXEEXT): $(fileserver_example_OBJECTS) $(fileserver_example_DEPENDENCIES) 
	@rm -f fileserver_example$(EXEEXT)
	$(LINK) $(fileserver_example_OBJECTS) $(fileserver_example_LDADD) $(LIBS)
fileserver_example_dirs$(EXEEXT): $(fileserver_example_dirs_OBJECTS) $(fileserver_example_dirs_DEPENDENCIES) 
	@rm -f fileserver_example_dirs$(EXEEXT)
	$(LINK) $(fileserver_example_dirs_OBJECTS) $(fileserver_example_dirs_LDADD) $(LIBS)
fileserver_example_external_select$(EXEEXT): $(fileserver_example_external_select_OBJECTS) $(fileserver_example_external_select_DEPENDENCIES) 
	@rm -f fileserver_example_external_select$(EXEEXT)
	$(LINK) $(fileserver_example_external_select_OBJECTS) $(fileserver_example_external_select_LDADD) $(LIBS)
https_fileserver_example$(EXEEXT): $(https_fileserver_example_OBJECTS) $(https_fileserver_example_DEPENDENCIES) 
	@rm -f https_fileserver_example$(EXEEXT)
	$(LINK) $(https_fileserver_example_OBJECTS) $(https_fileserver_example_LDADD) $(LIBS)
minimal_example$(EXEEXT): $(minimal_example_OBJECTS) $(minimal_example_DEPENDENCIES) 
	@rm -f minimal_example$(EXEEXT)
	$(LINK) $(minimal_example_OBJECTS) $(minimal_example_LDADD) $(LIBS)
minimal_example_comet$(EXEEXT): $(minimal_example_comet_OBJECTS) $(minimal_example_comet_DEPENDENCIES) 
	@rm -f minimal_example_comet$(EXEEXT)
	$(LINK) $(minimal_example_comet_OBJECTS) $(minimal_example_comet_LDADD) $(LIBS)
querystring_example$(EXEEXT): $(querystring_example_OBJECTS) $(querystring_example_DEPENDENCIES) 
	@rm -f querystring_example$(EXEEXT)
	$(LINK) $(querystring_example_OBJECTS) $(querystring_example_LDADD) $(LIBS)
refuse_post_example$(EXEEXT): $(refuse_post_example_OBJECTS) $(refuse_post_example_DEPENDENCIES) 
	@rm -f refuse_post_example$(EXEEXT)
	$(LINK) $(refuse_post_example_OBJECTS) $(refuse_post_example_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

include ./$(DEPDIR)/authorization_example.Po
include ./$(DEPDIR)/fileserver_example.Po
include ./$(DEPDIR)/fileserver_example_dirs.Po
include ./$(DEPDIR)/fileserver_example_external_select.Po
include ./$(DEPDIR)/https_fileserver_example.Po
include ./$(DEPDIR)/minimal_example.Po
include ./$(DEPDIR)/minimal_example_comet.Po
include ./$(DEPDIR)/querystring_example.Po
include ./$(DEPDIR)/refuse_post_example.Po

.c.o:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c $<

.c.obj:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
#	source='$<' object='$@' libtool=yes \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
	mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
	install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-am clean clean-generic clean-libtool \
	clean-noinstPROGRAMS ctags ctags-recursive distclean \
	distclean-compile distclean-generic distclean-libtool \
	distclean-tags distdir dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-pdf install-pdf-am install-ps install-ps-am \
	install-strip installcheck installcheck-am installdirs \
	installdirs-am maintainer-clean maintainer-clean-generic \
	mostlyclean mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/Makefile.am.











































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
SUBDIRS  = .

AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  @LIBGCRYPT_CFLAGS@

if USE_COVERAGE
  AM_CFLAGS = --coverage
endif

# example programs
noinst_PROGRAMS = \
authorization_example \
minimal_example \
minimal_example_comet \
querystring_example \
fileserver_example \
fileserver_example_dirs \
fileserver_example_external_select \
refuse_post_example

if ENABLE_HTTPS
noinst_PROGRAMS += https_fileserver_example 
endif

minimal_example_SOURCES = \
 minimal_example.c 
minimal_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

minimal_example_comet_SOURCES = \
 minimal_example_comet.c 
minimal_example_comet_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

authorization_example_SOURCES = \
 authorization_example.c 
authorization_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

refuse_post_example_SOURCES = \
 refuse_post_example.c 
refuse_post_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

querystring_example_SOURCES = \
 querystring_example.c 
querystring_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_SOURCES = \
 fileserver_example.c 
fileserver_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_dirs_SOURCES = \
 fileserver_example_dirs.c 
fileserver_example_dirs_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_external_select_SOURCES = \
 fileserver_example_external_select.c 
fileserver_example_external_select_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

https_fileserver_example_SOURCES = \
https_fileserver_example.c
https_fileserver_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/Makefile.in.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = authorization_example$(EXEEXT) \
	minimal_example$(EXEEXT) minimal_example_comet$(EXEEXT) \
	querystring_example$(EXEEXT) fileserver_example$(EXEEXT) \
	fileserver_example_dirs$(EXEEXT) \
	fileserver_example_external_select$(EXEEXT) \
	refuse_post_example$(EXEEXT) $(am__EXEEXT_1)
@ENABLE_HTTPS_TRUE@am__append_1 = https_fileserver_example 
subdir = src/examples
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@ENABLE_HTTPS_TRUE@am__EXEEXT_1 = https_fileserver_example$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am_authorization_example_OBJECTS = authorization_example.$(OBJEXT)
authorization_example_OBJECTS = $(am_authorization_example_OBJECTS)
authorization_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_fileserver_example_OBJECTS = fileserver_example.$(OBJEXT)
fileserver_example_OBJECTS = $(am_fileserver_example_OBJECTS)
fileserver_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_fileserver_example_dirs_OBJECTS =  \
	fileserver_example_dirs.$(OBJEXT)
fileserver_example_dirs_OBJECTS =  \
	$(am_fileserver_example_dirs_OBJECTS)
fileserver_example_dirs_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_fileserver_example_external_select_OBJECTS =  \
	fileserver_example_external_select.$(OBJEXT)
fileserver_example_external_select_OBJECTS =  \
	$(am_fileserver_example_external_select_OBJECTS)
fileserver_example_external_select_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_https_fileserver_example_OBJECTS =  \
	https_fileserver_example.$(OBJEXT)
https_fileserver_example_OBJECTS =  \
	$(am_https_fileserver_example_OBJECTS)
https_fileserver_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_minimal_example_OBJECTS = minimal_example.$(OBJEXT)
minimal_example_OBJECTS = $(am_minimal_example_OBJECTS)
minimal_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_minimal_example_comet_OBJECTS = minimal_example_comet.$(OBJEXT)
minimal_example_comet_OBJECTS = $(am_minimal_example_comet_OBJECTS)
minimal_example_comet_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_querystring_example_OBJECTS = querystring_example.$(OBJEXT)
querystring_example_OBJECTS = $(am_querystring_example_OBJECTS)
querystring_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_refuse_post_example_OBJECTS = refuse_post_example.$(OBJEXT)
refuse_post_example_OBJECTS = $(am_refuse_post_example_OBJECTS)
refuse_post_example_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(authorization_example_SOURCES) \
	$(fileserver_example_SOURCES) \
	$(fileserver_example_dirs_SOURCES) \
	$(fileserver_example_external_select_SOURCES) \
	$(https_fileserver_example_SOURCES) $(minimal_example_SOURCES) \
	$(minimal_example_comet_SOURCES) \
	$(querystring_example_SOURCES) $(refuse_post_example_SOURCES)
DIST_SOURCES = $(authorization_example_SOURCES) \
	$(fileserver_example_SOURCES) \
	$(fileserver_example_dirs_SOURCES) \
	$(fileserver_example_external_select_SOURCES) \
	$(https_fileserver_example_SOURCES) $(minimal_example_SOURCES) \
	$(minimal_example_comet_SOURCES) \
	$(querystring_example_SOURCES) $(refuse_post_example_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = .
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  @LIBGCRYPT_CFLAGS@

@USE_COVERAGE_TRUE@AM_CFLAGS = --coverage
minimal_example_SOURCES = \
 minimal_example.c 

minimal_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

minimal_example_comet_SOURCES = \
 minimal_example_comet.c 

minimal_example_comet_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

authorization_example_SOURCES = \
 authorization_example.c 

authorization_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

refuse_post_example_SOURCES = \
 refuse_post_example.c 

refuse_post_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

querystring_example_SOURCES = \
 querystring_example.c 

querystring_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_SOURCES = \
 fileserver_example.c 

fileserver_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_dirs_SOURCES = \
 fileserver_example_dirs.c 

fileserver_example_dirs_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

fileserver_example_external_select_SOURCES = \
 fileserver_example_external_select.c 

fileserver_example_external_select_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la 

https_fileserver_example_SOURCES = \
https_fileserver_example.c

https_fileserver_example_LDADD = \
 $(top_builddir)/src/daemon/libmicrohttpd.la

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/examples/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-noinstPROGRAMS:
	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
authorization_example$(EXEEXT): $(authorization_example_OBJECTS) $(authorization_example_DEPENDENCIES) 
	@rm -f authorization_example$(EXEEXT)
	$(LINK) $(authorization_example_OBJECTS) $(authorization_example_LDADD) $(LIBS)
fileserver_example$(EXEEXT): $(fileserver_example_OBJECTS) $(fileserver_example_DEPENDENCIES) 
	@rm -f fileserver_example$(EXEEXT)
	$(LINK) $(fileserver_example_OBJECTS) $(fileserver_example_LDADD) $(LIBS)
fileserver_example_dirs$(EXEEXT): $(fileserver_example_dirs_OBJECTS) $(fileserver_example_dirs_DEPENDENCIES) 
	@rm -f fileserver_example_dirs$(EXEEXT)
	$(LINK) $(fileserver_example_dirs_OBJECTS) $(fileserver_example_dirs_LDADD) $(LIBS)
fileserver_example_external_select$(EXEEXT): $(fileserver_example_external_select_OBJECTS) $(fileserver_example_external_select_DEPENDENCIES) 
	@rm -f fileserver_example_external_select$(EXEEXT)
	$(LINK) $(fileserver_example_external_select_OBJECTS) $(fileserver_example_external_select_LDADD) $(LIBS)
https_fileserver_example$(EXEEXT): $(https_fileserver_example_OBJECTS) $(https_fileserver_example_DEPENDENCIES) 
	@rm -f https_fileserver_example$(EXEEXT)
	$(LINK) $(https_fileserver_example_OBJECTS) $(https_fileserver_example_LDADD) $(LIBS)
minimal_example$(EXEEXT): $(minimal_example_OBJECTS) $(minimal_example_DEPENDENCIES) 
	@rm -f minimal_example$(EXEEXT)
	$(LINK) $(minimal_example_OBJECTS) $(minimal_example_LDADD) $(LIBS)
minimal_example_comet$(EXEEXT): $(minimal_example_comet_OBJECTS) $(minimal_example_comet_DEPENDENCIES) 
	@rm -f minimal_example_comet$(EXEEXT)
	$(LINK) $(minimal_example_comet_OBJECTS) $(minimal_example_comet_LDADD) $(LIBS)
querystring_example$(EXEEXT): $(querystring_example_OBJECTS) $(querystring_example_DEPENDENCIES) 
	@rm -f querystring_example$(EXEEXT)
	$(LINK) $(querystring_example_OBJECTS) $(querystring_example_LDADD) $(LIBS)
refuse_post_example$(EXEEXT): $(refuse_post_example_OBJECTS) $(refuse_post_example_DEPENDENCIES) 
	@rm -f refuse_post_example$(EXEEXT)
	$(LINK) $(refuse_post_example_OBJECTS) $(refuse_post_example_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authorization_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileserver_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileserver_example_dirs.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileserver_example_external_select.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/https_fileserver_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minimal_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minimal_example_comet.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/querystring_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refuse_post_example.Po@am__quote@

.c.o:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c $<

.c.obj:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile $(PROGRAMS)
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
	mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
	install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-am clean clean-generic clean-libtool \
	clean-noinstPROGRAMS ctags ctags-recursive distclean \
	distclean-compile distclean-generic distclean-libtool \
	distclean-tags distdir dvi dvi-am html html-am info info-am \
	install install-am install-data install-data-am install-dvi \
	install-dvi-am install-exec install-exec-am install-html \
	install-html-am install-info install-info-am install-man \
	install-pdf install-pdf-am install-ps install-ps-am \
	install-strip installcheck installcheck-am installdirs \
	installdirs-am maintainer-clean maintainer-clean-generic \
	mostlyclean mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/authorization_example.c.













































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file authorization_example.c
 * @brief example for how to use libmicrohttpd with HTTP authentication
 * @author Christian Grothoff
 */

#include "platform.h"
#include <microhttpd.h>

#define PAGE "<html><head><title>libmicrohttpd demo</title></head><body>libmicrohttpd demo</body></html>"

#define DENIED "<html><head><title>Access denied</title></head><body>Access denied</body></html>"



static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;
  int code;
  const char *auth;

  if (0 != strcmp (method, "GET"))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  auth = MHD_lookup_connection_value (connection,
                                      MHD_HEADER_KIND,
                                      MHD_HTTP_HEADER_AUTHORIZATION);
  if ((auth == NULL) ||
      (0 != strcmp (auth, "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==")))
    {
      /* require: "Aladdin" with password "open sesame" */
      response = MHD_create_response_from_data (strlen (DENIED),
                                                (void *) DENIED, MHD_NO,
                                                MHD_NO);
      MHD_add_response_header (response, MHD_HTTP_HEADER_WWW_AUTHENTICATE,
                               "Basic realm=\"TestRealm\"");
      code = MHD_HTTP_UNAUTHORIZED;
    }
  else
    {
      response = MHD_create_response_from_data (strlen (me),
                                                (void *) me, MHD_NO, MHD_NO);
      code = MHD_HTTP_OK;
    }
  ret = MHD_queue_response (connection, code, response);
  MHD_destroy_response (response);
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 3)
    {
      printf ("%s PORT SECONDS-TO-RUN\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  sleep (atoi (argv[2]));
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/fileserver_example.c.















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file fileserver_example.c
 * @brief minimal example for how to use libmicrohttpd to serve files
 * @author Christian Grothoff
 */

#include "platform.h"
#include <microhttpd.h>
#include <unistd.h>

#define PAGE "<html><head><title>File not found</title></head><body>File not found</body></html>"

static int
file_reader (void *cls, uint64_t pos, char *buf, int max)
{
  FILE *file = cls;

  (void)  fseek (file, pos, SEEK_SET);
  return fread (buf, 1, max, file);
}

static void
free_callback (void *cls)
{
  FILE *file = cls;
  fclose (file);
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data,
	  size_t *upload_data_size, void **ptr)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;
  FILE *file;
  struct stat buf;

  if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  if (0 == stat (&url[1], &buf))
    file = fopen (&url[1], "rb");
  else
    file = NULL;
  if (file == NULL)
    {
      response = MHD_create_response_from_data (strlen (PAGE),
                                                (void *) PAGE,
                                                MHD_NO, MHD_NO);
      ret = MHD_queue_response (connection, MHD_HTTP_NOT_FOUND, response);
      MHD_destroy_response (response);
    }
  else
    {
      response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,     /* 32k page size */
                                                    &file_reader,
                                                    file,
                                                    &free_callback);
      if (response == NULL)
	{
	  fclose (file);
	  return MHD_NO;
	}
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
    }
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 2)
    {
      printf ("%s PORT\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  (void) getc (stdin);
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/fileserver_example_dirs.c.









































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file fileserver_example.c
 * @brief example for how to use libmicrohttpd to serve files (with directory support)
 * @author Christian Grothoff
 */

#include "platform.h"
#include <dirent.h>
#include <microhttpd.h>
#include <unistd.h>

#define PAGE "<html><head><title>File not found</title></head><body>File not found</body></html>"

static int
file_reader (void *cls, uint64_t pos, char *buf, int max)
{
  FILE *file = cls;

  (void) fseek (file, pos, SEEK_SET);
  return fread (buf, 1, max, file);
}

static void
file_free_callback (void *cls)
{
  FILE *file = cls;
  fclose (file);
}

static void
dir_free_callback (void *cls)
{
  DIR *dir = cls;
  if (dir != NULL)
    closedir (dir);
}

static int
dir_reader (void *cls, uint64_t pos, char *buf, int max)
{
  DIR *dir = cls;
  struct dirent *e;

  if (max < 512)
    return 0;
  do
    {
      e = readdir (dir);
      if (e == NULL)
        return -1;
  } while (e->d_name[0] == '.');
  return snprintf (buf, max,
		   "<a href=\"/%s\">%s</a><br>",
		   e->d_name,
		   e->d_name);
}


static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data,
	  size_t *upload_data_size, void **ptr)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;
  FILE *file;
  DIR *dir;
  struct stat buf;
  char emsg[1024];

  if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  if ( (0 == stat (&url[1], &buf)) &&
       (S_ISREG (buf.st_mode)) )
    file = fopen (&url[1], "rb");
  else
    file = NULL;
  if (file == NULL)
    {
      dir = opendir (".");
      if (dir == NULL)
	{
	  /* most likely cause: more concurrent requests than  
	     available file descriptors / 2 */
	  snprintf (emsg,
		    sizeof (emsg),
		    "Failed to open directory `.': %s\n",
		    strerror (errno));
	  response = MHD_create_response_from_data (strlen (emsg),
						    emsg,
						    MHD_NO,
						    MHD_YES);
	  if (response == NULL)
	    return MHD_NO;	    
	  ret = MHD_queue_response (connection, MHD_HTTP_SERVICE_UNAVAILABLE, response);
	  MHD_destroy_response (response);
	}
      else
	{
	  response = MHD_create_response_from_callback (MHD_SIZE_UNKNOWN,
							32 * 1024,
							&dir_reader,
							dir,
							&dir_free_callback);
	  if (response == NULL)
	    {
	      closedir (dir);
	      return MHD_NO;
	    }
	  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
	  MHD_destroy_response (response);
	}
    }
  else
    {
      response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,     /* 32k page size */
                                                    &file_reader,
                                                    file,
                                                    &file_free_callback);
      if (response == NULL)
	{
	  fclose (file);
	  return MHD_NO;
	}
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
    }
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 2)
    {
      printf ("%s PORT\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  (void) getc (stdin);
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/fileserver_example_external_select.c.













































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * @file fileserver_example_external_select.c
 * @brief minimal example for how to use libmicrohttpd to server files
 * @author Christian Grothoff
 */

#include "platform.h"
#include <microhttpd.h>
#include <sys/stat.h>
#include <unistd.h>

#define PAGE "<html><head><title>File not found</title></head><body>File not found</body></html>"

static int
file_reader (void *cls, uint64_t pos, char *buf, int max)
{
  FILE *file = cls;

  (void) fseek (file, pos, SEEK_SET);
  return fread (buf, 1, max, file);
}

static void
free_callback (void *cls)
{
  FILE *file = cls;
  fclose (file);
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data,
	  size_t *upload_data_size, void **ptr)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;
  FILE *file;
  struct stat buf;

  if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  if ( (0 == stat (&url[1], &buf)) &&
       (S_ISREG (buf.st_mode)) )
    file = fopen (&url[1], "rb");
  else
    file = NULL;
  if (file == NULL)
    {
      response = MHD_create_response_from_data (strlen (PAGE),
                                                (void *) PAGE,
                                                MHD_NO, MHD_NO);
      ret = MHD_queue_response (connection, MHD_HTTP_NOT_FOUND, response);
      MHD_destroy_response (response);
    }
  else
    {
      response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,     /* 32k page size */
                                                    &file_reader,
                                                    file,
                                                    &free_callback);
      if (response == NULL)
	{
	  fclose (file);
	  return MHD_NO;
	}
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
    }
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;
  time_t end;
  time_t t;
  struct timeval tv;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  unsigned long long mhd_timeout;

  if (argc != 3)
    {
      printf ("%s PORT SECONDS-TO-RUN\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  end = time (NULL) + atoi (argv[2]);
  while ((t = time (NULL)) < end)
    {
      tv.tv_sec = end - t;
      tv.tv_usec = 0;
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
	break; /* fatal internal error */
      if (MHD_get_timeout (d, &mhd_timeout) == MHD_YES)

        {
          if (tv.tv_sec * 1000 < mhd_timeout)
            {
              tv.tv_sec = mhd_timeout / 1000;
              tv.tv_usec = (mhd_timeout - (tv.tv_sec * 1000)) * 1000;
            }
        }
      select (max + 1, &rs, &ws, &es, &tv);
      MHD_run (d);
    }
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/https_fileserver_example.c.































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * @file https_server_example.c
 * @brief a simple HTTPS file server using TLS.
 *
 * Usage :
 *
 *  'http_fileserver_example HTTP-PORT SECONDS-TO-RUN'
 *
 * The certificate & key are required by the server to operate,  Omitting the
 * path arguments will cause the server to use the hard coded example certificate & key.
 *
 * 'certtool' may be used to generate these if required.
 *
 * @author Sagie Amir
 */

#include "platform.h"
#include <microhttpd.h>
#include <sys/stat.h>
#include <gnutls/gnutls.h>
#include <gcrypt.h>

#define BUF_SIZE 1024
#define MAX_URL_LEN 255

// TODO remove if unused
#define CAFILE "ca.pem"
#define CRLFILE "crl.pem"

#define EMPTY_PAGE "<html><head><title>File not found</title></head><body>File not found</body></html>"

/* Test Certificate */
const char cert_pem[] =
  "-----BEGIN CERTIFICATE-----\n"
  "MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0\n"
  "MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC\n"
  "AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X\n"
  "fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud\n"
  "3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/\n"
  "GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv\n"
  "rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh\n"
  "siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O\n"
  "BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2\n"
  "RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN\n"
  "8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/\n"
  "0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe\n"
  "JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3\n"
  "OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV\n"
  "RhZvQx74NQnS6g==\n" "-----END CERTIFICATE-----\n";

const char key_pem[] =
  "-----BEGIN RSA PRIVATE KEY-----\n"
  "MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf\n"
  "qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I\n"
  "niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+\n"
  "faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx\n"
  "7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ\n"
  "vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj\n"
  "lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R\n"
  "EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l\n"
  "/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx\n"
  "u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/\n"
  "dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo\n"
  "32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc\n"
  "+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd\n"
  "RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6\n"
  "OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob\n"
  "XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF\n"
  "hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae\n"
  "SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b\n"
  "AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH\n"
  "6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3\n"
  "QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG\n"
  "7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj\n"
  "P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9\n"
  "/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC\n"
  "eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx\n"
  "-----END RSA PRIVATE KEY-----\n";

static int
file_reader (void *cls, uint64_t pos, char *buf, int max)
{
  FILE *file = cls;

  (void) fseek (file, pos, SEEK_SET);
  return fread (buf, 1, max, file);
}

static void
file_free_callback (void *cls)
{
  FILE *file = cls;
  fclose (file);
}

/* HTTP access handler call back */
static int
http_ahc (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data,
	  size_t *upload_data_size, void **ptr)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;
  FILE *file;
  struct stat buf;

  if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */

  if ( (0 == stat (url, &buf)) &&
       (S_ISREG (buf.st_mode)) )
    file = fopen (&url[1], "rb");
  else
    file = NULL;
  if (file == NULL)
    {
      response = MHD_create_response_from_data (strlen (EMPTY_PAGE),
                                                (void *) EMPTY_PAGE,
                                                MHD_NO, MHD_NO);
      ret = MHD_queue_response (connection, MHD_HTTP_NOT_FOUND, response);
      MHD_destroy_response (response);
    }
  else
    {
      response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,     /* 32k PAGE_NOT_FOUND size */
                                                    &file_reader, file,
                                                    &file_free_callback);
      if (response == NULL)
	{
	  fclose (file);
	  return MHD_NO;
	}
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
    }
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *TLS_daemon;

  if (argc == 2)
    {
      /* TODO check if this is truly necessary -  disallow usage of the blocking /dev/random */
      /* gcry_control(GCRYCTL_ENABLE_QUICK_RANDOM, 0); */
      TLS_daemon =
        MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG |
                          MHD_USE_SSL, atoi (argv[1]), NULL, NULL, &http_ahc,
                          NULL, MHD_OPTION_CONNECTION_TIMEOUT, 256,
                          MHD_OPTION_HTTPS_MEM_KEY, key_pem,
                          MHD_OPTION_HTTPS_MEM_CERT, cert_pem,
                          MHD_OPTION_END);
    }
  else
    {
      printf ("Usage: %s HTTP-PORT\n", argv[0]);
      return 1;
    }

  if (TLS_daemon == NULL)
    {
      fprintf (stderr, "Error: failed to start TLS_daemon\n");
      return 1;
    }
  else
    {
      printf ("MHD daemon listening on port %d\n", atoi (argv[1]));
    }

  (void) getc (stdin);

  MHD_stop_daemon (TLS_daemon);

  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/minimal_example.c.



























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * @file minimal_example.c
 * @brief minimal example for how to use libmicrohttpd
 * @author Christian Grothoff
 */

#include "platform.h"
#include "microhttpd.h"

#define PAGE "<html><head><title>libmicrohttpd demo</title></head><body>libmicrohttpd demo</body></html>"

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (method, "GET"))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  response = MHD_create_response_from_data (strlen (me),
                                            (void *) me, MHD_NO, MHD_NO);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 2)
    {
      printf ("%s PORT\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  (void) getc (stdin);
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/minimal_example_comet.c.











































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * @file minimal_example.c
 * @brief minimal example for how to generate an infinite stream with libmicrohttpd
 * @author Christian Grothoff
 */

#include "platform.h"
#include <microhttpd.h>

static int
data_generator (void *cls, uint64_t pos, char *buf, int max)
{
  if (max < 80)
    return 0;
  memset (buf, 'A', max - 1);
  buf[79] = '\n';
  return 80;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (method, "GET"))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  response = MHD_create_response_from_callback (-1,
                                                80,
                                                &data_generator, NULL, NULL);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 2)
    {
      printf ("%s PORT\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  (void) getc (stdin);
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/querystring_example.c.



















































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * @file querystring_example.c
 * @brief example for how to get the query string from libmicrohttpd
 *        Call with an URI ending with something like "?q=QUERY"
 * @author Christian Grothoff
 */

#include "platform.h"
#include <microhttpd.h>

#define PAGE "<html><head><title>libmicrohttpd demo</title></head><body>Query string for &quot;%s&quot; was &quot;%s&quot;</body></html>"

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  const char *fmt = cls;
  const char *val;
  char *me;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (method, "GET"))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */
  val = MHD_lookup_connection_value (connection, MHD_GET_ARGUMENT_KIND, "q");
  me = malloc (snprintf (NULL, 0, fmt, "q", val) + 1);
  if (me == NULL)
    return MHD_NO;
  sprintf (me, fmt, "q", val);
  response = MHD_create_response_from_data (strlen (me), me, MHD_YES, MHD_NO);
  if (response == NULL)
    {
      free (me);
      return MHD_NO;
    }
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 2)
    {
      printf ("%s PORT\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  (void) getc (stdin);
  MHD_stop_daemon (d);
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/examples/refuse_post_example.c.







































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
/**
 * @file refuse_post_example.c
 * @brief example for how to refuse a POST request properly
 * @author Christian Grothoff and Sebastian Gerhardt
 */
#include "platform.h"
#include <microhttpd.h>

const char *askpage = "<html><body>\n\
                       Upload a file, please!<br>\n\
                       <form action=\"/filepost\" method=\"post\" enctype=\"multipart/form-data\">\n\
                       <input name=\"file\" type=\"file\">\n\
                       <input type=\"submit\" value=\" Send \"></form>\n\
                       </body></html>";

#define BUSYPAGE "<html><head><title>Webserver busy</title></head><body>We are too busy to process POSTs right now.</body></html>"

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if ((0 != strcmp (method, "GET")) && (0 != strcmp (method, "POST")))
    return MHD_NO;              /* unexpected method */

  if (&aptr != *ptr)
    {
      *ptr = &aptr;

      /* always to busy for POST requests */
      if (0 == strcmp (method, "POST"))
        {
          response = MHD_create_response_from_data (strlen (BUSYPAGE),
                                                    (void *) BUSYPAGE, MHD_NO,
                                                    MHD_NO);
          ret =
            MHD_queue_response (connection, MHD_HTTP_SERVICE_UNAVAILABLE,
                                response);
          MHD_destroy_response (response);
          return ret;
        }
    }

  *ptr = NULL;                  /* reset when done */
  response = MHD_create_response_from_data (strlen (me),
                                            (void *) me, MHD_NO, MHD_NO);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

int
main (int argc, char *const *argv)
{
  struct MHD_Daemon *d;

  if (argc != 2)
    {
      printf ("%s PORT\n", argv[0]);
      return 1;
    }
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        atoi (argv[1]),
                        NULL, NULL, &ahc_echo, (void *) askpage,
                        MHD_OPTION_END);
  if (d == NULL)
    return 1;
  (void) getc (stdin);
  MHD_stop_daemon (d);
  return 0;
}

/* end of refuse_post_example.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/include/Makefile.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/include/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.




pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
subdir = src/include
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
	$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(includedir)"
HEADERS = $(include_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/include
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/include
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../../
top_builddir = ../..
top_srcdir = ../..
SUBDIRS = .
include_HEADERS = microhttpd.h
EXTRA_DIST = platform.h plibc.h
all: all-recursive

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/include/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
install-includeHEADERS: $(include_HEADERS)
	@$(NORMAL_INSTALL)
	test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
	done

uninstall-includeHEADERS:
	@$(NORMAL_UNINSTALL)
	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
	test -n "$$files" || exit 0; \
	echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
	cd "$(DESTDIR)$(includedir)" && rm -f $$files

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile $(HEADERS)
installdirs: installdirs-recursive
installdirs-am:
	for dir in "$(DESTDIR)$(includedir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am: install-includeHEADERS

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am: uninstall-includeHEADERS

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
	install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-am clean clean-generic clean-libtool \
	ctags ctags-recursive distclean distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am \
	install-includeHEADERS install-info install-info-am \
	install-man install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am uninstall-includeHEADERS


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/include/Makefile.am.









>
>
>
>
1
2
3
4
SUBDIRS = .
include_HEADERS = microhttpd.h

EXTRA_DIST = platform.h plibc.h

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/include/Makefile.in.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = src/include
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
	$(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
  for p in $$list; do echo "$$p $$p"; done | \
  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
    if (++n[$$2] == $(am__install_max)) \
      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
    END { for (dir in files) print dir, files[dir] }'
am__base_list = \
  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__installdirs = "$(DESTDIR)$(includedir)"
HEADERS = $(include_HEADERS)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = .
include_HEADERS = microhttpd.h
EXTRA_DIST = platform.h plibc.h
all: all-recursive

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/include/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs
install-includeHEADERS: $(include_HEADERS)
	@$(NORMAL_INSTALL)
	test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
	for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  echo "$$d$$p"; \
	done | $(am__base_list) | \
	while read files; do \
	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
	done

uninstall-includeHEADERS:
	@$(NORMAL_UNINSTALL)
	@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
	test -n "$$files" || exit 0; \
	echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
	cd "$(DESTDIR)$(includedir)" && rm -f $$files

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile $(HEADERS)
installdirs: installdirs-recursive
installdirs-am:
	for dir in "$(DESTDIR)$(includedir)"; do \
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
	done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am: install-includeHEADERS

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am: uninstall-includeHEADERS

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
	install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-am clean clean-generic clean-libtool \
	ctags ctags-recursive distclean distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am \
	install-includeHEADERS install-info install-info-am \
	install-man install-pdf install-pdf-am install-ps \
	install-ps-am install-strip installcheck installcheck-am \
	installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-generic \
	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am uninstall-includeHEADERS


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/include/microhttpd.h.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
/*
     This file is part of libmicrohttpd
     (C) 2006, 2007, 2008, 2009, 2010 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file microhttpd.h
 * @brief public interface to libmicrohttpd
 * @author Christian Grothoff
 * @author Chris GauthierDickey
 *
 * All symbols defined in this header start with MHD.  MHD is a small
 * HTTP daemon library.  As such, it does not have any API for logging
 * errors (you can only enable or disable logging to stderr).  Also,
 * it may not support all of the HTTP features directly, where
 * applicable, portions of HTTP may have to be handled by clients of
 * the library.<p>
 *
 * The library is supposed to handle everything that it must handle
 * (because the API would not allow clients to do this), such as basic
 * connection management; however, detailed interpretations of headers
 * -- such as range requests -- and HTTP methods are left to clients.
 * The library does understand HEAD and will only send the headers of
 * the response and not the body, even if the client supplied a body.
 * The library also understands headers that control connection
 * management (specifically, "Connection: close" and "Expect: 100
 * continue" are understood and handled automatically).<p>
 *
 * MHD understands POST data and is able to decode certain formats
 * (at the moment only "application/x-www-form-urlencoded" and
 * "mulitpart/formdata"). Unsupported encodings and large POST 
 * submissions may require the application to manually process
 * the stream, which is provided to the main application (and thus can be
 * processed, just not conveniently by MHD).<p>
 *
 * The header file defines various constants used by the HTTP protocol.
 * This does not mean that MHD actually interprets all of these
 * values.  The provided constants are exported as a convenience
 * for users of the library.  MHD does not verify that transmitted
 * HTTP headers are part of the standard specification; users of the
 * library are free to define their own extensions of the HTTP
 * standard and use those with MHD.<p>
 *
 * All functions are guaranteed to be completely reentrant and
 * thread-safe (with the exception of 'MHD_set_connection_value',
 * which must only be used in a particular context).<p>
 *
 * NEW: Before including "microhttpd.h" you should add the necessary
 * includes to define the "uint64_t", "size_t", "fd_set", "socklen_t"
 * and "struct sockaddr" data types (which headers are needed may
 * depend on your platform; for possible suggestions consult
 * "platform.h" in the MHD distribution).
 *
 */

#ifndef MHD_MICROHTTPD_H
#define MHD_MICROHTTPD_H

#ifdef __cplusplus
extern "C"
{
#if 0                           /* keep Emacsens' auto-indent happy */
}
#endif
#endif

/**
 * Current version of the library.
 */
#define MHD_VERSION 0x00090000

/**
 * MHD-internal return code for "YES".
 */
#define MHD_YES 1

/**
 * MHD-internal return code for "NO".
 */
#define MHD_NO 0

/**
 * Constant used to indicate unknown size (use when
 * creating a response).
 */
#ifdef UINT64_MAX
#define MHD_SIZE_UNKNOWN UINT64_MAX
#else
#define MHD_SIZE_UNKNOWN  ((uint64_t) -1LL)
#endif

/**
 * HTTP response codes.
 */
#define MHD_HTTP_CONTINUE 100
#define MHD_HTTP_SWITCHING_PROTOCOLS 101
#define MHD_HTTP_PROCESSING 102

#define MHD_HTTP_OK 200
#define MHD_HTTP_CREATED 201
#define MHD_HTTP_ACCEPTED 202
#define MHD_HTTP_NON_AUTHORITATIVE_INFORMATION 203
#define MHD_HTTP_NO_CONTENT 204
#define MHD_HTTP_RESET_CONTENT 205
#define MHD_HTTP_PARTIAL_CONTENT 206
#define MHD_HTTP_MULTI_STATUS 207

#define MHD_HTTP_MULTIPLE_CHOICES 300
#define MHD_HTTP_MOVED_PERMANENTLY 301
#define MHD_HTTP_FOUND 302
#define MHD_HTTP_SEE_OTHER 303
#define MHD_HTTP_NOT_MODIFIED 304
#define MHD_HTTP_USE_PROXY 305
#define MHD_HTTP_SWITCH_PROXY 306
#define MHD_HTTP_TEMPORARY_REDIRECT 307

#define MHD_HTTP_BAD_REQUEST 400
#define MHD_HTTP_UNAUTHORIZED 401
#define MHD_HTTP_PAYMENT_REQUIRED 402
#define MHD_HTTP_FORBIDDEN 403
#define MHD_HTTP_NOT_FOUND 404
#define MHD_HTTP_METHOD_NOT_ALLOWED 405
#define MHD_HTTP_METHOD_NOT_ACCEPTABLE 406
#define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407
#define MHD_HTTP_REQUEST_TIMEOUT 408
#define MHD_HTTP_CONFLICT 409
#define MHD_HTTP_GONE 410
#define MHD_HTTP_LENGTH_REQUIRED 411
#define MHD_HTTP_PRECONDITION_FAILED 412
#define MHD_HTTP_REQUEST_ENTITY_TOO_LARGE 413
#define MHD_HTTP_REQUEST_URI_TOO_LONG 414
#define MHD_HTTP_UNSUPPORTED_MEDIA_TYPE 415
#define MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE 416
#define MHD_HTTP_EXPECTATION_FAILED 417
#define MHD_HTTP_UNPROCESSABLE_ENTITY 422
#define MHD_HTTP_LOCKED 423
#define MHD_HTTP_FAILED_DEPENDENCY 424
#define MHD_HTTP_UNORDERED_COLLECTION 425
#define MHD_HTTP_UPGRADE_REQUIRED 426
#define MHD_HTTP_RETRY_WITH 449

#define MHD_HTTP_INTERNAL_SERVER_ERROR 500
#define MHD_HTTP_NOT_IMPLEMENTED 501
#define MHD_HTTP_BAD_GATEWAY 502
#define MHD_HTTP_SERVICE_UNAVAILABLE 503
#define MHD_HTTP_GATEWAY_TIMEOUT 504
#define MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED 505
#define MHD_HTTP_VARIANT_ALSO_NEGOTIATES 506
#define MHD_HTTP_INSUFFICIENT_STORAGE 507
#define MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED 509
#define MHD_HTTP_NOT_EXTENDED 510

/* See also: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html */
#define MHD_HTTP_HEADER_ACCEPT "Accept"
#define MHD_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset"
#define MHD_HTTP_HEADER_ACCEPT_ENCODING "Accept-Encoding"
#define MHD_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language"
#define MHD_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges"
#define MHD_HTTP_HEADER_AGE "Age"
#define MHD_HTTP_HEADER_ALLOW "Allow"
#define MHD_HTTP_HEADER_AUTHORIZATION "Authorization"
#define MHD_HTTP_HEADER_CACHE_CONTROL "Cache-Control"
#define MHD_HTTP_HEADER_CONNECTION "Connection"
#define MHD_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
#define MHD_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language"
#define MHD_HTTP_HEADER_CONTENT_LENGTH "Content-Length"
#define MHD_HTTP_HEADER_CONTENT_LOCATION "Content-Location"
#define MHD_HTTP_HEADER_CONTENT_MD5 "Content-MD5"
#define MHD_HTTP_HEADER_CONTENT_RANGE "Content-Range"
#define MHD_HTTP_HEADER_CONTENT_TYPE "Content-Type"
#define MHD_HTTP_HEADER_COOKIE "Cookie"
#define MHD_HTTP_HEADER_DATE "Date"
#define MHD_HTTP_HEADER_ETAG "ETag"
#define MHD_HTTP_HEADER_EXPECT "Expect"
#define MHD_HTTP_HEADER_EXPIRES "Expires"
#define MHD_HTTP_HEADER_FROM "From"
#define MHD_HTTP_HEADER_HOST "Host"
#define MHD_HTTP_HEADER_IF_MATCH "If-Match"
#define MHD_HTTP_HEADER_IF_MODIFIED_SINCE "If-Modified-Since"
#define MHD_HTTP_HEADER_IF_NONE_MATCH "If-None-Match"
#define MHD_HTTP_HEADER_IF_RANGE "If-Range"
#define MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE "If-Unmodified-Since"
#define MHD_HTTP_HEADER_LAST_MODIFIED "Last-Modified"
#define MHD_HTTP_HEADER_LOCATION "Location"
#define MHD_HTTP_HEADER_MAX_FORWARDS "Max-Forwards"
#define MHD_HTTP_HEADER_PRAGMA "Pragma"
#define MHD_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate"
#define MHD_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization"
#define MHD_HTTP_HEADER_RANGE "Range"
#define MHD_HTTP_HEADER_REFERER "Referer"
#define MHD_HTTP_HEADER_RETRY_AFTER "Retry-After"
#define MHD_HTTP_HEADER_SERVER "Server"
#define MHD_HTTP_HEADER_SET_COOKIE "Set-Cookie"
#define MHD_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2"
#define MHD_HTTP_HEADER_TE "TE"
#define MHD_HTTP_HEADER_TRAILER "Trailer"
#define MHD_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding"
#define MHD_HTTP_HEADER_UPGRADE "Upgrade"
#define MHD_HTTP_HEADER_USER_AGENT "User-Agent"
#define MHD_HTTP_HEADER_VARY "Vary"
#define MHD_HTTP_HEADER_VIA "Via"
#define MHD_HTTP_HEADER_WARNING "Warning"
#define MHD_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate"

/**
 * HTTP versions (used to match against the first line of the
 * HTTP header as well as in the response code).
 */
#define MHD_HTTP_VERSION_1_0 "HTTP/1.0"
#define MHD_HTTP_VERSION_1_1 "HTTP/1.1"

/**
 * HTTP methods
 */
#define MHD_HTTP_METHOD_CONNECT "CONNECT"
#define MHD_HTTP_METHOD_DELETE "DELETE"
#define MHD_HTTP_METHOD_GET "GET"
#define MHD_HTTP_METHOD_HEAD "HEAD"
#define MHD_HTTP_METHOD_OPTIONS "OPTIONS"
#define MHD_HTTP_METHOD_POST "POST"
#define MHD_HTTP_METHOD_PUT "PUT"
#define MHD_HTTP_METHOD_TRACE "TRACE"

/**
 * HTTP POST encodings, see also
 * http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4
 */
#define MHD_HTTP_POST_ENCODING_FORM_URLENCODED "application/x-www-form-urlencoded"
#define MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA "multipart/form-data"

/**
 * Options for the MHD daemon.  Note that if neither
 * MHD_USER_THREAD_PER_CONNECTION nor MHD_USE_SELECT_INTERNALLY are
 * used, the client wants control over the process and will call the
 * appropriate microhttpd callbacks.<p>
 *
 * Starting the daemon may also fail if a particular option is not
 * implemented or not supported on the target platform (i.e. no
 * support for SSL, threads or IPv6).
 */
enum MHD_FLAG
{
  /**
   * No options selected.
   */
  MHD_NO_FLAG = 0,

  /**
   * Run in debug mode.  If this flag is used, the
   * library should print error messages and warnings
   * to stderr.
   */
  MHD_USE_DEBUG = 1,

  /**
   * Run in https mode.
   */
  MHD_USE_SSL = 2,

  /**
   * Run using one thread per connection.
   */
  MHD_USE_THREAD_PER_CONNECTION = 4,

  /**
   * Run using an internal thread doing SELECT.
   */
  MHD_USE_SELECT_INTERNALLY = 8,

  /**
   * Run using the IPv6 protocol (otherwise, MHD will
   * just support IPv4).
   */
  MHD_USE_IPv6 = 16,

  /**
   * Be pedantic about the protocol (as opposed to as tolerant as
   * possible).  Specifically, at the moment, this flag causes MHD to
   * reject http 1.1 connections without a "Host" header.  This is
   * required by the standard, but of course in violation of the "be
   * as liberal as possible in what you accept" norm.  It is
   * recommended to turn this ON if you are testing clients against
   * MHD, and OFF in production.
   */
  MHD_USE_PEDANTIC_CHECKS = 32,

  /**
   * Use poll instead of select. This allows sockets with fd >= FD_SETSIZE.
   * This option only works in conjunction with MHD_USE_THREAD_PER_CONNECTION
   * (at this point).
   */
  MHD_USE_POLL = 64
};

/**
 * MHD options.  Passed in the varargs portion
 * of MHD_start_daemon.
 */
enum MHD_OPTION
{

  /**
   * No more options / last option.  This is used
   * to terminate the VARARGs list.
   */
  MHD_OPTION_END = 0,

  /**
   * Maximum memory size per connection (followed by a
   * size_t).
   */
  MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1,

  /**
   * Maximum number of concurrent connections to
   * accept (followed by an unsigned int).
   */
  MHD_OPTION_CONNECTION_LIMIT = 2,

  /**
   * After how many seconds of inactivity should a
   * connection automatically be timed out? (followed
   * by an unsigned int; use zero for no timeout).
   */
  MHD_OPTION_CONNECTION_TIMEOUT = 3,

  /**
   * Register a function that should be called whenever a request has
   * been completed (this can be used for application-specific clean
   * up).  Requests that have never been presented to the application
   * (via MHD_AccessHandlerCallback) will not result in
   * notifications.<p>
   *
   * This option should be followed by TWO pointers.  First a pointer
   * to a function of type "MHD_RequestCompletedCallback" and second a
   * pointer to a closure to pass to the request completed callback.
   * The second pointer maybe NULL.
   */
  MHD_OPTION_NOTIFY_COMPLETED = 4,

  /**
   * Limit on the number of (concurrent) connections made to the
   * server from the same IP address.  Can be used to prevent one
   * IP from taking over all of the allowed connections.  If the
   * same IP tries to establish more than the specified number of
   * connections, they will be immediately rejected.  The option
   * should be followed by an "unsigned int".  The default is
   * zero, which means no limit on the number of connections
   * from the same IP address.
   */
  MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5,

  /**
   * Bind daemon to the supplied sockaddr. this option should be followed by a
   * 'struct sockaddr *'.  If 'MHD_USE_IPv6' is specified, the 'struct sockaddr*'
   * should point to a 'struct sockaddr_in6', otherwise to a 'struct sockaddr_in'.
   */
  MHD_OPTION_SOCK_ADDR = 6,

  /**
   * Specify a function that should be called before parsing the URI from
   * the client.  The specified callback function can be used for processing
   * the URI (including the options) before it is parsed.  The URI after
   * parsing will no longer contain the options, which maybe inconvenient for
   * logging.  This option should be followed by two arguments, the first
   * one must be of the form
   * <pre>
   *  void * my_logger(void * cls, const char * uri)
   * </pre>
   * where the return value will be passed as
   * (*con_cls) in calls to the MHD_AccessHandlerCallback
   * when this request is processed later; returning a
   * value of NULL has no special significance (however,
   * note that if you return non-NULL, you can no longer
   * rely on the first call to the access handler having
   * NULL == *con_cls on entry;)
   * "cls" will be set to the second argument following
   * MHD_OPTION_URI_LOG_CALLBACK.  Finally, uri will
   * be the 0-terminated URI of the request.
   */
  MHD_OPTION_URI_LOG_CALLBACK = 7,

  /**
   * Memory pointer for the private key (key.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
   */
  MHD_OPTION_HTTPS_MEM_KEY = 8,

  /**
   * Memory pointer for the certificate (cert.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
   */
  MHD_OPTION_HTTPS_MEM_CERT = 9,

  /**
   * Daemon credentials type.
   * Followed by an argument of type
   * "gnutls_credentials_type_t".
   */
  MHD_OPTION_HTTPS_CRED_TYPE = 10,

  /**
   * Memory pointer to a "const char*" specifying the
   * cipher algorithm (default: "NORMAL").
   */
  MHD_OPTION_HTTPS_PRIORITIES = 11,

  /**
   * Pass a listen socket for MHD to use (systemd-style).  If this
   * option is used, MHD will not open its own listen socket(s). The
   * argument passed must be of type "int" and refer to an
   * existing socket that has been bound to a port and is listening.
   */
  MHD_OPTION_LISTEN_SOCKET = 12,

  /**
   * Use the given function for logging error messages.
   * This option must be followed by two arguments; the
   * first must be a pointer to a function
   * of type "void fun(void * arg, const char * fmt, va_list ap)"
   * and the second a pointer "void*" which will
   * be passed as the "arg" argument to "fun".
   * <p>
   * Note that MHD will not generate any log messages
   * if it was compiled without the "--enable-messages"
   * flag being set.
   */
  MHD_OPTION_EXTERNAL_LOGGER = 13,

  /**
   * Number (unsigned int) of threads in thread pool. Enable
   * thread pooling by setting this value to to something
   * greater than 1. Currently, thread model must be
   * MHD_USE_SELECT_INTERNALLY if thread pooling is enabled
   * (MHD_start_daemon returns NULL for an unsupported thread
   * model).
   */
  MHD_OPTION_THREAD_POOL_SIZE = 14,

  /**
   * Additional options given in an array of "struct MHD_OptionItem".
   * The array must be terminated with an entry '{MHD_OPTION_END, 0, NULL}'.
   * An example for code using MHD_OPTION_ARRAY is:
   * <code>
   * struct MHD_OptionItem ops[] = {
   * { MHD_OPTION_CONNECTION_LIMIT, 100, NULL },
   * { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL },
   * { MHD_OPTION_END, 0, NULL }
   * };
   * d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL,
   *                      MHD_OPTION_ARRAY, ops,
   *                      MHD_OPTION_END);
   * </code>
   * For options that expect a single pointer argument, the
   * second member of the struct MHD_OptionItem is ignored.
   * For options that expect two pointer arguments, the first
   * argument must be cast to 'intptr_t'.
   */
  MHD_OPTION_ARRAY = 15
};


/**
 * Entry in an MHD_OPTION_ARRAY.
 */
struct MHD_OptionItem
{
  /**
   * Which option is being given.  Use MHD_OPTION_END
   * to terminate the array.
   */
  enum MHD_OPTION option;

  /**
   * Option value (for integer arguments, and for options requiring
   * two pointer arguments); should be 0 for options that take no
   * arguments or only a single pointer argument.
   */
  intptr_t value;

  /**
   * Pointer option value (use NULL for options taking no arguments
   * or only an integer option).
   */
  void *ptr_value;

};


/**
 * The MHD_ValueKind specifies the source of
 * the key-value pairs in the HTTP protocol.
 */
enum MHD_ValueKind
{

  /**
   * Response header
   */
  MHD_RESPONSE_HEADER_KIND = 0,

  /**
   * HTTP header.
   */
  MHD_HEADER_KIND = 1,

  /**
   * Cookies.  Note that the original HTTP header containing
   * the cookie(s) will still be available and intact.
   */
  MHD_COOKIE_KIND = 2,

  /**
   * POST data.  This is available only if a content encoding
   * supported by MHD is used (currently only URL encoding),
   * and only if the posted content fits within the available
   * memory pool.  Note that in that case, the upload data
   * given to the MHD_AccessHandlerCallback will be
   * empty (since it has already been processed).
   */
  MHD_POSTDATA_KIND = 4,

  /**
   * GET (URI) arguments.
   */
  MHD_GET_ARGUMENT_KIND = 8,

  /**
   * HTTP footer (only for http 1.1 chunked encodings).
   */
  MHD_FOOTER_KIND = 16
};

/**
 * The MHD_RequestTerminationCode specifies reasons
 * why a request has been terminated (or completed).
 */
enum MHD_RequestTerminationCode
{

  /**
   * We finished sending the response.
   */
  MHD_REQUEST_TERMINATED_COMPLETED_OK = 0,

  /**
   * Error handling the connection (resources
   * exhausted, other side closed connection,
   * application error accepting request, etc.)
   */
  MHD_REQUEST_TERMINATED_WITH_ERROR = 1,

  /**
   * No activity on the connection for the number
   * of seconds specified using
   * MHD_OPTION_CONNECTION_TIMEOUT.
   */
  MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2,

  /**
   * We had to close the session since MHD was being
   * shut down.
   */
  MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3

};


/**
 * Values of this enum are used to specify what
 * information about a connection is desired.
 */
enum MHD_ConnectionInfoType
{
  /**
   * What cipher algorithm is being used.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CIPHER_ALGO,

  /**
   *
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_PROTOCOL,

  /**
   * Obtain IP address of the client.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CLIENT_ADDRESS,

  /**
   * Get the GNUTLS session handle.
   */
  MHD_CONNECTION_INFO_GNUTLS_SESSION
};

/**
 * Values of this enum are used to specify what
 * information about a deamon is desired.
 */
enum MHD_DaemonInfoType
{
  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_CipherAlgorithm').
   */
  MHD_DAEMON_INFO_KEY_SIZE,

  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_HashAlgorithm').
   */
  MHD_DAEMON_INFO_MAC_KEY_SIZE,

  /**
   * Request the file descriptor for the listening socket.
   * No extra arguments should be passed.
   */
  MHD_DAEMON_INFO_LISTEN_FD
};



/**
 * Handle for the daemon (listening on a socket for HTTP traffic).
 */
struct MHD_Daemon;

/**
 * Handle for a connection / HTTP request.  With HTTP/1.1, multiple
 * requests can be run over the same connection.  However, MHD will
 * only show one request per TCP connection to the client at any given
 * time.
 */
struct MHD_Connection;

/**
 * Handle for a response.
 */
struct MHD_Response;

/**
 * Handle for POST processing.
 */
struct MHD_PostProcessor;

/**
 * Callback for serious error condition. The default action is to abort().
 * @param cls user specified value
 * @param file where the error occured
 * @param line where the error occured
 * @param reason error detail, may be NULL
 */
typedef void (*MHD_PanicCallback) (void *cls,
                                   const char *file,
                                   unsigned int line,
                                   const char *reason);

/**
 * Allow or deny a client to connect.
 *
 * @param addr address information from the client
 * @param addrlen length of the address information
 * @return MHD_YES if connection is allowed, MHD_NO if not
 */
typedef int
  (*MHD_AcceptPolicyCallback) (void *cls,
                               const struct sockaddr * addr,
                               socklen_t addrlen);

/**
 * A client has requested the given url using the given method ("GET",
 * "PUT", "DELETE", "POST", etc).  The callback must call MHS
 * callbacks to provide content to give back to the client and return
 * an HTTP status code (i.e. 200 for OK, 404, etc.).
 *
 * @param cls argument given together with the function
 *        pointer when the handler was registered with MHD
 * @param url the requested url
 * @param method the HTTP method used ("GET", "PUT", etc.)
 * @param version the HTTP version string (i.e. "HTTP/1.1")
 * @param upload_data the data being uploaded (excluding HEADERS,
 *        for a POST that fits into memory and that is encoded
 *        with a supported encoding, the POST data will NOT be
 *        given in upload_data and is instead available as
 *        part of MHD_get_connection_values; very large POST
 *        data *will* be made available incrementally in
 *        upload_data)
 * @param upload_data_size set initially to the size of the
 *        upload_data provided; the method must update this
 *        value to the number of bytes NOT processed;
 * @param con_cls pointer that the callback can set to some
 *        address and that will be preserved by MHD for future
 *        calls for this request; since the access handler may
 *        be called many times (i.e., for a PUT/POST operation
 *        with plenty of upload data) this allows the application
 *        to easily associate some request-specific state.
 *        If necessary, this state can be cleaned up in the
 *        global "MHD_RequestCompleted" callback (which
 *        can be set with the MHD_OPTION_NOTIFY_COMPLETED).
 *        Initially, <tt>*con_cls</tt> will be NULL.
 * @return MHS_YES if the connection was handled successfully,
 *         MHS_NO if the socket must be closed due to a serios
 *         error while handling the request
 */
typedef int
  (*MHD_AccessHandlerCallback) (void *cls,
                                struct MHD_Connection * connection,
                                const char *url,
                                const char *method,
                                const char *version,
                                const char *upload_data,
                                size_t *upload_data_size,
                                void **con_cls);

/**
 * Signature of the callback used by MHD to notify the
 * application about completed requests.
 *
 * @param cls client-defined closure
 * @param connection connection handle
 * @param con_cls value as set by the last call to
 *        the MHD_AccessHandlerCallback
 * @param toe reason for request termination
 * @see MHD_OPTION_NOTIFY_COMPLETED
 */
typedef void
  (*MHD_RequestCompletedCallback) (void *cls,
                                   struct MHD_Connection * connection,
                                   void **con_cls,
                                   enum MHD_RequestTerminationCode toe);

/**
 * Iterator over key-value pairs.  This iterator
 * can be used to iterate over all of the cookies,
 * headers, or POST-data fields of a request, and
 * also to iterate over the headers that have been
 * added to a response.
 *
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_KeyValueIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key, const char *value);

/**
 * Callback used by libmicrohttpd in order to obtain content.  The
 * callback is to copy at most "max" bytes of content into "buf".  The
 * total number of bytes that has been placed into "buf" should be
 * returned.<p>
 *
 * Note that returning zero will cause libmicrohttpd to try again,
 * either "immediately" if in multi-threaded mode (in which case the
 * callback may want to do blocking operations) or in the next round
 * if MHD_run is used.  Returning 0 for a daemon that runs in internal
 * select mode is an error (since it would result in busy waiting) and
 * will cause the program to be aborted (abort()).
 *
 * @param cls extra argument to the callback
 * @param pos position in the datastream to access;
 *        note that if an MHD_Response object is re-used,
 *        it is possible for the same content reader to
 *        be queried multiple times for the same data;
 *        however, if an MHD_Response is not re-used,
 *        libmicrohttpd guarantees that "pos" will be
 *        the sum of all non-negative return values
 *        obtained from the content reader so far.
 * @return -1 for the end of transmission (or on error);
 *  if a content transfer size was pre-set and the callback
 *  has provided fewer than that amount of data,
 *  MHD will close the connection with the client;
 *  if no content size was specified and this is an
 *  http 1.1 connection using chunked encoding, MHD will
 *  interpret "-1" as the normal end of the transfer
 *  (possibly allowing the client to perform additional
 *  requests using the same TCP connection).
 */
typedef int
  (*MHD_ContentReaderCallback) (void *cls,
				uint64_t pos,
				char *buf,
				int max);

/**
 * This method is called by libmicrohttpd if we
 * are done with a content reader.  It should
 * be used to free resources associated with the
 * content reader.
 */
typedef void (*MHD_ContentReaderFreeCallback) (void *cls);

/**
 * Iterator over key-value pairs where the value
 * maybe made available in increments and/or may
 * not be zero-terminated.  Used for processing
 * POST data.
 *
 * @param cls user-specified closure
 * @param kind type of the value
 * @param key 0-terminated key for the value
 * @param filename name of the uploaded file, NULL if not known
 * @param content_type mime-type of the data, NULL if not known
 * @param transfer_encoding encoding of the data, NULL if not known
 * @param data pointer to size bytes of data at the
 *              specified offset
 * @param off offset of data in the overall value
 * @param size number of bytes in data available
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_PostDataIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key,
                           const char *filename,
                           const char *content_type,
                           const char *transfer_encoding,
                           const char *data, uint64_t off, size_t size);

/* **************** Daemon handling functions ***************** */

/**
 * Start a webserver on the given port.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @param ... list of options (type-value pairs,
 *        terminated with MHD_OPTION_END).
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon_va (unsigned int options,
                                        unsigned short port,
                                        MHD_AcceptPolicyCallback apc,
                                        void *apc_cls,
                                        MHD_AccessHandlerCallback dh,
                                        void *dh_cls, va_list ap);

/**
 * Start a webserver on the given port.  Variadic version of
 * MHD_start_daemon_va.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon (unsigned int flags,
                                     unsigned short port,
                                     MHD_AcceptPolicyCallback apc,
                                     void *apc_cls,
                                     MHD_AccessHandlerCallback dh,
                                     void *dh_cls, ...);

/**
 * Shutdown an http daemon.
 *
 * @param daemon daemon to stop
 */
void MHD_stop_daemon (struct MHD_Daemon *daemon);


/**
 * Obtain the select sets for this daemon.
 *
 * @param daemon daemon to get sets from
 * @param read_fd_set read set
 * @param write_fd_set write set
 * @param except_fd_set except set
 * @param max_fd increased to largest FD added (if larger
 *               than existing value); can be NULL
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int
MHD_get_fdset (struct MHD_Daemon *daemon,
               fd_set * read_fd_set,
               fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd);

/**
 * Obtain timeout value for select for this daemon
 * (only needed if connection timeout is used).  The
 * returned value is how long select should at most
 * block, not the timeout value set for connections.
 *
 * @param daemon daemon to query for timeout
 * @param timeout set to the timeout (in milliseconds)
 * @return MHD_YES on success, MHD_NO if timeouts are
 *        not used (or no connections exist that would
 *        necessiate the use of a timeout right now).
 */
int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout);


/**
 * Run webserver operations (without blocking unless
 * in client callbacks).  This method should be called
 * by clients in combination with MHD_get_fdset
 * if the client-controlled select method is used.
 *
 * @param daemon daemon to run
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int MHD_run (struct MHD_Daemon *daemon);


/* **************** Connection handling functions ***************** */

/**
 * Get all of the headers from the request.
 *
 * @param connection connection to get values from
 * @param kind types of values to iterate over
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_connection_values (struct MHD_Connection *connection,
                           enum MHD_ValueKind kind,
                           MHD_KeyValueIterator iterator, void *iterator_cls);

/**
 * This function can be used to add an entry to
 * the HTTP headers of a connection (so that the
 * MHD_get_connection_values function will return
 * them -- and the MHD PostProcessor will also
 * see them).  This maybe required in certain
 * situations (see Mantis #1399) where (broken)
 * HTTP implementations fail to supply values needed
 * by the post processor (or other parts of the
 * application).
 * <p>
 * This function MUST only be called from within
 * the MHD_AccessHandlerCallback (otherwise, access
 * maybe improperly synchronized).  Furthermore,
 * the client must guarantee that the key and
 * value arguments are 0-terminated strings that
 * are NOT freed until the connection is closed.
 * (The easiest way to do this is by passing only
 * arguments to permanently allocated strings.).
 *
 * @param connection the connection for which a
 *  value should be set
 * @param kind kind of the value
 * @param key key for the value
 * @param value the value itself
 * @return MHD_NO if the operation could not be
 *         performed due to insufficient memory;
 *         MHD_YES on success
 */
int
MHD_set_connection_value (struct MHD_Connection *connection,
                          enum MHD_ValueKind kind,
                          const char *key, const char *value);

/**
 * Sets the global error handler to a different implementation.  "cb"
 * will only be called in the case of typically fatal, serious
 * internal consistency issues.  These issues should only arise in the
 * case of serious memory corruption or similar problems with the
 * architecture.  While "cb" is allowed to return and MHD will then
 * try to continue, this is never safe.
 *
 * The default implementation that is used if no panic function is set
 * simply calls "abort".  Alternative implementations might call
 * "exit" or other similar functions.
 *
 * @param cb new error handler
 * @param cls passed to error handler
 */
void MHD_set_panic_func (MHD_PanicCallback cb, void *cls);

/**
 * Get a particular header value.  If multiple
 * values match the kind, return any one of them.
 *
 * @param connection connection to get values from
 * @param kind what kind of value are we looking for
 * @param key the header to look for
 * @return NULL if no such item was found
 */
const char *MHD_lookup_connection_value (struct MHD_Connection *connection,
                                         enum MHD_ValueKind kind,
                                         const char *key);

/**
 * Queue a response to be transmitted to the client (as soon as
 * possible but after MHD_AccessHandlerCallback returns).
 *
 * @param connection the connection identifying the client
 * @param status_code HTTP status code (i.e. 200 for OK)
 * @param response response to transmit
 * @return MHD_NO on error (i.e. reply already sent),
 *         MHD_YES on success or if message has been queued
 */
int
MHD_queue_response (struct MHD_Connection *connection,
                    unsigned int status_code, struct MHD_Response *response);


/* **************** Response manipulation functions ***************** */

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response, MHD_SIZE_UNKNOWN for unknown
 * @param block_size preferred block size for querying crc (advisory only,
 *                   MHD may still call crc using smaller chunks); this
 *                   is essentially the buffer size used for IO, clients
 *                   should pick a value that is appropriate for IO and
 *                   memory performance requirements
 * @param crc callback to use to obtain response data
 * @param crc_cls extra argument to crc
 * @param crfc callback to call to free crc_cls resources
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_callback (uint64_t size,
                                                        size_t block_size,
                                                        MHD_ContentReaderCallback
                                                        crc, void *crc_cls,
                                                        MHD_ContentReaderFreeCallback
                                                        crfc);

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param data the data itself
 * @param must_free libmicrohttpd should free data when done
 * @param must_copy libmicrohttpd must make a copy of data
 *        right away, the data maybe released anytime after
 *        this call returns
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_data (size_t size,
                                                    void *data,
                                                    int must_free,
                                                    int must_copy);


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param fd file descriptor referring to a file on disk with the data; will be closed when response is destroyed
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_fd (size_t size,
						  int fd);

/**
 * Destroy a response object and associated resources.  Note that
 * libmicrohttpd may keep some of the resources around if the response
 * is still in the queue for some clients, so the memory may not
 * necessarily be freed immediatley.
 *
 * @param response response to destroy
 */
void MHD_destroy_response (struct MHD_Response *response);

/**
 * Add a header line to the response.
 *
 * @param response response to add a header to
 * @param header the header to add
 * @param content value to add
 * @return MHD_NO on error (i.e. invalid header or content format),
 *         or out of memory
 */
int
MHD_add_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Delete a header line from the response.
 *
 * @param response response to remove a header from
 * @param header the header to delete
 * @param content value to delete
 * @return MHD_NO on error (no such header known)
 */
int
MHD_del_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Get all of the headers added to a response.
 *
 * @param response response to query
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_response_headers (struct MHD_Response *response,
                          MHD_KeyValueIterator iterator, void *iterator_cls);


/**
 * Get a particular header from the response.
 *
 * @param response response to query
 * @param key which header to get
 * @return NULL if header does not exist
 */
const char *MHD_get_response_header (struct MHD_Response *response,
                                     const char *key);


/* ********************** PostProcessor functions ********************** */

/**
 * Create a PostProcessor.
 *
 * A PostProcessor can be used to (incrementally) parse the data
 * portion of a POST request.  Note that some buggy browsers fail to
 * set the encoding type.  If you want to support those, you may have
 * to call 'MHD_set_connection_value' with the proper encoding type
 * before creating a post processor (if no supported encoding type is
 * set, this function will fail).
 *
 * @param connection the connection on which the POST is
 *        happening (used to determine the POST format)
 * @param buffer_size maximum number of bytes to use for
 *        internal buffering (used only for the parsing,
 *        specifically the parsing of the keys).  A
 *        tiny value (256-1024) should be sufficient.
 *        Do NOT use a value smaller than 256.
 * @param iter iterator to be called with the parsed data,
 *        Must NOT be NULL.
 * @param cls first argument to ikvi
 * @return  NULL on error (out of memory, unsupported encoding),
            otherwise a PP handle
 */
struct MHD_PostProcessor *MHD_create_post_processor (struct MHD_Connection
                                                     *connection,
                                                     size_t buffer_size,
                                                     MHD_PostDataIterator
                                                     iter, void *cls);

/**
 * Parse and process POST data.
 * Call this function when POST data is available
 * (usually during an MHD_AccessHandlerCallback)
 * with the upload_data and upload_data_size.
 * Whenever possible, this will then cause calls
 * to the MHD_IncrementalKeyValueIterator.
 *
 * @param pp the post processor
 * @param post_data post_data_len bytes of POST data
 * @param post_data_len length of post_data
 * @return MHD_YES on success, MHD_NO on error
 *         (out-of-memory, iterator aborted, parse error)
 */
int
MHD_post_process (struct MHD_PostProcessor *pp,
                  const char *post_data, size_t post_data_len);

/**
 * Release PostProcessor resources.
 *
 * @param pp the PostProcessor to destroy
 * @return MHD_YES if processing completed nicely,
 *         MHD_NO if there were spurious characters / formatting
 *                problems; it is common to ignore the return
 *                value of this function
 */
int MHD_destroy_post_processor (struct MHD_PostProcessor *pp);



/* ********************** generic query functions ********************** */

/**
 * Information about a connection.
 */
union MHD_ConnectionInfo
{

  /**
   * Cipher algorithm used, of type "enum gnutls_cipher_algorithm".
   */
  int /* enum gnutls_cipher_algorithm */ cipher_algorithm;

  /**
   * Protocol used, of type "enum gnutls_protocol".
   */
  int /* enum gnutls_protocol */ protocol;

  /**
   * GNUtls session handle, of type "gnutls_session_t".
   */
  void * /* gnutls_session_t */ tls_session;

  /**
   * Address information for the client.
   */
  struct sockaddr_in * client_addr;
};

/**
 * Obtain information about the given connection.
 *
 * @param connection what connection to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_ConnectionInfo *MHD_get_connection_info (struct MHD_Connection
                                                         *connection,
                                                         enum
                                                         MHD_ConnectionInfoType
                                                         infoType, ...);


/**
 * Information about an MHD daemon.
 */
union MHD_DaemonInfo
{
  /**
   * Size of the key (unit??)
   */
  size_t key_size;

  /**
   * Size of the mac key (unit??)
   */
  size_t mac_key_size;

  /**
   * Listen socket file descriptor
   */
  int listen_fd;
};

/**
 * Obtain information about the given daemon
 * (not fully implemented!).
 *
 * @param daemon what daemon to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_DaemonInfo *MHD_get_daemon_info (struct MHD_Daemon *daemon,
                                                 enum MHD_DaemonInfoType
                                                 infoType, ...);

/**
 * Obtain the version of this library
 *
 * @return static version string, e.g. "0.4.1"
 */
const char* MHD_get_version(void);

#if 0                           /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/include/platform.h.







































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file platform.h
 * @brief platform-specific includes for libmicrohttpd
 * @author Christian Grothoff
 *
 * This file is included by the libmicrohttpd code
 * before "microhttpd.h"; it provides the required
 * standard headers (which are platform-specific).<p>
 *
 * Note that this file depends on our configure.ac
 * build process and the generated config.h file.
 * Hence you cannot include it directly in applications
 * that use libmicrohttpd.
 */
#ifndef PLATFORM_H
#define PLATFORM_H

#include "MHD_config.h"

#define _XOPEN_SOURCE_EXTENDED  1
#if OS390
#define _OPEN_THREADS
#define _OPEN_SYS_SOCK_IPV6
#define _OPEN_MSGQ_EXT
#define _LP64
#endif

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#if !defined(MINGW) && !defined(__SYMBIAN32__)
#include <search.h>
#endif
#include <stddef.h>
#undef HAVE_CONFIG_H
#include <pthread.h>
#define HAVE_CONFIG_H 1

/* different OSes have fd_set in
   a broad range of header files;
   we just include most of them (if they
   are available) */


#ifdef OS_VXWORKS
#include <sockLib.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <sys/mman.h>
#define RESTRICT __restrict__
#endif

#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#if HAVE_SYS_MSG_H
#include <sys/msg.h>
#endif
#if HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
#if HAVE_NETDB_H
#include <netdb.h>
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_TIME_H
#include <time.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#if HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif

#include "plibc.h"


#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/include/plibc.h.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
/*
     This file is part of PlibC.
     (C) 2005, 2006, 2007, 2008, 2009 Nils Durner (and other contributing authors)

	   This library is free software; you can redistribute it and/or
	   modify it under the terms of the GNU Lesser General Public
	   License as published by the Free Software Foundation; either
	   version 2.1 of the License, or (at your option) any later version.

	   This library is distributed in the hope that it will be useful,
	   but WITHOUT ANY WARRANTY; without even the implied warranty of
	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	   Lesser General Public License for more details.

	   You should have received a copy of the GNU Lesser General Public
	   License along with this library; if not, write to the Free Software
	   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/**
 * @file include/plibc.h
 * @brief PlibC header
 * @attention This file is usually not installed under Unix,
 *            so ship it with your application
 * @version $Revision: 39 $
 */

#ifndef _PLIBC_H_
#define _PLIBC_H_

#ifndef SIGALRM
#define SIGALRM 14
#endif

#ifdef __cplusplus
extern "C"
{
#endif

#include <stddef.h>

#ifdef Q_OS_WIN32
#define WINDOWS 1
#endif

#define HAVE_PLIBC_FD 0

#ifdef WINDOWS

#if ENABLE_NLS
#include "langinfo.h"
#endif

#include <windows.h>
#include <Ws2tcpip.h>
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <stdarg.h>

#define __BYTE_ORDER BYTE_ORDER
#define __BIG_ENDIAN BIG_ENDIAN

/* Conflicts with our definitions */
#define __G_WIN32_H__

/* Convert LARGE_INTEGER to double */
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + \
  (double)((x).LowPart))

#define socklen_t int
#define ssize_t int
#define off_t int
#define int64_t long long
#define int32_t long

  struct stat64
  {
    _dev_t st_dev;
    _ino_t st_ino;
    _mode_t st_mode;
    short st_nlink;
    short st_uid;
    short st_gid;
    _dev_t st_rdev;
    __int64 st_size;
    __time64_t st_atime;
    __time64_t st_mtime;
    __time64_t st_ctime;
  };

#ifndef pid_t
#define pid_t int
#endif

#ifndef WEXITSTATUS
#define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
#endif

#ifndef MSG_DONTWAIT
#define MSG_DONTWAIT 0
#endif

/* Thanks to the Cygwin project */
#define ENOCSI 43               /* No CSI structure available */
#define EL2HLT 44               /* Level 2 halted */
#ifndef  EDEADLK
#define EDEADLK 45              /* Deadlock condition */
#endif
#ifndef  ENOLCK
#define ENOLCK 46               /* No record locks available */
#endif
#define EBADE 50                /* Invalid exchange */
#define EBADR 51                /* Invalid request descriptor */
#define EXFULL 52               /* Exchange full */
#define ENOANO 53               /* No anode */
#define EBADRQC 54              /* Invalid request code */
#define EBADSLT 55              /* Invalid slot */
#ifndef  EDEADLOCK
#define EDEADLOCK EDEADLK       /* File locking deadlock error */
#endif
#define EBFONT 57               /* Bad font file fmt */
#define ENOSTR 60               /* Device not a stream */
#define ENODATA 61              /* No data (for no delay io) */
#define ETIME 62                /* Timer expired */
#define ENOSR 63                /* Out of streams resources */
#define ENONET 64               /* Machine is not on the network */
#define ENOPKG 65               /* Package not installed */
#define EREMOTE 66              /* The object is remote */
#define ENOLINK 67              /* The link has been severed */
#define EADV 68                 /* Advertise error */
#define ESRMNT 69               /* Srmount error */
#define ECOMM 70                /* Communication error on send */
#define EPROTO 71               /* Protocol error */
#define EMULTIHOP 74            /* Multihop attempted */
#define ELBIN 75                /* Inode is remote (not really error) */
#define EDOTDOT 76              /* Cross mount point (not really error) */
#define EBADMSG 77              /* Trying to read unreadable message */
#define ENOTUNIQ 80             /* Given log. name not unique */
#define EBADFD 81               /* f.d. invalid for this operation */
#define EREMCHG 82              /* Remote address changed */
#define ELIBACC 83              /* Can't access a needed shared lib */
#define ELIBBAD 84              /* Accessing a corrupted shared lib */
#define ELIBSCN 85              /* .lib section in a.out corrupted */
#define ELIBMAX 86              /* Attempting to link in too many libs */
#define ELIBEXEC 87             /* Attempting to exec a shared library */
#ifndef  ENOSYS
#define ENOSYS 88               /* Function not implemented */
#endif
#define ENMFILE 89              /* No more files */
#ifndef  ENOTEMPTY
#define ENOTEMPTY 90            /* Directory not empty */
#endif
#ifndef  ENAMETOOLONG
#define ENAMETOOLONG 91         /* File or path name too long */
#endif
#define ELOOP 92                /* Too many symbolic links */
#define EOPNOTSUPP 95           /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96         /* Protocol family not supported */
#define ECONNRESET 104          /* Connection reset by peer */
#define ENOBUFS 105             /* No buffer space available */
#define EAFNOSUPPORT 106        /* Address family not supported by protocol family */
#define EPROTOTYPE 107          /* Protocol wrong type for socket */
#define ENOTSOCK 108            /* Socket operation on non-socket */
#define ENOPROTOOPT 109         /* Protocol not available */
#define ESHUTDOWN 110           /* Can't send after socket shutdown */
#define ECONNREFUSED 111        /* Connection refused */
#define EADDRINUSE 112          /* Address already in use */
#define ECONNABORTED 113        /* Connection aborted */
#define ENETUNREACH 114         /* Network is unreachable */
#define ENETDOWN 115            /* Network interface is not configured */
#ifndef  ETIMEDOUT
#define ETIMEDOUT 116           /* Connection timed out */
#endif
#define EHOSTDOWN 117           /* Host is down */
#define EHOSTUNREACH 118        /* Host is unreachable */
#define EINPROGRESS 119         /* Connection already in progress */
#define EALREADY 120            /* Socket already connected */
#define EDESTADDRREQ 121        /* Destination address required */
#define EMSGSIZE 122            /* Message too long */
#define EPROTONOSUPPORT 123     /* Unknown protocol */
#define ESOCKTNOSUPPORT 124     /* Socket type not supported */
#define EADDRNOTAVAIL 125       /* Address not available */
#define ENETRESET 126           /* Connection aborted by network */
#define EISCONN 127             /* Socket is already connected */
#define ENOTCONN 128            /* Socket is not connected */
#define ETOOMANYREFS 129        /* Too many references: cannot splice */
#define EPROCLIM 130            /* Too many processes */
#define EUSERS 131              /* Too many users */
#define EDQUOT 132              /* Disk quota exceeded */
#define ESTALE 133              /* Unknown error */
#ifndef  ENOTSUP
#define ENOTSUP 134             /* Not supported */
#endif
#define ENOMEDIUM 135           /* No medium (in tape drive) */
#define ENOSHARE 136            /* No such host or network path */
#define ECASECLASH 137          /* Filename exists with different case */
#define EWOULDBLOCK EAGAIN      /* Operation would block */
#define EOVERFLOW 139           /* Value too large for defined data type */

#undef HOST_NOT_FOUND
#define HOST_NOT_FOUND 1
#undef TRY_AGAIN
#define TRY_AGAIN 2
#undef NO_RECOVERY
#define NO_RECOVERY 3
#undef NO_ADDRESS
#define NO_ADDRESS 4

#define PROT_READ   0x1
#define PROT_WRITE  0x2
#define MAP_SHARED  0x1
#define MAP_PRIVATE 0x2         /* unsupported */
#define MAP_FIXED   0x10
#define MAP_FAILED  ((void *)-1)

  struct statfs
  {
    long f_type;                /* type of filesystem (see below) */
    long f_bsize;               /* optimal transfer block size */
    long f_blocks;              /* total data blocks in file system */
    long f_bfree;               /* free blocks in fs */
    long f_bavail;              /* free blocks avail to non-superuser */
    long f_files;               /* total file nodes in file system */
    long f_ffree;               /* free file nodes in fs */
    long f_fsid;                /* file system id */
    long f_namelen;             /* maximum length of filenames */
    long f_spare[6];            /* spare for later */
  };

  extern const struct in6_addr in6addr_any;     /* :: */
  extern const struct in6_addr in6addr_loopback;        /* ::1 */

/* Taken from the Wine project <http://www.winehq.org>
    /wine/include/winternl.h */
  enum SYSTEM_INFORMATION_CLASS
  {
    SystemBasicInformation = 0,
    Unknown1,
    SystemPerformanceInformation = 2,
    SystemTimeOfDayInformation = 3,     /* was SystemTimeInformation */
    Unknown4,
    SystemProcessInformation = 5,
    Unknown6,
    Unknown7,
    SystemProcessorPerformanceInformation = 8,
    Unknown9,
    Unknown10,
    SystemDriverInformation,
    Unknown12,
    Unknown13,
    Unknown14,
    Unknown15,
    SystemHandleList,
    Unknown17,
    Unknown18,
    Unknown19,
    Unknown20,
    SystemCacheInformation,
    Unknown22,
    SystemInterruptInformation = 23,
    SystemExceptionInformation = 33,
    SystemRegistryQuotaInformation = 37,
    SystemLookasideInformation = 45
  };

  typedef struct
  {
    LARGE_INTEGER IdleTime;
    LARGE_INTEGER KernelTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER Reserved1[2];
    ULONG Reserved2;
  } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;

#define sleep(secs) (Sleep(secs * 1000))

/*********************** statfs *****************************/
/* fake block size */
#define FAKED_BLOCK_SIZE 512

/* linux-compatible values for fs type */
#define MSDOS_SUPER_MAGIC     0x4d44
#define NTFS_SUPER_MAGIC      0x5346544E

/*********************** End of statfs ***********************/

#define SHUT_RDWR SD_BOTH

/* Operations for flock() */
#define LOCK_SH  1              /* shared lock */
#define LOCK_EX  2              /* exclusive lock */
#define LOCK_NB  4              /* or'd with one of the above to prevent
                                   blocking */
#define LOCK_UN  8              /* remove lock */

/* Not supported under MinGW */
#define S_IRGRP 0
#define S_IWGRP 0
#define S_IROTH 0
#define S_IXGRP 0
#define S_IWOTH 0
#define S_IXOTH 0
#define S_ISUID 0
#define S_ISGID 0
#define S_ISVTX 0
#define S_IRWXG 0
#define S_IRWXO 0

#define SHUT_WR SD_SEND
#define SHUT_RD SD_RECEIVE
#define SHUT_RDWR SD_BOTH

#define SIGKILL 9
#define SIGTERM 15

#define SetErrnoFromWinError(e) _SetErrnoFromWinError(e, __FILE__, __LINE__)

  BOOL _plibc_CreateShortcut (const char *pszSrc, const char *pszDest);
  BOOL _plibc_DereferenceShortcut (char *pszShortcut);
  char *plibc_ChooseDir (char *pszTitle, unsigned long ulFlags);
  char *plibc_ChooseFile (char *pszTitle, unsigned long ulFlags);
  long QueryRegistry (HKEY hMainKey, char *pszKey, char *pszSubKey,
                      char *pszBuffer, long *pdLength);

  BOOL __win_IsHandleMarkedAsBlocking (SOCKET hHandle);
  void __win_SetHandleBlockingMode (SOCKET s, BOOL bBlocking);
  void __win_DiscardHandleBlockingMode (SOCKET s);
  int _win_isSocketValid (int s);
  int plibc_conv_to_win_path (const char *pszUnix, char *pszWindows);
  unsigned plibc_get_handle_count ();

  typedef void (*TPanicProc) (int, char *);
  void plibc_set_panic_proc (TPanicProc proc);

  int flock (int fd, int operation);
  int fsync (int fildes);
  int inet_pton (int af, const char *src, void *dst);
  int inet_pton4 (const char *src, u_char * dst, int pton);
#if USE_IPV6
  int inet_pton6 (const char *src, u_char * dst);
#endif
  int truncate (const char *fname, int distance);
  int statfs (const char *path, struct statfs *buf);
  const char *hstrerror (int err);
  int mkstemp (char *tmplate);
  char *strptime (const char *buf, const char *format, struct tm *tm);
  const char *inet_ntop (int af, const void *src, char *dst, size_t size);

  int plibc_init (char *pszOrg, char *pszApp);
  void plibc_shutdown ();
  int plibc_initialized ();
  int plibc_conv_to_win_path_ex (const char *pszUnix, char *pszWindows,
                                 int derefLinks);
  void _SetErrnoFromWinError (long lWinError, char *pszCaller, int iLine);
  void SetErrnoFromWinsockError (long lWinError);
  void SetHErrnoFromWinError (long lWinError);
  void SetErrnoFromHRESULT (HRESULT hRes);
  int GetErrnoFromWinsockError (long lWinError);
  FILE *_win_fopen (const char *filename, const char *mode);
  DIR *_win_opendir (const char *dirname);
  int _win_open (const char *filename, int oflag, ...);
#ifdef ENABLE_NLS
  char *_win_bindtextdomain (const char *domainname, const char *dirname);
#endif
  int _win_chdir (const char *path);
  int _win_close (int fd);
  int _win_creat (const char *path, mode_t mode);
  char *_win_ctime (const time_t * clock);
  char *_win_ctime_r (const time_t * clock, char *buf);
  int _win_fstat (int handle, struct stat *buffer);
  int _win_ftruncate (int fildes, off_t length);
  void _win_gettimeofday (struct timeval *tp, void *tzp);
  int _win_kill (pid_t pid, int sig);
  int _win_pipe (int *phandles);
  int _win_rmdir (const char *path);
  int _win_access (const char *path, int mode);
  int _win_chmod (const char *filename, int pmode);
  char *realpath (const char *file_name, char *resolved_name);
  long _win_random (void);
  int _win_remove (const char *path);
  int _win_rename (const char *oldname, const char *newname);
  int _win_stat (const char *path, struct stat *buffer);
  int _win_stat64 (const char *path, struct stat64 *buffer);
  int _win_unlink (const char *filename);
  int _win_write (int fildes, const void *buf, size_t nbyte);
  int _win_read (int fildes, void *buf, size_t nbyte);
  size_t _win_fwrite (const void *buffer, size_t size, size_t count,
                      FILE * stream);
  size_t _win_fread (void *buffer, size_t size, size_t count, FILE * stream);
  int _win_symlink (const char *path1, const char *path2);
  void *_win_mmap (void *start, size_t len, int access, int flags, int fd,
                   unsigned long long offset);
  int _win_munmap (void *start, size_t length);
  int _win_lstat (const char *path, struct stat *buf);
  int _win_lstat64 (const char *path, struct stat64 *buf);
  int _win_readlink (const char *path, char *buf, size_t bufsize);
  int _win_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
  int _win_printf (const char *format, ...);
  int _win_fprintf (FILE * f, const char *format, ...);
  int _win_vprintf (const char *format, va_list ap);
  int _win_vfprintf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vsprintf (char *dest, const char *format, va_list arg_ptr);
  int _win_vsnprintf (char *str, size_t size, const char *format,
                      va_list arg_ptr);
  int _win_snprintf (char *str, size_t size, const char *format, ...);
  int _win_sprintf (char *dest, const char *format, ...);
  int _win_vsscanf (const char *str, const char *format, va_list arg_ptr);
  int _win_sscanf (const char *str, const char *format, ...);
  int _win_vfscanf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vscanf (const char *format, va_list arg_ptr);
  int _win_scanf (const char *format, ...);
  int _win_fscanf (FILE * stream, const char *format, ...);
  pid_t _win_waitpid (pid_t pid, int *stat_loc, int options);
  int _win_bind (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_connect (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_getpeername (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockname (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockopt (SOCKET s, int level, int optname, char *optval,
                       int *optlen);
  int _win_listen (SOCKET s, int backlog);
  int _win_recv (SOCKET s, char *buf, int len, int flags);
  int _win_recvfrom (SOCKET s, void *buf, int len, int flags,
                     struct sockaddr *from, int *fromlen);
  int _win_select (int max_fd, fd_set * rfds, fd_set * wfds, fd_set * efds,
                   const struct timeval *tv);
  int _win_send (SOCKET s, const char *buf, int len, int flags);
  int _win_sendto (SOCKET s, const char *buf, int len, int flags,
                   const struct sockaddr *to, int tolen);
  int _win_setsockopt (SOCKET s, int level, int optname, const void *optval,
                       int optlen);
  int _win_shutdown (SOCKET s, int how);
  SOCKET _win_socket (int af, int type, int protocol);
  struct hostent *_win_gethostbyaddr (const char *addr, int len, int type);
  struct hostent *_win_gethostbyname (const char *name);
  struct hostent *gethostbyname2 (const char *name, int af);
  char *_win_strerror (int errnum);
  int IsWinNT ();
  char *index (const char *s, int c);

#if !HAVE_STRNDUP
  char *strndup (const char *s, size_t n);
#endif
#if !HAVE_STRNLEN
  size_t strnlen (const char *str, size_t maxlen);
#endif

#define strcasecmp(a, b) stricmp(a, b)
#define strncasecmp(a, b, c) strnicmp(a, b, c)

#endif                          /* WINDOWS */

#ifndef WINDOWS
#define DIR_SEPARATOR '/'
#define DIR_SEPARATOR_STR "/"
#define PATH_SEPARATOR ';'
#define PATH_SEPARATOR_STR ";"
#define NEWLINE "\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) bindtextdomain(d, n)
#endif
#define CREAT(p, m) creat(p, m)
#define PLIBC_CTIME(c) ctime(c)
#define CTIME_R(c, b) ctime_r(c, b)
#undef FOPEN
#define FOPEN(f, m) fopen(f, m)
#define FTRUNCATE(f, l) ftruncate(f, l)
#define OPENDIR(d) opendir(d)
#define OPEN open
#define CHDIR(d) chdir(d)
#define CLOSE(f) close(f)
#define LSEEK(f, o, w) lseek(f, o, w)
#define RMDIR(f) rmdir(f)
#define ACCESS(p, m) access(p, m)
#define CHMOD(f, p) chmod(f, p)
#define FSTAT(h, b) fstat(h, b)
#define PLIBC_KILL(p, s) kill(p, s)
#define PIPE(h) pipe(h)
#define REMOVE(p) remove(p)
#define RENAME(o, n) rename(o, n)
#define STAT(p, b) stat(p, b)
#define STAT64(p, b) stat64(p, b)
#define UNLINK(f) unlink(f)
#define WRITE(f, b, n) write(f, b, n)
#define READ(f, b, n) read(f, b, n)
#define GN_FREAD(b, s, c, f) fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) fwrite(b, s, c, f)
#define SYMLINK(a, b) symlink(a, b)
#define MMAP(s, l, p, f, d, o) mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) munmap(s, l)
#define STRERROR(i) strerror(i)
#define RANDOM() random()
#define READLINK(p, b, s) readlink(p, b, s)
#define LSTAT(p, b) lstat(p, b)
#define LSTAT64(p, b) lstat64(p, b)
#define PRINTF printf
#define FPRINTF fprintf
#define VPRINTF(f, a) vprintf(f, a)
#define VFPRINTF(s, f, a) vfprintf(s, f, a)
#define VSPRINTF(d, f, a) vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF snprintf
#define SPRINTF sprintf
#define VSSCANF(s, f, a) vsscanf(s, f, a)
#define SSCANF sscanf
#define VFSCANF(s, f, a) vfscanf(s, f, a)
#define VSCANF(f, a) vscanf(f, a)
#define SCANF scanf
#define FSCANF fscanf
#define WAITPID(p, s, o) waitpid(p, s, o)
#define ACCEPT(s, a, l) accept(s, a, l)
#define BIND(s, n, l) bind(s, n, l)
#define CONNECT(s, n, l) connect(s, n, l)
#define GETPEERNAME(s, n, l) getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) getsockopt(s, l, o, v, p)
#define LISTEN(s, b) listen(s, b)
#define RECV(s, b, l, f) recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) select(n, r, w, e, t)
#define SEND(s, b, l, f) send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) shutdown(s, h)
#define SOCKET(a, t, p) socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) gethostbyname(n)
#define GETTIMEOFDAY(t, n) gettimeofday(t, n)
#define INSQUE(e, p) insque(e, p)
#define REMQUE(e) remque(e)

#ifndef __SYMBIAN32__
#define HSEARCH(i, a) hsearch(i, a)
#define HCREATE(n) hcreate(n)
#define HDESTROY() hdestroy()
#define HSEARCH_R(i, a, r, h) hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) hcreate_r(n, h)
#define HDESTROY_R(h) hdestroy_r(h)
#define TSEARCH(k, r, c) tsearch(k, r, c)
#define TFIND(k, r, c) tfind(k, r, c)
#define TDELETE(k, r, c) tdelete(k, r, c)
#define TWALK(r, a) twalk(r, a)
#define TDESTROY(r, f) tdestroy(r, f)
#define LFIND(k, b, n, s, c) lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) lsearch(k, b, n, s, c)
#else  // __SYMBIAN32__
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif  // !__SYMBIAN32__

#else
#define DIR_SEPARATOR '\\'
#define DIR_SEPARATOR_STR "\\"
#define PATH_SEPARATOR ':'
#define PATH_SEPARATOR_STR ":"
#define NEWLINE "\r\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) _win_bindtextdomain(d, n)
#endif
#define CREAT(p, m) _win_creat(p, m)
#define PLIBC_CTIME(c) _win_ctime(c)
#define CTIME_R(c, b) _win_ctime_r(c, b)
#define FOPEN(f, m) _win_fopen(f, m)
#define FTRUNCATE(f, l) _win_ftruncate(f, l)
#define OPENDIR(d) _win_opendir(d)
#define OPEN _win_open
#define CHDIR(d) _win_chdir(d)
#define CLOSE(f) _win_close(f)
#define PLIBC_KILL(p, s) _win_kill(p, s)
#define LSEEK(f, o, w) _win_lseek(f, o, w)
#define FSTAT(h, b) _win_fstat(h, b)
#define RMDIR(f) _win_rmdir(f)
#define ACCESS(p, m) _win_access(p, m)
#define CHMOD(f, p) _win_chmod(f, p)
#define PIPE(h) _win_pipe(h)
#define RANDOM() _win_random()
#define REMOVE(p) _win_remove(p)
#define RENAME(o, n) _win_rename(o, n)
#define STAT(p, b) _win_stat(p, b)
#define STAT64(p, b) _win_stat64(p, b)
#define UNLINK(f) _win_unlink(f)
#define WRITE(f, b, n) _win_write(f, b, n)
#define READ(f, b, n) _win_read(f, b, n)
#define GN_FREAD(b, s, c, f) _win_fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) _win_fwrite(b, s, c, f)
#define SYMLINK(a, b) _win_symlink(a, b)
#define MMAP(s, l, p, f, d, o) _win_mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) _win_munmap(s, l)
#define STRERROR(i) _win_strerror(i)
#define READLINK(p, b, s) _win_readlink(p, b, s)
#define LSTAT(p, b) _win_lstat(p, b)
#define LSTAT64(p, b) _win_lstat64(p, b)
#define PRINTF(f, ...) _win_printf(f , __VA_ARGS__)
#define FPRINTF(fil, fmt, ...) _win_fprintf(fil, fmt, __VA_ARGS__)
#define VPRINTF(f, a) _win_vprintf(f, a)
#define VFPRINTF(s, f, a) _win_vfprintf(s, f, a)
#define VSPRINTF(d, f, a) _win_vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) _win_vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF(str, size, fmt, ...) _win_snprintf(str, size, fmt, __VA_ARGS__)
#define SPRINTF(d, f, ...) _win_sprintf(d, f, __VA_ARGS__)
#define VSSCANF(s, f, a) _win_vsscanf(s, f, a)
#define SSCANF(s, f, ...) _win_sscanf(s, f, __VA_ARGS__)
#define VFSCANF(s, f, a) _win_vfscanf(s, f, a)
#define VSCANF(f, a) _win_vscanf(f, a)
#define SCANF(f, ...) _win_scanf(f, __VA_ARGS__)
#define FSCANF(s, f, ...) _win_fscanf(s, f, __VA_ARGS__)
#define WAITPID(p, s, o) _win_waitpid(p, s, o)
#define ACCEPT(s, a, l) _win_accept(s, a, l)
#define BIND(s, n, l) _win_bind(s, n, l)
#define CONNECT(s, n, l) _win_connect(s, n, l)
#define GETPEERNAME(s, n, l) _win_getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) _win_getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) _win_getsockopt(s, l, o, v, p)
#define LISTEN(s, b) _win_listen(s, b)
#define RECV(s, b, l, f) _win_recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) _win_recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) _win_select(n, r, w, e, t)
#define SEND(s, b, l, f) _win_send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) _win_sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) _win_shutdown(s, h)
#define SOCKET(a, t, p) _win_socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) _win_gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) _win_gethostbyname(n)
#define GETTIMEOFDAY(t, n) _win_gettimeofday(t, n)
#define INSQUE(e, p) _win_insque(e, p)
#define REMQUE(e) _win_remque(e)
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif

/* search.h */

/* Prototype structure for a linked-list data structure.
   This is the type used by the `insque' and `remque' functions.  */

  struct PLIBC_SEARCH_QELEM
  {
    struct qelem *q_forw;
    struct qelem *q_back;
    char q_data[1];
  };


/* Insert ELEM into a doubly-linked list, after PREV.  */
  void _win_insque (void *__elem, void *__prev);

/* Unlink ELEM from the doubly-linked list that it is in.  */
  void _win_remque (void *__elem);


/* For use with hsearch(3).  */
  typedef int (*PLIBC_SEARCH__compar_fn_t) (__const void *, __const void *);

  typedef PLIBC_SEARCH__compar_fn_t _win_comparison_fn_t;

/* Action which shall be performed in the call the hsearch.  */
  typedef enum
  {
    PLIBC_SEARCH_FIND,
    PLIBC_SEARCH_ENTER
  }
  PLIBC_SEARCH_ACTION;

  typedef struct PLIBC_SEARCH_entry
  {
    char *key;
    void *data;
  }
  PLIBC_SEARCH_ENTRY;

/* The reentrant version has no static variables to maintain the state.
   Instead the interface of all functions is extended to take an argument
   which describes the current status.  */
  typedef struct _PLIBC_SEARCH_ENTRY
  {
    unsigned int used;
    PLIBC_SEARCH_ENTRY entry;
  }
  _PLIBC_SEARCH_ENTRY;


/* Family of hash table handling functions.  The functions also
   have reentrant counterparts ending with _r.  The non-reentrant
   functions all work on a signle internal hashing table.  */

/* Search for entry matching ITEM.key in internal hash table.  If
   ACTION is `FIND' return found entry or signal error by returning
   NULL.  If ACTION is `ENTER' replace existing data (if any) with
   ITEM.data.  */
  PLIBC_SEARCH_ENTRY *_win_hsearch (PLIBC_SEARCH_ENTRY __item,
                                    PLIBC_SEARCH_ACTION __action);

/* Create a new hashing table which will at most contain NEL elements.  */
  int _win_hcreate (size_t __nel);

/* Destroy current internal hashing table.  */
  void _win_hdestroy (void);

/* Data type for reentrant functions.  */
  struct PLIBC_SEARCH_hsearch_data
  {
    struct _PLIBC_SEARCH_ENTRY *table;
    unsigned int size;
    unsigned int filled;
  };

/* Reentrant versions which can handle multiple hashing tables at the
   same time.  */
  int _win_hsearch_r (PLIBC_SEARCH_ENTRY __item, PLIBC_SEARCH_ACTION __action,
                      PLIBC_SEARCH_ENTRY ** __retval,
                      struct PLIBC_SEARCH_hsearch_data *__htab);
  int _win_hcreate_r (size_t __nel, struct PLIBC_SEARCH_hsearch_data *__htab);
  void _win_hdestroy_r (struct PLIBC_SEARCH_hsearch_data *__htab);


/* The tsearch routines are very interesting. They make many
   assumptions about the compiler.  It assumes that the first field
   in node must be the "key" field, which points to the datum.
   Everything depends on that.  */
/* For tsearch */
  typedef enum
  {
    PLIBC_SEARCH_preorder,
    PLIBC_SEARCH_postorder,
    PLIBC_SEARCH_endorder,
    PLIBC_SEARCH_leaf
  }
  PLIBC_SEARCH_VISIT;

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP and insert a new element if not found.  */
  void *_win_tsearch (__const void *__key, void **__rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP.  If no matching entry is available return NULL.  */
  void *_win_tfind (__const void *__key, void *__const * __rootp,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Remove the element matching KEY from the tree pointed to by *ROOTP.  */
  void *_win_tdelete (__const void *__restrict __key,
                      void **__restrict __rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

  typedef void (*PLIBC_SEARCH__action_fn_t) (__const void *__nodep,
                                             PLIBC_SEARCH_VISIT __value,
                                             int __level);

/* Walk through the whole tree and call the ACTION callback for every node
   or leaf.  */
  void _win_twalk (__const void *__root, PLIBC_SEARCH__action_fn_t __action);

/* Callback type for function to free a tree node.  If the keys are atomic
   data this function should do nothing.  */
  typedef void (*PLIBC_SEARCH__free_fn_t) (void *__nodep);

/* Destroy the whole tree, call FREEFCT for each node or leaf.  */
  void _win_tdestroy (void *__root, PLIBC_SEARCH__free_fn_t __freefct);


/* Perform linear search for KEY by comparing by COMPAR in an array
   [BASE,BASE+NMEMB*SIZE).  */
  void *_win_lfind (__const void *__key, __const void *__base,
                    size_t * __nmemb, size_t __size,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Perform linear search for KEY by comparing by COMPAR function in
   array [BASE,BASE+NMEMB*SIZE) and insert entry if not found.  */
  void *_win_lsearch (__const void *__key, void *__base,
                      size_t * __nmemb, size_t __size,
                      PLIBC_SEARCH__compar_fn_t __compar);


#ifdef __cplusplus
}
#endif


#endif                          //_PLIBC_H_

/* end of plibc.h */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/Makefile.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/testcurl/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.





pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
#am__append_1 = https
check_PROGRAMS = daemontest_get$(EXEEXT) \
	daemontest_get_sendfile$(EXEEXT) daemontest_post$(EXEEXT) \
	daemontest_postform$(EXEEXT) daemontest_post_loop$(EXEEXT) \
	daemontest_put$(EXEEXT) daemontest_process_headers$(EXEEXT) \
	daemontest_process_arguments$(EXEEXT) \
	daemontest_parse_cookies$(EXEEXT) \
	daemontest_large_put$(EXEEXT) daemontest_get11$(EXEEXT) \
	daemontest_get_sendfile11$(EXEEXT) daemontest_post11$(EXEEXT) \
	daemontest_postform11$(EXEEXT) daemontest_post_loop11$(EXEEXT) \
	daemontest_put11$(EXEEXT) daemontest_large_put11$(EXEEXT) \
	daemontest_long_header$(EXEEXT) \
	daemontest_long_header11$(EXEEXT) \
	daemontest_get_chunked$(EXEEXT) \
	daemontest_put_chunked$(EXEEXT) daemontest_iplimit11$(EXEEXT) \
	daemontest_termination$(EXEEXT)
noinst_PROGRAMS = daemon_options_test$(EXEEXT)
subdir = src/testcurl
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
libcurl_version_check_a_AR = $(AR) $(ARFLAGS)
libcurl_version_check_a_LIBADD =
am_libcurl_version_check_a_OBJECTS = curl_version_check.$(OBJEXT)
libcurl_version_check_a_OBJECTS =  \
	$(am_libcurl_version_check_a_OBJECTS)
PROGRAMS = $(noinst_PROGRAMS)
am_daemon_options_test_OBJECTS = daemon_options_test.$(OBJEXT)
daemon_options_test_OBJECTS = $(am_daemon_options_test_OBJECTS)
daemon_options_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get_OBJECTS = $(am_daemontest_get_OBJECTS)
daemontest_get_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get11_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get11_OBJECTS = $(am_daemontest_get11_OBJECTS)
daemontest_get11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_chunked_OBJECTS = daemontest_get_chunked.$(OBJEXT)
daemontest_get_chunked_OBJECTS = $(am_daemontest_get_chunked_OBJECTS)
daemontest_get_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_sendfile_OBJECTS =  \
	daemontest_get_sendfile.$(OBJEXT)
daemontest_get_sendfile_OBJECTS =  \
	$(am_daemontest_get_sendfile_OBJECTS)
daemontest_get_sendfile_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_sendfile11_OBJECTS =  \
	daemontest_get_sendfile.$(OBJEXT)
daemontest_get_sendfile11_OBJECTS =  \
	$(am_daemontest_get_sendfile11_OBJECTS)
daemontest_get_sendfile11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_iplimit11_OBJECTS = daemontest_iplimit.$(OBJEXT)
daemontest_iplimit11_OBJECTS = $(am_daemontest_iplimit11_OBJECTS)
daemontest_iplimit11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put_OBJECTS = $(am_daemontest_large_put_OBJECTS)
daemontest_large_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put11_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put11_OBJECTS = $(am_daemontest_large_put11_OBJECTS)
daemontest_large_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_long_header_OBJECTS = daemontest_long_header.$(OBJEXT)
daemontest_long_header_OBJECTS = $(am_daemontest_long_header_OBJECTS)
daemontest_long_header_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_long_header11_OBJECTS =  \
	daemontest_long_header.$(OBJEXT)
daemontest_long_header11_OBJECTS =  \
	$(am_daemontest_long_header11_OBJECTS)
daemontest_long_header11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_parse_cookies_OBJECTS =  \
	daemontest_parse_cookies.$(OBJEXT)
daemontest_parse_cookies_OBJECTS =  \
	$(am_daemontest_parse_cookies_OBJECTS)
daemontest_parse_cookies_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post_OBJECTS = $(am_daemontest_post_OBJECTS)
daemontest_post_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post11_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post11_OBJECTS = $(am_daemontest_post11_OBJECTS)
daemontest_post11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_loop_OBJECTS = daemontest_post_loop.$(OBJEXT)
daemontest_post_loop_OBJECTS = $(am_daemontest_post_loop_OBJECTS)
daemontest_post_loop_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_loop11_OBJECTS = daemontest_post_loop.$(OBJEXT)
daemontest_post_loop11_OBJECTS = $(am_daemontest_post_loop11_OBJECTS)
daemontest_post_loop11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform_OBJECTS = $(am_daemontest_postform_OBJECTS)
daemontest_postform_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform11_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform11_OBJECTS = $(am_daemontest_postform11_OBJECTS)
daemontest_postform11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_process_arguments_OBJECTS =  \
	daemontest_process_arguments.$(OBJEXT)
daemontest_process_arguments_OBJECTS =  \
	$(am_daemontest_process_arguments_OBJECTS)
daemontest_process_arguments_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_process_headers_OBJECTS =  \
	daemontest_process_headers.$(OBJEXT)
daemontest_process_headers_OBJECTS =  \
	$(am_daemontest_process_headers_OBJECTS)
daemontest_process_headers_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put_OBJECTS = $(am_daemontest_put_OBJECTS)
daemontest_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put11_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put11_OBJECTS = $(am_daemontest_put11_OBJECTS)
daemontest_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_chunked_OBJECTS = daemontest_put_chunked.$(OBJEXT)
daemontest_put_chunked_OBJECTS = $(am_daemontest_put_chunked_OBJECTS)
daemontest_put_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_termination_OBJECTS = daemontest_termination.$(OBJEXT)
daemontest_termination_OBJECTS = $(am_daemontest_termination_OBJECTS)
daemontest_termination_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(libcurl_version_check_a_SOURCES) \
	$(daemon_options_test_SOURCES) $(daemontest_get_SOURCES) \
	$(daemontest_get11_SOURCES) $(daemontest_get_chunked_SOURCES) \
	$(daemontest_get_sendfile_SOURCES) \
	$(daemontest_get_sendfile11_SOURCES) \
	$(daemontest_iplimit11_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) \
	$(daemontest_long_header11_SOURCES) \
	$(daemontest_parse_cookies_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_post_loop_SOURCES) \
	$(daemontest_post_loop11_SOURCES) \
	$(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) \
	$(daemontest_process_arguments_SOURCES) \
	$(daemontest_process_headers_SOURCES) \
	$(daemontest_put_SOURCES) $(daemontest_put11_SOURCES) \
	$(daemontest_put_chunked_SOURCES) \
	$(daemontest_termination_SOURCES)
DIST_SOURCES = $(libcurl_version_check_a_SOURCES) \
	$(daemon_options_test_SOURCES) $(daemontest_get_SOURCES) \
	$(daemontest_get11_SOURCES) $(daemontest_get_chunked_SOURCES) \
	$(daemontest_get_sendfile_SOURCES) \
	$(daemontest_get_sendfile11_SOURCES) \
	$(daemontest_iplimit11_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) \
	$(daemontest_long_header11_SOURCES) \
	$(daemontest_parse_cookies_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_post_loop_SOURCES) \
	$(daemontest_post_loop11_SOURCES) \
	$(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) \
	$(daemontest_process_arguments_SOURCES) \
	$(daemontest_process_headers_SOURCES) \
	$(daemontest_put_SOURCES) $(daemontest_put11_SOURCES) \
	$(daemontest_put_chunked_SOURCES) \
	$(daemontest_termination_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DIST_SUBDIRS = . https
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../../
top_builddir = ../..
top_srcdir = ../..
SUBDIRS = . $(am__append_1)
#AM_CFLAGS = -fprofile-arcs -ftest-coverage
AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/src/daemon \
-I$(top_srcdir)/src/include \
$(LIBCURL_CPPFLAGS)

TESTS = $(check_PROGRAMS)
noinst_LIBRARIES = libcurl_version_check.a
libcurl_version_check_a_SOURCES = \
  curl_version_check.c

daemon_options_test_SOURCES = \
  daemon_options_test.c

daemon_options_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la

daemontest_get_SOURCES = \
  daemontest_get.c

daemontest_get_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_get_sendfile_SOURCES = \
  daemontest_get_sendfile.c

daemontest_get_sendfile_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_get_chunked_SOURCES = \
  daemontest_get_chunked.c

daemontest_get_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_post_SOURCES = \
  daemontest_post.c

daemontest_post_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_process_headers_SOURCES = \
  daemontest_process_headers.c

daemontest_process_headers_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_parse_cookies_SOURCES = \
  daemontest_parse_cookies.c

daemontest_parse_cookies_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_process_arguments_SOURCES = \
  daemontest_process_arguments.c

daemontest_process_arguments_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_postform_SOURCES = \
  daemontest_postform.c

daemontest_postform_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_post_loop_SOURCES = \
  daemontest_post_loop.c

daemontest_post_loop_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_put_SOURCES = \
  daemontest_put.c

daemontest_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_put_chunked_SOURCES = \
  daemontest_put_chunked.c

daemontest_put_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_get11_SOURCES = \
  daemontest_get.c

daemontest_get11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_get_sendfile11_SOURCES = \
  daemontest_get_sendfile.c

daemontest_get_sendfile11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_post11_SOURCES = \
  daemontest_post.c

daemontest_post11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_postform11_SOURCES = \
  daemontest_postform.c

daemontest_postform11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_post_loop11_SOURCES = \
  daemontest_post_loop.c

daemontest_post_loop11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_put11_SOURCES = \
  daemontest_put.c

daemontest_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_large_put_SOURCES = \
  daemontest_large_put.c

daemontest_large_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_large_put11_SOURCES = \
  daemontest_large_put.c

daemontest_large_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_long_header_SOURCES = \
  daemontest_long_header.c

daemontest_long_header_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_long_header11_SOURCES = \
  daemontest_long_header.c

daemontest_long_header11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_iplimit11_SOURCES = \
  daemontest_iplimit.c

daemontest_iplimit11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_termination_SOURCES = \
  daemontest_termination.c

daemontest_termination_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/testcurl/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/testcurl/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-noinstLIBRARIES:
	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libcurl_version_check.a: $(libcurl_version_check_a_OBJECTS) $(libcurl_version_check_a_DEPENDENCIES) 
	-rm -f libcurl_version_check.a
	$(libcurl_version_check_a_AR) libcurl_version_check.a $(libcurl_version_check_a_OBJECTS) $(libcurl_version_check_a_LIBADD)
	$(RANLIB) libcurl_version_check.a

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list

clean-noinstPROGRAMS:
	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
daemon_options_test$(EXEEXT): $(daemon_options_test_OBJECTS) $(daemon_options_test_DEPENDENCIES) 
	@rm -f daemon_options_test$(EXEEXT)
	$(LINK) $(daemon_options_test_OBJECTS) $(daemon_options_test_LDADD) $(LIBS)
daemontest_get$(EXEEXT): $(daemontest_get_OBJECTS) $(daemontest_get_DEPENDENCIES) 
	@rm -f daemontest_get$(EXEEXT)
	$(LINK) $(daemontest_get_OBJECTS) $(daemontest_get_LDADD) $(LIBS)
daemontest_get11$(EXEEXT): $(daemontest_get11_OBJECTS) $(daemontest_get11_DEPENDENCIES) 
	@rm -f daemontest_get11$(EXEEXT)
	$(LINK) $(daemontest_get11_OBJECTS) $(daemontest_get11_LDADD) $(LIBS)
daemontest_get_chunked$(EXEEXT): $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_DEPENDENCIES) 
	@rm -f daemontest_get_chunked$(EXEEXT)
	$(LINK) $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_LDADD) $(LIBS)
daemontest_get_sendfile$(EXEEXT): $(daemontest_get_sendfile_OBJECTS) $(daemontest_get_sendfile_DEPENDENCIES) 
	@rm -f daemontest_get_sendfile$(EXEEXT)
	$(LINK) $(daemontest_get_sendfile_OBJECTS) $(daemontest_get_sendfile_LDADD) $(LIBS)
daemontest_get_sendfile11$(EXEEXT): $(daemontest_get_sendfile11_OBJECTS) $(daemontest_get_sendfile11_DEPENDENCIES) 
	@rm -f daemontest_get_sendfile11$(EXEEXT)
	$(LINK) $(daemontest_get_sendfile11_OBJECTS) $(daemontest_get_sendfile11_LDADD) $(LIBS)
daemontest_iplimit11$(EXEEXT): $(daemontest_iplimit11_OBJECTS) $(daemontest_iplimit11_DEPENDENCIES) 
	@rm -f daemontest_iplimit11$(EXEEXT)
	$(LINK) $(daemontest_iplimit11_OBJECTS) $(daemontest_iplimit11_LDADD) $(LIBS)
daemontest_large_put$(EXEEXT): $(daemontest_large_put_OBJECTS) $(daemontest_large_put_DEPENDENCIES) 
	@rm -f daemontest_large_put$(EXEEXT)
	$(LINK) $(daemontest_large_put_OBJECTS) $(daemontest_large_put_LDADD) $(LIBS)
daemontest_large_put11$(EXEEXT): $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_DEPENDENCIES) 
	@rm -f daemontest_large_put11$(EXEEXT)
	$(LINK) $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_LDADD) $(LIBS)
daemontest_long_header$(EXEEXT): $(daemontest_long_header_OBJECTS) $(daemontest_long_header_DEPENDENCIES) 
	@rm -f daemontest_long_header$(EXEEXT)
	$(LINK) $(daemontest_long_header_OBJECTS) $(daemontest_long_header_LDADD) $(LIBS)
daemontest_long_header11$(EXEEXT): $(daemontest_long_header11_OBJECTS) $(daemontest_long_header11_DEPENDENCIES) 
	@rm -f daemontest_long_header11$(EXEEXT)
	$(LINK) $(daemontest_long_header11_OBJECTS) $(daemontest_long_header11_LDADD) $(LIBS)
daemontest_parse_cookies$(EXEEXT): $(daemontest_parse_cookies_OBJECTS) $(daemontest_parse_cookies_DEPENDENCIES) 
	@rm -f daemontest_parse_cookies$(EXEEXT)
	$(LINK) $(daemontest_parse_cookies_OBJECTS) $(daemontest_parse_cookies_LDADD) $(LIBS)
daemontest_post$(EXEEXT): $(daemontest_post_OBJECTS) $(daemontest_post_DEPENDENCIES) 
	@rm -f daemontest_post$(EXEEXT)
	$(LINK) $(daemontest_post_OBJECTS) $(daemontest_post_LDADD) $(LIBS)
daemontest_post11$(EXEEXT): $(daemontest_post11_OBJECTS) $(daemontest_post11_DEPENDENCIES) 
	@rm -f daemontest_post11$(EXEEXT)
	$(LINK) $(daemontest_post11_OBJECTS) $(daemontest_post11_LDADD) $(LIBS)
daemontest_post_loop$(EXEEXT): $(daemontest_post_loop_OBJECTS) $(daemontest_post_loop_DEPENDENCIES) 
	@rm -f daemontest_post_loop$(EXEEXT)
	$(LINK) $(daemontest_post_loop_OBJECTS) $(daemontest_post_loop_LDADD) $(LIBS)
daemontest_post_loop11$(EXEEXT): $(daemontest_post_loop11_OBJECTS) $(daemontest_post_loop11_DEPENDENCIES) 
	@rm -f daemontest_post_loop11$(EXEEXT)
	$(LINK) $(daemontest_post_loop11_OBJECTS) $(daemontest_post_loop11_LDADD) $(LIBS)
daemontest_postform$(EXEEXT): $(daemontest_postform_OBJECTS) $(daemontest_postform_DEPENDENCIES) 
	@rm -f daemontest_postform$(EXEEXT)
	$(LINK) $(daemontest_postform_OBJECTS) $(daemontest_postform_LDADD) $(LIBS)
daemontest_postform11$(EXEEXT): $(daemontest_postform11_OBJECTS) $(daemontest_postform11_DEPENDENCIES) 
	@rm -f daemontest_postform11$(EXEEXT)
	$(LINK) $(daemontest_postform11_OBJECTS) $(daemontest_postform11_LDADD) $(LIBS)
daemontest_process_arguments$(EXEEXT): $(daemontest_process_arguments_OBJECTS) $(daemontest_process_arguments_DEPENDENCIES) 
	@rm -f daemontest_process_arguments$(EXEEXT)
	$(LINK) $(daemontest_process_arguments_OBJECTS) $(daemontest_process_arguments_LDADD) $(LIBS)
daemontest_process_headers$(EXEEXT): $(daemontest_process_headers_OBJECTS) $(daemontest_process_headers_DEPENDENCIES) 
	@rm -f daemontest_process_headers$(EXEEXT)
	$(LINK) $(daemontest_process_headers_OBJECTS) $(daemontest_process_headers_LDADD) $(LIBS)
daemontest_put$(EXEEXT): $(daemontest_put_OBJECTS) $(daemontest_put_DEPENDENCIES) 
	@rm -f daemontest_put$(EXEEXT)
	$(LINK) $(daemontest_put_OBJECTS) $(daemontest_put_LDADD) $(LIBS)
daemontest_put11$(EXEEXT): $(daemontest_put11_OBJECTS) $(daemontest_put11_DEPENDENCIES) 
	@rm -f daemontest_put11$(EXEEXT)
	$(LINK) $(daemontest_put11_OBJECTS) $(daemontest_put11_LDADD) $(LIBS)
daemontest_put_chunked$(EXEEXT): $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_DEPENDENCIES) 
	@rm -f daemontest_put_chunked$(EXEEXT)
	$(LINK) $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_LDADD) $(LIBS)
daemontest_termination$(EXEEXT): $(daemontest_termination_OBJECTS) $(daemontest_termination_DEPENDENCIES) 
	@rm -f daemontest_termination$(EXEEXT)
	$(LINK) $(daemontest_termination_OBJECTS) $(daemontest_termination_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

include ./$(DEPDIR)/curl_version_check.Po
include ./$(DEPDIR)/daemon_options_test.Po
include ./$(DEPDIR)/daemontest_get.Po
include ./$(DEPDIR)/daemontest_get_chunked.Po
include ./$(DEPDIR)/daemontest_get_sendfile.Po
include ./$(DEPDIR)/daemontest_iplimit.Po
include ./$(DEPDIR)/daemontest_large_put.Po
include ./$(DEPDIR)/daemontest_long_header.Po
include ./$(DEPDIR)/daemontest_parse_cookies.Po
include ./$(DEPDIR)/daemontest_post.Po
include ./$(DEPDIR)/daemontest_post_loop.Po
include ./$(DEPDIR)/daemontest_postform.Po
include ./$(DEPDIR)/daemontest_process_arguments.Po
include ./$(DEPDIR)/daemontest_process_headers.Po
include ./$(DEPDIR)/daemontest_put.Po
include ./$(DEPDIR)/daemontest_put_chunked.Po
include ./$(DEPDIR)/daemontest_termination.Po

.c.o:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c $<

.c.obj:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
#	source='$<' object='$@' libtool=yes \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile $(LIBRARIES) $(PROGRAMS)
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
	clean-noinstLIBRARIES clean-noinstPROGRAMS mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libtool \
	clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
	ctags-recursive distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-recursive uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/Makefile.am.



































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
SUBDIRS  = .

if USE_COVERAGE
  AM_CFLAGS = -fprofile-arcs -ftest-coverage
endif

if ENABLE_HTTPS
  SUBDIRS += https
endif

AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/src/daemon \
-I$(top_srcdir)/src/include \
$(LIBCURL_CPPFLAGS)

check_PROGRAMS = \
  daemontest_get \
  daemontest_get_sendfile \
  daemontest_post \
  daemontest_postform \
  daemontest_post_loop \
  daemontest_put \
  daemontest_process_headers \
  daemontest_process_arguments \
  daemontest_parse_cookies \
  daemontest_large_put \
  daemontest_get11 \
  daemontest_get_sendfile11 \
  daemontest_post11 \
  daemontest_postform11 \
  daemontest_post_loop11 \
  daemontest_put11 \
  daemontest_large_put11 \
  daemontest_long_header \
  daemontest_long_header11 \
  daemontest_get_chunked \
  daemontest_put_chunked \
  daemontest_iplimit11 \
  daemontest_termination
noinst_PROGRAMS = \
  daemon_options_test

TESTS = $(check_PROGRAMS)

noinst_LIBRARIES = libcurl_version_check.a

libcurl_version_check_a_SOURCES = \
  curl_version_check.c

daemon_options_test_SOURCES = \
  daemon_options_test.c
daemon_options_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la

daemontest_get_SOURCES = \
  daemontest_get.c
daemontest_get_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_sendfile_SOURCES = \
  daemontest_get_sendfile.c
daemontest_get_sendfile_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_chunked_SOURCES = \
  daemontest_get_chunked.c
daemontest_get_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_SOURCES = \
  daemontest_post.c
daemontest_post_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_process_headers_SOURCES = \
  daemontest_process_headers.c
daemontest_process_headers_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_parse_cookies_SOURCES = \
  daemontest_parse_cookies.c
daemontest_parse_cookies_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_process_arguments_SOURCES = \
  daemontest_process_arguments.c
daemontest_process_arguments_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform_SOURCES = \
  daemontest_postform.c
daemontest_postform_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_loop_SOURCES = \
  daemontest_post_loop.c
daemontest_post_loop_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_SOURCES = \
  daemontest_put.c
daemontest_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_chunked_SOURCES = \
  daemontest_put_chunked.c
daemontest_put_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get11_SOURCES = \
  daemontest_get.c
daemontest_get11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_sendfile11_SOURCES = \
  daemontest_get_sendfile.c
daemontest_get_sendfile11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post11_SOURCES = \
  daemontest_post.c
daemontest_post11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform11_SOURCES = \
  daemontest_postform.c
daemontest_postform11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_loop11_SOURCES = \
  daemontest_post_loop.c
daemontest_post_loop11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put11_SOURCES = \
  daemontest_put.c
daemontest_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put_SOURCES = \
  daemontest_large_put.c
daemontest_large_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put11_SOURCES = \
  daemontest_large_put.c
daemontest_large_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_long_header_SOURCES = \
  daemontest_long_header.c
daemontest_long_header_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_long_header11_SOURCES = \
  daemontest_long_header.c
daemontest_long_header11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_iplimit11_SOURCES = \
  daemontest_iplimit.c
daemontest_iplimit11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_termination_SOURCES = \
  daemontest_termination.c
daemontest_termination_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/Makefile.in.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@


VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@ENABLE_HTTPS_TRUE@am__append_1 = https
check_PROGRAMS = daemontest_get$(EXEEXT) \
	daemontest_get_sendfile$(EXEEXT) daemontest_post$(EXEEXT) \
	daemontest_postform$(EXEEXT) daemontest_post_loop$(EXEEXT) \
	daemontest_put$(EXEEXT) daemontest_process_headers$(EXEEXT) \
	daemontest_process_arguments$(EXEEXT) \
	daemontest_parse_cookies$(EXEEXT) \
	daemontest_large_put$(EXEEXT) daemontest_get11$(EXEEXT) \
	daemontest_get_sendfile11$(EXEEXT) daemontest_post11$(EXEEXT) \
	daemontest_postform11$(EXEEXT) daemontest_post_loop11$(EXEEXT) \
	daemontest_put11$(EXEEXT) daemontest_large_put11$(EXEEXT) \
	daemontest_long_header$(EXEEXT) \
	daemontest_long_header11$(EXEEXT) \
	daemontest_get_chunked$(EXEEXT) \
	daemontest_put_chunked$(EXEEXT) daemontest_iplimit11$(EXEEXT) \
	daemontest_termination$(EXEEXT)
noinst_PROGRAMS = daemon_options_test$(EXEEXT)
subdir = src/testcurl
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
libcurl_version_check_a_AR = $(AR) $(ARFLAGS)
libcurl_version_check_a_LIBADD =
am_libcurl_version_check_a_OBJECTS = curl_version_check.$(OBJEXT)
libcurl_version_check_a_OBJECTS =  \
	$(am_libcurl_version_check_a_OBJECTS)
PROGRAMS = $(noinst_PROGRAMS)
am_daemon_options_test_OBJECTS = daemon_options_test.$(OBJEXT)
daemon_options_test_OBJECTS = $(am_daemon_options_test_OBJECTS)
daemon_options_test_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get_OBJECTS = $(am_daemontest_get_OBJECTS)
daemontest_get_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get11_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get11_OBJECTS = $(am_daemontest_get11_OBJECTS)
daemontest_get11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_chunked_OBJECTS = daemontest_get_chunked.$(OBJEXT)
daemontest_get_chunked_OBJECTS = $(am_daemontest_get_chunked_OBJECTS)
daemontest_get_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_sendfile_OBJECTS =  \
	daemontest_get_sendfile.$(OBJEXT)
daemontest_get_sendfile_OBJECTS =  \
	$(am_daemontest_get_sendfile_OBJECTS)
daemontest_get_sendfile_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_sendfile11_OBJECTS =  \
	daemontest_get_sendfile.$(OBJEXT)
daemontest_get_sendfile11_OBJECTS =  \
	$(am_daemontest_get_sendfile11_OBJECTS)
daemontest_get_sendfile11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_iplimit11_OBJECTS = daemontest_iplimit.$(OBJEXT)
daemontest_iplimit11_OBJECTS = $(am_daemontest_iplimit11_OBJECTS)
daemontest_iplimit11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put_OBJECTS = $(am_daemontest_large_put_OBJECTS)
daemontest_large_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put11_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put11_OBJECTS = $(am_daemontest_large_put11_OBJECTS)
daemontest_large_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_long_header_OBJECTS = daemontest_long_header.$(OBJEXT)
daemontest_long_header_OBJECTS = $(am_daemontest_long_header_OBJECTS)
daemontest_long_header_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_long_header11_OBJECTS =  \
	daemontest_long_header.$(OBJEXT)
daemontest_long_header11_OBJECTS =  \
	$(am_daemontest_long_header11_OBJECTS)
daemontest_long_header11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_parse_cookies_OBJECTS =  \
	daemontest_parse_cookies.$(OBJEXT)
daemontest_parse_cookies_OBJECTS =  \
	$(am_daemontest_parse_cookies_OBJECTS)
daemontest_parse_cookies_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post_OBJECTS = $(am_daemontest_post_OBJECTS)
daemontest_post_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post11_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post11_OBJECTS = $(am_daemontest_post11_OBJECTS)
daemontest_post11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_loop_OBJECTS = daemontest_post_loop.$(OBJEXT)
daemontest_post_loop_OBJECTS = $(am_daemontest_post_loop_OBJECTS)
daemontest_post_loop_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_loop11_OBJECTS = daemontest_post_loop.$(OBJEXT)
daemontest_post_loop11_OBJECTS = $(am_daemontest_post_loop11_OBJECTS)
daemontest_post_loop11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform_OBJECTS = $(am_daemontest_postform_OBJECTS)
daemontest_postform_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform11_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform11_OBJECTS = $(am_daemontest_postform11_OBJECTS)
daemontest_postform11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_process_arguments_OBJECTS =  \
	daemontest_process_arguments.$(OBJEXT)
daemontest_process_arguments_OBJECTS =  \
	$(am_daemontest_process_arguments_OBJECTS)
daemontest_process_arguments_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_process_headers_OBJECTS =  \
	daemontest_process_headers.$(OBJEXT)
daemontest_process_headers_OBJECTS =  \
	$(am_daemontest_process_headers_OBJECTS)
daemontest_process_headers_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put_OBJECTS = $(am_daemontest_put_OBJECTS)
daemontest_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put11_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put11_OBJECTS = $(am_daemontest_put11_OBJECTS)
daemontest_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_chunked_OBJECTS = daemontest_put_chunked.$(OBJEXT)
daemontest_put_chunked_OBJECTS = $(am_daemontest_put_chunked_OBJECTS)
daemontest_put_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_termination_OBJECTS = daemontest_termination.$(OBJEXT)
daemontest_termination_OBJECTS = $(am_daemontest_termination_OBJECTS)
daemontest_termination_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(libcurl_version_check_a_SOURCES) \
	$(daemon_options_test_SOURCES) $(daemontest_get_SOURCES) \
	$(daemontest_get11_SOURCES) $(daemontest_get_chunked_SOURCES) \
	$(daemontest_get_sendfile_SOURCES) \
	$(daemontest_get_sendfile11_SOURCES) \
	$(daemontest_iplimit11_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) \
	$(daemontest_long_header11_SOURCES) \
	$(daemontest_parse_cookies_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_post_loop_SOURCES) \
	$(daemontest_post_loop11_SOURCES) \
	$(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) \
	$(daemontest_process_arguments_SOURCES) \
	$(daemontest_process_headers_SOURCES) \
	$(daemontest_put_SOURCES) $(daemontest_put11_SOURCES) \
	$(daemontest_put_chunked_SOURCES) \
	$(daemontest_termination_SOURCES)
DIST_SOURCES = $(libcurl_version_check_a_SOURCES) \
	$(daemon_options_test_SOURCES) $(daemontest_get_SOURCES) \
	$(daemontest_get11_SOURCES) $(daemontest_get_chunked_SOURCES) \
	$(daemontest_get_sendfile_SOURCES) \
	$(daemontest_get_sendfile11_SOURCES) \
	$(daemontest_iplimit11_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) \
	$(daemontest_long_header11_SOURCES) \
	$(daemontest_parse_cookies_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_post_loop_SOURCES) \
	$(daemontest_post_loop11_SOURCES) \
	$(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) \
	$(daemontest_process_arguments_SOURCES) \
	$(daemontest_process_headers_SOURCES) \
	$(daemontest_put_SOURCES) $(daemontest_put11_SOURCES) \
	$(daemontest_put_chunked_SOURCES) \
	$(daemontest_termination_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DIST_SUBDIRS = . https
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = . $(am__append_1)
@USE_COVERAGE_TRUE@AM_CFLAGS = -fprofile-arcs -ftest-coverage
AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/src/daemon \
-I$(top_srcdir)/src/include \
$(LIBCURL_CPPFLAGS)

TESTS = $(check_PROGRAMS)
noinst_LIBRARIES = libcurl_version_check.a
libcurl_version_check_a_SOURCES = \
  curl_version_check.c

daemon_options_test_SOURCES = \
  daemon_options_test.c

daemon_options_test_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la

daemontest_get_SOURCES = \
  daemontest_get.c

daemontest_get_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_sendfile_SOURCES = \
  daemontest_get_sendfile.c

daemontest_get_sendfile_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_chunked_SOURCES = \
  daemontest_get_chunked.c

daemontest_get_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_SOURCES = \
  daemontest_post.c

daemontest_post_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_process_headers_SOURCES = \
  daemontest_process_headers.c

daemontest_process_headers_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_parse_cookies_SOURCES = \
  daemontest_parse_cookies.c

daemontest_parse_cookies_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_process_arguments_SOURCES = \
  daemontest_process_arguments.c

daemontest_process_arguments_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform_SOURCES = \
  daemontest_postform.c

daemontest_postform_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_loop_SOURCES = \
  daemontest_post_loop.c

daemontest_post_loop_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_SOURCES = \
  daemontest_put.c

daemontest_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_chunked_SOURCES = \
  daemontest_put_chunked.c

daemontest_put_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get11_SOURCES = \
  daemontest_get.c

daemontest_get11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_sendfile11_SOURCES = \
  daemontest_get_sendfile.c

daemontest_get_sendfile11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post11_SOURCES = \
  daemontest_post.c

daemontest_post11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform11_SOURCES = \
  daemontest_postform.c

daemontest_postform11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_loop11_SOURCES = \
  daemontest_post_loop.c

daemontest_post_loop11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put11_SOURCES = \
  daemontest_put.c

daemontest_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put_SOURCES = \
  daemontest_large_put.c

daemontest_large_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put11_SOURCES = \
  daemontest_large_put.c

daemontest_large_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_long_header_SOURCES = \
  daemontest_long_header.c

daemontest_long_header_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_long_header11_SOURCES = \
  daemontest_long_header.c

daemontest_long_header11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_iplimit11_SOURCES = \
  daemontest_iplimit.c

daemontest_iplimit11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_termination_SOURCES = \
  daemontest_termination.c

daemontest_termination_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/testcurl/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/testcurl/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-noinstLIBRARIES:
	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
libcurl_version_check.a: $(libcurl_version_check_a_OBJECTS) $(libcurl_version_check_a_DEPENDENCIES) 
	-rm -f libcurl_version_check.a
	$(libcurl_version_check_a_AR) libcurl_version_check.a $(libcurl_version_check_a_OBJECTS) $(libcurl_version_check_a_LIBADD)
	$(RANLIB) libcurl_version_check.a

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list

clean-noinstPROGRAMS:
	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
daemon_options_test$(EXEEXT): $(daemon_options_test_OBJECTS) $(daemon_options_test_DEPENDENCIES) 
	@rm -f daemon_options_test$(EXEEXT)
	$(LINK) $(daemon_options_test_OBJECTS) $(daemon_options_test_LDADD) $(LIBS)
daemontest_get$(EXEEXT): $(daemontest_get_OBJECTS) $(daemontest_get_DEPENDENCIES) 
	@rm -f daemontest_get$(EXEEXT)
	$(LINK) $(daemontest_get_OBJECTS) $(daemontest_get_LDADD) $(LIBS)
daemontest_get11$(EXEEXT): $(daemontest_get11_OBJECTS) $(daemontest_get11_DEPENDENCIES) 
	@rm -f daemontest_get11$(EXEEXT)
	$(LINK) $(daemontest_get11_OBJECTS) $(daemontest_get11_LDADD) $(LIBS)
daemontest_get_chunked$(EXEEXT): $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_DEPENDENCIES) 
	@rm -f daemontest_get_chunked$(EXEEXT)
	$(LINK) $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_LDADD) $(LIBS)
daemontest_get_sendfile$(EXEEXT): $(daemontest_get_sendfile_OBJECTS) $(daemontest_get_sendfile_DEPENDENCIES) 
	@rm -f daemontest_get_sendfile$(EXEEXT)
	$(LINK) $(daemontest_get_sendfile_OBJECTS) $(daemontest_get_sendfile_LDADD) $(LIBS)
daemontest_get_sendfile11$(EXEEXT): $(daemontest_get_sendfile11_OBJECTS) $(daemontest_get_sendfile11_DEPENDENCIES) 
	@rm -f daemontest_get_sendfile11$(EXEEXT)
	$(LINK) $(daemontest_get_sendfile11_OBJECTS) $(daemontest_get_sendfile11_LDADD) $(LIBS)
daemontest_iplimit11$(EXEEXT): $(daemontest_iplimit11_OBJECTS) $(daemontest_iplimit11_DEPENDENCIES) 
	@rm -f daemontest_iplimit11$(EXEEXT)
	$(LINK) $(daemontest_iplimit11_OBJECTS) $(daemontest_iplimit11_LDADD) $(LIBS)
daemontest_large_put$(EXEEXT): $(daemontest_large_put_OBJECTS) $(daemontest_large_put_DEPENDENCIES) 
	@rm -f daemontest_large_put$(EXEEXT)
	$(LINK) $(daemontest_large_put_OBJECTS) $(daemontest_large_put_LDADD) $(LIBS)
daemontest_large_put11$(EXEEXT): $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_DEPENDENCIES) 
	@rm -f daemontest_large_put11$(EXEEXT)
	$(LINK) $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_LDADD) $(LIBS)
daemontest_long_header$(EXEEXT): $(daemontest_long_header_OBJECTS) $(daemontest_long_header_DEPENDENCIES) 
	@rm -f daemontest_long_header$(EXEEXT)
	$(LINK) $(daemontest_long_header_OBJECTS) $(daemontest_long_header_LDADD) $(LIBS)
daemontest_long_header11$(EXEEXT): $(daemontest_long_header11_OBJECTS) $(daemontest_long_header11_DEPENDENCIES) 
	@rm -f daemontest_long_header11$(EXEEXT)
	$(LINK) $(daemontest_long_header11_OBJECTS) $(daemontest_long_header11_LDADD) $(LIBS)
daemontest_parse_cookies$(EXEEXT): $(daemontest_parse_cookies_OBJECTS) $(daemontest_parse_cookies_DEPENDENCIES) 
	@rm -f daemontest_parse_cookies$(EXEEXT)
	$(LINK) $(daemontest_parse_cookies_OBJECTS) $(daemontest_parse_cookies_LDADD) $(LIBS)
daemontest_post$(EXEEXT): $(daemontest_post_OBJECTS) $(daemontest_post_DEPENDENCIES) 
	@rm -f daemontest_post$(EXEEXT)
	$(LINK) $(daemontest_post_OBJECTS) $(daemontest_post_LDADD) $(LIBS)
daemontest_post11$(EXEEXT): $(daemontest_post11_OBJECTS) $(daemontest_post11_DEPENDENCIES) 
	@rm -f daemontest_post11$(EXEEXT)
	$(LINK) $(daemontest_post11_OBJECTS) $(daemontest_post11_LDADD) $(LIBS)
daemontest_post_loop$(EXEEXT): $(daemontest_post_loop_OBJECTS) $(daemontest_post_loop_DEPENDENCIES) 
	@rm -f daemontest_post_loop$(EXEEXT)
	$(LINK) $(daemontest_post_loop_OBJECTS) $(daemontest_post_loop_LDADD) $(LIBS)
daemontest_post_loop11$(EXEEXT): $(daemontest_post_loop11_OBJECTS) $(daemontest_post_loop11_DEPENDENCIES) 
	@rm -f daemontest_post_loop11$(EXEEXT)
	$(LINK) $(daemontest_post_loop11_OBJECTS) $(daemontest_post_loop11_LDADD) $(LIBS)
daemontest_postform$(EXEEXT): $(daemontest_postform_OBJECTS) $(daemontest_postform_DEPENDENCIES) 
	@rm -f daemontest_postform$(EXEEXT)
	$(LINK) $(daemontest_postform_OBJECTS) $(daemontest_postform_LDADD) $(LIBS)
daemontest_postform11$(EXEEXT): $(daemontest_postform11_OBJECTS) $(daemontest_postform11_DEPENDENCIES) 
	@rm -f daemontest_postform11$(EXEEXT)
	$(LINK) $(daemontest_postform11_OBJECTS) $(daemontest_postform11_LDADD) $(LIBS)
daemontest_process_arguments$(EXEEXT): $(daemontest_process_arguments_OBJECTS) $(daemontest_process_arguments_DEPENDENCIES) 
	@rm -f daemontest_process_arguments$(EXEEXT)
	$(LINK) $(daemontest_process_arguments_OBJECTS) $(daemontest_process_arguments_LDADD) $(LIBS)
daemontest_process_headers$(EXEEXT): $(daemontest_process_headers_OBJECTS) $(daemontest_process_headers_DEPENDENCIES) 
	@rm -f daemontest_process_headers$(EXEEXT)
	$(LINK) $(daemontest_process_headers_OBJECTS) $(daemontest_process_headers_LDADD) $(LIBS)
daemontest_put$(EXEEXT): $(daemontest_put_OBJECTS) $(daemontest_put_DEPENDENCIES) 
	@rm -f daemontest_put$(EXEEXT)
	$(LINK) $(daemontest_put_OBJECTS) $(daemontest_put_LDADD) $(LIBS)
daemontest_put11$(EXEEXT): $(daemontest_put11_OBJECTS) $(daemontest_put11_DEPENDENCIES) 
	@rm -f daemontest_put11$(EXEEXT)
	$(LINK) $(daemontest_put11_OBJECTS) $(daemontest_put11_LDADD) $(LIBS)
daemontest_put_chunked$(EXEEXT): $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_DEPENDENCIES) 
	@rm -f daemontest_put_chunked$(EXEEXT)
	$(LINK) $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_LDADD) $(LIBS)
daemontest_termination$(EXEEXT): $(daemontest_termination_OBJECTS) $(daemontest_termination_DEPENDENCIES) 
	@rm -f daemontest_termination$(EXEEXT)
	$(LINK) $(daemontest_termination_OBJECTS) $(daemontest_termination_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl_version_check.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemon_options_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_get.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_get_chunked.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_get_sendfile.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_iplimit.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_large_put.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_long_header.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_parse_cookies.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_post.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_post_loop.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_postform.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_process_arguments.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_process_headers.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_put.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_put_chunked.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_termination.Po@am__quote@

.c.o:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c $<

.c.obj:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile $(LIBRARIES) $(PROGRAMS)
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
	clean-noinstLIBRARIES clean-noinstPROGRAMS mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libtool \
	clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
	ctags-recursive distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-recursive uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/curl_version_check.c.

























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file curl_version_check.c
 * @brief  verify required cURL version is available to run tests
 * @author Sagie Amir
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int
parse_version_number (const char **s)
{
  int i = 0;
  char num[17];

  while (i < 16 && ((**s >= '0') & (**s <= '9')))
    {
      num[i] = **s;
      (*s)++;
      i++;
    }

  num[i] = '\0';

  return atoi (num);
}

const char *
parse_version_string (const char *s, int *major, int *minor, int *micro)
{
  if (!s)
    return NULL;
  *major = parse_version_number (&s);
  if (!s || *s != '.')
    return NULL;
  s++;
  *minor = parse_version_number (&s);
  if (*s != '.')
    return NULL;
  s++;
  *micro = parse_version_number (&s);
  return s;
}


/*
 * check local libcurl version matches required version
 */
int
curl_check_version (const char *req_version)
{
  const char *ver;
  const char *curl_ver;
#if HTTPS_SUPPORT
  const char *ssl_ver;
  const char *req_ssl_ver;
#endif

  int loc_major, loc_minor, loc_micro;
  int rq_major, rq_minor, rq_micro;

  ver = curl_version ();
#if HAVE_MESSAGES
  fprintf (stderr, "curl version: %s\n", ver);
#endif
  /*
   * this call relies on the cURL string to be of the exact following format :
   * 'libcurl/7.16.4 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/0.6.5' OR
   * 'libcurl/7.18.2 GnuTLS/2.4.0 zlib/1.2.3.3 libidn/0.6.5'
   */
  curl_ver = strchr (ver, '/') + 1;

  /* Parse version numbers */
  parse_version_string (req_version, &rq_major, &rq_minor, &rq_micro);
  parse_version_string (curl_ver, &loc_major, &loc_minor, &loc_micro);

  /* Compare version numbers.  */
  if ((loc_major > rq_major
       || (loc_major == rq_major && loc_minor > rq_minor)
       || (loc_major == rq_major && loc_minor == rq_minor
           && loc_micro > rq_micro) || (loc_major == rq_major
                                        && loc_minor == rq_minor
                                        && loc_micro == rq_micro)) == 0)
    {
      fprintf (stderr,
               "Error: running curl test depends on local libcurl version > %s\n",
               req_version);
      return -1;
    }

  /*
   * enforce required gnutls/openssl version.
   * TODO use curl version string to assert use of gnutls
   */
#if HTTPS_SUPPORT
  ssl_ver = strchr (curl_ver, ' ') + 1;

  if (strncmp ("GnuTLS", ssl_ver, strlen ("GNUtls")) == 0)
    {
      ssl_ver = strchr (ssl_ver, '/') + 1;
      req_ssl_ver = MHD_REQ_CURL_GNUTLS_VERSION;
    }
  else if (strncmp ("OpenSSL", ssl_ver, strlen ("OpenSSL")) == 0)
    {
      ssl_ver = strchr (ssl_ver, '/') + 1;
      req_ssl_ver = MHD_REQ_CURL_OPENSSL_VERSION;
    }
  else
    {
      fprintf (stderr, "Error: unrecognized curl ssl library\n");
      return -1;
    }

  parse_version_string (req_ssl_ver, &rq_major, &rq_minor, &rq_micro);
  parse_version_string (ssl_ver, &loc_major, &loc_minor, &loc_micro);

  if ((loc_major > rq_major
       || (loc_major == rq_major && loc_minor > rq_minor)
       || (loc_major == rq_major && loc_minor == rq_minor
           && loc_micro > rq_micro) || (loc_major == rq_major
                                        && loc_minor == rq_minor
                                        && loc_micro == rq_micro)) == 0)
    {
      fprintf (stderr,
               "Error: running curl test depends on local libcurl SSL version > %s\n",
               req_ssl_ver);
      return -1;
    }
#endif
  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemon_options_test.c.































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file mhds_get_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"

#define MHD_E_MEM "Error: memory error\n"
#define MHD_E_SERVER_INIT "Error: failed to start server\n"

const int DEBUG_GNUTLS_LOG_LEVEL = 0;
const char *test_file_name = "https_test_file";
const char test_file_data[] = "Hello World\n";

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  return 0;
}

int
test_wrap (char *test_name, int (*test) (void))
{
  int ret;

  fprintf (stdout, "running test: %s ", test_name);
  ret = test ();
  if (ret == 0)
    {
      fprintf (stdout, "[pass]\n");
    }
  else
    {
      fprintf (stdout, "[fail]\n");
    }
  return ret;
}


/**
 * Test daemon initialization with the MHD_OPTION_SOCK_ADDR option
 */
static int
test_ip_addr_option ()
{
  struct MHD_Daemon *d;
  struct sockaddr_in daemon_ip_addr;
#if HAVE_INET6
  struct sockaddr_in6 daemon_ip_addr6;
#endif

  memset (&daemon_ip_addr, 0, sizeof (struct sockaddr_in));
  daemon_ip_addr.sin_family = AF_INET;
  daemon_ip_addr.sin_port = htons (42433);

#if HAVE_INET6
  memset (&daemon_ip_addr6, 0, sizeof (struct sockaddr_in6));
  daemon_ip_addr6.sin6_family = AF_INET6;
  daemon_ip_addr6.sin6_port = htons (42433);
#endif

  inet_pton (AF_INET, "127.0.0.1", &daemon_ip_addr.sin_addr);
#if HAVE_INET6
  inet_pton (AF_INET6, "::ffff:127.0.0.1", &daemon_ip_addr6.sin6_addr);
#endif

  d = MHD_start_daemon (MHD_USE_DEBUG, 42433,
                        NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR,
                        &daemon_ip_addr, MHD_OPTION_END);

  if (d == 0)
    return -1;

  MHD_stop_daemon (d);

#if HAVE_INET6
  d = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_IPv6, 42433,
                        NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR,
                        &daemon_ip_addr6, MHD_OPTION_END);

  if (d == 0)
    return -1;

  MHD_stop_daemon (d);
#endif

  return 0;
}

/* setup a temporary transfer test file */
int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  errorCount += test_wrap ("ip addr option", &test_ip_addr_option);

  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_get.c.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
/*
     This file is part of libmicrohttpd
     (C) 2007, 2009 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_get.c
 * @brief  Testcase for libmicrohttpd GET operations
 *         TODO: test parsing of query
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/socket.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}


static int
testInternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system!*/
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testMultithreadedPoolGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system!*/
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}

static int
testUnknownPortGet ()
{
  struct MHD_Daemon *d;
  const union MHD_DaemonInfo *di;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  struct sockaddr_in addr;
  socklen_t addr_len = sizeof(addr);
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = 0;
  addr.sin_addr.s_addr = INADDR_ANY;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_SOCK_ADDR, &addr,
                        MHD_OPTION_END);
  if (d == NULL)
    return 32768;

  di = MHD_get_daemon_info (d, MHD_DAEMON_INFO_LISTEN_FD);
  if (di == NULL)
    return 65536;

  if (0 != getsockname(di->listen_fd, &addr, &addr_len))
    return 131072;

  if (addr.sin_family != AF_INET)
    return 26214;

  snprintf(buf, sizeof(buf), "http://localhost:%hu/hello_world",
           ntohs(addr.sin_port));

  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, buf);
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 524288;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 1048576;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 2097152;
  return 0;
}


static int
testStopRace ()
{
    struct sockaddr_in sin;
    int fd;
    struct MHD_Daemon *d;
    
    d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                         1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
    if (d == NULL)
       return 16;
    
    fd = socket(PF_INET, SOCK_STREAM, 0);
    if (fd < 0)
    {
       fprintf(stderr, "socket: %m\n");
       return 256;
    }
    
    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(1081);
    sin.sin_addr.s_addr = htonl(0x7f000001);
    
    if (connect(fd, (struct sockaddr *)(&sin), sizeof(sin)) < 0)
    {
       fprintf(stderr, "connect: %m\n");
       return 512;
    }
    
    /*  printf("Waiting\n"); */
    /* Let the thread get going. */
    usleep(500000);
    
    /* printf("Stopping daemon\n"); */
    MHD_stop_daemon (d);
 
    close(fd);
    
    /* printf("good\n"); */
    return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalGet ();
  errorCount += testMultithreadedGet ();
  errorCount += testMultithreadedPoolGet ();
  errorCount += testExternalGet ();
  errorCount += testUnknownPortGet ();
  errorCount += testStopRace ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_get_chunked.c.











































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_get_chunked.c
 * @brief  Testcase for libmicrohttpd GET operations with chunked content encoding
 *         TODO:
 *         - how to test that chunking was actually used?
 *         - use CURLOPT_HEADERFUNCTION to validate
 *           footer was sent
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

/**
 * MHD content reader callback that returns
 * data in chunks.
 */
static int
crc (void *cls, uint64_t pos, char *buf, int max)
{
  struct MHD_Response **responseptr = cls;

  if (pos == 128 * 10)
    {
      MHD_add_response_header (*responseptr, "Footer", "working");
      return -1;                /* end of stream */
    }
  if (max < 128)
    abort ();                   /* should not happen in this testcase... */
  memset (buf, 'A' + (pos / 128), 128);
  return 128;
}

/**
 * Dummy function that does nothing.
 */
static void
crcf (void *ptr)
{
  free (ptr);
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  const char *me = cls;
  struct MHD_Response *response;
  struct MHD_Response **responseptr;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  responseptr = malloc (sizeof (struct MHD_Response *));
  response = MHD_create_response_from_callback (-1,
                                                1024,
                                                &crc, responseptr, &crcf);
  *responseptr = response;
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

static int
validate (struct CBC cbc, int ebase)
{
  int i;
  char buf[128];

  if (cbc.pos != 128 * 10)
    return ebase;

  for (i = 0; i < 10; i++)
    {
      memset (buf, 'A' + i, 128);
      if (0 != memcmp (buf, &cbc.buf[i * 128], 128))
        {
          fprintf (stderr,
                   "Got  `%.*s'\nWant `%.*s'\n",
                   128, buf, 128, &cbc.buf[i * 128]);
          return ebase * 2;
        }
    }
  return 0;
}

static int
testInternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  return validate (cbc, 4);
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  return validate (cbc, 64);
}

static int
testMultithreadedPoolGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  return validate (cbc, 64);
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 5L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  return validate (cbc, 8192);
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalGet ();
  errorCount += testMultithreadedGet ();
  errorCount += testMultithreadedPoolGet ();
  errorCount += testExternalGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_get_sendfile.c.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
/* DO NOT CHANGE THIS LINE */
/*
     This file is part of libmicrohttpd
     (C) 2007, 2009 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_get_sendfile.c
 * @brief  Testcase for libmicrohttpd response from FD
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <fcntl.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#define TESTSTR "/* DO NOT CHANGE THIS LINE */"

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}


static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;
  int fd;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  fd = open ("daemontest_get_sendfile.c", O_RDONLY);
  if (fd == -1)
    abort ();
  response = MHD_create_response_from_fd (strlen (TESTSTR), fd);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}


static int
testInternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11080/");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system!*/
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen (TESTSTR))
    return 4;
  if (0 != strncmp (TESTSTR, cbc.buf, strlen (TESTSTR)))
    return 8;
  return 0;
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen (TESTSTR))
    return 64;
  if (0 != strncmp (TESTSTR, cbc.buf, strlen (TESTSTR)))
    return 128;
  return 0;
}

static int
testMultithreadedPoolGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system!*/
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen (TESTSTR))
    return 64;
  if (0 != strncmp (TESTSTR, cbc.buf, strlen (TESTSTR)))
    return 128;
  return 0;
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen (TESTSTR))
    return 8192;
  if (0 != strncmp (TESTSTR, cbc.buf, strlen (TESTSTR)))
    return 16384;
  return 0;
}

static int
testUnknownPortGet ()
{
  struct MHD_Daemon *d;
  const union MHD_DaemonInfo *di;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  struct sockaddr_in addr;
  socklen_t addr_len = sizeof(addr);
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_port = 0;
  addr.sin_addr.s_addr = INADDR_ANY;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_SOCK_ADDR, &addr,
                        MHD_OPTION_END);
  if (d == NULL)
    return 32768;

  di = MHD_get_daemon_info (d, MHD_DAEMON_INFO_LISTEN_FD);
  if (di == NULL)
    return 65536;

  if (0 != getsockname(di->listen_fd, &addr, &addr_len))
    return 131072;

  if (addr.sin_family != AF_INET)
    return 26214;

  snprintf(buf, sizeof(buf), "http://localhost:%hu/",
           ntohs(addr.sin_port));

  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, buf);
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 524288;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen (TESTSTR))
    return 1048576;
  if (0 != strncmp (TESTSTR, cbc.buf, strlen (TESTSTR)))
    return 2097152;
  return 0;
}


int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalGet ();
  errorCount += testMultithreadedGet ();
  errorCount += testMultithreadedPoolGet ();
  errorCount += testExternalGet ();
  errorCount += testUnknownPortGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_iplimit.c.



























































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_get.c
 * @brief  Testcase for libmicrohttpd GET operations
 *         TODO: test parsing of query
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  char buf[2048];
  int k;

  /* Test only valid for HTTP/1.1 (uses persistent connections) */
  if (!oneone)
    return 0;

  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_PER_IP_CONNECTION_LIMIT, 2,
                        MHD_OPTION_END);
  if (d == NULL)
    return 16;

  for (k = 0; k < 3; ++k)
    {
      struct CBC cbc[3];
      CURL *cenv[3];
      int i;

      for (i = 0; i < 3; ++i)
        {
          CURL *c;
          CURLcode errornum;
 
          cenv[i] = c = curl_easy_init ();
          cbc[i].buf = buf;
          cbc[i].size = 2048;
          cbc[i].pos = 0;

          curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
          curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
          curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc[i]);
          curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
          curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
          curl_easy_setopt (c, CURLOPT_FORBID_REUSE, 0L);
          curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
          curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
          // NOTE: use of CONNECTTIMEOUT without also
          //   setting NOSIGNAL results in really weird
          //   crashes on my system!
          curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);

          errornum = curl_easy_perform (c);
          if ( ( (CURLE_OK != errornum) && (i <  2) ) ||
	       ( (CURLE_OK == errornum) && (i == 2) ) )
            {
              int j;

              /* First 2 should succeed */
              if (i < 2)
                fprintf (stderr,
                         "curl_easy_perform failed: `%s'\n",
                         curl_easy_strerror (errornum));

              /* Last request should have failed */
              else
                fprintf (stderr,
                         "No error on IP address over limit\n");

              for (j = 0; j < i; ++j)
                curl_easy_cleanup (cenv[j]);
              MHD_stop_daemon (d);
              return 32;
            }
        }

      /* Cleanup the environments */
      for (i = 0; i < 3; ++i)
        curl_easy_cleanup (cenv[i]);

      sleep(2);

      for (i = 0; i < 2; ++i)
        {
          if (cbc[i].pos != strlen ("/hello_world"))
            {
              MHD_stop_daemon (d);
              return 64;
            }
          if (0 != strncmp ("/hello_world", cbc[i].buf, strlen ("/hello_world")))
            {
              MHD_stop_daemon (d);
              return 128;
            }
        }


    }
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedPoolGet ()
{
  struct MHD_Daemon *d;
  char buf[2048];
  int k;

  /* Test only valid for HTTP/1.1 (uses persistent connections) */
  if (!oneone)
    return 0;

  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_PER_IP_CONNECTION_LIMIT, 2,
                        MHD_OPTION_THREAD_POOL_SIZE, 4,
                        MHD_OPTION_END);
  if (d == NULL)
    return 16;

  for (k = 0; k < 3; ++k)
    {
      struct CBC cbc[3];
      CURL *cenv[3];
      int i;

      for (i = 0; i < 3; ++i)
        {
          CURL *c;
          CURLcode errornum;
 
          cenv[i] = c = curl_easy_init ();
          cbc[i].buf = buf;
          cbc[i].size = 2048;
          cbc[i].pos = 0;

          curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
          curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
          curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc[i]);
          curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
          curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
          curl_easy_setopt (c, CURLOPT_FORBID_REUSE, 0L);
          curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
          curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
          // NOTE: use of CONNECTTIMEOUT without also
          //   setting NOSIGNAL results in really weird
          //   crashes on my system!
          curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);

          errornum = curl_easy_perform (c);
          if ( ( (CURLE_OK != errornum) && (i <  2) ) ||
	       ( (CURLE_OK == errornum) && (i == 2) ) )
            {
              int j;

              /* First 2 should succeed */
              if (i < 2)
                fprintf (stderr,
                         "curl_easy_perform failed: `%s'\n",
                         curl_easy_strerror (errornum));

              /* Last request should have failed */
              else
                fprintf (stderr,
                         "No error on IP address over limit\n");

              for (j = 0; j < i; ++j)
                curl_easy_cleanup (cenv[j]);
              MHD_stop_daemon (d);
              return 32;
            }
        }

      /* Cleanup the environments */
      for (i = 0; i < 3; ++i)
        curl_easy_cleanup (cenv[i]);

      sleep(2);

      for (i = 0; i < 2; ++i)
        {
          if (cbc[i].pos != strlen ("/hello_world"))
            {
              MHD_stop_daemon (d);
              return 64;
            }
          if (0 != strncmp ("/hello_world", cbc[i].buf, strlen ("/hello_world")))
            {
              MHD_stop_daemon (d);
              return 128;
            }
        }


    }
  MHD_stop_daemon (d);
  return 0;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testMultithreadedGet ();
  errorCount += testMultithreadedPoolGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_large_put.c.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_large_put.c
 * @brief  Testcase for libmicrohttpd PUT operations
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

/**
 * Do not make this much larger since we will hit the
 * MHD default buffer limit and the test code is not
 * written for incremental upload processing...
 * (larger values will likely cause MHD to generate
 * an internal server error -- which would be avoided
 * by writing the putBuffer method in a more general
 * fashion).
 */
#define PUT_SIZE (256 * 1024)

static char *put_buffer;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
putBuffer (void *stream, size_t size, size_t nmemb, void *ptr)
{
  unsigned int *pos = ptr;
  unsigned int wrt;

  wrt = size * nmemb;
  if (wrt > PUT_SIZE - (*pos))
    wrt = PUT_SIZE - (*pos);
  memcpy (stream, &put_buffer[*pos], wrt);
  (*pos) += wrt;
  return wrt;
}

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  int *done = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp ("PUT", method))
    return MHD_NO;              /* unexpected method */
  if ((*done) == 0)
    {
      if (*upload_data_size != PUT_SIZE)
        {
#if 0
          fprintf (stderr,
                   "Waiting for more data (%u/%u)...\n",
                   *upload_data_size, PUT_SIZE);
#endif
          return MHD_YES;       /* not yet ready */
        }
      if (0 == memcmp (upload_data, put_buffer, PUT_SIZE))
        {
          *upload_data_size = 0;
        }
      else
        {
          printf ("Invalid upload data!\n");
          return MHD_NO;
        }
      *done = 1;
      return MHD_YES;
    }
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testInternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;
  char buf[2048];

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080,
                        NULL, NULL, &ahc_echo, &done_flag, 
			MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (1024*1024),
			MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;
  char buf[2048];

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081,
                        NULL, NULL, &ahc_echo, &done_flag, 
			MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (1024*1024),
			MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    {
      fprintf (stderr, "Got invalid response `%.*s'\n", (int)cbc.pos, cbc.buf);
      return 64;
    }
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testMultithreadedPoolPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;
  char buf[2048];

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081,
                        NULL, NULL, &ahc_echo, &done_flag,
                        MHD_OPTION_THREAD_POOL_SIZE, 4, 
			MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (1024*1024),
			MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    {
      fprintf (stderr, "Got invalid response `%.*s'\n", (int)cbc.pos, cbc.buf);
      return 64;
    }
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testExternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;
  unsigned int pos = 0;
  int done_flag = 0;
  char buf[2048];

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  multi = NULL;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082,
                        NULL, NULL, &ahc_echo, &done_flag,
                        MHD_OPTION_CONNECTION_MEMORY_LIMIT,
                        (size_t) (PUT_SIZE * 4), MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    {
      fprintf (stderr, "Got invalid response `%.*s'\n", (int)cbc.pos, cbc.buf);
      return 8192;
    }
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  put_buffer = malloc (PUT_SIZE);
  memset (put_buffer, 1, PUT_SIZE);
  errorCount += testInternalPut ();
  errorCount += testMultithreadedPut ();
  errorCount += testMultithreadedPoolPut ();
  errorCount += testExternalPut ();
  free (put_buffer);
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_long_header.c.



































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_long_header.c
 * @brief  Testcase for libmicrohttpd handling of very long headers
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

/**
 * We will set the memory available per connection to
 * half of this value, so the actual value does not have
 * to be big at all...
 */
#define VERY_LONG (1024*10)

static int oneone;

static int
apc_all (void *cls, const struct sockaddr *addr, socklen_t addrlen)
{
  return MHD_YES;
}

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testLongUrlGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  char *url;
  long code;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        1080,
                        &apc_all,
                        NULL,
                        &ahc_echo,
                        "GET",
                        MHD_OPTION_CONNECTION_MEMORY_LIMIT,
                        (size_t) (VERY_LONG / 2), MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  url = malloc (VERY_LONG);
  memset (url, 'a', VERY_LONG);
  url[VERY_LONG - 1] = '\0';
  memcpy (url, "http://localhost:1080/", strlen ("http://localhost:1080/"));
  curl_easy_setopt (c, CURLOPT_URL, url);
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK == curl_easy_perform (c))
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      free (url);
      return 2;
    }
  if (CURLE_OK != curl_easy_getinfo (c, CURLINFO_RESPONSE_CODE, &code))
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      free (url);
      return 4;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  free (url);
  if (code != MHD_HTTP_REQUEST_URI_TOO_LONG)
    return 8;
  return 0;
}


static int
testLongHeaderGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  char *url;
  long code;
  struct curl_slist *header = NULL;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        1080,
                        &apc_all,
                        NULL,
                        &ahc_echo,
                        "GET",
                        MHD_OPTION_CONNECTION_MEMORY_LIMIT,
                        (size_t) (VERY_LONG / 2), MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  url = malloc (VERY_LONG);
  memset (url, 'a', VERY_LONG);
  url[VERY_LONG - 1] = '\0';
  url[VERY_LONG / 2] = ':';
  url[VERY_LONG / 2 + 1] = ' ';
  header = curl_slist_append (header, url);

  curl_easy_setopt (c, CURLOPT_HTTPHEADER, header);
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK == curl_easy_perform (c))
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      curl_slist_free_all (header);
      free (url);
      return 32;
    }
  if (CURLE_OK != curl_easy_getinfo (c, CURLINFO_RESPONSE_CODE, &code))
    {
      curl_slist_free_all (header);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      free (url);
      return 64;
    }
  curl_slist_free_all (header);
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  free (url);
  if (code != MHD_HTTP_REQUEST_ENTITY_TOO_LARGE)
    return 128;
  return 0;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testLongUrlGet ();
  errorCount += testLongHeaderGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_parse_cookies.c.



















































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249

/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_parse_cookies.c
 * @brief  Testcase for HTTP cookie parsing
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;
  const char *hdr;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  ret = 0;

  hdr = MHD_lookup_connection_value (connection, MHD_COOKIE_KIND, "name1");
  if ((hdr == NULL) || (0 != strcmp (hdr, "var1")))
    abort ();
  hdr = MHD_lookup_connection_value (connection, MHD_COOKIE_KIND, "name2");
  if ((hdr == NULL) || (0 != strcmp (hdr, "var2")))
    abort ();
  hdr = MHD_lookup_connection_value (connection, MHD_COOKIE_KIND, "name3");
  if ((hdr == NULL) || (0 != strcmp (hdr, "")))
    abort ();
  hdr = MHD_lookup_connection_value (connection, MHD_COOKIE_KIND, "name4");
  if ((hdr == NULL) || (0 != strcmp (hdr, "var4 with spaces")))
    abort ();
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:21080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  /* note that the string below intentionally uses the
     various ways cookies can be specified to exercise the
     parser! Do not change! */
  curl_easy_setopt (c, CURLOPT_COOKIE,
                    "name1=var1; name2=var2,name3 ;name4=\"var4 with spaces\";");
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testExternalGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_post.c.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_post.c
 * @brief  Testcase for libmicrohttpd POST operations using URL-encoding
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#define POST_DATA "name=daniel&project=curl"

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

/**
 * Note that this post_iterator is not perfect
 * in that it fails to support incremental processing.
 * (to be fixed in the future)
 */
static int
post_iterator (void *cls,
               enum MHD_ValueKind kind,
               const char *key,
               const char *filename,
               const char *content_type,
               const char *transfer_encoding,
               const char *value, uint64_t off, size_t size)
{
  int *eok = cls;

  if ((0 == strcmp (key, "name")) &&
      (size == strlen ("daniel")) && (0 == strncmp (value, "daniel", size)))
    (*eok) |= 1;
  if ((0 == strcmp (key, "project")) &&
      (size == strlen ("curl")) && (0 == strncmp (value, "curl", size)))
    (*eok) |= 2;
  return MHD_YES;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int eok;
  struct MHD_Response *response;
  struct MHD_PostProcessor *pp;
  int ret;

  if (0 != strcmp ("POST", method))
    {
      printf ("METHOD: %s\n", method);
      return MHD_NO;            /* unexpected method */
    }
  pp = *unused;
  if (pp == NULL)
    {
      eok = 0;
      pp = MHD_create_post_processor (connection, 1024, &post_iterator, &eok);
      *unused = pp;
    }
  MHD_post_process (pp, upload_data, *upload_data_size);
  if ((eok == 3) && (0 == *upload_data_size))
    {
      response = MHD_create_response_from_data (strlen (url),
                                                (void *) url,
                                                MHD_NO, MHD_YES);
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
      MHD_destroy_post_processor (pp);
      *unused = NULL;
      return ret;
    }
  *upload_data_size = 0;
  return MHD_YES;
}


static int
testInternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
  curl_easy_setopt (c, CURLOPT_POST, 1L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
  curl_easy_setopt (c, CURLOPT_POST, 1L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testMultithreadedPoolPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, NULL,
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
  curl_easy_setopt (c, CURLOPT_POST, 1L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testExternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
  curl_easy_setopt (c, CURLOPT_POST, 1L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}

static int
ahc_cancel (void *cls,
	    struct MHD_Connection *connection,
	    const char *url,
	    const char *method,
	    const char *version,
	    const char *upload_data, size_t *upload_data_size,
	    void **unused)
{
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp ("POST", method))
    {
      fprintf (stderr,
	       "Unexpected method `%s'\n", method);
      return MHD_NO; 
    }

  if (*unused == NULL)
    {
      *unused = "wibble";
      /* We don't want the body. Send a 500. */
      response = MHD_create_response_from_data(0, NULL, 0, 0);
      ret = MHD_queue_response(connection, 500, response);
      if (ret != MHD_YES)
	fprintf(stderr, "Failed to queue response\n");
      MHD_destroy_response(response);
      return ret;
    }
  else
    {
      fprintf(stderr, 
	      "In ahc_cancel again. This should not happen.\n");
      return MHD_NO;
    }
}

struct CRBC
{
  const char *buffer;
  size_t size;
  size_t pos;
};

static size_t 
readBuffer(void *p, size_t size, size_t nmemb, void *opaque)
{
  struct CRBC *data = opaque;
  size_t required = size * nmemb;
  size_t left = data->size - data->pos;
  
  if (required > left)
    required = left;
  
  memcpy(p, data->buffer + data->pos, required);
  data->pos += required;
  
  return required/size;
}

static size_t 
slowReadBuffer(void *p, size_t size, size_t nmemb, void *opaque)
{
  sleep(1);
  return readBuffer(p, size, nmemb, opaque);
}

#define FLAG_EXPECT_CONTINUE 1
#define FLAG_CHUNKED 2
#define FLAG_FORM_DATA 4
#define FLAG_SLOW_READ 8
#define FLAG_COUNT 16

static int
testMultithreadedPostCancelPart(int flags)
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  struct curl_slist *headers = NULL;
  long response_code;
  CURLcode cc;
  int result = 0;
  struct CRBC crbc;

  /* Don't test features that aren't available with HTTP/1.0 in
   * HTTP/1.0 mode. */
  if (!oneone && (flags & (FLAG_EXPECT_CONTINUE | FLAG_CHUNKED)))
    return 0;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_cancel, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 32768;

  crbc.buffer = "Test content";
  crbc.size = strlen(crbc.buffer);
  crbc.pos = 0;
  
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, (flags & FLAG_SLOW_READ) ? &slowReadBuffer : &readBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &crbc);
  curl_easy_setopt (c, CURLOPT_POSTFIELDS, NULL);
  curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, crbc.size);
  curl_easy_setopt (c, CURLOPT_POST, 1L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);

  if (flags & FLAG_CHUNKED)
      headers = curl_slist_append(headers, "Transfer-Encoding: chunked");
  if (!(flags & FLAG_FORM_DATA))
  headers = curl_slist_append(headers, "Content-Type: application/octet-stream");
  if (flags & FLAG_EXPECT_CONTINUE)
      headers = curl_slist_append(headers, "Expect: 100-Continue");
  curl_easy_setopt(c, CURLOPT_HTTPHEADER, headers);
  
  if (CURLE_HTTP_RETURNED_ERROR != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "flibbet curl_easy_perform didn't fail as expected: `%s' %d\n",
               curl_easy_strerror (errornum), errornum);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      curl_slist_free_all(headers);
      return 65536;
    }
  
  if (CURLE_OK != (cc = curl_easy_getinfo(c, CURLINFO_RESPONSE_CODE, &response_code)))
    {
      fprintf(stderr, "curl_easy_getinfo failed: '%s'\n", curl_easy_strerror(errornum));
      result = 65536;
    }
  
  if (!result && (response_code != 500))
    {
      fprintf(stderr, "Unexpected response code: %ld\n", response_code);
      result = 131072;
    }
  
  if (!result && (cbc.pos != 0))
    result = 262144;

  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  curl_slist_free_all(headers);
  return result;
}

static int
testMultithreadedPostCancel()
{
  int result = 0;
  int flags;
  for(flags = 0; flags < FLAG_COUNT; ++flags)
    result |= testMultithreadedPostCancelPart(flags);  
  return result;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testMultithreadedPostCancel ();
  errorCount += testInternalPost ();
  errorCount += testMultithreadedPost ();
  errorCount += testMultithreadedPoolPost ();
  errorCount += testExternalPost ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_post_loop.c.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_post_loop.c
 * @brief  Testcase for libmicrohttpd POST operations using URL-encoding
 * @author Christian Grothoff (inspired by bug report #1296)
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#define POST_DATA "<?xml version='1.0' ?>\n<xml>\n<data-id>1</data-id>\n</xml>\n"

#define LOOPCOUNT 10

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **mptr)
{
  static int marker;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp ("POST", method))
    {
      printf ("METHOD: %s\n", method);
      return MHD_NO;            /* unexpected method */
    }
  if ((*mptr != NULL) && (0 == *upload_data_size))
    {
      if (*mptr != &marker)
        abort ();
      response = MHD_create_response_from_data (2, "OK", MHD_NO, MHD_NO);
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
      *mptr = NULL;
      return ret;
    }
  if (strlen (POST_DATA) != *upload_data_size)
    return MHD_YES;
  *upload_data_size = 0;
  *mptr = &marker;
  return MHD_YES;
}


static int
testInternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  int i;
  char url[1024];

  cbc.buf = buf;
  cbc.size = 2048;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  for (i = 0; i < LOOPCOUNT; i++)
    {
      if (99 == i % 100)
        fprintf (stderr, ".");
      c = curl_easy_init ();
      cbc.pos = 0;
      buf[0] = '\0';
      sprintf (url, "http://localhost:1080/hw%d", i);
      curl_easy_setopt (c, CURLOPT_URL, url);
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      if (CURLE_OK != (errornum = curl_easy_perform (c)))
        {
          fprintf (stderr,
                   "curl_easy_perform failed: `%s'\n",
                   curl_easy_strerror (errornum));
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2;
        }
      curl_easy_cleanup (c);
      if ((buf[0] != 'O') || (buf[1] != 'K'))
        {
          MHD_stop_daemon (d);
          return 4;
        }
    }
  MHD_stop_daemon (d);
  if (LOOPCOUNT >= 99)
    fprintf (stderr, "\n");
  return 0;
}

static int
testMultithreadedPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  int i;
  char url[1024];

  cbc.buf = buf;
  cbc.size = 2048;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  for (i = 0; i < LOOPCOUNT; i++)
    {
      if (99 == i % 100)
        fprintf (stderr, ".");
      c = curl_easy_init ();
      cbc.pos = 0;
      buf[0] = '\0';
      sprintf (url, "http://localhost:1081/hw%d", i);
      curl_easy_setopt (c, CURLOPT_URL, url);
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      if (CURLE_OK != (errornum = curl_easy_perform (c)))
        {
          fprintf (stderr,
                   "curl_easy_perform failed: `%s'\n",
                   curl_easy_strerror (errornum));
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 32;
        }
      curl_easy_cleanup (c);
      if ((buf[0] != 'O') || (buf[1] != 'K'))
        {
          MHD_stop_daemon (d);
          return 64;
        }
    }
  MHD_stop_daemon (d);
  if (LOOPCOUNT >= 99)
    fprintf (stderr, "\n");
  return 0;
}

static int
testMultithreadedPoolPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  int i;
  char url[1024];

  cbc.buf = buf;
  cbc.size = 2048;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, NULL,
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  for (i = 0; i < LOOPCOUNT; i++)
    {
      if (99 == i % 100)
        fprintf (stderr, ".");
      c = curl_easy_init ();
      cbc.pos = 0;
      buf[0] = '\0';
      sprintf (url, "http://localhost:1081/hw%d", i);
      curl_easy_setopt (c, CURLOPT_URL, url);
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      if (CURLE_OK != (errornum = curl_easy_perform (c)))
        {
          fprintf (stderr,
                   "curl_easy_perform failed: `%s'\n",
                   curl_easy_strerror (errornum));
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 32;
        }
      curl_easy_cleanup (c);
      if ((buf[0] != 'O') || (buf[1] != 'K'))
        {
          MHD_stop_daemon (d);
          return 64;
        }
    }
  MHD_stop_daemon (d);
  if (LOOPCOUNT >= 99)
    fprintf (stderr, "\n");
  return 0;
}

static int
testExternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;
  int i;
  unsigned long long timeout;
  long ctimeout;
  char url[1024];

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  for (i = 0; i < LOOPCOUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      cbc.pos = 0;
      buf[0] = '\0';
      sprintf (url, "http://localhost:1082/hw%d", i);
      curl_easy_setopt (c, CURLOPT_URL, url);
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (multi != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          while (CURLM_CALL_MULTI_PERFORM ==
                 curl_multi_perform (multi, &running));
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              MHD_stop_daemon (d);
              return 4096;
            }
          if (MHD_NO == MHD_get_timeout (d, &timeout))
            timeout = 100;      /* 100ms == INFTY -- CURL bug... */
          if ((CURLM_OK == curl_multi_timeout (multi, &ctimeout)) &&
              (ctimeout < timeout) && (ctimeout >= 0))
            timeout = ctimeout;
          tv.tv_sec = timeout / 1000;
          tv.tv_usec = (timeout % 1000) * 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          while (CURLM_CALL_MULTI_PERFORM ==
                 curl_multi_perform (multi, &running));
          if (running == 0)
            {
              msg = curl_multi_info_read (multi, &running);
              if (msg == NULL)
                break;
              if (msg->msg == CURLMSG_DONE)
                {
                  if (msg->data.result != CURLE_OK)
                    printf ("%s failed at %s:%d: `%s'\n",
                            "curl_multi_perform",
                            __FILE__,
                            __LINE__, curl_easy_strerror (msg->data.result));
                  curl_multi_remove_handle (multi, c);
                  curl_easy_cleanup (c);
                  c = NULL;
                }
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
      if ((buf[0] != 'O') || (buf[1] != 'K'))
        {
          curl_multi_cleanup (multi);
          MHD_stop_daemon (d);
          return 8192;
        }
    }
  curl_multi_cleanup (multi);
  MHD_stop_daemon (d);
  fprintf (stderr, "\n");
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPost ();
  errorCount += testMultithreadedPost ();
  errorCount += testMultithreadedPoolPost ();
  errorCount += testExternalPost ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_postform.c.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_post.c
 * @brief  Testcase for libmicrohttpd POST operations using multipart/postform data
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

/**
 * Note that this post_iterator is not perfect
 * in that it fails to support incremental processing.
 * (to be fixed in the future)
 */
static int
post_iterator (void *cls,
               enum MHD_ValueKind kind,
               const char *key,
               const char *filename,
               const char *content_type,
               const char *transfer_encoding,
               const char *value, uint64_t off, size_t size)
{
  int *eok = cls;

#if 0
  fprintf (stderr, "PI sees %s-%.*s\n", key, size, value);
#endif
  if ((0 == strcmp (key, "name")) &&
      (size == strlen ("daniel")) && (0 == strncmp (value, "daniel", size)))
    (*eok) |= 1;
  if ((0 == strcmp (key, "project")) &&
      (size == strlen ("curl")) && (0 == strncmp (value, "curl", size)))
    (*eok) |= 2;
  return MHD_YES;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int eok;
  struct MHD_Response *response;
  struct MHD_PostProcessor *pp;
  int ret;

  if (0 != strcmp ("POST", method))
    {
      printf ("METHOD: %s\n", method);
      return MHD_NO;            /* unexpected method */
    }
  pp = *unused;
  if (pp == NULL)
    {
      eok = 0;
      pp = MHD_create_post_processor (connection, 1024, &post_iterator, &eok);
      if (pp == NULL)
        abort ();
      *unused = pp;
    }
  MHD_post_process (pp, upload_data, *upload_data_size);
  if ((eok == 3) && (0 == *upload_data_size))
    {
      response = MHD_create_response_from_data (strlen (url),
                                                (void *) url,
                                                MHD_NO, MHD_YES);
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
      MHD_destroy_post_processor (pp);
      *unused = NULL;
      return ret;
    }
  *upload_data_size = 0;
  return MHD_YES;
}

static struct curl_httppost *
make_form ()
{
  struct curl_httppost *post = NULL;
  struct curl_httppost *last = NULL;

  curl_formadd (&post, &last, CURLFORM_COPYNAME, "name",
                CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END);
  curl_formadd (&post, &last, CURLFORM_COPYNAME, "project",
                CURLFORM_COPYCONTENTS, "curl", CURLFORM_END);
  return post;
}


static int
testInternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  struct curl_httppost *pd;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  pd = make_form ();
  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      curl_formfree (pd);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  curl_formfree (pd);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  struct curl_httppost *pd;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  pd = make_form ();
  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 5L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      curl_formfree (pd);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  curl_formfree (pd);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testMultithreadedPoolPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;
  struct curl_httppost *pd;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081, NULL, NULL, &ahc_echo, NULL,
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  pd = make_form ();
  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 5L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      curl_formfree (pd);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  curl_formfree (pd);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testExternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;
  struct curl_httppost *pd;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  pd = make_form ();
  curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      curl_formfree (pd);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_formfree (pd);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          curl_formfree (pd);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          curl_formfree (pd);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  curl_formfree (pd);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPost ();
  errorCount += testMultithreadedPost ();
  errorCount += testMultithreadedPoolPost ();
  errorCount += testExternalPost ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_process_arguments.c.





























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238

/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_process_arguments.c
 * @brief  Testcase for HTTP URI arguments
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;
  const char *hdr;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  hdr = MHD_lookup_connection_value (connection, MHD_GET_ARGUMENT_KIND, "k");
  if ((hdr == NULL) || (0 != strcmp (hdr, "v x")))
    abort ();
  hdr = MHD_lookup_connection_value (connection,
                                     MHD_GET_ARGUMENT_KIND, "hash");
  if ((hdr == NULL) || (0 != strcmp (hdr, "#")))
    abort ();
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL,
                    "http://localhost:21080/hello_world?k=v+x&hash=%23");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testExternalGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_process_headers.c.

























































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428

/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_process_headers.c
 * @brief  Testcase for HTTP header access
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
kv_cb (void *cls, enum MHD_ValueKind kind, const char *key, const char *value)
{
  if ((0 == strcmp (key, MHD_HTTP_HEADER_HOST)) &&
      (0 == strcmp (value, "localhost:21080")) && (kind == MHD_HEADER_KIND))
    {
      *((int *) cls) = 1;
      return MHD_NO;
    }
  return MHD_YES;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;
  const char *hdr;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  ret = 0;
  MHD_get_connection_values (connection, MHD_HEADER_KIND, &kv_cb, &ret);
  if (ret != 1)
    abort ();
  hdr = MHD_lookup_connection_value (connection, MHD_HEADER_KIND, "NotFound");
  if (hdr != NULL)
    abort ();
  hdr = MHD_lookup_connection_value (connection,
                                     MHD_HEADER_KIND, MHD_HTTP_HEADER_ACCEPT);
  if ((hdr == NULL) || (0 != strcmp (hdr, "*/*")))
    abort ();
  hdr = MHD_lookup_connection_value (connection,
                                     MHD_HEADER_KIND, MHD_HTTP_HEADER_HOST);
  if ((hdr == NULL) || (0 != strcmp (hdr, "localhost:21080")))
    abort ();
  MHD_set_connection_value (connection,
                            MHD_HEADER_KIND, "FakeHeader", "NowPresent");
  hdr = MHD_lookup_connection_value (connection,
                                     MHD_HEADER_KIND, "FakeHeader");
  if ((hdr == NULL) || (0 != strcmp (hdr, "NowPresent")))
    abort ();

  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  MHD_add_response_header (response, "MyHeader", "MyValue");
  hdr = MHD_get_response_header (response, "MyHeader");
  if (0 != strcmp ("MyValue", hdr))
    abort ();
  MHD_add_response_header (response, "MyHeader", "MyValueToo");
  if (MHD_YES != MHD_del_response_header (response, "MyHeader", "MyValue"))
    abort ();
  hdr = MHD_get_response_header (response, "MyHeader");
  if (0 != strcmp ("MyValueToo", hdr))
    abort ();
  if (1 != MHD_get_response_headers (response, NULL, NULL))
    abort ();
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}


static int
testInternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:21080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:21080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testMultithreadedPoolGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        21080, NULL, NULL, &ahc_echo, "GET",
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:21080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;
  return 0;
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:21080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalGet ();
  errorCount += testMultithreadedGet ();
  errorCount += testMultithreadedPoolGet ();
  errorCount += testExternalGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_put.c.

































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_put.c
 * @brief  Testcase for libmicrohttpd PUT operations
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
putBuffer (void *stream, size_t size, size_t nmemb, void *ptr)
{
  unsigned int *pos = ptr;
  unsigned int wrt;

  wrt = size * nmemb;
  if (wrt > 8 - (*pos))
    wrt = 8 - (*pos);
  memcpy (stream, &("Hello123"[*pos]), wrt);
  (*pos) += wrt;
  return wrt;
}

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  int *done = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp ("PUT", method))
    return MHD_NO;              /* unexpected method */
  if ((*done) == 0)
    {
      if (*upload_data_size != 8)
        return MHD_YES;         /* not yet ready */
      if (0 == memcmp (upload_data, "Hello123", 8))
        {
          *upload_data_size = 0;
        }
      else
        {
          printf ("Invalid upload data `%8s'!\n", upload_data);
          return MHD_NO;
        }
      *done = 1;
      return MHD_YES;
    }
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testInternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        1081,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;

  return 0;
}

static int
testMultithreadedPoolPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        1081,
                        NULL, NULL, &ahc_echo, &done_flag,
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;

  return 0;
}


static int
testExternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;
  unsigned int pos = 0;
  int done_flag = 0;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        1082,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPut ();
  errorCount += testMultithreadedPut ();
  errorCount += testMultithreadedPoolPut ();
  errorCount += testExternalPut ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_put_chunked.c.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
/*
     This file is part of libmicrohttpd
     (C) 2007 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_put_chunked.c
 * @brief Testcase for libmicrohttpd PUT operations with chunked encoding
 *        for the upload data
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
putBuffer (void *stream, size_t size, size_t nmemb, void *ptr)
{
  unsigned int *pos = ptr;
  unsigned int wrt;

  wrt = size * nmemb;
  if (wrt > 8 - (*pos))
    wrt = 8 - (*pos);
  if (wrt > 4)
    wrt = 4;                    /* only send half at first => force multiple chunks! */
  memcpy (stream, &("Hello123"[*pos]), wrt);
  (*pos) += wrt;
  return wrt;
}

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  int *done = cls;
  struct MHD_Response *response;
  int ret;
  int have;

  if (0 != strcmp ("PUT", method))
    return MHD_NO;              /* unexpected method */
  if ((*done) < 8)
    {
      have = *upload_data_size;
      if (have + *done > 8)
        {
          printf ("Invalid upload data `%8s'!\n", upload_data);
          return MHD_NO;
        }
      if (0 == memcmp (upload_data, &"Hello123"[*done], have))
        {
          *done += have;
          *upload_data_size = 0;
        }
      else
        {
          printf ("Invalid upload data `%8s'!\n", upload_data);
          return MHD_NO;
        }
#if 0
      fprintf (stderr, "Not ready for response: %u/%u\n", *done, 8);
#endif
      return MHD_YES;
    }
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testInternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11080/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  /*
     // by not giving the file size, we force chunking!
     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
   */
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 2;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 4;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 8;
  return 0;
}

static int
testMultithreadedPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        11081,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  /*
     // by not giving the file size, we force chunking!
     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
   */
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;

  return 0;
}

static int
testMultithreadedPoolPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        11081,
                        NULL, NULL, &ahc_echo, &done_flag,
                        MHD_OPTION_THREAD_POOL_SIZE, 4, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  /*
     // by not giving the file size, we force chunking!
     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
   */
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;

  return 0;
}


static int
testExternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;
  unsigned int pos = 0;
  int done_flag = 0;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        11082,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  /*
     // by not giving the file size, we force chunking!
     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
   */
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPut ();
  errorCount += testMultithreadedPut ();
  errorCount += testMultithreadedPoolPut ();
  errorCount += testExternalPut ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/daemontest_termination.c.





































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
     This file is part of libmicrohttpd
     (C) 2009 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_termination.c
 * @brief  Testcase for libmicrohttpd tolerating client not closing immediately
 * @author hollosig
 */
#define PORT	12345

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <microhttpd.h>
#include <unistd.h>
#include <curl/curl.h>


static int
connection_handler (void *cls,
                    struct MHD_Connection *connection,
                    const char *url,
                    const char *method,
                    const char *version,
                    const char *upload_data, size_t * upload_data_size,
                    void **ptr)
{
  static int i;

  if (*ptr == NULL)
    {
      *ptr = &i;
      return MHD_YES;
    }

  if (*upload_data_size != 0)
    {
      (*upload_data_size) = 0;
      return MHD_YES;
    }

  struct MHD_Response *response =
    MHD_create_response_from_data (strlen ("Response"), "Response", 0, 0);
  int ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);

  return ret;
}

static size_t
write_data (void *ptr, size_t size, size_t nmemb, void *stream)
{
  return size * nmemb;
}

int
main ()
{
  struct MHD_Daemon *daemon;

  daemon = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                             PORT,
                             NULL,
                             NULL, connection_handler, NULL, MHD_OPTION_END);

  if (daemon == NULL)
    {
      fprintf (stderr, "Daemon cannot be started!");
      exit (1);
    }

  CURL *curl = curl_easy_init ();
  //curl_easy_setopt(curl, CURLOPT_POST, 1L);
  char url[255];
  sprintf (url, "http://localhost:%d", PORT);
  curl_easy_setopt (curl, CURLOPT_URL, url);
  curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, write_data);

  CURLcode success = curl_easy_perform (curl);
  if (success != 0)
    {
      fprintf (stderr, "CURL Error");
      exit (1);
    }
  /* CPU used to go crazy here */
  sleep (1);

  curl_easy_cleanup (curl);
  MHD_stop_daemon (daemon);

  return 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/Makefile.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/testcurl/https/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
check_PROGRAMS = tls_daemon_options_test$(EXEEXT) \
	tls_authentication_test$(EXEEXT) \
	mhds_multi_daemon_test$(EXEEXT) mhds_get_test$(EXEEXT) \
	mhds_get_test_select$(EXEEXT) mhds_session_info_test$(EXEEXT) \
	tls_thread_mode_test$(EXEEXT) \
	tls_multi_thread_mode_test$(EXEEXT) \
	tls_session_time_out_test$(EXEEXT)
TESTS = tls_daemon_options_test$(EXEEXT) \
	mhds_multi_daemon_test$(EXEEXT) mhds_get_test$(EXEEXT) \
	mhds_get_test_select$(EXEEXT) mhds_session_info_test$(EXEEXT) \
	tls_thread_mode_test$(EXEEXT) \
	tls_multi_thread_mode_test$(EXEEXT) \
	tls_session_time_out_test$(EXEEXT) \
	tls_authentication_test$(EXEEXT)
subdir = src/testcurl/https
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am_mhds_get_test_OBJECTS = mhds_get_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_get_test_OBJECTS = $(am_mhds_get_test_OBJECTS)
mhds_get_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_mhds_get_test_select_OBJECTS = mhds_get_test_select.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_get_test_select_OBJECTS = $(am_mhds_get_test_select_OBJECTS)
mhds_get_test_select_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_mhds_multi_daemon_test_OBJECTS = mhds_multi_daemon_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_multi_daemon_test_OBJECTS = $(am_mhds_multi_daemon_test_OBJECTS)
mhds_multi_daemon_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_mhds_session_info_test_OBJECTS = mhds_session_info_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_session_info_test_OBJECTS = $(am_mhds_session_info_test_OBJECTS)
mhds_session_info_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_authentication_test_OBJECTS =  \
	tls_authentication_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_authentication_test_OBJECTS =  \
	$(am_tls_authentication_test_OBJECTS)
tls_authentication_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_daemon_options_test_OBJECTS =  \
	tls_daemon_options_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_daemon_options_test_OBJECTS =  \
	$(am_tls_daemon_options_test_OBJECTS)
tls_daemon_options_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_multi_thread_mode_test_OBJECTS =  \
	tls_multi_thread_mode_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_multi_thread_mode_test_OBJECTS =  \
	$(am_tls_multi_thread_mode_test_OBJECTS)
tls_multi_thread_mode_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_session_time_out_test_OBJECTS =  \
	tls_session_time_out_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_session_time_out_test_OBJECTS =  \
	$(am_tls_session_time_out_test_OBJECTS)
tls_session_time_out_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_thread_mode_test_OBJECTS = tls_thread_mode_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
tls_thread_mode_test_OBJECTS = $(am_tls_thread_mode_test_OBJECTS)
tls_thread_mode_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(mhds_get_test_SOURCES) $(mhds_get_test_select_SOURCES) \
	$(mhds_multi_daemon_test_SOURCES) \
	$(mhds_session_info_test_SOURCES) \
	$(tls_authentication_test_SOURCES) \
	$(tls_daemon_options_test_SOURCES) \
	$(tls_multi_thread_mode_test_SOURCES) \
	$(tls_session_time_out_test_SOURCES) \
	$(tls_thread_mode_test_SOURCES)
DIST_SOURCES = $(mhds_get_test_SOURCES) \
	$(mhds_get_test_select_SOURCES) \
	$(mhds_multi_daemon_test_SOURCES) \
	$(mhds_session_info_test_SOURCES) \
	$(tls_authentication_test_SOURCES) \
	$(tls_daemon_options_test_SOURCES) \
	$(tls_multi_thread_mode_test_SOURCES) \
	$(tls_session_time_out_test_SOURCES) \
	$(tls_thread_mode_test_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../../../
top_builddir = ../../..
top_srcdir = ../../..
SUBDIRS = .
#AM_CFLAGS = --coverage
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I$(top_srcdir)/src/daemon \
  $(LIBCURL_CPPFLAGS)

EXTRA_DIST = cert.pem key.pem tls_test_keys.h tls_test_common.h

# cURL dependent tests
tls_session_time_out_test_SOURCES = \
  tls_session_time_out_test.c \
  tls_test_common.c

tls_session_time_out_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz

tls_daemon_options_test_SOURCES = \
  tls_daemon_options_test.c \
  tls_test_common.c

tls_daemon_options_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz

tls_thread_mode_test_SOURCES = \
  tls_thread_mode_test.c \
  tls_test_common.c

tls_thread_mode_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz

tls_multi_thread_mode_test_SOURCES = \
  tls_multi_thread_mode_test.c \
  tls_test_common.c

tls_multi_thread_mode_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz

tls_authentication_test_SOURCES = \
  tls_authentication_test.c \
  tls_test_common.c

tls_authentication_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz

mhds_session_info_test_SOURCES = \
  mhds_session_info_test.c \
  tls_test_common.c

mhds_session_info_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz

mhds_multi_daemon_test_SOURCES = \
  mhds_multi_daemon_test.c \
  tls_test_common.c

mhds_multi_daemon_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz  

mhds_get_test_SOURCES = \
  mhds_get_test.c \
  tls_test_common.c

mhds_get_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz  

mhds_get_test_select_SOURCES = \
  mhds_get_test_select.c \
  tls_test_common.c

mhds_get_test_select_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz  

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/testcurl/https/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/testcurl/https/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
mhds_get_test$(EXEEXT): $(mhds_get_test_OBJECTS) $(mhds_get_test_DEPENDENCIES) 
	@rm -f mhds_get_test$(EXEEXT)
	$(LINK) $(mhds_get_test_OBJECTS) $(mhds_get_test_LDADD) $(LIBS)
mhds_get_test_select$(EXEEXT): $(mhds_get_test_select_OBJECTS) $(mhds_get_test_select_DEPENDENCIES) 
	@rm -f mhds_get_test_select$(EXEEXT)
	$(LINK) $(mhds_get_test_select_OBJECTS) $(mhds_get_test_select_LDADD) $(LIBS)
mhds_multi_daemon_test$(EXEEXT): $(mhds_multi_daemon_test_OBJECTS) $(mhds_multi_daemon_test_DEPENDENCIES) 
	@rm -f mhds_multi_daemon_test$(EXEEXT)
	$(LINK) $(mhds_multi_daemon_test_OBJECTS) $(mhds_multi_daemon_test_LDADD) $(LIBS)
mhds_session_info_test$(EXEEXT): $(mhds_session_info_test_OBJECTS) $(mhds_session_info_test_DEPENDENCIES) 
	@rm -f mhds_session_info_test$(EXEEXT)
	$(LINK) $(mhds_session_info_test_OBJECTS) $(mhds_session_info_test_LDADD) $(LIBS)
tls_authentication_test$(EXEEXT): $(tls_authentication_test_OBJECTS) $(tls_authentication_test_DEPENDENCIES) 
	@rm -f tls_authentication_test$(EXEEXT)
	$(LINK) $(tls_authentication_test_OBJECTS) $(tls_authentication_test_LDADD) $(LIBS)
tls_daemon_options_test$(EXEEXT): $(tls_daemon_options_test_OBJECTS) $(tls_daemon_options_test_DEPENDENCIES) 
	@rm -f tls_daemon_options_test$(EXEEXT)
	$(LINK) $(tls_daemon_options_test_OBJECTS) $(tls_daemon_options_test_LDADD) $(LIBS)
tls_multi_thread_mode_test$(EXEEXT): $(tls_multi_thread_mode_test_OBJECTS) $(tls_multi_thread_mode_test_DEPENDENCIES) 
	@rm -f tls_multi_thread_mode_test$(EXEEXT)
	$(LINK) $(tls_multi_thread_mode_test_OBJECTS) $(tls_multi_thread_mode_test_LDADD) $(LIBS)
tls_session_time_out_test$(EXEEXT): $(tls_session_time_out_test_OBJECTS) $(tls_session_time_out_test_DEPENDENCIES) 
	@rm -f tls_session_time_out_test$(EXEEXT)
	$(LINK) $(tls_session_time_out_test_OBJECTS) $(tls_session_time_out_test_LDADD) $(LIBS)
tls_thread_mode_test$(EXEEXT): $(tls_thread_mode_test_OBJECTS) $(tls_thread_mode_test_DEPENDENCIES) 
	@rm -f tls_thread_mode_test$(EXEEXT)
	$(LINK) $(tls_thread_mode_test_OBJECTS) $(tls_thread_mode_test_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

include ./$(DEPDIR)/mhds_get_test.Po
include ./$(DEPDIR)/mhds_get_test_select.Po
include ./$(DEPDIR)/mhds_multi_daemon_test.Po
include ./$(DEPDIR)/mhds_session_info_test.Po
include ./$(DEPDIR)/tls_authentication_test.Po
include ./$(DEPDIR)/tls_daemon_options_test.Po
include ./$(DEPDIR)/tls_multi_thread_mode_test.Po
include ./$(DEPDIR)/tls_session_time_out_test.Po
include ./$(DEPDIR)/tls_test_common.Po
include ./$(DEPDIR)/tls_thread_mode_test.Po

.c.o:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c $<

.c.obj:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
#	source='$<' object='$@' libtool=yes \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
	mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libtool ctags \
	ctags-recursive distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-recursive uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/Makefile.am.



























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
SUBDIRS = .

if USE_COVERAGE
  AM_CFLAGS = --coverage
endif

AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I$(top_srcdir)/src/daemon \
  $(LIBCURL_CPPFLAGS)

check_PROGRAMS = \
  tls_daemon_options_test \
  tls_authentication_test \
  mhds_multi_daemon_test \
  mhds_get_test \
  mhds_get_test_select \
  mhds_session_info_test \
  tls_thread_mode_test \
  tls_multi_thread_mode_test \
  tls_session_time_out_test

EXTRA_DIST = cert.pem key.pem tls_test_keys.h tls_test_common.h

# tls_authentication_test currently fails for unknown reasons
TESTS = \
  tls_daemon_options_test \
  mhds_multi_daemon_test \
  mhds_get_test \
  mhds_get_test_select \
  mhds_session_info_test \
  tls_thread_mode_test \
  tls_multi_thread_mode_test \
  tls_session_time_out_test \
  tls_authentication_test

# cURL dependent tests
tls_session_time_out_test_SOURCES = \
  tls_session_time_out_test.c \
  tls_test_common.c
tls_session_time_out_test_LDADD  = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_daemon_options_test_SOURCES = \
  tls_daemon_options_test.c \
  tls_test_common.c
tls_daemon_options_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_thread_mode_test_SOURCES = \
  tls_thread_mode_test.c \
  tls_test_common.c
tls_thread_mode_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_multi_thread_mode_test_SOURCES = \
  tls_multi_thread_mode_test.c \
  tls_test_common.c
tls_multi_thread_mode_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_authentication_test_SOURCES = \
  tls_authentication_test.c \
  tls_test_common.c
tls_authentication_test_LDADD  = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

mhds_session_info_test_SOURCES = \
  mhds_session_info_test.c \
  tls_test_common.c
mhds_session_info_test_LDADD  = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

mhds_multi_daemon_test_SOURCES = \
  mhds_multi_daemon_test.c \
  tls_test_common.c
mhds_multi_daemon_test_LDADD  = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@  

mhds_get_test_SOURCES = \
  mhds_get_test.c \
  tls_test_common.c
mhds_get_test_LDADD  = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@  


mhds_get_test_select_SOURCES = \
  mhds_get_test_select.c \
  tls_test_common.c
mhds_get_test_select_LDADD  = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@  

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/Makefile.in.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
check_PROGRAMS = tls_daemon_options_test$(EXEEXT) \
	tls_authentication_test$(EXEEXT) \
	mhds_multi_daemon_test$(EXEEXT) mhds_get_test$(EXEEXT) \
	mhds_get_test_select$(EXEEXT) mhds_session_info_test$(EXEEXT) \
	tls_thread_mode_test$(EXEEXT) \
	tls_multi_thread_mode_test$(EXEEXT) \
	tls_session_time_out_test$(EXEEXT)
TESTS = tls_daemon_options_test$(EXEEXT) \
	mhds_multi_daemon_test$(EXEEXT) mhds_get_test$(EXEEXT) \
	mhds_get_test_select$(EXEEXT) mhds_session_info_test$(EXEEXT) \
	tls_thread_mode_test$(EXEEXT) \
	tls_multi_thread_mode_test$(EXEEXT) \
	tls_session_time_out_test$(EXEEXT) \
	tls_authentication_test$(EXEEXT)
subdir = src/testcurl/https
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am_mhds_get_test_OBJECTS = mhds_get_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_get_test_OBJECTS = $(am_mhds_get_test_OBJECTS)
mhds_get_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_mhds_get_test_select_OBJECTS = mhds_get_test_select.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_get_test_select_OBJECTS = $(am_mhds_get_test_select_OBJECTS)
mhds_get_test_select_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_mhds_multi_daemon_test_OBJECTS = mhds_multi_daemon_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_multi_daemon_test_OBJECTS = $(am_mhds_multi_daemon_test_OBJECTS)
mhds_multi_daemon_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_mhds_session_info_test_OBJECTS = mhds_session_info_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
mhds_session_info_test_OBJECTS = $(am_mhds_session_info_test_OBJECTS)
mhds_session_info_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_authentication_test_OBJECTS =  \
	tls_authentication_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_authentication_test_OBJECTS =  \
	$(am_tls_authentication_test_OBJECTS)
tls_authentication_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_daemon_options_test_OBJECTS =  \
	tls_daemon_options_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_daemon_options_test_OBJECTS =  \
	$(am_tls_daemon_options_test_OBJECTS)
tls_daemon_options_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_multi_thread_mode_test_OBJECTS =  \
	tls_multi_thread_mode_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_multi_thread_mode_test_OBJECTS =  \
	$(am_tls_multi_thread_mode_test_OBJECTS)
tls_multi_thread_mode_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_session_time_out_test_OBJECTS =  \
	tls_session_time_out_test.$(OBJEXT) tls_test_common.$(OBJEXT)
tls_session_time_out_test_OBJECTS =  \
	$(am_tls_session_time_out_test_OBJECTS)
tls_session_time_out_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_tls_thread_mode_test_OBJECTS = tls_thread_mode_test.$(OBJEXT) \
	tls_test_common.$(OBJEXT)
tls_thread_mode_test_OBJECTS = $(am_tls_thread_mode_test_OBJECTS)
tls_thread_mode_test_DEPENDENCIES =  \
	$(top_builddir)/src/testcurl/libcurl_version_check.a \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(mhds_get_test_SOURCES) $(mhds_get_test_select_SOURCES) \
	$(mhds_multi_daemon_test_SOURCES) \
	$(mhds_session_info_test_SOURCES) \
	$(tls_authentication_test_SOURCES) \
	$(tls_daemon_options_test_SOURCES) \
	$(tls_multi_thread_mode_test_SOURCES) \
	$(tls_session_time_out_test_SOURCES) \
	$(tls_thread_mode_test_SOURCES)
DIST_SOURCES = $(mhds_get_test_SOURCES) \
	$(mhds_get_test_select_SOURCES) \
	$(mhds_multi_daemon_test_SOURCES) \
	$(mhds_session_info_test_SOURCES) \
	$(tls_authentication_test_SOURCES) \
	$(tls_daemon_options_test_SOURCES) \
	$(tls_multi_thread_mode_test_SOURCES) \
	$(tls_session_time_out_test_SOURCES) \
	$(tls_thread_mode_test_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = .
@USE_COVERAGE_TRUE@AM_CFLAGS = --coverage
AM_CPPFLAGS = \
  -I$(top_srcdir)/src/include \
  -I$(top_srcdir)/src/daemon \
  $(LIBCURL_CPPFLAGS)

EXTRA_DIST = cert.pem key.pem tls_test_keys.h tls_test_common.h

# cURL dependent tests
tls_session_time_out_test_SOURCES = \
  tls_session_time_out_test.c \
  tls_test_common.c

tls_session_time_out_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_daemon_options_test_SOURCES = \
  tls_daemon_options_test.c \
  tls_test_common.c

tls_daemon_options_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_thread_mode_test_SOURCES = \
  tls_thread_mode_test.c \
  tls_test_common.c

tls_thread_mode_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_multi_thread_mode_test_SOURCES = \
  tls_multi_thread_mode_test.c \
  tls_test_common.c

tls_multi_thread_mode_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

tls_authentication_test_SOURCES = \
  tls_authentication_test.c \
  tls_test_common.c

tls_authentication_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

mhds_session_info_test_SOURCES = \
  mhds_session_info_test.c \
  tls_test_common.c

mhds_session_info_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@

mhds_multi_daemon_test_SOURCES = \
  mhds_multi_daemon_test.c \
  tls_test_common.c

mhds_multi_daemon_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@  

mhds_get_test_SOURCES = \
  mhds_get_test.c \
  tls_test_common.c

mhds_get_test_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@  

mhds_get_test_select_SOURCES = \
  mhds_get_test_select.c \
  tls_test_common.c

mhds_get_test_select_LDADD = \
  $(top_builddir)/src/testcurl/libcurl_version_check.a \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@  

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/testcurl/https/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/testcurl/https/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
mhds_get_test$(EXEEXT): $(mhds_get_test_OBJECTS) $(mhds_get_test_DEPENDENCIES) 
	@rm -f mhds_get_test$(EXEEXT)
	$(LINK) $(mhds_get_test_OBJECTS) $(mhds_get_test_LDADD) $(LIBS)
mhds_get_test_select$(EXEEXT): $(mhds_get_test_select_OBJECTS) $(mhds_get_test_select_DEPENDENCIES) 
	@rm -f mhds_get_test_select$(EXEEXT)
	$(LINK) $(mhds_get_test_select_OBJECTS) $(mhds_get_test_select_LDADD) $(LIBS)
mhds_multi_daemon_test$(EXEEXT): $(mhds_multi_daemon_test_OBJECTS) $(mhds_multi_daemon_test_DEPENDENCIES) 
	@rm -f mhds_multi_daemon_test$(EXEEXT)
	$(LINK) $(mhds_multi_daemon_test_OBJECTS) $(mhds_multi_daemon_test_LDADD) $(LIBS)
mhds_session_info_test$(EXEEXT): $(mhds_session_info_test_OBJECTS) $(mhds_session_info_test_DEPENDENCIES) 
	@rm -f mhds_session_info_test$(EXEEXT)
	$(LINK) $(mhds_session_info_test_OBJECTS) $(mhds_session_info_test_LDADD) $(LIBS)
tls_authentication_test$(EXEEXT): $(tls_authentication_test_OBJECTS) $(tls_authentication_test_DEPENDENCIES) 
	@rm -f tls_authentication_test$(EXEEXT)
	$(LINK) $(tls_authentication_test_OBJECTS) $(tls_authentication_test_LDADD) $(LIBS)
tls_daemon_options_test$(EXEEXT): $(tls_daemon_options_test_OBJECTS) $(tls_daemon_options_test_DEPENDENCIES) 
	@rm -f tls_daemon_options_test$(EXEEXT)
	$(LINK) $(tls_daemon_options_test_OBJECTS) $(tls_daemon_options_test_LDADD) $(LIBS)
tls_multi_thread_mode_test$(EXEEXT): $(tls_multi_thread_mode_test_OBJECTS) $(tls_multi_thread_mode_test_DEPENDENCIES) 
	@rm -f tls_multi_thread_mode_test$(EXEEXT)
	$(LINK) $(tls_multi_thread_mode_test_OBJECTS) $(tls_multi_thread_mode_test_LDADD) $(LIBS)
tls_session_time_out_test$(EXEEXT): $(tls_session_time_out_test_OBJECTS) $(tls_session_time_out_test_DEPENDENCIES) 
	@rm -f tls_session_time_out_test$(EXEEXT)
	$(LINK) $(tls_session_time_out_test_OBJECTS) $(tls_session_time_out_test_LDADD) $(LIBS)
tls_thread_mode_test$(EXEEXT): $(tls_thread_mode_test_OBJECTS) $(tls_thread_mode_test_DEPENDENCIES) 
	@rm -f tls_thread_mode_test$(EXEEXT)
	$(LINK) $(tls_thread_mode_test_OBJECTS) $(tls_thread_mode_test_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mhds_get_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mhds_get_test_select.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mhds_multi_daemon_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mhds_session_info_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_authentication_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_daemon_options_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_multi_thread_mode_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_session_time_out_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_test_common.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_thread_mode_test.Po@am__quote@

.c.o:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c $<

.c.obj:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
	mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libtool ctags \
	ctags-recursive distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-recursive uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/cert.pem.



































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-----BEGIN CERTIFICATE-----
MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0
MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC
AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X
fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud
3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/
GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv
rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh
siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O
BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2
RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN
8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/
0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe
JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3
OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV
RhZvQx74NQnS6g==
-----END CERTIFICATE-----

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/key.pem.























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf
qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I
niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+
faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx
7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ
vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj
lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R
EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l
/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx
u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/
dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo
32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc
+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd
RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6
OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob
XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF
hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae
SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b
AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH
6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3
QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG
7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj
P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9
/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC
eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx
-----END RSA PRIVATE KEY-----

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/mhds_get_test.c.



























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
  This file is part of libmicrohttpd
  (C) 2007 Christian Grothoff
  
  libmicrohttpd is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2, or (at your
  option) any later version.
  
  libmicrohttpd is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.
  
  You should have received a copy of the GNU General Public License
  along with libmicrohttpd; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.
*/

/**
 * @file mhds_get_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include <limits.h>
#include <sys/stat.h>
#include <curl/curl.h>
#include <gcrypt.h>
#include "tls_test_common.h"

int curl_check_version (const char *req_version, ...);
extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];
extern const char srv_signed_cert_pem[];
extern const char srv_signed_key_pem[];

static int
test_cipher_option (FILE * test_fd, char *cipher_suite, int proto_version)
{

  int ret;
  struct MHD_Daemon *d;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                        MHD_USE_DEBUG, 42433,
                        NULL, NULL, &http_ahc, NULL,
                        MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
                        MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
                        MHD_OPTION_END);

  if (d == NULL)
    {
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  ret = test_https_transfer (test_fd, cipher_suite, proto_version);

  MHD_stop_daemon (d);
  return ret;
}

/* perform a HTTP GET request via SSL/TLS */
int
test_secure_get (FILE * test_fd, char *cipher_suite, int proto_version)
{
  int ret;
  struct MHD_Daemon *d;

  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                        MHD_USE_DEBUG, 42433,
                        NULL, NULL, &http_ahc, NULL,
                        MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
                        MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
                        MHD_OPTION_END);

  if (d == NULL)
    {
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  ret = test_https_transfer (test_fd, cipher_suite, proto_version);

  MHD_stop_daemon (d);
  return ret;
}

int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  if (!gcry_check_version (GCRYPT_VERSION))
    abort ();
  if ((test_fd = setup_test_file ()) == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }
  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error: %s\n", strerror (errno));
      fclose (test_fd);
      return -1;
    }
  errorCount +=
    test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1);
  errorCount +=
    test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3);
  errorCount +=
    test_cipher_option (test_fd, "DES-CBC3-SHA", CURL_SSLVERSION_TLSv1);

  print_test_result (errorCount, argv[0]);

  curl_global_cleanup ();
  fclose (test_fd);
  remove (TEST_FILE_NAME);

  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/mhds_get_test_select.c.











































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file mhds_get_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include <limits.h>
#include <sys/stat.h>
#include <curl/curl.h>
#include <gcrypt.h>
#include "tls_test_common.h"

int curl_check_version (const char *req_version, ...);
extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];
extern const char srv_signed_cert_pem[];
extern const char srv_signed_key_pem[];

static int oneone;

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}

static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  struct CURLMsg *msg;
  time_t start;
  struct timeval tv;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_SSL,
                        1082, NULL, NULL, &ahc_echo, "GET", 
                        MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
                        MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
			MHD_OPTION_END);
  if (d == NULL)
    return 256;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "https://localhost:1082/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0);
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  if (oneone)
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  else
    curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


  multi = curl_multi_init ();
  if (multi == NULL)
    {
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 512;
    }
  mret = curl_multi_add_handle (multi, c);
  if (mret != CURLM_OK)
    {
      curl_multi_cleanup (multi);
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 1024;
    }
  start = time (NULL);
  while ((time (NULL) - start < 5) && (multi != NULL))
    {
      max = 0;
      FD_ZERO (&rs);
      FD_ZERO (&ws);
      FD_ZERO (&es);
      curl_multi_perform (multi, &running);
      mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
      if (mret != CURLM_OK)
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 2048;
        }
      if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
        {
          curl_multi_remove_handle (multi, c);
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          MHD_stop_daemon (d);
          return 4096;
        }
      tv.tv_sec = 0;
      tv.tv_usec = 1000;
      select (max + 1, &rs, &ws, &es, &tv);
      curl_multi_perform (multi, &running);
      if (running == 0)
        {
          msg = curl_multi_info_read (multi, &running);
          if (msg == NULL)
            break;
          if (msg->msg == CURLMSG_DONE)
            {
              if (msg->data.result != CURLE_OK)
                printf ("%s failed at %s:%d: `%s'\n",
                        "curl_multi_perform",
                        __FILE__,
                        __LINE__, curl_easy_strerror (msg->data.result));
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              c = NULL;
              multi = NULL;
            }
        }
      MHD_run (d);
    }
  if (multi != NULL)
    {
      curl_multi_remove_handle (multi, c);
      curl_easy_cleanup (c);
      curl_multi_cleanup (multi);
    }
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 8192;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 16384;
  return 0;
}

GCRY_THREAD_OPTION_PTHREAD_IMPL;

int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
  if (!gcry_check_version (GCRYPT_VERSION))
    abort ();
  if ((test_fd = setup_test_file ()) == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }
  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error: %s\n", strerror (errno));
      fclose (test_fd);
      return -1;
    }
  if (0 != (errorCount = testExternalGet ()))
    fprintf (stderr, "Fail: %d\n", errorCount);
  curl_global_cleanup ();
  fclose (test_fd);
  remove (TEST_FILE_NAME);
  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/mhds_multi_daemon_test.c.























































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file mhds_multi_daemon_test.c
 * @brief  Testcase for libmicrohttpd multiple HTTPS daemon scenario
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include <curl/curl.h>
#include <limits.h>
#include <sys/stat.h>

#include "tls_test_common.h"

extern int curl_check_version (const char *req_version, ...);
extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];

/* TODO mv to common */
/**
 * perform cURL request for file
 * @param test_fd: file to attempt transferring
 */
static int
test_daemon_get (FILE * test_fd, char *cipher_suite, int proto_version,
                 int port)
{
  CURL *c;
  struct CBC cbc;
  CURLcode errornum;
  char url[255];
  size_t len;
  struct stat file_stat;

  stat (TEST_FILE_NAME, &file_stat);
  len = file_stat.st_size;

  /* used to memcmp local copy & deamon supplied copy */
  unsigned char *mem_test_file_local;

  mem_test_file_local = malloc (len);
  fseek (test_fd, 0, SEEK_SET);
  if (fread (mem_test_file_local, sizeof (char), len, test_fd) != len)
    {
      fprintf (stderr, "Error: failed to read test file. %s\n",
               strerror (errno));
      free (mem_test_file_local);
      return -1;
    }

  if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
    {
      fprintf (stderr, "Error: failed to read test file. %s\n",
               strerror (errno));
      free (mem_test_file_local);
      return -1;
    }
  cbc.size = len;
  cbc.pos = 0;

  if (gen_test_file_url (url, port))
    {
      free (mem_test_file_local);
      free (cbc.buf);
      return -1;
    }

  c = curl_easy_init ();
#if DEBUG_HTTPS_TEST
  curl_easy_setopt (c, CURLOPT_VERBOSE, 1);
#endif
  curl_easy_setopt (c, CURLOPT_URL, url);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_FILE, &cbc);

  /* TLS options */
  curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version);
  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite);

  /* currently skip any peer authentication */
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0);

  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);

  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr, "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      free (mem_test_file_local);
      free (cbc.buf);
      return errornum;
    }

  curl_easy_cleanup (c);

  /* compare received file and local reference */
  if (memcmp (cbc.buf, mem_test_file_local, len) != 0)
    {
      fprintf (stderr, "Error: local file & received file differ.\n");
      free (mem_test_file_local);
      free (cbc.buf);
      return -1;
    }

  free (mem_test_file_local);
  free (cbc.buf);
  return 0;
}

/*
 * assert initiating two separate daemons and having one shut down
 * doesn't affect the other
 */
int
test_concurent_daemon_pair (FILE * test_fd, char *cipher_suite,
                            int proto_version)
{

  int ret;
  struct MHD_Daemon *d1;
  struct MHD_Daemon *d2;
  d1 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                         MHD_USE_DEBUG, DEAMON_TEST_PORT,
                         NULL, NULL, &http_ahc, NULL,
                         MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
                         MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
                         MHD_OPTION_END);

  if (d1 == NULL)
    {
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  d2 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                         MHD_USE_DEBUG, DEAMON_TEST_PORT + 1,
                         NULL, NULL, &http_ahc, NULL,
                         MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
                         MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
                         MHD_OPTION_END);

  if (d2 == NULL)
    {
      MHD_stop_daemon (d1);
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  ret =
    test_daemon_get (test_fd, cipher_suite, proto_version, DEAMON_TEST_PORT);
  ret +=
    test_daemon_get (test_fd, cipher_suite, proto_version,
                     DEAMON_TEST_PORT + 1);

  MHD_stop_daemon (d2);
  ret +=
    test_daemon_get (test_fd, cipher_suite, proto_version, DEAMON_TEST_PORT);
  MHD_stop_daemon (d1);
  return ret;
}

int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  if ((test_fd = setup_test_file ()) == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }
  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error (code: %u). l:%d f:%s\n", errorCount, __LINE__,
               __FUNCTION__);
      fclose (test_fd);
      return -1;
    }
  errorCount +=
    test_concurent_daemon_pair (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3);

  print_test_result (errorCount, "concurent_daemon_pair");

  curl_global_cleanup ();
  fclose (test_fd);

  remove (TEST_FILE_NAME);
  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/mhds_session_info_test.c.































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file mhds_session_info_test.c
 * @brief  Testcase for libmicrohttpd HTTPS connection querying operations
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include <curl/curl.h>

#include "tls_test_common.h"

extern int curl_check_version (const char *req_version, ...);
extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];

struct MHD_Daemon *d;

/*
 * HTTP access handler call back
 * used to query negotiated security parameters
 */
static int
query_session_ahc (void *cls, struct MHD_Connection *connection,
                   const char *url, const char *method,
                   const char *upload_data, const char *version,
                   size_t *upload_data_size, void **ptr)
{
  struct MHD_Response *response;
  int ret;
  
  if (NULL == *ptr)
    {
      *ptr = &query_session_ahc;
      return MHD_YES;
    }

  /* assert actual connection cipher is the one negotiated */
  if (GNUTLS_CIPHER_AES_256_CBC != 
      (ret = MHD_get_connection_info
       (connection,
	MHD_CONNECTION_INFO_CIPHER_ALGO)->cipher_algorithm))
    {
      fprintf (stderr, "Error: requested cipher mismatch (wanted %d, got %d)\n",
               GNUTLS_CIPHER_AES_256_CBC,
	       ret);
      return -1;
    }

  if (GNUTLS_SSL3 != 
      (ret = MHD_get_connection_info
       (connection,
	MHD_CONNECTION_INFO_PROTOCOL)->protocol))
    {
      fprintf (stderr, "Error: requested protocol mismatch (wanted %d, got %d)\n",
               GNUTLS_SSL3,
	       ret);
      return -1;
    }

  response = MHD_create_response_from_data (strlen (EMPTY_PAGE),
                                            (void *) EMPTY_PAGE,
                                            MHD_NO, MHD_NO);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

/*
 * negotiate a secure connection with server & query negotiated security parameters
 */
static int
test_query_session ()
{
  CURL *c;
  struct CBC cbc;
  CURLcode errornum;
  char url[256];

  if (NULL == (cbc.buf = malloc (sizeof (char) * 255)))
    return 16;
  cbc.size = 255;
  cbc.pos = 0;

  gen_test_file_url (url, DEAMON_TEST_PORT);

  /* setup test */
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                        MHD_USE_DEBUG, DEAMON_TEST_PORT,
                        NULL, NULL, &query_session_ahc, NULL,
			MHD_OPTION_HTTPS_PRIORITIES, "NORMAL:-AES-128-CBC",
                        MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
                        MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
                        MHD_OPTION_END);

  if (d == NULL)
    return 2;

  c = curl_easy_init ();
#if DEBUG_HTTPS_TEST
  curl_easy_setopt (c, CURLOPT_VERBOSE, 1);
#endif
  curl_easy_setopt (c, CURLOPT_URL, url);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_FILE, &cbc);
  /* TLS options */
  curl_easy_setopt (c, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, "AES256-SHA");
  /* currently skip any peer authentication */
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0);

  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);

  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr, "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));

      MHD_stop_daemon (d);
      curl_easy_cleanup (c);
      free (cbc.buf);
      return -1;
    }

  MHD_stop_daemon (d);
  curl_easy_cleanup (c);
  free (cbc.buf);
  return 0;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error (code: %u)\n", errorCount);
      return -1;
    }
  errorCount += test_query_session ();
  print_test_result (errorCount, argv[0]);
  curl_global_cleanup ();
  if (errorCount > 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  return errorCount;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_authentication_test.c.

















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file tls_authentication_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include <curl/curl.h>
#include <limits.h>
#include <sys/stat.h>

#include "tls_test_common.h"

extern int curl_check_version (const char *req_version, ...);
extern const char test_file_data[];

extern const char ca_key_pem[];
extern const char ca_cert_pem[];
extern const char srv_signed_cert_pem[];
extern const char srv_signed_key_pem[];

const char *ca_cert_file_name = "tmp_ca_cert.pem";

/*
 * test HTTPS transfer
 * @param test_fd: file to attempt transfering
 */
static int
test_daemon_get (FILE * test_fd, char *cipher_suite, int proto_version)
{
  CURL *c;
  struct CBC cbc;
  CURLcode errornum;
  char url[255];
  struct stat statb;

  stat (TEST_FILE_NAME, &statb);

  int len = statb.st_size;

  /* used to memcmp local copy & deamon supplied copy */
  unsigned char *mem_test_file_local;

  if (NULL == (mem_test_file_local = malloc (len)))
    {
      fprintf (stderr, MHD_E_MEM);
      return -1;
    }

  fseek (test_fd, 0, SEEK_SET);
  if (fread (mem_test_file_local, sizeof (char), len, test_fd) != len)
    {
      fprintf (stderr, "Error: failed to read test file. %s\n",
               strerror (errno));
      free (mem_test_file_local);
      return -1;
    }

  if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
    {
      fprintf (stderr, MHD_E_MEM);
      free (mem_test_file_local);
      return -1;
    }
  cbc.size = len;
  cbc.pos = 0;

  /* construct url - this might use doc_path */
  gen_test_file_url (url, DEAMON_TEST_PORT);

  c = curl_easy_init ();
#if DEBUG_HTTPS_TEST
  curl_easy_setopt (c, CURLOPT_VERBOSE, 1);
#endif
  curl_easy_setopt (c, CURLOPT_URL, url);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_FILE, &cbc);

  /* TLS options */
  curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version);
  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite);

  /* perform peer authentication */
  /* TODO merge into send_curl_req */
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 1);
  curl_easy_setopt (c, CURLOPT_CAINFO, ca_cert_file_name);
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0);

  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);

  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);

  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr, "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      free (mem_test_file_local);
      free (cbc.buf);
      return errornum;
    }

  curl_easy_cleanup (c);

  if (memcmp (cbc.buf, mem_test_file_local, len) != 0)
    {
      fprintf (stderr, "Error: local file & received file differ.\n");
      free (cbc.buf);
      free (mem_test_file_local);
      return -1;
    }

  free (mem_test_file_local);
  free (cbc.buf);
  return 0;
}

/* perform a HTTP GET request via SSL/TLS */
static int
test_secure_get (FILE * test_fd, char *cipher_suite, int proto_version)
{
  int ret;
  struct MHD_Daemon *d;

  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                        MHD_USE_DEBUG, DEAMON_TEST_PORT,
                        NULL, NULL, &http_ahc, NULL,
                        MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
                        MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
                        MHD_OPTION_END);

  if (d == NULL)
    {
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  ret = test_daemon_get (test_fd, cipher_suite, proto_version);

  MHD_stop_daemon (d);
  return ret;
}

static FILE *
setup_ca_cert ()
{
  FILE *cert_fd;

  if (NULL == (cert_fd = fopen (ca_cert_file_name, "wb+")))
    {
      fprintf (stderr, "Error: failed to open `%s': %s\n",
               ca_cert_file_name, strerror (errno));
      return NULL;
    }
  if (fwrite (ca_cert_pem, sizeof (char), strlen (ca_cert_pem), cert_fd)
      != strlen (ca_cert_pem))
    {
      fprintf (stderr, "Error: failed to write `%s. %s'\n",
               ca_cert_file_name, strerror (errno));
      fclose (cert_fd);
      return NULL;
    }
  if (fflush (cert_fd))
    {
      fprintf (stderr, "Error: failed to flush ca cert file stream. %s\n",
               strerror (errno));
      fclose (cert_fd);
      return NULL;
    }

  return cert_fd;
}

int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  if ((test_fd = setup_test_file ()) == NULL || setup_ca_cert () == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }

  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error (code: %u)\n", errorCount);
      fclose (test_fd);
      return -1;
    }

  errorCount +=
    test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1);

  print_test_result (errorCount, argv[0]);

  curl_global_cleanup ();
  fclose (test_fd);

  remove (TEST_FILE_NAME);
  remove (ca_cert_file_name);
  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_daemon_options_test.c.









































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
  This file is part of libmicrohttpd
  (C) 2007, 2010 Christian Grothoff
  
  libmicrohttpd is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2, or (at your
  option) any later version.
  
  libmicrohttpd is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.
  
  You should have received a copy of the GNU General Public License
  along with libmicrohttpd; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.
*/

/**
 * @file tls_daemon_options_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include <sys/stat.h>
#include <limits.h>
#include <gcrypt.h>
#include "tls_test_common.h"

extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];

int curl_check_version (const char *req_version, ...);

/**
 * test server refuses to negotiate connections with unsupported protocol versions
 *
 */
/* TODO rm test_fd */
int
test_unmatching_ssl_version (FILE * test_fd, char *cipher_suite,
                             int curl_req_ssl_version)
{
  struct CBC cbc;
  if (NULL == (cbc.buf = malloc (sizeof (char) * 256)))
    {
      fprintf (stderr, "Error: failed to allocate: %s\n",
               strerror (errno));
      return -1;
    }
  cbc.size = 256;
  cbc.pos = 0;

  char url[255];
  if (gen_test_file_url (url, DEAMON_TEST_PORT))
    {
      free (cbc.buf);
      return -1;
    }

  /* assert daemon *rejected* request */
  if (CURLE_OK ==
      send_curl_req (url, &cbc, cipher_suite, curl_req_ssl_version))
    {
      free (cbc.buf);
      return -1;
    }

  free (cbc.buf);
  return 0;
}

/* setup a temporary transfer test file */
int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  int daemon_flags =
    MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL | MHD_USE_DEBUG;
  gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
  gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
  if (curl_check_version (MHD_REQ_CURL_VERSION))
    {
      return -1;
    }

  if ((test_fd = setup_test_file ()) == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }

  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fclose (test_fd);
      remove (TEST_FILE_NAME);
      fprintf (stderr, "Error: %s\n", strerror (errno));
      return -1;
    }
  errorCount +=
    test_wrap ("TLS1.0-AES-SHA1",
	       &test_https_transfer, test_fd, daemon_flags,
	       "AES128-SHA1",
	       CURL_SSLVERSION_TLSv1,
	       MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
	       MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
	       MHD_OPTION_HTTPS_PRIORITIES, "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+RSA:+COMP-NULL",
	       MHD_OPTION_END);
  errorCount +=
    test_wrap ("TLS1.0-AES-SHA1",
	       &test_https_transfer, test_fd, daemon_flags,
	       "AES128-SHA1",
	       CURL_SSLVERSION_SSLv3,
	       MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
	       MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
	       MHD_OPTION_HTTPS_PRIORITIES, "NONE:+VERS-SSL3.0:+AES-128-CBC:+SHA1:+RSA:+COMP-NULL",
	       MHD_OPTION_END);

  errorCount +=
    test_wrap ("SSL3.0-AES-SHA1",
	       &test_https_transfer, test_fd, daemon_flags,
	       "AES128-SHA1",
	       CURL_SSLVERSION_SSLv3,
	       MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
	       MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
	       MHD_OPTION_HTTPS_PRIORITIES, "NONE:+VERS-SSL3.0:+AES-128-CBC:+SHA1:+RSA:+COMP-NULL",
	       MHD_OPTION_END);
#if 0
  /* manual inspection of the handshake suggests that CURL will
     request TLSv1, we send back "SSL3" and CURL takes it *despite*
     being configured to speak SSL3-only.  Notably, the other way
     round (have curl request SSL3, respond with TLSv1 only)
     is properly refused by CURL.  Either way, this does NOT seem
     to be a bug in MHD/gnuTLS but rather in CURL; hence this
     test is commented out here... */
  errorCount +=
    test_wrap ("unmatching version: SSL3 vs. TLS", &test_unmatching_ssl_version,
               test_fd, daemon_flags, "AES256-SHA", CURL_SSLVERSION_TLSv1,
               MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
               MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
               MHD_OPTION_CIPHER_ALGORITHM, "SSL3", MHD_OPTION_END);
#endif

  errorCount +=
    test_wrap ("TLS1.0 vs SSL3",
	       &test_unmatching_ssl_version, test_fd, daemon_flags,
	       "AES256-SHA",
	       CURL_SSLVERSION_SSLv3,
	       MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
	       MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
	       MHD_OPTION_HTTPS_PRIORITIES, "NONE:+VERS-TLS1.0:+AES-256-CBC:+SHA1:+RSA:+COMP-NULL",
	       MHD_OPTION_END);
  curl_global_cleanup ();
  fclose (test_fd);
  remove (TEST_FILE_NAME);

  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_multi_thread_mode_test.c.

























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*
  This file is part of libmicrohttpd
  (C) 2007 Christian Grothoff

  libmicrohttpd is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2, or (at your
  option) any later version.

  libmicrohttpd is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with libmicrohttpd; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.
*/

/**
 * @file tls_thread_mode_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 * @author Christian Grothoff
 *
 * TODO: add test for external select!
 */

#include "platform.h"
#include "microhttpd.h"
#include <sys/stat.h>
#include <limits.h>
#include <curl/curl.h>
#include "tls_test_common.h"

extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];

int curl_check_version (const char *req_version, ...);

/**
 * used when spawning multiple threads executing curl server requests
 *
 */
static void *
https_transfer_thread_adapter (void *args)
{
  static int nonnull;
  struct https_test_data *cargs = args;
  int ret;

  /* time spread incomming requests */
  usleep ((useconds_t) 10.0 * ((double) rand ()) / ((double) RAND_MAX));
  ret = test_https_transfer (cargs->test_fd,
                             cargs->cipher_suite, cargs->proto_version);
  if (ret == 0)
    return NULL;
  return &nonnull;
}

/**
 * Test non-parallel requests.
 *
 * @return: 0 upon all client requests returning '0', -1 otherwise.
 *
 * TODO : make client_count a parameter - numver of curl client threads to spawn
 */
static int
test_single_client (FILE * test_fd, char *cipher_suite,
                    int curl_proto_version)
{
  void *client_thread_ret;
  struct https_test_data client_args =
    { test_fd, cipher_suite, curl_proto_version };

  client_thread_ret = https_transfer_thread_adapter (&client_args);
  if (client_thread_ret != NULL)
    return -1;
  return 0;
}


/**
 * Test parallel request handling.
 *
 * @return: 0 upon all client requests returning '0', -1 otherwise.
 *
 * TODO : make client_count a parameter - numver of curl client threads to spawn
 */
static int
test_parallel_clients (FILE * test_fd, char *cipher_suite,
                       int curl_proto_version)
{
  int i;
  int client_count = 3;
  void *client_thread_ret;
  pthread_t client_arr[client_count];
  struct https_test_data client_args =
    { test_fd, cipher_suite, curl_proto_version };

  for (i = 0; i < client_count; ++i)
    {
      if (pthread_create (&client_arr[i], NULL,
                          &https_transfer_thread_adapter, &client_args) != 0)
        {
          fprintf (stderr, "Error: failed to spawn test client threads.\n");

          return -1;
        }
    }

  /* check all client requests fulfilled correctly */
  for (i = 0; i < client_count; ++i)
    {
      if ((pthread_join (client_arr[i], &client_thread_ret) != 0) ||
          (client_thread_ret != NULL))
        return -1;
    }

  return 0;
}


int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  /* initialize random seed used by curl clients */
  unsigned int iseed = (unsigned int) time (NULL);
  srand (iseed);
  if ((test_fd = setup_test_file ()) == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }

  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error: %s\n", strerror (errno));
      fclose (test_fd);
      return -1;
    }

  errorCount +=
    test_wrap ("multi threaded daemon, single client", &test_single_client,
               test_fd,
               MHD_USE_SSL | MHD_USE_DEBUG | MHD_USE_THREAD_PER_CONNECTION,
               "AES256-SHA", CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
               srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
               srv_self_signed_cert_pem, MHD_OPTION_END);

  errorCount +=
    test_wrap ("multi threaded daemon, parallel client",
               &test_parallel_clients, test_fd,
               MHD_USE_SSL | MHD_USE_DEBUG | MHD_USE_THREAD_PER_CONNECTION,
               "AES256-SHA", CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
               srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
               srv_self_signed_cert_pem, MHD_OPTION_END);

  if (errorCount != 0)
    fprintf (stderr, "Failed test: %s.\n", argv[0]);

  curl_global_cleanup ();
  fclose (test_fd);

  remove (TEST_FILE_NAME);

  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_session_time_out_test.c.

























































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file mhds_get_test.c
 * @brief: daemon TLS alert response test-case
 *
 * @author Sagie Amir
 */

#include "platform.h"
#include "microhttpd.h"
#include "internal.h"
#include "tls_test_common.h"

extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];

static const int TIME_OUT = 3;

char *http_get_req = "GET / HTTP/1.1\r\n\r\n";

static int
test_tls_session_time_out (gnutls_session_t session)
{
  int sd, ret;
  struct sockaddr_in sa;

  sd = socket (AF_INET, SOCK_STREAM, 0);
  if (sd == -1)
    {
      fprintf (stderr, "Failed to create socket: %s\n", strerror (errno));
      return -1;
    }

  memset (&sa, '\0', sizeof (struct sockaddr_in));
  sa.sin_family = AF_INET;
  sa.sin_port = htons (DEAMON_TEST_PORT);
  inet_pton (AF_INET, "127.0.0.1", &sa.sin_addr);

  gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) (long) sd);

  ret = connect (sd, &sa, sizeof (struct sockaddr_in));

  if (ret < 0)
    {
      fprintf (stderr, "Error: %s\n", MHD_E_FAILED_TO_CONNECT);
      return -1;
    }

  ret = gnutls_handshake (session);
  if (ret < 0)
    {
      return -1;
    }

  sleep (TIME_OUT + 1);

  /* check that server has closed the connection */
  /* TODO better RST trigger */
  if (send (sd, "", 1, 0) == 0)
    {
      return -1;
    }

  close (sd);
  return 0;
}

int
main (int argc, char *const *argv)
{
  int errorCount = 0;;
  struct MHD_Daemon *d;
  gnutls_session_t session;
  gnutls_datum_t key;
  gnutls_datum_t cert;
  gnutls_certificate_credentials_t xcred;

  gnutls_global_init ();
  gnutls_global_set_log_level (11);

  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
                        MHD_USE_DEBUG, DEAMON_TEST_PORT,
                        NULL, NULL, &http_dummy_ahc, NULL,
                        MHD_OPTION_CONNECTION_TIMEOUT, TIME_OUT,
                        MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
                        MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
                        MHD_OPTION_END);

  if (d == NULL)
    {
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  setup_session (&session, &key, &cert, &xcred);
  errorCount += test_tls_session_time_out (session);
  teardown_session (session, &key, &cert, xcred);

  print_test_result (errorCount, argv[0]);

  MHD_stop_daemon (d);
  gnutls_global_deinit ();

  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_test_common.c.

















































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

/**
 * @file tls_test_common.c
 * @brief  Common tls test functions
 * @author Sagie Amir
 */
#include "tls_test_common.h"
#include "tls_test_keys.h"

const char test_file_data[] = "Hello World\n";

int curl_check_version (const char *req_version, ...);

void
print_test_result (int test_outcome, char *test_name)
{
#if 0
  if (test_outcome != 0)
    fprintf (stderr, "running test: %s [fail]\n", test_name);
  else
    fprintf (stdout, "running test: %s [pass]\n", test_name);
#endif
}

size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
file_reader (void *cls, uint64_t pos, char *buf, int max)
{
  FILE *file = cls;
  fseek (file, pos, SEEK_SET);
  return fread (buf, 1, max, file);
}

/**
 *  HTTP access handler call back
 */
int
http_ahc (void *cls, struct MHD_Connection *connection,
          const char *url, const char *method, const char *upload_data,
          const char *version, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;
  FILE *file;
  struct stat buf;

  if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  *ptr = NULL;                  /* reset when done */

  file = fopen (url, "rb");
  if (file == NULL)
    {
      response = MHD_create_response_from_data (strlen (PAGE_NOT_FOUND),
                                                (void *) PAGE_NOT_FOUND,
                                                MHD_NO, MHD_NO);
      ret = MHD_queue_response (connection, MHD_HTTP_NOT_FOUND, response);
      MHD_destroy_response (response);
    }
  else
    {
      stat (url, &buf);
      response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,     /* 32k PAGE_NOT_FOUND size */
                                                    &file_reader, file,
                                                    (MHD_ContentReaderFreeCallback)
                                                    & fclose);
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
    }
  return ret;
}

/* HTTP access handler call back */
int
http_dummy_ahc (void *cls, struct MHD_Connection *connection,
                const char *url, const char *method, const char *upload_data,
                const char *version, size_t *upload_data_size,
                void **ptr)
{
  return 0;
}

/**
 * send a test http request to the daemon
 * @param url
 * @param cbc - may be null
 * @param cipher_suite
 * @param proto_version
 * @return
 */
/* TODO have test wrap consider a NULL cbc */
int
send_curl_req (char *url, struct CBC * cbc, char *cipher_suite,
               int proto_version)
{
  CURL *c;
  CURLcode errornum;
  c = curl_easy_init ();
#if DEBUG_HTTPS_TEST
  curl_easy_setopt (c, CURLOPT_VERBOSE, CURL_VERBOS_LEVEL);
#endif
  curl_easy_setopt (c, CURLOPT_URL, url);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 60L);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 60L);

  if (cbc != NULL)
    {
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_FILE, cbc);
    }

  /* TLS options */
  curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version);
  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite);

  /* currently skip any peer authentication */
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0);

  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);

  /* NOTE: use of CONNECTTIMEOUT without also
     setting NOSIGNAL results in really weird
     crashes on my system! */
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr, "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      return errornum;
    }
  curl_easy_cleanup (c);

  return CURLE_OK;
}

/**
 * compile test file url pointing to the current running directory path
 * @param url - char buffer into which the url is compiled
 * @return
 */
int
gen_test_file_url (char *url, int port)
{
  int ret = 0;
  char *doc_path;
  size_t doc_path_len;
  /* setup test file path, url */
  doc_path_len = PATH_MAX > 4096 ? 4096 : PATH_MAX;
  if (NULL == (doc_path = malloc (doc_path_len)))
    {
      fprintf (stderr, MHD_E_MEM);
      return -1;
    }
  if (getcwd (doc_path, doc_path_len) == NULL)
    {
      fprintf (stderr, "Error: failed to get working directory. %s\n",
               strerror (errno));
      ret = -1;
    }
  /* construct url - this might use doc_path */
  if (sprintf (url, "%s:%d%s/%s", "https://localhost", port,
               doc_path, TEST_FILE_NAME) < 0)
    ret = -1;

  free (doc_path);
  return ret;
}

/**
 * test HTTPS file transfer
 * @param test_fd: file to attempt transferring
 */
int
test_https_transfer (FILE * test_fd, char *cipher_suite, int proto_version)
{
  int len, ret = 0;
  struct CBC cbc;
  char url[255];
  struct stat statb;
  /* used to memcmp local copy & deamon supplied copy */
  unsigned char *mem_test_file_local;

  if (0 != stat (TEST_FILE_NAME, &statb))
    {
      fprintf (stderr, "Failed to stat `%s': %s\n",
	       TEST_FILE_NAME, strerror(errno));
      return -1;
    }
  len = statb.st_size;
  cbc.buf = NULL;
  if (NULL == (mem_test_file_local = malloc (len)))
    {
      fprintf (stderr, MHD_E_MEM);
      ret = -1;
      goto cleanup;
    }

  fseek (test_fd, 0, SEEK_SET);
  if (fread (mem_test_file_local, sizeof (char), len, test_fd) != len)
    {
      fprintf (stderr, "Error: failed to read test file. %s\n",
               strerror (errno));
      ret = -1;
      goto cleanup;
    }

  if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
    {
      fprintf (stderr, MHD_E_MEM);
      ret = -1;
      goto cleanup;
    }
  cbc.size = len;
  cbc.pos = 0;

  if (gen_test_file_url (url, DEAMON_TEST_PORT))
    {
      ret = -1;
      goto cleanup;
    }

  if (CURLE_OK != send_curl_req (url, &cbc, cipher_suite, proto_version))
    {
      ret = -1;
      goto cleanup;
    }

  /* compare test file & daemon responce */
  if (memcmp (cbc.buf, mem_test_file_local, len) != 0)
    {
      fprintf (stderr, "Error: local file & received file differ.\n");
      ret = -1;
    }

cleanup:
  free (mem_test_file_local);
  if (cbc.buf != NULL)
    free (cbc.buf);
  return ret;
}

/**
 * setup a mock test file which is requested from the running daemon
 * @return open file descriptor to the test file
 */
FILE *
setup_test_file ()
{
  FILE *test_fd;

  if (NULL == (test_fd = fopen (TEST_FILE_NAME, "wb+")))
    {
      fprintf (stderr, "Error: failed to open `%s': %s\n",
               TEST_FILE_NAME, strerror (errno));
      return NULL;
    }
  if (fwrite (test_file_data, sizeof (char), strlen (test_file_data), test_fd)
      != strlen (test_file_data))
    {
      fprintf (stderr, "Error: failed to write `%s. %s'\n",
               TEST_FILE_NAME, strerror (errno));
      fclose (test_fd);
      return NULL;
    }
  if (fflush (test_fd))
    {
      fprintf (stderr, "Error: failed to flush test file stream. %s\n",
               strerror (errno));
      fclose (test_fd);
      return NULL;
    }
  return test_fd;
}

/**
 * setup test case
 *
 * @param d
 * @param daemon_flags
 * @param arg_list
 * @return
 */
int
setup_testcase (struct MHD_Daemon **d, int daemon_flags, va_list arg_list)
{
  *d = MHD_start_daemon_va (daemon_flags, DEAMON_TEST_PORT,
                            NULL, NULL, &http_ahc, NULL, arg_list);

  if (*d == NULL)
    {
      fprintf (stderr, MHD_E_SERVER_INIT);
      return -1;
    }

  return 0;
}

void
teardown_testcase (struct MHD_Daemon *d)
{
  MHD_stop_daemon (d);
}

int
setup_session (gnutls_session_t * session,
               gnutls_datum_t * key,
               gnutls_datum_t * cert, 
	       gnutls_certificate_credentials_t * xcred)
{
  int ret;
  const char *err_pos;

  gnutls_certificate_allocate_credentials (xcred);
  key->size = strlen (srv_key_pem);
  key->data = malloc (key->size);
  memcpy (key->data, srv_key_pem, key->size);
  cert->size = strlen (srv_self_signed_cert_pem);
  cert->data = malloc (cert->size);
  memcpy (cert->data, srv_self_signed_cert_pem, cert->size);
  gnutls_certificate_set_x509_key_mem (*xcred, cert, key,
				       GNUTLS_X509_FMT_PEM);
  gnutls_init (session, GNUTLS_CLIENT);
  ret = gnutls_priority_set_direct (*session,
				    "NORMAL", &err_pos);
  if (ret < 0)
    return -1;
  gnutls_credentials_set (*session, 
			  GNUTLS_CRD_CERTIFICATE, 
			  xcred);
  return 0;
}

int
teardown_session (gnutls_session_t session,
                  gnutls_datum_t * key,
                  gnutls_datum_t * cert,
                  gnutls_certificate_credentials_t xcred)
{
  free (key->data);
  key->data = NULL;
  key->size = 0;
  free (cert->data);
  cert->data = NULL;
  cert->size = 0;
  gnutls_deinit (session);
  gnutls_certificate_free_credentials (xcred);
  return 0;
}

/* TODO test_wrap: change sig to (setup_func, test, va_list test_arg) */
int
test_wrap (char *test_name, int
           (*test_function) (FILE * test_fd, char *cipher_suite,
                             int proto_version), FILE * test_fd,
           int daemon_flags, char *cipher_suite, int proto_version, ...)
{
  int ret;
  va_list arg_list;
  struct MHD_Daemon *d;

  va_start (arg_list, proto_version);
  if (setup_testcase (&d, daemon_flags, arg_list) != 0)
    {
      va_end (arg_list);
      return -1;
    }
#if 0
  fprintf (stdout, "running test: %s ", test_name);
#endif
  ret = test_function (test_fd, cipher_suite, proto_version);
#if 0
  if (ret == 0)
    {
      fprintf (stdout, "[pass]\n");
    }
  else
    {
      fprintf (stdout, "[fail]\n");
    }
#endif
  teardown_testcase (d);
  va_end (arg_list);
  return ret;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_test_common.h.













































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
 This file is part of libmicrohttpd
 (C) 2007 Christian Grothoff

 libmicrohttpd is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published
 by the Free Software Foundation; either version 2, or (at your
 option) any later version.

 libmicrohttpd is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with libmicrohttpd; see the file COPYING.  If not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 */

#ifndef TLS_TEST_COMMON_H_
#define TLS_TEST_COMMON_H_

#include "platform.h"
#include "microhttpd.h"
#include <curl/curl.h>
#include <sys/stat.h>
#include <limits.h>
#include <gnutls/gnutls.h>

/* this enables verbos CURL version checking */
#define DEBUG_HTTPS_TEST 0
#define CURL_VERBOS_LEVEL 0

#define DEAMON_TEST_PORT 42433

#define TEST_FILE_NAME "https_test_file"

#define EMPTY_PAGE "<html><head><title>Empty page</title></head><body>Empty page</body></html>"
#define PAGE_NOT_FOUND "<html><head><title>File not found</title></head><body>File not found</body></html>"

#define MHD_E_MEM "Error: memory error\n"
#define MHD_E_SERVER_INIT "Error: failed to start server\n"
#define MHD_E_TEST_FILE_CREAT "Error: failed to setup test file\n"
#define MHD_E_CERT_FILE_CREAT "Error: failed to setup test certificate\n"
#define MHD_E_KEY_FILE_CREAT "Error: failed to setup test certificate\n"
#define MHD_E_FAILED_TO_CONNECT "Error: server connection could not be established\n"

/* TODO rm if unused */
struct https_test_data
{
  FILE *test_fd;
  char *cipher_suite;
  int proto_version;
};

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

struct CipherDef
{
  int options[2];
  char *curlname;
};

void print_test_result (int test_outcome, char *test_name);

size_t copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx);

int
http_ahc (void *cls, struct MHD_Connection *connection,
          const char *url, const char *method, const char *upload_data,
          const char *version, size_t *upload_data_size, void **ptr);

int
http_dummy_ahc (void *cls, struct MHD_Connection *connection,
                const char *url, const char *method, const char *upload_data,
                const char *version, size_t *upload_data_size,
                void **ptr);

int gen_test_file_url (char *url, int port);

int
send_curl_req (char *url, struct CBC *cbc, char *cipher_suite,
               int proto_version);

int
test_https_transfer (FILE * test_fd, char *cipher_suite, int proto_version);

FILE *setup_test_file ();

int
setup_testcase (struct MHD_Daemon **d, int daemon_flags, va_list arg_list);

void teardown_testcase (struct MHD_Daemon *d);

int
setup_session (gnutls_session_t * session,
               gnutls_datum_t * key,
               gnutls_datum_t * cert,
               gnutls_certificate_credentials_t * xcred);

int
teardown_session (gnutls_session_t session,
                  gnutls_datum_t * key,
                  gnutls_datum_t * cert,
                  gnutls_certificate_credentials_t xcred);

int
test_wrap (char *test_name, int
           (*test_function) (FILE * test_fd, char *cipher_suite,
                             int proto_version), FILE * test_fd,
           int daemon_flags, char *cipher_suite, int proto_version, ...);
#endif /* TLS_TEST_COMMON_H_ */

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_test_keys.h.



























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*
     This file is part of libmicrohttpd
     (C) 2006, 2007, 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef MHD_TLS_TEST_KEYS_H
#define MHD_TLS_TEST_KEYS_H

/* Test Certificates */

/* Certificate Authority key */
const char ca_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
  "MIIEowIBAAKCAQEA0EdlP613rjFvEj93tGo9fzBoKWU3CW+AbbfcJ397C89MyZ9J\n"
  "rlxyLGfa6qVX7CFVNmzgWWfcl2tHlw/fZmWtf/SFgrlkldvuGyY8H3n2HuMsWz/E\n"
  "h7n5VgwBX8NsP4eZNmikepxpr1mYx25K8FjnsKjAR9jGUSV8UfZ7VLIY0x/yqe+3\n"
  "32oqc4D/wJbV1AwwvC5Xf9rvHJwcZg57eqbDCL/4GDDk7d9Gark4XK6ZG+FnnxQn\n"
  "4a4jIdf4FoPp9s0EieHrHwYzs/uBqmfCSF4wXiaO8bmEwtbAsVbZH74Le7ggUbEe\n"
  "o+jan9XK0dE88AIImGzgoBnlic/Rr7J8OWA+iwIDAQABAoIBAEICZqXkUdpsw2F6\n"
  "qPMOergNPO3lrKg6ZO8hBs6j2fj3tcPuzljK5sqJDboxNejZ9Zo+rmnXf3Oj5fgL\n"
  "6UcYMYEsm4W/QRA3uEJ1fzeQnT7Ty9KNprlHaSzquCLEGlIWJSo3xu0vFlWjJUcL\n"
  "fwemfaOhD/OVUeEU6s5FOngwy6pZUsOajs3fNRtwBGuuXjniKZZlpSf2Wqu3xpHZ\n"
  "31OF1V0ycUCGPPFtpmUCtnZhS9L8QBTkNtfTIdXv6SfoBRFm0oXb0uL5HGft6yc7\n"
  "eYRXIscllQciqG3ymJ/y9o0E3A0YsBVauQyi7OEk+Kg8uoYOBkZCIY69hoN2Znlk\n"
  "OY5S5Z0CgYEA3j8pRAJzvc827KcX4vJf05HYD4aCyaI80fNmx1DgXfglTSGLQ361\n"
  "6i05YW8WtIvgkma3wF+jJOckBCW/7iq8wAX7Kz75WKGRyyTEb0wSfjx0G8grxX4d\n"
  "7sTIAAOnQj5WT6E/bkqxQZAYnVtIPxKtSlwts0H/bjPVYwSFchHK7t8CgYEA7+ks\n"
  "C0EMjF8CDeCfvbOUGiiqAvU3G20LEC3WlJM3AU+J9Jzp6AMkgaIA8J5oNdsbFBn4\n"
  "N12JPOO+7WRUk6Av8bsh4faE36ThnHohgAL8guRU7jIXvsFyO5yiY7/o/0lES0/V\n"
  "6xkh/Epj4MReuCGkiD9ifCVAo+dhHskeE9qbYdUCgYA4yBpa7eV0UUTPIcHQkew5\n"
  "ucFh9hPkQDcZzP4tXlR0rbmaAz/5dp4zvmoyopdCeZpezS+VTtn3y7Y/+QUYbILc\n"
  "7KpHWkeKhX0iUbp+VQlEh12C25mTU62CG3SdzFEnc5XJsoDqRNsUzSP80B2dP8BW\n"
  "h0aFzg7csRGLwtP1WOZoMQKBgQCrgsKd+Q8Dexh421DXyX3jhZalLrEKxlXWZy60\n"
  "YNo98aLqYRNHbpe2pR6O5nARsGYXZMlyq0flY9um0sc0Epyz79g1NoufZrxzpUw1\n"
  "u+zRlnKxJtaa5KjJvRzKuvPTLYnJXXXM8Na/Cl+E3F3qvQJm9QlvPyKLCmsAGz+J\n"
  "agsTUQKBgC0wqqJ6b1tbrAD8AVeeAn/IiP1rxYpc3x2s6ikFO2FMHXHC9wgrRPOc\n"
  "mkokV+DrUOv3I/7jG8wQA/FmBUPy562a1bObIKzg6CPXzrN68AmNnOIVU+H8fdxI\n"
  "iGyfT8WNpcRmtN11v34qXHwOWGQhpyyk2yNa8VIBSpkShq/EseZ1\n"
  "-----END RSA PRIVATE KEY-----\n";

/* Certificate Authority cert */
const char ca_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
  "MIIC6DCCAdKgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
  "dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
  "A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
  "0EdlP613rjFvEj93tGo9fzBoKWU3CW+AbbfcJ397C89MyZ9JrlxyLGfa6qVX7CFV\n"
  "NmzgWWfcl2tHlw/fZmWtf/SFgrlkldvuGyY8H3n2HuMsWz/Eh7n5VgwBX8NsP4eZ\n"
  "Nmikepxpr1mYx25K8FjnsKjAR9jGUSV8UfZ7VLIY0x/yqe+332oqc4D/wJbV1Aww\n"
  "vC5Xf9rvHJwcZg57eqbDCL/4GDDk7d9Gark4XK6ZG+FnnxQn4a4jIdf4FoPp9s0E\n"
  "ieHrHwYzs/uBqmfCSF4wXiaO8bmEwtbAsVbZH74Le7ggUbEeo+jan9XK0dE88AII\n"
  "mGzgoBnlic/Rr7J8OWA+iwIDAQABo0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud\n"
  "DwEB/wQFAwMHBAAwHQYDVR0OBBYEFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsGCSqG\n"
  "SIb3DQEBBQOCAQEAebD5m+vZkVXa8y+QZ5GtsiR9gpH+LKtdWBjk1kmfSgvQI/xA\n"
  "aDCV/9BhdNGIBOTYGkln8urWd7g2Mj3TwKEAfNTUFpAsrBAlSSLTGYCSt72S2NsS\n"
  "L/qUxmj1W6X95UHXCo49mSZx3LlaY3mz1L87gq/kK0XpzA3g2uF25jt84RvshsXy\n"
  "clOc+eRrVETqFZqer96WB7kzFTv+qmROQKmW8X4a2A5r5Jl4vRwOz5/rEeB9Qs0K\n"
  "rmK8+5HgvWd80WB8BtfFtZfoY/hHVM8nLD3ELVJrOKiTeIACunQFyT5lV0QkdmSA\n"
  "CGInU7jzs8nu+s2avf6j+eVZUbVJ+dFMApTJgg==\n"
  "-----END CERTIFICATE-----\n";

/* test server CA signed certificates */
const char srv_signed_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
  "MIIDGzCCAgWgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
  "dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
  "A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
  "vfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW+K03KwEku55QvnUn\n"
  "dwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8ILq4sw32vo0fbMu5BZ\n"
  "F49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ020Q5EAAEseD1YtWC\n"
  "IpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6QYGGh1QmHRPAy3CB\n"
  "II6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6xyoOl204xuekZOaG9\n"
  "RUPId74Rtmwfi1TLbBzo2wIDAQABo3YwdDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
  "MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFOFi4ilKOP1d\n"
  "XHlWCMwmVKr7mgy8MB8GA1UdIwQYMBaAFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsG\n"
  "CSqGSIb3DQEBBQOCAQEAHVWPxazupbOkG7Did+dY9z2z6RjTzYvurTtEKQgzM2Vz\n"
  "GQBA+3pZ3c5mS97fPIs9hZXfnQeelMeZ2XP1a+9vp35bJjZBBhVH+pqxjCgiUflg\n"
  "A3Zqy0XwwVCgQLE2HyaU3DLUD/aeIFK5gJaOSdNTXZLv43K8kl4cqDbMeRpVTbkt\n"
  "YmG4AyEOYRNKGTqMEJXJoxD5E3rBUNrVI/XyTjYrulxbNPcMWEHKNeeqWpKDYTFo\n"
  "Bb01PCthGXiq/4A2RLAFosadzRa8SBpoSjPPfZ0b2w4MJpReHqKbR5+T2t6hzml6\n"
  "4ToyOKPDmamiTuN5KzLN3cw7DQlvWMvqSOChPLnA3Q==\n"
  "-----END CERTIFICATE-----\n";

/* test server key */
const char srv_signed_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
  "MIIEowIBAAKCAQEAvfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW\n"
  "+K03KwEku55QvnUndwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8IL\n"
  "q4sw32vo0fbMu5BZF49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ0\n"
  "20Q5EAAEseD1YtWCIpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6\n"
  "QYGGh1QmHRPAy3CBII6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6x\n"
  "yoOl204xuekZOaG9RUPId74Rtmwfi1TLbBzo2wIDAQABAoIBADu09WSICNq5cMe4\n"
  "+NKCLlgAT1NiQpLls1gKRbDhKiHU9j8QWNvWWkJWrCya4QdUfLCfeddCMeiQmv3K\n"
  "lJMvDs+5OjJSHFoOsGiuW2Ias7IjnIojaJalfBml6frhJ84G27IXmdz6gzOiTIer\n"
  "DjeAgcwBaKH5WwIay2TxIaScl7AwHBauQkrLcyb4hTmZuQh6ArVIN6+pzoVuORXM\n"
  "bpeNWl2l/HSN3VtUN6aCAKbN/X3o0GavCCMn5Fa85uJFsab4ss/uP+2PusU71+zP\n"
  "sBm6p/2IbGvF5k3VPDA7X5YX61sukRjRBihY8xSnNYx1UcoOsX6AiPnbhifD8+xQ\n"
  "Tlf8oJUCgYEA0BTfzqNpr9Wxw5/QXaSdw7S/0eP5a0C/nwURvmfSzuTD4equzbEN\n"
  "d+dI/s2JMxrdj/I4uoAfUXRGaabevQIjFzC9uyE3LaOyR2zhuvAzX+vVcs6bSXeU\n"
  "pKpCAcN+3Z3evMaX2f+z/nfSUAl2i4J2R+/LQAWJW4KwRky/m+cxpfUCgYEA6bN1\n"
  "b73bMgM8wpNt6+fcmS+5n0iZihygQ2U2DEud8nZJL4Nrm1dwTnfZfJBnkGj6+0Q0\n"
  "cOwj2KS0/wcEdJBP0jucU4v60VMhp75AQeHqidIde0bTViSRo3HWKXHBIFGYoU3T\n"
  "LyPyKndbqsOObnsFXHn56Nwhr2HLf6nw4taGQY8CgYBoSW36FLCNbd6QGvLFXBGt\n"
  "2lMhEM8az/K58kJ4WXSwOLtr6MD/WjNT2tkcy0puEJLm6BFCd6A6pLn9jaKou/92\n"
  "SfltZjJPb3GUlp9zn5tAAeSSi7YMViBrfuFiHObij5LorefBXISLjuYbMwL03MgH\n"
  "Ocl2JtA2ywMp2KFXs8GQWQKBgFyIVv5ogQrbZ0pvj31xr9HjqK6d01VxIi+tOmpB\n"
  "4ocnOLEcaxX12BzprW55ytfOCVpF1jHD/imAhb3YrHXu0fwe6DXYXfZV4SSG2vB7\n"
  "IB9z14KBN5qLHjNGFpMQXHSMek+b/ftTU0ZnPh9uEM5D3YqRLVd7GcdUhHvG8P8Q\n"
  "C9aXAoGBAJtID6h8wOGMP0XYX5YYnhlC7dOLfk8UYrzlp3xhqVkzKthTQTj6wx9R\n"
  "GtC4k7U1ki8oJsfcIlBNXd768fqDVWjYju5rzShMpo8OCTS6ipAblKjCxPPVhIpv\n"
  "tWPlbSn1qj6wylstJ5/3Z+ZW5H4wIKp5jmLiioDhcP0L/Ex3Zx8O\n"
  "-----END RSA PRIVATE KEY-----\n";

/* test server self signed certificates */
const char srv_self_signed_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
  "MIIC+jCCAeSgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
  "dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
  "A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
  "tDEagv3p9OUhUL55jMucxjNK9N5cuozhcnrwDfBSU6oVrqm5kPqO1I7Cggzw68Y5\n"
  "jhTcBi4FXmYOZppm1R3MhSJ5JSi/67Q7X4J5rnJLXYGN27qjMpnoGQ/2xmsNG/is\n"
  "i+h/2vbtPU+WP9SEJnTfPLLpZ7KqCAk7FUUzKsuLx3/SOKtdkrWxPKwYTgnDEN6D\n"
  "JL7tEzCnG5DFc4mQ7YW9PaRdC3rS1T8PvQ3jB2BUnohM0cFvKRuiU35tU7h7CPbL\n"
  "4L66VglXoiwqmgcrwI2U968bD0+wRQ5c5bzNoshJOzN6CTMh1IhbklSh/Z6FA/e8\n"
  "hj0yVo2tdllXuJGVs3PIEwIDAQABo1UwUzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
  "MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFDfU7pAv9LYn\n"
  "n7jb4WHl4+Vgi2FnMAsGCSqGSIb3DQEBBQOCAQEAkaembPQMmv6OOjbIod8zTatr\n"
  "x5Bwkwp3TOE1NRyy2OytzFIYRUkNrZYlcmrxcbNNycIK41CNVXbriFCF8gcmIq9y\n"
  "vaKZn8Gcy+vGggv+1BP9IAPBGKRwSi0wmq9JoGE8hx+qqTpRSdfbM/cps/09hicO\n"
  "0EIR7kWEbvnpMBcMKYOtYE9Gce7rdSMWVAsKc174xn8vW6TxCUvmWFv5DPg5HG1v\n"
  "y1SUX73qafRo+W6FN4UC/DHfwRhF8RSKEnVbmgDVCs6GHdKBjU2qRgYyj6nWZqK1\n"
  "XFUTWgia+Fl3D9vlsXaFcSZKA0Bq1eojl0B0AfeYAxTFwPWXscKvt/bXZfH8bg==\n"
  "-----END CERTIFICATE-----\n";

/* test server key */
const char srv_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
  "MIIEpAIBAAKCAQEAtDEagv3p9OUhUL55jMucxjNK9N5cuozhcnrwDfBSU6oVrqm5\n"
  "kPqO1I7Cggzw68Y5jhTcBi4FXmYOZppm1R3MhSJ5JSi/67Q7X4J5rnJLXYGN27qj\n"
  "MpnoGQ/2xmsNG/isi+h/2vbtPU+WP9SEJnTfPLLpZ7KqCAk7FUUzKsuLx3/SOKtd\n"
  "krWxPKwYTgnDEN6DJL7tEzCnG5DFc4mQ7YW9PaRdC3rS1T8PvQ3jB2BUnohM0cFv\n"
  "KRuiU35tU7h7CPbL4L66VglXoiwqmgcrwI2U968bD0+wRQ5c5bzNoshJOzN6CTMh\n"
  "1IhbklSh/Z6FA/e8hj0yVo2tdllXuJGVs3PIEwIDAQABAoIBAAEtcg+LFLGtoxjq\n"
  "b+tFttBJfbRcfdG6ocYqBGmUXF+MgFs573DHX3sHNOQxlaNHtSgIclF1eYgNZFFt\n"
  "VLIoBFTzfEQXoFosPUDoEuqVMeXLttmD7P2jwL780XJLZ4Xj6GY07npq1iGBcEZf\n"
  "yCcdoyGkr9jgc5Auyis8DStGg/jfUBC4NBvF0GnuuNPAdYRPKUpKw9EatI+FdMjy\n"
  "BuroD90fhdkK8EwMEVb9P17bdIc1MCIZFpUE9YHjVdK/oxCUhQ8KRfdbI4JU5Zh3\n"
  "UtO6Jm2wFuP3VmeVpPvE/C2rxI70pyl6HMSiFGNc0rhJYCQ+yhohWj7nZ67H4vLx\n"
  "plv5LxkCgYEAz7ewou8oFafDAMNoxaqKudvUg+lxXewdLDKaYBF5ACi9uAPCJ+v7\n"
  "M5c/fvPFn/XHzo7xaXbtTAH3Z5xzBs+80OsvL+e1Ut4xR+ELRkybknh/s2wQeABk\n"
  "Kb0vA59ukQGj12LV5phZMaVoXe6KJ7hZnN62d3K6m1wGE/k58i4pPLUCgYEA3hN8\n"
  "G95zW7g0jVdSr+KUeVmephph9yh8Yb+3I3ojwOIv6d45TopGx8pFZlnBAMZf1ZQx\n"
  "DIhzJNnaqZy/4w7RNaOGWnPA/5f+MIoHBiLGEEmfHC3lt087Yp9OuwDUHwpETYdV\n"
  "o+KBCvVh60Et3bZUgF/1k/3YXxn8J5dsmJsjNqcCgYBLflyRa1BrRnTGMz9CEDCp\n"
  "Si9b3h1Y4Hbd2GppHhCXMTd6yMrpDYhYANGQB3M9Juv+s88j4JhwNoq/uonH4Pqk\n"
  "B8Y3qAQr4RuSH0WkwDUOsALhqBX4N1QwI1USAQEDbNAqeP5698X7GD3tXcQSmZrg\n"
  "O8WfdjBCRNjkq4EW9xX/vQKBgQDONtmwJ0iHiu2BseyeVo/4fzfKlgUSNQ4K1rOA\n"
  "xhIdMeu8Bxa/z7caHsGC4SVPSuYCtbE2Kh6BwapChcPJXCD45fgEViiJLuJiwEj1\n"
  "caTpyvNsf1IoffJvCe9ZxtMyX549P8ZOgC3Dt0hN5CBrGLwu2Ox5l+YrqT10pi+5\n"
  "JZX1UQKBgQCrcXrdkkDAc/a4+PxNRpJRLcU4fhv8/lr+UWItE8eUe7bd25bTQfQm\n"
  "VpNKc/kAJ66PjIED6fy3ADhd2y4naT2a24uAgQ/M494J68qLnGh6K4JU/09uxR2v\n"
  "1i2q/4FNLdFFk1XP4iNnTHRLZ+NYr2p5Y9RcvQfTjOauz8Ahav0lyg==\n"
  "-----END RSA PRIVATE KEY-----\n";

#endif

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testcurl/https/tls_thread_mode_test.c.





















































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
  This file is part of libmicrohttpd
  (C) 2007 Christian Grothoff

  libmicrohttpd is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published
  by the Free Software Foundation; either version 2, or (at your
  option) any later version.

  libmicrohttpd is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with libmicrohttpd; see the file COPYING.  If not, write to the
  Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.
*/

/**
 * @file tls_thread_mode_test.c
 * @brief  Testcase for libmicrohttpd HTTPS GET operations
 * @author Sagie Amir
 * @author Christian Grothoff
 *
 * TODO: add test for external select!
 */

#include "platform.h"
#include "microhttpd.h"
#include <sys/stat.h>
#include <limits.h>
#include <curl/curl.h>
#include <gcrypt.h>
#include "tls_test_common.h"

extern const char srv_key_pem[];
extern const char srv_self_signed_cert_pem[];

int curl_check_version (const char *req_version, ...);

/**
 * used when spawning multiple threads executing curl server requests
 *
 */
static void *
https_transfer_thread_adapter (void *args)
{
  static int nonnull;
  struct https_test_data *cargs = args;
  int ret;

  /* time spread incomming requests */
  usleep ((useconds_t) 10.0 * ((double) rand ()) / ((double) RAND_MAX));
  ret = test_https_transfer (cargs->test_fd,
                             cargs->cipher_suite, cargs->proto_version);
  if (ret == 0)
    return NULL;
  return &nonnull;
}

/**
 * Test non-parallel requests.
 *
 * @return: 0 upon all client requests returning '0', -1 otherwise.
 *
 * TODO : make client_count a parameter - numver of curl client threads to spawn
 */
static int
test_single_client (FILE * test_fd, char *cipher_suite,
                    int curl_proto_version)
{
  void *client_thread_ret;
  struct https_test_data client_args =
    { test_fd, cipher_suite, curl_proto_version };

  client_thread_ret = https_transfer_thread_adapter (&client_args);
  if (client_thread_ret != NULL)
    return -1;
  return 0;
}

/**
 * Test parallel request handling.
 *
 * @return: 0 upon all client requests returning '0', -1 otherwise.
 *
 * TODO : make client_count a parameter - numver of curl client threads to spawn
 */
static int
test_parallel_clients (FILE * test_fd, char *cipher_suite,
                       int curl_proto_version)
{
  int i;
  int client_count = 3;
  void *client_thread_ret;
  pthread_t client_arr[client_count];
  struct https_test_data client_args =
    { test_fd, cipher_suite, curl_proto_version };

  for (i = 0; i < client_count; ++i)
    {
      if (pthread_create (&client_arr[i], NULL,
                          &https_transfer_thread_adapter, &client_args) != 0)
        {
          fprintf (stderr, "Error: failed to spawn test client threads.\n");
          return -1;
        }
    }

  /* check all client requests fulfilled correctly */
  for (i = 0; i < client_count; ++i)
    {
      if ((pthread_join (client_arr[i], &client_thread_ret) != 0) ||
          (client_thread_ret != NULL))
        return -1;
    }

  return 0;
}

GCRY_THREAD_OPTION_PTHREAD_IMPL;

int
main (int argc, char *const *argv)
{
  FILE *test_fd;
  unsigned int errorCount = 0;

  /* initialize random seed used by curl clients */
  unsigned int iseed = (unsigned int) time (NULL);
  srand (iseed);
  gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
  if ((test_fd = setup_test_file ()) == NULL)
    {
      fprintf (stderr, MHD_E_TEST_FILE_CREAT);
      return -1;
    }

  if (0 != curl_global_init (CURL_GLOBAL_ALL))
    {
      fprintf (stderr, "Error: %s\n", strerror (errno));
      fclose (test_fd);
      remove (TEST_FILE_NAME);
      return -1;
    }

  errorCount +=
    test_wrap ("single threaded daemon, single client", &test_single_client,
               test_fd,
               MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL | MHD_USE_DEBUG,
               "AES256-SHA", CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
               srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
               srv_self_signed_cert_pem, MHD_OPTION_END);

  errorCount +=
    test_wrap ("single threaded daemon, parallel clients",
               &test_parallel_clients, test_fd,
               MHD_USE_SELECT_INTERNALLY | MHD_USE_SSL | MHD_USE_DEBUG,
               "AES256-SHA", CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
               srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
               srv_self_signed_cert_pem, MHD_OPTION_END);

  curl_global_cleanup ();
  fclose (test_fd);
  remove (TEST_FILE_NAME);

  return errorCount != 0;
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/Makefile.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# src/testzzuf/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



pkgdatadir = $(datadir)/libmicrohttpd
pkgincludedir = $(includedir)/libmicrohttpd
pkglibdir = $(libdir)/libmicrohttpd
pkglibexecdir = $(libexecdir)/libmicrohttpd
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = powerpc-apple-darwin9.8.0
host_triplet = powerpc-apple-darwin9.8.0
check_PROGRAMS = daemontest_get$(EXEEXT) daemontest_post$(EXEEXT) \
	daemontest_postform$(EXEEXT) daemontest_put$(EXEEXT) \
	daemontest_large_put$(EXEEXT) daemontest_get11$(EXEEXT) \
	daemontest_post11$(EXEEXT) daemontest_postform11$(EXEEXT) \
	daemontest_put11$(EXEEXT) daemontest_large_put11$(EXEEXT) \
	daemontest_long_header$(EXEEXT) \
	daemontest_get_chunked$(EXEEXT) \
	daemontest_put_chunked$(EXEEXT)
subdir = src/testzzuf
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am_daemontest_get_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get_OBJECTS = $(am_daemontest_get_OBJECTS)
daemontest_get_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get11_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get11_OBJECTS = $(am_daemontest_get11_OBJECTS)
daemontest_get11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_chunked_OBJECTS = daemontest_get_chunked.$(OBJEXT)
daemontest_get_chunked_OBJECTS = $(am_daemontest_get_chunked_OBJECTS)
daemontest_get_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put_OBJECTS = $(am_daemontest_large_put_OBJECTS)
daemontest_large_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put11_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put11_OBJECTS = $(am_daemontest_large_put11_OBJECTS)
daemontest_large_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_long_header_OBJECTS = daemontest_long_header.$(OBJEXT)
daemontest_long_header_OBJECTS = $(am_daemontest_long_header_OBJECTS)
daemontest_long_header_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post_OBJECTS = $(am_daemontest_post_OBJECTS)
daemontest_post_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post11_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post11_OBJECTS = $(am_daemontest_post11_OBJECTS)
daemontest_post11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform_OBJECTS = $(am_daemontest_postform_OBJECTS)
daemontest_postform_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform11_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform11_OBJECTS = $(am_daemontest_postform11_OBJECTS)
daemontest_postform11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put_OBJECTS = $(am_daemontest_put_OBJECTS)
daemontest_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put11_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put11_OBJECTS = $(am_daemontest_put11_OBJECTS)
daemontest_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_chunked_OBJECTS = daemontest_put_chunked.$(OBJEXT)
daemontest_put_chunked_OBJECTS = $(am_daemontest_put_chunked_OBJECTS)
daemontest_put_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(daemontest_get_SOURCES) $(daemontest_get11_SOURCES) \
	$(daemontest_get_chunked_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) $(daemontest_put_SOURCES) \
	$(daemontest_put11_SOURCES) $(daemontest_put_chunked_SOURCES)
DIST_SOURCES = $(daemontest_get_SOURCES) $(daemontest_get11_SOURCES) \
	$(daemontest_get_chunked_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) $(daemontest_put_SOURCES) \
	$(daemontest_put11_SOURCES) $(daemontest_put_chunked_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run aclocal-1.11
AMTAR = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoconf
AUTOHEADER = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run autoheader
AUTOMAKE = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run automake-1.11
AWK = awk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -no-cpp-precomp -fno-common -fno-strict-aliasing -g -O2
CPP = gcc -E
CPPFLAGS = 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DSYMUTIL = dsymutil
DUMPBIN = 
ECHO_C = \c
ECHO_N = 
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
EXT_LIBS = 
EXT_LIB_PATH = 
FGREP = /usr/bin/grep -F
GREP = /usr/bin/grep
HAVE_SOCAT = 0
HAVE_ZZUF = 0
INSTALL = /opt/local/bin/ginstall -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LD = /usr/libexec/gcc/powerpc-apple-darwin9/4.0.1/ld
LDFLAGS = 
LIBCURL = -lcurl -lssl -lcrypto -lz
LIBCURL_CPPFLAGS = 
LIBGCRYPT_CFLAGS = -I/usr/local/include  -I/usr/local/include
LIBGCRYPT_CONFIG = /usr/local/bin/libgcrypt-config
LIBGCRYPT_LIBS = -L/usr/local/lib -lgcrypt -L/usr/local/lib -lgpg-error
LIBOBJS = 
LIBS =  
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIB_VERSION_AGE = 0
LIB_VERSION_CURRENT = 8
LIB_VERSION_REVISION = 0
LIPO = lipo
LN_S = ln -s
LTLIBOBJS = 
MAKEINFO = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/missing --run makeinfo
MHD_LIBDEPS = 
MHD_LIB_LDFLAGS = -export-dynamic -no-undefined
MKDIR_P = /opt/local/bin/gmkdir -p
NM = /usr/bin/nm -p
NMEDIT = nmedit
OBJDUMP = objdump
OBJEXT = o
OTOOL = otool
OTOOL64 = :
PACKAGE = libmicrohttpd
PACKAGE_BUGREPORT = libmicrohttpd@gnu.org
PACKAGE_NAME = libmicrohttpd
PACKAGE_STRING = libmicrohttpd 0.9.0
PACKAGE_TARNAME = libmicrohttpd
PACKAGE_URL = 
PACKAGE_VERSION = 0.9.0
PATH_SEPARATOR = :
PTHREAD_CPPFLAGS = 
PTHREAD_LDFLAGS = 
PTHREAD_LIBS = 
RANLIB = ranlib
SED = /opt/local/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 0.9.0
_libcurl_config = 
abs_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf
abs_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf
abs_top_builddir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
abs_top_srcdir = /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0
ac_ct_CC = gcc
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = ${AMTAR} chof - "$$tardir"
am__untar = ${AMTAR} xf -
bindir = ${exec_prefix}/bin
build = powerpc-apple-darwin9.8.0
build_alias = 
build_cpu = powerpc
build_os = darwin9.8.0
build_vendor = apple
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = powerpc-apple-darwin9.8.0
host_alias = 
host_cpu = powerpc
host_os = darwin9.8.0
host_vendor = apple
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /Users/jschimpf/Public/Firenet/luasupport/HTTP/libmicrohttpd-0.9.0/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
lt_ECHO = /bin/echo
mandir = ${datarootdir}/man
mkdir_p = /opt/local/bin/gmkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias = 
top_build_prefix = ../../
top_builddir = ../..
top_srcdir = ../..
SUBDIRS = .
#AM_CFLAGS = -fprofile-arcs -ftest-coverage
INCLUDES = -I$(top_srcdir)/src/include
EXTRA_DIST = README socat.c
TESTS = $(check_PROGRAMS)
daemontest_get_SOURCES = \
  daemontest_get.c

daemontest_get_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_get_chunked_SOURCES = \
  daemontest_get_chunked.c

daemontest_get_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_post_SOURCES = \
  daemontest_post.c

daemontest_post_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_postform_SOURCES = \
  daemontest_postform.c

daemontest_postform_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_put_SOURCES = \
  daemontest_put.c

daemontest_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_put_chunked_SOURCES = \
  daemontest_put_chunked.c

daemontest_put_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_get11_SOURCES = \
  daemontest_get.c

daemontest_get11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_post11_SOURCES = \
  daemontest_post.c

daemontest_post11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_postform11_SOURCES = \
  daemontest_postform.c

daemontest_postform11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_put11_SOURCES = \
  daemontest_put.c

daemontest_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_large_put_SOURCES = \
  daemontest_large_put.c

daemontest_large_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_large_put11_SOURCES = \
  daemontest_large_put.c

daemontest_large_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

daemontest_long_header_SOURCES = \
  daemontest_long_header.c

daemontest_long_header_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  -lcurl -lssl -lcrypto -lz 

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/testzzuf/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/testzzuf/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
daemontest_get$(EXEEXT): $(daemontest_get_OBJECTS) $(daemontest_get_DEPENDENCIES) 
	@rm -f daemontest_get$(EXEEXT)
	$(LINK) $(daemontest_get_OBJECTS) $(daemontest_get_LDADD) $(LIBS)
daemontest_get11$(EXEEXT): $(daemontest_get11_OBJECTS) $(daemontest_get11_DEPENDENCIES) 
	@rm -f daemontest_get11$(EXEEXT)
	$(LINK) $(daemontest_get11_OBJECTS) $(daemontest_get11_LDADD) $(LIBS)
daemontest_get_chunked$(EXEEXT): $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_DEPENDENCIES) 
	@rm -f daemontest_get_chunked$(EXEEXT)
	$(LINK) $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_LDADD) $(LIBS)
daemontest_large_put$(EXEEXT): $(daemontest_large_put_OBJECTS) $(daemontest_large_put_DEPENDENCIES) 
	@rm -f daemontest_large_put$(EXEEXT)
	$(LINK) $(daemontest_large_put_OBJECTS) $(daemontest_large_put_LDADD) $(LIBS)
daemontest_large_put11$(EXEEXT): $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_DEPENDENCIES) 
	@rm -f daemontest_large_put11$(EXEEXT)
	$(LINK) $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_LDADD) $(LIBS)
daemontest_long_header$(EXEEXT): $(daemontest_long_header_OBJECTS) $(daemontest_long_header_DEPENDENCIES) 
	@rm -f daemontest_long_header$(EXEEXT)
	$(LINK) $(daemontest_long_header_OBJECTS) $(daemontest_long_header_LDADD) $(LIBS)
daemontest_post$(EXEEXT): $(daemontest_post_OBJECTS) $(daemontest_post_DEPENDENCIES) 
	@rm -f daemontest_post$(EXEEXT)
	$(LINK) $(daemontest_post_OBJECTS) $(daemontest_post_LDADD) $(LIBS)
daemontest_post11$(EXEEXT): $(daemontest_post11_OBJECTS) $(daemontest_post11_DEPENDENCIES) 
	@rm -f daemontest_post11$(EXEEXT)
	$(LINK) $(daemontest_post11_OBJECTS) $(daemontest_post11_LDADD) $(LIBS)
daemontest_postform$(EXEEXT): $(daemontest_postform_OBJECTS) $(daemontest_postform_DEPENDENCIES) 
	@rm -f daemontest_postform$(EXEEXT)
	$(LINK) $(daemontest_postform_OBJECTS) $(daemontest_postform_LDADD) $(LIBS)
daemontest_postform11$(EXEEXT): $(daemontest_postform11_OBJECTS) $(daemontest_postform11_DEPENDENCIES) 
	@rm -f daemontest_postform11$(EXEEXT)
	$(LINK) $(daemontest_postform11_OBJECTS) $(daemontest_postform11_LDADD) $(LIBS)
daemontest_put$(EXEEXT): $(daemontest_put_OBJECTS) $(daemontest_put_DEPENDENCIES) 
	@rm -f daemontest_put$(EXEEXT)
	$(LINK) $(daemontest_put_OBJECTS) $(daemontest_put_LDADD) $(LIBS)
daemontest_put11$(EXEEXT): $(daemontest_put11_OBJECTS) $(daemontest_put11_DEPENDENCIES) 
	@rm -f daemontest_put11$(EXEEXT)
	$(LINK) $(daemontest_put11_OBJECTS) $(daemontest_put11_LDADD) $(LIBS)
daemontest_put_chunked$(EXEEXT): $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_DEPENDENCIES) 
	@rm -f daemontest_put_chunked$(EXEEXT)
	$(LINK) $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

include ./$(DEPDIR)/daemontest_get.Po
include ./$(DEPDIR)/daemontest_get_chunked.Po
include ./$(DEPDIR)/daemontest_large_put.Po
include ./$(DEPDIR)/daemontest_long_header.Po
include ./$(DEPDIR)/daemontest_post.Po
include ./$(DEPDIR)/daemontest_postform.Po
include ./$(DEPDIR)/daemontest_put.Po
include ./$(DEPDIR)/daemontest_put_chunked.Po

.c.o:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c $<

.c.obj:
	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
#	source='$<' object='$@' libtool=no \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
#	source='$<' object='$@' libtool=yes \
#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
#	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
	mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libtool ctags \
	ctags-recursive distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-recursive uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/Makefile.am.



















































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
SUBDIRS  = .

if USE_COVERAGE
  AM_CFLAGS = -fprofile-arcs -ftest-coverage
endif

INCLUDES = -I$(top_srcdir)/src/include

EXTRA_DIST = README socat.c

check_PROGRAMS = \
  daemontest_get \
  daemontest_post \
  daemontest_postform \
  daemontest_put \
  daemontest_large_put \
  daemontest_get11 \
  daemontest_post11 \
  daemontest_postform11 \
  daemontest_put11 \
  daemontest_large_put11 \
  daemontest_long_header \
  daemontest_get_chunked \
  daemontest_put_chunked 

TESTS = $(check_PROGRAMS)

daemontest_get_SOURCES = \
  daemontest_get.c
daemontest_get_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_chunked_SOURCES = \
  daemontest_get_chunked.c
daemontest_get_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_SOURCES = \
  daemontest_post.c
daemontest_post_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform_SOURCES = \
  daemontest_postform.c
daemontest_postform_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_SOURCES = \
  daemontest_put.c
daemontest_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_chunked_SOURCES = \
  daemontest_put_chunked.c
daemontest_put_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get11_SOURCES = \
  daemontest_get.c
daemontest_get11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post11_SOURCES = \
  daemontest_post.c
daemontest_post11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform11_SOURCES = \
  daemontest_postform.c
daemontest_postform11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put11_SOURCES = \
  daemontest_put.c
daemontest_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 


daemontest_large_put_SOURCES = \
  daemontest_large_put.c
daemontest_large_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put11_SOURCES = \
  daemontest_large_put.c
daemontest_large_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_long_header_SOURCES = \
  daemontest_long_header.c
daemontest_long_header_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/Makefile.in.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
# Makefile.in generated by automake 1.11.1 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
check_PROGRAMS = daemontest_get$(EXEEXT) daemontest_post$(EXEEXT) \
	daemontest_postform$(EXEEXT) daemontest_put$(EXEEXT) \
	daemontest_large_put$(EXEEXT) daemontest_get11$(EXEEXT) \
	daemontest_post11$(EXEEXT) daemontest_postform11$(EXEEXT) \
	daemontest_put11$(EXEEXT) daemontest_large_put11$(EXEEXT) \
	daemontest_long_header$(EXEEXT) \
	daemontest_get_chunked$(EXEEXT) \
	daemontest_put_chunked$(EXEEXT)
subdir = src/testzzuf
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libcurl.m4 \
	$(top_srcdir)/m4/libgcrypt.m4 $(top_srcdir)/m4/libtool.m4 \
	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/MHD_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am_daemontest_get_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get_OBJECTS = $(am_daemontest_get_OBJECTS)
daemontest_get_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get11_OBJECTS = daemontest_get.$(OBJEXT)
daemontest_get11_OBJECTS = $(am_daemontest_get11_OBJECTS)
daemontest_get11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_get_chunked_OBJECTS = daemontest_get_chunked.$(OBJEXT)
daemontest_get_chunked_OBJECTS = $(am_daemontest_get_chunked_OBJECTS)
daemontest_get_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put_OBJECTS = $(am_daemontest_large_put_OBJECTS)
daemontest_large_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_large_put11_OBJECTS = daemontest_large_put.$(OBJEXT)
daemontest_large_put11_OBJECTS = $(am_daemontest_large_put11_OBJECTS)
daemontest_large_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_long_header_OBJECTS = daemontest_long_header.$(OBJEXT)
daemontest_long_header_OBJECTS = $(am_daemontest_long_header_OBJECTS)
daemontest_long_header_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post_OBJECTS = $(am_daemontest_post_OBJECTS)
daemontest_post_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_post11_OBJECTS = daemontest_post.$(OBJEXT)
daemontest_post11_OBJECTS = $(am_daemontest_post11_OBJECTS)
daemontest_post11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform_OBJECTS = $(am_daemontest_postform_OBJECTS)
daemontest_postform_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_postform11_OBJECTS = daemontest_postform.$(OBJEXT)
daemontest_postform11_OBJECTS = $(am_daemontest_postform11_OBJECTS)
daemontest_postform11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put_OBJECTS = $(am_daemontest_put_OBJECTS)
daemontest_put_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put11_OBJECTS = daemontest_put.$(OBJEXT)
daemontest_put11_OBJECTS = $(am_daemontest_put11_OBJECTS)
daemontest_put11_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
am_daemontest_put_chunked_OBJECTS = daemontest_put_chunked.$(OBJEXT)
daemontest_put_chunked_OBJECTS = $(am_daemontest_put_chunked_OBJECTS)
daemontest_put_chunked_DEPENDENCIES =  \
	$(top_builddir)/src/daemon/libmicrohttpd.la
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
	$(LDFLAGS) -o $@
SOURCES = $(daemontest_get_SOURCES) $(daemontest_get11_SOURCES) \
	$(daemontest_get_chunked_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) $(daemontest_put_SOURCES) \
	$(daemontest_put11_SOURCES) $(daemontest_put_chunked_SOURCES)
DIST_SOURCES = $(daemontest_get_SOURCES) $(daemontest_get11_SOURCES) \
	$(daemontest_get_chunked_SOURCES) \
	$(daemontest_large_put_SOURCES) \
	$(daemontest_large_put11_SOURCES) \
	$(daemontest_long_header_SOURCES) $(daemontest_post_SOURCES) \
	$(daemontest_post11_SOURCES) $(daemontest_postform_SOURCES) \
	$(daemontest_postform11_SOURCES) $(daemontest_put_SOURCES) \
	$(daemontest_put11_SOURCES) $(daemontest_put_chunked_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-dvi-recursive install-exec-recursive \
	install-html-recursive install-info-recursive \
	install-pdf-recursive install-ps-recursive install-recursive \
	installcheck-recursive installdirs-recursive pdf-recursive \
	ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
  distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
	distdir
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
red=; grn=; lgn=; blu=; std=
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
  dir0=`pwd`; \
  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
  sed_rest='s,^[^/]*/*,,'; \
  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
  sed_butlast='s,/*[^/]*$$,,'; \
  while test -n "$$dir1"; do \
    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
    if test "$$first" != "."; then \
      if test "$$first" = ".."; then \
        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
      else \
        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
        if test "$$first2" = "$$first"; then \
          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
        else \
          dir2="../$$dir2"; \
        fi; \
        dir0="$$dir0"/"$$first"; \
      fi; \
    fi; \
    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
  done; \
  reldir="$$dir2"
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
EXT_LIBS = @EXT_LIBS@
EXT_LIB_PATH = @EXT_LIB_PATH@
FGREP = @FGREP@
GREP = @GREP@
HAVE_SOCAT = @HAVE_SOCAT@
HAVE_ZZUF = @HAVE_ZZUF@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBCURL = @LIBCURL@
LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIB_VERSION_AGE = @LIB_VERSION_AGE@
LIB_VERSION_CURRENT = @LIB_VERSION_CURRENT@
LIB_VERSION_REVISION = @LIB_VERSION_REVISION@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MHD_LIBDEPS = @MHD_LIBDEPS@
MHD_LIB_LDFLAGS = @MHD_LIB_LDFLAGS@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CPPFLAGS = @PTHREAD_CPPFLAGS@
PTHREAD_LDFLAGS = @PTHREAD_LDFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
_libcurl_config = @_libcurl_config@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = .
@USE_COVERAGE_TRUE@AM_CFLAGS = -fprofile-arcs -ftest-coverage
INCLUDES = -I$(top_srcdir)/src/include
EXTRA_DIST = README socat.c
TESTS = $(check_PROGRAMS)
daemontest_get_SOURCES = \
  daemontest_get.c

daemontest_get_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get_chunked_SOURCES = \
  daemontest_get_chunked.c

daemontest_get_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post_SOURCES = \
  daemontest_post.c

daemontest_post_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform_SOURCES = \
  daemontest_postform.c

daemontest_postform_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_SOURCES = \
  daemontest_put.c

daemontest_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put_chunked_SOURCES = \
  daemontest_put_chunked.c

daemontest_put_chunked_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_get11_SOURCES = \
  daemontest_get.c

daemontest_get11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_post11_SOURCES = \
  daemontest_post.c

daemontest_post11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_postform11_SOURCES = \
  daemontest_postform.c

daemontest_postform11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_put11_SOURCES = \
  daemontest_put.c

daemontest_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put_SOURCES = \
  daemontest_large_put.c

daemontest_large_put_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_large_put11_SOURCES = \
  daemontest_large_put.c

daemontest_large_put11_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

daemontest_long_header_SOURCES = \
  daemontest_long_header.c

daemontest_long_header_LDADD = \
  $(top_builddir)/src/daemon/libmicrohttpd.la \
  @LIBCURL@ 

all: all-recursive

.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/testzzuf/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu src/testzzuf/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-checkPROGRAMS:
	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list
daemontest_get$(EXEEXT): $(daemontest_get_OBJECTS) $(daemontest_get_DEPENDENCIES) 
	@rm -f daemontest_get$(EXEEXT)
	$(LINK) $(daemontest_get_OBJECTS) $(daemontest_get_LDADD) $(LIBS)
daemontest_get11$(EXEEXT): $(daemontest_get11_OBJECTS) $(daemontest_get11_DEPENDENCIES) 
	@rm -f daemontest_get11$(EXEEXT)
	$(LINK) $(daemontest_get11_OBJECTS) $(daemontest_get11_LDADD) $(LIBS)
daemontest_get_chunked$(EXEEXT): $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_DEPENDENCIES) 
	@rm -f daemontest_get_chunked$(EXEEXT)
	$(LINK) $(daemontest_get_chunked_OBJECTS) $(daemontest_get_chunked_LDADD) $(LIBS)
daemontest_large_put$(EXEEXT): $(daemontest_large_put_OBJECTS) $(daemontest_large_put_DEPENDENCIES) 
	@rm -f daemontest_large_put$(EXEEXT)
	$(LINK) $(daemontest_large_put_OBJECTS) $(daemontest_large_put_LDADD) $(LIBS)
daemontest_large_put11$(EXEEXT): $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_DEPENDENCIES) 
	@rm -f daemontest_large_put11$(EXEEXT)
	$(LINK) $(daemontest_large_put11_OBJECTS) $(daemontest_large_put11_LDADD) $(LIBS)
daemontest_long_header$(EXEEXT): $(daemontest_long_header_OBJECTS) $(daemontest_long_header_DEPENDENCIES) 
	@rm -f daemontest_long_header$(EXEEXT)
	$(LINK) $(daemontest_long_header_OBJECTS) $(daemontest_long_header_LDADD) $(LIBS)
daemontest_post$(EXEEXT): $(daemontest_post_OBJECTS) $(daemontest_post_DEPENDENCIES) 
	@rm -f daemontest_post$(EXEEXT)
	$(LINK) $(daemontest_post_OBJECTS) $(daemontest_post_LDADD) $(LIBS)
daemontest_post11$(EXEEXT): $(daemontest_post11_OBJECTS) $(daemontest_post11_DEPENDENCIES) 
	@rm -f daemontest_post11$(EXEEXT)
	$(LINK) $(daemontest_post11_OBJECTS) $(daemontest_post11_LDADD) $(LIBS)
daemontest_postform$(EXEEXT): $(daemontest_postform_OBJECTS) $(daemontest_postform_DEPENDENCIES) 
	@rm -f daemontest_postform$(EXEEXT)
	$(LINK) $(daemontest_postform_OBJECTS) $(daemontest_postform_LDADD) $(LIBS)
daemontest_postform11$(EXEEXT): $(daemontest_postform11_OBJECTS) $(daemontest_postform11_DEPENDENCIES) 
	@rm -f daemontest_postform11$(EXEEXT)
	$(LINK) $(daemontest_postform11_OBJECTS) $(daemontest_postform11_LDADD) $(LIBS)
daemontest_put$(EXEEXT): $(daemontest_put_OBJECTS) $(daemontest_put_DEPENDENCIES) 
	@rm -f daemontest_put$(EXEEXT)
	$(LINK) $(daemontest_put_OBJECTS) $(daemontest_put_LDADD) $(LIBS)
daemontest_put11$(EXEEXT): $(daemontest_put11_OBJECTS) $(daemontest_put11_DEPENDENCIES) 
	@rm -f daemontest_put11$(EXEEXT)
	$(LINK) $(daemontest_put11_OBJECTS) $(daemontest_put11_LDADD) $(LIBS)
daemontest_put_chunked$(EXEEXT): $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_DEPENDENCIES) 
	@rm -f daemontest_put_chunked$(EXEEXT)
	$(LINK) $(daemontest_put_chunked_OBJECTS) $(daemontest_put_chunked_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_get.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_get_chunked.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_large_put.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_long_header.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_post.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_postform.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_put.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daemontest_put_chunked.Po@am__quote@

.c.o:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c $<

.c.obj:
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`

.c.lo:
@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

$(RECURSIVE_CLEAN_TARGETS):
	@fail= failcom='exit 1'; \
	for f in x $$MAKEFLAGS; do \
	  case $$f in \
	    *=* | --[!k]*);; \
	    *k*) failcom='fail=yes';; \
	  esac; \
	done; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	  || eval $$failcom; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	set x; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
	      END { if (nonempty) { for (i in files) print i; }; }'`; \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

check-TESTS: $(TESTS)
	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
	srcdir=$(srcdir); export srcdir; \
	list=' $(TESTS) '; \
	$(am__tty_colors); \
	if test -n "$$list"; then \
	  for tst in $$list; do \
	    if test -f ./$$tst; then dir=./; \
	    elif test -f $$tst; then dir=; \
	    else dir="$(srcdir)/"; fi; \
	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xpass=`expr $$xpass + 1`; \
		failed=`expr $$failed + 1`; \
		col=$$red; res=XPASS; \
	      ;; \
	      *) \
		col=$$grn; res=PASS; \
	      ;; \
	      esac; \
	    elif test $$? -ne 77; then \
	      all=`expr $$all + 1`; \
	      case " $(XFAIL_TESTS) " in \
	      *[\ \	]$$tst[\ \	]*) \
		xfail=`expr $$xfail + 1`; \
		col=$$lgn; res=XFAIL; \
	      ;; \
	      *) \
		failed=`expr $$failed + 1`; \
		col=$$red; res=FAIL; \
	      ;; \
	      esac; \
	    else \
	      skip=`expr $$skip + 1`; \
	      col=$$blu; res=SKIP; \
	    fi; \
	    echo "$${col}$$res$${std}: $$tst"; \
	  done; \
	  if test "$$all" -eq 1; then \
	    tests="test"; \
	    All=""; \
	  else \
	    tests="tests"; \
	    All="All "; \
	  fi; \
	  if test "$$failed" -eq 0; then \
	    if test "$$xfail" -eq 0; then \
	      banner="$$All$$all $$tests passed"; \
	    else \
	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
	    fi; \
	  else \
	    if test "$$xpass" -eq 0; then \
	      banner="$$failed of $$all $$tests failed"; \
	    else \
	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
	    fi; \
	  fi; \
	  dashes="$$banner"; \
	  skipped=""; \
	  if test "$$skip" -ne 0; then \
	    if test "$$skip" -eq 1; then \
	      skipped="($$skip test was not run)"; \
	    else \
	      skipped="($$skip tests were not run)"; \
	    fi; \
	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$skipped"; \
	  fi; \
	  report=""; \
	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
	    report="Please report to $(PACKAGE_BUGREPORT)"; \
	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
	      dashes="$$report"; \
	  fi; \
	  dashes=`echo "$$dashes" | sed s/./=/g`; \
	  if test "$$failed" -eq 0; then \
	    echo "$$grn$$dashes"; \
	  else \
	    echo "$$red$$dashes"; \
	  fi; \
	  echo "$$banner"; \
	  test -z "$$skipped" || echo "$$skipped"; \
	  test -z "$$report" || echo "$$report"; \
	  echo "$$dashes$$std"; \
	  test "$$failed" -eq 0; \
	else :; fi

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(MKDIR_P) "$(distdir)/$$subdir" \
	    || exit 1; \
	  fi; \
	done
	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
	    $(am__relativize); \
	    new_distdir=$$reldir; \
	    dir1=$$subdir; dir2="$(top_distdir)"; \
	    $(am__relativize); \
	    new_top_distdir=$$reldir; \
	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
	    ($(am__cd) $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$new_top_distdir" \
	        distdir="$$new_distdir" \
		am__remove_distdir=: \
		am__skip_length_check=: \
		am__skip_mode_fix=: \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive

clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
	mostlyclean-am

distclean: distclean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

html-am:

info: info-recursive

info-am:

install-data-am:

install-dvi: install-dvi-recursive

install-dvi-am:

install-exec-am:

install-html: install-html-recursive

install-html-am:

install-info: install-info-recursive

install-info-am:

install-man:

install-pdf: install-pdf-recursive

install-pdf-am:

install-ps: install-ps-recursive

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -rf ./$(DEPDIR)
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am:

.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \
	ctags-recursive install-am install-strip tags-recursive

.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
	all all-am check check-TESTS check-am clean \
	clean-checkPROGRAMS clean-generic clean-libtool ctags \
	ctags-recursive distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-recursive uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/README.



























>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
Testcases in this directory require zzuf and socat.

zzuf is used to randomly mess with the TCP connection between the CURL
clients and the MHD server.  The goal is to expose problems in MHD's
error handling (by introducing random syntax errors).  socat is
used to listen on port 11081 and forward the randomzied stream to
port 11080 where MHD is waiting.

As a result, the testcases in this directory do NOT check that
whatever CURL returns is what was expected -- random modifications to
the TCP stream can have random effects ;-).  Testcases "fail" if the
code crashes or hangs indefinitely.

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_get.c.



















































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_get.c
 * @brief  Testcase for libmicrohttpd GET operations
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#include "socat.c"

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int ptr;
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&ptr != *unused)
    {
      *unused = &ptr;
      return MHD_YES;
    }
  *unused = NULL;
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  if (ret == MHD_NO)
    abort ();
  return ret;
}


static int
testInternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 16;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}


static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  int i;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
    }
  fprintf (stderr, "\n");
  curl_multi_cleanup (multi);
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalGet ();
  errorCount += testMultithreadedGet ();
  errorCount += testExternalGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_get_chunked.c.





















































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_get_chunked.c
 * @brief  Testcase for libmicrohttpd GET operations with chunked content encoding
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#include "socat.c"

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

/**
 * MHD content reader callback that returns
 * data in chunks.
 */
static int
crc (void *cls, uint64_t pos, char *buf, int max)
{
  struct MHD_Response **responseptr = cls;

  if (pos == 128 * 10)
    {
      MHD_add_response_header (*responseptr, "Footer", "working");
      return -1;                /* end of stream */
    }
  if (max < 128)
    abort ();                   /* should not happen in this testcase... */
  memset (buf, 'A' + (pos / 128), 128);
  return 128;
}

/**
 * Dummy function that does nothing.
 */
static void
crcf (void *ptr)
{
  free (ptr);
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
  static int aptr;
  const char *me = cls;
  struct MHD_Response *response;
  struct MHD_Response **responseptr;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  if (&aptr != *ptr)
    {
      /* do never respond on first call */
      *ptr = &aptr;
      return MHD_YES;
    }
  responseptr = malloc (sizeof (struct MHD_Response *));
  response = MHD_create_response_from_callback (-1,
                                                1024,
                                                &crc, responseptr, &crcf);
  *responseptr = response;
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}

static int
testInternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 16;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}


static int
testExternalGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  int i;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
    }
  fprintf (stderr, "\n");
  curl_multi_cleanup (multi);
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalGet ();
  errorCount += testMultithreadedGet ();
  errorCount += testExternalGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_large_put.c.



























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_large_put.c
 * @brief  Testcase for libmicrohttpd PUT operations
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#include "socat.c"

static int oneone;

/**
 * Do not make this much larger since we will hit the
 * MHD default buffer limit and the test code is not
 * written for incremental upload processing...
 */
#define PUT_SIZE (256 * 1024)

static char *put_buffer;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
putBuffer (void *stream, size_t size, size_t nmemb, void *ptr)
{
  unsigned int *pos = ptr;
  unsigned int wrt;

  wrt = size * nmemb;
  if (wrt > PUT_SIZE - (*pos))
    wrt = PUT_SIZE - (*pos);
  memcpy (stream, &put_buffer[*pos], wrt);
  (*pos) += wrt;
  return wrt;
}

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  int *done = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp ("PUT", method))
    return MHD_NO;              /* unexpected method */
  if ((*done) == 0)
    {
      if (*upload_data_size != PUT_SIZE)
        {
#if 0
          fprintf (stderr,
                   "Waiting for more data (%u/%u)...\n",
                   *upload_data_size, PUT_SIZE);
#endif
          return MHD_YES;       /* not yet ready */
        }
      if (0 == memcmp (upload_data, put_buffer, PUT_SIZE))
        {
          *upload_data_size = 0;
        }
      else
        {
          return MHD_NO;
        }
      *done = 1;
      return MHD_YES;
    }
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testInternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  char buf[2048];
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  char buf[2048];
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}


static int
testExternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  unsigned int pos = 0;
  int done_flag = 0;
  char buf[2048];
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  multi = NULL;
  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag,
                        MHD_OPTION_CONNECTION_MEMORY_LIMIT,
                        PUT_SIZE * 4, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);



      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  curl_multi_cleanup (multi);
  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  put_buffer = malloc (PUT_SIZE);
  memset (put_buffer, 1, PUT_SIZE);
  errorCount += testInternalPut ();
  errorCount += testMultithreadedPut ();
  errorCount += testExternalPut ();
  free (put_buffer);
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_long_header.c.















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_long_header.c
 * @brief  Testcase for libmicrohttpd handling of very long headers
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#include "socat.c"

/**
 * We will set the memory available per connection to
 * half of this value, so the actual value does not have
 * to be big at all...
 */
#define VERY_LONG (1024*10)

static int oneone;

static int
apc_all (void *cls, const struct sockaddr *addr, socklen_t addrlen)
{
  return MHD_YES;
}

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  const char *me = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp (me, method))
    return MHD_NO;              /* unexpected method */
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testLongUrlGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  char *url;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080,
                        &apc_all,
                        NULL,
                        &ahc_echo,
                        "GET",
                        MHD_OPTION_CONNECTION_MEMORY_LIMIT,
                        (size_t) (VERY_LONG / 2), MHD_OPTION_END);

  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      url = malloc (VERY_LONG);
      memset (url, 'a', VERY_LONG);
      url[VERY_LONG - 1] = '\0';
      memcpy (url, "http://localhost:11081/",
              strlen ("http://localhost:11081/"));
      curl_easy_setopt (c, CURLOPT_URL, url);
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();

  MHD_stop_daemon (d);
  free (url);
  return 0;
}


static int
testLongHeaderGet ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  char *url;
  struct curl_slist *header = NULL;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080,
                        &apc_all,
                        NULL,
                        &ahc_echo,
                        "GET",
                        MHD_OPTION_CONNECTION_MEMORY_LIMIT,
                        (size_t) (VERY_LONG / 2), MHD_OPTION_END);
  if (d == NULL)
    return 16;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      url = malloc (VERY_LONG);
      memset (url, 'a', VERY_LONG);
      url[VERY_LONG - 1] = '\0';
      url[VERY_LONG / 2] = ':';
      url[VERY_LONG / 2 + 1] = ' ';
      header = curl_slist_append (header, url);

      curl_easy_setopt (c, CURLOPT_HTTPHEADER, header);
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_slist_free_all (header);
      header = NULL;
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();

  MHD_stop_daemon (d);
  free (url);
  return 0;
}

int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testLongUrlGet ();
  errorCount += testLongHeaderGet ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_post.c.









































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_post.c
 * @brief  Testcase for libmicrohttpd POST operations using URL-encoding
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif


#include "socat.c"

#define POST_DATA "name=daniel&project=curl"

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

/**
 * Note that this post_iterator is not perfect
 * in that it fails to support incremental processing.
 * (to be fixed in the future)
 */
static int
post_iterator (void *cls,
               enum MHD_ValueKind kind,
               const char *key,
               const char *filename,
               const char *content_type,
               const char *transfer_encoding,
               const char *value, uint64_t off, size_t size)
{
  int *eok = cls;

  if ((0 == strcmp (key, "name")) &&
      (size == strlen ("daniel")) && (0 == strncmp (value, "daniel", size)))
    (*eok) |= 1;
  if ((0 == strcmp (key, "project")) &&
      (size == strlen ("curl")) && (0 == strncmp (value, "curl", size)))
    (*eok) |= 2;
  return MHD_YES;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int eok;
  struct MHD_Response *response;
  struct MHD_PostProcessor *pp;
  int ret;

  if (0 != strcmp ("POST", method))
    {
      return MHD_NO;            /* unexpected method */
    }
  pp = *unused;
  if (pp == NULL)
    {
      eok = 0;
      pp = MHD_create_post_processor (connection, 1024, &post_iterator, &eok);
      *unused = pp;
    }
  MHD_post_process (pp, upload_data, *upload_data_size);
  if ((eok == 3) && (0 == *upload_data_size))
    {
      response = MHD_create_response_from_data (strlen (url),
                                                (void *) url,
                                                MHD_NO, MHD_YES);
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
      MHD_destroy_post_processor (pp);
      *unused = NULL;
      return ret;
    }
  *upload_data_size = 0;
  return MHD_YES;
}


static int
testInternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);

  return 0;
}

static int
testMultithreadedPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 16;

  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();

  MHD_stop_daemon (d);
  return 0;
}


static int
testExternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  int i;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                        1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }

  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");


      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA);
      curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA));
      curl_easy_setopt (c, CURLOPT_POST, 1L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }

    }
  fprintf (stderr, "\n");
  curl_multi_cleanup (multi);
  zzuf_socat_stop ();

  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPost ();
  errorCount += testMultithreadedPost ();
  errorCount += testExternalPost ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_postform.c.







































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_post.c
 * @brief  Testcase for libmicrohttpd POST operations using multipart/postform data
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif


#include "socat.c"

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

/**
 * Note that this post_iterator is not perfect
 * in that it fails to support incremental processing.
 * (to be fixed in the future)
 */
static int
post_iterator (void *cls,
               enum MHD_ValueKind kind,
               const char *key,
               const char *filename,
               const char *content_type,
               const char *transfer_encoding,
               const char *value, uint64_t off, size_t size)
{
  int *eok = cls;

  if (key == NULL)
    return MHD_YES;
#if 0
  fprintf (stderr, "PI sees %s-%.*s\n", key, size, value);
#endif
  if ((0 == strcmp (key, "name")) &&
      (size == strlen ("daniel")) && (0 == strncmp (value, "daniel", size)))
    (*eok) |= 1;
  if ((0 == strcmp (key, "project")) &&
      (size == strlen ("curl")) && (0 == strncmp (value, "curl", size)))
    (*eok) |= 2;
  return MHD_YES;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  static int eok;
  struct MHD_Response *response;
  struct MHD_PostProcessor *pp;
  int ret;

  if (0 != strcmp ("POST", method))
    {
      return MHD_NO;            /* unexpected method */
    }
  pp = *unused;
  if (pp == NULL)
    {
      eok = 0;
      pp = MHD_create_post_processor (connection, 1024, &post_iterator, &eok);
      if (pp == NULL)
        return MHD_NO;
      *unused = pp;
    }
  MHD_post_process (pp, upload_data, *upload_data_size);
  if ((eok == 3) && (0 == *upload_data_size))
    {
      response = MHD_create_response_from_data (strlen (url),
                                                (void *) url,
                                                MHD_NO, MHD_YES);
      ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
      MHD_destroy_response (response);
      MHD_destroy_post_processor (pp);
      *unused = NULL;
      return ret;
    }
  *upload_data_size = 0;
  return MHD_YES;
}

static struct curl_httppost *
make_form ()
{
  struct curl_httppost *post = NULL;
  struct curl_httppost *last = NULL;

  curl_formadd (&post, &last, CURLFORM_COPYNAME, "name",
                CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END);
  curl_formadd (&post, &last, CURLFORM_COPYNAME, "project",
                CURLFORM_COPYCONTENTS, "curl", CURLFORM_END);
  return post;
}


static int
testInternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;
  struct curl_httppost *pd;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      pd = make_form ();
      curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
      curl_formfree (pd);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  int i;
  struct curl_httppost *pd;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                        11080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      pd = make_form ();
      curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
      curl_formfree (pd);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}


static int
testExternalPost ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  struct curl_httppost *pd;
  int i;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                        1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1082/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      pd = make_form ();
      curl_easy_setopt (c, CURLOPT_HTTPPOST, pd);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_formfree (pd);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              curl_formfree (pd);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              curl_formfree (pd);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
      curl_formfree (pd);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();

  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPost ();
  errorCount += testMultithreadedPost ();
  errorCount += testExternalPost ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_put.c.

















































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_put.c
 * @brief  Testcase for libmicrohttpd PUT operations
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif


#include "socat.c"

static int oneone;

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
putBuffer (void *stream, size_t size, size_t nmemb, void *ptr)
{
  unsigned int *pos = ptr;
  unsigned int wrt;

  wrt = size * nmemb;
  if (wrt > 8 - (*pos))
    wrt = 8 - (*pos);
  memcpy (stream, &("Hello123"[*pos]), wrt);
  (*pos) += wrt;
  return wrt;
}

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  int *done = cls;
  struct MHD_Response *response;
  int ret;

  if (0 != strcmp ("PUT", method))
    return MHD_NO;              /* unexpected method */
  if ((*done) == 0)
    {
      if (*upload_data_size != 8)
        return MHD_YES;         /* not yet ready */
      if (0 == memcmp (upload_data, "Hello123", 8))
        {
          *upload_data_size = 0;
        }
      else
        {
          printf ("Invalid upload data `%8s'!\n", upload_data);
          return MHD_NO;
        }
      *done = 1;
      return MHD_YES;
    }
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testInternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ ,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ ,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}


static int
testExternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  unsigned int pos = 0;
  int done_flag = 0;
  int i;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ ,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 256;
  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");

      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      if (oneone)
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      else
        curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);



      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
    }
  fprintf (stderr, "\n");
  curl_multi_cleanup (multi);
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  oneone = NULL != strstr (argv[0], "11");
  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPut ();
  errorCount += testMultithreadedPut ();
  errorCount += testExternalPut ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/daemontest_put_chunked.c.





































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
/*
     This file is part of libmicrohttpd
     (C) 2007, 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file daemontest_put_chunked.c
 * @brief Testcase for libmicrohttpd PUT operations with chunked encoding
 *        for the upload data
 * @author Christian Grothoff
 */

#include "MHD_config.h"
#include "platform.h"
#include <curl/curl.h>
#include <microhttpd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#include "socat.c"

struct CBC
{
  char *buf;
  size_t pos;
  size_t size;
};

static size_t
putBuffer (void *stream, size_t size, size_t nmemb, void *ptr)
{
  unsigned int *pos = ptr;
  unsigned int wrt;

  wrt = size * nmemb;
  if (wrt > 8 - (*pos))
    wrt = 8 - (*pos);
  if (wrt > 4)
    wrt = 4;                    /* only send half at first => force multiple chunks! */
  memcpy (stream, &("Hello123"[*pos]), wrt);
  (*pos) += wrt;
  return wrt;
}

static size_t
copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
{
  struct CBC *cbc = ctx;

  if (cbc->pos + size * nmemb > cbc->size)
    return 0;                   /* overflow */
  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
  cbc->pos += size * nmemb;
  return size * nmemb;
}

static int
ahc_echo (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size,
          void **unused)
{
  int *done = cls;
  struct MHD_Response *response;
  int ret;
  int have;

  if (0 != strcmp ("PUT", method))
    return MHD_NO;              /* unexpected method */
  if ((*done) < 8)
    {
      have = *upload_data_size;
      if (have + *done > 8)
        {
          return MHD_NO;
        }
      if (0 == memcmp (upload_data, &"Hello123"[*done], have))
        {
          *done += have;
          *upload_data_size = 0;
        }
      else
        {
          return MHD_NO;
        }
#if 0
      fprintf (stderr, "Not ready for response: %u/%u\n", *done, 8);
#endif
      return MHD_YES;
    }
  response = MHD_create_response_from_data (strlen (url),
                                            (void *) url, MHD_NO, MHD_YES);
  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
  MHD_destroy_response (response);
  return ret;
}


static int
testInternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  int i;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
                        11080,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 1;
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11080/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      /*
         // by not giving the file size, we force chunking!
         curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
       */
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
      curl_easy_perform (c);
      curl_easy_cleanup (c);
    }
  fprintf (stderr, "\n");
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}

static int
testMultithreadedPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  unsigned int pos = 0;
  int done_flag = 0;
  CURLcode errornum;

  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
                        11081,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 16;
  c = curl_easy_init ();
  curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world");
  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
  curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
  curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
  curl_easy_setopt (c, CURLOPT_READDATA, &pos);
  curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
  /*
     // by not giving the file size, we force chunking!
     curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
   */
  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
  curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
  // NOTE: use of CONNECTTIMEOUT without also
  //   setting NOSIGNAL results in really weird
  //   crashes on my system!
  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
  if (CURLE_OK != (errornum = curl_easy_perform (c)))
    {
      fprintf (stderr,
               "curl_easy_perform failed: `%s'\n",
               curl_easy_strerror (errornum));
      curl_easy_cleanup (c);
      MHD_stop_daemon (d);
      return 32;
    }
  curl_easy_cleanup (c);
  MHD_stop_daemon (d);
  if (cbc.pos != strlen ("/hello_world"))
    return 64;
  if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world")))
    return 128;

  return 0;
}


static int
testExternalPut ()
{
  struct MHD_Daemon *d;
  CURL *c;
  char buf[2048];
  struct CBC cbc;
  CURLM *multi;
  CURLMcode mret;
  fd_set rs;
  fd_set ws;
  fd_set es;
  int max;
  int running;
  time_t start;
  struct timeval tv;
  unsigned int pos = 0;
  int done_flag = 0;
  int i;

  multi = NULL;
  cbc.buf = buf;
  cbc.size = 2048;
  cbc.pos = 0;
  d = MHD_start_daemon (MHD_USE_DEBUG,
                        11082,
                        NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END);
  if (d == NULL)
    return 256;

  multi = curl_multi_init ();
  if (multi == NULL)
    {
      MHD_stop_daemon (d);
      return 512;
    }
  zzuf_socat_start ();
  for (i = 0; i < LOOP_COUNT; i++)
    {
      fprintf (stderr, ".");
      c = curl_easy_init ();
      curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11082/hello_world");
      curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
      curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
      curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer);
      curl_easy_setopt (c, CURLOPT_READDATA, &pos);
      curl_easy_setopt (c, CURLOPT_UPLOAD, 1L);
      /*
         // by not giving the file size, we force chunking!
         curl_easy_setopt (c, CURLOPT_INFILESIZE_LARGE, (curl_off_t) 8L);
       */
      curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
      curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT);
      curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
      curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT);
      // NOTE: use of CONNECTTIMEOUT without also
      //   setting NOSIGNAL results in really weird
      //   crashes on my system!
      curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);


      mret = curl_multi_add_handle (multi, c);
      if (mret != CURLM_OK)
        {
          curl_multi_cleanup (multi);
          curl_easy_cleanup (c);
          zzuf_socat_stop ();
          MHD_stop_daemon (d);
          return 1024;
        }
      start = time (NULL);
      while ((time (NULL) - start < 5) && (c != NULL))
        {
          max = 0;
          FD_ZERO (&rs);
          FD_ZERO (&ws);
          FD_ZERO (&es);
          curl_multi_perform (multi, &running);
          mret = curl_multi_fdset (multi, &rs, &ws, &es, &max);
          if (mret != CURLM_OK)
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 2048;
            }
          if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max))
            {
              curl_multi_remove_handle (multi, c);
              curl_multi_cleanup (multi);
              curl_easy_cleanup (c);
              zzuf_socat_stop ();
              MHD_stop_daemon (d);
              return 4096;
            }
          tv.tv_sec = 0;
          tv.tv_usec = 1000;
          select (max + 1, &rs, &ws, &es, &tv);
          curl_multi_perform (multi, &running);
          if (running == 0)
            {
              curl_multi_info_read (multi, &running);
              curl_multi_remove_handle (multi, c);
              curl_easy_cleanup (c);
              c = NULL;
            }
          MHD_run (d);
        }
      if (c != NULL)
        {
          curl_multi_remove_handle (multi, c);
          curl_easy_cleanup (c);
        }
    }
  fprintf (stderr, "\n");
  curl_multi_cleanup (multi);
  zzuf_socat_stop ();
  MHD_stop_daemon (d);
  return 0;
}



int
main (int argc, char *const *argv)
{
  unsigned int errorCount = 0;

  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
    return 2;
  errorCount += testInternalPut ();
  errorCount += testMultithreadedPut ();
  errorCount += testExternalPut ();
  if (errorCount != 0)
    fprintf (stderr, "Error (code: %u)\n", errorCount);
  curl_global_cleanup ();
  return errorCount != 0;       /* 0 == pass */
}

Added luasupport/HTTP/libmicrohttpd-0.9.0/src/testzzuf/socat.c.























































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff

     libmicrohttpd is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 2, or (at your
     option) any later version.

     libmicrohttpd is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with libmicrohttpd; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     Boston, MA 02111-1307, USA.
*/

/**
 * @file socat.c
 * @brief  Code to fork-exec zzuf and start the socat process
 * @author Christian Grothoff
 */

#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>


/**
 * A larger loop count will run more random tests --
 * which would be good, except that it may take too
 * long for most user's patience.  So this small
 * value is the default.
 */
#define LOOP_COUNT 10

#define CURL_TIMEOUT 50L

static pid_t zzuf_pid;

static void
zzuf_socat_start ()
{
  int status;
  char *const args[] = {
    "zzuf",
    "--ratio=0.0:0.75",
    "-n",
    "-A",
    "--",
    "socat",
    "-lf",
    "/dev/null",
    "TCP4-LISTEN:11081,reuseaddr,fork",
    "TCP4:127.0.0.1:11080",
    NULL,
  };
  zzuf_pid = fork ();
  if (zzuf_pid == -1)
    {
      fprintf (stderr, "fork failed: %s\n", strerror (errno));
      exit (1);
    }
  if (zzuf_pid != 0)
    {
      sleep (1);                /* allow zzuf and socat to start */
      status = 0;
      if (0 < waitpid (zzuf_pid, &status, WNOHANG))
        {
          if (WIFEXITED (status))
            fprintf (stderr,
                     "zzuf died with status code %d!\n",
                     WEXITSTATUS (status));
          if (WIFSIGNALED (status))
            fprintf (stderr,
                     "zzuf died from signal %d!\n", WTERMSIG (status));
          exit (1);
        }
      return;
    }
  setpgrp ();
  execvp ("zzuf", args);
  fprintf (stderr, "execution of `zzuf' failed: %s\n", strerror (errno));
  zzuf_pid = 0;                 /* fork failed */
  exit (1);
}


static void
zzuf_socat_stop ()
{
  int status;
  if (zzuf_pid != 0)
    {
      if (0 != killpg (zzuf_pid, SIGINT))
        fprintf (stderr, "Failed to killpg: %s\n", strerror (errno));
      kill (zzuf_pid, SIGINT);
      waitpid (zzuf_pid, &status, 0);
      sleep (1);                /* allow socat to also die in peace */
    }
}

/* end of socat.c */

Added luasupport/HTTP/libmicrohttpd-0.9.0/stamp-h1.



>
1
timestamp for MHD_config.h

Added luasupport/HTTP/libmicrohttpd-FAT/Include/MHD_config.h.















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
/* MHD_config.h.  Generated from MHD_config.h.in by configure.  */
/* MHD_config.h.in.  Generated from configure.ac by autoheader.  */

#define _GNU_SOURCE  1

/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */

/* This is a Cygwin system */
/* #undef CYGWIN */

/* This is a FreeBSD system */
/* #undef FREEBSD */

/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1

/* Define to 1 if you have the declaration of `TCP_CORK', and to 0 if you
   don't. */
#define HAVE_DECL_TCP_CORK 0

/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1

/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#define HAVE_FSEEKO 1

/* We have gnutls */
#define HAVE_GNUTLS 0

/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
/* #undef HAVE_GNUTLS_GNUTLS_H */

/* Provides IPv6 headers */
#define HAVE_INET6 1

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if you have a functional curl library. */
#define HAVE_LIBCURL 1

/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1

/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1

/* Define to 1 if you have the <math.h> header file. */
#define HAVE_MATH_H 1

/* Define to 1 if you have the `memmem' function. */
/* #undef HAVE_MEMMEM */

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Include error messages */
/* #undef HAVE_MESSAGES */

/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1

/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1

/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1

/* Define to 1 if you have the <poll.h> header file. */
#define HAVE_POLL_H 1

/* Define to 1 if you have the <pthread.h> header file. */
#define HAVE_PTHREAD_H 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the <sys/mman.h> header file. */
#define HAVE_SYS_MMAN_H 1

/* Define to 1 if you have the <sys/msg.h> header file. */
#define HAVE_SYS_MSG_H 1

/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1

/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1

/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1

/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1

/* disable HTTPS support */
#define HTTPS_SUPPORT 0

/* Defined if libcurl supports AsynchDNS */
/* #undef LIBCURL_FEATURE_ASYNCHDNS */

/* Defined if libcurl supports IDN */
/* #undef LIBCURL_FEATURE_IDN */

/* Defined if libcurl supports IPv6 */
#define LIBCURL_FEATURE_IPV6 1

/* Defined if libcurl supports KRB4 */
/* #undef LIBCURL_FEATURE_KRB4 */

/* Defined if libcurl supports libz */
#define LIBCURL_FEATURE_LIBZ 1

/* Defined if libcurl supports NTLM */
#define LIBCURL_FEATURE_NTLM 1

/* Defined if libcurl supports SSL */
#define LIBCURL_FEATURE_SSL 1

/* Defined if libcurl supports SSPI */
/* #undef LIBCURL_FEATURE_SSPI */

/* Defined if libcurl supports DICT */
#define LIBCURL_PROTOCOL_DICT 1

/* Defined if libcurl supports FILE */
#define LIBCURL_PROTOCOL_FILE 1

/* Defined if libcurl supports FTP */
#define LIBCURL_PROTOCOL_FTP 1

/* Defined if libcurl supports FTPS */
#define LIBCURL_PROTOCOL_FTPS 1

/* Defined if libcurl supports HTTP */
#define LIBCURL_PROTOCOL_HTTP 1

/* Defined if libcurl supports HTTPS */
#define LIBCURL_PROTOCOL_HTTPS 1

/* Defined if libcurl supports LDAP */
#define LIBCURL_PROTOCOL_LDAP 1

/* Defined if libcurl supports TELNET */
#define LIBCURL_PROTOCOL_TELNET 1

/* Defined if libcurl supports TFTP */
#define LIBCURL_PROTOCOL_TFTP 1

/* This is a Linux system */
/* #undef LINUX */

/* Define to the sub-directory in which libtool stores uninstalled libraries.
   */
#define LT_OBJDIR ".libs/"

/* gcrypt lib version */
#define MHD_GCRYPT_VERSION "1:1.2.2"

/* gnuTLS lib version - used in conjunction with cURL */
#define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"

/* required cURL SSL version to run tests */
#define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"

/* required cURL version to run tests */
#define MHD_REQ_CURL_VERSION "7.16.4"

/* This is a MinGW system */
/* #undef MINGW */

/* This is a NetBSD system */
/* #undef NETBSD */

/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */

/* This is an OpenBSD system */
/* #undef OPENBSD */

/* This is a OS/390 system */
/* #undef OS390 */

/* This is an OS X system */
#define OSX 1

/* Some strange OS */
/* #undef OTHEROS */

/* Name of package */
#define PACKAGE "libmicrohttpd"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"

/* Define to the full name of this package. */
#define PACKAGE_NAME "libmicrohttpd"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "libmicrohttpd 0.9.0"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libmicrohttpd"

/* Define to the home page for this package. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.9.0"

/* This is a Solaris system */
/* #undef SOLARIS */

/* This is a BSD system */
/* #undef SOMEBSD */

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Version number of package */
#define VERSION "0.9.0"

/* This is a Windows system */
/* #undef WINDOWS */

/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
   significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
#  define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
/* #  undef WORDS_BIGENDIAN */
# endif
#endif

/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */

/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
/* #undef _LARGEFILE_SOURCE */

/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */

/* Need with solaris or errno doesnt work */
/* #undef _REENTRANT */

/* Define curl_free() as free() if our version of curl lacks curl_free. */
/* #undef curl_free */

Added luasupport/HTTP/libmicrohttpd-FAT/Include/internal.h.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
/*
  This file is part of libmicrohttpd
  (C) 2007, 2008, 2009, 2010 Daniel Pittman and Christian Grothoff
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file internal.h
 * @brief  internal shared structures
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#ifndef INTERNAL_H
#define INTERNAL_H

#include "platform.h"
#include "microhttpd.h"
#if HTTPS_SUPPORT
#include <gnutls/gnutls.h>
#endif

#define EXTRA_CHECKS MHD_YES

#define MHD_MAX(a,b) ((a)<(b)) ? (b) : (a)
#define MHD_MIN(a,b) ((a)<(b)) ? (a) : (b)

/**
 * Size by which MHD usually tries to increment read/write buffers.
 * TODO: we should probably get rid of this magic constant and
 * put in code to automatically determine a good value.
 */
#define MHD_BUF_INC_SIZE 2048

/**
 * Handler for fatal errors.
 */
extern MHD_PanicCallback mhd_panic;

/**
 * Closure argument for "mhd_panic".
 */
extern void *mhd_panic_cls;

/**
 * Events we care about with respect to poll/select
 * for file descriptors.
 */
enum MHD_PollActions
  {
    /**
     * No event interests us.
     */
    MHD_POLL_ACTION_NOTHING = 0,

    /**
     * We would like to read.
     */
    MHD_POLL_ACTION_IN = 1,

    /**
     * We would like to write.
     */ 
    MHD_POLL_ACTION_OUT = 2
  };


/**
 * Socket descriptor and events we care about.
 */
struct MHD_Pollfd {
  /**
   * Socket descriptor.
   */
  int fd;

  /**
   * Which events do we care about for this socket?
   */
  enum MHD_PollActions events;
};


#if HAVE_MESSAGES
/**
 * fprintf-like helper function for logging debug
 * messages.
 */
void MHD_DLOG (const struct MHD_Daemon *daemon, const char *format, ...);

#endif
void MHD_tls_log_func (int level, const char *str);

/**
 * Process escape sequences ('+'=space, %HH).
 * Updates val in place.
 *
 * @return length of the resulting val (strlen(val) maybe
 *  shorter afterwards due to elimination of escape sequences)
 */
size_t MHD_http_unescape (char *val);

/**
 * Header or cookie in HTTP request or response.
 */
struct MHD_HTTP_Header
{
  /**
   * Headers are kept in a linked list.
   */
  struct MHD_HTTP_Header *next;

  /**
   * The name of the header (key), without
   * the colon.
   */
  char *header;

  /**
   * The value of the header.
   */
  char *value;

  /**
   * Type of the header (where in the HTTP
   * protocol is this header from).
   */
  enum MHD_ValueKind kind;

};

/**
 * Representation of a response.
 */
struct MHD_Response
{

  /**
   * Headers to send for the response.  Initially
   * the linked list is created in inverse order;
   * the order should be inverted before sending!
   */
  struct MHD_HTTP_Header *first_header;

  /**
   * Buffer pointing to data that we are supposed
   * to send as a response.
   */
  char *data;

  /**
   * Closure to give to the content reader
   * free callback.
   */
  void *crc_cls;

  /**
   * How do we get more data?  NULL if we are
   * given all of the data up front.
   */
  MHD_ContentReaderCallback crc;

  /**
   * NULL if data must not be freed, otherwise
   * either user-specified callback or "&free".
   */
  MHD_ContentReaderFreeCallback crfc;

  /**
   * Mutex to synchronize access to data/size and
   * reference counts.
   */
  pthread_mutex_t mutex;

  /**
   * Set to MHD_SIZE_UNKNOWN if size is not known.
   */
  uint64_t total_size;

  /**
   * At what offset in the stream is the
   * beginning of data located?
   */
  uint64_t data_start;

  /**
   * Size of data.
   */
  size_t data_size;

  /**
   * Size of the data buffer.
   */
  size_t data_buffer_size;

  /**
   * Reference count for this response.  Free
   * once the counter hits zero.
   */
  unsigned int reference_count;

  /**
   * File-descriptor if this response is FD-backed.
   */
  int fd;

};

/**
 * States in a state machine for a connection.
 *
 * Transitions are any-state to CLOSED, any state to state+1,
 * FOOTERS_SENT to INIT.  CLOSED is the terminal state and
 * INIT the initial state.
 *
 * Note that transitions for *reading* happen only after
 * the input has been processed; transitions for
 * *writing* happen after the respective data has been
 * put into the write buffer (the write does not have
 * to be completed yet).  A transition to CLOSED or INIT
 * requires the write to be complete.
 */
enum MHD_CONNECTION_STATE
{
  /**
   * Connection just started (no headers received).
   * Waiting for the line with the request type, URL and version.
   */
  MHD_CONNECTION_INIT = 0,

  /**
   * 1: We got the URL (and request type and version).  Wait for a header line.
   */
  MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1,

  /**
   * 2: We got part of a multi-line request header.  Wait for the rest.
   */
  MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1,

  /**
   * 3: We got the request headers.  Process them.
   */
  MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,

  /**
   * 4: We have processed the request headers.  Send 100 continue.
   */
  MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1,

  /**
   * 5: We have processed the headers and need to send 100 CONTINUE.
   */
  MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1,

  /**
   * 6: We have sent 100 CONTINUE (or do not need to).  Read the message body.
   */
  MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1,

  /**
   * 7: We got the request body.  Wait for a line of the footer.
   */
  MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,

  /**
   * 8: We got part of a line of the footer.  Wait for the
   * rest.
   */
  MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1,

  /**
   * 9: We received the entire footer.  Wait for a response to be queued
   * and prepare the response headers.
   */
  MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1,

  /**
   * 10: We have prepared the response headers in the writ buffer.
   * Send the response headers.
   */
  MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1,

  /**
   * 11: We have sent the response headers.  Get ready to send the body.
   */
  MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,

  /**
   * 12: We are ready to send a part of a non-chunked body.  Send it.
   */
  MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1,

  /**
   * 13: We are waiting for the client to provide more
   * data of a non-chunked body.
   */
  MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1,

  /**
   * 14: We are ready to send a chunk.
   */
  MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1,

  /**
   * 15: We are waiting for the client to provide a chunk of the body.
   */
  MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,

  /**
   * 16: We have sent the response body. Prepare the footers.
   */
  MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1,

  /**
   * 17: We have prepared the response footer.  Send it.
   */
  MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1,

  /**
   * 18: We have sent the response footer.  Shutdown or restart.
   */
  MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1,

  /**
   * 19: This connection is closed (no more activity
   * allowed).
   */
  MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,

  /*
   *  SSL/TLS connection states
   */

  /**
   * The initial connection state for all secure connectoins
   * Handshake messages will be processed in this state & while
   * in the 'MHD_TLS_HELLO_REQUEST' state
   */
  MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_CLOSED + 1

};

/**
 * Should all state transitions be printed to stderr?
 */
#define DEBUG_STATES MHD_NO

#if HAVE_MESSAGES
char *MHD_state_to_string (enum MHD_CONNECTION_STATE state);
#endif

/**
 * Function to receive plaintext data.
 *
 * @param conn the connection struct
 * @param write_to where to write received data
 * @param max_bytes maximum number of bytes to receive
 * @return number of bytes written to write_to
 */
typedef ssize_t (*ReceiveCallback) (struct MHD_Connection * conn,
                                    void *write_to, size_t max_bytes);


/**
 * Function to transmit plaintext data.
 *
 * @param conn the connection struct
 * @param read_from where to read data to transmit
 * @param max_bytes maximum number of bytes to transmit
 * @return number of bytes transmitted
 */
typedef ssize_t (*TransmitCallback) (struct MHD_Connection * conn,
                                     const void *write_to, size_t max_bytes);


/**
 * State kept for each HTTP request.
 */
struct MHD_Connection
{

  /**
   * This is a linked list.
   */
  struct MHD_Connection *next;

  /**
   * Reference to the MHD_Daemon struct.
   */
  struct MHD_Daemon *daemon;

  /**
   * Linked list of parsed headers.
   */
  struct MHD_HTTP_Header *headers_received;

  /**
   * Response to transmit (initially NULL).
   */
  struct MHD_Response *response;

  /**
   * The memory pool is created whenever we first read
   * from the TCP stream and destroyed at the end of
   * each request (and re-created for the next request).
   * In the meantime, this pointer is NULL.  The
   * pool is used for all connection-related data
   * except for the response (which maybe shared between
   * connections) and the IP address (which persists
   * across individual requests).
   */
  struct MemoryPool *pool;

  /**
   * We allow the main application to associate some
   * pointer with the connection.  Here is where we
   * store it.  (MHD does not know or care what it
   * is).
   */
  void *client_context;

  /**
   * Request method.  Should be GET/POST/etc.  Allocated
   * in pool.
   */
  char *method;

  /**
   * Requested URL (everything after "GET" only).  Allocated
   * in pool.
   */
  char *url;

  /**
   * HTTP version string (i.e. http/1.1).  Allocated
   * in pool.
   */
  char *version;

  /**
   * Buffer for reading requests.   Allocated
   * in pool.  Actually one byte larger than
   * read_buffer_size (if non-NULL) to allow for
   * 0-termination.
   */
  char *read_buffer;

  /**
   * Buffer for writing response (headers only).  Allocated
   * in pool.
   */
  char *write_buffer;

  /**
   * Last incomplete header line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *last;

  /**
   * Position after the colon on the last incomplete header
   * line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *colon;

  /**
   * Foreign address (of length addr_len).  MALLOCED (not
   * in pool!).
   */
  struct sockaddr_in *addr;

  /**
   * Thread for this connection (if we are using
   * one thread per connection).
   */
  pthread_t pid;

  /**
   * Size of read_buffer (in bytes).  This value indicates
   * how many bytes we're willing to read into the buffer;
   * the real buffer is one byte longer to allow for
   * adding zero-termination (when needed).
   */
  size_t read_buffer_size;

  /**
   * Position where we currently append data in
   * read_buffer (last valid position).
   */
  size_t read_buffer_offset;

  /**
   * Size of write_buffer (in bytes).
   */
  size_t write_buffer_size;

  /**
   * Offset where we are with sending from write_buffer.
   */
  size_t write_buffer_send_offset;

  /**
   * Last valid location in write_buffer (where do we
   * append and up to where is it safe to send?)
   */
  size_t write_buffer_append_offset;

  /**
   * How many more bytes of the body do we expect
   * to read? "-1" for unknown.
   */
  uint64_t remaining_upload_size;

  /**
   * Current write position in the actual response
   * (excluding headers, content only; should be 0
   * while sending headers).
   */
  uint64_t response_write_position;

  /**
   * Position in the 100 CONTINUE message that
   * we need to send when receiving http 1.1 requests.
   */
  size_t continue_message_write_offset;

  /**
   * Length of the foreign address.
   */
  socklen_t addr_len;

  /**
   * Last time this connection had any activity
   * (reading or writing).
   */
  time_t last_activity;

  /**
   * Did we ever call the "default_handler" on this connection?
   * (this flag will determine if we call the 'notify_completed'
   * handler when the connection closes down).
   */
  int client_aware;

  /**
   * Socket for this connection.  Set to -1 if
   * this connection has died (daemon should clean
   * up in that case).
   */
  int socket_fd;

  /**
   * Has this socket been closed for reading (i.e.
   * other side closed the connection)?  If so,
   * we must completely close the connection once
   * we are done sending our response (and stop
   * trying to read from this socket).
   */
  int read_closed;

  /**
   * State in the FSM for this connection.
   */
  enum MHD_CONNECTION_STATE state;

  /**
   * HTTP response code.  Only valid if response object
   * is already set.
   */
  unsigned int responseCode;

  /**
   * Set to MHD_YES if the response's content reader
   * callback failed to provide data the last time
   * we tried to read from it.  In that case, the
   * write socket should be marked as unready until
   * the CRC call succeeds.
   */
  int response_unready;

  /**
   * Are we sending with chunked encoding?
   */
  int have_chunked_response;

  /**
   * Are we receiving with chunked encoding?  This will be set to
   * MHD_YES after we parse the headers and are processing the body
   * with chunks.  After we are done with the body and we are
   * processing the footers; once the footers are also done, this will
   * be set to MHD_NO again (before the final call to the handler).
   */
  int have_chunked_upload;

  /**
   * If we are receiving with chunked encoding, where are we right
   * now?  Set to 0 if we are waiting to receive the chunk size;
   * otherwise, this is the size of the current chunk.  A value of
   * zero is also used when we're at the end of the chunks.
   */
  unsigned int current_chunk_size;

  /**
   * If we are receiving with chunked encoding, where are we currently
   * with respect to the current chunk (at what offset / position)?
   */
  unsigned int current_chunk_offset;

  /**
   * Handler used for processing read connection operations
   */
  int (*read_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing write connection operations
   */
  int (*write_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing idle connection operations
   */
  int (*idle_handler) (struct MHD_Connection * connection);

  /**
   * Function used for reading HTTP request stream.
   */
  ReceiveCallback recv_cls;

  /**
   * Function used for writing HTTP response stream.
   */
  TransmitCallback send_cls;

#if HTTPS_SUPPORT
  /**
   * State required for HTTPS/SSL/TLS support.
   */
  gnutls_session_t tls_session;

  /**
   * Memory location to return for protocol session info.
   */
  int protocol;

  /**
   * Memory location to return for protocol session info.
   */
  int cipher;
#endif
};

typedef void * (*LogCallback)(void * cls, const char * uri);

/**
 * State kept for each MHD daemon.
 */
struct MHD_Daemon
{

  /**
   * Callback function for all requests.
   */
  MHD_AccessHandlerCallback default_handler;

  /**
   * Closure argument to default_handler.
   */
  void *default_handler_cls;

  /**
   * Linked list of our current connections.
   */
  struct MHD_Connection *connections;

  /**
   * Function to call to check if we should
   * accept or reject an incoming request.
   * May be NULL.
   */
  MHD_AcceptPolicyCallback apc;

  /**
   * Closure argument to apc.
   */
  void *apc_cls;

  /**
   * Function to call when we are done processing
   * a particular request.  May be NULL.
   */
  MHD_RequestCompletedCallback notify_completed;

  /**
   * Closure argument to notify_completed.
   */
  void *notify_completed_cls;

  /**
   * Function to call with the full URI at the
   * beginning of request processing.  May be NULL.
   * <p>
   * Returns the initial pointer to internal state
   * kept by the client for the request.
   */
  LogCallback uri_log_callback;

  /**
   * Closure argument to uri_log_callback.
   */
  void *uri_log_callback_cls;

#if HAVE_MESSAGES
  /**
   * Function for logging error messages (if we
   * support error reporting).
   */
  void (*custom_error_log) (void *cls, const char *fmt, va_list va);

  /**
   * Closure argument to custom_error_log.
   */
  void *custom_error_log_cls;
#endif

  /**
   * PID of the select thread (if we have internal select)
   */
  pthread_t pid;

  /**
   * Listen socket.
   */
  int socket_fd;

  /**
   * Are we shutting down?
   */
  int shutdown;

  /**
   * Size of the per-connection memory pools.
   */
  size_t pool_size;

  /**
   * Limit on the number of parallel connections.
   */
  unsigned int max_connections;

  /**
   * After how many seconds of inactivity should
   * connections time out?  Zero for no timeout.
   */
  unsigned int connection_timeout;

  /**
   * Maximum number of connections per IP, or 0 for
   * unlimited.
   */
  unsigned int per_ip_connection_limit;

  /**
   * Table storing number of connections per IP
   */
  void *per_ip_connection_count;

  /**
   * Mutex for per-IP connection counts
   */
  pthread_mutex_t per_ip_connection_mutex;

  /**
   * Daemon's options.
   */
  enum MHD_OPTION options;

  /**
   * Listen port.
   */
  unsigned short port;

#if HTTPS_SUPPORT
  /**
   * Desired cipher algorithms.
   */
  gnutls_priority_t priority_cache;

  /**
   * What kind of credentials are we offering
   * for SSL/TLS?
   */
  gnutls_credentials_type_t cred_type;

  /**
   * Server x509 credentials
   */
  gnutls_certificate_credentials_t x509_cred;

  /**
   * Diffie-Hellman parameters
   */
  gnutls_dh_params_t dh_params;

  /**
   * Pointer to our SSL/TLS key (in ASCII) in memory.
   */
  const char *https_mem_key;

  /**
   * Pointer to our SSL/TLS certificate (in ASCII) in memory.
   */
  const char *https_mem_cert;

#endif

  /**
   * Pointer to master daemon (NULL if this is the master)
   */
  struct MHD_Daemon *master;

  /**
   * Worker daemons (one per thread)
   */
  struct MHD_Daemon *worker_pool;

  /**
   * Number of worker daemons
   */
  unsigned int worker_pool_size;
};


#if EXTRA_CHECKS
#define EXTRA_CHECK(a) if (!(a)) abort();
#else
#define EXTRA_CHECK(a)
#endif



#endif

Added luasupport/HTTP/libmicrohttpd-FAT/Include/microhttpd.h.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
/*
     This file is part of libmicrohttpd
     (C) 2006, 2007, 2008, 2009, 2010 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file microhttpd.h
 * @brief public interface to libmicrohttpd
 * @author Christian Grothoff
 * @author Chris GauthierDickey
 *
 * All symbols defined in this header start with MHD.  MHD is a small
 * HTTP daemon library.  As such, it does not have any API for logging
 * errors (you can only enable or disable logging to stderr).  Also,
 * it may not support all of the HTTP features directly, where
 * applicable, portions of HTTP may have to be handled by clients of
 * the library.<p>
 *
 * The library is supposed to handle everything that it must handle
 * (because the API would not allow clients to do this), such as basic
 * connection management; however, detailed interpretations of headers
 * -- such as range requests -- and HTTP methods are left to clients.
 * The library does understand HEAD and will only send the headers of
 * the response and not the body, even if the client supplied a body.
 * The library also understands headers that control connection
 * management (specifically, "Connection: close" and "Expect: 100
 * continue" are understood and handled automatically).<p>
 *
 * MHD understands POST data and is able to decode certain formats
 * (at the moment only "application/x-www-form-urlencoded" and
 * "mulitpart/formdata"). Unsupported encodings and large POST 
 * submissions may require the application to manually process
 * the stream, which is provided to the main application (and thus can be
 * processed, just not conveniently by MHD).<p>
 *
 * The header file defines various constants used by the HTTP protocol.
 * This does not mean that MHD actually interprets all of these
 * values.  The provided constants are exported as a convenience
 * for users of the library.  MHD does not verify that transmitted
 * HTTP headers are part of the standard specification; users of the
 * library are free to define their own extensions of the HTTP
 * standard and use those with MHD.<p>
 *
 * All functions are guaranteed to be completely reentrant and
 * thread-safe (with the exception of 'MHD_set_connection_value',
 * which must only be used in a particular context).<p>
 *
 * NEW: Before including "microhttpd.h" you should add the necessary
 * includes to define the "uint64_t", "size_t", "fd_set", "socklen_t"
 * and "struct sockaddr" data types (which headers are needed may
 * depend on your platform; for possible suggestions consult
 * "platform.h" in the MHD distribution).
 *
 */

#ifndef MHD_MICROHTTPD_H
#define MHD_MICROHTTPD_H

#ifdef __cplusplus
extern "C"
{
#if 0                           /* keep Emacsens' auto-indent happy */
}
#endif
#endif

/**
 * Current version of the library.
 */
#define MHD_VERSION 0x00090000

/**
 * MHD-internal return code for "YES".
 */
#define MHD_YES 1

/**
 * MHD-internal return code for "NO".
 */
#define MHD_NO 0

/**
 * Constant used to indicate unknown size (use when
 * creating a response).
 */
#ifdef UINT64_MAX
#define MHD_SIZE_UNKNOWN UINT64_MAX
#else
#define MHD_SIZE_UNKNOWN  ((uint64_t) -1LL)
#endif

/**
 * HTTP response codes.
 */
#define MHD_HTTP_CONTINUE 100
#define MHD_HTTP_SWITCHING_PROTOCOLS 101
#define MHD_HTTP_PROCESSING 102

#define MHD_HTTP_OK 200
#define MHD_HTTP_CREATED 201
#define MHD_HTTP_ACCEPTED 202
#define MHD_HTTP_NON_AUTHORITATIVE_INFORMATION 203
#define MHD_HTTP_NO_CONTENT 204
#define MHD_HTTP_RESET_CONTENT 205
#define MHD_HTTP_PARTIAL_CONTENT 206
#define MHD_HTTP_MULTI_STATUS 207

#define MHD_HTTP_MULTIPLE_CHOICES 300
#define MHD_HTTP_MOVED_PERMANENTLY 301
#define MHD_HTTP_FOUND 302
#define MHD_HTTP_SEE_OTHER 303
#define MHD_HTTP_NOT_MODIFIED 304
#define MHD_HTTP_USE_PROXY 305
#define MHD_HTTP_SWITCH_PROXY 306
#define MHD_HTTP_TEMPORARY_REDIRECT 307

#define MHD_HTTP_BAD_REQUEST 400
#define MHD_HTTP_UNAUTHORIZED 401
#define MHD_HTTP_PAYMENT_REQUIRED 402
#define MHD_HTTP_FORBIDDEN 403
#define MHD_HTTP_NOT_FOUND 404
#define MHD_HTTP_METHOD_NOT_ALLOWED 405
#define MHD_HTTP_METHOD_NOT_ACCEPTABLE 406
#define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407
#define MHD_HTTP_REQUEST_TIMEOUT 408
#define MHD_HTTP_CONFLICT 409
#define MHD_HTTP_GONE 410
#define MHD_HTTP_LENGTH_REQUIRED 411
#define MHD_HTTP_PRECONDITION_FAILED 412
#define MHD_HTTP_REQUEST_ENTITY_TOO_LARGE 413
#define MHD_HTTP_REQUEST_URI_TOO_LONG 414
#define MHD_HTTP_UNSUPPORTED_MEDIA_TYPE 415
#define MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE 416
#define MHD_HTTP_EXPECTATION_FAILED 417
#define MHD_HTTP_UNPROCESSABLE_ENTITY 422
#define MHD_HTTP_LOCKED 423
#define MHD_HTTP_FAILED_DEPENDENCY 424
#define MHD_HTTP_UNORDERED_COLLECTION 425
#define MHD_HTTP_UPGRADE_REQUIRED 426
#define MHD_HTTP_RETRY_WITH 449

#define MHD_HTTP_INTERNAL_SERVER_ERROR 500
#define MHD_HTTP_NOT_IMPLEMENTED 501
#define MHD_HTTP_BAD_GATEWAY 502
#define MHD_HTTP_SERVICE_UNAVAILABLE 503
#define MHD_HTTP_GATEWAY_TIMEOUT 504
#define MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED 505
#define MHD_HTTP_VARIANT_ALSO_NEGOTIATES 506
#define MHD_HTTP_INSUFFICIENT_STORAGE 507
#define MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED 509
#define MHD_HTTP_NOT_EXTENDED 510

/* See also: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html */
#define MHD_HTTP_HEADER_ACCEPT "Accept"
#define MHD_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset"
#define MHD_HTTP_HEADER_ACCEPT_ENCODING "Accept-Encoding"
#define MHD_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language"
#define MHD_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges"
#define MHD_HTTP_HEADER_AGE "Age"
#define MHD_HTTP_HEADER_ALLOW "Allow"
#define MHD_HTTP_HEADER_AUTHORIZATION "Authorization"
#define MHD_HTTP_HEADER_CACHE_CONTROL "Cache-Control"
#define MHD_HTTP_HEADER_CONNECTION "Connection"
#define MHD_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
#define MHD_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language"
#define MHD_HTTP_HEADER_CONTENT_LENGTH "Content-Length"
#define MHD_HTTP_HEADER_CONTENT_LOCATION "Content-Location"
#define MHD_HTTP_HEADER_CONTENT_MD5 "Content-MD5"
#define MHD_HTTP_HEADER_CONTENT_RANGE "Content-Range"
#define MHD_HTTP_HEADER_CONTENT_TYPE "Content-Type"
#define MHD_HTTP_HEADER_COOKIE "Cookie"
#define MHD_HTTP_HEADER_DATE "Date"
#define MHD_HTTP_HEADER_ETAG "ETag"
#define MHD_HTTP_HEADER_EXPECT "Expect"
#define MHD_HTTP_HEADER_EXPIRES "Expires"
#define MHD_HTTP_HEADER_FROM "From"
#define MHD_HTTP_HEADER_HOST "Host"
#define MHD_HTTP_HEADER_IF_MATCH "If-Match"
#define MHD_HTTP_HEADER_IF_MODIFIED_SINCE "If-Modified-Since"
#define MHD_HTTP_HEADER_IF_NONE_MATCH "If-None-Match"
#define MHD_HTTP_HEADER_IF_RANGE "If-Range"
#define MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE "If-Unmodified-Since"
#define MHD_HTTP_HEADER_LAST_MODIFIED "Last-Modified"
#define MHD_HTTP_HEADER_LOCATION "Location"
#define MHD_HTTP_HEADER_MAX_FORWARDS "Max-Forwards"
#define MHD_HTTP_HEADER_PRAGMA "Pragma"
#define MHD_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate"
#define MHD_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization"
#define MHD_HTTP_HEADER_RANGE "Range"
#define MHD_HTTP_HEADER_REFERER "Referer"
#define MHD_HTTP_HEADER_RETRY_AFTER "Retry-After"
#define MHD_HTTP_HEADER_SERVER "Server"
#define MHD_HTTP_HEADER_SET_COOKIE "Set-Cookie"
#define MHD_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2"
#define MHD_HTTP_HEADER_TE "TE"
#define MHD_HTTP_HEADER_TRAILER "Trailer"
#define MHD_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding"
#define MHD_HTTP_HEADER_UPGRADE "Upgrade"
#define MHD_HTTP_HEADER_USER_AGENT "User-Agent"
#define MHD_HTTP_HEADER_VARY "Vary"
#define MHD_HTTP_HEADER_VIA "Via"
#define MHD_HTTP_HEADER_WARNING "Warning"
#define MHD_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate"

/**
 * HTTP versions (used to match against the first line of the
 * HTTP header as well as in the response code).
 */
#define MHD_HTTP_VERSION_1_0 "HTTP/1.0"
#define MHD_HTTP_VERSION_1_1 "HTTP/1.1"

/**
 * HTTP methods
 */
#define MHD_HTTP_METHOD_CONNECT "CONNECT"
#define MHD_HTTP_METHOD_DELETE "DELETE"
#define MHD_HTTP_METHOD_GET "GET"
#define MHD_HTTP_METHOD_HEAD "HEAD"
#define MHD_HTTP_METHOD_OPTIONS "OPTIONS"
#define MHD_HTTP_METHOD_POST "POST"
#define MHD_HTTP_METHOD_PUT "PUT"
#define MHD_HTTP_METHOD_TRACE "TRACE"

/**
 * HTTP POST encodings, see also
 * http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4
 */
#define MHD_HTTP_POST_ENCODING_FORM_URLENCODED "application/x-www-form-urlencoded"
#define MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA "multipart/form-data"

/**
 * Options for the MHD daemon.  Note that if neither
 * MHD_USER_THREAD_PER_CONNECTION nor MHD_USE_SELECT_INTERNALLY are
 * used, the client wants control over the process and will call the
 * appropriate microhttpd callbacks.<p>
 *
 * Starting the daemon may also fail if a particular option is not
 * implemented or not supported on the target platform (i.e. no
 * support for SSL, threads or IPv6).
 */
enum MHD_FLAG
{
  /**
   * No options selected.
   */
  MHD_NO_FLAG = 0,

  /**
   * Run in debug mode.  If this flag is used, the
   * library should print error messages and warnings
   * to stderr.
   */
  MHD_USE_DEBUG = 1,

  /**
   * Run in https mode.
   */
  MHD_USE_SSL = 2,

  /**
   * Run using one thread per connection.
   */
  MHD_USE_THREAD_PER_CONNECTION = 4,

  /**
   * Run using an internal thread doing SELECT.
   */
  MHD_USE_SELECT_INTERNALLY = 8,

  /**
   * Run using the IPv6 protocol (otherwise, MHD will
   * just support IPv4).
   */
  MHD_USE_IPv6 = 16,

  /**
   * Be pedantic about the protocol (as opposed to as tolerant as
   * possible).  Specifically, at the moment, this flag causes MHD to
   * reject http 1.1 connections without a "Host" header.  This is
   * required by the standard, but of course in violation of the "be
   * as liberal as possible in what you accept" norm.  It is
   * recommended to turn this ON if you are testing clients against
   * MHD, and OFF in production.
   */
  MHD_USE_PEDANTIC_CHECKS = 32,

  /**
   * Use poll instead of select. This allows sockets with fd >= FD_SETSIZE.
   * This option only works in conjunction with MHD_USE_THREAD_PER_CONNECTION
   * (at this point).
   */
  MHD_USE_POLL = 64
};

/**
 * MHD options.  Passed in the varargs portion
 * of MHD_start_daemon.
 */
enum MHD_OPTION
{

  /**
   * No more options / last option.  This is used
   * to terminate the VARARGs list.
   */
  MHD_OPTION_END = 0,

  /**
   * Maximum memory size per connection (followed by a
   * size_t).
   */
  MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1,

  /**
   * Maximum number of concurrent connections to
   * accept (followed by an unsigned int).
   */
  MHD_OPTION_CONNECTION_LIMIT = 2,

  /**
   * After how many seconds of inactivity should a
   * connection automatically be timed out? (followed
   * by an unsigned int; use zero for no timeout).
   */
  MHD_OPTION_CONNECTION_TIMEOUT = 3,

  /**
   * Register a function that should be called whenever a request has
   * been completed (this can be used for application-specific clean
   * up).  Requests that have never been presented to the application
   * (via MHD_AccessHandlerCallback) will not result in
   * notifications.<p>
   *
   * This option should be followed by TWO pointers.  First a pointer
   * to a function of type "MHD_RequestCompletedCallback" and second a
   * pointer to a closure to pass to the request completed callback.
   * The second pointer maybe NULL.
   */
  MHD_OPTION_NOTIFY_COMPLETED = 4,

  /**
   * Limit on the number of (concurrent) connections made to the
   * server from the same IP address.  Can be used to prevent one
   * IP from taking over all of the allowed connections.  If the
   * same IP tries to establish more than the specified number of
   * connections, they will be immediately rejected.  The option
   * should be followed by an "unsigned int".  The default is
   * zero, which means no limit on the number of connections
   * from the same IP address.
   */
  MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5,

  /**
   * Bind daemon to the supplied sockaddr. this option should be followed by a
   * 'struct sockaddr *'.  If 'MHD_USE_IPv6' is specified, the 'struct sockaddr*'
   * should point to a 'struct sockaddr_in6', otherwise to a 'struct sockaddr_in'.
   */
  MHD_OPTION_SOCK_ADDR = 6,

  /**
   * Specify a function that should be called before parsing the URI from
   * the client.  The specified callback function can be used for processing
   * the URI (including the options) before it is parsed.  The URI after
   * parsing will no longer contain the options, which maybe inconvenient for
   * logging.  This option should be followed by two arguments, the first
   * one must be of the form
   * <pre>
   *  void * my_logger(void * cls, const char * uri)
   * </pre>
   * where the return value will be passed as
   * (*con_cls) in calls to the MHD_AccessHandlerCallback
   * when this request is processed later; returning a
   * value of NULL has no special significance (however,
   * note that if you return non-NULL, you can no longer
   * rely on the first call to the access handler having
   * NULL == *con_cls on entry;)
   * "cls" will be set to the second argument following
   * MHD_OPTION_URI_LOG_CALLBACK.  Finally, uri will
   * be the 0-terminated URI of the request.
   */
  MHD_OPTION_URI_LOG_CALLBACK = 7,

  /**
   * Memory pointer for the private key (key.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
   */
  MHD_OPTION_HTTPS_MEM_KEY = 8,

  /**
   * Memory pointer for the certificate (cert.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
   */
  MHD_OPTION_HTTPS_MEM_CERT = 9,

  /**
   * Daemon credentials type.
   * Followed by an argument of type
   * "gnutls_credentials_type_t".
   */
  MHD_OPTION_HTTPS_CRED_TYPE = 10,

  /**
   * Memory pointer to a "const char*" specifying the
   * cipher algorithm (default: "NORMAL").
   */
  MHD_OPTION_HTTPS_PRIORITIES = 11,

  /**
   * Pass a listen socket for MHD to use (systemd-style).  If this
   * option is used, MHD will not open its own listen socket(s). The
   * argument passed must be of type "int" and refer to an
   * existing socket that has been bound to a port and is listening.
   */
  MHD_OPTION_LISTEN_SOCKET = 12,

  /**
   * Use the given function for logging error messages.
   * This option must be followed by two arguments; the
   * first must be a pointer to a function
   * of type "void fun(void * arg, const char * fmt, va_list ap)"
   * and the second a pointer "void*" which will
   * be passed as the "arg" argument to "fun".
   * <p>
   * Note that MHD will not generate any log messages
   * if it was compiled without the "--enable-messages"
   * flag being set.
   */
  MHD_OPTION_EXTERNAL_LOGGER = 13,

  /**
   * Number (unsigned int) of threads in thread pool. Enable
   * thread pooling by setting this value to to something
   * greater than 1. Currently, thread model must be
   * MHD_USE_SELECT_INTERNALLY if thread pooling is enabled
   * (MHD_start_daemon returns NULL for an unsupported thread
   * model).
   */
  MHD_OPTION_THREAD_POOL_SIZE = 14,

  /**
   * Additional options given in an array of "struct MHD_OptionItem".
   * The array must be terminated with an entry '{MHD_OPTION_END, 0, NULL}'.
   * An example for code using MHD_OPTION_ARRAY is:
   * <code>
   * struct MHD_OptionItem ops[] = {
   * { MHD_OPTION_CONNECTION_LIMIT, 100, NULL },
   * { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL },
   * { MHD_OPTION_END, 0, NULL }
   * };
   * d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL,
   *                      MHD_OPTION_ARRAY, ops,
   *                      MHD_OPTION_END);
   * </code>
   * For options that expect a single pointer argument, the
   * second member of the struct MHD_OptionItem is ignored.
   * For options that expect two pointer arguments, the first
   * argument must be cast to 'intptr_t'.
   */
  MHD_OPTION_ARRAY = 15
};


/**
 * Entry in an MHD_OPTION_ARRAY.
 */
struct MHD_OptionItem
{
  /**
   * Which option is being given.  Use MHD_OPTION_END
   * to terminate the array.
   */
  enum MHD_OPTION option;

  /**
   * Option value (for integer arguments, and for options requiring
   * two pointer arguments); should be 0 for options that take no
   * arguments or only a single pointer argument.
   */
  intptr_t value;

  /**
   * Pointer option value (use NULL for options taking no arguments
   * or only an integer option).
   */
  void *ptr_value;

};


/**
 * The MHD_ValueKind specifies the source of
 * the key-value pairs in the HTTP protocol.
 */
enum MHD_ValueKind
{

  /**
   * Response header
   */
  MHD_RESPONSE_HEADER_KIND = 0,

  /**
   * HTTP header.
   */
  MHD_HEADER_KIND = 1,

  /**
   * Cookies.  Note that the original HTTP header containing
   * the cookie(s) will still be available and intact.
   */
  MHD_COOKIE_KIND = 2,

  /**
   * POST data.  This is available only if a content encoding
   * supported by MHD is used (currently only URL encoding),
   * and only if the posted content fits within the available
   * memory pool.  Note that in that case, the upload data
   * given to the MHD_AccessHandlerCallback will be
   * empty (since it has already been processed).
   */
  MHD_POSTDATA_KIND = 4,

  /**
   * GET (URI) arguments.
   */
  MHD_GET_ARGUMENT_KIND = 8,

  /**
   * HTTP footer (only for http 1.1 chunked encodings).
   */
  MHD_FOOTER_KIND = 16
};

/**
 * The MHD_RequestTerminationCode specifies reasons
 * why a request has been terminated (or completed).
 */
enum MHD_RequestTerminationCode
{

  /**
   * We finished sending the response.
   */
  MHD_REQUEST_TERMINATED_COMPLETED_OK = 0,

  /**
   * Error handling the connection (resources
   * exhausted, other side closed connection,
   * application error accepting request, etc.)
   */
  MHD_REQUEST_TERMINATED_WITH_ERROR = 1,

  /**
   * No activity on the connection for the number
   * of seconds specified using
   * MHD_OPTION_CONNECTION_TIMEOUT.
   */
  MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2,

  /**
   * We had to close the session since MHD was being
   * shut down.
   */
  MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3

};


/**
 * Values of this enum are used to specify what
 * information about a connection is desired.
 */
enum MHD_ConnectionInfoType
{
  /**
   * What cipher algorithm is being used.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CIPHER_ALGO,

  /**
   *
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_PROTOCOL,

  /**
   * Obtain IP address of the client.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CLIENT_ADDRESS,

  /**
   * Get the GNUTLS session handle.
   */
  MHD_CONNECTION_INFO_GNUTLS_SESSION
};

/**
 * Values of this enum are used to specify what
 * information about a deamon is desired.
 */
enum MHD_DaemonInfoType
{
  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_CipherAlgorithm').
   */
  MHD_DAEMON_INFO_KEY_SIZE,

  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_HashAlgorithm').
   */
  MHD_DAEMON_INFO_MAC_KEY_SIZE,

  /**
   * Request the file descriptor for the listening socket.
   * No extra arguments should be passed.
   */
  MHD_DAEMON_INFO_LISTEN_FD
};



/**
 * Handle for the daemon (listening on a socket for HTTP traffic).
 */
struct MHD_Daemon;

/**
 * Handle for a connection / HTTP request.  With HTTP/1.1, multiple
 * requests can be run over the same connection.  However, MHD will
 * only show one request per TCP connection to the client at any given
 * time.
 */
struct MHD_Connection;

/**
 * Handle for a response.
 */
struct MHD_Response;

/**
 * Handle for POST processing.
 */
struct MHD_PostProcessor;

/**
 * Callback for serious error condition. The default action is to abort().
 * @param cls user specified value
 * @param file where the error occured
 * @param line where the error occured
 * @param reason error detail, may be NULL
 */
typedef void (*MHD_PanicCallback) (void *cls,
                                   const char *file,
                                   unsigned int line,
                                   const char *reason);

/**
 * Allow or deny a client to connect.
 *
 * @param addr address information from the client
 * @param addrlen length of the address information
 * @return MHD_YES if connection is allowed, MHD_NO if not
 */
typedef int
  (*MHD_AcceptPolicyCallback) (void *cls,
                               const struct sockaddr * addr,
                               socklen_t addrlen);

/**
 * A client has requested the given url using the given method ("GET",
 * "PUT", "DELETE", "POST", etc).  The callback must call MHS
 * callbacks to provide content to give back to the client and return
 * an HTTP status code (i.e. 200 for OK, 404, etc.).
 *
 * @param cls argument given together with the function
 *        pointer when the handler was registered with MHD
 * @param url the requested url
 * @param method the HTTP method used ("GET", "PUT", etc.)
 * @param version the HTTP version string (i.e. "HTTP/1.1")
 * @param upload_data the data being uploaded (excluding HEADERS,
 *        for a POST that fits into memory and that is encoded
 *        with a supported encoding, the POST data will NOT be
 *        given in upload_data and is instead available as
 *        part of MHD_get_connection_values; very large POST
 *        data *will* be made available incrementally in
 *        upload_data)
 * @param upload_data_size set initially to the size of the
 *        upload_data provided; the method must update this
 *        value to the number of bytes NOT processed;
 * @param con_cls pointer that the callback can set to some
 *        address and that will be preserved by MHD for future
 *        calls for this request; since the access handler may
 *        be called many times (i.e., for a PUT/POST operation
 *        with plenty of upload data) this allows the application
 *        to easily associate some request-specific state.
 *        If necessary, this state can be cleaned up in the
 *        global "MHD_RequestCompleted" callback (which
 *        can be set with the MHD_OPTION_NOTIFY_COMPLETED).
 *        Initially, <tt>*con_cls</tt> will be NULL.
 * @return MHS_YES if the connection was handled successfully,
 *         MHS_NO if the socket must be closed due to a serios
 *         error while handling the request
 */
typedef int
  (*MHD_AccessHandlerCallback) (void *cls,
                                struct MHD_Connection * connection,
                                const char *url,
                                const char *method,
                                const char *version,
                                const char *upload_data,
                                size_t *upload_data_size,
                                void **con_cls);

/**
 * Signature of the callback used by MHD to notify the
 * application about completed requests.
 *
 * @param cls client-defined closure
 * @param connection connection handle
 * @param con_cls value as set by the last call to
 *        the MHD_AccessHandlerCallback
 * @param toe reason for request termination
 * @see MHD_OPTION_NOTIFY_COMPLETED
 */
typedef void
  (*MHD_RequestCompletedCallback) (void *cls,
                                   struct MHD_Connection * connection,
                                   void **con_cls,
                                   enum MHD_RequestTerminationCode toe);

/**
 * Iterator over key-value pairs.  This iterator
 * can be used to iterate over all of the cookies,
 * headers, or POST-data fields of a request, and
 * also to iterate over the headers that have been
 * added to a response.
 *
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_KeyValueIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key, const char *value);

/**
 * Callback used by libmicrohttpd in order to obtain content.  The
 * callback is to copy at most "max" bytes of content into "buf".  The
 * total number of bytes that has been placed into "buf" should be
 * returned.<p>
 *
 * Note that returning zero will cause libmicrohttpd to try again,
 * either "immediately" if in multi-threaded mode (in which case the
 * callback may want to do blocking operations) or in the next round
 * if MHD_run is used.  Returning 0 for a daemon that runs in internal
 * select mode is an error (since it would result in busy waiting) and
 * will cause the program to be aborted (abort()).
 *
 * @param cls extra argument to the callback
 * @param pos position in the datastream to access;
 *        note that if an MHD_Response object is re-used,
 *        it is possible for the same content reader to
 *        be queried multiple times for the same data;
 *        however, if an MHD_Response is not re-used,
 *        libmicrohttpd guarantees that "pos" will be
 *        the sum of all non-negative return values
 *        obtained from the content reader so far.
 * @return -1 for the end of transmission (or on error);
 *  if a content transfer size was pre-set and the callback
 *  has provided fewer than that amount of data,
 *  MHD will close the connection with the client;
 *  if no content size was specified and this is an
 *  http 1.1 connection using chunked encoding, MHD will
 *  interpret "-1" as the normal end of the transfer
 *  (possibly allowing the client to perform additional
 *  requests using the same TCP connection).
 */
typedef int
  (*MHD_ContentReaderCallback) (void *cls,
				uint64_t pos,
				char *buf,
				int max);

/**
 * This method is called by libmicrohttpd if we
 * are done with a content reader.  It should
 * be used to free resources associated with the
 * content reader.
 */
typedef void (*MHD_ContentReaderFreeCallback) (void *cls);

/**
 * Iterator over key-value pairs where the value
 * maybe made available in increments and/or may
 * not be zero-terminated.  Used for processing
 * POST data.
 *
 * @param cls user-specified closure
 * @param kind type of the value
 * @param key 0-terminated key for the value
 * @param filename name of the uploaded file, NULL if not known
 * @param content_type mime-type of the data, NULL if not known
 * @param transfer_encoding encoding of the data, NULL if not known
 * @param data pointer to size bytes of data at the
 *              specified offset
 * @param off offset of data in the overall value
 * @param size number of bytes in data available
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_PostDataIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key,
                           const char *filename,
                           const char *content_type,
                           const char *transfer_encoding,
                           const char *data, uint64_t off, size_t size);

/* **************** Daemon handling functions ***************** */

/**
 * Start a webserver on the given port.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @param ... list of options (type-value pairs,
 *        terminated with MHD_OPTION_END).
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon_va (unsigned int options,
                                        unsigned short port,
                                        MHD_AcceptPolicyCallback apc,
                                        void *apc_cls,
                                        MHD_AccessHandlerCallback dh,
                                        void *dh_cls, va_list ap);

/**
 * Start a webserver on the given port.  Variadic version of
 * MHD_start_daemon_va.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon (unsigned int flags,
                                     unsigned short port,
                                     MHD_AcceptPolicyCallback apc,
                                     void *apc_cls,
                                     MHD_AccessHandlerCallback dh,
                                     void *dh_cls, ...);

/**
 * Shutdown an http daemon.
 *
 * @param daemon daemon to stop
 */
void MHD_stop_daemon (struct MHD_Daemon *daemon);


/**
 * Obtain the select sets for this daemon.
 *
 * @param daemon daemon to get sets from
 * @param read_fd_set read set
 * @param write_fd_set write set
 * @param except_fd_set except set
 * @param max_fd increased to largest FD added (if larger
 *               than existing value); can be NULL
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int
MHD_get_fdset (struct MHD_Daemon *daemon,
               fd_set * read_fd_set,
               fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd);

/**
 * Obtain timeout value for select for this daemon
 * (only needed if connection timeout is used).  The
 * returned value is how long select should at most
 * block, not the timeout value set for connections.
 *
 * @param daemon daemon to query for timeout
 * @param timeout set to the timeout (in milliseconds)
 * @return MHD_YES on success, MHD_NO if timeouts are
 *        not used (or no connections exist that would
 *        necessiate the use of a timeout right now).
 */
int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout);


/**
 * Run webserver operations (without blocking unless
 * in client callbacks).  This method should be called
 * by clients in combination with MHD_get_fdset
 * if the client-controlled select method is used.
 *
 * @param daemon daemon to run
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int MHD_run (struct MHD_Daemon *daemon);


/* **************** Connection handling functions ***************** */

/**
 * Get all of the headers from the request.
 *
 * @param connection connection to get values from
 * @param kind types of values to iterate over
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_connection_values (struct MHD_Connection *connection,
                           enum MHD_ValueKind kind,
                           MHD_KeyValueIterator iterator, void *iterator_cls);

/**
 * This function can be used to add an entry to
 * the HTTP headers of a connection (so that the
 * MHD_get_connection_values function will return
 * them -- and the MHD PostProcessor will also
 * see them).  This maybe required in certain
 * situations (see Mantis #1399) where (broken)
 * HTTP implementations fail to supply values needed
 * by the post processor (or other parts of the
 * application).
 * <p>
 * This function MUST only be called from within
 * the MHD_AccessHandlerCallback (otherwise, access
 * maybe improperly synchronized).  Furthermore,
 * the client must guarantee that the key and
 * value arguments are 0-terminated strings that
 * are NOT freed until the connection is closed.
 * (The easiest way to do this is by passing only
 * arguments to permanently allocated strings.).
 *
 * @param connection the connection for which a
 *  value should be set
 * @param kind kind of the value
 * @param key key for the value
 * @param value the value itself
 * @return MHD_NO if the operation could not be
 *         performed due to insufficient memory;
 *         MHD_YES on success
 */
int
MHD_set_connection_value (struct MHD_Connection *connection,
                          enum MHD_ValueKind kind,
                          const char *key, const char *value);

/**
 * Sets the global error handler to a different implementation.  "cb"
 * will only be called in the case of typically fatal, serious
 * internal consistency issues.  These issues should only arise in the
 * case of serious memory corruption or similar problems with the
 * architecture.  While "cb" is allowed to return and MHD will then
 * try to continue, this is never safe.
 *
 * The default implementation that is used if no panic function is set
 * simply calls "abort".  Alternative implementations might call
 * "exit" or other similar functions.
 *
 * @param cb new error handler
 * @param cls passed to error handler
 */
void MHD_set_panic_func (MHD_PanicCallback cb, void *cls);

/**
 * Get a particular header value.  If multiple
 * values match the kind, return any one of them.
 *
 * @param connection connection to get values from
 * @param kind what kind of value are we looking for
 * @param key the header to look for
 * @return NULL if no such item was found
 */
const char *MHD_lookup_connection_value (struct MHD_Connection *connection,
                                         enum MHD_ValueKind kind,
                                         const char *key);

/**
 * Queue a response to be transmitted to the client (as soon as
 * possible but after MHD_AccessHandlerCallback returns).
 *
 * @param connection the connection identifying the client
 * @param status_code HTTP status code (i.e. 200 for OK)
 * @param response response to transmit
 * @return MHD_NO on error (i.e. reply already sent),
 *         MHD_YES on success or if message has been queued
 */
int
MHD_queue_response (struct MHD_Connection *connection,
                    unsigned int status_code, struct MHD_Response *response);


/* **************** Response manipulation functions ***************** */

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response, MHD_SIZE_UNKNOWN for unknown
 * @param block_size preferred block size for querying crc (advisory only,
 *                   MHD may still call crc using smaller chunks); this
 *                   is essentially the buffer size used for IO, clients
 *                   should pick a value that is appropriate for IO and
 *                   memory performance requirements
 * @param crc callback to use to obtain response data
 * @param crc_cls extra argument to crc
 * @param crfc callback to call to free crc_cls resources
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_callback (uint64_t size,
                                                        size_t block_size,
                                                        MHD_ContentReaderCallback
                                                        crc, void *crc_cls,
                                                        MHD_ContentReaderFreeCallback
                                                        crfc);

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param data the data itself
 * @param must_free libmicrohttpd should free data when done
 * @param must_copy libmicrohttpd must make a copy of data
 *        right away, the data maybe released anytime after
 *        this call returns
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_data (size_t size,
                                                    void *data,
                                                    int must_free,
                                                    int must_copy);


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param fd file descriptor referring to a file on disk with the data; will be closed when response is destroyed
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_fd (size_t size,
						  int fd);

/**
 * Destroy a response object and associated resources.  Note that
 * libmicrohttpd may keep some of the resources around if the response
 * is still in the queue for some clients, so the memory may not
 * necessarily be freed immediatley.
 *
 * @param response response to destroy
 */
void MHD_destroy_response (struct MHD_Response *response);

/**
 * Add a header line to the response.
 *
 * @param response response to add a header to
 * @param header the header to add
 * @param content value to add
 * @return MHD_NO on error (i.e. invalid header or content format),
 *         or out of memory
 */
int
MHD_add_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Delete a header line from the response.
 *
 * @param response response to remove a header from
 * @param header the header to delete
 * @param content value to delete
 * @return MHD_NO on error (no such header known)
 */
int
MHD_del_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Get all of the headers added to a response.
 *
 * @param response response to query
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_response_headers (struct MHD_Response *response,
                          MHD_KeyValueIterator iterator, void *iterator_cls);


/**
 * Get a particular header from the response.
 *
 * @param response response to query
 * @param key which header to get
 * @return NULL if header does not exist
 */
const char *MHD_get_response_header (struct MHD_Response *response,
                                     const char *key);


/* ********************** PostProcessor functions ********************** */

/**
 * Create a PostProcessor.
 *
 * A PostProcessor can be used to (incrementally) parse the data
 * portion of a POST request.  Note that some buggy browsers fail to
 * set the encoding type.  If you want to support those, you may have
 * to call 'MHD_set_connection_value' with the proper encoding type
 * before creating a post processor (if no supported encoding type is
 * set, this function will fail).
 *
 * @param connection the connection on which the POST is
 *        happening (used to determine the POST format)
 * @param buffer_size maximum number of bytes to use for
 *        internal buffering (used only for the parsing,
 *        specifically the parsing of the keys).  A
 *        tiny value (256-1024) should be sufficient.
 *        Do NOT use a value smaller than 256.
 * @param iter iterator to be called with the parsed data,
 *        Must NOT be NULL.
 * @param cls first argument to ikvi
 * @return  NULL on error (out of memory, unsupported encoding),
            otherwise a PP handle
 */
struct MHD_PostProcessor *MHD_create_post_processor (struct MHD_Connection
                                                     *connection,
                                                     size_t buffer_size,
                                                     MHD_PostDataIterator
                                                     iter, void *cls);

/**
 * Parse and process POST data.
 * Call this function when POST data is available
 * (usually during an MHD_AccessHandlerCallback)
 * with the upload_data and upload_data_size.
 * Whenever possible, this will then cause calls
 * to the MHD_IncrementalKeyValueIterator.
 *
 * @param pp the post processor
 * @param post_data post_data_len bytes of POST data
 * @param post_data_len length of post_data
 * @return MHD_YES on success, MHD_NO on error
 *         (out-of-memory, iterator aborted, parse error)
 */
int
MHD_post_process (struct MHD_PostProcessor *pp,
                  const char *post_data, size_t post_data_len);

/**
 * Release PostProcessor resources.
 *
 * @param pp the PostProcessor to destroy
 * @return MHD_YES if processing completed nicely,
 *         MHD_NO if there were spurious characters / formatting
 *                problems; it is common to ignore the return
 *                value of this function
 */
int MHD_destroy_post_processor (struct MHD_PostProcessor *pp);



/* ********************** generic query functions ********************** */

/**
 * Information about a connection.
 */
union MHD_ConnectionInfo
{

  /**
   * Cipher algorithm used, of type "enum gnutls_cipher_algorithm".
   */
  int /* enum gnutls_cipher_algorithm */ cipher_algorithm;

  /**
   * Protocol used, of type "enum gnutls_protocol".
   */
  int /* enum gnutls_protocol */ protocol;

  /**
   * GNUtls session handle, of type "gnutls_session_t".
   */
  void * /* gnutls_session_t */ tls_session;

  /**
   * Address information for the client.
   */
  struct sockaddr_in * client_addr;
};

/**
 * Obtain information about the given connection.
 *
 * @param connection what connection to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_ConnectionInfo *MHD_get_connection_info (struct MHD_Connection
                                                         *connection,
                                                         enum
                                                         MHD_ConnectionInfoType
                                                         infoType, ...);


/**
 * Information about an MHD daemon.
 */
union MHD_DaemonInfo
{
  /**
   * Size of the key (unit??)
   */
  size_t key_size;

  /**
   * Size of the mac key (unit??)
   */
  size_t mac_key_size;

  /**
   * Listen socket file descriptor
   */
  int listen_fd;
};

/**
 * Obtain information about the given daemon
 * (not fully implemented!).
 *
 * @param daemon what daemon to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_DaemonInfo *MHD_get_daemon_info (struct MHD_Daemon *daemon,
                                                 enum MHD_DaemonInfoType
                                                 infoType, ...);

/**
 * Obtain the version of this library
 *
 * @return static version string, e.g. "0.4.1"
 */
const char* MHD_get_version(void);

#if 0                           /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif

#endif

Added luasupport/HTTP/libmicrohttpd-FAT/Include/platform.h.







































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file platform.h
 * @brief platform-specific includes for libmicrohttpd
 * @author Christian Grothoff
 *
 * This file is included by the libmicrohttpd code
 * before "microhttpd.h"; it provides the required
 * standard headers (which are platform-specific).<p>
 *
 * Note that this file depends on our configure.ac
 * build process and the generated config.h file.
 * Hence you cannot include it directly in applications
 * that use libmicrohttpd.
 */
#ifndef PLATFORM_H
#define PLATFORM_H

#include "MHD_config.h"

#define _XOPEN_SOURCE_EXTENDED  1
#if OS390
#define _OPEN_THREADS
#define _OPEN_SYS_SOCK_IPV6
#define _OPEN_MSGQ_EXT
#define _LP64
#endif

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#if !defined(MINGW) && !defined(__SYMBIAN32__)
#include <search.h>
#endif
#include <stddef.h>
#undef HAVE_CONFIG_H
#include <pthread.h>
#define HAVE_CONFIG_H 1

/* different OSes have fd_set in
   a broad range of header files;
   we just include most of them (if they
   are available) */


#ifdef OS_VXWORKS
#include <sockLib.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <sys/mman.h>
#define RESTRICT __restrict__
#endif

#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#if HAVE_SYS_MSG_H
#include <sys/msg.h>
#endif
#if HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
#if HAVE_NETDB_H
#include <netdb.h>
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_TIME_H
#include <time.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#if HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif

#include "plibc.h"


#endif

Added luasupport/HTTP/libmicrohttpd-FAT/Include/plibc.h.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
/*
     This file is part of PlibC.
     (C) 2005, 2006, 2007, 2008, 2009 Nils Durner (and other contributing authors)

	   This library is free software; you can redistribute it and/or
	   modify it under the terms of the GNU Lesser General Public
	   License as published by the Free Software Foundation; either
	   version 2.1 of the License, or (at your option) any later version.

	   This library is distributed in the hope that it will be useful,
	   but WITHOUT ANY WARRANTY; without even the implied warranty of
	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	   Lesser General Public License for more details.

	   You should have received a copy of the GNU Lesser General Public
	   License along with this library; if not, write to the Free Software
	   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/**
 * @file include/plibc.h
 * @brief PlibC header
 * @attention This file is usually not installed under Unix,
 *            so ship it with your application
 * @version $Revision: 39 $
 */

#ifndef _PLIBC_H_
#define _PLIBC_H_

#ifndef SIGALRM
#define SIGALRM 14
#endif

#ifdef __cplusplus
extern "C"
{
#endif

#include <stddef.h>

#ifdef Q_OS_WIN32
#define WINDOWS 1
#endif

#define HAVE_PLIBC_FD 0

#ifdef WINDOWS

#if ENABLE_NLS
#include "langinfo.h"
#endif

#include <windows.h>
#include <Ws2tcpip.h>
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <stdarg.h>

#define __BYTE_ORDER BYTE_ORDER
#define __BIG_ENDIAN BIG_ENDIAN

/* Conflicts with our definitions */
#define __G_WIN32_H__

/* Convert LARGE_INTEGER to double */
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + \
  (double)((x).LowPart))

#define socklen_t int
#define ssize_t int
#define off_t int
#define int64_t long long
#define int32_t long

  struct stat64
  {
    _dev_t st_dev;
    _ino_t st_ino;
    _mode_t st_mode;
    short st_nlink;
    short st_uid;
    short st_gid;
    _dev_t st_rdev;
    __int64 st_size;
    __time64_t st_atime;
    __time64_t st_mtime;
    __time64_t st_ctime;
  };

#ifndef pid_t
#define pid_t int
#endif

#ifndef WEXITSTATUS
#define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
#endif

#ifndef MSG_DONTWAIT
#define MSG_DONTWAIT 0
#endif

/* Thanks to the Cygwin project */
#define ENOCSI 43               /* No CSI structure available */
#define EL2HLT 44               /* Level 2 halted */
#ifndef  EDEADLK
#define EDEADLK 45              /* Deadlock condition */
#endif
#ifndef  ENOLCK
#define ENOLCK 46               /* No record locks available */
#endif
#define EBADE 50                /* Invalid exchange */
#define EBADR 51                /* Invalid request descriptor */
#define EXFULL 52               /* Exchange full */
#define ENOANO 53               /* No anode */
#define EBADRQC 54              /* Invalid request code */
#define EBADSLT 55              /* Invalid slot */
#ifndef  EDEADLOCK
#define EDEADLOCK EDEADLK       /* File locking deadlock error */
#endif
#define EBFONT 57               /* Bad font file fmt */
#define ENOSTR 60               /* Device not a stream */
#define ENODATA 61              /* No data (for no delay io) */
#define ETIME 62                /* Timer expired */
#define ENOSR 63                /* Out of streams resources */
#define ENONET 64               /* Machine is not on the network */
#define ENOPKG 65               /* Package not installed */
#define EREMOTE 66              /* The object is remote */
#define ENOLINK 67              /* The link has been severed */
#define EADV 68                 /* Advertise error */
#define ESRMNT 69               /* Srmount error */
#define ECOMM 70                /* Communication error on send */
#define EPROTO 71               /* Protocol error */
#define EMULTIHOP 74            /* Multihop attempted */
#define ELBIN 75                /* Inode is remote (not really error) */
#define EDOTDOT 76              /* Cross mount point (not really error) */
#define EBADMSG 77              /* Trying to read unreadable message */
#define ENOTUNIQ 80             /* Given log. name not unique */
#define EBADFD 81               /* f.d. invalid for this operation */
#define EREMCHG 82              /* Remote address changed */
#define ELIBACC 83              /* Can't access a needed shared lib */
#define ELIBBAD 84              /* Accessing a corrupted shared lib */
#define ELIBSCN 85              /* .lib section in a.out corrupted */
#define ELIBMAX 86              /* Attempting to link in too many libs */
#define ELIBEXEC 87             /* Attempting to exec a shared library */
#ifndef  ENOSYS
#define ENOSYS 88               /* Function not implemented */
#endif
#define ENMFILE 89              /* No more files */
#ifndef  ENOTEMPTY
#define ENOTEMPTY 90            /* Directory not empty */
#endif
#ifndef  ENAMETOOLONG
#define ENAMETOOLONG 91         /* File or path name too long */
#endif
#define ELOOP 92                /* Too many symbolic links */
#define EOPNOTSUPP 95           /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96         /* Protocol family not supported */
#define ECONNRESET 104          /* Connection reset by peer */
#define ENOBUFS 105             /* No buffer space available */
#define EAFNOSUPPORT 106        /* Address family not supported by protocol family */
#define EPROTOTYPE 107          /* Protocol wrong type for socket */
#define ENOTSOCK 108            /* Socket operation on non-socket */
#define ENOPROTOOPT 109         /* Protocol not available */
#define ESHUTDOWN 110           /* Can't send after socket shutdown */
#define ECONNREFUSED 111        /* Connection refused */
#define EADDRINUSE 112          /* Address already in use */
#define ECONNABORTED 113        /* Connection aborted */
#define ENETUNREACH 114         /* Network is unreachable */
#define ENETDOWN 115            /* Network interface is not configured */
#ifndef  ETIMEDOUT
#define ETIMEDOUT 116           /* Connection timed out */
#endif
#define EHOSTDOWN 117           /* Host is down */
#define EHOSTUNREACH 118        /* Host is unreachable */
#define EINPROGRESS 119         /* Connection already in progress */
#define EALREADY 120            /* Socket already connected */
#define EDESTADDRREQ 121        /* Destination address required */
#define EMSGSIZE 122            /* Message too long */
#define EPROTONOSUPPORT 123     /* Unknown protocol */
#define ESOCKTNOSUPPORT 124     /* Socket type not supported */
#define EADDRNOTAVAIL 125       /* Address not available */
#define ENETRESET 126           /* Connection aborted by network */
#define EISCONN 127             /* Socket is already connected */
#define ENOTCONN 128            /* Socket is not connected */
#define ETOOMANYREFS 129        /* Too many references: cannot splice */
#define EPROCLIM 130            /* Too many processes */
#define EUSERS 131              /* Too many users */
#define EDQUOT 132              /* Disk quota exceeded */
#define ESTALE 133              /* Unknown error */
#ifndef  ENOTSUP
#define ENOTSUP 134             /* Not supported */
#endif
#define ENOMEDIUM 135           /* No medium (in tape drive) */
#define ENOSHARE 136            /* No such host or network path */
#define ECASECLASH 137          /* Filename exists with different case */
#define EWOULDBLOCK EAGAIN      /* Operation would block */
#define EOVERFLOW 139           /* Value too large for defined data type */

#undef HOST_NOT_FOUND
#define HOST_NOT_FOUND 1
#undef TRY_AGAIN
#define TRY_AGAIN 2
#undef NO_RECOVERY
#define NO_RECOVERY 3
#undef NO_ADDRESS
#define NO_ADDRESS 4

#define PROT_READ   0x1
#define PROT_WRITE  0x2
#define MAP_SHARED  0x1
#define MAP_PRIVATE 0x2         /* unsupported */
#define MAP_FIXED   0x10
#define MAP_FAILED  ((void *)-1)

  struct statfs
  {
    long f_type;                /* type of filesystem (see below) */
    long f_bsize;               /* optimal transfer block size */
    long f_blocks;              /* total data blocks in file system */
    long f_bfree;               /* free blocks in fs */
    long f_bavail;              /* free blocks avail to non-superuser */
    long f_files;               /* total file nodes in file system */
    long f_ffree;               /* free file nodes in fs */
    long f_fsid;                /* file system id */
    long f_namelen;             /* maximum length of filenames */
    long f_spare[6];            /* spare for later */
  };

  extern const struct in6_addr in6addr_any;     /* :: */
  extern const struct in6_addr in6addr_loopback;        /* ::1 */

/* Taken from the Wine project <http://www.winehq.org>
    /wine/include/winternl.h */
  enum SYSTEM_INFORMATION_CLASS
  {
    SystemBasicInformation = 0,
    Unknown1,
    SystemPerformanceInformation = 2,
    SystemTimeOfDayInformation = 3,     /* was SystemTimeInformation */
    Unknown4,
    SystemProcessInformation = 5,
    Unknown6,
    Unknown7,
    SystemProcessorPerformanceInformation = 8,
    Unknown9,
    Unknown10,
    SystemDriverInformation,
    Unknown12,
    Unknown13,
    Unknown14,
    Unknown15,
    SystemHandleList,
    Unknown17,
    Unknown18,
    Unknown19,
    Unknown20,
    SystemCacheInformation,
    Unknown22,
    SystemInterruptInformation = 23,
    SystemExceptionInformation = 33,
    SystemRegistryQuotaInformation = 37,
    SystemLookasideInformation = 45
  };

  typedef struct
  {
    LARGE_INTEGER IdleTime;
    LARGE_INTEGER KernelTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER Reserved1[2];
    ULONG Reserved2;
  } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;

#define sleep(secs) (Sleep(secs * 1000))

/*********************** statfs *****************************/
/* fake block size */
#define FAKED_BLOCK_SIZE 512

/* linux-compatible values for fs type */
#define MSDOS_SUPER_MAGIC     0x4d44
#define NTFS_SUPER_MAGIC      0x5346544E

/*********************** End of statfs ***********************/

#define SHUT_RDWR SD_BOTH

/* Operations for flock() */
#define LOCK_SH  1              /* shared lock */
#define LOCK_EX  2              /* exclusive lock */
#define LOCK_NB  4              /* or'd with one of the above to prevent
                                   blocking */
#define LOCK_UN  8              /* remove lock */

/* Not supported under MinGW */
#define S_IRGRP 0
#define S_IWGRP 0
#define S_IROTH 0
#define S_IXGRP 0
#define S_IWOTH 0
#define S_IXOTH 0
#define S_ISUID 0
#define S_ISGID 0
#define S_ISVTX 0
#define S_IRWXG 0
#define S_IRWXO 0

#define SHUT_WR SD_SEND
#define SHUT_RD SD_RECEIVE
#define SHUT_RDWR SD_BOTH

#define SIGKILL 9
#define SIGTERM 15

#define SetErrnoFromWinError(e) _SetErrnoFromWinError(e, __FILE__, __LINE__)

  BOOL _plibc_CreateShortcut (const char *pszSrc, const char *pszDest);
  BOOL _plibc_DereferenceShortcut (char *pszShortcut);
  char *plibc_ChooseDir (char *pszTitle, unsigned long ulFlags);
  char *plibc_ChooseFile (char *pszTitle, unsigned long ulFlags);
  long QueryRegistry (HKEY hMainKey, char *pszKey, char *pszSubKey,
                      char *pszBuffer, long *pdLength);

  BOOL __win_IsHandleMarkedAsBlocking (SOCKET hHandle);
  void __win_SetHandleBlockingMode (SOCKET s, BOOL bBlocking);
  void __win_DiscardHandleBlockingMode (SOCKET s);
  int _win_isSocketValid (int s);
  int plibc_conv_to_win_path (const char *pszUnix, char *pszWindows);
  unsigned plibc_get_handle_count ();

  typedef void (*TPanicProc) (int, char *);
  void plibc_set_panic_proc (TPanicProc proc);

  int flock (int fd, int operation);
  int fsync (int fildes);
  int inet_pton (int af, const char *src, void *dst);
  int inet_pton4 (const char *src, u_char * dst, int pton);
#if USE_IPV6
  int inet_pton6 (const char *src, u_char * dst);
#endif
  int truncate (const char *fname, int distance);
  int statfs (const char *path, struct statfs *buf);
  const char *hstrerror (int err);
  int mkstemp (char *tmplate);
  char *strptime (const char *buf, const char *format, struct tm *tm);
  const char *inet_ntop (int af, const void *src, char *dst, size_t size);

  int plibc_init (char *pszOrg, char *pszApp);
  void plibc_shutdown ();
  int plibc_initialized ();
  int plibc_conv_to_win_path_ex (const char *pszUnix, char *pszWindows,
                                 int derefLinks);
  void _SetErrnoFromWinError (long lWinError, char *pszCaller, int iLine);
  void SetErrnoFromWinsockError (long lWinError);
  void SetHErrnoFromWinError (long lWinError);
  void SetErrnoFromHRESULT (HRESULT hRes);
  int GetErrnoFromWinsockError (long lWinError);
  FILE *_win_fopen (const char *filename, const char *mode);
  DIR *_win_opendir (const char *dirname);
  int _win_open (const char *filename, int oflag, ...);
#ifdef ENABLE_NLS
  char *_win_bindtextdomain (const char *domainname, const char *dirname);
#endif
  int _win_chdir (const char *path);
  int _win_close (int fd);
  int _win_creat (const char *path, mode_t mode);
  char *_win_ctime (const time_t * clock);
  char *_win_ctime_r (const time_t * clock, char *buf);
  int _win_fstat (int handle, struct stat *buffer);
  int _win_ftruncate (int fildes, off_t length);
  void _win_gettimeofday (struct timeval *tp, void *tzp);
  int _win_kill (pid_t pid, int sig);
  int _win_pipe (int *phandles);
  int _win_rmdir (const char *path);
  int _win_access (const char *path, int mode);
  int _win_chmod (const char *filename, int pmode);
  char *realpath (const char *file_name, char *resolved_name);
  long _win_random (void);
  int _win_remove (const char *path);
  int _win_rename (const char *oldname, const char *newname);
  int _win_stat (const char *path, struct stat *buffer);
  int _win_stat64 (const char *path, struct stat64 *buffer);
  int _win_unlink (const char *filename);
  int _win_write (int fildes, const void *buf, size_t nbyte);
  int _win_read (int fildes, void *buf, size_t nbyte);
  size_t _win_fwrite (const void *buffer, size_t size, size_t count,
                      FILE * stream);
  size_t _win_fread (void *buffer, size_t size, size_t count, FILE * stream);
  int _win_symlink (const char *path1, const char *path2);
  void *_win_mmap (void *start, size_t len, int access, int flags, int fd,
                   unsigned long long offset);
  int _win_munmap (void *start, size_t length);
  int _win_lstat (const char *path, struct stat *buf);
  int _win_lstat64 (const char *path, struct stat64 *buf);
  int _win_readlink (const char *path, char *buf, size_t bufsize);
  int _win_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
  int _win_printf (const char *format, ...);
  int _win_fprintf (FILE * f, const char *format, ...);
  int _win_vprintf (const char *format, va_list ap);
  int _win_vfprintf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vsprintf (char *dest, const char *format, va_list arg_ptr);
  int _win_vsnprintf (char *str, size_t size, const char *format,
                      va_list arg_ptr);
  int _win_snprintf (char *str, size_t size, const char *format, ...);
  int _win_sprintf (char *dest, const char *format, ...);
  int _win_vsscanf (const char *str, const char *format, va_list arg_ptr);
  int _win_sscanf (const char *str, const char *format, ...);
  int _win_vfscanf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vscanf (const char *format, va_list arg_ptr);
  int _win_scanf (const char *format, ...);
  int _win_fscanf (FILE * stream, const char *format, ...);
  pid_t _win_waitpid (pid_t pid, int *stat_loc, int options);
  int _win_bind (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_connect (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_getpeername (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockname (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockopt (SOCKET s, int level, int optname, char *optval,
                       int *optlen);
  int _win_listen (SOCKET s, int backlog);
  int _win_recv (SOCKET s, char *buf, int len, int flags);
  int _win_recvfrom (SOCKET s, void *buf, int len, int flags,
                     struct sockaddr *from, int *fromlen);
  int _win_select (int max_fd, fd_set * rfds, fd_set * wfds, fd_set * efds,
                   const struct timeval *tv);
  int _win_send (SOCKET s, const char *buf, int len, int flags);
  int _win_sendto (SOCKET s, const char *buf, int len, int flags,
                   const struct sockaddr *to, int tolen);
  int _win_setsockopt (SOCKET s, int level, int optname, const void *optval,
                       int optlen);
  int _win_shutdown (SOCKET s, int how);
  SOCKET _win_socket (int af, int type, int protocol);
  struct hostent *_win_gethostbyaddr (const char *addr, int len, int type);
  struct hostent *_win_gethostbyname (const char *name);
  struct hostent *gethostbyname2 (const char *name, int af);
  char *_win_strerror (int errnum);
  int IsWinNT ();
  char *index (const char *s, int c);

#if !HAVE_STRNDUP
  char *strndup (const char *s, size_t n);
#endif
#if !HAVE_STRNLEN
  size_t strnlen (const char *str, size_t maxlen);
#endif

#define strcasecmp(a, b) stricmp(a, b)
#define strncasecmp(a, b, c) strnicmp(a, b, c)

#endif                          /* WINDOWS */

#ifndef WINDOWS
#define DIR_SEPARATOR '/'
#define DIR_SEPARATOR_STR "/"
#define PATH_SEPARATOR ';'
#define PATH_SEPARATOR_STR ";"
#define NEWLINE "\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) bindtextdomain(d, n)
#endif
#define CREAT(p, m) creat(p, m)
#define PLIBC_CTIME(c) ctime(c)
#define CTIME_R(c, b) ctime_r(c, b)
#undef FOPEN
#define FOPEN(f, m) fopen(f, m)
#define FTRUNCATE(f, l) ftruncate(f, l)
#define OPENDIR(d) opendir(d)
#define OPEN open
#define CHDIR(d) chdir(d)
#define CLOSE(f) close(f)
#define LSEEK(f, o, w) lseek(f, o, w)
#define RMDIR(f) rmdir(f)
#define ACCESS(p, m) access(p, m)
#define CHMOD(f, p) chmod(f, p)
#define FSTAT(h, b) fstat(h, b)
#define PLIBC_KILL(p, s) kill(p, s)
#define PIPE(h) pipe(h)
#define REMOVE(p) remove(p)
#define RENAME(o, n) rename(o, n)
#define STAT(p, b) stat(p, b)
#define STAT64(p, b) stat64(p, b)
#define UNLINK(f) unlink(f)
#define WRITE(f, b, n) write(f, b, n)
#define READ(f, b, n) read(f, b, n)
#define GN_FREAD(b, s, c, f) fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) fwrite(b, s, c, f)
#define SYMLINK(a, b) symlink(a, b)
#define MMAP(s, l, p, f, d, o) mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) munmap(s, l)
#define STRERROR(i) strerror(i)
#define RANDOM() random()
#define READLINK(p, b, s) readlink(p, b, s)
#define LSTAT(p, b) lstat(p, b)
#define LSTAT64(p, b) lstat64(p, b)
#define PRINTF printf
#define FPRINTF fprintf
#define VPRINTF(f, a) vprintf(f, a)
#define VFPRINTF(s, f, a) vfprintf(s, f, a)
#define VSPRINTF(d, f, a) vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF snprintf
#define SPRINTF sprintf
#define VSSCANF(s, f, a) vsscanf(s, f, a)
#define SSCANF sscanf
#define VFSCANF(s, f, a) vfscanf(s, f, a)
#define VSCANF(f, a) vscanf(f, a)
#define SCANF scanf
#define FSCANF fscanf
#define WAITPID(p, s, o) waitpid(p, s, o)
#define ACCEPT(s, a, l) accept(s, a, l)
#define BIND(s, n, l) bind(s, n, l)
#define CONNECT(s, n, l) connect(s, n, l)
#define GETPEERNAME(s, n, l) getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) getsockopt(s, l, o, v, p)
#define LISTEN(s, b) listen(s, b)
#define RECV(s, b, l, f) recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) select(n, r, w, e, t)
#define SEND(s, b, l, f) send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) shutdown(s, h)
#define SOCKET(a, t, p) socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) gethostbyname(n)
#define GETTIMEOFDAY(t, n) gettimeofday(t, n)
#define INSQUE(e, p) insque(e, p)
#define REMQUE(e) remque(e)

#ifndef __SYMBIAN32__
#define HSEARCH(i, a) hsearch(i, a)
#define HCREATE(n) hcreate(n)
#define HDESTROY() hdestroy()
#define HSEARCH_R(i, a, r, h) hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) hcreate_r(n, h)
#define HDESTROY_R(h) hdestroy_r(h)
#define TSEARCH(k, r, c) tsearch(k, r, c)
#define TFIND(k, r, c) tfind(k, r, c)
#define TDELETE(k, r, c) tdelete(k, r, c)
#define TWALK(r, a) twalk(r, a)
#define TDESTROY(r, f) tdestroy(r, f)
#define LFIND(k, b, n, s, c) lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) lsearch(k, b, n, s, c)
#else  // __SYMBIAN32__
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif  // !__SYMBIAN32__

#else
#define DIR_SEPARATOR '\\'
#define DIR_SEPARATOR_STR "\\"
#define PATH_SEPARATOR ':'
#define PATH_SEPARATOR_STR ":"
#define NEWLINE "\r\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) _win_bindtextdomain(d, n)
#endif
#define CREAT(p, m) _win_creat(p, m)
#define PLIBC_CTIME(c) _win_ctime(c)
#define CTIME_R(c, b) _win_ctime_r(c, b)
#define FOPEN(f, m) _win_fopen(f, m)
#define FTRUNCATE(f, l) _win_ftruncate(f, l)
#define OPENDIR(d) _win_opendir(d)
#define OPEN _win_open
#define CHDIR(d) _win_chdir(d)
#define CLOSE(f) _win_close(f)
#define PLIBC_KILL(p, s) _win_kill(p, s)
#define LSEEK(f, o, w) _win_lseek(f, o, w)
#define FSTAT(h, b) _win_fstat(h, b)
#define RMDIR(f) _win_rmdir(f)
#define ACCESS(p, m) _win_access(p, m)
#define CHMOD(f, p) _win_chmod(f, p)
#define PIPE(h) _win_pipe(h)
#define RANDOM() _win_random()
#define REMOVE(p) _win_remove(p)
#define RENAME(o, n) _win_rename(o, n)
#define STAT(p, b) _win_stat(p, b)
#define STAT64(p, b) _win_stat64(p, b)
#define UNLINK(f) _win_unlink(f)
#define WRITE(f, b, n) _win_write(f, b, n)
#define READ(f, b, n) _win_read(f, b, n)
#define GN_FREAD(b, s, c, f) _win_fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) _win_fwrite(b, s, c, f)
#define SYMLINK(a, b) _win_symlink(a, b)
#define MMAP(s, l, p, f, d, o) _win_mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) _win_munmap(s, l)
#define STRERROR(i) _win_strerror(i)
#define READLINK(p, b, s) _win_readlink(p, b, s)
#define LSTAT(p, b) _win_lstat(p, b)
#define LSTAT64(p, b) _win_lstat64(p, b)
#define PRINTF(f, ...) _win_printf(f , __VA_ARGS__)
#define FPRINTF(fil, fmt, ...) _win_fprintf(fil, fmt, __VA_ARGS__)
#define VPRINTF(f, a) _win_vprintf(f, a)
#define VFPRINTF(s, f, a) _win_vfprintf(s, f, a)
#define VSPRINTF(d, f, a) _win_vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) _win_vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF(str, size, fmt, ...) _win_snprintf(str, size, fmt, __VA_ARGS__)
#define SPRINTF(d, f, ...) _win_sprintf(d, f, __VA_ARGS__)
#define VSSCANF(s, f, a) _win_vsscanf(s, f, a)
#define SSCANF(s, f, ...) _win_sscanf(s, f, __VA_ARGS__)
#define VFSCANF(s, f, a) _win_vfscanf(s, f, a)
#define VSCANF(f, a) _win_vscanf(f, a)
#define SCANF(f, ...) _win_scanf(f, __VA_ARGS__)
#define FSCANF(s, f, ...) _win_fscanf(s, f, __VA_ARGS__)
#define WAITPID(p, s, o) _win_waitpid(p, s, o)
#define ACCEPT(s, a, l) _win_accept(s, a, l)
#define BIND(s, n, l) _win_bind(s, n, l)
#define CONNECT(s, n, l) _win_connect(s, n, l)
#define GETPEERNAME(s, n, l) _win_getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) _win_getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) _win_getsockopt(s, l, o, v, p)
#define LISTEN(s, b) _win_listen(s, b)
#define RECV(s, b, l, f) _win_recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) _win_recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) _win_select(n, r, w, e, t)
#define SEND(s, b, l, f) _win_send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) _win_sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) _win_shutdown(s, h)
#define SOCKET(a, t, p) _win_socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) _win_gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) _win_gethostbyname(n)
#define GETTIMEOFDAY(t, n) _win_gettimeofday(t, n)
#define INSQUE(e, p) _win_insque(e, p)
#define REMQUE(e) _win_remque(e)
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif

/* search.h */

/* Prototype structure for a linked-list data structure.
   This is the type used by the `insque' and `remque' functions.  */

  struct PLIBC_SEARCH_QELEM
  {
    struct qelem *q_forw;
    struct qelem *q_back;
    char q_data[1];
  };


/* Insert ELEM into a doubly-linked list, after PREV.  */
  void _win_insque (void *__elem, void *__prev);

/* Unlink ELEM from the doubly-linked list that it is in.  */
  void _win_remque (void *__elem);


/* For use with hsearch(3).  */
  typedef int (*PLIBC_SEARCH__compar_fn_t) (__const void *, __const void *);

  typedef PLIBC_SEARCH__compar_fn_t _win_comparison_fn_t;

/* Action which shall be performed in the call the hsearch.  */
  typedef enum
  {
    PLIBC_SEARCH_FIND,
    PLIBC_SEARCH_ENTER
  }
  PLIBC_SEARCH_ACTION;

  typedef struct PLIBC_SEARCH_entry
  {
    char *key;
    void *data;
  }
  PLIBC_SEARCH_ENTRY;

/* The reentrant version has no static variables to maintain the state.
   Instead the interface of all functions is extended to take an argument
   which describes the current status.  */
  typedef struct _PLIBC_SEARCH_ENTRY
  {
    unsigned int used;
    PLIBC_SEARCH_ENTRY entry;
  }
  _PLIBC_SEARCH_ENTRY;


/* Family of hash table handling functions.  The functions also
   have reentrant counterparts ending with _r.  The non-reentrant
   functions all work on a signle internal hashing table.  */

/* Search for entry matching ITEM.key in internal hash table.  If
   ACTION is `FIND' return found entry or signal error by returning
   NULL.  If ACTION is `ENTER' replace existing data (if any) with
   ITEM.data.  */
  PLIBC_SEARCH_ENTRY *_win_hsearch (PLIBC_SEARCH_ENTRY __item,
                                    PLIBC_SEARCH_ACTION __action);

/* Create a new hashing table which will at most contain NEL elements.  */
  int _win_hcreate (size_t __nel);

/* Destroy current internal hashing table.  */
  void _win_hdestroy (void);

/* Data type for reentrant functions.  */
  struct PLIBC_SEARCH_hsearch_data
  {
    struct _PLIBC_SEARCH_ENTRY *table;
    unsigned int size;
    unsigned int filled;
  };

/* Reentrant versions which can handle multiple hashing tables at the
   same time.  */
  int _win_hsearch_r (PLIBC_SEARCH_ENTRY __item, PLIBC_SEARCH_ACTION __action,
                      PLIBC_SEARCH_ENTRY ** __retval,
                      struct PLIBC_SEARCH_hsearch_data *__htab);
  int _win_hcreate_r (size_t __nel, struct PLIBC_SEARCH_hsearch_data *__htab);
  void _win_hdestroy_r (struct PLIBC_SEARCH_hsearch_data *__htab);


/* The tsearch routines are very interesting. They make many
   assumptions about the compiler.  It assumes that the first field
   in node must be the "key" field, which points to the datum.
   Everything depends on that.  */
/* For tsearch */
  typedef enum
  {
    PLIBC_SEARCH_preorder,
    PLIBC_SEARCH_postorder,
    PLIBC_SEARCH_endorder,
    PLIBC_SEARCH_leaf
  }
  PLIBC_SEARCH_VISIT;

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP and insert a new element if not found.  */
  void *_win_tsearch (__const void *__key, void **__rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP.  If no matching entry is available return NULL.  */
  void *_win_tfind (__const void *__key, void *__const * __rootp,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Remove the element matching KEY from the tree pointed to by *ROOTP.  */
  void *_win_tdelete (__const void *__restrict __key,
                      void **__restrict __rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

  typedef void (*PLIBC_SEARCH__action_fn_t) (__const void *__nodep,
                                             PLIBC_SEARCH_VISIT __value,
                                             int __level);

/* Walk through the whole tree and call the ACTION callback for every node
   or leaf.  */
  void _win_twalk (__const void *__root, PLIBC_SEARCH__action_fn_t __action);

/* Callback type for function to free a tree node.  If the keys are atomic
   data this function should do nothing.  */
  typedef void (*PLIBC_SEARCH__free_fn_t) (void *__nodep);

/* Destroy the whole tree, call FREEFCT for each node or leaf.  */
  void _win_tdestroy (void *__root, PLIBC_SEARCH__free_fn_t __freefct);


/* Perform linear search for KEY by comparing by COMPAR in an array
   [BASE,BASE+NMEMB*SIZE).  */
  void *_win_lfind (__const void *__key, __const void *__base,
                    size_t * __nmemb, size_t __size,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Perform linear search for KEY by comparing by COMPAR function in
   array [BASE,BASE+NMEMB*SIZE) and insert entry if not found.  */
  void *_win_lsearch (__const void *__key, void *__base,
                      size_t * __nmemb, size_t __size,
                      PLIBC_SEARCH__compar_fn_t __compar);


#ifdef __cplusplus
}
#endif


#endif                          //_PLIBC_H_

/* end of plibc.h */

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/connection.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/daemon.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/internal.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/memorypool.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/postprocessor.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/reason_phrase.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-FAT/Libs/response.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Include/MHD_config.h.















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
/* MHD_config.h.  Generated from MHD_config.h.in by configure.  */
/* MHD_config.h.in.  Generated from configure.ac by autoheader.  */

#define _GNU_SOURCE  1

/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */

/* This is a Cygwin system */
/* #undef CYGWIN */

/* This is a FreeBSD system */
/* #undef FREEBSD */

/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1

/* Define to 1 if you have the declaration of `TCP_CORK', and to 0 if you
   don't. */
#define HAVE_DECL_TCP_CORK 0

/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1

/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#define HAVE_FSEEKO 1

/* We have gnutls */
#define HAVE_GNUTLS 0

/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
/* #undef HAVE_GNUTLS_GNUTLS_H */

/* Provides IPv6 headers */
#define HAVE_INET6 1

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if you have a functional curl library. */
#define HAVE_LIBCURL 1

/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1

/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1

/* Define to 1 if you have the <math.h> header file. */
#define HAVE_MATH_H 1

/* Define to 1 if you have the `memmem' function. */
/* #undef HAVE_MEMMEM */

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Include error messages */
/* #undef HAVE_MESSAGES */

/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1

/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1

/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1

/* Define to 1 if you have the <poll.h> header file. */
#define HAVE_POLL_H 1

/* Define to 1 if you have the <pthread.h> header file. */
#define HAVE_PTHREAD_H 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the <sys/mman.h> header file. */
#define HAVE_SYS_MMAN_H 1

/* Define to 1 if you have the <sys/msg.h> header file. */
#define HAVE_SYS_MSG_H 1

/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1

/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1

/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1

/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1

/* disable HTTPS support */
#define HTTPS_SUPPORT 0

/* Defined if libcurl supports AsynchDNS */
/* #undef LIBCURL_FEATURE_ASYNCHDNS */

/* Defined if libcurl supports IDN */
/* #undef LIBCURL_FEATURE_IDN */

/* Defined if libcurl supports IPv6 */
#define LIBCURL_FEATURE_IPV6 1

/* Defined if libcurl supports KRB4 */
/* #undef LIBCURL_FEATURE_KRB4 */

/* Defined if libcurl supports libz */
#define LIBCURL_FEATURE_LIBZ 1

/* Defined if libcurl supports NTLM */
#define LIBCURL_FEATURE_NTLM 1

/* Defined if libcurl supports SSL */
#define LIBCURL_FEATURE_SSL 1

/* Defined if libcurl supports SSPI */
/* #undef LIBCURL_FEATURE_SSPI */

/* Defined if libcurl supports DICT */
#define LIBCURL_PROTOCOL_DICT 1

/* Defined if libcurl supports FILE */
#define LIBCURL_PROTOCOL_FILE 1

/* Defined if libcurl supports FTP */
#define LIBCURL_PROTOCOL_FTP 1

/* Defined if libcurl supports FTPS */
#define LIBCURL_PROTOCOL_FTPS 1

/* Defined if libcurl supports HTTP */
#define LIBCURL_PROTOCOL_HTTP 1

/* Defined if libcurl supports HTTPS */
#define LIBCURL_PROTOCOL_HTTPS 1

/* Defined if libcurl supports LDAP */
#define LIBCURL_PROTOCOL_LDAP 1

/* Defined if libcurl supports TELNET */
#define LIBCURL_PROTOCOL_TELNET 1

/* Defined if libcurl supports TFTP */
#define LIBCURL_PROTOCOL_TFTP 1

/* This is a Linux system */
/* #undef LINUX */

/* Define to the sub-directory in which libtool stores uninstalled libraries.
   */
#define LT_OBJDIR ".libs/"

/* gcrypt lib version */
#define MHD_GCRYPT_VERSION "1:1.2.2"

/* gnuTLS lib version - used in conjunction with cURL */
#define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"

/* required cURL SSL version to run tests */
#define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"

/* required cURL version to run tests */
#define MHD_REQ_CURL_VERSION "7.16.4"

/* This is a MinGW system */
/* #undef MINGW */

/* This is a NetBSD system */
/* #undef NETBSD */

/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */

/* This is an OpenBSD system */
/* #undef OPENBSD */

/* This is a OS/390 system */
/* #undef OS390 */

/* This is an OS X system */
#define OSX 1

/* Some strange OS */
/* #undef OTHEROS */

/* Name of package */
#define PACKAGE "libmicrohttpd"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"

/* Define to the full name of this package. */
#define PACKAGE_NAME "libmicrohttpd"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "libmicrohttpd 0.9.0"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libmicrohttpd"

/* Define to the home page for this package. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.9.0"

/* This is a Solaris system */
/* #undef SOLARIS */

/* This is a BSD system */
/* #undef SOMEBSD */

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Version number of package */
#define VERSION "0.9.0"

/* This is a Windows system */
/* #undef WINDOWS */

/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
   significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
#  define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
#  define WORDS_BIGENDIAN 1
# endif
#endif

/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */

/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
/* #undef _LARGEFILE_SOURCE */

/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */

/* Need with solaris or errno doesnt work */
/* #undef _REENTRANT */

/* Define curl_free() as free() if our version of curl lacks curl_free. */
/* #undef curl_free */

Added luasupport/HTTP/libmicrohttpd-PPC/Include/internal.h.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
/*
  This file is part of libmicrohttpd
  (C) 2007, 2008, 2009, 2010 Daniel Pittman and Christian Grothoff
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file internal.h
 * @brief  internal shared structures
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#ifndef INTERNAL_H
#define INTERNAL_H

#include "platform.h"
#include "microhttpd.h"
#if HTTPS_SUPPORT
#include <gnutls/gnutls.h>
#endif

#define EXTRA_CHECKS MHD_YES

#define MHD_MAX(a,b) ((a)<(b)) ? (b) : (a)
#define MHD_MIN(a,b) ((a)<(b)) ? (a) : (b)

/**
 * Size by which MHD usually tries to increment read/write buffers.
 * TODO: we should probably get rid of this magic constant and
 * put in code to automatically determine a good value.
 */
#define MHD_BUF_INC_SIZE 2048

/**
 * Handler for fatal errors.
 */
extern MHD_PanicCallback mhd_panic;

/**
 * Closure argument for "mhd_panic".
 */
extern void *mhd_panic_cls;

/**
 * Events we care about with respect to poll/select
 * for file descriptors.
 */
enum MHD_PollActions
  {
    /**
     * No event interests us.
     */
    MHD_POLL_ACTION_NOTHING = 0,

    /**
     * We would like to read.
     */
    MHD_POLL_ACTION_IN = 1,

    /**
     * We would like to write.
     */ 
    MHD_POLL_ACTION_OUT = 2
  };


/**
 * Socket descriptor and events we care about.
 */
struct MHD_Pollfd {
  /**
   * Socket descriptor.
   */
  int fd;

  /**
   * Which events do we care about for this socket?
   */
  enum MHD_PollActions events;
};


#if HAVE_MESSAGES
/**
 * fprintf-like helper function for logging debug
 * messages.
 */
void MHD_DLOG (const struct MHD_Daemon *daemon, const char *format, ...);

#endif
void MHD_tls_log_func (int level, const char *str);

/**
 * Process escape sequences ('+'=space, %HH).
 * Updates val in place.
 *
 * @return length of the resulting val (strlen(val) maybe
 *  shorter afterwards due to elimination of escape sequences)
 */
size_t MHD_http_unescape (char *val);

/**
 * Header or cookie in HTTP request or response.
 */
struct MHD_HTTP_Header
{
  /**
   * Headers are kept in a linked list.
   */
  struct MHD_HTTP_Header *next;

  /**
   * The name of the header (key), without
   * the colon.
   */
  char *header;

  /**
   * The value of the header.
   */
  char *value;

  /**
   * Type of the header (where in the HTTP
   * protocol is this header from).
   */
  enum MHD_ValueKind kind;

};

/**
 * Representation of a response.
 */
struct MHD_Response
{

  /**
   * Headers to send for the response.  Initially
   * the linked list is created in inverse order;
   * the order should be inverted before sending!
   */
  struct MHD_HTTP_Header *first_header;

  /**
   * Buffer pointing to data that we are supposed
   * to send as a response.
   */
  char *data;

  /**
   * Closure to give to the content reader
   * free callback.
   */
  void *crc_cls;

  /**
   * How do we get more data?  NULL if we are
   * given all of the data up front.
   */
  MHD_ContentReaderCallback crc;

  /**
   * NULL if data must not be freed, otherwise
   * either user-specified callback or "&free".
   */
  MHD_ContentReaderFreeCallback crfc;

  /**
   * Mutex to synchronize access to data/size and
   * reference counts.
   */
  pthread_mutex_t mutex;

  /**
   * Set to MHD_SIZE_UNKNOWN if size is not known.
   */
  uint64_t total_size;

  /**
   * At what offset in the stream is the
   * beginning of data located?
   */
  uint64_t data_start;

  /**
   * Size of data.
   */
  size_t data_size;

  /**
   * Size of the data buffer.
   */
  size_t data_buffer_size;

  /**
   * Reference count for this response.  Free
   * once the counter hits zero.
   */
  unsigned int reference_count;

  /**
   * File-descriptor if this response is FD-backed.
   */
  int fd;

};

/**
 * States in a state machine for a connection.
 *
 * Transitions are any-state to CLOSED, any state to state+1,
 * FOOTERS_SENT to INIT.  CLOSED is the terminal state and
 * INIT the initial state.
 *
 * Note that transitions for *reading* happen only after
 * the input has been processed; transitions for
 * *writing* happen after the respective data has been
 * put into the write buffer (the write does not have
 * to be completed yet).  A transition to CLOSED or INIT
 * requires the write to be complete.
 */
enum MHD_CONNECTION_STATE
{
  /**
   * Connection just started (no headers received).
   * Waiting for the line with the request type, URL and version.
   */
  MHD_CONNECTION_INIT = 0,

  /**
   * 1: We got the URL (and request type and version).  Wait for a header line.
   */
  MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1,

  /**
   * 2: We got part of a multi-line request header.  Wait for the rest.
   */
  MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1,

  /**
   * 3: We got the request headers.  Process them.
   */
  MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,

  /**
   * 4: We have processed the request headers.  Send 100 continue.
   */
  MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1,

  /**
   * 5: We have processed the headers and need to send 100 CONTINUE.
   */
  MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1,

  /**
   * 6: We have sent 100 CONTINUE (or do not need to).  Read the message body.
   */
  MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1,

  /**
   * 7: We got the request body.  Wait for a line of the footer.
   */
  MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,

  /**
   * 8: We got part of a line of the footer.  Wait for the
   * rest.
   */
  MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1,

  /**
   * 9: We received the entire footer.  Wait for a response to be queued
   * and prepare the response headers.
   */
  MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1,

  /**
   * 10: We have prepared the response headers in the writ buffer.
   * Send the response headers.
   */
  MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1,

  /**
   * 11: We have sent the response headers.  Get ready to send the body.
   */
  MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,

  /**
   * 12: We are ready to send a part of a non-chunked body.  Send it.
   */
  MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1,

  /**
   * 13: We are waiting for the client to provide more
   * data of a non-chunked body.
   */
  MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1,

  /**
   * 14: We are ready to send a chunk.
   */
  MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1,

  /**
   * 15: We are waiting for the client to provide a chunk of the body.
   */
  MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,

  /**
   * 16: We have sent the response body. Prepare the footers.
   */
  MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1,

  /**
   * 17: We have prepared the response footer.  Send it.
   */
  MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1,

  /**
   * 18: We have sent the response footer.  Shutdown or restart.
   */
  MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1,

  /**
   * 19: This connection is closed (no more activity
   * allowed).
   */
  MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,

  /*
   *  SSL/TLS connection states
   */

  /**
   * The initial connection state for all secure connectoins
   * Handshake messages will be processed in this state & while
   * in the 'MHD_TLS_HELLO_REQUEST' state
   */
  MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_CLOSED + 1

};

/**
 * Should all state transitions be printed to stderr?
 */
#define DEBUG_STATES MHD_NO

#if HAVE_MESSAGES
char *MHD_state_to_string (enum MHD_CONNECTION_STATE state);
#endif

/**
 * Function to receive plaintext data.
 *
 * @param conn the connection struct
 * @param write_to where to write received data
 * @param max_bytes maximum number of bytes to receive
 * @return number of bytes written to write_to
 */
typedef ssize_t (*ReceiveCallback) (struct MHD_Connection * conn,
                                    void *write_to, size_t max_bytes);


/**
 * Function to transmit plaintext data.
 *
 * @param conn the connection struct
 * @param read_from where to read data to transmit
 * @param max_bytes maximum number of bytes to transmit
 * @return number of bytes transmitted
 */
typedef ssize_t (*TransmitCallback) (struct MHD_Connection * conn,
                                     const void *write_to, size_t max_bytes);


/**
 * State kept for each HTTP request.
 */
struct MHD_Connection
{

  /**
   * This is a linked list.
   */
  struct MHD_Connection *next;

  /**
   * Reference to the MHD_Daemon struct.
   */
  struct MHD_Daemon *daemon;

  /**
   * Linked list of parsed headers.
   */
  struct MHD_HTTP_Header *headers_received;

  /**
   * Response to transmit (initially NULL).
   */
  struct MHD_Response *response;

  /**
   * The memory pool is created whenever we first read
   * from the TCP stream and destroyed at the end of
   * each request (and re-created for the next request).
   * In the meantime, this pointer is NULL.  The
   * pool is used for all connection-related data
   * except for the response (which maybe shared between
   * connections) and the IP address (which persists
   * across individual requests).
   */
  struct MemoryPool *pool;

  /**
   * We allow the main application to associate some
   * pointer with the connection.  Here is where we
   * store it.  (MHD does not know or care what it
   * is).
   */
  void *client_context;

  /**
   * Request method.  Should be GET/POST/etc.  Allocated
   * in pool.
   */
  char *method;

  /**
   * Requested URL (everything after "GET" only).  Allocated
   * in pool.
   */
  char *url;

  /**
   * HTTP version string (i.e. http/1.1).  Allocated
   * in pool.
   */
  char *version;

  /**
   * Buffer for reading requests.   Allocated
   * in pool.  Actually one byte larger than
   * read_buffer_size (if non-NULL) to allow for
   * 0-termination.
   */
  char *read_buffer;

  /**
   * Buffer for writing response (headers only).  Allocated
   * in pool.
   */
  char *write_buffer;

  /**
   * Last incomplete header line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *last;

  /**
   * Position after the colon on the last incomplete header
   * line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *colon;

  /**
   * Foreign address (of length addr_len).  MALLOCED (not
   * in pool!).
   */
  struct sockaddr_in *addr;

  /**
   * Thread for this connection (if we are using
   * one thread per connection).
   */
  pthread_t pid;

  /**
   * Size of read_buffer (in bytes).  This value indicates
   * how many bytes we're willing to read into the buffer;
   * the real buffer is one byte longer to allow for
   * adding zero-termination (when needed).
   */
  size_t read_buffer_size;

  /**
   * Position where we currently append data in
   * read_buffer (last valid position).
   */
  size_t read_buffer_offset;

  /**
   * Size of write_buffer (in bytes).
   */
  size_t write_buffer_size;

  /**
   * Offset where we are with sending from write_buffer.
   */
  size_t write_buffer_send_offset;

  /**
   * Last valid location in write_buffer (where do we
   * append and up to where is it safe to send?)
   */
  size_t write_buffer_append_offset;

  /**
   * How many more bytes of the body do we expect
   * to read? "-1" for unknown.
   */
  uint64_t remaining_upload_size;

  /**
   * Current write position in the actual response
   * (excluding headers, content only; should be 0
   * while sending headers).
   */
  uint64_t response_write_position;

  /**
   * Position in the 100 CONTINUE message that
   * we need to send when receiving http 1.1 requests.
   */
  size_t continue_message_write_offset;

  /**
   * Length of the foreign address.
   */
  socklen_t addr_len;

  /**
   * Last time this connection had any activity
   * (reading or writing).
   */
  time_t last_activity;

  /**
   * Did we ever call the "default_handler" on this connection?
   * (this flag will determine if we call the 'notify_completed'
   * handler when the connection closes down).
   */
  int client_aware;

  /**
   * Socket for this connection.  Set to -1 if
   * this connection has died (daemon should clean
   * up in that case).
   */
  int socket_fd;

  /**
   * Has this socket been closed for reading (i.e.
   * other side closed the connection)?  If so,
   * we must completely close the connection once
   * we are done sending our response (and stop
   * trying to read from this socket).
   */
  int read_closed;

  /**
   * State in the FSM for this connection.
   */
  enum MHD_CONNECTION_STATE state;

  /**
   * HTTP response code.  Only valid if response object
   * is already set.
   */
  unsigned int responseCode;

  /**
   * Set to MHD_YES if the response's content reader
   * callback failed to provide data the last time
   * we tried to read from it.  In that case, the
   * write socket should be marked as unready until
   * the CRC call succeeds.
   */
  int response_unready;

  /**
   * Are we sending with chunked encoding?
   */
  int have_chunked_response;

  /**
   * Are we receiving with chunked encoding?  This will be set to
   * MHD_YES after we parse the headers and are processing the body
   * with chunks.  After we are done with the body and we are
   * processing the footers; once the footers are also done, this will
   * be set to MHD_NO again (before the final call to the handler).
   */
  int have_chunked_upload;

  /**
   * If we are receiving with chunked encoding, where are we right
   * now?  Set to 0 if we are waiting to receive the chunk size;
   * otherwise, this is the size of the current chunk.  A value of
   * zero is also used when we're at the end of the chunks.
   */
  unsigned int current_chunk_size;

  /**
   * If we are receiving with chunked encoding, where are we currently
   * with respect to the current chunk (at what offset / position)?
   */
  unsigned int current_chunk_offset;

  /**
   * Handler used for processing read connection operations
   */
  int (*read_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing write connection operations
   */
  int (*write_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing idle connection operations
   */
  int (*idle_handler) (struct MHD_Connection * connection);

  /**
   * Function used for reading HTTP request stream.
   */
  ReceiveCallback recv_cls;

  /**
   * Function used for writing HTTP response stream.
   */
  TransmitCallback send_cls;

#if HTTPS_SUPPORT
  /**
   * State required for HTTPS/SSL/TLS support.
   */
  gnutls_session_t tls_session;

  /**
   * Memory location to return for protocol session info.
   */
  int protocol;

  /**
   * Memory location to return for protocol session info.
   */
  int cipher;
#endif
};

typedef void * (*LogCallback)(void * cls, const char * uri);

/**
 * State kept for each MHD daemon.
 */
struct MHD_Daemon
{

  /**
   * Callback function for all requests.
   */
  MHD_AccessHandlerCallback default_handler;

  /**
   * Closure argument to default_handler.
   */
  void *default_handler_cls;

  /**
   * Linked list of our current connections.
   */
  struct MHD_Connection *connections;

  /**
   * Function to call to check if we should
   * accept or reject an incoming request.
   * May be NULL.
   */
  MHD_AcceptPolicyCallback apc;

  /**
   * Closure argument to apc.
   */
  void *apc_cls;

  /**
   * Function to call when we are done processing
   * a particular request.  May be NULL.
   */
  MHD_RequestCompletedCallback notify_completed;

  /**
   * Closure argument to notify_completed.
   */
  void *notify_completed_cls;

  /**
   * Function to call with the full URI at the
   * beginning of request processing.  May be NULL.
   * <p>
   * Returns the initial pointer to internal state
   * kept by the client for the request.
   */
  LogCallback uri_log_callback;

  /**
   * Closure argument to uri_log_callback.
   */
  void *uri_log_callback_cls;

#if HAVE_MESSAGES
  /**
   * Function for logging error messages (if we
   * support error reporting).
   */
  void (*custom_error_log) (void *cls, const char *fmt, va_list va);

  /**
   * Closure argument to custom_error_log.
   */
  void *custom_error_log_cls;
#endif

  /**
   * PID of the select thread (if we have internal select)
   */
  pthread_t pid;

  /**
   * Listen socket.
   */
  int socket_fd;

  /**
   * Are we shutting down?
   */
  int shutdown;

  /**
   * Size of the per-connection memory pools.
   */
  size_t pool_size;

  /**
   * Limit on the number of parallel connections.
   */
  unsigned int max_connections;

  /**
   * After how many seconds of inactivity should
   * connections time out?  Zero for no timeout.
   */
  unsigned int connection_timeout;

  /**
   * Maximum number of connections per IP, or 0 for
   * unlimited.
   */
  unsigned int per_ip_connection_limit;

  /**
   * Table storing number of connections per IP
   */
  void *per_ip_connection_count;

  /**
   * Mutex for per-IP connection counts
   */
  pthread_mutex_t per_ip_connection_mutex;

  /**
   * Daemon's options.
   */
  enum MHD_OPTION options;

  /**
   * Listen port.
   */
  unsigned short port;

#if HTTPS_SUPPORT
  /**
   * Desired cipher algorithms.
   */
  gnutls_priority_t priority_cache;

  /**
   * What kind of credentials are we offering
   * for SSL/TLS?
   */
  gnutls_credentials_type_t cred_type;

  /**
   * Server x509 credentials
   */
  gnutls_certificate_credentials_t x509_cred;

  /**
   * Diffie-Hellman parameters
   */
  gnutls_dh_params_t dh_params;

  /**
   * Pointer to our SSL/TLS key (in ASCII) in memory.
   */
  const char *https_mem_key;

  /**
   * Pointer to our SSL/TLS certificate (in ASCII) in memory.
   */
  const char *https_mem_cert;

#endif

  /**
   * Pointer to master daemon (NULL if this is the master)
   */
  struct MHD_Daemon *master;

  /**
   * Worker daemons (one per thread)
   */
  struct MHD_Daemon *worker_pool;

  /**
   * Number of worker daemons
   */
  unsigned int worker_pool_size;
};


#if EXTRA_CHECKS
#define EXTRA_CHECK(a) if (!(a)) abort();
#else
#define EXTRA_CHECK(a)
#endif



#endif

Added luasupport/HTTP/libmicrohttpd-PPC/Include/microhttpd.h.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
/*
     This file is part of libmicrohttpd
     (C) 2006, 2007, 2008, 2009, 2010 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file microhttpd.h
 * @brief public interface to libmicrohttpd
 * @author Christian Grothoff
 * @author Chris GauthierDickey
 *
 * All symbols defined in this header start with MHD.  MHD is a small
 * HTTP daemon library.  As such, it does not have any API for logging
 * errors (you can only enable or disable logging to stderr).  Also,
 * it may not support all of the HTTP features directly, where
 * applicable, portions of HTTP may have to be handled by clients of
 * the library.<p>
 *
 * The library is supposed to handle everything that it must handle
 * (because the API would not allow clients to do this), such as basic
 * connection management; however, detailed interpretations of headers
 * -- such as range requests -- and HTTP methods are left to clients.
 * The library does understand HEAD and will only send the headers of
 * the response and not the body, even if the client supplied a body.
 * The library also understands headers that control connection
 * management (specifically, "Connection: close" and "Expect: 100
 * continue" are understood and handled automatically).<p>
 *
 * MHD understands POST data and is able to decode certain formats
 * (at the moment only "application/x-www-form-urlencoded" and
 * "mulitpart/formdata"). Unsupported encodings and large POST 
 * submissions may require the application to manually process
 * the stream, which is provided to the main application (and thus can be
 * processed, just not conveniently by MHD).<p>
 *
 * The header file defines various constants used by the HTTP protocol.
 * This does not mean that MHD actually interprets all of these
 * values.  The provided constants are exported as a convenience
 * for users of the library.  MHD does not verify that transmitted
 * HTTP headers are part of the standard specification; users of the
 * library are free to define their own extensions of the HTTP
 * standard and use those with MHD.<p>
 *
 * All functions are guaranteed to be completely reentrant and
 * thread-safe (with the exception of 'MHD_set_connection_value',
 * which must only be used in a particular context).<p>
 *
 * NEW: Before including "microhttpd.h" you should add the necessary
 * includes to define the "uint64_t", "size_t", "fd_set", "socklen_t"
 * and "struct sockaddr" data types (which headers are needed may
 * depend on your platform; for possible suggestions consult
 * "platform.h" in the MHD distribution).
 *
 */

#ifndef MHD_MICROHTTPD_H
#define MHD_MICROHTTPD_H

#ifdef __cplusplus
extern "C"
{
#if 0                           /* keep Emacsens' auto-indent happy */
}
#endif
#endif

/**
 * Current version of the library.
 */
#define MHD_VERSION 0x00090000

/**
 * MHD-internal return code for "YES".
 */
#define MHD_YES 1

/**
 * MHD-internal return code for "NO".
 */
#define MHD_NO 0

/**
 * Constant used to indicate unknown size (use when
 * creating a response).
 */
#ifdef UINT64_MAX
#define MHD_SIZE_UNKNOWN UINT64_MAX
#else
#define MHD_SIZE_UNKNOWN  ((uint64_t) -1LL)
#endif

/**
 * HTTP response codes.
 */
#define MHD_HTTP_CONTINUE 100
#define MHD_HTTP_SWITCHING_PROTOCOLS 101
#define MHD_HTTP_PROCESSING 102

#define MHD_HTTP_OK 200
#define MHD_HTTP_CREATED 201
#define MHD_HTTP_ACCEPTED 202
#define MHD_HTTP_NON_AUTHORITATIVE_INFORMATION 203
#define MHD_HTTP_NO_CONTENT 204
#define MHD_HTTP_RESET_CONTENT 205
#define MHD_HTTP_PARTIAL_CONTENT 206
#define MHD_HTTP_MULTI_STATUS 207

#define MHD_HTTP_MULTIPLE_CHOICES 300
#define MHD_HTTP_MOVED_PERMANENTLY 301
#define MHD_HTTP_FOUND 302
#define MHD_HTTP_SEE_OTHER 303
#define MHD_HTTP_NOT_MODIFIED 304
#define MHD_HTTP_USE_PROXY 305
#define MHD_HTTP_SWITCH_PROXY 306
#define MHD_HTTP_TEMPORARY_REDIRECT 307

#define MHD_HTTP_BAD_REQUEST 400
#define MHD_HTTP_UNAUTHORIZED 401
#define MHD_HTTP_PAYMENT_REQUIRED 402
#define MHD_HTTP_FORBIDDEN 403
#define MHD_HTTP_NOT_FOUND 404
#define MHD_HTTP_METHOD_NOT_ALLOWED 405
#define MHD_HTTP_METHOD_NOT_ACCEPTABLE 406
#define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407
#define MHD_HTTP_REQUEST_TIMEOUT 408
#define MHD_HTTP_CONFLICT 409
#define MHD_HTTP_GONE 410
#define MHD_HTTP_LENGTH_REQUIRED 411
#define MHD_HTTP_PRECONDITION_FAILED 412
#define MHD_HTTP_REQUEST_ENTITY_TOO_LARGE 413
#define MHD_HTTP_REQUEST_URI_TOO_LONG 414
#define MHD_HTTP_UNSUPPORTED_MEDIA_TYPE 415
#define MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE 416
#define MHD_HTTP_EXPECTATION_FAILED 417
#define MHD_HTTP_UNPROCESSABLE_ENTITY 422
#define MHD_HTTP_LOCKED 423
#define MHD_HTTP_FAILED_DEPENDENCY 424
#define MHD_HTTP_UNORDERED_COLLECTION 425
#define MHD_HTTP_UPGRADE_REQUIRED 426
#define MHD_HTTP_RETRY_WITH 449

#define MHD_HTTP_INTERNAL_SERVER_ERROR 500
#define MHD_HTTP_NOT_IMPLEMENTED 501
#define MHD_HTTP_BAD_GATEWAY 502
#define MHD_HTTP_SERVICE_UNAVAILABLE 503
#define MHD_HTTP_GATEWAY_TIMEOUT 504
#define MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED 505
#define MHD_HTTP_VARIANT_ALSO_NEGOTIATES 506
#define MHD_HTTP_INSUFFICIENT_STORAGE 507
#define MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED 509
#define MHD_HTTP_NOT_EXTENDED 510

/* See also: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html */
#define MHD_HTTP_HEADER_ACCEPT "Accept"
#define MHD_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset"
#define MHD_HTTP_HEADER_ACCEPT_ENCODING "Accept-Encoding"
#define MHD_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language"
#define MHD_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges"
#define MHD_HTTP_HEADER_AGE "Age"
#define MHD_HTTP_HEADER_ALLOW "Allow"
#define MHD_HTTP_HEADER_AUTHORIZATION "Authorization"
#define MHD_HTTP_HEADER_CACHE_CONTROL "Cache-Control"
#define MHD_HTTP_HEADER_CONNECTION "Connection"
#define MHD_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
#define MHD_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language"
#define MHD_HTTP_HEADER_CONTENT_LENGTH "Content-Length"
#define MHD_HTTP_HEADER_CONTENT_LOCATION "Content-Location"
#define MHD_HTTP_HEADER_CONTENT_MD5 "Content-MD5"
#define MHD_HTTP_HEADER_CONTENT_RANGE "Content-Range"
#define MHD_HTTP_HEADER_CONTENT_TYPE "Content-Type"
#define MHD_HTTP_HEADER_COOKIE "Cookie"
#define MHD_HTTP_HEADER_DATE "Date"
#define MHD_HTTP_HEADER_ETAG "ETag"
#define MHD_HTTP_HEADER_EXPECT "Expect"
#define MHD_HTTP_HEADER_EXPIRES "Expires"
#define MHD_HTTP_HEADER_FROM "From"
#define MHD_HTTP_HEADER_HOST "Host"
#define MHD_HTTP_HEADER_IF_MATCH "If-Match"
#define MHD_HTTP_HEADER_IF_MODIFIED_SINCE "If-Modified-Since"
#define MHD_HTTP_HEADER_IF_NONE_MATCH "If-None-Match"
#define MHD_HTTP_HEADER_IF_RANGE "If-Range"
#define MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE "If-Unmodified-Since"
#define MHD_HTTP_HEADER_LAST_MODIFIED "Last-Modified"
#define MHD_HTTP_HEADER_LOCATION "Location"
#define MHD_HTTP_HEADER_MAX_FORWARDS "Max-Forwards"
#define MHD_HTTP_HEADER_PRAGMA "Pragma"
#define MHD_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate"
#define MHD_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization"
#define MHD_HTTP_HEADER_RANGE "Range"
#define MHD_HTTP_HEADER_REFERER "Referer"
#define MHD_HTTP_HEADER_RETRY_AFTER "Retry-After"
#define MHD_HTTP_HEADER_SERVER "Server"
#define MHD_HTTP_HEADER_SET_COOKIE "Set-Cookie"
#define MHD_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2"
#define MHD_HTTP_HEADER_TE "TE"
#define MHD_HTTP_HEADER_TRAILER "Trailer"
#define MHD_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding"
#define MHD_HTTP_HEADER_UPGRADE "Upgrade"
#define MHD_HTTP_HEADER_USER_AGENT "User-Agent"
#define MHD_HTTP_HEADER_VARY "Vary"
#define MHD_HTTP_HEADER_VIA "Via"
#define MHD_HTTP_HEADER_WARNING "Warning"
#define MHD_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate"

/**
 * HTTP versions (used to match against the first line of the
 * HTTP header as well as in the response code).
 */
#define MHD_HTTP_VERSION_1_0 "HTTP/1.0"
#define MHD_HTTP_VERSION_1_1 "HTTP/1.1"

/**
 * HTTP methods
 */
#define MHD_HTTP_METHOD_CONNECT "CONNECT"
#define MHD_HTTP_METHOD_DELETE "DELETE"
#define MHD_HTTP_METHOD_GET "GET"
#define MHD_HTTP_METHOD_HEAD "HEAD"
#define MHD_HTTP_METHOD_OPTIONS "OPTIONS"
#define MHD_HTTP_METHOD_POST "POST"
#define MHD_HTTP_METHOD_PUT "PUT"
#define MHD_HTTP_METHOD_TRACE "TRACE"

/**
 * HTTP POST encodings, see also
 * http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4
 */
#define MHD_HTTP_POST_ENCODING_FORM_URLENCODED "application/x-www-form-urlencoded"
#define MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA "multipart/form-data"

/**
 * Options for the MHD daemon.  Note that if neither
 * MHD_USER_THREAD_PER_CONNECTION nor MHD_USE_SELECT_INTERNALLY are
 * used, the client wants control over the process and will call the
 * appropriate microhttpd callbacks.<p>
 *
 * Starting the daemon may also fail if a particular option is not
 * implemented or not supported on the target platform (i.e. no
 * support for SSL, threads or IPv6).
 */
enum MHD_FLAG
{
  /**
   * No options selected.
   */
  MHD_NO_FLAG = 0,

  /**
   * Run in debug mode.  If this flag is used, the
   * library should print error messages and warnings
   * to stderr.
   */
  MHD_USE_DEBUG = 1,

  /**
   * Run in https mode.
   */
  MHD_USE_SSL = 2,

  /**
   * Run using one thread per connection.
   */
  MHD_USE_THREAD_PER_CONNECTION = 4,

  /**
   * Run using an internal thread doing SELECT.
   */
  MHD_USE_SELECT_INTERNALLY = 8,

  /**
   * Run using the IPv6 protocol (otherwise, MHD will
   * just support IPv4).
   */
  MHD_USE_IPv6 = 16,

  /**
   * Be pedantic about the protocol (as opposed to as tolerant as
   * possible).  Specifically, at the moment, this flag causes MHD to
   * reject http 1.1 connections without a "Host" header.  This is
   * required by the standard, but of course in violation of the "be
   * as liberal as possible in what you accept" norm.  It is
   * recommended to turn this ON if you are testing clients against
   * MHD, and OFF in production.
   */
  MHD_USE_PEDANTIC_CHECKS = 32,

  /**
   * Use poll instead of select. This allows sockets with fd >= FD_SETSIZE.
   * This option only works in conjunction with MHD_USE_THREAD_PER_CONNECTION
   * (at this point).
   */
  MHD_USE_POLL = 64
};

/**
 * MHD options.  Passed in the varargs portion
 * of MHD_start_daemon.
 */
enum MHD_OPTION
{

  /**
   * No more options / last option.  This is used
   * to terminate the VARARGs list.
   */
  MHD_OPTION_END = 0,

  /**
   * Maximum memory size per connection (followed by a
   * size_t).
   */
  MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1,

  /**
   * Maximum number of concurrent connections to
   * accept (followed by an unsigned int).
   */
  MHD_OPTION_CONNECTION_LIMIT = 2,

  /**
   * After how many seconds of inactivity should a
   * connection automatically be timed out? (followed
   * by an unsigned int; use zero for no timeout).
   */
  MHD_OPTION_CONNECTION_TIMEOUT = 3,

  /**
   * Register a function that should be called whenever a request has
   * been completed (this can be used for application-specific clean
   * up).  Requests that have never been presented to the application
   * (via MHD_AccessHandlerCallback) will not result in
   * notifications.<p>
   *
   * This option should be followed by TWO pointers.  First a pointer
   * to a function of type "MHD_RequestCompletedCallback" and second a
   * pointer to a closure to pass to the request completed callback.
   * The second pointer maybe NULL.
   */
  MHD_OPTION_NOTIFY_COMPLETED = 4,

  /**
   * Limit on the number of (concurrent) connections made to the
   * server from the same IP address.  Can be used to prevent one
   * IP from taking over all of the allowed connections.  If the
   * same IP tries to establish more than the specified number of
   * connections, they will be immediately rejected.  The option
   * should be followed by an "unsigned int".  The default is
   * zero, which means no limit on the number of connections
   * from the same IP address.
   */
  MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5,

  /**
   * Bind daemon to the supplied sockaddr. this option should be followed by a
   * 'struct sockaddr *'.  If 'MHD_USE_IPv6' is specified, the 'struct sockaddr*'
   * should point to a 'struct sockaddr_in6', otherwise to a 'struct sockaddr_in'.
   */
  MHD_OPTION_SOCK_ADDR = 6,

  /**
   * Specify a function that should be called before parsing the URI from
   * the client.  The specified callback function can be used for processing
   * the URI (including the options) before it is parsed.  The URI after
   * parsing will no longer contain the options, which maybe inconvenient for
   * logging.  This option should be followed by two arguments, the first
   * one must be of the form
   * <pre>
   *  void * my_logger(void * cls, const char * uri)
   * </pre>
   * where the return value will be passed as
   * (*con_cls) in calls to the MHD_AccessHandlerCallback
   * when this request is processed later; returning a
   * value of NULL has no special significance (however,
   * note that if you return non-NULL, you can no longer
   * rely on the first call to the access handler having
   * NULL == *con_cls on entry;)
   * "cls" will be set to the second argument following
   * MHD_OPTION_URI_LOG_CALLBACK.  Finally, uri will
   * be the 0-terminated URI of the request.
   */
  MHD_OPTION_URI_LOG_CALLBACK = 7,

  /**
   * Memory pointer for the private key (key.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
   */
  MHD_OPTION_HTTPS_MEM_KEY = 8,

  /**
   * Memory pointer for the certificate (cert.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
   */
  MHD_OPTION_HTTPS_MEM_CERT = 9,

  /**
   * Daemon credentials type.
   * Followed by an argument of type
   * "gnutls_credentials_type_t".
   */
  MHD_OPTION_HTTPS_CRED_TYPE = 10,

  /**
   * Memory pointer to a "const char*" specifying the
   * cipher algorithm (default: "NORMAL").
   */
  MHD_OPTION_HTTPS_PRIORITIES = 11,

  /**
   * Pass a listen socket for MHD to use (systemd-style).  If this
   * option is used, MHD will not open its own listen socket(s). The
   * argument passed must be of type "int" and refer to an
   * existing socket that has been bound to a port and is listening.
   */
  MHD_OPTION_LISTEN_SOCKET = 12,

  /**
   * Use the given function for logging error messages.
   * This option must be followed by two arguments; the
   * first must be a pointer to a function
   * of type "void fun(void * arg, const char * fmt, va_list ap)"
   * and the second a pointer "void*" which will
   * be passed as the "arg" argument to "fun".
   * <p>
   * Note that MHD will not generate any log messages
   * if it was compiled without the "--enable-messages"
   * flag being set.
   */
  MHD_OPTION_EXTERNAL_LOGGER = 13,

  /**
   * Number (unsigned int) of threads in thread pool. Enable
   * thread pooling by setting this value to to something
   * greater than 1. Currently, thread model must be
   * MHD_USE_SELECT_INTERNALLY if thread pooling is enabled
   * (MHD_start_daemon returns NULL for an unsupported thread
   * model).
   */
  MHD_OPTION_THREAD_POOL_SIZE = 14,

  /**
   * Additional options given in an array of "struct MHD_OptionItem".
   * The array must be terminated with an entry '{MHD_OPTION_END, 0, NULL}'.
   * An example for code using MHD_OPTION_ARRAY is:
   * <code>
   * struct MHD_OptionItem ops[] = {
   * { MHD_OPTION_CONNECTION_LIMIT, 100, NULL },
   * { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL },
   * { MHD_OPTION_END, 0, NULL }
   * };
   * d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL,
   *                      MHD_OPTION_ARRAY, ops,
   *                      MHD_OPTION_END);
   * </code>
   * For options that expect a single pointer argument, the
   * second member of the struct MHD_OptionItem is ignored.
   * For options that expect two pointer arguments, the first
   * argument must be cast to 'intptr_t'.
   */
  MHD_OPTION_ARRAY = 15
};


/**
 * Entry in an MHD_OPTION_ARRAY.
 */
struct MHD_OptionItem
{
  /**
   * Which option is being given.  Use MHD_OPTION_END
   * to terminate the array.
   */
  enum MHD_OPTION option;

  /**
   * Option value (for integer arguments, and for options requiring
   * two pointer arguments); should be 0 for options that take no
   * arguments or only a single pointer argument.
   */
  intptr_t value;

  /**
   * Pointer option value (use NULL for options taking no arguments
   * or only an integer option).
   */
  void *ptr_value;

};


/**
 * The MHD_ValueKind specifies the source of
 * the key-value pairs in the HTTP protocol.
 */
enum MHD_ValueKind
{

  /**
   * Response header
   */
  MHD_RESPONSE_HEADER_KIND = 0,

  /**
   * HTTP header.
   */
  MHD_HEADER_KIND = 1,

  /**
   * Cookies.  Note that the original HTTP header containing
   * the cookie(s) will still be available and intact.
   */
  MHD_COOKIE_KIND = 2,

  /**
   * POST data.  This is available only if a content encoding
   * supported by MHD is used (currently only URL encoding),
   * and only if the posted content fits within the available
   * memory pool.  Note that in that case, the upload data
   * given to the MHD_AccessHandlerCallback will be
   * empty (since it has already been processed).
   */
  MHD_POSTDATA_KIND = 4,

  /**
   * GET (URI) arguments.
   */
  MHD_GET_ARGUMENT_KIND = 8,

  /**
   * HTTP footer (only for http 1.1 chunked encodings).
   */
  MHD_FOOTER_KIND = 16
};

/**
 * The MHD_RequestTerminationCode specifies reasons
 * why a request has been terminated (or completed).
 */
enum MHD_RequestTerminationCode
{

  /**
   * We finished sending the response.
   */
  MHD_REQUEST_TERMINATED_COMPLETED_OK = 0,

  /**
   * Error handling the connection (resources
   * exhausted, other side closed connection,
   * application error accepting request, etc.)
   */
  MHD_REQUEST_TERMINATED_WITH_ERROR = 1,

  /**
   * No activity on the connection for the number
   * of seconds specified using
   * MHD_OPTION_CONNECTION_TIMEOUT.
   */
  MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2,

  /**
   * We had to close the session since MHD was being
   * shut down.
   */
  MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3

};


/**
 * Values of this enum are used to specify what
 * information about a connection is desired.
 */
enum MHD_ConnectionInfoType
{
  /**
   * What cipher algorithm is being used.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CIPHER_ALGO,

  /**
   *
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_PROTOCOL,

  /**
   * Obtain IP address of the client.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CLIENT_ADDRESS,

  /**
   * Get the GNUTLS session handle.
   */
  MHD_CONNECTION_INFO_GNUTLS_SESSION
};

/**
 * Values of this enum are used to specify what
 * information about a deamon is desired.
 */
enum MHD_DaemonInfoType
{
  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_CipherAlgorithm').
   */
  MHD_DAEMON_INFO_KEY_SIZE,

  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_HashAlgorithm').
   */
  MHD_DAEMON_INFO_MAC_KEY_SIZE,

  /**
   * Request the file descriptor for the listening socket.
   * No extra arguments should be passed.
   */
  MHD_DAEMON_INFO_LISTEN_FD
};



/**
 * Handle for the daemon (listening on a socket for HTTP traffic).
 */
struct MHD_Daemon;

/**
 * Handle for a connection / HTTP request.  With HTTP/1.1, multiple
 * requests can be run over the same connection.  However, MHD will
 * only show one request per TCP connection to the client at any given
 * time.
 */
struct MHD_Connection;

/**
 * Handle for a response.
 */
struct MHD_Response;

/**
 * Handle for POST processing.
 */
struct MHD_PostProcessor;

/**
 * Callback for serious error condition. The default action is to abort().
 * @param cls user specified value
 * @param file where the error occured
 * @param line where the error occured
 * @param reason error detail, may be NULL
 */
typedef void (*MHD_PanicCallback) (void *cls,
                                   const char *file,
                                   unsigned int line,
                                   const char *reason);

/**
 * Allow or deny a client to connect.
 *
 * @param addr address information from the client
 * @param addrlen length of the address information
 * @return MHD_YES if connection is allowed, MHD_NO if not
 */
typedef int
  (*MHD_AcceptPolicyCallback) (void *cls,
                               const struct sockaddr * addr,
                               socklen_t addrlen);

/**
 * A client has requested the given url using the given method ("GET",
 * "PUT", "DELETE", "POST", etc).  The callback must call MHS
 * callbacks to provide content to give back to the client and return
 * an HTTP status code (i.e. 200 for OK, 404, etc.).
 *
 * @param cls argument given together with the function
 *        pointer when the handler was registered with MHD
 * @param url the requested url
 * @param method the HTTP method used ("GET", "PUT", etc.)
 * @param version the HTTP version string (i.e. "HTTP/1.1")
 * @param upload_data the data being uploaded (excluding HEADERS,
 *        for a POST that fits into memory and that is encoded
 *        with a supported encoding, the POST data will NOT be
 *        given in upload_data and is instead available as
 *        part of MHD_get_connection_values; very large POST
 *        data *will* be made available incrementally in
 *        upload_data)
 * @param upload_data_size set initially to the size of the
 *        upload_data provided; the method must update this
 *        value to the number of bytes NOT processed;
 * @param con_cls pointer that the callback can set to some
 *        address and that will be preserved by MHD for future
 *        calls for this request; since the access handler may
 *        be called many times (i.e., for a PUT/POST operation
 *        with plenty of upload data) this allows the application
 *        to easily associate some request-specific state.
 *        If necessary, this state can be cleaned up in the
 *        global "MHD_RequestCompleted" callback (which
 *        can be set with the MHD_OPTION_NOTIFY_COMPLETED).
 *        Initially, <tt>*con_cls</tt> will be NULL.
 * @return MHS_YES if the connection was handled successfully,
 *         MHS_NO if the socket must be closed due to a serios
 *         error while handling the request
 */
typedef int
  (*MHD_AccessHandlerCallback) (void *cls,
                                struct MHD_Connection * connection,
                                const char *url,
                                const char *method,
                                const char *version,
                                const char *upload_data,
                                size_t *upload_data_size,
                                void **con_cls);

/**
 * Signature of the callback used by MHD to notify the
 * application about completed requests.
 *
 * @param cls client-defined closure
 * @param connection connection handle
 * @param con_cls value as set by the last call to
 *        the MHD_AccessHandlerCallback
 * @param toe reason for request termination
 * @see MHD_OPTION_NOTIFY_COMPLETED
 */
typedef void
  (*MHD_RequestCompletedCallback) (void *cls,
                                   struct MHD_Connection * connection,
                                   void **con_cls,
                                   enum MHD_RequestTerminationCode toe);

/**
 * Iterator over key-value pairs.  This iterator
 * can be used to iterate over all of the cookies,
 * headers, or POST-data fields of a request, and
 * also to iterate over the headers that have been
 * added to a response.
 *
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_KeyValueIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key, const char *value);

/**
 * Callback used by libmicrohttpd in order to obtain content.  The
 * callback is to copy at most "max" bytes of content into "buf".  The
 * total number of bytes that has been placed into "buf" should be
 * returned.<p>
 *
 * Note that returning zero will cause libmicrohttpd to try again,
 * either "immediately" if in multi-threaded mode (in which case the
 * callback may want to do blocking operations) or in the next round
 * if MHD_run is used.  Returning 0 for a daemon that runs in internal
 * select mode is an error (since it would result in busy waiting) and
 * will cause the program to be aborted (abort()).
 *
 * @param cls extra argument to the callback
 * @param pos position in the datastream to access;
 *        note that if an MHD_Response object is re-used,
 *        it is possible for the same content reader to
 *        be queried multiple times for the same data;
 *        however, if an MHD_Response is not re-used,
 *        libmicrohttpd guarantees that "pos" will be
 *        the sum of all non-negative return values
 *        obtained from the content reader so far.
 * @return -1 for the end of transmission (or on error);
 *  if a content transfer size was pre-set and the callback
 *  has provided fewer than that amount of data,
 *  MHD will close the connection with the client;
 *  if no content size was specified and this is an
 *  http 1.1 connection using chunked encoding, MHD will
 *  interpret "-1" as the normal end of the transfer
 *  (possibly allowing the client to perform additional
 *  requests using the same TCP connection).
 */
typedef int
  (*MHD_ContentReaderCallback) (void *cls,
				uint64_t pos,
				char *buf,
				int max);

/**
 * This method is called by libmicrohttpd if we
 * are done with a content reader.  It should
 * be used to free resources associated with the
 * content reader.
 */
typedef void (*MHD_ContentReaderFreeCallback) (void *cls);

/**
 * Iterator over key-value pairs where the value
 * maybe made available in increments and/or may
 * not be zero-terminated.  Used for processing
 * POST data.
 *
 * @param cls user-specified closure
 * @param kind type of the value
 * @param key 0-terminated key for the value
 * @param filename name of the uploaded file, NULL if not known
 * @param content_type mime-type of the data, NULL if not known
 * @param transfer_encoding encoding of the data, NULL if not known
 * @param data pointer to size bytes of data at the
 *              specified offset
 * @param off offset of data in the overall value
 * @param size number of bytes in data available
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_PostDataIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key,
                           const char *filename,
                           const char *content_type,
                           const char *transfer_encoding,
                           const char *data, uint64_t off, size_t size);

/* **************** Daemon handling functions ***************** */

/**
 * Start a webserver on the given port.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @param ... list of options (type-value pairs,
 *        terminated with MHD_OPTION_END).
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon_va (unsigned int options,
                                        unsigned short port,
                                        MHD_AcceptPolicyCallback apc,
                                        void *apc_cls,
                                        MHD_AccessHandlerCallback dh,
                                        void *dh_cls, va_list ap);

/**
 * Start a webserver on the given port.  Variadic version of
 * MHD_start_daemon_va.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon (unsigned int flags,
                                     unsigned short port,
                                     MHD_AcceptPolicyCallback apc,
                                     void *apc_cls,
                                     MHD_AccessHandlerCallback dh,
                                     void *dh_cls, ...);

/**
 * Shutdown an http daemon.
 *
 * @param daemon daemon to stop
 */
void MHD_stop_daemon (struct MHD_Daemon *daemon);


/**
 * Obtain the select sets for this daemon.
 *
 * @param daemon daemon to get sets from
 * @param read_fd_set read set
 * @param write_fd_set write set
 * @param except_fd_set except set
 * @param max_fd increased to largest FD added (if larger
 *               than existing value); can be NULL
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int
MHD_get_fdset (struct MHD_Daemon *daemon,
               fd_set * read_fd_set,
               fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd);

/**
 * Obtain timeout value for select for this daemon
 * (only needed if connection timeout is used).  The
 * returned value is how long select should at most
 * block, not the timeout value set for connections.
 *
 * @param daemon daemon to query for timeout
 * @param timeout set to the timeout (in milliseconds)
 * @return MHD_YES on success, MHD_NO if timeouts are
 *        not used (or no connections exist that would
 *        necessiate the use of a timeout right now).
 */
int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout);


/**
 * Run webserver operations (without blocking unless
 * in client callbacks).  This method should be called
 * by clients in combination with MHD_get_fdset
 * if the client-controlled select method is used.
 *
 * @param daemon daemon to run
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int MHD_run (struct MHD_Daemon *daemon);


/* **************** Connection handling functions ***************** */

/**
 * Get all of the headers from the request.
 *
 * @param connection connection to get values from
 * @param kind types of values to iterate over
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_connection_values (struct MHD_Connection *connection,
                           enum MHD_ValueKind kind,
                           MHD_KeyValueIterator iterator, void *iterator_cls);

/**
 * This function can be used to add an entry to
 * the HTTP headers of a connection (so that the
 * MHD_get_connection_values function will return
 * them -- and the MHD PostProcessor will also
 * see them).  This maybe required in certain
 * situations (see Mantis #1399) where (broken)
 * HTTP implementations fail to supply values needed
 * by the post processor (or other parts of the
 * application).
 * <p>
 * This function MUST only be called from within
 * the MHD_AccessHandlerCallback (otherwise, access
 * maybe improperly synchronized).  Furthermore,
 * the client must guarantee that the key and
 * value arguments are 0-terminated strings that
 * are NOT freed until the connection is closed.
 * (The easiest way to do this is by passing only
 * arguments to permanently allocated strings.).
 *
 * @param connection the connection for which a
 *  value should be set
 * @param kind kind of the value
 * @param key key for the value
 * @param value the value itself
 * @return MHD_NO if the operation could not be
 *         performed due to insufficient memory;
 *         MHD_YES on success
 */
int
MHD_set_connection_value (struct MHD_Connection *connection,
                          enum MHD_ValueKind kind,
                          const char *key, const char *value);

/**
 * Sets the global error handler to a different implementation.  "cb"
 * will only be called in the case of typically fatal, serious
 * internal consistency issues.  These issues should only arise in the
 * case of serious memory corruption or similar problems with the
 * architecture.  While "cb" is allowed to return and MHD will then
 * try to continue, this is never safe.
 *
 * The default implementation that is used if no panic function is set
 * simply calls "abort".  Alternative implementations might call
 * "exit" or other similar functions.
 *
 * @param cb new error handler
 * @param cls passed to error handler
 */
void MHD_set_panic_func (MHD_PanicCallback cb, void *cls);

/**
 * Get a particular header value.  If multiple
 * values match the kind, return any one of them.
 *
 * @param connection connection to get values from
 * @param kind what kind of value are we looking for
 * @param key the header to look for
 * @return NULL if no such item was found
 */
const char *MHD_lookup_connection_value (struct MHD_Connection *connection,
                                         enum MHD_ValueKind kind,
                                         const char *key);

/**
 * Queue a response to be transmitted to the client (as soon as
 * possible but after MHD_AccessHandlerCallback returns).
 *
 * @param connection the connection identifying the client
 * @param status_code HTTP status code (i.e. 200 for OK)
 * @param response response to transmit
 * @return MHD_NO on error (i.e. reply already sent),
 *         MHD_YES on success or if message has been queued
 */
int
MHD_queue_response (struct MHD_Connection *connection,
                    unsigned int status_code, struct MHD_Response *response);


/* **************** Response manipulation functions ***************** */

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response, MHD_SIZE_UNKNOWN for unknown
 * @param block_size preferred block size for querying crc (advisory only,
 *                   MHD may still call crc using smaller chunks); this
 *                   is essentially the buffer size used for IO, clients
 *                   should pick a value that is appropriate for IO and
 *                   memory performance requirements
 * @param crc callback to use to obtain response data
 * @param crc_cls extra argument to crc
 * @param crfc callback to call to free crc_cls resources
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_callback (uint64_t size,
                                                        size_t block_size,
                                                        MHD_ContentReaderCallback
                                                        crc, void *crc_cls,
                                                        MHD_ContentReaderFreeCallback
                                                        crfc);

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param data the data itself
 * @param must_free libmicrohttpd should free data when done
 * @param must_copy libmicrohttpd must make a copy of data
 *        right away, the data maybe released anytime after
 *        this call returns
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_data (size_t size,
                                                    void *data,
                                                    int must_free,
                                                    int must_copy);


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param fd file descriptor referring to a file on disk with the data; will be closed when response is destroyed
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_fd (size_t size,
						  int fd);

/**
 * Destroy a response object and associated resources.  Note that
 * libmicrohttpd may keep some of the resources around if the response
 * is still in the queue for some clients, so the memory may not
 * necessarily be freed immediatley.
 *
 * @param response response to destroy
 */
void MHD_destroy_response (struct MHD_Response *response);

/**
 * Add a header line to the response.
 *
 * @param response response to add a header to
 * @param header the header to add
 * @param content value to add
 * @return MHD_NO on error (i.e. invalid header or content format),
 *         or out of memory
 */
int
MHD_add_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Delete a header line from the response.
 *
 * @param response response to remove a header from
 * @param header the header to delete
 * @param content value to delete
 * @return MHD_NO on error (no such header known)
 */
int
MHD_del_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Get all of the headers added to a response.
 *
 * @param response response to query
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_response_headers (struct MHD_Response *response,
                          MHD_KeyValueIterator iterator, void *iterator_cls);


/**
 * Get a particular header from the response.
 *
 * @param response response to query
 * @param key which header to get
 * @return NULL if header does not exist
 */
const char *MHD_get_response_header (struct MHD_Response *response,
                                     const char *key);


/* ********************** PostProcessor functions ********************** */

/**
 * Create a PostProcessor.
 *
 * A PostProcessor can be used to (incrementally) parse the data
 * portion of a POST request.  Note that some buggy browsers fail to
 * set the encoding type.  If you want to support those, you may have
 * to call 'MHD_set_connection_value' with the proper encoding type
 * before creating a post processor (if no supported encoding type is
 * set, this function will fail).
 *
 * @param connection the connection on which the POST is
 *        happening (used to determine the POST format)
 * @param buffer_size maximum number of bytes to use for
 *        internal buffering (used only for the parsing,
 *        specifically the parsing of the keys).  A
 *        tiny value (256-1024) should be sufficient.
 *        Do NOT use a value smaller than 256.
 * @param iter iterator to be called with the parsed data,
 *        Must NOT be NULL.
 * @param cls first argument to ikvi
 * @return  NULL on error (out of memory, unsupported encoding),
            otherwise a PP handle
 */
struct MHD_PostProcessor *MHD_create_post_processor (struct MHD_Connection
                                                     *connection,
                                                     size_t buffer_size,
                                                     MHD_PostDataIterator
                                                     iter, void *cls);

/**
 * Parse and process POST data.
 * Call this function when POST data is available
 * (usually during an MHD_AccessHandlerCallback)
 * with the upload_data and upload_data_size.
 * Whenever possible, this will then cause calls
 * to the MHD_IncrementalKeyValueIterator.
 *
 * @param pp the post processor
 * @param post_data post_data_len bytes of POST data
 * @param post_data_len length of post_data
 * @return MHD_YES on success, MHD_NO on error
 *         (out-of-memory, iterator aborted, parse error)
 */
int
MHD_post_process (struct MHD_PostProcessor *pp,
                  const char *post_data, size_t post_data_len);

/**
 * Release PostProcessor resources.
 *
 * @param pp the PostProcessor to destroy
 * @return MHD_YES if processing completed nicely,
 *         MHD_NO if there were spurious characters / formatting
 *                problems; it is common to ignore the return
 *                value of this function
 */
int MHD_destroy_post_processor (struct MHD_PostProcessor *pp);



/* ********************** generic query functions ********************** */

/**
 * Information about a connection.
 */
union MHD_ConnectionInfo
{

  /**
   * Cipher algorithm used, of type "enum gnutls_cipher_algorithm".
   */
  int /* enum gnutls_cipher_algorithm */ cipher_algorithm;

  /**
   * Protocol used, of type "enum gnutls_protocol".
   */
  int /* enum gnutls_protocol */ protocol;

  /**
   * GNUtls session handle, of type "gnutls_session_t".
   */
  void * /* gnutls_session_t */ tls_session;

  /**
   * Address information for the client.
   */
  struct sockaddr_in * client_addr;
};

/**
 * Obtain information about the given connection.
 *
 * @param connection what connection to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_ConnectionInfo *MHD_get_connection_info (struct MHD_Connection
                                                         *connection,
                                                         enum
                                                         MHD_ConnectionInfoType
                                                         infoType, ...);


/**
 * Information about an MHD daemon.
 */
union MHD_DaemonInfo
{
  /**
   * Size of the key (unit??)
   */
  size_t key_size;

  /**
   * Size of the mac key (unit??)
   */
  size_t mac_key_size;

  /**
   * Listen socket file descriptor
   */
  int listen_fd;
};

/**
 * Obtain information about the given daemon
 * (not fully implemented!).
 *
 * @param daemon what daemon to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_DaemonInfo *MHD_get_daemon_info (struct MHD_Daemon *daemon,
                                                 enum MHD_DaemonInfoType
                                                 infoType, ...);

/**
 * Obtain the version of this library
 *
 * @return static version string, e.g. "0.4.1"
 */
const char* MHD_get_version(void);

#if 0                           /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif

#endif

Added luasupport/HTTP/libmicrohttpd-PPC/Include/platform.h.







































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file platform.h
 * @brief platform-specific includes for libmicrohttpd
 * @author Christian Grothoff
 *
 * This file is included by the libmicrohttpd code
 * before "microhttpd.h"; it provides the required
 * standard headers (which are platform-specific).<p>
 *
 * Note that this file depends on our configure.ac
 * build process and the generated config.h file.
 * Hence you cannot include it directly in applications
 * that use libmicrohttpd.
 */
#ifndef PLATFORM_H
#define PLATFORM_H

#include "MHD_config.h"

#define _XOPEN_SOURCE_EXTENDED  1
#if OS390
#define _OPEN_THREADS
#define _OPEN_SYS_SOCK_IPV6
#define _OPEN_MSGQ_EXT
#define _LP64
#endif

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#if !defined(MINGW) && !defined(__SYMBIAN32__)
#include <search.h>
#endif
#include <stddef.h>
#undef HAVE_CONFIG_H
#include <pthread.h>
#define HAVE_CONFIG_H 1

/* different OSes have fd_set in
   a broad range of header files;
   we just include most of them (if they
   are available) */


#ifdef OS_VXWORKS
#include <sockLib.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <sys/mman.h>
#define RESTRICT __restrict__
#endif

#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#if HAVE_SYS_MSG_H
#include <sys/msg.h>
#endif
#if HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
#if HAVE_NETDB_H
#include <netdb.h>
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_TIME_H
#include <time.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#if HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif

#include "plibc.h"


#endif

Added luasupport/HTTP/libmicrohttpd-PPC/Include/plibc.h.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
/*
     This file is part of PlibC.
     (C) 2005, 2006, 2007, 2008, 2009 Nils Durner (and other contributing authors)

	   This library is free software; you can redistribute it and/or
	   modify it under the terms of the GNU Lesser General Public
	   License as published by the Free Software Foundation; either
	   version 2.1 of the License, or (at your option) any later version.

	   This library is distributed in the hope that it will be useful,
	   but WITHOUT ANY WARRANTY; without even the implied warranty of
	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	   Lesser General Public License for more details.

	   You should have received a copy of the GNU Lesser General Public
	   License along with this library; if not, write to the Free Software
	   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/**
 * @file include/plibc.h
 * @brief PlibC header
 * @attention This file is usually not installed under Unix,
 *            so ship it with your application
 * @version $Revision: 39 $
 */

#ifndef _PLIBC_H_
#define _PLIBC_H_

#ifndef SIGALRM
#define SIGALRM 14
#endif

#ifdef __cplusplus
extern "C"
{
#endif

#include <stddef.h>

#ifdef Q_OS_WIN32
#define WINDOWS 1
#endif

#define HAVE_PLIBC_FD 0

#ifdef WINDOWS

#if ENABLE_NLS
#include "langinfo.h"
#endif

#include <windows.h>
#include <Ws2tcpip.h>
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <stdarg.h>

#define __BYTE_ORDER BYTE_ORDER
#define __BIG_ENDIAN BIG_ENDIAN

/* Conflicts with our definitions */
#define __G_WIN32_H__

/* Convert LARGE_INTEGER to double */
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + \
  (double)((x).LowPart))

#define socklen_t int
#define ssize_t int
#define off_t int
#define int64_t long long
#define int32_t long

  struct stat64
  {
    _dev_t st_dev;
    _ino_t st_ino;
    _mode_t st_mode;
    short st_nlink;
    short st_uid;
    short st_gid;
    _dev_t st_rdev;
    __int64 st_size;
    __time64_t st_atime;
    __time64_t st_mtime;
    __time64_t st_ctime;
  };

#ifndef pid_t
#define pid_t int
#endif

#ifndef WEXITSTATUS
#define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
#endif

#ifndef MSG_DONTWAIT
#define MSG_DONTWAIT 0
#endif

/* Thanks to the Cygwin project */
#define ENOCSI 43               /* No CSI structure available */
#define EL2HLT 44               /* Level 2 halted */
#ifndef  EDEADLK
#define EDEADLK 45              /* Deadlock condition */
#endif
#ifndef  ENOLCK
#define ENOLCK 46               /* No record locks available */
#endif
#define EBADE 50                /* Invalid exchange */
#define EBADR 51                /* Invalid request descriptor */
#define EXFULL 52               /* Exchange full */
#define ENOANO 53               /* No anode */
#define EBADRQC 54              /* Invalid request code */
#define EBADSLT 55              /* Invalid slot */
#ifndef  EDEADLOCK
#define EDEADLOCK EDEADLK       /* File locking deadlock error */
#endif
#define EBFONT 57               /* Bad font file fmt */
#define ENOSTR 60               /* Device not a stream */
#define ENODATA 61              /* No data (for no delay io) */
#define ETIME 62                /* Timer expired */
#define ENOSR 63                /* Out of streams resources */
#define ENONET 64               /* Machine is not on the network */
#define ENOPKG 65               /* Package not installed */
#define EREMOTE 66              /* The object is remote */
#define ENOLINK 67              /* The link has been severed */
#define EADV 68                 /* Advertise error */
#define ESRMNT 69               /* Srmount error */
#define ECOMM 70                /* Communication error on send */
#define EPROTO 71               /* Protocol error */
#define EMULTIHOP 74            /* Multihop attempted */
#define ELBIN 75                /* Inode is remote (not really error) */
#define EDOTDOT 76              /* Cross mount point (not really error) */
#define EBADMSG 77              /* Trying to read unreadable message */
#define ENOTUNIQ 80             /* Given log. name not unique */
#define EBADFD 81               /* f.d. invalid for this operation */
#define EREMCHG 82              /* Remote address changed */
#define ELIBACC 83              /* Can't access a needed shared lib */
#define ELIBBAD 84              /* Accessing a corrupted shared lib */
#define ELIBSCN 85              /* .lib section in a.out corrupted */
#define ELIBMAX 86              /* Attempting to link in too many libs */
#define ELIBEXEC 87             /* Attempting to exec a shared library */
#ifndef  ENOSYS
#define ENOSYS 88               /* Function not implemented */
#endif
#define ENMFILE 89              /* No more files */
#ifndef  ENOTEMPTY
#define ENOTEMPTY 90            /* Directory not empty */
#endif
#ifndef  ENAMETOOLONG
#define ENAMETOOLONG 91         /* File or path name too long */
#endif
#define ELOOP 92                /* Too many symbolic links */
#define EOPNOTSUPP 95           /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96         /* Protocol family not supported */
#define ECONNRESET 104          /* Connection reset by peer */
#define ENOBUFS 105             /* No buffer space available */
#define EAFNOSUPPORT 106        /* Address family not supported by protocol family */
#define EPROTOTYPE 107          /* Protocol wrong type for socket */
#define ENOTSOCK 108            /* Socket operation on non-socket */
#define ENOPROTOOPT 109         /* Protocol not available */
#define ESHUTDOWN 110           /* Can't send after socket shutdown */
#define ECONNREFUSED 111        /* Connection refused */
#define EADDRINUSE 112          /* Address already in use */
#define ECONNABORTED 113        /* Connection aborted */
#define ENETUNREACH 114         /* Network is unreachable */
#define ENETDOWN 115            /* Network interface is not configured */
#ifndef  ETIMEDOUT
#define ETIMEDOUT 116           /* Connection timed out */
#endif
#define EHOSTDOWN 117           /* Host is down */
#define EHOSTUNREACH 118        /* Host is unreachable */
#define EINPROGRESS 119         /* Connection already in progress */
#define EALREADY 120            /* Socket already connected */
#define EDESTADDRREQ 121        /* Destination address required */
#define EMSGSIZE 122            /* Message too long */
#define EPROTONOSUPPORT 123     /* Unknown protocol */
#define ESOCKTNOSUPPORT 124     /* Socket type not supported */
#define EADDRNOTAVAIL 125       /* Address not available */
#define ENETRESET 126           /* Connection aborted by network */
#define EISCONN 127             /* Socket is already connected */
#define ENOTCONN 128            /* Socket is not connected */
#define ETOOMANYREFS 129        /* Too many references: cannot splice */
#define EPROCLIM 130            /* Too many processes */
#define EUSERS 131              /* Too many users */
#define EDQUOT 132              /* Disk quota exceeded */
#define ESTALE 133              /* Unknown error */
#ifndef  ENOTSUP
#define ENOTSUP 134             /* Not supported */
#endif
#define ENOMEDIUM 135           /* No medium (in tape drive) */
#define ENOSHARE 136            /* No such host or network path */
#define ECASECLASH 137          /* Filename exists with different case */
#define EWOULDBLOCK EAGAIN      /* Operation would block */
#define EOVERFLOW 139           /* Value too large for defined data type */

#undef HOST_NOT_FOUND
#define HOST_NOT_FOUND 1
#undef TRY_AGAIN
#define TRY_AGAIN 2
#undef NO_RECOVERY
#define NO_RECOVERY 3
#undef NO_ADDRESS
#define NO_ADDRESS 4

#define PROT_READ   0x1
#define PROT_WRITE  0x2
#define MAP_SHARED  0x1
#define MAP_PRIVATE 0x2         /* unsupported */
#define MAP_FIXED   0x10
#define MAP_FAILED  ((void *)-1)

  struct statfs
  {
    long f_type;                /* type of filesystem (see below) */
    long f_bsize;               /* optimal transfer block size */
    long f_blocks;              /* total data blocks in file system */
    long f_bfree;               /* free blocks in fs */
    long f_bavail;              /* free blocks avail to non-superuser */
    long f_files;               /* total file nodes in file system */
    long f_ffree;               /* free file nodes in fs */
    long f_fsid;                /* file system id */
    long f_namelen;             /* maximum length of filenames */
    long f_spare[6];            /* spare for later */
  };

  extern const struct in6_addr in6addr_any;     /* :: */
  extern const struct in6_addr in6addr_loopback;        /* ::1 */

/* Taken from the Wine project <http://www.winehq.org>
    /wine/include/winternl.h */
  enum SYSTEM_INFORMATION_CLASS
  {
    SystemBasicInformation = 0,
    Unknown1,
    SystemPerformanceInformation = 2,
    SystemTimeOfDayInformation = 3,     /* was SystemTimeInformation */
    Unknown4,
    SystemProcessInformation = 5,
    Unknown6,
    Unknown7,
    SystemProcessorPerformanceInformation = 8,
    Unknown9,
    Unknown10,
    SystemDriverInformation,
    Unknown12,
    Unknown13,
    Unknown14,
    Unknown15,
    SystemHandleList,
    Unknown17,
    Unknown18,
    Unknown19,
    Unknown20,
    SystemCacheInformation,
    Unknown22,
    SystemInterruptInformation = 23,
    SystemExceptionInformation = 33,
    SystemRegistryQuotaInformation = 37,
    SystemLookasideInformation = 45
  };

  typedef struct
  {
    LARGE_INTEGER IdleTime;
    LARGE_INTEGER KernelTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER Reserved1[2];
    ULONG Reserved2;
  } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;

#define sleep(secs) (Sleep(secs * 1000))

/*********************** statfs *****************************/
/* fake block size */
#define FAKED_BLOCK_SIZE 512

/* linux-compatible values for fs type */
#define MSDOS_SUPER_MAGIC     0x4d44
#define NTFS_SUPER_MAGIC      0x5346544E

/*********************** End of statfs ***********************/

#define SHUT_RDWR SD_BOTH

/* Operations for flock() */
#define LOCK_SH  1              /* shared lock */
#define LOCK_EX  2              /* exclusive lock */
#define LOCK_NB  4              /* or'd with one of the above to prevent
                                   blocking */
#define LOCK_UN  8              /* remove lock */

/* Not supported under MinGW */
#define S_IRGRP 0
#define S_IWGRP 0
#define S_IROTH 0
#define S_IXGRP 0
#define S_IWOTH 0
#define S_IXOTH 0
#define S_ISUID 0
#define S_ISGID 0
#define S_ISVTX 0
#define S_IRWXG 0
#define S_IRWXO 0

#define SHUT_WR SD_SEND
#define SHUT_RD SD_RECEIVE
#define SHUT_RDWR SD_BOTH

#define SIGKILL 9
#define SIGTERM 15

#define SetErrnoFromWinError(e) _SetErrnoFromWinError(e, __FILE__, __LINE__)

  BOOL _plibc_CreateShortcut (const char *pszSrc, const char *pszDest);
  BOOL _plibc_DereferenceShortcut (char *pszShortcut);
  char *plibc_ChooseDir (char *pszTitle, unsigned long ulFlags);
  char *plibc_ChooseFile (char *pszTitle, unsigned long ulFlags);
  long QueryRegistry (HKEY hMainKey, char *pszKey, char *pszSubKey,
                      char *pszBuffer, long *pdLength);

  BOOL __win_IsHandleMarkedAsBlocking (SOCKET hHandle);
  void __win_SetHandleBlockingMode (SOCKET s, BOOL bBlocking);
  void __win_DiscardHandleBlockingMode (SOCKET s);
  int _win_isSocketValid (int s);
  int plibc_conv_to_win_path (const char *pszUnix, char *pszWindows);
  unsigned plibc_get_handle_count ();

  typedef void (*TPanicProc) (int, char *);
  void plibc_set_panic_proc (TPanicProc proc);

  int flock (int fd, int operation);
  int fsync (int fildes);
  int inet_pton (int af, const char *src, void *dst);
  int inet_pton4 (const char *src, u_char * dst, int pton);
#if USE_IPV6
  int inet_pton6 (const char *src, u_char * dst);
#endif
  int truncate (const char *fname, int distance);
  int statfs (const char *path, struct statfs *buf);
  const char *hstrerror (int err);
  int mkstemp (char *tmplate);
  char *strptime (const char *buf, const char *format, struct tm *tm);
  const char *inet_ntop (int af, const void *src, char *dst, size_t size);

  int plibc_init (char *pszOrg, char *pszApp);
  void plibc_shutdown ();
  int plibc_initialized ();
  int plibc_conv_to_win_path_ex (const char *pszUnix, char *pszWindows,
                                 int derefLinks);
  void _SetErrnoFromWinError (long lWinError, char *pszCaller, int iLine);
  void SetErrnoFromWinsockError (long lWinError);
  void SetHErrnoFromWinError (long lWinError);
  void SetErrnoFromHRESULT (HRESULT hRes);
  int GetErrnoFromWinsockError (long lWinError);
  FILE *_win_fopen (const char *filename, const char *mode);
  DIR *_win_opendir (const char *dirname);
  int _win_open (const char *filename, int oflag, ...);
#ifdef ENABLE_NLS
  char *_win_bindtextdomain (const char *domainname, const char *dirname);
#endif
  int _win_chdir (const char *path);
  int _win_close (int fd);
  int _win_creat (const char *path, mode_t mode);
  char *_win_ctime (const time_t * clock);
  char *_win_ctime_r (const time_t * clock, char *buf);
  int _win_fstat (int handle, struct stat *buffer);
  int _win_ftruncate (int fildes, off_t length);
  void _win_gettimeofday (struct timeval *tp, void *tzp);
  int _win_kill (pid_t pid, int sig);
  int _win_pipe (int *phandles);
  int _win_rmdir (const char *path);
  int _win_access (const char *path, int mode);
  int _win_chmod (const char *filename, int pmode);
  char *realpath (const char *file_name, char *resolved_name);
  long _win_random (void);
  int _win_remove (const char *path);
  int _win_rename (const char *oldname, const char *newname);
  int _win_stat (const char *path, struct stat *buffer);
  int _win_stat64 (const char *path, struct stat64 *buffer);
  int _win_unlink (const char *filename);
  int _win_write (int fildes, const void *buf, size_t nbyte);
  int _win_read (int fildes, void *buf, size_t nbyte);
  size_t _win_fwrite (const void *buffer, size_t size, size_t count,
                      FILE * stream);
  size_t _win_fread (void *buffer, size_t size, size_t count, FILE * stream);
  int _win_symlink (const char *path1, const char *path2);
  void *_win_mmap (void *start, size_t len, int access, int flags, int fd,
                   unsigned long long offset);
  int _win_munmap (void *start, size_t length);
  int _win_lstat (const char *path, struct stat *buf);
  int _win_lstat64 (const char *path, struct stat64 *buf);
  int _win_readlink (const char *path, char *buf, size_t bufsize);
  int _win_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
  int _win_printf (const char *format, ...);
  int _win_fprintf (FILE * f, const char *format, ...);
  int _win_vprintf (const char *format, va_list ap);
  int _win_vfprintf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vsprintf (char *dest, const char *format, va_list arg_ptr);
  int _win_vsnprintf (char *str, size_t size, const char *format,
                      va_list arg_ptr);
  int _win_snprintf (char *str, size_t size, const char *format, ...);
  int _win_sprintf (char *dest, const char *format, ...);
  int _win_vsscanf (const char *str, const char *format, va_list arg_ptr);
  int _win_sscanf (const char *str, const char *format, ...);
  int _win_vfscanf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vscanf (const char *format, va_list arg_ptr);
  int _win_scanf (const char *format, ...);
  int _win_fscanf (FILE * stream, const char *format, ...);
  pid_t _win_waitpid (pid_t pid, int *stat_loc, int options);
  int _win_bind (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_connect (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_getpeername (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockname (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockopt (SOCKET s, int level, int optname, char *optval,
                       int *optlen);
  int _win_listen (SOCKET s, int backlog);
  int _win_recv (SOCKET s, char *buf, int len, int flags);
  int _win_recvfrom (SOCKET s, void *buf, int len, int flags,
                     struct sockaddr *from, int *fromlen);
  int _win_select (int max_fd, fd_set * rfds, fd_set * wfds, fd_set * efds,
                   const struct timeval *tv);
  int _win_send (SOCKET s, const char *buf, int len, int flags);
  int _win_sendto (SOCKET s, const char *buf, int len, int flags,
                   const struct sockaddr *to, int tolen);
  int _win_setsockopt (SOCKET s, int level, int optname, const void *optval,
                       int optlen);
  int _win_shutdown (SOCKET s, int how);
  SOCKET _win_socket (int af, int type, int protocol);
  struct hostent *_win_gethostbyaddr (const char *addr, int len, int type);
  struct hostent *_win_gethostbyname (const char *name);
  struct hostent *gethostbyname2 (const char *name, int af);
  char *_win_strerror (int errnum);
  int IsWinNT ();
  char *index (const char *s, int c);

#if !HAVE_STRNDUP
  char *strndup (const char *s, size_t n);
#endif
#if !HAVE_STRNLEN
  size_t strnlen (const char *str, size_t maxlen);
#endif

#define strcasecmp(a, b) stricmp(a, b)
#define strncasecmp(a, b, c) strnicmp(a, b, c)

#endif                          /* WINDOWS */

#ifndef WINDOWS
#define DIR_SEPARATOR '/'
#define DIR_SEPARATOR_STR "/"
#define PATH_SEPARATOR ';'
#define PATH_SEPARATOR_STR ";"
#define NEWLINE "\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) bindtextdomain(d, n)
#endif
#define CREAT(p, m) creat(p, m)
#define PLIBC_CTIME(c) ctime(c)
#define CTIME_R(c, b) ctime_r(c, b)
#undef FOPEN
#define FOPEN(f, m) fopen(f, m)
#define FTRUNCATE(f, l) ftruncate(f, l)
#define OPENDIR(d) opendir(d)
#define OPEN open
#define CHDIR(d) chdir(d)
#define CLOSE(f) close(f)
#define LSEEK(f, o, w) lseek(f, o, w)
#define RMDIR(f) rmdir(f)
#define ACCESS(p, m) access(p, m)
#define CHMOD(f, p) chmod(f, p)
#define FSTAT(h, b) fstat(h, b)
#define PLIBC_KILL(p, s) kill(p, s)
#define PIPE(h) pipe(h)
#define REMOVE(p) remove(p)
#define RENAME(o, n) rename(o, n)
#define STAT(p, b) stat(p, b)
#define STAT64(p, b) stat64(p, b)
#define UNLINK(f) unlink(f)
#define WRITE(f, b, n) write(f, b, n)
#define READ(f, b, n) read(f, b, n)
#define GN_FREAD(b, s, c, f) fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) fwrite(b, s, c, f)
#define SYMLINK(a, b) symlink(a, b)
#define MMAP(s, l, p, f, d, o) mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) munmap(s, l)
#define STRERROR(i) strerror(i)
#define RANDOM() random()
#define READLINK(p, b, s) readlink(p, b, s)
#define LSTAT(p, b) lstat(p, b)
#define LSTAT64(p, b) lstat64(p, b)
#define PRINTF printf
#define FPRINTF fprintf
#define VPRINTF(f, a) vprintf(f, a)
#define VFPRINTF(s, f, a) vfprintf(s, f, a)
#define VSPRINTF(d, f, a) vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF snprintf
#define SPRINTF sprintf
#define VSSCANF(s, f, a) vsscanf(s, f, a)
#define SSCANF sscanf
#define VFSCANF(s, f, a) vfscanf(s, f, a)
#define VSCANF(f, a) vscanf(f, a)
#define SCANF scanf
#define FSCANF fscanf
#define WAITPID(p, s, o) waitpid(p, s, o)
#define ACCEPT(s, a, l) accept(s, a, l)
#define BIND(s, n, l) bind(s, n, l)
#define CONNECT(s, n, l) connect(s, n, l)
#define GETPEERNAME(s, n, l) getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) getsockopt(s, l, o, v, p)
#define LISTEN(s, b) listen(s, b)
#define RECV(s, b, l, f) recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) select(n, r, w, e, t)
#define SEND(s, b, l, f) send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) shutdown(s, h)
#define SOCKET(a, t, p) socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) gethostbyname(n)
#define GETTIMEOFDAY(t, n) gettimeofday(t, n)
#define INSQUE(e, p) insque(e, p)
#define REMQUE(e) remque(e)

#ifndef __SYMBIAN32__
#define HSEARCH(i, a) hsearch(i, a)
#define HCREATE(n) hcreate(n)
#define HDESTROY() hdestroy()
#define HSEARCH_R(i, a, r, h) hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) hcreate_r(n, h)
#define HDESTROY_R(h) hdestroy_r(h)
#define TSEARCH(k, r, c) tsearch(k, r, c)
#define TFIND(k, r, c) tfind(k, r, c)
#define TDELETE(k, r, c) tdelete(k, r, c)
#define TWALK(r, a) twalk(r, a)
#define TDESTROY(r, f) tdestroy(r, f)
#define LFIND(k, b, n, s, c) lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) lsearch(k, b, n, s, c)
#else  // __SYMBIAN32__
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif  // !__SYMBIAN32__

#else
#define DIR_SEPARATOR '\\'
#define DIR_SEPARATOR_STR "\\"
#define PATH_SEPARATOR ':'
#define PATH_SEPARATOR_STR ":"
#define NEWLINE "\r\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) _win_bindtextdomain(d, n)
#endif
#define CREAT(p, m) _win_creat(p, m)
#define PLIBC_CTIME(c) _win_ctime(c)
#define CTIME_R(c, b) _win_ctime_r(c, b)
#define FOPEN(f, m) _win_fopen(f, m)
#define FTRUNCATE(f, l) _win_ftruncate(f, l)
#define OPENDIR(d) _win_opendir(d)
#define OPEN _win_open
#define CHDIR(d) _win_chdir(d)
#define CLOSE(f) _win_close(f)
#define PLIBC_KILL(p, s) _win_kill(p, s)
#define LSEEK(f, o, w) _win_lseek(f, o, w)
#define FSTAT(h, b) _win_fstat(h, b)
#define RMDIR(f) _win_rmdir(f)
#define ACCESS(p, m) _win_access(p, m)
#define CHMOD(f, p) _win_chmod(f, p)
#define PIPE(h) _win_pipe(h)
#define RANDOM() _win_random()
#define REMOVE(p) _win_remove(p)
#define RENAME(o, n) _win_rename(o, n)
#define STAT(p, b) _win_stat(p, b)
#define STAT64(p, b) _win_stat64(p, b)
#define UNLINK(f) _win_unlink(f)
#define WRITE(f, b, n) _win_write(f, b, n)
#define READ(f, b, n) _win_read(f, b, n)
#define GN_FREAD(b, s, c, f) _win_fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) _win_fwrite(b, s, c, f)
#define SYMLINK(a, b) _win_symlink(a, b)
#define MMAP(s, l, p, f, d, o) _win_mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) _win_munmap(s, l)
#define STRERROR(i) _win_strerror(i)
#define READLINK(p, b, s) _win_readlink(p, b, s)
#define LSTAT(p, b) _win_lstat(p, b)
#define LSTAT64(p, b) _win_lstat64(p, b)
#define PRINTF(f, ...) _win_printf(f , __VA_ARGS__)
#define FPRINTF(fil, fmt, ...) _win_fprintf(fil, fmt, __VA_ARGS__)
#define VPRINTF(f, a) _win_vprintf(f, a)
#define VFPRINTF(s, f, a) _win_vfprintf(s, f, a)
#define VSPRINTF(d, f, a) _win_vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) _win_vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF(str, size, fmt, ...) _win_snprintf(str, size, fmt, __VA_ARGS__)
#define SPRINTF(d, f, ...) _win_sprintf(d, f, __VA_ARGS__)
#define VSSCANF(s, f, a) _win_vsscanf(s, f, a)
#define SSCANF(s, f, ...) _win_sscanf(s, f, __VA_ARGS__)
#define VFSCANF(s, f, a) _win_vfscanf(s, f, a)
#define VSCANF(f, a) _win_vscanf(f, a)
#define SCANF(f, ...) _win_scanf(f, __VA_ARGS__)
#define FSCANF(s, f, ...) _win_fscanf(s, f, __VA_ARGS__)
#define WAITPID(p, s, o) _win_waitpid(p, s, o)
#define ACCEPT(s, a, l) _win_accept(s, a, l)
#define BIND(s, n, l) _win_bind(s, n, l)
#define CONNECT(s, n, l) _win_connect(s, n, l)
#define GETPEERNAME(s, n, l) _win_getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) _win_getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) _win_getsockopt(s, l, o, v, p)
#define LISTEN(s, b) _win_listen(s, b)
#define RECV(s, b, l, f) _win_recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) _win_recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) _win_select(n, r, w, e, t)
#define SEND(s, b, l, f) _win_send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) _win_sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) _win_shutdown(s, h)
#define SOCKET(a, t, p) _win_socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) _win_gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) _win_gethostbyname(n)
#define GETTIMEOFDAY(t, n) _win_gettimeofday(t, n)
#define INSQUE(e, p) _win_insque(e, p)
#define REMQUE(e) _win_remque(e)
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif

/* search.h */

/* Prototype structure for a linked-list data structure.
   This is the type used by the `insque' and `remque' functions.  */

  struct PLIBC_SEARCH_QELEM
  {
    struct qelem *q_forw;
    struct qelem *q_back;
    char q_data[1];
  };


/* Insert ELEM into a doubly-linked list, after PREV.  */
  void _win_insque (void *__elem, void *__prev);

/* Unlink ELEM from the doubly-linked list that it is in.  */
  void _win_remque (void *__elem);


/* For use with hsearch(3).  */
  typedef int (*PLIBC_SEARCH__compar_fn_t) (__const void *, __const void *);

  typedef PLIBC_SEARCH__compar_fn_t _win_comparison_fn_t;

/* Action which shall be performed in the call the hsearch.  */
  typedef enum
  {
    PLIBC_SEARCH_FIND,
    PLIBC_SEARCH_ENTER
  }
  PLIBC_SEARCH_ACTION;

  typedef struct PLIBC_SEARCH_entry
  {
    char *key;
    void *data;
  }
  PLIBC_SEARCH_ENTRY;

/* The reentrant version has no static variables to maintain the state.
   Instead the interface of all functions is extended to take an argument
   which describes the current status.  */
  typedef struct _PLIBC_SEARCH_ENTRY
  {
    unsigned int used;
    PLIBC_SEARCH_ENTRY entry;
  }
  _PLIBC_SEARCH_ENTRY;


/* Family of hash table handling functions.  The functions also
   have reentrant counterparts ending with _r.  The non-reentrant
   functions all work on a signle internal hashing table.  */

/* Search for entry matching ITEM.key in internal hash table.  If
   ACTION is `FIND' return found entry or signal error by returning
   NULL.  If ACTION is `ENTER' replace existing data (if any) with
   ITEM.data.  */
  PLIBC_SEARCH_ENTRY *_win_hsearch (PLIBC_SEARCH_ENTRY __item,
                                    PLIBC_SEARCH_ACTION __action);

/* Create a new hashing table which will at most contain NEL elements.  */
  int _win_hcreate (size_t __nel);

/* Destroy current internal hashing table.  */
  void _win_hdestroy (void);

/* Data type for reentrant functions.  */
  struct PLIBC_SEARCH_hsearch_data
  {
    struct _PLIBC_SEARCH_ENTRY *table;
    unsigned int size;
    unsigned int filled;
  };

/* Reentrant versions which can handle multiple hashing tables at the
   same time.  */
  int _win_hsearch_r (PLIBC_SEARCH_ENTRY __item, PLIBC_SEARCH_ACTION __action,
                      PLIBC_SEARCH_ENTRY ** __retval,
                      struct PLIBC_SEARCH_hsearch_data *__htab);
  int _win_hcreate_r (size_t __nel, struct PLIBC_SEARCH_hsearch_data *__htab);
  void _win_hdestroy_r (struct PLIBC_SEARCH_hsearch_data *__htab);


/* The tsearch routines are very interesting. They make many
   assumptions about the compiler.  It assumes that the first field
   in node must be the "key" field, which points to the datum.
   Everything depends on that.  */
/* For tsearch */
  typedef enum
  {
    PLIBC_SEARCH_preorder,
    PLIBC_SEARCH_postorder,
    PLIBC_SEARCH_endorder,
    PLIBC_SEARCH_leaf
  }
  PLIBC_SEARCH_VISIT;

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP and insert a new element if not found.  */
  void *_win_tsearch (__const void *__key, void **__rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP.  If no matching entry is available return NULL.  */
  void *_win_tfind (__const void *__key, void *__const * __rootp,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Remove the element matching KEY from the tree pointed to by *ROOTP.  */
  void *_win_tdelete (__const void *__restrict __key,
                      void **__restrict __rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

  typedef void (*PLIBC_SEARCH__action_fn_t) (__const void *__nodep,
                                             PLIBC_SEARCH_VISIT __value,
                                             int __level);

/* Walk through the whole tree and call the ACTION callback for every node
   or leaf.  */
  void _win_twalk (__const void *__root, PLIBC_SEARCH__action_fn_t __action);

/* Callback type for function to free a tree node.  If the keys are atomic
   data this function should do nothing.  */
  typedef void (*PLIBC_SEARCH__free_fn_t) (void *__nodep);

/* Destroy the whole tree, call FREEFCT for each node or leaf.  */
  void _win_tdestroy (void *__root, PLIBC_SEARCH__free_fn_t __freefct);


/* Perform linear search for KEY by comparing by COMPAR in an array
   [BASE,BASE+NMEMB*SIZE).  */
  void *_win_lfind (__const void *__key, __const void *__base,
                    size_t * __nmemb, size_t __size,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Perform linear search for KEY by comparing by COMPAR function in
   array [BASE,BASE+NMEMB*SIZE) and insert entry if not found.  */
  void *_win_lsearch (__const void *__key, void *__base,
                      size_t * __nmemb, size_t __size,
                      PLIBC_SEARCH__compar_fn_t __compar);


#ifdef __cplusplus
}
#endif


#endif                          //_PLIBC_H_

/* end of plibc.h */

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/connection.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/daemon.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/internal.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/memorypool.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/postprocessor.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/reason_phrase.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-PPC/Libs/response.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Include/MHD_config.h.















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
/* MHD_config.h.  Generated from MHD_config.h.in by configure.  */
/* MHD_config.h.in.  Generated from configure.ac by autoheader.  */

#define _GNU_SOURCE  1

/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */

/* This is a Cygwin system */
/* #undef CYGWIN */

/* This is a FreeBSD system */
/* #undef FREEBSD */

/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1

/* Define to 1 if you have the declaration of `TCP_CORK', and to 0 if you
   don't. */
#define HAVE_DECL_TCP_CORK 0

/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1

/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
#define HAVE_FSEEKO 1

/* We have gnutls */
#define HAVE_GNUTLS 0

/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
/* #undef HAVE_GNUTLS_GNUTLS_H */

/* Provides IPv6 headers */
#define HAVE_INET6 1

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if you have a functional curl library. */
#define HAVE_LIBCURL 1

/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1

/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1

/* Define to 1 if you have the <math.h> header file. */
#define HAVE_MATH_H 1

/* Define to 1 if you have the `memmem' function. */
/* #undef HAVE_MEMMEM */

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Include error messages */
/* #undef HAVE_MESSAGES */

/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1

/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1

/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1

/* Define to 1 if you have the <poll.h> header file. */
#define HAVE_POLL_H 1

/* Define to 1 if you have the <pthread.h> header file. */
#define HAVE_PTHREAD_H 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the <sys/mman.h> header file. */
#define HAVE_SYS_MMAN_H 1

/* Define to 1 if you have the <sys/msg.h> header file. */
#define HAVE_SYS_MSG_H 1

/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1

/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1

/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1

/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1

/* disable HTTPS support */
#define HTTPS_SUPPORT 0

/* Defined if libcurl supports AsynchDNS */
/* #undef LIBCURL_FEATURE_ASYNCHDNS */

/* Defined if libcurl supports IDN */
/* #undef LIBCURL_FEATURE_IDN */

/* Defined if libcurl supports IPv6 */
#define LIBCURL_FEATURE_IPV6 1

/* Defined if libcurl supports KRB4 */
/* #undef LIBCURL_FEATURE_KRB4 */

/* Defined if libcurl supports libz */
#define LIBCURL_FEATURE_LIBZ 1

/* Defined if libcurl supports NTLM */
#define LIBCURL_FEATURE_NTLM 1

/* Defined if libcurl supports SSL */
#define LIBCURL_FEATURE_SSL 1

/* Defined if libcurl supports SSPI */
/* #undef LIBCURL_FEATURE_SSPI */

/* Defined if libcurl supports DICT */
#define LIBCURL_PROTOCOL_DICT 1

/* Defined if libcurl supports FILE */
#define LIBCURL_PROTOCOL_FILE 1

/* Defined if libcurl supports FTP */
#define LIBCURL_PROTOCOL_FTP 1

/* Defined if libcurl supports FTPS */
#define LIBCURL_PROTOCOL_FTPS 1

/* Defined if libcurl supports HTTP */
#define LIBCURL_PROTOCOL_HTTP 1

/* Defined if libcurl supports HTTPS */
#define LIBCURL_PROTOCOL_HTTPS 1

/* Defined if libcurl supports LDAP */
#define LIBCURL_PROTOCOL_LDAP 1

/* Defined if libcurl supports TELNET */
#define LIBCURL_PROTOCOL_TELNET 1

/* Defined if libcurl supports TFTP */
#define LIBCURL_PROTOCOL_TFTP 1

/* This is a Linux system */
/* #undef LINUX */

/* Define to the sub-directory in which libtool stores uninstalled libraries.
   */
#define LT_OBJDIR ".libs/"

/* gcrypt lib version */
#define MHD_GCRYPT_VERSION "1:1.2.2"

/* gnuTLS lib version - used in conjunction with cURL */
#define MHD_REQ_CURL_GNUTLS_VERSION "2.2.3"

/* required cURL SSL version to run tests */
#define MHD_REQ_CURL_OPENSSL_VERSION "0.9.8"

/* required cURL version to run tests */
#define MHD_REQ_CURL_VERSION "7.16.4"

/* This is a MinGW system */
/* #undef MINGW */

/* This is a NetBSD system */
/* #undef NETBSD */

/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */

/* This is an OpenBSD system */
/* #undef OPENBSD */

/* This is a OS/390 system */
/* #undef OS390 */

/* This is an OS X system */
#define OSX 1

/* Some strange OS */
/* #undef OTHEROS */

/* Name of package */
#define PACKAGE "libmicrohttpd"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "libmicrohttpd@gnu.org"

/* Define to the full name of this package. */
#define PACKAGE_NAME "libmicrohttpd"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "libmicrohttpd 0.9.0"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libmicrohttpd"

/* Define to the home page for this package. */
#define PACKAGE_URL ""

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.9.0"

/* This is a Solaris system */
/* #undef SOLARIS */

/* This is a BSD system */
/* #undef SOMEBSD */

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Version number of package */
#define VERSION "0.9.0"

/* This is a Windows system */
/* #undef WINDOWS */

/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
   significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
#  define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
/* #  undef WORDS_BIGENDIAN */
# endif
#endif

/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */

/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
/* #undef _LARGEFILE_SOURCE */

/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */

/* Need with solaris or errno doesnt work */
/* #undef _REENTRANT */

/* Define curl_free() as free() if our version of curl lacks curl_free. */
/* #undef curl_free */

Added luasupport/HTTP/libmicrohttpd-X86/Include/internal.h.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
/*
  This file is part of libmicrohttpd
  (C) 2007, 2008, 2009, 2010 Daniel Pittman and Christian Grothoff
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file internal.h
 * @brief  internal shared structures
 * @author Daniel Pittman
 * @author Christian Grothoff
 */

#ifndef INTERNAL_H
#define INTERNAL_H

#include "platform.h"
#include "microhttpd.h"
#if HTTPS_SUPPORT
#include <gnutls/gnutls.h>
#endif

#define EXTRA_CHECKS MHD_YES

#define MHD_MAX(a,b) ((a)<(b)) ? (b) : (a)
#define MHD_MIN(a,b) ((a)<(b)) ? (a) : (b)

/**
 * Size by which MHD usually tries to increment read/write buffers.
 * TODO: we should probably get rid of this magic constant and
 * put in code to automatically determine a good value.
 */
#define MHD_BUF_INC_SIZE 2048

/**
 * Handler for fatal errors.
 */
extern MHD_PanicCallback mhd_panic;

/**
 * Closure argument for "mhd_panic".
 */
extern void *mhd_panic_cls;

/**
 * Events we care about with respect to poll/select
 * for file descriptors.
 */
enum MHD_PollActions
  {
    /**
     * No event interests us.
     */
    MHD_POLL_ACTION_NOTHING = 0,

    /**
     * We would like to read.
     */
    MHD_POLL_ACTION_IN = 1,

    /**
     * We would like to write.
     */ 
    MHD_POLL_ACTION_OUT = 2
  };


/**
 * Socket descriptor and events we care about.
 */
struct MHD_Pollfd {
  /**
   * Socket descriptor.
   */
  int fd;

  /**
   * Which events do we care about for this socket?
   */
  enum MHD_PollActions events;
};


#if HAVE_MESSAGES
/**
 * fprintf-like helper function for logging debug
 * messages.
 */
void MHD_DLOG (const struct MHD_Daemon *daemon, const char *format, ...);

#endif
void MHD_tls_log_func (int level, const char *str);

/**
 * Process escape sequences ('+'=space, %HH).
 * Updates val in place.
 *
 * @return length of the resulting val (strlen(val) maybe
 *  shorter afterwards due to elimination of escape sequences)
 */
size_t MHD_http_unescape (char *val);

/**
 * Header or cookie in HTTP request or response.
 */
struct MHD_HTTP_Header
{
  /**
   * Headers are kept in a linked list.
   */
  struct MHD_HTTP_Header *next;

  /**
   * The name of the header (key), without
   * the colon.
   */
  char *header;

  /**
   * The value of the header.
   */
  char *value;

  /**
   * Type of the header (where in the HTTP
   * protocol is this header from).
   */
  enum MHD_ValueKind kind;

};

/**
 * Representation of a response.
 */
struct MHD_Response
{

  /**
   * Headers to send for the response.  Initially
   * the linked list is created in inverse order;
   * the order should be inverted before sending!
   */
  struct MHD_HTTP_Header *first_header;

  /**
   * Buffer pointing to data that we are supposed
   * to send as a response.
   */
  char *data;

  /**
   * Closure to give to the content reader
   * free callback.
   */
  void *crc_cls;

  /**
   * How do we get more data?  NULL if we are
   * given all of the data up front.
   */
  MHD_ContentReaderCallback crc;

  /**
   * NULL if data must not be freed, otherwise
   * either user-specified callback or "&free".
   */
  MHD_ContentReaderFreeCallback crfc;

  /**
   * Mutex to synchronize access to data/size and
   * reference counts.
   */
  pthread_mutex_t mutex;

  /**
   * Set to MHD_SIZE_UNKNOWN if size is not known.
   */
  uint64_t total_size;

  /**
   * At what offset in the stream is the
   * beginning of data located?
   */
  uint64_t data_start;

  /**
   * Size of data.
   */
  size_t data_size;

  /**
   * Size of the data buffer.
   */
  size_t data_buffer_size;

  /**
   * Reference count for this response.  Free
   * once the counter hits zero.
   */
  unsigned int reference_count;

  /**
   * File-descriptor if this response is FD-backed.
   */
  int fd;

};

/**
 * States in a state machine for a connection.
 *
 * Transitions are any-state to CLOSED, any state to state+1,
 * FOOTERS_SENT to INIT.  CLOSED is the terminal state and
 * INIT the initial state.
 *
 * Note that transitions for *reading* happen only after
 * the input has been processed; transitions for
 * *writing* happen after the respective data has been
 * put into the write buffer (the write does not have
 * to be completed yet).  A transition to CLOSED or INIT
 * requires the write to be complete.
 */
enum MHD_CONNECTION_STATE
{
  /**
   * Connection just started (no headers received).
   * Waiting for the line with the request type, URL and version.
   */
  MHD_CONNECTION_INIT = 0,

  /**
   * 1: We got the URL (and request type and version).  Wait for a header line.
   */
  MHD_CONNECTION_URL_RECEIVED = MHD_CONNECTION_INIT + 1,

  /**
   * 2: We got part of a multi-line request header.  Wait for the rest.
   */
  MHD_CONNECTION_HEADER_PART_RECEIVED = MHD_CONNECTION_URL_RECEIVED + 1,

  /**
   * 3: We got the request headers.  Process them.
   */
  MHD_CONNECTION_HEADERS_RECEIVED = MHD_CONNECTION_HEADER_PART_RECEIVED + 1,

  /**
   * 4: We have processed the request headers.  Send 100 continue.
   */
  MHD_CONNECTION_HEADERS_PROCESSED = MHD_CONNECTION_HEADERS_RECEIVED + 1,

  /**
   * 5: We have processed the headers and need to send 100 CONTINUE.
   */
  MHD_CONNECTION_CONTINUE_SENDING = MHD_CONNECTION_HEADERS_PROCESSED + 1,

  /**
   * 6: We have sent 100 CONTINUE (or do not need to).  Read the message body.
   */
  MHD_CONNECTION_CONTINUE_SENT = MHD_CONNECTION_CONTINUE_SENDING + 1,

  /**
   * 7: We got the request body.  Wait for a line of the footer.
   */
  MHD_CONNECTION_BODY_RECEIVED = MHD_CONNECTION_CONTINUE_SENT + 1,

  /**
   * 8: We got part of a line of the footer.  Wait for the
   * rest.
   */
  MHD_CONNECTION_FOOTER_PART_RECEIVED = MHD_CONNECTION_BODY_RECEIVED + 1,

  /**
   * 9: We received the entire footer.  Wait for a response to be queued
   * and prepare the response headers.
   */
  MHD_CONNECTION_FOOTERS_RECEIVED = MHD_CONNECTION_FOOTER_PART_RECEIVED + 1,

  /**
   * 10: We have prepared the response headers in the writ buffer.
   * Send the response headers.
   */
  MHD_CONNECTION_HEADERS_SENDING = MHD_CONNECTION_FOOTERS_RECEIVED + 1,

  /**
   * 11: We have sent the response headers.  Get ready to send the body.
   */
  MHD_CONNECTION_HEADERS_SENT = MHD_CONNECTION_HEADERS_SENDING + 1,

  /**
   * 12: We are ready to send a part of a non-chunked body.  Send it.
   */
  MHD_CONNECTION_NORMAL_BODY_READY = MHD_CONNECTION_HEADERS_SENT + 1,

  /**
   * 13: We are waiting for the client to provide more
   * data of a non-chunked body.
   */
  MHD_CONNECTION_NORMAL_BODY_UNREADY = MHD_CONNECTION_NORMAL_BODY_READY + 1,

  /**
   * 14: We are ready to send a chunk.
   */
  MHD_CONNECTION_CHUNKED_BODY_READY = MHD_CONNECTION_NORMAL_BODY_UNREADY + 1,

  /**
   * 15: We are waiting for the client to provide a chunk of the body.
   */
  MHD_CONNECTION_CHUNKED_BODY_UNREADY = MHD_CONNECTION_CHUNKED_BODY_READY + 1,

  /**
   * 16: We have sent the response body. Prepare the footers.
   */
  MHD_CONNECTION_BODY_SENT = MHD_CONNECTION_CHUNKED_BODY_UNREADY + 1,

  /**
   * 17: We have prepared the response footer.  Send it.
   */
  MHD_CONNECTION_FOOTERS_SENDING = MHD_CONNECTION_BODY_SENT + 1,

  /**
   * 18: We have sent the response footer.  Shutdown or restart.
   */
  MHD_CONNECTION_FOOTERS_SENT = MHD_CONNECTION_FOOTERS_SENDING + 1,

  /**
   * 19: This connection is closed (no more activity
   * allowed).
   */
  MHD_CONNECTION_CLOSED = MHD_CONNECTION_FOOTERS_SENT + 1,

  /*
   *  SSL/TLS connection states
   */

  /**
   * The initial connection state for all secure connectoins
   * Handshake messages will be processed in this state & while
   * in the 'MHD_TLS_HELLO_REQUEST' state
   */
  MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_CLOSED + 1

};

/**
 * Should all state transitions be printed to stderr?
 */
#define DEBUG_STATES MHD_NO

#if HAVE_MESSAGES
char *MHD_state_to_string (enum MHD_CONNECTION_STATE state);
#endif

/**
 * Function to receive plaintext data.
 *
 * @param conn the connection struct
 * @param write_to where to write received data
 * @param max_bytes maximum number of bytes to receive
 * @return number of bytes written to write_to
 */
typedef ssize_t (*ReceiveCallback) (struct MHD_Connection * conn,
                                    void *write_to, size_t max_bytes);


/**
 * Function to transmit plaintext data.
 *
 * @param conn the connection struct
 * @param read_from where to read data to transmit
 * @param max_bytes maximum number of bytes to transmit
 * @return number of bytes transmitted
 */
typedef ssize_t (*TransmitCallback) (struct MHD_Connection * conn,
                                     const void *write_to, size_t max_bytes);


/**
 * State kept for each HTTP request.
 */
struct MHD_Connection
{

  /**
   * This is a linked list.
   */
  struct MHD_Connection *next;

  /**
   * Reference to the MHD_Daemon struct.
   */
  struct MHD_Daemon *daemon;

  /**
   * Linked list of parsed headers.
   */
  struct MHD_HTTP_Header *headers_received;

  /**
   * Response to transmit (initially NULL).
   */
  struct MHD_Response *response;

  /**
   * The memory pool is created whenever we first read
   * from the TCP stream and destroyed at the end of
   * each request (and re-created for the next request).
   * In the meantime, this pointer is NULL.  The
   * pool is used for all connection-related data
   * except for the response (which maybe shared between
   * connections) and the IP address (which persists
   * across individual requests).
   */
  struct MemoryPool *pool;

  /**
   * We allow the main application to associate some
   * pointer with the connection.  Here is where we
   * store it.  (MHD does not know or care what it
   * is).
   */
  void *client_context;

  /**
   * Request method.  Should be GET/POST/etc.  Allocated
   * in pool.
   */
  char *method;

  /**
   * Requested URL (everything after "GET" only).  Allocated
   * in pool.
   */
  char *url;

  /**
   * HTTP version string (i.e. http/1.1).  Allocated
   * in pool.
   */
  char *version;

  /**
   * Buffer for reading requests.   Allocated
   * in pool.  Actually one byte larger than
   * read_buffer_size (if non-NULL) to allow for
   * 0-termination.
   */
  char *read_buffer;

  /**
   * Buffer for writing response (headers only).  Allocated
   * in pool.
   */
  char *write_buffer;

  /**
   * Last incomplete header line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *last;

  /**
   * Position after the colon on the last incomplete header
   * line during parsing of headers.
   * Allocated in pool.  Only valid if state is
   * either HEADER_PART_RECEIVED or FOOTER_PART_RECEIVED.
   */
  char *colon;

  /**
   * Foreign address (of length addr_len).  MALLOCED (not
   * in pool!).
   */
  struct sockaddr_in *addr;

  /**
   * Thread for this connection (if we are using
   * one thread per connection).
   */
  pthread_t pid;

  /**
   * Size of read_buffer (in bytes).  This value indicates
   * how many bytes we're willing to read into the buffer;
   * the real buffer is one byte longer to allow for
   * adding zero-termination (when needed).
   */
  size_t read_buffer_size;

  /**
   * Position where we currently append data in
   * read_buffer (last valid position).
   */
  size_t read_buffer_offset;

  /**
   * Size of write_buffer (in bytes).
   */
  size_t write_buffer_size;

  /**
   * Offset where we are with sending from write_buffer.
   */
  size_t write_buffer_send_offset;

  /**
   * Last valid location in write_buffer (where do we
   * append and up to where is it safe to send?)
   */
  size_t write_buffer_append_offset;

  /**
   * How many more bytes of the body do we expect
   * to read? "-1" for unknown.
   */
  uint64_t remaining_upload_size;

  /**
   * Current write position in the actual response
   * (excluding headers, content only; should be 0
   * while sending headers).
   */
  uint64_t response_write_position;

  /**
   * Position in the 100 CONTINUE message that
   * we need to send when receiving http 1.1 requests.
   */
  size_t continue_message_write_offset;

  /**
   * Length of the foreign address.
   */
  socklen_t addr_len;

  /**
   * Last time this connection had any activity
   * (reading or writing).
   */
  time_t last_activity;

  /**
   * Did we ever call the "default_handler" on this connection?
   * (this flag will determine if we call the 'notify_completed'
   * handler when the connection closes down).
   */
  int client_aware;

  /**
   * Socket for this connection.  Set to -1 if
   * this connection has died (daemon should clean
   * up in that case).
   */
  int socket_fd;

  /**
   * Has this socket been closed for reading (i.e.
   * other side closed the connection)?  If so,
   * we must completely close the connection once
   * we are done sending our response (and stop
   * trying to read from this socket).
   */
  int read_closed;

  /**
   * State in the FSM for this connection.
   */
  enum MHD_CONNECTION_STATE state;

  /**
   * HTTP response code.  Only valid if response object
   * is already set.
   */
  unsigned int responseCode;

  /**
   * Set to MHD_YES if the response's content reader
   * callback failed to provide data the last time
   * we tried to read from it.  In that case, the
   * write socket should be marked as unready until
   * the CRC call succeeds.
   */
  int response_unready;

  /**
   * Are we sending with chunked encoding?
   */
  int have_chunked_response;

  /**
   * Are we receiving with chunked encoding?  This will be set to
   * MHD_YES after we parse the headers and are processing the body
   * with chunks.  After we are done with the body and we are
   * processing the footers; once the footers are also done, this will
   * be set to MHD_NO again (before the final call to the handler).
   */
  int have_chunked_upload;

  /**
   * If we are receiving with chunked encoding, where are we right
   * now?  Set to 0 if we are waiting to receive the chunk size;
   * otherwise, this is the size of the current chunk.  A value of
   * zero is also used when we're at the end of the chunks.
   */
  unsigned int current_chunk_size;

  /**
   * If we are receiving with chunked encoding, where are we currently
   * with respect to the current chunk (at what offset / position)?
   */
  unsigned int current_chunk_offset;

  /**
   * Handler used for processing read connection operations
   */
  int (*read_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing write connection operations
   */
  int (*write_handler) (struct MHD_Connection * connection);

  /**
   * Handler used for processing idle connection operations
   */
  int (*idle_handler) (struct MHD_Connection * connection);

  /**
   * Function used for reading HTTP request stream.
   */
  ReceiveCallback recv_cls;

  /**
   * Function used for writing HTTP response stream.
   */
  TransmitCallback send_cls;

#if HTTPS_SUPPORT
  /**
   * State required for HTTPS/SSL/TLS support.
   */
  gnutls_session_t tls_session;

  /**
   * Memory location to return for protocol session info.
   */
  int protocol;

  /**
   * Memory location to return for protocol session info.
   */
  int cipher;
#endif
};

typedef void * (*LogCallback)(void * cls, const char * uri);

/**
 * State kept for each MHD daemon.
 */
struct MHD_Daemon
{

  /**
   * Callback function for all requests.
   */
  MHD_AccessHandlerCallback default_handler;

  /**
   * Closure argument to default_handler.
   */
  void *default_handler_cls;

  /**
   * Linked list of our current connections.
   */
  struct MHD_Connection *connections;

  /**
   * Function to call to check if we should
   * accept or reject an incoming request.
   * May be NULL.
   */
  MHD_AcceptPolicyCallback apc;

  /**
   * Closure argument to apc.
   */
  void *apc_cls;

  /**
   * Function to call when we are done processing
   * a particular request.  May be NULL.
   */
  MHD_RequestCompletedCallback notify_completed;

  /**
   * Closure argument to notify_completed.
   */
  void *notify_completed_cls;

  /**
   * Function to call with the full URI at the
   * beginning of request processing.  May be NULL.
   * <p>
   * Returns the initial pointer to internal state
   * kept by the client for the request.
   */
  LogCallback uri_log_callback;

  /**
   * Closure argument to uri_log_callback.
   */
  void *uri_log_callback_cls;

#if HAVE_MESSAGES
  /**
   * Function for logging error messages (if we
   * support error reporting).
   */
  void (*custom_error_log) (void *cls, const char *fmt, va_list va);

  /**
   * Closure argument to custom_error_log.
   */
  void *custom_error_log_cls;
#endif

  /**
   * PID of the select thread (if we have internal select)
   */
  pthread_t pid;

  /**
   * Listen socket.
   */
  int socket_fd;

  /**
   * Are we shutting down?
   */
  int shutdown;

  /**
   * Size of the per-connection memory pools.
   */
  size_t pool_size;

  /**
   * Limit on the number of parallel connections.
   */
  unsigned int max_connections;

  /**
   * After how many seconds of inactivity should
   * connections time out?  Zero for no timeout.
   */
  unsigned int connection_timeout;

  /**
   * Maximum number of connections per IP, or 0 for
   * unlimited.
   */
  unsigned int per_ip_connection_limit;

  /**
   * Table storing number of connections per IP
   */
  void *per_ip_connection_count;

  /**
   * Mutex for per-IP connection counts
   */
  pthread_mutex_t per_ip_connection_mutex;

  /**
   * Daemon's options.
   */
  enum MHD_OPTION options;

  /**
   * Listen port.
   */
  unsigned short port;

#if HTTPS_SUPPORT
  /**
   * Desired cipher algorithms.
   */
  gnutls_priority_t priority_cache;

  /**
   * What kind of credentials are we offering
   * for SSL/TLS?
   */
  gnutls_credentials_type_t cred_type;

  /**
   * Server x509 credentials
   */
  gnutls_certificate_credentials_t x509_cred;

  /**
   * Diffie-Hellman parameters
   */
  gnutls_dh_params_t dh_params;

  /**
   * Pointer to our SSL/TLS key (in ASCII) in memory.
   */
  const char *https_mem_key;

  /**
   * Pointer to our SSL/TLS certificate (in ASCII) in memory.
   */
  const char *https_mem_cert;

#endif

  /**
   * Pointer to master daemon (NULL if this is the master)
   */
  struct MHD_Daemon *master;

  /**
   * Worker daemons (one per thread)
   */
  struct MHD_Daemon *worker_pool;

  /**
   * Number of worker daemons
   */
  unsigned int worker_pool_size;
};


#if EXTRA_CHECKS
#define EXTRA_CHECK(a) if (!(a)) abort();
#else
#define EXTRA_CHECK(a)
#endif



#endif

Added luasupport/HTTP/libmicrohttpd-X86/Include/microhttpd.h.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
/*
     This file is part of libmicrohttpd
     (C) 2006, 2007, 2008, 2009, 2010 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file microhttpd.h
 * @brief public interface to libmicrohttpd
 * @author Christian Grothoff
 * @author Chris GauthierDickey
 *
 * All symbols defined in this header start with MHD.  MHD is a small
 * HTTP daemon library.  As such, it does not have any API for logging
 * errors (you can only enable or disable logging to stderr).  Also,
 * it may not support all of the HTTP features directly, where
 * applicable, portions of HTTP may have to be handled by clients of
 * the library.<p>
 *
 * The library is supposed to handle everything that it must handle
 * (because the API would not allow clients to do this), such as basic
 * connection management; however, detailed interpretations of headers
 * -- such as range requests -- and HTTP methods are left to clients.
 * The library does understand HEAD and will only send the headers of
 * the response and not the body, even if the client supplied a body.
 * The library also understands headers that control connection
 * management (specifically, "Connection: close" and "Expect: 100
 * continue" are understood and handled automatically).<p>
 *
 * MHD understands POST data and is able to decode certain formats
 * (at the moment only "application/x-www-form-urlencoded" and
 * "mulitpart/formdata"). Unsupported encodings and large POST 
 * submissions may require the application to manually process
 * the stream, which is provided to the main application (and thus can be
 * processed, just not conveniently by MHD).<p>
 *
 * The header file defines various constants used by the HTTP protocol.
 * This does not mean that MHD actually interprets all of these
 * values.  The provided constants are exported as a convenience
 * for users of the library.  MHD does not verify that transmitted
 * HTTP headers are part of the standard specification; users of the
 * library are free to define their own extensions of the HTTP
 * standard and use those with MHD.<p>
 *
 * All functions are guaranteed to be completely reentrant and
 * thread-safe (with the exception of 'MHD_set_connection_value',
 * which must only be used in a particular context).<p>
 *
 * NEW: Before including "microhttpd.h" you should add the necessary
 * includes to define the "uint64_t", "size_t", "fd_set", "socklen_t"
 * and "struct sockaddr" data types (which headers are needed may
 * depend on your platform; for possible suggestions consult
 * "platform.h" in the MHD distribution).
 *
 */

#ifndef MHD_MICROHTTPD_H
#define MHD_MICROHTTPD_H

#ifdef __cplusplus
extern "C"
{
#if 0                           /* keep Emacsens' auto-indent happy */
}
#endif
#endif

/**
 * Current version of the library.
 */
#define MHD_VERSION 0x00090000

/**
 * MHD-internal return code for "YES".
 */
#define MHD_YES 1

/**
 * MHD-internal return code for "NO".
 */
#define MHD_NO 0

/**
 * Constant used to indicate unknown size (use when
 * creating a response).
 */
#ifdef UINT64_MAX
#define MHD_SIZE_UNKNOWN UINT64_MAX
#else
#define MHD_SIZE_UNKNOWN  ((uint64_t) -1LL)
#endif

/**
 * HTTP response codes.
 */
#define MHD_HTTP_CONTINUE 100
#define MHD_HTTP_SWITCHING_PROTOCOLS 101
#define MHD_HTTP_PROCESSING 102

#define MHD_HTTP_OK 200
#define MHD_HTTP_CREATED 201
#define MHD_HTTP_ACCEPTED 202
#define MHD_HTTP_NON_AUTHORITATIVE_INFORMATION 203
#define MHD_HTTP_NO_CONTENT 204
#define MHD_HTTP_RESET_CONTENT 205
#define MHD_HTTP_PARTIAL_CONTENT 206
#define MHD_HTTP_MULTI_STATUS 207

#define MHD_HTTP_MULTIPLE_CHOICES 300
#define MHD_HTTP_MOVED_PERMANENTLY 301
#define MHD_HTTP_FOUND 302
#define MHD_HTTP_SEE_OTHER 303
#define MHD_HTTP_NOT_MODIFIED 304
#define MHD_HTTP_USE_PROXY 305
#define MHD_HTTP_SWITCH_PROXY 306
#define MHD_HTTP_TEMPORARY_REDIRECT 307

#define MHD_HTTP_BAD_REQUEST 400
#define MHD_HTTP_UNAUTHORIZED 401
#define MHD_HTTP_PAYMENT_REQUIRED 402
#define MHD_HTTP_FORBIDDEN 403
#define MHD_HTTP_NOT_FOUND 404
#define MHD_HTTP_METHOD_NOT_ALLOWED 405
#define MHD_HTTP_METHOD_NOT_ACCEPTABLE 406
#define MHD_HTTP_PROXY_AUTHENTICATION_REQUIRED 407
#define MHD_HTTP_REQUEST_TIMEOUT 408
#define MHD_HTTP_CONFLICT 409
#define MHD_HTTP_GONE 410
#define MHD_HTTP_LENGTH_REQUIRED 411
#define MHD_HTTP_PRECONDITION_FAILED 412
#define MHD_HTTP_REQUEST_ENTITY_TOO_LARGE 413
#define MHD_HTTP_REQUEST_URI_TOO_LONG 414
#define MHD_HTTP_UNSUPPORTED_MEDIA_TYPE 415
#define MHD_HTTP_REQUESTED_RANGE_NOT_SATISFIABLE 416
#define MHD_HTTP_EXPECTATION_FAILED 417
#define MHD_HTTP_UNPROCESSABLE_ENTITY 422
#define MHD_HTTP_LOCKED 423
#define MHD_HTTP_FAILED_DEPENDENCY 424
#define MHD_HTTP_UNORDERED_COLLECTION 425
#define MHD_HTTP_UPGRADE_REQUIRED 426
#define MHD_HTTP_RETRY_WITH 449

#define MHD_HTTP_INTERNAL_SERVER_ERROR 500
#define MHD_HTTP_NOT_IMPLEMENTED 501
#define MHD_HTTP_BAD_GATEWAY 502
#define MHD_HTTP_SERVICE_UNAVAILABLE 503
#define MHD_HTTP_GATEWAY_TIMEOUT 504
#define MHD_HTTP_HTTP_VERSION_NOT_SUPPORTED 505
#define MHD_HTTP_VARIANT_ALSO_NEGOTIATES 506
#define MHD_HTTP_INSUFFICIENT_STORAGE 507
#define MHD_HTTP_BANDWIDTH_LIMIT_EXCEEDED 509
#define MHD_HTTP_NOT_EXTENDED 510

/* See also: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html */
#define MHD_HTTP_HEADER_ACCEPT "Accept"
#define MHD_HTTP_HEADER_ACCEPT_CHARSET "Accept-Charset"
#define MHD_HTTP_HEADER_ACCEPT_ENCODING "Accept-Encoding"
#define MHD_HTTP_HEADER_ACCEPT_LANGUAGE "Accept-Language"
#define MHD_HTTP_HEADER_ACCEPT_RANGES "Accept-Ranges"
#define MHD_HTTP_HEADER_AGE "Age"
#define MHD_HTTP_HEADER_ALLOW "Allow"
#define MHD_HTTP_HEADER_AUTHORIZATION "Authorization"
#define MHD_HTTP_HEADER_CACHE_CONTROL "Cache-Control"
#define MHD_HTTP_HEADER_CONNECTION "Connection"
#define MHD_HTTP_HEADER_CONTENT_ENCODING "Content-Encoding"
#define MHD_HTTP_HEADER_CONTENT_LANGUAGE "Content-Language"
#define MHD_HTTP_HEADER_CONTENT_LENGTH "Content-Length"
#define MHD_HTTP_HEADER_CONTENT_LOCATION "Content-Location"
#define MHD_HTTP_HEADER_CONTENT_MD5 "Content-MD5"
#define MHD_HTTP_HEADER_CONTENT_RANGE "Content-Range"
#define MHD_HTTP_HEADER_CONTENT_TYPE "Content-Type"
#define MHD_HTTP_HEADER_COOKIE "Cookie"
#define MHD_HTTP_HEADER_DATE "Date"
#define MHD_HTTP_HEADER_ETAG "ETag"
#define MHD_HTTP_HEADER_EXPECT "Expect"
#define MHD_HTTP_HEADER_EXPIRES "Expires"
#define MHD_HTTP_HEADER_FROM "From"
#define MHD_HTTP_HEADER_HOST "Host"
#define MHD_HTTP_HEADER_IF_MATCH "If-Match"
#define MHD_HTTP_HEADER_IF_MODIFIED_SINCE "If-Modified-Since"
#define MHD_HTTP_HEADER_IF_NONE_MATCH "If-None-Match"
#define MHD_HTTP_HEADER_IF_RANGE "If-Range"
#define MHD_HTTP_HEADER_IF_UNMODIFIED_SINCE "If-Unmodified-Since"
#define MHD_HTTP_HEADER_LAST_MODIFIED "Last-Modified"
#define MHD_HTTP_HEADER_LOCATION "Location"
#define MHD_HTTP_HEADER_MAX_FORWARDS "Max-Forwards"
#define MHD_HTTP_HEADER_PRAGMA "Pragma"
#define MHD_HTTP_HEADER_PROXY_AUTHENTICATE "Proxy-Authenticate"
#define MHD_HTTP_HEADER_PROXY_AUTHORIZATION "Proxy-Authorization"
#define MHD_HTTP_HEADER_RANGE "Range"
#define MHD_HTTP_HEADER_REFERER "Referer"
#define MHD_HTTP_HEADER_RETRY_AFTER "Retry-After"
#define MHD_HTTP_HEADER_SERVER "Server"
#define MHD_HTTP_HEADER_SET_COOKIE "Set-Cookie"
#define MHD_HTTP_HEADER_SET_COOKIE2 "Set-Cookie2"
#define MHD_HTTP_HEADER_TE "TE"
#define MHD_HTTP_HEADER_TRAILER "Trailer"
#define MHD_HTTP_HEADER_TRANSFER_ENCODING "Transfer-Encoding"
#define MHD_HTTP_HEADER_UPGRADE "Upgrade"
#define MHD_HTTP_HEADER_USER_AGENT "User-Agent"
#define MHD_HTTP_HEADER_VARY "Vary"
#define MHD_HTTP_HEADER_VIA "Via"
#define MHD_HTTP_HEADER_WARNING "Warning"
#define MHD_HTTP_HEADER_WWW_AUTHENTICATE "WWW-Authenticate"

/**
 * HTTP versions (used to match against the first line of the
 * HTTP header as well as in the response code).
 */
#define MHD_HTTP_VERSION_1_0 "HTTP/1.0"
#define MHD_HTTP_VERSION_1_1 "HTTP/1.1"

/**
 * HTTP methods
 */
#define MHD_HTTP_METHOD_CONNECT "CONNECT"
#define MHD_HTTP_METHOD_DELETE "DELETE"
#define MHD_HTTP_METHOD_GET "GET"
#define MHD_HTTP_METHOD_HEAD "HEAD"
#define MHD_HTTP_METHOD_OPTIONS "OPTIONS"
#define MHD_HTTP_METHOD_POST "POST"
#define MHD_HTTP_METHOD_PUT "PUT"
#define MHD_HTTP_METHOD_TRACE "TRACE"

/**
 * HTTP POST encodings, see also
 * http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4
 */
#define MHD_HTTP_POST_ENCODING_FORM_URLENCODED "application/x-www-form-urlencoded"
#define MHD_HTTP_POST_ENCODING_MULTIPART_FORMDATA "multipart/form-data"

/**
 * Options for the MHD daemon.  Note that if neither
 * MHD_USER_THREAD_PER_CONNECTION nor MHD_USE_SELECT_INTERNALLY are
 * used, the client wants control over the process and will call the
 * appropriate microhttpd callbacks.<p>
 *
 * Starting the daemon may also fail if a particular option is not
 * implemented or not supported on the target platform (i.e. no
 * support for SSL, threads or IPv6).
 */
enum MHD_FLAG
{
  /**
   * No options selected.
   */
  MHD_NO_FLAG = 0,

  /**
   * Run in debug mode.  If this flag is used, the
   * library should print error messages and warnings
   * to stderr.
   */
  MHD_USE_DEBUG = 1,

  /**
   * Run in https mode.
   */
  MHD_USE_SSL = 2,

  /**
   * Run using one thread per connection.
   */
  MHD_USE_THREAD_PER_CONNECTION = 4,

  /**
   * Run using an internal thread doing SELECT.
   */
  MHD_USE_SELECT_INTERNALLY = 8,

  /**
   * Run using the IPv6 protocol (otherwise, MHD will
   * just support IPv4).
   */
  MHD_USE_IPv6 = 16,

  /**
   * Be pedantic about the protocol (as opposed to as tolerant as
   * possible).  Specifically, at the moment, this flag causes MHD to
   * reject http 1.1 connections without a "Host" header.  This is
   * required by the standard, but of course in violation of the "be
   * as liberal as possible in what you accept" norm.  It is
   * recommended to turn this ON if you are testing clients against
   * MHD, and OFF in production.
   */
  MHD_USE_PEDANTIC_CHECKS = 32,

  /**
   * Use poll instead of select. This allows sockets with fd >= FD_SETSIZE.
   * This option only works in conjunction with MHD_USE_THREAD_PER_CONNECTION
   * (at this point).
   */
  MHD_USE_POLL = 64
};

/**
 * MHD options.  Passed in the varargs portion
 * of MHD_start_daemon.
 */
enum MHD_OPTION
{

  /**
   * No more options / last option.  This is used
   * to terminate the VARARGs list.
   */
  MHD_OPTION_END = 0,

  /**
   * Maximum memory size per connection (followed by a
   * size_t).
   */
  MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1,

  /**
   * Maximum number of concurrent connections to
   * accept (followed by an unsigned int).
   */
  MHD_OPTION_CONNECTION_LIMIT = 2,

  /**
   * After how many seconds of inactivity should a
   * connection automatically be timed out? (followed
   * by an unsigned int; use zero for no timeout).
   */
  MHD_OPTION_CONNECTION_TIMEOUT = 3,

  /**
   * Register a function that should be called whenever a request has
   * been completed (this can be used for application-specific clean
   * up).  Requests that have never been presented to the application
   * (via MHD_AccessHandlerCallback) will not result in
   * notifications.<p>
   *
   * This option should be followed by TWO pointers.  First a pointer
   * to a function of type "MHD_RequestCompletedCallback" and second a
   * pointer to a closure to pass to the request completed callback.
   * The second pointer maybe NULL.
   */
  MHD_OPTION_NOTIFY_COMPLETED = 4,

  /**
   * Limit on the number of (concurrent) connections made to the
   * server from the same IP address.  Can be used to prevent one
   * IP from taking over all of the allowed connections.  If the
   * same IP tries to establish more than the specified number of
   * connections, they will be immediately rejected.  The option
   * should be followed by an "unsigned int".  The default is
   * zero, which means no limit on the number of connections
   * from the same IP address.
   */
  MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5,

  /**
   * Bind daemon to the supplied sockaddr. this option should be followed by a
   * 'struct sockaddr *'.  If 'MHD_USE_IPv6' is specified, the 'struct sockaddr*'
   * should point to a 'struct sockaddr_in6', otherwise to a 'struct sockaddr_in'.
   */
  MHD_OPTION_SOCK_ADDR = 6,

  /**
   * Specify a function that should be called before parsing the URI from
   * the client.  The specified callback function can be used for processing
   * the URI (including the options) before it is parsed.  The URI after
   * parsing will no longer contain the options, which maybe inconvenient for
   * logging.  This option should be followed by two arguments, the first
   * one must be of the form
   * <pre>
   *  void * my_logger(void * cls, const char * uri)
   * </pre>
   * where the return value will be passed as
   * (*con_cls) in calls to the MHD_AccessHandlerCallback
   * when this request is processed later; returning a
   * value of NULL has no special significance (however,
   * note that if you return non-NULL, you can no longer
   * rely on the first call to the access handler having
   * NULL == *con_cls on entry;)
   * "cls" will be set to the second argument following
   * MHD_OPTION_URI_LOG_CALLBACK.  Finally, uri will
   * be the 0-terminated URI of the request.
   */
  MHD_OPTION_URI_LOG_CALLBACK = 7,

  /**
   * Memory pointer for the private key (key.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
   */
  MHD_OPTION_HTTPS_MEM_KEY = 8,

  /**
   * Memory pointer for the certificate (cert.pem) to be used by the
   * HTTPS daemon.  This option should be followed by an
   * "const char*" argument.
   * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
   */
  MHD_OPTION_HTTPS_MEM_CERT = 9,

  /**
   * Daemon credentials type.
   * Followed by an argument of type
   * "gnutls_credentials_type_t".
   */
  MHD_OPTION_HTTPS_CRED_TYPE = 10,

  /**
   * Memory pointer to a "const char*" specifying the
   * cipher algorithm (default: "NORMAL").
   */
  MHD_OPTION_HTTPS_PRIORITIES = 11,

  /**
   * Pass a listen socket for MHD to use (systemd-style).  If this
   * option is used, MHD will not open its own listen socket(s). The
   * argument passed must be of type "int" and refer to an
   * existing socket that has been bound to a port and is listening.
   */
  MHD_OPTION_LISTEN_SOCKET = 12,

  /**
   * Use the given function for logging error messages.
   * This option must be followed by two arguments; the
   * first must be a pointer to a function
   * of type "void fun(void * arg, const char * fmt, va_list ap)"
   * and the second a pointer "void*" which will
   * be passed as the "arg" argument to "fun".
   * <p>
   * Note that MHD will not generate any log messages
   * if it was compiled without the "--enable-messages"
   * flag being set.
   */
  MHD_OPTION_EXTERNAL_LOGGER = 13,

  /**
   * Number (unsigned int) of threads in thread pool. Enable
   * thread pooling by setting this value to to something
   * greater than 1. Currently, thread model must be
   * MHD_USE_SELECT_INTERNALLY if thread pooling is enabled
   * (MHD_start_daemon returns NULL for an unsupported thread
   * model).
   */
  MHD_OPTION_THREAD_POOL_SIZE = 14,

  /**
   * Additional options given in an array of "struct MHD_OptionItem".
   * The array must be terminated with an entry '{MHD_OPTION_END, 0, NULL}'.
   * An example for code using MHD_OPTION_ARRAY is:
   * <code>
   * struct MHD_OptionItem ops[] = {
   * { MHD_OPTION_CONNECTION_LIMIT, 100, NULL },
   * { MHD_OPTION_CONNECTION_TIMEOUT, 10, NULL },
   * { MHD_OPTION_END, 0, NULL }
   * };
   * d = MHD_start_daemon(0, 8080, NULL, NULL, dh, NULL,
   *                      MHD_OPTION_ARRAY, ops,
   *                      MHD_OPTION_END);
   * </code>
   * For options that expect a single pointer argument, the
   * second member of the struct MHD_OptionItem is ignored.
   * For options that expect two pointer arguments, the first
   * argument must be cast to 'intptr_t'.
   */
  MHD_OPTION_ARRAY = 15
};


/**
 * Entry in an MHD_OPTION_ARRAY.
 */
struct MHD_OptionItem
{
  /**
   * Which option is being given.  Use MHD_OPTION_END
   * to terminate the array.
   */
  enum MHD_OPTION option;

  /**
   * Option value (for integer arguments, and for options requiring
   * two pointer arguments); should be 0 for options that take no
   * arguments or only a single pointer argument.
   */
  intptr_t value;

  /**
   * Pointer option value (use NULL for options taking no arguments
   * or only an integer option).
   */
  void *ptr_value;

};


/**
 * The MHD_ValueKind specifies the source of
 * the key-value pairs in the HTTP protocol.
 */
enum MHD_ValueKind
{

  /**
   * Response header
   */
  MHD_RESPONSE_HEADER_KIND = 0,

  /**
   * HTTP header.
   */
  MHD_HEADER_KIND = 1,

  /**
   * Cookies.  Note that the original HTTP header containing
   * the cookie(s) will still be available and intact.
   */
  MHD_COOKIE_KIND = 2,

  /**
   * POST data.  This is available only if a content encoding
   * supported by MHD is used (currently only URL encoding),
   * and only if the posted content fits within the available
   * memory pool.  Note that in that case, the upload data
   * given to the MHD_AccessHandlerCallback will be
   * empty (since it has already been processed).
   */
  MHD_POSTDATA_KIND = 4,

  /**
   * GET (URI) arguments.
   */
  MHD_GET_ARGUMENT_KIND = 8,

  /**
   * HTTP footer (only for http 1.1 chunked encodings).
   */
  MHD_FOOTER_KIND = 16
};

/**
 * The MHD_RequestTerminationCode specifies reasons
 * why a request has been terminated (or completed).
 */
enum MHD_RequestTerminationCode
{

  /**
   * We finished sending the response.
   */
  MHD_REQUEST_TERMINATED_COMPLETED_OK = 0,

  /**
   * Error handling the connection (resources
   * exhausted, other side closed connection,
   * application error accepting request, etc.)
   */
  MHD_REQUEST_TERMINATED_WITH_ERROR = 1,

  /**
   * No activity on the connection for the number
   * of seconds specified using
   * MHD_OPTION_CONNECTION_TIMEOUT.
   */
  MHD_REQUEST_TERMINATED_TIMEOUT_REACHED = 2,

  /**
   * We had to close the session since MHD was being
   * shut down.
   */
  MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN = 3

};


/**
 * Values of this enum are used to specify what
 * information about a connection is desired.
 */
enum MHD_ConnectionInfoType
{
  /**
   * What cipher algorithm is being used.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CIPHER_ALGO,

  /**
   *
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_PROTOCOL,

  /**
   * Obtain IP address of the client.
   * Takes no extra arguments.
   */
  MHD_CONNECTION_INFO_CLIENT_ADDRESS,

  /**
   * Get the GNUTLS session handle.
   */
  MHD_CONNECTION_INFO_GNUTLS_SESSION
};

/**
 * Values of this enum are used to specify what
 * information about a deamon is desired.
 */
enum MHD_DaemonInfoType
{
  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_CipherAlgorithm').
   */
  MHD_DAEMON_INFO_KEY_SIZE,

  /**
   * Request information about the key size for
   * a particular cipher algorithm.  The cipher
   * algorithm should be passed as an extra
   * argument (of type 'enum MHD_GNUTLS_HashAlgorithm').
   */
  MHD_DAEMON_INFO_MAC_KEY_SIZE,

  /**
   * Request the file descriptor for the listening socket.
   * No extra arguments should be passed.
   */
  MHD_DAEMON_INFO_LISTEN_FD
};



/**
 * Handle for the daemon (listening on a socket for HTTP traffic).
 */
struct MHD_Daemon;

/**
 * Handle for a connection / HTTP request.  With HTTP/1.1, multiple
 * requests can be run over the same connection.  However, MHD will
 * only show one request per TCP connection to the client at any given
 * time.
 */
struct MHD_Connection;

/**
 * Handle for a response.
 */
struct MHD_Response;

/**
 * Handle for POST processing.
 */
struct MHD_PostProcessor;

/**
 * Callback for serious error condition. The default action is to abort().
 * @param cls user specified value
 * @param file where the error occured
 * @param line where the error occured
 * @param reason error detail, may be NULL
 */
typedef void (*MHD_PanicCallback) (void *cls,
                                   const char *file,
                                   unsigned int line,
                                   const char *reason);

/**
 * Allow or deny a client to connect.
 *
 * @param addr address information from the client
 * @param addrlen length of the address information
 * @return MHD_YES if connection is allowed, MHD_NO if not
 */
typedef int
  (*MHD_AcceptPolicyCallback) (void *cls,
                               const struct sockaddr * addr,
                               socklen_t addrlen);

/**
 * A client has requested the given url using the given method ("GET",
 * "PUT", "DELETE", "POST", etc).  The callback must call MHS
 * callbacks to provide content to give back to the client and return
 * an HTTP status code (i.e. 200 for OK, 404, etc.).
 *
 * @param cls argument given together with the function
 *        pointer when the handler was registered with MHD
 * @param url the requested url
 * @param method the HTTP method used ("GET", "PUT", etc.)
 * @param version the HTTP version string (i.e. "HTTP/1.1")
 * @param upload_data the data being uploaded (excluding HEADERS,
 *        for a POST that fits into memory and that is encoded
 *        with a supported encoding, the POST data will NOT be
 *        given in upload_data and is instead available as
 *        part of MHD_get_connection_values; very large POST
 *        data *will* be made available incrementally in
 *        upload_data)
 * @param upload_data_size set initially to the size of the
 *        upload_data provided; the method must update this
 *        value to the number of bytes NOT processed;
 * @param con_cls pointer that the callback can set to some
 *        address and that will be preserved by MHD for future
 *        calls for this request; since the access handler may
 *        be called many times (i.e., for a PUT/POST operation
 *        with plenty of upload data) this allows the application
 *        to easily associate some request-specific state.
 *        If necessary, this state can be cleaned up in the
 *        global "MHD_RequestCompleted" callback (which
 *        can be set with the MHD_OPTION_NOTIFY_COMPLETED).
 *        Initially, <tt>*con_cls</tt> will be NULL.
 * @return MHS_YES if the connection was handled successfully,
 *         MHS_NO if the socket must be closed due to a serios
 *         error while handling the request
 */
typedef int
  (*MHD_AccessHandlerCallback) (void *cls,
                                struct MHD_Connection * connection,
                                const char *url,
                                const char *method,
                                const char *version,
                                const char *upload_data,
                                size_t *upload_data_size,
                                void **con_cls);

/**
 * Signature of the callback used by MHD to notify the
 * application about completed requests.
 *
 * @param cls client-defined closure
 * @param connection connection handle
 * @param con_cls value as set by the last call to
 *        the MHD_AccessHandlerCallback
 * @param toe reason for request termination
 * @see MHD_OPTION_NOTIFY_COMPLETED
 */
typedef void
  (*MHD_RequestCompletedCallback) (void *cls,
                                   struct MHD_Connection * connection,
                                   void **con_cls,
                                   enum MHD_RequestTerminationCode toe);

/**
 * Iterator over key-value pairs.  This iterator
 * can be used to iterate over all of the cookies,
 * headers, or POST-data fields of a request, and
 * also to iterate over the headers that have been
 * added to a response.
 *
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_KeyValueIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key, const char *value);

/**
 * Callback used by libmicrohttpd in order to obtain content.  The
 * callback is to copy at most "max" bytes of content into "buf".  The
 * total number of bytes that has been placed into "buf" should be
 * returned.<p>
 *
 * Note that returning zero will cause libmicrohttpd to try again,
 * either "immediately" if in multi-threaded mode (in which case the
 * callback may want to do blocking operations) or in the next round
 * if MHD_run is used.  Returning 0 for a daemon that runs in internal
 * select mode is an error (since it would result in busy waiting) and
 * will cause the program to be aborted (abort()).
 *
 * @param cls extra argument to the callback
 * @param pos position in the datastream to access;
 *        note that if an MHD_Response object is re-used,
 *        it is possible for the same content reader to
 *        be queried multiple times for the same data;
 *        however, if an MHD_Response is not re-used,
 *        libmicrohttpd guarantees that "pos" will be
 *        the sum of all non-negative return values
 *        obtained from the content reader so far.
 * @return -1 for the end of transmission (or on error);
 *  if a content transfer size was pre-set and the callback
 *  has provided fewer than that amount of data,
 *  MHD will close the connection with the client;
 *  if no content size was specified and this is an
 *  http 1.1 connection using chunked encoding, MHD will
 *  interpret "-1" as the normal end of the transfer
 *  (possibly allowing the client to perform additional
 *  requests using the same TCP connection).
 */
typedef int
  (*MHD_ContentReaderCallback) (void *cls,
				uint64_t pos,
				char *buf,
				int max);

/**
 * This method is called by libmicrohttpd if we
 * are done with a content reader.  It should
 * be used to free resources associated with the
 * content reader.
 */
typedef void (*MHD_ContentReaderFreeCallback) (void *cls);

/**
 * Iterator over key-value pairs where the value
 * maybe made available in increments and/or may
 * not be zero-terminated.  Used for processing
 * POST data.
 *
 * @param cls user-specified closure
 * @param kind type of the value
 * @param key 0-terminated key for the value
 * @param filename name of the uploaded file, NULL if not known
 * @param content_type mime-type of the data, NULL if not known
 * @param transfer_encoding encoding of the data, NULL if not known
 * @param data pointer to size bytes of data at the
 *              specified offset
 * @param off offset of data in the overall value
 * @param size number of bytes in data available
 * @return MHD_YES to continue iterating,
 *         MHD_NO to abort the iteration
 */
typedef int
  (*MHD_PostDataIterator) (void *cls,
                           enum MHD_ValueKind kind,
                           const char *key,
                           const char *filename,
                           const char *content_type,
                           const char *transfer_encoding,
                           const char *data, uint64_t off, size_t size);

/* **************** Daemon handling functions ***************** */

/**
 * Start a webserver on the given port.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @param ... list of options (type-value pairs,
 *        terminated with MHD_OPTION_END).
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon_va (unsigned int options,
                                        unsigned short port,
                                        MHD_AcceptPolicyCallback apc,
                                        void *apc_cls,
                                        MHD_AccessHandlerCallback dh,
                                        void *dh_cls, va_list ap);

/**
 * Start a webserver on the given port.  Variadic version of
 * MHD_start_daemon_va.
 *
 * @param flags combination of MHD_FLAG values
 * @param port port to bind to
 * @param apc callback to call to check which clients
 *        will be allowed to connect; you can pass NULL
 *        in which case connections from any IP will be
 *        accepted
 * @param apc_cls extra argument to apc
 * @param dh handler called for all requests (repeatedly)
 * @param dh_cls extra argument to dh
 * @return NULL on error, handle to daemon on success
 */
struct MHD_Daemon *MHD_start_daemon (unsigned int flags,
                                     unsigned short port,
                                     MHD_AcceptPolicyCallback apc,
                                     void *apc_cls,
                                     MHD_AccessHandlerCallback dh,
                                     void *dh_cls, ...);

/**
 * Shutdown an http daemon.
 *
 * @param daemon daemon to stop
 */
void MHD_stop_daemon (struct MHD_Daemon *daemon);


/**
 * Obtain the select sets for this daemon.
 *
 * @param daemon daemon to get sets from
 * @param read_fd_set read set
 * @param write_fd_set write set
 * @param except_fd_set except set
 * @param max_fd increased to largest FD added (if larger
 *               than existing value); can be NULL
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int
MHD_get_fdset (struct MHD_Daemon *daemon,
               fd_set * read_fd_set,
               fd_set * write_fd_set, fd_set * except_fd_set, int *max_fd);

/**
 * Obtain timeout value for select for this daemon
 * (only needed if connection timeout is used).  The
 * returned value is how long select should at most
 * block, not the timeout value set for connections.
 *
 * @param daemon daemon to query for timeout
 * @param timeout set to the timeout (in milliseconds)
 * @return MHD_YES on success, MHD_NO if timeouts are
 *        not used (or no connections exist that would
 *        necessiate the use of a timeout right now).
 */
int MHD_get_timeout (struct MHD_Daemon *daemon, unsigned long long *timeout);


/**
 * Run webserver operations (without blocking unless
 * in client callbacks).  This method should be called
 * by clients in combination with MHD_get_fdset
 * if the client-controlled select method is used.
 *
 * @param daemon daemon to run
 * @return MHD_YES on success, MHD_NO if this
 *         daemon was not started with the right
 *         options for this call.
 */
int MHD_run (struct MHD_Daemon *daemon);


/* **************** Connection handling functions ***************** */

/**
 * Get all of the headers from the request.
 *
 * @param connection connection to get values from
 * @param kind types of values to iterate over
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_connection_values (struct MHD_Connection *connection,
                           enum MHD_ValueKind kind,
                           MHD_KeyValueIterator iterator, void *iterator_cls);

/**
 * This function can be used to add an entry to
 * the HTTP headers of a connection (so that the
 * MHD_get_connection_values function will return
 * them -- and the MHD PostProcessor will also
 * see them).  This maybe required in certain
 * situations (see Mantis #1399) where (broken)
 * HTTP implementations fail to supply values needed
 * by the post processor (or other parts of the
 * application).
 * <p>
 * This function MUST only be called from within
 * the MHD_AccessHandlerCallback (otherwise, access
 * maybe improperly synchronized).  Furthermore,
 * the client must guarantee that the key and
 * value arguments are 0-terminated strings that
 * are NOT freed until the connection is closed.
 * (The easiest way to do this is by passing only
 * arguments to permanently allocated strings.).
 *
 * @param connection the connection for which a
 *  value should be set
 * @param kind kind of the value
 * @param key key for the value
 * @param value the value itself
 * @return MHD_NO if the operation could not be
 *         performed due to insufficient memory;
 *         MHD_YES on success
 */
int
MHD_set_connection_value (struct MHD_Connection *connection,
                          enum MHD_ValueKind kind,
                          const char *key, const char *value);

/**
 * Sets the global error handler to a different implementation.  "cb"
 * will only be called in the case of typically fatal, serious
 * internal consistency issues.  These issues should only arise in the
 * case of serious memory corruption or similar problems with the
 * architecture.  While "cb" is allowed to return and MHD will then
 * try to continue, this is never safe.
 *
 * The default implementation that is used if no panic function is set
 * simply calls "abort".  Alternative implementations might call
 * "exit" or other similar functions.
 *
 * @param cb new error handler
 * @param cls passed to error handler
 */
void MHD_set_panic_func (MHD_PanicCallback cb, void *cls);

/**
 * Get a particular header value.  If multiple
 * values match the kind, return any one of them.
 *
 * @param connection connection to get values from
 * @param kind what kind of value are we looking for
 * @param key the header to look for
 * @return NULL if no such item was found
 */
const char *MHD_lookup_connection_value (struct MHD_Connection *connection,
                                         enum MHD_ValueKind kind,
                                         const char *key);

/**
 * Queue a response to be transmitted to the client (as soon as
 * possible but after MHD_AccessHandlerCallback returns).
 *
 * @param connection the connection identifying the client
 * @param status_code HTTP status code (i.e. 200 for OK)
 * @param response response to transmit
 * @return MHD_NO on error (i.e. reply already sent),
 *         MHD_YES on success or if message has been queued
 */
int
MHD_queue_response (struct MHD_Connection *connection,
                    unsigned int status_code, struct MHD_Response *response);


/* **************** Response manipulation functions ***************** */

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response, MHD_SIZE_UNKNOWN for unknown
 * @param block_size preferred block size for querying crc (advisory only,
 *                   MHD may still call crc using smaller chunks); this
 *                   is essentially the buffer size used for IO, clients
 *                   should pick a value that is appropriate for IO and
 *                   memory performance requirements
 * @param crc callback to use to obtain response data
 * @param crc_cls extra argument to crc
 * @param crfc callback to call to free crc_cls resources
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_callback (uint64_t size,
                                                        size_t block_size,
                                                        MHD_ContentReaderCallback
                                                        crc, void *crc_cls,
                                                        MHD_ContentReaderFreeCallback
                                                        crfc);

/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param data the data itself
 * @param must_free libmicrohttpd should free data when done
 * @param must_copy libmicrohttpd must make a copy of data
 *        right away, the data maybe released anytime after
 *        this call returns
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_data (size_t size,
                                                    void *data,
                                                    int must_free,
                                                    int must_copy);


/**
 * Create a response object.  The response object can be extended with
 * header information and then be used any number of times.
 *
 * @param size size of the data portion of the response
 * @param fd file descriptor referring to a file on disk with the data; will be closed when response is destroyed
 * @return NULL on error (i.e. invalid arguments, out of memory)
 */
struct MHD_Response *MHD_create_response_from_fd (size_t size,
						  int fd);

/**
 * Destroy a response object and associated resources.  Note that
 * libmicrohttpd may keep some of the resources around if the response
 * is still in the queue for some clients, so the memory may not
 * necessarily be freed immediatley.
 *
 * @param response response to destroy
 */
void MHD_destroy_response (struct MHD_Response *response);

/**
 * Add a header line to the response.
 *
 * @param response response to add a header to
 * @param header the header to add
 * @param content value to add
 * @return MHD_NO on error (i.e. invalid header or content format),
 *         or out of memory
 */
int
MHD_add_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Delete a header line from the response.
 *
 * @param response response to remove a header from
 * @param header the header to delete
 * @param content value to delete
 * @return MHD_NO on error (no such header known)
 */
int
MHD_del_response_header (struct MHD_Response *response,
                         const char *header, const char *content);

/**
 * Get all of the headers added to a response.
 *
 * @param response response to query
 * @param iterator callback to call on each header;
 *        maybe NULL (then just count headers)
 * @param iterator_cls extra argument to iterator
 * @return number of entries iterated over
 */
int
MHD_get_response_headers (struct MHD_Response *response,
                          MHD_KeyValueIterator iterator, void *iterator_cls);


/**
 * Get a particular header from the response.
 *
 * @param response response to query
 * @param key which header to get
 * @return NULL if header does not exist
 */
const char *MHD_get_response_header (struct MHD_Response *response,
                                     const char *key);


/* ********************** PostProcessor functions ********************** */

/**
 * Create a PostProcessor.
 *
 * A PostProcessor can be used to (incrementally) parse the data
 * portion of a POST request.  Note that some buggy browsers fail to
 * set the encoding type.  If you want to support those, you may have
 * to call 'MHD_set_connection_value' with the proper encoding type
 * before creating a post processor (if no supported encoding type is
 * set, this function will fail).
 *
 * @param connection the connection on which the POST is
 *        happening (used to determine the POST format)
 * @param buffer_size maximum number of bytes to use for
 *        internal buffering (used only for the parsing,
 *        specifically the parsing of the keys).  A
 *        tiny value (256-1024) should be sufficient.
 *        Do NOT use a value smaller than 256.
 * @param iter iterator to be called with the parsed data,
 *        Must NOT be NULL.
 * @param cls first argument to ikvi
 * @return  NULL on error (out of memory, unsupported encoding),
            otherwise a PP handle
 */
struct MHD_PostProcessor *MHD_create_post_processor (struct MHD_Connection
                                                     *connection,
                                                     size_t buffer_size,
                                                     MHD_PostDataIterator
                                                     iter, void *cls);

/**
 * Parse and process POST data.
 * Call this function when POST data is available
 * (usually during an MHD_AccessHandlerCallback)
 * with the upload_data and upload_data_size.
 * Whenever possible, this will then cause calls
 * to the MHD_IncrementalKeyValueIterator.
 *
 * @param pp the post processor
 * @param post_data post_data_len bytes of POST data
 * @param post_data_len length of post_data
 * @return MHD_YES on success, MHD_NO on error
 *         (out-of-memory, iterator aborted, parse error)
 */
int
MHD_post_process (struct MHD_PostProcessor *pp,
                  const char *post_data, size_t post_data_len);

/**
 * Release PostProcessor resources.
 *
 * @param pp the PostProcessor to destroy
 * @return MHD_YES if processing completed nicely,
 *         MHD_NO if there were spurious characters / formatting
 *                problems; it is common to ignore the return
 *                value of this function
 */
int MHD_destroy_post_processor (struct MHD_PostProcessor *pp);



/* ********************** generic query functions ********************** */

/**
 * Information about a connection.
 */
union MHD_ConnectionInfo
{

  /**
   * Cipher algorithm used, of type "enum gnutls_cipher_algorithm".
   */
  int /* enum gnutls_cipher_algorithm */ cipher_algorithm;

  /**
   * Protocol used, of type "enum gnutls_protocol".
   */
  int /* enum gnutls_protocol */ protocol;

  /**
   * GNUtls session handle, of type "gnutls_session_t".
   */
  void * /* gnutls_session_t */ tls_session;

  /**
   * Address information for the client.
   */
  struct sockaddr_in * client_addr;
};

/**
 * Obtain information about the given connection.
 *
 * @param connection what connection to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_ConnectionInfo *MHD_get_connection_info (struct MHD_Connection
                                                         *connection,
                                                         enum
                                                         MHD_ConnectionInfoType
                                                         infoType, ...);


/**
 * Information about an MHD daemon.
 */
union MHD_DaemonInfo
{
  /**
   * Size of the key (unit??)
   */
  size_t key_size;

  /**
   * Size of the mac key (unit??)
   */
  size_t mac_key_size;

  /**
   * Listen socket file descriptor
   */
  int listen_fd;
};

/**
 * Obtain information about the given daemon
 * (not fully implemented!).
 *
 * @param daemon what daemon to get information about
 * @param infoType what information is desired?
 * @param ... depends on infoType
 * @return NULL if this information is not available
 *         (or if the infoType is unknown)
 */
const union MHD_DaemonInfo *MHD_get_daemon_info (struct MHD_Daemon *daemon,
                                                 enum MHD_DaemonInfoType
                                                 infoType, ...);

/**
 * Obtain the version of this library
 *
 * @return static version string, e.g. "0.4.1"
 */
const char* MHD_get_version(void);

#if 0                           /* keep Emacsens' auto-indent happy */
{
#endif
#ifdef __cplusplus
}
#endif

#endif

Added luasupport/HTTP/libmicrohttpd-X86/Include/platform.h.







































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
     This file is part of libmicrohttpd
     (C) 2008 Christian Grothoff (and other contributing authors)

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     This library is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file platform.h
 * @brief platform-specific includes for libmicrohttpd
 * @author Christian Grothoff
 *
 * This file is included by the libmicrohttpd code
 * before "microhttpd.h"; it provides the required
 * standard headers (which are platform-specific).<p>
 *
 * Note that this file depends on our configure.ac
 * build process and the generated config.h file.
 * Hence you cannot include it directly in applications
 * that use libmicrohttpd.
 */
#ifndef PLATFORM_H
#define PLATFORM_H

#include "MHD_config.h"

#define _XOPEN_SOURCE_EXTENDED  1
#if OS390
#define _OPEN_THREADS
#define _OPEN_SYS_SOCK_IPV6
#define _OPEN_MSGQ_EXT
#define _LP64
#endif

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#if !defined(MINGW) && !defined(__SYMBIAN32__)
#include <search.h>
#endif
#include <stddef.h>
#undef HAVE_CONFIG_H
#include <pthread.h>
#define HAVE_CONFIG_H 1

/* different OSes have fd_set in
   a broad range of header files;
   we just include most of them (if they
   are available) */


#ifdef OS_VXWORKS
#include <sockLib.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <sys/mman.h>
#define RESTRICT __restrict__
#endif

#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#if HAVE_SYS_MSG_H
#include <sys/msg.h>
#endif
#if HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif
#if HAVE_NETDB_H
#include <netdb.h>
#endif
#if HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_TIME_H
#include <time.h>
#endif
#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#if HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif

#include "plibc.h"


#endif

Added luasupport/HTTP/libmicrohttpd-X86/Include/plibc.h.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
/*
     This file is part of PlibC.
     (C) 2005, 2006, 2007, 2008, 2009 Nils Durner (and other contributing authors)

	   This library is free software; you can redistribute it and/or
	   modify it under the terms of the GNU Lesser General Public
	   License as published by the Free Software Foundation; either
	   version 2.1 of the License, or (at your option) any later version.

	   This library is distributed in the hope that it will be useful,
	   but WITHOUT ANY WARRANTY; without even the implied warranty of
	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	   Lesser General Public License for more details.

	   You should have received a copy of the GNU Lesser General Public
	   License along with this library; if not, write to the Free Software
	   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

/**
 * @file include/plibc.h
 * @brief PlibC header
 * @attention This file is usually not installed under Unix,
 *            so ship it with your application
 * @version $Revision: 39 $
 */

#ifndef _PLIBC_H_
#define _PLIBC_H_

#ifndef SIGALRM
#define SIGALRM 14
#endif

#ifdef __cplusplus
extern "C"
{
#endif

#include <stddef.h>

#ifdef Q_OS_WIN32
#define WINDOWS 1
#endif

#define HAVE_PLIBC_FD 0

#ifdef WINDOWS

#if ENABLE_NLS
#include "langinfo.h"
#endif

#include <windows.h>
#include <Ws2tcpip.h>
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
#include <stdarg.h>

#define __BYTE_ORDER BYTE_ORDER
#define __BIG_ENDIAN BIG_ENDIAN

/* Conflicts with our definitions */
#define __G_WIN32_H__

/* Convert LARGE_INTEGER to double */
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + \
  (double)((x).LowPart))

#define socklen_t int
#define ssize_t int
#define off_t int
#define int64_t long long
#define int32_t long

  struct stat64
  {
    _dev_t st_dev;
    _ino_t st_ino;
    _mode_t st_mode;
    short st_nlink;
    short st_uid;
    short st_gid;
    _dev_t st_rdev;
    __int64 st_size;
    __time64_t st_atime;
    __time64_t st_mtime;
    __time64_t st_ctime;
  };

#ifndef pid_t
#define pid_t int
#endif

#ifndef WEXITSTATUS
#define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
#endif

#ifndef MSG_DONTWAIT
#define MSG_DONTWAIT 0
#endif

/* Thanks to the Cygwin project */
#define ENOCSI 43               /* No CSI structure available */
#define EL2HLT 44               /* Level 2 halted */
#ifndef  EDEADLK
#define EDEADLK 45              /* Deadlock condition */
#endif
#ifndef  ENOLCK
#define ENOLCK 46               /* No record locks available */
#endif
#define EBADE 50                /* Invalid exchange */
#define EBADR 51                /* Invalid request descriptor */
#define EXFULL 52               /* Exchange full */
#define ENOANO 53               /* No anode */
#define EBADRQC 54              /* Invalid request code */
#define EBADSLT 55              /* Invalid slot */
#ifndef  EDEADLOCK
#define EDEADLOCK EDEADLK       /* File locking deadlock error */
#endif
#define EBFONT 57               /* Bad font file fmt */
#define ENOSTR 60               /* Device not a stream */
#define ENODATA 61              /* No data (for no delay io) */
#define ETIME 62                /* Timer expired */
#define ENOSR 63                /* Out of streams resources */
#define ENONET 64               /* Machine is not on the network */
#define ENOPKG 65               /* Package not installed */
#define EREMOTE 66              /* The object is remote */
#define ENOLINK 67              /* The link has been severed */
#define EADV 68                 /* Advertise error */
#define ESRMNT 69               /* Srmount error */
#define ECOMM 70                /* Communication error on send */
#define EPROTO 71               /* Protocol error */
#define EMULTIHOP 74            /* Multihop attempted */
#define ELBIN 75                /* Inode is remote (not really error) */
#define EDOTDOT 76              /* Cross mount point (not really error) */
#define EBADMSG 77              /* Trying to read unreadable message */
#define ENOTUNIQ 80             /* Given log. name not unique */
#define EBADFD 81               /* f.d. invalid for this operation */
#define EREMCHG 82              /* Remote address changed */
#define ELIBACC 83              /* Can't access a needed shared lib */
#define ELIBBAD 84              /* Accessing a corrupted shared lib */
#define ELIBSCN 85              /* .lib section in a.out corrupted */
#define ELIBMAX 86              /* Attempting to link in too many libs */
#define ELIBEXEC 87             /* Attempting to exec a shared library */
#ifndef  ENOSYS
#define ENOSYS 88               /* Function not implemented */
#endif
#define ENMFILE 89              /* No more files */
#ifndef  ENOTEMPTY
#define ENOTEMPTY 90            /* Directory not empty */
#endif
#ifndef  ENAMETOOLONG
#define ENAMETOOLONG 91         /* File or path name too long */
#endif
#define ELOOP 92                /* Too many symbolic links */
#define EOPNOTSUPP 95           /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96         /* Protocol family not supported */
#define ECONNRESET 104          /* Connection reset by peer */
#define ENOBUFS 105             /* No buffer space available */
#define EAFNOSUPPORT 106        /* Address family not supported by protocol family */
#define EPROTOTYPE 107          /* Protocol wrong type for socket */
#define ENOTSOCK 108            /* Socket operation on non-socket */
#define ENOPROTOOPT 109         /* Protocol not available */
#define ESHUTDOWN 110           /* Can't send after socket shutdown */
#define ECONNREFUSED 111        /* Connection refused */
#define EADDRINUSE 112          /* Address already in use */
#define ECONNABORTED 113        /* Connection aborted */
#define ENETUNREACH 114         /* Network is unreachable */
#define ENETDOWN 115            /* Network interface is not configured */
#ifndef  ETIMEDOUT
#define ETIMEDOUT 116           /* Connection timed out */
#endif
#define EHOSTDOWN 117           /* Host is down */
#define EHOSTUNREACH 118        /* Host is unreachable */
#define EINPROGRESS 119         /* Connection already in progress */
#define EALREADY 120            /* Socket already connected */
#define EDESTADDRREQ 121        /* Destination address required */
#define EMSGSIZE 122            /* Message too long */
#define EPROTONOSUPPORT 123     /* Unknown protocol */
#define ESOCKTNOSUPPORT 124     /* Socket type not supported */
#define EADDRNOTAVAIL 125       /* Address not available */
#define ENETRESET 126           /* Connection aborted by network */
#define EISCONN 127             /* Socket is already connected */
#define ENOTCONN 128            /* Socket is not connected */
#define ETOOMANYREFS 129        /* Too many references: cannot splice */
#define EPROCLIM 130            /* Too many processes */
#define EUSERS 131              /* Too many users */
#define EDQUOT 132              /* Disk quota exceeded */
#define ESTALE 133              /* Unknown error */
#ifndef  ENOTSUP
#define ENOTSUP 134             /* Not supported */
#endif
#define ENOMEDIUM 135           /* No medium (in tape drive) */
#define ENOSHARE 136            /* No such host or network path */
#define ECASECLASH 137          /* Filename exists with different case */
#define EWOULDBLOCK EAGAIN      /* Operation would block */
#define EOVERFLOW 139           /* Value too large for defined data type */

#undef HOST_NOT_FOUND
#define HOST_NOT_FOUND 1
#undef TRY_AGAIN
#define TRY_AGAIN 2
#undef NO_RECOVERY
#define NO_RECOVERY 3
#undef NO_ADDRESS
#define NO_ADDRESS 4

#define PROT_READ   0x1
#define PROT_WRITE  0x2
#define MAP_SHARED  0x1
#define MAP_PRIVATE 0x2         /* unsupported */
#define MAP_FIXED   0x10
#define MAP_FAILED  ((void *)-1)

  struct statfs
  {
    long f_type;                /* type of filesystem (see below) */
    long f_bsize;               /* optimal transfer block size */
    long f_blocks;              /* total data blocks in file system */
    long f_bfree;               /* free blocks in fs */
    long f_bavail;              /* free blocks avail to non-superuser */
    long f_files;               /* total file nodes in file system */
    long f_ffree;               /* free file nodes in fs */
    long f_fsid;                /* file system id */
    long f_namelen;             /* maximum length of filenames */
    long f_spare[6];            /* spare for later */
  };

  extern const struct in6_addr in6addr_any;     /* :: */
  extern const struct in6_addr in6addr_loopback;        /* ::1 */

/* Taken from the Wine project <http://www.winehq.org>
    /wine/include/winternl.h */
  enum SYSTEM_INFORMATION_CLASS
  {
    SystemBasicInformation = 0,
    Unknown1,
    SystemPerformanceInformation = 2,
    SystemTimeOfDayInformation = 3,     /* was SystemTimeInformation */
    Unknown4,
    SystemProcessInformation = 5,
    Unknown6,
    Unknown7,
    SystemProcessorPerformanceInformation = 8,
    Unknown9,
    Unknown10,
    SystemDriverInformation,
    Unknown12,
    Unknown13,
    Unknown14,
    Unknown15,
    SystemHandleList,
    Unknown17,
    Unknown18,
    Unknown19,
    Unknown20,
    SystemCacheInformation,
    Unknown22,
    SystemInterruptInformation = 23,
    SystemExceptionInformation = 33,
    SystemRegistryQuotaInformation = 37,
    SystemLookasideInformation = 45
  };

  typedef struct
  {
    LARGE_INTEGER IdleTime;
    LARGE_INTEGER KernelTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER Reserved1[2];
    ULONG Reserved2;
  } SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;

#define sleep(secs) (Sleep(secs * 1000))

/*********************** statfs *****************************/
/* fake block size */
#define FAKED_BLOCK_SIZE 512

/* linux-compatible values for fs type */
#define MSDOS_SUPER_MAGIC     0x4d44
#define NTFS_SUPER_MAGIC      0x5346544E

/*********************** End of statfs ***********************/

#define SHUT_RDWR SD_BOTH

/* Operations for flock() */
#define LOCK_SH  1              /* shared lock */
#define LOCK_EX  2              /* exclusive lock */
#define LOCK_NB  4              /* or'd with one of the above to prevent
                                   blocking */
#define LOCK_UN  8              /* remove lock */

/* Not supported under MinGW */
#define S_IRGRP 0
#define S_IWGRP 0
#define S_IROTH 0
#define S_IXGRP 0
#define S_IWOTH 0
#define S_IXOTH 0
#define S_ISUID 0
#define S_ISGID 0
#define S_ISVTX 0
#define S_IRWXG 0
#define S_IRWXO 0

#define SHUT_WR SD_SEND
#define SHUT_RD SD_RECEIVE
#define SHUT_RDWR SD_BOTH

#define SIGKILL 9
#define SIGTERM 15

#define SetErrnoFromWinError(e) _SetErrnoFromWinError(e, __FILE__, __LINE__)

  BOOL _plibc_CreateShortcut (const char *pszSrc, const char *pszDest);
  BOOL _plibc_DereferenceShortcut (char *pszShortcut);
  char *plibc_ChooseDir (char *pszTitle, unsigned long ulFlags);
  char *plibc_ChooseFile (char *pszTitle, unsigned long ulFlags);
  long QueryRegistry (HKEY hMainKey, char *pszKey, char *pszSubKey,
                      char *pszBuffer, long *pdLength);

  BOOL __win_IsHandleMarkedAsBlocking (SOCKET hHandle);
  void __win_SetHandleBlockingMode (SOCKET s, BOOL bBlocking);
  void __win_DiscardHandleBlockingMode (SOCKET s);
  int _win_isSocketValid (int s);
  int plibc_conv_to_win_path (const char *pszUnix, char *pszWindows);
  unsigned plibc_get_handle_count ();

  typedef void (*TPanicProc) (int, char *);
  void plibc_set_panic_proc (TPanicProc proc);

  int flock (int fd, int operation);
  int fsync (int fildes);
  int inet_pton (int af, const char *src, void *dst);
  int inet_pton4 (const char *src, u_char * dst, int pton);
#if USE_IPV6
  int inet_pton6 (const char *src, u_char * dst);
#endif
  int truncate (const char *fname, int distance);
  int statfs (const char *path, struct statfs *buf);
  const char *hstrerror (int err);
  int mkstemp (char *tmplate);
  char *strptime (const char *buf, const char *format, struct tm *tm);
  const char *inet_ntop (int af, const void *src, char *dst, size_t size);

  int plibc_init (char *pszOrg, char *pszApp);
  void plibc_shutdown ();
  int plibc_initialized ();
  int plibc_conv_to_win_path_ex (const char *pszUnix, char *pszWindows,
                                 int derefLinks);
  void _SetErrnoFromWinError (long lWinError, char *pszCaller, int iLine);
  void SetErrnoFromWinsockError (long lWinError);
  void SetHErrnoFromWinError (long lWinError);
  void SetErrnoFromHRESULT (HRESULT hRes);
  int GetErrnoFromWinsockError (long lWinError);
  FILE *_win_fopen (const char *filename, const char *mode);
  DIR *_win_opendir (const char *dirname);
  int _win_open (const char *filename, int oflag, ...);
#ifdef ENABLE_NLS
  char *_win_bindtextdomain (const char *domainname, const char *dirname);
#endif
  int _win_chdir (const char *path);
  int _win_close (int fd);
  int _win_creat (const char *path, mode_t mode);
  char *_win_ctime (const time_t * clock);
  char *_win_ctime_r (const time_t * clock, char *buf);
  int _win_fstat (int handle, struct stat *buffer);
  int _win_ftruncate (int fildes, off_t length);
  void _win_gettimeofday (struct timeval *tp, void *tzp);
  int _win_kill (pid_t pid, int sig);
  int _win_pipe (int *phandles);
  int _win_rmdir (const char *path);
  int _win_access (const char *path, int mode);
  int _win_chmod (const char *filename, int pmode);
  char *realpath (const char *file_name, char *resolved_name);
  long _win_random (void);
  int _win_remove (const char *path);
  int _win_rename (const char *oldname, const char *newname);
  int _win_stat (const char *path, struct stat *buffer);
  int _win_stat64 (const char *path, struct stat64 *buffer);
  int _win_unlink (const char *filename);
  int _win_write (int fildes, const void *buf, size_t nbyte);
  int _win_read (int fildes, void *buf, size_t nbyte);
  size_t _win_fwrite (const void *buffer, size_t size, size_t count,
                      FILE * stream);
  size_t _win_fread (void *buffer, size_t size, size_t count, FILE * stream);
  int _win_symlink (const char *path1, const char *path2);
  void *_win_mmap (void *start, size_t len, int access, int flags, int fd,
                   unsigned long long offset);
  int _win_munmap (void *start, size_t length);
  int _win_lstat (const char *path, struct stat *buf);
  int _win_lstat64 (const char *path, struct stat64 *buf);
  int _win_readlink (const char *path, char *buf, size_t bufsize);
  int _win_accept (SOCKET s, struct sockaddr *addr, int *addrlen);
  int _win_printf (const char *format, ...);
  int _win_fprintf (FILE * f, const char *format, ...);
  int _win_vprintf (const char *format, va_list ap);
  int _win_vfprintf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vsprintf (char *dest, const char *format, va_list arg_ptr);
  int _win_vsnprintf (char *str, size_t size, const char *format,
                      va_list arg_ptr);
  int _win_snprintf (char *str, size_t size, const char *format, ...);
  int _win_sprintf (char *dest, const char *format, ...);
  int _win_vsscanf (const char *str, const char *format, va_list arg_ptr);
  int _win_sscanf (const char *str, const char *format, ...);
  int _win_vfscanf (FILE * stream, const char *format, va_list arg_ptr);
  int _win_vscanf (const char *format, va_list arg_ptr);
  int _win_scanf (const char *format, ...);
  int _win_fscanf (FILE * stream, const char *format, ...);
  pid_t _win_waitpid (pid_t pid, int *stat_loc, int options);
  int _win_bind (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_connect (SOCKET s, const struct sockaddr *name, int namelen);
  int _win_getpeername (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockname (SOCKET s, struct sockaddr *name, int *namelen);
  int _win_getsockopt (SOCKET s, int level, int optname, char *optval,
                       int *optlen);
  int _win_listen (SOCKET s, int backlog);
  int _win_recv (SOCKET s, char *buf, int len, int flags);
  int _win_recvfrom (SOCKET s, void *buf, int len, int flags,
                     struct sockaddr *from, int *fromlen);
  int _win_select (int max_fd, fd_set * rfds, fd_set * wfds, fd_set * efds,
                   const struct timeval *tv);
  int _win_send (SOCKET s, const char *buf, int len, int flags);
  int _win_sendto (SOCKET s, const char *buf, int len, int flags,
                   const struct sockaddr *to, int tolen);
  int _win_setsockopt (SOCKET s, int level, int optname, const void *optval,
                       int optlen);
  int _win_shutdown (SOCKET s, int how);
  SOCKET _win_socket (int af, int type, int protocol);
  struct hostent *_win_gethostbyaddr (const char *addr, int len, int type);
  struct hostent *_win_gethostbyname (const char *name);
  struct hostent *gethostbyname2 (const char *name, int af);
  char *_win_strerror (int errnum);
  int IsWinNT ();
  char *index (const char *s, int c);

#if !HAVE_STRNDUP
  char *strndup (const char *s, size_t n);
#endif
#if !HAVE_STRNLEN
  size_t strnlen (const char *str, size_t maxlen);
#endif

#define strcasecmp(a, b) stricmp(a, b)
#define strncasecmp(a, b, c) strnicmp(a, b, c)

#endif                          /* WINDOWS */

#ifndef WINDOWS
#define DIR_SEPARATOR '/'
#define DIR_SEPARATOR_STR "/"
#define PATH_SEPARATOR ';'
#define PATH_SEPARATOR_STR ";"
#define NEWLINE "\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) bindtextdomain(d, n)
#endif
#define CREAT(p, m) creat(p, m)
#define PLIBC_CTIME(c) ctime(c)
#define CTIME_R(c, b) ctime_r(c, b)
#undef FOPEN
#define FOPEN(f, m) fopen(f, m)
#define FTRUNCATE(f, l) ftruncate(f, l)
#define OPENDIR(d) opendir(d)
#define OPEN open
#define CHDIR(d) chdir(d)
#define CLOSE(f) close(f)
#define LSEEK(f, o, w) lseek(f, o, w)
#define RMDIR(f) rmdir(f)
#define ACCESS(p, m) access(p, m)
#define CHMOD(f, p) chmod(f, p)
#define FSTAT(h, b) fstat(h, b)
#define PLIBC_KILL(p, s) kill(p, s)
#define PIPE(h) pipe(h)
#define REMOVE(p) remove(p)
#define RENAME(o, n) rename(o, n)
#define STAT(p, b) stat(p, b)
#define STAT64(p, b) stat64(p, b)
#define UNLINK(f) unlink(f)
#define WRITE(f, b, n) write(f, b, n)
#define READ(f, b, n) read(f, b, n)
#define GN_FREAD(b, s, c, f) fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) fwrite(b, s, c, f)
#define SYMLINK(a, b) symlink(a, b)
#define MMAP(s, l, p, f, d, o) mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) munmap(s, l)
#define STRERROR(i) strerror(i)
#define RANDOM() random()
#define READLINK(p, b, s) readlink(p, b, s)
#define LSTAT(p, b) lstat(p, b)
#define LSTAT64(p, b) lstat64(p, b)
#define PRINTF printf
#define FPRINTF fprintf
#define VPRINTF(f, a) vprintf(f, a)
#define VFPRINTF(s, f, a) vfprintf(s, f, a)
#define VSPRINTF(d, f, a) vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF snprintf
#define SPRINTF sprintf
#define VSSCANF(s, f, a) vsscanf(s, f, a)
#define SSCANF sscanf
#define VFSCANF(s, f, a) vfscanf(s, f, a)
#define VSCANF(f, a) vscanf(f, a)
#define SCANF scanf
#define FSCANF fscanf
#define WAITPID(p, s, o) waitpid(p, s, o)
#define ACCEPT(s, a, l) accept(s, a, l)
#define BIND(s, n, l) bind(s, n, l)
#define CONNECT(s, n, l) connect(s, n, l)
#define GETPEERNAME(s, n, l) getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) getsockopt(s, l, o, v, p)
#define LISTEN(s, b) listen(s, b)
#define RECV(s, b, l, f) recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) select(n, r, w, e, t)
#define SEND(s, b, l, f) send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) shutdown(s, h)
#define SOCKET(a, t, p) socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) gethostbyname(n)
#define GETTIMEOFDAY(t, n) gettimeofday(t, n)
#define INSQUE(e, p) insque(e, p)
#define REMQUE(e) remque(e)

#ifndef __SYMBIAN32__
#define HSEARCH(i, a) hsearch(i, a)
#define HCREATE(n) hcreate(n)
#define HDESTROY() hdestroy()
#define HSEARCH_R(i, a, r, h) hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) hcreate_r(n, h)
#define HDESTROY_R(h) hdestroy_r(h)
#define TSEARCH(k, r, c) tsearch(k, r, c)
#define TFIND(k, r, c) tfind(k, r, c)
#define TDELETE(k, r, c) tdelete(k, r, c)
#define TWALK(r, a) twalk(r, a)
#define TDESTROY(r, f) tdestroy(r, f)
#define LFIND(k, b, n, s, c) lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) lsearch(k, b, n, s, c)
#else  // __SYMBIAN32__
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif  // !__SYMBIAN32__

#else
#define DIR_SEPARATOR '\\'
#define DIR_SEPARATOR_STR "\\"
#define PATH_SEPARATOR ':'
#define PATH_SEPARATOR_STR ":"
#define NEWLINE "\r\n"

#ifdef ENABLE_NLS
#define BINDTEXTDOMAIN(d, n) _win_bindtextdomain(d, n)
#endif
#define CREAT(p, m) _win_creat(p, m)
#define PLIBC_CTIME(c) _win_ctime(c)
#define CTIME_R(c, b) _win_ctime_r(c, b)
#define FOPEN(f, m) _win_fopen(f, m)
#define FTRUNCATE(f, l) _win_ftruncate(f, l)
#define OPENDIR(d) _win_opendir(d)
#define OPEN _win_open
#define CHDIR(d) _win_chdir(d)
#define CLOSE(f) _win_close(f)
#define PLIBC_KILL(p, s) _win_kill(p, s)
#define LSEEK(f, o, w) _win_lseek(f, o, w)
#define FSTAT(h, b) _win_fstat(h, b)
#define RMDIR(f) _win_rmdir(f)
#define ACCESS(p, m) _win_access(p, m)
#define CHMOD(f, p) _win_chmod(f, p)
#define PIPE(h) _win_pipe(h)
#define RANDOM() _win_random()
#define REMOVE(p) _win_remove(p)
#define RENAME(o, n) _win_rename(o, n)
#define STAT(p, b) _win_stat(p, b)
#define STAT64(p, b) _win_stat64(p, b)
#define UNLINK(f) _win_unlink(f)
#define WRITE(f, b, n) _win_write(f, b, n)
#define READ(f, b, n) _win_read(f, b, n)
#define GN_FREAD(b, s, c, f) _win_fread(b, s, c, f)
#define GN_FWRITE(b, s, c, f) _win_fwrite(b, s, c, f)
#define SYMLINK(a, b) _win_symlink(a, b)
#define MMAP(s, l, p, f, d, o) _win_mmap(s, l, p, f, d, o)
#define MUNMAP(s, l) _win_munmap(s, l)
#define STRERROR(i) _win_strerror(i)
#define READLINK(p, b, s) _win_readlink(p, b, s)
#define LSTAT(p, b) _win_lstat(p, b)
#define LSTAT64(p, b) _win_lstat64(p, b)
#define PRINTF(f, ...) _win_printf(f , __VA_ARGS__)
#define FPRINTF(fil, fmt, ...) _win_fprintf(fil, fmt, __VA_ARGS__)
#define VPRINTF(f, a) _win_vprintf(f, a)
#define VFPRINTF(s, f, a) _win_vfprintf(s, f, a)
#define VSPRINTF(d, f, a) _win_vsprintf(d, f, a)
#define VSNPRINTF(str, size, fmt, a) _win_vsnprintf(str, size, fmt, a)
#define _REAL_SNPRINTF(str, size, fmt, ...) _win_snprintf(str, size, fmt, __VA_ARGS__)
#define SPRINTF(d, f, ...) _win_sprintf(d, f, __VA_ARGS__)
#define VSSCANF(s, f, a) _win_vsscanf(s, f, a)
#define SSCANF(s, f, ...) _win_sscanf(s, f, __VA_ARGS__)
#define VFSCANF(s, f, a) _win_vfscanf(s, f, a)
#define VSCANF(f, a) _win_vscanf(f, a)
#define SCANF(f, ...) _win_scanf(f, __VA_ARGS__)
#define FSCANF(s, f, ...) _win_fscanf(s, f, __VA_ARGS__)
#define WAITPID(p, s, o) _win_waitpid(p, s, o)
#define ACCEPT(s, a, l) _win_accept(s, a, l)
#define BIND(s, n, l) _win_bind(s, n, l)
#define CONNECT(s, n, l) _win_connect(s, n, l)
#define GETPEERNAME(s, n, l) _win_getpeername(s, n, l)
#define GETSOCKNAME(s, n, l) _win_getsockname(s, n, l)
#define GETSOCKOPT(s, l, o, v, p) _win_getsockopt(s, l, o, v, p)
#define LISTEN(s, b) _win_listen(s, b)
#define RECV(s, b, l, f) _win_recv(s, b, l, f)
#define RECVFROM(s, b, l, f, r, o) _win_recvfrom(s, b, l, f, r, o)
#define SELECT(n, r, w, e, t) _win_select(n, r, w, e, t)
#define SEND(s, b, l, f) _win_send(s, b, l, f)
#define SENDTO(s, b, l, f, o, n) _win_sendto(s, b, l, f, o, n)
#define SETSOCKOPT(s, l, o, v, n) _win_setsockopt(s, l, o, v, n)
#define SHUTDOWN(s, h) _win_shutdown(s, h)
#define SOCKET(a, t, p) _win_socket(a, t, p)
#define GETHOSTBYADDR(a, l, t) _win_gethostbyname(a, l, t)
#define GETHOSTBYNAME(n) _win_gethostbyname(n)
#define GETTIMEOFDAY(t, n) _win_gettimeofday(t, n)
#define INSQUE(e, p) _win_insque(e, p)
#define REMQUE(e) _win_remque(e)
#define HSEARCH(i, a) _win_hsearch(i, a)
#define HCREATE(n) _win_hcreate(n)
#define HDESTROY() _win_hdestroy()
#define HSEARCH_R(i, a, r, h) _win_hsearch_r(i, a, r, h)
#define HCREATE_R(n, h) _win_hcreate_r(n, h)
#define HDESTROY_R(h) _win_hdestroy_r(h)
#define TSEARCH(k, r, c) _win_tsearch(k, r, c)
#define TFIND(k, r, c) _win_tfind(k, r, c)
#define TDELETE(k, r, c) _win_tdelete(k, r, c)
#define TWALK(r, a) _win_twalk(r, a)
#define TDESTROY(r, f) _win_tdestroy(r, f)
#define LFIND(k, b, n, s, c) _win_lfind(k, b, n, s, c)
#define LSEARCH(k, b, n, s, c) _win_lsearch(k, b, n, s, c)
#endif

/* search.h */

/* Prototype structure for a linked-list data structure.
   This is the type used by the `insque' and `remque' functions.  */

  struct PLIBC_SEARCH_QELEM
  {
    struct qelem *q_forw;
    struct qelem *q_back;
    char q_data[1];
  };


/* Insert ELEM into a doubly-linked list, after PREV.  */
  void _win_insque (void *__elem, void *__prev);

/* Unlink ELEM from the doubly-linked list that it is in.  */
  void _win_remque (void *__elem);


/* For use with hsearch(3).  */
  typedef int (*PLIBC_SEARCH__compar_fn_t) (__const void *, __const void *);

  typedef PLIBC_SEARCH__compar_fn_t _win_comparison_fn_t;

/* Action which shall be performed in the call the hsearch.  */
  typedef enum
  {
    PLIBC_SEARCH_FIND,
    PLIBC_SEARCH_ENTER
  }
  PLIBC_SEARCH_ACTION;

  typedef struct PLIBC_SEARCH_entry
  {
    char *key;
    void *data;
  }
  PLIBC_SEARCH_ENTRY;

/* The reentrant version has no static variables to maintain the state.
   Instead the interface of all functions is extended to take an argument
   which describes the current status.  */
  typedef struct _PLIBC_SEARCH_ENTRY
  {
    unsigned int used;
    PLIBC_SEARCH_ENTRY entry;
  }
  _PLIBC_SEARCH_ENTRY;


/* Family of hash table handling functions.  The functions also
   have reentrant counterparts ending with _r.  The non-reentrant
   functions all work on a signle internal hashing table.  */

/* Search for entry matching ITEM.key in internal hash table.  If
   ACTION is `FIND' return found entry or signal error by returning
   NULL.  If ACTION is `ENTER' replace existing data (if any) with
   ITEM.data.  */
  PLIBC_SEARCH_ENTRY *_win_hsearch (PLIBC_SEARCH_ENTRY __item,
                                    PLIBC_SEARCH_ACTION __action);

/* Create a new hashing table which will at most contain NEL elements.  */
  int _win_hcreate (size_t __nel);

/* Destroy current internal hashing table.  */
  void _win_hdestroy (void);

/* Data type for reentrant functions.  */
  struct PLIBC_SEARCH_hsearch_data
  {
    struct _PLIBC_SEARCH_ENTRY *table;
    unsigned int size;
    unsigned int filled;
  };

/* Reentrant versions which can handle multiple hashing tables at the
   same time.  */
  int _win_hsearch_r (PLIBC_SEARCH_ENTRY __item, PLIBC_SEARCH_ACTION __action,
                      PLIBC_SEARCH_ENTRY ** __retval,
                      struct PLIBC_SEARCH_hsearch_data *__htab);
  int _win_hcreate_r (size_t __nel, struct PLIBC_SEARCH_hsearch_data *__htab);
  void _win_hdestroy_r (struct PLIBC_SEARCH_hsearch_data *__htab);


/* The tsearch routines are very interesting. They make many
   assumptions about the compiler.  It assumes that the first field
   in node must be the "key" field, which points to the datum.
   Everything depends on that.  */
/* For tsearch */
  typedef enum
  {
    PLIBC_SEARCH_preorder,
    PLIBC_SEARCH_postorder,
    PLIBC_SEARCH_endorder,
    PLIBC_SEARCH_leaf
  }
  PLIBC_SEARCH_VISIT;

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP and insert a new element if not found.  */
  void *_win_tsearch (__const void *__key, void **__rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

/* Search for an entry matching the given KEY in the tree pointed to
   by *ROOTP.  If no matching entry is available return NULL.  */
  void *_win_tfind (__const void *__key, void *__const * __rootp,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Remove the element matching KEY from the tree pointed to by *ROOTP.  */
  void *_win_tdelete (__const void *__restrict __key,
                      void **__restrict __rootp,
                      PLIBC_SEARCH__compar_fn_t __compar);

  typedef void (*PLIBC_SEARCH__action_fn_t) (__const void *__nodep,
                                             PLIBC_SEARCH_VISIT __value,
                                             int __level);

/* Walk through the whole tree and call the ACTION callback for every node
   or leaf.  */
  void _win_twalk (__const void *__root, PLIBC_SEARCH__action_fn_t __action);

/* Callback type for function to free a tree node.  If the keys are atomic
   data this function should do nothing.  */
  typedef void (*PLIBC_SEARCH__free_fn_t) (void *__nodep);

/* Destroy the whole tree, call FREEFCT for each node or leaf.  */
  void _win_tdestroy (void *__root, PLIBC_SEARCH__free_fn_t __freefct);


/* Perform linear search for KEY by comparing by COMPAR in an array
   [BASE,BASE+NMEMB*SIZE).  */
  void *_win_lfind (__const void *__key, __const void *__base,
                    size_t * __nmemb, size_t __size,
                    PLIBC_SEARCH__compar_fn_t __compar);

/* Perform linear search for KEY by comparing by COMPAR function in
   array [BASE,BASE+NMEMB*SIZE) and insert entry if not found.  */
  void *_win_lsearch (__const void *__key, void *__base,
                      size_t * __nmemb, size_t __size,
                      PLIBC_SEARCH__compar_fn_t __compar);


#ifdef __cplusplus
}
#endif


#endif                          //_PLIBC_H_

/* end of plibc.h */

Added luasupport/HTTP/libmicrohttpd-X86/Libs/connection.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Libs/daemon.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Libs/internal.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Libs/memorypool.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Libs/postprocessor.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Libs/reason_phrase.o.

cannot compute difference between binary files

Added luasupport/HTTP/libmicrohttpd-X86/Libs/response.o.

cannot compute difference between binary files

Added luasupport/HTTP/makefat.sh.







































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh
# Make a FAT distribution of libmicrohttpd
# Copies the .o and .h files needed to
# be included in a project using the system
# Syntax:	makehttpd.sh <source dir> <dest dir>
# 31-Oct-2010 Add internal.h to copy stuff

# (1) Assumed source1= X86 libmicrohttpd created with makehttp.sh
# (2) Assumed source2= PPC libmicrohttpd created with makehttp.sh
# (3) Output directory

#  (1) Make the directory if not existant

mkdir -pv $3/Include
mkdir -pv $3/Libs

# Now copy the necessary files

# .h's
cp $1/Include/MHD_config.h $3/Include
cp $1/Include/microhttpd.h $3/Include
cp $1/Include/platform.h $3/Include
cp $1/Include/plibc.h $3/Include
cp $1/Include/internal.h $3/Include

# Form the FAT .o's
lipo -create $1/Libs/response.o $2/Libs/response.o -output $3/Libs/response.o
lipo -create $1/Libs/reason_phrase.o $2/Libs/reason_phrase.o -output $3/Libs/reason_phrase.o
lipo -create $1/Libs/postprocessor.o $2/Libs/postprocessor.o -output $3/Libs/postprocessor.o
lipo -create $1/Libs/memorypool.o $2/Libs/memorypool.o -output $3/Libs/memorypool.o
lipo -create $1/Libs/internal.o $2/Libs/internal.o -output $3/Libs/internal.o
lipo -create $1/Libs/daemon.o $2/Libs/daemon.o -output $3/Libs/daemon.o
lipo -create $1/Libs/connection.o $2/Libs/connection.o -output $3/Libs/connection.o


Added luasupport/HTTP/makehttpd.sh.





































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh
# Make a distribution of libmicrohttpd
# Copies the .o and .h files needed to
# be included in a project using the system
# Syntax:	makehttpd.sh <source dir> <dest dir>
# 31-Oct-2010 Add internal.h to copy stuff

# (1) Assumed source= libmicrohttpd directory
#					  with completed build

#  (1) Make the directory if not existant

mkdir -pv $2/Include
mkdir -pv $2/Libs

# Now copy the necessary files

# .h's
cp $1/MHD_config.h $2/Include
cp $1/src/include/microhttpd.h $2/Include
cp $1/src/include/platform.h $2/Include
cp $1/src/include/plibc.h $2/Include
cp $1/src/daemon/internal.h $2/Include

# .o's
cp $1/src/daemon/response.o $2/Libs
cp $1/src/daemon/reason_phrase.o $2/Libs
cp $1/src/daemon/postprocessor.o $2/Libs
cp $1/src/daemon/memorypool.o $2/Libs
cp $1/src/daemon/internal.o $2/Libs
cp $1/src/daemon/daemon.o $2/Libs
cp $1/src/daemon/connection.o $2/Libs


Added luasupport/HTTP/rest/rest.c.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*************************************************************************
/*
*  Module Name:         REST	- Application Web server
*
*  Description:         This server is used to serve web pages and 
*						do RESTful web operations
*
*  Author:              Jim Schimpf
*
*  Revision History:	26 Sep 2010 Initial version
*						10 Oct 2010 Add restcom comunications
*
*	Uses RSERV_DATA structure with the following field values
*					to start operation
*						http_port	- Port used for HTTP interaction
*						http_site	- Path to HTML files served
*						rest_base	- Base of REST command tree
*	Will run till run_flag set FALSE in the RSERV_DATA structure.
*
*	Callbacks:
*		Once running when a RESTful URI is received it will call the
*		rest() routine and from there the request will be sent via
*		restcom command link to the handler (Lua script)
*		Results will be returned the same way and the request returned
*		to libmicrohttpd 
*	This program uses libmicrohttpd from Christian Grothoff as the HTTP
*	protocol manager
*
*	26 Sep 2010 Initial version
*	29 Sep 2010 Convert to a module
*	10-Dec-2010 Change to require two tries to handle request.
*	23-Dec-2011 [7b5a95ed75] Modify to allow just IP address to get
*				initial page
*/
//************************************************************************

#include <fcntl.h>
#include <sys/stat.h>
#include <ctype.h>
#include "platform.h"
#include "microhttpd.h"
#include "internal.h"
#include "rest.h"
#include "restcom.h"

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

typedef enum {
				NO_SITE,
				HTTP_SITE,
				REST_SITE,
				} URL_TYPE;

typedef struct {
				const char *method_name;
				HTTP_TYPE	type;
				} HTTP_METHOD_LIST;
				
static HTTP_METHOD_LIST methods[] = {
									MHD_HTTP_METHOD_CONNECT,	HTTP_CONNECT,
									MHD_HTTP_METHOD_DELETE,		HTTP_DELETE,
									MHD_HTTP_METHOD_GET,		HTTP_GET,
									MHD_HTTP_METHOD_HEAD,		HTTP_HEAD,
									MHD_HTTP_METHOD_OPTIONS,	HTTP_OPTIONS,
									MHD_HTTP_METHOD_POST,		HTTP_POST,
									MHD_HTTP_METHOD_PUT,		HTTP_PUT,
									MHD_HTTP_METHOD_TRACE,		HTTP_TRACE,
								};

static int distributor (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr);
static HTTP_TYPE get_method( const char *method );
static char *classify_url(const char *url,
							RSERV_DATA *data,
							char *lurl_buffer,
							URL_TYPE *type);
static void set_address( struct MHD_Connection *connection, RSERV_DATA *data);
static int check_address(  RSERV_DATA *data);

static int http (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          HTTP_TYPE method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr);
static char *get_file( char *path, size_t *size );

static int rest (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          HTTP_TYPE method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr);

#define MSG_404 "<html><head><title>404 PAGE</title></head><body><center><h1>404 Page NOT FOUND</h1></center></body></html>"
#define DEF_HTTP_PORT	8080

static RSERV_DATA local_data;


#if 0
	#pragma mark -
	#pragma mark -- Server External API --
#endif

/***********************************************************************
*
*	int rest_server( NONE )	- Run server
*
*	INPUT:	NONE
*
*	OUTPUT:	Return 0 if run ok (when server shutdown)
*			< 0 if server start/run problem
*
**********************************************************************/

int rest_server( void )	
{
	struct MHD_Daemon *d = NULL;
	int rtnval = -1;		// Set for failure
	RSERV_DATA *rdata = rest_data();
	
	// (0) Find max length of REST and HTTP base sizes
	
	if( rdata->len_http_base > rdata->len_rest_base )
		rdata->len_header = rdata->len_http_base;
	else
		rdata->len_header = rdata->len_rest_base;
	
	// (1) Set up RESTCOM channel
	
	if( restcom_server_open() == 0 )
	{
		// (2) Start HTTP server
		
		rdata->run_flag = 1;		// Set for RUN
		d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
							rdata->http_port,
							NULL, NULL, &distributor, rdata , MHD_OPTION_END);
								
		// (3) If it started then keep running till user 
		// calls quits
		
		if( d != NULL )
		{
			rtnval = 0;		// Successful run
			rdata->d = (void *)d;
		}
	}
	return rtnval;
}

/***********************************************************************
*
*	int rest_server_close( NONE )	- Close server
*
*	INPUT:	NONE
*
*	OUTPUT:	NONE
*
**********************************************************************/

void rest_server_close( void )
{
	RSERV_DATA *rdata = rest_data();
	struct MHD_Daemon *d;
	
	// (1) Shutdown HTTP
	
	d = (struct MHD_Daemon *)rdata->d;
	MHD_stop_daemon (d);
		
	// (2) Shutdown Server comm
		
	restcom_server_close();
}

/***********************************************************************
*
*	RSERV_DATA *rest_data(void)	- Return pointer to server data struct
*
*	INPUT:	NONE
*
*	OUTPUT:	Pointer to local server data struct
*
**********************************************************************/

RSERV_DATA *rest_data(void)
{
	return( &local_data );
}

#if 0
	#pragma mark -
	#pragma mark -- MHD Support ---
#endif

/***********************************************************************
*
*	static int distributor ()	- Do HTTP Request
*
*	INPUT:	cls			- Registration option
*			connection	- Context
*			url			- URL requested
*			method		- Type of action needed
*			version		- HTTP version string
*			upload_data	- Passed in data on POST
*			upload_data_size	- Size in bytes of post
*			ptr			- 
*
*	OUTPUT:	Return MHD_YES if successful, MHD_NO if not
*	NOTE: Change to requre two tries to get message (not sure why....)
*
**********************************************************************/

static int distributor (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          const char *method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
	RSERV_DATA *data = (RSERV_DATA *)cls;
	//char *site;
	char *lurl;			// Local use only
	char lurl_buffer[256];
	int ret = MHD_NO;
	HTTP_TYPE call_method;
	struct MHD_Response *response = NULL;
	URL_TYPE type;

	// (0) Change to only answer on second try (?)

	if (NULL == *ptr) 
	{
		*ptr = connection;	// Set to receive second request
		return MHD_YES;
	}

	// (1) Classify the requested method

	call_method = get_method(method);
	
	// (2) Look at the incomming URL
	// Convert to acceptable type
		
	lurl = classify_url(url,data,lurl_buffer,&type);

	// (3) Store the current request IP in the internal data
	// Then check if we have lock on that requires a particular value
	
	set_address( connection,data );
	if( !check_address(data ) )
			type = NO_SITE;		// Just give them a 404 if no match

	// (4) Switch on request type to correct handler
	
	switch(type)
	{
		case HTTP_SITE:			// Serve pages
				ret = http( cls,
						connection,
						lurl,
						call_method,
						version,
						upload_data,
						upload_data_size,
						ptr);
				break;
				
		case REST_SITE:			// Do RESTful stuff
				ret = rest( cls,
						connection,
						lurl,
						call_method,
						version,
						upload_data,
						upload_data_size,
						ptr);
				break;
				
		case NO_SITE:	// 404
				response = MHD_create_response_from_data (strlen (MSG_404),
												(void *) MSG_404, 
												MHD_NO, MHD_NO);
				if( response != NULL )
				{
					ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
					MHD_destroy_response (response);
				}
				break;
	}

	return ret;
}

/***********************************************************************
*
*	static HTTP_TYPE get_method( char *method )
*
*	INPUT:	method	- HTTP method string
*
*	OUTPUT:	Return method type or HTTP_NONE if not found
*
**********************************************************************/

static HTTP_TYPE get_method( const char *method )
{
	int i;
	int n = sizeof(methods)/sizeof(HTTP_METHOD_LIST);
	HTTP_TYPE rtn = HTTP_NONE;
	
	// Find the matching method
	
	for( i=0; i<n; i++ )
	{
		if( strcmp(method,methods[i].method_name) == 0 )
			rtn = methods[i].type;
	}
	
	return rtn;
}

//***********************************************************************
/*
*	char *classify_url(const char *url,
*							RSERV_DATA *data,
*							char *lurl_buffer,
*							URL_TYPE *type)		- Vet incomming URL
*
*	INPUT:	url			- Received URL
*			data		- Data structure with HTTP and REST bases
*			lurl_buffer	- Data area for building new url (if necessary)
*			type		- Returned type of URL
*			
*
*	OUTPUT:	Pointer to url to be used in HTTP access
*			type	- HTTP_SITE	- Http data file access
*					  REST_SITE	- Restful data access
*					  NO_SITE	- Bad URL (lurl -> NULL)
*
*	RULES:
	/		->				HTTP_SITE /data->http_base/index.html
	//	/<??>	->				HTTP_SITE /data->http_base/<incomming url>
	//  /data->http_base/..		HTTP_SITE & pass url
	//	/data->rest_base/..		REST_SITE & pass url
	// Anything else NO_SITE -> 404

*/
//**********************************************************************/

static char *classify_url(const char *url,
							RSERV_DATA *data,
							char *lurl_buffer,
							URL_TYPE *type)
{
	int i;
	char *lurl;
	
	// (1) Is is the "/" case ?
	
	if( strcmp(url,"/") == 0 )
	{
		// Yes so return index page URL
		
		sprintf(lurl_buffer,"/%s/index.html",data->http_base);
		lurl = (char *)&lurl_buffer[0];
		*type = HTTP_SITE;
	}
	else
	{
		// (2) Not that so see if first chunk is either 
		// REST or HTTP
		// NOTE: During copy we skip the first character (/)
		// of the input URL
		
		for( i=0; i<data->len_header; i++ )
		{
			lurl_buffer[i] = toupper( url[i+1]);
		}
		
		*type = NO_SITE;
		if( strncmp(lurl_buffer,data->http_base,data->len_http_base) == 0 )
		{
			*type = HTTP_SITE;
			lurl = (char *)url;
		}
		else
		{
			if( data->len_rest_base > 0 && strncmp(lurl_buffer,data->rest_base,data->len_rest_base) == 0 )
			{
				*type = REST_SITE;
				lurl = (char *)url;
			}
		}
		
		// (3) If it's still NO site then stack on /http_base on the front
		// and return it as HTTP
		
		if( *type == NO_SITE )
		{
			sprintf(lurl_buffer,"/%s/%s",data->http_base,url);
			lurl = (char *)&lurl_buffer[0];
			*type = HTTP_SITE;
		}
	}
	
	return lurl;
}

#if 0
	#pragma mark -
	#pragma mark -- HTTP support ---
#endif

/***********************************************************************
*
* static int http ()	- Do HTTP Request
*
*	INPUT:	cls			- Registration option
*			connection	- Context
*			url			- URL requested
*			method		- Type of action needed
*			version		- HTTP version string
*			upload_data	- Passed in data on POST
*			upload_data_size	- Size in bytes of post
*
*	OUTPUT:	Return MHD_YES if successful, MHD_NO if not
*
**********************************************************************/

static int http (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          HTTP_TYPE method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
	RSERV_DATA *data = (RSERV_DATA *)cls;
	struct MHD_Response *response = NULL;
	int ret = MHD_NO;
	char fname[256];
	char *path;
	char *fdata;
	size_t fsize;
	
	// (1) Switch on requested method

	switch( method )
	{
		case HTTP_GET:	// GET METHOD
						// Build the file location, first strip off the 
						// http_base and the leading / from the URL

				path = (char *)&url[(int)(strlen(data->http_base)+1)];

				strcpy(fname,data->http_site);
				strcat(fname,path);		// Pointer to actual file inside http_base
				fdata = get_file(fname,&fsize);
				
				if( fdata != NULL)
				{
					// If we have file data then build a response from it
					response = MHD_create_response_from_data (fsize,(void *)fdata, MHD_YES, MHD_NO);
				}
				else
				{
					// Otherwise return a 404
					response = MHD_create_response_from_data (strlen (MSG_404),
															(void *) MSG_404, 
															MHD_NO, MHD_NO);
				}
				break;

		
		default:	// Unknown method
			break;
	}
		  
	// Return response and status
	
	if( response != NULL )
	{
		ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
		MHD_destroy_response (response);
	}
	
	return ret;
}

/***********************************************************************
*
*	char *get_file( char *path, size_t *size ) - Read in a file
*
*	INPUT:	path	- Path to file
*			size	- Size in bytes if read
*
*	OUTPUT:	Pointer to allocated buffer with file data
*
**********************************************************************/

static char *get_file( char *path, size_t *size )
{
	char *data = NULL;
	int fd;
	struct stat stats;
	int sz;
	
	// (1) Open and get the file size
	
	fd = open(path,O_RDONLY);
	if( fd >= 0 )
	{
		// (2) Get the size
		
		if( fstat(fd,&stats) == 0 )
		{
			// (3) Build the buffer
			
			data = MEMALLOC( stats.st_size );
			if( data != NULL )
			{
				// (4) Read the file & close it
				
				sz = read(fd, (void *)data, stats.st_size);
				if( sz <= 0 )
				{
					printf("Read [%s] Bad FILE\n",path);
					MEMFREE(data);
					data = NULL;
				}
				else
				{
					*size = (size_t)sz;
					printf("Read: [%s] %d bytes\n",path,(int)(*size));
				}
			}
		}
		close(fd);
	}
	
	return data;
}

/***********************************************************************
*
*	int set_address( struct MHD_Connection *connection, RSERV_DATA *data)
*			Set current request IP into internal data
*
*	INPUT:	connection	- Connection data (client address = connection->addr)
*			data		- Store request IP here
*
*	OUTPUT:	NONE
*
**********************************************************************/

static void set_address( struct MHD_Connection *connection, RSERV_DATA *data)
{
	char buf[128];
	char *ptr = &(buf[0]);
	
	// (1) Get address and store
	
	ptr = (char *)inet_ntop(AF_INET, 
						(void const *)&(connection->addr->sin_addr), 
						ptr,(socklen_t)128);
	if( ptr != NULL )
	{
		strcpy(data->request_ip_addr,ptr);
	}
}

/***********************************************************************
*
*	int check_address( struct MHD_Connection *connection, RSERV_DATA *data)
*			Check if current connection is required to match
*			specified address and check match
*
*	INPUT:	data		- Check flag for match test and match data here
*
*	OUTPUT:	1 if no match required or if match success
*			0 if not
*
**********************************************************************/

static int check_address(  RSERV_DATA *data)
{
	int rtnval = 1;		// Set for success
	
	// (1) Match required ?
	
	if( data->lock_addr_flag )
	{
		// (2) Check against request IP

		if( strcmp(data->request_ip_addr,data->client_ip_addr) == 0 )
			rtnval = 1;								// SUCCESS
		else
			rtnval = 0;								// Failure
	}
	
	return rtnval;
}

#if 0
	#pragma mark -
	#pragma mark -- RESTful support ---
#endif

/***********************************************************************
*
* static int rest ()	- Do RESTful Request
*
*	INPUT:	cls			- Registration option
*			connection	- Context
*			url			- URL requested
*			method		- Type of action needed
*			version		- HTTP version string
*			upload_data	- Passed in data on POST
*			upload_data_size	- Size in bytes of post
*
*	OUTPUT:	Return MHD_YES if successful, MHD_NO if not
*
**********************************************************************/

static int rest (void *cls,
          struct MHD_Connection *connection,
          const char *url,
          HTTP_TYPE method,
          const char *version,
          const char *upload_data, size_t *upload_data_size, void **ptr)
{
	struct MHD_Response *response = NULL;
	int ret = MHD_NO;
	RESTQEL *el;
	int count = 0;
	int fail = 0;
	int size = 0;
	char *data = NULL;
	
	/*
		***** DOES NOT WORK WITH AJAX POST DATA
		***** MUST PUT DATA INTO URI
	// (1) Send data to client
	// NOTE: On post send read buffer with POST data
	
	if( method == HTTP_POST )
	{
		size = strlen(connection->read_buffer);
		data = connection->read_buffer;
		
	}
	*/
	
	if( restcom_master_send( (void *)connection,
						method,
						(char *)url,
						size,
						(char *)data) == 0 )
	{
		// (2) Wait for the result
		
		while( (el = restcom_master_receive((void *)connection)) == NULL )
		{
			usleep( 100000 );		// Sleep for 100 ms
			count = count + 1;
			if( count > 200 )		// Wait 20 seconds
			{
				fail = 1;
				break;
			}
		}
		
		// (3) If OK, build the response
		
		if( fail == 0 )
		{
			response = MHD_create_response_from_data ((size_t)el->size,(void *)el->data, MHD_YES, MHD_NO);
		}
		
		// Return response and status
		
		if( response != NULL )
		{
			ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
			MHD_destroy_response (response);
		}
		
		// (4) Remove received element
		
		restcom_delete_packet( el );

	}
	
	return ret;
}

Added luasupport/HTTP/rest/rest.h.









































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//*************************************************************************
/*
    Copyright (c) 2004. Pandora Products All Rights Reserved.
*/
//*************************************************************************
/*
*  Module Name:         REST	- Application Web server
*
*  Description:         This server is used to serve web pages and 
*						do RESTful web operations
*
*  Author:              Jim Schimpf
*
*  Revision History:	26 Sep 2010 Initial version
*						29 Sep 2010 Convert to a module
*						15 Dec 2010 Add lock to client address
*						23 Dec 2011 [7b5a95ed75] Allow initial page access with
*									just IP
*
*	This program uses libmicrohttpd from Christian Grothoff as the HTTP
*	protocol manager
*/
//************************************************************************

#ifndef REST_H
#define REST_H	1
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

typedef enum {
				HTTP_NONE=0,
				HTTP_CONNECT,
				HTTP_DELETE,
				HTTP_GET,
				HTTP_HEAD,
				HTTP_OPTIONS,
				HTTP_POST,
				HTTP_PUT,
				HTTP_TRACE,
				} HTTP_TYPE;
		  
typedef struct rserv_dummy {
								int http_port;		// HTTP Port #
								char *http_site;	// ABSOLUTE pointer to HTTP file store
													// used to access files for serving
								// NOTE: Both of these stored UPPER CASE
								char *http_base;	// HTTP location (added to base for .html files)
													// Last leaf of http_base pointer (relative directory of http files)
								int len_http_base;
								char *rest_base;	// Pointer to RESTful lcn
								int len_rest_base;
								int len_header;		// Max of rest and http base sizes
								//-------------------------------------
								int lock_addr_flag;			// TRUE to lock to single client
								char client_ip_addr[128];	// Dotted quad address form
								char request_ip_addr[128];	// Current request IP
								//-------------------------------------
								int run_flag;		// Set to 0 to stop server
								void  *d;			// Server Daemon
							} RSERV_DATA;

int rest_server( );					// Start server
void rest_server_close( void );		// Close server
RSERV_DATA *rest_data(void);		// Access server data
#endif

Added luasupport/HTTP/rest/restclient.c.







































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*************************************************************************
/*
*  Module Name:         RESTCLIENT	- RESTful server support routines
*
*  Description:         These routines are used by the RESTful server
*						user routines to communicate with the web server
*
*  Author:              Jim Schimpf
*
*  Revision History:	11 Oct 2010 Initial version
*
*/
//************************************************************************

#include "restclient.h"

#if 0
	#pragma mark -
	#pragma mark -- Open/Close --
#endif

//************************************************************************
/*
    Function            : int rest_support_open(void)	- Open support channel
    Description         : Open support channel to Web server
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	0 if OK, <> 1 if failure
    Notes               :	
    Date Created        : 11-Oct-2010
*/
//************************************************************************

int rest_support_open(void)
{
	int rtnval;
	
	rtnval = restcom_client_open();
	return rtnval;
}

//************************************************************************
/*
    Function            : int rest_support_close(void) Close support channel
    Description         : Close support channel to Web server
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	NONE
    Notes               :	
    Date Created        : 11-Oct-2010
*/
//************************************************************************

void rest_support_close(void)
{
	restcom_client_close();
}

#if 0
	#pragma mark -
	#pragma mark -- I/O --
#endif

//************************************************************************
/*
    Function            : RESTQEL *rest_support_receive(void)
    Description         : NON-Blocking receive
    Input Parameters    :	NONE
    Output Parameters   :	NONE
    Function Returns    :	Pointer to RESTQEL if message
						:	NULL if none
    Notes               :	
    Date Created        : 11-Oct-2010
*/
//************************************************************************

RESTQEL *rest_support_receive(void)
{
	RESTQEL *el;
	
	el = restcom_client_receive();
	return el;
}

//************************************************************************
/*
    Function            : int rest_support_send( int size,char *data,RESTQEL *h)
    Description         : Send data to WEB server
    Input Parameters    :	size	- # Bytes in data
						:	data	- MUST BE ALLOCATED locally
						:	h		- Received msg for response
    Output Parameters   :	NONE
    Function Returns    :	0 if OK, <> 0 if bad
    Notes               :	
    Date Created        : 11-Oct-2010
*/
//************************************************************************

int rest_support_send( int size,char *data,RESTQEL *h)
{
	int rtnval;
	
	// Send data then delete local packet
	
	rtnval = restcom_client_send(h->tid,size,data);
	restcom_delete_packet( h );
	
	return rtnval;
}


Added luasupport/HTTP/rest/restclient.h.



































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//*************************************************************************
/*
    Copyright (c) 2010. Pandora Products All Rights Reserved.
*/
//*************************************************************************
/*
*  Module Name:         RESTCLIENT	- RESTful server support routines
*
*  Description:         These routines are used by the RESTful server
*						user routines to communicate with the web server
*
*  Author:              Jim Schimpf
*
*  Revision History:	11 Oct 2010 Initial version
*
*/
//************************************************************************

#ifndef RESTCLIENT_H
#define RESTCLIENT_H	1

#include "rest.h"
#include "restcom.h"

// Support Create/Delete
int rest_support_open(void);
void rest_support_close(void);

// Client I/O
RESTQEL *rest_support_receive(void);
int rest_support_send( int size,char *data,RESTQEL *h);

#endif

Added luasupport/JSON/JSON/jescape.c.

























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
//*****************************************************************************
/*
    Module Name: jescape.c

    Description:	Handle json escape characters
	
	Routine will take input buffer and return escaped character value 
	and advance buffer pointer.
	   
    Revision History:
		 9-Nov-2007		Initial Build
		10-Mar-2008		Revise JSON_hex() to not use ishexnumber() and
						limit size to 0xffff
*/
//*****************************************************************************

#include <stdlib.h>
#include <ctype.h>

// These characters proceeded by \ are translated

#define JSON_ESCAPE	'\\'
#define JSON_HEX	'u'			// Special case, HEX value follows
#define JSON_END	'\0'		// End of buffer marker

typedef struct jtran_dummy {
								char input;		// Input character
								char output;	// Output character
							} JTRAN;
static JTRAN echars[] = {
							{	'"',	'"' },	// Quote
							{	'\\',	'\\' },
							{	'/',	'/'	},
							{	'b',	'\b'},	// Backspace
							{	'f',	'\f'},	// Form feed
							{	'n',	'\n'},	// New line
							{	'r',	'\r'},	// Carriage return
							{	't',	'\t'},	// Tab
						};
						
static int JSON_etran( char inp,char *out );
static char *JSON_hex( char *buf, unsigned long *rtnval );

#if 0
#pragma mark -
#pragma mark ---- External API
#endif

//*****************************************************************************
/*
    Function            : char *JSON_tran( char *buf, unsigned long *out,int *flag )
    Description         : Translate the input character stream handling escapes
    Input Parameters    :	buf		- Input buffer
						:
    Output Parameters   :	out		- Return translated character
						:	flag	- 1 if translated, 0 if not
    Function Returns    :
       Normal Return -		Pointer to next character in buffer
    Notes               :
    Date Created        :  9-Nov-2007
*/
//*****************************************************************************

char *JSON_tran( char *buf, unsigned long *out,int *flag )
{
	unsigned long val;
	char cval;
	
	// (1) Look for ESCAPE character, if not then just go around this
	
	if( *buf == JSON_ESCAPE )
	{
		// (2) Look ahead and handle special cases
		// Also mark FLAG
		//	(a) HEX translation
		//	(b) EOB end of buffer
		//	(c) normal escape translation
		
		*flag = 1;		// We have a translation
		buf++;			// Advance to next
		switch( *buf )
		{
							// Translate up to next 8 characters to
							// a HEX number
			case JSON_HEX:	buf = JSON_hex(buf,&val);
							break;
							
							// Next character is END of buffer
							// so just return the ESCAPE char
							// also leave buffer pointer where it
							// it since it now points to EOB
			case JSON_END:	val = (unsigned long)JSON_ESCAPE;
							break;
							
							// Look up and translate if possible
							// If not translated then return current char
							// Otherwise return translated char and advance
							// buffer pointer to next (unseen) character
			default:		if( JSON_etran( *buf,&cval ) )
							{
								val = (unsigned long)cval;
								buf++;			// Advance to next
							}
							else
							{
								// Not translated so return ESCAPE char
								// and just leave buffer pointer pointed to
								// next character
								
								*flag = 0;			// Not translated...
								val = (unsigned long) cval;
							}
							break;
		}
	}
	else
	{
		*flag = 0;					// Not translated
		cval = *buf++;				// Get character and advance
		val = (unsigned long)cval;
	}
	
	// (2) Now return advance buffer pointer and 
	// translated (or not) character is in val
	
	*out = val;
	return( buf );
}
		
#if 0
#pragma mark -
#pragma mark ---- Support API
#endif
						
//*****************************************************************************
/*
    Function            : int JSON_etran( char inp, char *out )
    Description         : Translate the input character if escaped
    Input Parameters    :	inp		- Character following escape
						:	out		- Translated character
    Output Parameters   :	out		- Return translated character
    Function Returns    :
       Normal Return -		1	If character has been translated
       Error Return -		0	If not
    Notes               :
    Date Created        :  9-Nov-2007
*/
//*****************************************************************************

static int JSON_etran( char inp, char *out )
{
	int n = sizeof( echars ) / sizeof( JTRAN );
	int i;
	int rtnval = 0;			// Not translated
	
	// (1) Set up for no translate
	
	*out = inp;
	
	// (2) Search the list
	
	for( i=0; i< n; i++ )
	{
		if( inp == echars[i].input )
		{
			*out = echars[i].output;
			rtnval = 1;				// Translated mark it
			break;					// Found, quit now
		}
	}
	
	return( rtnval );
}

//*****************************************************************************
/*
    Function            : char *JSON_hex( char *buf, unsigned long *rtnval )
    Description         : Translate HEX input (assumed pointed to HEX data)
    Input Parameters    :	buf		- Buffer pointer (NUL terminated)
						:	
    Output Parameters   :	rtnval	- Translated HEX value (DEF = 0)
    Function Returns    :	Pointer to next data in buffer
    Notes               :	Will not handle values larger than 0xFFFF
    Date Created        :  9-Nov-2007
	
	10-Mar-2008		Revised to not use ishexnumber() and limit to 0xffff
*/
//*****************************************************************************

static char *JSON_hex( char *buf, unsigned long *rtnval )
{
	unsigned long val = 0;		// Set to default
	int i;
	int part;
	int ishex = 1;	// Assume hex for a start
	
	// (1) Loop through the next (up to) 8 characters (4 bytes)
	// and translated from HEX to binary, accumulate into val
	// exit on the following conditions 
	//	(a)	Hit a NON hex in buffer (ishex == 0)
	//	(c) Got more than 8 characters of hex
	
	for( i=0; i<8 && ishex ; i++, buf++)
	{
		// Translate (if hex) to a hex digit and accumulate
		
		ishex = 1;			// Assume it's hex
		switch( *buf )
		{
			case '0':		part = 0;
							break;
							
			case '1':		part = 1;
							break;

			case '2':		part = 2;
							break;

			case '3':		part = 3;
							break;

			case '4':		part = 4;
							break;

			case '5':		part = 5;
							break;

			case '6':		part = 6;
							break;

			case '7':		part = 7;
							break;

			case '8':		part = 8;
							break;

			case '9':		part = 9;
							break;

			case 'a':
			case 'A':		part = 10;
							break;

			case 'b':
			case 'B':		part = 11;
							break;

			case 'c':
			case 'C':		part = 12;
							break;

			case 'd':
			case 'D':		part = 13;
							break;

			case 'e':
			case 'E':		part = 14;
							break;

			case 'f':
			case 'F':		part = 15;
							break;
							
			default:		ishex = 0;		// NON HEX VALUE
							break;
		}
		
		if( ishex )
		{
			// (2) Put nibble value into the output
			// if we have a hex value
			val <<= 4;
			val |= part;
		}
	}
	
	// (3) All right now put the accumulated value into the output
	// and return the current pointer
	
	*rtnval = val;
	return( buf );
}
	

Added luasupport/JSON/JSON/jescape.h.





































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//*****************************************************************************
/*
    Module Name: jescape.c

    Description:	Handle json escape characters
	   

    Revision History:
		 9-Nov-2007		Initial Build
*/
//*****************************************************************************

#ifndef JESCAPE_H
#define JESCAPE_H	1

char *JSON_tran( char *buf, unsigned long *out,int *flag );

#endif

Added luasupport/JSON/JSON/qdj.c.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
//*****************************************************************************
/*
    Module Name: qdj.c

    Description:	Quick & Dirty JSON 
					This is a simple parser, unparser for JSON that takes
					in 8 bit characters and produces a parse tree of the JSON

    Revision History:
		10-Nov-2007		Initial Build
		 8-Mar-2008		Total re-write
		 9-Mar-2008		Restructure JSON_NODE and JSON_EL
		24-Mar-2008		In QDJ_Parse() Forgot to init failure value on input
		 1-Apr-2008		Use const char input to parse
		 3-Apr-2008		Change to invalidate parse if there is an error
		25-Nov-2008		Fix QDJ_DeleteNode() to ensure linked lists get deleted
						[dece59b407]
		 9-Apr-2012		Fix problem in QDJ_BuildMembers() where used element was
						deleted after being added to a pair.
*/
//*****************************************************************************

#include "qdj.h"
#include "qdj_token.h"

#if 0
#pragma mark -
#pragma mark -- Constants & FWD Defs --
#endif

//***
// FWD Defs
//***

#define NEW_JSON_NODE		(JSON_NODE *)MEMALLOC( sizeof(JSON_NODE))
#define NEW_JSON_ARRAY(x)	(JSON_NODE **)MEMALLOC( x * sizeof(JSON_NODE *))

// Parse FWD Defs
static JSON_NODE *QDJ_ParseAction( JSON_BUFFER *buf );
static JSON_NODE *QDJ_BuildObject( JSON_BUFFER *buf );
static JSON_NODE *QDJ_BuildArray( JSON_BUFFER *buf );

// Members builders
static JSON_NODE *QDJ_BuildMembers( JSON_BUFFER *buf );
static JSON_NODE *QDJ_GatherMembers( JSON_BUFFER *buf );

// Pair builders
static JSON_NODE *QDJ_BuildPair(JSON_EL *el,JSON_BUFFER *buf );
static JSON_NODE *QDJ_BuildPairSimple( JSON_EL *el, JSON_EL *value,JSON_BUFFER *buf );
static JSON_NODE *QDJ_BuildPairMixed( JSON_EL *el, JSON_EL *value,JSON_BUFFER *buf );

// Node Builders
static JSON_NODE *QDJ_BuildValue(JSON_EL *el,JSON_BUFFER *buf );
static JSON_NODE *QDJ_CreateNode( JSON_TYPE type );
static int QDJ_DeleteNode( JSON_NODE *node );

// Failure mark
static void QDJ_Failmark( int failure, JSON_BUFFER *buf );


#if 0
#pragma mark -
#pragma mark -- External API --
#endif

//*****************************************************************************
/*
    Function            : JSON_NODE	*QDJ_Parse( char const *json_string )
    Description         : Parse a JSON string into a linked list
    Input Parameters    :	json_string	- Properly formatted JSON string
						:	fail		- Call back function for syntax errors
						:	p			- Data structure for fail function
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to base of list
       Error Return -		NULL if bad JSON (also calls fail fcn)
    Notes               :
    Date Created        :   8-Mar-2008
	
	24-Mar-2008	Forgot to init failure value on input
	 1-Apr-2008	Use char const inputs
*/
//*****************************************************************************

JSON_NODE *QDJ_Parse( char const *json_string,QDJ_FAIL_FUNCTION fail,void *p )
{
	JSON_NODE *base = NULL;
	JSON_BUFFER buf;
	
	// Init base for run & set up buffer
	
	base = NULL;
	buf.buffer = (char *)json_string;
	buf.psn    = (char *)json_string;
	buf.last_token = NULL;
	buf.prev_token = NULL;
	buf.eob		= 0;
	buf.failure = 0;	// Update to fix this before running
	
	// Now call the actual (recursive) parsing
	// function to do the work
	
	base = QDJ_ParseAction( &buf );
	
	// If we have a failure invalidate the parse output
	// and (optionally) run the failure function
		
	if( buf.failure != QDJ_PARSE_OK)
	{	
		// Do we have a fail function, if so do it
		
		if( fail != NULL )
		{
			//     FAILURE #    PSN in BUFFER        Current string
			fail( buf.failure,(buf.psn - buf.buffer),buf.psn,p);
		}
		
		// 3-Apr-2008 Invalildate parse on error
		// Free parse tree & clear it
		
		QDJ_Free( base );
		base = NULL;
	}
	
	return( base );
}

//*****************************************************************************
/*
    Function            : void QDJ_Free( JSON_NODE *base )
    Description         : Free a JSON linked list from the base
    Input Parameters    :	JSON linked list structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  10-Nov-2007
*/
//*****************************************************************************

void QDJ_Free( JSON_NODE *base )
{
	JSON_NODE *next;
	
	// Loop through all the elements of this list
	
	while( base != NULL )
	{
		next = base->next;					// Get next
	
		if( QDJ_DeleteNode(base) == 0 )
			base = next;				// Keep going if OK
		else
			return;						// FAILURE Bail
	}
}

#if 0
#pragma mark -
#pragma mark -- Internal API --
#endif

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_ParseAction( JSON_BUFFER *buf )
    Description         : Parse JSON
    Input Parameters    :	buf		- Buffer with valid JSON
    Output Parameters   :	
    Function Returns    :	Parse tree
    Notes               :
    Date Created        :   7-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_ParseAction( JSON_BUFFER *buf )
{
	JSON_EL *el;
	JSON_NODE *base = NULL;
	JSON_NODE *node = NULL;
	JSON_NODE *end = NULL;
	
	// (1) Loop through buffer pulling tokens
	
	while( buf->eob == FALSE && buf->failure == FALSE )
	{
		node = NULL;
		el = QDJ_GetToken(buf);
		if( el == NULL )
			break;
			
		// (2) Only JSON_SYBMOL Tokens handled at this level
		//	TOKEN	ACTION
		//	OBJ_IN	Build an object
		//  ARRY_IN	Build an array
		//  EOB		End of buffer, return
		//
		// All others are BAD syntax
		
		switch( el->jclass )
		{
			case JSON_CLASS_SYMBOL:	
								switch( el->symbol )
								{
									case JSON_OBJ_IN:	node = QDJ_BuildObject( buf );
														break;
														
									case JSON_ARRAY_IN:	node = QDJ_BuildArray( buf );
														break;
														
									case JSON_EOB:		// End of buffer, this is OK
														break;
														
									default:			QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
														break;
								}
								break;
								
			default:			QDJ_Failmark( QDJ_BAD_SYM, buf );
								break;
		}
		
		// In all cases delete the token
		
		QDJ_DeleteToken(el);

		
		// If we got something, add it to the base
		
		if( node != NULL )
		{
			// Two cases, new base or add it to the end
			
			if( base == NULL )
			{
				base = node;		// Start
				end = node;			// Also the end now
			}
			else
			{
				// Add to the end
				
				end->next = node;
				end = node;
			}
		}
	}
	
	return( base );
}

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildObject( JSON_BUFFER *buf )
    Description         : Entered here as the start of an object
    Input Parameters    :	buf		- Buffer with valid JSON
    Output Parameters   :	
    Function Returns    :	Parse tree
    Notes               :
    Date Created        :   7-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildObject( JSON_BUFFER *buf )
{
	JSON_NODE *node;
	
	// (1) Build an object node
	
	node = QDJ_CreateNode(JSON_OBJECT);
	if( node != NULL )
	{		
		// (2) Now attach the members as children
		
		node->value = QDJ_BuildMembers( buf );
	}
	else
		QDJ_Failmark( QDJ_ALLOC_FAIL, buf );
	
	return( node );
}

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildArray( JSON_BUFFER *buf )
    Description         : Entered here as the start of an array
    Input Parameters    :	buf		- Buffer with valid JSON
    Output Parameters   :	
    Function Returns    :	Parse tree
    Notes               :
    Date Created        :   7-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildArray( JSON_BUFFER *buf )
{
	JSON_NODE *node;
	JSON_NODE *array_list,*el;
	int count = 0;
	int i;
	
	// (1) Build an array node
	
	node = QDJ_CreateNode(JSON_ARRAY);
	if( node != NULL )
	{
		// (2) Gather the array elements
		
		array_list = QDJ_GatherMembers( buf );
		if( array_list != NULL )
		{
			// (3) Count the list  
			
			el = array_list;
			while( el != NULL )
			{
				count = count + 1;
				el = el->next;
			}
	
			// (4) Attach the elements to the array
			
			node->count = count;
			node->array = NEW_JSON_ARRAY(count);
			if( node->array != NULL )
			{
				// (5) Now just attach each of the chunks into the array
				
				el = array_list;
				for( i=0; i<count; i++)
				{
					node->array[i] = el;
					el = el->next;
					node->array[i]->next = NULL;		// Remove the link pointers
				}
			}
			else
			{
				// Allocation failure, destroy the node and return
				
				QDJ_Failmark( QDJ_ALLOC_FAIL, buf );
				QDJ_DeleteNode( node );
			}
		}
	}
	else
		QDJ_Failmark( QDJ_ALLOC_FAIL, buf );
	
	return( node );
}	

#if 0
#pragma mark -
#pragma mark -- Members Only API --
#endif

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildMembers( JSON_BUF *buf )
    Description         : Build a member list 
    Input Parameters    :	buf	- Input buffer
    Output Parameters   :	
    Function Returns    :	Head of member list
    Notes               :
    Date Created        :   8-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildMembers( JSON_BUFFER *buf )
{
	JSON_NODE *base = NULL;
	JSON_NODE *end;
	JSON_NODE *node;
	JSON_EL *el;
	int run = 1;			// Loop control
	
	//  (1) Pull new tokens from the buffer
	// TOKEN		ACTION
	// STRING		Build pair
	// OBJECT		Build object
	// ARRAY		Build Array
	// SEP (,)		If first element ERROR
	//				If later just skip
	// OBJ CLOSE	Exit with base list
	
	// Anything else bail with BAD SYNTAX
	
	while( run )
	{
		// Node is set to NULL here so if we don't generate one
		// we will just loop back and try again.  Not try to add
		// garbage on to our base list
		
		node = NULL;
		el = QDJ_GetToken(buf);
		
		// Check token and if problem shut down
		if( el == NULL )
		{
			// Buffer ran out too soon or it was the WRONG
			// type
			
			QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
		}
		else
		{
			// (2) Handle cases 
			// If it's a value then build a pair
			// If it's a symbol then depends on type
			
			switch( el->jclass )
			{
				case JSON_CLASS_VALUE:	node = QDJ_BuildPair( el,buf );
										// Change here since we use this 
										// element, set NULL so below we don't
										// delete it (it's now part of the pair)
										el = NULL;		// Forget this one
										break;
										
				case JSON_CLASS_SYMBOL: // Now we have to check WHAT symbol
										switch( el->symbol )
										{
											case JSON_OBJ_IN:	node = QDJ_BuildObject( buf );
																break;
																
											case JSON_ARRAY_IN:	node = QDJ_BuildArray( buf );
																break;
											
											// Special case, if it's not the first thing we see
											// the separators are OK and we just skip them
											// If first then bail as something is wrong
											
											case JSON_SEP:		if( base == NULL )
																	QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
																break;
																
											case JSON_OBJ_OUT:	// We are done with our object, so 
																// just return with what we have
																run = 0;
																break;
											
											default:			// Anyting else is BAD so just bail
																QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
																break;
										}
			}
		}
		
		// In all cases delete the token as we are done with it
		
		QDJ_DeleteToken(el);
		
		// (3) Now add the node just created (if any) to 
		// our base list at the END
		
		if( node != NULL )
		{
			if( base == NULL )
			{
				base = node;		// First add
				end = node;			// Mark end
			}
			else
			{
				end->next = node;	// Add to end
				end = node;
			}
		}
		
		// Should we loop for another...
		
		if( buf->eob == TRUE || buf->failure != QDJ_PARSE_OK )
			run = 0;		// STOP problem....
	}
	
	return( base );
}

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_GatherMembers( JSON_BUF *buf )
    Description         : Build a member list for an array
    Input Parameters    :	buf	- Input buffer
    Output Parameters   :	
    Function Returns    :	Head of member list
    Notes               :
    Date Created        :   8-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_GatherMembers( JSON_BUFFER *buf )
{
	JSON_NODE *base = NULL;
	JSON_NODE *node;
	JSON_NODE *end;
	JSON_EL *el;
	int run = 1;			// Loop control
	
	//  (1) Pull new tokens from the buffer
	// TOKEN		ACTION
	// STRING		Build pair
	// OBJECT		Build object
	// ARRAY		Build Array
	// SEP (,)		If first element ERROR
	//				If later just skip
	// ARRAY CLOSE	Exit with base list
	
	// Anything else bail with BAD SYNTAX
	
	while( run )
	{
		// Node is set to NULL here so if we don't generate one
		// we will just loop back and try again.  Not try to add
		// garbage on to our base list
		
		node = NULL;
		el = QDJ_GetToken(buf);
		
		// Check token and if problem shut down
		if( el == NULL )
		{
			// Buffer ran out too soon or it was the WRONG
			// type
			
			QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
		}
		else
		{
			// (2) Handle cases 
			// If it's a value then build a value node
			// If it's a symbol then depends on type
			
			switch( el->jclass )
			{
				case JSON_CLASS_VALUE:	node = QDJ_BuildValue( el,buf );
										break;
										
				case JSON_CLASS_SYMBOL: // Now we have to check WHAT symbol
										switch( el->symbol )
										{
											case JSON_OBJ_IN:	node = QDJ_BuildObject( buf );
																break;
																
											case JSON_ARRAY_IN:	node = QDJ_BuildArray( buf );
																break;
											
											// Special case, if it's not the first thing we see
											// the separators are OK and we just skip them
											// If first then bail as something is wrong
											
											case JSON_SEP:		if( base == NULL )
																	QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
																break;
																
											case JSON_ARRAY_OUT:	// We are done with our object, so 
																// just return with what we have
																run = 0;
																break;
											
											default:			// Anyting else is BAD so just bail
																QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
																break;
										}
			}
		}

		// In all cases delete the token as we are done with it
		
		QDJ_DeleteToken(el);
		
		// (3) Now add the node just created (if any) to 
		// our base list at the END
		
		if( node != NULL )
		{
			if( base == NULL )
			{
				base = node;		// First add
				end = node;			// Mark end
			}
			else
			{
				end->next = node;	// Add to end
				end = node;
			}
		}
		
		// Should we loop for another...
		
		if( buf->eob == TRUE || buf->failure != QDJ_PARSE_OK )
			run = 0;		// STOP problem....
	}

	return( base );
}

#if 0
#pragma mark -
#pragma mark -- Pair Builders API --
#endif

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildPair( JSON_EL *el,JSON_BUF *buf )
    Description         : Build a JSON pair node 
    Input Parameters    :	el	- Key part of node
						:	buf	- Input buffer
    Output Parameters   :	
    Function Returns    :	JSON_PAIR node
    Notes               :
    Date Created        :   8-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildPair(JSON_EL *el,JSON_BUFFER *buf )
{
	JSON_NODE *base = NULL;
	JSON_EL *sep,*next;
	
	// (1) We are looking for a PAIR here which is
	// <string> : <value>
	// We have the string already in el
	// Look for the next thing which must be ':'
	// Then it's followed by these things:
	//	<value>		<- Just the value for the key
	//  {			<- Start of an object
	//  [			<- Start of an array
	//
	// Anything else is syntax error
	
	// Get next element and see if it's right
	
	sep = QDJ_GetToken(buf);
	if( sep->symbol == JSON_SEP_KVP )
	{
		// (2) Syntax is right so far
		// Delete the separator now as it's not
		// needed
		
		QDJ_DeleteToken(sep);
		
		// (3) Now get the next chunk and decide what to do
		// It the next token is a VALUE then
		// it's a <string> : <string> type KVP
		// If it's a SYMBOL then check further (see above)
		
		next = QDJ_GetToken(buf);
		
		switch( next->jclass )
		{
			case JSON_CLASS_VALUE:	base = QDJ_BuildPairSimple( el, next,buf );
									break;
								
			case JSON_CLASS_SYMBOL:	base = QDJ_BuildPairMixed( el,next,buf );
									break;
														
			default:				QDJ_Failmark( QDJ_BAD_PAIR, buf );
									break;
		}
		
		// In all cases delete the token
		QDJ_DeleteToken(el);
	}
	else
		QDJ_Failmark( QDJ_BAD_SYNTAX, buf );		// No separator....
	
	return( base );
}

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildPairSimple( JSON_EL *el, JSON_EL *value,JSON_BUFFER *buf )
    Description         : Build a pair node from two simple elements (both are strings) 
    Input Parameters    :	key		- Key part of node
						:	value	- Value part of node
						:	buf		- Input buffer
    Output Parameters   :	
    Function Returns    :	JSON_PAIR node
    Notes               :
    Date Created        :   8-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildPairSimple( JSON_EL *key, JSON_EL *value,JSON_BUFFER *buf )
{
	JSON_NODE *base;
	
	// (1) Build the node and mark as pair
	
	base = QDJ_CreateNode(JSON_PAIR);
	if( base != NULL )
	{
		// (2) Add the KEY string
		
		base->len = key->len;
		base->string = key->string;
		key->string = NULL;				// Move memory to here...
		
		// (3) Now create the JSON VALUE type node & attach our value
		
		base->value = QDJ_BuildValue( value, buf );
		if( base->value == NULL )
		{
			QDJ_DeleteNode( base );
			base = NULL;
			QDJ_Failmark( QDJ_ALLOC_FAIL, buf );
		}
	}
	else
		QDJ_Failmark( QDJ_ALLOC_FAIL, buf );
	
	return( base );
}

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildPairMixed( JSON_EL *el, JSON_EL *value,JSON_BUFFER *buf )
    Description         : Build a pair node from on string + a JSON obj or array 
    Input Parameters    :	key		- Key part of node
						:	value	- Value part of node
						:	buf		- Input buffer
    Output Parameters   :	
    Function Returns    :	JSON_PAIR node
    Notes               :
    Date Created        :   8-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildPairMixed( JSON_EL *key, JSON_EL *value,JSON_BUFFER *buf )
{
	JSON_NODE *base = NULL;

	// (1) First examine value and if it isn't either { or [ then bail as 
	// it doesn't match the syntax
	
	if( value->symbol == JSON_OBJ_IN || value->symbol == JSON_ARRAY_IN )
	{
		// (2) Ok we are on our way so build the pair node
		
		base = QDJ_CreateNode(JSON_PAIR);
		if( base != NULL )
		{
			base->len = key->len;
			base->string = key->string;		// Set the key
			key->string = NULL;				// Move the memory
			
			// (3) Now switch to OBJECT or ARRAY in
			
			switch( value->symbol )
			{
				case JSON_OBJ_IN:	base->value = QDJ_BuildObject(buf);
									break;
									
				case JSON_ARRAY_IN:	base->value = QDJ_BuildArray(buf);
									break;
								
				default:			QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
									QDJ_DeleteNode( base );
									base = NULL;
			}
		}
		else
			QDJ_Failmark( QDJ_ALLOC_FAIL, buf );
	}
	else
		QDJ_Failmark( QDJ_BAD_SYNTAX, buf );
		
	return( base );
}

#if 0
#pragma mark -
#pragma mark -- NODE Builders API --
#endif

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_BuildValue(JSON_EL *el,JSON_BUFFER *buf )
    Description         : Create a Value node of the correct type
    Input Parameters    :	el	- Use this token to build the node
						:	buf	- used for error return 
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to created NODE 
       Error Return -		NULL bad JSON or cannot allocate
    Notes               :
    Date Created        :   9-Mar-2008
*/
//*****************************************************************************

static JSON_NODE *QDJ_BuildValue(JSON_EL *el,JSON_BUFFER *buf )
{
	JSON_NODE *node;
	
	// (1) Create the node and fail if problem
	
	node = QDJ_CreateNode(el->type);
	if( node != NULL )
	{
		// Now fill it in depending on type
		
		switch( el->type )
		{
			case JSON_STRING:
			case JSON_NUMBER:	// These are the same action, copy the string
								node->len = el->len;
								node->string = el->string;
								el->string = NULL;			// Move the memory
								break;
								
			default:			// All the others value is inherent in type
								break;
		}
	}
	else
		QDJ_Failmark( QDJ_ALLOC_FAIL,buf );
	
	return( node );
}

//*****************************************************************************
/*
    Function            : static JSON_NODE *QDJ_CreateNode( void )
    Description         : Create a JSON_NODE properly marked up
    Input Parameters    :	type	- Node type
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to created NODE with no type or data
       Error Return -		NULL bad JSON or cannot allocate
    Notes               :
    Date Created        :  10-Nov-2007
							9-Mar-2008 NOTE: Made available to external code
										to support qdj_util.c
*/
//*****************************************************************************

static JSON_NODE *QDJ_CreateNode( JSON_TYPE type )
{
	JSON_NODE *node;
	
	// (1) Create the node and if built then make valid
	
	node = NEW_JSON_NODE;
	if( node != NULL )
	{
		node->valid = JSON_VALID;	// Mark as VALID
		node->type	= type;
	}
	
	return( node );
}

//*****************************************************************************
/*
    Function            : static int QDJ_DeleteNode( JSON_NODE *node )
    Description         : Delete a JSON Node
    Input Parameters    :	node	- Node to be deleted
    Output Parameters   :	
    Function Returns    :
       Normal Return -		0	If node deleted OK
       Error Return -		<> 0 If bad node
    Notes               :
    Date Created        :  10-Nov-2007
	
	25-Nov-2008	Change code to ensure we recurse down next path in
				each deleted element 
				Change QDJ_DeleteNode() -> QDJ_Free() [dece59b407]
*/
//*****************************************************************************

static int QDJ_DeleteNode( JSON_NODE *node )
{
	int rtnval = 0;	// Set for success
	int i;
	
	// (1) Is this a valid node for deletion
	// If == NULL or NOT valid then return bad node mark
	
	if( node != NULL && node->valid == JSON_VALID )
	{
		// (2) Delete the parts in the NODE
		
		if( node->string != NULL)
			MEMFREE( node->string );
		if( node->value != NULL )
			QDJ_Free( node->value );	// Change here to delete list... [dece59b407]
			
		// (3) If an array type node then delete each of the elements
		
		if( node->count > 0 )
		{
			for( i=0; i<node->count; i++ )
			{
				QDJ_Free( node->array[i] );	// [dece59b407]
			}
		}
		
		// (4) Delete the node now & then work on NEXT
		
		node->valid = 0;	// Clear valid mark
		MEMFREE( node );
	}
	else
		rtnval = 1;			// Mark as bad
		
	return( rtnval );
}

#if 0
#pragma mark -
#pragma mark -- Fail Mark --
#endif

//*****************************************************************************
/*
    Function            : void QDJ_Failmark( int failure, JSON_BUF *buf )
    Description         : Mark a failure (used for debugging)
    Input Parameters    :	failure	- Failure code
						:	buf		- Put mark in buffer
    Output Parameters   :	
    Function Returns    :
    Notes               :
    Date Created        :   8-Mar-2008
*/
//*****************************************************************************

static void QDJ_Failmark( int failure, JSON_BUFFER *buf )
{
	buf->failure = failure;
}

Added luasupport/JSON/JSON/qdj.h.





































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//*****************************************************************************
/*
    Module Name: qdj.h

    Description:	Quick & Dirty JSON 
	   

    Revision History:
		10-Nov-2007		Initial Build
*/
//*****************************************************************************

#ifdef TSANIX
	#include "coreapi.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifndef QDJ_H
#define QDJ_H	1
//***
// Useful defs
//***

#ifndef MEMALLOC
	#define MEMALLOC(x)		calloc(1,x)
	#define MEMFREE(x)		free(x)
	#define TRUE			1
	#define FALSE			0
#endif

//***
// JSON Parse FAILURE REASONS
//***

#define QDJ_PARSE_OK	0		// Success
#define QDJ_BAD_SYM		-1		// Unexpected symbol
#define QDJ_ALLOC_FAIL	-2		// Memory alloc failed
#define QDJ_BAD_SYNTAX	-3
#define QDJ_BAD_PAIR	-4

//***
// JSON object structure
//***

typedef enum {
				JSON_UNK,			// Unknown type for created nodes
				JSON_OBJECT,
				JSON_PAIR,
				JSON_ARRAY,
				JSON_VALUE,			// JSON value
					JSON_STRING,	// These are value types				
					JSON_NUMBER,
					JSON_TRUE,
					JSON_FALSE,
					JSON_NULL,
				
				JSON_SYMBOL,		// JSON symbols
			} JSON_TYPE;
			

#define JSON_VALID		'JSON'

typedef struct json_node_dummy
			{
				unsigned long	valid;
				struct json_node_dummy *next;
				JSON_TYPE		type;
				
				// PAIR data
				int len;
				char *string;
				struct json_node_dummy *value;
				
				// ARRAY data
				int count;
				struct json_node_dummy **array;
			} JSON_NODE;
						
//***
// External API
//***

// *** PARSE (qdj.c) ----------------------------------------------------

typedef void (*QDJ_FAIL_FUNCTION)(int failure,int psn,char *buf, void *p);

// Parse and Free structure
JSON_NODE	*QDJ_Parse( const char *json_string, 
						QDJ_FAIL_FUNCTION fail,
						void *p  );
void		QDJ_Free( JSON_NODE *base );

// *** UTILS (qdj_util.c) -----------------------------------------------

// Find a node
JSON_NODE	*QDJ_Find( const char *string,JSON_NODE *base,int recurse );

// Add and delete nodes
JSON_NODE *QDJ_AddNode( JSON_NODE *base_node,
						JSON_TYPE type,				// Type added
						const char *string,			// If pair use these two
						const char *value,
						int count,					// If array use these
						char **array,
						int val_flag );
						
int QDJ_Delete( JSON_NODE *base,JSON_NODE *node );

// Return string form of JSON 
char *QDJ_Build( JSON_NODE *base,int pretty_print,char *eol );

#endif

Added luasupport/JSON/JSON/qdj_token.c.





















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
//*****************************************************************************
/*
    Module Name: qdj_token.c

    Description:	Quick & Dirty JSON Tokenizer

    Revision History:
		11-Nov-2007		Initial Build
		 7-Mar-2008		Change to input string (escapes and all) are what
						is saved in the parsed token.  There will be a print
						API to un-escape a string.
		 7-Mar-2008		Add # -> EOL as a comment
		 8-Mar-2008		Change code to return SYMBOLS and ELEMENTS
						Thus TRUE,FALSE,NULL... are ELEMENTS
						[,],{,}....             are SYMBOLS
		10-Mar-2008		Handle DP's in numbers in QDJ_MakeNumberElement()
*/
//*****************************************************************************

#include "qdj.h"
#include "qdj_token.h"

//***
// Useful defs
//***
					
// Token pullers
static JSON_EL *QDJ_MakeEOBElement( JSON_BUFFER *buf );
static JSON_EL *QDJ_MakeSymbolElement( JSON_BUFFER *buf );
static JSON_EL *QDJ_MakeTrueElement( JSON_BUFFER *buf );
static JSON_EL *QDJ_MakeFalseElement( JSON_BUFFER *buf );
static JSON_EL *QDJ_MakeNullElement( JSON_BUFFER *buf );
static JSON_EL *QDJ_MakeStringElement( JSON_BUFFER *buf );
static JSON_EL *QDJ_MakeNumberElement( JSON_BUFFER *buf );

// Special handler

static void QDJ_HandleComment( JSON_BUFFER *buf );

// Object managers
static JSON_EL *QDJ_CreateElement( char *value,
									int len,
									JSON_CLASS jclass,
									JSON_TYPE type,
									JSON_SYMTYPE subtype );
static int QDJ_DeleteElement( JSON_EL *el );

#if 0
#pragma mark -
#pragma mark -- External API --
#endif

//*****************************************************************************
/*
    Function            : JSON_TOKEN	*QDJ_GetToken( JSON_BUFFER *buf,JSON_TOKEN *tkn )
    Description         : Get the next token from a JSON buffer
    Input Parameters    :	buf	- JSON buffer structure
						:   t	- Use this structure to return
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to next token
       Error Return -		NULL if no token
    Notes               :
    Date Created        :  25-Nov-2007
*/
//*****************************************************************************

JSON_EL	*QDJ_GetToken( JSON_BUFFER *buf )
{
	JSON_EL *el = NULL;
	int run = 1;
	
	// (1) Check for end of buffer
	
	while( !buf->eob && run )
	{
			// (2) Pull the next character and switch on the type
			
			buf->prev_token = buf->last_token;				// Slide stuff back
			buf->last_token = buf->psn;						// Save last token psn
			switch( *(buf->psn) )
			{
				case '\0':			el = QDJ_MakeEOBElement( buf );
									run = 0;			// Exit
									break;

				case '{':
				case '}':
				case '[':
				case ']':
				case ',':
				case ':':			el = QDJ_MakeSymbolElement( buf );
									run = 0;			// Exit
									break;
									
				case 'T':			el = QDJ_MakeTrueElement( buf );
									run = 0;			// Exit
									break;
									
				case 'F':			el = QDJ_MakeFalseElement( buf );
									run = 0;			// Exit
									break;
									
				case 'N':			el = QDJ_MakeNullElement( buf );
									run = 0;			// Exit
									break;
									
				case '"':			el = QDJ_MakeStringElement( buf );
									run = 0;			// Exit
									break;
									
				case '0':
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':
				case '-':			el = QDJ_MakeNumberElement(buf );
									run = 0;			// Exit
									break;
									
				case '#':			// JSON comment (not supported in the language)
									
									QDJ_HandleComment( buf );
									break;
									
				default:			// On other characters if WS ignore else
									// mark as error and ignore
									if( !isspace(*(buf->psn)) )
										printf("\n*** QDJ BAD JSON CHAR [%c] @ [%d] ***\n",
													*(buf->psn),
													(int)(buf->psn - buf->buffer));
									el = NULL;
									buf->psn++;			// Move off it...
									break;
			}
		}
	
	return( el );
}

//*****************************************************************************
/*
    Function            : void QDJ_DeleteToken( JSON_EL *el )
    Description         : Delete a JSON token
    Input Parameters    :	el	- Element to be deleted
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  7-Mar-2008
*/
//*****************************************************************************

void QDJ_DeleteToken( JSON_EL *el )
{
	QDJ_DeleteElement( el );
}

//*****************************************************************************
/*
    Function            : JSON_TOKEN	*QDJ_UnGetToken( JSON_BUFFER *buf )
    Description         : Back up to previous token
    Input Parameters    :	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  25-Nov-2007
*/
//*****************************************************************************

void QDJ_UnGetToken( JSON_BUFFER *buf )
{
	// Move to previous token
	
	buf->psn = buf->prev_token;
	buf->last_token = buf->prev_token;
}

#if 0
#pragma mark -
#pragma mark -- Token pullers --
#endif

//*****************************************************************************
/*
    Function            : void QDJ_MakeEOB( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
    Input Parameters    :	val	- First character
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	Return EOB element
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeEOBElement( JSON_BUFFER *buf )
{
	JSON_EL *el;
	
	// Mark EOB as true and then create EOB element
	
	buf->eob = TRUE;			// Show EOB reached


	el = QDJ_CreateElement( NULL,0,JSON_CLASS_SYMBOL,JSON_SYMBOL,JSON_EOB);
	return( el );
}

//*****************************************************************************
/*
    Function            :  JSON_EL *QDJ_MakeFalseElement( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
    Input Parameters    :	val	- First character
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeSymbolElement(JSON_BUFFER *buf )
{
	JSON_EL *el;
	JSON_SYMTYPE jst;
	
	// (1) Find the subtype of symbol
	
	switch( *(buf->psn) )
	{
				case '{':	jst = JSON_OBJ_IN;
							break;
							
				case '}':	jst = JSON_OBJ_OUT;
							break;

				case '[':	jst = JSON_ARRAY_IN;
							break;

				case ']':	jst = JSON_ARRAY_OUT;
							break;

				case ',':	jst = JSON_SEP;
							break;

				case ':':	jst = JSON_SEP_KVP;
							break;
							
				default:	jst = JSON_NON_SYM;
							break;
	}

	// (2) Create the object
	
	el = QDJ_CreateElement( NULL,0,JSON_CLASS_SYMBOL,JSON_SYMBOL,jst);
	
	// (3) Advance buffer pointer
	
	buf->psn += 1;
	
	return( el );
}

//*****************************************************************************
/*
    Function            :  JSON_EL *QDJ_MakeFalseElement( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeTrueElement(JSON_BUFFER *buf )
{
	JSON_EL *el;

	el = QDJ_CreateElement( NULL,0,JSON_CLASS_VALUE,JSON_TRUE,JSON_NON_SYM);
	
	// Advance buffer pointer past TRUE
	
	buf->psn += 4;
	
	return( el );
}

//*****************************************************************************
/*
    Function            :  JSON_EL *QDJ_MakeFalseElement( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeFalseElement( JSON_BUFFER *buf )
{
	JSON_EL *el;

	el = QDJ_CreateElement( NULL,0,JSON_CLASS_VALUE,JSON_FALSE,JSON_NON_SYM);

	// Advance buffer pointer past FALSE
	
	buf->psn += 4;

	return( el );
}

//*****************************************************************************
/*
    Function            :  JSON_EL *QDJ_MakeNullElement( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeNullElement( JSON_BUFFER *buf )
{
	JSON_EL *el;

	el = QDJ_CreateElement( NULL,0,JSON_CLASS_VALUE,JSON_NULL,JSON_NON_SYM);	
	
	// Advance buffer pointer past NULL
	
	buf->psn += 4;
	
	return( el );
}

//*****************************************************************************
/*
    Function            :  JSON_EL *QDJ_MakeStringElement( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeStringElement( JSON_BUFFER *buf )
{
	char *value;		// This is the start of the string
									// skip past initial "
	int len = 0;
	JSON_EL *el;
	int run = 1;
	
	// (1) Set the start of the string just after the " which is where the
	// buffer pointer is right now
	
	buf->psn++;
	value = buf->psn;
		
	// (2) Walk the buffer till and end condition hit then create the element
	
	while( run )
	{
		switch( *(buf->psn) )
		{
				case '\0':			// EOB problem !!
									run = 0;
									buf->eob = 0;
									break;
									
				case '\\':			// Escapes in front of " are a special case
									// Check for this condition
									
									buf->psn++;		// Get pa
									len++;
									
									// If the next character a ", if so then
									// suck it up also as this is NOT the end of the
									// string
									
									if( *buf->psn == '"' )
									{
										buf->psn++;
										len++;
									}
									break;
									
				case '"':			// End of string hit
									// Advance past this but don't count
									buf->psn++;
									run = 0;
									break;
							
				default:			// Everything else just suck in
									buf->psn++;
									len++;
									break;
		}
	}
	
	// (3) Ok, we have it now so build the element
	
	el = QDJ_CreateElement( value,len,JSON_CLASS_VALUE,JSON_STRING,JSON_NON_SYM);
			
	return( el );
}

//*****************************************************************************
/*
    Function            :  JSON_EL *QDJ_MakeNumberElement( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
    Input Parameters    :	val	- First character
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
		10-Mar-2008		Add DP handler
*/
//*****************************************************************************

static JSON_EL *QDJ_MakeNumberElement( JSON_BUFFER *buf )
{
	char *value = buf->last_token;		// Get start of string
	int len = 0;
	JSON_EL *el;
	int run = 1;
	int exponent = 0;
	int dp_flag = 0;
	
	// (1) Look for special case of leading - sign, if present gather in
	// and proceed
	
	if( *(buf->psn) == '-' )
	{
		buf->psn++;
		len++;
	}
		
	// (2) Walk the buffer till and end condition hit then create the element
	
	while( run )
	{
		switch( *(buf->psn) )
		{
				case '0':
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':
							buf->psn++;			// Move to next
							len++;
							break;
							
				case '.':	// If we have already seen one then 
							// then quit from here otherwise just take it
							if( !dp_flag )
							{
								buf->psn++;
								len++;
								dp_flag = 1;
							}
							else
							{
								run = 0;		// Bail 
							}
							break;
							
				case 'E':	// We are doing an exponent, set FLAG
							if( exponent )
							{
								// Problem we are already doing one so bail
								
								run = 0;
							}
							else
							{
								// Set exponent flag and accept character
								
								exponent = 1;
								buf->psn++;
								len++;
							}
							break;
							
				case '+':	// Only valid if we have an exponent
				case '-':
							if( exponent )
							{
								buf->psn++;
								len++;
							}
							else
							{
								// FAILURE, this doesn't belong so bail
								
								run = 0;
							}
							break;
							
				default:	run = 0;		// Not a number
		}
	}
	
	// (3) Ok, we have it now so build the element
	
	el = QDJ_CreateElement( value,len,JSON_CLASS_VALUE,JSON_NUMBER,JSON_NON_SYM);
			
	return( el );
}

//*****************************************************************************
/*
    Function            :  void QDJ_HandleComment( JSON_BUFFER *buf )
    Description         : End of Buffer seen, mark it
    Input Parameters    :	val	- First character
						;	buf	- JSON buffer structure
    Output Parameters   :	
    Function Returns    :	NONE
    Notes               :
    Date Created        :  6-Mar-2008
*/
//*****************************************************************************

static void QDJ_HandleComment( JSON_BUFFER *buf )
{
	int run = 1;
	
	// Loop here till EOL found
	// Note EOL = \r\n or \r or \n
	
	while( run )
	{
		switch( *(buf->psn) )
		{
			case '\r':
			case '\n':	// EOL hit, check for folloing \r or \n
						buf->psn++;
						if( *buf->psn == '\r' || *buf->psn == '\n' )
							buf->psn++;
						run = 0;		// Stop loop
						break;
						
			default:	// Everything else just skip over
						buf->psn++;
						break;
		}
	}
}

#if 0
#pragma mark -
#pragma mark -- Internal Create/Delete Elements --
#endif

//*****************************************************************************
/*
    Function            : JSON_EL *QDJ_CreateElement( char *value,int len,JSON_TYPE type )
    Description         : Create a JSON_EL properly marked up
    Input Parameters    :	value	- Value to be store in node
						:	len		- Length of string
						:	type	- Type of node created
						:	subtype	- Subtype of node
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to created EL marked with type and data
       Error Return -		NULL bad JSON or cannot allocate
    Notes               :
    Date Created        :  13-Nov-2007
*/
//*****************************************************************************

static JSON_EL *QDJ_CreateElement( char *value,
									int len,
									JSON_CLASS jclass,
									JSON_TYPE type,
									JSON_SYMTYPE symbol )
{
	JSON_EL *el;
	
	// (1) Create an element and mark with type
	
	el = NEW_JSON_EL;
	if( el != NULL )
	{
		el->valid = JSON_VALID;
		el->jclass = jclass;
		el->type = type;
		el->symbol = symbol;
		
		// (2) If Value != NULL then create the string
		
		if( value != NULL )
		{
			el->len = len;
			el->string = (char *)MEMALLOC( el->len + 1 );
			if( el->string != NULL )
			{
				memcpy(el->string,value,len);
			}
			else
			{
				// FAILURE, delete this element and return NULL
				
				QDJ_DeleteElement(el);
				el = NULL;
			}
		}
	}
	
	return( el );
}

//*****************************************************************************
/*
    Function            : static int QDJ_DeleteElement( JSON_ELEMENT *el )
    Description         : Delete a JSON Element
    Input Parameters    :	el	- Element to be deleted
    Output Parameters   :	
    Function Returns    :
       Normal Return -		0	If node deleted OK
       Error Return -		<> 0 If bad node
    Notes               :
    Date Created        :  13-Nov-2007
*/
//*****************************************************************************

static int QDJ_DeleteElement( JSON_EL *el )
{
	int rtnval = 0;	// Set for success
	
	// (1) Is this a valid node for deletion
	// If == NULL or NOT valid then return bad node mark
	
	if( el != NULL && el->valid == JSON_VALID )
	{
		// (2) Delete the string if any
		
		if( el->string != NULL )
			MEMFREE( el->string );
		
		// (3) Delete the node now
		
		el->valid = 0;	// Clear valid mark
		MEMFREE( el );
	}
	else
		rtnval = 1;			// Mark as bad
		
	return( rtnval );
}

Added luasupport/JSON/JSON/qdj_token.h.

















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//*****************************************************************************
/*
    Module Name: qdj_token.h

    Description:	Quick & Dirty JSON Tokenizer
	   

    Revision History:
		11-Nov-2007		Initial Build
		 8-Mar-2008		Add parse failure reason
*/
//*****************************************************************************

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

#ifndef QDJ_TOKEN_H
#define QDJ_TOKEN_H		1

typedef struct json_buffer_dummy 
					{
						char *buffer;
						char *psn;			// Current position
						char *prev_token;	// Previous token
						char *last_token;	// Start of THIS token
						int eob;
						int failure;		// != 0 on parse failure contains reason
					} JSON_BUFFER;
					
typedef enum {
				JSON_CLASS_VALUE,
				JSON_CLASS_SYMBOL		// See 
			} JSON_CLASS;
					
typedef enum {
				JSON_NON_SYM,
				JSON_OBJ_IN,			// {
				JSON_OBJ_OUT,			// }
				JSON_ARRAY_IN,			// [
				JSON_ARRAY_OUT,			// ]
				JSON_SEP,				// ,
				JSON_SEP_KVP,			// :
				JSON_EOB,				// End of buffer marker
			} JSON_SYMTYPE;
			

typedef struct json_el_dummy
			{
				unsigned long valid;
				struct json_el_dummy *next;		// Used only while building a list
				JSON_CLASS	jclass;				// Symbol or Value
				JSON_TYPE	type;				// Type of value
				JSON_SYMTYPE symbol;			// Type of symbol
				int len;						// Size of string (if present)
				char *string;					// Element string
			} JSON_EL;

#define NEW_JSON_EL	(JSON_EL *)MEMALLOC(sizeof(JSON_EL))
#define NEW_JSON_ARRAYEL(x)	(JSON_NODE **)MEMALLOC( x * sizeof(JSON_NODE *))
					
//***
// External API
//***

JSON_EL	*QDJ_GetToken( JSON_BUFFER *buf );
void QDJ_UnGetToken( JSON_BUFFER *buf );
void  QDJ_DeleteToken( JSON_EL *el );
						

#endif

Added luasupport/JSON/JSON/qdj_util.c.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
//*****************************************************************************
/*
    Module Name: qdj_util.h

    Description:	Quick & Dirty JSON Utilities 
	   
    Revision History:
		 9-Mar-2008	Initial Verson
		10-Mar-2008	Change to sibling first searches
		10-Mar-2008 Change QDJ_Find() to have recursion flag
		11-Mar-2008 Fix QDJ_AddNode()
		 1-Apr-2008 Fix QDJ_Find() to have const char input
		 1-Apr-2008 Fix QDJ_AddNode() to (a) handle all cases in case statement
										 (b) Check for non-null node case
										 (c) Use const char input strings
		 5-Apr-2008	Change to allow build to be pretty print or flat
		12-May-2011 Fix find where it used base instead of node as the pointer
*/
//*****************************************************************************

#include "qdj.h"
#include "qdj_token.h"

#if 0
#pragma mark -
#pragma mark -- Constants & FWD Defs --
#endif

static char *QDJ_Print( int pretty_print,char *eol,int indent,JSON_NODE *base,char *buffer );
static int QDJ_Size( char *eol,int indent,JSON_NODE *base );
static char *QDJ_PrintIndent( int pretty_print,int indent,char *buffer );
static char *QDJ_PrintEOL( char *eol,int pretty_print,char *buffer );

#if 0
#pragma mark -
#pragma mark -- External API --
#endif

//*****************************************************************************
/*
    Function            : JSON_NODE *QDJ_Find( char *string,
													JSON_NODE *base,
													int recurse )
    Description         : Find the first matching pair node
    Input Parameters    :	string	string value to be matched for pair
						:	base		JSON linked list structure
						:	recurse		If 1 search down into structure 
										(i.e. down VALUEs in nodes)
										If 0 just search nodes at this level
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to found node
       Error Return -		NULL if not found
    Notes               :
    Date Created        :    9-Mar-2008
							10-Mar-2008	Change to sibling first searches
							10-Mar-2008 Change to have recursion flag
*/
//*****************************************************************************

JSON_NODE *QDJ_Find( const char *string,JSON_NODE *base,int recurse )
{
	JSON_NODE *node = base;
	JSON_NODE *fnd = NULL;

	// (1) Search through this list at sibling level
	
	while( node != NULL && node->valid == JSON_VALID)
	{
		// Is this it ?
		
		if( node->string != NULL && node->type == JSON_PAIR )
		{
			if( strcmp(string,node->string) == 0 )
				break;							// Found exit here
		}
			
		// Ok, not found try the next one
		
		node = node->next;
	}
	
	// (2) If we didn't find anything search the children
	// NOTE: There could be a case where you hit an invalid node 
	// in the above loop that node != NULL but node->valid != JSON_VAID
	// This code below would be skipped but the if in (3) would
	// make the return NULL 
	
	if( recurse && node == NULL )
	{
		// Start at the top and do each child
	
		node = base;
		while( node != NULL && node->valid == JSON_VALID)
		{
			fnd = QDJ_Find( string,node->value,recurse );
			if( fnd != NULL )
			{
				// Found in the child....
				node = fnd;
				break;
			}
			else
				node = node->next;		// Try the next...
		}
	}

	// (3) Put a check here in case we hit an invalid node, 
	// in that case just return NULL
	
	if( node != NULL && node->valid != JSON_VALID )
		node = NULL;
		
	return( node );
}

//*****************************************************************************
/*
    Function            : JSON_NODE*QDJ_AddNode( .. )
    Description         : Add a node to a JSON linked list
    Input Parameters    :	base_node	- JSON node, add after this one
						:	type		- Type of node to add
						:	string		- If PAIR this is the string
						:	value		- If PAIR this is the value
						:	count		- If ARRAY count of array elements
						:	array		- If ARRAY this is the array
						:	val_flag	- If 1 attach to Value, if 0 attach to next
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to created node
       Error Return -		NULL cannot be created
    Notes               :
    Date Created        :   9-Mar-2008
	
	11-Mar-2008		Corrections, did not build node for string and number, fixed
	 1-Apr-2008		Check if node created and handle all cases in switch statement
*/
//*****************************************************************************

JSON_NODE *QDJ_AddNode( JSON_NODE *base_node,
						JSON_TYPE type,				// Type added
						const char *string,			// If pair use these two
						const char *value,
						int count,					// If array use these
						char **array,
						int val_flag )
{
	JSON_NODE *node = NULL;
	int i;
	
	// (1) Build the node according to type
	
	switch( type )
	{
		// These need built
		case JSON_PAIR:			// A pair node is actually a STRING node containing 
								// another, so build the container as a string node
								// Change it to a pair and add the value as another
								// string node
								
								node = QDJ_AddNode( NULL, JSON_STRING,(char *)string,NULL,0,NULL,0);
								if( node != NULL )
								{
									// Convert it now to a pair and add the value
									
									node->type = JSON_PAIR;
									node->value = QDJ_AddNode( NULL, JSON_STRING,
																(char *)value,NULL,0,NULL,0);
									if( node->value == NULL )
									{
										QDJ_Free(node);
										node = NULL;
									}
								}
								break;
		
		case JSON_ARRAY:		// On this guy just loop to create
								node = (JSON_NODE *)MEMALLOC( sizeof(JSON_NODE));
								if( node != NULL )
								{
									node->valid = JSON_VALID;
									node->type = JSON_ARRAY;
									node->count = count;
									node->array = (JSON_NODE **)MEMALLOC( count * sizeof(JSON_NODE *));
									for( i=0; i<count; i++ )
									{
										node->array[i] = QDJ_AddNode( NULL, JSON_STRING,
																array[i],NULL,0,NULL,0);
										if( node->array[i] == NULL )
										{
											QDJ_Free( node );
											node = NULL;
											break;
										}
									}
								}
								break;
		
		
		case JSON_STRING:
		case JSON_NUMBER:		// Build the node then copy in the string
								node = (JSON_NODE *)MEMALLOC(sizeof(JSON_NODE));
								if( node != NULL )
								{
									// Fill out this node
									node->valid = JSON_VALID;
									node->type = type;
									node->len = strlen( string );
									node->string = (char *)MEMALLOC( node->len + 1 );
									if( node->string != NULL )
										strcpy(node->string,string);
									else
									{
										QDJ_Free(node);
										node = NULL;			// FAILURE
									}
								}
								break;
		
		// All of these are done at this point
		case JSON_OBJECT:
		case JSON_TRUE:
		case JSON_FALSE:
		case JSON_NULL:		// Build the node then set the type and valid
							node = (JSON_NODE *)MEMALLOC( sizeof(JSON_NODE));
							if( node != NULL )
							{
								node->valid = JSON_VALID;
								node->type = type;
							}
							break;
							
		default:			break;		// Handle unknown case ....
	}
	
	// (2) Connect it to the base node if any
	// Also check if we got a node
	
	if( base_node != NULL && node != NULL )
	{
		// Hook to value or next ?
		
		if( val_flag )
		{
			node->next = base_node->value;
			base_node->value = node;
		}
		else
		{
			node->next = base_node->next;
			base_node->next = node;
		}
	}
	
	// (3) Return created node
	
	return( node );
}

//*****************************************************************************
/*
    Function            : void QDJ_DeleteNode( JSON_NODE *base,JSON_NODE *node )
    Description         : Remove this node
    Input Parameters    :	base		- Base of JSON parse list
						:	node		- Node to be deleted
    Output Parameters   :	
    Function Returns    :	1 When node deleted
    Notes               :
    Date Created        :   9-mar-2008
*/
//*****************************************************************************

int QDJ_Delete( JSON_NODE *base,JSON_NODE *node )
{
	JSON_NODE *prev;
	int rtnval = 0;
	
	// (1) Is this trip necessary ?
	
	if( base != NULL && node != NULL )
	{
		// (2) First find the previous node to the one to be deleted
		
		prev = base;
		while( prev->next != node )
		{
			if( QDJ_Delete( prev->value,node ) )
			{
				prev = NULL;		// Exit recursion....
				break;
			}
			
			// Ok, try next
			
			prev = prev->next;
			if( prev == NULL )
				break;
		}
		
		// (3) If we found the previous node then
		// keep going, otherwise bail
		
		if( prev != NULL )
		{
			// (4) Ok link around our node to be deleted
			
			prev->next = node->next;
			
			// (5) Cutoff our node from the world and delete it
			
			node->next = NULL;
			QDJ_Free( node );
			rtnval = 1;				// To stop recursion
		}
	}
	
	return( rtnval );
}

//*****************************************************************************
/*
    Function            : char *QDJ_Build( JSON_NODE *base )
    Description         : Create the string form of the JSON list
    Input Parameters    :	base			JSON linked list structure
						:	pretty_print	If 1 then make human formatted output
						:					If 0 computer format (no cr's or indents)
						:	eol				End of line string (i.e. CR,NL or NLCR)
    Output Parameters   :	
    Function Returns    :
       Normal Return -		Pointer to created string (user must free)
       Error Return -		NULL bad JSON or cannot allocate
    Notes               :
    Date Created        :  10-Nov-2007
*/
//*****************************************************************************

char *QDJ_Build( JSON_NODE *base,int pretty_print,char *eol )
{
	char *buffer = NULL;
	char *ptr;
	int size = 0;

	size = QDJ_Size( eol,0,base );		// Determine how big a buffer we need
	if( size > 0 )
	{
		buffer = (char *)MEMALLOC(size + 100);		// Add some slop...
		if( buffer != NULL )
		{
			ptr = QDJ_Print( pretty_print,eol,0,base, buffer );
			
			// Stick in one last \n to finish the buffer
			// If printed for humans
			
			if( !pretty_print )
				sprintf(ptr,"%s",eol);
		}
	}

	return( buffer );
}

#if 0
#pragma mark -
#pragma mark -- INTERNAL API --
#endif

//*****************************************************************************
/*
    Function            : char *QDJ_Print( int indent,JSON_NODE *base,char *buffer )
    Description         : Format JSON into buffer
    Input Parameters    :	pretty_print	1 = Human output, 0 = computer output
						:	eol				End of line character
						:	indent			Indent level
						:	base			JSON linked list structure
						:	buffer			Print from the start of this buffer
    Output Parameters   :	
    Function Returns    :	buffer - Next buffer psn to print
    Notes               :
    Date Created        :  16-Nov-2007
*/
//*****************************************************************************

static char *QDJ_Print( int pretty_print,char *eol,int indent,JSON_NODE *base,char *buffer )
{
	int i;
	
	// (1) If not valid then bail
	
	if( base != NULL && base->valid == JSON_VALID )
	{
		// (2) Print this node
		
		switch( base->type )
		{
			case JSON_OBJECT:	buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
								buffer = QDJ_PrintIndent( pretty_print,indent,buffer );
								buffer += sprintf(buffer,"{");
								buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
								
								buffer = QDJ_Print(pretty_print,eol,indent+5,base->value,buffer);
								buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
								buffer = QDJ_PrintIndent( pretty_print,indent,buffer );
								buffer += sprintf(buffer,"}");
								break;
								
			case JSON_PAIR:		buffer = QDJ_PrintIndent( pretty_print,indent,buffer );
								buffer += sprintf(buffer,"\"%s\" : ",base->string);
								buffer = QDJ_Print( pretty_print,eol,indent,base->value,buffer );
								break;
								
			case JSON_ARRAY:	buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
								buffer = QDJ_PrintIndent( pretty_print,indent,buffer );
								buffer += sprintf(buffer,"[");
								buffer = QDJ_PrintEOL(eol,pretty_print,buffer);								
								for( i=0; i<base->count; i++ )
								{
									buffer = QDJ_PrintIndent(pretty_print,indent+5,buffer);
									buffer = QDJ_Print( pretty_print,eol,0,base->array[i],buffer);

									if( i == base->count-1 )
										buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
									else
									{
										buffer += sprintf(buffer,",");
										buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
									}
								}
								buffer = QDJ_PrintIndent( pretty_print,indent,buffer);
								buffer += sprintf(buffer,"]");
								buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
								break;
								
			case JSON_STRING:	buffer += sprintf(buffer,"\"%s\"",base->string);
								break;
								
			case JSON_NUMBER:	buffer += sprintf(buffer,"%s",base->string);
								break;

			case JSON_TRUE:		buffer += sprintf(buffer,"TRUE");
								break;

			case JSON_FALSE:	buffer += sprintf(buffer,"FALSE");
								break;

			case JSON_NULL:		buffer += sprintf(buffer,"NULL");
								break;
								
			default:			break;
			
		}

		if( base->next != NULL )
		{
			buffer += sprintf(buffer," , ");
			buffer = QDJ_PrintEOL(eol,pretty_print,buffer);
		}
		// (3) Do the rest
		
		buffer = QDJ_Print( pretty_print,eol,indent,base->next,buffer );
	}
	return( buffer );
}

//*****************************************************************************
/*
    Function            : char *QDJ_PrintIndent( int indent,char *buffer )
    Description         : Put the indent into the buffer
    Input Parameters    :	pretty_print	If 1 human format (indent spaces)
						:					If 0 computer format (1 space)
						:	indent	Indent level
						:	buffer	Put indent in here as spaces
    Output Parameters   :	
    Function Returns    :	Pointer to next free buffer psn
    Notes               :
    Date Created        :  16-Nov-2007
*/
//*****************************************************************************

static char *QDJ_PrintIndent(int pretty_print,int indent,char *buffer)
{
	int i;
	
	if( pretty_print )
	{
		for( i=0; i<indent; i++ )
			*buffer++ = ' ';				// Insert space
	}
	else
		*buffer++ = ' ';					// Just one space for computer
		
	return( buffer );
}

//*****************************************************************************
/*
    Function            : char *QDJ_Size( int indent,JSON_NODE *base )
    Description         : Return size of buffer needed to hold structure
    Input Parameters    :	eol		End of line char
						:	indent	Indent level
						:	base	JSON linked list structure
    Output Parameters   :	
    Function Returns    :	# Bytes in buffer to hold printout
    Notes               :
    Date Created        :  16-Nov-2007
*/
//*****************************************************************************

static int QDJ_Size( char *eol,int indent,JSON_NODE *base )
{
	int size = 0;
	int i;
	// (1) If not valid then bail
	
	if( base != NULL && base->valid == JSON_VALID )
	{
	
		// (2) Do the size of this node
		
		switch( base->type )
		{
			case JSON_OBJECT:	// Printed as \n<indent>{\n
								//				indent + 5<object stuff>\n
								//				indent }
								size += 1 +indent + 1 + 1 +
										QDJ_Size(eol,indent+5,base->value) + 1 +
										indent + strlen(eol);
								break;
								
			case JSON_PAIR:		//      indent  "    <string>               "  <s>  :  <s>
								size += indent + 1 + strlen(base->string) + 1 + 1 + 1 + 1 +
								//   <value>                  /n
									QDJ_Size(eol,indent,base->value);
								break;
								
			case JSON_ARRAY:	//      \n            indent   [   \n
								size += strlen(eol) + indent + 1 + strlen(eol);
								//       indent + 5     <array element>              ,          \n
								for( i=0; i<base->count; i++ )
									size += indent + 5 + QDJ_Size(eol,0,base->array[i]) + 1 + strlen(eol);
								//      indent   ]  \n
								size += indent + 1 + 1;
								break;

			case JSON_STRING:
			case JSON_NUMBER:	size += indent + 1;
								size += strlen(base->string) +2;	// Count the "'s even for #'s
								break;
								
			case JSON_TRUE:		size += indent + 1;
								size += 4;
								break;

			case JSON_FALSE:	size += indent + 1;
								size += 5;
								break;

			case JSON_NULL:		size += indent + 1;
								size += 4;
								break;
														
			default:			break;
								
		}
		
		// (3) Size of the rest
		
		size += QDJ_Size( eol,indent,base->next );
	}

	return( size );
}

//*****************************************************************************
/*
    Function            : char *QDJ_Size( int indent,JSON_NODE *base )
    Description         : Return size of buffer needed to hold structure
    Input Parameters    :	eol		End of line char
						:	pretty_print	If 1 print EOL
						:					If 0 print space
						:	base	JSON linked list structure
    Output Parameters   :	
    Function Returns    :	# Next open buffer psn
    Notes               :
    Date Created        :   5-Apr-2008
*/
//*****************************************************************************

static char *QDJ_PrintEOL( char *eol,int pretty_print,char *buffer )
{
	if( pretty_print )
		buffer += sprintf(buffer,"%s",eol);
	else
		*buffer++ = ' ';		// Just a space
		
	return buffer;
}

Added luasupport/JSON/jsonlua.c.





























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
//*****************************************************************************
/*
	Copyright © 2010 Jim Schimpf. Permission is hereby granted,
	free of charge, to any person obtaining a copy of this software and
	associated documentation files (the "Software"), to deal in the Software
	without restriction, including without limitation the rights to use,
	copy, modify, merge, publish, distribute, sublicense, and/or sell copies
	of the Software, and to permit persons to whom the Software is furnished
	to do so, subject to the following conditions:

	The above copyright notice and this permission notice shall be included
	in all copies or substantial portions of the Software.

	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
	OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
	MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
	IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
	CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
	TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
	SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
//*****************************************************************************
/*
	Module Name:         json -> Lua parser

	Description:         This is a lua 3.2 JSON -> Lua list module

	Library Extensions	jsonparse(<string>)	- Parses JSON string to 
											  an array indexed by keys
	Technique:	Recurse through the JSON structure and at each level
				create or fill in a Lua list with the data from level

	Revision History:	
          2 Oct 2010 Initial version
		  3 Oct 2010 Working code
		 24 Nov 2011 [a0b3a45386] Fix parsing of JSON ARRAY's
		  2 Dec 2011 [f5fbc87bd5] Fix parsing of JSON Arrays
*/
//****************************************************************************

#include <ctype.h>
#include <time.h>
#include "lauxlib.h"
#include "lua.h"
#include "lualib.h"
#include "lstate.h"
#include "lapi.h"
#include "qdj.h"
#include "jsonlua.h"

#if 0
	#pragma mark -
	#pragma mark DATA
#endif

//#define TESTING_JSON_ARRAY 1

// NOTE: This is for testing without real data
// don't want to generate data on every pass
// You can just call jsonparse("x") and it will 
// return a real list.  COMMENT out for normal operation
//#define TESTING_JSON 1
#ifdef TESTING_JSON
char *test_string = "{\n"
"[ \"one\",\"two\",\"three\",\"four\" ]\n"
"}\n";
#endif
#ifdef TESTING_JSON_X
char *test_string = "{\n"
"    \"glossary\": {\n"
"       \"title\": \"example glossary\",\n"
"		\"GlossDiv\": {\n"
"            \"title\": \"S\",\n"
"			  \"GlossList\": {\n"
"                \"GlossEntry\": {\n"
"                    \"ID\": \"SGML\",\n"
"					 \"SortAs\": \"SGML\",\n"
"					\"GlossTerm\": \"Standard Generalized Markup Language\",\n"
"					\"Acronym\": \"SGML\",\n"
"					\"Abbrev\": \"ISO 8879:1986\",\n"
"					\"GlossDef\": {\n"
"                       \"para\": \"A meta-markup language, used to create markup languages such as DocBook.\",\n"
"						\"GlossSeeAlso\": [\"GML\", \"XML\"]\n"
"                    },\n"
"					\"GlossSee\": \"markup\"\n"
"                }\n"
"            }\n"
"        }\n"
"    }\n"
"}\n";
#endif
#ifdef TESTING_JSON_ARRAY
#define PRINT_STACK(level)	printf("L %d TOS: %d\n",level,lua_gettop(L))

char *test_string = "\n"
/*"{\n"
"	\"shows\" : [\n"
"		{ \"show\"		:	\"La Mariseillaise\",\n"
"		  \"time\"		:	\"1:26\"\n"
"		  },\n"
"\n"		  
"		  {\n"
"		  	\"show\"		:	\"Stars & Stripes Forever\",\n"
"		  	\"time\"		:	\"3:38\"\n"
"		  }\n"
"		]\n"
"}\n";*/
"{ "
" \"test\" : ["
"{ \"test1\" : \"val1\" } "
"] }\n";
#else
#define PRINT_STACK(x)
#endif

static int jsonparse (lua_State *L);

// Support functions 

static void json_recurse( JSON_NODE *obj, int out,lua_State *lua_state,int level );
static void json_object( JSON_NODE *obj, int list,lua_State *lua_state,int level );
static void json_pair( JSON_NODE *pair , int list,lua_State *lua_state,int level );
static void json_array( JSON_NODE *array,int list,lua_State *lua_state,int level );

#if 0
	#pragma mark -
	#pragma mark Lua API
#endif

#pragma mark -- CONSTRUCTOR --
static struct luaL_reg parserslib_f[] = {
  {"json",jsonparse},
	{NULL,NULL}
};

#pragma mark -- LUA ATTACHMENT --
/*******************************************************************************
*
*  luaopen_parselib	- Attach PARSE class to LUA
*
*	INPUT:	L	- Lua state
*
*	OUTPUT:	1	- Stacked LIMO library table
*
*********************************************************************************/
LUALIB_API int luaopen_parselib (lua_State *L) 
{		
	// (1) Create the class Metatable
	
	luaL_newmetatable(L,"PP.parse");
	
	// (2) Put the __index element with the metatable in the
	// metatable
	
	lua_pushstring(L,"__index");
	lua_pushvalue(L,-2);				// Put the meta table (1) on stack
	lua_settable(L,-3);					// Add it to the metatable
	
	// (3) Add the class table to the system & return that it's on the
	// stack
	luaL_openlib(L, "parsers", parserslib_f, 0);
	return 1;
}

#if 0
	#pragma mark -
	#pragma mark External API
#endif

//***************************************************************************
/*
*  jsonparse( lua_State *lua_state )	- Parse KVP string to a list
*
*	INPUT:	JSON string of the form 
*
*	OUTPUT:	List of the form list 
*
*/
//***************************************************************************/

static int jsonparse (lua_State *L)
{
	char *in;
	size_t llen;
	JSON_NODE *base;
	int rtnval = 0;
	int out;			// Base table
	
	// (1) Extract the string from the input stack
	// Add a check first to see if there is a string there
	// if not just return NIL
	
	if( lua_isstring(L,1 ) )
	{
		in = (char *)luaL_checklstring(L,1,&llen);
		if( llen > (long)32767 )
		{
			return( 0 );			// Return NIL
		}
		
		// (2) Parse that puppie, If parse OK build output struct
		
	#ifdef TESTING_JSON_ARRAY
		base = QDJ_Parse( test_string,NULL,NULL);
	#else
		base = QDJ_Parse( in,NULL,NULL);
	#endif
		lua_pop(L,1);		// Remove the input string
		
		if( base != NULL )
		{
			// (3) Build the output table, and set to return
			// value on stack

		PRINT_STACK(0);			
			rtnval = 1;
			lua_newtable(L);
			out = lua_gettop(L);
			json_recurse(base,out,L,0);
		PRINT_STACK(0);
			
			// (4) Wipe the parse tree and move on
			
			QDJ_Free(base);
		}
	}
	
	// Return # values in function return
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark Internal API
#endif

//***************************************************************************
/*
* void json_object( JSON_NODE *obj, lua_Object out,lua_State *lua_state )
*						Recurse through the JSON array
*
*	INPUT:	obj	- JSON object node
*			list	- Initial lua table
*
*	OUTPUT:	NONE
*
*/
//***************************************************************************/

static void json_recurse( JSON_NODE *obj, int list,lua_State *L,int level )
{
	// (1) Hit bottom ?
	
	PRINT_STACK(level);
	
	if( obj != NULL )
	{
		// (1) Handle this object
		
		switch( obj->type )
		{
			case JSON_OBJECT:
						json_object( obj, list,L,level+1 );
						break;
						
				case JSON_ARRAY:
						json_array( obj,list,L,level+1  );
						break;
					
				case JSON_PAIR:	
						json_pair( obj, list,L,level+1  );
						break;
								
				default:		// All other types are singltons and
								// are handled in the above
						break;
		}
		PRINT_STACK(level);
					
		// (3) Now do siblings 
		
		json_recurse(obj->next,list,L,level);
	}
}


//***************************************************************************
/*
* void json_object( JSON_NODE *obj, lua_Object list,lua_State *lua_state )
*										Recursive handler for OBJECTS
*
*	INPUT:	obj	- JSON object node
*			list- Add to this Lua List
*			If list < 0 then don't add to list just return
*
*	OUTPUT:	Created lua object
*
*	This will add a list labeled JOBJ to the main list
*	Return stack clean
*/
//***************************************************************************/

static void json_object( JSON_NODE *obj, int list,lua_State *L,int level )
{
	int sub_list = -1;

	PRINT_STACK(level);
		
	// (0) Check for a bad object
	
	if( obj != NULL )
	{
		// (1) Create a new table at TOS) that will have
		// have the JOBJ key
		lua_pushstring( L,"JOBJ");		// Push key		
		lua_newtable(L);
		sub_list = lua_gettop(L);		// New table @ TOS
		
		// (2) Now recurse with it and build the objects below this one
		
		json_recurse( obj->value,sub_list,L,level+1);
		
		// (3) Now add this table to the main table and give it the key
		//		JOBJ if list is valid
		
		lua_rawset(L,list);				// Add element
	}
	
	PRINT_STACK(level);
}

//***************************************************************************
/*
* void json_array( JSON_NODE *obj, lua_Object list,lua_State *lua_state )
*										Handler for JSON arrays
*
*	INPUT:	obj		- JSON object node
*			list	- Add ARRAY to this list
*			If list == LUA_NOOBJECT then don't add to list just return
*
*	OUTPUT:	Created ARRAY list
*
*	This will add a numericaly indexed table labeled ARRAY to the main
*	list
*	Return stack clean
*
*/
//***************************************************************************/

static void json_array( JSON_NODE *obj,int list,lua_State *L,int level )
{
	int sub_table;
	JSON_NODE *l;
	int indx = 1;
	double val;
	int sub_sub_table;

	PRINT_STACK(level);
		
	// (0) Check for a bad object
	
	if( obj != NULL )
	{
		// (1) Create the array as a numerically indexed table
		// with the label ARRAY
		
		lua_pushstring(L,"ARRAY");	// Call it an array
		lua_newtable(L);			// New table @ TOS
		sub_table = lua_gettop(L);
		
		// (2) Now add the elements as indexed values to this table
		
		for(indx=0; indx<obj->count; indx++)
		{
			l = obj->array[indx];
			val = (double)(indx+1);
			lua_pushnumber(L,val);
			
			switch( l->type )
			{
				case JSON_OBJECT:				// Complex object
							lua_newtable(L);	// New table @ TOS
							sub_sub_table = lua_gettop(L);
							json_object(l,sub_sub_table,L,level+1);
							lua_rawset(L,sub_table);
							break;
											
				case JSON_NUMBER:				// Push as strings & attach
				case JSON_STRING:
							lua_pushlstring(L,l->string,l->len);
							lua_rawset(L,sub_table);
							break;
							
				case JSON_TRUE:
							lua_pushstring(L,"JSON_TRUE");
							lua_rawset(L,sub_table);
							break;
							
				case JSON_FALSE:
							lua_pushstring(L,"JSON_FALSE");
							lua_rawset(L,sub_table);
							break;
							
				case JSON_NULL:
							lua_pushstring(L,"JSON_NULL");
							lua_rawset(L,sub_table);
							break;
							
				default:	lua_pushnil(L);
							lua_rawset(L,sub_table);
							break;
			}
		}
		
		// (3) Put the Size in the array
		
		lua_pushstring(L, "n");
		val = (double)indx;
		lua_pushnumber(L, val);
		lua_rawset(L, sub_table);
		
		// (4) Now form the array table
		
		lua_rawset(L,list);
	}
	
	PRINT_STACK(level);

}

//***************************************************************************
/*
* void json_pair( JSON_NODE *obj,lua_Object list,lua_State *lua_state )
*										Recursive handler for JSON_PAIRS
*
*	INPUT:	obj	- JSON object node
*			list	- Lua list, add pairs as key/value (@ TOS)
*
*	OUTPUT:	NONE
*
*	Add pair key/value to the input list
*
*/
//***************************************************************************/
							
static void json_pair( JSON_NODE *obj,int list ,lua_State *L,int level )
{
	int sub_table;
	
	PRINT_STACK(level);
	
	// (0) Check for a bad object
	
	if( obj != NULL )
	{
		// (1) Add the key and value to out

		lua_pushlstring( L,obj->string,obj->len);	// Push key
	
		// (2) At this point either it's a simple object which means add it 
		// directly or  complex object where we need to create the object
		// then add it to the table
		
		switch( obj->value->type )
		{
			case JSON_OBJECT:					// Complex object, add as list
						lua_newtable(L);		// New table @ TOS
						sub_table = lua_gettop(L);
						json_object(obj->value,sub_table,L,level+1);
						lua_rawset(L,list);
						break;
							
			case JSON_ARRAY:					// Array, build table to hold it
						lua_newtable(L);		// New table @ TOS
						sub_table = lua_gettop(L);
						json_array(obj->value,sub_table,L,level+1);
						lua_rawset(L,list);
						break;
			
			case JSON_NUMBER:					// Push as strings
			case JSON_STRING:
						lua_pushlstring(L,obj->value->string,obj->value->len);
						lua_rawset(L,list);
						break;
						
			case JSON_TRUE:
						lua_pushstring(L,"JSON_TRUE");
						lua_rawset(L,list);
						break;
						
			case JSON_FALSE:
						lua_pushstring(L,"JSON_FALSE");
						lua_rawset(L,list);
						break;
						
			case JSON_NULL:
						lua_pushstring(L,"JSON_NULL");
						lua_rawset(L,list);
						break;
						
			default:	lua_pushnil(L);
						lua_rawset(L,list);
						break;
		}
						
	}
	
	PRINT_STACK(level);
}

Added luasupport/JSON/jsonlua.h.





















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//*****************************************************************************
/*
	Copyright © 2010 Jim Schimpf. Permission is hereby granted,
	free of charge, to any person obtaining a copy of this software and
	associated documentation files (the "Software"), to deal in the Software
	without restriction, including without limitation the rights to use,
	copy, modify, merge, publish, distribute, sublicense, and/or sell copies
	of the Software, and to permit persons to whom the Software is furnished
	to do so, subject to the following conditions:

	The above copyright notice and this permission notice shall be included
	in all copies or substantial portions of the Software.

	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
	OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
	MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
	IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
	CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
	TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
	SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
//*****************************************************************************
/*
	Module Name:         json -> Lua parser

	Description:         This is a lua 3.2 JSON -> Lua list module

	Library Extensions	jsonparse(<string>)	- Parses JSON string to 
											  an array indexed by keys

	Revision History:	
         2 Oct 2010	Initial version
*/
//****************************************************************************

#ifndef JSONLUA_H
#define JSONLUA_H	1

#define LUA_PARSENAME	"parse"
LUALIB_API int luaopen_parselib (lua_State *L);

#endif

Changes to luasupport/firenet/lua_firenet.c.

8
9
10
11
12
13
14

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

32
33
34
35
36

37
38
39
40
41
42
43
*
*  Description:         This library supports Firenet functions
*
*  Author:              Jim Schimpf
*
*  Revision History:	 5 Sep 2009 Initial version
*									in ms

*
*		Functions:
*			firenet.new()	- Create a network object
*
*			fn:delete()		- Remove a network object
*			fn:read()		- Read network
*			fn:write()		- Write network
*			fn:mapI()		- Query network for map
*/
//************************************************************************

#include <unistd.h>
#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#include "clock.h"

#include "comqueue.h"
#include "parent.h"
#include "lua_firenet.h"
#include "logmap.h"
#include "packet_lua.h"


#if 0
	#pragma mark -
	#pragma mark -- Internal Data --
#endif

// Firewire Network Handle Stored here







>

















>





>







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
*
*  Description:         This library supports Firenet functions
*
*  Author:              Jim Schimpf
*
*  Revision History:	 5 Sep 2009 Initial version
*									in ms
*						15 Jan 2011 [e4208b8f56] Change to support message responses
*
*		Functions:
*			firenet.new()	- Create a network object
*
*			fn:delete()		- Remove a network object
*			fn:read()		- Read network
*			fn:write()		- Write network
*			fn:mapI()		- Query network for map
*/
//************************************************************************

#include <unistd.h>
#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#include "clock.h"
#include "network.h"
#include "comqueue.h"
#include "parent.h"
#include "lua_firenet.h"
#include "logmap.h"
#include "packet_lua.h"
#include "debug.h"

#if 0
	#pragma mark -
	#pragma mark -- Internal Data --
#endif

// Firewire Network Handle Stored here
55
56
57
58
59
60
61


62
63
64
65
66
67
68
69
70
71

72
73
74
75
76
77
78

static int fnopen( lua_State *L);
static int fnclose( lua_State *L);
static int fnread( lua_State *L);
static int fnwrite( lua_State *L);
static int fnmap( lua_State *L);



static NET_HANDLE *checkFIRENET( lua_State *L );

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

//**********************************************************************
/*
*void firenet_set_pd( PARENT_DATA *pd )	- Store the handle into the object

*
*	INPUT:	pd	- Current parent data
*
*	OUTPUT:	none
*/
//**********************************************************************








>
>









|
>







58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

static int fnopen( lua_State *L);
static int fnclose( lua_State *L);
static int fnread( lua_State *L);
static int fnwrite( lua_State *L);
static int fnmap( lua_State *L);

static int fnetresponse( PACKET *rpkt, NET_HANDLE *h );

static NET_HANDLE *checkFIRENET( lua_State *L );

#if 0
	#pragma mark -
	#pragma mark -- External API --
#endif

//**********************************************************************
/*
*   void firenet_set_pd( PARENT_DATA *pd )	- Store the handle 
8                                               into the object
*
*	INPUT:	pd	- Current parent data
*
*	OUTPUT:	none
*/
//**********************************************************************

89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

/**********************************************************************
*
* fn = firenet.fnopen()		- Create a Firenet object
*
*	INPUT:	NONE
*
*	OUTPUT:	Timer handle or nil
*
**********************************************************************/

static int fnopen (lua_State *L) 
{
	NET_HANDLE *h;
	int rtnval = 0;







|







95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

/**********************************************************************
*
* fn = firenet.fnopen()		- Create a Firenet object
*
*	INPUT:	NONE
*
*	OUTPUT:	Network handle or nil
*
**********************************************************************/

static int fnopen (lua_State *L) 
{
	NET_HANDLE *h;
	int rtnval = 0;
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

197
198
199
200
201
202
203
204
205
206
207
208





209
210

211







212

213
214



215
216









































































217
218
219
220
221
222
223
		}
	}
	return (rtnval);
}

/**********************************************************************
*
* firenet.fnwrite(t)   - Send data to network
*
*	INPUT:	t   - Network handle
*			pkt	- Network data packet as a list
*
*	OUTPUT:	1 if sent
*			nil if not
*
**********************************************************************/

static int fnwrite (lua_State *L) 
{
	NET_HANDLE *h = checkFIRENET(L);
	PACKET pk;
	int rtnval = 0;


	if( h != NULL )
	{
		// (1) Generate the packet 
		rtnval = packet_generate( h->pd,L,&pk );
		if( rtnval == 0 )
		{
			// (2) If generated then send it
			
			rtnval = comqueueFGSend( &pk );	// Send it
			if( rtnval = 0 )
			{





				lua_pushnumber(L,1.0);		// Show SUCCESS
				rtnval = 1;

			}







		}

	}
	



	return( rtnval );
}











































































/**********************************************************************
*   Library Create function
**********************************************************************/

#pragma mark -- CONSTRUCTOR --







|




|







|

>




|




|
|

>
>
>
>
>
|
|
>
|
>
>
>
>
>
>
>
|
>
|
|
>
>
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
		}
	}
	return (rtnval);
}

/**********************************************************************
*
* firenet.fnwrite(t,pkt)   - Send data to network
*
*	INPUT:	t   - Network handle
*			pkt	- Network data packet as a list
*
*	OUTPUT:	# responses received (NOTE: Status fakes a response)
*			nil if not
*
**********************************************************************/

static int fnwrite (lua_State *L) 
{
	NET_HANDLE *h = checkFIRENET(L);
	PACKET pkt;
	int rtnval = 0;
	lua_Number val;

	if( h != NULL )
	{
		// (1) Generate the packet 
		rtnval = packet_generate( h->pd,L,&pkt );
		if( rtnval == 0 )
		{
			// (2) If generated then send it
			
			rtnval = comqueueFGSend( &pkt );	// Send it
			if( rtnval == 0 )
			{
				switch( pkt.data[0] )
				{
					case 'S':	// STATUS always return success
					case 'V':	// VERSION look for response
					case 'C':	// CHANNEL look for response
								lua_pushnumber(L,1.0);
								rtnval = 1;
								break;
								
					default:	// All others read response
								rtnval = fnetresponse( &pkt,h );
								if( rtnval > 0 )
								{
									val = (lua_Number)rtnval;	// Show success
									lua_pushnumber(L, val);
									rtnval = 1;
								}
								break;
				}
			}
		}
	}
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Support Methods --
#endif

/**********************************************************************
*
* int fnetresponse( PACKET *rpkt, NET_HANDLE *h )	- Read reply messages
*
*	INPUT:	rpkt	- Previously received packet
*			h		- Network handle
*
*	OUTPUT:	# responses received 
*
**********************************************************************/

static int fnetresponse( PACKET *rpkt, NET_HANDLE *h )
{
	char rcmd;			// Command response looked for
	CLOCK_STRUCT wait;
	int rtnval = 0;		// Count of received responses
	int max_responses;	// Max responses we can receive
	long resp_wait;
	PACKET pk;
	
	// (1) Start time on entrance
	
	CLOCK_Start( &wait );
	
	// (2) Pull out the command response we are looking for 
	// also estimate max responses
	
	rcmd = rpkt->data[0];	// Original command
	if( rpkt->to == BCAST_ADDRESS )
		max_responses = MAX_ADDRESS - MIN_ADDRESS;	// # Addresses available
	else 
		max_responses = 1;
	
#ifdef DEBUG_RESPONSE_TIME
	resp_wait = y;
#else
	resp_wait = (long)max_responses * (long)RESP_WAIT;
#endif
	
	// (3) Ready to roll loop here till wait is over reading or
	// all responses received
		
	while( !CLOCK_Done(&wait,resp_wait ) )
	{
		if( h != NULL && comqueueFGDataReady() )
		{
			// (4) Get the packet then build the structure on the stack
			
			if( comqueueFGReceive(&pk) )
			{
				// Correct response ?
				
				if( pk.len >= 2 &&
					pk.data[0] == RESP_CMD &&
					pk.data[1] == rcmd )
				{
					rtnval = rtnval + 1;	// Got a response
				}
			}
		}
		
		if( rtnval >= max_responses )
			break;						// DONE
	}
	
	return rtnval;
}


/**********************************************************************
*   Library Create function
**********************************************************************/

#pragma mark -- CONSTRUCTOR --
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
  {"delete",fnclose},
  {"read",fnread},
  {"write",fnwrite},
  {NULL, NULL}
};

#pragma mark -- LUA ATTACHMENT --
/*******************************************************************************
*
*  luaopen_firenetlib	- Attach FIRENET class to LUA
*
*	INPUT:	L	- Lua state
*
*	OUTPUT:	1	- Stacked LIMO library table
*
*********************************************************************************/
LUALIB_API int luaopen_firenetlib (lua_State *L) 
{		
	// (1) Create the class Metatable
	
	luaL_newmetatable(L,"PP.firenet");
	
	// (2) Put the __index element with the metatable in the







|







|







328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
  {"delete",fnclose},
  {"read",fnread},
  {"write",fnwrite},
  {NULL, NULL}
};

#pragma mark -- LUA ATTACHMENT --
/*********************************************************************
*
*  luaopen_firenetlib	- Attach FIRENET class to LUA
*
*	INPUT:	L	- Lua state
*
*	OUTPUT:	1	- Stacked LIMO library table
*
*********************************************************************/
LUALIB_API int luaopen_firenetlib (lua_State *L) 
{		
	// (1) Create the class Metatable
	
	luaL_newmetatable(L,"PP.firenet");
	
	// (2) Put the __index element with the metatable in the
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
	
	// (4) Add the class table to the system & return that it's on the
	// stack
	luaL_openlib(L, "firenet", firenetlib_f, 0);
	return 1;
}

/*******************************************************************************
*
*  TG_TIMER_HANDLE *checkFIRENET()	- Check TOS for FIRENET handle
*
*	INPUT:	NONE
*			Examine TOS
*
*	OUTPUT:	Pointer to TG_TIMER_HANDLE object if it was TOS
*			NULL if not
*
*********************************************************************************/

static NET_HANDLE *checkFIRENET( lua_State *L )
{
	NET_HANDLE *h;
	
	// (1) Check the TOS to see if we have TG.limo metatable
	
	h = (NET_HANDLE *)luaL_checkudata(L,1,"PP.firenet");
	luaL_argcheck( L,(h != NULL),1,"Firenet object expected");
	
	return( h );
}







|









|





|






360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
	
	// (4) Add the class table to the system & return that it's on the
	// stack
	luaL_openlib(L, "firenet", firenetlib_f, 0);
	return 1;
}

/********************************************************************
*
*  TG_TIMER_HANDLE *checkFIRENET()	- Check TOS for FIRENET handle
*
*	INPUT:	NONE
*			Examine TOS
*
*	OUTPUT:	Pointer to TG_TIMER_HANDLE object if it was TOS
*			NULL if not
*
********************************************************************/

static NET_HANDLE *checkFIRENET( lua_State *L )
{
	NET_HANDLE *h;
	
	// (1) Check the TOS to see if we have TG.Firenet metatable
	
	h = (NET_HANDLE *)luaL_checkudata(L,1,"PP.firenet");
	luaL_argcheck( L,(h != NULL),1,"Firenet object expected");
	
	return( h );
}

Changes to luasupport/firenet/packet_lua.c.

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*
*  Description:         This library supports Firenet functions
*
*  Author:              Jim Schimpf
*
*  Revision History:	 5 Sep 2009 Initial version
*									in ms
*
*/
//************************************************************************

#include <unistd.h>
#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"







|







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
*
*  Description:         This library supports Firenet functions
*
*  Author:              Jim Schimpf
*
*  Revision History:	 5 Sep 2009 Initial version
*									in ms
*						13 May 2010 [d26a3ab0e9] Re-write of packet handling
*/
//************************************************************************

#include <unistd.h>
#include <stdlib.h>
#include "lua.h"
#include "lauxlib.h"
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97


98
99
100
101
102
103
104
105
106
107
*			0 if not formed
*/
//******************************************************************************/

int packet_recv( PACKET *pk,PARENT_DATA *pd,lua_State *L)
{	
	int out;
	char part[32];
	MAP_ENTRY *e;
	double val;
	int ival;
	
	// (1) Create the output table
	
	lua_newtable(L);
	out = lua_gettop(L);

	// (2) Now output the CMD string
	
	lua_pushstring(L,"CMD");
	part[0] = pk->data[0];
	part[1] = '\0';
	lua_pushstring(L,part);
	lua_rawset(L,out);				// Put on CMD part
	
	// (3) Put on the FROM field
	
	e = get_entry(pk->from,pd->map);
	if( e != NULL )
	{
		lua_pushstring(L,"FROM");
		lua_pushstring(L,e->name);
	}
	else
	{
		lua_pushstring(L,"FROM");
		ival = 0xff & pk->from;
		val = (double)ival;
		lua_pushnumber(L,val);
	}
	lua_rawset( L,out );
	
	// (4) Proc depending on data
	


	packet_recv_type( pk,out,L,pd );
	
	// (5) Return formed value on stack
	
	lua_settop(L,out);
	
	return 1;
}

//*****************************************************************************







<
<
|
<






|

|
|
<
|
|
|
<
<
<
<
<
|
<
<
<
<
<
|
<
|
<
|

|
|
>
>
|

|







54
55
56
57
58
59
60


61

62
63
64
65
66
67
68
69
70
71

72
73
74





75





76

77

78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
*			0 if not formed
*/
//******************************************************************************/

int packet_recv( PACKET *pk,PARENT_DATA *pd,lua_State *L)
{	
	int out;


	lua_Number val;

	
	// (1) Create the output table
	
	lua_newtable(L);
	out = lua_gettop(L);

	// (2) Now output the TO/FROM fields
	
	lua_pushstring(L,"TO");
	val = (lua_Number)pk->to;

	lua_pushnumber(L, val);
	lua_rawset(L,out);	






	lua_pushstring(L,"FROM");





	val = (lua_Number)pk->from;

	lua_pushnumber(L, val);

	lua_rawset(L,out);	
	
	// (3) Stack on the DATA field

	lua_pushstring(L,"DATA");
	lua_pushlstring(L, (const char *)&(pk->data[0]), pk->len);
	lua_rawset(L,out);
	
	// (4) Return formed value on stack
	
	lua_settop(L,out);
	
	return 1;
}

//*****************************************************************************
119
120
121
122
123
124
125
126
127
128

129
130
131
132
133
134
135
136
137
138
139
140
141
142

143
144
145
146
147
148
149

150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
*						<pkt>	PSN = 2	TOS
*/
//******************************************************************************/
	
int packet_generate( PARENT_DATA *pd,lua_State *L,PACKET *pk)
{
	const char *value;
	MAP_ENTRY *e;
	unsigned char data[10];
	int rtnval = 0;


	// (1) Get packet location & clear the output packet
	// Set for data type packet
	
	memset(pk,'\0',sizeof(PACKET));
	pk->type = PACKET_TYPE_DATA;
	
	// (2) Now get the CMD and TO fields
	
	lua_pushstring(L,"CMD");
	lua_rawget(L,2);				// Table at psn 2
	value = lua_tostring(L,3);		// Value @ TOS
	
	// Set for DATA packet and put in first piece of data

	
	data[0] = (unsigned char)value[0];
	packet_add_data(1,data,pk);
	lua_pop(L,1);					// Pop it
	
	lua_pushstring(L,"TO");
	lua_rawget(L,2);				// Table at psn 2

	value = lua_tostring(L,3);	// Value @ TOS
	if( value != NULL )
	{
		e = get_map_entry( (char *)value,pd->map);
		if( e != NULL )
		{
			pk->to = e->phy_address;		// Translated address
		}
		else
		{
			pk->to = strtol(value,NULL,0);// Physical value
		}
	}
	else
		rtnval = -1;			// Mark failure
		
	lua_pop(L,1);				// Pop it
	
	// (3) Translate the rest of the command
	
	if( rtnval == 0 )
		rtnval = packet_gen_type( pd,L,pk );
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Internal API --
#endif

//*****************************************************************************
/*
*  void packet_recv_type( PACKET *pk,int out,lua_State *L,PARENT_DATA *pd )
*
*	INPUT:	pk	- Network packet
*			out	- Stack psn of output list
*			L	- Lua state
*			pd	- Parent data to update MAP
*
*	OUTPUT:	NONE
*			Depending on packet type pull data an add to list
*
*		ARM:	CMD="A"	DATA=[Arm/Disarm cmd]
*/
//******************************************************************************/

static void packet_recv_type( PACKET *pk,int out,lua_State *L,PARENT_DATA *pd )
{
	char part[32];
	int val;
	double dval;
	char *ptr;
	unsigned long *lptr;
	unsigned long lval;
	
	// (1) Switch on packet type and handle data
	
	switch( pk->data[0] )
	{
		case 'A':	// ARM/DISARM
					part[0] = pk->data[1];	// ARM/DISARM cmd
					part[1] = '\0';
					lua_pushstring(L,"DATA");
					lua_pushstring(L,part);
					lua_rawset( L,out );
					break;
					
		case 'F':	// Fire cmd
					val = (0xff & pk->data[1]);
					dval = (double)val;
					lua_pushstring(L,"DATA");
					lua_pushnumber(L,dval);
					lua_rawset( L,out );
					break;

		case 'D':	// Delay Fire cmd
					val = (0xff & pk->data[1]);		// CKT
					dval = (double)val;
					lua_pushstring(L,"DATA");
					lua_pushnumber(L,dval);
					lua_rawset( L,out );
					
					// Delay value
					
					lptr = (unsigned long *)&(pk->data[2]);
					lval = ntohl(*lptr);
					dval = (double)lval;
					lua_pushstring(L,"DELAY");
					lua_pushnumber(L,dval);
					lua_rawset( L,out );
					break;
					
		case 'S':	// Status REPLY (SR)
					part[0] = pk->data[2];	// ARM/DISARM status
					part[1] = '\0';
					lua_pushstring(L,"DATA");
					lua_pushstring(L,part);
					lua_rawset( L,out );

					val = (0xff & pk->data[3]);		// CKT
					dval = (double)val;
					lua_pushstring(L,"FIRED");
					lua_pushnumber(L,dval);
					lua_rawset( L,out );

					val = (0xff & pk->data[4]);		// UNFIRED
					dval = (double)val;
					lua_pushstring(L,"UNFIRED");
					lua_pushnumber(L,dval);
					lua_rawset( L,out );
					break;
					
		case 'W':	// Get WHO response
					ptr = (char *)&(pk->data[2]);
					lua_pushstring(L,"DATA");
					lua_pushstring(L,ptr);
					lua_rawset( L,out );
					
					// Add this to the internal map
					
					add_map_entry( ptr,pk->from,pd->map);
					
					break;
	}
}

//*****************************************************************************
/*
*  void packet_add_data(int size,unsigned char *data,PACKET *pk )
*
*	INPUT:	size	# Bytes to add
*			data	Data buffer
*			pk		Put into packet and update length
*
*	OUTPUT:	NONE
*			Add data to packet and update length
*			NOTE: Discard data if over packet size
*/
//******************************************************************************/
					
static void packet_add_data(int size,unsigned char *data,PACKET *pk )
{
	int i;
	
	// (1) Store data into packet up to max size
	
	for(i=0; i<size; i++ )
	{
		pk->data[pk->len++] = data[i];
		if( pk->len >= PHY_DATA_SIZE )
		{
			printf("\n* %s %d TOO MUCH DATA\n",__FILE__,__LINE__);
			break;
		}
	}
}

//*****************************************************************************
/*
*  int packet_generate( PARENT_DATA *pd,lua_State *L,PACKET *pk)
*
*	INPUT:	pd	- Parent data
*			L	- Lua state
*			pk	- Network packet
*			pk->data[0]	- Message TYPE
*	NOTE:Packet list at TOS
*
*	OUTPUT:	0 if OK, <> 0 if not
*
*	On entrance STACK = <H>		PSN = 1	
*						<pkt>	PSN = 2	TOS
*
*  14-Sep-2009 Change to support 32 bit delay values
*/
//******************************************************************************/
		
static int packet_gen_type( PARENT_DATA *pd,lua_State *L,PACKET *pk )
{
	const char *value;
	unsigned char data[10];
	int val;
	unsigned long lval;
	int rtnval = 0;

	// (1) Switch on message type
	
	switch( pk->data[0] )
	{
		case 'A':	// ARM/DISARM
					// Pull off the data to get the A/D
					lua_pushstring(L,"DATA");
					lua_rawget(L,2);				// Table at psn 2
					value = lua_tostring(L,3);		// Value @ TOS
					if( value != NULL )
						packet_add_data(1,(unsigned char *)value,pk );
					lua_pop(L,1);					// Pop it
					break;
					
		case 'F':	// FIRE
					// Get the CHANNEL #
					lua_pushstring(L,"DATA");
					lua_rawget(L,2);				// Table at psn 2
					value = lua_tostring(L,3);		// Value @ TOS
					if( value != NULL )
					{
						val = strtol(value,NULL,0);		// Get the #
						data[0] = (unsigned char)(0xff & val);
						packet_add_data(1,(unsigned char *)data,pk );
					}
					else
						rtnval = -1;
					lua_pop(L,1);					// Pop it
					break;

		case 'D':	// Delay FIRE
					// Get the CHANNEL #
					lua_pushstring(L,"DATA");
					lua_rawget(L,2);				// Table at psn 2
					value = lua_tostring(L,3);		// Value @ TOS
					if( value != NULL )
					{
						val = strtol(value,NULL,0);		// Get the #
						data[0] = (unsigned char)(0xff & val);
						packet_add_data(1,(unsigned char *)data,pk );
					}
					else
						rtnval = -1;
					lua_pop(L,1);					// Pop it

					// Get the Delay value (4 bytes)
					lua_pushstring(L,"DELAY");
					lua_rawget(L,2);				// Table at psn 2
					value = lua_tostring(L,3);		// Value @ TOS
					if( value != NULL )
					{
						lval = strtoul(value,NULL,0);	// Get the #
						//lval = htonl(lval);
						data[0] = (unsigned char)(0xff & (lval>>24));
						data[1] = (unsigned char)(0xff & (lval>>16));
						data[2] = (unsigned char)(0xff & (lval>>8));
						data[3] = (unsigned char)(0xff & (lval>>0));
						packet_add_data(4,(unsigned char *)data,pk );
					}
					else
						rtnval = -1;
					lua_pop(L,1);					// Pop it
					break;
					
		case 'S':	// Status command
					// Do nothing
					break;
					
		case 'R':	// Rename get data and store in message
					lua_pushstring(L,"DATA");
					lua_rawget(L,2);				// Table at psn 2
					value = lua_tostring(L,3);		// Value @ TOS
					if( value != NULL )
					{
						val = strlen(value)+1;			// Get length
						packet_add_data(val,(unsigned char *)value,pk );
					}
					else
						rtnval = -1;
					lua_pop(L,1);					// Pop it
					break;
					
		case 'W':	// Who is command
					// Do nothing
					break;

		case 'Z':	// Sync command
					// Do nothing
					break;
	}
	return( rtnval );
}










<
<

>





<

|

|

|
|
<
>

<
|
<

|
|
>
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|

|

|
|









<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
105
106
107
108
109
110
111


112
113
114
115
116
117
118

119
120
121
122
123
124
125

126
127

128

129
130
131
132
133














134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149

























































































































































































































































*						<pkt>	PSN = 2	TOS
*/
//******************************************************************************/
	
int packet_generate( PARENT_DATA *pd,lua_State *L,PACKET *pk)
{
	const char *value;


	int rtnval = 0;
	lua_Number val;

	// (1) Get packet location & clear the output packet
	// Set for data type packet
	
	memset(pk,'\0',sizeof(PACKET));

	
	// (2) Now get the TO/FROM fields
	
	lua_pushstring(L,"TO");
	lua_rawget(L,2);				// Table at psn 2
	val = lua_tonumber(L,3);		// Value @ TOS
	pk->to = (int)val;

	lua_remove(L,3);				// Get rid of it
	

	// (3) Put the data into the packet

	
	lua_pushstring(L,"DATA");
	lua_rawget(L,2);
	pk->len = lua_strlen(L,3);
	value = lua_tostring(L,3);














	strncpy(pk->data,value,pk->len);
	lua_remove(L,3);				// Get rid of it
	
	// (4) Set the FROM field to 0 and return 1
	
	pk->from = 0;
	rtnval = 0;
	
	return( rtnval );
}

#if 0
	#pragma mark -
	#pragma mark -- Internal API --
#endif


























































































































































































































































Changes to luasupport/timer/lua_timer.c.

227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
*					fixed and now runs correctly
*		 8-Oct-2009 Change sleep to real UNIX sleep cmd
*
**********************************************************************/

static int tsleep (lua_State *L) 
{
	CLOCK_STRUCT ct;
	double dval;
	int et;
		
	// (1) Get the et off the stack
	
	if( !lua_isnumber(L,-1) )
	{







|







227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
*					fixed and now runs correctly
*		 8-Oct-2009 Change sleep to real UNIX sleep cmd
*
**********************************************************************/

static int tsleep (lua_State *L) 
{
	//CLOCK_STRUCT ct;
	double dval;
	int et;
		
	// (1) Get the et off the stack
	
	if( !lua_isnumber(L,-1) )
	{

Changes to main.c.

10
11
12
13
14
15
16


17
18
19
20
21
22
23
24
25
26
27
28
29
30

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

77
78
79


















80
81
82
83
84
85
86











































87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
*						firing box CSMA RS-485 network used between
*						firing boxes and also to run a system
*
*  Revision History:	28-Jul-2009	Initial version
*						 8-Aug-2009	Add parent/node specific data [48a9689588]
*						26-Aug-2009	Change to LUA version [a9d657d7f5] 
*						 4-Sep-2009 Change to make "X" device run simulator [49de603d49]


*/
//************************************************************************

#include <stdlib.h>
#include <stdio.h>
#include <string.h>    /* access to strncpy(), strncmp() */
#include <pthread.h>
#include <unistd.h>
#include "phy.h"
#include "network.h"
#include "child.h"
#include "parent.h"
#include "sysop.h"
#include "debug.h"


#define NODE_COUNT	5
#define SIM_PORT	"X"		// Port name for simulator run

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

static int flag_srch( int argc, char *argv[], char *flag, int get_value, char **rtn );
void pgm_help( char *msg );

#if 0
	#pragma mark -
	#pragma mark -- MAIN --
#endif

int main (int argc, const char * argv[]) 
{
	char *port;
	char *ptr;
	NODE_DATA *node_data;
	PARENT_DATA *parent_data;
	int node_count = NODE_COUNT;
	int sim_run = 0;
	char *script = NULL;

	
	// (1) Get command line params
	
	if( flag_srch(argc,(char **)argv,"-v",0,&ptr) )
	{
		pgm_help(NULL);
		return( 0 );				// Exit code now
	}
	
	// Get input parameters
	if( !flag_srch(argc,(char **)argv,"-p",1,&port) )
	{
		pgm_help("NO PORT GIVEN");
		return( -1 );
	}

	if( flag_srch(argc,(char **)argv,"-n",1,&ptr) )
	{
		node_count = strtol(ptr,NULL,0);
	}

	
	flag_srch(argc,(char **)argv,"-c",1,&script);
	


















	// Initialize the physical simulation layer
	// If the simulator set
	
	if( strcmp( port,SIM_PORT) == 0 )
	{
		prep_phy(0);		// Physical layer simulation
		sim_run = 1;		// Simulator running











































	}
	else
	{
		prep_phy(1);		// Real port
		sim_run = 0;		// No simulator
	}
	
	// Start up the parent
	
	parent_data = parent_start( port,node_count );
	if( parent_data != NULL )
	{
		// Start up children if simulator
		
		if( sim_run )
		{
			node_data = child_start( port, node_count );
		}
		
		if( sim_run == 0 || node_data != NULL )
		{
			// Run the system (under Lua)
			
			system_run( argc,argv,script,parent_data,node_data);

			if( sim_run )
			{
				// Shutdown system
		
				sleep( 2 );				
				child_stop( node_data );
			}
		}
	
		// Shutdown parent and exit
		
		parent_stop( parent_data );
	}
	printf("\n-- END RUN --\n");
	
    return 0;
}

//***********************************************************************
/*







>
>














>



















|

|
|



>












|
<

|
<
<
<
<
>


|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



<
<
<
|
<
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
|
<
|
<
<
<
<
<
<
<
<
<
<
<







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

74
75




76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150



151

152


153











154
155

156











157
158
159
160
161
162
163
*						firing box CSMA RS-485 network used between
*						firing boxes and also to run a system
*
*  Revision History:	28-Jul-2009	Initial version
*						 8-Aug-2009	Add parent/node specific data [48a9689588]
*						26-Aug-2009	Change to LUA version [a9d657d7f5] 
*						 4-Sep-2009 Change to make "X" device run simulator [49de603d49]
*						22-May-2010 Add logging to system [d98ef0303d]
*						 5-Mar-2011 Change to allow running as a pure web server [bcf3865969]
*/
//************************************************************************

#include <stdlib.h>
#include <stdio.h>
#include <string.h>    /* access to strncpy(), strncmp() */
#include <pthread.h>
#include <unistd.h>
#include "phy.h"
#include "network.h"
#include "child.h"
#include "parent.h"
#include "sysop.h"
#include "debug.h"
#include "firenetlog.h"

#define NODE_COUNT	5
#define SIM_PORT	"X"		// Port name for simulator run

#if 0
	#pragma mark -
	#pragma mark -- Data --
#endif

static int flag_srch( int argc, char *argv[], char *flag, int get_value, char **rtn );
void pgm_help( char *msg );

#if 0
	#pragma mark -
	#pragma mark -- MAIN --
#endif

int main (int argc, const char * argv[]) 
{
	char *port = NULL;
	char *ptr;
	NODE_DATA *node_data = NULL;
	PARENT_DATA *parent_data = NULL;
	int node_count = NODE_COUNT;
	int sim_run = 0;
	char *script = NULL;
	int no_port = 0;
	
	// (1) Get command line params
	
	if( flag_srch(argc,(char **)argv,"-v",0,&ptr) )
	{
		pgm_help(NULL);
		return( 0 );				// Exit code now
	}
	
	// Get input parameters
	if( !flag_srch(argc,(char **)argv,"-p",1,&port) )
	{
		no_port = 1;			// Running without a port => no FIRENET

	}
	




	// Get a script (if any)
	
	flag_srch(argc,(char **)argv,"-c",1,&script);

	// FIRENET options, if no port set then skip these
	// [bcf3865969]
	
	if( no_port == 0 )
	{
	
		if( flag_srch(argc,(char **)argv,"-n",1,&ptr) )
		{
			node_count = strtol(ptr,NULL,0);
		}
		
		// Get logging
		
		if( flag_srch( argc,(char **)argv,"-log",1,&ptr ) )
			log_control( 1, (const char *)ptr );			// Enable log
		else
			log_control( 0, NULL );							// Disable log
		
		// Initialize the physical simulation layer
		// If the simulator set
		
		if( strcmp( port,SIM_PORT) == 0 )
		{
			prep_phy(0);		// Physical layer simulation
			sim_run = 1;		// Simulator running
		}
		else
		{
			prep_phy(1);		// Real port
			sim_run = 0;		// No simulator
		}
		
		// Start up the parent
		
		parent_data = parent_start( port,node_count );
		if( parent_data != NULL )
		{
			// Start up children if simulator
			
			if( sim_run )
			{
				node_data = child_start( port, node_count );
			}
			
			// Run system either under simulator or 
			// real network
			
			if( sim_run == 0 || node_data != NULL )
			{
				// Run the system (under Lua)
				
				system_run( argc,argv,script,parent_data,node_data);

				if( sim_run )
				{
					// Shutdown system
			
					sleep( 2 );				
					child_stop( node_data );
				}
			}
		
			// Shutdown parent and exit
			
			parent_stop( parent_data );
		}
		
		log_done();					// Shutdown logging
	}
	else
	{



		// Pure web server operation

		// [bcf3865969]


		











		system_run( argc,argv,script,parent_data,node_data);	// Just run script
	}

		











	printf("\n-- END RUN --\n");
	
    return 0;
}

//***********************************************************************
/*
139
140
141
142
143
144
145

146
147
148
149
150
151

152
153
154
155
156
157
158
//***********************************************************************/
void pgm_help( char *msg )
{
	if( msg != NULL )
		printf("*** [%s] ***\n",msg);
		
	printf("--firenet--\n");

	printf("Syntax:	fire_net -p <port name> [-v]\n");
	printf("\n");
	printf("-v		- Show help\n");
	printf("-p <port>   - SERIAL PORT used X=SIM\n");
	printf("-n # Nodes  - # Nodes in run  SIM ONLY DEF = 5\n");
	printf("-c <Script>	- Lua script name\n");

	printf("\n");
	
}/* pgm_help() */

#if 0
	#pragma mark -
	#pragma mark --Support --







>



|


>







171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
//***********************************************************************/
void pgm_help( char *msg )
{
	if( msg != NULL )
		printf("*** [%s] ***\n",msg);
		
	printf("--firenet--\n");
	printf("Version: [%s] [%s]\n",__DATE__,__TIME__);
	printf("Syntax:	fire_net -p <port name> [-v]\n");
	printf("\n");
	printf("-v		- Show help\n");
	printf("-p <port>   - SERIAL PORT used X=SIM If not present, web server only\n");
	printf("-n # Nodes  - # Nodes in run  SIM ONLY DEF = 5\n");
	printf("-c <Script>	- Lua script name\n");
	printf("-log <Log file>	- Log network data\n");
	printf("\n");
	
}/* pgm_help() */

#if 0
	#pragma mark -
	#pragma mark --Support --
203
204
205
206
207
208
209
210
211
		}
	}
	
	/*  Failure exit here, so return to user with FALSE */
	
	return( 0 );
	
}/* flag_srch() */








<
|
237
238
239
240
241
242
243

244
		}
	}
	
	/*  Failure exit here, so return to user with FALSE */
	
	return( 0 );
	

}

Added makefile.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
###################################################
#
# Makefile for Firenet
# Creator [Xcode -> Makefile Ver: Oct 16 2006 14:12:12]
# Created: [Sun Dec 25 06:32:20 2011]
#
###################################################

#
# Macros
#

CC = /usr/bin/gcc
CC_OPTIONS = 
LNK_OPTIONS = -lpthread -lm


#
# INCLUDE directories for Firenet
#

INCLUDE = -I.\
		-INode/parent/support\
		-INode/support\
		-INode/parent\
		-Ilua-5.1.4/src\
		-Iluasupport/HTTP/rest\
		-Iluasupport/HTTP/COMS\
		-Iluasupport/HTTP\
		-Iluasupport/kdb\
		-Iluasupport/kdb/Unix\
		-Iluasupport/timer\
		-Iluasupport/firenet\
		-ILogging\
		-Iluasupport/HTTP/libmicrohttpd-0.9.0/src/daemon\
		-Iluasupport/HTTP/libmicrohttpd-0.9.0\
		-Iluasupport/HTTP/libmicrohttpd-0.9.0/src/include\
		-INetwork/Simulation\
		-INetwork/Real\
		-INetwork/Real/SERIAL/Linux\
		-INode/node\
		-INetwork\
		-INode\
		-Iluasupport\
		-Iluasupport/JSON\
		-Iluasupport/JSON/JSON


#
# Build Firenet
#

Firenet : \
		obj/main.o\
		obj/mac.o\
		obj/network.o\
		obj/jescape.o\
		obj/qdj.o\
		obj/qdj_token.o\
		obj/qdj_util.o\
		obj/jsonlua.o\
		obj/comqueue.o\
		obj/clock.o\
		obj/parent.o\
		obj/lapi.o\
		obj/lauxlib.o\
		obj/lbaselib.o\
		obj/lcode.o\
		obj/ldblib.o\
		obj/ldebug.o\
		obj/ldo.o\
		obj/ldump.o\
		obj/lfunc.o\
		obj/lgc.o\
		obj/linit.o\
		obj/liolib.o\
		obj/llex.o\
		obj/lmathlib.o\
		obj/lmem.o\
		obj/loadlib.o\
		obj/lobject.o\
		obj/lopcodes.o\
		obj/loslib.o\
		obj/lparser.o\
		obj/lstate.o\
		obj/lstring.o\
		obj/lstrlib.o\
		obj/ltable.o\
		obj/ltablib.o\
		obj/ltm.o\
		obj/lundump.o\
		obj/lvm.o\
		obj/lzio.o\
		obj/print.o\
		obj/rest.o\
		obj/restclient.o\
		obj/restcom.o\
		obj/restcomQ.o\
		obj/httplib.o\
		obj/lua_kbd.o\
		obj/tgkbhit.o\
		obj/sysop.o\
		obj/lua_timer.o\
		obj/lua_firenet.o\
		obj/packet_lua.o\
		obj/firenetlog.o\
		obj/logmap.o\
		obj/connection.o\
		obj/daemon.o\
		obj/internal.o\
		obj/memorypool.o\
		obj/postprocessor.o\
		obj/reason_phrase.o\
		obj/response.o\
		obj/phy.o\
		obj/sim_phy.o\
		obj/real_phy.o\
		obj/linserial.o\
		obj/child_cmd.o\
		obj/child.o
	$(CC) $(LNK_OPTIONS) \
		obj/main.o\
		obj/mac.o\
		obj/network.o\
		obj/jescape.o\
		obj/qdj.o\
		obj/qdj_token.o\
		obj/qdj_util.o\
		obj/jsonlua.o\
		obj/comqueue.o\
		obj/clock.o\
		obj/parent.o\
		obj/lapi.o\
		obj/lauxlib.o\
		obj/lbaselib.o\
		obj/lcode.o\
		obj/ldblib.o\
		obj/ldebug.o\
		obj/ldo.o\
		obj/ldump.o\
		obj/lfunc.o\
		obj/lgc.o\
		obj/linit.o\
		obj/liolib.o\
		obj/llex.o\
		obj/lmathlib.o\
		obj/lmem.o\
		obj/loadlib.o\
		obj/lobject.o\
		obj/lopcodes.o\
		obj/loslib.o\
		obj/lparser.o\
		obj/lstate.o\
		obj/lstring.o\
		obj/lstrlib.o\
		obj/ltable.o\
		obj/ltablib.o\
		obj/ltm.o\
		obj/lundump.o\
		obj/lvm.o\
		obj/lzio.o\
		obj/print.o\
		obj/rest.o\
		obj/restclient.o\
		obj/restcom.o\
		obj/restcomQ.o\
		obj/httplib.o\
		obj/lua_kbd.o\
		obj/tgkbhit.o\
		obj/sysop.o\
		obj/lua_timer.o\
		obj/lua_firenet.o\
		obj/packet_lua.o\
		obj/firenetlog.o\
		obj/logmap.o\
		obj/connection.o\
		obj/daemon.o\
		obj/internal.o\
		obj/memorypool.o\
		obj/postprocessor.o\
		obj/reason_phrase.o\
		obj/response.o\
		obj/phy.o\
		obj/sim_phy.o\
		obj/real_phy.o\
		obj/linserial.o\
		obj/child_cmd.o\
		obj/child.o\
		-o Firenet

clean : 
		rm \
		obj/main.o\
		obj/mac.o\
		obj/network.o\
		obj/jescape.o\
		obj/qdj.o\
		obj/qdj_token.o\
		obj/qdj_util.o\
		obj/jsonlua.o\
		obj/comqueue.o\
		obj/clock.o\
		obj/parent.o\
		obj/lapi.o\
		obj/lauxlib.o\
		obj/lbaselib.o\
		obj/lcode.o\
		obj/ldblib.o\
		obj/ldebug.o\
		obj/ldo.o\
		obj/ldump.o\
		obj/lfunc.o\
		obj/lgc.o\
		obj/linit.o\
		obj/liolib.o\
		obj/llex.o\
		obj/lmathlib.o\
		obj/lmem.o\
		obj/loadlib.o\
		obj/lobject.o\
		obj/lopcodes.o\
		obj/loslib.o\
		obj/lparser.o\
		obj/lstate.o\
		obj/lstring.o\
		obj/lstrlib.o\
		obj/ltable.o\
		obj/ltablib.o\
		obj/ltm.o\
		obj/lundump.o\
		obj/lvm.o\
		obj/lzio.o\
		obj/print.o\
		obj/rest.o\
		obj/restclient.o\
		obj/restcom.o\
		obj/restcomQ.o\
		obj/httplib.o\
		obj/lua_kbd.o\
		obj/tgkbhit.o\
		obj/sysop.o\
		obj/lua_timer.o\
		obj/lua_firenet.o\
		obj/packet_lua.o\
		obj/firenetlog.o\
		obj/logmap.o\
		obj/connection.o\
		obj/daemon.o\
		obj/internal.o\
		obj/memorypool.o\
		obj/postprocessor.o\
		obj/reason_phrase.o\
		obj/response.o\
		obj/phy.o\
		obj/sim_phy.o\
		obj/real_phy.o\
		obj/linserial.o\
		obj/child_cmd.o\
		obj/child.o\
		Firenet

install : Firenet
		cp Firenet Firenet

#
# Build the parts of Firenet
#


# Item # 1 -- main --
obj/main.o : main.c
	$(CC) $(CC_OPTIONS) main.c -c $(INCLUDE) -o obj/main.o


# Item # 2 -- mac --
obj/mac.o : Network/mac.c
	$(CC) $(CC_OPTIONS) Network/mac.c -c $(INCLUDE) -o obj/mac.o


# Item # 3 -- network --
obj/network.o : Network/network.c
	$(CC) $(CC_OPTIONS) Network/network.c -c $(INCLUDE) -o obj/network.o


# Item # 4 -- jescape --
obj/jescape.o : luasupport/JSON/JSON/jescape.c
	$(CC) $(CC_OPTIONS) luasupport/JSON/JSON/jescape.c -c $(INCLUDE) -o obj/jescape.o


# Item # 5 -- qdj --
obj/qdj.o : luasupport/JSON/JSON/qdj.c
	$(CC) $(CC_OPTIONS) luasupport/JSON/JSON/qdj.c -c $(INCLUDE) -o obj/qdj.o


# Item # 6 -- qdj_token --
obj/qdj_token.o : luasupport/JSON/JSON/qdj_token.c
	$(CC) $(CC_OPTIONS) luasupport/JSON/JSON/qdj_token.c -c $(INCLUDE) -o obj/qdj_token.o


# Item # 7 -- qdj_util --
obj/qdj_util.o : luasupport/JSON/JSON/qdj_util.c
	$(CC) $(CC_OPTIONS) luasupport/JSON/JSON/qdj_util.c -c $(INCLUDE) -o obj/qdj_util.o


# Item # 8 -- jsonlua --
obj/jsonlua.o : luasupport/JSON/jsonlua.c
	$(CC) $(CC_OPTIONS) luasupport/JSON/jsonlua.c -c $(INCLUDE) -o obj/jsonlua.o


# Item # 9 -- comqueue --
obj/comqueue.o : Node/parent/support/comqueue.c
	$(CC) $(CC_OPTIONS) Node/parent/support/comqueue.c -c $(INCLUDE) -o obj/comqueue.o


# Item # 10 -- clock --
obj/clock.o : Node/support/clock.c
	$(CC) $(CC_OPTIONS) Node/support/clock.c -c $(INCLUDE) -o obj/clock.o


# Item # 11 -- parent --
obj/parent.o : Node/parent/parent.c
	$(CC) $(CC_OPTIONS) Node/parent/parent.c -c $(INCLUDE) -o obj/parent.o


# Item # 12 -- lapi --
obj/lapi.o : lua-5.1.4/src/lapi.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lapi.c -c $(INCLUDE) -o obj/lapi.o


# Item # 13 -- lauxlib --
obj/lauxlib.o : lua-5.1.4/src/lauxlib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lauxlib.c -c $(INCLUDE) -o obj/lauxlib.o


# Item # 14 -- lbaselib --
obj/lbaselib.o : lua-5.1.4/src/lbaselib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lbaselib.c -c $(INCLUDE) -o obj/lbaselib.o


# Item # 15 -- lcode --
obj/lcode.o : lua-5.1.4/src/lcode.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lcode.c -c $(INCLUDE) -o obj/lcode.o


# Item # 16 -- ldblib --
obj/ldblib.o : lua-5.1.4/src/ldblib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ldblib.c -c $(INCLUDE) -o obj/ldblib.o


# Item # 17 -- ldebug --
obj/ldebug.o : lua-5.1.4/src/ldebug.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ldebug.c -c $(INCLUDE) -o obj/ldebug.o


# Item # 18 -- ldo --
obj/ldo.o : lua-5.1.4/src/ldo.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ldo.c -c $(INCLUDE) -o obj/ldo.o


# Item # 19 -- ldump --
obj/ldump.o : lua-5.1.4/src/ldump.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ldump.c -c $(INCLUDE) -o obj/ldump.o


# Item # 20 -- lfunc --
obj/lfunc.o : lua-5.1.4/src/lfunc.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lfunc.c -c $(INCLUDE) -o obj/lfunc.o


# Item # 21 -- lgc --
obj/lgc.o : lua-5.1.4/src/lgc.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lgc.c -c $(INCLUDE) -o obj/lgc.o


# Item # 22 -- linit --
obj/linit.o : lua-5.1.4/src/linit.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/linit.c -c $(INCLUDE) -o obj/linit.o


# Item # 23 -- liolib --
obj/liolib.o : lua-5.1.4/src/liolib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/liolib.c -c $(INCLUDE) -o obj/liolib.o


# Item # 24 -- llex --
obj/llex.o : lua-5.1.4/src/llex.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/llex.c -c $(INCLUDE) -o obj/llex.o


# Item # 25 -- lmathlib --
obj/lmathlib.o : lua-5.1.4/src/lmathlib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lmathlib.c -c $(INCLUDE) -o obj/lmathlib.o


# Item # 26 -- lmem --
obj/lmem.o : lua-5.1.4/src/lmem.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lmem.c -c $(INCLUDE) -o obj/lmem.o


# Item # 27 -- loadlib --
obj/loadlib.o : lua-5.1.4/src/loadlib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/loadlib.c -c $(INCLUDE) -o obj/loadlib.o


# Item # 28 -- lobject --
obj/lobject.o : lua-5.1.4/src/lobject.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lobject.c -c $(INCLUDE) -o obj/lobject.o


# Item # 29 -- lopcodes --
obj/lopcodes.o : lua-5.1.4/src/lopcodes.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lopcodes.c -c $(INCLUDE) -o obj/lopcodes.o


# Item # 30 -- loslib --
obj/loslib.o : lua-5.1.4/src/loslib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/loslib.c -c $(INCLUDE) -o obj/loslib.o


# Item # 31 -- lparser --
obj/lparser.o : lua-5.1.4/src/lparser.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lparser.c -c $(INCLUDE) -o obj/lparser.o


# Item # 32 -- lstate --
obj/lstate.o : lua-5.1.4/src/lstate.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lstate.c -c $(INCLUDE) -o obj/lstate.o


# Item # 33 -- lstring --
obj/lstring.o : lua-5.1.4/src/lstring.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lstring.c -c $(INCLUDE) -o obj/lstring.o


# Item # 34 -- lstrlib --
obj/lstrlib.o : lua-5.1.4/src/lstrlib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lstrlib.c -c $(INCLUDE) -o obj/lstrlib.o


# Item # 35 -- ltable --
obj/ltable.o : lua-5.1.4/src/ltable.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ltable.c -c $(INCLUDE) -o obj/ltable.o


# Item # 36 -- ltablib --
obj/ltablib.o : lua-5.1.4/src/ltablib.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ltablib.c -c $(INCLUDE) -o obj/ltablib.o


# Item # 37 -- ltm --
obj/ltm.o : lua-5.1.4/src/ltm.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/ltm.c -c $(INCLUDE) -o obj/ltm.o


# Item # 38 -- lundump --
obj/lundump.o : lua-5.1.4/src/lundump.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lundump.c -c $(INCLUDE) -o obj/lundump.o


# Item # 39 -- lvm --
obj/lvm.o : lua-5.1.4/src/lvm.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lvm.c -c $(INCLUDE) -o obj/lvm.o


# Item # 40 -- lzio --
obj/lzio.o : lua-5.1.4/src/lzio.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/lzio.c -c $(INCLUDE) -o obj/lzio.o


# Item # 41 -- print --
obj/print.o : lua-5.1.4/src/print.c
	$(CC) $(CC_OPTIONS) lua-5.1.4/src/print.c -c $(INCLUDE) -o obj/print.o


# Item # 42 -- rest --
obj/rest.o : luasupport/HTTP/rest/rest.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/rest/rest.c -c $(INCLUDE) -o obj/rest.o


# Item # 43 -- restclient --
obj/restclient.o : luasupport/HTTP/rest/restclient.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/rest/restclient.c -c $(INCLUDE) -o obj/restclient.o


# Item # 44 -- restcom --
obj/restcom.o : luasupport/HTTP/COMS/restcom.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/COMS/restcom.c -c $(INCLUDE) -o obj/restcom.o


# Item # 45 -- restcomQ --
obj/restcomQ.o : luasupport/HTTP/COMS/restcomQ.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/COMS/restcomQ.c -c $(INCLUDE) -o obj/restcomQ.o


# Item # 46 -- httplib --
obj/httplib.o : luasupport/HTTP/httplib.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/httplib.c -c $(INCLUDE) -o obj/httplib.o


# Item # 47 -- lua_kbd --
obj/lua_kbd.o : luasupport/kdb/lua_kbd.c
	$(CC) $(CC_OPTIONS) luasupport/kdb/lua_kbd.c -c $(INCLUDE) -o obj/lua_kbd.o


# Item # 48 -- tgkbhit --
obj/tgkbhit.o : luasupport/kdb/Unix/tgkbhit.c
	$(CC) $(CC_OPTIONS) luasupport/kdb/Unix/tgkbhit.c -c $(INCLUDE) -o obj/tgkbhit.o


# Item # 49 -- sysop --
obj/sysop.o : luasupport/sysop.c
	$(CC) $(CC_OPTIONS) luasupport/sysop.c -c $(INCLUDE) -o obj/sysop.o


# Item # 50 -- lua_timer --
obj/lua_timer.o : luasupport/timer/lua_timer.c
	$(CC) $(CC_OPTIONS) luasupport/timer/lua_timer.c -c $(INCLUDE) -o obj/lua_timer.o


# Item # 51 -- lua_firenet --
obj/lua_firenet.o : luasupport/firenet/lua_firenet.c
	$(CC) $(CC_OPTIONS) luasupport/firenet/lua_firenet.c -c $(INCLUDE) -o obj/lua_firenet.o


# Item # 52 -- packet_lua --
obj/packet_lua.o : luasupport/firenet/packet_lua.c
	$(CC) $(CC_OPTIONS) luasupport/firenet/packet_lua.c -c $(INCLUDE) -o obj/packet_lua.o


# Item # 53 -- firenetlog --
obj/firenetlog.o : Logging/firenetlog.c
	$(CC) $(CC_OPTIONS) Logging/firenetlog.c -c $(INCLUDE) -o obj/firenetlog.o


# Item # 54 -- logmap --
obj/logmap.o : Node/parent/logmap.c
	$(CC) $(CC_OPTIONS) Node/parent/logmap.c -c $(INCLUDE) -o obj/logmap.o


# Item # 55 -- connection --
obj/connection.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/connection.c -c $(INCLUDE) -o obj/connection.o


# Item # 56 -- daemon --
obj/daemon.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/daemon.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/daemon.c -c $(INCLUDE) -o obj/daemon.o


# Item # 57 -- internal --
obj/internal.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/internal.c -c $(INCLUDE) -o obj/internal.o


# Item # 58 -- memorypool --
obj/memorypool.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/memorypool.c -c $(INCLUDE) -o obj/memorypool.o


# Item # 59 -- postprocessor --
obj/postprocessor.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/postprocessor.c -c $(INCLUDE) -o obj/postprocessor.o


# Item # 60 -- reason_phrase --
obj/reason_phrase.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/reason_phrase.c -c $(INCLUDE) -o obj/reason_phrase.o


# Item # 61 -- response --
obj/response.o : luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.c
	$(CC) $(CC_OPTIONS) luasupport/HTTP/libmicrohttpd-0.9.0/src/daemon/response.c -c $(INCLUDE) -o obj/response.o


# Item # 62 -- phy --
obj/phy.o : Network/phy.c
	$(CC) $(CC_OPTIONS) Network/phy.c -c $(INCLUDE) -o obj/phy.o


# Item # 63 -- sim_phy --
obj/sim_phy.o : Network/Simulation/sim_phy.c
	$(CC) $(CC_OPTIONS) Network/Simulation/sim_phy.c -c $(INCLUDE) -o obj/sim_phy.o


# Item # 64 -- real_phy --
obj/real_phy.o : Network/Real/real_phy.c
	$(CC) $(CC_OPTIONS) Network/Real/real_phy.c -c $(INCLUDE) -o obj/real_phy.o


# Item # 65 -- linserial --
obj/linserial.o : Network/Real/SERIAL/Linux/linserial.c
	$(CC) $(CC_OPTIONS) Network/Real/SERIAL/Linux/linserial.c -c $(INCLUDE) -o obj/linserial.o


# Item # 66 -- child_cmd --
obj/child_cmd.o : Node/node/child_cmd.c
	$(CC) $(CC_OPTIONS) Node/node/child_cmd.c -c $(INCLUDE) -o obj/child_cmd.o


# Item # 67 -- child --
obj/child.o : Node/node/child.c
	$(CC) $(CC_OPTIONS) Node/node/child.c -c $(INCLUDE) -o obj/child.o


##### END RUN ####

Added obj/marker.



>
1
sfsfsd